From 1808198dc6099491b85392b61a4d830cf2479b04 Mon Sep 17 00:00:00 2001 From: Dan Popescu Date: Thu, 1 Jan 1970 00:00:00 +0000 Subject: [PATCH] gitpkg --- LICENSE | 21 + README.md | 47 + dist/api-list.json | 154 + dist/api/AddressbarColor.json | 22 + dist/api/AppFullscreen.json | 72 + dist/api/AppVisibility.json | 15 + dist/api/BottomSheet.json | 213 + dist/api/ClosePopup.json | 21 + dist/api/Cookies.json | 247 + dist/api/Dark.json | 51 + dist/api/Dialog.json | 500 + dist/api/GoBack.json | 27 + dist/api/Interaction.json | 70 + dist/api/Intersection.json | 280 + dist/api/KeyGroupNavigation.json | 46 + dist/api/Loading.json | 289 + dist/api/LoadingBar.json | 62 + dist/api/LocalStorage.json | 267 + dist/api/Meta.json | 6 + dist/api/Morph.json | 200 + dist/api/Mutation.json | 129 + dist/api/Notify.json | 1323 + dist/api/Platform.json | 70 + dist/api/QAjaxBar.json | 122 + dist/api/QAvatar.json | 77 + dist/api/QBadge.json | 85 + dist/api/QBanner.json | 45 + dist/api/QBar.json | 28 + dist/api/QBreadcrumbs.json | 90 + dist/api/QBreadcrumbsEl.json | 160 + dist/api/QBtn.json | 359 + dist/api/QBtnDropdown.json | 551 + dist/api/QBtnGroup.json | 64 + dist/api/QBtnToggle.json | 259 + dist/api/QCard.json | 49 + dist/api/QCardActions.json | 38 + dist/api/QCardSection.json | 35 + dist/api/QCarousel.json | 410 + dist/api/QCarouselControl.json | 47 + dist/api/QCarouselSlide.json | 49 + dist/api/QChatMessage.json | 132 + dist/api/QCheckbox.json | 203 + dist/api/QChip.json | 214 + dist/api/QCircularProgress.json | 146 + dist/api/QColor.json | 145 + dist/api/QDate.json | 780 + dist/api/QDialog.json | 258 + dist/api/QDrawer.json | 291 + dist/api/QEditor.json | 389 + dist/api/QExpansionItem.json | 436 + dist/api/QFab.json | 359 + dist/api/QFabAction.json | 246 + dist/api/QField.json | 499 + dist/api/QFile.json | 710 + dist/api/QFooter.json | 66 + dist/api/QForm.json | 110 + dist/api/QHeader.json | 75 + dist/api/QIcon.json | 70 + dist/api/QImg.json | 217 + dist/api/QInfiniteScroll.json | 129 + dist/api/QInnerLoading.json | 101 + dist/api/QInput.json | 591 + dist/api/QIntersection.json | 98 + dist/api/QItem.json | 201 + dist/api/QItemLabel.json | 46 + dist/api/QItemSection.json | 43 + dist/api/QKnob.json | 220 + dist/api/QLayout.json | 117 + dist/api/QLinearProgress.json | 100 + dist/api/QList.json | 43 + dist/api/QMarkupTable.json | 63 + dist/api/QMenu.json | 376 + dist/api/QNoSsr.json | 40 + dist/api/QOptionGroup.json | 172 + dist/api/QPage.json | 53 + dist/api/QPageContainer.json | 16 + dist/api/QPageScroller.json | 79 + dist/api/QPageSticky.json | 51 + dist/api/QPagination.json | 377 + dist/api/QParallax.json | 93 + dist/api/QPopupEdit.json | 378 + dist/api/QPopupProxy.json | 147 + dist/api/QPullToRefresh.json | 94 + dist/api/QRadio.json | 154 + dist/api/QRange.json | 761 + dist/api/QRating.json | 197 + dist/api/QResizeObserver.json | 59 + dist/api/QResponsive.json | 32 + dist/api/QRouteTab.json | 227 + dist/api/QScrollArea.json | 378 + dist/api/QScrollObserver.json | 151 + dist/api/QSelect.json | 1482 + dist/api/QSeparator.json | 68 + dist/api/QSkeleton.json | 108 + dist/api/QSlideItem.json | 215 + dist/api/QSlideTransition.json | 38 + dist/api/QSlider.json | 666 + dist/api/QSpace.json | 11 + dist/api/QSpinner.json | 43 + dist/api/QSpinnerAudio.json | 33 + dist/api/QSpinnerBall.json | 33 + dist/api/QSpinnerBars.json | 33 + dist/api/QSpinnerBox.json | 33 + dist/api/QSpinnerClock.json | 33 + dist/api/QSpinnerComment.json | 33 + dist/api/QSpinnerCube.json | 33 + dist/api/QSpinnerDots.json | 33 + dist/api/QSpinnerFacebook.json | 33 + dist/api/QSpinnerGears.json | 33 + dist/api/QSpinnerGrid.json | 33 + dist/api/QSpinnerHearts.json | 33 + dist/api/QSpinnerHourglass.json | 33 + dist/api/QSpinnerInfinity.json | 33 + dist/api/QSpinnerIos.json | 33 + dist/api/QSpinnerOrbit.json | 33 + dist/api/QSpinnerOval.json | 33 + dist/api/QSpinnerPie.json | 33 + dist/api/QSpinnerPuff.json | 33 + dist/api/QSpinnerRadio.json | 33 + dist/api/QSpinnerRings.json | 33 + dist/api/QSpinnerTail.json | 33 + dist/api/QSplitter.json | 161 + dist/api/QStep.json | 163 + dist/api/QStepper.json | 325 + dist/api/QStepperNavigation.json | 16 + dist/api/QTab.json | 118 + dist/api/QTabPanel.json | 40 + dist/api/QTabPanels.json | 201 + dist/api/QTable.json | 2737 + dist/api/QTabs.json | 181 + dist/api/QTd.json | 37 + dist/api/QTh.json | 31 + dist/api/QTime.json | 341 + dist/api/QTimeline.json | 53 + dist/api/QTimelineEntry.json | 104 + dist/api/QToggle.json | 223 + dist/api/QToolbar.json | 23 + dist/api/QToolbarTitle.json | 23 + dist/api/QTooltip.json | 309 + dist/api/QTr.json | 32 + dist/api/QTree.json | 574 + dist/api/QUploader.json | 484 + dist/api/QUploaderAddTrigger.json | 6 + dist/api/QUploaderBase.json | 248 + dist/api/QVideo.json | 86 + dist/api/QVirtualScroll.json | 299 + dist/api/Ripple.json | 118 + dist/api/Screen.json | 208 + dist/api/Scroll.json | 31 + dist/api/ScrollFire.json | 21 + dist/api/SessionStorage.json | 267 + dist/api/TouchHold.json | 90 + dist/api/TouchPan.json | 210 + dist/api/TouchRepeat.json | 171 + dist/api/TouchSwipe.json | 128 + dist/babel-transforms/auto-import.json | 269 + dist/babel-transforms/imports.js | 182 + dist/icon-set/bootstrap-icons.umd.min.js | 6 + dist/icon-set/eva-icons.umd.min.js | 6 + dist/icon-set/fontawesome-v5-pro.umd.min.js | 6 + dist/icon-set/fontawesome-v5.umd.min.js | 6 + dist/icon-set/fontawesome-v6-pro.umd.min.js | 6 + dist/icon-set/fontawesome-v6.umd.min.js | 6 + dist/icon-set/ionicons-v4.umd.min.js | 6 + dist/icon-set/line-awesome.umd.min.js | 6 + .../material-icons-outlined.umd.min.js | 6 + dist/icon-set/material-icons-round.umd.min.js | 6 + dist/icon-set/material-icons-sharp.umd.min.js | 6 + dist/icon-set/material-icons.umd.min.js | 6 + .../material-symbols-outlined.umd.min.js | 6 + .../material-symbols-rounded.umd.min.js | 6 + .../material-symbols-sharp.umd.min.js | 6 + dist/icon-set/mdi-v3.umd.min.js | 6 + dist/icon-set/mdi-v4.umd.min.js | 6 + dist/icon-set/mdi-v5.umd.min.js | 6 + dist/icon-set/mdi-v6.umd.min.js | 6 + dist/icon-set/svg-bootstrap-icons.umd.min.js | 6 + dist/icon-set/svg-eva-icons.umd.min.js | 6 + dist/icon-set/svg-fontawesome-v5.umd.min.js | 6 + dist/icon-set/svg-fontawesome-v6.umd.min.js | 6 + dist/icon-set/svg-ionicons-v4.umd.min.js | 6 + dist/icon-set/svg-ionicons-v5.umd.min.js | 6 + dist/icon-set/svg-ionicons-v6.umd.min.js | 6 + dist/icon-set/svg-line-awesome.umd.min.js | 6 + .../svg-material-icons-outlined.umd.min.js | 6 + .../svg-material-icons-round.umd.min.js | 6 + .../svg-material-icons-sharp.umd.min.js | 6 + dist/icon-set/svg-material-icons.umd.min.js | 6 + .../svg-material-symbols-outlined.umd.min.js | 6 + .../svg-material-symbols-rounded.umd.min.js | 6 + .../svg-material-symbols-sharp.umd.min.js | 6 + dist/icon-set/svg-mdi-v4.umd.min.js | 6 + dist/icon-set/svg-mdi-v5.umd.min.js | 6 + dist/icon-set/svg-mdi-v6.umd.min.js | 6 + dist/icon-set/svg-themify.umd.min.js | 6 + dist/icon-set/themify.umd.min.js | 6 + dist/lang/ar.umd.min.js | 6 + dist/lang/az-latn.umd.min.js | 6 + dist/lang/bg.umd.min.js | 6 + dist/lang/ca.umd.min.js | 6 + dist/lang/cs.umd.min.js | 6 + dist/lang/da.umd.min.js | 6 + dist/lang/de.umd.min.js | 6 + dist/lang/el.umd.min.js | 6 + dist/lang/en-gb.umd.min.js | 6 + dist/lang/en-us.umd.min.js | 6 + dist/lang/eo.umd.min.js | 6 + dist/lang/es.umd.min.js | 6 + dist/lang/et.umd.min.js | 6 + dist/lang/eu.umd.min.js | 6 + dist/lang/fa-ir.umd.min.js | 6 + dist/lang/fa.umd.min.js | 6 + dist/lang/fi.umd.min.js | 6 + dist/lang/fr.umd.min.js | 6 + dist/lang/gn.umd.min.js | 6 + dist/lang/he.umd.min.js | 6 + dist/lang/hr.umd.min.js | 6 + dist/lang/hu.umd.min.js | 6 + dist/lang/id.umd.min.js | 6 + dist/lang/is.umd.min.js | 6 + dist/lang/it.umd.min.js | 6 + dist/lang/ja.umd.min.js | 6 + dist/lang/km.umd.min.js | 6 + dist/lang/ko-kr.umd.min.js | 6 + dist/lang/kur-ckb.umd.min.js | 6 + dist/lang/kz.umd.min.js | 6 + dist/lang/lu.umd.min.js | 6 + dist/lang/lv.umd.min.js | 6 + dist/lang/ml.umd.min.js | 6 + dist/lang/mm.umd.min.js | 6 + dist/lang/ms.umd.min.js | 6 + dist/lang/my.umd.min.js | 6 + dist/lang/nb-no.umd.min.js | 6 + dist/lang/nl.umd.min.js | 6 + dist/lang/pl.umd.min.js | 6 + dist/lang/pt-br.umd.min.js | 6 + dist/lang/pt.umd.min.js | 6 + dist/lang/ro.umd.min.js | 6 + dist/lang/ru.umd.min.js | 6 + dist/lang/sk.umd.min.js | 6 + dist/lang/sl.umd.min.js | 6 + dist/lang/sm.umd.min.js | 6 + dist/lang/sr.umd.min.js | 6 + dist/lang/sv.umd.min.js | 6 + dist/lang/ta.umd.min.js | 6 + dist/lang/th.umd.min.js | 6 + dist/lang/tr.umd.min.js | 6 + dist/lang/ug.umd.min.js | 6 + dist/lang/uk.umd.min.js | 6 + dist/lang/uz-Cyrl.umd.min.js | 6 + dist/lang/uz-Latn.umd.min.js | 6 + dist/lang/vi.umd.min.js | 6 + dist/lang/zh-hans.umd.min.js | 6 + dist/lang/zh-hant.umd.min.js | 6 + dist/quasar.addon.css | 5121 ++ dist/quasar.addon.min.css | 1 + dist/quasar.addon.rtl.css | 5901 +++ dist/quasar.addon.rtl.min.css | 1 + dist/quasar.common.js | 6 + dist/quasar.css | 12621 +++++ dist/quasar.esm.js | 6 + dist/quasar.ie.polyfills.js | 6 + dist/quasar.ie.polyfills.umd.min.js | 6 + dist/quasar.min.css | 1 + dist/quasar.rtl.css | 15097 ++++++ dist/quasar.rtl.min.css | 1 + dist/quasar.sass | 8123 +++ dist/quasar.styl | 8176 +++ dist/quasar.umd.js | 43818 ++++++++++++++++ dist/quasar.umd.min.js | 6 + dist/quasar.umd.modern.js | 43189 +++++++++++++++ dist/quasar.umd.modern.min.js | 6 + dist/transform-asset-urls.json | 38 + dist/types/api.d.ts | 2 + dist/types/api/cookies.d.ts | 1 + dist/types/api/web-storage.d.ts | 30 + dist/types/extras.d.ts | 3 + dist/types/extras/animations.d.ts | 87 + dist/types/extras/fonts.d.ts | 1 + dist/types/extras/icon-set.d.ts | 131 + dist/types/feature-flag.d.ts | 58 + dist/types/globals.d.ts | 76 + dist/types/index.d.ts | 9485 ++++ dist/types/lang.d.ts | 131 + dist/types/plugin.d.ts | 17 + dist/types/shim-icon-set.d.ts | 7 + dist/types/shim-lang.d.ts | 7 + dist/types/ts-helpers.d.ts | 14 + dist/types/tsconfig.json | 7 + dist/types/typings.json | 4 + dist/types/utils.d.ts | 67 + dist/types/utils/colors.d.ts | 30 + dist/types/utils/date.d.ts | 64 + dist/types/utils/dom.d.ts | 14 + dist/types/utils/event.d.ts | 30 + dist/types/utils/format.d.ts | 7 + dist/types/utils/is.d.ts | 67 + dist/types/utils/run-sequential-promises.d.ts | 119 + dist/types/utils/scroll.d.ts | 23 + dist/types/vue.d.ts | 7 + dist/vetur/quasar-attributes.json | 5990 +++ dist/vetur/quasar-tags.json | 2110 + dist/web-types/web-types.json | 22087 ++++++++ icon-set/bootstrap-icons.js | 136 + icon-set/eva-icons.js | 186 + icon-set/fontawesome-v5-pro.js | 128 + icon-set/fontawesome-v5.js | 128 + icon-set/fontawesome-v6-pro.js | 128 + icon-set/fontawesome-v6.js | 128 + icon-set/ionicons-v4.js | 180 + icon-set/line-awesome.js | 128 + icon-set/material-icons-outlined.js | 128 + icon-set/material-icons-round.js | 128 + icon-set/material-icons-sharp.js | 128 + icon-set/material-icons.js | 128 + icon-set/material-symbols-outlined.js | 128 + icon-set/material-symbols-rounded.js | 128 + icon-set/material-symbols-sharp.js | 128 + icon-set/mdi-v3.js | 141 + icon-set/mdi-v4.js | 141 + icon-set/mdi-v5.js | 141 + icon-set/mdi-v6.js | 141 + icon-set/svg-bootstrap-icons.js | 211 + icon-set/svg-eva-icons.js | 234 + icon-set/svg-fontawesome-v5.js | 198 + icon-set/svg-fontawesome-v6.js | 198 + icon-set/svg-ionicons-v4.js | 235 + icon-set/svg-ionicons-v5.js | 225 + icon-set/svg-ionicons-v6.js | 225 + icon-set/svg-line-awesome.js | 198 + icon-set/svg-material-icons-outlined.js | 203 + icon-set/svg-material-icons-round.js | 203 + icon-set/svg-material-icons-sharp.js | 203 + icon-set/svg-material-icons.js | 203 + icon-set/svg-material-symbols-outlined.js | 202 + icon-set/svg-material-symbols-rounded.js | 202 + icon-set/svg-material-symbols-sharp.js | 202 + icon-set/svg-mdi-v4.js | 218 + icon-set/svg-mdi-v5.js | 225 + icon-set/svg-mdi-v6.js | 225 + icon-set/svg-themify.js | 232 + icon-set/themify.js | 169 + lang/ar.js | 100 + lang/az-latn.js | 95 + lang/bg.js | 95 + lang/ca.js | 95 + lang/cs.js | 106 + lang/da.js | 95 + lang/de.js | 95 + lang/el.js | 95 + lang/en-gb.js | 95 + lang/en-us.js | 95 + lang/eo.js | 95 + lang/es.js | 95 + lang/et.js | 95 + lang/eu.js | 95 + lang/fa-ir.js | 104 + lang/fa.js | 104 + lang/fi.js | 100 + lang/fr.js | 100 + lang/gn.js | 95 + lang/he.js | 96 + lang/hr.js | 95 + lang/hu.js | 95 + lang/id.js | 95 + lang/index.json | 234 + lang/is.js | 95 + lang/it.js | 95 + lang/ja.js | 100 + lang/km.js | 95 + lang/ko-kr.js | 95 + lang/kur-ckb.js | 105 + lang/kz.js | 99 + lang/lu.js | 95 + lang/lv.js | 95 + lang/ml.js | 99 + lang/mm.js | 95 + lang/ms.js | 95 + lang/my.js | 98 + lang/nb-no.js | 96 + lang/nl.js | 95 + lang/pl.js | 95 + lang/pt-br.js | 95 + lang/pt.js | 95 + lang/ro.js | 95 + lang/ru.js | 99 + lang/sk.js | 95 + lang/sl.js | 95 + lang/sm.js | 95 + lang/sr.js | 95 + lang/sv.js | 95 + lang/ta.js | 95 + lang/th.js | 95 + lang/tr.js | 93 + lang/ug.js | 99 + lang/uk.js | 99 + lang/uz-Cyrl.js | 95 + lang/uz-Latn.js | 99 + lang/vi.js | 95 + lang/zh-hans.js | 98 + lang/zh-hant.js | 98 + package.json | 101 + src/api-file-example.json | 100 + src/api.extends.json | 254 + src/body.js | 112 + src/components.js | 79 + src/components/ajax-bar/QAjaxBar.js | 276 + src/components/ajax-bar/QAjaxBar.json | 109 + src/components/ajax-bar/QAjaxBar.sass | 27 + src/components/ajax-bar/QAjaxBar.styl | 27 + src/components/ajax-bar/index.js | 5 + src/components/avatar/QAvatar.js | 60 + src/components/avatar/QAvatar.json | 46 + src/components/avatar/QAvatar.sass | 22 + src/components/avatar/QAvatar.styl | 22 + src/components/avatar/index.js | 5 + src/components/badge/QBadge.js | 70 + src/components/badge/QBadge.json | 71 + src/components/badge/QBadge.sass | 34 + src/components/badge/QBadge.styl | 34 + src/components/badge/index.js | 5 + src/components/banner/QBanner.js | 52 + src/components/banner/QBanner.json | 44 + src/components/banner/QBanner.sass | 37 + src/components/banner/QBanner.styl | 37 + src/components/banner/index.js | 5 + src/components/bar/QBar.js | 34 + src/components/bar/QBar.json | 26 + src/components/bar/QBar.sass | 35 + src/components/bar/QBar.styl | 35 + src/components/bar/index.js | 5 + src/components/breadcrumbs/QBreadcrumbs.js | 95 + src/components/breadcrumbs/QBreadcrumbs.json | 63 + src/components/breadcrumbs/QBreadcrumbs.sass | 13 + src/components/breadcrumbs/QBreadcrumbs.styl | 13 + src/components/breadcrumbs/QBreadcrumbsEl.js | 57 + .../breadcrumbs/QBreadcrumbsEl.json | 86 + src/components/breadcrumbs/index.js | 7 + src/components/btn-dropdown/QBtnDropdown.js | 254 + src/components/btn-dropdown/QBtnDropdown.json | 168 + src/components/btn-dropdown/QBtnDropdown.sass | 17 + src/components/btn-dropdown/QBtnDropdown.styl | 17 + src/components/btn-dropdown/index.js | 5 + src/components/btn-group/QBtnGroup.js | 40 + src/components/btn-group/QBtnGroup.json | 70 + src/components/btn-group/QBtnGroup.sass | 91 + src/components/btn-group/QBtnGroup.styl | 91 + src/components/btn-group/index.js | 5 + src/components/btn-toggle/QBtnToggle.js | 169 + src/components/btn-toggle/QBtnToggle.json | 199 + src/components/btn-toggle/QBtnToggle.sass | 2 + src/components/btn-toggle/QBtnToggle.styl | 2 + src/components/btn-toggle/index.js | 5 + src/components/btn/QBtn.js | 331 + src/components/btn/QBtn.json | 112 + src/components/btn/QBtn.sass | 160 + src/components/btn/QBtn.styl | 160 + src/components/btn/index.js | 5 + src/components/card/QCard.js | 36 + src/components/card/QCard.json | 40 + src/components/card/QCard.sass | 99 + src/components/card/QCard.styl | 99 + src/components/card/QCardActions.js | 30 + src/components/card/QCardActions.json | 31 + src/components/card/QCardSection.js | 30 + src/components/card/QCardSection.json | 31 + src/components/card/index.js | 9 + src/components/carousel/QCarousel.js | 259 + src/components/carousel/QCarousel.json | 170 + src/components/carousel/QCarousel.sass | 128 + src/components/carousel/QCarousel.styl | 128 + src/components/carousel/QCarouselControl.js | 49 + src/components/carousel/QCarouselControl.json | 38 + src/components/carousel/QCarouselSlide.js | 34 + src/components/carousel/QCarouselSlide.json | 40 + src/components/carousel/index.js | 9 + src/components/chat/QChatMessage.js | 171 + src/components/chat/QChatMessage.json | 122 + src/components/chat/QChatMessage.sass | 75 + src/components/chat/QChatMessage.styl | 75 + src/components/chat/index.js | 5 + src/components/checkbox/QCheckbox.js | 69 + src/components/checkbox/QCheckbox.json | 24 + src/components/checkbox/QCheckbox.sass | 135 + src/components/checkbox/QCheckbox.styl | 135 + src/components/checkbox/index.js | 5 + src/components/chip/QChip.js | 214 + src/components/chip/QChip.json | 150 + src/components/chip/QChip.sass | 121 + src/components/chip/QChip.styl | 121 + src/components/chip/index.js | 5 + .../circular-progress/QCircularProgress.js | 191 + .../circular-progress/QCircularProgress.json | 113 + .../circular-progress/QCircularProgress.sass | 38 + .../circular-progress/QCircularProgress.styl | 38 + src/components/circular-progress/index.js | 5 + src/components/color/QColor.js | 898 + src/components/color/QColor.json | 110 + src/components/color/QColor.sass | 190 + src/components/color/QColor.styl | 190 + src/components/color/index.js | 5 + src/components/date/QDate.js | 1589 + src/components/date/QDate.json | 667 + src/components/date/QDate.sass | 269 + src/components/date/QDate.styl | 269 + src/components/date/index.js | 5 + .../dialog-bottom-sheet/BottomSheet.js | 183 + .../dialog-bottom-sheet/BottomSheet.sass | 37 + .../dialog-bottom-sheet/BottomSheet.styl | 37 + src/components/dialog-plugin/DialogPlugin.js | 332 + .../dialog-plugin/DialogPlugin.sass | 11 + .../dialog-plugin/DialogPlugin.styl | 11 + src/components/dialog/QDialog.js | 323 + src/components/dialog/QDialog.json | 148 + src/components/dialog/QDialog.sass | 123 + src/components/dialog/QDialog.styl | 124 + src/components/dialog/index.js | 5 + src/components/drawer/QDrawer.js | 749 + src/components/drawer/QDrawer.json | 187 + src/components/drawer/index.js | 5 + src/components/editor/QEditor.js | 532 + src/components/editor/QEditor.json | 305 + src/components/editor/QEditor.sass | 107 + src/components/editor/QEditor.styl | 107 + src/components/editor/editor-caret.js | 365 + src/components/editor/editor-utils.js | 322 + src/components/editor/index.js | 5 + .../expansion-item/QExpansionItem.js | 365 + .../expansion-item/QExpansionItem.json | 254 + .../expansion-item/QExpansionItem.sass | 71 + .../expansion-item/QExpansionItem.styl | 71 + src/components/expansion-item/index.js | 5 + src/components/fab/QFab.js | 179 + src/components/fab/QFab.json | 110 + src/components/fab/QFab.sass | 154 + src/components/fab/QFab.styl | 154 + src/components/fab/QFabAction.js | 110 + src/components/fab/QFabAction.json | 70 + src/components/fab/index.js | 7 + src/components/field/QField.js | 662 + src/components/field/QField.json | 102 + src/components/field/QField.sass | 631 + src/components/field/QField.styl | 631 + src/components/field/__QField.json | 313 + src/components/field/index.js | 5 + src/components/file/QFile.js | 279 + src/components/file/QFile.json | 182 + src/components/file/QFile.sass | 20 + src/components/file/QFile.styl | 20 + src/components/file/index.js | 5 + src/components/footer/QFooter.js | 227 + src/components/footer/QFooter.json | 64 + src/components/footer/index.js | 5 + src/components/form/QForm.js | 180 + src/components/form/QForm.json | 127 + src/components/form/QForm.sass | 2 + src/components/form/QForm.styl | 2 + src/components/form/index.js | 5 + src/components/header/QHeader.js | 203 + src/components/header/QHeader.json | 74 + src/components/header/index.js | 5 + src/components/icon/QIcon.js | 241 + src/components/icon/QIcon.json | 47 + src/components/icon/QIcon.sass | 42 + src/components/icon/QIcon.styl | 42 + src/components/icon/index.js | 5 + src/components/img/QImg.js | 319 + src/components/img/QImg.json | 207 + src/components/img/QImg.sass | 37 + src/components/img/QImg.styl | 37 + src/components/img/index.js | 5 + .../infinite-scroll/QInfiniteScroll.js | 238 + .../infinite-scroll/QInfiniteScroll.json | 116 + src/components/infinite-scroll/index.js | 5 + src/components/inner-loading/QInnerLoading.js | 88 + .../inner-loading/QInnerLoading.json | 78 + .../inner-loading/QInnerLoading.sass | 12 + .../inner-loading/QInnerLoading.styl | 12 + src/components/inner-loading/index.js | 5 + src/components/input/QInput.js | 389 + src/components/input/QInput.json | 140 + src/components/input/QInput.sass | 58 + src/components/input/QInput.styl | 58 + src/components/input/index.js | 5 + src/components/intersection/QIntersection.js | 99 + .../intersection/QIntersection.json | 88 + .../intersection/QIntersection.sass | 2 + .../intersection/QIntersection.styl | 2 + src/components/intersection/index.js | 5 + src/components/item/QItem.js | 160 + src/components/item/QItem.json | 123 + src/components/item/QItem.sass | 141 + src/components/item/QItem.styl | 141 + src/components/item/QItemLabel.js | 49 + src/components/item/QItemLabel.json | 42 + src/components/item/QItemSection.js | 43 + src/components/item/QItemSection.json | 47 + src/components/item/QList.js | 40 + src/components/item/QList.json | 41 + src/components/item/index.js | 13 + src/components/knob/QKnob.js | 303 + src/components/knob/QKnob.json | 163 + src/components/knob/QKnob.sass | 21 + src/components/knob/QKnob.styl | 21 + src/components/knob/index.js | 5 + src/components/layout/QLayout.js | 275 + src/components/layout/QLayout.json | 106 + src/components/layout/QLayout.sass | 221 + src/components/layout/QLayout.styl | 221 + src/components/layout/index.js | 5 + .../linear-progress/QLinearProgress.js | 134 + .../linear-progress/QLinearProgress.json | 82 + .../linear-progress/QLinearProgress.sass | 78 + .../linear-progress/QLinearProgress.styl | 78 + src/components/linear-progress/index.js | 5 + src/components/markup-table/QMarkupTable.js | 47 + src/components/markup-table/QMarkupTable.json | 52 + src/components/markup-table/index.js | 5 + src/components/menu/ClickOutside.js | 144 + src/components/menu/QMenu.js | 372 + src/components/menu/QMenu.json | 184 + src/components/menu/QMenu.sass | 18 + src/components/menu/QMenu.styl | 18 + src/components/menu/index.js | 5 + src/components/no-ssr/QNoSsr.js | 45 + src/components/no-ssr/QNoSsr.json | 34 + src/components/no-ssr/index.js | 5 + src/components/option-group/QOptionGroup.js | 145 + src/components/option-group/QOptionGroup.json | 139 + src/components/option-group/QOptionGroup.sass | 5 + src/components/option-group/QOptionGroup.styl | 5 + src/components/option-group/index.js | 5 + src/components/page-scroller/QPageScroller.js | 126 + .../page-scroller/QPageScroller.json | 41 + src/components/page-scroller/index.js | 5 + src/components/page-sticky/QPageSticky.js | 135 + src/components/page-sticky/QPageSticky.json | 43 + src/components/page-sticky/index.js | 5 + src/components/page/QPage.js | 66 + src/components/page/QPage.json | 49 + src/components/page/QPageContainer.js | 52 + src/components/page/QPageContainer.json | 15 + src/components/page/index.js | 7 + src/components/pagination/QPagination.js | 507 + src/components/pagination/QPagination.json | 293 + src/components/pagination/QPagination.sass | 22 + src/components/pagination/QPagination.styl | 22 + src/components/pagination/index.js | 5 + src/components/parallax/QParallax.js | 174 + src/components/parallax/QParallax.json | 79 + src/components/parallax/QParallax.sass | 15 + src/components/parallax/QParallax.styl | 15 + src/components/parallax/index.js | 5 + src/components/popup-edit/QPopupEdit.js | 229 + src/components/popup-edit/QPopupEdit.json | 321 + src/components/popup-edit/QPopupEdit.sass | 8 + src/components/popup-edit/QPopupEdit.styl | 8 + src/components/popup-edit/index.js | 5 + src/components/popup-proxy/QPopupProxy.js | 130 + src/components/popup-proxy/QPopupProxy.json | 65 + src/components/popup-proxy/index.js | 5 + .../pull-to-refresh/QPullToRefresh.js | 222 + .../pull-to-refresh/QPullToRefresh.json | 71 + .../pull-to-refresh/QPullToRefresh.sass | 15 + .../pull-to-refresh/QPullToRefresh.styl | 15 + src/components/pull-to-refresh/index.js | 5 + src/components/radio/QRadio.js | 203 + src/components/radio/QRadio.json | 117 + src/components/radio/QRadio.sass | 115 + src/components/radio/QRadio.styl | 115 + src/components/radio/index.js | 5 + src/components/range/QRange.js | 519 + src/components/range/QRange.json | 104 + src/components/range/index.js | 5 + src/components/rating/QRating.js | 261 + src/components/rating/QRating.json | 138 + src/components/rating/QRating.sass | 31 + src/components/rating/QRating.styl | 31 + src/components/rating/index.js | 5 + .../resize-observer/QResizeObserver.js | 145 + .../resize-observer/QResizeObserver.json | 51 + src/components/resize-observer/index.js | 5 + src/components/responsive/QResponsive.js | 29 + src/components/responsive/QResponsive.json | 19 + src/components/responsive/QResponsive.sass | 19 + src/components/responsive/QResponsive.styl | 19 + src/components/responsive/index.js | 5 + src/components/scroll-area/QScrollArea.js | 575 + src/components/scroll-area/QScrollArea.json | 333 + src/components/scroll-area/QScrollArea.sass | 45 + src/components/scroll-area/QScrollArea.styl | 45 + src/components/scroll-area/index.js | 5 + .../scroll-observer/QScrollObserver.js | 136 + .../scroll-observer/QScrollObserver.json | 119 + src/components/scroll-observer/index.js | 5 + src/components/select/QSelect.js | 1628 + src/components/select/QSelect.json | 841 + src/components/select/QSelect.sass | 97 + src/components/select/QSelect.styl | 97 + src/components/select/index.js | 5 + src/components/separator/QSeparator.js | 94 + src/components/separator/QSeparator.json | 47 + src/components/separator/QSeparator.sass | 36 + src/components/separator/QSeparator.styl | 36 + src/components/separator/index.js | 5 + src/components/skeleton/QSkeleton.js | 70 + src/components/skeleton/QSkeleton.json | 82 + src/components/skeleton/QSkeleton.sass | 153 + src/components/skeleton/QSkeleton.styl | 153 + src/components/skeleton/index.js | 5 + src/components/slide-item/QSlideItem.js | 211 + src/components/slide-item/QSlideItem.json | 198 + src/components/slide-item/QSlideItem.sass | 41 + src/components/slide-item/QSlideItem.styl | 41 + src/components/slide-item/index.js | 5 + .../slide-transition/QSlideTransition.js | 115 + .../slide-transition/QSlideTransition.json | 39 + src/components/slide-transition/index.js | 5 + src/components/slider/QSlider.js | 203 + src/components/slider/QSlider.json | 31 + src/components/slider/QSlider.sass | 309 + src/components/slider/QSlider.styl | 309 + src/components/slider/index.js | 5 + src/components/slider/slider-utils.js | 662 + src/components/slider/slider-utils.json | 546 + src/components/space/QSpace.js | 16 + src/components/space/QSpace.json | 9 + src/components/space/QSpace.sass | 2 + src/components/space/QSpace.styl | 2 + src/components/space/index.js | 5 + src/components/spinner/QSpinner.js | 43 + src/components/spinner/QSpinner.json | 25 + src/components/spinner/QSpinner.sass | 34 + src/components/spinner/QSpinner.styl | 34 + src/components/spinner/QSpinnerAudio.js | 107 + src/components/spinner/QSpinnerAudio.json | 3 + src/components/spinner/QSpinnerBall.js | 125 + src/components/spinner/QSpinnerBall.json | 3 + src/components/spinner/QSpinnerBars.js | 174 + src/components/spinner/QSpinnerBars.json | 3 + src/components/spinner/QSpinnerBox.js | 70 + src/components/spinner/QSpinnerBox.json | 3 + src/components/spinner/QSpinnerClock.js | 83 + src/components/spinner/QSpinnerClock.json | 3 + src/components/spinner/QSpinnerComment.js | 101 + src/components/spinner/QSpinnerComment.json | 3 + src/components/spinner/QSpinnerCube.js | 161 + src/components/spinner/QSpinnerCube.json | 3 + src/components/spinner/QSpinnerDots.js | 123 + src/components/spinner/QSpinnerDots.json | 3 + src/components/spinner/QSpinnerFacebook.js | 122 + src/components/spinner/QSpinnerFacebook.json | 3 + src/components/spinner/QSpinnerGears.js | 72 + src/components/spinner/QSpinnerGears.json | 3 + src/components/spinner/QSpinnerGrid.js | 189 + src/components/spinner/QSpinnerGrid.json | 3 + src/components/spinner/QSpinnerHearts.js | 65 + src/components/spinner/QSpinnerHearts.json | 3 + src/components/spinner/QSpinnerHourglass.js | 142 + src/components/spinner/QSpinnerHourglass.json | 3 + src/components/spinner/QSpinnerInfinity.js | 47 + src/components/spinner/QSpinnerInfinity.json | 3 + src/components/spinner/QSpinnerIos.js | 225 + src/components/spinner/QSpinnerIos.json | 3 + src/components/spinner/QSpinnerOrbit.js | 58 + src/components/spinner/QSpinnerOrbit.json | 3 + src/components/spinner/QSpinnerOval.js | 59 + src/components/spinner/QSpinnerOval.json | 3 + src/components/spinner/QSpinnerPie.js | 98 + src/components/spinner/QSpinnerPie.json | 3 + src/components/spinner/QSpinnerPuff.js | 98 + src/components/spinner/QSpinnerPuff.json | 3 + src/components/spinner/QSpinnerRadio.js | 91 + src/components/spinner/QSpinnerRadio.json | 3 + src/components/spinner/QSpinnerRings.js | 129 + src/components/spinner/QSpinnerRings.json | 3 + src/components/spinner/QSpinnerTail.js | 102 + src/components/spinner/QSpinnerTail.json | 3 + src/components/spinner/__spinner-mixin.json | 17 + src/components/spinner/index.js | 51 + src/components/spinner/spinner-mixin.js | 28 + src/components/splitter/QSplitter.js | 328 + src/components/splitter/QSplitter.json | 140 + src/components/splitter/QSplitter.sass | 59 + src/components/splitter/QSplitter.styl | 59 + src/components/splitter/index.js | 5 + src/components/stepper/QStep.js | 126 + src/components/stepper/QStep.json | 108 + src/components/stepper/QStepper.js | 109 + src/components/stepper/QStepper.json | 115 + src/components/stepper/QStepper.sass | 240 + src/components/stepper/QStepper.styl | 240 + src/components/stepper/QStepperNavigation.js | 18 + .../stepper/QStepperNavigation.json | 15 + src/components/stepper/StepHeader.js | 174 + src/components/stepper/index.js | 9 + src/components/tab-panels/QTabPanel.js | 20 + src/components/tab-panels/QTabPanel.json | 24 + src/components/tab-panels/QTabPanel.sass | 2 + src/components/tab-panels/QTabPanel.styl | 2 + src/components/tab-panels/QTabPanels.js | 27 + src/components/tab-panels/QTabPanels.json | 17 + src/components/tab-panels/index.js | 7 + src/components/table/QTable.js | 394 + src/components/table/QTable.json | 2409 + src/components/table/QTable.sass | 303 + src/components/table/QTable.styl | 303 + src/components/table/QTd.js | 51 + src/components/table/QTd.json | 37 + src/components/table/QTh.js | 73 + src/components/table/QTh.json | 30 + src/components/table/QTr.js | 30 + src/components/table/QTr.json | 31 + src/components/table/get-table-middle.js | 8 + src/components/table/index.js | 11 + src/components/table/table-body.js | 169 + src/components/table/table-bottom.js | 213 + .../table/table-column-selection.js | 81 + src/components/table/table-filter.js | 29 + src/components/table/table-grid.js | 103 + src/components/table/table-header.js | 130 + src/components/table/table-pagination.js | 157 + src/components/table/table-row-expand.js | 54 + src/components/table/table-row-selection.js | 76 + src/components/table/table-sort.js | 117 + src/components/table/table-top.js | 76 + src/components/tabs/QRouteTab.js | 34 + src/components/tabs/QRouteTab.json | 54 + src/components/tabs/QTab.js | 288 + src/components/tabs/QTab.json | 82 + src/components/tabs/QTabs.js | 761 + src/components/tabs/QTabs.json | 155 + src/components/tabs/QTabs.sass | 183 + src/components/tabs/QTabs.styl | 183 + src/components/tabs/index.js | 9 + src/components/time/QTime.js | 947 + src/components/time/QTime.json | 254 + src/components/time/QTime.sass | 196 + src/components/time/QTime.styl | 195 + src/components/time/index.js | 5 + src/components/timeline/QTimeline.js | 50 + src/components/timeline/QTimeline.json | 41 + src/components/timeline/QTimeline.sass | 258 + src/components/timeline/QTimeline.styl | 258 + src/components/timeline/QTimelineEntry.js | 123 + src/components/timeline/QTimelineEntry.json | 89 + src/components/timeline/index.js | 7 + src/components/toggle/QToggle.js | 58 + src/components/toggle/QToggle.json | 43 + src/components/toggle/QToggle.sass | 150 + src/components/toggle/QToggle.styl | 150 + src/components/toggle/index.js | 5 + src/components/toolbar/QToolbar.js | 26 + src/components/toolbar/QToolbar.json | 23 + src/components/toolbar/QToolbar.sass | 25 + src/components/toolbar/QToolbar.styl | 25 + src/components/toolbar/QToolbarTitle.js | 29 + src/components/toolbar/QToolbarTitle.json | 23 + src/components/toolbar/index.js | 7 + src/components/tooltip/QTooltip.js | 298 + src/components/tooltip/QTooltip.json | 132 + src/components/tooltip/QTooltip.sass | 21 + src/components/tooltip/QTooltip.styl | 21 + src/components/tooltip/index.js | 5 + src/components/tree/QTree.js | 717 + src/components/tree/QTree.json | 547 + src/components/tree/QTree.sass | 194 + src/components/tree/QTree.styl | 194 + src/components/tree/index.js | 5 + src/components/uploader/QUploader.js | 9 + src/components/uploader/QUploader.json | 219 + src/components/uploader/QUploader.sass | 151 + src/components/uploader/QUploader.styl | 151 + .../uploader/QUploaderAddTrigger.js | 17 + .../uploader/QUploaderAddTrigger.json | 5 + src/components/uploader/QUploaderBase.js | 458 + src/components/uploader/QUploaderBase.json | 140 + src/components/uploader/index.js | 9 + src/components/uploader/uploader-xhr-mixin.js | 254 + src/components/video/QVideo.js | 63 + src/components/video/QVideo.json | 74 + src/components/video/QVideo.sass | 24 + src/components/video/QVideo.styl | 20 + src/components/video/index.js | 5 + .../virtual-scroll/QVirtualScroll.js | 159 + .../virtual-scroll/QVirtualScroll.json | 99 + .../virtual-scroll/QVirtualScroll.sass | 46 + .../virtual-scroll/QVirtualScroll.styl | 46 + src/components/virtual-scroll/index.js | 5 + src/css/core/animations.sass | 90 + src/css/core/animations.styl | 90 + src/css/core/colors.sass | 1837 + src/css/core/colors.styl | 1837 + src/css/core/dark.sass | 33 + src/css/core/dark.styl | 33 + src/css/core/elevation.sass | 27 + src/css/core/elevation.styl | 27 + src/css/core/flex.sass | 158 + src/css/core/flex.styl | 163 + src/css/core/helpers.sass | 102 + src/css/core/helpers.styl | 102 + src/css/core/mouse.sass | 41 + src/css/core/mouse.styl | 41 + src/css/core/orientation.sass | 21 + src/css/core/orientation.styl | 21 + src/css/core/positioning.sass | 99 + src/css/core/positioning.styl | 99 + src/css/core/size.sass | 75 + src/css/core/size.styl | 73 + src/css/core/touch.sass | 9 + src/css/core/touch.styl | 9 + src/css/core/transitions.sass | 157 + src/css/core/transitions.styl | 157 + src/css/core/typography.sass | 70 + src/css/core/typography.styl | 70 + src/css/core/visibility.sass | 165 + src/css/core/visibility.styl | 164 + src/css/flex-addon.sass | 212 + src/css/flex-addon.styl | 201 + src/css/helpers/math.sass | 42 + src/css/helpers/string.sass | 17 + src/css/index.sass | 105 + src/css/index.styl | 102 + src/css/normalize.sass | 170 + src/css/normalize.styl | 170 + src/css/variables.sass | 565 + src/css/variables.styl | 647 + src/directives.js | 29 + src/directives/ClosePopup.js | 76 + src/directives/ClosePopup.json | 17 + src/directives/GoBack.js | 75 + src/directives/GoBack.json | 23 + src/directives/Intersection.js | 102 + src/directives/Intersection.json | 231 + src/directives/KeyGroupNavigation.js | 345 + src/directives/KeyGroupNavigation.json | 46 + src/directives/Morph.js | 233 + src/directives/Morph.json | 185 + src/directives/Morph.sass | 7 + src/directives/Morph.styl | 7 + src/directives/Mutation.js | 82 + src/directives/Mutation.json | 132 + src/directives/Ripple.js | 242 + src/directives/Ripple.json | 106 + src/directives/Ripple.sass | 30 + src/directives/Ripple.styl | 30 + src/directives/Scroll.js | 62 + src/directives/Scroll.json | 24 + src/directives/ScrollFire.js | 77 + src/directives/ScrollFire.json | 19 + src/directives/TouchHold.js | 197 + src/directives/TouchHold.json | 86 + src/directives/TouchPan.js | 438 + src/directives/TouchPan.json | 196 + src/directives/TouchRepeat.js | 282 + src/directives/TouchRepeat.json | 168 + src/directives/TouchSwipe.js | 294 + src/directives/TouchSwipe.json | 123 + src/history.js | 120 + src/icon-set.js | 45 + src/ie-compat/ie.js | 1409 + src/ie-compat/ie.sass | 171 + src/ie-compat/ie.styl | 177 + src/index.common.js | 27 + src/index.esm.js | 22 + src/index.umd.js | 32 + src/install.js | 75 + src/lang.js | 90 + src/mixins/align.js | 30 + src/mixins/anchor.js | 238 + src/mixins/anchor.json | 29 + src/mixins/attrs.js | 7 + src/mixins/btn.js | 199 + src/mixins/btn.json | 190 + src/mixins/can-render.js | 14 + src/mixins/checkbox.js | 227 + src/mixins/checkbox.json | 153 + src/mixins/dark.js | 20 + src/mixins/datetime.js | 122 + src/mixins/datetime.json | 94 + src/mixins/fab.js | 87 + src/mixins/fab.json | 137 + src/mixins/file.js | 260 + src/mixins/file.json | 108 + src/mixins/focus-wrap.js | 47 + src/mixins/form.js | 40 + src/mixins/form.json | 11 + src/mixins/fullscreen.js | 101 + src/mixins/fullscreen.json | 33 + src/mixins/history.js | 24 + src/mixins/listeners.js | 2 + src/mixins/mask.js | 540 + src/mixins/mask.json | 31 + src/mixins/model-toggle.js | 162 + src/mixins/model-toggle.json | 51 + src/mixins/option-size.js | 9 + src/mixins/panel-child.json | 17 + src/mixins/panel-parent.json | 145 + src/mixins/panel.js | 278 + src/mixins/panel.sass | 11 + src/mixins/panel.styl | 11 + src/mixins/portal.js | 338 + src/mixins/portal.json | 23 + src/mixins/prevent-scroll-ios.md | 58 + src/mixins/prevent-scroll.js | 238 + src/mixins/ratio.js | 15 + src/mixins/ratio.json | 14 + src/mixins/refocus-target.js | 25 + src/mixins/ripple.js | 14 + src/mixins/ripple.json | 11 + src/mixins/router-link.js | 231 + src/mixins/router-link.json | 65 + src/mixins/size.js | 25 + src/mixins/size.json | 10 + src/mixins/tag.js | 8 + src/mixins/tag.json | 10 + src/mixins/timeout.js | 68 + src/mixins/transition.js | 54 + src/mixins/validate.js | 239 + src/mixins/validate.json | 72 + src/mixins/virtual-scroll.js | 779 + src/mixins/virtual-scroll.json | 145 + src/plugins.js | 35 + src/plugins/AddressbarColor.js | 71 + src/plugins/AddressbarColor.json | 21 + src/plugins/AppFullscreen.js | 118 + src/plugins/AppFullscreen.json | 75 + src/plugins/AppVisibility.js | 40 + src/plugins/AppVisibility.json | 16 + src/plugins/BottomSheet.js | 8 + src/plugins/BottomSheet.json | 91 + src/plugins/Cookies.js | 220 + src/plugins/Cookies.json | 227 + src/plugins/Dark.js | 98 + src/plugins/Dark.json | 42 + src/plugins/Dialog.js | 8 + src/plugins/Dialog.json | 348 + src/plugins/Interaction.js | 211 + src/plugins/Interaction.json | 84 + src/plugins/Loading.js | 193 + src/plugins/Loading.json | 216 + src/plugins/Loading.sass | 22 + src/plugins/Loading.styl | 22 + src/plugins/LoadingBar.js | 69 + src/plugins/LoadingBar.json | 66 + src/plugins/LocalStorage.js | 13 + src/plugins/LocalStorage.json | 5 + src/plugins/Meta.js | 318 + src/plugins/Meta.json | 5 + src/plugins/Notify.js | 566 + src/plugins/Notify.json | 993 + src/plugins/Notify.sass | 215 + src/plugins/Notify.styl | 215 + src/plugins/Platform.js | 358 + src/plugins/Platform.json | 73 + src/plugins/Screen.js | 174 + src/plugins/Screen.json | 193 + src/plugins/SessionStorage.js | 13 + src/plugins/SessionStorage.json | 5 + src/ssr-update.js | 36 + src/utils.js | 44 + src/utils/clone.js | 55 + src/utils/colors.js | 325 + src/utils/copy-to-clipboard.js | 29 + src/utils/date.js | 1028 + src/utils/debounce.js | 26 + src/utils/debounced-ref.js | 48 + src/utils/dom.js | 103 + src/utils/event.js | 197 + src/utils/export-file.js | 35 + src/utils/extend.js | 79 + src/utils/format.js | 56 + src/utils/frame-debounce.js | 22 + src/utils/is.js | 148 + src/utils/morph.js | 978 + src/utils/open-url.js | 67 + src/utils/patterns.js | 38 + src/utils/private/cache.js | 56 + src/utils/private/date-persian.js | 278 + src/utils/private/escape-key.js | 41 + src/utils/private/focus-manager.js | 185 + src/utils/private/global-dialog.js | 159 + src/utils/private/global-dialog.json | 124 + src/utils/private/inject-obj-prop.js | 15 + src/utils/private/key-composition.js | 12 + src/utils/private/position-engine.js | 392 + src/utils/private/selection.js | 17 + src/utils/private/slot.js | 36 + src/utils/private/sort.js | 20 + src/utils/private/touch.js | 52 + src/utils/private/vm.js | 22 + src/utils/private/web-storage.js | 137 + src/utils/private/web-storage.json | 238 + src/utils/run-sequential-promises.js | 115 + src/utils/scroll.js | 273 + src/utils/throttle.js | 13 + src/utils/uid.js | 72 + src/vue-plugin.js | 13 + wrappers/index.js | 27 + 1099 files changed, 313621 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 dist/api-list.json create mode 100644 dist/api/AddressbarColor.json create mode 100644 dist/api/AppFullscreen.json create mode 100644 dist/api/AppVisibility.json create mode 100644 dist/api/BottomSheet.json create mode 100644 dist/api/ClosePopup.json create mode 100644 dist/api/Cookies.json create mode 100644 dist/api/Dark.json create mode 100644 dist/api/Dialog.json create mode 100644 dist/api/GoBack.json create mode 100644 dist/api/Interaction.json create mode 100644 dist/api/Intersection.json create mode 100644 dist/api/KeyGroupNavigation.json create mode 100644 dist/api/Loading.json create mode 100644 dist/api/LoadingBar.json create mode 100644 dist/api/LocalStorage.json create mode 100644 dist/api/Meta.json create mode 100644 dist/api/Morph.json create mode 100644 dist/api/Mutation.json create mode 100644 dist/api/Notify.json create mode 100644 dist/api/Platform.json create mode 100644 dist/api/QAjaxBar.json create mode 100644 dist/api/QAvatar.json create mode 100644 dist/api/QBadge.json create mode 100644 dist/api/QBanner.json create mode 100644 dist/api/QBar.json create mode 100644 dist/api/QBreadcrumbs.json create mode 100644 dist/api/QBreadcrumbsEl.json create mode 100644 dist/api/QBtn.json create mode 100644 dist/api/QBtnDropdown.json create mode 100644 dist/api/QBtnGroup.json create mode 100644 dist/api/QBtnToggle.json create mode 100644 dist/api/QCard.json create mode 100644 dist/api/QCardActions.json create mode 100644 dist/api/QCardSection.json create mode 100644 dist/api/QCarousel.json create mode 100644 dist/api/QCarouselControl.json create mode 100644 dist/api/QCarouselSlide.json create mode 100644 dist/api/QChatMessage.json create mode 100644 dist/api/QCheckbox.json create mode 100644 dist/api/QChip.json create mode 100644 dist/api/QCircularProgress.json create mode 100644 dist/api/QColor.json create mode 100644 dist/api/QDate.json create mode 100644 dist/api/QDialog.json create mode 100644 dist/api/QDrawer.json create mode 100644 dist/api/QEditor.json create mode 100644 dist/api/QExpansionItem.json create mode 100644 dist/api/QFab.json create mode 100644 dist/api/QFabAction.json create mode 100644 dist/api/QField.json create mode 100644 dist/api/QFile.json create mode 100644 dist/api/QFooter.json create mode 100644 dist/api/QForm.json create mode 100644 dist/api/QHeader.json create mode 100644 dist/api/QIcon.json create mode 100644 dist/api/QImg.json create mode 100644 dist/api/QInfiniteScroll.json create mode 100644 dist/api/QInnerLoading.json create mode 100644 dist/api/QInput.json create mode 100644 dist/api/QIntersection.json create mode 100644 dist/api/QItem.json create mode 100644 dist/api/QItemLabel.json create mode 100644 dist/api/QItemSection.json create mode 100644 dist/api/QKnob.json create mode 100644 dist/api/QLayout.json create mode 100644 dist/api/QLinearProgress.json create mode 100644 dist/api/QList.json create mode 100644 dist/api/QMarkupTable.json create mode 100644 dist/api/QMenu.json create mode 100644 dist/api/QNoSsr.json create mode 100644 dist/api/QOptionGroup.json create mode 100644 dist/api/QPage.json create mode 100644 dist/api/QPageContainer.json create mode 100644 dist/api/QPageScroller.json create mode 100644 dist/api/QPageSticky.json create mode 100644 dist/api/QPagination.json create mode 100644 dist/api/QParallax.json create mode 100644 dist/api/QPopupEdit.json create mode 100644 dist/api/QPopupProxy.json create mode 100644 dist/api/QPullToRefresh.json create mode 100644 dist/api/QRadio.json create mode 100644 dist/api/QRange.json create mode 100644 dist/api/QRating.json create mode 100644 dist/api/QResizeObserver.json create mode 100644 dist/api/QResponsive.json create mode 100644 dist/api/QRouteTab.json create mode 100644 dist/api/QScrollArea.json create mode 100644 dist/api/QScrollObserver.json create mode 100644 dist/api/QSelect.json create mode 100644 dist/api/QSeparator.json create mode 100644 dist/api/QSkeleton.json create mode 100644 dist/api/QSlideItem.json create mode 100644 dist/api/QSlideTransition.json create mode 100644 dist/api/QSlider.json create mode 100644 dist/api/QSpace.json create mode 100644 dist/api/QSpinner.json create mode 100644 dist/api/QSpinnerAudio.json create mode 100644 dist/api/QSpinnerBall.json create mode 100644 dist/api/QSpinnerBars.json create mode 100644 dist/api/QSpinnerBox.json create mode 100644 dist/api/QSpinnerClock.json create mode 100644 dist/api/QSpinnerComment.json create mode 100644 dist/api/QSpinnerCube.json create mode 100644 dist/api/QSpinnerDots.json create mode 100644 dist/api/QSpinnerFacebook.json create mode 100644 dist/api/QSpinnerGears.json create mode 100644 dist/api/QSpinnerGrid.json create mode 100644 dist/api/QSpinnerHearts.json create mode 100644 dist/api/QSpinnerHourglass.json create mode 100644 dist/api/QSpinnerInfinity.json create mode 100644 dist/api/QSpinnerIos.json create mode 100644 dist/api/QSpinnerOrbit.json create mode 100644 dist/api/QSpinnerOval.json create mode 100644 dist/api/QSpinnerPie.json create mode 100644 dist/api/QSpinnerPuff.json create mode 100644 dist/api/QSpinnerRadio.json create mode 100644 dist/api/QSpinnerRings.json create mode 100644 dist/api/QSpinnerTail.json create mode 100644 dist/api/QSplitter.json create mode 100644 dist/api/QStep.json create mode 100644 dist/api/QStepper.json create mode 100644 dist/api/QStepperNavigation.json create mode 100644 dist/api/QTab.json create mode 100644 dist/api/QTabPanel.json create mode 100644 dist/api/QTabPanels.json create mode 100644 dist/api/QTable.json create mode 100644 dist/api/QTabs.json create mode 100644 dist/api/QTd.json create mode 100644 dist/api/QTh.json create mode 100644 dist/api/QTime.json create mode 100644 dist/api/QTimeline.json create mode 100644 dist/api/QTimelineEntry.json create mode 100644 dist/api/QToggle.json create mode 100644 dist/api/QToolbar.json create mode 100644 dist/api/QToolbarTitle.json create mode 100644 dist/api/QTooltip.json create mode 100644 dist/api/QTr.json create mode 100644 dist/api/QTree.json create mode 100644 dist/api/QUploader.json create mode 100644 dist/api/QUploaderAddTrigger.json create mode 100644 dist/api/QUploaderBase.json create mode 100644 dist/api/QVideo.json create mode 100644 dist/api/QVirtualScroll.json create mode 100644 dist/api/Ripple.json create mode 100644 dist/api/Screen.json create mode 100644 dist/api/Scroll.json create mode 100644 dist/api/ScrollFire.json create mode 100644 dist/api/SessionStorage.json create mode 100644 dist/api/TouchHold.json create mode 100644 dist/api/TouchPan.json create mode 100644 dist/api/TouchRepeat.json create mode 100644 dist/api/TouchSwipe.json create mode 100644 dist/babel-transforms/auto-import.json create mode 100644 dist/babel-transforms/imports.js create mode 100644 dist/icon-set/bootstrap-icons.umd.min.js create mode 100644 dist/icon-set/eva-icons.umd.min.js create mode 100644 dist/icon-set/fontawesome-v5-pro.umd.min.js create mode 100644 dist/icon-set/fontawesome-v5.umd.min.js create mode 100644 dist/icon-set/fontawesome-v6-pro.umd.min.js create mode 100644 dist/icon-set/fontawesome-v6.umd.min.js create mode 100644 dist/icon-set/ionicons-v4.umd.min.js create mode 100644 dist/icon-set/line-awesome.umd.min.js create mode 100644 dist/icon-set/material-icons-outlined.umd.min.js create mode 100644 dist/icon-set/material-icons-round.umd.min.js create mode 100644 dist/icon-set/material-icons-sharp.umd.min.js create mode 100644 dist/icon-set/material-icons.umd.min.js create mode 100644 dist/icon-set/material-symbols-outlined.umd.min.js create mode 100644 dist/icon-set/material-symbols-rounded.umd.min.js create mode 100644 dist/icon-set/material-symbols-sharp.umd.min.js create mode 100644 dist/icon-set/mdi-v3.umd.min.js create mode 100644 dist/icon-set/mdi-v4.umd.min.js create mode 100644 dist/icon-set/mdi-v5.umd.min.js create mode 100644 dist/icon-set/mdi-v6.umd.min.js create mode 100644 dist/icon-set/svg-bootstrap-icons.umd.min.js create mode 100644 dist/icon-set/svg-eva-icons.umd.min.js create mode 100644 dist/icon-set/svg-fontawesome-v5.umd.min.js create mode 100644 dist/icon-set/svg-fontawesome-v6.umd.min.js create mode 100644 dist/icon-set/svg-ionicons-v4.umd.min.js create mode 100644 dist/icon-set/svg-ionicons-v5.umd.min.js create mode 100644 dist/icon-set/svg-ionicons-v6.umd.min.js create mode 100644 dist/icon-set/svg-line-awesome.umd.min.js create mode 100644 dist/icon-set/svg-material-icons-outlined.umd.min.js create mode 100644 dist/icon-set/svg-material-icons-round.umd.min.js create mode 100644 dist/icon-set/svg-material-icons-sharp.umd.min.js create mode 100644 dist/icon-set/svg-material-icons.umd.min.js create mode 100644 dist/icon-set/svg-material-symbols-outlined.umd.min.js create mode 100644 dist/icon-set/svg-material-symbols-rounded.umd.min.js create mode 100644 dist/icon-set/svg-material-symbols-sharp.umd.min.js create mode 100644 dist/icon-set/svg-mdi-v4.umd.min.js create mode 100644 dist/icon-set/svg-mdi-v5.umd.min.js create mode 100644 dist/icon-set/svg-mdi-v6.umd.min.js create mode 100644 dist/icon-set/svg-themify.umd.min.js create mode 100644 dist/icon-set/themify.umd.min.js create mode 100644 dist/lang/ar.umd.min.js create mode 100644 dist/lang/az-latn.umd.min.js create mode 100644 dist/lang/bg.umd.min.js create mode 100644 dist/lang/ca.umd.min.js create mode 100644 dist/lang/cs.umd.min.js create mode 100644 dist/lang/da.umd.min.js create mode 100644 dist/lang/de.umd.min.js create mode 100644 dist/lang/el.umd.min.js create mode 100644 dist/lang/en-gb.umd.min.js create mode 100644 dist/lang/en-us.umd.min.js create mode 100644 dist/lang/eo.umd.min.js create mode 100644 dist/lang/es.umd.min.js create mode 100644 dist/lang/et.umd.min.js create mode 100644 dist/lang/eu.umd.min.js create mode 100644 dist/lang/fa-ir.umd.min.js create mode 100644 dist/lang/fa.umd.min.js create mode 100644 dist/lang/fi.umd.min.js create mode 100644 dist/lang/fr.umd.min.js create mode 100644 dist/lang/gn.umd.min.js create mode 100644 dist/lang/he.umd.min.js create mode 100644 dist/lang/hr.umd.min.js create mode 100644 dist/lang/hu.umd.min.js create mode 100644 dist/lang/id.umd.min.js create mode 100644 dist/lang/is.umd.min.js create mode 100644 dist/lang/it.umd.min.js create mode 100644 dist/lang/ja.umd.min.js create mode 100644 dist/lang/km.umd.min.js create mode 100644 dist/lang/ko-kr.umd.min.js create mode 100644 dist/lang/kur-ckb.umd.min.js create mode 100644 dist/lang/kz.umd.min.js create mode 100644 dist/lang/lu.umd.min.js create mode 100644 dist/lang/lv.umd.min.js create mode 100644 dist/lang/ml.umd.min.js create mode 100644 dist/lang/mm.umd.min.js create mode 100644 dist/lang/ms.umd.min.js create mode 100644 dist/lang/my.umd.min.js create mode 100644 dist/lang/nb-no.umd.min.js create mode 100644 dist/lang/nl.umd.min.js create mode 100644 dist/lang/pl.umd.min.js create mode 100644 dist/lang/pt-br.umd.min.js create mode 100644 dist/lang/pt.umd.min.js create mode 100644 dist/lang/ro.umd.min.js create mode 100644 dist/lang/ru.umd.min.js create mode 100644 dist/lang/sk.umd.min.js create mode 100644 dist/lang/sl.umd.min.js create mode 100644 dist/lang/sm.umd.min.js create mode 100644 dist/lang/sr.umd.min.js create mode 100644 dist/lang/sv.umd.min.js create mode 100644 dist/lang/ta.umd.min.js create mode 100644 dist/lang/th.umd.min.js create mode 100644 dist/lang/tr.umd.min.js create mode 100644 dist/lang/ug.umd.min.js create mode 100644 dist/lang/uk.umd.min.js create mode 100644 dist/lang/uz-Cyrl.umd.min.js create mode 100644 dist/lang/uz-Latn.umd.min.js create mode 100644 dist/lang/vi.umd.min.js create mode 100644 dist/lang/zh-hans.umd.min.js create mode 100644 dist/lang/zh-hant.umd.min.js create mode 100644 dist/quasar.addon.css create mode 100644 dist/quasar.addon.min.css create mode 100644 dist/quasar.addon.rtl.css create mode 100644 dist/quasar.addon.rtl.min.css create mode 100644 dist/quasar.common.js create mode 100644 dist/quasar.css create mode 100644 dist/quasar.esm.js create mode 100644 dist/quasar.ie.polyfills.js create mode 100644 dist/quasar.ie.polyfills.umd.min.js create mode 100644 dist/quasar.min.css create mode 100644 dist/quasar.rtl.css create mode 100644 dist/quasar.rtl.min.css create mode 100644 dist/quasar.sass create mode 100644 dist/quasar.styl create mode 100644 dist/quasar.umd.js create mode 100644 dist/quasar.umd.min.js create mode 100644 dist/quasar.umd.modern.js create mode 100644 dist/quasar.umd.modern.min.js create mode 100644 dist/transform-asset-urls.json create mode 100644 dist/types/api.d.ts create mode 100644 dist/types/api/cookies.d.ts create mode 100644 dist/types/api/web-storage.d.ts create mode 100644 dist/types/extras.d.ts create mode 100644 dist/types/extras/animations.d.ts create mode 100644 dist/types/extras/fonts.d.ts create mode 100644 dist/types/extras/icon-set.d.ts create mode 100644 dist/types/feature-flag.d.ts create mode 100644 dist/types/globals.d.ts create mode 100644 dist/types/index.d.ts create mode 100644 dist/types/lang.d.ts create mode 100644 dist/types/plugin.d.ts create mode 100644 dist/types/shim-icon-set.d.ts create mode 100644 dist/types/shim-lang.d.ts create mode 100644 dist/types/ts-helpers.d.ts create mode 100644 dist/types/tsconfig.json create mode 100644 dist/types/typings.json create mode 100644 dist/types/utils.d.ts create mode 100644 dist/types/utils/colors.d.ts create mode 100644 dist/types/utils/date.d.ts create mode 100644 dist/types/utils/dom.d.ts create mode 100644 dist/types/utils/event.d.ts create mode 100644 dist/types/utils/format.d.ts create mode 100644 dist/types/utils/is.d.ts create mode 100644 dist/types/utils/run-sequential-promises.d.ts create mode 100644 dist/types/utils/scroll.d.ts create mode 100644 dist/types/vue.d.ts create mode 100644 dist/vetur/quasar-attributes.json create mode 100644 dist/vetur/quasar-tags.json create mode 100644 dist/web-types/web-types.json create mode 100644 icon-set/bootstrap-icons.js create mode 100644 icon-set/eva-icons.js create mode 100644 icon-set/fontawesome-v5-pro.js create mode 100644 icon-set/fontawesome-v5.js create mode 100644 icon-set/fontawesome-v6-pro.js create mode 100644 icon-set/fontawesome-v6.js create mode 100644 icon-set/ionicons-v4.js create mode 100644 icon-set/line-awesome.js create mode 100644 icon-set/material-icons-outlined.js create mode 100644 icon-set/material-icons-round.js create mode 100644 icon-set/material-icons-sharp.js create mode 100644 icon-set/material-icons.js create mode 100644 icon-set/material-symbols-outlined.js create mode 100644 icon-set/material-symbols-rounded.js create mode 100644 icon-set/material-symbols-sharp.js create mode 100644 icon-set/mdi-v3.js create mode 100644 icon-set/mdi-v4.js create mode 100644 icon-set/mdi-v5.js create mode 100644 icon-set/mdi-v6.js create mode 100644 icon-set/svg-bootstrap-icons.js create mode 100644 icon-set/svg-eva-icons.js create mode 100644 icon-set/svg-fontawesome-v5.js create mode 100644 icon-set/svg-fontawesome-v6.js create mode 100644 icon-set/svg-ionicons-v4.js create mode 100644 icon-set/svg-ionicons-v5.js create mode 100644 icon-set/svg-ionicons-v6.js create mode 100644 icon-set/svg-line-awesome.js create mode 100644 icon-set/svg-material-icons-outlined.js create mode 100644 icon-set/svg-material-icons-round.js create mode 100644 icon-set/svg-material-icons-sharp.js create mode 100644 icon-set/svg-material-icons.js create mode 100644 icon-set/svg-material-symbols-outlined.js create mode 100644 icon-set/svg-material-symbols-rounded.js create mode 100644 icon-set/svg-material-symbols-sharp.js create mode 100644 icon-set/svg-mdi-v4.js create mode 100644 icon-set/svg-mdi-v5.js create mode 100644 icon-set/svg-mdi-v6.js create mode 100644 icon-set/svg-themify.js create mode 100644 icon-set/themify.js create mode 100644 lang/ar.js create mode 100644 lang/az-latn.js create mode 100644 lang/bg.js create mode 100644 lang/ca.js create mode 100644 lang/cs.js create mode 100644 lang/da.js create mode 100644 lang/de.js create mode 100644 lang/el.js create mode 100644 lang/en-gb.js create mode 100644 lang/en-us.js create mode 100644 lang/eo.js create mode 100644 lang/es.js create mode 100644 lang/et.js create mode 100644 lang/eu.js create mode 100644 lang/fa-ir.js create mode 100644 lang/fa.js create mode 100644 lang/fi.js create mode 100644 lang/fr.js create mode 100644 lang/gn.js create mode 100644 lang/he.js create mode 100644 lang/hr.js create mode 100644 lang/hu.js create mode 100644 lang/id.js create mode 100644 lang/index.json create mode 100644 lang/is.js create mode 100644 lang/it.js create mode 100644 lang/ja.js create mode 100644 lang/km.js create mode 100644 lang/ko-kr.js create mode 100644 lang/kur-ckb.js create mode 100644 lang/kz.js create mode 100644 lang/lu.js create mode 100644 lang/lv.js create mode 100644 lang/ml.js create mode 100644 lang/mm.js create mode 100644 lang/ms.js create mode 100644 lang/my.js create mode 100644 lang/nb-no.js create mode 100644 lang/nl.js create mode 100644 lang/pl.js create mode 100644 lang/pt-br.js create mode 100644 lang/pt.js create mode 100644 lang/ro.js create mode 100644 lang/ru.js create mode 100644 lang/sk.js create mode 100644 lang/sl.js create mode 100644 lang/sm.js create mode 100644 lang/sr.js create mode 100644 lang/sv.js create mode 100644 lang/ta.js create mode 100644 lang/th.js create mode 100644 lang/tr.js create mode 100644 lang/ug.js create mode 100644 lang/uk.js create mode 100644 lang/uz-Cyrl.js create mode 100644 lang/uz-Latn.js create mode 100644 lang/vi.js create mode 100644 lang/zh-hans.js create mode 100644 lang/zh-hant.js create mode 100644 package.json create mode 100644 src/api-file-example.json create mode 100644 src/api.extends.json create mode 100644 src/body.js create mode 100644 src/components.js create mode 100644 src/components/ajax-bar/QAjaxBar.js create mode 100644 src/components/ajax-bar/QAjaxBar.json create mode 100644 src/components/ajax-bar/QAjaxBar.sass create mode 100644 src/components/ajax-bar/QAjaxBar.styl create mode 100644 src/components/ajax-bar/index.js create mode 100644 src/components/avatar/QAvatar.js create mode 100644 src/components/avatar/QAvatar.json create mode 100644 src/components/avatar/QAvatar.sass create mode 100644 src/components/avatar/QAvatar.styl create mode 100644 src/components/avatar/index.js create mode 100644 src/components/badge/QBadge.js create mode 100644 src/components/badge/QBadge.json create mode 100644 src/components/badge/QBadge.sass create mode 100644 src/components/badge/QBadge.styl create mode 100644 src/components/badge/index.js create mode 100644 src/components/banner/QBanner.js create mode 100644 src/components/banner/QBanner.json create mode 100644 src/components/banner/QBanner.sass create mode 100644 src/components/banner/QBanner.styl create mode 100644 src/components/banner/index.js create mode 100644 src/components/bar/QBar.js create mode 100644 src/components/bar/QBar.json create mode 100644 src/components/bar/QBar.sass create mode 100644 src/components/bar/QBar.styl create mode 100644 src/components/bar/index.js create mode 100644 src/components/breadcrumbs/QBreadcrumbs.js create mode 100644 src/components/breadcrumbs/QBreadcrumbs.json create mode 100644 src/components/breadcrumbs/QBreadcrumbs.sass create mode 100644 src/components/breadcrumbs/QBreadcrumbs.styl create mode 100644 src/components/breadcrumbs/QBreadcrumbsEl.js create mode 100644 src/components/breadcrumbs/QBreadcrumbsEl.json create mode 100644 src/components/breadcrumbs/index.js create mode 100644 src/components/btn-dropdown/QBtnDropdown.js create mode 100644 src/components/btn-dropdown/QBtnDropdown.json create mode 100644 src/components/btn-dropdown/QBtnDropdown.sass create mode 100644 src/components/btn-dropdown/QBtnDropdown.styl create mode 100644 src/components/btn-dropdown/index.js create mode 100644 src/components/btn-group/QBtnGroup.js create mode 100644 src/components/btn-group/QBtnGroup.json create mode 100644 src/components/btn-group/QBtnGroup.sass create mode 100644 src/components/btn-group/QBtnGroup.styl create mode 100644 src/components/btn-group/index.js create mode 100644 src/components/btn-toggle/QBtnToggle.js create mode 100644 src/components/btn-toggle/QBtnToggle.json create mode 100644 src/components/btn-toggle/QBtnToggle.sass create mode 100644 src/components/btn-toggle/QBtnToggle.styl create mode 100644 src/components/btn-toggle/index.js create mode 100644 src/components/btn/QBtn.js create mode 100644 src/components/btn/QBtn.json create mode 100644 src/components/btn/QBtn.sass create mode 100644 src/components/btn/QBtn.styl create mode 100644 src/components/btn/index.js create mode 100644 src/components/card/QCard.js create mode 100644 src/components/card/QCard.json create mode 100644 src/components/card/QCard.sass create mode 100644 src/components/card/QCard.styl create mode 100644 src/components/card/QCardActions.js create mode 100644 src/components/card/QCardActions.json create mode 100644 src/components/card/QCardSection.js create mode 100644 src/components/card/QCardSection.json create mode 100644 src/components/card/index.js create mode 100644 src/components/carousel/QCarousel.js create mode 100644 src/components/carousel/QCarousel.json create mode 100644 src/components/carousel/QCarousel.sass create mode 100644 src/components/carousel/QCarousel.styl create mode 100644 src/components/carousel/QCarouselControl.js create mode 100644 src/components/carousel/QCarouselControl.json create mode 100644 src/components/carousel/QCarouselSlide.js create mode 100644 src/components/carousel/QCarouselSlide.json create mode 100644 src/components/carousel/index.js create mode 100644 src/components/chat/QChatMessage.js create mode 100644 src/components/chat/QChatMessage.json create mode 100644 src/components/chat/QChatMessage.sass create mode 100644 src/components/chat/QChatMessage.styl create mode 100644 src/components/chat/index.js create mode 100644 src/components/checkbox/QCheckbox.js create mode 100644 src/components/checkbox/QCheckbox.json create mode 100644 src/components/checkbox/QCheckbox.sass create mode 100644 src/components/checkbox/QCheckbox.styl create mode 100644 src/components/checkbox/index.js create mode 100644 src/components/chip/QChip.js create mode 100644 src/components/chip/QChip.json create mode 100644 src/components/chip/QChip.sass create mode 100644 src/components/chip/QChip.styl create mode 100644 src/components/chip/index.js create mode 100644 src/components/circular-progress/QCircularProgress.js create mode 100644 src/components/circular-progress/QCircularProgress.json create mode 100644 src/components/circular-progress/QCircularProgress.sass create mode 100644 src/components/circular-progress/QCircularProgress.styl create mode 100644 src/components/circular-progress/index.js create mode 100644 src/components/color/QColor.js create mode 100644 src/components/color/QColor.json create mode 100644 src/components/color/QColor.sass create mode 100644 src/components/color/QColor.styl create mode 100644 src/components/color/index.js create mode 100644 src/components/date/QDate.js create mode 100644 src/components/date/QDate.json create mode 100644 src/components/date/QDate.sass create mode 100644 src/components/date/QDate.styl create mode 100644 src/components/date/index.js create mode 100644 src/components/dialog-bottom-sheet/BottomSheet.js create mode 100644 src/components/dialog-bottom-sheet/BottomSheet.sass create mode 100644 src/components/dialog-bottom-sheet/BottomSheet.styl create mode 100644 src/components/dialog-plugin/DialogPlugin.js create mode 100644 src/components/dialog-plugin/DialogPlugin.sass create mode 100644 src/components/dialog-plugin/DialogPlugin.styl create mode 100644 src/components/dialog/QDialog.js create mode 100644 src/components/dialog/QDialog.json create mode 100644 src/components/dialog/QDialog.sass create mode 100644 src/components/dialog/QDialog.styl create mode 100644 src/components/dialog/index.js create mode 100644 src/components/drawer/QDrawer.js create mode 100644 src/components/drawer/QDrawer.json create mode 100644 src/components/drawer/index.js create mode 100644 src/components/editor/QEditor.js create mode 100644 src/components/editor/QEditor.json create mode 100644 src/components/editor/QEditor.sass create mode 100644 src/components/editor/QEditor.styl create mode 100644 src/components/editor/editor-caret.js create mode 100644 src/components/editor/editor-utils.js create mode 100644 src/components/editor/index.js create mode 100644 src/components/expansion-item/QExpansionItem.js create mode 100644 src/components/expansion-item/QExpansionItem.json create mode 100644 src/components/expansion-item/QExpansionItem.sass create mode 100644 src/components/expansion-item/QExpansionItem.styl create mode 100644 src/components/expansion-item/index.js create mode 100644 src/components/fab/QFab.js create mode 100644 src/components/fab/QFab.json create mode 100644 src/components/fab/QFab.sass create mode 100644 src/components/fab/QFab.styl create mode 100644 src/components/fab/QFabAction.js create mode 100644 src/components/fab/QFabAction.json create mode 100644 src/components/fab/index.js create mode 100644 src/components/field/QField.js create mode 100644 src/components/field/QField.json create mode 100644 src/components/field/QField.sass create mode 100644 src/components/field/QField.styl create mode 100644 src/components/field/__QField.json create mode 100644 src/components/field/index.js create mode 100644 src/components/file/QFile.js create mode 100644 src/components/file/QFile.json create mode 100644 src/components/file/QFile.sass create mode 100644 src/components/file/QFile.styl create mode 100644 src/components/file/index.js create mode 100644 src/components/footer/QFooter.js create mode 100644 src/components/footer/QFooter.json create mode 100644 src/components/footer/index.js create mode 100644 src/components/form/QForm.js create mode 100644 src/components/form/QForm.json create mode 100644 src/components/form/QForm.sass create mode 100644 src/components/form/QForm.styl create mode 100644 src/components/form/index.js create mode 100644 src/components/header/QHeader.js create mode 100644 src/components/header/QHeader.json create mode 100644 src/components/header/index.js create mode 100644 src/components/icon/QIcon.js create mode 100644 src/components/icon/QIcon.json create mode 100644 src/components/icon/QIcon.sass create mode 100644 src/components/icon/QIcon.styl create mode 100644 src/components/icon/index.js create mode 100644 src/components/img/QImg.js create mode 100644 src/components/img/QImg.json create mode 100644 src/components/img/QImg.sass create mode 100644 src/components/img/QImg.styl create mode 100644 src/components/img/index.js create mode 100644 src/components/infinite-scroll/QInfiniteScroll.js create mode 100644 src/components/infinite-scroll/QInfiniteScroll.json create mode 100644 src/components/infinite-scroll/index.js create mode 100644 src/components/inner-loading/QInnerLoading.js create mode 100644 src/components/inner-loading/QInnerLoading.json create mode 100644 src/components/inner-loading/QInnerLoading.sass create mode 100644 src/components/inner-loading/QInnerLoading.styl create mode 100644 src/components/inner-loading/index.js create mode 100644 src/components/input/QInput.js create mode 100644 src/components/input/QInput.json create mode 100644 src/components/input/QInput.sass create mode 100644 src/components/input/QInput.styl create mode 100644 src/components/input/index.js create mode 100644 src/components/intersection/QIntersection.js create mode 100644 src/components/intersection/QIntersection.json create mode 100644 src/components/intersection/QIntersection.sass create mode 100644 src/components/intersection/QIntersection.styl create mode 100644 src/components/intersection/index.js create mode 100644 src/components/item/QItem.js create mode 100644 src/components/item/QItem.json create mode 100644 src/components/item/QItem.sass create mode 100644 src/components/item/QItem.styl create mode 100644 src/components/item/QItemLabel.js create mode 100644 src/components/item/QItemLabel.json create mode 100644 src/components/item/QItemSection.js create mode 100644 src/components/item/QItemSection.json create mode 100644 src/components/item/QList.js create mode 100644 src/components/item/QList.json create mode 100644 src/components/item/index.js create mode 100644 src/components/knob/QKnob.js create mode 100644 src/components/knob/QKnob.json create mode 100644 src/components/knob/QKnob.sass create mode 100644 src/components/knob/QKnob.styl create mode 100644 src/components/knob/index.js create mode 100644 src/components/layout/QLayout.js create mode 100644 src/components/layout/QLayout.json create mode 100644 src/components/layout/QLayout.sass create mode 100644 src/components/layout/QLayout.styl create mode 100644 src/components/layout/index.js create mode 100644 src/components/linear-progress/QLinearProgress.js create mode 100644 src/components/linear-progress/QLinearProgress.json create mode 100644 src/components/linear-progress/QLinearProgress.sass create mode 100644 src/components/linear-progress/QLinearProgress.styl create mode 100644 src/components/linear-progress/index.js create mode 100644 src/components/markup-table/QMarkupTable.js create mode 100644 src/components/markup-table/QMarkupTable.json create mode 100644 src/components/markup-table/index.js create mode 100644 src/components/menu/ClickOutside.js create mode 100644 src/components/menu/QMenu.js create mode 100644 src/components/menu/QMenu.json create mode 100644 src/components/menu/QMenu.sass create mode 100644 src/components/menu/QMenu.styl create mode 100644 src/components/menu/index.js create mode 100644 src/components/no-ssr/QNoSsr.js create mode 100644 src/components/no-ssr/QNoSsr.json create mode 100644 src/components/no-ssr/index.js create mode 100644 src/components/option-group/QOptionGroup.js create mode 100644 src/components/option-group/QOptionGroup.json create mode 100644 src/components/option-group/QOptionGroup.sass create mode 100644 src/components/option-group/QOptionGroup.styl create mode 100644 src/components/option-group/index.js create mode 100644 src/components/page-scroller/QPageScroller.js create mode 100644 src/components/page-scroller/QPageScroller.json create mode 100644 src/components/page-scroller/index.js create mode 100644 src/components/page-sticky/QPageSticky.js create mode 100644 src/components/page-sticky/QPageSticky.json create mode 100644 src/components/page-sticky/index.js create mode 100644 src/components/page/QPage.js create mode 100644 src/components/page/QPage.json create mode 100644 src/components/page/QPageContainer.js create mode 100644 src/components/page/QPageContainer.json create mode 100644 src/components/page/index.js create mode 100644 src/components/pagination/QPagination.js create mode 100644 src/components/pagination/QPagination.json create mode 100644 src/components/pagination/QPagination.sass create mode 100644 src/components/pagination/QPagination.styl create mode 100644 src/components/pagination/index.js create mode 100644 src/components/parallax/QParallax.js create mode 100644 src/components/parallax/QParallax.json create mode 100644 src/components/parallax/QParallax.sass create mode 100644 src/components/parallax/QParallax.styl create mode 100644 src/components/parallax/index.js create mode 100644 src/components/popup-edit/QPopupEdit.js create mode 100644 src/components/popup-edit/QPopupEdit.json create mode 100644 src/components/popup-edit/QPopupEdit.sass create mode 100644 src/components/popup-edit/QPopupEdit.styl create mode 100644 src/components/popup-edit/index.js create mode 100644 src/components/popup-proxy/QPopupProxy.js create mode 100644 src/components/popup-proxy/QPopupProxy.json create mode 100644 src/components/popup-proxy/index.js create mode 100644 src/components/pull-to-refresh/QPullToRefresh.js create mode 100644 src/components/pull-to-refresh/QPullToRefresh.json create mode 100644 src/components/pull-to-refresh/QPullToRefresh.sass create mode 100644 src/components/pull-to-refresh/QPullToRefresh.styl create mode 100644 src/components/pull-to-refresh/index.js create mode 100644 src/components/radio/QRadio.js create mode 100644 src/components/radio/QRadio.json create mode 100644 src/components/radio/QRadio.sass create mode 100644 src/components/radio/QRadio.styl create mode 100644 src/components/radio/index.js create mode 100644 src/components/range/QRange.js create mode 100644 src/components/range/QRange.json create mode 100644 src/components/range/index.js create mode 100644 src/components/rating/QRating.js create mode 100644 src/components/rating/QRating.json create mode 100644 src/components/rating/QRating.sass create mode 100644 src/components/rating/QRating.styl create mode 100644 src/components/rating/index.js create mode 100644 src/components/resize-observer/QResizeObserver.js create mode 100644 src/components/resize-observer/QResizeObserver.json create mode 100644 src/components/resize-observer/index.js create mode 100644 src/components/responsive/QResponsive.js create mode 100644 src/components/responsive/QResponsive.json create mode 100644 src/components/responsive/QResponsive.sass create mode 100644 src/components/responsive/QResponsive.styl create mode 100644 src/components/responsive/index.js create mode 100644 src/components/scroll-area/QScrollArea.js create mode 100644 src/components/scroll-area/QScrollArea.json create mode 100644 src/components/scroll-area/QScrollArea.sass create mode 100644 src/components/scroll-area/QScrollArea.styl create mode 100644 src/components/scroll-area/index.js create mode 100644 src/components/scroll-observer/QScrollObserver.js create mode 100644 src/components/scroll-observer/QScrollObserver.json create mode 100644 src/components/scroll-observer/index.js create mode 100755 src/components/select/QSelect.js create mode 100644 src/components/select/QSelect.json create mode 100644 src/components/select/QSelect.sass create mode 100644 src/components/select/QSelect.styl create mode 100644 src/components/select/index.js create mode 100644 src/components/separator/QSeparator.js create mode 100644 src/components/separator/QSeparator.json create mode 100644 src/components/separator/QSeparator.sass create mode 100644 src/components/separator/QSeparator.styl create mode 100644 src/components/separator/index.js create mode 100644 src/components/skeleton/QSkeleton.js create mode 100644 src/components/skeleton/QSkeleton.json create mode 100644 src/components/skeleton/QSkeleton.sass create mode 100644 src/components/skeleton/QSkeleton.styl create mode 100644 src/components/skeleton/index.js create mode 100644 src/components/slide-item/QSlideItem.js create mode 100644 src/components/slide-item/QSlideItem.json create mode 100644 src/components/slide-item/QSlideItem.sass create mode 100644 src/components/slide-item/QSlideItem.styl create mode 100644 src/components/slide-item/index.js create mode 100644 src/components/slide-transition/QSlideTransition.js create mode 100644 src/components/slide-transition/QSlideTransition.json create mode 100644 src/components/slide-transition/index.js create mode 100644 src/components/slider/QSlider.js create mode 100644 src/components/slider/QSlider.json create mode 100644 src/components/slider/QSlider.sass create mode 100644 src/components/slider/QSlider.styl create mode 100644 src/components/slider/index.js create mode 100644 src/components/slider/slider-utils.js create mode 100644 src/components/slider/slider-utils.json create mode 100644 src/components/space/QSpace.js create mode 100644 src/components/space/QSpace.json create mode 100644 src/components/space/QSpace.sass create mode 100644 src/components/space/QSpace.styl create mode 100644 src/components/space/index.js create mode 100644 src/components/spinner/QSpinner.js create mode 100644 src/components/spinner/QSpinner.json create mode 100644 src/components/spinner/QSpinner.sass create mode 100644 src/components/spinner/QSpinner.styl create mode 100644 src/components/spinner/QSpinnerAudio.js create mode 100644 src/components/spinner/QSpinnerAudio.json create mode 100644 src/components/spinner/QSpinnerBall.js create mode 100644 src/components/spinner/QSpinnerBall.json create mode 100644 src/components/spinner/QSpinnerBars.js create mode 100644 src/components/spinner/QSpinnerBars.json create mode 100644 src/components/spinner/QSpinnerBox.js create mode 100644 src/components/spinner/QSpinnerBox.json create mode 100644 src/components/spinner/QSpinnerClock.js create mode 100644 src/components/spinner/QSpinnerClock.json create mode 100644 src/components/spinner/QSpinnerComment.js create mode 100644 src/components/spinner/QSpinnerComment.json create mode 100644 src/components/spinner/QSpinnerCube.js create mode 100644 src/components/spinner/QSpinnerCube.json create mode 100644 src/components/spinner/QSpinnerDots.js create mode 100644 src/components/spinner/QSpinnerDots.json create mode 100644 src/components/spinner/QSpinnerFacebook.js create mode 100644 src/components/spinner/QSpinnerFacebook.json create mode 100644 src/components/spinner/QSpinnerGears.js create mode 100644 src/components/spinner/QSpinnerGears.json create mode 100644 src/components/spinner/QSpinnerGrid.js create mode 100644 src/components/spinner/QSpinnerGrid.json create mode 100644 src/components/spinner/QSpinnerHearts.js create mode 100644 src/components/spinner/QSpinnerHearts.json create mode 100644 src/components/spinner/QSpinnerHourglass.js create mode 100644 src/components/spinner/QSpinnerHourglass.json create mode 100644 src/components/spinner/QSpinnerInfinity.js create mode 100644 src/components/spinner/QSpinnerInfinity.json create mode 100644 src/components/spinner/QSpinnerIos.js create mode 100644 src/components/spinner/QSpinnerIos.json create mode 100644 src/components/spinner/QSpinnerOrbit.js create mode 100644 src/components/spinner/QSpinnerOrbit.json create mode 100644 src/components/spinner/QSpinnerOval.js create mode 100644 src/components/spinner/QSpinnerOval.json create mode 100644 src/components/spinner/QSpinnerPie.js create mode 100644 src/components/spinner/QSpinnerPie.json create mode 100644 src/components/spinner/QSpinnerPuff.js create mode 100644 src/components/spinner/QSpinnerPuff.json create mode 100644 src/components/spinner/QSpinnerRadio.js create mode 100644 src/components/spinner/QSpinnerRadio.json create mode 100644 src/components/spinner/QSpinnerRings.js create mode 100644 src/components/spinner/QSpinnerRings.json create mode 100644 src/components/spinner/QSpinnerTail.js create mode 100644 src/components/spinner/QSpinnerTail.json create mode 100644 src/components/spinner/__spinner-mixin.json create mode 100644 src/components/spinner/index.js create mode 100644 src/components/spinner/spinner-mixin.js create mode 100644 src/components/splitter/QSplitter.js create mode 100644 src/components/splitter/QSplitter.json create mode 100644 src/components/splitter/QSplitter.sass create mode 100644 src/components/splitter/QSplitter.styl create mode 100644 src/components/splitter/index.js create mode 100644 src/components/stepper/QStep.js create mode 100644 src/components/stepper/QStep.json create mode 100644 src/components/stepper/QStepper.js create mode 100644 src/components/stepper/QStepper.json create mode 100644 src/components/stepper/QStepper.sass create mode 100644 src/components/stepper/QStepper.styl create mode 100644 src/components/stepper/QStepperNavigation.js create mode 100644 src/components/stepper/QStepperNavigation.json create mode 100644 src/components/stepper/StepHeader.js create mode 100644 src/components/stepper/index.js create mode 100644 src/components/tab-panels/QTabPanel.js create mode 100644 src/components/tab-panels/QTabPanel.json create mode 100644 src/components/tab-panels/QTabPanel.sass create mode 100644 src/components/tab-panels/QTabPanel.styl create mode 100644 src/components/tab-panels/QTabPanels.js create mode 100644 src/components/tab-panels/QTabPanels.json create mode 100644 src/components/tab-panels/index.js create mode 100644 src/components/table/QTable.js create mode 100644 src/components/table/QTable.json create mode 100644 src/components/table/QTable.sass create mode 100644 src/components/table/QTable.styl create mode 100644 src/components/table/QTd.js create mode 100644 src/components/table/QTd.json create mode 100644 src/components/table/QTh.js create mode 100644 src/components/table/QTh.json create mode 100644 src/components/table/QTr.js create mode 100644 src/components/table/QTr.json create mode 100644 src/components/table/get-table-middle.js create mode 100644 src/components/table/index.js create mode 100644 src/components/table/table-body.js create mode 100644 src/components/table/table-bottom.js create mode 100644 src/components/table/table-column-selection.js create mode 100644 src/components/table/table-filter.js create mode 100644 src/components/table/table-grid.js create mode 100644 src/components/table/table-header.js create mode 100644 src/components/table/table-pagination.js create mode 100644 src/components/table/table-row-expand.js create mode 100644 src/components/table/table-row-selection.js create mode 100644 src/components/table/table-sort.js create mode 100644 src/components/table/table-top.js create mode 100644 src/components/tabs/QRouteTab.js create mode 100644 src/components/tabs/QRouteTab.json create mode 100644 src/components/tabs/QTab.js create mode 100644 src/components/tabs/QTab.json create mode 100644 src/components/tabs/QTabs.js create mode 100644 src/components/tabs/QTabs.json create mode 100644 src/components/tabs/QTabs.sass create mode 100644 src/components/tabs/QTabs.styl create mode 100644 src/components/tabs/index.js create mode 100644 src/components/time/QTime.js create mode 100644 src/components/time/QTime.json create mode 100644 src/components/time/QTime.sass create mode 100644 src/components/time/QTime.styl create mode 100644 src/components/time/index.js create mode 100644 src/components/timeline/QTimeline.js create mode 100644 src/components/timeline/QTimeline.json create mode 100644 src/components/timeline/QTimeline.sass create mode 100644 src/components/timeline/QTimeline.styl create mode 100644 src/components/timeline/QTimelineEntry.js create mode 100644 src/components/timeline/QTimelineEntry.json create mode 100644 src/components/timeline/index.js create mode 100644 src/components/toggle/QToggle.js create mode 100644 src/components/toggle/QToggle.json create mode 100644 src/components/toggle/QToggle.sass create mode 100644 src/components/toggle/QToggle.styl create mode 100644 src/components/toggle/index.js create mode 100644 src/components/toolbar/QToolbar.js create mode 100644 src/components/toolbar/QToolbar.json create mode 100644 src/components/toolbar/QToolbar.sass create mode 100644 src/components/toolbar/QToolbar.styl create mode 100644 src/components/toolbar/QToolbarTitle.js create mode 100644 src/components/toolbar/QToolbarTitle.json create mode 100644 src/components/toolbar/index.js create mode 100644 src/components/tooltip/QTooltip.js create mode 100644 src/components/tooltip/QTooltip.json create mode 100644 src/components/tooltip/QTooltip.sass create mode 100644 src/components/tooltip/QTooltip.styl create mode 100644 src/components/tooltip/index.js create mode 100644 src/components/tree/QTree.js create mode 100644 src/components/tree/QTree.json create mode 100644 src/components/tree/QTree.sass create mode 100644 src/components/tree/QTree.styl create mode 100644 src/components/tree/index.js create mode 100644 src/components/uploader/QUploader.js create mode 100644 src/components/uploader/QUploader.json create mode 100644 src/components/uploader/QUploader.sass create mode 100644 src/components/uploader/QUploader.styl create mode 100644 src/components/uploader/QUploaderAddTrigger.js create mode 100644 src/components/uploader/QUploaderAddTrigger.json create mode 100644 src/components/uploader/QUploaderBase.js create mode 100644 src/components/uploader/QUploaderBase.json create mode 100644 src/components/uploader/index.js create mode 100644 src/components/uploader/uploader-xhr-mixin.js create mode 100644 src/components/video/QVideo.js create mode 100644 src/components/video/QVideo.json create mode 100644 src/components/video/QVideo.sass create mode 100644 src/components/video/QVideo.styl create mode 100644 src/components/video/index.js create mode 100644 src/components/virtual-scroll/QVirtualScroll.js create mode 100644 src/components/virtual-scroll/QVirtualScroll.json create mode 100644 src/components/virtual-scroll/QVirtualScroll.sass create mode 100644 src/components/virtual-scroll/QVirtualScroll.styl create mode 100644 src/components/virtual-scroll/index.js create mode 100644 src/css/core/animations.sass create mode 100644 src/css/core/animations.styl create mode 100644 src/css/core/colors.sass create mode 100644 src/css/core/colors.styl create mode 100644 src/css/core/dark.sass create mode 100644 src/css/core/dark.styl create mode 100644 src/css/core/elevation.sass create mode 100644 src/css/core/elevation.styl create mode 100644 src/css/core/flex.sass create mode 100644 src/css/core/flex.styl create mode 100644 src/css/core/helpers.sass create mode 100644 src/css/core/helpers.styl create mode 100644 src/css/core/mouse.sass create mode 100644 src/css/core/mouse.styl create mode 100644 src/css/core/orientation.sass create mode 100644 src/css/core/orientation.styl create mode 100644 src/css/core/positioning.sass create mode 100644 src/css/core/positioning.styl create mode 100644 src/css/core/size.sass create mode 100644 src/css/core/size.styl create mode 100644 src/css/core/touch.sass create mode 100644 src/css/core/touch.styl create mode 100644 src/css/core/transitions.sass create mode 100644 src/css/core/transitions.styl create mode 100644 src/css/core/typography.sass create mode 100644 src/css/core/typography.styl create mode 100644 src/css/core/visibility.sass create mode 100644 src/css/core/visibility.styl create mode 100644 src/css/flex-addon.sass create mode 100644 src/css/flex-addon.styl create mode 100644 src/css/helpers/math.sass create mode 100644 src/css/helpers/string.sass create mode 100644 src/css/index.sass create mode 100644 src/css/index.styl create mode 100644 src/css/normalize.sass create mode 100644 src/css/normalize.styl create mode 100644 src/css/variables.sass create mode 100644 src/css/variables.styl create mode 100644 src/directives.js create mode 100644 src/directives/ClosePopup.js create mode 100644 src/directives/ClosePopup.json create mode 100644 src/directives/GoBack.js create mode 100644 src/directives/GoBack.json create mode 100644 src/directives/Intersection.js create mode 100644 src/directives/Intersection.json create mode 100644 src/directives/KeyGroupNavigation.js create mode 100644 src/directives/KeyGroupNavigation.json create mode 100644 src/directives/Morph.js create mode 100644 src/directives/Morph.json create mode 100644 src/directives/Morph.sass create mode 100644 src/directives/Morph.styl create mode 100644 src/directives/Mutation.js create mode 100644 src/directives/Mutation.json create mode 100644 src/directives/Ripple.js create mode 100644 src/directives/Ripple.json create mode 100644 src/directives/Ripple.sass create mode 100644 src/directives/Ripple.styl create mode 100644 src/directives/Scroll.js create mode 100644 src/directives/Scroll.json create mode 100644 src/directives/ScrollFire.js create mode 100644 src/directives/ScrollFire.json create mode 100644 src/directives/TouchHold.js create mode 100644 src/directives/TouchHold.json create mode 100644 src/directives/TouchPan.js create mode 100644 src/directives/TouchPan.json create mode 100644 src/directives/TouchRepeat.js create mode 100644 src/directives/TouchRepeat.json create mode 100644 src/directives/TouchSwipe.js create mode 100644 src/directives/TouchSwipe.json create mode 100644 src/history.js create mode 100644 src/icon-set.js create mode 100644 src/ie-compat/ie.js create mode 100644 src/ie-compat/ie.sass create mode 100644 src/ie-compat/ie.styl create mode 100644 src/index.common.js create mode 100644 src/index.esm.js create mode 100644 src/index.umd.js create mode 100644 src/install.js create mode 100644 src/lang.js create mode 100644 src/mixins/align.js create mode 100644 src/mixins/anchor.js create mode 100644 src/mixins/anchor.json create mode 100644 src/mixins/attrs.js create mode 100644 src/mixins/btn.js create mode 100644 src/mixins/btn.json create mode 100644 src/mixins/can-render.js create mode 100644 src/mixins/checkbox.js create mode 100644 src/mixins/checkbox.json create mode 100644 src/mixins/dark.js create mode 100644 src/mixins/datetime.js create mode 100644 src/mixins/datetime.json create mode 100644 src/mixins/fab.js create mode 100644 src/mixins/fab.json create mode 100644 src/mixins/file.js create mode 100644 src/mixins/file.json create mode 100644 src/mixins/focus-wrap.js create mode 100644 src/mixins/form.js create mode 100644 src/mixins/form.json create mode 100644 src/mixins/fullscreen.js create mode 100644 src/mixins/fullscreen.json create mode 100644 src/mixins/history.js create mode 100644 src/mixins/listeners.js create mode 100644 src/mixins/mask.js create mode 100644 src/mixins/mask.json create mode 100644 src/mixins/model-toggle.js create mode 100644 src/mixins/model-toggle.json create mode 100644 src/mixins/option-size.js create mode 100644 src/mixins/panel-child.json create mode 100644 src/mixins/panel-parent.json create mode 100644 src/mixins/panel.js create mode 100644 src/mixins/panel.sass create mode 100644 src/mixins/panel.styl create mode 100644 src/mixins/portal.js create mode 100644 src/mixins/portal.json create mode 100644 src/mixins/prevent-scroll-ios.md create mode 100644 src/mixins/prevent-scroll.js create mode 100644 src/mixins/ratio.js create mode 100644 src/mixins/ratio.json create mode 100644 src/mixins/refocus-target.js create mode 100644 src/mixins/ripple.js create mode 100644 src/mixins/ripple.json create mode 100644 src/mixins/router-link.js create mode 100644 src/mixins/router-link.json create mode 100644 src/mixins/size.js create mode 100644 src/mixins/size.json create mode 100644 src/mixins/tag.js create mode 100644 src/mixins/tag.json create mode 100644 src/mixins/timeout.js create mode 100644 src/mixins/transition.js create mode 100644 src/mixins/validate.js create mode 100644 src/mixins/validate.json create mode 100644 src/mixins/virtual-scroll.js create mode 100644 src/mixins/virtual-scroll.json create mode 100644 src/plugins.js create mode 100644 src/plugins/AddressbarColor.js create mode 100644 src/plugins/AddressbarColor.json create mode 100644 src/plugins/AppFullscreen.js create mode 100644 src/plugins/AppFullscreen.json create mode 100644 src/plugins/AppVisibility.js create mode 100644 src/plugins/AppVisibility.json create mode 100644 src/plugins/BottomSheet.js create mode 100644 src/plugins/BottomSheet.json create mode 100644 src/plugins/Cookies.js create mode 100644 src/plugins/Cookies.json create mode 100644 src/plugins/Dark.js create mode 100644 src/plugins/Dark.json create mode 100644 src/plugins/Dialog.js create mode 100644 src/plugins/Dialog.json create mode 100644 src/plugins/Interaction.js create mode 100644 src/plugins/Interaction.json create mode 100644 src/plugins/Loading.js create mode 100644 src/plugins/Loading.json create mode 100644 src/plugins/Loading.sass create mode 100644 src/plugins/Loading.styl create mode 100644 src/plugins/LoadingBar.js create mode 100644 src/plugins/LoadingBar.json create mode 100644 src/plugins/LocalStorage.js create mode 100644 src/plugins/LocalStorage.json create mode 100644 src/plugins/Meta.js create mode 100644 src/plugins/Meta.json create mode 100644 src/plugins/Notify.js create mode 100644 src/plugins/Notify.json create mode 100644 src/plugins/Notify.sass create mode 100644 src/plugins/Notify.styl create mode 100644 src/plugins/Platform.js create mode 100644 src/plugins/Platform.json create mode 100644 src/plugins/Screen.js create mode 100644 src/plugins/Screen.json create mode 100644 src/plugins/SessionStorage.js create mode 100644 src/plugins/SessionStorage.json create mode 100644 src/ssr-update.js create mode 100644 src/utils.js create mode 100644 src/utils/clone.js create mode 100644 src/utils/colors.js create mode 100644 src/utils/copy-to-clipboard.js create mode 100644 src/utils/date.js create mode 100644 src/utils/debounce.js create mode 100644 src/utils/debounced-ref.js create mode 100644 src/utils/dom.js create mode 100644 src/utils/event.js create mode 100644 src/utils/export-file.js create mode 100644 src/utils/extend.js create mode 100644 src/utils/format.js create mode 100644 src/utils/frame-debounce.js create mode 100644 src/utils/is.js create mode 100644 src/utils/morph.js create mode 100644 src/utils/open-url.js create mode 100644 src/utils/patterns.js create mode 100644 src/utils/private/cache.js create mode 100644 src/utils/private/date-persian.js create mode 100644 src/utils/private/escape-key.js create mode 100644 src/utils/private/focus-manager.js create mode 100644 src/utils/private/global-dialog.js create mode 100644 src/utils/private/global-dialog.json create mode 100644 src/utils/private/inject-obj-prop.js create mode 100644 src/utils/private/key-composition.js create mode 100644 src/utils/private/position-engine.js create mode 100644 src/utils/private/selection.js create mode 100644 src/utils/private/slot.js create mode 100644 src/utils/private/sort.js create mode 100644 src/utils/private/touch.js create mode 100644 src/utils/private/vm.js create mode 100644 src/utils/private/web-storage.js create mode 100644 src/utils/private/web-storage.json create mode 100644 src/utils/run-sequential-promises.js create mode 100644 src/utils/scroll.js create mode 100644 src/utils/throttle.js create mode 100644 src/utils/uid.js create mode 100644 src/vue-plugin.js create mode 100644 wrappers/index.js diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000000..b85f5e69a6e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-present Razvan Stoenescu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000000..8a003cf5a44 --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +![Quasar Framework logo](https://cdn.quasar.dev/logo-v2/header.png) + +# Quasar Framework UI Package + +> Build high-performance VueJS user interfaces in record time: responsive Single Page Apps, SSR Apps, PWAs, Browser extensions, Hybrid Mobile Apps and Electron Apps. If you want, all using the same codebase! + + + +[![Join the chat at https://chat.quasar.dev](https://img.shields.io/badge/chat-on%20discord-7289da.svg)](https://chat.quasar.dev) + +[![https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg](https://good-labs.github.io/greater-good-affirmation/assets/images/badge.svg)](https://good-labs.github.io/greater-good-affirmation) + +Please submit a PR to https://github.com/quasarframework/quasar-awesome with your website/app/Quasar tutorial/video etc. Thank you! + +## Supporting Quasar +Quasar Framework is an MIT-licensed open source project. Its ongoing development is made possible thanks to the support by these awesome [backers](https://github.com/rstoenescu/quasar-framework/blob/dev/backers.md). + +**Please read our manifest on [Why donations are important](https://quasar.dev/why-donate)**. If you'd like to become a donator, check out [Quasar Framework's Donator campaign](https://donate.quasar.dev). + +## Documentation + +Head on to the Quasar Framework official website: [https://quasar.dev](https://quasar.dev) + +## Stay in Touch + +For latest releases and announcements, follow on Twitter: [@quasarframework](https://twitter.com/quasarframework) + +## Chat Support + +Ask questions at the official community Discord server: [https://chat.quasar.dev](https://chat.quasar.dev) + +## Community Forum + +Ask questions at the official community forum: [https://forum.quasar.dev](https://forum.quasar.dev) + +## Contributing + +I'm excited if you want to contribute to Quasar under any form (report bugs, write a plugin, fix an issue, write a new feature). Please read the [Contributing Guide](../CONTRIBUTING.md). + +## Semver +Quasar is following [Semantic Versioning 2.0](https://semver.org/). + +## License + +Copyright (c) 2015-present Razvan Stoenescu + +[MIT License](http://en.wikipedia.org/wiki/MIT_License) diff --git a/dist/api-list.json b/dist/api-list.json new file mode 100644 index 00000000000..0132bceff0b --- /dev/null +++ b/dist/api-list.json @@ -0,0 +1,154 @@ +[ + "AddressbarColor", + "AppFullscreen", + "AppVisibility", + "BottomSheet", + "Cookies", + "Dark", + "Dialog", + "Interaction", + "Loading", + "LoadingBar", + "LocalStorage", + "Meta", + "Notify", + "Platform", + "Screen", + "SessionStorage", + "ClosePopup", + "GoBack", + "Intersection", + "KeyGroupNavigation", + "Morph", + "Mutation", + "Ripple", + "Scroll", + "ScrollFire", + "TouchHold", + "TouchPan", + "TouchRepeat", + "TouchSwipe", + "QAjaxBar", + "QAvatar", + "QBadge", + "QBanner", + "QBar", + "QBreadcrumbs", + "QBreadcrumbsEl", + "QBtnDropdown", + "QBtnGroup", + "QBtnToggle", + "QBtn", + "QCard", + "QCardActions", + "QCardSection", + "QCarousel", + "QCarouselControl", + "QCarouselSlide", + "QChatMessage", + "QCheckbox", + "QChip", + "QCircularProgress", + "QColor", + "QDate", + "QDialog", + "QDrawer", + "QEditor", + "QExpansionItem", + "QFab", + "QFabAction", + "QField", + "QFile", + "QFooter", + "QForm", + "QHeader", + "QIcon", + "QImg", + "QInfiniteScroll", + "QInnerLoading", + "QInput", + "QIntersection", + "QItem", + "QItemLabel", + "QItemSection", + "QList", + "QKnob", + "QLayout", + "QLinearProgress", + "QMarkupTable", + "QMenu", + "QNoSsr", + "QOptionGroup", + "QPageScroller", + "QPageSticky", + "QPage", + "QPageContainer", + "QPagination", + "QParallax", + "QPopupEdit", + "QPopupProxy", + "QPullToRefresh", + "QRadio", + "QRange", + "QRating", + "QResizeObserver", + "QResponsive", + "QScrollArea", + "QScrollObserver", + "QSelect", + "QSeparator", + "QSkeleton", + "QSlideItem", + "QSlideTransition", + "QSlider", + "QSpace", + "QSpinner", + "QSpinnerAudio", + "QSpinnerBall", + "QSpinnerBars", + "QSpinnerBox", + "QSpinnerClock", + "QSpinnerComment", + "QSpinnerCube", + "QSpinnerDots", + "QSpinnerFacebook", + "QSpinnerGears", + "QSpinnerGrid", + "QSpinnerHearts", + "QSpinnerHourglass", + "QSpinnerInfinity", + "QSpinnerIos", + "QSpinnerOrbit", + "QSpinnerOval", + "QSpinnerPie", + "QSpinnerPuff", + "QSpinnerRadio", + "QSpinnerRings", + "QSpinnerTail", + "QSplitter", + "QStep", + "QStepper", + "QStepperNavigation", + "QTabPanel", + "QTabPanels", + "QTable", + "QTd", + "QTh", + "QTr", + "QRouteTab", + "QTab", + "QTabs", + "QTime", + "QTimeline", + "QTimelineEntry", + "QToggle", + "QToolbar", + "QToolbarTitle", + "QTooltip", + "QTree", + "QUploader", + "QUploaderAddTrigger", + "QUploaderBase", + "QVideo", + "QVirtualScroll" +] \ No newline at end of file diff --git a/dist/api/AddressbarColor.json b/dist/api/AddressbarColor.json new file mode 100644 index 00000000000..fb2eb47e498 --- /dev/null +++ b/dist/api/AddressbarColor.json @@ -0,0 +1,22 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/addressbar-color" + }, + "injection": "$q.addressbarColor", + "methods": { + "set": { + "desc": "Sets addressbar color (for browsers that support it)", + "params": { + "hexColor": { + "type": "String", + "desc": "Color in hex format", + "required": true, + "examples": [ + "#ff0000" + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/AppFullscreen.json b/dist/api/AppFullscreen.json new file mode 100644 index 00000000000..8f50478d151 --- /dev/null +++ b/dist/api/AppFullscreen.json @@ -0,0 +1,72 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/app-fullscreen" + }, + "injection": "$q.fullscreen", + "props": { + "isCapable": { + "type": "Boolean", + "desc": "Does browser support it?" + }, + "isActive": { + "type": "Boolean", + "desc": "Is Fullscreen active?" + }, + "activeEl": { + "type": "Object", + "desc": "The DOM element used as root for fullscreen, otherwise 'null'", + "addedIn": "v1.12.5" + } + }, + "methods": { + "request": { + "desc": "Request going into Fullscreen (with optional target)", + "params": { + "target": { + "type": "Element", + "desc": "Optional Element of target to request Fullscreen on", + "examples": [ + "document.getElementById('example')" + ] + } + }, + "returns": { + "type": "Promise", + "desc": "A Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "request().then(response => { ... }).catch(err => { ... })" + ] + } + }, + "exit": { + "desc": "Request exiting out of Fullscreen mode", + "returns": { + "type": "Promise", + "desc": "A Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "exit().then(response => { ... }).catch(err => { ... })" + ] + } + }, + "toggle": { + "desc": "Request toggling Fullscreen mode (with optional target if requesting going into Fullscreen only)", + "params": { + "target": { + "type": "Element", + "desc": "Optional Element of target to request Fullscreen on", + "examples": [ + "document.getElementById('example')" + ] + } + }, + "returns": { + "type": "Promise", + "desc": "A Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "toggle().then(response => { ... }).catch(err => { ... })" + ] + } + } + } +} \ No newline at end of file diff --git a/dist/api/AppVisibility.json b/dist/api/AppVisibility.json new file mode 100644 index 00000000000..fe41255d91b --- /dev/null +++ b/dist/api/AppVisibility.json @@ -0,0 +1,15 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/app-visibility" + }, + "injection": "$q.appVisible", + "props": { + "appVisible": { + "tsInjectionPoint": true, + "type": "Boolean", + "desc": "Does the app have user focus? Or the app runs in the background / another tab has the user's attention", + "reactive": true + } + } +} \ No newline at end of file diff --git a/dist/api/BottomSheet.json b/dist/api/BottomSheet.json new file mode 100644 index 00000000000..8a9fc133ae3 --- /dev/null +++ b/dist/api/BottomSheet.json @@ -0,0 +1,213 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/bottom-sheet" + }, + "injection": "$q.bottomSheet", + "methods": { + "create": { + "desc": "Creates an ad-hoc Bottom Sheet; Same as calling $q.bottomSheet(...)", + "params": { + "opts": { + "type": "Object", + "required": true, + "definition": { + "class": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS Class name to apply to the Dialog's QCard", + "examples": [ + "my-class" + ] + }, + "style": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS style to apply to the Dialog's QCard", + "examples": [ + "border: 2px solid black" + ] + }, + "title": { + "type": "String", + "desc": "Title", + "examples": [ + "Share" + ] + }, + "message": { + "type": "String", + "desc": "Message", + "examples": [ + "Please select how to share" + ] + }, + "actions": { + "type": "Array", + "desc": "Array of Objects, each Object defining an action", + "definition": { + "classes": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS classes for this action", + "examples": [ + "my-class" + ] + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "img": { + "type": "String", + "desc": "Path to an image for this action", + "examples": [ + "(public folder) img/something.png", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) https://some-site.net/some-img.gif" + ] + }, + "avatar": { + "type": "Boolean", + "desc": "Display img as avatar (round borders)" + }, + "label": { + "type": [ + "String", + "Number" + ], + "desc": "Action label", + "examples": [ + "Facebook" + ] + } + } + }, + "grid": { + "type": "Boolean", + "desc": "Display actions as a grid instead of as a list" + }, + "dark": { + "type": "Boolean", + "desc": "Apply dark mode", + "category": "style" + }, + "seamless": { + "type": "Boolean", + "desc": "Put Bottom Sheet into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too" + }, + "persistent": { + "type": "Boolean", + "desc": "User cannot dismiss Bottom Sheet if clicking outside of it or hitting ESC key" + } + }, + "desc": "Bottom Sheet options" + } + }, + "returns": { + "type": "Object", + "desc": "Chainable Object", + "tsType": "DialogChainObject", + "definition": { + "onOk": { + "type": "Function", + "desc": "Receives a Function param to tell what to do when OK is pressed / option is selected", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + } + }, + "onCancel": { + "type": "Function", + "desc": "Receives a Function as param to tell what to do when Cancel is pressed / dialog is dismissed", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + } + }, + "onDismiss": { + "type": "Function", + "desc": "Receives a Function param to tell what to do when the dialog is closed", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + } + }, + "hide": { + "type": "Function", + "desc": "Hides the dialog when called", + "params": null, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + } + }, + "update": { + "type": "Function", + "desc": "Updates the initial properties (given as create() param) except for 'component' and 'parent' (and deprecated 'root')", + "params": { + "opts": { + "type": "Object", + "desc": "Props (except 'component' and 'parent') which will overwrite the initial create() params" + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + }, + "addedIn": "v1.14" + } + } + }, + "tsInjectionPoint": true + } + } +} \ No newline at end of file diff --git a/dist/api/ClosePopup.json b/dist/api/ClosePopup.json new file mode 100644 index 00000000000..191f35a31b6 --- /dev/null +++ b/dist/api/ClosePopup.json @@ -0,0 +1,21 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/close-popup" + }, + "value": { + "type": [ + "Boolean", + "Number", + "String" + ], + "desc": "If value is 0 or 'false' then directive is disabled; if value is < 0 then it closes all popups in the chain; if value is 1 or 'true' or undefined then it closes only the parent popup; if value is > 1 it closes the specified number of parent popups in the chain (note that chained QMenus are considered 1 popup only & QPopupProxy separates chained menus)", + "examples": [ + "v-close-popup", + "v-close-popup=\"booleanState\"", + "v-close-popup=\"-1\"", + "v-close-popup=\"2\"", + "v-close-popup=\"0\"" + ] + } +} \ No newline at end of file diff --git a/dist/api/Cookies.json b/dist/api/Cookies.json new file mode 100644 index 00000000000..056139fe7cf --- /dev/null +++ b/dist/api/Cookies.json @@ -0,0 +1,247 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/cookies" + }, + "injection": "$q.cookies", + "methods": { + "get": { + "tsType": "CookiesGetMethodType", + "desc": "Get cookie", + "params": { + "name": { + "type": "String", + "desc": "Cookie name", + "required": true, + "examples": [ + "userId" + ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": [ + "String", + "null" + ], + "desc": "Cookie value; Returns null if cookie not found", + "examples": [ + "john12" + ] + } + }, + "getAll": { + "desc": "Get all cookies", + "params": { + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": "Object", + "desc": "Object with cookie names (as keys) and their values", + "examples": [ + "{ userId: 'john12', XFrame: 'x534' }" + ] + } + }, + "set": { + "desc": "Set cookie", + "params": { + "name": { + "type": "String", + "desc": "Cookie name", + "required": true, + "examples": [ + "userId" + ] + }, + "value": { + "type": "String", + "desc": "Cookie value", + "required": true, + "examples": [ + "john12" + ] + }, + "options": { + "type": "Object", + "desc": "Cookie options", + "definition": { + "expires": { + "type": [ + "Number", + "String", + "Date" + ], + "desc": "Cookie expires detail; If specified as Number, then the unit is days; If specified as String, it can either be raw stringified date or in Xd Xh Xm Xs format (see examples)", + "examples": [ + 30, + "Wed, 13 Jan 2021 22:23:01 GMT", + "1d", + "15m", + "13d", + "1d 15m", + "1d 3h 5m 3s" + ] + }, + "path": { + "type": "String", + "desc": "Cookie path", + "examples": [ + "/accounts" + ] + }, + "domain": { + "type": "String", + "desc": "Cookie domain", + "examples": [ + ".foo.com" + ] + }, + "sameSite": { + "type": "String", + "desc": "SameSite cookie option (not supported by IE11)", + "examples": [ + "Strict", + "Lax" + ], + "addedIn": "v1.1.1" + }, + "httpOnly": { + "type": "Boolean", + "desc": "Is cookie Http Only?" + }, + "secure": { + "type": "Boolean", + "desc": "Is cookie secure? (https only)" + }, + "other": { + "type": "String", + "desc": "Raw string for other cookie options; To be used as a last resort for possible newer props that are currently not yet implemented in Quasar", + "examples": [ + "SomeNewCookieProp" + ], + "addedIn": "v1.1.1" + } + } + } + } + }, + "has": { + "desc": "Check if cookie exists", + "params": { + "name": { + "type": "String", + "desc": "Cookie name", + "required": true, + "examples": [ + "userId" + ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": "Boolean", + "desc": "Does cookie exists or not?" + } + }, + "remove": { + "desc": "Remove a cookie", + "params": { + "name": { + "type": "String", + "desc": "Cookie name", + "required": true, + "examples": [ + "userId" + ] + }, + "options": { + "type": "Object", + "desc": "Cookie options", + "definition": { + "path": { + "type": "String", + "desc": "Cookie path", + "examples": [ + "/accounts" + ] + }, + "domain": { + "type": "String", + "desc": "Cookie domain", + "examples": [ + ".foo.com" + ] + } + } + } + } + }, + "parseSSR": { + "desc": "For SSR usage only, and only on the global import (not on $q.cookies)", + "params": { + "ssrContext": { + "type": "Object", + "desc": "SSR Context Object", + "required": true + } + }, + "returns": { + "type": "Object", + "tsType": "Cookies", + "desc": "Cookie object (like $q.cookies) for SSR usage purposes" + } + } + } +} \ No newline at end of file diff --git a/dist/api/Dark.json b/dist/api/Dark.json new file mode 100644 index 00000000000..7a9a10ae563 --- /dev/null +++ b/dist/api/Dark.json @@ -0,0 +1,51 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/dark" + }, + "injection": "$q.dark", + "addedIn": "v1.3", + "props": { + "isActive": { + "type": "Boolean", + "desc": "Is Dark mode active? Has value `null` when on SSR and dark set to `auto`", + "reactive": true + }, + "mode": { + "type": [ + "Boolean", + "String" + ], + "desc": "Dark mode configuration (not status)", + "values": [ + "auto", + "(Boolean) true", + "(Boolean) false" + ], + "reactive": true + } + }, + "methods": { + "set": { + "desc": "Set dark mode status", + "params": { + "status": { + "type": [ + "Boolean", + "String" + ], + "desc": "Dark mode status", + "values": [ + "(Boolean) true", + "(Boolean) false", + "auto" + ], + "required": true + } + } + }, + "toggle": { + "desc": "Toggle dark mode status" + } + } +} \ No newline at end of file diff --git a/dist/api/Dialog.json b/dist/api/Dialog.json new file mode 100644 index 00000000000..89466d23437 --- /dev/null +++ b/dist/api/Dialog.json @@ -0,0 +1,500 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/dialog" + }, + "injection": "$q.dialog", + "methods": { + "create": { + "desc": "Creates an ad-hoc Dialog; Same as calling $q.dialog(...)", + "params": { + "opts": { + "type": "Object", + "required": true, + "definition": { + "class": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS Class name to apply to the Dialog's QCard", + "examples": [ + "my-class" + ] + }, + "style": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS style to apply to the Dialog's QCard", + "examples": [ + "border: 2px solid black" + ] + }, + "title": { + "type": "String", + "desc": "A text for the heading title of the dialog", + "examples": [ + "Continue?" + ] + }, + "message": { + "type": "String", + "desc": "A text with more information about what needs to be input, selected or confirmed.", + "examples": [ + "Are you certain you want to continue?" + ] + }, + "html": { + "type": "Boolean", + "desc": "Render title and message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + "position": { + "type": "String", + "desc": "Position of the Dialog on screen. Standard is centered.", + "values": [ + "top", + "right", + "bottom", + "left", + "standard" + ], + "default": "standard" + }, + "prompt": { + "type": "Object", + "desc": "An object definition of the input field for the prompting question.", + "examples": [ + "prompt: { model: this.promptVal, type: 'number' }" + ], + "definition": { + "model": { + "type": "String", + "desc": "The initial value of the input", + "required": true + }, + "type": { + "type": "String", + "desc": "Optional property to determine the input field type", + "default": "text", + "examples": [ + "text", + "number", + "textarea" + ] + }, + "isValid": { + "type": "Function", + "desc": "Is typed content valid?", + "params": { + "val": { + "type": "String", + "desc": "The value of the input" + } + }, + "returns": { + "type": "Boolean", + "desc": "The text passed validation or not" + } + }, + "attrs": { + "type": "Object", + "desc": "Attributes to pass to prompt control", + "examples": [ + "{ autocomplete: 'off' }" + ], + "addedIn": "v1.9.12" + }, + "label": { + "type": "String", + "desc": "A text label that will “float” up above the input field, once the field gets focus", + "examples": [ + "Username" + ], + "addedIn": "v1.9.3" + }, + "stackLabel": { + "type": "Boolean", + "desc": "Label will be always shown above the field regardless of field content (if any)", + "addedIn": "v1.9.3" + }, + "filled": { + "type": "Boolean", + "desc": "Use 'filled' design for the field", + "addedIn": "v1.9.3" + }, + "outlined": { + "type": "Boolean", + "desc": "Use 'outlined' design for the field", + "addedIn": "v1.9.3" + }, + "standout": { + "type": [ + "Boolean", + "String" + ], + "desc": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)", + "examples": [ + "standout", + "standout=\"bg-primary text-white\"" + ], + "addedIn": "v1.9.3" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style", + "addedIn": "v1.12.3" + }, + "square": { + "type": "Boolean", + "desc": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "addedIn": "v1.12.3" + }, + "counter": { + "type": "Boolean", + "desc": "Show an automatic counter on bottom right", + "addedIn": "v1.12.3" + }, + "maxlength": { + "type": [ + "String", + "Number" + ], + "desc": "Specify a max length of model", + "examples": [ + "12" + ], + "addedIn": "v1.12.3" + }, + "prefix": { + "type": "String", + "desc": "Prefix", + "examples": [ + "$" + ], + "addedIn": "v1.12.3" + }, + "suffix": { + "type": "String", + "desc": "Suffix", + "examples": [ + "@gmail.com" + ], + "addedIn": "v1.12.3" + } + } + }, + "options": { + "type": "Object", + "desc": "An object definition for creating the selection form content", + "examples": [ + "{ model: this.dialogSelection, type: 'radio', items: [...listOfItems] }" + ], + "definition": { + "model": { + "type": [ + "String", + "Array" + ], + "desc": "The value of the selection (String if it's of type radio or Array otherwise)", + "required": true, + "examples": [ + "[]" + ] + }, + "type": { + "type": "String", + "desc": "The type of selection", + "default": "radio", + "values": [ + "radio", + "checkbox", + "toggle" + ] + }, + "items": { + "type": "Array", + "desc": "The list of options to interact with; Equivalent to options prop of the QOptionsGroup component", + "examples": [ + "[ { label: 'Option 1', value: 'op1' }, { label: 'Option 2', value: 'op2' }, { label: 'Option 3', value: 'op3' } ]" + ] + }, + "isValid": { + "type": "Function", + "desc": "Is the model valid?", + "params": { + "model": { + "type": [ + "String", + "Array" + ], + "desc": "The current model (String if it's of type radio or Array otherwise)", + "examples": [ + "opt2", + "[ 'opt1' ]", + "[]", + "[ 'opt1', 'opt3' ]" + ] + } + }, + "returns": { + "type": "Boolean", + "desc": "The selection passed validation or not" + } + } + } + }, + "progress": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Display a Quasar spinner (if value is true, then the defaults are used); Useful for conveying the idea that something is happening behind the covers; Tip: use along with persistent, ok: false and update() method", + "definition": { + "spinner": { + "type": "Component", + "desc": "One of the QSpinners" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + }, + "addedIn": "v1.14" + }, + "ok": { + "type": [ + "String", + "Object", + "Boolean" + ], + "desc": "Props for an 'OK' button", + "definition": { + "...props": { + "type": "Any", + "desc": "See QBtn for available props" + } + } + }, + "cancel": { + "type": [ + "String", + "Object", + "Boolean" + ], + "desc": "Props for a 'CANCEL' button", + "definition": { + "...props": { + "type": "Any", + "desc": "See QBtn for available props" + } + } + }, + "focus": { + "type": "String", + "desc": "What button to focus, unless you also have 'prompt' or 'options'", + "values": [ + "ok", + "cancel", + "none" + ], + "default": "ok", + "addedIn": "v1.5" + }, + "stackButtons": { + "type": "Boolean", + "desc": "Makes buttons be stacked instead of vertically aligned" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Apply dark mode", + "category": "style" + }, + "persistent": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog if clicking outside of it or hitting ESC key; Also, an app route change won't dismiss it" + }, + "noEscDismiss": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog by hitting ESC key; No need to set it if 'persistent' prop is also set" + }, + "noBackdropDismiss": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog by clicking outside of it; No need to set it if 'persistent' prop is also set" + }, + "noRouteDismiss": { + "type": "Boolean", + "desc": "Changing route app won't dismiss Dialog; No need to set it if 'persistent' prop is also set" + }, + "seamless": { + "type": "Boolean", + "desc": "Put Dialog into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too" + }, + "maximized": { + "type": "Boolean", + "desc": "Put Dialog into maximized mode" + }, + "fullWidth": { + "type": "Boolean", + "desc": "Dialog will try to render with same width as the window" + }, + "fullHeight": { + "type": "Boolean", + "desc": "Dialog will try to render with same height as the window" + }, + "transitionShow": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "scale" + }, + "transitionHide": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "scale" + }, + "component": { + "type": "Any", + "desc": "Use custom dialog component; use along with 'parent' prop where possible; if using this prop, all others described here will be supplied to your custom component" + }, + "parent": { + "type": "Object", + "desc": "Required if using 'component' prop and you need access to vuex store, router and so on; Specify Vue parent component", + "examples": [ + "parent: this" + ] + }, + "root": { + "type": "Object", + "desc": "Deprecated alias for parent", + "examples": [ + "root: this" + ] + }, + "...props": { + "type": "Any", + "desc": "User defined props which will be forwarded to underlying custom component if 'component' prop is used" + } + }, + "desc": "Dialog options", + "tsType": "QDialogOptions" + } + }, + "returns": { + "type": "Object", + "desc": "Chainable Object", + "tsType": "DialogChainObject", + "definition": { + "onOk": { + "type": "Function", + "desc": "Receives a Function param to tell what to do when OK is pressed / option is selected", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + } + }, + "onCancel": { + "type": "Function", + "desc": "Receives a Function as param to tell what to do when Cancel is pressed / dialog is dismissed", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + } + }, + "onDismiss": { + "type": "Function", + "desc": "Receives a Function param to tell what to do when the dialog is closed", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + } + }, + "hide": { + "type": "Function", + "desc": "Hides the dialog when called", + "params": null, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + } + }, + "update": { + "type": "Function", + "desc": "Updates the initial properties (given as create() param) except for 'component' and 'parent' (and deprecated 'root')", + "params": { + "opts": { + "type": "Object", + "desc": "Props (except 'component' and 'parent') which will overwrite the initial create() params" + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject" + }, + "addedIn": "v1.14" + } + } + }, + "tsInjectionPoint": true + } + } +} \ No newline at end of file diff --git a/dist/api/GoBack.json b/dist/api/GoBack.json new file mode 100644 index 00000000000..20802b79475 --- /dev/null +++ b/dist/api/GoBack.json @@ -0,0 +1,27 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/go-back" + }, + "value": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ] + }, + "modifiers": { + "single": { + "type": "Boolean", + "desc": "Go back to previous route instead of the whole way to before directive was initialized", + "reactive": true, + "examples": [ + "v-go-back.single" + ] + } + } +} \ No newline at end of file diff --git a/dist/api/Interaction.json b/dist/api/Interaction.json new file mode 100644 index 00000000000..799144ffc15 --- /dev/null +++ b/dist/api/Interaction.json @@ -0,0 +1,70 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/options/interaction-plugins" + }, + "injection": "$q.interaction", + "addedIn": "v1.4.6", + "props": { + "isKeyboard": { + "type": "Boolean", + "desc": "Last event was a keyboard one", + "reactive": true + }, + "isComposing": { + "type": "Boolean", + "desc": "Last event was a keyboard composing one", + "reactive": true + }, + "isPointer": { + "type": "Boolean", + "desc": "Last event was a pointer one (mouse or touch)", + "reactive": true + }, + "isMouse": { + "type": "Boolean", + "desc": "Last event was a mouse one", + "reactive": true + }, + "isTouch": { + "type": "Boolean", + "desc": "Last event was a touch one", + "reactive": true + }, + "isDrag": { + "type": "Boolean", + "desc": "Last event was a drag and drop one", + "reactive": true + }, + "isContext": { + "type": "Boolean", + "desc": "Last event was a context menu one", + "reactive": true + }, + "isPending": { + "type": "Boolean", + "desc": "Last event is in progress (start event without a cancel or end event)", + "reactive": true + }, + "event": { + "type": "Object", + "desc": "Last event", + "reactive": true + } + }, + "methods": { + "preventClick": { + "desc": "Prevent next click event on a target element", + "params": { + "target": { + "type": "Element", + "desc": "The element where it should prevent click" + }, + "stop": { + "type": "Boolean", + "desc": "Stop propagation of the event" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/Intersection.json b/dist/api/Intersection.json new file mode 100644 index 00000000000..78f05be9e4e --- /dev/null +++ b/dist/api/Intersection.json @@ -0,0 +1,280 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/intersection" + }, + "addedIn": "v1.3", + "value": { + "type": [ + "Object", + "Function" + ], + "desc": "Function to call when scrolling occurs (identical to description of 'handler' prop of the Object form); If using the Object form, it is HIGHLY recommended to reference it from your vue component scope, otherwise the directive update cycle will continuously recreate the observer which hits performance hard", + "examples": [ + "v-intersection=\"myFunction\"", + "v-intersection=\"{ handler: myFunction, cfg: { root: myScrollingParentEl, rootMargin: '10px 20px 30px 40px', threshold: [0, 0.25, 0.5, 0.75, 1] } }\"" + ], + "definition": { + "handler": { + "type": "Function", + "desc": "The handler function to be called", + "returns": { + "type": "Boolean", + "desc": "If you return Boolean false from the handler, the observer stops" + }, + "params": { + "entry": { + "type": "Object", + "desc": "The IntersectionObserverEntry object", + "definition": { + "boundingClientRect": { + "type": "Object", + "desc": "Object containing the client rect information", + "definition": { + "bottom": { + "type": "Number", + "desc": "The bottom of the client rect", + "examples": [ + "1770" + ] + }, + "height": { + "type": "Number", + "desc": "The height of the client rect", + "examples": [ + "50" + ] + }, + "left": { + "type": "Number", + "desc": "The left of the client rect", + "examples": [ + "49" + ] + }, + "right": { + "type": "Number", + "desc": "The right of the client rect", + "examples": [ + "384" + ] + }, + "top": { + "type": "Number", + "desc": "The top of the client rect", + "examples": [ + "1720" + ] + }, + "width": { + "type": "Number", + "desc": "The width of the client rect", + "examples": [ + "335" + ] + }, + "x": { + "type": "Number", + "desc": "The x position of the client rect", + "examples": [ + "49" + ] + }, + "y": { + "type": "Number", + "desc": "The y position of the client rect", + "examples": [ + "1720" + ] + } + } + }, + "intersectionRatio": { + "type": "Number", + "desc": "The ratio of the observed objects visibility", + "examples": [ + "0.5" + ] + }, + "intersectionRect": { + "type": "Object", + "desc": "Object containing the client rect information", + "definition": { + "bottom": { + "type": "Number", + "desc": "The bottom of the client rect", + "examples": [ + "0" + ] + }, + "height": { + "type": "Number", + "desc": "The height of the client rect", + "examples": [ + "0" + ] + }, + "left": { + "type": "Number", + "desc": "The left of the client rect", + "examples": [ + "0" + ] + }, + "right": { + "type": "Number", + "desc": "The right of the client rect", + "examples": [ + "0" + ] + }, + "top": { + "type": "Number", + "desc": "The top of the client rect", + "examples": [ + "0" + ] + }, + "width": { + "type": "Number", + "desc": "The width of the client rect", + "examples": [ + "0" + ] + }, + "x": { + "type": "Number", + "desc": "The x position of the client rect", + "examples": [ + "0" + ] + }, + "y": { + "type": "Number", + "desc": "The y position of the client rect", + "examples": [ + "0" + ] + } + } + }, + "isIntersecting": { + "type": "Boolean", + "desc": "It is Boolean true if intersecting the scrollable area" + }, + "rootBounds": { + "type": "Object", + "desc": "Object containing the client rect information", + "definition": { + "bottom": { + "type": "Number", + "desc": "The bottom of the client rect", + "examples": [ + "0" + ] + }, + "height": { + "type": "Number", + "desc": "The height of the client rect", + "examples": [ + "0" + ] + }, + "left": { + "type": "Number", + "desc": "The left of the client rect", + "examples": [ + "0" + ] + }, + "right": { + "type": "Number", + "desc": "The right of the client rect", + "examples": [ + "0" + ] + }, + "top": { + "type": "Number", + "desc": "The top of the client rect", + "examples": [ + "0" + ] + }, + "width": { + "type": "Number", + "desc": "The width of the client rect", + "examples": [ + "0" + ] + }, + "x": { + "type": "Number", + "desc": "The x position of the client rect", + "examples": [ + "0" + ] + }, + "y": { + "type": "Number", + "desc": "The y position of the client rect", + "examples": [ + "0" + ] + } + } + }, + "target": { + "type": "Element", + "desc": "The target element" + }, + "time": { + "type": "Number", + "desc": "The timestamp of the event", + "examples": [ + "6316.879999998491" + ] + } + } + } + } + }, + "cfg": { + "type": "Object", + "desc": "Intersection observer options (can be omitted and all its props are optional)", + "definition": { + "root": { + "type": "Element", + "desc": "Lets you define an alternative to the viewport as your root (through its DOM element); It is important to keep in mind that root needs to be an ancestor of the observed element", + "examples": [ + "myScrollingParentEl" + ] + }, + "rootMargin": { + "type": "String", + "desc": "Allows you to specify the margins for the root, effectively allowing you to either grow or shrink the area used for intersections", + "examples": [ + "10px 20px 30px 40px" + ] + }, + "threshold": { + "type": "Array", + "desc": "Threshold(s) at which to trigger callback, specified as a ratio, or list of ratios, of (visible area / total area) of the observed element", + "examples": [ + "[ 0, 0.25, 0.5, 0.75, 1 ]" + ] + } + } + } + } + }, + "modifiers": { + "once": { + "type": "Boolean", + "desc": "Call handler only once, when the conditions are first met", + "examples": [ + "v-intersection.once" + ] + } + } +} \ No newline at end of file diff --git a/dist/api/KeyGroupNavigation.json b/dist/api/KeyGroupNavigation.json new file mode 100644 index 00000000000..ff16810fd79 --- /dev/null +++ b/dist/api/KeyGroupNavigation.json @@ -0,0 +1,46 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/key-group-navigation" + }, + "value": { + "type": [ + "Boolean", + "Number", + "String" + ], + "desc": "If value is 0, '0' or 'false' then directive is disabled; else it is enabled)", + "examples": [ + "v-key-group-navigation", + "v-key-group-navigation=\"booleanState\"", + "v-key-group-navigation=\"0\"", + "v-key-group-navigation=\"false\"" + ] + }, + "arg": { + "type": "String", + "desc": "y:x:z, where y is the step for vertical movement, x is the step for horizontal movement and z is a class name to be applied on the grouping element when it's active (default q-key-group-navigation--active)", + "default": "1:1", + "examples": [ + "v-key-group-navigation:7:1", + "v-key-group-navigation:3" + ] + }, + "modifiers": { + "horizontal": { + "type": "Boolean", + "desc": "Navigate using HOME, ARROW_LEFT, ARROW_RIGHT or END keys", + "reactive": true + }, + "vertical": { + "type": "Boolean", + "desc": "Navigate using PG_UP, ARROW_UP, ARROW_DOWN or PG_DOWN keys", + "reactive": true + }, + "all": { + "type": "Boolean", + "desc": "Default - Navigate using HOME / PG_UP, ARROW_LEFT / ARROW_UP, ARROW_RIGHT / ARROW_DOWN or END / PG_DOWN keys", + "reactive": true + } + } +} \ No newline at end of file diff --git a/dist/api/Loading.json b/dist/api/Loading.json new file mode 100644 index 00000000000..a6ed217aa13 --- /dev/null +++ b/dist/api/Loading.json @@ -0,0 +1,289 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/loading" + }, + "injection": "$q.loading", + "quasarConfOptions": { + "propName": "loading", + "definition": { + "delay": { + "type": "Number", + "desc": "Wait a number of millisecond before showing; Not worth showing for 100ms for example then hiding it, so wait until you're sure it's a process that will take some considerable amount of time", + "examples": [ + 400 + ] + }, + "message": { + "type": "String", + "desc": "Message to display", + "examples": [ + "Processing your request" + ] + }, + "group": { + "type": "String", + "desc": "Default Loading group name", + "default": "__default_quasar_group__", + "examples": [ + "default-group-name" + ], + "addedIn": "v1.20" + }, + "sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render message; Use it when the message might be unsafe (from user input)", + "category": "behavior" + }, + "spinnerSize": { + "type": "Number", + "desc": "Spinner size (in pixels)", + "examples": [ + 60 + ] + }, + "spinnerColor": { + "type": "String", + "desc": "Color name for spinner from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "messageColor": { + "type": "String", + "desc": "Color name for text from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "backgroundColor": { + "type": "String", + "desc": "Color name for background from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "spinner": { + "type": "Component", + "desc": "One of the QSpinners" + }, + "customClass": { + "type": "String", + "desc": "Add a CSS class to easily customize the component", + "examples": [ + "my-class" + ] + } + } + }, + "props": { + "isActive": { + "type": "Boolean", + "desc": "Is Loading active?", + "reactive": true + } + }, + "methods": { + "show": { + "desc": "Activate and show", + "params": { + "opts": { + "type": "Object", + "desc": "All props are optional", + "definition": { + "delay": { + "type": "Number", + "desc": "Wait a number of millisecond before showing; Not worth showing for 100ms for example then hiding it, so wait until you're sure it's a process that will take some considerable amount of time", + "examples": [ + 400 + ] + }, + "message": { + "type": "String", + "desc": "Message to display", + "examples": [ + "Processing your request" + ] + }, + "group": { + "type": "String", + "desc": "Loading group name", + "examples": [ + "some-api-call" + ], + "addedIn": "v1.20" + }, + "sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render message; Use it when the message might be unsafe (from user input)", + "category": "behavior" + }, + "spinnerSize": { + "type": "Number", + "desc": "Spinner size (in pixels)", + "examples": [ + 60 + ] + }, + "spinnerColor": { + "type": "String", + "desc": "Color name for spinner from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "messageColor": { + "type": "String", + "desc": "Color name for text from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "backgroundColor": { + "type": "String", + "desc": "Color name for background from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "spinner": { + "type": "Component", + "desc": "One of the QSpinners" + }, + "customClass": { + "type": "String", + "desc": "Add a CSS class to easily customize the component", + "examples": [ + "my-class" + ] + }, + "ignoreDefaults": { + "type": "Boolean", + "desc": "Ignore the default configuration (set by setDefaults()) for this instance only", + "addedIn": "v1.1" + } + } + } + }, + "returns": { + "type": "Function", + "desc": "Calling this function with no parameters hides the group; When called with one Object parameter then it updates the Loading group (specified properties are shallow merged with the group ones; note that group cannot be changed while updating and it is ignored)", + "params": { + "props": { + "type": "Object", + "required": false, + "desc": "Loading properties that will be shallow merged to the group ones; (See 'opts' param of 'show()' for object properties, except 'group')" + } + }, + "returns": null, + "addedIn": "v1.20" + } + }, + "hide": { + "desc": "Hide it", + "params": { + "group": { + "type": "String", + "desc": "Optional Loading group name to hide instead of hiding all groups", + "required": false, + "examples": [ + "some-api-call" + ], + "addedIn": "v1.20" + } + } + }, + "setDefaults": { + "desc": "Merge options into the default ones", + "params": { + "opts": { + "type": "Object", + "desc": "Pick the subprop you want to define", + "required": true, + "definition": { + "delay": { + "type": "Number", + "desc": "Wait a number of millisecond before showing; Not worth showing for 100ms for example then hiding it, so wait until you're sure it's a process that will take some considerable amount of time", + "examples": [ + 400 + ] + }, + "message": { + "type": "String", + "desc": "Message to display", + "examples": [ + "Processing your request" + ] + }, + "group": { + "type": "String", + "desc": "Default Loading group name", + "default": "__default_quasar_group__", + "examples": [ + "default-group-name" + ], + "addedIn": "v1.20" + }, + "spinnerSize": { + "type": "Number", + "desc": "Spinner size (in pixels)", + "examples": [ + 60 + ] + }, + "spinnerColor": { + "type": "String", + "desc": "Color name for spinner from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "messageColor": { + "type": "String", + "desc": "Color name for text from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "backgroundColor": { + "type": "String", + "desc": "Color name for background from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "spinner": { + "type": "Component", + "desc": "One of the QSpinners" + }, + "customClass": { + "type": "String", + "desc": "Add a CSS class to easily customize the component", + "examples": [ + "my-class" + ] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/LoadingBar.json b/dist/api/LoadingBar.json new file mode 100644 index 00000000000..89aa3bfc494 --- /dev/null +++ b/dist/api/LoadingBar.json @@ -0,0 +1,62 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/loading-bar" + }, + "injection": "$q.loadingBar", + "quasarConfOptions": { + "propName": "loadingBar", + "definition": { + "...props": { + "type": "Object", + "desc": "QAjaxBar component props, EXCEPT for 'hijack-filter'" + } + } + }, + "props": { + "isActive": { + "type": "Boolean", + "desc": "Is LoadingBar active?", + "reactive": true + } + }, + "methods": { + "start": { + "desc": "Notify bar you've started a background activity", + "params": { + "speed": { + "type": "Number", + "desc": "Delay (in milliseconds) between bar progress increments", + "examples": [ + 150 + ] + } + } + }, + "stop": { + "desc": "Notify bar one background activity has finalized" + }, + "increment": { + "desc": "Manually trigger a bar progress increment", + "params": { + "amount": { + "type": "Number", + "desc": "Amount (0.0 < x < 1.0) to increment with", + "examples": [ + 0.22 + ] + } + } + }, + "setDefaults": { + "desc": "Set the inner QAjaxBar's props", + "params": { + "...props": { + "type": "Object", + "desc": "QAjaxBar component props", + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/LocalStorage.json b/dist/api/LocalStorage.json new file mode 100644 index 00000000000..57416af2732 --- /dev/null +++ b/dist/api/LocalStorage.json @@ -0,0 +1,267 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/web-storage" + }, + "injection": "$q.localStorage", + "methods": { + "has": { + "desc": "Check if storage item exists", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ + "userId" + ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": "Boolean", + "desc": "Does the item exists or not?" + } + }, + "getLength": { + "desc": "Get storage number of entries", + "returns": { + "type": "Number", + "desc": "Number of entries", + "examples": [ + 21 + ] + } + }, + "getItem": { + "tsType": "WebStorageGetItemMethodType", + "desc": "Get a storage item value", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ + "userId" + ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": [ + "Date", + "RegExp", + "Number", + "Boolean", + "Function", + "Object", + "Array", + "String", + "null" + ], + "desc": "Storage item value", + "examples": [ + "john12", + 702 + ] + } + }, + "getIndex": { + "tsType": "WebStorageGetIndexMethodType", + "desc": "Get the storage item value at specific index", + "params": { + "index": { + "type": "Number", + "desc": "Entry index", + "required": true, + "examples": [ + 5 + ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": [ + "Number", + "null" + ], + "desc": "Storage item index", + "examples": [ + 7 + ] + } + }, + "getKey": { + "tsType": "WebStorageGetKeyMethodType", + "desc": "Get the storage key at specific index", + "params": { + "index": { + "type": "Number", + "desc": "Entry index", + "required": true, + "examples": [ + 5 + ] + } + }, + "returns": { + "type": [ + "String", + "null" + ], + "desc": "Storage key", + "examples": [ + "userId" + ] + }, + "addedIn": "v1.9.4" + }, + "getAll": { + "desc": "Retrieve all items in storage", + "params": { + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": "Object", + "desc": "Object syntax: item name as Object key and its value", + "examples": [ + "{ userId: 'jon12', timesLoggedIn: 14 }" + ] + } + }, + "getAllKeys": { + "tsType": "WebStorageGetAllKeysMethodType", + "desc": "Retrieve all keys in storage", + "returns": { + "type": "Array", + "desc": "Storage keys (Array of Strings)", + "examples": [ + "['userId', 'password']" + ] + }, + "addedIn": "v1.9.4" + }, + "set": { + "desc": "Set item in storage", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ + "userId" + ] + }, + "value": { + "type": [ + "Date", + "RegExp", + "Number", + "Boolean", + "Function", + "Object", + "Array", + "String", + "null" + ], + "desc": "Entry value", + "required": true, + "examples": [ + "john12" + ] + } + } + }, + "remove": { + "desc": "Remove a storage item", + "params": { + "key": { + "type": "String", + "desc": "Storage key", + "required": true, + "examples": [ + "userId" + ] + } + } + }, + "clear": { + "desc": "Remove everything from the storage" + }, + "isEmpty": { + "desc": "Determine if storage has any items", + "returns": { + "type": "Boolean", + "desc": "Tells if storage is empty or not" + } + } + } +} \ No newline at end of file diff --git a/dist/api/Meta.json b/dist/api/Meta.json new file mode 100644 index 00000000000..ea1434ee443 --- /dev/null +++ b/dist/api/Meta.json @@ -0,0 +1,6 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/meta" + } +} \ No newline at end of file diff --git a/dist/api/Morph.json b/dist/api/Morph.json new file mode 100644 index 00000000000..b00d1195ae4 --- /dev/null +++ b/dist/api/Morph.json @@ -0,0 +1,200 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/morph" + }, + "addedIn": "v1.13", + "value": { + "type": [ + "Object", + "Any" + ], + "desc": "Configuration object or trigger value", + "definition": { + "group": { + "type": "String", + "desc": "Name of the morph group the element belongs to", + "examples": [ + "dialogGroup" + ] + }, + "name": { + "type": "String", + "desc": "Name of the morph inside the group that the element belongs to", + "examples": [ + "btn" + ] + }, + "model": { + "type": "String", + "desc": "Current value of the group model; when it becomes the same as the 'name' it triggers the morphing", + "examples": [ + "btn" + ] + }, + "duration": { + "type": "Number", + "desc": "Duration of the animation (in milliseconds)", + "default": "300", + "examples": [ + "500" + ] + }, + "delay": { + "type": "Number", + "desc": "Delay for the animation (in milliseconds)", + "default": "0", + "examples": [ + "500" + ] + }, + "easing": { + "type": "String", + "desc": "Timing function for the animation (CSS easing format)", + "default": "ease-in-out", + "examples": [ + "ease-out" + ] + }, + "fill": { + "type": "String", + "desc": "Fill mode for the animation", + "default": "none", + "examples": [ + "forward" + ] + }, + "classes": { + "type": "String", + "desc": "Class names to be added to the destination element during the animation", + "examples": [ + "bg-grey-2" + ] + }, + "style": { + "type": [ + "String", + "Object" + ], + "desc": "Styles to be added to the destination element during the animation", + "examples": [ + "border-radius: 20px" + ] + }, + "resize": { + "type": "Boolean", + "desc": "Use resize instead of scaling during animation" + }, + "useCSS": { + "type": "Boolean", + "desc": "Use CSS animations instead of the Animation API" + }, + "hideFromClone": { + "type": "Boolean", + "desc": "Hide the spacer for the initial element during animation; Use it if the initial element is not removed or resizing of the space occupied by the initial element is not desired" + }, + "keepToClone": { + "type": "Boolean", + "desc": "Keep a clone of the final element visible during animation" + }, + "tween": { + "type": "Boolean", + "desc": "Use an opacity tween between the initial and final elements" + }, + "tweenFromOpacity": { + "type": "Number", + "desc": "If using tween it is the initial opacity of the initial element (will be animated to 0) - the initial element is placed on top of the final element", + "default": "0.6", + "examples": [ + "1" + ] + }, + "tweenToOpacity": { + "type": "Number", + "desc": "If using tween it is the initial opacity of the final element (will be animated to 1)", + "default": "0.5", + "examples": [ + "0.3" + ] + }, + "waitFor": { + "type": [ + "Number", + "String", + "Promise" + ], + "desc": "Delay animation start for that number of milliseconds, or until a 'transitionend' event is emitted by the destination element, or until the promise is resolved (if the promise is rejected the morphing will abort, but the `toggle function` was already called)", + "default": "0", + "examples": [ + "300", + "transitionend" + ] + }, + "onEnd": { + "type": "Function", + "desc": "A function that will be called once the morphing is finished; Not called if morphing is aborted", + "returns": null, + "params": { + "direction": { + "type": "String", + "desc": "'to' if the morphing was finished in the final state or 'from' if it was finished in the initial state", + "values": [ + "to", + "from" + ] + }, + "aborted": { + "type": "Boolean", + "desc": "Was the morphing aborted?" + } + }, + "examples": [ + "(direction, aborted) => { if (direction !== 'to') { revertLogic() } }" + ] + } + }, + "examples": [ + "v-morph:element2:group1=\"groupModel\"", + "v-morph=\"{ name: 'element2', group: 'group1', model: 'element1' }\"" + ] + }, + "arg": { + "type": "String", + "desc": "x:x2:y:z, where x is the morph element name, x2 is the morph group, y is the animation duration (in milliseconds) and z is the amount of time to wait (in milliseconds) or the 'transitionend' string", + "reactive": true, + "examples": [ + "v-morph:name=\"options\"", + "v-morph:name:groupName=\"options\"", + "v-morph:name:groupName:400=\"options\"", + "v-morph:name:groupName:400:100=\"options\"", + "v-morph:name:groupName:400:transitionend=\"options\"" + ] + }, + "modifiers": { + "resize": { + "type": "Boolean", + "desc": "Use resize instead of scale transform for morph (forceResize option of the morph function)", + "reactive": true + }, + "useCSS": { + "type": "Boolean", + "desc": "Use CSS animations for morph (forceCssAnimation option of the morph function)", + "reactive": true + }, + "hideFromClone": { + "type": "Boolean", + "desc": "Hide the spacer for the initial element (hideFromClone option of the morph function)", + "reactive": true + }, + "keepToClone": { + "type": "Boolean", + "desc": "Keep the final element visible while morphing (keepToClone option of the morph function)", + "reactive": true + }, + "tween": { + "type": "Boolean", + "desc": "Use opacity tween morphing between initial and final elements (tween option of the morph function)", + "reactive": true + } + } +} \ No newline at end of file diff --git a/dist/api/Mutation.json b/dist/api/Mutation.json new file mode 100644 index 00000000000..7b4f031b3cc --- /dev/null +++ b/dist/api/Mutation.json @@ -0,0 +1,129 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/mutation" + }, + "addedIn": "v1.3", + "value": { + "type": [ + "Function" + ], + "desc": "Function to call when mutation occurs; It is HIGHLY recommended to reference it from your vue component scope, otherwise the directive update cycle will continuously recreate the observer which hits performance hard", + "examples": [ + "v-intersection=\"myHandler\"" + ], + "returns": { + "type": "Boolean", + "desc": "If you return Boolean false from the handler, the observer stops" + }, + "params": { + "mutationList": { + "type": "Array", + "desc": "Array of MutationRecord items", + "definition": { + "type": { + "type": "String", + "desc": "Type of mutation", + "values": [ + "childList", + "attributes", + "characterData" + ] + }, + "target": { + "type": "Object", + "desc": "The DOM element that the mutation affected, depending on the mutation type" + }, + "addedNodes": { + "type": "Array", + "desc": "The NodeList of the nodes that have been added" + }, + "removedNodes": { + "type": "Array", + "desc": "The NodeList of the nodes that have been removed" + }, + "previousSibling": { + "type": "Object", + "desc": "The previous sibling of the added or removed nodes, or null" + }, + "nextSibling": { + "type": "Object", + "desc": "The next sibling of the added or removed nodes, or null" + }, + "attributeName": { + "type": "String", + "desc": "The local name of the changed attribute, or null", + "examples": [ + "some-attribute" + ] + }, + "attributeNamespace": { + "type": "String", + "desc": "The namespace of the changed attribute, or null" + }, + "oldValue": { + "type": "String", + "desc": "Value depends on the mutation type; For attributes, it is the value of the changed attribute before the change; For characterData it is data of the changed node before the change; For childList it is null; Note that for this to work as expected, attributeOldValue or characterDataOldValue must be set" + } + } + } + } + }, + "modifiers": { + "once": { + "type": "Boolean", + "desc": "Call handler only once, when the first mutation was triggered, then stop monitoring", + "examples": [ + "v-mutation.once" + ] + }, + "childList": { + "type": "Boolean", + "desc": "Monitor the target node (and, if 'subtree' is also set, its descendants) for the addition of new child nodes or removal of existing child nodes", + "reactive": true, + "examples": [ + "v-mutation.childList" + ] + }, + "subtree": { + "type": "Boolean", + "desc": "Extend monitoring to the entire subtree of nodes rooted at target", + "reactive": true, + "examples": [ + "v-mutation.subtree" + ] + }, + "attributes": { + "type": "Boolean", + "desc": "Watch for changes to the value of attributes on the node or nodes being monitored", + "reactive": true, + "examples": [ + "v-mutation.attributes" + ] + }, + "characterData": { + "type": "Boolean", + "desc": "Monitor the specified target node or subtree for changes to the character data contained within the node or nodes", + "reactive": true, + "examples": [ + "v-mutation.characterData" + ] + }, + "attributeOldValue": { + "type": "Boolean", + "desc": "Record the previous value of any attribute that changes when monitoring the node or nodes for attribute changes", + "reactive": true, + "examples": [ + "v-mutation.attributeOldValue" + ] + }, + "characterDataOldValue": { + "type": "Boolean", + "desc": "Record the previous value of a node's text whenever the text changes on nodes being monitored", + "reactive": true, + "examples": [ + "v-mutation.characterDataOldValue" + ] + } + } +} \ No newline at end of file diff --git a/dist/api/Notify.json b/dist/api/Notify.json new file mode 100644 index 00000000000..70113e2ece1 --- /dev/null +++ b/dist/api/Notify.json @@ -0,0 +1,1323 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/notify" + }, + "injection": "$q.notify", + "quasarConfOptions": { + "propName": "notify", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ + "negative", + "custom-type" + ], + "addedIn": "v1.9" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "textColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ + "John Doe pinged you" + ] + }, + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ + "5 minutes ago" + ], + "addedIn": "v1.5.5" + }, + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "iconColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "iconSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + "spinner": { + "type": "Boolean", + "desc": "Useful for notifications that are updated; Displays the default Quasar spinner instead of an avatar or icon", + "addedIn": "v1.14" + }, + "spinnerColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "spinnerSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "position": { + "type": "String", + "desc": "Window side/corner to stick to", + "default": "bottom", + "values": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right", + "top", + "bottom", + "left", + "right", + "center" + ], + "examples": [ + "top-right" + ] + }, + "group": { + "type": [ + "Boolean", + "String", + "Number" + ], + "desc": "Override the auto generated group with custom one; Grouped notifications cannot be updated; String or number value inform this is part of a specific group, regardless of its options; When a new notification is triggered with same group name, it replaces the old one and shows a badge with how many times the notification was triggered", + "default": "(message + caption + multiline + actions labels + position)", + "examples": [ + "my-group" + ], + "addedIn": "v1.9" + }, + "badgeColor": { + "type": "String", + "desc": "Color name for the badge from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "badgeTextColor": { + "type": "String", + "desc": "Color name for the badge text from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "badgePosition": { + "type": "String", + "desc": "Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left", + "default": "(top-left/top-right)", + "values": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right" + ], + "examples": [ + "bottom-right" + ], + "addedIn": "v1.9.5" + }, + "badgeStyle": { + "type": "String", + "desc": "Style definitions to be attributed to the badge", + "examples": [ + "background-color: #ff0000" + ], + "addedIn": "v1.9" + }, + "badgeClass": { + "type": "String", + "desc": "Class definitions to be attributed to the badge", + "examples": [ + "my-special-class" + ], + "addedIn": "v1.9" + }, + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": "String", + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class" + ], + "addedIn": "v1.9" + }, + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ + "{ role: 'alertdialog' }" + ], + "addedIn": "v1.13" + }, + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ + 2500 + ] + }, + "closeBtn": { + "type": [ + "Boolean", + "String" + ], + "desc": "Convenient way to add a dismiss button with a specific label, without using the 'actions' convoluted prop", + "examples": [ + "Close me" + ] + }, + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + } + } + }, + "methods": { + "create": { + "tsInjectionPoint": true, + "desc": "Creates a notification; Same as calling $q.notify(...)", + "params": { + "opts": { + "type": [ + "Object", + "String" + ], + "desc": "Notification options", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ + "negative", + "custom-type" + ], + "addedIn": "v1.9" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "textColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ + "John Doe pinged you" + ] + }, + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ + "5 minutes ago" + ], + "addedIn": "v1.5.5" + }, + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "iconColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "iconSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + "spinner": { + "type": [ + "Boolean", + "Component" + ], + "desc": "Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown", + "addedIn": "v1.14" + }, + "spinnerColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "spinnerSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "position": { + "type": "String", + "desc": "Window side/corner to stick to", + "default": "bottom", + "values": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right", + "top", + "bottom", + "left", + "right", + "center" + ], + "examples": [ + "top-right" + ] + }, + "group": { + "type": [ + "Boolean", + "String", + "Number" + ], + "desc": "Override the auto generated group with custom one; Grouped notifications cannot be updated; String or number value inform this is part of a specific group, regardless of its options; When a new notification is triggered with same group name, it replaces the old one and shows a badge with how many times the notification was triggered", + "default": "(message + caption + multiline + actions labels + position)", + "examples": [ + "my-group" + ], + "addedIn": "v1.9" + }, + "badgeColor": { + "type": "String", + "desc": "Color name for the badge from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "badgeTextColor": { + "type": "String", + "desc": "Color name for the badge text from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "badgePosition": { + "type": "String", + "desc": "Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left", + "default": "(top-left/top-right)", + "values": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right" + ], + "examples": [ + "bottom-right" + ], + "addedIn": "v1.9.5" + }, + "badgeStyle": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the badge", + "examples": [ + "background-color: #ff0000", + "{ backgroundColor: '#ff0000' }" + ], + "addedIn": "v1.9" + }, + "badgeClass": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the badge", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ + "{ role: 'alertdialog' }" + ], + "addedIn": "v1.13" + }, + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ + 2500 + ] + }, + "actions": { + "type": "Array", + "desc": "Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop", + "examples": [ + "[ { label: 'Show', handler: (Function), attrs: { 'aria-label': 'Button label' } }, { icon: 'map', handler: (Function), color: 'yellow' }, { label: 'Learn more', noDismiss: true, handler: (Function) } ]" + ] + }, + "onDismiss": { + "type": "Function", + "desc": "Function to call when notification gets dismissed", + "params": null, + "returns": null, + "examples": [ + "() => { console.log('Dismissed') }" + ] + }, + "closeBtn": { + "type": [ + "Boolean", + "String" + ], + "desc": "Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language", + "examples": [ + "Close me" + ] + }, + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + }, + "ignoreDefaults": { + "type": "Boolean", + "desc": "Ignore the default configuration (set by setDefaults()) for this instance only", + "addedIn": "v1.1" + } + }, + "required": true + } + }, + "returns": { + "type": "Function", + "desc": "Calling this function with no parameters hides the notification; When called with one Object parameter (the original notification must NOT be grouped), it updates the notification (specified properties are shallow merged with previous ones; note that group and position cannot be changed while updating and so they are ignored)", + "params": { + "props": { + "type": "Object", + "desc": "Notification properties that will be shallow merged to previous ones in order to update the non-grouped notification", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ + "negative", + "custom-type" + ] + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "textColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ + "John Doe pinged you" + ] + }, + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ + "5 minutes ago" + ], + "addedIn": "v1.5.5" + }, + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "iconColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "iconSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + "spinner": { + "type": [ + "Boolean", + "Component" + ], + "desc": "Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown", + "addedIn": "v1.14" + }, + "spinnerColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "spinnerSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ + "{ role: 'alertdialog' }" + ], + "addedIn": "v1.13" + }, + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ + 2500 + ] + }, + "actions": { + "type": "Array", + "desc": "Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop", + "examples": [ + "[ { label: 'Show', handler: (Function), attrs: { 'aria-label': 'Button label' } }, { icon: 'map', handler: (Function), color: 'yellow' }, { label: 'Learn more', noDismiss: true, handler: (Function) } ]" + ] + }, + "onDismiss": { + "type": "Function", + "desc": "Function to call when notification gets dismissed", + "params": null, + "returns": null, + "examples": [ + "() => { console.log('Dismissed') }" + ] + }, + "closeBtn": { + "type": [ + "Boolean", + "String" + ], + "desc": "Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language", + "examples": [ + "Close me" + ] + }, + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + }, + "ignoreDefaults": { + "type": "Boolean", + "desc": "Ignore the default configuration (set by setDefaults()) for this instance only", + "addedIn": "v1.1" + } + }, + "addedIn": "v1.14" + } + }, + "returns": null + } + }, + "setDefaults": { + "desc": "Merge options into the default ones", + "params": { + "opts": { + "type": "Object", + "desc": "Notification options", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ + "negative", + "custom-type" + ], + "addedIn": "v1.9" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "textColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ + "John Doe pinged you" + ] + }, + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ + "5 minutes ago" + ], + "addedIn": "v1.5.5" + }, + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "iconColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "iconSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + "spinner": { + "type": [ + "Boolean", + "Component" + ], + "desc": "Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown", + "addedIn": "v1.14" + }, + "spinnerColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "spinnerSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "position": { + "type": "String", + "desc": "Window side/corner to stick to", + "default": "bottom", + "values": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right", + "top", + "bottom", + "left", + "right", + "center" + ], + "examples": [ + "top-right" + ] + }, + "badgeColor": { + "type": "String", + "desc": "Color name for the badge from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "badgeTextColor": { + "type": "String", + "desc": "Color name for the badge text from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "badgePosition": { + "type": "String", + "desc": "Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left", + "default": "(top-left/top-right)", + "values": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right" + ], + "examples": [ + "bottom-right" + ], + "addedIn": "v1.9.5" + }, + "badgeStyle": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the badge", + "examples": [ + "background-color: #ff0000", + "{ backgroundColor: '#ff0000' }" + ], + "addedIn": "v1.9" + }, + "badgeClass": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the badge", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ + "{ role: 'alertdialog' }" + ], + "addedIn": "v1.13" + }, + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ + 2500 + ] + }, + "actions": { + "type": "Array", + "desc": "Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop", + "examples": [ + "[ { label: 'Show', handler: (Function), attrs: { 'aria-label': 'Button label' } }, { icon: 'map', handler: (Function), color: 'yellow' } ]" + ] + }, + "onDismiss": { + "type": "Function", + "desc": "Function to call when notification gets dismissed", + "params": null, + "returns": null, + "examples": [ + "() => { console.log('Dismissed') }" + ] + }, + "closeBtn": { + "type": [ + "Boolean", + "String" + ], + "desc": "Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language", + "examples": [ + "Close me" + ] + }, + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + } + }, + "required": true + } + } + }, + "registerType": { + "addedIn": "v1.9", + "desc": "Register a new type of notification (or override an existing one)", + "params": { + "typeName": { + "type": "String", + "desc": "Name of the type (to be used as 'type' prop later on)", + "required": true, + "examples": [ + "my-type" + ] + }, + "typeOpts": { + "type": "Object", + "desc": "Notification options", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ + "negative", + "custom-type" + ], + "addedIn": "v1.9" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "textColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ + "John Doe pinged you" + ] + }, + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ + "5 minutes ago" + ], + "addedIn": "v1.5.5" + }, + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "iconColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "iconSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + "spinner": { + "type": [ + "Boolean", + "Component" + ], + "desc": "Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown", + "addedIn": "v1.14" + }, + "spinnerColor": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "spinnerSize": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.18.5" + }, + "position": { + "type": "String", + "desc": "Window side/corner to stick to", + "default": "bottom", + "values": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right", + "top", + "bottom", + "left", + "right", + "center" + ], + "examples": [ + "top-right" + ] + }, + "badgeColor": { + "type": "String", + "desc": "Color name for the badge from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "badgeTextColor": { + "type": "String", + "desc": "Color name for the badge text from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "badgePosition": { + "type": "String", + "desc": "Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left", + "default": "(top-left/top-right)", + "values": [ + "top-left", + "top-right", + "bottom-left", + "bottom-right" + ], + "examples": [ + "bottom-right" + ], + "addedIn": "v1.9.5" + }, + "badgeStyle": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the badge", + "examples": [ + "background-color: #ff0000", + "{ backgroundColor: '#ff0000' }" + ], + "addedIn": "v1.9" + }, + "badgeClass": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the badge", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ + "{ role: 'alertdialog' }" + ], + "addedIn": "v1.13" + }, + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ + 2500 + ] + }, + "actions": { + "type": "Array", + "desc": "Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop", + "examples": [ + "[ { label: 'Show', handler: (Function), attrs: { 'aria-label': 'Button label' } }, { icon: 'map', handler: (Function), color: 'yellow' } ]" + ] + }, + "onDismiss": { + "type": "Function", + "desc": "Function to call when notification gets dismissed", + "params": null, + "returns": null, + "examples": [ + "() => { console.log('Dismissed') }" + ] + }, + "closeBtn": { + "type": [ + "Boolean", + "String" + ], + "desc": "Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language", + "examples": [ + "Close me" + ] + }, + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + } + }, + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/Platform.json b/dist/api/Platform.json new file mode 100644 index 00000000000..eb07529650e --- /dev/null +++ b/dist/api/Platform.json @@ -0,0 +1,70 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/options/platform-detection" + }, + "injection": "$q.platform", + "props": { + "userAgent": { + "type": "String", + "desc": "Client browser User Agent", + "examples": [ + "mozilla/5.0 (macintosh; intel mac os x 10_14_5) applewebkit/537.36 (khtml, like gecko) chrome/75.0.3770.100 safari/537.36" + ] + }, + "is": { + "type": "Object", + "desc": "Client browser details (property names depend on browser)", + "examples": [ + "{ chrome: true, version: '71.0.3578.98', versionNumber: 71, mac: true, desktop: true, webkit: true, name: 'chrome', platform: 'mac' }" + ] + }, + "has": { + "type": "Object", + "desc": "Client browser detectable properties", + "definition": { + "touch": { + "type": "Boolean", + "desc": "Client browser runs on device with touch support" + }, + "webStorage": { + "type": "Boolean", + "desc": "Client browser has Web Storage support" + } + }, + "examples": [ + "{ touch: false, webStorage: true }" + ] + }, + "within": { + "type": "Object", + "desc": "Client browser environment", + "definition": { + "iframe": { + "type": "Boolean", + "desc": "Does the app run under an iframe?" + } + }, + "examples": [ + "{ iframe: false }" + ] + } + }, + "methods": { + "parseSSR": { + "desc": "For SSR usage only, and only on the global import (not on $q.platform)", + "params": { + "ssrContext": { + "type": "Object", + "desc": "SSR Context Object", + "required": true + } + }, + "returns": { + "type": "Object", + "tsType": "Platform", + "desc": "Platform object (like $q.platform) for SSR usage purposes" + } + } + } +} \ No newline at end of file diff --git a/dist/api/QAjaxBar.json b/dist/api/QAjaxBar.json new file mode 100644 index 00000000000..7d45ddbe34f --- /dev/null +++ b/dist/api/QAjaxBar.json @@ -0,0 +1,122 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/ajax-bar" + }, + "props": { + "position": { + "type": "String", + "desc": "Position within window of where QAjaxBar should be displayed", + "default": "top", + "values": [ + "top", + "right", + "bottom", + "left" + ], + "examples": [ + "bottom" + ], + "category": "content" + }, + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "default": "2px" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "reverse": { + "type": "Boolean", + "desc": "Reverse direction of progress", + "category": "behavior" + }, + "skip-hijack": { + "type": "Boolean", + "desc": "Skip Ajax hijacking (not a reactive prop)", + "category": "behavior" + }, + "hijack-filter": { + "type": "Function", + "desc": "Filter which URL should trigger start() + stop()", + "params": { + "url": { + "type": "String", + "desc": "The URL being triggered", + "examples": [ + "https://some.url/path" + ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Should the URL received as param trigger start() + stop()?" + }, + "category": "behavior", + "addedIn": "v1.17.2" + } + }, + "events": { + "start": { + "desc": "Emitted when bar is triggered to appear" + }, + "stop": { + "desc": "Emitted when bar has finished its job" + } + }, + "methods": { + "start": { + "desc": "Notify bar you are waiting for a new process to finish", + "params": { + "speed": { + "type": "Number", + "default": 300, + "desc": "Delay (in milliseconds) between progress auto-increments; If delay is 0 then it disables auto-incrementing", + "examples": [ + 400, + 0 + ] + } + }, + "returns": { + "type": "Number", + "desc": "Number of active simultaneous sessions" + } + }, + "increment": { + "desc": "Manually trigger a bar progress increment", + "params": { + "amount": { + "type": "Number", + "desc": "Amount (0 < x <= 100) to increment with", + "examples": [ + 1 + ] + } + }, + "returns": { + "type": "Number", + "desc": "Number of active simultaneous sessions" + } + }, + "stop": { + "desc": "Notify bar that one process you were waiting has finished", + "returns": { + "type": "Number", + "desc": "Number of active simultaneous sessions" + } + } + } +} \ No newline at end of file diff --git a/dist/api/QAvatar.json b/dist/api/QAvatar.json new file mode 100644 index 00000000000..a904af56bc2 --- /dev/null +++ b/dist/api/QAvatar.json @@ -0,0 +1,77 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/avatar" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "font-size": { + "type": "String", + "desc": "The size in CSS units, including unit name, of the content (icon, text)", + "examples": [ + "18px", + "2rem" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Optional; Suggestions: one character string, tag" + } + } +} \ No newline at end of file diff --git a/dist/api/QBadge.json b/dist/api/QBadge.json new file mode 100644 index 00000000000..7eb688eca64 --- /dev/null +++ b/dist/api/QBadge.json @@ -0,0 +1,85 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/badge" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "floating": { + "type": "Boolean", + "desc": "Tell QBadge if it should float to the top right side of the relative positioned parent element or not", + "category": "content" + }, + "transparent": { + "type": "Boolean", + "desc": "Applies a 0.8 opacity; Useful especially for floating QBadge", + "category": "content" + }, + "multi-line": { + "type": "Boolean", + "desc": "Content can wrap to multiple lines", + "category": "content" + }, + "label": { + "type": [ + "String", + "Number" + ], + "desc": "Badge's content as string; overrides default slot if specified", + "examples": [ + "John Doe", + 22 + ], + "category": "content" + }, + "align": { + "type": "String", + "desc": "Sets vertical-align CSS prop", + "values": [ + "top", + "middle", + "bottom" + ], + "category": "content" + }, + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design (colored text and borders only)", + "category": "content", + "addedIn": "v1.4.5" + }, + "rounded": { + "type": "Boolean", + "desc": "Makes a rounded shaped badge", + "category": "style", + "addedIn": "v1.15.2" + } + }, + "slots": { + "default": { + "desc": "This is where QBadge content goes, if not using 'label' property" + } + } +} \ No newline at end of file diff --git a/dist/api/QBanner.json b/dist/api/QBanner.json new file mode 100644 index 00000000000..dc1b77eea96 --- /dev/null +++ b/dist/api/QBanner.json @@ -0,0 +1,45 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/banner" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "inline-actions": { + "type": "Boolean", + "desc": "Display actions on same row as content", + "category": "content" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.3" + } + }, + "slots": { + "default": { + "desc": "This is where Banner content goes" + }, + "avatar": { + "desc": "Slot for displaying an avatar (suggestions: QIcon, QAvatar)" + }, + "action": { + "desc": "Slot for Banner action (suggestions: QBtn)" + } + } +} \ No newline at end of file diff --git a/dist/api/QBar.json b/dist/api/QBar.json new file mode 100644 index 00000000000..26ef9798f67 --- /dev/null +++ b/dist/api/QBar.json @@ -0,0 +1,28 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/bar" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "The component background color lights up the parent's background (as opposed to default behavior which is to darken it); Works unless you specify a CSS background color for it", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QBreadcrumbs.json b/dist/api/QBreadcrumbs.json new file mode 100644 index 00000000000..b6ac00fe90c --- /dev/null +++ b/dist/api/QBreadcrumbs.json @@ -0,0 +1,90 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "separator": { + "type": "String", + "desc": "The string used to separate the breadcrumbs", + "default": "/", + "examples": [ + "-", + "|", + ">" + ], + "category": "content" + }, + "active-color": { + "type": "String", + "desc": "The color of the active breadcrumb, which can be any color from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "primary" + }, + "gutter": { + "type": "String", + "desc": "The gutter value allows you control over the space between the breadcrumb elements.", + "default": "sm", + "values": [ + "none", + "xs", + "sm", + "md", + "lg", + "xl" + ], + "examples": [ + "md", + "lg" + ], + "category": "content" + }, + "separator-color": { + "type": "String", + "desc": "The color used to color the separator, which can be any color from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "align": { + "type": "String", + "default": "left", + "desc": "Specify how to align the breadcrumbs horizontally", + "values": [ + "left", + "center", + "right", + "between", + "around", + "evenly" + ], + "examples": [ + "left", + "center" + ], + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "scopedSlots": { + "separator": { + "desc": "HTML or component you can slot in to separate the breadcrumbs", + "scope": {} + } + } +} \ No newline at end of file diff --git a/dist/api/QBreadcrumbsEl.json b/dist/api/QBreadcrumbsEl.json new file mode 100644 index 00000000000..8770f9fcd17 --- /dev/null +++ b/dist/api/QBreadcrumbsEl.json @@ -0,0 +1,160 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "navigation" + }, + "exact": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "active-class": { + "type": "String", + "desc": "Equivalent to Vue Router 'active-class' property", + "examples": [ + "my-active-class" + ], + "category": "navigation" + }, + "exact-active-class": { + "type": "String", + "desc": "Equivalent to Vue Router 'active-class' property", + "examples": [ + "my-exact-active-class" + ], + "category": "navigation" + }, + "href": { + "type": "String", + "desc": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ + "http://quasar.dev" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "target": { + "type": "String", + "desc": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ + "_blank", + "_self", + "_parent", + "_top" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "label": { + "type": "String", + "desc": "The label text for the breadcrumb", + "examples": [ + "Home", + "Index" + ], + "category": "content" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + } + }, + "slots": { + "default": { + "desc": "This is where custom content goes, unless 'icon' and 'label' props are not enough" + } + }, + "events": { + "click": { + "desc": "Emitted when the component is clicked", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "required": true + }, + "navigateFn": { + "type": "Function", + "desc": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "addedIn": "v1.21", + "params": { + "opts": { + "type": "Object", + "desc": "Optional options", + "definition": { + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ] + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property", + "default": "Tab's 'append' property" + }, + "returnRouterError": { + "type": "Boolean", + "desc": "Return the router error, if any; Otherwise the returned Promise will always fulfill" + } + } + } + }, + "returns": { + "type": "Promise", + "desc": "Returns the router's navigation promise" + } + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QBtn.json b/dist/api/QBtn.json new file mode 100644 index 00000000000..6a1acf25c8b --- /dev/null +++ b/dist/api/QBtn.json @@ -0,0 +1,359 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/button" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "ripple": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Configure material ripple (disable it by setting it to 'false' or supply a config object)", + "default": true, + "examples": [ + false, + "{ early: true, center: true, color: 'teal', keyCodes: [] }" + ], + "category": "style" + }, + "type": { + "type": "String", + "desc": "1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag", + "default": "button", + "examples": [ + "a", + "submit", + "button", + "reset", + "image/png", + "href=\"https://some-site.net\" target=\"_blank\"" + ], + "category": "general" + }, + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "navigation" + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "category": "navigation", + "addedIn": "v1.13" + }, + "href": { + "type": "String", + "desc": "Native link href attribute; Has priority over the 'to' and 'replace' props", + "examples": [ + "https://quasar.dev", + "href=\"https://quasar.dev\" target=\"_blank\"" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "target": { + "type": "String", + "desc": "Native link target attribute; Use it only with 'to' or 'href' props", + "examples": [ + "_blank", + "_self", + "_parent", + "_top" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "label": { + "type": [ + "String", + "Number" + ], + "desc": "The text that will be shown on the button", + "examples": [ + "Button Label" + ], + "category": "content" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "icon-right": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design", + "category": "style" + }, + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow", + "category": "style" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for a squared shape button", + "category": "style" + }, + "push": { + "type": "Boolean", + "desc": "Use 'push' design", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style", + "addedIn": "v1.22" + }, + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect", + "category": "style" + }, + "fab": { + "type": "Boolean", + "desc": "Makes button size and shape to fit a Floating Action Button", + "category": "style" + }, + "fab-mini": { + "type": "Boolean", + "desc": "Makes button size and shape to fit a small Floating Action Button", + "category": "style" + }, + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ + "16px", + "10px 5px", + "2rem", + "xs", + "md lg", + "2px 2px 5px 7px" + ], + "category": "style", + "addedIn": "v1.11" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "no-caps": { + "type": "Boolean", + "desc": "Avoid turning label text into caps (which happens by default)", + "category": "content" + }, + "no-wrap": { + "type": "Boolean", + "desc": "Avoid label text wrapping", + "category": "content" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "align": { + "type": "String", + "desc": "Label or content alignment", + "default": "center", + "values": [ + "left", + "right", + "center", + "around", + "between", + "evenly" + ], + "category": "content" + }, + "stack": { + "type": "Boolean", + "desc": "Stack icon and label vertically instead of on same line (like it is by default)", + "category": "content" + }, + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, button will stretch to parent's height", + "category": "content" + }, + "loading": { + "type": "Boolean", + "desc": "Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot)", + "category": "behavior|state" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "round": { + "type": "Boolean", + "desc": "Makes a circle shaped button", + "category": "style" + }, + "percentage": { + "type": "Number", + "desc": "Percentage (0.0 < x < 100.0); To be used along 'loading' prop; Display a progress bar on the background", + "examples": [ + 23 + ], + "category": "behavior" + }, + "dark-percentage": { + "type": "Boolean", + "desc": "Progress bar on the background should have dark color; To be used along with 'percentage' and 'loading' props", + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "Use for custom content, instead of relying on 'icon' and 'label' props" + }, + "loading": { + "desc": "Override the default QSpinner when in 'loading' state" + } + }, + "events": { + "click": { + "desc": "Emitted when the component is clicked", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "required": true + }, + "navigateFn": { + "type": "Function", + "desc": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "params": { + "opts": { + "type": "Object", + "desc": "Optional options", + "addedIn": "v1.21", + "definition": { + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ] + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property", + "default": "Tab's 'append' property" + }, + "returnRouterError": { + "type": "Boolean", + "desc": "Return the router error, if any; Otherwise the returned Promise will always fulfill" + } + } + } + }, + "returns": { + "type": "Promise", + "desc": "Returns the router's navigation promise", + "addedIn": "v1.21" + } + } + } + } + }, + "methods": { + "click": { + "desc": "Emulate click on QBtn", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QBtnDropdown.json b/dist/api/QBtnDropdown.json new file mode 100644 index 00000000000..a4230178d5a --- /dev/null +++ b/dist/api/QBtnDropdown.json @@ -0,0 +1,551 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + "props": { + "value": { + "type": "Boolean", + "desc": "Controls Menu show/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model", + "examples": [ + "v-model=\"menuState\"" + ] + }, + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "ripple": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Configure material ripple (disable it by setting it to 'false' or supply a config object)", + "default": true, + "examples": [ + false, + "{ early: true, center: true, color: 'teal', keyCodes: [] }" + ], + "category": "style" + }, + "type": { + "type": "String", + "desc": "1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag", + "default": "button", + "examples": [ + "a", + "submit", + "button", + "reset", + "image/png", + "href=\"https://some-site.net\" target=\"_blank\"" + ], + "category": "general" + }, + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "navigation" + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "category": "navigation", + "addedIn": "v1.13" + }, + "href": { + "type": "String", + "desc": "Native link href attribute; Has priority over the 'to' and 'replace' props", + "examples": [ + "https://quasar.dev", + "href=\"https://quasar.dev\" target=\"_blank\"" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "target": { + "type": "String", + "desc": "Native link target attribute; Use it only with 'to' or 'href' props", + "examples": [ + "_blank", + "_self", + "_parent", + "_top" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "label": { + "type": [ + "String", + "Number" + ], + "desc": "The text that will be shown on the button", + "examples": [ + "Button Label" + ], + "category": "content" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "icon-right": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design", + "category": "style" + }, + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow", + "category": "style" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for a squared shape button", + "category": "style" + }, + "push": { + "type": "Boolean", + "desc": "Use 'push' design", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style", + "addedIn": "v1.22" + }, + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect", + "category": "style" + }, + "fab": { + "type": "Boolean", + "desc": "Makes button size and shape to fit a Floating Action Button", + "category": "style" + }, + "fab-mini": { + "type": "Boolean", + "desc": "Makes button size and shape to fit a small Floating Action Button", + "category": "style" + }, + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ + "16px", + "10px 5px", + "2rem", + "xs", + "md lg", + "2px 2px 5px 7px" + ], + "category": "style", + "addedIn": "v1.11" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "no-caps": { + "type": "Boolean", + "desc": "Avoid turning label text into caps (which happens by default)", + "category": "content" + }, + "no-wrap": { + "type": "Boolean", + "desc": "Avoid label text wrapping", + "category": "content" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "align": { + "type": "String", + "desc": "Label or content alignment", + "default": "center", + "values": [ + "left", + "right", + "center", + "around", + "between", + "evenly" + ], + "category": "content" + }, + "stack": { + "type": "Boolean", + "desc": "Stack icon and label vertically instead of on same line (like it is by default)", + "category": "content" + }, + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, button will stretch to parent's height", + "category": "content" + }, + "loading": { + "type": "Boolean", + "desc": "Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot)", + "category": "behavior|state" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "split": { + "type": "Boolean", + "desc": "Split dropdown icon into its own button", + "category": "content|behavior" + }, + "dropdown-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.1.6" + }, + "disable-main-btn": { + "type": "Boolean", + "desc": "Disable main button (useful along with 'split' prop)", + "category": "behavior" + }, + "disable-dropdown": { + "type": "Boolean", + "desc": "Disables dropdown (dropdown button if using along 'split' prop)", + "category": "behavior" + }, + "no-icon-animation": { + "type": "Boolean", + "desc": "Disables the rotation of the dropdown icon when state is toggled", + "category": "style", + "addedIn": "v1.12" + }, + "content-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the menu", + "examples": [ + "background-color: #ff0000", + ":content-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "content-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the menu", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "cover": { + "type": "Boolean", + "desc": "Allows the menu to cover the button. When used, the 'menu-self' and 'menu-fit' props are no longer effective", + "category": "position" + }, + "persistent": { + "type": "Boolean", + "desc": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key", + "category": "behavior" + }, + "no-route-dismiss": { + "type": "Boolean", + "desc": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set", + "category": "behavior", + "addedIn": "v1.13.2" + }, + "auto-close": { + "type": "Boolean", + "desc": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap", + "category": "behavior" + }, + "menu-anchor": { + "type": "String", + "desc": "Two values setting the starting position or anchor point of the menu relative to its target", + "values": [ + "top left", + "top middle", + "top right", + "top start", + "top end", + "center left", + "center middle", + "center right", + "center start", + "center end", + "bottom left", + "bottom middle", + "bottom right", + "bottom start", + "bottom end" + ], + "default": "bottom end", + "examples": [ + "top right", + "bottom end" + ], + "category": "position" + }, + "menu-self": { + "type": "String", + "desc": "Two values setting the menu's own position relative to its target", + "values": [ + "top left", + "top middle", + "top right", + "top start", + "top end", + "center left", + "center middle", + "center right", + "center start", + "center end", + "bottom left", + "bottom middle", + "bottom right", + "bottom start", + "bottom end" + ], + "default": "top end", + "examples": [ + "top right", + "bottom end" + ], + "category": "position" + }, + "menu-offset": { + "type": "Array", + "desc": "An array of two numbers to offset the menu horizontally and vertically in pixels", + "examples": [ + "[8, 8]", + "[5, 10]" + ], + "category": "position", + "addedIn": "v1.9.2" + }, + "transition-show": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade", + "addedIn": "v1.22" + }, + "transition-hide": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade", + "addedIn": "v1.22" + }, + "toggle-aria-label": { + "type": "String", + "desc": "aria-label to be used on the dropdown toggle element", + "examples": [ + "Open menu" + ], + "category": "accessibility", + "addedIn": "v1.20.2" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + }, + "label": { + "desc": "Customize main button's content through this slot, unless you're using the 'icon' and 'label' props" + }, + "loading": { + "desc": "Override the default QSpinner when in 'loading' state", + "addedIn": "v1.19.6" + } + }, + "events": { + "input": { + "desc": "Emitted when showing/hidden state changes; Is also used by v-model", + "params": { + "value": { + "type": "Boolean", + "desc": "New state (showing/hidden)" + } + } + }, + "show": { + "desc": "Emitted after component has triggered show()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-show": { + "desc": "Emitted when component triggers show() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "hide": { + "desc": "Emitted after component has triggered hide()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-hide": { + "desc": "Emitted when component triggers hide() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "click": { + "desc": "Emitted when user clicks/taps on the main button (not the icon one, if using 'split')", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + } + }, + "methods": { + "show": { + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "hide": { + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "toggle": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "desc": "Triggers component to toggle between show/hide" + } + } +} \ No newline at end of file diff --git a/dist/api/QBtnGroup.json b/dist/api/QBtnGroup.json new file mode 100644 index 00000000000..a517b2940c8 --- /dev/null +++ b/dist/api/QBtnGroup.json @@ -0,0 +1,64 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/button-group" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "spread": { + "type": "Boolean", + "desc": "Spread horizontally to all available space", + "category": "content" + }, + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design for buttons", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design for buttons", + "category": "style" + }, + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow on buttons", + "category": "style" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for squared shape buttons", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style", + "addedIn": "v1.22" + }, + "push": { + "type": "Boolean", + "desc": "Use 'push' design for buttons", + "category": "style" + }, + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, buttons will stretch to parent's height", + "category": "content" + }, + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Suggestion: QBtn" + } + } +} \ No newline at end of file diff --git a/dist/api/QBtnToggle.json b/dist/api/QBtnToggle.json new file mode 100644 index 00000000000..6ab6f7601a6 --- /dev/null +++ b/dist/api/QBtnToggle.json @@ -0,0 +1,259 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/button-toggle" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "ripple": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Configure material ripple (disable it by setting it to 'false' or supply a config object)", + "default": true, + "examples": [ + false, + "{ early: true, center: true, color: 'teal', keyCodes: [] }" + ], + "category": "style" + }, + "value": { + "type": "Any", + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ + "v-model=\"selected\"" + ], + "category": "model" + }, + "options": { + "type": "Array", + "desc": "Array of Objects defining each option", + "required": true, + "definition": { + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the button", + "examples": [ + "{ 'aria-label': 'Button label' }" + ], + "addedIn": "v1.13" + }, + "label": { + "type": "String", + "desc": "Label of option button; Use this prop and/or 'icon', but at least one is required", + "examples": [ + "Option 1" + ] + }, + "icon": { + "type": "String", + "desc": "Icon of option button; Use this prop and/or 'label', but at least one is required", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "value": { + "type": "Any", + "desc": "Value of the option that will be used by component model", + "required": true + }, + "slot": { + "type": "String", + "desc": "Slot name to use for this button content; Useful for customizing content or even add tooltips", + "examples": [ + "mySlot" + ] + }, + "...props": { + "type": "Any", + "desc": "Any other QBtn props (including class and style)" + } + }, + "examples": [ + "[ {label: 'One', value: 'one'}, {label: 'Two', value: 'two'} ]" + ], + "category": "model" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "toggle-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "primary" + }, + "toggle-text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "spread": { + "type": "Boolean", + "desc": "Spread horizontally to all available space", + "category": "content" + }, + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design", + "category": "style" + }, + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow", + "category": "style" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for a squared shape button", + "category": "style" + }, + "push": { + "type": "Boolean", + "desc": "Use 'push' design", + "category": "style" + }, + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect", + "category": "style" + }, + "size": { + "type": "String", + "desc": "Button size name or a CSS unit including unit name", + "examples": [ + "xs", + "sm", + "md", + "lg", + "xl", + "25px", + "2rem" + ], + "category": "style" + }, + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ + "16px", + "10px 5px", + "2rem", + "xs", + "md lg", + "2px 2px 5px 7px" + ], + "category": "style", + "addedIn": "v1.13" + }, + "no-caps": { + "type": "Boolean", + "desc": "Avoid turning label text into caps (which happens by default)", + "category": "content" + }, + "no-wrap": { + "type": "Boolean", + "desc": "Avoid label text wrapping", + "category": "content" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "stack": { + "type": "Boolean", + "desc": "Stack icon and label vertically instead of on same line (like it is by default)", + "category": "content" + }, + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, button will stretch to parent's height", + "category": "content" + }, + "clearable": { + "type": "Boolean", + "desc": "Clears model on click of the already selected button", + "category": "model", + "addedIn": "v1.4.4" + } + }, + "slots": { + "default": { + "desc": "Suggestions: QTooltip, QBadge", + "addedIn": "v1.13.2" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + }, + "clear": { + "desc": "When using the 'clearable' property, this event is emitted when the already selected button is clicked", + "addedIn": "v1.4.4" + } + } +} \ No newline at end of file diff --git a/dist/api/QCard.json b/dist/api/QCard.json new file mode 100644 index 00000000000..f9288e7a1ce --- /dev/null +++ b/dist/api/QCard.json @@ -0,0 +1,49 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/card" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "tag": { + "type": "String", + "desc": "HTML tag to render", + "default": "div", + "category": "content", + "examples": [ + "div", + "form" + ], + "addedIn": "v1.8.4" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QCardActions.json b/dist/api/QCardActions.json new file mode 100644 index 00000000000..d3710a59430 --- /dev/null +++ b/dist/api/QCardActions.json @@ -0,0 +1,38 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/card" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "align": { + "type": "String", + "desc": "Specify how to align the actions", + "default": "left (for horizontal mode) / stretch (for vertical mode)", + "values": [ + "left", + "center", + "right", + "between", + "around", + "evenly", + "stretch" + ], + "category": "content" + }, + "vertical": { + "type": "Boolean", + "desc": "Display actions one below the other", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Suggestions: QBtn" + } + } +} \ No newline at end of file diff --git a/dist/api/QCardSection.json b/dist/api/QCardSection.json new file mode 100644 index 00000000000..2c1ea54b6cd --- /dev/null +++ b/dist/api/QCardSection.json @@ -0,0 +1,35 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/card" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "tag": { + "type": "String", + "desc": "HTML tag to render", + "default": "div", + "category": "content", + "examples": [ + "div", + "form" + ], + "addedIn": "v1.8.4" + }, + "horizontal": { + "type": "Boolean", + "desc": "Display a horizontal section (will have no padding and can contain other QCardSection)", + "category": "content", + "addedIn": "v1.7" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QCarousel.json b/dist/api/QCarousel.json new file mode 100644 index 00000000000..3aa0f701ea7 --- /dev/null +++ b/dist/api/QCarousel.json @@ -0,0 +1,410 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/carousel" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "fullscreen": { + "type": "Boolean", + "sync": true, + "desc": "Fullscreen mode", + "examples": [ + ":fullscreen.sync=\"isFullscreen\"" + ], + "category": "behavior" + }, + "no-route-fullscreen-exit": { + "type": "Boolean", + "desc": "Changing route app won't exit fullscreen", + "category": "behavior", + "addedIn": "v1.1.7" + }, + "value": { + "type": "Any", + "desc": "Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive.", + "examples": [ + "v-model=\"panelName\"" + ], + "category": "model" + }, + "keep-alive": { + "type": "Boolean", + "desc": "Equivalent to using Vue's native component on the content", + "category": "behavior" + }, + "keep-alive-include": { + "type": [ + "String", + "Array", + "RegExp" + ], + "desc": "Equivalent to using Vue's native include prop for ; Values must be valid Vue component names", + "examples": [ + "a,b", + "/a|b/", + "['a', 'b']" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "keep-alive-exclude": { + "type": [ + "String", + "Array", + "RegExp" + ], + "desc": "Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names", + "examples": [ + "a,b", + "/a|b/", + "['a', 'b']" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "keep-alive-max": { + "type": "Number", + "desc": "Equivalent to using Vue's native max prop for ", + "examples": [ + "2" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "animated": { + "type": "Boolean", + "desc": "Enable transitions between panel (also see 'transition-prev' and 'transition-next' props)", + "category": "behavior" + }, + "infinite": { + "type": "Boolean", + "desc": "Makes component appear as infinite (when reaching last panel, next one will become the first one)", + "category": "behavior" + }, + "swipeable": { + "type": "Boolean", + "desc": "Enable swipe events (may interfere with content's touch/mouse events)", + "category": "behavior" + }, + "vertical": { + "type": "Boolean", + "desc": "Default transitions and swipe actions will be on the vertical axis", + "category": "behavior" + }, + "transition-prev": { + "type": "String", + "desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + }, + "transition-next": { + "type": "String", + "desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.3" + }, + "height": { + "type": "String", + "desc": "Height of Carousel in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + }, + "padding": { + "type": "Boolean", + "desc": "Applies a default padding to each slide, according to the usage of 'arrows' and 'navigation' props", + "category": "content" + }, + "control-color": { + "type": "String", + "desc": "Color name for QCarousel button controls (arrows, navigation) from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "control-text-color": { + "type": "String", + "desc": "Color name for text color of QCarousel button controls (arrows, navigation) from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.9" + }, + "control-type": { + "type": "String", + "desc": "Type of button to use for controls (arrows, navigation)", + "values": [ + "regular", + "flat", + "outline", + "push", + "unelevated" + ], + "category": "style", + "addedIn": "v1.9" + }, + "autoplay": { + "type": [ + "Number", + "Boolean" + ], + "desc": "Jump to next slide (if 'true' or val > 0) or previous slide (if val < 0) at fixed time intervals (in milliseconds); 'false' disables autoplay, 'true' enables it for 5000ms intervals", + "default": false, + "examples": [ + ":autoplay=\"2500\"", + true, + false + ], + "category": "behavior" + }, + "arrows": { + "type": "Boolean", + "desc": "Show navigation arrow buttons", + "category": "content" + }, + "prev-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "next-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "navigation": { + "type": "Boolean", + "desc": "Show navigation dots", + "category": "content" + }, + "navigation-position": { + "type": "String", + "desc": "Side to stick navigation to", + "default": "bottom/right", + "values": [ + "top", + "right", + "bottom", + "left" + ], + "examples": [ + "left" + ], + "category": "content", + "addedIn": "v1.9" + }, + "navigation-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "navigation-active-icon": { + "type": "String", + "desc": "Icon name following Quasar convention for the active (current slide) navigation icon; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.13.2" + }, + "thumbnails": { + "type": "Boolean", + "desc": "Show thumbnails", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Suggestion: QCarouselSlide" + }, + "control": { + "desc": "Slot specific for QCarouselControl" + } + }, + "scopedSlots": { + "navigation-icon": { + "desc": "Slot for navigation icon/btn; Suggestion: QBtn", + "scope": { + "index": { + "type": "Number", + "desc": "The 0-based index of corresponding slide" + }, + "maxIndex": { + "type": "Number", + "desc": "The available number of slides" + }, + "name": { + "type": "Any", + "desc": "The name of the corresponding slide" + }, + "active": { + "type": "Boolean", + "desc": "Is this the current slide?" + }, + "btnProps": { + "type": "Object", + "desc": "Default QBtn props that can be binded to your own QBtn" + }, + "onClick": { + "type": "Function", + "desc": "Default trigger when clicked/tapped on", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + }, + "returns": null + } + }, + "addedIn": "v1.13.2" + } + }, + "events": { + "input": { + "desc": "Emitted when the component changes the model; This event _isn't_ fired if the model is changed externally; Is also used by v-model", + "params": { + "value": { + "type": [ + "String", + "Number" + ], + "desc": "New current panel name", + "examples": [ + "dashboard" + ] + } + } + }, + "before-transition": { + "desc": "Emitted before transitioning to a new panel", + "params": { + "newVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name towards transition is going", + "examples": [ + "dashboard" + ] + }, + "oldVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name from which transition is happening", + "examples": [ + "dashboard" + ] + } + } + }, + "transition": { + "desc": "Emitted after component transitioned to a new panel", + "params": { + "newVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name towards transition has occurred", + "examples": [ + "dashboard" + ] + }, + "oldVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name from which transition has happened", + "examples": [ + "dashboard" + ] + } + } + } + }, + "methods": { + "toggleFullscreen": { + "desc": "Toggle the view to be fullscreen or not fullscreen" + }, + "setFullscreen": { + "desc": "Enter the fullscreen view" + }, + "exitFullscreen": { + "desc": "Leave the fullscreen view" + }, + "next": { + "desc": "Go to next panel" + }, + "previous": { + "desc": "Go to previous panel" + }, + "goTo": { + "desc": "Go to specific panel", + "params": { + "panelName": { + "type": [ + "String", + "Number" + ], + "desc": "Panel's name, which may be a String or Number; Number does not refers to panel index, but to its name, which may be an Integer", + "required": true, + "examples": [ + "dashboard" + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QCarouselControl.json b/dist/api/QCarouselControl.json new file mode 100644 index 00000000000..057fbab4818 --- /dev/null +++ b/dist/api/QCarouselControl.json @@ -0,0 +1,47 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/carousel" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "position": { + "type": "String", + "desc": "Side/corner to stick to", + "default": "bottom-right", + "values": [ + "top-right", + "top-left", + "bottom-right", + "bottom-left", + "top", + "right", + "bottom", + "left" + ], + "examples": [ + "top-right" + ], + "category": "position" + }, + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the component horizontally and vertically (in pixels)", + "default": "[18, 18]", + "examples": [ + "[8, 8]", + "[5, 10]" + ], + "category": "position" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QCarouselSlide.json b/dist/api/QCarouselSlide.json new file mode 100644 index 00000000000..2bdacd5447f --- /dev/null +++ b/dist/api/QCarouselSlide.json @@ -0,0 +1,49 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/carousel" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "name": { + "type": "Any", + "desc": "Slide name", + "required": true, + "examples": [ + "accounts", + "firstPanel", + ":name=\"1\"", + "accounts", + "firstSlide", + ":name=\"1\"" + ], + "category": "model" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "img-src": { + "type": "String", + "desc": "URL pointing to a slide background image (use public folder)", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/my-bg.png\"", + "(assets folder) src=\"~assets/my-img.png\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "model" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QChatMessage.json b/dist/api/QChatMessage.json new file mode 100644 index 00000000000..831328f5b13 --- /dev/null +++ b/dist/api/QChatMessage.json @@ -0,0 +1,132 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/chat" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "sent": { + "type": "Boolean", + "desc": "Render as a sent message (so from current user)", + "category": "content" + }, + "label": { + "type": "String", + "desc": "Renders a label header/section only", + "examples": [ + "Friday, 18th" + ], + "category": "content" + }, + "bg-color": { + "type": "String", + "desc": "Color name (from the Quasar Color Palette) for chat bubble background", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Color name (from the Quasar Color Palette) for chat bubble text", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "name": { + "type": "String", + "desc": "Author's name", + "examples": [ + "John Doe" + ], + "category": "content" + }, + "avatar": { + "type": "String", + "desc": "URL to the avatar image of the author", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"boy-avatar.png\"", + "(assets folder) src=\"~assets/boy-avatar.png\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "content" + }, + "text": { + "type": "Array", + "desc": "Array of strings that are the message body. Strings are not sanitized (see details in docs)", + "examples": [ + ":text=\"['How are you?']\"", + ":text=\"['I\\'m good, thank you!', 'And you?']\"" + ], + "category": "content" + }, + "stamp": { + "type": "String", + "desc": "Creation timestamp", + "examples": [ + "13:55", + "Yesterday at 13:51" + ], + "category": "content" + }, + "size": { + "type": "String", + "desc": "1-12 out of 12 (same as col-*)", + "examples": [ + "4", + "6", + "12" + ], + "category": "style" + }, + "label-sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render label; Use it when the label might be unsafe (from user input)", + "category": "behavior" + }, + "name-sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render name; Use it when the name might be unsafe (from user input)", + "category": "behavior" + }, + "text-sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render text; Use it when the text might be unsafe (from user input)", + "category": "behavior" + }, + "stamp-sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render stamp; Use it when the stamp might be unsafe (from user input)", + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "You can use this slot to define a custom message (overrides props)" + }, + "avatar": { + "desc": "Slot for avatar; Suggestion: QAvatar, img" + }, + "name": { + "desc": "Slot for name; Overrides the 'name' prop", + "addedIn": "v1.15.14" + }, + "stamp": { + "desc": "Slot for stamp; Overrides the 'stamp' prop", + "addedIn": "v1.15.14" + }, + "label": { + "desc": "Slot for label; Overrides the 'label' prop", + "addedIn": "v1.15.15" + } + } +} \ No newline at end of file diff --git a/dist/api/QCheckbox.json b/dist/api/QCheckbox.json new file mode 100644 index 00000000000..f39deaf95b0 --- /dev/null +++ b/dist/api/QCheckbox.json @@ -0,0 +1,203 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/checkbox" + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style", + "addedIn": "v1.8" + }, + "value": { + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model", + "required": true, + "type": [ + "Any", + "Array" + ], + "examples": [ + "false", + "['car', 'building']" + ] + }, + "val": { + "type": "Any", + "desc": "Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked", + "examples": [ + "car" + ], + "category": "model" + }, + "true-value": { + "type": "Any", + "desc": "What model value should be considered as checked/ticked/on?", + "default": true, + "examples": [ + "Agreed" + ], + "category": "model" + }, + "false-value": { + "type": "Any", + "desc": "What model value should be considered as unchecked/unticked/off?", + "default": false, + "examples": [ + "Disagree" + ], + "category": "model" + }, + "indeterminate-value": { + "type": "Any", + "desc": "What model value should be considered as 'indeterminate'?", + "default": null, + "examples": [ + 0, + "not_answered" + ], + "category": "behavior" + }, + "toggle-order": { + "type": "String", + "desc": "Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ...", + "default": "tf", + "values": [ + "tf", + "ft" + ], + "category": "behavior", + "addedIn": "v1.12" + }, + "toggle-indeterminate": { + "type": "Boolean", + "desc": "When user clicks/taps on the component, should we toggle through the indeterminate state too?", + "category": "behavior" + }, + "label": { + "type": "String", + "desc": "Label to display along the component (or use the default slot instead of this prop)", + "examples": [ + "I agree with the Terms and Conditions" + ], + "category": "label" + }, + "left-label": { + "type": "Boolean", + "desc": "Label (if any specified) should be displayed on the left side of the component", + "category": "label" + }, + "checked-icon": { + "type": "String", + "examples": [ + "visibility" + ], + "category": "icons", + "desc": "The icon to be used when the model is truthy (instead of the default design)", + "addedIn": "v1.18" + }, + "unchecked-icon": { + "type": "String", + "examples": [ + "visibility_off" + ], + "category": "icons", + "desc": "The icon to be used when the toggle is falsy (instead of the default design)", + "addedIn": "v1.18" + }, + "indeterminate-icon": { + "type": "String", + "examples": [ + "help" + ], + "category": "icons", + "desc": "The icon to be used when the model is indeterminate (instead of the default design)", + "addedIn": "v1.18" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "keep-color": { + "type": "Boolean", + "desc": "Should the color (if specified any) be kept when the component is unticked/ off?", + "category": "behavior" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + } + }, + "slots": { + "default": { + "desc": "Default slot can be used as label, unless 'label' prop is specified; Suggestion: string" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + }, + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "addedIn": "v1.11.2" + } + } + } + }, + "methods": { + "toggle": { + "desc": "Toggle the state (of the model)" + } + } +} \ No newline at end of file diff --git a/dist/api/QChip.json b/dist/api/QChip.json new file mode 100644 index 00000000000..b87e23c5431 --- /dev/null +++ b/dist/api/QChip.json @@ -0,0 +1,214 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/chip" + }, + "props": { + "ripple": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Configure material ripple (disable it by setting it to 'false' or supply a config object)", + "default": true, + "examples": [ + false, + "{ early: true, center: true, color: 'teal', keyCodes: [] }" + ], + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "size": { + "type": "String", + "desc": "QChip size name or a CSS unit including unit name", + "examples": [ + "xs", + "sm", + "md", + "lg", + "xl", + "25px", + "2rem" + ], + "category": "style", + "addedIn": "v1.2.2" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.3" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "icon-right": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "icon-remove": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "icon-selected": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.14.6" + }, + "label": { + "type": [ + "String", + "Number" + ], + "desc": "Chip's content as string; overrides default slot if specified", + "examples": [ + "John Doe", + "Book" + ], + "category": "content" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "value": { + "type": "Boolean", + "desc": "Model of the component determining if QChip should be rendered or not", + "default": true, + "category": "model" + }, + "selected": { + "type": "Boolean", + "sync": true, + "desc": "Model for QChip if it's selected or not", + "category": "model" + }, + "square": { + "type": "Boolean", + "desc": "Sets a low value for border-radius instead of the default one, making it close to a square", + "category": "style" + }, + "outline": { + "type": "Boolean", + "desc": "Display using the 'outline' design", + "category": "style" + }, + "clickable": { + "type": "Boolean", + "desc": "Is QChip clickable? If it's the case, then it will add hover effects and emit 'click' events", + "category": "state" + }, + "removable": { + "type": "Boolean", + "desc": "If set, then it displays a 'remove' icon that when clicked the QChip emits 'remove' event", + "category": "state" + }, + "remove-aria-label": { + "type": "String", + "desc": "aria-label to be used on the remove icon", + "examples": [ + "Remove item" + ], + "category": "accessibility", + "addedIn": "v1.20.2" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + } + }, + "slots": { + "default": { + "desc": "This is where QChip content goes, if not using 'label' property" + } + }, + "events": { + "click": { + "desc": "Emitted on QChip click if 'clickable' property is set", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + }, + "update:selected": { + "desc": "Used by Vue on 'selected.sync' prop for updating its value", + "params": { + "state": { + "type": "Boolean", + "desc": "Selected state" + } + } + }, + "remove": { + "desc": "Works along with 'value' and 'removable' prop. Emitted when toggling rendering state of the QChip", + "params": { + "state": { + "type": "Boolean", + "desc": "Render state (render or not)" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QCircularProgress.json b/dist/api/QCircularProgress.json new file mode 100644 index 00000000000..19901cb2811 --- /dev/null +++ b/dist/api/QCircularProgress.json @@ -0,0 +1,146 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/circular-progress" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "value": { + "type": "Number", + "default": 0, + "desc": "Current progress (must be between min/max)", + "examples": [ + 0, + 100, + 52.32 + ], + "category": "model" + }, + "min": { + "type": "Number", + "default": 0, + "desc": "Minimum value defining 'no progress' (must be lower than 'max')", + "examples": [ + 0, + 100, + 52.32 + ], + "category": "model" + }, + "max": { + "type": "Number", + "default": 100, + "desc": "Maximum value defining 100% progress made (must be higher than 'min')", + "examples": [ + 100, + 52.32 + ], + "category": "model" + }, + "color": { + "type": "String", + "desc": "Color name for the arc progress from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "center-color": { + "type": "String", + "desc": "Color name for the center part of the component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "track-color": { + "type": "String", + "desc": "Color name for the track of the component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "font-size": { + "type": "String", + "desc": "Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size", + "default": "0.25em", + "examples": [ + "1em", + "16px", + "2rem" + ], + "category": "style" + }, + "rounded": { + "type": "Boolean", + "desc": "Rounding the arc of progress", + "category": "style", + "addedIn": "v1.20.2" + }, + "thickness": { + "type": "Number", + "default": 0.2, + "desc": "Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size", + "examples": [ + 1, + 0.3 + ], + "category": "style" + }, + "angle": { + "type": "Number", + "desc": "Angle to rotate progress arc by", + "default": 0, + "examples": [ + 0, + 40, + 90 + ], + "category": "content" + }, + "indeterminate": { + "type": "Boolean", + "desc": "Put component into 'indeterminate' state; Ignores 'value' prop", + "category": "behavior" + }, + "show-value": { + "type": "Boolean", + "desc": "Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component", + "category": "content|behavior" + }, + "reverse": { + "type": "Boolean", + "desc": "Reverses the direction of progress; Only for determined state", + "category": "behavior" + }, + "instant-feedback": { + "type": "Boolean", + "desc": "No animation when model changes", + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "Used for component content only if 'show-value' prop is set; Make sure the content has enough space to be displayed inside the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QColor.json b/dist/api/QColor.json new file mode 100644 index 00000000000..5208d7475a0 --- /dev/null +++ b/dist/api/QColor.json @@ -0,0 +1,145 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/color-picker" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "value": { + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model", + "type": "String", + "examples": [ + "v-model=\"myColor\"" + ] + }, + "default-value": { + "type": "String", + "desc": "The default value to show when the model doesn't have one", + "examples": [ + "default-value=\"#c0c0c0\"" + ], + "category": "model" + }, + "default-view": { + "type": "String", + "desc": "The default view of the picker", + "default": "spectrum", + "values": [ + "spectrum", + "tune", + "palette" + ], + "category": "behavior" + }, + "format-model": { + "type": "String", + "desc": "Forces a certain model format upon the model", + "default": "auto", + "values": [ + "auto", + "hex", + "rgb", + "hexa", + "rgba" + ], + "examples": [ + "hex" + ], + "category": "model" + }, + "palette": { + "type": "Array", + "desc": "Use a custom palette of colors for the palette tab", + "default": "(hard-coded palette)", + "examples": [ + ":palette=\"[ '#019A9D', '#D9B801', 'rgb(23,120,0)', '#B2028A' ]\"" + ], + "category": "content" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style", + "addedIn": "v1.5.2" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style", + "addedIn": "v1.5.2" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style", + "addedIn": "v1.5.2" + }, + "no-header": { + "type": "Boolean", + "desc": "Do not render header", + "category": "content" + }, + "no-header-tabs": { + "type": "Boolean", + "desc": "Do not render header tabs (only the input)", + "category": "content", + "addedIn": "v1.17" + }, + "no-footer": { + "type": "Boolean", + "desc": "Do not render footer; Useful when you want a specific view ('default-view' prop) and don't want the user to be able to switch it", + "category": "content" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + }, + "change": { + "desc": "Emitted on lazy model value change (after user finishes selecting a color)", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QDate.json b/dist/api/QDate.json new file mode 100644 index 00000000000..2fc8d3b34eb --- /dev/null +++ b/dist/api/QDate.json @@ -0,0 +1,780 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/date" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "value": { + "desc": "Date(s) of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model", + "type": [ + "String", + "Array", + "Object" + ], + "required": true, + "examples": [ + "v-model=\"myDate\"", + "v-model=\"[myDate1, myDate2]\"", + "v-model=\"[{ from: myDateFrom, to: myDateTo }]\"", + "v-model=\"[myDate1, { from: myDateFrom, to: myDateTo }, myDate2]\"" + ] + }, + "landscape": { + "type": "Boolean", + "desc": "Display the component in landscape mode", + "category": "behavior" + }, + "mask": { + "type": "String", + "desc": "Mask (formatting string) used for parsing and formatting value", + "category": "model", + "default": "YYYY/MM/DD", + "examples": [ + "YYYY-MM-DD", + "MMMM Do, YYYY", + "YYYY-MM-DD HH:mm:ss" + ] + }, + "locale": { + "type": "Object", + "desc": "Locale formatting options", + "examples": [ + ":locale=\"{ monthsShort: ['Ian', 'Feb', 'Mar', '...'] }\"" + ], + "definition": { + "days": { + "type": "Array", + "desc": "List of full day names (DDDD), starting with Sunday", + "examples": [ + "['Duminica', 'Luni', 'Marti', '...']" + ] + }, + "daysShort": { + "type": "Array", + "desc": "List of short day names (DDD), starting with Sunday", + "examples": [ + "['Dum', 'Lun', 'Mar', '...']" + ] + }, + "months": { + "type": "Array", + "desc": "List of full month names (MMMM), starting with January", + "examples": [ + "['Ianuarie', 'Februarie', 'Martie', '...']" + ] + }, + "monthsShort": { + "type": "Array", + "desc": "List of short month names (MMM), starting with January", + "examples": [ + "['Ian', 'Feb', 'Mar', '...']" + ] + } + }, + "category": "model" + }, + "calendar": { + "type": "String", + "desc": "Specify calendar type", + "default": "gregorian", + "values": [ + "gregorian", + "persian" + ], + "category": "model" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style", + "addedIn": "v1.1.5" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style", + "addedIn": "v1.1.5" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style", + "addedIn": "v1.1.5" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "title": { + "type": "String", + "desc": "When specified, it overrides the default header title; Makes sense when not in 'minimal' mode", + "examples": [ + "Birthday" + ], + "category": "content" + }, + "subtitle": { + "type": "String", + "desc": "When specified, it overrides the default header subtitle; Makes sense when not in 'minimal' mode", + "examples": [ + "John Doe" + ], + "category": "content" + }, + "default-year-month": { + "type": "String", + "desc": "The default year and month to display (in YYYY/MM format) when model is unfilled (undefined or null); Please ensure it is within the navigation min/max year-month (if using them)", + "examples": [ + "1986/02" + ], + "category": "model" + }, + "default-view": { + "type": "String", + "desc": "The view which will be displayed by default", + "default": "Calendar", + "values": [ + "Calendar", + "Months", + "Years" + ], + "category": "model" + }, + "years-in-month-view": { + "type": "Boolean", + "desc": "Show the years selector in months view", + "category": "behavior", + "addedIn": "v1.11.2" + }, + "events": { + "type": [ + "Array", + "Function" + ], + "desc": "A list of events to highlight on the calendar; If using a function, it receives the date as a String and must return a Boolean (matches or not); If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ + ":events=\"['2018/11/05', '2018/11/06', '2018/11/09', '2018/11/23']\"", + ":events=\"date => date[9] % 3 === 0\"" + ], + "category": "model" + }, + "event-color": { + "type": [ + "String", + "Function" + ], + "desc": "Color name (from the Quasar Color Palette); If using a function, it receives the date as a String and must return a String (color for the received date); If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ + "teal-10", + ":event-color=\"(date) => date[9] % 2 === 0 ? 'teal' : 'orange'\"" + ], + "category": "style" + }, + "options": { + "type": [ + "Array", + "Function" + ], + "desc": "Optionally configure the days that are selectable; If using a function, it receives the date as a String and must return a Boolean (is date acceptable or not); If using a function then for best performance, reference it from your scope and do not define it inline; Incompatible with 'range' prop", + "examples": [ + ":options=\"['2018/11/05', '2018/11/12', '2018/11/19', '2018/11/26' ]\"", + ":options=\"date => date[9] % 3 === 0\"", + ":options=\"date => date >= '2018/11/03' && date <= '2018/11/15'\"" + ], + "category": "model" + }, + "model-navigation": { + "type": [ + "String", + "Boolean" + ], + "desc": "On which end of the range to navigate the calendar when the model changes; Use `false` to skip navigation", + "values": [ + "from", + "to", + "(Boolean) false" + ], + "default": "from", + "category": "behavior", + "addedIn": "v1.14.8" + }, + "navigation-min-year-month": { + "type": "String", + "desc": "Lock user from navigating below a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop", + "examples": [ + "2020/07" + ], + "category": "selection", + "addedIn": "v1.13" + }, + "navigation-max-year-month": { + "type": "String", + "desc": "Lock user from navigating above a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop", + "examples": [ + "2020/10" + ], + "category": "selection", + "addedIn": "v1.13" + }, + "no-unset": { + "type": "Boolean", + "desc": "Remove ability to unselect a date; It does not apply to selecting a range over already selected dates", + "category": "selection", + "addedIn": "v1.13.2" + }, + "first-day-of-week": { + "type": [ + "String", + "Number" + ], + "desc": "Sets the day of the week that is considered the first day (0 - Sunday, 1 - Monday, ...); This day will show in the left-most column of the calendar", + "default": "(based on configured Quasar lang language)", + "examples": [ + "first-day-of-week=\"1\"", + ":first-day-of-week=\"selectedFirstDayOfTheWeek\"" + ], + "category": "model" + }, + "today-btn": { + "type": "Boolean", + "desc": "Display a button that selects the current day", + "category": "content" + }, + "minimal": { + "type": "Boolean", + "desc": "Don’t display the header", + "category": "content" + }, + "multiple": { + "type": "Boolean", + "desc": "Allow multiple selection; Model must be Array", + "category": "model|selection", + "addedIn": "v1.13" + }, + "range": { + "type": "Boolean", + "desc": "Allow range selection; Partial compatibility with 'options' prop: selected ranges might also include 'unselectable' days", + "category": "model|selection", + "addedIn": "v1.13" + }, + "day-as-range": { + "type": "Boolean", + "desc": "Model single days as a range (object) instead of string", + "category": "model|selection", + "addedIn": "v1.15.2" + }, + "emit-immediately": { + "type": "Boolean", + "desc": "Emit model when user browses month and year too; ONLY for single selection (non-multiple, non-range)", + "category": "model" + } + }, + "slots": { + "default": { + "desc": "This is where additional buttons can go", + "addedIn": "v1.2.8" + } + }, + "scopedSlots": { + "day": { + "desc": "Override default day content slot; Suggestion: tooltips and / or multiple event markers", + "scope": { + "i": { + "type": "Number", + "desc": "The day number in month", + "examples": [ + 23 + ] + }, + "day": { + "type": "String", + "desc": "Full date in YYYY/MM/DD form", + "examples": [ + "2020/05/20" + ] + }, + "fill": { + "type": "Boolean", + "desc": "The day does not belong to the currently displayed month / year (no QBtn and hidden by default)" + }, + "in": { + "type": "Boolean", + "desc": "The day is selectable (QBtn is not disabled)" + }, + "today": { + "type": "Boolean", + "desc": "The day is today" + }, + "selected": { + "type": "Boolean", + "desc": "The day is selected" + }, + "unelevated": { + "type": "Boolean", + "desc": "The day is selected" + }, + "flat": { + "type": "Boolean", + "desc": "The day is not selected" + }, + "classes": { + "type": "String", + "desc": "The classes applied to the day" + }, + "color": { + "type": "String", + "desc": "The color of the QBtn used for the day", + "examples": [ + "primary" + ] + }, + "textColor": { + "type": "String", + "desc": "The text color of the QBtn used for the day", + "examples": [ + "orange-2" + ] + }, + "event": { + "type": [ + "Boolean", + "String", + "Any" + ], + "desc": "Boolean false if there is no event for the day; The event-color or the value returned by the event-color function", + "examples": [ + "red" + ] + }, + "range": { + "type": "Object", + "desc": "The range this day belongs to", + "definition": { + "from": { + "type": "Object", + "desc": "Object of properties of the range starting point (only if range)", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + }, + "to": { + "type": "Object", + "desc": "Object of properties of the range ending point (only if range)", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + } + } + } + }, + "addedIn": "v1.14.8" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "New model value", + "required": true + }, + "reason": { + "type": "String", + "desc": "Reason of the user interaction (what was picked)", + "values": [ + "add-day", + "remove-day", + "add-range", + "remove-range", + "mask", + "locale", + "year", + "month" + ] + }, + "details": { + "type": "Object", + "desc": "Object of properties on the new model", + "definition": { + "year": { + "type": "Number", + "desc": "The year of the date that the user has clicked/tapped on" + }, + "month": { + "type": "Number", + "desc": "The month of the date that the user has clicked/tapped on" + }, + "day": { + "type": "Number", + "desc": "The day of the month that the user has clicked/tapped on" + }, + "from": { + "type": "Object", + "desc": "Object of properties of the range starting point (only if range)", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + }, + "addedIn": "v1.13" + }, + "to": { + "type": "Object", + "desc": "Object of properties of the range ending point (only if range)", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + }, + "addedIn": "v1.13" + }, + "changed": { + "type": "Boolean", + "desc": "(DEPRECATED from v1.13) Did the model change?", + "addedIn": "v1.1.1" + } + } + } + } + }, + "navigation": { + "desc": "Emitted when user navigates to a different month or year (and even when the model changes from an outside source)", + "params": { + "view": { + "type": "Object", + "desc": "Definition of the current view (year, month)", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + } + } + } + }, + "addedIn": "v1.13" + }, + "range-start": { + "desc": "User has started a range selection", + "params": { + "from": { + "type": "Object", + "desc": "Definition of date from where the range begins", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + } + }, + "addedIn": "v1.13" + }, + "range-change": { + "desc": "User has changed a range selection", + "params": { + "range": { + "type": "Object", + "desc": "Definition of the range", + "definition": { + "from": { + "type": "Object", + "desc": "Definition of date from where the range begins", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + }, + "to": { + "type": "Object", + "desc": "Definition of date to where the range ends", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + } + } + } + }, + "addedIn": "v1.14.8" + }, + "range-end": { + "desc": "User has ended a range selection", + "params": { + "range": { + "type": "Object", + "desc": "Definition of the range", + "definition": { + "from": { + "type": "Object", + "desc": "Definition of date from where the range begins", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + }, + "to": { + "type": "Object", + "desc": "Definition of date to where the range ends", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + } + } + } + }, + "addedIn": "v1.13" + } + }, + "methods": { + "setToday": { + "desc": "Change model to today", + "addedIn": "v1.1.7" + }, + "setView": { + "desc": "Change current view", + "params": { + "view": { + "type": "String", + "desc": "QDate view name", + "required": true, + "values": [ + "Calendar", + "Months", + "Years" + ] + } + }, + "addedIn": "v1.1.7" + }, + "offsetCalendar": { + "desc": "Increment or decrement calendar view's month or year", + "params": { + "type": { + "type": "String", + "required": true, + "desc": "What to increment/decrement", + "values": [ + "month", + "year" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Decrement?" + } + }, + "addedIn": "v1.1.7" + }, + "setCalendarTo": { + "desc": "Change current year and month of the Calendar view; It gets corrected if using navigation-min/max-year-month and sets the current view to Calendar", + "params": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + } + }, + "addedIn": "v1.13" + }, + "setEditingRange": { + "desc": "Configure the current editing range", + "params": { + "from": { + "type": "Object", + "desc": "Definition of date from where the range begins", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + }, + "to": { + "type": "Object", + "desc": "Definition of date to where the range ends", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of month" + } + } + }, + "modelNavigation": { + "type": [ + "String", + "Boolean" + ], + "desc": "On which end of the range to navigate the calendar; Use `false` to skip navigation", + "values": [ + "from", + "to", + "(Boolean) false" + ], + "default": "from", + "addedIn": "v1.14.8" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QDialog.json b/dist/api/QDialog.json new file mode 100644 index 00000000000..fc8fa8e64c8 --- /dev/null +++ b/dist/api/QDialog.json @@ -0,0 +1,258 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/dialog" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "content-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the content", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "content-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the content", + "examples": [ + "background-color: #ff0000", + ":content-style=\"{ color: '#ff0000' }\"" + ], + "category": "style" + }, + "value": { + "type": "Boolean", + "desc": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model" + }, + "persistent": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog if clicking outside of it or hitting ESC key; Also, an app route change won't dismiss it", + "category": "behavior" + }, + "no-esc-dismiss": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog by hitting ESC key; No need to set it if 'persistent' prop is also set", + "category": "behavior" + }, + "no-backdrop-dismiss": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog by clicking outside of it; No need to set it if 'persistent' prop is also set", + "category": "behavior" + }, + "no-route-dismiss": { + "type": "Boolean", + "desc": "Changing route app won't dismiss Dialog; No need to set it if 'persistent' prop is also set", + "category": "behavior" + }, + "auto-close": { + "type": "Boolean", + "desc": "Any click/tap inside of the dialog will close it", + "category": "behavior" + }, + "seamless": { + "type": "Boolean", + "desc": "Put Dialog into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too", + "category": "content" + }, + "maximized": { + "type": "Boolean", + "desc": "Put Dialog into maximized mode", + "category": "content" + }, + "full-width": { + "type": "Boolean", + "desc": "Dialog will try to render with same width as the window", + "category": "content" + }, + "full-height": { + "type": "Boolean", + "desc": "Dialog will try to render with same height as the window", + "category": "content" + }, + "position": { + "type": "String", + "desc": "Stick dialog to one of the sides (top, right, bottom or left)", + "default": "standard", + "values": [ + "standard", + "top", + "right", + "bottom", + "left" + ], + "examples": [ + "top", + "right" + ], + "category": "content" + }, + "transition-show": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "scale" + }, + "transition-hide": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "scale" + }, + "square": { + "type": "Boolean", + "desc": "Forces content to have squared borders", + "category": "style" + }, + "no-refocus": { + "type": "Boolean", + "desc": "(Accessibility) When Dialog gets hidden, do not refocus on the DOM element that previously had focus", + "category": "behavior" + }, + "no-focus": { + "type": "Boolean", + "desc": "(Accessibility) When Dialog gets shown, do not switch focus on it", + "category": "behavior" + }, + "no-shake": { + "type": "Boolean", + "desc": "Do not shake up the Dialog to catch user's attention", + "category": "behavior", + "addedIn": "v1.17" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "input": { + "desc": "Emitted when showing/hidden state changes; Is also used by v-model", + "params": { + "value": { + "type": "Boolean", + "desc": "New state (showing/hidden)" + } + } + }, + "show": { + "desc": "Emitted after component has triggered show()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-show": { + "desc": "Emitted when component triggers show() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "hide": { + "desc": "Emitted after component has triggered hide()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-hide": { + "desc": "Emitted when component triggers hide() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "shake": { + "desc": "Emitted when the Dialog shakes in order to catch user's attention, unless the 'no-shake' property is set" + }, + "escape-key": { + "desc": "Emitted when ESC key is pressed; Does not get emitted if Dialog is 'persistent' or it has 'no-esc-key' set" + } + }, + "methods": { + "show": { + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "hide": { + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "toggle": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "desc": "Triggers component to toggle between show/hide" + }, + "focus": { + "desc": "Focus dialog; if you have content with autofocus attribute, it will directly focus it", + "params": { + "selector": { + "type": "String", + "required": false, + "desc": "Optional CSS selector to override default focusable element - use '' to focus first focusable element instead of the one with autofocus", + "examples": [ + "[tabindex]:not([tabindex=\"-1\"])" + ], + "addedIn": "v1.18.9" + } + } + }, + "shake": { + "desc": "Shakes dialog" + } + } +} \ No newline at end of file diff --git a/dist/api/QDrawer.json b/dist/api/QDrawer.json new file mode 100644 index 00000000000..b6c81d4915c --- /dev/null +++ b/dist/api/QDrawer.json @@ -0,0 +1,291 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/drawer" + }, + "props": { + "value": { + "type": "Boolean", + "desc": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model" + }, + "side": { + "type": "String", + "desc": "Side to attach to", + "values": [ + "left", + "right" + ], + "default": "left", + "examples": [ + "right" + ], + "category": "behavior" + }, + "overlay": { + "type": "Boolean", + "desc": "Puts drawer into overlay mode (does not occupy space on screen, narrowing the page)", + "category": "behavior" + }, + "width": { + "type": "Number", + "desc": "Width of drawer (in pixels)", + "default": 300, + "examples": [ + ":width=\"350\"" + ], + "category": "style" + }, + "mini": { + "type": "Boolean", + "desc": "Puts drawer into mini mode", + "category": "behavior" + }, + "mini-width": { + "type": "Number", + "desc": "Width of drawer (in pixels) when in mini mode", + "default": 60, + "examples": [ + ":mini-width=\"100\"" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.3" + }, + "mini-to-overlay": { + "type": "Boolean", + "desc": "Mini mode will expand as an overlay", + "category": "behavior" + }, + "breakpoint": { + "type": "Number", + "desc": "Breakpoint (in pixels) of layout width up to which mobile mode is used", + "default": 1023, + "examples": [ + 1200, + ":breakpoint=\"1400\"" + ], + "category": "behavior" + }, + "behavior": { + "type": "String", + "desc": "Overrides the default dynamic mode into which the drawer is put on", + "values": [ + "default", + "desktop", + "mobile" + ], + "default": "default", + "examples": [ + "mobile" + ], + "category": "behavior" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "elevated": { + "type": "Boolean", + "desc": "Adds a default shadow to the header", + "category": "style" + }, + "persistent": { + "type": "Boolean", + "desc": "Prevents drawer from auto-closing when app's route changes", + "category": "behavior" + }, + "show-if-above": { + "type": "Boolean", + "desc": "Forces drawer to be shown on screen on initial render if the layout width is above breakpoint, regardless of v-model; This is the default behavior when SSR is taken over by client on initial render", + "category": "behavior" + }, + "content-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the drawer", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "content-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the drawer", + "examples": [ + "background-color: #ff0000", + ":content-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "no-swipe-open": { + "type": "Boolean", + "desc": "Disables the default behavior where drawer can be swiped into view; Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature", + "category": "behavior" + }, + "no-swipe-close": { + "type": "Boolean", + "desc": "Disables the default behavior where drawer can be swiped out of view (applies to drawer content only); Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature", + "category": "behavior" + }, + "no-swipe-backdrop": { + "type": "Boolean", + "desc": "Disables the default behavior where drawer backdrop can be swiped", + "category": "behavior", + "addedIn": "v1.1.7" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component (overridden by 'mini' slot if used and drawer is in mini mode)" + }, + "mini": { + "desc": "Content to show when in mini mode (overrides 'default' slot)" + } + }, + "events": { + "input": { + "desc": "Emitted when showing/hidden state changes; Is also used by v-model", + "params": { + "value": { + "type": "Boolean", + "desc": "New state (showing/hidden)" + } + } + }, + "show": { + "desc": "Emitted after component has triggered show()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-show": { + "desc": "Emitted when component triggers show() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "hide": { + "desc": "Emitted after component has triggered hide()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-hide": { + "desc": "Emitted when component triggers hide() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "on-layout": { + "desc": "Emitted when drawer toggles between occupying space on page or not", + "params": { + "state": { + "type": "Boolean", + "desc": "New state" + } + } + }, + "click": { + "desc": "Emitted when user clicks/taps on the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "mouseover": { + "desc": "Emitted when user moves mouse cursor over the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "mouseout": { + "desc": "Emitted when user moves mouse cursor out of the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "mini-state": { + "desc": "Emitted when drawer changes the mini-mode state (sometimes it is forced to do so)", + "params": { + "state": { + "type": "Boolean", + "desc": "New state" + } + }, + "addedIn": "v1.1.3" + } + }, + "methods": { + "show": { + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "hide": { + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "toggle": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "desc": "Triggers component to toggle between show/hide" + } + } +} \ No newline at end of file diff --git a/dist/api/QEditor.json b/dist/api/QEditor.json new file mode 100644 index 00000000000..fc25d3923bb --- /dev/null +++ b/dist/api/QEditor.json @@ -0,0 +1,389 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/editor" + }, + "props": { + "fullscreen": { + "type": "Boolean", + "sync": true, + "desc": "Fullscreen mode", + "examples": [ + ":fullscreen.sync=\"isFullscreen\"" + ], + "category": "behavior" + }, + "no-route-fullscreen-exit": { + "type": "Boolean", + "desc": "Changing route app won't exit fullscreen", + "category": "behavior", + "addedIn": "v1.1.7" + }, + "value": { + "type": "String", + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "required": true, + "examples": [ + "v-model=\"content\"" + ], + "category": "model" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no borders)", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; toolbar buttons are shown on one-line only", + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.3" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "min-height": { + "type": "String", + "desc": "CSS unit for the minimum height of the editable area", + "default": "10rem", + "examples": [ + "15rem", + "50vh" + ], + "category": "style" + }, + "max-height": { + "type": "String", + "desc": "CSS unit for maximum height of the input area", + "examples": [ + "1000px", + "90vh" + ], + "category": "style" + }, + "height": { + "type": "String", + "desc": "CSS value to set the height of the editable area", + "examples": [ + "100px", + "50vh" + ], + "category": "style" + }, + "definitions": { + "type": "Object", + "desc": "Definition of commands and their buttons to be included in the 'toolbar' prop", + "examples": [ + ":definitions=\"{ save: { tip: 'Save your work', icon: 'save', label: 'Save', handler: saveWork }, upload: { tip: 'Upload to cloud', icon: 'cloud_upload', label: 'Upload', handler: uploadIt } }\"" + ], + "definition": { + "label": { + "type": "String", + "desc": "Label of the button", + "examples": [ + "Addresses" + ] + }, + "tip": { + "type": "String", + "desc": "Text to be displayed as a tooltip on hover", + "examples": [ + "Add a contact from the Address Book" + ] + }, + "htmlTip": { + "type": "String", + "desc": "HTML formatted text to be displayed within a tooltip on hover", + "examples": [ + "Add a user from the address book" + ] + }, + "icon": { + "type": "String", + "desc": "Icon of the button", + "examples": [ + "fas fa-address-book" + ] + }, + "key": { + "type": "Number", + "desc": "Keycode of a key to be used together with the key for use as a shortcut to trigger this element", + "examples": [ + "12", + "36" + ] + }, + "handler": { + "type": "Function", + "desc": "Either this or \"cmd\" is required. Function for when button gets clicked/tapped.", + "params": null, + "returns": null, + "examples": [ + "() => this.uploadFile()" + ] + }, + "cmd": { + "type": "String", + "desc": "Either this or \"handler\" is required. This must be a valid execCommand method according to the designMode API.", + "examples": [ + "insertHTML", + "justifyFull" + ] + }, + "param": { + "type": "String", + "desc": "Only set a param if using a \"cmd\". This is commonly text or HTML to inject, but is highly dependent upon the specific cmd being called.", + "examples": [ + "\"nice" + ] + }, + "disable": { + "type": [ + "Boolean", + "Function" + ], + "desc": "Is button disabled? If specifying a function, return a Boolean value.", + "examples": [ + "() => this.userIsActive()" + ] + }, + "type": { + "type": "String", + "desc": "Pass the value \"no-state\" if the button should not have an \"active\" state", + "values": [ + null, + "no-state" + ], + "examples": [ + "no-state" + ] + }, + "fixedLabel": { + "type": "Boolean", + "desc": "Lock the button label, so it doesn't change based on the child option selected." + }, + "fixedIcon": { + "type": "Boolean", + "desc": "Lock the button icon, so it doesn't change based on the child option selected." + }, + "highlight": { + "type": "Boolean", + "desc": "Highlight the toolbar button, when a child option has been selected." + } + }, + "category": "toolbar" + }, + "fonts": { + "type": "Object", + "desc": "Object with definitions of fonts", + "examples": [ + ":fonts=\"{ arial: 'Arial', arial_black: 'Arial Black', comic_sans: 'Comic Sans MS' }\"" + ], + "category": "toolbar" + }, + "toolbar": { + "type": "Array", + "desc": "An array of arrays of Objects/Strings that you use to define the construction of the elements and commands available in the toolbar", + "default": [ + [ + "left", + "center", + "right", + "justify" + ], + [ + "bold", + "italic", + "underline", + "strike" + ], + [ + "undo", + "redo" + ] + ], + "examples": [ + [ + "left", + "center", + "right", + "justify" + ] + ], + "category": "toolbar" + }, + "toolbar-color": { + "type": "String", + "desc": "Font color (from the Quasar Palette) of buttons and text in the toolbar", + "examples": [ + "primary", + "teal-10" + ], + "category": "toolbar" + }, + "toolbar-text-color": { + "type": "String", + "desc": "Text color (from the Quasar Palette) of toolbar commands", + "examples": [ + "primary", + "teal-10" + ], + "category": "toolbar" + }, + "toolbar-toggle-color": { + "type": "String", + "desc": "Choose the active color (from the Quasar Palette) of toolbar commands button", + "default": "primary", + "examples": [ + "secondary", + "blue-3" + ], + "category": "toolbar" + }, + "toolbar-bg": { + "type": "String", + "desc": "Toolbar background color (from Quasar Palette)", + "default": "grey-3", + "examples": [ + "secondary", + "blue-3" + ], + "category": "toolbar" + }, + "toolbar-outline": { + "type": "Boolean", + "desc": "Toolbar buttons are rendered \"outlined\"", + "category": "toolbar|style" + }, + "toolbar-push": { + "type": "Boolean", + "desc": "Toolbar buttons are rendered as a \"push-button\" type", + "category": "toolbar|style" + }, + "toolbar-rounded": { + "type": "Boolean", + "desc": "Toolbar buttons are rendered \"rounded\"", + "category": "toolbar|style" + }, + "paragraph-tag": { + "type": "String", + "desc": "Paragraph tag to be used", + "values": [ + "div", + "p" + ], + "category": "behavior", + "addedIn": "v1.14.4" + }, + "content-style": { + "type": "Object", + "desc": "Object with CSS properties and values for styling the container of QEditor", + "examples": [ + ":content-style=\"{ backgroundColor: '#C0C0C0' }\"" + ], + "category": "style" + }, + "content-class": { + "type": [ + "Object", + "Array", + "String" + ], + "desc": "CSS classes for the input area", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "placeholder": { + "type": "String", + "desc": "Text to display as placeholder", + "examples": [ + "Type your story here ..." + ], + "category": "content", + "addedIn": "v1.9.12" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "String", + "desc": "The pure HTML of the content", + "required": true + } + } + } + }, + "methods": { + "toggleFullscreen": { + "desc": "Toggle the view to be fullscreen or not fullscreen" + }, + "setFullscreen": { + "desc": "Enter the fullscreen view" + }, + "exitFullscreen": { + "desc": "Leave the fullscreen view" + }, + "runCmd": { + "desc": "Run contentEditable command at caret position and range", + "params": { + "cmd": { + "type": "String", + "desc": "Must be a valid execCommand method according to the designMode API", + "examples": [ + "copy", + "cut", + "paste" + ], + "required": true + }, + "param": { + "type": "String", + "desc": "The argument to pass to the command", + "examples": [ + "Small Text" + ] + }, + "update": { + "type": "Boolean", + "desc": "Refresh the toolbar", + "default": true + } + } + }, + "refreshToolbar": { + "desc": "Hide the link editor if visible and force the instance to re-render" + }, + "focus": { + "desc": "Focus on the contentEditable at saved cursor position" + }, + "getContentEl": { + "desc": "Retrieve the content of the Editor", + "returns": { + "type": "Element", + "desc": "Provides the pure HTML within the editable area" + } + } + } +} \ No newline at end of file diff --git a/dist/api/QExpansionItem.json b/dist/api/QExpansionItem.json new file mode 100644 index 00000000000..123e363d2ad --- /dev/null +++ b/dist/api/QExpansionItem.json @@ -0,0 +1,436 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/expansion-item" + }, + "props": { + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "navigation" + }, + "exact": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "active-class": { + "type": "String", + "desc": "Equivalent to Vue Router 'active-class' property", + "examples": [ + "my-active-class" + ], + "category": "navigation" + }, + "exact-active-class": { + "type": "String", + "desc": "Equivalent to Vue Router 'active-class' property", + "examples": [ + "my-exact-active-class" + ], + "category": "navigation" + }, + "href": { + "type": "String", + "desc": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ + "http://quasar.dev" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "target": { + "type": "String", + "desc": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ + "_blank", + "_self", + "_parent", + "_top" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "value": { + "type": "Boolean", + "desc": "Model of the component defining 'open' state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "expand-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "expanded-icon": { + "type": "String", + "desc": "Expand icon name (following Quasar convention) for when QExpansionItem is expanded; When used, it also disables the rotation animation of the expand icon; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.4.5" + }, + "expand-icon-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Apply custom class(es) to the expand icon item section", + "examples": [ + "text-purple" + ], + "category": "style" + }, + "toggle-aria-label": { + "type": "String", + "desc": "aria-label to be used on the expansion toggle element", + "examples": [ + "Open details" + ], + "category": "accessibility", + "addedIn": "v1.20.2" + }, + "label": { + "type": "String", + "desc": "Header label (unless using 'header' slot)", + "examples": [ + "My expansion item" + ], + "category": "content" + }, + "label-lines": { + "type": [ + "Number", + "String" + ], + "desc": "Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property!", + "examples": [ + "1", + "3", + ":label-lines=\"2\"" + ], + "category": "content" + }, + "caption": { + "type": "String", + "desc": "Header sub-label (unless using 'header' slot)", + "examples": [ + "Unread message: 5" + ], + "category": "content" + }, + "caption-lines": { + "type": [ + "Number", + "String" + ], + "desc": "Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property!", + "examples": [ + "1", + "3", + ":caption-lines=\"2\"" + ], + "category": "content" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "duration": { + "type": "Number", + "desc": "Animation duration (in milliseconds)", + "default": 300, + "examples": [ + ":duration=\"1000\"" + ], + "category": "behavior" + }, + "header-inset-level": { + "type": "Number", + "desc": "Apply an inset to header (unless using 'header' slot); Useful when header avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu", + "examples": [ + ":header-inset-level=\"1\"" + ], + "category": "content" + }, + "content-inset-level": { + "type": "Number", + "desc": "Apply an inset to content (changes content padding)", + "examples": [ + ":content-inset-level=\"1\"" + ], + "category": "content" + }, + "expand-separator": { + "type": "Boolean", + "desc": "Apply a top and bottom separator when expansion item is opened", + "category": "content" + }, + "default-opened": { + "type": "Boolean", + "desc": "Puts expansion item into open state on initial render; Overridden by v-model if used", + "category": "behavior" + }, + "hide-expand-icon": { + "type": "Boolean", + "desc": "Do not show the expand icon", + "category": "content", + "addedIn": "v1.20.2" + }, + "expand-icon-toggle": { + "type": "Boolean", + "desc": "Applies the expansion events to the expand icon only and not to the whole header", + "category": "behavior" + }, + "switch-toggle-side": { + "type": "Boolean", + "desc": "Switch expand icon side (from default 'right' to 'left')", + "category": "content" + }, + "dense-toggle": { + "type": "Boolean", + "desc": "Use dense mode for expand icon", + "category": "style" + }, + "group": { + "type": "String", + "desc": "Register expansion item into a group (unique name that must be applied to all expansion items in that group) for coordinated open/close state within the group a.k.a. 'accordion mode'", + "examples": [ + "my-emails" + ], + "category": "content|behavior" + }, + "popup": { + "type": "Boolean", + "desc": "Put expansion list into 'popup' mode", + "category": "behavior" + }, + "header-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Apply custom style to the header", + "examples": [ + "background: '#ff0000'", + ":header-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "header-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Apply custom class(es) to the header", + "examples": [ + "my-custom-class", + ":header-class=\"{ 'my-custom-class': someCondition }\"" + ], + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Slot used for expansion item's content" + } + }, + "scopedSlots": { + "header": { + "desc": "Slot used for overriding default header", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "QExpansionItem expanded status", + "addedIn": "v1.19.5" + }, + "detailsId": { + "type": "String", + "desc": "QExpansionItem details panel id (for use in aria-controls)", + "addedIn": "v1.20.2" + }, + "show": { + "type": "Function", + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "returns": null, + "addedIn": "v1.20.2" + }, + "hide": { + "type": "Function", + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "returns": null, + "addedIn": "v1.20.2" + }, + "toggle": { + "type": "Function", + "desc": "Triggers component to toggle between show/hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "returns": null, + "addedIn": "v1.20.2" + } + } + } + }, + "events": { + "input": { + "desc": "Emitted when showing/hidden state changes; Is also used by v-model", + "params": { + "value": { + "type": "Boolean", + "desc": "New state (showing/hidden)" + } + } + }, + "show": { + "desc": "Emitted after component has triggered show()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-show": { + "desc": "Emitted when component triggers show() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "hide": { + "desc": "Emitted after component has triggered hide()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-hide": { + "desc": "Emitted when component triggers hide() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "after-show": { + "desc": "Emitted when component show animation is finished", + "addedIn": "v1.9" + }, + "after-hide": { + "desc": "Emitted when component hide animation is finished", + "addedIn": "v1.9" + } + }, + "methods": { + "show": { + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "hide": { + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "toggle": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "desc": "Triggers component to toggle between show/hide" + } + } +} \ No newline at end of file diff --git a/dist/api/QFab.json b/dist/api/QFab.json new file mode 100644 index 00000000000..a76d1c4028e --- /dev/null +++ b/dist/api/QFab.json @@ -0,0 +1,359 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "type": { + "type": "String", + "desc": "Define the button HTML DOM type", + "default": "a", + "values": [ + "a", + "submit", + "button", + "reset" + ], + "category": "general" + }, + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design for Fab button", + "category": "style" + }, + "push": { + "type": "Boolean", + "desc": "Use 'push' design for Fab button", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design for Fab button", + "category": "style" + }, + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow", + "category": "style", + "addedIn": "v1.9" + }, + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ + "16px", + "10px 5px", + "2rem", + "xs", + "md lg" + ], + "category": "style", + "addedIn": "v1.11" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "glossy": { + "type": "Boolean", + "desc": "Apply the glossy effect over the button", + "category": "style" + }, + "external-label": { + "type": "Boolean", + "desc": "Display label besides the FABs, as external content", + "category": "style|content", + "addedIn": "v1.9" + }, + "label": { + "type": [ + "String", + "Number" + ], + "desc": "The label that will be shown when Fab is extended", + "default": "", + "examples": [ + "Button Label" + ], + "category": "content", + "addedIn": "v1.9" + }, + "label-position": { + "type": "String", + "desc": "Position of the label around the icon", + "values": [ + "top", + "right", + "bottom", + "left" + ], + "category": "style|content", + "addedIn": "v1.9" + }, + "hide-label": { + "type": "Boolean", + "desc": "Hide the label; Useful for animation purposes where you toggle the visibility of the label", + "category": "style|content", + "addedIn": "v1.9" + }, + "label-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the label container", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style", + "addedIn": "v1.9" + }, + "label-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the label container", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style", + "addedIn": "v1.9" + }, + "square": { + "type": "Boolean", + "desc": "Apply a rectangle aspect to the FAB", + "category": "style", + "addedIn": "v1.9" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general", + "addedIn": "v1.13" + }, + "value": { + "type": "Boolean", + "desc": "Controls state of fab actions (showing/hidden); Works best with v-model directive, otherwise use along listening to 'input' event", + "category": "model" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "active-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "hide-icon": { + "type": "Boolean", + "desc": "Hide the icon (don't use any)", + "category": "style|content", + "addedIn": "v1.9.14" + }, + "direction": { + "type": "String", + "desc": "Direction to expand Fab Actions to", + "default": "right", + "values": [ + "up", + "right", + "down", + "left" + ], + "examples": [ + "down" + ], + "category": "behavior" + }, + "vertical-actions-align": { + "type": "String", + "desc": "The side of the Fab where Fab Actions will expand (only when direction is 'up' or 'down')", + "default": "center", + "values": [ + "left", + "center", + "right" + ], + "category": "style|content", + "addedIn": "v1.9" + }, + "persistent": { + "type": "Boolean", + "desc": "By default, Fab Actions are hidden when user navigates to another route and this prop disables this behavior", + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "This is where QFabActions may go into" + }, + "tooltip": { + "desc": "Slot specifically designed for a QTooltip" + } + }, + "scopedSlots": { + "icon": { + "desc": "Slot for icon shown when FAB is closed; Suggestion: QIcon", + "scope": { + "opened": { + "type": "Boolean", + "desc": "FAB is opened" + } + }, + "addedIn": "v1.17" + }, + "active-icon": { + "desc": "Slot for icon shown when FAB is opened; Suggestion: QIcon", + "scope": { + "opened": { + "type": "Boolean", + "desc": "FAB is opened" + } + }, + "addedIn": "v1.17" + }, + "label": { + "desc": "Slot for label", + "scope": { + "opened": { + "type": "Boolean", + "desc": "FAB is opened" + } + }, + "addedIn": "v1.17" + } + }, + "events": { + "input": { + "desc": "Emitted when fab actions are shown/hidden; Captured by v-model directive", + "params": { + "value": { + "type": "Boolean", + "desc": "New state (showing/hidden)" + } + } + }, + "show": { + "desc": "Emitted after component has triggered show()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-show": { + "desc": "Emitted when component triggers show() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "hide": { + "desc": "Emitted after component has triggered hide()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-hide": { + "desc": "Emitted when component triggers hide() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + } + }, + "methods": { + "show": { + "desc": "Expands fab actions list", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "hide": { + "desc": "Collapses fab actions list", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "toggle": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "desc": "Triggers component to toggle between show/hide" + } + } +} \ No newline at end of file diff --git a/dist/api/QFabAction.json b/dist/api/QFabAction.json new file mode 100644 index 00000000000..0b042f0ed6e --- /dev/null +++ b/dist/api/QFabAction.json @@ -0,0 +1,246 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "type": { + "type": "String", + "desc": "Define the button HTML DOM type", + "default": "a", + "values": [ + "a", + "submit", + "button", + "reset" + ], + "category": "general" + }, + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design for Fab button", + "category": "style" + }, + "push": { + "type": "Boolean", + "desc": "Use 'push' design for Fab button", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design for Fab button", + "category": "style" + }, + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow", + "category": "style", + "addedIn": "v1.9" + }, + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ + "16px", + "10px 5px", + "2rem", + "xs", + "md lg" + ], + "category": "style", + "addedIn": "v1.11" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "glossy": { + "type": "Boolean", + "desc": "Apply the glossy effect over the button", + "category": "style" + }, + "external-label": { + "type": "Boolean", + "desc": "Display label besides the FABs, as external content", + "category": "style|content", + "addedIn": "v1.9" + }, + "label": { + "type": [ + "String", + "Number" + ], + "desc": "The label that will be shown when Fab is extended", + "default": "", + "examples": [ + "Button Label" + ], + "category": "content", + "addedIn": "v1.9" + }, + "label-position": { + "type": "String", + "desc": "Position of the label around the icon", + "values": [ + "top", + "right", + "bottom", + "left" + ], + "category": "style|content", + "addedIn": "v1.9" + }, + "hide-label": { + "type": "Boolean", + "desc": "Hide the label; Useful for animation purposes where you toggle the visibility of the label", + "category": "style|content", + "addedIn": "v1.9" + }, + "label-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the label container", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style", + "addedIn": "v1.9" + }, + "label-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the label container", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style", + "addedIn": "v1.9" + }, + "square": { + "type": "Boolean", + "desc": "Apply a rectangle aspect to the FAB", + "category": "style", + "addedIn": "v1.9" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general", + "addedIn": "v1.13" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "anchor": { + "type": "String", + "desc": "How to align the Fab Action relative to Fab expand side; By default it uses the align specified in QFab", + "values": [ + "start", + "center", + "end" + ], + "category": "style|content", + "addedIn": "v1.9" + }, + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "router" + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property", + "category": "router" + } + }, + "slots": { + "default": { + "desc": "Suggestion for this slot: QTooltip" + }, + "icon": { + "desc": "Slot for icon; Suggestion: QIcon", + "addedIn": "v1.17" + }, + "label": { + "desc": "Slot for label", + "addedIn": "v1.17" + } + }, + "events": { + "click": { + "desc": "Emitted when user clicks/taps on the component", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + } + }, + "methods": { + "click": { + "desc": "Emulate click on QFabAction", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QField.json b/dist/api/QField.json new file mode 100644 index 00000000000..1d7071d79a0 --- /dev/null +++ b/dist/api/QField.json @@ -0,0 +1,499 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/field" + }, + "props": { + "error": { + "type": "Boolean", + "desc": "Does field have validation errors?", + "category": "behavior" + }, + "error-message": { + "type": "String", + "desc": "Validation error message (gets displayed only if 'error' is set to 'true')", + "examples": [ + "Username must have at least 5 characters" + ], + "category": "content" + }, + "no-error-icon": { + "type": "Boolean", + "desc": "Hide error icon when there is an error", + "category": "content" + }, + "rules": { + "type": "Array", + "desc": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules", + "examples": [ + ":rules=\"[ val => val.length <= 3 || 'Please use maximum 3 characters' ]\"", + ":rules=\"[ 'fulltime' ]\"", + ":rules=\"[ (val, rules) => rules.email(val) || 'Please enter a valid email address' ]\"" + ], + "category": "behavior" + }, + "reactive-rules": { + "type": "Boolean", + "desc": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it", + "category": "behavior", + "addedIn": "v1.11" + }, + "lazy-rules": { + "type": [ + "Boolean", + "String" + ], + "desc": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself", + "values": [ + "(Boolean) true", + "(Boolean) false", + "ondemand" + ], + "category": "behavior" + }, + "label": { + "type": "String", + "desc": "A text label that will “float” up above the input field, once the field gets focus", + "examples": [ + "Username" + ], + "category": "content" + }, + "stack-label": { + "type": "Boolean", + "desc": "Label will be always shown above the field regardless of field content (if any)", + "category": "content" + }, + "hint": { + "type": "String", + "desc": "Helper (hint) text which gets placed below your wrapped form component", + "examples": [ + "Fill in between 3 and 12 characters" + ], + "category": "content" + }, + "hide-hint": { + "type": "Boolean", + "desc": "Hide the helper (hint) text when field doesn't have focus", + "category": "content" + }, + "prefix": { + "type": "String", + "desc": "Prefix", + "examples": [ + "$" + ], + "category": "content" + }, + "suffix": { + "type": "String", + "desc": "Suffix", + "examples": [ + "@gmail.com" + ], + "category": "content" + }, + "label-color": { + "type": "String", + "desc": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.7" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "bg-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "loading": { + "type": "Boolean", + "desc": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.", + "category": "behavior|content" + }, + "clearable": { + "type": "Boolean", + "desc": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null", + "category": "behavior|content" + }, + "clear-icon": { + "type": "String", + "desc": "Custom icon to use for the clear button when using along with 'clearable' prop", + "examples": [ + "close" + ], + "category": "content" + }, + "filled": { + "type": "Boolean", + "desc": "Use 'filled' design for the field", + "category": "style" + }, + "outlined": { + "type": "Boolean", + "desc": "Use 'outlined' design for the field", + "category": "style" + }, + "outlined-md": { + "type": "Boolean", + "desc": "Use Material Design 'outlined' design for the field", + "category": "style", + "addedIn": "v1.17.8" + }, + "borderless": { + "type": "Boolean", + "desc": "Use 'borderless' design for the field", + "category": "style" + }, + "standout": { + "type": [ + "Boolean", + "String" + ], + "desc": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)", + "examples": [ + "standout", + "standout=\"bg-primary text-white\"" + ], + "category": "style" + }, + "label-slot": { + "type": "Boolean", + "desc": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set", + "category": "content", + "addedIn": "v1.12.9" + }, + "bottom-slots": { + "type": "Boolean", + "desc": "Enables bottom slots ('error', 'hint', 'counter')", + "category": "content" + }, + "hide-bottom-space": { + "type": "Boolean", + "desc": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content", + "category": "style" + }, + "counter": { + "type": "Boolean", + "desc": "Show an automatic counter on bottom right", + "category": "content" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "item-aligned": { + "type": "Boolean", + "desc": "Match inner content alignment to that of QItem", + "category": "style" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "autofocus": { + "type": "Boolean", + "desc": "Focus field on initial component render", + "category": "behavior" + }, + "for": { + "type": "String", + "desc": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well", + "examples": [ + "myFieldsId" + ], + "category": "behavior", + "addedIn": "v1.4.2" + }, + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "maxlength": { + "type": [ + "String", + "Number" + ], + "desc": "Specify a max length of model", + "examples": [ + "12" + ], + "category": "model" + } + }, + "slots": { + "default": { + "desc": "Field main content" + }, + "prepend": { + "desc": "Prepend inner field; Suggestions: QIcon, QBtn" + }, + "append": { + "desc": "Append to inner field; Suggestions: QIcon, QBtn" + }, + "before": { + "desc": "Prepend outer field; Suggestions: QIcon, QBtn" + }, + "after": { + "desc": "Append outer field; Suggestions: QIcon, QBtn" + }, + "label": { + "desc": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored", + "addedIn": "v1.12.9" + }, + "counter": { + "desc": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion:
" + }, + "loading": { + "desc": "Override default spinner when component is in loading mode; Use in conjunction with 'loading' prop" + } + }, + "scopedSlots": { + "error": { + "desc": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ + "The field is required" + ] + } + }, + "addedIn": "v1.17" + }, + "hint": { + "desc": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ + "The field is required" + ] + } + }, + "addedIn": "v1.17" + }, + "control": { + "desc": "Slot for controls; Suggestion QSlider, QRange, QKnob, ...", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "floatingLabel": { + "type": "Boolean", + "desc": "Field's label is floating" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "emitValue": { + "type": "Function", + "desc": "Function that emits an @input event in the context of the field", + "params": { + "value": { + "type": "Any", + "desc": "Value to be emitted", + "examples": [ + 0, + "Changed text" + ] + } + }, + "returns": null + } + } + } + }, + "events": { + "clear": { + "desc": "When using the 'clearable' property, this event is emitted when the clear icon is clicked", + "addedIn": "v1.1.5", + "params": { + "value": { + "type": [ + "Any" + ], + "desc": "The previous value before clearing it" + } + } + }, + "input": { + "desc": "Emitted when the model changes, only when used with 'clearable' or the 'control' scoped slot.", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + }, + "focus": { + "desc": "Emitted when component gets focused", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + }, + "blur": { + "desc": "Emitted when component loses focus", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + } + }, + "methods": { + "resetValidation": { + "desc": "Reset validation status" + }, + "validate": { + "desc": "Trigger a validation", + "params": { + "value": { + "type": "Any", + "desc": "Optional value to validate against" + } + }, + "returns": { + "type": [ + "Boolean", + "Promise" + ], + "desc": "True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "true", + "validate().then(outcome => { ... })" + ] + } + }, + "focus": { + "desc": "Focus field" + }, + "blur": { + "desc": "Blur field (lose focus)" + } + } +} \ No newline at end of file diff --git a/dist/api/QFile.json b/dist/api/QFile.json new file mode 100644 index 00000000000..023b7c410fc --- /dev/null +++ b/dist/api/QFile.json @@ -0,0 +1,710 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/file" + }, + "addedIn": "v1.8", + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists", + "examples": [ + "car_id", + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "multiple": { + "type": "Boolean", + "desc": "Allow multiple file uploads", + "category": "behavior" + }, + "accept": { + "type": "String", + "desc": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element", + "examples": [ + ".jpg, .pdf, image/*", + "image/jpeg, .pdf" + ], + "category": "behavior" + }, + "capture": { + "type": "String", + "desc": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element", + "values": [ + "user", + "environment" + ], + "category": "behavior", + "addedIn": "v1.12.6" + }, + "max-file-size": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum size of individual file in bytes", + "examples": [ + 1024, + 1048576 + ], + "category": "behavior" + }, + "max-total-size": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum size of all files combined in bytes", + "examples": [ + 1024, + 1048576 + ], + "category": "behavior" + }, + "max-files": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum number of files to contain", + "examples": [ + ":max-files=\"5\"", + "10" + ], + "category": "behavior" + }, + "filter": { + "type": "Function", + "desc": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline", + "params": { + "files": { + "type": [ + "FileList", + "Array" + ], + "desc": "Candidate files to be added to queue" + } + }, + "returns": { + "type": "Array", + "desc": "Filtered files to be added to queue" + }, + "examples": [ + ":filter=\"files => files.filter(file => file.size === 1024)\"" + ], + "category": "behavior" + }, + "error": { + "type": "Boolean", + "desc": "Does field have validation errors?", + "category": "behavior" + }, + "error-message": { + "type": "String", + "desc": "Validation error message (gets displayed only if 'error' is set to 'true')", + "examples": [ + "Username must have at least 5 characters" + ], + "category": "content" + }, + "no-error-icon": { + "type": "Boolean", + "desc": "Hide error icon when there is an error", + "category": "content" + }, + "rules": { + "type": "Array", + "desc": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules", + "examples": [ + ":rules=\"[ val => val.length <= 3 || 'Please use maximum 3 characters' ]\"", + ":rules=\"[ 'fulltime' ]\"", + ":rules=\"[ (val, rules) => rules.email(val) || 'Please enter a valid email address' ]\"" + ], + "category": "behavior" + }, + "reactive-rules": { + "type": "Boolean", + "desc": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it", + "category": "behavior", + "addedIn": "v1.11" + }, + "lazy-rules": { + "type": [ + "Boolean", + "String" + ], + "desc": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself", + "values": [ + "(Boolean) true", + "(Boolean) false", + "ondemand" + ], + "category": "behavior" + }, + "label": { + "type": "String", + "desc": "A text label that will “float” up above the input field, once the field gets focus", + "examples": [ + "Username" + ], + "category": "content" + }, + "stack-label": { + "type": "Boolean", + "desc": "Label will be always shown above the field regardless of field content (if any)", + "category": "content" + }, + "hint": { + "type": "String", + "desc": "Helper (hint) text which gets placed below your wrapped form component", + "examples": [ + "Fill in between 3 and 12 characters" + ], + "category": "content" + }, + "hide-hint": { + "type": "Boolean", + "desc": "Hide the helper (hint) text when field doesn't have focus", + "category": "content" + }, + "prefix": { + "type": "String", + "desc": "Prefix", + "examples": [ + "$" + ], + "category": "content" + }, + "suffix": { + "type": "String", + "desc": "Suffix", + "examples": [ + "@gmail.com" + ], + "category": "content" + }, + "label-color": { + "type": "String", + "desc": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.7" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "bg-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "loading": { + "type": "Boolean", + "desc": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.", + "category": "behavior|content" + }, + "clearable": { + "type": "Boolean", + "desc": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null", + "category": "behavior|content" + }, + "clear-icon": { + "type": "String", + "desc": "Custom icon to use for the clear button when using along with 'clearable' prop", + "examples": [ + "close" + ], + "category": "content" + }, + "filled": { + "type": "Boolean", + "desc": "Use 'filled' design for the field", + "category": "style" + }, + "outlined": { + "type": "Boolean", + "desc": "Use 'outlined' design for the field", + "category": "style" + }, + "outlined-md": { + "type": "Boolean", + "desc": "Use Material Design 'outlined' design for the field", + "category": "style", + "addedIn": "v1.17.8" + }, + "borderless": { + "type": "Boolean", + "desc": "Use 'borderless' design for the field", + "category": "style" + }, + "standout": { + "type": [ + "Boolean", + "String" + ], + "desc": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)", + "examples": [ + "standout", + "standout=\"bg-primary text-white\"" + ], + "category": "style" + }, + "label-slot": { + "type": "Boolean", + "desc": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set", + "category": "content", + "addedIn": "v1.12.9" + }, + "bottom-slots": { + "type": "Boolean", + "desc": "Enables bottom slots ('error', 'hint', 'counter')", + "category": "content" + }, + "hide-bottom-space": { + "type": "Boolean", + "desc": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content", + "category": "style" + }, + "counter": { + "type": "Boolean", + "desc": "Show an automatic counter on bottom right", + "category": "content" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "item-aligned": { + "type": "Boolean", + "desc": "Match inner content alignment to that of QItem", + "category": "style" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "autofocus": { + "type": "Boolean", + "desc": "Focus field on initial component render", + "category": "behavior" + }, + "for": { + "type": "String", + "desc": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well", + "examples": [ + "myFieldsId" + ], + "category": "behavior", + "addedIn": "v1.4.2" + }, + "value": { + "type": [ + "File", + "FileList", + "Array" + ], + "desc": "Model of the component; Must be FileList or Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "required": true, + "examples": [ + "v-model=\"myModel\"" + ], + "category": "model" + }, + "append": { + "type": "Boolean", + "desc": "Append file(s) to current model rather than replacing them; Has effect only when using 'multiple' mode", + "category": "behavior", + "addedIn": "v1.11.3" + }, + "display-value": { + "type": [ + "Number", + "String" + ], + "desc": "Override default selection string, if not using 'file' or 'selected' scoped slots and if not using 'use-chips' prop", + "examples": [ + "Options: x, y, z" + ], + "category": "selection" + }, + "use-chips": { + "type": "Boolean", + "desc": "Use QChip to show picked files", + "category": "selection" + }, + "counter-label": { + "type": "Function", + "desc": "Label for the counter; The 'counter' prop is necessary to enable this one", + "params": { + "props": { + "type": "Object", + "desc": "Object containing counter label information", + "definition": { + "totalSize": { + "type": "String", + "desc": "The total size of files in human readable format", + "examples": [ + "1.42MB" + ] + }, + "filesNumber": { + "type": "Number", + "desc": "Number of picked files", + "examples": [ + 5 + ] + }, + "maxFiles": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum number of files (same as 'max-files' prop, if specified); When 'max-files' is not specified, this has 'void 0' as value", + "examples": [ + 5 + ] + } + } + } + }, + "returns": { + "type": "String", + "desc": "String to display for the counter label" + }, + "examples": [ + ":counter-label=\"counterLabelFn\"" + ], + "category": "behavior" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "input-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the underlying selection container", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "input-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the underlying selection container", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Field main content" + }, + "prepend": { + "desc": "Prepend inner field; Suggestions: QIcon, QBtn" + }, + "append": { + "desc": "Append to inner field; Suggestions: QIcon, QBtn" + }, + "before": { + "desc": "Prepend outer field; Suggestions: QIcon, QBtn" + }, + "after": { + "desc": "Append outer field; Suggestions: QIcon, QBtn" + }, + "label": { + "desc": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored", + "addedIn": "v1.12.9" + }, + "counter": { + "desc": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion:
" + }, + "loading": { + "desc": "Override default spinner when component is in loading mode; Use in conjunction with 'loading' prop" + } + }, + "scopedSlots": { + "error": { + "desc": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ + "The field is required" + ] + } + }, + "addedIn": "v1.17" + }, + "hint": { + "desc": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ + "The field is required" + ] + } + }, + "addedIn": "v1.17" + }, + "file": { + "desc": "Override default node to render a file from the user picked list", + "scope": { + "index": { + "type": "Number", + "desc": "Selection index", + "examples": [ + 0 + ] + }, + "file": { + "type": "File", + "desc": "File object" + }, + "ref": { + "type": "Object", + "desc": "Reference to the QFile component" + } + } + }, + "selected": { + "desc": "Override default selection slot; Suggestion: QChip", + "scope": { + "files": { + "type": [ + "FileList", + "Array" + ], + "desc": "Array of File objects" + }, + "ref": { + "type": "Object", + "desc": "Reference to the QFile component" + } + } + } + }, + "events": { + "rejected": { + "desc": "Emitted after files are picked and some do not pass the validation props (accept, max-file-size, max-total-size, filter, etc)", + "params": { + "rejectedEntries": { + "type": "Array", + "desc": "Array of { failedPropValidation: string, file: File } Objects for files that do not pass the validation" + } + }, + "addedIn": "v1.11.2" + }, + "clear": { + "desc": "When using the 'clearable' property, this event is emitted when the clear icon is clicked", + "addedIn": "v1.1.5", + "params": { + "value": { + "type": [ + "Any" + ], + "desc": "The previous value before clearing it" + } + } + }, + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + } + }, + "methods": { + "pickFiles": { + "desc": "Trigger file pick; Must be called as a direct consequence of user interaction (eg. in a click handler), due to browsers security policy", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + }, + "addFiles": { + "desc": "Add files programmatically", + "params": { + "files": { + "type": [ + "FileList", + "Array" + ], + "desc": "Array of files (instances of File)", + "required": true + } + } + }, + "resetValidation": { + "desc": "Reset validation status" + }, + "validate": { + "desc": "Trigger a validation", + "params": { + "value": { + "type": "Any", + "desc": "Optional value to validate against" + } + }, + "returns": { + "type": [ + "Boolean", + "Promise" + ], + "desc": "True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "true", + "validate().then(outcome => { ... })" + ] + } + }, + "focus": { + "desc": "Focus component" + }, + "blur": { + "desc": "Blur component (lose focus)" + }, + "removeAtIndex": { + "desc": "Remove file located at specific index in the model", + "params": { + "index": { + "type": "Number", + "desc": "Index at which to remove selection", + "required": true, + "examples": [ + 0 + ] + } + } + }, + "removeFile": { + "desc": "Remove specified file from the model", + "params": { + "file": { + "type": "File", + "desc": "File to remove (instance of File)", + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QFooter.json b/dist/api/QFooter.json new file mode 100644 index 00000000000..a435a8df78b --- /dev/null +++ b/dist/api/QFooter.json @@ -0,0 +1,66 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/header-and-footer" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "value": { + "type": "Boolean", + "desc": "Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "default": true, + "examples": [ + "v-model=\"footerState\"" + ], + "category": "model" + }, + "reveal": { + "type": "Boolean", + "desc": "Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide footer", + "category": "behavior" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "elevated": { + "type": "Boolean", + "desc": "Adds a default shadow to the footer", + "category": "style" + }, + "height-hint": { + "type": [ + "Number", + "String " + ], + "desc": "When using SSR, you can optionally hint of the height (in pixels) of the QFooter", + "default": 50, + "examples": [ + "150" + ], + "category": "behavior", + "addedIn": "v1.1" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component; Suggestion: QToolbar" + } + }, + "events": { + "reveal": { + "desc": "Emitted when 'reveal' state gets changed", + "params": { + "value": { + "type": "Boolean", + "desc": "New 'reveal' state" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QForm.json b/dist/api/QForm.json new file mode 100644 index 00000000000..b06aa3faa99 --- /dev/null +++ b/dist/api/QForm.json @@ -0,0 +1,110 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/form" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "autofocus": { + "type": "Boolean", + "desc": "Focus first focusable element on initial component render", + "category": "behavior" + }, + "no-error-focus": { + "type": "Boolean", + "desc": "Do not try to focus on first component that has a validation error when submitting form", + "category": "behavior" + }, + "no-reset-focus": { + "type": "Boolean", + "desc": "Do not try to focus on first component when resetting form", + "category": "behavior" + }, + "greedy": { + "type": "Boolean", + "desc": "Validate all fields in form (by default it stops after finding the first invalid field with synchronous validation)", + "category": "behavior", + "addedIn": "v1.1.1" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "submit": { + "desc": "Emitted when all validations have passed when tethered to a submit button" + }, + "reset": { + "desc": "Emitted when all validations have been reset when tethered to a reset button; It is recommended to manually reset the wrapped components models in this handler" + }, + "validation-success": { + "desc": "Emitted after a validation was triggered and all inner Quasar components models are valid" + }, + "validation-error": { + "desc": "Emitted after a validation was triggered and at least one of the inner Quasar components models are NOT valid", + "params": { + "ref": { + "type": "Object", + "desc": "Vue reference to the first component that triggered the validation error" + } + }, + "addedIn": "v1.9.9" + } + }, + "methods": { + "focus": { + "desc": "Focus on first focusable element/component in the form" + }, + "validate": { + "desc": "Triggers a validation on all applicable inner Quasar components", + "params": { + "shouldFocus": { + "type": "Boolean", + "desc": "Tell if it should focus or not on component with error on submitting form; Overrides 'no-focus-error' prop if specified" + } + }, + "returns": { + "type": "Promise", + "desc": "Promise is always fulfilled and receives the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "validate().then(outcome => { ... })" + ] + } + }, + "resetValidation": { + "desc": "Resets the validation on all applicable inner Quasar components" + }, + "submit": { + "desc": "Manually trigger form validation and submit", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + }, + "reset": { + "desc": "Manually trigger form reset", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + }, + "getValidationComponents": { + "desc": "Get array of children vue components that support validation", + "returns": { + "type": "Array", + "desc": "Vue components that support Quasar validation API" + }, + "addedIn": "v1.10" + } + } +} \ No newline at end of file diff --git a/dist/api/QHeader.json b/dist/api/QHeader.json new file mode 100644 index 00000000000..afbfc4aa249 --- /dev/null +++ b/dist/api/QHeader.json @@ -0,0 +1,75 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/header-and-footer" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "value": { + "type": "Boolean", + "desc": "Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "default": true, + "examples": [ + "v-model=\"headerState\"" + ], + "category": "model" + }, + "reveal": { + "type": "Boolean", + "desc": "Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide header", + "category": "behavior" + }, + "reveal-offset": { + "type": "Number", + "desc": "Amount of scroll (in pixels) that should trigger a 'reveal' state change", + "default": 250, + "examples": [ + ":reveal-offset=\"500\"" + ], + "category": "behavior" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "elevated": { + "type": "Boolean", + "desc": "Adds a default shadow to the header", + "category": "style" + }, + "height-hint": { + "type": [ + "Number", + "String " + ], + "desc": "When using SSR, you can optionally hint of the height (in pixels) of the QHeader", + "default": 50, + "examples": [ + "150" + ], + "category": "behavior", + "addedIn": "v1.1" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component; Suggestion: QToolbar" + } + }, + "events": { + "reveal": { + "desc": "Emitted when 'reveal' state gets changed", + "params": { + "value": { + "type": "Boolean", + "desc": "New 'reveal' state" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QIcon.json b/dist/api/QIcon.json new file mode 100644 index 00000000000..d6360674ec1 --- /dev/null +++ b/dist/api/QIcon.json @@ -0,0 +1,70 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/icon" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "tag": { + "type": "String", + "desc": "HTML tag to render, unless no icon is supplied or it's an svg icon", + "default": "i", + "category": "content", + "examples": [ + "div", + "i" + ], + "addedIn": "v1.8.4" + }, + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "name": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "model" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "left": { + "type": "Boolean", + "desc": "Useful if icon is on the left side of something: applies a standard margin on the right side of Icon", + "category": "content" + }, + "right": { + "type": "Boolean", + "desc": "Useful if icon is on the right side of something: applies a standard margin on the left side of Icon", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Suggestions: QTooltip or QMenu" + } + } +} \ No newline at end of file diff --git a/dist/api/QImg.json b/dist/api/QImg.json new file mode 100644 index 00000000000..b89d9f28fdc --- /dev/null +++ b/dist/api/QImg.json @@ -0,0 +1,217 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/img" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "ratio": { + "type": [ + "String", + "Number", + "String", + "Number" + ], + "desc": "Force the component to maintain an aspect ratio", + "examples": [ + ":ratio=\"4/3\"", + ":ratio=\"16/9\"", + "ratio=\"1\"", + "(Number format) :ratio=\"16/9\"", + "(String format) ratio=\"1\"" + ], + "category": "content" + }, + "src": { + "type": "String", + "desc": "Path to image", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/something.png\"", + "(assets folder) src=\"~assets/my-img.gif\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "model" + }, + "srcset": { + "type": "String", + "desc": "Same syntax as srcset attribute.", + "link": "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images#Resolution_switching_Different_sizes", + "examples": [ + "elva-fairy-320w.jpg 320w, elva-fairy-480w.jpg 480w" + ], + "category": "model" + }, + "sizes": { + "type": "String", + "desc": "Same syntax as sizes attribute.", + "link": "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images#Resolution_switching_Different_sizes", + "examples": [ + "(max-width: 320px) 280px, (max-width: 480px) 440px, 800px" + ], + "category": "model" + }, + "width": { + "type": "String", + "desc": "Forces image width; Must also include the unit (px or %)", + "examples": [ + "280px", + "70%" + ], + "category": "model", + "addedIn": "v1.9" + }, + "height": { + "type": "String", + "desc": "Forces image height; Must also include the unit (px or %)", + "examples": [ + "280px", + "70%" + ], + "category": "model", + "addedIn": "v1.9" + }, + "alt": { + "type": "String", + "desc": "Specifies an alternate text for the image, if the image cannot be displayed", + "examples": [ + "Two cats" + ], + "category": "content" + }, + "placeholder-src": { + "type": "String", + "desc": "While waiting for your image to load, you can use a placeholder image", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/some-placeholder.png\"", + "(assets folder) src=\"~assets/my-placeholder.gif\"", + "(relative path format) :src=\"require('./placeholder.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "model" + }, + "basic": { + "type": "Boolean", + "desc": "Do not use transitions; faster render", + "category": "content" + }, + "contain": { + "type": "Boolean", + "desc": "Make sure that the image getting displayed is fully contained, regardless if additional blank space besides the image is needed on horizontal or vertical", + "category": "content" + }, + "position": { + "type": "String", + "desc": "Equivalent to CSS background-position property", + "default": "50% 50%", + "examples": [ + "0 0", + "20px 50px" + ], + "category": "content" + }, + "transition": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + }, + "img-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the container of image; Does not apply to the caption", + "examples": [ + "my-special-class", + ":img-class=\"{ 'my-special-class': }\"" + ], + "category": "style", + "addedIn": "v1.4" + }, + "img-style": { + "type": "Object", + "desc": "Apply CSS to the container of the image; Does not apply to the caption", + "examples": [ + ":img-style=\"{ transform: 'rotate(45deg)' }\" " + ], + "category": "style", + "addedIn": "v1.5.11" + }, + "spinner-color": { + "type": "String", + "desc": "Color name for default Spinner (unless using a 'loading' slot)", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "spinner-size": { + "type": "String", + "desc": "Size in CSS units, including unit name, for default Spinner (unless using a 'loading' slot)", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + }, + "no-default-spinner": { + "type": "Boolean", + "desc": "Do not display the default spinner when loading images (unless you are specifying one through the 'loading' slot)", + "category": "content", + "addedIn": "v1.1" + }, + "native-context-menu": { + "type": "Boolean", + "desc": "Enable the native context menu of the image", + "category": "behavior", + "addedIn": "v1.8.4" + } + }, + "slots": { + "default": { + "desc": "Default slot can be used for captions. See examples" + }, + "loading": { + "desc": "While image is loading, this slot is being displayed on top of the component; Suggestions: a spinner or text" + }, + "error": { + "desc": "Optional slot to be used when image could not be loaded; make sure you assign a min-height and min-width to the component through CSS" + } + }, + "events": { + "load": { + "desc": "Emitted when image has been loaded by the browser", + "params": { + "src": { + "type": "String", + "desc": "URL of image that has been loaded; useful when using 'srcset' and/or 'sizes'", + "examples": [ + "https://some-site.net/some-img.gif" + ] + } + } + }, + "error": { + "desc": "Emitted when browser could not load the image", + "params": { + "src": { + "type": "Error", + "desc": "JS Error object" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QInfiniteScroll.json b/dist/api/QInfiniteScroll.json new file mode 100644 index 00000000000..2339193e02f --- /dev/null +++ b/dist/api/QInfiniteScroll.json @@ -0,0 +1,129 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/infinite-scroll" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "offset": { + "type": "Number", + "desc": "Offset (pixels) to bottom of Infinite Scroll container from which the component should start loading more content in advance", + "default": 500, + "examples": [ + ":offset=\"250\"" + ], + "category": "behavior" + }, + "debounce": { + "type": [ + "String", + "Number" + ], + "desc": "Debounce amount (in milliseconds)", + "default": 100, + "examples": [ + "0", + "530" + ], + "category": "behavior", + "addedIn": "v1.1" + }, + "initial-index": { + "type": "Number", + "desc": "Initialize the pagination index (used for the @load event)", + "default": 0, + "examples": [ + 2, + 3 + ], + "category": "behavior", + "addedIn": "v1.13" + }, + "scroll-target": { + "type": [ + "Element", + "String" + ], + "desc": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one", + "examples": [ + ":scroll-target=\"$refs.scrollTarget\"", + "scroll-target=\".scroll-target-class\"", + "scroll-target=\"#scroll-target-id\"", + "scroll-target=\"body\"" + ], + "category": "behavior", + "addedIn": "v1.8" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "reverse": { + "type": "Boolean", + "desc": "Scroll area should behave like a messenger - starting scrolled to bottom and loading when reaching the top", + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + }, + "loading": { + "desc": "Slot displaying something while loading content; Example: QSpinner" + } + }, + "events": { + "load": { + "desc": "Emitted when Infinite Scroll needs to load more data", + "params": { + "index": { + "type": "Number", + "desc": "The index parameter can be used to make some sort of pagination on the content you load. It takes numeric values starting with 1 and incrementing with each call", + "examples": [ + 12 + ] + }, + "done": { + "type": "Function", + "desc": "Function to call when you made all necessary updates. DO NOT forget to call it otherwise your loading message will continue to be displayed", + "params": { + "stop": { + "type": "Boolean", + "desc": "Stops QInfiniteScroll if it's Boolean 'true'; Specify it in case there's nothing more to load" + } + }, + "returns": null + } + } + } + }, + "methods": { + "poll": { + "desc": "Checks scroll position and loads more content if necessary" + }, + "trigger": { + "desc": "Tells Infinite Scroll to load more content, regardless of the scroll position" + }, + "reset": { + "desc": "Resets calling index to 0" + }, + "stop": { + "desc": "Stops working, regardless of scroll position" + }, + "resume": { + "desc": "Starts working. Checks scroll position upon call and if trigger is hit, it loads more content" + }, + "setIndex": { + "desc": "Overwrite the current pagination index", + "addedIn": "v1.13" + }, + "updateScrollTarget": { + "desc": "Updates the scroll target; Useful when the parent elements change so that the scrolling target also changes" + } + } +} \ No newline at end of file diff --git a/dist/api/QInnerLoading.json b/dist/api/QInnerLoading.json new file mode 100644 index 00000000000..de529aafea4 --- /dev/null +++ b/dist/api/QInnerLoading.json @@ -0,0 +1,101 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/inner-loading" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name, or standard size name (xs|sm|md|lg|xl), for the inner Spinner (unless using the default slot)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style", + "default": "42px" + }, + "showing": { + "type": "Boolean", + "desc": "State - loading or not", + "category": "state" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette for the inner Spinner (unless using the default slot)", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "label": { + "type": "String", + "desc": "Add a label; Gets overriden when using the default slot", + "examples": [ + "Please wait..." + ], + "category": "label", + "addedIn": "v1.17" + }, + "label-class": { + "type": "String", + "desc": "Add CSS class(es) to the label; Works along the 'label' prop only", + "examples": [ + "text-red q-mt-xl" + ], + "category": "label", + "addedIn": "v1.17" + }, + "label-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Apply custom style to the label; Works along the 'label' prop only", + "examples": [ + "font-size: 28px", + ":label-style=\"{ color: '#ff0000' }\"" + ], + "category": "label", + "addedIn": "v1.17" + }, + "transition-show": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + }, + "transition-hide": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot is used for replacing default Spinner; Suggestions: a spinner or text" + } + } +} \ No newline at end of file diff --git a/dist/api/QInput.json b/dist/api/QInput.json new file mode 100644 index 00000000000..d9585a218ea --- /dev/null +++ b/dist/api/QInput.json @@ -0,0 +1,591 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/input" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated to the inner native input element (you don't need the '.native' modifier)" + } + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists", + "examples": [ + "car_id", + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "mask": { + "type": "String", + "desc": "Custom mask or one of the predefined mask names", + "examples": [ + "###-##", + "date", + "datetime", + "time", + "fulltime", + "phone", + "card" + ], + "category": "behavior" + }, + "fill-mask": { + "type": [ + "Boolean", + "String" + ], + "desc": "Fills string with specified characters (or underscore if value is not string) to fill mask's length", + "examples": [ + "true", + "'0'", + "'_'" + ], + "category": "behavior" + }, + "reverse-fill-mask": { + "type": "Boolean", + "desc": "Fills string from the right side of the mask", + "category": "behavior" + }, + "unmasked-value": { + "type": "Boolean", + "desc": "Model will be unmasked (won't contain tokens/separation characters)", + "category": "behavior" + }, + "error": { + "type": "Boolean", + "desc": "Does field have validation errors?", + "category": "behavior" + }, + "error-message": { + "type": "String", + "desc": "Validation error message (gets displayed only if 'error' is set to 'true')", + "examples": [ + "Username must have at least 5 characters" + ], + "category": "content" + }, + "no-error-icon": { + "type": "Boolean", + "desc": "Hide error icon when there is an error", + "category": "content" + }, + "rules": { + "type": "Array", + "desc": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules", + "examples": [ + ":rules=\"[ val => val.length <= 3 || 'Please use maximum 3 characters' ]\"", + ":rules=\"[ 'fulltime' ]\"", + ":rules=\"[ (val, rules) => rules.email(val) || 'Please enter a valid email address' ]\"" + ], + "category": "behavior" + }, + "reactive-rules": { + "type": "Boolean", + "desc": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it", + "category": "behavior", + "addedIn": "v1.11" + }, + "lazy-rules": { + "type": [ + "Boolean", + "String" + ], + "desc": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself", + "values": [ + "(Boolean) true", + "(Boolean) false", + "ondemand" + ], + "category": "behavior" + }, + "label": { + "type": "String", + "desc": "A text label that will “float” up above the input field, once the field gets focus", + "examples": [ + "Username" + ], + "category": "content" + }, + "stack-label": { + "type": "Boolean", + "desc": "Label will be always shown above the field regardless of field content (if any)", + "category": "content" + }, + "hint": { + "type": "String", + "desc": "Helper (hint) text which gets placed below your wrapped form component", + "examples": [ + "Fill in between 3 and 12 characters" + ], + "category": "content" + }, + "hide-hint": { + "type": "Boolean", + "desc": "Hide the helper (hint) text when field doesn't have focus", + "category": "content" + }, + "prefix": { + "type": "String", + "desc": "Prefix", + "examples": [ + "$" + ], + "category": "content" + }, + "suffix": { + "type": "String", + "desc": "Suffix", + "examples": [ + "@gmail.com" + ], + "category": "content" + }, + "label-color": { + "type": "String", + "desc": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.7" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "bg-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "loading": { + "type": "Boolean", + "desc": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.", + "category": "behavior|content" + }, + "clearable": { + "type": "Boolean", + "desc": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null", + "category": "behavior|content" + }, + "clear-icon": { + "type": "String", + "desc": "Custom icon to use for the clear button when using along with 'clearable' prop", + "examples": [ + "close" + ], + "category": "content" + }, + "filled": { + "type": "Boolean", + "desc": "Use 'filled' design for the field", + "category": "style" + }, + "outlined": { + "type": "Boolean", + "desc": "Use 'outlined' design for the field", + "category": "style" + }, + "outlined-md": { + "type": "Boolean", + "desc": "Use Material Design 'outlined' design for the field", + "category": "style", + "addedIn": "v1.17.8" + }, + "borderless": { + "type": "Boolean", + "desc": "Use 'borderless' design for the field", + "category": "style" + }, + "standout": { + "type": [ + "Boolean", + "String" + ], + "desc": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)", + "examples": [ + "standout", + "standout=\"bg-primary text-white\"" + ], + "category": "style" + }, + "label-slot": { + "type": "Boolean", + "desc": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set", + "category": "content", + "addedIn": "v1.12.9" + }, + "bottom-slots": { + "type": "Boolean", + "desc": "Enables bottom slots ('error', 'hint', 'counter')", + "category": "content" + }, + "hide-bottom-space": { + "type": "Boolean", + "desc": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content", + "category": "style" + }, + "counter": { + "type": "Boolean", + "desc": "Show an automatic counter on bottom right", + "category": "content" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "item-aligned": { + "type": "Boolean", + "desc": "Match inner content alignment to that of QItem", + "category": "style" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "autofocus": { + "type": "Boolean", + "desc": "Focus field on initial component render", + "category": "behavior" + }, + "for": { + "type": "String", + "desc": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well", + "examples": [ + "myFieldsId" + ], + "category": "behavior", + "addedIn": "v1.4.2" + }, + "value": { + "type": [ + "String", + "Number" + ], + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "required": true, + "examples": [ + "v-model=\"myText\"" + ], + "category": "model" + }, + "shadow-text": { + "type": "String", + "desc": "Text to be displayed as shadow at the end of the text in the control; Does NOT applies to type=file", + "examples": [ + "rest of the fill value" + ], + "category": "content", + "addedIn": "v1.10" + }, + "type": { + "type": "String", + "desc": "Input type", + "default": "text", + "values": [ + "text", + "password", + "textarea", + "email", + "search", + "tel", + "file", + "number", + "url", + "time", + "date" + ], + "examples": [ + "password" + ], + "category": "general" + }, + "debounce": { + "type": [ + "String", + "Number" + ], + "desc": "Debounce amount (in milliseconds) when updating model", + "examples": [ + "0", + "530" + ], + "category": "model" + }, + "maxlength": { + "type": [ + "String", + "Number" + ], + "desc": "Specify a max length of model", + "examples": [ + "12" + ], + "category": "model" + }, + "autogrow": { + "type": "Boolean", + "desc": "Make field autogrow along with its content (uses a textarea)", + "category": "content" + }, + "input-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the underlying input tag", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "input-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the underlying input tag", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Field main content" + }, + "prepend": { + "desc": "Prepend inner field; Suggestions: QIcon, QBtn" + }, + "append": { + "desc": "Append to inner field; Suggestions: QIcon, QBtn" + }, + "before": { + "desc": "Prepend outer field; Suggestions: QIcon, QBtn" + }, + "after": { + "desc": "Append outer field; Suggestions: QIcon, QBtn" + }, + "label": { + "desc": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored", + "addedIn": "v1.12.9" + }, + "counter": { + "desc": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion:
" + }, + "loading": { + "desc": "Override default spinner when component is in loading mode; Use in conjunction with 'loading' prop" + } + }, + "scopedSlots": { + "error": { + "desc": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ + "The field is required" + ] + } + }, + "addedIn": "v1.17" + }, + "hint": { + "desc": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ + "The field is required" + ] + } + }, + "addedIn": "v1.17" + } + }, + "events": { + "clear": { + "desc": "When using the 'clearable' property, this event is emitted when the clear icon is clicked", + "addedIn": "v1.1.5", + "params": { + "value": { + "type": [ + "Any" + ], + "desc": "The previous value before clearing it" + } + } + }, + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": [ + "String", + "Number" + ], + "desc": "New model value", + "required": true + } + } + }, + "focus": { + "desc": "Emitted when component gets focused", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + }, + "blur": { + "desc": "Emitted when component loses focus", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + } + }, + "methods": { + "resetValidation": { + "desc": "Reset validation status" + }, + "validate": { + "desc": "Trigger a validation", + "params": { + "value": { + "type": "Any", + "desc": "Optional value to validate against" + } + }, + "returns": { + "type": [ + "Boolean", + "Promise" + ], + "desc": "True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "true", + "validate().then(outcome => { ... })" + ] + } + }, + "focus": { + "desc": "Focus underlying input tag" + }, + "blur": { + "desc": "Lose focus on underlying input tag" + }, + "select": { + "desc": "Select input text" + }, + "getNativeElement": { + "desc": "Get the native input/textarea DOM Element", + "returns": { + "type": "Object", + "desc": "The underlying native input/textarea DOM Element" + }, + "addedIn": "v1.15.15" + } + } +} \ No newline at end of file diff --git a/dist/api/QIntersection.json b/dist/api/QIntersection.json new file mode 100644 index 00000000000..44d54a091ac --- /dev/null +++ b/dist/api/QIntersection.json @@ -0,0 +1,98 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/intersection" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "addedIn": "v1.4", + "props": { + "tag": { + "type": "String", + "desc": "HTML tag to render", + "default": "div", + "category": "content", + "examples": [ + "div", + "span", + "blockquote" + ], + "addedIn": "v1.9.3" + }, + "once": { + "type": "Boolean", + "desc": "Get triggered only once", + "category": "behavior" + }, + "ssr-prerender": { + "type": "Boolean", + "desc": "Pre-render content on server side if using SSR (use it to pre-render above the fold content)", + "category": "behavior", + "addedIn": "v1.9.5" + }, + "root": { + "type": "Element", + "desc": "[Intersection API root prop] Lets you define an alternative to the viewport as your root (through its DOM element); It is important to keep in mind that root needs to be an ancestor of the observed element", + "examples": [ + "$refs.myTable.$el", + "getElementById(\"myTable\")" + ], + "category": "behavior", + "addedIn": "v1.14.2" + }, + "margin": { + "type": "String", + "desc": "[Intersection API rootMargin prop] Allows you to specify the margins for the root, effectively allowing you to either grow or shrink the area used for intersections", + "examples": [ + "-20px 0px", + "10px 20px 30px 40px" + ], + "category": "behavior" + }, + "threshold": { + "type": [ + "Array", + "Number" + ], + "desc": "[Intersection API threshold prop] Threshold(s) at which to trigger, specified as a ratio, or list of ratios, of (visible area / total area) of the observed element", + "examples": [ + "[ 0, 0.25, 0.5, 0.75, 1 ]", + ":threshold=\"1\"" + ], + "category": "behavior" + }, + "transition": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior" + }, + "disable": { + "type": "Boolean", + "desc": "Disable visibility observable (content will remain as it was, visible or hidden)", + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "visibility": { + "desc": "Fires when visibility changes", + "params": { + "isVisible": { + "type": "Boolean", + "desc": "Visibility status (true/false)" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QItem.json b/dist/api/QItem.json new file mode 100644 index 00000000000..2ad89d9bb44 --- /dev/null +++ b/dist/api/QItem.json @@ -0,0 +1,201 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "tag": { + "type": "String", + "desc": "HTML tag to render; Suggestion: use 'label' when encapsulating a QCheckbox/QRadio/QToggle so that when user clicks/taps on the whole item it will trigger a model change for the mentioned components", + "default": "div", + "category": "content", + "examples": [ + "a", + "label", + "div" + ] + }, + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "navigation" + }, + "exact": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + "active-class": { + "type": "String", + "desc": "Equivalent to Vue Router 'active-class' property", + "examples": [ + "my-active-class" + ], + "category": "navigation" + }, + "exact-active-class": { + "type": "String", + "desc": "Equivalent to Vue Router 'active-class' property", + "examples": [ + "my-exact-active-class" + ], + "category": "navigation" + }, + "href": { + "type": "String", + "desc": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ + "http://quasar.dev" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "target": { + "type": "String", + "desc": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ + "_blank", + "_self", + "_parent", + "_top" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "active": { + "type": "Boolean", + "desc": "Put item into 'active' state", + "category": "state" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "clickable": { + "type": "Boolean", + "desc": "Is QItem clickable? If it's the case, then it will add hover effects and emit 'click' events", + "category": "state" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "inset-level": { + "type": "Number", + "desc": "Apply an inset; Useful when avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu", + "examples": [ + ":inset-level=\"1\"" + ], + "category": "content" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "manual-focus": { + "type": "Boolean", + "desc": "Put item into a manual focus state; Enables 'focused' prop which will determine if item is focused or not, rather than relying on native hover/focus states", + "category": "state" + }, + "focused": { + "type": "Boolean", + "desc": "Determines focus state, ONLY if 'manual-focus' is enabled / set to true", + "category": "state" + } + }, + "slots": { + "default": { + "desc": "This is where QItem's content goes" + } + }, + "events": { + "click": { + "desc": "Emitted when the component is clicked", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "required": true + }, + "navigateFn": { + "type": "Function", + "desc": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "addedIn": "v1.21", + "params": { + "opts": { + "type": "Object", + "desc": "Optional options", + "definition": { + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ] + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property", + "default": "Tab's 'append' property" + }, + "returnRouterError": { + "type": "Boolean", + "desc": "Return the router error, if any; Otherwise the returned Promise will always fulfill" + } + } + } + }, + "returns": { + "type": "Promise", + "desc": "Returns the router's navigation promise" + } + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QItemLabel.json b/dist/api/QItemLabel.json new file mode 100644 index 00000000000..647d761964d --- /dev/null +++ b/dist/api/QItemLabel.json @@ -0,0 +1,46 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "overline": { + "type": "Boolean", + "desc": "Renders an overline label", + "category": "content" + }, + "caption": { + "type": "Boolean", + "desc": "Renders a caption label", + "category": "content" + }, + "header": { + "type": "Boolean", + "desc": "Renders a header label", + "category": "content" + }, + "lines": { + "type": [ + "Number", + "String" + ], + "desc": "Apply ellipsis when there's not enough space to render on the specified number of lines;", + "examples": [ + "1", + "3", + ":lines=\"2\"" + ], + "category": "content|behavior" + } + }, + "slots": { + "default": { + "desc": "The content of the label; Suggestion: text" + } + } +} \ No newline at end of file diff --git a/dist/api/QItemSection.json b/dist/api/QItemSection.json new file mode 100644 index 00000000000..f8969426354 --- /dev/null +++ b/dist/api/QItemSection.json @@ -0,0 +1,43 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "avatar": { + "type": "Boolean", + "desc": "Render an avatar item side (does not needs 'side' prop to be set)", + "category": "content" + }, + "thumbnail": { + "type": "Boolean", + "desc": "Render a thumbnail item side (does not needs 'side' prop to be set)", + "category": "content" + }, + "side": { + "type": "Boolean", + "desc": "Renders as a side of the item", + "category": "content" + }, + "top": { + "type": "Boolean", + "desc": "Align content to top (useful for multi-line items)", + "category": "content" + }, + "no-wrap": { + "type": "Boolean", + "desc": "Do not wrap text (useful for item's main content)", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Section's actual content" + } + } +} \ No newline at end of file diff --git a/dist/api/QKnob.json b/dist/api/QKnob.json new file mode 100644 index 00000000000..d49f011145d --- /dev/null +++ b/dist/api/QKnob.json @@ -0,0 +1,220 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/knob" + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "value": { + "type": "Number", + "desc": "Any number to indicate the given value of the knob. Either use this property (along with a listener for 'input' event) OR use the v-model directive", + "examples": [ + "v-model=\"myValue\"" + ], + "category": "model" + }, + "min": { + "type": "Number", + "desc": "The minimum value that the model (the knob value) should start at", + "examples": [ + "20", + "5" + ], + "category": "model" + }, + "max": { + "type": "Number", + "desc": "The maximum value that the model (the knob value) should go to", + "examples": [ + "100", + "50" + ], + "category": "model" + }, + "inner-min": { + "type": "Number", + "desc": "Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop", + "examples": [ + ":inner-min=\"0\"" + ], + "category": "model", + "addedIn": "v1.18.4" + }, + "inner-max": { + "type": "Number", + "desc": "Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop", + "examples": [ + ":inner-max=\"100\"" + ], + "category": "model", + "addedIn": "v1.18.4" + }, + "step": { + "type": "Number", + "default": "1", + "desc": "A number representing steps in the value of the model, while adjusting the knob", + "examples": [ + "1", + "5" + ], + "category": "model" + }, + "reverse": { + "type": "Boolean", + "desc": "Reverses the direction of progress", + "category": "behavior" + }, + "instant-feedback": { + "type": "Boolean", + "desc": "No animation when model changes", + "category": "behavior", + "addedIn": "v1.11" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "center-color": { + "type": "String", + "desc": "Color name for the center part of the component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "track-color": { + "type": "String", + "desc": "Color name for the track of the component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "font-size": { + "type": "String", + "desc": "Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size", + "default": "0.25em", + "examples": [ + "1em", + "16px", + "2rem" + ], + "category": "style" + }, + "thickness": { + "type": "Number", + "default": 0.2, + "desc": "Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size", + "examples": [ + 1, + 0.3 + ], + "category": "style" + }, + "angle": { + "type": "Number", + "desc": "Angle to rotate progress arc by", + "default": 0, + "examples": [ + 0, + 40, + 90 + ], + "category": "content" + }, + "show-value": { + "type": "Boolean", + "desc": "Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component", + "category": "content|behavior" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Number", + "desc": "New model value", + "required": true + } + } + }, + "change": { + "desc": "Fires at the end of a knob's adjustment and offers the value of the model", + "params": { + "value": { + "type": "Number", + "desc": "New model value", + "examples": [ + 12 + ] + } + } + }, + "drag-value": { + "desc": "The value of the model while dragging is still in progress", + "params": { + "value": { + "type": "Number", + "desc": "New model value", + "examples": [ + 12 + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QLayout.json b/dist/api/QLayout.json new file mode 100644 index 00000000000..689a4985e88 --- /dev/null +++ b/dist/api/QLayout.json @@ -0,0 +1,117 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/layout" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "view": { + "type": "String", + "desc": "Defines how your layout components (header/footer/drawer) should be placed on screen; See docs examples", + "default": "hhh lpr fff", + "examples": [ + "hHh lpR fFf" + ], + "category": "content" + }, + "container": { + "type": "Boolean", + "desc": "Containerize the layout which means it changes the default behavior of expanding to the whole window; Useful (but not limited to) for when using on a QDialog", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Suggestion: QHeader, QFooter, QDrawer, QPageContainer" + } + }, + "events": { + "resize": { + "desc": "Emitted when layout size (height, width) changes", + "params": { + "size": { + "type": "Object", + "desc": "New size", + "definition": { + "height": { + "type": "Number", + "desc": "Layout height", + "examples": [ + 575 + ] + }, + "width": { + "type": "Number", + "desc": "Layout height", + "examples": [ + 575 + ] + } + } + } + } + }, + "scroll": { + "desc": "Emitted when user scrolls within layout", + "params": { + "details": { + "type": "Object", + "desc": "Scroll details", + "definition": { + "position": { + "type": "Number", + "desc": "Scroll offset (from top)", + "examples": [ + 575 + ] + }, + "direction": { + "type": "String", + "desc": "Direction of scroll", + "values": [ + "up", + "down" + ] + }, + "directionChanged": { + "type": "Boolean", + "desc": "Has scroll direction changed since event was last emitted?" + }, + "inflectionPoint": { + "type": "Number", + "desc": "Last scroll offset where scroll direction has changed", + "examples": [ + 575 + ], + "addedIn": "v1.16.0" + }, + "delta": { + "type": "Number", + "desc": "Delta distance since event was last emitted", + "examples": [ + 120 + ], + "addedIn": "v1.16.0" + } + } + } + } + }, + "scroll-height": { + "desc": "Emitted when the scroll size of layout changes", + "params": { + "height": { + "type": "Number", + "desc": "New scroll height of layout", + "examples": [ + 1442 + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QLinearProgress.json b/dist/api/QLinearProgress.json new file mode 100644 index 00000000000..02ada04dc64 --- /dev/null +++ b/dist/api/QLinearProgress.json @@ -0,0 +1,100 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/linear-progress" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "value": { + "type": "Number", + "desc": "Progress value (0.0 < x < 1.0)", + "default": 0, + "examples": [ + ":value=\"0.28\"" + ], + "category": "model" + }, + "buffer": { + "type": "Number", + "desc": "Optional buffer value (0.0 < x < 1.0)", + "examples": [ + ":buffer=\"0.78\"" + ], + "category": "behavior" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "track-color": { + "type": "String", + "desc": "Color name for component's track from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "reverse": { + "type": "Boolean", + "desc": "Reverse direction of progress", + "category": "behavior" + }, + "stripe": { + "type": "Boolean", + "desc": "Draw stripes; For determinate state only (for performance reasons)", + "category": "content" + }, + "indeterminate": { + "type": "Boolean", + "desc": "Put component into indeterminate mode", + "category": "behavior" + }, + "query": { + "type": "Boolean", + "desc": "Put component into query mode", + "category": "behavior" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style" + }, + "instant-feedback": { + "type": "Boolean", + "desc": "No transition when model changes", + "category": "behavior", + "addedIn": "v1.11.2" + } + }, + "slots": { + "default": { + "desc": "Suggestion: QTooltip" + } + } +} \ No newline at end of file diff --git a/dist/api/QList.json b/dist/api/QList.json new file mode 100644 index 00000000000..54bde4217c9 --- /dev/null +++ b/dist/api/QList.json @@ -0,0 +1,43 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "separator": { + "type": "Boolean", + "desc": "Applies a separator between contained items", + "category": "content" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "padding": { + "type": "Boolean", + "desc": "Applies a material design-like padding on top and bottom", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "This is where the content goes; Suggestion: QItem, QExpansionItem, ..." + } + } +} \ No newline at end of file diff --git a/dist/api/QMarkupTable.json b/dist/api/QMarkupTable.json new file mode 100644 index 00000000000..3a06ab2eb19 --- /dev/null +++ b/dist/api/QMarkupTable.json @@ -0,0 +1,63 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/markup-table" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + "separator": { + "type": "String", + "desc": "Use a separator/border between rows, columns or all cells", + "default": "horizontal", + "values": [ + "horizontal", + "vertical", + "cell", + "none" + ], + "examples": [ + "cell" + ], + "category": "content" + }, + "wrap-cells": { + "type": "Boolean", + "desc": "Wrap text within table cells", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QMenu.json b/dist/api/QMenu.json new file mode 100644 index 00000000000..5b31b070cea --- /dev/null +++ b/dist/api/QMenu.json @@ -0,0 +1,376 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/menu" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "target": { + "type": [ + "Boolean", + "String", + "Element" + ], + "desc": "Configure a target element to trigger component toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) or a DOM element it attaches the events to the specified DOM element (if it exists)", + "default": true, + "values": [ + "(Boolean) true", + "(Boolean) false", + "(CSS selector)", + "(DOM Element)" + ], + "examples": [ + ":target=\"false\"", + ":target=\"$refs.target\"", + "target=\".my-parent\"", + "target=\"#target-id\"" + ], + "category": "behavior" + }, + "no-parent-event": { + "type": "Boolean", + "desc": "Skips attaching events to the target DOM element (that trigger the element to get shown)", + "category": "behavior" + }, + "context-menu": { + "type": "Boolean", + "desc": "Allows the component to behave like a context menu, which opens with a right mouse click (or long tap on mobile)", + "category": "behavior" + }, + "content-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the content", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "content-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the content", + "examples": [ + "background-color: #ff0000", + ":content-style=\"{ color: '#ff0000' }\"" + ], + "category": "style" + }, + "value": { + "type": "Boolean", + "desc": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.3" + }, + "fit": { + "type": "Boolean", + "desc": "Allows the menu to match at least the full width of its target", + "category": "position" + }, + "cover": { + "type": "Boolean", + "desc": "Allows the menu to cover its target. When used, the 'self' and 'fit' props are no longer effective", + "category": "position" + }, + "anchor": { + "type": "String", + "desc": "Two values setting the starting position or anchor point of the menu relative to its target", + "values": [ + "top left", + "top middle", + "top right", + "top start", + "top end", + "center left", + "center middle", + "center right", + "center start", + "center end", + "bottom left", + "bottom middle", + "bottom right", + "bottom start", + "bottom end" + ], + "examples": [ + "top left", + "bottom right" + ], + "category": "position" + }, + "self": { + "type": "String", + "desc": "Two values setting the menu's own position relative to its target", + "values": [ + "top left", + "top middle", + "top right", + "top start", + "top end", + "center left", + "center middle", + "center right", + "center start", + "center end", + "bottom left", + "bottom middle", + "bottom right", + "bottom start", + "bottom end" + ], + "examples": [ + "top left", + "bottom right" + ], + "category": "position" + }, + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the menu horizontally and vertically in pixels", + "examples": [ + "[8, 8]", + "[5, 10]" + ], + "category": "position" + }, + "scroll-target": { + "type": [ + "Element", + "String" + ], + "desc": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one", + "examples": [ + ":scroll-target=\"$refs.scrollTarget\"", + "scroll-target=\".scroll-target-class\"", + "scroll-target=\"#scroll-target-id\"", + "scroll-target=\"body\"" + ], + "category": "behavior", + "addedIn": "v1.8" + }, + "touch-position": { + "type": "Boolean", + "desc": "Allows for the target position to be set by the mouse position, when the target of the menu is either clicked or touched", + "category": "behavior" + }, + "persistent": { + "type": "Boolean", + "desc": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key", + "category": "behavior" + }, + "no-route-dismiss": { + "type": "Boolean", + "desc": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set", + "category": "behavior", + "addedIn": "v1.13" + }, + "auto-close": { + "type": "Boolean", + "desc": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap", + "category": "behavior" + }, + "separate-close-popup": { + "type": "Boolean", + "desc": "Separate from parent menu, marking it as a separate closing point for v-close-popup (without this, chained menus close all together)", + "category": "behavior", + "addedIn": "v1.1" + }, + "square": { + "type": "Boolean", + "desc": "Forces content to have squared borders", + "category": "style" + }, + "no-refocus": { + "type": "Boolean", + "desc": "(Accessibility) When Menu gets hidden, do not refocus on the DOM element that previously had focus", + "category": "behavior" + }, + "no-focus": { + "type": "Boolean", + "desc": "(Accessibility) When Menu gets shown, do not switch focus on it", + "category": "behavior" + }, + "min-height": { + "type": "String", + "desc": "The minimum height of the menu; Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.15.5" + }, + "min-width": { + "type": "String", + "desc": "The minimum width of the menu; Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.15.5" + }, + "max-height": { + "type": "String", + "desc": "The maximum height of the menu; Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + }, + "max-width": { + "type": "String", + "desc": "The maximum width of the menu; Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + }, + "transition-show": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + }, + "transition-hide": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "input": { + "desc": "Emitted when showing/hidden state changes; Is also used by v-model", + "params": { + "value": { + "type": "Boolean", + "desc": "New state (showing/hidden)" + } + } + }, + "show": { + "desc": "Emitted after component has triggered show()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-show": { + "desc": "Emitted when component triggers show() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "hide": { + "desc": "Emitted after component has triggered hide()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-hide": { + "desc": "Emitted when component triggers hide() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "escape-key": { + "desc": "Emitted when ESC key is pressed; Does not get emitted if Menu is 'persistent'" + } + }, + "methods": { + "show": { + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "hide": { + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "toggle": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "desc": "Triggers component to toggle between show/hide" + }, + "updatePosition": { + "desc": "There are some custom scenarios for which Quasar cannot automatically reposition the menu without significant performance drawbacks so the optimal solution is for you to call this method when you need it" + }, + "focus": { + "desc": "Focus menu; if you have content with autofocus attribute, it will directly focus it", + "params": { + "selector": { + "type": "String", + "required": false, + "desc": "Optional CSS selector to override default focusable element - use '' to focus first focusable element instead of the one with autofocus", + "examples": [ + "[tabindex]:not([tabindex=\"-1\"])" + ], + "addedIn": "v1.18.9" + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QNoSsr.json b/dist/api/QNoSsr.json new file mode 100644 index 00000000000..b637867dfe5 --- /dev/null +++ b/dist/api/QNoSsr.json @@ -0,0 +1,40 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/no-ssr" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "tag": { + "type": "String", + "desc": "HTML tag to render", + "default": "div", + "category": "content", + "examples": [ + "div", + "span", + "blockquote" + ] + }, + "placeholder": { + "type": "String", + "desc": "Text to display on server-side render (unless using 'placeholder' slot)", + "examples": [ + "This is server-side only" + ], + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Default slot is used to render content on client-side" + }, + "placeholder": { + "desc": "Slot used as placeholder on server-side render, which gets replaced by the default slot on client-side; overrides 'placeholder' prop" + } + } +} \ No newline at end of file diff --git a/dist/api/QOptionGroup.json b/dist/api/QOptionGroup.json new file mode 100644 index 00000000000..e54047d9ca0 --- /dev/null +++ b/dist/api/QOptionGroup.json @@ -0,0 +1,172 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/option-group" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style", + "addedIn": "v1.8" + }, + "value": { + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model", + "type": "Any", + "examples": [ + "v-model=\"group\"" + ] + }, + "options": { + "type": "Array", + "desc": "Array of objects with value, label, and disable (optional) props. The binary components will be created according to this array; Props from QToggle, QCheckbox or QRadio can also be added as key/value pairs to control the components singularly", + "definition": { + "label": { + "type": "String", + "desc": "Label to display along the component", + "required": true, + "examples": [ + "Option 1", + "Option 2", + "Option 3" + ] + }, + "value": { + "type": "Any", + "desc": "Value of the option that will be used by the component model", + "required": true, + "examples": [ + "op1", + "op2", + "op3" + ] + }, + "disable": { + "type": "Boolean", + "desc": "If true, the option will be disabled" + }, + "...props": { + "type": "Any", + "desc": "Any other props from QToggle, QCheckbox, or QRadio", + "examples": [ + "val=\"car\"", + ":true-value=\"trueValue\"", + "checked-icon=\"visibility\"" + ] + } + }, + "examples": [ + ":options=\"[ { label: 'Option 1', value: 'op1' }, { label: 'Option 2', value: 'op2' }, { label: 'Option 3', value: 'op3', disable: true } ]\"" + ], + "category": "model" + }, + "name": { + "type": "String", + "desc": "Used to specify the name of the controls; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "type": { + "type": "String", + "desc": "The type of input component to be used", + "values": [ + "radio", + "checkbox", + "toggle" + ], + "default": "radio", + "examples": [ + "checkbox" + ], + "category": "content" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "keep-color": { + "type": "Boolean", + "desc": "Should the color (if specified any) be kept when input components are unticked?", + "category": "behavior" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "left-label": { + "type": "Boolean", + "desc": "Label (if any specified) should be displayed on the left side of the input components", + "category": "content" + }, + "inline": { + "type": "Boolean", + "desc": "Show input components as inline-block rather than each having their own row", + "category": "content" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + } + }, + "scopedSlots": { + "label": { + "desc": "Generic slot for all labels", + "scope": { + "opt": { + "type": "Object", + "desc": "The corresponding option entry from the 'options' prop" + } + }, + "addedIn": "v1.17" + }, + "label-[name]": { + "desc": "Slot to define the specific label for the option at '[name]' where name is a 0-based index; Overrides the generic 'label' slot if used", + "scope": { + "opt": { + "type": "Object", + "desc": "The corresponding option entry from the 'options' prop" + } + }, + "addedIn": "v1.17" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QPage.json b/dist/api/QPage.json new file mode 100644 index 00000000000..f198c30e552 --- /dev/null +++ b/dist/api/QPage.json @@ -0,0 +1,53 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/page" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "padding": { + "type": "Boolean", + "desc": "Applies a default responsive page padding", + "category": "content" + }, + "style-fn": { + "type": "Function", + "desc": "Override default CSS style applied to the component (sets minHeight); Function(offset: Number) => CSS props/value: Object; For best performance, reference it from your scope and do not define it inline", + "params": { + "offset": { + "type": "Number", + "desc": "Header + Footer height (in pixels)", + "examples": [ + 152 + ] + }, + "height": { + "type": "Number", + "desc": "Value in pixels of container height (if containerized) or window height otherwise", + "examples": [ + 1200 + ], + "addedIn": "v1.7.4" + } + }, + "returns": { + "type": "Object", + "desc": "Object with CSS properties to apply to Page DOM element" + }, + "default": "(see source code)", + "examples": [ + "(see source code)" + ], + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QPageContainer.json b/dist/api/QPageContainer.json new file mode 100644 index 00000000000..567955200cb --- /dev/null +++ b/dist/api/QPageContainer.json @@ -0,0 +1,16 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/page" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "slots": { + "default": { + "desc": "Encapsulates a QPage (either directly or through )" + } + } +} \ No newline at end of file diff --git a/dist/api/QPageScroller.json b/dist/api/QPageScroller.json new file mode 100644 index 00000000000..b2e1060be98 --- /dev/null +++ b/dist/api/QPageScroller.json @@ -0,0 +1,79 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/page-scroller" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "position": { + "type": "String", + "desc": "Page side/corner to stick to", + "default": "bottom-right", + "values": [ + "top-right", + "top-left", + "bottom-right", + "bottom-left", + "top", + "right", + "bottom", + "left" + ], + "examples": [ + "top-right" + ], + "category": "position" + }, + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the component horizontally and vertically in pixels", + "examples": [ + "[8, 8]", + "[5, 10]" + ], + "category": "content", + "default": [ + 18, + 18 + ] + }, + "expand": { + "type": "Boolean", + "desc": "By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop", + "category": "content" + }, + "scroll-offset": { + "type": "Number", + "desc": "Scroll offset (in pixels) from which point the component is shown on page; Measured from the top of the page (or from the bottom if in 'reverse' mode)", + "default": 1000, + "examples": [ + 550 + ], + "category": "behavior" + }, + "reverse": { + "type": "Boolean", + "desc": "Work in reverse (shows when scrolling to the top of the page and scrolls to bottom when triggered)", + "category": "behavior", + "addedIn": "v1.9" + }, + "duration": { + "type": "Number", + "desc": "Duration (in milliseconds) of the scrolling until it reaches its target", + "default": 300, + "examples": [ + 500 + ], + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QPageSticky.json b/dist/api/QPageSticky.json new file mode 100644 index 00000000000..04aef84363e --- /dev/null +++ b/dist/api/QPageSticky.json @@ -0,0 +1,51 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/page-sticky" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "position": { + "type": "String", + "desc": "Page side/corner to stick to", + "default": "bottom-right", + "values": [ + "top-right", + "top-left", + "bottom-right", + "bottom-left", + "top", + "right", + "bottom", + "left" + ], + "examples": [ + "top-right" + ], + "category": "position" + }, + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the component horizontally and vertically in pixels", + "examples": [ + "[8, 8]", + "[5, 10]" + ], + "category": "position" + }, + "expand": { + "type": "Boolean", + "desc": "By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QPagination.json b/dist/api/QPagination.json new file mode 100644 index 00000000000..cbd708358c6 --- /dev/null +++ b/dist/api/QPagination.json @@ -0,0 +1,377 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/pagination" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "value": { + "type": "Number", + "desc": "Current page (must be between min/max)", + "required": true, + "examples": [ + 3 + ], + "category": "model" + }, + "min": { + "type": [ + "Number", + "String" + ], + "desc": "Minimum page (must be lower than 'max')", + "default": 1, + "examples": [ + 3 + ], + "category": "model" + }, + "max": { + "type": [ + "Number", + "String" + ], + "desc": "Number of last page (must be higher than 'min')", + "default": 100, + "required": true, + "examples": [ + 10 + ], + "category": "model" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color (useful when you are using it along with the 'input' prop)", + "category": "style", + "addedIn": "v1.4.2" + }, + "size": { + "type": "String", + "desc": "Button size in CSS units, including unit name", + "examples": [ + "20px" + ], + "category": "style" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "input": { + "type": "Boolean", + "desc": "Use an input instead of buttons", + "category": "content" + }, + "icon-prev": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.9.4" + }, + "icon-next": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.9.4" + }, + "icon-first": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.9.4" + }, + "icon-last": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.9.4" + }, + "to-fn": { + "type": "Function", + "desc": "Generate link for page buttons; For best performance, reference it from your scope and do not define it inline", + "params": { + "page": { + "type": "Number", + "desc": "Page number to navigate to", + "examples": [ + 2 + ] + } + }, + "returns": { + "type": [ + "Object", + "String" + ], + "desc": "Object or String that can be passed to a as `to` parameter" + }, + "examples": [ + ":to-fn=\"page => ({ query: { page } })\"" + ], + "category": "content", + "addedIn": "v1.2.6" + }, + "boundary-links": { + "type": "Boolean", + "desc": "Show boundary button links", + "category": "content" + }, + "boundary-numbers": { + "type": "Boolean", + "desc": "Always show first and last page buttons (if not using 'input')", + "category": "content" + }, + "direction-links": { + "type": "Boolean", + "desc": "Show direction buttons", + "category": "content" + }, + "ellipses": { + "type": "Boolean", + "desc": "Show ellipses (...) when pages are available", + "category": "content" + }, + "max-pages": { + "type": [ + "Number", + "String" + ], + "default": 0, + "desc": "Maximum number of page links to display at a time; 0 means Infinite", + "examples": [ + 5 + ], + "category": "content" + }, + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design for non-active buttons (it's the default option)", + "category": "style", + "addedIn": "v1.15.6" + }, + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design for non-active buttons", + "category": "style", + "addedIn": "v1.15" + }, + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow for non-active buttons", + "category": "style", + "addedIn": "v1.15" + }, + "push": { + "type": "Boolean", + "desc": "Use 'push' design for non-active buttons", + "category": "style", + "addedIn": "v1.15" + }, + "color": { + "type": "String", + "desc": "Color name from the Quasar Color Palette for the non-active buttons", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "primary" + }, + "text-color": { + "type": "String", + "desc": "Text color name from the Quasar Color Palette for the ACTIVE buttons", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "active-design": { + "type": "String", + "desc": "The design of the ACTIVE button, similar to the flat/outline/push/unelevated props (but those are used for non-active buttons)", + "values": [ + "flat", + "outline", + "push", + "unelevated" + ], + "category": "style", + "addedIn": "v1.22" + }, + "active-color": { + "type": "String", + "desc": "Color name from the Quasar Color Palette for the ACTIVE button", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "primary", + "addedIn": "v1.15.6" + }, + "active-text-color": { + "type": "String", + "desc": "Text color name from the Quasar Color Palette for the ACTIVE button", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.15.6" + }, + "round": { + "type": "Boolean", + "desc": "Makes a circle shaped button for all buttons", + "category": "style", + "addedIn": "v1.15" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for a squared shape button for all buttons", + "category": "style", + "addedIn": "v1.15" + }, + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect for all buttons", + "category": "style", + "addedIn": "v1.15" + }, + "gutter": { + "type": "String", + "desc": "Apply custom gutter; Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl) - does not work in IE11", + "default": "2px", + "examples": [ + "16px", + "10px 5px", + "2rem", + "xs", + "md lg", + "2px 2px 5px 7px" + ], + "category": "style", + "addedIn": "v1.22" + }, + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ + "16px", + "10px 5px", + "2rem", + "xs", + "md lg", + "2px 2px 5px 7px" + ], + "category": "style", + "addedIn": "v1.15" + }, + "input-style": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "Style definitions to be attributed to the input (if using one)", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "input-class": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "Class definitions to be attributed to the input (if using one)", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "ripple": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Configure buttons material ripple (disable it by setting it to 'false' or supply a config object); Does not applies to boundary and ellipsis buttons", + "default": true, + "examples": [ + false, + "{ early: true, center: true, color: 'teal', keyCodes: [] }" + ], + "category": "style", + "addedIn": "v1.9.11" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "String", + "desc": "New model value", + "required": true + } + } + } + }, + "methods": { + "set": { + "desc": "Go directly to the specified page", + "params": { + "pageNumber": { + "type": "Number", + "desc": "Page number to go to", + "examples": [ + 3 + ] + } + } + }, + "setByOffset": { + "desc": "Increment/Decrement current page by offset", + "params": { + "offset": { + "type": "Number", + "desc": "Offset page, can be negative or positive", + "examples": [ + 3 + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QParallax.json b/dist/api/QParallax.json new file mode 100644 index 00000000000..fb139f5055d --- /dev/null +++ b/dist/api/QParallax.json @@ -0,0 +1,93 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/parallax" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "src": { + "type": "String", + "desc": "Path to image (unless a 'media' slot is used)", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/something.png\"", + "(assets folder) src=\"~assets/my-img.png\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://some-site.net/some-img.jpg\"" + ], + "category": "model" + }, + "height": { + "type": "Number", + "desc": "Height of component (in pixels)", + "default": 500, + "examples": [ + ":height=\"1000\"" + ], + "category": "style" + }, + "speed": { + "type": "Number", + "desc": "Speed of parallax effect (0.0 < x < 1.0)", + "examples": [ + ":speed=\"0.24\"" + ], + "category": "behavior" + }, + "scroll-target": { + "type": [ + "Element", + "String" + ], + "desc": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one", + "examples": [ + ":scroll-target=\"$refs.scrollTarget\"", + "scroll-target=\".scroll-target-class\"", + "scroll-target=\"#scroll-target-id\"", + "scroll-target=\"body\"" + ], + "category": "behavior", + "addedIn": "v1.8" + } + }, + "slots": { + "default": { + "desc": "Default slot can be used for content that gets displayed on top of the component" + }, + "media": { + "desc": "Slot for describing or link href attribute; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ + "http://quasar.dev" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "target": { + "type": "String", + "desc": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ + "_blank", + "_self", + "_parent", + "_top" + ], + "category": "navigation", + "addedIn": "v1.17" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "ripple": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Configure material ripple (disable it by setting it to 'false' or supply a config object)", + "default": true, + "examples": [ + false, + "{ early: true, center: true, color: 'teal', keyCodes: [] }" + ], + "category": "style" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "A number or string to label the tab", + "examples": [ + "Home" + ], + "category": "content" + }, + "alert": { + "type": [ + "Boolean", + "String" + ], + "desc": "Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color", + "examples": [ + "alert", + "alert=\"purple\"" + ], + "category": "content" + }, + "alert-icon": { + "type": "String", + "desc": "Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop", + "examples": [ + "alert-icon=\"alarm_on\"" + ], + "category": "content", + "addedIn": "v1.9.14" + }, + "name": { + "type": [ + "Number", + "String" + ], + "desc": "Panel name", + "default": "A random UID", + "examples": [ + "home", + ":name=\"1\"" + ], + "category": "general" + }, + "no-caps": { + "type": "Boolean", + "desc": "Turns off capitalizing all letters within the tab (which is the default)", + "category": "content" + }, + "content-class": { + "type": "String", + "desc": "Class definitions to be attributed to the content wrapper", + "examples": [ + "my-special-class" + ], + "category": "style", + "addedIn": "v1.12" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + } + }, + "slots": { + "default": { + "desc": "Suggestion: QMenu, QTooltip" + } + }, + "events": { + "click": { + "desc": "Emitted when component is clicked (activated)", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object; If you want to cancel navigation set synchronously 'evt.navigate' to false" + }, + "navigateFn": { + "type": "Function", + "desc": "When you need to control the time at which the tab should trigger the route navigation then set 'evt.navigate' to false and call this function at your convenience; Useful if you have async work to be done before the actual route navigation or you want to navigate elsewhere", + "params": { + "to": { + "type": [ + "String", + "Object" + ], + "desc": "Equivalent to Vue Router 'to' property", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ], + "default": "Tab's 'to' property" + }, + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property", + "default": "Tab's 'append' property" + }, + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property", + "default": "Tab's 'replace' property" + } + }, + "returns": { + "type": "Promise", + "desc": "Returns the router's navigation promise", + "addedIn": "v1.21" + } + } + }, + "addedIn": "v1.13" + } + } +} \ No newline at end of file diff --git a/dist/api/QScrollArea.json b/dist/api/QScrollArea.json new file mode 100644 index 00000000000..cbe355e9874 --- /dev/null +++ b/dist/api/QScrollArea.json @@ -0,0 +1,378 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/scroll-area" + }, + "props": { + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.9" + }, + "bar-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Object with CSS properties and values for custom styling the scrollbars (both vertical and horizontal)", + "examples": [ + ":bar-style=\"{ borderRadius: '5px', background: 'red', opacity: 1 }\"" + ], + "category": "style", + "addedIn": "v1.5" + }, + "vertical-bar-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Object with CSS properties and values for custom styling the vertical scrollbar; Is applied on top of 'bar-style' prop", + "examples": [ + ":bar-style=\"{ right: '4px', borderRadius: '5px', background: 'red', width: '10px', opacity: 1 }\"" + ], + "category": "style", + "addedIn": "v1.17" + }, + "horizontal-bar-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Object with CSS properties and values for custom styling the horizontal scrollbar; Is applied on top of 'bar-style' prop", + "examples": [ + ":bar-style=\"{ bottom: '4px', borderRadius: '5px', background: 'red', height: '10px', opacity: 1 }\"" + ], + "category": "style", + "addedIn": "v1.17" + }, + "thumb-style": { + "type": "Object", + "desc": "Object with CSS properties and values for custom styling the thumb of scrollbars (both vertical and horizontal)", + "examples": [ + ":thumb-style=\"{ borderRadius: '5px', background: 'red', opacity: 1 }\"" + ], + "category": "style" + }, + "vertical-thumb-style": { + "type": "Object", + "desc": "Object with CSS properties and values for custom styling the thumb of the vertical scrollbar; Is applied on top of 'thumb-style' prop", + "examples": [ + ":thumb-style=\"{ right: '4px', borderRadius: '5px', background: 'red', width: '10px', opacity: 1 }\"" + ], + "category": "style", + "addedIn": "v1.17" + }, + "horizontal-thumb-style": { + "type": "Object", + "desc": "Object with CSS properties and values for custom styling the thumb of the horizontal scrollbar; Is applied on top of 'thumb-style' prop", + "examples": [ + ":thumb-style=\"{ bottom: '4px', borderRadius: '5px', background: 'red', height: '10px', opacity: 1 }\"" + ], + "category": "style", + "addedIn": "v1.17" + }, + "content-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Object with CSS properties and values for styling the container of QScrollArea", + "examples": [ + ":content-style=\"{ backgroundColor: '#C0C0C0' }\"" + ], + "category": "style" + }, + "content-active-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Object with CSS properties and values for styling the container of QScrollArea when scroll area becomes active (is mouse hovered)", + "examples": [ + ":content-active-style=\"{ backgroundColor: 'white' }\"" + ], + "category": "style" + }, + "visible": { + "type": "Boolean", + "desc": "Manually control the visibility of the scrollbar; Overrides default mouse over/leave behavior", + "category": "behavior", + "addedIn": "v1.3" + }, + "delay": { + "type": [ + "Number", + "String" + ], + "desc": "When content changes, the scrollbar appears; this delay defines the amount of time (in milliseconds) before scrollbars disappear again (if component is not hovered)", + "default": 1000, + "examples": [ + 500, + ":delay=\"550\"" + ], + "category": "behavior" + }, + "horizontal": { + "type": "Boolean", + "desc": "Changes the default axis to horizontal instead of vertical (which is default) for getScrollPosition, getScrollPercentage, setScrollPosition, and setScrollPercentage", + "category": "behavior" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general", + "addedIn": "v1.15.15" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "scroll": { + "desc": "Emitted when scroll information changes (and listener is configured)", + "params": { + "info": { + "type": "Object", + "definition": { + "ref": { + "type": "Object", + "desc": "Vue reference to the QScrollArea which triggered the event" + }, + "verticalPosition": { + "type": "Number", + "desc": "Vertical scroll position (in px)" + }, + "verticalPercentage": { + "type": "Number", + "desc": "Vertical scroll percentage (0.0 <= x <= 1.0)" + }, + "verticalSize": { + "type": "Number", + "desc": "Vertical scroll size (in px)" + }, + "verticalContainerSize": { + "type": "Number", + "desc": "Height of the container (in px)" + }, + "horizontalPosition": { + "type": "Number", + "desc": "Horizontal scroll position (in px)" + }, + "horizontalPercentage": { + "type": "Number", + "desc": "Horizontal scroll percentage (0.0 <= x <= 1.0)" + }, + "horizontalSize": { + "type": "Number", + "desc": "Horizontal scroll size (in px)" + }, + "horizontalContainerSize": { + "type": "Number", + "desc": "Width of the container (in px)" + } + } + } + }, + "addedIn": "v1.9.3" + } + }, + "methods": { + "getScrollTarget": { + "desc": "Get the scrolling DOM element target", + "returns": { + "type": "Object", + "desc": "DOM element upon which scrolling takes place" + } + }, + "getScroll": { + "desc": "Get the current scroll information", + "returns": { + "type": "Object", + "desc": "Scroll information", + "definition": { + "verticalPosition": { + "type": "Number", + "desc": "Vertical scroll position (in px)" + }, + "verticalPercentage": { + "type": "Number", + "desc": "Vertical scroll percentage (0.0 <= x <= 1.0)" + }, + "verticalSize": { + "type": "Number", + "desc": "Vertical scroll size (in px)" + }, + "verticalContainerSize": { + "type": "Number", + "desc": "Height of the container (in px)" + }, + "horizontalPosition": { + "type": "Number", + "desc": "Horizontal scroll position (in px)" + }, + "horizontalPercentage": { + "type": "Number", + "desc": "Horizontal scroll percentage (0.0 <= x <= 1.0)" + }, + "horizontalSize": { + "type": "Number", + "desc": "Horizontal scroll size (in px)" + }, + "horizontalContainerSize": { + "type": "Number", + "desc": "Width of the container (in px)" + } + } + }, + "addedIn": "v1.17" + }, + "getScrollPosition": { + "desc": "Get current scroll position", + "params": { + "axis": { + "type": "String", + "desc": "Scroll axis - defaults to 'vertical' (or to 'horizontal' if horizontal prop is set)", + "values": [ + "vertical", + "horizontal", + "both" + ] + } + }, + "returns": { + "type": "Object", + "definition": { + "top": { + "type": "Number", + "desc": "Scroll offset from top (vertical)", + "examples": [ + 120 + ] + }, + "left": { + "type": "Number", + "desc": "Scroll offset from left (horizontal)", + "examples": [ + 10 + ] + } + }, + "examples": [ + "{ top: 10, left: 0 }" + ] + }, + "addedIn": "v1.17" + }, + "getScrollPercentage": { + "desc": "Get current scroll position in percentage (0.0 <= x <= 1.0)", + "params": { + "axis": { + "type": "String", + "desc": "Scroll axis - defaults to 'vertical' (or to 'horizontal' if horizontal prop is set)", + "values": [ + "vertical", + "horizontal", + "both" + ] + } + }, + "returns": { + "type": "Object", + "definition": { + "top": { + "type": "Number", + "desc": "Scroll percentage (0.0 <= x <= 1.0) offset from top (vertical)", + "examples": [ + 0.12 + ] + }, + "left": { + "type": "Number", + "desc": "Scroll percentage (0.0 <= x <= 1.0) offset from left (horizontal)", + "examples": [ + 0.92 + ] + } + }, + "examples": [ + "{ top: 0.212, left: 0 }" + ] + }, + "addedIn": "v1.17" + }, + "setScrollPosition": { + "desc": "Set scroll position to an offset; If a duration (in milliseconds) is specified then the scroll is animated", + "params": { + "axis": { + "type": "String", + "desc": "Scroll axis", + "values": [ + "vertical", + "horizontal" + ], + "required": true + }, + "offset": { + "type": "Number", + "desc": "Scroll position offset from top (in pixels)", + "required": true, + "examples": [ + 220 + ] + }, + "duration": { + "type": "Number", + "desc": "Duration (in milliseconds) enabling animated scroll", + "examples": [ + 300 + ] + } + } + }, + "setScrollPercentage": { + "desc": "Set scroll position to a percentage (0.0 <= x <= 1.0) of the total scrolling size; If a duration (in milliseconds) is specified then the scroll is animated", + "params": { + "axis": { + "type": "String", + "desc": "Scroll axis", + "values": [ + "vertical", + "horizontal" + ], + "required": true + }, + "offset": { + "type": "Number", + "desc": "Scroll percentage (0.0 <= x <= 1.0) of the total scrolling size", + "required": true, + "examples": [ + 220 + ] + }, + "duration": { + "type": "Number", + "desc": "Duration (in milliseconds) enabling animated scroll", + "examples": [ + 300 + ] + } + }, + "addedIn": "v1.17" + } + } +} \ No newline at end of file diff --git a/dist/api/QScrollObserver.json b/dist/api/QScrollObserver.json new file mode 100644 index 00000000000..ecfa5d3c661 --- /dev/null +++ b/dist/api/QScrollObserver.json @@ -0,0 +1,151 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/scroll-observer" + }, + "props": { + "debounce": { + "type": [ + "String", + "Number" + ], + "desc": "Debounce amount (in milliseconds)", + "examples": [ + "0", + "530" + ], + "category": "behavior" + }, + "axis": { + "type": "String", + "desc": "Axis on which to detect changes", + "values": [ + "both", + "vertical", + "horizontal" + ], + "default": "vertical", + "category": "behavior", + "addedIn": "v1.16.0" + }, + "scroll-target": { + "type": [ + "Element", + "String" + ], + "desc": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one", + "examples": [ + ":scroll-target=\"$refs.scrollTarget\"", + "scroll-target=\".scroll-target-class\"", + "scroll-target=\"#scroll-target-id\"", + "scroll-target=\"body\"" + ], + "category": "behavior", + "addedIn": "v1.8" + } + }, + "events": { + "scroll": { + "desc": "Emitted when scroll position changes", + "params": { + "details": { + "type": "Object", + "desc": "Scroll details", + "definition": { + "position": { + "type": "Object", + "desc": "Scroll offset (from top and left)", + "definition": { + "top": { + "type": "Number", + "desc": "Scroll offset from top (vertical)", + "examples": [ + 120 + ] + }, + "left": { + "type": "Number", + "desc": "Scroll offset from left (horizontal)", + "examples": [ + 10 + ] + } + }, + "addedIn": "v1.16.0" + }, + "direction": { + "type": "String", + "desc": "Direction of scroll", + "values": [ + "up", + "down", + "left", + "right" + ] + }, + "directionChanged": { + "type": "Boolean", + "desc": "Has scroll direction changed since event was last emitted?" + }, + "delta": { + "type": "Object", + "desc": "Delta of distance (in pixels) since event was last emitted", + "definition": { + "top": { + "type": "Number", + "desc": "Vertical delta distance since event was last emitted", + "examples": [ + 120 + ] + }, + "left": { + "type": "Number", + "desc": "Horizontal delta distance since event was last emitted", + "examples": [ + 10 + ] + } + }, + "addedIn": "v1.16.0" + }, + "inflectionPoint": { + "type": "Object", + "desc": "Last scroll offset where scroll direction has changed", + "definition": { + "top": { + "type": "Number", + "desc": "Scroll offset from top (vertical)", + "examples": [ + 120 + ] + }, + "left": { + "type": "Number", + "desc": "Scroll offset from left (horizontal)", + "examples": [ + 10 + ] + } + }, + "addedIn": "v1.16.0" + } + } + } + } + } + }, + "methods": { + "trigger": { + "desc": "Emit a 'scroll' event", + "params": { + "immediately": { + "type": "Boolean", + "desc": "Skip over the debounce amount" + } + } + }, + "getPosition": { + "desc": "Get current scroll details under the form of an Object: { position, direction, directionChanged, inflectionPoint, delta }" + } + } +} \ No newline at end of file diff --git a/dist/api/QSelect.json b/dist/api/QSelect.json new file mode 100644 index 00000000000..0afdb882c01 --- /dev/null +++ b/dist/api/QSelect.json @@ -0,0 +1,1482 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/select" + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists", + "examples": [ + "car_id", + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "virtual-scroll-horizontal": { + "type": "Boolean", + "desc": "Make virtual list work in horizontal mode", + "category": "behavior" + }, + "virtual-scroll-slice-size": { + "type": [ + "Number", + "String" + ], + "desc": "Minimum number of items to render in the virtual list", + "default": "30", + "examples": [ + "virtual-scroll-slice-size=\"60\"" + ], + "category": "virtual-scroll" + }, + "virtual-scroll-slice-ratio-before": { + "type": [ + "Number", + "String" + ], + "desc": "Ratio of number of items in visible zone to render before it", + "default": "1", + "examples": [ + "virtual-scroll-slice-ratio-before=\"0.3\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.14.7" + }, + "virtual-scroll-slice-ratio-after": { + "type": [ + "Number", + "String" + ], + "desc": "Ratio of number of items in visible zone to render after it", + "default": "1", + "examples": [ + "virtual-scroll-slice-ratio-after=\"2\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.14.7" + }, + "virtual-scroll-item-size": { + "type": [ + "Number", + "String" + ], + "desc": "Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item", + "default": "24", + "examples": [ + "virtual-scroll-item-size=\"48\"" + ], + "category": "virtual-scroll" + }, + "virtual-scroll-sticky-size-start": { + "type": [ + "Number", + "String" + ], + "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision", + "default": "0", + "examples": [ + "virtual-scroll-sticky-size-start=\"48\"" + ], + "category": "virtual-scroll" + }, + "virtual-scroll-sticky-size-end": { + "type": [ + "Number", + "String" + ], + "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision", + "default": "0", + "examples": [ + "virtual-scroll-sticky-size-end=\"48\"" + ], + "category": "virtual-scroll" + }, + "table-colspan": { + "type": [ + "Number", + "String" + ], + "desc": "The number of columns in the table (you need this if you use table-layout: fixed)", + "examples": [ + "table-colspan=\"12\"" + ], + "category": "virtual-scroll|content", + "addedIn": "v1.13" + }, + "error": { + "type": "Boolean", + "desc": "Does field have validation errors?", + "category": "behavior" + }, + "error-message": { + "type": "String", + "desc": "Validation error message (gets displayed only if 'error' is set to 'true')", + "examples": [ + "Username must have at least 5 characters" + ], + "category": "content" + }, + "no-error-icon": { + "type": "Boolean", + "desc": "Hide error icon when there is an error", + "category": "content" + }, + "rules": { + "type": "Array", + "desc": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules", + "examples": [ + ":rules=\"[ val => val.length <= 3 || 'Please use maximum 3 characters' ]\"", + ":rules=\"[ 'fulltime' ]\"", + ":rules=\"[ (val, rules) => rules.email(val) || 'Please enter a valid email address' ]\"" + ], + "category": "behavior" + }, + "reactive-rules": { + "type": "Boolean", + "desc": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it", + "category": "behavior", + "addedIn": "v1.11" + }, + "lazy-rules": { + "type": [ + "Boolean", + "String" + ], + "desc": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself", + "values": [ + "(Boolean) true", + "(Boolean) false", + "ondemand" + ], + "category": "behavior" + }, + "label": { + "type": "String", + "desc": "A text label that will “float” up above the input field, once the field gets focus", + "examples": [ + "Username" + ], + "category": "content" + }, + "stack-label": { + "type": "Boolean", + "desc": "Label will be always shown above the field regardless of field content (if any)", + "category": "content" + }, + "hint": { + "type": "String", + "desc": "Helper (hint) text which gets placed below your wrapped form component", + "examples": [ + "Fill in between 3 and 12 characters" + ], + "category": "content" + }, + "hide-hint": { + "type": "Boolean", + "desc": "Hide the helper (hint) text when field doesn't have focus", + "category": "content" + }, + "prefix": { + "type": "String", + "desc": "Prefix", + "examples": [ + "$" + ], + "category": "content" + }, + "suffix": { + "type": "String", + "desc": "Suffix", + "examples": [ + "@gmail.com" + ], + "category": "content" + }, + "label-color": { + "type": "String", + "desc": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.7" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "bg-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "loading": { + "type": "Boolean", + "desc": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.", + "category": "behavior|content" + }, + "clearable": { + "type": "Boolean", + "desc": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null", + "category": "behavior|content" + }, + "clear-icon": { + "type": "String", + "desc": "Custom icon to use for the clear button when using along with 'clearable' prop", + "examples": [ + "close" + ], + "category": "content" + }, + "filled": { + "type": "Boolean", + "desc": "Use 'filled' design for the field", + "category": "style" + }, + "outlined": { + "type": "Boolean", + "desc": "Use 'outlined' design for the field", + "category": "style" + }, + "outlined-md": { + "type": "Boolean", + "desc": "Use Material Design 'outlined' design for the field", + "category": "style", + "addedIn": "v1.17.8" + }, + "borderless": { + "type": "Boolean", + "desc": "Use 'borderless' design for the field", + "category": "style" + }, + "standout": { + "type": [ + "Boolean", + "String" + ], + "desc": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)", + "examples": [ + "standout", + "standout=\"bg-primary text-white\"" + ], + "category": "style" + }, + "label-slot": { + "type": "Boolean", + "desc": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set", + "category": "content", + "addedIn": "v1.12.9" + }, + "bottom-slots": { + "type": "Boolean", + "desc": "Enables bottom slots ('error', 'hint', 'counter')", + "category": "content" + }, + "hide-bottom-space": { + "type": "Boolean", + "desc": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content", + "category": "style" + }, + "counter": { + "type": "Boolean", + "desc": "Show an automatic counter on bottom right", + "category": "content" + }, + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "item-aligned": { + "type": "Boolean", + "desc": "Match inner content alignment to that of QItem", + "category": "style" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "autofocus": { + "type": "Boolean", + "desc": "Focus field on initial component render", + "category": "behavior" + }, + "for": { + "type": "String", + "desc": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well", + "examples": [ + "myFieldsId" + ], + "category": "behavior", + "addedIn": "v1.4.2" + }, + "value": { + "type": [ + "Number", + "String", + "Array" + ], + "desc": "Model of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "required": true, + "examples": [ + "v-model=\"myModel\"" + ], + "category": "model" + }, + "multiple": { + "type": "Boolean", + "desc": "Allow multiple selection; Model must be Array", + "category": "model|selection" + }, + "display-value": { + "type": [ + "Number", + "String" + ], + "desc": "Override default selection string, if not using 'selected' slot/scoped slot and if not using 'use-chips' prop", + "examples": [ + "Options: x, y, z" + ], + "category": "selection" + }, + "display-value-sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render selected option(s); Use it when the selected option(s) might be unsafe (from user input); Does NOT apply when using 'selected' or 'selected-item' slots!", + "category": "selection" + }, + "options": { + "type": "Array", + "desc": "Available options that the user can select from. For best performance freeze the list of options.", + "default": "[]", + "examples": [ + ":options=\"[ 'BMW', 'Samsung Phone' ]\"", + ":options=\"[ { label: 'BMW', value: 'car' }, { label: 'Samsung Phone', value: 'phone' } ]\"" + ], + "category": "options" + }, + "option-value": { + "type": [ + "Function", + "String" + ], + "desc": "Property of option which holds the 'value'; If using a function then for best performance, reference it from your scope and do not define it inline", + "default": "value", + "examples": [ + "option-value=\"modelNumber\"", + ":option-value=\"(item) => item === null ? null : item.modelNumber\"" + ], + "category": "options" + }, + "option-label": { + "type": [ + "Function", + "String" + ], + "desc": "Property of option which holds the 'label'; If using a function then for best performance, reference it from your scope and do not define it inline", + "default": "label", + "examples": [ + "option-label=\"itemName\"", + ":option-label=\"(item) => item === null ? 'Null value' : item.itemName\"" + ], + "category": "options" + }, + "option-disable": { + "type": [ + "Function", + "String" + ], + "desc": "Property of option which tells it's disabled; The value of the property must be a Boolean; If using a function then for best performance, reference it from your scope and do not define it inline", + "default": "disable", + "examples": [ + "option-disable=\"cannotSelect\"", + ":option-disable=\"(item) => item === null ? true : item.cannotSelect\"" + ], + "category": "options" + }, + "hide-selected": { + "type": "Boolean", + "desc": "Hides selection; Use the underlying input tag to hold the label (instead of showing it to the right of the input) of the selected option; Only works for non 'multiple' Selects", + "category": "selection" + }, + "hide-dropdown-icon": { + "type": "Boolean", + "desc": "Hides dropdown icon", + "category": "content|behavior" + }, + "dropdown-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "max-values": { + "type": [ + "Number", + "String" + ], + "desc": "Allow a maximum number of selections that the user can do", + "examples": [ + "5" + ], + "category": "selection" + }, + "options-dense": { + "type": "Boolean", + "desc": "Dense mode for options list; occupies less space", + "category": "options" + }, + "options-dark": { + "type": "Boolean", + "desc": "Options menu will be colored with a dark color", + "category": "options" + }, + "options-selected-class": { + "type": "String", + "desc": "CSS class name for options that are active/selected; Set it to an empty string to stop applying the default (which is text-* where * is the 'color' prop value)", + "examples": [ + "text-orange" + ], + "category": "options" + }, + "options-sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render options; Use it when the options might be unsafe (from user input); Does NOT apply when using 'option' slot!", + "category": "options" + }, + "options-cover": { + "type": "Boolean", + "desc": "Expanded menu will cover the component (will not work along with 'use-input' prop for obvious reasons)", + "category": "options" + }, + "menu-shrink": { + "type": "Boolean", + "desc": "Allow the options list to be narrower than the field (only in menu mode)", + "category": "options", + "addedIn": "v1.9.2" + }, + "menu-anchor": { + "type": "String", + "desc": "Two values setting the starting position or anchor point of the options list relative to the field (only in menu mode)", + "values": [ + "top left", + "top middle", + "top right", + "top start", + "top end", + "center left", + "center middle", + "center right", + "center start", + "center end", + "bottom left", + "bottom middle", + "bottom right", + "bottom start", + "bottom end" + ], + "examples": [ + "top left", + "bottom right" + ], + "category": "position", + "addedIn": "v1.9.2" + }, + "menu-self": { + "type": "String", + "desc": "Two values setting the options list's own position relative to its target (only in menu mode)", + "values": [ + "top left", + "top middle", + "top right", + "top start", + "top end", + "center left", + "center middle", + "center right", + "center start", + "center end", + "bottom left", + "bottom middle", + "bottom right", + "bottom start", + "bottom end" + ], + "examples": [ + "top left", + "bottom right" + ], + "category": "position", + "addedIn": "v1.9.2" + }, + "menu-offset": { + "type": "Array", + "desc": "An array of two numbers to offset the options list horizontally and vertically in pixels (only in menu mode)", + "examples": [ + "[8, 8]", + "[5, 10]" + ], + "category": "position", + "addedIn": "v1.9.2" + }, + "popup-content-class": { + "type": "String", + "desc": "Class definitions to be attributed to the popup content", + "examples": [ + "my-special-class" + ], + "category": "style" + }, + "popup-content-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the popup content", + "examples": [ + "background-color: #ff0000", + ":popup-content-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "dialog-content-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the dialog external element", + "examples": [ + "my-special-class" + ], + "category": "style", + "addedIn": "v1.15.5" + }, + "dialog-content-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the dialog external element", + "examples": [ + "background-color: #ff0000", + ":dialog-content-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style", + "addedIn": "v1.15.5" + }, + "dialog-close-icon": { + "type": [ + "Boolean", + "String" + ], + "desc": "Style definitions to be attributed to the dialog external element", + "examples": [ + "dialog-close-icon", + "dialog-close-icon=\"close\"" + ], + "category": "behavior|style", + "addedIn": "v1.15.5" + }, + "use-input": { + "type": "Boolean", + "desc": "Use an input tag where users can type", + "category": "content" + }, + "use-chips": { + "type": "Boolean", + "desc": "Use QChip to show what is currently selected", + "category": "selection" + }, + "fill-input": { + "type": "Boolean", + "desc": "Fills the input with current value; Useful along with 'hide-selected'; Does NOT works along with 'multiple' selection", + "category": "behavior" + }, + "new-value-mode": { + "type": "String", + "desc": "Enables creation of new values and defines behavior when a new value is added: 'add' means it adds the value (even if possible duplicate), 'add-unique' adds only unique values, and 'toggle' adds or removes the value (based on if it exists or not already); When using this prop then listening for @new-value becomes optional (only to override the behavior defined by 'new-value-mode')", + "values": [ + "add", + "add-unique", + "toggle" + ], + "category": "behavior" + }, + "map-options": { + "type": "Boolean", + "desc": "Try to map labels of model from 'options' Array; has a small performance penalty; If you are using emit-value you will probably need to use map-options to display the label text in the select field rather than the value; Refer to the 'Affecting model' section above", + "category": "options" + }, + "emit-value": { + "type": "Boolean", + "desc": "Update model with the value of the selected option instead of the whole option", + "category": "model" + }, + "input-debounce": { + "type": [ + "Number", + "String" + ], + "desc": "Debounce the input model update with an amount of milliseconds", + "default": 500, + "examples": [ + 650 + ], + "category": "content" + }, + "input-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the underlying input tag", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style", + "addedIn": "v1.1.7" + }, + "input-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the underlying input tag", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style", + "addedIn": "v1.1.7" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "autocomplete": { + "type": "String", + "desc": "Autocomplete attribute for field", + "examples": [ + "autocomplete=\"country\"" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "transition-show": { + "type": "String", + "desc": "Transition when showing the menu/dialog; One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + }, + "transition-hide": { + "type": "String", + "desc": "Transition when hiding the menu/dialog; One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "fade" + }, + "behavior": { + "type": "String", + "desc": "Overrides the default dynamic mode of showing as menu on desktop and dialog on mobiles", + "values": [ + "default", + "menu", + "dialog" + ], + "default": "default", + "category": "behavior", + "addedIn": "v1.1" + } + }, + "slots": { + "default": { + "desc": "Field main content" + }, + "prepend": { + "desc": "Prepend inner field; Suggestions: QIcon, QBtn" + }, + "append": { + "desc": "Append to inner field; Suggestions: QIcon, QBtn" + }, + "before": { + "desc": "Prepend outer field; Suggestions: QIcon, QBtn" + }, + "after": { + "desc": "Append outer field; Suggestions: QIcon, QBtn" + }, + "label": { + "desc": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored", + "addedIn": "v1.12.9" + }, + "counter": { + "desc": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion:
" + }, + "loading": { + "desc": "Override default spinner when component is in loading mode; Suggestion: spinners" + }, + "selected": { + "desc": "Override default selection slot; Suggestion: QChip" + }, + "before-options": { + "desc": "Template slot for the elements that should be rendered before the list of options", + "addedIn": "v1.1" + }, + "after-options": { + "desc": "Template slot for the elements that should be rendered after the list of options", + "addedIn": "v1.1" + } + }, + "scopedSlots": { + "error": { + "desc": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ + "The field is required" + ] + } + }, + "addedIn": "v1.17" + }, + "hint": { + "desc": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ + "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" + ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field" + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ + 0.241, + "Text" + ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ + "The field is required" + ] + } + }, + "addedIn": "v1.17" + }, + "no-option": { + "desc": "What should the menu display after filtering options and none are left to be displayed; Suggestion:
", + "scope": { + "inputValue": { + "type": "String", + "desc": "Input textfield value, if any (not QSelect model)", + "examples": [ + "typed something" + ] + } + } + }, + "selected-item": { + "desc": "Override default selection slot; Suggestion: QChip", + "scope": { + "index": { + "type": "Number", + "desc": "Selection index", + "examples": [ + 0 + ] + }, + "opt": { + "type": "Any", + "desc": "Selected option -- its value is taken from model" + }, + "selected": { + "type": "Boolean", + "desc": "Always true -- passed down as prop to QItem (when using QItem)" + }, + "removeAtIndex": { + "type": "Function", + "desc": "Remove selected option located at specific index", + "params": { + "index": { + "type": "Number", + "desc": "Index at which to remove selection", + "examples": [ + 0 + ] + } + }, + "returns": null + }, + "toggleOption": { + "type": "Function", + "desc": "Add/remove option from model", + "params": { + "opt": { + "type": "Any", + "desc": "Option to add to model" + } + }, + "returns": null + }, + "tabindex": { + "type": "Number", + "desc": "Tabindex HTML attribute value associated with respective option", + "values": [ + 0, + -1 + ] + } + } + }, + "option": { + "desc": "Customize how options are rendered; Suggestion: QItem", + "scope": { + "index": { + "type": "Number", + "desc": "Option index", + "examples": [ + 0 + ] + }, + "opt": { + "type": "Any", + "desc": "Option -- its value is taken from 'options' prop" + }, + "selected": { + "type": "Boolean", + "desc": "Is option selected?" + }, + "focused": { + "type": "Boolean", + "desc": "Is option focused?" + }, + "toggleOption": { + "type": "Function", + "desc": "Add/remove option from model", + "params": { + "opt": { + "type": "Any", + "desc": "Option to add to model" + } + }, + "returns": null + }, + "setOptionIndex": { + "type": "Function", + "desc": "Sets option from menu as 'focused'", + "params": { + "index": { + "type": "Number", + "desc": "Index of option from menu", + "examples": [ + 10 + ] + } + }, + "returns": null + }, + "itemProps": { + "type": "Object", + "desc": "Computed properties passed down to QItem" + }, + "itemEvents": { + "type": "Object", + "desc": "Computed events passed down to QItem" + } + } + } + }, + "events": { + "virtual-scroll": { + "desc": "Emitted when the virtual scroll occurs", + "params": { + "details": { + "type": "Object", + "desc": "Object of properties on the new scroll position", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the list item that was scrolled into view (0 based)", + "examples": [ + 30 + ] + }, + "from": { + "type": "Number", + "desc": "The index of the first list item that is rendered (0 based)", + "examples": [ + 10 + ] + }, + "to": { + "type": "Number", + "desc": "The index of the last list item that is rendered (0 based)", + "examples": [ + 50 + ] + }, + "direction": { + "type": "String", + "desc": "Direction of change", + "values": [ + "increase", + "decrease" + ] + }, + "ref": { + "type": "Object", + "desc": "Vue reference to the QVirtualList which triggered the event", + "addedIn": "v1.8.4" + } + } + } + } + }, + "clear": { + "desc": "When using the 'clearable' property, this event is emitted when the clear icon is clicked", + "addedIn": "v1.1.5", + "params": { + "value": { + "type": [ + "Any" + ], + "desc": "The previous value before clearing it" + } + } + }, + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + }, + "input-value": { + "desc": "Emitted when the value in the text input changes", + "params": { + "value": { + "type": "String", + "desc": "New text value", + "required": true + } + }, + "addedIn": "v1.9.9" + }, + "remove": { + "desc": "Emitted when an option is removed from selection", + "params": { + "details": { + "type": "Object", + "desc": "Removal details", + "definition": { + "index": { + "type": "Number", + "desc": "Model index at which removal took place", + "examples": [ + 2 + ] + }, + "value": { + "type": "Any", + "desc": "The actual value that was removed" + } + } + } + } + }, + "add": { + "desc": "Emitted when an option is added to the selection", + "params": { + "details": { + "type": "Object", + "desc": "Addition details", + "definition": { + "index": { + "type": "Number", + "desc": "Model index at which addition took place", + "examples": [ + 2 + ] + }, + "value": { + "type": "Any", + "desc": "The actual value that was added" + } + } + } + } + }, + "new-value": { + "desc": "Enables creation of new values; Emitted when a new value has been created; You can override 'new-value-mode' property with it", + "params": { + "inputValue": { + "type": "String", + "desc": "What the user typed", + "examples": [ + "phone" + ] + }, + "doneFn": { + "type": "Function", + "desc": "Adds (optional) value to the model; Do not forget to call it after you validate the newly created value; Call it with no parameters if nothing should be added", + "params": { + "item": { + "type": "Any", + "desc": "Item to add" + }, + "mode": { + "type": "String", + "desc": "Override 'new-value-mode' (prop) behavior should you wish to", + "values": [ + "add", + "add-unique", + "toggle" + ], + "default": "add" + } + }, + "returns": null + } + } + }, + "filter": { + "desc": "Emitted when user wants to filter a value", + "params": { + "inputValue": { + "type": "String", + "desc": "What the user typed", + "examples": [ + "phone" + ] + }, + "doneFn": { + "type": "Function", + "desc": "Supply a function which makes the necessary updates", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Callback to call to make the actual updates", + "params": null, + "returns": null + }, + "afterFn": { + "type": "Function", + "desc": "Callback to call at the end after the update has been fully processed by QSelect", + "params": { + "ref": { + "type": "Object", + "desc": "Vue reference to the QSelect which triggered the filtering" + } + }, + "returns": null, + "addedIn": "v1.7.4" + } + }, + "returns": null + }, + "abortFn": { + "type": "Function", + "desc": "Call this function if something went wrong", + "params": null, + "returns": null + } + } + }, + "filter-abort": { + "desc": "Emitted when a filtering was aborted; Probably a new one was requested?" + }, + "popup-show": { + "desc": "Emitted when the select options menu or dialog is shown.", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + }, + "addedIn": "v1.1.3" + }, + "popup-hide": { + "desc": "Emitted when the select options menu or dialog is hidden.", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + }, + "addedIn": "v1.1.3" + } + }, + "methods": { + "scrollTo": { + "desc": "Scroll the virtual scroll list to the item with the specified index (0 based)", + "params": { + "index": { + "type": [ + "String", + "Number" + ], + "desc": "The index of the list item (0 based)", + "required": true, + "examples": [ + "1", + 23 + ] + }, + "edge": { + "type": "String", + "desc": "The edge to align to if the item is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns", + "values": [ + "start", + "center", + "end", + "start-force", + "center-force", + "end-force" + ], + "addedIn": "v1.13" + } + } + }, + "reset": { + "desc": "Resets the virtual scroll computations; Needed for custom edge-cases" + }, + "refresh": { + "desc": "Refreshes the virtual scroll list; Use it after appending items", + "params": { + "index": { + "type": [ + "String", + "Number" + ], + "desc": "The index of the list item to scroll to after refresh (0 based); If it's not specified the scroll position is not changed; Use a negative value to keep scroll position", + "examples": [ + "1", + 23, + -1 + ] + } + }, + "addedIn": "v1.8.4" + }, + "resetValidation": { + "desc": "Reset validation status" + }, + "validate": { + "desc": "Trigger a validation", + "params": { + "value": { + "type": "Any", + "desc": "Optional value to validate against" + } + }, + "returns": { + "type": [ + "Boolean", + "Promise" + ], + "desc": "True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "true", + "validate().then(outcome => { ... })" + ] + } + }, + "focus": { + "desc": "Focus component" + }, + "showPopup": { + "desc": "Focus and open popup" + }, + "hidePopup": { + "desc": "Hide popup" + }, + "removeAtIndex": { + "desc": "Remove selected option located at specific index", + "params": { + "index": { + "type": "Number", + "desc": "Index at which to remove selection", + "required": true, + "examples": [ + 0 + ] + } + } + }, + "add": { + "desc": "Adds option to model", + "params": { + "opt": { + "type": "Any", + "desc": "Option to add to model", + "required": true + }, + "unique": { + "type": "Boolean", + "desc": "Option must be unique" + } + } + }, + "toggleOption": { + "desc": "Add/remove option from model", + "params": { + "opt": { + "type": "Any", + "desc": "Option to add to model", + "required": true + }, + "keepOpen": { + "type": "Boolean", + "desc": "Don't close the menu and do not clear the filter", + "addedIn": "v1.7.4" + } + } + }, + "setOptionIndex": { + "desc": "Sets option from menu as 'focused'", + "params": { + "index": { + "type": "Number", + "desc": "Index of option from menu", + "required": true, + "examples": [ + 10 + ] + } + } + }, + "moveOptionSelection": { + "desc": "Move selected option from menu by index offset", + "params": { + "offset": { + "type": "Number", + "desc": "Number of options to move up or down", + "default": 1, + "examples": [ + -1, + 1, + 5 + ] + }, + "skipInputValue": { + "type": "Boolean", + "desc": "Don't set input-value on navigation", + "addedIn": "v1.8" + } + }, + "addedIn": "v1.7.4" + }, + "filter": { + "desc": "Filter options", + "params": { + "value": { + "type": "String", + "desc": "String to filter with", + "required": true, + "examples": [ + "car" + ] + } + } + }, + "updateMenuPosition": { + "desc": "Recomputes menu position" + }, + "updateInputValue": { + "desc": "If 'use-input' is specified, this updates the value that it holds", + "params": { + "value": { + "type": "String", + "desc": "String to set the input value to", + "examples": [ + "hotel" + ] + }, + "noFilter": { + "type": "Boolean", + "desc": "Set to true if you don't want the filter (if any) to be also triggered" + } + } + }, + "isOptionSelected": { + "desc": "Tells if an option is selected", + "params": { + "opt": { + "type": "Any", + "desc": "Option entry", + "required": true + } + }, + "returns": { + "type": "Boolean", + "desc": "Option is selected or not" + }, + "addedIn": "v1.9.5" + }, + "getEmittingOptionValue": { + "desc": "Get the model value that would be emitted by QSelect when selecting a said option; Also takes into consideration if 'emit-value' is set", + "params": { + "opt": { + "type": "Any", + "desc": "Option entry", + "required": true + } + }, + "returns": { + "type": "Any", + "desc": "Emitting model value of said option" + }, + "addedIn": "v1.9.5" + }, + "getOptionValue": { + "desc": "Get the model value of an option; Takes into consideration 'option-value' (if used), but does not looks for 'emit-value', like getEmittingOptionValue() does", + "params": { + "opt": { + "type": "Any", + "desc": "Option entry", + "required": true + } + }, + "returns": { + "type": "Any", + "desc": "Model value of said option" + }, + "addedIn": "v1.9.5" + }, + "getOptionLabel": { + "desc": "Get the label of an option; Takes into consideration the 'option-label' prop (if used)", + "params": { + "opt": { + "type": "Any", + "desc": "Option entry", + "required": true + } + }, + "returns": { + "type": "Any", + "desc": "Label of said option" + }, + "addedIn": "v1.9.5" + }, + "isOptionDisabled": { + "desc": "Tells if an option is disabled; Takes into consideration 'option-disable' prop (if used)", + "params": { + "opt": { + "type": "Any", + "desc": "Option entry", + "required": true + } + }, + "returns": { + "type": "Boolean", + "desc": "Option is disabled or not" + }, + "addedIn": "v1.9.5" + } + } +} \ No newline at end of file diff --git a/dist/api/QSeparator.json b/dist/api/QSeparator.json new file mode 100644 index 00000000000..ef610cfe547 --- /dev/null +++ b/dist/api/QSeparator.json @@ -0,0 +1,68 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/separator" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "spaced": { + "type": [ + "Boolean", + "String" + ], + "desc": "If set to true, the corresponding direction margins will be set to 8px; It can also be set to a size in CSS units, including unit name, or one of the xs|sm|md|lg|xl predefined sizes", + "default": "md", + "examples": [ + "12px", + "sm", + "md" + ], + "category": "content" + }, + "inset": { + "type": [ + "Boolean", + "String" + ], + "desc": "If set to Boolean true, the left and right margins will be set to 16px. If set to 'item' then it will match a QItem's design. If set to 'item-thumbnail' then it will match the design of a QItem with a thumbnail on the left side", + "examples": [ + "item", + "item-thumbnail" + ], + "category": "content" + }, + "vertical": { + "type": "Boolean", + "desc": "If set to true, the separator will be vertical.", + "category": "content" + }, + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.12" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSkeleton.json b/dist/api/QSkeleton.json new file mode 100644 index 00000000000..db1504cb2f0 --- /dev/null +++ b/dist/api/QSkeleton.json @@ -0,0 +1,108 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/skeleton" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "addedIn": "v1.6", + "props": { + "tag": { + "type": "String", + "desc": "HTML tag to render", + "default": "div", + "category": "content", + "examples": [ + "div", + "span" + ] + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "type": { + "type": "String", + "desc": "Type of skeleton placeholder", + "values": [ + "text", + "rect", + "circle", + "QBtn", + "QBadge", + "QChip", + "QToolbar", + "QCheckbox", + "QRadio", + "QToggle", + "QSlider", + "QRange", + "QInput", + "QAvatar" + ], + "default": "rect", + "category": "content" + }, + "animation": { + "type": "String", + "desc": "The animation effect of the skeleton placeholder", + "values": [ + "wave", + "pulse", + "pulse-x", + "pulse-y", + "fade", + "blink", + "none" + ], + "default": "wave", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name; Overrides 'height' and 'width' props and applies the value to both height and width", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + }, + "width": { + "type": "String", + "desc": "Width in CSS units, including unit name; Apply custom width; Use this prop or through CSS; Overridden by 'size' prop if used", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + }, + "height": { + "type": "String", + "desc": "Height in CSS units, including unit name; Apply custom height; Use this prop or through CSS; Overridden by 'size' prop if used", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QSlideItem.json b/dist/api/QSlideItem.json new file mode 100644 index 00000000000..f16de055f72 --- /dev/null +++ b/dist/api/QSlideItem.json @@ -0,0 +1,215 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/slide-item" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "left-color": { + "type": "String", + "desc": "Color name for left-side background from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "right-color": { + "type": "String", + "desc": "Color name for right-side background from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "top-color": { + "type": "String", + "desc": "Color name for top-side background from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.1.3" + }, + "bottom-color": { + "type": "String", + "desc": "Color name for bottom-side background from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.1.3" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.4.1" + } + }, + "slots": { + "default": { + "desc": "This is where item's sections go; Suggestion: QItemSection" + }, + "left": { + "desc": "Left side content when sliding" + }, + "right": { + "desc": "Right side content when sliding" + }, + "top": { + "desc": "Top side content when sliding", + "addedIn": "v1.1.3" + }, + "bottom": { + "desc": "Bottom side content when sliding", + "addedIn": "v1.1.3" + } + }, + "events": { + "left": { + "desc": "Emitted when user finished sliding the item to the left", + "params": { + "details": { + "type": "Object", + "desc": "Details", + "definition": { + "reset": { + "type": "Function", + "desc": "When called, it resets the component to its initial non-slided state", + "params": null, + "returns": null + } + } + } + } + }, + "right": { + "desc": "Emitted when user finished sliding the item to the right", + "params": { + "details": { + "type": "Object", + "desc": "Details", + "definition": { + "reset": { + "type": "Function", + "desc": "When called, it resets the component to its initial non-slided state", + "params": null, + "returns": null + } + } + } + } + }, + "top": { + "desc": "Emitted when user finished sliding the item up", + "addedIn": "v1.1.3", + "params": { + "details": { + "type": "Object", + "desc": "Details", + "definition": { + "reset": { + "type": "Function", + "desc": "When called, it resets the component to its initial non-slided state", + "params": null, + "returns": null + } + } + } + } + }, + "bottom": { + "desc": "Emitted when user finished sliding the item down", + "addedIn": "v1.1.3", + "params": { + "details": { + "type": "Object", + "desc": "Details", + "definition": { + "reset": { + "type": "Function", + "desc": "When called, it resets the component to its initial non-slided state", + "params": null, + "returns": null + } + } + } + } + }, + "slide": { + "desc": "Emitted while user is sliding the item to one of the available sides", + "params": { + "details": { + "type": "Object", + "desc": "Details", + "definition": { + "side": { + "type": "String", + "desc": "Side to which sliding is taking effect", + "values": [ + "left", + "right", + "top", + "bottom" + ] + }, + "ratio": { + "type": "Number", + "desc": "Ratio of how much of the required slide was performed (0..1)", + "examples": [ + 0, + 0.5, + 1 + ] + }, + "isReset": { + "type": "Boolean", + "desc": "Ratio has been reset" + } + } + } + }, + "addedIn": "v1.15.2" + }, + "action": { + "desc": "Emitted when user finished sliding the item to either sides", + "params": { + "details": { + "type": "Object", + "desc": "Details", + "definition": { + "side": { + "type": "String", + "desc": "Side to which sliding has taken effect", + "values": [ + "left", + "right", + "top", + "bottom" + ] + }, + "reset": { + "type": "Function", + "desc": "When called, it resets the component to its initial non-slided state", + "params": null, + "returns": null + } + } + } + } + } + }, + "methods": { + "reset": { + "desc": "Reset to initial state (not swiped to any side)" + } + } +} \ No newline at end of file diff --git a/dist/api/QSlideTransition.json b/dist/api/QSlideTransition.json new file mode 100644 index 00000000000..7b8062221f0 --- /dev/null +++ b/dist/api/QSlideTransition.json @@ -0,0 +1,38 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/slide-transition" + }, + "props": { + "appear": { + "type": "Boolean", + "desc": "If set to true, the transition will be applied on the initial render.", + "category": "behavior" + }, + "duration": { + "type": "Number", + "desc": "Duration (in milliseconds) enabling animated scroll.", + "default": 300, + "examples": [ + 500, + ":duration=\"500\"" + ], + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "This is where content goes" + } + }, + "events": { + "show": { + "desc": "Emitted when component show animation is finished", + "addedIn": "v1.9" + }, + "hide": { + "desc": "Emitted when component hide animation is finished", + "addedIn": "v1.9" + } + } +} \ No newline at end of file diff --git a/dist/api/QSlider.json b/dist/api/QSlider.json new file mode 100644 index 00000000000..f9ace7a5c6d --- /dev/null +++ b/dist/api/QSlider.json @@ -0,0 +1,666 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/slider" + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "min": { + "type": "Number", + "desc": "Minimum value of the model; Set track's minimum value", + "default": 0, + "examples": [ + ":min=\"0\"" + ], + "category": "model" + }, + "max": { + "type": "Number", + "desc": "Maximum value of the model; Set track's maximum value", + "default": 100, + "examples": [ + ":max=\"100\"" + ], + "category": "model" + }, + "inner-min": { + "type": "Number", + "desc": "Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop", + "examples": [ + ":inner-min=\"0\"" + ], + "category": "model", + "addedIn": "v1.17" + }, + "inner-max": { + "type": "Number", + "desc": "Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop", + "examples": [ + ":inner-max=\"100\"" + ], + "category": "model", + "addedIn": "v1.17" + }, + "step": { + "type": "Number", + "desc": "Specify step amount between valid values (> 0.0); When step equals to 0 it defines infinite granularity", + "default": 1, + "examples": [ + ":step=\"1\"" + ], + "category": "model" + }, + "snap": { + "type": "Boolean", + "desc": "Snap on valid values, rather than sliding freely; Suggestion: use with 'step' prop", + "category": "behavior" + }, + "reverse": { + "type": "Boolean", + "desc": "Work in reverse (changes direction)", + "category": "behavior", + "addedIn": "v1.5" + }, + "vertical": { + "type": "Boolean", + "desc": "Display in vertical direction", + "category": "behavior", + "addedIn": "v1.10" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "track-color": { + "type": "String", + "desc": "Color name for the track (can be 'transparent' too) from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.17" + }, + "track-img": { + "type": "String", + "desc": "Apply a pattern image on the track", + "transformAssetUrls": true, + "examples": [ + "~assets/my-pattern.png" + ], + "category": "style", + "addedIn": "v1.17" + }, + "inner-track-color": { + "type": "String", + "desc": "Color name for the inner track (can be 'transparent' too) from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.17" + }, + "inner-track-img": { + "type": "String", + "desc": "Apply a pattern image on the inner track", + "transformAssetUrls": true, + "examples": [ + "~assets/my-pattern.png" + ], + "category": "style", + "addedIn": "v1.17" + }, + "selection-color": { + "type": "String", + "desc": "Color name for the selection bar (can be 'transparent' too) from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.17" + }, + "selection-img": { + "type": "String", + "desc": "Apply a pattern image on the selection bar", + "transformAssetUrls": true, + "examples": [ + "~assets/my-pattern.png" + ], + "category": "style", + "addedIn": "v1.17" + }, + "label": { + "type": "Boolean", + "desc": "Popup a label when user clicks/taps on the slider thumb and moves it", + "category": "content" + }, + "label-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "label-text-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.1" + }, + "switch-label-side": { + "type": "Boolean", + "desc": "Switch the position of the label (top <-> bottom or left <-> right)", + "category": "style", + "addedIn": "v1.17" + }, + "label-always": { + "type": "Boolean", + "desc": "Always display the label", + "category": "behavior|content" + }, + "markers": { + "type": [ + "Boolean", + "Number" + ], + "desc": "Display markers on the track, one for each possible value for the model or using a custom step (when specifying a Number)", + "category": "content", + "examples": [ + "markers", + ":markers=\"5\"" + ] + }, + "marker-labels": { + "type": [ + "Boolean", + "Array", + "Object", + "Function" + ], + "tsType": "SliderMarkerLabels", + "desc": "Configure the marker labels (or show the default ones if 'true'); Array of definition Objects or Object with key-value where key is the model and the value is the marker label definition", + "definition": { + "value": { + "type": "Number", + "required": true, + "desc": "Value of equivalent model where to position the marker" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "Label to use" + }, + "classes": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS classes to be attributed to the marker label", + "examples": [ + "my-class-name" + ] + }, + "style": { + "type": "Object", + "desc": "Style definitions to be attributed to the marker label", + "examples": [ + "{ height: '24px' }" + ] + } + }, + "params": { + "value": { + "type": "Number", + "desc": "The marker value to transform", + "required": true, + "examples": [ + "5" + ] + } + }, + "returns": { + "type": [ + "String", + "Object" + ], + "desc": "Marker definition Object or directly a String for the label of the marker", + "definition": { + "value": { + "type": "Number", + "desc": "Value of equivalent model where to position the marker" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "Label to use" + }, + "classes": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS classes to be attributed to the marker label", + "examples": [ + "my-class-name" + ] + }, + "style": { + "type": "Object", + "desc": "Style definitions to be attributed to the marker label", + "examples": [ + "{ height: '24px' }" + ] + } + } + }, + "category": "content", + "examples": [ + true, + "[ { value: 0, label: '0%' }, { value: 5, classes: 'my-class', style: { width: '24px' } } ]", + "{ 0: '0%', 5: { label: '5%', classes: 'my-class', style: { width: '24px' } } }", + "val => (10 * val) + '%'", + "val => ({ label: (10 * val) + '%', classes: 'my-class', style: { width: '24px' } })" + ], + "addedIn": "v1.17" + }, + "marker-labels-class": { + "type": "String", + "desc": "CSS class(es) to apply to the marker labels container", + "examples": [ + "text-orange" + ], + "category": "style", + "addedIn": "v1.17" + }, + "switch-marker-labels-side": { + "type": "Boolean", + "desc": "Switch the position of the marker labels (top <-> bottom or left <-> right)", + "category": "style", + "addedIn": "v1.17" + }, + "track-size": { + "type": "String", + "desc": "Track size (including CSS unit)", + "default": "4px", + "examples": [ + "35px" + ], + "category": "style", + "addedIn": "v1.17" + }, + "thumb-size": { + "type": "String", + "desc": "Thumb size (including CSS unit)", + "default": "20px", + "examples": [ + "20px" + ], + "category": "style", + "addedIn": "v1.17" + }, + "thumb-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.17" + }, + "thumb-path": { + "type": "String", + "desc": "Set custom thumb svg path", + "default": "M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0", + "examples": [ + "M5 5 h10 v10 h-10 v-10" + ], + "category": "style", + "addedIn": "v1.5.10" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "value": { + "type": "Number", + "desc": "Model of the component (must be between min/max); Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ + "v-model=\"positionModel\"" + ], + "category": "model" + }, + "label-value": { + "type": [ + "String", + "Number" + ], + "desc": "Override default label value", + "examples": [ + ":label-value=\"model + 'px'\"" + ], + "category": "content" + } + }, + "scopedSlots": { + "marker-label": { + "desc": "What to be used to display the marker label", + "addedIn": "v1.17", + "scope": { + "marker": { + "type": "Object", + "desc": "Config for current marker label", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the marker label (0-based)" + }, + "value": { + "type": "Number", + "desc": "Equivalent model value for the marker label" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "Configured label for the marker" + }, + "classes": { + "type": "String", + "desc": "Required CSS classes to be applied to the marker element" + }, + "style": { + "type": "Object", + "desc": "Style definitions to be attributed to the marker label", + "examples": [ + "{ height: '24px' }" + ] + } + } + }, + "markerList": { + "type": "Array", + "desc": "Array of marker label configs", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the marker label (0-based)" + }, + "value": { + "type": "Number", + "desc": "Equivalent model value for the marker label" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "Configured label for the marker" + }, + "classes": { + "type": "String", + "desc": "Required CSS classes to be applied to the marker element" + }, + "style": { + "type": "Object", + "desc": "Style definitions to be attributed to the marker label", + "examples": [ + "{ height: '24px' }" + ] + } + } + }, + "markerMap": { + "type": "Object", + "desc": "Object with key-value where key is the model and the value is the marker label config", + "definition": { + "...key": { + "type": "Object", + "desc": "Marker label config", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the marker label (0-based)" + }, + "value": { + "type": "Number", + "desc": "Equivalent model value for the marker label" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "Configured label for the marker" + }, + "classes": { + "type": "String", + "desc": "Required CSS classes to be applied to the marker element" + }, + "style": { + "type": "Object", + "desc": "Style definitions to be attributed to the marker label", + "examples": [ + "{ height: '24px' }" + ] + } + } + } + } + }, + "classes": { + "type": "String", + "desc": "Required CSS classes to be applied to the marker element" + }, + "getStyle": { + "type": "Function", + "desc": "Get CSS style Object to apply to a marker element at respective model value; For perf reasons, use only if requested model value is not already part of markerMap", + "params": { + "value": { + "type": "Number", + "desc": "The marker label equivalent model value", + "required": true, + "examples": [ + "5" + ] + } + }, + "returns": { + "type": "Object", + "desc": "CSS style Object to apply to a marker element at respective model value" + } + } + } + }, + "marker-label-group": { + "desc": "What to be used to display the marker label group", + "addedIn": "v1.17", + "scope": { + "markerList": { + "type": "Array", + "desc": "Array of marker label configs", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the marker label (0-based)" + }, + "value": { + "type": "Number", + "desc": "Equivalent model value for the marker label" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "Configured label for the marker" + }, + "classes": { + "type": "String", + "desc": "Required CSS classes to be applied to the marker element" + }, + "style": { + "type": "Object", + "desc": "Style definitions to be attributed to the marker label", + "examples": [ + "{ height: '24px' }" + ] + } + } + }, + "markerMap": { + "type": "Object", + "desc": "Object with key-value where key is the model and the value is the marker label config", + "definition": { + "...key": { + "type": "Object", + "desc": "Marker label config", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the marker label (0-based)" + }, + "value": { + "type": "Number", + "desc": "Equivalent model value for the marker label" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "Configured label for the marker" + }, + "classes": { + "type": "String", + "desc": "Required CSS classes to be applied to the marker element" + }, + "style": { + "type": "Object", + "desc": "Style definitions to be attributed to the marker label", + "examples": [ + "{ height: '24px' }" + ] + } + } + } + } + }, + "classes": { + "type": "String", + "desc": "Required CSS classes to be applied to the marker element" + }, + "getStyle": { + "type": "Function", + "desc": "Get CSS style Object to apply to a marker element at respective model value; For perf reasons, use only if requested model value is not already part of markerMap", + "params": { + "value": { + "type": "Number", + "desc": "The marker label equivalent model value", + "required": true, + "examples": [ + "5" + ] + } + }, + "returns": { + "type": "Object", + "desc": "CSS style Object to apply to a marker element at respective model value" + } + } + } + } + }, + "events": { + "change": { + "desc": "Emitted on lazy model value change (after user slides then releases the thumb)", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + }, + "pan": { + "desc": "Triggered when user starts panning on the component", + "params": { + "phase": { + "type": "String", + "desc": "Phase of panning", + "values": [ + "start", + "end" + ] + } + }, + "addedIn": "v1.14" + }, + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QSpace.json b/dist/api/QSpace.json new file mode 100644 index 00000000000..810c4116d45 --- /dev/null +++ b/dist/api/QSpace.json @@ -0,0 +1,11 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/space" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinner.json b/dist/api/QSpinner.json new file mode 100644 index 00000000000..aad03c60338 --- /dev/null +++ b/dist/api/QSpinner.json @@ -0,0 +1,43 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "thickness": { + "type": "Number", + "desc": "Override value to use for stroke-width", + "default": 5, + "examples": [ + "2", + "5" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerAudio.json b/dist/api/QSpinnerAudio.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerAudio.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerBall.json b/dist/api/QSpinnerBall.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerBall.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerBars.json b/dist/api/QSpinnerBars.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerBars.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerBox.json b/dist/api/QSpinnerBox.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerBox.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerClock.json b/dist/api/QSpinnerClock.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerClock.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerComment.json b/dist/api/QSpinnerComment.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerComment.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerCube.json b/dist/api/QSpinnerCube.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerCube.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerDots.json b/dist/api/QSpinnerDots.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerDots.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerFacebook.json b/dist/api/QSpinnerFacebook.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerFacebook.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerGears.json b/dist/api/QSpinnerGears.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerGears.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerGrid.json b/dist/api/QSpinnerGrid.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerGrid.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerHearts.json b/dist/api/QSpinnerHearts.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerHearts.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerHourglass.json b/dist/api/QSpinnerHourglass.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerHourglass.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerInfinity.json b/dist/api/QSpinnerInfinity.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerInfinity.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerIos.json b/dist/api/QSpinnerIos.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerIos.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerOrbit.json b/dist/api/QSpinnerOrbit.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerOrbit.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerOval.json b/dist/api/QSpinnerOval.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerOval.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerPie.json b/dist/api/QSpinnerPie.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerPie.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerPuff.json b/dist/api/QSpinnerPuff.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerPuff.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerRadio.json b/dist/api/QSpinnerRadio.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerRadio.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerRings.json b/dist/api/QSpinnerRings.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerRings.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSpinnerTail.json b/dist/api/QSpinnerTail.json new file mode 100644 index 00000000000..94b18571004 --- /dev/null +++ b/dist/api/QSpinnerTail.json @@ -0,0 +1,33 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/spinners" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + } + } +} \ No newline at end of file diff --git a/dist/api/QSplitter.json b/dist/api/QSplitter.json new file mode 100644 index 00000000000..4bf492544ed --- /dev/null +++ b/dist/api/QSplitter.json @@ -0,0 +1,161 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/splitter" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "value": { + "type": "Number", + "desc": "Model of the component defining the size of first panel (or second if using reverse) in the unit specified (for '%' it's the split ratio percent - 0.0 < x < 100.0; for 'px' it's the size in px); Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ + "v-model=\"ratio\"" + ], + "category": "model" + }, + "reverse": { + "type": "Boolean", + "desc": "Apply the model size to the second panel (by default it applies to the first)", + "category": "model", + "addedIn": "v1.2.6" + }, + "unit": { + "type": "String", + "desc": "CSS unit for the model", + "default": "%", + "values": [ + "%", + "px" + ], + "category": "model", + "addedIn": "v1.2.6" + }, + "emit-immediately": { + "type": "Boolean", + "desc": "Emit model while user is panning on the separator", + "category": "model" + }, + "horizontal": { + "type": "Boolean", + "desc": "Allows the splitter to split its two panels horizontally, instead of vertically", + "category": "content" + }, + "limits": { + "type": "Array", + "desc": "An array of two values representing the minimum and maximum split size of the two panels; When 'px' unit is set then you can use Infinity as the second value to make it unbound on the other side", + "default": "For '%' unit: [10, 90]; For 'px' unit: [50, Infinity]", + "examples": [ + ":limits=\"[30, 70]\"", + ":limits=\"[0, Infinity]\"" + ], + "category": "content|model" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general", + "addedIn": "v1.18.6" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "before-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the 'before' panel", + "examples": [ + "bg-deep-orange", + ":before-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "after-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the 'after' panel", + "examples": [ + "bg-deep-orange", + ":after-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "separator-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the splitter separator", + "examples": [ + "bg-deep-orange", + ":separator-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "separator-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the splitter separator", + "examples": [ + "background-color: #ff0000", + ":separator-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Applies a default lighter color on the separator; To be used when background is darker; Avoid using when you are overriding through separator-class or separator-style props", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component; Suggestion: QTooltip, QMenu" + }, + "before": { + "desc": "Content of the panel on left/top" + }, + "after": { + "desc": "Content of the panel on right/bottom" + }, + "separator": { + "desc": "Content to be placed inside the separator; By default it is centered" + } + }, + "events": { + "input": { + "desc": "Emitted when component's model value changes; Is also used by v-model", + "params": { + "value": { + "type": "Number", + "desc": "New model value (0.0 < x < 100.0) defining the ratio between panels", + "examples": [ + 0.22 + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QStep.json b/dist/api/QStep.json new file mode 100644 index 00000000000..a25dacffe1f --- /dev/null +++ b/dist/api/QStep.json @@ -0,0 +1,163 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/stepper" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "name": { + "type": "Any", + "desc": "Panel name", + "required": true, + "examples": [ + "accounts", + "firstPanel", + ":name=\"1\"" + ], + "category": "general" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "header" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "title": { + "type": "String", + "desc": "Step title", + "required": true, + "examples": [ + "Ad Groups", + "Payment" + ], + "category": "header" + }, + "caption": { + "type": "String", + "desc": "Step’s additional information that appears beneath the title", + "examples": [ + "Create an account", + "Payment details" + ], + "category": "header" + }, + "prefix": { + "type": [ + "String", + "Number" + ], + "desc": "Step's prefix (max 2 characters) which replaces the icon if the step is not currently active and it isn't marked with error or as 'done', or if the specific icon for the state is 'none'", + "examples": [ + "1", + "2", + "A", + "B" + ], + "category": "header" + }, + "done-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "header" + }, + "done-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "header" + }, + "active-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "header" + }, + "active-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "header" + }, + "error-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "header" + }, + "error-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "header" + }, + "header-nav": { + "type": "Boolean", + "default": true, + "desc": "Allow navigation through the header", + "category": "behavior" + }, + "done": { + "type": "Boolean", + "desc": "Mark the step as 'done'", + "category": "state" + }, + "error": { + "type": "Boolean", + "desc": "Mark the step as having an error", + "category": "state" + } + }, + "slots": { + "default": { + "desc": "The content of the step; Can also contain a QStepperNavigation if you want to handle step navigation and don't have a global navigation in place" + } + } +} \ No newline at end of file diff --git a/dist/api/QStepper.json b/dist/api/QStepper.json new file mode 100644 index 00000000000..a916db973d0 --- /dev/null +++ b/dist/api/QStepper.json @@ -0,0 +1,325 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/stepper" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "value": { + "type": "Any", + "desc": "Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive.", + "examples": [ + "v-model=\"panelName\"" + ], + "category": "model" + }, + "keep-alive": { + "type": "Boolean", + "desc": "Equivalent to using Vue's native component on the content", + "category": "behavior" + }, + "keep-alive-include": { + "type": [ + "String", + "Array", + "RegExp" + ], + "desc": "Equivalent to using Vue's native include prop for ; Values must be valid Vue component names", + "examples": [ + "a,b", + "/a|b/", + "['a', 'b']" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "keep-alive-exclude": { + "type": [ + "String", + "Array", + "RegExp" + ], + "desc": "Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names", + "examples": [ + "a,b", + "/a|b/", + "['a', 'b']" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "keep-alive-max": { + "type": "Number", + "desc": "Equivalent to using Vue's native max prop for ", + "examples": [ + "2" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "animated": { + "type": "Boolean", + "desc": "Enable transitions between panel (also see 'transition-prev' and 'transition-next' props)", + "category": "behavior" + }, + "infinite": { + "type": "Boolean", + "desc": "Makes component appear as infinite (when reaching last panel, next one will become the first one)", + "category": "behavior" + }, + "swipeable": { + "type": "Boolean", + "desc": "Enable swipe events (may interfere with content's touch/mouse events)", + "category": "behavior" + }, + "vertical": { + "type": "Boolean", + "desc": "Put Stepper in vertical mode (instead of horizontal by default)", + "category": "behavior" + }, + "transition-prev": { + "type": "String", + "desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "slide-right/slide-down" + }, + "transition-next": { + "type": "String", + "desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "slide-left/slide-up" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "alternative-labels": { + "type": "Boolean", + "desc": "Use alternative labels - stacks the icon on top of the label (applies only to horizontal stepper)", + "category": "header" + }, + "header-nav": { + "type": "Boolean", + "desc": "Allow navigation through the header", + "category": "behavior" + }, + "contracted": { + "type": "Boolean", + "desc": "Hide header labels on narrow windows", + "category": "header|behavior" + }, + "inactive-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "header" + }, + "inactive-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "header" + }, + "done-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "header" + }, + "done-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "header" + }, + "active-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "header" + }, + "active-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "header" + }, + "error-icon": { + "type": "String", + "desc": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "header" + }, + "error-color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "header" + }, + "header-class": { + "type": "String", + "desc": "Class definitions to be attributed to the header", + "examples": [ + "my-special-class" + ], + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Suggestion: QStep" + }, + "navigation": { + "desc": "Slot specific for the global navigation; Suggestion: QStepperNavigation" + }, + "message": { + "desc": "Slot specific for putting a message on top of each step (if horizontal stepper) or above steps (if vertical); Suggestion: QBanner, div.q-pa-lg" + } + }, + "events": { + "input": { + "desc": "Emitted when the component changes the model; This event _isn't_ fired if the model is changed externally; Is also used by v-model", + "params": { + "value": { + "type": [ + "String", + "Number" + ], + "desc": "New current panel name", + "examples": [ + "dashboard" + ] + } + } + }, + "before-transition": { + "desc": "Emitted before transitioning to a new panel", + "params": { + "newVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name towards transition is going", + "examples": [ + "dashboard" + ] + }, + "oldVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name from which transition is happening", + "examples": [ + "dashboard" + ] + } + } + }, + "transition": { + "desc": "Emitted after component transitioned to a new panel", + "params": { + "newVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name towards transition has occurred", + "examples": [ + "dashboard" + ] + }, + "oldVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name from which transition has happened", + "examples": [ + "dashboard" + ] + } + } + } + }, + "methods": { + "next": { + "desc": "Go to next panel" + }, + "previous": { + "desc": "Go to previous panel" + }, + "goTo": { + "desc": "Go to specific panel", + "params": { + "panelName": { + "type": [ + "String", + "Number" + ], + "desc": "Panel's name, which may be a String or Number; Number does not refers to panel index, but to its name, which may be an Integer", + "required": true, + "examples": [ + "dashboard" + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QStepperNavigation.json b/dist/api/QStepperNavigation.json new file mode 100644 index 00000000000..45f415efbf0 --- /dev/null +++ b/dist/api/QStepperNavigation.json @@ -0,0 +1,16 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/stepper" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "slots": { + "default": { + "desc": "The content of the custom navigation, child of a QStep or of a QStepper (globally, through 'navigation' slot)" + } + } +} \ No newline at end of file diff --git a/dist/api/QTab.json b/dist/api/QTab.json new file mode 100644 index 00000000000..a58fba8da6b --- /dev/null +++ b/dist/api/QTab.json @@ -0,0 +1,118 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tabs" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "ripple": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Configure material ripple (disable it by setting it to 'false' or supply a config object)", + "default": true, + "examples": [ + false, + "{ early: true, center: true, color: 'teal', keyCodes: [] }" + ], + "category": "style" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "label": { + "type": [ + "Number", + "String" + ], + "desc": "A number or string to label the tab", + "examples": [ + "Home" + ], + "category": "content" + }, + "alert": { + "type": [ + "Boolean", + "String" + ], + "desc": "Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color", + "examples": [ + "alert", + "alert=\"purple\"" + ], + "category": "content" + }, + "alert-icon": { + "type": "String", + "desc": "Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop", + "examples": [ + "alert-icon=\"alarm_on\"" + ], + "category": "content", + "addedIn": "v1.9.14" + }, + "name": { + "type": [ + "Number", + "String" + ], + "desc": "Panel name", + "default": "A random UID", + "examples": [ + "home", + ":name=\"1\"" + ], + "category": "general" + }, + "no-caps": { + "type": "Boolean", + "desc": "Turns off capitalizing all letters within the tab (which is the default)", + "category": "content" + }, + "content-class": { + "type": "String", + "desc": "Class definitions to be attributed to the content wrapper", + "examples": [ + "my-special-class" + ], + "category": "style", + "addedIn": "v1.12" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + } + }, + "slots": { + "default": { + "desc": "Suggestion: QMenu, QTooltip" + } + } +} \ No newline at end of file diff --git a/dist/api/QTabPanel.json b/dist/api/QTabPanel.json new file mode 100644 index 00000000000..43ad7cfdaa6 --- /dev/null +++ b/dist/api/QTabPanel.json @@ -0,0 +1,40 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tab-panels" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "name": { + "type": "Any", + "desc": "Panel name", + "required": true, + "examples": [ + "accounts", + "firstPanel", + ":name=\"1\"" + ], + "category": "general" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.3" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QTabPanels.json b/dist/api/QTabPanels.json new file mode 100644 index 00000000000..a03593505ee --- /dev/null +++ b/dist/api/QTabPanels.json @@ -0,0 +1,201 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tab-panels" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "value": { + "type": "Any", + "desc": "Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive.", + "examples": [ + "v-model=\"panelName\"" + ], + "category": "model" + }, + "keep-alive": { + "type": "Boolean", + "desc": "Equivalent to using Vue's native component on the content", + "category": "behavior" + }, + "keep-alive-include": { + "type": [ + "String", + "Array", + "RegExp" + ], + "desc": "Equivalent to using Vue's native include prop for ; Values must be valid Vue component names", + "examples": [ + "a,b", + "/a|b/", + "['a', 'b']" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "keep-alive-exclude": { + "type": [ + "String", + "Array", + "RegExp" + ], + "desc": "Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names", + "examples": [ + "a,b", + "/a|b/", + "['a', 'b']" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "keep-alive-max": { + "type": "Number", + "desc": "Equivalent to using Vue's native max prop for ", + "examples": [ + "2" + ], + "category": "behavior", + "addedIn": "v1.15" + }, + "animated": { + "type": "Boolean", + "desc": "Enable transitions between panel (also see 'transition-prev' and 'transition-next' props)", + "category": "behavior" + }, + "infinite": { + "type": "Boolean", + "desc": "Makes component appear as infinite (when reaching last panel, next one will become the first one)", + "category": "behavior" + }, + "swipeable": { + "type": "Boolean", + "desc": "Enable swipe events (may interfere with content's touch/mouse events)", + "category": "behavior" + }, + "vertical": { + "type": "Boolean", + "desc": "Default transitions and swipe actions will be on the vertical axis", + "category": "behavior" + }, + "transition-prev": { + "type": "String", + "desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "slide-right/slide-down" + }, + "transition-next": { + "type": "String", + "desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "slide-left/slide-up" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "input": { + "desc": "Emitted when the component changes the model; This event _isn't_ fired if the model is changed externally; Is also used by v-model", + "params": { + "value": { + "type": [ + "String", + "Number" + ], + "desc": "New current panel name", + "examples": [ + "dashboard" + ] + } + } + }, + "before-transition": { + "desc": "Emitted before transitioning to a new panel", + "params": { + "newVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name towards transition is going", + "examples": [ + "dashboard" + ] + }, + "oldVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name from which transition is happening", + "examples": [ + "dashboard" + ] + } + } + }, + "transition": { + "desc": "Emitted after component transitioned to a new panel", + "params": { + "newVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name towards transition has occurred", + "examples": [ + "dashboard" + ] + }, + "oldVal": { + "type": [ + "String", + "Number" + ], + "desc": "Panel name from which transition has happened", + "examples": [ + "dashboard" + ] + } + } + } + }, + "methods": { + "next": { + "desc": "Go to next panel" + }, + "previous": { + "desc": "Go to previous panel" + }, + "goTo": { + "desc": "Go to specific panel", + "params": { + "panelName": { + "type": [ + "String", + "Number" + ], + "desc": "Panel's name, which may be a String or Number; Number does not refers to panel index, but to its name, which may be an Integer", + "required": true, + "examples": [ + "dashboard" + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QTable.json b/dist/api/QTable.json new file mode 100644 index 00000000000..4c9e0810e17 --- /dev/null +++ b/dist/api/QTable.json @@ -0,0 +1,2737 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/table" + }, + "props": { + "fullscreen": { + "type": "Boolean", + "sync": true, + "desc": "Fullscreen mode", + "examples": [ + ":fullscreen.sync=\"isFullscreen\"" + ], + "category": "behavior" + }, + "no-route-fullscreen-exit": { + "type": "Boolean", + "desc": "Changing route app won't exit fullscreen", + "category": "behavior", + "addedIn": "v1.1.7" + }, + "data": { + "type": "Array", + "desc": "Rows of data to display", + "examples": [ + ":data=\"myData\"" + ], + "category": "general" + }, + "row-key": { + "type": [ + "String", + "Function" + ], + "desc": "Property of each row that defines the unique key of each row (the result must be a primitive, not Object, Array, etc); The value of property must be string or a function taking a row and returning the desired (nested) key in the row; If supplying a function then for best performance, reference it from your scope and do not define it inline", + "default": "id", + "examples": [ + "row-key=\"name\"", + ":row-key=\"row => row.name\"" + ], + "category": "general" + }, + "virtual-scroll": { + "type": "Boolean", + "desc": "Display data using QVirtualScroll (for non-grid mode only)", + "category": "virtual-scroll", + "addedIn": "v1.2" + }, + "virtual-scroll-slice-size": { + "type": [ + "Number", + "String" + ], + "desc": "Minimum number of rows to render in the virtual list", + "default": "30", + "examples": [ + "virtual-scroll-slice-size=\"60\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.2" + }, + "virtual-scroll-slice-ratio-before": { + "type": [ + "Number", + "String" + ], + "desc": "Ratio of number of rows in visible zone to render before it", + "default": "1", + "examples": [ + "virtual-scroll-slice-ratio-before=\"0.3\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.14.7" + }, + "virtual-scroll-slice-ratio-after": { + "type": [ + "Number", + "String" + ], + "desc": "Ratio of number of rows in visible zone to render after it", + "default": "1", + "examples": [ + "virtual-scroll-slice-ratio-after=\"2\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.14.7" + }, + "virtual-scroll-item-size": { + "type": [ + "Number", + "String" + ], + "desc": "Default size in pixels of a row; This value is used for rendering the initial table; Try to use a value close to the minimum size of a row", + "default": "48 (24 if dense)", + "examples": [ + "virtual-scroll-item-size=\"48\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.2" + }, + "virtual-scroll-sticky-size-start": { + "type": [ + "Number", + "String" + ], + "desc": "Size in pixels of the sticky header (if using one); A correct value will improve scroll precision; Will be also used for non-virtual-scroll tables for fixing top alignment when using scrollTo method", + "default": "0", + "examples": [ + "virtual-scroll-sticky-size-start=\"48\"" + ], + "category": "virtual-scroll|behavior", + "addedIn": "v1.2" + }, + "virtual-scroll-sticky-size-end": { + "type": [ + "Number", + "String" + ], + "desc": "Size in pixels of the sticky footer part (if using one); A correct value will improve scroll precision", + "default": "0", + "examples": [ + "virtual-scroll-sticky-size-end=\"48\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.2" + }, + "table-colspan": { + "type": [ + "Number", + "String" + ], + "desc": "The number of columns in the table (you need this if you use table-layout: fixed)", + "examples": [ + "table-colspan=\"12\"" + ], + "category": "virtual-scroll|content", + "addedIn": "v1.13" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8" + }, + "icon-first-page": { + "type": "String", + "desc": "Icon name following Quasar convention for stepping to first page; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.12" + }, + "icon-prev-page": { + "type": "String", + "desc": "Icon name following Quasar convention for stepping to previous page; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.12" + }, + "icon-next-page": { + "type": "String", + "desc": "Icon name following Quasar convention for stepping to next page; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.12" + }, + "icon-last-page": { + "type": "String", + "desc": "Icon name following Quasar convention for stepping to last page; Make sure you have the icon library installed unless you are using 'img:' prefix", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content", + "addedIn": "v1.12" + }, + "grid": { + "type": "Boolean", + "desc": "Display data as a grid instead of the default table", + "category": "behavior" + }, + "grid-header": { + "type": "Boolean", + "desc": "Display header for grid-mode also", + "category": "behavior|content" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; Connect with $q.screen for responsive behavior", + "category": "style" + }, + "columns": { + "type": "Array", + "desc": "The column definitions (Array of Objects)", + "examples": [ + ":columns=\"tableColumns\"" + ], + "category": "column", + "definition": { + "name": { + "type": "String", + "desc": "Unique id, identifies column, (used by pagination.sortBy, 'body-cell-[name]' slot, ...)", + "required": true, + "examples": [ + "desc" + ] + }, + "label": { + "type": "String", + "desc": "Label for header", + "required": true, + "examples": [ + "Dessert (100g serving)" + ] + }, + "field": { + "type": [ + "String", + "Function" + ], + "desc": "Row Object property to determine value for this column or function which maps to the required property", + "required": true, + "examples": [ + "name", + "row => row.some.nested.prop" + ] + }, + "required": { + "type": "Boolean", + "desc": "If we use visible-columns, this col will always be visible", + "default": false + }, + "align": { + "type": "String", + "desc": "Horizontal alignment of cells in this column", + "default": "right", + "examples": [ + "left", + "right", + "center" + ] + }, + "sortable": { + "type": "Boolean", + "desc": "Tell QTable you want this column sortable", + "default": false + }, + "sort": { + "type": "Function", + "desc": "Compare function if you have some custom data or want a specific way to compare two rows", + "examples": [ + "(a, b, rowA, rowB) => parseInt(a, 10) - parseInt(b, 10)" + ], + "params": { + "a": { + "type": "Any", + "desc": "Value of the first comparison term", + "examples": [ + 123, + "abc" + ] + }, + "b": { + "type": "Any", + "desc": "Value of the second comparison term", + "examples": [ + 123, + "abc" + ] + }, + "rowA": { + "type": "Object", + "desc": "Full Row object in which is contained the first term", + "examples": [ + "{ name: 'Potassium', value: 'K' }" + ] + }, + "rowB": { + "type": "Object", + "desc": "Full Row object in which is contained the second term", + "examples": [ + "{ name: 'Fluorine', value: 'F' }" + ] + } + }, + "returns": { + "type": "Number", + "desc": "Comparison result of term 'a' with term 'b'. Less than 0 when 'a' should come first; greater than 0 if 'b' should come first; equal to 0 if their position must not be changed with respect to each other", + "examples": [ + "-1", + "0", + "1" + ] + } + }, + "sortOrder": { + "type": "String", + "desc": "Set column sort order: 'ad' (ascending-descending) or 'da' (descending-ascending); Overrides the 'column-sort-order' prop", + "values": [ + "ad", + "da" + ], + "default": "ad", + "addedIn": "v1.15.11" + }, + "format": { + "type": "Function", + "desc": "Function you can apply to format your data", + "examples": [ + "(val, row) => `${val}%`", + "val => val ? /* Unicode checkmark checked */ '☑' : /* Unicode checkmark unchecked */ '☐'" + ], + "params": { + "val": { + "type": "Any", + "desc": "Value of the cell", + "examples": [ + 123, + "abc" + ] + }, + "row": { + "type": "Object", + "desc": "Full Row object in which the cell is contained", + "examples": [ + "{ name: 'Potassium', value: 'K' }" + ] + } + }, + "returns": { + "type": "Any", + "desc": "The resulting formatted value", + "examples": [ + "20%" + ] + } + }, + "style": { + "type": [ + "String", + "Function" + ], + "desc": "Style to apply on normal cells of the column; The Function form requires v1.15.15+", + "examples": [ + "width: 500px", + "row => (row.calories % 2 === 0 ? 'width:10px' : 'font-size:2em')" + ] + }, + "classes": { + "type": [ + "String", + "Function" + ], + "desc": "Classes to add on normal cells of the column; The Function form requires v1.15.15+", + "examples": [ + "my-special-class", + "row => (row.calories % 2 === 0 ? 'bg-green' : 'bg-yellow')" + ] + }, + "headerStyle": { + "type": "String", + "desc": "Style to apply on header cells of the column", + "examples": [ + "width: 500px" + ], + "addedIn": "v1.3" + }, + "headerClasses": { + "type": "String", + "desc": "Classes to add on header cells of the column", + "examples": [ + "my-special-class" + ], + "addedIn": "v1.3" + } + } + }, + "visible-columns": { + "type": "Array", + "desc": "Array of Strings defining column names ('name' property of each column from 'columns' prop definitions); Columns marked as 'required' are not affected by this property", + "examples": [ + ":visible-columns=\"myCols\"", + "[ 'desc', 'carbs', 'protein' ]" + ], + "category": "column" + }, + "loading": { + "type": "Boolean", + "desc": "Put Table into 'loading' state; Notify the user something is happening behind the covers", + "category": "behavior|content" + }, + "title": { + "type": "String", + "desc": "Table title", + "examples": [ + "Device list" + ], + "category": "content" + }, + "hide-header": { + "type": "Boolean", + "desc": "Hide table header layer", + "category": "content" + }, + "hide-bottom": { + "type": "Boolean", + "desc": "Hide table bottom layer regardless of what it has to display", + "category": "content" + }, + "hide-selected-banner": { + "type": "Boolean", + "desc": "Hide the selected rows banner (if any)", + "category": "content", + "addedIn": "v1.12" + }, + "hide-no-data": { + "type": "Boolean", + "desc": "Hide the default no data bottom layer", + "category": "content", + "addedIn": "v1.12" + }, + "hide-pagination": { + "type": "Boolean", + "desc": "Hide the pagination controls at the bottom", + "category": "content", + "addedIn": "v1.12" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + "separator": { + "type": "String", + "desc": "Use a separator/border between rows, columns or all cells", + "default": "horizontal", + "values": [ + "horizontal", + "vertical", + "cell", + "none" + ], + "examples": [ + "cell" + ], + "category": "content" + }, + "wrap-cells": { + "type": "Boolean", + "desc": "Wrap text within table cells", + "category": "content" + }, + "binary-state-sort": { + "type": "Boolean", + "desc": "Skip the third state (unsorted) when user toggles column sort direction", + "category": "sorting" + }, + "column-sort-order": { + "type": "String", + "desc": "Set column sort order: 'ad' (ascending-descending) or 'da' (descending-ascending); It gets applied to all columns unless a column has its own sortOrder specified in the 'columns' definition prop", + "values": [ + "ad", + "da" + ], + "default": "ad", + "category": "sorting", + "addedIn": "v1.15.11" + }, + "no-data-label": { + "type": "String", + "desc": "Override default text to display when no data is available", + "examples": [ + "No devices available" + ], + "category": "content" + }, + "no-results-label": { + "type": "String", + "desc": "Override default text to display when user filters the table and no matched results are found", + "examples": [ + "No matched records" + ], + "category": "content" + }, + "loading-label": { + "type": "String", + "desc": "Override default text to display when table is in loading state (see 'loading' prop)", + "examples": [ + "Loading devices..." + ], + "category": "content" + }, + "selected-rows-label": { + "type": "Function", + "desc": "Text to display when user selected at least one row; For best performance, reference it from your scope and do not define it inline", + "params": { + "numberOfRows": { + "type": "Number", + "desc": "Number of rows available", + "examples": [ + 12 + ] + } + }, + "returns": { + "type": "String", + "desc": "Label to display", + "examples": [ + "5 rows are selected" + ] + }, + "examples": [ + ":selected-rows-label=\"getSelectedString\"" + ], + "category": "selection" + }, + "rows-per-page-label": { + "type": "String", + "desc": "Text to override default rows per page label at bottom of table", + "examples": [ + "Records per page:" + ], + "category": "pagination" + }, + "pagination-label": { + "type": "Function", + "desc": "Text to override default pagination label at bottom of table (unless 'pagination' scoped slot is used); For best performance, reference it from your scope and do not define it inline", + "params": { + "firstRowIndex": { + "type": "Number", + "desc": "Index of first displayed row", + "examples": [ + 1 + ] + }, + "endRowIndex": { + "type": "Number", + "desc": "Index of last displayed row", + "examples": [ + 10 + ] + }, + "totalRowsNumber": { + "type": "Number", + "desc": "Number of total rows available in data", + "examples": [ + 132 + ] + } + }, + "returns": { + "type": "String", + "desc": "Label to display", + "examples": [ + "1-10 of 132" + ] + }, + "examples": [ + ":pagination-label=\"getPaginationLabel\"" + ], + "category": "pagination" + }, + "table-style": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS style to apply to native HTML element's wrapper (which is a DIV)", + "examples": [ + "background-color: #ff0000", + ":table-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "table-class": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS classes to apply to native HTML
element's wrapper (which is a DIV)", + "examples": [ + "my-special-class", + ":table-class=\"{ 'my-special-class': [Boolean condition] }\"" + ], + "category": "style" + }, + "table-header-style": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS style to apply to header of native HTML
(which is a TR)", + "examples": [ + "background-color: #ff0000", + ":table-header-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "table-header-class": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS classes to apply to header of native HTML
(which is a TR)", + "examples": [ + "my-special-class", + ":table-header-class=\"{ 'my-special-class': [Boolean condition] }\"" + ], + "category": "style" + }, + "card-container-style": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS style to apply to the cards container (when in grid mode)", + "examples": [ + "background-color: #ff0000", + ":card-container-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style", + "addedIn": "v1.4" + }, + "card-container-class": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS classes to apply to the cards container (when in grid mode)", + "examples": [ + "my-special-class", + "justify-center", + ":card-container-class=\"{ 'my-special-class': [Boolean condition] }\"" + ], + "category": "style", + "addedIn": "v1.4" + }, + "card-style": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS style to apply to the card (when in grid mode) or container card (when not in grid mode)", + "examples": [ + "background-color: #ff0000", + ":card-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + "card-class": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS classes to apply to the card (when in grid mode) or container card (when not in grid mode)", + "examples": [ + "my-special-class", + ":card-class=\"{ 'my-special-class': [Boolean condition] }\"" + ], + "category": "style" + }, + "title-class": { + "type": [ + "String", + "Array", + "Object" + ], + "desc": "CSS classes to apply to the title (if using 'title' prop)", + "examples": [ + "my-special-class", + "text-h1", + ":title-class=\"{ 'text-h1': [Boolean condition] }\"" + ], + "category": "style", + "addedIn": "v1.13.2" + }, + "filter": { + "type": [ + "String", + "Object" + ], + "desc": "String/Object to filter table with; When using an Object it requires 'filter-method' to also be specified since it will be a custom filtering", + "examples": [ + ":filter=\"myFilterInput\"" + ], + "category": "filter" + }, + "filter-method": { + "type": "Function", + "desc": "The actual filtering mechanism; For best performance, reference it from your scope and do not define it inline", + "params": { + "rows": { + "type": "Array", + "desc": "Array of rows", + "required": true + }, + "terms": { + "type": [ + "String", + "Object" + ], + "desc": "Terms to filter with (is essentially the 'filter' prop value)", + "required": true + }, + "cols": { + "type": "Array", + "desc": "Optional column definitions" + }, + "getCellValue": { + "type": "Function", + "desc": "Optional function to get a cell value", + "params": { + "col": { + "type": "Object", + "desc": "Column name from column definitions" + }, + "row": { + "type": "Object", + "desc": "The row object" + } + }, + "returns": { + "type": "Any", + "desc": "Parsed/Processed cell value", + "examples": [ + "Ice Cream Sandwich" + ] + } + } + }, + "returns": { + "type": "Array", + "desc": "Filtered rows" + }, + "default": "(see source code)", + "examples": [ + "(see source code)" + ], + "category": "filter" + }, + "pagination": { + "type": "Object", + "desc": "Pagination object; You can use the '.sync' modifier on it if you want to have access on the current pagination in your components; When not using the .sync modifier it simply initializes the pagination on first render", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + }, + "rowsNumber": { + "type": "Number", + "desc": "For server-side fetching only. How many total database rows are there to be added to the table. If set, causes the QTable to emit @request when data is required.", + "examples": [ + 100, + 200 + ] + } + }, + "examples": [ + ":pagination.sync=\"myPagination\"" + ], + "category": "pagination" + }, + "rows-per-page-options": { + "type": "Array", + "desc": "Options for user to pick (Numbers); Number 0 means 'Show all rows in one page'", + "default": "[ 3, 5, 7, 10, 15, 20, 25, 50, 0 ]", + "examples": [ + ":rows-per-page-options=\"[10, 20]\"" + ], + "category": "pagination" + }, + "selection": { + "type": "String", + "desc": "Selection type", + "default": "none", + "values": [ + "single", + "multiple", + "none" + ], + "examples": [ + "multiple" + ], + "category": "selection" + }, + "selected": { + "type": "Array", + "desc": "Keeps the user selection array", + "sync": true, + "default": "[]", + "examples": [ + ":selected.sync=\"selection\"" + ], + "category": "selection" + }, + "expanded": { + "type": "Array", + "desc": "Keeps the array with expanded rows keys", + "sync": true, + "default": "[]", + "examples": [ + ":expanded.sync=\"expanded\"" + ], + "category": "expansion", + "addedIn": "v1.8.3" + }, + "sort-method": { + "type": "Function", + "desc": "The actual sort mechanism. Function (rows, sortBy, descending) => sorted rows; For best performance, reference it from your scope and do not define it inline", + "params": { + "rows": { + "type": "Array", + "desc": "Array with rows" + }, + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + } + }, + "returns": { + "type": "Array", + "desc": "Sorted rows" + }, + "default": "(see source code)", + "examples": [ + "(see source code)" + ], + "category": "sorting" + } + }, + "slots": { + "loading": { + "desc": "Override default effect when table is in loading state; Suggestion: QInnerLoading", + "addedIn": "v1.8" + } + }, + "scopedSlots": { + "item": { + "desc": "Slot to use for defining an item when in 'grid' mode; Suggestion: QCard", + "scope": { + "key": { + "type": "Any", + "desc": "Row/Item's key" + }, + "row": { + "type": "Object", + "desc": "Row/Item object" + }, + "rowIndex": { + "type": "Number", + "desc": "Row/Item's index (0 based) in the filtered and sorted table" + }, + "pageIndex": { + "type": "Number", + "desc": "Row/Item's index (0 based) in the current page of the filtered and sorted table" + }, + "cols": { + "type": "Object", + "desc": "Column definitions" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null, + "addedIn": "v1.14" + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row/item selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row/item expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.14" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style", + "addedIn": "v1.14" + } + } + }, + "body": { + "desc": "Slot to define how a body row looks like; Suggestion: QTr + Td", + "scope": { + "key": { + "type": "Any", + "desc": "Row's key" + }, + "row": { + "type": "Object", + "desc": "Row object" + }, + "rowIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the filtered and sorted table" + }, + "pageIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the current page of the filtered and sorted table" + }, + "cols": { + "type": "Object", + "desc": "Column definitions" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null, + "addedIn": "v1.14" + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.14" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style", + "addedIn": "v1.14" + }, + "__trClass": { + "type": "String", + "desc": "Internal prop passed down to QTr (if used)" + } + } + }, + "body-cell": { + "desc": "Slot to define how all body cells look like; Suggestion: QTd", + "scope": { + "col": { + "type": "Object", + "desc": "Column definition for column associated with table cell" + }, + "value": { + "type": "Any", + "desc": "Parsed/Formatted value of table cell" + }, + "key": { + "type": "Any", + "desc": "Row's key", + "addedIn": "v1.14" + }, + "row": { + "type": "Object", + "desc": "Row object" + }, + "rowIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the filtered and sorted table" + }, + "pageIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the current page of the filtered and sorted table" + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "addedIn": "v1.14" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "addedIn": "v1.14" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null, + "addedIn": "v1.14" + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.14" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style", + "addedIn": "v1.14" + } + } + }, + "body-cell-[name]": { + "desc": "Slot to define how a specific column cell looks like; replace '[name]' with column name (from columns definition object)", + "scope": { + "col": { + "type": "Object", + "desc": "Column definition for column associated with table cell" + }, + "value": { + "type": "Any", + "desc": "Parsed/Formatted value of table cell" + }, + "key": { + "type": "Any", + "desc": "Row's key", + "addedIn": "v1.14" + }, + "row": { + "type": "Object", + "desc": "Row object" + }, + "rowIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the filtered and sorted table" + }, + "pageIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the current page of the filtered and sorted table" + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "addedIn": "v1.14" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "addedIn": "v1.14" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null, + "addedIn": "v1.14" + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true, + "addedIn": "v1.14" + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true, + "addedIn": "v1.14" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.14" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style", + "addedIn": "v1.14" + } + } + }, + "header": { + "desc": "Slot to define how header looks like; Suggestion: QTr + QTh", + "scope": { + "cols": { + "type": "Object", + "desc": "Column definitions" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true, + "addedIn": "v1.14" + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true, + "addedIn": "v1.14" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.14" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style", + "addedIn": "v1.14" + }, + "__trClass": { + "type": "String", + "desc": "Internal prop passed down to QTr (if used)" + }, + "header": { + "type": "Boolean", + "desc": "Internal prop passed down to QTh (if used); Always 'true'" + } + } + }, + "header-cell": { + "desc": "Slot to define how each header cell looks like; Suggestion: QTh", + "scope": { + "col": { + "type": "Object", + "desc": "Column definition associated to header cell" + }, + "cols": { + "type": "Object", + "desc": "Column definitions" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true, + "addedIn": "v1.14" + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true, + "addedIn": "v1.14" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.14" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style", + "addedIn": "v1.14" + } + } + }, + "header-cell-[name]": { + "desc": "Slot to define how a specific header cell looks like; replace '[name]' with column name (from columns definition object)", + "scope": { + "col": { + "type": "Object", + "desc": "Column definition associated to header cell" + }, + "cols": { + "type": "Object", + "desc": "Column definitions" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true, + "addedIn": "v1.14" + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true, + "addedIn": "v1.14" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style", + "addedIn": "v1.14" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style", + "addedIn": "v1.14" + } + }, + "addedIn": "v1.1.1" + }, + "body-selection": { + "desc": "Slot to define how body selection column looks like; Suggestion: QCheckbox", + "scope": { + "key": { + "type": "Any", + "desc": "Row's key" + }, + "row": { + "type": "Object", + "desc": "Row object" + }, + "rowIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the filtered and sorted table" + }, + "pageIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the current page of the filtered and sorted table" + }, + "cols": { + "type": "Object", + "desc": "Column definitions" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + } + }, + "addedIn": "v1.14" + }, + "header-selection": { + "desc": "Slot to define how header selection column looks like (available only for multiple selection mode); Suggestion: QCheckbox", + "scope": { + "cols": { + "type": "Object", + "desc": "Column definitions" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "default": "grey-8" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + } + }, + "addedIn": "v1.14" + }, + "top-row": { + "desc": "Slot to define how top extra row looks like", + "scope": { + "cols": { + "type": "Object", + "desc": "Column definitions" + } + } + }, + "bottom-row": { + "desc": "Slot to define how bottom extra row looks like", + "scope": { + "cols": { + "type": "Object", + "desc": "Column definitions" + } + } + }, + "top": { + "desc": "Slot to define how table top looks like", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ + 5 + ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + "bottom": { + "desc": "Slot to define how table bottom looks like", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ + 5 + ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + "pagination": { + "desc": "Slot to override default pagination label and buttons", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ + 5 + ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + "top-left": { + "desc": "Slot to define how left part of the table top looks like", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ + 5 + ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + "top-right": { + "desc": "Slot to define how right part of the table top looks like", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ + 5 + ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + "top-selection": { + "desc": "Slot to define how top table section looks like when user has selected at least one row", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ + 5 + ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + "no-data": { + "desc": "Slot to define how the bottom will look like when is nothing to display", + "scope": { + "message": { + "type": "String", + "desc": "The suggested message", + "examples": [ + "No data available" + ] + }, + "icon": { + "type": "String", + "desc": "The suggested icon name (following Quasar convention)", + "examples": [ + "warning" + ] + } + } + } + }, + "events": { + "row-click": { + "desc": "Emitted when user clicks/taps on a row; Is not emitted when using body/row/item scoped slots", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + }, + "row": { + "type": "Object", + "desc": "The row upon which user has clicked/tapped" + }, + "index": { + "type": "Number", + "desc": "Index of the row in the current page", + "addedIn": "v1.13" + } + }, + "addedIn": "v1.2.6" + }, + "row-dblclick": { + "desc": "Emitted when user quickly double clicks/taps on a row; Is not emitted when using body/row/item scoped slots; Please check JS dblclick event support before using", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + }, + "row": { + "type": "Object", + "desc": "The row upon which user has double clicked/tapped" + }, + "index": { + "type": "Number", + "desc": "Index of the row in the current page", + "addedIn": "v1.13" + } + }, + "addedIn": "v1.5.10" + }, + "row-contextmenu": { + "desc": "Emitted when user right clicks/long taps on a row; Is not emitted when using body/row/item scoped slots", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + }, + "row": { + "type": "Object", + "desc": "The row upon which user has right clicked/long tapped" + }, + "index": { + "type": "Number", + "desc": "Index of the row in the current page" + } + }, + "addedIn": "v1.15.1" + }, + "request": { + "desc": "Emitted when a server request is triggered", + "params": { + "requestProp": { + "type": "Object", + "desc": "Props of the request", + "definition": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "filter": { + "type": "Function", + "desc": "Filter method (the 'filter-method' prop)", + "params": { + "rows": { + "type": "Array", + "desc": "Array of rows", + "required": true + }, + "terms": { + "type": [ + "String", + "Object" + ], + "desc": "Terms to filter with (is essentially the 'filter' prop value)", + "required": true + }, + "cols": { + "type": "Array", + "desc": "Optional column definitions" + }, + "getCellValue": { + "type": "Function", + "desc": "Optional function to get a cell value", + "params": { + "col": { + "type": "Object", + "desc": "Column name from column definitions" + }, + "row": { + "type": "Object", + "desc": "The row object" + } + }, + "returns": { + "type": "Any", + "desc": "Parsed/Processed cell value", + "examples": [ + "Ice Cream Sandwich" + ] + } + } + }, + "returns": { + "type": "Array", + "desc": "Filtered rows" + } + }, + "getCellValue": { + "type": "Function", + "desc": "Optional function to get a cell value", + "params": { + "col": { + "type": "Object", + "desc": "Column name from column definitions" + }, + "row": { + "type": "Object", + "desc": "The row object" + } + }, + "returns": { + "type": "Any", + "desc": "Parsed/Processed cell value", + "examples": [ + "Ice Cream Sandwich" + ] + } + } + } + } + } + }, + "selection": { + "desc": "Emitted when user selects/unselects row(s)", + "params": { + "details": { + "type": "Object", + "desc": "Selection details", + "definition": { + "rows": { + "type": "Array", + "desc": "Array of row objects that were selected/unselected" + }, + "keys": { + "type": "Array", + "desc": "Array of the keys of rows that were selected/unselected" + }, + "added": { + "type": "Boolean", + "desc": "Were the rows added to selection (true) or removed from selection (false)" + }, + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "addedIn": "v1.11.2" + } + } + } + } + }, + "update:pagination": { + "desc": "Used by Vue on 'pagination.sync' prop for updating its value", + "params": { + "newPagination": { + "type": "Object", + "desc": "The updated pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + } + } + }, + "update:selected": { + "desc": "Used by Vue on 'selected.sync' prop for updating its value", + "params": { + "newSelected": { + "type": "Array", + "desc": "The updated selected array", + "examples": [ + "[ { name: 'Frozen Yogurt', calories: 159, fat: 6 } ]" + ] + } + } + }, + "update:expanded": { + "desc": "Used by Vue on 'expanded.sync' prop for updating its value", + "params": { + "newExpanded": { + "type": "Array", + "desc": "The updated expanded array", + "examples": [ + "[ 'row-a', 'row-b' ]" + ] + } + }, + "addedIn": "v1.8.3" + }, + "virtual-scroll": { + "desc": "Emitted when the virtual scroll occurs, if using virtual scroll", + "params": { + "details": { + "type": "Object", + "desc": "Object of properties on the new scroll position", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the list item that was scrolled into view (0 based)", + "examples": [ + 30 + ] + }, + "from": { + "type": "Number", + "desc": "The index of the first list item that is rendered (0 based)", + "examples": [ + 10 + ] + }, + "to": { + "type": "Number", + "desc": "The index of the last list item that is rendered (0 based)", + "examples": [ + 50 + ] + }, + "direction": { + "type": "String", + "desc": "Direction of change", + "values": [ + "increase", + "decrease" + ] + } + } + } + }, + "addedIn": "v1.4.1" + } + }, + "methods": { + "toggleFullscreen": { + "desc": "Toggles fullscreen mode" + }, + "setFullscreen": { + "desc": "Enter the fullscreen view" + }, + "exitFullscreen": { + "desc": "Leave the fullscreen view" + }, + "requestServerInteraction": { + "desc": "Trigger a server request (emits 'request' event)", + "params": { + "props": { + "type": "Object", + "desc": "Request details", + "definition": { + "pagination": { + "type": "Object", + "desc": "Optional pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "filter": { + "type": "Function", + "desc": "Filtering method (the 'filter-method' prop)", + "params": { + "rows": { + "type": "Array", + "desc": "Array of rows", + "required": true + }, + "terms": { + "type": [ + "String", + "Object" + ], + "desc": "Terms to filter with (is essentially the 'filter' prop value)", + "required": true + }, + "cols": { + "type": "Array", + "desc": "Optional column definitions" + }, + "getCellValue": { + "type": "Function", + "desc": "Optional function to get a cell value", + "params": { + "col": { + "type": "Object", + "desc": "Column name from column definitions" + }, + "row": { + "type": "Object", + "desc": "The row object" + } + }, + "returns": { + "type": "Any", + "desc": "Parsed/Processed cell value", + "examples": [ + "Ice Cream Sandwich" + ] + } + } + }, + "returns": { + "type": "Array", + "desc": "Filtered rows" + } + } + } + } + } + }, + "setPagination": { + "desc": "Unless using an external pagination Object (through 'pagination.sync' prop), you can use this method and force the internal pagination to change", + "params": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "required": true, + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ + "calories" + ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ + 3 + ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ + 10 + ] + } + } + }, + "forceServerRequest": { + "type": "Boolean", + "desc": "Also force a server request" + } + } + }, + "firstPage": { + "desc": "Navigates to first page", + "addedIn": "v1.12" + }, + "prevPage": { + "desc": "Navigates to previous page, if available" + }, + "nextPage": { + "desc": "Navigates to next page, if available" + }, + "lastPage": { + "desc": "Navigates to last page", + "addedIn": "v1.12" + }, + "isRowSelected": { + "desc": "Determine if a row has been selected by user", + "params": { + "key": { + "type": "Any", + "desc": "Row key value", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Is row selected or not?" + } + }, + "clearSelection": { + "desc": "Clears user selection (emits 'update:selected' with empty array)" + }, + "isRowExpanded": { + "desc": "Determine if a row is expanded or not", + "params": { + "key": { + "type": "Any", + "desc": "Row key value", + "required": true, + "examples": [ + "calories" + ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Is row expanded or not?" + }, + "addedIn": "v1.8.3" + }, + "setExpanded": { + "desc": "Sets the expanded rows keys array; Especially useful if not using an external 'expanded' state otherwise just emits 'update:expanded' with the value", + "params": { + "expanded": { + "type": "Array", + "desc": "Array containing keys of the expanded rows", + "required": true, + "examples": [ + "[ 'row-a', 'row-b' ]" + ] + } + }, + "addedIn": "v1.8.3" + }, + "sort": { + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ + "String", + "Object" + ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ + "calories" + ] + } + } + }, + "resetVirtualScroll": { + "desc": "Resets the virtual scroll (if using it) computations; Needed for custom edge-cases" + }, + "scrollTo": { + "desc": "Scroll the table to the row with the specified index in page (0 based)", + "params": { + "index": { + "type": [ + "String", + "Number" + ], + "desc": "The index of the row in page (0 based)", + "required": true, + "examples": [ + "1", + 23 + ] + }, + "edge": { + "type": "String", + "desc": "Only for virtual scroll - the edge to align to if the row is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns", + "values": [ + "start", + "center", + "end", + "start-force", + "center-force", + "end-force" + ], + "addedIn": "v1.14.7" + } + }, + "addedIn": "v1.7.2" + } + } +} \ No newline at end of file diff --git a/dist/api/QTabs.json b/dist/api/QTabs.json new file mode 100644 index 00000000000..2bfb1f95440 --- /dev/null +++ b/dist/api/QTabs.json @@ -0,0 +1,181 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tabs" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "value": { + "type": [ + "Number", + "String" + ], + "desc": "Model of the component defining current panel name; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ + "v-model=\"selectedTab\"" + ], + "category": "model" + }, + "vertical": { + "type": "Boolean", + "desc": "Use vertical design (tabs one on top of each other rather than one next to the other horizontally)", + "category": "content" + }, + "outside-arrows": { + "type": "Boolean", + "desc": "Reserve space for arrows to place them on each side of the tabs (the arrows fade when inactive)", + "category": "content", + "addedIn": "v1.12.9" + }, + "mobile-arrows": { + "type": "Boolean", + "desc": "Force display of arrows (if needed) on mobile", + "category": "content", + "addedIn": "v1.12.9" + }, + "align": { + "type": "String", + "desc": "Horizontal alignment the tabs within the tabs container", + "default": "center", + "values": [ + "left", + "center", + "right", + "justify" + ], + "examples": [ + "right" + ], + "category": "content" + }, + "breakpoint": { + "type": [ + "Number", + "String" + ], + "desc": "Breakpoint (in pixels) of tabs container width at which the tabs automatically turn to a justify alignment", + "default": 600, + "examples": [ + ":breakpoint=\"500\"" + ], + "category": "content|behavior" + }, + "active-class": { + "type": "String", + "desc": "The class to be set on the active tab", + "examples": [ + "my-active-class" + ], + "category": "style", + "addedIn": "v1.17" + }, + "active-color": { + "type": "String", + "desc": "The color to be attributed to the text of the active tab", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "active-bg-color": { + "type": "String", + "desc": "The color to be attributed to the background of the active tab", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "indicator-color": { + "type": "String", + "desc": "The color to be attributed to the indicator (the underline) of the active tab", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "content-class": { + "type": "String", + "desc": "Class definitions to be attributed to the content wrapper", + "examples": [ + "my-special-class" + ], + "category": "style", + "addedIn": "v1.12" + }, + "left-icon": { + "type": "String", + "desc": "The name of an icon to replace the default arrow used to scroll through the tabs to the left, when the tabs extend past the width of the tabs container", + "examples": [ + "arrow_left" + ], + "category": "content" + }, + "right-icon": { + "type": "String", + "desc": "The name of an icon to replace the default arrow used to scroll through the tabs to the right, when the tabs extend past the width of the tabs container", + "examples": [ + "arrow_right" + ], + "category": "content" + }, + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, tabs will stretch to parent's height", + "category": "content" + }, + "shrink": { + "type": "Boolean", + "desc": "By default, QTabs is set to grow to the available space; However, you can reverse that with this prop; Useful (and required) when placing the component in a QToolbar", + "category": "content" + }, + "switch-indicator": { + "type": "Boolean", + "desc": "Switches the indicator position (on left of tab for vertical mode or above the tab for default horizontal mode)", + "category": "content" + }, + "narrow-indicator": { + "type": "Boolean", + "desc": "Allows the indicator to be the same width as the tab's content (text or icon), instead of the whole width of the tab", + "category": "content" + }, + "inline-label": { + "type": "Boolean", + "desc": "Allows the text to be inline with the icon, should one be used", + "category": "content" + }, + "no-caps": { + "type": "Boolean", + "desc": "Turns off capitalizing all letters within the tab (which is the default)", + "category": "content" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QTd.json b/dist/api/QTd.json new file mode 100644 index 00000000000..976d2f93e2b --- /dev/null +++ b/dist/api/QTd.json @@ -0,0 +1,37 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/table" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "props": { + "type": "Object", + "desc": "QTable's column scoped slot property", + "examples": [ + ":props=\"props\"" + ], + "category": "general" + }, + "auto-width": { + "type": "Boolean", + "desc": "Tries to shrink column width size; Useful for columns with a checkbox/radio/toggle", + "category": "content" + }, + "no-hover": { + "type": "Boolean", + "desc": "Disable hover effect", + "addedIn": "v1.5.9", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QTh.json b/dist/api/QTh.json new file mode 100644 index 00000000000..829cfe5a8d8 --- /dev/null +++ b/dist/api/QTh.json @@ -0,0 +1,31 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/table" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "props": { + "type": "Object", + "desc": "QTable's header column scoped slot property", + "examples": [ + ":props=\"props\"" + ], + "category": "general" + }, + "auto-width": { + "type": "Boolean", + "desc": "Tries to shrink header column width size; Useful for columns with a checkbox/radio/toggle", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QTime.json b/dist/api/QTime.json new file mode 100644 index 00000000000..6b59f8f694e --- /dev/null +++ b/dist/api/QTime.json @@ -0,0 +1,341 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/time" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "value": { + "desc": "Time of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model", + "type": "String", + "required": true, + "examples": [ + "v-model=\"currentTime\"" + ] + }, + "landscape": { + "type": "Boolean", + "desc": "Display the component in landscape mode", + "category": "behavior" + }, + "mask": { + "type": "String", + "desc": "Mask (formatting string) used for parsing and formatting value", + "category": "model", + "default": "HH:mm", + "examples": [ + "HH:mm:ss", + "YYYY-MM-DD HH:mm:ss", + "HH:mm MMMM Do, YYYY" + ] + }, + "locale": { + "type": "Object", + "desc": "Locale formatting options", + "examples": [ + ":locale=\"{ monthsShort: ['Ian', 'Feb', 'Mar', '...'] }\"" + ], + "definition": { + "days": { + "type": "Array", + "desc": "List of full day names (DDDD), starting with Sunday", + "examples": [ + "['Duminica', 'Luni', 'Marti', '...']" + ] + }, + "daysShort": { + "type": "Array", + "desc": "List of short day names (DDD), starting with Sunday", + "examples": [ + "['Dum', 'Lun', 'Mar', '...']" + ] + }, + "months": { + "type": "Array", + "desc": "List of full month names (MMMM), starting with January", + "examples": [ + "['Ianuarie', 'Februarie', 'Martie', '...']" + ] + }, + "monthsShort": { + "type": "Array", + "desc": "List of short month names (MMM), starting with January", + "examples": [ + "['Ian', 'Feb', 'Mar', '...']" + ] + } + }, + "category": "model" + }, + "calendar": { + "type": "String", + "desc": "Specify calendar type", + "default": "gregorian", + "values": [ + "gregorian", + "persian" + ], + "category": "model" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style", + "addedIn": "v1.1.5" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style", + "addedIn": "v1.1.5" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style", + "addedIn": "v1.1.5" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "format24h": { + "type": "Boolean", + "desc": "Forces 24 hour time display instead of AM/PM system", + "default": "(based on Quasar lang language being used)", + "category": "behavior" + }, + "default-date": { + "type": "String", + "desc": "The default date to use (in YYYY/MM/DD format) when model is unfilled (undefined or null)", + "default": "current day", + "examples": [ + "1995/02/23" + ], + "category": "model", + "addedIn": "v1.9" + }, + "options": { + "type": "Function", + "desc": "Optionally configure what time is the user allowed to set; Overridden by 'hour-options', 'minute-options' and 'second-options' if those are set; For best performance, reference it from your scope and do not define it inline", + "params": { + "hr": { + "type": "Number", + "desc": "Hour", + "examples": [ + 15 + ] + }, + "min": { + "type": "Number", + "desc": "Minutes", + "examples": [ + 38 + ] + }, + "sec": { + "type": "Number", + "desc": "Seconds", + "examples": [ + 12 + ] + } + }, + "returns": null, + "examples": [ + ":options=\"(hr, min, sec) => hr <= 6\"" + ], + "category": "behavior" + }, + "hour-options": { + "type": "Array", + "desc": "Optionally configure what hours is the user allowed to set; Overrides 'options' prop if that is also set", + "examples": [ + ":hour-options=\"[ 3, 6, 9 ]\"" + ], + "category": "behavior" + }, + "minute-options": { + "type": "Array", + "desc": "Optionally configure what minutes is the user allowed to set; Overrides 'options' prop if that is also set", + "examples": [ + ":minute-options=\"[0, 15, 30, 45]\"" + ], + "category": "behavior" + }, + "second-options": { + "type": "Array", + "desc": "Optionally configure what seconds is the user allowed to set; Overrides 'options' prop if that is also set", + "examples": [ + ":second-options=\"[0, 7, 10, 23]\"" + ], + "category": "behavior" + }, + "with-seconds": { + "type": "Boolean", + "desc": "Allow the time to be set with seconds", + "category": "model|behavior" + }, + "now-btn": { + "type": "Boolean", + "desc": "Display a button that selects the current time", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "This is where additional buttons can go", + "addedIn": "v1.2.8" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "String", + "desc": "New model value", + "required": true + }, + "details": { + "type": "Object", + "desc": "Object of properties on the new model", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of the month" + }, + "hour": { + "type": "Number", + "desc": "The hour" + }, + "minute": { + "type": "Number", + "desc": "The minute" + }, + "second": { + "type": "Number", + "desc": "The second" + }, + "millisecond": { + "type": "Number", + "desc": "The millisecond" + }, + "changed": { + "type": "Boolean", + "desc": "Did the model change?", + "addedIn": "v1.1.1" + } + } + } + } + }, + "change": { + "desc": "Fires at the end of time adjustment (click or drag end) on the minutes screen (or seconds one if withSeconds is set)", + "params": { + "value": { + "type": "String", + "desc": "New model value", + "required": true + }, + "details": { + "type": "Object", + "desc": "Object of properties on the new model", + "definition": { + "year": { + "type": "Number", + "desc": "The year" + }, + "month": { + "type": "Number", + "desc": "The month" + }, + "day": { + "type": "Number", + "desc": "The day of the month" + }, + "hour": { + "type": "Number", + "desc": "The hour" + }, + "minute": { + "type": "Number", + "desc": "The minute" + }, + "second": { + "type": "Number", + "desc": "The second" + }, + "millisecond": { + "type": "Number", + "desc": "The millisecond" + }, + "changed": { + "type": "Boolean", + "desc": "Did the model change?", + "addedIn": "v1.1.1" + } + } + } + }, + "addedIn": "v1.15.5" + } + }, + "methods": { + "setNow": { + "desc": "Change model to current moment", + "addedIn": "v1.1.7" + } + } +} \ No newline at end of file diff --git a/dist/api/QTimeline.json b/dist/api/QTimeline.json new file mode 100644 index 00000000000..9594f9c2adc --- /dev/null +++ b/dist/api/QTimeline.json @@ -0,0 +1,53 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/timeline" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "side": { + "type": "String", + "desc": "Side to place the timeline entries in dense and comfortable layout; For loose layout it gets overridden by QTimelineEntry side prop", + "default": "right", + "values": [ + "left", + "right" + ], + "category": "behavior" + }, + "layout": { + "type": "String", + "desc": "Layout of the timeline. Dense keeps content and labels on one side. Comfortable keeps content on one side and labels on the opposite side. Loose puts content on both sides.", + "default": "dense", + "values": [ + "dense", + "comfortable", + "loose" + ], + "category": "behavior" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Used for content of component" + } + } +} \ No newline at end of file diff --git a/dist/api/QTimelineEntry.json b/dist/api/QTimelineEntry.json new file mode 100644 index 00000000000..48f1b3074ca --- /dev/null +++ b/dist/api/QTimelineEntry.json @@ -0,0 +1,104 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/timeline" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "tag": { + "type": "String", + "desc": "Tag to use, if of type 'heading' only", + "default": "h3", + "category": "content", + "examples": [ + "h1" + ] + }, + "heading": { + "type": "Boolean", + "desc": "Defines a heading timeline item", + "category": "content" + }, + "side": { + "type": "String", + "desc": "Side to place the timeline entry; Works only if QTimeline layout is loose.", + "default": "right", + "values": [ + "left", + "right" + ], + "category": "behavior" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "avatar": { + "type": "String", + "desc": "URL to the avatar image; Icon takes precedence if used, so it replaces avatar", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/my-bg.png\"", + "(assets folder) src=\"~assets/my-img.png\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "content" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "title": { + "type": "String", + "desc": "Title of timeline entry; Is overridden if using 'title' slot", + "examples": [ + "December party" + ], + "category": "content" + }, + "subtitle": { + "type": "String", + "desc": "Subtitle of timeline entry; Is overridden if using 'subtitle' slot", + "examples": [ + "All invited" + ], + "category": "content" + }, + "body": { + "type": "String", + "desc": "Body content of timeline entry; Use this prop or the default slot", + "examples": [ + "Lorem ipsum dolor sit amet, consectetur adipisicing elit." + ], + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Timeline entry content (body)" + }, + "title": { + "desc": "Optional slot for title; When used, it overrides 'title' prop" + }, + "subtitle": { + "desc": "Optional slot for subtitle; When used, it overrides 'subtitle' prop" + } + } +} \ No newline at end of file diff --git a/dist/api/QToggle.json b/dist/api/QToggle.json new file mode 100644 index 00000000000..e4fe46a15e8 --- /dev/null +++ b/dist/api/QToggle.json @@ -0,0 +1,223 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/toggle" + }, + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ + "car_id" + ], + "category": "behavior", + "addedIn": "v1.9" + }, + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ + "16px", + "2rem", + "xs", + "md" + ], + "category": "style", + "addedIn": "v1.8" + }, + "value": { + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model", + "required": true, + "type": [ + "Any", + "Array" + ], + "examples": [ + "false", + "['car', 'building']" + ] + }, + "val": { + "type": "Any", + "desc": "Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked", + "examples": [ + "car" + ], + "category": "model" + }, + "true-value": { + "type": "Any", + "desc": "What model value should be considered as checked/ticked/on?", + "default": true, + "examples": [ + "Agreed" + ], + "category": "model" + }, + "false-value": { + "type": "Any", + "desc": "What model value should be considered as unchecked/unticked/off?", + "default": false, + "examples": [ + "Disagree" + ], + "category": "model" + }, + "indeterminate-value": { + "type": "Any", + "desc": "What model value should be considered as 'indeterminate'?", + "default": null, + "examples": [ + 0, + "not_answered" + ], + "category": "behavior", + "addedIn": "v1.8" + }, + "toggle-order": { + "type": "String", + "desc": "Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ...", + "default": "tf", + "values": [ + "tf", + "ft" + ], + "category": "behavior", + "addedIn": "v1.12" + }, + "toggle-indeterminate": { + "type": "Boolean", + "desc": "When user clicks/taps on the component, should we toggle through the indeterminate state too?", + "category": "behavior", + "addedIn": "v1.8" + }, + "label": { + "type": "String", + "desc": "Label to display along the component (or use the default slot instead of this prop)", + "examples": [ + "I agree with the Terms and Conditions" + ], + "category": "label" + }, + "left-label": { + "type": "Boolean", + "desc": "Label (if any specified) should be displayed on the left side of the component", + "category": "label" + }, + "checked-icon": { + "type": "String", + "examples": [ + "visibility" + ], + "category": "icons", + "desc": "The icon to be used when the toggle is on" + }, + "unchecked-icon": { + "type": "String", + "examples": [ + "visibility_off" + ], + "category": "icons", + "desc": "The icon to be used when the toggle is off" + }, + "indeterminate-icon": { + "type": "String", + "examples": [ + "help" + ], + "category": "icons", + "desc": "The icon to be used when the model is indeterminate" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "keep-color": { + "type": "Boolean", + "desc": "Should the color (if specified any) be kept when the component is unticked/ off?", + "category": "behavior" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "tabindex": { + "type": [ + "Number", + "String" + ], + "desc": "Tabindex HTML attribute value", + "examples": [ + "0", + "100" + ], + "category": "general" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "icon-color": { + "type": "String", + "desc": "Override default icon color (for truthy state only); Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style", + "addedIn": "v1.8" + } + }, + "slots": { + "default": { + "desc": "Default slot can be used as label, unless 'label' prop is specified; Suggestion: string" + } + }, + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true + }, + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "addedIn": "v1.11.2" + } + } + } + }, + "methods": { + "toggle": { + "desc": "Toggle the state (of the model)" + } + } +} \ No newline at end of file diff --git a/dist/api/QToolbar.json b/dist/api/QToolbar.json new file mode 100644 index 00000000000..8057ffea59d --- /dev/null +++ b/dist/api/QToolbar.json @@ -0,0 +1,23 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/toolbar" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "inset": { + "type": "Boolean", + "desc": "Apply an inset to content (useful for subsequent toolbars)", + "category": "content" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QToolbarTitle.json b/dist/api/QToolbarTitle.json new file mode 100644 index 00000000000..dea5ba39d1d --- /dev/null +++ b/dist/api/QToolbarTitle.json @@ -0,0 +1,23 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/toolbar" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "shrink": { + "type": "Boolean", + "desc": "By default, QToolbarTitle is set to grow to the available space. However, you can reverse that with this prop", + "category": "behavior" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QTooltip.json b/dist/api/QTooltip.json new file mode 100644 index 00000000000..fa20fef50ec --- /dev/null +++ b/dist/api/QTooltip.json @@ -0,0 +1,309 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tooltip" + }, + "props": { + "content-class": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Class definitions to be attributed to the content", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + "content-style": { + "type": [ + "Array", + "String", + "Object" + ], + "desc": "Style definitions to be attributed to the content", + "examples": [ + "background-color: #ff0000", + ":content-style=\"{ color: '#ff0000' }\"" + ], + "category": "style" + }, + "value": { + "type": "Boolean", + "desc": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model" + }, + "min-height": { + "type": "String", + "desc": "The minimum height of the Tooltip; Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.15.5" + }, + "min-width": { + "type": "String", + "desc": "The minimum width of the Tooltip; Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style", + "addedIn": "v1.15.5" + }, + "max-height": { + "type": "String", + "desc": "The maximum height of the Tooltip; Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + }, + "max-width": { + "type": "String", + "desc": "The maximum width of the Tooltip; Size in CSS units, including unit name", + "examples": [ + "16px", + "2rem" + ], + "category": "style" + }, + "transition-show": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "jump-down" + }, + "transition-hide": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ + "fade", + "slide-down" + ], + "category": "behavior", + "default": "jump-up" + }, + "anchor": { + "type": "String", + "desc": "Two values setting the starting position or anchor point of the Tooltip relative to its target", + "values": [ + "top left", + "top middle", + "top right", + "top start", + "top end", + "center left", + "center middle", + "center right", + "center start", + "center end", + "bottom left", + "bottom middle", + "bottom right", + "bottom start", + "bottom end" + ], + "default": "bottom middle", + "examples": [ + "top left", + "bottom right" + ], + "category": "position" + }, + "self": { + "type": "String", + "desc": "Two values setting the Tooltip's own position relative to its target", + "values": [ + "top left", + "top middle", + "top right", + "top start", + "top end", + "center left", + "center middle", + "center right", + "center start", + "center end", + "bottom left", + "bottom middle", + "bottom right", + "bottom start", + "bottom end" + ], + "default": "top middle", + "examples": [ + "top left", + "bottom right" + ], + "category": "position" + }, + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the Tooltip horizontally and vertically in pixels", + "default": "[14, 14]", + "examples": [ + "[8, 8]", + "[5, 10]" + ], + "category": "position" + }, + "scroll-target": { + "type": [ + "Element", + "String" + ], + "desc": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one", + "examples": [ + ":scroll-target=\"$refs.scrollTarget\"", + "scroll-target=\".scroll-target-class\"", + "scroll-target=\"#scroll-target-id\"", + "scroll-target=\"body\"" + ], + "category": "behavior", + "addedIn": "v1.8" + }, + "target": { + "type": [ + "Boolean", + "String" + ], + "desc": "Configure a target element to trigger Tooltip toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) it attaches the events to the specified DOM element (if it exists)", + "default": true, + "values": [ + "(Boolean) true", + "(Boolean) false", + "(CSS selector)" + ], + "examples": [ + ":target=\"false\"", + "target=\".my-parent\"" + ], + "category": "behavior" + }, + "no-parent-event": { + "type": "Boolean", + "desc": "Skips attaching events to the target DOM element (that trigger the element to get shown)", + "category": "behavior" + }, + "delay": { + "type": "Number", + "desc": "Configure Tooltip to appear with delay", + "default": 0, + "examples": [ + ":delay=\"550\"" + ], + "category": "behavior" + }, + "hide-delay": { + "type": "Number", + "desc": "Configure Tooltip to disappear with delay", + "default": 0, + "examples": [ + ":hide-delay=\"650\"" + ], + "category": "behavior", + "addedIn": "v1.9.5" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + "events": { + "input": { + "desc": "Emitted when showing/hidden state changes; Is also used by v-model", + "params": { + "value": { + "type": "Boolean", + "desc": "New state (showing/hidden)" + } + } + }, + "show": { + "desc": "Emitted after component has triggered show()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-show": { + "desc": "Emitted when component triggers show() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "hide": { + "desc": "Emitted after component has triggered hide()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + }, + "before-hide": { + "desc": "Emitted when component triggers hide() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true + } + } + } + }, + "methods": { + "show": { + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "hide": { + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + } + }, + "toggle": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "desc": "Triggers component to toggle between show/hide" + }, + "updatePosition": { + "desc": "There are some custom scenarios for which Quasar cannot automatically reposition the tooltip without significant performance drawbacks so the optimal solution is for you to call this method when you need it" + } + } +} \ No newline at end of file diff --git a/dist/api/QTr.json b/dist/api/QTr.json new file mode 100644 index 00000000000..6ae56f1f434 --- /dev/null +++ b/dist/api/QTr.json @@ -0,0 +1,32 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/table" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "props": { + "type": "Object", + "desc": "QTable's row scoped slot property", + "examples": [ + ":props=\"props\"" + ], + "category": "general" + }, + "no-hover": { + "type": "Boolean", + "desc": "Disable hover effect", + "addedIn": "v1.5.9", + "category": "style" + } + }, + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + } +} \ No newline at end of file diff --git a/dist/api/QTree.json b/dist/api/QTree.json new file mode 100644 index 00000000000..0eb6c22e3a3 --- /dev/null +++ b/dist/api/QTree.json @@ -0,0 +1,574 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tree" + }, + "props": { + "nodes": { + "type": "Array", + "desc": "The array of nodes that designates the tree structure", + "required": true, + "examples": [ + "[ {...}, {...} ]" + ], + "category": "content" + }, + "node-key": { + "type": "String", + "desc": "The property name of each node object that holds a unique node id", + "required": true, + "examples": [ + "key", + "id" + ], + "category": "content" + }, + "label-key": { + "type": "String", + "desc": "The property name of each node object that holds the label of the node", + "default": "label", + "examples": [ + "name", + "description" + ], + "category": "content" + }, + "children-key": { + "type": "String", + "desc": "The property name of each node object that holds the list of children of the node", + "default": "children", + "examples": [ + "roles", + "relatives" + ], + "category": "content", + "addedIn": "v1.11.3" + }, + "no-connectors": { + "type": "Boolean", + "desc": "Do not display the connector lines between nodes", + "category": "style", + "addedIn": "v1.5.10" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "control-color": { + "type": "String", + "desc": "Color name for controls (like checkboxes) from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "selected-color": { + "type": "String", + "desc": "Color name for selected nodes (from the Quasar Color Palette)", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style", + "addedIn": "v1.17" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + "tick-strategy": { + "type": "String", + "desc": "The type of strategy to use for the selection of the nodes", + "default": "none", + "values": [ + "none", + "strict", + "leaf", + "leaf-filtered" + ], + "category": "behavior" + }, + "ticked": { + "type": "Array", + "desc": "Keys of nodes that are ticked", + "sync": true, + "examples": [ + ":ticked.sync=\"tickedKeys\"" + ], + "category": "state" + }, + "expanded": { + "type": "Array", + "desc": "Keys of nodes that are expanded", + "sync": true, + "examples": [ + ":expanded.sync=\"expandedKeys\"" + ], + "category": "state" + }, + "selected": { + "type": "Any", + "desc": "Key of node currently selected", + "sync": true, + "examples": [ + ":selected.sync=\"selectedKey\"" + ], + "category": "state" + }, + "no-selection-unset": { + "type": "Boolean", + "desc": "Do not allow un-selection when clicking currently selected node", + "category": "behavior", + "addedIn": "v1.17.5" + }, + "default-expand-all": { + "type": "Boolean", + "desc": "Allow the tree to have all its branches expanded, when first rendered", + "category": "behavior" + }, + "accordion": { + "type": "Boolean", + "desc": "Allows the tree to be set in accordion mode", + "category": "behavior" + }, + "no-transition": { + "type": "Boolean", + "desc": "Turn off transition effects when expanding/collapsing nodes; Also enhances perf by a lot as a side-effect; Recommended for big trees", + "category": "behavior", + "addedIn": "v1.21.1" + }, + "filter": { + "type": "String", + "desc": "The text value to be used for filtering nodes", + "examples": [ + ":filter=\"searchText\"" + ], + "category": "filter" + }, + "filter-method": { + "type": "Function", + "desc": "The function to use to filter the tree nodes; For best performance, reference it from your scope and do not define it inline", + "default": "(see source code)", + "params": { + "node": { + "type": "Object", + "desc": "Node currently being filtered" + }, + "filter": { + "type": "String", + "desc": "Filter text to match against" + } + }, + "returns": { + "type": "Boolean", + "desc": "Matches or not" + }, + "category": "filter" + }, + "duration": { + "type": "Number", + "desc": "Toggle animation duration (in milliseconds)", + "default": 300, + "examples": [ + ":duration=\"500\"" + ], + "category": "style" + }, + "no-nodes-label": { + "type": "String", + "desc": "Override default such label for when no nodes are available", + "examples": [ + "No nodes to show!" + ], + "category": "content" + }, + "no-results-label": { + "type": "String", + "desc": "Override default such label for when no nodes are available due to filtering", + "examples": [ + "No results" + ], + "category": "content" + } + }, + "scopedSlots": { + "default-header": { + "desc": "Slot to use for defining the header of a node", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "ticked": { + "type": "Boolean", + "desc": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "reactive": true + }, + "tree": { + "type": "Object", + "desc": "QTree instance" + }, + "node": { + "type": "Object", + "desc": "Node object" + }, + "key": { + "type": "Any", + "desc": "Node's key" + }, + "color": { + "type": "String", + "desc": "QTree instance 'color' supplied prop value", + "examples": [ + "primary" + ] + }, + "dark": { + "type": "Boolean", + "desc": "QTree instance 'dark' supplied prop value" + } + } + }, + "header-[name]": { + "desc": "Header template slot for describing node header; Used by nodes which have their 'header' prop set to '[name]', where '[name]' can be any string", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "ticked": { + "type": "Boolean", + "desc": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "reactive": true + }, + "tree": { + "type": "Object", + "desc": "QTree instance" + }, + "node": { + "type": "Object", + "desc": "Node object" + }, + "key": { + "type": "Any", + "desc": "Node's key" + }, + "color": { + "type": "String", + "desc": "QTree instance 'color' supplied prop value", + "examples": [ + "primary" + ] + }, + "dark": { + "type": "Boolean", + "desc": "QTree instance 'dark' supplied prop value" + } + } + }, + "default-body": { + "desc": "Slot to use for defining the body of a node", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "ticked": { + "type": "Boolean", + "desc": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "reactive": true + }, + "tree": { + "type": "Object", + "desc": "QTree instance" + }, + "node": { + "type": "Object", + "desc": "Node object" + }, + "key": { + "type": "Any", + "desc": "Node's key" + }, + "color": { + "type": "String", + "desc": "QTree instance 'color' supplied prop value", + "examples": [ + "primary" + ] + }, + "dark": { + "type": "Boolean", + "desc": "QTree instance 'dark' supplied prop value" + } + } + }, + "body-[name]": { + "desc": "Body template slot for describing node body; Used by nodes which have their 'body' prop set to '[name]', where '[name]' can be any string", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "ticked": { + "type": "Boolean", + "desc": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "reactive": true + }, + "tree": { + "type": "Object", + "desc": "QTree instance" + }, + "node": { + "type": "Object", + "desc": "Node object" + }, + "key": { + "type": "Any", + "desc": "Node's key" + }, + "color": { + "type": "String", + "desc": "QTree instance 'color' supplied prop value", + "examples": [ + "primary" + ] + }, + "dark": { + "type": "Boolean", + "desc": "QTree instance 'dark' supplied prop value" + } + } + } + }, + "events": { + "update:expanded": { + "desc": "Triggered when nodes are expanded or collapsed; Used by Vue on 'update' synched prop", + "params": { + "expanded": { + "type": "Array", + "desc": "The expanded node keys", + "examples": [ + "[ 'Node 1', 'Node 2' ]" + ] + } + } + }, + "lazy-load": { + "desc": "Emitted when the lazy loading of nodes is finished", + "params": { + "details": { + "type": "Object", + "desc": "Lazy loading details", + "definition": { + "node": { + "type": "Object", + "desc": "The node to which the new nodes (the children) will be appended" + }, + "key": { + "type": "String", + "desc": "The key of the node getting the newly loaded child nodes", + "examples": [ + "New Node" + ] + }, + "done": { + "type": "Function", + "desc": "The callback to be carried out when the loading is successful", + "params": { + "children": { + "type": "Array", + "desc": "Array of nodes" + } + }, + "returns": null + }, + "fail": { + "type": "Function", + "desc": "The callback to be carried out should the loading fails", + "params": null, + "returns": null + } + } + } + } + }, + "update:ticked": { + "desc": "Emitted when nodes are ticked/unticked via the checkbox; Used by Vue on 'ticked' synched prop", + "params": { + "target": { + "type": "Array", + "desc": "The ticked node keys", + "examples": [ + "[ 'Node 1', 'Node 2' ]" + ] + } + } + }, + "update:selected": { + "desc": "Emitted when selected node changes; Used by Vue on 'selected' synched prop", + "params": { + "target": { + "type": "Any", + "desc": "The selected node key", + "examples": [ + "Node 1" + ] + } + } + }, + "after-show": { + "desc": "Emitted when component show animation is finished", + "addedIn": "v1.9" + }, + "after-hide": { + "desc": "Emitted when component hide animation is finished", + "addedIn": "v1.9" + } + }, + "methods": { + "getNodeByKey": { + "desc": "Get the node with the given key", + "params": { + "key": { + "type": "Any", + "desc": "The key of a node", + "required": true, + "examples": [ + "Node 1" + ] + } + }, + "returns": { + "type": "Object", + "desc": "Requested node" + } + }, + "getTickedNodes": { + "desc": "Get array of nodes that are ticked", + "returns": { + "type": "Array", + "desc": "Ticked node objects" + } + }, + "getExpandedNodes": { + "desc": "Get array of nodes that are expanded", + "returns": { + "type": "Array", + "desc": "Expanded node objects" + } + }, + "isExpanded": { + "desc": "Determine if a node is expanded", + "params": { + "key": { + "type": "Any", + "desc": "The key of a node", + "required": true, + "examples": [ + "Node 1" + ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Is specified node expanded?" + } + }, + "expandAll": { + "desc": "Use to expand all branches of the tree" + }, + "collapseAll": { + "desc": "Use to collapse all branches of the tree" + }, + "setExpanded": { + "desc": "Expands the tree at the point of the node with the key given", + "params": { + "key": { + "type": "Any", + "desc": "The key of a node", + "required": true, + "examples": [ + "Node 1" + ] + }, + "state": { + "type": "Boolean", + "desc": "Set to 'true' to expand the branch of the tree, otherwise 'false' collapses it", + "required": true + } + } + }, + "isTicked": { + "desc": "Method to check if a node's checkbox is selected or not", + "params": { + "key": { + "type": "Any", + "desc": "The key of a node", + "required": true, + "examples": [ + "Node 1" + ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Is specified node ticked?" + } + }, + "setTicked": { + "desc": "Method to set a node's checkbox programmatically", + "params": { + "keys": { + "type": "Array", + "desc": "The keys of nodes to tick/untick", + "required": true, + "examples": [ + "[ 'Node 1', 'Node 2' ]" + ] + }, + "state": { + "type": "Boolean", + "desc": "Set to 'true' to tick the checkbox of nodes, otherwise 'false' unticks them", + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QUploader.json b/dist/api/QUploader.json new file mode 100644 index 00000000000..a72575296cb --- /dev/null +++ b/dist/api/QUploader.json @@ -0,0 +1,484 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/uploader" + }, + "props": { + "multiple": { + "type": "Boolean", + "desc": "Allow multiple file uploads", + "category": "behavior" + }, + "accept": { + "type": "String", + "desc": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element", + "examples": [ + ".jpg, .pdf, image/*", + "image/jpeg, .pdf" + ], + "category": "behavior" + }, + "capture": { + "type": "String", + "desc": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element", + "values": [ + "user", + "environment" + ], + "category": "behavior", + "addedIn": "v1.12.6" + }, + "max-file-size": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum size of individual file in bytes", + "examples": [ + 1024, + 1048576 + ], + "category": "behavior" + }, + "max-total-size": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum size of all files combined in bytes", + "examples": [ + 1024, + 1048576 + ], + "category": "behavior" + }, + "max-files": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum number of files to contain", + "examples": [ + ":max-files=\"5\"", + "10" + ], + "category": "behavior", + "addedIn": "v1.11.2" + }, + "filter": { + "type": "Function", + "desc": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline", + "params": { + "files": { + "type": [ + "FileList", + "Array" + ], + "desc": "Candidate files to be added to queue" + } + }, + "returns": { + "type": "Array", + "desc": "Filtered files to be added to queue" + }, + "examples": [ + ":filter=\"files => files.filter(file => file.size === 1024)\"" + ], + "category": "behavior" + }, + "label": { + "type": "String", + "desc": "Label for the uploader", + "examples": [ + "Upload photo here" + ], + "category": "content" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "no-thumbnails": { + "type": "Boolean", + "desc": "Don't display thumbnails for image files", + "category": "content" + }, + "auto-upload": { + "type": "Boolean", + "desc": "Upload files immediately when added", + "category": "behavior" + }, + "hide-upload-btn": { + "type": "Boolean", + "desc": "Don't show the upload button", + "category": "behavior" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + "factory": { + "type": "Function", + "desc": "Function which should return an Object or a Promise resolving with an Object; For best performance, reference it from your scope and do not define it inline", + "params": { + "files": { + "type": "Array", + "desc": "Uploaded files" + } + }, + "returns": { + "type": [ + "Object", + "Promise" + ], + "desc": "Optional configuration for the upload process; You can override QUploader props in this Object (url, method, headers, formFields, fieldName, withCredentials, sendRaw); Props of these Object can also be Functions with the form of (file[s]) => value" + }, + "category": "upload" + }, + "url": { + "type": [ + "String", + "Function" + ], + "desc": "URL or path to the server which handles the upload. Takes String or factory function, which returns String. Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ + "https://example.com/path", + "files => `https://example.com?count=${files.length}`" + ], + "category": "upload" + }, + "method": { + "type": [ + "String", + "Function" + ], + "default": "POST", + "desc": "HTTP method to use for upload; Takes String or factory function which returns a String; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "values": [ + "POST", + "PUT" + ], + "examples": [ + "POST", + ":method=\"files => files.length > 10 ? 'POST' : 'PUT'\"" + ], + "category": "upload" + }, + "field-name": { + "type": [ + "String", + "Function" + ], + "desc": "Field name for each file upload; This goes into the following header: 'Content-Disposition: form-data; name=\"__HERE__\"; filename=\"somefile.png\"; If using a function then for best performance, reference it from your scope and do not define it inline", + "default": "(file) => file.name", + "examples": [ + "backgroundFile", + ":field-name=\"(file) => 'background' + file.name\"" + ], + "category": "upload" + }, + "headers": { + "type": [ + "Array", + "Function" + ], + "desc": "Array or a factory function which returns an array; Array consists of objects with header definitions; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "definition": { + "name": { + "type": "String", + "required": true, + "desc": "Header name", + "examples": [ + "Content-Type", + "Accept", + "Cache-Control" + ] + }, + "value": { + "type": "String", + "required": true, + "desc": "Header value", + "examples": [ + "application/json", + "no-cache" + ] + } + }, + "examples": [ + "[{name: 'Content-Type', value: 'application/json'}, {name: 'Accept', value: 'application/json'}]", + "() => [{name: 'X-Custom-Timestamp', value: Date.now()}]", + "files => [{name: 'X-Custom-Count', value: files.length}]" + ], + "category": "upload" + }, + "form-fields": { + "type": [ + "Array", + "Function" + ], + "desc": "Array or a factory function which returns an array; Array consists of objects with additional fields definitions (used by Form to be uploaded); Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "definition": { + "name": { + "type": "String", + "required": true, + "desc": "Field name", + "examples": [ + "Some field" + ] + }, + "value": { + "type": "String", + "required": true, + "desc": "Field value", + "examples": [ + "some-value" + ] + } + }, + "examples": [ + "[{name: 'my-field', value: 'my-value'}]", + "() => [{name: 'my-field', value: 'my-value'}]", + "files => [{name: 'my-field', value: 'my-value' + files.length}]" + ], + "category": "upload" + }, + "with-credentials": { + "type": [ + "Boolean", + "Function" + ], + "desc": "Sets withCredentials to true on the XHR that manages the upload; Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ + "with-credentials", + ":with-credentials=\"files => ...\"" + ], + "category": "upload" + }, + "send-raw": { + "type": [ + "Boolean", + "Function" + ], + "desc": "Send raw files without wrapping into a Form(); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ + "send-raw", + ":send-raw=\"files => ...\"" + ], + "category": "upload" + }, + "batch": { + "type": [ + "Boolean", + "Function" + ], + "desc": "Upload files in batch (in one XHR request); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ + "files => files.length > 10" + ], + "category": "upload" + } + }, + "scopedSlots": { + "header": { + "desc": "Slot for custom header; Scope is the QUploader instance itself" + }, + "list": { + "desc": "Slot for custom list; Scope is the QUploader instance itself" + } + }, + "events": { + "rejected": { + "desc": "Emitted after files are picked and some do not pass the validation props (accept, max-file-size, max-total-size, filter, etc)", + "params": { + "rejectedEntries": { + "type": "Array", + "desc": "Array of { failedPropValidation: string, file: File } Objects for files that do not pass the validation" + } + }, + "addedIn": "v1.11.2" + }, + "added": { + "desc": "Emitted when files are added into the list", + "params": { + "files": { + "type": "Array", + "desc": "Array of files that were added" + } + } + }, + "removed": { + "desc": "Emitted when files are removed from the list", + "params": { + "files": { + "type": "Array", + "desc": "Array of files that were removed" + } + } + }, + "start": { + "desc": "Started working" + }, + "finish": { + "desc": "Finished working (regardless of success or fail)" + }, + "uploaded": { + "desc": "Emitted when file or batch of files is uploaded", + "params": { + "info": { + "type": "Object", + "desc": "Object containing information about the event", + "definition": { + "files": { + "type": "Array", + "desc": "Uploaded files" + }, + "xhr": { + "type": "Object", + "desc": "XMLHttpRequest that has been used to upload this batch of files" + } + } + } + } + }, + "failed": { + "desc": "Emitted when file or batch of files has encountered error while uploading", + "params": { + "info": { + "type": "Object", + "desc": "Object containing information about the event", + "definition": { + "files": { + "type": "Array", + "desc": "Files which encountered error" + }, + "xhr": { + "type": "Object", + "desc": "XMLHttpRequest that has been used to upload this batch of files" + } + } + } + } + }, + "uploading": { + "desc": "Emitted when file or batch of files started uploading", + "params": { + "info": { + "type": "Object", + "desc": "Object containing information about the event", + "definition": { + "files": { + "type": "Array", + "desc": "Files which are now uploading" + }, + "xhr": { + "type": "Object", + "desc": "XMLHttpRequest used for uploading" + } + } + } + } + }, + "factory-failed": { + "desc": "Emitted when factory function is supplied with a Promise which is rejected", + "params": { + "err": { + "type": "Object", + "desc": "Error Object which is the Promise rejection reason" + }, + "files": { + "type": "Array", + "desc": "Files which were to get uploaded" + } + } + } + }, + "methods": { + "pickFiles": { + "desc": "Trigger file pick; Must be called as a direct consequence of user interaction (eg. in a click handler), due to browsers security policy", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + }, + "addFiles": { + "desc": "Add files programmatically", + "params": { + "files": { + "type": [ + "FileList", + "Array" + ], + "desc": "Array of files (instances of File)", + "required": true + } + } + }, + "reset": { + "desc": "Resets uploader to default; Empties queue, aborts current uploads" + }, + "removeUploadedFiles": { + "desc": "Removes already uploaded files from the list" + }, + "removeQueuedFiles": { + "desc": "Remove files that are waiting for upload to start (same as clicking the left clear button)" + }, + "removeFile": { + "desc": "Remove specified file from the queue", + "params": { + "file": { + "type": "Object", + "desc": "File to remove (instance of File)", + "required": true + } + } + }, + "abort": { + "desc": "Abort upload of all files (same as clicking the abort button)" + }, + "upload": { + "desc": "Start uploading (same as clicking the upload button)" + } + } +} \ No newline at end of file diff --git a/dist/api/QUploaderAddTrigger.json b/dist/api/QUploaderAddTrigger.json new file mode 100644 index 00000000000..53b50a89b9d --- /dev/null +++ b/dist/api/QUploaderAddTrigger.json @@ -0,0 +1,6 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/uploader" + } +} \ No newline at end of file diff --git a/dist/api/QUploaderBase.json b/dist/api/QUploaderBase.json new file mode 100644 index 00000000000..5c27c684e04 --- /dev/null +++ b/dist/api/QUploaderBase.json @@ -0,0 +1,248 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/uploader" + }, + "props": { + "multiple": { + "type": "Boolean", + "desc": "Allow multiple file uploads", + "category": "behavior" + }, + "accept": { + "type": "String", + "desc": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element", + "examples": [ + ".jpg, .pdf, image/*", + "image/jpeg, .pdf" + ], + "category": "behavior" + }, + "capture": { + "type": "String", + "desc": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element", + "values": [ + "user", + "environment" + ], + "category": "behavior", + "addedIn": "v1.12.6" + }, + "max-file-size": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum size of individual file in bytes", + "examples": [ + 1024, + 1048576 + ], + "category": "behavior" + }, + "max-total-size": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum size of all files combined in bytes", + "examples": [ + 1024, + 1048576 + ], + "category": "behavior" + }, + "max-files": { + "type": [ + "Number", + "String" + ], + "desc": "Maximum number of files to contain", + "examples": [ + ":max-files=\"5\"", + "10" + ], + "category": "behavior", + "addedIn": "v1.11.2" + }, + "filter": { + "type": "Function", + "desc": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline", + "params": { + "files": { + "type": [ + "FileList", + "Array" + ], + "desc": "Candidate files to be added to queue" + } + }, + "returns": { + "type": "Array", + "desc": "Filtered files to be added to queue" + }, + "examples": [ + ":filter=\"files => files.filter(file => file.size === 1024)\"" + ], + "category": "behavior" + }, + "label": { + "type": "String", + "desc": "Label for the uploader", + "examples": [ + "Upload photo here" + ], + "category": "content" + }, + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ + "primary", + "teal-10" + ], + "category": "style" + }, + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style" + }, + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + "no-thumbnails": { + "type": "Boolean", + "desc": "Don't display thumbnails for image files", + "category": "content" + }, + "auto-upload": { + "type": "Boolean", + "desc": "Upload files immediately when added", + "category": "behavior" + }, + "hide-upload-btn": { + "type": "Boolean", + "desc": "Don't show the upload button", + "category": "behavior" + }, + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + } + }, + "scopedSlots": { + "header": { + "desc": "Slot for custom header; Scope is the QUploader instance itself" + }, + "list": { + "desc": "Slot for custom list; Scope is the QUploader instance itself" + } + }, + "events": { + "rejected": { + "desc": "Emitted after files are picked and some do not pass the validation props (accept, max-file-size, max-total-size, filter, etc)", + "params": { + "rejectedEntries": { + "type": "Array", + "desc": "Array of { failedPropValidation: string, file: File } Objects for files that do not pass the validation" + } + }, + "addedIn": "v1.11.2" + }, + "added": { + "desc": "Emitted when files are added into the list", + "params": { + "files": { + "type": "Array", + "desc": "Array of files that were added" + } + } + }, + "removed": { + "desc": "Emitted when files are removed from the list", + "params": { + "files": { + "type": "Array", + "desc": "Array of files that were removed" + } + } + }, + "start": { + "desc": "Started working" + }, + "finish": { + "desc": "Finished working (regardless of success or fail)" + } + }, + "methods": { + "pickFiles": { + "desc": "Trigger file pick; Must be called as a direct consequence of user interaction (eg. in a click handler), due to browsers security policy", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + }, + "addFiles": { + "desc": "Add files programmatically", + "params": { + "files": { + "type": [ + "FileList", + "Array" + ], + "desc": "Array of files (instances of File)", + "required": true + } + } + }, + "reset": { + "desc": "Resets uploader to default; Empties queue, aborts current uploads" + }, + "removeUploadedFiles": { + "desc": "Removes already uploaded files from the list" + }, + "removeQueuedFiles": { + "desc": "Remove files that are waiting for upload to start (same as clicking the left clear button)" + }, + "removeFile": { + "desc": "Remove specified file from the queue", + "params": { + "file": { + "type": "Object", + "desc": "File to remove (instance of File)", + "required": true + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/QVideo.json b/dist/api/QVideo.json new file mode 100644 index 00000000000..cbbd958c12c --- /dev/null +++ b/dist/api/QVideo.json @@ -0,0 +1,86 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/video" + }, + "behavior": { + "$listeners": { + "desc": "All native events are being propagated (you don't need the '.native' modifier)" + } + }, + "props": { + "ratio": { + "type": [ + "String", + "Number" + ], + "desc": "Aspect ratio for the content; If value is a String, then avoid using a computational statement (like '16/9') and instead specify the String value of the result directly (eg. '1.7777')", + "examples": [ + ":ratio=\"4/3\"", + ":ratio=\"16/9\"", + "ratio=\"1\"" + ], + "category": "style", + "addedIn": "v1.7" + }, + "src": { + "type": "String", + "desc": "The source url to display in an iframe", + "required": true, + "examples": [ + "src=\"https://www.youtube.com/embed/k3_tw44QsZQ\"" + ], + "category": "model" + }, + "title": { + "type": "String", + "desc": "(Accessibility) Set the native 'title' attribute value of the inner iframe being used", + "required": false, + "examples": [ + "My Daily Marathon" + ], + "category": "accessibility", + "addedIn": "v1.17" + }, + "fetchpriority": { + "type": "String", + "desc": "Provides a hint of the relative priority to use when fetching the iframe document", + "default": "auto", + "values": [ + "high", + "low", + "auto" + ], + "category": "behavior", + "addedIn": "v1.18.10" + }, + "loading": { + "type": "String", + "desc": "Indicates how the browser should load the iframe", + "default": "eager", + "values": [ + "eager", + "lazy" + ], + "category": "behavior", + "addedIn": "v1.18.10" + }, + "referrerpolicy": { + "type": "String", + "desc": "Indicates which referrer to send when fetching the frame's resource", + "default": "strict-origin-when-cross-origin", + "values": [ + "no-referrer", + "no-referrer-when-downgrade", + "origin", + "origin-when-cross-origin", + "same-origin", + "strict-origin", + "strict-origin-when-cross-origin", + "unsafe-url" + ], + "category": "behavior", + "addedIn": "v1.18.10" + } + } +} \ No newline at end of file diff --git a/dist/api/QVirtualScroll.json b/dist/api/QVirtualScroll.json new file mode 100644 index 00000000000..c214b38d689 --- /dev/null +++ b/dist/api/QVirtualScroll.json @@ -0,0 +1,299 @@ +{ + "type": "component", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/virtual-scroll" + }, + "addedIn": "v1.1", + "props": { + "virtual-scroll-horizontal": { + "type": "Boolean", + "desc": "Make virtual list work in horizontal mode", + "category": "behavior" + }, + "virtual-scroll-slice-size": { + "type": [ + "Number", + "String" + ], + "desc": "Minimum number of items to render in the virtual list", + "default": "30", + "examples": [ + "virtual-scroll-slice-size=\"60\"" + ], + "category": "virtual-scroll" + }, + "virtual-scroll-slice-ratio-before": { + "type": [ + "Number", + "String" + ], + "desc": "Ratio of number of items in visible zone to render before it", + "default": "1", + "examples": [ + "virtual-scroll-slice-ratio-before=\"0.3\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.14.7" + }, + "virtual-scroll-slice-ratio-after": { + "type": [ + "Number", + "String" + ], + "desc": "Ratio of number of items in visible zone to render after it", + "default": "1", + "examples": [ + "virtual-scroll-slice-ratio-after=\"2\"" + ], + "category": "virtual-scroll", + "addedIn": "v1.14.7" + }, + "virtual-scroll-item-size": { + "type": [ + "Number", + "String" + ], + "desc": "Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item", + "default": "24", + "examples": [ + "virtual-scroll-item-size=\"48\"" + ], + "category": "virtual-scroll" + }, + "virtual-scroll-sticky-size-start": { + "type": [ + "Number", + "String" + ], + "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision", + "default": "0", + "examples": [ + "virtual-scroll-sticky-size-start=\"48\"" + ], + "category": "virtual-scroll" + }, + "virtual-scroll-sticky-size-end": { + "type": [ + "Number", + "String" + ], + "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision", + "default": "0", + "examples": [ + "virtual-scroll-sticky-size-end=\"48\"" + ], + "category": "virtual-scroll" + }, + "table-colspan": { + "type": [ + "Number", + "String" + ], + "desc": "The number of columns in the table (you need this if you use table-layout: fixed)", + "examples": [ + "table-colspan=\"12\"" + ], + "category": "virtual-scroll|content", + "addedIn": "v1.13" + }, + "type": { + "type": "String", + "desc": "The type of content: list (default) or table", + "default": "list", + "values": [ + "list", + "table" + ], + "category": "content" + }, + "items": { + "type": "Array", + "desc": "Available list items that will be passed to the scoped slot; For best performance freeze the list of items; Required if 'itemsFn' is not supplied", + "default": "[]", + "examples": [ + ":items=\"[ 'BMW', 'Samsung Phone' ]\"", + ":items=\"[ { label: 'BMW', value: 'car' }, { label: 'Samsung Phone', value: 'phone' } ]\"" + ], + "category": "content" + }, + "items-size": { + "type": "Number", + "desc": "Number of available items in the list; Required and used only if 'itemsFn' is provided", + "default": "void 0", + "examples": [ + ":items-size=\"100000\"", + ":items-size=\"500\"" + ], + "category": "content" + }, + "items-fn": { + "type": "Function", + "desc": "Function to return the scope for the items to be displayed; Should return an array for items starting from 'from' index for size length; For best performance, reference it from your scope and do not define it inline", + "params": { + "from": { + "type": "Number", + "desc": "Index of the first item (0 based)", + "examples": [ + 15 + ] + }, + "size": { + "type": "Number", + "desc": "Number of items to return", + "examples": [ + 38 + ] + } + }, + "returns": { + "type": "Array", + "desc": "List of scope for items to be displayed" + }, + "examples": [ + ":items-fn=\"(from, size) => { const items = []; for (let i = 0; i < size; i++) { items.push('Item ' + i) }; return items }\"" + ], + "category": "content" + }, + "scroll-target": { + "type": [ + "Element", + "String" + ], + "desc": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one", + "examples": [ + ":scroll-target=\"$refs.scrollTarget\"", + "scroll-target=\".scroll-target-class\"", + "scroll-target=\"#scroll-target-id\"", + "scroll-target=\"body\"" + ], + "category": "behavior", + "addedIn": "v1.8" + } + }, + "slots": { + "before": { + "desc": "Template slot for the elements that should be rendered before the list; Suggestion: thead before a table" + }, + "after": { + "desc": "Template slot for the elements that should be rendered after the list; Suggestion: tfoot after a table" + } + }, + "scopedSlots": { + "default": { + "desc": "Template slot for defining the list item; Suggestion: QItem", + "scope": { + "index": { + "type": "Number", + "desc": "Item index in the options list", + "examples": [ + 0 + ] + }, + "item": { + "type": "Any", + "desc": "Item data -- its value is taken from 'options' prop" + } + } + } + }, + "events": { + "virtual-scroll": { + "desc": "Emitted when the virtual scroll occurs", + "params": { + "details": { + "type": "Object", + "desc": "Object of properties on the new scroll position", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the list item that was scrolled into view (0 based)", + "examples": [ + 30 + ] + }, + "from": { + "type": "Number", + "desc": "The index of the first list item that is rendered (0 based)", + "examples": [ + 10 + ] + }, + "to": { + "type": "Number", + "desc": "The index of the last list item that is rendered (0 based)", + "examples": [ + 50 + ] + }, + "direction": { + "type": "String", + "desc": "Direction of change", + "values": [ + "increase", + "decrease" + ] + }, + "ref": { + "type": "Object", + "desc": "Vue reference to the QVirtualList which triggered the event", + "addedIn": "v1.8.4" + } + } + } + } + } + }, + "methods": { + "scrollTo": { + "desc": "Scroll the virtual scroll list to the item with the specified index (0 based)", + "params": { + "index": { + "type": [ + "String", + "Number" + ], + "desc": "The index of the list item (0 based)", + "required": true, + "examples": [ + "1", + 23 + ] + }, + "edge": { + "type": "String", + "desc": "The edge to align to if the item is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns", + "values": [ + "start", + "center", + "end", + "start-force", + "center-force", + "end-force" + ], + "addedIn": "v1.13" + } + } + }, + "reset": { + "desc": "Resets the virtual scroll computations; Needed for custom edge-cases" + }, + "refresh": { + "desc": "Refreshes the virtual scroll list; Use it after appending items", + "params": { + "index": { + "type": [ + "String", + "Number" + ], + "desc": "The index of the list item to scroll to after refresh (0 based); If it's not specified the scroll position is not changed; Use a negative value to keep scroll position", + "examples": [ + "1", + 23, + -1 + ] + } + }, + "addedIn": "v1.8.4" + } + } +} \ No newline at end of file diff --git a/dist/api/Ripple.json b/dist/api/Ripple.json new file mode 100644 index 00000000000..4bf23b00827 --- /dev/null +++ b/dist/api/Ripple.json @@ -0,0 +1,118 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/material-ripple" + }, + "quasarConfOptions": { + "propName": "ripple", + "definition": { + "early": { + "type": "Boolean", + "desc": "Trigger early/immediately on user interaction" + }, + "stop": { + "type": "Boolean", + "desc": "Stop click/touch event propagation" + }, + "center": { + "type": "Boolean", + "desc": "Ripple starts from the absolute center" + }, + "color": { + "type": "String", + "desc": "Color name from Quasar Color Palette; Overrides default dynamic color", + "examples": [ + "orange-5" + ] + }, + "keyCodes": { + "type": [ + "Array", + "Number" + ], + "desc": "List of keyCode that should trigger the ripple", + "examples": [ + "[]", + "[13, 32]" + ] + } + }, + "addedIn": "v1.9.8" + }, + "value": { + "type": [ + "Boolean", + "Object" + ], + "desc": "Boolean (if just wanting to enable/disable) or Object for configuring more options", + "definition": { + "early": { + "type": "Boolean", + "desc": "Trigger early/immediately on user interaction", + "addedIn": "v1.9.8" + }, + "stop": { + "type": "Boolean", + "desc": "Stop click/touch event propagation" + }, + "center": { + "type": "Boolean", + "desc": "Ripple starts from the absolute center" + }, + "color": { + "type": "String", + "desc": "Color name from Quasar Color Palette; Overrides default dynamic color", + "examples": [ + "orange-5" + ] + }, + "keyCodes": { + "type": [ + "Array", + "Number" + ], + "desc": "List of keyCode that should trigger the ripple", + "examples": [ + "[]", + "[13, 32]" + ] + } + }, + "examples": [ + "v-ripple=\"booleanState\"", + "v-ripple=\"{ center: true, color: 'primary', keyCodes: [] }\"" + ] + }, + "arg": { + "type": "String", + "desc": "Color name from Quasar Color Palette; Overrides default dynamic color", + "reactive": true, + "examples": [ + "v-ripple:orange-5" + ] + }, + "modifiers": { + "early": { + "type": "Boolean", + "desc": "Trigger early/immediately on user interaction", + "reactive": true, + "addedIn": "v1.9.8" + }, + "stop": { + "type": "Boolean", + "desc": "Stop click/touch event propagation", + "reactive": true, + "examples": [ + "v-ripple.stop" + ] + }, + "center": { + "type": "Boolean", + "desc": "Ripple starts from the absolute center", + "reactive": true, + "examples": [ + "v-ripple.center" + ] + } + } +} \ No newline at end of file diff --git a/dist/api/Screen.json b/dist/api/Screen.json new file mode 100644 index 00000000000..c054caec520 --- /dev/null +++ b/dist/api/Screen.json @@ -0,0 +1,208 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/options/screen-plugin" + }, + "injection": "$q.screen", + "props": { + "width": { + "type": "Number", + "desc": "Screen width (in pixels)", + "reactive": true, + "examples": [ + 452 + ] + }, + "height": { + "type": "Number", + "desc": "Screen height (in pixels)", + "reactive": true, + "examples": [ + 721 + ] + }, + "name": { + "type": "String", + "desc": "Tells current window breakpoint", + "values": [ + "xs", + "sm", + "md", + "lg", + "xl" + ], + "reactive": true, + "addedIn": "v1.5.2" + }, + "sizes": { + "type": "Object", + "desc": "Breakpoints (in pixels)", + "definition": { + "sm": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ + 600 + ] + }, + "md": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ + 1024 + ] + }, + "lg": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ + 1440 + ] + }, + "xl": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ + 1920 + ] + } + }, + "reactive": true, + "examples": [ + "{ sm: 600, md: 1024, lg: 1440, xl: 1920 }" + ] + }, + "lt": { + "type": "Object", + "desc": "Tells if current screen width is lower than breakpoint-name", + "reactive": true, + "definition": { + "sm": { + "type": "Boolean", + "desc": "Is current screen width lower than this breakpoint's lowest limit?" + }, + "md": { + "type": "Boolean", + "desc": "Is current screen width lower than this breakpoint's lowest limit?" + }, + "lg": { + "type": "Boolean", + "desc": "Is current screen width lower than this breakpoint's lowest limit?" + }, + "xl": { + "type": "Boolean", + "desc": "Is current screen width lower than this breakpoint's lowest limit?" + } + }, + "examples": [ + "{ sm: false, md: true, lg: true, xl: true }" + ] + }, + "gt": { + "type": "Object", + "desc": "Tells if current screen width is greater than breakpoint-name", + "reactive": true, + "definition": { + "xs": { + "type": "Boolean", + "desc": "Is current screen width greater than this breakpoint's max limit?" + }, + "sm": { + "type": "Boolean", + "desc": "Is current screen width greater than this breakpoint's max limit?" + }, + "md": { + "type": "Boolean", + "desc": "Is current screen width greater than this breakpoint's max limit?" + }, + "lg": { + "type": "Boolean", + "desc": "Is current screen width greater than this breakpoint's max limit?" + } + }, + "examples": [ + "{ xs: true, sm: true, md: false, lg: false, xl: false }" + ] + }, + "xs": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'xs' breakpoint", + "reactive": true + }, + "sm": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'sm' breakpoint", + "reactive": true + }, + "md": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'md' breakpoint", + "reactive": true + }, + "lg": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'lg' breakpoint", + "reactive": true + }, + "xl": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'xl' breakpoint", + "reactive": true + } + }, + "methods": { + "setSizes": { + "desc": "Override default breakpoint sizes", + "params": { + "breakpoints": { + "type": "Object", + "desc": "Pick what you want to override", + "definition": { + "sm": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ + 600 + ] + }, + "md": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ + 1024 + ] + }, + "lg": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ + 1440 + ] + }, + "xl": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ + 1920 + ] + } + }, + "required": true + } + } + }, + "setDebounce": { + "desc": "Debounce update of all props when screen width/height changes", + "params": { + "amount": { + "type": "Number", + "desc": "Amount in milliseconds", + "required": true, + "examples": [ + 300 + ] + } + } + } + } +} \ No newline at end of file diff --git a/dist/api/Scroll.json b/dist/api/Scroll.json new file mode 100644 index 00000000000..475b60757ed --- /dev/null +++ b/dist/api/Scroll.json @@ -0,0 +1,31 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/scroll" + }, + "value": { + "type": "Function", + "desc": "Function to call when scrolling occurs (use a non-function to disable)", + "params": { + "verticalScrollPosition": { + "type": "Number", + "desc": "Scroll offset from top", + "examples": [ + 350 + ] + }, + "horizontalScrollPosition": { + "type": "Number", + "desc": "Scroll offset from left", + "examples": [ + 350 + ] + } + }, + "returns": null, + "examples": [ + "v-scroll=\"fnToCall\"", + "v-scroll=\"void 0\"" + ] + } +} \ No newline at end of file diff --git a/dist/api/ScrollFire.json b/dist/api/ScrollFire.json new file mode 100644 index 00000000000..38ef384ea29 --- /dev/null +++ b/dist/api/ScrollFire.json @@ -0,0 +1,21 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/scroll-fire" + }, + "value": { + "type": "Function", + "desc": "Function to call when scrolling and element comes into the viewport (use a non-function to disable)", + "params": { + "el": { + "type": "Object", + "desc": "DOM element that scroll-fire is applied to" + } + }, + "returns": null, + "examples": [ + "v-scroll-fire=\"fnToCall\"", + "v-scroll-fire=\"void 0\"" + ] + } +} \ No newline at end of file diff --git a/dist/api/SessionStorage.json b/dist/api/SessionStorage.json new file mode 100644 index 00000000000..6e1d11ee3dd --- /dev/null +++ b/dist/api/SessionStorage.json @@ -0,0 +1,267 @@ +{ + "type": "plugin", + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/web-storage" + }, + "injection": "$q.sessionStorage", + "methods": { + "has": { + "desc": "Check if storage item exists", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ + "userId" + ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": "Boolean", + "desc": "Does the item exists or not?" + } + }, + "getLength": { + "desc": "Get storage number of entries", + "returns": { + "type": "Number", + "desc": "Number of entries", + "examples": [ + 21 + ] + } + }, + "getItem": { + "tsType": "WebStorageGetItemMethodType", + "desc": "Get a storage item value", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ + "userId" + ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": [ + "Date", + "RegExp", + "Number", + "Boolean", + "Function", + "Object", + "Array", + "String", + "null" + ], + "desc": "Storage item value", + "examples": [ + "john12", + 702 + ] + } + }, + "getIndex": { + "tsType": "WebStorageGetIndexMethodType", + "desc": "Get the storage item value at specific index", + "params": { + "index": { + "type": "Number", + "desc": "Entry index", + "required": true, + "examples": [ + 5 + ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": [ + "Number", + "null" + ], + "desc": "Storage item index", + "examples": [ + 7 + ] + } + }, + "getKey": { + "tsType": "WebStorageGetKeyMethodType", + "desc": "Get the storage key at specific index", + "params": { + "index": { + "type": "Number", + "desc": "Entry index", + "required": true, + "examples": [ + 5 + ] + } + }, + "returns": { + "type": [ + "String", + "null" + ], + "desc": "Storage key", + "examples": [ + "userId" + ] + }, + "addedIn": "v1.9.4" + }, + "getAll": { + "desc": "Retrieve all items in storage", + "params": { + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object" + }, + "value": { + "type": "Any", + "desc": "Value in that key" + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value" + } + } + }, + "returns": { + "type": "Object", + "desc": "Object syntax: item name as Object key and its value", + "examples": [ + "{ userId: 'jon12', timesLoggedIn: 14 }" + ] + } + }, + "getAllKeys": { + "tsType": "WebStorageGetAllKeysMethodType", + "desc": "Retrieve all keys in storage", + "returns": { + "type": "Array", + "desc": "Storage keys (Array of Strings)", + "examples": [ + "['userId', 'password']" + ] + }, + "addedIn": "v1.9.4" + }, + "set": { + "desc": "Set item in storage", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ + "userId" + ] + }, + "value": { + "type": [ + "Date", + "RegExp", + "Number", + "Boolean", + "Function", + "Object", + "Array", + "String", + "null" + ], + "desc": "Entry value", + "required": true, + "examples": [ + "john12" + ] + } + } + }, + "remove": { + "desc": "Remove a storage item", + "params": { + "key": { + "type": "String", + "desc": "Storage key", + "required": true, + "examples": [ + "userId" + ] + } + } + }, + "clear": { + "desc": "Remove everything from the storage" + }, + "isEmpty": { + "desc": "Determine if storage has any items", + "returns": { + "type": "Boolean", + "desc": "Tells if storage is empty or not" + } + } + } +} \ No newline at end of file diff --git a/dist/api/TouchHold.json b/dist/api/TouchHold.json new file mode 100644 index 00000000000..ff9b79eb51a --- /dev/null +++ b/dist/api/TouchHold.json @@ -0,0 +1,90 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/touch-hold" + }, + "value": { + "type": "Function", + "desc": "Function to call after user has hold touch/click for the specified amount of time (use a non-function to disable)", + "params": { + "details": { + "type": "Object", + "desc": "Event details", + "definition": { + "evt": { + "type": "Object", + "desc": "Original JS event Object" + }, + "touch": { + "type": "Boolean", + "desc": "Triggered by a touch event" + }, + "mouse": { + "type": "Boolean", + "desc": "Triggered by a mouse event" + }, + "position": { + "type": "Object", + "desc": "Event Position Object", + "definition": { + "top": { + "type": "Number", + "desc": "Vertical offset from top of window", + "examples": [ + 235 + ] + }, + "left": { + "type": "Number", + "desc": "Horizontal offset from left of window", + "examples": [ + 235 + ] + } + } + }, + "duration": { + "type": "Number", + "desc": "How long it took to trigger the event (in milliseconds)", + "examples": [ + 612 + ] + } + } + } + }, + "returns": null, + "examples": [ + "v-touch-hold=\"fnToCall\"", + "v-touch-hold=\"void 0\"" + ] + }, + "arg": { + "type": "String", + "desc": "x:y:z, where x is the amount of time to wait (in milliseconds), y is the touch event sensitivity (in pixels) and z is the mouse event sensitivity (in pixels)", + "reactive": true, + "default": "600:5:7", + "examples": [ + "v-touch-hold:400=\"fnToCall\"", + "v-touch-hold:400:15=\"fnToCall\"", + "v-touch-hold:400:10:10=\"fnToCall\"" + ] + }, + "modifiers": { + "capture": { + "type": "Boolean", + "desc": "Use capture for touchstart event", + "reactive": true + }, + "mouse": { + "type": "Boolean", + "desc": "Listen for mouse events too", + "reactive": true + }, + "mouseCapture": { + "type": "Boolean", + "desc": "Use capture for mousedown event", + "reactive": true + } + } +} \ No newline at end of file diff --git a/dist/api/TouchPan.json b/dist/api/TouchPan.json new file mode 100644 index 00000000000..0320aedb774 --- /dev/null +++ b/dist/api/TouchPan.json @@ -0,0 +1,210 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + "value": { + "type": "Function", + "desc": "Handler for panning (use a non-function to disable)", + "params": { + "details": { + "type": "Object", + "desc": "Event details", + "definition": { + "evt": { + "type": "Object", + "desc": "Original JS event Object" + }, + "touch": { + "type": "Boolean", + "desc": "Triggered by a touch event" + }, + "mouse": { + "type": "Boolean", + "desc": "Triggered by a mouse event" + }, + "position": { + "type": "Object", + "desc": "Event Position Object", + "definition": { + "top": { + "type": "Number", + "desc": "Vertical offset from top of window", + "examples": [ + 235 + ] + }, + "left": { + "type": "Number", + "desc": "Horizontal offset from left of window", + "examples": [ + 235 + ] + } + } + }, + "direction": { + "type": "String", + "desc": "Direction of movement", + "values": [ + "up", + "right", + "down", + "left" + ] + }, + "isFirst": { + "type": "Boolean", + "desc": "Is first time the handler is called since movement started" + }, + "isFinal": { + "type": "Boolean", + "desc": "Is last time the handler is called since movement ended" + }, + "duration": { + "type": "Number", + "desc": "How long it took to trigger the event (in milliseconds)", + "examples": [ + 612 + ] + }, + "distance": { + "type": "Object", + "desc": "Absolute distance (in pixels) since movement started from initial point", + "definition": { + "x": { + "type": "Number", + "desc": "Absolute distance horizontally", + "examples": [ + 231 + ] + }, + "y": { + "type": "Number", + "desc": "Absolute distance vertically", + "examples": [ + 231 + ] + } + } + }, + "offset": { + "type": "Object", + "desc": "Distance (in pixels) since movement started from initial point", + "definition": { + "x": { + "type": "Number", + "desc": "Distance horizontally", + "examples": [ + -231, + 110 + ] + }, + "y": { + "type": "Number", + "desc": "Distance vertically", + "examples": [ + -231, + 110 + ] + } + } + }, + "delta": { + "type": "Object", + "desc": "Delta of distance (in pixels) since handler was called last time", + "definition": { + "x": { + "type": "Number", + "desc": "Distance horizontally", + "examples": [ + 2 + ] + }, + "y": { + "type": "Number", + "desc": "Distance vertically", + "examples": [ + 1 + ] + } + } + } + } + } + }, + "returns": null, + "examples": [ + "v-touch-pan=\"fnToCall\"", + "v-touch-pan=\"void 0\"" + ] + }, + "modifiers": { + "stop": { + "type": "Boolean", + "desc": "Stop event propagation for touch events", + "reactive": true + }, + "prevent": { + "type": "Boolean", + "desc": "Calls event.preventDefault() for touch events", + "reactive": true + }, + "capture": { + "type": "Boolean", + "desc": "Use capture for touchstart event", + "reactive": true + }, + "mouse": { + "type": "Boolean", + "desc": "Listen for mouse events too", + "reactive": true + }, + "mouseCapture": { + "type": "Boolean", + "desc": "Use capture for mousedown event", + "reactive": true + }, + "mouseAllDir": { + "type": "Boolean", + "desc": "Ignore initial mouse move direction (do not abort if the first mouse move is in an unaccepted direction)", + "reactive": true + }, + "preserveCursor": { + "type": "Boolean", + "desc": "Prevent the mouse cursor from automatically displaying as grabbing when panning", + "reactive": true, + "addedIn": "v1.13" + }, + "horizontal": { + "type": "Boolean", + "desc": "Catch horizontal (left/right) movement", + "reactive": true + }, + "vertical": { + "type": "Boolean", + "desc": "Catch vertical (up/down) movement", + "reactive": true + }, + "up": { + "type": "Boolean", + "desc": "Catch panning to up", + "reactive": true + }, + "right": { + "type": "Boolean", + "desc": "Catch panning to right", + "reactive": true + }, + "down": { + "type": "Boolean", + "desc": "Catch panning to down", + "reactive": true + }, + "left": { + "type": "Boolean", + "desc": "Catch panning to left", + "reactive": true + } + } +} \ No newline at end of file diff --git a/dist/api/TouchRepeat.json b/dist/api/TouchRepeat.json new file mode 100644 index 00000000000..1231954cf1a --- /dev/null +++ b/dist/api/TouchRepeat.json @@ -0,0 +1,171 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + "value": { + "type": "Function", + "desc": "Handler for touch-repeat (use a non-function to disable)", + "params": { + "details": { + "type": "Object", + "desc": "Event details", + "definition": { + "evt": { + "type": "Object", + "desc": "Original JS event Object" + }, + "touch": { + "type": "Boolean", + "desc": "Triggered by a touch event" + }, + "mouse": { + "type": "Boolean", + "desc": "Triggered by a mouse event" + }, + "keyboard": { + "type": "Boolean", + "desc": "Triggered by a keyboard event" + }, + "position": { + "type": "Object", + "desc": "Event Position Object; Supplied ONLY if it's a touch or mouse event", + "definition": { + "top": { + "type": "Number", + "desc": "Vertical offset from top of window", + "examples": [ + 235 + ] + }, + "left": { + "type": "Number", + "desc": "Horizontal offset from left of window", + "examples": [ + 235 + ] + } + } + }, + "keyCode": { + "type": "Number", + "desc": "Keycode; Supplied ONLY if it's a keyboard event", + "examples": [ + 65 + ] + }, + "duration": { + "type": "Number", + "desc": "How long it took to trigger the event (in milliseconds)", + "examples": [ + 612 + ] + }, + "repeatCount": { + "type": "Number", + "desc": "Handler called for nth time", + "examples": [ + 2 + ] + }, + "startTime": { + "type": "Number", + "desc": "Unix timestamp of the moment when event started; Equivalent to Date.now()", + "examples": [ + 1558603256472 + ] + } + } + } + }, + "returns": null, + "examples": [ + "v-touch-repeat=\"fnToCall\"", + "v-touch-repeat=\"void 0\"" + ] + }, + "arg": { + "type": "String", + "desc": "String of numbers (at least one number) separated by ':' which defines the amount of time to wait for 1st handler call, 2nd, 3rd and so on; All subsequent calls will use last value as time to wait until triggering", + "reactive": true, + "default": "0:600:300", + "examples": [ + "v-touch-repeat:0:400=\"fnToCall\"" + ] + }, + "modifiers": { + "capture": { + "type": "Boolean", + "desc": "Use capture for touchstart event", + "reactive": true + }, + "mouse": { + "type": "Boolean", + "desc": "Listen for mouse events too", + "reactive": true + }, + "mouseCapture": { + "type": "Boolean", + "desc": "Use capture for mousedown event", + "reactive": true + }, + "keyCapture": { + "type": "Boolean", + "desc": "Use capture for keydown event", + "reactive": true + }, + "esc": { + "type": "Boolean", + "desc": "Catch ESC key", + "reactive": true + }, + "tab": { + "type": "Boolean", + "desc": "Catch TAB key", + "reactive": true + }, + "enter": { + "type": "Boolean", + "desc": "Catch ENTER key", + "reactive": true + }, + "space": { + "type": "Boolean", + "desc": "Catch SPACE key", + "reactive": true + }, + "up": { + "type": "Boolean", + "desc": "Catch UP arrow key", + "reactive": true + }, + "left": { + "type": "Boolean", + "desc": "Catch LEFT arrow key", + "reactive": true + }, + "right": { + "type": "Boolean", + "desc": "Catch RIGHT arrow key", + "reactive": true + }, + "down": { + "type": "Boolean", + "desc": "Catch DOWN key", + "reactive": true + }, + "delete": { + "type": "Boolean", + "desc": "Catch DELETE key", + "reactive": true + }, + "[keycode]": { + "type": "Number", + "desc": "Key code to catch", + "reactive": true, + "examples": [ + "v-touch-repeat.68=\"fnToCall\"" + ] + } + } +} \ No newline at end of file diff --git a/dist/api/TouchSwipe.json b/dist/api/TouchSwipe.json new file mode 100644 index 00000000000..ac4d2a8cf74 --- /dev/null +++ b/dist/api/TouchSwipe.json @@ -0,0 +1,128 @@ +{ + "type": "directive", + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + "value": { + "type": "Function", + "desc": "Handler for swipe (use a non-function to disable)", + "params": { + "details": { + "type": "Object", + "desc": "Event details", + "definition": { + "evt": { + "type": "Object", + "desc": "Original JS event Object" + }, + "touch": { + "type": "Boolean", + "desc": "Triggered by a touch event" + }, + "mouse": { + "type": "Boolean", + "desc": "Triggered by a mouse event" + }, + "direction": { + "type": "String", + "desc": "Direction of movement", + "values": [ + "up", + "right", + "down", + "left" + ] + }, + "duration": { + "type": "Number", + "desc": "How long it took to trigger the event (in milliseconds)", + "examples": [ + 612 + ] + }, + "distance": { + "type": "Object", + "desc": "Absolute distance (in pixels) since movement started from initial point", + "definition": { + "x": { + "type": "Number", + "desc": "Absolute distance horizontally", + "examples": [ + 231 + ] + }, + "y": { + "type": "Number", + "desc": "Absolute distance vertically", + "examples": [ + 231 + ] + } + } + } + } + } + }, + "returns": null, + "examples": [ + "v-touch-swipe=\"fnToCall\"", + "v-touch-swipe=\"void 0\"" + ] + }, + "arg": { + "type": "String", + "desc": "x:y:z, where x is minimum velocity (dist/time; please use float without a dot, example: 6e-2 which is equivalent to 6 * 10^-2 = 0.06), y is minimum distance on first move on mobile, z is minimum distance on desktop until deciding if it's a swipe indeed", + "reactive": true, + "default": "6e-2:6:50", + "examples": [ + "v-touch-swipe:7e-2:10:100=\"fnToCall\"" + ] + }, + "modifiers": { + "capture": { + "type": "Boolean", + "desc": "Use capture for touchstart event", + "reactive": true + }, + "mouse": { + "type": "Boolean", + "desc": "Listen for mouse events too", + "reactive": true + }, + "mouseCapture": { + "type": "Boolean", + "desc": "Use capture for mousedown event", + "reactive": true + }, + "horizontal": { + "type": "Boolean", + "desc": "Catch horizontal (left/right) movement", + "reactive": true + }, + "vertical": { + "type": "Boolean", + "desc": "Catch vertical (up/down) movement", + "reactive": true + }, + "up": { + "type": "Boolean", + "desc": "Catch swipe to up", + "reactive": true + }, + "right": { + "type": "Boolean", + "desc": "Catch swipe to right", + "reactive": true + }, + "down": { + "type": "Boolean", + "desc": "Catch swipe to down", + "reactive": true + }, + "left": { + "type": "Boolean", + "desc": "Catch swipe to left", + "reactive": true + } + } +} \ No newline at end of file diff --git a/dist/babel-transforms/auto-import.json b/dist/babel-transforms/auto-import.json new file mode 100644 index 00000000000..d4afb0489f8 --- /dev/null +++ b/dist/babel-transforms/auto-import.json @@ -0,0 +1,269 @@ +{ + "importName": { + "QAjaxBar": "QAjaxBar", + "q-ajax-bar": "QAjaxBar", + "QAvatar": "QAvatar", + "q-avatar": "QAvatar", + "QBadge": "QBadge", + "q-badge": "QBadge", + "QBanner": "QBanner", + "q-banner": "QBanner", + "QBar": "QBar", + "q-bar": "QBar", + "QBreadcrumbs": "QBreadcrumbs", + "q-breadcrumbs": "QBreadcrumbs", + "QBreadcrumbsEl": "QBreadcrumbsEl", + "q-breadcrumbs-el": "QBreadcrumbsEl", + "QBtnDropdown": "QBtnDropdown", + "q-btn-dropdown": "QBtnDropdown", + "QBtnGroup": "QBtnGroup", + "q-btn-group": "QBtnGroup", + "QBtnToggle": "QBtnToggle", + "q-btn-toggle": "QBtnToggle", + "QBtn": "QBtn", + "q-btn": "QBtn", + "QCard": "QCard", + "q-card": "QCard", + "QCardActions": "QCardActions", + "q-card-actions": "QCardActions", + "QCardSection": "QCardSection", + "q-card-section": "QCardSection", + "QCarousel": "QCarousel", + "q-carousel": "QCarousel", + "QCarouselControl": "QCarouselControl", + "q-carousel-control": "QCarouselControl", + "QCarouselSlide": "QCarouselSlide", + "q-carousel-slide": "QCarouselSlide", + "QChatMessage": "QChatMessage", + "q-chat-message": "QChatMessage", + "QCheckbox": "QCheckbox", + "q-checkbox": "QCheckbox", + "QChip": "QChip", + "q-chip": "QChip", + "QCircularProgress": "QCircularProgress", + "q-circular-progress": "QCircularProgress", + "QColor": "QColor", + "q-color": "QColor", + "QDate": "QDate", + "q-date": "QDate", + "QDialog": "QDialog", + "q-dialog": "QDialog", + "QDrawer": "QDrawer", + "q-drawer": "QDrawer", + "QEditor": "QEditor", + "q-editor": "QEditor", + "QExpansionItem": "QExpansionItem", + "q-expansion-item": "QExpansionItem", + "QFab": "QFab", + "q-fab": "QFab", + "QFabAction": "QFabAction", + "q-fab-action": "QFabAction", + "QField": "QField", + "q-field": "QField", + "QFile": "QFile", + "q-file": "QFile", + "QFooter": "QFooter", + "q-footer": "QFooter", + "QForm": "QForm", + "q-form": "QForm", + "QHeader": "QHeader", + "q-header": "QHeader", + "QIcon": "QIcon", + "q-icon": "QIcon", + "QImg": "QImg", + "q-img": "QImg", + "QInfiniteScroll": "QInfiniteScroll", + "q-infinite-scroll": "QInfiniteScroll", + "QInnerLoading": "QInnerLoading", + "q-inner-loading": "QInnerLoading", + "QInput": "QInput", + "q-input": "QInput", + "QIntersection": "QIntersection", + "q-intersection": "QIntersection", + "QItem": "QItem", + "q-item": "QItem", + "QItemLabel": "QItemLabel", + "q-item-label": "QItemLabel", + "QItemSection": "QItemSection", + "q-item-section": "QItemSection", + "QList": "QList", + "q-list": "QList", + "QKnob": "QKnob", + "q-knob": "QKnob", + "QLayout": "QLayout", + "q-layout": "QLayout", + "QLinearProgress": "QLinearProgress", + "q-linear-progress": "QLinearProgress", + "QMarkupTable": "QMarkupTable", + "q-markup-table": "QMarkupTable", + "QMenu": "QMenu", + "q-menu": "QMenu", + "QNoSsr": "QNoSsr", + "q-no-ssr": "QNoSsr", + "QOptionGroup": "QOptionGroup", + "q-option-group": "QOptionGroup", + "QPageScroller": "QPageScroller", + "q-page-scroller": "QPageScroller", + "QPageSticky": "QPageSticky", + "q-page-sticky": "QPageSticky", + "QPage": "QPage", + "q-page": "QPage", + "QPageContainer": "QPageContainer", + "q-page-container": "QPageContainer", + "QPagination": "QPagination", + "q-pagination": "QPagination", + "QParallax": "QParallax", + "q-parallax": "QParallax", + "QPopupEdit": "QPopupEdit", + "q-popup-edit": "QPopupEdit", + "QPopupProxy": "QPopupProxy", + "q-popup-proxy": "QPopupProxy", + "QPullToRefresh": "QPullToRefresh", + "q-pull-to-refresh": "QPullToRefresh", + "QRadio": "QRadio", + "q-radio": "QRadio", + "QRange": "QRange", + "q-range": "QRange", + "QRating": "QRating", + "q-rating": "QRating", + "QResizeObserver": "QResizeObserver", + "q-resize-observer": "QResizeObserver", + "QResponsive": "QResponsive", + "q-responsive": "QResponsive", + "QScrollArea": "QScrollArea", + "q-scroll-area": "QScrollArea", + "QScrollObserver": "QScrollObserver", + "q-scroll-observer": "QScrollObserver", + "QSelect": "QSelect", + "q-select": "QSelect", + "QSeparator": "QSeparator", + "q-separator": "QSeparator", + "QSkeleton": "QSkeleton", + "q-skeleton": "QSkeleton", + "QSlideItem": "QSlideItem", + "q-slide-item": "QSlideItem", + "QSlideTransition": "QSlideTransition", + "q-slide-transition": "QSlideTransition", + "QSlider": "QSlider", + "q-slider": "QSlider", + "QSpace": "QSpace", + "q-space": "QSpace", + "QSpinner": "QSpinner", + "q-spinner": "QSpinner", + "QSpinnerAudio": "QSpinnerAudio", + "q-spinner-audio": "QSpinnerAudio", + "QSpinnerBall": "QSpinnerBall", + "q-spinner-ball": "QSpinnerBall", + "QSpinnerBars": "QSpinnerBars", + "q-spinner-bars": "QSpinnerBars", + "QSpinnerBox": "QSpinnerBox", + "q-spinner-box": "QSpinnerBox", + "QSpinnerClock": "QSpinnerClock", + "q-spinner-clock": "QSpinnerClock", + "QSpinnerComment": "QSpinnerComment", + "q-spinner-comment": "QSpinnerComment", + "QSpinnerCube": "QSpinnerCube", + "q-spinner-cube": "QSpinnerCube", + "QSpinnerDots": "QSpinnerDots", + "q-spinner-dots": "QSpinnerDots", + "QSpinnerFacebook": "QSpinnerFacebook", + "q-spinner-facebook": "QSpinnerFacebook", + "QSpinnerGears": "QSpinnerGears", + "q-spinner-gears": "QSpinnerGears", + "QSpinnerGrid": "QSpinnerGrid", + "q-spinner-grid": "QSpinnerGrid", + "QSpinnerHearts": "QSpinnerHearts", + "q-spinner-hearts": "QSpinnerHearts", + "QSpinnerHourglass": "QSpinnerHourglass", + "q-spinner-hourglass": "QSpinnerHourglass", + "QSpinnerInfinity": "QSpinnerInfinity", + "q-spinner-infinity": "QSpinnerInfinity", + "QSpinnerIos": "QSpinnerIos", + "q-spinner-ios": "QSpinnerIos", + "QSpinnerOrbit": "QSpinnerOrbit", + "q-spinner-orbit": "QSpinnerOrbit", + "QSpinnerOval": "QSpinnerOval", + "q-spinner-oval": "QSpinnerOval", + "QSpinnerPie": "QSpinnerPie", + "q-spinner-pie": "QSpinnerPie", + "QSpinnerPuff": "QSpinnerPuff", + "q-spinner-puff": "QSpinnerPuff", + "QSpinnerRadio": "QSpinnerRadio", + "q-spinner-radio": "QSpinnerRadio", + "QSpinnerRings": "QSpinnerRings", + "q-spinner-rings": "QSpinnerRings", + "QSpinnerTail": "QSpinnerTail", + "q-spinner-tail": "QSpinnerTail", + "QSplitter": "QSplitter", + "q-splitter": "QSplitter", + "QStep": "QStep", + "q-step": "QStep", + "QStepper": "QStepper", + "q-stepper": "QStepper", + "QStepperNavigation": "QStepperNavigation", + "q-stepper-navigation": "QStepperNavigation", + "QTabPanel": "QTabPanel", + "q-tab-panel": "QTabPanel", + "QTabPanels": "QTabPanels", + "q-tab-panels": "QTabPanels", + "QTable": "QTable", + "q-table": "QTable", + "QTd": "QTd", + "q-td": "QTd", + "QTh": "QTh", + "q-th": "QTh", + "QTr": "QTr", + "q-tr": "QTr", + "QRouteTab": "QRouteTab", + "q-route-tab": "QRouteTab", + "QTab": "QTab", + "q-tab": "QTab", + "QTabs": "QTabs", + "q-tabs": "QTabs", + "QTime": "QTime", + "q-time": "QTime", + "QTimeline": "QTimeline", + "q-timeline": "QTimeline", + "QTimelineEntry": "QTimelineEntry", + "q-timeline-entry": "QTimelineEntry", + "QToggle": "QToggle", + "q-toggle": "QToggle", + "QToolbar": "QToolbar", + "q-toolbar": "QToolbar", + "QToolbarTitle": "QToolbarTitle", + "q-toolbar-title": "QToolbarTitle", + "QTooltip": "QTooltip", + "q-tooltip": "QTooltip", + "QTree": "QTree", + "q-tree": "QTree", + "QUploader": "QUploader", + "q-uploader": "QUploader", + "QUploaderAddTrigger": "QUploaderAddTrigger", + "q-uploader-add-trigger": "QUploaderAddTrigger", + "QUploaderBase": "QUploaderBase", + "q-uploader-base": "QUploaderBase", + "QVideo": "QVideo", + "q-video": "QVideo", + "QVirtualScroll": "QVirtualScroll", + "q-virtual-scroll": "QVirtualScroll", + "v-close-popup": "ClosePopup", + "v-go-back": "GoBack", + "v-intersection": "Intersection", + "v-key-group-navigation": "KeyGroupNavigation", + "v-morph": "Morph", + "v-mutation": "Mutation", + "v-ripple": "Ripple", + "v-scroll": "Scroll", + "v-scroll-fire": "ScrollFire", + "v-touch-hold": "TouchHold", + "v-touch-pan": "TouchPan", + "v-touch-repeat": "TouchRepeat", + "v-touch-swipe": "TouchSwipe" + }, + "regex": { + "kebabComponents": "(q-uploader-add-trigger|q-stepper-navigation|q-circular-progress|q-spinner-hourglass|q-carousel-control|q-slide-transition|q-spinner-facebook|q-spinner-infinity|q-infinite-scroll|q-linear-progress|q-pull-to-refresh|q-resize-observer|q-scroll-observer|q-spinner-comment|q-breadcrumbs-el|q-carousel-slide|q-expansion-item|q-page-container|q-spinner-hearts|q-timeline-entry|q-virtual-scroll|q-inner-loading|q-page-scroller|q-spinner-audio|q-spinner-clock|q-spinner-gears|q-spinner-orbit|q-spinner-radio|q-spinner-rings|q-toolbar-title|q-uploader-base|q-btn-dropdown|q-card-actions|q-card-section|q-chat-message|q-intersection|q-item-section|q-markup-table|q-option-group|q-spinner-ball|q-spinner-bars|q-spinner-cube|q-spinner-dots|q-spinner-grid|q-spinner-oval|q-spinner-puff|q-spinner-tail|q-breadcrumbs|q-page-sticky|q-popup-proxy|q-scroll-area|q-spinner-box|q-spinner-ios|q-spinner-pie|q-btn-toggle|q-fab-action|q-item-label|q-pagination|q-popup-edit|q-responsive|q-slide-item|q-tab-panels|q-btn-group|q-separator|q-tab-panel|q-route-tab|q-ajax-bar|q-carousel|q-checkbox|q-parallax|q-skeleton|q-splitter|q-timeline|q-uploader|q-spinner|q-stepper|q-toolbar|q-tooltip|q-avatar|q-banner|q-dialog|q-drawer|q-editor|q-footer|q-header|q-layout|q-no-ssr|q-rating|q-select|q-slider|q-toggle|q-badge|q-color|q-field|q-input|q-radio|q-range|q-space|q-table|q-video|q-card|q-chip|q-date|q-file|q-form|q-icon|q-item|q-list|q-knob|q-menu|q-page|q-step|q-tabs|q-time|q-tree|q-bar|q-btn|q-fab|q-img|q-tab|q-td|q-th|q-tr)", + "pascalComponents": "(QUploaderAddTrigger|QStepperNavigation|QCircularProgress|QSpinnerHourglass|QCarouselControl|QSlideTransition|QSpinnerFacebook|QSpinnerInfinity|QInfiniteScroll|QLinearProgress|QResizeObserver|QScrollObserver|QSpinnerComment|QBreadcrumbsEl|QCarouselSlide|QExpansionItem|QPageContainer|QPullToRefresh|QSpinnerHearts|QTimelineEntry|QVirtualScroll|QInnerLoading|QIntersection|QPageScroller|QSpinnerAudio|QSpinnerClock|QSpinnerGears|QSpinnerOrbit|QSpinnerRadio|QSpinnerRings|QToolbarTitle|QUploaderBase|QBreadcrumbs|QBtnDropdown|QCardActions|QCardSection|QChatMessage|QItemSection|QMarkupTable|QOptionGroup|QSpinnerBall|QSpinnerBars|QSpinnerCube|QSpinnerDots|QSpinnerGrid|QSpinnerOval|QSpinnerPuff|QSpinnerTail|QPageSticky|QPagination|QPopupProxy|QResponsive|QScrollArea|QSpinnerBox|QSpinnerIos|QSpinnerPie|QBtnToggle|QFabAction|QItemLabel|QPopupEdit|QSeparator|QSlideItem|QTabPanels|QBtnGroup|QCarousel|QCheckbox|QParallax|QSkeleton|QSplitter|QTabPanel|QRouteTab|QTimeline|QUploader|QAjaxBar|QSpinner|QStepper|QToolbar|QTooltip|QAvatar|QBanner|QDialog|QDrawer|QEditor|QFooter|QHeader|QLayout|QRating|QSelect|QSlider|QToggle|QBadge|QColor|QField|QInput|QNoSsr|QRadio|QRange|QSpace|QTable|QVideo|QCard|QChip|QDate|QFile|QForm|QIcon|QItem|QList|QKnob|QMenu|QPage|QStep|QTabs|QTime|QTree|QBar|QBtn|QFab|QImg|QTab|QTd|QTh|QTr)", + "components": "(q-uploader-add-trigger|q-stepper-navigation|q-circular-progress|q-spinner-hourglass|q-carousel-control|q-slide-transition|q-spinner-facebook|q-spinner-infinity|q-infinite-scroll|q-linear-progress|q-pull-to-refresh|q-resize-observer|q-scroll-observer|q-spinner-comment|q-breadcrumbs-el|q-carousel-slide|q-expansion-item|q-page-container|q-spinner-hearts|q-timeline-entry|q-virtual-scroll|q-inner-loading|q-page-scroller|q-spinner-audio|q-spinner-clock|q-spinner-gears|q-spinner-orbit|q-spinner-radio|q-spinner-rings|q-toolbar-title|q-uploader-base|q-btn-dropdown|q-card-actions|q-card-section|q-chat-message|q-intersection|q-item-section|q-markup-table|q-option-group|q-spinner-ball|q-spinner-bars|q-spinner-cube|q-spinner-dots|q-spinner-grid|q-spinner-oval|q-spinner-puff|q-spinner-tail|q-breadcrumbs|q-page-sticky|q-popup-proxy|q-scroll-area|q-spinner-box|q-spinner-ios|q-spinner-pie|q-btn-toggle|q-fab-action|q-item-label|q-pagination|q-popup-edit|q-responsive|q-slide-item|q-tab-panels|q-btn-group|q-separator|q-tab-panel|q-route-tab|q-ajax-bar|q-carousel|q-checkbox|q-parallax|q-skeleton|q-splitter|q-timeline|q-uploader|q-spinner|q-stepper|q-toolbar|q-tooltip|q-avatar|q-banner|q-dialog|q-drawer|q-editor|q-footer|q-header|q-layout|q-no-ssr|q-rating|q-select|q-slider|q-toggle|q-badge|q-color|q-field|q-input|q-radio|q-range|q-space|q-table|q-video|q-card|q-chip|q-date|q-file|q-form|q-icon|q-item|q-list|q-knob|q-menu|q-page|q-step|q-tabs|q-time|q-tree|q-bar|q-btn|q-fab|q-img|q-tab|q-td|q-th|q-tr|QUploaderAddTrigger|QStepperNavigation|QCircularProgress|QSpinnerHourglass|QCarouselControl|QSlideTransition|QSpinnerFacebook|QSpinnerInfinity|QInfiniteScroll|QLinearProgress|QResizeObserver|QScrollObserver|QSpinnerComment|QBreadcrumbsEl|QCarouselSlide|QExpansionItem|QPageContainer|QPullToRefresh|QSpinnerHearts|QTimelineEntry|QVirtualScroll|QInnerLoading|QIntersection|QPageScroller|QSpinnerAudio|QSpinnerClock|QSpinnerGears|QSpinnerOrbit|QSpinnerRadio|QSpinnerRings|QToolbarTitle|QUploaderBase|QBreadcrumbs|QBtnDropdown|QCardActions|QCardSection|QChatMessage|QItemSection|QMarkupTable|QOptionGroup|QSpinnerBall|QSpinnerBars|QSpinnerCube|QSpinnerDots|QSpinnerGrid|QSpinnerOval|QSpinnerPuff|QSpinnerTail|QPageSticky|QPagination|QPopupProxy|QResponsive|QScrollArea|QSpinnerBox|QSpinnerIos|QSpinnerPie|QBtnToggle|QFabAction|QItemLabel|QPopupEdit|QSeparator|QSlideItem|QTabPanels|QBtnGroup|QCarousel|QCheckbox|QParallax|QSkeleton|QSplitter|QTabPanel|QRouteTab|QTimeline|QUploader|QAjaxBar|QSpinner|QStepper|QToolbar|QTooltip|QAvatar|QBanner|QDialog|QDrawer|QEditor|QFooter|QHeader|QLayout|QRating|QSelect|QSlider|QToggle|QBadge|QColor|QField|QInput|QNoSsr|QRadio|QRange|QSpace|QTable|QVideo|QCard|QChip|QDate|QFile|QForm|QIcon|QItem|QList|QKnob|QMenu|QPage|QStep|QTabs|QTime|QTree|QBar|QBtn|QFab|QImg|QTab|QTd|QTh|QTr)", + "directives": "(v-key-group-navigation|v-intersection|v-touch-repeat|v-close-popup|v-scroll-fire|v-touch-swipe|v-touch-hold|v-touch-pan|v-mutation|v-go-back|v-ripple|v-scroll|v-morph)" + } +} \ No newline at end of file diff --git a/dist/babel-transforms/imports.js b/dist/babel-transforms/imports.js new file mode 100644 index 00000000000..010229987de --- /dev/null +++ b/dist/babel-transforms/imports.js @@ -0,0 +1,182 @@ +const map = { + "Quasar": "src/vue-plugin.js", + "QAjaxBar": "src/components/ajax-bar/QAjaxBar.js", + "QAvatar": "src/components/avatar/QAvatar.js", + "QBadge": "src/components/badge/QBadge.js", + "QBanner": "src/components/banner/QBanner.js", + "QBar": "src/components/bar/QBar.js", + "QBreadcrumbs": "src/components/breadcrumbs/QBreadcrumbs.js", + "QBreadcrumbsEl": "src/components/breadcrumbs/QBreadcrumbsEl.js", + "QBtnDropdown": "src/components/btn-dropdown/QBtnDropdown.js", + "QBtnGroup": "src/components/btn-group/QBtnGroup.js", + "QBtnToggle": "src/components/btn-toggle/QBtnToggle.js", + "QBtn": "src/components/btn/QBtn.js", + "QCard": "src/components/card/QCard.js", + "QCardActions": "src/components/card/QCardActions.js", + "QCardSection": "src/components/card/QCardSection.js", + "QCarousel": "src/components/carousel/QCarousel.js", + "QCarouselControl": "src/components/carousel/QCarouselControl.js", + "QCarouselSlide": "src/components/carousel/QCarouselSlide.js", + "QChatMessage": "src/components/chat/QChatMessage.js", + "QCheckbox": "src/components/checkbox/QCheckbox.js", + "QChip": "src/components/chip/QChip.js", + "QCircularProgress": "src/components/circular-progress/QCircularProgress.js", + "QColor": "src/components/color/QColor.js", + "QDate": "src/components/date/QDate.js", + "QDialog": "src/components/dialog/QDialog.js", + "QDrawer": "src/components/drawer/QDrawer.js", + "QEditor": "src/components/editor/QEditor.js", + "QExpansionItem": "src/components/expansion-item/QExpansionItem.js", + "QFab": "src/components/fab/QFab.js", + "QFabAction": "src/components/fab/QFabAction.js", + "QField": "src/components/field/QField.js", + "QFile": "src/components/file/QFile.js", + "QFooter": "src/components/footer/QFooter.js", + "QForm": "src/components/form/QForm.js", + "QHeader": "src/components/header/QHeader.js", + "QIcon": "src/components/icon/QIcon.js", + "QImg": "src/components/img/QImg.js", + "QInfiniteScroll": "src/components/infinite-scroll/QInfiniteScroll.js", + "QInnerLoading": "src/components/inner-loading/QInnerLoading.js", + "QInput": "src/components/input/QInput.js", + "QIntersection": "src/components/intersection/QIntersection.js", + "QItem": "src/components/item/QItem.js", + "QItemLabel": "src/components/item/QItemLabel.js", + "QItemSection": "src/components/item/QItemSection.js", + "QList": "src/components/item/QList.js", + "QKnob": "src/components/knob/QKnob.js", + "QLayout": "src/components/layout/QLayout.js", + "QLinearProgress": "src/components/linear-progress/QLinearProgress.js", + "QMarkupTable": "src/components/markup-table/QMarkupTable.js", + "QMenu": "src/components/menu/QMenu.js", + "QNoSsr": "src/components/no-ssr/QNoSsr.js", + "QOptionGroup": "src/components/option-group/QOptionGroup.js", + "QPageScroller": "src/components/page-scroller/QPageScroller.js", + "QPageSticky": "src/components/page-sticky/QPageSticky.js", + "QPage": "src/components/page/QPage.js", + "QPageContainer": "src/components/page/QPageContainer.js", + "QPagination": "src/components/pagination/QPagination.js", + "QParallax": "src/components/parallax/QParallax.js", + "QPopupEdit": "src/components/popup-edit/QPopupEdit.js", + "QPopupProxy": "src/components/popup-proxy/QPopupProxy.js", + "QPullToRefresh": "src/components/pull-to-refresh/QPullToRefresh.js", + "QRadio": "src/components/radio/QRadio.js", + "QRange": "src/components/range/QRange.js", + "QRating": "src/components/rating/QRating.js", + "QResizeObserver": "src/components/resize-observer/QResizeObserver.js", + "QResponsive": "src/components/responsive/QResponsive.js", + "QScrollArea": "src/components/scroll-area/QScrollArea.js", + "QScrollObserver": "src/components/scroll-observer/QScrollObserver.js", + "QSelect": "src/components/select/QSelect.js", + "QSeparator": "src/components/separator/QSeparator.js", + "QSkeleton": "src/components/skeleton/QSkeleton.js", + "QSlideItem": "src/components/slide-item/QSlideItem.js", + "QSlideTransition": "src/components/slide-transition/QSlideTransition.js", + "QSlider": "src/components/slider/QSlider.js", + "QSpace": "src/components/space/QSpace.js", + "QSpinner": "src/components/spinner/QSpinner.js", + "QSpinnerAudio": "src/components/spinner/QSpinnerAudio.js", + "QSpinnerBall": "src/components/spinner/QSpinnerBall.js", + "QSpinnerBars": "src/components/spinner/QSpinnerBars.js", + "QSpinnerBox": "src/components/spinner/QSpinnerBox.js", + "QSpinnerClock": "src/components/spinner/QSpinnerClock.js", + "QSpinnerComment": "src/components/spinner/QSpinnerComment.js", + "QSpinnerCube": "src/components/spinner/QSpinnerCube.js", + "QSpinnerDots": "src/components/spinner/QSpinnerDots.js", + "QSpinnerFacebook": "src/components/spinner/QSpinnerFacebook.js", + "QSpinnerGears": "src/components/spinner/QSpinnerGears.js", + "QSpinnerGrid": "src/components/spinner/QSpinnerGrid.js", + "QSpinnerHearts": "src/components/spinner/QSpinnerHearts.js", + "QSpinnerHourglass": "src/components/spinner/QSpinnerHourglass.js", + "QSpinnerInfinity": "src/components/spinner/QSpinnerInfinity.js", + "QSpinnerIos": "src/components/spinner/QSpinnerIos.js", + "QSpinnerOrbit": "src/components/spinner/QSpinnerOrbit.js", + "QSpinnerOval": "src/components/spinner/QSpinnerOval.js", + "QSpinnerPie": "src/components/spinner/QSpinnerPie.js", + "QSpinnerPuff": "src/components/spinner/QSpinnerPuff.js", + "QSpinnerRadio": "src/components/spinner/QSpinnerRadio.js", + "QSpinnerRings": "src/components/spinner/QSpinnerRings.js", + "QSpinnerTail": "src/components/spinner/QSpinnerTail.js", + "QSplitter": "src/components/splitter/QSplitter.js", + "QStep": "src/components/stepper/QStep.js", + "QStepper": "src/components/stepper/QStepper.js", + "QStepperNavigation": "src/components/stepper/QStepperNavigation.js", + "QTabPanel": "src/components/tab-panels/QTabPanel.js", + "QTabPanels": "src/components/tab-panels/QTabPanels.js", + "QTable": "src/components/table/QTable.js", + "QTd": "src/components/table/QTd.js", + "QTh": "src/components/table/QTh.js", + "QTr": "src/components/table/QTr.js", + "QRouteTab": "src/components/tabs/QRouteTab.js", + "QTab": "src/components/tabs/QTab.js", + "QTabs": "src/components/tabs/QTabs.js", + "QTime": "src/components/time/QTime.js", + "QTimeline": "src/components/timeline/QTimeline.js", + "QTimelineEntry": "src/components/timeline/QTimelineEntry.js", + "QToggle": "src/components/toggle/QToggle.js", + "QToolbar": "src/components/toolbar/QToolbar.js", + "QToolbarTitle": "src/components/toolbar/QToolbarTitle.js", + "QTooltip": "src/components/tooltip/QTooltip.js", + "QTree": "src/components/tree/QTree.js", + "QUploader": "src/components/uploader/QUploader.js", + "QUploaderAddTrigger": "src/components/uploader/QUploaderAddTrigger.js", + "QUploaderBase": "src/components/uploader/QUploaderBase.js", + "QVideo": "src/components/video/QVideo.js", + "QVirtualScroll": "src/components/virtual-scroll/QVirtualScroll.js", + "ClosePopup": "src/directives/ClosePopup.js", + "GoBack": "src/directives/GoBack.js", + "Intersection": "src/directives/Intersection.js", + "KeyGroupNavigation": "src/directives/KeyGroupNavigation.js", + "Morph": "src/directives/Morph.js", + "Mutation": "src/directives/Mutation.js", + "Ripple": "src/directives/Ripple.js", + "Scroll": "src/directives/Scroll.js", + "ScrollFire": "src/directives/ScrollFire.js", + "TouchHold": "src/directives/TouchHold.js", + "TouchPan": "src/directives/TouchPan.js", + "TouchRepeat": "src/directives/TouchRepeat.js", + "TouchSwipe": "src/directives/TouchSwipe.js", + "AddressbarColor": "src/plugins/AddressbarColor.js", + "AppFullscreen": "src/plugins/AppFullscreen.js", + "AppVisibility": "src/plugins/AppVisibility.js", + "BottomSheet": "src/plugins/BottomSheet.js", + "Cookies": "src/plugins/Cookies.js", + "Dark": "src/plugins/Dark.js", + "Dialog": "src/plugins/Dialog.js", + "Interaction": "src/plugins/Interaction.js", + "Loading": "src/plugins/Loading.js", + "LoadingBar": "src/plugins/LoadingBar.js", + "LocalStorage": "src/plugins/LocalStorage.js", + "Meta": "src/plugins/Meta.js", + "Notify": "src/plugins/Notify.js", + "Platform": "src/plugins/Platform.js", + "Screen": "src/plugins/Screen.js", + "SessionStorage": "src/plugins/SessionStorage.js", + "clone": "src/utils/clone.js", + "colors": "src/utils/colors.js", + "copyToClipboard": "src/utils/copy-to-clipboard.js", + "date": "src/utils/date.js", + "debounce": "src/utils/debounce.js", + "debouncedRef": "src/utils/debounced-ref.js", + "dom": "src/utils/dom.js", + "event": "src/utils/event.js", + "exportFile": "src/utils/export-file.js", + "extend": "src/utils/extend.js", + "format": "src/utils/format.js", + "frameDebounce": "src/utils/frame-debounce.js", + "is": "src/utils/is.js", + "morph": "src/utils/morph.js", + "openURL": "src/utils/open-url.js", + "patterns": "src/utils/patterns.js", + "runSequentialPromises": "src/utils/run-sequential-promises.js", + "scroll": "src/utils/scroll.js", + "throttle": "src/utils/throttle.js", + "uid": "src/utils/uid.js" +} + +module.exports = function (importName) { + if (typeof map[importName] === 'undefined') { + throw new Error('Unknown import from Quasar: ' + importName) + } + return 'quasar/' + map[importName] +} diff --git a/dist/icon-set/bootstrap-icons.umd.min.js b/dist/icon-set/bootstrap-icons.umd.min.js new file mode 100644 index 00000000000..fb73ddf9838 --- /dev/null +++ b/dist/icon-set/bootstrap-icons.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(i,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((i="undefined"!=typeof globalThis?globalThis:i||self).Quasar=i.Quasar||{},i.Quasar.iconSet=i.Quasar.iconSet||{},i.Quasar.iconSet.bootstrapIcons=e())}(this,function(){"use strict";return{name:"bootstrap-icons",type:{positive:"bi-check",negative:"bi-exclamation-triangle-fill",info:"bi-exclamation-circle-fill",warning:"bi-exclamation"},arrow:{up:"bi-arrow-up",right:"bi-arrow-right",down:"bi-arrow-down",left:"bi-arrow-left",dropdown:"bi-caret-down-fill"},chevron:{left:"bi-chevron-left",right:"bi-chevron-right"},colorPicker:{spectrum:"bi-eyedropper",tune:"bi-sliders",palette:"bi-palette2"},pullToRefresh:{icon:"bi-arrow-repeat"},carousel:{left:"bi-chevron-left",right:"bi-chevron-right",up:"bi-chevron-up",down:"bi-chevron-down",navigationIcon:"bi-circle-fill"},chip:{remove:"bi-x-circle-fill",selected:"bi-check"},datetime:{arrowLeft:"bi-chevron-left",arrowRight:"bi-chevron-right",now:"bi-clock-fill",today:"bi-calendar-check-fill"},editor:{bold:"bi-type-bold",italic:"bi-type-italic",strikethrough:"bi-type-strikethrough",underline:"bi-type-underline",unorderedList:"bi-list-ul",orderedList:"bi-list-ol",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",hyperlink:"bi-link",toggleFullscreen:"bi-arrows-fullscreen",quote:"bi-chat-square-quote-fill",left:"bi-justify-left",center:"bi-justify",right:"bi-justify-right",justify:"bi-text-center",print:"bi-printer-fill",outdent:"bi-text-indent-right",indent:"bi-text-indent-left",removeFormat:"bi-eraser-fill",formatting:"bi-textarea",fontSize:"bi-textarea-t",align:"bi-text-left",hr:"bi-dash-square-fill",undo:"bi-arrow-counterclockwise",redo:"bi-arrow-clockwise",heading:"bi-type-h1",code:"bi-code",size:"bi-bounding-box",font:"bi-fonts",viewSource:"bi-code-slash"},expansionItem:{icon:"bi-chevron-down",denseIcon:"bi-caret-down-fill"},fab:{icon:"bi-plus",activeIcon:"bi-x"},field:{clear:"bi-x-circle-fill",error:"bi-exclamation-circle-fill"},pagination:{first:"bi-chevron-bar-left",prev:"bi-chevron-left",next:"bi-chevron-right",last:"bi-chevron-bar-right"},rating:{icon:"bi-star-fill"},stepper:{done:"bi-check",active:"bi-pencil-fill",error:"bi-exclamation-triangle-fill"},tabs:{left:"bi-chevron-left",right:"bi-chevron-right",up:"bi-chevron-up",down:"bi-chevron-down"},table:{arrowUp:"bi-arrow-up",warning:"bi-exclamation-triangle-fill",firstPage:"bi-skip-start-fill",prevPage:"bi-chevron-left",nextPage:"bi-chevron-right",lastPage:"bi-skip-end-fill"},tree:{icon:"bi-caret-right-fill"},uploader:{done:"bi-check",clear:"bi-x",add:"bi-plus-square-fill",upload:"bi-upload",removeQueue:"bi-clipboard-x",removeUploaded:"bi-clipboard-check"}}}); \ No newline at end of file diff --git a/dist/icon-set/eva-icons.umd.min.js b/dist/icon-set/eva-icons.umd.min.js new file mode 100644 index 00000000000..3033dee2436 --- /dev/null +++ b/dist/icon-set/eva-icons.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,V){"object"==typeof exports&&"undefined"!=typeof module?module.exports=V():"function"==typeof define&&define.amd?define(V):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.evaIcons=V())}(this,function(){"use strict";var H="M14.6,16.6L19.2,12L14.6,7.4L16,6L22,12L16,18L14.6,16.6M9.4,16.6L4.8,12L9.4,7.4L8,6L2,12L8,18L9.4,16.6Z",V="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",e="M2 4V7H7V19H10V7H15V4H2M21 9H12V12H15V19H18V12H21V9Z";return{name:"eva-icons",type:{positive:"eva-checkmark-circle-2",negative:"eva-alert-triangle",info:"eva-info",warning:"eva-alert-circle-outline"},arrow:{up:"eva-arrow-upward-outline",right:"eva-arrow-forward-outline",down:"eva-arrow-downward-outline",left:"eva-arrow-back-outline",dropdown:"eva-chevron-down"},chevron:{left:"eva-arrow-ios-back-outline",right:"eva-arrow-ios-forward-outline"},colorPicker:{spectrum:"eva-color-picker-outline",tune:"eva-options-2-outline",palette:"eva-pantone-outline"},pullToRefresh:{icon:"eva-refresh-outline"},carousel:{left:"eva-arrow-ios-back-outline",right:"eva-arrow-ios-forward-outline",up:"eva-arrow-ios-upward-outline",down:"eva-arrow-ios-downward-outline",navigationIcon:"eva-shield"},chip:{remove:"eva-close",selected:"eva-checkmark"},datetime:{arrowLeft:"eva-arrow-ios-back-outline",arrowRight:"eva-arrow-ios-forward-outline",now:"eva-clock-outline",today:"eva-calendar-outline"},editor:{bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",hyperlink:"M3.9,12C3.9,10.29 5.29,8.9 7,8.9H11V7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H11V15.1H7C5.29,15.1 3.9,13.71 3.9,12M8,13H16V11H8V13M17,7H13V8.9H17C18.71,8.9 20.1,10.29 20.1,12C20.1,13.71 18.71,15.1 17,15.1H13V17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7Z",toggleFullscreen:"M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z",quote:"M14,17H17L19,13V7H13V13H16M6,17H9L11,13V7H5V13H8L6,17Z",left:V,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",print:"M18,3H6V7H18M19,12A1,1 0 0,1 18,11A1,1 0 0,1 19,10A1,1 0 0,1 20,11A1,1 0 0,1 19,12M16,19H8V14H16M19,8H5A3,3 0 0,0 2,11V17H6V21H18V17H22V11A3,3 0 0,0 19,8Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:e,align:V,hr:"M19,13H5V11H19V13Z",undo:"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z",redo:"M18.4,10.6C16.55,9 14.15,8 11.5,8C6.85,8 2.92,11.03 1.54,15.22L3.9,16C4.95,12.81 7.95,10.5 11.5,10.5C13.45,10.5 15.23,11.22 16.62,12.38L13,16H22V7L18.4,10.6Z",heading:e,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",code:H,size:e,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z",viewSource:H},expansionItem:{icon:"eva-arrow-ios-downward-outline",denseIcon:"eva-chevron-down"},fab:{icon:"eva-plus-outline",activeIcon:"eva-close"},field:{clear:"eva-close-circle",error:"eva-alert-circle"},pagination:{first:"eva-arrowhead-left-outline",prev:"eva-arrow-ios-back-outline",next:"eva-arrow-ios-forward-outline",last:"eva-arrowhead-right-outline"},rating:{icon:"eva-star"},stepper:{done:"eva-checkmark",active:"eva-edit",error:"eva-alert-triangle"},tabs:{left:"eva-arrow-ios-back-outline",right:"eva-arrow-ios-forward-outline",up:"eva-arrow-ios-upward-outline",down:"eva-arrow-ios-downward-outline"},table:{arrowUp:"eva-arrow-upward",warning:"eva-alert-triangle",firstPage:"eva-arrowhead-left-outline",prevPage:"eva-arrow-ios-back-outline",nextPage:"eva-arrow-ios-forward-outline",lastPage:"eva-arrowhead-right-outline"},tree:{icon:"eva-arrow-right"},uploader:{done:"eva-checkmark",clear:"eva-close",add:"eva-plus-square",upload:"eva-cloud-upload",removeQueue:"eva-slash",removeUploaded:"eva-done-all"}}}); \ No newline at end of file diff --git a/dist/icon-set/fontawesome-v5-pro.umd.min.js b/dist/icon-set/fontawesome-v5-pro.umd.min.js new file mode 100644 index 00000000000..1556d4a4c43 --- /dev/null +++ b/dist/icon-set/fontawesome-v5-pro.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define(f):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.iconSet=a.Quasar.iconSet||{},a.Quasar.iconSet.fontawesomeV5Pro=f())}(this,function(){"use strict";return{name:"fontawesome-v5-pro",type:{positive:"fal fa-check",negative:"fal fa-exclamation-triangle",info:"fal fa-info-circle",warning:"fal fa-exclamation"},arrow:{up:"fal fa-arrow-up",right:"fal fa-arrow-right",down:"fal fa-arrow-down",left:"fal fa-arrow-left",dropdown:"fal fa-caret-down"},chevron:{left:"fal fa-chevron-left",right:"fal fa-chevron-right"},colorPicker:{spectrum:"fal fa-eye-dropper",tune:"fal fa-sliders-h",palette:"fal fa-swatchbook"},pullToRefresh:{icon:"fal fa-sync-alt"},carousel:{left:"fal fa-chevron-left",right:"fal fa-chevron-right",up:"fal fa-chevron-up",down:"fal fa-chevron-down",navigationIcon:"fal fa-circle"},chip:{remove:"fal fa-times-circle",selected:"fal fa-check"},datetime:{arrowLeft:"fal fa-chevron-left",arrowRight:"fal fa-chevron-right",now:"fal fa-clock",today:"fal fa-calendar-check"},editor:{bold:"fal fa-bold",italic:"fal fa-italic",strikethrough:"fal fa-strikethrough",underline:"fal fa-underline",unorderedList:"fal fa-list-ul",orderedList:"fal fa-list-ol",subscript:"fal fa-subscript",superscript:"fal fa-superscript",hyperlink:"fal fa-link",toggleFullscreen:"fal fa-expand-arrows-alt",quote:"fal fa-quote-right",left:"fal fa-align-left",center:"fal fa-align-center",right:"fal fa-align-right",justify:"fal fa-align-justify",print:"fal fa-print",outdent:"fal fa-outdent",indent:"fal fa-indent",removeFormat:"fal fa-eraser",formatting:"fal fa-heading",fontSize:"fal fa-text-height",align:"fal fa-align-left",hr:"fal fa-minus-square",undo:"fal fa-undo",redo:"fal fa-redo",heading:"fal fa-heading",code:"fal fa-code",size:"fal fa-text-height",font:"fal fa-font",viewSource:"fal fa-code"},expansionItem:{icon:"fal fa-chevron-down",denseIcon:"fal fa-caret-down"},fab:{icon:"fal fa-plus",activeIcon:"fal fa-times"},field:{clear:"fal fa-times-circle",error:"fal fa-exclamation-circle"},pagination:{first:"fal fa-step-backward",prev:"fal fa-chevron-left",next:"fal fa-chevron-right",last:"fal fa-step-forward"},rating:{icon:"fal fa-star"},stepper:{done:"fal fa-check",active:"fal fa-pencil-alt",error:"fal fa-exclamation-triangle"},tabs:{left:"fal fa-chevron-left",right:"fal fa-chevron-right",up:"fal fa-chevron-up",down:"fal fa-chevron-down"},table:{arrowUp:"fal fa-long-arrow-up",warning:"fal fa-exclamation-triangle",firstPage:"fal fa-step-backward",prevPage:"fal fa-chevron-left",nextPage:"fal fa-chevron-right",lastPage:"fal fa-step-forward"},tree:{icon:"fal fa-play"},uploader:{done:"fal fa-check",clear:"fal fa-times",add:"fal fa-plus-square",upload:"fal fa-upload",removeQueue:"fal fa-stream",removeUploaded:"fal fa-clipboard-check"}}}); \ No newline at end of file diff --git a/dist/icon-set/fontawesome-v5.umd.min.js b/dist/icon-set/fontawesome-v5.umd.min.js new file mode 100644 index 00000000000..787639300e3 --- /dev/null +++ b/dist/icon-set/fontawesome-v5.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define(f):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.iconSet=a.Quasar.iconSet||{},a.Quasar.iconSet.fontawesomeV5=f())}(this,function(){"use strict";return{name:"fontawesome-v5",type:{positive:"fas fa-check",negative:"fas fa-exclamation-triangle",info:"fas fa-info-circle",warning:"fas fa-exclamation"},arrow:{up:"fas fa-arrow-up",right:"fas fa-arrow-right",down:"fas fa-arrow-down",left:"fas fa-arrow-left",dropdown:"fas fa-caret-down"},chevron:{left:"fas fa-chevron-left",right:"fas fa-chevron-right"},colorPicker:{spectrum:"fas fa-eye-dropper",tune:"fas fa-sliders-h",palette:"fas fa-swatchbook"},pullToRefresh:{icon:"fas fa-sync-alt"},carousel:{left:"fas fa-chevron-left",right:"fas fa-chevron-right",up:"fas fa-chevron-up",down:"fas fa-chevron-down",navigationIcon:"fas fa-circle"},chip:{remove:"fas fa-times-circle",selected:"fas fa-check"},datetime:{arrowLeft:"fas fa-chevron-left",arrowRight:"fas fa-chevron-right",now:"far fa-clock",today:"far fa-calendar-check"},editor:{bold:"fas fa-bold",italic:"fas fa-italic",strikethrough:"fas fa-strikethrough",underline:"fas fa-underline",unorderedList:"fas fa-list-ul",orderedList:"fas fa-list-ol",subscript:"fas fa-subscript",superscript:"fas fa-superscript",hyperlink:"fas fa-link",toggleFullscreen:"fas fa-expand-arrows-alt",quote:"fas fa-quote-right",left:"fas fa-align-left",center:"fas fa-align-center",right:"fas fa-align-right",justify:"fas fa-align-justify",print:"fas fa-print",outdent:"fas fa-outdent",indent:"fas fa-indent",removeFormat:"fas fa-eraser",formatting:"fas fa-heading",fontSize:"fas fa-text-height",align:"fas fa-align-left",hr:"far fa-minus-square",undo:"fas fa-undo",redo:"fas fa-redo",heading:"fas fa-heading",code:"fas fa-code",size:"fas fa-text-height",font:"fas fa-font",viewSource:"fas fa-code"},expansionItem:{icon:"fas fa-chevron-down",denseIcon:"fas fa-caret-down"},fab:{icon:"fas fa-plus",activeIcon:"fas fa-times"},field:{clear:"fas fa-times-circle",error:"fas fa-exclamation-circle"},pagination:{first:"fas fa-step-backward",prev:"fas fa-chevron-left",next:"fas fa-chevron-right",last:"fas fa-step-forward"},rating:{icon:"fas fa-star"},stepper:{done:"fas fa-check",active:"fas fa-pencil-alt",error:"fas fa-exclamation-triangle"},tabs:{left:"fas fa-chevron-left",right:"fas fa-chevron-right",up:"fas fa-chevron-up",down:"fas fa-chevron-down"},table:{arrowUp:"fas fa-arrow-up",warning:"fas fa-exclamation-triangle",firstPage:"fas fa-step-backward",prevPage:"fas fa-chevron-left",nextPage:"fas fa-chevron-right",lastPage:"fas fa-step-forward"},tree:{icon:"fas fa-play"},uploader:{done:"fas fa-check",clear:"fas fa-times",add:"fas fa-plus-square",upload:"fas fa-upload",removeQueue:"fas fa-stream",removeUploaded:"fas fa-clipboard-check"}}}); \ No newline at end of file diff --git a/dist/icon-set/fontawesome-v6-pro.umd.min.js b/dist/icon-set/fontawesome-v6-pro.umd.min.js new file mode 100644 index 00000000000..1d383011ea6 --- /dev/null +++ b/dist/icon-set/fontawesome-v6-pro.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define(f):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.iconSet=a.Quasar.iconSet||{},a.Quasar.iconSet.fontawesomeV6Pro=f())}(this,function(){"use strict";return{name:"fontawesome-v6-pro",type:{positive:"fal fa-check",negative:"fal fa-triangle-exclamation",info:"fal fa-circle-info",warning:"fal fa-exclamation"},arrow:{up:"fal fa-arrow-up",right:"fal fa-arrow-right",down:"fal fa-arrow-down",left:"fal fa-arrow-left",dropdown:"fal fa-caret-down"},chevron:{left:"fal fa-chevron-left",right:"fal fa-chevron-right"},colorPicker:{spectrum:"fal fa-eye-dropper",tune:"fal fa-sliders",palette:"fal fa-swatchbook"},pullToRefresh:{icon:"fal fa-sync-alt"},carousel:{left:"fal fa-chevron-left",right:"fal fa-chevron-right",up:"fal fa-chevron-up",down:"fal fa-chevron-down",navigationIcon:"fal fa-circle"},chip:{remove:"fal fa-circle-xmark",selected:"fal fa-check"},datetime:{arrowLeft:"fal fa-chevron-left",arrowRight:"fal fa-chevron-right",now:"fal fa-clock",today:"fal fa-calendar-check"},editor:{bold:"fal fa-bold",italic:"fal fa-italic",strikethrough:"fal fa-strikethrough",underline:"fal fa-underline",unorderedList:"fal fa-list-ul",orderedList:"fal fa-list-ol",subscript:"fal fa-subscript",superscript:"fal fa-superscript",hyperlink:"fal fa-link",toggleFullscreen:"fal fa-maximize",quote:"fal fa-quote-right",left:"fal fa-align-left",center:"fal fa-align-center",right:"fal fa-align-right",justify:"fal fa-align-justify",print:"fal fa-print",outdent:"fal fa-outdent",indent:"fal fa-indent",removeFormat:"fal fa-eraser",formatting:"fal fa-heading",fontSize:"fal fa-text-height",align:"fal fa-align-left",hr:"fal fa-square-minus",undo:"fal fa-rotate-left",redo:"fal fa-rotate-right",heading:"fal fa-heading",code:"fal fa-code",size:"fal fa-text-height",font:"fal fa-font",viewSource:"fal fa-code"},expansionItem:{icon:"fal fa-chevron-down",denseIcon:"fal fa-caret-down"},fab:{icon:"fal fa-plus",activeIcon:"fal fa-xmark"},field:{clear:"fal fa-circle-xmark",error:"fal fa-circle-exclamation"},pagination:{first:"fal fa-backward-step",prev:"fal fa-chevron-left",next:"fal fa-chevron-right",last:"fal fa-forward-step"},rating:{icon:"fal fa-star"},stepper:{done:"fal fa-check",active:"fal fa-pencil",error:"fal fa-triangle-exclamation"},tabs:{left:"fal fa-chevron-left",right:"fal fa-chevron-right",up:"fal fa-chevron-up",down:"fal fa-chevron-down"},table:{arrowUp:"fal fa-long-arrow-up",warning:"fal fa-triangle-exclamation",firstPage:"fal fa-backward-step",prevPage:"fal fa-chevron-left",nextPage:"fal fa-chevron-right",lastPage:"fal fa-forward-step"},tree:{icon:"fal fa-play"},uploader:{done:"fal fa-check",clear:"fal fa-xmark",add:"fal fa-square-plus",upload:"fal fa-upload",removeQueue:"fal fa-bars-staggered",removeUploaded:"fal fa-clipboard-check"}}}); \ No newline at end of file diff --git a/dist/icon-set/fontawesome-v6.umd.min.js b/dist/icon-set/fontawesome-v6.umd.min.js new file mode 100644 index 00000000000..443ee2b9e91 --- /dev/null +++ b/dist/icon-set/fontawesome-v6.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define(f):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.iconSet=a.Quasar.iconSet||{},a.Quasar.iconSet.fontawesomeV6=f())}(this,function(){"use strict";return{name:"fontawesome-v6",type:{positive:"fas fa-check",negative:"fas fa-triangle-exclamation",info:"fas fa-circle-info",warning:"fas fa-exclamation"},arrow:{up:"fas fa-arrow-up",right:"fas fa-arrow-right",down:"fas fa-arrow-down",left:"fas fa-arrow-left",dropdown:"fas fa-caret-down"},chevron:{left:"fas fa-chevron-left",right:"fas fa-chevron-right"},colorPicker:{spectrum:"fas fa-eye-dropper",tune:"fas fa-sliders",palette:"fas fa-swatchbook"},pullToRefresh:{icon:"fas fa-rotate"},carousel:{left:"fas fa-chevron-left",right:"fas fa-chevron-right",up:"fas fa-chevron-up",down:"fas fa-chevron-down",navigationIcon:"fas fa-circle"},chip:{remove:"fas fa-circle-xmark",selected:"fas fa-check"},datetime:{arrowLeft:"fas fa-chevron-left",arrowRight:"fas fa-chevron-right",now:"far fa-clock",today:"far fa-calendar-check"},editor:{bold:"fas fa-bold",italic:"fas fa-italic",strikethrough:"fas fa-strikethrough",underline:"fas fa-underline",unorderedList:"fas fa-list-ul",orderedList:"fas fa-list-ol",subscript:"fas fa-subscript",superscript:"fas fa-superscript",hyperlink:"fas fa-link",toggleFullscreen:"fas fa-maximize",quote:"fas fa-quote-right",left:"fas fa-align-left",center:"fas fa-align-center",right:"fas fa-align-right",justify:"fas fa-align-justify",print:"fas fa-print",outdent:"fas fa-outdent",indent:"fas fa-indent",removeFormat:"fas fa-eraser",formatting:"fas fa-heading",fontSize:"fas fa-text-height",align:"fas fa-align-left",hr:"far fa-square-minus",undo:"fas fa-rotate-left",redo:"fas fa-rotate-right",heading:"fas fa-heading",code:"fas fa-code",size:"fas fa-text-height",font:"fas fa-font",viewSource:"fas fa-code"},expansionItem:{icon:"fas fa-chevron-down",denseIcon:"fas fa-caret-down"},fab:{icon:"fas fa-plus",activeIcon:"fas fa-xmark"},field:{clear:"fas fa-circle-xmark",error:"fas fa-circle-exclamation"},pagination:{first:"fas fa-backward-step",prev:"fas fa-chevron-left",next:"fas fa-chevron-right",last:"fas fa-forward-step"},rating:{icon:"fas fa-star"},stepper:{done:"fas fa-check",active:"fas fa-pencil",error:"fas fa-triangle-exclamation"},tabs:{left:"fas fa-chevron-left",right:"fas fa-chevron-right",up:"fas fa-chevron-up",down:"fas fa-chevron-down"},table:{arrowUp:"fas fa-arrow-up",warning:"fas fa-triangle-exclamation",firstPage:"fas fa-backward-step",prevPage:"fas fa-chevron-left",nextPage:"fas fa-chevron-right",lastPage:"fas fa-forward-step"},tree:{icon:"fas fa-play"},uploader:{done:"fas fa-check",clear:"fas fa-xmark",add:"fas fa-square-plus",upload:"fas fa-upload",removeQueue:"fas fa-bars-staggered",removeUploaded:"fas fa-clipboard-check"}}}); \ No newline at end of file diff --git a/dist/icon-set/ionicons-v4.umd.min.js b/dist/icon-set/ionicons-v4.umd.min.js new file mode 100644 index 00000000000..6c687015f1b --- /dev/null +++ b/dist/icon-set/ionicons-v4.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,V){"object"==typeof exports&&"undefined"!=typeof module?module.exports=V():"function"==typeof define&&define.amd?define(V):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.ioniconsV4=V())}(this,function(){"use strict";var H="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",V="M2 4V7H7V19H10V7H15V4H2M21 9H12V12H15V19H18V12H21V9Z";return{name:"ionicons-v4",type:{positive:"ion-md-checkmark",negative:"ion-alert",info:"ion-information-circle-outline",warning:"ion-alert"},arrow:{up:"ion-arrow-up",right:"ion-arrow-forward",down:"ion-arrow-down",left:"ion-arrow-back",dropdown:"ion-arrow-dropdown"},chevron:{left:"ion-ios-arrow-back",right:"ion-ios-arrow-forward"},colorPicker:{spectrum:"ion-aperture",tune:"ion-options",palette:"ion-apps"},pullToRefresh:{icon:"ion-refresh"},carousel:{left:"ion-ios-arrow-back",right:"ion-ios-arrow-forward",up:"ion-ios-arrow-up",down:"ion-ios-arrow-down",navigationIcon:"ion-square"},chip:{remove:"ion-close-circle",selected:"ion-checkmark"},datetime:{arrowLeft:"ion-ios-arrow-back",arrowRight:"ion-ios-arrow-forward",now:"ion-time",today:"ion-calendar"},editor:{hyperlink:"ion-link",toggleFullscreen:"ion-expand",quote:"ion-quote",print:"ion-print",undo:"ion-undo",redo:"ion-redo",code:"ion-code",viewSource:"ion-ios-code",bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",left:H,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:V,align:H,hr:"M19,13H5V11H19V13Z",heading:V,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",size:V,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z"},expansionItem:{icon:"ion-arrow-dropdown",denseIcon:"ion-arrow-dropdown"},fab:{icon:"ion-add",activeIcon:"ion-close"},field:{clear:"ion-close-circle",error:"ion-alert"},pagination:{first:"ion-ios-skip-backward",prev:"ion-ios-arrow-back",next:"ion-ios-arrow-forward",last:"ion-ios-skip-forward"},rating:{icon:"ion-star"},stepper:{done:"ion-checkmark",active:"ion-create",error:"ion-warning"},tabs:{left:"ion-ios-arrow-back",right:"ion-ios-arrow-forward",up:"ion-ios-arrow-up",down:"ion-ios-arrow-down"},table:{arrowUp:"ion-arrow-up",warning:"ion-warning",firstPage:"ion-ios-return-left",prevPage:"ion-ios-arrow-back",nextPage:"ion-ios-arrow-forward",lastPage:"ion-ios-return-right"},tree:{icon:"ion-play"},uploader:{done:"ion-checkmark",clear:"ion-close",add:"ion-add-circle",upload:"ion-cloud-upload",removeQueue:"ion-trash",removeUploaded:"ion-done-all"}}}); \ No newline at end of file diff --git a/dist/icon-set/line-awesome.umd.min.js b/dist/icon-set/line-awesome.umd.min.js new file mode 100644 index 00000000000..a2c57f607fb --- /dev/null +++ b/dist/icon-set/line-awesome.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,l){"object"==typeof exports&&"undefined"!=typeof module?module.exports=l():"function"==typeof define&&define.amd?define(l):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.iconSet=a.Quasar.iconSet||{},a.Quasar.iconSet.lineAwesome=l())}(this,function(){"use strict";return{name:"line-awesome",type:{positive:"las la-check",negative:"las la-exclamation-triangle",info:"las la-info-circle",warning:"las la-exclamation"},arrow:{up:"las la-arrow-up",right:"las la-arrow-right",down:"las la-arrow-down",left:"las la-arrow-left",dropdown:"las la-caret-down"},chevron:{left:"las la-chevron-left",right:"las la-chevron-right"},colorPicker:{spectrum:"las la-eye-dropper",tune:"las la-sliders-h",palette:"las la-swatchbook"},pullToRefresh:{icon:"las la-sync-alt"},carousel:{left:"las la-chevron-left",right:"las la-chevron-right",up:"las la-chevron-up",down:"las la-chevron-down",navigationIcon:"las la-square"},chip:{remove:"las la-times-circle",selected:"las la-check"},datetime:{arrowLeft:"las la-chevron-left",arrowRight:"las la-chevron-right",now:"lar la-clock",today:"lar la-calendar-check"},editor:{bold:"las la-bold",italic:"las la-italic",strikethrough:"las la-strikethrough",underline:"las la-underline",unorderedList:"las la-list-ul",orderedList:"las la-list-ol",subscript:"las la-subscript",superscript:"las la-superscript",hyperlink:"las la-link",toggleFullscreen:"las la-expand-arrows-alt",quote:"las la-quote-right",left:"las la-align-left",center:"las la-align-center",right:"las la-align-right",justify:"las la-align-justify",print:"las la-print",outdent:"las la-outdent",indent:"las la-indent",removeFormat:"las la-eraser",formatting:"las la-heading",fontSize:"las la-text-height",align:"las la-align-left",hr:"lar la-minus-square",undo:"las la-undo",redo:"las la-redo",heading:"las la-heading",code:"las la-code",size:"las la-text-height",font:"las la-font",viewSource:"las la-code"},expansionItem:{icon:"las la-chevron-down",denseIcon:"las la-caret-down"},fab:{icon:"las la-plus",activeIcon:"las la-times"},field:{clear:"las la-times-circle",error:"las la-exclamation-circle"},pagination:{first:"las la-fast-backward",prev:"las la-chevron-left",next:"las la-chevron-right",last:"las la-fast-forward"},rating:{icon:"las la-star"},stepper:{done:"las la-check",active:"las la-pencil-alt",error:"las la-exclamation-triangle"},tabs:{left:"las la-chevron-left",right:"las la-chevron-right",up:"las la-chevron-up",down:"las la-chevron-down"},table:{arrowUp:"las la-arrow-up",warning:"las la-exclamation-triangle",firstPage:"las la-fast-backward",prevPage:"las la-chevron-left",nextPage:"las la-chevron-right",lastPage:"las la-fast-forward"},tree:{icon:"las la-play"},uploader:{done:"las la-check",clear:"las la-times",add:"las la-plus-square",upload:"las la-upload",removeQueue:"las la-stream",removeUploaded:"las la-clipboard-check"}}}); \ No newline at end of file diff --git a/dist/icon-set/material-icons-outlined.umd.min.js b/dist/icon-set/material-icons-outlined.umd.min.js new file mode 100644 index 00000000000..c18fa2ac339 --- /dev/null +++ b/dist/icon-set/material-icons-outlined.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(o,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((o="undefined"!=typeof globalThis?globalThis:o||self).Quasar=o.Quasar||{},o.Quasar.iconSet=o.Quasar.iconSet||{},o.Quasar.iconSet.materialIconsOutlined=e())}(this,function(){"use strict";return{name:"material-icons-outlined",type:{positive:"o_check_circle",negative:"o_warning",info:"o_info",warning:"o_priority_high"},arrow:{up:"o_arrow_upward",right:"o_arrow_forward",down:"o_arrow_downward",left:"o_arrow_back",dropdown:"o_arrow_drop_down"},chevron:{left:"o_chevron_left",right:"o_chevron_right"},colorPicker:{spectrum:"o_gradient",tune:"o_tune",palette:"o_style"},pullToRefresh:{icon:"o_refresh"},carousel:{left:"o_chevron_left",right:"o_chevron_right",up:"o_keyboard_arrow_up",down:"o_keyboard_arrow_down",navigationIcon:"o_lens"},chip:{remove:"o_cancel",selected:"o_check"},datetime:{arrowLeft:"o_chevron_left",arrowRight:"o_chevron_right",now:"o_access_time",today:"o_today"},editor:{bold:"o_format_bold",italic:"o_format_italic",strikethrough:"o_strikethrough_s",underline:"o_format_underlined",unorderedList:"o_format_list_bulleted",orderedList:"o_format_list_numbered",subscript:"o_vertical_align_bottom",superscript:"o_vertical_align_top",hyperlink:"o_link",toggleFullscreen:"o_fullscreen",quote:"o_format_quote",left:"o_format_align_left",center:"o_format_align_center",right:"o_format_align_right",justify:"o_format_align_justify",print:"o_print",outdent:"o_format_indent_decrease",indent:"o_format_indent_increase",removeFormat:"o_format_clear",formatting:"o_text_format",fontSize:"o_format_size",align:"o_format_align_left",hr:"o_remove",undo:"o_undo",redo:"o_redo",heading:"o_format_size",code:"o_code",size:"o_format_size",font:"o_font_download",viewSource:"o_code"},expansionItem:{icon:"o_keyboard_arrow_down",denseIcon:"o_arrow_drop_down"},fab:{icon:"o_add",activeIcon:"o_close"},field:{clear:"o_cancel",error:"o_error"},pagination:{first:"o_first_page",prev:"o_keyboard_arrow_left",next:"o_keyboard_arrow_right",last:"o_last_page"},rating:{icon:"o_grade"},stepper:{done:"o_check",active:"o_edit",error:"o_warning"},tabs:{left:"o_chevron_left",right:"o_chevron_right",up:"o_keyboard_arrow_up",down:"o_keyboard_arrow_down"},table:{arrowUp:"o_arrow_upward",warning:"o_warning",firstPage:"o_first_page",prevPage:"o_chevron_left",nextPage:"o_chevron_right",lastPage:"o_last_page"},tree:{icon:"o_play_arrow"},uploader:{done:"o_done",clear:"o_clear",add:"o_add_box",upload:"o_cloud_upload",removeQueue:"o_clear_all",removeUploaded:"o_done_all"}}}); \ No newline at end of file diff --git a/dist/icon-set/material-icons-round.umd.min.js b/dist/icon-set/material-icons-round.umd.min.js new file mode 100644 index 00000000000..88e7177c9d7 --- /dev/null +++ b/dist/icon-set/material-icons-round.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(r,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((r="undefined"!=typeof globalThis?globalThis:r||self).Quasar=r.Quasar||{},r.Quasar.iconSet=r.Quasar.iconSet||{},r.Quasar.iconSet.materialIconsRound=e())}(this,function(){"use strict";return{name:"material-icons-round",type:{positive:"r_check_circle",negative:"r_warning",info:"r_info",warning:"r_priority_high"},arrow:{up:"r_arrow_upward",right:"r_arrow_forward",down:"r_arrow_downward",left:"r_arrow_back",dropdown:"r_arrow_drop_down"},chevron:{left:"r_chevron_left",right:"r_chevron_right"},colorPicker:{spectrum:"r_gradient",tune:"r_tune",palette:"r_style"},pullToRefresh:{icon:"r_refresh"},carousel:{left:"r_chevron_left",right:"r_chevron_right",up:"r_keyboard_arrow_up",down:"r_keyboard_arrow_down",navigationIcon:"r_lens"},chip:{remove:"r_cancel",selected:"r_check"},datetime:{arrowLeft:"r_chevron_left",arrowRight:"r_chevron_right",now:"r_access_time",today:"r_today"},editor:{bold:"r_format_bold",italic:"r_format_italic",strikethrough:"r_strikethrough_s",underline:"r_format_underlined",unorderedList:"r_format_list_bulleted",orderedList:"r_format_list_numbered",subscript:"r_vertical_align_bottom",superscript:"r_vertical_align_top",hyperlink:"r_link",toggleFullscreen:"r_fullscreen",quote:"r_format_quote",left:"r_format_align_left",center:"r_format_align_center",right:"r_format_align_right",justify:"r_format_align_justify",print:"r_print",outdent:"r_format_indent_decrease",indent:"r_format_indent_increase",removeFormat:"r_format_clear",formatting:"r_text_format",fontSize:"r_format_size",align:"r_format_align_left",hr:"r_remove",undo:"r_undo",redo:"r_redo",heading:"r_format_size",code:"r_code",size:"r_format_size",font:"r_font_download",viewSource:"r_code"},expansionItem:{icon:"r_keyboard_arrow_down",denseIcon:"r_arrow_drop_down"},fab:{icon:"r_add",activeIcon:"r_close"},field:{clear:"r_cancel",error:"r_error"},pagination:{first:"r_first_page",prev:"r_keyboard_arrow_left",next:"r_keyboard_arrow_right",last:"r_last_page"},rating:{icon:"r_grade"},stepper:{done:"r_check",active:"r_edit",error:"r_warning"},tabs:{left:"r_chevron_left",right:"r_chevron_right",up:"r_keyboard_arrow_up",down:"r_keyboard_arrow_down"},table:{arrowUp:"r_arrow_upward",warning:"r_warning",firstPage:"r_first_page",prevPage:"r_chevron_left",nextPage:"r_chevron_right",lastPage:"r_last_page"},tree:{icon:"r_play_arrow"},uploader:{done:"r_done",clear:"r_clear",add:"r_add_box",upload:"r_cloud_upload",removeQueue:"r_clear_all",removeUploaded:"r_done_all"}}}); \ No newline at end of file diff --git a/dist/icon-set/material-icons-sharp.umd.min.js b/dist/icon-set/material-icons-sharp.umd.min.js new file mode 100644 index 00000000000..13fa055739f --- /dev/null +++ b/dist/icon-set/material-icons-sharp.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.iconSet=e.Quasar.iconSet||{},e.Quasar.iconSet.materialIconsSharp=r())}(this,function(){"use strict";return{name:"material-icons-sharp",type:{positive:"s_check_circle",negative:"s_warning",info:"s_info",warning:"s_priority_high"},arrow:{up:"s_arrow_upward",right:"s_arrow_forward",down:"s_arrow_downward",left:"s_arrow_back",dropdown:"s_arrow_drop_down"},chevron:{left:"s_chevron_left",right:"s_chevron_right"},colorPicker:{spectrum:"s_gradient",tune:"s_tune",palette:"s_style"},pullToRefresh:{icon:"s_refresh"},carousel:{left:"s_chevron_left",right:"s_chevron_right",up:"s_keyboard_arrow_up",down:"s_keyboard_arrow_down",navigationIcon:"s_lens"},chip:{remove:"s_cancel",selected:"s_check"},datetime:{arrowLeft:"s_chevron_left",arrowRight:"s_chevron_right",now:"s_access_time",today:"s_today"},editor:{bold:"s_format_bold",italic:"s_format_italic",strikethrough:"s_strikethrough_s",underline:"s_format_underlined",unorderedList:"s_format_list_bulleted",orderedList:"s_format_list_numbered",subscript:"s_vertical_align_bottom",superscript:"s_vertical_align_top",hyperlink:"s_link",toggleFullscreen:"s_fullscreen",quote:"s_format_quote",left:"s_format_align_left",center:"s_format_align_center",right:"s_format_align_right",justify:"s_format_align_justify",print:"s_print",outdent:"s_format_indent_decrease",indent:"s_format_indent_increase",removeFormat:"s_format_clear",formatting:"s_text_format",fontSize:"s_format_size",align:"s_format_align_left",hr:"s_remove",undo:"s_undo",redo:"s_redo",heading:"s_format_size",code:"s_code",size:"s_format_size",font:"s_font_download",viewSource:"s_code"},expansionItem:{icon:"s_keyboard_arrow_down",denseIcon:"s_arrow_drop_down"},fab:{icon:"s_add",activeIcon:"s_close"},field:{clear:"s_cancel",error:"s_error"},pagination:{first:"s_first_page",prev:"s_keyboard_arrow_left",next:"s_keyboard_arrow_right",last:"s_last_page"},rating:{icon:"s_grade"},stepper:{done:"s_check",active:"s_edit",error:"s_warning"},tabs:{left:"s_chevron_left",right:"s_chevron_right",up:"s_keyboard_arrow_up",down:"s_keyboard_arrow_down"},table:{arrowUp:"s_arrow_upward",warning:"s_warning",firstPage:"s_first_page",prevPage:"s_chevron_left",nextPage:"s_chevron_right",lastPage:"s_last_page"},tree:{icon:"s_play_arrow"},uploader:{done:"s_done",clear:"s_clear",add:"s_add_box",upload:"s_cloud_upload",removeQueue:"s_clear_all",removeUploaded:"s_done_all"}}}); \ No newline at end of file diff --git a/dist/icon-set/material-icons.umd.min.js b/dist/icon-set/material-icons.umd.min.js new file mode 100644 index 00000000000..c8b2827f53d --- /dev/null +++ b/dist/icon-set/material-icons.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.iconSet=e.Quasar.iconSet||{},e.Quasar.iconSet.materialIcons=r())}(this,function(){"use strict";return{name:"material-icons",type:{positive:"check_circle",negative:"warning",info:"info",warning:"priority_high"},arrow:{up:"arrow_upward",right:"arrow_forward",down:"arrow_downward",left:"arrow_back",dropdown:"arrow_drop_down"},chevron:{left:"chevron_left",right:"chevron_right"},colorPicker:{spectrum:"gradient",tune:"tune",palette:"style"},pullToRefresh:{icon:"refresh"},carousel:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down",navigationIcon:"lens"},chip:{remove:"cancel",selected:"check"},datetime:{arrowLeft:"chevron_left",arrowRight:"chevron_right",now:"access_time",today:"today"},editor:{bold:"format_bold",italic:"format_italic",strikethrough:"strikethrough_s",underline:"format_underlined",unorderedList:"format_list_bulleted",orderedList:"format_list_numbered",subscript:"vertical_align_bottom",superscript:"vertical_align_top",hyperlink:"link",toggleFullscreen:"fullscreen",quote:"format_quote",left:"format_align_left",center:"format_align_center",right:"format_align_right",justify:"format_align_justify",print:"print",outdent:"format_indent_decrease",indent:"format_indent_increase",removeFormat:"format_clear",formatting:"text_format",fontSize:"format_size",align:"format_align_left",hr:"remove",undo:"undo",redo:"redo",heading:"format_size",code:"code",size:"format_size",font:"font_download",viewSource:"code"},expansionItem:{icon:"keyboard_arrow_down",denseIcon:"arrow_drop_down"},fab:{icon:"add",activeIcon:"close"},field:{clear:"cancel",error:"error"},pagination:{first:"first_page",prev:"keyboard_arrow_left",next:"keyboard_arrow_right",last:"last_page"},rating:{icon:"grade"},stepper:{done:"check",active:"edit",error:"warning"},tabs:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down"},table:{arrowUp:"arrow_upward",warning:"warning",firstPage:"first_page",prevPage:"chevron_left",nextPage:"chevron_right",lastPage:"last_page"},tree:{icon:"play_arrow"},uploader:{done:"done",clear:"clear",add:"add_box",upload:"cloud_upload",removeQueue:"clear_all",removeUploaded:"done_all"}}}); \ No newline at end of file diff --git a/dist/icon-set/material-symbols-outlined.umd.min.js b/dist/icon-set/material-symbols-outlined.umd.min.js new file mode 100644 index 00000000000..799466ed12f --- /dev/null +++ b/dist/icon-set/material-symbols-outlined.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(_,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):((_="undefined"!=typeof globalThis?globalThis:_||self).Quasar=_.Quasar||{},_.Quasar.iconSet=_.Quasar.iconSet||{},_.Quasar.iconSet.materialSymbolsOutlined=o())}(this,function(){"use strict";return{name:"material-symbols-outlined",type:{positive:"sym_o_check_circle",negative:"sym_o_warning",info:"sym_o_info",warning:"sym_o_priority_high"},arrow:{up:"sym_o_arrow_upward",right:"sym_o_arrow_forward",down:"sym_o_arrow_downward",left:"sym_o_arrow_back",dropdown:"sym_o_arrow_drop_down"},chevron:{left:"sym_o_chevron_left",right:"sym_o_chevron_right"},colorPicker:{spectrum:"sym_o_gradient",tune:"sym_o_tune",palette:"sym_o_style"},pullToRefresh:{icon:"sym_o_refresh"},carousel:{left:"sym_o_chevron_left",right:"sym_o_chevron_right",up:"sym_o_keyboard_arrow_up",down:"sym_o_keyboard_arrow_down",navigationIcon:"sym_o_lens"},chip:{remove:"sym_o_cancel",selected:"sym_o_check"},datetime:{arrowLeft:"sym_o_chevron_left",arrowRight:"sym_o_chevron_right",now:"sym_o_schedule",today:"sym_o_today"},editor:{bold:"sym_o_format_bold",italic:"sym_o_format_italic",strikethrough:"sym_o_strikethrough_s",underline:"sym_o_format_underlined",unorderedList:"sym_o_format_list_bulleted",orderedList:"sym_o_format_list_numbered",subscript:"sym_o_vertical_align_bottom",superscript:"sym_o_vertical_align_top",hyperlink:"sym_o_link",toggleFullscreen:"sym_o_fullscreen",quote:"sym_o_format_quote",left:"sym_o_format_align_left",center:"sym_o_format_align_center",right:"sym_o_format_align_right",justify:"sym_o_format_align_justify",print:"sym_o_print",outdent:"sym_o_format_indent_decrease",indent:"sym_o_format_indent_increase",removeFormat:"sym_o_format_clear",formatting:"sym_o_text_format",fontSize:"sym_o_format_size",align:"sym_o_format_align_left",hr:"sym_o_remove",undo:"sym_o_undo",redo:"sym_o_redo",heading:"sym_o_format_size",code:"sym_o_code",size:"sym_o_format_size",font:"sym_o_font_download",viewSource:"sym_o_code"},expansionItem:{icon:"sym_o_keyboard_arrow_down",denseIcon:"sym_o_arrow_drop_down"},fab:{icon:"sym_o_add",activeIcon:"sym_o_close"},field:{clear:"sym_o_cancel",error:"sym_o_error"},pagination:{first:"sym_o_first_page",prev:"sym_o_keyboard_arrow_left",next:"sym_o_keyboard_arrow_right",last:"sym_o_last_page"},rating:{icon:"sym_o_grade"},stepper:{done:"sym_o_check",active:"sym_o_edit",error:"sym_o_warning"},tabs:{left:"sym_o_chevron_left",right:"sym_o_chevron_right",up:"sym_o_keyboard_arrow_up",down:"sym_o_keyboard_arrow_down"},table:{arrowUp:"sym_o_arrow_upward",warning:"sym_o_warning",firstPage:"sym_o_first_page",prevPage:"sym_o_chevron_left",nextPage:"sym_o_chevron_right",lastPage:"sym_o_last_page"},tree:{icon:"sym_o_play_arrow"},uploader:{done:"sym_o_done",clear:"sym_o_close",add:"sym_o_add_box",upload:"sym_o_cloud_upload",removeQueue:"sym_o_clear_all",removeUploaded:"sym_o_done_all"}}}); \ No newline at end of file diff --git a/dist/icon-set/material-symbols-rounded.umd.min.js b/dist/icon-set/material-symbols-rounded.umd.min.js new file mode 100644 index 00000000000..0a2283dc074 --- /dev/null +++ b/dist/icon-set/material-symbols-rounded.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(r,_){"object"==typeof exports&&"undefined"!=typeof module?module.exports=_():"function"==typeof define&&define.amd?define(_):((r="undefined"!=typeof globalThis?globalThis:r||self).Quasar=r.Quasar||{},r.Quasar.iconSet=r.Quasar.iconSet||{},r.Quasar.iconSet.materialSymbolsRounded=_())}(this,function(){"use strict";return{name:"material-symbols-rounded",type:{positive:"sym_r_check_circle",negative:"sym_r_warning",info:"sym_r_info",warning:"sym_r_priority_high"},arrow:{up:"sym_r_arrow_upward",right:"sym_r_arrow_forward",down:"sym_r_arrow_downward",left:"sym_r_arrow_back",dropdown:"sym_r_arrow_drop_down"},chevron:{left:"sym_r_chevron_left",right:"sym_r_chevron_right"},colorPicker:{spectrum:"sym_r_gradient",tune:"sym_r_tune",palette:"sym_r_style"},pullToRefresh:{icon:"sym_r_refresh"},carousel:{left:"sym_r_chevron_left",right:"sym_r_chevron_right",up:"sym_r_keyboard_arrow_up",down:"sym_r_keyboard_arrow_down",navigationIcon:"sym_r_lens"},chip:{remove:"sym_r_cancel",selected:"sym_r_check"},datetime:{arrowLeft:"sym_r_chevron_left",arrowRight:"sym_r_chevron_right",now:"sym_r_schedule",today:"sym_r_today"},editor:{bold:"sym_r_format_bold",italic:"sym_r_format_italic",strikethrough:"sym_r_strikethrough_s",underline:"sym_r_format_underlined",unorderedList:"sym_r_format_list_bulleted",orderedList:"sym_r_format_list_numbered",subscript:"sym_r_vertical_align_bottom",superscript:"sym_r_vertical_align_top",hyperlink:"sym_r_link",toggleFullscreen:"sym_r_fullscreen",quote:"sym_r_format_quote",left:"sym_r_format_align_left",center:"sym_r_format_align_center",right:"sym_r_format_align_right",justify:"sym_r_format_align_justify",print:"sym_r_print",outdent:"sym_r_format_indent_decrease",indent:"sym_r_format_indent_increase",removeFormat:"sym_r_format_clear",formatting:"sym_r_text_format",fontSize:"sym_r_format_size",align:"sym_r_format_align_left",hr:"sym_r_remove",undo:"sym_r_undo",redo:"sym_r_redo",heading:"sym_r_format_size",code:"sym_r_code",size:"sym_r_format_size",font:"sym_r_font_download",viewSource:"sym_r_code"},expansionItem:{icon:"sym_r_keyboard_arrow_down",denseIcon:"sym_r_arrow_drop_down"},fab:{icon:"sym_r_add",activeIcon:"sym_r_close"},field:{clear:"sym_r_cancel",error:"sym_r_error"},pagination:{first:"sym_r_first_page",prev:"sym_r_keyboard_arrow_left",next:"sym_r_keyboard_arrow_right",last:"sym_r_last_page"},rating:{icon:"sym_r_grade"},stepper:{done:"sym_r_check",active:"sym_r_edit",error:"sym_r_warning"},tabs:{left:"sym_r_chevron_left",right:"sym_r_chevron_right",up:"sym_r_keyboard_arrow_up",down:"sym_r_keyboard_arrow_down"},table:{arrowUp:"sym_r_arrow_upward",warning:"sym_r_warning",firstPage:"sym_r_first_page",prevPage:"sym_r_chevron_left",nextPage:"sym_r_chevron_right",lastPage:"sym_r_last_page"},tree:{icon:"sym_r_play_arrow"},uploader:{done:"sym_r_done",clear:"sym_r_close",add:"sym_r_add_box",upload:"sym_r_cloud_upload",removeQueue:"sym_r_clear_all",removeUploaded:"sym_r_done_all"}}}); \ No newline at end of file diff --git a/dist/icon-set/material-symbols-sharp.umd.min.js b/dist/icon-set/material-symbols-sharp.umd.min.js new file mode 100644 index 00000000000..5d1638a0204 --- /dev/null +++ b/dist/icon-set/material-symbols-sharp.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(_,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):((_="undefined"!=typeof globalThis?globalThis:_||self).Quasar=_.Quasar||{},_.Quasar.iconSet=_.Quasar.iconSet||{},_.Quasar.iconSet.materialSymbolsSharp=s())}(this,function(){"use strict";return{name:"material-symbols-sharp",type:{positive:"sym_s_check_circle",negative:"sym_s_warning",info:"sym_s_info",warning:"sym_s_priority_high"},arrow:{up:"sym_s_arrow_upward",right:"sym_s_arrow_forward",down:"sym_s_arrow_downward",left:"sym_s_arrow_back",dropdown:"sym_s_arrow_drop_down"},chevron:{left:"sym_s_chevron_left",right:"sym_s_chevron_right"},colorPicker:{spectrum:"sym_s_gradient",tune:"sym_s_tune",palette:"sym_s_style"},pullToRefresh:{icon:"sym_s_refresh"},carousel:{left:"sym_s_chevron_left",right:"sym_s_chevron_right",up:"sym_s_keyboard_arrow_up",down:"sym_s_keyboard_arrow_down",navigationIcon:"sym_s_lens"},chip:{remove:"sym_s_cancel",selected:"sym_s_check"},datetime:{arrowLeft:"sym_s_chevron_left",arrowRight:"sym_s_chevron_right",now:"sym_s_schedule",today:"sym_s_today"},editor:{bold:"sym_s_format_bold",italic:"sym_s_format_italic",strikethrough:"sym_s_strikethrough_s",underline:"sym_s_format_underlined",unorderedList:"sym_s_format_list_bulleted",orderedList:"sym_s_format_list_numbered",subscript:"sym_s_vertical_align_bottom",superscript:"sym_s_vertical_align_top",hyperlink:"sym_s_link",toggleFullscreen:"sym_s_fullscreen",quote:"sym_s_format_quote",left:"sym_s_format_align_left",center:"sym_s_format_align_center",right:"sym_s_format_align_right",justify:"sym_s_format_align_justify",print:"sym_s_print",outdent:"sym_s_format_indent_decrease",indent:"sym_s_format_indent_increase",removeFormat:"sym_s_format_clear",formatting:"sym_s_text_format",fontSize:"sym_s_format_size",align:"sym_s_format_align_left",hr:"sym_s_remove",undo:"sym_s_undo",redo:"sym_s_redo",heading:"sym_s_format_size",code:"sym_s_code",size:"sym_s_format_size",font:"sym_s_font_download",viewSource:"sym_s_code"},expansionItem:{icon:"sym_s_keyboard_arrow_down",denseIcon:"sym_s_arrow_drop_down"},fab:{icon:"sym_s_add",activeIcon:"sym_s_close"},field:{clear:"sym_s_cancel",error:"sym_s_error"},pagination:{first:"sym_s_first_page",prev:"sym_s_keyboard_arrow_left",next:"sym_s_keyboard_arrow_right",last:"sym_s_last_page"},rating:{icon:"sym_s_grade"},stepper:{done:"sym_s_check",active:"sym_s_edit",error:"sym_s_warning"},tabs:{left:"sym_s_chevron_left",right:"sym_s_chevron_right",up:"sym_s_keyboard_arrow_up",down:"sym_s_keyboard_arrow_down"},table:{arrowUp:"sym_s_arrow_upward",warning:"sym_s_warning",firstPage:"sym_s_first_page",prevPage:"sym_s_chevron_left",nextPage:"sym_s_chevron_right",lastPage:"sym_s_last_page"},tree:{icon:"sym_s_play_arrow"},uploader:{done:"sym_s_done",clear:"sym_s_close",add:"sym_s_add_box",upload:"sym_s_cloud_upload",removeQueue:"sym_s_clear_all",removeUploaded:"sym_s_done_all"}}}); \ No newline at end of file diff --git a/dist/icon-set/mdi-v3.umd.min.js b/dist/icon-set/mdi-v3.umd.min.js new file mode 100644 index 00000000000..6a096c2cba5 --- /dev/null +++ b/dist/icon-set/mdi-v3.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.iconSet=e.Quasar.iconSet||{},e.Quasar.iconSet.mdiV3=i())}(this,function(){"use strict";return{name:"mdi-v3",type:{positive:"mdi-check-circle",negative:"mdi-alert",info:"mdi-information",warning:"mdi-exclamation"},arrow:{up:"mdi-arrow-up",right:"mdi-arrow-right",down:"mdi-arrow-down",left:"mdi-arrow-left",dropdown:"mdi-menu-down"},chevron:{left:"mdi-chevron-left",right:"mdi-chevron-right"},colorPicker:{spectrum:"mdi-gradient",tune:"mdi-tune",palette:"mdi-palette-swatch"},pullToRefresh:{icon:"mdi-refresh"},carousel:{left:"mdi-chevron-left",right:"mdi-chevron-right",up:"mdi-chevron-up",down:"mdi-chevron-down",navigationIcon:"mdi-circle"},chip:{remove:"mdi-close-circle",selected:"mdi-check"},datetime:{arrowLeft:"mdi-chevron-left",arrowRight:"mdi-chevron-right",now:"mdi-clock-outline",today:"mdi-calendar-today"},editor:{bold:"mdi-format-bold",italic:"mdi-format-italic",strikethrough:"mdi-format-strikethrough-variant",underline:"mdi-format-underline",unorderedList:"mdi-format-list-bulleted",orderedList:"mdi-format-list-numbered",subscript:"mdi-format-subscript",superscript:"mdi-format-superscript",hyperlink:"mdi-link",toggleFullscreen:"mdi-fullscreen",quote:"mdi-format-quote-close",left:"mdi-format-align-left",center:"mdi-format-align-center",right:"mdi-format-align-right",justify:"mdi-format-align-justify",print:"mdi-printer",outdent:"mdi-format-indent-decrease",indent:"mdi-format-indent-increase",removeFormat:"mdi-format-clear",formatting:"mdi-format-color-text",fontSize:"mdi-format-size",align:"mdi-format-align-left",hr:"mdi-minus",undo:"mdi-undo",redo:"mdi-redo",heading:"mdi-format-size",heading1:"mdi-format-header-1",heading2:"mdi-format-header-2",heading3:"mdi-format-header-3",heading4:"mdi-format-header-4",heading5:"mdi-format-header-5",heading6:"mdi-format-header-6",code:"mdi-code-tags",size:"mdi-format-size",size1:"mdi-numeric-1-box",size2:"mdi-numeric-2-box",size3:"mdi-numeric-3-box",size4:"mdi-numeric-4-box",size5:"mdi-numeric-5-box",size6:"mdi-numeric-6-box",size7:"mdi-numeric-7-box",font:"mdi-format-font",viewSource:"mdi-code-tags"},expansionItem:{icon:"mdi-chevron-down",denseIcon:"mdi-menu-down"},fab:{icon:"mdi-plus",activeIcon:"mdi-close"},field:{clear:"mdi-close-circle",error:"mdi-alert-circle"},pagination:{first:"mdi-chevron-double-left",prev:"mdi-chevron-left",next:"mdi-chevron-right",last:"mdi-chevron-double-right"},rating:{icon:"mdi-star"},stepper:{done:"mdi-check",active:"mdi-pencil",error:"mdi-alert"},tabs:{left:"mdi-chevron-left",right:"mdi-chevron-right",up:"mdi-chevron-up",down:"mdi-chevron-down"},table:{arrowUp:"mdi-arrow-up",warning:"mdi-alert",firstPage:"mdi-chevron-double-left",prevPage:"mdi-chevron-left",nextPage:"mdi-chevron-right",lastPage:"mdi-chevron-double-right"},tree:{icon:"mdi-play"},uploader:{done:"mdi-check",clear:"mdi-close",add:"mdi-plus-box",upload:"mdi-cloud-upload",removeQueue:"mdi-notification-clear-all",removeUploaded:"mdi-check-all"}}}); \ No newline at end of file diff --git a/dist/icon-set/mdi-v4.umd.min.js b/dist/icon-set/mdi-v4.umd.min.js new file mode 100644 index 00000000000..89cbefce35f --- /dev/null +++ b/dist/icon-set/mdi-v4.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.iconSet=e.Quasar.iconSet||{},e.Quasar.iconSet.mdiV4=i())}(this,function(){"use strict";return{name:"mdi-v4",type:{positive:"mdi-check-circle",negative:"mdi-alert",info:"mdi-information",warning:"mdi-exclamation"},arrow:{up:"mdi-arrow-up",right:"mdi-arrow-right",down:"mdi-arrow-down",left:"mdi-arrow-left",dropdown:"mdi-menu-down"},chevron:{left:"mdi-chevron-left",right:"mdi-chevron-right"},colorPicker:{spectrum:"mdi-gradient",tune:"mdi-tune",palette:"mdi-palette-swatch"},pullToRefresh:{icon:"mdi-refresh"},carousel:{left:"mdi-chevron-left",right:"mdi-chevron-right",up:"mdi-chevron-up",down:"mdi-chevron-down",navigationIcon:"mdi-circle"},chip:{remove:"mdi-close-circle",selected:"mdi-check"},datetime:{arrowLeft:"mdi-chevron-left",arrowRight:"mdi-chevron-right",now:"mdi-clock-outline",today:"mdi-calendar-today"},editor:{bold:"mdi-format-bold",italic:"mdi-format-italic",strikethrough:"mdi-format-strikethrough-variant",underline:"mdi-format-underline",unorderedList:"mdi-format-list-bulleted",orderedList:"mdi-format-list-numbered",subscript:"mdi-format-subscript",superscript:"mdi-format-superscript",hyperlink:"mdi-link",toggleFullscreen:"mdi-fullscreen",quote:"mdi-format-quote-close",left:"mdi-format-align-left",center:"mdi-format-align-center",right:"mdi-format-align-right",justify:"mdi-format-align-justify",print:"mdi-printer",outdent:"mdi-format-indent-decrease",indent:"mdi-format-indent-increase",removeFormat:"mdi-format-clear",formatting:"mdi-format-color-text",fontSize:"mdi-format-size",align:"mdi-format-align-left",hr:"mdi-minus",undo:"mdi-undo",redo:"mdi-redo",heading:"mdi-format-size",heading1:"mdi-format-header-1",heading2:"mdi-format-header-2",heading3:"mdi-format-header-3",heading4:"mdi-format-header-4",heading5:"mdi-format-header-5",heading6:"mdi-format-header-6",code:"mdi-code-tags",size:"mdi-format-size",size1:"mdi-numeric-1-box",size2:"mdi-numeric-2-box",size3:"mdi-numeric-3-box",size4:"mdi-numeric-4-box",size5:"mdi-numeric-5-box",size6:"mdi-numeric-6-box",size7:"mdi-numeric-7-box",font:"mdi-format-font",viewSource:"mdi-code-tags"},expansionItem:{icon:"mdi-chevron-down",denseIcon:"mdi-menu-down"},fab:{icon:"mdi-plus",activeIcon:"mdi-close"},field:{clear:"mdi-close-circle",error:"mdi-alert-circle"},pagination:{first:"mdi-chevron-double-left",prev:"mdi-chevron-left",next:"mdi-chevron-right",last:"mdi-chevron-double-right"},rating:{icon:"mdi-star"},stepper:{done:"mdi-check",active:"mdi-pencil",error:"mdi-alert"},tabs:{left:"mdi-chevron-left",right:"mdi-chevron-right",up:"mdi-chevron-up",down:"mdi-chevron-down"},table:{arrowUp:"mdi-arrow-up",warning:"mdi-alert",firstPage:"mdi-chevron-double-left",prevPage:"mdi-chevron-left",nextPage:"mdi-chevron-right",lastPage:"mdi-chevron-double-right"},tree:{icon:"mdi-play"},uploader:{done:"mdi-check",clear:"mdi-close",add:"mdi-plus-box",upload:"mdi-cloud-upload",removeQueue:"mdi-notification-clear-all",removeUploaded:"mdi-check-all"}}}); \ No newline at end of file diff --git a/dist/icon-set/mdi-v5.umd.min.js b/dist/icon-set/mdi-v5.umd.min.js new file mode 100644 index 00000000000..3d96e5167b9 --- /dev/null +++ b/dist/icon-set/mdi-v5.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.iconSet=e.Quasar.iconSet||{},e.Quasar.iconSet.mdiV5=i())}(this,function(){"use strict";return{name:"mdi-v5",type:{positive:"mdi-check-circle",negative:"mdi-alert",info:"mdi-information",warning:"mdi-exclamation"},arrow:{up:"mdi-arrow-up",right:"mdi-arrow-right",down:"mdi-arrow-down",left:"mdi-arrow-left",dropdown:"mdi-menu-down"},chevron:{left:"mdi-chevron-left",right:"mdi-chevron-right"},colorPicker:{spectrum:"mdi-gradient",tune:"mdi-tune",palette:"mdi-palette-swatch"},pullToRefresh:{icon:"mdi-refresh"},carousel:{left:"mdi-chevron-left",right:"mdi-chevron-right",up:"mdi-chevron-up",down:"mdi-chevron-down",navigationIcon:"mdi-circle"},chip:{remove:"mdi-close-circle",selected:"mdi-check"},datetime:{arrowLeft:"mdi-chevron-left",arrowRight:"mdi-chevron-right",now:"mdi-clock-outline",today:"mdi-calendar-today"},editor:{bold:"mdi-format-bold",italic:"mdi-format-italic",strikethrough:"mdi-format-strikethrough-variant",underline:"mdi-format-underline",unorderedList:"mdi-format-list-bulleted",orderedList:"mdi-format-list-numbered",subscript:"mdi-format-subscript",superscript:"mdi-format-superscript",hyperlink:"mdi-link",toggleFullscreen:"mdi-fullscreen",quote:"mdi-format-quote-close",left:"mdi-format-align-left",center:"mdi-format-align-center",right:"mdi-format-align-right",justify:"mdi-format-align-justify",print:"mdi-printer",outdent:"mdi-format-indent-decrease",indent:"mdi-format-indent-increase",removeFormat:"mdi-format-clear",formatting:"mdi-format-color-text",fontSize:"mdi-format-size",align:"mdi-format-align-left",hr:"mdi-minus",undo:"mdi-undo",redo:"mdi-redo",heading:"mdi-format-size",heading1:"mdi-format-header-1",heading2:"mdi-format-header-2",heading3:"mdi-format-header-3",heading4:"mdi-format-header-4",heading5:"mdi-format-header-5",heading6:"mdi-format-header-6",code:"mdi-code-tags",size:"mdi-format-size",size1:"mdi-numeric-1-box",size2:"mdi-numeric-2-box",size3:"mdi-numeric-3-box",size4:"mdi-numeric-4-box",size5:"mdi-numeric-5-box",size6:"mdi-numeric-6-box",size7:"mdi-numeric-7-box",font:"mdi-format-font",viewSource:"mdi-code-tags"},expansionItem:{icon:"mdi-chevron-down",denseIcon:"mdi-menu-down"},fab:{icon:"mdi-plus",activeIcon:"mdi-close"},field:{clear:"mdi-close-circle",error:"mdi-alert-circle"},pagination:{first:"mdi-chevron-double-left",prev:"mdi-chevron-left",next:"mdi-chevron-right",last:"mdi-chevron-double-right"},rating:{icon:"mdi-star"},stepper:{done:"mdi-check",active:"mdi-pencil",error:"mdi-alert"},tabs:{left:"mdi-chevron-left",right:"mdi-chevron-right",up:"mdi-chevron-up",down:"mdi-chevron-down"},table:{arrowUp:"mdi-arrow-up",warning:"mdi-alert",firstPage:"mdi-chevron-double-left",prevPage:"mdi-chevron-left",nextPage:"mdi-chevron-right",lastPage:"mdi-chevron-double-right"},tree:{icon:"mdi-play"},uploader:{done:"mdi-check",clear:"mdi-close",add:"mdi-plus-box",upload:"mdi-cloud-upload",removeQueue:"mdi-notification-clear-all",removeUploaded:"mdi-check-all"}}}); \ No newline at end of file diff --git a/dist/icon-set/mdi-v6.umd.min.js b/dist/icon-set/mdi-v6.umd.min.js new file mode 100644 index 00000000000..bbe1c30cd1e --- /dev/null +++ b/dist/icon-set/mdi-v6.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.iconSet=e.Quasar.iconSet||{},e.Quasar.iconSet.mdiV6=i())}(this,function(){"use strict";return{name:"mdi-v6",type:{positive:"mdi-check-circle",negative:"mdi-alert",info:"mdi-information",warning:"mdi-exclamation"},arrow:{up:"mdi-arrow-up",right:"mdi-arrow-right",down:"mdi-arrow-down",left:"mdi-arrow-left",dropdown:"mdi-menu-down"},chevron:{left:"mdi-chevron-left",right:"mdi-chevron-right"},colorPicker:{spectrum:"mdi-gradient-vertical",tune:"mdi-tune",palette:"mdi-palette-swatch"},pullToRefresh:{icon:"mdi-refresh"},carousel:{left:"mdi-chevron-left",right:"mdi-chevron-right",up:"mdi-chevron-up",down:"mdi-chevron-down",navigationIcon:"mdi-circle"},chip:{remove:"mdi-close-circle",selected:"mdi-check"},datetime:{arrowLeft:"mdi-chevron-left",arrowRight:"mdi-chevron-right",now:"mdi-clock-outline",today:"mdi-calendar-today"},editor:{bold:"mdi-format-bold",italic:"mdi-format-italic",strikethrough:"mdi-format-strikethrough-variant",underline:"mdi-format-underline",unorderedList:"mdi-format-list-bulleted",orderedList:"mdi-format-list-numbered",subscript:"mdi-format-subscript",superscript:"mdi-format-superscript",hyperlink:"mdi-link",toggleFullscreen:"mdi-fullscreen",quote:"mdi-format-quote-close",left:"mdi-format-align-left",center:"mdi-format-align-center",right:"mdi-format-align-right",justify:"mdi-format-align-justify",print:"mdi-printer",outdent:"mdi-format-indent-decrease",indent:"mdi-format-indent-increase",removeFormat:"mdi-format-clear",formatting:"mdi-format-color-text",fontSize:"mdi-format-size",align:"mdi-format-align-left",hr:"mdi-minus",undo:"mdi-undo",redo:"mdi-redo",heading:"mdi-format-size",heading1:"mdi-format-header-1",heading2:"mdi-format-header-2",heading3:"mdi-format-header-3",heading4:"mdi-format-header-4",heading5:"mdi-format-header-5",heading6:"mdi-format-header-6",code:"mdi-code-tags",size:"mdi-format-size",size1:"mdi-numeric-1-box",size2:"mdi-numeric-2-box",size3:"mdi-numeric-3-box",size4:"mdi-numeric-4-box",size5:"mdi-numeric-5-box",size6:"mdi-numeric-6-box",size7:"mdi-numeric-7-box",font:"mdi-format-font",viewSource:"mdi-code-tags"},expansionItem:{icon:"mdi-chevron-down",denseIcon:"mdi-menu-down"},fab:{icon:"mdi-plus",activeIcon:"mdi-close"},field:{clear:"mdi-close-circle",error:"mdi-alert-circle"},pagination:{first:"mdi-chevron-double-left",prev:"mdi-chevron-left",next:"mdi-chevron-right",last:"mdi-chevron-double-right"},rating:{icon:"mdi-star"},stepper:{done:"mdi-check",active:"mdi-pencil",error:"mdi-alert"},tabs:{left:"mdi-chevron-left",right:"mdi-chevron-right",up:"mdi-chevron-up",down:"mdi-chevron-down"},table:{arrowUp:"mdi-arrow-up",warning:"mdi-alert",firstPage:"mdi-chevron-double-left",prevPage:"mdi-chevron-left",nextPage:"mdi-chevron-right",lastPage:"mdi-chevron-double-right"},tree:{icon:"mdi-play"},uploader:{done:"mdi-check",clear:"mdi-close",add:"mdi-plus-box",upload:"mdi-cloud-upload",removeQueue:"mdi-notification-clear-all",removeUploaded:"mdi-check-all"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-bootstrap-icons.umd.min.js b/dist/icon-set/svg-bootstrap-icons.umd.min.js new file mode 100644 index 00000000000..6382a164500 --- /dev/null +++ b/dist/icon-set/svg-bootstrap-icons.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,l){"object"==typeof exports&&"undefined"!=typeof module?module.exports=l():"function"==typeof define&&define.amd?define(l):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.iconSet=a.Quasar.iconSet||{},a.Quasar.iconSet.svgBootstrapIcons=l())}(this,function(){"use strict";var a="M8 15a.5.5 0 0 0 .5-.5V2.707l3.146 3.147a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 1 0 .708.708L7.5 2.707V14.5a.5.5 0 0 0 .5.5z@@fill-rule:evenodd;|0 0 16 16",l="M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z|0 0 16 16",h="M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z|0 0 16 16",e="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z@@fill-rule:evenodd;|0 0 16 16",z="M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z@@fill-rule:evenodd;|0 0 16 16",v="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z@@fill-rule:evenodd;|0 0 16 16",M="M7.646 4.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1-.708.708L8 5.707l-5.646 5.647a.5.5 0 0 1-.708-.708l6-6z@@fill-rule:evenodd;|0 0 16 16",o="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 4a.905.905 0 0 0-.9.995l.35 3.507a.552.552 0 0 0 1.1 0l.35-3.507A.905.905 0 0 0 8 4zm.002 6a1 1 0 1 0 0 2 1 1 0 0 0 0-2z|0 0 16 16",L="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z|0 0 16 16",r="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z|0 0 16 16",n="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z|0 0 16 16";return{name:"svg-bootstrap-icons",type:{positive:h,negative:L,info:o,warning:"M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zM7.1 4.995a.905.905 0 1 1 1.8 0l-.35 3.507a.553.553 0 0 1-1.1 0L7.1 4.995z|0 0 16 16"},arrow:{up:a,right:"M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8z@@fill-rule:evenodd;|0 0 16 16",down:"M8 1a.5.5 0 0 1 .5.5v11.793l3.146-3.147a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 .708-.708L7.5 13.293V1.5A.5.5 0 0 1 8 1z@@fill-rule:evenodd;|0 0 16 16",left:"M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8z@@fill-rule:evenodd;|0 0 16 16",dropdown:l},chevron:{left:z,right:v},colorPicker:{spectrum:"M13.354.646a1.207 1.207 0 0 0-1.708 0L8.5 3.793l-.646-.647a.5.5 0 1 0-.708.708L8.293 5l-7.147 7.146A.5.5 0 0 0 1 12.5v1.793l-.854.853a.5.5 0 1 0 .708.707L1.707 15H3.5a.5.5 0 0 0 .354-.146L11 7.707l1.146 1.147a.5.5 0 0 0 .708-.708l-.647-.646 3.147-3.146a1.207 1.207 0 0 0 0-1.708l-2-2zM2 12.707l7-7L10.293 7l-7 7H2v-1.293z|0 0 16 16",tune:"M11.5 2a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zM9.05 3a2.5 2.5 0 0 1 4.9 0H16v1h-2.05a2.5 2.5 0 0 1-4.9 0H0V3h9.05zM4.5 7a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zM2.05 8a2.5 2.5 0 0 1 4.9 0H16v1H6.95a2.5 2.5 0 0 1-4.9 0H0V8h2.05zm9.45 4a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zm-2.45 1a2.5 2.5 0 0 1 4.9 0H16v1h-2.05a2.5 2.5 0 0 1-4.9 0H0v-1h9.05z@@fill-rule:evenodd;|0 0 16 16",palette:"M0 .5A.5.5 0 0 1 .5 0h5a.5.5 0 0 1 .5.5v5.277l4.147-4.131a.5.5 0 0 1 .707 0l3.535 3.536a.5.5 0 0 1 0 .708L10.261 10H15.5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-.5.5H3a2.99 2.99 0 0 1-2.121-.879A2.99 2.99 0 0 1 0 13.044m6-.21 7.328-7.3-2.829-2.828L6 7.188v5.647zM4.5 13a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0zM15 15v-4H9.258l-4.015 4H15zM0 .5v12.495V.5zM0 12.995V13a3.07 3.07 0 0 0 0-.005z|0 0 16 16"},pullToRefresh:{icon:"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9z&&M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5.002 5.002 0 0 0 8 3zM3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9H3.1z@@fill-rule:evenodd;|0 0 16 16"},carousel:{left:z,right:v,up:M,down:e,navigationIcon:"M8 8 m-8, 0 a8,8 0 1,0 16,0 a8,8 0 1,0 -16,0|0 0 16 16"},chip:{remove:n,selected:h},datetime:{arrowLeft:z,arrowRight:v,now:"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM8 3.5a.5.5 0 0 0-1 0V9a.5.5 0 0 0 .252.434l3.5 2a.5.5 0 0 0 .496-.868L8 8.71V3.5z|0 0 16 16",today:"M4 .5a.5.5 0 0 0-1 0V1H2a2 2 0 0 0-2 2v1h16V3a2 2 0 0 0-2-2h-1V.5a.5.5 0 0 0-1 0V1H4V.5zM16 14V5H0v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2zm-5.146-5.146-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 0 1 .708-.708L7.5 10.793l2.646-2.647a.5.5 0 0 1 .708.708z|0 0 16 16"},editor:{bold:"M8.21 13c2.106 0 3.412-1.087 3.412-2.823 0-1.306-.984-2.283-2.324-2.386v-.055a2.176 2.176 0 0 0 1.852-2.14c0-1.51-1.162-2.46-3.014-2.46H3.843V13H8.21zM5.908 4.674h1.696c.963 0 1.517.451 1.517 1.244 0 .834-.629 1.32-1.73 1.32H5.908V4.673zm0 6.788V8.598h1.73c1.217 0 1.88.492 1.88 1.415 0 .943-.643 1.449-1.832 1.449H5.907z|0 0 16 16",italic:"M7.991 11.674 9.53 4.455c.123-.595.246-.71 1.347-.807l.11-.52H7.211l-.11.52c1.06.096 1.128.212 1.005.807L6.57 11.674c-.123.595-.246.71-1.346.806l-.11.52h3.774l.11-.52c-1.06-.095-1.129-.211-1.006-.806z|0 0 16 16",strikethrough:"M6.333 5.686c0 .31.083.581.27.814H5.166a2.776 2.776 0 0 1-.099-.76c0-1.627 1.436-2.768 3.48-2.768 1.969 0 3.39 1.175 3.445 2.85h-1.23c-.11-1.08-.964-1.743-2.25-1.743-1.23 0-2.18.602-2.18 1.607zm2.194 7.478c-2.153 0-3.589-1.107-3.705-2.81h1.23c.144 1.06 1.129 1.703 2.544 1.703 1.34 0 2.31-.705 2.31-1.675 0-.827-.547-1.374-1.914-1.675L8.046 8.5H1v-1h14v1h-3.504c.468.437.675.994.675 1.697 0 1.826-1.436 2.967-3.644 2.967z|0 0 16 16",underline:"M5.313 3.136h-1.23V9.54c0 2.105 1.47 3.623 3.917 3.623s3.917-1.518 3.917-3.623V3.136h-1.23v6.323c0 1.49-.978 2.57-2.687 2.57-1.709 0-2.687-1.08-2.687-2.57V3.136zM12.5 15h-9v-1h9v1z|0 0 16 16",unorderedList:"M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm-3 1a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm0 4a1 1 0 1 0 0-2 1 1 0 0 0 0 2z@@fill-rule:evenodd;|0 0 16 16",orderedList:"M5 11.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5z@@fill-rule:evenodd;&&M1.713 11.865v-.474H2c.217 0 .363-.137.363-.317 0-.185-.158-.31-.361-.31-.223 0-.367.152-.373.31h-.59c.016-.467.373-.787.986-.787.588-.002.954.291.957.703a.595.595 0 0 1-.492.594v.033a.615.615 0 0 1 .569.631c.003.533-.502.8-1.051.8-.656 0-1-.37-1.008-.794h.582c.008.178.186.306.422.309.254 0 .424-.145.422-.35-.002-.195-.155-.348-.414-.348h-.3zm-.004-4.699h-.604v-.035c0-.408.295-.844.958-.844.583 0 .96.326.96.756 0 .389-.257.617-.476.848l-.537.572v.03h1.054V9H1.143v-.395l.957-.99c.138-.142.293-.304.293-.508 0-.18-.147-.32-.342-.32a.33.33 0 0 0-.342.338v.041zM2.564 5h-.635V2.924h-.031l-.598.42v-.567l.629-.443h.635V5z|0 0 16 16",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",hyperlink:"M6.354 5.5H4a3 3 0 0 0 0 6h3a3 3 0 0 0 2.83-4H9c-.086 0-.17.01-.25.031A2 2 0 0 1 7 10.5H4a2 2 0 1 1 0-4h1.535c.218-.376.495-.714.82-1zM9 5.5a3 3 0 0 0-2.83 4h1.098A2 2 0 0 1 9 6.5h3a2 2 0 1 1 0 4h-1.535a4.02 4.02 0 0 1-.82 1H12a3 3 0 1 0 0-6H9z|0 0 16 16",toggleFullscreen:"M5.828 10.172a.5.5 0 0 0-.707 0l-4.096 4.096V11.5a.5.5 0 0 0-1 0v3.975a.5.5 0 0 0 .5.5H4.5a.5.5 0 0 0 0-1H1.732l4.096-4.096a.5.5 0 0 0 0-.707zm4.344 0a.5.5 0 0 1 .707 0l4.096 4.096V11.5a.5.5 0 1 1 1 0v3.975a.5.5 0 0 1-.5.5H11.5a.5.5 0 0 1 0-1h2.768l-4.096-4.096a.5.5 0 0 1 0-.707zm0-4.344a.5.5 0 0 0 .707 0l4.096-4.096V4.5a.5.5 0 1 0 1 0V.525a.5.5 0 0 0-.5-.5H11.5a.5.5 0 0 0 0 1h2.768l-4.096 4.096a.5.5 0 0 0 0 .707zm-4.344 0a.5.5 0 0 1-.707 0L1.025 1.732V4.5a.5.5 0 0 1-1 0V.525a.5.5 0 0 1 .5-.5H4.5a.5.5 0 0 1 0 1H1.732l4.096 4.096a.5.5 0 0 1 0 .707z@@fill-rule:evenodd;|0 0 16 16",quote:"M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.5a1 1 0 0 0-.8.4l-1.9 2.533a1 1 0 0 1-1.6 0L5.3 12.4a1 1 0 0 0-.8-.4H2a2 2 0 0 1-2-2V2zm7.194 2.766a1.688 1.688 0 0 0-.227-.272 1.467 1.467 0 0 0-.469-.324l-.008-.004A1.785 1.785 0 0 0 5.734 4C4.776 4 4 4.746 4 5.667c0 .92.776 1.666 1.734 1.666.343 0 .662-.095.931-.26-.137.389-.39.804-.81 1.22a.405.405 0 0 0 .011.59c.173.16.447.155.614-.01 1.334-1.329 1.37-2.758.941-3.706a2.461 2.461 0 0 0-.227-.4zM11 7.073c-.136.389-.39.804-.81 1.22a.405.405 0 0 0 .012.59c.172.16.446.155.613-.01 1.334-1.329 1.37-2.758.942-3.706a2.466 2.466 0 0 0-.228-.4 1.686 1.686 0 0 0-.227-.273 1.466 1.466 0 0 0-.469-.324l-.008-.004A1.785 1.785 0 0 0 10.07 4c-.957 0-1.734.746-1.734 1.667 0 .92.777 1.666 1.734 1.666.343 0 .662-.095.931-.26z|0 0 16 16",left:"M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z@@fill-rule:evenodd;|0 0 16 16",center:"M2 12.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z@@fill-rule:evenodd;|0 0 16 16",right:"M6 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-4-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z@@fill-rule:evenodd;|0 0 16 16",justify:"M4 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z@@fill-rule:evenodd;|0 0 16 16",print:"M5 1a2 2 0 0 0-2 2v1h10V3a2 2 0 0 0-2-2H5zm6 8H5a1 1 0 0 0-1 1v3a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1zM0 7a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2h-1v-2a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2H2a2 2 0 0 1-2-2V7zm2.5 1a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1z|0 0 16 16",outdent:"M2 3.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm10.646 2.146a.5.5 0 0 1 .708.708L11.707 8l1.647 1.646a.5.5 0 0 1-.708.708l-2-2a.5.5 0 0 1 0-.708l2-2zM2 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5zm0 3a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5zm0 3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z|0 0 16 16",indent:"M2 3.5a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm.646 2.146a.5.5 0 0 1 .708 0l2 2a.5.5 0 0 1 0 .708l-2 2a.5.5 0 0 1-.708-.708L4.293 8 2.646 6.354a.5.5 0 0 1 0-.708zM7 6.5a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5zm0 3a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5zm-5 3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z|0 0 16 16",removeFormat:"M8.086 2.207a2 2 0 0 1 2.828 0l3.879 3.879a2 2 0 0 1 0 2.828l-5.5 5.5A2 2 0 0 1 7.879 15H5.12a2 2 0 0 1-1.414-.586l-2.5-2.5a2 2 0 0 1 0-2.828l6.879-6.879zm.66 11.34L3.453 8.254 1.914 9.793a1 1 0 0 0 0 1.414l2.5 2.5a1 1 0 0 0 .707.293H7.88a1 1 0 0 0 .707-.293l.16-.16z|0 0 16 16",formatting:"M1.5 2.5A1.5 1.5 0 0 1 3 1h10a1.5 1.5 0 0 1 1.5 1.5v3.563a2 2 0 0 1 0 3.874V13.5A1.5 1.5 0 0 1 13 15H3a1.5 1.5 0 0 1-1.5-1.5V9.937a2 2 0 0 1 0-3.874V2.5zm1 3.563a2 2 0 0 1 0 3.874V13.5a.5.5 0 0 0 .5.5h10a.5.5 0 0 0 .5-.5V9.937a2 2 0 0 1 0-3.874V2.5A.5.5 0 0 0 13 2H3a.5.5 0 0 0-.5.5v3.563zM2 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2z|0 0 16 16",fontSize:"M1.5 2.5A1.5 1.5 0 0 1 3 1h10a1.5 1.5 0 0 1 1.5 1.5v3.563a2 2 0 0 1 0 3.874V13.5A1.5 1.5 0 0 1 13 15H3a1.5 1.5 0 0 1-1.5-1.5V9.937a2 2 0 0 1 0-3.874V2.5zm1 3.563a2 2 0 0 1 0 3.874V13.5a.5.5 0 0 0 .5.5h10a.5.5 0 0 0 .5-.5V9.937a2 2 0 0 1 0-3.874V2.5A.5.5 0 0 0 13 2H3a.5.5 0 0 0-.5.5v3.563zM2 7a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm12 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM11.434 4H4.566L4.5 5.994h.386c.21-1.252.612-1.446 2.173-1.495l.343-.011v6.343c0 .537-.116.665-1.049.748V12h3.294v-.421c-.938-.083-1.054-.21-1.054-.748V4.488l.348.01c1.56.05 1.963.244 2.173 1.496h.386L11.434 4z|0 0 16 16",align:"M2 12.5a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm0-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z@@fill-rule:evenodd;|0 0 16 16",hr:"M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm2.5 7.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1z|0 0 16 16",undo:"M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z@@fill-rule:evenodd;&&M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z|0 0 16 16",redo:"M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z@@fill-rule:evenodd;&&M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z|0 0 16 16",heading:"M8.637 13V3.669H7.379V7.62H2.758V3.67H1.5V13h1.258V8.728h4.62V13h1.259zm5.329 0V3.669h-1.244L10.5 5.316v1.265l2.16-1.565h.062V13h1.244z|0 0 16 16",code:"M5.854 4.854a.5.5 0 1 0-.708-.708l-3.5 3.5a.5.5 0 0 0 0 .708l3.5 3.5a.5.5 0 0 0 .708-.708L2.707 8l3.147-3.146zm4.292 0a.5.5 0 0 1 .708-.708l3.5 3.5a.5.5 0 0 1 0 .708l-3.5 3.5a.5.5 0 0 1-.708-.708L13.293 8l-3.147-3.146z|0 0 16 16",size:"M5 2V0H0v5h2v6H0v5h5v-2h6v2h5v-5h-2V5h2V0h-5v2H5zm6 1v2h2v6h-2v2H5v-2H3V5h2V3h6zm1-2h3v3h-3V1zm3 11v3h-3v-3h3zM4 15H1v-3h3v3zM1 4V1h3v3H1z|0 0 16 16",font:"M12.258 3h-8.51l-.083 2.46h.479c.26-1.544.758-1.783 2.693-1.845l.424-.013v7.827c0 .663-.144.82-1.3.923v.52h4.082v-.52c-1.162-.103-1.306-.26-1.306-.923V3.602l.431.013c1.934.062 2.434.301 2.693 1.846h.479L12.258 3z|0 0 16 16",viewSource:"M10.478 1.647a.5.5 0 1 0-.956-.294l-4 13a.5.5 0 0 0 .956.294l4-13zM4.854 4.146a.5.5 0 0 1 0 .708L1.707 8l3.147 3.146a.5.5 0 0 1-.708.708l-3.5-3.5a.5.5 0 0 1 0-.708l3.5-3.5a.5.5 0 0 1 .708 0zm6.292 0a.5.5 0 0 0 0 .708L14.293 8l-3.147 3.146a.5.5 0 0 0 .708.708l3.5-3.5a.5.5 0 0 0 0-.708l-3.5-3.5a.5.5 0 0 0-.708 0z|0 0 16 16"},expansionItem:{icon:e,denseIcon:l},fab:{icon:"M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z|0 0 16 16",activeIcon:r},field:{clear:n,error:o},pagination:{first:"M11.854 3.646a.5.5 0 0 1 0 .708L8.207 8l3.647 3.646a.5.5 0 0 1-.708.708l-4-4a.5.5 0 0 1 0-.708l4-4a.5.5 0 0 1 .708 0zM4.5 1a.5.5 0 0 0-.5.5v13a.5.5 0 0 0 1 0v-13a.5.5 0 0 0-.5-.5z@@fill-rule:evenodd;|0 0 16 16",prev:z,next:v,last:"M4.146 3.646a.5.5 0 0 0 0 .708L7.793 8l-3.647 3.646a.5.5 0 0 0 .708.708l4-4a.5.5 0 0 0 0-.708l-4-4a.5.5 0 0 0-.708 0zM11.5 1a.5.5 0 0 1 .5.5v13a.5.5 0 0 1-1 0v-13a.5.5 0 0 1 .5-.5z@@fill-rule:evenodd;|0 0 16 16"},rating:{icon:"M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z|0 0 16 16"},stepper:{done:h,active:"M12.854.146a.5.5 0 0 0-.707 0L10.5 1.793 14.207 5.5l1.647-1.646a.5.5 0 0 0 0-.708l-3-3zm.646 6.061L9.793 2.5 3.293 9H3.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.5h.5a.5.5 0 0 1 .5.5v.207l6.5-6.5zm-7.468 7.468A.5.5 0 0 1 6 13.5V13h-.5a.5.5 0 0 1-.5-.5V12h-.5a.5.5 0 0 1-.5-.5V11h-.5a.5.5 0 0 1-.5-.5V10h-.5a.499.499 0 0 1-.175-.032l-.179.178a.5.5 0 0 0-.11.168l-2 5a.5.5 0 0 0 .65.65l5-2a.5.5 0 0 0 .168-.11l.178-.178z|0 0 16 16",error:L},tabs:{left:z,right:v,up:M,down:e},table:{arrowUp:a,warning:L,firstPage:"M4 4a.5.5 0 0 1 1 0v3.248l6.267-3.636c.54-.313 1.232.066 1.232.696v7.384c0 .63-.692 1.01-1.232.697L5 8.753V12a.5.5 0 0 1-1 0V4z|0 0 16 16",prevPage:z,nextPage:v,lastPage:"M12.5 4a.5.5 0 0 0-1 0v3.248L5.233 3.612C4.693 3.3 4 3.678 4 4.308v7.384c0 .63.692 1.01 1.233.697L11.5 8.753V12a.5.5 0 0 0 1 0V4z|0 0 16 16"},tree:{icon:"M0 0zm12.14 8.753-5.482 4.796c-.646.566-1.658.106-1.658-.753V3.204a1 1 0 0 1 1.659-.753l5.48 4.796a1 1 0 0 1 0 1.506z|0 0 16 16"},uploader:{done:h,clear:r,add:"M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z|0 0 16 16",upload:"M.5 9.9a.5.5 0 0 1 .5.5v2.5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2.5a.5.5 0 0 1 1 0v2.5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2v-2.5a.5.5 0 0 1 .5-.5zM7.646 1.146a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708L8.5 2.707V11.5a.5.5 0 0 1-1 0V2.707L5.354 4.854a.5.5 0 1 1-.708-.708l3-3z|0 0 16 16",removeQueue:"M6.146 7.146a.5.5 0 0 1 .708 0L8 8.293l1.146-1.147a.5.5 0 1 1 .708.708L8.707 9l1.147 1.146a.5.5 0 0 1-.708.708L8 9.707l-1.146 1.147a.5.5 0 0 1-.708-.708L7.293 9 6.146 7.854a.5.5 0 0 1 0-.708z@@fill-rule:evenodd;&&M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z&&M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z|0 0 16 16",removeUploaded:"M10.854 7.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 9.793l2.646-2.647a.5.5 0 0 1 .708 0z@@fill-rule:evenodd;&&M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z&&M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z|0 0 16 16"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-eva-icons.umd.min.js b/dist/icon-set/svg-eva-icons.umd.min.js new file mode 100644 index 00000000000..6e791c38acb --- /dev/null +++ b/dist/icon-set/svg-eva-icons.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,V){"object"==typeof exports&&"undefined"!=typeof module?module.exports=V():"function"==typeof define&&define.amd?define(V):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.svgEvaIcons=V())}(this,function(){"use strict";var H="M22.56 16.3L14.89 3.58a3.43 3.43 0 0 0-5.78 0L1.44 16.3a3 3 0 0 0-.05 3A3.37 3.37 0 0 0 4.33 21h15.34a3.37 3.37 0 0 0 2.94-1.66 3 3 0 0 0-.05-3.04zM12 17a1 1 0 1 1 1-1 1 1 0 0 1-1 1zm1-4a1 1 0 0 1-2 0V9a1 1 0 0 1 2 0z",V="M13.83 19a1 1 0 0 1-.78-.37l-4.83-6a1 1 0 0 1 0-1.27l5-6a1 1 0 0 1 1.54 1.28L10.29 12l4.32 5.36a1 1 0 0 1-.78 1.64z",a="M12 16a1 1 0 0 1-.64-.23l-6-5a1 1 0 1 1 1.28-1.54L12 13.71l5.36-4.32a1 1 0 0 1 1.41.15 1 1 0 0 1-.14 1.46l-6 4.83A1 1 0 0 1 12 16z",M="M10 19a1 1 0 0 1-.64-.23 1 1 0 0 1-.13-1.41L13.71 12 9.39 6.63a1 1 0 0 1 .15-1.41 1 1 0 0 1 1.46.15l4.83 6a1 1 0 0 1 0 1.27l-5 6A1 1 0 0 1 10 19z",l="M18 15a1 1 0 0 1-.64-.23L12 10.29l-5.37 4.32a1 1 0 0 1-1.41-.15 1 1 0 0 1 .15-1.41l6-4.83a1 1 0 0 1 1.27 0l6 5a1 1 0 0 1 .13 1.41A1 1 0 0 1 18 15z",L="M11.64 5.23a1 1 0 0 0-1.41.13l-5 6a1 1 0 0 0 0 1.27l4.83 6a1 1 0 0 0 .78.37 1 1 0 0 0 .78-1.63L7.29 12l4.48-5.37a1 1 0 0 0-.13-1.4zM14.29 12l4.48-5.37a1 1 0 0 0-1.54-1.28l-5 6a1 1 0 0 0 0 1.27l4.83 6a1 1 0 0 0 .78.37 1 1 0 0 0 .78-1.63z",e="M18.78 11.37l-4.78-6a1 1 0 0 0-1.41-.15 1 1 0 0 0-.15 1.41L16.71 12l-4.48 5.37a1 1 0 0 0 .13 1.41A1 1 0 0 0 13 19a1 1 0 0 0 .77-.36l5-6a1 1 0 0 0 .01-1.27zM7 5.37a1 1 0 0 0-1.61 1.26L9.71 12l-4.48 5.36a1 1 0 0 0 .13 1.41A1 1 0 0 0 6 19a1 1 0 0 0 .77-.36l5-6a1 1 0 0 0 0-1.27z",A="M9.86 18a1 1 0 0 1-.73-.32l-4.86-5.17a1 1 0 1 1 1.46-1.37l4.12 4.39 8.41-9.2a1 1 0 1 1 1.48 1.34l-9.14 10a1 1 0 0 1-.73.33z",z="M12 15.5a1 1 0 0 1-.71-.29l-4-4a1 1 0 1 1 1.42-1.42L12 13.1l3.3-3.18a1 1 0 1 1 1.38 1.44l-4 3.86a1 1 0 0 1-.68.28z",i="M13.41 12l4.3-4.29a1 1 0 1 0-1.42-1.42L12 10.59l-4.29-4.3a1 1 0 0 0-1.42 1.42l4.3 4.29-4.3 4.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l4.29-4.3 4.29 4.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z",t="M14.6,16.6L19.2,12L14.6,7.4L16,6L22,12L16,18L14.6,16.6M9.4,16.6L4.8,12L9.4,7.4L8,6L2,12L8,18L9.4,16.6Z",n="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",o="M2 4V7H7V19H10V7H15V4H2M21 9H12V12H15V19H18V12H21V9Z";return{name:"svg-eva-icons",type:{positive:"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm4.3 7.61l-4.57 6a1 1 0 0 1-.79.39 1 1 0 0 1-.79-.38l-2.44-3.11a1 1 0 0 1 1.58-1.23l1.63 2.08 3.78-5a1 1 0 1 1 1.6 1.22z",negative:H,info:"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm1 14a1 1 0 0 1-2 0v-5a1 1 0 0 1 2 0zm-1-7a1 1 0 1 1 1-1 1 1 0 0 1-1 1z",warning:"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8zM12 16 m-1, 0 a1,1 0 1,0 2,0 a1,1 0 1,0 -2,0M12 7a1 1 0 0 0-1 1v5a1 1 0 0 0 2 0V8a1 1 0 0 0-1-1z"},arrow:{up:"M5.23 10.64a1 1 0 0 0 1.41.13L11 7.14V19a1 1 0 0 0 2 0V7.14l4.36 3.63a1 1 0 1 0 1.28-1.54l-6-5-.15-.09-.13-.07a1 1 0 0 0-.72 0l-.13.07-.15.09-6 5a1 1 0 0 0-.13 1.41z",right:"M5 13h11.86l-3.63 4.36a1 1 0 0 0 1.54 1.28l5-6a1.19 1.19 0 0 0 .09-.15c0-.05.05-.08.07-.13A1 1 0 0 0 20 12a1 1 0 0 0-.07-.36c0-.05-.05-.08-.07-.13a1.19 1.19 0 0 0-.09-.15l-5-6A1 1 0 0 0 14 5a1 1 0 0 0-.64.23 1 1 0 0 0-.13 1.41L16.86 11H5a1 1 0 0 0 0 2z",down:"M18.77 13.36a1 1 0 0 0-1.41-.13L13 16.86V5a1 1 0 0 0-2 0v11.86l-4.36-3.63a1 1 0 1 0-1.28 1.54l6 5 .15.09.13.07a1 1 0 0 0 .72 0l.13-.07.15-.09 6-5a1 1 0 0 0 .13-1.41z",left:"M19 11H7.14l3.63-4.36a1 1 0 1 0-1.54-1.28l-5 6a1.19 1.19 0 0 0-.09.15c0 .05 0 .08-.07.13A1 1 0 0 0 4 12a1 1 0 0 0 .07.36c0 .05 0 .08.07.13a1.19 1.19 0 0 0 .09.15l5 6A1 1 0 0 0 10 19a1 1 0 0 0 .64-.23 1 1 0 0 0 .13-1.41L7.14 13H19a1 1 0 0 0 0-2z",dropdown:z},chevron:{left:V,right:M},colorPicker:{spectrum:"M19.4 7.34L16.66 4.6A1.92 1.92 0 0 0 14 4.53l-2 2-1.29-1.24a1 1 0 0 0-1.42 1.42L10.53 8 5 13.53a2 2 0 0 0-.57 1.21L4 18.91a1 1 0 0 0 .29.8A1 1 0 0 0 5 20h.09l4.17-.38a2 2 0 0 0 1.21-.57l5.58-5.58 1.24 1.24a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42l-1.24-1.24 2-2a1.92 1.92 0 0 0-.07-2.71zM9.08 17.62l-3 .28.27-3L12 9.36l2.69 2.7zm7-7L13.36 8l1.91-2L18 8.73z",tune:"M19 9a3 3 0 0 0-2.82 2H3a1 1 0 0 0 0 2h13.18A3 3 0 1 0 19 9zm0 4a1 1 0 1 1 1-1 1 1 0 0 1-1 1zM3 7h1.18a3 3 0 0 0 5.64 0H21a1 1 0 0 0 0-2H9.82a3 3 0 0 0-5.64 0H3a1 1 0 0 0 0 2zm4-2a1 1 0 1 1-1 1 1 1 0 0 1 1-1zM21 17h-7.18a3 3 0 0 0-5.64 0H3a1 1 0 0 0 0 2h5.18a3 3 0 0 0 5.64 0H21a1 1 0 0 0 0-2zm-10 2a1 1 0 1 1 1-1 1 1 0 0 1-1 1z",palette:"M20 13.18h-4.06l2.3-2.47a1 1 0 0 0 0-1.41l-4.19-3.86a.93.93 0 0 0-.71-.26 1 1 0 0 0-.7.31l-1.82 2V4a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v13.09A3.91 3.91 0 0 0 6.91 21H20a1 1 0 0 0 1-1v-5.82a1 1 0 0 0-1-1zm-6.58-5.59l2.67 2.49-5.27 5.66v-5.36zM8.82 10v3H5v-3zm0-5v3H5V5zM5 17.09V15h3.82v2.09a1.91 1.91 0 0 1-3.82 0zM19 19h-8.49l3.56-3.82H19z"},pullToRefresh:{icon:"M20.3 13.43a1 1 0 0 0-1.25.65A7.14 7.14 0 0 1 12.18 19 7.1 7.1 0 0 1 5 12a7.1 7.1 0 0 1 7.18-7 7.26 7.26 0 0 1 4.65 1.67l-2.17-.36a1 1 0 0 0-1.15.83 1 1 0 0 0 .83 1.15l4.24.7h.17a1 1 0 0 0 .34-.06.33.33 0 0 0 .1-.06.78.78 0 0 0 .2-.11l.09-.11c0-.05.09-.09.13-.15s0-.1.05-.14a1.34 1.34 0 0 0 .07-.18l.75-4a1 1 0 0 0-2-.38l-.27 1.45A9.21 9.21 0 0 0 12.18 3 9.1 9.1 0 0 0 3 12a9.1 9.1 0 0 0 9.18 9A9.12 9.12 0 0 0 21 14.68a1 1 0 0 0-.7-1.25z"},carousel:{left:V,right:M,up:l,down:a,navigationIcon:"M12 21.85a2 2 0 0 1-1-.25l-.3-.17A15.17 15.17 0 0 1 3 8.23v-.14a2 2 0 0 1 1-1.75l7-3.94a2 2 0 0 1 2 0l7 3.94a2 2 0 0 1 1 1.75v.14a15.17 15.17 0 0 1-7.72 13.2l-.3.17a2 2 0 0 1-.98.25z"},chip:{remove:i,selected:A},datetime:{arrowLeft:V,arrowRight:M,now:"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8zM16 11h-3V8a1 1 0 0 0-2 0v4a1 1 0 0 0 1 1h4a1 1 0 0 0 0-2z",today:"M18 4h-1V3a1 1 0 0 0-2 0v1H9V3a1 1 0 0 0-2 0v1H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3V7a3 3 0 0 0-3-3zM6 6h1v1a1 1 0 0 0 2 0V6h6v1a1 1 0 0 0 2 0V6h1a1 1 0 0 1 1 1v4H5V7a1 1 0 0 1 1-1zm12 14H6a1 1 0 0 1-1-1v-6h14v6a1 1 0 0 1-1 1zM8 16 m-1, 0 a1,1 0 1,0 2,0 a1,1 0 1,0 -2,0M16 15h-4a1 1 0 0 0 0 2h4a1 1 0 0 0 0-2z"},editor:{bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",hyperlink:"M3.9,12C3.9,10.29 5.29,8.9 7,8.9H11V7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H11V15.1H7C5.29,15.1 3.9,13.71 3.9,12M8,13H16V11H8V13M17,7H13V8.9H17C18.71,8.9 20.1,10.29 20.1,12C20.1,13.71 18.71,15.1 17,15.1H13V17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7Z",toggleFullscreen:"M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z",quote:"M14,17H17L19,13V7H13V13H16M6,17H9L11,13V7H5V13H8L6,17Z",left:n,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",print:"M18,3H6V7H18M19,12A1,1 0 0,1 18,11A1,1 0 0,1 19,10A1,1 0 0,1 20,11A1,1 0 0,1 19,12M16,19H8V14H16M19,8H5A3,3 0 0,0 2,11V17H6V21H18V17H22V11A3,3 0 0,0 19,8Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:o,align:n,hr:"M19,13H5V11H19V13Z",undo:"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z",redo:"M18.4,10.6C16.55,9 14.15,8 11.5,8C6.85,8 2.92,11.03 1.54,15.22L3.9,16C4.95,12.81 7.95,10.5 11.5,10.5C13.45,10.5 15.23,11.22 16.62,12.38L13,16H22V7L18.4,10.6Z",heading:o,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",code:t,size:o,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z",viewSource:t},expansionItem:{icon:a,denseIcon:z},fab:{icon:"M19 11h-6V5a1 1 0 0 0-2 0v6H5a1 1 0 0 0 0 2h6v6a1 1 0 0 0 2 0v-6h6a1 1 0 0 0 0-2z",activeIcon:i},field:{clear:"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm2.71 11.29a1 1 0 0 1 0 1.42 1 1 0 0 1-1.42 0L12 13.41l-1.29 1.3a1 1 0 0 1-1.42 0 1 1 0 0 1 0-1.42l1.3-1.29-1.3-1.29a1 1 0 0 1 1.42-1.42l1.29 1.3 1.29-1.3a1 1 0 0 1 1.42 1.42L13.41 12z",error:"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm0 15a1 1 0 1 1 1-1 1 1 0 0 1-1 1zm1-4a1 1 0 0 1-2 0V8a1 1 0 0 1 2 0z"},pagination:{first:L,prev:V,next:M,last:e},rating:{icon:"M17.56 21a1 1 0 0 1-.46-.11L12 18.22l-5.1 2.67a1 1 0 0 1-1.45-1.06l1-5.63-4.12-4a1 1 0 0 1-.25-1 1 1 0 0 1 .81-.68l5.7-.83 2.51-5.13a1 1 0 0 1 1.8 0l2.54 5.12 5.7.83a1 1 0 0 1 .81.68 1 1 0 0 1-.25 1l-4.12 4 1 5.63a1 1 0 0 1-.4 1 1 1 0 0 1-.62.18z"},stepper:{done:A,active:"M19.4 7.34L16.66 4.6A2 2 0 0 0 14 4.53l-9 9a2 2 0 0 0-.57 1.21L4 18.91a1 1 0 0 0 .29.8A1 1 0 0 0 5 20h.09l4.17-.38a2 2 0 0 0 1.21-.57l9-9a1.92 1.92 0 0 0-.07-2.71zM16 10.68L13.32 8l1.95-2L18 8.73z",error:H},tabs:{left:V,right:M,up:l,down:a},table:{arrowUp:"M5.23 10.64a1 1 0 0 0 1.41.13L11 7.14V19a1 1 0 0 0 2 0V7.14l4.36 3.63a1 1 0 1 0 1.28-1.54l-6-5-.15-.09-.13-.07a1 1 0 0 0-.72 0l-.13.07-.15.09-6 5a1 1 0 0 0-.13 1.41z",warning:H,firstPage:L,prevPage:V,nextPage:M,lastPage:e},tree:{icon:"M10.46 18a2.23 2.23 0 0 1-.91-.2 1.76 1.76 0 0 1-1.05-1.59V7.79A1.76 1.76 0 0 1 9.55 6.2a2.1 2.1 0 0 1 2.21.26l5.1 4.21a1.7 1.7 0 0 1 0 2.66l-5.1 4.21a2.06 2.06 0 0 1-1.3.46z"},uploader:{done:A,clear:i,add:"M18 3H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3V6a3 3 0 0 0-3-3zm-3 10h-2v2a1 1 0 0 1-2 0v-2H9a1 1 0 0 1 0-2h2V9a1 1 0 0 1 2 0v2h2a1 1 0 0 1 0 2z",upload:"M21.9 12c0-.11-.06-.22-.09-.33a4.17 4.17 0 0 0-.18-.57c-.05-.12-.12-.24-.18-.37s-.15-.3-.24-.44S21 10.08 21 10s-.2-.25-.31-.37-.21-.2-.32-.3L20 9l-.36-.24a3.68 3.68 0 0 0-.44-.23l-.39-.18a4.13 4.13 0 0 0-.5-.15 3 3 0 0 0-.41-.09L17.67 8A6 6 0 0 0 6.33 8l-.18.05a3 3 0 0 0-.41.09 4.13 4.13 0 0 0-.5.15l-.39.18a3.68 3.68 0 0 0-.44.23l-.36.3-.37.31c-.11.1-.22.19-.32.3s-.21.25-.31.37-.18.23-.26.36-.16.29-.24.44-.13.25-.18.37a4.17 4.17 0 0 0-.18.57c0 .11-.07.22-.09.33A5.23 5.23 0 0 0 2 13a5.5 5.5 0 0 0 .09.91c0 .1.05.19.07.29a5.58 5.58 0 0 0 .18.58l.12.29a5 5 0 0 0 .3.56l.14.22a.56.56 0 0 0 .05.08L3 16a5 5 0 0 0 4 2h3v-1.37a2 2 0 0 1-1 .27 2.05 2.05 0 0 1-1.44-.61 2 2 0 0 1 .05-2.83l3-2.9A2 2 0 0 1 12 10a2 2 0 0 1 1.41.59l3 3a2 2 0 0 1 0 2.82A2 2 0 0 1 15 17a1.92 1.92 0 0 1-1-.27V18h3a5 5 0 0 0 4-2l.05-.05a.56.56 0 0 0 .05-.08l.14-.22a5 5 0 0 0 .3-.56l.12-.29a5.58 5.58 0 0 0 .18-.58c0-.1.05-.19.07-.29A5.5 5.5 0 0 0 22 13a5.23 5.23 0 0 0-.1-1zM12.71 11.29a1 1 0 0 0-1.4 0l-3 2.9a1 1 0 1 0 1.38 1.44L11 14.36V20a1 1 0 0 0 2 0v-5.59l1.29 1.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z",removeQueue:"M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm8 10a7.92 7.92 0 0 1-1.69 4.9L7.1 5.69A7.92 7.92 0 0 1 12 4a8 8 0 0 1 8 8zM4 12a7.92 7.92 0 0 1 1.69-4.9L16.9 18.31A7.92 7.92 0 0 1 12 20a8 8 0 0 1-8-8z",removeUploaded:"M16.62 6.21a1 1 0 0 0-1.41.17l-7 9-3.43-4.18a1 1 0 1 0-1.56 1.25l4.17 5.18a1 1 0 0 0 .78.37 1 1 0 0 0 .83-.38l7.83-10a1 1 0 0 0-.21-1.41zM21.62 6.21a1 1 0 0 0-1.41.17l-7 9-.61-.75-1.26 1.62 1.1 1.37a1 1 0 0 0 .78.37 1 1 0 0 0 .78-.38l7.83-10a1 1 0 0 0-.21-1.4zM8.71 13.06L10 11.44l-.2-.24a1 1 0 0 0-1.43-.2 1 1 0 0 0-.15 1.41z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-fontawesome-v5.umd.min.js b/dist/icon-set/svg-fontawesome-v5.umd.min.js new file mode 100644 index 00000000000..eda76d9119f --- /dev/null +++ b/dist/icon-set/svg-fontawesome-v5.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(c,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((c="undefined"!=typeof globalThis?globalThis:c||self).Quasar=c.Quasar||{},c.Quasar.iconSet=c.Quasar.iconSet||{},c.Quasar.iconSet.svgFontawesomeV5=a())}(this,function(){"use strict";var c="M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z|0 0 448 512",a="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z|0 0 448 512",v="M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z|0 0 320 512",h="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z|0 0 512 512",l="M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z|0 0 448 512",z="M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z|0 0 320 512",e="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z|0 0 320 512",H="M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z|0 0 448 512",M="M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z|0 0 640 512",L="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z|0 0 576 512",t="M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z|0 0 512 512",o="M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z|0 0 448 512",r="M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z|0 0 448 512",V="M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z|0 0 576 512",m="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z|0 0 352 512",n="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z|0 0 512 512";return{name:"svg-fontawesome-v5",type:{positive:h,negative:L,info:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z|0 0 512 512",warning:"M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z|0 0 192 512"},arrow:{up:a,right:"M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z|0 0 448 512",down:"M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z|0 0 448 512",left:"M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z|0 0 448 512",dropdown:v},chevron:{left:z,right:e},colorPicker:{spectrum:"M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z|0 0 512 512",tune:"M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z|0 0 512 512",palette:"M434.66,167.71h0L344.5,77.36a31.83,31.83,0,0,0-45-.07h0l-.07.07L224,152.88V424L434.66,212.9A32,32,0,0,0,434.66,167.71ZM480,320H373.09L186.68,506.51c-2.06,2.07-4.5,3.58-6.68,5.49H480a32,32,0,0,0,32-32V352A32,32,0,0,0,480,320ZM192,32A32,32,0,0,0,160,0H32A32,32,0,0,0,0,32V416a96,96,0,0,0,192,0ZM96,440a24,24,0,1,1,24-24A24,24,0,0,1,96,440Zm32-184H64V192h64Zm0-128H64V64h64Z|0 0 512 512"},pullToRefresh:{icon:"M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z|0 0 512 512"},carousel:{left:z,right:e,up:H,down:l,navigationIcon:"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z|0 0 512 512"},chip:{remove:n,selected:h},datetime:{arrowLeft:z,arrowRight:e,now:"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z|0 0 512 512",today:"M400 64h-48V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H160V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v52H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 400H54a6 6 0 0 1-6-6V160h352v298a6 6 0 0 1-6 6zm-52.849-200.65L198.842 404.519c-4.705 4.667-12.303 4.637-16.971-.068l-75.091-75.699c-4.667-4.705-4.637-12.303.068-16.971l22.719-22.536c4.705-4.667 12.303-4.637 16.97.069l44.104 44.461 111.072-110.181c4.705-4.667 12.303-4.637 16.971.068l22.536 22.718c4.667 4.705 4.636 12.303-.069 16.97z|0 0 448 512"},editor:{bold:"M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z|0 0 384 512",italic:"M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z|0 0 320 512",strikethrough:"M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z|0 0 512 512",underline:"M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z|0 0 448 512",unorderedList:"M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z|0 0 512 512",orderedList:"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z|0 0 512 512",subscript:"M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z|0 0 512 512",superscript:"M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z|0 0 512 512",hyperlink:"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z|0 0 512 512",toggleFullscreen:"M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z|0 0 448 512",quote:"M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z|0 0 512 512",left:c,center:"M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z|0 0 448 512",right:"M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z|0 0 448 512",justify:"M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z|0 0 448 512",print:"M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z|0 0 512 512",outdent:"M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z|0 0 448 512",indent:"M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z|0 0 448 512",removeFormat:"M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z|0 0 512 512",formatting:t,fontSize:V,align:c,hr:"M108 284c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h232c6.6 0 12 5.4 12 12v32c0 6.6-5.4 12-12 12H108zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zm-48 346V86c0-3.3-2.7-6-6-6H54c-3.3 0-6 2.7-6 6v340c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z|0 0 448 512",undo:"M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z|0 0 512 512",redo:"M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z|0 0 512 512",heading:t,code:M,size:V,font:"M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z|0 0 448 512",viewSource:M},expansionItem:{icon:l,denseIcon:v},fab:{icon:"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z|0 0 448 512",activeIcon:m},field:{clear:n,error:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z|0 0 512 512"},pagination:{first:o,prev:z,next:e,last:r},rating:{icon:"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z|0 0 576 512"},stepper:{done:h,active:"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z|0 0 512 512",error:L},tabs:{left:z,right:e,up:H,down:l},table:{arrowUp:a,warning:L,firstPage:o,prevPage:z,nextPage:e,lastPage:r},tree:{icon:"M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z|0 0 448 512"},uploader:{done:h,clear:m,add:"M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z|0 0 448 512",upload:"M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z|0 0 512 512",removeQueue:"M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z|0 0 512 512",removeUploaded:"M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z|0 0 384 512"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-fontawesome-v6.umd.min.js b/dist/icon-set/svg-fontawesome-v6.umd.min.js new file mode 100644 index 00000000000..84cddbd4b88 --- /dev/null +++ b/dist/icon-set/svg-fontawesome-v6.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(c,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):((c="undefined"!=typeof globalThis?globalThis:c||self).Quasar=c.Quasar||{},c.Quasar.iconSet=c.Quasar.iconSet||{},c.Quasar.iconSet.svgFontawesomeV6=s())}(this,function(){"use strict";var c="M288 64c0 17.7-14.3 32-32 32H32C14.3 96 0 81.7 0 64S14.3 32 32 32H256c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H256c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z|0 0 448 512",s="M214.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 141.2V448c0 17.7 14.3 32 32 32s32-14.3 32-32V141.2L329.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160z|0 0 384 512",H="M267.5 440.6c9.5 7.9 22.8 9.7 34.1 4.4s18.4-16.6 18.4-29V96c0-12.4-7.2-23.7-18.4-29s-24.5-3.6-34.1 4.4l-192 160L64 241V96c0-17.7-14.3-32-32-32S0 78.3 0 96V416c0 17.7 14.3 32 32 32s32-14.3 32-32V271l11.5 9.6 192 160z|0 0 320 512",l="M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z|0 0 320 512",z="M470.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L192 338.7 425.4 105.4c12.5-12.5 32.8-12.5 45.3 0z|0 0 512 512",e="M233.4 406.6c12.5 12.5 32.8 12.5 45.3 0l192-192c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L256 338.7 86.6 169.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l192 192z|0 0 512 512",M="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l192 192c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 278.6 86.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-192 192z|0 0 384 512",L="M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z|0 0 384 512",V="M233.4 105.4c12.5-12.5 32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L256 173.3 86.6 342.6c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l192-192z|0 0 512 512",t="M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z|0 0 512 512",C="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z|0 0 640 512",o="M52.5 440.6c-9.5 7.9-22.8 9.7-34.1 4.4S0 428.4 0 416V96C0 83.6 7.2 72.3 18.4 67s24.5-3.6 34.1 4.4l192 160L256 241V96c0-17.7 14.3-32 32-32s32 14.3 32 32V416c0 17.7-14.3 32-32 32s-32-14.3-32-32V271l-11.5 9.6-192 160z|0 0 320 512",r="M0 64C0 46.3 14.3 32 32 32H80h48c17.7 0 32 14.3 32 32s-14.3 32-32 32H112V208H336V96H320c-17.7 0-32-14.3-32-32s14.3-32 32-32h48 48c17.7 0 32 14.3 32 32s-14.3 32-32 32H400V240 416h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H368 320c-17.7 0-32-14.3-32-32s14.3-32 32-32h16V272H112V416h16c17.7 0 32 14.3 32 32s-14.3 32-32 32H80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V240 96H32C14.3 96 0 81.7 0 64z|0 0 448 512",n="M32 32C14.3 32 0 46.3 0 64v64c0 17.7 14.3 32 32 32s32-14.3 32-32V96h64l0 320H96c-17.7 0-32 14.3-32 32s14.3 32 32 32H224c17.7 0 32-14.3 32-32s-14.3-32-32-32H192l0-320h64v32c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32H160 32zm470.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-64 64c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8h32V352H416c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l64 64c12.5 12.5 32.8 12.5 45.3 0l64-64c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8H512V160h32c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-64-64z|0 0 576 512",i="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224c0-17.7-14.3-32-32-32s-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32z|0 0 512 512",a="M310.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L160 210.7 54.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L114.7 256 9.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L160 301.3 265.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L205.3 256 310.6 150.6z|0 0 320 512";return{name:"svg-fontawesome-v6",type:{positive:z,negative:i,info:"M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-144c-17.7 0-32-14.3-32-32s14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32z|0 0 512 512",warning:"M96 64c0-17.7-14.3-32-32-32S32 46.3 32 64V320c0 17.7 14.3 32 32 32s32-14.3 32-32V64zM64 480c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40s17.9 40 40 40z|0 0 128 512"},arrow:{up:s,right:"M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z|0 0 448 512",down:"M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z|0 0 384 512",left:"M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z|0 0 448 512",dropdown:l},chevron:{left:M,right:L},colorPicker:{spectrum:"M341.6 29.2L240.1 130.8l-9.4-9.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-9.4-9.4L482.8 170.4c39-39 39-102.2 0-141.1s-102.2-39-141.1 0zM55.4 323.3c-15 15-23.4 35.4-23.4 56.6v42.4L5.4 462.2c-8.5 12.7-6.8 29.6 4 40.4s27.7 12.5 40.4 4L89.7 480h42.4c21.2 0 41.6-8.4 56.6-23.4L309.4 335.9l-45.3-45.3L143.4 411.3c-3 3-7.1 4.7-11.3 4.7H96V379.9c0-4.2 1.7-8.3 4.7-11.3L221.4 247.9l-45.3-45.3L55.4 323.3z|0 0 512 512",tune:"M0 416c0-17.7 14.3-32 32-32l54.7 0c12.3-28.3 40.5-48 73.3-48s61 19.7 73.3 48L480 384c17.7 0 32 14.3 32 32s-14.3 32-32 32l-246.7 0c-12.3 28.3-40.5 48-73.3 48s-61-19.7-73.3-48L32 448c-17.7 0-32-14.3-32-32zm192 0c0-17.7-14.3-32-32-32s-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32zM384 256c0-17.7-14.3-32-32-32s-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32zm-32-80c32.8 0 61 19.7 73.3 48l54.7 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-54.7 0c-12.3 28.3-40.5 48-73.3 48s-61-19.7-73.3-48L32 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l246.7 0c12.3-28.3 40.5-48 73.3-48zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32s32-14.3 32-32s-14.3-32-32-32zm73.3 0L480 64c17.7 0 32 14.3 32 32s-14.3 32-32 32l-214.7 0c-12.3 28.3-40.5 48-73.3 48s-61-19.7-73.3-48L32 128C14.3 128 0 113.7 0 96S14.3 64 32 64l86.7 0C131 35.7 159.2 16 192 16s61 19.7 73.3 48z|0 0 512 512",palette:"M0 32C0 14.3 14.3 0 32 0H160c17.7 0 32 14.3 32 32V416c0 53-43 96-96 96s-96-43-96-96V32zM223.6 425.9c.3-3.3 .4-6.6 .4-9.9V154l75.4-75.4c12.5-12.5 32.8-12.5 45.3 0l90.5 90.5c12.5 12.5 12.5 32.8 0 45.3L223.6 425.9zM182.8 512l192-192H480c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32H182.8zM128 64H64v64h64V64zM64 192v64h64V192H64zM96 440c13.3 0 24-10.7 24-24s-10.7-24-24-24s-24 10.7-24 24s10.7 24 24 24z|0 0 512 512"},pullToRefresh:{icon:"M142.9 142.9c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5c0 0 0 0 0 0H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5c7.7-21.8 20.2-42.3 37.8-59.8zM16 312v7.6 .7V440c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l41.6-41.6c87.6 86.5 228.7 86.2 315.8-1c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.2 62.2-162.7 62.5-225.3 1L185 329c6.9-6.9 8.9-17.2 5.2-26.2s-12.5-14.8-22.2-14.8H48.4h-.7H40c-13.3 0-24 10.7-24 24z|0 0 512 512"},carousel:{left:M,right:L,up:V,down:e,navigationIcon:"M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512z|0 0 512 512"},chip:{remove:t,selected:z},datetime:{arrowLeft:M,arrowRight:L,now:"M232 120C232 106.7 242.7 96 256 96C269.3 96 280 106.7 280 120V243.2L365.3 300C376.3 307.4 379.3 322.3 371.1 333.3C364.6 344.3 349.7 347.3 338.7 339.1L242.7 275.1C236 271.5 232 264 232 255.1L232 120zM256 0C397.4 0 512 114.6 512 256C512 397.4 397.4 512 256 512C114.6 512 0 397.4 0 256C0 114.6 114.6 0 256 0zM48 256C48 370.9 141.1 464 256 464C370.9 464 464 370.9 464 256C464 141.1 370.9 48 256 48C141.1 48 48 141.1 48 256z|0 0 512 512",today:"M216.1 408.1C207.6 418.3 192.4 418.3 183 408.1L119 344.1C109.7 335.6 109.7 320.4 119 311C128.4 301.7 143.6 301.7 152.1 311L200 358.1L295 263C304.4 253.7 319.6 253.7 328.1 263C338.3 272.4 338.3 287.6 328.1 296.1L216.1 408.1zM128 0C141.3 0 152 10.75 152 24V64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0zM400 192H48V448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192z|0 0 448 512"},editor:{bold:"M0 64C0 46.3 14.3 32 32 32H80 96 224c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128H96 80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V256 96H32C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64H112V224H224zM112 288V416H256c35.3 0 64-28.7 64-64s-28.7-64-64-64H224 112z|0 0 384 512",italic:"M128 64c0-17.7 14.3-32 32-32H352c17.7 0 32 14.3 32 32s-14.3 32-32 32H293.3L160 416h64c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H90.7L224 96H160c-17.7 0-32-14.3-32-32z|0 0 384 512",strikethrough:"M161.3 144c3.2-17.2 14-30.1 33.7-38.6c21.1-9 51.8-12.3 88.6-6.5c11.9 1.9 48.8 9.1 60.1 12c17.1 4.5 34.6-5.6 39.2-22.7s-5.6-34.6-22.7-39.2c-14.3-3.8-53.6-11.4-66.6-13.4c-44.7-7-88.3-4.2-123.7 10.9c-36.5 15.6-64.4 44.8-71.8 87.3c-.1 .6-.2 1.1-.2 1.7c-2.8 23.9 .5 45.6 10.1 64.6c4.5 9 10.2 16.9 16.7 23.9H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H270.1c-.1 0-.3-.1-.4-.1l-1.1-.3c-36-10.8-65.2-19.6-85.2-33.1c-9.3-6.3-15-12.6-18.2-19.1c-3.1-6.1-5.2-14.6-3.8-27.4zM348.9 337.2c2.7 6.5 4.4 15.8 1.9 30.1c-3 17.6-13.8 30.8-33.9 39.4c-21.1 9-51.7 12.3-88.5 6.5c-18-2.9-49.1-13.5-74.4-22.1c-5.6-1.9-11-3.7-15.9-5.4c-16.8-5.6-34.9 3.5-40.5 20.3s3.5 34.9 20.3 40.5c3.6 1.2 7.9 2.7 12.7 4.3l0 0 0 0c24.9 8.5 63.6 21.7 87.6 25.6l0 0 .2 0c44.7 7 88.3 4.2 123.7-10.9c36.5-15.6 64.4-44.8 71.8-87.3c3.6-21 2.7-40.4-3.1-58.1H335.1c7 5.6 11.4 11.2 13.9 17.2z|0 0 512 512",underline:"M16 64c0-17.7 14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H128V224c0 53 43 96 96 96s96-43 96-96V96H304c-17.7 0-32-14.3-32-32s14.3-32 32-32h96c17.7 0 32 14.3 32 32s-14.3 32-32 32H384V224c0 88.4-71.6 160-160 160s-160-71.6-160-160V96H48C30.3 96 16 81.7 16 64zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32z|0 0 448 512",unorderedList:"M64 144c26.5 0 48-21.5 48-48s-21.5-48-48-48S16 69.5 16 96s21.5 48 48 48zM192 64c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32H480c17.7 0 32-14.3 32-32s-14.3-32-32-32H192zM64 464c26.5 0 48-21.5 48-48s-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48zm48-208c0-26.5-21.5-48-48-48s-48 21.5-48 48s21.5 48 48 48s48-21.5 48-48z|0 0 512 512",orderedList:"M24 56c0-13.3 10.7-24 24-24H80c13.3 0 24 10.7 24 24V176h16c13.3 0 24 10.7 24 24s-10.7 24-24 24H40c-13.3 0-24-10.7-24-24s10.7-24 24-24H56V80H48C34.7 80 24 69.3 24 56zM86.7 341.2c-6.5-7.4-18.3-6.9-24 1.2L51.5 357.9c-7.7 10.8-22.7 13.3-33.5 5.6s-13.3-22.7-5.6-33.5l11.1-15.6c23.7-33.2 72.3-35.6 99.2-4.9c21.3 24.4 20.8 60.9-1.1 84.7L86.8 432H120c13.3 0 24 10.7 24 24s-10.7 24-24 24H32c-9.5 0-18.2-5.6-22-14.4s-2.1-18.9 4.3-25.9l72-78c5.3-5.8 5.4-14.6 .3-20.5zM224 64H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zm0 160H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32z|0 0 512 512",subscript:"M32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H47.3l89.6 128L47.3 384H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H304.7L215.1 256l89.6-128H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H288c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64H32zM480 320c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 361.5 404.3 368 416 368v80c-17.7 0-32 14.3-32 32s14.3 32 32 32h32 32c17.7 0 32-14.3 32-32s-14.3-32-32-32V320z|0 0 512 512",superscript:"M480 32c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4l-32 16c-15.8 7.9-22.2 27.1-14.3 42.9C393 73.5 404.3 80 416 80v80c-17.7 0-32 14.3-32 32s14.3 32 32 32h32 32c17.7 0 32-14.3 32-32s-14.3-32-32-32V32zM32 64C14.3 64 0 78.3 0 96s14.3 32 32 32H47.3l89.6 128L47.3 384H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H64c10.4 0 20.2-5.1 26.2-13.6L176 311.8l85.8 122.6c6 8.6 15.8 13.6 26.2 13.6h32c17.7 0 32-14.3 32-32s-14.3-32-32-32H304.7L215.1 256l89.6-128H320c17.7 0 32-14.3 32-32s-14.3-32-32-32H288c-10.4 0-20.2 5.1-26.2 13.6L176 200.2 90.2 77.6C84.2 69.1 74.4 64 64 64H32z|0 0 512 512",hyperlink:"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z|0 0 640 512",toggleFullscreen:"M168 32H24C10.7 32 0 42.7 0 56V200c0 9.7 5.8 18.5 14.8 22.2s19.3 1.7 26.2-5.2l40-40 79 79L81 335 41 295c-6.9-6.9-17.2-8.9-26.2-5.2S0 302.3 0 312V456c0 13.3 10.7 24 24 24H168c9.7 0 18.5-5.8 22.2-14.8s1.7-19.3-5.2-26.2l-40-40 79-79 79 79-40 40c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H424c13.3 0 24-10.7 24-24V312c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2l-40 40-79-79 79-79 40 40c6.9 6.9 17.2 8.9 26.2 5.2s14.8-12.5 14.8-22.2V56c0-13.3-10.7-24-24-24H280c-9.7 0-18.5 5.8-22.2 14.8s-1.7 19.3 5.2 26.2l40 40-79 79-79-79 40-40c6.9-6.9 8.9-17.2 5.2-26.2S177.7 32 168 32z|0 0 448 512",quote:"M448 296c0 66.3-53.7 120-120 120h-8c-17.7 0-32-14.3-32-32s14.3-32 32-32h8c30.9 0 56-25.1 56-56v-8H320c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64h64c35.3 0 64 28.7 64 64v32 32 72zm-256 0c0 66.3-53.7 120-120 120H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h8c30.9 0 56-25.1 56-56v-8H64c-35.3 0-64-28.7-64-64V160c0-35.3 28.7-64 64-64h64c35.3 0 64 28.7 64 64v32 32 72z|0 0 448 512",left:c,center:"M352 64c0-17.7-14.3-32-32-32H128c-17.7 0-32 14.3-32 32s14.3 32 32 32H320c17.7 0 32-14.3 32-32zm96 128c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32zM0 448c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM352 320c0-17.7-14.3-32-32-32H128c-17.7 0-32 14.3-32 32s14.3 32 32 32H320c17.7 0 32-14.3 32-32z|0 0 448 512",right:"M448 64c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32zm0 256c0 17.7-14.3 32-32 32H192c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32zM0 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM448 448c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z|0 0 448 512",justify:"M448 64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64S14.3 96 32 96H416c17.7 0 32-14.3 32-32zm0 256c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32zM0 192c0 17.7 14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32c-17.7 0-32 14.3-32 32zM448 448c0-17.7-14.3-32-32-32H32c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32z|0 0 448 512",print:"M128 0C92.7 0 64 28.7 64 64v96h64V64H354.7L384 93.3V160h64V93.3c0-17-6.7-33.3-18.7-45.3L400 18.7C388 6.7 371.7 0 354.7 0H128zM384 352v32 64H128V384 368 352H384zm64 32h32c17.7 0 32-14.3 32-32V256c0-35.3-28.7-64-64-64H64c-35.3 0-64 28.7-64 64v96c0 17.7 14.3 32 32 32H64v64c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V384zm-16-88c-13.3 0-24-10.7-24-24s10.7-24 24-24s24 10.7 24 24s-10.7 24-24 24z|0 0 512 512",outdent:"M32 64c0-17.7 14.3-32 32-32H448c17.7 0 32 14.3 32 32s-14.3 32-32 32H64C46.3 96 32 81.7 32 64zM224 192c0-17.7 14.3-32 32-32H448c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32zm32 96H448c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32zM32 448c0-17.7 14.3-32 32-32H448c17.7 0 32 14.3 32 32s-14.3 32-32 32H64c-17.7 0-32-14.3-32-32zm.2-179.4c-8.2-6.4-8.2-18.9 0-25.3l101.9-79.3c10.5-8.2 25.8-.7 25.8 12.6V335.3c0 13.3-15.3 20.8-25.8 12.6L32.2 268.6z|0 0 512 512",indent:"M0 64C0 46.3 14.3 32 32 32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 96 0 81.7 0 64zM192 192c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32zm32 96H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H224c-17.7 0-32-14.3-32-32s14.3-32 32-32zM0 448c0-17.7 14.3-32 32-32H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32c-17.7 0-32-14.3-32-32zM127.8 268.6L25.8 347.9C15.3 356.1 0 348.6 0 335.3V176.7c0-13.3 15.3-20.8 25.8-12.6l101.9 79.3c8.2 6.4 8.2 18.9 0 25.3z|0 0 448 512",removeFormat:"M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7H288h9.4H512c17.7 0 32-14.3 32-32s-14.3-32-32-32H387.9L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416H288l-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z|0 0 576 512",formatting:r,fontSize:n,align:c,hr:"M312 232C325.3 232 336 242.7 336 256C336 269.3 325.3 280 312 280H136C122.7 280 112 269.3 112 256C112 242.7 122.7 232 136 232H312zM0 96C0 60.65 28.65 32 64 32H384C419.3 32 448 60.65 448 96V416C448 451.3 419.3 480 384 480H64C28.65 480 0 451.3 0 416V96zM48 96V416C48 424.8 55.16 432 64 432H384C392.8 432 400 424.8 400 416V96C400 87.16 392.8 80 384 80H64C55.16 80 48 87.16 48 96z|0 0 448 512",undo:"M48.5 224H40c-13.3 0-24-10.7-24-24V72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8H48.5z|0 0 512 512",redo:"M463.5 224H472c13.3 0 24-10.7 24-24V72c0-9.7-5.8-18.5-14.8-22.2s-19.3-1.7-26.2 5.2L413.4 96.6c-87.6-86.5-228.7-86.2-315.8 1c-87.5 87.5-87.5 229.3 0 316.8s229.3 87.5 316.8 0c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0c-62.5 62.5-163.8 62.5-226.3 0s-62.5-163.8 0-226.3c62.2-62.2 162.7-62.5 225.3-1L327 183c-6.9 6.9-8.9 17.2-5.2 26.2s12.5 14.8 22.2 14.8H463.5z|0 0 512 512",heading:r,code:C,size:n,font:"M254 52.8C249.3 40.3 237.3 32 224 32s-25.3 8.3-30 20.8L57.8 416H32c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-1.8l18-48H303.8l18 48H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H390.2L254 52.8zM279.8 304H168.2L224 155.1 279.8 304z|0 0 448 512",viewSource:C},expansionItem:{icon:e,denseIcon:l},fab:{icon:"M256 80c0-17.7-14.3-32-32-32s-32 14.3-32 32V224H48c-17.7 0-32 14.3-32 32s14.3 32 32 32H192V432c0 17.7 14.3 32 32 32s32-14.3 32-32V288H400c17.7 0 32-14.3 32-32s-14.3-32-32-32H256V80z|0 0 448 512",activeIcon:a},field:{clear:t,error:"M256 512c141.4 0 256-114.6 256-256S397.4 0 256 0S0 114.6 0 256S114.6 512 256 512zm0-384c13.3 0 24 10.7 24 24V264c0 13.3-10.7 24-24 24s-24-10.7-24-24V152c0-13.3 10.7-24 24-24zm32 224c0 17.7-14.3 32-32 32s-32-14.3-32-32s14.3-32 32-32s32 14.3 32 32z|0 0 512 512"},pagination:{first:H,prev:M,next:L,last:o},rating:{icon:"M316.9 18C311.6 7 300.4 0 288.1 0s-23.4 7-28.8 18L195 150.3 51.4 171.5c-12 1.8-22 10.2-25.7 21.7s-.7 24.2 7.9 32.7L137.8 329 113.2 474.7c-2 12 3 24.2 12.9 31.3s23 8 33.8 2.3l128.3-68.5 128.3 68.5c10.8 5.7 23.9 4.9 33.8-2.3s14.9-19.3 12.9-31.3L438.5 329 542.7 225.9c8.6-8.5 11.7-21.2 7.9-32.7s-13.7-19.9-25.7-21.7L381.2 150.3 316.9 18z|0 0 576 512"},stepper:{done:z,active:"M421.7 220.3l-11.3 11.3-22.6 22.6-205 205c-6.6 6.6-14.8 11.5-23.8 14.1L30.8 511c-8.4 2.5-17.5 .2-23.7-6.1S-1.5 489.7 1 481.2L38.7 353.1c2.6-9 7.5-17.2 14.1-23.8l205-205 22.6-22.6 11.3-11.3 33.9 33.9 62.1 62.1 33.9 33.9zM96 353.9l-9.3 9.3c-.9 .9-1.6 2.1-2 3.4l-25.3 86 86-25.3c1.3-.4 2.5-1.1 3.4-2l9.3-9.3H112c-8.8 0-16-7.2-16-16V353.9zM453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-14.5 14.5-22.6 22.6-11.3 11.3-33.9-33.9-62.1-62.1L314.3 67.7l11.3-11.3 22.6-22.6 14.5-14.5c25-25 65.5-25 90.5 0z|0 0 512 512",error:i},tabs:{left:M,right:L,up:V,down:e},table:{arrowUp:s,warning:i,firstPage:H,prevPage:M,nextPage:L,lastPage:o},tree:{icon:"M73 39c-14.8-9.1-33.4-9.4-48.5-.9S0 62.6 0 80V432c0 17.4 9.4 33.4 24.5 41.9s33.7 8.1 48.5-.9L361 297c14.3-8.7 23-24.2 23-41s-8.7-32.2-23-41L73 39z|0 0 384 512"},uploader:{done:z,clear:a,add:"M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM200 344V280H136c-13.3 0-24-10.7-24-24s10.7-24 24-24h64V168c0-13.3 10.7-24 24-24s24 10.7 24 24v64h64c13.3 0 24 10.7 24 24s-10.7 24-24 24H248v64c0 13.3-10.7 24-24 24s-24-10.7-24-24z|0 0 448 512",upload:"M288 109.3V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3l-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352H192c0 35.3 28.7 64 64 64s64-28.7 64-64H448c35.3 0 64 28.7 64 64v32c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V416c0-35.3 28.7-64 64-64zM432 456c13.3 0 24-10.7 24-24s-10.7-24-24-24s-24 10.7-24 24s10.7 24 24 24z|0 0 512 512",removeQueue:"M0 96C0 78.3 14.3 64 32 64H416c17.7 0 32 14.3 32 32s-14.3 32-32 32H32C14.3 128 0 113.7 0 96zM64 256c0-17.7 14.3-32 32-32H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H96c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H416c17.7 0 32 14.3 32 32z|0 0 512 512",removeUploaded:"M192 0c-41.8 0-77.4 26.7-90.5 64H64C28.7 64 0 92.7 0 128V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V128c0-35.3-28.7-64-64-64H282.5C269.4 26.7 233.8 0 192 0zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32s32 14.3 32 32s-14.3 32-32 32zM307.8 275.8l-128 128c-10.9 10.9-28.7 10.9-39.6 0l-64-64c-10.9-10.9-10.9-28.7 0-39.6s28.7-10.9 39.6 0L160 344.4 268.2 236.2c10.9-10.9 28.7-10.9 39.6 0s10.9 28.7 0 39.6z|0 0 384 512"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-ionicons-v4.umd.min.js b/dist/icon-set/svg-ionicons-v4.umd.min.js new file mode 100644 index 00000000000..8725911b95c --- /dev/null +++ b/dist/icon-set/svg-ionicons-v4.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,V){"object"==typeof exports&&"undefined"!=typeof module?module.exports=V():"function"==typeof define&&define.amd?define(V):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.svgIoniconsV4=V())}(this,function(){"use strict";var H="M217.9 256L345 129c9.4-9.4 9.4-24.6 0-33.9-9.4-9.4-24.6-9.3-34 0L167 239c-9.1 9.1-9.3 23.7-.7 33.1L310.9 417c4.7 4.7 10.9 7 17 7s12.3-2.3 17-7c9.4-9.4 9.4-24.6 0-33.9L217.9 256z|0 0 512 512",V="M256 294.1L383 167c9.4-9.4 24.6-9.4 33.9 0s9.3 24.6 0 34L273 345c-9.1 9.1-23.7 9.3-33.1.7L95 201.1c-4.7-4.7-7-10.9-7-17s2.3-12.3 7-17c9.4-9.4 24.6-9.4 33.9 0l127.1 127z|0 0 512 512",M="M294.1 256L167 129c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.3 34 0L345 239c9.1 9.1 9.3 23.7.7 33.1L201.1 417c-4.7 4.7-10.9 7-17 7s-12.3-2.3-17-7c-9.4-9.4-9.4-24.6 0-33.9l127-127.1z|0 0 512 512",L="M256 217.9L383 345c9.4 9.4 24.6 9.4 33.9 0 9.4-9.4 9.3-24.6 0-34L273 167c-9.1-9.1-23.7-9.3-33.1-.7L95 310.9c-4.7 4.7-7 10.9-7 17s2.3 12.3 7 17c9.4 9.4 24.6 9.4 33.9 0l127.1-127z|0 0 512 512",c="M256 48C141.6 48 48 141.601 48 256s93.6 208 208 208 208-93.601 208-208S370.4 48 256 48zm24 312h-48v-40h48v40zm0-88h-48V144h48v128z|0 0 512 512",e="M128 192l128 128 128-128z|0 0 512 512",h="M277.375 427V167.296l119.702 119.702L427 256 256 85 85 256l29.924 29.922 119.701-118.626V427h42.75z|0 0 512 512",v="M186.301 339.893L96 249.461l-32 30.507L186.301 402 448 140.506 416 110z|0 0 512 512",z="M256 48C140.559 48 48 140.559 48 256c0 115.436 92.559 208 208 208 115.435 0 208-92.564 208-208 0-115.441-92.564-208-208-208zm104.002 282.881l-29.12 29.117L256 285.117l-74.881 74.881-29.121-29.117L226.881 256l-74.883-74.881 29.121-29.116L256 226.881l74.881-74.878 29.12 29.116L285.119 256l74.883 74.881z|0 0 512 512",l="M405 136.798L375.202 107 256 226.202 136.798 107 107 136.798 226.202 256 107 375.202 136.798 405 256 285.798 375.202 405 405 375.202 285.798 256z|0 0 512 512",i="M32 464h448L256 48 32 464zm248-64h-48v-48h48v48zm0-80h-48v-96h48v96z|0 0 512 512",C="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",n="M2 4V7H7V19H10V7H15V4H2M21 9H12V12H15V19H18V12H21V9Z";return{name:"svg-ionicons-v4",type:{positive:v,negative:c,info:"M256 90c44.3 0 86 17.3 117.4 48.6C404.7 170 422 211.7 422 256s-17.3 86-48.6 117.4C342 404.7 300.3 422 256 422s-86-17.3-117.4-48.6C107.3 342 90 300.3 90 256s17.3-86 48.6-117.4C170 107.3 211.7 90 256 90m0-42C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zM277 360h-42V235h42v125zm0-166h-42v-42h42v42z|0 0 512 512",warning:c},arrow:{up:h,right:"M85 277.375h259.704L225.002 397.077 256 427l171-171L256 85l-29.922 29.924 118.626 119.701H85v42.75z|0 0 512 512",down:"M277.375 85v259.704l119.702-119.702L427 256 256 427 85 256l29.924-29.922 119.701 118.626V85h42.75z|0 0 512 512",left:"M427 234.625H167.296l119.702-119.702L256 85 85 256l171 171 29.922-29.924-118.626-119.701H427v-42.75z|0 0 512 512",dropdown:e},chevron:{left:H,right:M},colorPicker:{spectrum:"M256 32C132.288 32 32 132.288 32 256s100.288 224 224 224 224-100.288 224-224S379.712 32 256 32zm135.765 359.765C355.5 428.028 307.285 448 256 448s-99.5-19.972-135.765-56.235C83.972 355.5 64 307.285 64 256s19.972-99.5 56.235-135.765C156.5 83.972 204.715 64 256 64s99.5 19.972 135.765 56.235C428.028 156.5 448 204.715 448 256s-19.972 99.5-56.235 135.765zM200.043 106.067c-40.631 15.171-73.434 46.382-90.717 85.933H256l-55.957-85.933zM412.797 288A160.723 160.723 0 0 0 416 256c0-36.624-12.314-70.367-33.016-97.334L311 288h101.797zM359.973 134.395C332.007 110.461 295.694 96 256 96c-7.966 0-15.794.591-23.448 1.715L310.852 224l49.121-89.605zM99.204 224A160.65 160.65 0 0 0 96 256c0 36.639 12.324 70.394 33.041 97.366L201 224H99.204zM311.959 405.932c40.631-15.171 73.433-46.382 90.715-85.932H256l55.959 85.932zM152.046 377.621C180.009 401.545 216.314 416 256 416c7.969 0 15.799-.592 23.456-1.716L201.164 288l-49.118 89.621z|0 0 512 512",tune:"M32 384h272v32H32zM400 384h80v32h-80zM384 447.5c0 17.949-14.327 32.5-32 32.5-17.673 0-32-14.551-32-32.5v-95c0-17.949 14.327-32.5 32-32.5 17.673 0 32 14.551 32 32.5v95zM32 240h80v32H32zM208 240h272v32H208zM192 303.5c0 17.949-14.327 32.5-32 32.5-17.673 0-32-14.551-32-32.5v-95c0-17.949 14.327-32.5 32-32.5 17.673 0 32 14.551 32 32.5v95zM32 96h272v32H32zM400 96h80v32h-80zM384 159.5c0 17.949-14.327 32.5-32 32.5-17.673 0-32-14.551-32-32.5v-95c0-17.949 14.327-32.5 32-32.5 17.673 0 32 14.551 32 32.5v95z|0 0 512 512",palette:"M96 176h80V96H96v80zm120 240h80v-80h-80v80zm-120 0h80v-80H96v80zm0-120h80v-80H96v80zm120 0h80v-80h-80v80zM336 96v80h80V96h-80zm-120 80h80V96h-80v80zm120 120h80v-80h-80v80zm0 120h80v-80h-80v80z|0 0 512 512"},pullToRefresh:{icon:"M256 388c-72.597 0-132-59.405-132-132 0-72.601 59.403-132 132-132 36.3 0 69.299 15.4 92.406 39.601L278 234h154V80l-51.698 51.702C348.406 99.798 304.406 80 256 80c-96.797 0-176 79.203-176 176s78.094 176 176 176c81.045 0 148.287-54.134 169.401-128H378.85c-18.745 49.561-67.138 84-122.85 84z|0 0 512 512"},carousel:{left:H,right:M,up:L,down:V,navigationIcon:"M405.333 64H106.667C83.198 64 64 83.198 64 106.667v298.666C64 428.802 83.198 448 106.667 448h298.666C428.802 448 448 428.802 448 405.333V106.667C448 83.198 428.802 64 405.333 64z|0 0 512 512"},chip:{remove:z,selected:v},datetime:{arrowLeft:H,arrowRight:M,now:"M255.8 48C141 48 48 141.2 48 256s93 208 207.8 208c115 0 208.2-93.2 208.2-208S370.8 48 255.8 48zm.2 374.4c-91.9 0-166.4-74.5-166.4-166.4S164.1 89.6 256 89.6 422.4 164.1 422.4 256 347.9 422.4 256 422.4zM266.4 152h-31.2v124.8l109.2 65.5 15.6-25.6-93.6-55.5V152z|0 0 512 512",today:"M368.005 272h-96v96h96v-96zm-32-208v32h-160V64h-48v32h-24.01c-22.002 0-40 17.998-40 40v272c0 22.002 17.998 40 40 40h304.01c22.002 0 40-17.998 40-40V136c0-22.002-17.998-40-40-40h-24V64h-48zm72 344h-304.01V196h304.01v212z|0 0 512 512"},editor:{hyperlink:"M74.6 256c0-38.3 31.1-69.4 69.4-69.4h88V144h-88c-61.8 0-112 50.2-112 112s50.2 112 112 112h88v-42.6h-88c-38.3 0-69.4-31.1-69.4-69.4zm85.4 22h192v-44H160v44zm208-134h-88v42.6h88c38.3 0 69.4 31.1 69.4 69.4s-31.1 69.4-69.4 69.4h-88V368h88c61.8 0 112-50.2 112-112s-50.2-112-112-112z|0 0 512 512",toggleFullscreen:"M396.795 396.8H320V448h128V320h-51.205zM396.8 115.205V192H448V64H320v51.205zM115.205 115.2H192V64H64v128h51.205zM115.2 396.795V320H64v128h128v-51.205z|0 0 512 512",quote:"M96.4 416h77.1l50.9-96.6V96h-160v223.4h77.1L96.4 416zm224 0h77.1l50-96.6V96H288.4v223.4h82l-50 96.6z|0 0 512 512",print:"M399.95 160h-287.9C76.824 160 48 188.803 48 224v138.667h79.899V448H384.1v-85.333H464V224c0-35.197-28.825-64-64.05-64zM352 416H160V288h192v128zm32.101-352H127.899v80H384.1V64z|0 0 512 512",undo:"M262.3 179.6c-57.9 0-110.3 21.6-150.7 56.8L32 160v192h197.5l-79.1-76.8c30.4-25.3 69-41.1 111.8-41.1 77.3 0 143.1 48.2 166 117.8l51.8-14.8c-30.4-91.4-116.2-157.5-217.7-157.5z|0 0 512 512",redo:"M32 337.2L83.8 352c22.9-69.7 88.7-117.8 166-117.8 42.8 0 81.5 15.7 111.8 41.1L282.5 352H480V160l-79.6 76.3c-40.4-35.2-92.8-56.8-150.7-56.8-101.5.1-187.3 66.2-217.7 157.7z|0 0 512 512",code:"M190.4 354.1L91.9 256l98.4-98.1-30-29.9L32 256l128.4 128 30-29.9zm131.2 0L420 256l-98.4-98.1 30-29.9L480 256 351.6 384l-30-29.9z|0 0 512 512",viewSource:"M332 142.7c-1.2-1.1-2.7-1.7-4.1-1.7s-3 .6-4.1 1.7L310 155.9c-1.2 1.1-1.9 2.7-1.9 4.3 0 1.6.7 3.2 1.9 4.3l95.8 91.5-95.8 91.5c-1.2 1.1-1.9 2.7-1.9 4.3 0 1.6.7 3.2 1.9 4.3l13.8 13.2c1.2 1.1 2.6 1.7 4.1 1.7 1.5 0 3-.6 4.1-1.7l114.2-109c1.2-1.1 1.9-2.7 1.9-4.3 0-1.6-.7-3.2-1.9-4.3L332 142.7zM204 160.2c0-1.6-.7-3.2-1.9-4.3l-13.8-13.2c-1.2-1.1-2.7-1.7-4.1-1.7s-3 .6-4.1 1.7l-114.2 109c-1.2 1.1-1.9 2.7-1.9 4.3 0 1.6.7 3.2 1.9 4.3l114.2 109c1.2 1.1 2.7 1.7 4.1 1.7 1.5 0 3-.6 4.1-1.7l13.8-13.2c1.2-1.1 1.9-2.7 1.9-4.3 0-1.6-.7-3.2-1.9-4.3L106.3 256l95.8-91.5c1.2-1.1 1.9-2.7 1.9-4.3z|0 0 512 512",bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",left:C,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:n,align:C,hr:"M19,13H5V11H19V13Z",heading:n,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",size:n,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z"},expansionItem:{icon:e,denseIcon:e},fab:{icon:"M416 277.333H277.333V416h-42.666V277.333H96v-42.666h138.667V96h42.666v138.667H416v42.666z|0 0 512 512",activeIcon:l},field:{clear:z,error:c},pagination:{first:"M175 100v137.8L403.9 98.1c5.3-3.1 12.1.7 12.1 6.9v302c0 6.2-6.7 10-12.1 6.9L175 274.2V412c0 2.2-1.8 4-4 4h-71c-2.2 0-4-1.8-4-4V100c0-2.2 1.8-4 4-4h71c2.2 0 4 1.8 4 4z|0 0 512 512",prev:H,next:M,last:"M337 100v137.8L108.1 98.1C102.7 95 96 98.8 96 105v302c0 6.2 6.7 10 12.1 6.9L337 274.2V412c0 2.2 1.8 4 4 4h71c2.2 0 4-1.8 4-4V100c0-2.2-1.8-4-4-4h-71c-2.2 0-4 1.8-4 4z|0 0 512 512"},rating:{icon:"M256 372.686L380.83 448l-33.021-142.066L458 210.409l-145.267-12.475L256 64l-56.743 133.934L54 210.409l110.192 95.525L131.161 448z|0 0 512 512"},stepper:{done:v,active:"M64 368v80h80l235.727-235.729-79.999-79.998L64 368zm377.602-217.602c8.531-8.531 8.531-21.334 0-29.865l-50.135-50.135c-8.531-8.531-21.334-8.531-29.865 0l-39.468 39.469 79.999 79.998 39.469-39.467z|0 0 512 512",error:i},tabs:{left:H,right:M,up:L,down:V},table:{arrowUp:h,warning:i,firstPage:"M70.5 265.4l59.6-59.4c2.6-2.6 6.1-4.1 9.9-4.1 3.7 0 7.3 1.4 9.9 4.1 2.6 2.6 4.1 6.1 4.1 9.9s-1.5 7.3-4.1 9.9l-.1.1-41.1 40.1H370c13.2 0 25.8-5.2 35.3-14.7 9.5-9.4 14.7-21.9 14.7-35.3v-48c0-7.7 6.3-14 14-14s14 6.3 14 14v48c0 20.8-8.1 40.3-22.9 55.1-14.8 14.8-34.3 22.9-55.1 22.9H108.3l39.6 40.2c2.6 2.6 4.1 6.1 4.1 9.9 0 3.7-1.4 7.3-4.1 9.9l-.1.1c-2.7 2.5-6.2 3.9-9.8 3.9-3.9 0-7.3-1.4-9.9-4.1l-57.6-57.4c-4.2-4.2-6.5-9.8-6.5-15.7 0-5.8 2.3-11.3 6.5-15.4z|0 0 512 512",prevPage:H,nextPage:M,lastPage:"M441.5 265.4L381.9 206c-2.6-2.6-6.1-4.1-9.9-4.1-3.7 0-7.3 1.4-9.9 4.1-2.6 2.6-4.1 6.1-4.1 9.9s1.5 7.3 4.1 9.9l.1.1 41.1 40.1H142c-13.2 0-25.8-5.2-35.3-14.7-9.5-9.5-14.7-22-14.7-35.3v-48c0-7.7-6.3-14-14-14s-14 6.3-14 14v48c0 20.8 8.1 40.3 22.9 55.1 14.8 14.8 34.3 22.9 55.1 22.9h261.7L364 334.2c-2.6 2.6-4.1 6.1-4.1 9.9 0 3.7 1.4 7.3 4.1 9.9l.1.1c2.7 2.5 6.2 3.9 9.8 3.9 3.9 0 7.3-1.4 9.9-4.1l57.6-57.4c4.2-4.2 6.5-9.8 6.5-15.7.1-5.8-2.2-11.3-6.4-15.4z|0 0 512 512"},tree:{icon:"M96 52v408l320-204L96 52z|0 0 512 512"},uploader:{done:v,clear:l,add:"M256 48C141.125 48 48 141.125 48 256s93.125 208 208 208 208-93.125 208-208S370.875 48 256 48zm107 229h-86v86h-42v-86h-86v-42h86v-86h42v86h86v42z|0 0 512 512",upload:"M403.002 217.001C388.998 148.002 328.998 96 256 96c-57.998 0-107.998 32.998-132.998 81.001C63.002 183.002 16 233.998 16 296c0 65.996 53.999 120 120 120h260c55 0 100-45 100-100 0-52.998-40.996-96.001-92.998-98.999zM288 276v76h-64v-76h-68l100-100 100 100h-68z|0 0 512 512",removeQueue:"M128 405.429C128 428.846 147.198 448 170.667 448h170.667C364.802 448 384 428.846 384 405.429V160H128v245.429zM416 96h-80l-26.785-32H202.786L176 96H96v32h320V96z|0 0 512 512",removeUploaded:"M387.581 139.712L356.755 109 216.913 248.319l30.831 30.719 139.837-139.326zM481.172 109L247.744 340.469l-91.39-91.051-30.827 30.715L247.744 403 512 139.712 481.172 109zM0 280.133L123.321 403l30.829-30.713L31.934 249.418 0 280.133z|0 0 512 512"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-ionicons-v5.umd.min.js b/dist/icon-set/svg-ionicons-v5.umd.min.js new file mode 100644 index 00000000000..e90fc5a1035 --- /dev/null +++ b/dist/icon-set/svg-ionicons-v5.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.svgIoniconsV5=e())}(this,function(){"use strict";var H="M256 80c-8.66 0-16.58 7.36-16 16l8 216a8 8 0 008 8h0a8 8 0 008-8l8-216c.58-8.64-7.34-16-16-16z@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;&&M256 416 m-16, 0 a16,16 0 1,0 32,0 a16,16 0 1,0 -32,0@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512",e="M244 400L100 256l144-144M120 256h292@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",o="M268 112l144 144-144 144M392 256H100@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",V="M112 244l144-144 144 144M256 120v292@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",a="M98 190.06l139.78 163.12a24 24 0 0036.44 0L414 190.06c13.34-15.57 2.28-39.62-18.22-39.62h-279.6c-20.5 0-31.56 24.05-18.18 39.62z|0 0 512 512",r="M416 128L192 384l-96-96@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512",n="M256 48C141.13 48 48 141.13 48 256s93.13 208 208 208 208-93.13 208-208S370.87 48 256 48zm35.31 292.69a16 16 0 11-22.62 22.62l-96-96a16 16 0 010-22.62l96-96a16 16 0 0122.62 22.62L206.63 256z|0 0 512 512",l="M328 112L184 256l144 144@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",t="M112 184l144 144 144-144@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",M="M48 256c0 114.87 93.13 208 208 208s208-93.13 208-208S370.87 48 256 48 48 141.13 48 256zm257.37 0l-84.68-84.69a16 16 0 0122.62-22.62l96 96a16 16 0 010 22.62l-96 96a16 16 0 01-22.62-22.62z|0 0 512 512",i="M184 112l144 144-144 144@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",s="M112 328l144-144 144 144@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",L="M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm75.31 260.69a16 16 0 11-22.62 22.62L256 278.63l-52.69 52.68a16 16 0 01-22.62-22.62L233.37 256l-52.68-52.69a16 16 0 0122.62-22.62L256 233.37l52.69-52.68a16 16 0 0122.62 22.62L278.63 256z|0 0 512 512",d="M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z|0 0 512 512",c="M160 389a20.91 20.91 0 01-13.82-5.2l-128-112a21 21 0 010-31.6l128-112a21 21 0 0127.66 31.61L63.89 256l109.94 96.19A21 21 0 01160 389zM352 389a21 21 0 01-13.84-36.81L448.11 256l-109.94-96.19a21 21 0 0127.66-31.61l128 112a21 21 0 010 31.6l-128 112A20.89 20.89 0 01352 389zM208 437a21 21 0 01-20.12-27l96-320a21 21 0 1140.23 12l-96 320A21 21 0 01208 437z|0 0 512 512",A="M48 256c0 114.69 93.31 208 208 208s208-93.31 208-208S370.69 48 256 48 48 141.31 48 256zm128-64a16 16 0 0132 0v53l111.68-67.46a10.78 10.78 0 0116.32 9.33v138.26a10.78 10.78 0 01-16.32 9.31L208 267v53a16 16 0 01-32 0z|0 0 512 512",h="M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm80 272a16 16 0 01-32 0v-53l-111.68 67.44a10.78 10.78 0 01-16.32-9.31V186.87a10.78 10.78 0 0116.32-9.31L304 245v-53a16 16 0 0132 0z|0 0 512 512",u="M449.07 399.08L278.64 82.58c-12.08-22.44-44.26-22.44-56.35 0L51.87 399.08A32 32 0 0080 446.25h340.89a32 32 0 0028.18-47.17zm-198.6-1.83a20 20 0 1120-20 20 20 0 01-20 20zm21.72-201.15l-5.74 122a16 16 0 01-32 0l-5.74-121.95a21.73 21.73 0 0121.5-22.69h.21a21.74 21.74 0 0121.73 22.7z|0 0 512 512",z="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",k="M2 4V7H7V19H10V7H15V4H2M21 9H12V12H15V19H18V12H21V9Z";return{name:"svg-ionicons-v5",type:{positive:r,negative:H,info:"M248 64C146.39 64 64 146.39 64 248s82.39 184 184 184 184-82.39 184-184S349.61 64 248 64z@@fill:none;stroke:currentColor;stroke-miterlimit:10;stroke-width:32;&&M220 220h32v116@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;&&M208 340h88@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32;&&M248 130a26 26 0 1026 26 26 26 0 00-26-26z|0 0 512 512",warning:H},arrow:{up:V,right:o,down:"M112 268l144 144 144-144M256 392V100@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",left:e,dropdown:a},chevron:{left:e,right:o},colorPicker:{spectrum:"M250.54 129.17l-67.8-67.8A209.65 209.65 0 0086.32 136h161.4a4 4 0 002.82-6.83zM167.72 168H67.63a207.34 207.34 0 00-16.15 125.9l119.06-119.07a4 4 0 00-2.82-6.83zM344 167.72V67.56a207.82 207.82 0 00-125.89-16.08l119.06 119.06a4 4 0 006.83-2.82zM460.52 218.1L341.46 337.17a4 4 0 002.82 6.83h100.09a207.34 207.34 0 0016.15-125.9zM382.83 250.54l67.83-67.82A209.08 209.08 0 00376 86.2v161.52a4 4 0 006.83 2.82zM221.68 341.77a8 8 0 005.54 2.23h59.66a8 8 0 005.7-2.39l49.18-50a8 8 0 002.3-5.62l-.06-60.81a8 8 0 00-2.38-5.69l-50-49.25a8 8 0 00-5.63-2.3l-60.84.06a8 8 0 00-5.69 2.38l-49.25 50a8 8 0 00-2.3 5.63l.06 60.78a8 8 0 002.45 5.76zM261.46 382.83l67.8 67.8A209.65 209.65 0 00425.68 376h-161.4a4 4 0 00-2.82 6.83zM168 344.28v100.16a207.82 207.82 0 00125.89 16.08L174.83 341.46a4 4 0 00-6.83 2.82zM129.17 261.46l-67.83 67.83A209.1 209.1 0 00136 425.8V264.28a4 4 0 00-6.83-2.82z|0 0 512 512",tune:"M64 144h226.75a48 48 0 0090.5 0H448a16 16 0 000-32h-66.75a48 48 0 00-90.5 0H64a16 16 0 000 32zM448 368h-66.75a48 48 0 00-90.5 0H64a16 16 0 000 32h226.75a48 48 0 0090.5 0H448a16 16 0 000-32zM448 240H221.25a48 48 0 00-90.5 0H64a16 16 0 000 32h66.75a48 48 0 0090.5 0H448a16 16 0 000-32z|0 0 512 512",palette:"M104 160a56 56 0 1156-56 56.06 56.06 0 01-56 56zM256 160a56 56 0 1156-56 56.06 56.06 0 01-56 56zM408 160a56 56 0 1156-56 56.06 56.06 0 01-56 56zM104 312a56 56 0 1156-56 56.06 56.06 0 01-56 56zM256 312a56 56 0 1156-56 56.06 56.06 0 01-56 56zM408 312a56 56 0 1156-56 56.06 56.06 0 01-56 56zM104 464a56 56 0 1156-56 56.06 56.06 0 01-56 56zM256 464a56 56 0 1156-56 56.06 56.06 0 01-56 56zM408 464a56 56 0 1156-56 56.06 56.06 0 01-56 56z|0 0 512 512"},pullToRefresh:{icon:"M320 146s24.36-12-64-12a160 160 0 10160 160@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32;&&M256 58l80 80-80 80@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512"},carousel:{left:l,right:i,up:s,down:t,navigationIcon:"M416 464H96a48.05 48.05 0 01-48-48V96a48.05 48.05 0 0148-48h320a48.05 48.05 0 0148 48v320a48.05 48.05 0 01-48 48z|0 0 512 512"},chip:{remove:L,selected:r},datetime:{arrowLeft:l,arrowRight:i,now:"M256 48C141.13 48 48 141.13 48 256s93.13 208 208 208 208-93.13 208-208S370.87 48 256 48zm96 240h-96a16 16 0 01-16-16V128a16 16 0 0132 0v128h80a16 16 0 010 32z|0 0 512 512",today:"M480 128a64 64 0 00-64-64h-16V48.45c0-8.61-6.62-16-15.23-16.43A16 16 0 00368 48v16H144V48.45c0-8.61-6.62-16-15.23-16.43A16 16 0 00112 48v16H96a64 64 0 00-64 64v12a4 4 0 004 4h440a4 4 0 004-4zM32 416a64 64 0 0064 64h320a64 64 0 0064-64V179a3 3 0 00-3-3H35a3 3 0 00-3 3zm344-208a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24zm-80-80a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24zm-80-80a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24zm-80-80a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24z|0 0 512 512"},editor:{hyperlink:"M200.66 352H144a96 96 0 010-192h55.41M312.59 160H368a96 96 0 010 192h-56.66M169.07 256h175.86@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",toggleFullscreen:"M432 320v112H320M421.8 421.77L304 304M80 192V80h112M90.2 90.23L208 208M320 80h112v112M421.77 90.2L304 208M192 432H80V320M90.23 421.8L208 304@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512",quote:"M408 48H104a72.08 72.08 0 00-72 72v192a72.08 72.08 0 0072 72h24v64a16 16 0 0026.25 12.29L245.74 384H408a72.08 72.08 0 0072-72V120a72.08 72.08 0 00-72-72zM160 248a32 32 0 1132-32 32 32 0 01-32 32zm96 0a32 32 0 1132-32 32 32 0 01-32 32zm96 0a32 32 0 1132-32 32 32 0 01-32 32z|0 0 512 512",print:"M408 112H106a58 58 0 00-58 58v158a56 56 0 0056 56h8v39.68A40.32 40.32 0 00152.32 464h207.36A40.32 40.32 0 00400 423.68V384h8a56 56 0 0056-56V168a56 56 0 00-56-56zm-40 311.68a8.35 8.35 0 01-8.32 8.32H152.32a8.35 8.35 0 01-8.32-8.32V264.32a8.35 8.35 0 018.32-8.32h207.36a8.35 8.35 0 018.32 8.32zm26-215.76a24 24 0 1122-22 24 24 0 01-22 22zM344 48H168a56.09 56.09 0 00-55.42 48h286.84A56.09 56.09 0 00344 48z|0 0 512 512",undo:"M448 440a16 16 0 01-12.61-6.15c-22.86-29.27-44.07-51.86-73.32-67C335 352.88 301 345.59 256 344.23V424a16 16 0 01-27 11.57l-176-168a16 16 0 010-23.14l176-168A16 16 0 01256 88v80.36c74.14 3.41 129.38 30.91 164.35 81.87C449.32 292.44 464 350.9 464 424a16 16 0 01-16 16z|0 0 512 512",redo:"M58.79 439.13A16 16 0 0148 424c0-73.1 14.68-131.56 43.65-173.77 35-51 90.21-78.46 164.35-81.87V88a16 16 0 0127.05-11.57l176 168a16 16 0 010 23.14l-176 168A16 16 0 01256 424v-79.77c-45 1.36-79 8.65-106.07 22.64-29.25 15.12-50.46 37.71-73.32 67a16 16 0 01-17.82 5.28z|0 0 512 512",code:c,viewSource:c,bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",left:z,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:k,align:z,hr:"M19,13H5V11H19V13Z",heading:k,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",size:k,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z"},expansionItem:{icon:a,denseIcon:a},fab:{icon:"M256 112v288M400 256H112@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512",activeIcon:d},field:{clear:L,error:H},pagination:{first:A,prev:n,next:M,last:h},rating:{icon:"M394 480a16 16 0 01-9.39-3L256 383.76 127.39 477a16 16 0 01-24.55-18.08L153 310.35 23 221.2a16 16 0 019-29.2h160.38l48.4-148.95a16 16 0 0130.44 0l48.4 149H480a16 16 0 019.05 29.2L359 310.35l50.13 148.53A16 16 0 01394 480z|0 0 512 512"},stepper:{done:r,active:"M459.94 53.25a16.06 16.06 0 00-23.22-.56L424.35 65a8 8 0 000 11.31l11.34 11.32a8 8 0 0011.34 0l12.06-12c6.1-6.09 6.67-16.01.85-22.38zM399.34 90L218.82 270.2a9 9 0 00-2.31 3.93L208.16 299a3.91 3.91 0 004.86 4.86l24.85-8.35a9 9 0 003.93-2.31L422 112.66a9 9 0 000-12.66l-9.95-10a9 9 0 00-12.71 0zM386.34 193.66L264.45 315.79A41.08 41.08 0 01247.58 326l-25.9 8.67a35.92 35.92 0 01-44.33-44.33l8.67-25.9a41.08 41.08 0 0110.19-16.87l122.13-121.91a8 8 0 00-5.65-13.66H104a56 56 0 00-56 56v240a56 56 0 0056 56h240a56 56 0 0056-56V199.31a8 8 0 00-13.66-5.65z|0 0 512 512",error:u},tabs:{left:l,right:i,up:s,down:t},table:{arrowUp:V,warning:u,firstPage:A,prevPage:n,nextPage:M,lastPage:h},tree:{icon:"M133 440a35.37 35.37 0 01-17.5-4.67c-12-6.8-19.46-20-19.46-34.33V111c0-14.37 7.46-27.53 19.46-34.33a35.13 35.13 0 0135.77.45l247.85 148.36a36 36 0 010 61l-247.89 148.4A35.5 35.5 0 01133 440z|0 0 512 512"},uploader:{done:r,clear:d,add:"M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm80 224h-64v64a16 16 0 01-32 0v-64h-64a16 16 0 010-32h64v-64a16 16 0 0132 0v64h64a16 16 0 010 32z|0 0 512 512",upload:"M473.66 210c-14-10.38-31.2-18-49.36-22.11a16.11 16.11 0 01-12.19-12.22c-7.8-34.75-24.59-64.55-49.27-87.13C334.15 62.25 296.21 47.79 256 47.79c-35.35 0-68 11.08-94.37 32.05a150.07 150.07 0 00-42.06 53 16 16 0 01-11.31 8.87c-26.75 5.4-50.9 16.87-69.34 33.12C13.46 197.33 0 227.24 0 261.39c0 34.52 14.49 66 40.79 88.76 25.12 21.69 58.94 33.64 95.21 33.64h104V230.42l-36.69 36.69a16 16 0 01-23.16-.56c-5.8-6.37-5.24-16.3.85-22.39l63.69-63.68a16 16 0 0122.62 0L331 244.14c6.28 6.29 6.64 16.6.39 22.91a16 16 0 01-22.68.06L272 230.42v153.37h124c31.34 0 59.91-8.8 80.45-24.77 23.26-18.1 35.55-44 35.55-74.83 0-29.94-13.26-55.61-38.34-74.19zM240 448.21a16 16 0 1032 0v-64.42h-32z|0 0 512 512",removeQueue:"M296 64h-80a7.91 7.91 0 00-8 8v24h96V72a7.91 7.91 0 00-8-8z@@fill:none;&&M432 96h-96V72a40 40 0 00-40-40h-80a40 40 0 00-40 40v24H80a16 16 0 000 32h17l19 304.92c1.42 26.85 22 47.08 48 47.08h184c26.13 0 46.3-19.78 48-47l19-305h17a16 16 0 000-32zM192.57 416H192a16 16 0 01-16-15.43l-8-224a16 16 0 1132-1.14l8 224A16 16 0 01192.57 416zM272 400a16 16 0 01-32 0V176a16 16 0 0132 0zm32-304h-96V72a7.91 7.91 0 018-8h80a7.91 7.91 0 018 8zm32 304.57A16 16 0 01320 416h-.58A16 16 0 01304 399.43l8-224a16 16 0 1132 1.14z|0 0 512 512",removeUploaded:"M464 128L240 384l-96-96M144 384l-96-96M368 128L232 284@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-ionicons-v6.umd.min.js b/dist/icon-set/svg-ionicons-v6.umd.min.js new file mode 100644 index 00000000000..6f8182301b5 --- /dev/null +++ b/dist/icon-set/svg-ionicons-v6.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.svgIoniconsV6=e())}(this,function(){"use strict";var H="M256 80c-8.66 0-16.58 7.36-16 16l8 216a8 8 0 008 8h0a8 8 0 008-8l8-216c.58-8.64-7.34-16-16-16z@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;&&M256 416 m-16, 0 a16,16 0 1,0 32,0 a16,16 0 1,0 -32,0@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512",e="M244 400L100 256l144-144M120 256h292@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",o="M268 112l144 144-144 144M392 256H100@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",V="M112 244l144-144 144 144M256 120v292@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",a="M98 190.06l139.78 163.12a24 24 0 0036.44 0L414 190.06c13.34-15.57 2.28-39.62-18.22-39.62h-279.6c-20.5 0-31.56 24.05-18.18 39.62z|0 0 512 512",r="M416 128L192 384l-96-96@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512",n="M328 112L184 256l144 144@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",l="M256 48C141.13 48 48 141.13 48 256s93.13 208 208 208 208-93.13 208-208S370.87 48 256 48zm35.31 292.69a16 16 0 11-22.62 22.62l-96-96a16 16 0 010-22.62l96-96a16 16 0 0122.62 22.62L206.63 256z|0 0 512 512",t="M112 184l144 144 144-144@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",M="M184 112l144 144-144 144@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",i="M48 256c0 114.87 93.13 208 208 208s208-93.13 208-208S370.87 48 256 48 48 141.13 48 256zm257.37 0l-84.68-84.69a16 16 0 0122.62-22.62l96 96a16 16 0 010 22.62l-96 96a16 16 0 01-22.62-22.62z|0 0 512 512",s="M112 328l144-144 144 144@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",L="M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z|0 0 512 512",d="M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm75.31 260.69a16 16 0 11-22.62 22.62L256 278.63l-52.69 52.68a16 16 0 01-22.62-22.62L233.37 256l-52.68-52.69a16 16 0 0122.62-22.62L256 233.37l52.69-52.68a16 16 0 0122.62 22.62L278.63 256z|0 0 512 512",c="M160 389a20.91 20.91 0 01-13.82-5.2l-128-112a21 21 0 010-31.6l128-112a21 21 0 0127.66 31.61L63.89 256l109.94 96.19A21 21 0 01160 389zM352 389a21 21 0 01-13.84-36.81L448.11 256l-109.94-96.19a21 21 0 0127.66-31.61l128 112a21 21 0 010 31.6l-128 112A20.89 20.89 0 01352 389zM208 437a21 21 0 01-20.12-27l96-320a21 21 0 1140.23 12l-96 320A21 21 0 01208 437z|0 0 512 512",A="M48 256c0 114.69 93.31 208 208 208s208-93.31 208-208S370.69 48 256 48 48 141.31 48 256zm128-64a16 16 0 0132 0v53l111.68-67.46a10.78 10.78 0 0116.32 9.33v138.26a10.78 10.78 0 01-16.32 9.31L208 267v53a16 16 0 01-32 0z|0 0 512 512",h="M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm80 272a16 16 0 01-32 0v-53l-111.68 67.44a10.78 10.78 0 01-16.32-9.31V186.87a10.78 10.78 0 0116.32-9.31L304 245v-53a16 16 0 0132 0z|0 0 512 512",u="M449.07 399.08L278.64 82.58c-12.08-22.44-44.26-22.44-56.35 0L51.87 399.08A32 32 0 0080 446.25h340.89a32 32 0 0028.18-47.17zm-198.6-1.83a20 20 0 1120-20 20 20 0 01-20 20zm21.72-201.15l-5.74 122a16 16 0 01-32 0l-5.74-121.95a21.73 21.73 0 0121.5-22.69h.21a21.74 21.74 0 0121.73 22.7z|0 0 512 512",z="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",k="M2 4V7H7V19H10V7H15V4H2M21 9H12V12H15V19H18V12H21V9Z";return{name:"svg-ionicons-v6",type:{positive:r,negative:H,info:"M248 64C146.39 64 64 146.39 64 248s82.39 184 184 184 184-82.39 184-184S349.61 64 248 64z@@fill:none;stroke:currentColor;stroke-miterlimit:10;stroke-width:32;&&M220 220h32v116@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;&&M208 340h88@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32;&&M248 130a26 26 0 1026 26 26 26 0 00-26-26z|0 0 512 512",warning:H},arrow:{up:V,right:o,down:"M112 268l144 144 144-144M256 392V100@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",left:e,dropdown:a},chevron:{left:e,right:o},colorPicker:{spectrum:"M250.54 129.17l-67.8-67.8A209.65 209.65 0 0086.32 136h161.4a4 4 0 002.82-6.83zM167.72 168H67.63a207.34 207.34 0 00-16.15 125.9l119.06-119.07a4 4 0 00-2.82-6.83zM344 167.72V67.56a207.82 207.82 0 00-125.89-16.08l119.06 119.06a4 4 0 006.83-2.82zM460.52 218.1L341.46 337.17a4 4 0 002.82 6.83h100.09a207.34 207.34 0 0016.15-125.9zM382.83 250.54l67.83-67.82A209.08 209.08 0 00376 86.2v161.52a4 4 0 006.83 2.82zM221.68 341.77a8 8 0 005.54 2.23h59.66a8 8 0 005.7-2.39l49.18-50a8 8 0 002.3-5.62l-.06-60.81a8 8 0 00-2.38-5.69l-50-49.25a8 8 0 00-5.63-2.3l-60.84.06a8 8 0 00-5.69 2.38l-49.25 50a8 8 0 00-2.3 5.63l.06 60.78a8 8 0 002.45 5.76zM261.46 382.83l67.8 67.8A209.65 209.65 0 00425.68 376h-161.4a4 4 0 00-2.82 6.83zM168 344.28v100.16a207.82 207.82 0 00125.89 16.08L174.83 341.46a4 4 0 00-6.83 2.82zM129.17 261.46l-67.83 67.83A209.1 209.1 0 00136 425.8V264.28a4 4 0 00-6.83-2.82z|0 0 512 512",tune:"M64 144h226.75a48 48 0 0090.5 0H448a16 16 0 000-32h-66.75a48 48 0 00-90.5 0H64a16 16 0 000 32zM448 368h-66.75a48 48 0 00-90.5 0H64a16 16 0 000 32h226.75a48 48 0 0090.5 0H448a16 16 0 000-32zM448 240H221.25a48 48 0 00-90.5 0H64a16 16 0 000 32h66.75a48 48 0 0090.5 0H448a16 16 0 000-32z|0 0 512 512",palette:"M104 160a56 56 0 1156-56 56.06 56.06 0 01-56 56zM256 160a56 56 0 1156-56 56.06 56.06 0 01-56 56zM408 160a56 56 0 1156-56 56.06 56.06 0 01-56 56zM104 312a56 56 0 1156-56 56.06 56.06 0 01-56 56zM256 312a56 56 0 1156-56 56.06 56.06 0 01-56 56zM408 312a56 56 0 1156-56 56.06 56.06 0 01-56 56zM104 464a56 56 0 1156-56 56.06 56.06 0 01-56 56zM256 464a56 56 0 1156-56 56.06 56.06 0 01-56 56zM408 464a56 56 0 1156-56 56.06 56.06 0 01-56 56z|0 0 512 512"},pullToRefresh:{icon:"M320 146s24.36-12-64-12a160 160 0 10160 160@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-miterlimit:10;stroke-width:32;&&M256 58l80 80-80 80@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512"},carousel:{left:n,right:M,up:s,down:t,navigationIcon:"M416 464H96a48.05 48.05 0 01-48-48V96a48.05 48.05 0 0148-48h320a48.05 48.05 0 0148 48v320a48.05 48.05 0 01-48 48z|0 0 512 512"},chip:{remove:d,selected:r},datetime:{arrowLeft:n,arrowRight:M,now:"M256 48C141.13 48 48 141.13 48 256s93.13 208 208 208 208-93.13 208-208S370.87 48 256 48zm96 240h-96a16 16 0 01-16-16V128a16 16 0 0132 0v128h80a16 16 0 010 32z|0 0 512 512",today:"M480 128a64 64 0 00-64-64h-16V48.45c0-8.61-6.62-16-15.23-16.43A16 16 0 00368 48v16H144V48.45c0-8.61-6.62-16-15.23-16.43A16 16 0 00112 48v16H96a64 64 0 00-64 64v12a4 4 0 004 4h440a4 4 0 004-4zM32 416a64 64 0 0064 64h320a64 64 0 0064-64V179a3 3 0 00-3-3H35a3 3 0 00-3 3zm344-208a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24zm-80-80a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24zm-80-80a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24zm-80-80a24 24 0 11-24 24 24 24 0 0124-24zm0 80a24 24 0 11-24 24 24 24 0 0124-24z|0 0 512 512"},editor:{hyperlink:"M200.66 352H144a96 96 0 010-192h55.41M312.59 160H368a96 96 0 010 192h-56.66M169.07 256h175.86@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:48;|0 0 512 512",toggleFullscreen:"M432 320v112H320M421.8 421.77L304 304M80 192V80h112M90.2 90.23L208 208M320 80h112v112M421.77 90.2L304 208M192 432H80V320M90.23 421.8L208 304@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512",quote:"M408 48H104a72.08 72.08 0 00-72 72v192a72.08 72.08 0 0072 72h24v64a16 16 0 0026.25 12.29L245.74 384H408a72.08 72.08 0 0072-72V120a72.08 72.08 0 00-72-72zM160 248a32 32 0 1132-32 32 32 0 01-32 32zm96 0a32 32 0 1132-32 32 32 0 01-32 32zm96 0a32 32 0 1132-32 32 32 0 01-32 32z|0 0 512 512",print:"M408 112H106a58 58 0 00-58 58v158a56 56 0 0056 56h8v39.68A40.32 40.32 0 00152.32 464h207.36A40.32 40.32 0 00400 423.68V384h8a56 56 0 0056-56V168a56 56 0 00-56-56zm-40 311.68a8.35 8.35 0 01-8.32 8.32H152.32a8.35 8.35 0 01-8.32-8.32V264.32a8.35 8.35 0 018.32-8.32h207.36a8.35 8.35 0 018.32 8.32zm26-215.76a24 24 0 1122-22 24 24 0 01-22 22zM344 48H168a56.09 56.09 0 00-55.42 48h286.84A56.09 56.09 0 00344 48z|0 0 512 512",undo:"M448 440a16 16 0 01-12.61-6.15c-22.86-29.27-44.07-51.86-73.32-67C335 352.88 301 345.59 256 344.23V424a16 16 0 01-27 11.57l-176-168a16 16 0 010-23.14l176-168A16 16 0 01256 88v80.36c74.14 3.41 129.38 30.91 164.35 81.87C449.32 292.44 464 350.9 464 424a16 16 0 01-16 16z|0 0 512 512",redo:"M58.79 439.13A16 16 0 0148 424c0-73.1 14.68-131.56 43.65-173.77 35-51 90.21-78.46 164.35-81.87V88a16 16 0 0127.05-11.57l176 168a16 16 0 010 23.14l-176 168A16 16 0 01256 424v-79.77c-45 1.36-79 8.65-106.07 22.64-29.25 15.12-50.46 37.71-73.32 67a16 16 0 01-17.82 5.28z|0 0 512 512",code:c,viewSource:c,bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",left:z,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:k,align:z,hr:"M19,13H5V11H19V13Z",heading:k,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",size:k,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z"},expansionItem:{icon:a,denseIcon:a},fab:{icon:"M256 112v288M400 256H112@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512",activeIcon:L},field:{clear:d,error:H},pagination:{first:A,prev:l,next:i,last:h},rating:{icon:"M394 480a16 16 0 01-9.39-3L256 383.76 127.39 477a16 16 0 01-24.55-18.08L153 310.35 23 221.2a16 16 0 019-29.2h160.38l48.4-148.95a16 16 0 0130.44 0l48.4 149H480a16 16 0 019.05 29.2L359 310.35l50.13 148.53A16 16 0 01394 480z|0 0 512 512"},stepper:{done:r,active:"M459.94 53.25a16.06 16.06 0 00-23.22-.56L424.35 65a8 8 0 000 11.31l11.34 11.32a8 8 0 0011.34 0l12.06-12c6.1-6.09 6.67-16.01.85-22.38zM399.34 90L218.82 270.2a9 9 0 00-2.31 3.93L208.16 299a3.91 3.91 0 004.86 4.86l24.85-8.35a9 9 0 003.93-2.31L422 112.66a9 9 0 000-12.66l-9.95-10a9 9 0 00-12.71 0zM386.34 193.66L264.45 315.79A41.08 41.08 0 01247.58 326l-25.9 8.67a35.92 35.92 0 01-44.33-44.33l8.67-25.9a41.08 41.08 0 0110.19-16.87l122.13-121.91a8 8 0 00-5.65-13.66H104a56 56 0 00-56 56v240a56 56 0 0056 56h240a56 56 0 0056-56V199.31a8 8 0 00-13.66-5.65z|0 0 512 512",error:u},tabs:{left:n,right:M,up:s,down:t},table:{arrowUp:V,warning:u,firstPage:A,prevPage:l,nextPage:i,lastPage:h},tree:{icon:"M133 440a35.37 35.37 0 01-17.5-4.67c-12-6.8-19.46-20-19.46-34.33V111c0-14.37 7.46-27.53 19.46-34.33a35.13 35.13 0 0135.77.45l247.85 148.36a36 36 0 010 61l-247.89 148.4A35.5 35.5 0 01133 440z|0 0 512 512"},uploader:{done:r,clear:L,add:"M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm80 224h-64v64a16 16 0 01-32 0v-64h-64a16 16 0 010-32h64v-64a16 16 0 0132 0v64h64a16 16 0 010 32z|0 0 512 512",upload:"M473.66 210c-14-10.38-31.2-18-49.36-22.11a16.11 16.11 0 01-12.19-12.22c-7.8-34.75-24.59-64.55-49.27-87.13C334.15 62.25 296.21 47.79 256 47.79c-35.35 0-68 11.08-94.37 32.05a150.07 150.07 0 00-42.06 53 16 16 0 01-11.31 8.87c-26.75 5.4-50.9 16.87-69.34 33.12C13.46 197.33 0 227.24 0 261.39c0 34.52 14.49 66 40.79 88.76 25.12 21.69 58.94 33.64 95.21 33.64h104V230.42l-36.69 36.69a16 16 0 01-23.16-.56c-5.8-6.37-5.24-16.3.85-22.39l63.69-63.68a16 16 0 0122.62 0L331 244.14c6.28 6.29 6.64 16.6.39 22.91a16 16 0 01-22.68.06L272 230.42v153.37h124c31.34 0 59.91-8.8 80.45-24.77 23.26-18.1 35.55-44 35.55-74.83 0-29.94-13.26-55.61-38.34-74.19zM240 448.21a16 16 0 1032 0v-64.42h-32z|0 0 512 512",removeQueue:"M296 64h-80a7.91 7.91 0 00-8 8v24h96V72a7.91 7.91 0 00-8-8z@@fill:none;&&M432 96h-96V72a40 40 0 00-40-40h-80a40 40 0 00-40 40v24H80a16 16 0 000 32h17l19 304.92c1.42 26.85 22 47.08 48 47.08h184c26.13 0 46.3-19.78 48-47l19-305h17a16 16 0 000-32zM192.57 416H192a16 16 0 01-16-15.43l-8-224a16 16 0 1132-1.14l8 224A16 16 0 01192.57 416zM272 400a16 16 0 01-32 0V176a16 16 0 0132 0zm32-304h-96V72a7.91 7.91 0 018-8h80a7.91 7.91 0 018 8zm32 304.57A16 16 0 01320 416h-.58A16 16 0 01304 399.43l8-224a16 16 0 1132 1.14z|0 0 512 512",removeUploaded:"M464 128L240 384l-96-96M144 384l-96-96M368 128L232 284@@fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:32;|0 0 512 512"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-line-awesome.umd.min.js b/dist/icon-set/svg-line-awesome.umd.min.js new file mode 100644 index 00000000000..f8550bb82a8 --- /dev/null +++ b/dist/icon-set/svg-line-awesome.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(L,C){"object"==typeof exports&&"undefined"!=typeof module?module.exports=C():"function"==typeof define&&define.amd?define(C):((L="undefined"!=typeof globalThis?globalThis:L||self).Quasar=L.Quasar||{},L.Quasar.iconSet=L.Quasar.iconSet||{},L.Quasar.iconSet.svgLineAwesome=C())}(this,function(){"use strict";var L="M 3 7 L 3 9 L 29 9 L 29 7 Z M 3 11 L 3 13 L 21 13 L 21 11 Z M 3 15 L 3 17 L 29 17 L 29 15 Z M 3 19 L 3 21 L 21 21 L 21 19 Z M 3 23 L 3 25 L 29 25 L 29 23 Z|0 0 32 32",C="M 16 4.09375 L 15.28125 4.78125 L 6.78125 13.28125 L 8.21875 14.71875 L 15 7.9375 L 15 28 L 17 28 L 17 7.9375 L 23.78125 14.71875 L 25.21875 13.28125 L 16.71875 4.78125 Z|0 0 32 32",M="M 3.59375 12 L 5.28125 13.71875 L 15.28125 23.71875 L 16 24.40625 L 16.71875 23.71875 L 26.71875 13.71875 L 28.40625 12 Z M 8.4375 14 L 23.5625 14 L 16 21.5625 Z|0 0 32 32",Z="M 28.28125 6.28125 L 11 23.5625 L 3.71875 16.28125 L 2.28125 17.71875 L 10.28125 25.71875 L 11 26.40625 L 11.71875 25.71875 L 29.71875 7.71875 Z|0 0 32 32",e="M 6.90625 6.59375 L 6.1875 7.28125 L 2.28125 11.1875 L 1.59375 11.90625 L 16 26.3125 L 30.40625 11.90625 L 29.71875 11.1875 L 25.8125 7.28125 L 25.09375 6.59375 L 16 15.6875 Z M 6.875 9.4375 L 15.28125 17.8125 L 16 18.5 L 16.71875 17.8125 L 25.125 9.4375 L 27.5625 11.875 L 16 23.46875 L 4.4375 11.875 Z|0 0 32 32",t="M 19.75 2.59375 L 19.03125 3.28125 L 7.03125 15.28125 L 6.34375 16 L 7.03125 16.71875 L 19.03125 28.71875 L 19.75 29.40625 L 20.46875 28.71875 L 24.0625 25.09375 L 24.75 24.40625 L 24.0625 23.6875 L 16.375 16 L 24.0625 8.3125 L 24.75 7.59375 L 24.0625 6.90625 L 20.46875 3.28125 Z M 19.75 5.4375 L 21.9375 7.625 L 14.25 15.28125 L 13.53125 16 L 14.25 16.71875 L 21.9375 24.375 L 19.75 26.5625 L 9.1875 16 Z|0 0 32 32",o="M 12.25 2.59375 L 11.53125 3.28125 L 7.9375 6.90625 L 7.25 7.59375 L 7.9375 8.3125 L 15.625 16 L 7.9375 23.6875 L 7.25 24.40625 L 7.9375 25.09375 L 11.53125 28.71875 L 12.25 29.40625 L 12.96875 28.71875 L 24.96875 16.71875 L 25.65625 16 L 24.96875 15.28125 L 12.96875 3.28125 Z M 12.25 5.4375 L 22.8125 16 L 12.25 26.5625 L 10.0625 24.375 L 17.75 16.71875 L 18.46875 16 L 17.75 15.28125 L 10.0625 7.625 Z|0 0 32 32",r="M 16 5.6875 L 1.59375 20.09375 L 2.28125 20.8125 L 6.1875 24.71875 L 6.90625 25.40625 L 16 16.3125 L 25.09375 25.40625 L 25.8125 24.71875 L 29.71875 20.8125 L 30.40625 20.09375 Z M 16 8.53125 L 27.5625 20.125 L 25.125 22.5625 L 16.71875 14.1875 L 16 13.5 L 15.28125 14.1875 L 6.875 22.5625 L 4.4375 20.125 Z|0 0 32 32",n="M 18 5 L 12 27 L 14 27 L 20 5 Z M 7.9375 6.40625 L 1.1875 15.40625 L 0.75 16 L 1.1875 16.59375 L 7.9375 25.59375 L 9.5625 24.40625 L 3.25 16 L 9.5625 7.59375 Z M 24.0625 6.40625 L 22.4375 7.59375 L 28.75 16 L 22.4375 24.40625 L 24.0625 25.59375 L 30.8125 16.59375 L 31.25 16 L 30.8125 15.40625 Z|0 0 32 32",i="M 16 3.21875 L 15.125 4.71875 L 3.125 25.5 L 2.28125 27 L 29.71875 27 L 28.875 25.5 L 16.875 4.71875 Z M 16 7.21875 L 26.25 25 L 5.75 25 Z M 15 14 L 15 20 L 17 20 L 17 14 Z M 15 21 L 15 23 L 17 23 L 17 21 Z|0 0 32 32",a="M 17 5 L 15.40625 6.1875 L 3.40625 15.1875 L 2.34375 16 L 3.40625 16.8125 L 15.40625 25.8125 L 17 27 L 17 19.625 L 25.40625 25.8125 L 27 26.96875 L 27 5.03125 L 25.40625 6.1875 L 17 12.375 Z M 25 8.96875 L 25 23.03125 L 16.59375 16.84375 L 15.46875 16 L 16.59375 15.15625 Z M 15 9 L 15 23 L 5.6875 16 Z|0 0 32 32",d="M 15 5 L 15 12.375 L 6.59375 6.1875 L 5 5.03125 L 5 26.96875 L 6.59375 25.8125 L 15 19.625 L 15 27 L 16.59375 25.8125 L 28.59375 16.8125 L 29.65625 16 L 28.59375 15.1875 L 16.59375 6.1875 Z M 7 8.96875 L 15.40625 15.15625 L 16.53125 16 L 15.40625 16.84375 L 7 23.03125 Z M 17 9 L 26.3125 16 L 17 23 Z|0 0 32 32",s="M 6 5 L 6 7 L 7 7 L 7 25 L 6 25 L 6 27 L 14 27 L 14 25 L 13 25 L 13 19 L 19 19 L 19 25 L 18 25 L 18 27 L 26 27 L 26 25 L 25 25 L 25 7 L 26 7 L 26 5 L 18 5 L 18 7 L 19 7 L 19 13 L 13 13 L 13 7 L 14 7 L 14 5 Z M 9 7 L 11 7 L 11 15 L 21 15 L 21 7 L 23 7 L 23 25 L 21 25 L 21 17 L 11 17 L 11 25 L 9 25 Z|0 0 32 32",l="M 4 6 L 4 8 L 11 8 L 11 26 L 13 26 L 13 8 L 20 8 L 20 6 Z M 25 6.625 L 21.5 11 L 24 11 L 24 21 L 21.5 21 L 25 25.375 L 28.5 21 L 26 21 L 26 11 L 28.5 11 Z|0 0 32 32",u="M 16 3 C 8.832031 3 3 8.832031 3 16 C 3 23.167969 8.832031 29 16 29 C 23.167969 29 29 23.167969 29 16 C 29 8.832031 23.167969 3 16 3 Z M 16 5 C 22.085938 5 27 9.914063 27 16 C 27 22.085938 22.085938 27 16 27 C 9.914063 27 5 22.085938 5 16 C 5 9.914063 9.914063 5 16 5 Z M 12.21875 10.78125 L 10.78125 12.21875 L 14.5625 16 L 10.78125 19.78125 L 12.21875 21.21875 L 16 17.4375 L 19.78125 21.21875 L 21.21875 19.78125 L 17.4375 16 L 21.21875 12.21875 L 19.78125 10.78125 L 16 14.5625 Z|0 0 32 32",c="M 7.21875 5.78125 L 5.78125 7.21875 L 14.5625 16 L 5.78125 24.78125 L 7.21875 26.21875 L 16 17.4375 L 24.78125 26.21875 L 26.21875 24.78125 L 17.4375 16 L 26.21875 7.21875 L 24.78125 5.78125 L 16 14.5625 Z|0 0 32 32";return{name:"svg-line-awesome",type:{positive:Z,negative:i,info:"M 16 3 C 8.832031 3 3 8.832031 3 16 C 3 23.167969 8.832031 29 16 29 C 23.167969 29 29 23.167969 29 16 C 29 8.832031 23.167969 3 16 3 Z M 16 5 C 22.085938 5 27 9.914063 27 16 C 27 22.085938 22.085938 27 16 27 C 9.914063 27 5 22.085938 5 16 C 5 9.914063 9.914063 5 16 5 Z M 15 10 L 15 12 L 17 12 L 17 10 Z M 15 14 L 15 22 L 17 22 L 17 14 Z|0 0 32 32",warning:"M 13 4 L 13 20 L 19 20 L 19 4 Z M 15 6 L 17 6 L 17 18 L 15 18 Z M 13 22 L 13 28 L 19 28 L 19 22 Z M 15 24 L 17 24 L 17 26 L 15 26 Z|0 0 32 32"},arrow:{up:C,right:"M 18.71875 6.78125 L 17.28125 8.21875 L 24.0625 15 L 4 15 L 4 17 L 24.0625 17 L 17.28125 23.78125 L 18.71875 25.21875 L 27.21875 16.71875 L 27.90625 16 L 27.21875 15.28125 Z|0 0 32 32",down:"M 15 4 L 15 24.0625 L 8.21875 17.28125 L 6.78125 18.71875 L 15.28125 27.21875 L 16 27.90625 L 16.71875 27.21875 L 25.21875 18.71875 L 23.78125 17.28125 L 17 24.0625 L 17 4 Z|0 0 32 32",left:"M 13.28125 6.78125 L 4.78125 15.28125 L 4.09375 16 L 4.78125 16.71875 L 13.28125 25.21875 L 14.71875 23.78125 L 7.9375 17 L 28 17 L 28 15 L 7.9375 15 L 14.71875 8.21875 Z|0 0 32 32",dropdown:M},chevron:{left:t,right:o},colorPicker:{spectrum:"M 24.65625 3.03125 C 23.546875 3.03125 22.433594 3.441406 21.59375 4.28125 L 18.8125 7.09375 L 17.8125 6.09375 L 16.40625 7.5 L 17.40625 8.5 L 7.90625 18 C 6.867188 19.039063 6.273438 19.792969 5.90625 20.46875 C 5.539063 21.144531 5.410156 21.753906 5.34375 22.15625 C 5.277344 22.558594 5.242188 22.777344 5 23.21875 C 4.757813 23.660156 4.265625 24.296875 3.28125 25.28125 L 2.59375 26 L 3.28125 26.71875 L 5.28125 28.71875 L 6 29.40625 L 6.71875 28.71875 C 7.679688 27.757813 8.292969 27.292969 8.71875 27.0625 C 9.144531 26.832031 9.371094 26.789063 9.78125 26.71875 C 10.191406 26.648438 10.78125 26.535156 11.46875 26.15625 C 12.15625 25.777344 12.9375 25.15625 14 24.09375 L 23.5 14.59375 L 24.5 15.59375 L 25.90625 14.1875 L 24.90625 13.1875 L 27.71875 10.40625 C 29.398438 8.726563 29.398438 5.960938 27.71875 4.28125 C 26.878906 3.441406 25.765625 3.03125 24.65625 3.03125 Z M 24.65625 5.03125 C 25.246094 5.03125 25.820313 5.257813 26.28125 5.71875 C 27.199219 6.636719 27.199219 8.082031 26.28125 9 L 23.5 11.78125 L 20.21875 8.5 L 23 5.71875 C 23.460938 5.257813 24.066406 5.03125 24.65625 5.03125 Z M 18.8125 9.90625 L 22.09375 13.1875 L 12.59375 22.6875 C 11.609375 23.671875 10.941406 24.164063 10.5 24.40625 C 10.058594 24.648438 9.839844 24.683594 9.4375 24.75 C 9.035156 24.816406 8.457031 24.914063 7.78125 25.28125 C 7.320313 25.53125 6.695313 26.128906 6.09375 26.65625 L 5.34375 25.90625 C 5.890625 25.289063 6.492188 24.65625 6.75 24.1875 C 7.128906 23.5 7.242188 22.878906 7.3125 22.46875 C 7.382813 22.058594 7.425781 21.863281 7.65625 21.4375 C 7.886719 21.011719 8.351563 20.367188 9.3125 19.40625 Z|0 0 32 32",tune:"M 15 5 C 13.707031 5 12.605469 5.84375 12.1875 7 L 4 7 L 4 9 L 12.1875 9 C 12.605469 10.15625 13.707031 11 15 11 C 16.292969 11 17.394531 10.15625 17.8125 9 L 28 9 L 28 7 L 17.8125 7 C 17.394531 5.84375 16.292969 5 15 5 Z M 15 7 C 15.5625 7 16 7.4375 16 8 C 16 8.5625 15.5625 9 15 9 C 14.4375 9 14 8.5625 14 8 C 14 7.4375 14.4375 7 15 7 Z M 22 13 C 20.707031 13 19.605469 13.84375 19.1875 15 L 4 15 L 4 17 L 19.1875 17 C 19.605469 18.15625 20.707031 19 22 19 C 23.292969 19 24.394531 18.15625 24.8125 17 L 28 17 L 28 15 L 24.8125 15 C 24.394531 13.84375 23.292969 13 22 13 Z M 22 15 C 22.5625 15 23 15.4375 23 16 C 23 16.5625 22.5625 17 22 17 C 21.4375 17 21 16.5625 21 16 C 21 15.4375 21.4375 15 22 15 Z M 11 21 C 9.707031 21 8.605469 21.84375 8.1875 23 L 4 23 L 4 25 L 8.1875 25 C 8.605469 26.15625 9.707031 27 11 27 C 12.292969 27 13.394531 26.15625 13.8125 25 L 28 25 L 28 23 L 13.8125 23 C 13.394531 21.84375 12.292969 21 11 21 Z M 11 23 C 11.5625 23 12 23.4375 12 24 C 12 24.5625 11.5625 25 11 25 C 10.4375 25 10 24.5625 10 24 C 10 23.4375 10.4375 23 11 23 Z|0 0 32 32",palette:"M 5 5 L 5 23 C 5 25.206 6.794 27 9 27 C 11.206 27 13 25.206 13 23 L 13 5 L 5 5 z M 7 7 L 11 7 L 11 11 L 7 11 L 7 7 z M 18.900391 7.4433594 L 14.501953 11.84375 L 14.501953 14.669922 L 18.898438 10.271484 L 21.728516 13.099609 L 14.5 20.328125 L 14.5 23 C 14.5 23.056 14.493188 23.108062 14.492188 23.164062 L 24.556641 13.101562 L 18.900391 7.4433594 z M 7 13 L 11 13 L 11 17 L 7 17 L 7 13 z M 7 19 L 11 19 L 11 23 C 11 24.103 10.103 25 9 25 C 7.897 25 7 24.103 7 23 L 7 19 z M 20.777344 19 L 18.777344 21 L 25 21 L 25 25 L 14.777344 25 L 12.888672 26.888672 C 12.846672 26.930672 12.796906 26.96 12.753906 27 L 27 27 L 27 19 L 20.777344 19 z|0 0 32 32"},pullToRefresh:{icon:"M 16 4 C 10.886719 4 6.617188 7.160156 4.875 11.625 L 6.71875 12.375 C 8.175781 8.640625 11.710938 6 16 6 C 19.242188 6 22.132813 7.589844 23.9375 10 L 20 10 L 20 12 L 27 12 L 27 5 L 25 5 L 25 8.09375 C 22.808594 5.582031 19.570313 4 16 4 Z M 25.28125 19.625 C 23.824219 23.359375 20.289063 26 16 26 C 12.722656 26 9.84375 24.386719 8.03125 22 L 12 22 L 12 20 L 5 20 L 5 27 L 7 27 L 7 23.90625 C 9.1875 26.386719 12.394531 28 16 28 C 21.113281 28 25.382813 24.839844 27.125 20.375 Z|0 0 32 32"},carousel:{left:t,right:o,up:r,down:e,navigationIcon:"M 6 6 L 6 26 L 26 26 L 26 6 L 6 6 z|0 0 32 32"},chip:{remove:u,selected:Z},datetime:{arrowLeft:t,arrowRight:o,now:"M 16 4 C 9.382813 4 4 9.382813 4 16 C 4 22.617188 9.382813 28 16 28 C 22.617188 28 28 22.617188 28 16 C 28 9.382813 22.617188 4 16 4 Z M 16 6 C 21.535156 6 26 10.464844 26 16 C 26 21.535156 21.535156 26 16 26 C 10.464844 26 6 21.535156 6 16 C 6 10.464844 10.464844 6 16 6 Z M 15 8 L 15 17 L 22 17 L 22 15 L 17 15 L 17 8 Z|0 0 32 32",today:"M 9 5 L 9 6 L 5 6 L 5 28 L 27 28 L 27 6 L 23 6 L 23 5 L 21 5 L 21 6 L 11 6 L 11 5 Z M 7 8 L 9 8 L 9 9 L 11 9 L 11 8 L 21 8 L 21 9 L 23 9 L 23 8 L 25 8 L 25 10 L 7 10 Z M 7 12 L 25 12 L 25 26 L 7 26 Z M 20.28125 14.28125 L 15 19.5625 L 12.71875 17.28125 L 11.28125 18.71875 L 14.28125 21.71875 L 15 22.40625 L 15.71875 21.71875 L 21.71875 15.71875 Z|0 0 32 32"},editor:{bold:"M 16 7 C 18.800781 7 21 9.199219 21 12 C 21 13.300781 20.5 14.398438 19.699219 15.300781 C 21.601563 16 23 17.800781 23 20 C 23 22.800781 20.800781 25 18 25 L 7 25 L 7 7 L 16 7 M 9 15 L 16 15 C 17.699219 15 19 13.699219 19 12 C 19 10.300781 17.699219 9 16 9 L 9 9 L 9 15 M 9 23 L 18 23 C 19.699219 23 21 21.699219 21 20 C 21 18.300781 19.699219 17 18 17 L 9 17 L 9 23 M 16 5 L 5 5 L 5 27 L 18 27 C 21.898438 27 25 23.898438 25 20 C 25 17.898438 24 15.898438 22.5 14.601563 C 22.800781 13.800781 23 12.898438 23 12 C 23 8.101563 19.898438 5 16 5 Z M 11 11 L 16 11 C 16.601563 11 17 11.398438 17 12 C 17 12.601563 16.601563 13 16 13 L 11 13 Z M 11 19 L 18 19 C 18.601563 19 19 19.398438 19 20 C 19 20.601563 18.601563 21 18 21 L 11 21 Z|0 0 32 32",italic:"M 11.75 5 L 11.6875 5.9375 L 11.5 8.9375 L 11.4375 10 L 13.4375 10 L 12.5625 22 L 10.5625 22 L 10.5 22.9375 L 10.3125 25.9375 L 10.21875 27 L 20.25 27 L 20.3125 26.0625 L 20.5 23.0625 L 20.5625 22 L 18.5625 22 L 19.4375 10 L 21.4375 10 L 21.5 9.0625 L 21.6875 6.0625 L 21.78125 5 Z M 13.625 7 L 19.625 7 L 19.5625 8 L 17.5625 8 L 17.5 8.9375 L 16.5 22.9375 L 16.4375 24 L 18.4375 24 L 18.375 25 L 12.375 25 L 12.4375 24 L 14.4375 24 L 14.5 23.0625 L 15.5 9.0625 L 15.5625 8 L 13.5625 8 Z|0 0 32 32",strikethrough:"M 7 6 L 7 8 L 15 8 L 15 16 L 10 16 L 10 18 L 15 18 L 15 26 L 17 26 L 17 18 L 22 18 L 22 16 L 17 16 L 17 8 L 25 8 L 25 6 Z|0 0 32 32",underline:"M 8 4 L 8 16 C 8 20.429688 11.570313 24 16 24 C 20.429688 24 24 20.429688 24 16 L 24 4 L 22 4 L 22 16 C 22 19.371094 19.371094 22 16 22 C 12.628906 22 10 19.371094 10 16 L 10 4 Z M 6 26 L 6 28 L 26 28 L 26 26 Z|0 0 32 32",unorderedList:"M 4 5 L 4 11 L 10 11 L 10 5 Z M 6 7 L 8 7 L 8 9 L 6 9 Z M 12 7 L 12 9 L 27 9 L 27 7 Z M 4 13 L 4 19 L 10 19 L 10 13 Z M 6 15 L 8 15 L 8 17 L 6 17 Z M 12 15 L 12 17 L 27 17 L 27 15 Z M 4 21 L 4 27 L 10 27 L 10 21 Z M 6 23 L 8 23 L 8 25 L 6 25 Z M 12 23 L 12 25 L 27 25 L 27 23 Z|0 0 32 32",orderedList:"M 5.96875 3 L 5.65625 3.34375 C 5.65625 3.34375 4.898438 4 4.40625 4 L 4.40625 6 C 5.085938 6 5.554688 5.722656 6 5.46875 L 6 10 L 8 10 L 8 3 Z M 11 6 L 11 8 L 28 8 L 28 6 Z M 6.5 12 C 5.117188 12 4 13.117188 4 14.5 L 4 15 L 6 15 L 6 14.5 C 6 14.285156 6.285156 14 6.5 14 C 6.714844 14 7 14.285156 7 14.5 L 6.90625 14.59375 L 4.3125 17.09375 L 4 17.375 L 4 19 L 9 19 L 9 17 L 7.28125 17 L 8.15625 16.125 L 8.28125 16.03125 L 8.25 16 C 8.75 15.589844 9 14.980469 9 14.5 C 9 13.117188 7.882813 12 6.5 12 Z M 11 15 L 11 17 L 28 17 L 28 15 Z M 4 21 L 4 23 L 5.375 23 L 5.125 23.40625 L 5 23.625 L 5 25 L 6.5 25 C 6.714844 25 7 25.285156 7 25.5 C 7 25.714844 6.714844 26 6.5 26 L 4 26 L 4 28 L 6.5 28 C 7.882813 28 9 26.882813 9 25.5 C 9 24.496094 8.320313 23.804688 7.46875 23.40625 L 7.875 22.71875 L 8 22.46875 L 8 21 Z M 11 24 L 11 26 L 28 26 L 28 24 Z|0 0 32 32",subscript:"M 4.15625 8 L 5.15625 9.53125 L 9.3125 16 L 5.15625 22.46875 L 4.15625 24 L 10.53125 24 L 10.84375 23.53125 L 12.5 20.96875 L 14.15625 23.53125 L 14.46875 24 L 20.84375 24 L 19.84375 22.46875 L 15.6875 16 L 19.84375 9.53125 L 20.84375 8 L 14.46875 8 L 14.15625 8.46875 L 12.5 11.03125 L 10.84375 8.46875 L 10.53125 8 Z M 7.8125 10 L 9.46875 10 L 11.65625 13.4375 L 12.5 14.75 L 13.34375 13.4375 L 15.53125 10 L 17.1875 10 L 13.65625 15.46875 L 13.3125 16 L 13.65625 16.53125 L 17.1875 22 L 15.53125 22 L 13.34375 18.5625 L 12.5 17.25 L 11.65625 18.5625 L 9.46875 22 L 7.8125 22 L 11.34375 16.53125 L 11.6875 16 L 11.34375 15.46875 Z M 24.96875 19 C 23.34375 19 22 20.34375 22 21.96875 L 22 22 L 24 22 L 24 21.96875 C 24 21.421875 24.421875 21 24.96875 21 L 25.03125 21 C 25.578125 21 26 21.421875 26 21.96875 C 26 22.285156 25.855469 22.570313 25.59375 22.75 L 23.46875 24.21875 C 22.554688 24.847656 22 25.890625 22 27 L 22 28 L 28 28 L 28 26 L 24.53125 26 C 24.570313 25.96875 24.550781 25.902344 24.59375 25.875 L 26.71875 24.40625 C 27.523438 23.851563 28 22.945313 28 21.96875 C 28 20.34375 26.65625 19 25.03125 19 Z|0 0 32 32",superscript:"M 24.96875 3 C 23.34375 3 22 4.34375 22 5.96875 L 22 6 L 24 6 L 24 5.96875 C 24 5.421875 24.421875 5 24.96875 5 L 25.03125 5 C 25.578125 5 26 5.421875 26 5.96875 C 26 6.285156 25.855469 6.570313 25.59375 6.75 L 23.46875 8.21875 C 22.554688 8.847656 22 9.890625 22 11 L 22 12 L 28 12 L 28 10 L 24.53125 10 C 24.570313 9.96875 24.550781 9.902344 24.59375 9.875 L 26.71875 8.40625 C 27.523438 7.851563 28 6.945313 28 5.96875 C 28 4.34375 26.65625 3 25.03125 3 Z M 4.15625 8 L 5.15625 9.53125 L 9.3125 16 L 5.15625 22.46875 L 4.15625 24 L 10.53125 24 L 10.84375 23.53125 L 12.5 20.96875 L 14.15625 23.53125 L 14.46875 24 L 20.84375 24 L 19.84375 22.46875 L 15.6875 16 L 19.84375 9.53125 L 20.84375 8 L 14.46875 8 L 14.15625 8.46875 L 12.5 11.03125 L 10.84375 8.46875 L 10.53125 8 Z M 7.8125 10 L 9.46875 10 L 11.65625 13.4375 L 12.5 14.75 L 13.34375 13.4375 L 15.53125 10 L 17.1875 10 L 13.65625 15.46875 L 13.3125 16 L 13.65625 16.53125 L 17.1875 22 L 15.53125 22 L 13.34375 18.5625 L 12.5 17.25 L 11.65625 18.5625 L 9.46875 22 L 7.8125 22 L 11.34375 16.53125 L 11.6875 16 L 11.34375 15.46875 Z|0 0 32 32",hyperlink:"M 21.75 4 C 20.078125 4 18.492188 4.660156 17.3125 5.84375 L 15.84375 7.3125 C 14.660156 8.496094 14 10.078125 14 11.75 C 14 12.542969 14.152344 13.316406 14.4375 14.03125 L 16.0625 12.40625 C 15.859375 11.109375 16.253906 9.714844 17.25 8.71875 L 18.71875 7.25 C 19.523438 6.445313 20.613281 6 21.75 6 C 22.886719 6 23.945313 6.445313 24.75 7.25 C 26.410156 8.910156 26.410156 11.621094 24.75 13.28125 L 23.28125 14.75 C 22.476563 15.554688 21.386719 16 20.25 16 C 20.027344 16 19.808594 15.976563 19.59375 15.9375 L 17.96875 17.5625 C 18.683594 17.847656 19.457031 18 20.25 18 C 21.921875 18 23.507813 17.339844 24.6875 16.15625 L 26.15625 14.6875 C 27.339844 13.503906 28 11.921875 28 10.25 C 28 8.578125 27.339844 7.027344 26.15625 5.84375 C 24.976563 4.660156 23.421875 4 21.75 4 Z M 19.28125 11.28125 L 11.28125 19.28125 L 12.71875 20.71875 L 20.71875 12.71875 Z M 11.75 14 C 10.078125 14 8.492188 14.660156 7.3125 15.84375 L 5.84375 17.3125 C 4.660156 18.496094 4 20.078125 4 21.75 C 4 23.421875 4.660156 24.972656 5.84375 26.15625 C 7.023438 27.339844 8.578125 28 10.25 28 C 11.921875 28 13.507813 27.339844 14.6875 26.15625 L 16.15625 24.6875 C 17.339844 23.503906 18 21.921875 18 20.25 C 18 19.457031 17.847656 18.683594 17.5625 17.96875 L 15.9375 19.59375 C 16.140625 20.890625 15.746094 22.285156 14.75 23.28125 L 13.28125 24.75 C 12.476563 25.554688 11.386719 26 10.25 26 C 9.113281 26 8.054688 25.554688 7.25 24.75 C 5.589844 23.089844 5.589844 20.378906 7.25 18.71875 L 8.71875 17.25 C 9.523438 16.445313 10.613281 16 11.75 16 C 11.972656 16 12.191406 16.023438 12.40625 16.0625 L 14.03125 14.4375 C 13.316406 14.152344 12.542969 14 11.75 14 Z|0 0 32 32",toggleFullscreen:"M 4 4 L 4 13 L 6 13 L 6 7.4375 L 14.5625 16 L 6 24.5625 L 6 19 L 4 19 L 4 28 L 13 28 L 13 26 L 7.4375 26 L 16 17.4375 L 24.5625 26 L 19 26 L 19 28 L 28 28 L 28 19 L 26 19 L 26 24.5625 L 17.4375 16 L 26 7.4375 L 26 13 L 28 13 L 28 4 L 19 4 L 19 6 L 24.5625 6 L 16 14.5625 L 7.4375 6 L 13 6 L 13 4 Z|0 0 32 32",quote:"M 4 8 L 4 18 L 12 18 C 12 20.21875 10.21875 22 8 22 L 8 24 C 11.300781 24 14 21.300781 14 18 L 14 8 Z M 18 8 L 18 18 L 26 18 C 26 20.21875 24.21875 22 22 22 L 22 24 C 25.300781 24 28 21.300781 28 18 L 28 8 Z M 6 10 L 12 10 L 12 16 L 6 16 Z M 20 10 L 26 10 L 26 16 L 20 16 Z|0 0 32 32",left:L,center:"M 3 7 L 3 9 L 29 9 L 29 7 Z M 7 11 L 7 13 L 25 13 L 25 11 Z M 3 15 L 3 17 L 29 17 L 29 15 Z M 7 19 L 7 21 L 25 21 L 25 19 Z M 3 23 L 3 25 L 29 25 L 29 23 Z|0 0 32 32",right:"M 3 7 L 3 9 L 29 9 L 29 7 Z M 11 11 L 11 13 L 29 13 L 29 11 Z M 3 15 L 3 17 L 29 17 L 29 15 Z M 11 19 L 11 21 L 29 21 L 29 19 Z M 3 23 L 3 25 L 29 25 L 29 23 Z|0 0 32 32",justify:"M 3 7 L 3 9 L 29 9 L 29 7 Z M 3 11 L 3 13 L 29 13 L 29 11 Z M 3 15 L 3 17 L 29 17 L 29 15 Z M 3 19 L 3 21 L 29 21 L 29 19 Z M 3 23 L 3 25 L 29 25 L 29 23 Z|0 0 32 32",print:"M 9 4 L 9 11 L 7 11 C 5.355469 11 4 12.355469 4 14 L 4 24 L 9 24 L 9 28 L 23 28 L 23 24 L 28 24 L 28 14 C 28 12.355469 26.644531 11 25 11 L 23 11 L 23 4 Z M 11 6 L 21 6 L 21 11 L 11 11 Z M 7 13 L 25 13 C 25.566406 13 26 13.433594 26 14 L 26 22 L 23 22 L 23 18 L 9 18 L 9 22 L 6 22 L 6 14 C 6 13.433594 6.433594 13 7 13 Z M 8 14 C 7.449219 14 7 14.449219 7 15 C 7 15.550781 7.449219 16 8 16 C 8.550781 16 9 15.550781 9 15 C 9 14.449219 8.550781 14 8 14 Z M 11 20 L 21 20 L 21 26 L 11 26 Z|0 0 32 32",outdent:"M 3 7 L 3 9 L 16 9 L 16 7 Z M 3 11 L 3 13 L 23 13 L 23 11 Z M 25 11 L 25 21 L 30 16 Z M 3 15 L 3 17 L 23 17 L 23 15 Z M 3 19 L 3 21 L 23 21 L 23 19 Z M 3 23 L 3 25 L 16 25 L 16 23 Z|0 0 32 32",indent:"M 3 7 L 3 9 L 29 9 L 29 7 Z M 3 11 L 3 13 L 22 13 L 22 11 Z M 29 11 L 24 16 L 29 21 Z M 3 15 L 3 17 L 22 17 L 22 15 Z M 3 19 L 3 21 L 22 21 L 22 19 Z M 3 23 L 3 25 L 29 25 L 29 23 Z|0 0 32 32",removeFormat:"M 18.90625 4.09375 C 18.101563 4.09375 17.265625 4.367188 16.625 4.9375 L 16.625 4.96875 L 16.59375 5 L 4.90625 16.59375 C 3.695313 17.804688 3.703125 19.777344 4.84375 21.0625 L 4.875 21.09375 L 4.90625 21.09375 L 10.90625 27.09375 C 12.117188 28.304688 14.089844 28.296875 15.375 27.15625 L 15.375 27.125 L 27 15.5 C 28.265625 14.234375 28.304688 12.210938 27.09375 11 L 21.09375 5 C 20.488281 4.394531 19.710938 4.09375 18.90625 4.09375 Z M 18.875 6.125 C 19.195313 6.125 19.492188 6.210938 19.6875 6.40625 L 25.6875 12.40625 C 26.074219 12.792969 26.128906 13.558594 25.59375 14.09375 L 20.5625 19.125 L 12.90625 11.46875 L 17.96875 6.4375 L 18 6.40625 C 18.253906 6.195313 18.570313 6.125 18.875 6.125 Z M 11.46875 12.90625 L 19.125 20.5625 L 14.03125 25.65625 C 14.019531 25.664063 14.011719 25.679688 14 25.6875 C 13.484375 26.117188 12.691406 26.066406 12.3125 25.6875 L 6.34375 19.75 C 6.328125 19.730469 6.328125 19.707031 6.3125 19.6875 C 5.902344 19.171875 5.9375 18.375 6.3125 18 Z|0 0 32 32",formatting:s,fontSize:l,align:L,hr:"M 5 5 L 5 27 L 27 27 L 27 5 Z M 7 7 L 25 7 L 25 25 L 7 25 Z M 11 15 L 11 17 L 21 17 L 21 15 Z|0 0 32 32",undo:"M 12.78125 5.28125 L 4.78125 13.28125 L 4.09375 14 L 4.78125 14.71875 L 12.78125 22.71875 L 14.21875 21.28125 L 7.9375 15 L 21 15 C 23.753906 15 26 17.246094 26 20 L 26 27 L 28 27 L 28 20 C 28 16.15625 24.84375 13 21 13 L 7.9375 13 L 14.21875 6.71875 Z|0 0 32 32",redo:"M 19.21875 5.28125 L 17.78125 6.71875 L 24.0625 13 L 11 13 C 7.15625 13 4 16.15625 4 20 L 4 27 L 6 27 L 6 20 C 6 17.246094 8.246094 15 11 15 L 24.0625 15 L 17.78125 21.28125 L 19.21875 22.71875 L 27.21875 14.71875 L 27.90625 14 L 27.21875 13.28125 Z|0 0 32 32",heading:s,code:n,size:l,font:"M 15 6 L 8 26 L 10 26 L 12.09375 20 L 19.90625 20 L 22 26 L 24 26 L 17 6 Z M 16 8.84375 L 19.1875 18 L 12.8125 18 Z|0 0 32 32",viewSource:n},expansionItem:{icon:e,denseIcon:M},fab:{icon:"M 15 5 L 15 15 L 5 15 L 5 17 L 15 17 L 15 27 L 17 27 L 17 17 L 27 17 L 27 15 L 17 15 L 17 5 Z|0 0 32 32",activeIcon:c},field:{clear:u,error:"M 16 4 C 9.382813 4 4 9.382813 4 16 C 4 22.617188 9.382813 28 16 28 C 22.617188 28 28 22.617188 28 16 C 28 9.382813 22.617188 4 16 4 Z M 16 6 C 21.535156 6 26 10.464844 26 16 C 26 21.535156 21.535156 26 16 26 C 10.464844 26 6 21.535156 6 16 C 6 10.464844 10.464844 6 16 6 Z M 15 10 L 15 18 L 17 18 L 17 10 Z M 15 20 L 15 22 L 17 22 L 17 20 Z|0 0 32 32"},pagination:{first:a,prev:t,next:o,last:d},rating:{icon:"M 30.335938 12.546875 L 20.164063 11.472656 L 16 2.132813 L 11.835938 11.472656 L 1.664063 12.546875 L 9.261719 19.394531 L 7.140625 29.398438 L 16 24.289063 L 24.859375 29.398438 L 22.738281 19.394531 Z|0 0 32 32"},stepper:{done:Z,active:"M 24.6875 4.03125 C 23.851563 4.03125 23.039063 4.367188 22.40625 5 L 22.3125 5.09375 L 21.6875 4.5 L 5.1875 21 L 5.125 21.3125 L 4.03125 26.8125 L 3.71875 28.28125 L 5.1875 27.96875 L 10.6875 26.875 L 11 26.8125 L 27.5 10.3125 L 26.90625 9.71875 L 26.96875 9.65625 L 27 9.59375 C 28.265625 8.328125 28.265625 6.265625 27 5 C 26.367188 4.367188 25.523438 4.03125 24.6875 4.03125 Z M 24.6875 6 C 25 6 25.328125 6.140625 25.59375 6.40625 C 26.128906 6.941406 26.128906 7.652344 25.59375 8.1875 L 25.5 8.28125 L 23.71875 6.5 L 23.8125 6.40625 C 24.078125 6.140625 24.375 6 24.6875 6 Z M 21.71875 7.3125 L 24.6875 10.28125 L 23.25 11.75 L 20.25 8.75 Z M 18.875 10.1875 L 21.8125 13.125 L 11.375 23.59375 L 10.96875 21.78125 L 10.84375 21.15625 L 10.21875 21.03125 L 8.40625 20.625 Z M 6.96875 22.34375 L 9.15625 22.84375 L 9.65625 25.03125 L 7.625 25.4375 L 6.5625 24.375 Z|0 0 32 32",error:i},tabs:{left:t,right:o,up:r,down:e},table:{arrowUp:C,warning:i,firstPage:a,prevPage:t,nextPage:o,lastPage:d},tree:{icon:"M 9 5.15625 L 9 26.84375 L 10.53125 25.84375 L 25.84375 16 L 10.53125 6.15625 Z M 11 8.8125 L 22.15625 16 L 11 23.1875 Z|0 0 32 32"},uploader:{done:Z,clear:c,add:"M 5 5 L 5 27 L 27 27 L 27 5 Z M 7 7 L 25 7 L 25 25 L 7 25 Z M 15 11 L 15 15 L 11 15 L 11 17 L 15 17 L 15 21 L 17 21 L 17 17 L 21 17 L 21 15 L 17 15 L 17 11 Z|0 0 32 32",upload:"M 16 3.59375 L 15.28125 4.28125 L 8.28125 11.28125 L 9.71875 12.71875 L 15 7.4375 L 15 24 L 17 24 L 17 7.4375 L 22.28125 12.71875 L 23.71875 11.28125 L 16.71875 4.28125 Z M 7 26 L 7 28 L 25 28 L 25 26 Z|0 0 32 32",removeQueue:"M 5 5 L 5 11 L 24 11 L 24 5 L 5 5 z M 7 7 L 22 7 L 22 9 L 7 9 L 7 7 z M 9 13 L 9 19 L 28 19 L 28 13 L 9 13 z M 11 15 L 26 15 L 26 17 L 11 17 L 11 15 z M 5 21 L 5 27 L 24 27 L 24 21 L 5 21 z M 7 23 L 22 23 L 22 25 L 7 25 L 7 23 z|0 0 32 32",removeUploaded:"M 16 2 C 14.742188 2 13.847656 2.890625 13.40625 4 L 5 4 L 5 29 L 27 29 L 27 4 L 18.59375 4 C 18.152344 2.890625 17.257813 2 16 2 Z M 16 4 C 16.554688 4 17 4.445313 17 5 L 17 6 L 20 6 L 20 8 L 12 8 L 12 6 L 15 6 L 15 5 C 15 4.445313 15.445313 4 16 4 Z M 7 6 L 10 6 L 10 10 L 22 10 L 22 6 L 25 6 L 25 27 L 7 27 Z M 21.28125 13.28125 L 15 19.5625 L 11.71875 16.28125 L 10.28125 17.71875 L 14.28125 21.71875 L 15 22.40625 L 15.71875 21.71875 L 22.71875 14.71875 Z|0 0 32 32"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-material-icons-outlined.umd.min.js b/dist/icon-set/svg-material-icons-outlined.umd.min.js new file mode 100644 index 00000000000..0d59e748ff4 --- /dev/null +++ b/dist/icon-set/svg-material-icons-outlined.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(v,h){"object"==typeof exports&&"undefined"!=typeof module?module.exports=h():"function"==typeof define&&define.amd?define(h):((v="undefined"!=typeof globalThis?globalThis:v||self).Quasar=v.Quasar||{},v.Quasar.iconSet=v.Quasar.iconSet||{},v.Quasar.iconSet.svgMaterialIconsOutlined=h())}(this,function(){"use strict";var v="M0 0h24v24H0V0z@@fill:none;&&M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z",h="M0 0h24v24H0V0z@@fill:none;opacity:.87;&&M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z",l="M0 0h24v24H0V0z@@fill:none;&&M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z",z="M0 0h24v24H0V0z@@fill:none;&&M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12l4.58-4.59z",n="M0 0h24v24H0V0z@@fill:none;&&M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z",e="M0 0h24v24H0V0z@@fill:none;&&M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z",H="M24 0v24H0V0h24z@@fill:none;opacity:.87;&&M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6 1.41-1.41zM6 6h2v12H6V6z",M="M0 0h24v24H0V0z@@fill:none;&&M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z",o="M0 0h24v24H0V0z@@fill:none;&&M9 4v3h5v12h3V7h5V4H9zm-6 8h3v7h3v-7h3V9H3v3z",i="M0 0h24v24H0V0z@@fill:none;&&M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z",V="M0 0h24v24H0V0z@@fill:none;&&M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6 1.41 1.41z",c="M0 0h24v24H0V0z@@fill:none;opacity:.87;&&M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6-1.41 1.41zM16 6h2v12h-2V6z",f="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z";return{name:"svg-material-icons-outlined",type:{positive:"M0 0h24v24H0V0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm4.59-12.42L10 14.17l-2.59-2.58L6 13l4 4 8-8z",negative:f,info:"M0 0h24v24H0V0z@@fill:none;&&M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z",warning:"M0 0h24v24H0V0z@@fill:none;&&M12 19 m-2, 0 a2,2 0 1,0 4,0 a2,2 0 1,0 -4,0&&M10 3h4v12h-4z"},arrow:{up:v,right:"M0 0h24v24H0V0z@@fill:none;&&M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8-8-8z",down:"M0 0h24v24H0V0z@@fill:none;&&M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z",left:"M0 0h24v24H0V0z@@fill:none;&&M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z",dropdown:"M0 0h24v24H0V0z@@fill:none;&&M7 10l5 5 5-5H7z"},chevron:{left:z,right:n},colorPicker:{spectrum:"M0 0h24v24H0z@@fill:none;&&M11 9h2v2h-2V9zm-2 2h2v2H9v-2zm4 0h2v2h-2v-2zm2-2h2v2h-2V9zM7 9h2v2H7V9zm12-6H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 18H7v-2h2v2zm4 0h-2v-2h2v2zm4 0h-2v-2h2v2zm2-7h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v2H9v-2H7v2H5v-2h2v-2H5V5h14v6z",tune:"M0 0h24v24H0V0z@@fill:none;&&M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z",palette:"M0 0h24v24H0V0z@@fill:none;&&M2.53 19.65l1.34.56v-9.03l-2.43 5.86c-.41 1.02.08 2.19 1.09 2.61zm19.5-3.7L17.07 3.98c-.31-.75-1.04-1.21-1.81-1.23-.26 0-.53.04-.79.15L7.1 5.95c-.75.31-1.21 1.03-1.23 1.8-.01.27.04.54.15.8l4.96 11.97c.31.76 1.05 1.22 1.83 1.23.26 0 .52-.05.77-.15l7.36-3.05c1.02-.42 1.51-1.59 1.09-2.6zm-9.2 3.8L7.87 7.79l7.35-3.04h.01l4.95 11.95-7.35 3.05z&&M11 9 m-1, 0 a1,1 0 1,0 2,0 a1,1 0 1,0 -2,0&&M5.88 19.75c0 1.1.9 2 2 2h1.45l-3.45-8.34v6.34z"},pullToRefresh:{icon:"M0 0h24v24H0V0z@@fill:none;&&M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"},carousel:{left:z,right:n,up:V,down:i,navigationIcon:"M0 0h24v24H0V0z@@fill:none;&&M12 4c4.41 0 8 3.59 8 8s-3.59 8-8 8-8-3.59-8-8 3.59-8 8-8m0-2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"},chip:{remove:h,selected:l},datetime:{arrowLeft:z,arrowRight:n,now:"M0 0h24v24H0V0z@@fill:none;&&M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z",today:"M0 0h24v24H0V0z@@fill:none;&&M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V9h14v10zm0-12H5V5h14v2zM7 11h5v5H7z"},editor:{bold:"M0 0h24v24H0V0z@@fill:none;&&M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z",italic:"M0 0h24v24H0V0z@@fill:none;&&M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4h-8z",strikethrough:"M0 0h24v24H0z@@fill:none;&&M7.24 8.75c-.26-.48-.39-1.03-.39-1.67 0-.61.13-1.16.4-1.67.26-.5.63-.93 1.11-1.29.48-.35 1.05-.63 1.7-.83.66-.19 1.39-.29 2.18-.29.81 0 1.54.11 2.21.34.66.22 1.23.54 1.69.94.47.4.83.88 1.08 1.43s.38 1.15.38 1.81h-3.01c0-.31-.05-.59-.15-.85-.09-.27-.24-.49-.44-.68-.2-.19-.45-.33-.75-.44-.3-.1-.66-.16-1.06-.16-.39 0-.74.04-1.03.13s-.53.21-.72.36c-.19.16-.34.34-.44.55-.1.21-.15.43-.15.66 0 .48.25.88.74 1.21.38.25.77.48 1.41.7H7.39c-.05-.08-.11-.17-.15-.25zM21 12v-2H3v2h9.62c.18.07.4.14.55.2.37.17.66.34.87.51s.35.36.43.57c.07.2.11.43.11.69 0 .23-.05.45-.14.66-.09.2-.23.38-.42.53-.19.15-.42.26-.71.35-.29.08-.63.13-1.01.13-.43 0-.83-.04-1.18-.13s-.66-.23-.91-.42c-.25-.19-.45-.44-.59-.75s-.25-.76-.25-1.21H6.4c0 .55.08 1.13.24 1.58s.37.85.65 1.21c.28.35.6.66.98.92.37.26.78.48 1.22.65.44.17.9.3 1.38.39.48.08.96.13 1.44.13.8 0 1.53-.09 2.18-.28s1.21-.45 1.67-.79c.46-.34.82-.77 1.07-1.27s.38-1.07.38-1.71c0-.6-.1-1.14-.31-1.61-.05-.11-.11-.23-.17-.33H21V12z",underline:"M0 0h24v24H0V0z@@fill:none;&&M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z",unorderedList:"M0 0h24v24H0V0z@@fill:none;&&M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z",orderedList:"M0 0h24v24H0V0z@@fill:none;&&M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z",subscript:"M0 0h24v24H0V0z@@fill:none;&&M16 13h-3V3h-2v10H8l4 4 4-4zM4 19v2h16v-2H4z",superscript:"M0 0h24v24H0V0z@@fill:none;&&M8 11h3v10h2V11h3l-4-4-4 4zM4 3v2h16V3H4z",hyperlink:"M0 0h24v24H0V0z@@fill:none;&&M17 7h-4v2h4c1.65 0 3 1.35 3 3s-1.35 3-3 3h-4v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-6 8H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-2zm-3-4h8v2H8z",toggleFullscreen:"M0 0h24v24H0V0z@@fill:none;&&M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z",quote:"M0 0h24v24H0V0z@@fill:none;&&M18.62 18h-5.24l2-4H13V6h8v7.24L18.62 18zm-2-2h.76L19 12.76V8h-4v4h3.62l-2 4zm-8 2H3.38l2-4H3V6h8v7.24L8.62 18zm-2-2h.76L9 12.76V8H5v4h3.62l-2 4z",left:M,center:"M0 0h24v24H0V0z@@fill:none;&&M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z",right:"M0 0h24v24H0V0z@@fill:none;&&M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z",justify:"M0 0h24v24H0V0z@@fill:none;&&M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z",print:"M0 0h24v24H0V0z@@fill:none;&&M19 8h-1V3H6v5H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zM8 5h8v3H8V5zm8 12v2H8v-4h8v2zm2-2v-2H6v2H4v-4c0-.55.45-1 1-1h14c.55 0 1 .45 1 1v4h-2z&&M18 11.5 m-1, 0 a1,1 0 1,0 2,0 a1,1 0 1,0 -2,0",outdent:"M0 0h24v24H0V0z@@fill:none;&&M11 17h10v-2H11v2zm-8-5l4 4V8l-4 4zm0 9h18v-2H3v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z",indent:"M0 0h24v24H0V0z@@fill:none;&&M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z",removeFormat:"M0 0h24v24H0V0z@@fill:none;&&M20 8V5H6.39l3 3h1.83l-.55 1.28 2.09 2.1L14.21 8zM3.41 4.86L2 6.27l6.97 6.97L6.5 19h3l1.57-3.66L16.73 21l1.41-1.41z",formatting:"M0 0h24v24H0V0z@@fill:none;&&M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L6.5 15h2.1l.9-2.2zM12 5.98L13.87 11h-3.74L12 5.98z",fontSize:o,align:M,hr:"M0 0h24v24H0V0z@@fill:none;&&M19 13H5v-2h14v2z",undo:"M0 0h24v24H0V0z@@fill:none;&&M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z",redo:"M0 0h24v24H0V0z@@fill:none;&&M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z",heading:o,code:e,size:o,font:"M0 0h24v24H0V0z@@fill:none;&&M9.17 15.5h5.64l1.14 3h2.09l-5.11-13h-1.86l-5.11 13h2.09l1.12-3zM12 7.98l2.07 5.52H9.93L12 7.98zM20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 18H4V4h16v16z",viewSource:e},expansionItem:{icon:i,denseIcon:"M0 0h24v24H0V0z@@fill:none;&&M7 10l5 5 5-5H7z"},fab:{icon:"M0 0h24v24H0V0z@@fill:none;&&M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z",activeIcon:"M0 0h24v24H0V0z@@fill:none;&&M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"},field:{clear:h,error:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"},pagination:{first:H,prev:"M0 0h24v24H0V0z@@fill:none;&&M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z",next:"M0 0h24v24H0V0z@@fill:none;&&M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z",last:c},rating:{icon:"M0 0h24v24H0V0z@@fill:none;&&M12 7.13l.97 2.29.47 1.11 1.2.1 2.47.21-1.88 1.63-.91.79.27 1.18.56 2.41-2.12-1.28-1.03-.64-1.03.62-2.12 1.28.56-2.41.27-1.18-.91-.79-1.88-1.63 2.47-.21 1.2-.1.47-1.11.97-2.27M12 2L9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2z"},stepper:{done:l,active:"M0 0h24v24H0V0z@@fill:none;&&M14.06 9.02l.92.92L5.92 19H5v-.92l9.06-9.06M17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29zm-3.6 3.19L3 17.25V21h3.75L17.81 9.94l-3.75-3.75z",error:f},tabs:{left:z,right:n,up:V,down:i},table:{arrowUp:v,warning:f,firstPage:H,prevPage:z,nextPage:n,lastPage:c},tree:{icon:"M0 0h24v24H0V0z@@fill:none;&&M10 8.64L15.27 12 10 15.36V8.64M8 5v14l11-7L8 5z"},uploader:{done:"M0 0h24v24H0V0z@@fill:none;&&M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z",clear:"M0 0h24v24H0V0z@@fill:none;&&M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z",add:"M0 0h24v24H0V0z@@fill:none;&&M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-8-2h2v-4h4v-2h-4V7h-2v4H7v2h4z",upload:"M0 0h24v24H0V0z@@fill:none;&&M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4 0-2.05 1.53-3.76 3.56-3.97l1.07-.11.5-.95C8.08 7.14 9.94 6 12 6c2.62 0 4.88 1.86 5.39 4.43l.3 1.5 1.53.11c1.56.1 2.78 1.41 2.78 2.96 0 1.65-1.35 3-3 3zM8 13h2.55v3h2.9v-3H16l-4-4z",removeQueue:"M0 0h24v24H0V0z@@fill:none;&&M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z",removeUploaded:"M0 0h24v24H0V0z@@fill:none;&&M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-material-icons-round.umd.min.js b/dist/icon-set/svg-material-icons-round.umd.min.js new file mode 100644 index 00000000000..15e1fff17e4 --- /dev/null +++ b/dist/icon-set/svg-material-icons-round.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(c,l){"object"==typeof exports&&"undefined"!=typeof module?module.exports=l():"function"==typeof define&&define.amd?define(l):((c="undefined"!=typeof globalThis?globalThis:c||self).Quasar=c.Quasar||{},c.Quasar.iconSet=c.Quasar.iconSet||{},c.Quasar.iconSet.svgMaterialIconsRound=l())}(this,function(){"use strict";var c="M0 0h24v24H0V0z@@fill:none;&&M8.71 11.71l2.59 2.59c.39.39 1.02.39 1.41 0l2.59-2.59c.63-.63.18-1.71-.71-1.71H9.41c-.89 0-1.33 1.08-.7 1.71z",l="M0 0h24v24H0V0z@@fill:none;&&M13 19V7.83l4.88 4.88c.39.39 1.03.39 1.42 0 .39-.39.39-1.02 0-1.41l-6.59-6.59c-.39-.39-1.02-.39-1.41 0l-6.6 6.58c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L11 7.83V19c0 .55.45 1 1 1s1-.45 1-1z",h="M0 0h24v24H0V0z@@fill:none;opacity:.87;&&M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm4.3 14.3c-.39.39-1.02.39-1.41 0L12 13.41 9.11 16.3c-.39.39-1.02.39-1.41 0-.39-.39-.39-1.02 0-1.41L10.59 12 7.7 9.11c-.39-.39-.39-1.02 0-1.41.39-.39 1.02-.39 1.41 0L12 10.59l2.89-2.89c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41L13.41 12l2.89 2.89c.38.38.38 1.02 0 1.41z",z="M0 0h24v24H0V0z@@fill:none;&&M9 16.17L5.53 12.7c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L20.29 7.71c.39-.39.39-1.02 0-1.41-.39-.39-1.02-.39-1.41 0L9 16.17z",s="M0 0h24v24H0V0z@@fill:none;&&M14.71 6.71c-.39-.39-1.02-.39-1.41 0L8.71 11.3c-.39.39-.39 1.02 0 1.41l4.59 4.59c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L10.83 12l3.88-3.88c.39-.39.38-1.03 0-1.41z",n="M0 0h24v24H0V0z@@fill:none;&&M9.29 6.71c-.39.39-.39 1.02 0 1.41L13.17 12l-3.88 3.88c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0l4.59-4.59c.39-.39.39-1.02 0-1.41L10.7 6.7c-.38-.38-1.02-.38-1.41.01z",e="M0 0h24v24H0V0z@@fill:none;&&M8.7 15.9L4.8 12l3.9-3.9c.39-.39.39-1.01 0-1.4-.39-.39-1.01-.39-1.4 0l-4.59 4.59c-.39.39-.39 1.02 0 1.41l4.59 4.6c.39.39 1.01.39 1.4 0 .39-.39.39-1.01 0-1.4zm6.6 0l3.9-3.9-3.9-3.9c-.39-.39-.39-1.01 0-1.4.39-.39 1.01-.39 1.4 0l4.59 4.59c.39.39.39 1.02 0 1.41l-4.59 4.6c-.39.39-1.01.39-1.4 0-.39-.39-.39-1.01 0-1.4z",v="M24 0v24H0V0h24z@@fill:none;opacity:.87;&&M17.7 15.89L13.82 12l3.89-3.89c.39-.39.39-1.02 0-1.41-.39-.39-1.02-.39-1.41 0l-4.59 4.59c-.39.39-.39 1.02 0 1.41l4.59 4.59c.39.39 1.02.39 1.41 0 .38-.38.38-1.02-.01-1.4zM7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1z",M="M0 0h24v24H0V0z@@fill:none;&&M14 15H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm0-8H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zM4 13h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0 8h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1z",H="M0 0h24v24H0V0z@@fill:none;&&M9 5.5c0 .83.67 1.5 1.5 1.5H14v10.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5V7h3.5c.83 0 1.5-.67 1.5-1.5S21.33 4 20.5 4h-10C9.67 4 9 4.67 9 5.5zM4.5 12H6v5.5c0 .83.67 1.5 1.5 1.5S9 18.33 9 17.5V12h1.5c.83 0 1.5-.67 1.5-1.5S11.33 9 10.5 9h-6C3.67 9 3 9.67 3 10.5S3.67 12 4.5 12z",o="M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z",i="M8.12 14.71L12 10.83l3.88 3.88c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L12.7 8.71c-.39-.39-1.02-.39-1.41 0L6.7 13.3c-.39.39-.39 1.02 0 1.41.39.38 1.03.39 1.42 0z",V="M0 0h24v24H0V0z@@fill:none;opacity:.87;&&M6.29 8.11L10.18 12l-3.89 3.89c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0l4.59-4.59c.39-.39.39-1.02 0-1.41L7.7 6.7c-.39-.39-1.02-.39-1.41 0-.38.39-.38 1.03 0 1.41zM17 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1z",f="M4.47 21h15.06c1.54 0 2.5-1.67 1.73-3L13.73 4.99c-.77-1.33-2.69-1.33-3.46 0L2.74 18c-.77 1.33.19 3 1.73 3zM12 14c-.55 0-1-.45-1-1v-2c0-.55.45-1 1-1s1 .45 1 1v2c0 .55-.45 1-1 1zm1 4h-2v-2h2v2z";return{name:"svg-material-icons-round",type:{positive:"M0 0h24v24H0V0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM9.29 16.29L5.7 12.7c-.39-.39-.39-1.02 0-1.41.39-.39 1.02-.39 1.41 0L10 14.17l6.88-6.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-7.59 7.59c-.38.39-1.02.39-1.41 0z",negative:f,info:"M0 0h24v24H0V0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 15c-.55 0-1-.45-1-1v-4c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1-8h-2V7h2v2z",warning:"M0 0h24v24H0V0z@@fill:none;&&M12 19 m-2, 0 a2,2 0 1,0 4,0 a2,2 0 1,0 -4,0&&M12 3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2s2-.9 2-2V5c0-1.1-.9-2-2-2z"},arrow:{up:l,right:"M0 0h24v24H0V0z@@fill:none;&&M5 13h11.17l-4.88 4.88c-.39.39-.39 1.03 0 1.42.39.39 1.02.39 1.41 0l6.59-6.59c.39-.39.39-1.02 0-1.41l-6.58-6.6c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41L16.17 11H5c-.55 0-1 .45-1 1s.45 1 1 1z",down:"M0 0h24v24H0V0z@@fill:none;&&M11 5v11.17l-4.88-4.88c-.39-.39-1.03-.39-1.42 0-.39.39-.39 1.02 0 1.41l6.59 6.59c.39.39 1.02.39 1.41 0l6.59-6.59c.39-.39.39-1.02 0-1.41-.39-.39-1.02-.39-1.41 0L13 16.17V5c0-.55-.45-1-1-1s-1 .45-1 1z",left:"M0 0h24v24H0V0z@@fill:none;&&M19 11H7.83l4.88-4.88c.39-.39.39-1.03 0-1.42-.39-.39-1.02-.39-1.41 0l-6.59 6.59c-.39.39-.39 1.02 0 1.41l6.59 6.59c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L7.83 13H19c.55 0 1-.45 1-1s-.45-1-1-1z",dropdown:c},chevron:{left:s,right:n},colorPicker:{spectrum:"M0 0h24v24H0z@@fill:none;&&M11 9h2v2h-2V9zm-2 2h2v2H9v-2zm4 0h2v2h-2v-2zm2-2h2v2h-2V9zM7 9h2v2H7V9zm12-6H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 18H7v-2h2v2zm4 0h-2v-2h2v2zm4 0h-2v-2h2v2zm2-7h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v2H9v-2H7v2H5v-2h2v-2H5V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v5z",tune:"M0 0h24v24H0V0z@@fill:none;&&M3 18c0 .55.45 1 1 1h5v-2H4c-.55 0-1 .45-1 1zM3 6c0 .55.45 1 1 1h9V5H4c-.55 0-1 .45-1 1zm10 14v-1h7c.55 0 1-.45 1-1s-.45-1-1-1h-7v-1c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1s1-.45 1-1zM7 10v1H4c-.55 0-1 .45-1 1s.45 1 1 1h3v1c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1s-1 .45-1 1zm14 2c0-.55-.45-1-1-1h-9v2h9c.55 0 1-.45 1-1zm-5-3c.55 0 1-.45 1-1V7h3c.55 0 1-.45 1-1s-.45-1-1-1h-3V4c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1z",palette:"M0 0h24v24H0V0z@@fill:none;&&M2.53 19.65l1.34.56v-9.03l-2.43 5.86c-.41 1.02.08 2.19 1.09 2.61zm19.5-3.7L17.07 3.98c-.31-.75-1.04-1.21-1.81-1.23-.26 0-.53.04-.79.15L7.1 5.95c-.75.31-1.21 1.03-1.23 1.8-.01.27.04.54.15.8l4.96 11.97c.31.76 1.05 1.22 1.83 1.23.26 0 .52-.05.77-.15l7.36-3.05c1.02-.42 1.51-1.59 1.09-2.6zM7.88 8.75c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-2 11c0 1.1.9 2 2 2h1.45l-3.45-8.34v6.34z"},pullToRefresh:{icon:"M0 0h24v24H0V0z@@fill:none;&&M17.65 6.35c-1.63-1.63-3.94-2.57-6.48-2.31-3.67.37-6.69 3.35-7.1 7.02C3.52 15.91 7.27 20 12 20c3.19 0 5.93-1.87 7.21-4.56.32-.67-.16-1.44-.9-1.44-.37 0-.72.2-.88.53-1.13 2.43-3.84 3.97-6.8 3.31-2.22-.49-4.01-2.3-4.48-4.52C5.31 9.44 8.26 6 12 6c1.66 0 3.14.69 4.22 1.78l-1.51 1.51c-.63.63-.19 1.71.7 1.71H19c.55 0 1-.45 1-1V6.41c0-.89-1.08-1.34-1.71-.71l-.64.65z"},carousel:{left:s,right:n,up:i,down:o,navigationIcon:"M0 0h24v24H0V0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"},chip:{remove:h,selected:z},datetime:{arrowLeft:s,arrowRight:n,now:"M0 0h24v24H0V0z@@fill:none;&&M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm-.22-13h-.06c-.4 0-.72.32-.72.72v4.72c0 .35.18.68.49.86l4.15 2.49c.34.2.78.1.98-.24.21-.34.1-.79-.25-.99l-3.87-2.3V7.72c0-.4-.32-.72-.72-.72z",today:"M0 0h24v24H0V0z@@fill:none;&&M19 3h-1V2c0-.55-.45-1-1-1s-1 .45-1 1v1H8V2c0-.55-.45-1-1-1s-1 .45-1 1v1H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V8h14v10c0 .55-.45 1-1 1zM8 10h3c.55 0 1 .45 1 1v3c0 .55-.45 1-1 1H8c-.55 0-1-.45-1-1v-3c0-.55.45-1 1-1z"},editor:{bold:"M0 0h24v24H0V0z@@fill:none;&&M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H8c-.55 0-1 .45-1 1v12c0 .55.45 1 1 1h5.78c2.07 0 3.96-1.69 3.97-3.77.01-1.53-.85-2.84-2.15-3.44zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z",italic:"M0 0h24v24H0V0z@@fill:none;&&M10 5.5c0 .83.67 1.5 1.5 1.5h.71l-3.42 8H7.5c-.83 0-1.5.67-1.5 1.5S6.67 18 7.5 18h5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5h-.71l3.42-8h1.29c.83 0 1.5-.67 1.5-1.5S17.33 4 16.5 4h-5c-.83 0-1.5.67-1.5 1.5z",strikethrough:"M0 0h24v24H0z@@fill:none;&&M14.59 7.52c0-.31-.05-.59-.15-.85-.09-.27-.24-.49-.44-.68-.2-.19-.45-.33-.75-.44-.3-.1-.66-.16-1.06-.16-.39 0-.74.04-1.03.13s-.53.21-.72.36c-.19.16-.34.34-.44.55-.1.21-.15.43-.15.66 0 .48.25.88.74 1.21.38.25.77.48 1.41.7H7.39c-.05-.08-.11-.17-.15-.25-.26-.48-.39-1.03-.39-1.67 0-.61.13-1.16.4-1.67.26-.5.63-.93 1.11-1.29.48-.35 1.05-.63 1.7-.83.66-.19 1.39-.29 2.18-.29.81 0 1.54.11 2.21.34.66.22 1.23.54 1.69.94.47.4.83.88 1.08 1.43s.38 1.15.38 1.81h-3.01M20 10H4c-.55 0-1 .45-1 1s.45 1 1 1h8.62c.18.07.4.14.55.2.37.17.66.34.87.51s.35.36.43.57c.07.2.11.43.11.69 0 .23-.05.45-.14.66-.09.2-.23.38-.42.53-.19.15-.42.26-.71.35-.29.08-.63.13-1.01.13-.43 0-.83-.04-1.18-.13s-.66-.23-.91-.42c-.25-.19-.45-.44-.59-.75s-.25-.76-.25-1.21H6.4c0 .55.08 1.13.24 1.58s.37.85.65 1.21c.28.35.6.66.98.92.37.26.78.48 1.22.65.44.17.9.3 1.38.39.48.08.96.13 1.44.13.8 0 1.53-.09 2.18-.28s1.21-.45 1.67-.79c.46-.34.82-.77 1.07-1.27s.38-1.07.38-1.71c0-.6-.1-1.14-.31-1.61-.05-.11-.11-.23-.17-.33H20c.55 0 1-.45 1-1V11c0-.55-.45-1-1-1z",underline:"M0 0h24v24H0V0z@@fill:none;&&M12.79 16.95c3.03-.39 5.21-3.11 5.21-6.16V4.25C18 3.56 17.44 3 16.75 3s-1.25.56-1.25 1.25v6.65c0 1.67-1.13 3.19-2.77 3.52-2.25.47-4.23-1.25-4.23-3.42V4.25C8.5 3.56 7.94 3 7.25 3S6 3.56 6 4.25V11c0 3.57 3.13 6.42 6.79 5.95zM5 20c0 .55.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1z",unorderedList:"M0 0h24v24H0V0z@@fill:none;&&M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM8 19h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm0-6h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zM7 6c0 .55.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1z",orderedList:"M0 0h24v24H0V0z@@fill:none;&&M8 7h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1s.45 1 1 1zm12 10H8c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zm0-6H8c-.55 0-1 .45-1 1s.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1zM4.5 16h-2c-.28 0-.5.22-.5.5s.22.5.5.5H4v.5h-.5c-.28 0-.5.22-.5.5s.22.5.5.5H4v.5H2.5c-.28 0-.5.22-.5.5s.22.5.5.5h2c.28 0 .5-.22.5-.5v-3c0-.28-.22-.5-.5-.5zm-2-11H3v2.5c0 .28.22.5.5.5s.5-.22.5-.5v-3c0-.28-.22-.5-.5-.5h-1c-.28 0-.5.22-.5.5s.22.5.5.5zm2 5h-2c-.28 0-.5.22-.5.5s.22.5.5.5h1.3l-1.68 1.96c-.08.09-.12.21-.12.32v.22c0 .28.22.5.5.5h2c.28 0 .5-.22.5-.5s-.22-.5-.5-.5H3.2l1.68-1.96c.08-.09.12-.21.12-.32v-.22c0-.28-.22-.5-.5-.5z",subscript:"M0 0h24v24H0V0z@@fill:none;&&M14.79 13H13V4c0-.55-.45-1-1-1s-1 .45-1 1v9H9.21c-.45 0-.67.54-.35.85l2.79 2.79c.2.2.51.2.71 0l2.79-2.79c.31-.31.09-.85-.36-.85zM4 20c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1H5c-.55 0-1 .45-1 1z",superscript:"M0 0h24v24H0V0z@@fill:none;&&M9.21 11H11v9c0 .55.45 1 1 1s1-.45 1-1v-9h1.79c.45 0 .67-.54.35-.85l-2.79-2.79c-.2-.2-.51-.2-.71 0l-2.79 2.79c-.31.31-.09.85.36.85zM4 4c0 .55.45 1 1 1h14c.55 0 1-.45 1-1s-.45-1-1-1H5c-.55 0-1 .45-1 1z",hyperlink:"M0 0 H24 V24 H0 V0 z@@fill:none;&&M17,7h-3c-0.55,0-1,0.45-1,1s0.45,1,1,1h3c1.65,0,3,1.35,3,3s-1.35,3-3,3h-3c-0.55,0-1,0.45-1,1c0,0.55,0.45,1,1,1h3 c2.76,0,5-2.24,5-5S19.76,7,17,7z M8,12c0,0.55,0.45,1,1,1h6c0.55,0,1-0.45,1-1s-0.45-1-1-1H9C8.45,11,8,11.45,8,12z M10,15H7 c-1.65,0-3-1.35-3-3s1.35-3,3-3h3c0.55,0,1-0.45,1-1s-0.45-1-1-1H7c-2.76,0-5,2.24-5,5s2.24,5,5,5h3c0.55,0,1-0.45,1-1 C11,15.45,10.55,15,10,15z",toggleFullscreen:"M0 0h24v24H0V0z@@fill:none;&&M6 14c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1h3c.55 0 1-.45 1-1s-.45-1-1-1H7v-2c0-.55-.45-1-1-1zm0-4c.55 0 1-.45 1-1V7h2c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1v3c0 .55.45 1 1 1zm11 7h-2c-.55 0-1 .45-1 1s.45 1 1 1h3c.55 0 1-.45 1-1v-3c0-.55-.45-1-1-1s-1 .45-1 1v2zM14 6c0 .55.45 1 1 1h2v2c0 .55.45 1 1 1s1-.45 1-1V6c0-.55-.45-1-1-1h-3c-.55 0-1 .45-1 1z",quote:"M0 0h24v24H0V0z@@fill:none;&&M7.17 17c.51 0 .98-.29 1.2-.74l1.42-2.84c.14-.28.21-.58.21-.89V8c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2l-1.03 2.06c-.45.89.2 1.94 1.2 1.94zm10 0c.51 0 .98-.29 1.2-.74l1.42-2.84c.14-.28.21-.58.21-.89V8c0-.55-.45-1-1-1h-4c-.55 0-1 .45-1 1v4c0 .55.45 1 1 1h2l-1.03 2.06c-.45.89.2 1.94 1.2 1.94z",left:M,center:"M0 0h24v24H0V0z@@fill:none;&&M7 16c0 .55.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1zm-3 5h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0-8h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm3-5c0 .55.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1z",right:"M0 0h24v24H0V0z@@fill:none;&&M4 21h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm6-4h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1zm-6-4h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm6-4h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1z",justify:"M0 0h24v24H0V0z@@fill:none;&&M4 21h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1z",print:"M0 0h24v24H0V0z@@fill:none;&&M19 8H5c-1.66 0-3 1.34-3 3v4c0 1.1.9 2 2 2h2v2c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2v-2h2c1.1 0 2-.9 2-2v-4c0-1.66-1.34-3-3-3zm-4 11H9c-.55 0-1-.45-1-1v-4h8v4c0 .55-.45 1-1 1zm4-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-2-9H7c-.55 0-1 .45-1 1v2c0 .55.45 1 1 1h10c.55 0 1-.45 1-1V4c0-.55-.45-1-1-1z",outdent:"M0 0h24v24H0V0z@@fill:none;&&M12 17h8c.55 0 1-.45 1-1s-.45-1-1-1h-8c-.55 0-1 .45-1 1s.45 1 1 1zm-8.65-4.65l2.79 2.79c.32.32.86.1.86-.35V9.21c0-.45-.54-.67-.85-.35l-2.79 2.79c-.2.19-.2.51-.01.7zM4 21h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1zm9 5h8c.55 0 1-.45 1-1s-.45-1-1-1h-8c-.55 0-1 .45-1 1s.45 1 1 1zm0 4h8c.55 0 1-.45 1-1s-.45-1-1-1h-8c-.55 0-1 .45-1 1s.45 1 1 1z",indent:"M0 0h24v24H0V0z@@fill:none;&&M4 21h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM3 9.21v5.59c0 .45.54.67.85.35l2.79-2.79c.2-.2.2-.51 0-.71l-2.79-2.8c-.31-.31-.85-.09-.85.36zM12 17h8c.55 0 1-.45 1-1s-.45-1-1-1h-8c-.55 0-1 .45-1 1s.45 1 1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1zm9 5h8c.55 0 1-.45 1-1s-.45-1-1-1h-8c-.55 0-1 .45-1 1s.45 1 1 1zm0 4h8c.55 0 1-.45 1-1s-.45-1-1-1h-8c-.55 0-1 .45-1 1s.45 1 1 1z",removeFormat:"M0 0h24v24H0V0z@@fill:none;&&M18.5 8c.83 0 1.5-.67 1.5-1.5S19.33 5 18.5 5H6.39l3 3h1.83l-.55 1.28 2.09 2.09L14.21 8h4.29zm-1.06 10.88L4.12 5.56c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41l6.26 6.26-1.65 3.84c-.39.92.28 1.93 1.27 1.93.55 0 1.05-.33 1.27-.84l1.21-2.83 4.95 4.95c.39.39 1.02.39 1.41 0 .4-.38.4-1.01.01-1.4z",formatting:"M0 0h24v24H0V0z@@fill:none;&&M5 18c0 .55.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1zm4.5-5.2h5l.66 1.6c.15.36.5.6.89.6.69 0 1.15-.71.88-1.34l-3.88-8.97C12.87 4.27 12.46 4 12 4c-.46 0-.87.27-1.05.69l-3.88 8.97c-.27.63.2 1.34.89 1.34.39 0 .74-.24.89-.6l.65-1.6zM12 5.98L13.87 11h-3.74L12 5.98z",fontSize:H,align:M,hr:"M0 0h24v24H0V0z@@fill:none;&&M18 13H6c-.55 0-1-.45-1-1s.45-1 1-1h12c.55 0 1 .45 1 1s-.45 1-1 1z",undo:"M0 0h24v24H0V0z@@fill:none;&&M12.5 8c-2.65 0-5.05.99-6.9 2.6L3.71 8.71C3.08 8.08 2 8.52 2 9.41V15c0 .55.45 1 1 1h5.59c.89 0 1.34-1.08.71-1.71l-1.91-1.91c1.39-1.16 3.16-1.88 5.12-1.88 3.16 0 5.89 1.84 7.19 4.5.27.56.91.84 1.5.64.71-.23 1.07-1.04.75-1.72C20.23 10.42 16.65 8 12.5 8z",redo:"M0 0h24v24H0V0z@@fill:none;&&M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.16 0-7.74 2.42-9.44 5.93-.32.67.04 1.47.75 1.71.59.2 1.23-.08 1.5-.64 1.3-2.66 4.03-4.5 7.19-4.5 1.95 0 3.73.72 5.12 1.88l-1.91 1.91c-.63.63-.19 1.71.7 1.71H21c.55 0 1-.45 1-1V9.41c0-.89-1.08-1.34-1.71-.71l-1.89 1.9z",heading:H,code:e,size:H,font:"M0 0h24v24H0V0z@@fill:none;&&M9.93 13.5h4.14L12 7.98 9.93 13.5zM20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.29 15.88l-.9-2.38H9.17l-.89 2.37c-.14.38-.5.63-.91.63-.68 0-1.15-.69-.9-1.32l4.25-10.81c.22-.53.72-.87 1.28-.87s1.06.34 1.27.87l4.25 10.81c.25.63-.22 1.32-.9 1.32-.4 0-.76-.25-.91-.62z",viewSource:e},expansionItem:{icon:o,denseIcon:c},fab:{icon:"M0 0h24v24H0V0z@@fill:none;&&M18 13h-5v5c0 .55-.45 1-1 1s-1-.45-1-1v-5H6c-.55 0-1-.45-1-1s.45-1 1-1h5V6c0-.55.45-1 1-1s1 .45 1 1v5h5c.55 0 1 .45 1 1s-.45 1-1 1z",activeIcon:"M0 0h24v24H0V0z@@fill:none;&&M18.3 5.71c-.39-.39-1.02-.39-1.41 0L12 10.59 7.11 5.7c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41L10.59 12 5.7 16.89c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L12 13.41l4.89 4.89c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L13.41 12l4.89-4.89c.38-.38.38-1.02 0-1.4z"},field:{clear:h,error:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 11c-.55 0-1-.45-1-1V8c0-.55.45-1 1-1s1 .45 1 1v4c0 .55-.45 1-1 1zm1 4h-2v-2h2v2z"},pagination:{first:v,prev:"M14.71 15.88L10.83 12l3.88-3.88c.39-.39.39-1.02 0-1.41-.39-.39-1.02-.39-1.41 0L8.71 11.3c-.39.39-.39 1.02 0 1.41l4.59 4.59c.39.39 1.02.39 1.41 0 .38-.39.39-1.03 0-1.42z",next:"M9.29 15.88L13.17 12 9.29 8.12c-.39-.39-.39-1.02 0-1.41.39-.39 1.02-.39 1.41 0l4.59 4.59c.39.39.39 1.02 0 1.41L10.7 17.3c-.39.39-1.02.39-1.41 0-.38-.39-.39-1.03 0-1.42z",last:V},rating:{icon:"M0 0h24v24H0V0z@@fill:none;&&M12 17.27l5.17 3.12c.38.23.85-.11.75-.54l-1.37-5.88 4.56-3.95c.33-.29.16-.84-.29-.88l-6.01-.51-2.35-5.54c-.17-.41-.75-.41-.92 0L9.19 8.63l-6.01.51c-.44.04-.62.59-.28.88l4.56 3.95-1.37 5.88c-.1.43.37.77.75.54L12 17.27z"},stepper:{done:z,active:"M0 0h24v24H0V0z@@fill:none;&&M3 17.46v3.04c0 .28.22.5.5.5h3.04c.13 0 .26-.05.35-.15L17.81 9.94l-3.75-3.75L3.15 17.1c-.1.1-.15.22-.15.36zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z",error:f},tabs:{left:s,right:n,up:i,down:o},table:{arrowUp:l,warning:f,firstPage:v,prevPage:s,nextPage:n,lastPage:V},tree:{icon:"M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18c.62-.39.62-1.29 0-1.69L9.54 5.98C8.87 5.55 8 6.03 8 6.82z"},uploader:{done:"M0 0h24v24H0V0z@@fill:none;&&M9 16.2l-3.5-3.5c-.39-.39-1.01-.39-1.4 0-.39.39-.39 1.01 0 1.4l4.19 4.19c.39.39 1.02.39 1.41 0L20.3 7.7c.39-.39.39-1.01 0-1.4-.39-.39-1.01-.39-1.4 0L9 16.2z",clear:"M0 0h24v24H0V0z@@fill:none;&&M18.3 5.71c-.39-.39-1.02-.39-1.41 0L12 10.59 7.11 5.7c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41L10.59 12 5.7 16.89c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L12 13.41l4.89 4.89c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L13.41 12l4.89-4.89c.38-.38.38-1.02 0-1.4z",add:"M0 0h24v24H0V0z@@fill:none;&&M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 10h-3v3c0 .55-.45 1-1 1s-1-.45-1-1v-3H8c-.55 0-1-.45-1-1s.45-1 1-1h3V8c0-.55.45-1 1-1s1 .45 1 1v3h3c.55 0 1 .45 1 1s-.45 1-1 1z",upload:"M0 0h24v24H0V0z@@fill:none;&&M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l4.65-4.65c.2-.2.51-.2.71 0L17 13h-3z",removeQueue:"M0 0h24v24H0V0z@@fill:none;&&M6 13h12c.55 0 1-.45 1-1s-.45-1-1-1H6c-.55 0-1 .45-1 1s.45 1 1 1zm-2 4h12c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm3-9c0 .55.45 1 1 1h12c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1z",removeUploaded:"M0 0h24v24H0V0z@@fill:none;&&M17.3 6.3c-.39-.39-1.02-.39-1.41 0l-5.64 5.64 1.41 1.41L17.3 7.7c.38-.38.38-1.02 0-1.4zm4.24-.01l-9.88 9.88-3.48-3.47c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41l4.18 4.18c.39.39 1.02.39 1.41 0L22.95 7.71c.39-.39.39-1.02 0-1.41h-.01c-.38-.4-1.01-.4-1.4-.01zM1.12 14.12L5.3 18.3c.39.39 1.02.39 1.41 0l.7-.7-4.88-4.9c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.03 0 1.42z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-material-icons-sharp.umd.min.js b/dist/icon-set/svg-material-icons-sharp.umd.min.js new file mode 100644 index 00000000000..7c7c2ce61bc --- /dev/null +++ b/dist/icon-set/svg-material-icons-sharp.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(v,h){"object"==typeof exports&&"undefined"!=typeof module?module.exports=h():"function"==typeof define&&define.amd?define(h):((v="undefined"!=typeof globalThis?globalThis:v||self).Quasar=v.Quasar||{},v.Quasar.iconSet=v.Quasar.iconSet||{},v.Quasar.iconSet.svgMaterialIconsSharp=h())}(this,function(){"use strict";var v="M0 0h24v24H0V0z@@fill:none;&&M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z",h="M0 0h24v24H0V0z@@fill:none;opacity:.87;&&M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z",z="M0 0h24v24H0V0z@@fill:none;&&M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z",l="M0 0h24v24H0V0z@@fill:none;&&M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12l4.58-4.59z",e="M0 0h24v24H0V0z@@fill:none;&&M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6-6-6z",n="M0 0h24v24H0V0z@@fill:none;&&M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z",H="M24 0v24H0V0h24z@@fill:none;opacity:.87;&&M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6 1.41-1.41zM6 6h2v12H6V6z",M="M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z",o="M9 4v3h5v12h3V7h5V4H9zm-6 8h3v7h3v-7h3V9H3v3z",i="M0 0h24v24H0V0z@@fill:none;&&M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z",V="M0 0h24v24H0V0z@@fill:none;&&M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6 1.41 1.41z",m="M0 0h24v24H0V0z@@fill:none;opacity:.87;&&M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6-1.41 1.41zM16 6h2v12h-2V6z",t="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z";return{name:"svg-material-icons-sharp",type:{positive:"M0 0h24v24H0V0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z",negative:t,info:"M0 0h24v24H0V0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z",warning:"M0 0h24v24H0V0z@@fill:none;&&M12 19 m-2, 0 a2,2 0 1,0 4,0 a2,2 0 1,0 -4,0&&M10 3h4v12h-4z"},arrow:{up:v,right:"M0 0h24v24H0V0z@@fill:none;&&M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8-8-8z",down:"M0 0h24v24H0V0z@@fill:none;&&M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z",left:"M0 0h24v24H0V0z@@fill:none;&&M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z",dropdown:"M0 0h24v24H0V0z@@fill:none;&&M7 10l5 5 5-5H7z"},chevron:{left:l,right:e},colorPicker:{spectrum:"M0 0h24v24H0z@@fill:none;&&M11 9h2v2h-2V9zm-2 2h2v2H9v-2zm4 0h2v2h-2v-2zm2-2h2v2h-2V9zM7 9h2v2H7V9zm14-6H3v18h18V3zM9 18H7v-2h2v2zm4 0h-2v-2h2v2zm4 0h-2v-2h2v2zm2-7h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v2H9v-2H7v2H5v-2h2v-2H5V5h14v6z",tune:"M0 0h24v24H0V0z@@fill:none;&&M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z",palette:"M0 0h24v24H0V0z@@fill:none;&&M3.87 20.21v-9.03l-3.19 7.7 3.19 1.33zm18.92-2.43L16.31 2.14 5.26 6.71l6.48 15.64 11.05-4.57zM7.88 8.75c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-2 13h3.45l-3.45-8.34v8.34z"},pullToRefresh:{icon:"M0 0h24v24H0V0z@@fill:none;&&M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"},carousel:{left:l,right:e,up:V,down:i,navigationIcon:"M0 0h24v24H0V0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"},chip:{remove:h,selected:z},datetime:{arrowLeft:l,arrowRight:e,now:"M0 0h24v24H0V0z@@fill:none;&&M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z",today:"M0 0h24v24H0V0z@@fill:none;&&M21 3h-3V1h-2v2H8V1H6v2H3v18h18V3zm-2 16H5V8h14v11zM7 10h5v5H7v-5z"},editor:{bold:"M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z",italic:"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4h-8z",strikethrough:"M7.24 8.75c-.26-.48-.39-1.03-.39-1.67 0-.61.13-1.16.4-1.67.26-.5.63-.93 1.11-1.29.48-.35 1.05-.63 1.7-.83.66-.19 1.39-.29 2.18-.29.81 0 1.54.11 2.21.34.66.22 1.23.54 1.69.94.47.4.83.88 1.08 1.43s.38 1.15.38 1.81h-3.01c0-.31-.05-.59-.15-.85-.09-.27-.24-.49-.44-.68-.2-.19-.45-.33-.75-.44-.3-.1-.66-.16-1.06-.16-.39 0-.74.04-1.03.13s-.53.21-.72.36c-.19.16-.34.34-.44.55-.1.21-.15.43-.15.66 0 .48.25.88.74 1.21.38.25.77.48 1.41.7H7.39c-.05-.08-.11-.17-.15-.25zM21 12v-2H3v2h9.62c.18.07.4.14.55.2.37.17.66.34.87.51s.35.36.43.57c.07.2.11.43.11.69 0 .23-.05.45-.14.66-.09.2-.23.38-.42.53-.19.15-.42.26-.71.35-.29.08-.63.13-1.01.13-.43 0-.83-.04-1.18-.13s-.66-.23-.91-.42c-.25-.19-.45-.44-.59-.75s-.25-.76-.25-1.21H6.4c0 .55.08 1.13.24 1.58s.37.85.65 1.21c.28.35.6.66.98.92.37.26.78.48 1.22.65.44.17.9.3 1.38.39.48.08.96.13 1.44.13.8 0 1.53-.09 2.18-.28s1.21-.45 1.67-.79c.46-.34.82-.77 1.07-1.27s.38-1.07.38-1.71c0-.6-.1-1.14-.31-1.61-.05-.11-.11-.23-.17-.33H21V12z",underline:"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z",unorderedList:"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z",orderedList:"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z",subscript:"M16 13h-3V3h-2v10H8l4 4 4-4zM4 19v2h16v-2H4z",superscript:"M8 11h3v10h2V11h3l-4-4-4 4zM4 3v2h16V3H4z",hyperlink:"M0 0h24v24H0V0z@@fill:none;&&M17 7h-4v2h4c1.65 0 3 1.35 3 3s-1.35 3-3 3h-4v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-6 8H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-2zm-3-4h8v2H8zm9-4h-4v2h4c1.65 0 3 1.35 3 3s-1.35 3-3 3h-4v2h4c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-6 8H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-2zm-3-4h8v2H8z",toggleFullscreen:"M0 0h24v24H0V0z@@fill:none;&&M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z",quote:"M5 17h3l2-4V7H4v6h3l-2 4zm10 0h3l2-4V7h-6v6h3l-2 4z",left:M,center:"M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z",right:"M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z",justify:"M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z",print:"M0 0h24v24H0V0z@@fill:none;&&M22 8H2v9h4v4h12v-4h4V8zm-6 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z",outdent:"M11 17h10v-2H11v2zm-8-5l4 4V8l-4 4zm0 9h18v-2H3v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z",indent:"M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z",removeFormat:"M20 8V5H6.39l3 3h1.83l-.55 1.28 2.09 2.1L14.21 8zM3.41 4.86L2 6.27l6.97 6.97L6.5 19h3l1.57-3.66L16.73 21l1.41-1.41z",formatting:"M0 0h24v24H0V0z@@fill:none;&&M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L6.5 15h2.1l.9-2.2zM12 5.98L13.87 11h-3.74L12 5.98z",fontSize:o,align:M,hr:"M0 0h24v24H0V0z@@fill:none;&&M19 13H5v-2h14v2z",undo:"M0 0h24v24H0V0z@@fill:none;&&M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z",redo:"M0 0h24v24H0V0z@@fill:none;&&M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z",heading:o,code:n,size:o,font:"M0 0h24v24H0V0z@@fill:none;&&M9.93 13.5h4.14L12 7.98 9.93 13.5zM22 2H2v20h20V2zm-6.05 16.5l-1.14-3H9.17l-1.12 3H5.96l5.11-13h1.86l5.11 13h-2.09z",viewSource:n},expansionItem:{icon:i,denseIcon:"M0 0h24v24H0V0z@@fill:none;&&M7 10l5 5 5-5H7z"},fab:{icon:"M0 0h24v24H0V0z@@fill:none;&&M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z",activeIcon:"M0 0h24v24H0V0z@@fill:none;&&M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"},field:{clear:h,error:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"},pagination:{first:H,prev:"M0 0h24v24H0V0z@@fill:none;&&M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z",next:"M0 0h24v24H0V0z@@fill:none;&&M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z",last:m},rating:{icon:"M0 0h24v24H0V0z@@fill:none;&&M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27z"},stepper:{done:z,active:"M0 0h24v24H0V0z@@fill:none;&&M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM21.41 6.34l-3.75-3.75-2.53 2.54 3.75 3.75 2.53-2.54z",error:t},tabs:{left:l,right:e,up:V,down:i},table:{arrowUp:v,warning:t,firstPage:H,prevPage:l,nextPage:e,lastPage:m},tree:{icon:"M0 0h24v24H0V0z@@fill:none;&&M8 5v14l11-7L8 5z"},uploader:{done:"M0 0h24v24H0V0z@@fill:none;&&M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z",clear:"M0 0h24v24H0V0z@@fill:none;&&M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z",add:"M0 0h24v24H0V0z@@fill:none;&&M21 3H3v18h18V3zm-4 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z",upload:"M0 0h24v24H0V0z@@fill:none;&&M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z",removeQueue:"M0 0h24v24H0V0z@@fill:none;&&M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z",removeUploaded:"M0 0h24v24H0V0z@@fill:none;&&M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-material-icons.umd.min.js b/dist/icon-set/svg-material-icons.umd.min.js new file mode 100644 index 00000000000..1208964da05 --- /dev/null +++ b/dist/icon-set/svg-material-icons.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(v,h){"object"==typeof exports&&"undefined"!=typeof module?module.exports=h():"function"==typeof define&&define.amd?define(h):((v="undefined"!=typeof globalThis?globalThis:v||self).Quasar=v.Quasar||{},v.Quasar.iconSet=v.Quasar.iconSet||{},v.Quasar.iconSet.svgMaterialIcons=h())}(this,function(){"use strict";var v="M0 0h24v24H0V0z@@fill:none;&&M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z",h="M0 0h24v24H0z@@fill:none;&&M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z",l="M0 0h24v24H0z@@fill:none;&&M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z",z="M0 0h24v24H0z@@fill:none;&&M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",n="M0 0h24v24H0z@@fill:none;&&M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",e="M0 0h24v24H0V0z@@fill:none;&&M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z",H="M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z&&M24 24H0V0h24v24z@@fill:none;",M="M0 0h24v24H0z@@fill:none;&&M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z",o="M0 0h24v24H0z@@fill:none;&&M9 4v3h5v12h3V7h5V4H9zm-6 8h3v7h3v-7h3V9H3v3z",i="M0 0h24v24H0V0z@@fill:none;&&M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z",c="M0 0h24v24H0z@@fill:none;&&M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z",f="M0 0h24v24H0V0z@@fill:none;&&M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z",m="M0 0h24v24H0z@@fill:none;&&M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z";return{name:"svg-material-icons",type:{positive:"M0 0h24v24H0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z",negative:m,info:"M0 0h24v24H0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z",warning:"M0 0h24v24H0z@@fill:none;&&M12 19 m-2, 0 a2,2 0 1,0 4,0 a2,2 0 1,0 -4,0&&M10 3h4v12h-4z"},arrow:{up:v,right:"M0 0h24v24H0z@@fill:none;&&M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",down:"M0 0h24v24H0V0z@@fill:none;&&M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z",left:"M0 0h24v24H0z@@fill:none;&&M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z",dropdown:"M0 0h24v24H0z@@fill:none;&&M7 10l5 5 5-5z"},chevron:{left:z,right:n},colorPicker:{spectrum:"M0 0h24v24H0z@@fill:none;&&M11 9h2v2h-2zm-2 2h2v2H9zm4 0h2v2h-2zm2-2h2v2h-2zM7 9h2v2H7zm12-6H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 18H7v-2h2v2zm4 0h-2v-2h2v2zm4 0h-2v-2h2v2zm2-7h-2v2h2v2h-2v-2h-2v2h-2v-2h-2v2H9v-2H7v2H5v-2h2v-2H5V5h14v6z",tune:"M0 0h24v24H0z@@fill:none;&&M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z",palette:"M0 0h24v24H0z@@fill:none;&&M2.53 19.65l1.34.56v-9.03l-2.43 5.86c-.41 1.02.08 2.19 1.09 2.61zm19.5-3.7L17.07 3.98c-.31-.75-1.04-1.21-1.81-1.23-.26 0-.53.04-.79.15L7.1 5.95c-.75.31-1.21 1.03-1.23 1.8-.01.27.04.54.15.8l4.96 11.97c.31.76 1.05 1.22 1.83 1.23.26 0 .52-.05.77-.15l7.36-3.05c1.02-.42 1.51-1.59 1.09-2.6zM7.88 8.75c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-2 11c0 1.1.9 2 2 2h1.45l-3.45-8.34v6.34z"},pullToRefresh:{icon:"M0 0h24v24H0z@@fill:none;&&M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"},carousel:{left:z,right:n,up:c,down:i,navigationIcon:"M0 0h24v24H0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2z"},chip:{remove:h,selected:l},datetime:{arrowLeft:z,arrowRight:n,now:"M0 0h24v24H0z@@fill:none;&&M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z&&M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z",today:"M0 0h24v24H0z@@fill:none;&&M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"},editor:{bold:"M0 0h24v24H0z@@fill:none;&&M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z",italic:"M0 0h24v24H0z@@fill:none;&&M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z",strikethrough:"M0 0 H24 V24 H0 V0 z@@fill:none;&&M6.85,7.08C6.85,4.37,9.45,3,12.24,3c1.64,0,3,0.49,3.9,1.28c0.77,0.65,1.46,1.73,1.46,3.24h-3.01 c0-0.31-0.05-0.59-0.15-0.85c-0.29-0.86-1.2-1.28-2.25-1.28c-1.86,0-2.34,1.02-2.34,1.7c0,0.48,0.25,0.88,0.74,1.21 C10.97,8.55,11.36,8.78,12,9H7.39C7.18,8.66,6.85,8.11,6.85,7.08z M21,12v-2H3v2h9.62c1.15,0.45,1.96,0.75,1.96,1.97 c0,1-0.81,1.67-2.28,1.67c-1.54,0-2.93-0.54-2.93-2.51H6.4c0,0.55,0.08,1.13,0.24,1.58c0.81,2.29,3.29,3.3,5.67,3.3 c2.27,0,5.3-0.89,5.3-4.05c0-0.3-0.01-1.16-0.48-1.94H21V12z",underline:"M0 0h24v24H0z@@fill:none;&&M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z",unorderedList:"M0 0h24v24H0V0z@@fill:none;&&M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z",orderedList:"M0 0h24v24H0z@@fill:none;&&M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z",subscript:"M0 0h24v24H0z@@fill:none;&&M16 13h-3V3h-2v10H8l4 4 4-4zM4 19v2h16v-2H4z",superscript:"M0 0h24v24H0z@@fill:none;&&M8 11h3v10h2V11h3l-4-4-4 4zM4 3v2h16V3H4z",hyperlink:"M0 0h24v24H0z@@fill:none;&&M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z",toggleFullscreen:"M0 0h24v24H0z@@fill:none;&&M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z",quote:"M0 0h24v24H0z@@fill:none;&&M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z",left:M,center:"M0 0h24v24H0z@@fill:none;&&M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z",right:"M0 0h24v24H0z@@fill:none;&&M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z",justify:"M0 0h24v24H0z@@fill:none;&&M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z",print:"M0 0h24v24H0z@@fill:none;&&M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z",outdent:"M0 0h24v24H0z@@fill:none;&&M11 17h10v-2H11v2zm-8-5l4 4V8l-4 4zm0 9h18v-2H3v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z",indent:"M0 0h24v24H0z@@fill:none;&&M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z",removeFormat:"M0 0h24v24H0z@@fill:none;&&M3.27 5L2 6.27l6.97 6.97L6.5 19h3l1.57-3.66L16.73 21 18 19.73 3.55 5.27 3.27 5zM6 5v.18L8.82 8h2.4l-.72 1.68 2.1 2.1L14.21 8H20V5H6z",formatting:"M0 0h24v24H0z@@fill:none;&&M5 17v2h14v-2H5zm4.5-4.2h5l.9 2.2h2.1L12.75 4h-1.5L6.5 15h2.1l.9-2.2zM12 5.98L13.87 11h-3.74L12 5.98z",fontSize:o,align:M,hr:"M0 0h24v24H0z@@fill:none;&&M19 13H5v-2h14v2z",undo:"M0 0h24v24H0z@@fill:none;&&M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z",redo:"M0 0h24v24H0z@@fill:none;&&M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z",heading:o,code:e,size:o,font:"M0 0h24v24H0V0z@@fill:none;&&M9.93 13.5h4.14L12 7.98zM20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-4.05 16.5l-1.14-3H9.17l-1.12 3H5.96l5.11-13h1.86l5.11 13h-2.09z",viewSource:e},expansionItem:{icon:i,denseIcon:"M0 0h24v24H0z@@fill:none;&&M7 10l5 5 5-5z"},fab:{icon:"M0 0h24v24H0z@@fill:none;&&M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z",activeIcon:"M0 0h24v24H0z@@fill:none;&&M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"},field:{clear:h,error:"M0 0h24v24H0z@@fill:none;&&M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"},pagination:{first:H,prev:"M0 0h24v24H0V0z@@fill:none;&&M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z",next:"M0 0h24v24H0V0z@@fill:none;&&M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z",last:f},rating:{icon:"M0 0h24v24H0z@@fill:none;&&M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"},stepper:{done:l,active:"M0 0h24v24H0z@@fill:none;&&M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z",error:m},tabs:{left:z,right:n,up:c,down:i},table:{arrowUp:v,warning:m,firstPage:H,prevPage:z,nextPage:n,lastPage:f},tree:{icon:"M0 0h24v24H0z@@fill:none;&&M8 5v14l11-7z"},uploader:{done:"M0 0h24v24H0z@@fill:none;&&M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z",clear:"M0 0h24v24H0z@@fill:none;&&M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z",add:"M0 0h24v24H0z@@fill:none;&&M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z",upload:"M0 0h24v24H0z@@fill:none;&&M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z",removeQueue:"M0 0h24v24H0z@@fill:none;&&M5 13h14v-2H5v2zm-2 4h14v-2H3v2zM7 7v2h14V7H7z",removeUploaded:"M0 0h24v24H0z@@fill:none;&&M18 7l-1.41-1.41-6.34 6.34 1.41 1.41L18 7zm4.24-1.41L11.66 16.17 7.48 12l-1.41 1.41L11.66 19l12-12-1.42-1.41zM.41 13.41L6 19l1.41-1.41L1.83 12 .41 13.41z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-material-symbols-outlined.umd.min.js b/dist/icon-set/svg-material-symbols-outlined.umd.min.js new file mode 100644 index 00000000000..f21b50e49cb --- /dev/null +++ b/dist/icon-set/svg-material-symbols-outlined.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(v,Z){"object"==typeof exports&&"undefined"!=typeof module?module.exports=Z():"function"==typeof define&&define.amd?define(Z):((v="undefined"!=typeof globalThis?globalThis:v||self).Quasar=v.Quasar||{},v.Quasar.iconSet=v.Quasar.iconSet||{},v.Quasar.iconSet.svgMaterialSymbolsOutlined=Z())}(this,function(){"use strict";var v="M0 0zm8.4 17 3.6-3.6 3.6 3.6 1.4-1.4-3.6-3.6L17 8.4 15.6 7 12 10.6 8.4 7 7 8.4l3.6 3.6L7 15.6Zm3.6 5q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z",Z="M0 0zm9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4Z",h="M0 0zm14 18-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z",m="M9.4 18 8 16.6l4.6-4.6L8 7.4 9.4 6l6 6Z",q="M6.4 19 5 17.6l5.6-5.6L5 6.4 6.4 5l5.6 5.6L17.6 5 19 6.4 13.4 12l5.6 5.6-1.4 1.4-5.6-5.6Z",Q="M0 0zm8 18-6-6 6-6 1.425 1.425-4.6 4.6L9.4 16.6Zm8 0-1.425-1.425 4.6-4.6L14.6 7.4 16 6l6 6Z",t="M14 20V7H9V4h13v3h-5v13Zm-9 0v-8H2V9h9v3H8v8Z",e="M1 21 12 2l11 19Zm3.45-2h15.1L12 6ZM12 18q.425 0 .713-.288Q13 17.425 13 17t-.287-.712Q12.425 16 12 16t-.712.288Q11 16.575 11 17t.288.712Q11.575 18 12 18Zm-1-3h2v-5h-2Zm1-2.5Z";return{name:"svg-material-symbols-outlined",type:{positive:"M0 0zm10.6 16.6 7.05-7.05-1.4-1.4-5.65 5.65-2.85-2.85-1.4 1.4ZM12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z",negative:e,info:"M11 17h2v-6h-2Zm1-8q.425 0 .713-.288Q13 8.425 13 8t-.287-.713Q12.425 7 12 7t-.712.287Q11 7.575 11 8t.288.712Q11.575 9 12 9Zm0 13q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z",warning:"M12 21q-.825 0-1.412-.587Q10 19.825 10 19q0-.825.588-1.413Q11.175 17 12 17t1.413.587Q14 18.175 14 19q0 .825-.587 1.413Q12.825 21 12 21Zm-2-6V3h4v12Z"},arrow:{up:"M11 20V7.825l-5.6 5.6L4 12l8-8 8 8-1.4 1.425-5.6-5.6V20Z",right:"M0 0zm12 20-1.425-1.4 5.6-5.6H4v-2h12.175l-5.6-5.6L12 4l8 8Z",down:"M0 0zm12 20-8-8 1.4-1.425 5.6 5.6V4h2v12.175l5.6-5.6L20 12Z",left:"M0 0zm12 20-8-8 8-8 1.425 1.4-5.6 5.6H20v2H7.825l5.6 5.6Z",dropdown:"M0 0zm12 15-5-5h10Z"},chevron:{left:h,right:m},colorPicker:{spectrum:"M11 13v-2h2v2Zm-2 2v-2h2v2Zm4 0v-2h2v2Zm2-2v-2h2v2Zm-8 0v-2h2v2Zm-2 8q-.825 0-1.413-.587Q3 19.825 3 19V5q0-.825.587-1.413Q4.175 3 5 3h14q.825 0 1.413.587Q21 4.175 21 5v14q0 .825-.587 1.413Q19.825 21 19 21Zm2-2h2v-2H7Zm4 0h2v-2h-2Zm8 0v-2ZM5 17h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2V5H5v8h2v2H5Zm0 2V5v14Zm14-6v2-2Zm-4 4v2h2v-2Z",tune:"M11 21v-6h2v2h8v2h-8v2Zm-8-2v-2h6v2Zm4-4v-2H3v-2h4V9h2v6Zm4-2v-2h10v2Zm4-4V3h2v2h4v2h-4v2ZM3 7V5h10v2Z",palette:"M0 0zm3.975 19.8-.85-.35q-.775-.325-1.037-1.125-.263-.8.087-1.575l1.8-3.9Zm4 2.2q-.825 0-1.413-.587-.587-.588-.587-1.413v-6l2.65 7.35q.075.175.15.338.075.162.2.312Zm5.15-.1q-.8.3-1.55-.075t-1.05-1.175l-4.45-12.2q-.3-.8.05-1.563.35-.762 1.15-1.037l7.55-2.75q.8-.3 1.55.075t1.05 1.175l4.45 12.2q.3.8-.05 1.563-.35.762-1.15 1.037ZM10.975 10q.425 0 .713-.288.287-.287.287-.712t-.287-.713Q11.4 8 10.975 8t-.712.287q-.288.288-.288.713t.288.712q.287.288.712.288Zm1.45 10 7.55-2.75L15.525 5l-7.55 2.75ZM7.975 7.75 15.525 5Z"},pullToRefresh:{icon:"M12 20q-3.35 0-5.675-2.325Q4 15.35 4 12q0-3.35 2.325-5.675Q8.65 4 12 4q1.725 0 3.3.713 1.575.712 2.7 2.037V4h2v7h-7V9h4.2q-.8-1.4-2.187-2.2Q13.625 6 12 6 9.5 6 7.75 7.75T6 12q0 2.5 1.75 4.25T12 18q1.925 0 3.475-1.1T17.65 14h2.1q-.7 2.65-2.85 4.325Q14.75 20 12 20Z"},carousel:{left:h,right:m,up:"M7.4 15.4 6 14l6-6 6 6-1.4 1.4-4.6-4.6Z",down:"M0 0zm12 15.4-6-6L7.4 8l4.6 4.6L16.6 8 18 9.4Z",navigationIcon:"M12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z"},chip:{remove:v,selected:Z},datetime:{arrowLeft:h,arrowRight:m,now:"M0 0zm15.3 16.7 1.4-1.4-3.7-3.7V7h-2v5.4ZM12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-10Zm0 8q3.325 0 5.663-2.337Q20 15.325 20 12t-2.337-5.663Q15.325 4 12 4T6.338 6.337Q4 8.675 4 12t2.338 5.663Q8.675 20 12 20Z",today:"M9 16.5q-1.05 0-1.775-.725Q6.5 15.05 6.5 14q0-1.05.725-1.775Q7.95 11.5 9 11.5q1.05 0 1.775.725.725.725.725 1.775 0 1.05-.725 1.775Q10.05 16.5 9 16.5ZM5 22q-.825 0-1.413-.587Q3 20.825 3 20V6q0-.825.587-1.412Q4.175 4 5 4h1V2h2v2h8V2h2v2h1q.825 0 1.413.588Q21 5.175 21 6v14q0 .825-.587 1.413Q19.825 22 19 22Zm0-2h14V10H5v10ZM5 8h14V6H5Zm0 0V6v2Z"},editor:{bold:"M7 18V4h5.5q1.7 0 2.975 1.025Q16.75 6.05 16.75 7.65q0 .95-.5 1.762-.5.813-1.35 1.238v.2q1.05.35 1.7 1.237.65.888.65 2.013 0 1.725-1.387 2.813Q14.475 18 12.65 18Zm2.65-8.3h2.65q.75 0 1.325-.475t.575-1.2q0-.725-.575-1.2T12.3 6.35H9.65Zm0 5.9h2.85q.85 0 1.475-.513.625-.512.625-1.312t-.625-1.313q-.625-.512-1.475-.512H9.65Z",italic:"M5 20v-3h3.375l4-10H9V4h10v3h-3.375l-4 10H15v3Z",strikethrough:"M12.15 20q-1.9 0-3.375-1.125T6.65 15.8l2.2-.95q.35 1.2 1.212 1.975.863.775 2.138.775 1.05 0 1.9-.5.85-.5.85-1.6 0-.45-.175-.825Q14.6 14.3 14.3 14h2.8q.125.35.188.712.062.363.062.788 0 2.15-1.538 3.325Q14.275 20 12.15 20ZM2 12v-2h20v2Zm10.05-8.15q1.65 0 2.888.812 1.237.813 1.912 2.488l-2.2.975q-.225-.725-.838-1.3Q13.2 6.25 12.1 6.25q-1.025 0-1.7.463-.675.462-.75 1.287h-2.4q.05-1.725 1.363-2.938Q9.925 3.85 12.05 3.85Z",underline:"M5 21v-2h14v2Zm7-4q-2.525 0-4.263-1.738Q6 13.525 6 11V3h2.5v8q0 1.475 1.012 2.488Q10.525 14.5 12 14.5t2.488-1.012Q15.5 12.475 15.5 11V3H18v8q0 2.525-1.738 4.262Q14.525 17 12 17Z",unorderedList:"M4.5 19.5q-.625 0-1.062-.438Q3 18.625 3 18t.438-1.062Q3.875 16.5 4.5 16.5t1.062.438Q6 17.375 6 18t-.438 1.062q-.437.438-1.062.438ZM8 19v-2h13v2Zm-3.5-5.5q-.625 0-1.062-.438Q3 12.625 3 12t.438-1.062Q3.875 10.5 4.5 10.5t1.062.438Q6 11.375 6 12t-.438 1.062q-.437.438-1.062.438ZM8 13v-2h13v2ZM4.5 7.5q-.625 0-1.062-.438Q3 6.625 3 6t.438-1.062Q3.875 4.5 4.5 4.5t1.062.438Q6 5.375 6 6t-.438 1.062Q5.125 7.5 4.5 7.5ZM8 7V5h13v2Z",orderedList:"M3 20v-1h2v-.5H4v-1h1V17H3v-1h3v4Zm5-1v-2h13v2Zm-5-5v-.9L4.8 11H3v-1h3v.9L4.2 13H6v1Zm5-1v-2h13v2ZM4 8V5H3V4h2v4Zm4-1V5h13v2Z",subscript:"M4 21v-2h16v2Zm8-4-5-5 1.4-1.4 2.6 2.6V3h2v10.2l2.6-2.6L17 12Z",superscript:"M11 21V10.8l-2.6 2.6L7 12l5-5 5 5-1.4 1.4-2.6-2.6V21ZM4 5V3h16v2Z",hyperlink:"M11 17H7q-2.075 0-3.537-1.463Q2 14.075 2 12t1.463-3.538Q4.925 7 7 7h4v2H7q-1.25 0-2.125.875T4 12q0 1.25.875 2.125T7 15h4Zm-3-4v-2h8v2Zm5 4v-2h4q1.25 0 2.125-.875T20 12q0-1.25-.875-2.125T17 9h-4V7h4q2.075 0 3.538 1.462Q22 9.925 22 12q0 2.075-1.462 3.537Q19.075 17 17 17Z",toggleFullscreen:"M5 19v-5h2v3h3v2Zm0-9V5h5v2H7v3Zm9 9v-2h3v-3h2v5Zm3-9V7h-3V5h5v5Z",quote:"M15 11h3V8h-3Zm-9 0h3V8H6Zm9 6 2-4h-4V6h7v7l-2 4Zm-9 0 2-4H4V6h7v7l-2 4Zm1.5-7.5Zm9 0Z",left:"M3 21v-2h18v2Zm0-4v-2h12v2Zm0-4v-2h18v2Zm0-4V7h12v2Zm0-4V3h18v2Z",center:"M3 21v-2h18v2Zm4-4v-2h10v2Zm-4-4v-2h18v2Zm4-4V7h10v2ZM3 5V3h18v2Z",right:"M3 21v-2h18v2Zm6-4v-2h12v2Zm-6-4v-2h18v2Zm6-4V7h12v2ZM3 5V3h18v2Z",justify:"M3 21v-2h18v2Zm0-4v-2h18v2Zm0-4v-2h18v2Zm0-4V7h18v2Zm0-4V3h18v2Z",print:"M16 8V5H8v3H6V3h12v5ZM4 10h16H6Zm14 2.5q.425 0 .712-.288.288-.287.288-.712t-.288-.713Q18.425 10.5 18 10.5t-.712.287Q17 11.075 17 11.5t.288.712q.287.288.712.288ZM16 19v-4H8v4Zm2 2H6v-4H2v-6q0-1.275.875-2.137Q3.75 8 5 8h14q1.275 0 2.138.863Q22 9.725 22 11v6h-4Zm2-6v-4q0-.425-.288-.713Q19.425 10 19 10H5q-.425 0-.713.287Q4 10.575 4 11v4h2v-2h12v2Z",outdent:"M3 21v-2h18v2Zm8-4v-2h10v2Zm-4-1-4-4 4-4Zm4-3v-2h10v2Zm0-4V7h10v2ZM3 5V3h18v2Z",indent:"M3 21v-2h18v2Zm0-5V8l4 4ZM3 5V3h18v2Zm8 12v-2h10v2Zm0-4v-2h10v2Zm0-4V7h10v2Z",removeFormat:"M0 0zm13.2 10.35-2.325-2.325L7.85 5H20v3h-5.8Zm6.6 12.25-8.3-8.3-2 4.7H6.225L9.2 12 1.4 4.2l1.4-1.4 18.4 18.4Z",formatting:"M5 19v-2h14v2Zm1.9-4L11 4h2l4.1 11h-1.9l-.95-2.8H9.8l-1 2.8Zm3.45-4.4h3.3l-1.6-4.55h-.1Z",fontSize:t,align:"M3 21v-2h18v2Zm0-4v-2h12v2Zm0-4v-2h18v2Zm0-4V7h12v2Zm0-4V3h18v2Z",hr:"M5 13v-2h14v2Z",undo:"M14.1 19H7v-2h7.1q1.575 0 2.737-1Q18 15 18 13.5T16.837 11q-1.162-1-2.737-1H7.8l2.6 2.6L9 14 4 9l5-5 1.4 1.4L7.8 8h6.3q2.425 0 4.163 1.575Q20 11.15 20 13.5q0 2.35-1.737 3.925Q16.525 19 14.1 19Z",redo:"M9.9 19q-2.425 0-4.162-1.575Q4 15.85 4 13.5q0-2.35 1.738-3.925Q7.475 8 9.9 8h6.3l-2.6-2.6L15 4l5 5-5 5-1.4-1.4 2.6-2.6H9.9q-1.575 0-2.737 1Q6 12 6 13.5T7.163 16q1.162 1 2.737 1H17v2Z",heading:t,code:Q,size:t,font:"M6.4 18h2.1l1.1-3.05h4.8L15.5 18h2.1L13.05 6h-2.1Zm3.8-4.8 1.75-4.95h.1l1.75 4.95ZM4 22q-.825 0-1.412-.587Q2 20.825 2 20V4q0-.825.588-1.413Q3.175 2 4 2h16q.825 0 1.413.587Q22 3.175 22 4v16q0 .825-.587 1.413Q20.825 22 20 22Zm0-2h16V4H4v16ZM4 4v16V4Z",viewSource:Q},expansionItem:{icon:"M0 0zm12 15.4-6-6L7.4 8l4.6 4.6L16.6 8 18 9.4Z",denseIcon:"M0 0zm12 15-5-5h10Z"},fab:{icon:"M11 19v-6H5v-2h6V5h2v6h6v2h-6v6Z",activeIcon:q},field:{clear:v,error:"M12 17q.425 0 .713-.288Q13 16.425 13 16t-.287-.713Q12.425 15 12 15t-.712.287Q11 15.575 11 16t.288.712Q11.575 17 12 17Zm-1-4h2V7h-2Zm1 9q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z"},pagination:{first:"M6 18V6h2v12Zm11 0-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z",prev:"M0 0zm14 18-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z",next:"M9.4 18 8 16.6l4.6-4.6L8 7.4 9.4 6l6 6Z",last:"M0 0zm7 18-1.4-1.4 4.6-4.6-4.6-4.6L7 6l6 6Zm9 0V6h2v12Z"},rating:{icon:"M0 0zm8.85 17.825 3.15-1.9 3.15 1.925-.825-3.6 2.775-2.4-3.65-.325-1.45-3.4-1.45 3.375-3.65.325 2.775 2.425ZM5.825 22l1.625-7.025L2 10.25l7.2-.625L12 3l2.8 6.625 7.2.625-5.45 4.725L18.175 22 12 18.275ZM12 13.25Z"},stepper:{done:Z,active:"M5 19h1.4l8.625-8.625-1.4-1.4L5 17.6ZM19.3 8.925l-4.25-4.2 1.4-1.4q.575-.575 1.413-.575.837 0 1.412.575l1.4 1.4q.575.575.6 1.388.025.812-.55 1.387ZM17.85 10.4 7.25 21H3v-4.25l10.6-10.6Zm-3.525-.725-.7-.7 1.4 1.4Z",error:e},tabs:{left:h,right:m,up:"M7.4 15.4 6 14l6-6 6 6-1.4 1.4-4.6-4.6Z",down:"M0 0zm12 15.4-6-6L7.4 8l4.6 4.6L16.6 8 18 9.4Z"},table:{arrowUp:"M11 20V7.825l-5.6 5.6L4 12l8-8 8 8-1.4 1.425-5.6-5.6V20Z",warning:e,firstPage:"M6 18V6h2v12Zm11 0-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z",prevPage:h,nextPage:m,lastPage:"M0 0zm7 18-1.4-1.4 4.6-4.6-4.6-4.6L7 6l6 6Zm9 0V6h2v12Z"},tree:{icon:"M8 19V5l11 7Zm2-7Zm0 3.35L15.25 12 10 8.65Z"},uploader:{done:"M0 0zm9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4Z",clear:q,add:"M11 17h2v-4h4v-2h-4V7h-2v4H7v2h4Zm-6 4q-.825 0-1.413-.587Q3 19.825 3 19V5q0-.825.587-1.413Q4.175 3 5 3h14q.825 0 1.413.587Q21 4.175 21 5v14q0 .825-.587 1.413Q19.825 21 19 21Zm0-2h14V5H5v14ZM5 5v14V5Z",upload:"M6.5 20q-2.275 0-3.887-1.575Q1 16.85 1 14.575q0-1.95 1.175-3.475Q3.35 9.575 5.25 9.15q.625-2.3 2.5-3.725Q9.625 4 12 4q2.925 0 4.962 2.037Q19 8.075 19 11q1.725.2 2.863 1.487Q23 13.775 23 15.5q0 1.875-1.312 3.188Q20.375 20 18.5 20H13q-.825 0-1.412-.587Q11 18.825 11 18v-5.15L9.4 14.4 8 13l4-4 4 4-1.4 1.4-1.6-1.55V18h5.5q1.05 0 1.775-.725Q21 16.55 21 15.5q0-1.05-.725-1.775Q19.55 13 18.5 13H17v-2q0-2.075-1.462-3.538Q14.075 6 12 6 9.925 6 8.463 7.462 7 8.925 7 11h-.5q-1.45 0-2.475 1.025Q3 13.05 3 14.5q0 1.45 1.025 2.475Q5.05 18 6.5 18H9v2Zm5.5-7Z",removeQueue:"M3 17v-2h14v2Zm2-4v-2h14v2Zm2-4V7h14v2Z",removeUploaded:"M0 0zm6.7 18-5.65-5.65 1.425-1.4 4.25 4.25 1.4 1.4Zm5.65 0L6.7 12.35l1.4-1.425 4.25 4.25 9.2-9.2 1.4 1.425Zm0-5.65-1.425-1.4L15.875 6 17.3 7.4Z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-material-symbols-rounded.umd.min.js b/dist/icon-set/svg-material-symbols-rounded.umd.min.js new file mode 100644 index 00000000000..fa2cd8976c7 --- /dev/null +++ b/dist/icon-set/svg-material-symbols-rounded.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(q,Q){"object"==typeof exports&&"undefined"!=typeof module?module.exports=Q():"function"==typeof define&&define.amd?define(Q):((q="undefined"!=typeof globalThis?globalThis:q||self).Quasar=q.Quasar||{},q.Quasar.iconSet=q.Quasar.iconSet||{},q.Quasar.iconSet.svgMaterialSymbolsRounded=Q())}(this,function(){"use strict";var q="M0 0zm11.3 14.3-2.6-2.6q-.475-.475-.212-1.087Q8.75 10 9.425 10h5.15q.675 0 .937.613.263.612-.212 1.087l-2.6 2.6q-.15.15-.325.225-.175.075-.375.075t-.375-.075q-.175-.075-.325-.225Z",Q="M12 20q-.425 0-.712-.288Q11 19.425 11 19V7.825L6.125 12.7q-.3.3-.713.3Q5 13 4.7 12.7t-.3-.7q0-.4.3-.7l6.6-6.6q.15-.15.325-.213.175-.062.375-.062t.388.062q.187.063.312.213l6.6 6.6q.3.3.3.7 0 .4-.3.7-.3.3-.713.3-.412 0-.712-.3L13 7.825V19q0 .425-.287.712Q12.425 20 12 20Z",t="M7.7 16.3q.275.275.7.275.425 0 .7-.275l2.9-2.9 2.925 2.925q.275.275.688.262.412-.012.687-.287.275-.275.275-.7 0-.425-.275-.7L13.4 12l2.925-2.925q.275-.275.262-.688-.012-.412-.287-.687-.275-.275-.7-.275-.425 0-.7.275L12 10.6 9.075 7.675Q8.8 7.4 8.388 7.412q-.413.013-.688.288-.275.275-.275.7 0 .425.275.7l2.9 2.9-2.925 2.925q-.275.275-.262.687.012.413.287.688ZM12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-10Zm0 8q3.325 0 5.663-2.337Q20 15.325 20 12t-2.337-5.663Q15.325 4 12 4T6.338 6.337Q4 8.675 4 12t2.338 5.663Q8.675 20 12 20Z",Z="M9.55 17.575q-.2 0-.375-.063Q9 17.45 8.85 17.3L4.55 13q-.275-.275-.263-.713.013-.437.288-.712.275-.275.7-.275.425 0 .7.275L9.55 15.15l8.475-8.475q.275-.275.713-.275.437 0 .712.275.275.275.275.712 0 .438-.275.713l-9.2 9.2q-.15.15-.325.212-.175.063-.375.063Z",h="M0 0zm13.3 17.3-4.6-4.6q-.15-.15-.212-.325-.063-.175-.063-.375t.063-.375q.062-.175.212-.325l4.6-4.6q.275-.275.7-.275.425 0 .7.275.275.275.275.7 0 .425-.275.7L10.8 12l3.9 3.9q.275.275.275.7 0 .425-.275.7-.275.275-.7.275-.425 0-.7-.275Z",l="M8.7 17.3q-.275-.275-.275-.7 0-.425.275-.7l3.9-3.9-3.9-3.9q-.275-.275-.275-.7 0-.425.275-.7.275-.275.7-.275.425 0 .7.275l4.6 4.6q.15.15.213.325.062.175.062.375t-.062.375q-.063.175-.213.325l-4.6 4.6q-.275.275-.7.275-.425 0-.7-.275Z",m="M0 0zm12 13.4-4.9 4.9q-.275.275-.7.275-.425 0-.7-.275-.275-.275-.275-.7 0-.425.275-.7l4.9-4.9-4.9-4.9q-.275-.275-.275-.7 0-.425.275-.7.275-.275.7-.275.425 0 .7.275l4.9 4.9 4.9-4.9q.275-.275.7-.275.425 0 .7.275.275.275.275.7 0 .425-.275.7L13.4 12l4.9 4.9q.275.275.275.7 0 .425-.275.7-.275.275-.7.275-.425 0-.7-.275Z",e="M16.7 17.3q-.275.275-.687.275-.413 0-.713-.3t-.3-.713q0-.412.3-.712l3.875-3.875-3.9-3.9Q15 7.8 15.012 7.387q.013-.412.288-.687.275-.275.7-.275.425 0 .7.275l4.6 4.6q.3.3.3.7 0 .4-.3.7Zm-9.4 0-4.6-4.6q-.3-.3-.3-.7 0-.4.3-.7l4.6-4.6q.275-.275.7-.288.425-.012.725.288t.3.712q0 .413-.3.713l-3.9 3.9 3.9 3.9q.275.275.263.687-.013.413-.288.688-.275.275-.7.275-.425 0-.7-.275Z",v="M0 0zm16.3 17.3-4.6-4.6q-.15-.15-.212-.325-.063-.175-.063-.375t.063-.375q.062-.175.212-.325l4.6-4.6q.275-.275.7-.275.425 0 .7.275.275.275.275.7 0 .425-.275.7L13.8 12l3.9 3.9q.275.275.275.7 0 .425-.275.7-.275.275-.7.275-.425 0-.7-.275ZM7 18q-.425 0-.713-.288Q6 17.425 6 17V7q0-.425.287-.713Q6.575 6 7 6t.713.287Q8 6.575 8 7v10q0 .425-.287.712Q7.425 18 7 18Z",M="M4 17q-.425 0-.712-.288Q3 16.425 3 16t.288-.713Q3.575 15 4 15h10q.425 0 .713.287.287.288.287.713t-.287.712Q14.425 17 14 17Zm0-8q-.425 0-.712-.288Q3 8.425 3 8t.288-.713Q3.575 7 4 7h10q.425 0 .713.287Q15 7.575 15 8t-.287.712Q14.425 9 14 9Zm0 4q-.425 0-.712-.288Q3 12.425 3 12t.288-.713Q3.575 11 4 11h16q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Zm0 8q-.425 0-.712-.288Q3 20.425 3 20t.288-.712Q3.575 19 4 19h16q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 21 20 21ZM4 5q-.425 0-.712-.288Q3 4.425 3 4t.288-.713Q3.575 3 4 3h16q.425 0 .712.287Q21 3.575 21 4t-.288.712Q20.425 5 20 5Z",o="M15.5 20q-.625 0-1.062-.438Q14 19.125 14 18.5V7h-3.5q-.625 0-1.062-.438Q9 6.125 9 5.5t.438-1.062Q9.875 4 10.5 4h10q.625 0 1.062.438Q22 4.875 22 5.5t-.438 1.062Q21.125 7 20.5 7H17v11.5q0 .625-.438 1.062Q16.125 20 15.5 20Zm-9 0q-.625 0-1.062-.438Q5 19.125 5 18.5V12H3.5q-.625 0-1.062-.438Q2 11.125 2 10.5t.438-1.062Q2.875 9 3.5 9h6q.625 0 1.062.438Q11 9.875 11 10.5t-.438 1.062Q10.125 12 9.5 12H8v6.5q0 .625-.438 1.062Q7.125 20 6.5 20Z",r="M12 14.975q-.2 0-.387-.075-.188-.075-.313-.2l-4.6-4.6q-.275-.275-.275-.7 0-.425.275-.7.275-.275.7-.275.425 0 .7.275l3.9 3.9 3.9-3.9q.275-.275.7-.275.425 0 .7.275.275.275.275.7 0 .425-.275.7l-4.6 4.6q-.15.15-.325.212-.175.063-.375.063Z",n="M6.7 14.7q-.275-.275-.275-.7 0-.425.275-.7l4.6-4.6q.15-.15.325-.213.175-.062.375-.062t.388.075q.187.075.312.2l4.6 4.6q.275.275.275.7 0 .425-.275.7-.275.275-.7.275-.425 0-.7-.275L12 10.8l-3.9 3.9q-.275.275-.7.275-.425 0-.7-.275Z",i="M6.3 17.3q-.275-.275-.275-.7 0-.425.275-.7l3.9-3.9-3.9-3.9q-.275-.275-.275-.7 0-.425.275-.7.275-.275.7-.275.425 0 .7.275l4.6 4.6q.15.15.213.325.062.175.062.375t-.062.375q-.063.175-.213.325l-4.6 4.6q-.275.275-.7.275-.425 0-.7-.275ZM17 18q-.425 0-.712-.288Q16 17.425 16 17V7q0-.425.288-.713Q16.575 6 17 6t.712.287Q18 6.575 18 7v10q0 .425-.288.712Q17.425 18 17 18Z",a="M12 12.5ZM2.725 21q-.575 0-.85-.5t0-1l9.25-16Q11.4 3 12 3t.875.5l9.25 16q.275.5 0 1t-.85.5ZM12 10q-.425 0-.712.287Q11 10.575 11 11v3q0 .425.288.712.287.288.712.288t.713-.288Q13 14.425 13 14v-3q0-.425-.287-.713Q12.425 10 12 10Zm0 8q.425 0 .713-.288Q13 17.425 13 17t-.287-.712Q12.425 16 12 16t-.712.288Q11 16.575 11 17t.288.712Q11.575 18 12 18Zm-7.55 1h15.1L12 6Z";return{name:"svg-material-symbols-rounded",type:{positive:"M0 0zm10.6 13.8-2.175-2.175q-.275-.275-.687-.262-.413.012-.688.287-.275.275-.275.7 0 .425.275.7L9.9 15.9q.275.275.7.275.425 0 .7-.275l5.675-5.675q.275-.275.263-.688-.013-.412-.288-.687-.275-.275-.7-.275-.425 0-.7.275ZM12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-10Zm0 8q3.325 0 5.663-2.337Q20 15.325 20 12t-2.337-5.663Q15.325 4 12 4T6.338 6.337Q4 8.675 4 12t2.338 5.663Q8.675 20 12 20Z",negative:a,info:"M12 17q.425 0 .713-.288Q13 16.425 13 16v-4.025q0-.425-.287-.7Q12.425 11 12 11t-.712.287Q11 11.575 11 12v4.025q0 .425.288.7.287.275.712.275Zm0-8q.425 0 .713-.288Q13 8.425 13 8t-.287-.713Q12.425 7 12 7t-.712.287Q11 7.575 11 8t.288.712Q11.575 9 12 9Zm0 13q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-10Zm0 8q3.325 0 5.663-2.337Q20 15.325 20 12t-2.337-5.663Q15.325 4 12 4T6.338 6.337Q4 8.675 4 12t2.338 5.663Q8.675 20 12 20Z",warning:"M12 21q-.825 0-1.412-.587Q10 19.825 10 19q0-.825.588-1.413Q11.175 17 12 17t1.413.587Q14 18.175 14 19q0 .825-.587 1.413Q12.825 21 12 21Zm0-6q-.825 0-1.412-.588Q10 13.825 10 13V5q0-.825.588-1.413Q11.175 3 12 3t1.413.587Q14 4.175 14 5v8q0 .825-.587 1.412Q12.825 15 12 15Z"},arrow:{up:Q,right:"M11.3 19.3q-.275-.275-.288-.7-.012-.425.263-.7l4.9-4.9H5q-.425 0-.713-.288Q4 12.425 4 12t.287-.713Q4.575 11 5 11h11.175l-4.9-4.9q-.275-.275-.263-.7.013-.425.288-.7.275-.275.7-.275.425 0 .7.275l6.6 6.6q.15.125.213.312.062.188.062.388t-.062.375q-.063.175-.213.325l-6.6 6.6q-.275.275-.7.275-.425 0-.7-.275Z",down:"M12 19.575q-.2 0-.375-.063-.175-.062-.325-.212l-6.6-6.6q-.3-.3-.3-.713 0-.412.3-.712t.7-.3q.4 0 .7.3l4.9 4.9v-11.2q0-.425.288-.7Q11.575 4 12 4t.713.287Q13 4.575 13 5v11.175l4.9-4.9q.3-.3.7-.3.4 0 .7.3.3.3.3.712 0 .413-.3.713l-6.6 6.6q-.15.15-.325.212-.175.063-.375.063Z",left:"M0 0zm10.875 19.3-6.6-6.6q-.15-.15-.213-.325Q4 12.2 4 12t.062-.375q.063-.175.213-.325l6.6-6.6q.275-.275.687-.288.413-.012.713.288.3.275.313.687.012.413-.288.713L7.4 11h11.175q.425 0 .713.287.287.288.287.713t-.287.712Q19 13 18.575 13H7.4l4.9 4.9q.275.275.288.7.012.425-.288.7-.275.3-.7.3-.425 0-.725-.3Z",dropdown:q},chevron:{left:h,right:l},colorPicker:{spectrum:"M11 13v-2h2v2Zm-2 2v-2h2v2Zm4 0v-2h2v2Zm2-2v-2h2v2Zm-8 0v-2h2v2Zm-2 8q-.825 0-1.413-.587Q3 19.825 3 19V5q0-.825.587-1.413Q4.175 3 5 3h14q.825 0 1.413.587Q21 4.175 21 5v14q0 .825-.587 1.413Q19.825 21 19 21Zm2-2h2v-2H7Zm4 0h2v-2h-2Zm8 0v-2ZM5 17h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2V5H5v8h2v2H5Zm0 2V5v14Zm14-6v2-2Zm-4 4v2h2v-2Z",tune:"M4 19q-.425 0-.712-.288Q3 18.425 3 18t.288-.712Q3.575 17 4 17h4q.425 0 .713.288Q9 17.575 9 18t-.287.712Q8.425 19 8 19ZM4 7q-.425 0-.712-.287Q3 6.425 3 6t.288-.713Q3.575 5 4 5h8q.425 0 .713.287Q13 5.575 13 6t-.287.713Q12.425 7 12 7Zm8 14q-.425 0-.712-.288Q11 20.425 11 20v-4q0-.425.288-.713Q11.575 15 12 15t.713.287Q13 15.575 13 16v1h7q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 19 20 19h-7v1q0 .425-.287.712Q12.425 21 12 21Zm-4-6q-.425 0-.713-.288Q7 14.425 7 14v-1H4q-.425 0-.712-.288Q3 12.425 3 12t.288-.713Q3.575 11 4 11h3v-1q0-.425.287-.713Q7.575 9 8 9t.713.287Q9 9.575 9 10v4q0 .425-.287.712Q8.425 15 8 15Zm4-2q-.425 0-.712-.288Q11 12.425 11 12t.288-.713Q11.575 11 12 11h8q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Zm4-4q-.425 0-.712-.288Q15 8.425 15 8V4q0-.425.288-.713Q15.575 3 16 3t.712.287Q17 3.575 17 4v1h3q.425 0 .712.287Q21 5.575 21 6t-.288.713Q20.425 7 20 7h-3v1q0 .425-.288.712Q16.425 9 16 9Z",palette:"M0 0zm3.975 19.8-.85-.35q-.775-.325-1.037-1.125-.263-.8.087-1.575l1.8-3.9Zm4 2.2q-.825 0-1.413-.587-.587-.588-.587-1.413v-6l2.65 7.35q.075.175.15.338.075.162.2.312Zm5.15-.1q-.8.3-1.55-.075t-1.05-1.175l-4.45-12.2q-.3-.8.05-1.563.35-.762 1.15-1.037l7.55-2.75q.8-.3 1.55.075t1.05 1.175l4.45 12.2q.3.8-.05 1.563-.35.762-1.15 1.037ZM10.975 10q.425 0 .713-.288.287-.287.287-.712t-.287-.713Q11.4 8 10.975 8t-.712.287q-.288.288-.288.713t.288.712q.287.288.712.288Zm1.45 10 7.55-2.75L15.525 5l-7.55 2.75ZM7.975 7.75 15.525 5Z"},pullToRefresh:{icon:"M12 20q-3.35 0-5.675-2.325Q4 15.35 4 12q0-3.35 2.325-5.675Q8.65 4 12 4q1.725 0 3.3.713 1.575.712 2.7 2.037V5q0-.425.288-.713Q18.575 4 19 4t.712.287Q20 4.575 20 5v5q0 .425-.288.712Q19.425 11 19 11h-5q-.425 0-.712-.288Q13 10.425 13 10t.288-.713Q13.575 9 14 9h3.2q-.8-1.4-2.187-2.2Q13.625 6 12 6 9.5 6 7.75 7.75T6 12q0 2.5 1.75 4.25T12 18q1.725 0 3.188-.913 1.462-.912 2.187-2.437.125-.275.413-.462.287-.188.587-.188.575 0 .863.4.287.4.062.9-.95 2.125-2.925 3.412Q14.4 20 12 20Z"},carousel:{left:h,right:l,up:n,down:r,navigationIcon:"M12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z"},chip:{remove:t,selected:Z},datetime:{arrowLeft:h,arrowRight:l,now:"M14.625 16.025q.275.275.675.275t.7-.3q.275-.275.275-.7 0-.425-.275-.7l-3-3V7.975q0-.425-.287-.7Q12.425 7 12 7t-.712.287Q11 7.575 11 8v3.975q0 .2.075.387.075.188.225.338ZM12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-10Zm0 8q3.325 0 5.663-2.337Q20 15.325 20 12t-2.337-5.663Q15.325 4 12 4T6.338 6.337Q4 8.675 4 12t2.338 5.663Q8.675 20 12 20Z",today:"M9 16.5q-1.05 0-1.775-.725Q6.5 15.05 6.5 14q0-1.05.725-1.775Q7.95 11.5 9 11.5q1.05 0 1.775.725.725.725.725 1.775 0 1.05-.725 1.775Q10.05 16.5 9 16.5ZM5 22q-.825 0-1.413-.587Q3 20.825 3 20V6q0-.825.587-1.412Q4.175 4 5 4h1V3q0-.425.287-.713Q6.575 2 7 2t.713.287Q8 2.575 8 3v1h8V3q0-.425.288-.713Q16.575 2 17 2t.712.287Q18 2.575 18 3v1h1q.825 0 1.413.588Q21 5.175 21 6v14q0 .825-.587 1.413Q19.825 22 19 22Zm0-2h14V10H5v10ZM5 8h14V6H5Zm0 0V6v2Z"},editor:{bold:"M9 18q-.825 0-1.412-.587Q7 16.825 7 16V6q0-.825.588-1.412Q8.175 4 9 4h3.5q1.7 0 2.975.975 1.275.975 1.275 2.675 0 1.2-.55 1.912-.55.713-1.3 1.088v.2q1.1.375 1.725 1.175t.625 2.075q0 1.875-1.363 2.888Q14.525 18 12.65 18Zm.65-8.3h2.65q.825 0 1.363-.475.537-.475.537-1.2t-.537-1.2q-.538-.475-1.363-.475H9.65Zm0 5.9h2.85q.975 0 1.538-.5.562-.5.562-1.325t-.562-1.325q-.563-.5-1.538-.5H9.65Z",italic:"M6.5 20q-.625 0-1.062-.438Q5 19.125 5 18.5t.438-1.062Q5.875 17 6.5 17h1.875l4-10H10.5q-.625 0-1.062-.438Q9 6.125 9 5.5t.438-1.062Q9.875 4 10.5 4h7q.625 0 1.062.438Q19 4.875 19 5.5t-.438 1.062Q18.125 7 17.5 7h-1.875l-4 10H13.5q.625 0 1.062.438.438.437.438 1.062t-.438 1.062Q14.125 20 13.5 20Z",strikethrough:"M12.15 20q-1.625 0-2.925-.812-1.3-.813-2.1-2.288-.225-.425-.05-.9.175-.475.675-.675.425-.2.863-.025.437.175.712.625.45.75 1.187 1.213.738.462 1.688.462 1.05 0 1.9-.5.85-.5.85-1.6 0-.45-.175-.825Q14.6 14.3 14.3 14h2.8q.125.35.188.712.062.363.062.788 0 2.15-1.538 3.325Q14.275 20 12.15 20ZM3 12q-.425 0-.712-.288Q2 11.425 2 11t.288-.713Q2.575 10 3 10h18q.425 0 .712.287.288.288.288.713t-.288.712Q21.425 12 21 12Zm4.25-4q.05-1.725 1.363-2.938Q9.925 3.85 12.05 3.85q1.35 0 2.425.537 1.075.538 1.8 1.663.275.425.1.9-.175.475-.675.7-.375.175-.812.038-.438-.138-.788-.563-.325-.375-.825-.625-.5-.25-1.175-.25-1.025 0-1.7.463-.675.462-.75 1.287Z",underline:"M6 21q-.425 0-.713-.288Q5 20.425 5 20t.287-.712Q5.575 19 6 19h12q.425 0 .712.288.288.287.288.712t-.288.712Q18.425 21 18 21Zm6-4q-2.525 0-4.263-1.738Q6 13.525 6 11V4.25q0-.525.363-.888Q6.725 3 7.25 3t.887.362q.363.363.363.888V11q0 1.475 1.012 2.488Q10.525 14.5 12 14.5t2.488-1.012Q15.5 12.475 15.5 11V4.25q0-.525.363-.888Q16.225 3 16.75 3t.888.362q.362.363.362.888V11q0 2.525-1.738 4.262Q14.525 17 12 17Z",unorderedList:"M4.5 13.5q-.625 0-1.062-.438Q3 12.625 3 12t.438-1.062Q3.875 10.5 4.5 10.5t1.062.438Q6 11.375 6 12t-.438 1.062q-.437.438-1.062.438Zm0-6q-.625 0-1.062-.438Q3 6.625 3 6t.438-1.062Q3.875 4.5 4.5 4.5t1.062.438Q6 5.375 6 6t-.438 1.062Q5.125 7.5 4.5 7.5Zm0 12q-.625 0-1.062-.438Q3 18.625 3 18t.438-1.062Q3.875 16.5 4.5 16.5t1.062.438Q6 17.375 6 18t-.438 1.062q-.437.438-1.062.438ZM9 19q-.425 0-.712-.288Q8 18.425 8 18t.288-.712Q8.575 17 9 17h11q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 19 20 19Zm0-6q-.425 0-.712-.288Q8 12.425 8 12t.288-.713Q8.575 11 9 11h11q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Zm0-6q-.425 0-.712-.287Q8 6.425 8 6t.288-.713Q8.575 5 9 5h11q.425 0 .712.287Q21 5.575 21 6t-.288.713Q20.425 7 20 7Z",orderedList:"M3.5 20q-.2 0-.35-.15Q3 19.7 3 19.5q0-.2.15-.35.15-.15.35-.15H5v-.5h-.5q-.2 0-.35-.15Q4 18.2 4 18q0-.2.15-.35.15-.15.35-.15H5V17H3.5q-.2 0-.35-.15Q3 16.7 3 16.5q0-.2.15-.35.15-.15.35-.15h2q.2 0 .35.15.15.15.15.35v3q0 .2-.15.35-.15.15-.35.15Zm1-12q-.2 0-.35-.15Q4 7.7 4 7.5V5h-.5q-.2 0-.35-.15Q3 4.7 3 4.5q0-.2.15-.35Q3.3 4 3.5 4h1q.2 0 .35.15.15.15.15.35v3q0 .2-.15.35Q4.7 8 4.5 8Zm-1 6q-.2 0-.35-.15Q3 13.7 3 13.5v-.225q0-.1.125-.325L4.8 11H3.5q-.2 0-.35-.15Q3 10.7 3 10.5q0-.2.15-.35.15-.15.35-.15h2q.2 0 .35.15.15.15.15.35v.225q0 .1-.125.325L4.2 13h1.3q.2 0 .35.15.15.15.15.35 0 .2-.15.35-.15.15-.35.15ZM9 19q-.425 0-.712-.288Q8 18.425 8 18t.288-.712Q8.575 17 9 17h11q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 19 20 19Zm0-6q-.425 0-.712-.288Q8 12.425 8 12t.288-.713Q8.575 11 9 11h11q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Zm0-6q-.425 0-.712-.287Q8 6.425 8 6t.288-.713Q8.575 5 9 5h11q.425 0 .712.287Q21 5.575 21 6t-.288.713Q20.425 7 20 7Z",subscript:"M5 21q-.425 0-.713-.288Q4 20.425 4 20t.287-.712Q4.575 19 5 19h14q.425 0 .712.288.288.287.288.712t-.288.712Q19.425 21 19 21Zm7-4.425q-.2 0-.375-.063-.175-.062-.325-.212l-3.625-3.625Q7.4 12.4 7.4 12t.3-.7q.275-.275.7-.275.425 0 .7.275l1.9 1.9V4q0-.425.288-.713Q11.575 3 12 3t.713.287Q13 3.575 13 4v9.2l1.925-1.925Q15.2 11 15.6 11t.7.3q.275.275.275.7 0 .425-.275.7l-3.6 3.6q-.15.15-.325.212-.175.063-.375.063Z",superscript:"M5 5q-.425 0-.713-.288Q4 4.425 4 4t.287-.713Q4.575 3 5 3h14q.425 0 .712.287Q20 3.575 20 4t-.288.712Q19.425 5 19 5Zm7 16q-.425 0-.712-.288Q11 20.425 11 20v-9.2l-1.925 1.925Q8.8 13 8.4 13t-.7-.3q-.275-.275-.275-.7 0-.425.275-.7l3.6-3.6q.15-.15.325-.212.175-.063.375-.063t.375.063q.175.062.325.212l3.625 3.625q.275.275.275.675t-.3.7q-.275.275-.7.275-.425 0-.7-.275L13 10.8V20q0 .425-.287.712Q12.425 21 12 21Z",hyperlink:"M7 17q-2.075 0-3.537-1.463Q2 14.075 2 12t1.463-3.538Q4.925 7 7 7h3q.425 0 .713.287Q11 7.575 11 8t-.287.712Q10.425 9 10 9H7q-1.25 0-2.125.875T4 12q0 1.25.875 2.125T7 15h3q.425 0 .713.287.287.288.287.713t-.287.712Q10.425 17 10 17Zm2-4q-.425 0-.712-.288Q8 12.425 8 12t.288-.713Q8.575 11 9 11h6q.425 0 .713.287.287.288.287.713t-.287.712Q15.425 13 15 13Zm5 4q-.425 0-.712-.288Q13 16.425 13 16t.288-.713Q13.575 15 14 15h3q1.25 0 2.125-.875T20 12q0-1.25-.875-2.125T17 9h-3q-.425 0-.712-.288Q13 8.425 13 8t.288-.713Q13.575 7 14 7h3q2.075 0 3.538 1.462Q22 9.925 22 12q0 2.075-1.462 3.537Q19.075 17 17 17Z",toggleFullscreen:"M6 19q-.425 0-.713-.288Q5 18.425 5 18v-3q0-.425.287-.713Q5.575 14 6 14t.713.287Q7 14.575 7 15v2h2q.425 0 .713.288.287.287.287.712t-.287.712Q9.425 19 9 19Zm0-9q-.425 0-.713-.288Q5 9.425 5 9V6q0-.425.287-.713Q5.575 5 6 5h3q.425 0 .713.287Q10 5.575 10 6t-.287.713Q9.425 7 9 7H7v2q0 .425-.287.712Q6.425 10 6 10Zm9 9q-.425 0-.712-.288Q14 18.425 14 18t.288-.712Q14.575 17 15 17h2v-2q0-.425.288-.713Q17.575 14 18 14t.712.287Q19 14.575 19 15v3q0 .425-.288.712Q18.425 19 18 19Zm3-9q-.425 0-.712-.288Q17 9.425 17 9V7h-2q-.425 0-.712-.287Q14 6.425 14 6t.288-.713Q14.575 5 15 5h3q.425 0 .712.287Q19 5.575 19 6v3q0 .425-.288.712Q18.425 10 18 10Z",quote:"M15 11h3V8h-3Zm-9 0h3V8H6Zm11.175 6q-.75 0-1.15-.637-.4-.638-.05-1.313L17 13h-2q-.825 0-1.412-.588Q13 11.825 13 11V8q0-.825.588-1.412Q14.175 6 15 6h3q.825 0 1.413.588Q20 7.175 20 8v4.525q0 .225-.038.463-.037.237-.162.437l-1.425 2.825q-.175.35-.5.55-.325.2-.7.2Zm-9 0q-.75 0-1.15-.637-.4-.638-.05-1.313L8 13H6q-.825 0-1.412-.588Q4 11.825 4 11V8q0-.825.588-1.412Q5.175 6 6 6h3q.825 0 1.413.588Q11 7.175 11 8v4.525q0 .225-.037.463-.038.237-.163.437L9.375 16.25q-.175.35-.5.55-.325.2-.7.2ZM7.5 9.5Zm9 0Z",left:M,center:"M4 21q-.425 0-.712-.288Q3 20.425 3 20t.288-.712Q3.575 19 4 19h16q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 21 20 21Zm4-4q-.425 0-.713-.288Q7 16.425 7 16t.287-.713Q7.575 15 8 15h8q.425 0 .712.287.288.288.288.713t-.288.712Q16.425 17 16 17Zm-4-4q-.425 0-.712-.288Q3 12.425 3 12t.288-.713Q3.575 11 4 11h16q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Zm4-4q-.425 0-.713-.288Q7 8.425 7 8t.287-.713Q7.575 7 8 7h8q.425 0 .712.287Q17 7.575 17 8t-.288.712Q16.425 9 16 9ZM4 5q-.425 0-.712-.288Q3 4.425 3 4t.288-.713Q3.575 3 4 3h16q.425 0 .712.287Q21 3.575 21 4t-.288.712Q20.425 5 20 5Z",right:"M4 21q-.425 0-.712-.288Q3 20.425 3 20t.288-.712Q3.575 19 4 19h16q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 21 20 21Zm6-4q-.425 0-.712-.288Q9 16.425 9 16t.288-.713Q9.575 15 10 15h10q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 17 20 17Zm-6-4q-.425 0-.712-.288Q3 12.425 3 12t.288-.713Q3.575 11 4 11h16q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Zm6-4q-.425 0-.712-.288Q9 8.425 9 8t.288-.713Q9.575 7 10 7h10q.425 0 .712.287Q21 7.575 21 8t-.288.712Q20.425 9 20 9ZM4 5q-.425 0-.712-.288Q3 4.425 3 4t.288-.713Q3.575 3 4 3h16q.425 0 .712.287Q21 3.575 21 4t-.288.712Q20.425 5 20 5Z",justify:"M4 21q-.425 0-.712-.288Q3 20.425 3 20t.288-.712Q3.575 19 4 19h16q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 21 20 21Zm0-4q-.425 0-.712-.288Q3 16.425 3 16t.288-.713Q3.575 15 4 15h16q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 17 20 17Zm0-4q-.425 0-.712-.288Q3 12.425 3 12t.288-.713Q3.575 11 4 11h16q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Zm0-4q-.425 0-.712-.288Q3 8.425 3 8t.288-.713Q3.575 7 4 7h16q.425 0 .712.287Q21 7.575 21 8t-.288.712Q20.425 9 20 9Zm0-4q-.425 0-.712-.288Q3 4.425 3 4t.288-.713Q3.575 3 4 3h16q.425 0 .712.287Q21 3.575 21 4t-.288.712Q20.425 5 20 5Z",print:"M16 8V5H8v3H6V4q0-.425.287-.713Q6.575 3 7 3h10q.425 0 .712.287Q18 3.575 18 4v4ZM4 10h16H6Zm14 2.5q.425 0 .712-.288.288-.287.288-.712t-.288-.713Q18.425 10.5 18 10.5t-.712.287Q17 11.075 17 11.5t.288.712q.287.288.712.288ZM8 19h8v-4H8v4Zm0 2q-.825 0-1.412-.587Q6 19.825 6 19v-2H3q-.425 0-.712-.288Q2 16.425 2 16v-5q0-1.275.875-2.137Q3.75 8 5 8h14q1.275 0 2.138.863Q22 9.725 22 11v5q0 .425-.288.712Q21.425 17 21 17h-3v2q0 .825-.587 1.413Q16.825 21 16 21Zm12-6v-4q0-.425-.288-.713Q19.425 10 19 10H5q-.425 0-.713.287Q4 10.575 4 11v4h2v-2h12v2Z",outdent:"M12 17q-.425 0-.712-.288Q11 16.425 11 16t.288-.713Q11.575 15 12 15h8q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 17 20 17Zm-5.85-1.85-2.8-2.8Q3.2 12.2 3.2 12q0-.2.15-.35l2.8-2.8q.25-.25.55-.125.3.125.3.475v5.6q0 .35-.3.475t-.55-.125ZM4 21q-.425 0-.712-.288Q3 20.425 3 20t.288-.712Q3.575 19 4 19h16q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 21 20 21ZM4 5q-.425 0-.712-.288Q3 4.425 3 4t.288-.713Q3.575 3 4 3h16q.425 0 .712.287Q21 3.575 21 4t-.288.712Q20.425 5 20 5Zm8 4q-.425 0-.712-.288Q11 8.425 11 8t.288-.713Q11.575 7 12 7h8q.425 0 .712.287Q21 7.575 21 8t-.288.712Q20.425 9 20 9Zm0 4q-.425 0-.712-.288Q11 12.425 11 12t.288-.713Q11.575 11 12 11h8q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Z",indent:"M4 21q-.425 0-.712-.288Q3 20.425 3 20t.288-.712Q3.575 19 4 19h16q.425 0 .712.288.288.287.288.712t-.288.712Q20.425 21 20 21Zm-1-6.2V9.2q0-.35.3-.475t.55.125l2.8 2.8q.15.15.15.35 0 .2-.15.35l-2.8 2.8q-.25.25-.55.125Q3 15.15 3 14.8Zm9 2.2q-.425 0-.712-.288Q11 16.425 11 16t.288-.713Q11.575 15 12 15h8q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 17 20 17ZM4 5q-.425 0-.712-.288Q3 4.425 3 4t.288-.713Q3.575 3 4 3h16q.425 0 .712.287Q21 3.575 21 4t-.288.712Q20.425 5 20 5Zm8 4q-.425 0-.712-.288Q11 8.425 11 8t.288-.713Q11.575 7 12 7h8q.425 0 .712.287Q21 7.575 21 8t-.288.712Q20.425 9 20 9Zm0 4q-.425 0-.712-.288Q11 12.425 11 12t.288-.713Q11.575 11 12 11h8q.425 0 .712.287.288.288.288.713t-.288.712Q20.425 13 20 13Z",removeFormat:"M0 0zm13.2 10.35-2.325-2.325L7.85 5H18.5q.625 0 1.062.438Q20 5.875 20 6.5t-.438 1.062Q19.125 8 18.5 8h-4.3Zm5.9 11.55-7.6-7.6-1.6 3.775q-.175.425-.562.675Q8.95 19 8.5 19q-.8 0-1.25-.675-.45-.675-.125-1.425L9.2 12 2.1 4.9q-.275-.275-.275-.7 0-.425.275-.7.275-.275.7-.275.425 0 .7.275l17 17q.275.275.275.7 0 .425-.275.7-.275.275-.7.275-.425 0-.7-.275Z",formatting:"M6 19q-.425 0-.713-.288Q5 18.425 5 18t.287-.712Q5.575 17 6 17h12q.425 0 .712.288.288.287.288.712t-.288.712Q18.425 19 18 19Zm4.35-8.4h3.3l-1.6-4.55h-.1ZM8.175 15q-.55 0-.787-.363-.238-.362-.038-.862l3.3-8.85q.15-.375.538-.65Q11.575 4 12 4q.425 0 .8.275.375.275.525.65l3.3 8.85q.2.5-.05.862-.25.363-.8.363-.25 0-.475-.163-.225-.162-.3-.387l-.75-2.25H9.8l-.825 2.25q-.075.225-.3.387-.225.163-.5.163Z",fontSize:o,align:M,hr:"M6 13q-.425 0-.713-.288Q5 12.425 5 12t.287-.713Q5.575 11 6 11h12q.425 0 .712.287.288.288.288.713t-.288.712Q18.425 13 18 13Z",undo:"M8 19q-.425 0-.713-.288Q7 18.425 7 18t.287-.712Q7.575 17 8 17h6.1q1.575 0 2.737-1Q18 15 18 13.5T16.837 11q-1.162-1-2.737-1H7.8l1.9 1.9q.275.275.275.7 0 .425-.275.7-.275.275-.7.275-.425 0-.7-.275L4.7 9.7q-.15-.15-.213-.325Q4.425 9.2 4.425 9t.062-.375Q4.55 8.45 4.7 8.3l3.6-3.6q.275-.275.7-.275.425 0 .7.275.275.275.275.7 0 .425-.275.7L7.8 8h6.3q2.425 0 4.163 1.575Q20 11.15 20 13.5q0 2.35-1.737 3.925Q16.525 19 14.1 19Z",redo:"M9.9 19q-2.425 0-4.162-1.575Q4 15.85 4 13.5q0-2.35 1.738-3.925Q7.475 8 9.9 8h6.3l-1.9-1.9q-.275-.275-.275-.7 0-.425.275-.7.275-.275.7-.275.425 0 .7.275l3.6 3.6q.15.15.213.325.062.175.062.375t-.062.375q-.063.175-.213.325l-3.6 3.6q-.275.275-.7.275-.425 0-.7-.275-.275-.275-.275-.7 0-.425.275-.7l1.9-1.9H9.9q-1.575 0-2.737 1Q6 12 6 13.5T7.163 16q1.162 1 2.737 1H16q.425 0 .712.288.288.287.288.712t-.288.712Q16.425 19 16 19Z",heading:o,code:e,size:o,font:"M7.8 18q.275 0 .55-.175t.375-.45L9.6 14.95h4.8l.875 2.425q.1.275.362.45.263.175.563.175.575 0 .838-.387.262-.388.062-.938l-3.675-9.7q-.15-.4-.562-.688Q12.45 6 12 6q-.425 0-.85.287-.425.288-.575.688l-3.675 9.7q-.2.55.063.938.262.387.837.387Zm2.4-4.8 1.75-4.95h.1l1.75 4.95ZM4 22q-.825 0-1.412-.587Q2 20.825 2 20V4q0-.825.588-1.413Q3.175 2 4 2h16q.825 0 1.413.587Q22 3.175 22 4v16q0 .825-.587 1.413Q20.825 22 20 22Zm0-2h16V4H4v16ZM4 4v16V4Z",viewSource:e},expansionItem:{icon:r,denseIcon:q},fab:{icon:"M12 19q-.425 0-.712-.288Q11 18.425 11 18v-5H6q-.425 0-.713-.288Q5 12.425 5 12t.287-.713Q5.575 11 6 11h5V6q0-.425.288-.713Q11.575 5 12 5t.713.287Q13 5.575 13 6v5h5q.425 0 .712.287.288.288.288.713t-.288.712Q18.425 13 18 13h-5v5q0 .425-.287.712Q12.425 19 12 19Z",activeIcon:m},field:{clear:t,error:"M12 13q.425 0 .713-.288Q13 12.425 13 12V7.975q0-.425-.287-.7Q12.425 7 12 7t-.712.287Q11 7.575 11 8v4.025q0 .425.288.7.287.275.712.275Zm0 4q.425 0 .713-.288Q13 16.425 13 16t-.287-.713Q12.425 15 12 15t-.712.287Q11 15.575 11 16t.288.712Q11.575 17 12 17Zm0 5q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-10Zm0 8q3.325 0 5.663-2.337Q20 15.325 20 12t-2.337-5.663Q15.325 4 12 4T6.338 6.337Q4 8.675 4 12t2.338 5.663Q8.675 20 12 20Z"},pagination:{first:v,prev:"M0 0zm13.3 17.3-4.6-4.6q-.15-.15-.212-.325-.063-.175-.063-.375t.063-.375q.062-.175.212-.325l4.6-4.6q.275-.275.7-.275.425 0 .7.275.275.275.275.7 0 .425-.275.7L10.8 12l3.9 3.9q.275.275.275.7 0 .425-.275.7-.275.275-.7.275-.425 0-.7-.275Z",next:"M8.7 17.3q-.275-.275-.275-.7 0-.425.275-.7l3.9-3.9-3.9-3.9q-.275-.275-.275-.7 0-.425.275-.7.275-.275.7-.275.425 0 .7.275l4.6 4.6q.15.15.213.325.062.175.062.375t-.062.375q-.063.175-.213.325l-4.6 4.6q-.275.275-.7.275-.425 0-.7-.275Z",last:i},rating:{icon:"M12 12.775ZM7.05 21.05q-.275.225-.587.025-.313-.2-.188-.55L8.15 14.4l-4.875-3.5q-.3-.2-.187-.55Q3.2 10 3.55 10H9.6l1.925-6.4q.05-.2.188-.275.137-.075.287-.075.15 0 .288.075.137.075.187.275L14.4 10h6.05q.35 0 .463.35.112.35-.188.55l-4.875 3.5 1.875 6.125q.125.35-.187.55-.313.2-.588-.025L12 17.3Zm2.55-4.4L12 14.8l2.4 1.85-.9-3.05 2.25-1.6h-2.8L12 8.9l-.95 3.1h-2.8l2.25 1.6Z"},stepper:{done:Z,active:"M5 19h1.4l8.625-8.625-1.4-1.4L5 17.6ZM19.3 8.925l-4.25-4.2 1.4-1.4q.575-.575 1.413-.575.837 0 1.412.575l1.4 1.4q.575.575.6 1.388.025.812-.55 1.387ZM4 21q-.425 0-.712-.288Q3 20.425 3 20v-2.825q0-.2.075-.387.075-.188.225-.338l10.3-10.3 4.25 4.25-10.3 10.3q-.15.15-.337.225-.188.075-.388.075ZM14.325 9.675l-.7-.7 1.4 1.4Z",error:a},tabs:{left:h,right:l,up:n,down:r},table:{arrowUp:Q,warning:a,firstPage:v,prevPage:h,nextPage:l,lastPage:i},tree:{icon:"M9.525 18.025q-.5.325-1.013.037Q8 17.775 8 17.175V6.825q0-.6.512-.888.513-.287 1.013.038l8.15 5.175q.45.3.45.85t-.45.85ZM10 12Zm0 3.35L15.25 12 10 8.65Z"},uploader:{done:"M9.55 17.575q-.2 0-.375-.063Q9 17.45 8.85 17.3L4.55 13q-.275-.275-.263-.713.013-.437.288-.712.275-.275.7-.275.425 0 .7.275L9.55 15.15l8.475-8.475q.275-.275.713-.275.437 0 .712.275.275.275.275.712 0 .438-.275.713l-9.2 9.2q-.15.15-.325.212-.175.063-.375.063Z",clear:m,add:"M12 17q.425 0 .713-.288Q13 16.425 13 16v-3h3q.425 0 .712-.288Q17 12.425 17 12t-.288-.713Q16.425 11 16 11h-3V8q0-.425-.287-.713Q12.425 7 12 7t-.712.287Q11 7.575 11 8v3H8q-.425 0-.713.287Q7 11.575 7 12t.287.712Q7.575 13 8 13h3v3q0 .425.288.712.287.288.712.288Zm-7 4q-.825 0-1.413-.587Q3 19.825 3 19V5q0-.825.587-1.413Q4.175 3 5 3h14q.825 0 1.413.587Q21 4.175 21 5v14q0 .825-.587 1.413Q19.825 21 19 21Zm0-2h14V5H5v14Zm0 0V5v14Z",upload:"M6.5 20q-2.275 0-3.887-1.575Q1 16.85 1 14.575q0-1.95 1.175-3.475Q3.35 9.575 5.25 9.15q.625-2.3 2.5-3.725Q9.625 4 12 4q2.925 0 4.962 2.037Q19 8.075 19 11q1.725.2 2.863 1.487Q23 13.775 23 15.5q0 1.875-1.312 3.188Q20.375 20 18.5 20H13q-.825 0-1.412-.587Q11 18.825 11 18v-5.2l-.9.9q-.275.275-.7.275-.425 0-.7-.275-.275-.275-.275-.7 0-.425.275-.7l2.6-2.6q.15-.15.325-.213.175-.062.375-.062t.375.062q.175.063.325.213l2.6 2.6q.275.275.275.7 0 .425-.275.7-.275.275-.7.275-.425 0-.7-.275l-.9-.9V18h5.5q1.05 0 1.775-.725Q21 16.55 21 15.5q0-1.05-.725-1.775Q19.55 13 18.5 13H17v-2q0-2.075-1.462-3.538Q14.075 6 12 6 9.925 6 8.463 7.462 7 8.925 7 11h-.5q-1.45 0-2.475 1.025Q3 13.05 3 14.5q0 1.45 1.025 2.475Q5.05 18 6.5 18H8q.425 0 .713.288Q9 18.575 9 19t-.287.712Q8.425 20 8 20Zm5.5-7Z",removeQueue:"M18 13H6q-.425 0-.713-.288Q5 12.425 5 12t.287-.713Q5.575 11 6 11h12q.425 0 .712.287.288.288.288.713t-.288.712Q18.425 13 18 13Zm-2 4H4q-.425 0-.712-.288Q3 16.425 3 16t.288-.713Q3.575 15 4 15h12q.425 0 .712.287.288.288.288.713t-.288.712Q16.425 17 16 17Zm4-8H8q-.425 0-.713-.288Q7 8.425 7 8t.287-.713Q7.575 7 8 7h12q.425 0 .712.287Q21 7.575 21 8t-.288.712Q20.425 9 20 9Z",removeUploaded:"M6.7 17.6q-.2 0-.375-.075T6 17.3l-4.225-4.225Q1.5 12.8 1.5 12.362q0-.437.275-.712.275-.275.7-.275.425 0 .7.275l3.55 3.55 1.4 1.4-.725.7q-.15.15-.325.225-.175.075-.375.075Zm5.65-.025q-.2 0-.375-.063-.175-.062-.325-.212L7.4 13.05q-.275-.275-.275-.713 0-.437.275-.712.275-.275.7-.275.425 0 .7.275l3.55 3.55 8.5-8.5q.275-.275.7-.275.425 0 .7.275.275.275.275.712 0 .438-.275.713l-9.2 9.2q-.15.15-.325.212-.175.063-.375.063Zm0-5.225-1.425-1.4 4.25-4.25q.275-.275.712-.275.438 0 .713.275.275.275.275.7 0 .425-.275.7Z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-material-symbols-sharp.umd.min.js b/dist/icon-set/svg-material-symbols-sharp.umd.min.js new file mode 100644 index 00000000000..661186f62de --- /dev/null +++ b/dist/icon-set/svg-material-symbols-sharp.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(v,Z){"object"==typeof exports&&"undefined"!=typeof module?module.exports=Z():"function"==typeof define&&define.amd?define(Z):((v="undefined"!=typeof globalThis?globalThis:v||self).Quasar=v.Quasar||{},v.Quasar.iconSet=v.Quasar.iconSet||{},v.Quasar.iconSet.svgMaterialSymbolsSharp=Z())}(this,function(){"use strict";var v="M0 0zm8.4 17 3.6-3.6 3.6 3.6 1.4-1.4-3.6-3.6L17 8.4 15.6 7 12 10.6 8.4 7 7 8.4l3.6 3.6L7 15.6Zm3.6 5q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z",Z="M0 0zm9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4Z",h="M0 0zm14 18-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z",m="M9.4 18 8 16.6l4.6-4.6L8 7.4 9.4 6l6 6Z",t="M6.4 19 5 17.6l5.6-5.6L5 6.4 6.4 5l5.6 5.6L17.6 5 19 6.4 13.4 12l5.6 5.6-1.4 1.4-5.6-5.6Z",Q="M0 0zm8 18-6-6 6-6 1.425 1.425-4.6 4.6L9.4 16.6Zm8 0-1.425-1.425 4.6-4.6L14.6 7.4 16 6l6 6Z",e="M14 20V7H9V4h13v3h-5v13Zm-9 0v-8H2V9h9v3H8v8Z",q="M0 0zm7 18-1.4-1.4 4.6-4.6-4.6-4.6L7 6l6 6Zm9 0V6h2v12Z",l="M1 21 12 2l11 19Zm3.45-2h15.1L12 6ZM12 18q.425 0 .713-.288Q13 17.425 13 17t-.287-.712Q12.425 16 12 16t-.712.288Q11 16.575 11 17t.288.712Q11.575 18 12 18Zm-1-3h2v-5h-2Zm1-2.5Z";return{name:"svg-material-symbols-sharp",type:{positive:"M0 0zm10.6 16.6 7.05-7.05-1.4-1.4-5.65 5.65-2.85-2.85-1.4 1.4ZM12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z",negative:l,info:"M11 17h2v-6h-2Zm1-8q.425 0 .713-.288Q13 8.425 13 8t-.287-.713Q12.425 7 12 7t-.712.287Q11 7.575 11 8t.288.712Q11.575 9 12 9Zm0 13q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z",warning:"M12 21q-.825 0-1.412-.587Q10 19.825 10 19q0-.825.588-1.413Q11.175 17 12 17t1.413.587Q14 18.175 14 19q0 .825-.587 1.413Q12.825 21 12 21Zm-2-6V3h4v12Z"},arrow:{up:"M11 20V7.825l-5.6 5.6L4 12l8-8 8 8-1.4 1.425-5.6-5.6V20Z",right:"M0 0zm12 20-1.425-1.4 5.6-5.6H4v-2h12.175l-5.6-5.6L12 4l8 8Z",down:"M0 0zm12 20-8-8 1.4-1.425 5.6 5.6V4h2v12.175l5.6-5.6L20 12Z",left:"M0 0zm12 20-8-8 8-8 1.425 1.4-5.6 5.6H20v2H7.825l5.6 5.6Z",dropdown:"M0 0zm12 15-5-5h10Z"},chevron:{left:h,right:m},colorPicker:{spectrum:"M11 13v-2h2v2Zm-2 2v-2h2v2Zm4 0v-2h2v2Zm2-2v-2h2v2Zm-8 0v-2h2v2Zm-4 8V3h18v18Zm4-2h2v-2H7Zm4 0h2v-2h-2Zm4 0h2v-2h-2ZM5 17h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2V5H5v8h2v2H5Zm0 2V5Z",tune:"M3 19v-2h6v2ZM3 7V5h10v2Zm8 14v-6h2v2h8v2h-8v2Zm-4-6v-2H3v-2h4V9h2v6Zm4-2v-2h10v2Zm4-4V3h2v2h4v2h-4v2Z",palette:"M3.975 12.85v6.95l-2.7-1.1ZM8.9 22H5.975v-8Zm2.325.6L5.375 6.55l11.35-4.15 5.85 16.05Zm-.25-12.6q.425 0 .713-.288.287-.287.287-.712t-.287-.713Q11.4 8 10.975 8t-.712.287q-.288.288-.288.713t.288.712q.287.288.712.288Zm1.45 10 7.55-2.75L15.525 5l-7.55 2.75ZM7.975 7.75 15.525 5Z"},pullToRefresh:{icon:"M12 20q-3.35 0-5.675-2.325Q4 15.35 4 12q0-3.35 2.325-5.675Q8.65 4 12 4q1.725 0 3.3.713 1.575.712 2.7 2.037V4h2v7h-7V9h4.2q-.8-1.4-2.187-2.2Q13.625 6 12 6 9.5 6 7.75 7.75T6 12q0 2.5 1.75 4.25T12 18q1.925 0 3.475-1.1T17.65 14h2.1q-.7 2.65-2.85 4.325Q14.75 20 12 20Z"},carousel:{left:h,right:m,up:"M7.4 15.4 6 14l6-6 6 6-1.4 1.4-4.6-4.6Z",down:"M0 0zm12 15.4-6-6L7.4 8l4.6 4.6L16.6 8 18 9.4Z",navigationIcon:"M12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z"},chip:{remove:v,selected:Z},datetime:{arrowLeft:h,arrowRight:m,now:"M0 0zm15.3 16.7 1.4-1.4-3.7-3.7V7h-2v5.4ZM12 22q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-10Zm0 8q3.325 0 5.663-2.337Q20 15.325 20 12t-2.337-5.663Q15.325 4 12 4T6.338 6.337Q4 8.675 4 12t2.338 5.663Q8.675 20 12 20Z",today:"M9 16.5q-1.05 0-1.775-.725Q6.5 15.05 6.5 14q0-1.05.725-1.775Q7.95 11.5 9 11.5q1.05 0 1.775.725.725.725.725 1.775 0 1.05-.725 1.775Q10.05 16.5 9 16.5ZM3 22V4h3V2h2v2h8V2h2v2h3v18Zm2-2h14V10H5ZM5 8h14V6H5Zm0 0V6v2Z"},editor:{bold:"M7 18V4h5.5q1.7 0 2.975 1.025Q16.75 6.05 16.75 7.65q0 .95-.5 1.762-.5.813-1.35 1.238v.2q1.05.35 1.7 1.237.65.888.65 2.013 0 1.725-1.387 2.813Q14.475 18 12.65 18Zm2.65-8.3h2.65q.75 0 1.325-.475t.575-1.2q0-.725-.575-1.2T12.3 6.35H9.65Zm0 5.9h2.85q.85 0 1.475-.513.625-.512.625-1.312t-.625-1.313q-.625-.512-1.475-.512H9.65Z",italic:"M5 20v-3h3.375l4-10H9V4h10v3h-3.375l-4 10H15v3Z",strikethrough:"M12.15 20q-1.9 0-3.375-1.125T6.65 15.8l2.2-.95q.35 1.2 1.212 1.975.863.775 2.138.775 1.05 0 1.9-.5.85-.5.85-1.6 0-.45-.175-.825Q14.6 14.3 14.3 14h2.8q.125.35.188.712.062.363.062.788 0 2.15-1.538 3.325Q14.275 20 12.15 20ZM2 12v-2h20v2Zm10.05-8.15q1.65 0 2.888.812 1.237.813 1.912 2.488l-2.2.975q-.225-.725-.838-1.3Q13.2 6.25 12.1 6.25q-1.025 0-1.7.463-.675.462-.75 1.287h-2.4q.05-1.725 1.363-2.938Q9.925 3.85 12.05 3.85Z",underline:"M5 21v-2h14v2Zm7-4q-2.525 0-4.263-1.738Q6 13.525 6 11V3h2.5v8q0 1.475 1.012 2.488Q10.525 14.5 12 14.5t2.488-1.012Q15.5 12.475 15.5 11V3H18v8q0 2.525-1.738 4.262Q14.525 17 12 17Z",unorderedList:"M4.5 19.5q-.625 0-1.062-.438Q3 18.625 3 18t.438-1.062Q3.875 16.5 4.5 16.5t1.062.438Q6 17.375 6 18t-.438 1.062q-.437.438-1.062.438ZM8 19v-2h13v2Zm-3.5-5.5q-.625 0-1.062-.438Q3 12.625 3 12t.438-1.062Q3.875 10.5 4.5 10.5t1.062.438Q6 11.375 6 12t-.438 1.062q-.437.438-1.062.438ZM8 13v-2h13v2ZM4.5 7.5q-.625 0-1.062-.438Q3 6.625 3 6t.438-1.062Q3.875 4.5 4.5 4.5t1.062.438Q6 5.375 6 6t-.438 1.062Q5.125 7.5 4.5 7.5ZM8 7V5h13v2Z",orderedList:"M3 20v-1h2v-.5H4v-1h1V17H3v-1h3v4Zm5-1v-2h13v2Zm-5-5v-.9L4.8 11H3v-1h3v.9L4.2 13H6v1Zm5-1v-2h13v2ZM4 8V5H3V4h2v4Zm4-1V5h13v2Z",subscript:"M4 21v-2h16v2Zm8-4-5-5 1.4-1.4 2.6 2.6V3h2v10.2l2.6-2.6L17 12Z",superscript:"M11 21V10.8l-2.6 2.6L7 12l5-5 5 5-1.4 1.4-2.6-2.6V21ZM4 5V3h16v2Z",hyperlink:"M11 17H7q-2.075 0-3.537-1.463Q2 14.075 2 12t1.463-3.538Q4.925 7 7 7h4v2H7q-1.25 0-2.125.875T4 12q0 1.25.875 2.125T7 15h4Zm-3-4v-2h8v2Zm5 4v-2h4q1.25 0 2.125-.875T20 12q0-1.25-.875-2.125T17 9h-4V7h4q2.075 0 3.538 1.462Q22 9.925 22 12q0 2.075-1.462 3.537Q19.075 17 17 17Z",toggleFullscreen:"M5 19v-5h2v3h3v2Zm0-9V5h5v2H7v3Zm9 9v-2h3v-3h2v5Zm3-9V7h-3V5h5v5Z",quote:"M15 11h3V8h-3Zm-9 0h3V8H6Zm9 6 2-4h-4V6h7v7l-2 4Zm-9 0 2-4H4V6h7v7l-2 4Zm1.5-7.5Zm9 0Z",left:"M3 21v-2h18v2Zm0-4v-2h12v2Zm0-4v-2h18v2Zm0-4V7h12v2Zm0-4V3h18v2Z",center:"M3 21v-2h18v2Zm4-4v-2h10v2Zm-4-4v-2h18v2Zm4-4V7h10v2ZM3 5V3h18v2Z",right:"M3 21v-2h18v2Zm6-4v-2h12v2Zm-6-4v-2h18v2Zm6-4V7h12v2ZM3 5V3h18v2Z",justify:"M3 21v-2h18v2Zm0-4v-2h18v2Zm0-4v-2h18v2Zm0-4V7h18v2Zm0-4V3h18v2Z",print:"M16 8V5H8v3H6V3h12v5Zm2 4.5q.425 0 .712-.288.288-.287.288-.712t-.288-.713Q18.425 10.5 18 10.5t-.712.287Q17 11.075 17 11.5t.288.712q.287.288.712.288ZM16 19v-4H8v4Zm2 2H6v-4H2V8h20v9h-4Zm2-6v-5H4v5h2v-2h12v2ZM4 10h16H6Z",outdent:"M3 21v-2h18v2Zm8-4v-2h10v2Zm-4-1-4-4 4-4Zm4-3v-2h10v2Zm0-4V7h10v2ZM3 5V3h18v2Z",indent:"M3 21v-2h18v2Zm0-5V8l4 4ZM3 5V3h18v2Zm8 12v-2h10v2Zm0-4v-2h10v2Zm0-4V7h10v2Z",removeFormat:"M0 0zm13.2 10.35-2.325-2.325L7.85 5H20v3h-5.8Zm6.6 12.25-8.3-8.3-2 4.7H6.225L9.2 12 1.4 4.2l1.4-1.4 18.4 18.4Z",formatting:"M5 19v-2h14v2Zm1.9-4L11 4h2l4.1 11h-1.9l-.95-2.8H9.8l-1 2.8Zm3.45-4.4h3.3l-1.6-4.55h-.1Z",fontSize:e,align:"M3 21v-2h18v2Zm0-4v-2h12v2Zm0-4v-2h18v2Zm0-4V7h12v2Zm0-4V3h18v2Z",hr:"M5 13v-2h14v2Z",undo:"M14.1 19H7v-2h7.1q1.575 0 2.737-1Q18 15 18 13.5T16.837 11q-1.162-1-2.737-1H7.8l2.6 2.6L9 14 4 9l5-5 1.4 1.4L7.8 8h6.3q2.425 0 4.163 1.575Q20 11.15 20 13.5q0 2.35-1.737 3.925Q16.525 19 14.1 19Z",redo:"M9.9 19q-2.425 0-4.162-1.575Q4 15.85 4 13.5q0-2.35 1.738-3.925Q7.475 8 9.9 8h6.3l-2.6-2.6L15 4l5 5-5 5-1.4-1.4 2.6-2.6H9.9q-1.575 0-2.737 1Q6 12 6 13.5T7.163 16q1.162 1 2.737 1H17v2Z",heading:e,code:Q,size:e,font:"M6.4 18h2.1l1.1-3.05h4.8L15.5 18h2.1L13.05 6h-2.1Zm3.8-4.8 1.75-4.95h.1l1.75 4.95ZM2 22V2h20v20Zm2-2h16V4H4Zm0 0V4v16Z",viewSource:Q},expansionItem:{icon:"M0 0zm12 15.4-6-6L7.4 8l4.6 4.6L16.6 8 18 9.4Z",denseIcon:"M0 0zm12 15-5-5h10Z"},fab:{icon:"M11 19v-6H5v-2h6V5h2v6h6v2h-6v6Z",activeIcon:t},field:{clear:v,error:"M12 17q.425 0 .713-.288Q13 16.425 13 16t-.287-.713Q12.425 15 12 15t-.712.287Q11 15.575 11 16t.288.712Q11.575 17 12 17Zm-1-4h2V7h-2Zm1 9q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3.35 2.325 5.675Q8.65 20 12 20Zm0-8Z"},pagination:{first:"M6 18V6h2v12Zm11 0-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z",prev:"M0 0zm14 18-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z",next:"M9.4 18 8 16.6l4.6-4.6L8 7.4 9.4 6l6 6Z",last:q},rating:{icon:"M0 0zm8.85 17.825 3.15-1.9 3.15 1.925-.825-3.6 2.775-2.4-3.65-.325-1.45-3.4-1.45 3.375-3.65.325 2.775 2.425ZM5.825 22l1.625-7.025L2 10.25l7.2-.625L12 3l2.8 6.625 7.2.625-5.45 4.725L18.175 22 12 18.275ZM12 13.25Z"},stepper:{done:Z,active:"M5 19h1.4l8.625-8.625-1.4-1.4L5 17.6ZM19.3 8.925l-4.25-4.2L17.875 1.9 22.1 6.125ZM3 21v-4.25l10.6-10.6 4.25 4.25L7.25 21ZM14.325 9.675l-.7-.7 1.4 1.4Z",error:l},tabs:{left:h,right:m,up:"M7.4 15.4 6 14l6-6 6 6-1.4 1.4-4.6-4.6Z",down:"M0 0zm12 15.4-6-6L7.4 8l4.6 4.6L16.6 8 18 9.4Z"},table:{arrowUp:"M11 20V7.825l-5.6 5.6L4 12l8-8 8 8-1.4 1.425-5.6-5.6V20Z",warning:l,firstPage:"M6 18V6h2v12Zm11 0-6-6 6-6 1.4 1.4-4.6 4.6 4.6 4.6Z",prevPage:h,nextPage:m,lastPage:q},tree:{icon:"M8 19V5l11 7Zm2-7Zm0 3.35L15.25 12 10 8.65Z"},uploader:{done:"M0 0zm9.55 18-5.7-5.7 1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4Z",clear:t,add:"M11 17h2v-4h4v-2h-4V7h-2v4H7v2h4Zm-8 4V3h18v18Zm2-2h14V5H5Zm0 0V5v14Z",upload:"M6.5 20q-2.275 0-3.887-1.575Q1 16.85 1 14.575q0-1.95 1.175-3.475Q3.35 9.575 5.25 9.15q.625-2.3 2.5-3.725Q9.625 4 12 4q2.925 0 4.962 2.037Q19 8.075 19 11q1.725.2 2.863 1.487Q23 13.775 23 15.5q0 1.875-1.312 3.188Q20.375 20 18.5 20H13q-.825 0-1.412-.587Q11 18.825 11 18v-5.15L9.4 14.4 8 13l4-4 4 4-1.4 1.4-1.6-1.55V18h5.5q1.05 0 1.775-.725Q21 16.55 21 15.5q0-1.05-.725-1.775Q19.55 13 18.5 13H17v-2q0-2.075-1.462-3.538Q14.075 6 12 6 9.925 6 8.463 7.462 7 8.925 7 11h-.5q-1.45 0-2.475 1.025Q3 13.05 3 14.5q0 1.45 1.025 2.475Q5.05 18 6.5 18H9v2Zm5.5-7Z",removeQueue:"M3 17v-2h14v2Zm2-4v-2h14v2Zm2-4V7h14v2Z",removeUploaded:"M0 0zm6.7 18-5.65-5.65 1.425-1.4 4.25 4.25 1.4 1.4Zm5.65 0L6.7 12.35l1.4-1.425 4.25 4.25 9.2-9.2 1.4 1.425Zm0-5.65-1.425-1.4L15.875 6 17.3 7.4Z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-mdi-v4.umd.min.js b/dist/icon-set/svg-mdi-v4.umd.min.js new file mode 100644 index 00000000000..c783b85b9c2 --- /dev/null +++ b/dist/icon-set/svg-mdi-v4.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,V){"object"==typeof exports&&"undefined"!=typeof module?module.exports=V():"function"==typeof define&&define.amd?define(V):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.svgMdiV4=V())}(this,function(){"use strict";var H="M13,14H11V10H13M13,18H11V16H13M1,21H23L12,2L1,21Z",V="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z",L="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z",M="M18.41,7.41L17,6L11,12L17,18L18.41,16.59L13.83,12L18.41,7.41M12.41,7.41L11,6L5,12L11,18L12.41,16.59L7.83,12L12.41,7.41Z",e="M5.59,7.41L7,6L13,12L7,18L5.59,16.59L10.17,12L5.59,7.41M11.59,7.41L13,6L19,12L13,18L11.59,16.59L16.17,12L11.59,7.41Z",A="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z",C="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z",i="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z",t="M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z",Z="M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z",n="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z",o="M14.6,16.6L19.2,12L14.6,7.4L16,6L22,12L16,18L14.6,16.6M9.4,16.6L4.8,12L9.4,7.4L8,6L2,12L8,18L9.4,16.6Z",r="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",a="M3,12H6V19H9V12H12V9H3M9,4V7H14V19H17V7H22V4H9Z";return{name:"svg-mdi-v4",type:{positive:"M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z",negative:H,info:"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z",warning:"M 11,4L 13,4L 13,15L 11,15L 11,4 Z M 13,18L 13,20L 11,20L 11,18L 13,18 Z"},arrow:{up:V,right:"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z",down:"M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z",left:"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z",dropdown:"M7,10L12,15L17,10H7Z"},chevron:{left:C,right:i},colorPicker:{spectrum:"M11,9H13V11H11V9M9,11H11V13H9V11M13,11H15V13H13V11M15,9H17V11H15V9M7,9H9V11H7V9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M9,18H7V16H9V18M13,18H11V16H13V18M17,18H15V16H17V18M19,11H17V13H19V15H17V13H15V15H13V13H11V15H9V13H7V15H5V13H7V11H5V5H19V11Z",tune:"M3,17V19H9V17H3M3,5V7H13V5H3M13,21V19H21V17H13V15H11V21H13M7,9V11H3V13H7V15H9V9H7M21,13V11H11V13H21M15,9H17V7H21V5H17V3H15V9Z",palette:"M2.53,19.65L3.87,20.21V11.18L1.44,17.04C1.03,18.06 1.5,19.23 2.53,19.65M22.03,15.95L17.07,4C16.76,3.23 16.03,2.77 15.26,2.75C15,2.75 14.73,2.79 14.47,2.9L7.1,5.95C6.35,6.26 5.89,7 5.87,7.75C5.86,8 5.91,8.29 6,8.55L11,20.5C11.29,21.28 12.03,21.74 12.81,21.75C13.07,21.75 13.33,21.7 13.58,21.6L20.94,18.55C21.96,18.13 22.45,16.96 22.03,15.95M7.88,8.75A1,1 0 0,1 6.88,7.75A1,1 0 0,1 7.88,6.75C8.43,6.75 8.88,7.2 8.88,7.75C8.88,8.3 8.43,8.75 7.88,8.75M5.88,19.75A2,2 0 0,0 7.88,21.75H9.33L5.88,13.41V19.75Z"},pullToRefresh:{icon:"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"},carousel:{left:C,right:i,up:t,down:A,navigationIcon:"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"},chip:{remove:Z,selected:L},datetime:{arrowLeft:C,arrowRight:i,now:"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z",today:"M7,10H12V15H7M19,19H5V8H19M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z"},editor:{bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",hyperlink:"M3.9,12C3.9,10.29 5.29,8.9 7,8.9H11V7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H11V15.1H7C5.29,15.1 3.9,13.71 3.9,12M8,13H16V11H8V13M17,7H13V8.9H17C18.71,8.9 20.1,10.29 20.1,12C20.1,13.71 18.71,15.1 17,15.1H13V17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7Z",toggleFullscreen:"M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z",quote:"M14,17H17L19,13V7H13V13H16M6,17H9L11,13V7H5V13H8L6,17Z",left:r,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",print:"M18,3H6V7H18M19,12A1,1 0 0,1 18,11A1,1 0 0,1 19,10A1,1 0 0,1 20,11A1,1 0 0,1 19,12M16,19H8V14H16M19,8H5A3,3 0 0,0 2,11V17H6V21H18V17H22V11A3,3 0 0,0 19,8Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:a,align:r,hr:"M19,13H5V11H19V13Z",undo:"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z",redo:"M18.4,10.6C16.55,9 14.15,8 11.5,8C6.85,8 2.92,11.03 1.54,15.22L3.9,16C4.95,12.81 7.95,10.5 11.5,10.5C13.45,10.5 15.23,11.22 16.62,12.38L13,16H22V7L18.4,10.6Z",heading:a,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",code:o,size:a,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z",viewSource:o},expansionItem:{icon:A,denseIcon:"M7,10L12,15L17,10H7Z"},fab:{icon:"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z",activeIcon:n},field:{clear:Z,error:"M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"},pagination:{first:M,prev:C,next:i,last:e},rating:{icon:"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"},stepper:{done:L,active:"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z",error:H},tabs:{left:C,right:i,up:t,down:A},table:{arrowUp:V,warning:H,firstPage:M,prevPage:C,nextPage:i,lastPage:e},tree:{icon:"M8,5.14V19.14L19,12.14L8,5.14Z"},uploader:{done:L,clear:n,add:"M17,13H13V17H11V13H7V11H11V7H13V11H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z",upload:"M14,13V17H10V13H7L12,8L17,13M19.35,10.03C18.67,6.59 15.64,4 12,4C9.11,4 6.6,5.64 5.35,8.03C2.34,8.36 0,10.9 0,14A6,6 0 0,0 6,20H19A5,5 0 0,0 24,15C24,12.36 21.95,10.22 19.35,10.03Z",removeQueue:"M5,13H19V11H5M3,17H17V15H3M7,7V9H21V7",removeUploaded:"M0.41,13.41L6,19L7.41,17.58L1.83,12M22.24,5.58L11.66,16.17L7.5,12L6.07,13.41L11.66,19L23.66,7M18,7L16.59,5.58L10.24,11.93L11.66,13.34L18,7Z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-mdi-v5.umd.min.js b/dist/icon-set/svg-mdi-v5.umd.min.js new file mode 100644 index 00000000000..172b87e080f --- /dev/null +++ b/dist/icon-set/svg-mdi-v5.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,V){"object"==typeof exports&&"undefined"!=typeof module?module.exports=V():"function"==typeof define&&define.amd?define(V):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.svgMdiV5=V())}(this,function(){"use strict";var H="M13 14H11V9H13M13 18H11V16H13M1 21H23L12 2L1 21Z",V="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z",L="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z",M="M18.41,7.41L17,6L11,12L17,18L18.41,16.59L13.83,12L18.41,7.41M12.41,7.41L11,6L5,12L11,18L12.41,16.59L7.83,12L12.41,7.41Z",e="M5.59,7.41L7,6L13,12L7,18L5.59,16.59L10.17,12L5.59,7.41M11.59,7.41L13,6L19,12L13,18L11.59,16.59L16.17,12L11.59,7.41Z",A="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z",C="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z",i="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z",t="M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z",Z="M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z",n="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z",o="M14.6,16.6L19.2,12L14.6,7.4L16,6L22,12L16,18L14.6,16.6M9.4,16.6L4.8,12L9.4,7.4L8,6L2,12L8,18L9.4,16.6Z",r="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",a="M2 4V7H7V19H10V7H15V4H2M21 9H12V12H15V19H18V12H21V9Z";return{name:"svg-mdi-v5",type:{positive:"M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z",negative:H,info:"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z",warning:"M 11,4L 13,4L 13,15L 11,15L 11,4 Z M 13,18L 13,20L 11,20L 11,18L 13,18 Z"},arrow:{up:V,right:"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z",down:"M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z",left:"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z",dropdown:"M7,10L12,15L17,10H7Z"},chevron:{left:C,right:i},colorPicker:{spectrum:"M11,9H13V11H11V9M9,11H11V13H9V11M13,11H15V13H13V11M15,9H17V11H15V9M7,9H9V11H7V9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M9,18H7V16H9V18M13,18H11V16H13V18M17,18H15V16H17V18M19,11H17V13H19V15H17V13H15V15H13V13H11V15H9V13H7V15H5V13H7V11H5V5H19V11Z",tune:"M3,17V19H9V17H3M3,5V7H13V5H3M13,21V19H21V17H13V15H11V21H13M7,9V11H3V13H7V15H9V9H7M21,13V11H11V13H21M15,9H17V7H21V5H17V3H15V9Z",palette:"M2.53,19.65L3.87,20.21V11.18L1.44,17.04C1.03,18.06 1.5,19.23 2.53,19.65M22.03,15.95L17.07,4C16.76,3.23 16.03,2.77 15.26,2.75C15,2.75 14.73,2.79 14.47,2.9L7.1,5.95C6.35,6.26 5.89,7 5.87,7.75C5.86,8 5.91,8.29 6,8.55L11,20.5C11.29,21.28 12.03,21.74 12.81,21.75C13.07,21.75 13.33,21.7 13.58,21.6L20.94,18.55C21.96,18.13 22.45,16.96 22.03,15.95M7.88,8.75A1,1 0 0,1 6.88,7.75A1,1 0 0,1 7.88,6.75C8.43,6.75 8.88,7.2 8.88,7.75C8.88,8.3 8.43,8.75 7.88,8.75M5.88,19.75A2,2 0 0,0 7.88,21.75H9.33L5.88,13.41V19.75Z"},pullToRefresh:{icon:"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"},carousel:{left:C,right:i,up:t,down:A,navigationIcon:"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"},chip:{remove:Z,selected:L},datetime:{arrowLeft:C,arrowRight:i,now:"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z",today:"M7,10H12V15H7M19,19H5V8H19M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z"},editor:{bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",hyperlink:"M3.9,12C3.9,10.29 5.29,8.9 7,8.9H11V7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H11V15.1H7C5.29,15.1 3.9,13.71 3.9,12M8,13H16V11H8V13M17,7H13V8.9H17C18.71,8.9 20.1,10.29 20.1,12C20.1,13.71 18.71,15.1 17,15.1H13V17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7Z",toggleFullscreen:"M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z",quote:"M14,17H17L19,13V7H13V13H16M6,17H9L11,13V7H5V13H8L6,17Z",left:r,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",print:"M18,3H6V7H18M19,12A1,1 0 0,1 18,11A1,1 0 0,1 19,10A1,1 0 0,1 20,11A1,1 0 0,1 19,12M16,19H8V14H16M19,8H5A3,3 0 0,0 2,11V17H6V21H18V17H22V11A3,3 0 0,0 19,8Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:a,align:r,hr:"M19,13H5V11H19V13Z",undo:"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z",redo:"M18.4,10.6C16.55,9 14.15,8 11.5,8C6.85,8 2.92,11.03 1.54,15.22L3.9,16C4.95,12.81 7.95,10.5 11.5,10.5C13.45,10.5 15.23,11.22 16.62,12.38L13,16H22V7L18.4,10.6Z",heading:a,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",code:o,size:a,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z",viewSource:o},expansionItem:{icon:A,denseIcon:"M7,10L12,15L17,10H7Z"},fab:{icon:"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z",activeIcon:n},field:{clear:Z,error:"M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"},pagination:{first:M,prev:C,next:i,last:e},rating:{icon:"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"},stepper:{done:L,active:"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z",error:H},tabs:{left:C,right:i,up:t,down:A},table:{arrowUp:V,warning:H,firstPage:M,prevPage:C,nextPage:i,lastPage:e},tree:{icon:"M8,5.14V19.14L19,12.14L8,5.14Z"},uploader:{done:L,clear:n,add:"M17,13H13V17H11V13H7V11H11V7H13V11H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z",upload:"M14,13V17H10V13H7L12,8L17,13M19.35,10.03C18.67,6.59 15.64,4 12,4C9.11,4 6.6,5.64 5.35,8.03C2.34,8.36 0,10.9 0,14A6,6 0 0,0 6,20H19A5,5 0 0,0 24,15C24,12.36 21.95,10.22 19.35,10.03Z",removeQueue:"M5,13H19V11H5M3,17H17V15H3M7,7V9H21V7",removeUploaded:"M0.41,13.41L6,19L7.41,17.58L1.83,12M22.24,5.58L11.66,16.17L7.5,12L6.07,13.41L11.66,19L23.66,7M18,7L16.59,5.58L10.24,11.93L11.66,13.34L18,7Z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-mdi-v6.umd.min.js b/dist/icon-set/svg-mdi-v6.umd.min.js new file mode 100644 index 00000000000..55df4a60149 --- /dev/null +++ b/dist/icon-set/svg-mdi-v6.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(H,V){"object"==typeof exports&&"undefined"!=typeof module?module.exports=V():"function"==typeof define&&define.amd?define(V):((H="undefined"!=typeof globalThis?globalThis:H||self).Quasar=H.Quasar||{},H.Quasar.iconSet=H.Quasar.iconSet||{},H.Quasar.iconSet.svgMdiV6=V())}(this,function(){"use strict";var H="M13 14H11V9H13M13 18H11V16H13M1 21H23L12 2L1 21Z",V="M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z",L="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z",M="M18.41,7.41L17,6L11,12L17,18L18.41,16.59L13.83,12L18.41,7.41M12.41,7.41L11,6L5,12L11,18L12.41,16.59L7.83,12L12.41,7.41Z",e="M5.59,7.41L7,6L13,12L7,18L5.59,16.59L10.17,12L5.59,7.41M11.59,7.41L13,6L19,12L13,18L11.59,16.59L16.17,12L11.59,7.41Z",A="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z",C="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z",i="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z",t="M7.41,15.41L12,10.83L16.59,15.41L18,14L12,8L6,14L7.41,15.41Z",Z="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z",n="M12,2C17.53,2 22,6.47 22,12C22,17.53 17.53,22 12,22C6.47,22 2,17.53 2,12C2,6.47 6.47,2 12,2M15.59,7L12,10.59L8.41,7L7,8.41L10.59,12L7,15.59L8.41,17L12,13.41L15.59,17L17,15.59L13.41,12L17,8.41L15.59,7Z",o="M14.6,16.6L19.2,12L14.6,7.4L16,6L22,12L16,18L14.6,16.6M9.4,16.6L4.8,12L9.4,7.4L8,6L2,12L8,18L9.4,16.6Z",r="M3,3H21V5H3V3M3,7H15V9H3V7M3,11H21V13H3V11M3,15H15V17H3V15M3,19H21V21H3V19Z",a="M2 4V7H7V19H10V7H15V4H2M21 9H12V12H15V19H18V12H21V9Z";return{name:"svg-mdi-v6",type:{positive:"M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z",negative:H,info:"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z",warning:"M 11,4L 13,4L 13,15L 11,15L 11,4 Z M 13,18L 13,20L 11,20L 11,18L 13,18 Z"},arrow:{up:V,right:"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z",down:"M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z",left:"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z",dropdown:"M7,10L12,15L17,10H7Z"},chevron:{left:C,right:i},colorPicker:{spectrum:"M11,9H13V11H11V9M9,11H11V13H9V11M13,11H15V13H13V11M15,9H17V11H15V9M7,9H9V11H7V9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M9,18H7V16H9V18M13,18H11V16H13V18M17,18H15V16H17V18M19,11H17V13H19V15H17V13H15V15H13V13H11V15H9V13H7V15H5V13H7V11H5V5H19V11Z",tune:"M3,17V19H9V17H3M3,5V7H13V5H3M13,21V19H21V17H13V15H11V21H13M7,9V11H3V13H7V15H9V9H7M21,13V11H11V13H21M15,9H17V7H21V5H17V3H15V9Z",palette:"M2.53,19.65L3.87,20.21V11.18L1.44,17.04C1.03,18.06 1.5,19.23 2.53,19.65M22.03,15.95L17.07,4C16.76,3.23 16.03,2.77 15.26,2.75C15,2.75 14.73,2.79 14.47,2.9L7.1,5.95C6.35,6.26 5.89,7 5.87,7.75C5.86,8 5.91,8.29 6,8.55L11,20.5C11.29,21.28 12.03,21.74 12.81,21.75C13.07,21.75 13.33,21.7 13.58,21.6L20.94,18.55C21.96,18.13 22.45,16.96 22.03,15.95M7.88,8.75A1,1 0 0,1 6.88,7.75A1,1 0 0,1 7.88,6.75C8.43,6.75 8.88,7.2 8.88,7.75C8.88,8.3 8.43,8.75 7.88,8.75M5.88,19.75A2,2 0 0,0 7.88,21.75H9.33L5.88,13.41V19.75Z"},pullToRefresh:{icon:"M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"},carousel:{left:C,right:i,up:t,down:A,navigationIcon:"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"},chip:{remove:n,selected:L},datetime:{arrowLeft:C,arrowRight:i,now:"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z",today:"M7,10H12V15H7M19,19H5V8H19M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z"},editor:{bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",italic:"M10,4V7H12.21L8.79,15H6V18H14V15H11.79L15.21,7H18V4H10Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",underline:"M5,21H19V19H5V21M12,17A6,6 0 0,0 18,11V3H15.5V11A3.5,3.5 0 0,1 12,14.5A3.5,3.5 0 0,1 8.5,11V3H6V11A6,6 0 0,0 12,17Z",unorderedList:"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z",orderedList:"M7,13V11H21V13H7M7,19V17H21V19H7M7,7V5H21V7H7M3,8V5H2V4H4V8H3M2,17V16H5V20H2V19H4V18.5H3V17.5H4V17H2M4.25,10A0.75,0.75 0 0,1 5,10.75C5,10.95 4.92,11.14 4.79,11.27L3.12,13H5V14H2V13.08L4,11H2V10H4.25Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",hyperlink:"M3.9,12C3.9,10.29 5.29,8.9 7,8.9H11V7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H11V15.1H7C5.29,15.1 3.9,13.71 3.9,12M8,13H16V11H8V13M17,7H13V8.9H17C18.71,8.9 20.1,10.29 20.1,12C20.1,13.71 18.71,15.1 17,15.1H13V17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7Z",toggleFullscreen:"M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z",quote:"M14,17H17L19,13V7H13V13H16M6,17H9L11,13V7H5V13H8L6,17Z",left:r,center:"M3,3H21V5H3V3M7,7H17V9H7V7M3,11H21V13H3V11M7,15H17V17H7V15M3,19H21V21H3V19Z",right:"M3,3H21V5H3V3M9,7H21V9H9V7M3,11H21V13H3V11M9,15H21V17H9V15M3,19H21V21H3V19Z",justify:"M3,3H21V5H3V3M3,7H21V9H3V7M3,11H21V13H3V11M3,15H21V17H3V15M3,19H21V21H3V19Z",print:"M18,3H6V7H18M19,12A1,1 0 0,1 18,11A1,1 0 0,1 19,10A1,1 0 0,1 20,11A1,1 0 0,1 19,12M16,19H8V14H16M19,8H5A3,3 0 0,0 2,11V17H6V21H18V17H22V11A3,3 0 0,0 19,8Z",outdent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M3,21H21V19H3M3,12L7,16V8M11,17H21V15H11V17Z",indent:"M11,13H21V11H11M11,9H21V7H11M3,3V5H21V3M11,17H21V15H11M3,8V16L7,12M3,21H21V19H3V21Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",formatting:"M9.62,12L12,5.67L14.37,12M11,3L5.5,17H7.75L8.87,14H15.12L16.25,17H18.5L13,3H11Z",fontSize:a,align:r,hr:"M19,13H5V11H19V13Z",undo:"M12.5,8C9.85,8 7.45,9 5.6,10.6L2,7V16H11L7.38,12.38C8.77,11.22 10.54,10.5 12.5,10.5C16.04,10.5 19.05,12.81 20.1,16L22.47,15.22C21.08,11.03 17.15,8 12.5,8Z",redo:"M18.4,10.6C16.55,9 14.15,8 11.5,8C6.85,8 2.92,11.03 1.54,15.22L3.9,16C4.95,12.81 7.95,10.5 11.5,10.5C13.45,10.5 15.23,11.22 16.62,12.38L13,16H22V7L18.4,10.6Z",heading:a,heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",code:o,size:a,size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z",viewSource:o},expansionItem:{icon:A,denseIcon:"M7,10L12,15L17,10H7Z"},fab:{icon:"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z",activeIcon:Z},field:{clear:n,error:"M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"},pagination:{first:M,prev:C,next:i,last:e},rating:{icon:"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"},stepper:{done:L,active:"M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z",error:H},tabs:{left:C,right:i,up:t,down:A},table:{arrowUp:V,warning:H,firstPage:M,prevPage:C,nextPage:i,lastPage:e},tree:{icon:"M8,5.14V19.14L19,12.14L8,5.14Z"},uploader:{done:L,clear:Z,add:"M17,13H13V17H11V13H7V11H11V7H13V11H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z",upload:"M14,13V17H10V13H7L12,8L17,13M19.35,10.03C18.67,6.59 15.64,4 12,4C9.11,4 6.6,5.64 5.35,8.03C2.34,8.36 0,10.9 0,14A6,6 0 0,0 6,20H19A5,5 0 0,0 24,15C24,12.36 21.95,10.22 19.35,10.03Z",removeQueue:"M5,13H19V11H5M3,17H17V15H3M7,7V9H21V7",removeUploaded:"M0.41,13.41L6,19L7.41,17.58L1.83,12M22.24,5.58L11.66,16.17L7.5,12L6.07,13.41L11.66,19L23.66,7M18,7L16.59,5.58L10.24,11.93L11.66,13.34L18,7Z"}}}); \ No newline at end of file diff --git a/dist/icon-set/svg-themify.umd.min.js b/dist/icon-set/svg-themify.umd.min.js new file mode 100644 index 00000000000..3a2172b4d60 --- /dev/null +++ b/dist/icon-set/svg-themify.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(h,l){"object"==typeof exports&&"undefined"!=typeof module?module.exports=l():"function"==typeof define&&define.amd?define(l):((h="undefined"!=typeof globalThis?globalThis:h||self).Quasar=h.Quasar||{},h.Quasar.iconSet=h.Quasar.iconSet||{},h.Quasar.iconSet.svgThemify=l())}(this,function(){"use strict";var h="M8.454 1.492l-8.242 14.508h16.581l-8.339-14.508zM8.459 3.508l6.605 11.492h-13.134l6.529-11.492zM9 10.938h-1v-3.938h1v3.938zM9.5 13.031c0 0.552-0.447 1-1 1s-1-0.448-1-1 0.447-1 1-1 1 0.448 1 1z@@fill:currentColor;|0 0 17 17",l="M17 2v1h-17v-1h17zM14 6h-14v1h14v-1zM0 11h17v-1h-17v1zM0 15h10v-1h-10v1z@@fill:currentColor;|0 0 17 17",v="M7.987 8.5l6.146 6.146-0.707 0.707-6.853-6.853 6.854-6.854 0.707 0.707-6.147 6.147zM9.29 2.353l-0.707-0.707-6.854 6.854 6.854 6.854 0.707-0.707-6.146-6.147 6.146-6.147z@@fill:currentColor;|0 0 17 17",r="M9.644 8.5l-6.854 6.854-0.707-0.707 6.146-6.147-6.146-6.146 0.707-0.708 6.854 6.854zM7.634 1.646l-0.707 0.708 6.146 6.146-6.146 6.146 0.707 0.707 6.853-6.853-6.853-6.854z@@fill:currentColor;|0 0 17 17",M="M16.354 5.075l-7.855 7.854-7.853-7.854 0.707-0.707 7.145 7.146 7.148-7.147 0.708 0.708z@@fill:currentColor;|0 0 17 17",c="M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z@@fill:currentColor;|0 0 17 17",e="M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z@@fill:currentColor;|0 0 17 17",o="M16.354 11.896l-0.707 0.707-7.147-7.146-7.146 7.146-0.707-0.707 7.853-7.853 7.854 7.853z@@fill:currentColor;|0 0 17 17",z="M12.146 6.146l0.707 0.707-4.353 4.354-4.354-4.353 0.707-0.707 3.647 3.646 3.646-3.647zM17 8.5c0 4.687-3.813 8.5-8.5 8.5s-8.5-3.813-8.5-8.5 3.813-8.5 8.5-8.5 8.5 3.813 8.5 8.5zM16 8.5c0-4.136-3.364-7.5-7.5-7.5s-7.5 3.364-7.5 7.5 3.364 7.5 7.5 7.5 7.5-3.364 7.5-7.5z@@fill:currentColor;|0 0 17 17",H="M15.146 8.854l-6.146-6.147v13.293h-1v-13.293l-6.146 6.147-0.708-0.708 7.354-7.353 7.354 7.354-0.708 0.707z@@fill:currentColor;|0 0 17 17",V="M15.418 1.774l-8.833 13.485-4.918-4.386 0.666-0.746 4.051 3.614 8.198-12.515 0.836 0.548z@@fill:currentColor;|0 0 17 17",i="M9.207 8.5l6.646 6.646-0.707 0.707-6.646-6.646-6.646 6.646-0.707-0.707 6.646-6.646-6.647-6.646 0.707-0.707 6.647 6.646 6.646-6.646 0.707 0.707-6.646 6.646z@@fill:currentColor;|0 0 17 17",t="M6 5.925h1v2h-1v-1h-2v8h1v1h-3v-1h1v-8h-2v1h-1v-2h6zM16 2h-10v2.577h1v-1.577h4v12h-1v1h3v-1h-1v-12h4v1.577h1v-2.577h-1z@@fill:currentColor;|0 0 17 17";return{name:"svg-themify",type:{positive:V,negative:h,info:"M8.5 0c-4.687 0-8.5 3.813-8.5 8.5s3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5-3.813-8.5-8.5-8.5zM8.5 16c-4.136 0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5-3.364 7.5-7.5 7.5zM9 12.369h0.979v1h-2.958v-1h0.979v-4.42h-0.946v-1h1.946v5.42zM7.185 4.986c0-0.545 0.441-0.986 0.986-0.986s0.985 0.441 0.985 0.986c0 0.543-0.44 0.984-0.985 0.984s-0.986-0.441-0.986-0.984z@@fill:currentColor;|0 0 17 17",warning:h},arrow:{up:H,right:"M15.707 8.472l-7.354 7.354-0.707-0.707 6.146-6.146h-12.792v-1h12.793l-6.147-6.148 0.707-0.707 7.354 7.354z@@fill:currentColor;|0 0 17 17",down:"M15.854 8.854l-7.354 7.353-7.354-7.353 0.707-0.707 6.147 6.146v-13.293h1v13.293l6.146-6.146 0.708 0.707z@@fill:currentColor;|0 0 17 17",left:"M16 8.972h-12.793l6.146 6.146-0.707 0.707-7.353-7.353 7.354-7.354 0.707 0.707-6.147 6.147h12.793v1z@@fill:currentColor;|0 0 17 17",dropdown:z},chevron:{left:c,right:e},colorPicker:{spectrum:"M17 7.531c0-0.827-0.673-1.5-1.5-1.5h-4.808l0.285-0.914 0.023-3.617c0-0.827-0.673-1.5-1.5-1.5h-2c-0.827 0-1.5 0.673-1.5 1.5v3.452l0.31 1.080h-4.81c-0.827 0-1.5 0.673-1.5 1.5v3.486h0.932l-0.766 5.982h16.668l-0.766-5.982h0.932v-3.487zM15.698 16h-1.698v-2h-1v2h-1v-3h-1v3h-1v-4h-1v4h-5v-2h-1v2h-1.698l0.638-4.982h13.12l0.638 4.982zM1.060 10.018h-0.060v-2.487c0-0.276 0.224-0.5 0.5-0.5h6.165l-0.665-2.155v-3.376c0-0.276 0.224-0.5 0.5-0.5h2c0.276 0 0.5 0.224 0.5 0.5v3.393l-0.667 2.138h6.167c0.276 0 0.5 0.224 0.5 0.5v2.486h-14.94zM8 2h1v1h-1v-1z@@fill:currentColor;|0 0 17 17",tune:"M0 0v17h17v-17h-17zM16 16h-15v-15h15v15zM4 10.232v2.768h1v-2.768c0.738-0.218 1.281-0.894 1.281-1.701s-0.543-1.483-1.281-1.701v-2.83h-1v2.83c-0.738 0.218-1.281 0.894-1.281 1.701s0.543 1.484 1.281 1.701zM4.5 7.75c0.431 0 0.781 0.351 0.781 0.781s-0.35 0.781-0.781 0.781-0.781-0.35-0.781-0.781 0.35-0.781 0.781-0.781zM8 8.107v4.893h1v-4.893c0.738-0.218 1.281-0.894 1.281-1.701s-0.543-1.483-1.281-1.701v-0.705h-1v0.705c-0.738 0.218-1.281 0.894-1.281 1.701s0.543 1.484 1.281 1.701zM8.5 5.625c0.431 0 0.781 0.351 0.781 0.781s-0.35 0.782-0.781 0.782-0.781-0.351-0.781-0.782 0.35-0.781 0.781-0.781zM12.5 13.417c0.982 0 1.781-0.799 1.781-1.781 0-0.808-0.543-1.483-1.281-1.701v-5.935h-1v5.935c-0.738 0.218-1.281 0.894-1.281 1.701 0 0.982 0.799 1.781 1.781 1.781zM12.5 10.854c0.431 0 0.781 0.351 0.781 0.781s-0.351 0.781-0.781 0.781-0.781-0.351-0.781-0.781 0.35-0.781 0.781-0.781z@@fill:currentColor;|0 0 17 17",palette:"M8.5 0.5c-4.411 0-8 3.589-8 8 0 4.281 3.352 7.787 7.631 7.982l1.288 0.059-2.723-2.723c-0.283-0.283-0.439-0.66-0.439-1.061s0.156-0.777 0.439-1.061c0.566-0.566 1.555-0.566 2.121 0l3.719 3.719 0.34-0.223c2.27-1.486 3.624-3.988 3.624-6.692 0-4.411-3.589-8-8-8zM12.66 14.125l-3.135-3.135c-0.943-0.944-2.592-0.944-3.535 0-0.472 0.472-0.732 1.1-0.732 1.768s0.26 1.296 0.732 1.768l0.741 0.741c-3.026-0.783-5.231-3.52-5.231-6.767 0-3.86 3.14-7 7-7s7 3.14 7 7c0 2.23-1.054 4.305-2.84 5.625zM11.5 6.5c-1.103 0-2 0.897-2 2s0.897 2 2 2 2-0.897 2-2-0.897-2-2-2zM11.5 9.5c-0.551 0-1-0.449-1-1s0.449-1 1-1 1 0.449 1 1-0.449 1-1 1zM8.5 6c-0.828 0-1.5-0.671-1.5-1.5s0.672-1.5 1.5-1.5c0.829 0 1.5 0.671 1.5 1.5s-0.671 1.5-1.5 1.5zM5.75 5.891c0 0.552-0.448 1-1 1s-1-0.448-1-1 0.448-1 1-1 1 0.447 1 1z@@fill:currentColor;|0 0 17 17"},pullToRefresh:{icon:"M6 8h-6v-6h1v4.109c1.013-3.193 4.036-5.484 7.5-5.484 3.506 0 6.621 2.36 7.574 5.739l-0.963 0.271c-0.832-2.95-3.551-5.011-6.611-5.011-3.226 0.001-6.016 2.276-6.708 5.376h4.208v1zM11 9v1h4.208c-0.693 3.101-3.479 5.375-6.708 5.375-3.062 0-5.78-2.061-6.611-5.011l-0.963 0.271c0.952 3.379 4.067 5.739 7.574 5.739 3.459 0 6.475-2.28 7.5-5.482v4.108h1v-6h-6z@@fill:currentColor;|0 0 17 17"},carousel:{left:c,right:e,up:o,down:M,navigationIcon:"M8.5 2.5c-3.309 0-6 2.691-6 6s2.691 6 6 6 6-2.691 6-6-2.691-6-6-6zM8.5 13.5c-2.757 0-5-2.243-5-5s2.243-5 5-5 5 2.243 5 5-2.243 5-5 5z@@fill:currentColor;|0 0 17 17",thumbnails:"M2 14h13v-11h-13v11zM3 4h11v9h-11v-9z@@fill:currentColor;&&M16 4.531h1v7.938h-1v-7.938z@@fill:currentColor;&&M0 4.531h1v7.938h-1v-7.938z@@fill:currentColor;|0 0 17 17"},chip:{remove:i,selected:V},datetime:{arrowLeft:c,arrowRight:e,now:"M8.666 0c-4.687 0-8.5 3.813-8.5 8.5s3.813 8.5 8.5 8.5 8.5-3.813 8.5-8.5c0-4.687-3.813-8.5-8.5-8.5zM8.666 16c-4.136 0-7.5-3.364-7.5-7.5s3.364-7.5 7.5-7.5 7.5 3.364 7.5 7.5-3.364 7.5-7.5 7.5zM14 9v1h-6v-5h1v4h5z@@fill:currentColor;|0 0 17 17",today:"M14 2v-1h-3v1h-5v-1h-3v1h-3v15h17v-15h-3zM12 2h1v2h-1v-2zM4 2h1v2h-1v-2zM16 16h-15v-8.921h15v8.921zM1 6.079v-3.079h2v2h3v-2h5v2h3v-2h2v3.079h-15z@@fill:currentColor;|0 0 17 17"},editor:{italic:"M11.895 2.014l-5.691 12.986h0.796v1h-3v-1h1.111l5.691-12.986h-0.802v-1h3v1h-1.105z@@fill:currentColor;|0 0 17 17",underline:"M15 1v1h-1v6.459c0 3.032-2.467 5.5-5.5 5.5s-5.5-2.468-5.5-5.5v-6.459h-1v-1h3v1h-1v6.459c0 2.481 2.019 4.5 4.5 4.5s4.5-2.019 4.5-4.5v-6.459h-1v-1h3zM2 16h13v-1h-13v1z@@fill:currentColor;|0 0 17 17",unorderedList:"M17 4v1h-12v-1h12zM3 4.5c0 0.827-0.673 1.5-1.5 1.5s-1.5-0.673-1.5-1.5 0.673-1.5 1.5-1.5 1.5 0.673 1.5 1.5zM2 4.5c0-0.275-0.224-0.5-0.5-0.5s-0.5 0.225-0.5 0.5 0.224 0.5 0.5 0.5 0.5-0.225 0.5-0.5zM5 9h12v-1h-12v1zM3 8.5c0 0.827-0.673 1.5-1.5 1.5s-1.5-0.673-1.5-1.5 0.673-1.5 1.5-1.5 1.5 0.673 1.5 1.5zM2 8.5c0-0.275-0.224-0.5-0.5-0.5s-0.5 0.225-0.5 0.5 0.224 0.5 0.5 0.5 0.5-0.225 0.5-0.5zM5 13h12v-1h-12v1zM3 12.5c0 0.827-0.673 1.5-1.5 1.5s-1.5-0.673-1.5-1.5 0.673-1.5 1.5-1.5 1.5 0.673 1.5 1.5zM2 12.5c0-0.275-0.224-0.5-0.5-0.5s-0.5 0.225-0.5 0.5 0.224 0.5 0.5 0.5 0.5-0.225 0.5-0.5z@@fill:currentColor;|0 0 17 17",orderedList:"M17 4v1h-12v-1h12zM5 9h12v-1h-12v1zM5 13h12v-1h-12v1zM2.083 3.48h0.009v2.383h0.356v-2.727h-0.314l-0.596 0.319 0.071 0.281 0.474-0.256zM1.639 9.572l0.219-0.201c0.574-0.554 0.939-0.961 0.939-1.465 0-0.39-0.248-0.793-0.836-0.793-0.314 0-0.582 0.117-0.771 0.277l0.117 0.26c0.127-0.105 0.332-0.231 0.58-0.231 0.406 0 0.541 0.256 0.541 0.533-0.004 0.411-0.32 0.764-1.016 1.427l-0.289 0.281v0.227h1.74v-0.307h-1.224v-0.008zM2.236 12.391v-0.009c0.336-0.121 0.504-0.36 0.504-0.642 0-0.331-0.243-0.65-0.78-0.65-0.294 0-0.571 0.104-0.714 0.21l0.097 0.269c0.117-0.084 0.327-0.181 0.546-0.181 0.34 0 0.478 0.193 0.478 0.411 0 0.323-0.34 0.462-0.608 0.462h-0.206v0.276h0.205c0.357 0 0.701 0.164 0.705 0.546 0.005 0.227-0.143 0.528-0.616 0.528-0.257 0-0.5-0.104-0.604-0.172l-0.101 0.285c0.134 0.089 0.402 0.186 0.709 0.186 0.654 0 0.994-0.382 0.994-0.818 0-0.382-0.273-0.634-0.609-0.701z@@fill:currentColor;|0 0 17 17",hyperlink:"M12.983 6.94l-0.938 0.938-0.707-0.707 0.938-0.938c0.975-0.975 0.975-2.561 0-3.535s-2.561-0.975-3.535 0l-2.987 2.988c-0.975 0.975-0.975 2.561 0 3.535s2.561 0.975 3.535 0l0.707 0.707c-0.683 0.683-1.578 1.023-2.475 1.023s-1.792-0.341-2.474-1.023c-1.364-1.364-1.364-3.585 0-4.949l2.987-2.987c1.365-1.365 3.584-1.365 4.949 0 1.365 1.363 1.365 3.584 0 4.948zM6.042 8.034l-0.13 0.129 0.705 0.709 0.131-0.13c0.975-0.975 2.561-0.975 3.535 0s0.975 2.561 0 3.535l-3.023 3.025c-0.975 0.975-2.561 0.975-3.535 0s-0.975-2.561 0-3.535l1.058-1.059-0.707-0.707-1.058 1.059c-1.364 1.364-1.364 3.585 0 4.949 0.683 0.683 1.578 1.023 2.475 1.023s1.792-0.341 2.475-1.023l3.023-3.024c1.364-1.364 1.364-3.585 0-4.949-1.366-1.367-3.586-1.364-4.949-0.002z@@fill:currentColor;|0 0 17 17",toggleFullscreen:"M15.996 11.352l0.004 4.648-4.649-0.004 0.001-1 2.94 0.003-5.792-5.791-5.792 5.792 2.94-0.003 0.001 1-4.649 0.003 0.004-4.649 1 0.001-0.003 2.939 5.792-5.791-5.792-5.792 0.003 2.939-1 0.001-0.004-4.648 4.649 0.004-0.001 1-2.94-0.003 5.792 5.792 5.792-5.792-2.94 0.003-0.001-1 4.649-0.004-0.004 4.649-1-0.001 0.003-2.939-5.792 5.791 5.792 5.792-0.003-2.939 1-0.001z@@fill:currentColor;|0 0 17 17",quote:"M7.307 6.862c0-1.946-1.583-3.529-3.529-3.529-1.945 0-3.528 1.583-3.528 3.529 0 1.945 1.583 3.528 3.528 3.528 0.734 0 1.416-0.227 1.981-0.611-1.231 3.47-3.99 3.877-4.133 3.896l0.123 0.992c0.051-0.006 5.125-0.703 5.563-7.724l-0.013-0.001c0.001-0.027 0.008-0.052 0.008-0.080zM3.778 9.391c-1.394 0-2.528-1.134-2.528-2.528s1.134-2.529 2.528-2.529c1.395 0 2.529 1.135 2.529 2.529s-1.134 2.528-2.529 2.528zM16.734 6.942c0.001-0.027 0.008-0.053 0.008-0.080 0-1.946-1.583-3.529-3.528-3.529s-3.528 1.583-3.528 3.529c0 1.945 1.583 3.528 3.528 3.528 0.734 0 1.416-0.227 1.981-0.611-1.23 3.47-3.99 3.877-4.133 3.896l0.123 0.992c0.051-0.006 5.125-0.703 5.563-7.724l-0.014-0.001zM13.214 9.391c-1.394 0-2.528-1.134-2.528-2.528s1.134-2.529 2.528-2.529 2.528 1.135 2.528 2.529-1.134 2.528-2.528 2.528z@@fill:currentColor;|0 0 17 17",left:l,center:"M17 2v1h-17v-1h17zM1.5 6v1h14v-1h-14zM0 11h17v-1h-17v1zM3.5 15h10v-1h-10v1z@@fill:currentColor;|0 0 17 17",right:"M17 2v1h-17v-1h17zM3 7h14v-1h-14v1zM0 11h17v-1h-17v1zM7 15h10v-1h-10v1z@@fill:currentColor;|0 0 17 17",justify:"M17 2v1h-17v-1h17zM0 7h17v-1h-17v1zM0 11h17v-1h-17v1zM0 15h17v-1h-17v1z@@fill:currentColor;|0 0 17 17",print:"M17 6h-3.008v-1.818l-4.503-4.182h-6.497v6h-2.992v8h3v3.1h11v-3.1h3v-8zM9.992 1.832l2.335 2.168h-2.335v-2.168zM3.992 1h5v4h4v1h-9v-5zM13 16.1h-9v-5h9v5zM16 13h-2v-2.9h-11v2.9h-2v-6h15v6zM11.006 13h-6.006v-1h6.006v1zM9 15h-4v-1h4v1zM3 9h-1v-1h1v1zM5 9h-1v-1h1v1z@@fill:currentColor;|0 0 17 17",outdent:v,indent:r,formatting:"M14 2v3h-1v-2h-4v12h1.643v1h-4.286v-1h1.643v-12h-4v2h-1v-3h11z@@fill:currentColor;|0 0 17 17",fontSize:t,align:l,hr:"M15 8v1h-13v-1h13z@@fill:currentColor;|0 0 17 17",undo:"M5.527 8.229l-3.853-3.854 3.854-3.854 0.707 0.707-2.647 2.647h2.912c3.032 0 5.5 2.467 5.5 5.5 0 1.519-0.637 2.983-1.747 4.021l-0.682-0.73c0.921-0.862 1.429-2.030 1.429-3.291 0-2.481-2.019-4.5-4.5-4.5h-2.912l2.646 2.646-0.707 0.708zM16 9.025v6.475c0 0.275-0.225 0.5-0.5 0.5h-14c-0.275 0-0.5-0.225-0.5-0.5v-6.47h-1v6.47c0 0.827 0.673 1.5 1.5 1.5h14c0.827 0 1.5-0.673 1.5-1.5v-6.475h-1z@@fill:currentColor;|0 0 17 17",redo:"M6.795 13.396c-1.11-1.037-1.747-2.502-1.747-4.021 0-3.033 2.468-5.5 5.5-5.5h2.912l-2.646-2.646 0.707-0.707 3.854 3.854-3.854 3.854-0.707-0.707 2.646-2.646h-2.912c-2.481 0-4.5 2.019-4.5 4.5 0 1.261 0.508 2.429 1.429 3.29l-0.682 0.729zM16.048 9.030v6.47c0 0.275-0.225 0.5-0.5 0.5h-14c-0.275 0-0.5-0.225-0.5-0.5v-6.475h-1v6.475c0 0.827 0.673 1.5 1.5 1.5h14c0.827 0 1.5-0.673 1.5-1.5v-6.47h-1z@@fill:currentColor;|0 0 17 17",heading:"M16 1.026h-11.008c-2.181 0-3.955 1.774-3.955 3.955s1.774 3.954 3.955 3.954h3.008v7.065h1v-13.974h2.015v13.974h1v-13.974h3.985v-1zM8 7.936h-3.008c-1.63 0-2.955-1.325-2.955-2.954 0-1.63 1.325-2.955 2.955-2.955h3.008v5.909z@@fill:currentColor;|0 0 17 17",size:t,viewSource:"M0.026 1h3v1h-2v13h2v1h-3v-15zM14.026 1v1h2v13h-2v1h3v-15h-3zM8.91 7.967c-1.115-0.433-1.607-0.804-1.607-1.56 0-0.552 0.42-1.211 1.523-1.211 0.731 0 1.271 0.239 1.535 0.384l0.288-0.852c-0.359-0.204-0.96-0.396-1.787-0.396-1.571 0-2.614 0.936-2.614 2.195 0 1.14 0.815 1.823 2.135 2.291 1.091 0.419 1.523 0.851 1.523 1.606 0 0.815-0.624 1.38-1.691 1.38-0.72 0-1.403-0.24-1.871-0.528l-0.264 0.876c0.432 0.287 1.283 0.516 2.062 0.516 1.907 0 2.831-1.079 2.831-2.327 0.001-1.188-0.696-1.847-2.063-2.374z@@fill:currentColor;|0 0 17 17",bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",code:"M14.6,16.6L19.2,12L14.6,7.4L16,6L22,12L16,18L14.6,16.6M9.4,16.6L4.8,12L9.4,7.4L8,6L2,12L8,18L9.4,16.6Z",size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z"},expansionItem:{icon:M,denseIcon:z},fab:{icon:"M16 9h-7v7h-1v-7h-7v-1h7v-7h1v7h7v1z@@fill:currentColor;|0 0 17 17",activeIcon:i},field:{clear:i,error:h},pagination:{first:v,prev:c,next:e,last:r},rating:{icon:"M16.647 7.017h-6.225l-1.922-5.92-1.923 5.92h-6.224l5.035 3.658-1.922 5.92 5.034-3.659 5.035 3.659-1.922-5.92 5.034-3.658zM11.633 13.977l-3.133-2.278-3.133 2.277 1.197-3.685-3.133-2.274h3.873l1.196-3.684 1.196 3.684h3.873l-3.133 2.275 1.197 3.685z@@fill:currentColor;|0 0 17 17"},stepper:{done:V,active:"M15.529 2.857l-1.403-1.404c-0.565-0.566-1.555-0.566-2.122 0l-9.057 9.058-1.722 5.288 5.248-1.765 9.055-9.056c0.586-0.584 0.586-1.536 0.001-2.121zM3.094 13.294l0.645-1.979 1.934 1.935-1.963 0.66-0.616-0.616zM4.355 10.518l5.493-5.493 2.111 2.11-5.494 5.494-2.11-2.111zM10.555 4.317l0.729-0.729 2.111 2.11-0.729 0.729-2.111-2.11zM14.822 4.271l-0.72 0.72-2.111-2.11 0.72-0.721c0.189-0.189 0.518-0.189 0.707 0l1.403 1.404c0.196 0.196 0.196 0.512 0.001 0.707z@@fill:currentColor;|0 0 17 17",error:h},tabs:{left:c,right:e,up:o,down:M},table:{arrowUp:H,warning:h,firstPage:v,prevPage:c,nextPage:e,lastPage:r},tree:{icon:"M3 2.692v11.618l11.618-5.837-11.618-5.781zM4 4.308l8.382 4.17-8.382 4.211v-8.381z@@fill:currentColor;|0 0 17 17"},uploader:{done:V,clear:i,add:"M13.384 3c-0.937-1.829-2.805-3-4.884-3s-3.946 1.17-4.884 3h-3.616v13h17v-13h-3.616zM8.5 1c1.522 0 2.907 0.767 3.732 2h-7.464c0.826-1.232 2.21-2 3.732-2zM16 15h-15v-11h15v11zM8 10h-2v-1h2v-2h1v2h2v1h-2v2h-1v-2z@@fill:currentColor;|0 0 17 17",upload:"M17 6.75c0 2.343-1.906 4.25-4.25 4.25h-2.757v-1h2.757c1.792 0 3.25-1.458 3.25-3.25s-1.458-3.25-3.25-3.25c-0.532 0-1.057 0.141-1.56 0.417l-0.354 0.195-0.265-0.306c-0.719-0.829-1.748-1.306-2.821-1.306-1.661 0-3.099 1.080-3.576 2.688l-0.126 0.422-0.435-0.072c-0.119-0.019-0.238-0.038-0.363-0.038-1.24 0-2.25 1.009-2.25 2.25s1.010 2.25 2.25 2.25h3.699v1h-3.699c-1.792 0-3.25-1.458-3.25-3.25 0-1.826 1.529-3.335 3.353-3.248 0.713-1.812 2.431-3.002 4.397-3.002 1.234 0 2.42 0.494 3.309 1.367 0.546-0.244 1.113-0.367 1.691-0.367 2.344 0 4.25 1.907 4.25 4.25zM10.646 8.854l0.707-0.707-2.853-2.854-2.854 2.853 0.707 0.707 1.647-1.646v7.793h1v-7.793l1.646 1.647z@@fill:currentColor;|0 0 17 17",removeQueue:"M8 4v9h9v-9h-9zM16 12h-7v-7h7v7zM1.174 4h5.826v1h-5.826v-1zM3.503 7.996h3.497v1h-3.497v-1zM6.991 6.998h-6.991v-1h6.991v1zM0.009 9.993h6.991v1h-6.991v-1zM1.174 12h5.826v1h-5.826v-1z@@fill:currentColor;|0 0 17 17",removeUploaded:"M0.021 1.012v15h17v-15h-17zM8.137 8.509l-7.116 6.197v-12.412l7.116 6.215zM1.459 2.012h14.138l-7.079 6.165-7.059-6.165zM8.517 8.841l7.066 6.171h-14.152l7.086-6.171zM8.898 8.509l7.123-6.204v12.425l-7.123-6.221z@@fill:currentColor;|0 0 17 17"}}}); \ No newline at end of file diff --git a/dist/icon-set/themify.umd.min.js b/dist/icon-set/themify.umd.min.js new file mode 100644 index 00000000000..8b9d90552ac --- /dev/null +++ b/dist/icon-set/themify.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((t="undefined"!=typeof globalThis?globalThis:t||self).Quasar=t.Quasar||{},t.Quasar.iconSet=t.Quasar.iconSet||{},t.Quasar.iconSet.themify=e())}(this,function(){"use strict";return{name:"themify",type:{positive:"ti-check",negative:"ti-alert",info:"ti-info-alt",warning:"ti-alert"},arrow:{up:"ti-arrow-up",right:"ti-arrow-right",down:"ti-arrow-down",left:"ti-arrow-left",dropdown:"ti-arrow-circle-down"},chevron:{left:"ti-angle-left",right:"ti-angle-right"},colorPicker:{spectrum:"ti-brush-alt",tune:"ti-panel",palette:"ti-palette"},pullToRefresh:{icon:"ti-reload"},carousel:{left:"ti-angle-left",right:"ti-angle-right",up:"ti-angle-up",down:"ti-angle-down",navigationIcon:"ti-control-record",thumbnails:"ti-layout-slider-alt"},chip:{remove:"ti-close",selected:"ti-check"},datetime:{arrowLeft:"ti-angle-left",arrowRight:"ti-angle-right",now:"ti-time",today:"ti-calendar"},editor:{italic:"ti-Italic",underline:"ti-underline",unorderedList:"ti-list",orderedList:"ti-list-ol",hyperlink:"ti-link",toggleFullscreen:"ti-fullscreen",quote:"ti-quote-right",left:"ti-align-left",center:"ti-align-center",right:"ti-align-right",justify:"ti-align-justify",print:"ti-printer",outdent:"ti-angle-double-left",indent:"ti-angle-double-right",formatting:"ti-text",fontSize:"ti-smallcap",align:"ti-align-left",hr:"ti-minus",undo:"ti-share-alt",redo:"ti-share",heading:"ti-paragraph",size:"ti-smallcap",viewSource:"ti-shortcode",bold:"M13.5,15.5H10V12.5H13.5A1.5,1.5 0 0,1 15,14A1.5,1.5 0 0,1 13.5,15.5M10,6.5H13A1.5,1.5 0 0,1 14.5,8A1.5,1.5 0 0,1 13,9.5H10M15.6,10.79C16.57,10.11 17.25,9 17.25,8C17.25,5.74 15.5,4 13.25,4H7V18H14.04C16.14,18 17.75,16.3 17.75,14.21C17.75,12.69 16.89,11.39 15.6,10.79Z",strikethrough:"M23,12V14H18.61C19.61,16.14 19.56,22 12.38,22C4.05,22.05 4.37,15.5 4.37,15.5L8.34,15.55C8.37,18.92 11.5,18.92 12.12,18.88C12.76,18.83 15.15,18.84 15.34,16.5C15.42,15.41 14.32,14.58 13.12,14H1V12H23M19.41,7.89L15.43,7.86C15.43,7.86 15.6,5.09 12.15,5.08C8.7,5.06 9,7.28 9,7.56C9.04,7.84 9.34,9.22 12,9.88H5.71C5.71,9.88 2.22,3.15 10.74,2C19.45,0.8 19.43,7.91 19.41,7.89Z",subscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,21.03H16.97V20.03L17.86,19.23C18.62,18.58 19.18,18.04 19.56,17.6C19.93,17.16 20.12,16.75 20.13,16.36C20.14,16.08 20.05,15.85 19.86,15.66C19.68,15.5 19.39,15.38 19,15.38C18.69,15.38 18.42,15.44 18.16,15.56L17.5,15.94L17.05,14.77C17.32,14.56 17.64,14.38 18.03,14.24C18.42,14.1 18.85,14 19.32,14C20.1,14.04 20.7,14.25 21.1,14.66C21.5,15.07 21.72,15.59 21.72,16.23C21.71,16.79 21.53,17.31 21.18,17.78C20.84,18.25 20.42,18.7 19.91,19.14L19.27,19.66V19.68H21.85V21.03Z",superscript:"M16,7.41L11.41,12L16,16.59L14.59,18L10,13.41L5.41,18L4,16.59L8.59,12L4,7.41L5.41,6L10,10.59L14.59,6L16,7.41M21.85,9H16.97V8L17.86,7.18C18.62,6.54 19.18,6 19.56,5.55C19.93,5.11 20.12,4.7 20.13,4.32C20.14,4.04 20.05,3.8 19.86,3.62C19.68,3.43 19.39,3.34 19,3.33C18.69,3.34 18.42,3.4 18.16,3.5L17.5,3.89L17.05,2.72C17.32,2.5 17.64,2.33 18.03,2.19C18.42,2.05 18.85,2 19.32,2C20.1,2 20.7,2.2 21.1,2.61C21.5,3 21.72,3.54 21.72,4.18C21.71,4.74 21.53,5.26 21.18,5.73C20.84,6.21 20.42,6.66 19.91,7.09L19.27,7.61V7.63H21.85V9Z",removeFormat:"M6,5V5.18L8.82,8H11.22L10.5,9.68L12.6,11.78L14.21,8H20V5H6M3.27,5L2,6.27L8.97,13.24L6.5,19H9.5L11.07,15.34L16.73,21L18,19.73L3.55,5.27L3.27,5Z",heading1:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M14,18V16H16V6.31L13.5,7.75V5.44L16,4H18V16H20V18H14Z",heading2:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M21,18H15A2,2 0 0,1 13,16C13,15.47 13.2,15 13.54,14.64L18.41,9.41C18.78,9.05 19,8.55 19,8A2,2 0 0,0 17,6A2,2 0 0,0 15,8H13A4,4 0 0,1 17,4A4,4 0 0,1 21,8C21,9.1 20.55,10.1 19.83,10.83L15,16H21V18Z",heading3:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V15H15V16H19V12H15V10H19V6H15V7H13V6A2,2 0 0,1 15,4Z",heading4:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M18,18V13H13V11L18,4H20V11H21V13H20V18H18M18,11V7.42L15.45,11H18Z",heading5:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H20V6H15V10H17A4,4 0 0,1 21,14A4,4 0 0,1 17,18H15A2,2 0 0,1 13,16V15H15V16H17A2,2 0 0,0 19,14A2,2 0 0,0 17,12H15A2,2 0 0,1 13,10V6A2,2 0 0,1 15,4Z",heading6:"M3,4H5V10H9V4H11V18H9V12H5V18H3V4M15,4H19A2,2 0 0,1 21,6V7H19V6H15V10H19A2,2 0 0,1 21,12V16A2,2 0 0,1 19,18H15A2,2 0 0,1 13,16V6A2,2 0 0,1 15,4M15,12V16H19V12H15Z",code:"M14.6,16.6L19.2,12L14.6,7.4L16,6L22,12L16,18L14.6,16.6M9.4,16.6L4.8,12L9.4,7.4L8,6L2,12L8,18L9.4,16.6Z",size1:"M14,17H12V9H10V7H14M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size2:"M15,11C15,12.11 14.1,13 13,13H11V15H15V17H9V13C9,11.89 9.9,11 11,11H13V9H9V7H13A2,2 0 0,1 15,9M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size3:"M15,10.5A1.5,1.5 0 0,1 13.5,12C14.34,12 15,12.67 15,13.5V15C15,16.11 14.11,17 13,17H9V15H13V13H11V11H13V9H9V7H13C14.11,7 15,7.89 15,9M19,3H5C3.91,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19C20.11,21 21,20.1 21,19V5A2,2 0 0,0 19,3Z",size4:"M15,17H13V13H9V7H11V11H13V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size5:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H9V15H13V13H9V7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3Z",size6:"M15,9H11V11H13A2,2 0 0,1 15,13V15C15,16.11 14.1,17 13,17H11A2,2 0 0,1 9,15V9C9,7.89 9.9,7 11,7H15M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M11,15H13V13H11V15Z",size7:"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19M11,17L15,9V7H9V9H13L9,17H11Z",font:"M17,8H20V20H21V21H17V20H18V17H14L12.5,20H14V21H10V20H11L17,8M18,9L14.5,16H18V9M5,3H10C11.11,3 12,3.89 12,5V16H9V11H6V16H3V5C3,3.89 3.89,3 5,3M6,5V9H9V5H6Z"},expansionItem:{icon:"ti-angle-down",denseIcon:"ti-arrow-circle-down"},fab:{icon:"ti-plus",activeIcon:"ti-close"},field:{clear:"ti-close",error:"ti-alert"},pagination:{first:"ti-angle-double-left",prev:"ti-angle-left",next:"ti-angle-right",last:"ti-angle-double-right"},rating:{icon:"ti-star"},stepper:{done:"ti-check",active:"ti-pencil",error:"ti-alert"},tabs:{left:"ti-angle-left",right:"ti-angle-right",up:"ti-angle-up",down:"ti-angle-down"},table:{arrowUp:"ti-arrow-up",warning:"ti-alert",firstPage:"ti-angle-double-left",prevPage:"ti-angle-left",nextPage:"ti-angle-right",lastPage:"ti-angle-double-right"},tree:{icon:"ti-control-play"},uploader:{done:"ti-check",clear:"ti-close",add:"ti-support",upload:"ti-cloud-up",removeQueue:"ti-layout-media-right",removeUploaded:"ti-layout-placeholder"}}}); \ No newline at end of file diff --git a/dist/lang/ar.umd.min.js b/dist/lang/ar.umd.min.js new file mode 100644 index 00000000000..ec72831ceca --- /dev/null +++ b/dist/lang/ar.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ar=t())}(this,function(){"use strict";return{isoName:"ar",nativeName:"العربية",rtl:!0,label:{clear:"مسح",ok:"حسناً",cancel:"إلغاء",close:"إغلاق",set:"ضبط",select:"تحديد",reset:"إعادة ضبط",remove:"حذف",update:"تحديث",create:"إنشاء",search:"بحث",filter:"ترشيح",refresh:"تحديث",expand:function(e){return e?'"'+e+" توسيع":"وسعت"},collapse:function(e){return e?'"'+e+'" تصغير':"انهيار"}},date:{days:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),daysShort:"أحد_إثن_ثلا_أرب_خمي_جمع_سبت".split("_"),months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"ينا_فبر_مار_أبر_ماي_يون_يول_أغس_سبت_أكت_نوف_ديس".split("_"),firstDayOfWeek:6,format24h:!1,pluralDay:"أيام"},table:{noData:"لا توجد بيانات",noResults:"لا توجد نتائج",loading:"جارٍ التحميل...",selectedRecords:function(e){return 0===e?"لا توجد مُدخَلات محدّدة.":1===e?"مُدخَلة واحدة محدّدة.":2===e?"مُدخَلتان محدّدتان.":"عدد المُدخَلات المحدّدة "+e+"."},recordsPerPage:"عدد المُدخَلات في كل صفحة:",allRows:"الكل",pagination:function(e,t,r){return e+"-"+t+" من "+r},columns:"أعمدة"},editor:{url:"رابط",bold:"عريض",italic:"مائل",strikethrough:"مشطوب",underline:"مسطّر",unorderedList:"قائمة غير مرتبة",orderedList:"قائمة مرتبة",subscript:"منخفض",superscript:"مرتفع",hyperlink:"رابط",toggleFullscreen:"تفعيل أو إيقاف العرض في كامل الشاشة",quote:"اقتباس",left:"انتظام لجهة اليسار",center:"توسيط",right:"انتظام لجهة اليمين",justify:"انتظام بالتساوي",print:"طباعة",outdent:"تقليل مسافة البداية",indent:"زيادة مسافة البداية",removeFormat:"إزالة التنسيق",formatting:"تنسيق",fontSize:"حجم الخط",align:"انتظام",hr:"إضافة خط أفقي",undo:"تراجع",redo:"إعادة",heading1:"عنوان 1",heading2:"عنوان 2",heading3:"عنوان 3",heading4:"عنوان 4",heading5:"عنوان 5",heading6:"عنوان 6",paragraph:"فقرة",code:"تعليمات برمجية",size1:"صغير جداً",size2:"صغير",size3:"عادي",size4:"فوق المتوسط",size5:"كبير",size6:"كبير جداً",size7:"الأقصى",defaultFont:"الخط الإفتراضي",viewSource:"عرض المصدر"},tree:{noNodes:"لا توجد عُقَد",noResults:"لا توجد نتائج"}}}); \ No newline at end of file diff --git a/dist/lang/az-latn.umd.min.js b/dist/lang/az-latn.umd.min.js new file mode 100644 index 00000000000..24d0e7d5d3f --- /dev/null +++ b/dist/lang/az-latn.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang.azLatn=e())}(this,function(){"use strict";return{isoName:"az-latn",nativeName:"Azerbaijani (latin)",label:{clear:"Təmizlə",ok:"OK",cancel:"Ləğv et",close:"Bağla",set:"Ayarla",select:"Seç",reset:"Sıfırla",remove:"Sil",update:"Güncəllə",create:"Yarat",search:"Axtar",filter:"Filtrlə",refresh:"Yenilə",expand:function(a){return a?'"'+a+'" genişləndirin':"Genişləndirin"},collapse:function(a){return a?'"'+a+'" yığcamlaşdırın':"Yıxılma"}},date:{days:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),daysShort:"B_B.E_Ç_Ç.E_C.A_C_Ş".split("_"),months:"Yanvar_Fevral_Mart_Aprel_May_İyun_İyul_Avqust_Sentyabr_Oktyabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_İyn_İyl_Avq_Sen_Okt_Noy_Dek".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"gün"},table:{noData:"Məlumat yoxdur",noResults:"Uyğun məlumat tapılmadı",loading:"Yüklənir...",selectedRecords:function(a){return 1===a?"1 record selected.":(0===a?"No":a)+" seçilmiş məlumat."},recordsPerPage:"Hər səhifədəki məlumat:",allRows:"Bütün",pagination:function(a,e,r){return a+"-"+e+" cəmi "+r},columns:"Sütun"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Altdan xətt",unorderedList:"Sıralanmamış siyahı",orderedList:"Sıralanmış siyahı",subscript:"Alt yazı",superscript:"Üst yazı",hyperlink:"Link",toggleFullscreen:"Tam ekranı aç/bağla",quote:"Sitat",left:"Sol tərəf",center:"Orta",right:"Rağ tərəf",justify:"Mərkəzləşdir",print:"Çap et",outdent:"Abzası azalt",indent:"Abzası artır",removeFormat:"Formatlamanı sil",formatting:"Formatlama",fontSize:"Font ölçüsü",align:"Tərəf",hr:"Horizantal xətt əlavə et",undo:"Geri qaytar",redo:"Təkrarla",heading1:"Başlıq 1",heading2:"Başlıq 2",heading3:"Başlıq 3",heading4:"Başlıq 4",heading5:"Başlıq 5",heading6:"Başlıq 6",paragraph:"Paraqraf",code:"Kod",size1:"Çox kiçik",size2:"Bir az kiçik",size3:"Normal",size4:"Orta-böyük",size5:"Böyük",size6:"Çox böyük",size7:"Maksimum",defaultFont:"Varsayılan font",viewSource:"Qaynağı gör"},tree:{noNodes:"Düyün yoxdur",noResults:"Uyğun düyün yoxdur"}}}); \ No newline at end of file diff --git a/dist/lang/bg.umd.min.js b/dist/lang/bg.umd.min.js new file mode 100644 index 00000000000..6cd45f55eaf --- /dev/null +++ b/dist/lang/bg.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.bg=t())}(this,function(){"use strict";return{isoName:"bg",nativeName:"български език",label:{clear:"Изчисти",ok:"OK",cancel:"Отказ",close:"Затвори",set:"Задай",select:"Избери",reset:"Отначало",remove:"Изтрий",update:"Обнови",create:"Създай",search:"Търси",filter:"Филтър",refresh:"Презареди",expand:function(e){return e?'Разширете "'+e+'"':"Разширяване"},collapse:function(e){return e?'Свиване на "'+e+'"':"Свиване"}},date:{days:"Неделя_Понеделник_Вторник_Сряда_Четвъртък_Петък_Събота".split("_"),daysShort:"Нд_Пн_Вт_Ср_Чт_Пт_Сб".split("_"),months:"Януари_Февруари_Март_Април_Май_Юни_Юли_Август_Септември_Октомври_Ноември_Декември".split("_"),monthsShort:"Яну_Фев_Мар_Апр_Май_Юни_Юли_Авг_Сеп_Окт_Ное_Дек".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"дни"},table:{noData:"Няма данни",noResults:"Нищо не е намерено",loading:"Зареждане...",selectedRecords:function(e){return e>1?e+" избрани реда.":(0===e?"Няма":"1")+" избрани редове."},recordsPerPage:"Редове на страница:",allRows:"Всички",pagination:function(e,t,n){return e+"-"+t+" от "+n},columns:"Колони"},editor:{url:"URL",bold:"Удебелен",italic:"Курсив",strikethrough:"Задраскан",underline:"Подчертан",unorderedList:"Неподреден списък",orderedList:"Номериран списък",subscript:"Долен индекс",superscript:"Горен индекс",hyperlink:"Хипер-линк",toggleFullscreen:"На цял екран",quote:"Цитат",left:"Ляво подравняване",center:"Центриране",right:"Дясно подравняване",justify:"Подравняване по ширина",print:"Отпечатване",outdent:"Намали отстъпа",indent:"Увеличи отстъпа",removeFormat:"Без форматиране",formatting:"Форматиране",fontSize:"Размер на шрифта",align:"Подравняване",hr:"Вмъкни хоризонтална линия",undo:"Отмени",redo:"Повтори",heading1:"Заглавие 1",heading2:"Заглавие 2",heading3:"Заглавие 3",heading4:"Заглавие 4",heading5:"Заглавие 5",heading6:"Заглавие 6",paragraph:"Параграф",code:"Програмен код",size1:"Много малък",size2:"Малък",size3:"Нормален",size4:"Среден",size5:"Голям",size6:"Много голям",size7:"Огромен",defaultFont:"Шрифт по подразбиране",viewSource:"Виж HTML кода"},tree:{noNodes:"Няма повече възли",noResults:"Нищо не е намерено"}}}); \ No newline at end of file diff --git a/dist/lang/ca.umd.min.js b/dist/lang/ca.umd.min.js new file mode 100644 index 00000000000..4e5cac5363a --- /dev/null +++ b/dist/lang/ca.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ca=a())}(this,function(){"use strict";return{isoName:"ca",nativeName:"Català",label:{clear:"Netejar",ok:"D'acord",cancel:"Cancel·lar",close:"Tancar",set:"Definir",select:"Seleccionar",reset:"Reinicialitzar",remove:"Suprimir",update:"Actualitzar",create:"Crear",search:"Cercar",filter:"Filtrar",refresh:"Refrescar",expand:function(e){return e?'Amplia "'+e+'"':"Expandir"},collapse:function(e){return e?'Col·lapse "'+e+'"':"Col·lapse"}},date:{days:"Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte".split("_"),daysShort:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),months:"Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre".split("_"),monthsShort:"Gen_Feb_Mar_Abr_Mai_Jun_Jul_Ago_Set_Oct_Nov_Des".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dies"},table:{noData:"No hi ha dades disponibles",noResults:"No s'han trobat resultats",loading:"Carregant...",selectedRecords:function(e){return e>1?e+" files seleccionades.":(0===e?"Sense":"1")+" fila seleccionada."},recordsPerPage:"Files per pàgina:",allRows:"Totes",pagination:function(e,a,r){return e+"-"+a+" de "+r},columns:"Columnes"},editor:{url:"URL",bold:"Negreta",italic:"Cursiva",strikethrough:"Barrat",underline:"Subratllat",unorderedList:"Llista sense ordre",orderedList:"Llista amb ordre",subscript:"Subíndex",superscript:"Superíndex",hyperlink:"Hiperenllaç",toggleFullscreen:"Commutar pantalla completa",quote:"Cita",left:"Alinear a l'esquerra",center:"Alinear al centre",right:"Alinear a la dreta",justify:"Alinear justificat",print:"Imprimir",outdent:"Augmentar identació",indent:"Disminuir identació",removeFormat:"Llevar el format",formatting:"Formatant",fontSize:"Mida de la font",align:"Alinear",hr:"Inserir una línea horitzontal",undo:"Desfer",redo:"Refer",heading1:"Encapçalament 1",heading2:"Encapçalament 2",heading3:"Encapçalament 3",heading4:"Encapçalament 4",heading5:"Encapçalament 5",heading6:"Encapçalament 6",paragraph:"Paràgraf",code:"Codi",size1:"Molt petit",size2:"Petit",size3:"Normal",size4:"Mitjà",size5:"Gran",size6:"Molt gran",size7:"Màxim",defaultFont:"Font per defecte",viewSource:"Veure font"},tree:{noNodes:"No hi ha nodes disponibles",noResults:"No s'han trobat nodes"}}}); \ No newline at end of file diff --git a/dist/lang/cs.umd.min.js b/dist/lang/cs.umd.min.js new file mode 100644 index 00000000000..9cc48cd6758 --- /dev/null +++ b/dist/lang/cs.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.cs=t())}(this,function(){"use strict";return{isoName:"cs",nativeName:"Čeština",label:{clear:"Smazat",ok:"OK",cancel:"Zrušit",close:"Zavřít",set:"Nastavit",select:"Vybrat",reset:"Reset",remove:"Odebrat",update:"Opravit",create:"Vytvořit",search:"Hledat",filter:"Filtrovat",refresh:"Obnovit",expand:function(e){return e?'Rozbalit "'+e+'"':"Rozšířit"},collapse:function(e){return e?'Sbalit "'+e+'"':"Kolaps"}},date:{days:"Neděle_Pondělí_Úterý_Středa_Čtvrtek_Pátek_Sobota".split("_"),daysShort:"Ne_Po_Út_St_Čt_Pá_So".split("_"),months:"Leden_Únor_Březen_Duben_Květen_Červen_Červenec_Srpen_Září_Říjen_Listopad_Prosinec".split("_"),monthsShort:"Led_Úno_Bře_Dub_Kvě_Čvn_Čvc_Srp_Zář_Říj_Lis_Pro".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dny"},table:{noData:"Žádná data k dispozici",noResults:"Nebyly nalezeny žádné odpovídající záznamy",loading:"Načítá se...",selectedRecords:function(e){switch(e){case 0:return"Nejsou vybrány žádné řádky.";case 1:return"Vybrán 1 řádek.";case 2:return"Vybrány 2 řádky.";case 3:return"Vybrány 3 řádky.";case 4:return"Vybrány 4 řádky."}return"Vybráno "+e+" řádků."},recordsPerPage:"Počet řádků na stránku:",allRows:"Všechny",pagination:function(e,t,n){return e+"-"+t+" z "+n},columns:"Sloupce"},editor:{url:"URL",bold:"Tučně",italic:"Kurzíva",strikethrough:"Přeškrtnuté",underline:"Podtržené",unorderedList:"Odrážkový seznam",orderedList:"Číslovaný seznam",subscript:"Dolní index",superscript:"Horní index",hyperlink:"Odkaz",toggleFullscreen:"Přepnout zobrazení na celou obrazovku",quote:"Bloková citace",left:"Zarovnat vlevo",center:"Zarovnat na střed",right:"Zarovnat vpravo",justify:"Zarovnat do bloku",print:"Tisk",outdent:"Zmenšit odsazení",indent:"Zvětšit odsazení",removeFormat:"Vymazat formátování",formatting:"Styl",fontSize:"Velikost písma",align:"Zarovnání",hr:"Vložit oddělovač",undo:"Zpět",redo:"Znovu",heading1:"Nadpis 1",heading2:"Nadpis 2",heading3:"Nadpis 3",heading4:"Nadpis 4",heading5:"Nadpis 5",heading6:"Nadpis 6",paragraph:"Odstavec",code:"Kód",size1:"Velmi malé",size2:"Malé",size3:"Normální",size4:"Středně velké",size5:"Velké",size6:"Velmi velké",size7:"Maximum",defaultFont:"Výchozí písmo",viewSource:"Zobrazit zdroj"},tree:{noNodes:"Žádné uzly",noResults:"Žádné odpovídající uzly nenalezeny"}}}); \ No newline at end of file diff --git a/dist/lang/da.umd.min.js b/dist/lang/da.umd.min.js new file mode 100644 index 00000000000..c24a4df78e9 --- /dev/null +++ b/dist/lang/da.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.da=r())}(this,function(){"use strict";return{isoName:"da",nativeName:"Dansk",label:{clear:"Ryd",ok:"OK",cancel:"Annuller",close:"Luk",set:"Sæt",select:"Vælg",reset:"Nulstil",remove:"Fjern",update:"Opdater",create:"Opret",search:"Søg",filter:"Filtrer",refresh:"Opdater",expand:function(e){return e?'Udvid "'+e+'"':"Udvide"},collapse:function(e){return e?'Skjul "'+e+'"':"Bryder sammen"}},date:{days:"Søndag_Mandag_Tirsdag_Onsdag_Torsdag_Fredag_Lørdag".split("_"),daysShort:"Søn_Man_Tirs_Ons_Tors_Fre_Lør".split("_"),months:"Januar_Februar_Marts_April_Maj_Juni_Juli_August_September_Oktober_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Maj_Jun_Jul_Aug_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dage"},table:{noData:"Ingen data tilgængelig",noResults:"Ingen matchende resultater fundet",loading:"Indlæser...",selectedRecords:function(e){return 1===e?"1 række valgt.":(0===e?"Ingen":e)+" rækker valgt."},recordsPerPage:"Rækker per side:",allRows:"Alle",pagination:function(e,r,t){return e+"-"+r+" af "+t},columns:"Kolonner"},editor:{url:"URL",bold:"Fed",italic:"Kursiv",strikethrough:"Gennemstreget",underline:"Understreget",unorderedList:"Punktliste",orderedList:"Numreret liste",subscript:"Sænket",superscript:"Hævet",hyperlink:"Hyperlink",toggleFullscreen:"Skift fuldskærm",quote:"Citat",left:"Venstrejustering",center:"Centreret",right:"Højrejustering",justify:"Lige margener",print:"Udskriv",outdent:"Formindsk indrykning",indent:"Forøg indrykning",removeFormat:"Fjern formattering",formatting:"Formattering",fontSize:"Skriftstørrelse",align:"Justering",hr:"Indsæt vandret streg",undo:"Fortryd",redo:"Gendan",heading1:"Overskrift 1",heading2:"Overskrift 2",heading3:"Overskrift 3",heading4:"Overskrift 4",heading5:"Overskrift 5",heading6:"Overskrift 6",paragraph:"Afsnit",code:"Kode",size1:"Meget lille",size2:"Lille",size3:"Normal",size4:"Mellemstor",size5:"Stor",size6:"Meget stor",size7:"Størst",defaultFont:"Standard skrifttype",viewSource:"Se kilde"},tree:{noNodes:"Ingen noder tilgængelige",noResults:"Ingen matchende noder fundet"}}}); \ No newline at end of file diff --git a/dist/lang/de.umd.min.js b/dist/lang/de.umd.min.js new file mode 100644 index 00000000000..98bd8dc6656 --- /dev/null +++ b/dist/lang/de.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.de=n())}(this,function(){"use strict";return{isoName:"de",nativeName:"Deutsch",label:{clear:"Leeren",ok:"Ok",cancel:"Abbrechen",close:"Schließen",set:"Setzen",select:"Auswählen",reset:"Zurücksetzen",remove:"Löschen",update:"Aktualisieren",create:"Erstellen",search:"Suche",filter:"Filter",refresh:"Aktualisieren",expand:function(e){return e?'Erweitern Sie "'+e+'"':"Erweitern"},collapse:function(e){return e?'"'+e+'" minimieren':"Zusammenbruch"}},date:{days:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),daysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"Tage"},table:{noData:"Keine Daten vorhanden.",noResults:"Keine Einträge gefunden",loading:"Lade...",selectedRecords:function(e){return e>1?e+" ausgewählte Zeilen":(0===e?"Keine":"1")+" ausgewählt."},recordsPerPage:"Zeilen pro Seite",allRows:"Alle",pagination:function(e,n,r){return e+"-"+n+" von "+r},columns:"Spalten"},editor:{url:"URL",bold:"Fett",italic:"Kursiv",strikethrough:"Durchgestrichen",underline:"Unterstrichen",unorderedList:"Ungeordnete Liste",orderedList:"Geordnete Liste",subscript:"tiefgestellt",superscript:"hochgestellt",hyperlink:"Link",toggleFullscreen:"Vollbild umschalten",quote:"Zitat",left:"linksbündig",center:"zentriert",right:"rechtsbündig",justify:"Ausrichten",print:"Drucken",outdent:"ausrücken",indent:"einrücken",removeFormat:"Entferne Formatierung",formatting:"Formatiere",fontSize:"Schriftgröße",align:"Ausrichten",hr:"Horizontale Linie einfügen",undo:"Rückgänging",redo:"Wiederherstellen",heading1:"Überschrift 1",heading2:"Überschrift 2",heading3:"Überschrift 3",heading4:"Überschrift 4",heading5:"Überschrift 5",heading6:"Überschrift 6",paragraph:"Absatz",code:"Code",size1:"Sehr klein",size2:"klein",size3:"Normal",size4:"Groß",size5:"Größer",size6:"Sehr groß",size7:"Maximum",defaultFont:"Standard Schrift",viewSource:"Quelltext anzeigen"},tree:{noNodes:"Keine Knoten verfügbar",noResults:"Keine passenden Knoten gefunden"}}}); \ No newline at end of file diff --git a/dist/lang/el.umd.min.js b/dist/lang/el.umd.min.js new file mode 100644 index 00000000000..cc0f82f3723 --- /dev/null +++ b/dist/lang/el.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.el=t())}(this,function(){"use strict";return{isoName:"el",nativeName:"ελληνικά",label:{clear:"Καθαρισμός",ok:"Εντάξει",cancel:"Ακύρωση",close:"Κλείσιμο",set:"Ορισμός",select:"Επιλογή",reset:"Επαναφορά",remove:"Αφαίρεση",update:"Αναβάθμιση",create:"Δημιουργία",search:"Αναζήτηση",filter:"Φίλτρο",refresh:"Ανανέωση",expand:function(e){return e?'Επέκταση "'+e+'"':"Επεκτείνουν"},collapse:function(e){return e?'Σύμπτυξη "'+e+'"':"Κατάρρευση"}},date:{days:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),daysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),months:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"ημέρες"},table:{noData:"Χωρίς δεδομένα",noResults:"Δεν βρέθηκαν αποτελέσματα",loading:"Φόρτωση...",selectedRecords:function(e){return 1===e?"1 επιλεγμένη εγγραφή.":(0===e?"Καμμία":e)+" επιλεγμένες εγγραφές."},recordsPerPage:"Εγγραφές ανα σελίδα:",allRows:"Όλες",pagination:function(e,t,n){return e+"-"+t+" από "+n},columns:"Στήλες"},editor:{url:"Διεύθυνση URL",bold:"Έντονα",italic:"Πλάγια",strikethrough:"Διακριτή διαγραφή",underline:"Υπογράμμιση",unorderedList:"Αταξινόμητη λίστα",orderedList:"Ταξινομημένη λίστα",subscript:"Δείκτης",superscript:"Εκθέτης",hyperlink:"Υπερσύνδεσμος",toggleFullscreen:"Εναλλαγή μεγιστοποίησης οθόνης",quote:"Παράθεση",left:"Αριστερή στοίχιση",center:"Κεντρική στοίχιση",right:"Δεξιά στοίχιση",justify:"Πλήρης στοίχιση",print:"Εκτύπωση",outdent:"Μείωση εσοχής",indent:"Αύξηση εσοχής",removeFormat:"Απαλοιφή μορφοποίησης",formatting:"Μορφοποίηση",fontSize:"Μέγεθος γραμματοσειράς",align:"Στοίχιση",hr:"Εισαγωγή οριζόντιας γραμμής",undo:"Αναίρεση",redo:"Επανάληψη",heading1:"Επικεφαλίδα 1",heading2:"Επικεφαλίδα 2",heading3:"Επικεφαλίδα 3",heading4:"Επικεφαλίδα 4",heading5:"Επικεφαλίδα 5",heading6:"Επικεφαλίδα 6",paragraph:"Παράγραφος",code:"Κώδικας",size1:"Πολύ μικρό",size2:"Μικρό",size3:"Κανονικό",size4:"Μεσαίο",size5:"Μεγάλο",size6:"Πολύ μεγάλο",size7:"Μέγιστο",defaultFont:"Προκαθορισμένη γραμματοσειρά",viewSource:"Προβολή προέλευσης"},tree:{noNodes:"Μη διαθέσιμοι κόμβοι",noResults:"Δεν βρέθηκαν αποτελέσματα"}}}); \ No newline at end of file diff --git a/dist/lang/en-gb.umd.min.js b/dist/lang/en-gb.umd.min.js new file mode 100644 index 00000000000..bf7c31c8a37 --- /dev/null +++ b/dist/lang/en-gb.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.enGb=a())}(this,function(){"use strict";return{isoName:"en-gb",nativeName:"English (UK)",label:{clear:"Clear",ok:"OK",cancel:"Cancel",close:"Close",set:"Set",select:"Select",reset:"Reset",remove:"Remove",update:"Update",create:"Create",search:"Search",filter:"Filter",refresh:"Refresh",expand:function(e){return e?'Expand "'+e+'"':"Expand"},collapse:function(e){return e?'Collapse "'+e+'"':"Collapse"}},date:{days:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),daysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"days"},table:{noData:"No data available",noResults:"No matching records found",loading:"Loading...",selectedRecords:function(e){return 1===e?"1 record selected.":(0===e?"No":e)+" records selected."},recordsPerPage:"Records per page:",allRows:"All",pagination:function(e,a,n){return e+"-"+a+" of "+n},columns:"Columns"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}}}); \ No newline at end of file diff --git a/dist/lang/en-us.umd.min.js b/dist/lang/en-us.umd.min.js new file mode 100644 index 00000000000..9f3f2c17daa --- /dev/null +++ b/dist/lang/en-us.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.enUs=a())}(this,function(){"use strict";return{isoName:"en-us",nativeName:"English (US)",label:{clear:"Clear",ok:"OK",cancel:"Cancel",close:"Close",set:"Set",select:"Select",reset:"Reset",remove:"Remove",update:"Update",create:"Create",search:"Search",filter:"Filter",refresh:"Refresh",expand:function(e){return e?'Expand "'+e+'"':"Expand"},collapse:function(e){return e?'Collapse "'+e+'"':"Collapse"}},date:{days:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),daysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"days"},table:{noData:"No data available",noResults:"No matching records found",loading:"Loading...",selectedRecords:function(e){return 1===e?"1 record selected.":(0===e?"No":e)+" records selected."},recordsPerPage:"Records per page:",allRows:"All",pagination:function(e,a,n){return e+"-"+a+" of "+n},columns:"Columns"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}}}); \ No newline at end of file diff --git a/dist/lang/eo.umd.min.js b/dist/lang/eo.umd.min.js new file mode 100644 index 00000000000..509b6911ad0 --- /dev/null +++ b/dist/lang/eo.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.eo=i())}(this,function(){"use strict";return{isoName:"eo",nativeName:"Esperanto",label:{clear:"Vakigi",ok:"Okej",cancel:"Rezigni",close:"Fermi",set:"Agordi",select:"Elekti",reset:"Restartigi",remove:"Forigi",update:"Ĝisdatigi",create:"Krei",search:"Serĉi",filter:"Filtri",refresh:"Reŝargi",expand:function(e){return e?'Vastigi "'+e+'"':"Vastigi"},collapse:function(e){return e?'Kolapsi "'+e+'"':"Kolapso"}},date:{days:"Dimanĉo_Lundo_Mardo_Merkredo_Jaŭdo_Vendredo_Sabato".split("_"),daysShort:"Dim_Lun_Mar_Mer_Jaŭ_Ven_Sab".split("_"),months:"Januaro_Februaro_Marto_Aprilo_Majo_Junio_Julio_Aŭgusto_Septembro_Oktobro_Novembro_Decembro".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Maj_Jun_Jul_Aŭg_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"tagoj"},table:{noData:"Neniu datumo afiŝenda",noResults:"Neniu datumo trovita",loading:"Ŝarĝado...",selectedRecords:function(e){return e>0?e+" "+(1===e?"elektita linio":"elektitaj linioj")+".":"Neniu elektita linio."},recordsPerPage:"Linioj po paĝoj:",allRows:"Ĉiuj",pagination:function(e,i,a){return e+"-"+i+" el "+a},columns:"Kolumnoj"},editor:{url:"URL",bold:"Grasa",italic:"Kursiva",strikethrough:"Trastreka",underline:"Substreka",unorderedList:"Neordigita listo",orderedList:"Ordigita listo",subscript:"Indico",superscript:"Supra indico",hyperlink:"Ligilo",toggleFullscreen:"Ŝalti plenekranon",quote:"Citaĵo",left:"Ĝisrandigi maldekstren",center:"Centrigi",right:"Ĝisrandigi dekstren",justify:"Ĝisrandigi ambaŭflanke",print:"Printi",outdent:"Malkrommarĝenigi",indent:"Krommarĝenigi",removeFormat:"Forigi prezenton",formatting:"Prezento",fontSize:"Tipara grando",align:"Ĝisrandigi",hr:"Enmeti horizontalan strekon",undo:"Malfari",redo:"Refari",heading1:"Titolo 1",heading2:"Titolo 2",heading3:"Titolo 3",heading4:"Titolo 4",heading5:"Titolo 5",heading6:"Titolo 6",paragraph:"Paragrafo",code:"Kodo",size1:"Tre malgranda",size2:"Malgranda",size3:"Normala",size4:"Meza",size5:"Granda",size6:"Tre granda",size7:"Maksimuma",defaultFont:"Implicita tiparo",viewSource:"Vida Fonto"},tree:{noData:"Neniu nodo afiŝenda",noResults:"Neniu nodo trovita"}}}); \ No newline at end of file diff --git a/dist/lang/es.umd.min.js b/dist/lang/es.umd.min.js new file mode 100644 index 00000000000..e6ce947101f --- /dev/null +++ b/dist/lang/es.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.es=a())}(this,function(){"use strict";return{isoName:"es",nativeName:"Español",label:{clear:"Borrar",ok:"OK",cancel:"Cancelar",close:"Cerrar",set:"Establecer",select:"Seleccionar",reset:"Restablecer",remove:"Eliminar",update:"Actualizar",create:"Crear",search:"Buscar",filter:"Filtrar",refresh:"Actualizar",expand:function(e){return e?'Expandir "'+e+'"':"Expandir"},collapse:function(e){return e?'Ocultar "'+e+'"':"Colapsar"}},date:{days:"Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado".split("_"),daysShort:"Dom_Lun_Mar_Mié_Jue_Vie_Sáb".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),monthsShort:"Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dias"},table:{noData:"Sin datos disponibles",noResults:"No se han encontrado resultado",loading:"Cargando...",selectedRecords:function(e){return e>1?e+" filas seleccionadas.":(0===e?"Sin":"1")+" fila seleccionada."},recordsPerPage:"Filas por página:",allRows:"Todas",pagination:function(e,a,r){return e+"-"+a+" de "+r},columns:"Columnas"},editor:{url:"URL",bold:"Negrita",italic:"Itálico",strikethrough:"Tachado",underline:"Subrayado",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",subscript:"Subíndice",superscript:"Superíndice",hyperlink:"Hipervínculo",toggleFullscreen:"Alternar pantalla completa",quote:"Cita",left:"Alineación izquierda",center:"Alineación centro",right:"Alineación derecha",justify:"Justificar alineación",print:"Imprimir",outdent:"Disminuir indentación",indent:"Aumentar indentación",removeFormat:"Eliminar formato",formatting:"Formato",fontSize:"Tamaño de Fuente",align:"Alinear",hr:"Insertar línea horizontal",undo:"Deshacer",redo:"Rehacer",heading1:"Encabezado 1",heading2:"Encabezado 2",heading3:"Encabezado 3",heading4:"Encabezado 4",heading5:"Encabezado 5",heading6:"Encabezado 6",paragraph:"Párrafo",code:"Código",size1:"Muy pequeño",size2:"Pequeño",size3:"Normal",size4:"Mediano",size5:"Grande",size6:"Muy grande",size7:"Máximo",defaultFont:"Fuente por defecto",viewSource:"Ver fuente"},tree:{noNodes:"Sin nodos disponibles",noResults:"No se encontraron nodos correspondientes"}}}); \ No newline at end of file diff --git a/dist/lang/et.umd.min.js b/dist/lang/et.umd.min.js new file mode 100644 index 00000000000..c4c44eaf81e --- /dev/null +++ b/dist/lang/et.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.et=a())}(this,function(){"use strict";return{isoName:"et",nativeName:"Eesti",label:{clear:"Tühjenda",ok:"OK",cancel:"Tühista",close:"Sulge",set:"Määra",select:"Vali",reset:"Lähtesta",remove:"Eemalda",update:"Uuenda",create:"Loo",search:"Otsi",filter:"Filtreeri",refresh:"Värskenda",expand:function(e){return e?'Laienda "'+e+'"':"Laienda"},collapse:function(e){return e?'Ahenda "'+e+'"':"Ahenda"}},date:{days:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),daysShort:"P_E_T_K_N_R_L".split("_"),months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"päeva"},table:{noData:"Andmeid ei ole",noResults:"Sobivaid kirjeid ei leitud",loading:"Laadimine...",selectedRecords:function(e){return 1===e?"1 kirje valitud.":e+" kirjet valitud."},recordsPerPage:"Kirjed lehel:",allRows:"Kõik",pagination:function(e,a,i){return e+"-"+a+" / "+i},columns:"Veerud"},editor:{url:"URL",bold:"Rasvane",italic:"Kaldkiri",strikethrough:"Läbikriipsutatud",underline:"Allakriipsutatud",unorderedList:"Järjestamata loend",orderedList:"Järjestatud loend",subscript:"Alaindeks",superscript:"Ülaindeks",hyperlink:"Link",toggleFullscreen:"Täisekraan",quote:"Tsitaat",left:"Joonda vasakule",center:"Joonda keskele",right:"Joonda paremale",justify:"Joonda võrdselt",print:"Prindi",outdent:"Vähenda taanet",indent:"Suurenda taanet",removeFormat:"Eemalda vormindus",formatting:"Vormindamine",fontSize:"Fondi suurus",align:"Joonda",hr:"Horisontaalne joon",undo:"Võta tagasi",redo:"Tee uuesti",heading1:"Pealkiri 1",heading2:"Pealkiri 2",heading3:"Pealkiri 3",heading4:"Pealkiri 4",heading5:"Pealkiri 5",heading6:"Pealkiri 6",paragraph:"Lõik",code:"Kood",size1:"Väga väike",size2:"Natuke väike",size3:"Normaalne",size4:"Keskmiselt suur",size5:"Suur",size6:"Väga suur",size7:"Maksimaalne",defaultFont:"Vaikefont",viewSource:"Kuva allikas"},tree:{noNodes:"Ühtegi sõlme pole saadaval",noResults:"Sobivaid sõlmi ei leitud"}}}); \ No newline at end of file diff --git a/dist/lang/eu.umd.min.js b/dist/lang/eu.umd.min.js new file mode 100644 index 00000000000..5430c1d4a0c --- /dev/null +++ b/dist/lang/eu.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang.eu=e())}(this,function(){"use strict";return{isoName:"eu",nativeName:"Euskara",label:{clear:"Ezabatu",ok:"OK",cancel:"Ezeztatu",close:"Itxi",set:"Ezarri",select:"Hautatu",reset:"Berrezarri",remove:"Ezabatu",update:"Eguneratu",create:"Sortu",search:"Bilatu",filter:"Iragazi",refresh:"Eguneratu",expand:function(a){return a?'Zabaldu "'+a+'"':"Zabaldu"},collapse:function(a){return a?'Tolestu "'+a+'"':"Tolestu"}},date:{days:"Igandea_Astelehena_Astearte_Asteazkena_Osteguna_Ostirala_Larunbata".split("_"),daysShort:"Iga_Ast_Asr_Asz_Ost_Osr_Lar".split("_"),months:"Urtarrila_Otsaila_Martxoa_Apirila_Maiatza_Ekaina_Uztailea_Abuztua_Iraila_Urria_Azaroa_Abendua".split("_"),monthsShort:"Urt_Ots_Mar_Api_Mai_Eka_Uzt_Abu_Ira_Urr_Aza_Abe".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"egun"},table:{noData:"Daturik ez",noResults:"Ez da emaitzarik aurkitu",loading:"Kargatzen...",selectedRecords:function(a){return a>0?a+" errenkada hautatuta.":"hautatutako errenkada gabe."},recordsPerPage:"Errenkadak orrialde bakoitzeko:",allRows:"Denak",pagination:function(a,e,r){return a+"tik -"+e+"ra, guztira "+r},columns:"Zutabeak"},editor:{url:"URL",bold:"Lodia",italic:"Italikoa",strikethrough:"Ezabaketa",underline:"Azpimarratua",unorderedList:"Zerrenda desordenatua",orderedList:"Zerrenda ordenatua",subscript:"Azpiindizea",superscript:"Superindizea",hyperlink:"Hiperesteka",toggleFullscreen:"Aldatu pantaila osoa",quote:"Hitzordua",left:"Ezkerreko lerrokadura",center:"Erdiko lerrokadura",right:"Eskubiko lerrokadura",justify:"Lerrokadura justifikatzea",print:"Inprimatu",outdent:"Murriztu indentazioa",indent:"Indentazioa areagotzea",removeFormat:"Ezabatu formatua",formatting:"Formatua",fontSize:"Letra-tamaina",align:"Lerrokatu",hr:"Txertatu lerro horizontala",undo:"Desegin",redo:"Berregin",heading1:"Goiburua 1",heading2:"Goiburua 2",heading3:"Goiburua 3",heading4:"Goiburua 4",heading5:"Goiburua 5",heading6:"Goiburua 6",paragraph:"Paragrafoa",code:"Kodea",size1:"Oso txikia",size2:"Txikia",size3:"Normala",size4:"Ertaina",size5:"Handia",size6:"Oso handia",size7:"Gehienezkoa",defaultFont:"Iturri lehenetsia",viewSource:"Ikusi iturburu-kodea"},tree:{noNodes:"Nodo erabilgarririk gabe",noResults:"Ez da aurkitu dagozkion nodorik"}}}); \ No newline at end of file diff --git a/dist/lang/fa-ir.umd.min.js b/dist/lang/fa-ir.umd.min.js new file mode 100644 index 00000000000..fe66e9df2c8 --- /dev/null +++ b/dist/lang/fa-ir.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.faIr=t())}(this,function(){"use strict";var e="یکشنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),t="فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند".split("_");return{isoName:"fa-ir",nativeName:"فارسی",rtl:!0,label:{clear:"پاک‌سازی",ok:"قبول",cancel:"لغو",close:"بستن",set:"ثبت",select:"انتخاب",reset:"بازنشانی",remove:"حذف",update:"بروزرسانی",create:"ساخت",search:"جستجو",filter:"فیلتر",refresh:"تازه‌سازی",expand:function(e){return e?'"'+e+'" گسترش':"بسط دادن"},collapse:function(e){return e?'"'+e+'" کوچک کردن':"سقوط - فروپاشی"}},date:{days:e,daysShort:"ی_د_س_چ_پ_ج_ش".split("_"),months:"فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند".split("_"),monthsShort:t,headerTitle:function(r,n){return e[r.getDay()]+"، "+n.day+" "+t[n.month-1]},firstDayOfWeek:6,format24h:!0,pluralDay:"روز"},table:{noData:"اطلاعاتی موجود نیست",noResults:"هیچ موردی یافت نشد",loading:"در حال بارگذاری ...",selectedRecords:function(e){return 0===e?"رکوردی انتخاب نشده":e+" رکورد انتخاب شده"},recordsPerPage:"رکورد در صفحه:",allRows:"همه",pagination:function(e,t,r){return e+"-"+t+" از "+r},columns:"ستون"},editor:{url:"آدرس",bold:"ضخیم",italic:"کج",strikethrough:"خط‌خورده",underline:"زیرخط",unorderedList:"فهرست غیرترتیبی",orderedList:"فهرست ترتیبی",subscript:"زیرنویس",superscript:"بالانویس",hyperlink:"پیوند",toggleFullscreen:"تغییر حالت تمام صفحه",quote:"نقل قول",left:"چپ تراز",center:"وسط تراز",right:"راست تراز",justify:"هم‌تراز",print:"چاپ",outdent:"کاهش دندانه",indent:"افزایش دندانه",removeFormat:"حذف قالب‌بندی",formatting:"قالب‌بندی",fontSize:"اندازه قلم",align:"تراز",hr:"درج خط افقی",undo:"عمل قبلی",redo:"عملی بعدی",heading1:"سرفصل ۱",heading2:"سرفصل ۲",heading3:"سرفصل ۳",heading4:"سرفصل ۴",heading5:"سرفصل ۵",heading6:"سرفصل ۶",paragraph:"پاراگراف",code:"کد",size1:"خیلی کوچک",size2:"کوچک",size3:"معمولی",size4:"متوسط-بزرگ",size5:"بزرگ",size6:"خیلی بزرگ",size7:"بزرگترین",defaultFont:"قلم پیش‌فرض",viewSource:"مشاهده منبع"},tree:{noNodes:"گره‌ای در دسترس نیست",noResults:"گره‌ای یافت نشد"}}}); \ No newline at end of file diff --git a/dist/lang/fa.umd.min.js b/dist/lang/fa.umd.min.js new file mode 100644 index 00000000000..03f83cd1d96 --- /dev/null +++ b/dist/lang/fa.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.fa=t())}(this,function(){"use strict";var e="یکشنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنجشنبه_جمعه_شنبه".split("_"),t="فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند".split("_");return{isoName:"fa",nativeName:"فارسی",rtl:!0,label:{clear:"پاک‌سازی",ok:"قبول",cancel:"لغو",close:"بستن",set:"ثبت",select:"انتخاب",reset:"بازنشانی",remove:"حذف",update:"بروزرسانی",create:"ساخت",search:"جستجو",filter:"فیلتر",refresh:"تازه‌سازی",expand:function(e){return e?'"'+e+'" گسترش':"بسط دادن"},collapse:function(e){return e?'"'+e+'" کوچک کردن':"سقوط - فروپاشی"}},date:{days:e,daysShort:"ی_د_س_چ_پ_ج_ش".split("_"),months:"فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند".split("_"),monthsShort:t,headerTitle:function(n,r){return e[n.getDay()]+"، "+r.day+" "+t[r.month-1]},firstDayOfWeek:6,format24h:!0,pluralDay:"روز"},table:{noData:"اطلاعاتی موجود نیست",noResults:"هیچ موردی یافت نشد",loading:"در حال بارگذاری ...",selectedRecords:function(e){return 0===e?"رکوردی انتخاب نشده":e+" رکورد انتخاب شده"},recordsPerPage:"رکورد در صفحه:",allRows:"همه",pagination:function(e,t,n){return e+"-"+t+" از "+n},columns:"ستون"},editor:{url:"آدرس",bold:"کلفت",italic:"کج",strikethrough:"خط‌خورده",underline:"زیرخط",unorderedList:"فهرست غیرترتیبی",orderedList:"فهرست ترتیبی",subscript:"زیرنویس",superscript:"بالانویس",hyperlink:"پیوند",toggleFullscreen:"تغییر حالت تمام صفحه",quote:"نقل قول",left:"چپ تراز",center:"وسط تراز",right:"راست تراز",justify:"هم‌تراز",print:"چاپ",outdent:"کاهش دندانه",indent:"افزایش دندانه",removeFormat:"حذف قالب‌بندی",formatting:"قالب‌بندی",fontSize:"اندازه قلم",align:"تراز",hr:"درج خط افقی",undo:"عمل قبلی",redo:"عملی بعدی",heading1:"سرفصل ۱",heading2:"سرفصل ۲",heading3:"سرفصل ۳",heading4:"سرفصل ۴",heading5:"سرفصل ۵",heading6:"سرفصل ۶",paragraph:"پاراگراف",code:"کد",size1:"خیلی کوچک",size2:"کوچک",size3:"معمولی",size4:"متوسط-بزرگ",size5:"بزرگ",size6:"خیلی بزرگ",size7:"بزرگترین",defaultFont:"قلم پیش‌فرض",viewSource:"مشاهده منبع"},tree:{noNodes:"گره‌ای در دسترس نیست",noResults:"گره‌ای یافت نشد"}}}); \ No newline at end of file diff --git a/dist/lang/fi.umd.min.js b/dist/lang/fi.umd.min.js new file mode 100644 index 00000000000..f9334393002 --- /dev/null +++ b/dist/lang/fi.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.fi=i())}(this,function(){"use strict";return{isoName:"fi",nativeName:"Suomi",label:{clear:"Tyhjennä",ok:"OK",cancel:"Peruuta",close:"Sulje",set:"Aseta",select:"Valitse",reset:"Resetoi",remove:"Poista",update:"Päivitä",create:"Luo",search:"Etsi",filter:"Suodata",refresh:"Päivitä",expand:function(e){return e?'Laajenna "'+e+'"':"Laajentaa"},collapse:function(e){return e?'Tiivistä "'+e+'"':"Romahdus"}},date:{days:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),daysShort:"su_ma_ti_ke_to_pe_la".split("_"),months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"päivää"},pullToRefresh:{pull:"Vedä alas päivittääksesi",release:"Vapauta päivittääksesi",refresh:"Päivitetään..."},table:{noData:"Ei tietoja",noResults:"Ei tuloksia",loading:"Ladataan...",selectedRecords:function(e){return 1===e?"1 rivi valittu.":e+" riviä valittu."},recordsPerPage:"Rivejä sivulla:",allRows:"Kaikki",pagination:function(e,i,t){return e+"-"+i+" / "+t},columns:"Sarakkeet"},editor:{url:"URL",bold:"Lihavoitu",italic:"Kursivoitu",strikethrough:"Yliviivattu",underline:"Alleviivattu",unorderedList:"Järjestämätön Lista",orderedList:"Järjestetty Lista",subscript:"Alaindeksi",superscript:"Yläindeksi",hyperlink:"Hyperlinkki",toggleFullscreen:"Vaihda näyttötilaa",quote:"Lainaus",left:"Asettele vasemmalle",center:"Asettele keskelle",right:"Asettele oikealle",justify:"Asettele tasaten",print:"Tulosta",outdent:"Vähennä sisennystä",indent:"Kasvata sisennystä",removeFormat:"Poista muotoilu",formatting:"Muotoilu",fontSize:"Fonttikoko",align:"Asettelu",hr:"Lisää erotin",undo:"Kumoa",redo:"Toista",heading1:"Otsikko 1",heading2:"Otsikko 2",heading3:"Otsikko 3",heading4:"Otsikko 4",heading5:"Otsikko 5",heading6:"Otsikko 6",paragraph:"Kappale",code:"Koodi",size1:"Erittäin pieni",size2:"Pieni",size3:"Normaali",size4:"Isompi",size5:"Iso",size6:"Erittäin iso",size7:"Maksimi",defaultFont:"Oletusfontti",viewSource:"Katso lähde"},tree:{noNodes:"Ei solmuja saatavilla",noResults:"Ei vastaavia solmuja"}}}); \ No newline at end of file diff --git a/dist/lang/fr.umd.min.js b/dist/lang/fr.umd.min.js new file mode 100644 index 00000000000..028a6fbd831 --- /dev/null +++ b/dist/lang/fr.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.fr=r())}(this,function(){"use strict";return{isoName:"fr",nativeName:"Français",label:{clear:"Effacer",ok:"OK",cancel:"Annuler",close:"Fermer",set:"Régler",select:"Sélectionner",reset:"Réinitialiser",remove:"Supprimer",update:"Mettre à jour",create:"Créer",search:"Rechercher",filter:"Filtrer",refresh:"Rafraîchir",expand:function(e){return e?'Développer "'+e+'"':"Développer"},collapse:function(e){return e?'Réduire "'+e+'"':"Effondrement"}},date:{days:"Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi".split("_"),daysShort:"Dim_Lun_Mar_Mer_Jeu_Ven_Sam".split("_"),months:"Janvier_Février_Mars_Avril_Mai_Juin_Juillet_Août_Septembre_Octobre_Novembre_Décembre".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Juin_Jui_Aou_Sep_Oct_Nov_Dec".split("_"),headerTitle:function(e){return new Intl.DateTimeFormat("fr",{weekday:"short",day:"numeric",month:"short"}).format(e)},firstDayOfWeek:1,format24h:!0,pluralDay:"jours"},table:{noData:"Aucune donnée à afficher",noResults:"Aucune donnée trouvée",loading:"Chargement...",selectedRecords:function(e){return e>0?e+" "+(1===e?"ligne sélectionnée":"lignes sélectionnées")+".":"Aucune ligne sélectionnée."},recordsPerPage:"Lignes par page :",allRows:"Tous",pagination:function(e,r,n){return e+"-"+r+" sur "+n},columns:"Colonnes"},editor:{url:"URL",bold:"Gras",italic:"Italique",strikethrough:"Barré",underline:"Souligné",unorderedList:"Liste non ordonnée",orderedList:"Liste ordonnée",subscript:"Indice",superscript:"Exposant",hyperlink:"Hyperlien",toggleFullscreen:"Basculer en plein écran",quote:"Citation",left:"Aligner à gauche",center:"Aligner au centre",right:"Aligner à droite",justify:"Justifier",print:"Imprimer",outdent:"Diminuer l'indentation",indent:"Augmenter l'indentation",removeFormat:"Supprimer la mise en forme",formatting:"Mise en forme",fontSize:"Taille de police",align:"Aligner",hr:"Insérer une règle horizontale",undo:"Annuler",redo:"Refaire",heading1:"Titre 1",heading2:"Titre 2",heading3:"Titre 3",heading4:"Titre 4",heading5:"Titre 5",heading6:"Titre 6",paragraph:"Paragraphe",code:"Code",size1:"Très petit",size2:"Petit",size3:"Normal",size4:"Moyenne",size5:"Grand",size6:"Très grand",size7:"Maximum",defaultFont:"Police par défaut",viewSource:"Voir la source"},tree:{noData:"Aucun nœud à afficher",noResults:"Aucun nœud trouvé"}}}); \ No newline at end of file diff --git a/dist/lang/gn.umd.min.js b/dist/lang/gn.umd.min.js new file mode 100644 index 00000000000..e5fb61e5785 --- /dev/null +++ b/dist/lang/gn.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.gn=a())}(this,function(){"use strict";return{isoName:"gn",nativeName:"Avañe'ẽ",label:{clear:"Mbogue",ok:"OĨma",cancel:"Cancelar",close:"Mboty",set:"Mohenda",select:"Poravo",reset:"MoĨ jey",remove:"Juka",update:"Actualisa",create:"Japo",search:"Heka",filter:"Mbogua",refresh:"Actualisa",expand:function(e){return e?'Oñembotuichave "'+e+'"':"Myasãi"},collapse:function(e){return e?'Omboguejy "'+e+'"':"Ñembyaipa"}},date:{days:"Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado".split("_"),daysShort:"Dom_Lun_Mar_Mié_Jue_Vie_Sáb".split("_"),months:"Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre".split("_"),monthsShort:"Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"ára"},table:{noData:"Ni peteĨ mba'e",noResults:"Ni peteĨ resultado",loading:"Era'arõ...",selectedRecords:function(e){return e>1?e+" fila selesionada.":(0===e?"Sin":"1")+" fila selesionada."},recordsPerPage:"Fila por páhina:",allRows:"Entero",pagination:function(e,a,n){return e+"-"+a+" de "+n},columns:"Columnakuéra"},editor:{url:"URL",bold:"Negrita",italic:"Kursíva",strikethrough:"Tachado",underline:"Subrayado",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",subscript:"Subíndice",superscript:"Superíndice",hyperlink:"Hipervínculo",toggleFullscreen:"Pantalla kompléta",quote:"Cita",left:"Alineación izquierda",center:"Alineación centro",right:"Alineación derecha",justify:"Justificar alineación",print:"Imprimir",outdent:"Disminuir indentación",indent:"Aumentar indentación",removeFormat:"Eliminar formato",formatting:"Formato",fontSize:"Tamaño de Fuente",align:"Alinear",hr:"Insertar línea horizontal",undo:"Deshacer",redo:"Rehacer",heading1:"Encabezado 1",heading2:"Encabezado 2",heading3:"Encabezado 3",heading4:"Encabezado 4",heading5:"Encabezado 5",heading6:"Encabezado 6",paragraph:"Párrafo",code:"Código",size1:"Muy pequeño",size2:"Pequeño",size3:"Normal",size4:"Mediano",size5:"Grande",size6:"Muy grande",size7:"Máximo",defaultFont:"Fuente por defecto",viewSource:"View Source"},tree:{noNodes:"Sin nodos disponibles",noResults:"No se encontraron nodos correspondientes"}}}); \ No newline at end of file diff --git a/dist/lang/he.umd.min.js b/dist/lang/he.umd.min.js new file mode 100644 index 00000000000..47821633f83 --- /dev/null +++ b/dist/lang/he.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.he=t())}(this,function(){"use strict";return{isoName:"he",nativeName:"עברית",rtl:!0,label:{clear:"נקה",ok:"אישור",cancel:"ביטול",close:"סגור",set:"הגדר",select:"בחר",reset:"איפוס",remove:"מחק",update:"עדכן",create:"צור",search:"חיפוש",filter:"סינון",refresh:"רענון",expand:function(e){return e?'"'+e+'" הרחב את':"לְהַרְחִיב"},collapse:function(e){return e?'"'+e+'" כווץ':"הִתמוֹטְטוּת"}},date:{days:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),daysShort:"א_ב_ג_ד_ה_ו_ש".split("_"),months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),firstDayOfWeek:0,format24h:!0,pluralDay:"ימים"},table:{noData:"לא נמצאו נתונים",noResults:"לא נמצאו תוצאות רלוונטיות",loading:"טוען...",selectedRecords:function(e){return 1===e?"נבחרה שורה אחת.":(0===e?"לא":e)+" שורות נבחרו"},recordsPerPage:"שורות בעמוד:",allRows:"הכל",pagination:function(e,t,n){return e+"-"+t+" מתוך "+n},columns:"עמודות"},editor:{url:"כתובת אתר",bold:"בולט",italic:"נטוי",strikethrough:"קו חוצה",underline:"קו תחתון",unorderedList:"רשימת תבליטים",orderedList:"רשימה ממוספרת",subscript:"קו תחתון",superscript:"קו עליון",hyperlink:"קישור",toggleFullscreen:"מסך מלא",quote:"ציטוט",left:"יישור לשמאל",center:"יישור למרכז",right:"יישור לימין",justify:"יישור",print:"הדפסה",outdent:"הקטן כניסה",indent:"הגדל כניסה",removeFormat:"נקה עיתוב",formatting:"עיצוב",fontSize:"גודל פונט",align:"יישור",hr:"הוסף קו אופקי",undo:"בטל",redo:"בצע מחדש",heading1:"כותרת 1",heading2:"כותרת 2",heading3:"כותרת 3",heading4:"כותרת 4",heading5:"כותרת 5",heading6:"כותרת 6",paragraph:"פסקה",code:"קטע קוד",size1:"קטן מאוד",size2:"קטן",size3:"נורמלי",size4:"בינוני-גדול",size5:"גדול",size6:"גדול מאוד",size7:"מקסימלי",defaultFont:"ברירת מחדל",viewSource:"ראה מקור"},tree:{noNodes:"אין פריטים להצגה",noResults:"לא נמצאו פריטים רלוונטים"}}}); \ No newline at end of file diff --git a/dist/lang/hr.umd.min.js b/dist/lang/hr.umd.min.js new file mode 100644 index 00000000000..931daad649d --- /dev/null +++ b/dist/lang/hr.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang.hr=e())}(this,function(){"use strict";return{isoName:"hr",nativeName:"Hrvatski jezik",label:{clear:"Očisti",ok:"OK",cancel:"Odustani",close:"Zatvori",set:"Postavi",select:"Izaberi",reset:"Poništi",remove:"Ukloni",update:"Ažuriraj",create:"Dodaj",search:"Traži",filter:"Filter",refresh:"Osvježi",expand:function(a){return a?'Proširi "'+a+'"':"Proširiti"},collapse:function(a){return a?'Sažmi "'+a+'"':"Kolaps"}},date:{days:"Nedjelja_Ponedjeljak_Utorak_Srijeda_Četvrtak_Petak_Subota".split("_"),daysShort:"Ned_Pon_Uto_Sri_Čet_Pet_Sub".split("_"),months:"Siječanj_Veljača_Ožujak_Travanj_Svibanj_Lipanj_Srpanj_Kolovoz_Rujan_Listopad_Studeni_Prosinac".split("_"),monthsShort:"Sij_Velj_Ožu_Tra_Svi_Lip_Srp_Kol_Ruj_Lis_Stu_Pro".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dana"},table:{noData:"Nema podataka",noResults:"Nema odgovarajućih zapisa",loading:"Učitavanje...",selectedRecords:function(a){return a>1?a+" izabranih redova.":(0===a?"Nema":"1")+" izabranih redova."},recordsPerPage:"Redova po stranici:",allRows:"Sve",pagination:function(a,e,i){return a+"-"+e+" od "+i},columns:"Stupci"},editor:{url:"URL",bold:"Podebljano",italic:"Nakošeno",strikethrough:"Precrtano",underline:"Podcrtano",unorderedList:"Označena lista",orderedList:"Numerirana lista",subscript:"Potpisano",superscript:"Natpisano",hyperlink:"Hiperlink",toggleFullscreen:"Puni zaslon",quote:"Citat",left:"Poravnati ulijevo",center:"Centrirati",right:"Poravnati udesno",justify:"Poravnati obostrano",print:"Ispis",outdent:"Smanjiti uvlačenje",indent:"Povećati uvlačenje",removeFormat:"Ukloniti formatiranje",formatting:"Formatirati",fontSize:"Veličina slova",align:"Poravnati",hr:"Ubaciti vodoravno ravnalo",undo:"Poništiti",redo:"Vratiti",heading1:"Naslov 1",heading2:"Naslov 2",heading3:"Naslov 3",heading4:"Naslov 4",heading5:"Naslov 5",heading6:"Naslov 6",paragraph:"Odlomak",code:"Kod",size1:"Vrlo malo",size2:"Malo manje",size3:"Normalno",size4:"Srednje",size5:"Veliko",size6:"Vrlo veliko",size7:"Nejveće",defaultFont:"Zadani font",viewSource:"Pogledaj izvor"},tree:{noNodes:"Nema nijednog čvora",noResults:"Nema odgovarajućih čvorova"}}}); \ No newline at end of file diff --git a/dist/lang/hu.umd.min.js b/dist/lang/hu.umd.min.js new file mode 100644 index 00000000000..19acc627f8b --- /dev/null +++ b/dist/lang/hu.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,s){"object"==typeof exports&&"undefined"!=typeof module?module.exports=s():"function"==typeof define&&define.amd?define(s):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.hu=s())}(this,function(){"use strict";return{isoName:"hu",nativeName:"Magyar",label:{clear:"Törlés",ok:"OK",cancel:"Mégsem",close:"Bezárás",set:"Beállítás",select:"Kiválasztás",reset:"Visszaállítás",remove:"Eltávolítás",update:"Módosítás",create:"Létrehozás",search:"Keresés",filter:"Szűrés",refresh:"Frissítés",expand:function(e){return e?'A "'+e+'" kiterjesztése':"Kiterjed"},collapse:function(e){return e?'A "'+e+'" összecsukása':"Összeomlás"}},date:{days:"Vasárnap_Hétfő_Kedd_Szerda_Csütörtök_Péntek_Szombat".split("_"),daysShort:"Vas_Hét_Ke_Sze_Csü_Pén_Szo".split("_"),months:"Január_Február_Március_Április_Május_Június_Július_Augusztus_Szeptember_Október_November_December".split("_"),monthsShort:"Jan_Feb_Már_Ápr_Máj_Jún_Júl_Aug_Szep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"nap"},table:{noData:"Nincs elérhető adat",noResults:"Nincsenek egyező találatok",loading:"Betöltés...",selectedRecords:function(e){return 1===e?"1 kiválasztott elem.":(0===e?"Nincs":e)+" kiválasztott elem."},recordsPerPage:"Elemek száma oldalanként:",allRows:"Összes",pagination:function(e,s,t){return e+"-"+s+" / "+t},columns:"Oszlopok"},editor:{url:"URL",bold:"Félkövér",italic:"Dőlt",strikethrough:"Áthúzott",underline:"Aláhúzott",unorderedList:"Felsorolás",orderedList:"Számozás",subscript:"Alsó index",superscript:"Felső index",hyperlink:"Hivatkozás",toggleFullscreen:"Teljes képernyő",quote:"Idézet",left:"Balra igazítás",center:"Középre igazítás",right:"Jobbra igazítás",justify:"Sorkizárás",print:"Nyomtatás",outdent:"Behúzás csökkentése",indent:"Behúzás növelése",removeFormat:"Formázás törlése",formatting:"Formázás",fontSize:"Betűméret",align:"Igazítás",hr:"Vízszintes elválasztó beillesztése",undo:"Visszavonás",redo:"Mégis",heading1:"Címsor 1",heading2:"Címsor 2",heading3:"Címsor 3",heading4:"Címsor 4",heading5:"Címsor 5",heading6:"Címsor 6",paragraph:"Paragrafus",code:"Kód",size1:"Nagyon kicsi",size2:"Kicsi",size3:"Normál",size4:"Közepesen nagy",size5:"Nagy",size6:"Nagyon nagy",size7:"Maximális",defaultFont:"Alapértelmezett betűtípus",viewSource:"Forrás megtekintése"},tree:{noNodes:"Nincsenek elérhető elemek",noResults:"Nincsenek egyező találatok"}}}); \ No newline at end of file diff --git a/dist/lang/id.umd.min.js b/dist/lang/id.umd.min.js new file mode 100644 index 00000000000..91bf88eee36 --- /dev/null +++ b/dist/lang/id.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang.id=e())}(this,function(){"use strict";return{isoName:"id",nativeName:"Bahasa Indonesia",label:{clear:"Bersihkan",ok:"OK",cancel:"Batal",close:"Tutup",set:"Set",select:"Pilih",reset:"Reset",remove:"Copot",update:"Perbarui",create:"Buat",search:"Cari",filter:"Saring",refresh:"Segarkan",expand:function(a){return a?'Perluas "'+a+'"':"Mengembangkan"},collapse:function(a){return a?'Ciutkan "'+a+'"':"Jatuh"}},date:{days:"Minggu_Senin_Selasa_Rabu_Kamis_Jum'at_Sabtu".split("_"),daysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"hari"},table:{noData:"Tidak ada data tersedia",noResults:"Tidak ada yang cocok",loading:"Memuat...",selectedRecords:function(a){return a>1?a+" baris terpilih.":(0===a?"tidak ada":"1")+" baris terpilih."},recordsPerPage:"Baris per halaman:",allRows:"Semua",pagination:function(a,e,i){return a+"-"+e+" dari "+i},columns:"Kolom"},editor:{url:"URL",bold:"Tebal",italic:"Miring",strikethrough:"Coret",underline:"Garis Bawah",unorderedList:"Daftar tak Tersusun",orderedList:"Daftar Tersusun",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Alihkan Layar Penuh",quote:"Kutip",left:"Rata Kiri",center:"Rata Tengah",right:"Rata Kanan",justify:"Rata Sisi",print:"Cetak",outdent:"Kurangi Indentasi",indent:"Tambah indentasi",removeFormat:"Hilangkan Pemformatan",formatting:"Pemformatan",fontSize:"Ukuran Huruf",align:"Rata",hr:"Masukkan Aturan Horizontal",undo:"Urungkan",redo:"Ulangi",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraf",code:"Kode",size1:"Sangat Kecil",size2:"Agak Kecil",size3:"Normal",size4:"Agak Besar",size5:"Besar",size6:"Sangat Besar",size7:"Maksimum",defaultFont:"Huruf Bawaan",viewSource:"Lihat sumber"},tree:{noNodes:"Tak ada node tersedia",noResults:"Tak ditemukan node yang cocok"}}}); \ No newline at end of file diff --git a/dist/lang/is.umd.min.js b/dist/lang/is.umd.min.js new file mode 100644 index 00000000000..9d1cd312975 --- /dev/null +++ b/dist/lang/is.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(r,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((r="undefined"!=typeof globalThis?globalThis:r||self).Quasar=r.Quasar||{},r.Quasar.lang=r.Quasar.lang||{},r.Quasar.lang.is=a())}(this,function(){"use strict";return{isoName:"is",nativeName:"Íslenska",label:{clear:"Hreinsa",ok:"Ókei",cancel:"Hætta við",close:"Loka",set:"Setja",select:"Velja",reset:"Endurstilla",remove:"Fjarlægja",update:"Uppfæra",create:"Búa til",search:"Leita",filter:"Sía",refresh:"Endurhlaða",expand:function(r){return r?'Stækka "'+r+'"':"Stækkaðu"},collapse:function(r){return r?'Draga saman "'+r+'"':"Hrun"}},date:{days:"Sunnudagur_Mánudagur_Þriðjudagur_Miðvikudagur_Fimmtudagur_Föstudagur_Laugardagur".split("_"),daysShort:"Sun_Mán_Þri_Mið_Fim_Fös_Lau".split("_"),months:"Janúar_Febrúar_Mars_Apríl_Maí_Júní_Júlí_Ágúst_September_Október_Nóvember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Maí_Jún_Júl_Ágú_Sep_Okt_Nóv_Des".split("_"),firstDayOfWeek:0,format24h:!0,pluralDay:"dagar"},table:{noData:"Engin gögn tiltæk",noResults:"Engar samsvarandi skrár fundust",loading:"Augnablik...",selectedRecords:function(r){return 1===r?"1 færsla valin.":(0===r?"Engar":r)+" færslur valdar."},recordsPerPage:"Færslur á hverri síðu:",allRows:"Allar",pagination:function(r,a,e){return r+"-"+a+" af "+e},columns:"Dálkar"},editor:{url:"Slóð",bold:"Feitletra",italic:"Skáletra",strikethrough:"Strika í gegnum",underline:"Undirstrika",unorderedList:"Óraðaður listi",orderedList:"Raðaður listi",subscript:"Hnéletur",superscript:"Brjóstletur",hyperlink:"Hlekkur",toggleFullscreen:"Fullskjár af/á",quote:"Tilvitnun",left:"Vinstrijafna",center:"Miðjujafna",right:"Hægrijafna",justify:"Jafna",print:"Prenta",outdent:"Minnka inndrátt",indent:"Auka inndrátt",removeFormat:"Hreinsa snið",formatting:"Snið",fontSize:"Leturstærð",align:"Jafna",hr:"Lárétt lína",undo:"Afturkalla",redo:"Endurgera",heading1:"Fyrirsögn 1",heading2:"Fyrirsögn 2",heading3:"Fyrirsögn 3",heading4:"Fyrirsögn 4",heading5:"Fyrirsögn 5",heading6:"Fyrirsögn 6",paragraph:"Efnisgrein",code:"Kóði",size1:"Mjög lítill",size2:"Dálítið lítill",size3:"Venjulegur",size4:"Miðlungsstór",size5:"Stór",size6:"Mjög stór",size7:"Risastór",defaultFont:"Sjálfgefið letur",viewSource:"Sjá kóða"},tree:{noNodes:"Engar nóður í boði",noResults:"Engar samsvarandi nóður fundust"}}}); \ No newline at end of file diff --git a/dist/lang/it.umd.min.js b/dist/lang/it.umd.min.js new file mode 100644 index 00000000000..388e6689603 --- /dev/null +++ b/dist/lang/it.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.it=i())}(this,function(){"use strict";return{isoName:"it",nativeName:"Italiano",label:{clear:"Pulisci",ok:"OK",cancel:"Annulla",close:"Chiudi",set:"Imposta",select:"Seleziona",reset:"Ripristina",remove:"Rimuovi",update:"Aggiorna",create:"Crea",search:"Cerca",filter:"Filtra",refresh:"Aggiorna",expand:function(e){return e?'Espandi "'+e+'"':"Espandere"},collapse:function(e){return e?'Comprimi "'+e+'"':"Crollo"}},date:{days:"Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato".split("_"),daysShort:"Dom_Lun_Mar_Mer_Gio_Ven_Sab".split("_"),months:"Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre".split("_"),monthsShort:"Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"giorni"},table:{noData:"Nessun dato disponibile",noResults:"Nessuna corrispondenza trovata",loading:"Caricamento...",selectedRecords:function(e){return e>0?e+" "+(1===e?"riga selezionata":"righe selezionate")+".":"Nessuna riga selezionata."},recordsPerPage:"Righe per pagina:",allRows:"Tutte",pagination:function(e,i,o){return e+"-"+i+" di "+o},columns:"Colonne"},editor:{url:"URL",bold:"Grassetto",italic:"Corsivo",strikethrough:"Barrato",underline:"Sottolineato",unorderedList:"Lista non ordinata",orderedList:"Lista ordinata",subscript:"Pedice",superscript:"Apice",hyperlink:"Hyperlink",toggleFullscreen:"Fullscreen on/off",quote:"Citazione",left:"A sinistra",center:"Centra",right:"A destra",justify:"Giustificato",print:"Stampa",outdent:"Diminuisci identazione",indent:"Aumenta identazione",removeFormat:"Rimuovi formattazione",formatting:"Formattazione",fontSize:"Dimensione del font",align:"Allinea",hr:"Inserisci righello orizzontale",undo:"Indietro",redo:"Avanti",heading1:"Intestazione 1",heading2:"Intestazione 2",heading3:"Intestazione 3",heading4:"Intestazione 4",heading5:"Intestazione 5",heading6:"Intestazione 6",paragraph:"Paragrafo",code:"Codice",size1:"Molto piccolo",size2:"Piccolo",size3:"Normale",size4:"Medio-largo",size5:"Grande",size6:"Molto grande",size7:"Massimo",defaultFont:"Font predefinito",viewSource:"Vedi la fonte"},tree:{noData:"Nessun nodo disponibile",noResults:"Nessuna corrispondenza trovata"}}}); \ No newline at end of file diff --git a/dist/lang/ja.umd.min.js b/dist/lang/ja.umd.min.js new file mode 100644 index 00000000000..6e5927f7802 --- /dev/null +++ b/dist/lang/ja.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ja=t())}(this,function(){"use strict";return{isoName:"ja",nativeName:"日本語 (にほんご)",label:{clear:"クリア",ok:"OK",cancel:"キャンセル",close:"閉じる",set:"設定",select:"選択",reset:"リセット",remove:"削除",update:"更新",create:"作成",search:"検索",filter:"フィルタ",refresh:"再読込",expand:function(e){return e?"「"+e+"」を展開します。":"拡大"},collapse:function(e){return e?"「"+e+"」を折りたたむ":"崩壊"}},date:{days:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),daysShort:"日_月_火_水_木_金_土".split("_"),months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),headerTitle:function(e){return new Intl.DateTimeFormat("ja-JP",{weekday:"short",month:"short",day:"numeric"}).format(e)},firstDayOfWeek:1,format24h:!0,pluralDay:"日間"},table:{noData:"データがありません",noResults:"検索結果がありません",loading:"読込中...",selectedRecords:function(e){return e>0?e+"行を選択中":"行を選択"},recordsPerPage:"ページあたりの行数",allRows:"全て",pagination:function(e,t,n){return e+"-"+t+" / "+n},columns:"列"},editor:{url:"URL",bold:"太字",italic:"斜体",strikethrough:"取り消し線",underline:"下線",unorderedList:"箇条書き",orderedList:"段落番号",subscript:"下付き",superscript:"上付き",hyperlink:"リンク",toggleFullscreen:"全画面表示",quote:"引用文",left:"左揃え",center:"中央揃え",right:"右揃え",justify:"両端揃え",print:"印刷",outdent:"インデント解除",indent:"インデント",removeFormat:"書式解除",formatting:"書式",fontSize:"フォントサイズ",align:"揃え",hr:"横線を投入",undo:"元に戻す",redo:"やり直し",heading1:"ヘッダー 1",heading2:"ヘッダー 2",heading3:"ヘッダー 3",heading4:"ヘッダー 4",heading5:"ヘッダー 5",heading6:"ヘッダー 6",paragraph:"段落",code:"コード",size1:"小さい",size2:"やや小さい",size3:"普通",size4:"やや大きい",size5:"大きい",size6:"とても大きい",size7:"最大",defaultFont:"初期フォント",viewSource:"ソースを見る"},tree:{noNodes:"ノードがありません",noResults:"該当するノードがありません"}}}); \ No newline at end of file diff --git a/dist/lang/km.umd.min.js b/dist/lang/km.umd.min.js new file mode 100644 index 00000000000..263c350268b --- /dev/null +++ b/dist/lang/km.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.km=t())}(this,function(){"use strict";return{isoName:"km",nativeName:"ខ្មែរ",label:{clear:"សម្អាត",ok:"យល់ព្រម",cancel:"បោះបង់",close:"បិទ",set:"កំណត់",select:"ជ្រើសរើស",reset:"កំណត់ឡើងវិញ",remove:"លុប",update:"កែប្រែ",create:"បង្កើត",search:"ស្វែងរក",filter:"ច្រោះ",refresh:"ធ្វើឲ្យថ្មី",expand:function(e){return e?'ពង្រីក "'+e+'"':"ពង្រីក"},collapse:function(e){return e?'បង្រួម "'+e+'"':"ដួលរលំ"}},date:{days:"អាទិត្យ_ចន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),daysShort:"អទ_ចន_អង_ពុ_ព្រ_សុ_សរ".split("_"),months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),firstDayOfWeek:1,format24h:!1,pluralDay:"ថ្ងៃ"},table:{noData:"គ្មានទិន្ន័យ",noResults:"គ្មានទិន្ន័យដូច",loading:"កំពុងផ្ទេរទិន្នន័យ...",selectedRecords:function(e){return 1===e?"1 ជួរដេកត្រូវបានជ្រើសរើស":(0===e?"មិនមាន":e)+" ជួរដេកត្រូវបានជ្រើសរើស"},recordsPerPage:"ជួរដេកក្នុងមួយទំព័រ:",allRows:"ទាំងអស់",pagination:function(e,t,n){return e+"-"+t+" នៃ "+n},columns:"ជួរឈរ"},editor:{url:"URL",bold:"ដិត",italic:"ទ្រេត",strikethrough:"បន្ទាត់ឆ្នូតកណ្តាល",underline:"បន្ទាត់ពីក្រោម",unorderedList:"បញ្ជីគ្មានលំដាប់",orderedList:"បញ្ជីមានលំដាប់",subscript:"សន្ទស្សន៍ខាងក្រោម",superscript:"សន្ទស្សន៍ខាងលើ",hyperlink:"តំណភ្ជាប់",toggleFullscreen:"ប្តូរអេក្រង់ពេញ",quote:"សម្រង់",left:"តម្រឹមឆ្វេង",center:"តម្រឹមកណ្តាល",right:"តម្រឹមស្តាំ",justify:"តម្រឹមសងខាង",print:"បោះពុម្ភ",outdent:"បន្ថយចូលបន្ទាត់",indent:"បន្ថែមចូលបន្ទាត់",removeFormat:"លុបទ្រង់ទ្រាយ",formatting:"ទ្រង់ទ្រាយ",fontSize:"ទំហំអក្សរ",align:"តម្រឹម",hr:"បញ្ចូលបន្ទាត់ផ្តេក",undo:"មិនធ្វើវិញ",redo:"ធ្វើវិញ",heading1:"ចំណងជើង 1",heading2:"ចំណងជើង 2",heading3:"ចំណងជើង 3",heading4:"ចំណងជើង 4",heading5:"ចំណងជើង 5",heading6:"ចំណងជើង 6",paragraph:"កថាខណ្ឌ",code:"កូដ",size1:"តូចណាស់",size2:"តូចបន្តិច",size3:"ធម្មតា",size4:"ធំមធ្យម",size5:"ធំ",size6:"ធំណាស់",size7:"អតិបរិមា",defaultFont:"ពុម្ពអក្សរដើម",viewSource:"មើលប្រភព។"},tree:{noNodes:"គ្មានទិន្នន័យ",noResults:"គ្មានទិន្ន័យដូច"}}}); \ No newline at end of file diff --git a/dist/lang/ko-kr.umd.min.js b/dist/lang/ko-kr.umd.min.js new file mode 100644 index 00000000000..656e3b4b850 --- /dev/null +++ b/dist/lang/ko-kr.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.koKr=t())}(this,function(){"use strict";return{isoName:"ko-kr",nativeName:"한국어",label:{clear:"초기화",ok:"확인",cancel:"취소",close:"닫기",set:"설정",select:"선택",reset:"초기화",remove:"삭제",update:"업데이트",create:"생성",search:"검색",filter:"필터",refresh:"새로 고침",expand:function(e){return e?'"'+e+'" 확장':"확장하다"},collapse:function(e){return e?'"'+e+'" 접기':"무너지다"}},date:{days:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),daysShort:"일_월_화_수_목_금_토".split("_"),months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"일"},table:{noData:"데이터가 없습니다.",noResults:"결과가 없습니다.",loading:"로드 중...",selectedRecords:function(e){return e>0?e+" 개가 선택 되었습니다.":"선택된 항목이 없습니다."},recordsPerPage:"페이지 당 개수:",allRows:"전체",pagination:function(e,t,n){return n+" 중 "+e+"-"+t},columns:"열"},editor:{url:"URL",bold:"굵게",italic:"기울이기",strikethrough:"취소선",underline:"밑줄",unorderedList:"비순차 목록",orderedList:"순서 목록",subscript:"아래 첨자",superscript:"위 첨자",hyperlink:"하이퍼링크",toggleFullscreen:"전체 화면",quote:"따옴표",left:"왼쪽 정렬",center:"가운데 정렬",right:"오른쪽 정렬",justify:"세로 정렬",print:"출력",outdent:"들여 쓰기",indent:"내어 쓰기",removeFormat:"포맷팅 제거",formatting:"포맷팅",fontSize:"글꼴 크기",align:"가로 정렬",hr:"가로줄 넣기",undo:"실행취소",redo:"다시하기",heading1:"제목 1",heading2:"제목 2",heading3:"제목 3",heading4:"제목 4",heading5:"제목 5",heading6:"제목 6",paragraph:"단락",code:"코드",size1:"매우 작게",size2:"작게",size3:"보통",size4:"약간 크게",size5:"크게",size6:"아주 크게",size7:"최대",defaultFont:"기본 글꼴",viewSource:"소스보기"},tree:{noNodes:"가능한 항목이 없습니다",noResults:"항목을 찾을 수 없습니다"}}}); \ No newline at end of file diff --git a/dist/lang/kur-ckb.umd.min.js b/dist/lang/kur-ckb.umd.min.js new file mode 100644 index 00000000000..a22feef9b2f --- /dev/null +++ b/dist/lang/kur-ckb.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.kurCkb=t())}(this,function(){"use strict";return{isoName:"kur-ckb",nativeName:"کوردی سۆرانی",rtl:!0,label:{clear:"پاککردنەوە",ok:"باشە",cancel:"هەڵوەشاندنەوە",close:"داخستن",set:"دانان",select:"هەڵبژاردن",reset:"رێکخستنەوه",remove:"لابردن",update:"نوێکردنەوە",create:"دروستکردن",search:"گەڕان",filter:"پاڵاوتن",refresh:"تازەکردنەوە",expand:function(e){return e?'"'+e+'" فراوانکردنی':"فراوانکردن"},collapse:function(e){return e?'"'+e+'" داخستنی':"شکست هێنان"}},date:{days:"یەک شەممە_دووشەممە_سێ شەممە_چوار شەممە_پێنج شەممە_هەینی_شەممە".split("_"),daysShort:"١شم_٢شم_٣شم_٤شم_٥شم_هەینی_شەممە".split("_"),months:"مانگی یەک_مانگی دوو_مانگی سێ_مانگی چوار_مانگی پێنج_مانگی شەش_مانگی حەوت_مانگی هەشت_مانگی نۆ_مانگی دە_مانگی یانزە_مانگی دووانزە".split("_"),monthsShort:"مانگی یەک_مانگی دوو_مانگی سێ_مانگی چوار_مانگی پێنج_مانگی شەش_مانگی حەوت_مانگی هەشت_مانگی نۆ_مانگی دە_مانگی یانزە_مانگی دووانزە".split("_"),firstDayOfWeek:6,format24h:!1,singleDay:"ڕۆژ",pluralDay:"ڕۆژەکان"},table:{noData:"هیچ داتەیەک نییە",noResults:"هیچ ئەنجامێک نییە",loading:"چاوەڕوانبە...",selectedRecords:function(e){return 1===e?"یەک ڕیکۆرد هەڵبژێردراوە":(0===e?"0":e)+"ڕیکۆرد هەڵبژێرداوە."},recordsPerPage:"ئەنجام بۆهەر پەڕەیەک:",allRows:"هەمووی",pagination:function(e,t,n){return e+"-"+t+" لە "+n},columns:"ڕیز"},editor:{url:"لینک",bold:"تۆخ",italic:"لار",strikethrough:"خەتپیاهاتوو",underline:"خەتبەژێرهاتوو",unorderedList:"لیستی ڕیزنەکراو",orderedList:"لیستی ڕیزکراو",subscript:"ژێرهێڵ",superscript:"سەرهێڵ",hyperlink:"لینک",toggleFullscreen:"پربە شاشە یان نا",quote:"دەق",left:"لای چەپ",center:"ناوەڕاست",right:"لای ڕاست",justify:"بە یەکسانی",print:"پرینت",outdent:"کەمکردنەوەی بۆشای",indent:"زۆرکردنی بۆشای",removeFormat:"لابردنی ستایل",formatting:"ستایل",fontSize:"قەبارەی فۆنت",align:"ڕێککردن",hr:"دانانی هیڵی ئاسۆی",undo:"پاشگەزبونەوە",redo:"کردنەوە",heading1:"ناونیشان ١",heading2:"ناونیشان ٢",heading3:"ناونیشان ٣",heading4:"ناونیشان ٤",heading5:"ناونیشان ٥",heading6:"ناونیشان ٦",paragraph:"بڕگە",code:"کۆد",size1:"زۆر بچووک",size2:"بچووک",size3:"ئاسای",size4:"ناوەند",size5:"گەورە",size6:"زۆر گەورە",size7:"گەورەترین",defaultFont:"فۆنتی بنەڕەت",viewSource:"سەیرکردنی سەرچاوە"},tree:{noNodes:"هیچ نۆدێک نیە",noResults:"هیچ نۆدێک نەدۆزرایەوە"}}}); \ No newline at end of file diff --git a/dist/lang/kz.umd.min.js b/dist/lang/kz.umd.min.js new file mode 100644 index 00000000000..616ad0992a4 --- /dev/null +++ b/dist/lang/kz.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.kz=t())}(this,function(){"use strict";return{isoName:"kz",nativeName:"Қазақша",label:{clear:"Тазалау",ok:"OK",cancel:"Бас тарту",close:"Жабу",set:"Орнату",select:"Таңдау",reset:"Қалпына келтіру",remove:"Өшіру",update:"Жаңарту",create:"Жасау",search:"Іздеу",filter:"Сүзгі",refresh:"Жаңарту",expand:function(e){return e?'"'+e+'" кеңейту':"Кеңейту"},collapse:function(e){return e?'"'+e+'" жию':"Жыйрату"}},date:{days:"Жексенбі_Дүйсенбі_Сейсенбі_Сәрсенбі_Бейсенбі_Жұма_Сенбі".split("_"),daysShort:"Жс_Дс_Сс_Ср_Бс_Жм_Сб".split("_"),months:"Қаңтар_Ақпан_Наурыз_Сәуір_Мамыр_Маусым_Шілде_Тамыз_Қыркүйек_Қазан_Қараша_Желтоқсан".split("_"),monthsShort:"Қаң_Ақп_Нау_Сәу_Мам_Мау_Шіл_Там_Қыр_Қаз_Қар_Жел".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"күн"},table:{noData:"Мәлімет жоқ",noResults:"Сәйкестік табылмады",loading:"Жүктеу...",selectedRecords:function(e){return e>0?e+" "+["жол таңдалды","жол таңдалды","жол таңдалды"][(t=e)%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2]+".":"Ешбір жол таңдалмады.";var t},recordsPerPage:"Беттегі жолдар:",allRows:"Бәрі",pagination:function(e,t,n){return e+"-"+t+" из "+n},columns:"Бағандар"},editor:{url:"URL",bold:"Қалың",italic:"Курсив",strikethrough:"Сызылған",underline:"Асты сызылған",unorderedList:"Маркерленген тізім",orderedList:"Нөмірленген тізім",subscript:"Астыңғы таңба",superscript:"Үстінгі таңба",hyperlink:"Гиперсілтеме",toggleFullscreen:"Толық экран режимі",quote:"Жазба",left:"Солға туралау",center:"Ортаға туралау",right:"Оңға туралау",justify:"Ені бойынша туралау",print:"Басып шығару",outdent:"Шегірісті азайту",indent:"Шегірісті үлкейту",removeFormat:"Пішімдеуді жою",formatting:"Пішімдеу",fontSize:"Қаріп өлшемі",align:"Туралау",hr:"Көлденең сызықты енгізу",undo:"Болдырмау",redo:"Қайталау",heading1:"Тақырып 1",heading2:"Тақырып 2",heading3:"Тақырып 3",heading4:"Тақырып 4",heading5:"Тақырып 5",heading6:"Тақырып 6",paragraph:"Параграф",code:"Код",size1:"Өте кішкентай",size2:"Кішкентай",size3:"Қалыпты",size4:"Орташа",size5:"Үлкен",size6:"Өте үлкен",size7:"Дәу",defaultFont:"Әдепкі қаріп",viewSource:"Бастапқы кодты қарау"},tree:{noNodes:"Түйіндер қолжетімді емес",noResults:"Сәйкестік табылмады"}}}); \ No newline at end of file diff --git a/dist/lang/lu.umd.min.js b/dist/lang/lu.umd.min.js new file mode 100644 index 00000000000..921172c6dc0 --- /dev/null +++ b/dist/lang/lu.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.lu=n())}(this,function(){"use strict";return{isoName:"lu",nativeName:"Kiluba",label:{clear:"Eidel",ok:"OK",cancel:"Oofbriechen",close:"Schléissen",set:"Setzen",select:"Auswielen",reset:"Zerécksetzen",remove:"Läschen",update:"Aktualiséieren",create:"Erstellen",search:"Sichen",filter:"Filter",refresh:"Aktualiséieren",expand:function(e){return e?'"'+e+'" erweideren':"Erweideren"},collapse:function(e){return e?'"'+e+'" zesummeklappen':"Zesummebroch"}},date:{days:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),daysShort:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),months:"Januar_Februar_März_Abrëll_Mäi_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan_Feb_Mär_Abr_Mäi_Jun_Jul_Aug_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"deeg"},table:{noData:"Keng Donnéen do",noResults:"Keng Anträg fonnt",loading:"Luedt...",selectedRecords:function(e){return 1===e?"1 ausgewielten Zeil.":(0===e?"Keng":e)+" Zeilen ausgewielt."},recordsPerPage:"Zeilen pro Säit:",allRows:"All",pagination:function(e,n,r){return e+"-"+n+" vun "+r},columns:"Kolonnen"},editor:{url:"URL",bold:"Fett",italic:"Kursiv",strikethrough:"Duerchgestrach",underline:"Ënnerstrach",unorderedList:"Ongeuerdnet Lëscht",orderedList:"Geuerdnet Lëscht",subscript:"déifgestallt",superscript:"héichgestallt",hyperlink:"Link",toggleFullscreen:"Vollbild ëmschalten",quote:"Zitat",left:"lenksbündeg",center:"zentréiert",right:"riedsbündeg",justify:"Ausriichten",print:"Drucken",outdent:"ausrëcken",indent:"anrëcken",removeFormat:"Formatéierung löschen",formatting:"Formatéiere",fontSize:"Schrëftgréisst",align:"Ausriichten",hr:"Horizontal Linn ansëtzen",undo:"Réckgängeg",redo:"Restauréieren",heading1:"Iwwerschrëft 1",heading2:"Iwwerschrëft 2",heading3:"Iwwerschrëft 3",heading4:"Iwwerschrëft 4",heading5:"Iwwerschrëft 5",heading6:"Iwwerschrëft 6",paragraph:"Paragraphe",code:"Code",size1:"Ganz kleng",size2:"E bëssi kleng",size3:"Normal",size4:"Grouss",size5:"Gréisser",size6:"Ganz grouss",size7:"Maximum",defaultFont:"Standard Schrëft",viewSource:"Umthombo wokubuka"},tree:{noNodes:"Keng Kniet verfügbar",noResults:"Keng passend Kniet fonnt"}}}); \ No newline at end of file diff --git a/dist/lang/lv.umd.min.js b/dist/lang/lv.umd.min.js new file mode 100644 index 00000000000..80002138ea8 --- /dev/null +++ b/dist/lang/lv.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((t="undefined"!=typeof globalThis?globalThis:t||self).Quasar=t.Quasar||{},t.Quasar.lang=t.Quasar.lang||{},t.Quasar.lang.lv=e())}(this,function(){"use strict";return{isoName:"lv",nativeName:"Latviešu valoda",label:{clear:"Attīrīt",ok:"OK",cancel:"Atcelt",close:"Aizvērt",set:"Iestatīt",select:"Izvēlēties",reset:"Atiestatīt",remove:"Noņemt",update:"Atjaunināt",create:"Izveidot",search:"Meklēt",filter:"Filtēt",refresh:"Atjaunot",expand:function(t){return t?'Paplašināt "'+t+'"':"Izvērst"},collapse:function(t){return t?'Sakļaut "'+t+'"':"Sakļaut"}},date:{days:"Svētdiena_Pirmdiena_Otrdiena_Trešdiena_Ceturtdiena_Piektdiena_Sestdiena".split("_"),daysShort:"Sv_Pi_Ot_Tr_Ce_Pi_Se".split("_"),months:"Janvāris_Februāris_Marts_Aprīlis_Maijs_Jūnijs_Jūlijs_Augusts_Septembris_Okrobris_Novembris_Decembris".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mai_Jūn_Jūl_Aug_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dienas"},table:{noData:"Nav datu",noResults:"Ieraksti nav atrasti",loading:"Atjaunojas...",selectedRecords:function(t){return 1===t?"1 izvēlēta rinda.":(0===t?"Nav":t)+" izvēlētas rindas."},recordsPerPage:"Rindas lapā:",allRows:"Visas",pagination:function(t,e,a){return t+"-"+e+" no "+a},columns:"Kolonnas"},editor:{url:"URL",bold:"Trekns",italic:"Kursīvs",strikethrough:"Nosvītrots",underline:"Apakšsvītra",unorderedList:"Marķētais saraksts",orderedList:"Numurētais saraksts",subscript:"Apakšraksts",superscript:"Augšraksts",hyperlink:"Saite",toggleFullscreen:"Pilnekrāna režīms",quote:"Citāts",left:"Izlīdzināt gar kreiso malu",center:"Centrēt",right:"Izlīdzināt gar labo malu",justify:"Izlīdzināt gar abām malām",print:"Drukāt",outdent:"Samazināt atkāpi",indent:"Palielināt atkāpi",removeFormat:"Noņemt formatējumu",formatting:"Formatēt",fontSize:"Fonta izmērs",align:"Izlīdzināt",hr:"Ievietot horizontālo līniju",undo:"Atsaukt",redo:"Atkārtot",heading1:"Virsraksts 1",heading2:"Virsraksts 2",heading3:"Virsraksts 3",heading4:"Virsraksts 4",heading5:"Virsraksts 5",heading6:"Virsraksts 6",paragraph:"Rindkopa",code:"Kods",size1:"Ļoti mazs",size2:"Mazs",size3:"Normāls",size4:"Vidējs",size5:"Liels",size6:"Ļoti liels",size7:"Maksimāls",defaultFont:"Fonts pēc noklusējuma",viewSource:"Skatīt avotu"},tree:{noNodes:"Nav pieejami mezgli",noResults:"Nav atrasti atbilstošie mezgli"}}}); \ No newline at end of file diff --git a/dist/lang/ml.umd.min.js b/dist/lang/ml.umd.min.js new file mode 100644 index 00000000000..64943a3bb38 --- /dev/null +++ b/dist/lang/ml.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ml=t())}(this,function(){"use strict";return{isoName:"ml",nativeName:"മലയാളം",label:{clear:"നീക്കുക",ok:"ശരി",cancel:"ഉപേക്ഷിക്കുക",close:"അടയ്ക്കുക",set:"സജ്ജമാക്കുക",select:"തിരഞ്ഞെടുക്കുക",reset:"പുനഃസജ്ജമാക്കുക",remove:"നീക്കംചെയ്യുക",update:"അപ്ഡേറ്റ്",create:"സൃഷ്ടിക്കുക",search:"തിരയുക",filter:"അരിക്കുക",refresh:"പുതുക്കുക",expand:function(e){return e?'"'+e+'" വികസിപ്പിക്കുക':"വികസിപ്പിക്കുക"},collapse:function(e){return e?'"'+e+'" ചുരുക്കുക':"ചുരുക്കുക"}},date:{days:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),daysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു_ഫെബ്രു_മാർ_ഏപ്രി_മേയ്_ജൂൺ_ജൂലൈ_ഓഗ_സെപ്_ഒക്_നവ_ഡിസ".split("_"),firstDayOfWeek:1,format24h:!1,pluralDay:"ദിവസങ്ങൾ"},table:{noData:"ഡാറ്റ ലഭ്യമല്ല",noResults:"പൊരുത്തമുള്ള റെക്കോർഡുകളൊന്നും കണ്ടെത്തിയില്ല",loading:"ലോഡ് ചെയ്യുന്നു...",selectedRecords:function(e){return 1===e?"ഒരു റെക്കോർഡ് തിരഞ്ഞെടുത്തു.":0===e?"റെക്കോര്ഡുകളൊന്നും തിരഞ്ഞെടുത്തിട്ടില്ല":e+" റെക്കോർഡുകൾ തിരഞ്ഞെടുത്തു."},recordsPerPage:"ഓരോ പേജിലും റെക്കോർഡുകൾ:",allRows:"എല്ലാം",pagination:function(e,t,n){return e+"-"+t+" മൊത്തം "+n+" ൽ നിന്നും"},columns:"നിരകൾ"},editor:{url:"യുആർഎൽ",bold:"ബോൾഡ്",italic:"ഇറ്റാലിക്",strikethrough:"മധ്യത്തിൽ വര",underline:"അടിവര",unorderedList:"ക്രമമില്ലാത്ത പട്ടിക",orderedList:"ക്രമമുള്ള ലിസ്റ്റ്",subscript:"സബ്സ്ക്രിപ്റ്റ്",superscript:"സൂപ്പർസ്ക്രിപ്റ്റ്",hyperlink:"ഹൈപ്പർലിങ്ക്",toggleFullscreen:"ഫുൾസ്ക്രീൻ ടോഗിൾ ചെയ്യുക",quote:"ഉദ്ധരിക്കുക",left:"ഇടത്തേക്ക്",center:"മധ്യഭാഗത്ത് ",right:"വലത്തേക്ക്",justify:"ജസ്റ്റിഫൈ",print:"പ്രിന്റ്",outdent:"ഇൻഡെൻറേഷൻ കുറയ്ക്കുക ",indent:"ഇൻഡെൻറേഷൻ വർദ്ധിപ്പിക്കുക",removeFormat:"ഫോർമാറ്റിംഗ് നീക്കം ചെയ്യുക",formatting:"ഫോർമാറ്റിംഗ്",fontSize:"അക്ഷര വലിപ്പം",align:"വിന്യസിക്കുക",hr:"തിരശ്ചീന റൂൾ ഇൻസേർട്ട് ചെയ്യുക",undo:"പൂർവാവസ്ഥയിലാക്കുക",redo:"വീണ്ടും ചെയ്യുക",heading1:"ഹെഡ്ഡർ 1",heading2:"ഹെഡ്ഡർ 2",heading3:"ഹെഡ്ഡർ 3",heading4:"ഹെഡ്ഡർ 4",heading5:"ഹെഡ്ഡർ 5",heading6:"ഹെഡ്ഡർ 6",paragraph:"ഖണ്ഡിക",code:"കോഡ്",size1:"വളരെ ചെറുത്",size2:"അൽപ്പം ചെറുത്",size3:"സാധാരണ",size4:"മീഡിയം-വലുത്",size5:"വലുത്",size6:"വളരെ വലുത്",size7:"പരമാവധി",defaultFont:"ഡിഫാൾട്ട് ഫോണ്ട്",viewSource:"ഉറവിടം കാണുക"},tree:{noNodes:"നോഡുകൾ ലഭ്യമല്ല",noResults:"പൊരുത്തപ്പെടുന്ന നോഡുകളൊന്നും കണ്ടെത്തിയില്ല"}}}); \ No newline at end of file diff --git a/dist/lang/mm.umd.min.js b/dist/lang/mm.umd.min.js new file mode 100644 index 00000000000..2a994e2c71a --- /dev/null +++ b/dist/lang/mm.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.mm=n())}(this,function(){"use strict";return{isoName:"mm",nativeName:"မြန်မာ(ဗမာ)",label:{clear:"ရှင်းလင်းမည်",ok:"အဆင်ပြေသည်",cancel:"ပယ်ဖျက်မည်",close:"ပိတ်မည်",set:"သတ်မှတ်မည်",select:"ရွေးမည်",reset:"ပြန်လည်သတ်မှတ်မည်",remove:"ပယ်ဖျက်မည်",update:"အသစ်ပြင်ဆင်မည်",create:"ဖန်တီးမည်",search:"ရှာမည်",filter:"စစ်ထုတ်မည်",refresh:"အသစ်ပြန်လုပ်မည်",expand:function(e){return e?'"'+e+'" ကိုချဲ့ထွင်ပါ။':"ချဲ့ထွင်ပါ။"},collapse:function(e){return e?'"'+e+'" ကို ခေါက်သိမ်းပါ':"ပြိုကျသည်။"}},date:{days:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),daysShort:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),firstDayOfWeek:1,format24h:!1,pluralDay:"ရက်"},table:{noData:"ဒေတာမရှိပါ",noResults:"ကိုက်ညီသောရလဒ်မရှိပါ",loading:"လုပ်ဆောင်နေသည်",selectedRecords:function(e){return e>0?e+" ကြောင်းရွေးချယ်ထားသည်":"ဘာမှ မရွေးချယ်ထားပါ"},recordsPerPage:"တစ်မျက်နှာ အကြောင်းရေတွက်",allRows:"အားလုံး",pagination:function(e,n,t){return e+"မှ"+n+"ထိအားလုံး"+t+"ရှိ"},columns:"ကော်လံ"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}}}); \ No newline at end of file diff --git a/dist/lang/ms.umd.min.js b/dist/lang/ms.umd.min.js new file mode 100644 index 00000000000..5c6a59c1118 --- /dev/null +++ b/dist/lang/ms.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang.ms=e())}(this,function(){"use strict";return{isoName:"ms",nativeName:"Bahasa Melayu",label:{clear:"Semula",ok:"OK",cancel:"Batal",close:"Tutup",set:"Set",select:"Pilih",reset:"Reset",remove:"Keluarkan",update:"Kemaskini",create:"Tambah",search:"Cari",filter:"Saring",refresh:"Muat semula",expand:function(a){return a?'Kembangkan "'+a+'"':"Kembangkan"},collapse:function(a){return a?'Runtuhkan "'+a+'"':"Runtuh"}},date:{days:"Ahad_Isnin_Selasa_Rabu_Khamis_Jummat_Sabtu".split("_"),daysShort:"Ahad_Isnin_Selasa_Rabu_Khamis_Jummat_Sabtu".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogos_Sep_Okt_Nov_Dis".split("_"),firstDayOfWeek:1,format24h:!1,pluralDay:"hari"},table:{noData:"Tiada data tersedia",noResults:"Tiada rekod sepadan yang dijumpai",loading:"Sedang dalam proses..",selectedRecords:function(a){return a>1?a+" rekod terpilih.":(0===a?"tiada":"1")+" rekod terpilih."},recordsPerPage:"Rekod per halaman:",allRows:"Semua",pagination:function(a,e,i){return a+"-"+e+" dari "+i},columns:"Kolum"},editor:{url:"URL",bold:"Tebal",italic:"Italik",strikethrough:"Garis Tengah",underline:"Garis Bawah",unorderedList:"Daftar Tidak Tersusun",orderedList:"Daftar Tersusun",subscript:"Subskrip",superscript:"Superskrip",hyperlink:"Hyperlink",toggleFullscreen:"Alihkan Layar Penuh",quote:"Petikan",left:"Selaras Kiri",center:"Selaras Tengah",right:"Selaras Kanan",justify:"Selaras Sisi",print:"Cetak",outdent:"Kurangkan Indentasi",indent:"Tambah indentasi",removeFormat:"Buang Format",formatting:"Format",fontSize:"Saiz Tulisan",align:"Selaras",hr:"Masukkan Aturan Horizontal",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraf",code:"Kod",size1:"Paling Kecil",size2:"Agak Kecil",size3:"Normal",size4:"Sederhana",size5:"Besar",size6:"Paling Besar",size7:"Maksimum",defaultFont:"Tulisan Asal",viewSource:"Lihat sumber"},tree:{noNodes:"Tiada nod tersedia",noResults:"Tiada nod yang sesuai dijumpai"}}}); \ No newline at end of file diff --git a/dist/lang/my.umd.min.js b/dist/lang/my.umd.min.js new file mode 100644 index 00000000000..d668e267afc --- /dev/null +++ b/dist/lang/my.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang.my=e())}(this,function(){"use strict";return{isoName:"my",nativeName:"Malaysia",label:{clear:"kosong",ok:"pasti",cancel:"Batal",close:"penutupan",set:"sediakan",select:"pilih",reset:"set semula",remove:"keluarkan",update:"memperbaharui",create:"cipta",search:"cari",filter:"penapis",refresh:"segarkan semula",expand:function(a){return a?'"'+a+'" ko hkyaae htwin par':"hkyaae htwin par"},collapse:function(a){return a?'"'+a+'" ko hkout saimpar':"pyaokya sai"}},date:{days:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),daysShort:"Aha_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogo_Sep_Okt_Nov_Dis".split("_"),headerTitle:function(a){return new Intl.DateTimeFormat("my",{weekday:"short",month:"short",day:"numeric"}).format(a)},firstDayOfWeek:0,format24h:!1,pluralDay:"langit"},table:{noData:"tiada data tersedia",noResults:"Tiada data yang sepadan ditemui",loading:"memuatkan...",selectedRecords:function(a){return"dipilih"+a+"baris"},recordsPerPage:"baris setiap muka surat:",allRows:"semua",pagination:function(a,e,n){return a+"-"+e+" / "+n},columns:"Senaraikan"},editor:{url:"URL",bold:"berani",italic:"condong",strikethrough:"tembus",underline:"gariskan",unorderedList:"senarai tidak teratur",orderedList:"senarai pesanan",subscript:"subskrip",superscript:"superskrip",hyperlink:"Hiperpautan",toggleFullscreen:"togol skrin penuh",quote:"tanda petikan",left:"Jajar ke kiri",center:"penjajaran tengah",right:"Sejajar ke kanan",justify:"wajar",print:"Cetak",outdent:"mengurangkan lekukan",indent:"meningkatkan inden",removeFormat:"gaya yang jelas",formatting:"format",fontSize:"Saiz huruf",align:"selaraskan",hr:"Masukkan garisan mendatar",undo:"membatalkan",redo:"buat semula",heading1:"Tajuk satu",heading2:"Tajuk dua",heading3:"Tajuk tiga",heading4:"Tajuk Empat",heading5:"Tajuk Lima",heading6:"Tajuk Enam",paragraph:"perenggan",code:"kod",size1:"sangat kecil",size2:"lebih kecil",size3:"biasa",size4:"sederhana hingga besar",size5:"besar",size6:"sangat besar",size7:"super besar",defaultFont:"fon lalai",viewSource:"menyemak data"},tree:{noNodes:"tiada nod tersedia",noResults:"Tiada nod yang sepadan ditemui"}}}); \ No newline at end of file diff --git a/dist/lang/nb-no.umd.min.js b/dist/lang/nb-no.umd.min.js new file mode 100644 index 00000000000..0b9e5836ee2 --- /dev/null +++ b/dist/lang/nb-no.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.nbNo=r())}(this,function(){"use strict";return{isoName:"nb-no",nativeName:"Norsk",label:{clear:"Tøm",ok:"OK",cancel:"Avbryt",close:"Lukk",set:"Bruk",select:"Velg",reset:"Nullstill",remove:"Slett",update:"Oppdater",create:"Lag",search:"Søk",filter:"Filter",refresh:"Oppdater",expand:function(e){return e?'Utvid "'+e+'"':"Utvide"},collapse:function(e){return e?'Skjul "'+e+'"':"Kollapse"}},date:{days:"Søndag_Mandag_Tirsdag_Onsdag_Torsdag_Fredag_Lørdag".split("_"),daysShort:"Søn_Man_Tir_Ons_Tor_Fre_Lør".split("_"),months:"Januar_Februar_Mars_April_Mai_Juni_Juli_August_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dager"},table:{noData:"Ingen data tilgjengelig",noResults:"Ingen treff i data funnet",loading:"Laster...",row:"rad",selectedRecords:function(e){return e>0?e+" row"+(1===e?"":"s")+" valgt.":"Ingen valgte rader."},recordsPerPage:"Rader pr side:",allRows:"Alle",pagination:function(e,r,t){return e+"-"+r+" av "+t},columns:"Kolonner"},editor:{url:"URL",bold:"Fet",italic:"Kursiv",strikethrough:"Gjennomstreking",underline:"Understrek",unorderedList:"Uordnet liste",orderedList:"Ordnet liste",subscript:"Senket skrift",superscript:"Hevet skrift",hyperlink:"Lenke",toggleFullscreen:"Av/på fullskjerm",quote:"Sitat",left:"Venstrestill",center:"Sentrer",right:"Høyrestill",justify:"Tilpasset bredde",print:"Skriv ut",outdent:"Midre innrykk",indent:"Større innrykk",removeFormat:"Fjern formatering",formatting:"Formatering",fontSize:"Fontstørrelse",align:"Stilling",hr:"Sett inn horisontal linje",undo:"Angre",redo:"Gjenta",heading1:"Overskrift 1",heading2:"Overskrift 2",heading3:"Overskrift 3",heading4:"Overskrift 4",heading5:"Overskrift 5",heading6:"Overskrift 6",paragraph:"Avsnitt",code:"Kode",size1:"Veldig liten",size2:"Liten",size3:"Normal",size4:"Medium-stor",size5:"Stor",size6:"Veldig stor",size7:"Maximum",defaultFont:"Normal font",viewSource:"Se kilde"},tree:{noNodes:"Ingen noder tilgjengelig",noResults:"Ingen treff i noder funnet"}}}); \ No newline at end of file diff --git a/dist/lang/nl.umd.min.js b/dist/lang/nl.umd.min.js new file mode 100644 index 00000000000..5cadbd93988 --- /dev/null +++ b/dist/lang/nl.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.nl=n())}(this,function(){"use strict";return{isoName:"nl",nativeName:"Nederlands",label:{clear:"Wis",ok:"OK",cancel:"Annuleer",close:"Sluit",set:"Pas toe",select:"Selecteer",reset:"Herinitialiseren",remove:"Verwijder",update:"Update",create:"Maak aan",search:"Zoek",filter:"Filter",refresh:"Ververs",expand:function(e){return e?'"'+e+'" uitklappen':"Uitklappen"},collapse:function(e){return e?'"'+e+'" inklappen':"Inklappen"}},date:{days:"Zondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrijdag_Zaterdag".split("_"),daysShort:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),months:"Januari_Februari_Maart_April_Mei_Juni_Juli_Augustus_September_Oktober_November_December".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dagen"},table:{noData:"Geen gegevens beschikbaar",noResults:"Geen records gevonden",loading:"Laden...",selectedRecords:function(e){return 1===e?"1 record geselecteerd.":(0===e?"Geen":e)+" geselecteerde records."},recordsPerPage:"Records per pagina:",allRows:"Alle",pagination:function(e,n,r){return e+"-"+n+" van "+r},columns:"Kolommen"},editor:{url:"URL",bold:"Vet",italic:"Cursief",strikethrough:"Doorstrepen",underline:"Onderstrepen",unorderedList:"Ongeordende lijst",orderedList:"Geordende lijst ",subscript:"Onderschrift",superscript:"Bovenschrift",hyperlink:"Hyperlink",toggleFullscreen:"Volledig scherm",quote:"Citaat",left:"Links uitlijnen",center:"Centreren",right:"Rechts uitlijnen",justify:"Uitvullen",print:"Afdrukken",outdent:"Minder inspringen",indent:"Meer inspringen",removeFormat:"Opmaak verwijderen",formatting:"Opmaak",fontSize:"Tekengrootte",align:"Uitlijnen",hr:"Horizontale lijn invoegen",undo:"Herstel",redo:"Opnieuw",heading1:"Kop 1",heading2:"Kop 2",heading3:"Kop 3",heading4:"Kop 4",heading5:"Kop 5",heading6:"Kop 6",paragraph:"Paragraaf",code:"Code",size1:"Heel klein",size2:"Klein",size3:"Normaal",size4:"Medium",size5:"Groot",size6:"Heel groot",size7:"Maximum",defaultFont:"Standaard lettertype",viewSource:"Bekijk bron"},tree:{noNodes:"Geen nodes beschikbaar",noResults:"Geen overeenkomstige nodes gevonden"}}}); \ No newline at end of file diff --git a/dist/lang/pl.umd.min.js b/dist/lang/pl.umd.min.js new file mode 100644 index 00000000000..2380c1db1df --- /dev/null +++ b/dist/lang/pl.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.pl=a())}(this,function(){"use strict";return{isoName:"pl",nativeName:"Polski",label:{clear:"Wyczyść",ok:"OK",cancel:"Anuluj",close:"Zamknij",set:"Ustaw",select:"Wybierz",reset:"Zresetuj",remove:"Usuń",update:"Zaktualizuj",create:"Utwórz",search:"Szukaj",filter:"Filtruj",refresh:"Odśwież",expand:function(e){return e?'Rozwiń "'+e+'"':"Zwiększać"},collapse:function(e){return e?'Zwiń "'+e+'"':"Upadek"}},date:{days:"Niedziela_Poniedziałek_Wtorek_Środa_Czwartek_Piątek_Sobota".split("_"),daysShort:"Nd_Pon_Wt_Śr_Czw_Ptk_Sob".split("_"),months:"Styczeń_Luty_Marzec_Kwiecień_Maj_Czerwiec_Lipiec_Sierpień_Wrzesień_Październik_Listopad_Grudzień".split("_"),monthsShort:"Sty_Lut_Mar_Kwi_Maj_Cze_Lip_Sie_Wrz_Paź_Lis_Gru".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dni"},table:{noData:"Brak dostępnych danych",noResults:"Nie znaleziono pasujących wpisów",loading:"Ładowanie...",selectedRecords:function(e){return e>1?e+" zaznaczony(ch) wiersz(y).":(0===e?"Brak":"1")+" zaznaczony wiersz."},recordsPerPage:"Wierszy na stronę:",allRows:"Wszystkie",pagination:function(e,a,i){return e+"-"+a+" z "+i},columns:"Kolumny"},editor:{url:"URL",bold:"Pogrubienie",italic:"Kursywa",strikethrough:"Przekreślenie",underline:"Podkreślenie",unorderedList:"Nieuporządkowana lista",orderedList:"Uporządkowana lista",subscript:"Indeks dolny",superscript:"Indeks górny",hyperlink:"Hiperłącze",toggleFullscreen:"Przełącz na tryb pełnoekranowy",quote:"Zacytuj",left:"Wyrównaj do lewej",center:"Wyrównaj do środka",right:"Wyrównaj do prawej",justify:"Wyjustuj",print:"Drukuj",outdent:"Zmniejsz wcięcie",indent:"Zwiększ wcięcie",removeFormat:"Usuń formatowanie",formatting:"Formatowanie",fontSize:"Rozmiar czcionki",align:"Wyrównanie",hr:"Wstaw poziomą linię",undo:"Cofnij",redo:"Przywróć",heading1:"Nagłówek 1",heading2:"Nagłówek 2",heading3:"Nagłówek 3",heading4:"Nagłówek 4",heading5:"Nagłówek 5",heading6:"Nagłówek 6",paragraph:"Paragraf",code:"Kod",size1:"Bardzo mała",size2:"Mała",size3:"Normalna",size4:"Średnio-duża",size5:"Duża",size6:"Bardzo duża",size7:"Maksymalna",defaultFont:"Domyślna czcionka",viewSource:"Pokaż źródło"},tree:{noNodes:"Brak dostępnych gałęzi",noResults:"Nie znaleziono pasujących gałęzi"}}}); \ No newline at end of file diff --git a/dist/lang/pt-br.umd.min.js b/dist/lang/pt-br.umd.min.js new file mode 100644 index 00000000000..76495511aac --- /dev/null +++ b/dist/lang/pt-br.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ptBr=o())}(this,function(){"use strict";return{isoName:"pt-br",nativeName:"Português (BR)",label:{clear:"Limpar",ok:"OK",cancel:"Cancelar",close:"Fechar",set:"Escolher",select:"Selecionar",reset:"Redefinir",remove:"Remover",update:"Atualizar",create:"Criar",search:"Buscar",filter:"Filtrar",refresh:"Recarregar",expand:function(e){return e?'Expandir "'+e+'"':"Expandir"},collapse:function(e){return e?'Recolher "'+e+'"':"Colapso"}},date:{days:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),daysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),firstDayOfWeek:0,format24h:!0,pluralDay:"dias"},table:{noData:"Sem dados disponíveis",noResults:"Nenhum dado correspondente encontrado",loading:"Carregando...",selectedRecords:function(e){return e>0?e+" registro"+(1===e?" selecionado":"s selecionados")+".":"Nenhum registro selecionado."},recordsPerPage:"Registros por página:",allRows:"Todos",pagination:function(e,o,a){return e+"-"+o+" de "+a},columns:"Colunas"},editor:{url:"URL",bold:"Negrito",italic:"Itálico",strikethrough:"Riscado",underline:"Sublinhado",unorderedList:"Lista não-ordenada",orderedList:"Lista ordenada",subscript:"Subscrito",superscript:"Sobrescrito",hyperlink:"Hyperlink",toggleFullscreen:"Tela cheia",quote:"Citação",left:"Alinhado à esquerda",center:"Alinhado ao centro",right:"Alinhado à direita",justify:"Justificado",print:"Imprimir",outdent:"Diminuir indentação",indent:"Aumentar indentação",removeFormat:"Remover formatação",formatting:"Formatação",fontSize:"Tamanho de fonte",align:"Alinhar",hr:"Inserir divisória horizontal",undo:"Desfazer",redo:"Refazer",heading1:"Cabeçalho 1",heading2:"Cabeçalho 2",heading3:"Cabeçalho 3",heading4:"Cabeçalho 4",heading5:"Cabeçalho 5",heading6:"Cabeçalho 6",paragraph:"Parágrafo",code:"Código",size1:"Muito pequeno",size2:"Pequeno",size3:"Normal",size4:"Médio",size5:"Grande",size6:"Enorme",size7:"Máximo",defaultFont:"Fonte padrão",viewSource:"Exibir fonte"},tree:{noNodes:"Sem nós disponíveis",noResults:"Nenhum nó correspondente encontrado"}}}); \ No newline at end of file diff --git a/dist/lang/pt.umd.min.js b/dist/lang/pt.umd.min.js new file mode 100644 index 00000000000..055783d1286 --- /dev/null +++ b/dist/lang/pt.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.pt=a())}(this,function(){"use strict";return{isoName:"pt",nativeName:"Português",label:{clear:"Limpar",ok:"OK",cancel:"Cancelar",close:"Fechar",set:"Marcar",select:"Escolher",reset:"Limpar",remove:"Remover",update:"Atualizar",create:"Criar",search:"Procurar",filter:"Filtrar",refresh:"Recarregar",expand:function(e){return e?'Expandir "'+e+'"':"Expandir"},collapse:function(e){return e?'Recolher "'+e+'"':"Colapso"}},date:{days:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),daysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dias"},table:{noData:"Sem dados disponíveis",noResults:"Não foi encontrado nenhum resultado",loading:"A carregar...",selectedRecords:function(e){return e>0?e+" linha"+(1===e?" selecionada":"s selecionadas")+".":"Nenhuma linha selecionada."},recordsPerPage:"Linhas por página:",allRows:"Todas",pagination:function(e,a,o){return e+"-"+a+" de "+o},columns:"Colunas"},editor:{url:"URL",bold:"Negrito",italic:"Itálico",strikethrough:"Rasurado",underline:"Sublinhado",unorderedList:"Lista não-ordenada",orderedList:"Lista ordenada",subscript:"Subscrito",superscript:"Sobrescrito",hyperlink:"Hyperlink",toggleFullscreen:"Maximizar",quote:"Citação",left:"Alinhado à esquerda",center:"Alinhado ao centro",right:"Alinhado à direita",justify:"Justificado",print:"Imprimir",outdent:"Diminuir indentação",indent:"Aumentar indentação",removeFormat:"Remover formatação",formatting:"Formatação",fontSize:"Tamanho do tipo de letra",align:"Alinhar",hr:"Inserir linha horizontal",undo:"Desfazer",redo:"Refazer",heading1:"Cabeçalho 1",heading2:"Cabeçalho 2",heading3:"Cabeçalho 3",heading4:"Cabeçalho 4",heading5:"Cabeçalho 5",heading6:"Cabeçalho 6",paragraph:"Parágrafo",code:"Código",size1:"Muito pequeno",size2:"Pequeno",size3:"Normal",size4:"Médio",size5:"Grande",size6:"Enorme",size7:"Máximo",defaultFont:"Tipo de letra padrão",viewSource:"Exibir fonte"},tree:{noNodes:"Sem nós disponíveis",noResults:"Nenhum resultado encontrado"}}}); \ No newline at end of file diff --git a/dist/lang/ro.umd.min.js b/dist/lang/ro.umd.min.js new file mode 100644 index 00000000000..6a7a71486cd --- /dev/null +++ b/dist/lang/ro.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ro=i())}(this,function(){"use strict";return{isoName:"ro",nativeName:"Română",label:{clear:"Golește",ok:"OK",cancel:"Anulează",close:"Închide",set:"Setează",select:"Alege",reset:"Resetează",remove:"Elimină",update:"Actualizează",create:"Creează",search:"Caută",filter:"Filtrează",refresh:"Actualizează",expand:function(e){return e?'Deschideți "'+e+'"':"Deschide"},collapse:function(e){return e?'Închide "'+e+'"':"Închide"}},date:{days:"Duminică_Luni_Marți_Miercuri_Joi_Vineri_Sâmbătă".split("_"),daysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),months:"Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie".split("_"),monthsShort:"Ian_Feb_Mar_Apr_Mai_Iun_Iul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"zile"},table:{noData:"Nu sunt date disponibile",noResults:"Nu am găsit înregistrări care să corespundă",loading:"Se încarcă...",selectedRecords:function(e){return e>1?e+" înregistrări selectate.":(0===e?"Nici o":"1")+" înregistrare selectată."},recordsPerPage:"Înregistrări pe pagină:",allRows:"Toate",pagination:function(e,i,a){return e+"-"+i+" din "+a},columns:"Coloane"},editor:{url:"URL",bold:"Îngroșat",italic:"Înclinat",strikethrough:"Tăiat",underline:"Subliniat",unorderedList:"Listă neordonată",orderedList:"Listă ordonată",subscript:"Dedesubt",superscript:"Deasupra",hyperlink:"Hyperlink",toggleFullscreen:"Comută ecran complet",quote:"Citat",left:"Aliniere la stânga",center:"Aliniere la centru",right:"Aliniere la dreapta",justify:"Aliniere totală",print:"Tipărește",outdent:"Scade spațierea",indent:"Crește spațierea",removeFormat:"Îndepărtează formatările",formatting:"Formatare",fontSize:"Mărime font",align:"Aliniază",hr:"Adaugă linie orizontală",undo:"Schimbă inapoi",redo:"Refă",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraf",code:"Cod",size1:"Foarte mic",size2:"Mic",size3:"Normal",size4:"Mediu-mare",size5:"Big",size6:"Foarte mare",size7:"Maxim",defaultFont:"Font implicit",viewSource:"Vizualizare sursă"},tree:{noNodes:"Nu sunt date disponibile",noResults:"Nu am găsit noduri care să corespundă"}}}); \ No newline at end of file diff --git a/dist/lang/ru.umd.min.js b/dist/lang/ru.umd.min.js new file mode 100644 index 00000000000..7a044785047 --- /dev/null +++ b/dist/lang/ru.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ru=t())}(this,function(){"use strict";return{isoName:"ru",nativeName:"русский",label:{clear:"Очистить",ok:"OK",cancel:"Отмена",close:"Закрыть",set:"Установить",select:"Выбрать",reset:"Сбросить",remove:"Удалить",update:"Обновить",create:"Создать",search:"Поиск",filter:"Фильтр",refresh:"Обновить",expand:function(e){return e?'Расширьте "'+e+'"':"Расширять"},collapse:function(e){return e?'Свернуть "'+e+'"':"Крах"}},date:{days:"Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота".split("_"),daysShort:"Вс_Пн_Вт_Ср_Чт_Пт_Сб".split("_"),months:"Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь".split("_"),monthsShort:"Янв_Фев_Мар_Апр_Май_Июн_Июл_Авг_Сен_Окт_Ноя_Дек".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"дней"},table:{noData:"Нет данных",noResults:"Совпадений не найдено",loading:"Загрузка...",selectedRecords:function(e){return e>0?e+" "+["строка выбрана","строки выбраны","строк выбрано"][(t=e)%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2]+".":"Ни одна строка не выбрана.";var t},recordsPerPage:"Строк на странице:",allRows:"Все",pagination:function(e,t,r){return e+"-"+t+" из "+r},columns:"Колонки"},editor:{url:"URL",bold:"Полужирный",italic:"Курсив",strikethrough:"Зачеркнутый",underline:"Подчеркнутый",unorderedList:"Маркированный список",orderedList:"Нумерованный список",subscript:"Подстрочный",superscript:"Надстрочный",hyperlink:"Гиперссылка",toggleFullscreen:"Полноэкранный режим",quote:"Цитата",left:"Выравнивание по левому краю",center:"Выравнивание по центру",right:"Выравнивание по правому краю",justify:"Выравнивание по ширине",print:"Печать",outdent:"Уменьшить отступ",indent:"Увеличить отступ",removeFormat:"Удалить форматирование",formatting:"Форматирование",fontSize:"Размер шрифта",align:"Выравнивание",hr:"Вставить горизонтальную линию",undo:"Отменить",redo:"Повторить",heading1:"Заголовок 1",heading2:"Заголовок 2",heading3:"Заголовок 3",heading4:"Заголовок 4",heading5:"Заголовок 5",heading6:"Заголовок 6",paragraph:"Параграф",code:"Код",size1:"Очень маленький",size2:"Маленький",size3:"Нормальный",size4:"Средний",size5:"Большой",size6:"Очень большой",size7:"Огромный",defaultFont:"Шрифт по умолчанию",viewSource:"Просмотреть исходный код"},tree:{noNodes:"Нет доступных узлов",noResults:"Совпадений не найдено"}}}); \ No newline at end of file diff --git a/dist/lang/sk.umd.min.js b/dist/lang/sk.umd.min.js new file mode 100644 index 00000000000..7d61ebb3f3f --- /dev/null +++ b/dist/lang/sk.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.sk=a())}(this,function(){"use strict";return{isoName:"sk",nativeName:"Slovenčina",label:{clear:"Vymazať",ok:"OK",cancel:"Zrušiť",close:"Zavrieť",set:"Nastaviť",select:"Vybrať",reset:"Resetovať",remove:"Odstrániť",update:"Upraviť",create:"Vytvoriť",search:"Hľadať",filter:"Filtrovať",refresh:"Obnoviť",expand:function(e){return e?'Rozbaliť "'+e+'"':"Rozbaliť"},collapse:function(e){return e?'Zbaliť "'+e+'"':"Kolaps"}},date:{days:"Nedeľa_Pondelok_Utorok_Streda_Štvrtok_Piatok_Sobota".split("_"),daysShort:"Ned_Pon_Uto_Str_Štv_Pia_Sob".split("_"),months:"Január_Február_Marec_Apríl_Máj_Jún_Júl_August_September_Október_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Máj_Jún_Júl_Aug_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dní"},table:{noData:"Nie sú dostupné údaje",noResults:"Neboli nájdené vyhovujúce záznamy",loading:"Načítavam...",selectedRecords:function(e){return e>0?e+" "+(1===e?"riadok vybratý":e<5?"riadky vybraté":"riadkov vybratých")+".":"Žiadne vybraté riadky."},recordsPerPage:"Riadkov na stránku:",allRows:"Všetky",pagination:function(e,a,o){return e+"-"+a+" z "+o},columns:"Stĺpce"},editor:{url:"URL",bold:"Tučné",italic:"Kurzíva",strikethrough:"Prečiarknuté",underline:"Podčiarknuté",unorderedList:"Odrážky",orderedList:"Číslovanie",subscript:"Dolný index",superscript:"Horný index",hyperlink:"Odkaz",toggleFullscreen:"Prepnúť na celú obrazovku",quote:"Citovať",left:"Zarovnať doľava",center:"Centrovať",right:"Zarovnať doprava",justify:"Zarovnať podľa okrajov",print:"Tlačiť",outdent:"Zmenšiť odsadenie",indent:"Zväčšiť odsadenie",removeFormat:"Odstrániť formátovanie",formatting:"Formátovanie",fontSize:"Veľkosť písma",align:"Zarovnať",hr:"Vložiť horizontálny oddelovač",undo:"Späť",redo:"Znova",heading1:"Hlavička 1",heading2:"Hlavička 2",heading3:"Hlavička 3",heading4:"Hlavička 4",heading5:"Hlavička 5",heading6:"Hlavička 6",paragraph:"Odsek",code:"Kód",size1:"Veľmi malé",size2:"Malé",size3:"Normálne",size4:"Stredne veľké",size5:"Veľké",size6:"Veľmi veľké",size7:"Maximálne",defaultFont:"Predvolené písmo",viewSource:"Zdroj pohladu"},tree:{noNodes:"Nie sú dostupné vetvy",noResults:"Neboli nájdené vyhovujúce vetvy"}}}); \ No newline at end of file diff --git a/dist/lang/sl.umd.min.js b/dist/lang/sl.umd.min.js new file mode 100644 index 00000000000..b238a4e9b93 --- /dev/null +++ b/dist/lang/sl.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.sl=a())}(this,function(){"use strict";return{isoName:"sl",nativeName:"Slovenski Jezik",label:{clear:"Počisti",ok:"Vredu",cancel:"Prekliči",close:"Zapri",set:"Postavi",select:"Izberi",reset:"Obnovi",remove:"Odstrani",update:"Posodobi",create:"Ustvari",search:"Išči",filter:"Filtriraj",refresh:"Ponovno naloži",expand:function(e){return e?'Razširi "'+e+'"':"Razširi"},collapse:function(e){return e?'Strni "'+e+'"':"Strni"}},date:{days:"Nedelja_Ponedeljek_Torek_Sreda_Četrtek_Petek_Sobota".split("_"),daysShort:"Ned_Pon_Tor_Sre_Čet_Pet_Sob".split("_"),months:"Januar_Februar_Marec_April_Maj_Junij_Julij_Avgust_September_Oktober_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Maj_Jun_Jul_Avg_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dni"},table:{noData:"Ni dosegljivih podatkov",noResults:"Ne najdem ustreznic",loading:"Nalagam...",selectedRecords:function(e){return 1===e?"1 izbrana vrstica.":2===e?"2 izbrani vrstici.":(0===e?"Ni":e)+" izbranih vrstic."},recordsPerPage:"Vrstic na stran:",allRows:"Vse",pagination:function(e,a,i){return e+"-"+a+" od "+i},columns:"Stolpci"},editor:{url:"URL",bold:"Krepko",italic:"Ležeče",strikethrough:"Prečrtano",underline:"Podčrtaj",unorderedList:"Neoštevilčen seznam",orderedList:"Oštevilčen seznam",subscript:"Podpisano",superscript:"Nadpisano",hyperlink:"Hiper povezava",toggleFullscreen:"Preklopi celoten zaslon",quote:"Citat",left:"Poravnaj levo",center:"Poravnaj na sredino",right:"Poravnaj desno",justify:"Obojestranska poravnava",print:"Natisni",outdent:"Zmanjšaj zamik",indent:"Povečaj zamik",removeFormat:"Odstrani formatiranje",formatting:"Formatiranje",fontSize:"Velikost pisave",align:"Poravnava",hr:"Vstavi horizontalno pravilo",undo:"Razveljavi",redo:"Uveljavi",heading1:"Naslov 1",heading2:"Naslov 2",heading3:"Naslov 3",heading4:"Naslov 4",heading5:"Naslov 5",heading6:"Naslov 6",paragraph:"Odstavek",code:"Koda",size1:"Najmanjše",size2:"Manjše",size3:"Običajna velikost",size4:"Srednje veliko",size5:"Veliko",size6:"Večje",size7:"Največje",defaultFont:"Privzeta pisava",viewSource:"Prikaži vir"},tree:{noNodes:"Ni dosegljivih vozlišč",noResults:"Ne najdem ustreznih vozlišč"}}}); \ No newline at end of file diff --git a/dist/lang/sm.umd.min.js b/dist/lang/sm.umd.min.js new file mode 100644 index 00000000000..c345839f784 --- /dev/null +++ b/dist/lang/sm.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang.sm=i())}(this,function(){"use strict";return{isoName:"sm",nativeName:"Fa'asāmoa",label:{clear:"Kilia",ok:"'Oukei",cancel:"Fa'alēaogāina",close:"Tapuni",set:"Seti",select:"Filifili",reset:"Toe seti",remove:"'Ave'ese",update:"Fa'afou",create:"Fatu",search:"Sā'ili",filter:"Fa'amamā",refresh:"Fa'afou",expand:function(a){return a?"Fa'alautele \""+a+'"':"Faalautele"},collapse:function(a){return a?"Pa'u \""+a+'"':"Pa'u"}},date:{days:"Aso Sā_Aso Gafua_Aso Lua_Aso Lulu_Aso Tofi_Aso Faraile_Aso To'onai".split("_"),daysShort:"Sā_Gaf_Lua_Lul_Tof_Far_Too".split("_"),months:"Ianuari_Fepuari_Mati_'Aperila_Mē_Iuni_Iulai_'Aokuso_Sētema_'Oketopa_Nōvema_Tēsema".split("_"),monthsShort:"Ian_Fep_Mat_Ape_Mē_Iun_Iul_Auk_Sēt_Oke_Nōv_Tēs".split("_"),firstDayOfWeek:1,format24h:!1,pluralDay:"aso"},table:{noData:"Lēai ni fa'amatalaga o maua",noResults:"Lēai ni fa'amaumauga na maua",loading:"'Āmatalia...",selectedRecords:function(a){return 1===a?"1 le laina 'ua filifilia.":(0===a?"Lēai ni":a)+" laina 'ua filifilia."},recordsPerPage:"Laina 'i le ītūlau:",allRows:"Laina 'uma",pagination:function(a,i,e){return a+"-"+i+" o "+e},columns:"Poutū"},editor:{url:"Tuātusi initaneti",bold:"Fa'aolaola",italic:"Fa'api'o",strikethrough:"Kolosi",underline:"Vase lalo",unorderedList:"Lisi 'e fe'i fa'atulagaina",orderedList:"Lisi 'ua fa'atulagaina",subscript:"Fa'anini'i i lalo",superscript:"Fa'anini'i i luga",hyperlink:"So'otaga initaneti",toggleFullscreen:"Fa'atelē ma fa'alititi le va'ai",quote:"Saunoaga",left:"Ōgatasi agavale",center:"Ōgatasi 'ogātotonu",right:"Ōgatasi taumatau",justify:"Ōgatasi lautele",print:"Lolomi",outdent:"Fa'alaititi le va",indent:"Fa'atelē le va",removeFormat:"'Ave'ese le fa'atulagaga",formatting:"Fa'atulagaga",fontSize:"Telē o le mata'itusi",align:"Ōgatasi",hr:"Fa'aopoopo se laina",undo:"Toe 'ave'ese",redo:"Toe fai",heading1:"Ulutala 1",heading2:"Ulutala 2",heading3:"Ulutala 3",heading4:"Ulutala 4",heading5:"Ulutala 5",heading6:"Ulutala 6",paragraph:"Palakalafa",code:"Fa'ailo fa'akomepiuta",size1:"Matuā laitiiti",size2:"Fa'alaititi",size3:"Tūlaga masani",size4:"Lāpo'a feololo",size5:"Lāpo'a",size6:"Lāpo'a atu",size7:"Pito i lāpo'a",defaultFont:"Foliga fou ole mata'itusi",viewSource:"Va'ai 'ile tusitusiga fa'akomepiuta"},tree:{noNodes:"Lēai ni vāega o maua",noResults:"Lēai ni vāega na maua"}}}); \ No newline at end of file diff --git a/dist/lang/sr.umd.min.js b/dist/lang/sr.umd.min.js new file mode 100644 index 00000000000..7988bf74e12 --- /dev/null +++ b/dist/lang/sr.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.sr=a())}(this,function(){"use strict";return{isoName:"sr",nativeName:"srpski jezik",label:{clear:"Obriši",ok:"OK",cancel:"Odustani",close:"Zatvori",set:"Postavi",select:"Izaberi",reset:"Poništi",remove:"Ukloni",update:"Ažuriraj",create:"Dodaj",search:"Traži",filter:"Filter",refresh:"Osveži",expand:function(e){return e?'Proširi "'+e+'"':"Proširiti"},collapse:function(e){return e?'Skupi "'+e+'"':"Skupiti"}},date:{days:"Nedelja_Ponedeljak_Utorak_Sreda_Četvrtak_Petak_Subota".split("_"),daysShort:"Ned_Pon_Uto_Sre_Čet_Pet_Sub".split("_"),months:"Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Maj_Jun_Jul_Avg_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dana"},table:{noData:"Nema podataka",noResults:"Nema odgovarajućih zapisa",loading:"Učitavanje...",selectedRecords:function(e){return e>1?e+" izabranih redova.":(0===e?"Nema":"1")+" izabranih redova."},recordsPerPage:"Redova po stranici:",allRows:"Sve",pagination:function(e,a,i){return e+"-"+a+" od "+i},columns:"Kolone"},editor:{url:"URL",bold:"Podebljano",italic:"Nakošeno",strikethrough:"Precrtano",underline:"Podcrtano",unorderedList:"Označena lista",orderedList:"Numerisana lista",subscript:"Potpisano",superscript:"Natpisano",hyperlink:"Hiperlink",toggleFullscreen:"Ceo ekran",quote:"Citat",left:"Poravnati ulevo",center:"Centrirati",right:"Poravnati udesno",justify:"Poravnati obostrano",print:"Štampa",outdent:"Smanjiti uvlačenje",indent:"Povećati uvlačenje",removeFormat:"Ukloniti formatiranje",formatting:"Formatirati",fontSize:"Veličina slova",align:"Poravnati",hr:"Ubaciti horizontalnu liniju",undo:"Poništiti",redo:"Vratiti",heading1:"Naslov 1",heading2:"Naslov 2",heading3:"Naslov 3",heading4:"Naslov 4",heading5:"Naslov 5",heading6:"Naslov 6",paragraph:"Paragraf",code:"Kod",size1:"Najmanje",size2:"Manje",size3:"Normalno",size4:"Srednje Veliko",size5:"Veliko",size6:"Veće",size7:"Najveće",defaultFont:"Podrazumevani font",viewSource:"Pogledaj izvor"},tree:{noNodes:"Nema nijednog čvora",noResults:"Nema odgovarajućih čvorova"}}}); \ No newline at end of file diff --git a/dist/lang/sv.umd.min.js b/dist/lang/sv.umd.min.js new file mode 100644 index 00000000000..7893c8ad9e0 --- /dev/null +++ b/dist/lang/sv.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.sv=r())}(this,function(){"use strict";return{isoName:"sv",nativeName:"Svenska",label:{clear:"Rensa",ok:"OK",cancel:"Avbryt",close:"Stäng",set:"Sätt",select:"Välj",reset:"Nollställ",remove:"Ta bort",update:"Uppdatera",create:"Skapa",search:"Sök",filter:"Filtrera",refresh:"Uppdatera",expand:function(e){return e?'Utöka "'+e+'"':"Bygga ut"},collapse:function(e){return e?'Komprimera "'+e+'"':"Kollaps"}},date:{days:"Söndag_Måndag_Tisdag_Onsdag_Torsdag_Fredag_Lördag".split("_"),daysShort:"Sön_Mån_Tis_Ons_Tor_Fre_Lör".split("_"),months:"Januari_Februari_Mars_April_Maj_Juni_Juli_Augusti_September_Oktober_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Maj_Jun_Jul_Aug_Sep_Okt_Nov_Dec".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"dagar"},table:{noData:"Ingen data tillgänglig",noResults:"Inget resultat matchar",loading:"Laddar...",selectedRecords:function(e){return 1===e?"1 vald rad.":(0===e?"Inga":e)+" valda rader."},recordsPerPage:"Rader per sida:",allRows:"Alla",pagination:function(e,r,a){return e+"-"+r+" av "+a},columns:"Kolumner"},editor:{url:"URL",bold:"Fet",italic:"Kursiv",strikethrough:"Genomstruken",underline:"Understruken",unorderedList:"Punktlista",orderedList:"Numrerad lista",subscript:"Nedsänkt",superscript:"Upphöjt",hyperlink:"Länk",toggleFullscreen:"Växla helskärm",quote:"Citat",left:"Vänsterjustera",center:"Centrera",right:"Högerjustera",justify:"Justera",print:"Skriv ut",outdent:"Minska indrag",indent:"Öka indrag",removeFormat:"Ta bort formatering",formatting:"Formatering",fontSize:"Teckenstorlek",align:"Justera",hr:"Infoga vågrät linje",undo:"Ångra",redo:"Gör om",heading1:"Rubrik 1",heading2:"Rubrik 2",heading3:"Rubrik 3",heading4:"Rubrik 4",heading5:"Rubrik 5",heading6:"Rubrik 6",paragraph:"Stycke",code:"Kod",size1:"Väldigt liten",size2:"Liten",size3:"Normal",size4:"Större än normal",size5:"Stor",size6:"Väldigt stor",size7:"Maximalt stor",defaultFont:"Standardteckensnitt",viewSource:"Visa källa"},tree:{noNodes:"Inga noder tillgängliga",noResults:"Inga noder matchar"}}}); \ No newline at end of file diff --git a/dist/lang/ta.umd.min.js b/dist/lang/ta.umd.min.js new file mode 100644 index 00000000000..c3f5384c516 --- /dev/null +++ b/dist/lang/ta.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ta=t())}(this,function(){"use strict";return{isoName:"ta",nativeName:"தமிழ்",label:{clear:"அகற்று",ok:"சரி",cancel:"ரத்து",close:"மூடு",set:"அமை",select:"தேர்ந்தெடு",reset:"மீட்டமை",remove:"நீக்கு",update:"மேம்படுத்து",create:"உருவாக்கு",search:"தேடு",filter:"வடிகட்டு",refresh:"புதுப்பி",expand:function(e){return e?'"'+e+'" ஐ விரிவாக்கு':"விரிவாக்கு"},collapse:function(e){return e?'"'+e+'" ஐச் சுருக்கு':"சுருக்கு"}},date:{days:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),daysShort:"ஞாயி_திங்_செவ்_புத_வியா_வெள்_சனி".split("_"),months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜன_பிப்_மார்_ஏப்_மே_ஜூன்_ஜூலை_ஆக_செப்_அக்_நவ_டிச".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"நாட்கள்"},table:{noData:"தரவு எதுவும் கிடைக்கவில்லை",noResults:"பொருந்தும் பதிவுகள் எதுவும் கிடைக்கவில்லை",loading:"ஏற்றுகிறது...",selectedRecords:function(e){return 1===e?"1 பதிவு தேர்ந்தெடுக்கப்பட்டது.":(0===e?"0":e)+" பதிவு தேர்ந்தெடுக்கப்பட்டது."},recordsPerPage:"ஒரு பக்கத்திற்கு பதிவுகள்:",allRows:"அனைத்தும்",pagination:function(e,t,n){return e+"-"+t+" மொத்தம் "+n},columns:"பத்திகள்"},editor:{url:"URL",bold:"தடித்த",italic:"சாய்ந்த",strikethrough:"குறுக்குக்கோடு",underline:"அடிக்கோடு",unorderedList:"வரிசையற்ற பட்டியல்",orderedList:"வரிசையுள்ள பட்டியல்",subscript:"கீழ்க்குறியீடு",superscript:"மேல்குறியீடு",hyperlink:"மிகையிணைப்பு",toggleFullscreen:"முழுத்திரை மாற்றம்",quote:"மேற்கோள்",left:"இடது சீரமை",center:"மைய சீரமை",right:"வலது சீரமை",justify:"உள்ளடக்க சீரமை",print:"அச்சு",outdent:"உள்தள்ளலைக் குறைக்கவும்",indent:"உள்தள்ளலை அதிகரிக்கவும்",removeFormat:"வடிவமைப்பை அகற்று",formatting:"வடிவமைப்பு",fontSize:"எழுத்துரு அளவு",align:"சீரமை",hr:"படுக்கைவாட்டு கொடு",undo:"செயல்தவிர்",redo:"மீண்டும் செய்",heading1:"தலைப்பு 1",heading2:"தலைப்பு 2",heading3:"தலைப்பு 3",heading4:"தலைப்பு 4",heading5:"தலைப்பு 5",heading6:"தலைப்பு 6",paragraph:"பத்தி",code:"குறியீடு",size1:"மிகவும் சிறியது",size2:"சிறியது",size3:"இயல்பான",size4:"நடுத்தர பெரியது",size5:"பெரியது",size6:"மிகவும் பெரியது",size7:"அதிகபட்ச",defaultFont:"இயல்புநிலை எழுத்துரு",viewSource:"மூலத்தை பார்"},tree:{noNodes:"முனைகள் எதுவும் கிடைக்கவில்லை",noResults:"பொருந்தும் முனைகள் எதுவும் கிடைக்கவில்லை"}}}); \ No newline at end of file diff --git a/dist/lang/th.umd.min.js b/dist/lang/th.umd.min.js new file mode 100644 index 00000000000..13a1ae84083 --- /dev/null +++ b/dist/lang/th.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.th=t())}(this,function(){"use strict";return{isoName:"th",nativeName:"ไทย",label:{clear:"ล้าง",ok:"ตกลง",cancel:"ยกเลิก",close:"ปิด",set:"ตั้งค่า",select:"เลือก",reset:"ตั้งใหม่",remove:"ลบ",update:"ปรับปรุง",create:"สร้าง",search:"ค้นหา",filter:"กรอง",refresh:"รีเฟรช",expand:function(e){return e?'ขยาย "'+e+'"':"ขยาย"},collapse:function(e){return e?'ยุบ "'+e+'"':"ทรุด"}},date:{days:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),daysShort:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"วัน"},table:{noData:"ไม่มีข้อมูล",noResults:"ไม่มีผลลัพธ์",loading:"กำลังโหลด...",selectedRecords:function(e){return e>0?"เลือกทั้งหมด "+e+" แถว":"ไม่มีแถวที่ถูกเลือก"},recordsPerPage:"แถวต่อหน้า:",allRows:"แถวทั้งหมด",pagination:function(e,t,n){return e+"-"+t+" of "+n},columns:"คอลัมน์"},editor:{url:"URL",bold:"ตัวหนา",italic:"ตัวเอียง",strikethrough:"เส้นคร่อม",underline:"เส้นใต้",unorderedList:"รายการ",orderedList:"ลำดับรายการ",subscript:"ตัวห้อย",superscript:"ตัวยก",hyperlink:"ไฮเปอร์ลิงค์",toggleFullscreen:"สลับเต็มจอ",quote:"อ้างอิง",left:"ชิดซ้าย",center:"แนวกลาง",right:"ชิดขวา",justify:"ชิดขอบ",print:"พิมพ์",outdent:"ลดย่อหน้า",indent:"เพิ่มย่อหน้า",removeFormat:"ล้างรูปแบบ",formatting:"จัดรูปแบบ",fontSize:"ขนาดอักษร",align:"แนว",hr:"เพิ่มเส้นขั้นบรรทัด",undo:"ยกเลิก",redo:"ทำซ้ำ",heading1:"หัวข้อ 1",heading2:"หัวข้อ 2",heading3:"หัวข้อ 3",heading4:"หัวข้อ 4",heading5:"หัวข้อ 5",heading6:"หัวข้อ 6",paragraph:"ย่อหน้า",code:"โค้ด",size1:"เล็กมาก",size2:"เล็ก",size3:"ปกติ",size4:"ใหญ่กว่าปกติ",size5:"ใหญ่",size6:"ใหญ่มาก",size7:"ใหญ่เต็มที่",defaultFont:"ฟอนต์มาตรฐาน",viewSource:"ดูที่มา"},tree:{noNodes:"ไม่มีโหนด",noResults:"ไม่พบโหนดตามที่ระบุ"}}}); \ No newline at end of file diff --git a/dist/lang/tr.umd.min.js b/dist/lang/tr.umd.min.js new file mode 100644 index 00000000000..71a720799fb --- /dev/null +++ b/dist/lang/tr.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang.tr=e())}(this,function(){"use strict";return{isoName:"tr",nativeName:"Türkçe",label:{clear:"Temizle",ok:"Tamam",cancel:"İptal",close:"Kapat",set:"Ayarla",select:"Seç",reset:"Sıfırla",remove:"Kaldır",update:"Güncelle",create:"Oluştur",search:"Ara",filter:"Süz",refresh:"Yenile",expand:function(a){return a?'"'+a+'" genişlet':"Genişletmek"},collapse:function(a){return a?'"'+a+'" daralt':"Yıkılmak"}},date:{days:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),daysShort:"Paz_Pzt_Sal_Çar_Per_Cum_Cmt".split("_"),months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"gün"},table:{noData:"Veri yok",noResults:"Uyuşan kayıt bulunamadı",loading:"Yükleniyor...",selectedRecords:function(a){return a+" seçili kayıt."},recordsPerPage:"Sayfa başına kayıt:",allRows:"Tümü",pagination:function(a,e,i){return a+"-"+e+" toplam "+i},columns:"Sütunlar"},editor:{url:"URL",bold:"Kalın",italic:"Eğik",strikethrough:"Üstü çizili",underline:"Altı çizili",unorderedList:"Sırasız Liste",orderedList:"Sıralı Liste",subscript:"Alt betik",superscript:"Üst betik",hyperlink:"Köprü",toggleFullscreen:"Tam ekranı Aç-Kapa",quote:"Alıntı",left:"Sola hizala",center:"Ortala",right:"Sağa hizala",justify:"Sığdır",print:"Yazdır",outdent:"Girintiyi azalt",indent:"Girintiyi artır",removeFormat:"Biçimlendirmeyi kaldır",formatting:"Biçimliyor",fontSize:"Yazı Tipi Boyutu",align:"Hizala",hr:"Yatay Çizgi Ekle",undo:"Geri Al",redo:"Yinele",heading1:"Başlık 1",heading2:"Başlık 2",heading3:"Başlık 3",heading4:"Başlık 4",heading5:"Başlık 5",heading6:"Başlık 6",paragraph:"Paragraf",code:"Kod",size1:"Çok küçük",size2:"Küçük",size3:"Normal",size4:"Orta-geniş",size5:"Büyük",size6:"Çok büyük",size7:"En büyük",defaultFont:"Varsayılan Yazı Tipi",viewSource:"Kaynağı Görüntüle"},tree:{noNodes:"Düğüm yok",noResults:"Uyuşan düğüm bulunamadı"}}}); \ No newline at end of file diff --git a/dist/lang/ug.umd.min.js b/dist/lang/ug.umd.min.js new file mode 100644 index 00000000000..c20898e890d --- /dev/null +++ b/dist/lang/ug.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.ug=t())}(this,function(){"use strict";var e="يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە_يەكشەنبە".split("_");return{isoName:"ug",nativeName:"ئۇيغۇرچە",rtl:!0,label:{clear:"تازىلاش",ok:"ھەئە",cancel:"بولدىلا",close:"تاقاش",set:"تەڭشەش",select:"تاللاش",reset:"ئەسلىگە قايتۇرۇش",remove:"چىقىرىۋېتىش",update:"نەشىر يېڭىلاش",create:"قۇرۇش",search:"ئىزدەش",filter:"سۈزگۈچ",refresh:"يېڭىلاش",expand:function(e){return e?'نى كېڭەيتىڭ "'+e+'"':"كېڭەيتىش"},collapse:function(e){return e?'نى يىمىرىڭ "'+e+'"':"كېڭەيتىش"}},date:{days:e,daysShort:"ي_د_س_چ_پ_ج_ش".split("_"),months:"يانۋار(1)_فېۋرال(2)_مارت(3)_ئاپرىل(4)_ماي(5)_ئىيۇن(6)_ئىيۇل(7)_ئاۋغۇست (8)_سېنتەبىر(9)_ئۆكتەبىر(10)_نويابىر(11)_دېكابىر(12)".split("_"),monthsShort:"1-ئاي_2-ئاي_3-ئاي_4-ئاي_5-ئاي_6-ئاي_7-ئاي_8-ئاي_9-ئاي_10-ئاي_11-ئاي_12-ئاي".split("_"),firstDayOfWeek:1,format24h:!1,headerTitle:function(t,n){return n.month+"-ئاينىڭ "+n.day+"-كۈنى ، "+e[t.getDay()]},pluralDay:"كۈن"},table:{noData:"ئۇچۇر يوق",noResults:"مۇناسىۋەتلىك ئۇچۇر تېپىلمىدى",loading:"يۈكلىنىۋاتىدۇ ...",selectedRecords:function(e){return"جەمئىي "+e+" قۇر تاللاندى"},recordsPerPage:"ھەربەتتىكى قۇر سانى:",allRows:"ھەممىسى",pagination:function(e,t,n){return e+"-"+t+" / "+n},columns:"ئىستون"},editor:{url:"URL",bold:"توم",italic:"يانتۇ",strikethrough:"جىجاش",underline:"ئاستى سىزىق",unorderedList:"تەرتىپسىز",orderedList:"تەرتىپلىك",subscript:"تۆۋەن ئىندېكىس",superscript:"يۇقىرى ئىندېكىس",hyperlink:"ئۇلانما",toggleFullscreen:"پۈتۈن ئېكران",quote:"نەقىل",left:"سولغا توغرىلاش",center:"ئوتتۇرىغا توغرىلاش",right:"ئوڭغا توغرىلاش",justify:"ئىككى يانغا توغرىلاش",print:"بېسىپ چىقىرىش",outdent:"كېڭەيتىش",indent:"تارايتىش",removeFormat:"فورماتىنى چىقىرىۋېتىش",formatting:"فورماتلاش",fontSize:"خەت چوڭلىقى",align:"توغرىلاش",hr:"توغرا سىزىق",undo:"قايتۇرۇش",redo:"قايتىلاش",heading1:"تىما 1",heading2:"تىما 2",heading3:"تىما 3",heading4:"تىما 4",heading5:"تىما 5",heading6:"تىما 6",paragraph:"ئابزاس",code:"كود",size1:"كىچىك",size2:"كىچىكراق",size3:"نورمال",size4:"چوڭراق",size5:"چوڭ",size6:"ئىنتايىن چوڭ",size7:"ئەڭ چوڭ",defaultFont:"كۆڭۈلدىكى خەت نۇسخىسى",viewSource:"مەنبەنى كۆرۈش"},tree:{noNodes:"تۈگۈن يوق",noResults:"ئۇچۇر يوق"}}}); \ No newline at end of file diff --git a/dist/lang/uk.umd.min.js b/dist/lang/uk.umd.min.js new file mode 100644 index 00000000000..7d536acc119 --- /dev/null +++ b/dist/lang/uk.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.uk=t())}(this,function(){"use strict";return{isoName:"uk",nativeName:"Українська",label:{clear:"Очистити",ok:"OK",cancel:"Скасувати",close:"Закрити",set:"Встановити",select:"Обрати",reset:"Скинути",remove:"Видалити",update:"Оновити",create:"Створити",search:"Пошук",filter:"Фільтр",refresh:"Оновити",expand:function(e){return e?'Розгорнути "'+e+'"':"Розгорнути"},collapse:function(e){return e?'Згорнути "'+e+'"':"Згорнути"}},date:{days:"Неділя_Понеділок_Вівторок_Середа_Четвер_П`ятниця_Субота".split("_"),daysShort:"Нд_Пн_Вт_Ср_Чт_Пт_Сб".split("_"),months:"Січень_Лютий_Березень_Квітень_Травень_Червень_Липень_Серпень_Вересень_Жовтень_Листопад_Грудень".split("_"),monthsShort:"Січ_Лют_Бер_Кві_Тра_Чер_Лип_Сер_Вер_Жов_Лис_Гру".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"днів"},table:{noData:"Немає даних",noResults:"Співпадінь не знайдено",loading:"Завантаження...",selectedRecords:function(e){return e>0?e+" "+["рядок обраний","рядки обрані","рядків обрано"][(t=e)%10==1&&t%100!=11?0:t%10>=2&&t%10<=4&&(t%100<10||t%100>=20)?1:2]+".":"Жодного рядку не обрано.";var t},recordsPerPage:"Рядків на сторінці:",allRows:"Усі",pagination:function(e,t,n){return e+"-"+t+" з "+n},columns:"Колонки"},editor:{url:"URL",bold:"Напівжирний",italic:"Курсив",strikethrough:"Закреслений",underline:"Підкреслений",unorderedList:"Маркований список",orderedList:"Нумерований список",subscript:"Підрядковий",superscript:"Надрядковий",hyperlink:"Гіперпосилання",toggleFullscreen:"Повноекранний режим",quote:"Цитата",left:"Вирівнювання по лівому краю",center:"Вирівнювання по центру",right:"Вирівнювання по правому краю",justify:"Вирівнювання по ширині",print:"Друк",outdent:"Зменшити відтуп",indent:"Збільшити відступ",removeFormat:"Видалити форматування",formatting:"Форматування",fontSize:"Розмір шрифту",align:"Вирівнювання",hr:"Вставити горизонтальну лінію",undo:"Відмінити",redo:"Повторити",heading1:"Заголовок 1",heading2:"Заголовок 2",heading3:"Заголовок 3",heading4:"Заголовок 4",heading5:"Заголовок 5",heading6:"Заголовок 6",paragraph:"Параграф",code:"Код",size1:"Дуже маленький",size2:"Маленький",size3:"Нормальний",size4:"Середній",size5:"Великий",size6:"Дуже великий",size7:"Величезний",defaultFont:"Шрифт за замовчуванням",viewSource:"Переглянути джерело"},tree:{noNodes:"Немає доступних вузлів",noResults:"Співпадінь не знайдено"}}}); \ No newline at end of file diff --git a/dist/lang/uz-Cyrl.umd.min.js b/dist/lang/uz-Cyrl.umd.min.js new file mode 100644 index 00000000000..b6d33a94fcb --- /dev/null +++ b/dist/lang/uz-Cyrl.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang["uz-Cyrl"]=t())}(this,function(){"use strict";return{isoName:"uz-Cyrl",nativeName:"Ўзбекча (Кирил)",label:{clear:"Тозалаш",ok:"ОК",cancel:"Бекор қилиш",close:"Ёпиш",set:"Ўрнатиш",select:"Танлаш",reset:"Қайта ўрнатиш",remove:"Ўчириш",update:"Янгилаш",create:"Яратиш",search:"Қидириш",filter:"Филтрлаш",refresh:"Янгилаш",expand:function(e){return e?'"'+e+'" ни кенгайтириш':"ъКенгайтиришъ"},collapse:function(e){return e?'"'+e+'" ни йиғиш':"ъЙиқилишъ"}},date:{days:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),daysShort:"Як_Душ_Се_Чор_Пай_Жума_Шанба".split("_"),months:"Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь".split("_"),monthsShort:"Ян_Фев_Март_Апр_Май_Июнь_Июль_Авг_Сен_Окт_Ноя_Дек".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"Кунлар"},table:{noData:"Маълумот топилмади",noResults:"Қидирув бўйича маълумотлар топилмади",loading:"Юкланмоқда...",selectedRecords:function(e){return 1===e?"1 та маълумот танланди.":(0===e?"Хеч қандай":e)+" маълумотла танланмади."},recordsPerPage:"Сахифадаги қаторлар:",allRows:"Барчаси",pagination:function(e,t,n){return e+"-"+t+" жами "+n},columns:"Устунлар"},editor:{url:"УРЛ",bold:"Қалин",italic:"Курсив",strikethrough:"Чизилган",underline:"Тагига чизилган",unorderedList:"Тартибсиз руйхат",orderedList:"Тартибга киритилган руйхат",subscript:"Сатр остида",superscript:"Сатр устида",hyperlink:"Гиперхавола",toggleFullscreen:"Тўлиқ экран режимига ўтиш",quote:"Иқтибос",left:"Чапга сафлаш",center:"Марказга сафлаш",right:"Ўнгдан сафлаш",justify:"Икки томондан сафлаш",print:"Чоп этиш",outdent:"Чекинишни камайтириш",indent:"Чекинишни кўпайтириш",removeFormat:"Форматлашни ўчириб ташлаш",formatting:"Форматлаш",fontSize:"Шрифт хажми",align:"Сафлаш",hr:"Горизонтал қоидани киритиш",undo:"Бекор қилиш",redo:"Такрорлаш",heading1:"Сарлавха 1",heading2:"Сарлавха 2",heading3:"Сарлавха 3",heading4:"Сарлавха 4",heading5:"Сарлавха 5",heading6:"Сарлавха 6",paragraph:"Параграф",code:"Код",size1:"Ўта кичик",size2:"Бироз кичик",size3:"Оддий",size4:"Ўрта катта",size5:"Катта",size6:"Жуда катта",size7:"Максимал",defaultFont:"Стандарт шрифт",viewSource:"Манбани кўриш"},tree:{noNodes:"Кесишмалар мавжуд эмас",noResults:"Мос келадиган кесишмалар топилмади"}}}); \ No newline at end of file diff --git a/dist/lang/uz-Latn.umd.min.js b/dist/lang/uz-Latn.umd.min.js new file mode 100644 index 00000000000..5201e1631c1 --- /dev/null +++ b/dist/lang/uz-Latn.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(a,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):((a="undefined"!=typeof globalThis?globalThis:a||self).Quasar=a.Quasar||{},a.Quasar.lang=a.Quasar.lang||{},a.Quasar.lang["uz-Latn"]=i())}(this,function(){"use strict";return{isoName:"uz-Latn",nativeName:"O'zbekcha (Lotin)",label:{clear:"Tozalash",ok:"OK",cancel:"Bekor qilish",close:"Yopish",set:"O'rnatish",select:"Tanlash",reset:"Qayta o'rnatish",remove:"O'chirish",update:"Yangilash",create:"Yaratish",search:"Qidirish",filter:"Filtrlash",refresh:"Yangilash",expand:function(a){return a?'"'+a+'" ni kengaytirish':"Kengaytirish"},collapse:function(a){return a?'"'+a+"\" ni yig'ish":"Yiqilish"}},date:{days:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),daysShort:"Yak_Du_Se_Chor_Pay_Juma_Shanba".split("_"),months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mart_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),firstDayOfWeek:1,format24h:!0,pluralDay:"Kunlar"},table:{noData:"Ma'lumotlar topilmadi",noResults:"Qidiruv bo'yicha ma'lumotlar topilmadi",loading:"Yuklanmoqda...",selectedRecords:function(a){return 1===a?"1 ta malumot tanlandi.":(0===a?"Hech qanday":a)+" ma'lumotlar tanlanmadi."},recordsPerPage:"Saxifadagi qatorlar:",allRows:"Barchasi",pagination:function(a,i,e){return a+"-"+i+" jami "+e},columns:"Ustunlar"},editor:{url:"URL",bold:"Qalin",italic:"Kursiv",strikethrough:"Chizilgan",underline:"Tagiga chizilgan",unorderedList:"Tartibsiz ro'yxat",orderedList:"Tartibga keltirilgan ro'yxat",subscript:"Satr ostida",superscript:"Satr ustida",hyperlink:"Giperhavola",toggleFullscreen:"To'liq ekran rejimiga o'tish",quote:"Iqtibos",left:"Chapga saflash",center:"Markazga saflash",right:"O'nggadan saflash",justify:"Ikki tomondan saflash",print:"Chop etish",outdent:"Chekinishni kamaytirish",indent:"Chekinishni ko'paytirish",removeFormat:"Formatlashni o'chirib tashlash",formatting:"Formatlash",fontSize:"Shrift hajmi",align:"Saflash",hr:"Gorizontal qoidani kiritish",undo:"Bekor qilish",redo:"Takrorlash",heading1:"Sarlavha 1",heading2:"Sarlavha 2",heading3:"Sarlavha 3",heading4:"Sarlavha 4",heading5:"Sarlavha 5",heading6:"Sarlavha 6",paragraph:"Paragraf",code:"Kod",size1:"Juda kichkik",size2:"Biroz kichik",size3:"Oddiy",size4:"O'rta katta",size5:"Katta",size6:"Juda katta",size7:"Maksimal",defaultFont:"Standart shrift",viewSource:"Manbani ko'rish"},tree:{noNodes:"Kesishmalar mavjud emas",noResults:"Mos keladigan kesishmalar topilmadi"}}}); \ No newline at end of file diff --git a/dist/lang/vi.umd.min.js b/dist/lang/vi.umd.min.js new file mode 100644 index 00000000000..b5b46e9e265 --- /dev/null +++ b/dist/lang/vi.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):((n="undefined"!=typeof globalThis?globalThis:n||self).Quasar=n.Quasar||{},n.Quasar.lang=n.Quasar.lang||{},n.Quasar.lang.vi=e())}(this,function(){"use strict";return{isoName:"vi",nativeName:"Tiếng Việt",label:{clear:"Xóa hết",ok:"OK",cancel:"Hủy",close:"Đóng",set:"Thiết đặt",select:"Chọn",reset:"Đặt lại",remove:"Gỡ bỏ",update:"Cập nhật",create:"Tạo",search:"Tìm kiếm",filter:"Bộ lọc",refresh:"Làm mới",expand:function(n){return n?'Mở rộng "'+n+'"':"Mở rộng"},collapse:function(n){return n?'Thu gọn "'+n+'"':"Sụp đổ"}},date:{days:"Chủ Nhật_Thứ Hai_Thứ Ba_Thứ Tư_Thứ Năm_Thứ Sáu_Thứ Bảy".split("_"),daysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),months:"Tháng Một_Tháng Hai_Tháng Ba_Tháng Tư_Tháng Năm_Tháng Sáu_Tháng Bảy_Tháng Tám_Tháng Chín_Tháng Mười_Tháng Mười Một_Tháng Mười Hai".split("_"),monthsShort:"Th1_Th2_Th3_Th4_Th5_Th6_Th7_Th8_Th9_Th10_Th11_Th12".split("_"),firstDayOfWeek:1,format24h:!1,pluralDay:"ngày"},table:{noData:"Không có dữ liệu",noResults:"Không tìm thấy kết quả",loading:"Đang tải",selectedRecords:function(n){return 1===n?"1 hàng đã chọn.":(0===n?"Không có hàng nào":n)+" hàng đã chọn."},recordsPerPage:"Hàng trên mỗi trang:",allRows:"Tất cả",pagination:function(n,e,h){return n+"-"+e+" của "+h},columns:"Cột"},editor:{url:"URL",bold:"Đậm",italic:"Nghiêng",strikethrough:"Gạch giữa",underline:"Gạch dưới",unorderedList:"Danh sách không theo thứ tự",orderedList:"Danh sách theo thứ tự",subscript:"Chỉ số dưới",superscript:"Chỉ số trên",hyperlink:"Liên kết",toggleFullscreen:"Điều chỉnh chế độ toàn màn hình",quote:"Trích dẫn",left:"Căn trái",center:"Căn giữa",right:"Căn phải",justify:"Căn đều 2 bên",print:"In",outdent:"Giảm lề",indent:"Tăng lề",removeFormat:"Xóa định dạng",formatting:"Định dạng",fontSize:"Kích cỡ phông",align:"Căn chỉnh",hr:"Chèn Quy Tắc Ngang",undo:"Hoàn tác",redo:"Làm lại",heading1:"Tiêu đề 1",heading2:"Tiêu đề 2",heading3:"Tiêu đề 3",heading4:"Tiêu đề 4",heading5:"Tiêu đề 5",heading6:"Tiêu đề 6",paragraph:"Đoạn",code:"Mã",size1:"Rất nhỏ",size2:"Nhỏ vừa",size3:"Thường",size4:"To vừa",size5:"To",size6:"Rất To",size7:"Tối đa",defaultFont:"Phông mặc định",viewSource:"Xem nguồn"},tree:{noNodes:"Không có nốt nào có sẵn",noResults:"Không tìm thấy các nốt"}}}); \ No newline at end of file diff --git a/dist/lang/zh-hans.umd.min.js b/dist/lang/zh-hans.umd.min.js new file mode 100644 index 00000000000..697b3793b09 --- /dev/null +++ b/dist/lang/zh-hans.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.zhHans=t())}(this,function(){"use strict";return{isoName:"zh-hans",nativeName:"中文(简体)",label:{clear:"清空",ok:"确定",cancel:"取消",close:"关闭",set:"设置",select:"选择",reset:"重置",remove:"移除",update:"更新",create:"创建",search:"搜索",filter:"过滤",refresh:"刷新",expand:function(e){return e?'展开"'+e+'"':"扩张"},collapse:function(e){return e?'折叠"'+e+'"':"坍塌"}},date:{days:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),daysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),headerTitle:function(e){return new Intl.DateTimeFormat("zh-CN",{weekday:"short",month:"short",day:"numeric"}).format(e)},firstDayOfWeek:0,format24h:!1,pluralDay:"天"},table:{noData:"没有可用数据",noResults:"找不到匹配的数据",loading:"正在加载...",selectedRecords:function(e){return"已选择"+e+"行"},recordsPerPage:"每页的行数:",allRows:"全部",pagination:function(e,t,n){return e+"-"+t+" / "+n},columns:"列"},editor:{url:"URL",bold:"粗体",italic:"斜体",strikethrough:"删除线",underline:"下划线",unorderedList:"无序列表",orderedList:"有序列表",subscript:"下标",superscript:"上标",hyperlink:"超链接",toggleFullscreen:"全屏切换",quote:"引号",left:"左对齐",center:"居中对齐",right:"右对齐",justify:"两端对齐",print:"打印",outdent:"减少缩进",indent:"增加缩进",removeFormat:"清除样式",formatting:"格式化",fontSize:"字体大小",align:"对齐",hr:"插入水平线",undo:"撤消",redo:"重做",heading1:"标题一",heading2:"标题二",heading3:"标题三",heading4:"标题四",heading5:"标题五",heading6:"标题六",paragraph:"段落",code:"代码",size1:"非常小",size2:"比较小",size3:"正常",size4:"中等偏大",size5:"大",size6:"非常大",size7:"超级大",defaultFont:"默认字体",viewSource:"查看资料"},tree:{noNodes:"没有可用节点",noResults:"找不到匹配的节点"}}}); \ No newline at end of file diff --git a/dist/lang/zh-hant.umd.min.js b/dist/lang/zh-hant.umd.min.js new file mode 100644 index 00000000000..12bcd9dcb99 --- /dev/null +++ b/dist/lang/zh-hant.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):((e="undefined"!=typeof globalThis?globalThis:e||self).Quasar=e.Quasar||{},e.Quasar.lang=e.Quasar.lang||{},e.Quasar.lang.zhHant=t())}(this,function(){"use strict";return{isoName:"zh-hant",nativeName:"中文(繁體)",label:{clear:"清除",ok:"確定",cancel:"取消",close:"關閉",set:"設定",select:"選擇",reset:"重置",remove:"移除",update:"更新",create:"新增",search:"搜尋",filter:"篩選",refresh:"更新",expand:function(e){return e?'展開"'+e+'"':"擴張"},collapse:function(e){return e?'折疊"'+e+'"':"坍塌"}},date:{days:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),daysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),headerTitle:function(e){return new Intl.DateTimeFormat("zh-TW",{weekday:"short",month:"short",day:"numeric"}).format(e)},firstDayOfWeek:0,format24h:!1,pluralDay:"日"},table:{noData:"沒有資料",noResults:"沒有相符資料",loading:"載入中...",selectedRecords:function(e){return"已選擇 "+e+" 列"},recordsPerPage:"每頁列數:",allRows:"全部",pagination:function(e,t,n){return e+"-"+t+" 列,共 "+n+" 列"},columns:"欄位"},editor:{url:"網址",bold:"粗體",italic:"斜體",strikethrough:"刪除線",underline:"下劃線",unorderedList:"項目符號清單",orderedList:"編號清單",subscript:"下標",superscript:"上標",hyperlink:"超連結",toggleFullscreen:"切換全螢幕",quote:"段落引用",left:"靠左對齊",center:"置中對齊",right:"靠右對齊",justify:"分散對齊",print:"列印",outdent:"減少縮排",indent:"增加縮排",removeFormat:"清除格式",formatting:"區塊元素",fontSize:"字型大小",align:"對齊",hr:"水平分隔線",undo:"復原",redo:"取消復原",heading1:"標題 1",heading2:"標題 2",heading3:"標題 3",heading4:"標題 4",heading5:"標題 5",heading6:"標題 6",paragraph:"段落",code:"程式碼",size1:"非常小",size2:"稍小",size3:"正常",size4:"稍大",size5:"大",size6:"非常大",size7:"超級大",defaultFont:"預設字型",viewSource:"切換原始碼"},tree:{noNodes:"沒有節點",noResults:"沒有相符節點"}}}); \ No newline at end of file diff --git a/dist/quasar.addon.css b/dist/quasar.addon.css new file mode 100644 index 00000000000..c039d397385 --- /dev/null +++ b/dist/quasar.addon.css @@ -0,0 +1,5121 @@ +/* + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +@media (min-width: 0) { + .flex-block, + .flex-xs-block { + display: block; + } + .flex-inline, + .flex-xs-inline { + display: inline-block; + } + .q-pa-xs-none { + padding: 0 0; + } + .q-pl-xs-none, + .q-px-xs-none { + padding-left: 0; + } + .q-pr-xs-none, + .q-px-xs-none { + padding-right: 0; + } + .q-pt-xs-none, + .q-py-xs-none { + padding-top: 0; + } + .q-pb-xs-none, + .q-py-xs-none { + padding-bottom: 0; + } + .q-ma-xs-none { + margin: 0 0; + } + .q-ml-xs-none, + .q-mx-xs-none { + margin-left: 0; + } + .q-mr-xs-none, + .q-mx-xs-none { + margin-right: 0; + } + .q-mt-xs-none, + .q-my-xs-none { + margin-top: 0; + } + .q-mb-xs-none, + .q-my-xs-none { + margin-bottom: 0; + } + .q-pa-xs-xs { + padding: 4px 4px; + } + .q-pl-xs-xs, + .q-px-xs-xs { + padding-left: 4px; + } + .q-pr-xs-xs, + .q-px-xs-xs { + padding-right: 4px; + } + .q-pt-xs-xs, + .q-py-xs-xs { + padding-top: 4px; + } + .q-pb-xs-xs, + .q-py-xs-xs { + padding-bottom: 4px; + } + .q-ma-xs-xs { + margin: 4px 4px; + } + .q-ml-xs-xs, + .q-mx-xs-xs { + margin-left: 4px; + } + .q-mr-xs-xs, + .q-mx-xs-xs { + margin-right: 4px; + } + .q-mt-xs-xs, + .q-my-xs-xs { + margin-top: 4px; + } + .q-mb-xs-xs, + .q-my-xs-xs { + margin-bottom: 4px; + } + .q-pa-xs-sm { + padding: 8px 8px; + } + .q-pl-xs-sm, + .q-px-xs-sm { + padding-left: 8px; + } + .q-pr-xs-sm, + .q-px-xs-sm { + padding-right: 8px; + } + .q-pt-xs-sm, + .q-py-xs-sm { + padding-top: 8px; + } + .q-pb-xs-sm, + .q-py-xs-sm { + padding-bottom: 8px; + } + .q-ma-xs-sm { + margin: 8px 8px; + } + .q-ml-xs-sm, + .q-mx-xs-sm { + margin-left: 8px; + } + .q-mr-xs-sm, + .q-mx-xs-sm { + margin-right: 8px; + } + .q-mt-xs-sm, + .q-my-xs-sm { + margin-top: 8px; + } + .q-mb-xs-sm, + .q-my-xs-sm { + margin-bottom: 8px; + } + .q-pa-xs-md { + padding: 16px 16px; + } + .q-pl-xs-md, + .q-px-xs-md { + padding-left: 16px; + } + .q-pr-xs-md, + .q-px-xs-md { + padding-right: 16px; + } + .q-pt-xs-md, + .q-py-xs-md { + padding-top: 16px; + } + .q-pb-xs-md, + .q-py-xs-md { + padding-bottom: 16px; + } + .q-ma-xs-md { + margin: 16px 16px; + } + .q-ml-xs-md, + .q-mx-xs-md { + margin-left: 16px; + } + .q-mr-xs-md, + .q-mx-xs-md { + margin-right: 16px; + } + .q-mt-xs-md, + .q-my-xs-md { + margin-top: 16px; + } + .q-mb-xs-md, + .q-my-xs-md { + margin-bottom: 16px; + } + .q-pa-xs-lg { + padding: 24px 24px; + } + .q-pl-xs-lg, + .q-px-xs-lg { + padding-left: 24px; + } + .q-pr-xs-lg, + .q-px-xs-lg { + padding-right: 24px; + } + .q-pt-xs-lg, + .q-py-xs-lg { + padding-top: 24px; + } + .q-pb-xs-lg, + .q-py-xs-lg { + padding-bottom: 24px; + } + .q-ma-xs-lg { + margin: 24px 24px; + } + .q-ml-xs-lg, + .q-mx-xs-lg { + margin-left: 24px; + } + .q-mr-xs-lg, + .q-mx-xs-lg { + margin-right: 24px; + } + .q-mt-xs-lg, + .q-my-xs-lg { + margin-top: 24px; + } + .q-mb-xs-lg, + .q-my-xs-lg { + margin-bottom: 24px; + } + .q-pa-xs-xl { + padding: 48px 48px; + } + .q-pl-xs-xl, + .q-px-xs-xl { + padding-left: 48px; + } + .q-pr-xs-xl, + .q-px-xs-xl { + padding-right: 48px; + } + .q-pt-xs-xl, + .q-py-xs-xl { + padding-top: 48px; + } + .q-pb-xs-xl, + .q-py-xs-xl { + padding-bottom: 48px; + } + .q-ma-xs-xl { + margin: 48px 48px; + } + .q-ml-xs-xl, + .q-mx-xs-xl { + margin-left: 48px; + } + .q-mr-xs-xl, + .q-mx-xs-xl { + margin-right: 48px; + } + .q-mt-xs-xl, + .q-my-xs-xl { + margin-top: 48px; + } + .q-mb-xs-xl, + .q-my-xs-xl { + margin-bottom: 48px; + } + .q-ml-xs-auto, + .q-mx-xs-auto { + margin-left: auto; + } + .q-mr-xs-auto, + .q-mx-xs-auto { + margin-right: auto; + } + .row-xs, + .column-xs, + .flex-xs { + display: flex; + flex-wrap: wrap; + } + .row-xs.inline-xs, + .column-xs.inline-xs, + .flex-xs.inline-xs { + display: inline-flex; + } + .row-xs { + flex-direction: row; + } + .row-xs.reverse-xs { + flex-direction: row-reverse; + } + .column-xs { + flex-direction: column; + } + .column-xs.reverse-xs { + flex-direction: column-reverse; + } + .wrap-xs { + flex-wrap: wrap; + } + .no-wrap-xs { + flex-wrap: nowrap; + } + .reverse-wrap-xs { + flex-wrap: wrap-reverse; + } + .order-xs-first { + order: -10000; + } + .order-xs-last { + order: 10000; + } + .order-xs-none { + order: 0; + } + .justify-xs-start { + justify-content: flex-start; + } + .justify-xs-end { + justify-content: flex-end; + } + .justify-xs-center, + .flex-xs-center { + justify-content: center; + } + .justify-xs-between { + justify-content: space-between; + } + .justify-xs-around { + justify-content: space-around; + } + .justify-xs-evenly { + justify-content: space-evenly; + } + .items-xs-start { + align-items: flex-start; + } + .items-xs-end { + align-items: flex-end; + } + .items-xs-center, + .flex-xs-center { + align-items: center; + } + .items-xs-baseline { + align-items: baseline; + } + .items-xs-stretch { + align-items: stretch; + } + .content-xs-start { + align-content: flex-start; + } + .content-xs-end { + align-content: flex-end; + } + .content-xs-center { + align-content: center; + } + .content-xs-between { + align-content: space-between; + } + .content-xs-around { + align-content: space-around; + } + .self-xs-start { + align-self: flex-start; + } + .self-xs-end { + align-self: flex-end; + } + .self-xs-center { + align-self: center; + } + .self-xs-baseline { + align-self: baseline; + } + .self-xs-stretch { + align-self: stretch; + } + .q-gutter-xs-x-none, + .q-gutter-xs-none { + margin-left: 0; + } + .q-gutter-xs-x-none > *, + .q-gutter-xs-none > * { + margin-left: 0; + } + .q-gutter-xs-y-none, + .q-gutter-xs-none { + margin-top: 0; + } + .q-gutter-xs-y-none > *, + .q-gutter-xs-none > * { + margin-top: 0; + } + .q-col-gutter-xs-x-none, + .q-col-gutter-xs-none { + margin-left: 0; + } + .q-col-gutter-xs-x-none > *, + .q-col-gutter-xs-none > * { + padding-left: 0; + } + .q-col-gutter-xs-y-none, + .q-col-gutter-xs-none { + margin-top: 0; + } + .q-col-gutter-xs-y-none > *, + .q-col-gutter-xs-none > * { + padding-top: 0; + } + .q-gutter-xs-x-xs, + .q-gutter-xs-xs { + margin-left: -4px; + } + .q-gutter-xs-x-xs > *, + .q-gutter-xs-xs > * { + margin-left: 4px; + } + .q-gutter-xs-y-xs, + .q-gutter-xs-xs { + margin-top: -4px; + } + .q-gutter-xs-y-xs > *, + .q-gutter-xs-xs > * { + margin-top: 4px; + } + .q-col-gutter-xs-x-xs, + .q-col-gutter-xs-xs { + margin-left: -4px; + } + .q-col-gutter-xs-x-xs > *, + .q-col-gutter-xs-xs > * { + padding-left: 4px; + } + .q-col-gutter-xs-y-xs, + .q-col-gutter-xs-xs { + margin-top: -4px; + } + .q-col-gutter-xs-y-xs > *, + .q-col-gutter-xs-xs > * { + padding-top: 4px; + } + .q-gutter-xs-x-sm, + .q-gutter-xs-sm { + margin-left: -8px; + } + .q-gutter-xs-x-sm > *, + .q-gutter-xs-sm > * { + margin-left: 8px; + } + .q-gutter-xs-y-sm, + .q-gutter-xs-sm { + margin-top: -8px; + } + .q-gutter-xs-y-sm > *, + .q-gutter-xs-sm > * { + margin-top: 8px; + } + .q-col-gutter-xs-x-sm, + .q-col-gutter-xs-sm { + margin-left: -8px; + } + .q-col-gutter-xs-x-sm > *, + .q-col-gutter-xs-sm > * { + padding-left: 8px; + } + .q-col-gutter-xs-y-sm, + .q-col-gutter-xs-sm { + margin-top: -8px; + } + .q-col-gutter-xs-y-sm > *, + .q-col-gutter-xs-sm > * { + padding-top: 8px; + } + .q-gutter-xs-x-md, + .q-gutter-xs-md { + margin-left: -16px; + } + .q-gutter-xs-x-md > *, + .q-gutter-xs-md > * { + margin-left: 16px; + } + .q-gutter-xs-y-md, + .q-gutter-xs-md { + margin-top: -16px; + } + .q-gutter-xs-y-md > *, + .q-gutter-xs-md > * { + margin-top: 16px; + } + .q-col-gutter-xs-x-md, + .q-col-gutter-xs-md { + margin-left: -16px; + } + .q-col-gutter-xs-x-md > *, + .q-col-gutter-xs-md > * { + padding-left: 16px; + } + .q-col-gutter-xs-y-md, + .q-col-gutter-xs-md { + margin-top: -16px; + } + .q-col-gutter-xs-y-md > *, + .q-col-gutter-xs-md > * { + padding-top: 16px; + } + .q-gutter-xs-x-lg, + .q-gutter-xs-lg { + margin-left: -24px; + } + .q-gutter-xs-x-lg > *, + .q-gutter-xs-lg > * { + margin-left: 24px; + } + .q-gutter-xs-y-lg, + .q-gutter-xs-lg { + margin-top: -24px; + } + .q-gutter-xs-y-lg > *, + .q-gutter-xs-lg > * { + margin-top: 24px; + } + .q-col-gutter-xs-x-lg, + .q-col-gutter-xs-lg { + margin-left: -24px; + } + .q-col-gutter-xs-x-lg > *, + .q-col-gutter-xs-lg > * { + padding-left: 24px; + } + .q-col-gutter-xs-y-lg, + .q-col-gutter-xs-lg { + margin-top: -24px; + } + .q-col-gutter-xs-y-lg > *, + .q-col-gutter-xs-lg > * { + padding-top: 24px; + } + .q-gutter-xs-x-xl, + .q-gutter-xs-xl { + margin-left: -48px; + } + .q-gutter-xs-x-xl > *, + .q-gutter-xs-xl > * { + margin-left: 48px; + } + .q-gutter-xs-y-xl, + .q-gutter-xs-xl { + margin-top: -48px; + } + .q-gutter-xs-y-xl > *, + .q-gutter-xs-xl > * { + margin-top: 48px; + } + .q-col-gutter-xs-x-xl, + .q-col-gutter-xs-xl { + margin-left: -48px; + } + .q-col-gutter-xs-x-xl > *, + .q-col-gutter-xs-xl > * { + padding-left: 48px; + } + .q-col-gutter-xs-y-xl, + .q-col-gutter-xs-xl { + margin-top: -48px; + } + .q-col-gutter-xs-y-xl > *, + .q-col-gutter-xs-xl > * { + padding-top: 48px; + } + .row-xs > .col-0, + .row-xs > .col-xs-0 { + height: auto; + width: 0%; + } + .row-xs > .offset-0, + .row-xs > .offset-xs-0 { + margin-left: 0%; + } + .column-xs > .col-0, + .column-xs > .col-xs-0 { + height: 0%; + width: auto; + } + .row-xs > .col-1, + .row-xs > .col-xs-1 { + height: auto; + width: 8.3333%; + } + .row-xs > .offset-1, + .row-xs > .offset-xs-1 { + margin-left: 8.3333%; + } + .column-xs > .col-1, + .column-xs > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-xs > .col-2, + .row-xs > .col-xs-2 { + height: auto; + width: 16.6667%; + } + .row-xs > .offset-2, + .row-xs > .offset-xs-2 { + margin-left: 16.6667%; + } + .column-xs > .col-2, + .column-xs > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-xs > .col-3, + .row-xs > .col-xs-3 { + height: auto; + width: 25%; + } + .row-xs > .offset-3, + .row-xs > .offset-xs-3 { + margin-left: 25%; + } + .column-xs > .col-3, + .column-xs > .col-xs-3 { + height: 25%; + width: auto; + } + .row-xs > .col-4, + .row-xs > .col-xs-4 { + height: auto; + width: 33.3333%; + } + .row-xs > .offset-4, + .row-xs > .offset-xs-4 { + margin-left: 33.3333%; + } + .column-xs > .col-4, + .column-xs > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-xs > .col-5, + .row-xs > .col-xs-5 { + height: auto; + width: 41.6667%; + } + .row-xs > .offset-5, + .row-xs > .offset-xs-5 { + margin-left: 41.6667%; + } + .column-xs > .col-5, + .column-xs > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-xs > .col-6, + .row-xs > .col-xs-6 { + height: auto; + width: 50%; + } + .row-xs > .offset-6, + .row-xs > .offset-xs-6 { + margin-left: 50%; + } + .column-xs > .col-6, + .column-xs > .col-xs-6 { + height: 50%; + width: auto; + } + .row-xs > .col-7, + .row-xs > .col-xs-7 { + height: auto; + width: 58.3333%; + } + .row-xs > .offset-7, + .row-xs > .offset-xs-7 { + margin-left: 58.3333%; + } + .column-xs > .col-7, + .column-xs > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-xs > .col-8, + .row-xs > .col-xs-8 { + height: auto; + width: 66.6667%; + } + .row-xs > .offset-8, + .row-xs > .offset-xs-8 { + margin-left: 66.6667%; + } + .column-xs > .col-8, + .column-xs > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-xs > .col-9, + .row-xs > .col-xs-9 { + height: auto; + width: 75%; + } + .row-xs > .offset-9, + .row-xs > .offset-xs-9 { + margin-left: 75%; + } + .column-xs > .col-9, + .column-xs > .col-xs-9 { + height: 75%; + width: auto; + } + .row-xs > .col-10, + .row-xs > .col-xs-10 { + height: auto; + width: 83.3333%; + } + .row-xs > .offset-10, + .row-xs > .offset-xs-10 { + margin-left: 83.3333%; + } + .column-xs > .col-10, + .column-xs > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-xs > .col-11, + .row-xs > .col-xs-11 { + height: auto; + width: 91.6667%; + } + .row-xs > .offset-11, + .row-xs > .offset-xs-11 { + margin-left: 91.6667%; + } + .column-xs > .col-11, + .column-xs > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-xs > .col-12, + .row-xs > .col-xs-12 { + height: auto; + width: 100%; + } + .row-xs > .offset-12, + .row-xs > .offset-xs-12 { + margin-left: 100%; + } + .column-xs > .col-12, + .column-xs > .col-xs-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 600px) { + .flex-sm-block { + display: block; + } + .flex-sm-inline { + display: inline-block; + } + .q-pa-sm-none { + padding: 0 0; + } + .q-pl-sm-none, + .q-px-sm-none { + padding-left: 0; + } + .q-pr-sm-none, + .q-px-sm-none { + padding-right: 0; + } + .q-pt-sm-none, + .q-py-sm-none { + padding-top: 0; + } + .q-pb-sm-none, + .q-py-sm-none { + padding-bottom: 0; + } + .q-ma-sm-none { + margin: 0 0; + } + .q-ml-sm-none, + .q-mx-sm-none { + margin-left: 0; + } + .q-mr-sm-none, + .q-mx-sm-none { + margin-right: 0; + } + .q-mt-sm-none, + .q-my-sm-none { + margin-top: 0; + } + .q-mb-sm-none, + .q-my-sm-none { + margin-bottom: 0; + } + .q-pa-sm-xs { + padding: 4px 4px; + } + .q-pl-sm-xs, + .q-px-sm-xs { + padding-left: 4px; + } + .q-pr-sm-xs, + .q-px-sm-xs { + padding-right: 4px; + } + .q-pt-sm-xs, + .q-py-sm-xs { + padding-top: 4px; + } + .q-pb-sm-xs, + .q-py-sm-xs { + padding-bottom: 4px; + } + .q-ma-sm-xs { + margin: 4px 4px; + } + .q-ml-sm-xs, + .q-mx-sm-xs { + margin-left: 4px; + } + .q-mr-sm-xs, + .q-mx-sm-xs { + margin-right: 4px; + } + .q-mt-sm-xs, + .q-my-sm-xs { + margin-top: 4px; + } + .q-mb-sm-xs, + .q-my-sm-xs { + margin-bottom: 4px; + } + .q-pa-sm-sm { + padding: 8px 8px; + } + .q-pl-sm-sm, + .q-px-sm-sm { + padding-left: 8px; + } + .q-pr-sm-sm, + .q-px-sm-sm { + padding-right: 8px; + } + .q-pt-sm-sm, + .q-py-sm-sm { + padding-top: 8px; + } + .q-pb-sm-sm, + .q-py-sm-sm { + padding-bottom: 8px; + } + .q-ma-sm-sm { + margin: 8px 8px; + } + .q-ml-sm-sm, + .q-mx-sm-sm { + margin-left: 8px; + } + .q-mr-sm-sm, + .q-mx-sm-sm { + margin-right: 8px; + } + .q-mt-sm-sm, + .q-my-sm-sm { + margin-top: 8px; + } + .q-mb-sm-sm, + .q-my-sm-sm { + margin-bottom: 8px; + } + .q-pa-sm-md { + padding: 16px 16px; + } + .q-pl-sm-md, + .q-px-sm-md { + padding-left: 16px; + } + .q-pr-sm-md, + .q-px-sm-md { + padding-right: 16px; + } + .q-pt-sm-md, + .q-py-sm-md { + padding-top: 16px; + } + .q-pb-sm-md, + .q-py-sm-md { + padding-bottom: 16px; + } + .q-ma-sm-md { + margin: 16px 16px; + } + .q-ml-sm-md, + .q-mx-sm-md { + margin-left: 16px; + } + .q-mr-sm-md, + .q-mx-sm-md { + margin-right: 16px; + } + .q-mt-sm-md, + .q-my-sm-md { + margin-top: 16px; + } + .q-mb-sm-md, + .q-my-sm-md { + margin-bottom: 16px; + } + .q-pa-sm-lg { + padding: 24px 24px; + } + .q-pl-sm-lg, + .q-px-sm-lg { + padding-left: 24px; + } + .q-pr-sm-lg, + .q-px-sm-lg { + padding-right: 24px; + } + .q-pt-sm-lg, + .q-py-sm-lg { + padding-top: 24px; + } + .q-pb-sm-lg, + .q-py-sm-lg { + padding-bottom: 24px; + } + .q-ma-sm-lg { + margin: 24px 24px; + } + .q-ml-sm-lg, + .q-mx-sm-lg { + margin-left: 24px; + } + .q-mr-sm-lg, + .q-mx-sm-lg { + margin-right: 24px; + } + .q-mt-sm-lg, + .q-my-sm-lg { + margin-top: 24px; + } + .q-mb-sm-lg, + .q-my-sm-lg { + margin-bottom: 24px; + } + .q-pa-sm-xl { + padding: 48px 48px; + } + .q-pl-sm-xl, + .q-px-sm-xl { + padding-left: 48px; + } + .q-pr-sm-xl, + .q-px-sm-xl { + padding-right: 48px; + } + .q-pt-sm-xl, + .q-py-sm-xl { + padding-top: 48px; + } + .q-pb-sm-xl, + .q-py-sm-xl { + padding-bottom: 48px; + } + .q-ma-sm-xl { + margin: 48px 48px; + } + .q-ml-sm-xl, + .q-mx-sm-xl { + margin-left: 48px; + } + .q-mr-sm-xl, + .q-mx-sm-xl { + margin-right: 48px; + } + .q-mt-sm-xl, + .q-my-sm-xl { + margin-top: 48px; + } + .q-mb-sm-xl, + .q-my-sm-xl { + margin-bottom: 48px; + } + .q-ml-sm-auto, + .q-mx-sm-auto { + margin-left: auto; + } + .q-mr-sm-auto, + .q-mx-sm-auto { + margin-right: auto; + } + .row.inline-sm, + .column.inline-sm, + .flex.inline-sm { + display: inline-flex; + } + .row-sm, + .column-sm, + .flex-sm { + display: flex; + flex-wrap: wrap; + } + .row-sm.inline, + .column-sm.inline, + .flex-sm.inline, + .row-sm.inline-sm, + .column-sm.inline-sm, + .flex-sm.inline-sm { + display: inline-flex; + } + .row.reverse-sm { + flex-direction: row-reverse; + } + .row-sm { + flex-direction: row; + } + .row-sm.reverse, + .row-sm.reverse-sm { + flex-direction: row-reverse; + } + .column.reverse-sm { + flex-direction: column-reverse; + } + .column-sm { + flex-direction: column; + } + .column-sm.reverse, + .column-sm.reverse-sm { + flex-direction: column-reverse; + } + .wrap-sm { + flex-wrap: wrap; + } + .no-wrap-sm { + flex-wrap: nowrap; + } + .reverse-wrap-sm { + flex-wrap: wrap-reverse; + } + .order-sm-first { + order: -10000; + } + .order-sm-last { + order: 10000; + } + .order-sm-none { + order: 0; + } + .justify-sm-start { + justify-content: flex-start; + } + .justify-sm-end { + justify-content: flex-end; + } + .justify-sm-center, + .flex-sm-center { + justify-content: center; + } + .justify-sm-between { + justify-content: space-between; + } + .justify-sm-around { + justify-content: space-around; + } + .justify-sm-evenly { + justify-content: space-evenly; + } + .items-sm-start { + align-items: flex-start; + } + .items-sm-end { + align-items: flex-end; + } + .items-sm-center, + .flex-sm-center { + align-items: center; + } + .items-sm-baseline { + align-items: baseline; + } + .items-sm-stretch { + align-items: stretch; + } + .content-sm-start { + align-content: flex-start; + } + .content-sm-end { + align-content: flex-end; + } + .content-sm-center { + align-content: center; + } + .content-sm-between { + align-content: space-between; + } + .content-sm-around { + align-content: space-around; + } + .self-sm-start { + align-self: flex-start; + } + .self-sm-end { + align-self: flex-end; + } + .self-sm-center { + align-self: center; + } + .self-sm-baseline { + align-self: baseline; + } + .self-sm-stretch { + align-self: stretch; + } + .q-gutter-sm-x-none, + .q-gutter-sm-none { + margin-left: 0; + } + .q-gutter-sm-x-none > *, + .q-gutter-sm-none > * { + margin-left: 0; + } + .q-gutter-sm-y-none, + .q-gutter-sm-none { + margin-top: 0; + } + .q-gutter-sm-y-none > *, + .q-gutter-sm-none > * { + margin-top: 0; + } + .q-col-gutter-sm-x-none, + .q-col-gutter-sm-none { + margin-left: 0; + } + .q-col-gutter-sm-x-none > *, + .q-col-gutter-sm-none > * { + padding-left: 0; + } + .q-col-gutter-sm-y-none, + .q-col-gutter-sm-none { + margin-top: 0; + } + .q-col-gutter-sm-y-none > *, + .q-col-gutter-sm-none > * { + padding-top: 0; + } + .q-gutter-sm-x-xs, + .q-gutter-sm-xs { + margin-left: -4px; + } + .q-gutter-sm-x-xs > *, + .q-gutter-sm-xs > * { + margin-left: 4px; + } + .q-gutter-sm-y-xs, + .q-gutter-sm-xs { + margin-top: -4px; + } + .q-gutter-sm-y-xs > *, + .q-gutter-sm-xs > * { + margin-top: 4px; + } + .q-col-gutter-sm-x-xs, + .q-col-gutter-sm-xs { + margin-left: -4px; + } + .q-col-gutter-sm-x-xs > *, + .q-col-gutter-sm-xs > * { + padding-left: 4px; + } + .q-col-gutter-sm-y-xs, + .q-col-gutter-sm-xs { + margin-top: -4px; + } + .q-col-gutter-sm-y-xs > *, + .q-col-gutter-sm-xs > * { + padding-top: 4px; + } + .q-gutter-sm-x-sm, + .q-gutter-sm-sm { + margin-left: -8px; + } + .q-gutter-sm-x-sm > *, + .q-gutter-sm-sm > * { + margin-left: 8px; + } + .q-gutter-sm-y-sm, + .q-gutter-sm-sm { + margin-top: -8px; + } + .q-gutter-sm-y-sm > *, + .q-gutter-sm-sm > * { + margin-top: 8px; + } + .q-col-gutter-sm-x-sm, + .q-col-gutter-sm-sm { + margin-left: -8px; + } + .q-col-gutter-sm-x-sm > *, + .q-col-gutter-sm-sm > * { + padding-left: 8px; + } + .q-col-gutter-sm-y-sm, + .q-col-gutter-sm-sm { + margin-top: -8px; + } + .q-col-gutter-sm-y-sm > *, + .q-col-gutter-sm-sm > * { + padding-top: 8px; + } + .q-gutter-sm-x-md, + .q-gutter-sm-md { + margin-left: -16px; + } + .q-gutter-sm-x-md > *, + .q-gutter-sm-md > * { + margin-left: 16px; + } + .q-gutter-sm-y-md, + .q-gutter-sm-md { + margin-top: -16px; + } + .q-gutter-sm-y-md > *, + .q-gutter-sm-md > * { + margin-top: 16px; + } + .q-col-gutter-sm-x-md, + .q-col-gutter-sm-md { + margin-left: -16px; + } + .q-col-gutter-sm-x-md > *, + .q-col-gutter-sm-md > * { + padding-left: 16px; + } + .q-col-gutter-sm-y-md, + .q-col-gutter-sm-md { + margin-top: -16px; + } + .q-col-gutter-sm-y-md > *, + .q-col-gutter-sm-md > * { + padding-top: 16px; + } + .q-gutter-sm-x-lg, + .q-gutter-sm-lg { + margin-left: -24px; + } + .q-gutter-sm-x-lg > *, + .q-gutter-sm-lg > * { + margin-left: 24px; + } + .q-gutter-sm-y-lg, + .q-gutter-sm-lg { + margin-top: -24px; + } + .q-gutter-sm-y-lg > *, + .q-gutter-sm-lg > * { + margin-top: 24px; + } + .q-col-gutter-sm-x-lg, + .q-col-gutter-sm-lg { + margin-left: -24px; + } + .q-col-gutter-sm-x-lg > *, + .q-col-gutter-sm-lg > * { + padding-left: 24px; + } + .q-col-gutter-sm-y-lg, + .q-col-gutter-sm-lg { + margin-top: -24px; + } + .q-col-gutter-sm-y-lg > *, + .q-col-gutter-sm-lg > * { + padding-top: 24px; + } + .q-gutter-sm-x-xl, + .q-gutter-sm-xl { + margin-left: -48px; + } + .q-gutter-sm-x-xl > *, + .q-gutter-sm-xl > * { + margin-left: 48px; + } + .q-gutter-sm-y-xl, + .q-gutter-sm-xl { + margin-top: -48px; + } + .q-gutter-sm-y-xl > *, + .q-gutter-sm-xl > * { + margin-top: 48px; + } + .q-col-gutter-sm-x-xl, + .q-col-gutter-sm-xl { + margin-left: -48px; + } + .q-col-gutter-sm-x-xl > *, + .q-col-gutter-sm-xl > * { + padding-left: 48px; + } + .q-col-gutter-sm-y-xl, + .q-col-gutter-sm-xl { + margin-top: -48px; + } + .q-col-gutter-sm-y-xl > *, + .q-col-gutter-sm-xl > * { + padding-top: 48px; + } + .row-sm > .col-0, + .row-sm > .col-xs-0 { + height: auto; + width: 0%; + } + .row-sm > .offset-0, + .row-sm > .offset-xs-0 { + margin-left: 0%; + } + .column-sm > .col-0, + .column-sm > .col-xs-0 { + height: 0%; + width: auto; + } + .row-sm > .col-1, + .row-sm > .col-xs-1 { + height: auto; + width: 8.3333%; + } + .row-sm > .offset-1, + .row-sm > .offset-xs-1 { + margin-left: 8.3333%; + } + .column-sm > .col-1, + .column-sm > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-sm > .col-2, + .row-sm > .col-xs-2 { + height: auto; + width: 16.6667%; + } + .row-sm > .offset-2, + .row-sm > .offset-xs-2 { + margin-left: 16.6667%; + } + .column-sm > .col-2, + .column-sm > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-sm > .col-3, + .row-sm > .col-xs-3 { + height: auto; + width: 25%; + } + .row-sm > .offset-3, + .row-sm > .offset-xs-3 { + margin-left: 25%; + } + .column-sm > .col-3, + .column-sm > .col-xs-3 { + height: 25%; + width: auto; + } + .row-sm > .col-4, + .row-sm > .col-xs-4 { + height: auto; + width: 33.3333%; + } + .row-sm > .offset-4, + .row-sm > .offset-xs-4 { + margin-left: 33.3333%; + } + .column-sm > .col-4, + .column-sm > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-sm > .col-5, + .row-sm > .col-xs-5 { + height: auto; + width: 41.6667%; + } + .row-sm > .offset-5, + .row-sm > .offset-xs-5 { + margin-left: 41.6667%; + } + .column-sm > .col-5, + .column-sm > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-sm > .col-6, + .row-sm > .col-xs-6 { + height: auto; + width: 50%; + } + .row-sm > .offset-6, + .row-sm > .offset-xs-6 { + margin-left: 50%; + } + .column-sm > .col-6, + .column-sm > .col-xs-6 { + height: 50%; + width: auto; + } + .row-sm > .col-7, + .row-sm > .col-xs-7 { + height: auto; + width: 58.3333%; + } + .row-sm > .offset-7, + .row-sm > .offset-xs-7 { + margin-left: 58.3333%; + } + .column-sm > .col-7, + .column-sm > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-sm > .col-8, + .row-sm > .col-xs-8 { + height: auto; + width: 66.6667%; + } + .row-sm > .offset-8, + .row-sm > .offset-xs-8 { + margin-left: 66.6667%; + } + .column-sm > .col-8, + .column-sm > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-sm > .col-9, + .row-sm > .col-xs-9 { + height: auto; + width: 75%; + } + .row-sm > .offset-9, + .row-sm > .offset-xs-9 { + margin-left: 75%; + } + .column-sm > .col-9, + .column-sm > .col-xs-9 { + height: 75%; + width: auto; + } + .row-sm > .col-10, + .row-sm > .col-xs-10 { + height: auto; + width: 83.3333%; + } + .row-sm > .offset-10, + .row-sm > .offset-xs-10 { + margin-left: 83.3333%; + } + .column-sm > .col-10, + .column-sm > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-sm > .col-11, + .row-sm > .col-xs-11 { + height: auto; + width: 91.6667%; + } + .row-sm > .offset-11, + .row-sm > .offset-xs-11 { + margin-left: 91.6667%; + } + .column-sm > .col-11, + .column-sm > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-sm > .col-12, + .row-sm > .col-xs-12 { + height: auto; + width: 100%; + } + .row-sm > .offset-12, + .row-sm > .offset-xs-12 { + margin-left: 100%; + } + .column-sm > .col-12, + .column-sm > .col-xs-12 { + height: 100%; + width: auto; + } + .row-sm > .col-sm-0 { + height: auto; + width: 0%; + } + .row-sm > .offset-sm-0 { + margin-left: 0%; + } + .column-sm > .col-sm-0 { + height: 0%; + width: auto; + } + .row-sm > .col-sm-1 { + height: auto; + width: 8.3333%; + } + .row-sm > .offset-sm-1 { + margin-left: 8.3333%; + } + .column-sm > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row-sm > .col-sm-2 { + height: auto; + width: 16.6667%; + } + .row-sm > .offset-sm-2 { + margin-left: 16.6667%; + } + .column-sm > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row-sm > .col-sm-3 { + height: auto; + width: 25%; + } + .row-sm > .offset-sm-3 { + margin-left: 25%; + } + .column-sm > .col-sm-3 { + height: 25%; + width: auto; + } + .row-sm > .col-sm-4 { + height: auto; + width: 33.3333%; + } + .row-sm > .offset-sm-4 { + margin-left: 33.3333%; + } + .column-sm > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row-sm > .col-sm-5 { + height: auto; + width: 41.6667%; + } + .row-sm > .offset-sm-5 { + margin-left: 41.6667%; + } + .column-sm > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row-sm > .col-sm-6 { + height: auto; + width: 50%; + } + .row-sm > .offset-sm-6 { + margin-left: 50%; + } + .column-sm > .col-sm-6 { + height: 50%; + width: auto; + } + .row-sm > .col-sm-7 { + height: auto; + width: 58.3333%; + } + .row-sm > .offset-sm-7 { + margin-left: 58.3333%; + } + .column-sm > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row-sm > .col-sm-8 { + height: auto; + width: 66.6667%; + } + .row-sm > .offset-sm-8 { + margin-left: 66.6667%; + } + .column-sm > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row-sm > .col-sm-9 { + height: auto; + width: 75%; + } + .row-sm > .offset-sm-9 { + margin-left: 75%; + } + .column-sm > .col-sm-9 { + height: 75%; + width: auto; + } + .row-sm > .col-sm-10 { + height: auto; + width: 83.3333%; + } + .row-sm > .offset-sm-10 { + margin-left: 83.3333%; + } + .column-sm > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row-sm > .col-sm-11 { + height: auto; + width: 91.6667%; + } + .row-sm > .offset-sm-11 { + margin-left: 91.6667%; + } + .column-sm > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row-sm > .col-sm-12 { + height: auto; + width: 100%; + } + .row-sm > .offset-sm-12 { + margin-left: 100%; + } + .column-sm > .col-sm-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1024px) { + .flex-md-block { + display: block; + } + .flex-md-inline { + display: inline-block; + } + .q-pa-md-none { + padding: 0 0; + } + .q-pl-md-none, + .q-px-md-none { + padding-left: 0; + } + .q-pr-md-none, + .q-px-md-none { + padding-right: 0; + } + .q-pt-md-none, + .q-py-md-none { + padding-top: 0; + } + .q-pb-md-none, + .q-py-md-none { + padding-bottom: 0; + } + .q-ma-md-none { + margin: 0 0; + } + .q-ml-md-none, + .q-mx-md-none { + margin-left: 0; + } + .q-mr-md-none, + .q-mx-md-none { + margin-right: 0; + } + .q-mt-md-none, + .q-my-md-none { + margin-top: 0; + } + .q-mb-md-none, + .q-my-md-none { + margin-bottom: 0; + } + .q-pa-md-xs { + padding: 4px 4px; + } + .q-pl-md-xs, + .q-px-md-xs { + padding-left: 4px; + } + .q-pr-md-xs, + .q-px-md-xs { + padding-right: 4px; + } + .q-pt-md-xs, + .q-py-md-xs { + padding-top: 4px; + } + .q-pb-md-xs, + .q-py-md-xs { + padding-bottom: 4px; + } + .q-ma-md-xs { + margin: 4px 4px; + } + .q-ml-md-xs, + .q-mx-md-xs { + margin-left: 4px; + } + .q-mr-md-xs, + .q-mx-md-xs { + margin-right: 4px; + } + .q-mt-md-xs, + .q-my-md-xs { + margin-top: 4px; + } + .q-mb-md-xs, + .q-my-md-xs { + margin-bottom: 4px; + } + .q-pa-md-sm { + padding: 8px 8px; + } + .q-pl-md-sm, + .q-px-md-sm { + padding-left: 8px; + } + .q-pr-md-sm, + .q-px-md-sm { + padding-right: 8px; + } + .q-pt-md-sm, + .q-py-md-sm { + padding-top: 8px; + } + .q-pb-md-sm, + .q-py-md-sm { + padding-bottom: 8px; + } + .q-ma-md-sm { + margin: 8px 8px; + } + .q-ml-md-sm, + .q-mx-md-sm { + margin-left: 8px; + } + .q-mr-md-sm, + .q-mx-md-sm { + margin-right: 8px; + } + .q-mt-md-sm, + .q-my-md-sm { + margin-top: 8px; + } + .q-mb-md-sm, + .q-my-md-sm { + margin-bottom: 8px; + } + .q-pa-md-md { + padding: 16px 16px; + } + .q-pl-md-md, + .q-px-md-md { + padding-left: 16px; + } + .q-pr-md-md, + .q-px-md-md { + padding-right: 16px; + } + .q-pt-md-md, + .q-py-md-md { + padding-top: 16px; + } + .q-pb-md-md, + .q-py-md-md { + padding-bottom: 16px; + } + .q-ma-md-md { + margin: 16px 16px; + } + .q-ml-md-md, + .q-mx-md-md { + margin-left: 16px; + } + .q-mr-md-md, + .q-mx-md-md { + margin-right: 16px; + } + .q-mt-md-md, + .q-my-md-md { + margin-top: 16px; + } + .q-mb-md-md, + .q-my-md-md { + margin-bottom: 16px; + } + .q-pa-md-lg { + padding: 24px 24px; + } + .q-pl-md-lg, + .q-px-md-lg { + padding-left: 24px; + } + .q-pr-md-lg, + .q-px-md-lg { + padding-right: 24px; + } + .q-pt-md-lg, + .q-py-md-lg { + padding-top: 24px; + } + .q-pb-md-lg, + .q-py-md-lg { + padding-bottom: 24px; + } + .q-ma-md-lg { + margin: 24px 24px; + } + .q-ml-md-lg, + .q-mx-md-lg { + margin-left: 24px; + } + .q-mr-md-lg, + .q-mx-md-lg { + margin-right: 24px; + } + .q-mt-md-lg, + .q-my-md-lg { + margin-top: 24px; + } + .q-mb-md-lg, + .q-my-md-lg { + margin-bottom: 24px; + } + .q-pa-md-xl { + padding: 48px 48px; + } + .q-pl-md-xl, + .q-px-md-xl { + padding-left: 48px; + } + .q-pr-md-xl, + .q-px-md-xl { + padding-right: 48px; + } + .q-pt-md-xl, + .q-py-md-xl { + padding-top: 48px; + } + .q-pb-md-xl, + .q-py-md-xl { + padding-bottom: 48px; + } + .q-ma-md-xl { + margin: 48px 48px; + } + .q-ml-md-xl, + .q-mx-md-xl { + margin-left: 48px; + } + .q-mr-md-xl, + .q-mx-md-xl { + margin-right: 48px; + } + .q-mt-md-xl, + .q-my-md-xl { + margin-top: 48px; + } + .q-mb-md-xl, + .q-my-md-xl { + margin-bottom: 48px; + } + .q-ml-md-auto, + .q-mx-md-auto { + margin-left: auto; + } + .q-mr-md-auto, + .q-mx-md-auto { + margin-right: auto; + } + .row.inline-md, + .column.inline-md, + .flex.inline-md { + display: inline-flex; + } + .row-md, + .column-md, + .flex-md { + display: flex; + flex-wrap: wrap; + } + .row-md.inline, + .column-md.inline, + .flex-md.inline, + .row-md.inline-md, + .column-md.inline-md, + .flex-md.inline-md { + display: inline-flex; + } + .row.reverse-md { + flex-direction: row-reverse; + } + .row-md { + flex-direction: row; + } + .row-md.reverse, + .row-md.reverse-md { + flex-direction: row-reverse; + } + .column.reverse-md { + flex-direction: column-reverse; + } + .column-md { + flex-direction: column; + } + .column-md.reverse, + .column-md.reverse-md { + flex-direction: column-reverse; + } + .wrap-md { + flex-wrap: wrap; + } + .no-wrap-md { + flex-wrap: nowrap; + } + .reverse-wrap-md { + flex-wrap: wrap-reverse; + } + .order-md-first { + order: -10000; + } + .order-md-last { + order: 10000; + } + .order-md-none { + order: 0; + } + .justify-md-start { + justify-content: flex-start; + } + .justify-md-end { + justify-content: flex-end; + } + .justify-md-center, + .flex-md-center { + justify-content: center; + } + .justify-md-between { + justify-content: space-between; + } + .justify-md-around { + justify-content: space-around; + } + .justify-md-evenly { + justify-content: space-evenly; + } + .items-md-start { + align-items: flex-start; + } + .items-md-end { + align-items: flex-end; + } + .items-md-center, + .flex-md-center { + align-items: center; + } + .items-md-baseline { + align-items: baseline; + } + .items-md-stretch { + align-items: stretch; + } + .content-md-start { + align-content: flex-start; + } + .content-md-end { + align-content: flex-end; + } + .content-md-center { + align-content: center; + } + .content-md-between { + align-content: space-between; + } + .content-md-around { + align-content: space-around; + } + .self-md-start { + align-self: flex-start; + } + .self-md-end { + align-self: flex-end; + } + .self-md-center { + align-self: center; + } + .self-md-baseline { + align-self: baseline; + } + .self-md-stretch { + align-self: stretch; + } + .q-gutter-md-x-none, + .q-gutter-md-none { + margin-left: 0; + } + .q-gutter-md-x-none > *, + .q-gutter-md-none > * { + margin-left: 0; + } + .q-gutter-md-y-none, + .q-gutter-md-none { + margin-top: 0; + } + .q-gutter-md-y-none > *, + .q-gutter-md-none > * { + margin-top: 0; + } + .q-col-gutter-md-x-none, + .q-col-gutter-md-none { + margin-left: 0; + } + .q-col-gutter-md-x-none > *, + .q-col-gutter-md-none > * { + padding-left: 0; + } + .q-col-gutter-md-y-none, + .q-col-gutter-md-none { + margin-top: 0; + } + .q-col-gutter-md-y-none > *, + .q-col-gutter-md-none > * { + padding-top: 0; + } + .q-gutter-md-x-xs, + .q-gutter-md-xs { + margin-left: -4px; + } + .q-gutter-md-x-xs > *, + .q-gutter-md-xs > * { + margin-left: 4px; + } + .q-gutter-md-y-xs, + .q-gutter-md-xs { + margin-top: -4px; + } + .q-gutter-md-y-xs > *, + .q-gutter-md-xs > * { + margin-top: 4px; + } + .q-col-gutter-md-x-xs, + .q-col-gutter-md-xs { + margin-left: -4px; + } + .q-col-gutter-md-x-xs > *, + .q-col-gutter-md-xs > * { + padding-left: 4px; + } + .q-col-gutter-md-y-xs, + .q-col-gutter-md-xs { + margin-top: -4px; + } + .q-col-gutter-md-y-xs > *, + .q-col-gutter-md-xs > * { + padding-top: 4px; + } + .q-gutter-md-x-sm, + .q-gutter-md-sm { + margin-left: -8px; + } + .q-gutter-md-x-sm > *, + .q-gutter-md-sm > * { + margin-left: 8px; + } + .q-gutter-md-y-sm, + .q-gutter-md-sm { + margin-top: -8px; + } + .q-gutter-md-y-sm > *, + .q-gutter-md-sm > * { + margin-top: 8px; + } + .q-col-gutter-md-x-sm, + .q-col-gutter-md-sm { + margin-left: -8px; + } + .q-col-gutter-md-x-sm > *, + .q-col-gutter-md-sm > * { + padding-left: 8px; + } + .q-col-gutter-md-y-sm, + .q-col-gutter-md-sm { + margin-top: -8px; + } + .q-col-gutter-md-y-sm > *, + .q-col-gutter-md-sm > * { + padding-top: 8px; + } + .q-gutter-md-x-md, + .q-gutter-md-md { + margin-left: -16px; + } + .q-gutter-md-x-md > *, + .q-gutter-md-md > * { + margin-left: 16px; + } + .q-gutter-md-y-md, + .q-gutter-md-md { + margin-top: -16px; + } + .q-gutter-md-y-md > *, + .q-gutter-md-md > * { + margin-top: 16px; + } + .q-col-gutter-md-x-md, + .q-col-gutter-md-md { + margin-left: -16px; + } + .q-col-gutter-md-x-md > *, + .q-col-gutter-md-md > * { + padding-left: 16px; + } + .q-col-gutter-md-y-md, + .q-col-gutter-md-md { + margin-top: -16px; + } + .q-col-gutter-md-y-md > *, + .q-col-gutter-md-md > * { + padding-top: 16px; + } + .q-gutter-md-x-lg, + .q-gutter-md-lg { + margin-left: -24px; + } + .q-gutter-md-x-lg > *, + .q-gutter-md-lg > * { + margin-left: 24px; + } + .q-gutter-md-y-lg, + .q-gutter-md-lg { + margin-top: -24px; + } + .q-gutter-md-y-lg > *, + .q-gutter-md-lg > * { + margin-top: 24px; + } + .q-col-gutter-md-x-lg, + .q-col-gutter-md-lg { + margin-left: -24px; + } + .q-col-gutter-md-x-lg > *, + .q-col-gutter-md-lg > * { + padding-left: 24px; + } + .q-col-gutter-md-y-lg, + .q-col-gutter-md-lg { + margin-top: -24px; + } + .q-col-gutter-md-y-lg > *, + .q-col-gutter-md-lg > * { + padding-top: 24px; + } + .q-gutter-md-x-xl, + .q-gutter-md-xl { + margin-left: -48px; + } + .q-gutter-md-x-xl > *, + .q-gutter-md-xl > * { + margin-left: 48px; + } + .q-gutter-md-y-xl, + .q-gutter-md-xl { + margin-top: -48px; + } + .q-gutter-md-y-xl > *, + .q-gutter-md-xl > * { + margin-top: 48px; + } + .q-col-gutter-md-x-xl, + .q-col-gutter-md-xl { + margin-left: -48px; + } + .q-col-gutter-md-x-xl > *, + .q-col-gutter-md-xl > * { + padding-left: 48px; + } + .q-col-gutter-md-y-xl, + .q-col-gutter-md-xl { + margin-top: -48px; + } + .q-col-gutter-md-y-xl > *, + .q-col-gutter-md-xl > * { + padding-top: 48px; + } + .row-md > .col-0, + .row-md > .col-xs-0 { + height: auto; + width: 0%; + } + .row-md > .offset-0, + .row-md > .offset-xs-0 { + margin-left: 0%; + } + .column-md > .col-0, + .column-md > .col-xs-0 { + height: 0%; + width: auto; + } + .row-md > .col-1, + .row-md > .col-xs-1 { + height: auto; + width: 8.3333%; + } + .row-md > .offset-1, + .row-md > .offset-xs-1 { + margin-left: 8.3333%; + } + .column-md > .col-1, + .column-md > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-md > .col-2, + .row-md > .col-xs-2 { + height: auto; + width: 16.6667%; + } + .row-md > .offset-2, + .row-md > .offset-xs-2 { + margin-left: 16.6667%; + } + .column-md > .col-2, + .column-md > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-md > .col-3, + .row-md > .col-xs-3 { + height: auto; + width: 25%; + } + .row-md > .offset-3, + .row-md > .offset-xs-3 { + margin-left: 25%; + } + .column-md > .col-3, + .column-md > .col-xs-3 { + height: 25%; + width: auto; + } + .row-md > .col-4, + .row-md > .col-xs-4 { + height: auto; + width: 33.3333%; + } + .row-md > .offset-4, + .row-md > .offset-xs-4 { + margin-left: 33.3333%; + } + .column-md > .col-4, + .column-md > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-md > .col-5, + .row-md > .col-xs-5 { + height: auto; + width: 41.6667%; + } + .row-md > .offset-5, + .row-md > .offset-xs-5 { + margin-left: 41.6667%; + } + .column-md > .col-5, + .column-md > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-md > .col-6, + .row-md > .col-xs-6 { + height: auto; + width: 50%; + } + .row-md > .offset-6, + .row-md > .offset-xs-6 { + margin-left: 50%; + } + .column-md > .col-6, + .column-md > .col-xs-6 { + height: 50%; + width: auto; + } + .row-md > .col-7, + .row-md > .col-xs-7 { + height: auto; + width: 58.3333%; + } + .row-md > .offset-7, + .row-md > .offset-xs-7 { + margin-left: 58.3333%; + } + .column-md > .col-7, + .column-md > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-md > .col-8, + .row-md > .col-xs-8 { + height: auto; + width: 66.6667%; + } + .row-md > .offset-8, + .row-md > .offset-xs-8 { + margin-left: 66.6667%; + } + .column-md > .col-8, + .column-md > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-md > .col-9, + .row-md > .col-xs-9 { + height: auto; + width: 75%; + } + .row-md > .offset-9, + .row-md > .offset-xs-9 { + margin-left: 75%; + } + .column-md > .col-9, + .column-md > .col-xs-9 { + height: 75%; + width: auto; + } + .row-md > .col-10, + .row-md > .col-xs-10 { + height: auto; + width: 83.3333%; + } + .row-md > .offset-10, + .row-md > .offset-xs-10 { + margin-left: 83.3333%; + } + .column-md > .col-10, + .column-md > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-md > .col-11, + .row-md > .col-xs-11 { + height: auto; + width: 91.6667%; + } + .row-md > .offset-11, + .row-md > .offset-xs-11 { + margin-left: 91.6667%; + } + .column-md > .col-11, + .column-md > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-md > .col-12, + .row-md > .col-xs-12 { + height: auto; + width: 100%; + } + .row-md > .offset-12, + .row-md > .offset-xs-12 { + margin-left: 100%; + } + .column-md > .col-12, + .column-md > .col-xs-12 { + height: 100%; + width: auto; + } + .row-md > .col-sm-0 { + height: auto; + width: 0%; + } + .row-md > .offset-sm-0 { + margin-left: 0%; + } + .column-md > .col-sm-0 { + height: 0%; + width: auto; + } + .row-md > .col-sm-1 { + height: auto; + width: 8.3333%; + } + .row-md > .offset-sm-1 { + margin-left: 8.3333%; + } + .column-md > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row-md > .col-sm-2 { + height: auto; + width: 16.6667%; + } + .row-md > .offset-sm-2 { + margin-left: 16.6667%; + } + .column-md > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row-md > .col-sm-3 { + height: auto; + width: 25%; + } + .row-md > .offset-sm-3 { + margin-left: 25%; + } + .column-md > .col-sm-3 { + height: 25%; + width: auto; + } + .row-md > .col-sm-4 { + height: auto; + width: 33.3333%; + } + .row-md > .offset-sm-4 { + margin-left: 33.3333%; + } + .column-md > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row-md > .col-sm-5 { + height: auto; + width: 41.6667%; + } + .row-md > .offset-sm-5 { + margin-left: 41.6667%; + } + .column-md > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row-md > .col-sm-6 { + height: auto; + width: 50%; + } + .row-md > .offset-sm-6 { + margin-left: 50%; + } + .column-md > .col-sm-6 { + height: 50%; + width: auto; + } + .row-md > .col-sm-7 { + height: auto; + width: 58.3333%; + } + .row-md > .offset-sm-7 { + margin-left: 58.3333%; + } + .column-md > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row-md > .col-sm-8 { + height: auto; + width: 66.6667%; + } + .row-md > .offset-sm-8 { + margin-left: 66.6667%; + } + .column-md > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row-md > .col-sm-9 { + height: auto; + width: 75%; + } + .row-md > .offset-sm-9 { + margin-left: 75%; + } + .column-md > .col-sm-9 { + height: 75%; + width: auto; + } + .row-md > .col-sm-10 { + height: auto; + width: 83.3333%; + } + .row-md > .offset-sm-10 { + margin-left: 83.3333%; + } + .column-md > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row-md > .col-sm-11 { + height: auto; + width: 91.6667%; + } + .row-md > .offset-sm-11 { + margin-left: 91.6667%; + } + .column-md > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row-md > .col-sm-12 { + height: auto; + width: 100%; + } + .row-md > .offset-sm-12 { + margin-left: 100%; + } + .column-md > .col-sm-12 { + height: 100%; + width: auto; + } + .row-md > .col-md-0 { + height: auto; + width: 0%; + } + .row-md > .offset-md-0 { + margin-left: 0%; + } + .column-md > .col-md-0 { + height: 0%; + width: auto; + } + .row-md > .col-md-1 { + height: auto; + width: 8.3333%; + } + .row-md > .offset-md-1 { + margin-left: 8.3333%; + } + .column-md > .col-md-1 { + height: 8.3333%; + width: auto; + } + .row-md > .col-md-2 { + height: auto; + width: 16.6667%; + } + .row-md > .offset-md-2 { + margin-left: 16.6667%; + } + .column-md > .col-md-2 { + height: 16.6667%; + width: auto; + } + .row-md > .col-md-3 { + height: auto; + width: 25%; + } + .row-md > .offset-md-3 { + margin-left: 25%; + } + .column-md > .col-md-3 { + height: 25%; + width: auto; + } + .row-md > .col-md-4 { + height: auto; + width: 33.3333%; + } + .row-md > .offset-md-4 { + margin-left: 33.3333%; + } + .column-md > .col-md-4 { + height: 33.3333%; + width: auto; + } + .row-md > .col-md-5 { + height: auto; + width: 41.6667%; + } + .row-md > .offset-md-5 { + margin-left: 41.6667%; + } + .column-md > .col-md-5 { + height: 41.6667%; + width: auto; + } + .row-md > .col-md-6 { + height: auto; + width: 50%; + } + .row-md > .offset-md-6 { + margin-left: 50%; + } + .column-md > .col-md-6 { + height: 50%; + width: auto; + } + .row-md > .col-md-7 { + height: auto; + width: 58.3333%; + } + .row-md > .offset-md-7 { + margin-left: 58.3333%; + } + .column-md > .col-md-7 { + height: 58.3333%; + width: auto; + } + .row-md > .col-md-8 { + height: auto; + width: 66.6667%; + } + .row-md > .offset-md-8 { + margin-left: 66.6667%; + } + .column-md > .col-md-8 { + height: 66.6667%; + width: auto; + } + .row-md > .col-md-9 { + height: auto; + width: 75%; + } + .row-md > .offset-md-9 { + margin-left: 75%; + } + .column-md > .col-md-9 { + height: 75%; + width: auto; + } + .row-md > .col-md-10 { + height: auto; + width: 83.3333%; + } + .row-md > .offset-md-10 { + margin-left: 83.3333%; + } + .column-md > .col-md-10 { + height: 83.3333%; + width: auto; + } + .row-md > .col-md-11 { + height: auto; + width: 91.6667%; + } + .row-md > .offset-md-11 { + margin-left: 91.6667%; + } + .column-md > .col-md-11 { + height: 91.6667%; + width: auto; + } + .row-md > .col-md-12 { + height: auto; + width: 100%; + } + .row-md > .offset-md-12 { + margin-left: 100%; + } + .column-md > .col-md-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1440px) { + .flex-lg-block { + display: block; + } + .flex-lg-inline { + display: inline-block; + } + .q-pa-lg-none { + padding: 0 0; + } + .q-pl-lg-none, + .q-px-lg-none { + padding-left: 0; + } + .q-pr-lg-none, + .q-px-lg-none { + padding-right: 0; + } + .q-pt-lg-none, + .q-py-lg-none { + padding-top: 0; + } + .q-pb-lg-none, + .q-py-lg-none { + padding-bottom: 0; + } + .q-ma-lg-none { + margin: 0 0; + } + .q-ml-lg-none, + .q-mx-lg-none { + margin-left: 0; + } + .q-mr-lg-none, + .q-mx-lg-none { + margin-right: 0; + } + .q-mt-lg-none, + .q-my-lg-none { + margin-top: 0; + } + .q-mb-lg-none, + .q-my-lg-none { + margin-bottom: 0; + } + .q-pa-lg-xs { + padding: 4px 4px; + } + .q-pl-lg-xs, + .q-px-lg-xs { + padding-left: 4px; + } + .q-pr-lg-xs, + .q-px-lg-xs { + padding-right: 4px; + } + .q-pt-lg-xs, + .q-py-lg-xs { + padding-top: 4px; + } + .q-pb-lg-xs, + .q-py-lg-xs { + padding-bottom: 4px; + } + .q-ma-lg-xs { + margin: 4px 4px; + } + .q-ml-lg-xs, + .q-mx-lg-xs { + margin-left: 4px; + } + .q-mr-lg-xs, + .q-mx-lg-xs { + margin-right: 4px; + } + .q-mt-lg-xs, + .q-my-lg-xs { + margin-top: 4px; + } + .q-mb-lg-xs, + .q-my-lg-xs { + margin-bottom: 4px; + } + .q-pa-lg-sm { + padding: 8px 8px; + } + .q-pl-lg-sm, + .q-px-lg-sm { + padding-left: 8px; + } + .q-pr-lg-sm, + .q-px-lg-sm { + padding-right: 8px; + } + .q-pt-lg-sm, + .q-py-lg-sm { + padding-top: 8px; + } + .q-pb-lg-sm, + .q-py-lg-sm { + padding-bottom: 8px; + } + .q-ma-lg-sm { + margin: 8px 8px; + } + .q-ml-lg-sm, + .q-mx-lg-sm { + margin-left: 8px; + } + .q-mr-lg-sm, + .q-mx-lg-sm { + margin-right: 8px; + } + .q-mt-lg-sm, + .q-my-lg-sm { + margin-top: 8px; + } + .q-mb-lg-sm, + .q-my-lg-sm { + margin-bottom: 8px; + } + .q-pa-lg-md { + padding: 16px 16px; + } + .q-pl-lg-md, + .q-px-lg-md { + padding-left: 16px; + } + .q-pr-lg-md, + .q-px-lg-md { + padding-right: 16px; + } + .q-pt-lg-md, + .q-py-lg-md { + padding-top: 16px; + } + .q-pb-lg-md, + .q-py-lg-md { + padding-bottom: 16px; + } + .q-ma-lg-md { + margin: 16px 16px; + } + .q-ml-lg-md, + .q-mx-lg-md { + margin-left: 16px; + } + .q-mr-lg-md, + .q-mx-lg-md { + margin-right: 16px; + } + .q-mt-lg-md, + .q-my-lg-md { + margin-top: 16px; + } + .q-mb-lg-md, + .q-my-lg-md { + margin-bottom: 16px; + } + .q-pa-lg-lg { + padding: 24px 24px; + } + .q-pl-lg-lg, + .q-px-lg-lg { + padding-left: 24px; + } + .q-pr-lg-lg, + .q-px-lg-lg { + padding-right: 24px; + } + .q-pt-lg-lg, + .q-py-lg-lg { + padding-top: 24px; + } + .q-pb-lg-lg, + .q-py-lg-lg { + padding-bottom: 24px; + } + .q-ma-lg-lg { + margin: 24px 24px; + } + .q-ml-lg-lg, + .q-mx-lg-lg { + margin-left: 24px; + } + .q-mr-lg-lg, + .q-mx-lg-lg { + margin-right: 24px; + } + .q-mt-lg-lg, + .q-my-lg-lg { + margin-top: 24px; + } + .q-mb-lg-lg, + .q-my-lg-lg { + margin-bottom: 24px; + } + .q-pa-lg-xl { + padding: 48px 48px; + } + .q-pl-lg-xl, + .q-px-lg-xl { + padding-left: 48px; + } + .q-pr-lg-xl, + .q-px-lg-xl { + padding-right: 48px; + } + .q-pt-lg-xl, + .q-py-lg-xl { + padding-top: 48px; + } + .q-pb-lg-xl, + .q-py-lg-xl { + padding-bottom: 48px; + } + .q-ma-lg-xl { + margin: 48px 48px; + } + .q-ml-lg-xl, + .q-mx-lg-xl { + margin-left: 48px; + } + .q-mr-lg-xl, + .q-mx-lg-xl { + margin-right: 48px; + } + .q-mt-lg-xl, + .q-my-lg-xl { + margin-top: 48px; + } + .q-mb-lg-xl, + .q-my-lg-xl { + margin-bottom: 48px; + } + .q-ml-lg-auto, + .q-mx-lg-auto { + margin-left: auto; + } + .q-mr-lg-auto, + .q-mx-lg-auto { + margin-right: auto; + } + .row.inline-lg, + .column.inline-lg, + .flex.inline-lg { + display: inline-flex; + } + .row-lg, + .column-lg, + .flex-lg { + display: flex; + flex-wrap: wrap; + } + .row-lg.inline, + .column-lg.inline, + .flex-lg.inline, + .row-lg.inline-lg, + .column-lg.inline-lg, + .flex-lg.inline-lg { + display: inline-flex; + } + .row.reverse-lg { + flex-direction: row-reverse; + } + .row-lg { + flex-direction: row; + } + .row-lg.reverse, + .row-lg.reverse-lg { + flex-direction: row-reverse; + } + .column.reverse-lg { + flex-direction: column-reverse; + } + .column-lg { + flex-direction: column; + } + .column-lg.reverse, + .column-lg.reverse-lg { + flex-direction: column-reverse; + } + .wrap-lg { + flex-wrap: wrap; + } + .no-wrap-lg { + flex-wrap: nowrap; + } + .reverse-wrap-lg { + flex-wrap: wrap-reverse; + } + .order-lg-first { + order: -10000; + } + .order-lg-last { + order: 10000; + } + .order-lg-none { + order: 0; + } + .justify-lg-start { + justify-content: flex-start; + } + .justify-lg-end { + justify-content: flex-end; + } + .justify-lg-center, + .flex-lg-center { + justify-content: center; + } + .justify-lg-between { + justify-content: space-between; + } + .justify-lg-around { + justify-content: space-around; + } + .justify-lg-evenly { + justify-content: space-evenly; + } + .items-lg-start { + align-items: flex-start; + } + .items-lg-end { + align-items: flex-end; + } + .items-lg-center, + .flex-lg-center { + align-items: center; + } + .items-lg-baseline { + align-items: baseline; + } + .items-lg-stretch { + align-items: stretch; + } + .content-lg-start { + align-content: flex-start; + } + .content-lg-end { + align-content: flex-end; + } + .content-lg-center { + align-content: center; + } + .content-lg-between { + align-content: space-between; + } + .content-lg-around { + align-content: space-around; + } + .self-lg-start { + align-self: flex-start; + } + .self-lg-end { + align-self: flex-end; + } + .self-lg-center { + align-self: center; + } + .self-lg-baseline { + align-self: baseline; + } + .self-lg-stretch { + align-self: stretch; + } + .q-gutter-lg-x-none, + .q-gutter-lg-none { + margin-left: 0; + } + .q-gutter-lg-x-none > *, + .q-gutter-lg-none > * { + margin-left: 0; + } + .q-gutter-lg-y-none, + .q-gutter-lg-none { + margin-top: 0; + } + .q-gutter-lg-y-none > *, + .q-gutter-lg-none > * { + margin-top: 0; + } + .q-col-gutter-lg-x-none, + .q-col-gutter-lg-none { + margin-left: 0; + } + .q-col-gutter-lg-x-none > *, + .q-col-gutter-lg-none > * { + padding-left: 0; + } + .q-col-gutter-lg-y-none, + .q-col-gutter-lg-none { + margin-top: 0; + } + .q-col-gutter-lg-y-none > *, + .q-col-gutter-lg-none > * { + padding-top: 0; + } + .q-gutter-lg-x-xs, + .q-gutter-lg-xs { + margin-left: -4px; + } + .q-gutter-lg-x-xs > *, + .q-gutter-lg-xs > * { + margin-left: 4px; + } + .q-gutter-lg-y-xs, + .q-gutter-lg-xs { + margin-top: -4px; + } + .q-gutter-lg-y-xs > *, + .q-gutter-lg-xs > * { + margin-top: 4px; + } + .q-col-gutter-lg-x-xs, + .q-col-gutter-lg-xs { + margin-left: -4px; + } + .q-col-gutter-lg-x-xs > *, + .q-col-gutter-lg-xs > * { + padding-left: 4px; + } + .q-col-gutter-lg-y-xs, + .q-col-gutter-lg-xs { + margin-top: -4px; + } + .q-col-gutter-lg-y-xs > *, + .q-col-gutter-lg-xs > * { + padding-top: 4px; + } + .q-gutter-lg-x-sm, + .q-gutter-lg-sm { + margin-left: -8px; + } + .q-gutter-lg-x-sm > *, + .q-gutter-lg-sm > * { + margin-left: 8px; + } + .q-gutter-lg-y-sm, + .q-gutter-lg-sm { + margin-top: -8px; + } + .q-gutter-lg-y-sm > *, + .q-gutter-lg-sm > * { + margin-top: 8px; + } + .q-col-gutter-lg-x-sm, + .q-col-gutter-lg-sm { + margin-left: -8px; + } + .q-col-gutter-lg-x-sm > *, + .q-col-gutter-lg-sm > * { + padding-left: 8px; + } + .q-col-gutter-lg-y-sm, + .q-col-gutter-lg-sm { + margin-top: -8px; + } + .q-col-gutter-lg-y-sm > *, + .q-col-gutter-lg-sm > * { + padding-top: 8px; + } + .q-gutter-lg-x-md, + .q-gutter-lg-md { + margin-left: -16px; + } + .q-gutter-lg-x-md > *, + .q-gutter-lg-md > * { + margin-left: 16px; + } + .q-gutter-lg-y-md, + .q-gutter-lg-md { + margin-top: -16px; + } + .q-gutter-lg-y-md > *, + .q-gutter-lg-md > * { + margin-top: 16px; + } + .q-col-gutter-lg-x-md, + .q-col-gutter-lg-md { + margin-left: -16px; + } + .q-col-gutter-lg-x-md > *, + .q-col-gutter-lg-md > * { + padding-left: 16px; + } + .q-col-gutter-lg-y-md, + .q-col-gutter-lg-md { + margin-top: -16px; + } + .q-col-gutter-lg-y-md > *, + .q-col-gutter-lg-md > * { + padding-top: 16px; + } + .q-gutter-lg-x-lg, + .q-gutter-lg-lg { + margin-left: -24px; + } + .q-gutter-lg-x-lg > *, + .q-gutter-lg-lg > * { + margin-left: 24px; + } + .q-gutter-lg-y-lg, + .q-gutter-lg-lg { + margin-top: -24px; + } + .q-gutter-lg-y-lg > *, + .q-gutter-lg-lg > * { + margin-top: 24px; + } + .q-col-gutter-lg-x-lg, + .q-col-gutter-lg-lg { + margin-left: -24px; + } + .q-col-gutter-lg-x-lg > *, + .q-col-gutter-lg-lg > * { + padding-left: 24px; + } + .q-col-gutter-lg-y-lg, + .q-col-gutter-lg-lg { + margin-top: -24px; + } + .q-col-gutter-lg-y-lg > *, + .q-col-gutter-lg-lg > * { + padding-top: 24px; + } + .q-gutter-lg-x-xl, + .q-gutter-lg-xl { + margin-left: -48px; + } + .q-gutter-lg-x-xl > *, + .q-gutter-lg-xl > * { + margin-left: 48px; + } + .q-gutter-lg-y-xl, + .q-gutter-lg-xl { + margin-top: -48px; + } + .q-gutter-lg-y-xl > *, + .q-gutter-lg-xl > * { + margin-top: 48px; + } + .q-col-gutter-lg-x-xl, + .q-col-gutter-lg-xl { + margin-left: -48px; + } + .q-col-gutter-lg-x-xl > *, + .q-col-gutter-lg-xl > * { + padding-left: 48px; + } + .q-col-gutter-lg-y-xl, + .q-col-gutter-lg-xl { + margin-top: -48px; + } + .q-col-gutter-lg-y-xl > *, + .q-col-gutter-lg-xl > * { + padding-top: 48px; + } + .row-lg > .col-0, + .row-lg > .col-xs-0 { + height: auto; + width: 0%; + } + .row-lg > .offset-0, + .row-lg > .offset-xs-0 { + margin-left: 0%; + } + .column-lg > .col-0, + .column-lg > .col-xs-0 { + height: 0%; + width: auto; + } + .row-lg > .col-1, + .row-lg > .col-xs-1 { + height: auto; + width: 8.3333%; + } + .row-lg > .offset-1, + .row-lg > .offset-xs-1 { + margin-left: 8.3333%; + } + .column-lg > .col-1, + .column-lg > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-lg > .col-2, + .row-lg > .col-xs-2 { + height: auto; + width: 16.6667%; + } + .row-lg > .offset-2, + .row-lg > .offset-xs-2 { + margin-left: 16.6667%; + } + .column-lg > .col-2, + .column-lg > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-lg > .col-3, + .row-lg > .col-xs-3 { + height: auto; + width: 25%; + } + .row-lg > .offset-3, + .row-lg > .offset-xs-3 { + margin-left: 25%; + } + .column-lg > .col-3, + .column-lg > .col-xs-3 { + height: 25%; + width: auto; + } + .row-lg > .col-4, + .row-lg > .col-xs-4 { + height: auto; + width: 33.3333%; + } + .row-lg > .offset-4, + .row-lg > .offset-xs-4 { + margin-left: 33.3333%; + } + .column-lg > .col-4, + .column-lg > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-lg > .col-5, + .row-lg > .col-xs-5 { + height: auto; + width: 41.6667%; + } + .row-lg > .offset-5, + .row-lg > .offset-xs-5 { + margin-left: 41.6667%; + } + .column-lg > .col-5, + .column-lg > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-lg > .col-6, + .row-lg > .col-xs-6 { + height: auto; + width: 50%; + } + .row-lg > .offset-6, + .row-lg > .offset-xs-6 { + margin-left: 50%; + } + .column-lg > .col-6, + .column-lg > .col-xs-6 { + height: 50%; + width: auto; + } + .row-lg > .col-7, + .row-lg > .col-xs-7 { + height: auto; + width: 58.3333%; + } + .row-lg > .offset-7, + .row-lg > .offset-xs-7 { + margin-left: 58.3333%; + } + .column-lg > .col-7, + .column-lg > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-lg > .col-8, + .row-lg > .col-xs-8 { + height: auto; + width: 66.6667%; + } + .row-lg > .offset-8, + .row-lg > .offset-xs-8 { + margin-left: 66.6667%; + } + .column-lg > .col-8, + .column-lg > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-lg > .col-9, + .row-lg > .col-xs-9 { + height: auto; + width: 75%; + } + .row-lg > .offset-9, + .row-lg > .offset-xs-9 { + margin-left: 75%; + } + .column-lg > .col-9, + .column-lg > .col-xs-9 { + height: 75%; + width: auto; + } + .row-lg > .col-10, + .row-lg > .col-xs-10 { + height: auto; + width: 83.3333%; + } + .row-lg > .offset-10, + .row-lg > .offset-xs-10 { + margin-left: 83.3333%; + } + .column-lg > .col-10, + .column-lg > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-lg > .col-11, + .row-lg > .col-xs-11 { + height: auto; + width: 91.6667%; + } + .row-lg > .offset-11, + .row-lg > .offset-xs-11 { + margin-left: 91.6667%; + } + .column-lg > .col-11, + .column-lg > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-lg > .col-12, + .row-lg > .col-xs-12 { + height: auto; + width: 100%; + } + .row-lg > .offset-12, + .row-lg > .offset-xs-12 { + margin-left: 100%; + } + .column-lg > .col-12, + .column-lg > .col-xs-12 { + height: 100%; + width: auto; + } + .row-lg > .col-sm-0 { + height: auto; + width: 0%; + } + .row-lg > .offset-sm-0 { + margin-left: 0%; + } + .column-lg > .col-sm-0 { + height: 0%; + width: auto; + } + .row-lg > .col-sm-1 { + height: auto; + width: 8.3333%; + } + .row-lg > .offset-sm-1 { + margin-left: 8.3333%; + } + .column-lg > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row-lg > .col-sm-2 { + height: auto; + width: 16.6667%; + } + .row-lg > .offset-sm-2 { + margin-left: 16.6667%; + } + .column-lg > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row-lg > .col-sm-3 { + height: auto; + width: 25%; + } + .row-lg > .offset-sm-3 { + margin-left: 25%; + } + .column-lg > .col-sm-3 { + height: 25%; + width: auto; + } + .row-lg > .col-sm-4 { + height: auto; + width: 33.3333%; + } + .row-lg > .offset-sm-4 { + margin-left: 33.3333%; + } + .column-lg > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row-lg > .col-sm-5 { + height: auto; + width: 41.6667%; + } + .row-lg > .offset-sm-5 { + margin-left: 41.6667%; + } + .column-lg > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row-lg > .col-sm-6 { + height: auto; + width: 50%; + } + .row-lg > .offset-sm-6 { + margin-left: 50%; + } + .column-lg > .col-sm-6 { + height: 50%; + width: auto; + } + .row-lg > .col-sm-7 { + height: auto; + width: 58.3333%; + } + .row-lg > .offset-sm-7 { + margin-left: 58.3333%; + } + .column-lg > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row-lg > .col-sm-8 { + height: auto; + width: 66.6667%; + } + .row-lg > .offset-sm-8 { + margin-left: 66.6667%; + } + .column-lg > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row-lg > .col-sm-9 { + height: auto; + width: 75%; + } + .row-lg > .offset-sm-9 { + margin-left: 75%; + } + .column-lg > .col-sm-9 { + height: 75%; + width: auto; + } + .row-lg > .col-sm-10 { + height: auto; + width: 83.3333%; + } + .row-lg > .offset-sm-10 { + margin-left: 83.3333%; + } + .column-lg > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row-lg > .col-sm-11 { + height: auto; + width: 91.6667%; + } + .row-lg > .offset-sm-11 { + margin-left: 91.6667%; + } + .column-lg > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row-lg > .col-sm-12 { + height: auto; + width: 100%; + } + .row-lg > .offset-sm-12 { + margin-left: 100%; + } + .column-lg > .col-sm-12 { + height: 100%; + width: auto; + } + .row-lg > .col-md-0 { + height: auto; + width: 0%; + } + .row-lg > .offset-md-0 { + margin-left: 0%; + } + .column-lg > .col-md-0 { + height: 0%; + width: auto; + } + .row-lg > .col-md-1 { + height: auto; + width: 8.3333%; + } + .row-lg > .offset-md-1 { + margin-left: 8.3333%; + } + .column-lg > .col-md-1 { + height: 8.3333%; + width: auto; + } + .row-lg > .col-md-2 { + height: auto; + width: 16.6667%; + } + .row-lg > .offset-md-2 { + margin-left: 16.6667%; + } + .column-lg > .col-md-2 { + height: 16.6667%; + width: auto; + } + .row-lg > .col-md-3 { + height: auto; + width: 25%; + } + .row-lg > .offset-md-3 { + margin-left: 25%; + } + .column-lg > .col-md-3 { + height: 25%; + width: auto; + } + .row-lg > .col-md-4 { + height: auto; + width: 33.3333%; + } + .row-lg > .offset-md-4 { + margin-left: 33.3333%; + } + .column-lg > .col-md-4 { + height: 33.3333%; + width: auto; + } + .row-lg > .col-md-5 { + height: auto; + width: 41.6667%; + } + .row-lg > .offset-md-5 { + margin-left: 41.6667%; + } + .column-lg > .col-md-5 { + height: 41.6667%; + width: auto; + } + .row-lg > .col-md-6 { + height: auto; + width: 50%; + } + .row-lg > .offset-md-6 { + margin-left: 50%; + } + .column-lg > .col-md-6 { + height: 50%; + width: auto; + } + .row-lg > .col-md-7 { + height: auto; + width: 58.3333%; + } + .row-lg > .offset-md-7 { + margin-left: 58.3333%; + } + .column-lg > .col-md-7 { + height: 58.3333%; + width: auto; + } + .row-lg > .col-md-8 { + height: auto; + width: 66.6667%; + } + .row-lg > .offset-md-8 { + margin-left: 66.6667%; + } + .column-lg > .col-md-8 { + height: 66.6667%; + width: auto; + } + .row-lg > .col-md-9 { + height: auto; + width: 75%; + } + .row-lg > .offset-md-9 { + margin-left: 75%; + } + .column-lg > .col-md-9 { + height: 75%; + width: auto; + } + .row-lg > .col-md-10 { + height: auto; + width: 83.3333%; + } + .row-lg > .offset-md-10 { + margin-left: 83.3333%; + } + .column-lg > .col-md-10 { + height: 83.3333%; + width: auto; + } + .row-lg > .col-md-11 { + height: auto; + width: 91.6667%; + } + .row-lg > .offset-md-11 { + margin-left: 91.6667%; + } + .column-lg > .col-md-11 { + height: 91.6667%; + width: auto; + } + .row-lg > .col-md-12 { + height: auto; + width: 100%; + } + .row-lg > .offset-md-12 { + margin-left: 100%; + } + .column-lg > .col-md-12 { + height: 100%; + width: auto; + } + .row-lg > .col-lg-0 { + height: auto; + width: 0%; + } + .row-lg > .offset-lg-0 { + margin-left: 0%; + } + .column-lg > .col-lg-0 { + height: 0%; + width: auto; + } + .row-lg > .col-lg-1 { + height: auto; + width: 8.3333%; + } + .row-lg > .offset-lg-1 { + margin-left: 8.3333%; + } + .column-lg > .col-lg-1 { + height: 8.3333%; + width: auto; + } + .row-lg > .col-lg-2 { + height: auto; + width: 16.6667%; + } + .row-lg > .offset-lg-2 { + margin-left: 16.6667%; + } + .column-lg > .col-lg-2 { + height: 16.6667%; + width: auto; + } + .row-lg > .col-lg-3 { + height: auto; + width: 25%; + } + .row-lg > .offset-lg-3 { + margin-left: 25%; + } + .column-lg > .col-lg-3 { + height: 25%; + width: auto; + } + .row-lg > .col-lg-4 { + height: auto; + width: 33.3333%; + } + .row-lg > .offset-lg-4 { + margin-left: 33.3333%; + } + .column-lg > .col-lg-4 { + height: 33.3333%; + width: auto; + } + .row-lg > .col-lg-5 { + height: auto; + width: 41.6667%; + } + .row-lg > .offset-lg-5 { + margin-left: 41.6667%; + } + .column-lg > .col-lg-5 { + height: 41.6667%; + width: auto; + } + .row-lg > .col-lg-6 { + height: auto; + width: 50%; + } + .row-lg > .offset-lg-6 { + margin-left: 50%; + } + .column-lg > .col-lg-6 { + height: 50%; + width: auto; + } + .row-lg > .col-lg-7 { + height: auto; + width: 58.3333%; + } + .row-lg > .offset-lg-7 { + margin-left: 58.3333%; + } + .column-lg > .col-lg-7 { + height: 58.3333%; + width: auto; + } + .row-lg > .col-lg-8 { + height: auto; + width: 66.6667%; + } + .row-lg > .offset-lg-8 { + margin-left: 66.6667%; + } + .column-lg > .col-lg-8 { + height: 66.6667%; + width: auto; + } + .row-lg > .col-lg-9 { + height: auto; + width: 75%; + } + .row-lg > .offset-lg-9 { + margin-left: 75%; + } + .column-lg > .col-lg-9 { + height: 75%; + width: auto; + } + .row-lg > .col-lg-10 { + height: auto; + width: 83.3333%; + } + .row-lg > .offset-lg-10 { + margin-left: 83.3333%; + } + .column-lg > .col-lg-10 { + height: 83.3333%; + width: auto; + } + .row-lg > .col-lg-11 { + height: auto; + width: 91.6667%; + } + .row-lg > .offset-lg-11 { + margin-left: 91.6667%; + } + .column-lg > .col-lg-11 { + height: 91.6667%; + width: auto; + } + .row-lg > .col-lg-12 { + height: auto; + width: 100%; + } + .row-lg > .offset-lg-12 { + margin-left: 100%; + } + .column-lg > .col-lg-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1920px) { + .flex-xl-block { + display: block; + } + .flex-xl-inline { + display: inline-block; + } + .q-pa-xl-none { + padding: 0 0; + } + .q-pl-xl-none, + .q-px-xl-none { + padding-left: 0; + } + .q-pr-xl-none, + .q-px-xl-none { + padding-right: 0; + } + .q-pt-xl-none, + .q-py-xl-none { + padding-top: 0; + } + .q-pb-xl-none, + .q-py-xl-none { + padding-bottom: 0; + } + .q-ma-xl-none { + margin: 0 0; + } + .q-ml-xl-none, + .q-mx-xl-none { + margin-left: 0; + } + .q-mr-xl-none, + .q-mx-xl-none { + margin-right: 0; + } + .q-mt-xl-none, + .q-my-xl-none { + margin-top: 0; + } + .q-mb-xl-none, + .q-my-xl-none { + margin-bottom: 0; + } + .q-pa-xl-xs { + padding: 4px 4px; + } + .q-pl-xl-xs, + .q-px-xl-xs { + padding-left: 4px; + } + .q-pr-xl-xs, + .q-px-xl-xs { + padding-right: 4px; + } + .q-pt-xl-xs, + .q-py-xl-xs { + padding-top: 4px; + } + .q-pb-xl-xs, + .q-py-xl-xs { + padding-bottom: 4px; + } + .q-ma-xl-xs { + margin: 4px 4px; + } + .q-ml-xl-xs, + .q-mx-xl-xs { + margin-left: 4px; + } + .q-mr-xl-xs, + .q-mx-xl-xs { + margin-right: 4px; + } + .q-mt-xl-xs, + .q-my-xl-xs { + margin-top: 4px; + } + .q-mb-xl-xs, + .q-my-xl-xs { + margin-bottom: 4px; + } + .q-pa-xl-sm { + padding: 8px 8px; + } + .q-pl-xl-sm, + .q-px-xl-sm { + padding-left: 8px; + } + .q-pr-xl-sm, + .q-px-xl-sm { + padding-right: 8px; + } + .q-pt-xl-sm, + .q-py-xl-sm { + padding-top: 8px; + } + .q-pb-xl-sm, + .q-py-xl-sm { + padding-bottom: 8px; + } + .q-ma-xl-sm { + margin: 8px 8px; + } + .q-ml-xl-sm, + .q-mx-xl-sm { + margin-left: 8px; + } + .q-mr-xl-sm, + .q-mx-xl-sm { + margin-right: 8px; + } + .q-mt-xl-sm, + .q-my-xl-sm { + margin-top: 8px; + } + .q-mb-xl-sm, + .q-my-xl-sm { + margin-bottom: 8px; + } + .q-pa-xl-md { + padding: 16px 16px; + } + .q-pl-xl-md, + .q-px-xl-md { + padding-left: 16px; + } + .q-pr-xl-md, + .q-px-xl-md { + padding-right: 16px; + } + .q-pt-xl-md, + .q-py-xl-md { + padding-top: 16px; + } + .q-pb-xl-md, + .q-py-xl-md { + padding-bottom: 16px; + } + .q-ma-xl-md { + margin: 16px 16px; + } + .q-ml-xl-md, + .q-mx-xl-md { + margin-left: 16px; + } + .q-mr-xl-md, + .q-mx-xl-md { + margin-right: 16px; + } + .q-mt-xl-md, + .q-my-xl-md { + margin-top: 16px; + } + .q-mb-xl-md, + .q-my-xl-md { + margin-bottom: 16px; + } + .q-pa-xl-lg { + padding: 24px 24px; + } + .q-pl-xl-lg, + .q-px-xl-lg { + padding-left: 24px; + } + .q-pr-xl-lg, + .q-px-xl-lg { + padding-right: 24px; + } + .q-pt-xl-lg, + .q-py-xl-lg { + padding-top: 24px; + } + .q-pb-xl-lg, + .q-py-xl-lg { + padding-bottom: 24px; + } + .q-ma-xl-lg { + margin: 24px 24px; + } + .q-ml-xl-lg, + .q-mx-xl-lg { + margin-left: 24px; + } + .q-mr-xl-lg, + .q-mx-xl-lg { + margin-right: 24px; + } + .q-mt-xl-lg, + .q-my-xl-lg { + margin-top: 24px; + } + .q-mb-xl-lg, + .q-my-xl-lg { + margin-bottom: 24px; + } + .q-pa-xl-xl { + padding: 48px 48px; + } + .q-pl-xl-xl, + .q-px-xl-xl { + padding-left: 48px; + } + .q-pr-xl-xl, + .q-px-xl-xl { + padding-right: 48px; + } + .q-pt-xl-xl, + .q-py-xl-xl { + padding-top: 48px; + } + .q-pb-xl-xl, + .q-py-xl-xl { + padding-bottom: 48px; + } + .q-ma-xl-xl { + margin: 48px 48px; + } + .q-ml-xl-xl, + .q-mx-xl-xl { + margin-left: 48px; + } + .q-mr-xl-xl, + .q-mx-xl-xl { + margin-right: 48px; + } + .q-mt-xl-xl, + .q-my-xl-xl { + margin-top: 48px; + } + .q-mb-xl-xl, + .q-my-xl-xl { + margin-bottom: 48px; + } + .q-ml-xl-auto, + .q-mx-xl-auto { + margin-left: auto; + } + .q-mr-xl-auto, + .q-mx-xl-auto { + margin-right: auto; + } + .row.inline-xl, + .column.inline-xl, + .flex.inline-xl { + display: inline-flex; + } + .row-xl, + .column-xl, + .flex-xl { + display: flex; + flex-wrap: wrap; + } + .row-xl.inline, + .column-xl.inline, + .flex-xl.inline, + .row-xl.inline-xl, + .column-xl.inline-xl, + .flex-xl.inline-xl { + display: inline-flex; + } + .row.reverse-xl { + flex-direction: row-reverse; + } + .row-xl { + flex-direction: row; + } + .row-xl.reverse, + .row-xl.reverse-xl { + flex-direction: row-reverse; + } + .column.reverse-xl { + flex-direction: column-reverse; + } + .column-xl { + flex-direction: column; + } + .column-xl.reverse, + .column-xl.reverse-xl { + flex-direction: column-reverse; + } + .wrap-xl { + flex-wrap: wrap; + } + .no-wrap-xl { + flex-wrap: nowrap; + } + .reverse-wrap-xl { + flex-wrap: wrap-reverse; + } + .order-xl-first { + order: -10000; + } + .order-xl-last { + order: 10000; + } + .order-xl-none { + order: 0; + } + .justify-xl-start { + justify-content: flex-start; + } + .justify-xl-end { + justify-content: flex-end; + } + .justify-xl-center, + .flex-xl-center { + justify-content: center; + } + .justify-xl-between { + justify-content: space-between; + } + .justify-xl-around { + justify-content: space-around; + } + .justify-xl-evenly { + justify-content: space-evenly; + } + .items-xl-start { + align-items: flex-start; + } + .items-xl-end { + align-items: flex-end; + } + .items-xl-center, + .flex-xl-center { + align-items: center; + } + .items-xl-baseline { + align-items: baseline; + } + .items-xl-stretch { + align-items: stretch; + } + .content-xl-start { + align-content: flex-start; + } + .content-xl-end { + align-content: flex-end; + } + .content-xl-center { + align-content: center; + } + .content-xl-between { + align-content: space-between; + } + .content-xl-around { + align-content: space-around; + } + .self-xl-start { + align-self: flex-start; + } + .self-xl-end { + align-self: flex-end; + } + .self-xl-center { + align-self: center; + } + .self-xl-baseline { + align-self: baseline; + } + .self-xl-stretch { + align-self: stretch; + } + .q-gutter-xl-x-none, + .q-gutter-xl-none { + margin-left: 0; + } + .q-gutter-xl-x-none > *, + .q-gutter-xl-none > * { + margin-left: 0; + } + .q-gutter-xl-y-none, + .q-gutter-xl-none { + margin-top: 0; + } + .q-gutter-xl-y-none > *, + .q-gutter-xl-none > * { + margin-top: 0; + } + .q-col-gutter-xl-x-none, + .q-col-gutter-xl-none { + margin-left: 0; + } + .q-col-gutter-xl-x-none > *, + .q-col-gutter-xl-none > * { + padding-left: 0; + } + .q-col-gutter-xl-y-none, + .q-col-gutter-xl-none { + margin-top: 0; + } + .q-col-gutter-xl-y-none > *, + .q-col-gutter-xl-none > * { + padding-top: 0; + } + .q-gutter-xl-x-xs, + .q-gutter-xl-xs { + margin-left: -4px; + } + .q-gutter-xl-x-xs > *, + .q-gutter-xl-xs > * { + margin-left: 4px; + } + .q-gutter-xl-y-xs, + .q-gutter-xl-xs { + margin-top: -4px; + } + .q-gutter-xl-y-xs > *, + .q-gutter-xl-xs > * { + margin-top: 4px; + } + .q-col-gutter-xl-x-xs, + .q-col-gutter-xl-xs { + margin-left: -4px; + } + .q-col-gutter-xl-x-xs > *, + .q-col-gutter-xl-xs > * { + padding-left: 4px; + } + .q-col-gutter-xl-y-xs, + .q-col-gutter-xl-xs { + margin-top: -4px; + } + .q-col-gutter-xl-y-xs > *, + .q-col-gutter-xl-xs > * { + padding-top: 4px; + } + .q-gutter-xl-x-sm, + .q-gutter-xl-sm { + margin-left: -8px; + } + .q-gutter-xl-x-sm > *, + .q-gutter-xl-sm > * { + margin-left: 8px; + } + .q-gutter-xl-y-sm, + .q-gutter-xl-sm { + margin-top: -8px; + } + .q-gutter-xl-y-sm > *, + .q-gutter-xl-sm > * { + margin-top: 8px; + } + .q-col-gutter-xl-x-sm, + .q-col-gutter-xl-sm { + margin-left: -8px; + } + .q-col-gutter-xl-x-sm > *, + .q-col-gutter-xl-sm > * { + padding-left: 8px; + } + .q-col-gutter-xl-y-sm, + .q-col-gutter-xl-sm { + margin-top: -8px; + } + .q-col-gutter-xl-y-sm > *, + .q-col-gutter-xl-sm > * { + padding-top: 8px; + } + .q-gutter-xl-x-md, + .q-gutter-xl-md { + margin-left: -16px; + } + .q-gutter-xl-x-md > *, + .q-gutter-xl-md > * { + margin-left: 16px; + } + .q-gutter-xl-y-md, + .q-gutter-xl-md { + margin-top: -16px; + } + .q-gutter-xl-y-md > *, + .q-gutter-xl-md > * { + margin-top: 16px; + } + .q-col-gutter-xl-x-md, + .q-col-gutter-xl-md { + margin-left: -16px; + } + .q-col-gutter-xl-x-md > *, + .q-col-gutter-xl-md > * { + padding-left: 16px; + } + .q-col-gutter-xl-y-md, + .q-col-gutter-xl-md { + margin-top: -16px; + } + .q-col-gutter-xl-y-md > *, + .q-col-gutter-xl-md > * { + padding-top: 16px; + } + .q-gutter-xl-x-lg, + .q-gutter-xl-lg { + margin-left: -24px; + } + .q-gutter-xl-x-lg > *, + .q-gutter-xl-lg > * { + margin-left: 24px; + } + .q-gutter-xl-y-lg, + .q-gutter-xl-lg { + margin-top: -24px; + } + .q-gutter-xl-y-lg > *, + .q-gutter-xl-lg > * { + margin-top: 24px; + } + .q-col-gutter-xl-x-lg, + .q-col-gutter-xl-lg { + margin-left: -24px; + } + .q-col-gutter-xl-x-lg > *, + .q-col-gutter-xl-lg > * { + padding-left: 24px; + } + .q-col-gutter-xl-y-lg, + .q-col-gutter-xl-lg { + margin-top: -24px; + } + .q-col-gutter-xl-y-lg > *, + .q-col-gutter-xl-lg > * { + padding-top: 24px; + } + .q-gutter-xl-x-xl, + .q-gutter-xl-xl { + margin-left: -48px; + } + .q-gutter-xl-x-xl > *, + .q-gutter-xl-xl > * { + margin-left: 48px; + } + .q-gutter-xl-y-xl, + .q-gutter-xl-xl { + margin-top: -48px; + } + .q-gutter-xl-y-xl > *, + .q-gutter-xl-xl > * { + margin-top: 48px; + } + .q-col-gutter-xl-x-xl, + .q-col-gutter-xl-xl { + margin-left: -48px; + } + .q-col-gutter-xl-x-xl > *, + .q-col-gutter-xl-xl > * { + padding-left: 48px; + } + .q-col-gutter-xl-y-xl, + .q-col-gutter-xl-xl { + margin-top: -48px; + } + .q-col-gutter-xl-y-xl > *, + .q-col-gutter-xl-xl > * { + padding-top: 48px; + } + .row-xl > .col-0, + .row-xl > .col-xs-0 { + height: auto; + width: 0%; + } + .row-xl > .offset-0, + .row-xl > .offset-xs-0 { + margin-left: 0%; + } + .column-xl > .col-0, + .column-xl > .col-xs-0 { + height: 0%; + width: auto; + } + .row-xl > .col-1, + .row-xl > .col-xs-1 { + height: auto; + width: 8.3333%; + } + .row-xl > .offset-1, + .row-xl > .offset-xs-1 { + margin-left: 8.3333%; + } + .column-xl > .col-1, + .column-xl > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-2, + .row-xl > .col-xs-2 { + height: auto; + width: 16.6667%; + } + .row-xl > .offset-2, + .row-xl > .offset-xs-2 { + margin-left: 16.6667%; + } + .column-xl > .col-2, + .column-xl > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-3, + .row-xl > .col-xs-3 { + height: auto; + width: 25%; + } + .row-xl > .offset-3, + .row-xl > .offset-xs-3 { + margin-left: 25%; + } + .column-xl > .col-3, + .column-xl > .col-xs-3 { + height: 25%; + width: auto; + } + .row-xl > .col-4, + .row-xl > .col-xs-4 { + height: auto; + width: 33.3333%; + } + .row-xl > .offset-4, + .row-xl > .offset-xs-4 { + margin-left: 33.3333%; + } + .column-xl > .col-4, + .column-xl > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-5, + .row-xl > .col-xs-5 { + height: auto; + width: 41.6667%; + } + .row-xl > .offset-5, + .row-xl > .offset-xs-5 { + margin-left: 41.6667%; + } + .column-xl > .col-5, + .column-xl > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-6, + .row-xl > .col-xs-6 { + height: auto; + width: 50%; + } + .row-xl > .offset-6, + .row-xl > .offset-xs-6 { + margin-left: 50%; + } + .column-xl > .col-6, + .column-xl > .col-xs-6 { + height: 50%; + width: auto; + } + .row-xl > .col-7, + .row-xl > .col-xs-7 { + height: auto; + width: 58.3333%; + } + .row-xl > .offset-7, + .row-xl > .offset-xs-7 { + margin-left: 58.3333%; + } + .column-xl > .col-7, + .column-xl > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-8, + .row-xl > .col-xs-8 { + height: auto; + width: 66.6667%; + } + .row-xl > .offset-8, + .row-xl > .offset-xs-8 { + margin-left: 66.6667%; + } + .column-xl > .col-8, + .column-xl > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-9, + .row-xl > .col-xs-9 { + height: auto; + width: 75%; + } + .row-xl > .offset-9, + .row-xl > .offset-xs-9 { + margin-left: 75%; + } + .column-xl > .col-9, + .column-xl > .col-xs-9 { + height: 75%; + width: auto; + } + .row-xl > .col-10, + .row-xl > .col-xs-10 { + height: auto; + width: 83.3333%; + } + .row-xl > .offset-10, + .row-xl > .offset-xs-10 { + margin-left: 83.3333%; + } + .column-xl > .col-10, + .column-xl > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-11, + .row-xl > .col-xs-11 { + height: auto; + width: 91.6667%; + } + .row-xl > .offset-11, + .row-xl > .offset-xs-11 { + margin-left: 91.6667%; + } + .column-xl > .col-11, + .column-xl > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-12, + .row-xl > .col-xs-12 { + height: auto; + width: 100%; + } + .row-xl > .offset-12, + .row-xl > .offset-xs-12 { + margin-left: 100%; + } + .column-xl > .col-12, + .column-xl > .col-xs-12 { + height: 100%; + width: auto; + } + .row-xl > .col-sm-0 { + height: auto; + width: 0%; + } + .row-xl > .offset-sm-0 { + margin-left: 0%; + } + .column-xl > .col-sm-0 { + height: 0%; + width: auto; + } + .row-xl > .col-sm-1 { + height: auto; + width: 8.3333%; + } + .row-xl > .offset-sm-1 { + margin-left: 8.3333%; + } + .column-xl > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-sm-2 { + height: auto; + width: 16.6667%; + } + .row-xl > .offset-sm-2 { + margin-left: 16.6667%; + } + .column-xl > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-sm-3 { + height: auto; + width: 25%; + } + .row-xl > .offset-sm-3 { + margin-left: 25%; + } + .column-xl > .col-sm-3 { + height: 25%; + width: auto; + } + .row-xl > .col-sm-4 { + height: auto; + width: 33.3333%; + } + .row-xl > .offset-sm-4 { + margin-left: 33.3333%; + } + .column-xl > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-sm-5 { + height: auto; + width: 41.6667%; + } + .row-xl > .offset-sm-5 { + margin-left: 41.6667%; + } + .column-xl > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-sm-6 { + height: auto; + width: 50%; + } + .row-xl > .offset-sm-6 { + margin-left: 50%; + } + .column-xl > .col-sm-6 { + height: 50%; + width: auto; + } + .row-xl > .col-sm-7 { + height: auto; + width: 58.3333%; + } + .row-xl > .offset-sm-7 { + margin-left: 58.3333%; + } + .column-xl > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-sm-8 { + height: auto; + width: 66.6667%; + } + .row-xl > .offset-sm-8 { + margin-left: 66.6667%; + } + .column-xl > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-sm-9 { + height: auto; + width: 75%; + } + .row-xl > .offset-sm-9 { + margin-left: 75%; + } + .column-xl > .col-sm-9 { + height: 75%; + width: auto; + } + .row-xl > .col-sm-10 { + height: auto; + width: 83.3333%; + } + .row-xl > .offset-sm-10 { + margin-left: 83.3333%; + } + .column-xl > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-sm-11 { + height: auto; + width: 91.6667%; + } + .row-xl > .offset-sm-11 { + margin-left: 91.6667%; + } + .column-xl > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-sm-12 { + height: auto; + width: 100%; + } + .row-xl > .offset-sm-12 { + margin-left: 100%; + } + .column-xl > .col-sm-12 { + height: 100%; + width: auto; + } + .row-xl > .col-md-0 { + height: auto; + width: 0%; + } + .row-xl > .offset-md-0 { + margin-left: 0%; + } + .column-xl > .col-md-0 { + height: 0%; + width: auto; + } + .row-xl > .col-md-1 { + height: auto; + width: 8.3333%; + } + .row-xl > .offset-md-1 { + margin-left: 8.3333%; + } + .column-xl > .col-md-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-md-2 { + height: auto; + width: 16.6667%; + } + .row-xl > .offset-md-2 { + margin-left: 16.6667%; + } + .column-xl > .col-md-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-md-3 { + height: auto; + width: 25%; + } + .row-xl > .offset-md-3 { + margin-left: 25%; + } + .column-xl > .col-md-3 { + height: 25%; + width: auto; + } + .row-xl > .col-md-4 { + height: auto; + width: 33.3333%; + } + .row-xl > .offset-md-4 { + margin-left: 33.3333%; + } + .column-xl > .col-md-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-md-5 { + height: auto; + width: 41.6667%; + } + .row-xl > .offset-md-5 { + margin-left: 41.6667%; + } + .column-xl > .col-md-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-md-6 { + height: auto; + width: 50%; + } + .row-xl > .offset-md-6 { + margin-left: 50%; + } + .column-xl > .col-md-6 { + height: 50%; + width: auto; + } + .row-xl > .col-md-7 { + height: auto; + width: 58.3333%; + } + .row-xl > .offset-md-7 { + margin-left: 58.3333%; + } + .column-xl > .col-md-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-md-8 { + height: auto; + width: 66.6667%; + } + .row-xl > .offset-md-8 { + margin-left: 66.6667%; + } + .column-xl > .col-md-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-md-9 { + height: auto; + width: 75%; + } + .row-xl > .offset-md-9 { + margin-left: 75%; + } + .column-xl > .col-md-9 { + height: 75%; + width: auto; + } + .row-xl > .col-md-10 { + height: auto; + width: 83.3333%; + } + .row-xl > .offset-md-10 { + margin-left: 83.3333%; + } + .column-xl > .col-md-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-md-11 { + height: auto; + width: 91.6667%; + } + .row-xl > .offset-md-11 { + margin-left: 91.6667%; + } + .column-xl > .col-md-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-md-12 { + height: auto; + width: 100%; + } + .row-xl > .offset-md-12 { + margin-left: 100%; + } + .column-xl > .col-md-12 { + height: 100%; + width: auto; + } + .row-xl > .col-lg-0 { + height: auto; + width: 0%; + } + .row-xl > .offset-lg-0 { + margin-left: 0%; + } + .column-xl > .col-lg-0 { + height: 0%; + width: auto; + } + .row-xl > .col-lg-1 { + height: auto; + width: 8.3333%; + } + .row-xl > .offset-lg-1 { + margin-left: 8.3333%; + } + .column-xl > .col-lg-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-lg-2 { + height: auto; + width: 16.6667%; + } + .row-xl > .offset-lg-2 { + margin-left: 16.6667%; + } + .column-xl > .col-lg-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-lg-3 { + height: auto; + width: 25%; + } + .row-xl > .offset-lg-3 { + margin-left: 25%; + } + .column-xl > .col-lg-3 { + height: 25%; + width: auto; + } + .row-xl > .col-lg-4 { + height: auto; + width: 33.3333%; + } + .row-xl > .offset-lg-4 { + margin-left: 33.3333%; + } + .column-xl > .col-lg-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-lg-5 { + height: auto; + width: 41.6667%; + } + .row-xl > .offset-lg-5 { + margin-left: 41.6667%; + } + .column-xl > .col-lg-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-lg-6 { + height: auto; + width: 50%; + } + .row-xl > .offset-lg-6 { + margin-left: 50%; + } + .column-xl > .col-lg-6 { + height: 50%; + width: auto; + } + .row-xl > .col-lg-7 { + height: auto; + width: 58.3333%; + } + .row-xl > .offset-lg-7 { + margin-left: 58.3333%; + } + .column-xl > .col-lg-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-lg-8 { + height: auto; + width: 66.6667%; + } + .row-xl > .offset-lg-8 { + margin-left: 66.6667%; + } + .column-xl > .col-lg-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-lg-9 { + height: auto; + width: 75%; + } + .row-xl > .offset-lg-9 { + margin-left: 75%; + } + .column-xl > .col-lg-9 { + height: 75%; + width: auto; + } + .row-xl > .col-lg-10 { + height: auto; + width: 83.3333%; + } + .row-xl > .offset-lg-10 { + margin-left: 83.3333%; + } + .column-xl > .col-lg-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-lg-11 { + height: auto; + width: 91.6667%; + } + .row-xl > .offset-lg-11 { + margin-left: 91.6667%; + } + .column-xl > .col-lg-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-lg-12 { + height: auto; + width: 100%; + } + .row-xl > .offset-lg-12 { + margin-left: 100%; + } + .column-xl > .col-lg-12 { + height: 100%; + width: auto; + } + .row-xl > .col-xl-0 { + height: auto; + width: 0%; + } + .row-xl > .offset-xl-0 { + margin-left: 0%; + } + .column-xl > .col-xl-0 { + height: 0%; + width: auto; + } + .row-xl > .col-xl-1 { + height: auto; + width: 8.3333%; + } + .row-xl > .offset-xl-1 { + margin-left: 8.3333%; + } + .column-xl > .col-xl-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-xl-2 { + height: auto; + width: 16.6667%; + } + .row-xl > .offset-xl-2 { + margin-left: 16.6667%; + } + .column-xl > .col-xl-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-xl-3 { + height: auto; + width: 25%; + } + .row-xl > .offset-xl-3 { + margin-left: 25%; + } + .column-xl > .col-xl-3 { + height: 25%; + width: auto; + } + .row-xl > .col-xl-4 { + height: auto; + width: 33.3333%; + } + .row-xl > .offset-xl-4 { + margin-left: 33.3333%; + } + .column-xl > .col-xl-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-xl-5 { + height: auto; + width: 41.6667%; + } + .row-xl > .offset-xl-5 { + margin-left: 41.6667%; + } + .column-xl > .col-xl-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-xl-6 { + height: auto; + width: 50%; + } + .row-xl > .offset-xl-6 { + margin-left: 50%; + } + .column-xl > .col-xl-6 { + height: 50%; + width: auto; + } + .row-xl > .col-xl-7 { + height: auto; + width: 58.3333%; + } + .row-xl > .offset-xl-7 { + margin-left: 58.3333%; + } + .column-xl > .col-xl-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-xl-8 { + height: auto; + width: 66.6667%; + } + .row-xl > .offset-xl-8 { + margin-left: 66.6667%; + } + .column-xl > .col-xl-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-xl-9 { + height: auto; + width: 75%; + } + .row-xl > .offset-xl-9 { + margin-left: 75%; + } + .column-xl > .col-xl-9 { + height: 75%; + width: auto; + } + .row-xl > .col-xl-10 { + height: auto; + width: 83.3333%; + } + .row-xl > .offset-xl-10 { + margin-left: 83.3333%; + } + .column-xl > .col-xl-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-xl-11 { + height: auto; + width: 91.6667%; + } + .row-xl > .offset-xl-11 { + margin-left: 91.6667%; + } + .column-xl > .col-xl-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-xl-12 { + height: auto; + width: 100%; + } + .row-xl > .offset-xl-12 { + margin-left: 100%; + } + .column-xl > .col-xl-12 { + height: 100%; + width: auto; + } +} diff --git a/dist/quasar.addon.min.css b/dist/quasar.addon.min.css new file mode 100644 index 00000000000..390b9a62918 --- /dev/null +++ b/dist/quasar.addon.min.css @@ -0,0 +1 @@ +@media (min-width:0){.flex-block,.flex-xs-block{display:block}.flex-inline,.flex-xs-inline{display:inline-block}.q-pa-xs-none{padding:0 0}.q-pl-xs-none,.q-px-xs-none{padding-left:0}.q-pr-xs-none,.q-px-xs-none{padding-right:0}.q-pt-xs-none,.q-py-xs-none{padding-top:0}.q-pb-xs-none,.q-py-xs-none{padding-bottom:0}.q-ma-xs-none{margin:0 0}.q-ml-xs-none,.q-mx-xs-none{margin-left:0}.q-mr-xs-none,.q-mx-xs-none{margin-right:0}.q-mt-xs-none,.q-my-xs-none{margin-top:0}.q-mb-xs-none,.q-my-xs-none{margin-bottom:0}.q-pa-xs-xs{padding:4px 4px}.q-pl-xs-xs,.q-px-xs-xs{padding-left:4px}.q-pr-xs-xs,.q-px-xs-xs{padding-right:4px}.q-pt-xs-xs,.q-py-xs-xs{padding-top:4px}.q-pb-xs-xs,.q-py-xs-xs{padding-bottom:4px}.q-ma-xs-xs{margin:4px 4px}.q-ml-xs-xs,.q-mx-xs-xs{margin-left:4px}.q-mr-xs-xs,.q-mx-xs-xs{margin-right:4px}.q-mt-xs-xs,.q-my-xs-xs{margin-top:4px}.q-mb-xs-xs,.q-my-xs-xs{margin-bottom:4px}.q-pa-xs-sm{padding:8px 8px}.q-pl-xs-sm,.q-px-xs-sm{padding-left:8px}.q-pr-xs-sm,.q-px-xs-sm{padding-right:8px}.q-pt-xs-sm,.q-py-xs-sm{padding-top:8px}.q-pb-xs-sm,.q-py-xs-sm{padding-bottom:8px}.q-ma-xs-sm{margin:8px 8px}.q-ml-xs-sm,.q-mx-xs-sm{margin-left:8px}.q-mr-xs-sm,.q-mx-xs-sm{margin-right:8px}.q-mt-xs-sm,.q-my-xs-sm{margin-top:8px}.q-mb-xs-sm,.q-my-xs-sm{margin-bottom:8px}.q-pa-xs-md{padding:16px 16px}.q-pl-xs-md,.q-px-xs-md{padding-left:16px}.q-pr-xs-md,.q-px-xs-md{padding-right:16px}.q-pt-xs-md,.q-py-xs-md{padding-top:16px}.q-pb-xs-md,.q-py-xs-md{padding-bottom:16px}.q-ma-xs-md{margin:16px 16px}.q-ml-xs-md,.q-mx-xs-md{margin-left:16px}.q-mr-xs-md,.q-mx-xs-md{margin-right:16px}.q-mt-xs-md,.q-my-xs-md{margin-top:16px}.q-mb-xs-md,.q-my-xs-md{margin-bottom:16px}.q-pa-xs-lg{padding:24px 24px}.q-pl-xs-lg,.q-px-xs-lg{padding-left:24px}.q-pr-xs-lg,.q-px-xs-lg{padding-right:24px}.q-pt-xs-lg,.q-py-xs-lg{padding-top:24px}.q-pb-xs-lg,.q-py-xs-lg{padding-bottom:24px}.q-ma-xs-lg{margin:24px 24px}.q-ml-xs-lg,.q-mx-xs-lg{margin-left:24px}.q-mr-xs-lg,.q-mx-xs-lg{margin-right:24px}.q-mt-xs-lg,.q-my-xs-lg{margin-top:24px}.q-mb-xs-lg,.q-my-xs-lg{margin-bottom:24px}.q-pa-xs-xl{padding:48px 48px}.q-pl-xs-xl,.q-px-xs-xl{padding-left:48px}.q-pr-xs-xl,.q-px-xs-xl{padding-right:48px}.q-pt-xs-xl,.q-py-xs-xl{padding-top:48px}.q-pb-xs-xl,.q-py-xs-xl{padding-bottom:48px}.q-ma-xs-xl{margin:48px 48px}.q-ml-xs-xl,.q-mx-xs-xl{margin-left:48px}.q-mr-xs-xl,.q-mx-xs-xl{margin-right:48px}.q-mt-xs-xl,.q-my-xs-xl{margin-top:48px}.q-mb-xs-xl,.q-my-xs-xl{margin-bottom:48px}.q-ml-xs-auto,.q-mx-xs-auto{margin-left:auto}.q-mr-xs-auto,.q-mx-xs-auto{margin-right:auto}.column-xs,.flex-xs,.row-xs{display:flex;flex-wrap:wrap}.column-xs.inline-xs,.flex-xs.inline-xs,.row-xs.inline-xs{display:inline-flex}.row-xs{flex-direction:row}.row-xs.reverse-xs{flex-direction:row-reverse}.column-xs{flex-direction:column}.column-xs.reverse-xs{flex-direction:column-reverse}.wrap-xs{flex-wrap:wrap}.no-wrap-xs{flex-wrap:nowrap}.reverse-wrap-xs{flex-wrap:wrap-reverse}.order-xs-first{order:-10000}.order-xs-last{order:10000}.order-xs-none{order:0}.justify-xs-start{justify-content:flex-start}.justify-xs-end{justify-content:flex-end}.flex-xs-center,.justify-xs-center{justify-content:center}.justify-xs-between{justify-content:space-between}.justify-xs-around{justify-content:space-around}.justify-xs-evenly{justify-content:space-evenly}.items-xs-start{align-items:flex-start}.items-xs-end{align-items:flex-end}.flex-xs-center,.items-xs-center{align-items:center}.items-xs-baseline{align-items:baseline}.items-xs-stretch{align-items:stretch}.content-xs-start{align-content:flex-start}.content-xs-end{align-content:flex-end}.content-xs-center{align-content:center}.content-xs-between{align-content:space-between}.content-xs-around{align-content:space-around}.self-xs-start{align-self:flex-start}.self-xs-end{align-self:flex-end}.self-xs-center{align-self:center}.self-xs-baseline{align-self:baseline}.self-xs-stretch{align-self:stretch}.q-gutter-xs-none,.q-gutter-xs-none>*,.q-gutter-xs-x-none,.q-gutter-xs-x-none>*{margin-left:0}.q-gutter-xs-none,.q-gutter-xs-none>*,.q-gutter-xs-y-none,.q-gutter-xs-y-none>*{margin-top:0}.q-col-gutter-xs-none,.q-col-gutter-xs-x-none{margin-left:0}.q-col-gutter-xs-none>*,.q-col-gutter-xs-x-none>*{padding-left:0}.q-col-gutter-xs-none,.q-col-gutter-xs-y-none{margin-top:0}.q-col-gutter-xs-none>*,.q-col-gutter-xs-y-none>*{padding-top:0}.q-gutter-xs-x-xs,.q-gutter-xs-xs{margin-left:-4px}.q-gutter-xs-x-xs>*,.q-gutter-xs-xs>*{margin-left:4px}.q-gutter-xs-xs,.q-gutter-xs-y-xs{margin-top:-4px}.q-gutter-xs-xs>*,.q-gutter-xs-y-xs>*{margin-top:4px}.q-col-gutter-xs-x-xs,.q-col-gutter-xs-xs{margin-left:-4px}.q-col-gutter-xs-x-xs>*,.q-col-gutter-xs-xs>*{padding-left:4px}.q-col-gutter-xs-xs,.q-col-gutter-xs-y-xs{margin-top:-4px}.q-col-gutter-xs-xs>*,.q-col-gutter-xs-y-xs>*{padding-top:4px}.q-gutter-xs-sm,.q-gutter-xs-x-sm{margin-left:-8px}.q-gutter-xs-sm>*,.q-gutter-xs-x-sm>*{margin-left:8px}.q-gutter-xs-sm,.q-gutter-xs-y-sm{margin-top:-8px}.q-gutter-xs-sm>*,.q-gutter-xs-y-sm>*{margin-top:8px}.q-col-gutter-xs-sm,.q-col-gutter-xs-x-sm{margin-left:-8px}.q-col-gutter-xs-sm>*,.q-col-gutter-xs-x-sm>*{padding-left:8px}.q-col-gutter-xs-sm,.q-col-gutter-xs-y-sm{margin-top:-8px}.q-col-gutter-xs-sm>*,.q-col-gutter-xs-y-sm>*{padding-top:8px}.q-gutter-xs-md,.q-gutter-xs-x-md{margin-left:-16px}.q-gutter-xs-md>*,.q-gutter-xs-x-md>*{margin-left:16px}.q-gutter-xs-md,.q-gutter-xs-y-md{margin-top:-16px}.q-gutter-xs-md>*,.q-gutter-xs-y-md>*{margin-top:16px}.q-col-gutter-xs-md,.q-col-gutter-xs-x-md{margin-left:-16px}.q-col-gutter-xs-md>*,.q-col-gutter-xs-x-md>*{padding-left:16px}.q-col-gutter-xs-md,.q-col-gutter-xs-y-md{margin-top:-16px}.q-col-gutter-xs-md>*,.q-col-gutter-xs-y-md>*{padding-top:16px}.q-gutter-xs-lg,.q-gutter-xs-x-lg{margin-left:-24px}.q-gutter-xs-lg>*,.q-gutter-xs-x-lg>*{margin-left:24px}.q-gutter-xs-lg,.q-gutter-xs-y-lg{margin-top:-24px}.q-gutter-xs-lg>*,.q-gutter-xs-y-lg>*{margin-top:24px}.q-col-gutter-xs-lg,.q-col-gutter-xs-x-lg{margin-left:-24px}.q-col-gutter-xs-lg>*,.q-col-gutter-xs-x-lg>*{padding-left:24px}.q-col-gutter-xs-lg,.q-col-gutter-xs-y-lg{margin-top:-24px}.q-col-gutter-xs-lg>*,.q-col-gutter-xs-y-lg>*{padding-top:24px}.q-gutter-xs-x-xl,.q-gutter-xs-xl{margin-left:-48px}.q-gutter-xs-x-xl>*,.q-gutter-xs-xl>*{margin-left:48px}.q-gutter-xs-xl,.q-gutter-xs-y-xl{margin-top:-48px}.q-gutter-xs-xl>*,.q-gutter-xs-y-xl>*{margin-top:48px}.q-col-gutter-xs-x-xl,.q-col-gutter-xs-xl{margin-left:-48px}.q-col-gutter-xs-x-xl>*,.q-col-gutter-xs-xl>*{padding-left:48px}.q-col-gutter-xs-xl,.q-col-gutter-xs-y-xl{margin-top:-48px}.q-col-gutter-xs-xl>*,.q-col-gutter-xs-y-xl>*{padding-top:48px}.row-xs>.col-0,.row-xs>.col-xs-0{height:auto;width:0%}.row-xs>.offset-0,.row-xs>.offset-xs-0{margin-left:0%}.column-xs>.col-0,.column-xs>.col-xs-0{height:0%;width:auto}.row-xs>.col-1,.row-xs>.col-xs-1{height:auto;width:8.3333%}.row-xs>.offset-1,.row-xs>.offset-xs-1{margin-left:8.3333%}.column-xs>.col-1,.column-xs>.col-xs-1{height:8.3333%;width:auto}.row-xs>.col-2,.row-xs>.col-xs-2{height:auto;width:16.6667%}.row-xs>.offset-2,.row-xs>.offset-xs-2{margin-left:16.6667%}.column-xs>.col-2,.column-xs>.col-xs-2{height:16.6667%;width:auto}.row-xs>.col-3,.row-xs>.col-xs-3{height:auto;width:25%}.row-xs>.offset-3,.row-xs>.offset-xs-3{margin-left:25%}.column-xs>.col-3,.column-xs>.col-xs-3{height:25%;width:auto}.row-xs>.col-4,.row-xs>.col-xs-4{height:auto;width:33.3333%}.row-xs>.offset-4,.row-xs>.offset-xs-4{margin-left:33.3333%}.column-xs>.col-4,.column-xs>.col-xs-4{height:33.3333%;width:auto}.row-xs>.col-5,.row-xs>.col-xs-5{height:auto;width:41.6667%}.row-xs>.offset-5,.row-xs>.offset-xs-5{margin-left:41.6667%}.column-xs>.col-5,.column-xs>.col-xs-5{height:41.6667%;width:auto}.row-xs>.col-6,.row-xs>.col-xs-6{height:auto;width:50%}.row-xs>.offset-6,.row-xs>.offset-xs-6{margin-left:50%}.column-xs>.col-6,.column-xs>.col-xs-6{height:50%;width:auto}.row-xs>.col-7,.row-xs>.col-xs-7{height:auto;width:58.3333%}.row-xs>.offset-7,.row-xs>.offset-xs-7{margin-left:58.3333%}.column-xs>.col-7,.column-xs>.col-xs-7{height:58.3333%;width:auto}.row-xs>.col-8,.row-xs>.col-xs-8{height:auto;width:66.6667%}.row-xs>.offset-8,.row-xs>.offset-xs-8{margin-left:66.6667%}.column-xs>.col-8,.column-xs>.col-xs-8{height:66.6667%;width:auto}.row-xs>.col-9,.row-xs>.col-xs-9{height:auto;width:75%}.row-xs>.offset-9,.row-xs>.offset-xs-9{margin-left:75%}.column-xs>.col-9,.column-xs>.col-xs-9{height:75%;width:auto}.row-xs>.col-10,.row-xs>.col-xs-10{height:auto;width:83.3333%}.row-xs>.offset-10,.row-xs>.offset-xs-10{margin-left:83.3333%}.column-xs>.col-10,.column-xs>.col-xs-10{height:83.3333%;width:auto}.row-xs>.col-11,.row-xs>.col-xs-11{height:auto;width:91.6667%}.row-xs>.offset-11,.row-xs>.offset-xs-11{margin-left:91.6667%}.column-xs>.col-11,.column-xs>.col-xs-11{height:91.6667%;width:auto}.row-xs>.col-12,.row-xs>.col-xs-12{height:auto;width:100%}.row-xs>.offset-12,.row-xs>.offset-xs-12{margin-left:100%}.column-xs>.col-12,.column-xs>.col-xs-12{height:100%;width:auto}}@media (min-width:600px){.flex-sm-block{display:block}.flex-sm-inline{display:inline-block}.q-pa-sm-none{padding:0 0}.q-pl-sm-none,.q-px-sm-none{padding-left:0}.q-pr-sm-none,.q-px-sm-none{padding-right:0}.q-pt-sm-none,.q-py-sm-none{padding-top:0}.q-pb-sm-none,.q-py-sm-none{padding-bottom:0}.q-ma-sm-none{margin:0 0}.q-ml-sm-none,.q-mx-sm-none{margin-left:0}.q-mr-sm-none,.q-mx-sm-none{margin-right:0}.q-mt-sm-none,.q-my-sm-none{margin-top:0}.q-mb-sm-none,.q-my-sm-none{margin-bottom:0}.q-pa-sm-xs{padding:4px 4px}.q-pl-sm-xs,.q-px-sm-xs{padding-left:4px}.q-pr-sm-xs,.q-px-sm-xs{padding-right:4px}.q-pt-sm-xs,.q-py-sm-xs{padding-top:4px}.q-pb-sm-xs,.q-py-sm-xs{padding-bottom:4px}.q-ma-sm-xs{margin:4px 4px}.q-ml-sm-xs,.q-mx-sm-xs{margin-left:4px}.q-mr-sm-xs,.q-mx-sm-xs{margin-right:4px}.q-mt-sm-xs,.q-my-sm-xs{margin-top:4px}.q-mb-sm-xs,.q-my-sm-xs{margin-bottom:4px}.q-pa-sm-sm{padding:8px 8px}.q-pl-sm-sm,.q-px-sm-sm{padding-left:8px}.q-pr-sm-sm,.q-px-sm-sm{padding-right:8px}.q-pt-sm-sm,.q-py-sm-sm{padding-top:8px}.q-pb-sm-sm,.q-py-sm-sm{padding-bottom:8px}.q-ma-sm-sm{margin:8px 8px}.q-ml-sm-sm,.q-mx-sm-sm{margin-left:8px}.q-mr-sm-sm,.q-mx-sm-sm{margin-right:8px}.q-mt-sm-sm,.q-my-sm-sm{margin-top:8px}.q-mb-sm-sm,.q-my-sm-sm{margin-bottom:8px}.q-pa-sm-md{padding:16px 16px}.q-pl-sm-md,.q-px-sm-md{padding-left:16px}.q-pr-sm-md,.q-px-sm-md{padding-right:16px}.q-pt-sm-md,.q-py-sm-md{padding-top:16px}.q-pb-sm-md,.q-py-sm-md{padding-bottom:16px}.q-ma-sm-md{margin:16px 16px}.q-ml-sm-md,.q-mx-sm-md{margin-left:16px}.q-mr-sm-md,.q-mx-sm-md{margin-right:16px}.q-mt-sm-md,.q-my-sm-md{margin-top:16px}.q-mb-sm-md,.q-my-sm-md{margin-bottom:16px}.q-pa-sm-lg{padding:24px 24px}.q-pl-sm-lg,.q-px-sm-lg{padding-left:24px}.q-pr-sm-lg,.q-px-sm-lg{padding-right:24px}.q-pt-sm-lg,.q-py-sm-lg{padding-top:24px}.q-pb-sm-lg,.q-py-sm-lg{padding-bottom:24px}.q-ma-sm-lg{margin:24px 24px}.q-ml-sm-lg,.q-mx-sm-lg{margin-left:24px}.q-mr-sm-lg,.q-mx-sm-lg{margin-right:24px}.q-mt-sm-lg,.q-my-sm-lg{margin-top:24px}.q-mb-sm-lg,.q-my-sm-lg{margin-bottom:24px}.q-pa-sm-xl{padding:48px 48px}.q-pl-sm-xl,.q-px-sm-xl{padding-left:48px}.q-pr-sm-xl,.q-px-sm-xl{padding-right:48px}.q-pt-sm-xl,.q-py-sm-xl{padding-top:48px}.q-pb-sm-xl,.q-py-sm-xl{padding-bottom:48px}.q-ma-sm-xl{margin:48px 48px}.q-ml-sm-xl,.q-mx-sm-xl{margin-left:48px}.q-mr-sm-xl,.q-mx-sm-xl{margin-right:48px}.q-mt-sm-xl,.q-my-sm-xl{margin-top:48px}.q-mb-sm-xl,.q-my-sm-xl{margin-bottom:48px}.q-ml-sm-auto,.q-mx-sm-auto{margin-left:auto}.q-mr-sm-auto,.q-mx-sm-auto{margin-right:auto}.column.inline-sm,.flex.inline-sm,.row.inline-sm{display:inline-flex}.column-sm,.flex-sm,.row-sm{display:flex;flex-wrap:wrap}.column-sm.inline,.column-sm.inline-sm,.flex-sm.inline,.flex-sm.inline-sm,.row-sm.inline,.row-sm.inline-sm{display:inline-flex}.row.reverse-sm{flex-direction:row-reverse}.row-sm{flex-direction:row}.row-sm.reverse,.row-sm.reverse-sm{flex-direction:row-reverse}.column.reverse-sm{flex-direction:column-reverse}.column-sm{flex-direction:column}.column-sm.reverse,.column-sm.reverse-sm{flex-direction:column-reverse}.wrap-sm{flex-wrap:wrap}.no-wrap-sm{flex-wrap:nowrap}.reverse-wrap-sm{flex-wrap:wrap-reverse}.order-sm-first{order:-10000}.order-sm-last{order:10000}.order-sm-none{order:0}.justify-sm-start{justify-content:flex-start}.justify-sm-end{justify-content:flex-end}.flex-sm-center,.justify-sm-center{justify-content:center}.justify-sm-between{justify-content:space-between}.justify-sm-around{justify-content:space-around}.justify-sm-evenly{justify-content:space-evenly}.items-sm-start{align-items:flex-start}.items-sm-end{align-items:flex-end}.flex-sm-center,.items-sm-center{align-items:center}.items-sm-baseline{align-items:baseline}.items-sm-stretch{align-items:stretch}.content-sm-start{align-content:flex-start}.content-sm-end{align-content:flex-end}.content-sm-center{align-content:center}.content-sm-between{align-content:space-between}.content-sm-around{align-content:space-around}.self-sm-start{align-self:flex-start}.self-sm-end{align-self:flex-end}.self-sm-center{align-self:center}.self-sm-baseline{align-self:baseline}.self-sm-stretch{align-self:stretch}.q-gutter-sm-none,.q-gutter-sm-none>*,.q-gutter-sm-x-none,.q-gutter-sm-x-none>*{margin-left:0}.q-gutter-sm-none,.q-gutter-sm-none>*,.q-gutter-sm-y-none,.q-gutter-sm-y-none>*{margin-top:0}.q-col-gutter-sm-none,.q-col-gutter-sm-x-none{margin-left:0}.q-col-gutter-sm-none>*,.q-col-gutter-sm-x-none>*{padding-left:0}.q-col-gutter-sm-none,.q-col-gutter-sm-y-none{margin-top:0}.q-col-gutter-sm-none>*,.q-col-gutter-sm-y-none>*{padding-top:0}.q-gutter-sm-x-xs,.q-gutter-sm-xs{margin-left:-4px}.q-gutter-sm-x-xs>*,.q-gutter-sm-xs>*{margin-left:4px}.q-gutter-sm-xs,.q-gutter-sm-y-xs{margin-top:-4px}.q-gutter-sm-xs>*,.q-gutter-sm-y-xs>*{margin-top:4px}.q-col-gutter-sm-x-xs,.q-col-gutter-sm-xs{margin-left:-4px}.q-col-gutter-sm-x-xs>*,.q-col-gutter-sm-xs>*{padding-left:4px}.q-col-gutter-sm-xs,.q-col-gutter-sm-y-xs{margin-top:-4px}.q-col-gutter-sm-xs>*,.q-col-gutter-sm-y-xs>*{padding-top:4px}.q-gutter-sm-sm,.q-gutter-sm-x-sm{margin-left:-8px}.q-gutter-sm-sm>*,.q-gutter-sm-x-sm>*{margin-left:8px}.q-gutter-sm-sm,.q-gutter-sm-y-sm{margin-top:-8px}.q-gutter-sm-sm>*,.q-gutter-sm-y-sm>*{margin-top:8px}.q-col-gutter-sm-sm,.q-col-gutter-sm-x-sm{margin-left:-8px}.q-col-gutter-sm-sm>*,.q-col-gutter-sm-x-sm>*{padding-left:8px}.q-col-gutter-sm-sm,.q-col-gutter-sm-y-sm{margin-top:-8px}.q-col-gutter-sm-sm>*,.q-col-gutter-sm-y-sm>*{padding-top:8px}.q-gutter-sm-md,.q-gutter-sm-x-md{margin-left:-16px}.q-gutter-sm-md>*,.q-gutter-sm-x-md>*{margin-left:16px}.q-gutter-sm-md,.q-gutter-sm-y-md{margin-top:-16px}.q-gutter-sm-md>*,.q-gutter-sm-y-md>*{margin-top:16px}.q-col-gutter-sm-md,.q-col-gutter-sm-x-md{margin-left:-16px}.q-col-gutter-sm-md>*,.q-col-gutter-sm-x-md>*{padding-left:16px}.q-col-gutter-sm-md,.q-col-gutter-sm-y-md{margin-top:-16px}.q-col-gutter-sm-md>*,.q-col-gutter-sm-y-md>*{padding-top:16px}.q-gutter-sm-lg,.q-gutter-sm-x-lg{margin-left:-24px}.q-gutter-sm-lg>*,.q-gutter-sm-x-lg>*{margin-left:24px}.q-gutter-sm-lg,.q-gutter-sm-y-lg{margin-top:-24px}.q-gutter-sm-lg>*,.q-gutter-sm-y-lg>*{margin-top:24px}.q-col-gutter-sm-lg,.q-col-gutter-sm-x-lg{margin-left:-24px}.q-col-gutter-sm-lg>*,.q-col-gutter-sm-x-lg>*{padding-left:24px}.q-col-gutter-sm-lg,.q-col-gutter-sm-y-lg{margin-top:-24px}.q-col-gutter-sm-lg>*,.q-col-gutter-sm-y-lg>*{padding-top:24px}.q-gutter-sm-x-xl,.q-gutter-sm-xl{margin-left:-48px}.q-gutter-sm-x-xl>*,.q-gutter-sm-xl>*{margin-left:48px}.q-gutter-sm-xl,.q-gutter-sm-y-xl{margin-top:-48px}.q-gutter-sm-xl>*,.q-gutter-sm-y-xl>*{margin-top:48px}.q-col-gutter-sm-x-xl,.q-col-gutter-sm-xl{margin-left:-48px}.q-col-gutter-sm-x-xl>*,.q-col-gutter-sm-xl>*{padding-left:48px}.q-col-gutter-sm-xl,.q-col-gutter-sm-y-xl{margin-top:-48px}.q-col-gutter-sm-xl>*,.q-col-gutter-sm-y-xl>*{padding-top:48px}.row-sm>.col-0,.row-sm>.col-xs-0{height:auto;width:0%}.row-sm>.offset-0,.row-sm>.offset-xs-0{margin-left:0%}.column-sm>.col-0,.column-sm>.col-xs-0{height:0%;width:auto}.row-sm>.col-1,.row-sm>.col-xs-1{height:auto;width:8.3333%}.row-sm>.offset-1,.row-sm>.offset-xs-1{margin-left:8.3333%}.column-sm>.col-1,.column-sm>.col-xs-1{height:8.3333%;width:auto}.row-sm>.col-2,.row-sm>.col-xs-2{height:auto;width:16.6667%}.row-sm>.offset-2,.row-sm>.offset-xs-2{margin-left:16.6667%}.column-sm>.col-2,.column-sm>.col-xs-2{height:16.6667%;width:auto}.row-sm>.col-3,.row-sm>.col-xs-3{height:auto;width:25%}.row-sm>.offset-3,.row-sm>.offset-xs-3{margin-left:25%}.column-sm>.col-3,.column-sm>.col-xs-3{height:25%;width:auto}.row-sm>.col-4,.row-sm>.col-xs-4{height:auto;width:33.3333%}.row-sm>.offset-4,.row-sm>.offset-xs-4{margin-left:33.3333%}.column-sm>.col-4,.column-sm>.col-xs-4{height:33.3333%;width:auto}.row-sm>.col-5,.row-sm>.col-xs-5{height:auto;width:41.6667%}.row-sm>.offset-5,.row-sm>.offset-xs-5{margin-left:41.6667%}.column-sm>.col-5,.column-sm>.col-xs-5{height:41.6667%;width:auto}.row-sm>.col-6,.row-sm>.col-xs-6{height:auto;width:50%}.row-sm>.offset-6,.row-sm>.offset-xs-6{margin-left:50%}.column-sm>.col-6,.column-sm>.col-xs-6{height:50%;width:auto}.row-sm>.col-7,.row-sm>.col-xs-7{height:auto;width:58.3333%}.row-sm>.offset-7,.row-sm>.offset-xs-7{margin-left:58.3333%}.column-sm>.col-7,.column-sm>.col-xs-7{height:58.3333%;width:auto}.row-sm>.col-8,.row-sm>.col-xs-8{height:auto;width:66.6667%}.row-sm>.offset-8,.row-sm>.offset-xs-8{margin-left:66.6667%}.column-sm>.col-8,.column-sm>.col-xs-8{height:66.6667%;width:auto}.row-sm>.col-9,.row-sm>.col-xs-9{height:auto;width:75%}.row-sm>.offset-9,.row-sm>.offset-xs-9{margin-left:75%}.column-sm>.col-9,.column-sm>.col-xs-9{height:75%;width:auto}.row-sm>.col-10,.row-sm>.col-xs-10{height:auto;width:83.3333%}.row-sm>.offset-10,.row-sm>.offset-xs-10{margin-left:83.3333%}.column-sm>.col-10,.column-sm>.col-xs-10{height:83.3333%;width:auto}.row-sm>.col-11,.row-sm>.col-xs-11{height:auto;width:91.6667%}.row-sm>.offset-11,.row-sm>.offset-xs-11{margin-left:91.6667%}.column-sm>.col-11,.column-sm>.col-xs-11{height:91.6667%;width:auto}.row-sm>.col-12,.row-sm>.col-xs-12{height:auto;width:100%}.row-sm>.offset-12,.row-sm>.offset-xs-12{margin-left:100%}.column-sm>.col-12,.column-sm>.col-xs-12{height:100%;width:auto}.row-sm>.col-sm-0{height:auto;width:0%}.row-sm>.offset-sm-0{margin-left:0%}.column-sm>.col-sm-0{height:0%;width:auto}.row-sm>.col-sm-1{height:auto;width:8.3333%}.row-sm>.offset-sm-1{margin-left:8.3333%}.column-sm>.col-sm-1{height:8.3333%;width:auto}.row-sm>.col-sm-2{height:auto;width:16.6667%}.row-sm>.offset-sm-2{margin-left:16.6667%}.column-sm>.col-sm-2{height:16.6667%;width:auto}.row-sm>.col-sm-3{height:auto;width:25%}.row-sm>.offset-sm-3{margin-left:25%}.column-sm>.col-sm-3{height:25%;width:auto}.row-sm>.col-sm-4{height:auto;width:33.3333%}.row-sm>.offset-sm-4{margin-left:33.3333%}.column-sm>.col-sm-4{height:33.3333%;width:auto}.row-sm>.col-sm-5{height:auto;width:41.6667%}.row-sm>.offset-sm-5{margin-left:41.6667%}.column-sm>.col-sm-5{height:41.6667%;width:auto}.row-sm>.col-sm-6{height:auto;width:50%}.row-sm>.offset-sm-6{margin-left:50%}.column-sm>.col-sm-6{height:50%;width:auto}.row-sm>.col-sm-7{height:auto;width:58.3333%}.row-sm>.offset-sm-7{margin-left:58.3333%}.column-sm>.col-sm-7{height:58.3333%;width:auto}.row-sm>.col-sm-8{height:auto;width:66.6667%}.row-sm>.offset-sm-8{margin-left:66.6667%}.column-sm>.col-sm-8{height:66.6667%;width:auto}.row-sm>.col-sm-9{height:auto;width:75%}.row-sm>.offset-sm-9{margin-left:75%}.column-sm>.col-sm-9{height:75%;width:auto}.row-sm>.col-sm-10{height:auto;width:83.3333%}.row-sm>.offset-sm-10{margin-left:83.3333%}.column-sm>.col-sm-10{height:83.3333%;width:auto}.row-sm>.col-sm-11{height:auto;width:91.6667%}.row-sm>.offset-sm-11{margin-left:91.6667%}.column-sm>.col-sm-11{height:91.6667%;width:auto}.row-sm>.col-sm-12{height:auto;width:100%}.row-sm>.offset-sm-12{margin-left:100%}.column-sm>.col-sm-12{height:100%;width:auto}}@media (min-width:1024px){.flex-md-block{display:block}.flex-md-inline{display:inline-block}.q-pa-md-none{padding:0 0}.q-pl-md-none,.q-px-md-none{padding-left:0}.q-pr-md-none,.q-px-md-none{padding-right:0}.q-pt-md-none,.q-py-md-none{padding-top:0}.q-pb-md-none,.q-py-md-none{padding-bottom:0}.q-ma-md-none{margin:0 0}.q-ml-md-none,.q-mx-md-none{margin-left:0}.q-mr-md-none,.q-mx-md-none{margin-right:0}.q-mt-md-none,.q-my-md-none{margin-top:0}.q-mb-md-none,.q-my-md-none{margin-bottom:0}.q-pa-md-xs{padding:4px 4px}.q-pl-md-xs,.q-px-md-xs{padding-left:4px}.q-pr-md-xs,.q-px-md-xs{padding-right:4px}.q-pt-md-xs,.q-py-md-xs{padding-top:4px}.q-pb-md-xs,.q-py-md-xs{padding-bottom:4px}.q-ma-md-xs{margin:4px 4px}.q-ml-md-xs,.q-mx-md-xs{margin-left:4px}.q-mr-md-xs,.q-mx-md-xs{margin-right:4px}.q-mt-md-xs,.q-my-md-xs{margin-top:4px}.q-mb-md-xs,.q-my-md-xs{margin-bottom:4px}.q-pa-md-sm{padding:8px 8px}.q-pl-md-sm,.q-px-md-sm{padding-left:8px}.q-pr-md-sm,.q-px-md-sm{padding-right:8px}.q-pt-md-sm,.q-py-md-sm{padding-top:8px}.q-pb-md-sm,.q-py-md-sm{padding-bottom:8px}.q-ma-md-sm{margin:8px 8px}.q-ml-md-sm,.q-mx-md-sm{margin-left:8px}.q-mr-md-sm,.q-mx-md-sm{margin-right:8px}.q-mt-md-sm,.q-my-md-sm{margin-top:8px}.q-mb-md-sm,.q-my-md-sm{margin-bottom:8px}.q-pa-md-md{padding:16px 16px}.q-pl-md-md,.q-px-md-md{padding-left:16px}.q-pr-md-md,.q-px-md-md{padding-right:16px}.q-pt-md-md,.q-py-md-md{padding-top:16px}.q-pb-md-md,.q-py-md-md{padding-bottom:16px}.q-ma-md-md{margin:16px 16px}.q-ml-md-md,.q-mx-md-md{margin-left:16px}.q-mr-md-md,.q-mx-md-md{margin-right:16px}.q-mt-md-md,.q-my-md-md{margin-top:16px}.q-mb-md-md,.q-my-md-md{margin-bottom:16px}.q-pa-md-lg{padding:24px 24px}.q-pl-md-lg,.q-px-md-lg{padding-left:24px}.q-pr-md-lg,.q-px-md-lg{padding-right:24px}.q-pt-md-lg,.q-py-md-lg{padding-top:24px}.q-pb-md-lg,.q-py-md-lg{padding-bottom:24px}.q-ma-md-lg{margin:24px 24px}.q-ml-md-lg,.q-mx-md-lg{margin-left:24px}.q-mr-md-lg,.q-mx-md-lg{margin-right:24px}.q-mt-md-lg,.q-my-md-lg{margin-top:24px}.q-mb-md-lg,.q-my-md-lg{margin-bottom:24px}.q-pa-md-xl{padding:48px 48px}.q-pl-md-xl,.q-px-md-xl{padding-left:48px}.q-pr-md-xl,.q-px-md-xl{padding-right:48px}.q-pt-md-xl,.q-py-md-xl{padding-top:48px}.q-pb-md-xl,.q-py-md-xl{padding-bottom:48px}.q-ma-md-xl{margin:48px 48px}.q-ml-md-xl,.q-mx-md-xl{margin-left:48px}.q-mr-md-xl,.q-mx-md-xl{margin-right:48px}.q-mt-md-xl,.q-my-md-xl{margin-top:48px}.q-mb-md-xl,.q-my-md-xl{margin-bottom:48px}.q-ml-md-auto,.q-mx-md-auto{margin-left:auto}.q-mr-md-auto,.q-mx-md-auto{margin-right:auto}.column.inline-md,.flex.inline-md,.row.inline-md{display:inline-flex}.column-md,.flex-md,.row-md{display:flex;flex-wrap:wrap}.column-md.inline,.column-md.inline-md,.flex-md.inline,.flex-md.inline-md,.row-md.inline,.row-md.inline-md{display:inline-flex}.row.reverse-md{flex-direction:row-reverse}.row-md{flex-direction:row}.row-md.reverse,.row-md.reverse-md{flex-direction:row-reverse}.column.reverse-md{flex-direction:column-reverse}.column-md{flex-direction:column}.column-md.reverse,.column-md.reverse-md{flex-direction:column-reverse}.wrap-md{flex-wrap:wrap}.no-wrap-md{flex-wrap:nowrap}.reverse-wrap-md{flex-wrap:wrap-reverse}.order-md-first{order:-10000}.order-md-last{order:10000}.order-md-none{order:0}.justify-md-start{justify-content:flex-start}.justify-md-end{justify-content:flex-end}.flex-md-center,.justify-md-center{justify-content:center}.justify-md-between{justify-content:space-between}.justify-md-around{justify-content:space-around}.justify-md-evenly{justify-content:space-evenly}.items-md-start{align-items:flex-start}.items-md-end{align-items:flex-end}.flex-md-center,.items-md-center{align-items:center}.items-md-baseline{align-items:baseline}.items-md-stretch{align-items:stretch}.content-md-start{align-content:flex-start}.content-md-end{align-content:flex-end}.content-md-center{align-content:center}.content-md-between{align-content:space-between}.content-md-around{align-content:space-around}.self-md-start{align-self:flex-start}.self-md-end{align-self:flex-end}.self-md-center{align-self:center}.self-md-baseline{align-self:baseline}.self-md-stretch{align-self:stretch}.q-gutter-md-none,.q-gutter-md-none>*,.q-gutter-md-x-none,.q-gutter-md-x-none>*{margin-left:0}.q-gutter-md-none,.q-gutter-md-none>*,.q-gutter-md-y-none,.q-gutter-md-y-none>*{margin-top:0}.q-col-gutter-md-none,.q-col-gutter-md-x-none{margin-left:0}.q-col-gutter-md-none>*,.q-col-gutter-md-x-none>*{padding-left:0}.q-col-gutter-md-none,.q-col-gutter-md-y-none{margin-top:0}.q-col-gutter-md-none>*,.q-col-gutter-md-y-none>*{padding-top:0}.q-gutter-md-x-xs,.q-gutter-md-xs{margin-left:-4px}.q-gutter-md-x-xs>*,.q-gutter-md-xs>*{margin-left:4px}.q-gutter-md-xs,.q-gutter-md-y-xs{margin-top:-4px}.q-gutter-md-xs>*,.q-gutter-md-y-xs>*{margin-top:4px}.q-col-gutter-md-x-xs,.q-col-gutter-md-xs{margin-left:-4px}.q-col-gutter-md-x-xs>*,.q-col-gutter-md-xs>*{padding-left:4px}.q-col-gutter-md-xs,.q-col-gutter-md-y-xs{margin-top:-4px}.q-col-gutter-md-xs>*,.q-col-gutter-md-y-xs>*{padding-top:4px}.q-gutter-md-sm,.q-gutter-md-x-sm{margin-left:-8px}.q-gutter-md-sm>*,.q-gutter-md-x-sm>*{margin-left:8px}.q-gutter-md-sm,.q-gutter-md-y-sm{margin-top:-8px}.q-gutter-md-sm>*,.q-gutter-md-y-sm>*{margin-top:8px}.q-col-gutter-md-sm,.q-col-gutter-md-x-sm{margin-left:-8px}.q-col-gutter-md-sm>*,.q-col-gutter-md-x-sm>*{padding-left:8px}.q-col-gutter-md-sm,.q-col-gutter-md-y-sm{margin-top:-8px}.q-col-gutter-md-sm>*,.q-col-gutter-md-y-sm>*{padding-top:8px}.q-gutter-md-md,.q-gutter-md-x-md{margin-left:-16px}.q-gutter-md-md>*,.q-gutter-md-x-md>*{margin-left:16px}.q-gutter-md-md,.q-gutter-md-y-md{margin-top:-16px}.q-gutter-md-md>*,.q-gutter-md-y-md>*{margin-top:16px}.q-col-gutter-md-md,.q-col-gutter-md-x-md{margin-left:-16px}.q-col-gutter-md-md>*,.q-col-gutter-md-x-md>*{padding-left:16px}.q-col-gutter-md-md,.q-col-gutter-md-y-md{margin-top:-16px}.q-col-gutter-md-md>*,.q-col-gutter-md-y-md>*{padding-top:16px}.q-gutter-md-lg,.q-gutter-md-x-lg{margin-left:-24px}.q-gutter-md-lg>*,.q-gutter-md-x-lg>*{margin-left:24px}.q-gutter-md-lg,.q-gutter-md-y-lg{margin-top:-24px}.q-gutter-md-lg>*,.q-gutter-md-y-lg>*{margin-top:24px}.q-col-gutter-md-lg,.q-col-gutter-md-x-lg{margin-left:-24px}.q-col-gutter-md-lg>*,.q-col-gutter-md-x-lg>*{padding-left:24px}.q-col-gutter-md-lg,.q-col-gutter-md-y-lg{margin-top:-24px}.q-col-gutter-md-lg>*,.q-col-gutter-md-y-lg>*{padding-top:24px}.q-gutter-md-x-xl,.q-gutter-md-xl{margin-left:-48px}.q-gutter-md-x-xl>*,.q-gutter-md-xl>*{margin-left:48px}.q-gutter-md-xl,.q-gutter-md-y-xl{margin-top:-48px}.q-gutter-md-xl>*,.q-gutter-md-y-xl>*{margin-top:48px}.q-col-gutter-md-x-xl,.q-col-gutter-md-xl{margin-left:-48px}.q-col-gutter-md-x-xl>*,.q-col-gutter-md-xl>*{padding-left:48px}.q-col-gutter-md-xl,.q-col-gutter-md-y-xl{margin-top:-48px}.q-col-gutter-md-xl>*,.q-col-gutter-md-y-xl>*{padding-top:48px}.row-md>.col-0,.row-md>.col-xs-0{height:auto;width:0%}.row-md>.offset-0,.row-md>.offset-xs-0{margin-left:0%}.column-md>.col-0,.column-md>.col-xs-0{height:0%;width:auto}.row-md>.col-1,.row-md>.col-xs-1{height:auto;width:8.3333%}.row-md>.offset-1,.row-md>.offset-xs-1{margin-left:8.3333%}.column-md>.col-1,.column-md>.col-xs-1{height:8.3333%;width:auto}.row-md>.col-2,.row-md>.col-xs-2{height:auto;width:16.6667%}.row-md>.offset-2,.row-md>.offset-xs-2{margin-left:16.6667%}.column-md>.col-2,.column-md>.col-xs-2{height:16.6667%;width:auto}.row-md>.col-3,.row-md>.col-xs-3{height:auto;width:25%}.row-md>.offset-3,.row-md>.offset-xs-3{margin-left:25%}.column-md>.col-3,.column-md>.col-xs-3{height:25%;width:auto}.row-md>.col-4,.row-md>.col-xs-4{height:auto;width:33.3333%}.row-md>.offset-4,.row-md>.offset-xs-4{margin-left:33.3333%}.column-md>.col-4,.column-md>.col-xs-4{height:33.3333%;width:auto}.row-md>.col-5,.row-md>.col-xs-5{height:auto;width:41.6667%}.row-md>.offset-5,.row-md>.offset-xs-5{margin-left:41.6667%}.column-md>.col-5,.column-md>.col-xs-5{height:41.6667%;width:auto}.row-md>.col-6,.row-md>.col-xs-6{height:auto;width:50%}.row-md>.offset-6,.row-md>.offset-xs-6{margin-left:50%}.column-md>.col-6,.column-md>.col-xs-6{height:50%;width:auto}.row-md>.col-7,.row-md>.col-xs-7{height:auto;width:58.3333%}.row-md>.offset-7,.row-md>.offset-xs-7{margin-left:58.3333%}.column-md>.col-7,.column-md>.col-xs-7{height:58.3333%;width:auto}.row-md>.col-8,.row-md>.col-xs-8{height:auto;width:66.6667%}.row-md>.offset-8,.row-md>.offset-xs-8{margin-left:66.6667%}.column-md>.col-8,.column-md>.col-xs-8{height:66.6667%;width:auto}.row-md>.col-9,.row-md>.col-xs-9{height:auto;width:75%}.row-md>.offset-9,.row-md>.offset-xs-9{margin-left:75%}.column-md>.col-9,.column-md>.col-xs-9{height:75%;width:auto}.row-md>.col-10,.row-md>.col-xs-10{height:auto;width:83.3333%}.row-md>.offset-10,.row-md>.offset-xs-10{margin-left:83.3333%}.column-md>.col-10,.column-md>.col-xs-10{height:83.3333%;width:auto}.row-md>.col-11,.row-md>.col-xs-11{height:auto;width:91.6667%}.row-md>.offset-11,.row-md>.offset-xs-11{margin-left:91.6667%}.column-md>.col-11,.column-md>.col-xs-11{height:91.6667%;width:auto}.row-md>.col-12,.row-md>.col-xs-12{height:auto;width:100%}.row-md>.offset-12,.row-md>.offset-xs-12{margin-left:100%}.column-md>.col-12,.column-md>.col-xs-12{height:100%;width:auto}.row-md>.col-sm-0{height:auto;width:0%}.row-md>.offset-sm-0{margin-left:0%}.column-md>.col-sm-0{height:0%;width:auto}.row-md>.col-sm-1{height:auto;width:8.3333%}.row-md>.offset-sm-1{margin-left:8.3333%}.column-md>.col-sm-1{height:8.3333%;width:auto}.row-md>.col-sm-2{height:auto;width:16.6667%}.row-md>.offset-sm-2{margin-left:16.6667%}.column-md>.col-sm-2{height:16.6667%;width:auto}.row-md>.col-sm-3{height:auto;width:25%}.row-md>.offset-sm-3{margin-left:25%}.column-md>.col-sm-3{height:25%;width:auto}.row-md>.col-sm-4{height:auto;width:33.3333%}.row-md>.offset-sm-4{margin-left:33.3333%}.column-md>.col-sm-4{height:33.3333%;width:auto}.row-md>.col-sm-5{height:auto;width:41.6667%}.row-md>.offset-sm-5{margin-left:41.6667%}.column-md>.col-sm-5{height:41.6667%;width:auto}.row-md>.col-sm-6{height:auto;width:50%}.row-md>.offset-sm-6{margin-left:50%}.column-md>.col-sm-6{height:50%;width:auto}.row-md>.col-sm-7{height:auto;width:58.3333%}.row-md>.offset-sm-7{margin-left:58.3333%}.column-md>.col-sm-7{height:58.3333%;width:auto}.row-md>.col-sm-8{height:auto;width:66.6667%}.row-md>.offset-sm-8{margin-left:66.6667%}.column-md>.col-sm-8{height:66.6667%;width:auto}.row-md>.col-sm-9{height:auto;width:75%}.row-md>.offset-sm-9{margin-left:75%}.column-md>.col-sm-9{height:75%;width:auto}.row-md>.col-sm-10{height:auto;width:83.3333%}.row-md>.offset-sm-10{margin-left:83.3333%}.column-md>.col-sm-10{height:83.3333%;width:auto}.row-md>.col-sm-11{height:auto;width:91.6667%}.row-md>.offset-sm-11{margin-left:91.6667%}.column-md>.col-sm-11{height:91.6667%;width:auto}.row-md>.col-sm-12{height:auto;width:100%}.row-md>.offset-sm-12{margin-left:100%}.column-md>.col-sm-12{height:100%;width:auto}.row-md>.col-md-0{height:auto;width:0%}.row-md>.offset-md-0{margin-left:0%}.column-md>.col-md-0{height:0%;width:auto}.row-md>.col-md-1{height:auto;width:8.3333%}.row-md>.offset-md-1{margin-left:8.3333%}.column-md>.col-md-1{height:8.3333%;width:auto}.row-md>.col-md-2{height:auto;width:16.6667%}.row-md>.offset-md-2{margin-left:16.6667%}.column-md>.col-md-2{height:16.6667%;width:auto}.row-md>.col-md-3{height:auto;width:25%}.row-md>.offset-md-3{margin-left:25%}.column-md>.col-md-3{height:25%;width:auto}.row-md>.col-md-4{height:auto;width:33.3333%}.row-md>.offset-md-4{margin-left:33.3333%}.column-md>.col-md-4{height:33.3333%;width:auto}.row-md>.col-md-5{height:auto;width:41.6667%}.row-md>.offset-md-5{margin-left:41.6667%}.column-md>.col-md-5{height:41.6667%;width:auto}.row-md>.col-md-6{height:auto;width:50%}.row-md>.offset-md-6{margin-left:50%}.column-md>.col-md-6{height:50%;width:auto}.row-md>.col-md-7{height:auto;width:58.3333%}.row-md>.offset-md-7{margin-left:58.3333%}.column-md>.col-md-7{height:58.3333%;width:auto}.row-md>.col-md-8{height:auto;width:66.6667%}.row-md>.offset-md-8{margin-left:66.6667%}.column-md>.col-md-8{height:66.6667%;width:auto}.row-md>.col-md-9{height:auto;width:75%}.row-md>.offset-md-9{margin-left:75%}.column-md>.col-md-9{height:75%;width:auto}.row-md>.col-md-10{height:auto;width:83.3333%}.row-md>.offset-md-10{margin-left:83.3333%}.column-md>.col-md-10{height:83.3333%;width:auto}.row-md>.col-md-11{height:auto;width:91.6667%}.row-md>.offset-md-11{margin-left:91.6667%}.column-md>.col-md-11{height:91.6667%;width:auto}.row-md>.col-md-12{height:auto;width:100%}.row-md>.offset-md-12{margin-left:100%}.column-md>.col-md-12{height:100%;width:auto}}@media (min-width:1440px){.flex-lg-block{display:block}.flex-lg-inline{display:inline-block}.q-pa-lg-none{padding:0 0}.q-pl-lg-none,.q-px-lg-none{padding-left:0}.q-pr-lg-none,.q-px-lg-none{padding-right:0}.q-pt-lg-none,.q-py-lg-none{padding-top:0}.q-pb-lg-none,.q-py-lg-none{padding-bottom:0}.q-ma-lg-none{margin:0 0}.q-ml-lg-none,.q-mx-lg-none{margin-left:0}.q-mr-lg-none,.q-mx-lg-none{margin-right:0}.q-mt-lg-none,.q-my-lg-none{margin-top:0}.q-mb-lg-none,.q-my-lg-none{margin-bottom:0}.q-pa-lg-xs{padding:4px 4px}.q-pl-lg-xs,.q-px-lg-xs{padding-left:4px}.q-pr-lg-xs,.q-px-lg-xs{padding-right:4px}.q-pt-lg-xs,.q-py-lg-xs{padding-top:4px}.q-pb-lg-xs,.q-py-lg-xs{padding-bottom:4px}.q-ma-lg-xs{margin:4px 4px}.q-ml-lg-xs,.q-mx-lg-xs{margin-left:4px}.q-mr-lg-xs,.q-mx-lg-xs{margin-right:4px}.q-mt-lg-xs,.q-my-lg-xs{margin-top:4px}.q-mb-lg-xs,.q-my-lg-xs{margin-bottom:4px}.q-pa-lg-sm{padding:8px 8px}.q-pl-lg-sm,.q-px-lg-sm{padding-left:8px}.q-pr-lg-sm,.q-px-lg-sm{padding-right:8px}.q-pt-lg-sm,.q-py-lg-sm{padding-top:8px}.q-pb-lg-sm,.q-py-lg-sm{padding-bottom:8px}.q-ma-lg-sm{margin:8px 8px}.q-ml-lg-sm,.q-mx-lg-sm{margin-left:8px}.q-mr-lg-sm,.q-mx-lg-sm{margin-right:8px}.q-mt-lg-sm,.q-my-lg-sm{margin-top:8px}.q-mb-lg-sm,.q-my-lg-sm{margin-bottom:8px}.q-pa-lg-md{padding:16px 16px}.q-pl-lg-md,.q-px-lg-md{padding-left:16px}.q-pr-lg-md,.q-px-lg-md{padding-right:16px}.q-pt-lg-md,.q-py-lg-md{padding-top:16px}.q-pb-lg-md,.q-py-lg-md{padding-bottom:16px}.q-ma-lg-md{margin:16px 16px}.q-ml-lg-md,.q-mx-lg-md{margin-left:16px}.q-mr-lg-md,.q-mx-lg-md{margin-right:16px}.q-mt-lg-md,.q-my-lg-md{margin-top:16px}.q-mb-lg-md,.q-my-lg-md{margin-bottom:16px}.q-pa-lg-lg{padding:24px 24px}.q-pl-lg-lg,.q-px-lg-lg{padding-left:24px}.q-pr-lg-lg,.q-px-lg-lg{padding-right:24px}.q-pt-lg-lg,.q-py-lg-lg{padding-top:24px}.q-pb-lg-lg,.q-py-lg-lg{padding-bottom:24px}.q-ma-lg-lg{margin:24px 24px}.q-ml-lg-lg,.q-mx-lg-lg{margin-left:24px}.q-mr-lg-lg,.q-mx-lg-lg{margin-right:24px}.q-mt-lg-lg,.q-my-lg-lg{margin-top:24px}.q-mb-lg-lg,.q-my-lg-lg{margin-bottom:24px}.q-pa-lg-xl{padding:48px 48px}.q-pl-lg-xl,.q-px-lg-xl{padding-left:48px}.q-pr-lg-xl,.q-px-lg-xl{padding-right:48px}.q-pt-lg-xl,.q-py-lg-xl{padding-top:48px}.q-pb-lg-xl,.q-py-lg-xl{padding-bottom:48px}.q-ma-lg-xl{margin:48px 48px}.q-ml-lg-xl,.q-mx-lg-xl{margin-left:48px}.q-mr-lg-xl,.q-mx-lg-xl{margin-right:48px}.q-mt-lg-xl,.q-my-lg-xl{margin-top:48px}.q-mb-lg-xl,.q-my-lg-xl{margin-bottom:48px}.q-ml-lg-auto,.q-mx-lg-auto{margin-left:auto}.q-mr-lg-auto,.q-mx-lg-auto{margin-right:auto}.column.inline-lg,.flex.inline-lg,.row.inline-lg{display:inline-flex}.column-lg,.flex-lg,.row-lg{display:flex;flex-wrap:wrap}.column-lg.inline,.column-lg.inline-lg,.flex-lg.inline,.flex-lg.inline-lg,.row-lg.inline,.row-lg.inline-lg{display:inline-flex}.row.reverse-lg{flex-direction:row-reverse}.row-lg{flex-direction:row}.row-lg.reverse,.row-lg.reverse-lg{flex-direction:row-reverse}.column.reverse-lg{flex-direction:column-reverse}.column-lg{flex-direction:column}.column-lg.reverse,.column-lg.reverse-lg{flex-direction:column-reverse}.wrap-lg{flex-wrap:wrap}.no-wrap-lg{flex-wrap:nowrap}.reverse-wrap-lg{flex-wrap:wrap-reverse}.order-lg-first{order:-10000}.order-lg-last{order:10000}.order-lg-none{order:0}.justify-lg-start{justify-content:flex-start}.justify-lg-end{justify-content:flex-end}.flex-lg-center,.justify-lg-center{justify-content:center}.justify-lg-between{justify-content:space-between}.justify-lg-around{justify-content:space-around}.justify-lg-evenly{justify-content:space-evenly}.items-lg-start{align-items:flex-start}.items-lg-end{align-items:flex-end}.flex-lg-center,.items-lg-center{align-items:center}.items-lg-baseline{align-items:baseline}.items-lg-stretch{align-items:stretch}.content-lg-start{align-content:flex-start}.content-lg-end{align-content:flex-end}.content-lg-center{align-content:center}.content-lg-between{align-content:space-between}.content-lg-around{align-content:space-around}.self-lg-start{align-self:flex-start}.self-lg-end{align-self:flex-end}.self-lg-center{align-self:center}.self-lg-baseline{align-self:baseline}.self-lg-stretch{align-self:stretch}.q-gutter-lg-none,.q-gutter-lg-none>*,.q-gutter-lg-x-none,.q-gutter-lg-x-none>*{margin-left:0}.q-gutter-lg-none,.q-gutter-lg-none>*,.q-gutter-lg-y-none,.q-gutter-lg-y-none>*{margin-top:0}.q-col-gutter-lg-none,.q-col-gutter-lg-x-none{margin-left:0}.q-col-gutter-lg-none>*,.q-col-gutter-lg-x-none>*{padding-left:0}.q-col-gutter-lg-none,.q-col-gutter-lg-y-none{margin-top:0}.q-col-gutter-lg-none>*,.q-col-gutter-lg-y-none>*{padding-top:0}.q-gutter-lg-x-xs,.q-gutter-lg-xs{margin-left:-4px}.q-gutter-lg-x-xs>*,.q-gutter-lg-xs>*{margin-left:4px}.q-gutter-lg-xs,.q-gutter-lg-y-xs{margin-top:-4px}.q-gutter-lg-xs>*,.q-gutter-lg-y-xs>*{margin-top:4px}.q-col-gutter-lg-x-xs,.q-col-gutter-lg-xs{margin-left:-4px}.q-col-gutter-lg-x-xs>*,.q-col-gutter-lg-xs>*{padding-left:4px}.q-col-gutter-lg-xs,.q-col-gutter-lg-y-xs{margin-top:-4px}.q-col-gutter-lg-xs>*,.q-col-gutter-lg-y-xs>*{padding-top:4px}.q-gutter-lg-sm,.q-gutter-lg-x-sm{margin-left:-8px}.q-gutter-lg-sm>*,.q-gutter-lg-x-sm>*{margin-left:8px}.q-gutter-lg-sm,.q-gutter-lg-y-sm{margin-top:-8px}.q-gutter-lg-sm>*,.q-gutter-lg-y-sm>*{margin-top:8px}.q-col-gutter-lg-sm,.q-col-gutter-lg-x-sm{margin-left:-8px}.q-col-gutter-lg-sm>*,.q-col-gutter-lg-x-sm>*{padding-left:8px}.q-col-gutter-lg-sm,.q-col-gutter-lg-y-sm{margin-top:-8px}.q-col-gutter-lg-sm>*,.q-col-gutter-lg-y-sm>*{padding-top:8px}.q-gutter-lg-md,.q-gutter-lg-x-md{margin-left:-16px}.q-gutter-lg-md>*,.q-gutter-lg-x-md>*{margin-left:16px}.q-gutter-lg-md,.q-gutter-lg-y-md{margin-top:-16px}.q-gutter-lg-md>*,.q-gutter-lg-y-md>*{margin-top:16px}.q-col-gutter-lg-md,.q-col-gutter-lg-x-md{margin-left:-16px}.q-col-gutter-lg-md>*,.q-col-gutter-lg-x-md>*{padding-left:16px}.q-col-gutter-lg-md,.q-col-gutter-lg-y-md{margin-top:-16px}.q-col-gutter-lg-md>*,.q-col-gutter-lg-y-md>*{padding-top:16px}.q-gutter-lg-lg,.q-gutter-lg-x-lg{margin-left:-24px}.q-gutter-lg-lg>*,.q-gutter-lg-x-lg>*{margin-left:24px}.q-gutter-lg-lg,.q-gutter-lg-y-lg{margin-top:-24px}.q-gutter-lg-lg>*,.q-gutter-lg-y-lg>*{margin-top:24px}.q-col-gutter-lg-lg,.q-col-gutter-lg-x-lg{margin-left:-24px}.q-col-gutter-lg-lg>*,.q-col-gutter-lg-x-lg>*{padding-left:24px}.q-col-gutter-lg-lg,.q-col-gutter-lg-y-lg{margin-top:-24px}.q-col-gutter-lg-lg>*,.q-col-gutter-lg-y-lg>*{padding-top:24px}.q-gutter-lg-x-xl,.q-gutter-lg-xl{margin-left:-48px}.q-gutter-lg-x-xl>*,.q-gutter-lg-xl>*{margin-left:48px}.q-gutter-lg-xl,.q-gutter-lg-y-xl{margin-top:-48px}.q-gutter-lg-xl>*,.q-gutter-lg-y-xl>*{margin-top:48px}.q-col-gutter-lg-x-xl,.q-col-gutter-lg-xl{margin-left:-48px}.q-col-gutter-lg-x-xl>*,.q-col-gutter-lg-xl>*{padding-left:48px}.q-col-gutter-lg-xl,.q-col-gutter-lg-y-xl{margin-top:-48px}.q-col-gutter-lg-xl>*,.q-col-gutter-lg-y-xl>*{padding-top:48px}.row-lg>.col-0,.row-lg>.col-xs-0{height:auto;width:0%}.row-lg>.offset-0,.row-lg>.offset-xs-0{margin-left:0%}.column-lg>.col-0,.column-lg>.col-xs-0{height:0%;width:auto}.row-lg>.col-1,.row-lg>.col-xs-1{height:auto;width:8.3333%}.row-lg>.offset-1,.row-lg>.offset-xs-1{margin-left:8.3333%}.column-lg>.col-1,.column-lg>.col-xs-1{height:8.3333%;width:auto}.row-lg>.col-2,.row-lg>.col-xs-2{height:auto;width:16.6667%}.row-lg>.offset-2,.row-lg>.offset-xs-2{margin-left:16.6667%}.column-lg>.col-2,.column-lg>.col-xs-2{height:16.6667%;width:auto}.row-lg>.col-3,.row-lg>.col-xs-3{height:auto;width:25%}.row-lg>.offset-3,.row-lg>.offset-xs-3{margin-left:25%}.column-lg>.col-3,.column-lg>.col-xs-3{height:25%;width:auto}.row-lg>.col-4,.row-lg>.col-xs-4{height:auto;width:33.3333%}.row-lg>.offset-4,.row-lg>.offset-xs-4{margin-left:33.3333%}.column-lg>.col-4,.column-lg>.col-xs-4{height:33.3333%;width:auto}.row-lg>.col-5,.row-lg>.col-xs-5{height:auto;width:41.6667%}.row-lg>.offset-5,.row-lg>.offset-xs-5{margin-left:41.6667%}.column-lg>.col-5,.column-lg>.col-xs-5{height:41.6667%;width:auto}.row-lg>.col-6,.row-lg>.col-xs-6{height:auto;width:50%}.row-lg>.offset-6,.row-lg>.offset-xs-6{margin-left:50%}.column-lg>.col-6,.column-lg>.col-xs-6{height:50%;width:auto}.row-lg>.col-7,.row-lg>.col-xs-7{height:auto;width:58.3333%}.row-lg>.offset-7,.row-lg>.offset-xs-7{margin-left:58.3333%}.column-lg>.col-7,.column-lg>.col-xs-7{height:58.3333%;width:auto}.row-lg>.col-8,.row-lg>.col-xs-8{height:auto;width:66.6667%}.row-lg>.offset-8,.row-lg>.offset-xs-8{margin-left:66.6667%}.column-lg>.col-8,.column-lg>.col-xs-8{height:66.6667%;width:auto}.row-lg>.col-9,.row-lg>.col-xs-9{height:auto;width:75%}.row-lg>.offset-9,.row-lg>.offset-xs-9{margin-left:75%}.column-lg>.col-9,.column-lg>.col-xs-9{height:75%;width:auto}.row-lg>.col-10,.row-lg>.col-xs-10{height:auto;width:83.3333%}.row-lg>.offset-10,.row-lg>.offset-xs-10{margin-left:83.3333%}.column-lg>.col-10,.column-lg>.col-xs-10{height:83.3333%;width:auto}.row-lg>.col-11,.row-lg>.col-xs-11{height:auto;width:91.6667%}.row-lg>.offset-11,.row-lg>.offset-xs-11{margin-left:91.6667%}.column-lg>.col-11,.column-lg>.col-xs-11{height:91.6667%;width:auto}.row-lg>.col-12,.row-lg>.col-xs-12{height:auto;width:100%}.row-lg>.offset-12,.row-lg>.offset-xs-12{margin-left:100%}.column-lg>.col-12,.column-lg>.col-xs-12{height:100%;width:auto}.row-lg>.col-sm-0{height:auto;width:0%}.row-lg>.offset-sm-0{margin-left:0%}.column-lg>.col-sm-0{height:0%;width:auto}.row-lg>.col-sm-1{height:auto;width:8.3333%}.row-lg>.offset-sm-1{margin-left:8.3333%}.column-lg>.col-sm-1{height:8.3333%;width:auto}.row-lg>.col-sm-2{height:auto;width:16.6667%}.row-lg>.offset-sm-2{margin-left:16.6667%}.column-lg>.col-sm-2{height:16.6667%;width:auto}.row-lg>.col-sm-3{height:auto;width:25%}.row-lg>.offset-sm-3{margin-left:25%}.column-lg>.col-sm-3{height:25%;width:auto}.row-lg>.col-sm-4{height:auto;width:33.3333%}.row-lg>.offset-sm-4{margin-left:33.3333%}.column-lg>.col-sm-4{height:33.3333%;width:auto}.row-lg>.col-sm-5{height:auto;width:41.6667%}.row-lg>.offset-sm-5{margin-left:41.6667%}.column-lg>.col-sm-5{height:41.6667%;width:auto}.row-lg>.col-sm-6{height:auto;width:50%}.row-lg>.offset-sm-6{margin-left:50%}.column-lg>.col-sm-6{height:50%;width:auto}.row-lg>.col-sm-7{height:auto;width:58.3333%}.row-lg>.offset-sm-7{margin-left:58.3333%}.column-lg>.col-sm-7{height:58.3333%;width:auto}.row-lg>.col-sm-8{height:auto;width:66.6667%}.row-lg>.offset-sm-8{margin-left:66.6667%}.column-lg>.col-sm-8{height:66.6667%;width:auto}.row-lg>.col-sm-9{height:auto;width:75%}.row-lg>.offset-sm-9{margin-left:75%}.column-lg>.col-sm-9{height:75%;width:auto}.row-lg>.col-sm-10{height:auto;width:83.3333%}.row-lg>.offset-sm-10{margin-left:83.3333%}.column-lg>.col-sm-10{height:83.3333%;width:auto}.row-lg>.col-sm-11{height:auto;width:91.6667%}.row-lg>.offset-sm-11{margin-left:91.6667%}.column-lg>.col-sm-11{height:91.6667%;width:auto}.row-lg>.col-sm-12{height:auto;width:100%}.row-lg>.offset-sm-12{margin-left:100%}.column-lg>.col-sm-12{height:100%;width:auto}.row-lg>.col-md-0{height:auto;width:0%}.row-lg>.offset-md-0{margin-left:0%}.column-lg>.col-md-0{height:0%;width:auto}.row-lg>.col-md-1{height:auto;width:8.3333%}.row-lg>.offset-md-1{margin-left:8.3333%}.column-lg>.col-md-1{height:8.3333%;width:auto}.row-lg>.col-md-2{height:auto;width:16.6667%}.row-lg>.offset-md-2{margin-left:16.6667%}.column-lg>.col-md-2{height:16.6667%;width:auto}.row-lg>.col-md-3{height:auto;width:25%}.row-lg>.offset-md-3{margin-left:25%}.column-lg>.col-md-3{height:25%;width:auto}.row-lg>.col-md-4{height:auto;width:33.3333%}.row-lg>.offset-md-4{margin-left:33.3333%}.column-lg>.col-md-4{height:33.3333%;width:auto}.row-lg>.col-md-5{height:auto;width:41.6667%}.row-lg>.offset-md-5{margin-left:41.6667%}.column-lg>.col-md-5{height:41.6667%;width:auto}.row-lg>.col-md-6{height:auto;width:50%}.row-lg>.offset-md-6{margin-left:50%}.column-lg>.col-md-6{height:50%;width:auto}.row-lg>.col-md-7{height:auto;width:58.3333%}.row-lg>.offset-md-7{margin-left:58.3333%}.column-lg>.col-md-7{height:58.3333%;width:auto}.row-lg>.col-md-8{height:auto;width:66.6667%}.row-lg>.offset-md-8{margin-left:66.6667%}.column-lg>.col-md-8{height:66.6667%;width:auto}.row-lg>.col-md-9{height:auto;width:75%}.row-lg>.offset-md-9{margin-left:75%}.column-lg>.col-md-9{height:75%;width:auto}.row-lg>.col-md-10{height:auto;width:83.3333%}.row-lg>.offset-md-10{margin-left:83.3333%}.column-lg>.col-md-10{height:83.3333%;width:auto}.row-lg>.col-md-11{height:auto;width:91.6667%}.row-lg>.offset-md-11{margin-left:91.6667%}.column-lg>.col-md-11{height:91.6667%;width:auto}.row-lg>.col-md-12{height:auto;width:100%}.row-lg>.offset-md-12{margin-left:100%}.column-lg>.col-md-12{height:100%;width:auto}.row-lg>.col-lg-0{height:auto;width:0%}.row-lg>.offset-lg-0{margin-left:0%}.column-lg>.col-lg-0{height:0%;width:auto}.row-lg>.col-lg-1{height:auto;width:8.3333%}.row-lg>.offset-lg-1{margin-left:8.3333%}.column-lg>.col-lg-1{height:8.3333%;width:auto}.row-lg>.col-lg-2{height:auto;width:16.6667%}.row-lg>.offset-lg-2{margin-left:16.6667%}.column-lg>.col-lg-2{height:16.6667%;width:auto}.row-lg>.col-lg-3{height:auto;width:25%}.row-lg>.offset-lg-3{margin-left:25%}.column-lg>.col-lg-3{height:25%;width:auto}.row-lg>.col-lg-4{height:auto;width:33.3333%}.row-lg>.offset-lg-4{margin-left:33.3333%}.column-lg>.col-lg-4{height:33.3333%;width:auto}.row-lg>.col-lg-5{height:auto;width:41.6667%}.row-lg>.offset-lg-5{margin-left:41.6667%}.column-lg>.col-lg-5{height:41.6667%;width:auto}.row-lg>.col-lg-6{height:auto;width:50%}.row-lg>.offset-lg-6{margin-left:50%}.column-lg>.col-lg-6{height:50%;width:auto}.row-lg>.col-lg-7{height:auto;width:58.3333%}.row-lg>.offset-lg-7{margin-left:58.3333%}.column-lg>.col-lg-7{height:58.3333%;width:auto}.row-lg>.col-lg-8{height:auto;width:66.6667%}.row-lg>.offset-lg-8{margin-left:66.6667%}.column-lg>.col-lg-8{height:66.6667%;width:auto}.row-lg>.col-lg-9{height:auto;width:75%}.row-lg>.offset-lg-9{margin-left:75%}.column-lg>.col-lg-9{height:75%;width:auto}.row-lg>.col-lg-10{height:auto;width:83.3333%}.row-lg>.offset-lg-10{margin-left:83.3333%}.column-lg>.col-lg-10{height:83.3333%;width:auto}.row-lg>.col-lg-11{height:auto;width:91.6667%}.row-lg>.offset-lg-11{margin-left:91.6667%}.column-lg>.col-lg-11{height:91.6667%;width:auto}.row-lg>.col-lg-12{height:auto;width:100%}.row-lg>.offset-lg-12{margin-left:100%}.column-lg>.col-lg-12{height:100%;width:auto}}@media (min-width:1920px){.flex-xl-block{display:block}.flex-xl-inline{display:inline-block}.q-pa-xl-none{padding:0 0}.q-pl-xl-none,.q-px-xl-none{padding-left:0}.q-pr-xl-none,.q-px-xl-none{padding-right:0}.q-pt-xl-none,.q-py-xl-none{padding-top:0}.q-pb-xl-none,.q-py-xl-none{padding-bottom:0}.q-ma-xl-none{margin:0 0}.q-ml-xl-none,.q-mx-xl-none{margin-left:0}.q-mr-xl-none,.q-mx-xl-none{margin-right:0}.q-mt-xl-none,.q-my-xl-none{margin-top:0}.q-mb-xl-none,.q-my-xl-none{margin-bottom:0}.q-pa-xl-xs{padding:4px 4px}.q-pl-xl-xs,.q-px-xl-xs{padding-left:4px}.q-pr-xl-xs,.q-px-xl-xs{padding-right:4px}.q-pt-xl-xs,.q-py-xl-xs{padding-top:4px}.q-pb-xl-xs,.q-py-xl-xs{padding-bottom:4px}.q-ma-xl-xs{margin:4px 4px}.q-ml-xl-xs,.q-mx-xl-xs{margin-left:4px}.q-mr-xl-xs,.q-mx-xl-xs{margin-right:4px}.q-mt-xl-xs,.q-my-xl-xs{margin-top:4px}.q-mb-xl-xs,.q-my-xl-xs{margin-bottom:4px}.q-pa-xl-sm{padding:8px 8px}.q-pl-xl-sm,.q-px-xl-sm{padding-left:8px}.q-pr-xl-sm,.q-px-xl-sm{padding-right:8px}.q-pt-xl-sm,.q-py-xl-sm{padding-top:8px}.q-pb-xl-sm,.q-py-xl-sm{padding-bottom:8px}.q-ma-xl-sm{margin:8px 8px}.q-ml-xl-sm,.q-mx-xl-sm{margin-left:8px}.q-mr-xl-sm,.q-mx-xl-sm{margin-right:8px}.q-mt-xl-sm,.q-my-xl-sm{margin-top:8px}.q-mb-xl-sm,.q-my-xl-sm{margin-bottom:8px}.q-pa-xl-md{padding:16px 16px}.q-pl-xl-md,.q-px-xl-md{padding-left:16px}.q-pr-xl-md,.q-px-xl-md{padding-right:16px}.q-pt-xl-md,.q-py-xl-md{padding-top:16px}.q-pb-xl-md,.q-py-xl-md{padding-bottom:16px}.q-ma-xl-md{margin:16px 16px}.q-ml-xl-md,.q-mx-xl-md{margin-left:16px}.q-mr-xl-md,.q-mx-xl-md{margin-right:16px}.q-mt-xl-md,.q-my-xl-md{margin-top:16px}.q-mb-xl-md,.q-my-xl-md{margin-bottom:16px}.q-pa-xl-lg{padding:24px 24px}.q-pl-xl-lg,.q-px-xl-lg{padding-left:24px}.q-pr-xl-lg,.q-px-xl-lg{padding-right:24px}.q-pt-xl-lg,.q-py-xl-lg{padding-top:24px}.q-pb-xl-lg,.q-py-xl-lg{padding-bottom:24px}.q-ma-xl-lg{margin:24px 24px}.q-ml-xl-lg,.q-mx-xl-lg{margin-left:24px}.q-mr-xl-lg,.q-mx-xl-lg{margin-right:24px}.q-mt-xl-lg,.q-my-xl-lg{margin-top:24px}.q-mb-xl-lg,.q-my-xl-lg{margin-bottom:24px}.q-pa-xl-xl{padding:48px 48px}.q-pl-xl-xl,.q-px-xl-xl{padding-left:48px}.q-pr-xl-xl,.q-px-xl-xl{padding-right:48px}.q-pt-xl-xl,.q-py-xl-xl{padding-top:48px}.q-pb-xl-xl,.q-py-xl-xl{padding-bottom:48px}.q-ma-xl-xl{margin:48px 48px}.q-ml-xl-xl,.q-mx-xl-xl{margin-left:48px}.q-mr-xl-xl,.q-mx-xl-xl{margin-right:48px}.q-mt-xl-xl,.q-my-xl-xl{margin-top:48px}.q-mb-xl-xl,.q-my-xl-xl{margin-bottom:48px}.q-ml-xl-auto,.q-mx-xl-auto{margin-left:auto}.q-mr-xl-auto,.q-mx-xl-auto{margin-right:auto}.column.inline-xl,.flex.inline-xl,.row.inline-xl{display:inline-flex}.column-xl,.flex-xl,.row-xl{display:flex;flex-wrap:wrap}.column-xl.inline,.column-xl.inline-xl,.flex-xl.inline,.flex-xl.inline-xl,.row-xl.inline,.row-xl.inline-xl{display:inline-flex}.row.reverse-xl{flex-direction:row-reverse}.row-xl{flex-direction:row}.row-xl.reverse,.row-xl.reverse-xl{flex-direction:row-reverse}.column.reverse-xl{flex-direction:column-reverse}.column-xl{flex-direction:column}.column-xl.reverse,.column-xl.reverse-xl{flex-direction:column-reverse}.wrap-xl{flex-wrap:wrap}.no-wrap-xl{flex-wrap:nowrap}.reverse-wrap-xl{flex-wrap:wrap-reverse}.order-xl-first{order:-10000}.order-xl-last{order:10000}.order-xl-none{order:0}.justify-xl-start{justify-content:flex-start}.justify-xl-end{justify-content:flex-end}.flex-xl-center,.justify-xl-center{justify-content:center}.justify-xl-between{justify-content:space-between}.justify-xl-around{justify-content:space-around}.justify-xl-evenly{justify-content:space-evenly}.items-xl-start{align-items:flex-start}.items-xl-end{align-items:flex-end}.flex-xl-center,.items-xl-center{align-items:center}.items-xl-baseline{align-items:baseline}.items-xl-stretch{align-items:stretch}.content-xl-start{align-content:flex-start}.content-xl-end{align-content:flex-end}.content-xl-center{align-content:center}.content-xl-between{align-content:space-between}.content-xl-around{align-content:space-around}.self-xl-start{align-self:flex-start}.self-xl-end{align-self:flex-end}.self-xl-center{align-self:center}.self-xl-baseline{align-self:baseline}.self-xl-stretch{align-self:stretch}.q-gutter-xl-none,.q-gutter-xl-none>*,.q-gutter-xl-x-none,.q-gutter-xl-x-none>*{margin-left:0}.q-gutter-xl-none,.q-gutter-xl-none>*,.q-gutter-xl-y-none,.q-gutter-xl-y-none>*{margin-top:0}.q-col-gutter-xl-none,.q-col-gutter-xl-x-none{margin-left:0}.q-col-gutter-xl-none>*,.q-col-gutter-xl-x-none>*{padding-left:0}.q-col-gutter-xl-none,.q-col-gutter-xl-y-none{margin-top:0}.q-col-gutter-xl-none>*,.q-col-gutter-xl-y-none>*{padding-top:0}.q-gutter-xl-x-xs,.q-gutter-xl-xs{margin-left:-4px}.q-gutter-xl-x-xs>*,.q-gutter-xl-xs>*{margin-left:4px}.q-gutter-xl-xs,.q-gutter-xl-y-xs{margin-top:-4px}.q-gutter-xl-xs>*,.q-gutter-xl-y-xs>*{margin-top:4px}.q-col-gutter-xl-x-xs,.q-col-gutter-xl-xs{margin-left:-4px}.q-col-gutter-xl-x-xs>*,.q-col-gutter-xl-xs>*{padding-left:4px}.q-col-gutter-xl-xs,.q-col-gutter-xl-y-xs{margin-top:-4px}.q-col-gutter-xl-xs>*,.q-col-gutter-xl-y-xs>*{padding-top:4px}.q-gutter-xl-sm,.q-gutter-xl-x-sm{margin-left:-8px}.q-gutter-xl-sm>*,.q-gutter-xl-x-sm>*{margin-left:8px}.q-gutter-xl-sm,.q-gutter-xl-y-sm{margin-top:-8px}.q-gutter-xl-sm>*,.q-gutter-xl-y-sm>*{margin-top:8px}.q-col-gutter-xl-sm,.q-col-gutter-xl-x-sm{margin-left:-8px}.q-col-gutter-xl-sm>*,.q-col-gutter-xl-x-sm>*{padding-left:8px}.q-col-gutter-xl-sm,.q-col-gutter-xl-y-sm{margin-top:-8px}.q-col-gutter-xl-sm>*,.q-col-gutter-xl-y-sm>*{padding-top:8px}.q-gutter-xl-md,.q-gutter-xl-x-md{margin-left:-16px}.q-gutter-xl-md>*,.q-gutter-xl-x-md>*{margin-left:16px}.q-gutter-xl-md,.q-gutter-xl-y-md{margin-top:-16px}.q-gutter-xl-md>*,.q-gutter-xl-y-md>*{margin-top:16px}.q-col-gutter-xl-md,.q-col-gutter-xl-x-md{margin-left:-16px}.q-col-gutter-xl-md>*,.q-col-gutter-xl-x-md>*{padding-left:16px}.q-col-gutter-xl-md,.q-col-gutter-xl-y-md{margin-top:-16px}.q-col-gutter-xl-md>*,.q-col-gutter-xl-y-md>*{padding-top:16px}.q-gutter-xl-lg,.q-gutter-xl-x-lg{margin-left:-24px}.q-gutter-xl-lg>*,.q-gutter-xl-x-lg>*{margin-left:24px}.q-gutter-xl-lg,.q-gutter-xl-y-lg{margin-top:-24px}.q-gutter-xl-lg>*,.q-gutter-xl-y-lg>*{margin-top:24px}.q-col-gutter-xl-lg,.q-col-gutter-xl-x-lg{margin-left:-24px}.q-col-gutter-xl-lg>*,.q-col-gutter-xl-x-lg>*{padding-left:24px}.q-col-gutter-xl-lg,.q-col-gutter-xl-y-lg{margin-top:-24px}.q-col-gutter-xl-lg>*,.q-col-gutter-xl-y-lg>*{padding-top:24px}.q-gutter-xl-x-xl,.q-gutter-xl-xl{margin-left:-48px}.q-gutter-xl-x-xl>*,.q-gutter-xl-xl>*{margin-left:48px}.q-gutter-xl-xl,.q-gutter-xl-y-xl{margin-top:-48px}.q-gutter-xl-xl>*,.q-gutter-xl-y-xl>*{margin-top:48px}.q-col-gutter-xl-x-xl,.q-col-gutter-xl-xl{margin-left:-48px}.q-col-gutter-xl-x-xl>*,.q-col-gutter-xl-xl>*{padding-left:48px}.q-col-gutter-xl-xl,.q-col-gutter-xl-y-xl{margin-top:-48px}.q-col-gutter-xl-xl>*,.q-col-gutter-xl-y-xl>*{padding-top:48px}.row-xl>.col-0,.row-xl>.col-xs-0{height:auto;width:0%}.row-xl>.offset-0,.row-xl>.offset-xs-0{margin-left:0%}.column-xl>.col-0,.column-xl>.col-xs-0{height:0%;width:auto}.row-xl>.col-1,.row-xl>.col-xs-1{height:auto;width:8.3333%}.row-xl>.offset-1,.row-xl>.offset-xs-1{margin-left:8.3333%}.column-xl>.col-1,.column-xl>.col-xs-1{height:8.3333%;width:auto}.row-xl>.col-2,.row-xl>.col-xs-2{height:auto;width:16.6667%}.row-xl>.offset-2,.row-xl>.offset-xs-2{margin-left:16.6667%}.column-xl>.col-2,.column-xl>.col-xs-2{height:16.6667%;width:auto}.row-xl>.col-3,.row-xl>.col-xs-3{height:auto;width:25%}.row-xl>.offset-3,.row-xl>.offset-xs-3{margin-left:25%}.column-xl>.col-3,.column-xl>.col-xs-3{height:25%;width:auto}.row-xl>.col-4,.row-xl>.col-xs-4{height:auto;width:33.3333%}.row-xl>.offset-4,.row-xl>.offset-xs-4{margin-left:33.3333%}.column-xl>.col-4,.column-xl>.col-xs-4{height:33.3333%;width:auto}.row-xl>.col-5,.row-xl>.col-xs-5{height:auto;width:41.6667%}.row-xl>.offset-5,.row-xl>.offset-xs-5{margin-left:41.6667%}.column-xl>.col-5,.column-xl>.col-xs-5{height:41.6667%;width:auto}.row-xl>.col-6,.row-xl>.col-xs-6{height:auto;width:50%}.row-xl>.offset-6,.row-xl>.offset-xs-6{margin-left:50%}.column-xl>.col-6,.column-xl>.col-xs-6{height:50%;width:auto}.row-xl>.col-7,.row-xl>.col-xs-7{height:auto;width:58.3333%}.row-xl>.offset-7,.row-xl>.offset-xs-7{margin-left:58.3333%}.column-xl>.col-7,.column-xl>.col-xs-7{height:58.3333%;width:auto}.row-xl>.col-8,.row-xl>.col-xs-8{height:auto;width:66.6667%}.row-xl>.offset-8,.row-xl>.offset-xs-8{margin-left:66.6667%}.column-xl>.col-8,.column-xl>.col-xs-8{height:66.6667%;width:auto}.row-xl>.col-9,.row-xl>.col-xs-9{height:auto;width:75%}.row-xl>.offset-9,.row-xl>.offset-xs-9{margin-left:75%}.column-xl>.col-9,.column-xl>.col-xs-9{height:75%;width:auto}.row-xl>.col-10,.row-xl>.col-xs-10{height:auto;width:83.3333%}.row-xl>.offset-10,.row-xl>.offset-xs-10{margin-left:83.3333%}.column-xl>.col-10,.column-xl>.col-xs-10{height:83.3333%;width:auto}.row-xl>.col-11,.row-xl>.col-xs-11{height:auto;width:91.6667%}.row-xl>.offset-11,.row-xl>.offset-xs-11{margin-left:91.6667%}.column-xl>.col-11,.column-xl>.col-xs-11{height:91.6667%;width:auto}.row-xl>.col-12,.row-xl>.col-xs-12{height:auto;width:100%}.row-xl>.offset-12,.row-xl>.offset-xs-12{margin-left:100%}.column-xl>.col-12,.column-xl>.col-xs-12{height:100%;width:auto}.row-xl>.col-sm-0{height:auto;width:0%}.row-xl>.offset-sm-0{margin-left:0%}.column-xl>.col-sm-0{height:0%;width:auto}.row-xl>.col-sm-1{height:auto;width:8.3333%}.row-xl>.offset-sm-1{margin-left:8.3333%}.column-xl>.col-sm-1{height:8.3333%;width:auto}.row-xl>.col-sm-2{height:auto;width:16.6667%}.row-xl>.offset-sm-2{margin-left:16.6667%}.column-xl>.col-sm-2{height:16.6667%;width:auto}.row-xl>.col-sm-3{height:auto;width:25%}.row-xl>.offset-sm-3{margin-left:25%}.column-xl>.col-sm-3{height:25%;width:auto}.row-xl>.col-sm-4{height:auto;width:33.3333%}.row-xl>.offset-sm-4{margin-left:33.3333%}.column-xl>.col-sm-4{height:33.3333%;width:auto}.row-xl>.col-sm-5{height:auto;width:41.6667%}.row-xl>.offset-sm-5{margin-left:41.6667%}.column-xl>.col-sm-5{height:41.6667%;width:auto}.row-xl>.col-sm-6{height:auto;width:50%}.row-xl>.offset-sm-6{margin-left:50%}.column-xl>.col-sm-6{height:50%;width:auto}.row-xl>.col-sm-7{height:auto;width:58.3333%}.row-xl>.offset-sm-7{margin-left:58.3333%}.column-xl>.col-sm-7{height:58.3333%;width:auto}.row-xl>.col-sm-8{height:auto;width:66.6667%}.row-xl>.offset-sm-8{margin-left:66.6667%}.column-xl>.col-sm-8{height:66.6667%;width:auto}.row-xl>.col-sm-9{height:auto;width:75%}.row-xl>.offset-sm-9{margin-left:75%}.column-xl>.col-sm-9{height:75%;width:auto}.row-xl>.col-sm-10{height:auto;width:83.3333%}.row-xl>.offset-sm-10{margin-left:83.3333%}.column-xl>.col-sm-10{height:83.3333%;width:auto}.row-xl>.col-sm-11{height:auto;width:91.6667%}.row-xl>.offset-sm-11{margin-left:91.6667%}.column-xl>.col-sm-11{height:91.6667%;width:auto}.row-xl>.col-sm-12{height:auto;width:100%}.row-xl>.offset-sm-12{margin-left:100%}.column-xl>.col-sm-12{height:100%;width:auto}.row-xl>.col-md-0{height:auto;width:0%}.row-xl>.offset-md-0{margin-left:0%}.column-xl>.col-md-0{height:0%;width:auto}.row-xl>.col-md-1{height:auto;width:8.3333%}.row-xl>.offset-md-1{margin-left:8.3333%}.column-xl>.col-md-1{height:8.3333%;width:auto}.row-xl>.col-md-2{height:auto;width:16.6667%}.row-xl>.offset-md-2{margin-left:16.6667%}.column-xl>.col-md-2{height:16.6667%;width:auto}.row-xl>.col-md-3{height:auto;width:25%}.row-xl>.offset-md-3{margin-left:25%}.column-xl>.col-md-3{height:25%;width:auto}.row-xl>.col-md-4{height:auto;width:33.3333%}.row-xl>.offset-md-4{margin-left:33.3333%}.column-xl>.col-md-4{height:33.3333%;width:auto}.row-xl>.col-md-5{height:auto;width:41.6667%}.row-xl>.offset-md-5{margin-left:41.6667%}.column-xl>.col-md-5{height:41.6667%;width:auto}.row-xl>.col-md-6{height:auto;width:50%}.row-xl>.offset-md-6{margin-left:50%}.column-xl>.col-md-6{height:50%;width:auto}.row-xl>.col-md-7{height:auto;width:58.3333%}.row-xl>.offset-md-7{margin-left:58.3333%}.column-xl>.col-md-7{height:58.3333%;width:auto}.row-xl>.col-md-8{height:auto;width:66.6667%}.row-xl>.offset-md-8{margin-left:66.6667%}.column-xl>.col-md-8{height:66.6667%;width:auto}.row-xl>.col-md-9{height:auto;width:75%}.row-xl>.offset-md-9{margin-left:75%}.column-xl>.col-md-9{height:75%;width:auto}.row-xl>.col-md-10{height:auto;width:83.3333%}.row-xl>.offset-md-10{margin-left:83.3333%}.column-xl>.col-md-10{height:83.3333%;width:auto}.row-xl>.col-md-11{height:auto;width:91.6667%}.row-xl>.offset-md-11{margin-left:91.6667%}.column-xl>.col-md-11{height:91.6667%;width:auto}.row-xl>.col-md-12{height:auto;width:100%}.row-xl>.offset-md-12{margin-left:100%}.column-xl>.col-md-12{height:100%;width:auto}.row-xl>.col-lg-0{height:auto;width:0%}.row-xl>.offset-lg-0{margin-left:0%}.column-xl>.col-lg-0{height:0%;width:auto}.row-xl>.col-lg-1{height:auto;width:8.3333%}.row-xl>.offset-lg-1{margin-left:8.3333%}.column-xl>.col-lg-1{height:8.3333%;width:auto}.row-xl>.col-lg-2{height:auto;width:16.6667%}.row-xl>.offset-lg-2{margin-left:16.6667%}.column-xl>.col-lg-2{height:16.6667%;width:auto}.row-xl>.col-lg-3{height:auto;width:25%}.row-xl>.offset-lg-3{margin-left:25%}.column-xl>.col-lg-3{height:25%;width:auto}.row-xl>.col-lg-4{height:auto;width:33.3333%}.row-xl>.offset-lg-4{margin-left:33.3333%}.column-xl>.col-lg-4{height:33.3333%;width:auto}.row-xl>.col-lg-5{height:auto;width:41.6667%}.row-xl>.offset-lg-5{margin-left:41.6667%}.column-xl>.col-lg-5{height:41.6667%;width:auto}.row-xl>.col-lg-6{height:auto;width:50%}.row-xl>.offset-lg-6{margin-left:50%}.column-xl>.col-lg-6{height:50%;width:auto}.row-xl>.col-lg-7{height:auto;width:58.3333%}.row-xl>.offset-lg-7{margin-left:58.3333%}.column-xl>.col-lg-7{height:58.3333%;width:auto}.row-xl>.col-lg-8{height:auto;width:66.6667%}.row-xl>.offset-lg-8{margin-left:66.6667%}.column-xl>.col-lg-8{height:66.6667%;width:auto}.row-xl>.col-lg-9{height:auto;width:75%}.row-xl>.offset-lg-9{margin-left:75%}.column-xl>.col-lg-9{height:75%;width:auto}.row-xl>.col-lg-10{height:auto;width:83.3333%}.row-xl>.offset-lg-10{margin-left:83.3333%}.column-xl>.col-lg-10{height:83.3333%;width:auto}.row-xl>.col-lg-11{height:auto;width:91.6667%}.row-xl>.offset-lg-11{margin-left:91.6667%}.column-xl>.col-lg-11{height:91.6667%;width:auto}.row-xl>.col-lg-12{height:auto;width:100%}.row-xl>.offset-lg-12{margin-left:100%}.column-xl>.col-lg-12{height:100%;width:auto}.row-xl>.col-xl-0{height:auto;width:0%}.row-xl>.offset-xl-0{margin-left:0%}.column-xl>.col-xl-0{height:0%;width:auto}.row-xl>.col-xl-1{height:auto;width:8.3333%}.row-xl>.offset-xl-1{margin-left:8.3333%}.column-xl>.col-xl-1{height:8.3333%;width:auto}.row-xl>.col-xl-2{height:auto;width:16.6667%}.row-xl>.offset-xl-2{margin-left:16.6667%}.column-xl>.col-xl-2{height:16.6667%;width:auto}.row-xl>.col-xl-3{height:auto;width:25%}.row-xl>.offset-xl-3{margin-left:25%}.column-xl>.col-xl-3{height:25%;width:auto}.row-xl>.col-xl-4{height:auto;width:33.3333%}.row-xl>.offset-xl-4{margin-left:33.3333%}.column-xl>.col-xl-4{height:33.3333%;width:auto}.row-xl>.col-xl-5{height:auto;width:41.6667%}.row-xl>.offset-xl-5{margin-left:41.6667%}.column-xl>.col-xl-5{height:41.6667%;width:auto}.row-xl>.col-xl-6{height:auto;width:50%}.row-xl>.offset-xl-6{margin-left:50%}.column-xl>.col-xl-6{height:50%;width:auto}.row-xl>.col-xl-7{height:auto;width:58.3333%}.row-xl>.offset-xl-7{margin-left:58.3333%}.column-xl>.col-xl-7{height:58.3333%;width:auto}.row-xl>.col-xl-8{height:auto;width:66.6667%}.row-xl>.offset-xl-8{margin-left:66.6667%}.column-xl>.col-xl-8{height:66.6667%;width:auto}.row-xl>.col-xl-9{height:auto;width:75%}.row-xl>.offset-xl-9{margin-left:75%}.column-xl>.col-xl-9{height:75%;width:auto}.row-xl>.col-xl-10{height:auto;width:83.3333%}.row-xl>.offset-xl-10{margin-left:83.3333%}.column-xl>.col-xl-10{height:83.3333%;width:auto}.row-xl>.col-xl-11{height:auto;width:91.6667%}.row-xl>.offset-xl-11{margin-left:91.6667%}.column-xl>.col-xl-11{height:91.6667%;width:auto}.row-xl>.col-xl-12{height:auto;width:100%}.row-xl>.offset-xl-12{margin-left:100%}.column-xl>.col-xl-12{height:100%;width:auto}} \ No newline at end of file diff --git a/dist/quasar.addon.rtl.css b/dist/quasar.addon.rtl.css new file mode 100644 index 00000000000..77c308798ff --- /dev/null +++ b/dist/quasar.addon.rtl.css @@ -0,0 +1,5901 @@ +/* + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +@media (min-width: 0) { + .flex-block, + .flex-xs-block { + display: block; + } + .flex-inline, + .flex-xs-inline { + display: inline-block; + } + [dir] .q-pa-xs-none { + padding: 0 0; + } + [dir=ltr] .q-pl-xs-none, [dir=ltr] .q-px-xs-none { + padding-left: 0; + } + [dir=rtl] .q-pl-xs-none, [dir=rtl] .q-px-xs-none { + padding-right: 0; + } + [dir=ltr] .q-pr-xs-none, [dir=ltr] .q-px-xs-none { + padding-right: 0; + } + [dir=rtl] .q-pr-xs-none, [dir=rtl] .q-px-xs-none { + padding-left: 0; + } + [dir] .q-pt-xs-none, [dir] .q-py-xs-none { + padding-top: 0; + } + [dir] .q-pb-xs-none, [dir] .q-py-xs-none { + padding-bottom: 0; + } + [dir] .q-ma-xs-none { + margin: 0 0; + } + [dir=ltr] .q-ml-xs-none, [dir=ltr] .q-mx-xs-none { + margin-left: 0; + } + [dir=rtl] .q-ml-xs-none, [dir=rtl] .q-mx-xs-none { + margin-right: 0; + } + [dir=ltr] .q-mr-xs-none, [dir=ltr] .q-mx-xs-none { + margin-right: 0; + } + [dir=rtl] .q-mr-xs-none, [dir=rtl] .q-mx-xs-none { + margin-left: 0; + } + [dir] .q-mt-xs-none, [dir] .q-my-xs-none { + margin-top: 0; + } + [dir] .q-mb-xs-none, [dir] .q-my-xs-none { + margin-bottom: 0; + } + [dir] .q-pa-xs-xs { + padding: 4px 4px; + } + [dir=ltr] .q-pl-xs-xs, [dir=ltr] .q-px-xs-xs { + padding-left: 4px; + } + [dir=rtl] .q-pl-xs-xs, [dir=rtl] .q-px-xs-xs { + padding-right: 4px; + } + [dir=ltr] .q-pr-xs-xs, [dir=ltr] .q-px-xs-xs { + padding-right: 4px; + } + [dir=rtl] .q-pr-xs-xs, [dir=rtl] .q-px-xs-xs { + padding-left: 4px; + } + [dir] .q-pt-xs-xs, [dir] .q-py-xs-xs { + padding-top: 4px; + } + [dir] .q-pb-xs-xs, [dir] .q-py-xs-xs { + padding-bottom: 4px; + } + [dir] .q-ma-xs-xs { + margin: 4px 4px; + } + [dir=ltr] .q-ml-xs-xs, [dir=ltr] .q-mx-xs-xs { + margin-left: 4px; + } + [dir=rtl] .q-ml-xs-xs, [dir=rtl] .q-mx-xs-xs { + margin-right: 4px; + } + [dir=ltr] .q-mr-xs-xs, [dir=ltr] .q-mx-xs-xs { + margin-right: 4px; + } + [dir=rtl] .q-mr-xs-xs, [dir=rtl] .q-mx-xs-xs { + margin-left: 4px; + } + [dir] .q-mt-xs-xs, [dir] .q-my-xs-xs { + margin-top: 4px; + } + [dir] .q-mb-xs-xs, [dir] .q-my-xs-xs { + margin-bottom: 4px; + } + [dir] .q-pa-xs-sm { + padding: 8px 8px; + } + [dir=ltr] .q-pl-xs-sm, [dir=ltr] .q-px-xs-sm { + padding-left: 8px; + } + [dir=rtl] .q-pl-xs-sm, [dir=rtl] .q-px-xs-sm { + padding-right: 8px; + } + [dir=ltr] .q-pr-xs-sm, [dir=ltr] .q-px-xs-sm { + padding-right: 8px; + } + [dir=rtl] .q-pr-xs-sm, [dir=rtl] .q-px-xs-sm { + padding-left: 8px; + } + [dir] .q-pt-xs-sm, [dir] .q-py-xs-sm { + padding-top: 8px; + } + [dir] .q-pb-xs-sm, [dir] .q-py-xs-sm { + padding-bottom: 8px; + } + [dir] .q-ma-xs-sm { + margin: 8px 8px; + } + [dir=ltr] .q-ml-xs-sm, [dir=ltr] .q-mx-xs-sm { + margin-left: 8px; + } + [dir=rtl] .q-ml-xs-sm, [dir=rtl] .q-mx-xs-sm { + margin-right: 8px; + } + [dir=ltr] .q-mr-xs-sm, [dir=ltr] .q-mx-xs-sm { + margin-right: 8px; + } + [dir=rtl] .q-mr-xs-sm, [dir=rtl] .q-mx-xs-sm { + margin-left: 8px; + } + [dir] .q-mt-xs-sm, [dir] .q-my-xs-sm { + margin-top: 8px; + } + [dir] .q-mb-xs-sm, [dir] .q-my-xs-sm { + margin-bottom: 8px; + } + [dir] .q-pa-xs-md { + padding: 16px 16px; + } + [dir=ltr] .q-pl-xs-md, [dir=ltr] .q-px-xs-md { + padding-left: 16px; + } + [dir=rtl] .q-pl-xs-md, [dir=rtl] .q-px-xs-md { + padding-right: 16px; + } + [dir=ltr] .q-pr-xs-md, [dir=ltr] .q-px-xs-md { + padding-right: 16px; + } + [dir=rtl] .q-pr-xs-md, [dir=rtl] .q-px-xs-md { + padding-left: 16px; + } + [dir] .q-pt-xs-md, [dir] .q-py-xs-md { + padding-top: 16px; + } + [dir] .q-pb-xs-md, [dir] .q-py-xs-md { + padding-bottom: 16px; + } + [dir] .q-ma-xs-md { + margin: 16px 16px; + } + [dir=ltr] .q-ml-xs-md, [dir=ltr] .q-mx-xs-md { + margin-left: 16px; + } + [dir=rtl] .q-ml-xs-md, [dir=rtl] .q-mx-xs-md { + margin-right: 16px; + } + [dir=ltr] .q-mr-xs-md, [dir=ltr] .q-mx-xs-md { + margin-right: 16px; + } + [dir=rtl] .q-mr-xs-md, [dir=rtl] .q-mx-xs-md { + margin-left: 16px; + } + [dir] .q-mt-xs-md, [dir] .q-my-xs-md { + margin-top: 16px; + } + [dir] .q-mb-xs-md, [dir] .q-my-xs-md { + margin-bottom: 16px; + } + [dir] .q-pa-xs-lg { + padding: 24px 24px; + } + [dir=ltr] .q-pl-xs-lg, [dir=ltr] .q-px-xs-lg { + padding-left: 24px; + } + [dir=rtl] .q-pl-xs-lg, [dir=rtl] .q-px-xs-lg { + padding-right: 24px; + } + [dir=ltr] .q-pr-xs-lg, [dir=ltr] .q-px-xs-lg { + padding-right: 24px; + } + [dir=rtl] .q-pr-xs-lg, [dir=rtl] .q-px-xs-lg { + padding-left: 24px; + } + [dir] .q-pt-xs-lg, [dir] .q-py-xs-lg { + padding-top: 24px; + } + [dir] .q-pb-xs-lg, [dir] .q-py-xs-lg { + padding-bottom: 24px; + } + [dir] .q-ma-xs-lg { + margin: 24px 24px; + } + [dir=ltr] .q-ml-xs-lg, [dir=ltr] .q-mx-xs-lg { + margin-left: 24px; + } + [dir=rtl] .q-ml-xs-lg, [dir=rtl] .q-mx-xs-lg { + margin-right: 24px; + } + [dir=ltr] .q-mr-xs-lg, [dir=ltr] .q-mx-xs-lg { + margin-right: 24px; + } + [dir=rtl] .q-mr-xs-lg, [dir=rtl] .q-mx-xs-lg { + margin-left: 24px; + } + [dir] .q-mt-xs-lg, [dir] .q-my-xs-lg { + margin-top: 24px; + } + [dir] .q-mb-xs-lg, [dir] .q-my-xs-lg { + margin-bottom: 24px; + } + [dir] .q-pa-xs-xl { + padding: 48px 48px; + } + [dir=ltr] .q-pl-xs-xl, [dir=ltr] .q-px-xs-xl { + padding-left: 48px; + } + [dir=rtl] .q-pl-xs-xl, [dir=rtl] .q-px-xs-xl { + padding-right: 48px; + } + [dir=ltr] .q-pr-xs-xl, [dir=ltr] .q-px-xs-xl { + padding-right: 48px; + } + [dir=rtl] .q-pr-xs-xl, [dir=rtl] .q-px-xs-xl { + padding-left: 48px; + } + [dir] .q-pt-xs-xl, [dir] .q-py-xs-xl { + padding-top: 48px; + } + [dir] .q-pb-xs-xl, [dir] .q-py-xs-xl { + padding-bottom: 48px; + } + [dir] .q-ma-xs-xl { + margin: 48px 48px; + } + [dir=ltr] .q-ml-xs-xl, [dir=ltr] .q-mx-xs-xl { + margin-left: 48px; + } + [dir=rtl] .q-ml-xs-xl, [dir=rtl] .q-mx-xs-xl { + margin-right: 48px; + } + [dir=ltr] .q-mr-xs-xl, [dir=ltr] .q-mx-xs-xl { + margin-right: 48px; + } + [dir=rtl] .q-mr-xs-xl, [dir=rtl] .q-mx-xs-xl { + margin-left: 48px; + } + [dir] .q-mt-xs-xl, [dir] .q-my-xs-xl { + margin-top: 48px; + } + [dir] .q-mb-xs-xl, [dir] .q-my-xs-xl { + margin-bottom: 48px; + } + [dir=ltr] .q-ml-xs-auto, [dir=ltr] .q-mx-xs-auto { + margin-left: auto; + } + [dir=rtl] .q-ml-xs-auto, [dir=rtl] .q-mx-xs-auto { + margin-right: auto; + } + [dir=ltr] .q-mr-xs-auto, [dir=ltr] .q-mx-xs-auto { + margin-right: auto; + } + [dir=rtl] .q-mr-xs-auto, [dir=rtl] .q-mx-xs-auto { + margin-left: auto; + } + .row-xs, + .column-xs, + .flex-xs { + display: flex; + flex-wrap: wrap; + } + .row-xs.inline-xs, + .column-xs.inline-xs, + .flex-xs.inline-xs { + display: inline-flex; + } + .row-xs { + flex-direction: row; + } + .row-xs.reverse-xs { + flex-direction: row-reverse; + } + .column-xs { + flex-direction: column; + } + .column-xs.reverse-xs { + flex-direction: column-reverse; + } + .wrap-xs { + flex-wrap: wrap; + } + .no-wrap-xs { + flex-wrap: nowrap; + } + .reverse-wrap-xs { + flex-wrap: wrap-reverse; + } + .order-xs-first { + order: -10000; + } + .order-xs-last { + order: 10000; + } + .order-xs-none { + order: 0; + } + .justify-xs-start { + justify-content: flex-start; + } + .justify-xs-end { + justify-content: flex-end; + } + .justify-xs-center, + .flex-xs-center { + justify-content: center; + } + .justify-xs-between { + justify-content: space-between; + } + .justify-xs-around { + justify-content: space-around; + } + .justify-xs-evenly { + justify-content: space-evenly; + } + .items-xs-start { + align-items: flex-start; + } + .items-xs-end { + align-items: flex-end; + } + .items-xs-center, + .flex-xs-center { + align-items: center; + } + .items-xs-baseline { + align-items: baseline; + } + .items-xs-stretch { + align-items: stretch; + } + .content-xs-start { + align-content: flex-start; + } + .content-xs-end { + align-content: flex-end; + } + .content-xs-center { + align-content: center; + } + .content-xs-between { + align-content: space-between; + } + .content-xs-around { + align-content: space-around; + } + .self-xs-start { + align-self: flex-start; + } + .self-xs-end { + align-self: flex-end; + } + .self-xs-center { + align-self: center; + } + .self-xs-baseline { + align-self: baseline; + } + .self-xs-stretch { + align-self: stretch; + } + [dir=ltr] .q-gutter-xs-x-none, [dir=ltr] .q-gutter-xs-none { + margin-left: 0; + } + [dir=rtl] .q-gutter-xs-x-none, [dir=rtl] .q-gutter-xs-none { + margin-right: 0; + } + [dir=ltr] .q-gutter-xs-x-none > *, [dir=ltr] .q-gutter-xs-none > * { + margin-left: 0; + } + [dir=rtl] .q-gutter-xs-x-none > *, [dir=rtl] .q-gutter-xs-none > * { + margin-right: 0; + } + [dir] .q-gutter-xs-y-none, [dir] .q-gutter-xs-none { + margin-top: 0; + } + [dir] .q-gutter-xs-y-none > *, [dir] .q-gutter-xs-none > * { + margin-top: 0; + } + [dir=ltr] .q-col-gutter-xs-x-none, [dir=ltr] .q-col-gutter-xs-none { + margin-left: 0; + } + [dir=rtl] .q-col-gutter-xs-x-none, [dir=rtl] .q-col-gutter-xs-none { + margin-right: 0; + } + [dir=ltr] .q-col-gutter-xs-x-none > *, [dir=ltr] .q-col-gutter-xs-none > * { + padding-left: 0; + } + [dir=rtl] .q-col-gutter-xs-x-none > *, [dir=rtl] .q-col-gutter-xs-none > * { + padding-right: 0; + } + [dir] .q-col-gutter-xs-y-none, [dir] .q-col-gutter-xs-none { + margin-top: 0; + } + [dir] .q-col-gutter-xs-y-none > *, [dir] .q-col-gutter-xs-none > * { + padding-top: 0; + } + [dir=ltr] .q-gutter-xs-x-xs, [dir=ltr] .q-gutter-xs-xs { + margin-left: -4px; + } + [dir=rtl] .q-gutter-xs-x-xs, [dir=rtl] .q-gutter-xs-xs { + margin-right: -4px; + } + [dir=ltr] .q-gutter-xs-x-xs > *, [dir=ltr] .q-gutter-xs-xs > * { + margin-left: 4px; + } + [dir=rtl] .q-gutter-xs-x-xs > *, [dir=rtl] .q-gutter-xs-xs > * { + margin-right: 4px; + } + [dir] .q-gutter-xs-y-xs, [dir] .q-gutter-xs-xs { + margin-top: -4px; + } + [dir] .q-gutter-xs-y-xs > *, [dir] .q-gutter-xs-xs > * { + margin-top: 4px; + } + [dir=ltr] .q-col-gutter-xs-x-xs, [dir=ltr] .q-col-gutter-xs-xs { + margin-left: -4px; + } + [dir=rtl] .q-col-gutter-xs-x-xs, [dir=rtl] .q-col-gutter-xs-xs { + margin-right: -4px; + } + [dir=ltr] .q-col-gutter-xs-x-xs > *, [dir=ltr] .q-col-gutter-xs-xs > * { + padding-left: 4px; + } + [dir=rtl] .q-col-gutter-xs-x-xs > *, [dir=rtl] .q-col-gutter-xs-xs > * { + padding-right: 4px; + } + [dir] .q-col-gutter-xs-y-xs, [dir] .q-col-gutter-xs-xs { + margin-top: -4px; + } + [dir] .q-col-gutter-xs-y-xs > *, [dir] .q-col-gutter-xs-xs > * { + padding-top: 4px; + } + [dir=ltr] .q-gutter-xs-x-sm, [dir=ltr] .q-gutter-xs-sm { + margin-left: -8px; + } + [dir=rtl] .q-gutter-xs-x-sm, [dir=rtl] .q-gutter-xs-sm { + margin-right: -8px; + } + [dir=ltr] .q-gutter-xs-x-sm > *, [dir=ltr] .q-gutter-xs-sm > * { + margin-left: 8px; + } + [dir=rtl] .q-gutter-xs-x-sm > *, [dir=rtl] .q-gutter-xs-sm > * { + margin-right: 8px; + } + [dir] .q-gutter-xs-y-sm, [dir] .q-gutter-xs-sm { + margin-top: -8px; + } + [dir] .q-gutter-xs-y-sm > *, [dir] .q-gutter-xs-sm > * { + margin-top: 8px; + } + [dir=ltr] .q-col-gutter-xs-x-sm, [dir=ltr] .q-col-gutter-xs-sm { + margin-left: -8px; + } + [dir=rtl] .q-col-gutter-xs-x-sm, [dir=rtl] .q-col-gutter-xs-sm { + margin-right: -8px; + } + [dir=ltr] .q-col-gutter-xs-x-sm > *, [dir=ltr] .q-col-gutter-xs-sm > * { + padding-left: 8px; + } + [dir=rtl] .q-col-gutter-xs-x-sm > *, [dir=rtl] .q-col-gutter-xs-sm > * { + padding-right: 8px; + } + [dir] .q-col-gutter-xs-y-sm, [dir] .q-col-gutter-xs-sm { + margin-top: -8px; + } + [dir] .q-col-gutter-xs-y-sm > *, [dir] .q-col-gutter-xs-sm > * { + padding-top: 8px; + } + [dir=ltr] .q-gutter-xs-x-md, [dir=ltr] .q-gutter-xs-md { + margin-left: -16px; + } + [dir=rtl] .q-gutter-xs-x-md, [dir=rtl] .q-gutter-xs-md { + margin-right: -16px; + } + [dir=ltr] .q-gutter-xs-x-md > *, [dir=ltr] .q-gutter-xs-md > * { + margin-left: 16px; + } + [dir=rtl] .q-gutter-xs-x-md > *, [dir=rtl] .q-gutter-xs-md > * { + margin-right: 16px; + } + [dir] .q-gutter-xs-y-md, [dir] .q-gutter-xs-md { + margin-top: -16px; + } + [dir] .q-gutter-xs-y-md > *, [dir] .q-gutter-xs-md > * { + margin-top: 16px; + } + [dir=ltr] .q-col-gutter-xs-x-md, [dir=ltr] .q-col-gutter-xs-md { + margin-left: -16px; + } + [dir=rtl] .q-col-gutter-xs-x-md, [dir=rtl] .q-col-gutter-xs-md { + margin-right: -16px; + } + [dir=ltr] .q-col-gutter-xs-x-md > *, [dir=ltr] .q-col-gutter-xs-md > * { + padding-left: 16px; + } + [dir=rtl] .q-col-gutter-xs-x-md > *, [dir=rtl] .q-col-gutter-xs-md > * { + padding-right: 16px; + } + [dir] .q-col-gutter-xs-y-md, [dir] .q-col-gutter-xs-md { + margin-top: -16px; + } + [dir] .q-col-gutter-xs-y-md > *, [dir] .q-col-gutter-xs-md > * { + padding-top: 16px; + } + [dir=ltr] .q-gutter-xs-x-lg, [dir=ltr] .q-gutter-xs-lg { + margin-left: -24px; + } + [dir=rtl] .q-gutter-xs-x-lg, [dir=rtl] .q-gutter-xs-lg { + margin-right: -24px; + } + [dir=ltr] .q-gutter-xs-x-lg > *, [dir=ltr] .q-gutter-xs-lg > * { + margin-left: 24px; + } + [dir=rtl] .q-gutter-xs-x-lg > *, [dir=rtl] .q-gutter-xs-lg > * { + margin-right: 24px; + } + [dir] .q-gutter-xs-y-lg, [dir] .q-gutter-xs-lg { + margin-top: -24px; + } + [dir] .q-gutter-xs-y-lg > *, [dir] .q-gutter-xs-lg > * { + margin-top: 24px; + } + [dir=ltr] .q-col-gutter-xs-x-lg, [dir=ltr] .q-col-gutter-xs-lg { + margin-left: -24px; + } + [dir=rtl] .q-col-gutter-xs-x-lg, [dir=rtl] .q-col-gutter-xs-lg { + margin-right: -24px; + } + [dir=ltr] .q-col-gutter-xs-x-lg > *, [dir=ltr] .q-col-gutter-xs-lg > * { + padding-left: 24px; + } + [dir=rtl] .q-col-gutter-xs-x-lg > *, [dir=rtl] .q-col-gutter-xs-lg > * { + padding-right: 24px; + } + [dir] .q-col-gutter-xs-y-lg, [dir] .q-col-gutter-xs-lg { + margin-top: -24px; + } + [dir] .q-col-gutter-xs-y-lg > *, [dir] .q-col-gutter-xs-lg > * { + padding-top: 24px; + } + [dir=ltr] .q-gutter-xs-x-xl, [dir=ltr] .q-gutter-xs-xl { + margin-left: -48px; + } + [dir=rtl] .q-gutter-xs-x-xl, [dir=rtl] .q-gutter-xs-xl { + margin-right: -48px; + } + [dir=ltr] .q-gutter-xs-x-xl > *, [dir=ltr] .q-gutter-xs-xl > * { + margin-left: 48px; + } + [dir=rtl] .q-gutter-xs-x-xl > *, [dir=rtl] .q-gutter-xs-xl > * { + margin-right: 48px; + } + [dir] .q-gutter-xs-y-xl, [dir] .q-gutter-xs-xl { + margin-top: -48px; + } + [dir] .q-gutter-xs-y-xl > *, [dir] .q-gutter-xs-xl > * { + margin-top: 48px; + } + [dir=ltr] .q-col-gutter-xs-x-xl, [dir=ltr] .q-col-gutter-xs-xl { + margin-left: -48px; + } + [dir=rtl] .q-col-gutter-xs-x-xl, [dir=rtl] .q-col-gutter-xs-xl { + margin-right: -48px; + } + [dir=ltr] .q-col-gutter-xs-x-xl > *, [dir=ltr] .q-col-gutter-xs-xl > * { + padding-left: 48px; + } + [dir=rtl] .q-col-gutter-xs-x-xl > *, [dir=rtl] .q-col-gutter-xs-xl > * { + padding-right: 48px; + } + [dir] .q-col-gutter-xs-y-xl, [dir] .q-col-gutter-xs-xl { + margin-top: -48px; + } + [dir] .q-col-gutter-xs-y-xl > *, [dir] .q-col-gutter-xs-xl > * { + padding-top: 48px; + } + .row-xs > .col-0, + .row-xs > .col-xs-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-xs > .offset-0, [dir=ltr] .row-xs > .offset-xs-0 { + margin-left: 0%; + } + [dir=rtl] .row-xs > .offset-0, [dir=rtl] .row-xs > .offset-xs-0 { + margin-right: 0%; + } + .column-xs > .col-0, + .column-xs > .col-xs-0 { + height: 0%; + width: auto; + } + .row-xs > .col-1, + .row-xs > .col-xs-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-xs > .offset-1, [dir=ltr] .row-xs > .offset-xs-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-xs > .offset-1, [dir=rtl] .row-xs > .offset-xs-1 { + margin-right: 8.3333%; + } + .column-xs > .col-1, + .column-xs > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-xs > .col-2, + .row-xs > .col-xs-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-xs > .offset-2, [dir=ltr] .row-xs > .offset-xs-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-xs > .offset-2, [dir=rtl] .row-xs > .offset-xs-2 { + margin-right: 16.6667%; + } + .column-xs > .col-2, + .column-xs > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-xs > .col-3, + .row-xs > .col-xs-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-xs > .offset-3, [dir=ltr] .row-xs > .offset-xs-3 { + margin-left: 25%; + } + [dir=rtl] .row-xs > .offset-3, [dir=rtl] .row-xs > .offset-xs-3 { + margin-right: 25%; + } + .column-xs > .col-3, + .column-xs > .col-xs-3 { + height: 25%; + width: auto; + } + .row-xs > .col-4, + .row-xs > .col-xs-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-xs > .offset-4, [dir=ltr] .row-xs > .offset-xs-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-xs > .offset-4, [dir=rtl] .row-xs > .offset-xs-4 { + margin-right: 33.3333%; + } + .column-xs > .col-4, + .column-xs > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-xs > .col-5, + .row-xs > .col-xs-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-xs > .offset-5, [dir=ltr] .row-xs > .offset-xs-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-xs > .offset-5, [dir=rtl] .row-xs > .offset-xs-5 { + margin-right: 41.6667%; + } + .column-xs > .col-5, + .column-xs > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-xs > .col-6, + .row-xs > .col-xs-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-xs > .offset-6, [dir=ltr] .row-xs > .offset-xs-6 { + margin-left: 50%; + } + [dir=rtl] .row-xs > .offset-6, [dir=rtl] .row-xs > .offset-xs-6 { + margin-right: 50%; + } + .column-xs > .col-6, + .column-xs > .col-xs-6 { + height: 50%; + width: auto; + } + .row-xs > .col-7, + .row-xs > .col-xs-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-xs > .offset-7, [dir=ltr] .row-xs > .offset-xs-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-xs > .offset-7, [dir=rtl] .row-xs > .offset-xs-7 { + margin-right: 58.3333%; + } + .column-xs > .col-7, + .column-xs > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-xs > .col-8, + .row-xs > .col-xs-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-xs > .offset-8, [dir=ltr] .row-xs > .offset-xs-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-xs > .offset-8, [dir=rtl] .row-xs > .offset-xs-8 { + margin-right: 66.6667%; + } + .column-xs > .col-8, + .column-xs > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-xs > .col-9, + .row-xs > .col-xs-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-xs > .offset-9, [dir=ltr] .row-xs > .offset-xs-9 { + margin-left: 75%; + } + [dir=rtl] .row-xs > .offset-9, [dir=rtl] .row-xs > .offset-xs-9 { + margin-right: 75%; + } + .column-xs > .col-9, + .column-xs > .col-xs-9 { + height: 75%; + width: auto; + } + .row-xs > .col-10, + .row-xs > .col-xs-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-xs > .offset-10, [dir=ltr] .row-xs > .offset-xs-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-xs > .offset-10, [dir=rtl] .row-xs > .offset-xs-10 { + margin-right: 83.3333%; + } + .column-xs > .col-10, + .column-xs > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-xs > .col-11, + .row-xs > .col-xs-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-xs > .offset-11, [dir=ltr] .row-xs > .offset-xs-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-xs > .offset-11, [dir=rtl] .row-xs > .offset-xs-11 { + margin-right: 91.6667%; + } + .column-xs > .col-11, + .column-xs > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-xs > .col-12, + .row-xs > .col-xs-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-xs > .offset-12, [dir=ltr] .row-xs > .offset-xs-12 { + margin-left: 100%; + } + [dir=rtl] .row-xs > .offset-12, [dir=rtl] .row-xs > .offset-xs-12 { + margin-right: 100%; + } + .column-xs > .col-12, + .column-xs > .col-xs-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 600px) { + .flex-sm-block { + display: block; + } + .flex-sm-inline { + display: inline-block; + } + [dir] .q-pa-sm-none { + padding: 0 0; + } + [dir=ltr] .q-pl-sm-none, [dir=ltr] .q-px-sm-none { + padding-left: 0; + } + [dir=rtl] .q-pl-sm-none, [dir=rtl] .q-px-sm-none { + padding-right: 0; + } + [dir=ltr] .q-pr-sm-none, [dir=ltr] .q-px-sm-none { + padding-right: 0; + } + [dir=rtl] .q-pr-sm-none, [dir=rtl] .q-px-sm-none { + padding-left: 0; + } + [dir] .q-pt-sm-none, [dir] .q-py-sm-none { + padding-top: 0; + } + [dir] .q-pb-sm-none, [dir] .q-py-sm-none { + padding-bottom: 0; + } + [dir] .q-ma-sm-none { + margin: 0 0; + } + [dir=ltr] .q-ml-sm-none, [dir=ltr] .q-mx-sm-none { + margin-left: 0; + } + [dir=rtl] .q-ml-sm-none, [dir=rtl] .q-mx-sm-none { + margin-right: 0; + } + [dir=ltr] .q-mr-sm-none, [dir=ltr] .q-mx-sm-none { + margin-right: 0; + } + [dir=rtl] .q-mr-sm-none, [dir=rtl] .q-mx-sm-none { + margin-left: 0; + } + [dir] .q-mt-sm-none, [dir] .q-my-sm-none { + margin-top: 0; + } + [dir] .q-mb-sm-none, [dir] .q-my-sm-none { + margin-bottom: 0; + } + [dir] .q-pa-sm-xs { + padding: 4px 4px; + } + [dir=ltr] .q-pl-sm-xs, [dir=ltr] .q-px-sm-xs { + padding-left: 4px; + } + [dir=rtl] .q-pl-sm-xs, [dir=rtl] .q-px-sm-xs { + padding-right: 4px; + } + [dir=ltr] .q-pr-sm-xs, [dir=ltr] .q-px-sm-xs { + padding-right: 4px; + } + [dir=rtl] .q-pr-sm-xs, [dir=rtl] .q-px-sm-xs { + padding-left: 4px; + } + [dir] .q-pt-sm-xs, [dir] .q-py-sm-xs { + padding-top: 4px; + } + [dir] .q-pb-sm-xs, [dir] .q-py-sm-xs { + padding-bottom: 4px; + } + [dir] .q-ma-sm-xs { + margin: 4px 4px; + } + [dir=ltr] .q-ml-sm-xs, [dir=ltr] .q-mx-sm-xs { + margin-left: 4px; + } + [dir=rtl] .q-ml-sm-xs, [dir=rtl] .q-mx-sm-xs { + margin-right: 4px; + } + [dir=ltr] .q-mr-sm-xs, [dir=ltr] .q-mx-sm-xs { + margin-right: 4px; + } + [dir=rtl] .q-mr-sm-xs, [dir=rtl] .q-mx-sm-xs { + margin-left: 4px; + } + [dir] .q-mt-sm-xs, [dir] .q-my-sm-xs { + margin-top: 4px; + } + [dir] .q-mb-sm-xs, [dir] .q-my-sm-xs { + margin-bottom: 4px; + } + [dir] .q-pa-sm-sm { + padding: 8px 8px; + } + [dir=ltr] .q-pl-sm-sm, [dir=ltr] .q-px-sm-sm { + padding-left: 8px; + } + [dir=rtl] .q-pl-sm-sm, [dir=rtl] .q-px-sm-sm { + padding-right: 8px; + } + [dir=ltr] .q-pr-sm-sm, [dir=ltr] .q-px-sm-sm { + padding-right: 8px; + } + [dir=rtl] .q-pr-sm-sm, [dir=rtl] .q-px-sm-sm { + padding-left: 8px; + } + [dir] .q-pt-sm-sm, [dir] .q-py-sm-sm { + padding-top: 8px; + } + [dir] .q-pb-sm-sm, [dir] .q-py-sm-sm { + padding-bottom: 8px; + } + [dir] .q-ma-sm-sm { + margin: 8px 8px; + } + [dir=ltr] .q-ml-sm-sm, [dir=ltr] .q-mx-sm-sm { + margin-left: 8px; + } + [dir=rtl] .q-ml-sm-sm, [dir=rtl] .q-mx-sm-sm { + margin-right: 8px; + } + [dir=ltr] .q-mr-sm-sm, [dir=ltr] .q-mx-sm-sm { + margin-right: 8px; + } + [dir=rtl] .q-mr-sm-sm, [dir=rtl] .q-mx-sm-sm { + margin-left: 8px; + } + [dir] .q-mt-sm-sm, [dir] .q-my-sm-sm { + margin-top: 8px; + } + [dir] .q-mb-sm-sm, [dir] .q-my-sm-sm { + margin-bottom: 8px; + } + [dir] .q-pa-sm-md { + padding: 16px 16px; + } + [dir=ltr] .q-pl-sm-md, [dir=ltr] .q-px-sm-md { + padding-left: 16px; + } + [dir=rtl] .q-pl-sm-md, [dir=rtl] .q-px-sm-md { + padding-right: 16px; + } + [dir=ltr] .q-pr-sm-md, [dir=ltr] .q-px-sm-md { + padding-right: 16px; + } + [dir=rtl] .q-pr-sm-md, [dir=rtl] .q-px-sm-md { + padding-left: 16px; + } + [dir] .q-pt-sm-md, [dir] .q-py-sm-md { + padding-top: 16px; + } + [dir] .q-pb-sm-md, [dir] .q-py-sm-md { + padding-bottom: 16px; + } + [dir] .q-ma-sm-md { + margin: 16px 16px; + } + [dir=ltr] .q-ml-sm-md, [dir=ltr] .q-mx-sm-md { + margin-left: 16px; + } + [dir=rtl] .q-ml-sm-md, [dir=rtl] .q-mx-sm-md { + margin-right: 16px; + } + [dir=ltr] .q-mr-sm-md, [dir=ltr] .q-mx-sm-md { + margin-right: 16px; + } + [dir=rtl] .q-mr-sm-md, [dir=rtl] .q-mx-sm-md { + margin-left: 16px; + } + [dir] .q-mt-sm-md, [dir] .q-my-sm-md { + margin-top: 16px; + } + [dir] .q-mb-sm-md, [dir] .q-my-sm-md { + margin-bottom: 16px; + } + [dir] .q-pa-sm-lg { + padding: 24px 24px; + } + [dir=ltr] .q-pl-sm-lg, [dir=ltr] .q-px-sm-lg { + padding-left: 24px; + } + [dir=rtl] .q-pl-sm-lg, [dir=rtl] .q-px-sm-lg { + padding-right: 24px; + } + [dir=ltr] .q-pr-sm-lg, [dir=ltr] .q-px-sm-lg { + padding-right: 24px; + } + [dir=rtl] .q-pr-sm-lg, [dir=rtl] .q-px-sm-lg { + padding-left: 24px; + } + [dir] .q-pt-sm-lg, [dir] .q-py-sm-lg { + padding-top: 24px; + } + [dir] .q-pb-sm-lg, [dir] .q-py-sm-lg { + padding-bottom: 24px; + } + [dir] .q-ma-sm-lg { + margin: 24px 24px; + } + [dir=ltr] .q-ml-sm-lg, [dir=ltr] .q-mx-sm-lg { + margin-left: 24px; + } + [dir=rtl] .q-ml-sm-lg, [dir=rtl] .q-mx-sm-lg { + margin-right: 24px; + } + [dir=ltr] .q-mr-sm-lg, [dir=ltr] .q-mx-sm-lg { + margin-right: 24px; + } + [dir=rtl] .q-mr-sm-lg, [dir=rtl] .q-mx-sm-lg { + margin-left: 24px; + } + [dir] .q-mt-sm-lg, [dir] .q-my-sm-lg { + margin-top: 24px; + } + [dir] .q-mb-sm-lg, [dir] .q-my-sm-lg { + margin-bottom: 24px; + } + [dir] .q-pa-sm-xl { + padding: 48px 48px; + } + [dir=ltr] .q-pl-sm-xl, [dir=ltr] .q-px-sm-xl { + padding-left: 48px; + } + [dir=rtl] .q-pl-sm-xl, [dir=rtl] .q-px-sm-xl { + padding-right: 48px; + } + [dir=ltr] .q-pr-sm-xl, [dir=ltr] .q-px-sm-xl { + padding-right: 48px; + } + [dir=rtl] .q-pr-sm-xl, [dir=rtl] .q-px-sm-xl { + padding-left: 48px; + } + [dir] .q-pt-sm-xl, [dir] .q-py-sm-xl { + padding-top: 48px; + } + [dir] .q-pb-sm-xl, [dir] .q-py-sm-xl { + padding-bottom: 48px; + } + [dir] .q-ma-sm-xl { + margin: 48px 48px; + } + [dir=ltr] .q-ml-sm-xl, [dir=ltr] .q-mx-sm-xl { + margin-left: 48px; + } + [dir=rtl] .q-ml-sm-xl, [dir=rtl] .q-mx-sm-xl { + margin-right: 48px; + } + [dir=ltr] .q-mr-sm-xl, [dir=ltr] .q-mx-sm-xl { + margin-right: 48px; + } + [dir=rtl] .q-mr-sm-xl, [dir=rtl] .q-mx-sm-xl { + margin-left: 48px; + } + [dir] .q-mt-sm-xl, [dir] .q-my-sm-xl { + margin-top: 48px; + } + [dir] .q-mb-sm-xl, [dir] .q-my-sm-xl { + margin-bottom: 48px; + } + [dir=ltr] .q-ml-sm-auto, [dir=ltr] .q-mx-sm-auto { + margin-left: auto; + } + [dir=rtl] .q-ml-sm-auto, [dir=rtl] .q-mx-sm-auto { + margin-right: auto; + } + [dir=ltr] .q-mr-sm-auto, [dir=ltr] .q-mx-sm-auto { + margin-right: auto; + } + [dir=rtl] .q-mr-sm-auto, [dir=rtl] .q-mx-sm-auto { + margin-left: auto; + } + .row.inline-sm, + .column.inline-sm, + .flex.inline-sm { + display: inline-flex; + } + .row-sm, + .column-sm, + .flex-sm { + display: flex; + flex-wrap: wrap; + } + .row-sm.inline, + .column-sm.inline, + .flex-sm.inline, + .row-sm.inline-sm, + .column-sm.inline-sm, + .flex-sm.inline-sm { + display: inline-flex; + } + .row.reverse-sm { + flex-direction: row-reverse; + } + .row-sm { + flex-direction: row; + } + .row-sm.reverse, + .row-sm.reverse-sm { + flex-direction: row-reverse; + } + .column.reverse-sm { + flex-direction: column-reverse; + } + .column-sm { + flex-direction: column; + } + .column-sm.reverse, + .column-sm.reverse-sm { + flex-direction: column-reverse; + } + .wrap-sm { + flex-wrap: wrap; + } + .no-wrap-sm { + flex-wrap: nowrap; + } + .reverse-wrap-sm { + flex-wrap: wrap-reverse; + } + .order-sm-first { + order: -10000; + } + .order-sm-last { + order: 10000; + } + .order-sm-none { + order: 0; + } + .justify-sm-start { + justify-content: flex-start; + } + .justify-sm-end { + justify-content: flex-end; + } + .justify-sm-center, + .flex-sm-center { + justify-content: center; + } + .justify-sm-between { + justify-content: space-between; + } + .justify-sm-around { + justify-content: space-around; + } + .justify-sm-evenly { + justify-content: space-evenly; + } + .items-sm-start { + align-items: flex-start; + } + .items-sm-end { + align-items: flex-end; + } + .items-sm-center, + .flex-sm-center { + align-items: center; + } + .items-sm-baseline { + align-items: baseline; + } + .items-sm-stretch { + align-items: stretch; + } + .content-sm-start { + align-content: flex-start; + } + .content-sm-end { + align-content: flex-end; + } + .content-sm-center { + align-content: center; + } + .content-sm-between { + align-content: space-between; + } + .content-sm-around { + align-content: space-around; + } + .self-sm-start { + align-self: flex-start; + } + .self-sm-end { + align-self: flex-end; + } + .self-sm-center { + align-self: center; + } + .self-sm-baseline { + align-self: baseline; + } + .self-sm-stretch { + align-self: stretch; + } + [dir=ltr] .q-gutter-sm-x-none, [dir=ltr] .q-gutter-sm-none { + margin-left: 0; + } + [dir=rtl] .q-gutter-sm-x-none, [dir=rtl] .q-gutter-sm-none { + margin-right: 0; + } + [dir=ltr] .q-gutter-sm-x-none > *, [dir=ltr] .q-gutter-sm-none > * { + margin-left: 0; + } + [dir=rtl] .q-gutter-sm-x-none > *, [dir=rtl] .q-gutter-sm-none > * { + margin-right: 0; + } + [dir] .q-gutter-sm-y-none, [dir] .q-gutter-sm-none { + margin-top: 0; + } + [dir] .q-gutter-sm-y-none > *, [dir] .q-gutter-sm-none > * { + margin-top: 0; + } + [dir=ltr] .q-col-gutter-sm-x-none, [dir=ltr] .q-col-gutter-sm-none { + margin-left: 0; + } + [dir=rtl] .q-col-gutter-sm-x-none, [dir=rtl] .q-col-gutter-sm-none { + margin-right: 0; + } + [dir=ltr] .q-col-gutter-sm-x-none > *, [dir=ltr] .q-col-gutter-sm-none > * { + padding-left: 0; + } + [dir=rtl] .q-col-gutter-sm-x-none > *, [dir=rtl] .q-col-gutter-sm-none > * { + padding-right: 0; + } + [dir] .q-col-gutter-sm-y-none, [dir] .q-col-gutter-sm-none { + margin-top: 0; + } + [dir] .q-col-gutter-sm-y-none > *, [dir] .q-col-gutter-sm-none > * { + padding-top: 0; + } + [dir=ltr] .q-gutter-sm-x-xs, [dir=ltr] .q-gutter-sm-xs { + margin-left: -4px; + } + [dir=rtl] .q-gutter-sm-x-xs, [dir=rtl] .q-gutter-sm-xs { + margin-right: -4px; + } + [dir=ltr] .q-gutter-sm-x-xs > *, [dir=ltr] .q-gutter-sm-xs > * { + margin-left: 4px; + } + [dir=rtl] .q-gutter-sm-x-xs > *, [dir=rtl] .q-gutter-sm-xs > * { + margin-right: 4px; + } + [dir] .q-gutter-sm-y-xs, [dir] .q-gutter-sm-xs { + margin-top: -4px; + } + [dir] .q-gutter-sm-y-xs > *, [dir] .q-gutter-sm-xs > * { + margin-top: 4px; + } + [dir=ltr] .q-col-gutter-sm-x-xs, [dir=ltr] .q-col-gutter-sm-xs { + margin-left: -4px; + } + [dir=rtl] .q-col-gutter-sm-x-xs, [dir=rtl] .q-col-gutter-sm-xs { + margin-right: -4px; + } + [dir=ltr] .q-col-gutter-sm-x-xs > *, [dir=ltr] .q-col-gutter-sm-xs > * { + padding-left: 4px; + } + [dir=rtl] .q-col-gutter-sm-x-xs > *, [dir=rtl] .q-col-gutter-sm-xs > * { + padding-right: 4px; + } + [dir] .q-col-gutter-sm-y-xs, [dir] .q-col-gutter-sm-xs { + margin-top: -4px; + } + [dir] .q-col-gutter-sm-y-xs > *, [dir] .q-col-gutter-sm-xs > * { + padding-top: 4px; + } + [dir=ltr] .q-gutter-sm-x-sm, [dir=ltr] .q-gutter-sm-sm { + margin-left: -8px; + } + [dir=rtl] .q-gutter-sm-x-sm, [dir=rtl] .q-gutter-sm-sm { + margin-right: -8px; + } + [dir=ltr] .q-gutter-sm-x-sm > *, [dir=ltr] .q-gutter-sm-sm > * { + margin-left: 8px; + } + [dir=rtl] .q-gutter-sm-x-sm > *, [dir=rtl] .q-gutter-sm-sm > * { + margin-right: 8px; + } + [dir] .q-gutter-sm-y-sm, [dir] .q-gutter-sm-sm { + margin-top: -8px; + } + [dir] .q-gutter-sm-y-sm > *, [dir] .q-gutter-sm-sm > * { + margin-top: 8px; + } + [dir=ltr] .q-col-gutter-sm-x-sm, [dir=ltr] .q-col-gutter-sm-sm { + margin-left: -8px; + } + [dir=rtl] .q-col-gutter-sm-x-sm, [dir=rtl] .q-col-gutter-sm-sm { + margin-right: -8px; + } + [dir=ltr] .q-col-gutter-sm-x-sm > *, [dir=ltr] .q-col-gutter-sm-sm > * { + padding-left: 8px; + } + [dir=rtl] .q-col-gutter-sm-x-sm > *, [dir=rtl] .q-col-gutter-sm-sm > * { + padding-right: 8px; + } + [dir] .q-col-gutter-sm-y-sm, [dir] .q-col-gutter-sm-sm { + margin-top: -8px; + } + [dir] .q-col-gutter-sm-y-sm > *, [dir] .q-col-gutter-sm-sm > * { + padding-top: 8px; + } + [dir=ltr] .q-gutter-sm-x-md, [dir=ltr] .q-gutter-sm-md { + margin-left: -16px; + } + [dir=rtl] .q-gutter-sm-x-md, [dir=rtl] .q-gutter-sm-md { + margin-right: -16px; + } + [dir=ltr] .q-gutter-sm-x-md > *, [dir=ltr] .q-gutter-sm-md > * { + margin-left: 16px; + } + [dir=rtl] .q-gutter-sm-x-md > *, [dir=rtl] .q-gutter-sm-md > * { + margin-right: 16px; + } + [dir] .q-gutter-sm-y-md, [dir] .q-gutter-sm-md { + margin-top: -16px; + } + [dir] .q-gutter-sm-y-md > *, [dir] .q-gutter-sm-md > * { + margin-top: 16px; + } + [dir=ltr] .q-col-gutter-sm-x-md, [dir=ltr] .q-col-gutter-sm-md { + margin-left: -16px; + } + [dir=rtl] .q-col-gutter-sm-x-md, [dir=rtl] .q-col-gutter-sm-md { + margin-right: -16px; + } + [dir=ltr] .q-col-gutter-sm-x-md > *, [dir=ltr] .q-col-gutter-sm-md > * { + padding-left: 16px; + } + [dir=rtl] .q-col-gutter-sm-x-md > *, [dir=rtl] .q-col-gutter-sm-md > * { + padding-right: 16px; + } + [dir] .q-col-gutter-sm-y-md, [dir] .q-col-gutter-sm-md { + margin-top: -16px; + } + [dir] .q-col-gutter-sm-y-md > *, [dir] .q-col-gutter-sm-md > * { + padding-top: 16px; + } + [dir=ltr] .q-gutter-sm-x-lg, [dir=ltr] .q-gutter-sm-lg { + margin-left: -24px; + } + [dir=rtl] .q-gutter-sm-x-lg, [dir=rtl] .q-gutter-sm-lg { + margin-right: -24px; + } + [dir=ltr] .q-gutter-sm-x-lg > *, [dir=ltr] .q-gutter-sm-lg > * { + margin-left: 24px; + } + [dir=rtl] .q-gutter-sm-x-lg > *, [dir=rtl] .q-gutter-sm-lg > * { + margin-right: 24px; + } + [dir] .q-gutter-sm-y-lg, [dir] .q-gutter-sm-lg { + margin-top: -24px; + } + [dir] .q-gutter-sm-y-lg > *, [dir] .q-gutter-sm-lg > * { + margin-top: 24px; + } + [dir=ltr] .q-col-gutter-sm-x-lg, [dir=ltr] .q-col-gutter-sm-lg { + margin-left: -24px; + } + [dir=rtl] .q-col-gutter-sm-x-lg, [dir=rtl] .q-col-gutter-sm-lg { + margin-right: -24px; + } + [dir=ltr] .q-col-gutter-sm-x-lg > *, [dir=ltr] .q-col-gutter-sm-lg > * { + padding-left: 24px; + } + [dir=rtl] .q-col-gutter-sm-x-lg > *, [dir=rtl] .q-col-gutter-sm-lg > * { + padding-right: 24px; + } + [dir] .q-col-gutter-sm-y-lg, [dir] .q-col-gutter-sm-lg { + margin-top: -24px; + } + [dir] .q-col-gutter-sm-y-lg > *, [dir] .q-col-gutter-sm-lg > * { + padding-top: 24px; + } + [dir=ltr] .q-gutter-sm-x-xl, [dir=ltr] .q-gutter-sm-xl { + margin-left: -48px; + } + [dir=rtl] .q-gutter-sm-x-xl, [dir=rtl] .q-gutter-sm-xl { + margin-right: -48px; + } + [dir=ltr] .q-gutter-sm-x-xl > *, [dir=ltr] .q-gutter-sm-xl > * { + margin-left: 48px; + } + [dir=rtl] .q-gutter-sm-x-xl > *, [dir=rtl] .q-gutter-sm-xl > * { + margin-right: 48px; + } + [dir] .q-gutter-sm-y-xl, [dir] .q-gutter-sm-xl { + margin-top: -48px; + } + [dir] .q-gutter-sm-y-xl > *, [dir] .q-gutter-sm-xl > * { + margin-top: 48px; + } + [dir=ltr] .q-col-gutter-sm-x-xl, [dir=ltr] .q-col-gutter-sm-xl { + margin-left: -48px; + } + [dir=rtl] .q-col-gutter-sm-x-xl, [dir=rtl] .q-col-gutter-sm-xl { + margin-right: -48px; + } + [dir=ltr] .q-col-gutter-sm-x-xl > *, [dir=ltr] .q-col-gutter-sm-xl > * { + padding-left: 48px; + } + [dir=rtl] .q-col-gutter-sm-x-xl > *, [dir=rtl] .q-col-gutter-sm-xl > * { + padding-right: 48px; + } + [dir] .q-col-gutter-sm-y-xl, [dir] .q-col-gutter-sm-xl { + margin-top: -48px; + } + [dir] .q-col-gutter-sm-y-xl > *, [dir] .q-col-gutter-sm-xl > * { + padding-top: 48px; + } + .row-sm > .col-0, + .row-sm > .col-xs-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-sm > .offset-0, [dir=ltr] .row-sm > .offset-xs-0 { + margin-left: 0%; + } + [dir=rtl] .row-sm > .offset-0, [dir=rtl] .row-sm > .offset-xs-0 { + margin-right: 0%; + } + .column-sm > .col-0, + .column-sm > .col-xs-0 { + height: 0%; + width: auto; + } + .row-sm > .col-1, + .row-sm > .col-xs-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-sm > .offset-1, [dir=ltr] .row-sm > .offset-xs-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-sm > .offset-1, [dir=rtl] .row-sm > .offset-xs-1 { + margin-right: 8.3333%; + } + .column-sm > .col-1, + .column-sm > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-sm > .col-2, + .row-sm > .col-xs-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-sm > .offset-2, [dir=ltr] .row-sm > .offset-xs-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-sm > .offset-2, [dir=rtl] .row-sm > .offset-xs-2 { + margin-right: 16.6667%; + } + .column-sm > .col-2, + .column-sm > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-sm > .col-3, + .row-sm > .col-xs-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-sm > .offset-3, [dir=ltr] .row-sm > .offset-xs-3 { + margin-left: 25%; + } + [dir=rtl] .row-sm > .offset-3, [dir=rtl] .row-sm > .offset-xs-3 { + margin-right: 25%; + } + .column-sm > .col-3, + .column-sm > .col-xs-3 { + height: 25%; + width: auto; + } + .row-sm > .col-4, + .row-sm > .col-xs-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-sm > .offset-4, [dir=ltr] .row-sm > .offset-xs-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-sm > .offset-4, [dir=rtl] .row-sm > .offset-xs-4 { + margin-right: 33.3333%; + } + .column-sm > .col-4, + .column-sm > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-sm > .col-5, + .row-sm > .col-xs-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-sm > .offset-5, [dir=ltr] .row-sm > .offset-xs-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-sm > .offset-5, [dir=rtl] .row-sm > .offset-xs-5 { + margin-right: 41.6667%; + } + .column-sm > .col-5, + .column-sm > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-sm > .col-6, + .row-sm > .col-xs-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-sm > .offset-6, [dir=ltr] .row-sm > .offset-xs-6 { + margin-left: 50%; + } + [dir=rtl] .row-sm > .offset-6, [dir=rtl] .row-sm > .offset-xs-6 { + margin-right: 50%; + } + .column-sm > .col-6, + .column-sm > .col-xs-6 { + height: 50%; + width: auto; + } + .row-sm > .col-7, + .row-sm > .col-xs-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-sm > .offset-7, [dir=ltr] .row-sm > .offset-xs-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-sm > .offset-7, [dir=rtl] .row-sm > .offset-xs-7 { + margin-right: 58.3333%; + } + .column-sm > .col-7, + .column-sm > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-sm > .col-8, + .row-sm > .col-xs-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-sm > .offset-8, [dir=ltr] .row-sm > .offset-xs-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-sm > .offset-8, [dir=rtl] .row-sm > .offset-xs-8 { + margin-right: 66.6667%; + } + .column-sm > .col-8, + .column-sm > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-sm > .col-9, + .row-sm > .col-xs-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-sm > .offset-9, [dir=ltr] .row-sm > .offset-xs-9 { + margin-left: 75%; + } + [dir=rtl] .row-sm > .offset-9, [dir=rtl] .row-sm > .offset-xs-9 { + margin-right: 75%; + } + .column-sm > .col-9, + .column-sm > .col-xs-9 { + height: 75%; + width: auto; + } + .row-sm > .col-10, + .row-sm > .col-xs-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-sm > .offset-10, [dir=ltr] .row-sm > .offset-xs-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-sm > .offset-10, [dir=rtl] .row-sm > .offset-xs-10 { + margin-right: 83.3333%; + } + .column-sm > .col-10, + .column-sm > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-sm > .col-11, + .row-sm > .col-xs-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-sm > .offset-11, [dir=ltr] .row-sm > .offset-xs-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-sm > .offset-11, [dir=rtl] .row-sm > .offset-xs-11 { + margin-right: 91.6667%; + } + .column-sm > .col-11, + .column-sm > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-sm > .col-12, + .row-sm > .col-xs-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-sm > .offset-12, [dir=ltr] .row-sm > .offset-xs-12 { + margin-left: 100%; + } + [dir=rtl] .row-sm > .offset-12, [dir=rtl] .row-sm > .offset-xs-12 { + margin-right: 100%; + } + .column-sm > .col-12, + .column-sm > .col-xs-12 { + height: 100%; + width: auto; + } + .row-sm > .col-sm-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-sm > .offset-sm-0 { + margin-left: 0%; + } + [dir=rtl] .row-sm > .offset-sm-0 { + margin-right: 0%; + } + .column-sm > .col-sm-0 { + height: 0%; + width: auto; + } + .row-sm > .col-sm-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-sm > .offset-sm-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-sm > .offset-sm-1 { + margin-right: 8.3333%; + } + .column-sm > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row-sm > .col-sm-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-sm > .offset-sm-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-sm > .offset-sm-2 { + margin-right: 16.6667%; + } + .column-sm > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row-sm > .col-sm-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-sm > .offset-sm-3 { + margin-left: 25%; + } + [dir=rtl] .row-sm > .offset-sm-3 { + margin-right: 25%; + } + .column-sm > .col-sm-3 { + height: 25%; + width: auto; + } + .row-sm > .col-sm-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-sm > .offset-sm-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-sm > .offset-sm-4 { + margin-right: 33.3333%; + } + .column-sm > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row-sm > .col-sm-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-sm > .offset-sm-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-sm > .offset-sm-5 { + margin-right: 41.6667%; + } + .column-sm > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row-sm > .col-sm-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-sm > .offset-sm-6 { + margin-left: 50%; + } + [dir=rtl] .row-sm > .offset-sm-6 { + margin-right: 50%; + } + .column-sm > .col-sm-6 { + height: 50%; + width: auto; + } + .row-sm > .col-sm-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-sm > .offset-sm-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-sm > .offset-sm-7 { + margin-right: 58.3333%; + } + .column-sm > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row-sm > .col-sm-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-sm > .offset-sm-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-sm > .offset-sm-8 { + margin-right: 66.6667%; + } + .column-sm > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row-sm > .col-sm-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-sm > .offset-sm-9 { + margin-left: 75%; + } + [dir=rtl] .row-sm > .offset-sm-9 { + margin-right: 75%; + } + .column-sm > .col-sm-9 { + height: 75%; + width: auto; + } + .row-sm > .col-sm-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-sm > .offset-sm-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-sm > .offset-sm-10 { + margin-right: 83.3333%; + } + .column-sm > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row-sm > .col-sm-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-sm > .offset-sm-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-sm > .offset-sm-11 { + margin-right: 91.6667%; + } + .column-sm > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row-sm > .col-sm-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-sm > .offset-sm-12 { + margin-left: 100%; + } + [dir=rtl] .row-sm > .offset-sm-12 { + margin-right: 100%; + } + .column-sm > .col-sm-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1024px) { + .flex-md-block { + display: block; + } + .flex-md-inline { + display: inline-block; + } + [dir] .q-pa-md-none { + padding: 0 0; + } + [dir=ltr] .q-pl-md-none, [dir=ltr] .q-px-md-none { + padding-left: 0; + } + [dir=rtl] .q-pl-md-none, [dir=rtl] .q-px-md-none { + padding-right: 0; + } + [dir=ltr] .q-pr-md-none, [dir=ltr] .q-px-md-none { + padding-right: 0; + } + [dir=rtl] .q-pr-md-none, [dir=rtl] .q-px-md-none { + padding-left: 0; + } + [dir] .q-pt-md-none, [dir] .q-py-md-none { + padding-top: 0; + } + [dir] .q-pb-md-none, [dir] .q-py-md-none { + padding-bottom: 0; + } + [dir] .q-ma-md-none { + margin: 0 0; + } + [dir=ltr] .q-ml-md-none, [dir=ltr] .q-mx-md-none { + margin-left: 0; + } + [dir=rtl] .q-ml-md-none, [dir=rtl] .q-mx-md-none { + margin-right: 0; + } + [dir=ltr] .q-mr-md-none, [dir=ltr] .q-mx-md-none { + margin-right: 0; + } + [dir=rtl] .q-mr-md-none, [dir=rtl] .q-mx-md-none { + margin-left: 0; + } + [dir] .q-mt-md-none, [dir] .q-my-md-none { + margin-top: 0; + } + [dir] .q-mb-md-none, [dir] .q-my-md-none { + margin-bottom: 0; + } + [dir] .q-pa-md-xs { + padding: 4px 4px; + } + [dir=ltr] .q-pl-md-xs, [dir=ltr] .q-px-md-xs { + padding-left: 4px; + } + [dir=rtl] .q-pl-md-xs, [dir=rtl] .q-px-md-xs { + padding-right: 4px; + } + [dir=ltr] .q-pr-md-xs, [dir=ltr] .q-px-md-xs { + padding-right: 4px; + } + [dir=rtl] .q-pr-md-xs, [dir=rtl] .q-px-md-xs { + padding-left: 4px; + } + [dir] .q-pt-md-xs, [dir] .q-py-md-xs { + padding-top: 4px; + } + [dir] .q-pb-md-xs, [dir] .q-py-md-xs { + padding-bottom: 4px; + } + [dir] .q-ma-md-xs { + margin: 4px 4px; + } + [dir=ltr] .q-ml-md-xs, [dir=ltr] .q-mx-md-xs { + margin-left: 4px; + } + [dir=rtl] .q-ml-md-xs, [dir=rtl] .q-mx-md-xs { + margin-right: 4px; + } + [dir=ltr] .q-mr-md-xs, [dir=ltr] .q-mx-md-xs { + margin-right: 4px; + } + [dir=rtl] .q-mr-md-xs, [dir=rtl] .q-mx-md-xs { + margin-left: 4px; + } + [dir] .q-mt-md-xs, [dir] .q-my-md-xs { + margin-top: 4px; + } + [dir] .q-mb-md-xs, [dir] .q-my-md-xs { + margin-bottom: 4px; + } + [dir] .q-pa-md-sm { + padding: 8px 8px; + } + [dir=ltr] .q-pl-md-sm, [dir=ltr] .q-px-md-sm { + padding-left: 8px; + } + [dir=rtl] .q-pl-md-sm, [dir=rtl] .q-px-md-sm { + padding-right: 8px; + } + [dir=ltr] .q-pr-md-sm, [dir=ltr] .q-px-md-sm { + padding-right: 8px; + } + [dir=rtl] .q-pr-md-sm, [dir=rtl] .q-px-md-sm { + padding-left: 8px; + } + [dir] .q-pt-md-sm, [dir] .q-py-md-sm { + padding-top: 8px; + } + [dir] .q-pb-md-sm, [dir] .q-py-md-sm { + padding-bottom: 8px; + } + [dir] .q-ma-md-sm { + margin: 8px 8px; + } + [dir=ltr] .q-ml-md-sm, [dir=ltr] .q-mx-md-sm { + margin-left: 8px; + } + [dir=rtl] .q-ml-md-sm, [dir=rtl] .q-mx-md-sm { + margin-right: 8px; + } + [dir=ltr] .q-mr-md-sm, [dir=ltr] .q-mx-md-sm { + margin-right: 8px; + } + [dir=rtl] .q-mr-md-sm, [dir=rtl] .q-mx-md-sm { + margin-left: 8px; + } + [dir] .q-mt-md-sm, [dir] .q-my-md-sm { + margin-top: 8px; + } + [dir] .q-mb-md-sm, [dir] .q-my-md-sm { + margin-bottom: 8px; + } + [dir] .q-pa-md-md { + padding: 16px 16px; + } + [dir=ltr] .q-pl-md-md, [dir=ltr] .q-px-md-md { + padding-left: 16px; + } + [dir=rtl] .q-pl-md-md, [dir=rtl] .q-px-md-md { + padding-right: 16px; + } + [dir=ltr] .q-pr-md-md, [dir=ltr] .q-px-md-md { + padding-right: 16px; + } + [dir=rtl] .q-pr-md-md, [dir=rtl] .q-px-md-md { + padding-left: 16px; + } + [dir] .q-pt-md-md, [dir] .q-py-md-md { + padding-top: 16px; + } + [dir] .q-pb-md-md, [dir] .q-py-md-md { + padding-bottom: 16px; + } + [dir] .q-ma-md-md { + margin: 16px 16px; + } + [dir=ltr] .q-ml-md-md, [dir=ltr] .q-mx-md-md { + margin-left: 16px; + } + [dir=rtl] .q-ml-md-md, [dir=rtl] .q-mx-md-md { + margin-right: 16px; + } + [dir=ltr] .q-mr-md-md, [dir=ltr] .q-mx-md-md { + margin-right: 16px; + } + [dir=rtl] .q-mr-md-md, [dir=rtl] .q-mx-md-md { + margin-left: 16px; + } + [dir] .q-mt-md-md, [dir] .q-my-md-md { + margin-top: 16px; + } + [dir] .q-mb-md-md, [dir] .q-my-md-md { + margin-bottom: 16px; + } + [dir] .q-pa-md-lg { + padding: 24px 24px; + } + [dir=ltr] .q-pl-md-lg, [dir=ltr] .q-px-md-lg { + padding-left: 24px; + } + [dir=rtl] .q-pl-md-lg, [dir=rtl] .q-px-md-lg { + padding-right: 24px; + } + [dir=ltr] .q-pr-md-lg, [dir=ltr] .q-px-md-lg { + padding-right: 24px; + } + [dir=rtl] .q-pr-md-lg, [dir=rtl] .q-px-md-lg { + padding-left: 24px; + } + [dir] .q-pt-md-lg, [dir] .q-py-md-lg { + padding-top: 24px; + } + [dir] .q-pb-md-lg, [dir] .q-py-md-lg { + padding-bottom: 24px; + } + [dir] .q-ma-md-lg { + margin: 24px 24px; + } + [dir=ltr] .q-ml-md-lg, [dir=ltr] .q-mx-md-lg { + margin-left: 24px; + } + [dir=rtl] .q-ml-md-lg, [dir=rtl] .q-mx-md-lg { + margin-right: 24px; + } + [dir=ltr] .q-mr-md-lg, [dir=ltr] .q-mx-md-lg { + margin-right: 24px; + } + [dir=rtl] .q-mr-md-lg, [dir=rtl] .q-mx-md-lg { + margin-left: 24px; + } + [dir] .q-mt-md-lg, [dir] .q-my-md-lg { + margin-top: 24px; + } + [dir] .q-mb-md-lg, [dir] .q-my-md-lg { + margin-bottom: 24px; + } + [dir] .q-pa-md-xl { + padding: 48px 48px; + } + [dir=ltr] .q-pl-md-xl, [dir=ltr] .q-px-md-xl { + padding-left: 48px; + } + [dir=rtl] .q-pl-md-xl, [dir=rtl] .q-px-md-xl { + padding-right: 48px; + } + [dir=ltr] .q-pr-md-xl, [dir=ltr] .q-px-md-xl { + padding-right: 48px; + } + [dir=rtl] .q-pr-md-xl, [dir=rtl] .q-px-md-xl { + padding-left: 48px; + } + [dir] .q-pt-md-xl, [dir] .q-py-md-xl { + padding-top: 48px; + } + [dir] .q-pb-md-xl, [dir] .q-py-md-xl { + padding-bottom: 48px; + } + [dir] .q-ma-md-xl { + margin: 48px 48px; + } + [dir=ltr] .q-ml-md-xl, [dir=ltr] .q-mx-md-xl { + margin-left: 48px; + } + [dir=rtl] .q-ml-md-xl, [dir=rtl] .q-mx-md-xl { + margin-right: 48px; + } + [dir=ltr] .q-mr-md-xl, [dir=ltr] .q-mx-md-xl { + margin-right: 48px; + } + [dir=rtl] .q-mr-md-xl, [dir=rtl] .q-mx-md-xl { + margin-left: 48px; + } + [dir] .q-mt-md-xl, [dir] .q-my-md-xl { + margin-top: 48px; + } + [dir] .q-mb-md-xl, [dir] .q-my-md-xl { + margin-bottom: 48px; + } + [dir=ltr] .q-ml-md-auto, [dir=ltr] .q-mx-md-auto { + margin-left: auto; + } + [dir=rtl] .q-ml-md-auto, [dir=rtl] .q-mx-md-auto { + margin-right: auto; + } + [dir=ltr] .q-mr-md-auto, [dir=ltr] .q-mx-md-auto { + margin-right: auto; + } + [dir=rtl] .q-mr-md-auto, [dir=rtl] .q-mx-md-auto { + margin-left: auto; + } + .row.inline-md, + .column.inline-md, + .flex.inline-md { + display: inline-flex; + } + .row-md, + .column-md, + .flex-md { + display: flex; + flex-wrap: wrap; + } + .row-md.inline, + .column-md.inline, + .flex-md.inline, + .row-md.inline-md, + .column-md.inline-md, + .flex-md.inline-md { + display: inline-flex; + } + .row.reverse-md { + flex-direction: row-reverse; + } + .row-md { + flex-direction: row; + } + .row-md.reverse, + .row-md.reverse-md { + flex-direction: row-reverse; + } + .column.reverse-md { + flex-direction: column-reverse; + } + .column-md { + flex-direction: column; + } + .column-md.reverse, + .column-md.reverse-md { + flex-direction: column-reverse; + } + .wrap-md { + flex-wrap: wrap; + } + .no-wrap-md { + flex-wrap: nowrap; + } + .reverse-wrap-md { + flex-wrap: wrap-reverse; + } + .order-md-first { + order: -10000; + } + .order-md-last { + order: 10000; + } + .order-md-none { + order: 0; + } + .justify-md-start { + justify-content: flex-start; + } + .justify-md-end { + justify-content: flex-end; + } + .justify-md-center, + .flex-md-center { + justify-content: center; + } + .justify-md-between { + justify-content: space-between; + } + .justify-md-around { + justify-content: space-around; + } + .justify-md-evenly { + justify-content: space-evenly; + } + .items-md-start { + align-items: flex-start; + } + .items-md-end { + align-items: flex-end; + } + .items-md-center, + .flex-md-center { + align-items: center; + } + .items-md-baseline { + align-items: baseline; + } + .items-md-stretch { + align-items: stretch; + } + .content-md-start { + align-content: flex-start; + } + .content-md-end { + align-content: flex-end; + } + .content-md-center { + align-content: center; + } + .content-md-between { + align-content: space-between; + } + .content-md-around { + align-content: space-around; + } + .self-md-start { + align-self: flex-start; + } + .self-md-end { + align-self: flex-end; + } + .self-md-center { + align-self: center; + } + .self-md-baseline { + align-self: baseline; + } + .self-md-stretch { + align-self: stretch; + } + [dir=ltr] .q-gutter-md-x-none, [dir=ltr] .q-gutter-md-none { + margin-left: 0; + } + [dir=rtl] .q-gutter-md-x-none, [dir=rtl] .q-gutter-md-none { + margin-right: 0; + } + [dir=ltr] .q-gutter-md-x-none > *, [dir=ltr] .q-gutter-md-none > * { + margin-left: 0; + } + [dir=rtl] .q-gutter-md-x-none > *, [dir=rtl] .q-gutter-md-none > * { + margin-right: 0; + } + [dir] .q-gutter-md-y-none, [dir] .q-gutter-md-none { + margin-top: 0; + } + [dir] .q-gutter-md-y-none > *, [dir] .q-gutter-md-none > * { + margin-top: 0; + } + [dir=ltr] .q-col-gutter-md-x-none, [dir=ltr] .q-col-gutter-md-none { + margin-left: 0; + } + [dir=rtl] .q-col-gutter-md-x-none, [dir=rtl] .q-col-gutter-md-none { + margin-right: 0; + } + [dir=ltr] .q-col-gutter-md-x-none > *, [dir=ltr] .q-col-gutter-md-none > * { + padding-left: 0; + } + [dir=rtl] .q-col-gutter-md-x-none > *, [dir=rtl] .q-col-gutter-md-none > * { + padding-right: 0; + } + [dir] .q-col-gutter-md-y-none, [dir] .q-col-gutter-md-none { + margin-top: 0; + } + [dir] .q-col-gutter-md-y-none > *, [dir] .q-col-gutter-md-none > * { + padding-top: 0; + } + [dir=ltr] .q-gutter-md-x-xs, [dir=ltr] .q-gutter-md-xs { + margin-left: -4px; + } + [dir=rtl] .q-gutter-md-x-xs, [dir=rtl] .q-gutter-md-xs { + margin-right: -4px; + } + [dir=ltr] .q-gutter-md-x-xs > *, [dir=ltr] .q-gutter-md-xs > * { + margin-left: 4px; + } + [dir=rtl] .q-gutter-md-x-xs > *, [dir=rtl] .q-gutter-md-xs > * { + margin-right: 4px; + } + [dir] .q-gutter-md-y-xs, [dir] .q-gutter-md-xs { + margin-top: -4px; + } + [dir] .q-gutter-md-y-xs > *, [dir] .q-gutter-md-xs > * { + margin-top: 4px; + } + [dir=ltr] .q-col-gutter-md-x-xs, [dir=ltr] .q-col-gutter-md-xs { + margin-left: -4px; + } + [dir=rtl] .q-col-gutter-md-x-xs, [dir=rtl] .q-col-gutter-md-xs { + margin-right: -4px; + } + [dir=ltr] .q-col-gutter-md-x-xs > *, [dir=ltr] .q-col-gutter-md-xs > * { + padding-left: 4px; + } + [dir=rtl] .q-col-gutter-md-x-xs > *, [dir=rtl] .q-col-gutter-md-xs > * { + padding-right: 4px; + } + [dir] .q-col-gutter-md-y-xs, [dir] .q-col-gutter-md-xs { + margin-top: -4px; + } + [dir] .q-col-gutter-md-y-xs > *, [dir] .q-col-gutter-md-xs > * { + padding-top: 4px; + } + [dir=ltr] .q-gutter-md-x-sm, [dir=ltr] .q-gutter-md-sm { + margin-left: -8px; + } + [dir=rtl] .q-gutter-md-x-sm, [dir=rtl] .q-gutter-md-sm { + margin-right: -8px; + } + [dir=ltr] .q-gutter-md-x-sm > *, [dir=ltr] .q-gutter-md-sm > * { + margin-left: 8px; + } + [dir=rtl] .q-gutter-md-x-sm > *, [dir=rtl] .q-gutter-md-sm > * { + margin-right: 8px; + } + [dir] .q-gutter-md-y-sm, [dir] .q-gutter-md-sm { + margin-top: -8px; + } + [dir] .q-gutter-md-y-sm > *, [dir] .q-gutter-md-sm > * { + margin-top: 8px; + } + [dir=ltr] .q-col-gutter-md-x-sm, [dir=ltr] .q-col-gutter-md-sm { + margin-left: -8px; + } + [dir=rtl] .q-col-gutter-md-x-sm, [dir=rtl] .q-col-gutter-md-sm { + margin-right: -8px; + } + [dir=ltr] .q-col-gutter-md-x-sm > *, [dir=ltr] .q-col-gutter-md-sm > * { + padding-left: 8px; + } + [dir=rtl] .q-col-gutter-md-x-sm > *, [dir=rtl] .q-col-gutter-md-sm > * { + padding-right: 8px; + } + [dir] .q-col-gutter-md-y-sm, [dir] .q-col-gutter-md-sm { + margin-top: -8px; + } + [dir] .q-col-gutter-md-y-sm > *, [dir] .q-col-gutter-md-sm > * { + padding-top: 8px; + } + [dir=ltr] .q-gutter-md-x-md, [dir=ltr] .q-gutter-md-md { + margin-left: -16px; + } + [dir=rtl] .q-gutter-md-x-md, [dir=rtl] .q-gutter-md-md { + margin-right: -16px; + } + [dir=ltr] .q-gutter-md-x-md > *, [dir=ltr] .q-gutter-md-md > * { + margin-left: 16px; + } + [dir=rtl] .q-gutter-md-x-md > *, [dir=rtl] .q-gutter-md-md > * { + margin-right: 16px; + } + [dir] .q-gutter-md-y-md, [dir] .q-gutter-md-md { + margin-top: -16px; + } + [dir] .q-gutter-md-y-md > *, [dir] .q-gutter-md-md > * { + margin-top: 16px; + } + [dir=ltr] .q-col-gutter-md-x-md, [dir=ltr] .q-col-gutter-md-md { + margin-left: -16px; + } + [dir=rtl] .q-col-gutter-md-x-md, [dir=rtl] .q-col-gutter-md-md { + margin-right: -16px; + } + [dir=ltr] .q-col-gutter-md-x-md > *, [dir=ltr] .q-col-gutter-md-md > * { + padding-left: 16px; + } + [dir=rtl] .q-col-gutter-md-x-md > *, [dir=rtl] .q-col-gutter-md-md > * { + padding-right: 16px; + } + [dir] .q-col-gutter-md-y-md, [dir] .q-col-gutter-md-md { + margin-top: -16px; + } + [dir] .q-col-gutter-md-y-md > *, [dir] .q-col-gutter-md-md > * { + padding-top: 16px; + } + [dir=ltr] .q-gutter-md-x-lg, [dir=ltr] .q-gutter-md-lg { + margin-left: -24px; + } + [dir=rtl] .q-gutter-md-x-lg, [dir=rtl] .q-gutter-md-lg { + margin-right: -24px; + } + [dir=ltr] .q-gutter-md-x-lg > *, [dir=ltr] .q-gutter-md-lg > * { + margin-left: 24px; + } + [dir=rtl] .q-gutter-md-x-lg > *, [dir=rtl] .q-gutter-md-lg > * { + margin-right: 24px; + } + [dir] .q-gutter-md-y-lg, [dir] .q-gutter-md-lg { + margin-top: -24px; + } + [dir] .q-gutter-md-y-lg > *, [dir] .q-gutter-md-lg > * { + margin-top: 24px; + } + [dir=ltr] .q-col-gutter-md-x-lg, [dir=ltr] .q-col-gutter-md-lg { + margin-left: -24px; + } + [dir=rtl] .q-col-gutter-md-x-lg, [dir=rtl] .q-col-gutter-md-lg { + margin-right: -24px; + } + [dir=ltr] .q-col-gutter-md-x-lg > *, [dir=ltr] .q-col-gutter-md-lg > * { + padding-left: 24px; + } + [dir=rtl] .q-col-gutter-md-x-lg > *, [dir=rtl] .q-col-gutter-md-lg > * { + padding-right: 24px; + } + [dir] .q-col-gutter-md-y-lg, [dir] .q-col-gutter-md-lg { + margin-top: -24px; + } + [dir] .q-col-gutter-md-y-lg > *, [dir] .q-col-gutter-md-lg > * { + padding-top: 24px; + } + [dir=ltr] .q-gutter-md-x-xl, [dir=ltr] .q-gutter-md-xl { + margin-left: -48px; + } + [dir=rtl] .q-gutter-md-x-xl, [dir=rtl] .q-gutter-md-xl { + margin-right: -48px; + } + [dir=ltr] .q-gutter-md-x-xl > *, [dir=ltr] .q-gutter-md-xl > * { + margin-left: 48px; + } + [dir=rtl] .q-gutter-md-x-xl > *, [dir=rtl] .q-gutter-md-xl > * { + margin-right: 48px; + } + [dir] .q-gutter-md-y-xl, [dir] .q-gutter-md-xl { + margin-top: -48px; + } + [dir] .q-gutter-md-y-xl > *, [dir] .q-gutter-md-xl > * { + margin-top: 48px; + } + [dir=ltr] .q-col-gutter-md-x-xl, [dir=ltr] .q-col-gutter-md-xl { + margin-left: -48px; + } + [dir=rtl] .q-col-gutter-md-x-xl, [dir=rtl] .q-col-gutter-md-xl { + margin-right: -48px; + } + [dir=ltr] .q-col-gutter-md-x-xl > *, [dir=ltr] .q-col-gutter-md-xl > * { + padding-left: 48px; + } + [dir=rtl] .q-col-gutter-md-x-xl > *, [dir=rtl] .q-col-gutter-md-xl > * { + padding-right: 48px; + } + [dir] .q-col-gutter-md-y-xl, [dir] .q-col-gutter-md-xl { + margin-top: -48px; + } + [dir] .q-col-gutter-md-y-xl > *, [dir] .q-col-gutter-md-xl > * { + padding-top: 48px; + } + .row-md > .col-0, + .row-md > .col-xs-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-md > .offset-0, [dir=ltr] .row-md > .offset-xs-0 { + margin-left: 0%; + } + [dir=rtl] .row-md > .offset-0, [dir=rtl] .row-md > .offset-xs-0 { + margin-right: 0%; + } + .column-md > .col-0, + .column-md > .col-xs-0 { + height: 0%; + width: auto; + } + .row-md > .col-1, + .row-md > .col-xs-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-md > .offset-1, [dir=ltr] .row-md > .offset-xs-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-md > .offset-1, [dir=rtl] .row-md > .offset-xs-1 { + margin-right: 8.3333%; + } + .column-md > .col-1, + .column-md > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-md > .col-2, + .row-md > .col-xs-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-md > .offset-2, [dir=ltr] .row-md > .offset-xs-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-md > .offset-2, [dir=rtl] .row-md > .offset-xs-2 { + margin-right: 16.6667%; + } + .column-md > .col-2, + .column-md > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-md > .col-3, + .row-md > .col-xs-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-md > .offset-3, [dir=ltr] .row-md > .offset-xs-3 { + margin-left: 25%; + } + [dir=rtl] .row-md > .offset-3, [dir=rtl] .row-md > .offset-xs-3 { + margin-right: 25%; + } + .column-md > .col-3, + .column-md > .col-xs-3 { + height: 25%; + width: auto; + } + .row-md > .col-4, + .row-md > .col-xs-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-md > .offset-4, [dir=ltr] .row-md > .offset-xs-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-md > .offset-4, [dir=rtl] .row-md > .offset-xs-4 { + margin-right: 33.3333%; + } + .column-md > .col-4, + .column-md > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-md > .col-5, + .row-md > .col-xs-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-md > .offset-5, [dir=ltr] .row-md > .offset-xs-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-md > .offset-5, [dir=rtl] .row-md > .offset-xs-5 { + margin-right: 41.6667%; + } + .column-md > .col-5, + .column-md > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-md > .col-6, + .row-md > .col-xs-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-md > .offset-6, [dir=ltr] .row-md > .offset-xs-6 { + margin-left: 50%; + } + [dir=rtl] .row-md > .offset-6, [dir=rtl] .row-md > .offset-xs-6 { + margin-right: 50%; + } + .column-md > .col-6, + .column-md > .col-xs-6 { + height: 50%; + width: auto; + } + .row-md > .col-7, + .row-md > .col-xs-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-md > .offset-7, [dir=ltr] .row-md > .offset-xs-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-md > .offset-7, [dir=rtl] .row-md > .offset-xs-7 { + margin-right: 58.3333%; + } + .column-md > .col-7, + .column-md > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-md > .col-8, + .row-md > .col-xs-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-md > .offset-8, [dir=ltr] .row-md > .offset-xs-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-md > .offset-8, [dir=rtl] .row-md > .offset-xs-8 { + margin-right: 66.6667%; + } + .column-md > .col-8, + .column-md > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-md > .col-9, + .row-md > .col-xs-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-md > .offset-9, [dir=ltr] .row-md > .offset-xs-9 { + margin-left: 75%; + } + [dir=rtl] .row-md > .offset-9, [dir=rtl] .row-md > .offset-xs-9 { + margin-right: 75%; + } + .column-md > .col-9, + .column-md > .col-xs-9 { + height: 75%; + width: auto; + } + .row-md > .col-10, + .row-md > .col-xs-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-md > .offset-10, [dir=ltr] .row-md > .offset-xs-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-md > .offset-10, [dir=rtl] .row-md > .offset-xs-10 { + margin-right: 83.3333%; + } + .column-md > .col-10, + .column-md > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-md > .col-11, + .row-md > .col-xs-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-md > .offset-11, [dir=ltr] .row-md > .offset-xs-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-md > .offset-11, [dir=rtl] .row-md > .offset-xs-11 { + margin-right: 91.6667%; + } + .column-md > .col-11, + .column-md > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-md > .col-12, + .row-md > .col-xs-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-md > .offset-12, [dir=ltr] .row-md > .offset-xs-12 { + margin-left: 100%; + } + [dir=rtl] .row-md > .offset-12, [dir=rtl] .row-md > .offset-xs-12 { + margin-right: 100%; + } + .column-md > .col-12, + .column-md > .col-xs-12 { + height: 100%; + width: auto; + } + .row-md > .col-sm-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-md > .offset-sm-0 { + margin-left: 0%; + } + [dir=rtl] .row-md > .offset-sm-0 { + margin-right: 0%; + } + .column-md > .col-sm-0 { + height: 0%; + width: auto; + } + .row-md > .col-sm-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-md > .offset-sm-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-md > .offset-sm-1 { + margin-right: 8.3333%; + } + .column-md > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row-md > .col-sm-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-md > .offset-sm-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-md > .offset-sm-2 { + margin-right: 16.6667%; + } + .column-md > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row-md > .col-sm-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-md > .offset-sm-3 { + margin-left: 25%; + } + [dir=rtl] .row-md > .offset-sm-3 { + margin-right: 25%; + } + .column-md > .col-sm-3 { + height: 25%; + width: auto; + } + .row-md > .col-sm-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-md > .offset-sm-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-md > .offset-sm-4 { + margin-right: 33.3333%; + } + .column-md > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row-md > .col-sm-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-md > .offset-sm-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-md > .offset-sm-5 { + margin-right: 41.6667%; + } + .column-md > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row-md > .col-sm-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-md > .offset-sm-6 { + margin-left: 50%; + } + [dir=rtl] .row-md > .offset-sm-6 { + margin-right: 50%; + } + .column-md > .col-sm-6 { + height: 50%; + width: auto; + } + .row-md > .col-sm-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-md > .offset-sm-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-md > .offset-sm-7 { + margin-right: 58.3333%; + } + .column-md > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row-md > .col-sm-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-md > .offset-sm-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-md > .offset-sm-8 { + margin-right: 66.6667%; + } + .column-md > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row-md > .col-sm-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-md > .offset-sm-9 { + margin-left: 75%; + } + [dir=rtl] .row-md > .offset-sm-9 { + margin-right: 75%; + } + .column-md > .col-sm-9 { + height: 75%; + width: auto; + } + .row-md > .col-sm-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-md > .offset-sm-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-md > .offset-sm-10 { + margin-right: 83.3333%; + } + .column-md > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row-md > .col-sm-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-md > .offset-sm-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-md > .offset-sm-11 { + margin-right: 91.6667%; + } + .column-md > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row-md > .col-sm-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-md > .offset-sm-12 { + margin-left: 100%; + } + [dir=rtl] .row-md > .offset-sm-12 { + margin-right: 100%; + } + .column-md > .col-sm-12 { + height: 100%; + width: auto; + } + .row-md > .col-md-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-md > .offset-md-0 { + margin-left: 0%; + } + [dir=rtl] .row-md > .offset-md-0 { + margin-right: 0%; + } + .column-md > .col-md-0 { + height: 0%; + width: auto; + } + .row-md > .col-md-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-md > .offset-md-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-md > .offset-md-1 { + margin-right: 8.3333%; + } + .column-md > .col-md-1 { + height: 8.3333%; + width: auto; + } + .row-md > .col-md-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-md > .offset-md-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-md > .offset-md-2 { + margin-right: 16.6667%; + } + .column-md > .col-md-2 { + height: 16.6667%; + width: auto; + } + .row-md > .col-md-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-md > .offset-md-3 { + margin-left: 25%; + } + [dir=rtl] .row-md > .offset-md-3 { + margin-right: 25%; + } + .column-md > .col-md-3 { + height: 25%; + width: auto; + } + .row-md > .col-md-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-md > .offset-md-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-md > .offset-md-4 { + margin-right: 33.3333%; + } + .column-md > .col-md-4 { + height: 33.3333%; + width: auto; + } + .row-md > .col-md-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-md > .offset-md-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-md > .offset-md-5 { + margin-right: 41.6667%; + } + .column-md > .col-md-5 { + height: 41.6667%; + width: auto; + } + .row-md > .col-md-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-md > .offset-md-6 { + margin-left: 50%; + } + [dir=rtl] .row-md > .offset-md-6 { + margin-right: 50%; + } + .column-md > .col-md-6 { + height: 50%; + width: auto; + } + .row-md > .col-md-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-md > .offset-md-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-md > .offset-md-7 { + margin-right: 58.3333%; + } + .column-md > .col-md-7 { + height: 58.3333%; + width: auto; + } + .row-md > .col-md-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-md > .offset-md-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-md > .offset-md-8 { + margin-right: 66.6667%; + } + .column-md > .col-md-8 { + height: 66.6667%; + width: auto; + } + .row-md > .col-md-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-md > .offset-md-9 { + margin-left: 75%; + } + [dir=rtl] .row-md > .offset-md-9 { + margin-right: 75%; + } + .column-md > .col-md-9 { + height: 75%; + width: auto; + } + .row-md > .col-md-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-md > .offset-md-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-md > .offset-md-10 { + margin-right: 83.3333%; + } + .column-md > .col-md-10 { + height: 83.3333%; + width: auto; + } + .row-md > .col-md-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-md > .offset-md-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-md > .offset-md-11 { + margin-right: 91.6667%; + } + .column-md > .col-md-11 { + height: 91.6667%; + width: auto; + } + .row-md > .col-md-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-md > .offset-md-12 { + margin-left: 100%; + } + [dir=rtl] .row-md > .offset-md-12 { + margin-right: 100%; + } + .column-md > .col-md-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1440px) { + .flex-lg-block { + display: block; + } + .flex-lg-inline { + display: inline-block; + } + [dir] .q-pa-lg-none { + padding: 0 0; + } + [dir=ltr] .q-pl-lg-none, [dir=ltr] .q-px-lg-none { + padding-left: 0; + } + [dir=rtl] .q-pl-lg-none, [dir=rtl] .q-px-lg-none { + padding-right: 0; + } + [dir=ltr] .q-pr-lg-none, [dir=ltr] .q-px-lg-none { + padding-right: 0; + } + [dir=rtl] .q-pr-lg-none, [dir=rtl] .q-px-lg-none { + padding-left: 0; + } + [dir] .q-pt-lg-none, [dir] .q-py-lg-none { + padding-top: 0; + } + [dir] .q-pb-lg-none, [dir] .q-py-lg-none { + padding-bottom: 0; + } + [dir] .q-ma-lg-none { + margin: 0 0; + } + [dir=ltr] .q-ml-lg-none, [dir=ltr] .q-mx-lg-none { + margin-left: 0; + } + [dir=rtl] .q-ml-lg-none, [dir=rtl] .q-mx-lg-none { + margin-right: 0; + } + [dir=ltr] .q-mr-lg-none, [dir=ltr] .q-mx-lg-none { + margin-right: 0; + } + [dir=rtl] .q-mr-lg-none, [dir=rtl] .q-mx-lg-none { + margin-left: 0; + } + [dir] .q-mt-lg-none, [dir] .q-my-lg-none { + margin-top: 0; + } + [dir] .q-mb-lg-none, [dir] .q-my-lg-none { + margin-bottom: 0; + } + [dir] .q-pa-lg-xs { + padding: 4px 4px; + } + [dir=ltr] .q-pl-lg-xs, [dir=ltr] .q-px-lg-xs { + padding-left: 4px; + } + [dir=rtl] .q-pl-lg-xs, [dir=rtl] .q-px-lg-xs { + padding-right: 4px; + } + [dir=ltr] .q-pr-lg-xs, [dir=ltr] .q-px-lg-xs { + padding-right: 4px; + } + [dir=rtl] .q-pr-lg-xs, [dir=rtl] .q-px-lg-xs { + padding-left: 4px; + } + [dir] .q-pt-lg-xs, [dir] .q-py-lg-xs { + padding-top: 4px; + } + [dir] .q-pb-lg-xs, [dir] .q-py-lg-xs { + padding-bottom: 4px; + } + [dir] .q-ma-lg-xs { + margin: 4px 4px; + } + [dir=ltr] .q-ml-lg-xs, [dir=ltr] .q-mx-lg-xs { + margin-left: 4px; + } + [dir=rtl] .q-ml-lg-xs, [dir=rtl] .q-mx-lg-xs { + margin-right: 4px; + } + [dir=ltr] .q-mr-lg-xs, [dir=ltr] .q-mx-lg-xs { + margin-right: 4px; + } + [dir=rtl] .q-mr-lg-xs, [dir=rtl] .q-mx-lg-xs { + margin-left: 4px; + } + [dir] .q-mt-lg-xs, [dir] .q-my-lg-xs { + margin-top: 4px; + } + [dir] .q-mb-lg-xs, [dir] .q-my-lg-xs { + margin-bottom: 4px; + } + [dir] .q-pa-lg-sm { + padding: 8px 8px; + } + [dir=ltr] .q-pl-lg-sm, [dir=ltr] .q-px-lg-sm { + padding-left: 8px; + } + [dir=rtl] .q-pl-lg-sm, [dir=rtl] .q-px-lg-sm { + padding-right: 8px; + } + [dir=ltr] .q-pr-lg-sm, [dir=ltr] .q-px-lg-sm { + padding-right: 8px; + } + [dir=rtl] .q-pr-lg-sm, [dir=rtl] .q-px-lg-sm { + padding-left: 8px; + } + [dir] .q-pt-lg-sm, [dir] .q-py-lg-sm { + padding-top: 8px; + } + [dir] .q-pb-lg-sm, [dir] .q-py-lg-sm { + padding-bottom: 8px; + } + [dir] .q-ma-lg-sm { + margin: 8px 8px; + } + [dir=ltr] .q-ml-lg-sm, [dir=ltr] .q-mx-lg-sm { + margin-left: 8px; + } + [dir=rtl] .q-ml-lg-sm, [dir=rtl] .q-mx-lg-sm { + margin-right: 8px; + } + [dir=ltr] .q-mr-lg-sm, [dir=ltr] .q-mx-lg-sm { + margin-right: 8px; + } + [dir=rtl] .q-mr-lg-sm, [dir=rtl] .q-mx-lg-sm { + margin-left: 8px; + } + [dir] .q-mt-lg-sm, [dir] .q-my-lg-sm { + margin-top: 8px; + } + [dir] .q-mb-lg-sm, [dir] .q-my-lg-sm { + margin-bottom: 8px; + } + [dir] .q-pa-lg-md { + padding: 16px 16px; + } + [dir=ltr] .q-pl-lg-md, [dir=ltr] .q-px-lg-md { + padding-left: 16px; + } + [dir=rtl] .q-pl-lg-md, [dir=rtl] .q-px-lg-md { + padding-right: 16px; + } + [dir=ltr] .q-pr-lg-md, [dir=ltr] .q-px-lg-md { + padding-right: 16px; + } + [dir=rtl] .q-pr-lg-md, [dir=rtl] .q-px-lg-md { + padding-left: 16px; + } + [dir] .q-pt-lg-md, [dir] .q-py-lg-md { + padding-top: 16px; + } + [dir] .q-pb-lg-md, [dir] .q-py-lg-md { + padding-bottom: 16px; + } + [dir] .q-ma-lg-md { + margin: 16px 16px; + } + [dir=ltr] .q-ml-lg-md, [dir=ltr] .q-mx-lg-md { + margin-left: 16px; + } + [dir=rtl] .q-ml-lg-md, [dir=rtl] .q-mx-lg-md { + margin-right: 16px; + } + [dir=ltr] .q-mr-lg-md, [dir=ltr] .q-mx-lg-md { + margin-right: 16px; + } + [dir=rtl] .q-mr-lg-md, [dir=rtl] .q-mx-lg-md { + margin-left: 16px; + } + [dir] .q-mt-lg-md, [dir] .q-my-lg-md { + margin-top: 16px; + } + [dir] .q-mb-lg-md, [dir] .q-my-lg-md { + margin-bottom: 16px; + } + [dir] .q-pa-lg-lg { + padding: 24px 24px; + } + [dir=ltr] .q-pl-lg-lg, [dir=ltr] .q-px-lg-lg { + padding-left: 24px; + } + [dir=rtl] .q-pl-lg-lg, [dir=rtl] .q-px-lg-lg { + padding-right: 24px; + } + [dir=ltr] .q-pr-lg-lg, [dir=ltr] .q-px-lg-lg { + padding-right: 24px; + } + [dir=rtl] .q-pr-lg-lg, [dir=rtl] .q-px-lg-lg { + padding-left: 24px; + } + [dir] .q-pt-lg-lg, [dir] .q-py-lg-lg { + padding-top: 24px; + } + [dir] .q-pb-lg-lg, [dir] .q-py-lg-lg { + padding-bottom: 24px; + } + [dir] .q-ma-lg-lg { + margin: 24px 24px; + } + [dir=ltr] .q-ml-lg-lg, [dir=ltr] .q-mx-lg-lg { + margin-left: 24px; + } + [dir=rtl] .q-ml-lg-lg, [dir=rtl] .q-mx-lg-lg { + margin-right: 24px; + } + [dir=ltr] .q-mr-lg-lg, [dir=ltr] .q-mx-lg-lg { + margin-right: 24px; + } + [dir=rtl] .q-mr-lg-lg, [dir=rtl] .q-mx-lg-lg { + margin-left: 24px; + } + [dir] .q-mt-lg-lg, [dir] .q-my-lg-lg { + margin-top: 24px; + } + [dir] .q-mb-lg-lg, [dir] .q-my-lg-lg { + margin-bottom: 24px; + } + [dir] .q-pa-lg-xl { + padding: 48px 48px; + } + [dir=ltr] .q-pl-lg-xl, [dir=ltr] .q-px-lg-xl { + padding-left: 48px; + } + [dir=rtl] .q-pl-lg-xl, [dir=rtl] .q-px-lg-xl { + padding-right: 48px; + } + [dir=ltr] .q-pr-lg-xl, [dir=ltr] .q-px-lg-xl { + padding-right: 48px; + } + [dir=rtl] .q-pr-lg-xl, [dir=rtl] .q-px-lg-xl { + padding-left: 48px; + } + [dir] .q-pt-lg-xl, [dir] .q-py-lg-xl { + padding-top: 48px; + } + [dir] .q-pb-lg-xl, [dir] .q-py-lg-xl { + padding-bottom: 48px; + } + [dir] .q-ma-lg-xl { + margin: 48px 48px; + } + [dir=ltr] .q-ml-lg-xl, [dir=ltr] .q-mx-lg-xl { + margin-left: 48px; + } + [dir=rtl] .q-ml-lg-xl, [dir=rtl] .q-mx-lg-xl { + margin-right: 48px; + } + [dir=ltr] .q-mr-lg-xl, [dir=ltr] .q-mx-lg-xl { + margin-right: 48px; + } + [dir=rtl] .q-mr-lg-xl, [dir=rtl] .q-mx-lg-xl { + margin-left: 48px; + } + [dir] .q-mt-lg-xl, [dir] .q-my-lg-xl { + margin-top: 48px; + } + [dir] .q-mb-lg-xl, [dir] .q-my-lg-xl { + margin-bottom: 48px; + } + [dir=ltr] .q-ml-lg-auto, [dir=ltr] .q-mx-lg-auto { + margin-left: auto; + } + [dir=rtl] .q-ml-lg-auto, [dir=rtl] .q-mx-lg-auto { + margin-right: auto; + } + [dir=ltr] .q-mr-lg-auto, [dir=ltr] .q-mx-lg-auto { + margin-right: auto; + } + [dir=rtl] .q-mr-lg-auto, [dir=rtl] .q-mx-lg-auto { + margin-left: auto; + } + .row.inline-lg, + .column.inline-lg, + .flex.inline-lg { + display: inline-flex; + } + .row-lg, + .column-lg, + .flex-lg { + display: flex; + flex-wrap: wrap; + } + .row-lg.inline, + .column-lg.inline, + .flex-lg.inline, + .row-lg.inline-lg, + .column-lg.inline-lg, + .flex-lg.inline-lg { + display: inline-flex; + } + .row.reverse-lg { + flex-direction: row-reverse; + } + .row-lg { + flex-direction: row; + } + .row-lg.reverse, + .row-lg.reverse-lg { + flex-direction: row-reverse; + } + .column.reverse-lg { + flex-direction: column-reverse; + } + .column-lg { + flex-direction: column; + } + .column-lg.reverse, + .column-lg.reverse-lg { + flex-direction: column-reverse; + } + .wrap-lg { + flex-wrap: wrap; + } + .no-wrap-lg { + flex-wrap: nowrap; + } + .reverse-wrap-lg { + flex-wrap: wrap-reverse; + } + .order-lg-first { + order: -10000; + } + .order-lg-last { + order: 10000; + } + .order-lg-none { + order: 0; + } + .justify-lg-start { + justify-content: flex-start; + } + .justify-lg-end { + justify-content: flex-end; + } + .justify-lg-center, + .flex-lg-center { + justify-content: center; + } + .justify-lg-between { + justify-content: space-between; + } + .justify-lg-around { + justify-content: space-around; + } + .justify-lg-evenly { + justify-content: space-evenly; + } + .items-lg-start { + align-items: flex-start; + } + .items-lg-end { + align-items: flex-end; + } + .items-lg-center, + .flex-lg-center { + align-items: center; + } + .items-lg-baseline { + align-items: baseline; + } + .items-lg-stretch { + align-items: stretch; + } + .content-lg-start { + align-content: flex-start; + } + .content-lg-end { + align-content: flex-end; + } + .content-lg-center { + align-content: center; + } + .content-lg-between { + align-content: space-between; + } + .content-lg-around { + align-content: space-around; + } + .self-lg-start { + align-self: flex-start; + } + .self-lg-end { + align-self: flex-end; + } + .self-lg-center { + align-self: center; + } + .self-lg-baseline { + align-self: baseline; + } + .self-lg-stretch { + align-self: stretch; + } + [dir=ltr] .q-gutter-lg-x-none, [dir=ltr] .q-gutter-lg-none { + margin-left: 0; + } + [dir=rtl] .q-gutter-lg-x-none, [dir=rtl] .q-gutter-lg-none { + margin-right: 0; + } + [dir=ltr] .q-gutter-lg-x-none > *, [dir=ltr] .q-gutter-lg-none > * { + margin-left: 0; + } + [dir=rtl] .q-gutter-lg-x-none > *, [dir=rtl] .q-gutter-lg-none > * { + margin-right: 0; + } + [dir] .q-gutter-lg-y-none, [dir] .q-gutter-lg-none { + margin-top: 0; + } + [dir] .q-gutter-lg-y-none > *, [dir] .q-gutter-lg-none > * { + margin-top: 0; + } + [dir=ltr] .q-col-gutter-lg-x-none, [dir=ltr] .q-col-gutter-lg-none { + margin-left: 0; + } + [dir=rtl] .q-col-gutter-lg-x-none, [dir=rtl] .q-col-gutter-lg-none { + margin-right: 0; + } + [dir=ltr] .q-col-gutter-lg-x-none > *, [dir=ltr] .q-col-gutter-lg-none > * { + padding-left: 0; + } + [dir=rtl] .q-col-gutter-lg-x-none > *, [dir=rtl] .q-col-gutter-lg-none > * { + padding-right: 0; + } + [dir] .q-col-gutter-lg-y-none, [dir] .q-col-gutter-lg-none { + margin-top: 0; + } + [dir] .q-col-gutter-lg-y-none > *, [dir] .q-col-gutter-lg-none > * { + padding-top: 0; + } + [dir=ltr] .q-gutter-lg-x-xs, [dir=ltr] .q-gutter-lg-xs { + margin-left: -4px; + } + [dir=rtl] .q-gutter-lg-x-xs, [dir=rtl] .q-gutter-lg-xs { + margin-right: -4px; + } + [dir=ltr] .q-gutter-lg-x-xs > *, [dir=ltr] .q-gutter-lg-xs > * { + margin-left: 4px; + } + [dir=rtl] .q-gutter-lg-x-xs > *, [dir=rtl] .q-gutter-lg-xs > * { + margin-right: 4px; + } + [dir] .q-gutter-lg-y-xs, [dir] .q-gutter-lg-xs { + margin-top: -4px; + } + [dir] .q-gutter-lg-y-xs > *, [dir] .q-gutter-lg-xs > * { + margin-top: 4px; + } + [dir=ltr] .q-col-gutter-lg-x-xs, [dir=ltr] .q-col-gutter-lg-xs { + margin-left: -4px; + } + [dir=rtl] .q-col-gutter-lg-x-xs, [dir=rtl] .q-col-gutter-lg-xs { + margin-right: -4px; + } + [dir=ltr] .q-col-gutter-lg-x-xs > *, [dir=ltr] .q-col-gutter-lg-xs > * { + padding-left: 4px; + } + [dir=rtl] .q-col-gutter-lg-x-xs > *, [dir=rtl] .q-col-gutter-lg-xs > * { + padding-right: 4px; + } + [dir] .q-col-gutter-lg-y-xs, [dir] .q-col-gutter-lg-xs { + margin-top: -4px; + } + [dir] .q-col-gutter-lg-y-xs > *, [dir] .q-col-gutter-lg-xs > * { + padding-top: 4px; + } + [dir=ltr] .q-gutter-lg-x-sm, [dir=ltr] .q-gutter-lg-sm { + margin-left: -8px; + } + [dir=rtl] .q-gutter-lg-x-sm, [dir=rtl] .q-gutter-lg-sm { + margin-right: -8px; + } + [dir=ltr] .q-gutter-lg-x-sm > *, [dir=ltr] .q-gutter-lg-sm > * { + margin-left: 8px; + } + [dir=rtl] .q-gutter-lg-x-sm > *, [dir=rtl] .q-gutter-lg-sm > * { + margin-right: 8px; + } + [dir] .q-gutter-lg-y-sm, [dir] .q-gutter-lg-sm { + margin-top: -8px; + } + [dir] .q-gutter-lg-y-sm > *, [dir] .q-gutter-lg-sm > * { + margin-top: 8px; + } + [dir=ltr] .q-col-gutter-lg-x-sm, [dir=ltr] .q-col-gutter-lg-sm { + margin-left: -8px; + } + [dir=rtl] .q-col-gutter-lg-x-sm, [dir=rtl] .q-col-gutter-lg-sm { + margin-right: -8px; + } + [dir=ltr] .q-col-gutter-lg-x-sm > *, [dir=ltr] .q-col-gutter-lg-sm > * { + padding-left: 8px; + } + [dir=rtl] .q-col-gutter-lg-x-sm > *, [dir=rtl] .q-col-gutter-lg-sm > * { + padding-right: 8px; + } + [dir] .q-col-gutter-lg-y-sm, [dir] .q-col-gutter-lg-sm { + margin-top: -8px; + } + [dir] .q-col-gutter-lg-y-sm > *, [dir] .q-col-gutter-lg-sm > * { + padding-top: 8px; + } + [dir=ltr] .q-gutter-lg-x-md, [dir=ltr] .q-gutter-lg-md { + margin-left: -16px; + } + [dir=rtl] .q-gutter-lg-x-md, [dir=rtl] .q-gutter-lg-md { + margin-right: -16px; + } + [dir=ltr] .q-gutter-lg-x-md > *, [dir=ltr] .q-gutter-lg-md > * { + margin-left: 16px; + } + [dir=rtl] .q-gutter-lg-x-md > *, [dir=rtl] .q-gutter-lg-md > * { + margin-right: 16px; + } + [dir] .q-gutter-lg-y-md, [dir] .q-gutter-lg-md { + margin-top: -16px; + } + [dir] .q-gutter-lg-y-md > *, [dir] .q-gutter-lg-md > * { + margin-top: 16px; + } + [dir=ltr] .q-col-gutter-lg-x-md, [dir=ltr] .q-col-gutter-lg-md { + margin-left: -16px; + } + [dir=rtl] .q-col-gutter-lg-x-md, [dir=rtl] .q-col-gutter-lg-md { + margin-right: -16px; + } + [dir=ltr] .q-col-gutter-lg-x-md > *, [dir=ltr] .q-col-gutter-lg-md > * { + padding-left: 16px; + } + [dir=rtl] .q-col-gutter-lg-x-md > *, [dir=rtl] .q-col-gutter-lg-md > * { + padding-right: 16px; + } + [dir] .q-col-gutter-lg-y-md, [dir] .q-col-gutter-lg-md { + margin-top: -16px; + } + [dir] .q-col-gutter-lg-y-md > *, [dir] .q-col-gutter-lg-md > * { + padding-top: 16px; + } + [dir=ltr] .q-gutter-lg-x-lg, [dir=ltr] .q-gutter-lg-lg { + margin-left: -24px; + } + [dir=rtl] .q-gutter-lg-x-lg, [dir=rtl] .q-gutter-lg-lg { + margin-right: -24px; + } + [dir=ltr] .q-gutter-lg-x-lg > *, [dir=ltr] .q-gutter-lg-lg > * { + margin-left: 24px; + } + [dir=rtl] .q-gutter-lg-x-lg > *, [dir=rtl] .q-gutter-lg-lg > * { + margin-right: 24px; + } + [dir] .q-gutter-lg-y-lg, [dir] .q-gutter-lg-lg { + margin-top: -24px; + } + [dir] .q-gutter-lg-y-lg > *, [dir] .q-gutter-lg-lg > * { + margin-top: 24px; + } + [dir=ltr] .q-col-gutter-lg-x-lg, [dir=ltr] .q-col-gutter-lg-lg { + margin-left: -24px; + } + [dir=rtl] .q-col-gutter-lg-x-lg, [dir=rtl] .q-col-gutter-lg-lg { + margin-right: -24px; + } + [dir=ltr] .q-col-gutter-lg-x-lg > *, [dir=ltr] .q-col-gutter-lg-lg > * { + padding-left: 24px; + } + [dir=rtl] .q-col-gutter-lg-x-lg > *, [dir=rtl] .q-col-gutter-lg-lg > * { + padding-right: 24px; + } + [dir] .q-col-gutter-lg-y-lg, [dir] .q-col-gutter-lg-lg { + margin-top: -24px; + } + [dir] .q-col-gutter-lg-y-lg > *, [dir] .q-col-gutter-lg-lg > * { + padding-top: 24px; + } + [dir=ltr] .q-gutter-lg-x-xl, [dir=ltr] .q-gutter-lg-xl { + margin-left: -48px; + } + [dir=rtl] .q-gutter-lg-x-xl, [dir=rtl] .q-gutter-lg-xl { + margin-right: -48px; + } + [dir=ltr] .q-gutter-lg-x-xl > *, [dir=ltr] .q-gutter-lg-xl > * { + margin-left: 48px; + } + [dir=rtl] .q-gutter-lg-x-xl > *, [dir=rtl] .q-gutter-lg-xl > * { + margin-right: 48px; + } + [dir] .q-gutter-lg-y-xl, [dir] .q-gutter-lg-xl { + margin-top: -48px; + } + [dir] .q-gutter-lg-y-xl > *, [dir] .q-gutter-lg-xl > * { + margin-top: 48px; + } + [dir=ltr] .q-col-gutter-lg-x-xl, [dir=ltr] .q-col-gutter-lg-xl { + margin-left: -48px; + } + [dir=rtl] .q-col-gutter-lg-x-xl, [dir=rtl] .q-col-gutter-lg-xl { + margin-right: -48px; + } + [dir=ltr] .q-col-gutter-lg-x-xl > *, [dir=ltr] .q-col-gutter-lg-xl > * { + padding-left: 48px; + } + [dir=rtl] .q-col-gutter-lg-x-xl > *, [dir=rtl] .q-col-gutter-lg-xl > * { + padding-right: 48px; + } + [dir] .q-col-gutter-lg-y-xl, [dir] .q-col-gutter-lg-xl { + margin-top: -48px; + } + [dir] .q-col-gutter-lg-y-xl > *, [dir] .q-col-gutter-lg-xl > * { + padding-top: 48px; + } + .row-lg > .col-0, + .row-lg > .col-xs-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-lg > .offset-0, [dir=ltr] .row-lg > .offset-xs-0 { + margin-left: 0%; + } + [dir=rtl] .row-lg > .offset-0, [dir=rtl] .row-lg > .offset-xs-0 { + margin-right: 0%; + } + .column-lg > .col-0, + .column-lg > .col-xs-0 { + height: 0%; + width: auto; + } + .row-lg > .col-1, + .row-lg > .col-xs-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-lg > .offset-1, [dir=ltr] .row-lg > .offset-xs-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-lg > .offset-1, [dir=rtl] .row-lg > .offset-xs-1 { + margin-right: 8.3333%; + } + .column-lg > .col-1, + .column-lg > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-lg > .col-2, + .row-lg > .col-xs-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-lg > .offset-2, [dir=ltr] .row-lg > .offset-xs-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-lg > .offset-2, [dir=rtl] .row-lg > .offset-xs-2 { + margin-right: 16.6667%; + } + .column-lg > .col-2, + .column-lg > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-lg > .col-3, + .row-lg > .col-xs-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-lg > .offset-3, [dir=ltr] .row-lg > .offset-xs-3 { + margin-left: 25%; + } + [dir=rtl] .row-lg > .offset-3, [dir=rtl] .row-lg > .offset-xs-3 { + margin-right: 25%; + } + .column-lg > .col-3, + .column-lg > .col-xs-3 { + height: 25%; + width: auto; + } + .row-lg > .col-4, + .row-lg > .col-xs-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-lg > .offset-4, [dir=ltr] .row-lg > .offset-xs-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-lg > .offset-4, [dir=rtl] .row-lg > .offset-xs-4 { + margin-right: 33.3333%; + } + .column-lg > .col-4, + .column-lg > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-lg > .col-5, + .row-lg > .col-xs-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-lg > .offset-5, [dir=ltr] .row-lg > .offset-xs-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-lg > .offset-5, [dir=rtl] .row-lg > .offset-xs-5 { + margin-right: 41.6667%; + } + .column-lg > .col-5, + .column-lg > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-lg > .col-6, + .row-lg > .col-xs-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-lg > .offset-6, [dir=ltr] .row-lg > .offset-xs-6 { + margin-left: 50%; + } + [dir=rtl] .row-lg > .offset-6, [dir=rtl] .row-lg > .offset-xs-6 { + margin-right: 50%; + } + .column-lg > .col-6, + .column-lg > .col-xs-6 { + height: 50%; + width: auto; + } + .row-lg > .col-7, + .row-lg > .col-xs-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-lg > .offset-7, [dir=ltr] .row-lg > .offset-xs-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-lg > .offset-7, [dir=rtl] .row-lg > .offset-xs-7 { + margin-right: 58.3333%; + } + .column-lg > .col-7, + .column-lg > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-lg > .col-8, + .row-lg > .col-xs-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-lg > .offset-8, [dir=ltr] .row-lg > .offset-xs-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-lg > .offset-8, [dir=rtl] .row-lg > .offset-xs-8 { + margin-right: 66.6667%; + } + .column-lg > .col-8, + .column-lg > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-lg > .col-9, + .row-lg > .col-xs-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-lg > .offset-9, [dir=ltr] .row-lg > .offset-xs-9 { + margin-left: 75%; + } + [dir=rtl] .row-lg > .offset-9, [dir=rtl] .row-lg > .offset-xs-9 { + margin-right: 75%; + } + .column-lg > .col-9, + .column-lg > .col-xs-9 { + height: 75%; + width: auto; + } + .row-lg > .col-10, + .row-lg > .col-xs-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-lg > .offset-10, [dir=ltr] .row-lg > .offset-xs-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-lg > .offset-10, [dir=rtl] .row-lg > .offset-xs-10 { + margin-right: 83.3333%; + } + .column-lg > .col-10, + .column-lg > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-lg > .col-11, + .row-lg > .col-xs-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-lg > .offset-11, [dir=ltr] .row-lg > .offset-xs-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-lg > .offset-11, [dir=rtl] .row-lg > .offset-xs-11 { + margin-right: 91.6667%; + } + .column-lg > .col-11, + .column-lg > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-lg > .col-12, + .row-lg > .col-xs-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-lg > .offset-12, [dir=ltr] .row-lg > .offset-xs-12 { + margin-left: 100%; + } + [dir=rtl] .row-lg > .offset-12, [dir=rtl] .row-lg > .offset-xs-12 { + margin-right: 100%; + } + .column-lg > .col-12, + .column-lg > .col-xs-12 { + height: 100%; + width: auto; + } + .row-lg > .col-sm-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-lg > .offset-sm-0 { + margin-left: 0%; + } + [dir=rtl] .row-lg > .offset-sm-0 { + margin-right: 0%; + } + .column-lg > .col-sm-0 { + height: 0%; + width: auto; + } + .row-lg > .col-sm-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-lg > .offset-sm-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-lg > .offset-sm-1 { + margin-right: 8.3333%; + } + .column-lg > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row-lg > .col-sm-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-lg > .offset-sm-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-lg > .offset-sm-2 { + margin-right: 16.6667%; + } + .column-lg > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row-lg > .col-sm-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-lg > .offset-sm-3 { + margin-left: 25%; + } + [dir=rtl] .row-lg > .offset-sm-3 { + margin-right: 25%; + } + .column-lg > .col-sm-3 { + height: 25%; + width: auto; + } + .row-lg > .col-sm-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-lg > .offset-sm-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-lg > .offset-sm-4 { + margin-right: 33.3333%; + } + .column-lg > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row-lg > .col-sm-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-lg > .offset-sm-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-lg > .offset-sm-5 { + margin-right: 41.6667%; + } + .column-lg > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row-lg > .col-sm-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-lg > .offset-sm-6 { + margin-left: 50%; + } + [dir=rtl] .row-lg > .offset-sm-6 { + margin-right: 50%; + } + .column-lg > .col-sm-6 { + height: 50%; + width: auto; + } + .row-lg > .col-sm-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-lg > .offset-sm-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-lg > .offset-sm-7 { + margin-right: 58.3333%; + } + .column-lg > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row-lg > .col-sm-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-lg > .offset-sm-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-lg > .offset-sm-8 { + margin-right: 66.6667%; + } + .column-lg > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row-lg > .col-sm-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-lg > .offset-sm-9 { + margin-left: 75%; + } + [dir=rtl] .row-lg > .offset-sm-9 { + margin-right: 75%; + } + .column-lg > .col-sm-9 { + height: 75%; + width: auto; + } + .row-lg > .col-sm-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-lg > .offset-sm-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-lg > .offset-sm-10 { + margin-right: 83.3333%; + } + .column-lg > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row-lg > .col-sm-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-lg > .offset-sm-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-lg > .offset-sm-11 { + margin-right: 91.6667%; + } + .column-lg > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row-lg > .col-sm-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-lg > .offset-sm-12 { + margin-left: 100%; + } + [dir=rtl] .row-lg > .offset-sm-12 { + margin-right: 100%; + } + .column-lg > .col-sm-12 { + height: 100%; + width: auto; + } + .row-lg > .col-md-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-lg > .offset-md-0 { + margin-left: 0%; + } + [dir=rtl] .row-lg > .offset-md-0 { + margin-right: 0%; + } + .column-lg > .col-md-0 { + height: 0%; + width: auto; + } + .row-lg > .col-md-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-lg > .offset-md-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-lg > .offset-md-1 { + margin-right: 8.3333%; + } + .column-lg > .col-md-1 { + height: 8.3333%; + width: auto; + } + .row-lg > .col-md-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-lg > .offset-md-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-lg > .offset-md-2 { + margin-right: 16.6667%; + } + .column-lg > .col-md-2 { + height: 16.6667%; + width: auto; + } + .row-lg > .col-md-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-lg > .offset-md-3 { + margin-left: 25%; + } + [dir=rtl] .row-lg > .offset-md-3 { + margin-right: 25%; + } + .column-lg > .col-md-3 { + height: 25%; + width: auto; + } + .row-lg > .col-md-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-lg > .offset-md-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-lg > .offset-md-4 { + margin-right: 33.3333%; + } + .column-lg > .col-md-4 { + height: 33.3333%; + width: auto; + } + .row-lg > .col-md-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-lg > .offset-md-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-lg > .offset-md-5 { + margin-right: 41.6667%; + } + .column-lg > .col-md-5 { + height: 41.6667%; + width: auto; + } + .row-lg > .col-md-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-lg > .offset-md-6 { + margin-left: 50%; + } + [dir=rtl] .row-lg > .offset-md-6 { + margin-right: 50%; + } + .column-lg > .col-md-6 { + height: 50%; + width: auto; + } + .row-lg > .col-md-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-lg > .offset-md-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-lg > .offset-md-7 { + margin-right: 58.3333%; + } + .column-lg > .col-md-7 { + height: 58.3333%; + width: auto; + } + .row-lg > .col-md-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-lg > .offset-md-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-lg > .offset-md-8 { + margin-right: 66.6667%; + } + .column-lg > .col-md-8 { + height: 66.6667%; + width: auto; + } + .row-lg > .col-md-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-lg > .offset-md-9 { + margin-left: 75%; + } + [dir=rtl] .row-lg > .offset-md-9 { + margin-right: 75%; + } + .column-lg > .col-md-9 { + height: 75%; + width: auto; + } + .row-lg > .col-md-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-lg > .offset-md-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-lg > .offset-md-10 { + margin-right: 83.3333%; + } + .column-lg > .col-md-10 { + height: 83.3333%; + width: auto; + } + .row-lg > .col-md-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-lg > .offset-md-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-lg > .offset-md-11 { + margin-right: 91.6667%; + } + .column-lg > .col-md-11 { + height: 91.6667%; + width: auto; + } + .row-lg > .col-md-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-lg > .offset-md-12 { + margin-left: 100%; + } + [dir=rtl] .row-lg > .offset-md-12 { + margin-right: 100%; + } + .column-lg > .col-md-12 { + height: 100%; + width: auto; + } + .row-lg > .col-lg-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-lg > .offset-lg-0 { + margin-left: 0%; + } + [dir=rtl] .row-lg > .offset-lg-0 { + margin-right: 0%; + } + .column-lg > .col-lg-0 { + height: 0%; + width: auto; + } + .row-lg > .col-lg-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-lg > .offset-lg-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-lg > .offset-lg-1 { + margin-right: 8.3333%; + } + .column-lg > .col-lg-1 { + height: 8.3333%; + width: auto; + } + .row-lg > .col-lg-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-lg > .offset-lg-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-lg > .offset-lg-2 { + margin-right: 16.6667%; + } + .column-lg > .col-lg-2 { + height: 16.6667%; + width: auto; + } + .row-lg > .col-lg-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-lg > .offset-lg-3 { + margin-left: 25%; + } + [dir=rtl] .row-lg > .offset-lg-3 { + margin-right: 25%; + } + .column-lg > .col-lg-3 { + height: 25%; + width: auto; + } + .row-lg > .col-lg-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-lg > .offset-lg-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-lg > .offset-lg-4 { + margin-right: 33.3333%; + } + .column-lg > .col-lg-4 { + height: 33.3333%; + width: auto; + } + .row-lg > .col-lg-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-lg > .offset-lg-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-lg > .offset-lg-5 { + margin-right: 41.6667%; + } + .column-lg > .col-lg-5 { + height: 41.6667%; + width: auto; + } + .row-lg > .col-lg-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-lg > .offset-lg-6 { + margin-left: 50%; + } + [dir=rtl] .row-lg > .offset-lg-6 { + margin-right: 50%; + } + .column-lg > .col-lg-6 { + height: 50%; + width: auto; + } + .row-lg > .col-lg-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-lg > .offset-lg-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-lg > .offset-lg-7 { + margin-right: 58.3333%; + } + .column-lg > .col-lg-7 { + height: 58.3333%; + width: auto; + } + .row-lg > .col-lg-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-lg > .offset-lg-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-lg > .offset-lg-8 { + margin-right: 66.6667%; + } + .column-lg > .col-lg-8 { + height: 66.6667%; + width: auto; + } + .row-lg > .col-lg-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-lg > .offset-lg-9 { + margin-left: 75%; + } + [dir=rtl] .row-lg > .offset-lg-9 { + margin-right: 75%; + } + .column-lg > .col-lg-9 { + height: 75%; + width: auto; + } + .row-lg > .col-lg-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-lg > .offset-lg-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-lg > .offset-lg-10 { + margin-right: 83.3333%; + } + .column-lg > .col-lg-10 { + height: 83.3333%; + width: auto; + } + .row-lg > .col-lg-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-lg > .offset-lg-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-lg > .offset-lg-11 { + margin-right: 91.6667%; + } + .column-lg > .col-lg-11 { + height: 91.6667%; + width: auto; + } + .row-lg > .col-lg-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-lg > .offset-lg-12 { + margin-left: 100%; + } + [dir=rtl] .row-lg > .offset-lg-12 { + margin-right: 100%; + } + .column-lg > .col-lg-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1920px) { + .flex-xl-block { + display: block; + } + .flex-xl-inline { + display: inline-block; + } + [dir] .q-pa-xl-none { + padding: 0 0; + } + [dir=ltr] .q-pl-xl-none, [dir=ltr] .q-px-xl-none { + padding-left: 0; + } + [dir=rtl] .q-pl-xl-none, [dir=rtl] .q-px-xl-none { + padding-right: 0; + } + [dir=ltr] .q-pr-xl-none, [dir=ltr] .q-px-xl-none { + padding-right: 0; + } + [dir=rtl] .q-pr-xl-none, [dir=rtl] .q-px-xl-none { + padding-left: 0; + } + [dir] .q-pt-xl-none, [dir] .q-py-xl-none { + padding-top: 0; + } + [dir] .q-pb-xl-none, [dir] .q-py-xl-none { + padding-bottom: 0; + } + [dir] .q-ma-xl-none { + margin: 0 0; + } + [dir=ltr] .q-ml-xl-none, [dir=ltr] .q-mx-xl-none { + margin-left: 0; + } + [dir=rtl] .q-ml-xl-none, [dir=rtl] .q-mx-xl-none { + margin-right: 0; + } + [dir=ltr] .q-mr-xl-none, [dir=ltr] .q-mx-xl-none { + margin-right: 0; + } + [dir=rtl] .q-mr-xl-none, [dir=rtl] .q-mx-xl-none { + margin-left: 0; + } + [dir] .q-mt-xl-none, [dir] .q-my-xl-none { + margin-top: 0; + } + [dir] .q-mb-xl-none, [dir] .q-my-xl-none { + margin-bottom: 0; + } + [dir] .q-pa-xl-xs { + padding: 4px 4px; + } + [dir=ltr] .q-pl-xl-xs, [dir=ltr] .q-px-xl-xs { + padding-left: 4px; + } + [dir=rtl] .q-pl-xl-xs, [dir=rtl] .q-px-xl-xs { + padding-right: 4px; + } + [dir=ltr] .q-pr-xl-xs, [dir=ltr] .q-px-xl-xs { + padding-right: 4px; + } + [dir=rtl] .q-pr-xl-xs, [dir=rtl] .q-px-xl-xs { + padding-left: 4px; + } + [dir] .q-pt-xl-xs, [dir] .q-py-xl-xs { + padding-top: 4px; + } + [dir] .q-pb-xl-xs, [dir] .q-py-xl-xs { + padding-bottom: 4px; + } + [dir] .q-ma-xl-xs { + margin: 4px 4px; + } + [dir=ltr] .q-ml-xl-xs, [dir=ltr] .q-mx-xl-xs { + margin-left: 4px; + } + [dir=rtl] .q-ml-xl-xs, [dir=rtl] .q-mx-xl-xs { + margin-right: 4px; + } + [dir=ltr] .q-mr-xl-xs, [dir=ltr] .q-mx-xl-xs { + margin-right: 4px; + } + [dir=rtl] .q-mr-xl-xs, [dir=rtl] .q-mx-xl-xs { + margin-left: 4px; + } + [dir] .q-mt-xl-xs, [dir] .q-my-xl-xs { + margin-top: 4px; + } + [dir] .q-mb-xl-xs, [dir] .q-my-xl-xs { + margin-bottom: 4px; + } + [dir] .q-pa-xl-sm { + padding: 8px 8px; + } + [dir=ltr] .q-pl-xl-sm, [dir=ltr] .q-px-xl-sm { + padding-left: 8px; + } + [dir=rtl] .q-pl-xl-sm, [dir=rtl] .q-px-xl-sm { + padding-right: 8px; + } + [dir=ltr] .q-pr-xl-sm, [dir=ltr] .q-px-xl-sm { + padding-right: 8px; + } + [dir=rtl] .q-pr-xl-sm, [dir=rtl] .q-px-xl-sm { + padding-left: 8px; + } + [dir] .q-pt-xl-sm, [dir] .q-py-xl-sm { + padding-top: 8px; + } + [dir] .q-pb-xl-sm, [dir] .q-py-xl-sm { + padding-bottom: 8px; + } + [dir] .q-ma-xl-sm { + margin: 8px 8px; + } + [dir=ltr] .q-ml-xl-sm, [dir=ltr] .q-mx-xl-sm { + margin-left: 8px; + } + [dir=rtl] .q-ml-xl-sm, [dir=rtl] .q-mx-xl-sm { + margin-right: 8px; + } + [dir=ltr] .q-mr-xl-sm, [dir=ltr] .q-mx-xl-sm { + margin-right: 8px; + } + [dir=rtl] .q-mr-xl-sm, [dir=rtl] .q-mx-xl-sm { + margin-left: 8px; + } + [dir] .q-mt-xl-sm, [dir] .q-my-xl-sm { + margin-top: 8px; + } + [dir] .q-mb-xl-sm, [dir] .q-my-xl-sm { + margin-bottom: 8px; + } + [dir] .q-pa-xl-md { + padding: 16px 16px; + } + [dir=ltr] .q-pl-xl-md, [dir=ltr] .q-px-xl-md { + padding-left: 16px; + } + [dir=rtl] .q-pl-xl-md, [dir=rtl] .q-px-xl-md { + padding-right: 16px; + } + [dir=ltr] .q-pr-xl-md, [dir=ltr] .q-px-xl-md { + padding-right: 16px; + } + [dir=rtl] .q-pr-xl-md, [dir=rtl] .q-px-xl-md { + padding-left: 16px; + } + [dir] .q-pt-xl-md, [dir] .q-py-xl-md { + padding-top: 16px; + } + [dir] .q-pb-xl-md, [dir] .q-py-xl-md { + padding-bottom: 16px; + } + [dir] .q-ma-xl-md { + margin: 16px 16px; + } + [dir=ltr] .q-ml-xl-md, [dir=ltr] .q-mx-xl-md { + margin-left: 16px; + } + [dir=rtl] .q-ml-xl-md, [dir=rtl] .q-mx-xl-md { + margin-right: 16px; + } + [dir=ltr] .q-mr-xl-md, [dir=ltr] .q-mx-xl-md { + margin-right: 16px; + } + [dir=rtl] .q-mr-xl-md, [dir=rtl] .q-mx-xl-md { + margin-left: 16px; + } + [dir] .q-mt-xl-md, [dir] .q-my-xl-md { + margin-top: 16px; + } + [dir] .q-mb-xl-md, [dir] .q-my-xl-md { + margin-bottom: 16px; + } + [dir] .q-pa-xl-lg { + padding: 24px 24px; + } + [dir=ltr] .q-pl-xl-lg, [dir=ltr] .q-px-xl-lg { + padding-left: 24px; + } + [dir=rtl] .q-pl-xl-lg, [dir=rtl] .q-px-xl-lg { + padding-right: 24px; + } + [dir=ltr] .q-pr-xl-lg, [dir=ltr] .q-px-xl-lg { + padding-right: 24px; + } + [dir=rtl] .q-pr-xl-lg, [dir=rtl] .q-px-xl-lg { + padding-left: 24px; + } + [dir] .q-pt-xl-lg, [dir] .q-py-xl-lg { + padding-top: 24px; + } + [dir] .q-pb-xl-lg, [dir] .q-py-xl-lg { + padding-bottom: 24px; + } + [dir] .q-ma-xl-lg { + margin: 24px 24px; + } + [dir=ltr] .q-ml-xl-lg, [dir=ltr] .q-mx-xl-lg { + margin-left: 24px; + } + [dir=rtl] .q-ml-xl-lg, [dir=rtl] .q-mx-xl-lg { + margin-right: 24px; + } + [dir=ltr] .q-mr-xl-lg, [dir=ltr] .q-mx-xl-lg { + margin-right: 24px; + } + [dir=rtl] .q-mr-xl-lg, [dir=rtl] .q-mx-xl-lg { + margin-left: 24px; + } + [dir] .q-mt-xl-lg, [dir] .q-my-xl-lg { + margin-top: 24px; + } + [dir] .q-mb-xl-lg, [dir] .q-my-xl-lg { + margin-bottom: 24px; + } + [dir] .q-pa-xl-xl { + padding: 48px 48px; + } + [dir=ltr] .q-pl-xl-xl, [dir=ltr] .q-px-xl-xl { + padding-left: 48px; + } + [dir=rtl] .q-pl-xl-xl, [dir=rtl] .q-px-xl-xl { + padding-right: 48px; + } + [dir=ltr] .q-pr-xl-xl, [dir=ltr] .q-px-xl-xl { + padding-right: 48px; + } + [dir=rtl] .q-pr-xl-xl, [dir=rtl] .q-px-xl-xl { + padding-left: 48px; + } + [dir] .q-pt-xl-xl, [dir] .q-py-xl-xl { + padding-top: 48px; + } + [dir] .q-pb-xl-xl, [dir] .q-py-xl-xl { + padding-bottom: 48px; + } + [dir] .q-ma-xl-xl { + margin: 48px 48px; + } + [dir=ltr] .q-ml-xl-xl, [dir=ltr] .q-mx-xl-xl { + margin-left: 48px; + } + [dir=rtl] .q-ml-xl-xl, [dir=rtl] .q-mx-xl-xl { + margin-right: 48px; + } + [dir=ltr] .q-mr-xl-xl, [dir=ltr] .q-mx-xl-xl { + margin-right: 48px; + } + [dir=rtl] .q-mr-xl-xl, [dir=rtl] .q-mx-xl-xl { + margin-left: 48px; + } + [dir] .q-mt-xl-xl, [dir] .q-my-xl-xl { + margin-top: 48px; + } + [dir] .q-mb-xl-xl, [dir] .q-my-xl-xl { + margin-bottom: 48px; + } + [dir=ltr] .q-ml-xl-auto, [dir=ltr] .q-mx-xl-auto { + margin-left: auto; + } + [dir=rtl] .q-ml-xl-auto, [dir=rtl] .q-mx-xl-auto { + margin-right: auto; + } + [dir=ltr] .q-mr-xl-auto, [dir=ltr] .q-mx-xl-auto { + margin-right: auto; + } + [dir=rtl] .q-mr-xl-auto, [dir=rtl] .q-mx-xl-auto { + margin-left: auto; + } + .row.inline-xl, + .column.inline-xl, + .flex.inline-xl { + display: inline-flex; + } + .row-xl, + .column-xl, + .flex-xl { + display: flex; + flex-wrap: wrap; + } + .row-xl.inline, + .column-xl.inline, + .flex-xl.inline, + .row-xl.inline-xl, + .column-xl.inline-xl, + .flex-xl.inline-xl { + display: inline-flex; + } + .row.reverse-xl { + flex-direction: row-reverse; + } + .row-xl { + flex-direction: row; + } + .row-xl.reverse, + .row-xl.reverse-xl { + flex-direction: row-reverse; + } + .column.reverse-xl { + flex-direction: column-reverse; + } + .column-xl { + flex-direction: column; + } + .column-xl.reverse, + .column-xl.reverse-xl { + flex-direction: column-reverse; + } + .wrap-xl { + flex-wrap: wrap; + } + .no-wrap-xl { + flex-wrap: nowrap; + } + .reverse-wrap-xl { + flex-wrap: wrap-reverse; + } + .order-xl-first { + order: -10000; + } + .order-xl-last { + order: 10000; + } + .order-xl-none { + order: 0; + } + .justify-xl-start { + justify-content: flex-start; + } + .justify-xl-end { + justify-content: flex-end; + } + .justify-xl-center, + .flex-xl-center { + justify-content: center; + } + .justify-xl-between { + justify-content: space-between; + } + .justify-xl-around { + justify-content: space-around; + } + .justify-xl-evenly { + justify-content: space-evenly; + } + .items-xl-start { + align-items: flex-start; + } + .items-xl-end { + align-items: flex-end; + } + .items-xl-center, + .flex-xl-center { + align-items: center; + } + .items-xl-baseline { + align-items: baseline; + } + .items-xl-stretch { + align-items: stretch; + } + .content-xl-start { + align-content: flex-start; + } + .content-xl-end { + align-content: flex-end; + } + .content-xl-center { + align-content: center; + } + .content-xl-between { + align-content: space-between; + } + .content-xl-around { + align-content: space-around; + } + .self-xl-start { + align-self: flex-start; + } + .self-xl-end { + align-self: flex-end; + } + .self-xl-center { + align-self: center; + } + .self-xl-baseline { + align-self: baseline; + } + .self-xl-stretch { + align-self: stretch; + } + [dir=ltr] .q-gutter-xl-x-none, [dir=ltr] .q-gutter-xl-none { + margin-left: 0; + } + [dir=rtl] .q-gutter-xl-x-none, [dir=rtl] .q-gutter-xl-none { + margin-right: 0; + } + [dir=ltr] .q-gutter-xl-x-none > *, [dir=ltr] .q-gutter-xl-none > * { + margin-left: 0; + } + [dir=rtl] .q-gutter-xl-x-none > *, [dir=rtl] .q-gutter-xl-none > * { + margin-right: 0; + } + [dir] .q-gutter-xl-y-none, [dir] .q-gutter-xl-none { + margin-top: 0; + } + [dir] .q-gutter-xl-y-none > *, [dir] .q-gutter-xl-none > * { + margin-top: 0; + } + [dir=ltr] .q-col-gutter-xl-x-none, [dir=ltr] .q-col-gutter-xl-none { + margin-left: 0; + } + [dir=rtl] .q-col-gutter-xl-x-none, [dir=rtl] .q-col-gutter-xl-none { + margin-right: 0; + } + [dir=ltr] .q-col-gutter-xl-x-none > *, [dir=ltr] .q-col-gutter-xl-none > * { + padding-left: 0; + } + [dir=rtl] .q-col-gutter-xl-x-none > *, [dir=rtl] .q-col-gutter-xl-none > * { + padding-right: 0; + } + [dir] .q-col-gutter-xl-y-none, [dir] .q-col-gutter-xl-none { + margin-top: 0; + } + [dir] .q-col-gutter-xl-y-none > *, [dir] .q-col-gutter-xl-none > * { + padding-top: 0; + } + [dir=ltr] .q-gutter-xl-x-xs, [dir=ltr] .q-gutter-xl-xs { + margin-left: -4px; + } + [dir=rtl] .q-gutter-xl-x-xs, [dir=rtl] .q-gutter-xl-xs { + margin-right: -4px; + } + [dir=ltr] .q-gutter-xl-x-xs > *, [dir=ltr] .q-gutter-xl-xs > * { + margin-left: 4px; + } + [dir=rtl] .q-gutter-xl-x-xs > *, [dir=rtl] .q-gutter-xl-xs > * { + margin-right: 4px; + } + [dir] .q-gutter-xl-y-xs, [dir] .q-gutter-xl-xs { + margin-top: -4px; + } + [dir] .q-gutter-xl-y-xs > *, [dir] .q-gutter-xl-xs > * { + margin-top: 4px; + } + [dir=ltr] .q-col-gutter-xl-x-xs, [dir=ltr] .q-col-gutter-xl-xs { + margin-left: -4px; + } + [dir=rtl] .q-col-gutter-xl-x-xs, [dir=rtl] .q-col-gutter-xl-xs { + margin-right: -4px; + } + [dir=ltr] .q-col-gutter-xl-x-xs > *, [dir=ltr] .q-col-gutter-xl-xs > * { + padding-left: 4px; + } + [dir=rtl] .q-col-gutter-xl-x-xs > *, [dir=rtl] .q-col-gutter-xl-xs > * { + padding-right: 4px; + } + [dir] .q-col-gutter-xl-y-xs, [dir] .q-col-gutter-xl-xs { + margin-top: -4px; + } + [dir] .q-col-gutter-xl-y-xs > *, [dir] .q-col-gutter-xl-xs > * { + padding-top: 4px; + } + [dir=ltr] .q-gutter-xl-x-sm, [dir=ltr] .q-gutter-xl-sm { + margin-left: -8px; + } + [dir=rtl] .q-gutter-xl-x-sm, [dir=rtl] .q-gutter-xl-sm { + margin-right: -8px; + } + [dir=ltr] .q-gutter-xl-x-sm > *, [dir=ltr] .q-gutter-xl-sm > * { + margin-left: 8px; + } + [dir=rtl] .q-gutter-xl-x-sm > *, [dir=rtl] .q-gutter-xl-sm > * { + margin-right: 8px; + } + [dir] .q-gutter-xl-y-sm, [dir] .q-gutter-xl-sm { + margin-top: -8px; + } + [dir] .q-gutter-xl-y-sm > *, [dir] .q-gutter-xl-sm > * { + margin-top: 8px; + } + [dir=ltr] .q-col-gutter-xl-x-sm, [dir=ltr] .q-col-gutter-xl-sm { + margin-left: -8px; + } + [dir=rtl] .q-col-gutter-xl-x-sm, [dir=rtl] .q-col-gutter-xl-sm { + margin-right: -8px; + } + [dir=ltr] .q-col-gutter-xl-x-sm > *, [dir=ltr] .q-col-gutter-xl-sm > * { + padding-left: 8px; + } + [dir=rtl] .q-col-gutter-xl-x-sm > *, [dir=rtl] .q-col-gutter-xl-sm > * { + padding-right: 8px; + } + [dir] .q-col-gutter-xl-y-sm, [dir] .q-col-gutter-xl-sm { + margin-top: -8px; + } + [dir] .q-col-gutter-xl-y-sm > *, [dir] .q-col-gutter-xl-sm > * { + padding-top: 8px; + } + [dir=ltr] .q-gutter-xl-x-md, [dir=ltr] .q-gutter-xl-md { + margin-left: -16px; + } + [dir=rtl] .q-gutter-xl-x-md, [dir=rtl] .q-gutter-xl-md { + margin-right: -16px; + } + [dir=ltr] .q-gutter-xl-x-md > *, [dir=ltr] .q-gutter-xl-md > * { + margin-left: 16px; + } + [dir=rtl] .q-gutter-xl-x-md > *, [dir=rtl] .q-gutter-xl-md > * { + margin-right: 16px; + } + [dir] .q-gutter-xl-y-md, [dir] .q-gutter-xl-md { + margin-top: -16px; + } + [dir] .q-gutter-xl-y-md > *, [dir] .q-gutter-xl-md > * { + margin-top: 16px; + } + [dir=ltr] .q-col-gutter-xl-x-md, [dir=ltr] .q-col-gutter-xl-md { + margin-left: -16px; + } + [dir=rtl] .q-col-gutter-xl-x-md, [dir=rtl] .q-col-gutter-xl-md { + margin-right: -16px; + } + [dir=ltr] .q-col-gutter-xl-x-md > *, [dir=ltr] .q-col-gutter-xl-md > * { + padding-left: 16px; + } + [dir=rtl] .q-col-gutter-xl-x-md > *, [dir=rtl] .q-col-gutter-xl-md > * { + padding-right: 16px; + } + [dir] .q-col-gutter-xl-y-md, [dir] .q-col-gutter-xl-md { + margin-top: -16px; + } + [dir] .q-col-gutter-xl-y-md > *, [dir] .q-col-gutter-xl-md > * { + padding-top: 16px; + } + [dir=ltr] .q-gutter-xl-x-lg, [dir=ltr] .q-gutter-xl-lg { + margin-left: -24px; + } + [dir=rtl] .q-gutter-xl-x-lg, [dir=rtl] .q-gutter-xl-lg { + margin-right: -24px; + } + [dir=ltr] .q-gutter-xl-x-lg > *, [dir=ltr] .q-gutter-xl-lg > * { + margin-left: 24px; + } + [dir=rtl] .q-gutter-xl-x-lg > *, [dir=rtl] .q-gutter-xl-lg > * { + margin-right: 24px; + } + [dir] .q-gutter-xl-y-lg, [dir] .q-gutter-xl-lg { + margin-top: -24px; + } + [dir] .q-gutter-xl-y-lg > *, [dir] .q-gutter-xl-lg > * { + margin-top: 24px; + } + [dir=ltr] .q-col-gutter-xl-x-lg, [dir=ltr] .q-col-gutter-xl-lg { + margin-left: -24px; + } + [dir=rtl] .q-col-gutter-xl-x-lg, [dir=rtl] .q-col-gutter-xl-lg { + margin-right: -24px; + } + [dir=ltr] .q-col-gutter-xl-x-lg > *, [dir=ltr] .q-col-gutter-xl-lg > * { + padding-left: 24px; + } + [dir=rtl] .q-col-gutter-xl-x-lg > *, [dir=rtl] .q-col-gutter-xl-lg > * { + padding-right: 24px; + } + [dir] .q-col-gutter-xl-y-lg, [dir] .q-col-gutter-xl-lg { + margin-top: -24px; + } + [dir] .q-col-gutter-xl-y-lg > *, [dir] .q-col-gutter-xl-lg > * { + padding-top: 24px; + } + [dir=ltr] .q-gutter-xl-x-xl, [dir=ltr] .q-gutter-xl-xl { + margin-left: -48px; + } + [dir=rtl] .q-gutter-xl-x-xl, [dir=rtl] .q-gutter-xl-xl { + margin-right: -48px; + } + [dir=ltr] .q-gutter-xl-x-xl > *, [dir=ltr] .q-gutter-xl-xl > * { + margin-left: 48px; + } + [dir=rtl] .q-gutter-xl-x-xl > *, [dir=rtl] .q-gutter-xl-xl > * { + margin-right: 48px; + } + [dir] .q-gutter-xl-y-xl, [dir] .q-gutter-xl-xl { + margin-top: -48px; + } + [dir] .q-gutter-xl-y-xl > *, [dir] .q-gutter-xl-xl > * { + margin-top: 48px; + } + [dir=ltr] .q-col-gutter-xl-x-xl, [dir=ltr] .q-col-gutter-xl-xl { + margin-left: -48px; + } + [dir=rtl] .q-col-gutter-xl-x-xl, [dir=rtl] .q-col-gutter-xl-xl { + margin-right: -48px; + } + [dir=ltr] .q-col-gutter-xl-x-xl > *, [dir=ltr] .q-col-gutter-xl-xl > * { + padding-left: 48px; + } + [dir=rtl] .q-col-gutter-xl-x-xl > *, [dir=rtl] .q-col-gutter-xl-xl > * { + padding-right: 48px; + } + [dir] .q-col-gutter-xl-y-xl, [dir] .q-col-gutter-xl-xl { + margin-top: -48px; + } + [dir] .q-col-gutter-xl-y-xl > *, [dir] .q-col-gutter-xl-xl > * { + padding-top: 48px; + } + .row-xl > .col-0, + .row-xl > .col-xs-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-xl > .offset-0, [dir=ltr] .row-xl > .offset-xs-0 { + margin-left: 0%; + } + [dir=rtl] .row-xl > .offset-0, [dir=rtl] .row-xl > .offset-xs-0 { + margin-right: 0%; + } + .column-xl > .col-0, + .column-xl > .col-xs-0 { + height: 0%; + width: auto; + } + .row-xl > .col-1, + .row-xl > .col-xs-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-xl > .offset-1, [dir=ltr] .row-xl > .offset-xs-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-xl > .offset-1, [dir=rtl] .row-xl > .offset-xs-1 { + margin-right: 8.3333%; + } + .column-xl > .col-1, + .column-xl > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-2, + .row-xl > .col-xs-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-xl > .offset-2, [dir=ltr] .row-xl > .offset-xs-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-xl > .offset-2, [dir=rtl] .row-xl > .offset-xs-2 { + margin-right: 16.6667%; + } + .column-xl > .col-2, + .column-xl > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-3, + .row-xl > .col-xs-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-xl > .offset-3, [dir=ltr] .row-xl > .offset-xs-3 { + margin-left: 25%; + } + [dir=rtl] .row-xl > .offset-3, [dir=rtl] .row-xl > .offset-xs-3 { + margin-right: 25%; + } + .column-xl > .col-3, + .column-xl > .col-xs-3 { + height: 25%; + width: auto; + } + .row-xl > .col-4, + .row-xl > .col-xs-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-xl > .offset-4, [dir=ltr] .row-xl > .offset-xs-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-xl > .offset-4, [dir=rtl] .row-xl > .offset-xs-4 { + margin-right: 33.3333%; + } + .column-xl > .col-4, + .column-xl > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-5, + .row-xl > .col-xs-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-xl > .offset-5, [dir=ltr] .row-xl > .offset-xs-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-xl > .offset-5, [dir=rtl] .row-xl > .offset-xs-5 { + margin-right: 41.6667%; + } + .column-xl > .col-5, + .column-xl > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-6, + .row-xl > .col-xs-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-xl > .offset-6, [dir=ltr] .row-xl > .offset-xs-6 { + margin-left: 50%; + } + [dir=rtl] .row-xl > .offset-6, [dir=rtl] .row-xl > .offset-xs-6 { + margin-right: 50%; + } + .column-xl > .col-6, + .column-xl > .col-xs-6 { + height: 50%; + width: auto; + } + .row-xl > .col-7, + .row-xl > .col-xs-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-xl > .offset-7, [dir=ltr] .row-xl > .offset-xs-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-xl > .offset-7, [dir=rtl] .row-xl > .offset-xs-7 { + margin-right: 58.3333%; + } + .column-xl > .col-7, + .column-xl > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-8, + .row-xl > .col-xs-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-xl > .offset-8, [dir=ltr] .row-xl > .offset-xs-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-xl > .offset-8, [dir=rtl] .row-xl > .offset-xs-8 { + margin-right: 66.6667%; + } + .column-xl > .col-8, + .column-xl > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-9, + .row-xl > .col-xs-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-xl > .offset-9, [dir=ltr] .row-xl > .offset-xs-9 { + margin-left: 75%; + } + [dir=rtl] .row-xl > .offset-9, [dir=rtl] .row-xl > .offset-xs-9 { + margin-right: 75%; + } + .column-xl > .col-9, + .column-xl > .col-xs-9 { + height: 75%; + width: auto; + } + .row-xl > .col-10, + .row-xl > .col-xs-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-xl > .offset-10, [dir=ltr] .row-xl > .offset-xs-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-xl > .offset-10, [dir=rtl] .row-xl > .offset-xs-10 { + margin-right: 83.3333%; + } + .column-xl > .col-10, + .column-xl > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-11, + .row-xl > .col-xs-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-xl > .offset-11, [dir=ltr] .row-xl > .offset-xs-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-xl > .offset-11, [dir=rtl] .row-xl > .offset-xs-11 { + margin-right: 91.6667%; + } + .column-xl > .col-11, + .column-xl > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-12, + .row-xl > .col-xs-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-xl > .offset-12, [dir=ltr] .row-xl > .offset-xs-12 { + margin-left: 100%; + } + [dir=rtl] .row-xl > .offset-12, [dir=rtl] .row-xl > .offset-xs-12 { + margin-right: 100%; + } + .column-xl > .col-12, + .column-xl > .col-xs-12 { + height: 100%; + width: auto; + } + .row-xl > .col-sm-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-xl > .offset-sm-0 { + margin-left: 0%; + } + [dir=rtl] .row-xl > .offset-sm-0 { + margin-right: 0%; + } + .column-xl > .col-sm-0 { + height: 0%; + width: auto; + } + .row-xl > .col-sm-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-xl > .offset-sm-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-xl > .offset-sm-1 { + margin-right: 8.3333%; + } + .column-xl > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-sm-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-xl > .offset-sm-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-xl > .offset-sm-2 { + margin-right: 16.6667%; + } + .column-xl > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-sm-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-xl > .offset-sm-3 { + margin-left: 25%; + } + [dir=rtl] .row-xl > .offset-sm-3 { + margin-right: 25%; + } + .column-xl > .col-sm-3 { + height: 25%; + width: auto; + } + .row-xl > .col-sm-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-xl > .offset-sm-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-xl > .offset-sm-4 { + margin-right: 33.3333%; + } + .column-xl > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-sm-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-xl > .offset-sm-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-xl > .offset-sm-5 { + margin-right: 41.6667%; + } + .column-xl > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-sm-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-xl > .offset-sm-6 { + margin-left: 50%; + } + [dir=rtl] .row-xl > .offset-sm-6 { + margin-right: 50%; + } + .column-xl > .col-sm-6 { + height: 50%; + width: auto; + } + .row-xl > .col-sm-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-xl > .offset-sm-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-xl > .offset-sm-7 { + margin-right: 58.3333%; + } + .column-xl > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-sm-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-xl > .offset-sm-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-xl > .offset-sm-8 { + margin-right: 66.6667%; + } + .column-xl > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-sm-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-xl > .offset-sm-9 { + margin-left: 75%; + } + [dir=rtl] .row-xl > .offset-sm-9 { + margin-right: 75%; + } + .column-xl > .col-sm-9 { + height: 75%; + width: auto; + } + .row-xl > .col-sm-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-xl > .offset-sm-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-xl > .offset-sm-10 { + margin-right: 83.3333%; + } + .column-xl > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-sm-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-xl > .offset-sm-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-xl > .offset-sm-11 { + margin-right: 91.6667%; + } + .column-xl > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-sm-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-xl > .offset-sm-12 { + margin-left: 100%; + } + [dir=rtl] .row-xl > .offset-sm-12 { + margin-right: 100%; + } + .column-xl > .col-sm-12 { + height: 100%; + width: auto; + } + .row-xl > .col-md-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-xl > .offset-md-0 { + margin-left: 0%; + } + [dir=rtl] .row-xl > .offset-md-0 { + margin-right: 0%; + } + .column-xl > .col-md-0 { + height: 0%; + width: auto; + } + .row-xl > .col-md-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-xl > .offset-md-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-xl > .offset-md-1 { + margin-right: 8.3333%; + } + .column-xl > .col-md-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-md-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-xl > .offset-md-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-xl > .offset-md-2 { + margin-right: 16.6667%; + } + .column-xl > .col-md-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-md-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-xl > .offset-md-3 { + margin-left: 25%; + } + [dir=rtl] .row-xl > .offset-md-3 { + margin-right: 25%; + } + .column-xl > .col-md-3 { + height: 25%; + width: auto; + } + .row-xl > .col-md-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-xl > .offset-md-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-xl > .offset-md-4 { + margin-right: 33.3333%; + } + .column-xl > .col-md-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-md-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-xl > .offset-md-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-xl > .offset-md-5 { + margin-right: 41.6667%; + } + .column-xl > .col-md-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-md-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-xl > .offset-md-6 { + margin-left: 50%; + } + [dir=rtl] .row-xl > .offset-md-6 { + margin-right: 50%; + } + .column-xl > .col-md-6 { + height: 50%; + width: auto; + } + .row-xl > .col-md-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-xl > .offset-md-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-xl > .offset-md-7 { + margin-right: 58.3333%; + } + .column-xl > .col-md-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-md-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-xl > .offset-md-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-xl > .offset-md-8 { + margin-right: 66.6667%; + } + .column-xl > .col-md-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-md-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-xl > .offset-md-9 { + margin-left: 75%; + } + [dir=rtl] .row-xl > .offset-md-9 { + margin-right: 75%; + } + .column-xl > .col-md-9 { + height: 75%; + width: auto; + } + .row-xl > .col-md-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-xl > .offset-md-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-xl > .offset-md-10 { + margin-right: 83.3333%; + } + .column-xl > .col-md-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-md-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-xl > .offset-md-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-xl > .offset-md-11 { + margin-right: 91.6667%; + } + .column-xl > .col-md-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-md-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-xl > .offset-md-12 { + margin-left: 100%; + } + [dir=rtl] .row-xl > .offset-md-12 { + margin-right: 100%; + } + .column-xl > .col-md-12 { + height: 100%; + width: auto; + } + .row-xl > .col-lg-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-xl > .offset-lg-0 { + margin-left: 0%; + } + [dir=rtl] .row-xl > .offset-lg-0 { + margin-right: 0%; + } + .column-xl > .col-lg-0 { + height: 0%; + width: auto; + } + .row-xl > .col-lg-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-xl > .offset-lg-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-xl > .offset-lg-1 { + margin-right: 8.3333%; + } + .column-xl > .col-lg-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-lg-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-xl > .offset-lg-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-xl > .offset-lg-2 { + margin-right: 16.6667%; + } + .column-xl > .col-lg-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-lg-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-xl > .offset-lg-3 { + margin-left: 25%; + } + [dir=rtl] .row-xl > .offset-lg-3 { + margin-right: 25%; + } + .column-xl > .col-lg-3 { + height: 25%; + width: auto; + } + .row-xl > .col-lg-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-xl > .offset-lg-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-xl > .offset-lg-4 { + margin-right: 33.3333%; + } + .column-xl > .col-lg-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-lg-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-xl > .offset-lg-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-xl > .offset-lg-5 { + margin-right: 41.6667%; + } + .column-xl > .col-lg-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-lg-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-xl > .offset-lg-6 { + margin-left: 50%; + } + [dir=rtl] .row-xl > .offset-lg-6 { + margin-right: 50%; + } + .column-xl > .col-lg-6 { + height: 50%; + width: auto; + } + .row-xl > .col-lg-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-xl > .offset-lg-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-xl > .offset-lg-7 { + margin-right: 58.3333%; + } + .column-xl > .col-lg-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-lg-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-xl > .offset-lg-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-xl > .offset-lg-8 { + margin-right: 66.6667%; + } + .column-xl > .col-lg-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-lg-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-xl > .offset-lg-9 { + margin-left: 75%; + } + [dir=rtl] .row-xl > .offset-lg-9 { + margin-right: 75%; + } + .column-xl > .col-lg-9 { + height: 75%; + width: auto; + } + .row-xl > .col-lg-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-xl > .offset-lg-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-xl > .offset-lg-10 { + margin-right: 83.3333%; + } + .column-xl > .col-lg-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-lg-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-xl > .offset-lg-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-xl > .offset-lg-11 { + margin-right: 91.6667%; + } + .column-xl > .col-lg-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-lg-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-xl > .offset-lg-12 { + margin-left: 100%; + } + [dir=rtl] .row-xl > .offset-lg-12 { + margin-right: 100%; + } + .column-xl > .col-lg-12 { + height: 100%; + width: auto; + } + .row-xl > .col-xl-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row-xl > .offset-xl-0 { + margin-left: 0%; + } + [dir=rtl] .row-xl > .offset-xl-0 { + margin-right: 0%; + } + .column-xl > .col-xl-0 { + height: 0%; + width: auto; + } + .row-xl > .col-xl-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row-xl > .offset-xl-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row-xl > .offset-xl-1 { + margin-right: 8.3333%; + } + .column-xl > .col-xl-1 { + height: 8.3333%; + width: auto; + } + .row-xl > .col-xl-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row-xl > .offset-xl-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row-xl > .offset-xl-2 { + margin-right: 16.6667%; + } + .column-xl > .col-xl-2 { + height: 16.6667%; + width: auto; + } + .row-xl > .col-xl-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row-xl > .offset-xl-3 { + margin-left: 25%; + } + [dir=rtl] .row-xl > .offset-xl-3 { + margin-right: 25%; + } + .column-xl > .col-xl-3 { + height: 25%; + width: auto; + } + .row-xl > .col-xl-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row-xl > .offset-xl-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row-xl > .offset-xl-4 { + margin-right: 33.3333%; + } + .column-xl > .col-xl-4 { + height: 33.3333%; + width: auto; + } + .row-xl > .col-xl-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row-xl > .offset-xl-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row-xl > .offset-xl-5 { + margin-right: 41.6667%; + } + .column-xl > .col-xl-5 { + height: 41.6667%; + width: auto; + } + .row-xl > .col-xl-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row-xl > .offset-xl-6 { + margin-left: 50%; + } + [dir=rtl] .row-xl > .offset-xl-6 { + margin-right: 50%; + } + .column-xl > .col-xl-6 { + height: 50%; + width: auto; + } + .row-xl > .col-xl-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row-xl > .offset-xl-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row-xl > .offset-xl-7 { + margin-right: 58.3333%; + } + .column-xl > .col-xl-7 { + height: 58.3333%; + width: auto; + } + .row-xl > .col-xl-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row-xl > .offset-xl-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row-xl > .offset-xl-8 { + margin-right: 66.6667%; + } + .column-xl > .col-xl-8 { + height: 66.6667%; + width: auto; + } + .row-xl > .col-xl-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row-xl > .offset-xl-9 { + margin-left: 75%; + } + [dir=rtl] .row-xl > .offset-xl-9 { + margin-right: 75%; + } + .column-xl > .col-xl-9 { + height: 75%; + width: auto; + } + .row-xl > .col-xl-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row-xl > .offset-xl-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row-xl > .offset-xl-10 { + margin-right: 83.3333%; + } + .column-xl > .col-xl-10 { + height: 83.3333%; + width: auto; + } + .row-xl > .col-xl-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row-xl > .offset-xl-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row-xl > .offset-xl-11 { + margin-right: 91.6667%; + } + .column-xl > .col-xl-11 { + height: 91.6667%; + width: auto; + } + .row-xl > .col-xl-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row-xl > .offset-xl-12 { + margin-left: 100%; + } + [dir=rtl] .row-xl > .offset-xl-12 { + margin-right: 100%; + } + .column-xl > .col-xl-12 { + height: 100%; + width: auto; + } +} diff --git a/dist/quasar.addon.rtl.min.css b/dist/quasar.addon.rtl.min.css new file mode 100644 index 00000000000..2bfd8ad4540 --- /dev/null +++ b/dist/quasar.addon.rtl.min.css @@ -0,0 +1 @@ +@media (min-width:0){.flex-block,.flex-xs-block{display:block}.flex-inline,.flex-xs-inline{display:inline-block}[dir] .q-pa-xs-none{padding:0 0}[dir=ltr] .q-pl-xs-none,[dir=ltr] .q-px-xs-none{padding-left:0}[dir=ltr] .q-pr-xs-none,[dir=ltr] .q-px-xs-none,[dir=rtl] .q-pl-xs-none,[dir=rtl] .q-px-xs-none{padding-right:0}[dir=rtl] .q-pr-xs-none,[dir=rtl] .q-px-xs-none{padding-left:0}[dir] .q-pt-xs-none,[dir] .q-py-xs-none{padding-top:0}[dir] .q-pb-xs-none,[dir] .q-py-xs-none{padding-bottom:0}[dir] .q-ma-xs-none{margin:0 0}[dir=ltr] .q-ml-xs-none,[dir=ltr] .q-mx-xs-none{margin-left:0}[dir=ltr] .q-mr-xs-none,[dir=ltr] .q-mx-xs-none,[dir=rtl] .q-ml-xs-none,[dir=rtl] .q-mx-xs-none{margin-right:0}[dir=rtl] .q-mr-xs-none,[dir=rtl] .q-mx-xs-none{margin-left:0}[dir] .q-mt-xs-none,[dir] .q-my-xs-none{margin-top:0}[dir] .q-mb-xs-none,[dir] .q-my-xs-none{margin-bottom:0}[dir] .q-pa-xs-xs{padding:4px 4px}[dir=ltr] .q-pl-xs-xs,[dir=ltr] .q-px-xs-xs{padding-left:4px}[dir=ltr] .q-pr-xs-xs,[dir=ltr] .q-px-xs-xs,[dir=rtl] .q-pl-xs-xs,[dir=rtl] .q-px-xs-xs{padding-right:4px}[dir=rtl] .q-pr-xs-xs,[dir=rtl] .q-px-xs-xs{padding-left:4px}[dir] .q-pt-xs-xs,[dir] .q-py-xs-xs{padding-top:4px}[dir] .q-pb-xs-xs,[dir] .q-py-xs-xs{padding-bottom:4px}[dir] .q-ma-xs-xs{margin:4px 4px}[dir=ltr] .q-ml-xs-xs,[dir=ltr] .q-mx-xs-xs{margin-left:4px}[dir=ltr] .q-mr-xs-xs,[dir=ltr] .q-mx-xs-xs,[dir=rtl] .q-ml-xs-xs,[dir=rtl] .q-mx-xs-xs{margin-right:4px}[dir=rtl] .q-mr-xs-xs,[dir=rtl] .q-mx-xs-xs{margin-left:4px}[dir] .q-mt-xs-xs,[dir] .q-my-xs-xs{margin-top:4px}[dir] .q-mb-xs-xs,[dir] .q-my-xs-xs{margin-bottom:4px}[dir] .q-pa-xs-sm{padding:8px 8px}[dir=ltr] .q-pl-xs-sm,[dir=ltr] .q-px-xs-sm{padding-left:8px}[dir=ltr] .q-pr-xs-sm,[dir=ltr] .q-px-xs-sm,[dir=rtl] .q-pl-xs-sm,[dir=rtl] .q-px-xs-sm{padding-right:8px}[dir=rtl] .q-pr-xs-sm,[dir=rtl] .q-px-xs-sm{padding-left:8px}[dir] .q-pt-xs-sm,[dir] .q-py-xs-sm{padding-top:8px}[dir] .q-pb-xs-sm,[dir] .q-py-xs-sm{padding-bottom:8px}[dir] .q-ma-xs-sm{margin:8px 8px}[dir=ltr] .q-ml-xs-sm,[dir=ltr] .q-mx-xs-sm{margin-left:8px}[dir=ltr] .q-mr-xs-sm,[dir=ltr] .q-mx-xs-sm,[dir=rtl] .q-ml-xs-sm,[dir=rtl] .q-mx-xs-sm{margin-right:8px}[dir=rtl] .q-mr-xs-sm,[dir=rtl] .q-mx-xs-sm{margin-left:8px}[dir] .q-mt-xs-sm,[dir] .q-my-xs-sm{margin-top:8px}[dir] .q-mb-xs-sm,[dir] .q-my-xs-sm{margin-bottom:8px}[dir] .q-pa-xs-md{padding:16px 16px}[dir=ltr] .q-pl-xs-md,[dir=ltr] .q-px-xs-md{padding-left:16px}[dir=ltr] .q-pr-xs-md,[dir=ltr] .q-px-xs-md,[dir=rtl] .q-pl-xs-md,[dir=rtl] .q-px-xs-md{padding-right:16px}[dir=rtl] .q-pr-xs-md,[dir=rtl] .q-px-xs-md{padding-left:16px}[dir] .q-pt-xs-md,[dir] .q-py-xs-md{padding-top:16px}[dir] .q-pb-xs-md,[dir] .q-py-xs-md{padding-bottom:16px}[dir] .q-ma-xs-md{margin:16px 16px}[dir=ltr] .q-ml-xs-md,[dir=ltr] .q-mx-xs-md{margin-left:16px}[dir=ltr] .q-mr-xs-md,[dir=ltr] .q-mx-xs-md,[dir=rtl] .q-ml-xs-md,[dir=rtl] .q-mx-xs-md{margin-right:16px}[dir=rtl] .q-mr-xs-md,[dir=rtl] .q-mx-xs-md{margin-left:16px}[dir] .q-mt-xs-md,[dir] .q-my-xs-md{margin-top:16px}[dir] .q-mb-xs-md,[dir] .q-my-xs-md{margin-bottom:16px}[dir] .q-pa-xs-lg{padding:24px 24px}[dir=ltr] .q-pl-xs-lg,[dir=ltr] .q-px-xs-lg{padding-left:24px}[dir=ltr] .q-pr-xs-lg,[dir=ltr] .q-px-xs-lg,[dir=rtl] .q-pl-xs-lg,[dir=rtl] .q-px-xs-lg{padding-right:24px}[dir=rtl] .q-pr-xs-lg,[dir=rtl] .q-px-xs-lg{padding-left:24px}[dir] .q-pt-xs-lg,[dir] .q-py-xs-lg{padding-top:24px}[dir] .q-pb-xs-lg,[dir] .q-py-xs-lg{padding-bottom:24px}[dir] .q-ma-xs-lg{margin:24px 24px}[dir=ltr] .q-ml-xs-lg,[dir=ltr] .q-mx-xs-lg{margin-left:24px}[dir=ltr] .q-mr-xs-lg,[dir=ltr] .q-mx-xs-lg,[dir=rtl] .q-ml-xs-lg,[dir=rtl] .q-mx-xs-lg{margin-right:24px}[dir=rtl] .q-mr-xs-lg,[dir=rtl] .q-mx-xs-lg{margin-left:24px}[dir] .q-mt-xs-lg,[dir] .q-my-xs-lg{margin-top:24px}[dir] .q-mb-xs-lg,[dir] .q-my-xs-lg{margin-bottom:24px}[dir] .q-pa-xs-xl{padding:48px 48px}[dir=ltr] .q-pl-xs-xl,[dir=ltr] .q-px-xs-xl{padding-left:48px}[dir=ltr] .q-pr-xs-xl,[dir=ltr] .q-px-xs-xl,[dir=rtl] .q-pl-xs-xl,[dir=rtl] .q-px-xs-xl{padding-right:48px}[dir=rtl] .q-pr-xs-xl,[dir=rtl] .q-px-xs-xl{padding-left:48px}[dir] .q-pt-xs-xl,[dir] .q-py-xs-xl{padding-top:48px}[dir] .q-pb-xs-xl,[dir] .q-py-xs-xl{padding-bottom:48px}[dir] .q-ma-xs-xl{margin:48px 48px}[dir=ltr] .q-ml-xs-xl,[dir=ltr] .q-mx-xs-xl{margin-left:48px}[dir=ltr] .q-mr-xs-xl,[dir=ltr] .q-mx-xs-xl,[dir=rtl] .q-ml-xs-xl,[dir=rtl] .q-mx-xs-xl{margin-right:48px}[dir=rtl] .q-mr-xs-xl,[dir=rtl] .q-mx-xs-xl{margin-left:48px}[dir] .q-mt-xs-xl,[dir] .q-my-xs-xl{margin-top:48px}[dir] .q-mb-xs-xl,[dir] .q-my-xs-xl{margin-bottom:48px}[dir=ltr] .q-ml-xs-auto,[dir=ltr] .q-mx-xs-auto{margin-left:auto}[dir=ltr] .q-mr-xs-auto,[dir=ltr] .q-mx-xs-auto,[dir=rtl] .q-ml-xs-auto,[dir=rtl] .q-mx-xs-auto{margin-right:auto}[dir=rtl] .q-mr-xs-auto,[dir=rtl] .q-mx-xs-auto{margin-left:auto}.column-xs,.flex-xs,.row-xs{display:flex;flex-wrap:wrap}.column-xs.inline-xs,.flex-xs.inline-xs,.row-xs.inline-xs{display:inline-flex}.row-xs{flex-direction:row}.row-xs.reverse-xs{flex-direction:row-reverse}.column-xs{flex-direction:column}.column-xs.reverse-xs{flex-direction:column-reverse}.wrap-xs{flex-wrap:wrap}.no-wrap-xs{flex-wrap:nowrap}.reverse-wrap-xs{flex-wrap:wrap-reverse}.order-xs-first{order:-10000}.order-xs-last{order:10000}.order-xs-none{order:0}.justify-xs-start{justify-content:flex-start}.justify-xs-end{justify-content:flex-end}.flex-xs-center,.justify-xs-center{justify-content:center}.justify-xs-between{justify-content:space-between}.justify-xs-around{justify-content:space-around}.justify-xs-evenly{justify-content:space-evenly}.items-xs-start{align-items:flex-start}.items-xs-end{align-items:flex-end}.flex-xs-center,.items-xs-center{align-items:center}.items-xs-baseline{align-items:baseline}.items-xs-stretch{align-items:stretch}.content-xs-start{align-content:flex-start}.content-xs-end{align-content:flex-end}.content-xs-center{align-content:center}.content-xs-between{align-content:space-between}.content-xs-around{align-content:space-around}.self-xs-start{align-self:flex-start}.self-xs-end{align-self:flex-end}.self-xs-center{align-self:center}.self-xs-baseline{align-self:baseline}.self-xs-stretch{align-self:stretch}[dir=ltr] .q-gutter-xs-none,[dir=ltr] .q-gutter-xs-x-none{margin-left:0}[dir=rtl] .q-gutter-xs-none,[dir=rtl] .q-gutter-xs-x-none{margin-right:0}[dir=ltr] .q-gutter-xs-none>*,[dir=ltr] .q-gutter-xs-x-none>*{margin-left:0}[dir=rtl] .q-gutter-xs-none>*,[dir=rtl] .q-gutter-xs-x-none>*{margin-right:0}[dir] .q-gutter-xs-none,[dir] .q-gutter-xs-none>*,[dir] .q-gutter-xs-y-none,[dir] .q-gutter-xs-y-none>*{margin-top:0}[dir=ltr] .q-col-gutter-xs-none,[dir=ltr] .q-col-gutter-xs-x-none{margin-left:0}[dir=rtl] .q-col-gutter-xs-none,[dir=rtl] .q-col-gutter-xs-x-none{margin-right:0}[dir=ltr] .q-col-gutter-xs-none>*,[dir=ltr] .q-col-gutter-xs-x-none>*{padding-left:0}[dir=rtl] .q-col-gutter-xs-none>*,[dir=rtl] .q-col-gutter-xs-x-none>*{padding-right:0}[dir] .q-col-gutter-xs-none,[dir] .q-col-gutter-xs-y-none{margin-top:0}[dir] .q-col-gutter-xs-none>*,[dir] .q-col-gutter-xs-y-none>*{padding-top:0}[dir=ltr] .q-gutter-xs-x-xs,[dir=ltr] .q-gutter-xs-xs{margin-left:-4px}[dir=rtl] .q-gutter-xs-x-xs,[dir=rtl] .q-gutter-xs-xs{margin-right:-4px}[dir=ltr] .q-gutter-xs-x-xs>*,[dir=ltr] .q-gutter-xs-xs>*{margin-left:4px}[dir=rtl] .q-gutter-xs-x-xs>*,[dir=rtl] .q-gutter-xs-xs>*{margin-right:4px}[dir] .q-gutter-xs-xs,[dir] .q-gutter-xs-y-xs{margin-top:-4px}[dir] .q-gutter-xs-xs>*,[dir] .q-gutter-xs-y-xs>*{margin-top:4px}[dir=ltr] .q-col-gutter-xs-x-xs,[dir=ltr] .q-col-gutter-xs-xs{margin-left:-4px}[dir=rtl] .q-col-gutter-xs-x-xs,[dir=rtl] .q-col-gutter-xs-xs{margin-right:-4px}[dir=ltr] .q-col-gutter-xs-x-xs>*,[dir=ltr] .q-col-gutter-xs-xs>*{padding-left:4px}[dir=rtl] .q-col-gutter-xs-x-xs>*,[dir=rtl] .q-col-gutter-xs-xs>*{padding-right:4px}[dir] .q-col-gutter-xs-xs,[dir] .q-col-gutter-xs-y-xs{margin-top:-4px}[dir] .q-col-gutter-xs-xs>*,[dir] .q-col-gutter-xs-y-xs>*{padding-top:4px}[dir=ltr] .q-gutter-xs-sm,[dir=ltr] .q-gutter-xs-x-sm{margin-left:-8px}[dir=rtl] .q-gutter-xs-sm,[dir=rtl] .q-gutter-xs-x-sm{margin-right:-8px}[dir=ltr] .q-gutter-xs-sm>*,[dir=ltr] .q-gutter-xs-x-sm>*{margin-left:8px}[dir=rtl] .q-gutter-xs-sm>*,[dir=rtl] .q-gutter-xs-x-sm>*{margin-right:8px}[dir] .q-gutter-xs-sm,[dir] .q-gutter-xs-y-sm{margin-top:-8px}[dir] .q-gutter-xs-sm>*,[dir] .q-gutter-xs-y-sm>*{margin-top:8px}[dir=ltr] .q-col-gutter-xs-sm,[dir=ltr] .q-col-gutter-xs-x-sm{margin-left:-8px}[dir=rtl] .q-col-gutter-xs-sm,[dir=rtl] .q-col-gutter-xs-x-sm{margin-right:-8px}[dir=ltr] .q-col-gutter-xs-sm>*,[dir=ltr] .q-col-gutter-xs-x-sm>*{padding-left:8px}[dir=rtl] .q-col-gutter-xs-sm>*,[dir=rtl] .q-col-gutter-xs-x-sm>*{padding-right:8px}[dir] .q-col-gutter-xs-sm,[dir] .q-col-gutter-xs-y-sm{margin-top:-8px}[dir] .q-col-gutter-xs-sm>*,[dir] .q-col-gutter-xs-y-sm>*{padding-top:8px}[dir=ltr] .q-gutter-xs-md,[dir=ltr] .q-gutter-xs-x-md{margin-left:-16px}[dir=rtl] .q-gutter-xs-md,[dir=rtl] .q-gutter-xs-x-md{margin-right:-16px}[dir=ltr] .q-gutter-xs-md>*,[dir=ltr] .q-gutter-xs-x-md>*{margin-left:16px}[dir=rtl] .q-gutter-xs-md>*,[dir=rtl] .q-gutter-xs-x-md>*{margin-right:16px}[dir] .q-gutter-xs-md,[dir] .q-gutter-xs-y-md{margin-top:-16px}[dir] .q-gutter-xs-md>*,[dir] .q-gutter-xs-y-md>*{margin-top:16px}[dir=ltr] .q-col-gutter-xs-md,[dir=ltr] .q-col-gutter-xs-x-md{margin-left:-16px}[dir=rtl] .q-col-gutter-xs-md,[dir=rtl] .q-col-gutter-xs-x-md{margin-right:-16px}[dir=ltr] .q-col-gutter-xs-md>*,[dir=ltr] .q-col-gutter-xs-x-md>*{padding-left:16px}[dir=rtl] .q-col-gutter-xs-md>*,[dir=rtl] .q-col-gutter-xs-x-md>*{padding-right:16px}[dir] .q-col-gutter-xs-md,[dir] .q-col-gutter-xs-y-md{margin-top:-16px}[dir] .q-col-gutter-xs-md>*,[dir] .q-col-gutter-xs-y-md>*{padding-top:16px}[dir=ltr] .q-gutter-xs-lg,[dir=ltr] .q-gutter-xs-x-lg{margin-left:-24px}[dir=rtl] .q-gutter-xs-lg,[dir=rtl] .q-gutter-xs-x-lg{margin-right:-24px}[dir=ltr] .q-gutter-xs-lg>*,[dir=ltr] .q-gutter-xs-x-lg>*{margin-left:24px}[dir=rtl] .q-gutter-xs-lg>*,[dir=rtl] .q-gutter-xs-x-lg>*{margin-right:24px}[dir] .q-gutter-xs-lg,[dir] .q-gutter-xs-y-lg{margin-top:-24px}[dir] .q-gutter-xs-lg>*,[dir] .q-gutter-xs-y-lg>*{margin-top:24px}[dir=ltr] .q-col-gutter-xs-lg,[dir=ltr] .q-col-gutter-xs-x-lg{margin-left:-24px}[dir=rtl] .q-col-gutter-xs-lg,[dir=rtl] .q-col-gutter-xs-x-lg{margin-right:-24px}[dir=ltr] .q-col-gutter-xs-lg>*,[dir=ltr] .q-col-gutter-xs-x-lg>*{padding-left:24px}[dir=rtl] .q-col-gutter-xs-lg>*,[dir=rtl] .q-col-gutter-xs-x-lg>*{padding-right:24px}[dir] .q-col-gutter-xs-lg,[dir] .q-col-gutter-xs-y-lg{margin-top:-24px}[dir] .q-col-gutter-xs-lg>*,[dir] .q-col-gutter-xs-y-lg>*{padding-top:24px}[dir=ltr] .q-gutter-xs-x-xl,[dir=ltr] .q-gutter-xs-xl{margin-left:-48px}[dir=rtl] .q-gutter-xs-x-xl,[dir=rtl] .q-gutter-xs-xl{margin-right:-48px}[dir=ltr] .q-gutter-xs-x-xl>*,[dir=ltr] .q-gutter-xs-xl>*{margin-left:48px}[dir=rtl] .q-gutter-xs-x-xl>*,[dir=rtl] .q-gutter-xs-xl>*{margin-right:48px}[dir] .q-gutter-xs-xl,[dir] .q-gutter-xs-y-xl{margin-top:-48px}[dir] .q-gutter-xs-xl>*,[dir] .q-gutter-xs-y-xl>*{margin-top:48px}[dir=ltr] .q-col-gutter-xs-x-xl,[dir=ltr] .q-col-gutter-xs-xl{margin-left:-48px}[dir=rtl] .q-col-gutter-xs-x-xl,[dir=rtl] .q-col-gutter-xs-xl{margin-right:-48px}[dir=ltr] .q-col-gutter-xs-x-xl>*,[dir=ltr] .q-col-gutter-xs-xl>*{padding-left:48px}[dir=rtl] .q-col-gutter-xs-x-xl>*,[dir=rtl] .q-col-gutter-xs-xl>*{padding-right:48px}[dir] .q-col-gutter-xs-xl,[dir] .q-col-gutter-xs-y-xl{margin-top:-48px}[dir] .q-col-gutter-xs-xl>*,[dir] .q-col-gutter-xs-y-xl>*{padding-top:48px}.row-xs>.col-0,.row-xs>.col-xs-0{height:auto;width:0%}[dir=ltr] .row-xs>.offset-0,[dir=ltr] .row-xs>.offset-xs-0{margin-left:0%}[dir=rtl] .row-xs>.offset-0,[dir=rtl] .row-xs>.offset-xs-0{margin-right:0%}.column-xs>.col-0,.column-xs>.col-xs-0{height:0%;width:auto}.row-xs>.col-1,.row-xs>.col-xs-1{height:auto;width:8.3333%}[dir=ltr] .row-xs>.offset-1,[dir=ltr] .row-xs>.offset-xs-1{margin-left:8.3333%}[dir=rtl] .row-xs>.offset-1,[dir=rtl] .row-xs>.offset-xs-1{margin-right:8.3333%}.column-xs>.col-1,.column-xs>.col-xs-1{height:8.3333%;width:auto}.row-xs>.col-2,.row-xs>.col-xs-2{height:auto;width:16.6667%}[dir=ltr] .row-xs>.offset-2,[dir=ltr] .row-xs>.offset-xs-2{margin-left:16.6667%}[dir=rtl] .row-xs>.offset-2,[dir=rtl] .row-xs>.offset-xs-2{margin-right:16.6667%}.column-xs>.col-2,.column-xs>.col-xs-2{height:16.6667%;width:auto}.row-xs>.col-3,.row-xs>.col-xs-3{height:auto;width:25%}[dir=ltr] .row-xs>.offset-3,[dir=ltr] .row-xs>.offset-xs-3{margin-left:25%}[dir=rtl] .row-xs>.offset-3,[dir=rtl] .row-xs>.offset-xs-3{margin-right:25%}.column-xs>.col-3,.column-xs>.col-xs-3{height:25%;width:auto}.row-xs>.col-4,.row-xs>.col-xs-4{height:auto;width:33.3333%}[dir=ltr] .row-xs>.offset-4,[dir=ltr] .row-xs>.offset-xs-4{margin-left:33.3333%}[dir=rtl] .row-xs>.offset-4,[dir=rtl] .row-xs>.offset-xs-4{margin-right:33.3333%}.column-xs>.col-4,.column-xs>.col-xs-4{height:33.3333%;width:auto}.row-xs>.col-5,.row-xs>.col-xs-5{height:auto;width:41.6667%}[dir=ltr] .row-xs>.offset-5,[dir=ltr] .row-xs>.offset-xs-5{margin-left:41.6667%}[dir=rtl] .row-xs>.offset-5,[dir=rtl] .row-xs>.offset-xs-5{margin-right:41.6667%}.column-xs>.col-5,.column-xs>.col-xs-5{height:41.6667%;width:auto}.row-xs>.col-6,.row-xs>.col-xs-6{height:auto;width:50%}[dir=ltr] .row-xs>.offset-6,[dir=ltr] .row-xs>.offset-xs-6{margin-left:50%}[dir=rtl] .row-xs>.offset-6,[dir=rtl] .row-xs>.offset-xs-6{margin-right:50%}.column-xs>.col-6,.column-xs>.col-xs-6{height:50%;width:auto}.row-xs>.col-7,.row-xs>.col-xs-7{height:auto;width:58.3333%}[dir=ltr] .row-xs>.offset-7,[dir=ltr] .row-xs>.offset-xs-7{margin-left:58.3333%}[dir=rtl] .row-xs>.offset-7,[dir=rtl] .row-xs>.offset-xs-7{margin-right:58.3333%}.column-xs>.col-7,.column-xs>.col-xs-7{height:58.3333%;width:auto}.row-xs>.col-8,.row-xs>.col-xs-8{height:auto;width:66.6667%}[dir=ltr] .row-xs>.offset-8,[dir=ltr] .row-xs>.offset-xs-8{margin-left:66.6667%}[dir=rtl] .row-xs>.offset-8,[dir=rtl] .row-xs>.offset-xs-8{margin-right:66.6667%}.column-xs>.col-8,.column-xs>.col-xs-8{height:66.6667%;width:auto}.row-xs>.col-9,.row-xs>.col-xs-9{height:auto;width:75%}[dir=ltr] .row-xs>.offset-9,[dir=ltr] .row-xs>.offset-xs-9{margin-left:75%}[dir=rtl] .row-xs>.offset-9,[dir=rtl] .row-xs>.offset-xs-9{margin-right:75%}.column-xs>.col-9,.column-xs>.col-xs-9{height:75%;width:auto}.row-xs>.col-10,.row-xs>.col-xs-10{height:auto;width:83.3333%}[dir=ltr] .row-xs>.offset-10,[dir=ltr] .row-xs>.offset-xs-10{margin-left:83.3333%}[dir=rtl] .row-xs>.offset-10,[dir=rtl] .row-xs>.offset-xs-10{margin-right:83.3333%}.column-xs>.col-10,.column-xs>.col-xs-10{height:83.3333%;width:auto}.row-xs>.col-11,.row-xs>.col-xs-11{height:auto;width:91.6667%}[dir=ltr] .row-xs>.offset-11,[dir=ltr] .row-xs>.offset-xs-11{margin-left:91.6667%}[dir=rtl] .row-xs>.offset-11,[dir=rtl] .row-xs>.offset-xs-11{margin-right:91.6667%}.column-xs>.col-11,.column-xs>.col-xs-11{height:91.6667%;width:auto}.row-xs>.col-12,.row-xs>.col-xs-12{height:auto;width:100%}[dir=ltr] .row-xs>.offset-12,[dir=ltr] .row-xs>.offset-xs-12{margin-left:100%}[dir=rtl] .row-xs>.offset-12,[dir=rtl] .row-xs>.offset-xs-12{margin-right:100%}.column-xs>.col-12,.column-xs>.col-xs-12{height:100%;width:auto}}@media (min-width:600px){.flex-sm-block{display:block}.flex-sm-inline{display:inline-block}[dir] .q-pa-sm-none{padding:0 0}[dir=ltr] .q-pl-sm-none,[dir=ltr] .q-px-sm-none{padding-left:0}[dir=ltr] .q-pr-sm-none,[dir=ltr] .q-px-sm-none,[dir=rtl] .q-pl-sm-none,[dir=rtl] .q-px-sm-none{padding-right:0}[dir=rtl] .q-pr-sm-none,[dir=rtl] .q-px-sm-none{padding-left:0}[dir] .q-pt-sm-none,[dir] .q-py-sm-none{padding-top:0}[dir] .q-pb-sm-none,[dir] .q-py-sm-none{padding-bottom:0}[dir] .q-ma-sm-none{margin:0 0}[dir=ltr] .q-ml-sm-none,[dir=ltr] .q-mx-sm-none{margin-left:0}[dir=ltr] .q-mr-sm-none,[dir=ltr] .q-mx-sm-none,[dir=rtl] .q-ml-sm-none,[dir=rtl] .q-mx-sm-none{margin-right:0}[dir=rtl] .q-mr-sm-none,[dir=rtl] .q-mx-sm-none{margin-left:0}[dir] .q-mt-sm-none,[dir] .q-my-sm-none{margin-top:0}[dir] .q-mb-sm-none,[dir] .q-my-sm-none{margin-bottom:0}[dir] .q-pa-sm-xs{padding:4px 4px}[dir=ltr] .q-pl-sm-xs,[dir=ltr] .q-px-sm-xs{padding-left:4px}[dir=ltr] .q-pr-sm-xs,[dir=ltr] .q-px-sm-xs,[dir=rtl] .q-pl-sm-xs,[dir=rtl] .q-px-sm-xs{padding-right:4px}[dir=rtl] .q-pr-sm-xs,[dir=rtl] .q-px-sm-xs{padding-left:4px}[dir] .q-pt-sm-xs,[dir] .q-py-sm-xs{padding-top:4px}[dir] .q-pb-sm-xs,[dir] .q-py-sm-xs{padding-bottom:4px}[dir] .q-ma-sm-xs{margin:4px 4px}[dir=ltr] .q-ml-sm-xs,[dir=ltr] .q-mx-sm-xs{margin-left:4px}[dir=ltr] .q-mr-sm-xs,[dir=ltr] .q-mx-sm-xs,[dir=rtl] .q-ml-sm-xs,[dir=rtl] .q-mx-sm-xs{margin-right:4px}[dir=rtl] .q-mr-sm-xs,[dir=rtl] .q-mx-sm-xs{margin-left:4px}[dir] .q-mt-sm-xs,[dir] .q-my-sm-xs{margin-top:4px}[dir] .q-mb-sm-xs,[dir] .q-my-sm-xs{margin-bottom:4px}[dir] .q-pa-sm-sm{padding:8px 8px}[dir=ltr] .q-pl-sm-sm,[dir=ltr] .q-px-sm-sm{padding-left:8px}[dir=ltr] .q-pr-sm-sm,[dir=ltr] .q-px-sm-sm,[dir=rtl] .q-pl-sm-sm,[dir=rtl] .q-px-sm-sm{padding-right:8px}[dir=rtl] .q-pr-sm-sm,[dir=rtl] .q-px-sm-sm{padding-left:8px}[dir] .q-pt-sm-sm,[dir] .q-py-sm-sm{padding-top:8px}[dir] .q-pb-sm-sm,[dir] .q-py-sm-sm{padding-bottom:8px}[dir] .q-ma-sm-sm{margin:8px 8px}[dir=ltr] .q-ml-sm-sm,[dir=ltr] .q-mx-sm-sm{margin-left:8px}[dir=ltr] .q-mr-sm-sm,[dir=ltr] .q-mx-sm-sm,[dir=rtl] .q-ml-sm-sm,[dir=rtl] .q-mx-sm-sm{margin-right:8px}[dir=rtl] .q-mr-sm-sm,[dir=rtl] .q-mx-sm-sm{margin-left:8px}[dir] .q-mt-sm-sm,[dir] .q-my-sm-sm{margin-top:8px}[dir] .q-mb-sm-sm,[dir] .q-my-sm-sm{margin-bottom:8px}[dir] .q-pa-sm-md{padding:16px 16px}[dir=ltr] .q-pl-sm-md,[dir=ltr] .q-px-sm-md{padding-left:16px}[dir=ltr] .q-pr-sm-md,[dir=ltr] .q-px-sm-md,[dir=rtl] .q-pl-sm-md,[dir=rtl] .q-px-sm-md{padding-right:16px}[dir=rtl] .q-pr-sm-md,[dir=rtl] .q-px-sm-md{padding-left:16px}[dir] .q-pt-sm-md,[dir] .q-py-sm-md{padding-top:16px}[dir] .q-pb-sm-md,[dir] .q-py-sm-md{padding-bottom:16px}[dir] .q-ma-sm-md{margin:16px 16px}[dir=ltr] .q-ml-sm-md,[dir=ltr] .q-mx-sm-md{margin-left:16px}[dir=ltr] .q-mr-sm-md,[dir=ltr] .q-mx-sm-md,[dir=rtl] .q-ml-sm-md,[dir=rtl] .q-mx-sm-md{margin-right:16px}[dir=rtl] .q-mr-sm-md,[dir=rtl] .q-mx-sm-md{margin-left:16px}[dir] .q-mt-sm-md,[dir] .q-my-sm-md{margin-top:16px}[dir] .q-mb-sm-md,[dir] .q-my-sm-md{margin-bottom:16px}[dir] .q-pa-sm-lg{padding:24px 24px}[dir=ltr] .q-pl-sm-lg,[dir=ltr] .q-px-sm-lg{padding-left:24px}[dir=ltr] .q-pr-sm-lg,[dir=ltr] .q-px-sm-lg,[dir=rtl] .q-pl-sm-lg,[dir=rtl] .q-px-sm-lg{padding-right:24px}[dir=rtl] .q-pr-sm-lg,[dir=rtl] .q-px-sm-lg{padding-left:24px}[dir] .q-pt-sm-lg,[dir] .q-py-sm-lg{padding-top:24px}[dir] .q-pb-sm-lg,[dir] .q-py-sm-lg{padding-bottom:24px}[dir] .q-ma-sm-lg{margin:24px 24px}[dir=ltr] .q-ml-sm-lg,[dir=ltr] .q-mx-sm-lg{margin-left:24px}[dir=ltr] .q-mr-sm-lg,[dir=ltr] .q-mx-sm-lg,[dir=rtl] .q-ml-sm-lg,[dir=rtl] .q-mx-sm-lg{margin-right:24px}[dir=rtl] .q-mr-sm-lg,[dir=rtl] .q-mx-sm-lg{margin-left:24px}[dir] .q-mt-sm-lg,[dir] .q-my-sm-lg{margin-top:24px}[dir] .q-mb-sm-lg,[dir] .q-my-sm-lg{margin-bottom:24px}[dir] .q-pa-sm-xl{padding:48px 48px}[dir=ltr] .q-pl-sm-xl,[dir=ltr] .q-px-sm-xl{padding-left:48px}[dir=ltr] .q-pr-sm-xl,[dir=ltr] .q-px-sm-xl,[dir=rtl] .q-pl-sm-xl,[dir=rtl] .q-px-sm-xl{padding-right:48px}[dir=rtl] .q-pr-sm-xl,[dir=rtl] .q-px-sm-xl{padding-left:48px}[dir] .q-pt-sm-xl,[dir] .q-py-sm-xl{padding-top:48px}[dir] .q-pb-sm-xl,[dir] .q-py-sm-xl{padding-bottom:48px}[dir] .q-ma-sm-xl{margin:48px 48px}[dir=ltr] .q-ml-sm-xl,[dir=ltr] .q-mx-sm-xl{margin-left:48px}[dir=ltr] .q-mr-sm-xl,[dir=ltr] .q-mx-sm-xl,[dir=rtl] .q-ml-sm-xl,[dir=rtl] .q-mx-sm-xl{margin-right:48px}[dir=rtl] .q-mr-sm-xl,[dir=rtl] .q-mx-sm-xl{margin-left:48px}[dir] .q-mt-sm-xl,[dir] .q-my-sm-xl{margin-top:48px}[dir] .q-mb-sm-xl,[dir] .q-my-sm-xl{margin-bottom:48px}[dir=ltr] .q-ml-sm-auto,[dir=ltr] .q-mx-sm-auto{margin-left:auto}[dir=ltr] .q-mr-sm-auto,[dir=ltr] .q-mx-sm-auto,[dir=rtl] .q-ml-sm-auto,[dir=rtl] .q-mx-sm-auto{margin-right:auto}[dir=rtl] .q-mr-sm-auto,[dir=rtl] .q-mx-sm-auto{margin-left:auto}.column.inline-sm,.flex.inline-sm,.row.inline-sm{display:inline-flex}.column-sm,.flex-sm,.row-sm{display:flex;flex-wrap:wrap}.column-sm.inline,.column-sm.inline-sm,.flex-sm.inline,.flex-sm.inline-sm,.row-sm.inline,.row-sm.inline-sm{display:inline-flex}.row.reverse-sm{flex-direction:row-reverse}.row-sm{flex-direction:row}.row-sm.reverse,.row-sm.reverse-sm{flex-direction:row-reverse}.column.reverse-sm{flex-direction:column-reverse}.column-sm{flex-direction:column}.column-sm.reverse,.column-sm.reverse-sm{flex-direction:column-reverse}.wrap-sm{flex-wrap:wrap}.no-wrap-sm{flex-wrap:nowrap}.reverse-wrap-sm{flex-wrap:wrap-reverse}.order-sm-first{order:-10000}.order-sm-last{order:10000}.order-sm-none{order:0}.justify-sm-start{justify-content:flex-start}.justify-sm-end{justify-content:flex-end}.flex-sm-center,.justify-sm-center{justify-content:center}.justify-sm-between{justify-content:space-between}.justify-sm-around{justify-content:space-around}.justify-sm-evenly{justify-content:space-evenly}.items-sm-start{align-items:flex-start}.items-sm-end{align-items:flex-end}.flex-sm-center,.items-sm-center{align-items:center}.items-sm-baseline{align-items:baseline}.items-sm-stretch{align-items:stretch}.content-sm-start{align-content:flex-start}.content-sm-end{align-content:flex-end}.content-sm-center{align-content:center}.content-sm-between{align-content:space-between}.content-sm-around{align-content:space-around}.self-sm-start{align-self:flex-start}.self-sm-end{align-self:flex-end}.self-sm-center{align-self:center}.self-sm-baseline{align-self:baseline}.self-sm-stretch{align-self:stretch}[dir=ltr] .q-gutter-sm-none,[dir=ltr] .q-gutter-sm-x-none{margin-left:0}[dir=rtl] .q-gutter-sm-none,[dir=rtl] .q-gutter-sm-x-none{margin-right:0}[dir=ltr] .q-gutter-sm-none>*,[dir=ltr] .q-gutter-sm-x-none>*{margin-left:0}[dir=rtl] .q-gutter-sm-none>*,[dir=rtl] .q-gutter-sm-x-none>*{margin-right:0}[dir] .q-gutter-sm-none,[dir] .q-gutter-sm-none>*,[dir] .q-gutter-sm-y-none,[dir] .q-gutter-sm-y-none>*{margin-top:0}[dir=ltr] .q-col-gutter-sm-none,[dir=ltr] .q-col-gutter-sm-x-none{margin-left:0}[dir=rtl] .q-col-gutter-sm-none,[dir=rtl] .q-col-gutter-sm-x-none{margin-right:0}[dir=ltr] .q-col-gutter-sm-none>*,[dir=ltr] .q-col-gutter-sm-x-none>*{padding-left:0}[dir=rtl] .q-col-gutter-sm-none>*,[dir=rtl] .q-col-gutter-sm-x-none>*{padding-right:0}[dir] .q-col-gutter-sm-none,[dir] .q-col-gutter-sm-y-none{margin-top:0}[dir] .q-col-gutter-sm-none>*,[dir] .q-col-gutter-sm-y-none>*{padding-top:0}[dir=ltr] .q-gutter-sm-x-xs,[dir=ltr] .q-gutter-sm-xs{margin-left:-4px}[dir=rtl] .q-gutter-sm-x-xs,[dir=rtl] .q-gutter-sm-xs{margin-right:-4px}[dir=ltr] .q-gutter-sm-x-xs>*,[dir=ltr] .q-gutter-sm-xs>*{margin-left:4px}[dir=rtl] .q-gutter-sm-x-xs>*,[dir=rtl] .q-gutter-sm-xs>*{margin-right:4px}[dir] .q-gutter-sm-xs,[dir] .q-gutter-sm-y-xs{margin-top:-4px}[dir] .q-gutter-sm-xs>*,[dir] .q-gutter-sm-y-xs>*{margin-top:4px}[dir=ltr] .q-col-gutter-sm-x-xs,[dir=ltr] .q-col-gutter-sm-xs{margin-left:-4px}[dir=rtl] .q-col-gutter-sm-x-xs,[dir=rtl] .q-col-gutter-sm-xs{margin-right:-4px}[dir=ltr] .q-col-gutter-sm-x-xs>*,[dir=ltr] .q-col-gutter-sm-xs>*{padding-left:4px}[dir=rtl] .q-col-gutter-sm-x-xs>*,[dir=rtl] .q-col-gutter-sm-xs>*{padding-right:4px}[dir] .q-col-gutter-sm-xs,[dir] .q-col-gutter-sm-y-xs{margin-top:-4px}[dir] .q-col-gutter-sm-xs>*,[dir] .q-col-gutter-sm-y-xs>*{padding-top:4px}[dir=ltr] .q-gutter-sm-sm,[dir=ltr] .q-gutter-sm-x-sm{margin-left:-8px}[dir=rtl] .q-gutter-sm-sm,[dir=rtl] .q-gutter-sm-x-sm{margin-right:-8px}[dir=ltr] .q-gutter-sm-sm>*,[dir=ltr] .q-gutter-sm-x-sm>*{margin-left:8px}[dir=rtl] .q-gutter-sm-sm>*,[dir=rtl] .q-gutter-sm-x-sm>*{margin-right:8px}[dir] .q-gutter-sm-sm,[dir] .q-gutter-sm-y-sm{margin-top:-8px}[dir] .q-gutter-sm-sm>*,[dir] .q-gutter-sm-y-sm>*{margin-top:8px}[dir=ltr] .q-col-gutter-sm-sm,[dir=ltr] .q-col-gutter-sm-x-sm{margin-left:-8px}[dir=rtl] .q-col-gutter-sm-sm,[dir=rtl] .q-col-gutter-sm-x-sm{margin-right:-8px}[dir=ltr] .q-col-gutter-sm-sm>*,[dir=ltr] .q-col-gutter-sm-x-sm>*{padding-left:8px}[dir=rtl] .q-col-gutter-sm-sm>*,[dir=rtl] .q-col-gutter-sm-x-sm>*{padding-right:8px}[dir] .q-col-gutter-sm-sm,[dir] .q-col-gutter-sm-y-sm{margin-top:-8px}[dir] .q-col-gutter-sm-sm>*,[dir] .q-col-gutter-sm-y-sm>*{padding-top:8px}[dir=ltr] .q-gutter-sm-md,[dir=ltr] .q-gutter-sm-x-md{margin-left:-16px}[dir=rtl] .q-gutter-sm-md,[dir=rtl] .q-gutter-sm-x-md{margin-right:-16px}[dir=ltr] .q-gutter-sm-md>*,[dir=ltr] .q-gutter-sm-x-md>*{margin-left:16px}[dir=rtl] .q-gutter-sm-md>*,[dir=rtl] .q-gutter-sm-x-md>*{margin-right:16px}[dir] .q-gutter-sm-md,[dir] .q-gutter-sm-y-md{margin-top:-16px}[dir] .q-gutter-sm-md>*,[dir] .q-gutter-sm-y-md>*{margin-top:16px}[dir=ltr] .q-col-gutter-sm-md,[dir=ltr] .q-col-gutter-sm-x-md{margin-left:-16px}[dir=rtl] .q-col-gutter-sm-md,[dir=rtl] .q-col-gutter-sm-x-md{margin-right:-16px}[dir=ltr] .q-col-gutter-sm-md>*,[dir=ltr] .q-col-gutter-sm-x-md>*{padding-left:16px}[dir=rtl] .q-col-gutter-sm-md>*,[dir=rtl] .q-col-gutter-sm-x-md>*{padding-right:16px}[dir] .q-col-gutter-sm-md,[dir] .q-col-gutter-sm-y-md{margin-top:-16px}[dir] .q-col-gutter-sm-md>*,[dir] .q-col-gutter-sm-y-md>*{padding-top:16px}[dir=ltr] .q-gutter-sm-lg,[dir=ltr] .q-gutter-sm-x-lg{margin-left:-24px}[dir=rtl] .q-gutter-sm-lg,[dir=rtl] .q-gutter-sm-x-lg{margin-right:-24px}[dir=ltr] .q-gutter-sm-lg>*,[dir=ltr] .q-gutter-sm-x-lg>*{margin-left:24px}[dir=rtl] .q-gutter-sm-lg>*,[dir=rtl] .q-gutter-sm-x-lg>*{margin-right:24px}[dir] .q-gutter-sm-lg,[dir] .q-gutter-sm-y-lg{margin-top:-24px}[dir] .q-gutter-sm-lg>*,[dir] .q-gutter-sm-y-lg>*{margin-top:24px}[dir=ltr] .q-col-gutter-sm-lg,[dir=ltr] .q-col-gutter-sm-x-lg{margin-left:-24px}[dir=rtl] .q-col-gutter-sm-lg,[dir=rtl] .q-col-gutter-sm-x-lg{margin-right:-24px}[dir=ltr] .q-col-gutter-sm-lg>*,[dir=ltr] .q-col-gutter-sm-x-lg>*{padding-left:24px}[dir=rtl] .q-col-gutter-sm-lg>*,[dir=rtl] .q-col-gutter-sm-x-lg>*{padding-right:24px}[dir] .q-col-gutter-sm-lg,[dir] .q-col-gutter-sm-y-lg{margin-top:-24px}[dir] .q-col-gutter-sm-lg>*,[dir] .q-col-gutter-sm-y-lg>*{padding-top:24px}[dir=ltr] .q-gutter-sm-x-xl,[dir=ltr] .q-gutter-sm-xl{margin-left:-48px}[dir=rtl] .q-gutter-sm-x-xl,[dir=rtl] .q-gutter-sm-xl{margin-right:-48px}[dir=ltr] .q-gutter-sm-x-xl>*,[dir=ltr] .q-gutter-sm-xl>*{margin-left:48px}[dir=rtl] .q-gutter-sm-x-xl>*,[dir=rtl] .q-gutter-sm-xl>*{margin-right:48px}[dir] .q-gutter-sm-xl,[dir] .q-gutter-sm-y-xl{margin-top:-48px}[dir] .q-gutter-sm-xl>*,[dir] .q-gutter-sm-y-xl>*{margin-top:48px}[dir=ltr] .q-col-gutter-sm-x-xl,[dir=ltr] .q-col-gutter-sm-xl{margin-left:-48px}[dir=rtl] .q-col-gutter-sm-x-xl,[dir=rtl] .q-col-gutter-sm-xl{margin-right:-48px}[dir=ltr] .q-col-gutter-sm-x-xl>*,[dir=ltr] .q-col-gutter-sm-xl>*{padding-left:48px}[dir=rtl] .q-col-gutter-sm-x-xl>*,[dir=rtl] .q-col-gutter-sm-xl>*{padding-right:48px}[dir] .q-col-gutter-sm-xl,[dir] .q-col-gutter-sm-y-xl{margin-top:-48px}[dir] .q-col-gutter-sm-xl>*,[dir] .q-col-gutter-sm-y-xl>*{padding-top:48px}.row-sm>.col-0,.row-sm>.col-xs-0{height:auto;width:0%}[dir=ltr] .row-sm>.offset-0,[dir=ltr] .row-sm>.offset-xs-0{margin-left:0%}[dir=rtl] .row-sm>.offset-0,[dir=rtl] .row-sm>.offset-xs-0{margin-right:0%}.column-sm>.col-0,.column-sm>.col-xs-0{height:0%;width:auto}.row-sm>.col-1,.row-sm>.col-xs-1{height:auto;width:8.3333%}[dir=ltr] .row-sm>.offset-1,[dir=ltr] .row-sm>.offset-xs-1{margin-left:8.3333%}[dir=rtl] .row-sm>.offset-1,[dir=rtl] .row-sm>.offset-xs-1{margin-right:8.3333%}.column-sm>.col-1,.column-sm>.col-xs-1{height:8.3333%;width:auto}.row-sm>.col-2,.row-sm>.col-xs-2{height:auto;width:16.6667%}[dir=ltr] .row-sm>.offset-2,[dir=ltr] .row-sm>.offset-xs-2{margin-left:16.6667%}[dir=rtl] .row-sm>.offset-2,[dir=rtl] .row-sm>.offset-xs-2{margin-right:16.6667%}.column-sm>.col-2,.column-sm>.col-xs-2{height:16.6667%;width:auto}.row-sm>.col-3,.row-sm>.col-xs-3{height:auto;width:25%}[dir=ltr] .row-sm>.offset-3,[dir=ltr] .row-sm>.offset-xs-3{margin-left:25%}[dir=rtl] .row-sm>.offset-3,[dir=rtl] .row-sm>.offset-xs-3{margin-right:25%}.column-sm>.col-3,.column-sm>.col-xs-3{height:25%;width:auto}.row-sm>.col-4,.row-sm>.col-xs-4{height:auto;width:33.3333%}[dir=ltr] .row-sm>.offset-4,[dir=ltr] .row-sm>.offset-xs-4{margin-left:33.3333%}[dir=rtl] .row-sm>.offset-4,[dir=rtl] .row-sm>.offset-xs-4{margin-right:33.3333%}.column-sm>.col-4,.column-sm>.col-xs-4{height:33.3333%;width:auto}.row-sm>.col-5,.row-sm>.col-xs-5{height:auto;width:41.6667%}[dir=ltr] .row-sm>.offset-5,[dir=ltr] .row-sm>.offset-xs-5{margin-left:41.6667%}[dir=rtl] .row-sm>.offset-5,[dir=rtl] .row-sm>.offset-xs-5{margin-right:41.6667%}.column-sm>.col-5,.column-sm>.col-xs-5{height:41.6667%;width:auto}.row-sm>.col-6,.row-sm>.col-xs-6{height:auto;width:50%}[dir=ltr] .row-sm>.offset-6,[dir=ltr] .row-sm>.offset-xs-6{margin-left:50%}[dir=rtl] .row-sm>.offset-6,[dir=rtl] .row-sm>.offset-xs-6{margin-right:50%}.column-sm>.col-6,.column-sm>.col-xs-6{height:50%;width:auto}.row-sm>.col-7,.row-sm>.col-xs-7{height:auto;width:58.3333%}[dir=ltr] .row-sm>.offset-7,[dir=ltr] .row-sm>.offset-xs-7{margin-left:58.3333%}[dir=rtl] .row-sm>.offset-7,[dir=rtl] .row-sm>.offset-xs-7{margin-right:58.3333%}.column-sm>.col-7,.column-sm>.col-xs-7{height:58.3333%;width:auto}.row-sm>.col-8,.row-sm>.col-xs-8{height:auto;width:66.6667%}[dir=ltr] .row-sm>.offset-8,[dir=ltr] .row-sm>.offset-xs-8{margin-left:66.6667%}[dir=rtl] .row-sm>.offset-8,[dir=rtl] .row-sm>.offset-xs-8{margin-right:66.6667%}.column-sm>.col-8,.column-sm>.col-xs-8{height:66.6667%;width:auto}.row-sm>.col-9,.row-sm>.col-xs-9{height:auto;width:75%}[dir=ltr] .row-sm>.offset-9,[dir=ltr] .row-sm>.offset-xs-9{margin-left:75%}[dir=rtl] .row-sm>.offset-9,[dir=rtl] .row-sm>.offset-xs-9{margin-right:75%}.column-sm>.col-9,.column-sm>.col-xs-9{height:75%;width:auto}.row-sm>.col-10,.row-sm>.col-xs-10{height:auto;width:83.3333%}[dir=ltr] .row-sm>.offset-10,[dir=ltr] .row-sm>.offset-xs-10{margin-left:83.3333%}[dir=rtl] .row-sm>.offset-10,[dir=rtl] .row-sm>.offset-xs-10{margin-right:83.3333%}.column-sm>.col-10,.column-sm>.col-xs-10{height:83.3333%;width:auto}.row-sm>.col-11,.row-sm>.col-xs-11{height:auto;width:91.6667%}[dir=ltr] .row-sm>.offset-11,[dir=ltr] .row-sm>.offset-xs-11{margin-left:91.6667%}[dir=rtl] .row-sm>.offset-11,[dir=rtl] .row-sm>.offset-xs-11{margin-right:91.6667%}.column-sm>.col-11,.column-sm>.col-xs-11{height:91.6667%;width:auto}.row-sm>.col-12,.row-sm>.col-xs-12{height:auto;width:100%}[dir=ltr] .row-sm>.offset-12,[dir=ltr] .row-sm>.offset-xs-12{margin-left:100%}[dir=rtl] .row-sm>.offset-12,[dir=rtl] .row-sm>.offset-xs-12{margin-right:100%}.column-sm>.col-12,.column-sm>.col-xs-12{height:100%;width:auto}.row-sm>.col-sm-0{height:auto;width:0%}[dir=ltr] .row-sm>.offset-sm-0{margin-left:0%}[dir=rtl] .row-sm>.offset-sm-0{margin-right:0%}.column-sm>.col-sm-0{height:0%;width:auto}.row-sm>.col-sm-1{height:auto;width:8.3333%}[dir=ltr] .row-sm>.offset-sm-1{margin-left:8.3333%}[dir=rtl] .row-sm>.offset-sm-1{margin-right:8.3333%}.column-sm>.col-sm-1{height:8.3333%;width:auto}.row-sm>.col-sm-2{height:auto;width:16.6667%}[dir=ltr] .row-sm>.offset-sm-2{margin-left:16.6667%}[dir=rtl] .row-sm>.offset-sm-2{margin-right:16.6667%}.column-sm>.col-sm-2{height:16.6667%;width:auto}.row-sm>.col-sm-3{height:auto;width:25%}[dir=ltr] .row-sm>.offset-sm-3{margin-left:25%}[dir=rtl] .row-sm>.offset-sm-3{margin-right:25%}.column-sm>.col-sm-3{height:25%;width:auto}.row-sm>.col-sm-4{height:auto;width:33.3333%}[dir=ltr] .row-sm>.offset-sm-4{margin-left:33.3333%}[dir=rtl] .row-sm>.offset-sm-4{margin-right:33.3333%}.column-sm>.col-sm-4{height:33.3333%;width:auto}.row-sm>.col-sm-5{height:auto;width:41.6667%}[dir=ltr] .row-sm>.offset-sm-5{margin-left:41.6667%}[dir=rtl] .row-sm>.offset-sm-5{margin-right:41.6667%}.column-sm>.col-sm-5{height:41.6667%;width:auto}.row-sm>.col-sm-6{height:auto;width:50%}[dir=ltr] .row-sm>.offset-sm-6{margin-left:50%}[dir=rtl] .row-sm>.offset-sm-6{margin-right:50%}.column-sm>.col-sm-6{height:50%;width:auto}.row-sm>.col-sm-7{height:auto;width:58.3333%}[dir=ltr] .row-sm>.offset-sm-7{margin-left:58.3333%}[dir=rtl] .row-sm>.offset-sm-7{margin-right:58.3333%}.column-sm>.col-sm-7{height:58.3333%;width:auto}.row-sm>.col-sm-8{height:auto;width:66.6667%}[dir=ltr] .row-sm>.offset-sm-8{margin-left:66.6667%}[dir=rtl] .row-sm>.offset-sm-8{margin-right:66.6667%}.column-sm>.col-sm-8{height:66.6667%;width:auto}.row-sm>.col-sm-9{height:auto;width:75%}[dir=ltr] .row-sm>.offset-sm-9{margin-left:75%}[dir=rtl] .row-sm>.offset-sm-9{margin-right:75%}.column-sm>.col-sm-9{height:75%;width:auto}.row-sm>.col-sm-10{height:auto;width:83.3333%}[dir=ltr] .row-sm>.offset-sm-10{margin-left:83.3333%}[dir=rtl] .row-sm>.offset-sm-10{margin-right:83.3333%}.column-sm>.col-sm-10{height:83.3333%;width:auto}.row-sm>.col-sm-11{height:auto;width:91.6667%}[dir=ltr] .row-sm>.offset-sm-11{margin-left:91.6667%}[dir=rtl] .row-sm>.offset-sm-11{margin-right:91.6667%}.column-sm>.col-sm-11{height:91.6667%;width:auto}.row-sm>.col-sm-12{height:auto;width:100%}[dir=ltr] .row-sm>.offset-sm-12{margin-left:100%}[dir=rtl] .row-sm>.offset-sm-12{margin-right:100%}.column-sm>.col-sm-12{height:100%;width:auto}}@media (min-width:1024px){.flex-md-block{display:block}.flex-md-inline{display:inline-block}[dir] .q-pa-md-none{padding:0 0}[dir=ltr] .q-pl-md-none,[dir=ltr] .q-px-md-none{padding-left:0}[dir=ltr] .q-pr-md-none,[dir=ltr] .q-px-md-none,[dir=rtl] .q-pl-md-none,[dir=rtl] .q-px-md-none{padding-right:0}[dir=rtl] .q-pr-md-none,[dir=rtl] .q-px-md-none{padding-left:0}[dir] .q-pt-md-none,[dir] .q-py-md-none{padding-top:0}[dir] .q-pb-md-none,[dir] .q-py-md-none{padding-bottom:0}[dir] .q-ma-md-none{margin:0 0}[dir=ltr] .q-ml-md-none,[dir=ltr] .q-mx-md-none{margin-left:0}[dir=ltr] .q-mr-md-none,[dir=ltr] .q-mx-md-none,[dir=rtl] .q-ml-md-none,[dir=rtl] .q-mx-md-none{margin-right:0}[dir=rtl] .q-mr-md-none,[dir=rtl] .q-mx-md-none{margin-left:0}[dir] .q-mt-md-none,[dir] .q-my-md-none{margin-top:0}[dir] .q-mb-md-none,[dir] .q-my-md-none{margin-bottom:0}[dir] .q-pa-md-xs{padding:4px 4px}[dir=ltr] .q-pl-md-xs,[dir=ltr] .q-px-md-xs{padding-left:4px}[dir=ltr] .q-pr-md-xs,[dir=ltr] .q-px-md-xs,[dir=rtl] .q-pl-md-xs,[dir=rtl] .q-px-md-xs{padding-right:4px}[dir=rtl] .q-pr-md-xs,[dir=rtl] .q-px-md-xs{padding-left:4px}[dir] .q-pt-md-xs,[dir] .q-py-md-xs{padding-top:4px}[dir] .q-pb-md-xs,[dir] .q-py-md-xs{padding-bottom:4px}[dir] .q-ma-md-xs{margin:4px 4px}[dir=ltr] .q-ml-md-xs,[dir=ltr] .q-mx-md-xs{margin-left:4px}[dir=ltr] .q-mr-md-xs,[dir=ltr] .q-mx-md-xs,[dir=rtl] .q-ml-md-xs,[dir=rtl] .q-mx-md-xs{margin-right:4px}[dir=rtl] .q-mr-md-xs,[dir=rtl] .q-mx-md-xs{margin-left:4px}[dir] .q-mt-md-xs,[dir] .q-my-md-xs{margin-top:4px}[dir] .q-mb-md-xs,[dir] .q-my-md-xs{margin-bottom:4px}[dir] .q-pa-md-sm{padding:8px 8px}[dir=ltr] .q-pl-md-sm,[dir=ltr] .q-px-md-sm{padding-left:8px}[dir=ltr] .q-pr-md-sm,[dir=ltr] .q-px-md-sm,[dir=rtl] .q-pl-md-sm,[dir=rtl] .q-px-md-sm{padding-right:8px}[dir=rtl] .q-pr-md-sm,[dir=rtl] .q-px-md-sm{padding-left:8px}[dir] .q-pt-md-sm,[dir] .q-py-md-sm{padding-top:8px}[dir] .q-pb-md-sm,[dir] .q-py-md-sm{padding-bottom:8px}[dir] .q-ma-md-sm{margin:8px 8px}[dir=ltr] .q-ml-md-sm,[dir=ltr] .q-mx-md-sm{margin-left:8px}[dir=ltr] .q-mr-md-sm,[dir=ltr] .q-mx-md-sm,[dir=rtl] .q-ml-md-sm,[dir=rtl] .q-mx-md-sm{margin-right:8px}[dir=rtl] .q-mr-md-sm,[dir=rtl] .q-mx-md-sm{margin-left:8px}[dir] .q-mt-md-sm,[dir] .q-my-md-sm{margin-top:8px}[dir] .q-mb-md-sm,[dir] .q-my-md-sm{margin-bottom:8px}[dir] .q-pa-md-md{padding:16px 16px}[dir=ltr] .q-pl-md-md,[dir=ltr] .q-px-md-md{padding-left:16px}[dir=ltr] .q-pr-md-md,[dir=ltr] .q-px-md-md,[dir=rtl] .q-pl-md-md,[dir=rtl] .q-px-md-md{padding-right:16px}[dir=rtl] .q-pr-md-md,[dir=rtl] .q-px-md-md{padding-left:16px}[dir] .q-pt-md-md,[dir] .q-py-md-md{padding-top:16px}[dir] .q-pb-md-md,[dir] .q-py-md-md{padding-bottom:16px}[dir] .q-ma-md-md{margin:16px 16px}[dir=ltr] .q-ml-md-md,[dir=ltr] .q-mx-md-md{margin-left:16px}[dir=ltr] .q-mr-md-md,[dir=ltr] .q-mx-md-md,[dir=rtl] .q-ml-md-md,[dir=rtl] .q-mx-md-md{margin-right:16px}[dir=rtl] .q-mr-md-md,[dir=rtl] .q-mx-md-md{margin-left:16px}[dir] .q-mt-md-md,[dir] .q-my-md-md{margin-top:16px}[dir] .q-mb-md-md,[dir] .q-my-md-md{margin-bottom:16px}[dir] .q-pa-md-lg{padding:24px 24px}[dir=ltr] .q-pl-md-lg,[dir=ltr] .q-px-md-lg{padding-left:24px}[dir=ltr] .q-pr-md-lg,[dir=ltr] .q-px-md-lg,[dir=rtl] .q-pl-md-lg,[dir=rtl] .q-px-md-lg{padding-right:24px}[dir=rtl] .q-pr-md-lg,[dir=rtl] .q-px-md-lg{padding-left:24px}[dir] .q-pt-md-lg,[dir] .q-py-md-lg{padding-top:24px}[dir] .q-pb-md-lg,[dir] .q-py-md-lg{padding-bottom:24px}[dir] .q-ma-md-lg{margin:24px 24px}[dir=ltr] .q-ml-md-lg,[dir=ltr] .q-mx-md-lg{margin-left:24px}[dir=ltr] .q-mr-md-lg,[dir=ltr] .q-mx-md-lg,[dir=rtl] .q-ml-md-lg,[dir=rtl] .q-mx-md-lg{margin-right:24px}[dir=rtl] .q-mr-md-lg,[dir=rtl] .q-mx-md-lg{margin-left:24px}[dir] .q-mt-md-lg,[dir] .q-my-md-lg{margin-top:24px}[dir] .q-mb-md-lg,[dir] .q-my-md-lg{margin-bottom:24px}[dir] .q-pa-md-xl{padding:48px 48px}[dir=ltr] .q-pl-md-xl,[dir=ltr] .q-px-md-xl{padding-left:48px}[dir=ltr] .q-pr-md-xl,[dir=ltr] .q-px-md-xl,[dir=rtl] .q-pl-md-xl,[dir=rtl] .q-px-md-xl{padding-right:48px}[dir=rtl] .q-pr-md-xl,[dir=rtl] .q-px-md-xl{padding-left:48px}[dir] .q-pt-md-xl,[dir] .q-py-md-xl{padding-top:48px}[dir] .q-pb-md-xl,[dir] .q-py-md-xl{padding-bottom:48px}[dir] .q-ma-md-xl{margin:48px 48px}[dir=ltr] .q-ml-md-xl,[dir=ltr] .q-mx-md-xl{margin-left:48px}[dir=ltr] .q-mr-md-xl,[dir=ltr] .q-mx-md-xl,[dir=rtl] .q-ml-md-xl,[dir=rtl] .q-mx-md-xl{margin-right:48px}[dir=rtl] .q-mr-md-xl,[dir=rtl] .q-mx-md-xl{margin-left:48px}[dir] .q-mt-md-xl,[dir] .q-my-md-xl{margin-top:48px}[dir] .q-mb-md-xl,[dir] .q-my-md-xl{margin-bottom:48px}[dir=ltr] .q-ml-md-auto,[dir=ltr] .q-mx-md-auto{margin-left:auto}[dir=ltr] .q-mr-md-auto,[dir=ltr] .q-mx-md-auto,[dir=rtl] .q-ml-md-auto,[dir=rtl] .q-mx-md-auto{margin-right:auto}[dir=rtl] .q-mr-md-auto,[dir=rtl] .q-mx-md-auto{margin-left:auto}.column.inline-md,.flex.inline-md,.row.inline-md{display:inline-flex}.column-md,.flex-md,.row-md{display:flex;flex-wrap:wrap}.column-md.inline,.column-md.inline-md,.flex-md.inline,.flex-md.inline-md,.row-md.inline,.row-md.inline-md{display:inline-flex}.row.reverse-md{flex-direction:row-reverse}.row-md{flex-direction:row}.row-md.reverse,.row-md.reverse-md{flex-direction:row-reverse}.column.reverse-md{flex-direction:column-reverse}.column-md{flex-direction:column}.column-md.reverse,.column-md.reverse-md{flex-direction:column-reverse}.wrap-md{flex-wrap:wrap}.no-wrap-md{flex-wrap:nowrap}.reverse-wrap-md{flex-wrap:wrap-reverse}.order-md-first{order:-10000}.order-md-last{order:10000}.order-md-none{order:0}.justify-md-start{justify-content:flex-start}.justify-md-end{justify-content:flex-end}.flex-md-center,.justify-md-center{justify-content:center}.justify-md-between{justify-content:space-between}.justify-md-around{justify-content:space-around}.justify-md-evenly{justify-content:space-evenly}.items-md-start{align-items:flex-start}.items-md-end{align-items:flex-end}.flex-md-center,.items-md-center{align-items:center}.items-md-baseline{align-items:baseline}.items-md-stretch{align-items:stretch}.content-md-start{align-content:flex-start}.content-md-end{align-content:flex-end}.content-md-center{align-content:center}.content-md-between{align-content:space-between}.content-md-around{align-content:space-around}.self-md-start{align-self:flex-start}.self-md-end{align-self:flex-end}.self-md-center{align-self:center}.self-md-baseline{align-self:baseline}.self-md-stretch{align-self:stretch}[dir=ltr] .q-gutter-md-none,[dir=ltr] .q-gutter-md-x-none{margin-left:0}[dir=rtl] .q-gutter-md-none,[dir=rtl] .q-gutter-md-x-none{margin-right:0}[dir=ltr] .q-gutter-md-none>*,[dir=ltr] .q-gutter-md-x-none>*{margin-left:0}[dir=rtl] .q-gutter-md-none>*,[dir=rtl] .q-gutter-md-x-none>*{margin-right:0}[dir] .q-gutter-md-none,[dir] .q-gutter-md-none>*,[dir] .q-gutter-md-y-none,[dir] .q-gutter-md-y-none>*{margin-top:0}[dir=ltr] .q-col-gutter-md-none,[dir=ltr] .q-col-gutter-md-x-none{margin-left:0}[dir=rtl] .q-col-gutter-md-none,[dir=rtl] .q-col-gutter-md-x-none{margin-right:0}[dir=ltr] .q-col-gutter-md-none>*,[dir=ltr] .q-col-gutter-md-x-none>*{padding-left:0}[dir=rtl] .q-col-gutter-md-none>*,[dir=rtl] .q-col-gutter-md-x-none>*{padding-right:0}[dir] .q-col-gutter-md-none,[dir] .q-col-gutter-md-y-none{margin-top:0}[dir] .q-col-gutter-md-none>*,[dir] .q-col-gutter-md-y-none>*{padding-top:0}[dir=ltr] .q-gutter-md-x-xs,[dir=ltr] .q-gutter-md-xs{margin-left:-4px}[dir=rtl] .q-gutter-md-x-xs,[dir=rtl] .q-gutter-md-xs{margin-right:-4px}[dir=ltr] .q-gutter-md-x-xs>*,[dir=ltr] .q-gutter-md-xs>*{margin-left:4px}[dir=rtl] .q-gutter-md-x-xs>*,[dir=rtl] .q-gutter-md-xs>*{margin-right:4px}[dir] .q-gutter-md-xs,[dir] .q-gutter-md-y-xs{margin-top:-4px}[dir] .q-gutter-md-xs>*,[dir] .q-gutter-md-y-xs>*{margin-top:4px}[dir=ltr] .q-col-gutter-md-x-xs,[dir=ltr] .q-col-gutter-md-xs{margin-left:-4px}[dir=rtl] .q-col-gutter-md-x-xs,[dir=rtl] .q-col-gutter-md-xs{margin-right:-4px}[dir=ltr] .q-col-gutter-md-x-xs>*,[dir=ltr] .q-col-gutter-md-xs>*{padding-left:4px}[dir=rtl] .q-col-gutter-md-x-xs>*,[dir=rtl] .q-col-gutter-md-xs>*{padding-right:4px}[dir] .q-col-gutter-md-xs,[dir] .q-col-gutter-md-y-xs{margin-top:-4px}[dir] .q-col-gutter-md-xs>*,[dir] .q-col-gutter-md-y-xs>*{padding-top:4px}[dir=ltr] .q-gutter-md-sm,[dir=ltr] .q-gutter-md-x-sm{margin-left:-8px}[dir=rtl] .q-gutter-md-sm,[dir=rtl] .q-gutter-md-x-sm{margin-right:-8px}[dir=ltr] .q-gutter-md-sm>*,[dir=ltr] .q-gutter-md-x-sm>*{margin-left:8px}[dir=rtl] .q-gutter-md-sm>*,[dir=rtl] .q-gutter-md-x-sm>*{margin-right:8px}[dir] .q-gutter-md-sm,[dir] .q-gutter-md-y-sm{margin-top:-8px}[dir] .q-gutter-md-sm>*,[dir] .q-gutter-md-y-sm>*{margin-top:8px}[dir=ltr] .q-col-gutter-md-sm,[dir=ltr] .q-col-gutter-md-x-sm{margin-left:-8px}[dir=rtl] .q-col-gutter-md-sm,[dir=rtl] .q-col-gutter-md-x-sm{margin-right:-8px}[dir=ltr] .q-col-gutter-md-sm>*,[dir=ltr] .q-col-gutter-md-x-sm>*{padding-left:8px}[dir=rtl] .q-col-gutter-md-sm>*,[dir=rtl] .q-col-gutter-md-x-sm>*{padding-right:8px}[dir] .q-col-gutter-md-sm,[dir] .q-col-gutter-md-y-sm{margin-top:-8px}[dir] .q-col-gutter-md-sm>*,[dir] .q-col-gutter-md-y-sm>*{padding-top:8px}[dir=ltr] .q-gutter-md-md,[dir=ltr] .q-gutter-md-x-md{margin-left:-16px}[dir=rtl] .q-gutter-md-md,[dir=rtl] .q-gutter-md-x-md{margin-right:-16px}[dir=ltr] .q-gutter-md-md>*,[dir=ltr] .q-gutter-md-x-md>*{margin-left:16px}[dir=rtl] .q-gutter-md-md>*,[dir=rtl] .q-gutter-md-x-md>*{margin-right:16px}[dir] .q-gutter-md-md,[dir] .q-gutter-md-y-md{margin-top:-16px}[dir] .q-gutter-md-md>*,[dir] .q-gutter-md-y-md>*{margin-top:16px}[dir=ltr] .q-col-gutter-md-md,[dir=ltr] .q-col-gutter-md-x-md{margin-left:-16px}[dir=rtl] .q-col-gutter-md-md,[dir=rtl] .q-col-gutter-md-x-md{margin-right:-16px}[dir=ltr] .q-col-gutter-md-md>*,[dir=ltr] .q-col-gutter-md-x-md>*{padding-left:16px}[dir=rtl] .q-col-gutter-md-md>*,[dir=rtl] .q-col-gutter-md-x-md>*{padding-right:16px}[dir] .q-col-gutter-md-md,[dir] .q-col-gutter-md-y-md{margin-top:-16px}[dir] .q-col-gutter-md-md>*,[dir] .q-col-gutter-md-y-md>*{padding-top:16px}[dir=ltr] .q-gutter-md-lg,[dir=ltr] .q-gutter-md-x-lg{margin-left:-24px}[dir=rtl] .q-gutter-md-lg,[dir=rtl] .q-gutter-md-x-lg{margin-right:-24px}[dir=ltr] .q-gutter-md-lg>*,[dir=ltr] .q-gutter-md-x-lg>*{margin-left:24px}[dir=rtl] .q-gutter-md-lg>*,[dir=rtl] .q-gutter-md-x-lg>*{margin-right:24px}[dir] .q-gutter-md-lg,[dir] .q-gutter-md-y-lg{margin-top:-24px}[dir] .q-gutter-md-lg>*,[dir] .q-gutter-md-y-lg>*{margin-top:24px}[dir=ltr] .q-col-gutter-md-lg,[dir=ltr] .q-col-gutter-md-x-lg{margin-left:-24px}[dir=rtl] .q-col-gutter-md-lg,[dir=rtl] .q-col-gutter-md-x-lg{margin-right:-24px}[dir=ltr] .q-col-gutter-md-lg>*,[dir=ltr] .q-col-gutter-md-x-lg>*{padding-left:24px}[dir=rtl] .q-col-gutter-md-lg>*,[dir=rtl] .q-col-gutter-md-x-lg>*{padding-right:24px}[dir] .q-col-gutter-md-lg,[dir] .q-col-gutter-md-y-lg{margin-top:-24px}[dir] .q-col-gutter-md-lg>*,[dir] .q-col-gutter-md-y-lg>*{padding-top:24px}[dir=ltr] .q-gutter-md-x-xl,[dir=ltr] .q-gutter-md-xl{margin-left:-48px}[dir=rtl] .q-gutter-md-x-xl,[dir=rtl] .q-gutter-md-xl{margin-right:-48px}[dir=ltr] .q-gutter-md-x-xl>*,[dir=ltr] .q-gutter-md-xl>*{margin-left:48px}[dir=rtl] .q-gutter-md-x-xl>*,[dir=rtl] .q-gutter-md-xl>*{margin-right:48px}[dir] .q-gutter-md-xl,[dir] .q-gutter-md-y-xl{margin-top:-48px}[dir] .q-gutter-md-xl>*,[dir] .q-gutter-md-y-xl>*{margin-top:48px}[dir=ltr] .q-col-gutter-md-x-xl,[dir=ltr] .q-col-gutter-md-xl{margin-left:-48px}[dir=rtl] .q-col-gutter-md-x-xl,[dir=rtl] .q-col-gutter-md-xl{margin-right:-48px}[dir=ltr] .q-col-gutter-md-x-xl>*,[dir=ltr] .q-col-gutter-md-xl>*{padding-left:48px}[dir=rtl] .q-col-gutter-md-x-xl>*,[dir=rtl] .q-col-gutter-md-xl>*{padding-right:48px}[dir] .q-col-gutter-md-xl,[dir] .q-col-gutter-md-y-xl{margin-top:-48px}[dir] .q-col-gutter-md-xl>*,[dir] .q-col-gutter-md-y-xl>*{padding-top:48px}.row-md>.col-0,.row-md>.col-xs-0{height:auto;width:0%}[dir=ltr] .row-md>.offset-0,[dir=ltr] .row-md>.offset-xs-0{margin-left:0%}[dir=rtl] .row-md>.offset-0,[dir=rtl] .row-md>.offset-xs-0{margin-right:0%}.column-md>.col-0,.column-md>.col-xs-0{height:0%;width:auto}.row-md>.col-1,.row-md>.col-xs-1{height:auto;width:8.3333%}[dir=ltr] .row-md>.offset-1,[dir=ltr] .row-md>.offset-xs-1{margin-left:8.3333%}[dir=rtl] .row-md>.offset-1,[dir=rtl] .row-md>.offset-xs-1{margin-right:8.3333%}.column-md>.col-1,.column-md>.col-xs-1{height:8.3333%;width:auto}.row-md>.col-2,.row-md>.col-xs-2{height:auto;width:16.6667%}[dir=ltr] .row-md>.offset-2,[dir=ltr] .row-md>.offset-xs-2{margin-left:16.6667%}[dir=rtl] .row-md>.offset-2,[dir=rtl] .row-md>.offset-xs-2{margin-right:16.6667%}.column-md>.col-2,.column-md>.col-xs-2{height:16.6667%;width:auto}.row-md>.col-3,.row-md>.col-xs-3{height:auto;width:25%}[dir=ltr] .row-md>.offset-3,[dir=ltr] .row-md>.offset-xs-3{margin-left:25%}[dir=rtl] .row-md>.offset-3,[dir=rtl] .row-md>.offset-xs-3{margin-right:25%}.column-md>.col-3,.column-md>.col-xs-3{height:25%;width:auto}.row-md>.col-4,.row-md>.col-xs-4{height:auto;width:33.3333%}[dir=ltr] .row-md>.offset-4,[dir=ltr] .row-md>.offset-xs-4{margin-left:33.3333%}[dir=rtl] .row-md>.offset-4,[dir=rtl] .row-md>.offset-xs-4{margin-right:33.3333%}.column-md>.col-4,.column-md>.col-xs-4{height:33.3333%;width:auto}.row-md>.col-5,.row-md>.col-xs-5{height:auto;width:41.6667%}[dir=ltr] .row-md>.offset-5,[dir=ltr] .row-md>.offset-xs-5{margin-left:41.6667%}[dir=rtl] .row-md>.offset-5,[dir=rtl] .row-md>.offset-xs-5{margin-right:41.6667%}.column-md>.col-5,.column-md>.col-xs-5{height:41.6667%;width:auto}.row-md>.col-6,.row-md>.col-xs-6{height:auto;width:50%}[dir=ltr] .row-md>.offset-6,[dir=ltr] .row-md>.offset-xs-6{margin-left:50%}[dir=rtl] .row-md>.offset-6,[dir=rtl] .row-md>.offset-xs-6{margin-right:50%}.column-md>.col-6,.column-md>.col-xs-6{height:50%;width:auto}.row-md>.col-7,.row-md>.col-xs-7{height:auto;width:58.3333%}[dir=ltr] .row-md>.offset-7,[dir=ltr] .row-md>.offset-xs-7{margin-left:58.3333%}[dir=rtl] .row-md>.offset-7,[dir=rtl] .row-md>.offset-xs-7{margin-right:58.3333%}.column-md>.col-7,.column-md>.col-xs-7{height:58.3333%;width:auto}.row-md>.col-8,.row-md>.col-xs-8{height:auto;width:66.6667%}[dir=ltr] .row-md>.offset-8,[dir=ltr] .row-md>.offset-xs-8{margin-left:66.6667%}[dir=rtl] .row-md>.offset-8,[dir=rtl] .row-md>.offset-xs-8{margin-right:66.6667%}.column-md>.col-8,.column-md>.col-xs-8{height:66.6667%;width:auto}.row-md>.col-9,.row-md>.col-xs-9{height:auto;width:75%}[dir=ltr] .row-md>.offset-9,[dir=ltr] .row-md>.offset-xs-9{margin-left:75%}[dir=rtl] .row-md>.offset-9,[dir=rtl] .row-md>.offset-xs-9{margin-right:75%}.column-md>.col-9,.column-md>.col-xs-9{height:75%;width:auto}.row-md>.col-10,.row-md>.col-xs-10{height:auto;width:83.3333%}[dir=ltr] .row-md>.offset-10,[dir=ltr] .row-md>.offset-xs-10{margin-left:83.3333%}[dir=rtl] .row-md>.offset-10,[dir=rtl] .row-md>.offset-xs-10{margin-right:83.3333%}.column-md>.col-10,.column-md>.col-xs-10{height:83.3333%;width:auto}.row-md>.col-11,.row-md>.col-xs-11{height:auto;width:91.6667%}[dir=ltr] .row-md>.offset-11,[dir=ltr] .row-md>.offset-xs-11{margin-left:91.6667%}[dir=rtl] .row-md>.offset-11,[dir=rtl] .row-md>.offset-xs-11{margin-right:91.6667%}.column-md>.col-11,.column-md>.col-xs-11{height:91.6667%;width:auto}.row-md>.col-12,.row-md>.col-xs-12{height:auto;width:100%}[dir=ltr] .row-md>.offset-12,[dir=ltr] .row-md>.offset-xs-12{margin-left:100%}[dir=rtl] .row-md>.offset-12,[dir=rtl] .row-md>.offset-xs-12{margin-right:100%}.column-md>.col-12,.column-md>.col-xs-12{height:100%;width:auto}.row-md>.col-sm-0{height:auto;width:0%}[dir=ltr] .row-md>.offset-sm-0{margin-left:0%}[dir=rtl] .row-md>.offset-sm-0{margin-right:0%}.column-md>.col-sm-0{height:0%;width:auto}.row-md>.col-sm-1{height:auto;width:8.3333%}[dir=ltr] .row-md>.offset-sm-1{margin-left:8.3333%}[dir=rtl] .row-md>.offset-sm-1{margin-right:8.3333%}.column-md>.col-sm-1{height:8.3333%;width:auto}.row-md>.col-sm-2{height:auto;width:16.6667%}[dir=ltr] .row-md>.offset-sm-2{margin-left:16.6667%}[dir=rtl] .row-md>.offset-sm-2{margin-right:16.6667%}.column-md>.col-sm-2{height:16.6667%;width:auto}.row-md>.col-sm-3{height:auto;width:25%}[dir=ltr] .row-md>.offset-sm-3{margin-left:25%}[dir=rtl] .row-md>.offset-sm-3{margin-right:25%}.column-md>.col-sm-3{height:25%;width:auto}.row-md>.col-sm-4{height:auto;width:33.3333%}[dir=ltr] .row-md>.offset-sm-4{margin-left:33.3333%}[dir=rtl] .row-md>.offset-sm-4{margin-right:33.3333%}.column-md>.col-sm-4{height:33.3333%;width:auto}.row-md>.col-sm-5{height:auto;width:41.6667%}[dir=ltr] .row-md>.offset-sm-5{margin-left:41.6667%}[dir=rtl] .row-md>.offset-sm-5{margin-right:41.6667%}.column-md>.col-sm-5{height:41.6667%;width:auto}.row-md>.col-sm-6{height:auto;width:50%}[dir=ltr] .row-md>.offset-sm-6{margin-left:50%}[dir=rtl] .row-md>.offset-sm-6{margin-right:50%}.column-md>.col-sm-6{height:50%;width:auto}.row-md>.col-sm-7{height:auto;width:58.3333%}[dir=ltr] .row-md>.offset-sm-7{margin-left:58.3333%}[dir=rtl] .row-md>.offset-sm-7{margin-right:58.3333%}.column-md>.col-sm-7{height:58.3333%;width:auto}.row-md>.col-sm-8{height:auto;width:66.6667%}[dir=ltr] .row-md>.offset-sm-8{margin-left:66.6667%}[dir=rtl] .row-md>.offset-sm-8{margin-right:66.6667%}.column-md>.col-sm-8{height:66.6667%;width:auto}.row-md>.col-sm-9{height:auto;width:75%}[dir=ltr] .row-md>.offset-sm-9{margin-left:75%}[dir=rtl] .row-md>.offset-sm-9{margin-right:75%}.column-md>.col-sm-9{height:75%;width:auto}.row-md>.col-sm-10{height:auto;width:83.3333%}[dir=ltr] .row-md>.offset-sm-10{margin-left:83.3333%}[dir=rtl] .row-md>.offset-sm-10{margin-right:83.3333%}.column-md>.col-sm-10{height:83.3333%;width:auto}.row-md>.col-sm-11{height:auto;width:91.6667%}[dir=ltr] .row-md>.offset-sm-11{margin-left:91.6667%}[dir=rtl] .row-md>.offset-sm-11{margin-right:91.6667%}.column-md>.col-sm-11{height:91.6667%;width:auto}.row-md>.col-sm-12{height:auto;width:100%}[dir=ltr] .row-md>.offset-sm-12{margin-left:100%}[dir=rtl] .row-md>.offset-sm-12{margin-right:100%}.column-md>.col-sm-12{height:100%;width:auto}.row-md>.col-md-0{height:auto;width:0%}[dir=ltr] .row-md>.offset-md-0{margin-left:0%}[dir=rtl] .row-md>.offset-md-0{margin-right:0%}.column-md>.col-md-0{height:0%;width:auto}.row-md>.col-md-1{height:auto;width:8.3333%}[dir=ltr] .row-md>.offset-md-1{margin-left:8.3333%}[dir=rtl] .row-md>.offset-md-1{margin-right:8.3333%}.column-md>.col-md-1{height:8.3333%;width:auto}.row-md>.col-md-2{height:auto;width:16.6667%}[dir=ltr] .row-md>.offset-md-2{margin-left:16.6667%}[dir=rtl] .row-md>.offset-md-2{margin-right:16.6667%}.column-md>.col-md-2{height:16.6667%;width:auto}.row-md>.col-md-3{height:auto;width:25%}[dir=ltr] .row-md>.offset-md-3{margin-left:25%}[dir=rtl] .row-md>.offset-md-3{margin-right:25%}.column-md>.col-md-3{height:25%;width:auto}.row-md>.col-md-4{height:auto;width:33.3333%}[dir=ltr] .row-md>.offset-md-4{margin-left:33.3333%}[dir=rtl] .row-md>.offset-md-4{margin-right:33.3333%}.column-md>.col-md-4{height:33.3333%;width:auto}.row-md>.col-md-5{height:auto;width:41.6667%}[dir=ltr] .row-md>.offset-md-5{margin-left:41.6667%}[dir=rtl] .row-md>.offset-md-5{margin-right:41.6667%}.column-md>.col-md-5{height:41.6667%;width:auto}.row-md>.col-md-6{height:auto;width:50%}[dir=ltr] .row-md>.offset-md-6{margin-left:50%}[dir=rtl] .row-md>.offset-md-6{margin-right:50%}.column-md>.col-md-6{height:50%;width:auto}.row-md>.col-md-7{height:auto;width:58.3333%}[dir=ltr] .row-md>.offset-md-7{margin-left:58.3333%}[dir=rtl] .row-md>.offset-md-7{margin-right:58.3333%}.column-md>.col-md-7{height:58.3333%;width:auto}.row-md>.col-md-8{height:auto;width:66.6667%}[dir=ltr] .row-md>.offset-md-8{margin-left:66.6667%}[dir=rtl] .row-md>.offset-md-8{margin-right:66.6667%}.column-md>.col-md-8{height:66.6667%;width:auto}.row-md>.col-md-9{height:auto;width:75%}[dir=ltr] .row-md>.offset-md-9{margin-left:75%}[dir=rtl] .row-md>.offset-md-9{margin-right:75%}.column-md>.col-md-9{height:75%;width:auto}.row-md>.col-md-10{height:auto;width:83.3333%}[dir=ltr] .row-md>.offset-md-10{margin-left:83.3333%}[dir=rtl] .row-md>.offset-md-10{margin-right:83.3333%}.column-md>.col-md-10{height:83.3333%;width:auto}.row-md>.col-md-11{height:auto;width:91.6667%}[dir=ltr] .row-md>.offset-md-11{margin-left:91.6667%}[dir=rtl] .row-md>.offset-md-11{margin-right:91.6667%}.column-md>.col-md-11{height:91.6667%;width:auto}.row-md>.col-md-12{height:auto;width:100%}[dir=ltr] .row-md>.offset-md-12{margin-left:100%}[dir=rtl] .row-md>.offset-md-12{margin-right:100%}.column-md>.col-md-12{height:100%;width:auto}}@media (min-width:1440px){.flex-lg-block{display:block}.flex-lg-inline{display:inline-block}[dir] .q-pa-lg-none{padding:0 0}[dir=ltr] .q-pl-lg-none,[dir=ltr] .q-px-lg-none{padding-left:0}[dir=ltr] .q-pr-lg-none,[dir=ltr] .q-px-lg-none,[dir=rtl] .q-pl-lg-none,[dir=rtl] .q-px-lg-none{padding-right:0}[dir=rtl] .q-pr-lg-none,[dir=rtl] .q-px-lg-none{padding-left:0}[dir] .q-pt-lg-none,[dir] .q-py-lg-none{padding-top:0}[dir] .q-pb-lg-none,[dir] .q-py-lg-none{padding-bottom:0}[dir] .q-ma-lg-none{margin:0 0}[dir=ltr] .q-ml-lg-none,[dir=ltr] .q-mx-lg-none{margin-left:0}[dir=ltr] .q-mr-lg-none,[dir=ltr] .q-mx-lg-none,[dir=rtl] .q-ml-lg-none,[dir=rtl] .q-mx-lg-none{margin-right:0}[dir=rtl] .q-mr-lg-none,[dir=rtl] .q-mx-lg-none{margin-left:0}[dir] .q-mt-lg-none,[dir] .q-my-lg-none{margin-top:0}[dir] .q-mb-lg-none,[dir] .q-my-lg-none{margin-bottom:0}[dir] .q-pa-lg-xs{padding:4px 4px}[dir=ltr] .q-pl-lg-xs,[dir=ltr] .q-px-lg-xs{padding-left:4px}[dir=ltr] .q-pr-lg-xs,[dir=ltr] .q-px-lg-xs,[dir=rtl] .q-pl-lg-xs,[dir=rtl] .q-px-lg-xs{padding-right:4px}[dir=rtl] .q-pr-lg-xs,[dir=rtl] .q-px-lg-xs{padding-left:4px}[dir] .q-pt-lg-xs,[dir] .q-py-lg-xs{padding-top:4px}[dir] .q-pb-lg-xs,[dir] .q-py-lg-xs{padding-bottom:4px}[dir] .q-ma-lg-xs{margin:4px 4px}[dir=ltr] .q-ml-lg-xs,[dir=ltr] .q-mx-lg-xs{margin-left:4px}[dir=ltr] .q-mr-lg-xs,[dir=ltr] .q-mx-lg-xs,[dir=rtl] .q-ml-lg-xs,[dir=rtl] .q-mx-lg-xs{margin-right:4px}[dir=rtl] .q-mr-lg-xs,[dir=rtl] .q-mx-lg-xs{margin-left:4px}[dir] .q-mt-lg-xs,[dir] .q-my-lg-xs{margin-top:4px}[dir] .q-mb-lg-xs,[dir] .q-my-lg-xs{margin-bottom:4px}[dir] .q-pa-lg-sm{padding:8px 8px}[dir=ltr] .q-pl-lg-sm,[dir=ltr] .q-px-lg-sm{padding-left:8px}[dir=ltr] .q-pr-lg-sm,[dir=ltr] .q-px-lg-sm,[dir=rtl] .q-pl-lg-sm,[dir=rtl] .q-px-lg-sm{padding-right:8px}[dir=rtl] .q-pr-lg-sm,[dir=rtl] .q-px-lg-sm{padding-left:8px}[dir] .q-pt-lg-sm,[dir] .q-py-lg-sm{padding-top:8px}[dir] .q-pb-lg-sm,[dir] .q-py-lg-sm{padding-bottom:8px}[dir] .q-ma-lg-sm{margin:8px 8px}[dir=ltr] .q-ml-lg-sm,[dir=ltr] .q-mx-lg-sm{margin-left:8px}[dir=ltr] .q-mr-lg-sm,[dir=ltr] .q-mx-lg-sm,[dir=rtl] .q-ml-lg-sm,[dir=rtl] .q-mx-lg-sm{margin-right:8px}[dir=rtl] .q-mr-lg-sm,[dir=rtl] .q-mx-lg-sm{margin-left:8px}[dir] .q-mt-lg-sm,[dir] .q-my-lg-sm{margin-top:8px}[dir] .q-mb-lg-sm,[dir] .q-my-lg-sm{margin-bottom:8px}[dir] .q-pa-lg-md{padding:16px 16px}[dir=ltr] .q-pl-lg-md,[dir=ltr] .q-px-lg-md{padding-left:16px}[dir=ltr] .q-pr-lg-md,[dir=ltr] .q-px-lg-md,[dir=rtl] .q-pl-lg-md,[dir=rtl] .q-px-lg-md{padding-right:16px}[dir=rtl] .q-pr-lg-md,[dir=rtl] .q-px-lg-md{padding-left:16px}[dir] .q-pt-lg-md,[dir] .q-py-lg-md{padding-top:16px}[dir] .q-pb-lg-md,[dir] .q-py-lg-md{padding-bottom:16px}[dir] .q-ma-lg-md{margin:16px 16px}[dir=ltr] .q-ml-lg-md,[dir=ltr] .q-mx-lg-md{margin-left:16px}[dir=ltr] .q-mr-lg-md,[dir=ltr] .q-mx-lg-md,[dir=rtl] .q-ml-lg-md,[dir=rtl] .q-mx-lg-md{margin-right:16px}[dir=rtl] .q-mr-lg-md,[dir=rtl] .q-mx-lg-md{margin-left:16px}[dir] .q-mt-lg-md,[dir] .q-my-lg-md{margin-top:16px}[dir] .q-mb-lg-md,[dir] .q-my-lg-md{margin-bottom:16px}[dir] .q-pa-lg-lg{padding:24px 24px}[dir=ltr] .q-pl-lg-lg,[dir=ltr] .q-px-lg-lg{padding-left:24px}[dir=ltr] .q-pr-lg-lg,[dir=ltr] .q-px-lg-lg,[dir=rtl] .q-pl-lg-lg,[dir=rtl] .q-px-lg-lg{padding-right:24px}[dir=rtl] .q-pr-lg-lg,[dir=rtl] .q-px-lg-lg{padding-left:24px}[dir] .q-pt-lg-lg,[dir] .q-py-lg-lg{padding-top:24px}[dir] .q-pb-lg-lg,[dir] .q-py-lg-lg{padding-bottom:24px}[dir] .q-ma-lg-lg{margin:24px 24px}[dir=ltr] .q-ml-lg-lg,[dir=ltr] .q-mx-lg-lg{margin-left:24px}[dir=ltr] .q-mr-lg-lg,[dir=ltr] .q-mx-lg-lg,[dir=rtl] .q-ml-lg-lg,[dir=rtl] .q-mx-lg-lg{margin-right:24px}[dir=rtl] .q-mr-lg-lg,[dir=rtl] .q-mx-lg-lg{margin-left:24px}[dir] .q-mt-lg-lg,[dir] .q-my-lg-lg{margin-top:24px}[dir] .q-mb-lg-lg,[dir] .q-my-lg-lg{margin-bottom:24px}[dir] .q-pa-lg-xl{padding:48px 48px}[dir=ltr] .q-pl-lg-xl,[dir=ltr] .q-px-lg-xl{padding-left:48px}[dir=ltr] .q-pr-lg-xl,[dir=ltr] .q-px-lg-xl,[dir=rtl] .q-pl-lg-xl,[dir=rtl] .q-px-lg-xl{padding-right:48px}[dir=rtl] .q-pr-lg-xl,[dir=rtl] .q-px-lg-xl{padding-left:48px}[dir] .q-pt-lg-xl,[dir] .q-py-lg-xl{padding-top:48px}[dir] .q-pb-lg-xl,[dir] .q-py-lg-xl{padding-bottom:48px}[dir] .q-ma-lg-xl{margin:48px 48px}[dir=ltr] .q-ml-lg-xl,[dir=ltr] .q-mx-lg-xl{margin-left:48px}[dir=ltr] .q-mr-lg-xl,[dir=ltr] .q-mx-lg-xl,[dir=rtl] .q-ml-lg-xl,[dir=rtl] .q-mx-lg-xl{margin-right:48px}[dir=rtl] .q-mr-lg-xl,[dir=rtl] .q-mx-lg-xl{margin-left:48px}[dir] .q-mt-lg-xl,[dir] .q-my-lg-xl{margin-top:48px}[dir] .q-mb-lg-xl,[dir] .q-my-lg-xl{margin-bottom:48px}[dir=ltr] .q-ml-lg-auto,[dir=ltr] .q-mx-lg-auto{margin-left:auto}[dir=ltr] .q-mr-lg-auto,[dir=ltr] .q-mx-lg-auto,[dir=rtl] .q-ml-lg-auto,[dir=rtl] .q-mx-lg-auto{margin-right:auto}[dir=rtl] .q-mr-lg-auto,[dir=rtl] .q-mx-lg-auto{margin-left:auto}.column.inline-lg,.flex.inline-lg,.row.inline-lg{display:inline-flex}.column-lg,.flex-lg,.row-lg{display:flex;flex-wrap:wrap}.column-lg.inline,.column-lg.inline-lg,.flex-lg.inline,.flex-lg.inline-lg,.row-lg.inline,.row-lg.inline-lg{display:inline-flex}.row.reverse-lg{flex-direction:row-reverse}.row-lg{flex-direction:row}.row-lg.reverse,.row-lg.reverse-lg{flex-direction:row-reverse}.column.reverse-lg{flex-direction:column-reverse}.column-lg{flex-direction:column}.column-lg.reverse,.column-lg.reverse-lg{flex-direction:column-reverse}.wrap-lg{flex-wrap:wrap}.no-wrap-lg{flex-wrap:nowrap}.reverse-wrap-lg{flex-wrap:wrap-reverse}.order-lg-first{order:-10000}.order-lg-last{order:10000}.order-lg-none{order:0}.justify-lg-start{justify-content:flex-start}.justify-lg-end{justify-content:flex-end}.flex-lg-center,.justify-lg-center{justify-content:center}.justify-lg-between{justify-content:space-between}.justify-lg-around{justify-content:space-around}.justify-lg-evenly{justify-content:space-evenly}.items-lg-start{align-items:flex-start}.items-lg-end{align-items:flex-end}.flex-lg-center,.items-lg-center{align-items:center}.items-lg-baseline{align-items:baseline}.items-lg-stretch{align-items:stretch}.content-lg-start{align-content:flex-start}.content-lg-end{align-content:flex-end}.content-lg-center{align-content:center}.content-lg-between{align-content:space-between}.content-lg-around{align-content:space-around}.self-lg-start{align-self:flex-start}.self-lg-end{align-self:flex-end}.self-lg-center{align-self:center}.self-lg-baseline{align-self:baseline}.self-lg-stretch{align-self:stretch}[dir=ltr] .q-gutter-lg-none,[dir=ltr] .q-gutter-lg-x-none{margin-left:0}[dir=rtl] .q-gutter-lg-none,[dir=rtl] .q-gutter-lg-x-none{margin-right:0}[dir=ltr] .q-gutter-lg-none>*,[dir=ltr] .q-gutter-lg-x-none>*{margin-left:0}[dir=rtl] .q-gutter-lg-none>*,[dir=rtl] .q-gutter-lg-x-none>*{margin-right:0}[dir] .q-gutter-lg-none,[dir] .q-gutter-lg-none>*,[dir] .q-gutter-lg-y-none,[dir] .q-gutter-lg-y-none>*{margin-top:0}[dir=ltr] .q-col-gutter-lg-none,[dir=ltr] .q-col-gutter-lg-x-none{margin-left:0}[dir=rtl] .q-col-gutter-lg-none,[dir=rtl] .q-col-gutter-lg-x-none{margin-right:0}[dir=ltr] .q-col-gutter-lg-none>*,[dir=ltr] .q-col-gutter-lg-x-none>*{padding-left:0}[dir=rtl] .q-col-gutter-lg-none>*,[dir=rtl] .q-col-gutter-lg-x-none>*{padding-right:0}[dir] .q-col-gutter-lg-none,[dir] .q-col-gutter-lg-y-none{margin-top:0}[dir] .q-col-gutter-lg-none>*,[dir] .q-col-gutter-lg-y-none>*{padding-top:0}[dir=ltr] .q-gutter-lg-x-xs,[dir=ltr] .q-gutter-lg-xs{margin-left:-4px}[dir=rtl] .q-gutter-lg-x-xs,[dir=rtl] .q-gutter-lg-xs{margin-right:-4px}[dir=ltr] .q-gutter-lg-x-xs>*,[dir=ltr] .q-gutter-lg-xs>*{margin-left:4px}[dir=rtl] .q-gutter-lg-x-xs>*,[dir=rtl] .q-gutter-lg-xs>*{margin-right:4px}[dir] .q-gutter-lg-xs,[dir] .q-gutter-lg-y-xs{margin-top:-4px}[dir] .q-gutter-lg-xs>*,[dir] .q-gutter-lg-y-xs>*{margin-top:4px}[dir=ltr] .q-col-gutter-lg-x-xs,[dir=ltr] .q-col-gutter-lg-xs{margin-left:-4px}[dir=rtl] .q-col-gutter-lg-x-xs,[dir=rtl] .q-col-gutter-lg-xs{margin-right:-4px}[dir=ltr] .q-col-gutter-lg-x-xs>*,[dir=ltr] .q-col-gutter-lg-xs>*{padding-left:4px}[dir=rtl] .q-col-gutter-lg-x-xs>*,[dir=rtl] .q-col-gutter-lg-xs>*{padding-right:4px}[dir] .q-col-gutter-lg-xs,[dir] .q-col-gutter-lg-y-xs{margin-top:-4px}[dir] .q-col-gutter-lg-xs>*,[dir] .q-col-gutter-lg-y-xs>*{padding-top:4px}[dir=ltr] .q-gutter-lg-sm,[dir=ltr] .q-gutter-lg-x-sm{margin-left:-8px}[dir=rtl] .q-gutter-lg-sm,[dir=rtl] .q-gutter-lg-x-sm{margin-right:-8px}[dir=ltr] .q-gutter-lg-sm>*,[dir=ltr] .q-gutter-lg-x-sm>*{margin-left:8px}[dir=rtl] .q-gutter-lg-sm>*,[dir=rtl] .q-gutter-lg-x-sm>*{margin-right:8px}[dir] .q-gutter-lg-sm,[dir] .q-gutter-lg-y-sm{margin-top:-8px}[dir] .q-gutter-lg-sm>*,[dir] .q-gutter-lg-y-sm>*{margin-top:8px}[dir=ltr] .q-col-gutter-lg-sm,[dir=ltr] .q-col-gutter-lg-x-sm{margin-left:-8px}[dir=rtl] .q-col-gutter-lg-sm,[dir=rtl] .q-col-gutter-lg-x-sm{margin-right:-8px}[dir=ltr] .q-col-gutter-lg-sm>*,[dir=ltr] .q-col-gutter-lg-x-sm>*{padding-left:8px}[dir=rtl] .q-col-gutter-lg-sm>*,[dir=rtl] .q-col-gutter-lg-x-sm>*{padding-right:8px}[dir] .q-col-gutter-lg-sm,[dir] .q-col-gutter-lg-y-sm{margin-top:-8px}[dir] .q-col-gutter-lg-sm>*,[dir] .q-col-gutter-lg-y-sm>*{padding-top:8px}[dir=ltr] .q-gutter-lg-md,[dir=ltr] .q-gutter-lg-x-md{margin-left:-16px}[dir=rtl] .q-gutter-lg-md,[dir=rtl] .q-gutter-lg-x-md{margin-right:-16px}[dir=ltr] .q-gutter-lg-md>*,[dir=ltr] .q-gutter-lg-x-md>*{margin-left:16px}[dir=rtl] .q-gutter-lg-md>*,[dir=rtl] .q-gutter-lg-x-md>*{margin-right:16px}[dir] .q-gutter-lg-md,[dir] .q-gutter-lg-y-md{margin-top:-16px}[dir] .q-gutter-lg-md>*,[dir] .q-gutter-lg-y-md>*{margin-top:16px}[dir=ltr] .q-col-gutter-lg-md,[dir=ltr] .q-col-gutter-lg-x-md{margin-left:-16px}[dir=rtl] .q-col-gutter-lg-md,[dir=rtl] .q-col-gutter-lg-x-md{margin-right:-16px}[dir=ltr] .q-col-gutter-lg-md>*,[dir=ltr] .q-col-gutter-lg-x-md>*{padding-left:16px}[dir=rtl] .q-col-gutter-lg-md>*,[dir=rtl] .q-col-gutter-lg-x-md>*{padding-right:16px}[dir] .q-col-gutter-lg-md,[dir] .q-col-gutter-lg-y-md{margin-top:-16px}[dir] .q-col-gutter-lg-md>*,[dir] .q-col-gutter-lg-y-md>*{padding-top:16px}[dir=ltr] .q-gutter-lg-lg,[dir=ltr] .q-gutter-lg-x-lg{margin-left:-24px}[dir=rtl] .q-gutter-lg-lg,[dir=rtl] .q-gutter-lg-x-lg{margin-right:-24px}[dir=ltr] .q-gutter-lg-lg>*,[dir=ltr] .q-gutter-lg-x-lg>*{margin-left:24px}[dir=rtl] .q-gutter-lg-lg>*,[dir=rtl] .q-gutter-lg-x-lg>*{margin-right:24px}[dir] .q-gutter-lg-lg,[dir] .q-gutter-lg-y-lg{margin-top:-24px}[dir] .q-gutter-lg-lg>*,[dir] .q-gutter-lg-y-lg>*{margin-top:24px}[dir=ltr] .q-col-gutter-lg-lg,[dir=ltr] .q-col-gutter-lg-x-lg{margin-left:-24px}[dir=rtl] .q-col-gutter-lg-lg,[dir=rtl] .q-col-gutter-lg-x-lg{margin-right:-24px}[dir=ltr] .q-col-gutter-lg-lg>*,[dir=ltr] .q-col-gutter-lg-x-lg>*{padding-left:24px}[dir=rtl] .q-col-gutter-lg-lg>*,[dir=rtl] .q-col-gutter-lg-x-lg>*{padding-right:24px}[dir] .q-col-gutter-lg-lg,[dir] .q-col-gutter-lg-y-lg{margin-top:-24px}[dir] .q-col-gutter-lg-lg>*,[dir] .q-col-gutter-lg-y-lg>*{padding-top:24px}[dir=ltr] .q-gutter-lg-x-xl,[dir=ltr] .q-gutter-lg-xl{margin-left:-48px}[dir=rtl] .q-gutter-lg-x-xl,[dir=rtl] .q-gutter-lg-xl{margin-right:-48px}[dir=ltr] .q-gutter-lg-x-xl>*,[dir=ltr] .q-gutter-lg-xl>*{margin-left:48px}[dir=rtl] .q-gutter-lg-x-xl>*,[dir=rtl] .q-gutter-lg-xl>*{margin-right:48px}[dir] .q-gutter-lg-xl,[dir] .q-gutter-lg-y-xl{margin-top:-48px}[dir] .q-gutter-lg-xl>*,[dir] .q-gutter-lg-y-xl>*{margin-top:48px}[dir=ltr] .q-col-gutter-lg-x-xl,[dir=ltr] .q-col-gutter-lg-xl{margin-left:-48px}[dir=rtl] .q-col-gutter-lg-x-xl,[dir=rtl] .q-col-gutter-lg-xl{margin-right:-48px}[dir=ltr] .q-col-gutter-lg-x-xl>*,[dir=ltr] .q-col-gutter-lg-xl>*{padding-left:48px}[dir=rtl] .q-col-gutter-lg-x-xl>*,[dir=rtl] .q-col-gutter-lg-xl>*{padding-right:48px}[dir] .q-col-gutter-lg-xl,[dir] .q-col-gutter-lg-y-xl{margin-top:-48px}[dir] .q-col-gutter-lg-xl>*,[dir] .q-col-gutter-lg-y-xl>*{padding-top:48px}.row-lg>.col-0,.row-lg>.col-xs-0{height:auto;width:0%}[dir=ltr] .row-lg>.offset-0,[dir=ltr] .row-lg>.offset-xs-0{margin-left:0%}[dir=rtl] .row-lg>.offset-0,[dir=rtl] .row-lg>.offset-xs-0{margin-right:0%}.column-lg>.col-0,.column-lg>.col-xs-0{height:0%;width:auto}.row-lg>.col-1,.row-lg>.col-xs-1{height:auto;width:8.3333%}[dir=ltr] .row-lg>.offset-1,[dir=ltr] .row-lg>.offset-xs-1{margin-left:8.3333%}[dir=rtl] .row-lg>.offset-1,[dir=rtl] .row-lg>.offset-xs-1{margin-right:8.3333%}.column-lg>.col-1,.column-lg>.col-xs-1{height:8.3333%;width:auto}.row-lg>.col-2,.row-lg>.col-xs-2{height:auto;width:16.6667%}[dir=ltr] .row-lg>.offset-2,[dir=ltr] .row-lg>.offset-xs-2{margin-left:16.6667%}[dir=rtl] .row-lg>.offset-2,[dir=rtl] .row-lg>.offset-xs-2{margin-right:16.6667%}.column-lg>.col-2,.column-lg>.col-xs-2{height:16.6667%;width:auto}.row-lg>.col-3,.row-lg>.col-xs-3{height:auto;width:25%}[dir=ltr] .row-lg>.offset-3,[dir=ltr] .row-lg>.offset-xs-3{margin-left:25%}[dir=rtl] .row-lg>.offset-3,[dir=rtl] .row-lg>.offset-xs-3{margin-right:25%}.column-lg>.col-3,.column-lg>.col-xs-3{height:25%;width:auto}.row-lg>.col-4,.row-lg>.col-xs-4{height:auto;width:33.3333%}[dir=ltr] .row-lg>.offset-4,[dir=ltr] .row-lg>.offset-xs-4{margin-left:33.3333%}[dir=rtl] .row-lg>.offset-4,[dir=rtl] .row-lg>.offset-xs-4{margin-right:33.3333%}.column-lg>.col-4,.column-lg>.col-xs-4{height:33.3333%;width:auto}.row-lg>.col-5,.row-lg>.col-xs-5{height:auto;width:41.6667%}[dir=ltr] .row-lg>.offset-5,[dir=ltr] .row-lg>.offset-xs-5{margin-left:41.6667%}[dir=rtl] .row-lg>.offset-5,[dir=rtl] .row-lg>.offset-xs-5{margin-right:41.6667%}.column-lg>.col-5,.column-lg>.col-xs-5{height:41.6667%;width:auto}.row-lg>.col-6,.row-lg>.col-xs-6{height:auto;width:50%}[dir=ltr] .row-lg>.offset-6,[dir=ltr] .row-lg>.offset-xs-6{margin-left:50%}[dir=rtl] .row-lg>.offset-6,[dir=rtl] .row-lg>.offset-xs-6{margin-right:50%}.column-lg>.col-6,.column-lg>.col-xs-6{height:50%;width:auto}.row-lg>.col-7,.row-lg>.col-xs-7{height:auto;width:58.3333%}[dir=ltr] .row-lg>.offset-7,[dir=ltr] .row-lg>.offset-xs-7{margin-left:58.3333%}[dir=rtl] .row-lg>.offset-7,[dir=rtl] .row-lg>.offset-xs-7{margin-right:58.3333%}.column-lg>.col-7,.column-lg>.col-xs-7{height:58.3333%;width:auto}.row-lg>.col-8,.row-lg>.col-xs-8{height:auto;width:66.6667%}[dir=ltr] .row-lg>.offset-8,[dir=ltr] .row-lg>.offset-xs-8{margin-left:66.6667%}[dir=rtl] .row-lg>.offset-8,[dir=rtl] .row-lg>.offset-xs-8{margin-right:66.6667%}.column-lg>.col-8,.column-lg>.col-xs-8{height:66.6667%;width:auto}.row-lg>.col-9,.row-lg>.col-xs-9{height:auto;width:75%}[dir=ltr] .row-lg>.offset-9,[dir=ltr] .row-lg>.offset-xs-9{margin-left:75%}[dir=rtl] .row-lg>.offset-9,[dir=rtl] .row-lg>.offset-xs-9{margin-right:75%}.column-lg>.col-9,.column-lg>.col-xs-9{height:75%;width:auto}.row-lg>.col-10,.row-lg>.col-xs-10{height:auto;width:83.3333%}[dir=ltr] .row-lg>.offset-10,[dir=ltr] .row-lg>.offset-xs-10{margin-left:83.3333%}[dir=rtl] .row-lg>.offset-10,[dir=rtl] .row-lg>.offset-xs-10{margin-right:83.3333%}.column-lg>.col-10,.column-lg>.col-xs-10{height:83.3333%;width:auto}.row-lg>.col-11,.row-lg>.col-xs-11{height:auto;width:91.6667%}[dir=ltr] .row-lg>.offset-11,[dir=ltr] .row-lg>.offset-xs-11{margin-left:91.6667%}[dir=rtl] .row-lg>.offset-11,[dir=rtl] .row-lg>.offset-xs-11{margin-right:91.6667%}.column-lg>.col-11,.column-lg>.col-xs-11{height:91.6667%;width:auto}.row-lg>.col-12,.row-lg>.col-xs-12{height:auto;width:100%}[dir=ltr] .row-lg>.offset-12,[dir=ltr] .row-lg>.offset-xs-12{margin-left:100%}[dir=rtl] .row-lg>.offset-12,[dir=rtl] .row-lg>.offset-xs-12{margin-right:100%}.column-lg>.col-12,.column-lg>.col-xs-12{height:100%;width:auto}.row-lg>.col-sm-0{height:auto;width:0%}[dir=ltr] .row-lg>.offset-sm-0{margin-left:0%}[dir=rtl] .row-lg>.offset-sm-0{margin-right:0%}.column-lg>.col-sm-0{height:0%;width:auto}.row-lg>.col-sm-1{height:auto;width:8.3333%}[dir=ltr] .row-lg>.offset-sm-1{margin-left:8.3333%}[dir=rtl] .row-lg>.offset-sm-1{margin-right:8.3333%}.column-lg>.col-sm-1{height:8.3333%;width:auto}.row-lg>.col-sm-2{height:auto;width:16.6667%}[dir=ltr] .row-lg>.offset-sm-2{margin-left:16.6667%}[dir=rtl] .row-lg>.offset-sm-2{margin-right:16.6667%}.column-lg>.col-sm-2{height:16.6667%;width:auto}.row-lg>.col-sm-3{height:auto;width:25%}[dir=ltr] .row-lg>.offset-sm-3{margin-left:25%}[dir=rtl] .row-lg>.offset-sm-3{margin-right:25%}.column-lg>.col-sm-3{height:25%;width:auto}.row-lg>.col-sm-4{height:auto;width:33.3333%}[dir=ltr] .row-lg>.offset-sm-4{margin-left:33.3333%}[dir=rtl] .row-lg>.offset-sm-4{margin-right:33.3333%}.column-lg>.col-sm-4{height:33.3333%;width:auto}.row-lg>.col-sm-5{height:auto;width:41.6667%}[dir=ltr] .row-lg>.offset-sm-5{margin-left:41.6667%}[dir=rtl] .row-lg>.offset-sm-5{margin-right:41.6667%}.column-lg>.col-sm-5{height:41.6667%;width:auto}.row-lg>.col-sm-6{height:auto;width:50%}[dir=ltr] .row-lg>.offset-sm-6{margin-left:50%}[dir=rtl] .row-lg>.offset-sm-6{margin-right:50%}.column-lg>.col-sm-6{height:50%;width:auto}.row-lg>.col-sm-7{height:auto;width:58.3333%}[dir=ltr] .row-lg>.offset-sm-7{margin-left:58.3333%}[dir=rtl] .row-lg>.offset-sm-7{margin-right:58.3333%}.column-lg>.col-sm-7{height:58.3333%;width:auto}.row-lg>.col-sm-8{height:auto;width:66.6667%}[dir=ltr] .row-lg>.offset-sm-8{margin-left:66.6667%}[dir=rtl] .row-lg>.offset-sm-8{margin-right:66.6667%}.column-lg>.col-sm-8{height:66.6667%;width:auto}.row-lg>.col-sm-9{height:auto;width:75%}[dir=ltr] .row-lg>.offset-sm-9{margin-left:75%}[dir=rtl] .row-lg>.offset-sm-9{margin-right:75%}.column-lg>.col-sm-9{height:75%;width:auto}.row-lg>.col-sm-10{height:auto;width:83.3333%}[dir=ltr] .row-lg>.offset-sm-10{margin-left:83.3333%}[dir=rtl] .row-lg>.offset-sm-10{margin-right:83.3333%}.column-lg>.col-sm-10{height:83.3333%;width:auto}.row-lg>.col-sm-11{height:auto;width:91.6667%}[dir=ltr] .row-lg>.offset-sm-11{margin-left:91.6667%}[dir=rtl] .row-lg>.offset-sm-11{margin-right:91.6667%}.column-lg>.col-sm-11{height:91.6667%;width:auto}.row-lg>.col-sm-12{height:auto;width:100%}[dir=ltr] .row-lg>.offset-sm-12{margin-left:100%}[dir=rtl] .row-lg>.offset-sm-12{margin-right:100%}.column-lg>.col-sm-12{height:100%;width:auto}.row-lg>.col-md-0{height:auto;width:0%}[dir=ltr] .row-lg>.offset-md-0{margin-left:0%}[dir=rtl] .row-lg>.offset-md-0{margin-right:0%}.column-lg>.col-md-0{height:0%;width:auto}.row-lg>.col-md-1{height:auto;width:8.3333%}[dir=ltr] .row-lg>.offset-md-1{margin-left:8.3333%}[dir=rtl] .row-lg>.offset-md-1{margin-right:8.3333%}.column-lg>.col-md-1{height:8.3333%;width:auto}.row-lg>.col-md-2{height:auto;width:16.6667%}[dir=ltr] .row-lg>.offset-md-2{margin-left:16.6667%}[dir=rtl] .row-lg>.offset-md-2{margin-right:16.6667%}.column-lg>.col-md-2{height:16.6667%;width:auto}.row-lg>.col-md-3{height:auto;width:25%}[dir=ltr] .row-lg>.offset-md-3{margin-left:25%}[dir=rtl] .row-lg>.offset-md-3{margin-right:25%}.column-lg>.col-md-3{height:25%;width:auto}.row-lg>.col-md-4{height:auto;width:33.3333%}[dir=ltr] .row-lg>.offset-md-4{margin-left:33.3333%}[dir=rtl] .row-lg>.offset-md-4{margin-right:33.3333%}.column-lg>.col-md-4{height:33.3333%;width:auto}.row-lg>.col-md-5{height:auto;width:41.6667%}[dir=ltr] .row-lg>.offset-md-5{margin-left:41.6667%}[dir=rtl] .row-lg>.offset-md-5{margin-right:41.6667%}.column-lg>.col-md-5{height:41.6667%;width:auto}.row-lg>.col-md-6{height:auto;width:50%}[dir=ltr] .row-lg>.offset-md-6{margin-left:50%}[dir=rtl] .row-lg>.offset-md-6{margin-right:50%}.column-lg>.col-md-6{height:50%;width:auto}.row-lg>.col-md-7{height:auto;width:58.3333%}[dir=ltr] .row-lg>.offset-md-7{margin-left:58.3333%}[dir=rtl] .row-lg>.offset-md-7{margin-right:58.3333%}.column-lg>.col-md-7{height:58.3333%;width:auto}.row-lg>.col-md-8{height:auto;width:66.6667%}[dir=ltr] .row-lg>.offset-md-8{margin-left:66.6667%}[dir=rtl] .row-lg>.offset-md-8{margin-right:66.6667%}.column-lg>.col-md-8{height:66.6667%;width:auto}.row-lg>.col-md-9{height:auto;width:75%}[dir=ltr] .row-lg>.offset-md-9{margin-left:75%}[dir=rtl] .row-lg>.offset-md-9{margin-right:75%}.column-lg>.col-md-9{height:75%;width:auto}.row-lg>.col-md-10{height:auto;width:83.3333%}[dir=ltr] .row-lg>.offset-md-10{margin-left:83.3333%}[dir=rtl] .row-lg>.offset-md-10{margin-right:83.3333%}.column-lg>.col-md-10{height:83.3333%;width:auto}.row-lg>.col-md-11{height:auto;width:91.6667%}[dir=ltr] .row-lg>.offset-md-11{margin-left:91.6667%}[dir=rtl] .row-lg>.offset-md-11{margin-right:91.6667%}.column-lg>.col-md-11{height:91.6667%;width:auto}.row-lg>.col-md-12{height:auto;width:100%}[dir=ltr] .row-lg>.offset-md-12{margin-left:100%}[dir=rtl] .row-lg>.offset-md-12{margin-right:100%}.column-lg>.col-md-12{height:100%;width:auto}.row-lg>.col-lg-0{height:auto;width:0%}[dir=ltr] .row-lg>.offset-lg-0{margin-left:0%}[dir=rtl] .row-lg>.offset-lg-0{margin-right:0%}.column-lg>.col-lg-0{height:0%;width:auto}.row-lg>.col-lg-1{height:auto;width:8.3333%}[dir=ltr] .row-lg>.offset-lg-1{margin-left:8.3333%}[dir=rtl] .row-lg>.offset-lg-1{margin-right:8.3333%}.column-lg>.col-lg-1{height:8.3333%;width:auto}.row-lg>.col-lg-2{height:auto;width:16.6667%}[dir=ltr] .row-lg>.offset-lg-2{margin-left:16.6667%}[dir=rtl] .row-lg>.offset-lg-2{margin-right:16.6667%}.column-lg>.col-lg-2{height:16.6667%;width:auto}.row-lg>.col-lg-3{height:auto;width:25%}[dir=ltr] .row-lg>.offset-lg-3{margin-left:25%}[dir=rtl] .row-lg>.offset-lg-3{margin-right:25%}.column-lg>.col-lg-3{height:25%;width:auto}.row-lg>.col-lg-4{height:auto;width:33.3333%}[dir=ltr] .row-lg>.offset-lg-4{margin-left:33.3333%}[dir=rtl] .row-lg>.offset-lg-4{margin-right:33.3333%}.column-lg>.col-lg-4{height:33.3333%;width:auto}.row-lg>.col-lg-5{height:auto;width:41.6667%}[dir=ltr] .row-lg>.offset-lg-5{margin-left:41.6667%}[dir=rtl] .row-lg>.offset-lg-5{margin-right:41.6667%}.column-lg>.col-lg-5{height:41.6667%;width:auto}.row-lg>.col-lg-6{height:auto;width:50%}[dir=ltr] .row-lg>.offset-lg-6{margin-left:50%}[dir=rtl] .row-lg>.offset-lg-6{margin-right:50%}.column-lg>.col-lg-6{height:50%;width:auto}.row-lg>.col-lg-7{height:auto;width:58.3333%}[dir=ltr] .row-lg>.offset-lg-7{margin-left:58.3333%}[dir=rtl] .row-lg>.offset-lg-7{margin-right:58.3333%}.column-lg>.col-lg-7{height:58.3333%;width:auto}.row-lg>.col-lg-8{height:auto;width:66.6667%}[dir=ltr] .row-lg>.offset-lg-8{margin-left:66.6667%}[dir=rtl] .row-lg>.offset-lg-8{margin-right:66.6667%}.column-lg>.col-lg-8{height:66.6667%;width:auto}.row-lg>.col-lg-9{height:auto;width:75%}[dir=ltr] .row-lg>.offset-lg-9{margin-left:75%}[dir=rtl] .row-lg>.offset-lg-9{margin-right:75%}.column-lg>.col-lg-9{height:75%;width:auto}.row-lg>.col-lg-10{height:auto;width:83.3333%}[dir=ltr] .row-lg>.offset-lg-10{margin-left:83.3333%}[dir=rtl] .row-lg>.offset-lg-10{margin-right:83.3333%}.column-lg>.col-lg-10{height:83.3333%;width:auto}.row-lg>.col-lg-11{height:auto;width:91.6667%}[dir=ltr] .row-lg>.offset-lg-11{margin-left:91.6667%}[dir=rtl] .row-lg>.offset-lg-11{margin-right:91.6667%}.column-lg>.col-lg-11{height:91.6667%;width:auto}.row-lg>.col-lg-12{height:auto;width:100%}[dir=ltr] .row-lg>.offset-lg-12{margin-left:100%}[dir=rtl] .row-lg>.offset-lg-12{margin-right:100%}.column-lg>.col-lg-12{height:100%;width:auto}}@media (min-width:1920px){.flex-xl-block{display:block}.flex-xl-inline{display:inline-block}[dir] .q-pa-xl-none{padding:0 0}[dir=ltr] .q-pl-xl-none,[dir=ltr] .q-px-xl-none{padding-left:0}[dir=ltr] .q-pr-xl-none,[dir=ltr] .q-px-xl-none,[dir=rtl] .q-pl-xl-none,[dir=rtl] .q-px-xl-none{padding-right:0}[dir=rtl] .q-pr-xl-none,[dir=rtl] .q-px-xl-none{padding-left:0}[dir] .q-pt-xl-none,[dir] .q-py-xl-none{padding-top:0}[dir] .q-pb-xl-none,[dir] .q-py-xl-none{padding-bottom:0}[dir] .q-ma-xl-none{margin:0 0}[dir=ltr] .q-ml-xl-none,[dir=ltr] .q-mx-xl-none{margin-left:0}[dir=ltr] .q-mr-xl-none,[dir=ltr] .q-mx-xl-none,[dir=rtl] .q-ml-xl-none,[dir=rtl] .q-mx-xl-none{margin-right:0}[dir=rtl] .q-mr-xl-none,[dir=rtl] .q-mx-xl-none{margin-left:0}[dir] .q-mt-xl-none,[dir] .q-my-xl-none{margin-top:0}[dir] .q-mb-xl-none,[dir] .q-my-xl-none{margin-bottom:0}[dir] .q-pa-xl-xs{padding:4px 4px}[dir=ltr] .q-pl-xl-xs,[dir=ltr] .q-px-xl-xs{padding-left:4px}[dir=ltr] .q-pr-xl-xs,[dir=ltr] .q-px-xl-xs,[dir=rtl] .q-pl-xl-xs,[dir=rtl] .q-px-xl-xs{padding-right:4px}[dir=rtl] .q-pr-xl-xs,[dir=rtl] .q-px-xl-xs{padding-left:4px}[dir] .q-pt-xl-xs,[dir] .q-py-xl-xs{padding-top:4px}[dir] .q-pb-xl-xs,[dir] .q-py-xl-xs{padding-bottom:4px}[dir] .q-ma-xl-xs{margin:4px 4px}[dir=ltr] .q-ml-xl-xs,[dir=ltr] .q-mx-xl-xs{margin-left:4px}[dir=ltr] .q-mr-xl-xs,[dir=ltr] .q-mx-xl-xs,[dir=rtl] .q-ml-xl-xs,[dir=rtl] .q-mx-xl-xs{margin-right:4px}[dir=rtl] .q-mr-xl-xs,[dir=rtl] .q-mx-xl-xs{margin-left:4px}[dir] .q-mt-xl-xs,[dir] .q-my-xl-xs{margin-top:4px}[dir] .q-mb-xl-xs,[dir] .q-my-xl-xs{margin-bottom:4px}[dir] .q-pa-xl-sm{padding:8px 8px}[dir=ltr] .q-pl-xl-sm,[dir=ltr] .q-px-xl-sm{padding-left:8px}[dir=ltr] .q-pr-xl-sm,[dir=ltr] .q-px-xl-sm,[dir=rtl] .q-pl-xl-sm,[dir=rtl] .q-px-xl-sm{padding-right:8px}[dir=rtl] .q-pr-xl-sm,[dir=rtl] .q-px-xl-sm{padding-left:8px}[dir] .q-pt-xl-sm,[dir] .q-py-xl-sm{padding-top:8px}[dir] .q-pb-xl-sm,[dir] .q-py-xl-sm{padding-bottom:8px}[dir] .q-ma-xl-sm{margin:8px 8px}[dir=ltr] .q-ml-xl-sm,[dir=ltr] .q-mx-xl-sm{margin-left:8px}[dir=ltr] .q-mr-xl-sm,[dir=ltr] .q-mx-xl-sm,[dir=rtl] .q-ml-xl-sm,[dir=rtl] .q-mx-xl-sm{margin-right:8px}[dir=rtl] .q-mr-xl-sm,[dir=rtl] .q-mx-xl-sm{margin-left:8px}[dir] .q-mt-xl-sm,[dir] .q-my-xl-sm{margin-top:8px}[dir] .q-mb-xl-sm,[dir] .q-my-xl-sm{margin-bottom:8px}[dir] .q-pa-xl-md{padding:16px 16px}[dir=ltr] .q-pl-xl-md,[dir=ltr] .q-px-xl-md{padding-left:16px}[dir=ltr] .q-pr-xl-md,[dir=ltr] .q-px-xl-md,[dir=rtl] .q-pl-xl-md,[dir=rtl] .q-px-xl-md{padding-right:16px}[dir=rtl] .q-pr-xl-md,[dir=rtl] .q-px-xl-md{padding-left:16px}[dir] .q-pt-xl-md,[dir] .q-py-xl-md{padding-top:16px}[dir] .q-pb-xl-md,[dir] .q-py-xl-md{padding-bottom:16px}[dir] .q-ma-xl-md{margin:16px 16px}[dir=ltr] .q-ml-xl-md,[dir=ltr] .q-mx-xl-md{margin-left:16px}[dir=ltr] .q-mr-xl-md,[dir=ltr] .q-mx-xl-md,[dir=rtl] .q-ml-xl-md,[dir=rtl] .q-mx-xl-md{margin-right:16px}[dir=rtl] .q-mr-xl-md,[dir=rtl] .q-mx-xl-md{margin-left:16px}[dir] .q-mt-xl-md,[dir] .q-my-xl-md{margin-top:16px}[dir] .q-mb-xl-md,[dir] .q-my-xl-md{margin-bottom:16px}[dir] .q-pa-xl-lg{padding:24px 24px}[dir=ltr] .q-pl-xl-lg,[dir=ltr] .q-px-xl-lg{padding-left:24px}[dir=ltr] .q-pr-xl-lg,[dir=ltr] .q-px-xl-lg,[dir=rtl] .q-pl-xl-lg,[dir=rtl] .q-px-xl-lg{padding-right:24px}[dir=rtl] .q-pr-xl-lg,[dir=rtl] .q-px-xl-lg{padding-left:24px}[dir] .q-pt-xl-lg,[dir] .q-py-xl-lg{padding-top:24px}[dir] .q-pb-xl-lg,[dir] .q-py-xl-lg{padding-bottom:24px}[dir] .q-ma-xl-lg{margin:24px 24px}[dir=ltr] .q-ml-xl-lg,[dir=ltr] .q-mx-xl-lg{margin-left:24px}[dir=ltr] .q-mr-xl-lg,[dir=ltr] .q-mx-xl-lg,[dir=rtl] .q-ml-xl-lg,[dir=rtl] .q-mx-xl-lg{margin-right:24px}[dir=rtl] .q-mr-xl-lg,[dir=rtl] .q-mx-xl-lg{margin-left:24px}[dir] .q-mt-xl-lg,[dir] .q-my-xl-lg{margin-top:24px}[dir] .q-mb-xl-lg,[dir] .q-my-xl-lg{margin-bottom:24px}[dir] .q-pa-xl-xl{padding:48px 48px}[dir=ltr] .q-pl-xl-xl,[dir=ltr] .q-px-xl-xl{padding-left:48px}[dir=ltr] .q-pr-xl-xl,[dir=ltr] .q-px-xl-xl,[dir=rtl] .q-pl-xl-xl,[dir=rtl] .q-px-xl-xl{padding-right:48px}[dir=rtl] .q-pr-xl-xl,[dir=rtl] .q-px-xl-xl{padding-left:48px}[dir] .q-pt-xl-xl,[dir] .q-py-xl-xl{padding-top:48px}[dir] .q-pb-xl-xl,[dir] .q-py-xl-xl{padding-bottom:48px}[dir] .q-ma-xl-xl{margin:48px 48px}[dir=ltr] .q-ml-xl-xl,[dir=ltr] .q-mx-xl-xl{margin-left:48px}[dir=ltr] .q-mr-xl-xl,[dir=ltr] .q-mx-xl-xl,[dir=rtl] .q-ml-xl-xl,[dir=rtl] .q-mx-xl-xl{margin-right:48px}[dir=rtl] .q-mr-xl-xl,[dir=rtl] .q-mx-xl-xl{margin-left:48px}[dir] .q-mt-xl-xl,[dir] .q-my-xl-xl{margin-top:48px}[dir] .q-mb-xl-xl,[dir] .q-my-xl-xl{margin-bottom:48px}[dir=ltr] .q-ml-xl-auto,[dir=ltr] .q-mx-xl-auto{margin-left:auto}[dir=ltr] .q-mr-xl-auto,[dir=ltr] .q-mx-xl-auto,[dir=rtl] .q-ml-xl-auto,[dir=rtl] .q-mx-xl-auto{margin-right:auto}[dir=rtl] .q-mr-xl-auto,[dir=rtl] .q-mx-xl-auto{margin-left:auto}.column.inline-xl,.flex.inline-xl,.row.inline-xl{display:inline-flex}.column-xl,.flex-xl,.row-xl{display:flex;flex-wrap:wrap}.column-xl.inline,.column-xl.inline-xl,.flex-xl.inline,.flex-xl.inline-xl,.row-xl.inline,.row-xl.inline-xl{display:inline-flex}.row.reverse-xl{flex-direction:row-reverse}.row-xl{flex-direction:row}.row-xl.reverse,.row-xl.reverse-xl{flex-direction:row-reverse}.column.reverse-xl{flex-direction:column-reverse}.column-xl{flex-direction:column}.column-xl.reverse,.column-xl.reverse-xl{flex-direction:column-reverse}.wrap-xl{flex-wrap:wrap}.no-wrap-xl{flex-wrap:nowrap}.reverse-wrap-xl{flex-wrap:wrap-reverse}.order-xl-first{order:-10000}.order-xl-last{order:10000}.order-xl-none{order:0}.justify-xl-start{justify-content:flex-start}.justify-xl-end{justify-content:flex-end}.flex-xl-center,.justify-xl-center{justify-content:center}.justify-xl-between{justify-content:space-between}.justify-xl-around{justify-content:space-around}.justify-xl-evenly{justify-content:space-evenly}.items-xl-start{align-items:flex-start}.items-xl-end{align-items:flex-end}.flex-xl-center,.items-xl-center{align-items:center}.items-xl-baseline{align-items:baseline}.items-xl-stretch{align-items:stretch}.content-xl-start{align-content:flex-start}.content-xl-end{align-content:flex-end}.content-xl-center{align-content:center}.content-xl-between{align-content:space-between}.content-xl-around{align-content:space-around}.self-xl-start{align-self:flex-start}.self-xl-end{align-self:flex-end}.self-xl-center{align-self:center}.self-xl-baseline{align-self:baseline}.self-xl-stretch{align-self:stretch}[dir=ltr] .q-gutter-xl-none,[dir=ltr] .q-gutter-xl-x-none{margin-left:0}[dir=rtl] .q-gutter-xl-none,[dir=rtl] .q-gutter-xl-x-none{margin-right:0}[dir=ltr] .q-gutter-xl-none>*,[dir=ltr] .q-gutter-xl-x-none>*{margin-left:0}[dir=rtl] .q-gutter-xl-none>*,[dir=rtl] .q-gutter-xl-x-none>*{margin-right:0}[dir] .q-gutter-xl-none,[dir] .q-gutter-xl-none>*,[dir] .q-gutter-xl-y-none,[dir] .q-gutter-xl-y-none>*{margin-top:0}[dir=ltr] .q-col-gutter-xl-none,[dir=ltr] .q-col-gutter-xl-x-none{margin-left:0}[dir=rtl] .q-col-gutter-xl-none,[dir=rtl] .q-col-gutter-xl-x-none{margin-right:0}[dir=ltr] .q-col-gutter-xl-none>*,[dir=ltr] .q-col-gutter-xl-x-none>*{padding-left:0}[dir=rtl] .q-col-gutter-xl-none>*,[dir=rtl] .q-col-gutter-xl-x-none>*{padding-right:0}[dir] .q-col-gutter-xl-none,[dir] .q-col-gutter-xl-y-none{margin-top:0}[dir] .q-col-gutter-xl-none>*,[dir] .q-col-gutter-xl-y-none>*{padding-top:0}[dir=ltr] .q-gutter-xl-x-xs,[dir=ltr] .q-gutter-xl-xs{margin-left:-4px}[dir=rtl] .q-gutter-xl-x-xs,[dir=rtl] .q-gutter-xl-xs{margin-right:-4px}[dir=ltr] .q-gutter-xl-x-xs>*,[dir=ltr] .q-gutter-xl-xs>*{margin-left:4px}[dir=rtl] .q-gutter-xl-x-xs>*,[dir=rtl] .q-gutter-xl-xs>*{margin-right:4px}[dir] .q-gutter-xl-xs,[dir] .q-gutter-xl-y-xs{margin-top:-4px}[dir] .q-gutter-xl-xs>*,[dir] .q-gutter-xl-y-xs>*{margin-top:4px}[dir=ltr] .q-col-gutter-xl-x-xs,[dir=ltr] .q-col-gutter-xl-xs{margin-left:-4px}[dir=rtl] .q-col-gutter-xl-x-xs,[dir=rtl] .q-col-gutter-xl-xs{margin-right:-4px}[dir=ltr] .q-col-gutter-xl-x-xs>*,[dir=ltr] .q-col-gutter-xl-xs>*{padding-left:4px}[dir=rtl] .q-col-gutter-xl-x-xs>*,[dir=rtl] .q-col-gutter-xl-xs>*{padding-right:4px}[dir] .q-col-gutter-xl-xs,[dir] .q-col-gutter-xl-y-xs{margin-top:-4px}[dir] .q-col-gutter-xl-xs>*,[dir] .q-col-gutter-xl-y-xs>*{padding-top:4px}[dir=ltr] .q-gutter-xl-sm,[dir=ltr] .q-gutter-xl-x-sm{margin-left:-8px}[dir=rtl] .q-gutter-xl-sm,[dir=rtl] .q-gutter-xl-x-sm{margin-right:-8px}[dir=ltr] .q-gutter-xl-sm>*,[dir=ltr] .q-gutter-xl-x-sm>*{margin-left:8px}[dir=rtl] .q-gutter-xl-sm>*,[dir=rtl] .q-gutter-xl-x-sm>*{margin-right:8px}[dir] .q-gutter-xl-sm,[dir] .q-gutter-xl-y-sm{margin-top:-8px}[dir] .q-gutter-xl-sm>*,[dir] .q-gutter-xl-y-sm>*{margin-top:8px}[dir=ltr] .q-col-gutter-xl-sm,[dir=ltr] .q-col-gutter-xl-x-sm{margin-left:-8px}[dir=rtl] .q-col-gutter-xl-sm,[dir=rtl] .q-col-gutter-xl-x-sm{margin-right:-8px}[dir=ltr] .q-col-gutter-xl-sm>*,[dir=ltr] .q-col-gutter-xl-x-sm>*{padding-left:8px}[dir=rtl] .q-col-gutter-xl-sm>*,[dir=rtl] .q-col-gutter-xl-x-sm>*{padding-right:8px}[dir] .q-col-gutter-xl-sm,[dir] .q-col-gutter-xl-y-sm{margin-top:-8px}[dir] .q-col-gutter-xl-sm>*,[dir] .q-col-gutter-xl-y-sm>*{padding-top:8px}[dir=ltr] .q-gutter-xl-md,[dir=ltr] .q-gutter-xl-x-md{margin-left:-16px}[dir=rtl] .q-gutter-xl-md,[dir=rtl] .q-gutter-xl-x-md{margin-right:-16px}[dir=ltr] .q-gutter-xl-md>*,[dir=ltr] .q-gutter-xl-x-md>*{margin-left:16px}[dir=rtl] .q-gutter-xl-md>*,[dir=rtl] .q-gutter-xl-x-md>*{margin-right:16px}[dir] .q-gutter-xl-md,[dir] .q-gutter-xl-y-md{margin-top:-16px}[dir] .q-gutter-xl-md>*,[dir] .q-gutter-xl-y-md>*{margin-top:16px}[dir=ltr] .q-col-gutter-xl-md,[dir=ltr] .q-col-gutter-xl-x-md{margin-left:-16px}[dir=rtl] .q-col-gutter-xl-md,[dir=rtl] .q-col-gutter-xl-x-md{margin-right:-16px}[dir=ltr] .q-col-gutter-xl-md>*,[dir=ltr] .q-col-gutter-xl-x-md>*{padding-left:16px}[dir=rtl] .q-col-gutter-xl-md>*,[dir=rtl] .q-col-gutter-xl-x-md>*{padding-right:16px}[dir] .q-col-gutter-xl-md,[dir] .q-col-gutter-xl-y-md{margin-top:-16px}[dir] .q-col-gutter-xl-md>*,[dir] .q-col-gutter-xl-y-md>*{padding-top:16px}[dir=ltr] .q-gutter-xl-lg,[dir=ltr] .q-gutter-xl-x-lg{margin-left:-24px}[dir=rtl] .q-gutter-xl-lg,[dir=rtl] .q-gutter-xl-x-lg{margin-right:-24px}[dir=ltr] .q-gutter-xl-lg>*,[dir=ltr] .q-gutter-xl-x-lg>*{margin-left:24px}[dir=rtl] .q-gutter-xl-lg>*,[dir=rtl] .q-gutter-xl-x-lg>*{margin-right:24px}[dir] .q-gutter-xl-lg,[dir] .q-gutter-xl-y-lg{margin-top:-24px}[dir] .q-gutter-xl-lg>*,[dir] .q-gutter-xl-y-lg>*{margin-top:24px}[dir=ltr] .q-col-gutter-xl-lg,[dir=ltr] .q-col-gutter-xl-x-lg{margin-left:-24px}[dir=rtl] .q-col-gutter-xl-lg,[dir=rtl] .q-col-gutter-xl-x-lg{margin-right:-24px}[dir=ltr] .q-col-gutter-xl-lg>*,[dir=ltr] .q-col-gutter-xl-x-lg>*{padding-left:24px}[dir=rtl] .q-col-gutter-xl-lg>*,[dir=rtl] .q-col-gutter-xl-x-lg>*{padding-right:24px}[dir] .q-col-gutter-xl-lg,[dir] .q-col-gutter-xl-y-lg{margin-top:-24px}[dir] .q-col-gutter-xl-lg>*,[dir] .q-col-gutter-xl-y-lg>*{padding-top:24px}[dir=ltr] .q-gutter-xl-x-xl,[dir=ltr] .q-gutter-xl-xl{margin-left:-48px}[dir=rtl] .q-gutter-xl-x-xl,[dir=rtl] .q-gutter-xl-xl{margin-right:-48px}[dir=ltr] .q-gutter-xl-x-xl>*,[dir=ltr] .q-gutter-xl-xl>*{margin-left:48px}[dir=rtl] .q-gutter-xl-x-xl>*,[dir=rtl] .q-gutter-xl-xl>*{margin-right:48px}[dir] .q-gutter-xl-xl,[dir] .q-gutter-xl-y-xl{margin-top:-48px}[dir] .q-gutter-xl-xl>*,[dir] .q-gutter-xl-y-xl>*{margin-top:48px}[dir=ltr] .q-col-gutter-xl-x-xl,[dir=ltr] .q-col-gutter-xl-xl{margin-left:-48px}[dir=rtl] .q-col-gutter-xl-x-xl,[dir=rtl] .q-col-gutter-xl-xl{margin-right:-48px}[dir=ltr] .q-col-gutter-xl-x-xl>*,[dir=ltr] .q-col-gutter-xl-xl>*{padding-left:48px}[dir=rtl] .q-col-gutter-xl-x-xl>*,[dir=rtl] .q-col-gutter-xl-xl>*{padding-right:48px}[dir] .q-col-gutter-xl-xl,[dir] .q-col-gutter-xl-y-xl{margin-top:-48px}[dir] .q-col-gutter-xl-xl>*,[dir] .q-col-gutter-xl-y-xl>*{padding-top:48px}.row-xl>.col-0,.row-xl>.col-xs-0{height:auto;width:0%}[dir=ltr] .row-xl>.offset-0,[dir=ltr] .row-xl>.offset-xs-0{margin-left:0%}[dir=rtl] .row-xl>.offset-0,[dir=rtl] .row-xl>.offset-xs-0{margin-right:0%}.column-xl>.col-0,.column-xl>.col-xs-0{height:0%;width:auto}.row-xl>.col-1,.row-xl>.col-xs-1{height:auto;width:8.3333%}[dir=ltr] .row-xl>.offset-1,[dir=ltr] .row-xl>.offset-xs-1{margin-left:8.3333%}[dir=rtl] .row-xl>.offset-1,[dir=rtl] .row-xl>.offset-xs-1{margin-right:8.3333%}.column-xl>.col-1,.column-xl>.col-xs-1{height:8.3333%;width:auto}.row-xl>.col-2,.row-xl>.col-xs-2{height:auto;width:16.6667%}[dir=ltr] .row-xl>.offset-2,[dir=ltr] .row-xl>.offset-xs-2{margin-left:16.6667%}[dir=rtl] .row-xl>.offset-2,[dir=rtl] .row-xl>.offset-xs-2{margin-right:16.6667%}.column-xl>.col-2,.column-xl>.col-xs-2{height:16.6667%;width:auto}.row-xl>.col-3,.row-xl>.col-xs-3{height:auto;width:25%}[dir=ltr] .row-xl>.offset-3,[dir=ltr] .row-xl>.offset-xs-3{margin-left:25%}[dir=rtl] .row-xl>.offset-3,[dir=rtl] .row-xl>.offset-xs-3{margin-right:25%}.column-xl>.col-3,.column-xl>.col-xs-3{height:25%;width:auto}.row-xl>.col-4,.row-xl>.col-xs-4{height:auto;width:33.3333%}[dir=ltr] .row-xl>.offset-4,[dir=ltr] .row-xl>.offset-xs-4{margin-left:33.3333%}[dir=rtl] .row-xl>.offset-4,[dir=rtl] .row-xl>.offset-xs-4{margin-right:33.3333%}.column-xl>.col-4,.column-xl>.col-xs-4{height:33.3333%;width:auto}.row-xl>.col-5,.row-xl>.col-xs-5{height:auto;width:41.6667%}[dir=ltr] .row-xl>.offset-5,[dir=ltr] .row-xl>.offset-xs-5{margin-left:41.6667%}[dir=rtl] .row-xl>.offset-5,[dir=rtl] .row-xl>.offset-xs-5{margin-right:41.6667%}.column-xl>.col-5,.column-xl>.col-xs-5{height:41.6667%;width:auto}.row-xl>.col-6,.row-xl>.col-xs-6{height:auto;width:50%}[dir=ltr] .row-xl>.offset-6,[dir=ltr] .row-xl>.offset-xs-6{margin-left:50%}[dir=rtl] .row-xl>.offset-6,[dir=rtl] .row-xl>.offset-xs-6{margin-right:50%}.column-xl>.col-6,.column-xl>.col-xs-6{height:50%;width:auto}.row-xl>.col-7,.row-xl>.col-xs-7{height:auto;width:58.3333%}[dir=ltr] .row-xl>.offset-7,[dir=ltr] .row-xl>.offset-xs-7{margin-left:58.3333%}[dir=rtl] .row-xl>.offset-7,[dir=rtl] .row-xl>.offset-xs-7{margin-right:58.3333%}.column-xl>.col-7,.column-xl>.col-xs-7{height:58.3333%;width:auto}.row-xl>.col-8,.row-xl>.col-xs-8{height:auto;width:66.6667%}[dir=ltr] .row-xl>.offset-8,[dir=ltr] .row-xl>.offset-xs-8{margin-left:66.6667%}[dir=rtl] .row-xl>.offset-8,[dir=rtl] .row-xl>.offset-xs-8{margin-right:66.6667%}.column-xl>.col-8,.column-xl>.col-xs-8{height:66.6667%;width:auto}.row-xl>.col-9,.row-xl>.col-xs-9{height:auto;width:75%}[dir=ltr] .row-xl>.offset-9,[dir=ltr] .row-xl>.offset-xs-9{margin-left:75%}[dir=rtl] .row-xl>.offset-9,[dir=rtl] .row-xl>.offset-xs-9{margin-right:75%}.column-xl>.col-9,.column-xl>.col-xs-9{height:75%;width:auto}.row-xl>.col-10,.row-xl>.col-xs-10{height:auto;width:83.3333%}[dir=ltr] .row-xl>.offset-10,[dir=ltr] .row-xl>.offset-xs-10{margin-left:83.3333%}[dir=rtl] .row-xl>.offset-10,[dir=rtl] .row-xl>.offset-xs-10{margin-right:83.3333%}.column-xl>.col-10,.column-xl>.col-xs-10{height:83.3333%;width:auto}.row-xl>.col-11,.row-xl>.col-xs-11{height:auto;width:91.6667%}[dir=ltr] .row-xl>.offset-11,[dir=ltr] .row-xl>.offset-xs-11{margin-left:91.6667%}[dir=rtl] .row-xl>.offset-11,[dir=rtl] .row-xl>.offset-xs-11{margin-right:91.6667%}.column-xl>.col-11,.column-xl>.col-xs-11{height:91.6667%;width:auto}.row-xl>.col-12,.row-xl>.col-xs-12{height:auto;width:100%}[dir=ltr] .row-xl>.offset-12,[dir=ltr] .row-xl>.offset-xs-12{margin-left:100%}[dir=rtl] .row-xl>.offset-12,[dir=rtl] .row-xl>.offset-xs-12{margin-right:100%}.column-xl>.col-12,.column-xl>.col-xs-12{height:100%;width:auto}.row-xl>.col-sm-0{height:auto;width:0%}[dir=ltr] .row-xl>.offset-sm-0{margin-left:0%}[dir=rtl] .row-xl>.offset-sm-0{margin-right:0%}.column-xl>.col-sm-0{height:0%;width:auto}.row-xl>.col-sm-1{height:auto;width:8.3333%}[dir=ltr] .row-xl>.offset-sm-1{margin-left:8.3333%}[dir=rtl] .row-xl>.offset-sm-1{margin-right:8.3333%}.column-xl>.col-sm-1{height:8.3333%;width:auto}.row-xl>.col-sm-2{height:auto;width:16.6667%}[dir=ltr] .row-xl>.offset-sm-2{margin-left:16.6667%}[dir=rtl] .row-xl>.offset-sm-2{margin-right:16.6667%}.column-xl>.col-sm-2{height:16.6667%;width:auto}.row-xl>.col-sm-3{height:auto;width:25%}[dir=ltr] .row-xl>.offset-sm-3{margin-left:25%}[dir=rtl] .row-xl>.offset-sm-3{margin-right:25%}.column-xl>.col-sm-3{height:25%;width:auto}.row-xl>.col-sm-4{height:auto;width:33.3333%}[dir=ltr] .row-xl>.offset-sm-4{margin-left:33.3333%}[dir=rtl] .row-xl>.offset-sm-4{margin-right:33.3333%}.column-xl>.col-sm-4{height:33.3333%;width:auto}.row-xl>.col-sm-5{height:auto;width:41.6667%}[dir=ltr] .row-xl>.offset-sm-5{margin-left:41.6667%}[dir=rtl] .row-xl>.offset-sm-5{margin-right:41.6667%}.column-xl>.col-sm-5{height:41.6667%;width:auto}.row-xl>.col-sm-6{height:auto;width:50%}[dir=ltr] .row-xl>.offset-sm-6{margin-left:50%}[dir=rtl] .row-xl>.offset-sm-6{margin-right:50%}.column-xl>.col-sm-6{height:50%;width:auto}.row-xl>.col-sm-7{height:auto;width:58.3333%}[dir=ltr] .row-xl>.offset-sm-7{margin-left:58.3333%}[dir=rtl] .row-xl>.offset-sm-7{margin-right:58.3333%}.column-xl>.col-sm-7{height:58.3333%;width:auto}.row-xl>.col-sm-8{height:auto;width:66.6667%}[dir=ltr] .row-xl>.offset-sm-8{margin-left:66.6667%}[dir=rtl] .row-xl>.offset-sm-8{margin-right:66.6667%}.column-xl>.col-sm-8{height:66.6667%;width:auto}.row-xl>.col-sm-9{height:auto;width:75%}[dir=ltr] .row-xl>.offset-sm-9{margin-left:75%}[dir=rtl] .row-xl>.offset-sm-9{margin-right:75%}.column-xl>.col-sm-9{height:75%;width:auto}.row-xl>.col-sm-10{height:auto;width:83.3333%}[dir=ltr] .row-xl>.offset-sm-10{margin-left:83.3333%}[dir=rtl] .row-xl>.offset-sm-10{margin-right:83.3333%}.column-xl>.col-sm-10{height:83.3333%;width:auto}.row-xl>.col-sm-11{height:auto;width:91.6667%}[dir=ltr] .row-xl>.offset-sm-11{margin-left:91.6667%}[dir=rtl] .row-xl>.offset-sm-11{margin-right:91.6667%}.column-xl>.col-sm-11{height:91.6667%;width:auto}.row-xl>.col-sm-12{height:auto;width:100%}[dir=ltr] .row-xl>.offset-sm-12{margin-left:100%}[dir=rtl] .row-xl>.offset-sm-12{margin-right:100%}.column-xl>.col-sm-12{height:100%;width:auto}.row-xl>.col-md-0{height:auto;width:0%}[dir=ltr] .row-xl>.offset-md-0{margin-left:0%}[dir=rtl] .row-xl>.offset-md-0{margin-right:0%}.column-xl>.col-md-0{height:0%;width:auto}.row-xl>.col-md-1{height:auto;width:8.3333%}[dir=ltr] .row-xl>.offset-md-1{margin-left:8.3333%}[dir=rtl] .row-xl>.offset-md-1{margin-right:8.3333%}.column-xl>.col-md-1{height:8.3333%;width:auto}.row-xl>.col-md-2{height:auto;width:16.6667%}[dir=ltr] .row-xl>.offset-md-2{margin-left:16.6667%}[dir=rtl] .row-xl>.offset-md-2{margin-right:16.6667%}.column-xl>.col-md-2{height:16.6667%;width:auto}.row-xl>.col-md-3{height:auto;width:25%}[dir=ltr] .row-xl>.offset-md-3{margin-left:25%}[dir=rtl] .row-xl>.offset-md-3{margin-right:25%}.column-xl>.col-md-3{height:25%;width:auto}.row-xl>.col-md-4{height:auto;width:33.3333%}[dir=ltr] .row-xl>.offset-md-4{margin-left:33.3333%}[dir=rtl] .row-xl>.offset-md-4{margin-right:33.3333%}.column-xl>.col-md-4{height:33.3333%;width:auto}.row-xl>.col-md-5{height:auto;width:41.6667%}[dir=ltr] .row-xl>.offset-md-5{margin-left:41.6667%}[dir=rtl] .row-xl>.offset-md-5{margin-right:41.6667%}.column-xl>.col-md-5{height:41.6667%;width:auto}.row-xl>.col-md-6{height:auto;width:50%}[dir=ltr] .row-xl>.offset-md-6{margin-left:50%}[dir=rtl] .row-xl>.offset-md-6{margin-right:50%}.column-xl>.col-md-6{height:50%;width:auto}.row-xl>.col-md-7{height:auto;width:58.3333%}[dir=ltr] .row-xl>.offset-md-7{margin-left:58.3333%}[dir=rtl] .row-xl>.offset-md-7{margin-right:58.3333%}.column-xl>.col-md-7{height:58.3333%;width:auto}.row-xl>.col-md-8{height:auto;width:66.6667%}[dir=ltr] .row-xl>.offset-md-8{margin-left:66.6667%}[dir=rtl] .row-xl>.offset-md-8{margin-right:66.6667%}.column-xl>.col-md-8{height:66.6667%;width:auto}.row-xl>.col-md-9{height:auto;width:75%}[dir=ltr] .row-xl>.offset-md-9{margin-left:75%}[dir=rtl] .row-xl>.offset-md-9{margin-right:75%}.column-xl>.col-md-9{height:75%;width:auto}.row-xl>.col-md-10{height:auto;width:83.3333%}[dir=ltr] .row-xl>.offset-md-10{margin-left:83.3333%}[dir=rtl] .row-xl>.offset-md-10{margin-right:83.3333%}.column-xl>.col-md-10{height:83.3333%;width:auto}.row-xl>.col-md-11{height:auto;width:91.6667%}[dir=ltr] .row-xl>.offset-md-11{margin-left:91.6667%}[dir=rtl] .row-xl>.offset-md-11{margin-right:91.6667%}.column-xl>.col-md-11{height:91.6667%;width:auto}.row-xl>.col-md-12{height:auto;width:100%}[dir=ltr] .row-xl>.offset-md-12{margin-left:100%}[dir=rtl] .row-xl>.offset-md-12{margin-right:100%}.column-xl>.col-md-12{height:100%;width:auto}.row-xl>.col-lg-0{height:auto;width:0%}[dir=ltr] .row-xl>.offset-lg-0{margin-left:0%}[dir=rtl] .row-xl>.offset-lg-0{margin-right:0%}.column-xl>.col-lg-0{height:0%;width:auto}.row-xl>.col-lg-1{height:auto;width:8.3333%}[dir=ltr] .row-xl>.offset-lg-1{margin-left:8.3333%}[dir=rtl] .row-xl>.offset-lg-1{margin-right:8.3333%}.column-xl>.col-lg-1{height:8.3333%;width:auto}.row-xl>.col-lg-2{height:auto;width:16.6667%}[dir=ltr] .row-xl>.offset-lg-2{margin-left:16.6667%}[dir=rtl] .row-xl>.offset-lg-2{margin-right:16.6667%}.column-xl>.col-lg-2{height:16.6667%;width:auto}.row-xl>.col-lg-3{height:auto;width:25%}[dir=ltr] .row-xl>.offset-lg-3{margin-left:25%}[dir=rtl] .row-xl>.offset-lg-3{margin-right:25%}.column-xl>.col-lg-3{height:25%;width:auto}.row-xl>.col-lg-4{height:auto;width:33.3333%}[dir=ltr] .row-xl>.offset-lg-4{margin-left:33.3333%}[dir=rtl] .row-xl>.offset-lg-4{margin-right:33.3333%}.column-xl>.col-lg-4{height:33.3333%;width:auto}.row-xl>.col-lg-5{height:auto;width:41.6667%}[dir=ltr] .row-xl>.offset-lg-5{margin-left:41.6667%}[dir=rtl] .row-xl>.offset-lg-5{margin-right:41.6667%}.column-xl>.col-lg-5{height:41.6667%;width:auto}.row-xl>.col-lg-6{height:auto;width:50%}[dir=ltr] .row-xl>.offset-lg-6{margin-left:50%}[dir=rtl] .row-xl>.offset-lg-6{margin-right:50%}.column-xl>.col-lg-6{height:50%;width:auto}.row-xl>.col-lg-7{height:auto;width:58.3333%}[dir=ltr] .row-xl>.offset-lg-7{margin-left:58.3333%}[dir=rtl] .row-xl>.offset-lg-7{margin-right:58.3333%}.column-xl>.col-lg-7{height:58.3333%;width:auto}.row-xl>.col-lg-8{height:auto;width:66.6667%}[dir=ltr] .row-xl>.offset-lg-8{margin-left:66.6667%}[dir=rtl] .row-xl>.offset-lg-8{margin-right:66.6667%}.column-xl>.col-lg-8{height:66.6667%;width:auto}.row-xl>.col-lg-9{height:auto;width:75%}[dir=ltr] .row-xl>.offset-lg-9{margin-left:75%}[dir=rtl] .row-xl>.offset-lg-9{margin-right:75%}.column-xl>.col-lg-9{height:75%;width:auto}.row-xl>.col-lg-10{height:auto;width:83.3333%}[dir=ltr] .row-xl>.offset-lg-10{margin-left:83.3333%}[dir=rtl] .row-xl>.offset-lg-10{margin-right:83.3333%}.column-xl>.col-lg-10{height:83.3333%;width:auto}.row-xl>.col-lg-11{height:auto;width:91.6667%}[dir=ltr] .row-xl>.offset-lg-11{margin-left:91.6667%}[dir=rtl] .row-xl>.offset-lg-11{margin-right:91.6667%}.column-xl>.col-lg-11{height:91.6667%;width:auto}.row-xl>.col-lg-12{height:auto;width:100%}[dir=ltr] .row-xl>.offset-lg-12{margin-left:100%}[dir=rtl] .row-xl>.offset-lg-12{margin-right:100%}.column-xl>.col-lg-12{height:100%;width:auto}.row-xl>.col-xl-0{height:auto;width:0%}[dir=ltr] .row-xl>.offset-xl-0{margin-left:0%}[dir=rtl] .row-xl>.offset-xl-0{margin-right:0%}.column-xl>.col-xl-0{height:0%;width:auto}.row-xl>.col-xl-1{height:auto;width:8.3333%}[dir=ltr] .row-xl>.offset-xl-1{margin-left:8.3333%}[dir=rtl] .row-xl>.offset-xl-1{margin-right:8.3333%}.column-xl>.col-xl-1{height:8.3333%;width:auto}.row-xl>.col-xl-2{height:auto;width:16.6667%}[dir=ltr] .row-xl>.offset-xl-2{margin-left:16.6667%}[dir=rtl] .row-xl>.offset-xl-2{margin-right:16.6667%}.column-xl>.col-xl-2{height:16.6667%;width:auto}.row-xl>.col-xl-3{height:auto;width:25%}[dir=ltr] .row-xl>.offset-xl-3{margin-left:25%}[dir=rtl] .row-xl>.offset-xl-3{margin-right:25%}.column-xl>.col-xl-3{height:25%;width:auto}.row-xl>.col-xl-4{height:auto;width:33.3333%}[dir=ltr] .row-xl>.offset-xl-4{margin-left:33.3333%}[dir=rtl] .row-xl>.offset-xl-4{margin-right:33.3333%}.column-xl>.col-xl-4{height:33.3333%;width:auto}.row-xl>.col-xl-5{height:auto;width:41.6667%}[dir=ltr] .row-xl>.offset-xl-5{margin-left:41.6667%}[dir=rtl] .row-xl>.offset-xl-5{margin-right:41.6667%}.column-xl>.col-xl-5{height:41.6667%;width:auto}.row-xl>.col-xl-6{height:auto;width:50%}[dir=ltr] .row-xl>.offset-xl-6{margin-left:50%}[dir=rtl] .row-xl>.offset-xl-6{margin-right:50%}.column-xl>.col-xl-6{height:50%;width:auto}.row-xl>.col-xl-7{height:auto;width:58.3333%}[dir=ltr] .row-xl>.offset-xl-7{margin-left:58.3333%}[dir=rtl] .row-xl>.offset-xl-7{margin-right:58.3333%}.column-xl>.col-xl-7{height:58.3333%;width:auto}.row-xl>.col-xl-8{height:auto;width:66.6667%}[dir=ltr] .row-xl>.offset-xl-8{margin-left:66.6667%}[dir=rtl] .row-xl>.offset-xl-8{margin-right:66.6667%}.column-xl>.col-xl-8{height:66.6667%;width:auto}.row-xl>.col-xl-9{height:auto;width:75%}[dir=ltr] .row-xl>.offset-xl-9{margin-left:75%}[dir=rtl] .row-xl>.offset-xl-9{margin-right:75%}.column-xl>.col-xl-9{height:75%;width:auto}.row-xl>.col-xl-10{height:auto;width:83.3333%}[dir=ltr] .row-xl>.offset-xl-10{margin-left:83.3333%}[dir=rtl] .row-xl>.offset-xl-10{margin-right:83.3333%}.column-xl>.col-xl-10{height:83.3333%;width:auto}.row-xl>.col-xl-11{height:auto;width:91.6667%}[dir=ltr] .row-xl>.offset-xl-11{margin-left:91.6667%}[dir=rtl] .row-xl>.offset-xl-11{margin-right:91.6667%}.column-xl>.col-xl-11{height:91.6667%;width:auto}.row-xl>.col-xl-12{height:auto;width:100%}[dir=ltr] .row-xl>.offset-xl-12{margin-left:100%}[dir=rtl] .row-xl>.offset-xl-12{margin-right:100%}.column-xl>.col-xl-12{height:100%;width:auto}} \ No newline at end of file diff --git a/dist/quasar.common.js b/dist/quasar.common.js new file mode 100644 index 00000000000..795dd9f663c --- /dev/null +++ b/dist/quasar.common.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +"use strict";var Vue=require("vue");function _interopDefaultLegacy(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var Vue__default=_interopDefaultLegacy(Vue),version="1.22.0-beta.3";const isSSR="undefined"==typeof window;let iosCorrection,fromSSR=!1,onSSR=isSSR;function getMatch(t,e){const i=/(edge|edga|edgios)\/([\w.]+)/.exec(t)||/(opr)[\/]([\w.]+)/.exec(t)||/(vivaldi)[\/]([\w.]+)/.exec(t)||/(chrome|crios)[\/]([\w.]+)/.exec(t)||/(iemobile)[\/]([\w.]+)/.exec(t)||/(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(t)||/(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(t)||/(firefox|fxios)[\/]([\w.]+)/.exec(t)||/(webkit)[\/]([\w.]+)/.exec(t)||/(opera)(?:.*version|)[\/]([\w.]+)/.exec(t)||/(msie) ([\w.]+)/.exec(t)||t.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(t)||t.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(t)||[];return{browser:i[5]||i[3]||i[1]||"",version:i[2]||i[4]||"0",versionNumber:i[4]||i[2]||"0",platform:e[0]||""}}function getPlatformMatch(t){return/(ipad)/.exec(t)||/(ipod)/.exec(t)||/(windows phone)/.exec(t)||/(iphone)/.exec(t)||/(kindle)/.exec(t)||/(silk)/.exec(t)||/(android)/.exec(t)||/(win)/.exec(t)||/(mac)/.exec(t)||/(linux)/.exec(t)||/(cros)/.exec(t)||/(playbook)/.exec(t)||/(bb)/.exec(t)||/(blackberry)/.exec(t)||[]}const hasTouch=!1===isSSR&&("ontouchstart"in window||window.navigator.maxTouchPoints>0);function applyIosCorrection(t){iosCorrection={is:{...t}},delete t.mac,delete t.desktop;const e=Math.min(window.innerHeight,window.innerWidth)>414?"ipad":"iphone";Object.assign(t,{mobile:!0,ios:!0,platform:e,[e]:!0})}function getPlatform(t){const e=t.toLowerCase(),i=getMatch(e,getPlatformMatch(e)),s={};i.browser&&(s[i.browser]=!0,s.version=i.version,s.versionNumber=parseInt(i.versionNumber,10)),i.platform&&(s[i.platform]=!0);const o=s.android||s.ios||s.bb||s.blackberry||s.ipad||s.iphone||s.ipod||s.kindle||s.playbook||s.silk||s["windows phone"];return!0===o||e.indexOf("mobile")>-1?(s.mobile=!0,s.edga||s.edgios?(s.edge=!0,i.browser="edge"):s.crios?(s.chrome=!0,i.browser="chrome"):s.fxios&&(s.firefox=!0,i.browser="firefox")):s.desktop=!0,(s.ipod||s.ipad||s.iphone)&&(s.ios=!0),s["windows phone"]&&(s.winphone=!0,delete s["windows phone"]),(s.chrome||s.opr||s.safari||s.vivaldi||!0===s.mobile&&!0!==s.ios&&!0!==o)&&(s.webkit=!0),(s.rv||s.iemobile)&&(i.browser="ie",s.ie=!0),(s.safari&&s.blackberry||s.bb)&&(i.browser="blackberry",s.blackberry=!0),s.safari&&s.playbook&&(i.browser="playbook",s.playbook=!0),s.opr&&(i.browser="opera",s.opera=!0),s.safari&&s.android&&(i.browser="android",s.android=!0),s.safari&&s.kindle&&(i.browser="kindle",s.kindle=!0),s.safari&&s.silk&&(i.browser="silk",s.silk=!0),s.vivaldi&&(i.browser="vivaldi",s.vivaldi=!0),s.name=i.browser,s.platform=i.platform,!1===isSSR&&(e.indexOf("electron")>-1?s.electron=!0:document.location.href.indexOf("-extension://")>-1?s.bex=!0:(void 0!==window.Capacitor?(s.capacitor=!0,s.nativeMobile=!0,s.nativeMobileWrapper="capacitor"):void 0!==window._cordovaNative||void 0!==window.cordova?(s.cordova=!0,s.nativeMobile=!0,s.nativeMobileWrapper="cordova"):!0===window.matchMedia("(display-mode: standalone)").matches&&(s.standalone=!0),!0===hasTouch&&!0===s.mac&&(!0===s.desktop&&!0===s.safari||!0===s.nativeMobile&&!0!==s.android&&!0!==s.ios&&!0!==s.ipad)&&applyIosCorrection(s)),!0===(fromSSR=void 0===s.nativeMobile&&void 0===s.electron&&null!==document.querySelector("[data-server-rendered]"))&&(onSSR=!0)),s}const userAgent=!0!==isSSR?navigator.userAgent||navigator.vendor||window.opera:"",ssrClient={has:{touch:!1,webStorage:!1},within:{iframe:!1}},client=!1===isSSR?{userAgent:userAgent,is:getPlatform(userAgent),has:{touch:hasTouch,webStorage:(()=>{try{if(window.localStorage)return!0}catch(t){}return!1})()},within:{iframe:window.self!==window.top}}:ssrClient,Platform={install(t,e){!0===isSSR?e.server.push((t,e)=>{t.platform=this.parseSSR(e.ssr)}):!0===fromSSR?(Object.assign(this,client,iosCorrection,ssrClient),e.takeover.push(t=>{onSSR=fromSSR=!1,Object.assign(t.platform,client),iosCorrection=void 0}),Vue__default.default.util.defineReactive(t,"platform",this)):(Object.assign(this,client),t.platform=this)}};!0===isSSR?Platform.parseSSR=(t=>{const e=t.req.headers["user-agent"]||t.req.headers["User-Agent"]||"";return{...client,userAgent:e,is:getPlatform(e)}}):!0===client.is.ios&&window.navigator.vendor.toLowerCase().indexOf("apple");const listenOpts={hasPassive:!1,passiveCapture:!0,notPassiveCapture:!0};try{var opts=Object.defineProperty({},"passive",{get(){Object.assign(listenOpts,{hasPassive:!0,passive:{passive:!0},notPassive:{passive:!1},passiveCapture:{passive:!0,capture:!0},notPassiveCapture:{passive:!1,capture:!0}})}});window.addEventListener("qtest",null,opts),window.removeEventListener("qtest",null,opts)}catch(t){}function noop(){}function leftClick(t){return 0===t.button}function middleClick(t){return 1===t.button}function rightClick(t){return 2===t.button}function position(t){return t.touches&&t.touches[0]?t=t.touches[0]:t.changedTouches&&t.changedTouches[0]?t=t.changedTouches[0]:t.targetTouches&&t.targetTouches[0]&&(t=t.targetTouches[0]),{top:t.clientY,left:t.clientX}}function getEventPath(t){if(t.path)return t.path;if(t.composedPath)return t.composedPath();const e=[];let i=t.target;for(;i;){if(e.push(i),"HTML"===i.tagName)return e.push(document),e.push(window),e;i=i.parentElement}}function eventOnAncestors(t,e){const{target:i}=t;for(;null!==e&&void 0!==e;){if(e===i)return!0;e=e.parentNode}return!1}const LINE_HEIGHT=40,PAGE_HEIGHT=800;function getMouseWheelDistance(t){let e=t.deltaX,i=t.deltaY;if((e||i)&&t.deltaMode){const s=1===t.deltaMode?LINE_HEIGHT:PAGE_HEIGHT;e*=s,i*=s}return t.shiftKey&&!e&&([i,e]=[e,i]),{x:e,y:i}}function stop(t){t.stopPropagation()}function prevent(t){!1!==t.cancelable&&t.preventDefault()}function stopAndPrevent(t){!1!==t.cancelable&&t.preventDefault(),t.stopPropagation()}function preventDraggable(t,e){if(void 0===t||!0===e&&!0===t.__dragPrevented)return;const i=!0===e?t=>{t.__dragPrevented=!0,t.addEventListener("dragstart",prevent,listenOpts.notPassiveCapture)}:t=>{delete t.__dragPrevented,t.removeEventListener("dragstart",prevent,listenOpts.notPassiveCapture)};t.querySelectorAll("a, img").forEach(i)}function create(t,{bubbles:e=!1,cancelable:i=!1}={}){try{return new CustomEvent(t,{bubbles:e,cancelable:i})}catch(s){const o=document.createEvent("Event");return o.initEvent(t,e,i),o}}function addEvt(t,e,i){const s=`__q_${e}_evt`;t[s]=void 0!==t[s]?t[s].concat(i):i,i.forEach(e=>{e[0].addEventListener(e[1],t[e[2]],listenOpts[e[3]])})}function cleanEvt(t,e){const i=`__q_${e}_evt`;void 0!==t[i]&&(t[i].forEach(e=>{e[0].removeEventListener(e[1],t[e[2]],listenOpts[e[3]])}),t[i]=void 0)}var event={listenOpts:listenOpts,leftClick:leftClick,middleClick:middleClick,rightClick:rightClick,position:position,getEventPath:getEventPath,eventOnAncestors:eventOnAncestors,getMouseWheelDistance:getMouseWheelDistance,stop:stop,prevent:prevent,stopAndPrevent:stopAndPrevent,preventDraggable:preventDraggable,create:create};const isJapanese=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/,isChinese=/[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u,isKorean=/[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/,isPlainText=/[a-z0-9_ -]$/i,props$2=["isKeyboard","isComposing","isPointer","isMouse","isTouch","isDrag","isContext","isPending","event"];function getObject$1(){return props$2.reduce((t,e)=>(t[e]="event"===e&&null,t),{})}const config=getObject$1();config.isComposing=void 0;const eventsTouch=[["touchstart",{...config,isTouch:!0,isPointer:!0,isPending:!0},!0],["touchend",{...config,isTouch:!0,isPointer:!0,isPending:!1}],["touchcancel",{...config,isTouch:!0,isPointer:!0,isPending:!1}]],eventsCleanClick=["mousestart","touchstart","dragstart"],eventsTouchEnd=eventsTouch.slice(1),{passiveCapture:passiveCapture$3,notPassiveCapture:notPassiveCapture$1}=listenOpts,preventClickCleanupHandlers=[];function clickCleanup(){const{documentElement:t}=document,e=preventClickCleanupHandlers.slice();preventClickCleanupHandlers.length=0,e.forEach(e=>{t.removeEventListener("click",e,notPassiveCapture$1)})}const Interaction={install(t,e){if(!0===isSSR)return void e.server.push(t=>{t.interaction=getObject$1(),t.interaction.preventClick=noop});Object.assign(this,getObject$1());const i=this;props$2.forEach(t=>{Vue__default.default.util.defineReactive(i,t,i[t])}),Vue__default.default.util.defineReactive(t,"interaction",this);const s=(t,e,o)=>{const n=Object.keys(e).filter(t=>void 0!==e[t]).map(t=>{const s=e[t];return"function"==typeof s?e=>{i[t]=s(e)}:()=>{i[t]=s}}),r="function"==typeof o?o:!0===o?t=>{eventsTouchEnd.forEach(e=>{const i=s(e[0],e[1],()=>{eventsTouchEnd.forEach(e=>{t.target.removeEventListener(e[0],i,passiveCapture$3)})});t.target.addEventListener(config[0],i,passiveCapture$3)})}:noop,a=!0===eventsCleanClick.includes(t)?clickCleanup:noop;return t=>{n.forEach(e=>{e(t)}),i.event=t,r(t),a()}},{documentElement:o}=document,n=!0===client.is.firefox?t=>!1===isPlainText.test(t):t=>!0===isJapanese.test(t)||!0===isChinese.test(t)||!0===isKorean.test(t);[["keydown",{...config,isKeyboard:!0,isPending:!0}],["keypress",{...config,isKeyboard:!0,isPending:!0}],["keyup",{...config,isKeyboard:!0,isPending:!1}],!0===client.is.ios?["compositionstart",{isComposing:t=>(t.target.qComposing=!0,!0)}]:["compositionupdate",{isComposing:t=>(!0!==t.target.qComposing&&"string"==typeof t.data&&!0===n(t.data)&&(t.target.qComposing=!0),!0)}],["compositionend",{isComposing:t=>(!0===t.target.qComposing&&(t.target.qComposing=!1),!1)}],["mousedown",{...config,isMouse:!0,isPointer:!0,isPending:!0}],["mouseup",{...config,isMouse:!0,isPointer:!0,isPending:!1}],["dragstart",{isKeyboard:!1,isDrag:!0,isPending:!0}],["dragend",{isKeyboard:!1,isDrag:!0,isPending:!1}],["dragcancel",{isKeyboard:!1,isDrag:!0,isPending:!1}],["drop",{isKeyboard:!1,isDrag:!0,isPending:!1}],["contextmenu",{isContext:!0,isPending:!1}]].forEach(t=>{o.addEventListener(t[0],s.apply(this,t),passiveCapture$3)}),!0===client.has.touch&&eventsTouch.forEach(t=>{o.addEventListener(t[0],s.apply(this,t),passiveCapture$3)})},preventClick(t,e){const{documentElement:i}=document,s=i=>{t===i.target&&(!0===e?stopAndPrevent(i):prevent(i)),clickCleanup()};i.addEventListener("click",s,notPassiveCapture$1),preventClickCleanupHandlers.push(s)}};function debounce(t,e=250,i){let s;function o(){const o=arguments;clearTimeout(s),!0===i&&void 0===s&&t.apply(this,o),s=setTimeout(()=>{s=void 0,!0!==i&&t.apply(this,o)},e)}return o.cancel=(()=>{clearTimeout(s)}),o}const SIZE_LIST=["sm","md","lg","xl"],{passive:passive$4}=listenOpts;var Screen={width:0,height:0,name:"xs",sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1,setSizes:noop,setDebounce:noop,install(t,e,i){if(!0===isSSR)return void(t.screen=this);const{visualViewport:s}=window,o=s||window,n=document.scrollingElement||document.documentElement,r=void 0===s||!0===client.is.mobile?()=>[Math.max(window.innerWidth,n.clientWidth),Math.max(window.innerHeight,n.clientHeight)]:()=>[s.width*s.scale+window.innerWidth-n.clientWidth,s.height*s.scale+window.innerHeight-n.clientHeight],a=void 0!==i.screen&&!0===i.screen.bodyClasses,l=t=>{const[e,i]=r();if(i!==this.height&&(this.height=i),e!==this.width)this.width=e;else if(!0!==t)return;let s=this.sizes;this.gt.xs=e>=s.sm,this.gt.sm=e>=s.md,this.gt.md=e>=s.lg,this.gt.lg=e>=s.xl,this.lt.sm=e{SIZE_LIST.forEach(e=>{void 0!==t[e]&&(d[e]=t[e])})}),this.setDebounce=(t=>{c=t});const u=()=>{const t=getComputedStyle(document.body);t.getPropertyValue("--q-size-sm")&&SIZE_LIST.forEach(e=>{this.sizes[e]=parseInt(t.getPropertyValue(`--q-size-${e}`),10)}),this.setSizes=(t=>{SIZE_LIST.forEach(e=>{t[e]&&(this.sizes[e]=t[e])}),l(!0)}),this.setDebounce=(t=>{void 0!==h&&o.removeEventListener("resize",h,passive$4),h=t>0?debounce(l,t):l,o.addEventListener("resize",h,passive$4)}),this.setDebounce(c),Object.keys(d).length>0?(this.setSizes(d),d=void 0):l(),!0===a&&"xs"===this.name&&document.body.classList.add("screen--xs")};!0===fromSSR?e.takeover.push(u):u(),Vue__default.default.util.defineReactive(t,"screen",this)}};const Dark={isActive:null,mode:!1,install(t,e,{dark:i}){if(this.isActive="auto"===i?null:!0===i,!0===isSSR)return e.server.push((t,e)=>{t.dark={isActive:null,mode:!1,set:i=>{e.ssr.Q_BODY_CLASSES=e.ssr.Q_BODY_CLASSES.replace(" body--light","").replace(" body--dark-auto","").replace(" body--dark","")+` body--${!0===i?"dark":"auto"===i?"dark-auto":"light"}`,t.dark.isActive="auto"===i?null:!0===i,t.dark.mode=i},toggle:()=>{t.dark.set(!1===t.dark.isActive)}},t.dark.set(i)}),void(this.set=noop);const s=void 0!==i&&i;if(!0===fromSSR){const t=t=>{this.__fromSSR=t},i=this.set;this.set=t,t(s),e.takeover.push(()=>{document.body.classList.remove("body--dark-auto"),this.set=i,this.set(this.__fromSSR)})}else this.set(s);Vue__default.default.util.defineReactive(this,"isActive",this.isActive),Vue__default.default.util.defineReactive(t,"dark",this)},set(t){this.mode=t,"auto"===t?(void 0===this.__media&&(this.__media=window.matchMedia("(prefers-color-scheme: dark)"),this.__updateMedia=(()=>{this.set("auto")}),this.__media.addListener(this.__updateMedia)),t=this.__media.matches):void 0!==this.__media&&(this.__media.removeListener(this.__updateMedia),this.__media=void 0),this.isActive=!0===t,document.body.classList.remove(`body--${!0===t?"light":"dark"}`),document.body.classList.add(`body--${!0===t?"dark":"light"}`)},toggle(){Dark.set(!1===Dark.isActive)},__media:void 0},getTrue=()=>!0;function filterInvalidPath(t){return"string"==typeof t&&""!==t&&"/"!==t&&"#/"!==t}function normalizeExitPath(t){return!0===t.startsWith("#")&&(t=t.substr(1)),!1===t.startsWith("/")&&(t="/"+t),!0===t.endsWith("/")&&(t=t.substr(0,t.length-1)),"#"+t}function getShouldExitFn(t){if(!1===t.backButtonExit)return()=>!1;if("*"===t.backButtonExit)return getTrue;const e=["#/"];return!0===Array.isArray(t.backButtonExit)&&e.push(...t.backButtonExit.filter(filterInvalidPath).map(normalizeExitPath)),()=>e.includes(window.location.hash)}var History={__history:[],add:noop,remove:noop,install(t){if(!0===isSSR)return;const{cordova:e,capacitor:i}=client.is;if(!0!==e&&!0!==i)return;const s=t[!0===e?"cordova":"capacitor"];if(void 0!==s&&!1===s.backButton)return;if(!0===i&&(void 0===window.Capacitor||void 0===window.Capacitor.Plugins.App))return;this.add=(t=>{void 0===t.condition&&(t.condition=getTrue),this.__history.push(t)}),this.remove=(t=>{const e=this.__history.indexOf(t);e>=0&&this.__history.splice(e,1)});const o=getShouldExitFn(Object.assign({backButtonExit:!0},s)),n=()=>{if(this.__history.length){const t=this.__history[this.__history.length-1];!0===t.condition()&&(this.__history.pop(),t.handler())}else!0===o()?navigator.app.exitApp():window.history.back()};!0===e?document.addEventListener("deviceready",()=>{document.addEventListener("backbutton",n,!1)}):window.Capacitor.Plugins.App.addListener("backButton",n)}},defaultLang={isoName:"en-us",nativeName:"English (US)",label:{clear:"Clear",ok:"OK",cancel:"Cancel",close:"Close",set:"Set",select:"Select",reset:"Reset",remove:"Remove",update:"Update",create:"Create",search:"Search",filter:"Filter",refresh:"Refresh",expand:function(t){return t?`Expand "${t}"`:"Expand"},collapse:function(t){return t?`Collapse "${t}"`:"Collapse"}},date:{days:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),daysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"days"},table:{noData:"No data available",noResults:"No matching records found",loading:"Loading...",selectedRecords:function(t){return 1===t?"1 record selected.":(0===t?"No":t)+" records selected."},recordsPerPage:"Records per page:",allRows:"All",pagination:function(t,e,i){return t+"-"+e+" of "+i},columns:"Columns"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}};function getLocale(){if(!0===isSSR)return;const t=navigator.language||navigator.languages[0]||navigator.browserLanguage||navigator.userLanguage||navigator.systemLanguage;return t?t.toLowerCase():void 0}var lang={getLocale:getLocale,install(t,e,i){this.set=((e=defaultLang,i)=>{const s={...e,rtl:!0===e.rtl,getLocale:getLocale};if(!0===isSSR){if(void 0===i)return void console.error("SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)");const t=!0===s.rtl?"rtl":"ltr",e=`lang=${s.isoName} dir=${t}`;s.set=i.$q.lang.set,i.Q_HTML_ATTRS=void 0!==i.Q_PREV_LANG?i.Q_HTML_ATTRS.replace(i.Q_PREV_LANG,e):e,i.Q_PREV_LANG=e,i.$q.lang=s}else{if(!1===fromSSR){const t=document.documentElement;t.setAttribute("dir",!0===s.rtl?"rtl":"ltr"),t.setAttribute("lang",s.isoName)}s.set=this.set,t.lang=this.props=s,this.isoName=s.isoName,this.nativeName=s.nativeName}});const s=i||defaultLang;!0===isSSR?(e.server.push((t,e)=>{t.lang={},t.lang.set=(t=>{this.set(t,e.ssr)}),t.lang.set(s)}),this.isoName!==s.isoName&&(this.isoName=s.isoName,this.nativeName=s.nativeName,this.props=s)):(Vue__default.default.util.defineReactive(t,"lang",{}),this.set(s))}};const reRGBA=/^rgb(a)?\((\d{1,3}),(\d{1,3}),(\d{1,3}),?([01]?\.?\d*?)?\)$/;function rgbToHex({r:t,g:e,b:i,a:s}){const o=void 0!==s;if(t=Math.round(t),e=Math.round(e),i=Math.round(i),t>255||e>255||i>255||o&&s>100)throw new TypeError("Expected 3 numbers below 256 (and optionally one below 100)");return s=o?(256|Math.round(255*s/100)).toString(16).slice(1):"","#"+(i|e<<8|t<<16|1<<24).toString(16).slice(1)+s}function rgbToString({r:t,g:e,b:i,a:s}){return`rgb${void 0!==s?"a":""}(${t},${e},${i}${void 0!==s?","+s/100:""})`}function hexToRgb(t){if("string"!=typeof t)throw new TypeError("Expected a string");3===(t=t.replace(/^#/,"")).length?t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:4===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);const e=parseInt(t,16);return t.length>6?{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:Math.round((255&e)/2.55)}:{r:e>>16,g:e>>8&255,b:255&e}}function hsvToRgb({h:t,s:e,v:i,a:s}){let o,n,r;e/=100,i/=100,t/=360;const a=Math.floor(6*t),l=6*t-a,h=i*(1-e),d=i*(1-l*e),c=i*(1-(1-l)*e);switch(a%6){case 0:o=i,n=c,r=h;break;case 1:o=d,n=i,r=h;break;case 2:o=h,n=i,r=c;break;case 3:o=h,n=d,r=i;break;case 4:o=c,n=h,r=i;break;case 5:o=i,n=h,r=d}return{r:Math.round(255*o),g:Math.round(255*n),b:Math.round(255*r),a:s}}function rgbToHsv({r:t,g:e,b:i,a:s}){const o=Math.max(t,e,i),n=Math.min(t,e,i),r=o-n,a=0===o?0:r/o,l=o/255;let h;switch(o){case n:h=0;break;case t:h=e-i+r*(e1)throw new TypeError("Expected offset to be between -1 and 1");const{r:i,g:s,b:o,a:n}=textToRgb(t),r=void 0!==n?n/100:0;return rgbToHex({r:i,g:s,b:o,a:Math.round(100*Math.min(1,Math.max(0,r+e)))})}function setBrand(t,e,i=document.body){if("string"!=typeof t)throw new TypeError("Expected a string as color");if("string"!=typeof e)throw new TypeError("Expected a string as value");if(!(i instanceof Element))throw new TypeError("Expected a DOM element");i.style.setProperty(`--q-color-${t}`,e)}function getBrand(t,e=document.body){if("string"!=typeof t)throw new TypeError("Expected a string as color");if(!(e instanceof Element))throw new TypeError("Expected a DOM element");return getComputedStyle(e).getPropertyValue(`--q-color-${t}`).trim()||null}function getPaletteColor(t){if("string"!=typeof t)throw new TypeError("Expected a string as color");const e=document.createElement("div");e.className=`text-${t} invisible fixed no-pointer-events`,document.body.appendChild(e);const i=getComputedStyle(e).getPropertyValue("color");return e.remove(),rgbToHex(textToRgb(i))}var colors={rgbToHex:rgbToHex,hexToRgb:hexToRgb,hsvToRgb:hsvToRgb,rgbToHsv:rgbToHsv,textToRgb:textToRgb,lighten:lighten,luminosity:luminosity,brightness:brightness,blend:blend,changeAlpha:changeAlpha,setBrand:setBrand,getBrand:getBrand,getPaletteColor:getPaletteColor};function getMobilePlatform(t){return!0===t.ios?"ios":!0===t.android?"android":void 0}function getBodyClasses({is:t,has:e,within:i},s){const o=[!0===t.desktop?"desktop":"mobile",`${!1===e.touch?"no-":""}touch`];if(!0===t.mobile){const e=getMobilePlatform(t);void 0!==e&&o.push("platform-"+e)}if(!0===t.nativeMobile){const e=t.nativeMobileWrapper;o.push(e),o.push("native-mobile"),!0!==t.ios||void 0!==s[e]&&!1===s[e].iosStatusBarPadding||o.push("q-ios-padding")}else!0===t.electron?o.push("electron"):!0===t.bex&&o.push("bex");return!0===i.iframe&&o.push("within-iframe"),o}function clientUpdate(){const t=document.body.className;let e=t;void 0!==iosCorrection&&(e=e.replace("desktop","platform-ios mobile")),!0===client.has.touch&&(e=e.replace("no-touch","touch")),!0===client.within.iframe&&(e+=" within-iframe"),t!==e&&(document.body.className=e)}function setColors(t){for(const e in t)setBrand(e,t[e])}var Body={install(t,e){if(!0!==isSSR){if(!0===fromSSR)clientUpdate();else{const t=getBodyClasses(client,e);!0===client.is.ie&&11===client.is.versionNumber?t.forEach(t=>document.body.classList.add(t)):document.body.classList.add.apply(document.body.classList,t)}void 0!==e.brand&&setColors(e.brand)}else t.server.push((t,i)=>{const s=getBodyClasses(t.platform,e),o=i.ssr.setBodyClasses;void 0!==e.screen&&!0===e.screen.bodyClass&&s.push("screen--xs"),"function"==typeof o?o(s):i.ssr.Q_BODY_CLASSES=s.join(" ")})}},materialIcons={name:"material-icons",type:{positive:"check_circle",negative:"warning",info:"info",warning:"priority_high"},arrow:{up:"arrow_upward",right:"arrow_forward",down:"arrow_downward",left:"arrow_back",dropdown:"arrow_drop_down"},chevron:{left:"chevron_left",right:"chevron_right"},colorPicker:{spectrum:"gradient",tune:"tune",palette:"style"},pullToRefresh:{icon:"refresh"},carousel:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down",navigationIcon:"lens"},chip:{remove:"cancel",selected:"check"},datetime:{arrowLeft:"chevron_left",arrowRight:"chevron_right",now:"access_time",today:"today"},editor:{bold:"format_bold",italic:"format_italic",strikethrough:"strikethrough_s",underline:"format_underlined",unorderedList:"format_list_bulleted",orderedList:"format_list_numbered",subscript:"vertical_align_bottom",superscript:"vertical_align_top",hyperlink:"link",toggleFullscreen:"fullscreen",quote:"format_quote",left:"format_align_left",center:"format_align_center",right:"format_align_right",justify:"format_align_justify",print:"print",outdent:"format_indent_decrease",indent:"format_indent_increase",removeFormat:"format_clear",formatting:"text_format",fontSize:"format_size",align:"format_align_left",hr:"remove",undo:"undo",redo:"redo",heading:"format_size",code:"code",size:"format_size",font:"font_download",viewSource:"code"},expansionItem:{icon:"keyboard_arrow_down",denseIcon:"arrow_drop_down"},fab:{icon:"add",activeIcon:"close"},field:{clear:"cancel",error:"error"},pagination:{first:"first_page",prev:"keyboard_arrow_left",next:"keyboard_arrow_right",last:"last_page"},rating:{icon:"grade"},stepper:{done:"check",active:"edit",error:"warning"},tabs:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down"},table:{arrowUp:"arrow_upward",warning:"warning",firstPage:"first_page",prevPage:"chevron_left",nextPage:"chevron_right",lastPage:"last_page"},tree:{icon:"play_arrow"},uploader:{done:"done",clear:"clear",add:"add_box",upload:"cloud_upload",removeQueue:"clear_all",removeUploaded:"done_all"}},iconSet={install(t,e,i){const s=i||materialIcons;this.set=((e,i)=>{const s={...e};if(!0===isSSR){if(void 0===i)return void console.error("SSR ERROR: second param required: Quasar.iconSet.set(iconSet, ssrContext)");s.set=i.$q.iconSet.set,i.$q.iconSet=s}else s.set=this.set,t.iconSet=s}),!0===isSSR?e.server.push((t,e)=>{t.iconSet={},t.iconSet.set=(t=>{this.set(t,e.ssr)}),t.iconSet.set(s)}):(Vue__default.default.util.defineReactive(t,"iconMapFn",void 0),Vue__default.default.util.defineReactive(t,"iconSet",{}),this.set(s))}};const autoInstalled=[Platform,Screen,Dark,Interaction],queues={server:[],takeover:[]},$q={version:version,config:{}};function install(t,e={}){if(!0===this.__qInstalled)return;this.__qInstalled=!0;const i=$q.config=Object.freeze(e.config||{});if(Platform.install($q,queues),Body.install(queues,i),Dark.install($q,queues,i),Interaction.install($q,queues),Screen.install($q,queues,i),History.install(i),lang.install($q,queues,e.lang),iconSet.install($q,queues,e.iconSet),!0===isSSR?t.mixin({beforeCreate(){this.$q=this.$root.$options.$q}}):t.prototype.$q=$q,e.components&&Object.keys(e.components).forEach(i=>{const s=e.components[i];"function"==typeof s&&t.component(s.options.name,s)}),e.directives&&Object.keys(e.directives).forEach(i=>{const s=e.directives[i];void 0!==s.name&&void 0!==s.unbind&&t.directive(s.name,s)}),e.plugins){const t={$q:$q,queues:queues,cfg:i};Object.keys(e.plugins).forEach(i=>{const s=e.plugins[i];"function"==typeof s.install&&!1===autoInstalled.includes(s)&&s.install(t)})}}const mixin$1={mounted(){queues.takeover.forEach(t=>{t(this.$q)})}};function ssrUpdate(t){if(t.ssr){const e={...$q,ssrContext:t.ssr};Object.assign(t.ssr,{Q_HEAD_TAGS:"",Q_BODY_ATTRS:"",Q_BODY_TAGS:""}),t.app.$q=t.ssr.$q=e,queues.server.forEach(i=>{i(e,t)})}else{const e=t.app.mixins||[];!1===e.includes(mixin$1)&&(t.app.mixins=e.concat(mixin$1))}}var VuePlugin={version:version,install:install,lang:lang,iconSet:iconSet,ssrUpdate:ssrUpdate};const units=["B","KB","MB","GB","TB","PB"];function humanStorageSize(t){let e=0;for(;parseInt(t,10)>=1024&&e=e?s:new Array(e-s.length+1).join(i)+s}var format={humanStorageSize:humanStorageSize,capitalize:capitalize,between:between,normalizeToInterval:normalizeToInterval,pad:pad};function cache(t,e,i){if(!0===isSSR)return i;const s=`__qcache_${e}`;return void 0===t[s]?t[s]=i:t[s]}function cacheWithFn(t,e,i){if(!0===isSSR)return i();const s=`__qcache_${e}`;return void 0===t[s]?t[s]=i():t[s]}function getPropCacheMixin(t,e){return{data(){const i={},s=this[t];for(const t in s)i[t]=s[t];return{[e]:i}},watch:{[t](t,i){const s=this[e];if(void 0!==i)for(const e in i)void 0===t[e]&&this.$delete(s,e);for(const e in t)s[e]!==t[e]&&this.$set(s,e,t[e])}}}}const ariaHidden={"aria-hidden":"true"},iconAsButton={tabindex:0,type:"button","aria-hidden":!1,role:null};var AttrsMixin=getPropCacheMixin("$attrs","qAttrs");const xhr=isSSR?null:XMLHttpRequest,open=isSSR?null:xhr.prototype.open,positionValues=["top","right","bottom","left"];let stack=[],highjackCount=0;function translate({p:t,pos:e,active:i,horiz:s,reverse:o,dir:n}){let r=1,a=1;return!0===s?(!0===o&&(r=-1),"bottom"===e&&(a=-1),{transform:`translate3d(${r*(t-100)}%,${i?0:-200*a}%,0)`}):(!0===o&&(a=-1),"right"===e&&(r=-1),{transform:`translate3d(${i?0:n*r*-200}%,${a*(t-100)}%,0)`})}function inc(t,e){return"number"!=typeof e&&(e=t<25?3*Math.random()+3:t<65?3*Math.random():t<85?2*Math.random():t<99?.6:0),between(t+e,0,100)}function highjackAjax(t){highjackCount++,stack.push(t),highjackCount>1||(xhr.prototype.open=function(t,e){const i=[];this.addEventListener("loadstart",()=>{stack.forEach(t=>{const s=t.getHijackFilter();null!==s&&!0!==s(e)||(t.start(),i.push(t.stop))})},{once:!0}),this.addEventListener("loadend",()=>{i.forEach(t=>{t()})},{once:!0}),open.apply(this,arguments)})}function restoreAjax(t){stack=stack.filter(e=>e.start!==t),(highjackCount=Math.max(0,highjackCount-1))||(xhr.prototype.open=open)}var QAjaxBar=Vue__default.default.extend({name:"QAjaxBar",props:{position:{type:String,default:"top",validator:t=>positionValues.includes(t)},size:{type:String,default:"2px"},color:String,reverse:Boolean,skipHijack:Boolean,hijackFilter:Function},data:()=>({calls:0,progress:0,onScreen:!1,animate:!0}),computed:{classes(){return`q-loading-bar q-loading-bar--${this.position}`+(void 0!==this.color?` bg-${this.color}`:"")+(!0===this.animate?"":" no-transition")},style(){const t=this.onScreen,e=translate({p:this.progress,pos:this.position,active:t,horiz:this.horizontal,reverse:!0===this.$q.lang.rtl&&["top","bottom"].includes(this.position)?!1===this.reverse:this.reverse,dir:!0===this.$q.lang.rtl?-1:1});return e[this.sizeProp]=this.size,e.opacity=t?1:0,e},horizontal(){return"top"===this.position||"bottom"===this.position},sizeProp(){return this.horizontal?"height":"width"},attrs(){return!0===this.onScreen?{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":this.progress}:ariaHidden}},methods:{start(t=300){const e=this.speed,i=this.speed=Math.max(0,t)||0;return this.calls++,this.calls>1?(0===e&&i>0?this.__work():e>0&&i<=0&&clearTimeout(this.timer),this.calls):(clearTimeout(this.timer),this.$emit("start"),this.progress=0,this.timer=setTimeout(()=>{this.animate=!0,i>0&&this.__work()},!0===this.onScreen?500:1),!0!==this.onScreen&&(this.onScreen=!0,this.animate=!1),this.calls)},increment(t){return this.calls>0&&(this.progress=inc(this.progress,t)),this.calls},stop(){if(this.calls=Math.max(0,this.calls-1),this.calls>0)return this.calls;clearTimeout(this.timer),this.$emit("stop");const t=()=>{this.animate=!0,this.progress=100,this.timer=setTimeout(()=>{this.onScreen=!1},1e3)};return 0===this.progress?this.timer=setTimeout(t,1):t(),this.calls},__work(){this.progress<100&&(this.timer=setTimeout(()=>{this.increment(),this.__work()},this.speed))}},mounted(){!0!==this.skipHijack&&(this.hijacked=!0,highjackAjax({start:this.start,stop:this.stop,getHijackFilter:()=>this.hijackFilter||null}))},beforeDestroy(){clearTimeout(this.timer),!0===this.hijacked&&restoreAjax(this.start)},render(t){return t("div",{class:this.classes,style:this.style,attrs:this.attrs})}});const sizes={xs:18,sm:24,md:32,lg:38,xl:46};function getSizeMixin(t){return{props:{size:String},computed:{sizeStyle(){if(void 0!==this.size)return{fontSize:this.size in t?`${t[this.size]}px`:this.size}}}}}var SizeMixin=getSizeMixin(sizes),TagMixin={props:{tag:{type:String,default:"div"}}},ListenersMixin=getPropCacheMixin("$listeners","qListeners");function slot(t,e,i){return void 0!==t.$scopedSlots[e]?t.$scopedSlots[e]():i}function uniqueSlot(t,e,i){return void 0!==t.$scopedSlots[e]?[].concat(t.$scopedSlots[e]()):i}function mergeSlot(t,e,i){return void 0!==e.$scopedSlots[i]?t.concat(e.$scopedSlots[i]()):t}function mergeSlotSafely(t,e,i){if(void 0===e.$scopedSlots[i])return t;const s=e.$scopedSlots[i]();return void 0!==t?t.concat(s):s}const defaultViewBox="0 0 24 24",sameFn=t=>t,ionFn=t=>`ionicons ${t}`,libMap={"mdi-":t=>`mdi ${t}`,"icon-":sameFn,"bt-":t=>`bt ${t}`,"eva-":t=>`eva ${t}`,"ion-md":ionFn,"ion-ios":ionFn,"ion-logo":ionFn,"iconfont ":sameFn,"ti-":t=>`themify-icon ${t}`,"bi-":t=>`bootstrap-icons ${t}`},matMap={o_:"-outlined",r_:"-round",s_:"-sharp"},symMap={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},libRE=new RegExp("^("+Object.keys(libMap).join("|")+")"),matRE=new RegExp("^("+Object.keys(matMap).join("|")+")"),symRE=new RegExp("^("+Object.keys(symMap).join("|")+")"),mRE=/^[Mm]\s?[-+]?\.?\d/,imgRE=/^img:/,svgUseRE=/^svguse:/,ionRE=/^ion-/,faRE=/^(fa-(solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;var QIcon=Vue__default.default.extend({name:"QIcon",mixins:[ListenersMixin,SizeMixin,TagMixin],props:{tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean},computed:{classes(){return"q-icon"+(!0===this.left?" on-left":"")+(!0===this.right?" on-right":"")+(void 0!==this.color?` text-${this.color}`:"")},type(){let t,e=this.name;if("none"===e||!e)return{none:!0};if(void 0!==this.$q.iconMapFn){const t=this.$q.iconMapFn(e);if(void 0!==t){if(void 0===t.icon)return{cls:t.cls,content:void 0!==t.content?t.content:" "};if("none"===(e=t.icon)||!e)return{none:!0}}}if(!0===mRE.test(e)){const[t,i=defaultViewBox]=e.split("|");return{svg:!0,viewBox:i,nodes:t.split("&&").map(t=>{const[e,i,s]=t.split("@@");return this.$createElement("path",{attrs:{d:e,transform:s},style:i})})}}if(!0===imgRE.test(e))return{img:!0,src:e.substring(4)};if(!0===svgUseRE.test(e)){const[t,i=defaultViewBox]=e.split("|");return{svguse:!0,src:t.substring(7),viewBox:i}}let i=" ";const s=e.match(libRE);if(null!==s)t=libMap[s[1]](e);else if(!0===faRE.test(e))t=e;else if(!0===ionRE.test(e))t=`ionicons ion-${!0===this.$q.platform.is.ios?"ios":"md"}${e.substr(3)}`;else if(!0===symRE.test(e)){t="notranslate material-symbols";const s=e.match(symRE);null!==s&&(e=e.substring(6),t+=symMap[s[1]]),i=e}else{t="notranslate material-icons";const s=e.match(matRE);null!==s&&(e=e.substring(2),t+=matMap[s[1]]),i=e}return{cls:t,content:i}}},render(t){const e={class:this.classes,style:this.sizeStyle,on:{...this.qListeners},attrs:{"aria-hidden":"true",role:"presentation"}};return!0===this.type.none?t(this.tag,e,slot(this,"default")):!0===this.type.img?t("span",e,mergeSlot([t("img",{attrs:{src:this.type.src}})],this,"default")):!0===this.type.svg?t("span",e,mergeSlot([t("svg",{attrs:{viewBox:this.type.viewBox||"0 0 24 24",focusable:"false"}},this.type.nodes)],this,"default")):!0===this.type.svguse?t("span",e,mergeSlot([t("svg",{attrs:{viewBox:this.type.viewBox,focusable:"false"}},[t("use",{attrs:{"xlink:href":this.type.src}})])],this,"default")):(void 0!==this.type.cls&&(e.class+=" "+this.type.cls),t(this.tag,e,mergeSlot([this.type.content],this,"default")))}}),QAvatar=Vue__default.default.extend({name:"QAvatar",mixins:[ListenersMixin,SizeMixin],props:{fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},computed:{classes(){return{[`bg-${this.color}`]:this.color,[`text-${this.textColor} q-chip--colored`]:this.textColor,"q-avatar--square":this.square,"rounded-borders":this.rounded}},contentStyle(){if(this.fontSize)return{fontSize:this.fontSize}}},render(t){const e=void 0!==this.icon?[t(QIcon,{props:{name:this.icon}})]:void 0;return t("div",{staticClass:"q-avatar",style:this.sizeStyle,class:this.classes,on:{...this.qListeners}},[t("div",{staticClass:"q-avatar__content row flex-center overflow-hidden",style:this.contentStyle},mergeSlotSafely(e,this,"default"))])}}),QBadge=Vue__default.default.extend({name:"QBadge",mixins:[ListenersMixin],props:{color:String,textColor:String,floating:Boolean,transparent:Boolean,multiLine:Boolean,outline:Boolean,rounded:Boolean,label:[Number,String],align:{type:String,validator:t=>["top","middle","bottom"].includes(t)}},computed:{style(){if(void 0!==this.align)return{verticalAlign:this.align}},classes(){const t=!0===this.outline&&this.color||this.textColor;return"q-badge flex inline items-center no-wrap"+` q-badge--${!0===this.multiLine?"multi":"single"}-line`+(!0===this.outline?" q-badge--outline":void 0!==this.color?` bg-${this.color}`:"")+(void 0!==t?` text-${t}`:"")+(!0===this.floating?" q-badge--floating":"")+(!0===this.rounded?" q-badge--rounded":"")+(!0===this.transparent?" q-badge--transparent":"")},attrs(){return{role:"status","aria-label":this.label}}},render(t){return t("div",{style:this.style,class:this.classes,attrs:this.attrs,on:{...this.qListeners}},void 0!==this.label?[this.label]:slot(this,"default"))}}),DarkMixin={props:{dark:{type:Boolean,default:null}},computed:{darkSuffix(){return null===this.dark&&null===this.$q.dark.isActive?"dark-auto":!0===this.dark||null===this.dark&&!0===this.$q.dark.isActive?"dark":"light"}}};const attrs$6={role:"alert"};var QBanner=Vue__default.default.extend({name:"QBanner",mixins:[ListenersMixin,DarkMixin],props:{inlineActions:Boolean,dense:Boolean,rounded:Boolean},render(t){const e=slot(this,"action"),i=[t("div",{staticClass:"q-banner__avatar col-auto row items-center self-start"},slot(this,"avatar")),t("div",{staticClass:"q-banner__content col text-body2"},slot(this,"default"))];return void 0!==e&&i.push(t("div",{staticClass:"q-banner__actions row items-center justify-end",class:`col-${!0===this.inlineActions?"auto":"all"}`},e)),t("div",{staticClass:"q-banner row items-center",class:{"q-banner--top-padding":void 0!==e&&!this.inlineActions,"q-banner--dense":this.dense,[`q-banner--${this.darkSuffix} q-${this.darkSuffix}`]:!0,"rounded-borders":this.rounded},attrs:attrs$6,on:{...this.qListeners}},i)}});const attrs$5={role:"toolbar"};var QBar=Vue__default.default.extend({name:"QBar",mixins:[ListenersMixin,DarkMixin],props:{dense:Boolean},computed:{classes(){return`q-bar--${!0===this.dense?"dense":"standard"}`+` q-bar--${this.darkSuffix}`}},render(t){return t("div",{staticClass:"q-bar row no-wrap items-center",class:this.classes,attrs:attrs$5,on:{...this.qListeners}},slot(this,"default"))}});const alignMap={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},alignValues$2=Object.keys(alignMap);var AlignMixin={props:{align:{type:String,validator:t=>alignValues$2.includes(t)}},computed:{alignClass(){const t=void 0===this.align?!0===this.vertical?"stretch":"left":this.align;return`${!0===this.vertical?"items":"justify"}-${alignMap[t]}`}}};const disabledValues=[!0,""];var QBreadcrumbs=Vue__default.default.extend({name:"QBreadcrumbs",mixins:[ListenersMixin,AlignMixin],props:{separator:{type:String,default:"/"},separatorColor:String,activeColor:{type:String,default:"primary"},gutter:{type:String,validator:t=>["none","xs","sm","md","lg","xl"].includes(t),default:"sm"}},computed:{classes(){return`${this.alignClass}${"none"===this.gutter?"":` q-gutter-${this.gutter}`}`},sepClass(){return this.separatorColor?` text-${this.separatorColor}`:""},activeClass(){return` text-${this.activeColor}`}},render(t){const e=slot(this,"default");if(void 0===e)return;let i=1;const s=[],o=e.filter(t=>void 0!==t.tag&&t.tag.endsWith("-QBreadcrumbsEl")).length,n=void 0!==this.$scopedSlots.separator?this.$scopedSlots.separator:()=>this.separator;return e.forEach(e=>{if(void 0!==e.tag&&e.tag.endsWith("-QBreadcrumbsEl")){const r=i{})},__navigateOnClick(t){if(!0===this.hasRouterLink){const e=e=>this.__navigateToRouterLink(t,e);this.$emit("click",t,e),!1===t.navigate&&t.preventDefault(),!0!==t.defaultPrevented&&e()}else this.$emit("click",t)}}},QBreadcrumbsEl=Vue__default.default.extend({name:"QBreadcrumbsEl",mixins:[ListenersMixin,RouterLinkMixin],props:{label:String,icon:String},computed:{iconClass(){return"q-breadcrumbs__el-icon"+(void 0!==this.label?" q-breadcrumbs__el-icon--with-label":"")},renderData(){return{staticClass:"q-breadcrumbs__el q-link flex inline items-center relative-position "+(!0!==this.disable?"q-link--focusable"+this.linkClass:"q-breadcrumbs__el--disabled"),attrs:this.linkAttrs,on:{...this.qListeners,click:this.__navigateOnClick}}}},beforeCreate(){this.fallbackTag="span"},render(t){const e=[];return void 0!==this.icon&&e.push(t(QIcon,{class:this.iconClass,props:{name:this.icon}})),void 0!==this.label&&e.push(this.label),t(this.linkTag,this.renderData,mergeSlot(e,this,"default"))}}),mixin={mixins:[ListenersMixin],props:{color:String,size:{type:[Number,String],default:"1em"}},computed:{cSize(){return this.size in sizes?`${sizes[this.size]}px`:this.size},classes(){if(this.color)return`text-${this.color}`}}},QSpinner=Vue__default.default.extend({name:"QSpinner",mixins:[mixin],props:{thickness:{type:Number,default:5}},render(t){return t("svg",{staticClass:"q-spinner q-spinner-mat",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"25 25 50 50"}},[t("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":this.thickness,"stroke-miterlimit":"10"}})])}});function offset(t){if(t===window)return{top:0,left:0};const{top:e,left:i}=t.getBoundingClientRect();return{top:e,left:i}}function style(t,e){return window.getComputedStyle(t).getPropertyValue(e)}function height(t){return t===window?window.innerHeight:t.getBoundingClientRect().height}function width$1(t){return t===window?window.innerWidth:t.getBoundingClientRect().width}function css(t,e){const i=t.style;Object.keys(e).forEach(t=>{i[t]=e[t]})}function cssBatch(t,e){t.forEach(t=>css(t,e))}function ready(t){if("function"==typeof t)return"loading"!==document.readyState?t():void document.addEventListener("DOMContentLoaded",t,!1)}function getElement(t){const e=typeof t;if("function"===e&&(t=t()),"string"===e)try{t=document.querySelector(t)}catch(t){}return t!==Object(t)?null:!0===t._isVue&&void 0!==t.$el?t.$el:t}function getBodyFullscreenElement(t){return t===document.documentElement||null===t?document.body:t}var dom={offset:offset,style:style,height:height,width:width$1,css:css,cssBatch:cssBatch,ready:ready};function shouldIgnoreKey(t){return t!==Object(t)||0!==t.type.indexOf("key")||t.target!==document.activeElement||!0===t.target.qComposing}function isKeyCode(t,e){return!0!==shouldIgnoreKey(t)&&[].concat(e).includes(t.keyCode)}const{passiveCapture:passiveCapture$2}=listenOpts;function startPhase1(t,e,i,s){!0===i.modifiers.stop&&stop(t);const{color:o,early:n}=i.modifiers,r=!0===i.modifiers.center||!0===s,a=document.createElement("span"),l=document.createElement("span"),h=position(t),{left:d,top:c,width:u,height:p}=e.getBoundingClientRect(),m=Math.sqrt(u*u+p*p),g=m/2,f=`${(u-m)/2}px`,_=r?f:`${h.left-d-g}px`,v=`${(p-m)/2}px`,b=r?v:`${h.top-c-g}px`,y=Date.now()+300;let S,x,C,k,w;l.className="q-ripple__inner",css(l,{height:`${m}px`,width:`${m}px`,transform:`translate3d(${_},${b},0) scale3d(.2,.2,1)`,opacity:0}),a.className=`q-ripple${o?" text-"+o:""}`,a.setAttribute("dir","ltr"),a.appendChild(l),e.appendChild(a);const $=()=>{clearTimeout(S);const t=i.abort.indexOf($);if(t>-1)switch(i.abort.splice(t,1),a.remove(),C){case"mouse":document.removeEventListener("mouseup",x,passiveCapture$2),e.removeEventListener("mouseout",x,passiveCapture$2);break;case"keyboard":document.removeEventListener("keyup",x,passiveCapture$2);break;case"touch":k.removeEventListener("touchmove",$,passiveCapture$2),k.removeEventListener("touchmove",x,passiveCapture$2),k.removeEventListener("touchend",x,passiveCapture$2),k.removeEventListener("touchcancel",x,passiveCapture$2),i.preventMouse--}};i.abort.push($);const q=()=>{!0!==w&&(l.classList.remove("q-ripple__inner--enter"),l.classList.add("q-ripple__inner--leave"),l.style.opacity=0,S=setTimeout($,275))};!0===n&&(0===t.type.indexOf("mouse")?(C="mouse",x=(t=>{"mouseout"===t.type&&!0===e.contains(t.toElement)||(S=setTimeout(q,y-Date.now()))}),document.addEventListener("mouseup",x,passiveCapture$2),e.addEventListener("mouseout",x,passiveCapture$2)):0===t.type.indexOf("key")?(C="keyboard",i.preventKeyboard=!0,x=(()=>{i.preventKeyboard=!1,S=setTimeout(q,y-Date.now())}),document.addEventListener("keyup",x,passiveCapture$2)):(C="touch",w=!0,k=t.target,i.preventMouse++,x=(t=>{"touchmove"===t.type&&0!==t.changedTouches.length&&!0===e.contains(document.elementFromPoint(t.changedTouches[0].clientX,t.changedTouches[0].clientY))||(S=setTimeout(q,y-Date.now()))}),k.addEventListener("touchmove",$,passiveCapture$2),k.addEventListener("touchmove",x,passiveCapture$2),k.addEventListener("touchend",x,passiveCapture$2),k.addEventListener("touchcancel",x,passiveCapture$2))),S=setTimeout(()=>{!0===w&&(w=void 0,k.removeEventListener("touchmove",$,passiveCapture$2)),l.classList.add("q-ripple__inner--enter"),l.style.transform=`translate3d(${f},${v},0) scale3d(1,1,1)`,l.style.opacity=.2,!0!==n&&(S=setTimeout(q,y-Date.now()))},!0===w?70:50)}function updateCtx(t,e,{modifiers:i,arg:s,value:o}){if(t.enabled=!1!==o,!0===t.enabled){const n=Object.assign({},$q.config.ripple,i,o),r=void 0===t.modifiers.early||t.modifiers.early!==n.early;t.modifiers={early:!0===n.early,stop:!0===n.stop,center:!0===n.center,color:n.color||s,keyCodes:[].concat(n.keyCodes||13)},!0===r&&(cleanEvt(t,"main"),!0===n.early?addEvt(t,"main",[[e,"mousedown","start","passive"],[e,"touchstart","start","passive"],[e,"keydown","keystart","passive"]]):addEvt(t,"main",[[e,"click","start","passive"],[e,"keyup","keystart","passive"]]))}else t.abort.slice().forEach(t=>{t()}),cleanEvt(t,"main"),t.preventMouse=0,t.preventKeyboard=!1}var Ripple={name:"ripple",inserted(t,e){const i={modifiers:{},abort:[],preventMouse:0,preventKeyboard:!1,start(e){!0!==i.enabled||!0===e.qSkipRipple||"mousedown"===e.type&&0!==i.preventMouse||!(!0!==client.is.ie||e.clientX>=0)||startPhase1(e,t,i,$q.interaction.isKeyboard)},keystart(e){!0!==i.preventKeyboard&&!0===i.enabled&&!0!==e.qSkipRipple&&!0===isKeyCode(e,i.modifiers.keyCodes)&&startPhase1(e,t,i,!0)}};updateCtx(i,t,e),t.__qripple&&(t.__qripple_old=t.__qripple),t.__qripple=i},update(t,e){void 0!==t.__qripple&&updateCtx(t.__qripple,t,e)},unbind(t){const e=t.__qripple_old||t.__qripple;void 0!==e&&(e.abort.slice().forEach(t=>{t()}),cleanEvt(e,"main"),delete t[t.__qripple_old?"__qripple_old":"__qripple"])}},RippleMixin={directives:{Ripple:Ripple},props:{ripple:{type:[Boolean,Object],default:!0}}};const btnPadding={none:0,xs:4,sm:8,md:16,lg:24,xl:32},formTypes=["button","submit","reset"],mediaTypeRe=/[^\s]\/[^\s]/,btnDesignOptions=["flat","outline","push","unelevated"],getBtnDesign=(t,e)=>!0===t.flat?"flat":!0===t.outline?"outline":!0===t.push?"push":!0===t.unelevated?"unelevated":e;var BtnMixin={mixins:[ListenersMixin,RippleMixin,RouterLinkMixin,AlignMixin,getSizeMixin({xs:8,sm:10,md:14,lg:20,xl:24})],props:{type:{type:String,default:"button"},to:[Object,String],replace:Boolean,append:Boolean,label:[Number,String],icon:String,iconRight:String,...btnDesignOptions.reduce((t,e)=>(t[e]=Boolean)&&t,{}),square:Boolean,round:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],align:{default:"center"},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean},computed:{style(){if(!1===this.fab&&!1===this.fabMini)return this.sizeStyle},isRounded(){return!0===this.rounded||!0===this.fab||!0===this.fabMini},isActionable(){return!0!==this.disable&&!0!==this.loading},computedTabIndex(){return!0===this.isActionable?this.tabindex||0:-1},design(){return getBtnDesign(this,"standard")},attrs(){const t={tabindex:this.computedTabIndex};return!0===this.hasLink?Object.assign(t,this.linkAttrs):!0===formTypes.includes(this.type)&&(t.type=this.type),"a"===this.linkTag?(!0===this.disable?t["aria-disabled"]="true":void 0===t.href&&(t.role="button"),!0!==this.hasRouterLink&&!0===mediaTypeRe.test(this.type)&&(t.type=this.type)):!0===this.disable&&(t.disabled="",t["aria-disabled"]="true"),!0===this.loading&&void 0!==this.percentage&&(t.role="progressbar",t["aria-valuemin"]=0,t["aria-valuemax"]=100,t["aria-valuenow"]=this.percentage),t},classes(){let t;void 0!==this.color?t=!0===this.flat||!0===this.outline?`text-${this.textColor||this.color}`:`bg-${this.color} text-${this.textColor||"white"}`:this.textColor&&(t=`text-${this.textColor}`);const e=!0===this.round?"round":`rectangle${!0===this.isRounded?" q-btn--rounded":!0===this.square?" q-btn--square":""}`;return`q-btn--${this.design} q-btn--${e}`+(void 0!==t?" "+t:"")+(!0===this.isActionable?" q-btn--actionable q-focusable q-hoverable":!0===this.disable?" disabled":"")+(!0===this.fab?" q-btn--fab":!0===this.fabMini?" q-btn--fab-mini":"")+(!0===this.noCaps?" q-btn--no-uppercase":"")+(!0===this.noWrap?"":" q-btn--wrap")+(!0===this.dense?" q-btn--dense":"")+(!0===this.stretch?" no-border-radius self-stretch":"")+(!0===this.glossy?" glossy":"")},innerClasses(){return this.alignClass+(!0===this.stack?" column":" row")+(!0===this.noWrap?" no-wrap text-no-wrap":"")+(!0===this.loading?" q-btn__content--hidden":"")},wrapperStyle(){if(void 0!==this.padding)return{padding:this.padding.split(/\s+/).map(t=>t in btnPadding?btnPadding[t]+"px":t).join(" "),minWidth:"0",minHeight:"0"}}}};const{passiveCapture:passiveCapture$1}=listenOpts;let touchTarget=void 0,keyboardTarget=void 0,mouseTarget=void 0;const iconAttrs={role:"img","aria-hidden":"true"};var QBtn=Vue__default.default.extend({name:"QBtn",mixins:[BtnMixin],props:{percentage:Number,darkPercentage:Boolean},computed:{hasLabel(){return void 0!==this.label&&null!==this.label&&""!==this.label},computedRipple(){return!1!==this.ripple&&{keyCodes:!0===this.hasLink?[13,32]:[13],...!0===this.ripple?{}:this.ripple}},percentageStyle(){const t=Math.max(0,Math.min(100,this.percentage));if(t>0)return{transition:"transform 0.6s",transform:`translateX(${t-100}%)`}},onEvents(){if(!0===this.loading)return{mousedown:this.__onLoadingEvt,touchstart:this.__onLoadingEvt,click:this.__onLoadingEvt,keydown:this.__onLoadingEvt,keyup:this.__onLoadingEvt};if(!0===this.isActionable){const t={...this.qListeners,click:this.click,keydown:this.__onKeydown,mousedown:this.__onMousedown};return!0===this.$q.platform.has.touch&&(t[`${void 0===t.touchstart?"&":""}touchstart`]=this.__onTouchstart),t}return{click:stopAndPrevent}},directives(){if(!0!==this.disable&&!1!==this.ripple)return[{name:"ripple",value:this.computedRipple,modifiers:{center:this.round}}]}},methods:{click(t){if(void 0!==t){if(!0===t.defaultPrevented)return;const e=document.activeElement;if("submit"===this.type&&(!0===this.$q.platform.is.ie&&(t.clientX<0||t.clientY<0)||e!==document.body&&!1===this.$el.contains(e)&&!1===e.contains(this.$el))){this.$el.focus();const t=()=>{document.removeEventListener("keydown",stopAndPrevent,!0),document.removeEventListener("keyup",t,passiveCapture$1),void 0!==this.$el&&this.$el.removeEventListener("blur",t,passiveCapture$1)};document.addEventListener("keydown",stopAndPrevent,!0),document.addEventListener("keyup",t,passiveCapture$1),this.$el.addEventListener("blur",t,passiveCapture$1)}}this.__navigateOnClick(t)},__onKeydown(t){this.$emit("keydown",t),!0===isKeyCode(t,[13,32])&&(keyboardTarget!==this.$el&&(void 0!==keyboardTarget&&this.__cleanup(),!0!==t.defaultPrevented&&(this.$el.focus(),keyboardTarget=this.$el,this.$el.classList.add("q-btn--active"),document.addEventListener("keyup",this.__onPressEnd,!0),this.$el.addEventListener("blur",this.__onPressEnd,passiveCapture$1))),stopAndPrevent(t))},__onTouchstart(t){if(this.$emit("touchstart",t),touchTarget!==this.$el&&(void 0!==touchTarget&&this.__cleanup(),!0!==t.defaultPrevented)){touchTarget=this.$el;const e=this.touchTargetEl=t.target;e.addEventListener("touchcancel",this.__onPressEnd,passiveCapture$1),e.addEventListener("touchend",this.__onPressEnd,passiveCapture$1)}},__onMousedown(t){this.$emit("mousedown",t),mouseTarget!==this.$el&&(void 0!==mouseTarget&&this.__cleanup(),!0!==t.defaultPrevented&&(mouseTarget=this.$el,this.$el.classList.add("q-btn--active"),document.addEventListener("mouseup",this.__onPressEnd,passiveCapture$1)))},__onPressEnd(t){if(void 0===t||"blur"!==t.type||document.activeElement!==this.$el){if(void 0!==t&&"keyup"===t.type){if(keyboardTarget===this.$el&&!0===isKeyCode(t,[13,32])){const e=new MouseEvent("click",t);!0===t.defaultPrevented&&prevent(e),!0===t.cancelBubble&&stop(e),this.$el.dispatchEvent(e),stopAndPrevent(t)}this.$emit("keyup",t)}this.__cleanup()}},__cleanup(t){const e=this.$refs.blurTarget;if(!0===t||touchTarget!==this.$el&&mouseTarget!==this.$el||void 0===e||e===document.activeElement||!0!==this.$el.contains(document.activeElement)||(e.setAttribute("tabindex",-1),e.focus()),touchTarget===this.$el){const t=this.touchTargetEl;t.removeEventListener("touchcancel",this.__onPressEnd,passiveCapture$1),t.removeEventListener("touchend",this.__onPressEnd,passiveCapture$1),touchTarget=this.touchTargetEl=void 0}mouseTarget===this.$el&&(document.removeEventListener("mouseup",this.__onPressEnd,passiveCapture$1),mouseTarget=void 0),keyboardTarget===this.$el&&(document.removeEventListener("keyup",this.__onPressEnd,!0),void 0!==this.$el&&this.$el.removeEventListener("blur",this.__onPressEnd,passiveCapture$1),keyboardTarget=void 0),void 0!==this.$el&&this.$el.classList.remove("q-btn--active")},__onLoadingEvt(t){stopAndPrevent(t),t.qSkipRipple=!0}},beforeDestroy(){this.__cleanup(!0)},render(t){let e=[];void 0!==this.icon&&e.push(t(QIcon,{attrs:iconAttrs,props:{name:this.icon,left:!1===this.stack&&!0===this.hasLabel}})),!0===this.hasLabel&&e.push(t("span",{staticClass:"block"},[this.label])),e=mergeSlot(e,this,"default"),void 0!==this.iconRight&&!1===this.round&&e.push(t(QIcon,{attrs:iconAttrs,props:{name:this.iconRight,right:!1===this.stack&&!0===this.hasLabel}}));const i=[t("span",{staticClass:"q-focus-helper",ref:"blurTarget"})];return!0===this.loading&&void 0!==this.percentage&&i.push(t("span",{staticClass:"q-btn__progress absolute-full overflow-hidden",class:!0===this.darkPercentage?"q-btn__progress--dark":""},[t("span",{staticClass:"q-btn__progress-indicator fit block",style:this.percentageStyle})])),i.push(t("span",{staticClass:"q-btn__wrapper col row q-anchor--skip",style:this.wrapperStyle},[t("span",{staticClass:"q-btn__content text-center col items-center q-anchor--skip",class:this.innerClasses},e)])),null!==this.loading&&i.push(t("transition",{props:{name:"q-transition--fade"}},!0===this.loading?[t("span",{key:"loading",staticClass:"absolute-full flex flex-center"},void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():[t(QSpinner)])]:void 0)),t(!0===this.hasLink||"a"===this.type?"a":"button",{staticClass:"q-btn q-btn-item non-selectable no-outline",class:this.classes,style:this.style,attrs:this.attrs,on:this.onEvents,directives:this.directives},i)}});const panelParents=new WeakMap;function hideScroll(t){if(null!==t&&void 0!==t){const e=t.closest(".q-panel-parent");panelParents.set(t,e),null!==e&&e.classList.add("q-transition--hide-scroll")}}function restoreScroll(t){if(null!==t&&void 0!==t){const e=panelParents.get(t)||t.closest(".q-panel-parent");null!==e&&e.classList.remove("q-transition--hide-scroll")}}const onTransitionHideScroll={"before-leave":hideScroll,"after-leave":restoreScroll,"leave-cancelled":restoreScroll};var TransitionMixin={props:{transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"}},computed:{transitionProps(){const t=`q-transition--${this.transitionShow}`,e=`q-transition--${this.transitionHide}`;return{enterClass:`${t}-enter`,leaveClass:`${e}-leave`,appearClass:`${t}-appear`,enterToClass:`${t}-enter-to`,leaveToClass:`${e}-leave-to`,appearToClass:`${t}-appear-to`,enterActiveClass:`${t}-enter-active`,leaveActiveClass:`${e}-leave-active`,appearActiveClass:`${t}-appear-active`}}}},QBtnGroup=Vue__default.default.extend({name:"QBtnGroup",mixin:[ListenersMixin],props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},computed:{classes(){return["unelevated","outline","flat","rounded","square","push","stretch","glossy"].filter(t=>!0===this[t]).map(t=>`q-btn-group--${t}`).join(" ")}},render(t){return t("div",{staticClass:"q-btn-group row no-wrap "+(!0===this.spread?"q-btn-group--spread":"inline"),class:this.classes,on:{...this.qListeners}},slot(this,"default"))}});function clearSelection(){if(void 0!==window.getSelection){const t=window.getSelection();void 0!==t.empty?t.empty():void 0!==t.removeAllRanges&&(t.removeAllRanges(),!0!==Platform.is.mobile&&t.addRange(document.createRange()))}else void 0!==document.selection&&document.selection.empty()}const scrollListenerHandlers=[];function scrollEventDispatcher(t){scrollListenerHandlers.slice().forEach(e=>{t&&t.target&&!0===t.target.qScrollPrevented||!0===eventOnAncestors(t,e.scrollTarget)&&e(t)})}var AnchorMixin={props:{target:{default:!0},noParentEvent:Boolean,contextMenu:Boolean},watch:{contextMenu(t){void 0!==this.anchorEl&&(this.__unconfigureAnchorEl(),this.__configureAnchorEl(t))},target(){void 0!==this.anchorEl&&this.__unconfigureAnchorEl(),this.__pickAnchorEl()},noParentEvent(t){void 0!==this.anchorEl&&(!0===t?this.__unconfigureAnchorEl():this.__configureAnchorEl())}},methods:{__showCondition(t){return void 0!==this.anchorEl&&(void 0===t||(void 0===t.touches||t.touches.length<=1))},__contextClick(t){this.hide(t),prevent(t),this.$nextTick(()=>{this.show(t),t===Object(t)&&(t.qAnchorHandled=!0)})},__toggleKey(t){!0===isKeyCode(t,13)&&this.toggle(t)},__mobileCleanup(t){this.anchorEl.classList.remove("non-selectable"),clearTimeout(this.touchTimer),!0===this.showing&&void 0!==t&&clearSelection()},prevent:prevent,__mobileTouch(t){if(this.__mobileCleanup(t),!0!==this.__showCondition(t))return;this.hide(t),this.anchorEl.classList.add("non-selectable");const e=t.target;addEvt(this,"anchor",[[e,"touchmove","__mobileCleanup","passive"],[e,"touchend","__mobileCleanup","passive"],[e,"touchcancel","__mobileCleanup","passive"],[this.anchorEl,"contextmenu","prevent","notPassive"]]),this.touchTimer=setTimeout(()=>{this.show(t),t===Object(t)&&(t.qAnchorHandled=!0)},300)},__unconfigureAnchorEl(){cleanEvt(this,"anchor")},__configureAnchorEl(t=this.contextMenu){if(!0===this.noParentEvent||void 0===this.anchorEl)return;let e;addEvt(this,"anchor",e=!0===t?!0===this.$q.platform.is.mobile?[[this.anchorEl,"touchstart","__mobileTouch","passive"]]:[[this.anchorEl,"mousedown","hide","passive"],[this.anchorEl,"contextmenu","__contextClick","notPassive"]]:[[this.anchorEl,"click","toggle","passive"],[this.anchorEl,"keyup","__toggleKey","passive"]])},__setAnchorEl(t){for(this.anchorEl=t;this.anchorEl.classList.contains("q-anchor--skip");)this.anchorEl=this.anchorEl.parentNode;this.__configureAnchorEl()},__pickAnchorEl(){!1===this.target||""===this.target||null===this.parentEl?this.anchorEl=void 0:!0===this.target?this.__setAnchorEl(this.parentEl):(this.anchorEl=getElement(this.target)||void 0,void 0!==this.anchorEl?this.__configureAnchorEl():console.error(`Anchor: target "${this.target}" not found`,this))},__changeScrollEvent(t,e){const i=scrollListenerHandlers.length>0;if(void 0!==this.__scrollFn){const t=scrollListenerHandlers.indexOf(this.__scrollFn);t>-1&&scrollListenerHandlers.splice(t,1),this.__scrollFn=void 0}void 0!==t&&null!==e&&void 0!==e&&(t.scrollTarget=e===window?document:e,scrollListenerHandlers.push(t),this.__scrollFn=t),!0===i&&0===scrollListenerHandlers.length?window.removeEventListener("scroll",scrollEventDispatcher,listenOpts.passiveCapture):!1===i&&scrollListenerHandlers.length>0&&window.addEventListener("scroll",scrollEventDispatcher,listenOpts.passiveCapture)}},created(){"function"==typeof this.__configureScrollTarget&&"function"==typeof this.__unconfigureScrollTarget&&(this.noParentEventWatcher=this.$watch("noParentEvent",()=>{this.__unconfigureScrollTarget(),this.__configureScrollTarget()}))},mounted(){this.parentEl=this.$el.parentNode,this.__pickAnchorEl(),!0===this.value&&void 0===this.anchorEl&&this.$emit("input",!1)},beforeDestroy(){clearTimeout(this.touchTimer),void 0!==this.noParentEventWatcher&&this.noParentEventWatcher(),void 0!==this.__anchorCleanup&&this.__anchorCleanup(),this.__unconfigureAnchorEl()}},TimeoutMixin={created(){this.__tickFnList=[],this.__timeoutFnList=[]},deactivated(){this.__tickFnList.forEach(t=>{t.removeTick()}),this.__timeoutFnList.forEach(t=>{t.removeTimeout()})},beforeDestroy(){this.__tickFnList.forEach(t=>{t.removeTick()}),this.__tickFnList=void 0,this.__timeoutFnList.forEach(t=>{t.removeTimeout()}),this.__timeoutFnList=void 0},methods:{__useTick(t,e){const i={removeTick(){i.fn=void 0},registerTick:t=>{i.fn=t,this.$nextTick(()=>{i.fn===t&&(!1===this._isDestroyed&&i.fn(),i.fn=void 0)})}};this.__tickFnList.push(i),this[t]=i.registerTick,void 0!==e&&(this[e]=i.removeTick)},__useTimeout(t,e){const i={removeTimeout(){clearTimeout(i.timer)},registerTimeout:(t,e)=>{clearTimeout(i.timer),!1===this._isDestroyed&&(i.timer=setTimeout(t,e))}};this.__timeoutFnList.push(i),this[t]=i.registerTimeout,void 0!==e&&(this[e]=i.removeTimeout)}}};const labelClick={timeStamp:null,label:null,show:null};function isDuplicateLabelClick(t,e){if("click"!==t.type)return!1;const{timeStamp:i,label:s,show:o}=labelClick,{target:n}=t;return labelClick.show=e,labelClick.timeStamp=t.timeStamp,labelClick.label=n?"string"==typeof n.id&&""!==n.id&&null!==s&&s.htmlFor===n.id?s:"function"==typeof n.closest?n.closest("label"):null:null,i===labelClick.timeStamp&&s===labelClick.label&&o!==e}var ModelToggleMixin={mixins:[ListenersMixin],props:{value:{type:Boolean,default:void 0}},data:()=>({showing:!1}),watch:{value(t){this.__processModelChange(t)},$route(){!0===this.hideOnRouteChange&&!0===this.showing&&this.hide()}},methods:{toggle(t){this[!0===this.showing?"hide":"show"](t),t===Object(t)&&(t.qAnchorHandled=!0)},show(t){!0===this.disable||t===Object(t)&&(!0===t.qAnchorHandled||!0===isDuplicateLabelClick(t,"show"))||void 0!==this.__showCondition&&!0!==this.__showCondition(t)||(void 0!==this.qListeners.input&&!1===isSSR&&(this.$emit("input",!0),this.payload=t,this.$nextTick(()=>{this.payload===t&&(this.payload=void 0)})),void 0!==this.value&&void 0!==this.qListeners.input&&!0!==isSSR||this.__processShow(t))},__processShow(t){!0!==this.showing&&(void 0!==this.__preparePortal&&this.__preparePortal(),this.showing=!0,this.$emit("before-show",t),void 0!==this.__show?this.__show(t):this.$emit("show",t))},hide(t){!0!==this.disable&&(t!==Object(t)||!0!==t.qAnchorHandled&&!0!==isDuplicateLabelClick(t,"hide"))&&(void 0!==this.qListeners.input&&!1===isSSR&&(this.$emit("input",!1),this.payload=t,this.$nextTick(()=>{this.payload===t&&(this.payload=void 0)})),void 0!==this.value&&void 0!==this.qListeners.input&&!0!==isSSR||this.__processHide(t))},__processHide(t){!1!==this.showing&&(this.showing=!1,this.$emit("before-hide",t),void 0!==this.__hide?this.__hide(t):this.$emit("hide",t))},__processModelChange(t){!0===this.disable&&!0===t?void 0!==this.qListeners.input&&this.$emit("input",!1):!0===t!==this.showing&&this[`__process${!0===t?"Show":"Hide"}`](this.payload)}}};const FOCUSABLE_SELECTOR=[":focus",'a[href]:not([tabindex="-1"]):not(.q-focus__clone)','area[href]:not([tabindex="-1"]):not(.q-focus__clone)','input:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','select:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','textarea:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','button:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','iframe:not([tabindex="-1"]):not(.q-focus__clone)','[tabindex]:not([tabindex="-1"]):not(.q-focus__clone)','[contenteditable]:not([tabindex="-1"]):not(.q-focus__clone):not([contenteditable="false"])',".q-tab.q-focusable:not(.q-focus__clone)"].join(","),KEY_SKIP_SELECTOR=["input:not([disabled])","select:not([disabled])","select:not([disabled]) *","textarea:not([disabled])",'[contenteditable]:not([contenteditable="false"])','[contenteditable]:not([contenteditable="false"]) *',".q-key-group-navigation--ignore-key",".q-key-group-navigation--ignore-key *",".q-focus__clone"].join(","),EDITABLE_SELECTOR=['input:not(.q-focus__clone):not([disabled]):not([readonly]):not([type="button"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="radio"]):not([type="range"]):not([type="reset"]):not([type="submit"])',"textarea:not(.q-focus__clone):not([disabled]):not([readonly])",'[contenteditable]:not(.q-focus__clone):not([contenteditable="false"])','[contenteditable]:not(.q-focus__clone):not([contenteditable="false"]) *'].join(",");let managedFocusFn,scrollOffset=0;function isInPortal(t){return t.matches(".q-dialog *, .q-menu *, .q-tooltip *, .q-stepper__step-content *")}function isEditable(t){return t.matches(EDITABLE_SELECTOR)}function managedFocus(t){if(void 0===managedFocusFn){const e="function"==typeof t.scrollIntoViewIfNeeded?t=>{t.scrollIntoViewIfNeeded(!1)}:t=>{t.scrollIntoView()};managedFocusFn=!0===client.is.ios||!0===client.is.nativeMobile||!0===client.is.standalone?t=>{const i=isEditable(t);if(t===document.body||!0!==i&&t.tabIndex<0)return void(t!==document.activeElement&&t.focus({preventScroll:!0}));const s=isInPortal(t),o=t.cloneNode(!0),n=t.parentNode,r=document.scrollingElement||document.documentElement,a=r.scrollTop;o.setAttribute("tabindex",-1),o.removeAttribute("id"),o.removeAttribute("autofocus"),o.removeAttribute("data-autofocus"),o.classList.add("q-focus__clone"),n.insertBefore(o,t),t!==document.activeElement&&t.focus({preventScroll:!0}),setTimeout(()=>{if(o.remove(),t&&t===document.activeElement&&!0===i){!0===s&&e(t);const{top:i,bottom:o}=t.getBoundingClientRect(),n=void 0!==window.visualViewport?window.visualViewport.height:window.innerHeight;let l=r.scrollTop;if(i<0?l+=i-32:i>0&&o>n&&(l+=o-n+64),requestAnimationFrame(()=>{r.scrollTop=l}),!0!==t.qRestoreScrollSet&&!0!==s){scrollOffset+=l-a;const e=()=>{t&&(t.qRestoreScrollSet=void 0,t.removeEventListener("blur",e)),r.scrollTop!==l?scrollOffset=0:0!==scrollOffset&&requestAnimationFrame(()=>{const{activeElement:t}=document;(!t||!0!==isEditable(t)&&t.tabIndex<0)&&(r.scrollTop-=scrollOffset,scrollOffset=0)})};t.qRestoreScrollSet=!0,t.addEventListener("blur",e)}}},200)}:t=>{t!==document.activeElement&&t.focus({preventScroll:!0}),!0===isInPortal(t)&&!0===isEditable(t)&&setTimeout(()=>{t&&t===document.activeElement&&e(t)},200)}}managedFocusFn(t)}function changeFocusedElement(t,e,i=1,s,o,n){const r=t.length-1;if(!0===o&&(e>r||e<0))return;const a=normalizeToInterval(e,0,r);if(a===n||a>r)return;const l=document.activeElement,h=!0===s?()=>{managedFocus(t[a])}:()=>{t[a].focus()};null!==l?(l._qKeyNavIgnore=!0,h(),l._qKeyNavIgnore=!1):h(),document.activeElement!==t[a]&&changeFocusedElement(t,a+i,i,s,o,void 0===n?a:n)}const findProto=Array.prototype.find,findIndexProto=Array.prototype.findIndex,mapProto=Array.prototype.map;function closePortalMenus(t,e){do{if("QMenu"===t.$options.name){if(t.hide(e),!0===t.separateClosePopup)return t.$parent}else if(void 0!==t.__renderPortal)return void 0!==t.$parent&&"QPopupProxy"===t.$parent.$options.name?(t.hide(e),t.$parent):t;t=t.$parent}while(void 0!==t&&(void 0===t.$el.contains||!0!==t.$el.contains(e.target)))}function closePortals(t,e,i){for(;0!==i&&void 0!==t;){if(void 0!==t.__renderPortal){if(i--,"QMenu"===t.$options.name){t=closePortalMenus(t,e);continue}t.hide(e)}t=t.$parent}}function isOnGlobalDialog(t){for(;void 0!==t;){if("QGlobalDialog"===t.$options.name)return!0;if("QDialog"===t.$options.name)return!1;t=t.$parent}return!1}function getPortalsContainer(t){let e=findProto.call(t.children,t=>t.matches&&t.matches(".q-portal__container"));return void 0===e&&(e=document.createElement("div")).classList.add("q-portal__container"),e.parentElement===t&&null===e.nextElementSibling||t.appendChild(e),e}const portalVms=new WeakMap,Portal={inheritAttrs:!1,props:{contentClass:[Array,String,Object],contentStyle:[Array,String,Object]},methods:{focus(t){const e=this.__getInnerNode();if(void 0!==e&&!0!==e.contains(document.activeElement)){let i=null;if(""!==t&&(i=e.querySelector("string"==typeof t?t:"[autofocus][tabindex], [data-autofocus][tabindex]")||e.querySelector("string"==typeof t?t:"[autofocus] [tabindex], [data-autofocus] [tabindex]")||e.querySelector("string"==typeof t?t:"[autofocus], [data-autofocus]")),null!==i&&"function"==typeof i.focus)managedFocus(i);else{const t=Array.prototype.slice.call(e.querySelectorAll(FOCUSABLE_SELECTOR));t.length>0&&changeFocusedElement(t,!0===t[0].classList.contains("q-key-group-navigation--ignore-focus")?1:0,1,!0)}}},__showPortal(){if(void 0!==this.$q.fullscreen&&!0===this.$q.fullscreen.isCapable){const t=()=>{if(void 0===this.__portal)return;const t=getBodyFullscreenElement(this.$q.fullscreen.activeEl),e=this.__portal.$el.parentElement,i=getPortalsContainer(t);e===i||!0!==this.__onGlobalDialog&&!0!==t.contains(this.$el)||(i.appendChild(this.__portal.$el),e&&e.parentElement!==document.body&&0===e.children.length&&e.remove())};this.unwatchFullscreen=this.$watch("$q.fullscreen.activeEl",debounce(t,50)),!1!==this.__onGlobalDialog&&!0!==this.$q.fullscreen.isActive||t()}else void 0!==this.__portal&&!1===this.__onGlobalDialog&&getPortalsContainer(document.body).appendChild(this.__portal.$el)},__hidePortal(){if(void 0!==this.__portal){void 0!==this.unwatchFullscreen&&(this.unwatchFullscreen(),this.unwatchFullscreen=void 0),!1===this.__onGlobalDialog&&(this.__portal.$destroy(),this.__portal.$el.remove());const t=this.__portal.$el.parentElement;t&&t.parentElement!==document.body&&0===t.children.length&&t.remove(),this.__portal=void 0}},__preparePortal(){void 0===this.__portal&&(!0===this.__onGlobalDialog&&portalVms.set(this.$el,this),this.__portal=!0===this.__onGlobalDialog?{$el:this.$el,$refs:this.$refs}:new Vue__default.default({name:"QPortal",parent:this,inheritAttrs:!1,render:t=>(this.$nextTick(()=>{portalVms.set(this.__portal.$el,this)}),this.__renderPortal(t)),components:this.$options.components,directives:this.$options.directives}).$mount())},__getInnerNode(){return void 0!==this.__portal&&void 0!==this.__portal.$refs?this.__portal.$refs.inner:void 0},__focusCyclePortal(t){if(void 0===this.__portal||!0!==document.body.contains(this.__portal.$el))return;const e=this.__portal.$el.parentElement.children,{activeElement:i}=document,s=i?findIndexProto.call(e,t=>"function"==typeof t.contains&&t.contains(i)):-1;if(s<0){if(!0!==t){if(i){const t=portalVms.get(e[0]);t&&(t.__refocusTarget=i)}this.focus()}return}const o=portalVms.get(e[s]);if(!0===t){const t=mapProto.call(e,t=>portalVms.get(t)).filter(t=>t&&!0===this.__portal.$el.contains(t.__refocusTarget));if(t.length>0&&t.forEach(t=>{t.__refocusTarget=this.__refocusTarget}),t.indexOf(o)>-1)return}const n=!0===t?this:o||this,r=n.__refocusTarget;if(n!==this||!0!==t||!1!==n.seamless){if(!1===n.seamless)return void this.focus();if(s>0){const i=e[s-1],o=portalVms.get(i);if(o&&(!0!==t||!1===o.seamless)&&(-1!==[null,void 0,document.body].indexOf(r)||!1===i.contains(r)))return void o.focus()}}if(-1===[null,void 0,document.body].indexOf(r)&&!0===document.body.contains(r))managedFocus(r);else if(!0!==t){const{body:t}=document,e=t.hasAttribute("tabindex");!1===e&&t.setAttribute("tabindex",-1),t.focus(),!1===e&&this.$nextTick(()=>{t&&t.removeAttribute("tabindex")})}}},render(t){if(!0===this.__onGlobalDialog)return this.__renderPortal(t);void 0!==this.__portal&&this.__portal.$forceUpdate()},beforeDestroy(){this.__hidePortal()}};!1===isSSR&&(Portal.created=function(){this.__onGlobalDialog=isOnGlobalDialog(this.$parent)});var FocusWrapMixin={computed:{focusGuardElements(){return{firstGuard:this.$createElement("span",{staticClass:"no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus",attrs:{tabindex:0},on:{focus:this.__focusLast}}),lastGuard:this.$createElement("span",{staticClass:"no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus",attrs:{tabindex:0},on:{focus:this.__focusFirst}})}}},methods:{__focusFirst(t){const e=this.__getInnerNode();if(void 0!==e&&(!0!==t||!0!==e.contains(document.activeElement))){changeFocusedElement(Array.prototype.slice.call(e.querySelectorAll(FOCUSABLE_SELECTOR),1,-1),0,1)}},__focusLast(){const t=this.__getInnerNode();if(void 0!==t){const e=Array.prototype.slice.call(t.querySelectorAll(FOCUSABLE_SELECTOR),1,-1);changeFocusedElement(e,e.length-1,-1)}},__getFocusWrappedContent(t){return mergeSlot([this.focusGuardElements.firstGuard],this,t).concat(this.focusGuardElements.lastGuard)}}};function getVmOfNode(t){for(let e=t;null!==e;e=e.parentNode)if(void 0!==e.__vue__)return e.__vue__}function isVmChildOf(t,e){if(null===t||null===e)return null;for(let i=t;void 0!==i;i=i.$parent)if(i===e)return!0;return!1}let timer;const{notPassiveCapture:notPassiveCapture,passiveCapture:passiveCapture}=listenOpts,handlers$1={click:[],focus:[]};function hasModalsAbove(t){for(;null!==(t=t.nextElementSibling);)if(t.classList.contains("q-dialog--modal"))return!0;return!1}function execHandlers(t,e){for(let i=t.length-1;i>=0;i--)if(void 0===t[i](e))return}function globalHandler(t){clearTimeout(timer),"focusin"===t.type&&(!0===client.is.ie&&t.target===document.body||!0===t.target.hasAttribute("tabindex"))?timer=setTimeout(()=>{execHandlers(handlers$1.focus,t)},!0===client.is.ie?500:200):execHandlers(handlers$1.click,t)}var ClickOutside={name:"click-outside",bind(t,{arg:e,value:i},s){const o=s.componentInstance||s.context,n={trigger:i,toggleEl:e,handler(e){const i=e.target;if(!(!0===e.qClickOutside||!0!==document.body.contains(i)||8===i.nodeType||i===document.documentElement||!1!==i.classList.contains("no-pointer-events")||!0===hasModalsAbove(t)||void 0!==n.toggleEl&&!1!==n.toggleEl.contains(i)||i!==document.body&&!1!==isVmChildOf(getVmOfNode(i),o)))return e.qClickOutside=!0,n.trigger(e)}};t.__qclickoutside&&(t.__qclickoutside_old=t.__qclickoutside),t.__qclickoutside=n,0===handlers$1.click.length&&(document.addEventListener("mousedown",globalHandler,notPassiveCapture),document.addEventListener("touchstart",globalHandler,notPassiveCapture),document.addEventListener("focusin",globalHandler,passiveCapture)),handlers$1.click.push(n.handler),n.timerFocusin=setTimeout(()=>{handlers$1.focus.push(n.handler)},500)},update(t,{arg:e,value:i,oldValue:s}){const o=t.__qclickoutside;void 0!==o&&(o.toggleEl!==e&&(o.toggleEl=e),s!==i&&(o.trigger=i))},unbind(t){const e=t.__qclickoutside_old||t.__qclickoutside;if(void 0!==e){clearTimeout(e.timerFocusin);const i=handlers$1.click.findIndex(t=>t===e.handler),s=handlers$1.focus.findIndex(t=>t===e.handler);i>-1&&handlers$1.click.splice(i,1),s>-1&&handlers$1.focus.splice(s,1),0===handlers$1.click.length&&(clearTimeout(timer),document.removeEventListener("mousedown",globalHandler,notPassiveCapture),document.removeEventListener("touchstart",globalHandler,notPassiveCapture),document.removeEventListener("focusin",globalHandler,passiveCapture)),delete t[t.__qclickoutside_old?"__qclickoutside_old":"__qclickoutside"]}}};const scrollTargets=!0===isSSR?[]:[null,document,document.body,document.scrollingElement,document.documentElement];let rtlHasScrollBugStatus;function rtlHasScrollBug(){if(!0===isSSR)return!1;if(void 0===rtlHasScrollBugStatus){const t=document.createElement("div"),e=document.createElement("div");Object.assign(t.style,{direction:"rtl",width:"1px",height:"1px",overflow:"auto"}),Object.assign(e.style,{width:"1000px",height:"1px"}),t.appendChild(e),document.body.appendChild(t),t.scrollLeft=-1e3,rtlHasScrollBugStatus=t.scrollLeft>=0,t.remove()}return rtlHasScrollBugStatus}function getScrollTarget(t,e){let i=getElement(e);if(null===i){if(t!==Object(t)||"function"!=typeof t.closest)return window;i=t.closest(".scroll,.scroll-y,.overflow-auto,.q-dialog__inner > div")}return scrollTargets.includes(i)?window:i}function getScrollHeight(t){return(t===window?document.body:t).scrollHeight}function getScrollWidth(t){return(t===window?document.body:t).scrollWidth}function getVerticalScrollPosition(t){return t===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:t.scrollTop}const getScrollPosition=getVerticalScrollPosition;function getHorizontalScrollPosition(t){return t===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:t.scrollLeft}function animVerticalScrollTo(t,e,i=0){const s=void 0===arguments[3]?performance.now():arguments[3],o=getVerticalScrollPosition(t);i<=0?o!==e&&setScroll$1(t,e):requestAnimationFrame(n=>{const r=n-s,a=o+(e-o)/Math.max(r,i)*r;setScroll$1(t,a),a!==e&&animVerticalScrollTo(t,e,i-r,n)})}const animScrollTo=animVerticalScrollTo;function animHorizontalScrollTo(t,e,i=0){const s=void 0===arguments[3]?performance.now():arguments[3],o=getHorizontalScrollPosition(t);i<=0?o!==e&&setHorizontalScroll(t,e):requestAnimationFrame(n=>{const r=n-s,a=o+(e-o)/Math.max(r,i)*r;setHorizontalScroll(t,a),a!==e&&animHorizontalScrollTo(t,e,i-r,n)})}function setScroll$1(t,e){t!==window?t.scrollTop=e:window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e)}function setHorizontalScroll(t,e){t!==window?t.scrollLeft=e:window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)}function setVerticalScrollPosition(t,e,i){i?animVerticalScrollTo(t,e,i):setScroll$1(t,e)}const setScrollPosition=setVerticalScrollPosition;function setHorizontalScrollPosition(t,e,i){i?animHorizontalScrollTo(t,e,i):setHorizontalScroll(t,e)}let size;function getScrollbarWidth(){if(void 0!==size)return size;const t=document.createElement("p"),e=document.createElement("div");css(t,{width:"100%",height:"200px"}),css(e,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),e.appendChild(t),document.body.appendChild(e);const i=t.offsetWidth;e.style.overflow="scroll";let s=t.offsetWidth;return i===s&&(s=e.clientWidth),e.remove(),size=i-s}function hasScrollbar(t,e=!0){return!(!t||t.nodeType!==Node.ELEMENT_NODE)&&(e?t.scrollHeight>t.clientHeight&&(t.classList.contains("scroll")||t.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(t)["overflow-y"])):t.scrollWidth>t.clientWidth&&(t.classList.contains("scroll")||t.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(t)["overflow-x"])))}let executeWhenScrollableList=[];function executeWhenScrollable(t){return!0!==document.qScrollPrevented?(t(),noop):(-1===executeWhenScrollableList.indexOf(t)&&executeWhenScrollableList.push(t),()=>{const e=executeWhenScrollableList.indexOf(t);e>-1&&(executeWhenScrollableList=executeWhenScrollableList.splice(e,1))})}function triggerIsScrollable(){const t=executeWhenScrollableList.slice();executeWhenScrollableList=[],t.forEach(t=>{t()})}var scroll={getScrollTarget:getScrollTarget,getScrollHeight:getScrollHeight,getScrollWidth:getScrollWidth,getScrollPosition:getScrollPosition,getVerticalScrollPosition:getVerticalScrollPosition,getHorizontalScrollPosition:getHorizontalScrollPosition,rtlHasScrollBug:rtlHasScrollBug,animScrollTo:animScrollTo,animVerticalScrollTo:animVerticalScrollTo,animHorizontalScrollTo:animHorizontalScrollTo,setScrollPosition:setScrollPosition,setVerticalScrollPosition:setVerticalScrollPosition,setHorizontalScrollPosition:setHorizontalScrollPosition,executeWhenScrollable:executeWhenScrollable,getScrollbarWidth:getScrollbarWidth,hasScrollbar:hasScrollbar};const handlers=[];let escDown=!1;var EscapeKey={__install(){this.__installed=!0,window.addEventListener("keydown",t=>{escDown=27===t.keyCode}),window.addEventListener("blur",()=>{!0===escDown&&(escDown=!1)}),window.addEventListener("keyup",t=>{!0===escDown&&(escDown=!1,0!==handlers.length&&!0===isKeyCode(t,27)&&handlers[handlers.length-1].fn(t))})},register(t,e){!0===t.$q.platform.is.desktop&&(!0!==this.__installed&&this.__install(),handlers.push({comp:t,fn:e}))},pop(t){if(!0===t.$q.platform.is.desktop){const e=handlers.findIndex(e=>e.comp===t);e>-1&&handlers.splice(e,1)}}};const SIDE_SPACE=4,horizontalPos={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};function isFixedPositioned(t){for(;t&&t!==document;){if("fixed"===window.getComputedStyle(t).position)return!0;t=t.parentNode}return!1}function isDocumentScrollableX(){return"hidden"!==window.getComputedStyle(document.documentElement).overflowX&&"hidden"!==window.getComputedStyle(document.body).overflowX}function isDocumentScrollableY(){return"hidden"!==window.getComputedStyle(document.documentElement).overflowY&&"hidden"!==window.getComputedStyle(document.body).overflowY}function computeScrollLeft(t,e,i){if(!0===t)return{vpLeft:e.offsetLeft,apLeft:e.offsetLeft};const s=window.pageXOffset||window.scrollX||document.body.scrollLeft||0;if(!0!==i)return{vpLeft:s,apLeft:s};const o=(!0===rtlHasScrollBug()?0:document.documentElement.scrollWidth-document.documentElement.clientWidth)+s;return{vpLeft:o,apLeft:o+document.documentElement.scrollWidth-document.documentElement.clientWidth}}function validatePosition(t){const e=t.split(" ");return 2===e.length&&(!0!==["top","center","bottom"].includes(e[0])?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):!0===["left","middle","right","start","end"].includes(e[1])||(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1))}function validateOffset(t){return!0!==t||2===t.length&&("number"==typeof t[0]&&"number"==typeof t[1])}function parsePosition(t,e){const i=t.split(" ");return{vertical:i[0],horizontal:horizontalPos[`${i[1]}#${!0===e?"rtl":"ltr"}`]}}function getAnchorProps(t,e,i){let{top:s,left:o,right:n,bottom:r,width:a,height:l}=t.getBoundingClientRect();if(0===a&&(a=t.offsetWidth),0===l&&(l=t.offsetHeight),void 0!==e&&(o-=e[0],n+=e[0],s-=e[1],r+=e[1]),!0===i){const t=document.documentElement.scrollWidth-document.documentElement.clientWidth;o-=t,n-=t}return{left:o,middle:o+(n-o)/2,right:n,top:s,center:s+(r-s)/2,bottom:r,leftRev:n,middleRev:o+(n-o)/2,rightRev:o,topRev:r,centerRev:s+(r-s)/2,bottomRev:s,width:a,height:l}}function getTargetProps(t){let{width:e,height:i}=t.getBoundingClientRect();return 0===e&&(e=t.offsetWidth),0===i&&(i=t.offsetHeight),{width:e,height:i}}function setPosition(t){const e=t.el;if(!0===e.classList.contains("q-body--scroll-locked"))return;let i,s;const{documentElement:o,body:n,qScrollPrevented:r}=document,a=e.children[0],l="1"!==a.style.opacity,h=isFixedPositioned(t.anchorEl),d={...t.anchorOrigin},c={...t.selfOrigin},u=!0===h&&!0===client.is.ios&&void 0!==window.visualViewport?window.visualViewport:{offsetLeft:0,offsetTop:!0===r?o.scrollTop:0},{vpLeft:p,apLeft:m}=computeScrollLeft(h,u,t.rtl),g=!0===h?u.offsetTop:window.pageYOffset||window.scrollY||n.scrollTop||0,f=!0===r?"offsetWidth":!0===h||!0!==isDocumentScrollableX()?"clientWidth":"scrollWidth",_=!0===r?"offsetHeight":!0===h||!0!==isDocumentScrollableY()?"clientHeight":"scrollHeight",v=o[f],b=o[_];if(void 0===t.absoluteOffset)i=getAnchorProps(t.anchorEl,!0===t.cover?[0,0]:t.offset,!0===t.rtl&&!0!==h);else{const e=!0===t.rtl&&!0!==h?o.scrollWidth-o.clientWidth:0,{top:s,left:n}=t.anchorEl.getBoundingClientRect(),r=s+(!0===t.cover?0:t.absoluteOffset.top),a=n+(!0===t.cover||!0===t.fit?0:t.absoluteOffset.left)-e;i={left:a,middle:a,right:a,top:r,center:r,bottom:r,leftRev:a,middleRev:a,rightRev:a,topRev:r,centerRev:r,bottomRev:r,width:0,height:0}}const y={minWidth:t.minWidth||null,minHeight:t.minHeight||null,maxWidth:t.maxWidth||null,maxHeight:t.maxHeight||null};if(!0!==t.fit&&!0!==t.cover||(null===t.minWidth&&(y.minWidth=i.width+"px"),!0===t.cover&&null===t.minHeight&&(y.minHeight=i.height+"px")),Object.assign(a.style,y),!0===l){const t=a.cloneNode(!0);t.classList.add("q-portal__clone"),n.appendChild(t),s=getTargetProps(t),t.remove()}else s=getTargetProps(a);null!==y.minWidth&&i.width>s.width&&(y.minWidth=s.width+"px"),null!==y.minHeight&&i.height>s.height&&(y.minHeight=s.height+"px");const S={position:!0===h?"fixed":"absolute",left:null,right:null,marginLeft:null,marginRight:null,maxWidth:null,top:null,bottom:null,marginTop:null,marginBottom:null,maxHeight:null},x=Math.min(p+i[t.anchorOrigin.horizontal],v-m-i[t.anchorOrigin.horizontal])-SIDE_SPACE,C=Math.min(g+i[t.anchorOrigin.vertical],b-g-i[t.anchorOrigin.vertical])-SIDE_SPACE;"left"===c.horizontal&&s.width+SIDE_SPACE>v-m-i[d.horizontal]&&p+i[d.horizontal+"Rev"]>v-m-i[d.horizontal]?(c.horizontal="right",d.horizontal=d.horizontal+"Rev"):"right"===c.horizontal&&s.width+SIDE_SPACE>p+i[d.horizontal]&&v-m-i[d.horizontal+"Rev"]>p+i[d.horizontal]?(c.horizontal="left",d.horizontal=d.horizontal+"Rev"):"middle"===c.horizontal&&s.width/2>x&&(c.horizontal=p+i[d.horizontal]b-g-i[d.vertical]&&g+i[d.vertical+"Rev"]>b-g-i[d.vertical]?(c.vertical="bottom",d.vertical=d.vertical+"Rev"):"bottom"===c.vertical&&s.height+SIDE_SPACE>g+i[d.vertical]&&b-g-i[d.vertical+"Rev"]>g+i[d.vertical]?(c.vertical="top",d.vertical=d.vertical+"Rev"):"center"===c.vertical&&s.height/2>C&&(c.vertical=g+i[d.vertical]{a.style.opacity=1})}["left","middle","right"].forEach(t=>{horizontalPos[`${t}#ltr`]=t,horizontalPos[`${t}#rtl`]=t});var QMenu=Vue__default.default.extend({name:"QMenu",mixins:[AttrsMixin,DarkMixin,AnchorMixin,TimeoutMixin,ModelToggleMixin,Portal,TransitionMixin,FocusWrapMixin],directives:{ClickOutside:ClickOutside},props:{persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:validatePosition},self:{type:String,validator:validatePosition},offset:{type:Array,validator:validateOffset},scrollTarget:{default:void 0},touchPosition:{type:Boolean,default:null},minHeight:{type:String,default:null},minWidth:{type:String,default:null},maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}},computed:{anchorOrigin(){return parsePosition(this.anchor||(!0===this.cover?"center middle":"bottom start"),this.$q.lang.rtl)},selfOrigin(){return!0===this.cover?this.anchorOrigin:parsePosition(this.self||"top start",this.$q.lang.rtl)},menuClass(){return(!0===this.square?" q-menu--square":"")+` q-menu--${this.darkSuffix} q-${this.darkSuffix}`},hideOnRouteChange(){return!0!==this.persistent&&!0!==this.noRouteDismiss},onEvents(){const t={...this.qListeners,input:stop,"popup-show":stop,"popup-hide":stop};return!0===this.autoClose&&(t.click=this.__onAutoClose),t},attrs(){return{tabindex:-1,role:"menu",...this.qAttrs}}},methods:{__show(t){if(this.__refocusTarget=!0===this.$q.platform.is.desktop&&!1===this.noRefocus&&null!==document.activeElement?document.activeElement:void 0,EscapeKey.register(this,()=>{!0===this.persistent?this.__focusCyclePortal():(this.$emit("escape-key"),this.hide())}),this.__showPortal(),this.__configureScrollTarget(),this.absoluteOffset=void 0,void 0!==t&&(!0===this.touchPosition||!1!==this.touchPosition&&this.contextMenu)){const e=position(t);if(void 0!==e.left){const{top:t,left:i}=this.anchorEl.getBoundingClientRect();this.absoluteOffset={left:e.left-i,top:e.top-t}}}void 0===this.unwatch&&(this.unwatch=this.$watch(()=>this.$q.screen.width+"|"+this.$q.screen.height+"|"+this.self+"|"+this.anchor+"|"+this.$q.lang.rtl,this.updatePosition)),this.$el.dispatchEvent(create("popup-show",{bubbles:!0})),!0!==this.noFocus?(null!==document.activeElement&&document.activeElement.blur(),this.__registerTick(()=>{this.focus(),this.updatePosition()})):this.__registerTick(()=>{this.updatePosition()}),this.__registerTimeout(()=>{!0===this.$q.platform.is.ios&&(this.__avoidAutoClose=this.autoClose,this.__portal.$el.click()),this.$emit("show",t)},300)},__hide(t){this.__removeTick(),this.__anchorCleanup(!0),void 0!==t&&!0===t.qClickOutside||this.__focusCyclePortal(!0),this.$el.dispatchEvent(create("popup-hide",{bubbles:!0})),this.__registerTimeout(()=>{!0!==this.showing&&(this.__hidePortal(),this.$emit("hide",t))},300)},__anchorCleanup(t){this.absoluteOffset=void 0,void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0),!0!==t&&!0!==this.showing||(EscapeKey.pop(this),this.__unconfigureScrollTarget())},__unconfigureScrollTarget(){this.__changeScrollEvent()},__configureScrollTarget(){!this.showing||void 0===this.anchorEl&&void 0===this.scrollTarget||this.__changeScrollEvent(this.updatePosition,getScrollTarget(this.anchorEl,this.scrollTarget))},__onAutoClose(t){!0!==this.__avoidAutoClose?(closePortalMenus(this,t),void 0!==this.qListeners.click&&this.$emit("click",t)):this.__avoidAutoClose=!1},updatePosition(){if(void 0===this.anchorEl||void 0===this.__portal)return;const t=this.__portal.$el;8!==t.nodeType?(void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),this.settingPosition=requestAnimationFrame(()=>{const e=!0===this.touchPosition||!1!==this.touchPosition&&this.contextMenu;setPosition({el:t,offset:this.offset,anchorEl:this.anchorEl,anchorOrigin:this.anchorOrigin,selfOrigin:this.selfOrigin,absoluteOffset:this.absoluteOffset,fit:!0!==e&&!0===this.fit,cover:!0!==e&&!0===this.cover,minHeight:this.minHeight,minWidth:this.minWidth,maxHeight:this.maxHeight,maxWidth:this.maxWidth,rtl:this.$q.lang.rtl}),this.settingPosition=void 0})):setTimeout(this.updatePosition,25)},__onClickOutside(t){if(!0!==this.persistent&&!0===this.showing){const e=t.target.classList;return closePortalMenus(this,t),"touchstart"!==t.type&&!0!==e.contains("q-dialog__backdrop")||(stopAndPrevent(t),this.$q.interaction.preventClick(t.target,!0)),!0}},__renderPortal(t){return t("transition",{props:this.transitionProps},[!0===this.showing?t("div",{class:"q-menu__container column no-pointer-events",directives:[{name:"click-outside",value:this.__onClickOutside,arg:this.anchorEl}]},[t("div",{ref:"inner",staticClass:"q-menu scroll all-pointer-events"+this.menuClass,class:this.contentClass,style:this.contentStyle,attrs:this.attrs,on:this.onEvents},this.__getFocusWrappedContent("default"))]):null])}},created(){this.__useTick("__registerTick","__removeTick"),this.__useTimeout("__registerTimeout")},mounted(){this.__processModelChange(this.value)},beforeDestroy(){void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),!0===this.showing&&void 0!==this.anchorEl&&this.anchorEl.dispatchEvent(create("popup-hide",{bubbles:!0})),this.__refocusTarget=void 0}});let buf,bufIdx=0;const hexBytes=new Array(256);for(let t=0;t<256;t++)hexBytes[t]=(t+256).toString(16).substr(1);const randomBytes=(()=>{const t="undefined"!=typeof crypto?crypto:"undefined"!=typeof window?window.msCrypto:void 0;if(void 0!==t){if(void 0!==t.randomBytes)return t.randomBytes;if(void 0!==t.getRandomValues)return e=>{var i=new Uint8Array(e);return t.getRandomValues(i),i}}return t=>{const e=[];for(let i=t;i>0;i--)e.push(Math.floor(256*Math.random()));return e}})(),BUFFER_SIZE=4096;function uid$3(){(void 0===buf||bufIdx+16>BUFFER_SIZE)&&(bufIdx=0,buf=randomBytes(BUFFER_SIZE));const t=Array.prototype.slice.call(buf,bufIdx,bufIdx+=16);return t[6]=15&t[6]|64,t[8]=63&t[8]|128,hexBytes[t[0]]+hexBytes[t[1]]+hexBytes[t[2]]+hexBytes[t[3]]+"-"+hexBytes[t[4]]+hexBytes[t[5]]+"-"+hexBytes[t[6]]+hexBytes[t[7]]+"-"+hexBytes[t[8]]+hexBytes[t[9]]+"-"+hexBytes[t[10]]+hexBytes[t[11]]+hexBytes[t[12]]+hexBytes[t[13]]+hexBytes[t[14]]+hexBytes[t[15]]}const menuTransitionProps=Object.keys(TransitionMixin.props).reduce((t,e)=>(t[e]={})&&t,{});var QBtnDropdown=Vue__default.default.extend({name:"QBtnDropdown",mixins:[BtnMixin,AttrsMixin],inheritAttrs:!1,props:{value:Boolean,split:Boolean,dropdownIcon:String,contentClass:[Array,String,Object],contentStyle:[Array,String,Object],cover:Boolean,persistent:Boolean,noRouteDismiss:Boolean,autoClose:Boolean,menuAnchor:{type:String,default:"bottom end"},menuSelf:{type:String,default:"top end"},menuOffset:Array,...menuTransitionProps,disableMainBtn:Boolean,disableDropdown:Boolean,noIconAnimation:Boolean,toggleAriaLabel:String},data(){return{showing:this.value}},watch:{value(t){void 0!==this.$refs.menu&&this.$refs.menu[t?"show":"hide"]()},split(){this.hide()}},render(t){const e=slot(this,"label",[]),i={"aria-expanded":!0===this.showing?"true":"false","aria-haspopup":"true","aria-controls":this.targetUid,"aria-owns":this.targetUid,"aria-label":this.toggleAriaLabel||this.$q.lang.label[!0===this.showing?"collapse":"expand"](this.label)};(!0===this.disable||!1===this.split&&!0===this.disableMainBtn||!0===this.disableDropdown)&&(i["aria-disabled"]="true");const s=[t(QIcon,{props:{name:this.dropdownIcon||this.$q.iconSet.arrow.dropdown},class:"q-btn-dropdown__arrow"+(!0===this.showing&&!1===this.noIconAnimation?" rotate-180":"")+(!1===this.split?" q-btn-dropdown__arrow-container":"")})];if(!0!==this.disableDropdown&&s.push(t(QMenu,{key:"menu",ref:"menu",attrs:{id:this.targetUid},props:{cover:this.cover,fit:!0,persistent:this.persistent,noRouteDismiss:this.noRouteDismiss,autoClose:this.autoClose,anchor:this.menuAnchor,self:this.menuSelf,offset:this.menuOffset,contentClass:this.contentClass,contentStyle:this.contentStyle,separateClosePopup:!0,transitionShow:this.transitionShow,transitionHide:this.transitionHide},on:cache(this,"menu",{"before-show":t=>{this.showing=!0,this.$emit("before-show",t)},show:t=>{this.$emit("show",t),this.$emit("input",!0)},"before-hide":t=>{this.showing=!1,this.$emit("before-hide",t)},hide:t=>{this.$emit("hide",t),this.$emit("input",!1)}})},slot(this,"default"))),!1===this.split)return t(QBtn,{key:"nonSpl",class:"q-btn-dropdown q-btn-dropdown--simple",props:{...this.$props,disable:!0===this.disable||!0===this.disableMainBtn,noWrap:!0,round:!1},attrs:{...i,...this.qAttrs},on:cache(this,"nonSpl",{click:t=>{this.$emit("click",t)}}),scopedSlots:{loading:this.$scopedSlots.loading}},e.concat(s));const o=t(QBtn,{key:"spl",class:"q-btn-dropdown--current",props:{...this.$props,disable:!0===this.disable||!0===this.disableMainBtn,noWrap:!0,iconRight:this.iconRight,round:!1},attrs:this.qAttrs,on:cache(this,"spl",{click:t=>{stop(t),this.hide(),this.$emit("click",t)}}),scopedSlots:{loading:this.$scopedSlots.loading}},e);return t(QBtnGroup,{props:{outline:this.outline,flat:this.flat,rounded:this.rounded,square:this.square,push:this.push,unelevated:this.unelevated,glossy:this.glossy,stretch:this.stretch},staticClass:"q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item"},[o,t(QBtn,{staticClass:"q-btn-dropdown__arrow-container q-anchor--skip",attrs:i,props:{disable:!0===this.disable||!0===this.disableDropdown,outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,size:this.size,color:this.color,textColor:this.textColor,dense:this.dense,ripple:this.ripple}},s)])},methods:{toggle(t){this.$refs.menu&&this.$refs.menu.toggle(t)},show(t){this.$refs.menu&&this.$refs.menu.show(t)},hide(t){this.$refs.menu&&this.$refs.menu.hide(t)}},created(){this.targetUid=`d_${uid$3()}`},mounted(){!0===this.value&&this.show()}}),FormMixin={props:{name:String},computed:{formAttrs(){return{type:"hidden",name:this.name,value:this.value}}},methods:{__injectFormInput(t,e,i){t[e](this.$createElement("input",{staticClass:"hidden",class:i,attrs:this.formAttrs,domProps:this.formDomProps}))}}};const FormFieldMixin={props:{name:String},computed:{nameProp(){return this.name||this.for}}};var QBtnToggle=Vue__default.default.extend({name:"QBtnToggle",mixins:[ListenersMixin,RippleMixin,FormMixin],props:{value:{required:!0},options:{type:Array,required:!0,validator:t=>t.every(t=>("label"in t||"icon"in t||"slot"in t)&&"value"in t)},color:String,textColor:String,toggleColor:{type:String,default:"primary"},toggleTextColor:String,outline:Boolean,flat:Boolean,unelevated:Boolean,rounded:Boolean,push:Boolean,glossy:Boolean,size:String,padding:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,readonly:Boolean,disable:Boolean,stack:Boolean,stretch:Boolean,spread:Boolean,clearable:Boolean},computed:{hasActiveValue(){return void 0!==this.options.find(t=>t.value===this.value)},formAttrs(){return{type:"hidden",name:this.name,value:this.value}},btnOptions(){const t=(t,e)=>void 0===t[e]?this[e]:t[e];return this.options.map((e,i)=>({slot:e.slot,options:{key:i,class:e.class,style:e.style,on:{...this.qListeners,click:t=>this.__set(e.value,e,t)},attrs:{"aria-pressed":e.value===this.value?"true":"false",...e.attrs},props:{...e,slot:void 0,class:void 0,style:void 0,value:void 0,attrs:void 0,outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,unelevated:this.unelevated,dense:this.dense,disable:!0===this.disable||!0===e.disable,color:e.value===this.value?t(e,"toggleColor"):t(e,"color"),textColor:e.value===this.value?t(e,"toggleTextColor"):t(e,"textColor"),noCaps:!0===t(e,"noCaps"),noWrap:!0===t(e,"noWrap"),size:t(e,"size"),padding:t(e,"padding"),ripple:t(e,"ripple"),stack:!0===t(e,"stack"),stretch:!0===t(e,"stretch")}}}))}},methods:{__set(t,e,i){!0!==this.readonly&&(this.value===t?!0===this.clearable&&(this.$emit("input",null,null),this.$emit("clear")):this.$emit("input",t,e),this.$emit("click",i))}},render(t){const e=this.btnOptions.map(e=>t(QBtn,{...e.options},void 0!==e.slot?slot(this,e.slot):void 0));return void 0!==this.name&&!0!==this.disable&&!0===this.hasActiveValue&&this.__injectFormInput(e,"push"),t(QBtnGroup,{staticClass:"q-btn-toggle",props:{outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,stretch:this.stretch,unelevated:this.unelevated,glossy:this.glossy,spread:this.spread}},mergeSlot(e,this,"default"))}}),QCard=Vue__default.default.extend({name:"QCard",mixins:[ListenersMixin,DarkMixin,TagMixin],props:{square:Boolean,flat:Boolean,bordered:Boolean},computed:{classes(){return"q-card"+` q-card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.bordered?" q-card--bordered":"")+(!0===this.square?" q-card--square no-border-radius":"")+(!0===this.flat?" q-card--flat no-shadow":"")}},render(t){return t(this.tag,{class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QCardSection=Vue__default.default.extend({name:"QCardSection",mixins:[ListenersMixin,TagMixin],props:{horizontal:Boolean},computed:{classes(){return"q-card__section "+`q-card__section--${!0===this.horizontal?"horiz row no-wrap":"vert"}`}},render(t){return t(this.tag,{class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QCardActions=Vue__default.default.extend({name:"QCardActions",mixins:[ListenersMixin,AlignMixin],props:{vertical:Boolean},computed:{classes(){return`q-card__actions--${!0===this.vertical?"vert column":"horiz row"} ${this.alignClass}`}},render(t){return t("div",{staticClass:"q-card__actions",class:this.classes,on:{...this.qListeners}},slot(this,"default"))}});const hasMap="function"==typeof Map,hasSet="function"==typeof Set,hasArrayBuffer="function"==typeof ArrayBuffer;function isDeepEqual(t,e){if(t===e)return!0;if(null!==t&&null!==e&&"object"==typeof t&&"object"==typeof e){if(t.constructor!==e.constructor)return!1;let i,s;if(t.constructor===Array){if((i=t.length)!==e.length)return!1;for(s=i;0!=s--;)if(!0!==isDeepEqual(t[s],e[s]))return!1;return!0}if(!0===hasMap&&t.constructor===Map){if(t.size!==e.size)return!1;for(s=t.entries().next();!0!==s.done;){if(!0!==e.has(s.value[0]))return!1;s=s.next()}for(s=t.entries().next();!0!==s.done;){if(!0!==isDeepEqual(s.value[1],e.get(s.value[0])))return!1;s=s.next()}return!0}if(!0===hasSet&&t.constructor===Set){if(t.size!==e.size)return!1;for(s=t.entries().next();!0!==s.done;){if(!0!==e.has(s.value[0]))return!1;s=s.next()}return!0}if(!0===hasArrayBuffer&&null!=t.buffer&&t.buffer.constructor===ArrayBuffer){if((i=t.length)!==e.length)return!1;for(s=i;0!=s--;)if(t[s]!==e[s])return!1;return!0}if(t.constructor===RegExp)return t.source===e.source&&t.flags===e.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===e.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===e.toString();const o=Object.keys(t).filter(e=>void 0!==t[e]);if((i=o.length)!==Object.keys(e).filter(t=>void 0!==e[t]).length)return!1;for(s=i;0!=s--;){const i=o[s];if(!0!==isDeepEqual(t[i],e[i]))return!1}return!0}return t!=t&&e!=e}function isObject(t){return null!==t&&"object"==typeof t&&!0!==Array.isArray(t)}function isDate(t){return"[object Date]"===Object.prototype.toString.call(t)}function isRegexp(t){return"[object RegExp]"===Object.prototype.toString.call(t)}function isNumber(t){return"number"==typeof t&&isFinite(t)}var is={deepEqual:isDeepEqual,object:isObject,date:isDate,regexp:isRegexp,number:isNumber};const directions$1=["left","right","up","down","horizontal","vertical"],modifiersAll={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0,all:!0};function getModifierDirections(t){const e={};return directions$1.forEach(i=>{t[i]&&(e[i]=!0)}),0===Object.keys(e).length?modifiersAll:(!0===e.horizontal&&(e.left=e.right=!0),!0===e.vertical&&(e.up=e.down=!0),!0===e.left&&!0===e.right&&(e.horizontal=!0),!0===e.up&&!0===e.down&&(e.vertical=!0),!0===e.horizontal&&!0===e.vertical&&(e.all=!0),e)}function shouldStart(t,e){return void 0===e.event&&void 0!==t.target&&!0!==t.target.draggable&&"function"==typeof e.handler&&"INPUT"!==t.target.nodeName.toUpperCase()&&(void 0===t.qClonedBy||-1===t.qClonedBy.indexOf(e.uid))}function parseArg$3(t){const e=[.06,6,50];return"string"==typeof t&&t.length&&t.split(":").forEach((t,i)=>{const s=parseFloat(t);s&&(e[i]=s)}),e}function destroy$a(t){const e=t.__qtouchswipe;void 0!==e&&(cleanEvt(e,"main_mouse"),cleanEvt(e,"main_touch"),cleanEvt(e,"temp"),!0===client.is.firefox&&preventDraggable(t,!1),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchswipe)}function configureEvents$4(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&cleanEvt(e,"main_mouse"),!0===i.mouse&&addEvt(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===client.has.touch&&e.modifiers.capture!==i.capture&&(cleanEvt(e,"main_touch"),addEvt(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","notPassiveCapture"]])),e.modifiers=i}var TouchSwipe={name:"touch-swipe",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchswipe&&(destroy$a(t),t.__qtouchswipe_destroyed=!0);const o={handler:s,sensitivity:parseArg$3(i),arg:i,modifiers:{capture:null},direction:getModifierDirections(e),noop:noop,mouseStart(t){shouldStart(t,o)&&leftClick(t)&&(addEvt(o,"temp",[[document,"mousemove","move",`notPassive${!0===o.modifiers.mouseCapture?"Capture":""}`],[document,"mouseup","end","notPassiveCapture"]]),o.start(t,!0))},touchStart(t){if(shouldStart(t,o)){const e=t.target;addEvt(o,"temp",[[e,"touchmove","move","notPassiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(e,i){!0===client.is.firefox&&preventDraggable(t,!0);const s=position(e);o.event={x:s.left,y:s.top,time:Date.now(),mouse:!0===i,dir:!1}},move(t){if(void 0===o.event)return;if(!1!==o.event.dir)return void stopAndPrevent(t);const e=Date.now()-o.event.time;if(0===e)return;const i=position(t),s=i.left-o.event.x,n=Math.abs(s),r=i.top-o.event.y,a=Math.abs(r);if(!0!==o.event.mouse){if(no.sensitivity[0]&&(o.event.dir=r<0?"up":"down"),!0===o.direction.horizontal&&n>a&&a<100&&l>o.sensitivity[0]&&(o.event.dir=s<0?"left":"right"),!0===o.direction.up&&no.sensitivity[0]&&(o.event.dir="up"),!0===o.direction.down&&n0&&n<100&&h>o.sensitivity[0]&&(o.event.dir="down"),!0===o.direction.left&&n>a&&s<0&&a<100&&l>o.sensitivity[0]&&(o.event.dir="left"),!0===o.direction.right&&n>a&&s>0&&a<100&&l>o.sensitivity[0]&&(o.event.dir="right"),!1!==o.event.dir?(stopAndPrevent(t),!0===o.event.mouse&&(document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),clearSelection(),o.styleCleanup=(t=>{o.styleCleanup=void 0,document.body.classList.remove("non-selectable");const e=()=>{document.body.classList.remove("no-pointer-events--children")};!0===t?setTimeout(e,50):e()})),o.handler({evt:t,touch:!0!==o.event.mouse,mouse:o.event.mouse,direction:o.event.dir,duration:e,distance:{x:n,y:a}})):o.end(t)},end(e){void 0!==o.event&&(cleanEvt(o,"temp"),!0===client.is.firefox&&preventDraggable(t,!1),void 0!==o.styleCleanup&&o.styleCleanup(!0),void 0!==e&&!1!==o.event.dir&&stopAndPrevent(e),o.event=void 0)}};t.__qtouchswipe=o,configureEvents$4(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchswipe;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&(n.sensitivity=parseArg$3(i)),!0!==isDeepEqual(n.modifiers,e)&&(configureEvents$4(t,n,e),n.direction=getModifierDirections(e)))},unbind(t){void 0===t.__qtouchswipe_destroyed?destroy$a(t):delete t.__qtouchswipe_destroyed}};function getPanelWrapper(t){return t("div",{key:"stop",staticClass:"q-panel scroll",on:cache(this,"stop",{input:stop})},slot(this,"default"))}const PanelWrapper=Vue__default.default.extend({render:getPanelWrapper}),PanelParentMixin={mixins:[ListenersMixin],directives:{TouchSwipe:TouchSwipe},props:{value:{required:!0},animated:Boolean,infinite:Boolean,swipeable:Boolean,vertical:Boolean,transitionPrev:String,transitionNext:String,keepAlive:Boolean,keepAliveInclude:[String,Array,RegExp],keepAliveExclude:[String,Array,RegExp],keepAliveMax:Number},data:()=>({panelIndex:null,panelTransition:null}),computed:{panelDirectives(){if(!0===this.swipeable)return[{name:"touch-swipe",value:this.__swipe,modifiers:{horizontal:!0!==this.vertical,vertical:this.vertical,mouse:!0}}]},contentKey(){return"string"==typeof this.value||"number"==typeof this.value?this.value:String(this.value)},transitionPrevComputed(){return this.transitionPrev||`slide-${!0===this.vertical?"down":"right"}`},transitionNextComputed(){return this.transitionNext||`slide-${!0===this.vertical?"up":"left"}`},keepAliveProps(){return{include:this.keepAliveInclude,exclude:this.keepAliveExclude,max:this.keepAliveMax}},needsUniqueWrapper(){return void 0!==this.keepAliveInclude||void 0!==this.keepAliveExclude}},watch:{value(t,e){const i=!0===this.__isValidPanelName(t)?this.__getPanelIndex(t):-1;!0!==this.__forcedPanelTransition&&this.__updatePanelTransition(-1===i?0:i{this.$emit("transition",t,e)}))}},methods:{next(){this.__go(1)},previous(){this.__go(-1)},goTo(t){this.$emit("input",t)},__isValidPanelName:t=>void 0!==t&&null!==t&&""!==t,__getPanelIndex(t){return this.panels.findIndex(e=>{const i=e.componentOptions.propsData;return i.name===t&&""!==i.disable&&!0!==i.disable})},__getEnabledPanels(){return this.panels.filter(t=>{const e=t.componentOptions.propsData;return""!==e.disable&&!0!==e.disable})},__updatePanelTransition(t){const e=0!==t&&!0===this.animated&&-1!==this.panelIndex?"q-transition--"+(-1===t?this.transitionPrevComputed:this.transitionNextComputed):null;this.panelTransition!==e&&(this.panelTransition=e)},__go(t,e=this.panelIndex){let i=e+t;const s=this.panels;for(;i>-1&&i{this.__forcedPanelTransition=!1});i+=t}!0===this.infinite&&s.length>0&&-1!==e&&e!==s.length&&this.__go(t,-1===t?s.length:-1)},__swipe(t){const e=!0===this.vertical?"up":"left";this.__go((!0===this.$q.lang.rtl?-1:1)*(t.direction===e?1:-1))},__updatePanelIndex(){const t=this.__getPanelIndex(this.value);return this.panelIndex!==t&&(this.panelIndex=t),!0},__getPanelContent(t){if(0===this.panels.length)return;const e=this.__isValidPanelName(this.value)&&this.__updatePanelIndex()&&this.panels[this.panelIndex],i=!0===this.keepAlive?[t("keep-alive",{props:this.keepAliveProps},[t(!0===this.needsUniqueWrapper?cacheWithFn(this,this.contentKey,()=>Vue__default.default.extend({name:this.contentKey,render:getPanelWrapper})):PanelWrapper,{key:this.contentKey},[e])])]:[t("div",{staticClass:"q-panel scroll",key:this.contentKey,on:cache(this,"stop",{input:stop})},[e])];return!0===this.animated?[t("transition",{props:{name:this.panelTransition},on:onTransitionHideScroll},i)]:i}},render(t){return this.panels=slot(this,"default",[]).filter(t=>void 0!==t&&void 0!==t.componentOptions&&void 0!==t.componentOptions.propsData&&this.__isValidPanelName(t.componentOptions.propsData.name)),this.__renderPanels(t)}},PanelChildMixin={mixins:[ListenersMixin],props:{name:{required:!0},disable:Boolean}};let fullscreenCounter=0;var FullscreenMixin={props:{fullscreen:Boolean,noRouteFullscreenExit:Boolean},data:()=>({inFullscreen:!1}),watch:{$route(){!0!==this.noRouteFullscreenExit&&this.exitFullscreen()},fullscreen(t){this.inFullscreen!==t&&this.toggleFullscreen()},inFullscreen(t){this.$emit("update:fullscreen",t),this.$emit("fullscreen",t)}},methods:{toggleFullscreen(){!0===this.inFullscreen?this.exitFullscreen():this.setFullscreen()},setFullscreen(){!0!==this.inFullscreen&&(this.inFullscreen=!0,this.container=this.$el.parentNode,this.container.replaceChild(this.fullscreenFillerNode,this.$el),document.body.appendChild(this.$el),1===++fullscreenCounter&&document.body.classList.add("q-body--fullscreen-mixin"),this.__historyFullscreen={handler:this.exitFullscreen},History.add(this.__historyFullscreen))},exitFullscreen(){!0===this.inFullscreen&&(void 0!==this.__historyFullscreen&&(History.remove(this.__historyFullscreen),this.__historyFullscreen=void 0),this.container.replaceChild(this.$el,this.fullscreenFillerNode),this.inFullscreen=!1,0===(fullscreenCounter=Math.max(0,fullscreenCounter-1))&&(document.body.classList.remove("q-body--fullscreen-mixin"),void 0!==this.$el.scrollIntoView&&setTimeout(()=>{this.$el.scrollIntoView()})))}},beforeMount(){this.fullscreenFillerNode=document.createElement("span")},mounted(){!0===this.fullscreen&&this.setFullscreen()},beforeDestroy(){this.exitFullscreen()}},QCarousel=Vue__default.default.extend({name:"QCarousel",mixins:[DarkMixin,PanelParentMixin,FullscreenMixin],props:{height:String,padding:Boolean,controlType:{type:String,validator:t=>["regular","flat","outline","push","unelevated"].includes(t),default:"flat"},controlColor:String,controlTextColor:String,autoplay:[Number,Boolean],arrows:Boolean,prevIcon:String,nextIcon:String,navigation:Boolean,navigationPosition:{type:String,validator:t=>["top","right","bottom","left"].includes(t)},navigationIcon:String,navigationActiveIcon:String,thumbnails:Boolean},computed:{style(){if(!0!==this.inFullscreen&&void 0!==this.height)return{height:this.height}},direction(){return!0===this.vertical?"vertical":"horizontal"},classes(){return`q-carousel q-panel-parent q-carousel--with${!0===this.padding?"":"out"}-padding`+(!0===this.inFullscreen?" fullscreen":"")+` q-carousel--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.arrows?` q-carousel--arrows-${this.direction}`:"")+(!0===this.navigation?` q-carousel--navigation-${this.navigationPositionComputed}`:"")},arrowIcons(){const t=[this.prevIcon||this.$q.iconSet.carousel[!0===this.vertical?"up":"left"],this.nextIcon||this.$q.iconSet.carousel[!0===this.vertical?"down":"right"]];return!1===this.vertical&&!0===this.$q.lang.rtl?t.reverse():t},navIcon(){return this.navigationIcon||this.$q.iconSet.carousel.navigationIcon},navActiveIcon(){return this.navigationActiveIcon||this.navIcon},navigationPositionComputed(){return this.navigationPosition||(!0===this.vertical?"right":"bottom")},controlProps(){return{color:this.controlColor,textColor:this.controlTextColor,round:!0,[this.controlType]:!0,dense:!0}},transitionPrevComputed(){return this.transitionPrev||"fade"},transitionNextComputed(){return this.transitionNext||"fade"}},watch:{value(){this.autoplay&&(clearInterval(this.timer),this.__startTimer())},autoplay(t){t?this.__startTimer():clearInterval(this.timer)}},methods:{__startTimer(){const t=!0===isNumber(this.autoplay)?this.autoplay:5e3;this.timer=setTimeout(t>=0?this.next:this.previous,Math.abs(t))},__getNavigationContainer(t,e,i){return t("div",{class:"q-carousel__control q-carousel__navigation no-wrap absolute flex"+` q-carousel__navigation--${e} q-carousel__navigation--${this.navigationPositionComputed}`+(void 0!==this.controlColor?` text-${this.controlColor}`:"")},[t("div",{staticClass:"q-carousel__navigation-inner flex flex-center no-wrap"},this.__getEnabledPanels().map(i))])},__getContent(t){const e=[];if(!0===this.navigation){const i=void 0!==this.$scopedSlots["navigation-icon"]?this.$scopedSlots["navigation-icon"]:e=>t(QBtn,{key:"nav#"+e.name,class:`q-carousel__navigation-icon q-carousel__navigation-icon--${!0===e.active?"":"in"}active`,props:e.btnProps,on:cache(this,"nav#"+e.name,{click:e.onClick})}),s=this.panels.length-1;e.push(this.__getNavigationContainer(t,"buttons",(t,e)=>{const o=t.componentOptions.propsData.name,n=this.panelIndex===e;return i({index:e,maxIndex:s,name:o,active:n,btnProps:{icon:!0===n?this.navActiveIcon:this.navIcon,size:"sm",...this.controlProps},onClick:()=>{this.goTo(o)}})}))}else if(!0===this.thumbnails){const i=void 0!==this.controlColor?` text-${this.controlColor}`:"";e.push(this.__getNavigationContainer(t,"thumbnails",e=>{const s=e.componentOptions.propsData;return t("img",{class:`q-carousel__thumbnail q-carousel__thumbnail--${s.name===this.value?"":"in"}active`+i,attrs:{src:s.imgSrc},key:"tmb#"+s.name,on:cache(this,"tmb#"+s.name,{click:()=>{this.goTo(s.name)}})})}))}return!0===this.arrows&&this.panelIndex>=0&&((!0===this.infinite||this.panelIndex>0)&&e.push(t("div",{staticClass:`q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--${this.direction} absolute flex flex-center`},[t(QBtn,{key:"prev",props:{icon:this.arrowIcons[0],...this.controlProps},on:cache(this,"prev",{click:this.previous})})])),(!0===this.infinite||this.panelIndex["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)},offset:{type:Array,default:()=>[18,18],validator:t=>2===t.length}},computed:{classes(){return`absolute-${this.position}`},style(){return{margin:`${this.offset[1]}px ${this.offset[0]}px`}}},render(t){return t("div",{staticClass:"q-carousel__control absolute",style:this.style,class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QChatMessage=Vue__default.default.extend({name:"QChatMessage",mixins:[ListenersMixin],props:{sent:Boolean,label:String,bgColor:String,textColor:String,name:String,avatar:String,text:Array,stamp:String,size:String,labelSanitize:Boolean,nameSanitize:Boolean,textSanitize:Boolean,stampSanitize:Boolean},computed:{textClass(){return`q-message-text-content q-message-text-content--${this.op}`+(void 0!==this.textColor?` text-${this.textColor}`:"")},messageClass(){return`q-message-text q-message-text--${this.op}`+(void 0!==this.bgColor?` text-${this.bgColor}`:"")},containerClass(){return"q-message-container row items-end no-wrap"+(!0===this.sent?" reverse":"")},sizeClass(){if(void 0!==this.size)return`col-${this.size}`},op(){return!0===this.sent?"sent":"received"}},methods:{__wrapStamp(t,e){if(void 0!==this.$scopedSlots.stamp)return[e,t("div",{staticClass:"q-message-stamp"},this.$scopedSlots.stamp())];if(this.stamp){return[e,t("div",{staticClass:"q-message-stamp",domProps:{[!0===this.stampSanitize?"textContent":"innerHTML"]:this.stamp}})]}return[e]},__getText(t,e,i){const s=!0===this.textSanitize?"textContent":"innerHTML";if(!0===i&&!0===e.some(t=>void 0===t.tag&&void 0!==t.text))return[t("div",{class:this.messageClass},[t("div",{class:this.textClass},this.__wrapStamp(t,t("div",e)))])];const o=!0!==i?e=>t("div",{domProps:{[s]:e}}):e.length>1?t=>t:e=>t("div",[e]);return e.map((e,i)=>t("div",{key:i,class:this.messageClass},[t("div",{class:this.textClass},this.__wrapStamp(t,o(e)))]))}},render(t){const e=[];void 0!==this.$scopedSlots.avatar?e.push(this.$scopedSlots.avatar()):void 0!==this.avatar&&e.push(t("img",{class:`q-message-avatar q-message-avatar--${this.op}`,attrs:{src:this.avatar,"aria-hidden":"true"}}));const i=[];void 0!==this.$scopedSlots.name?i.push(t("div",{class:`q-message-name q-message-name--${this.op}`},this.$scopedSlots.name())):void 0!==this.name&&i.push(t("div",{class:`q-message-name q-message-name--${this.op}`,domProps:{[!0===this.nameSanitize?"textContent":"innerHTML"]:this.name}})),void 0!==this.text&&i.push(this.__getText(t,this.text)),void 0!==this.$scopedSlots.default&&i.push(this.__getText(t,this.$scopedSlots.default(),!0)),e.push(t("div",{class:this.sizeClass},i));const s=[];return void 0!==this.$scopedSlots.label?s.push(t("div",{staticClass:"q-message-label"},this.$scopedSlots.label())):void 0!==this.label&&s.push(t("div",{staticClass:"q-message-label",domProps:{[!0===this.labelSanitize?"textContent":"innerHTML"]:this.label}})),s.push(t("div",{class:this.containerClass},e)),t("div",{class:`q-message q-message-${this.op}`,on:{...this.qListeners}},s)}}),OptionSizeMixin=getSizeMixin({xs:30,sm:35,md:40,lg:50,xl:60}),RefocusTargetMixin={computed:{__refocusTargetEl(){if(!0!==this.disable)return this.$createElement("span",{ref:"refocusTarget",staticClass:"no-outline",attrs:{tabindex:-1}})}},methods:{__refocusTarget(t){if(!0===this.$el.contains(document.activeElement)){const t=!0===this.$q.interaction.isPointer?this.$refs.refocusTarget:this.$el;void 0!==t&&document.activeElement!==t&&t.focus()}}}},CheckboxMixin={mixins:[DarkMixin,OptionSizeMixin,FormMixin,RefocusTargetMixin],props:{value:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:t=>"tf"===t||"ft"===t},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},computed:{isTrue(){return!0===this.modelIsArray?this.index>-1:this.value===this.trueValue},isFalse(){return!0===this.modelIsArray?-1===this.index:this.value===this.falseValue},isIndeterminate(){return!1===this.isTrue&&!1===this.isFalse},index(){if(!0===this.modelIsArray)return this.value.indexOf(this.val)},modelIsArray(){return void 0!==this.val&&Array.isArray(this.value)},computedTabindex(){return!0===this.disable?-1:this.tabindex||0},classes(){return`q-${this.type} cursor-pointer no-outline row inline no-wrap items-center`+(!0===this.disable?" disabled":"")+` q-${this.type}--${this.darkSuffix}`+(!0===this.dense?` q-${this.type}--dense`:"")+(!0===this.leftLabel?" reverse":"")},innerClass(){const t=!0===this.isTrue?"truthy":!0===this.isFalse?"falsy":"indet",e=void 0===this.color||!0!==this.keepColor&&("toggle"===this.type?!0!==this.isTrue:!0===this.isFalse)?"":` text-${this.color}`;return`q-${this.type}__inner--${t}${e}`},formAttrs(){const t={type:"checkbox"};return void 0!==this.name&&Object.assign(t,{checked:this.isTrue,name:this.name,value:!0===this.modelIsArray?this.val:this.trueValue}),t},attrs(){const t={tabindex:this.computedTabindex,role:"toggle"===this.type?"switch":"checkbox","aria-label":this.label,"aria-checked":!0===this.isIndeterminate?"mixed":!0===this.isTrue?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{toggle(t){void 0!==t&&(stopAndPrevent(t),this.__refocusTarget(t)),!0!==this.disable&&this.$emit("input",this.__getNextValue(),t)},__getNextValue(){if(!0===this.modelIsArray){if(!0===this.isTrue){const t=this.value.slice();return t.splice(this.index,1),t}return this.value.concat([this.val])}if(!0===this.isTrue){if("ft"!==this.toggleOrder||!1===this.toggleIndeterminate)return this.falseValue}else{if(!0!==this.isFalse)return"ft"!==this.toggleOrder?this.trueValue:this.falseValue;if("ft"===this.toggleOrder||!1===this.toggleIndeterminate)return this.trueValue}return this.indeterminateValue},__onKeydown(t){13!==t.keyCode&&32!==t.keyCode||stopAndPrevent(t)},__onKeyup(t){13!==t.keyCode&&32!==t.keyCode||this.toggle(t)}},render(t){const e=this.__getInner(t);!0!==this.disable&&this.__injectFormInput(e,"unshift",`q-${this.type}__native absolute q-ma-none q-pa-none`);const i=[t("div",{staticClass:`q-${this.type}__inner relative-position non-selectable`,class:this.innerClass,style:this.sizeStyle,attrs:{"aria-hidden":"true"}},e)];void 0!==this.__refocusTargetEl&&i.push(this.__refocusTargetEl);const s=void 0!==this.label?mergeSlot([this.label],this,"default"):slot(this,"default");return void 0!==s&&i.push(t("div",{staticClass:`q-${this.type}__label q-anchor--skip`},s)),t("div",{key:"inpExt",class:this.classes,attrs:this.attrs,on:cache(this,"inpExt",{click:this.toggle,keydown:this.__onKeydown,keyup:this.__onKeyup})},i)}},QCheckbox=Vue__default.default.extend({name:"QCheckbox",mixins:[CheckboxMixin],computed:{computedIcon(){return!0===this.isTrue?this.checkedIcon:!0===this.isIndeterminate?this.indeterminateIcon:this.uncheckedIcon}},methods:{__getInner(t){return void 0!==this.computedIcon?[t("div",{key:"icon",staticClass:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[t(QIcon,{staticClass:"q-checkbox__icon",props:{name:this.computedIcon}})])]:[t("div",{key:"svg",staticClass:"q-checkbox__bg absolute"},[t("svg",{staticClass:"q-checkbox__svg fit absolute-full",attrs:{focusable:"false",viewBox:"0 0 24 24"}},[t("path",{staticClass:"q-checkbox__truthy",attrs:{fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}}),t("path",{staticClass:"q-checkbox__indet",attrs:{d:"M4,14H20V10H4"}})])])]}},created(){this.type="checkbox"}}),QChip=Vue__default.default.extend({name:"QChip",mixins:[RippleMixin,DarkMixin,getSizeMixin({xs:8,sm:10,md:14,lg:20,xl:24})],model:{event:"remove"},props:{dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,value:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean},computed:{classes(){const t=!0===this.outline&&this.color||this.textColor;return{[`bg-${this.color}`]:!1===this.outline&&void 0!==this.color,[`text-${t} q-chip--colored`]:t,disabled:this.disable,"q-chip--dense":this.dense,"q-chip--outline":this.outline,"q-chip--selected":this.selected,"q-chip--clickable cursor-pointer non-selectable q-hoverable":this.isClickable,"q-chip--square":this.square,[`q-chip--${this.localDarkSuffix}`]:!0}},localDarkSuffix(){return"string"==typeof this.color&&this.color.trim().length>0?!0===this.dark?"dark":"light":this.darkSuffix},hasLeftIcon(){return!0===this.selected||void 0!==this.icon},leftIcon(){return!0===this.selected?this.iconSelected||this.$q.iconSet.chip.selected:this.icon},removeIcon(){return this.iconRemove||this.$q.iconSet.chip.remove},isClickable(){return!1===this.disable&&(!0===this.clickable||null!==this.selected)},attrs(){const t=!0===this.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.tabindex||0};return{chip:t,remove:{...t,role:"button","aria-hidden":"false","aria-label":this.removeAriaLabel||this.$q.lang.label.remove}}}},methods:{__onKeyup(t){13===t.keyCode&&this.__onClick(t)},__onClick(t){this.disable||(this.$emit("update:selected",!this.selected),this.$emit("click",t))},__onRemove(t){void 0!==t.keyCode&&13!==t.keyCode||(stopAndPrevent(t),!this.disable&&this.$emit("remove",!1))},__getContent(t){const e=[];!0===this.isClickable&&e.push(t("div",{staticClass:"q-focus-helper"})),!0===this.hasLeftIcon&&e.push(t(QIcon,{staticClass:"q-chip__icon q-chip__icon--left",props:{name:this.leftIcon}}));const i=void 0!==this.label?[t("div",{staticClass:"ellipsis"},[this.label])]:void 0;return e.push(t("div",{staticClass:"q-chip__content col row no-wrap items-center q-anchor--skip"},mergeSlotSafely(i,this,"default"))),this.iconRight&&e.push(t(QIcon,{staticClass:"q-chip__icon q-chip__icon--right",props:{name:this.iconRight}})),!0===this.removable&&e.push(t(QIcon,{key:"non",staticClass:"q-chip__icon q-chip__icon--remove cursor-pointer",props:{name:this.removeIcon},attrs:this.attrs.remove,on:cache(this,"non",{click:this.__onRemove,keyup:this.__onRemove})})),e}},render(t){if(!1===this.value)return;const e={staticClass:"q-chip row inline no-wrap items-center",class:this.classes,style:this.sizeStyle};return!0===this.isClickable&&Object.assign(e,{key:"click",attrs:this.attrs.chip,on:cache(this,"click",{click:this.__onClick,keyup:this.__onKeyup}),directives:cache(this,"dir#"+this.ripple,[{name:"ripple",value:this.ripple}])}),t("div",e,this.__getContent(t))}});const radius=50,diameter=100,circumference=100*Math.PI,strokeDashArray=Math.round(1e3*circumference)/1e3;var QCircularProgress=Vue__default.default.extend({name:"QCircularProgress",mixins:[ListenersMixin,SizeMixin],props:{value:{type:Number,default:0},min:{type:Number,default:0},max:{type:Number,default:100},color:String,centerColor:String,trackColor:String,fontSize:String,rounded:Boolean,thickness:{type:Number,default:.2,validator:t=>t>=0&&t<=1},angle:{type:Number,default:0},indeterminate:Boolean,showValue:Boolean,reverse:Boolean,instantFeedback:Boolean},computed:{normalizedValue(){return between(this.value,this.min,this.max)},svgStyle(){const t=!0===this.$q.lang.rtl?-this.angle:this.angle;return{transform:this.reverse!==(!0===this.$q.lang.rtl)?`scale3d(-1, 1, 1) rotate3d(0, 0, 1, ${-90-t}deg)`:`rotate3d(0, 0, 1, ${t-90}deg)`}},circleStyle(){if(!0!==this.instantFeedback&&!0!==this.indeterminate)return{transition:"stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease"}},viewBox(){return 100/(1-this.thickness/2)},viewBoxAttr(){return`${this.viewBox/2} ${this.viewBox/2} ${this.viewBox} ${this.viewBox}`},strokeDashOffset(){return(1-(this.normalizedValue-this.min)/(this.max-this.min))*circumference},strokeWidth(){return this.thickness/2*this.viewBox},attrs(){return{role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":!0===this.indeterminate?void 0:this.normalizedValue}}},methods:{__getCircle(t,{thickness:e,offset:i,color:s,cls:o,rounded:n}){return t("circle",{staticClass:"q-circular-progress__"+o,class:void 0!==s?`text-${s}`:null,style:this.circleStyle,attrs:{fill:"transparent",stroke:"currentColor","stroke-width":e,"stroke-dasharray":strokeDashArray,"stroke-dashoffset":i,"stroke-linecap":n,cx:this.viewBox,cy:this.viewBox,r:50}})}},render(t){const e=[];void 0!==this.centerColor&&"transparent"!==this.centerColor&&e.push(t("circle",{staticClass:"q-circular-progress__center",class:`text-${this.centerColor}`,attrs:{fill:"currentColor",r:50-this.strokeWidth/2,cx:this.viewBox,cy:this.viewBox}})),void 0!==this.trackColor&&"transparent"!==this.trackColor&&e.push(this.__getCircle(t,{cls:"track",thickness:this.strokeWidth,offset:0,color:this.trackColor})),e.push(this.__getCircle(t,{cls:"circle",thickness:this.strokeWidth,offset:this.strokeDashOffset,color:this.color,rounded:!0===this.rounded?"round":void 0}));const i=[t("svg",{staticClass:"q-circular-progress__svg",style:this.svgStyle,attrs:{focusable:"false",viewBox:this.viewBoxAttr,"aria-hidden":"true"}},e)];return!0===this.showValue&&i.push(t("div",{staticClass:"q-circular-progress__text absolute-full row flex-center content-center",style:{fontSize:this.fontSize}},void 0!==this.$scopedSlots.default?this.$scopedSlots.default():[t("div",[this.normalizedValue])])),t("div",{staticClass:"q-circular-progress",class:`q-circular-progress--${!0===this.indeterminate?"in":""}determinate`,style:this.sizeStyle,on:{...this.qListeners},attrs:this.attrs},mergeSlotSafely(i,this,"internal"))}});const hex=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,hexa=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,hexOrHexa=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,rgb=/^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])\)$/,rgba=/^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)\)$/,testPattern={date:t=>/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t),time:t=>/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(t),fulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(t),timeOrFulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(t),email:t=>/^(([^<>()[\]\\.,;:\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(t),hexColor:t=>hex.test(t),hexaColor:t=>hexa.test(t),hexOrHexaColor:t=>hexOrHexa.test(t),rgbColor:t=>rgb.test(t),rgbaColor:t=>rgba.test(t),rgbOrRgbaColor:t=>rgb.test(t)||rgba.test(t),hexOrRgbColor:t=>hex.test(t)||rgb.test(t),hexaOrRgbaColor:t=>hexa.test(t)||rgba.test(t),anyColor:t=>hexOrHexa.test(t)||rgb.test(t)||rgba.test(t)};var patterns={testPattern:testPattern};function throttle(t,e=250){let i,s=!1;return function(){return!1===s&&(s=!0,setTimeout(()=>{s=!1},e),i=t.apply(this,arguments)),i}}function getChanges(t,e,i){const s=position(t);let o,n=s.left-e.event.x,r=s.top-e.event.y,a=Math.abs(n),l=Math.abs(r);const h=e.direction;!0===h.horizontal&&!0!==h.vertical?o=n<0?"left":"right":!0!==h.horizontal&&!0===h.vertical?o=r<0?"up":"down":!0===h.up&&r<0?(o="up",a>l&&(!0===h.left&&n<0?o="left":!0===h.right&&n>0&&(o="right"))):!0===h.down&&r>0?(o="down",a>l&&(!0===h.left&&n<0?o="left":!0===h.right&&n>0&&(o="right"))):!0===h.left&&n<0?(o="left",a0&&(o="down"))):!0===h.right&&n>0&&(o="right",a0&&(o="down")));let d=!1;if(void 0===o&&!1===i){if(!0===e.event.isFirst||void 0===e.event.lastDir)return{};d=!0,"left"===(o=e.event.lastDir)||"right"===o?(s.left-=n,a=0,n=0):(s.top-=r,l=0,r=0)}return{synthetic:d,payload:{evt:t,touch:!0!==e.event.mouse,mouse:!0===e.event.mouse,position:s,direction:o,isFirst:e.event.isFirst,isFinal:!0===i,duration:Date.now()-e.event.time,distance:{x:a,y:l},offset:{x:n,y:r},delta:{x:s.left-e.event.lastX,y:s.top-e.event.lastY}}}}function destroy$9(t){const e=t.__qtouchpan;void 0!==e&&(void 0!==e.event&&e.end(),cleanEvt(e,"main_mouse"),cleanEvt(e,"main_touch"),cleanEvt(e,"temp"),!0===client.is.firefox&&preventDraggable(t,!1),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchpan)}function configureEvents$3(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&cleanEvt(e,"main_mouse"),!0===i.mouse&&addEvt(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===client.has.touch&&e.modifiers.capture!==i.capture&&(cleanEvt(e,"main_touch"),addEvt(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","notPassiveCapture"]])),e.modifiers=i}function handleEvent(t,e,i){!0===t.modifiers.mouse&&!0===i?stopAndPrevent(e):(!0===t.modifiers.stop&&stop(e),!0===t.modifiers.prevent&&prevent(e))}let uid$2=0;var TouchPan={name:"touch-pan",bind(t,{modifiers:e,value:i}){void 0!==t.__qtouchpan&&(destroy$9(t),t.__qtouchpan_destroyed=!0);const s={uid:"qvtp_"+uid$2++,handler:i,modifiers:{capture:null},direction:getModifierDirections(e),noop:noop,mouseStart(t){shouldStart(t,s)&&leftClick(t)&&(addEvt(s,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),s.start(t,!0))},touchStart(t){if(shouldStart(t,s)){const e=t.target;addEvt(s,"temp",[[e,"touchmove","move","notPassiveCapture"],[e,"touchcancel","end","passiveCapture"],[e,"touchend","end","passiveCapture"]]),s.start(t)}},start(e,i){if(!0===client.is.firefox&&preventDraggable(t,!0),s.lastEvt=e,!0===i||!0===s.modifiers.stop){if(!0!==s.direction.all&&(!0!==i||!0!==s.modifiers.mouseAllDir&&!0!==s.modifiers.mousealldir)){const t=e.type.indexOf("mouse")>-1?new MouseEvent(e.type,e):new TouchEvent(e.type,e);!0===e.defaultPrevented&&prevent(t),!0===e.cancelBubble&&stop(t),Object.assign(t,{qClickOutside:e.qClickOutside,qAnchorHandled:e.qAnchorHandled,qClonedBy:void 0===e.qClonedBy?[s.uid]:e.qClonedBy.concat(s.uid)}),s.initialEvent={target:e.target,event:t}}stop(e)}const{left:o,top:n}=position(e);s.event={x:o,y:n,time:Date.now(),mouse:!0===i,detected:!1,isFirst:!0,isFinal:!1,lastX:o,lastY:n}},move(t){if(void 0===s.event)return;s.lastEvt=t;const e=!0===s.event.mouse,i=()=>{let i;handleEvent(s,t,e),!0!==s.modifiers.preserveCursor&&!0!==s.modifiers.preservecursor&&(i=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),!0===e&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),clearSelection(),s.styleCleanup=(t=>{if(s.styleCleanup=void 0,void 0!==i&&(document.documentElement.style.cursor=i),document.body.classList.remove("non-selectable"),!0===e){const e=()=>{document.body.classList.remove("no-pointer-events--children")};void 0!==t?setTimeout(()=>{e(),t()},50):e()}else void 0!==t&&t()})};if(!0===s.event.detected){!0!==s.event.isFirst&&handleEvent(s,t,s.event.mouse);const{payload:e,synthetic:o}=getChanges(t,s,!1);return void(void 0!==e&&(!1===s.handler(e)?s.end(t):(void 0===s.styleCleanup&&!0===s.event.isFirst&&i(),s.event.lastX=e.position.left,s.event.lastY=e.position.top,s.event.lastDir=!0===o?void 0:e.direction,s.event.isFirst=!1)))}if(!0===s.direction.all||!0===e&&(!0===s.modifiers.mouseAllDir||!0===s.modifiers.mousealldir))return i(),s.event.detected=!0,void s.move(t);const o=position(t),n=o.left-s.event.x,r=o.top-s.event.y,a=Math.abs(n),l=Math.abs(r);a!==l&&(!0===s.direction.horizontal&&a>l||!0===s.direction.vertical&&a0||!0===s.direction.left&&a>l&&n<0||!0===s.direction.right&&a>l&&n>0?(s.event.detected=!0,s.move(t)):s.end(t,!0))},end(e,i){if(void 0!==s.event){if(cleanEvt(s,"temp"),!0===client.is.firefox&&preventDraggable(t,!1),!0===i)void 0!==s.styleCleanup&&s.styleCleanup(),!0!==s.event.detected&&void 0!==s.initialEvent&&s.initialEvent.target.dispatchEvent(s.initialEvent.event);else if(!0===s.event.detected){!0===s.event.isFirst&&s.handler(getChanges(void 0===e?s.lastEvt:e,s).payload);const{payload:t}=getChanges(void 0===e?s.lastEvt:e,s,!0),i=()=>{s.handler(t)};void 0!==s.styleCleanup?s.styleCleanup(i):i()}s.event=void 0,s.initialEvent=void 0,s.lastEvt=void 0}}};t.__qtouchpan=s,configureEvents$3(t,s,e)},update(t,{modifiers:e,value:i,oldValue:s}){const o=t.__qtouchpan;void 0!==o&&(s!==i&&("function"!=typeof i&&o.end(),o.handler=i),!0!==isDeepEqual(o.modifiers,e)&&(configureEvents$3(t,o,e),o.direction=getModifierDirections(e)))},unbind(t){void 0===t.__qtouchpan_destroyed?destroy$9(t):delete t.__qtouchpan_destroyed}};const markerPrefixClass="q-slider__marker-labels",defaultMarkerConvertFn=t=>({value:t}),keyCodes$3=[34,37,40,33,39,38],SliderMixin={mixins:[DarkMixin,FormMixin],directives:{TouchPan:TouchPan},props:{min:{type:Number,default:0},max:{type:Number,default:100},innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:t=>t>=0},snap:Boolean,vertical:Boolean,reverse:Boolean,hideSelection:Boolean,color:String,markerLabelsClass:String,label:Boolean,labelColor:String,labelTextColor:String,labelAlways:Boolean,switchLabelSide:Boolean,markers:[Boolean,Number],markerLabels:[Boolean,Array,Object,Function],switchMarkerLabelsSide:Boolean,trackImg:String,trackColor:String,innerTrackImg:String,innerTrackColor:String,selectionColor:String,selectionImg:String,thumbSize:{type:String,default:"20px"},trackSize:{type:String,default:"4px"},disable:Boolean,readonly:Boolean,dense:Boolean,tabindex:[String,Number],thumbColor:String,thumbPath:{type:String,default:"M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"}},data:()=>({active:!1,preventFocus:!1,focus:!1,dragging:void 0}),computed:{axis(){return!0===this.vertical?"--v":"--h"},labelSide(){return"-"+(!0===this.switchLabelSide?"switched":"standard")},isReversed(){return!0===this.vertical?!0===this.reverse:this.reverse!==(!0===this.$q.lang.rtl)},computedInnerMin(){return this.__getInnerMin()},computedInnerMax(){return this.__getInnerMax()},editable(){return!0!==this.disable&&!0!==this.readonly&&this.computedInnerMin<=this.computedInnerMax},computedDecimals(){return(String(this.step).trim("0").split(".")[1]||"").length},computedStep(){return 0===this.step?1:this.step},computedTabindex(){return!0===this.editable?this.tabindex||0:-1},trackLen(){return this.max-this.min},innerBarLen(){return this.computedInnerMax-this.computedInnerMin},innerMinRatio(){return this.__convertModelToRatio(this.computedInnerMin)},innerMaxRatio(){return this.__convertModelToRatio(this.computedInnerMax)},positionProp(){return!0===this.vertical?!0===this.isReversed?"bottom":"top":!0===this.isReversed?"right":"left"},sizeProp(){return!0===this.vertical?"height":"width"},thicknessProp(){return!0===this.vertical?"width":"height"},orientation(){return!0===this.vertical?"vertical":"horizontal"},attributes(){const t={role:"slider","aria-valuemin":this.computedInnerMin,"aria-valuemax":this.computedInnerMax,"aria-orientation":this.orientation,"data-step":this.step};return!0===this.disable?t["aria-disabled"]="true":!0===this.readonly&&(t["aria-readonly"]="true"),t},classes(){return`q-slider q-slider${this.axis} q-slider--${!0===this.active?"":"in"}active inline no-wrap `+(!0===this.vertical?"row":"column")+(!0===this.disable?" disabled":" q-slider--enabled"+(!0===this.editable?" q-slider--editable":""))+("both"===this.focus?" q-slider--focus":"")+(this.label||!0===this.labelAlways?" q-slider--label":"")+(!0===this.labelAlways?" q-slider--label-always":"")+` q-slider--${this.darkSuffix}`+(!0===this.dense?" q-slider--dense q-slider--dense"+this.axis:"")+" q-key-group-navigation--ignore-key"},selectionBarClass(){const t=this.selectionColor||this.color;return"q-slider__selection absolute"+(void 0!==t?` text-${t}`:"")},markerClass(){return this.__getAxisClass("markers")+" absolute overflow-hidden"},trackContainerClass(){return this.__getAxisClass("track-container")},pinClass(){return this.__getPositionClass("pin")},labelClass(){return this.__getPositionClass("label")},textContainerClass(){return this.__getPositionClass("text-container")},markerLabelsContainerClass(){return this.__getPositionClass("marker-labels-container")+(void 0!==this.markerLabelsClass?` ${this.markerLabelsClass}`:"")},trackClass(){return"q-slider__track relative-position no-outline"+(void 0!==this.trackColor?` bg-${this.trackColor}`:"")},trackStyle(){const t={[this.thicknessProp]:this.trackSize};return void 0!==this.trackImg&&(t.backgroundImage=`url(${this.trackImg}) !important`),t},innerBarClass(){return"q-slider__inner absolute"+(void 0!==this.innerTrackColor?` bg-${this.innerTrackColor}`:"")},innerBarStyle(){const t={[this.positionProp]:`${100*this.innerMinRatio}%`,[this.sizeProp]:`${100*(this.innerMaxRatio-this.innerMinRatio)}%`};return void 0!==this.innerTrackImg&&(t.backgroundImage=`url(${this.innerTrackImg}) !important`),t},markerStep(){return!0===isNumber(this.markers)?this.markers:this.computedStep},markerTicks(){const t=[],e=this.markerStep;let i=this.min;do{t.push(i),i+=e}while(i({index:e,value:t.value,label:t.label||t.value,classes:this.markerLabelClass+(void 0!==t.classes?" "+t.classes:""),style:{...this.__getMarkerLabelStyle(t.value),...t.style||{}}}))},markerScope(){return{markerList:this.markerLabelsList,markerMap:this.markerLabelsMap,classes:this.markerLabelClass,getStyle:this.__getMarkerLabelStyle}},markerStyle(){if(0!==this.innerBarLen){const t=100*this.markerStep/this.innerBarLen;return{...this.innerBarStyle,backgroundSize:!0===this.vertical?`2px ${t}%`:`${t}% 2px`}}return null},markerLabelsMap(){if(!1===this.markerLabels)return null;const t={};return this.markerLabelsList.forEach(e=>{t[e.value]=e}),t},panDirectives(){return!0===this.editable?[{name:"touch-pan",value:this.__onPan,modifiers:{[this.orientation]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}}]:null},getKeyOffset(){const t=[33,34],e=!0===this.vertical&&!0===this.reverse?-this.computedStep:this.computedStep,i=!0===this.vertical?[33,38,this.$q.lang.rtl===this.reverse?37:39]:[34,40,this.$q.lang.rtl===this.reverse?37:39];return s=>e*(t.includes(s)?10:1)*(i.includes(s)?-1:1)}},methods:{__getInnerMin(){return!0===isNaN(this.innerMin)||this.innerMinthis.max?this.max:this.innerMax},__getPositionClass(t){const e="q-slider__"+t;return`${e} ${e}${this.axis} ${e}${this.axis}${this.labelSide}`},__getAxisClass(t){const e="q-slider__"+t;return`${e} ${e}${this.axis}`},__convertRatioToModel(t){let e=this.min+t*(this.max-this.min);if(this.step>0){const t=(e-this.min)%this.step;e+=(Math.abs(t)>=this.step/2?(t<0?-1:1)*this.step:0)-t}return this.computedDecimals>0&&(e=parseFloat(e.toFixed(this.computedDecimals))),between(e,this.computedInnerMin,this.computedInnerMax)},__convertModelToRatio(t){return 0===this.trackLen?0:between((t-this.min)/this.trackLen,0,1)},__getDraggingRatio(t,e){const i=position(t),s=!0===this.vertical?between((i.top-e.top)/e.height,0,1):between((i.left-e.left)/e.width,0,1);return between(!0===this.isReversed?1-s:s,this.innerMinRatio,this.innerMaxRatio)},__getMarkerList(t){if(!1===t)return null;if(!0===t)return this.markerTicks.map(defaultMarkerConvertFn);if("function"==typeof t)return this.markerTicks.map(e=>{const i=t(e);return!0===isObject(i)?{...i,value:e}:{value:e,label:i}});const e=({value:t})=>t>=this.min&&t<=this.max;return!0===Array.isArray(t)?t.map(t=>!0===isObject(t)?t:{value:t}).filter(e):Object.keys(t).map(e=>{const i=t[e],s=Number(e);return!0===isObject(i)?{...i,value:s}:{value:s,label:i}}).filter(e)},__getMarkerLabelStyle(t){return{[this.positionProp]:`${100*(t-this.min)/this.trackLen}%`}},__getMarkerLabelsContent(t){if(void 0!==this.$scopedSlots["marker-label-group"])return this.$scopedSlots["marker-label-group"](this.markerScope);const e=this.$scopedSlots["marker-label"];return void 0!==e?this.markerLabelsList.map(t=>e({marker:t,...this.markerScope})):this.markerLabelsList.map(e=>t("div",{key:e.value,style:e.style,class:e.classes},e.label))},__onPan(t){!0===t.isFinal?(void 0!==this.dragging&&(this.__updatePosition(t.evt),!0===t.touch&&this.__updateValue(!0),this.dragging=void 0,this.$emit("pan","end")),this.active=!1,this.focus=!1):!0===t.isFirst?(this.dragging=this.__getDragging(t.evt),this.__updatePosition(t.evt),this.__updateValue(),this.active=!0,this.$emit("pan","start")):(this.__updatePosition(t.evt),this.__updateValue())},__onBlur(){this.focus=!1},__onActivate(t){this.__updatePosition(t,this.__getDragging(t)),this.__updateValue(),this.preventFocus=!0,this.active=!0,document.addEventListener("mouseup",this.__onDeactivate,!0)},__onDeactivate(){this.preventFocus=!1,this.active=!1,this.__updateValue(!0),this.__onBlur(),document.removeEventListener("mouseup",this.__onDeactivate,!0)},__onMobileClick(t){this.__updatePosition(t,this.__getDragging(t)),this.__updateValue(!0)},__onKeyup(t){keyCodes$3.includes(t.keyCode)&&this.__updateValue(!0)},__getTextContainerStyle(t){if(!0===this.vertical)return null;const e=this.$q.lang.rtl!==this.reverse?1-t:t;return{transform:`translateX(calc(${2*e-1} * ${this.thumbSize} / 2 + ${50-100*e}%))`}},__getThumb(t,e){const i=[t("svg",{class:"q-slider__thumb-shape absolute-full",attrs:{viewBox:"0 0 20 20","aria-hidden":"true"}},[t("path",{attrs:{d:this.thumbPath}})]),t("div",{class:"q-slider__focus-ring fit"})];return!0!==this.label&&!0!==this.labelAlways||(i.push(t("div",{class:this.pinClass+" absolute fit no-pointer-events"+e.pinColor},[t("div",{class:this.labelClass,style:{minWidth:this.thumbSize}},[t("div",{class:this.textContainerClass,style:e.textContainerStyle},[t("span",{class:e.textClass},e.label)])])])),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(i,"push")),t("div",{class:e.classes,style:e.style,...e.nodeData},i)},__getContent(t,e){const i=[];"transparent"!==this.innerTrackColor&&i.push(t("div",{key:"inner",class:this.innerBarClass,style:this.innerBarStyle})),"transparent"!==this.selectionColor&&i.push(t("div",{key:"selection",class:this.selectionBarClass,style:this.selectionBarStyle})),!1!==this.markers&&i.push(t("div",{key:"marker",class:this.markerClass,style:this.markerStyle})),e(i);const s=[t("div",{key:"trackC",class:this.trackContainerClass,attrs:this.trackContainerAttrs,on:this.trackContainerEvents,directives:this.panDirectives},[t("div",{class:this.trackClass,style:this.trackStyle},i)])];if(!1!==this.markerLabels){s[!0===this.switchMarkerLabelsSide?"unshift":"push"](t("div",{key:"markerL",class:this.markerLabelsContainerClass},this.__getMarkerLabelsContent(t)))}return s}},beforeDestroy(){document.removeEventListener("mouseup",this.__onDeactivate,!0)}};var QSlider=Vue__default.default.extend({name:"QSlider",mixins:[SliderMixin],props:{value:{required:!0,default:null,validator:t=>"number"==typeof t||null===t},labelValue:[String,Number]},data(){return{model:null===this.value?this.__getInnerMin():between(this.value,this.min,this.max),curRatio:0}},computed:{modelRatio(){return this.__convertModelToRatio(this.model)},ratio(){return!0===this.active?this.curRatio:this.modelRatio},selectionBarStyle(){const t=this.innerMinRatio,e={[this.positionProp]:`${100*t}%`,[this.sizeProp]:`${100*(between(this.ratio,t,this.innerMaxRatio)-t)}%`};return void 0!==this.selectionImg&&(e.backgroundImage=`url(${this.selectionImg}) !important`),e},thumbLabel(){return void 0!==this.labelValue?this.labelValue:this.valuethis.max?this.value:this.model},thumbClasses(){const t=this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.valuethis.max?" q-slider__thumb--wrong-value":"")+(!1===this.preventFocus&&!0===this.focus?" q-slider--focus":"")+(void 0!==t?` text-${t}`:"")},thumbStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratio}%`}},thumbPinColor(){return void 0!==this.labelColor?` text-${this.labelColor}`:""},thumbTextContainerStyle(){return this.__getTextContainerStyle(this.ratio)},thumbTextClass(){return"q-slider__text"+(void 0!==this.labelTextColor?` text-${this.labelTextColor}`:"")},trackContainerAttrs(){return!0!==this.$q.platform.is.mobile?{tabindex:this.computedTabindex}:void 0},trackContainerEvents(){return!0!==this.editable?{}:!0===this.$q.platform.is.mobile?{click:this.__onMobileClick}:{mousedown:this.__onActivate,focus:this.__onFocus,blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}},modelUpdate(){return[this.value,this.min,this.max,this.innerMin,this.innerMax].join("#")}},watch:{modelUpdate(){this.model=null===this.value?this.computedInnerMin:between(this.value,this.min,this.max)}},methods:{__updateValue(t){this.model!==this.value&&this.$emit("input",this.model),!0===t&&this.$emit("change",this.model)},__getDragging(){return this.$el.getBoundingClientRect()},__updatePosition(t,e=this.dragging){const i=this.__getDraggingRatio(t,e);this.model=this.__convertRatioToModel(i),this.curRatio=!0!==this.snap||0===this.computedStep?between(i,this.innerMinRatio,this.innerMaxRatio):this.__convertModelToRatio(this.model)},__onFocus(){this.focus=!0},__onKeydown(t){keyCodes$3.includes(t.keyCode)&&(this.focus=!0,stopAndPrevent(t),this.model=between(parseFloat((this.model+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),this.computedInnerMin,this.computedInnerMax),this.__updateValue())}},render(t){const e=this.__getContent(t,e=>{e.push(this.__getThumb(t,{pinColor:this.thumbPinColor,textContainerStyle:this.thumbTextContainerStyle,textClass:this.thumbTextClass,label:this.thumbLabel,classes:this.thumbClasses,style:this.thumbStyle,nodeData:{}}))});return t("div",{class:this.classes+(null===this.value?" q-slider--no-value":""),attrs:{...this.attributes,"aria-valuenow":this.value}},e)}}),CanRenderMixin={data:()=>({canRender:!onSSR}),mounted(){!1===this.canRender&&(this.canRender=!0)}},QResizeObserver=Vue__default.default.extend({name:"QResizeObserver",mixins:[CanRenderMixin],props:{debounce:{type:[String,Number],default:100}},data(){return!0===this.hasObserver?{}:{url:!0===this.$q.platform.is.ie?null:"about:blank"}},methods:{trigger(t){!0===t||0===this.debounce||"0"===this.debounce?this.__emit():null===this.timer&&(this.timer=setTimeout(this.__emit,this.debounce))},__emit(){if(null!==this.timer&&(clearTimeout(this.timer),this.timer=null),!this.$el||!this.$el.parentNode)return;const t=this.$el.parentNode,e={width:t.offsetWidth,height:t.offsetHeight};e.width===this.size.width&&e.height===this.size.height||(this.size=e,this.$emit("resize",this.size))},__cleanup(){void 0!==this.curDocView&&(void 0!==this.curDocView.removeEventListener&&this.curDocView.removeEventListener("resize",this.trigger,listenOpts.passive),this.curDocView=void 0)},__onObjLoad(){this.__cleanup(),this.$el.contentDocument&&(this.curDocView=this.$el.contentDocument.defaultView,this.curDocView.addEventListener("resize",this.trigger,listenOpts.passive)),this.__emit()}},render(t){if(!1!==this.canRender&&!0!==this.hasObserver)return t("object",{key:"load",style:this.style,attrs:{tabindex:-1,type:"text/html",data:this.url,"aria-hidden":"true"},on:cache(this,"load",{load:this.__onObjLoad})})},beforeCreate(){this.size={width:-1,height:-1},!0!==isSSR&&(this.hasObserver="undefined"!=typeof ResizeObserver,!0!==this.hasObserver&&(this.style=`${this.$q.platform.is.ie?"visibility:hidden;":""}display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;`))},mounted(){if(this.timer=null,!0===this.hasObserver)return this.observer=new ResizeObserver(this.trigger),this.observer.observe(this.$el.parentNode),void this.__emit();!0===this.$q.platform.is.ie?(this.url="about:blank",this.__emit()):this.__onObjLoad()},beforeDestroy(){clearTimeout(this.timer),!0!==this.hasObserver?this.__cleanup():void 0!==this.observer&&this.$el.parentNode&&this.observer.unobserve(this.$el.parentNode)}});function injectProp(t,e,i,s){return Object.defineProperty(t,e,{get:i,set:s,enumerable:!0}),t}function getIndicatorClass(t,e,i){const s=!0===i?["left","right"]:["top","bottom"];return`absolute-${!0===e?s[0]:s[1]}${t?` text-${t}`:""}`}const alignValues$1=["left","center","right","justify"],getDefaultBestScore=()=>({matchedLen:0,queryDiff:9999,hrefLen:0,exact:!1,redirected:!0});function hasQueryIncluded(t,e){for(const i in t)if(t[i]!==e[i])return!1;return!0}var QTabs=Vue__default.default.extend({name:"QTabs",mixins:[TimeoutMixin,ListenersMixin],provide(){return{$tabs:this}},props:{value:[Number,String],align:{type:String,default:"center",validator:t=>alignValues$1.includes(t)},breakpoint:{type:[String,Number],default:600},vertical:Boolean,shrink:Boolean,stretch:Boolean,activeClass:String,activeColor:String,activeBgColor:String,indicatorColor:String,leftIcon:String,rightIcon:String,outsideArrows:Boolean,mobileArrows:Boolean,switchIndicator:Boolean,narrowIndicator:Boolean,inlineLabel:Boolean,noCaps:Boolean,dense:Boolean,contentClass:String},data(){return{scrollable:!1,leftArrow:!0,rightArrow:!1,justify:!1,tabNameList:[],currentModel:this.value,hasFocus:!1,avoidRouteWatcher:!1}},watch:{isRTL(){this.__localUpdateArrows()},value(t){this.__updateModel({name:t,setCurrent:!0,skipEmit:!0})},outsideArrows(){this.__recalculateScroll()},arrowsEnabled(t){this.__localUpdateArrows=!0===t?this.__updateArrowsFn:noop,this.__recalculateScroll()}},computed:{tabProps(){return{activeClass:this.activeClass,activeColor:this.activeColor,activeBgColor:this.activeBgColor,indicatorClass:getIndicatorClass(this.indicatorColor,this.switchIndicator,this.vertical),narrowIndicator:this.narrowIndicator,inlineLabel:this.inlineLabel,noCaps:this.noCaps}},hasActiveTab(){return this.tabNameList.some(t=>t.name===this.currentModel)},arrowsEnabled(){return!0===this.$q.platform.is.desktop||!0===this.mobileArrows},alignClass(){return`q-tabs__content--align-${!0===this.scrollable?"left":!0===this.justify?"justify":this.align}`},classes(){return"q-tabs row no-wrap items-center"+` q-tabs--${!0===this.scrollable?"":"not-"}scrollable`+` q-tabs--${!0===this.vertical?"vertical":"horizontal"}`+` q-tabs__arrows--${!0===this.arrowsEnabled&&!0===this.outsideArrows?"outside":"inside"}`+(!0===this.dense?" q-tabs--dense":"")+(!0===this.shrink?" col-shrink":"")+(!0===this.stretch?" self-stretch":"")},innerClass(){return"q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position "+this.alignClass+(void 0!==this.contentClass?` ${this.contentClass}`:"")+(!0===this.$q.platform.is.mobile?" scroll":"")},domProps(){return!0===this.vertical?{container:"height",content:"offsetHeight",scroll:"scrollHeight"}:{container:"width",content:"offsetWidth",scroll:"scrollWidth"}},isRTL(){return!0!==this.vertical&&!0===this.$q.lang.rtl},rtlPosCorrection(){return!1===rtlHasScrollBug()&&!0===this.isRTL},posFn(){return!0===this.rtlPosCorrection?{get:t=>Math.abs(t.scrollLeft),set:(t,e)=>{t.scrollLeft=-e}}:!0===this.vertical?{get:t=>t.scrollTop,set:(t,e)=>{t.scrollTop=e}}:{get:t=>t.scrollLeft,set:(t,e)=>{t.scrollLeft=e}}},onEvents(){return{input:stop,...this.qListeners,focusin:this.__onFocusin,focusout:this.__onFocusout}}},methods:{__updateModel({name:t,setCurrent:e,skipEmit:i}){this.currentModel!==t&&(!0!==i&&void 0!==this.qListeners.input&&this.$emit("input",t),!0!==e&&void 0!==this.qListeners.input||(this.__animate(this.currentModel,t),this.currentModel=t))},__recalculateScroll(){this.__registerScrollTick(()=>{this.__updateContainer({width:this.$el.offsetWidth,height:this.$el.offsetHeight})})},__updateContainer(t){if(void 0===this.domProps||!this.$refs.content)return;const e=t[this.domProps.container],i=Math.min(this.$refs.content[this.domProps.scroll],Array.prototype.reduce.call(this.$refs.content.children,(t,e)=>t+(e[this.domProps.content]||0),0)),s=e>0&&i>e;this.scrollable!==s&&(this.scrollable=s),!0===s&&this.__registerUpdateArrowsTick(this.__localUpdateArrows);const o=ee.name===t):null,s=void 0!==e&&null!==e&&""!==e?this.tabVmList.find(t=>t.name===e):null;if(i&&s){const t=i.$refs.tabIndicator,e=s.$refs.tabIndicator;clearTimeout(this.animateTimer),t.style.transition="none",t.style.transform="none",e.style.transition="none",e.style.transform="none";const o=t.getBoundingClientRect(),n=e.getBoundingClientRect();e.style.transform=!0===this.vertical?`translate3d(0,${o.top-n.top}px,0) scale3d(1,${n.height?o.height/n.height:1},1)`:`translate3d(${o.left-n.left}px,0,0) scale3d(${n.width?o.width/n.width:1},1,1)`,this.__registerAnimateTick(()=>{this.animateTimer=setTimeout(()=>{e.style.transition="transform .25s cubic-bezier(.4, 0, .2, 1)",e.style.transform="none"},70)})}s&&!0===this.scrollable&&this.__scrollToTabEl(s.$el)},__scrollToTabEl(t){const e=this.$refs.content,{left:i,width:s,top:o,height:n}=e.getBoundingClientRect(),r=t.getBoundingClientRect();let a=!0===this.vertical?r.top-o:r.left-i;if(a<0)return e[!0===this.vertical?"scrollTop":"scrollLeft"]+=Math.floor(a),void this.__localUpdateArrows();(a+=!0===this.vertical?r.height-n:r.width-s)>0&&(e[!0===this.vertical?"scrollTop":"scrollLeft"]+=Math.ceil(a),this.__localUpdateArrows())},__updateArrowsFn(){const t=this.$refs.content;if(null!==t){const e=t.getBoundingClientRect(),i=!0===this.vertical?t.scrollTop:Math.abs(t.scrollLeft);!0===this.isRTL?(this.leftArrow=Math.ceil(i+e.width)0):(this.leftArrow=i>0,this.rightArrow=!0===this.vertical?Math.ceil(i+e.height){!0===this.__scrollTowards(t)&&this.__stopAnimScroll()},5)},__scrollToStart(){this.__animScrollTo(!0===this.rtlPosCorrection?Number.MAX_SAFE_INTEGER:0)},__scrollToEnd(){this.__animScrollTo(!0===this.rtlPosCorrection?0:Number.MAX_SAFE_INTEGER)},__stopAnimScroll(){clearInterval(this.scrollTimer)},__onKbdNavigate(t,e){const i=Array.prototype.filter.call(this.$refs.content.children,t=>t===e||t.matches&&!0===t.matches(".q-tab.q-focusable")),s=i.length;if(0===s)return;if(36===t)return!0!==i[0].contains(document.activeElement)&&(this.__scrollToTabEl(i[0]),i[0].focus(),!0);if(35===t)return!0!==i[s-1].contains(document.activeElement)&&(this.__scrollToTabEl(i[s-1]),i[s-1].focus(),!0);const o=t===(!0===this.vertical?38:37),n=t===(!0===this.vertical?40:39),r=!0===o?-1:!0===n?1:void 0;if(void 0!==r){const t=!0===this.isRTL?-1:1,o=i.indexOf(e)+r*t;return!(o<0||o>=s||!0===i[o].contains(document.activeElement))&&(this.__scrollToTabEl(i[o]),i[o].focus({preventScroll:!0}),!0)}},__scrollTowards(t){const e=this.$refs.content,{get:i,set:s}=this.posFn;let o=!1,n=i(e);const r=t=t)&&(o=!0,n=t),s(e,n),this.__localUpdateArrows(),o},__updateActiveRoute(){let t=null,e={matchedLen:0,queryDiff:9999,hrefLen:0,exact:!1,redirected:!0};const i=this.tabVmList.filter(t=>!0===t.hasRouterLink),s=i.length,{query:o}=this.$route,n=Object.keys(o).length;for(let r=0;re.matchedLen?(t=s.name,e=g):g.matchedLen===e.matchedLen&&(g.queryDiffe.hrefLen&&(t=s.name,e=g))}null===t&&!0===this.tabVmList.some(t=>void 0===t.hasRouterLink&&t.name===this.currentModel)||this.__updateModel({name:t,setCurrent:!0})},__onFocusin(t){if(this.__removeFocusTimeout(),!0!==this.hasFocus&&this.$el&&t.target&&"function"==typeof t.target.closest){const e=t.target.closest(".q-tab");e&&!0===this.$el.contains(e)&&(this.hasFocus=!0,!0===this.scrollable&&this.__scrollToTabEl(e))}void 0!==this.qListeners.focusin&&this.$emit("focusin",t)},__onFocusout(t){this.__registerFocusTimeout(()=>{this.hasFocus=!1},30),void 0!==this.qListeners.focusout&&this.$emit("focusout",t)},__verifyRouteModel(){!1===this.avoidRouteWatcher?this.__registerScrollToTabTimeout(this.__updateActiveRoute):this.__removeScrollToTabTimeout()},__watchRoute(){if(void 0===this.unwatchRoute){const t=this.$watch(()=>this.$route.fullPath,this.__verifyRouteModel);this.unwatchRoute=(()=>{t(),this.unwatchRoute=void 0})}},__registerTab(t){this.tabVmList.push(t),this.tabNameList.push(injectProp({},"name",()=>t.name)),this.__recalculateScroll(),void 0===t.hasRouterLink||void 0===this.$route?this.__registerScrollToTabTimeout(()=>{if(!0===this.scrollable){const t=this.currentModel,e=void 0!==t&&null!==t&&""!==t?this.tabVmList.find(e=>e.name===t):null;e&&this.__scrollToTabEl(e.$el)}}):(this.__watchRoute(),!0===t.hasRouterLink&&this.__verifyRouteModel())},__unregisterTab(t){const e=this.tabVmList.indexOf(t);this.tabVmList.splice(e,1),this.tabNameList.splice(e,1),this.__recalculateScroll(),void 0!==this.unwatchRoute&&void 0!==t.hasRouterLink&&(!0===this.tabVmList.every(t=>void 0===t.hasRouterLink)&&this.unwatchRoute(),this.__verifyRouteModel())},__cleanup(){clearTimeout(this.animateTimer),this.__stopAnimScroll(),void 0!==this.unwatchRoute&&this.unwatchRoute()}},created(){this.__useTick("__registerScrollTick"),this.__useTick("__registerUpdateArrowsTick"),this.__useTick("__registerAnimateTick"),this.__useTimeout("__registerFocusTimeout","__removeFocusTimeout"),this.__useTimeout("__registerScrollToTabTimeout","__removeScrollToTabTimeout"),Object.assign(this,{tabVmList:[],__localUpdateArrows:!0===this.arrowsEnabled?this.__updateArrowsFn:noop})},activated(){!0===this.hadRouteWatcher&&this.__watchRoute(),this.__recalculateScroll()},deactivated(){this.hadRouteWatcher=void 0!==this.unwatchRoute,this.__cleanup()},beforeDestroy(){this.__cleanup()},render(t){const e=[t(QResizeObserver,{key:"resize",on:cache(this,"resize",{resize:this.__updateContainer})}),t("div",{key:"scroll",ref:"content",class:this.innerClass,on:!0===this.arrowsEnabled?cache(this,"scroll",{scroll:this.__updateArrowsFn}):void 0},slot(this,"default"))];return!0===this.arrowsEnabled&&e.push(t(QIcon,{key:"onS",class:"q-tabs__arrow q-tabs__arrow--start absolute q-tab__icon"+(!0===this.leftArrow?"":" q-tabs__arrow--faded"),props:{name:this.leftIcon||this.$q.iconSet.tabs[!0===this.vertical?"up":"left"]},on:cache(this,"onS",{"&mousedown":this.__scrollToStart,"&touchstart":this.__scrollToStart,"&mouseup":this.__stopAnimScroll,"&mouseleave":this.__stopAnimScroll,"&touchend":this.__stopAnimScroll})}),t(QIcon,{key:"onE",class:"q-tabs__arrow q-tabs__arrow--end absolute q-tab__icon"+(!0===this.rightArrow?"":" q-tabs__arrow--faded"),props:{name:this.rightIcon||this.$q.iconSet.tabs[!0===this.vertical?"down":"right"]},on:cache(this,"onE",{"&mousedown":this.__scrollToEnd,"&touchstart":this.__scrollToEnd,"&mouseup":this.__stopAnimScroll,"&mouseleave":this.__stopAnimScroll,"&touchend":this.__stopAnimScroll})})),t("div",{class:this.classes,on:this.onEvents,attrs:{role:"tablist"}},e)}});let id$1=0;var QTab=Vue__default.default.extend({name:"QTab",mixins:[RippleMixin,ListenersMixin],inject:{$tabs:{default(){console.error("QTab/QRouteTab components need to be child of QTabs")}}},props:{icon:String,label:[Number,String],alert:[Boolean,String],alertIcon:String,name:{type:[Number,String],default:()=>`t_${id$1++}`},noCaps:Boolean,tabindex:[String,Number],disable:Boolean,contentClass:String},computed:{isActive(){return this.$tabs.currentModel===this.name},classes(){return"q-tab relative-position self-stretch flex flex-center text-center"+(!0===this.isActive?" q-tab--active"+(this.$tabs.tabProps.activeClass?" "+this.$tabs.tabProps.activeClass:"")+(this.$tabs.tabProps.activeColor?` text-${this.$tabs.tabProps.activeColor}`:"")+(this.$tabs.tabProps.activeBgColor?` bg-${this.$tabs.tabProps.activeBgColor}`:""):" q-tab--inactive")+(this.icon&&this.label&&!1===this.$tabs.tabProps.inlineLabel?" q-tab--full":"")+(!0===this.noCaps||!0===this.$tabs.tabProps.noCaps?" q-tab--no-caps":"")+(!0===this.disable?" disabled":" q-focusable q-hoverable cursor-pointer")+(void 0!==this.hasRouterLinkProps?this.linkClass:"")},innerClass(){return"q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable q-key-group-navigation--ignore-key "+(!0===this.$tabs.tabProps.inlineLabel?"row no-wrap q-tab__content--inline":"column")+(void 0!==this.contentClass?` ${this.contentClass}`:"")},computedTabIndex(){return!0===this.disable||!0===this.$tabs.hasFocus||!1===this.isActive&&!0===this.$tabs.hasActiveTab?-1:this.tabindex||0},computedRipple(){return!1!==this.ripple&&Object.assign({keyCodes:[13,32],early:!0},!0===this.ripple?{}:this.ripple)},onEvents(){return{input:stop,...this.qListeners,click:this.__onClick,keydown:this.__onKeydown}},attrs(){const t={...this.linkAttrs,tabindex:this.computedTabIndex,role:"tab","aria-selected":!0===this.isActive?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{__onClick(t,e){if(!0!==e&&void 0!==this.$refs.blurTarget&&this.$refs.blurTarget.focus({preventScroll:!0}),!0!==this.disable){if(void 0===this.hasRouterLinkProps)return this.$tabs.__updateModel({name:this.name}),void(void 0!==this.qListeners.click&&this.$emit("click",t));if(!0===this.hasRouterLink){const e=(e,i,s)=>{const{to:o,replace:n,append:r,returnRouterError:a}=!1===t.navigate?{to:e,replace:i,append:s}:e||{};let l;const h=void 0===o||r===this.append&&!0===isDeepEqual(o,this.to)?this.$tabs.avoidRouteWatcher=uid$3():null;return this.__navigateToRouterLink(t,{to:o,replace:n,append:r,returnRouterError:!0}).catch(t=>{l=t}).then(t=>(h===this.$tabs.avoidRouteWatcher&&(this.$tabs.avoidRouteWatcher=!1,void 0!==l&&!0!==l.message.startsWith("Avoided redundant navigation")||this.$tabs.__updateModel({name:this.name})),void 0!==l&&!0===a?Promise.reject(l):t))};return void 0!==this.qListeners.click&&this.$emit("click",t,e),!1===t.navigate&&t.preventDefault(),void(!0!==t.defaultPrevented&&e())}void 0!==this.qListeners.click&&this.$emit("click",t)}else!0===this.hasRouterLink&&stopAndPrevent(t)},__onKeydown(t){isKeyCode(t,[13,32])?this.__onClick(t,!0):!0!==shouldIgnoreKey(t)&&t.keyCode>=35&&t.keyCode<=40&&!0!==t.altKey&&!0!==t.metaKey&&!0===this.$tabs.__onKbdNavigate(t.keyCode,this.$el)&&stopAndPrevent(t),void 0!==this.qListeners.keydown&&this.$emit("keydown",t)},__getContent(t){const e=this.$tabs.tabProps.narrowIndicator,i=[],s=t("div",{ref:"tabIndicator",staticClass:"q-tab__indicator",class:this.$tabs.tabProps.indicatorClass});void 0!==this.icon&&i.push(t(QIcon,{staticClass:"q-tab__icon",props:{name:this.icon}})),void 0!==this.label&&i.push(t("div",{staticClass:"q-tab__label"},[this.label])),!1!==this.alert&&i.push(void 0!==this.alertIcon?t(QIcon,{staticClass:"q-tab__alert-icon",props:{color:!0!==this.alert?this.alert:void 0,name:this.alertIcon}}):t("div",{staticClass:"q-tab__alert",class:!0!==this.alert?`text-${this.alert}`:null})),!0===e&&i.push(s);const o=[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"}),t("div",{class:this.innerClass},mergeSlot(i,this,"default"))];return!1===e&&o.push(s),o},__renderTab(t,e){return t(e,{class:this.classes,attrs:this.attrs,on:this.onEvents,directives:!1===this.ripple||!0===this.disable?null:[{name:"ripple",value:this.computedRipple}]},this.__getContent(t))}},mounted(){this.$tabs.__registerTab(this)},beforeDestroy(){this.$tabs.__unregisterTab(this)},render(t){return this.__renderTab(t,"div")}}),QTabPanels=Vue__default.default.extend({name:"QTabPanels",mixins:[DarkMixin,PanelParentMixin],computed:{classes(){return"q-tab-panels q-panel-parent"+` q-tab-panels--${this.darkSuffix} q-${this.darkSuffix}`}},methods:{__renderPanels(t){return t("div",{class:this.classes,directives:this.panelDirectives,on:{...this.qListeners}},this.__getPanelContent(t))}}});const attrs$4={role:"tabpanel"};var QTabPanel=Vue__default.default.extend({name:"QTabPanel",mixins:[PanelChildMixin],render(t){return t("div",{staticClass:"q-tab-panel",attrs:attrs$4,on:{...this.qListeners}},slot(this,"default"))}});const palette=["rgb(255,204,204)","rgb(255,230,204)","rgb(255,255,204)","rgb(204,255,204)","rgb(204,255,230)","rgb(204,255,255)","rgb(204,230,255)","rgb(204,204,255)","rgb(230,204,255)","rgb(255,204,255)","rgb(255,153,153)","rgb(255,204,153)","rgb(255,255,153)","rgb(153,255,153)","rgb(153,255,204)","rgb(153,255,255)","rgb(153,204,255)","rgb(153,153,255)","rgb(204,153,255)","rgb(255,153,255)","rgb(255,102,102)","rgb(255,179,102)","rgb(255,255,102)","rgb(102,255,102)","rgb(102,255,179)","rgb(102,255,255)","rgb(102,179,255)","rgb(102,102,255)","rgb(179,102,255)","rgb(255,102,255)","rgb(255,51,51)","rgb(255,153,51)","rgb(255,255,51)","rgb(51,255,51)","rgb(51,255,153)","rgb(51,255,255)","rgb(51,153,255)","rgb(51,51,255)","rgb(153,51,255)","rgb(255,51,255)","rgb(255,0,0)","rgb(255,128,0)","rgb(255,255,0)","rgb(0,255,0)","rgb(0,255,128)","rgb(0,255,255)","rgb(0,128,255)","rgb(0,0,255)","rgb(128,0,255)","rgb(255,0,255)","rgb(245,0,0)","rgb(245,123,0)","rgb(245,245,0)","rgb(0,245,0)","rgb(0,245,123)","rgb(0,245,245)","rgb(0,123,245)","rgb(0,0,245)","rgb(123,0,245)","rgb(245,0,245)","rgb(214,0,0)","rgb(214,108,0)","rgb(214,214,0)","rgb(0,214,0)","rgb(0,214,108)","rgb(0,214,214)","rgb(0,108,214)","rgb(0,0,214)","rgb(108,0,214)","rgb(214,0,214)","rgb(163,0,0)","rgb(163,82,0)","rgb(163,163,0)","rgb(0,163,0)","rgb(0,163,82)","rgb(0,163,163)","rgb(0,82,163)","rgb(0,0,163)","rgb(82,0,163)","rgb(163,0,163)","rgb(92,0,0)","rgb(92,46,0)","rgb(92,92,0)","rgb(0,92,0)","rgb(0,92,46)","rgb(0,92,92)","rgb(0,46,92)","rgb(0,0,92)","rgb(46,0,92)","rgb(92,0,92)","rgb(255,255,255)","rgb(205,205,205)","rgb(178,178,178)","rgb(153,153,153)","rgb(127,127,127)","rgb(102,102,102)","rgb(76,76,76)","rgb(51,51,51)","rgb(25,25,25)","rgb(0,0,0)"],thumbPath="M5 5 h10 v10 h-10 v-10 z",alphaTrackImg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==";var QColor=Vue__default.default.extend({name:"QColor",mixins:[ListenersMixin,DarkMixin,FormMixin],directives:{TouchPan:TouchPan},props:{value:String,defaultValue:String,defaultView:{type:String,default:"spectrum",validator:t=>["spectrum","tune","palette"].includes(t)},formatModel:{type:String,default:"auto",validator:t=>["auto","hex","rgb","hexa","rgba"].includes(t)},palette:Array,noHeader:Boolean,noHeaderTabs:Boolean,noFooter:Boolean,square:Boolean,flat:Boolean,bordered:Boolean,disable:Boolean,readonly:Boolean},data(){return{topView:"auto"===this.formatModel?void 0===this.value||null===this.value||""===this.value||this.value.startsWith("#")?"hex":"rgb":this.formatModel.startsWith("hex")?"hex":"rgb",view:this.defaultView,model:this.__parseModel(this.value||this.defaultValue)}},watch:{value(t){const e=this.__parseModel(t||this.defaultValue);e.hex!==this.model.hex&&(this.model=e)},defaultValue(t){if(!this.value&&t){const e=this.__parseModel(t);e.hex!==this.model.hex&&(this.model=e)}}},computed:{editable(){return!0!==this.disable&&!0!==this.readonly},forceHex(){return"auto"===this.formatModel?null:this.formatModel.indexOf("hex")>-1},forceAlpha(){return"auto"===this.formatModel?null:this.formatModel.indexOf("a")>-1},isHex(){return void 0===this.value||null===this.value||""===this.value||this.value.startsWith("#")},isOutputHex(){return null!==this.forceHex?this.forceHex:this.isHex},formAttrs(){return{type:"hidden",name:this.name,value:this.model[!0===this.isOutputHex?"hex":"rgb"]}},hasAlpha(){return null!==this.forceAlpha?this.forceAlpha:void 0!==this.model.a},currentBgColor(){return{backgroundColor:this.model.rgb||"#000"}},headerClass(){return`q-color-picker__header-content--${void 0!==this.model.a&&this.model.a<65||luminosity(this.model)>.4?"light":"dark"}`},spectrumStyle(){return{background:`hsl(${this.model.h},100%,50%)`}},spectrumPointerStyle(){return{top:`${100-this.model.v}%`,[!0===this.$q.lang.rtl?"right":"left"]:`${this.model.s}%`}},computedPalette(){return void 0!==this.palette&&this.palette.length>0?this.palette:palette},classes(){return"q-color-picker"+(!0===this.bordered?" q-color-picker--bordered":"")+(!0===this.square?" q-color-picker--square no-border-radius":"")+(!0===this.flat?" q-color-picker--flat no-shadow":"")+(!0===this.disable?" disabled":"")+` q-color-picker--${this.darkSuffix} q-${this.darkSuffix}`},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0}},created(){this.__spectrumChange=throttle(this.__spectrumChange,20)},render(t){const e=[this.__getContent(t)];return void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),!0!==this.noHeader&&e.unshift(this.__getHeader(t)),!0!==this.noFooter&&e.push(this.__getFooter(t)),t("div",{class:this.classes,attrs:this.attrs,on:{...this.qListeners}},e)},methods:{__getHeader(t){const e=[];return!0!==this.noHeaderTabs&&e.push(t(QTabs,{key:"topVTab",class:"q-color-picker__header-tabs",props:{value:this.topView,dense:!0,align:"justify"},on:cache(this,"topVTab",{input:t=>{this.topView=t}})},[t(QTab,{props:{label:"HEX"+(!0===this.hasAlpha?"A":""),name:"hex",ripple:!1}}),t(QTab,{props:{label:"RGB"+(!0===this.hasAlpha?"A":""),name:"rgb",ripple:!1}})])),e.push(t("div",{staticClass:"q-color-picker__header-banner row flex-center no-wrap"},[t("input",{key:"topIn",staticClass:"fit",domProps:{value:this.model[this.topView]},attrs:!0!==this.editable?{readonly:!0}:null,on:cache(this,"topIn",{input:t=>{this.__updateErrorIcon(!0===this.__onEditorChange(t))},change:stop,blur:t=>{!0===this.__onEditorChange(t,!0)&&this.$forceUpdate(),this.__updateErrorIcon(!1)}})}),t(QIcon,{ref:"errorIcon",staticClass:"q-color-picker__error-icon absolute no-pointer-events",props:{name:this.$q.iconSet.type.negative}})])),t("div",{staticClass:"q-color-picker__header relative-position overflow-hidden"},[t("div",{staticClass:"q-color-picker__header-bg absolute-full"}),t("div",{staticClass:"q-color-picker__header-content",class:this.headerClass,style:this.currentBgColor},e)])},__getContent(t){return t(QTabPanels,{props:{value:this.view,animated:!0}},[t(QTabPanel,{staticClass:"q-color-picker__spectrum-tab overflow-hidden",props:{name:"spectrum"}},this.__getSpectrumTab(t)),t(QTabPanel,{staticClass:"q-pa-md q-color-picker__tune-tab",props:{name:"tune"}},this.__getTuneTab(t)),t(QTabPanel,{staticClass:"q-color-picker__palette-tab",props:{name:"palette"}},this.__getPaletteTab(t))])},__getFooter(t){return t("div",{staticClass:"q-color-picker__footer relative-position overflow-hidden"},[t(QTabs,{key:"ftIn",staticClass:"absolute-full",props:{value:this.view,dense:!0,align:"justify"},on:cache(this,"ftIn",{input:t=>{this.view=t}})},[t(QTab,{props:{icon:this.$q.iconSet.colorPicker.spectrum,name:"spectrum",ripple:!1}}),t(QTab,{props:{icon:this.$q.iconSet.colorPicker.tune,name:"tune",ripple:!1}}),t(QTab,{props:{icon:this.$q.iconSet.colorPicker.palette,name:"palette",ripple:!1}})])])},__getSpectrumTab(t){return[t("div",{key:"spectrT",ref:"spectrum",staticClass:"q-color-picker__spectrum non-selectable relative-position cursor-pointer",style:this.spectrumStyle,class:{readonly:!0!==this.editable},on:!0===this.editable?cache(this,"spectrT",{click:this.__spectrumClick,mousedown:this.__activate}):null,directives:!0===this.editable?cache(this,"spectrDir",[{name:"touch-pan",modifiers:{prevent:!0,stop:!0,mouse:!0},value:this.__spectrumPan}]):null},[t("div",{style:{paddingBottom:"100%"}}),t("div",{staticClass:"q-color-picker__spectrum-white absolute-full"}),t("div",{staticClass:"q-color-picker__spectrum-black absolute-full"}),t("div",{staticClass:"absolute",style:this.spectrumPointerStyle},[void 0!==this.model.hex?t("div",{staticClass:"q-color-picker__spectrum-circle"}):null])]),t("div",{staticClass:"q-color-picker__sliders"},[t(QSlider,{key:"hueSlide",staticClass:"q-color-picker__hue non-selectable",props:{value:this.model.h,min:0,max:360,trackSize:"8px",innerTrackColor:"transparent",selectionColor:"transparent",readonly:!0!==this.editable,thumbPath:thumbPath},on:cache(this,"hueSlide",{input:this.__onHueChange,change:t=>this.__onHueChange(t,!0)})}),!0===this.hasAlpha?t(QSlider,{key:"alphaSlide",staticClass:"q-color-picker__alpha non-selectable",props:{value:this.model.a,min:0,max:100,trackSize:"8px",trackColor:"white",innerTrackColor:"transparent",selectionColor:"transparent",trackImg:alphaTrackImg,readonly:!0!==this.editable,hideSelection:!0,thumbPath:thumbPath},on:cache(this,"alphaSlide",{input:t=>this.__onNumericChange(t,"a",100),change:t=>this.__onNumericChange(t,"a",100,void 0,!0)})}):null])]},__getTuneTab(t){const e={inputmode:"numeric",maxlength:3,readonly:!0!==this.editable};return[t("div",{staticClass:"row items-center no-wrap"},[t("div",["R"]),t(QSlider,{key:"rSlide",props:{value:this.model.r,min:0,max:255,color:"red",dark:this.dark,readonly:!0!==this.editable},on:cache(this,"rSlide",{input:t=>this.__onNumericChange(t,"r",255),change:t=>this.__onNumericChange(t,"r",255,void 0,!0)})}),t("input",{key:"rIn",domProps:{value:this.model.r},attrs:e,on:cache(this,"rIn",{input:t=>this.__onNumericChange(t.target.value,"r",255,t),change:stop,blur:t=>this.__onNumericChange(t.target.value,"r",255,t,!0)})})]),t("div",{staticClass:"row items-center no-wrap"},[t("div",["G"]),t(QSlider,{key:"gSlide",props:{value:this.model.g,min:0,max:255,color:"green",dark:this.dark,readonly:!0!==this.editable},on:cache(this,"gSlide",{input:t=>this.__onNumericChange(t,"g",255),change:t=>this.__onNumericChange(t,"g",255,void 0,!0)})}),t("input",{key:"gIn",domProps:{value:this.model.g},attrs:e,on:cache(this,"gIn",{input:t=>this.__onNumericChange(t.target.value,"g",255,t),change:stop,blur:t=>this.__onNumericChange(t.target.value,"g",255,t,!0)})})]),t("div",{staticClass:"row items-center no-wrap"},[t("div",["B"]),t(QSlider,{key:"bSlide",props:{value:this.model.b,min:0,max:255,color:"blue",readonly:!0!==this.editable,dark:this.dark},on:cache(this,"bSlide",{input:t=>this.__onNumericChange(t,"b",255),change:t=>this.__onNumericChange(t,"b",255,void 0,!0)})}),t("input",{key:"bIn",domProps:{value:this.model.b},attrs:e,on:cache(this,"bIn",{input:t=>this.__onNumericChange(t.target.value,"b",255,t),change:stop,blur:t=>this.__onNumericChange(t.target.value,"b",255,t,!0)})})]),!0===this.hasAlpha?t("div",{staticClass:"row items-center no-wrap"},[t("div",["A"]),t(QSlider,{key:"aSlide",props:{value:this.model.a,color:"grey",readonly:!0!==this.editable,dark:this.dark},on:cache(this,"aSlide",{input:t=>this.__onNumericChange(t,"a",100),change:t=>this.__onNumericChange(t,"a",100,void 0,!0)})}),t("input",{key:"aIn",domProps:{value:this.model.a},attrs:e,on:cache(this,"aIn",{input:t=>this.__onNumericChange(t.target.value,"a",100,t),change:stop,blur:t=>this.__onNumericChange(t.target.value,"a",100,t,!0)})})]):null]},__getPaletteTab(t){return[t("div",{staticClass:"row items-center q-color-picker__palette-rows",class:!0===this.editable?"q-color-picker__palette-rows--editable":""},this.computedPalette.map(e=>t("div",{key:"palette#"+e,staticClass:"q-color-picker__cube col-auto",style:{backgroundColor:e},on:!0===this.editable?cache(this,"palette#"+e,{click:()=>{this.__onPalettePick(e)}}):null})))]},__onSpectrumChange(t,e,i){const s=this.$refs.spectrum;if(void 0===s)return;const o=s.clientWidth,n=s.clientHeight,r=s.getBoundingClientRect();let a=Math.min(o,Math.max(0,t-r.left));!0===this.$q.lang.rtl&&(a=o-a);const l=Math.min(n,Math.max(0,e-r.top)),h=Math.round(100*a/o),d=Math.round(100*Math.max(0,Math.min(1,-l/n+1))),c=hsvToRgb({h:this.model.h,s:h,v:d,a:!0===this.hasAlpha?this.model.a:void 0});this.model.s=h,this.model.v=d,this.__update(c,i)},__onHueChange(t,e){const i=hsvToRgb({h:t=Math.round(t),s:this.model.s,v:this.model.v,a:!0===this.hasAlpha?this.model.a:void 0});this.model.h=t,this.__update(i,e)},__onNumericChange(t,e,i,s,o){if(void 0!==s&&stop(s),!/^[0-9]+$/.test(t))return void(!0===o&&this.$forceUpdate());const n=Math.floor(Number(t));if(n<0||n>i)return void(!0===o&&this.$forceUpdate());const r={r:"r"===e?n:this.model.r,g:"g"===e?n:this.model.g,b:"b"===e?n:this.model.b,a:!0===this.hasAlpha?"a"===e?n:this.model.a:void 0};if("a"!==e){const t=rgbToHsv(r);this.model.h=t.h,this.model.s=t.s,this.model.v=t.v}if(this.__update(r,o),void 0!==s&&!0!==o&&void 0!==s.target.selectionEnd){const t=s.target.selectionEnd;this.$nextTick(()=>{s.target.setSelectionRange(t,t)})}},__onEditorChange(t,e){let i;const s=t.target.value;if(stop(t),"hex"===this.topView){if(s.length!==(!0===this.hasAlpha?9:7)||!/^#[0-9A-Fa-f]+$/.test(s))return!0;i=hexToRgb(s)}else{let t;if(!s.endsWith(")"))return!0;if(!0!==this.hasAlpha&&s.startsWith("rgb(")){if(3!==(t=s.substring(4,s.length-1).split(",").map(t=>parseInt(t,10))).length||!/^rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)$/.test(s))return!0}else{if(!0!==this.hasAlpha||!s.startsWith("rgba("))return!0;{if(4!==(t=s.substring(5,s.length-1).split(",")).length||!/^rgba\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/.test(s))return!0;for(let e=0;e<3;e++){const i=parseInt(t[e],10);if(i<0||i>255)return!0;t[e]=i}const e=parseFloat(t[3]);if(e<0||e>1)return!0;t[3]=e}}if(t[0]<0||t[0]>255||t[1]<0||t[1]>255||t[2]<0||t[2]>255||!0===this.hasAlpha&&(t[3]<0||t[3]>1))return!0;i={r:t[0],g:t[1],b:t[2],a:!0===this.hasAlpha?100*t[3]:void 0}}const o=rgbToHsv(i);if(this.model.h=o.h,this.model.s=o.s,this.model.v=o.v,this.__update(i,e),!0!==e){const e=t.target.selectionEnd;this.$nextTick(()=>{t.target.setSelectionRange(e,e)})}},__onPalettePick(t){const e=this.__parseModel(t),i={r:e.r,g:e.g,b:e.b,a:e.a};void 0===i.a&&(i.a=this.model.a),this.model.h=e.h,this.model.s=e.s,this.model.v=e.v,this.__update(i,!0)},__update(t,e){this.model.hex=rgbToHex(t),this.model.rgb=rgbToString(t),this.model.r=t.r,this.model.g=t.g,this.model.b=t.b,this.model.a=t.a;const i=this.model[!0===this.isOutputHex?"hex":"rgb"];this.$emit("input",i),!0===e&&this.$emit("change",i)},__updateErrorIcon(t){void 0!==this.$refs.errorIcon&&(this.$refs.errorIcon.$el.style.opacity=t?1:0)},__parseModel(t){const e=void 0!==this.forceAlpha?this.forceAlpha:"auto"===this.formatModel?null:this.formatModel.indexOf("a")>-1;if("string"!=typeof t||0===t.length||!0!==testPattern.anyColor(t.replace(/ /g,"")))return{h:0,s:0,v:0,r:0,g:0,b:0,a:!0===e?100:void 0,hex:void 0,rgb:void 0};const i=textToRgb(t);return!0===e&&void 0===i.a&&(i.a=100),i.hex=rgbToHex(i),i.rgb=rgbToString(i),Object.assign(i,rgbToHsv(i))},__spectrumPan(t){t.isFinal?this.__onSpectrumChange(t.position.left,t.position.top,!0):this.__spectrumChange(t)},__spectrumChange(t){this.__onSpectrumChange(t.position.left,t.position.top)},__spectrumClick(t){this.__onSpectrumChange(t.pageX-window.pageXOffset,t.pageY-window.pageYOffset,!0)},__activate(t){this.__onSpectrumChange(t.pageX-window.pageXOffset,t.pageY-window.pageYOffset)}}});const keyCodes$2={horizontal:{first:[36],prev:[37],next:[39],last:[35]},vertical:{first:[33],prev:[38],next:[40],last:[34]}};function matchNavigationKeyIgnoreEl(t){return!0===t.classList.contains("q-key-group-navigation--ignore-key")}function createFocusTargets(t){const e=document.createElement("span");e.setAttribute("tabindex",-1),e.classList.add("no-outline"),e.classList.add("absolute"),e.classList.add("no-pointer-events"),t.firstTarget=e,t.lastTarget=e.cloneNode()}function addFocusTargets(t,e){e.appendChild(t.lastTarget),e.childElementCount>0?e.insertBefore(t.firstTarget,e.childNodes[0]):e.appendChild(t.firstTarget)}function removeFocusTargets(t){void 0!==t.firstTarget&&t.firstTarget.remove(),void 0!==t.lastTarget&&t.lastTarget.remove()}function parseArg$2(t){const e=[1,1,"q-key-group-navigation--active"];if("string"==typeof t&&t.length>0){const i=t.split(":");for(let t=0;t<2;t++){const s=parseInt(i[t],10);s&&(e[t]=s)}}return{offsetY:e[0],offsetX:e[1],activeClass:e[2]}}function configureEvents$2(t,e,i,s){!0===i.vertical?e.keyCodes=keyCodes$2.vertical:e.keyCodes=!0===i.horizontal?keyCodes$2.horizontal:keyCodes$2.all;const o=-1===[!1,0,"0"].indexOf(s);e.enabled!==o&&(!0===e.enabled&&cleanEvt(e,"main"),!0===o&&addEvt(e,"main",[[t,"keydown","keyDown","capture"],[t,"focusin","focusIn","passiveCapture"],[t,"focusout","focusOut","passiveCapture"],[t,"mousedown","setRestoreEl","passiveCapture"],[t,"touchstart","setRestoreEl","passiveCapture"]]),e.enabled=o)}keyCodes$2.all=Object.keys(keyCodes$2.horizontal).reduce((t,e)=>({...t,[e]:keyCodes$2.horizontal[e].concat(keyCodes$2.vertical[e])}),{}),keyCodes$2.horizontal.list=Object.keys(keyCodes$2.horizontal).reduce((t,e)=>t.concat(keyCodes$2.horizontal[e]),[9]),keyCodes$2.horizontal.listH=keyCodes$2.horizontal.list,keyCodes$2.vertical.list=Object.keys(keyCodes$2.vertical).reduce((t,e)=>t.concat(keyCodes$2.vertical[e]),[9]),keyCodes$2.vertical.listH=[],keyCodes$2.all.list=Object.keys(keyCodes$2.all).reduce((t,e)=>t.concat(keyCodes$2.all[e]),[9]),keyCodes$2.all.listH=keyCodes$2.horizontal.list;var KeyGroupNavigation={name:"key-group-navigation",bind(t,{modifiers:e,arg:i,value:s}){const o={keyCodes:keyCodes$2.all,arg:i,modifiers:{},...parseArg$2(i),focusRestoreEl:null,keyDown(e){const{keyCode:i,shiftKey:s,target:n}=e;if(-1===o.keyCodes.list.indexOf(i)||!0===n.matches(KEY_SKIP_SELECTOR))return;if(stop(e),9===i)return addFocusTargets(o,t),!0===s?void 0!==o.firstTarget?o.firstTarget.focus():prevent(e):void 0!==o.lastTarget?o.lastTarget.focus():prevent(e),void requestAnimationFrame(()=>{removeFocusTargets(o)});const r=document.activeElement,a=r?r.closest(".q-key-group-navigation"):null,l=null!==a&&a!==t?Array.prototype.filter.call(a.querySelectorAll(FOCUSABLE_SELECTOR),t=>t!==r):[],h=Array.prototype.filter.call(t.querySelectorAll(FOCUSABLE_SELECTOR),t=>!0!==l.includes(t)),d=h.length-1;if(!(d<0)){if(o.keyCodes.first.indexOf(i)>-1)changeFocusedElement(h,0,1);else if(o.keyCodes.last.indexOf(i)>-1)changeFocusedElement(h,d,-1);else{const t=null===r?-1:h.indexOf(r.closest(FOCUSABLE_SELECTOR)),e=-1===o.keyCodes.listH.indexOf(i)?o.offsetY:o.offsetX;o.keyCodes.prev.indexOf(i)>-1&&changeFocusedElement(h,Math.max(-1,t-e),-1,1!==e),o.keyCodes.next.indexOf(i)>-1&&changeFocusedElement(h,t+e,1,1!==e)}document.activeElement&&(o.focusRestoreEl=document.activeElement),prevent(e)}},setRestoreEl(t){t.target&&(o.focusRestoreEl=t.target)},setActive(){o.active=!0,t.classList.add(o.activeClass)},setInactive(){o.active=!1,t.classList.remove(o.activeClass)},focusIn(e){if(!0!==Interaction.isKeyboard)return void(!0===o.active&&o.setInactive());const i=getEventPath(e),s=void 0!==i.slice(0,i.indexOf(t)).find(matchNavigationKeyIgnoreEl);if(!0!==o.active?!0!==s&&o.setActive():!0===s&&o.setInactive(),e.target===o.firstTarget||e.target===o.lastTarget||null!==e.relatedTarget&&(void 0!==e.relatedTarget.classList&&!0===e.relatedTarget.classList.contains("q-key-group-navigation--ignore-focus")||!0===e.relatedTarget._qKeyNavIgnore&&!0===t.contains(e.relatedTarget)))return;const n=t.querySelector(".q-key-group-navigation__refocus"),r=null!==n&&n.closest(".q-key-group-navigation")===t?n:o.focusRestoreEl;if(null===r||!0===t.contains(e.relatedTarget))document.activeElement&&(o.focusRestoreEl=document.activeElement);else{const t=r.closest(FOCUSABLE_SELECTOR),e=t&&"function"==typeof t.focus?t:"function"===r.focus?r:null;requestAnimationFrame(()=>{null!==e&&(e._qKeyNavIgnore=!0,e.focus(),requestAnimationFrame(()=>{e&&(e._qKeyNavIgnore=!1)}))})}},focusOut(e){!0!==o.active||null!==e.relatedTarget&&!1!==t.contains(e.relatedTarget)||o.setInactive()}};t.__qkeygrpnav&&(t.__qkeygrpnav_old=t.__qkeygrpnav),t.__qkeygrpnav=o,t.classList.add("q-key-group-navigation"),createFocusTargets(o),configureEvents$2(t,o,e,s)},update(t,{modifiers:e,arg:i,value:s}){const o=t.__qkeygrpnav;void 0!==o&&(o.arg!==i&&Object.assign(o,parseArg$2(i)),configureEvents$2(t,o,e,s))},unbind(t){const e=t.__qkeygrpnav_old||t.__qkeygrpnav;void 0!==e&&(t.classList.remove("q-key-group-navigation"),removeFocusTargets(e),cleanEvt(e,"main"),!0===e.active&&e.setInactive(),delete t[t.__qkeygrpnav_old?"__qkeygrpnav_old":"__qkeygrpnav"])}};const breaks=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178];function toJalaali(t,e,i){return"[object Date]"===Object.prototype.toString.call(t)&&(i=t.getDate(),e=t.getMonth()+1,t=t.getFullYear()),d2j(g2d(t,e,i))}function toGregorian(t,e,i){return d2g(j2d(t,e,i))}function isLeapJalaaliYear(t){return 0===jalCalLeap(t)}function jalaaliMonthLength(t,e){return e<=6?31:e<=11?30:isLeapJalaaliYear(t)?30:29}function jalCalLeap(t){const e=breaks.length;let i,s,o,n,r,a=breaks[0];if(t=breaks[e-1])throw new Error("Invalid Jalaali year "+t);for(r=1;r=breaks[i-1])throw new Error("Invalid Jalaali year "+t);for(l=1;l=0){if(o<=185)return{jy:n,jm:s=1+div(o,31),jd:i=mod(o,31)+1};o-=186}else n-=1,o+=179,1===r.leap&&(o+=1);return{jy:n,jm:s=7+div(o,30),jd:i=mod(o,30)+1}}function g2d(t,e,i){let s=div(1461*(t+div(e-8,6)+100100),4)+div(153*mod(e+9,12)+2,5)+i-34840408;return s=s-div(3*div(t+100100+div(e-8,6),100),4)+752}function d2g(t){let e=4*t+139361631;const i=5*div(mod(e=e+4*div(3*div(4*t+183187720,146097),4)-3908,1461),4)+308,s=div(mod(i,153),5)+1,o=mod(div(i,153),12)+1;return{gy:div(e,1461)-100100+div(8-o,6),gm:o,gd:s}}function div(t,e){return~~(t/e)}function mod(t,e){return t-~~(t/e)*e}const calendars=["gregorian","persian"];var DateTimeMixin={mixins:[DarkMixin,FormMixin,ListenersMixin],props:{value:{required:!0},mask:{type:String},locale:Object,calendar:{type:String,validator:t=>calendars.includes(t),default:"gregorian"},landscape:Boolean,color:String,textColor:String,square:Boolean,flat:Boolean,bordered:Boolean,readonly:Boolean,disable:Boolean},computed:{computedMask(){return this.__getMask()},computedLocale(){return this.__getLocale()},editable(){return!0!==this.disable&&!0!==this.readonly},computedColor(){return this.color||"primary"},computedTextColor(){return this.textColor||"white"},computedTabindex(){return!0===this.editable?0:-1},headerClass(){const t=[];return void 0!==this.color&&t.push(`bg-${this.color}`),void 0!==this.textColor&&t.push(`text-${this.textColor}`),t.join(" ")}},methods:{__getLocale(){return void 0!==this.locale?{...this.$q.lang.date,...this.locale}:this.$q.lang.date},__getCurrentDate(t){const e=new Date,i=!0===t?null:0;if("persian"===this.calendar){const t=toJalaali(e);return{year:t.jy,month:t.jm,day:t.jd}}return{year:e.getFullYear(),month:e.getMonth()+1,day:e.getDate(),hour:i,minute:i,second:i,millisecond:i}},__getCurrentTime(){const t=new Date;return{hour:t.getHours(),minute:t.getMinutes(),second:t.getSeconds(),millisecond:t.getMilliseconds()}},__getDayHash:t=>t.year+"/"+pad(t.month)+"/"+pad(t.day)}};const MILLISECONDS_IN_DAY=864e5,MILLISECONDS_IN_HOUR=36e5,MILLISECONDS_IN_MINUTE=6e4,dateConstructorArgs=["year","month","date","hours","minutes","seconds","milliseconds"],defaultMask="YYYY-MM-DDTHH:mm:ss.SSSZ",token=/\[((?:[^\]\\]|\\]|\\)*)\]|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]/g,reverseToken=/(\[[^\]]*\])|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]|([.*+:?^,\s${}()|\\]+)/g,regexStore=new Map;function getRegexData(t,e){const i="("+e.days.join("|")+"|)",s=t+i;if(!0===regexStore.has(s))return regexStore.get(s);const o="("+e.daysShort.join("|")+"|)",n="("+e.months.join("|")+"|)",r="("+e.monthsShort.join("|")+"|)",a={};let l=0;const h=t.replace(reverseToken,t=>{switch(l++,t){case"YY":return a.YY=l,"(-?\\d{1,2}|)";case"YYYY":return a.YYYY=l,"(-?\\d{1,4}|)";case"M":return a.M=l,"(\\d{1,2}|)";case"MM":return a.M=l,"(\\d{2}|)";case"MMM":return a.MMM=l,r;case"MMMM":return a.MMMM=l,n;case"D":return a.D=l,"(\\d{1,2}|)";case"Do":return a.D=l,"(\\d{1,2}(?:st|nd|rd|th)|)";case"DD":return a.D=l,"(\\d{2}|)";case"H":return a.H=l,"(\\d{1,2}|)";case"HH":return a.H=l,"(\\d{2}|)";case"h":return a.h=l,"(\\d{1,2}|)";case"hh":return a.h=l,"(\\d{2}|)";case"m":return a.m=l,"(\\d{1,2}|)";case"mm":return a.m=l,"(\\d{2}|)";case"s":return a.s=l,"(\\d{1,2}|)";case"ss":return a.s=l,"(\\d{2}|)";case"S":return a.S=l,"(\\d{1}|)";case"SS":return a.S=l,"(\\d{2}|)";case"SSS":return a.S=l,"(\\d{3}|)";case"A":return a.A=l,"(AM|PM|)";case"a":return a.a=l,"(am|pm|)";case"aa":return a.aa=l,"(a\\.m\\.|p\\.m\\.|)";case"ddd":return o;case"dddd":return i;case"Q":case"d":case"E":return"(\\d{1}|)";case"Qo":return"(1st|2nd|3rd|4th|)";case"DDD":case"DDDD":return"(\\d{1,3}|)";case"w":return"(\\d{1,2}|)";case"ww":return"(\\d{2}|)";case"Z":return a.Z=l,"(Z|[+-]\\d{2}:\\d{2}|)";case"ZZ":return a.ZZ=l,"(Z|[+-]\\d{2}\\d{2}|)";case"X":return a.X=l,"(-?\\d+|)";case"x":return a.x=l,"(-?\\d{4,}|)";default:return l--,"["===t[0]&&(t=t.substring(1,t.length-1)),t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}),d={map:a,regex:new RegExp("^"+h)};return regexStore.set(s,d),d}function getDateLocale(t,e){return void 0!==t?t:void 0!==e?e.date:defaultLang.date}function formatTimezone(t,e=""){const i=t>0?"-":"+",s=Math.abs(t),o=s%60;return i+pad(Math.floor(s/60))+e+pad(o)}function normalizeMod(t){const e={...t};return void 0!==t.years&&(e.year=t.years,delete e.years),void 0!==t.months&&(e.month=t.months,delete e.months),void 0!==t.days&&(e.date=t.days,delete e.days),void 0!==t.day&&(e.date=t.day,delete e.day),void 0!==t.hour&&(e.hours=t.hour,delete e.hour),void 0!==t.minute&&(e.minutes=t.minute,delete e.minute),void 0!==t.second&&(e.seconds=t.second,delete e.second),void 0!==t.millisecond&&(e.milliseconds=t.millisecond,delete e.millisecond),e}const maxDayDate=new Date;function getMaxDay(t,e,i){return"persian"===i?jalaaliMonthLength(t,e):(maxDayDate.setFullYear(t),maxDayDate.setMonth(e),maxDayDate.setDate(0),maxDayDate.getDate())}function applyYearMonthDay(t,e,i){const s=void 0!==e.year?e.year:t[`get${i}FullYear`](),o=void 0!==e.month?e.month-1:t[`get${i}Month`](),n=getMaxDay(s,o+1),r=Math.max(1,Math.min(n,void 0!==e.date?e.date:t[`get${i}Date`]()));return t[`set${i}Date`](1),t[`set${i}Month`](2),t[`set${i}FullYear`](s),t[`set${i}Month`](o),t[`set${i}Date`](r),delete e.year,delete e.month,delete e.date,t}function applyYearMonthDayChange(t,e,i){let s=t.getFullYear(),o=t.getMonth()+1;return void 0!==e.year&&(s+=i*e.year,delete e.year),void 0!==e.month&&(o+=i*e.month,delete e.month),applyYearMonthDay(t,{year:s,month:o},""),void 0!==e.date&&(t.setDate(t.getDate()+i*e.date),delete e.date),t}function getChange(t,e,i){const s=normalizeMod(e),o=new Date(t),n=void 0!==s.year||void 0!==s.month||void 0!==s.date?applyYearMonthDayChange(o,s,i):o;for(const t in s){const e=capitalize(t);n[`set${e}`](n[`get${e}`]()+i*s[t])}return n}function __safeCreateDate(...t){return t.length>1&&t[0]>=0&&t[0]<=99?buildDate(dateConstructorArgs.reduce((e,i,s)=>(void 0!==t[s]&&(e[i]=t[s]),e),{})):new Date(...t)}function adjustDate(t,e,i){const s=normalizeMod(e),o=!0===i?"UTC":"",n=null===t||void 0===t?new Date:new Date(t),r=void 0!==s.year||void 0!==s.month||void 0!==s.date?applyYearMonthDay(n,s,o):n;for(const t in s){r[`set${o}${t.charAt(0).toUpperCase()+t.slice(1)}`](s[t])}return r}function extractDate(t,e,i){const s=__splitDate(t,e,i),o=__safeCreateDate(s.year,null===s.month?null:s.month-1,null===s.day?1:s.day,s.hour,s.minute,s.second,s.millisecond),n=o.getTimezoneOffset();return null===s.timezoneOffset||s.timezoneOffset===n?o:getChange(o,{minutes:s.timezoneOffset-n},1)}function __splitDate(t,e,i,s,o){const n={year:null,month:null,day:null,hour:null,minute:null,second:null,millisecond:null,timezoneOffset:null,dateHash:null,timeHash:null};if(void 0!==o&&Object.assign(n,o),void 0===t||null===t||""===t||"string"!=typeof t)return n;void 0===e&&(e=defaultMask);const r=getDateLocale(i,lang.props),a=r.months,l=r.monthsShort,{regex:h,map:d}=getRegexData(e,r),c=t.match(h);if(null===c)return n;const u={...d};Object.keys(u).forEach(t=>{""===c[u[t]]&&(u[t]=void 0)});let p="";if(void 0!==u.X||void 0!==u.x){const t=parseInt(c[void 0!==u.X?u.X:u.x],10);if(!0===isNaN(t)||t<0)return n;const e=new Date(t*(void 0!==u.X?1e3:1));n.year=e.getFullYear(),n.month=e.getMonth()+1,n.day=e.getDate(),n.hour=e.getHours(),n.minute=e.getMinutes(),n.second=e.getSeconds(),n.millisecond=e.getMilliseconds()}else{if(void 0!==u.YYYY)n.year=parseInt(c[u.YYYY],10);else if(void 0!==u.YY){const t=parseInt(c[u.YY],10);n.year=t<0?t:2e3+t}if(void 0!==u.M){if(n.month=parseInt(c[u.M],10),n.month<1||n.month>12)return n}else void 0!==u.MMM?n.month=l.indexOf(c[u.MMM])+1:void 0!==u.MMMM&&(n.month=a.indexOf(c[u.MMMM])+1);if(void 0!==u.D){if(n.day=parseInt(c[u.D],10),null===n.year||null===n.month||n.day<1)return n;if(n.day>getMaxDay(n.year,n.month,s))return n}void 0!==u.H?n.hour=parseInt(c[u.H],10)%24:void 0!==u.h&&(n.hour=parseInt(c[u.h],10)%12,(u.A&&"PM"===c[u.A]||u.a&&"pm"===c[u.a]||u.aa&&"p.m."===c[u.aa])&&(n.hour+=12),n.hour=n.hour%24),void 0!==u.m&&(n.minute=parseInt(c[u.m],10)%60),void 0!==u.s&&(n.second=parseInt(c[u.s],10)%60),void 0!==u.S&&(n.millisecond=parseInt(c[u.S],10)*10**(3-c[u.S].length)),void 0===u.Z&&void 0===u.ZZ||(p=void 0!==u.Z?c[u.Z].replace(":",""):c[u.ZZ],n.timezoneOffset=("+"===p[0]?-1:1)*(60*p.slice(1,3)+1*p.slice(3,5)))}return n.dateHash=n.year+"/"+pad(n.month)+"/"+pad(n.day),n.timeHash=pad(n.hour)+":"+pad(n.minute)+":"+pad(n.second)+p,n}function isValid(t){return"number"==typeof t||!1===isNaN(Date.parse(t))}function buildDate(t,e){return adjustDate(null,t,e)}function getDayOfWeek(t,e){const i=getDateLocale(e,lang.props);return 1+(7+new Date(t).getDay()-(i.firstDayOfWeek||0))%7}function getWeekOfYear(t){const e=__safeCreateDate(t.getFullYear(),t.getMonth(),t.getDate());e.setDate(e.getDate()-(e.getDay()+6)%7+3);const i=__safeCreateDate(e.getFullYear(),0,4);i.setDate(i.getDate()-(i.getDay()+6)%7+3);const s=e.getTimezoneOffset()-i.getTimezoneOffset();e.setHours(e.getHours()-s);const o=(e-i)/(7*MILLISECONDS_IN_DAY);return 1+Math.floor(o)}function getDayIdentifier(t){return 1e4*t.getFullYear()+100*t.getMonth()+t.getDate()}function getDateIdentifier(t,e){const i=new Date(t);return!0===e?getDayIdentifier(i):i.getTime()}function isBetweenDates(t,e,i,s={}){const o=getDateIdentifier(e,s.onlyDate),n=getDateIdentifier(i,s.onlyDate),r=getDateIdentifier(t,s.onlyDate);return(r>o||!0===s.inclusiveFrom&&r===o)&&(r{e=Math.max(e,new Date(t))}),e}function getMinDate(t){let e=new Date(t);return Array.prototype.slice.call(arguments,1).forEach(t=>{e=Math.min(e,new Date(t))}),e}function getDiff(t,e,i){return Math.floor((t.getTime()-t.getTimezoneOffset()*MILLISECONDS_IN_MINUTE-(e.getTime()-e.getTimezoneOffset()*MILLISECONDS_IN_MINUTE))/i)}function getDateDiff(t,e,i="days"){const s=new Date(t),o=new Date(e);switch(i){case"years":case"year":return s.getFullYear()-o.getFullYear();case"months":case"month":return 12*(s.getFullYear()-o.getFullYear())+s.getMonth()-o.getMonth();case"days":case"day":case"date":return getDiff(startOfDate(s,"day"),startOfDate(o,"day"),MILLISECONDS_IN_DAY);case"hours":case"hour":return getDiff(startOfDate(s,"hour"),startOfDate(o,"hour"),MILLISECONDS_IN_HOUR);case"minutes":case"minute":return getDiff(startOfDate(s,"minute"),startOfDate(o,"minute"),MILLISECONDS_IN_MINUTE);case"seconds":case"second":return getDiff(startOfDate(s,"second"),startOfDate(o,"second"),1e3)}}function getDayOfYear(t){return getDateDiff(t,startOfDate(t,"year"),"days")+1}function inferDateFormat(t){return!0===isDate(t)?"date":"number"==typeof t?"number":"string"}function getDateBetween(t,e,i){const s=new Date(t);if(e){const t=new Date(e);if(st)return t}return s}function isSameDate(t,e,i){const s=new Date(t),o=new Date(e);if(void 0===i)return s.getTime()===o.getTime();switch(i){case"second":case"seconds":if(s.getSeconds()!==o.getSeconds())return!1;case"minute":case"minutes":if(s.getMinutes()!==o.getMinutes())return!1;case"hour":case"hours":if(s.getHours()!==o.getHours())return!1;case"day":case"days":case"date":if(s.getDate()!==o.getDate())return!1;case"month":case"months":if(s.getMonth()!==o.getMonth())return!1;case"year":case"years":if(s.getFullYear()!==o.getFullYear())return!1;break;default:throw new Error(`date isSameDate unknown unit ${i}`)}return!0}function daysInMonth(t){return __safeCreateDate(t.getFullYear(),t.getMonth()+1,0).getDate()}function getOrdinal(t){if(t>=11&&t<=13)return`${t}th`;switch(t%10){case 1:return`${t}st`;case 2:return`${t}nd`;case 3:return`${t}rd`}return`${t}th`}const formatter={YY(t,e,i){const s=this.YYYY(t,e,i)%100;return s>=0?pad(s):"-"+pad(Math.abs(s))},YYYY:(t,e,i)=>void 0!==i&&null!==i?i:t.getFullYear(),M:t=>t.getMonth()+1,MM:t=>pad(t.getMonth()+1),MMM:(t,e)=>e.monthsShort[t.getMonth()],MMMM:(t,e)=>e.months[t.getMonth()],Q:t=>Math.ceil((t.getMonth()+1)/3),Qo(t){return getOrdinal(this.Q(t))},D:t=>t.getDate(),Do:t=>getOrdinal(t.getDate()),DD:t=>pad(t.getDate()),DDD:t=>getDayOfYear(t),DDDD:t=>pad(getDayOfYear(t),3),d:t=>t.getDay(),dd(t,e){return this.dddd(t,e).slice(0,2)},ddd:(t,e)=>e.daysShort[t.getDay()],dddd:(t,e)=>e.days[t.getDay()],E:t=>t.getDay()||7,w:t=>getWeekOfYear(t),ww:t=>pad(getWeekOfYear(t)),H:t=>t.getHours(),HH:t=>pad(t.getHours()),h(t){const e=t.getHours();return 0===e?12:e>12?e%12:e},hh(t){return pad(this.h(t))},m:t=>t.getMinutes(),mm:t=>pad(t.getMinutes()),s:t=>t.getSeconds(),ss:t=>pad(t.getSeconds()),S:t=>Math.floor(t.getMilliseconds()/100),SS:t=>pad(Math.floor(t.getMilliseconds()/10)),SSS:t=>pad(t.getMilliseconds(),3),A(t){return this.H(t)<12?"AM":"PM"},a(t){return this.H(t)<12?"am":"pm"},aa(t){return this.H(t)<12?"a.m.":"p.m."},Z:(t,e,i,s)=>formatTimezone(void 0===s||null===s?t.getTimezoneOffset():s,":"),ZZ:(t,e,i,s)=>formatTimezone(void 0===s||null===s?t.getTimezoneOffset():s),X:t=>Math.floor(t.getTime()/1e3),x:t=>t.getTime()};function formatDate(t,e,i,s,o){if(0!==t&&!t||t===1/0||t===-1/0)return;const n=new Date(t);if(isNaN(n))return;void 0===e&&(e=defaultMask);const r=getDateLocale(i,lang.props);return e.replace(token,(t,e)=>t in formatter?formatter[t](n,r,s,o):void 0===e?t:e.split("\\]").join("]"))}function clone(t){return!0===isDate(t)?new Date(t.getTime()):t}var date={isValid:isValid,extractDate:extractDate,buildDate:buildDate,getDayOfWeek:getDayOfWeek,getWeekOfYear:getWeekOfYear,isBetweenDates:isBetweenDates,addToDate:addToDate,subtractFromDate:subtractFromDate,adjustDate:adjustDate,startOfDate:startOfDate,endOfDate:endOfDate,getMaxDate:getMaxDate,getMinDate:getMinDate,getDateDiff:getDateDiff,getDayOfYear:getDayOfYear,inferDateFormat:inferDateFormat,getDateBetween:getDateBetween,isSameDate:isSameDate,daysInMonth:daysInMonth,formatDate:formatDate,clone:clone};const yearsInterval=20,views=["Calendar","Years","Months"],viewIsValid=t=>views.includes(t),yearMonthValidator=t=>/^-?[\d]+\/[0-1]\d$/.test(t),modelNavigationValidator=t=>["from","to",!1].indexOf(t)>-1,hashToInt=t=>{if("string"!=typeof t)return NaN;const e=t.split("/");return 1e4*parseInt(e[0],10)+parseInt(e.slice(1).join(""),10)},lineStr=" — ";function modelIsValid(t){return null!==t.dateHash&&null!==t.day&&null!==t.month&&null!==t.year}var QDate=Vue__default.default.extend({name:"QDate",mixins:[DateTimeMixin],directives:{KeyGroupNavigation:KeyGroupNavigation},props:{multiple:Boolean,range:Boolean,dayAsRange:Boolean,title:String,subtitle:String,mask:{default:"YYYY/MM/DD"},defaultYearMonth:{type:String,validator:yearMonthValidator},yearsInMonthView:Boolean,events:[Array,Function],eventColor:[String,Function],emitImmediately:Boolean,options:[Array,Function],modelNavigation:{type:[String,Boolean],default:"from",validator:modelNavigationValidator},navigationMinYearMonth:{type:String,validator:yearMonthValidator},navigationMaxYearMonth:{type:String,validator:yearMonthValidator},noUnset:Boolean,firstDayOfWeek:[String,Number],todayBtn:Boolean,minimal:Boolean,defaultView:{type:String,default:"Calendar",validator:viewIsValid}},data(){const t=this.__getMask(),e=this.__getLocale(),i=this.__getViewModel(t,e),s=i.year,o=!0===this.$q.lang.rtl?"right":"left";return{view:this.defaultView,monthDirection:o,yearDirection:o,startYear:s-s%20-(s<0?20:0),editRange:void 0,innerMask:t,innerLocale:e,viewModel:i}},watch:{value(t){if(this.lastEmitValue===t)this.lastEmitValue=0;else{const{year:t,month:e}=this.__getViewModel(this.innerMask,this.innerLocale);this.__updateViewModel(t,e)}},view(){this.$nextTick(()=>{void 0!==this.$refs.viewTarget&&this.$refs.viewTarget.$el.focus()})},"viewModel.year"(t){this.$emit("navigation",{year:t,month:this.viewModel.month})},"viewModel.month"(t){this.$emit("navigation",{year:this.viewModel.year,month:t})},computedMask(t){this.__updateValue(t,this.innerLocale,"mask"),this.innerMask=t},computedLocale(t){this.__updateValue(this.innerMask,t,"locale"),this.innerLocale=t}},computed:{classes(){const t=!0===this.landscape?"landscape":"portrait";return`q-date q-date--${t} q-date--${t}-${!0===this.minimal?"minimal":"standard"}`+` q-date--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.bordered?" q-date--bordered":"")+(!0===this.square?" q-date--square no-border-radius":"")+(!0===this.flat?" q-date--flat no-shadow":"")+(!0===this.disable?" disabled":!0===this.readonly?" q-date--readonly":"")},isImmediate(){return!0===this.emitImmediately&&!0!==this.multiple&&!0!==this.range},normalizedModel(){return!0===Array.isArray(this.value)?this.value:null!==this.value&&void 0!==this.value?[this.value]:[]},daysModel(){return this.normalizedModel.filter(t=>"string"==typeof t).map(t=>this.__decodeString(t,this.innerMask,this.innerLocale)).filter(modelIsValid)},rangeModel(){const t=t=>this.__decodeString(t,this.innerMask,this.innerLocale);return this.normalizedModel.filter(t=>!0===isObject(t)&&void 0!==t.from&&void 0!==t.to).map(e=>{const i=t(e.from),s=t(e.to);return hashToInt(i.dateHash)<=hashToInt(s.dateHash)?{from:i,to:s}:{from:s,to:i}}).filter(t=>!0===modelIsValid(t.from)&&!0===modelIsValid(t.to))},getNativeDateFn(){return"persian"!==this.calendar?t=>{const e=__safeCreateDate(t.year,t.month-1,t.day);return e.setFullYear(t.year),e}:t=>{const e=toGregorian(t.year,t.month,t.day),i=__safeCreateDate(e.gy,e.gm-1,e.gd);return i.setFullYear(t.year),i}},encodeObjectFn(){return"persian"===this.calendar?this.__getDayHash:(t,e,i)=>formatDate(__safeCreateDate(t.year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond),void 0===e?this.innerMask:e,void 0===i?this.innerLocale:i,t.year,t.timezoneOffset)},daysInModel(){return this.daysModel.length+this.rangeModel.reduce((t,e)=>t+1+getDateDiff(this.getNativeDateFn(e.to),this.getNativeDateFn(e.from)),0)},headerTitle(){if(void 0!==this.title&&null!==this.title&&this.title.length>0)return this.title;if(void 0!==this.editRange){const t=this.editRange.init,e=this.getNativeDateFn(t);return this.innerLocale.daysShort[e.getDay()]+", "+this.innerLocale.monthsShort[t.month-1]+" "+t.day+" — ?"}if(0===this.daysInModel)return" — ";if(this.daysInModel>1)return`${this.daysInModel} ${this.innerLocale.pluralDay}`;const t=this.minSelectedModel,e=this.getNativeDateFn(t);return!0===isNaN(e.valueOf())?" — ":void 0!==this.innerLocale.headerTitle?this.innerLocale.headerTitle(e,t):this.innerLocale.daysShort[e.getDay()]+", "+this.innerLocale.monthsShort[t.month-1]+" "+t.day},headerSubtitle(){if(void 0!==this.subtitle&&null!==this.subtitle&&this.subtitle.length>0)return this.subtitle;if(0===this.daysInModel)return" — ";if(this.daysInModel>1){const t=this.minSelectedModel,e=this.maxSelectedModel,i=this.innerLocale.monthsShort;return i[t.month-1]+(t.year!==e.year?" "+t.year+" — "+i[e.month-1]+" ":t.month!==e.month?" — "+i[e.month-1]:"")+" "+e.year}return this.minSelectedModel.year},minSelectedModel(){return this.daysModel.concat(this.rangeModel.map(t=>t.from)).sort((t,e)=>t.year-e.year||t.month-e.month)[0]},maxSelectedModel(){return this.daysModel.concat(this.rangeModel.map(t=>t.to)).sort((t,e)=>e.year-t.year||e.month-t.month)[0]},dateArrow(){const t=[this.$q.iconSet.datetime.arrowLeft,this.$q.iconSet.datetime.arrowRight];return!0===this.$q.lang.rtl?t.reverse():t},computedFirstDayOfWeek(){return void 0!==this.firstDayOfWeek?Number(this.firstDayOfWeek):this.innerLocale.firstDayOfWeek},daysOfWeek(){const t=this.innerLocale.daysShort,e=this.computedFirstDayOfWeek;return e>0?t.slice(e,7).concat(t.slice(0,e)):t},daysInMonth(){const{year:t,month:e}=this.viewModel;return"persian"!==this.calendar?{prev:__safeCreateDate(t,e-1,0).getDate(),cur:__safeCreateDate(t,e,0).getDate(),next:__safeCreateDate(t,e+1,0).getDate()}:{prev:jalaaliMonthLength(1===e?t-1:t,1===e?12:e-1),cur:jalaaliMonthLength(t,e),next:jalaaliMonthLength(12===e?t+1:t,12===e?1:e+1)}},today(){return this.__getCurrentDate()},evtColor(){return"function"==typeof this.eventColor?this.eventColor:()=>this.eventColor},minNav(){if(void 0!==this.navigationMinYearMonth){const t=this.navigationMinYearMonth.split("/");return{year:parseInt(t[0],10),month:parseInt(t[1],10)}}},maxNav(){if(void 0!==this.navigationMaxYearMonth){const t=this.navigationMaxYearMonth.split("/");return{year:parseInt(t[0],10),month:parseInt(t[1],10)}}},navBoundaries(){const t={month:{prev:!0,next:!0},year:{prev:!0,next:!0}};return void 0!==this.minNav&&this.minNav.year>=this.viewModel.year&&(t.year.prev=!1,this.minNav.year===this.viewModel.year&&this.minNav.month>=this.viewModel.month&&(t.month.prev=!1)),void 0!==this.maxNav&&this.maxNav.year<=this.viewModel.year&&(t.year.next=!1,this.maxNav.year===this.viewModel.year&&this.maxNav.month<=this.viewModel.month&&(t.month.next=!1)),t},daysMap(){const t={};return this.daysModel.forEach(e=>{const i=this.__getMonthHash(e);void 0===t[i]&&(t[i]=[]),t[i].push(e.day)}),t},rangeMap(){const t={};return this.rangeModel.forEach(e=>{const i=this.__getMonthHash(e.from),s=this.__getMonthHash(e.to),o=hashToInt(s);if(void 0===t[i]&&(t[i]=[]),t[i].push({from:e.from.day,to:i===s?e.to.day:void 0,range:e}),hashToInt(i)12&&(r.year++,r.month=1),a=this.__getMonthHash(r)}}),t},rangeViewMap(){if(void 0===this.editRange)return{};const t={},{init:e,initHash:i,final:s,finalHash:o}=this.editRange,[n,r]=hashToInt(i)<=hashToInt(o)?[e,s]:[s,e],a=hashToInt(this.__getMonthHash(n)),l=hashToInt(this.__getMonthHash(r));return["prev","cur","next"].forEach(e=>{const i=hashToInt(this.viewMonthHash[e]);if(a>i||lthis.options.includes(t);for(let i=1;i<=this.daysInMonth.cur;i++){const s=this.viewMonthHash.cur+"/"+pad(i);t[i]=e(s)}return t},eventDaysMap(){const t={};if(void 0===this.events)for(let e=1;e<=this.daysInMonth.cur;e++)t[e]=!1;else{const e="function"==typeof this.events?this.events:t=>this.events.includes(t);for(let i=1;i<=this.daysInMonth.cur;i++){const s=this.viewMonthHash.cur+"/"+pad(i);t[i]=!0===e(s)&&this.evtColor(s)}}return t},startFillDays(){let t;const{year:e,month:i}=this.viewModel;if("persian"!==this.calendar)t=__safeCreateDate(e,i-1,1);else{const s=toGregorian(e,i,1);t=__safeCreateDate(s.gy,s.gm-1,s.gd)}const s=t.getDay()-this.computedFirstDayOfWeek-1;return{days:s<0?s+7:s,endDay:this.daysInMonth.prev}},days(){const t=[],{days:e,endDay:i}=this.startFillDays;if(e<6){for(let s=i-e;s<=i;s++)t.push({i:s,day:this.viewMonthHash.prev+"/"+pad(s),fill:!0});this.__fillDaysMeta(t,this.viewMonthHash.prev,i,-i+e+1,i-e,i)}const s=t.length;for(let e=1;e<=this.daysInMonth.cur;e++){const i={i:e,day:this.viewMonthHash.cur+"/"+pad(e),event:this.eventDaysMap[e],classes:[]};!0===this.selectionDaysMap[e]&&(i.in=!0,i.flat=!0),t.push(i)}this.__fillDaysMeta(t,this.viewMonthHash.cur,this.daysInMonth.cur,s,1,this.daysInMonth.cur),this.viewModel.year===this.today.year&&this.viewModel.month===this.today.month&&(t[s+this.today.day-1].today=!0);const o=t.length%7;if(o>0){const e=7-o;for(let i=1;i<=e;i++)t.push({i:i,day:this.viewMonthHash.next+"/"+pad(i),fill:!0});this.__fillDaysMeta(t,this.viewMonthHash.next,this.daysInMonth.next,s+this.daysInMonth.cur,1,e)}return t.forEach(t=>{let e="q-date__calendar-item ";e+=!0===t.fill?"q-date__calendar-item--fill":`q-date__calendar-item--${!0===t.in?"in":"out"}`,void 0===t.range&&!0!==t.editRange||(e+=` text-${t.color}`),void 0===t.range||!0===t.rangeTo&&!0===t.rangeFrom||(e+=` q-date__range${!0===t.rangeFrom?"-from":!0===t.rangeTo?"-to":""}`),!0===t.editRange&&(e+=` q-date__edit-range${!0===t.editRangeFrom?"-from":""}${!0===t.editRangeTo?"-to":""}`),t.classes=e}),t},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0}},methods:{setToday(){this.__toggleDate(this.today,this.__getMonthHash(this.today)),this.setCalendarTo(this.today.year,this.today.month)},setView(t){!0===viewIsValid(t)&&(this.view=t)},offsetCalendar(t,e){["month","year"].includes(t)&&this[`__goTo${"month"===t?"Month":"Year"}`](!0===e?-1:1)},setCalendarTo(t,e){this.view="Calendar",this.__updateViewModel(t,e)},setEditingRange(t,e,i){if(void 0===i&&(i=this.modelNavigation),!1===this.range||!t)return void(this.editRange=void 0);const s=Object.assign({...this.viewModel},t),o=void 0!==e?Object.assign({...this.viewModel},e):s;this.editRange={init:s,initHash:this.__getDayHash(s),final:o,finalHash:this.__getDayHash(o)},["from","to"].indexOf(i)>-1&&this.$nextTick(()=>{this.setCalendarTo("from"===i?s.year:o.year,"from"===i?s.month:o.month)})},__getMask(){return"persian"===this.calendar?"YYYY/MM/DD":this.mask},__decodeString(t,e,i){return __splitDate(t,e,i,this.calendar,{hour:0,minute:0,second:0,millisecond:0})},__getViewModel(t,e){if(!1===this.modelNavigation)return void 0===this.viewModel?this.__getDefaultViewModel():this.viewModel;const i=!0===Array.isArray(this.value)?this.value:this.value?[this.value]:[];if(0===i.length)return this.__getDefaultViewModel();const s=i["from"===this.modelNavigation?0:i.length-1],o=this.__decodeString(void 0!==s.from?s.from:s,t,e);return null===o.dateHash?this.__getDefaultViewModel():o},__getDefaultViewModel(){let t,e;if(void 0!==this.defaultYearMonth){const i=this.defaultYearMonth.split("/");t=parseInt(i[0],10),e=parseInt(i[1],10)}else{const i=void 0!==this.today?this.today:this.__getCurrentDate();t=i.year,e=i.month}return{year:t,month:e,day:1,hour:0,minute:0,second:0,millisecond:0,dateHash:t+"/"+pad(e)+"/01"}},__getHeader(t){if(!0!==this.minimal)return t("div",{staticClass:"q-date__header",class:this.headerClass},[t("div",{staticClass:"relative-position"},[t("transition",{props:{name:"q-transition--fade"}},[t("div",{key:"h-yr-"+this.headerSubtitle,staticClass:"q-date__header-subtitle q-date__header-link",class:"Years"===this.view?"q-date__header-link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:cache(this,"vY",{click:()=>{this.view="Years"},keyup:t=>{13===t.keyCode&&(this.view="Years")}})},[this.headerSubtitle])])]),t("div",{staticClass:"q-date__header-title relative-position flex no-wrap"},[t("div",{staticClass:"relative-position col"},[t("transition",{props:{name:"q-transition--fade"}},[t("div",{key:"h-sub"+this.headerTitle,staticClass:"q-date__header-title-label q-date__header-link",class:"Calendar"===this.view?"q-date__header-link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:cache(this,"vC",{click:()=>{this.view="Calendar"},keyup:t=>{13===t.keyCode&&(this.view="Calendar")}})},[this.headerTitle])])]),!0===this.todayBtn?t(QBtn,{key:"today",staticClass:"q-date__header-today self-start",props:{icon:this.$q.iconSet.datetime.today,flat:!0,size:"sm",round:!0,tabindex:this.computedTabindex},on:cache(this,"today",{click:this.setToday})}):null])])},__getNavigation(t,{label:e,view:i,key:s,dir:o,goTo:n,boundaries:r,cls:a}){return[t("div",{staticClass:"row items-center q-date__arrow"},[t(QBtn,{key:"go-#"+i,props:{round:!0,dense:!0,size:"sm",flat:!0,icon:this.dateArrow[0],tabindex:this.computedTabindex,disable:!1===r.prev},on:cache(this,"go-#"+i,{click(){n(-1)}})})]),t("div",{staticClass:"relative-position overflow-hidden flex flex-center"+a},[t("transition",{props:{name:"q-transition--jump-"+o}},[t("div",{key:s},[t(QBtn,{key:"view#"+i,props:{flat:!0,dense:!0,noCaps:!0,label:e,tabindex:this.computedTabindex},on:cache(this,"view#"+i,{click:()=>{this.view=i}})})])])]),t("div",{staticClass:"row items-center q-date__arrow"},[t(QBtn,{key:"go+#"+i,props:{round:!0,dense:!0,size:"sm",flat:!0,icon:this.dateArrow[1],tabindex:this.computedTabindex,disable:!1===r.next},on:cache(this,"go+#"+i,{click(){n(1)}})})])]},__getCalendarView(t){const e=void 0!==this.$scopedSlots.day?this.$scopedSlots.day:e=>!1!==e.event?[t("div",{staticClass:"q-date__event bg-"+e.event})]:null,i=void 0!==this.$scopedSlots.day?this.$scopedSlots.day:e=>t("div",[e.i]),s=this.days.find(t=>!0===t.unelevated),o=void 0===s?this.days.find(t=>!0===t.today):s,n=void 0===o?1:o.i,r="persian"===this.calendar?"dayP#":"day#";return[t("div",{key:"calendar-view",staticClass:"q-date__view q-date__calendar"},[t("div",{staticClass:"q-date__navigation row items-center no-wrap"},this.__getNavigation(t,{label:this.innerLocale.months[this.viewModel.month-1],view:"Months",key:this.viewModel.month,dir:this.monthDirection,goTo:this.__goToMonth,boundaries:this.navBoundaries.month,cls:" col"}).concat(this.__getNavigation(t,{label:this.viewModel.year,view:"Years",key:this.viewModel.year,dir:this.yearDirection,goTo:this.__goToYear,boundaries:this.navBoundaries.year,cls:""}))),t("div",{staticClass:"q-date__calendar-weekdays row items-center no-wrap"},this.daysOfWeek.map(e=>t("div",{staticClass:"q-date__calendar-item"},[t("div",[e])]))),t("div",{key:"kNavC",staticClass:"q-date__calendar-days-container relative-position overflow-hidden",directives:cache(this,"kNavC",[{name:"key-group-navigation",arg:"7"}])},[t("transition",{props:{name:"q-transition--slide-"+this.monthDirection}},[t("div",{key:this.viewMonthHash.cur,staticClass:"q-date__calendar-days fit"},this.days.map(s=>t("div",{staticClass:s.classes},[!0===s.in?t(QBtn,{key:r+s.i,staticClass:!0===s.today?"q-date__today":null,ref:n===s.i?"viewTarget":void 0,props:{dense:!0,flat:s.flat,unelevated:s.unelevated,color:s.color,textColor:s.textColor,label:s.i,tabindex:this.computedTabindex},on:cache(this,r+s.i,{click:()=>{this.__onDayClick(s.i)},focusin:()=>{this.__onDayMouseover(s.i)},mouseenter:()=>{this.__onDayMouseover(s.i)}})},e(s)):i(s)])))])])])]},__getMonthsView(t){const e=this.viewModel.year===this.today.year,i=t=>void 0!==this.minNav&&this.viewModel.year===this.minNav.year&&this.minNav.month>t||void 0!==this.maxNav&&this.viewModel.year===this.maxNav.year&&this.maxNav.montht("div",{staticClass:"q-date__months-item flex flex-center"},[t(QBtn,{key:"month#"+r,staticClass:!0===e&&this.today.month===r+1?"q-date__today":null,ref:this.viewModel.month===r+1?"viewTarget":void 0,props:Object.assign({label:n,tabindex:this.computedTabindex,disable:i(r+1)},this.viewModel.month===r+1?s:o),on:cache(this,"month#"+r,{click:()=>{this.__setMonth(r+1)}})})]));return!0===this.yearsInMonthView&&n.unshift(t("div",{staticClass:"row no-wrap full-width"},[this.__getNavigation(t,{label:this.viewModel.year,view:"Years",key:this.viewModel.year,dir:this.yearDirection,goTo:this.__goToYear,boundaries:this.navBoundaries.year,cls:" col"})])),t("div",{key:"kNavYM",staticClass:"q-date__view q-date__months flex flex-center",directives:cache(this,"kNavYM",[{name:"key-group-navigation",arg:"3"}])},n)},__getYearsView(t){const e=this.startYear,i=e+20,s=[],o=this.viewModel.year>=e&&this.viewModel.year<=i?this.viewModel.year:this.today.year>=e&&this.today.year<=i?this.today.year:e,n=t=>void 0!==this.minNav&&this.minNav.year>t||void 0!==this.maxNav&&this.maxNav.year{this.__setYear(r)}})})]))}return t("div",{staticClass:"q-date__view q-date__years flex flex-center"},[t("div",{staticClass:"col-auto"},[t(QBtn,{key:"y-",props:{round:!0,dense:!0,flat:!0,icon:this.dateArrow[0],tabindex:this.computedTabindex,disable:n(e)},on:cache(this,"y-",{click:()=>{this.startYear-=20}})})]),t("div",{key:"kNavYM",staticClass:"q-date__years-content col self-stretch row items-center",directives:cache(this,"kNavYM",[{name:"key-group-navigation",arg:"3"}])},s),t("div",{staticClass:"col-auto"},[t(QBtn,{key:"y+",props:{round:!0,dense:!0,flat:!0,icon:this.dateArrow[1],tabindex:this.computedTabindex,disable:n(i)},on:cache(this,"y+",{click:()=>{this.startYear+=20}})})])])},__fillDaysMeta(t,e,i,s,o,n){if(void 0!==this.daysMap[e]&&this.daysMap[e].filter(t=>t>=o&&t<=n).forEach(e=>{const i=s+e-1;Object.assign(t[i],{selected:!0,unelevated:!0,flat:!1,color:this.computedColor,textColor:this.computedTextColor})}),void 0!==this.rangeMap[e]&&this.rangeMap[e].forEach(e=>{const r=s+Math.max(o,void 0===e.from?1:e.from)-1,a=s+Math.min(n,void 0===e.to?i:e.to)-1;for(let i=r;i<=a;i++)Object.assign(t[i],{range:e.range,unelevated:!0,color:this.computedColor,textColor:this.computedTextColor});e.from>=o&&e.from<=n&&Object.assign(t[r],{rangeFrom:!0,flat:!1}),e.to>=o&&e.to<=n&&Object.assign(t[a],{rangeTo:!0,flat:!1})}),void 0!==this.rangeViewMap[e]){const i=s+Math.max(o,this.rangeViewMap[e].from)-1,r=s+Math.min(n,this.rangeViewMap[e].to)-1;for(let e=i;e<=r;e++)t[e].color=this.computedColor,t[e].editRange=!0;!0===this.rangeViewMap[e].includeFrom&&this.rangeViewMap[e].from>=o&&this.rangeViewMap[e].from<=n&&(t[i].editRangeFrom=!0),!0===this.rangeViewMap[e].includeTo&&this.rangeViewMap[e].to>=o&&this.rangeViewMap[e].to<=n&&(t[r].editRangeTo=!0)}},__goToMonth(t){let e=this.viewModel.year,i=Number(this.viewModel.month)+t;13===i?(i=1,e++):0===i&&(i=12,e--),this.__updateViewModel(e,i),!0===this.isImmediate&&this.__emitImmediately("month")},__goToYear(t){const e=Number(this.viewModel.year)+t;this.__updateViewModel(e,this.viewModel.month),!0===this.isImmediate&&this.__emitImmediately("year")},__setYear(t){this.__updateViewModel(t,this.viewModel.month),this.view="Years"===this.defaultView?"Months":"Calendar",!0===this.isImmediate&&this.__emitImmediately("year")},__setMonth(t){this.__updateViewModel(this.viewModel.year,t),this.view="Calendar",!0===this.isImmediate&&this.__emitImmediately("month")},__getMonthHash:t=>t.year+"/"+pad(t.month),__toggleDate(t,e){const i=this.daysMap[e];(void 0!==i&&!0===i.includes(t.day)?this.__removeFromModel:this.__addToModel)(t)},__getShortDate:t=>({year:t.year,month:t.month,day:t.day}),__onDayClick(t){const e={...this.viewModel,day:t};if(!1!==this.range)if(void 0===this.editRange){const i=this.days.find(e=>!0!==e.fill&&e.i===t);if(!0!==this.noUnset&&void 0!==i.range)return void this.__removeFromModel({target:e,from:i.range.from,to:i.range.to});if(!0===i.selected)return void this.__removeFromModel(e);const s=this.__getDayHash(e);this.editRange={init:e,initHash:s,final:e,finalHash:s},this.$emit("range-start",this.__getShortDate(e))}else{const t=this.editRange.initHash,i=this.__getDayHash(e),s=hashToInt(t)<=hashToInt(i)?{from:this.editRange.init,to:e}:{from:e,to:this.editRange.init};this.editRange=void 0,this.__addToModel(t===i&&!0!==this.dayAsRange?e:{target:e,...s}),this.$emit("range-end",{from:this.__getShortDate(s.from),to:this.__getShortDate(s.to)})}else this.__toggleDate(e,this.viewMonthHash.cur)},__onDayMouseover(t){if(void 0!==this.editRange){const e={...this.viewModel,day:t};Object.assign(this.editRange,{final:e,finalHash:this.__getDayHash(e)}),this.$emit("range-change",{from:this.__getShortDate(this.editRange.init),to:this.__getShortDate(this.editRange.final)})}},__updateViewModel(t,e){t=parseInt(t,10),e=parseInt(e,10),void 0!==this.minNav&&t<=this.minNav.year&&(t=this.minNav.year,e=this.maxNav.year&&(t=this.maxNav.year,e>this.maxNav.month&&(e=this.maxNav.month));const i=t+"/"+pad(e)+"/01";i!==this.viewModel.dateHash&&(this.monthDirection=hashToInt(this.viewModel.dateHash){this.startYear=t-t%20-(t<0?20:0),Object.assign(this.viewModel,{year:t,month:e,day:1,dateHash:i})}))},__emitValue(t,e,i){const s=null!==t&&1===t.length&&!1===this.multiple?t[0]:t;this.lastEmitValue=s;const{reason:o,details:n}=this.__getEmitParams(e,i);this.$emit("input",s,o,n)},__emitImmediately(t){const e=void 0!==this.daysModel[0]&&!0===modelIsValid(this.daysModel[0])?{...this.daysModel[0]}:{...this.viewModel};this.$nextTick(()=>{e.year=this.viewModel.year,e.month=this.viewModel.month;const i="persian"!==this.calendar?__safeCreateDate(e.year,e.month,0).getDate():jalaaliMonthLength(e.year,e.month);e.day=Math.min(Math.max(1,e.day),i);const s=this.__encodeEntry(e);this.lastEmitValue=s;const{details:o}=this.__getEmitParams("",e);this.$emit("input",s,t,o)})},__getEmitParams(t,e){return void 0!==e.from?{reason:`${t}-range`,details:{...this.__getShortDate(e.target),from:this.__getShortDate(e.from),to:this.__getShortDate(e.to),changed:!0}}:{reason:`${t}-day`,details:{...this.__getShortDate(e),changed:!0}}},__encodeEntry(t,e,i){return void 0!==t.from?{from:this.encodeObjectFn(t.from,e,i),to:this.encodeObjectFn(t.to,e,i)}:this.encodeObjectFn(t,e,i)},__addToModel(t){let e;if(!0===this.multiple)if(void 0!==t.from){const i=hashToInt(this.__getDayHash(t.from)),s=hashToInt(this.__getDayHash(t.to)),o=this.daysModel.filter(t=>{const e=hashToInt(t.dateHash);return es}),n=this.rangeModel.filter(({from:t,to:e})=>hashToInt(e.dateHash)s);e=o.concat(n).concat(t).map(t=>this.__encodeEntry(t))}else{const i=this.normalizedModel.slice();i.push(this.__encodeEntry(t)),e=i}else e=this.__encodeEntry(t);this.__emitValue(e,"add",t)},__removeFromModel(t){if(!0===this.noUnset)return;let e=null;if(!0===this.multiple&&!0===Array.isArray(this.value)){const i=this.__encodeEntry(t);0===(e=void 0!==t.from?this.value.filter(t=>void 0===t.from||t.from!==i.from&&t.to!==i.to):this.value.filter(t=>t!==i)).length&&(e=null)}this.__emitValue(e,"remove",t)},__updateValue(t,e,i){const s=this.daysModel.concat(this.rangeModel).map(i=>this.__encodeEntry(i,t,e)).filter(t=>void 0!==t.from?!0===modelIsValid(t.from)&&!0===modelIsValid(t.to):modelIsValid(t));this.$emit("input",(!0===this.multiple?s:s[0])||null,i)}},render(t){const e=[t("div",{staticClass:"q-date__content col relative-position"},[t("transition",{props:{name:"q-transition--fade"}},[this[`__get${this.view}View`](t)])])],i=slot(this,"default");return void 0!==i&&e.push(t("div",{staticClass:"q-date__actions"},i)),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{class:this.classes,attrs:this.attrs,directives:[KeyGroupNavigation],on:{...this.qListeners}},[this.__getHeader(t),t("div",{staticClass:"q-date__main col column"},e)])}}),HistoryMixin={methods:{__addHistory(){this.__historyEntry={condition:()=>!0===this.hideOnRouteChange,handler:this.hide},History.add(this.__historyEntry)},__removeHistory(){void 0!==this.__historyEntry&&(History.remove(this.__historyEntry),this.__historyEntry=void 0)}},beforeDestroy(){!0===this.showing&&this.__removeHistory()}};const{passive:passive$3}=listenOpts;let applyTimer,orientationTimer,closeTimer,registered=0,state={},iosScrollActive=!1;function iosScroll(){if(!1===iosScrollActive)return;const{innerHeight:t,visualViewport:e}=window,{clientHeight:i}=document.documentElement,s=t-Math.ceil(e.height*e.scale);0===s&&i>t?document.documentElement.scrollTop-=3:(s>1&&s<4&&(document.documentElement.scrollTop+=s-1),iosScrollActive=!1)}function onIosScroll(){!1!==iosScrollActive&&cancelAnimationFrame(iosScrollActive),iosScrollActive=requestAnimationFrame(iosScroll)}function onMobileRotate(){clearTimeout(orientationTimer),orientationTimer=setTimeout(()=>{requestAnimationFrame(()=>{const{documentElement:t,body:e}=document;t.style.height=`${window.innerHeight}px`,e.style.height=`${t.clientHeight+state.scrollTop}px`})},200)}function apply$1(t,e){const{documentElement:i,body:s}=document,{visualViewport:o}=window;if(clearTimeout(applyTimer),clearTimeout(orientationTimer),"add"===t){document.qScrollPrevented=!0;const t=getScrollbarWidth();requestAnimationFrame(()=>{const{innerHeight:n,innerWidth:r}=window,{overflowX:a,overflowY:l,backgroundColor:h}=window.getComputedStyle(s);if(state={htmlStyleBefore:i.style.cssText,bodyStyleBefore:s.style.cssText,htmlStyleAfter:"",bodyStyleAfter:"",scrollLeft:i.scrollLeft,scrollTop:i.scrollTop},!0===client.is.mobile)i.style.height=`${n}px`,s.style.width=`calc(100vw + ${Math.abs(state.scrollLeft)}px)`,s.style.height=`${n+state.scrollTop}px`,window.addEventListener("orientationchange",onMobileRotate,passive$3),void 0!==o&&!0===client.is.ios&&(applyTimer=setTimeout(()=>{o.addEventListener("scroll",onIosScroll,passive$3)},500));else{const{scrollWidth:o,scrollHeight:h}=s,d="hidden"!==a&&("scroll"===a||o>r)?t:0,c="hidden"!==l&&("scroll"===l||h>n)?t:0;(c>0||d>0)&&(c>0&&(i.style.width=`calc(100vw - ${c}px)`,!0===e&&(i.style.marginRight=`${c}px`)),d>0&&(i.style.height=`calc(100vh - ${d}px)`)),s.style.width=`calc(100vw + ${Math.abs(state.scrollLeft)-c}px)`,s.style.height=`calc(100vh + ${state.scrollTop-d}px)`}s.style.left=`${-state.scrollLeft}px`,s.style.top=`${-state.scrollTop}px`,s.style["padding"+(!0===e?"Left":"Right")]=`${Math.abs(state.scrollLeft)}px`,i.style.backgroundColor=h||"rgba(128, 128, 128, 0.01)",i.classList.add("q-body--prevent-scroll"),window.scrollTo(0,0),requestAnimationFrame(()=>{0!==s.scrollTop&&(s.scrollTop=0)}),i.style.setProperty("--q-scroll-lock-left",`${-state.scrollLeft}px`);const d=document.querySelectorAll(".q-menu__container, .q-tooltip__container");for(let t=d.length-1;t>=0;t--)"absolute"===d[t].style.position&&d[t].classList.add("q-body--scroll-locked");state.htmlStyleAfter=i.style.cssText.split(";").filter(t=>t.trim().length>0),state.bodyStyleAfter=s.style.cssText.split(";").filter(t=>t.trim().length>0)})}else!0===client.is.mobile&&(window.removeEventListener("orientationchange",onMobileRotate,passive$3),void 0!==o&&!0===client.is.ios&&(o.removeEventListener("scroll",onIosScroll,passive$3),iosScrollActive=!1)),requestAnimationFrame(()=>{i.classList.remove("q-body--prevent-scroll");const t=state.htmlStyleAfter.reduce((t,e)=>t.replace(e+";",""),i.style.cssText),e=state.bodyStyleAfter.reduce((t,e)=>t.replace(e+";",""),s.style.cssText);i.style.cssText=state.htmlStyleBefore+t,s.style.cssText=state.bodyStyleBefore+e;const o=document.querySelectorAll(".q-body--scroll-locked");for(let t=o.length-1;t>=0;t--)o[t].classList.remove("q-body--scroll-locked");window.scrollTo(state.scrollLeft,state.scrollTop),applyTimer=setTimeout(()=>{document.qScrollPrevented=!1,triggerIsScrollable()},50)})}function preventScroll(t,e){let i="add";if(!0===t){if(registered++,void 0!==closeTimer)return clearTimeout(closeTimer),void(closeTimer=void 0);if(registered>1)return}else{if(0===registered)return;if(--registered>0)return;if(i="remove",!0===client.is.ios&&!0===client.is.nativeMobile)return clearTimeout(closeTimer),void(closeTimer=setTimeout(()=>{apply$1(i,e),closeTimer=void 0},100))}apply$1(i,e)}var PreventScrollMixin={methods:{__preventScroll(t){t===this.preventedScroll||void 0===this.preventedScroll&&!0!==t||(this.preventedScroll=t,preventScroll(t,this.$q.lang.rtl))}}};const positionClass$1={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},transitions={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]};var QDialog=Vue__default.default.extend({name:"QDialog",mixins:[AttrsMixin,HistoryMixin,ModelToggleMixin,Portal,PreventScrollMixin,FocusWrapMixin],props:{persistent:Boolean,autoClose:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,position:{type:String,default:"standard",validator:t=>"standard"===t||["top","bottom","left","right"].includes(t)},transitionShow:String,transitionHide:String},watch:{seamless(t){!0===this.showing&&this.__preventScroll(!0!==t)}},computed:{classes(){return`q-dialog__inner--${!0===this.maximized?"maximized":"minimized"} `+`q-dialog__inner--${this.position} ${positionClass$1[this.position]}`+(!0===this.fullWidth?" q-dialog__inner--fullwidth":"")+(!0===this.fullHeight?" q-dialog__inner--fullheight":"")+(!0===this.square?" q-dialog__inner--square":"")},transitionProps(){const t=`q-transition--${void 0===this.transitionShow?transitions[this.position][0]:this.transitionShow}`,e=`q-transition--${void 0===this.transitionHide?transitions[this.position][1]:this.transitionHide}`;return{enterClass:`${t}-enter`,leaveClass:`${e}-leave`,appearClass:`${t}-appear`,enterToClass:`${t}-enter-to`,leaveToClass:`${e}-leave-to`,appearToClass:`${t}-appear-to`,enterActiveClass:`${t}-enter-active`,leaveActiveClass:`${e}-leave-active`,appearActiveClass:`${t}-appear-active`}},useBackdrop(){return!0===this.showing&&!0!==this.seamless},hideOnRouteChange(){return!0!==this.persistent&&!0!==this.noRouteDismiss&&!0!==this.seamless},onBackdropEvents(){return{focusin:this.__onBackdropClick}},onInnerEvents(){const t={...this.qListeners,input:stop,"popup-show":stop,"popup-hide":stop};return!0===this.autoClose&&(t.click=this.__onAutoClose),t},onTransitionEvents(){return{"before-enter":this.__onTransitionBeforeEnter,enter:this.__onTransitionEnter,"after-enter":this.__onTransitionAfterEnter,"enter-cancelled":this.__onTransitionEnterCancelled,"before-leave":this.__onTransitionBeforeLeave,"after-leave":this.__onTransitionAfterLeave}},attrs(){return{role:"dialog","aria-modal":!0===this.useBackdrop?"true":"false",...this.qAttrs}}},methods:{shake(t){t&&"function"==typeof t.focus?t.focus():this.__focusFirst(!0),this.$emit("shake");const e=this.__getInnerNode();void 0!==e&&(e.classList.remove("q-animate--scale"),e.classList.add("q-animate--scale"),clearTimeout(this.shakeTimeout),this.shakeTimeout=setTimeout(()=>{e.classList.remove("q-animate--scale")},170))},__show(){this.__addHistory(),this.__refocusTarget=!0===this.$q.platform.is.desktop&&!1===this.noRefocus&&null!==document.activeElement?document.activeElement:void 0,this.$el.dispatchEvent(create("popup-show",{bubbles:!0})),EscapeKey.register(this,()=>{!0!==this.seamless?!0===this.persistent||!0===this.noEscDismiss?!0!==this.maximized&&!0!==this.noShake?this.shake():this.__focusFirst(!0):(this.$emit("escape-key"),this.hide()):this.__focusCyclePortal()}),this.__showPortal()},__hide(){this.__removeHistory(),this.__cleanup(!0),this.$el.dispatchEvent(create("popup-hide",{bubbles:!0}))},__onTransitionBeforeEnter(t){!0===this.$q.platform.is.ios&&t.click(),!0!==this.seamless&&this.__preventScroll(!0),t.setAttribute("data-q-portal-animating",!0)},__onTransitionEnter(){!0!==this.noFocus&&this.focus()},__onTransitionAfterEnter(t){t.removeAttribute("data-q-portal-animating"),this.$emit("show",{target:t})},__onTransitionEnterCancelled(t){t.removeAttribute("data-q-portal-animating"),!0!==this.seamless&&this.__preventScroll(!1)},__onTransitionBeforeLeave(){!0!==this.showing&&(this.__focusCyclePortal(!0),!0!==this.seamless&&(document.documentElement.scrollTop=0))},__onTransitionAfterLeave(t){!0!==this.showing&&(this.__hidePortal(),!0!==this.seamless&&this.__preventScroll(!1),this.$emit("hide",{target:t}))},__onAutoClose(t){this.hide(t),void 0!==this.qListeners.click&&this.$emit("click",t)},__onBackdropClick(t){!0!==this.persistent&&!0!==this.noBackdropDismiss?this.hide(t):!0!==this.noShake&&this.shake(t.relatedTarget)},__cleanup(t){clearTimeout(this.shakeTimeout),!0!==t&&!0!==this.showing||EscapeKey.pop(this)},__renderPortal(t){return t("div",{staticClass:`q-dialog fullscreen no-pointer-events q-dialog--${!0===this.seamless?"seamless":"modal"}`,class:this.contentClass,style:this.contentStyle,attrs:this.attrs},[t("transition",{props:{name:"q-transition--fade"}},!0===this.useBackdrop?[t("div",{staticClass:"q-dialog__backdrop fixed-full",attrs:{...ariaHidden,tabindex:-1},on:this.onBackdropEvents})]:null),t("transition",{props:this.transitionProps,on:this.onTransitionEvents},[!0===this.showing?t("div",{ref:"inner",staticClass:"q-dialog__inner flex no-pointer-events",class:this.classes,attrs:{tabindex:-1},on:this.onInnerEvents},this.__getFocusWrappedContent("default")):null])])}},mounted(){this.__processModelChange(this.value)},beforeDestroy(){this.__cleanup(),this.__preventScroll(!1),this.__refocusTarget=void 0}});const duration=150,mouseEvents=["mouseover","mouseout","mouseenter","mouseleave"];var QDrawer=Vue__default.default.extend({name:"QDrawer",inject:{layout:{default(){console.error("QDrawer needs to be child of QLayout")}}},mixins:[DarkMixin,HistoryMixin,TimeoutMixin,ModelToggleMixin,PreventScrollMixin],directives:{TouchPan:TouchPan},props:{side:{type:String,default:"left",validator:t=>["left","right"].includes(t)},width:{type:Number,default:300},mini:Boolean,miniToOverlay:Boolean,miniWidth:{type:Number,default:57},breakpoint:{type:Number,default:1023},showIfAbove:Boolean,behavior:{type:String,validator:t=>["default","desktop","mobile"].includes(t),default:"default"},bordered:Boolean,elevated:Boolean,contentStyle:[String,Object,Array],contentClass:[String,Object,Array],overlay:Boolean,persistent:Boolean,noSwipeOpen:Boolean,noSwipeClose:Boolean,noSwipeBackdrop:Boolean},data(){const t="mobile"===this.behavior||"desktop"!==this.behavior&&this.layout.totalWidth<=this.breakpoint;return{belowBreakpoint:t,showing:!0===this.showIfAbove&&!1===t||!0===this.value}},watch:{belowBreakpoint(t){!0===t?(this.lastDesktopState=this.showing,!0===this.showing&&this.hide(!1)):!1===this.overlay&&"mobile"!==this.behavior&&!1!==this.lastDesktopState&&(!0===this.showing?(this.__applyPosition(0),this.__applyBackdrop(0),this.__cleanup()):this.show(!1))},"layout.totalWidth"(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),!0!==this.layout.container?this.clearExecuteWhenScrollable=executeWhenScrollable(this.__updateBelowBreakpoint):this.__updateBelowBreakpoint()},side(t,e){this.layout.instances[e]===this&&(this.layout.instances[e]=void 0,this.layout[e].space=!1,this.layout[e].offset=0),this.layout.instances[t]=this,this.layout[t].size=this.size,this.layout[t].space=this.onLayout,this.layout[t].offset=this.offset},behavior(){this.__updateBelowBreakpoint()},breakpoint(){this.__updateBelowBreakpoint()},"layout.container"(t){!0===this.showing&&this.__preventScroll(!0!==t),!0===t&&this.__updateBelowBreakpoint()},"layout.scrollbarWidth"(){this.__applyPosition(!0===this.showing?0:void 0)},offset(t){this.__update("offset",t)},onLayout(t){this.$emit("on-layout",t),this.__update("space",t)},rightSide(){this.__applyPosition()},size(t){this.__applyPosition(),this.__updateSizeOnLayout(this.miniToOverlay,t)},miniToOverlay(t){this.__updateSizeOnLayout(t,this.size)},"$q.lang.rtl"(){this.__applyPosition()},mini(){!0===this.value&&(this.__animateMini(),this.layout.__animate())},isMini(t){this.$emit("mini-state",t)}},computed:{rightSide(){return"right"===this.side},otherSide(){return!0===this.rightSide?"left":"right"},offset(){return!0===this.showing&&!1===this.belowBreakpoint&&!1===this.overlay?!0===this.miniToOverlay?this.miniWidth:this.size:0},size(){return!0===this.isMini?this.miniWidth:this.width},fixed(){return!0===this.overlay||!0===this.miniToOverlay||this.layout.view.indexOf(this.rightSide?"R":"L")>-1||this.$q.platform.is.ios&&!0===this.layout.container},onLayout(){return!0===this.showing&&!1===this.belowBreakpoint&&!1===this.overlay},onScreenOverlay(){return!0===this.showing&&!1===this.belowBreakpoint&&!0===this.overlay},backdropClass(){return!1===this.showing?"no-pointer-events":null},headerSlot(){return!0===this.rightSide?"r"===this.layout.rows.top[2]:"l"===this.layout.rows.top[0]},footerSlot(){return!0===this.rightSide?"r"===this.layout.rows.bottom[2]:"l"===this.layout.rows.bottom[0]},aboveStyle(){const t={};return!0===this.layout.header.space&&!1===this.headerSlot&&(!0===this.fixed?t.top=`${this.layout.header.offset}px`:!0===this.layout.header.space&&(t.top=`${this.layout.header.size}px`)),!0===this.layout.footer.space&&!1===this.footerSlot&&(!0===this.fixed?t.bottom=`${this.layout.footer.offset}px`:!0===this.layout.footer.space&&(t.bottom=`${this.layout.footer.size}px`)),t},style(){const t={width:`${this.size}px`};return!0===this.belowBreakpoint?t:Object.assign(t,this.aboveStyle)},classes(){return`q-drawer--${this.side}`+(!0===this.bordered?" q-drawer--bordered":"")+` q-drawer--${this.darkSuffix} q-${this.darkSuffix}`+(!0!==this.showing?" q-layout--prevent-focus":"")+(!0===this.belowBreakpoint?" fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding":` q-drawer--${!0===this.isMini?"mini":"standard"}`+(!0===this.fixed||!0!==this.onLayout?" fixed":"")+(!0===this.overlay||!0===this.miniToOverlay?" q-drawer--on-top":"")+(!0===this.headerSlot?" q-drawer--top-padding":""))},stateDirection(){return(!0===this.$q.lang.rtl?-1:1)*(!0===this.rightSide?1:-1)},isMini(){return!0===this.mini&&!0!==this.belowBreakpoint},onNativeEvents(){if(!0!==this.belowBreakpoint){const t={"!click":t=>{this.$emit("click",t)}};return mouseEvents.forEach(e=>{t[e]=(t=>{void 0!==this.qListeners[e]&&this.$emit(e,t)})}),t}},onBackdropEvents(){return{click:this.hide,touchmove:stopAndPrevent}},hideOnRouteChange(){return!0!==this.persistent&&(!0===this.belowBreakpoint||!0===this.onScreenOverlay)},onOpenerEvents:()=>({touchstart:stopAndPrevent}),openDirective(){const t=!0===this.$q.lang.rtl?this.side:this.otherSide;return[{name:"touch-pan",value:this.__openByTouch,modifiers:{[t]:!0,mouse:!0,prevent:!0}}]},contentCloseDirective(){if(!0!==this.noSwipeClose){const t=!0===this.$q.lang.rtl?this.otherSide:this.side;return[{name:"touch-pan",value:this.__closeByTouch,modifiers:{[t]:!0,mouse:!0}}]}},backdropCloseDirective(){if(!0!==this.noSwipeBackdrop){const t=!0===this.$q.lang.rtl?this.otherSide:this.side;return[{name:"touch-pan",value:this.__closeByTouch,modifiers:{[t]:!0,mouse:!0,mouseAllDir:!0}}]}}},methods:{__applyPosition(t){void 0===t?this.$nextTick(()=>{t=!0===this.showing?0:this.size,this.__applyPosition(this.stateDirection*t)}):void 0!==this.$refs.content&&(!0!==this.layout.container||!0!==this.rightSide||!0!==this.belowBreakpoint&&Math.abs(t)!==this.size?!0!==this.layout.container&&!0===this.rightSide&&!0===this.belowBreakpoint&&(t+=(!0===this.$q.lang.rtl?-1:1)*this.layout.scrollbarWidth):t+=this.stateDirection*this.layout.scrollbarWidth,this.__lastPosition!==t&&(this.$refs.content.style.transform=`translateX(${t}px)`,this.__lastPosition=t))},__applyBackdrop(t,e){void 0!==this.$refs.backdrop?this.$refs.backdrop.style.opacity=this.lastBackdropOpacity=.4*t:!0!==e&&this.$nextTick(()=>{this.__applyBackdrop(t,!0)})},__setBackdropVisible(t){void 0!==this.$refs.backdrop&&this.$refs.backdrop.classList[!0===t?"remove":"add"]("no-pointer-events")},__setScrollable(t){const e=!0===t?"remove":!0!==this.layout.container?"add":"";""!==e&&document.body.classList[e]("q-body--drawer-toggle")},__animateMini(){void 0!==this.timerMini?clearTimeout(this.timerMini):void 0!==this.$el&&this.$el.classList.add("q-drawer--mini-animate"),this.timerMini=setTimeout(()=>{void 0!==this.$el&&this.$el.classList.remove("q-drawer--mini-animate"),this.timerMini=void 0},150)},__openByTouch(t){if(!1!==this.showing)return;const e=this.size,i=between(t.distance.x,0,e);if(!0===t.isFinal){const t=this.$refs.content,s=i>=Math.min(75,e);return t.classList.remove("no-transition"),void(!0===s?this.show():(this.layout.__animate(),this.__applyBackdrop(0),this.__applyPosition(this.stateDirection*e),t.classList.remove("q-drawer--delimiter"),t.classList.add("q-layout--prevent-focus"),this.__setBackdropVisible(!1)))}if(this.__applyPosition((!0===this.$q.lang.rtl?!0!==this.rightSide:this.rightSide)?Math.max(e-i,0):Math.min(0,i-e)),this.__applyBackdrop(between(i/e,0,1)),!0===t.isFirst){const t=this.$refs.content;t.classList.add("no-transition"),t.classList.add("q-drawer--delimiter"),t.classList.remove("q-layout--prevent-focus"),this.__setBackdropVisible(!0)}},__closeByTouch(t){if(!0!==this.showing)return;const e=this.size,i=t.direction===this.side,s=(!0===this.$q.lang.rtl?!0!==i:i)?between(t.distance.x,0,e):0;if(!0===t.isFinal){const t=Math.abs(s){!1!==t&&this.__setScrollable(!0),!0!==e&&this.$emit("show",t)},150)},__hide(t,e){this.__removeHistory(),!1!==t&&this.layout.__animate(),this.__applyBackdrop(0),this.__applyPosition(this.stateDirection*this.size),this.__setBackdropVisible(!1),this.__cleanup(),!0!==e?this.__registerTimeout(()=>{this.$emit("hide",t)},150):this.__removeTimeout()},__cleanup(){this.__preventScroll(!1),this.__setScrollable(!0)},__update(t,e){this.layout[this.side][t]!==e&&(this.layout[this.side][t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__updateSizeOnLayout(t,e){this.__update("size",!0===t?this.miniWidth:e)},__updateBelowBreakpoint(){this.__updateLocal("belowBreakpoint","mobile"===this.behavior||"desktop"!==this.behavior&&this.layout.totalWidth<=this.breakpoint)}},created(){this.__useTimeout("__registerTimeout","__removeTimeout"),this.layout.instances[this.side]=this,this.__updateSizeOnLayout(this.miniToOverlay,this.size),this.__update("space",this.onLayout),this.__update("offset",this.offset),!0===this.showIfAbove&&!0!==this.value&&!0===this.showing&&void 0!==this.qListeners.input&&this.$emit("input",!0)},mounted(){this.$emit("on-layout",this.onLayout),this.$emit("mini-state",this.isMini),this.lastDesktopState=!0===this.showIfAbove;const t=()=>{this[`__${!0===this.showing?"show":"hide"}`](!1,!0)};0===this.layout.totalWidth?this.watcher=this.$watch("layout.totalWidth",()=>{this.watcher(),this.watcher=void 0,!1===this.showing&&!0===this.showIfAbove&&!1===this.belowBreakpoint?this.show(!1):t()}):this.$nextTick(t)},beforeDestroy(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),void 0!==this.watcher&&this.watcher(),clearTimeout(this.timerMini),!0===this.showing&&this.__cleanup(),this.layout.instances[this.side]===this&&(this.layout.instances[this.side]=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},render(t){const e=[];!0===this.belowBreakpoint&&(!0!==this.noSwipeOpen&&e.push(t("div",{staticClass:`q-drawer__opener fixed-${this.side}`,attrs:ariaHidden,directives:this.openDirective,on:this.onOpenerEvents})),e.push(t("div",{ref:"backdrop",staticClass:"fullscreen q-drawer__backdrop",class:this.backdropClass,attrs:ariaHidden,style:void 0!==this.lastBackdropOpacity?{opacity:this.lastBackdropOpacity}:null,on:this.onBackdropEvents,directives:!1===this.showing?void 0:this.backdropCloseDirective})));const i=[t("div",{staticClass:"q-drawer__content fit "+(!0===this.layout.container?"overflow-auto":"scroll"),class:this.contentClass,style:this.contentStyle},!0===this.isMini&&void 0!==this.$scopedSlots.mini?this.$scopedSlots.mini():slot(this,"default"))];return!0===this.elevated&&!0===this.showing&&i.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(t("aside",{ref:"content",staticClass:"q-drawer",class:this.classes,style:this.style,on:this.onNativeEvents,directives:!0===this.belowBreakpoint?this.contentCloseDirective:void 0},i)),t("div",{staticClass:"q-drawer-container"},e)}});const attrs$3={role:"tooltip"};var QTooltip=Vue__default.default.extend({name:"QTooltip",mixins:[AnchorMixin,TimeoutMixin,ModelToggleMixin,Portal,TransitionMixin],props:{minHeight:{type:String,default:null},minWidth:{type:String,default:null},maxHeight:{type:String,default:null},maxWidth:{type:String,default:null},transitionShow:{default:"jump-down"},transitionHide:{default:"jump-up"},anchor:{type:String,default:"bottom middle",validator:validatePosition},self:{type:String,default:"top middle",validator:validatePosition},offset:{type:Array,default:()=>[14,14],validator:validateOffset},scrollTarget:{default:void 0},delay:{type:Number,default:0},hideDelay:{type:Number,default:0}},computed:{anchorOrigin(){return parsePosition(this.anchor,this.$q.lang.rtl)},selfOrigin(){return parsePosition(this.self,this.$q.lang.rtl)},hideOnRouteChange(){return!0!==this.persistent}},methods:{__show(t){this.__showPortal(),this.__registerTick(()=>{this.updatePosition(),this.__configureScrollTarget()}),void 0===this.unwatch&&(this.unwatch=this.$watch(()=>this.$q.screen.width+"|"+this.$q.screen.height+"|"+this.self+"|"+this.anchor+"|"+this.$q.lang.rtl,this.updatePosition)),this.__registerTimeout(()=>{this.$emit("show",t)},300)},__hide(t){this.__removeTick(),this.__anchorCleanup(),this.__registerTimeout(()=>{!0!==this.showing&&(this.__hidePortal(),this.$emit("hide",t))},300)},__anchorCleanup(){void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0),this.__unconfigureScrollTarget(),cleanEvt(this,"tooltipTemp"),cleanEvt(this,"tooltipPreventMenu"),cleanEvt(this,"anchorTemp")},updatePosition(){if(void 0===this.anchorEl||void 0===this.__portal)return;const t=this.__portal.$el;8!==t.nodeType?(void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),this.settingPosition=requestAnimationFrame(()=>{setPosition({el:t,offset:this.offset,anchorEl:this.anchorEl,anchorOrigin:this.anchorOrigin,selfOrigin:this.selfOrigin,minHeight:this.minHeight,minWidth:this.minWidth,maxHeight:this.maxHeight,maxWidth:this.maxWidth,rtl:this.$q.lang.rtl}),this.settingPosition=void 0})):setTimeout(this.updatePosition,25)},__delayShow(t){if(!0===this.$q.platform.is.mobile){if(this.showing)return;clearSelection(),document.body.classList.add("non-selectable");const t=this.anchorEl;addEvt(this,"tooltipTemp",["touchcancel","touchend","click"].map(e=>[t,e,"__clearPreventContextMenu","passiveCapture"]).concat([[document,"touchstart","__delayHide","passiveCapture"]])),addEvt(this,"tooltipPreventMenu",[[document,"contextmenu","prevent","capture"]])}this.__registerTimeout(()=>{this.show(t)},this.delay)},__delayHide(t){const e=this.__getInnerNode();if(void 0!==e&&t)if("mouseleave"===t.type){if(!0===e.contains(t.relatedTarget))return cleanEvt(this,"anchorTemp"),void addEvt(this,"anchorTemp",[[e,"mouseleave","__delayHide","passive"]])}else if(!0===e.contains(t.target))return;!0===this.$q.platform.is.mobile?(cleanEvt(this,"tooltipTemp"),cleanEvt(this,"tooltipPreventMenu"),clearSelection(),setTimeout(()=>{document.body.classList.remove("non-selectable")},10)):cleanEvt(this,"anchorTemp"),this.__registerTimeout(()=>{this.hide(t)},this.hideDelay)},__clearPreventContextMenu(){cleanEvt(this,"tooltipPreventMenu")},__configureAnchorEl(){if(!0===this.noParentEvent||void 0===this.anchorEl)return;addEvt(this,"anchor",!0===this.$q.platform.is.mobile?[[this.anchorEl,"touchstart","__delayShow","passive"]]:[[this.anchorEl,"mouseenter","__delayShow","passive"],[this.anchorEl,"mouseleave","__delayHide","passive"]])},__unconfigureScrollTarget(){this.__changeScrollEvent()},__configureScrollTarget(){if(!0===this.showing&&(void 0!==this.anchorEl||void 0!==this.scrollTarget)){const t=!0===this.noParentEvent?this.updatePosition:this.hide;this.__changeScrollEvent(t,getScrollTarget(this.anchorEl,this.scrollTarget))}},__renderPortal(t){return t("transition",{props:this.transitionProps},[!0===this.showing?t("div",{staticClass:"q-tooltip__container column no-pointer-events"},[t("div",{ref:"inner",staticClass:"q-tooltip q-tooltip--style scroll all-pointer-events",class:this.contentClass,style:this.contentStyle,attrs:attrs$3},slot(this,"default"))]):null])}},created(){this.__useTick("__registerTick","__removeTick"),this.__useTimeout("__registerTimeout")},mounted(){this.__processModelChange(this.value)},beforeDestroy(){void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition)}});const attrs$2={role:"list"};var QList=Vue__default.default.extend({name:"QList",mixins:[ListenersMixin,DarkMixin],props:{bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean},computed:{classes(){return"q-list"+(!0===this.bordered?" q-list--bordered":"")+(!0===this.dense?" q-list--dense":"")+(!0===this.separator?" q-list--separator":"")+` q-list--${this.darkSuffix}`+(!0===this.padding?" q-list--padding":"")}},render(t){return t("div",{class:this.classes,attrs:attrs$2,on:{...this.qListeners}},slot(this,"default"))}}),QItem=Vue__default.default.extend({name:"QItem",mixins:[DarkMixin,RouterLinkMixin,TagMixin,ListenersMixin],props:{active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},computed:{isActionable(){return!0===this.clickable||!0===this.hasLink||"label"===this.tag},isClickable(){return!0!==this.disable&&!0===this.isActionable},classes(){return"q-item q-item-type row no-wrap"+(!0===this.dense?" q-item--dense":"")+`q-item--${this.darkSuffix}`+(!0===this.hasLink&&null===this.active?this.linkClass:!0===this.active?` q-item--active${void 0!==this.activeClass?` ${this.activeClass}`:""} `:"")+(!0===this.disable?" disabled":"")+(!0===this.isClickable?" q-item--clickable q-link cursor-pointer "+(!0===this.manualFocus?"q-manual-focusable":"q-focusable q-hoverable")+(!0===this.focused?" q-manual-focusable--focused":""):"")},style(){if(void 0!==this.insetLevel){return{["padding"+(!0===this.$q.lang.rtl?"Right":"Left")]:16+56*this.insetLevel+"px"}}},onEvents(){return{...this.qListeners,focus:this.__onFocus,click:this.__onClick,keyup:this.__onKeyup}}},methods:{__onClick(t){!0===this.isClickable&&(this.__refocus(),this.__navigateOnClick(t))},__onFocus(t){!0===this.isClickable&&this.__refocus(),void 0!==this.qListeners.focus&&this.$emit("focus",t)},__onKeyup(t){if(!0===this.isClickable&&!0===isKeyCode(t,13)){stopAndPrevent(t);const e=new MouseEvent("click",t);this.$el.dispatchEvent(e)}this.$emit("keyup",t)},__getContent(t){const e=uniqueSlot(this,"default",[]);return!0===this.isClickable&&e.unshift(t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"})),e},__refocus(){!0===this.$q.interaction.isPointer&&void 0!==this.$refs.blurTarget&&document.activeElement===this.$el?this.$refs.blurTarget.focus():!0===this.$q.interaction.isKeyboard&&document.activeElement===this.$refs.blurTarget&&this.$el.focus()}},render(t){const e={class:this.classes,style:this.style,attrs:{role:"listitem"},on:this.onEvents};return!0===this.isClickable?(e.attrs.tabindex=this.tabindex||"0",Object.assign(e.attrs,this.linkAttrs)):!0===this.isActionable&&(e.attrs["aria-disabled"]="true"),t(this.linkTag,e,this.__getContent(t))}}),QItemSection=Vue__default.default.extend({name:"QItemSection",mixins:[ListenersMixin],props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},computed:{classes(){const t=this.avatar||this.side||this.thumbnail;return{"q-item__section--top":this.top,"q-item__section--avatar":this.avatar,"q-item__section--thumbnail":this.thumbnail,"q-item__section--side":t,"q-item__section--nowrap":this.noWrap,"q-item__section--main":!t,[`justify-${this.top?"start":"center"}`]:!0}}},render(t){return t("div",{staticClass:"q-item__section column",class:this.classes,on:{...this.qListeners}},slot(this,"default"))}});function run(t,e,i){e.handler?e.handler(t,i,i.caret):i.runCmd(e.cmd,e.param)}function __getGroup(t,e){return t("div",{staticClass:"q-editor__toolbar-group"},e)}function getBtn(t,e,i,s,o=!1){const n=o||"toggle"===i.type&&(i.toggled?i.toggled(e):i.cmd&&e.caret.is(i.cmd,i.param)),r=[],a={click(t){s&&s(),run(t,i,e)}};if(i.tip&&e.$q.platform.is.desktop){const e=i.key?t("div",[t("small",`(CTRL + ${String.fromCharCode(i.key)})`)]):null;r.push(t(QTooltip,{props:{delay:1e3}},[t("div",{domProps:{innerHTML:i.tip}}),e]))}return t(QBtn,{props:{...e.buttonProps,icon:null!==i.icon?i.icon:void 0,color:n?i.toggleColor||e.toolbarToggleColor:i.color||e.toolbarColor,textColor:n&&!e.toolbarPush?null:i.textColor||e.toolbarTextColor,label:i.label,disable:!!i.disable&&("function"!=typeof i.disable||i.disable(e)),size:"sm"},on:a},r)}function getDropdown(t,e,i){const s="only-icons"===i.list;let o,n,r=i.label,a=null!==i.icon?i.icon:void 0;function l(){d.componentInstance.hide()}if(s)n=i.options.map(i=>{const s=void 0===i.type&&e.caret.is(i.cmd,i.param);return s&&(r=i.tip,a=null!==i.icon?i.icon:void 0),getBtn(t,e,i,l,s)}),o=e.toolbarBackgroundClass,n=[__getGroup(t,n)];else{const s=void 0!==e.toolbarToggleColor?`text-${e.toolbarToggleColor}`:null,h=void 0!==e.toolbarTextColor?`text-${e.toolbarTextColor}`:null,d="no-icons"===i.list;n=i.options.map(i=>{const o=!!i.disable&&i.disable(e),n=void 0===i.type&&e.caret.is(i.cmd,i.param);n&&(r=i.tip,a=null!==i.icon?i.icon:void 0);const c=i.htmlTip;return t(QItem,{props:{active:n,activeClass:s,clickable:!0,disable:o,dense:!0},on:{click(t){l(),e.$refs.content&&e.$refs.content.focus(),e.caret.restore(),run(t,i,e)}}},[!0===d?null:t(QItemSection,{class:n?s:h,props:{side:!0}},[t(QIcon,{props:{name:null!==i.icon?i.icon:void 0}})]),t(QItemSection,[c?t("div",{staticClass:"text-no-wrap",domProps:{innerHTML:i.htmlTip}}):i.tip?t("div",{staticClass:"text-no-wrap"},[i.tip]):null])])}),o=[e.toolbarBackgroundClass,h],n=[t(QList,[n])]}const h=i.highlight&&r!==i.label,d=t(QBtnDropdown,{props:{...e.buttonProps,noCaps:!0,noWrap:!0,color:h?e.toolbarToggleColor:e.toolbarColor,textColor:h&&!e.toolbarPush?null:e.toolbarTextColor,label:i.fixedLabel?i.label:r,icon:i.fixedIcon?null!==i.icon?i.icon:void 0:a,contentClass:o}},n);return d}function getToolbar(t,e){if(e.caret)return e.buttons.filter(t=>!e.isViewingSource||t.find(t=>"viewsource"===t.cmd)).map(i=>__getGroup(t,i.map(i=>(!e.isViewingSource||"viewsource"===i.cmd)&&("slot"===i.type?slot(e,i.slot):"dropdown"===i.type?getDropdown(t,e,i):getBtn(t,e,i)))))}function getFonts(t,e,i,s={}){const o=Object.keys(s);if(0===o.length)return{};const n={default_font:{cmd:"fontName",param:t,icon:i,tip:e}};return o.forEach(t=>{const e=s[t];n[t]={cmd:"fontName",param:e,icon:i,tip:e,htmlTip:`${e}`}}),n}function getLinkEditor(t,e,i){if(e.caret){const s=e.toolbarColor||e.toolbarTextColor;let o=e.editLinkUrl;const n=()=>{e.caret.restore(),o!==e.editLinkUrl&&document.execCommand("createLink",!1,""===o?" ":o),e.editLinkUrl=null,!0===i&&e.$nextTick(e.__onInput)};return[t("div",{staticClass:"q-mx-xs",class:`text-${s}`},[`${e.$q.lang.editor.url}: `]),t("input",{key:"qedt_btm_input",staticClass:"col q-editor__link-input",domProps:{value:o},on:{input:t=>{stop(t),o=t.target.value},keydown:t=>{if(!0!==shouldIgnoreKey(t))switch(t.keyCode){case 13:return prevent(t),n();case 27:prevent(t),e.caret.restore(),e.editLinkUrl&&"https://"!==e.editLinkUrl||document.execCommand("unlink"),e.editLinkUrl=null}}}}),__getGroup(t,[t(QBtn,{key:"qedt_btm_rem",attrs:{tabindex:-1},props:{...e.buttonProps,label:e.$q.lang.label.remove,noCaps:!0},on:{click:()=>{e.caret.restore(),document.execCommand("unlink"),e.editLinkUrl=null,!0===i&&e.$nextTick(e.__onInput)}}}),t(QBtn,{key:"qedt_btm_upd",props:{...e.buttonProps,label:e.$q.lang.label.update,noCaps:!0},on:{click:n}})])]}}function getBlockElement(t,e){if(e&&t===e)return null;const i=t.nodeName.toLowerCase();if(!0===["div","li","ul","ol","blockquote"].includes(i))return t;const s=(window.getComputedStyle?window.getComputedStyle(t):t.currentStyle).display;return"block"===s||"table"===s?t:getBlockElement(t.parentNode)}function isChildOf(t,e,i){return!(!t||t===document.body)&&(!0===i&&t===e||(e===document?document.body:e).contains(t.parentNode))}function createRange(t,e,i){if(i||((i=document.createRange()).selectNode(t),i.setStart(t,0)),0===e.count)i.setEnd(t,e.count);else if(e.count>0)if(t.nodeType===Node.TEXT_NODE)t.textContent.length0}get range(){const t=this.selection;return null!==t&&t.rangeCount?t.getRangeAt(0):this._range}get parent(){const t=this.range;if(null!==t){const e=t.startContainer;return e.nodeType===document.ELEMENT_NODE?e:e.parentNode}return null}get blockParent(){const t=this.parent;return null!==t?getBlockElement(t,this.el):null}save(t=this.range){null!==t&&(this._range=t)}restore(t=this._range){const e=document.createRange(),i=document.getSelection();null!==t?(e.setStart(t.startContainer,t.startOffset),e.setEnd(t.endContainer,t.endOffset),i.removeAllRanges(),i.addRange(e)):(i.selectAllChildren(this.el),i.collapseToEnd())}savePosition(){let t,e=-1;const i=document.getSelection(),s=this.el.parentNode;if(i.focusNode&&isChildOf(i.focusNode,s))for(t=i.focusNode,e=i.focusOffset;t&&t!==s;)t!==this.el&&t.previousSibling?e+=(t=t.previousSibling).textContent.length:t=t.parentNode;this.savedPos=e}restorePosition(t=0){if(this.savedPos>0&&this.savedPos\n \n \n Print - ${document.title}\n \n \n
${this.el.innerHTML}
\n \n \n `),t.print(),void t.close()}if("link"===t){const t=this.getParentAttribute("href");if(null===t){const t=this.selectWord(this.selection),e=t?t.toString():"";if(!(e.length||this.range&&this.range.cloneContents().querySelector("img")))return;this.vm.editLinkUrl=urlRegex.test(e)?e:"https://",document.execCommand("createLink",!1,this.vm.editLinkUrl),this.save(t.getRangeAt(0))}else this.vm.editLinkUrl=t,this.range.selectNodeContents(this.parent),this.save();return}if("fullscreen"===t)return this.vm.toggleFullscreen(),void i();if("viewsource"===t)return this.vm.isViewingSource=!1===this.vm.isViewingSource,this.vm.__setContent(this.vm.value),void i()}document.execCommand(t,!1,e),i()}selectWord(t){if(null===t||!0!==t.isCollapsed||void 0===t.modify)return t;const e=document.createRange();e.setStart(t.anchorNode,t.anchorOffset),e.setEnd(t.focusNode,t.focusOffset);const i=e.collapsed?["backward","forward"]:["forward","backward"];e.detach();const s=t.focusNode,o=t.focusOffset;return t.collapse(t.anchorNode,t.anchorOffset),t.modify("move",i[0],"character"),t.modify("move",i[1],"word"),t.extend(s,o),t.modify("extend",i[1],"character"),t.modify("extend",i[0],"word"),t}}const toString=Object.prototype.toString,hasOwn=Object.prototype.hasOwnProperty,notPlainObject=new Set(["Boolean","Number","String","Function","Array","Date","RegExp"].map(t=>"[object "+t+"]"));function isPlainObject(t){if(t!==Object(t)||!0===notPlainObject.has(toString.call(t)))return!1;if(t.constructor&&!1===hasOwn.call(t,"constructor")&&!1===hasOwn.call(t.constructor.prototype,"isPrototypeOf"))return!1;let e;for(e in t);return void 0===e||hasOwn.call(t,e)}function extend(){let t,e,i,s,o,n,r=arguments[0]||{},a=1,l=!1;const h=arguments.length;for("boolean"==typeof r&&(l=r,r=arguments[1]||{},a=2),Object(r)!==r&&"function"!=typeof r&&(r={}),h===a&&(r=this,a--);a0===t.length||t.every(t=>t.length),default:()=>[["left","center","right","justify"],["bold","italic","underline","strike"],["undo","redo"]]},toolbarColor:String,toolbarBg:String,toolbarTextColor:String,toolbarToggleColor:{type:String,default:"primary"},toolbarOutline:Boolean,toolbarPush:Boolean,toolbarRounded:Boolean,paragraphTag:{type:String,validator:t=>["div","p"].includes(t),default:"div"},contentStyle:Object,contentClass:[Object,Array,String],square:Boolean,flat:Boolean,dense:Boolean},computed:{editable(){return!this.readonly&&!this.disable},hasToolbar(){return this.toolbar&&this.toolbar.length>0},toolbarBackgroundClass(){if(this.toolbarBg)return`bg-${this.toolbarBg}`},buttonProps(){return{type:"a",flat:!0!==this.toolbarOutline&&!0!==this.toolbarPush,noWrap:!0,outline:this.toolbarOutline,push:this.toolbarPush,rounded:this.toolbarRounded,dense:!0,color:this.toolbarColor,disable:!this.editable,size:"sm"}},buttonDef(){const t=this.$q.lang.editor,e=this.$q.iconSet.editor;return{bold:{cmd:"bold",icon:e.bold,tip:t.bold,key:66},italic:{cmd:"italic",icon:e.italic,tip:t.italic,key:73},strike:{cmd:"strikeThrough",icon:e.strikethrough,tip:t.strikethrough,key:83},underline:{cmd:"underline",icon:e.underline,tip:t.underline,key:85},unordered:{cmd:"insertUnorderedList",icon:e.unorderedList,tip:t.unorderedList},ordered:{cmd:"insertOrderedList",icon:e.orderedList,tip:t.orderedList},subscript:{cmd:"subscript",icon:e.subscript,tip:t.subscript,htmlTip:"x2"},superscript:{cmd:"superscript",icon:e.superscript,tip:t.superscript,htmlTip:"x2"},link:{cmd:"link",disable:t=>t.caret&&!t.caret.can("link"),icon:e.hyperlink,tip:t.hyperlink,key:76},fullscreen:{cmd:"fullscreen",icon:e.toggleFullscreen,tip:t.toggleFullscreen,key:70},viewsource:{cmd:"viewsource",icon:e.viewSource,tip:t.viewSource},quote:{cmd:"formatBlock",param:"BLOCKQUOTE",icon:e.quote,tip:t.quote,key:81},left:{cmd:"justifyLeft",icon:e.left,tip:t.left},center:{cmd:"justifyCenter",icon:e.center,tip:t.center},right:{cmd:"justifyRight",icon:e.right,tip:t.right},justify:{cmd:"justifyFull",icon:e.justify,tip:t.justify},print:{type:"no-state",cmd:"print",icon:e.print,tip:t.print,key:80},outdent:{type:"no-state",disable:t=>t.caret&&!t.caret.can("outdent"),cmd:"outdent",icon:e.outdent,tip:t.outdent},indent:{type:"no-state",disable:t=>t.caret&&!t.caret.can("indent"),cmd:"indent",icon:e.indent,tip:t.indent},removeFormat:{type:"no-state",cmd:"removeFormat",icon:e.removeFormat,tip:t.removeFormat},hr:{type:"no-state",cmd:"insertHorizontalRule",icon:e.hr,tip:t.hr},undo:{type:"no-state",cmd:"undo",icon:e.undo,tip:t.undo,key:90},redo:{type:"no-state",cmd:"redo",icon:e.redo,tip:t.redo,key:89},h1:{cmd:"formatBlock",param:"H1",icon:e.heading1||e.heading,tip:t.heading1,htmlTip:`

${t.heading1}

`},h2:{cmd:"formatBlock",param:"H2",icon:e.heading2||e.heading,tip:t.heading2,htmlTip:`

${t.heading2}

`},h3:{cmd:"formatBlock",param:"H3",icon:e.heading3||e.heading,tip:t.heading3,htmlTip:`

${t.heading3}

`},h4:{cmd:"formatBlock",param:"H4",icon:e.heading4||e.heading,tip:t.heading4,htmlTip:`

${t.heading4}

`},h5:{cmd:"formatBlock",param:"H5",icon:e.heading5||e.heading,tip:t.heading5,htmlTip:`
${t.heading5}
`},h6:{cmd:"formatBlock",param:"H6",icon:e.heading6||e.heading,tip:t.heading6,htmlTip:`
${t.heading6}
`},p:{cmd:"formatBlock",param:this.paragraphTag.toUpperCase(),icon:e.heading,tip:t.paragraph},code:{cmd:"formatBlock",param:"PRE",icon:e.code,htmlTip:`${t.code}`},"size-1":{cmd:"fontSize",param:"1",icon:e.size1||e.size,tip:t.size1,htmlTip:`${t.size1}`},"size-2":{cmd:"fontSize",param:"2",icon:e.size2||e.size,tip:t.size2,htmlTip:`${t.size2}`},"size-3":{cmd:"fontSize",param:"3",icon:e.size3||e.size,tip:t.size3,htmlTip:`${t.size3}`},"size-4":{cmd:"fontSize",param:"4",icon:e.size4||e.size,tip:t.size4,htmlTip:`${t.size4}`},"size-5":{cmd:"fontSize",param:"5",icon:e.size5||e.size,tip:t.size5,htmlTip:`${t.size5}`},"size-6":{cmd:"fontSize",param:"6",icon:e.size6||e.size,tip:t.size6,htmlTip:`${t.size6}`},"size-7":{cmd:"fontSize",param:"7",icon:e.size7||e.size,tip:t.size7,htmlTip:`${t.size7}`}}},buttons(){const t=this.definitions||{},e=this.definitions||this.fonts?extend(!0,{},this.buttonDef,t,getFonts(this.defaultFont,this.$q.lang.editor.defaultFont,this.$q.iconSet.editor.font,this.fonts)):this.buttonDef;return this.toolbar.map(i=>i.map(i=>{if(i.options)return{type:"dropdown",icon:i.icon,label:i.label,size:"sm",dense:!0,fixedLabel:i.fixedLabel,fixedIcon:i.fixedIcon,highlight:i.highlight,list:i.list,options:i.options.map(t=>e[t])};const s=e[i];return s?"no-state"===s.type||t[i]&&(void 0===s.cmd||this.buttonDef[s.cmd]&&"no-state"===this.buttonDef[s.cmd].type)?s:Object.assign({type:"toggle"},s):{type:"slot",slot:i}}))},keys(){const t={},e=e=>{e.key&&(t[e.key]={cmd:e.cmd,param:e.param})};return this.buttons.forEach(t=>{t.forEach(t=>{t.options?t.options.forEach(e):e(t)})}),t},innerStyle(){return this.inFullscreen?this.contentStyle:[{minHeight:this.minHeight,height:this.height,maxHeight:this.maxHeight},this.contentStyle]},classes(){return`q-editor q-editor--${!0===this.isViewingSource?"source":"default"}`+(!0===this.disable?" disabled":"")+(!0===this.inFullscreen?" fullscreen column":"")+(!0===this.square?" q-editor--square no-border-radius":"")+(!0===this.flat?" q-editor--flat":"")+(!0===this.dense?" q-editor--dense":"")+` q-editor--${this.darkSuffix} q-${this.darkSuffix}`},innerClass(){return[this.contentClass,{col:this.inFullscreen,"overflow-auto":this.inFullscreen||this.maxHeight}]},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0},onEditor(){return{focusin:this.__onFocusin,focusout:this.__onFocusout}}},data(){return{lastEmit:this.value,editLinkUrl:null,isViewingSource:!1}},watch:{value(t){this.lastEmit!==t&&(this.lastEmit=t,this.__setContent(t,!0))}},methods:{__onInput(){if(void 0!==this.$refs.content){const t=!0===this.isViewingSource?this.$refs.content.innerText:this.$refs.content.innerHTML;t!==this.value&&(this.lastEmit=t,this.$emit("input",t))}},__onKeydown(t){if(this.$emit("keydown",t),!0!==t.ctrlKey||!0===shouldIgnoreKey(t))return this.refreshToolbar(),void(this.$q.platform.is.ie&&this.$nextTick(this.__onInput));const e=t.keyCode,i=this.keys[e];if(void 0!==i){const{cmd:e,param:s}=i;stopAndPrevent(t),this.runCmd(e,s,!1)}},__onClick(t){this.refreshToolbar(),this.$emit("click",t)},__onBlur(t){if(void 0!==this.$refs.content){const{scrollTop:t,scrollHeight:e}=this.$refs.content;this.__offsetBottom=e-t}!0!==this.$q.platform.is.ie&&this.caret.save(),this.$emit("blur",t)},__onFocus(t){this.$nextTick(()=>{void 0!==this.$refs.content&&void 0!==this.__offsetBottom&&(this.$refs.content.scrollTop=this.$refs.content.scrollHeight-this.__offsetBottom)}),this.$emit("focus",t)},__onFocusin(t){if(!0===this.$el.contains(t.target)&&(null===t.relatedTarget||!0!==this.$el.contains(t.relatedTarget))){const t=`inner${!0===this.isViewingSource?"Text":"HTML"}`;this.caret.restorePosition(this.$refs.content[t].length),this.refreshToolbar()}},__onFocusout(t){!0!==this.$el.contains(t.target)||null!==t.relatedTarget&&!0===this.$el.contains(t.relatedTarget)||(this.caret.savePosition(),this.refreshToolbar())},__onPointerStart(t){this.__offsetBottom=void 0,void 0!==this.qListeners[t.type]&&this.$emit(t.type,t)},__onSelectionchange(){this.caret.save()},runCmd(t,e,i=!0){this.focus(),this.caret.restore(),this.caret.apply(t,e,()=>{this.focus(),this.caret.save(),!0!==this.$q.platform.is.ie&&!0!==this.$q.platform.is.edge||this.$nextTick(this.__onInput),i&&this.refreshToolbar()})},refreshToolbar(){setTimeout(()=>{this.editLinkUrl=null,this.$forceUpdate()},1)},focus(){void 0!==this.$refs.content&&this.$refs.content.focus({preventScroll:!0})},getContentEl(){return this.$refs.content},__setContent(t,e){if(void 0!==this.$refs.content){!0===e&&this.caret.savePosition();const i=`inner${!0===this.isViewingSource?"Text":"HTML"}`;this.$refs.content[i]=t,!0===e&&(this.caret.restorePosition(this.$refs.content[i].length),this.refreshToolbar())}}},created(){!1===isSSR&&(document.execCommand("defaultParagraphSeparator",!1,this.paragraphTag),this.defaultFont=window.getComputedStyle(document.body).fontFamily)},mounted(){this.caret=new Caret(this.$refs.content,this),this.__setContent(this.value),this.refreshToolbar(),document.addEventListener("selectionchange",this.__onSelectionchange)},beforeDestroy(){document.removeEventListener("selectionchange",this.__onSelectionchange)},render(t){let e;if(this.hasToolbar){const i=[t("div",{key:"qedt_top",staticClass:"q-editor__toolbar row no-wrap scroll-x",class:this.toolbarBackgroundClass},getToolbar(t,this))];null!==this.editLinkUrl&&i.push(t("div",{key:"qedt_btm",staticClass:"q-editor__toolbar row no-wrap items-center scroll-x",class:this.toolbarBackgroundClass},getLinkEditor(t,this,this.$q.platform.is.ie))),e=t("div",{key:"toolbar_ctainer",staticClass:"q-editor__toolbars-container relative-position",directives:[KeyGroupNavigation]},i)}const i={...this.qListeners,input:this.__onInput,keydown:this.__onKeydown,click:this.__onClick,blur:this.__onBlur,focus:this.__onFocus,mousedown:this.__onPointerStart,touchstart:this.__onPointerStart};return t("div",{style:{height:!0===this.inFullscreen?"100%":null},class:this.classes,attrs:this.attrs,on:this.onEditor},[e,t("div",{ref:"content",staticClass:"q-editor__content",style:this.innerStyle,class:this.innerClass,attrs:{contenteditable:this.editable,placeholder:this.placeholder},domProps:isSSR?{innerHTML:this.value}:void 0,on:i})])}}),QItemLabel=Vue__default.default.extend({name:"QItemLabel",mixins:[ListenersMixin],props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},computed:{classes(){return{"q-item__label--overline text-overline":this.overline,"q-item__label--caption text-caption":this.caption,"q-item__label--header":this.header,ellipsis:1===parseInt(this.lines,10)}},style(){if(void 0!==this.lines&&parseInt(this.lines,10)>1)return{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":this.lines}}},render(t){return t("div",{staticClass:"q-item__label",style:this.style,class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QSlideTransition=Vue__default.default.extend({name:"QSlideTransition",props:{appear:Boolean,duration:{type:Number,default:300}},methods:{__begin(t,e,i){t.style.overflowY="hidden",void 0!==e&&(t.style.height=`${e}px`),t.style.transition=`height ${this.duration}ms cubic-bezier(.25, .8, .50, 1)`,this.animating=!0,this.done=i},__end(t,e){t.style.overflowY=null,t.style.height=null,t.style.transition=null,this.__cleanup(),e!==this.lastEvent&&this.$emit(e)},__cleanup(){this.done&&this.done(),this.done=null,this.animating=!1,clearTimeout(this.timer),clearTimeout(this.timerFallback),void 0!==this.el&&this.el.removeEventListener("transitionend",this.animListener),this.animListener=null}},beforeDestroy(){this.animating&&this.__cleanup()},render(t){return t("transition",{key:"tr",props:{css:!1,appear:this.appear},on:cache(this,"tr",{enter:(t,e)=>{let i=0;this.el=t,!0===this.animating?(this.__cleanup(),i=t.offsetHeight===t.scrollHeight?0:void 0):this.lastEvent="hide",this.__begin(t,i,e),this.timer=setTimeout(()=>{t.style.height=`${t.scrollHeight}px`,this.animListener=(e=>{Object(e)===e&&e.target!==t||this.__end(t,"show")}),t.addEventListener("transitionend",this.animListener),this.timerFallback=setTimeout(this.animListener,1.1*this.duration)},100)},leave:(t,e)=>{let i;this.el=t,!0===this.animating?this.__cleanup():(this.lastEvent="show",i=t.scrollHeight),this.__begin(t,i,e),this.timer=setTimeout(()=>{t.style.height=0,this.animListener=(e=>{Object(e)===e&&e.target!==t||this.__end(t,"hide")}),t.addEventListener("transitionend",this.animListener),this.timerFallback=setTimeout(this.animListener,1.1*this.duration)},100)}})},slot(this,"default"))}});const insetMap={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},margins={xs:2,sm:4,md:8,lg:16,xl:24};var QSeparator=Vue__default.default.extend({name:"QSeparator",mixins:[DarkMixin,ListenersMixin],props:{spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},computed:{orientation(){return!0===this.vertical?"vertical":"horizontal"},classPrefix(){return` q-separator--${this.orientation}`},insetClass(){return!1!==this.inset?`${this.classPrefix}-${insetMap[this.inset]}`:""},classes(){return`q-separator${this.classPrefix}${this.insetClass}`+(void 0!==this.color?` bg-${this.color}`:"")+` q-separator--${this.darkSuffix}`},style(){const t={};if(void 0!==this.size&&(t[!0===this.vertical?"width":"height"]=this.size),!1!==this.spaced){const e=!0===this.spaced?`${margins.md}px`:this.spaced in margins?`${margins[this.spaced]}px`:this.spaced,i=!0===this.vertical?["Left","Right"]:["Top","Bottom"];t[`margin${i[0]}`]=t[`margin${i[1]}`]=e}return t},attrs(){return{"aria-orientation":this.orientation}}},render(t){return t("hr",{staticClass:"q-separator",class:this.classes,style:this.style,attrs:this.attrs,on:{...this.qListeners}})}});const eventName="q:expansion-item:close",LINK_PROPS=Object.keys(routerLinkProps);var QExpansionItem=Vue__default.default.extend({name:"QExpansionItem",mixins:[DarkMixin,TimeoutMixin,ModelToggleMixin],props:{...routerLinkProps,icon:String,label:String,labelLines:[Number,String],caption:String,captionLines:[Number,String],dense:Boolean,toggleAriaLabel:String,expandIcon:String,expandedIcon:String,expandIconClass:[Array,String,Object],duration:Number,headerInsetLevel:Number,contentInsetLevel:Number,expandSeparator:Boolean,defaultOpened:Boolean,hideExpandIcon:Boolean,expandIconToggle:Boolean,switchToggleSide:Boolean,denseToggle:Boolean,group:String,popup:Boolean,headerStyle:[Array,String,Object],headerClass:[Array,String,Object]},data(){return{showing:void 0!==this.value?this.value:this.defaultOpened}},watch:{showing(t){!0===t&&(!0!==this.shouldRenderContent&&(this.shouldRenderContent=!0),void 0!==this.group&&this.$root.$emit(eventName,this))},group(t,e){void 0!==t&&void 0===e?this.$root.$on(eventName,this.__eventHandler):void 0===t&&void 0!==e&&this.$root.$off(eventName,this.__eventHandler)}},computed:{classes(){return`q-expansion-item--${!0===this.showing?"expanded":"collapsed"}`+` q-expansion-item--${!0===this.popup?"popup":"standard"}`},contentStyle(){if(void 0!==this.contentInsetLevel){return{["padding"+(!0===this.$q.lang.rtl?"Right":"Left")]:56*this.contentInsetLevel+"px"}}},hasLink(){return!0!==this.disable&&(void 0!==this.href||void 0!==this.to&&null!==this.to&&""!==this.to)},linkProps(){const t={};return LINK_PROPS.forEach(e=>{t[e]=this[e]}),t},isClickable(){return!0===this.hasLink||!0!==this.expandIconToggle},expansionIcon(){return void 0!==this.expandedIcon&&!0===this.showing?this.expandedIcon:this.expandIcon||this.$q.iconSet.expansionItem[!0===this.denseToggle?"denseIcon":"icon"]},activeToggleIcon(){return!0!==this.disable&&(!0===this.hasLink||!0===this.expandIconToggle)},headerSlotScope(){return{expanded:!0===this.showing,detailsId:this.targetUid,toggle:this.toggle,show:this.show,hide:this.hide}},toggleAriaAttrs(){const t=void 0!==this.toggleAriaLabel?this.toggleAriaLabel:this.$q.lang.label[!0===this.showing?"collapse":"expand"](this.label);return{role:"button","aria-expanded":!0===this.showing?"true":"false","aria-owns":this.targetUid,"aria-controls":this.targetUid,"aria-label":t}}},methods:{__onHeaderClick(t){!0!==this.hasLink&&this.toggle(t),this.$emit("click",t)},__toggleIconKeyboard(t){13===t.keyCode&&this.__toggleIcon(t)},__toggleIcon(t){!0===this.$q.interaction.isPointer&&void 0!==this.$refs.blurTarget&&document.activeElement!==this.$refs.blurTarget?this.$refs.blurTarget.focus():!0===this.$q.interaction.isKeyboard&&document.activeElement===this.$refs.blurTarget&&this.$refs.blurTarget.parentNode.focus(),this.toggle(t),stopAndPrevent(t)},__eventHandler(t){this!==t&&this.group===t.group&&this.hide()},__getToggleIcon(t){const e={staticClass:`q-focusable relative-position cursor-pointer${!0===this.denseToggle&&!0===this.switchToggleSide?" items-end":""}`,class:this.expandIconClass,props:{side:!0!==this.switchToggleSide,avatar:this.switchToggleSide}},i=[t(QIcon,{staticClass:"q-expansion-item__toggle-icon",class:void 0===this.expandedIcon&&!0===this.showing?"q-expansion-item__toggle-icon--rotated":void 0,props:{name:this.expansionIcon}})];return!0===this.activeToggleIcon&&(Object.assign(e,{key:"inpExt",attrs:{tabindex:0,...this.toggleAriaAttrs},on:cache(this,"inpExt",{click:this.__toggleIcon,keyup:this.__toggleIconKeyboard})}),i.unshift(t("div",{ref:"blurTarget",staticClass:"q-expansion-item__toggle-focus q-icon q-focus-helper q-focus-helper--rounded",attrs:{tabindex:-1}}))),t(QItemSection,e,i)},__getHeader(t){let e;void 0!==this.$scopedSlots.header?e=[].concat(this.$scopedSlots.header(this.headerSlotScope)):(e=[t(QItemSection,[t(QItemLabel,{props:{lines:this.labelLines}},[this.label||""]),this.caption?t(QItemLabel,{props:{lines:this.captionLines,caption:!0}},[this.caption]):null])],this.icon&&e[!0===this.switchToggleSide?"push":"unshift"](t(QItemSection,{props:{side:!0===this.switchToggleSide,avatar:!0!==this.switchToggleSide}},[t(QIcon,{props:{name:this.icon}})]))),!0!==this.disable&&!0!==this.hideExpandIcon&&e[!0===this.switchToggleSide?"unshift":"push"](this.__getToggleIcon(t));const i={ref:"item",style:this.headerStyle,class:this.headerClass,props:{dark:this.dark,disable:this.disable,dense:this.dense,insetLevel:this.headerInsetLevel}};return!0===this.isClickable&&(i.props.clickable=!0,!0===this.hasLink?Object.assign(i.props,this.linkProps):i.attrs=this.toggleAriaAttrs,i.on={...this.qListeners,click:this.__onHeaderClick}),t(QItem,i,e)},__getContent(t){const e=[this.__getHeader(t),t(QSlideTransition,{key:"slide",props:{duration:this.duration},on:cache(this,"slide",{show:()=>{this.$emit("after-show")},hide:()=>{this.$emit("after-hide")}})},[t("div",{staticClass:"q-expansion-item__content relative-position",style:this.contentStyle,attrs:{id:this.targetUid},directives:[{name:"show",value:this.showing}]},!0===this.shouldRenderContent?slot(this,"default"):void 0)])];return this.expandSeparator&&e.push(t(QSeparator,{staticClass:"q-expansion-item__border q-expansion-item__border--top absolute-top",props:{dark:this.dark}}),t(QSeparator,{staticClass:"q-expansion-item__border q-expansion-item__border--bottom absolute-bottom",props:{dark:this.dark}})),e}},render(t){return t("div",{staticClass:"q-expansion-item q-item-type",class:this.classes},[t("div",{staticClass:"q-expansion-item__container relative-position"},this.__getContent(t))])},created(){this.shouldRenderContent=!0===this.showing,void 0!==this.group&&this.$root.$on(eventName,this.__eventHandler),this.targetUid=`e_${uid$3()}`},beforeDestroy(){void 0!==this.group&&this.$root.$off(eventName,this.__eventHandler)}});const labelPositions=["top","right","bottom","left"];var FabMixin={mixins:[ListenersMixin],props:{type:{type:String,default:"a"},outline:Boolean,push:Boolean,flat:Boolean,unelevated:Boolean,color:String,textColor:String,glossy:Boolean,square:Boolean,padding:String,label:{type:[String,Number],default:""},labelPosition:{type:String,default:"right",validator:t=>labelPositions.includes(t)},externalLabel:Boolean,hideLabel:{type:Boolean},labelClass:[Array,String,Object],labelStyle:[Array,String,Object],disable:Boolean,tabindex:[Number,String]},computed:{formClass(){return`q-fab--form-${!0===this.square?"square":"rounded"}`},stacked(){return!1===this.externalLabel&&["top","bottom"].includes(this.labelPosition)},labelProps(){if(!0===this.externalLabel){const t=null===this.hideLabel?!1===this.showing:this.hideLabel;return{action:"push",data:{staticClass:"q-fab__label q-tooltip--style q-fab__label--external"+` q-fab__label--external-${this.labelPosition}`+(!0===t?" q-fab__label--external-hidden":""),style:this.labelStyle,class:this.labelClass}}}return{action:["left","top"].includes(this.labelPosition)?"unshift":"push",data:{staticClass:`q-fab__label q-fab__label--internal q-fab__label--internal-${this.labelPosition}`+(!0===this.hideLabel?" q-fab__label--internal-hidden":""),style:this.labelStyle,class:this.labelClass}}}}};const directions=["up","right","down","left"],alignValues=["left","center","right"];var QFab=Vue__default.default.extend({name:"QFab",inheritAttrs:!1,mixins:[FabMixin,AttrsMixin,ModelToggleMixin],provide(){return{__qFab:this}},props:{icon:String,activeIcon:String,hideIcon:Boolean,hideLabel:{default:null},direction:{type:String,default:"right",validator:t=>directions.includes(t)},persistent:Boolean,verticalActionsAlign:{type:String,default:"center",validator:t=>alignValues.includes(t)}},data(){return{showing:!0===this.value}},computed:{hideOnRouteChange(){return!0!==this.persistent},classes(){return`q-fab--align-${this.verticalActionsAlign} ${this.formClass}`+(!0===this.showing?" q-fab--opened":"")},actionsClasses(){return`q-fab__actions--${this.direction}`+(!0===this.showing?" q-fab__actions--opened":"")},actionsAttrs(){const t={id:this.targetUid};return!0===this.showing?t.role="menu":t["aria-hidden"]="true",t},iconHolderClasses(){return!0===this.showing?"q-fab__icon-holder--opened":""},attrs(){return{"aria-expanded":!0===this.showing?"true":"false","aria-haspopup":"true","aria-controls":this.targetUid,"aria-owns":this.targetUid,...this.qAttrs}},slotScope(){return{opened:this.showing}}},methods:{__onChildClick(t){this.hide(t),this.$refs.trigger&&this.$refs.trigger.$el&&this.$refs.trigger.$el.focus()},__getIcon(t,e,i){const s=this.$scopedSlots[e],o=`q-fab__${e} absolute-full`;return void 0===s?t(QIcon,{staticClass:o,props:{name:this[i]||this.$q.iconSet.fab[i]}}):t("div",{staticClass:o},s(this.slotScope))}},render(t){const e=[];return!0!==this.hideIcon&&e.push(t("div",{staticClass:"q-fab__icon-holder",class:this.iconHolderClasses},[this.__getIcon(t,"icon","icon"),this.__getIcon(t,"active-icon","activeIcon")])),""===this.label&&void 0===this.$scopedSlots.label||e[this.labelProps.action](t("div",this.labelProps.data,void 0!==this.$scopedSlots.label?this.$scopedSlots.label(this.slotScope):[this.label])),t("div",{staticClass:"q-fab z-fab row inline justify-center",class:this.classes,on:{...this.qListeners}},[t(QBtn,{key:"tog",ref:"trigger",class:this.formClass,props:{...this.$props,noWrap:!0,stack:this.stacked,align:void 0,icon:void 0,label:void 0,noCaps:!0,fab:!0},attrs:this.attrs,on:cache(this,"tog",{click:this.toggle})},mergeSlot(e,this,"tooltip")),t("div",{staticClass:"q-fab__actions flex no-wrap inline",class:this.actionsClasses,attrs:this.actionsAttrs},slot(this,"default"))])},created(){this.targetUid=`fb_${uid$3()}`}});const anchorMap={start:"self-end",center:"self-center",end:"self-start"},anchorValues=Object.keys(anchorMap);var QFabAction=Vue__default.default.extend({name:"QFabAction",mixins:[FabMixin],props:{icon:{type:String,default:""},anchor:{type:String,validator:t=>anchorValues.includes(t)},to:[String,Object],replace:Boolean},inject:{__qFab:{default:()=>({showing:!0,__onChildClick:noop})}},computed:{classes(){const t=anchorMap[this.anchor];return this.formClass+(void 0!==t?` ${t}`:"")},onEvents(){return{...this.qListeners,click:this.click}},isDisabled(){return!0!==this.__qFab.showing||!0===this.disable}},methods:{click(t){this.__qFab.__onChildClick(t),this.$emit("click",t)}},render(t){const e=[];return void 0!==this.$scopedSlots.icon?e.push(this.$scopedSlots.icon()):""!==this.icon&&e.push(t(QIcon,{props:{name:this.icon}})),""===this.label&&void 0===this.$scopedSlots.label||e[this.labelProps.action](t("div",this.labelProps.data,void 0!==this.$scopedSlots.label?this.$scopedSlots.label():[this.label])),t(QBtn,{class:this.classes,props:{...this.$props,noWrap:!0,stack:this.stacked,icon:void 0,label:void 0,noCaps:!0,fabMini:!0,disable:this.isDisabled},on:this.onEvents},mergeSlot(e,this,"default"))}});const lazyRulesValues=[!0,!1,"ondemand"];var ValidateMixin={props:{value:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],validator:t=>lazyRulesValues.includes(t)}},data:()=>({isDirty:null,innerError:!1,innerErrorMessage:void 0}),watch:{value(){this.__validateIfNeeded()},disable(t){!0===t?this.__resetValidation():this.__validateIfNeeded(!0)},reactiveRules:{handler(t){!0===t?void 0===this.unwatchRules&&(this.unwatchRules=this.$watch("rules",()=>{this.__validateIfNeeded(!0)})):void 0!==this.unwatchRules&&(this.unwatchRules(),this.unwatchRules=void 0)},immediate:!0},focused(t){!0===t?null===this.isDirty&&(this.isDirty=!1):!1===this.isDirty&&(this.isDirty=!0,!0===this.hasActiveRules&&"ondemand"!==this.lazyRules&&!1===this.innerLoading&&this.debouncedValidate())},hasError(t){const e=document.getElementById(this.targetUid);null!==e&&e.setAttribute("aria-invalid",!0===t)}},computed:{hasRules(){return void 0!==this.rules&&null!==this.rules&&this.rules.length>0},hasActiveRules(){return!0!==this.disable&&!0===this.hasRules},hasError(){return!0===this.error||!0===this.innerError},computedErrorMessage(){return"string"==typeof this.errorMessage&&this.errorMessage.length>0?this.errorMessage:this.innerErrorMessage}},created(){this.debouncedValidate=debounce(this.validate,0)},mounted(){this.validateIndex=0},beforeDestroy(){void 0!==this.unwatchRules&&this.unwatchRules(),this.debouncedValidate.cancel()},methods:{resetValidation(){this.isDirty=null,this.__resetValidation()},validate(t=this.value){if(!0!==this.hasActiveRules)return!0;const e=++this.validateIndex,i=!0!==this.innerLoading?()=>!0!==this.isDirty&&(this.isDirty=!0):()=>{},s=(t,e)=>{!0===t&&i(),this.innerError!==t&&(this.innerError=t);const s=e||void 0;this.innerErrorMessage!==s&&(this.innerErrorMessage=s),!1!==this.innerLoading&&(this.innerLoading=!1)},o=[];for(let e=0;e{if(void 0===t||!1===Array.isArray(t)||0===t.length)return e===this.validateIndex&&s(!1),!0;const i=t.find(t=>!1===t||"string"==typeof t);return e===this.validateIndex&&s(void 0!==i,i),void 0===i},t=>(e===this.validateIndex&&(console.error(t),s(!0)),!1)))},__resetValidation(){this.debouncedValidate.cancel(),this.validateIndex++,this.innerLoading=!1,this.innerError=!1,this.innerErrorMessage=void 0},__validateIfNeeded(t){!0===this.hasActiveRules&&"ondemand"!==this.lazyRules&&(!0===this.isDirty||!0!==this.lazyRules&&!0!==t)&&this.debouncedValidate()}}};function getTargetUid(t){return void 0===t?`f_${uid$3()}`:t}const parentStyles=new WeakMap;var QField=Vue__default.default.extend({name:"QField",mixins:[DarkMixin,ValidateMixin,AttrsMixin],inheritAttrs:!1,props:{label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,outlinedMd:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String,maxlength:[Number,String],maxValues:[Number,String]},data(){return{focused:!1,targetUid:getTargetUid(this.for),innerLoading:!1}},watch:{for(t){this.targetUid=getTargetUid(t)}},computed:{editable(){return!0!==this.disable&&!0!==this.readonly},hasValue(){const t=void 0===this.__getControl?this.value:this.innerValue;return void 0!==t&&null!==t&&(""+t).length>0},computedCounter(){if(!1!==this.counter){const t="string"==typeof this.value||"number"==typeof this.value?(""+this.value).length:!0===Array.isArray(this.value)?this.value.length:0,e=void 0!==this.maxlength?this.maxlength:this.maxValues;return t+(void 0!==e?" / "+e:"")}},floatingLabel(){return!0===this.stackLabel||!0===this.focused||"number"==typeof this.inputValue||"string"==typeof this.inputValue&&this.inputValue.length>0||!0!==this.hideSelected&&!0===this.hasValue||void 0!==this.displayValue&&null!==this.displayValue&&(""+this.displayValue).length>0},shouldRenderBottom(){return!0===this.bottomSlots||void 0!==this.hint||!0===this.hasRules||!0===this.counter||null!==this.error},classes(){const t="outlined"===this.styleType&&!0===this.outlinedMd?"md":"std";return{[this.fieldClass]:void 0!==this.fieldClass,[`q-field--${this.styleType}`]:!0,[`q-field--outlined--${t}`]:"outlined"===this.styleType,"q-field--rounded":this.rounded,"q-field--square":this.square,"q-field--focused":!0===this.focused,"q-field--highlighted":!0===this.focused||!0===this.hasError,"q-field--float":this.floatingLabel,"q-field--labeled":this.hasLabel,[`q-field--labeled--${t}`]:this.hasLabel,"q-field--dense":this.dense,"q-field--item-aligned q-item-type":this.itemAligned,[`q-field--${this.darkSuffix}`]:!0,"q-field--auto-height":void 0===this.__getControl,"q-field--with-bottom":!0!==this.hideBottomSpace&&!0===this.shouldRenderBottom,"q-field--error":this.hasError,"q-field--readonly":!0===this.readonly&&!0!==this.disable,"q-field--disabled":!0===this.disable}},styleType(){return!0===this.filled?"filled":!0===this.outlined||!0===this.outlinedMd?"outlined":!0===this.borderless?"borderless":this.standout?"standout":"standard"},contentClass(){const t=[];if(!0===this.hasError)t.push("text-negative");else{if("string"==typeof this.standout&&this.standout.length>0&&!0===this.focused)return this.standout;void 0!==this.color&&t.push("text-"+this.color)}return void 0!==this.bgColor&&t.push(`bg-${this.bgColor}`),t},hasLabel(){return!0===this.labelSlot||void 0!==this.label},labelClass(){if(void 0!==this.labelColor&&!0!==this.hasError)return"text-"+this.labelColor},controlSlotScope(){return{id:this.targetUid,field:this.$el,editable:this.editable,focused:this.focused,floatingLabel:this.floatingLabel,value:this.value,emitValue:this.__emitValue}},bottomSlotScope(){return{id:this.targetUid,field:this.$el,editable:this.editable,focused:this.focused,value:this.value,errorMessage:this.computedErrorMessage}},attrs(){const t={for:this.targetUid};return!0===this.disable?t["aria-disabled"]="true":!0===this.readonly&&(t["aria-readonly"]="true"),t}},methods:{focus(){this.__focus()},blur(){const t=document.activeElement;null!==t&&this.$el.contains(t)&&t.blur()},__focus(){const t=document.activeElement;let e=this.$refs.target;void 0===e||null!==t&&t.id===this.targetUid||(!0===e.hasAttribute("tabindex")||(e=e.querySelector("[tabindex]")),null!==e&&managedFocus(e))},__getContent(t){const e=[];return void 0!==this.$scopedSlots.prepend&&e.push(t("div",{staticClass:"q-field__prepend q-field__marginal row no-wrap items-center",key:"prepend",on:this.slotsEvents},this.$scopedSlots.prepend())),e.push(t("div",{staticClass:"q-field__control-container col relative-position row no-wrap q-anchor--skip"},this.__getControlContainer(t))),!0===this.hasError&&!1===this.noErrorIcon&&e.push(this.__getInnerAppendNode(t,"error",[t(QIcon,{props:{name:this.$q.iconSet.field.error,color:"negative"}})])),!0===this.loading||!0===this.innerLoading?e.push(this.__getInnerAppendNode(t,"inner-loading-append",void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():[t(QSpinner,{props:{color:this.color}})])):!0===this.clearable&&!0===this.hasValue&&!0===this.editable&&e.push(this.__getInnerAppendNode(t,"inner-clearable-append",[t(QIcon,{staticClass:"q-field__focusable-action",props:{tag:"button",name:this.clearIcon||this.$q.iconSet.field.clear},attrs:iconAsButton,on:this.clearableEvents})])),void 0!==this.$scopedSlots.append&&e.push(t("div",{staticClass:"q-field__append q-field__marginal row no-wrap items-center",key:"append",on:this.slotsEvents},this.$scopedSlots.append())),void 0!==this.__getInnerAppend&&e.push(this.__getInnerAppendNode(t,"inner-append",this.__getInnerAppend(t))),void 0!==this.__getControlChild&&e.push(this.__getControlChild(t)),e},__getControlContainer(t){const e=[];void 0!==this.prefix&&null!==this.prefix&&e.push(t("div",{staticClass:"q-field__prefix no-pointer-events row items-center"},[this.prefix])),!0===this.hasShadow&&void 0!==this.__getShadowControl&&e.push(this.__getShadowControl(t)),void 0!==this.__getControl?e.push(this.__getControl(t)):void 0!==this.$scopedSlots.rawControl?e.push(this.$scopedSlots.rawControl()):void 0!==this.$scopedSlots.control&&e.push(t("div",{ref:"target",staticClass:"q-field__native row",attrs:{tabindex:-1,...this.qAttrs,"data-autofocus":this.autofocus||void 0}},this.$scopedSlots.control(this.controlSlotScope)));const i=[slot(this,"label",this.label)];return!0===this.outlinedMd&&i.unshift(t("div",{staticClass:"q-field__label-back",style:{backgroundColor:this.__getBgColor()}})),!0===this.hasLabel&&e.push(t("div",{staticClass:"q-field__label no-pointer-events absolute ellipsis",class:this.labelClass},i)),void 0!==this.suffix&&null!==this.suffix&&e.push(t("div",{staticClass:"q-field__suffix no-pointer-events row items-center"},[this.suffix])),e.concat(void 0!==this.__getDefaultSlot?this.__getDefaultSlot(t):slot(this,"default"))},__getBottom(t){let e,i;!0===this.hasError?(i="q--slot-error",void 0!==this.$scopedSlots.error?e=this.$scopedSlots.error(this.bottomSlotScope):void 0!==this.computedErrorMessage&&(e=[t("div",{attrs:{role:"alert"}},[this.computedErrorMessage])],i=this.computedErrorMessage)):!0===this.hideHint&&!0!==this.focused||(i="q--slot-hint",void 0!==this.$scopedSlots.hint?e=this.$scopedSlots.hint(this.bottomSlotScope):void 0!==this.hint&&(e=[t("div",[this.hint])],i=this.hint));const s=!0===this.counter||void 0!==this.$scopedSlots.counter;if(!0===this.hideBottomSpace&&!1===s&&void 0===e)return;const o=t("div",{key:i,staticClass:"q-field__messages col"},e);return t("div",{staticClass:"q-field__bottom row items-start q-field__bottom--"+(!0!==this.hideBottomSpace?"animated":"stale"),on:{click:prevent}},[!0===this.hideBottomSpace?o:t("transition",{props:{name:"q-transition--field-message"}},[o]),!0===s?t("div",{staticClass:"q-field__counter"},void 0!==this.$scopedSlots.counter?this.$scopedSlots.counter():[this.computedCounter]):null])},__getInnerAppendNode:(t,e,i)=>null===i?null:t("div",{staticClass:"q-field__append q-field__marginal row no-wrap items-center q-anchor--skip",key:e},i),__onControlPopupShow(t){void 0!==t&&stop(t),this.$emit("popup-show",t),this.hasPopupOpen=!0,this.__onControlFocusin(t)},__onControlPopupHide(t){void 0!==t&&stop(t),this.$emit("popup-hide",t),this.hasPopupOpen=!1,this.__onControlFocusout(t)},__onControlFocusin(t){clearTimeout(this.focusoutTimer),!0===this.editable&&!1===this.focused&&(this.focused=!0,this.$emit("focus",t))},__onControlFocusout(t,e){clearTimeout(this.focusoutTimer),this.focusoutTimer=setTimeout(()=>{(!0!==document.hasFocus()||!0!==this.hasPopupOpen&&void 0!==this.$refs&&void 0!==this.$refs.control&&!1===this.$refs.control.contains(document.activeElement))&&(!0===this.focused&&(this.focused=!1,this.$emit("blur",t)),void 0!==e&&e())})},__clearValue(t){if(stopAndPrevent(t),!0!==this.$q.platform.is.mobile){(this.$refs.target||this.$el).focus()}else!0===this.$el.contains(document.activeElement)&&document.activeElement.blur();"file"===this.type&&(this.$refs.input.value=null),this.$emit("input",null),this.$emit("clear",this.value),this.$nextTick(()=>{this.resetValidation(),!0!==this.$q.platform.is.mobile&&(this.isDirty=!1)})},__emitValue(t){this.$emit("input",t)},__getBgColor(){let t,e;for(let i=this.parents.length-1;i>=0;i--)if(t=this.parents[i],parentStyles.has(t)&&"rgba(0, 0, 0, 0)"!==(e=parentStyles.get(t).backgroundColor)&&"transparent"!==e)return e}},render(t){void 0!==this.__onPreRender&&this.__onPreRender();const e=void 0===this.__getControl&&void 0===this.$scopedSlots.control?{...this.qAttrs,"data-autofocus":this.autofocus||void 0,...this.attrs}:this.attrs;return t("label",{staticClass:"q-field q-validation-component row no-wrap items-start q-key-group-navigation--ignore-key",class:this.classes,attrs:e},[void 0!==this.$scopedSlots.before?t("div",{staticClass:"q-field__before q-field__marginal row no-wrap items-center",on:this.slotsEvents},this.$scopedSlots.before()):null,t("div",{staticClass:"q-field__inner relative-position col self-stretch"},[t("div",{ref:"control",staticClass:"q-field__control relative-position row no-wrap",class:this.contentClass,attrs:{tabindex:-1},on:this.controlEvents},this.__getContent(t)),!0===this.shouldRenderBottom?this.__getBottom(t):null]),void 0!==this.$scopedSlots.after?t("div",{staticClass:"q-field__after q-field__marginal row no-wrap items-center",on:this.slotsEvents},this.$scopedSlots.after()):null])},created(){void 0!==this.__onPreRender&&this.__onPreRender(),this.slotsEvents={click:prevent},this.clearableEvents={click:this.__clearValue},this.controlEvents=void 0!==this.__getControlEvents?this.__getControlEvents():{focusin:this.__onControlFocusin,focusout:this.__onControlFocusout,"popup-show":this.__onControlPopupShow,"popup-hide":this.__onControlPopupHide},this.parents=[]},mounted(){!0===fromSSR&&void 0===this.for&&(this.targetUid=getTargetUid()),!0===this.autofocus&&this.focus(),this.$nextTick(()=>{let t=this.$refs.control;for(;t;)!0!==parentStyles.has(t)&&parentStyles.set(t,window.getComputedStyle(t)),this.parents.unshift(t),t=t.parentElement;!0===this.outlinedMd&&this.parents.length>0&&this.$forceUpdate()})},activated(){!0===this.shouldActivate&&!0===this.autofocus&&this.focus()},deactivated(){this.shouldActivate=!0},beforeDestroy(){clearTimeout(this.focusoutTimer),this.parents=[]}});function filterFiles(t,e,i,s){const o=[];return t.forEach(t=>{!0===s(t)?o.push(t):e.push({failedPropValidation:i,file:t})}),o}function stopAndPreventDrag(t){t&&t.dataTransfer&&(t.dataTransfer.dropEffect="copy"),stopAndPrevent(t)}var FileMixin={props:{multiple:Boolean,accept:String,capture:String,maxFileSize:[Number,String],maxTotalSize:[Number,String],maxFiles:[Number,String],filter:Function},computed:{extensions(){if(void 0!==this.accept)return this.accept.split(",").map(t=>"*"===(t=t.trim())?"*/":(t.endsWith("/*")&&(t=t.slice(0,t.length-1)),t.toUpperCase()))},maxFilesNumber(){return parseInt(this.maxFiles,10)},maxTotalSizeNumber(){return parseInt(this.maxTotalSize,10)}},methods:{pickFiles(t){if(!0===this.editable)if(t!==Object(t)&&(t={target:null}),null!==t.target&&!0===t.target.matches('input[type="file"]'))0===t.clientX&&0===t.clientY&&stop(t);else{const e=this.__getFileInput();e&&e!==t.target&&e.click(t)}},addFiles(t){this.editable&&t&&this.__addFiles(null,t)},__processFiles(t,e,i,s){let o=Array.from(e||t.target.files);const n=[],r=()=>{n.length>0&&this.$emit("rejected",n)};if(void 0!==this.accept&&-1===this.extensions.indexOf("*/")&&0===(o=filterFiles(o,n,"accept",t=>this.extensions.some(e=>t.type.toUpperCase().startsWith(e)||t.name.toUpperCase().endsWith(e)))).length)return r();if(void 0!==this.maxFileSize){const t=parseInt(this.maxFileSize,10);if(0===(o=filterFiles(o,n,"max-file-size",e=>e.size<=t)).length)return r()}if(!0!==this.multiple&&o.length>0&&(o=[o[0]]),o.forEach(t=>{t.__key=t.webkitRelativePath+t.lastModified+t.name+t.size}),!0===s){const t=i.map(t=>t.__key);o=filterFiles(o,n,"duplicate",e=>!1===t.includes(e.__key))}if(0===o.length)return r();if(void 0!==this.maxTotalSize){let t=!0===s?i.reduce((t,e)=>t+e.size,0):0;if(0===(o=filterFiles(o,n,"max-total-size",e=>(t+=e.size)<=this.maxTotalSizeNumber)).length)return r()}if("function"==typeof this.filter){const t=this.filter(o);o=filterFiles(o,n,"filter",e=>t.includes(e))}if(void 0!==this.maxFiles){let t=!0===s?i.length:0;if(0===(o=filterFiles(o,n,"max-files",()=>++t<=this.maxFilesNumber)).length)return r()}return r(),o.length>0?o:void 0},__onDragOver(t){stopAndPreventDrag(t),!0!==this.dnd&&(this.dnd=!0)},__onDragLeave(t){stopAndPrevent(t),!0===(null!==t.relatedTarget||!0!==Platform.is.safari?t.relatedTarget!==this.$refs.dnd:!1===document.elementsFromPoint(t.clientX,t.clientY).includes(this.$refs.dnd))&&(this.dnd=!1)},__onDrop(t){stopAndPreventDrag(t);const e=t.dataTransfer.files;e.length>0&&this.__addFiles(null,e),this.dnd=!1},__getDnd(t,e){if(!0===this.dnd)return t("div",{key:"dnd",staticClass:`q-${e}__dnd absolute-full`,ref:"dnd",on:cache(this,"dnd",{dragenter:stopAndPreventDrag,dragover:stopAndPreventDrag,dragleave:this.__onDragLeave,drop:this.__onDrop})})}}};const FileValueMixin={computed:{formDomProps(){if("file"===this.type)try{const t="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(this.value)===this.value&&("length"in this.value?Array.from(this.value):[this.value]).forEach(e=>{t.items.add(e)}),{files:t.files}}catch(t){return{files:void 0}}}}};var QFile=Vue__default.default.extend({name:"QFile",mixins:[QField,FileMixin,FormFieldMixin,FileValueMixin],props:{value:!0===isSSR?{}:[File,FileList,Array],append:Boolean,useChips:Boolean,displayValue:[String,Number],tabindex:{type:[String,Number],default:0},counterLabel:Function,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},data:()=>({dnd:!1}),computed:{innerValue(){return Object(this.value)===this.value?"length"in this.value?Array.from(this.value):[this.value]:[]},selectedString(){return this.innerValue.map(t=>t.name).join(", ")},totalSize(){return humanStorageSize(this.innerValue.reduce((t,e)=>t+e.size,0))},counterProps(){return{totalSize:this.totalSize,filesNumber:this.innerValue.length,maxFiles:this.maxFiles}},computedCounter(){if(void 0!==this.counterLabel)return this.counterLabel(this.counterProps);const t=this.maxFiles;return`${this.innerValue.length}${void 0!==t?" / "+t:""} (${this.totalSize})`},inputAttrs(){return{tabindex:-1,type:"file",title:"",accept:this.accept,capture:this.capture,name:this.nameProp,...this.qAttrs,id:this.targetUid,disabled:!0!==this.editable}},isAppending(){return!0===this.multiple&&!0===this.append},fieldClass(){return"q-file q-field--auto-height"+(!0===this.dnd?" q-file--dnd":"")}},methods:{removeAtIndex(t){const e=this.innerValue.slice();e.splice(t,1),this.__emitValue(e)},removeFile(t){const e=this.innerValue.findIndex(t);e>-1&&this.removeAtIndex(e)},__emitValue(t){this.$emit("input",!0===this.multiple?t:t[0])},__onKeydown(t){13===t.keyCode&&prevent(t)},__onKeyup(t){13!==t.keyCode&&32!==t.keyCode||this.pickFiles(t)},__getFileInput(){return this.$refs.input},__addFiles(t,e){const i=this.__processFiles(t,e,this.innerValue,this.isAppending),s=this.__getFileInput();void 0!==s&&(s.value=""),void 0!==i&&((!0===this.multiple?this.value&&i.every(t=>this.innerValue.includes(t)):this.value===i[0])||this.__emitValue(!0===this.isAppending?this.innerValue.concat(i):i))},__getControl(t){const e={key:"target",ref:"target",staticClass:"q-field__native row items-center cursor-pointer",attrs:{tabindex:this.tabindex}};return!0===this.editable&&(e.on=cache(this,"native",{dragover:this.__onDragOver,dragleave:this.__onDragLeave,keydown:this.__onKeydown,keyup:this.__onKeyup})),t("div",e,[this.__getInput(t)].concat(this.__getSelection(t)))},__getControlChild(t){return this.__getDnd(t,"file")},__getFiller(t){return[t("input",{class:[this.inputClass,"q-file__filler"],style:this.inputStyle})]},__getSelection(t){if(void 0!==this.$scopedSlots.file)return 0===this.innerValue.length?this.__getFiller(t):this.innerValue.map((t,e)=>this.$scopedSlots.file({index:e,file:t,ref:this}));if(void 0!==this.$scopedSlots.selected)return 0===this.innerValue.length?this.__getFiller(t):this.$scopedSlots.selected({files:this.innerValue,ref:this});if(!0===this.useChips)return 0===this.innerValue.length?this.__getFiller(t):this.innerValue.map((e,i)=>t(QChip,{key:"rem#"+i,props:{removable:this.editable,dense:!0,textColor:this.color,tabindex:this.tabindex},on:cache(this,"rem#"+i,{remove:()=>{this.removeAtIndex(i)}})},[t("span",{staticClass:"ellipsis",domProps:{textContent:e.name}})]));const e=void 0!==this.displayValue?this.displayValue:this.selectedString;return e.length>0?[t("div",{style:this.inputStyle,class:this.inputClass,domProps:{textContent:e}})]:this.__getFiller(t)},__getInput(t){const e={key:"input",ref:"input",staticClass:"q-field__input fit absolute-full cursor-pointer",attrs:this.inputAttrs,domProps:this.formDomProps,on:cache(this,"input",{change:this.__addFiles})};return!0===this.multiple&&(e.attrs.multiple=!0),t("input",e)}},created(){this.type="file"}}),QFooter=Vue__default.default.extend({name:"QFooter",mixins:[ListenersMixin],inject:{layout:{default(){console.error("QFooter needs to be child of QLayout")}}},props:{value:{type:Boolean,default:!0},reveal:Boolean,bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},data(){return{size:parseInt(this.heightHint,10),revealed:!0,windowHeight:onSSR||this.layout.container?0:window.innerHeight}},watch:{value(t){this.__update("space",t),this.__updateLocal("revealed",!0),this.layout.__animate()},offset(t){this.__update("offset",t)},reveal(t){!1===t&&this.__updateLocal("revealed",this.value)},revealed(t){this.layout.__animate(),this.$emit("reveal",t)},"layout.scroll"(){this.__updateRevealed()},"layout.height"(){this.__updateRevealed()},size(){this.__updateRevealed()},"$q.screen.height"(t){!0!==this.layout.container&&this.__updateLocal("windowHeight",t)}},computed:{fixed(){return!0===this.reveal||this.layout.view.indexOf("F")>-1||this.$q.platform.is.ios&&!0===this.layout.container},containerHeight(){return!0===this.layout.container?this.layout.containerHeight:this.windowHeight},offset(){if(!0!==this.value)return 0;if(!0===this.fixed)return!0===this.revealed?this.size:0;const t=this.layout.scroll.position+this.containerHeight+this.size-this.layout.height;return t>0?t:0},hidden(){return!0!==this.value||!0===this.fixed&&!0!==this.revealed},revealOnFocus(){return!0===this.value&&!0===this.hidden&&!0===this.reveal},classes(){return(!0===this.fixed?"fixed":"absolute")+"-bottom"+(!0===this.bordered?" q-footer--bordered":"")+(!0===this.hidden?" q-footer--hidden":"")+(!0!==this.value?" q-layout--prevent-focus":"")+(!0!==this.value&&!0!==this.fixed?" hidden":"")},style(){const t=this.layout.rows.bottom,e={};return"l"===t[0]&&!0===this.layout.left.space&&(e[!0===this.$q.lang.rtl?"right":"left"]=`${this.layout.left.size}px`),"r"===t[2]&&!0===this.layout.right.space&&(e[!0===this.$q.lang.rtl?"left":"right"]=`${this.layout.right.size}px`),e},onEvents(){return{...this.qListeners,focusin:this.__onFocusin,input:stop}}},render(t){const e=mergeSlot([t(QResizeObserver,{key:"resize",props:{debounce:0},on:cache(this,"resize",{resize:this.__onResize})})],this,"default");return!0===this.elevated&&e.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),t("footer",{staticClass:"q-footer q-layout__section--marginal",class:this.classes,style:this.style,on:this.onEvents},e)},created(){this.layout.instances.footer=this,!0===this.value&&this.__update("size",this.size),this.__update("space",this.value),this.__update("offset",this.offset)},beforeDestroy(){this.layout.instances.footer===this&&(this.layout.instances.footer=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},methods:{__onResize({height:t}){this.__updateLocal("size",t),this.__update("size",t)},__update(t,e){this.layout.footer[t]!==e&&(this.layout.footer[t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__updateRevealed(){if(!0!==this.reveal)return;const{direction:t,position:e,inflectionPoint:i}=this.layout.scroll;this.__updateLocal("revealed","up"===t||e-i<100||this.layout.height-this.containerHeight-e-this.size<300)},__onFocusin(t){!0===this.revealOnFocus&&this.__updateLocal("revealed",!0),this.$emit("focusin",t)}}}),QForm=Vue__default.default.extend({name:"QForm",mixins:[ListenersMixin],props:{autofocus:Boolean,noErrorFocus:Boolean,noResetFocus:Boolean,greedy:Boolean},computed:{onEvents(){return{...this.qListeners,submit:this.submit,reset:this.reset}}},mounted(){this.validateIndex=0,!0===this.autofocus&&this.focus()},activated(){!0===this.shouldActivate&&!0===this.autofocus&&this.focus()},deactivated(){this.shouldActivate=!0},methods:{validate(t){const e="boolean"==typeof t?t:!0!==this.noErrorFocus,i=++this.validateIndex,s=this.getValidationComponents().filter(t=>!0!==t.disable),o=(t,e)=>{this.$emit("validation-"+(!0===t?"success":"error"),e)},n=t=>{const e=t.validate();return"function"==typeof e.then?e.then(e=>({valid:e,comp:t}),e=>({valid:!1,comp:t,err:e})):Promise.resolve({valid:e,comp:t})};return(!0===this.greedy?Promise.all(s.map(n)).then(t=>t.filter(t=>!0!==t.valid)):s.reduce((t,e)=>t.then(()=>n(e).then(t=>{if(!1===t.valid)return Promise.reject(t)})),Promise.resolve()).catch(t=>[t])).then(t=>{if(void 0===t||0===t.length)return i===this.validateIndex&&o(!0),!0;if(i===this.validateIndex){const{comp:i,err:s}=t[0];if(void 0!==s&&console.error(s),o(!1,i),!0===e){const e=t.find(({comp:t})=>"function"==typeof t.focus&&!0!==t._isBeingDestroyed&&!0!==t._isDestroyed&&!0!==t._inactive);void 0!==e&&e.comp.focus()}}return!1})},resetValidation(){this.validateIndex++,this.getValidationComponents().forEach(t=>{"function"==typeof t.resetValidation&&t.resetValidation()})},submit(t){void 0!==t&&stopAndPrevent(t);const e=this.validateIndex+1;this.validate().then(i=>{e===this.validateIndex&&!0===i&&(void 0!==this.qListeners.submit?this.$emit("submit",t):void 0!==t&&void 0!==t.target&&"function"==typeof t.target.submit&&t.target.submit())})},reset(t){void 0!==t&&stopAndPrevent(t),this.$emit("reset"),this.$nextTick(()=>{this.resetValidation(),!0===this.autofocus&&!0!==this.noResetFocus&&this.focus()})},focus(){if(!this.$el)return;const t=this.$el.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||this.$el.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||this.$el.querySelector("[autofocus], [data-autofocus]")||Array.prototype.find.call(this.$el.querySelectorAll("[tabindex]"),t=>t.tabIndex>-1);null!==t&&void 0!==t&&managedFocus(t)},getValidationComponents(){return Array.prototype.map.call(this.$el.getElementsByClassName("q-validation-component"),t=>t.__vue__).filter(t=>void 0!==t&&"function"==typeof t.validate)}},render(t){return t("form",{staticClass:"q-form",on:this.onEvents},slot(this,"default"))}}),QHeader=Vue__default.default.extend({name:"QHeader",mixins:[ListenersMixin],inject:{layout:{default(){console.error("QHeader needs to be child of QLayout")}}},props:{value:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},data(){return{size:parseInt(this.heightHint,10),revealed:!0}},watch:{value(t){this.__update("space",t),this.__updateLocal("revealed",!0),this.layout.__animate()},offset(t){this.__update("offset",t)},reveal(t){!1===t&&this.__updateLocal("revealed",this.value)},revealed(t){this.layout.__animate(),this.$emit("reveal",t)},"layout.scroll"(t){!0===this.reveal&&this.__updateLocal("revealed","up"===t.direction||t.position<=this.revealOffset||t.position-t.inflectionPoint<100)}},computed:{fixed(){return!0===this.reveal||this.layout.view.indexOf("H")>-1||this.$q.platform.is.ios&&!0===this.layout.container},offset(){if(!0!==this.value)return 0;if(!0===this.fixed)return!0===this.revealed?this.size:0;const t=this.size-this.layout.scroll.position;return t>0?t:0},hidden(){return!0!==this.value||!0===this.fixed&&!0!==this.revealed},revealOnFocus(){return!0===this.value&&!0===this.hidden&&!0===this.reveal},classes(){return(!0===this.fixed?"fixed":"absolute")+"-top"+(!0===this.bordered?" q-header--bordered":"")+(!0===this.hidden?" q-header--hidden":"")+(!0!==this.value?" q-layout--prevent-focus":"")},style(){const t=this.layout.rows.top,e={};return"l"===t[0]&&!0===this.layout.left.space&&(e[!0===this.$q.lang.rtl?"right":"left"]=`${this.layout.left.size}px`),"r"===t[2]&&!0===this.layout.right.space&&(e[!0===this.$q.lang.rtl?"left":"right"]=`${this.layout.right.size}px`),e},onEvents(){return{...this.qListeners,focusin:this.__onFocusin,input:stop}}},render(t){const e=uniqueSlot(this,"default",[]);return!0===this.elevated&&e.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(t(QResizeObserver,{key:"resize",props:{debounce:0},on:cache(this,"resize",{resize:this.__onResize})})),t("header",{staticClass:"q-header q-layout__section--marginal",class:this.classes,style:this.style,on:this.onEvents},e)},created(){this.layout.instances.header=this,!0===this.value&&this.__update("size",this.size),this.__update("space",this.value),this.__update("offset",this.offset)},beforeDestroy(){this.layout.instances.header===this&&(this.layout.instances.header=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},methods:{__onResize({height:t}){this.__updateLocal("size",t),this.__update("size",t)},__update(t,e){this.layout.header[t]!==e&&(this.layout.header[t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__onFocusin(t){!0===this.revealOnFocus&&this.__updateLocal("revealed",!0),this.$emit("focusin",t)}}}),RatioMixin={props:{ratio:[String,Number]},computed:{ratioStyle(){const t=this.ratio||this.naturalRatio;if(void 0!==t)return{paddingBottom:`${100/t}%`}}}},QImg=Vue__default.default.extend({name:"QImg",mixins:[ListenersMixin,RatioMixin],props:{src:String,srcset:String,sizes:String,alt:String,width:String,height:String,placeholderSrc:String,basic:Boolean,contain:Boolean,position:{type:String,default:"50% 50%"},transition:{type:String,default:"fade"},imgClass:[Array,String,Object],imgStyle:Object,nativeContextMenu:Boolean,noDefaultSpinner:Boolean,spinnerColor:String,spinnerSize:String},data(){return{currentSrc:"",image:null,isLoading:!!this.src,hasError:!1,naturalRatio:void 0}},watch:{src(){this.__load()},srcset(t){this.__updateWatcher(t)}},computed:{url(){return this.currentSrc||this.placeholderSrc||void 0},attrs(){const t={role:"img"};return void 0!==this.alt&&(t["aria-label"]=this.alt),t},imgContainerStyle(){return Object.assign({backgroundSize:!0===this.contain?"contain":"cover",backgroundPosition:this.position},this.imgStyle,{backgroundImage:`url("${this.url}")`})},style(){return{width:this.width,height:this.height}},classes(){return"q-img overflow-hidden"+(!0===this.nativeContextMenu?" q-img--menu":"")}},methods:{__onLoad(t){this.isLoading=!1,this.hasError=!1,this.__computeRatio(t),this.__updateSrc(),this.__updateWatcher(this.srcset),this.$emit("load",this.currentSrc)},__onError(t){clearTimeout(this.ratioTimer),this.isLoading=!1,this.hasError=!0,this.currentSrc="",this.$emit("error",t)},__updateSrc(){if(void 0!==this.image&&!1===this.isLoading){const t=this.image.currentSrc||this.image.src;this.currentSrc!==t&&(this.currentSrc=t)}},__updateWatcher(t){t?void 0===this.unwatch&&(this.unwatch=this.$watch("$q.screen.width",this.__updateSrc)):void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0)},__load(){if(clearTimeout(this.ratioTimer),this.hasError=!1,!this.src)return this.isLoading=!1,this.image=void 0,void(this.currentSrc="");this.isLoading=!0;const t=new Image;this.image=t,t.onerror=(e=>{this.image===t&&!0!==this.destroyed&&this.__onError(e)}),t.onload=(()=>{!0!==this.destroyed&&this.image===t&&(void 0!==t.decode?t.decode().catch(e=>{this.image===t&&!0!==this.destroyed&&this.__onError(e)}).then(()=>{this.image===t&&!0!==this.destroyed&&this.__onLoad(t)}):this.__onLoad(t))}),t.src=this.src,this.srcset&&(t.srcset=this.srcset),void 0!==this.sizes?t.sizes=this.sizes:Object.assign(t,{height:this.height,width:this.width})},__computeRatio(t){const{naturalHeight:e,naturalWidth:i}=t;e||i?this.naturalRatio=0===e?1:i/e:this.ratioTimer=setTimeout(()=>{this.image===t&&!0!==this.destroyed&&this.__computeRatio(t)},100)},__getImage(t){const e=!0===this.nativeContextMenu?[t("img",{staticClass:"absolute-full fit",attrs:{src:this.url,"aria-hidden":"true"}})]:void 0,i=void 0!==this.url?t("div",{key:this.url,staticClass:"q-img__image absolute-full",class:this.imgClass,style:this.imgContainerStyle},e):null;return!0===this.basic?i:t("transition",{props:{name:"q-transition--"+this.transition}},[i])},__getContent(t){const e=slot(this,!0===this.hasError?"error":"default");return!0===this.basic?t("div",{key:"content",staticClass:"q-img__content absolute-full"},e):t("transition",{props:{name:"q-transition--fade"}},[!0===this.isLoading?t("div",{key:"placeholder",staticClass:"q-img__loading absolute-full flex flex-center"},void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():!1===this.noDefaultSpinner?[t(QSpinner,{props:{color:this.spinnerColor,size:this.spinnerSize}})]:void 0):t("div",{key:"content",staticClass:"q-img__content absolute-full"},e)])}},render(t){return t("div",{class:this.classes,style:this.style,attrs:this.attrs,on:{...this.qListeners}},[t("div",{style:this.ratioStyle}),this.__getImage(t),this.__getContent(t)])},beforeMount(){if(void 0!==this.placeholderSrc&&void 0===this.ratio){const t=new Image;t.src=this.placeholderSrc,this.__computeRatio(t)}!0===this.isLoading&&this.__load()},beforeDestroy(){this.destroyed=!0,clearTimeout(this.ratioTimer),void 0!==this.unwatch&&this.unwatch()}});const{passive:passive$2}=listenOpts;var QInfiniteScroll=Vue__default.default.extend({name:"QInfiniteScroll",mixins:[ListenersMixin],props:{offset:{type:Number,default:500},debounce:{type:[String,Number],default:100},scrollTarget:{default:void 0},initialIndex:Number,disable:Boolean,reverse:Boolean},data(){return{index:this.initialIndex||0,isFetching:!1,isWorking:!0}},watch:{disable(t){!0===t?this.stop():this.resume()},reverse(){!1===this.isFetching&&!0===this.isWorking&&this.immediatePoll()},scrollTarget(){this.updateScrollTarget()},debounce(t){this.__setDebounce(t)}},methods:{poll(){if(void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),!0===this.disable||!0===this.isFetching||!1===this.isWorking)return;if(this.__scrollTarget===window&&!0===document.qScrollPrevented)return void(this.clearExecuteWhenScrollable=executeWhenScrollable(this.poll));const t=getScrollHeight(this.__scrollTarget),e=getScrollPosition(this.__scrollTarget),i=height(this.__scrollTarget);!1===this.reverse?Math.round(e+i+this.offset)>=Math.round(t)&&this.trigger():Math.round(e){!0===this.isWorking&&(this.isFetching=!1,this.$nextTick(()=>{if(!0===this.reverse){const e=getScrollHeight(this.__scrollTarget),i=getScrollPosition(this.__scrollTarget),s=e-t;setScrollPosition(this.__scrollTarget,i+s)}!0===e?this.stop():this.$el.closest("body")&&this.poll()}))})},reset(){this.index=0},resume(){!1===this.isWorking&&(this.isWorking=!0,this.__scrollTarget.addEventListener("scroll",this.poll,passive$2)),this.immediatePoll()},stop(){!0===this.isWorking&&(this.isWorking=!1,this.isFetching=!1,this.__scrollTarget.removeEventListener("scroll",this.poll,passive$2),"function"==typeof this.poll.cancel&&this.poll.cancel())},updateScrollTarget(){if(this.__scrollTarget&&!0===this.isWorking&&this.__scrollTarget.removeEventListener("scroll",this.poll,passive$2),this.__scrollTarget=getScrollTarget(this.$el,this.scrollTarget),!0===this.isWorking){if(this.__scrollTarget.addEventListener("scroll",this.poll,passive$2),!0===this.reverse){const t=getScrollHeight(this.__scrollTarget),e=height(this.__scrollTarget);setScrollPosition(this.__scrollTarget,t-e)}this.immediatePoll()}},setIndex(t){this.index=t},__setDebounce(t){t=parseInt(t,10);const e=this.poll;this.poll=t<=0?this.immediatePoll:debounce(this.immediatePoll,!0===isNaN(t)?100:t),this.__scrollTarget&&!0===this.isWorking&&(void 0!==e&&this.__scrollTarget.removeEventListener("scroll",e,passive$2),this.__scrollTarget.addEventListener("scroll",this.poll,passive$2))}},mounted(){this.immediatePoll=this.poll,this.__setDebounce(this.debounce),this.updateScrollTarget()},activated(){void 0!==this.__scrollPosition&&this.__scrollTarget&&setScrollPosition(this.__scrollTarget,this.__scrollPosition)},deactivated(){this.__scrollPosition=this.__scrollTarget?getScrollPosition(this.__scrollTarget):void 0},beforeDestroy(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),this.stop()},render(t){const e=uniqueSlot(this,"default",[]);return!0!==this.disable&&!0===this.isWorking&&e[!1===this.reverse?"push":"unshift"](t("div",{staticClass:"q-infinite-scroll__loading",class:!0===this.isFetching?"":"invisible"},slot(this,"loading"))),t("div",{staticClass:"q-infinite-scroll",on:{...this.qListeners}},e)}}),QInnerLoading=Vue__default.default.extend({name:"QInnerLoading",mixins:[ListenersMixin,DarkMixin,TransitionMixin],props:{showing:Boolean,color:String,size:{type:[String,Number],default:42},label:String,labelClass:String,labelStyle:[String,Array,Object]},computed:{classes(){return"q-inner-loading absolute-full column flex-center"+` q-inner-loading--${this.darkSuffix}`},labelClasses(){return"q-inner-loading__label"+(void 0!==this.labelClass?` ${this.labelClass}`:"")}},methods:{__getInner(t){const e=[t(QSpinner,{props:{size:this.size,color:this.color}})];return void 0!==this.label&&e.push(t("div",{class:this.labelClasses,style:this.labelStyle},[this.label])),e},__getContent(t){return!0===this.showing?[t("div",{staticClass:this.classes,on:{...this.qListeners}},void 0!==this.$scopedSlots.default?this.$scopedSlots.default():this.__getInner(t))]:void 0}},render(t){return t("transition",{props:{...this.transitionProps,appear:!0}},this.__getContent(t))}});const NAMED_MASKS={date:"####/##/##",datetime:"####/##/## ##:##",time:"##:##",fulltime:"##:##:##",phone:"(###) ### - ####",card:"#### #### #### ####"},TOKENS={"#":{pattern:"[\\d]",negate:"[^\\d]"},S:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]"},N:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]"},A:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleUpperCase()},a:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleLowerCase()},X:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleUpperCase()},x:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleLowerCase()}},KEYS=Object.keys(TOKENS);KEYS.forEach(t=>{TOKENS[t].regex=new RegExp(TOKENS[t].pattern)});const tokenRegexMask=new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+KEYS.join("")+"])|(.)","g"),escRegex=/[.*+?^${}()|[\]\\]/g,MARKER=String.fromCharCode(1);var MaskMixin={props:{mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean},watch:{type(){this.__updateMaskInternals()},autogrow(){this.__updateMaskInternals()},mask(t){if(void 0!==t)this.__updateMaskValue(this.innerValue,!0);else{const t=this.__unmask(this.innerValue);this.__updateMaskInternals(),this.value!==t&&this.$emit("input",t)}},fillMask(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue,!0)},reverseFillMask(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue,!0)},unmaskedValue(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue)}},methods:{__getInitialMaskedValue(){if(this.__updateMaskInternals(),!0===this.hasMask){const t=this.__mask(this.__unmask(this.value));return!1!==this.fillMask?this.__fillWithMask(t):t}return this.value},__getPaddedMaskMarked(t){if(t-1){for(let s=t-e.length;s>0;s--)i+=MARKER;e=e.slice(0,s)+i+e.slice(s)}return e},__updateMaskInternals(){if(this.hasMask=void 0!==this.mask&&this.mask.length>0&&(!0===this.autogrow||["textarea","text","search","url","tel","password"].includes(this.type)),!1===this.hasMask)return this.computedUnmask=void 0,this.maskMarked="",void(this.maskReplaced="");const t=void 0===NAMED_MASKS[this.mask]?this.mask:NAMED_MASKS[this.mask],e="string"==typeof this.fillMask&&this.fillMask.length>0?this.fillMask.slice(0,1):"_",i=e.replace(escRegex,"\\$&"),s=[],o=[],n=[];let r=!0===this.reverseFillMask,a="",l="";t.replace(tokenRegexMask,(t,e,i,h,d)=>{if(void 0!==h){const t=TOKENS[h];n.push(t),l=t.negate,!0===r&&(o.push("(?:"+l+"+)?("+t.pattern+"+)?(?:"+l+"+)?("+t.pattern+"+)?"),r=!1),o.push("(?:"+l+"+)?("+t.pattern+")?")}else if(void 0!==i)a="\\"+("\\"===i?"":i),n.push(i),s.push("([^"+a+"]+)?"+a+"?");else{const t=void 0!==e?e:d;a="\\"===t?"\\\\\\\\":t.replace(escRegex,"\\\\$&"),n.push(t),s.push("([^"+a+"]+)?"+a+"?")}});const h=new RegExp("^"+s.join("")+"("+(""===a?".":"[^"+a+"]")+"+)?"+(""===a?"":"["+a+"]*")+"$"),d=o.length-1,c=o.map((t,e)=>0===e&&!0===this.reverseFillMask?new RegExp("^"+i+"*"+t):e===d?new RegExp("^"+t+"("+(""===l?".":l)+"+)?"+(!0===this.reverseFillMask?"$":i+"*")):new RegExp("^"+t));this.computedMask=n,this.computedUnmask=(t=>{const e=h.exec(t);null!==e&&(t=e.slice(1).join(""));const i=[],s=c.length;for(let e=0,o=t;e0?i.join(""):t}),this.maskMarked=n.map(t=>"string"==typeof t?t:MARKER).join(""),this.maskReplaced=this.maskMarked.split(MARKER).join(e)},__updateMaskValue(t,e,i){const s=this.$refs.input,o=s.selectionEnd,n=s.value.length-o,r=this.__unmask(t);!0===e&&this.__updateMaskInternals();const a=this.__mask(r),l=!1!==this.fillMask?this.__fillWithMask(a):a,h=this.innerValue!==l;s.value!==l&&(s.value=l),!0===h&&(this.innerValue=l),document.activeElement===s&&this.$nextTick(()=>{if(l!==this.maskReplaced)if("insertFromPaste"!==i||!0===this.reverseFillMask)if(["deleteContentBackward","deleteContentForward"].indexOf(i)>-1){const t=!0===this.reverseFillMask?0===o?l.length>a.length?1:0:Math.max(0,l.length-(l===this.maskReplaced?0:Math.min(a.length,n)+1))+1:o;s.setSelectionRange(t,t,"forward")}else if(!0===this.reverseFillMask)if(!0===h){const t=Math.max(0,l.length-(l===this.maskReplaced?0:Math.min(a.length,n+1)));1===t&&1===o?s.setSelectionRange(t,t,"forward"):this.__moveCursorRightReverse(s,t,t)}else{const t=l.length-n;s.setSelectionRange(t,t,"backward")}else if(!0===h){const t=Math.max(0,this.maskMarked.indexOf(MARKER),Math.min(a.length,o)-1);this.__moveCursorRight(s,t,t)}else{const t=o-1;this.__moveCursorRight(s,t,t)}else{const t=o-1;this.__moveCursorRight(s,t,t)}else{const t=!0===this.reverseFillMask?this.maskReplaced.length:0;s.setSelectionRange(t,t,"forward")}});const d=!0===this.unmaskedValue?this.__unmask(l):l;String(this.value)!==d&&this.__emitValue(d,!0)},__moveCursorForPaste(t,e,i){const s=this.__mask(this.__unmask(t.value));e=Math.max(0,this.maskMarked.indexOf(MARKER),Math.min(s.length,e)),t.setSelectionRange(e,i,"forward")},__moveCursorLeft(t,e,i,s){const o=-1===this.maskMarked.slice(e-1).indexOf(MARKER);let n=Math.max(0,e-1);for(;n>=0;n--)if(this.maskMarked[n]===MARKER){e=n,!0===o&&e++;break}if(n<0&&void 0!==this.maskMarked[e]&&this.maskMarked[e]!==MARKER)return this.__moveCursorRight(t,0,0);e>=0&&t.setSelectionRange(e,!0===s?i:e,"backward")},__moveCursorRight(t,e,i,s){const o=t.value.length;let n=Math.min(o,i+1);for(;n<=o;n++){if(this.maskMarked[n]===MARKER){i=n;break}this.maskMarked[n-1]===MARKER&&(i=n)}if(n>o&&void 0!==this.maskMarked[i-1]&&this.maskMarked[i-1]!==MARKER)return this.__moveCursorLeft(t,o,o);t.setSelectionRange(s?e:i,i,"forward")},__moveCursorLeftReverse(t,e,i,s){const o=this.__getPaddedMaskMarked(t.value.length);let n=Math.max(0,e-1);for(;n>=0;n--){if(o[n-1]===MARKER){e=n;break}if(o[n]===MARKER&&(e=n,0===n))break}if(n<0&&void 0!==o[e]&&o[e]!==MARKER)return this.__moveCursorRightReverse(t,0,0);e>=0&&t.setSelectionRange(e,!0===s?i:e,"backward")},__moveCursorRightReverse(t,e,i,s){const o=t.value.length,n=this.__getPaddedMaskMarked(o),r=-1===n.slice(0,i+1).indexOf(MARKER);let a=Math.min(o,i+1);for(;a<=o;a++)if(n[a-1]===MARKER){(i=a)>0&&!0===r&&i--;break}if(a>o&&void 0!==n[i-1]&&n[i-1]!==MARKER)return this.__moveCursorLeftReverse(t,o,o);t.setSelectionRange(!0===s?e:i,i,"forward")},__onMaskedKeydown(t){if(!0===shouldIgnoreKey(t))return;const e=this.$refs.input,i=e.selectionStart,s=e.selectionEnd;if(37===t.keyCode||39===t.keyCode){const o=this["__moveCursor"+(39===t.keyCode?"Right":"Left")+(!0===this.reverseFillMask?"Reverse":"")];t.preventDefault(),o(e,i,s,t.shiftKey)}else 8===t.keyCode&&!0!==this.reverseFillMask&&i===s?this.__moveCursorLeft(e,i,s,!0):46===t.keyCode&&!0===this.reverseFillMask&&i===s&&this.__moveCursorRightReverse(e,i,s,!0);this.$emit("keydown",t)},__mask(t){if(void 0===t||null===t||""===t)return"";if(!0===this.reverseFillMask)return this.__maskReverse(t);const e=this.computedMask;let i=0,s="";for(let o=0;o=0&&s>-1;n--){const r=e[n];let a=t[s];if("string"==typeof r)o=r+o,a===r&&s--;else{if(void 0===a||!r.regex.test(a))return o;do{o=(void 0!==r.transform?r.transform(a):a)+o,a=t[--s]}while(i===n&&void 0!==a&&r.regex.test(a))}}return o},__unmask(t){return"string"!=typeof t||void 0===this.computedUnmask?"number"==typeof t?this.computedUnmask(""+t):t:this.computedUnmask(t)},__fillWithMask(t){return this.maskReplaced.length-t.length<=0?t:!0===this.reverseFillMask&&t.length>0?this.maskReplaced.slice(0,-t.length)+t:t+this.maskReplaced.slice(t.length)}}},QInput=Vue__default.default.extend({name:"QInput",mixins:[QField,MaskMixin,FormFieldMixin,FileValueMixin,ListenersMixin],props:{value:{required:!1},shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},watch:{value(t){if(!0===this.hasMask){if(!0===this.stopValueWatcher&&(this.stopValueWatcher=!1,String(t)===this.emitCachedValue))return;this.__updateMaskValue(t)}else this.innerValue!==t&&(this.innerValue=t,"number"===this.type&&!0===this.hasOwnProperty("tempValue")&&(!0===this.typedNumber?this.typedNumber=!1:delete this.tempValue));!0===this.autogrow&&this.$nextTick(this.__adjustHeight)},type(){this.$refs.input&&(this.$refs.input.value=this.value)},autogrow(t){if(!0===t)this.$nextTick(this.__adjustHeight);else if(this.qAttrs.rows>0&&void 0!==this.$refs.input){this.$refs.input.style.height="auto"}},dense(){!0===this.autogrow&&this.$nextTick(this.__adjustHeight)}},data(){return{innerValue:this.__getInitialMaskedValue()}},computed:{isTextarea(){return"textarea"===this.type||!0===this.autogrow},isTypeText(){return!0===this.isTextarea||["text","search","url","tel","password"].includes(this.type)},fieldClass(){return`q-${!0===this.isTextarea?"textarea":"input"}`+(!0===this.autogrow?" q-textarea--autogrow":"")},hasShadow(){return"file"!==this.type&&"string"==typeof this.shadowText&&this.shadowText.length>0},onEvents(){const t={...this.qListeners,input:this.__onInput,compositionend:this.__onCompositionend,paste:this.__onPaste,change:this.__onChange,blur:this.__onFinishEditing,focus:this.__onFocus};return!0===this.hasMask&&(t.keydown=this.__onMaskedKeydown),!0===this.autogrow&&(t.animationend=this.__onAnimationend),t},inputAttrs(){const t={tabindex:0,"data-autofocus":this.autofocus||void 0,rows:"textarea"===this.type?6:void 0,"aria-label":this.label,name:this.nameProp,...this.qAttrs,id:this.targetUid,type:this.type,maxlength:this.maxlength,disabled:!0===this.disable,readonly:!0===this.readonly};return!0===this.autogrow&&(t.rows=1),t}},methods:{focus(){const t=document.activeElement;void 0===this.$refs.input||this.$refs.input===t||null!==t&&t.id===this.targetUid||managedFocus(this.$refs.input)},select(){void 0!==this.$refs.input&&this.$refs.input.select()},getNativeElement(){return this.$refs.input},__onPaste(t){if(!0===this.hasMask&&!0!==this.reverseFillMask){const e=t.target;this.__moveCursorForPaste(e,e.selectionStart,e.selectionEnd)}this.$emit("paste",t)},__onInput(t){if(!t||!t.target||!0===t.target.qComposing)return;if("file"===this.type)return void this.$emit("input",t.target.files);const e=t.target.value;if(!0===this.hasMask)this.__updateMaskValue(e,!1,t.inputType);else if(this.__emitValue(e),!0===this.isTypeText&&t.target===document.activeElement){const{selectionStart:i,selectionEnd:s}=t.target;void 0!==i&&void 0!==s&&this.$nextTick(()=>{t.target===document.activeElement&&0===e.indexOf(t.target.value)&&t.target.setSelectionRange(i,s)})}!0===this.autogrow&&this.__adjustHeight()},__onChange(t){!0===t.target.qComposing&&(t.target.qComposing=!1,this.__onInput(t)),clearTimeout(this.emitTimer),void 0!==this.emitValueFn&&this.emitValueFn(),this.$emit("change",t)},__onFinishEditing(t){void 0!==t&&stop(t),clearTimeout(this.emitTimer),void 0!==this.emitValueFn&&this.emitValueFn(),this.typedNumber=!1,this.stopValueWatcher=!1,delete this.tempValue,"file"!==this.type&&setTimeout(()=>{void 0!==this.$refs.input&&(this.$refs.input.value=void 0!==this.innerValue?this.innerValue:"")})},__onFocus(t){stop(t),managedFocus(t.target)},__onCompositionend(t){void 0!==this.qListeners.compositionend&&this.$emit("compositionend",t),this.__onInput(t)},__onAnimationend(t){void 0!==this.qListeners.animationend&&this.$emit("animationend",t),this.__adjustHeight()},__emitValue(t,e){this.emitValueFn=(()=>{"number"!==this.type&&!0===this.hasOwnProperty("tempValue")&&delete this.tempValue,this.value!==t&&this.emitCachedValue!==t&&(this.emitCachedValue=t,!0===e&&(this.stopValueWatcher=!0),this.$emit("input",t),this.$nextTick(()=>{this.emitCachedValue===t&&(this.emitCachedValue=NaN)})),this.emitValueFn=void 0}),"number"===this.type&&(this.typedNumber=!0,this.tempValue=t),void 0!==this.debounce?(clearTimeout(this.emitTimer),this.tempValue=t,this.emitTimer=setTimeout(this.emitValueFn,this.debounce)):this.emitValueFn()},__adjustHeight(){requestAnimationFrame(()=>{const t=this.$refs.input;if(void 0!==t){const e=t.parentNode.style,{overflow:i}=t.style;!0!==this.$q.platform.is.firefox&&(t.style.overflow="hidden"),t.style.height="1px",e.marginBottom=t.scrollHeight-1+"px",t.style.height=t.scrollHeight+"px",t.style.overflow=i,e.marginBottom=""}})},__getCurValue(){return!0===this.hasOwnProperty("tempValue")?this.tempValue:void 0!==this.innerValue?this.innerValue:""},__getShadowControl(t){return t("div",{staticClass:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(!0===this.isTextarea?"":" text-no-wrap")},[t("span",{staticClass:"invisible"},this.__getCurValue()),t("span",this.shadowText)])},__getControl(t){return t(!0===this.isTextarea?"textarea":"input",{ref:"input",staticClass:"q-field__native q-placeholder",style:this.inputStyle,class:this.inputClass,attrs:this.inputAttrs,on:this.onEvents,domProps:"file"!==this.type?{value:this.__getCurValue()}:this.formDomProps})}},created(){this.emitCachedValue=NaN},mounted(){!0===this.autogrow&&this.__adjustHeight()},beforeDestroy(){this.__onFinishEditing()}});const defaultCfg$1={threshold:0,root:null,rootMargin:"0px"};function update$3(t,e,i,s){let o,n,r;"function"==typeof i?(o=i,n=defaultCfg$1,r=void 0===e.cfg):(o=i.handler,n=Object.assign({},defaultCfg$1,i.cfg),r=void 0===e.cfg||!1===isDeepEqual(e.cfg,n)),e.handler!==o&&(e.handler=o);const a=!0===s.once;e.once!==a&&(e.once=a),!0===r&&(e.cfg=n,void 0!==e.observer&&e.observer.unobserve(t),e.observer=new IntersectionObserver(([i])=>{if("function"==typeof e.handler){if(null===i.rootBounds&&(void 0!==t.__vue__?!0!==t.__vue__._inactive:!0===document.body.contains(t)))return e.observer.unobserve(t),void e.observer.observe(t);(!1===e.handler(i,e.observer)||!0===e.once&&!0===i.isIntersecting)&&destroy$8(t)}},n),e.observer.observe(t))}function destroy$8(t){const e=t.__qvisible;void 0!==e&&(void 0!==e.observer&&e.observer.unobserve(t),delete t.__qvisible)}var Intersection={name:"intersection",inserted(t,{modifiers:e,value:i}){void 0!==t.__qvisible&&(destroy$8(t),t.__qvisible_destroyed=!0);const s={};update$3(t,s,i,e),t.__qvisible=s},update(t,{value:e,modifiers:i}){const s=t.__qvisible;void 0!==s&&update$3(t,s,e,i)},unbind(t){void 0===t.__qvisible_destroyed?destroy$8(t):delete t.__qvisible_destroyed}},QIntersection=Vue__default.default.extend({name:"QIntersection",mixins:[TagMixin,ListenersMixin],directives:{Intersection:Intersection},props:{once:Boolean,transition:String,ssrPrerender:Boolean,margin:String,threshold:[Number,Array],root:{default:null},disable:Boolean},data(){return{showing:!0===onSSR&&this.ssrPrerender}},computed:{value(){return void 0!==this.root||void 0!==this.margin||void 0!==this.threshold?{handler:this.__trigger,cfg:{root:this.root,rootMargin:this.margin,threshold:this.threshold}}:this.__trigger},directives(){if(!0!==this.disable&&(!0!==onSSR||!0!==this.once||!0!==this.ssrPrerender))return[{name:"intersection",value:this.value,modifiers:{once:this.once}}]}},methods:{__trigger(t){this.showing!==t.isIntersecting&&(this.showing=t.isIntersecting,void 0!==this.qListeners.visibility&&this.$emit("visibility",this.showing))}},render(t){const e=!0===this.showing?slot(this,"default"):void 0;return t(this.tag,{staticClass:"q-intersection",on:{...this.qListeners},directives:this.directives},this.transition?[t("transition",{props:{name:"q-transition--"+this.transition}},e)]:e)}});const keyCodes$1=[34,37,40,33,39,38];var QKnob=Vue__default.default.extend({name:"QKnob",mixins:[{props:QCircularProgress.options.props},FormMixin],directives:{TouchPan:TouchPan},props:{innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:t=>t>=0},tabindex:{type:[Number,String],default:0},disable:Boolean,readonly:Boolean},data(){const t=this.__getInnerMin(this.innerMin),e=this.__getInnerMax(this.innerMax);return{model:null===this.value?t:between(this.value,t,e),dragging:!1}},watch:{modelUpdate(){this.model=null===this.value?this.computedInnerMin:between(this.value,this.computedInnerMin,this.computedInnerMax),this.__updateValue(!0)}},computed:{classes(){return"q-knob non-selectable q-key-group-navigation--ignore-key"+(!0===this.editable?" q-knob--editable":!0===this.disable?" disabled":"")},computedInnerMin(){return this.__getInnerMin(this.innerMin)},computedInnerMax(){return this.__getInnerMax(this.innerMax)},modelUpdate(){return`${this.value}|${this.computedInnerMin}|${this.computedInnerMax}`},editable(){return!1===this.disable&&!1===this.readonly},decimals(){return(String(this.step).trim("0").split(".")[1]||"").length},computedStep(){return 0===this.step?1:this.step},computedInstantFeedback(){return!0===this.instantFeedback||!0===this.dragging},onEvents(){return!0===this.$q.platform.is.mobile?{click:this.__click}:{mousedown:this.__activate,click:this.__click,keydown:this.__keydown,keyup:this.__keyup}},attrs(){const t={role:"slider","aria-valuemin":this.computedInnerMin,"aria-valuemax":this.computedInnerMax,"aria-valuenow":this.value};return!0===this.editable?t.tabindex=this.tabindex:t[`aria-${!0===this.disable?"disabled":"readonly"}`]="",t}},methods:{__getInnerMin(t){return!0===isNaN(t)||this.innerMinthis.max?this.max:this.innerMax},__updateCenterPosition(){const{top:t,left:e,width:i,height:s}=this.$el.getBoundingClientRect();this.centerPosition={top:t+s/2,left:e+i/2}},__pan(t){t.isFinal?(this.__updatePosition(t.evt,!0),this.dragging=!1):t.isFirst?(this.__updateCenterPosition(),this.dragging=!0,this.__updatePosition(t.evt)):this.__updatePosition(t.evt)},__click(t){this.__updateCenterPosition(),this.__updatePosition(t,!0)},__keydown(t){if(!keyCodes$1.includes(t.keyCode))return;stopAndPrevent(t);const e=([34,33].includes(t.keyCode)?10:1)*this.computedStep,i=[34,37,40].includes(t.keyCode)?-e:e;this.model=between(parseFloat((this.model+i).toFixed(this.decimals)),this.computedInnerMin,this.computedInnerMax),this.__updateValue()},__keyup(t){keyCodes$1.includes(t.keyCode)&&this.__updateValue(!0)},__activate(t){this.__updateCenterPosition(),this.__updatePosition(t)},__updatePosition(t,e){const i=this.centerPosition,s=position(t),o=Math.abs(s.top-i.top),n=Math.sqrt(o**2+Math.abs(s.left-i.left)**2);let r=Math.asin(o/n)*(180/Math.PI);r=s.top=t/2?(e<0?-1:1)*t:0),a=parseFloat(a.toFixed(this.decimals))}a=between(a,this.computedInnerMin,this.computedInnerMax),this.$emit("drag-value",a),this.model!==a&&(this.model=a),this.__updateValue(e)},__updateValue(t){this.value!==this.model&&this.$emit("input",this.model),!0===t&&this.$emit("change",this.model)},__getNameInput(){return this.$createElement("input",{attrs:this.formAttrs})}},render(t){const e={class:this.classes,attrs:this.attrs,props:{...this.$props,value:this.model,instantFeedback:this.computedInstantFeedback}};return!0===this.editable&&(e.key="dir",e.on=this.onEvents,e.directives=cache(this,"dir",[{name:"touch-pan",value:this.__pan,modifiers:{prevent:!0,stop:!0,mouse:!0}}]),void 0!==this.name&&(e.scopedSlots={internal:this.__getNameInput})),t(QCircularProgress,e,slot(this,"default"))}});const{passive:passive$1}=listenOpts,axisValues=["both","horizontal","vertical"];var QScrollObserver=Vue__default.default.extend({name:"QScrollObserver",props:{axis:{type:String,validator:t=>axisValues.includes(t),default:"vertical"},debounce:[String,Number],scrollTarget:{default:void 0}},render:noop,data:()=>({scroll:{position:{top:0,left:0},direction:"none",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}}}),watch:{scrollTarget(){this.__unconfigureScrollTarget(),this.__configureScrollTarget()}},methods:{getPosition(){return JSON.parse(JSON.stringify(this.scroll))},trigger(t){if(!0===t||0===this.debounce||"0"===this.debounce)this.__emit();else if(void 0===this.clearTimer){const[t,e]=this.debounce?[setTimeout(this.__emit,this.debounce),clearTimeout]:[requestAnimationFrame(this.__emit),cancelAnimationFrame];this.clearTimer=(()=>{e(t),this.clearTimer=void 0})}},__emit(){void 0!==this.clearTimer&&this.clearTimer();const t=Math.max(0,getVerticalScrollPosition(this.__scrollTarget)),e=getHorizontalScrollPosition(this.__scrollTarget),i={top:t-this.scroll.position.top,left:e-this.scroll.position.left};if("vertical"===this.axis&&0===i.top||"horizontal"===this.axis&&0===i.left)return;const s=Math.abs(i.top)>=Math.abs(i.left)?i.top<0?"up":"down":i.left<0?"left":"right";this.scroll.position={top:t,left:e},this.scroll.directionChanged=this.scroll.direction!==s,this.scroll.delta=i,!0===this.scroll.directionChanged&&(this.scroll.direction=s,this.scroll.inflectionPoint=this.scroll.position),this.$emit("scroll",this.getPosition())},__configureScrollTarget(){this.__scrollTarget=getScrollTarget(this.$el.parentNode,this.scrollTarget),this.__scrollTarget.addEventListener("scroll",this.trigger,passive$1),this.trigger(!0)},__unconfigureScrollTarget(){void 0!==this.__scrollTarget&&(this.__scrollTarget.removeEventListener("scroll",this.trigger,passive$1),this.__scrollTarget=void 0)}},mounted(){this.__configureScrollTarget()},beforeDestroy(){void 0!==this.clearTimer&&this.clearTimer(),this.__unconfigureScrollTarget()}}),QLayout=Vue__default.default.extend({name:"QLayout",mixins:[ListenersMixin],provide(){return{layout:this}},props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:t=>/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(t.toLowerCase())}},data(){return{height:this.$q.screen.height,width:!0===this.container?0:this.$q.screen.width,containerHeight:0,scrollbarWidth:!0===onSSR?0:getScrollbarWidth(),header:{size:0,offset:0,space:!1},right:{size:300,offset:0,space:!1},footer:{size:0,offset:0,space:!1},left:{size:300,offset:0,space:!1},scroll:{position:0,direction:"down"}}},computed:{rows(){const t=this.view.toLowerCase().split(" ");return{top:t[0].split(""),middle:t[1].split(""),bottom:t[2].split("")}},style(){return!0===this.container?null:{minHeight:this.$q.screen.height+"px"}},targetStyle(){if(0!==this.scrollbarWidth)return{[!0===this.$q.lang.rtl?"left":"right"]:`${this.scrollbarWidth}px`}},targetChildStyle(){if(0!==this.scrollbarWidth)return{[!0===this.$q.lang.rtl?"right":"left"]:0,[!0===this.$q.lang.rtl?"left":"right"]:`-${this.scrollbarWidth}px`,width:`calc(100% + ${this.scrollbarWidth}px)`}},totalWidth(){return this.width+this.scrollbarWidth},classes(){return"q-layout q-layout--"+(!0===this.container?"containerized":"standard")},scrollbarEvtAction(){return!0!==this.container&&this.scrollbarWidth>0?"add":"remove"}},watch:{scrollbarEvtAction:"__updateScrollEvent"},created(){this.instances={}},mounted(){"add"===this.scrollbarEvtAction&&this.__updateScrollEvent("add")},beforeDestroy(){"add"===this.scrollbarEvtAction&&this.__updateScrollEvent("remove")},render(t){const e=t("div",{class:this.classes,style:this.style,attrs:{tabindex:-1},on:{...this.qListeners}},mergeSlot([t(QScrollObserver,{key:"scroll",on:cache(this,"scroll",{scroll:this.__onPageScroll})}),t(QResizeObserver,{key:"resizeOut",on:cache(this,"resizeOut",{resize:this.__onPageResize})})],this,"default"));return!0===this.container?t("div",{staticClass:"q-layout-container overflow-hidden"},[t(QResizeObserver,{key:"resizeIn",on:cache(this,"resizeIn",{resize:this.__onContainerResize})}),t("div",{staticClass:"absolute-full",style:this.targetStyle},[t("div",{staticClass:"scroll",style:this.targetChildStyle},[e])])]):e},methods:{__animate(){void 0!==this.timer?clearTimeout(this.timer):document.body.classList.add("q-body--layout-animate"),this.timer=setTimeout(()=>{document.body.classList.remove("q-body--layout-animate"),this.timer=void 0},150)},__onPageScroll(t){!0!==this.container&&!0===document.qScrollPrevented||(this.scroll={position:t.position.top,direction:t.direction,directionChanged:t.directionChanged,inflectionPoint:t.inflectionPoint.top,delta:t.delta.top},void 0!==this.qListeners.scroll&&this.$emit("scroll",{...this.scroll}))},__onPageResize({height:t,width:e}){let i=!1;this.height!==t&&(i=!0,this.height=t,void 0!==this.qListeners["scroll-height"]&&this.$emit("scroll-height",t),this.__updateScrollbarWidth()),this.width!==e&&(i=!0,this.width=e),!0===i&&void 0!==this.qListeners.resize&&this.$emit("resize",{height:t,width:e})},__onContainerResize({height:t}){this.containerHeight!==t&&(this.containerHeight=t,this.__updateScrollbarWidth())},__updateScrollbarWidth(){if(!0===this.container){const t=this.height>this.containerHeight?getScrollbarWidth():0;this.scrollbarWidth!==t&&(this.scrollbarWidth=t)}},__updateScrollEvent(t){void 0!==this.timerScrollbar&&"remove"===t&&(clearTimeout(this.timerScrollbar),this.__restoreScrollbar()),window[`${t}EventListener`]("resize",this.__hideScrollbar)},__hideScrollbar(){if(void 0===this.timerScrollbar){const{offsetHeight:t,classList:e}=document.body;if(t>this.$q.screen.height)return;e.add("hide-scrollbar")}else clearTimeout(this.timerScrollbar);this.timerScrollbar=setTimeout(this.__restoreScrollbar,200)},__restoreScrollbar(){this.timerScrollbar=void 0,document.body.classList.remove("hide-scrollbar")}}}),QMarkupTable=Vue__default.default.extend({name:"QMarkupTable",mixins:[DarkMixin,ListenersMixin],props:{dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:t=>["horizontal","vertical","cell","none"].includes(t)},wrapCells:Boolean},computed:{classes(){return`q-table--${this.separator}-separator`+` q-table--${this.darkSuffix} q-table__card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.dense?" q-table--dense":"")+(!0===this.flat?" q-table--flat":"")+(!0===this.bordered?" q-table--bordered":"")+(!0===this.square?" q-table--square":"")+(!1===this.wrapCells?" q-table--no-wrap":"")}},render(t){return t("div",{staticClass:"q-markup-table q-table__container q-table__card",class:this.classes,on:{...this.qListeners}},[t("table",{staticClass:"q-table"},slot(this,"default"))])}}),QNoSsr=Vue__default.default.extend({name:"QNoSsr",mixins:[CanRenderMixin,TagMixin,ListenersMixin],props:{placeholder:String},render(t){const e={on:{...this.qListeners}};if(!0===this.canRender){const i=slot(this,"default");return void 0===i?i:i.length>1?t(this.tag,e,i):i[0]}e.staticClass="q-no-ssr-placeholder";const i=slot(this,"placeholder");return void 0!==i?i.length>1?t(this.tag,e,i):i[0]:void 0!==this.placeholder?t(this.tag,e,[this.placeholder]):void 0}}),QRadio=Vue__default.default.extend({name:"QRadio",mixins:[DarkMixin,OptionSizeMixin,FormMixin,RefocusTargetMixin],props:{value:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},computed:{isTrue(){return this.value===this.val},classes(){return"q-radio cursor-pointer no-outline row inline no-wrap items-center"+(!0===this.disable?" disabled":"")+` q-radio--${this.darkSuffix}`+(!0===this.dense?" q-radio--dense":"")+(!0===this.leftLabel?" reverse":"")},innerClass(){const t=void 0===this.color||!0!==this.keepColor&&!0!==this.isTrue?"":` text-${this.color}`;return`q-radio__inner--${!0===this.isTrue?"truthy":"falsy"}${t}`},computedIcon(){return!0===this.isTrue?this.checkedIcon:this.uncheckedIcon},computedTabindex(){return!0===this.disable?-1:this.tabindex||0},formAttrs(){const t={type:"radio"};return void 0!==this.name&&Object.assign(t,{name:this.name,value:this.val}),t},formDomProps(){if(void 0!==this.name&&!0===this.isTrue)return{checked:!0}},attrs(){const t={tabindex:this.computedTabindex,role:"radio","aria-label":this.label,"aria-checked":!0===this.isTrue?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{set(t){void 0!==t&&(stopAndPrevent(t),this.__refocusTarget(t)),!0!==this.disable&&!0!==this.isTrue&&this.$emit("input",this.val,t)}},render(t){const e=void 0!==this.computedIcon?[t("div",{key:"icon",staticClass:"q-radio__icon-container absolute-full flex flex-center no-wrap"},[t(QIcon,{staticClass:"q-radio__icon",props:{name:this.computedIcon}})])]:[t("svg",{key:"svg",staticClass:"q-radio__bg absolute non-selectable",attrs:{focusable:"false",viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12"}}),t("path",{staticClass:"q-radio__check",attrs:{d:"M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6"}})])];!0!==this.disable&&this.__injectFormInput(e,"unshift","q-radio__native q-ma-none q-pa-none");const i=[t("div",{staticClass:"q-radio__inner relative-position",class:this.innerClass,style:this.sizeStyle,attrs:{"aria-hidden":"true"}},e)];void 0!==this.__refocusTargetEl&&i.push(this.__refocusTargetEl);const s=void 0!==this.label?mergeSlot([this.label],this,"default"):slot(this,"default");return void 0!==s&&i.push(t("div",{staticClass:"q-radio__label q-anchor--skip"},s)),t("div",{key:"inpExt",class:this.classes,attrs:this.attrs,on:cache(this,"inpExt",{click:this.set,keydown:t=>{13!==t.keyCode&&32!==t.keyCode||stopAndPrevent(t)},keyup:t=>{13!==t.keyCode&&32!==t.keyCode||this.set(t)}})},i)}}),QToggle=Vue__default.default.extend({name:"QToggle",mixins:[CheckboxMixin],props:{icon:String,iconColor:String},computed:{computedIcon(){return(!0===this.isTrue?this.checkedIcon:!0===this.isIndeterminate?this.indeterminateIcon:this.uncheckedIcon)||this.icon},computedIconColor(){if(!0===this.isTrue)return this.iconColor}},methods:{__getInner(t){return[t("div",{staticClass:"q-toggle__track"}),t("div",{staticClass:"q-toggle__thumb absolute flex flex-center no-wrap"},void 0!==this.computedIcon?[t(QIcon,{props:{name:this.computedIcon,color:this.computedIconColor}})]:void 0)]}},created(){this.type="toggle"}});const components$1={radio:QRadio,checkbox:QCheckbox,toggle:QToggle},typeValues=Object.keys(components$1);var QOptionGroup=Vue__default.default.extend({name:"QOptionGroup",mixins:[DarkMixin,ListenersMixin],props:{value:{required:!0},options:{type:Array,validator:t=>t.every(t=>"value"in t&&"label"in t)},name:String,type:{default:"radio",validator:t=>typeValues.includes(t)},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean},computed:{component(){return components$1[this.type]},model(){return Array.isArray(this.value)?this.value.slice():this.value},classes(){return"q-option-group q-gutter-x-sm"+(!0===this.inline?" q-option-group--inline":"")},attrs(){if("radio"===this.type){const t={role:"radiogroup"};return!0===this.disable&&(t["aria-disabled"]="true"),t}return{role:"group"}}},methods:{__update(t){this.$emit("input",t)}},created(){const t=Array.isArray(this.value);"radio"===this.type?t&&console.error("q-option-group: model should not be array"):!1===t&&console.error("q-option-group: model should be array in your case")},render(t){return t("div",{class:this.classes,attrs:this.attrs,on:{...this.qListeners}},this.options.map((e,i)=>{const s=void 0!==this.$scopedSlots["label-"+i]?this.$scopedSlots["label-"+i](e):void 0!==this.$scopedSlots.label?this.$scopedSlots.label(e):void 0;return t("div",[t(this.component,{key:"inp",props:{value:this.value,val:e.value,name:void 0===e.name?this.name:e.name,disable:this.disable||e.disable,label:void 0===s?e.label:void 0,leftLabel:void 0===e.leftLabel?this.leftLabel:e.leftLabel,color:void 0===e.color?this.color:e.color,checkedIcon:e.checkedIcon,uncheckedIcon:e.uncheckedIcon,dark:void 0===e.dark?this.dark:e.dark,size:void 0===e.size?this.size:e.size,dense:this.dense,keepColor:void 0===e.keepColor?this.keepColor:e.keepColor},on:cache(this,"inp",{input:this.__update})},s)])}))}}),QPage=Vue__default.default.extend({name:"QPage",mixins:[ListenersMixin],inject:{pageContainer:{default(){console.error("QPage needs to be child of QPageContainer")}},layout:{}},props:{padding:Boolean,styleFn:Function},computed:{style(){const t=(!0===this.layout.header.space?this.layout.header.size:0)+(!0===this.layout.footer.space?this.layout.footer.size:0);if("function"==typeof this.styleFn){const e=!0===this.layout.container?this.layout.containerHeight:this.$q.screen.height;return this.styleFn(t,e)}return{minHeight:!0===this.layout.container?this.layout.containerHeight-t+"px":0===this.$q.screen.height?`calc(100vh - ${t}px)`:this.$q.screen.height-t+"px"}},classes(){if(!0===this.padding)return"q-layout-padding"}},render(t){return t("main",{staticClass:"q-page",style:this.style,class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QPageContainer=Vue__default.default.extend({name:"QPageContainer",mixins:[ListenersMixin],inject:{layout:{default(){console.error("QPageContainer needs to be child of QLayout")}}},provide:{pageContainer:!0},computed:{style(){const t={};return!0===this.layout.header.space&&(t.paddingTop=`${this.layout.header.size}px`),!0===this.layout.right.space&&(t[`padding${!0===this.$q.lang.rtl?"Left":"Right"}`]=`${this.layout.right.size}px`),!0===this.layout.footer.space&&(t.paddingBottom=`${this.layout.footer.size}px`),!0===this.layout.left.space&&(t[`padding${!0===this.$q.lang.rtl?"Right":"Left"}`]=`${this.layout.left.size}px`),t}},render(t){return t("div",{staticClass:"q-page-container",style:this.style,on:{...this.qListeners}},slot(this,"default"))}}),QPageSticky=Vue__default.default.extend({name:"QPageSticky",mixins:[ListenersMixin],inject:{layout:{default(){console.error("QPageSticky needs to be child of QLayout")}}},props:{position:{type:String,default:"bottom-right",validator:t=>["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)},offset:{type:Array,validator:t=>2===t.length},expand:Boolean},computed:{attach(){const t=this.position;return{top:t.indexOf("top")>-1,right:t.indexOf("right")>-1,bottom:t.indexOf("bottom")>-1,left:t.indexOf("left")>-1,vertical:"top"===t||"bottom"===t,horizontal:"left"===t||"right"===t}},top(){return this.layout.header.offset},right(){return this.layout.right.offset},bottom(){return this.layout.footer.offset},left(){return this.layout.left.offset},style(){let t=0,e=0;const i=this.attach,s=!0===this.$q.lang.rtl?-1:1;!0===i.top&&0!==this.top?e=`${this.top}px`:!0===i.bottom&&0!==this.bottom&&(e=`${-this.bottom}px`),!0===i.left&&0!==this.left?t=`${s*this.left}px`:!0===i.right&&0!==this.right&&(t=`${-s*this.right}px`);const o={transform:`translate(${t}, ${e})`};return this.offset&&(o.margin=`${this.offset[1]}px ${this.offset[0]}px`),!0===i.vertical?(0!==this.left&&(o[!0===this.$q.lang.rtl?"right":"left"]=`${this.left}px`),0!==this.right&&(o[!0===this.$q.lang.rtl?"left":"right"]=`${this.right}px`)):!0===i.horizontal&&(0!==this.top&&(o.top=`${this.top}px`),0!==this.bottom&&(o.bottom=`${this.bottom}px`)),o},classes(){return`fixed-${this.position} q-page-sticky--${!0===this.expand?"expand":"shrink"}`}},render(t){const e=slot(this,"default");return t("div",{staticClass:"q-page-sticky row flex-center",class:this.classes,style:this.style,on:{...this.qListeners}},!0===this.expand?e:[t("div",e)])}}),QPageScroller=Vue__default.default.extend({name:"QPageScroller",mixins:[QPageSticky],props:{scrollOffset:{type:Number,default:1e3},reverse:Boolean,duration:{type:Number,default:300},offset:{default:()=>[18,18]}},inject:{layout:{default(){console.error("QPageScroller needs to be used within a QLayout")}}},data(){return{showing:this.__isVisible()}},computed:{scrollHeight(){return this.layout.height-(!0===this.layout.container?this.layout.containerHeight:this.$q.screen.height)},onEvents(){return{...this.qListeners,click:this.__onClick}}},watch:{"layout.scroll.position"(){this.__updateVisibility()},reverse:{handler(t){!0===t?void 0===this.heightWatcher&&(this.heightWatcher=this.$watch("scrollHeight",this.__updateVisibility)):void 0!==this.heightWatcher&&this.__cleanup()},immediate:!0}},methods:{__isVisible(){return!0===this.reverse?this.scrollHeight-this.layout.scroll.position>this.scrollOffset:this.layout.scroll.position>this.scrollOffset},__onClick(t){const e=getScrollTarget(!0===this.layout.container?this.$el:this.layout.$el);setScrollPosition(e,!0===this.reverse?this.layout.height:0,this.duration),this.$emit("click",t)},__updateVisibility(){const t=this.__isVisible();this.showing!==t&&(this.showing=t)},__cleanup(){this.heightWatcher(),this.heightWatcher=void 0}},render(t){return t("transition",{props:{name:"q-transition--fade"}},!0===this.showing?[t("div",{staticClass:"q-page-scroller",on:this.onEvents},[QPageSticky.options.render.call(this,t)])]:null)},beforeDestroy(){void 0!==this.heightWatcher&&this.__cleanup()}});function getBool(t,e){return[!0,!1].includes(t)?t:e}var QPagination=Vue__default.default.extend({name:"QPagination",mixins:[DarkMixin,ListenersMixin],props:{value:{type:Number,required:!0},min:{type:[Number,String],default:1},max:{type:[Number,String],required:!0},maxPages:{type:[Number,String],default:0,validator:t=>("string"==typeof t?parseInt(t,10):t)>=0},inputStyle:[Array,String,Object],inputClass:[Array,String,Object],size:String,disable:Boolean,input:Boolean,iconPrev:String,iconNext:String,iconFirst:String,iconLast:String,toFn:Function,boundaryLinks:{type:Boolean,default:null},boundaryNumbers:{type:Boolean,default:null},directionLinks:{type:Boolean,default:null},ellipses:{type:Boolean,default:null},ripple:{type:[Boolean,Object],default:null},round:Boolean,rounded:Boolean,flat:Boolean,outline:Boolean,unelevated:Boolean,push:Boolean,glossy:Boolean,color:{type:String,default:"primary"},textColor:String,activeDesign:{type:String,default:"",values:t=>""===t||btnDesignOptions.includes(t)},activeColor:String,activeTextColor:String,gutter:String,padding:{type:String,default:"3px 2px"}},data:()=>({newPage:null}),watch:{min(){this.model=this.value},max(){this.model=this.value}},computed:{model:{get(){return this.value},set(t){if(t=parseInt(t,10),this.disable||isNaN(t))return;const e=between(t,this.__min,this.__max);this.$emit("input",e)}},inputPlaceholder(){return this.model+" / "+this.__max},__min(){return parseInt(this.min,10)},__max(){return parseInt(this.max,10)},__maxPages(){return parseInt(this.maxPages,10)},__boundaryLinks(){return getBool(this.boundaryLinks,this.input)},__boundaryNumbers(){return getBool(this.boundaryNumbers,!this.input)},__directionLinks(){return getBool(this.directionLinks,this.input)},__ellipses(){return getBool(this.ellipses,!this.input)},__gutter(){return this.gutter in btnPadding?`${btnPadding[this.gutter]}px`:this.gutter||null},__gutterStyle(){return null!==this.__gutter?`--q-pagination-gutter-parent:-${this.__gutter};--q-pagination-gutter-child:${this.__gutter}`:null},__btnDesign(){return getBtnDesign(this,"flat")},__btnActiveDesign(){const t={[this.__btnDesign]:!1};return""!==this.activeDesign&&(t[this.activeDesign]=!0),t},icons(){const t=[this.iconFirst||this.$q.iconSet.pagination.first,this.iconPrev||this.$q.iconSet.pagination.prev,this.iconNext||this.$q.iconSet.pagination.next,this.iconLast||this.$q.iconSet.pagination.last];return!0===this.$q.lang.rtl?t.reverse():t},attrs(){const t={role:"navigation"};return!0===this.disable&&(t["aria-disabled"]="true"),t},btnProps(){return{[this.__btnDesign]:!0,round:this.round,rounded:this.rounded,padding:this.padding,color:this.color,textColor:this.textColor,size:this.size,ripple:null===this.ripple||this.ripple}},activeBtnProps(){return{...this.__btnActiveDesign,color:this.activeColor||this.color,textColor:this.activeTextColor||this.textColor}},btnConfig(){let t=Math.max(this.__maxPages,1+(this.__ellipses?2:0)+(this.__boundaryNumbers?2:0));const e={pgFrom:this.__min,pgTo:this.__max,ellipsesStart:!1,ellipsesEnd:!1,boundaryStart:!1,boundaryEnd:!1,marginalStyle:{minWidth:`${Math.max(2,String(this.__max).length)}em`}};return this.__maxPages&&tthis.__min+(this.__boundaryNumbers?1:0)&&(e.ellipsesStart=!0,e.pgFrom++),this.__boundaryNumbers&&(e.boundaryEnd=!0,e.pgTo--),this.__ellipses&&e.pgTo{this.model=this.newPage,this.newPage=null};return{input:t=>{this.newPage=t},keyup:e=>{!0===isKeyCode(e,13)&&t()},blur:t}}},methods:{set(t){this.model=t},setByOffset(t){this.model=this.model+t},__getBtn(t,e,i,s,o){return e.props={...this.btnProps,...i},e.attrs={"aria-label":s,"aria-current":"false",...e.attrs},!0===o&&(Object.assign(e.props,this.activeBtnProps),e.attrs["aria-current"]="true"),void 0!==s&&(void 0!==this.toFn?e.props.to=this.toFn(s):e.on={click:()=>{this.set(s)}}),t(QBtn,e)}},render(t){const e=[],i=[];let s;if(!0===this.__boundaryLinks&&(e.push(this.__getBtn(t,{key:"bls"},{disable:this.disable||this.value<=this.__min,icon:this.icons[0]},this.__min)),i.unshift(this.__getBtn(t,{key:"ble"},{disable:this.disable||this.value>=this.__max,icon:this.icons[3]},this.__max))),!0===this.__directionLinks&&(e.push(this.__getBtn(t,{key:"bdp"},{disable:this.disable||this.value<=this.__min,icon:this.icons[1]},this.value-1)),i.unshift(this.__getBtn(t,{key:"bdn"},{disable:this.disable||this.value>=this.__max,icon:this.icons[2]},this.value+1))),!0!==this.input){s=[];const{pgFrom:o,pgTo:n,marginalStyle:r}=this.btnConfig;if(!0===this.btnConfig.boundaryStart){const i=this.__min===this.value;e.push(this.__getBtn(t,{key:"bns",style:r},{disable:this.disable,label:this.__min},this.__min,i))}if(!0===this.btnConfig.boundaryEnd){const e=this.__max===this.value;i.unshift(this.__getBtn(t,{key:"bne",style:r},{disable:this.disable,label:this.__max},this.__max,e))}!0===this.btnConfig.ellipsesStart&&e.push(this.__getBtn(t,{key:"bes",style:r},{disable:this.disable,label:"…",ripple:!1},o-1)),!0===this.btnConfig.ellipsesEnd&&i.unshift(this.__getBtn(t,{key:"bee",style:r},{disable:this.disable,label:"…",ripple:!1},n+1));for(let e=o;e<=n;e++)s.push(this.__getBtn(t,{key:`bpg${e}`,style:r},{disable:this.disable,label:e},e,e===this.value))}return t("div",{staticClass:"q-pagination row no-wrap items-center",class:{disabled:this.disable},attrs:this.attrs,on:{...this.qListeners}},[t("div",{staticClass:"q-pagination__content row no-wrap items-center",style:this.__gutterStyle},[...e,t("div",{key:"stop",staticClass:"q-pagination__middle row justify-center",on:!0===this.input?cache(this,"stop",{input:stop}):null},!0===this.input?[t(QInput,{key:"inp",staticClass:"inline",style:{width:`${this.inputPlaceholder.length/1.5}em`},props:{type:"number",dense:!0,value:this.newPage,disable:this.disable,dark:this.dark,borderless:!0,inputClass:this.inputClass,inputStyle:this.inputStyle},attrs:{placeholder:this.inputPlaceholder,min:this.__min,max:this.__max},on:{...this.inputEvents}})]:s),...i])])}});function frameDebounce(t){let e,i,s=!1;function o(){i=arguments,!0!==s&&(s=!0,e=requestAnimationFrame(()=>{t.apply(this,i),i=void 0,s=!1}))}return o.cancel=(()=>{window.cancelAnimationFrame(e),s=!1}),o}const{passive:passive}=listenOpts;var QParallax=Vue__default.default.extend({name:"QParallax",mixins:[ListenersMixin],props:{src:String,height:{type:Number,default:500},speed:{type:Number,default:1,validator:t=>t>=0&&t<=1},scrollTarget:{default:void 0}},data:()=>({scrolling:!1,percentScrolled:0}),watch:{height(){!0===this.working&&this.__updatePos()},scrollTarget(){!0===this.working&&(this.__stop(),this.__start())}},methods:{__update(t){this.percentScrolled=t,void 0!==this.qListeners.scroll&&this.$emit("scroll",t)},__updatePos(){let t,e,i;this.__scrollTarget===window?(t=0,i=e=window.innerHeight):i=(t=offset(this.__scrollTarget).top)+(e=height(this.__scrollTarget));const s=offset(this.$el).top,o=s+this.height;if(void 0!==this.observer||o>t&&s{this[!0===t[0].isIntersecting?"__start":"__stop"]()}),this.observer.observe(this.$el)):this.__start()},beforeDestroy(){this.__stop(),void 0!==this.observer&&this.observer.disconnect(),this.media.onload=this.media.onloadstart=this.media.loadedmetadata=null}});function cloneDeep(t,e=new WeakMap){if(Object(t)!==t)return t;if(e.has(t))return e.get(t);const i=t instanceof Date?new Date(t):t instanceof RegExp?new RegExp(t.source,t.flags):t instanceof Set?new Set:t instanceof Map?new Map:"function"!=typeof t.constructor?Object.create(null):void 0!==t.prototype&&"function"==typeof t.prototype.constructor?t:new t.constructor;if("function"==typeof t.constructor&&"function"==typeof t.valueOf){const i=t.valueOf();if(Object(i)!==i){const s=new t.constructor(i);return e.set(t,s),s}}return e.set(t,i),t instanceof Set?t.forEach(t=>{i.add(cloneDeep(t,e))}):t instanceof Map&&t.forEach((t,s)=>{i.set(s,cloneDeep(t,e))}),Object.assign(i,...Object.keys(t).map(i=>({[i]:cloneDeep(t[i],e)})))}var QPopupEdit=Vue__default.default.extend({name:"QPopupEdit",mixins:[AttrsMixin],props:{value:{required:!0},title:String,buttons:Boolean,labelSet:String,labelCancel:String,color:{type:String,default:"primary"},validate:{type:Function,default:()=>!0},autoSave:Boolean,cover:{type:Boolean,default:!0},contentClass:String,disable:Boolean},data:()=>({modelChanged:!1,model:null}),computed:{classes(){return"q-popup-edit"+(void 0!==this.contentClass?` ${this.contentClass}`:"")},modelValue(){return!0===this.modelChanged?this.model:this.value},initialValue(){return!0!==this.modelChanged?this.model:this.value},defaultSlotScope(){return injectProp({initialValue:this.initialValue,updatePosition:this.__reposition,emitValue:this.__changeModel,validate:this.validate,set:this.set,cancel:this.cancel},"value",()=>this.modelValue,this.__changeModel)},menuProps(){return{...this.qAttrs,cover:this.cover,contentClass:this.classes}}},methods:{set(){!0===this.validate(this.modelValue)&&(!0===this.__hasChanged()&&(this.$emit("save",this.modelValue,this.initialValue),!0===this.modelChanged&&this.$emit("input",this.modelValue)),this.__close())},cancel(){!0===this.__hasChanged()&&(this.$emit("cancel",this.modelValue,this.initialValue),!0!==this.modelChanged&&this.$emit("input",this.initialValue)),this.__close()},show(t){void 0!==this.$refs.menu&&this.$refs.menu.show(t)},hide(t){void 0!==this.$refs.menu&&this.$refs.menu.hide(t)},__hasChanged(){return!1===isDeepEqual(this.modelValue,this.initialValue)},__changeModel(t){!0!==this.disable&&(this.model=t,this.modelChanged=!0)},__close(){this.validated=!0,!0===this.$refs.menu.showing&&this.$refs.menu.hide()},__reposition(){this.$nextTick(()=>{this.$refs.menu.updatePosition()})},__getContent(t){const e=slot(this,"title",this.title),i=void 0===this.$scopedSlots.default?[]:[].concat(this.$scopedSlots.default(this.defaultSlotScope));return e&&i.unshift(t("div",{staticClass:"q-dialog__title q-mt-sm q-mb-sm"},[e])),!0===this.buttons&&i.push(t("div",{staticClass:"q-popup-edit__buttons row justify-center no-wrap"},[t(QBtn,{key:"cancel",props:{flat:!0,color:this.color,label:this.labelCancel||this.$q.lang.label.cancel},on:cache(this,"cancel",{click:this.cancel})}),t(QBtn,{key:"ok",props:{flat:!0,color:this.color,label:this.labelSet||this.$q.lang.label.set},on:cache(this,"ok",{click:this.set})})])),i}},render(t){if(!0!==this.disable)return t(QMenu,{key:"menu",ref:"menu",props:this.menuProps,on:cache(this,"menu",{"before-show":()=>{this.validated=!1,this.modelChanged=!1,this.model=cloneDeep(this.value),this.watcher=this.$watch("value",this.__reposition),this.$emit("before-show")},show:()=>{this.$emit("show")},"escape-key":this.cancel,"before-hide":()=>{this.watcher(),!1===this.validated&&!0===this.__hasChanged()&&(!0===this.autoSave&&!0===this.validate(this.model)?(this.$emit("save",this.modelValue,this.initialValue),!0===this.modelChanged&&this.$emit("input",this.modelValue)):(this.$emit("cancel",this.modelValue,this.initialValue),!0!==this.modelChanged&&this.$emit("input",this.initialValue))),this.$emit("before-hide")},hide:()=>{this.$emit("hide")},keyup:t=>{!0===isKeyCode(t,13)&&this.set()}})},this.__getContent(t))}}),QPopupProxy=Vue__default.default.extend({name:"QPopupProxy",mixins:[AttrsMixin,ListenersMixin,AnchorMixin],props:{breakpoint:{type:[String,Number],default:450}},data(){const t=parseInt(this.breakpoint,10);return{type:this.$q.screen.width({state:"pull",pullRatio:0,pulling:!1,pullPosition:-40,animating:!1,positionCSS:{}}),computed:{style(){return{opacity:this.pullRatio,transform:`translateY(${this.pullPosition}px) rotate(${360*this.pullRatio}deg)`}},classes(){return"q-pull-to-refresh__puller row flex-center"+(!0===this.animating?" q-pull-to-refresh__puller--animating":"")+(void 0!==this.bgColor?` bg-${this.bgColor}`:"")},directives(){if(!0!==this.disable){const t={down:!0};return!0!==this.noMouse&&(t.mouse=!0),[{name:"touch-pan",modifiers:t,value:this.__pull}]}},contentClass(){return`q-pull-to-refresh__content${!0===this.pulling?" no-pointer-events":""}`}},watch:{scrollTarget(){this.updateScrollTarget()}},methods:{trigger(){this.$emit("refresh",()=>{this.__animateTo({pos:-40,ratio:0},()=>{this.state="pull"})})},updateScrollTarget(){this.__scrollTarget=getScrollTarget(this.$el,this.scrollTarget)},__pull(t){if(!0===t.isFinal)return void(!0===this.pulling&&(this.pulling=!1,"pulled"===this.state?(this.state="refreshing",this.__animateTo({pos:20}),this.trigger()):"pull"===this.state&&this.__animateTo({pos:-40,ratio:0})));if(!0===this.animating||"refreshing"===this.state)return!1;if(!0===t.isFirst){if(0!==getScrollPosition(this.__scrollTarget)||"down"!==t.direction)return!0===this.pulling&&(this.pulling=!1,this.state="pull",this.__animateTo({pos:-40,ratio:0})),!1;this.pulling=!0;const{top:e,left:i}=this.$el.getBoundingClientRect();this.positionCSS={top:e+"px",left:i+"px",width:window.getComputedStyle(this.$el).getPropertyValue("width")}}prevent(t.evt);const e=Math.min(140,Math.max(0,t.distance.y));this.pullPosition=e-40,this.pullRatio=between(e/60,0,1);const i=this.pullPosition>20?"pulled":"pull";this.state!==i&&(this.state=i)},__animateTo({pos:t,ratio:e},i){this.animating=!0,this.pullPosition=t,void 0!==e&&(this.pullRatio=e),clearTimeout(this.timer),this.timer=setTimeout(()=>{this.animating=!1,i&&i()},300)}},mounted(){this.updateScrollTarget()},beforeDestroy(){clearTimeout(this.timer)},render(t){return t("div",{staticClass:"q-pull-to-refresh",on:{...this.qListeners},directives:this.directives},[t("div",{class:this.contentClass},slot(this,"default")),t("div",{staticClass:"q-pull-to-refresh__puller-container fixed row flex-center no-pointer-events z-top",style:this.positionCSS},[t("div",{style:this.style,class:this.classes},["refreshing"!==this.state?t(QIcon,{props:{name:this.icon||this.$q.iconSet.pullToRefresh.icon,color:this.color,size:"32px"}}):t(QSpinner,{props:{size:"24px",color:this.color}})])])])}});const dragType={MIN:0,RANGE:1,MAX:2};var QRange=Vue__default.default.extend({name:"QRange",mixins:[SliderMixin],props:{value:{type:Object,default:()=>({min:null,max:null}),validator:t=>"min"in t&&"max"in t},dragRange:Boolean,dragOnlyRange:Boolean,leftLabelColor:String,leftLabelTextColor:String,rightLabelColor:String,rightLabelTextColor:String,leftLabelValue:[String,Number],rightLabelValue:[String,Number],leftThumbColor:String,rightThumbColor:String},data(){return{model:{min:null===this.value.min?this.__getInnerMin():between(this.value.min,this.min,this.max),max:null===this.value.max?this.__getInnerMax():between(this.value.max,this.min,this.max)},curMinRatio:0,curMaxRatio:0}},computed:{canDragRange(){return!0===this.dragRange||!0===this.dragOnlyRange},modelMinRatio(){return this.__convertModelToRatio(this.model.min)},modelMaxRatio(){return this.__convertModelToRatio(this.model.max)},ratioMin(){return!0===this.active?this.curMinRatio:this.modelMinRatio},ratioMax(){return!0===this.active?this.curMaxRatio:this.modelMaxRatio},selectionBarStyle(){const t=Math.max(this.ratioMin,this.innerMinRatio),e={[this.positionProp]:`${100*t}%`,[this.sizeProp]:`${100*(between(this.ratioMax,t,this.innerMaxRatio)-t)}%`};return void 0!==this.selectionImg&&(e.backgroundImage=`url(${this.selectionImg}) !important`),e},trackContainerAttrs(){return!0!==this.$q.platform.is.mobile?{tabindex:!1!==this.canDragRange?this.computedTabindex:-1}:void 0},trackContainerEvents(){return!0!==this.editable?{}:!0===this.$q.platform.is.mobile?{click:this.__onMobileClick}:{mousedown:this.__onActivate,focus:()=>{this.focus="both"},blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}},thumbAttrs(){return{tabindex:!0!==this.dragOnlyRange?this.computedTabindex:null}},thumbMinEvents(){return this.__getEvents("min")},thumbMaxEvents(){return this.__getEvents("max")},thumbMinLabel(){return void 0!==this.leftLabelValue?this.leftLabelValue:this.value.minthis.max?this.value.min:this.model.min},thumbMaxLabel(){return void 0!==this.rightLabelValue?this.rightLabelValue:this.value.maxthis.max?this.value.max:this.model.max},thumbMinClasses(){const t=this.leftThumbColor||this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.value.minthis.max?" q-slider__thumb--wrong-value":"")+(!1!==this.preventFocus||"min"!==this.focus&&"both"!==this.focus?"":" q-slider--focus")+(void 0!==t?` text-${t}`:"")},thumbMaxClasses(){const t=this.rightThumbColor||this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.value.maxthis.max?" q-slider__thumb--hidden":"")+(!1!==this.preventFocus||"max"!==this.focus&&"both"!==this.focus?"":" q-slider--focus")+(void 0!==t?` text-${t}`:"")},thumbMinStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratioMin}%`,zIndex:"min"===this.focus?2:void 0}},thumbMaxStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratioMax}%`,zIndex:"max"===this.focus?2:void 0}},thumbMinPinColor(){const t=this.leftLabelColor||this.labelColor;return void 0!==t?` text-${t}`:""},thumbMaxPinColor(){const t=this.rightLabelColor||this.labelColor;return void 0!==t?` text-${t}`:""},thumbMinTextContainerStyle(){return this.__getTextContainerStyle(this.ratioMin)},thumbMaxTextContainerStyle(){return this.__getTextContainerStyle(this.ratioMax)},thumbMinTextClass(){const t=this.leftLabelTextColor||this.labelTextColor;return"q-slider__text"+(void 0!==t?` text-${t}`:"")},thumbMaxTextClass(){const t=this.rightLabelTextColor||this.labelTextColor;return"q-slider__text"+(void 0!==t?` text-${t}`:"")},formAttrs(){return{type:"hidden",name:this.name,value:`${this.value.min}|${this.value.max}`}},modelUpdate(){return[this.value.min,this.value.max,this.min,this.max,this.innerMin,this.innerMax].join("#")}},watch:{modelUpdate(){this.model.min=null===this.value.min?this.computedInnerMin:between(this.value.min,this.min,this.max),this.model.max=null===this.value.max?this.computedInnerMax:between(this.value.max,this.min,this.max)},focus(t){if("both"===t&&!0!==this.canDragRange){if(!0!==this.$q.platform.is.mobile){const t=this.$refs[`${this.nextFocus}Thumb`];void 0!==t&&t.focus()}}else!1!==t&&t!==this.nextFocus&&(this.nextFocus=t)}},methods:{__updateValue(t){this.model.min===this.value.min&&this.model.max===this.value.max||this.$emit("input",{...this.model}),!0===t&&this.$emit("change",{...this.model})},__getDragging(t){const{left:e,top:i,width:s,height:o}=this.$el.getBoundingClientRect(),n=!0===this.dragOnlyRange?0:(!0===this.vertical?this.$refs.minThumb.offsetHeight/(2*o):this.$refs.minThumb.offsetWidth/(2*s))+(this.modelMaxRatio-this.modelMinRatio)/20,r={left:e,top:i,width:s,height:o,valueMin:this.model.min,valueMax:this.model.max,ratioMin:this.modelMinRatio,ratioMax:this.modelMaxRatio},a=this.__getDraggingRatio(t,r);return!0!==this.dragOnlyRange&&a=e.ratioMin?(i={minR:e.ratioMin,maxR:s,min:e.valueMin,max:o},this.focus="max"):(i={minR:s,maxR:e.ratioMin,min:o,max:e.valueMin},this.focus="min");break;case dragType.RANGE:const t=s-e.offsetRatio,n=between(e.ratioMin+t,this.innerMinRatio,this.innerMaxRatio-e.rangeRatio),r=o-e.offsetModel,a=between(e.valueMin+r,this.computedInnerMin,this.computedInnerMax-e.rangeValue);i={minR:n,maxR:n+e.rangeRatio,min:parseFloat(a.toFixed(this.computedDecimals)),max:parseFloat((a+e.rangeValue).toFixed(this.computedDecimals))},this.focus="both"}const n="min"===this.focus&&i.max>=this.computedInnerMin&&i.max<=this.computedInnerMax||"max"===this.focus&&i.min>=this.computedInnerMin&&i.min<=this.computedInnerMax?this.focus:null;this.model={min:"max"!==n?between(i.min,this.computedInnerMin,this.computedInnerMax):i.min,max:"min"!==n?between(i.max,this.computedInnerMin,this.computedInnerMax):i.max},null!==this.model.min&&null!==this.model.max||(this.model.min=i.min||this.computedInnerMin,this.model.max=i.max||this.computedInnerMax),!0!==this.snap||0===this.step?(this.curMinRatio="max"!==n?between(i.minR,this.innerMinRatio,this.innerMaxRatio):i.minR,this.curMaxRatio="min"!==n?between(i.maxR,this.innerMinRatio,this.innerMaxRatio):i.maxR):(this.curMinRatio=this.__convertModelToRatio(this.model.min),this.curMaxRatio=this.__convertModelToRatio(this.model.max))},__getEvents(t){return!0!==this.$q.platform.is.mobile&&!0===this.editable&&!0!==this.dragOnlyRange?{focus:()=>{this.focus=t},blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}:{}},__onKeydown(t){if(!keyCodes$3.includes(t.keyCode))return;const e="both"===this.focus&&!0!==this.canDragRange;if(!1!==this.focus&&!0!==e||(this.focus=this.nextFocus),stopAndPrevent(t),!0===this.dragOnlyRange||!0===this.dragRange&&"both"===this.focus){const e=this.model.max-this.model.min,i=between(parseFloat((this.model.min+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),this.computedInnerMin,this.computedInnerMax-e);this.model={min:i,max:parseFloat((i+e).toFixed(this.computedDecimals))}}else{if("min"!==this.focus&&"max"!==this.focus)return;{const e=this.focus;this.model={...this.model,[e]:between(parseFloat((this.model[e]+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),"min"===e?this.computedInnerMin:this.model.min,"max"===e?this.computedInnerMax:this.model.max)}}}this.__updateValue()}},created(){this.nextFocus="min"},render(t){const e=this.__getContent(t,e=>{const i=this.__getThumb(t,{pinColor:this.thumbMinPinColor,textContainerStyle:this.thumbMinTextContainerStyle,textClass:this.thumbMinTextClass,label:this.thumbMinLabel,classes:this.thumbMinClasses,style:this.thumbMinStyle,nodeData:{ref:"minThumb",key:"tmin",on:this.thumbMinEvents,attrs:this.thumbAttrs}}),s=this.__getThumb(t,{pinColor:this.thumbMaxPinColor,textContainerStyle:this.thumbMaxTextContainerStyle,textClass:this.thumbMaxTextClass,label:this.thumbMaxLabel,classes:this.thumbMaxClasses,style:this.thumbMaxStyle,nodeData:{ref:"maxThumb",key:"tmax",on:this.thumbMaxEvents,attrs:this.thumbAttrs}});!0===this.reverse?e.push(s,i):e.push(i,s)});return t("div",{class:"q-range "+this.classes+(null===this.value.min||null===this.value.max?" q-slider--no-value":""),attrs:{...this.attributes,"aria-valuenow":this.value.min+"|"+this.value.max}},e)}}),QRating=Vue__default.default.extend({name:"QRating",mixins:[SizeMixin,FormMixin,ListenersMixin],directives:{KeyGroupNavigation:KeyGroupNavigation},props:{value:{type:Number,required:!0},max:{type:[String,Number],default:5},icon:[String,Array],iconHalf:[String,Array],iconSelected:[String,Array],iconAriaLabel:[String,Array],color:[String,Array],colorHalf:[String,Array],colorSelected:[String,Array],vertical:Boolean,noReset:Boolean,noDimming:Boolean,readonly:Boolean,disable:Boolean},data:()=>({mouseModel:0}),computed:{editable(){return!0!==this.readonly&&!0!==this.disable},classes(){return`q-rating--${!0===this.editable?"":"non-"}editable`+(!0===this.vertical?" column justify-center":" row items-center")+(!0===this.noDimming?" q-rating--no-dimming":"")+(!0===this.disable?" disabled":"")+(void 0!==this.color&&!1===Array.isArray(this.color)?` text-${this.color}`:"")},iconData(){const t=!0===Array.isArray(this.icon)?this.icon.length:0,e=!0===Array.isArray(this.iconSelected)?this.iconSelected.length:0,i=!0===Array.isArray(this.iconHalf)?this.iconHalf.length:0,s=!0===Array.isArray(this.color)?this.color.length:0,o=!0===Array.isArray(this.colorSelected)?this.colorSelected.length:0,n=!0===Array.isArray(this.colorHalf)?this.colorHalf.length:0;return{iconLen:t,icon:t>0?this.icon[t-1]:this.icon,selIconLen:e,selIcon:e>0?this.iconSelected[e-1]:this.iconSelected,halfIconLen:i,halfIcon:i>0?this.iconHalf[e-1]:this.iconHalf,colorLen:s,color:s>0?this.color[s-1]:this.color,selColorLen:o,selColor:o>0?this.colorSelected[o-1]:this.colorSelected,halfColorLen:n,halfColor:n>0?this.colorHalf[n-1]:this.colorHalf}},iconLabel(){if("string"==typeof this.iconAriaLabel){const t=this.iconAriaLabel.length>0?`${this.iconAriaLabel} `:"";return e=>`${t}${e}`}if(!0===Array.isArray(this.iconAriaLabel)){const t=this.iconAriaLabel.length;if(t>0)return e=>this.iconAriaLabel[Math.min(e,t)-1]}return(t,e)=>`${e} ${t}`},stars(){const t=[],e=this.iconData,i=Math.ceil(this.value),s=!0===this.editable?0:null,o=void 0===this.iconHalf||i===this.value?-1:i;for(let n=1;n<=this.max;n++){const r=this.mouseModel>=n||0===this.mouseModel&&this.value>=n,a=o===n&&this.mouseModel0&&(!0===a?i:this.value)>=n&&this.mouseModel-1&&(this.__set(e),stopAndPrevent(t))}},render(t){const e=[];return this.stars.forEach(({classes:i,name:s,attrs:o},n)=>{const r=n+1;e.push(t("div",{key:"i#"+r,ref:`rt${r}`,staticClass:"q-rating__icon-container flex flex-center",attrs:o,on:cache(this,"i#"+r,{click:()=>{this.__set(r)},mouseover:()=>{this.__setHoverValue(r)},mouseout:()=>{this.mouseModel=0},focus:()=>{this.__setHoverValue(r)},blur:()=>{this.mouseModel=0},keyup:t=>{this.__keyup(t,r)}})},mergeSlot([t(QIcon,{class:i,props:{name:s}})],this,`tip-${r}`)))}),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{staticClass:"q-rating inline",class:this.classes,style:this.sizeStyle,attrs:this.attrs,directives:this.directives,on:{...this.qListeners}},e)}}),QResponsive=Vue__default.default.extend({name:"QResponsive",mixins:[RatioMixin,ListenersMixin],render(t){return t("div",{staticClass:"q-responsive",on:{...this.qListeners}},[t("div",{staticClass:"q-responsive__filler overflow-hidden"},[t("div",{style:this.ratioStyle})]),t("div",{staticClass:"q-responsive__content absolute-full fit"},slot(this,"default"))])}});const getMinThumbSize=t=>t>=250?50:Math.ceil(t/5),axisList=["vertical","horizontal"],dirProps={vertical:{offset:"offsetY",scroll:"scrollTop",dir:"down",dist:"y"},horizontal:{offset:"offsetX",scroll:"scrollLeft",dir:"right",dist:"x"}};var QScrollArea=Vue__default.default.extend({name:"QScrollArea",mixins:[DarkMixin],directives:{TouchPan:TouchPan},props:{thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},horizontal:Boolean,tabindex:[String,Number]},data:()=>({tempShowing:!1,panning:!1,hover:!1,container:{vertical:0,horizontal:0},scroll:{vertical:{position:0,size:0},horizontal:{position:0,size:0}}}),computed:{classes(){return"q-scrollarea"+` q-scrollarea--${this.darkSuffix}`},verticalScrollPercentage(){const t=this.scroll.vertical.size-this.container.vertical;if(t<=0)return 0;const e=between(this.scroll.vertical.position/t,0,1);return Math.round(1e4*e)/1e4},horizontalScrollPercentage(){const t=this.scroll.horizontal.size-this.container.horizontal;if(t<=0)return 0;const e=between(this.scroll.horizontal.position/t,0,1);return Math.round(1e4*e)/1e4},verticalThumbHidden(){return!0!==(null===this.visible?this.hover:this.visible)&&!1===this.tempShowing&&!1===this.panning||this.scroll.vertical.size<=this.container.vertical+1},horizontalThumbHidden(){return!0!==(null===this.visible?this.hover:this.visible)&&!1===this.tempShowing&&!1===this.panning||this.scroll.horizontal.size<=this.container.horizontal+1},verticalThumbStart(){return this.verticalScrollPercentage*(this.container.vertical-this.verticalThumbSize)},horizontalThumbStart(){return this.horizontalScrollPercentage*(this.container.horizontal-this.horizontalThumbSize)},verticalThumbSize(){return Math.round(between(this.container.vertical*this.container.vertical/this.scroll.vertical.size,getMinThumbSize(this.container.vertical),this.container.vertical))},horizontalThumbSize(){return Math.round(between(this.container.horizontal*this.container.horizontal/this.scroll.horizontal.size,getMinThumbSize(this.container.horizontal),this.container.horizontal))},verticalStyle(){return{...this.thumbStyle,...this.verticalThumbStyle,top:`${this.verticalThumbStart}px`,height:`${this.verticalThumbSize}px`}},horizontalStyle(){return{...this.thumbStyle,...this.horizontalThumbStyle,left:`${this.horizontalThumbStart}px`,width:`${this.horizontalThumbSize}px`}},verticalThumbClass(){return"q-scrollarea__thumb q-scrollarea__thumb--v absolute-right"+(!0===this.verticalThumbHidden?" q-scrollarea__thumb--invisible":"")},horizontalThumbClass(){return"q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom"+(!0===this.horizontalThumbHidden?" q-scrollarea__thumb--invisible":"")},verticalBarClass(){return"q-scrollarea__bar q-scrollarea__bar--v absolute-right"+(!0===this.verticalThumbHidden?" q-scrollarea__bar--invisible":"")},horizontalBarClass(){return"q-scrollarea__bar q-scrollarea__bar--h absolute-bottom"+(!0===this.horizontalThumbHidden?" q-scrollarea__bar--invisible":"")},scrollComputed(){return{vertical:{...this.scroll.vertical,percentage:this.verticalScrollPercentage,thumbHidden:this.verticalThumbHidden,thumbStart:this.verticalThumbStart,thumbSize:this.verticalThumbSize,style:this.verticalStyle,thumbClass:this.verticalThumbClass,barClass:this.verticalBarClass},horizontal:{...this.scroll.horizontal,percentage:this.horizontalScrollPercentage,thumbHidden:this.horizontalThumbHidden,thumbStart:this.horizontalThumbStart,thumbSize:this.horizontalThumbSize,style:this.horizontalStyle,thumbClass:this.horizontalThumbClass,barClass:this.horizontalBarClass}}},mainStyle(){return!0===this.verticalThumbHidden&&!0===this.horizontalThumbHidden?this.contentStyle:this.contentActiveStyle},verticalThumbDirectives(){return[{name:"touch-pan",modifiers:{vertical:!0,prevent:!0,mouse:!0,mouseAllDir:!0},value:t=>{this.__panThumb(t,"vertical")}}]},horizontalThumbDirectives(){return[{name:"touch-pan",modifiers:{horizontal:!0,prevent:!0,mouse:!0,mouseAllDir:!0},value:t=>{this.__panThumb(t,"horizontal")}}]},scrollAttrs(){if(void 0!==this.tabindex)return{tabindex:this.tabindex}}},methods:{getScrollTarget(){return this.$refs.target},getScroll(){const t={};return axisList.forEach(e=>{const i=this.scrollComputed[e];t[e+"Position"]=i.position,t[e+"Percentage"]=i.percentage,t[e+"Size"]=i.size,t[e+"ContainerSize"]=this.container[e]}),t},getScrollPosition(t){return"both"===t?{top:this.scroll.vertical.position,left:this.scroll.horizontal.position}:(!0!==axisList.includes(t)&&(t=!0===this.horizontal?"horizontal":"vertical"),this.scroll[t].position)},getScrollPercentage(t){return"both"===t?{top:this.verticalScrollPercentage,left:this.horizontalScrollPercentage}:(!0!==axisList.includes(t)&&(t=!0===this.horizontal?"horizontal":"vertical"),this[`${t}ScrollPercentage`])},setScrollPosition(t,e,i){if(!1===axisList.includes(t)){if(!0===isNaN(t))return void console.error("[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)");[t,e,i]=[!0===this.horizontal?"horizontal":"vertical",t,e]}("vertical"===t?setVerticalScrollPosition:setHorizontalScrollPosition)(this.$refs.target,e,i)},setScrollPercentage(t,e,i){if(!1===axisList.includes(t)){if(!0===isNaN(t))return void console.error("[QScrollArea]: wrong first param of setScrollPercentage (vertical/horizontal)");[t,e,i]=[!0===this.horizontal?"horizontal":"vertical",t,e]}this.setScrollPosition(t,e*(this.scroll[t].size-this.container[t]),i)},__updateContainer({height:t,width:e}){let i=!1;this.container.vertical!==t&&(this.container.vertical=t,i=!0),this.container.horizontal!==e&&(this.container.horizontal=e,i=!0),!0===i&&this.__startTimer()},__updateScroll({position:t}){let e=!1;this.scroll.vertical.position!==t.top&&(this.scroll.vertical.position=t.top,e=!0),this.scroll.horizontal.position!==t.left&&(this.scroll.horizontal.position=t.left,e=!0),!0===e&&this.__startTimer()},__updateScrollSize({height:t,width:e}){let i=!1;this.scroll.horizontal.size!==e&&(this.scroll.horizontal.size=e,i=!0),this.scroll.vertical.size!==t&&(this.scroll.vertical.size=t,i=!0),!0===i&&this.__startTimer()},__panThumb(t,e){const i=this.scrollComputed[e];if(!0===t.isFinal){if(!0!==this.panning)return;this.panning=!1}else if(!0===t.isFirst){if(!0===i.thumbHidden)return;this.refPos=i.position,this.panning=!0}else if(!0!==this.panning)return;const s=dirProps[e],o=this.container[e],n=(i.size-o)/(o-i.thumbSize),r=t.distance[s.dist],a=this.refPos+(t.direction===s.dir?1:-1)*r*n;this.__setScroll(a,e)},__mouseDown(t,e){const i=this.scrollComputed[e];if(!0!==i.thumbHidden){const s=t[dirProps[e].offset];if(si.thumbStart+i.thumbSize){const t=s-i.thumbSize/2;this.__setScroll(t/this.container[e]*i.size,e)}const o="vertical"===e?this.$refs.verticalThumb:this.$refs.horizontalThumb;void 0!==o&&o.dispatchEvent(new MouseEvent(t.type,t))}},__verticalMouseDown(t){this.__mouseDown(t,"vertical")},__horizontalMouseDown(t){this.__mouseDown(t,"horizontal")},__startTimer(){!0===this.tempShowing?clearTimeout(this.timer):this.tempShowing=!0,this.timer=setTimeout(()=>{this.tempShowing=!1},this.delay),void 0!==this.$listeners.scroll&&this.__emitScroll()},__setScroll(t,e){this.$refs.target[dirProps[e].scroll]=t},__mouseEnter(){this.hover=!0},__mouseLeave(){this.hover=!1}},render(t){return t("div",{key:"desk",class:this.classes,on:cache(this,"desk",{mouseenter:this.__mouseEnter,mouseleave:this.__mouseLeave})},[t("div",{ref:"target",staticClass:"q-scrollarea__container scroll relative-position fit hide-scrollbar",attrs:this.scrollAttrs},[t("div",{staticClass:"q-scrollarea__content absolute",style:this.mainStyle},mergeSlot([t(QResizeObserver,{key:"resizeIn",props:{debounce:0},on:cache(this,"resizeIn",{resize:this.__updateScrollSize})})],this,"default")),t(QScrollObserver,{key:"scroll",props:{axis:"both"},on:cache(this,"scroll",{scroll:this.__updateScroll})})]),t(QResizeObserver,{key:"resizeOut",props:{debounce:0},on:cache(this,"resizeOut",{resize:this.__updateContainer})}),t("div",{key:"barV",class:this.verticalBarClass,style:[this.barStyle,this.verticalBarStyle],attrs:ariaHidden,on:cache(this,"barV",{mousedown:this.__verticalMouseDown})}),t("div",{key:"barH",class:this.horizontalBarClass,style:[this.barStyle,this.horizontalBarStyle],attrs:ariaHidden,on:cache(this,"barH",{mousedown:this.__horizontalMouseDown})}),t("div",{ref:"verticalThumb",class:this.verticalThumbClass,style:this.verticalStyle,attrs:ariaHidden,directives:this.verticalThumbDirectives}),t("div",{ref:"horizontalThumb",class:this.horizontalThumbClass,style:this.horizontalStyle,attrs:ariaHidden,directives:this.horizontalThumbDirectives})])},created(){this.__emitScroll=debounce(()=>{const t=this.getScroll();t.ref=this,this.$emit("scroll",t)},0)},activated(){if(void 0===this.__scrollPosition)return;const t=this.getScrollTarget();void 0!==t&&(setHorizontalScrollPosition(t,this.__scrollPosition.left),setVerticalScrollPosition(t,this.__scrollPosition.top))},deactivated(){this.__scrollPosition=this.getScrollPosition("both")},beforeDestroy(){this.__emitScroll.cancel(),clearTimeout(this.timer)}});function scrollDebounce(t){let e,i=0;const s=()=>{e=void 0,i=0,t()};function o(){i++,clearTimeout(e),e=setTimeout(s,200),i>50&&(i=0,t(!0))}return o.cancel=(()=>{clearTimeout(e),e=void 0,i=0}),o}const aggBucketSize=1e3,scrollToEdges=["start","center","end","start-force","center-force","end-force"],filterProto=Array.prototype.filter;function sumFn(t,e){return t+e}function getScrollDetails(t,e,i,s,o,n,r,a){const l=t===window?document.scrollingElement||document.documentElement:t,h=!0===o?"offsetWidth":"offsetHeight",d={scrollStart:0,scrollViewSize:-r-a,scrollMaxSize:0,offsetStart:-r,offsetEnd:-a};if(!0===o?(t===window?(d.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,d.scrollViewSize+=document.documentElement.clientWidth):(d.scrollStart=l.scrollLeft,d.scrollViewSize+=l.clientWidth),d.scrollMaxSize=l.scrollWidth,!0===n&&(d.scrollStart=(!0===rtlHasScrollBug()?d.scrollMaxSize-d.scrollViewSize:0)-d.scrollStart)):(t===window?(d.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,d.scrollViewSize+=document.documentElement.clientHeight):(d.scrollStart=l.scrollTop,d.scrollViewSize+=l.clientHeight),d.scrollMaxSize=l.scrollHeight),void 0!==i)for(let t=i.previousElementSibling;null!==t;t=t.previousElementSibling)!1===t.classList.contains("q-virtual-scroll--skip")&&(d.offsetStart+=t[h]);if(void 0!==s)for(let t=s.nextElementSibling;null!==t;t=t.nextElementSibling)!1===t.classList.contains("q-virtual-scroll--skip")&&(d.offsetEnd+=t[h]);if(e!==t){const i=l.getBoundingClientRect(),s=e.getBoundingClientRect();!0===o?(d.offsetStart+=s.left-i.left,d.offsetEnd-=s.width):(d.offsetStart+=s.top-i.top,d.offsetEnd-=s.height),t!==window&&(d.offsetStart+=d.scrollStart),d.offsetEnd+=d.scrollMaxSize-d.offsetStart}return d}function setScroll(t,e,i,s){"end"===e&&(e=(t===window?document.body:t)[!0===i?"scrollWidth":"scrollHeight"]),t===window?!0===i?(!0===s&&(e=(!0===rtlHasScrollBug()?document.body.scrollWidth-document.documentElement.clientWidth:0)-e),window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e):!0===i?(!0===s&&(e=(!0===rtlHasScrollBug()?t.scrollWidth-t.offsetWidth:0)-e),t.scrollLeft=e):t.scrollTop=e}function sumSize(t,e,i,s){if(i>=s)return 0;const o=e.length,n=Math.floor(i/aggBucketSize),r=Math.floor((s-1)/aggBucketSize)+1;let a=t.slice(n,r).reduce(sumFn,0);return i%aggBucketSize!=0&&(a-=e.slice(n*aggBucketSize,i).reduce(sumFn,0)),s%aggBucketSize!=0&&s!==o&&(a-=e.slice(s,r*aggBucketSize).reduce(sumFn,0)),a}const commonVirtScrollProps={virtualScrollSliceSize:{type:[Number,String],default:null},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]};function setOverflowAnchor(t,e){void 0===setOverflowAnchor.isSupported&&(setOverflowAnchor.isSupported=void 0!==window.getComputedStyle(document.body).overflowAnchor),!1!==setOverflowAnchor.isSupported&&void 0!==t&&(cancelAnimationFrame(t._qOverflowAnimationFrame),t._qOverflowAnimationFrame=requestAnimationFrame(()=>{if(void 0===t)return;const i=t.children||[];filterProto.call(i,t=>t.dataset&&void 0!==t.dataset.qVsAnchor).forEach(t=>{delete t.dataset.qVsAnchor});const s=i[e];s&&s.dataset&&(s.dataset.qVsAnchor="")}))}const commonVirtPropsList=Object.keys(commonVirtScrollProps);var VirtualScroll={props:{virtualScrollHorizontal:Boolean,...commonVirtScrollProps},data:()=>({virtualScrollSliceRange:{from:0,to:0}}),watch:{needsSliceRecalc(){this.__setVirtualScrollSize()},needsReset(){this.reset()}},computed:{needsReset(){return["virtualScrollItemSizeComputed","virtualScrollHorizontal"].map(t=>this[t]).join(";")},needsSliceRecalc(){return this.needsReset+";"+["virtualScrollSliceRatioBefore","virtualScrollSliceRatioAfter"].map(t=>this[t]).join(";")},colspanAttr(){return void 0!==this.tableColspan?{colspan:this.tableColspan}:{colspan:100}},virtualScrollItemSizeComputed(){return this.virtualScrollItemSize}},methods:{reset(){this.__resetVirtualScroll(this.prevToIndex,!0)},refresh(t){this.__resetVirtualScroll(void 0===t?this.prevToIndex:t)},scrollTo(t,e){const i=this.__getVirtualScrollTarget();if(void 0===i||null===i||8===i.nodeType)return;const s=getScrollDetails(i,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd);this.__scrollViewSize!==s.scrollViewSize&&this.__setVirtualScrollSize(s.scrollViewSize),this.__setVirtualScrollSliceRange(i,s,Math.min(this.virtualScrollLength-1,Math.max(0,parseInt(t,10)||0)),0,scrollToEdges.indexOf(e)>-1?e:this.prevToIndex>-1&&t>this.prevToIndex?"end":"start")},__onVirtualScrollEvt(t){const e=this.__getVirtualScrollTarget();if(void 0===e||null===e||8===e.nodeType)return;if(!0===this.$q.interaction.isKeyboard&&null!==this.$q.interaction.event&&"string"==typeof this.$q.interaction.event.key){const t=this.$q.interaction.event.key.toLowerCase();"home"!==t&&"end"!==t||setScroll(e,"home"===t?0:"end",this.virtualScrollHorizontal,this.$q.lang.rtl)}const i=getScrollDetails(e,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd),s=this.virtualScrollLength-1,o=i.scrollMaxSize-i.offsetStart-i.offsetEnd-this.virtualScrollPaddingAfter;if(this.prevScrollStart===i.scrollStart)return;if(i.scrollMaxSize<=0)return void this.__setVirtualScrollSliceRange(e,i,0,0);this.__scrollViewSize!==i.scrollViewSize&&this.__setVirtualScrollSize(i.scrollViewSize),this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from);const n=Math.floor(i.scrollMaxSize-Math.max(i.scrollViewSize,i.offsetEnd)-Math.min(this.virtualScrollSizes[s],i.scrollViewSize/2));if(n>0&&Math.ceil(i.scrollStart)>=n)return void this.__setVirtualScrollSliceRange(e,i,s,i.scrollMaxSize-i.offsetEnd-this.virtualScrollSizesAgg.reduce(sumFn,0));let r=0,a=i.scrollStart-i.offsetStart,l=a;if(a<=o&&a+i.scrollViewSize>=this.virtualScrollPaddingBefore)a-=this.virtualScrollPaddingBefore,r=this.virtualScrollSliceRange.from,l=a;else for(let t=0;a>=this.virtualScrollSizesAgg[t]&&r0&&r-i.scrollViewSize?(r++,l=a):l=this.virtualScrollSizes[r]+a;this.__setVirtualScrollSliceRange(e,i,r,l,void 0,t)},__setVirtualScrollSliceRange(t,e,i,s,o,n){const r="string"==typeof o&&o.indexOf("-force")>-1,a=!0===r?o.replace("-force",""):o,l=void 0!==a?a:"start";let h=Math.max(0,i-this.virtualScrollSliceSizeComputed[l]),d=h+this.virtualScrollSliceSizeComputed.total;d>this.virtualScrollLength&&(d=this.virtualScrollLength,h=Math.max(0,d-this.virtualScrollSliceSizeComputed.total)),this.prevScrollStart=e.scrollStart;const c=h!==this.virtualScrollSliceRange.from||d!==this.virtualScrollSliceRange.to;if(!1===c&&void 0===a)return void this.__emitScroll(i);const{activeElement:u}=document,p=this.$refs.content;!0===c&&void 0!==p&&p!==u&&!0===p.contains(u)&&!0!==p.qVsFocusout&&(p.qVsFocusout=!0,p.addEventListener("focusout",this.__onBlurRefocusFn),setTimeout(()=>{void 0!==p&&(p.removeEventListener("focusout",this.__onBlurRefocusFn),p.qVsFocusout=!1)},500)),setOverflowAnchor(p,i-h);const m=void 0!==a?this.virtualScrollSizes.slice(h,i).reduce(sumFn,0):0;if(!0===c){const t=d>=this.virtualScrollSliceRange.from&&h<=this.virtualScrollSliceRange.to?this.virtualScrollSliceRange.to:d;this.virtualScrollSliceRange={from:h,to:t},this.virtualScrollPaddingBefore=sumSize(this.virtualScrollSizesAgg,this.virtualScrollSizes,0,h),this.virtualScrollPaddingAfter=sumSize(this.virtualScrollSizesAgg,this.virtualScrollSizes,this.virtualScrollSliceRange.to,this.virtualScrollLength),cancelAnimationFrame(this.vsRangeToAnimationFrame),this.vsRangeToAnimationFrame=requestAnimationFrame(()=>{this.virtualScrollSliceRange.to!==d&&this.prevScrollStart===e.scrollStart&&(this.virtualScrollSliceRange={from:this.virtualScrollSliceRange.from,to:d},this.virtualScrollPaddingAfter=sumSize(this.virtualScrollSizesAgg,this.virtualScrollSizes,d,this.virtualScrollLength))})}cancelAnimationFrame(this.vsScrollAnimationFrame),this.vsScrollAnimationFrame=requestAnimationFrame(()=>{if(this.prevScrollStart!==e.scrollStart)return;!0===c&&this.__updateVirtualScrollSizes(h);const o=this.virtualScrollSizes.slice(h,i).reduce(sumFn,0),l=o+e.offsetStart+this.virtualScrollPaddingBefore,d=l+this.virtualScrollSizes[i];let u=l+s;if(void 0!==a){const t=o-m,s=e.scrollStart+t;u=!0!==r&&st.classList&&!1===t.classList.contains("q-virtual-scroll--skip")),s=i.length,o=!0===this.virtualScrollHorizontal?t=>t.getBoundingClientRect().width:t=>t.offsetHeight;let n,r,a=t;for(let t=0;t=s;t--)this.virtualScrollSizes[t]=i;const o=Math.floor((this.virtualScrollLength-1)/aggBucketSize);this.virtualScrollSizesAgg=[];for(let t=0;t<=o;t++){let e=0;const i=Math.min((t+1)*aggBucketSize,this.virtualScrollLength);for(let s=t*aggBucketSize;s=0?(this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from),this.$nextTick(()=>{this.scrollTo(t)})):this.__onVirtualScrollEvt()},__setVirtualScrollSize(t){if(void 0===t&&"undefined"!=typeof window){const e=this.__getVirtualScrollTarget();void 0!==e&&null!==e&&8!==e.nodeType&&(t=getScrollDetails(e,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd).scrollViewSize)}this.__scrollViewSize=t;const e=parseFloat(this.virtualScrollSliceRatioBefore)||0,i=1+e+(parseFloat(this.virtualScrollSliceRatioAfter)||0),s=void 0===t||t<=0?1:Math.ceil(t/this.virtualScrollItemSizeComputed),o=Math.max(1,s,Math.ceil((this.virtualScrollSliceSize>0?this.virtualScrollSliceSize:10)/i));this.virtualScrollSliceSizeComputed={total:Math.ceil(o*i),start:Math.ceil(o*e),center:Math.ceil(o*(.5+e)),end:Math.ceil(o*(1+e)),view:s}},__padVirtualScroll(t,e,i){const s=!0===this.virtualScrollHorizontal?"width":"height",o={["--q-virtual-scroll-item-"+s]:this.virtualScrollItemSizeComputed+"px"};return["tbody"===e?t(e,{staticClass:"q-virtual-scroll__padding",key:"before",ref:"before"},[t("tr",[t("td",{style:{[s]:`${this.virtualScrollPaddingBefore}px`,...o},attrs:this.colspanAttr})])]):t(e,{staticClass:"q-virtual-scroll__padding",key:"before",ref:"before",style:{[s]:`${this.virtualScrollPaddingBefore}px`,...o}}),t(e,{staticClass:"q-virtual-scroll__content",key:"content",ref:"content",attrs:{tabindex:-1}},i),"tbody"===e?t(e,{staticClass:"q-virtual-scroll__padding",key:"after",ref:"after"},[t("tr",[t("td",{style:{[s]:`${this.virtualScrollPaddingAfter}px`,...o},attrs:this.colspanAttr})])]):t(e,{staticClass:"q-virtual-scroll__padding",key:"after",ref:"after",style:{[s]:`${this.virtualScrollPaddingAfter}px`,...o}})]},__emitScroll(t){this.prevToIndex!==t&&(void 0!==this.qListeners["virtual-scroll"]&&this.$emit("virtual-scroll",{index:t,from:this.virtualScrollSliceRange.from,to:this.virtualScrollSliceRange.to-1,direction:t["add","add-unique","toggle"].includes(t),reEscapeList=".*+?^${}()|[]\\";var QSelect=Vue__default.default.extend({name:"QSelect",mixins:[QField,VirtualScroll,FormFieldMixin,ListenersMixin],props:{value:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueSanitize:Boolean,dropdownIcon:String,options:{type:Array,default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsSanitize:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],dialogContentClass:[String,Array,Object],dialogContentStyle:[String,Array,Object],dialogCloseIcon:[Boolean,String],useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:validateNewValueMode},mapOptions:Boolean,emitValue:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:String,transitionHide:String,behavior:{type:String,validator:t=>["default","menu","dialog"].includes(t),default:"default"},virtualScrollItemSize:{type:[Number,String],default:void 0}},data:()=>({menu:!1,dialog:!1,optionIndex:-1,inputValue:"",dialogFieldFocused:!1}),watch:{innerValue:{handler(t){this.innerValueCache=t,!0===this.useInput&&!0===this.fillInput&&!0!==this.multiple&&!0!==this.innerLoading&&(!0!==this.dialog&&!0!==this.menu||!0!==this.hasValue)&&(!0!==this.userInputValue&&this.__resetInputValue(),!0!==this.dialog&&!0!==this.menu||this.filter(""))},immediate:!0},fillInput(){this.__resetInputValue()},menu(t){this.__updateMenu(t)},virtualScrollLength(t,e){!0===this.menu&&!1===this.innerLoading&&(this.__resetVirtualScroll(-1,!0),this.$nextTick(()=>{!0===this.menu&&!1===this.innerLoading&&(t>e?this.__resetVirtualScroll():this.__updateMenu(!0))}))}},computed:{isOptionsDark(){return null===this.optionsDark?null===this.dark?this.$q.dark.isActive:this.dark:this.optionsDark},optionsDarkSuffix(){return null===this.isOptionsDark?"dark-auto":!0===this.isOptionsDark?"dark":"light"},virtualScrollLength(){return Array.isArray(this.options)?this.options.length:0},fieldClass(){return`q-select q-field--auto-height q-select--with${!0!==this.useInput?"out":""}-input`+` q-select--with${!0!==this.useChips?"out":""}-chips`+` q-select--${!0===this.multiple?"multiple":"single"}`},computedInputClass(){return!0===this.hideSelected||0===this.innerValue.length?this.inputClass:void 0===this.inputClass?"q-field__input--padding":[this.inputClass,"q-field__input--padding"]},menuContentClass(){return(!0===this.virtualScrollHorizontal?"q-virtual-scroll--horizontal":"")+(this.popupContentClass?" "+this.popupContentClass:"")},innerValue(){const t=!0===this.mapOptions&&!0!==this.multiple,e=void 0===this.value||null===this.value&&!0!==t?[]:!0===this.multiple&&Array.isArray(this.value)?this.value:[this.value];if(!0===this.mapOptions&&!0===Array.isArray(this.options)){const i=!0===this.mapOptions&&void 0!==this.innerValueCache?this.innerValueCache:[],s=e.map(t=>this.__getOption(t,i));return null===this.value&&!0===t?s.filter(t=>null!==t):s}return e},noOptions(){return 0===this.virtualScrollLength},selectedString(){return this.innerValue.map(t=>this.getOptionLabel(t)).join(", ")},sanitizeFn(){return!0===this.optionsSanitize?()=>!0:t=>void 0!==t&&null!==t&&!0===t.sanitize},displayAsText(){return!0===this.displayValueSanitize||void 0===this.displayValue&&(!0===this.optionsSanitize||this.innerValue.some(this.sanitizeFn))},computedTabindex(){return!0===this.focused?this.tabindex:-1},selectedScope(){return this.innerValue.map((t,e)=>({index:e,opt:t,sanitize:this.sanitizeFn(t),selected:!0,removeAtIndex:this.__removeAtIndexAndFocus,toggleOption:this.toggleOption,tabindex:this.computedTabindex}))},optionScope(){if(0===this.virtualScrollLength)return[];const{from:t,to:e}=this.virtualScrollSliceRange,{options:i,optionEls:s}=this.__optionScopeCache;return this.options.slice(t,e).map((e,o)=>{const n=this.isOptionDisabled(e),r=t+o,a={clickable:!0,active:!1,activeClass:this.computedOptionsSelectedClass,manualFocus:!0,focused:!1,disable:n,tabindex:-1,dense:this.optionsDense,dark:this.isOptionsDark},l={role:"option",id:`${this.targetUid}_${r}`};!0!==n&&(!0===this.isOptionSelected(e)&&(a.active=!0),l["aria-selected"]=!0===a.active?"true":"false",this.optionIndex===r&&(a.focused=!0));const h={click:()=>{this.toggleOption(e)}};!0===this.$q.platform.is.desktop&&(h.mousemove=(()=>{!0===this.menu&&this.setOptionIndex(r)}));const d={index:r,opt:e,sanitize:this.sanitizeFn(e),selected:a.active,focused:a.focused,toggleOption:this.toggleOption,setOptionIndex:this.setOptionIndex,itemProps:a,itemAttrs:l};return void 0!==i[o]&&!0===isDeepEqual(d,i[o])||(i[o]=d,s[o]=void 0),{...d,itemEvents:h}})},dropdownArrowIcon(){return void 0!==this.dropdownIcon?this.dropdownIcon:this.$q.iconSet.arrow.dropdown},computedDialogCloseIcon(){return!0===this.dialogCloseIcon?!0===this.$q.lang.rtl?this.$q.iconSet.chevron.right:this.$q.iconSet.chevron.left:"string"==typeof this.dialogCloseIcon&&this.dialogCloseIcon.length>0&&this.dialogCloseIcon},squaredMenu(){return!1===this.optionsCover&&!0!==this.outlined&&!0!==this.standout&&!0!==this.borderless&&!0!==this.rounded},computedOptionsSelectedClass(){return void 0!==this.optionsSelectedClass?this.optionsSelectedClass:void 0!==this.color?`text-${this.color}`:""},innerOptionsValue(){return this.innerValue.map(t=>this.getOptionValue(t))},getOptionValue(){return this.__getPropValueFn("optionValue","value")},getOptionLabel(){return this.__getPropValueFn("optionLabel","label")},isOptionDisabled(){const t=this.__getPropValueFn("optionDisable","disable");return(...e)=>!0===t.apply(null,e)},inputControlEvents(){return{input:this.__onInput,compositionend:this.__onInput,change:this.__onChange,keydown:this.__onTargetKeydown,keyup:this.__onTargetAutocomplete,keypress:this.__onTargetKeypress,focus:this.__onTargetFocus,click:this.__onTargetClick}},closeButtonEvents(){return{click:t=>{stopAndPrevent(t),this.hidePopup()}}},virtualScrollItemSizeComputed(){return void 0===this.virtualScrollItemSize?!0===this.optionsDense?24:48:this.virtualScrollItemSize},comboboxAttrs(){const t={tabindex:this.tabindex,role:"combobox","aria-label":this.label,"aria-readonly":!0===this.readonly?"true":"false","aria-autocomplete":!0===this.useInput?"list":"none","aria-expanded":!0===this.menu?"true":"false","aria-owns":`${this.targetUid}_lb`,"aria-controls":`${this.targetUid}_lb`};return this.optionIndex>=0&&(t["aria-activedescendant"]=`${this.targetUid}_${this.optionIndex}`),t},listboxAttrs(){return{id:`${this.targetUid}_lb`,role:"listbox","aria-multiselectable":!0===this.multiple?"true":"false"}}},methods:{getEmittingOptionValue(t){return!0===this.emitValue?this.getOptionValue(t):t},removeAtIndex(t){if(t>-1&&t=this.maxValues)return;const s=this.value.slice();this.$emit("add",{index:s.length,value:i}),s.push(i),this.$emit("input",s)},toggleOption(t,e){if(!0!==this.editable||void 0===t||!0===this.isOptionDisabled(t))return;const i=this.getOptionValue(t);if(!0!==this.multiple)return!0!==e&&(this.updateInputValue(!0===this.fillInput?this.getOptionLabel(t):"",!0,!0),this.dialogFieldFocused=!1,document.activeElement.blur(),this.hidePopup()),void 0!==this.$refs.target&&this.$refs.target.focus(),void(0!==this.innerValue.length&&!0===isDeepEqual(this.getOptionValue(this.innerValue[0]),i)||this.$emit("input",!0===this.emitValue?i:t));if((!0!==this.hasDialog||!0===this.dialogFieldFocused)&&this.__focus(),this.__selectInputText(),0===this.innerValue.length){const e=!0===this.emitValue?i:t;return this.$emit("add",{index:0,value:e}),void this.$emit("input",!0===this.multiple?[e]:e)}const s=this.value.slice(),o=this.innerOptionsValue.findIndex(t=>isDeepEqual(t,i));if(o>-1)this.$emit("remove",{index:o,value:s.splice(o,1)[0]});else{if(void 0!==this.maxValues&&s.length>=this.maxValues)return;const e=!0===this.emitValue?i:t;this.$emit("add",{index:s.length,value:e}),s.push(e)}this.$emit("input",s)},setOptionIndex(t){if(!0!==this.$q.platform.is.desktop)return;const e=t>-1&&t{this.setOptionIndex(i),this.scrollTo(i),!0!==e&&!0===this.useInput&&!0===this.fillInput&&this.__setInputValue(i>=0?this.getOptionLabel(this.options[i]):this.defaultInputValue)}))}},__getOption(t,e){const i=e=>isDeepEqual(this.getOptionValue(e),t);return this.options.find(i)||e.find(i)||t},__getPropValueFn(t,e){const i=void 0!==this[t]?this[t]:e;return"function"==typeof i?i:t=>null!==t&&"object"==typeof t&&i in t?t[i]:t},isOptionSelected(t){const e=this.getOptionValue(t);return void 0!==this.innerOptionsValue.find(t=>isDeepEqual(t,e))},__selectInputText(t){!0===this.useInput&&void 0!==this.$refs.target&&(void 0===t||this.$refs.target===t.target&&t.target.value===this.selectedString)&&this.$refs.target.select()},__onTargetKeyup(t){!0===isKeyCode(t,27)&&!0===this.menu&&(stop(t),this.hidePopup(),this.__resetInputValue()),this.$emit("keyup",t)},__onTargetAutocomplete(t){const{value:e}=t.target;if(void 0===t.keyCode)if(t.target.value="",clearTimeout(this.inputTimer),this.__resetInputValue(),"string"==typeof e&&e.length>0){const t=e.toLocaleLowerCase(),i=e=>{const i=this.options.find(i=>e(i).toLocaleLowerCase()===t);return void 0!==i&&(-1===this.innerValue.indexOf(i)?this.toggleOption(i):this.hidePopup(),!0)},s=t=>{!0!==i(this.getOptionValue)&&!0!==i(this.getOptionLabel)&&!0!==t&&this.filter(e,!0,()=>s(!0))};s()}else this.__clearValue(t);else this.__onTargetKeyup(t)},__onTargetKeypress(t){this.$emit("keypress",t)},__onTargetKeydown(t){if(this.$emit("keydown",t),!0===shouldIgnoreKey(t))return;const e=this.inputValue.length>0&&(void 0!==this.newValueMode||void 0!==this.qListeners["new-value"]),i=!0!==t.shiftKey&&!0!==this.multiple&&(this.optionIndex>-1||!0===e);if(27===t.keyCode)return void prevent(t);if(9===t.keyCode&&!1===i)return void this.__closeMenu();if(void 0===t.target||t.target.id!==this.targetUid)return;if(40===t.keyCode&&!0!==this.innerLoading&&!1===this.menu)return stopAndPrevent(t),void this.showPopup();if(8===t.keyCode&&!0!==this.hideSelected&&0===this.inputValue.length)return void(!0===this.multiple&&Array.isArray(this.value)?this.removeAtIndex(this.value.length-1):!0!==this.multiple&&null!==this.value&&this.$emit("input",null));35!==t.keyCode&&36!==t.keyCode||"string"==typeof this.inputValue&&0!==this.inputValue.length||(stopAndPrevent(t),this.optionIndex=-1,this.moveOptionSelection(36===t.keyCode?1:-1,this.multiple)),33!==t.keyCode&&34!==t.keyCode||void 0===this.virtualScrollSliceSizeComputed||(stopAndPrevent(t),this.optionIndex=Math.max(-1,Math.min(this.virtualScrollLength,this.optionIndex+(33===t.keyCode?-1:1)*this.virtualScrollSliceSizeComputed.view)),this.moveOptionSelection(33===t.keyCode?1:-1,this.multiple)),38!==t.keyCode&&40!==t.keyCode||(stopAndPrevent(t),this.moveOptionSelection(38===t.keyCode?-1:1,this.multiple));const s=this.virtualScrollLength;if((void 0===this.searchBuffer||this.searchBufferExp0&&!0!==this.useInput&&void 0!==t.key&&1===t.key.length&&t.altKey===t.ctrlKey&&(32!==t.keyCode||this.searchBuffer.length>0)){!0!==this.menu&&this.showPopup(t);const e=t.key.toLocaleLowerCase(),i=1===this.searchBuffer.length&&this.searchBuffer[0]===e;this.searchBufferExp=Date.now()+1500,!1===i&&(stopAndPrevent(t),this.searchBuffer+=e);const o=new RegExp("^"+this.searchBuffer.split("").map(t=>reEscapeList.indexOf(t)>-1?"\\"+t:t).join(".*"),"i");let n=this.optionIndex;if(!0===i||n<0||!0!==o.test(this.getOptionLabel(this.options[n])))do{n=normalizeToInterval(n+1,-1,s-1)}while(n!==this.optionIndex&&(!0===this.isOptionDisabled(this.options[n])||!0!==o.test(this.getOptionLabel(this.options[n]))));this.optionIndex!==n&&this.$nextTick(()=>{this.setOptionIndex(n),this.scrollTo(n),n>=0&&!0===this.useInput&&!0===this.fillInput&&this.__setInputValue(this.getOptionLabel(this.options[n]))})}else if(13===t.keyCode||32===t.keyCode&&!0!==this.useInput&&""===this.searchBuffer||9===t.keyCode&&!1!==i)if(9!==t.keyCode&&stopAndPrevent(t),this.optionIndex>-1&&this.optionIndex{if(e){if(!0!==validateNewValueMode(e))return}else e=this.newValueMode;void 0!==t&&null!==t&&(this.updateInputValue("",!0!==this.multiple,!0),this["toggle"===e?"toggleOption":"add"](t,"add-unique"===e),!0!==this.multiple&&(void 0!==this.$refs.target&&this.$refs.target.focus(),this.hidePopup()))};if(void 0!==this.qListeners["new-value"]?this.$emit("new-value",this.inputValue,t):t(this.inputValue),!0!==this.multiple)return}!0===this.menu?this.__closeMenu():!0!==this.innerLoading&&this.showPopup()}},__onTargetFocus(t){managedFocus(t.target),this.__selectInputText(t)},__onTargetClick(t){!0===this.hasDialog&&stop(t)},__getVirtualScrollEl(){return!0===this.hasDialog?this.$refs.menuContent:void 0!==this.$refs.menu&&void 0!==this.$refs.menu.__portal?(this.$refs.menu.__portal.$el.children||[])[0]:void 0},__getVirtualScrollTarget(){return this.__getVirtualScrollEl()},__getSelection(t){return!0===this.hideSelected?[]:void 0!==this.$scopedSlots["selected-item"]?this.selectedScope.map(t=>this.$scopedSlots["selected-item"](t)).slice():void 0!==this.$scopedSlots.selected?[].concat(this.$scopedSlots.selected()):!0===this.useChips?this.selectedScope.map((e,i)=>t(QChip,{key:"rem#"+i,props:{removable:!0===this.editable&&!0!==this.isOptionDisabled(e.opt),dense:!0,textColor:this.color,tabindex:this.computedTabindex},on:cache(this,"rem#"+i,{remove(){e.removeAtIndex(i)}})},[t("span",{staticClass:"ellipsis",domProps:{[!0===e.sanitize?"textContent":"innerHTML"]:this.getOptionLabel(e.opt)}})])):[t("span",{domProps:{[this.displayAsText?"textContent":"innerHTML"]:void 0!==this.displayValue?this.displayValue:this.selectedString}})]},__getControl(t,e){const i=this.__getSelection(t),s=!0===e||!0!==this.dialog||!0!==this.hasDialog;if(!0===this.useInput)i.push(this.__getInput(t,e,s));else if(!0===this.editable){const o=!0===s?this.comboboxAttrs:void 0;i.push(t("input",{ref:!0===s?"target":void 0,key:"d_t",staticClass:"q-select__focus-target",attrs:{id:!0===s?this.targetUid:void 0,readonly:!0,"data-autofocus":(!0===e?!0===s:this.autofocus)||void 0,...o},on:cache(this,"f-tget",{keydown:this.__onTargetKeydown,keyup:this.__onTargetKeyup,keypress:this.__onTargetKeypress})})),!0===s&&"string"==typeof this.autocomplete&&this.autocomplete.length>0&&i.push(t("input",{key:"autoinp",staticClass:"q-select__autocomplete-input",attrs:{autocomplete:this.autocomplete,tabindex:-1},on:cache(this,"autoinp",{keyup:this.__onTargetAutocomplete})}))}if(void 0!==this.nameProp&&!0!==this.disable&&this.innerOptionsValue.length>0){const e=this.innerOptionsValue.map(e=>t("option",{attrs:{value:e,selected:!0}}));i.push(t("select",{staticClass:"hidden",attrs:{name:this.nameProp,multiple:this.multiple}},e))}const o=!0===this.useInput||!0!==s?void 0:this.qAttrs;return t("div",{staticClass:"q-field__native row items-center",attrs:o},i)},__getOptions(t){if(!0!==this.menu)return;if(!0===this.noOptions)return void 0!==this.$scopedSlots["no-option"]?this.$scopedSlots["no-option"]({inputValue:this.inputValue}):void 0;void 0!==this.$scopedSlots.option&&this.__optionScopeCache.optionSlot!==this.$scopedSlots.option&&(this.__optionScopeCache.optionSlot=this.$scopedSlots.option,this.__optionScopeCache.optionEls=[]);const e=void 0!==this.$scopedSlots.option?this.$scopedSlots.option:e=>t(QItem,{key:e.index,props:e.itemProps,attrs:e.itemAttrs,on:e.itemEvents},[t(QItemSection,[t(QItemLabel,{domProps:{[!0===e.sanitize?"textContent":"innerHTML"]:this.getOptionLabel(e.opt)}})])]),{optionEls:i}=this.__optionScopeCache;let s=this.__padVirtualScroll(t,"div",this.optionScope.map((t,s)=>(void 0===i[s]&&(i[s]=e(t)),i[s])));return void 0!==this.$scopedSlots["before-options"]&&(s=this.$scopedSlots["before-options"]().concat(s)),mergeSlot(s,this,"after-options")},__prependDialogCloseIcon(t){return!1===this.computedDialogCloseIcon||!0!==this.hasDialog||!0!==this.dialog?slot(this,"prepend"):mergeSlot([t(QIcon,{staticClass:"q-select__close-icon q-field__focusable-action",props:{tag:"button",name:this.computedDialogCloseIcon},attrs:iconAsButton,on:this.closeButtonEvents})],this,"prepend")},__getInnerAppend(t){return!0!==this.loading&&!0!==this.innerLoadingIndicator&&!0!==this.hideDropdownIcon?[t(QIcon,{staticClass:"q-select__dropdown-icon"+(!0===this.menu?" rotate-180":""),props:{name:this.dropdownArrowIcon}})]:null},__getInput(t,e,i){const s=!0===i?{...this.comboboxAttrs,...this.qAttrs}:void 0,o={ref:!0===i?"target":void 0,key:"i_t",staticClass:"q-field__input q-placeholder col",style:this.inputStyle,class:this.computedInputClass,domProps:{value:void 0!==this.inputValue?this.inputValue:""},attrs:{type:"search",...s,id:!0===i?this.targetUid:void 0,maxlength:this.maxlength,autocomplete:this.autocomplete,"data-autofocus":(!0===e?!0===i:this.autofocus)||void 0,disabled:!0===this.disable,readonly:!0===this.readonly},on:this.inputControlEvents};return!0!==e&&!0===this.hasDialog&&(o.staticClass+=" no-pointer-events"),t("input",o)},__onChange(t){!0===t.target.qComposing&&(t.target.qComposing=!1,this.__onInput(t))},__onInput(t){if(!t||!t.target||!0===t.target.qComposing)return;const e="string"==typeof t.data&&!0===t.isComposing&&t.data.length+1===t.target.value.length?t.data:t.target.value;this.inputValue!==e&&(clearTimeout(this.inputTimer),this.__setInputValue(e),this.userInputValue=!0,this.defaultInputValue=this.inputValue,!0===this.focused||!0===this.hasDialog&&!0!==this.dialogFieldFocused||this.__focus(),void 0!==this.qListeners.filter&&(this.inputTimer=setTimeout(()=>{this.filter(this.inputValue)},this.inputDebounce)))},__setInputValue(t){this.inputValue!==t&&(this.inputValue=t,this.$emit("input-value",t))},updateInputValue(t,e,i){this.userInputValue=!0!==i,!0===this.useInput&&(this.__setInputValue(t),!0!==e&&!0===i||(this.defaultInputValue=t),!0!==e&&this.filter(t))},filter(t,e,i){if(void 0===this.qListeners.filter||!0!==e&&!0!==this.focused)return;!0===this.innerLoading?this.$emit("filter-abort"):(this.innerLoading=!0,this.innerLoadingIndicator=!0),""!==t&&!0!==this.multiple&&this.innerValue.length>0&&!0!==this.userInputValue&&t===this.getOptionLabel(this.innerValue[0])&&(t="");const s=setTimeout(()=>{!0===this.menu&&(this.menu=!1)},10);clearTimeout(this.filterId),this.filterId=s,this.$emit("filter",t,(t,o)=>{!0!==e&&!0!==this.focused||this.filterId!==s||(clearTimeout(this.filterId),"function"==typeof t&&t(),this.innerLoadingIndicator=!1,this.$nextTick(()=>{this.innerLoading=!1,!0===this.editable&&(!0===e?!0===this.menu&&this.hidePopup():!0===this.menu?this.__updateMenu(!0):(this.menu=!0,!0===this.hasDialog&&(this.dialog=!0))),"function"==typeof o&&this.$nextTick(()=>{o(this)}),"function"==typeof i&&this.$nextTick(()=>{i(this)})}))},()=>{!0===this.focused&&this.filterId===s&&(clearTimeout(this.filterId),this.innerLoading=!1,this.innerLoadingIndicator=!1),!0===this.menu&&(this.menu=!1)})},__getControlEvents(){const t=t=>{this.__onControlFocusout(t,()=>{this.__resetInputValue(),this.__closeMenu()})};return{focusin:this.__onControlFocusin,focusout:t,"popup-show":this.__onControlPopupShow,"popup-hide":e=>{void 0!==e&&stop(e),this.$emit("popup-hide",e),this.hasPopupOpen=!1,t(e)},click:t=>{if(prevent(t),!0!==this.hasDialog&&!0===this.menu)return this.__closeMenu(),void(void 0!==this.$refs.target&&this.$refs.target.focus());this.showPopup(t)}}},__getControlChild(t){if(!1!==this.editable&&(!0===this.dialog||!0!==this.noOptions||void 0!==this.$scopedSlots["no-option"]))return this[`__get${!0===this.hasDialog?"Dialog":"Menu"}`](t)},__getMenu(t){return t(QMenu,{key:"menu",ref:"menu",props:{value:this.menu,fit:!0!==this.menuShrink,cover:!0===this.optionsCover&&!0!==this.noOptions&&!0!==this.useInput,anchor:this.menuAnchor,self:this.menuSelf,offset:this.menuOffset,contentClass:this.menuContentClass,contentStyle:this.popupContentStyle,dark:this.isOptionsDark,noParentEvent:!0,noRefocus:!0,noFocus:!0,square:this.squaredMenu,transitionShow:this.transitionShow,transitionHide:this.transitionHide,separateClosePopup:!0},attrs:this.listboxAttrs,on:cache(this,"menu",{"&scroll":this.__onVirtualScrollEvt,"before-hide":this.__closeMenu,show:this.__onMenuShow})},this.__getOptions(t))},__onMenuShow(){this.__setVirtualScrollSize()},__onDialogFieldFocus(t){stop(t),void 0!==this.$refs.target&&this.$refs.target.focus(),this.dialogFieldFocused=!0},__onDialogFieldBlur(t){stop(t),this.$nextTick(()=>{this.dialogFieldFocused=!1})},__getDialog(t){const e=[t(QField,{staticClass:`col-auto ${this.fieldClass}`,props:{...this.$props,for:this.targetUid,dark:this.isOptionsDark,square:!0,filled:!0,itemAligned:!1,loading:this.innerLoadingIndicator,stackLabel:this.inputValue.length>0},on:{...this.qListeners,focus:this.__onDialogFieldFocus,blur:this.__onDialogFieldBlur},scopedSlots:{...this.$scopedSlots,rawControl:()=>this.__getControl(t,!0),prepend:()=>this.__prependDialogCloseIcon(t),before:void 0,after:void 0}})];return!0===this.menu&&e.push(t("div",{key:"virtMenu",ref:"menuContent",staticClass:"col scroll",class:this.menuContentClass,style:this.popupContentStyle,attrs:this.listboxAttrs,on:cache(this,"virtMenu",{click:prevent,"&scroll":this.__onVirtualScrollEvt})},this.__getOptions(t))),t(QDialog,{key:"dialog",ref:"dialog",props:{value:this.dialog,position:!0===this.useInput?"top":void 0,contentClass:this.dialogContentClass,contentStyle:this.dialogContentStyle,transitionShow:this.transitionShow,transitionHide:this.transitionHide},on:cache(this,"dialog",{"before-hide":this.__onDialogBeforeHide,hide:this.__onDialogHide,show:this.__onDialogShow})},[t("div",{staticClass:"q-select__dialog"+` q-select__dialog--${this.optionsDarkSuffix} q-${this.optionsDarkSuffix}`+(!0===this.dialogFieldFocused?" q-select__dialog--focused":"")},e)])},__onDialogBeforeHide(){!0===this.useInput&&!0!==this.$q.platform.is.desktop||(this.$refs.dialog.__refocusTarget=this.$el.querySelector(".q-field__native > [tabindex]:last-child")),this.focused=!1,this.dialogFieldFocused=!1},__onDialogHide(t){!0!==this.$q.platform.is.desktop&&document.activeElement.blur(),this.hidePopup(),!1===this.focused&&this.$emit("blur",t),this.__resetInputValue()},__onDialogShow(){const t=document.activeElement;null!==t&&t.id===this.targetUid||this.$refs.target===t||void 0===this.$refs.target||this.$refs.target.focus(),this.__setVirtualScrollSize()},__closeMenu(){void 0!==this.__optionScopeCache&&(this.__optionScopeCache.optionEls=[]),!0!==this.dialog&&(this.optionIndex=-1,!0===this.menu&&(this.menu=!1),!1===this.focused&&(clearTimeout(this.filterId),this.filterId=void 0,!0===this.innerLoading&&(this.$emit("filter-abort"),this.innerLoading=!1,this.innerLoadingIndicator=!1)))},showPopup(t){!0===this.editable&&(!0===this.hasDialog?(this.__onControlFocusin(t),this.dialog=!0,this.$nextTick(()=>{this.__focus()})):this.__focus(),void 0!==this.qListeners.filter?this.filter(this.inputValue):!0===this.noOptions&&void 0===this.$scopedSlots["no-option"]||(this.menu=!0))},hidePopup(){this.dialog=!1,this.__closeMenu()},__resetInputValue(){!0===this.useInput&&this.updateInputValue(!0!==this.multiple&&!0===this.fillInput&&this.innerValue.length>0&&this.getOptionLabel(this.innerValue[0])||"",!0,!0)},__updateMenu(t){let e=-1;if(!0===t){if(this.innerValue.length>0){const t=this.getOptionValue(this.innerValue[0]);e=this.options.findIndex(e=>isDeepEqual(this.getOptionValue(e),t))}this.__resetVirtualScroll(e)}this.setOptionIndex(e)},__onPreRender(){this.hasDialog=(!0===this.$q.platform.is.mobile||"dialog"===this.behavior)&&("menu"!==this.behavior&&(!0!==this.useInput||(void 0!==this.$scopedSlots["no-option"]||void 0!==this.qListeners.filter||!1===this.noOptions)))},updateMenuPosition(){!1===this.dialog&&void 0!==this.$refs.menu&&this.$refs.menu.updatePosition()}},beforeMount(){this.__optionScopeCache={optionSlot:this.$scopedSlots.option,options:[],optionEls:[]}},beforeDestroy(){this.__optionScopeCache=void 0,clearTimeout(this.inputTimer)}});const skeletonTypes=["text","rect","circle","QBtn","QBadge","QChip","QToolbar","QCheckbox","QRadio","QToggle","QSlider","QRange","QInput","QAvatar"],skeletonAnimations=["wave","pulse","pulse-x","pulse-y","fade","blink","none"];var QSkeleton=Vue__default.default.extend({name:"QSkeleton",mixins:[DarkMixin,TagMixin,ListenersMixin],props:{type:{type:String,validator:t=>skeletonTypes.includes(t),default:"rect"},animation:{type:String,validator:t=>skeletonAnimations.includes(t),default:"wave"},square:Boolean,bordered:Boolean,size:String,width:String,height:String},computed:{style(){return void 0!==this.size?{width:this.size,height:this.size}:{width:this.width,height:this.height}},classes(){return`q-skeleton--${this.darkSuffix} q-skeleton--type-${this.type}`+("none"!==this.animation?` q-skeleton--anim q-skeleton--anim-${this.animation}`:"")+(!0===this.square?" q-skeleton--square":"")+(!0===this.bordered?" q-skeleton--bordered":"")}},render(t){return t(this.tag,{staticClass:"q-skeleton",class:this.classes,style:this.style,on:{...this.qListeners}},slot(this,"default"))}});const slotsDef=[["left","center","start","width"],["right","center","end","width"],["top","start","center","height"],["bottom","end","center","height"]];var QSlideItem=Vue__default.default.extend({name:"QSlideItem",mixins:[DarkMixin,ListenersMixin],props:{leftColor:String,rightColor:String,topColor:String,bottomColor:String},directives:{TouchPan:TouchPan},computed:{langDir(){return!0===this.$q.lang.rtl?{left:"right",right:"left"}:{left:"left",right:"right"}}},methods:{reset(){this.$refs.content.style.transform="translate(0,0)",this.__emitSlide(this.__showing,0,!0)},__emitSlide(t,e,i){void 0!==this.qListeners.slide&&this.$emit("slide",{side:t,ratio:e,isReset:i})},__pan(t){const e=this.$refs.content;if(t.isFinal)return e.classList.remove("no-transition"),void(1===this.__scale?(e.style.transform=`translate${this.__axis}(${100*this.__dir}%)`,this.timer=setTimeout(()=>{this.$emit(this.__showing,{reset:this.reset}),this.$emit("action",{side:this.__showing,reset:this.reset})},230)):(e.style.transform="translate(0,0)",this.__emitSlide(this.__showing,0,!0)));if(t.isFirst?(this.__dir=null,this.__size={left:0,right:0,top:0,bottom:0},this.__scale=0,e.classList.add("no-transition"),slotsDef.forEach(t=>{if(void 0!==this.$scopedSlots[t[0]]){const e=this.$refs[t[0]+"Content"];e.style.transform="scale(1)",this.__size[t[0]]=e.getBoundingClientRect()[t[3]]}}),this.__axis="up"===t.direction||"down"===t.direction?"Y":"X"):t.direction="X"===this.__axis?t.offset.x<0?"left":"right":t.offset.y<0?"up":"down",void 0===this.$scopedSlots.left&&t.direction===this.langDir.right||void 0===this.$scopedSlots.right&&t.direction===this.langDir.left||void 0===this.$scopedSlots.top&&"down"===t.direction||void 0===this.$scopedSlots.bottom&&"up"===t.direction)return void(e.style.transform="translate(0,0)");let i,s,o;"X"===this.__axis?(s="left"===t.direction?-1:1,i=1===s?this.langDir.left:this.langDir.right,o=t.distance.x):(s="up"===t.direction?-2:2,i=2===s?"top":"bottom",o=t.distance.y),null!==this.__dir&&Math.abs(s)!==Math.abs(this.__dir)||(this.__dir!==s&&(["left","right","top","bottom"].forEach(t=>{void 0!==this.$refs[t]&&(this.$refs[t].style.visibility=i===t?"visible":"hidden")}),this.__showing=i,this.__dir=s),this.__scale=Math.max(0,Math.min(1,(o-40)/this.__size[i])),e.style.transform=`translate${this.__axis}(${o*s/Math.abs(s)}px)`,this.$refs[`${i}Content`].style.transform=`scale(${this.__scale})`,this.__emitSlide(i,this.__scale,!1))}},render(t){const e=[],i={left:void 0!==this.$scopedSlots[this.langDir.right],right:void 0!==this.$scopedSlots[this.langDir.left],up:void 0!==this.$scopedSlots.bottom,down:void 0!==this.$scopedSlots.top},s=Object.keys(i).filter(t=>!0===i[t]);return slotsDef.forEach(i=>{const s=i[0];void 0!==this.$scopedSlots[s]&&e.push(t("div",{ref:s,class:`q-slide-item__${s} absolute-full row no-wrap items-${i[1]} justify-${i[2]}`+(void 0!==this[s+"Color"]?` bg-${this[s+"Color"]}`:"")},[t("div",{ref:s+"Content"},this.$scopedSlots[s]())]))}),e.push(t("div",{ref:"content",key:"content",staticClass:"q-slide-item__content",directives:s.length>0?cacheWithFn(this,"dir#"+s.join(""),()=>{const t={prevent:!0,stop:!0,mouse:!0};return s.forEach(e=>{t[e]=!0}),[{name:"touch-pan",value:this.__pan,modifiers:t}]}):null},slot(this,"default"))),t("div",{staticClass:"q-slide-item q-item-type overflow-hidden"+` q-slide-item--${this.darkSuffix} q-${this.darkSuffix}`,on:{...this.qListeners}},e)},beforeDestroy(){clearTimeout(this.timer)}}),QSpace=Vue__default.default.extend({name:"QSpace",mixins:[ListenersMixin],render(t){return t("div",{staticClass:"q-space",on:{...this.qListeners}})}}),QSpinnerAudio=Vue__default.default.extend({name:"QSpinnerAudio",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 55 80",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"matrix(1 0 0 -1 0 80)"}},[t("rect",{attrs:{width:"10",height:"20",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"4.3s",values:"20;45;57;80;64;32;66;45;64;23;66;13;64;56;34;34;2;23;76;79;20",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"15",width:"10",height:"80",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"2s",values:"80;55;33;5;75;23;73;33;12;14;60;80",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"30",width:"10",height:"50",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"1.4s",values:"50;34;78;23;56;23;34;76;80;54;21;50",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"45",width:"10",height:"30",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"2s",values:"30;45;13;80;56;72;45;76;34;23;67;30",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),QSpinnerBall=Vue__default.default.extend({name:"QSpinnerBall",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 57 57",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(1 1)","stroke-width":"2",fill:"none","fill-rule":"evenodd"}},[t("circle",{attrs:{cx:"5",cy:"50",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",values:"50;5;50;50",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",begin:"0s",dur:"2.2s",values:"5;27;49;5",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"27",cy:"5",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",from:"5",to:"5",values:"5;50;50;5",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",begin:"0s",dur:"2.2s",from:"27",to:"27",values:"27;49;5;27",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"49",cy:"50",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",values:"50;50;5;50",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",from:"49",to:"49",begin:"0s",dur:"2.2s",values:"49;5;27;49",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),QSpinnerBars=Vue__default.default.extend({name:"QSpinnerBars",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg"}},[t("rect",{attrs:{y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"30",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"60",width:"15",height:"140",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"90",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"120",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})])])}}),QSpinnerBox=Vue__default.default.extend({name:"QSpinnerBox",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"25",y:"25",width:"50",height:"50",fill:"none","stroke-width":"4",stroke:"currentColor"}},[t("animateTransform",{attrs:{id:"spinnerBox",attributeName:"transform",type:"rotate",from:"0 50 50",to:"180 50 50",dur:"0.5s",begin:"rectBox.end"}})]),t("rect",{attrs:{x:"27",y:"27",width:"46",height:"50",fill:"currentColor"}},[t("animate",{attrs:{id:"rectBox",attributeName:"height",begin:"0s;spinnerBox.end",dur:"1.3s",from:"50",to:"0",fill:"freeze"}})])])}}),QSpinnerClock=Vue__default.default.extend({name:"QSpinnerClock",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("circle",{attrs:{cx:"50",cy:"50",r:"48",fill:"none","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor"}}),t("line",{attrs:{"stroke-linecap":"round","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor",x1:"50",y1:"50",x2:"85",y2:"50.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"2s",repeatCount:"indefinite"}})]),t("line",{attrs:{"stroke-linecap":"round","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor",x1:"50",y1:"50",x2:"49.5",y2:"74"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"15s",repeatCount:"indefinite"}})])])}}),QSpinnerComment=Vue__default.default.extend({name:"QSpinnerComment",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"0",y:"0",width:"100",height:"100",fill:"none"}}),t("path",{attrs:{d:"M78,19H22c-6.6,0-12,5.4-12,12v31c0,6.6,5.4,12,12,12h37.2c0.4,3,1.8,5.6,3.7,7.6c2.4,2.5,5.1,4.1,9.1,4 c-1.4-2.1-2-7.2-2-10.3c0-0.4,0-0.8,0-1.3h8c6.6,0,12-5.4,12-12V31C90,24.4,84.6,19,78,19z",fill:"currentColor"}}),t("circle",{attrs:{cx:"30",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;1;1",keyTimes:"0;0.2;1",dur:"1s",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"50",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;0;1;1",keyTimes:"0;0.2;0.4;1",dur:"1s",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"70",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;0;1;1",keyTimes:"0;0.4;0.6;1",dur:"1s",repeatCount:"indefinite"}})])])}}),QSpinnerCube=Vue__default.default.extend({name:"QSpinnerCube",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"0",y:"0",width:"100",height:"100",fill:"none"}}),t("g",{attrs:{transform:"translate(25 25)"}},[t("rect",{attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.9"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(75 25)"}},[t("rect",{attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.8"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.1s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(25 75)"}},[t("rect",{staticClass:"cube",attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.7"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.3s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(75 75)"}},[t("rect",{staticClass:"cube",attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.6"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.2s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])])])}}),QSpinnerDots=Vue__default.default.extend({name:"QSpinnerDots",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg"}},[t("circle",{attrs:{cx:"15",cy:"15",r:"15"}},[t("animate",{attrs:{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"60",cy:"15",r:"9","fill-opacity":".3"}},[t("animate",{attrs:{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:".5",to:".5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"105",cy:"15",r:"15"}},[t("animate",{attrs:{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"}})])])}}),QSpinnerFacebook=Vue__default.default.extend({name:"QSpinnerFacebook",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid"}},[t("g",{attrs:{transform:"translate(20 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.6"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])]),t("g",{attrs:{transform:"translate(50 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.8"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0.1s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])]),t("g",{attrs:{transform:"translate(80 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.9"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0.2s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])])])}}),QSpinnerGears=Vue__default.default.extend({name:"QSpinnerGears",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(-20,-20)"}},[t("path",{attrs:{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"90 50 50",to:"0 50 50",dur:"1s",repeatCount:"indefinite"}})])]),t("g",{attrs:{transform:"translate(20,20) rotate(15 50 50)"}},[t("path",{attrs:{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"90 50 50",dur:"1s",repeatCount:"indefinite"}})])])])}}),QSpinnerGrid=Vue__default.default.extend({name:"QSpinnerGrid",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 105 105",xmlns:"http://www.w3.org/2000/svg"}},[t("circle",{attrs:{cx:"12.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0s",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"12.5",cy:"52.5",r:"12.5","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"100ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"300ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"52.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"600ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"800ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"52.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"400ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"12.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"700ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"500ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"200ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})])])}}),QSpinnerHearts=Vue__default.default.extend({name:"QSpinnerHearts",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 140 64",xmlns:"http://www.w3.org/2000/svg"}},[t("path",{attrs:{d:"M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.716-6.002 11.47-7.65 17.304-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0s",dur:"1.4s",values:"0.5;1;0.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.593-2.32 17.308 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0.7s",dur:"1.4s",values:"0.5;1;0.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z"}})])}}),QSpinnerHourglass=Vue__default.default.extend({name:"QSpinnerHourglass",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",[t("path",{staticClass:"glass",attrs:{fill:"none",stroke:"currentColor","stroke-width":"5","stroke-miterlimit":"10",d:"M58.4,51.7c-0.9-0.9-1.4-2-1.4-2.3s0.5-0.4,1.4-1.4 C70.8,43.8,79.8,30.5,80,15.5H70H30H20c0.2,15,9.2,28.1,21.6,32.3c0.9,0.9,1.4,1.2,1.4,1.5s-0.5,1.6-1.4,2.5 C29.2,56.1,20.2,69.5,20,85.5h10h40h10C79.8,69.5,70.8,55.9,58.4,51.7z"}}),t("clipPath",{attrs:{id:"uil-hourglass-clip1"}},[t("rect",{staticClass:"clip",attrs:{x:"15",y:"20",width:"70",height:"25"}},[t("animate",{attrs:{attributeName:"height",from:"25",to:"0",dur:"1s",repeatCount:"indefinite",values:"25;0;0",keyTimes:"0;0.5;1"}}),t("animate",{attrs:{attributeName:"y",from:"20",to:"45",dur:"1s",repeatCount:"indefinite",values:"20;45;45",keyTimes:"0;0.5;1"}})])]),t("clipPath",{attrs:{id:"uil-hourglass-clip2"}},[t("rect",{staticClass:"clip",attrs:{x:"15",y:"55",width:"70",height:"25"}},[t("animate",{attrs:{attributeName:"height",from:"0",to:"25",dur:"1s",repeatCount:"indefinite",values:"0;25;25",keyTimes:"0;0.5;1"}}),t("animate",{attrs:{attributeName:"y",from:"80",to:"55",dur:"1s",repeatCount:"indefinite",values:"80;55;55",keyTimes:"0;0.5;1"}})])]),t("path",{staticClass:"sand",attrs:{d:"M29,23c3.1,11.4,11.3,19.5,21,19.5S67.9,34.4,71,23H29z","clip-path":"url(#uil-hourglass-clip1)",fill:"currentColor"}}),t("path",{staticClass:"sand",attrs:{d:"M71.6,78c-3-11.6-11.5-20-21.5-20s-18.5,8.4-21.5,20H71.6z","clip-path":"url(#uil-hourglass-clip2)",fill:"currentColor"}}),t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"180 50 50",repeatCount:"indefinite",dur:"1s",values:"0 50 50;0 50 50;180 50 50",keyTimes:"0;0.7;1"}})])])}}),QSpinnerInfinity=Vue__default.default.extend({name:"QSpinnerInfinity",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("path",{attrs:{d:"M24.3,30C11.4,30,5,43.3,5,50s6.4,20,19.3,20c19.3,0,32.1-40,51.4-40C88.6,30,95,43.3,95,50s-6.4,20-19.3,20C56.4,70,43.6,30,24.3,30z",fill:"none",stroke:"currentColor","stroke-width":"8","stroke-dasharray":"10.691205342610678 10.691205342610678","stroke-dashoffset":"0"}},[t("animate",{attrs:{attributeName:"stroke-dashoffset",from:"0",to:"21.382410685221355",begin:"0",dur:"2s",repeatCount:"indefinite",fill:"freeze"}})])])}}),QSpinnerIos=Vue__default.default.extend({name:"QSpinnerIos",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,stroke:"currentColor",fill:"currentColor",viewBox:"0 0 64 64"}},[t("g",{attrs:{"stroke-width":"4","stroke-linecap":"round"}},[t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(180)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(210)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(240)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".1;0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(270)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".15;.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(300)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".25;.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(330)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".35;.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(0)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".45;.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(30)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".55;.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(60)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".65;.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(90)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".7;.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(120)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".85;.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(150)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"}})])])])}}),QSpinnerOrbit=Vue__default.default.extend({name:"QSpinnerOrbit",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("circle",{attrs:{cx:"50",cy:"50",r:"44",fill:"none","stroke-width":"4","stroke-opacity":".5",stroke:"currentColor"}}),t("circle",{attrs:{cx:"8",cy:"54",r:"6",fill:"currentColor","stroke-width":"3",stroke:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 48",to:"360 50 52",dur:"2s",repeatCount:"indefinite"}})])])}}),QSpinnerOval=Vue__default.default.extend({name:"QSpinnerOval",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(1 1)","stroke-width":"2",fill:"none","fill-rule":"evenodd"}},[t("circle",{attrs:{"stroke-opacity":".5",cx:"18",cy:"18",r:"18"}}),t("path",{attrs:{d:"M36 18c0-9.94-8.06-18-18-18"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"}})])])])}}),QSpinnerPie=Vue__default.default.extend({name:"QSpinnerPie",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("path",{attrs:{d:"M0 50A50 50 0 0 1 50 0L50 50L0 50",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"0.8s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M50 0A50 50 0 0 1 100 50L50 50L50 0",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"1.6s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M100 50A50 50 0 0 1 50 100L50 50L100 50",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"2.4s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M50 100A50 50 0 0 1 0 50L50 50L50 100",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"3.2s",repeatCount:"indefinite"}})])])}}),QSpinnerPuff=Vue__default.default.extend({name:"QSpinnerPuff",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 44 44",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{fill:"none","fill-rule":"evenodd","stroke-width":"2"}},[t("circle",{attrs:{cx:"22",cy:"22",r:"1"}},[t("animate",{attrs:{attributeName:"r",begin:"0s",dur:"1.8s",values:"1; 20",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.165, 0.84, 0.44, 1",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"0s",dur:"1.8s",values:"1; 0",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.3, 0.61, 0.355, 1",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"1"}},[t("animate",{attrs:{attributeName:"r",begin:"-0.9s",dur:"1.8s",values:"1; 20",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.165, 0.84, 0.44, 1",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"-0.9s",dur:"1.8s",values:"1; 0",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.3, 0.61, 0.355, 1",repeatCount:"indefinite"}})])])])}}),QSpinnerRadio=Vue__default.default.extend({name:"QSpinnerRadio",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"scale(0.55)"}},[t("circle",{attrs:{cx:"30",cy:"150",r:"30",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})]),t("path",{attrs:{d:"M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0.1",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})]),t("path",{attrs:{d:"M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0.2",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})])])])}}),QSpinnerRings=Vue__default.default.extend({name:"QSpinnerRings",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{fill:"none","fill-rule":"evenodd",transform:"translate(1 1)","stroke-width":"2"}},[t("circle",{attrs:{cx:"22",cy:"22",r:"6"}},[t("animate",{attrs:{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"6"}},[t("animate",{attrs:{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"8"}},[t("animate",{attrs:{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),QSpinnerTail=Vue__default.default.extend({name:"QSpinnerTail",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg"}},[t("defs",[t("linearGradient",{attrs:{x1:"8.042%",y1:"0%",x2:"65.682%",y2:"23.865%",id:"a"}},[t("stop",{attrs:{"stop-color":"currentColor","stop-opacity":"0",offset:"0%"}}),t("stop",{attrs:{"stop-color":"currentColor","stop-opacity":".631",offset:"63.146%"}}),t("stop",{attrs:{"stop-color":"currentColor",offset:"100%"}})])]),t("g",{attrs:{transform:"translate(1 1)",fill:"none","fill-rule":"evenodd"}},[t("path",{attrs:{d:"M36 18c0-9.94-8.06-18-18-18",stroke:"url(#a)","stroke-width":"2"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"0.9s",repeatCount:"indefinite"}})]),t("circle",{attrs:{fill:"currentColor",cx:"36",cy:"18",r:"1"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"0.9s",repeatCount:"indefinite"}})])])])}});const keyDirections={37:"left",38:"up",39:"right",40:"down"};var QSplitter=Vue__default.default.extend({name:"QSplitter",mixins:[DarkMixin,ListenersMixin],directives:{TouchPan:TouchPan},props:{value:{type:Number,required:!0},reverse:Boolean,unit:{type:String,default:"%",validator:t=>["%","px"].includes(t)},limits:{type:Array,validator:t=>2===t.length&&("number"==typeof t[0]&&"number"==typeof t[1]&&(t[0]>=0&&t[0]<=t[1]))},emitImmediately:Boolean,horizontal:Boolean,disable:Boolean,tabindex:[String,Number],beforeClass:[Array,String,Object],afterClass:[Array,String,Object],separatorClass:[Array,String,Object],separatorStyle:[Array,String,Object]},watch:{value:{immediate:!0,handler(t){this.__normalize(t,this.computedLimits)}},limits:{deep:!0,handler(){this.$nextTick(()=>{this.__normalize(this.value,this.computedLimits)})}}},computed:{classes(){return(!0===this.horizontal?"column":"row")+` q-splitter--${!0===this.horizontal?"horizontal":"vertical"}`+` q-splitter--${!0===this.disable?"disabled":"workable"}`+` q-splitter--${this.darkSuffix}`},prop(){return!0===this.horizontal?"height":"width"},side(){return!0!==this.reverse?"before":"after"},computedLimits(){return void 0!==this.limits?this.limits:"%"===this.unit?[10,90]:[50,1/0]},styles(){return{[this.side]:{[this.prop]:this.__getCSSValue(this.value)}}},separatorDirectives(){if(!0!==this.disable)return[{name:"touch-pan",value:this.__pan,modifiers:{[!0===this.horizontal?"vertical":"horizontal"]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}}]},separatorAttrs(){const t=!0===this.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.tabindex||0},e=this.__getAriaValue(this.value);return{role:"separator","aria-orientation":!0===this.horizontal?"horizontal":"vertical","aria-controls":this.targetUid,"aria-valuemin":this.computedLimits[0],"aria-valuemax":this.computedLimits[1],"aria-valuenow":e.now,"aria-valuetext":e.text,...t}},separatorEvents(){return!0===this.disable?void 0:{keydown:this.__panKeydown}}},methods:{__panStart(){const t=this.$el.getBoundingClientRect()[this.prop];this.__dir=!0===this.horizontal?"up":"left",this.__maxValue="%"===this.unit?100:t,this.__value=Math.min(this.__maxValue,this.computedLimits[1],Math.max(this.computedLimits[0],this.value)),this.__multiplier=(!0!==this.reverse?1:-1)*(!0===this.horizontal?1:!0===this.$q.lang.rtl?-1:1)*("%"===this.unit?0===t?0:100/t:1),this.$el.classList.add("q-splitter--active")},__panProgress(t){this.__normalized=Math.min(this.__maxValue,this.computedLimits[1],Math.max(this.computedLimits[0],t)),this.$refs[this.side].style[this.prop]=this.__getCSSValue(this.__normalized);const e=this.__getAriaValue(this.__normalized);this.$refs.separator.setAttribute("aria-valuenow",e.now),this.$refs.separator.setAttribute("aria-valuetext",e.text),!0===this.emitImmediately&&this.value!==this.__normalized&&this.$emit("input",this.__normalized)},__panEnd(){void 0!==this.__panCleanup&&this.__panCleanup(),this.__normalized!==this.value&&this.$emit("input",this.__normalized),this.$el.classList.remove("q-splitter--active")},__pan(t){if(!0===t.isFinal)return void this.__panEnd();if(!0===t.isFirst)return void this.__panStart();const e=this.__value+this.__multiplier*(t.direction===this.__dir?-1:1)*t.distance[!0===this.horizontal?"y":"x"];this.__panProgress(e)},__panKeydown(t){if(void 0!==this.qListeners.keydown&&this.$emit("keydown",t),!0===this.disable||!0===t.defaultPrevented||!0!==this.horizontal&&-1===[37,39].indexOf(t.keyCode)||!0===this.horizontal&&-1===[38,40].indexOf(t.keyCode))return;stopAndPrevent(t),void 0===this.__panCleanup&&(document.addEventListener("keyup",this.__panEnd),document.addEventListener("focusout",this.__panEnd),this.__panCleanup=(()=>{this.__panCleanup=void 0,document.removeEventListener("keyup",this.__panEnd),document.removeEventListener("focusout",this.__panEnd),this.__panEnd()}),this.__panStart(),this.__normalized=this.__value);const e=keyDirections[t.keyCode],i=this.__normalized+this.__multiplier*(e===this.__dir?-1:1)*(!0===t.shiftKey?1:10);this.__panProgress(i)},__normalize(t,e){te[1]&&this.$emit("input",e[1])},__getAriaValue(t){const e="%"===this.unit?t:Math.round(t);return{now:e,text:Math.round(100*e)/100+this.unit}},__getCSSValue(t){return("%"===this.unit?t:Math.round(t))+this.unit}},created(){this.targetUid=`sp_${uid$3()}`},beforeDestroy(){void 0!==this.__panCleanup&&this.__panCleanup()},render(t){const e={[this.side]:{id:this.targetUid}},i=[t("div",{key:"before",ref:"before",staticClass:"q-splitter__panel q-splitter__before"+(!0===this.reverse?" col":""),style:this.styles.before,class:this.beforeClass,attrs:e.before,on:cache(this,"stop",{input:stop})},slot(this,"before")),t("div",{staticClass:"q-splitter__separator",ref:"separator",style:this.separatorStyle,class:this.separatorClass,attrs:this.separatorAttrs,on:this.separatorEvents},[t("div",{staticClass:"absolute-full q-splitter__separator-area",directives:this.separatorDirectives},slot(this,"separator"))]),t("div",{key:"after",ref:"after",staticClass:"q-splitter__panel q-splitter__after"+(!0===this.reverse?"":" col"),style:this.styles.after,class:this.afterClass,attrs:e.after,on:cache(this,"stop",{input:stop})},slot(this,"after"))];return t("div",{staticClass:"q-splitter no-wrap",class:this.classes,on:{...this.qListeners}},mergeSlot(i,this,"default"))}}),StepHeader=Vue__default.default.extend({name:"StepHeader",mixins:[AttrsMixin],directives:{Ripple:Ripple},props:{stepper:{},step:{}},computed:{isDisable(){const t=this.step.disable;return!0===t||""===t},isActive(){return!0!==this.isDisable&&this.stepper.value===this.step.name},isError(){const t=this.step.error;return!0===t||""===t},isDone(){const t=this.step.done;return!0===t||""===t},headerNav(){const t=this.step.headerNav,e=!0===t||""===t||void 0===t;return!1===this.isDisable&&this.stepper.headerNav&&e},hasPrefix(){return this.step.prefix&&void 0===this.icon},icon(){let t;return"none"===(t=!0===this.isActive?this.__getProp("activeIcon",this.$q.iconSet.stepper.active):!0===this.isError?this.__getProp("errorIcon",this.$q.iconSet.stepper.error):!0===this.isDone?this.__getProp("doneIcon",this.$q.iconSet.stepper.done):this.step.icon||this.stepper.inactiveIcon)?void 0:t},color(){return!0===this.isError?this.__getProp("errorColor"):!0===this.isActive?this.__getProp("activeColor"):!1===this.isDisable&&!0===this.isDone?this.__getProp("doneColor"):this.step.color||this.stepper.inactiveColor},classes(){return"q-stepper__tab col-grow flex items-center no-wrap relative-position"+(void 0!==this.color?` text-${this.color}`:"")+(!0===this.isError?" q-stepper__tab--error q-stepper__tab--error-with-"+(!0===this.hasPrefix?"prefix":"icon"):"")+(!0===this.isActive?" q-stepper__tab--active":"")+(!0===this.isDone?" q-stepper__tab--done":"")+(!0===this.headerNav?" q-stepper__tab--navigation q-focusable q-hoverable":"")+(!0===this.isDisable?" q-stepper__tab--disabled":"")}},methods:{activate(){void 0!==this.$refs.blurTarget&&this.$refs.blurTarget.focus(),!1===this.isActive&&this.stepper.goTo(this.step.name)},keyup(t){13===t.keyCode&&!1===this.isActive&&this.stepper.goTo(this.step.name)},__getProp(t,e){return this.step[t]||this.stepper[t]||e}},render(t){const e={class:this.classes};!0===this.stepper.headerNav&&(e.directives=[{name:"ripple",value:this.headerNav}]),!0===this.headerNav&&Object.assign(e,{key:"headnavon",on:cache(this,"headnavon",{click:this.activate,keyup:this.keyup}),attrs:!0===this.isDisable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.qAttrs.tabindex||0}});const i=[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"}),t("div",{staticClass:"q-stepper__dot row flex-center q-stepper__line relative-position"},[t("span",{staticClass:"row flex-center"},[!0===this.hasPrefix?this.step.prefix:t(QIcon,{props:{name:this.icon}})])])];if(void 0!==this.step.title&&null!==this.step.title){const e=[t("div",{staticClass:"q-stepper__title"},[this.step.title])];void 0!==this.step.caption&&null!==this.step.caption&&e.push(t("div",{staticClass:"q-stepper__caption"},[this.step.caption])),i.push(t("div",{staticClass:"q-stepper__label q-stepper__line relative-position"},e))}return t("div",e,i)}});const attrs$1={role:"tabpanel"},StepWrapper=Vue__default.default.extend({name:"QStepWrapper",render(t){return t("div",{staticClass:"q-stepper__step-content"},[t("div",{staticClass:"q-stepper__step-inner"},slot(this,"default"))])}});var QStep=Vue__default.default.extend({name:"QStep",inject:{stepper:{default(){console.error("QStep needs to be child of QStepper")}}},mixins:[PanelChildMixin],props:{icon:String,color:String,title:{type:String,required:!0},caption:String,prefix:[String,Number],doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String,headerNav:{type:Boolean,default:!0},done:Boolean,error:Boolean},computed:{isActive(){return this.stepper.value===this.name},onEvents(){return!0!==this.isActive||!0!==this.stepper.vertical||!0!==this.$q.platform.is.ios&&!0===this.$q.platform.is.chrome?{...this.qListeners}:{...this.qListeners,scroll:this.__keepScroll}}},methods:{__keepScroll(t){const{target:e}=t;e.scrollTop>0&&(e.scrollTop=0),void 0!==this.qListeners.scroll&&this.$emit("scroll",t)}},render(t){const e=this.stepper.vertical,i=!0===e&&!0===this.stepper.keepAlive?t("keep-alive",!0===this.isActive?[t(StepWrapper,{key:this.name},slot(this,"default"))]:void 0):!0!==e||!0===this.isActive?StepWrapper.options.render.call(this,t):void 0;return t("div",{staticClass:"q-stepper__step",attrs:attrs$1,on:this.onEvents},!0===e?[t(StepHeader,{props:{stepper:this.stepper,step:this}}),!0===this.stepper.animated?t(QSlideTransition,[i]):i]:[i])}}),QStepper=Vue__default.default.extend({name:"QStepper",provide(){return{stepper:this}},mixins:[DarkMixin,PanelParentMixin],props:{flat:Boolean,bordered:Boolean,alternativeLabels:Boolean,headerNav:Boolean,contracted:Boolean,headerClass:String,inactiveColor:String,inactiveIcon:String,doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String},computed:{classes(){const t=!0===this.dark||null===this.dark&&!1!==this.$q.dark.isActive;return`q-stepper q-stepper--${!0===this.vertical?"vertical":"horizontal"}`+(!0===this.flat||!0===t?" q-stepper--flat no-shadow":"")+(!0===this.bordered||!0===t&&!1===this.flat?" q-stepper--bordered":"")+` q-stepper--${this.darkSuffix} q-${this.darkSuffix}`},headerClasses(){return"q-stepper__header row items-stretch justify-between"+` q-stepper__header--${!0===this.alternativeLabels?"alternative":"standard"}-labels`+(!1===this.flat||!0===this.bordered?" q-stepper__header--border":"")+(!0===this.contracted?" q-stepper__header--contracted":"")+(void 0!==this.headerClass?` ${this.headerClass}`:"")}},methods:{__getContent(t){const e=slot(this,"message",[]);if(!0===this.vertical){this.__isValidPanelName(this.value)&&this.__updatePanelIndex();const i=t("div",{key:"stop",staticClass:"q-stepper__content",on:cache(this,"stop",{input:stop})},slot(this,"default"));return void 0===e?[i]:e.concat(i)}return[t("div",{class:this.headerClasses},this.panels.map(e=>{const i=e.componentOptions.propsData;return t(StepHeader,{key:i.name,props:{stepper:this,step:i}})}))].concat(e,t("div",{staticClass:"q-stepper__content q-panel-parent",directives:this.panelDirectives},this.__getPanelContent(t)))},__renderPanels(t){return t("div",{class:this.classes,on:{...this.qListeners}},mergeSlot(this.__getContent(t),this,"navigation"))}}}),QStepperNavigation=Vue__default.default.extend({name:"QStepperNavigation",mixins:[ListenersMixin],render(t){return t("div",{staticClass:"q-stepper__nav",on:{...this.qListeners}},slot(this,"default"))}}),Top={computed:{marginalsScope(){return{pagination:this.computedPagination,pagesNumber:this.pagesNumber,isFirstPage:this.isFirstPage,isLastPage:this.isLastPage,firstPage:this.firstPage,prevPage:this.prevPage,nextPage:this.nextPage,lastPage:this.lastPage,inFullscreen:this.inFullscreen,toggleFullscreen:this.toggleFullscreen}}},methods:{__getTopDiv(t){const e=this.$scopedSlots.top,i=this.$scopedSlots["top-left"],s=this.$scopedSlots["top-right"],o=this.$scopedSlots["top-selection"],n=!0===this.hasSelectionMode&&void 0!==o&&this.rowsSelectedNumber>0,r="q-table__top relative-position row items-center";if(void 0!==e)return t("div",{staticClass:r},[e(this.marginalsScope)]);let a;return!0===n?a=o(this.marginalsScope).slice():(a=[],void 0!==i?a.push(t("div",{staticClass:"q-table-control"},[i(this.marginalsScope)])):this.title&&a.push(t("div",{staticClass:"q-table__control"},[t("div",{staticClass:"q-table__title",class:this.titleClass},this.title)]))),void 0!==s&&(a.push(t("div",{staticClass:"q-table__separator col"})),a.push(t("div",{staticClass:"q-table__control"},[s(this.marginalsScope)]))),0!==a.length?t("div",{staticClass:r},a):void 0}}},QTh=Vue__default.default.extend({name:"QTh",mixins:[ListenersMixin],props:{props:Object,autoWidth:Boolean},render(t){const e={...this.qListeners};if(void 0===this.props)return t("th",{on:e,class:!0===this.autoWidth?"q-table--col-auto-width":null},slot(this,"default"));let i,s;const o=this.$vnode.key;if(o){if(void 0===(i=this.props.colsMap[o]))return}else i=this.props.col;if(!0===i.sortable){const e="right"===i.align?"unshift":"push";(s=uniqueSlot(this,"default",[]))[e](t(QIcon,{props:{name:this.$q.iconSet.table.arrowUp},staticClass:i.__iconClass}))}else s=slot(this,"default");const n=!0===i.sortable?{click:t=>{this.props.sort(i),this.$emit("click",t)}}:{};return t("th",{on:{...e,...n},style:i.headerStyle,class:i.__thClass+(!0===this.autoWidth?" q-table--col-auto-width":"")},s)}}),TableHeader={computed:{headerSelectedValue(){return!0===this.someRowsSelected?null:this.allRowsSelected}},methods:{__getTHead(t){const e=this.__getTHeadTR(t);return!0===this.loading&&void 0===this.$scopedSlots.loading&&e.push(t("tr",{staticClass:"q-table__progress"},[t("th",{staticClass:"relative-position",attrs:{colspan:this.computedColspan}},this.__getProgress(t))])),t("thead",e)},__getTHeadTR(t){const e=this.$scopedSlots.header,i=this.$scopedSlots["header-cell"];if(void 0!==e)return e(this.__getHeaderScope({header:!0})).slice();const s=this.computedCols.map(e=>{const s=this.$scopedSlots[`header-cell-${e.name}`],o=void 0!==s?s:i,n=this.__getHeaderScope({col:e});return void 0!==o?o(n):t(QTh,{key:e.name,props:{props:n}},e.label)});if(!0===this.singleSelection&&!0!==this.grid)s.unshift(t("th",{staticClass:"q-table--col-auto-width"},[" "]));else if(!0===this.multipleSelection){const e=this.$scopedSlots["header-selection"],i=void 0!==e?e(this.__getHeaderScope({})):[t(QCheckbox,{key:"inp",props:{color:this.color,value:this.headerSelectedValue,dark:this.dark,dense:this.dense},on:cache(this,"inp",{input:this.__onMultipleSelectionSet})})];s.unshift(t("th",{staticClass:"q-table--col-auto-width"},i))}return[t("tr",{style:this.tableHeaderStyle,class:this.tableHeaderClass},s)]},__getHeaderScope(t){return Object.assign(t,{cols:this.computedCols,sort:this.sort,colsMap:this.computedColsMap,color:this.color,dark:this.dark,dense:this.dense}),!0===this.multipleSelection&&(injectProp(t,"selected",()=>this.headerSelectedValue,this.__onMultipleSelectionSet),t.partialSelected=this.someRowsSelected,t.multipleSelect=!0),t},__onMultipleSelectionSet(t){!0===this.someRowsSelected&&(t=!1),this.__updateSelection(this.computedRows.map(this.getRowKey),this.computedRows,t)}}},TableBody={methods:{__getTBodyTR(t,e,i,s){const o=this.getRowKey(e),n=this.isRowSelected(o);if(void 0!==i)return i(this.__getBodyScope({key:o,row:e,pageIndex:s,__trClass:n?"selected":""}));const r=this.$scopedSlots["body-cell"],a=this.computedCols.map(i=>{const n=this.$scopedSlots[`body-cell-${i.name}`],a=void 0!==n?n:r;return void 0!==a?a(this.__getBodyCellScope({key:o,row:e,pageIndex:s,col:i})):t("td",{class:i.__tdClass(e),style:i.__tdStyle(e)},this.getCellValue(i,e))});if(!0===this.hasSelectionMode){const i=this.$scopedSlots["body-selection"],r=void 0!==i?i(this.__getBodySelectionScope({key:o,row:e,pageIndex:s})):[t(QCheckbox,{props:{value:n,color:this.color,dark:this.dark,dense:this.dense},on:{input:(t,i)=>{this.__updateSelection([o],[e],t,i)}}})];a.unshift(t("td",{staticClass:"q-table--col-auto-width"},r))}const l={key:o,class:{selected:n},on:{}};return void 0!==this.qListeners["row-click"]&&(l.class["cursor-pointer"]=!0,l.on.click=(t=>{this.$emit("row-click",t,e,s)})),void 0!==this.qListeners["row-dblclick"]&&(l.class["cursor-pointer"]=!0,l.on.dblclick=(t=>{this.$emit("row-dblclick",t,e,s)})),void 0!==this.qListeners["row-contextmenu"]&&(l.class["cursor-pointer"]=!0,l.on.contextmenu=(t=>{this.$emit("row-contextmenu",t,e,s)})),t("tr",l,a)},__getTBody(t){const e=this.$scopedSlots.body,i=this.$scopedSlots["top-row"],s=this.$scopedSlots["bottom-row"];let o=this.computedRows.map((i,s)=>this.__getTBodyTR(t,i,e,s));return void 0!==i&&(o=i({cols:this.computedCols}).concat(o)),void 0!==s&&(o=o.concat(s({cols:this.computedCols}))),t("tbody",o)},__getVirtualTBodyTR(t){const e=this.$scopedSlots.body;return i=>this.__getTBodyTR(t,i.item,e,i.index)},__getBodyScope(t){return this.__injectBodyCommonScope(t),t.cols=t.cols.map(e=>injectProp({...e},"value",()=>this.getCellValue(e,t.row))),t},__getBodyCellScope(t){return this.__injectBodyCommonScope(t),injectProp(t,"value",()=>this.getCellValue(t.col,t.row))},__getBodySelectionScope(t){return this.__injectBodyCommonScope(t),t},__injectBodyCommonScope(t){Object.assign(t,{cols:this.computedCols,colsMap:this.computedColsMap,sort:this.sort,rowIndex:this.firstRowIndex+t.pageIndex,color:this.color,dark:this.dark,dense:this.dense}),!0===this.hasSelectionMode&&injectProp(t,"selected",()=>this.isRowSelected(t.key),(e,i)=>{this.__updateSelection([t.key],[t.row],e,i)}),injectProp(t,"expand",()=>this.isRowExpanded(t.key),e=>{this.__updateExpanded(t.key,e)})},getCellValue(t,e){const i="function"==typeof t.field?t.field(e):e[t.field];return void 0!==t.format?t.format(i,e):i}}};const staticClass="q-table__bottom row items-center";var Bottom={props:{hideBottom:Boolean,hideSelectedBanner:Boolean,hideNoData:Boolean,hidePagination:Boolean},computed:{navIcon(){const t=[this.iconFirstPage||this.$q.iconSet.table.firstPage,this.iconPrevPage||this.$q.iconSet.table.prevPage,this.iconNextPage||this.$q.iconSet.table.nextPage,this.iconLastPage||this.$q.iconSet.table.lastPage];return!0===this.$q.lang.rtl?t.reverse():t}},methods:{__getBottomDiv(t){if(!0===this.hideBottom)return;if(!0===this.nothingToDisplay){if(!0===this.hideNoData)return;const e=!0===this.loading?this.loadingLabel||this.$q.lang.table.loading:this.filter?this.noResultsLabel||this.$q.lang.table.noResults:this.noDataLabel||this.$q.lang.table.noData,i=this.$scopedSlots["no-data"],s=void 0!==i?[i({message:e,icon:this.$q.iconSet.table.warning,filter:this.filter})]:[t(QIcon,{staticClass:"q-table__bottom-nodata-icon",props:{name:this.$q.iconSet.table.warning}}),e];return t("div",{staticClass:staticClass+" q-table__bottom--nodata"},s)}const e=this.$scopedSlots.bottom;if(void 0!==e)return t("div",{staticClass:staticClass},[e(this.marginalsScope)]);const i=!0!==this.hideSelectedBanner&&!0===this.hasSelectionMode&&this.rowsSelectedNumber>0?[t("div",{staticClass:"q-table__control"},[t("div",[(this.selectedRowsLabel||this.$q.lang.table.selectedRecords)(this.rowsSelectedNumber)])])]:[];return!0!==this.hidePagination?t("div",{staticClass:staticClass+" justify-end"},this.__getPaginationDiv(t,i)):i.length>0?t("div",{staticClass:staticClass},i):void 0},__getPaginationDiv(t,e){let i;const{rowsPerPage:s}=this.computedPagination,o=this.paginationLabel||this.$q.lang.table.pagination,n=this.$scopedSlots.pagination,r=this.rowsPerPageOptions.length>1;if(e.push(t("div",{staticClass:"q-table__separator col"})),!0===r&&e.push(t("div",{staticClass:"q-table__control"},[t("span",{staticClass:"q-table__bottom-item"},[this.rowsPerPageLabel||this.$q.lang.table.recordsPerPage]),t(QSelect,{key:"pgSize",staticClass:"q-table__select inline q-table__bottom-item",props:{color:this.color,value:s,options:this.computedRowsPerPageOptions,displayValue:0===s?this.$q.lang.table.allRows:s,dark:this.dark,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0},on:cache(this,"pgSize",{input:t=>{this.setPagination({page:1,rowsPerPage:t.value})}})})])),void 0!==n)i=n(this.marginalsScope);else if(i=[t("span",0!==s?{staticClass:"q-table__bottom-item"}:{},[s?o(this.firstRowIndex+1,Math.min(this.lastRowIndex,this.computedRowsNumber),this.computedRowsNumber):o(1,this.filteredSortedRowsNumber,this.computedRowsNumber)])],0!==s&&this.pagesNumber>1){const e={color:this.color,round:!0,dense:!0,flat:!0};!0===this.dense&&(e.size="sm"),this.pagesNumber>2&&i.push(t(QBtn,{key:"pgFirst",props:{...e,icon:this.navIcon[0],disable:this.isFirstPage},on:cache(this,"pgFirst",{click:this.firstPage})})),i.push(t(QBtn,{key:"pgPrev",props:{...e,icon:this.navIcon[1],disable:this.isFirstPage},on:cache(this,"pgPrev",{click:this.prevPage})}),t(QBtn,{key:"pgNext",props:{...e,icon:this.navIcon[2],disable:this.isLastPage},on:cache(this,"pgNext",{click:this.nextPage})})),this.pagesNumber>2&&i.push(t(QBtn,{key:"pgLast",props:{...e,icon:this.navIcon[3],disable:this.isLastPage},on:cache(this,"pgLast",{click:this.lastPage})}))}return e.push(t("div",{staticClass:"q-table__control"},i)),e}}},TableGrid={methods:{__getGridHeader(t){return t("div",{staticClass:"q-table__middle"},!0===this.gridHeader?[t("table",{staticClass:"q-table"},[this.__getTHead(t)])]:!0===this.loading&&void 0===this.$scopedSlots.loading?this.__getProgress(t):void 0)},__getGridBody(t){const e=void 0!==this.$scopedSlots.item?this.$scopedSlots.item:e=>{const i=e.cols.map(e=>t("div",{staticClass:"q-table__grid-item-row"},[t("div",{staticClass:"q-table__grid-item-title"},[e.label]),t("div",{staticClass:"q-table__grid-item-value"},[e.value])]));if(!0===this.hasSelectionMode){const s=this.$scopedSlots["body-selection"],o=void 0!==s?s(e):[t(QCheckbox,{props:{value:e.selected,color:this.color,dark:this.dark,dense:this.dense},on:{input:(t,i)=>{this.__updateSelection([e.key],[e.row],t,i)}}})];i.unshift(t("div",{staticClass:"q-table__grid-item-row"},o),t(QSeparator,{props:{dark:this.dark}}))}const s={staticClass:"q-table__grid-item-card"+this.cardDefaultClass,class:this.cardClass,style:this.cardStyle,on:{}};return void 0===this.qListeners["row-click"]&&void 0===this.qListeners["row-dblclick"]||(s.staticClass+=" cursor-pointer"),void 0!==this.qListeners["row-click"]&&(s.on.click=(t=>{this.$emit("row-click",t,e.row,e.pageIndex)})),void 0!==this.qListeners["row-dblclick"]&&(s.on.dblclick=(t=>{this.$emit("row-dblclick",t,e.row,e.pageIndex)})),t("div",{staticClass:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3",class:!0===e.selected?"q-table__grid-item--selected":""},[t("div",s,i)])};return t("div",{staticClass:"q-table__grid-content row",class:this.cardContainerClass,style:this.cardContainerStyle},this.computedRows.map((t,i)=>e(this.__getBodyScope({key:this.getRowKey(t),row:t,pageIndex:i}))))}}};function getTableMiddle(t,e,i){return t("div",{...e,staticClass:"q-table__middle"+(void 0!==e.staticClass?" "+e.staticClass:"")},[t("table",{staticClass:"q-table"},i)])}const comps={list:QList,table:QMarkupTable};var QVirtualScroll=Vue__default.default.extend({name:"QVirtualScroll",mixins:[AttrsMixin,ListenersMixin,VirtualScroll],props:{type:{type:String,default:"list",validator:t=>["list","table","__qtable"].includes(t)},items:{type:Array,default:()=>[]},itemsFn:Function,itemsSize:Number,scrollTarget:{default:void 0}},computed:{virtualScrollLength(){return this.itemsSize>=0&&void 0!==this.itemsFn?parseInt(this.itemsSize,10):Array.isArray(this.items)?this.items.length:0},virtualScrollScope(){if(0===this.virtualScrollLength)return[];const t=(t,e)=>({index:this.virtualScrollSliceRange.from+e,item:t});return void 0===this.itemsFn?this.items.slice(this.virtualScrollSliceRange.from,this.virtualScrollSliceRange.to).map(t):this.itemsFn(this.virtualScrollSliceRange.from,this.virtualScrollSliceRange.to-this.virtualScrollSliceRange.from).map(t)},classes(){return"q-virtual-scroll q-virtual-scroll"+(!0===this.virtualScrollHorizontal?"--horizontal":"--vertical")+(void 0!==this.scrollTarget?"":" scroll")},attrs(){return void 0!==this.scrollTarget?void 0:{tabindex:0}}},watch:{virtualScrollLength(){this.__resetVirtualScroll()},scrollTarget(){this.__unconfigureScrollTarget(),this.__configureScrollTarget()}},methods:{__getVirtualScrollEl(){return this.$el},__getVirtualScrollTarget(){return this.__scrollTarget},__configureScrollTarget(){this.__scrollTarget=getScrollTarget(this.$el,this.scrollTarget),this.__scrollTarget.addEventListener("scroll",this.__onVirtualScrollEvt,listenOpts.passive)},__unconfigureScrollTarget(){void 0!==this.__scrollTarget&&(this.__scrollTarget.removeEventListener("scroll",this.__onVirtualScrollEvt,listenOpts.passive),this.__scrollTarget=void 0)}},beforeMount(){this.__resetVirtualScroll()},mounted(){this.__configureScrollTarget()},activated(){this.__configureScrollTarget()},deactivated(){this.__unconfigureScrollTarget()},beforeDestroy(){this.__unconfigureScrollTarget()},render(t){if(void 0===this.$scopedSlots.default)return void console.error("QVirtualScroll: default scoped slot is required for rendering",this);let e=this.__padVirtualScroll(t,"list"===this.type?"div":"tbody",this.virtualScrollScope.map(this.$scopedSlots.default));return void 0!==this.$scopedSlots.before&&(e=this.$scopedSlots.before().concat(e)),e=mergeSlot(e,this,"after"),"__qtable"===this.type?getTableMiddle(t,{staticClass:this.classes},e):t(comps[this.type],{class:this.classes,attrs:this.attrs,props:this.qAttrs,on:{...this.qListeners}},e)}});function sortDate(t,e){return new Date(t)-new Date(e)}var Sort={props:{sortMethod:{type:Function,default(t,e,i){const s=this.colList.find(t=>t.name===e);if(void 0===s||void 0===s.field)return t;const o=!0===i?-1:1,n="function"==typeof s.field?t=>s.field(t):t=>t[s.field];return t.sort((t,e)=>{let i=n(t),r=n(e);return null===i||void 0===i?-1*o:null===r||void 0===r?1*o:void 0!==s.sort?s.sort(i,r,t,e)*o:!0===isNumber(i)&&!0===isNumber(r)?(i-r)*o:!0===isDate(i)&&!0===isDate(r)?sortDate(i,r)*o:"boolean"==typeof i&&"boolean"==typeof r?(i-r)*o:([i,r]=[i,r].map(t=>(t+"").toLocaleString().toLowerCase()),i"ad"===t||"da"===t,default:"ad"}},computed:{columnToSort(){const{sortBy:t}=this.computedPagination;if(t)return this.colList.find(e=>e.name===t)||null}},methods:{sort(t){let e=this.columnSortOrder;if(!0===isObject(t))t.sortOrder&&(e=t.sortOrder),t=t.name;else{const i=this.colList.find(e=>e.name===t);void 0!==i&&i.sortOrder&&(e=i.sortOrder)}let{sortBy:i,descending:s}=this.computedPagination;i!==t?(i=t,s="da"===e):!0===this.binaryStateSort?s=!s:!0===s?"ad"===e?i=null:s=!1:"ad"===e?s=!0:i=null,this.setPagination({sortBy:i,descending:s,page:1})}}},Filter={props:{filter:[String,Object],filterMethod:{type:Function,default(t,e,i=this.computedCols,s=this.getCellValue){const o=e?e.toLowerCase():"";return t.filter(t=>i.some(e=>{const i=s(e,t)+"";return-1!==("undefined"===i||"null"===i?"":i.toLowerCase()).indexOf(o)}))}}},watch:{filter:{handler(){this.$nextTick(()=>{this.setPagination({page:1},!0)})},deep:!0}}};function samePagination(t,e){for(const i in e)if(e[i]!==t[i])return!1;return!0}function fixPagination(t){return t.page<1&&(t.page=1),void 0!==t.rowsPerPage&&t.rowsPerPage<1&&(t.rowsPerPage=0),t}var Pagination={props:{pagination:Object,rowsPerPageOptions:{type:Array,default:()=>[5,7,10,15,20,25,50,0]}},computed:{computedPagination(){return fixPagination(void 0!==this.qListeners["update:pagination"]?{...this.innerPagination,...this.pagination}:this.innerPagination)},firstRowIndex(){const{page:t,rowsPerPage:e}=this.computedPagination;return(t-1)*e},lastRowIndex(){const{page:t,rowsPerPage:e}=this.computedPagination;return t*e},isFirstPage(){return 1===this.computedPagination.page},pagesNumber(){return 0===this.computedPagination.rowsPerPage?1:Math.max(1,Math.ceil(this.computedRowsNumber/this.computedPagination.rowsPerPage))},isLastPage(){return 0===this.lastRowIndex||this.computedPagination.page>=this.pagesNumber},computedRowsPerPageOptions(){return(this.rowsPerPageOptions.includes(this.innerPagination.rowsPerPage)?this.rowsPerPageOptions:[this.innerPagination.rowsPerPage].concat(this.rowsPerPageOptions)).map(t=>({label:0===t?this.$q.lang.table.allRows:""+t,value:t}))}},watch:{pagesNumber(t,e){if(t===e)return;const i=this.computedPagination.page;t&&!i?this.setPagination({page:1}):t1&&this.setPagination({page:t-1})},nextPage(){const{page:t,rowsPerPage:e}=this.computedPagination;this.lastRowIndex>0&&t*e["single","multiple","none"].includes(t)},selected:{type:Array,default:()=>[]}},computed:{selectedKeys(){const t={};return this.selected.map(this.getRowKey).forEach(e=>{t[e]=!0}),t},hasSelectionMode(){return"none"!==this.selection},singleSelection(){return"single"===this.selection},multipleSelection(){return"multiple"===this.selection},allRowsSelected(){return this.computedRows.length>0&&this.computedRows.every(t=>!0===this.selectedKeys[this.getRowKey(t)])},someRowsSelected(){return!0!==this.allRowsSelected&&this.computedRows.some(t=>!0===this.selectedKeys[this.getRowKey(t)])},rowsSelectedNumber(){return this.selected.length}},methods:{isRowSelected(t){return!0===this.selectedKeys[t]},clearSelection(){this.$emit("update:selected",[])},__updateSelection(t,e,i,s){this.$emit("selection",{rows:e,added:i,keys:t,evt:s});const o=!0===this.singleSelection?!0===i?e:[]:!0===i?this.selected.concat(e):this.selected.filter(e=>!1===t.includes(this.getRowKey(e)));this.$emit("update:selected",o)}}};function getVal(t){return Array.isArray(t)?t.slice():[]}var RowExpand={props:{expanded:Array},data(){return{innerExpanded:getVal(this.expanded)}},watch:{expanded(t){this.innerExpanded=getVal(t)}},methods:{isRowExpanded(t){return this.innerExpanded.includes(t)},setExpanded(t){void 0!==this.expanded?this.$emit("update:expanded",t):this.innerExpanded=t},__updateExpanded(t,e){const i=this.innerExpanded.slice(),s=i.indexOf(t);!0===e?-1===s&&(i.push(t),this.setExpanded(i)):-1!==s&&(i.splice(s,1),this.setExpanded(i))}}},ColumnSelection={props:{visibleColumns:Array},computed:{colList(){if(void 0!==this.columns)return this.columns;const t=this.data[0];return void 0!==t?Object.keys(t).map(e=>({name:e,label:e.toUpperCase(),field:e,align:isNumber(t[e])?"right":"left",sortable:!0})):[]},computedCols(){const{sortBy:t,descending:e}=this.computedPagination;return(void 0!==this.visibleColumns?this.colList.filter(t=>!0===t.required||!0===this.visibleColumns.includes(t.name)):this.colList).map(i=>{const s=i.align||"right",o=`text-${s}`;return{...i,align:s,__iconClass:`q-table__sort-icon q-table__sort-icon--${s}`,__thClass:o+(void 0!==i.headerClasses?" "+i.headerClasses:"")+(!0===i.sortable?" sortable":"")+(i.name===t?` sorted ${!0===e?"sort-desc":""}`:""),__tdStyle:void 0!==i.style?"function"!=typeof i.style?()=>i.style:i.style:()=>null,__tdClass:void 0!==i.classes?"function"!=typeof i.classes?()=>o+" "+i.classes:t=>o+" "+i.classes(t):()=>o}})},computedColsMap(){const t={};return this.computedCols.forEach(e=>{t[e.name]=e}),t},computedColspan(){return void 0!==this.tableColspan?this.tableColspan:this.computedCols.length+(!0===this.hasSelectionMode?1:0)}}};const commonVirtPropsObj={};commonVirtPropsList.forEach(t=>{commonVirtPropsObj[t]={}});var QTable=Vue__default.default.extend({name:"QTable",mixins:[DarkMixin,ListenersMixin,FullscreenMixin,Top,TableHeader,TableBody,Bottom,TableGrid,Sort,Filter,Pagination,RowSelection,RowExpand,ColumnSelection],props:{data:{type:Array,default:()=>[]},rowKey:{type:[String,Function],default:"id"},columns:Array,loading:Boolean,binaryStateSort:Boolean,iconFirstPage:String,iconPrevPage:String,iconNextPage:String,iconLastPage:String,title:String,hideHeader:Boolean,grid:Boolean,gridHeader:Boolean,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:t=>["horizontal","vertical","cell","none"].includes(t)},wrapCells:Boolean,virtualScroll:Boolean,...commonVirtPropsObj,noDataLabel:String,noResultsLabel:String,loadingLabel:String,selectedRowsLabel:Function,rowsPerPageLabel:String,paginationLabel:Function,color:{type:String,default:"grey-8"},titleClass:[String,Array,Object],tableStyle:[String,Array,Object],tableClass:[String,Array,Object],tableHeaderStyle:[String,Array,Object],tableHeaderClass:[String,Array,Object],cardContainerClass:[String,Array,Object],cardContainerStyle:[String,Array,Object],cardStyle:[String,Array,Object],cardClass:[String,Array,Object]},data(){return{innerPagination:Object.assign({sortBy:null,descending:!1,page:1,rowsPerPage:this.rowsPerPageOptions.length>0?this.rowsPerPageOptions[0]:5},this.pagination)}},watch:{needsReset(){!0===this.hasVirtScroll&&void 0!==this.$refs.virtScroll&&this.$refs.virtScroll.reset()}},computed:{getRowKey(){return"function"==typeof this.rowKey?this.rowKey:t=>t[this.rowKey]},hasVirtScroll(){return!0!==this.grid&&!0===this.virtualScroll},needsReset(){return["tableStyle","tableClass","tableHeaderStyle","tableHeaderClass","__containerClass"].map(t=>this[t]).join(";")},filteredSortedRows(){let t=this.data;if(!0===this.isServerSide||0===t.length)return t;const{sortBy:e,descending:i}=this.computedPagination;return this.filter&&(t=this.filterMethod(t,this.filter,this.computedCols,this.getCellValue)),void 0!==this.columnToSort&&(t=this.sortMethod(this.data===t?t.slice():t,e,i)),t},filteredSortedRowsNumber(){return this.filteredSortedRows.length},computedRows(){let t=this.filteredSortedRows;if(!0===this.isServerSide)return t;const{rowsPerPage:e}=this.computedPagination;return 0!==e&&(0===this.firstRowIndex&&this.data!==t?t.length>this.lastRowIndex&&(t=t.slice(0,this.lastRowIndex)):t=t.slice(this.firstRowIndex,this.lastRowIndex)),t},computedRowsNumber(){return!0===this.isServerSide?this.computedPagination.rowsNumber||0:this.filteredSortedRowsNumber},nothingToDisplay(){return 0===this.computedRows.length},isServerSide(){return void 0!==this.computedPagination.rowsNumber},cardDefaultClass(){return" q-table__card"+` q-table__card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.square?" q-table--square":"")+(!0===this.flat?" q-table--flat":"")+(!0===this.bordered?" q-table--bordered":"")},__containerClass(){return`q-table__container q-table--${this.separator}-separator column no-wrap`+(!0===this.grid?" q-table--grid":this.cardDefaultClass)+` q-table--${this.darkSuffix}`+(!0===this.dense?" q-table--dense":"")+(!1===this.wrapCells?" q-table--no-wrap":"")+(!0===this.inFullscreen?" fullscreen scroll":"")},containerClass(){return this.__containerClass+(!0===this.loading?" q-table--loading":"")},virtProps(){const t={};return commonVirtPropsList.forEach(e=>{t[e]=this[e]}),void 0===t.virtualScrollItemSize&&(t.virtualScrollItemSize=!0===this.dense?28:48),t}},render(t){const e=[this.__getTopDiv(t)],i={staticClass:this.containerClass};return!0===this.grid?e.push(this.__getGridHeader(t)):Object.assign(i,{class:this.cardClass,style:this.cardStyle}),e.push(this.__getBody(t),this.__getBottomDiv(t)),!0===this.loading&&void 0!==this.$scopedSlots.loading&&e.push(this.$scopedSlots.loading()),t("div",i,e)},methods:{requestServerInteraction(t={}){this.$nextTick(()=>{this.$emit("request",{pagination:t.pagination||this.computedPagination,filter:t.filter||this.filter,getCellValue:this.getCellValue})})},resetVirtualScroll(){!0===this.hasVirtScroll&&this.$refs.virtScroll.reset()},__getBody(t){if(!0===this.grid)return this.__getGridBody(t);const e=!0!==this.hideHeader?this.__getTHead(t):null;if(!0===this.hasVirtScroll){const i=this.$scopedSlots["top-row"],s=this.$scopedSlots["bottom-row"],o={default:this.__getVirtualTBodyTR(t)};if(void 0!==i){const s=t("tbody",i({cols:this.computedCols}));o.before=null===e?()=>[s]:()=>[e].concat(s)}else null!==e&&(o.before=(()=>e));return void 0!==s&&(o.after=(()=>t("tbody",s({cols:this.computedCols})))),t(QVirtualScroll,{key:"vs",ref:"virtScroll",props:{...this.virtProps,items:this.computedRows,type:"__qtable",tableColspan:this.computedColspan},on:cache(this,"vs",{"virtual-scroll":this.__onVScroll}),class:this.tableClass,style:this.tableStyle,scopedSlots:o})}return getTableMiddle(t,{staticClass:"scroll",class:this.tableClass,style:this.tableStyle},[e,this.__getTBody(t)])},scrollTo(t,e){if(void 0!==this.$refs.virtScroll)return void this.$refs.virtScroll.scrollTo(t,e);t=parseInt(t,10);const i=this.$el.querySelector(`tbody tr:nth-of-type(${t+1})`);if(null!==i){const e=this.$el.querySelector(".q-table__middle.scroll"),s=i.offsetTop-this.virtualScrollStickySizeStart,o=s/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t)},options:Function,hourOptions:Array,minuteOptions:Array,secondOptions:Array,withSeconds:Boolean,nowBtn:Boolean},data(){const t=__splitDate(this.value,this.__getMask(),this.__getLocale(),this.calendar,this.__getDefaultDateModel());let e="Hour";return null!==t.hour&&(null===t.minute?e="Minute":!0===this.withSeconds&&null===t.second&&(e="Second")),{view:e,isAM:null===t.hour||t.hour<12,innerModel:t}},watch:{value(t){const e=__splitDate(t,this.computedMask,this.computedLocale,this.calendar,this.defaultDateModel);e.dateHash===this.innerModel.dateHash&&e.timeHash===this.innerModel.timeHash||(this.innerModel=e,null===e.hour?this.__goToView("Hour"):(this.isAM=e.hour<12,null===e.minute&&"Second"===this.view&&this.__goToView("Minute")))},computedMask(){this.$nextTick(()=>{this.__updateValue()})},computedLocale(){this.$nextTick(()=>{this.__updateValue()})}},computed:{classes(){return`q-time q-time--${!0===this.landscape?"landscape":"portrait"}`+` q-time--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.disable?" disabled":!0===this.readonly?" q-time--readonly":"")+(!0===this.bordered?" q-time--bordered":"")+(!0===this.square?" q-time--square no-border-radius":"")+(!0===this.flat?" q-time--flat no-shadow":"")+" q-key-group-navigation--ignore-key"},stringModel(){const t=this.innerModel;return{hour:null===t.hour?"--":!0===this.computedFormat24h?pad(t.hour):String(!0===this.isAM?0===t.hour?12:t.hour:t.hour>12?t.hour-12:t.hour),minute:null===t.minute?"--":pad(t.minute),second:null===t.second?"--":pad(t.second)}},defaultDateModel(){return this.__getDefaultDateModel()},computedFormat24h(){return null!==this.format24h?this.format24h:this.$q.lang.date.format24h},pointerStyle(){const t="Hour"===this.view,e=!0===t?12:60,i=this.innerModel[this.view.toLowerCase()];let s=`rotate(${Math.round(i*(360/e))-180}deg) translateX(-50%)`;return!0===t&&!0===this.computedFormat24h&&this.innerModel.hour>=12&&(s+=" scale(.7)"),{transform:s}},minLink(){return null!==this.innerModel.hour},secLink(){return!0===this.minLink&&null!==this.innerModel.minute},hourInSelection(){return void 0!==this.hourOptions?t=>this.hourOptions.includes(t):void 0!==this.options?t=>this.options(t,null,null):void 0},minuteInSelection(){return void 0!==this.minuteOptions?t=>this.minuteOptions.includes(t):void 0!==this.options?t=>this.options(this.innerModel.hour,t,null):void 0},secondInSelection(){return void 0!==this.secondOptions?t=>this.secondOptions.includes(t):void 0!==this.options?t=>this.options(this.innerModel.hour,this.innerModel.minute,t):void 0},validHours(){if(void 0!==this.hourInSelection){const t=this.__getValidValues(0,11,this.hourInSelection),e=this.__getValidValues(12,11,this.hourInSelection);return{am:t,pm:e,values:t.values.concat(e.values)}}},validMinutes(){if(void 0!==this.minuteInSelection)return this.__getValidValues(0,59,this.minuteInSelection)},validSeconds(){if(void 0!==this.secondInSelection)return this.__getValidValues(0,59,this.secondInSelection)},viewValidOptions(){switch(this.view){case"Hour":return this.validHours;case"Minute":return this.validMinutes;case"Second":return this.validSeconds}},positions(){let t,e,i=0,s=1;const o=void 0!==this.viewValidOptions?this.viewValidOptions.values:void 0;"Hour"===this.view?!0===this.computedFormat24h?(t=0,e=23):(t=0,e=11,!1===this.isAM&&(i=12)):(t=0,e=55,s=5);const n=[];for(let r=t,a=t;r<=e;r+=s,a++){const t=r+i,e=void 0!==o&&!1===o.includes(t),s="Hour"===this.view&&0===r?!0===this.computedFormat24h?"00":"12":r;n.push({val:t,index:a,disable:e,label:s})}return n}},methods:{setNow(){const t=__splitDate(this.__updateValue({...this.__getCurrentDate(),...this.__getCurrentTime()}),this.computedMask,this.computedLocale,this.calendar,this.defaultDateModel);this.innerModel=t,this.isAM=t.hour<12,this.__goToView("Hour")},__getValidValues(t,e,i){const s=Array.apply(null,{length:e+1}).map((e,s)=>{const o=s+t;return{index:o,val:!0===i(o)}}).filter(t=>!0===t.val).map(t=>t.index);return{min:s[0],max:s[s.length-1],values:s,threshold:e+1}},__getWheelDist(t,e,i){const s=Math.abs(t-e);return Math.min(s,i-s)},__getNormalizedClockValue(t,{min:e,max:i,values:s,threshold:o}){if(t===e)return e;if(ti)return this.__getWheelDist(t,e,o)<=this.__getWheelDist(t,i,o)?e:i;const n=s.findIndex(e=>t<=e),r=s[n-1],a=s[n];return t-r<=a-t?r:a},__getMask(){return"persian"!==this.calendar&&null!==this.mask?this.mask:`HH:mm${!0===this.withSeconds?":ss":""}`},__getDefaultDateModel(){if("string"!=typeof this.defaultDate){const t=this.__getCurrentDate(!0);return t.dateHash=this.__getDayHash(t),t}return __splitDate(this.defaultDate,"YYYY/MM/DD",void 0,this.calendar)},__click(t){!0!==this.__shouldAbortInteraction()&&(!0!==this.$q.platform.is.desktop&&this.__updateClock(t,this.__getClockRect()),this.__goToNextView())},__activate(t){!0!==this.__shouldAbortInteraction()&&this.__updateClock(t,this.__getClockRect())},__shouldAbortInteraction(){return!0===this._isBeingDestroyed||!0===this._isDestroyed||void 0!==this.viewValidOptions&&(0===this.viewValidOptions.values.length||"Hour"===this.view&&!0!==this.computedFormat24h&&0===this.validHours[!0===this.isAM?"am":"pm"].values.length)},__getClockRect(){const t=this.$refs.clock,{top:e,left:i,width:s}=t.getBoundingClientRect(),o=s/2;return{top:e+o,left:i+o,dist:.7*o}},__goToView(t){this.view!==t&&(this.view=t),void 0!==this.$refs[t]&&this.$refs[t]!==document.activeElement&&this.$refs[t].focus()},__goToNextView(){"Hour"===this.view?this.__goToView("Minute"):this.withSeconds&&"Minute"===this.view?this.__goToView("Second"):this.__updateValue(void 0,!0)},__drag(t){!0!==this.__shouldAbortInteraction()&&(!0===t.isFinal?(this.draggingClockRect=!1,this.dragCache=null,this.__goToNextView()):!0===t.isFirst?(this.draggingClockRect=this.__getClockRect(),this.dragCache=this.__updateClock(t.evt,this.draggingClockRect)):this.dragCache=this.__updateClock(t.evt,this.draggingClockRect,this.dragCache))},__updateClock(t,e,i){const s=position(t),o=Math.abs(s.top-e.top),n=Math.sqrt(Math.pow(Math.abs(s.top-e.top),2)+Math.pow(Math.abs(s.left-e.left),2));let r,a=Math.asin(o/n)*(180/Math.PI);if(a=s.top0&&this.validHours.pm.values.length>0?n>=e.dist:this.validHours.am.values.length>0;r=this.__getNormalizedClockValue(r+(!0===t?0:12),this.validHours[!0===t?"am":"pm"])}else r=Math.round(r),!0===this.computedFormat24h?n{this.view="Hour"},keydown:preventKbdArrows,keyup:this.__onKeyupHour})},[this.stringModel.hour]),t("div",[":"]),t("div",!0===this.minLink?{key:"vM",ref:"Minute",staticClass:"q-time__link",class:"Minute"===this.view?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex,"data-autofocus":"Minute"===this.view},on:cache(this,"vM",{focus:()=>{this.view="Minute"},keydown:preventKbdArrows,keyup:this.__onKeyupMinute})}:{staticClass:"q-time__link"},[this.stringModel.minute])];return!0===this.withSeconds&&e.push(t("div",[":"]),t("div",!0===this.secLink?{key:"vS",ref:"Second",staticClass:"q-time__link",class:"Second"===this.view?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex,"data-autofocus":"Second"===this.view},on:cache(this,"vS",{focus:()=>{this.view="Second"},keydown:preventKbdArrows,keyup:this.__onKeyupSecond})}:{staticClass:"q-time__link"},[this.stringModel.second])),t("div",{staticClass:"q-time__header flex flex-center no-wrap",class:this.headerClass},[t("div",{staticClass:"q-time__header-label row items-center no-wrap",attrs:{dir:"ltr"}},e),!1===this.computedFormat24h?t("div",{staticClass:"q-time__header-ampm column items-between no-wrap"},[t("div",{key:"AM",staticClass:"q-time__link",class:!0===this.isAM?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:cache(this,"AM",{click:this.__setAm,keyup:t=>{13===t.keyCode&&this.__setAm()}})},["AM"]),t("div",{key:"PM",staticClass:"q-time__link",class:!0!==this.isAM?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:cache(this,"PM",{click:this.__setPm,keyup:t=>{13===t.keyCode&&this.__setPm()}})},["PM"])]):null])},__getClock(t){const e=this.view.toLowerCase(),i=this.innerModel[e];return t("div",{staticClass:"q-time__content col relative-position"},[t("transition",{props:{name:"q-transition--scale"}},[t("div",{key:"clock"+this.view,staticClass:"q-time__container-parent absolute-full"},[t("div",{ref:"clock",staticClass:"q-time__container-child fit overflow-hidden"},[t("div",{key:"click",staticClass:"q-time__clock cursor-pointer non-selectable",on:cache(this,"click",{click:this.__click,mousedown:this.__activate}),directives:cache(this,"touch",[{name:"touch-pan",value:this.__drag,modifiers:{stop:!0,prevent:!0,mouse:!0}}])},[t("div",{staticClass:"q-time__clock-circle fit"},[t("div",{staticClass:"q-time__clock-pointer",style:this.pointerStyle,class:null===this.innerModel[e]?"hidden":void 0!==this.color?`text-${this.color}`:""}),this.positions.map(e=>t("div",{staticClass:`q-time__clock-position row flex-center q-time__clock-pos-${e.index}`,class:e.val===i?this.headerClass.concat(" q-time__clock-position--active"):!0===e.disable?"q-time__clock-position--disabled":null},[t("span",[e.label])]))])])])])]),!0===this.nowBtn?t(QBtn,{key:"now",staticClass:"q-time__now-button absolute",props:{icon:this.$q.iconSet.datetime.now,unelevated:!0,size:"sm",round:!0,color:this.color,textColor:this.textColor,tabindex:this.computedTabindex},on:cache(this,"now",{click:this.setNow})}):null])},__setHour(t){this.innerModel.hour!==t&&(this.innerModel.hour=t,this.__verifyAndUpdate())},__setMinute(t){this.innerModel.minute!==t&&(this.innerModel.minute=t,this.__verifyAndUpdate())},__setSecond(t){this.innerModel.second!==t&&(this.innerModel.second=t,this.__verifyAndUpdate())},__setAm(){!1===this.isAM&&(this.isAM=!0,null!==this.innerModel.hour&&(this.innerModel.hour-=12,this.__verifyAndUpdate()))},__setPm(){!0===this.isAM&&(this.isAM=!1,null!==this.innerModel.hour&&(this.innerModel.hour+=12,this.__verifyAndUpdate()))},__verifyAndUpdate(){return void 0!==this.hourInSelection&&!0!==this.hourInSelection(this.innerModel.hour)?(this.innerModel=__splitDate(),void this.__goToView("Hour")):void 0!==this.minuteInSelection&&!0!==this.minuteInSelection(this.innerModel.minute)?(this.innerModel.minute=null,this.innerModel.second=null,void this.__goToView("Minute")):!0===this.withSeconds&&void 0!==this.secondInSelection&&!0!==this.secondInSelection(this.innerModel.second)?(this.innerModel.second=null,void this.__goToView("Second")):void(null===this.innerModel.hour||null===this.innerModel.minute||!0===this.withSeconds&&null===this.innerModel.second||this.__updateValue())},__updateValue(t,e){const i=Object.assign({...this.innerModel},t),s="persian"===this.calendar?pad(i.hour)+":"+pad(i.minute)+(!0===this.withSeconds?":"+pad(i.second):""):formatDate(__safeCreateDate(i.year,null===i.month?null:i.month-1,i.day,i.hour,i.minute,i.second,i.millisecond),this.computedMask,this.computedLocale,i.year,i.timezoneOffset);return i.changed=s!==this.value,!0===e&&!0!==i.changed||this.$emit("input",s,i),!0===e&&this.$emit("change",s,i),s}},render(t){const e=[this.__getClock(t)],i=slot(this,"default");return void 0!==i&&e.push(t("div",{staticClass:"q-time__actions"},i)),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{class:this.classes,on:{...this.qListeners},attrs:{tabindex:-1}},[this.__getHeader(t),t("div",{staticClass:"q-time__main col overflow-auto"},e)])}}),QTimeline=Vue__default.default.extend({name:"QTimeline",mixins:[DarkMixin,ListenersMixin],provide(){return{__timeline:this}},props:{color:{type:String,default:"primary"},side:{type:String,default:"right",validator:t=>["left","right"].includes(t)},layout:{type:String,default:"dense",validator:t=>["dense","comfortable","loose"].includes(t)}},computed:{classes(){return`q-timeline--${this.layout} q-timeline--${this.layout}--${this.side}`+` q-timeline--${this.darkSuffix}`}},render(t){return t("ul",{staticClass:"q-timeline",class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QTimelineEntry=Vue__default.default.extend({name:"QTimelineEntry",inject:{__timeline:{default(){console.error("QTimelineEntry needs to be child of QTimeline")}}},mixins:[ListenersMixin],props:{heading:Boolean,tag:{type:String,default:"h3"},side:{type:String,default:"right",validator:t=>["left","right"].includes(t)},icon:String,avatar:String,color:String,title:String,subtitle:String,body:String},computed:{colorClass(){return`text-${this.color||this.__timeline.color}`},classes(){return`q-timeline__entry--${this.side}`+(void 0!==this.icon||void 0!==this.avatar?" q-timeline__entry--icon":"")},reverse(){return"comfortable"===this.__timeline.layout&&"left"===this.__timeline.side}},render(t){const e=uniqueSlot(this,"default",[]);if(void 0!==this.body&&e.unshift(this.body),!0===this.heading){const i=[t("div"),t("div"),t(this.tag,{staticClass:"q-timeline__heading-title"},e)];return t("div",{staticClass:"q-timeline__heading",on:{...this.qListeners}},!0===this.reverse?i.reverse():i)}let i;void 0!==this.icon?i=[t(QIcon,{staticClass:"row items-center justify-center",props:{name:this.icon}})]:void 0!==this.avatar&&(i=[t("img",{staticClass:"q-timeline__dot-img",domProps:{src:this.avatar}})]);const s=[t("div",{staticClass:"q-timeline__subtitle"},[t("span",slot(this,"subtitle",[this.subtitle]))]),t("div",{staticClass:"q-timeline__dot",class:this.colorClass},i),t("div",{staticClass:"q-timeline__content"},[t("h6",{staticClass:"q-timeline__title"},slot(this,"title",[this.title]))].concat(e))];return t("li",{staticClass:"q-timeline__entry",class:this.classes,on:{...this.qListeners}},!0===this.reverse?s.reverse():s)}});const attrs={role:"toolbar"};var QToolbar=Vue__default.default.extend({name:"QToolbar",mixins:[ListenersMixin],props:{inset:Boolean},render(t){return t("div",{staticClass:"q-toolbar row no-wrap items-center",class:this.inset?"q-toolbar--inset":null,attrs:attrs,on:{...this.qListeners}},slot(this,"default"))}}),QToolbarTitle=Vue__default.default.extend({name:"QToolbarTitle",mixins:[ListenersMixin],props:{shrink:Boolean},computed:{classes(){return"q-toolbar__title ellipsis"+(!0===this.shrink?" col-shrink":"")}},render(t){return t("div",{class:this.classes,on:{...this.qListeners}},slot(this,"default"))}});const tickStrategyOptions=["none","strict","leaf","leaf-filtered"];var QTree=Vue__default.default.extend({name:"QTree",mixins:[DarkMixin],props:{nodes:{type:Array,required:!0},nodeKey:{type:String,required:!0},labelKey:{type:String,default:"label"},childrenKey:{type:String,default:"children"},dense:Boolean,color:String,controlColor:String,textColor:String,selectedColor:String,icon:String,tickStrategy:{type:String,default:"none",validator:t=>tickStrategyOptions.includes(t)},ticked:Array,expanded:Array,selected:{},noSelectionUnset:Boolean,defaultExpandAll:Boolean,accordion:Boolean,filter:String,filterMethod:{type:Function,default(t,e){const i=e.toLowerCase();return t[this.labelKey]&&t[this.labelKey].toLowerCase().indexOf(i)>-1}},duration:Number,noConnectors:Boolean,noTransition:Boolean,noNodesLabel:String,noResultsLabel:String},computed:{classes(){return`q-tree q-tree--${!0===this.dense?"dense":"standard"}`+(!0===this.noConnectors?" q-tree--no-connectors":"")+` q-tree--${this.darkSuffix}`+(void 0!==this.color?` text-${this.color}`:"")},hasSelection(){return void 0!==this.selected},computedIcon(){return this.icon||this.$q.iconSet.tree.icon},computedControlColor(){return this.controlColor||this.color},textColorClass(){if(void 0!==this.textColor)return`text-${this.textColor}`},selectedColorClass(){const t=this.selectedColor||this.color;if(t)return`text-${t}`},meta(){const t=this.metaMap;t.clear();const e=(i,s)=>{const o=i.tickStrategy||(s?s.tickStrategy:this.tickStrategy),n=i[this.nodeKey],r=i[this.childrenKey]&&i[this.childrenKey].length>0,a=!0!==i.disabled&&!0===this.hasSelection&&!1!==i.selectable,l=!0!==i.disabled&&!1!==i.expandable,h="none"!==o,d="strict"===o,c="leaf-filtered"===o,u="leaf"===o||"leaf-filtered"===o;let p=!0!==i.disabled&&!1!==i.tickable;!0===u&&!0===p&&s&&!0!==s.tickable&&(p=!1);let m=i.lazy;!0===m&&void 0!==this.lazy[n]&&!0===Array.isArray(i[this.childrenKey])&&(m=this.lazy[n]);const g={key:n,parent:s,isParent:r,lazy:m,disabled:i.disabled,link:!0!==i.disabled&&(!0===a||!0===l&&(!0===r||!0===m)),children:[],matchesFilter:!this.filter||this.filterMethod(i,this.filter),selected:n===this.selected&&!0===a,selectable:a,expanded:!0===r&&this.innerExpanded.includes(n),expandable:l,noTick:!0===i.noTick||!0!==d&&m&&"loaded"!==m,tickable:p,tickStrategy:o,hasTicking:h,strictTicking:d,leafFilteredTicking:c,leafTicking:u,ticked:!0===d?this.innerTicked.includes(n):!0!==r&&this.innerTicked.includes(n)};if(!0===g.expanded&&!0!==this.renderedMap.has(n)&&this.renderedMap.set(n,!0),t.set(n,g),!0===r&&(g.children=i[this.childrenKey].map(t=>e(t,g)),this.filter&&(!0!==g.matchesFilter?g.matchesFilter=g.children.some(t=>t.matchesFilter):!0!==g.noTick&&!0!==g.disabled&&!0===g.tickable&&!0===c&&!0===g.children.every(t=>!0!==t.matchesFilter||!0===t.noTick||!0!==t.tickable)&&(g.tickable=!1)),!0===g.matchesFilter&&(!0!==g.noTick&&!0!==d&&!0===g.children.every(t=>t.noTick)&&(g.noTick=!0),u))){if(g.ticked=!1,g.indeterminate=g.children.some(t=>!0===t.indeterminate),g.tickable=!0===g.tickable&&g.children.some(t=>t.tickable),!0!==g.indeterminate){const t=g.children.reduce((t,e)=>!0===e.ticked?t+1:t,0);t===g.children.length?g.ticked=!0:t>0&&(g.indeterminate=!0)}!0===g.indeterminate&&(g.indeterminateNextState=g.children.every(t=>!0!==t.tickable||!0!==t.ticked))}return g};return this.nodes.forEach(t=>e(t,null)),t}},data(){return{lazy:{},innerTicked:this.ticked||[],innerExpanded:this.expanded||[]}},watch:{ticked(t){this.innerTicked=t},expanded(t){this.innerExpanded=t}},methods:{getNodeByKey(t){const e=[].reduce,i=(s,o)=>s||!o?s:!0===Array.isArray(o)?e.call(Object(o),i,s):o[this.nodeKey]===t?o:o[this.childrenKey]?i(null,o[this.childrenKey]):void 0;return i(null,this.nodes)},getTickedNodes(){return this.innerTicked.map(t=>this.getNodeByKey(t))},getExpandedNodes(){return this.innerExpanded.map(t=>this.getNodeByKey(t))},isExpanded(t){const e=this.meta.get(t);return void 0!==e&&e.expanded},collapseAll(){void 0!==this.expanded?this.$emit("update:expanded",[]):this.innerExpanded=[]},expandAll(){const t=this.innerExpanded,e=i=>{i[this.childrenKey]&&i[this.childrenKey].length>0&&!1!==i.expandable&&!0!==i.disabled&&(t.push(i[this.nodeKey]),i[this.childrenKey].forEach(e))};this.nodes.forEach(e),void 0!==this.expanded?this.$emit("update:expanded",t):this.innerExpanded=t},setExpanded(t,e,i=this.getNodeByKey(t),s=this.meta.get(t)){if(s.lazy&&"loaded"!==s.lazy){if("loading"===s.lazy)return;this.$set(this.lazy,t,"loading"),!0!==Array.isArray(i[this.childrenKey])&&this.$set(i,this.childrenKey,[]),this.$emit("lazy-load",{node:i,key:t,done:e=>{this.lazy[t]="loaded",this.$set(i,this.childrenKey,!0===Array.isArray(e)?e:[]),this.$nextTick(()=>{const e=this.meta.get(t);void 0!==e&&!0===e.isParent&&this.__setExpanded(t,!0)})},fail:()=>{this.$delete(this.lazy,t),0===i[this.childrenKey].length&&this.$delete(i,this.childrenKey)}})}else!0===s.isParent&&!0===s.expandable&&this.__setExpanded(t,e)},__setExpanded(t,e){let i=this.innerExpanded;const s=void 0!==this.expanded;if(!0===s&&(i=i.slice()),e){if(this.accordion){const e=this.meta.get(t);if(void 0!==e){const s=[];e.parent?e.parent.children.forEach(e=>{e.key!==t&&!0===e.expandable&&s.push(e.key)}):this.nodes.forEach(e=>{const i=e[this.nodeKey];i!==t&&s.push(i)}),s.length>0&&(i=i.filter(t=>!1===s.includes(t)))}}i=i.concat([t]).filter((t,e,i)=>i.indexOf(t)===e)}else i=i.filter(e=>e!==t);!0===s?this.$emit("update:expanded",i):this.innerExpanded=i},isTicked(t){const e=this.meta.get(t);return void 0!==e&&e.ticked},setTicked(t,e){let i=this.innerTicked;const s=void 0!==this.ticked;!0===s&&(i=i.slice()),i=e?i.concat(t).filter((t,e,i)=>i.indexOf(t)===e):i.filter(e=>!1===t.includes(e)),!0===s&&this.$emit("update:ticked",i)},__getSlotScope(t,e,i){const s={tree:this,node:t,key:i,color:this.color,dark:this.dark};return injectProp(s,"expanded",()=>e.expanded,t=>{t!==e.expanded&&this.setExpanded(i,t)}),injectProp(s,"ticked",()=>e.ticked,t=>{t!==e.ticked&&this.setTicked([i],t)}),s},__getChildren(t,e){return(this.filter?e.filter(t=>this.meta.get(t[this.nodeKey]).matchesFilter):e).map(e=>this.__getNode(t,e))},__getNodeMedia(t,e){if(void 0!==e.icon)return t(QIcon,{staticClass:"q-tree__icon q-mr-sm",props:{name:e.icon,color:e.iconColor}});const i=e.img||e.avatar;return i?t("img",{staticClass:`q-tree__${e.img?"img":"avatar"} q-mr-sm`,attrs:{src:i}}):void 0},__getNode(t,e){const i=e[this.nodeKey],s=this.meta.get(i),o=e.header&&this.$scopedSlots[`header-${e.header}`]||this.$scopedSlots["default-header"],n=!0===s.isParent?this.__getChildren(t,e[this.childrenKey]):[],r=n.length>0||s.lazy&&"loaded"!==s.lazy;let a=e.body&&this.$scopedSlots[`body-${e.body}`]||this.$scopedSlots["default-body"];const l=void 0!==o||void 0!==a?this.__getSlotScope(e,s,i):null;void 0!==a&&(a=t("div",{staticClass:"q-tree__node-body relative-position"},[t("div",{class:this.textColorClass},[a(l)])]));const h=()=>t("div",{staticClass:"q-tree__node-collapsible",class:this.textColorClass,directives:[{name:"show",value:s.expanded}]},!0===this.renderedMap.has(i)?[a,t("div",{staticClass:"q-tree__children",class:{"q-tree__node--disabled":s.disabled}},n)]:void 0);return t("div",{key:i,staticClass:"q-tree__node relative-position",class:{"q-tree__node--parent":r,"q-tree__node--child":!0!==r}},[t("div",{staticClass:"q-tree__node-header relative-position row no-wrap items-center",class:{"q-tree__node--link q-hoverable q-focusable":s.link,"q-tree__node--selected":s.selected,"q-tree__node--disabled":s.disabled},attrs:{tabindex:s.link?0:-1},on:{click:t=>{this.__onClick(e,s,t)},keypress:t=>{!0!==shouldIgnoreKey(t)&&(13===t.keyCode?this.__onClick(e,s,t,!0):32===t.keyCode&&this.__onExpandClick(e,s,t,!0))}}},[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:`blurTarget_${s.key}`}),"loading"===s.lazy?t(QSpinner,{staticClass:"q-tree__spinner",props:{color:this.computedControlColor}}):!0===r?t(QIcon,{staticClass:"q-tree__arrow",class:{"q-tree__arrow--rotate":s.expanded},props:{name:this.computedIcon},on:{click:t=>{this.__onExpandClick(e,s,t)}}}):null,!0===s.hasTicking&&!0!==s.noTick?t(QCheckbox,{staticClass:"q-tree__tickbox",props:{value:!0===s.indeterminate?null:s.ticked,color:this.computedControlColor,dark:this.dark,dense:!0,keepColor:!0,disable:!0!==s.tickable},on:{keydown:stopAndPrevent,input:t=>{this.__onTickedClick(s,t)}}}):null,t("div",{staticClass:"q-tree__node-header-content col row no-wrap items-center",class:s.selected?this.selectedColorClass:this.textColorClass},[o?o(l):[this.__getNodeMedia(t,e),t("div",e[this.labelKey])]])]),!0===r?!0===this.noTransition?h():t(QSlideTransition,{key:"slide",props:{duration:this.duration},on:cache(this,"slide",{show:()=>{this.$emit("after-show")},hide:()=>{this.$emit("after-hide")}})},[h()]):!0===this.renderedMap.has(i)?a:void 0])},__blur(t){const e=this.$refs[`blurTarget_${t}`];void 0!==e&&e.focus()},__onClick(t,e,i,s){!0!==s&&this.__blur(e.key),this.hasSelection&&e.selectable?!1===this.noSelectionUnset?this.$emit("update:selected",e.key!==this.selected?e.key:null):e.key!==this.selected&&this.$emit("update:selected",void 0===e.key?null:e.key):this.__onExpandClick(t,e,i,s),"function"==typeof t.handler&&t.handler(t)},__onExpandClick(t,e,i,s){void 0!==i&&stopAndPrevent(i),!0!==s&&this.__blur(e.key),this.setExpanded(e.key,!0!==e.expanded,t,e)},__onTickedClick(t,e){if(!0===t.indeterminate&&(e=t.indeterminateNextState),t.strictTicking)this.setTicked([t.key],e);else if(t.leafTicking){const i=[],s=t=>{t.isParent?(!0!==e&&!0!==t.noTick&&!0===t.tickable&&i.push(t.key),!0===t.leafTicking&&t.children.forEach(s)):!0===t.noTick||!0!==t.tickable||!0===t.leafFilteredTicking&&!0!==t.matchesFilter||i.push(t.key)};s(t),this.setTicked(i,e)}}},render(t){const e=this.__getChildren(t,this.nodes);return t("div",{class:this.classes},0===e.length?this.filter?this.noResultsLabel||this.$q.lang.tree.noResults:this.noNodesLabel||this.$q.lang.tree.noNodes:e)},created(){this.renderedMap=new Map,this.metaMap=new Map,!0===this.defaultExpandAll&&this.expandAll()},beforeDestroy(){this.renderedMap.clear(),this.renderedMap=void 0,this.metaMap.clear(),this.metaMap=void 0}}),QUploaderBase=Vue__default.default.extend({name:"QUploaderBase",mixins:[DarkMixin,FileMixin],props:{label:String,color:String,textColor:String,square:Boolean,flat:Boolean,bordered:Boolean,noThumbnails:Boolean,autoUpload:Boolean,hideUploadBtn:Boolean,disable:Boolean,readonly:Boolean},provide(){return{__qUploaderGetInput:this.__getInputControl}},data:()=>({files:[],queuedFiles:[],uploadedFiles:[],dnd:!1,expanded:!1,uploadSize:0,uploadedSize:0}),watch:{isUploading(t,e){!1===e&&!0===t?this.$emit("start"):!0===e&&!1===t&&this.$emit("finish")}},computed:{canUpload(){return!0===this.editable&&!0!==this.isBusy&&!0!==this.isUploading&&this.queuedFiles.length>0},canAddFiles(){return!0===this.editable&&!0!==this.isUploading&&(!0===this.multiple||0===this.queuedFiles.length)&&(void 0===this.maxFiles||this.files.length{this.uploadedFiles=[]})},removeQueuedFiles(){this.__removeFiles(["idle","failed"],({size:t})=>{this.uploadSize-=t,this.queuedFiles=[]})},__removeFiles(t,e){if(!0===this.disable)return;const i={files:[],size:0},s=this.files.filter(e=>-1===t.indexOf(e.__status)||(i.size+=e.size,i.files.push(e),void 0!==e.__img&&window.URL.revokeObjectURL(e.__img.src),!1));i.files.length>0&&(this.files=s,void 0!==e&&e(i),this.$emit("removed",i.files))},removeFile(t){this.disable||("uploaded"===t.__status?this.uploadedFiles=this.uploadedFiles.filter(e=>e.__key!==t.__key):"uploading"===t.__status?t.__abort():this.uploadSize-=t.size,this.files=this.files.filter(e=>e.__key!==t.__key||(void 0!==e.__img&&window.URL.revokeObjectURL(e.__img.src),!1)),this.queuedFiles=this.queuedFiles.filter(e=>e.__key!==t.__key),this.$emit("removed",[t]))},__revokeImgURLs(){this.files.forEach(t=>{void 0!==t.__img&&window.URL.revokeObjectURL(t.__img.src)})},__getFileInput(){return this.$refs.input||this.$el.getElementsByClassName("q-uploader__input")[0]},__getProgressLabel:t=>(100*t).toFixed(2)+"%",__updateFile(t,e,i){if(t.__status=e,"idle"===e)return t.__uploaded=0,t.__progress=0,t.__sizeLabel=humanStorageSize(t.size),void(t.__progressLabel="0.00%");"failed"!==e?(t.__uploaded="uploaded"===e?t.size:i,t.__progress="uploaded"===e?1:Math.min(.9999,t.__uploaded/t.size),t.__progressLabel=this.__getProgressLabel(t.__progress),this.$forceUpdate()):this.$forceUpdate()},__addFiles(t,e){const i=this.__processFiles(t,e,this.files,!0),s=this.__getFileInput();void 0!==s&&(s.value=""),void 0!==i&&(i.forEach(t=>{if(this.__updateFile(t,"idle"),this.uploadSize+=t.size,!0!==this.noThumbnails&&t.type.toUpperCase().startsWith("IMAGE")){const e=new Image;e.src=window.URL.createObjectURL(t),t.__img=e}}),this.files=this.files.concat(i),this.queuedFiles=this.queuedFiles.concat(i),this.$emit("added",i),!0===this.autoUpload&&this.upload())},__getBtn(t,e,i,s){if(!0===e)return t(QBtn,{props:{type:"a",icon:this.$q.iconSet.uploader[i],flat:!0,dense:!0},on:{click:"add"===i?this.pickFiles:s}},"add"===i?this.__getInputControl(t):null)},__getInputControl(t){return[t("input",{key:"input",ref:"input",staticClass:"q-uploader__input overflow-hidden absolute-full",attrs:{tabindex:-1,type:"file",title:"",accept:this.accept,capture:this.capture,...!0===this.multiple?{multiple:!0}:{}},on:cache(this,"input",{mousedown:stop,click:this.pickFiles,change:this.__addFiles})})]},__getHeader(t){return void 0!==this.$scopedSlots.header?this.$scopedSlots.header(this):[t("div",{staticClass:"q-uploader__header-content column"},[t("div",{staticClass:"flex flex-center no-wrap q-gutter-xs"},[this.__getBtn(t,this.queuedFiles.length>0,"removeQueue",this.removeQueuedFiles),this.__getBtn(t,this.uploadedFiles.length>0,"removeUploaded",this.removeUploadedFiles),!0===this.isUploading?t(QSpinner,{staticClass:"q-uploader__spinner"}):null,t("div",{staticClass:"col column justify-center"},[void 0!==this.label?t("div",{staticClass:"q-uploader__title"},[this.label]):null,t("div",{staticClass:"q-uploader__subtitle"},[this.uploadSizeLabel+" / "+this.uploadProgressLabel])]),this.__getBtn(t,this.canAddFiles,"add",this.pickFiles),this.__getBtn(t,!1===this.hideUploadBtn&&!0===this.canUpload,"upload",this.upload),this.__getBtn(t,this.isUploading,"clear",this.abort)])])]},__getList(t){return void 0!==this.$scopedSlots.list?this.$scopedSlots.list(this):this.files.map(e=>t("div",{key:e.__key,staticClass:"q-uploader__file relative-position",class:{"q-uploader__file--img":!0!==this.noThumbnails&&void 0!==e.__img,"q-uploader__file--failed":"failed"===e.__status,"q-uploader__file--uploaded":"uploaded"===e.__status},style:!0!==this.noThumbnails&&void 0!==e.__img?{backgroundImage:'url("'+e.__img.src+'")'}:null},[t("div",{staticClass:"q-uploader__file-header row flex-center no-wrap"},["failed"===e.__status?t(QIcon,{staticClass:"q-uploader__file-status",props:{name:this.$q.iconSet.type.negative,color:"negative"}}):null,t("div",{staticClass:"q-uploader__file-header-content col"},[t("div",{staticClass:"q-uploader__title"},[e.name]),t("div",{staticClass:"q-uploader__subtitle row items-center no-wrap"},[e.__sizeLabel+" / "+e.__progressLabel])]),"uploading"===e.__status?t(QCircularProgress,{props:{value:e.__progress,min:0,max:1,indeterminate:0===e.__progress}}):t(QBtn,{props:{round:!0,dense:!0,flat:!0,icon:this.$q.iconSet.uploader["uploaded"===e.__status?"done":"clear"]},on:{click:()=>{this.removeFile(e)}}})])]))}},beforeDestroy(){!0===this.isUploading&&this.abort(),this.files.length>0&&this.__revokeImgURLs()},render(t){const e=[t("div",{staticClass:"q-uploader__header",class:this.colorClass},this.__getHeader(t)),t("div",{staticClass:"q-uploader__list scroll"},this.__getList(t)),this.__getDnd(t,"uploader")];return!0===this.isBusy&&e.push(t("div",{staticClass:"q-uploader__overlay absolute-full flex flex-center"},[t(QSpinner)])),t("div",{key:"drag",staticClass:"q-uploader column no-wrap",class:{[`q-uploader--${this.darkSuffix} q-${this.darkSuffix}`]:!0,"q-uploader--bordered":this.bordered,"q-uploader--square no-border-radius":this.square,"q-uploader--flat no-shadow":this.flat,"disabled q-uploader--disabled":this.disable,"q-uploader--dnd":this.dnd},on:!0===this.canAddFiles?cache(this,"drag",{dragover:this.__onDragOver,dragleave:this.__onDragLeave}):null},e)}});function getFn(t){return"function"==typeof t?t:()=>t}var UploaderXHRMixin={props:{url:[Function,String],method:{type:[Function,String],default:"POST"},fieldName:{type:[Function,String],default:t=>t.name},headers:[Function,Array],formFields:[Function,Array],withCredentials:[Function,Boolean],sendRaw:[Function,Boolean],batch:[Function,Boolean],factory:Function},data:()=>({xhrs:[],promises:[],workingThreads:0}),computed:{xhrProps(){return{url:getFn(this.url),method:getFn(this.method),headers:getFn(this.headers),formFields:getFn(this.formFields),fieldName:getFn(this.fieldName),withCredentials:getFn(this.withCredentials),sendRaw:getFn(this.sendRaw),batch:getFn(this.batch)}},isUploading(){return this.workingThreads>0},isBusy(){return this.promises.length>0}},methods:{abort(){this.xhrs.forEach(t=>{t.abort()}),this.promises.length>0&&(this.abortPromises=!0)},upload(){if(!1===this.canUpload)return;const t=this.queuedFiles.slice(0);this.queuedFiles=[],this.xhrProps.batch(t)?this.__runFactory(t):t.forEach(t=>{this.__runFactory([t])})},__runFactory(t){if(this.workingThreads++,"function"!=typeof this.factory)return void this.__uploadFiles(t,{});const e=this.factory(t);if(e)if("function"==typeof e.catch&&"function"==typeof e.then){this.promises.push(e);const i=i=>{!0!==this._isBeingDestroyed&&!0!==this._isDestroyed&&(this.promises=this.promises.filter(t=>t!==e),0===this.promises.length&&(this.abortPromises=!1),this.queuedFiles=this.queuedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"failed")}),this.$emit("factory-failed",i,t),this.workingThreads--)};e.then(s=>{!0===this.abortPromises?i(new Error("Aborted")):!0!==this._isBeingDestroyed&&!0!==this._isDestroyed&&(this.promises=this.promises.filter(t=>t!==e),this.__uploadFiles(t,s))}).catch(i)}else this.__uploadFiles(t,e||{});else this.$emit("factory-failed",new Error("QUploader: factory() does not return properly"),t),this.workingThreads--},__uploadFiles(t,e){const i=new FormData,s=new XMLHttpRequest,o=(t,i)=>void 0!==e[t]?getFn(e[t])(i):this.xhrProps[t](i),n=o("url",t);if(!n)return console.error("q-uploader: invalid or no URL specified"),void this.workingThreads--;const r=o("formFields",t);void 0!==r&&r.forEach(t=>{i.append(t.name,t.value)});let a,l=0,h=0,d=0,c=0;s.upload.addEventListener("progress",e=>{if(!0===a)return;const i=Math.min(c,e.loaded);this.uploadedSize+=i-d;let s=(d=i)-h;for(let e=l;s>0&&ei.size))return void this.__updateFile(i,"uploading",s);s-=i.size,l++,h+=i.size,this.__updateFile(i,"uploading",i.size)}},!1),s.onreadystatechange=(()=>{s.readyState<4||(s.status&&s.status<400?(this.uploadedFiles=this.uploadedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"uploaded")}),this.$emit("uploaded",{files:t,xhr:s})):(a=!0,this.uploadedSize-=d,this.queuedFiles=this.queuedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"failed")}),this.$emit("failed",{files:t,xhr:s})),this.workingThreads--,this.xhrs=this.xhrs.filter(t=>t!==s))}),s.open(o("method",t),n),!0===o("withCredentials",t)&&(s.withCredentials=!0);const u=o("headers",t);void 0!==u&&u.forEach(t=>{s.setRequestHeader(t.name,t.value)});const p=o("sendRaw",t);t.forEach(t=>{this.__updateFile(t,"uploading",0),!0!==p&&i.append(o("fieldName",t),t,t.name),t.xhr=s,t.__abort=(()=>{s.abort()}),c+=t.size}),this.$emit("uploading",{files:t,xhr:s}),this.xhrs.push(s),!0===p?s.send(new Blob(t)):s.send(i)}}},QUploader=Vue__default.default.extend({name:"QUploader",mixins:[QUploaderBase,UploaderXHRMixin]}),QUploaderAddTrigger=Vue__default.default.extend({name:"QUploaderAddTrigger",inject:{__qUploaderGetInput:{default(){console.error("QUploaderAddTrigger needs to be child of QUploader")}}},render(t){return this.__qUploaderGetInput(t)}}),QVideo=Vue__default.default.extend({name:"QVideo",mixins:[RatioMixin,ListenersMixin],props:{src:{type:String,required:!0},title:String,fetchpriority:{type:String,default:"auto"},loading:{type:String,default:"eager"},referrerpolicy:{type:String,default:"strict-origin-when-cross-origin"}},computed:{iframeData(){return{attrs:{src:this.src,frameborder:"0",title:this.title,allowfullscreen:!0,fetchpriority:this.fetchpriority,loading:this.loading,referrerpolicy:this.referrerpolicy}}},classes(){return"q-video"+(void 0!==this.ratio?" q-video--responsive":"")}},render(t){return t("div",{class:this.classes,style:this.ratioStyle,on:{...this.qListeners}},[t("iframe",this.iframeData)])}}),components=Object.freeze({__proto__:null,QAjaxBar:QAjaxBar,QAvatar:QAvatar,QBadge:QBadge,QBanner:QBanner,QBar:QBar,QBreadcrumbs:QBreadcrumbs,QBreadcrumbsEl:QBreadcrumbsEl,QBtn:QBtn,QBtnDropdown:QBtnDropdown,QBtnGroup:QBtnGroup,QBtnToggle:QBtnToggle,QCard:QCard,QCardSection:QCardSection,QCardActions:QCardActions,QCarousel:QCarousel,QCarouselSlide:QCarouselSlide,QCarouselControl:QCarouselControl,QChatMessage:QChatMessage,QCheckbox:QCheckbox,QChip:QChip,QCircularProgress:QCircularProgress,QColor:QColor,QDate:QDate,QDialog:QDialog,QDrawer:QDrawer,QEditor:QEditor,QExpansionItem:QExpansionItem,QFab:QFab,QFabAction:QFabAction,QField:QField,QFile:QFile,QFooter:QFooter,QForm:QForm,QHeader:QHeader,QIcon:QIcon,QImg:QImg,QInfiniteScroll:QInfiniteScroll,QInnerLoading:QInnerLoading,QInput:QInput,QIntersection:QIntersection,QList:QList,QItem:QItem,QItemSection:QItemSection,QItemLabel:QItemLabel,QKnob:QKnob,QLayout:QLayout,QMarkupTable:QMarkupTable,QMenu:QMenu,QNoSsr:QNoSsr,QOptionGroup:QOptionGroup,QPage:QPage,QPageContainer:QPageContainer,QPageScroller:QPageScroller,QPageSticky:QPageSticky,QPagination:QPagination,QParallax:QParallax,QPopupEdit:QPopupEdit,QPopupProxy:QPopupProxy,QLinearProgress:QLinearProgress,QPullToRefresh:QPullToRefresh,QRadio:QRadio,QRange:QRange,QRating:QRating,QResizeObserver:QResizeObserver,QResponsive:QResponsive,QScrollArea:QScrollArea,QScrollObserver:QScrollObserver,QSelect:QSelect,QSeparator:QSeparator,QSkeleton:QSkeleton,QSlideItem:QSlideItem,QSlideTransition:QSlideTransition,QSlider:QSlider,QSpace:QSpace,QSpinner:QSpinner,QSpinnerAudio:QSpinnerAudio,QSpinnerBall:QSpinnerBall,QSpinnerBars:QSpinnerBars,QSpinnerBox:QSpinnerBox,QSpinnerClock:QSpinnerClock,QSpinnerComment:QSpinnerComment,QSpinnerCube:QSpinnerCube,QSpinnerDots:QSpinnerDots,QSpinnerFacebook:QSpinnerFacebook,QSpinnerGears:QSpinnerGears,QSpinnerGrid:QSpinnerGrid,QSpinnerHearts:QSpinnerHearts,QSpinnerHourglass:QSpinnerHourglass,QSpinnerInfinity:QSpinnerInfinity,QSpinnerIos:QSpinnerIos,QSpinnerOrbit:QSpinnerOrbit,QSpinnerOval:QSpinnerOval,QSpinnerPie:QSpinnerPie,QSpinnerPuff:QSpinnerPuff,QSpinnerRadio:QSpinnerRadio,QSpinnerRings:QSpinnerRings,QSpinnerTail:QSpinnerTail,QSplitter:QSplitter,QStep:QStep,QStepper:QStepper,QStepperNavigation:QStepperNavigation,QTabPanels:QTabPanels,QTabPanel:QTabPanel,QTable:QTable,QTh:QTh,QTr:QTr,QTd:QTd,QTabs:QTabs,QTab:QTab,QRouteTab:QRouteTab,QTime:QTime,QTimeline:QTimeline,QTimelineEntry:QTimelineEntry,QToggle:QToggle,QToolbar:QToolbar,QToolbarTitle:QToolbarTitle,QTooltip:QTooltip,QTree:QTree,QUploader:QUploader,QUploaderBase:QUploaderBase,QUploaderAddTrigger:QUploaderAddTrigger,QVideo:QVideo,QVirtualScroll:QVirtualScroll});function getDepth(t){if(!1===t)return 0;if(!0===t||void 0===t)return 1;const e=parseInt(t,10);return isNaN(e)?0:e}function destroy$7(t){const e=t.__qclosepopup;void 0!==e&&(t.removeEventListener("click",e.handler),t.removeEventListener("keyup",e.handlerKey),delete t.__qclosepopup)}var ClosePopup={name:"close-popup",bind(t,{value:e},i){void 0!==t.__qclosepopup&&(destroy$7(t),t.__qclosepopup_destroyed=!0);const s={depth:getDepth(e),handler(t){0!==s.depth&&setTimeout(()=>{closePortals(i.componentInstance||i.context,t,s.depth)})},handlerKey(t){!0===isKeyCode(t,13)&&s.handler(t)}};t.__qclosepopup=s,t.addEventListener("click",s.handler),t.addEventListener("keyup",s.handlerKey)},update(t,{value:e,oldValue:i}){void 0!==t.__qclosepopup&&i!==e&&(t.__qclosepopup.depth=getDepth(e))},unbind(t){void 0===t.__qclosepopup_destroyed?destroy$7(t):delete t.__qclosepopup_destroyed}};function destroy$6(t){const e=t.__qgoback;void 0!==e&&(t.removeEventListener("click",e.goBack),t.removeEventListener("keyup",e.goBackKey),delete t.__qgoback)}var GoBack={name:"go-back",bind(t,{modifiers:e,value:i},s){void 0!==t.__qgoback&&(destroy$6(t),t.__qgoback_destroyed=!0);const o={value:i,position:window.history.length-1,single:e.single,goBack(){const t=s.context.$router;!0===o.single?t.go(-1):!0===client.is.nativeMobile?t.go(o.position-window.history.length):t.replace(o.value)},goBackKey(t){!0===isKeyCode(t,13)&&o.goBack()}};t.__qgoback=o,t.addEventListener("click",o.goBack),t.addEventListener("keyup",o.goBackKey)},update(t,{modifiers:e,value:i,oldValue:s}){const o=t.__qgoback;void 0!==o&&(o.single!==e.single&&(o.single=e.single),s!==i&&(o.value=i))},unbind(t){void 0===t.__qgoback_destroyed?destroy$6(t):delete t.__qgoback_destroyed}};let id=0,offsetBase=void 0;function getAbsolutePosition(t,e){void 0===offsetBase&&((offsetBase=document.createElement("div")).style.cssText="position: absolute; left: 0; top: 0",document.body.appendChild(offsetBase));const i=t.getBoundingClientRect(),s=offsetBase.getBoundingClientRect(),{marginLeft:o,marginRight:n,marginTop:r,marginBottom:a}=window.getComputedStyle(t),l=parseInt(o,10)+parseInt(n,10),h=parseInt(r,10)+parseInt(a,10);return{left:i.left-s.left,top:i.top-s.top,width:i.right-i.left,height:i.bottom-i.top,widthM:i.right-i.left+(!0===e?0:l),heightM:i.bottom-i.top+(!0===e?0:h),marginH:!0===e?l:0,marginV:!0===e?h:0}}function getAbsoluteSize(t){return{width:t.scrollWidth,height:t.scrollHeight}}const styleEdges=["Top","Right","Bottom","Left"],styleBorderRadiuses=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],reStyleSkipKey=/-block|-inline|block-|inline-/,reStyleSkipRule=/(-block|-inline|block-|inline-).*:/;function getComputedStyle$1(t,e){const i=window.getComputedStyle(t),s={};for(let t=0;t-1){const t=o.replace("border","");let e="";for(let s=0;s!0!==reStyleSkipRule.test(t)).join(";"):i[o]}return s}const zIndexPositions=["absolute","fixed","relative","sticky"];function getMaxZIndex(t){let e=t,i=0;for(;null!==e&&e!==document;){const{position:s,zIndex:o}=window.getComputedStyle(e),n=Number(o);n>i&&(e===t||!0===zIndexPositions.includes(s))&&(i=n),e=e.parentNode}return i}function normalizeElements(t){return{from:t.from,to:void 0!==t.to?t.to:t.from}}function normalizeOptions(t){return"number"==typeof t?t={duration:t}:"function"==typeof t&&(t={onEnd:t}),{...t,waitFor:void 0===t.waitFor?0:t.waitFor,duration:!0===isNaN(t.duration)?300:parseInt(t.duration,10),easing:"string"==typeof t.easing&&t.easing.length>0?t.easing:"ease-in-out",delay:!0===isNaN(t.delay)?0:parseInt(t.delay,10),fill:"string"==typeof t.fill&&t.fill.length>0?t.fill:"none",resize:!0===t.resize,useCSS:!0===t.useCSS||!0===t.usecss,hideFromClone:!0===t.hideFromClone||!0===t.hidefromclone,keepToClone:!0===t.keepToClone||!0===t.keeptoclone,tween:!0===t.tween,tweenFromOpacity:!0===isNaN(t.tweenFromOpacity)?.6:parseFloat(t.tweenFromOpacity),tweenToOpacity:!0===isNaN(t.tweenToOpacity)?.5:parseFloat(t.tweenToOpacity)}}function isValidElement(t){return t&&t.ownerDocument===document&&null!==t.parentNode}function morph(t){let e=()=>!1,i=!1,s=!0;const o=normalizeElements(t),n=normalizeOptions(t),r=getElement(o.from);if(!0!==isValidElement(r))return e;"function"==typeof r.qMorphCancel&&r.qMorphCancel();let a=void 0,l=void 0,h=void 0,d=void 0;const c=r.parentNode,u=r.nextElementSibling,p=getAbsolutePosition(r,n.resize),{width:m,height:g}=getAbsoluteSize(c),{borderWidth:f,borderStyle:_,borderColor:v,borderRadius:b,backgroundColor:y,transform:S,position:x,cssText:C}=getComputedStyle$1(r,["borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","transform","position","cssText"]),k=r.classList.toString(),w=r.style.cssText,$=r.cloneNode(!0),q=!0===n.tween?r.cloneNode(!0):void 0;void 0!==q&&(q.className=q.classList.toString().split(" ").filter(t=>!1===/^bg-/.test(t)).join(" ")),!0===n.hideFromClone&&$.classList.add("q-morph--internal"),$.setAttribute("aria-hidden","true"),$.style.transition="none",$.style.animation="none",$.style.pointerEvents="none",c.insertBefore($,u),r.qMorphCancel=(()=>{i=!0,$.remove(),void 0!==q&&q.remove(),!0===n.hideFromClone&&$.classList.remove("q-morph--internal"),r.qMorphCancel=void 0});return"function"==typeof t.onToggle&&t.onToggle(),requestAnimationFrame(()=>{const t=getElement(o.to);if(!0===i||!0!==isValidElement(t))return void("function"==typeof r.qMorphCancel&&r.qMorphCancel());r!==t&&"function"==typeof t.qMorphCancel&&t.qMorphCancel(),!0!==n.keepToClone&&t.classList.add("q-morph--internal"),$.classList.add("q-morph--internal");const{width:u,height:M}=getAbsoluteSize(c),{width:T,height:E}=getAbsoluteSize(t.parentNode);!0!==n.hideFromClone&&$.classList.remove("q-morph--internal"),t.qMorphCancel=(()=>{i=!0,$.remove(),void 0!==q&&q.remove(),!0===n.hideFromClone&&$.classList.remove("q-morph--internal"),!0!==n.keepToClone&&t.classList.remove("q-morph--internal"),r.qMorphCancel=void 0,t.qMorphCancel=void 0});const L=()=>{if(!0===i)return void("function"==typeof t.qMorphCancel&&t.qMorphCancel());!0!==n.hideFromClone&&($.classList.add("q-morph--internal"),$.innerHTML="",$.style.left=0,$.style.right="unset",$.style.top=0,$.style.bottom="unset",$.style.transform="none"),!0!==n.keepToClone&&t.classList.remove("q-morph--internal");const o=t.parentNode,{width:L,height:P}=getAbsoluteSize(o),A=t.cloneNode(n.keepToClone);A.setAttribute("aria-hidden","true"),!0!==n.keepToClone&&(A.style.left=0,A.style.right="unset",A.style.top=0,A.style.bottom="unset",A.style.transform="none",A.style.pointerEvents="none"),A.classList.add("q-morph--internal");const B=t===r&&c===o?$:t.nextElementSibling;o.insertBefore(A,B);const{borderWidth:I,borderStyle:R,borderColor:z,borderRadius:D,backgroundColor:O,transform:V,position:F,cssText:Q}=getComputedStyle$1(t,["borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","transform","position","cssText"]),N=t.classList.toString(),H=t.style.cssText;t.style.cssText=Q,t.style.transform="none",t.style.animation="none",t.style.transition="none",t.className=N.split(" ").filter(t=>!1===/^bg-/.test(t)).join(" ");const j=getAbsolutePosition(t,n.resize),W=p.left-j.left,K=p.top-j.top,U=p.width/(j.width>0?j.width:10),Y=p.height/(j.height>0?j.height:100),G=m-u,X=g-M,Z=L-T,J=P-E,tt=Math.max(p.widthM,G),et=Math.max(p.heightM,X),it=Math.max(j.widthM,Z),st=Math.max(j.heightM,J),ot=r===t&&!1===["absolute","fixed"].includes(F)&&!1===["absolute","fixed"].includes(x);let nt="fixed"===F,rt=o;for(;!0!==nt&&rt!==document;)nt="fixed"===window.getComputedStyle(rt).position,rt=rt.parentNode;if(!0!==n.hideFromClone&&($.style.display="block",$.style.flex="0 0 auto",$.style.opacity=0,$.style.minWidth="unset",$.style.maxWidth="unset",$.style.minHeight="unset",$.style.maxHeight="unset",$.classList.remove("q-morph--internal")),!0!==n.keepToClone&&(A.style.display="block",A.style.flex="0 0 auto",A.style.opacity=0,A.style.minWidth="unset",A.style.maxWidth="unset",A.style.minHeight="unset",A.style.maxHeight="unset"),A.classList.remove("q-morph--internal"),"string"==typeof n.classes&&(t.className+=" "+n.classes),"string"==typeof n.style)t.style.cssText+=" "+n.style;else if(!0===isObject(n.style))for(const e in n.style)t.style[e]=n.style[e];const at=getMaxZIndex($),lt=getMaxZIndex(t),ht=!0===nt?document.documentElement:{scrollLeft:0,scrollTop:0};t.style.position=!0===nt?"fixed":"absolute",t.style.left=`${j.left-ht.scrollLeft}px`,t.style.right="unset",t.style.top=`${j.top-ht.scrollTop}px`,t.style.margin=0,!0===n.resize&&(t.style.minWidth="unset",t.style.maxWidth="unset",t.style.minHeight="unset",t.style.maxHeight="unset",t.style.overflow="hidden",t.style.overflowX="hidden",t.style.overflowY="hidden"),document.body.appendChild(t),void 0!==q&&(q.style.cssText=C,q.style.transform="none",q.style.animation="none",q.style.transition="none",q.style.position=t.style.position,q.style.left=`${p.left-ht.scrollLeft}px`,q.style.right="unset",q.style.top=`${p.top-ht.scrollTop}px`,q.style.margin=0,q.style.pointerEvents="none",!0===n.resize&&(q.style.minWidth="unset",q.style.maxWidth="unset",q.style.minHeight="unset",q.style.maxHeight="unset",q.style.overflow="hidden",q.style.overflowX="hidden",q.style.overflowY="hidden"),document.body.appendChild(q));const dt=i=>{r===t&&!0!==s?(t.style.cssText=w,t.className=k):(t.style.cssText=H,t.className=N),A.parentNode===o&&o.insertBefore(t,A),$.remove(),A.remove(),void 0!==q&&q.remove(),e=(()=>!1),r.qMorphCancel=void 0,t.qMorphCancel=void 0,"function"==typeof n.onEnd&&n.onEnd(!0===s?"to":"from",!0===i)};if(!0!==n.useCSS&&"function"==typeof t.animate){const o=!0===n.resize?{transform:`translate(${W}px, ${K}px)`,width:`${tt}px`,height:`${et}px`}:{transform:`translate(${W}px, ${K}px) scale(${U}, ${Y})`},c=!0===n.resize?{width:`${it}px`,height:`${st}px`}:{},u=!0===n.resize?{width:`${tt}px`,height:`${et}px`}:{},m=!0===n.resize?{transform:`translate(${-1*W}px, ${-1*K}px)`,width:`${it}px`,height:`${st}px`}:{transform:`translate(${-1*W}px, ${-1*K}px) scale(${1/U}, ${1/Y})`},g=void 0!==q?{opacity:n.tweenToOpacity}:{backgroundColor:y},x=void 0!==q?{opacity:1}:{backgroundColor:O};d=t.animate([{margin:0,borderWidth:f,borderStyle:_,borderColor:v,borderRadius:b,zIndex:at,transformOrigin:"0 0",...o,...g},{margin:0,borderWidth:I,borderStyle:R,borderColor:z,borderRadius:D,zIndex:lt,transformOrigin:"0 0",transform:V,...c,...x}],{duration:n.duration,easing:n.easing,fill:n.fill,delay:n.delay}),l=void 0===q?void 0:q.animate([{opacity:n.tweenFromOpacity,margin:0,borderWidth:f,borderStyle:_,borderColor:v,borderRadius:b,zIndex:at,transformOrigin:"0 0",transform:S,...u},{opacity:0,margin:0,borderWidth:I,borderStyle:R,borderColor:z,borderRadius:D,zIndex:lt,transformOrigin:"0 0",...m}],{duration:n.duration,easing:n.easing,fill:n.fill,delay:n.delay}),a=!0===n.hideFromClone||!0===ot?void 0:$.animate([{margin:`${X<0?X/2:0}px ${G<0?G/2:0}px`,width:`${tt+p.marginH}px`,height:`${et+p.marginV}px`},{margin:0,width:0,height:0}],{duration:n.duration,easing:n.easing,fill:n.fill,delay:n.delay}),h=!0===n.keepToClone?void 0:A.animate([!0===ot?{margin:`${X<0?X/2:0}px ${G<0?G/2:0}px`,width:`${tt+p.marginH}px`,height:`${et+p.marginV}px`}:{margin:0,width:0,height:0},{margin:`${J<0?J/2:0}px ${Z<0?Z/2:0}px`,width:`${it+j.marginH}px`,height:`${st+j.marginV}px`}],{duration:n.duration,easing:n.easing,fill:n.fill,delay:n.delay});const C=t=>{void 0!==a&&a.cancel(),void 0!==l&&l.cancel(),void 0!==h&&h.cancel(),d.cancel(),d.removeEventListener("finish",C),d.removeEventListener("cancel",C),dt(t),a=void 0,l=void 0,h=void 0,d=void 0};r.qMorphCancel=(()=>{r.qMorphCancel=void 0,i=!0,C()}),t.qMorphCancel=(()=>{t.qMorphCancel=void 0,i=!0,C()}),d.addEventListener("finish",C),d.addEventListener("cancel",C),e=(t=>!0!==i&&void 0!==d&&(!0===t?(C(!0),!0):(s=!0!==s,void 0!==a&&a.reverse(),void 0!==l&&l.reverse(),void 0!==h&&h.reverse(),d.reverse(),!0)))}else{const o=`q-morph-anim-${++id}`,a=document.createElement("style"),l=!0===n.resize?`\n transform: translate(${W}px, ${K}px);\n width: ${tt}px;\n height: ${et}px;\n `:`transform: translate(${W}px, ${K}px) scale(${U}, ${Y});`,h=!0===n.resize?`\n width: ${it}px;\n height: ${st}px;\n `:"",d=!0===n.resize?`\n width: ${tt}px;\n height: ${et}px;\n `:"",c=!0===n.resize?`\n transform: translate(${-1*W}px, ${-1*K}px);\n width: ${it}px;\n height: ${st}px;\n `:`transform: translate(${-1*W}px, ${-1*K}px) scale(${1/U}, ${1/Y});`,u=void 0!==q?`opacity: ${n.tweenToOpacity};`:`background-color: ${y};`,m=void 0!==q?"opacity: 1;":`background-color: ${O};`,g=void 0===q?"":`\n @keyframes ${o}-from-tween {\n 0% {\n opacity: ${n.tweenFromOpacity};\n margin: 0;\n border-width: ${f};\n border-style: ${_};\n border-color: ${v};\n border-radius: ${b};\n z-index: ${at};\n transform-origin: 0 0;\n transform: ${S};\n ${d}\n }\n\n 100% {\n opacity: 0;\n margin: 0;\n border-width: ${I};\n border-style: ${R};\n border-color: ${z};\n border-radius: ${D};\n z-index: ${lt};\n transform-origin: 0 0;\n ${c}\n }\n }\n `,x=!0===n.hideFromClone||!0===ot?"":`\n @keyframes ${o}-from {\n 0% {\n margin: ${X<0?X/2:0}px ${G<0?G/2:0}px;\n width: ${tt+p.marginH}px;\n height: ${et+p.marginV}px;\n }\n\n 100% {\n margin: 0;\n width: 0;\n height: 0;\n }\n }\n `,C=!0===ot?`\n margin: ${X<0?X/2:0}px ${G<0?G/2:0}px;\n width: ${tt+p.marginH}px;\n height: ${et+p.marginV}px;\n `:"\n margin: 0;\n width: 0;\n height: 0;\n ",k=!0===n.keepToClone?"":`\n @keyframes ${o}-to {\n 0% {\n ${C}\n }\n\n 100% {\n margin: ${J<0?J/2:0}px ${Z<0?Z/2:0}px;\n width: ${it+j.marginH}px;\n height: ${st+j.marginV}px;\n }\n }\n `;a.innerHTML=`\n @keyframes ${o} {\n 0% {\n margin: 0;\n border-width: ${f};\n border-style: ${_};\n border-color: ${v};\n border-radius: ${b};\n background-color: ${y};\n z-index: ${at};\n transform-origin: 0 0;\n ${l}\n ${u}\n }\n\n 100% {\n margin: 0;\n border-width: ${I};\n border-style: ${R};\n border-color: ${z};\n border-radius: ${D};\n background-color: ${O};\n z-index: ${lt};\n transform-origin: 0 0;\n transform: ${V};\n ${h}\n ${m}\n }\n }\n\n ${x}\n\n ${g}\n\n ${k}\n `,document.head.appendChild(a);let w="normal";$.style.animation=`${n.duration}ms ${n.easing} ${n.delay}ms ${w} ${n.fill} ${o}-from`,void 0!==q&&(q.style.animation=`${n.duration}ms ${n.easing} ${n.delay}ms ${w} ${n.fill} ${o}-from-tween`),A.style.animation=`${n.duration}ms ${n.easing} ${n.delay}ms ${w} ${n.fill} ${o}-to`,t.style.animation=`${n.duration}ms ${n.easing} ${n.delay}ms ${w} ${n.fill} ${o}`;const M=e=>{e===Object(e)&&e.animationName!==o||(t.removeEventListener("animationend",M),t.removeEventListener("animationcancel",M),dt(),a.remove())};r.qMorphCancel=(()=>{r.qMorphCancel=void 0,i=!0,M()}),t.qMorphCancel=(()=>{t.qMorphCancel=void 0,i=!0,M()}),t.addEventListener("animationend",M),t.addEventListener("animationcancel",M),e=(e=>!!(!0!==i&&t&&$&&A)&&(!0===e?(M(),!0):(s=!0!==s,w="normal"===w?"reverse":"normal",$.style.animationDirection=w,q.style.animationDirection=w,A.style.animationDirection=w,t.style.animationDirection=w,!0)))}};n.waitFor>0||"transitionend"===n.waitFor||n.waitFor===Object(n.waitFor)&&"function"==typeof n.waitFor.then?(n.waitFor>0?new Promise(t=>setTimeout(t,n.waitFor)):"transitionend"===n.waitFor?new Promise(e=>{const i=setTimeout(()=>{s()},400),s=o=>{clearTimeout(i),t&&(t.removeEventListener("transitionend",s),t.removeEventListener("transitioncancel",s)),e()};t.addEventListener("transitionend",s),t.addEventListener("transitioncancel",s)}):n.waitFor).then(L).catch(()=>{"function"==typeof t.qMorphCancel&&t.qMorphCancel()}):L()}),t=>e(t)}const morphGroups={},mods=["resize","useCSS","hideFromClone","keepToClone","tween"],props$1=["duration","delay","easing","fill","classes","style","duration","tweenFromOpacity","tweenToOpacity","waitFor","onEnd"];function changeClass(t,e){t.clsAction!==e&&(t.clsAction=e,t.el.classList[e]("q-morph--invisible"))}function trigger(t){if(!0===t.animating||t.queue.length<2)return;const[e,i]=t.queue;t.animating=!0,e.animating=!0,i.animating=!0,changeClass(e,"remove"),changeClass(i,"remove");const s=morph({from:e.el,to:i.el,onToggle(){changeClass(e,"add"),changeClass(i,"remove")},...i.opts,onEnd(s,o){void 0!==i.opts.onEnd&&i.opts.onEnd(s,o),!0!==o&&(e.animating=!1,i.animating=!1,t.animating=!1,t.cancel=void 0,t.queue.shift(),trigger(t))}});t.cancel=(()=>{s(!0),t.cancel=void 0})}function changeModel(t,e){if(t.name!==e)!1===t.animating&&changeClass(t,"add");else{const i=morphGroups[t.group];void 0===i?(morphGroups[t.group]={name:t.group,model:e,queue:[t],animating:!1},changeClass(t,"remove")):i.model!==e&&(i.model=e,i.queue.push(t),!1===i.animating&&2===i.queue.length&&trigger(i))}}function setOptsFromValue(t,e){void 0!==e.group&&(t.group=e.group),void 0!==e.name&&(t.name=e.name);const i=t.opts;props$1.forEach(t=>{void 0!==e[t]&&(i[t]=e[t])})}function updateArg(t,e){const i="string"==typeof e&&e.length>0?e.split(":"):[];t.name=i[0],t.group=i[1],Object.assign(t.opts,{duration:!0===isNaN(i[2])?300:parseFloat(i[2]),waitFor:i[3]})}function updateModifiers(t,e){const i=t.opts;mods.forEach(t=>{i[t]=!0===e[t]})}function updateValue(t,e){let i;Object(e)===e?(i=""+e.model,setOptsFromValue(t,e),updateModifiers(t,e)):i=""+e,i!==t.model?(t.model=i,changeModel(t,i)):!1===t.animating&&void 0!==t.clsAction&&t.el.classList[t.clsAction]("q-morph--invisible")}function destroy$5(t){const e=t.__qmorph;if(void 0!==e){const i=morphGroups[e.group];if(void 0!==i){-1!==i.queue.indexOf(e)&&(i.queue=i.queue.filter(t=>t!==e),0===i.queue.length&&(void 0!==i.cancel&&i.cancel(),delete morphGroups[e.group]))}"add"===e.clsAction&&t.classList.remove("q-morph--invisible"),delete t.__qmorph}}var Morph={name:"morph",inserted(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qmorph&&(destroy$5(t),t.__qmorph_destroyed=!0);const o={el:t,arg:i,animating:!1,opts:{}};updateModifiers(o,e),updateArg(o,i),updateValue(o,s),t.__qmorph=o},update(t,{modifiers:e,arg:i,value:s}){const o=t.__qmorph;void 0!==o&&(updateModifiers(o,e),o.arg!==i&&updateArg(o,i),updateValue(o,s))},unbind(t){void 0===t.__qmorph_destroyed?destroy$5(t):delete t.__qmorph_destroyed}};const defaultCfg={childList:!0,subtree:!0,attributes:!0,characterData:!0,attributeOldValue:!0,characterDataOldValue:!0};function update$2(t,e,i){e.handler=i,void 0!==e.observer&&e.observer.disconnect(),e.observer=new MutationObserver(i=>{if("function"==typeof e.handler){!1!==e.handler(i)&&!0!==e.once||destroy$4(t)}}),e.observer.observe(t,e.opts)}function destroy$4(t){const e=t.__qmutation;void 0!==e&&(void 0!==e.observer&&e.observer.disconnect(),delete t.__qmutation)}var Mutation={name:"mutation",inserted(t,{modifiers:{once:e,...i},value:s}){void 0!==t.__qmutation&&(destroy$4(t),t.__qmutation_destroyed=!0);const o={once:e};o.opts=0===Object.keys(i).length?defaultCfg:i,update$2(t,o,s),t.__qmutation=o},update(t,{modifiers:{once:e,...i},value:s,oldValue:o}){const n=t.__qmutation;if(void 0!==n){const e=0===Object.keys(i).length?defaultCfg:i;o===s&&!0===isDeepEqual(n.opts,e)||(n.opts=e,update$2(t,n,s))}},unbind(t){void 0===t.__qmutation_destroyed?destroy$4(t):delete t.__qmutation_destroyed}};function update$1(t,{value:e,oldValue:i}){"function"==typeof e?(t.handler=e,"function"!=typeof i&&(t.scrollTarget.addEventListener("scroll",t.scroll,listenOpts.passive),t.scroll())):t.scrollTarget.removeEventListener("scroll",t.scroll,listenOpts.passive)}function destroy$3(t){const e=t.__qscrollfire;void 0!==e&&(e.scrollTarget.removeEventListener("scroll",e.scroll,listenOpts.passive),e.scroll.cancel(),delete t.__qscrollfire)}var ScrollFire={name:"scroll-fire",inserted(t,e){void 0!==t.__qscrollfire&&(destroy$3(t),t.__qscrollfire_destroyed=!0);const i={scrollTarget:getScrollTarget(t),scroll:debounce(()=>{let e,s;i.scrollTarget===window?(s=t.getBoundingClientRect().bottom,e=window.innerHeight):(s=offset(t).top+height(t),e=offset(i.scrollTarget).top+height(i.scrollTarget)),s>0&&s0&&t.split(":").forEach((t,i)=>{const s=parseInt(t,10);s&&(e[i]=s)}),{duration:e[0],touchSensitivity:e[1],mouseSensitivity:e[2]}}function destroy$1(t){const e=t.__qtouchhold;void 0!==e&&(cleanEvt(e,"main"),cleanEvt(e,"temp"),clearTimeout(e.timer),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchhold)}function configureEvents$1(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&cleanEvt(e,"main_mouse"),!0===i.mouse&&addEvt(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===client.has.touch&&e.modifiers.capture!==i.capture&&(cleanEvt(e,"main_touch"),addEvt(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","passiveCapture"]])),e.modifiers=i}var TouchHold={name:"touch-hold",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchhold&&(destroy$1(t),t.__qtouchhold_destroyed=!0);const o={handler:s,arg:i,modifiers:{capture:null},...parseArg$1(i),noop:noop,mouseStart(t){"function"==typeof o.handler&&!0===leftClick(t)&&(addEvt(o,"temp",[[document,"mousemove","move","passiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(t,!0))},touchStart(t){if(void 0!==t.target&&"function"==typeof o.handler){const e=t.target;addEvt(o,"temp",[[e,"touchmove","move","passiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(t,e){o.origin=position(t);const i=Date.now();!0===client.is.mobile&&(document.body.classList.add("non-selectable"),clearSelection(),o.styleCleanup=(t=>{o.styleCleanup=void 0;const e=()=>{document.body.classList.remove("non-selectable")};!0===t?(clearSelection(),setTimeout(e,10)):e()})),o.triggered=!1,o.sensitivity=!0===e?o.mouseSensitivity:o.touchSensitivity,o.timer=setTimeout(()=>{clearSelection(),o.triggered=!0,o.handler({evt:t,touch:!0!==e,mouse:!0===e,position:o.origin,duration:Date.now()-i})},o.duration)},move(t){const{top:e,left:i}=position(t);(Math.abs(i-o.origin.left)>=o.sensitivity||Math.abs(e-o.origin.top)>=o.sensitivity)&&clearTimeout(o.timer)},end(t){cleanEvt(o,"temp"),void 0!==o.styleCleanup&&o.styleCleanup(o.triggered),!0===o.triggered?void 0!==t&&stopAndPrevent(t):clearTimeout(o.timer)}};t.__qtouchhold=o,configureEvents$1(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchhold;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&Object.assign(n,parseArg$1(i)),!0!==isDeepEqual(n.modifiers,e)&&configureEvents$1(t,n,e))},unbind(t){void 0===t.__qtouchhold_destroyed?destroy$1(t):delete t.__qtouchhold_destroyed}};const keyCodes={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},keyRegex=new RegExp(`^([\\d+]+|${Object.keys(keyCodes).join("|")})$`,"i");function shouldEnd(t,e){const{top:i,left:s}=position(t);return Math.abs(s-e.left)>=7||Math.abs(i-e.top)>=7}function parseArg(t){const e="string"==typeof t&&t.length>0?t.split(":").map(t=>parseInt(t,10)):[0,600,300];return{durations:e,durationsLast:e.length-1}}function destroy(t){const e=t.__qtouchrepeat;void 0!==e&&(clearTimeout(e.timer),cleanEvt(e,"main_mouse"),cleanEvt(e,"main_touch"),cleanEvt(e,"main_kbd"),cleanEvt(e,"temp"),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchrepeat)}function configureEvents(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&cleanEvt(e,"main_mouse"),!0===i.mouse&&addEvt(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===client.has.touch&&e.modifiers.capture!==i.capture&&(cleanEvt(e,"main_touch"),addEvt(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","passiveCapture"]]));const s=Object.keys(i).reduce((t,e)=>{if(!0===keyRegex.test(e)){const i=isNaN(parseInt(e,10))?keyCodes[e.toLowerCase()]:parseInt(e,10);i>=0&&t.push(i)}return t},[]);e.keyboard.length>0==s.length>0&&e.modifiers.keyCapture===i.keyCapture&&e.modifiers.keycapture===i.keycapture||(e.keyboard.length>0&&cleanEvt(e,"main_kbd"),s.length>0&&addEvt(e,"main_kbd",[[t,"keydown","keyboardStart",`notPassive${!0===i.keyCapture||!0===i.keycapture?"Capture":""}`]])),e.modifiers=i,e.keyboard=s}var TouchRepeat={name:"touch-repeat",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchrepeat&&(destroy(t),t.__qtouchrepeat_destroyed=!0);const o={keyboard:[],handler:s,arg:i,modifiers:{capture:null},...parseArg(i),noop:noop,mouseStart(t){void 0===o.event&&"function"==typeof o.handler&&!0===leftClick(t)&&(addEvt(o,"temp",[[document,"mousemove","move","passiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(t,!0))},keyboardStart(e){if("function"==typeof o.handler&&!0===isKeyCode(e,o.keyboard)){if((0===o.durations[0]||void 0!==o.event)&&(stopAndPrevent(e),t.focus(),void 0!==o.event))return;addEvt(o,"temp",[[document,"keyup","end","notPassiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(e,!1,!0)}},touchStart(t){if(void 0!==t.target&&"function"==typeof o.handler){const e=t.target;addEvt(o,"temp",[[e,"touchmove","move","passiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(t,e,i){function s(t){o.styleCleanup=void 0,document.documentElement.style.cursor="";const e=()=>{document.body.classList.remove("non-selectable")};!0===t?(clearSelection(),setTimeout(e,10)):e()}!0!==i&&(o.origin=position(t)),!0===client.is.mobile&&(document.body.classList.add("non-selectable"),clearSelection(),o.styleCleanup=s),o.event={touch:!0!==e&&!0!==i,mouse:!0===e,keyboard:!0===i,startTime:Date.now(),repeatCount:0};const n=()=>{if(void 0===o.event)return;0===o.event.repeatCount&&(o.event.evt=t,!0===i?o.event.keyCode=t.keyCode:o.event.position=position(t),!0!==client.is.mobile&&(document.documentElement.style.cursor="pointer",document.body.classList.add("non-selectable"),clearSelection(),o.styleCleanup=s)),o.event.duration=Date.now()-o.event.startTime,o.event.repeatCount+=1,o.handler(o.event);const e=o.durationsLast0&&stopAndPrevent(t),cleanEvt(o,"temp"),clearTimeout(o.timer),o.event=void 0)}};t.__qtouchrepeat=o,configureEvents(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchrepeat;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&Object.assign(n,parseArg(i)),!0!==isDeepEqual(n.modifiers,e)&&configureEvents(t,n,e))},unbind(t){void 0===t.__qtouchrepeat_destroyed?destroy(t):delete t.__qtouchrepeat_destroyed}},directives=Object.freeze({__proto__:null,ClosePopup:ClosePopup,GoBack:GoBack,Intersection:Intersection,KeyGroupNavigation:KeyGroupNavigation,Morph:Morph,Mutation:Mutation,Ripple:Ripple,ScrollFire:ScrollFire,Scroll:Scroll,TouchHold:TouchHold,TouchPan:TouchPan,TouchRepeat:TouchRepeat,TouchSwipe:TouchSwipe});let metaValue;function getProp(){return Platform.is.winphone?"msapplication-navbutton-color":Platform.is.safari?"apple-mobile-web-app-status-bar-style":"theme-color"}function getMetaTag(t){const e=document.getElementsByTagName("META");for(const i in e)if(e[i].name===t)return e[i]}function setColor(t){void 0===metaValue&&(metaValue=getProp());let e=getMetaTag(metaValue);const i=void 0===e;i&&(e=document.createElement("meta")).setAttribute("name",metaValue),e.setAttribute("content",t),i&&document.head.appendChild(e)}var AddressbarColor={install({$q:t,cfg:e}){this.set=!1!==isSSR||!0!==Platform.is.mobile||!0!==Platform.is.nativeMobile&&!0!==Platform.is.winphone&&!0!==Platform.is.safari&&!0!==Platform.is.webkit&&!0!==Platform.is.vivaldi?noop:t=>{const e=t||getBrand("primary");!0===Platform.is.nativeMobile&&window.StatusBar?window.StatusBar.backgroundColorByHexString(e):setColor(e)},t.addressbarColor=this,e.addressbarColor&&this.set(e.addressbarColor)}};const prefixes={};function promisify(t,e){try{const i=t[e]();return void 0===i?Promise.resolve():i}catch(t){return Promise.reject(t)}}function checkActive(t){t.activeEl=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement||null,t.isActive=null!==t.activeEl}var AppFullscreen={isCapable:!1,isActive:!1,activeEl:null,request(t){if(!0===this.isCapable){const e=t||document.documentElement;if(e!==this.activeEl){return(!0===client.is.ie&&null!==this.activeEl&&e.contains(this.activeEl)?this.exit():Promise.resolve()).then(()=>promisify(e,prefixes.request)).catch(t=>null!==this.activeEl?this.exit().then(()=>promisify(e,prefixes.request)):Promise.reject(t)).then(t=>(checkActive(this),t))}}return this.__getErr()},exit(){return!0===this.isCapable&&!0===this.isActive?promisify(document,prefixes.exit).then(t=>(checkActive(this),this.isActive?this.exit():t)):this.__getErr()},toggle(t){const e=t||document.documentElement;return this.activeEl===e?this.exit():this.request(e)},install({$q:t}){t.fullscreen=this,this.__getErr=(()=>Promise.resolve()),!0!==isSSR&&(prefixes.request=["requestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitRequestFullscreen"].find(t=>void 0!==document.documentElement[t]),this.isCapable=void 0!==prefixes.request,!1!==this.isCapable?(prefixes.exit=["exitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen"].find(t=>document[t]),checkActive(this),["onfullscreenchange","onmsfullscreenchange","onwebkitfullscreenchange"].forEach(t=>{document[t]=(()=>{checkActive(this)})}),Vue__default.default.util.defineReactive(this,"isActive",this.isActive),Vue__default.default.util.defineReactive(this,"activeEl",this.activeEl)):this.__getErr=(()=>Promise.reject("Not capable")))}},AppVisibility={appVisible:!1,install({$q:t}){if(!0===isSSR)return void(this.appVisible=t.appVisible=!0);let e,i;void 0!==document.hidden?(e="hidden",i="visibilitychange"):void 0!==document.msHidden?(e="msHidden",i="msvisibilitychange"):void 0!==document.webkitHidden&&(e="webkitHidden",i="webkitvisibilitychange");const s=()=>{this.appVisible=t.appVisible=!document[e]};s(),i&&void 0!==document[e]&&(Vue__default.default.util.defineReactive(t,"appVisible",this.appVisible),document.addEventListener(i,s,!1))}};const optsGrid={staticClass:"row items-stretch justify-start",attrs:{role:"list"}},optsList={attrs:{role:"list"}},attrsGridItem={tabindex:0,role:"listitem"};var BottomSheet$1=Vue__default.default.extend({name:"BottomSheetPlugin",mixins:[DarkMixin,AttrsMixin],inheritAttrs:!1,props:{title:String,message:String,actions:Array,grid:Boolean,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},computed:{dialogProps(){return{...this.qAttrs,position:"bottom"}}},methods:{show(){this.$refs.dialog.show()},hide(){this.$refs.dialog.hide()},onOk(t){this.$emit("ok",t),this.hide()},__getGrid(t){return this.actions.map(e=>{const i=e.avatar||e.img;return void 0===e.label?t(QSeparator,{staticClass:"col-all",props:{dark:this.dark}}):t("div",{staticClass:"q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position",class:e.classes,attrs:attrsGridItem,on:{click:()=>this.onOk(e),keyup:t=>{13===t.keyCode&&this.onOk(e)}}},[t("div",{staticClass:"q-focus-helper"}),e.icon?t(QIcon,{props:{name:e.icon,color:e.color}}):i?t("img",{attrs:{src:i},staticClass:e.avatar?"q-bottom-sheet__avatar":null}):t("div",{staticClass:"q-bottom-sheet__empty-icon"}),t("div",[e.label])])})},__getList(t){return this.actions.map(e=>{const i=e.avatar||e.img;return void 0===e.label?t(QSeparator,{props:{spaced:!0,dark:this.dark}}):t(QItem,{staticClass:"q-bottom-sheet__item",class:e.classes,props:{tabindex:0,clickable:!0,dark:this.dark},on:{click:()=>this.onOk(e),keyup:t=>{13===t.keyCode&&this.onOk(e)}}},[t(QItemSection,{props:{avatar:!0}},[e.icon?t(QIcon,{props:{name:e.icon,color:e.color}}):i?t("img",{attrs:{src:i},staticClass:e.avatar?"q-bottom-sheet__avatar":null}):null]),t(QItemSection,[e.label])])})}},render(t){const e=[];return this.title&&e.push(t(QCardSection,{staticClass:"q-dialog__title"},[this.title])),this.message&&e.push(t(QCardSection,{staticClass:"q-dialog__message"},[this.message])),e.push(!0===this.grid?t("div",optsGrid,this.__getGrid(t)):t("div",optsList,this.__getList(t))),t(QDialog,{key:"dialog",ref:"dialog",props:this.dialogProps,on:cache(this,"hide",{hide:()=>{this.$emit("hide")}})},[t(QCard,{staticClass:`q-bottom-sheet q-bottom-sheet--${!0===this.grid?"grid":"list"}`+` q-bottom-sheet--${this.darkSuffix} q-${this.darkSuffix}`,style:this.cardStyle,class:this.cardClass},e)])}});const ssrAPI={onOk:()=>ssrAPI,okCancel:()=>ssrAPI,hide:()=>ssrAPI,update:()=>ssrAPI};function merge(t,e){for(const i in e)"spinner"!==i&&Object(e[i])===e[i]?(t[i]=Object(t[i])!==t[i]?{}:{...t[i]},merge(t[i],e[i])):t[i]=e[i]}let appRoot;function getDialogParent(t,e){if(void 0!==t)return t;if(void 0!==e)return e;if(void 0===appRoot){const t=document.getElementById("q-app");t&&t.__vue__&&(appRoot=t.__vue__.$root)}return appRoot}function globalDialog(t){return({className:e,class:i,style:s,component:o,root:n,parent:r,...a})=>{if(!0===isSSR)return ssrAPI;void 0!==i&&(a.cardClass=i),void 0!==s&&(a.cardStyle=s);const l=void 0!==o;let h,d;!0===l?h=o:(h=t,d=a);const c=[],u=[],p={onOk:t=>(c.push(t),p),onCancel:t=>(u.push(t),p),onDismiss:t=>(c.push(t),u.push(t),p),hide:()=>(_.$refs.dialog.hide(),p),update:({className:t,class:e,style:i,component:s,root:o,parent:n,...r})=>(null!==_&&(void 0!==e&&(r.cardClass=e),void 0!==i&&(r.cardStyle=i),!0===l?Object.assign(a,r):(merge(a,r),d={...a}),_.$forceUpdate()),p)},m=document.createElement("div");getPortalsContainer(document.body).appendChild(m);let g=!1;const f={ok:t=>{g=!0,c.forEach(e=>{e(t)})},hide:()=>{_.$destroy(),_.$el.remove(),_=null,!0!==g&&u.forEach(t=>{t()})}};let _=new Vue__default.default({name:"QGlobalDialog",el:m,parent:getDialogParent(r,n),render:t=>t(h,{ref:"dialog",props:a,attrs:d,on:f}),mounted(){void 0!==this.$refs.dialog?this.$refs.dialog.show():f["hook:mounted"]=(()=>{void 0!==this.$refs.dialog&&this.$refs.dialog.show()})}});return p}}var BottomSheet={install({$q:t}){this.create=t.bottomSheet=globalDialog(BottomSheet$1)}};function encode$1(t){return encodeURIComponent(t)}function decode$1(t){return decodeURIComponent(t)}function stringifyCookieValue(t){return encode$1("string"==typeof t&&"j:"!==t.slice(0,2)?t:"j:"+JSON.stringify(t))}function read(t,e){if(""===t)return t;if(0===t.indexOf('"')&&(t=t.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")),"j:"===(t=decode$1(t.replace(/\+/g," "))).slice(0,2))try{return JSON.parse(t.slice(2),e)}catch(t){}try{const i=JSON.parse(t,e);return void 0!==e||i===Object(i)||!0===Array.isArray(i)?i:t}catch(e){return t}}function getString(t){const e=new Date;return e.setMilliseconds(e.getMilliseconds()+t),e.toUTCString()}function parseExpireString(t){let e=0;const i=t.match(/(\d+)d/),s=t.match(/(\d+)h/),o=t.match(/(\d+)m/),n=t.match(/(\d+)s/);return i&&(e+=864e5*i[1]),s&&(e+=36e5*s[1]),o&&(e+=6e4*o[1]),n&&(e+=1e3*n[1]),0===e?t:getString(e)}function set(t,e,i={},s){let o,n;void 0!==i.expires&&("[object Date]"===Object.prototype.toString.call(i.expires)?o=i.expires.toUTCString():"string"==typeof i.expires?o=parseExpireString(i.expires):(n=parseFloat(i.expires),o=!1===isNaN(n)?getString(864e5*n):i.expires));const r=`${encode$1(t)}=${stringifyCookieValue(e)}`,a=[r,void 0!==o?"; Expires="+o:"",i.path?"; Path="+i.path:"",i.domain?"; Domain="+i.domain:"",i.sameSite?"; SameSite="+i.sameSite:"",i.httpOnly?"; HttpOnly":"",i.secure?"; Secure":"",i.other?"; "+i.other:""].join("");if(s){s.req.qCookies?s.req.qCookies.push(a):s.req.qCookies=[a],s.res.setHeader("Set-Cookie",s.req.qCookies);let e=s.req.headers.cookie||"";if(void 0!==o&&n<0){const i=get(t,s,void 0,!0);if(void 0!==i){const s=`${encode$1(t)}=${stringifyCookieValue(i)}`;e=e.replace(`${s}; `,"").replace(`; ${s}`,"").replace(`${s}`,"")}}else e=e?`${r}; ${e}`:a;s.req.headers.cookie=e}else document.cookie=a}function get(t,e,i,s){const o=e?e.req.headers:document,n=o.cookie?o.cookie.split("; "):[],r=n.length;let a,l,h,d=t?null:{},c=0;for(;cget(e,t,i),set:(e,i,s)=>set(e,i,s,t),has:(e,i)=>has(e,t,i),remove:(e,i)=>remove(e,i,t),getAll:e=>get(null,t,e)}}var Cookies={parseSSR(t){return void 0!==t?getObject(t):this},install({$q:t,queues:e}){!0===isSSR?e.server.push((t,e)=>{t.cookies=getObject(e.ssr)}):(Object.assign(this,getObject()),t.cookies=this)}},DialogPlugin=Vue__default.default.extend({name:"DialogPlugin",mixins:[DarkMixin,AttrsMixin],inheritAttrs:!1,props:{title:String,message:String,prompt:Object,options:Object,progress:[Boolean,Object],html:Boolean,ok:{type:[String,Object,Boolean],default:!0},cancel:[String,Object,Boolean],focus:{type:String,default:"ok",validator:t=>["ok","cancel","none"].includes(t)},stackButtons:Boolean,color:String,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},computed:{classes(){return"q-dialog-plugin"+` q-dialog-plugin--${this.darkSuffix} q-${this.darkSuffix}`+(!1!==this.progress?" q-dialog-plugin--progress":"")},spinner(){if(!1!==this.progress)return!0===isObject(this.progress)?{component:this.progress.spinner||QSpinner,props:{color:this.progress.color||this.vmColor}}:{component:QSpinner,props:{color:this.vmColor}}},hasForm(){return void 0!==this.prompt||void 0!==this.options},okLabel(){return!0===isObject(this.ok)?this.$q.lang.label.ok:!0===this.ok?this.$q.lang.label.ok:this.ok},cancelLabel(){return!0===isObject(this.cancel)?this.$q.lang.label.cancel:!0===this.cancel?this.$q.lang.label.cancel:this.cancel},vmColor(){return this.color||`dialog-plugin-${this.darkSuffix}`},okDisabled(){return void 0!==this.prompt?void 0!==this.prompt.isValid&&!0!==this.prompt.isValid(this.prompt.model):void 0!==this.options?void 0!==this.options.isValid&&!0!==this.options.isValid(this.options.model):void 0},okProps(){return{color:this.vmColor,label:this.okLabel,ripple:!1,disable:this.okDisabled,...!0===isObject(this.ok)?this.ok:{flat:!0}}},cancelProps(){return{color:this.vmColor,label:this.cancelLabel,ripple:!1,...!0===isObject(this.cancel)?this.cancel:{flat:!0}}}},methods:{show(){this.$refs.dialog.show()},hide(){this.$refs.dialog.hide()},getPrompt(t){return[t(QInput,{key:"prompt",props:{value:this.prompt.model,type:this.prompt.type,label:this.prompt.label,stackLabel:this.prompt.stackLabel,outlined:this.prompt.outlined,filled:this.prompt.filled,standout:this.prompt.standout,rounded:this.prompt.rounded,square:this.prompt.square,counter:this.prompt.counter,maxlength:this.prompt.maxlength,prefix:this.prompt.prefix,suffix:this.prompt.suffix,color:this.vmColor,dense:!0,autofocus:!0,dark:this.dark},attrs:this.prompt.attrs,on:cache(this,"prompt",{input:t=>{this.prompt.model=t},keyup:t=>{!0!==this.okDisabled&&"textarea"!==this.prompt.type&&!0===isKeyCode(t,13)&&this.onOk()}})})]},getOptions(t){return[t(QOptionGroup,{key:"opts",props:{value:this.options.model,type:this.options.type,color:this.vmColor,inline:this.options.inline,options:this.options.items,dark:this.dark},on:cache(this,"opts",{input:t=>{this.options.model=t}})})]},getButtons(t){const e=[];if(this.cancel&&e.push(t(QBtn,{key:"cancel",props:this.cancelProps,attrs:{"data-autofocus":"cancel"===this.focus&&!0!==this.hasForm},on:cache(this,"cancel",{click:this.onCancel})})),this.ok&&e.push(t(QBtn,{key:"ok",props:this.okProps,attrs:{"data-autofocus":"ok"===this.focus&&!0!==this.hasForm},on:cache(this,"ok",{click:this.onOk})})),e.length>0)return t(QCardActions,{staticClass:!0===this.stackButtons?"items-end":null,props:{vertical:this.stackButtons,align:"right"}},e)},onOk(){this.$emit("ok",cloneDeep(this.getData())),this.hide()},onCancel(){this.hide()},getData(){return void 0!==this.prompt?this.prompt.model:void 0!==this.options?this.options.model:void 0},getSection(t,e,i){return!0===this.html?t(QCardSection,{staticClass:e,domProps:{innerHTML:i}}):t(QCardSection,{staticClass:e},[i])}},render(t){const e=[];return this.title&&e.push(this.getSection(t,"q-dialog__title",this.title)),!1!==this.progress&&e.push(t(QCardSection,{staticClass:"q-dialog__progress"},[t(this.spinner.component,{props:this.spinner.props})])),this.message&&e.push(this.getSection(t,"q-dialog__message",this.message)),void 0!==this.prompt?e.push(t(QCardSection,{staticClass:"scroll q-dialog-plugin__form"},this.getPrompt(t))):void 0!==this.options&&e.push(t(QSeparator,{props:{dark:this.dark}}),t(QCardSection,{staticClass:"scroll q-dialog-plugin__form"},this.getOptions(t)),t(QSeparator,{props:{dark:this.dark}})),(this.ok||this.cancel)&&e.push(this.getButtons(t)),t(QDialog,{key:"dialog",ref:"dialog",props:{...this.qAttrs,value:this.value},on:cache(this,"hide",{hide:()=>{this.$emit("hide")}})},[t(QCard,{staticClass:this.classes,style:this.cardStyle,class:this.cardClass,props:{dark:this.dark}},e)])}}),Dialog={install({$q:t}){this.create=t.dialog=globalDialog(DialogPlugin)}},LoadingBar={isActive:!1,start:noop,stop:noop,increment:noop,setDefaults:noop,install({$q:t,cfg:e}){if(t.loadingBar=this,!0===isSSR)return;const i=void 0!==e.loadingBar?{...e.loadingBar}:{},s={start:()=>{this.isActive=!0},stop:()=>{this.isActive=!1}},o=new Vue__default.default({name:"LoadingBar",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},render:t=>t(QAjaxBar,{ref:"bar",props:i,on:s})}).$mount().$refs.bar;Object.assign(this,{start:o.start,stop:o.stop,increment:o.increment,setDefaults:t=>{!0===isObject(t)&&Object.assign(i,t),o.$parent.$forceUpdate()}}),Vue__default.default.util.defineReactive(this,"isActive",this.isActive),Vue__default.default.util.defineReactive(o,"isActive",this.isActive),o.setDefaults=this.setDefaults,document.body.appendChild(o.$parent.$el)}};let vm$1,timeout,uid$1=0,props={},activeGroups={};const originalDefaults={group:"__default_quasar_group__",delay:0,message:!1,spinnerSize:80,spinnerColor:"white",messageColor:"white",backgroundColor:"black",spinner:QSpinner,customClass:""},defaults$1={...originalDefaults};function registerProps(t){if(t&&void 0!==t.group&&void 0!==activeGroups[t.group])return Object.assign(activeGroups[t.group],t);const e=!0===isObject(t)&&!0===t.ignoreDefaults?{...originalDefaults,...t}:{...defaults$1,...t};return activeGroups[e.group]=e,e}const Loading={isActive:!1,show(t){if(!0===isSSR)return;props=registerProps(t);const{group:e}=props;return props.customClass+=` text-${props.backgroundColor}`,this.isActive=!0,void 0!==vm$1?(props.uid=uid$1,vm$1.$forceUpdate()):(props.uid=++uid$1,clearTimeout(timeout),timeout=setTimeout(()=>{timeout=void 0;const t=document.createElement("div");document.body.appendChild(t),vm$1=new Vue__default.default({name:"QLoading",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},el:t,mounted(){preventScroll(!0)},render:t=>t("transition",{key:"tr",props:{name:"q-transition--fade",appear:!0},on:cache(this,"tr",{"after-leave":()=>{!0!==this.isActive&&void 0!==vm$1&&(preventScroll(!1),vm$1.$destroy(),vm$1.$el.remove(),vm$1=void 0)}})},[!0===this.isActive?t("div",{staticClass:"q-loading fullscreen column flex-center z-max",key:props.uid,class:props.customClass.trim()},[t(props.spinner,{props:{color:props.spinnerColor,size:props.spinnerSize}}),props.message&&t("div",{class:`text-${props.messageColor}`,domProps:{[!0===props.sanitize?"textContent":"innerHTML"]:props.message}})||void 0]):null])})},props.delay)),t=>{void 0!==t&&Object(t)===t?this.show({...t,group:e}):this.hide(e)}},hide(t){if(!0===this.isActive){if(void 0===t)activeGroups={};else{if(void 0===activeGroups[t])return;{delete activeGroups[t];const e=Object.keys(activeGroups);if(0!==e.length){const t=e[e.length-1];return void this.show({group:t})}}}void 0!==timeout&&(clearTimeout(timeout),timeout=void 0),this.isActive=!1}},setDefaults(t){!0===isObject(t)&&Object.assign(defaults$1,t)},install({$q:t,cfg:{loading:e}}){this.setDefaults(e),t.loading=this}};let updateId,ssrTakeover;function normalize(t){t.title&&(t.title=t.titleTemplate?t.titleTemplate(t.title):t.title,delete t.titleTemplate),[["meta","content"],["link","href"]].forEach(e=>{const i=t[e[0]],s=e[1];for(const t in i){const e=i[t];e.template&&(1===Object.keys(e).length?delete i[t]:(e[s]=e.template(e[s]||""),delete e.template))}})}function changed(t,e){if(Object.keys(t).length!==Object.keys(e).length)return!0;for(const i in t)if(t[i]!==e[i])return!0}function bodyFilter(t){return!1===["class","style"].includes(t)}function htmlFilter(t){return!1===["lang","dir"].includes(t)}function diff(t,e){const i={},s={};return void 0===t?{add:e,remove:s}:(t.title!==e.title&&(i.title=e.title),["meta","link","script","htmlAttr","bodyAttr"].forEach(o=>{const n=t[o],r=e[o];if(s[o]=[],void 0!==n&&null!==n){i[o]={};for(const t in n)!1===r.hasOwnProperty(t)&&s[o].push(t);for(const t in r)!1===n.hasOwnProperty(t)?i[o][t]=r[t]:!0===changed(n[t],r[t])&&(s[o].push(t),i[o][t]=r[t])}else i[o]=r}),{add:i,remove:s})}function apply({add:t,remove:e}){t.title&&(document.title=t.title),Object.keys(e).length>0&&(["meta","link","script"].forEach(t=>{e[t].forEach(e=>{document.head.querySelector(`${t}[data-qmeta="${e}"]`).remove()})}),e.htmlAttr.filter(htmlFilter).forEach(t=>{document.documentElement.removeAttribute(t)}),e.bodyAttr.filter(bodyFilter).forEach(t=>{document.body.removeAttribute(t)})),["meta","link","script"].forEach(e=>{const i=t[e];for(const t in i){const s=document.createElement(e);for(const e in i[t])"innerHTML"!==e&&s.setAttribute(e,i[t][e]);s.setAttribute("data-qmeta",t),"script"===e&&(s.innerHTML=i[t].innerHTML||""),document.head.appendChild(s)}}),Object.keys(t.htmlAttr).filter(htmlFilter).forEach(e=>{document.documentElement.setAttribute(e,t.htmlAttr[e]||"")}),Object.keys(t.bodyAttr).filter(bodyFilter).forEach(e=>{document.body.setAttribute(e,t.bodyAttr[e]||"")})}function parseMeta(t,e){!0!==t._inactive&&(!0===hasMeta(t)&&(extend(!0,e,t.__qMeta),!0===t.$options.meta.stopPropagation)||t.$children.forEach(t=>{parseMeta(t,e)}))}function updateClient(){!0===ssrTakeover&&(ssrTakeover=!1,this.$root.__currentMeta=window.__Q_META__);const t={title:"",titleTemplate:null,meta:{},link:{},script:{},htmlAttr:{},bodyAttr:{}};parseMeta(this.$root,t),normalize(t),apply(diff(this.$root.__currentMeta,t)),this.$root.__currentMeta=t}function getAttr(t){return e=>{const i=t[e];return e+(!0!==i&&void 0!==i?`="${i}"`:"")}}function getHead(t){let e="";return t.title&&(e+=`${t.title}`),["meta","link","script"].forEach(i=>{const s=t[i];for(const t in s){const o=Object.keys(s[t]).filter(t=>"innerHTML"!==t).map(getAttr(s[t]));e+=`<${i} ${o.join(" ")} data-qmeta="${t}">`,"script"===i&&(e+=`${s[t].innerHTML||""}<\/script>`)}}),e}function getServerMeta(t,e,i){const s={title:"",titleTemplate:null,meta:{},link:{},htmlAttr:{},bodyAttr:{},noscript:{}};parseMeta(t,s),normalize(s);const o=void 0!==i&&void 0!==i.nonce?` nonce="${i.nonce}"`:"",n={"%%Q_HTML_ATTRS%%":Object.keys(s.htmlAttr).filter(htmlFilter).map(getAttr(s.htmlAttr)).join(" "),"%%Q_HEAD_TAGS%%":getHead(s),"%%Q_BODY_ATTRS%%":Object.keys(s.bodyAttr).filter(bodyFilter).map(getAttr(s.bodyAttr)).join(" "),"%%Q_BODY_TAGS%%":Object.keys(s.noscript).map(t=>``).join("")+`window.__Q_META__=${delete s.noscript&&JSON.stringify(s)}<\/script>`};return Object.keys(n).forEach(t=>{e=e.replace(t,n[t])}),e}function beforeCreate(){"function"==typeof this.$options.meta?(void 0===this.$options.computed&&(this.$options.computed={}),this.$options.computed.__qMeta=this.$options.meta):!0===hasMeta(this)&&(this.__qMeta=this.$options.meta)}function hasMeta(t){return void 0!==t.$options.meta&&null!==t.$options.meta}function triggerMeta(){!0===hasMeta(this)&&this.__qMetaUpdate()}!1===isSSR&&Vue__default.default.util.defineReactive(Loading,"isActive",Loading.isActive);var Meta={install({queues:t}){!0===isSSR?(Vue__default.default.prototype.$getMetaHTML=(t=>(e,i)=>getServerMeta(t,e,i)),Vue__default.default.mixin({beforeCreate:beforeCreate}),t.server.push((t,e)=>{e.ssr.Q_HTML_ATTRS+=" %%Q_HTML_ATTRS%%",Object.assign(e.ssr,{Q_HEAD_TAGS:"%%Q_HEAD_TAGS%%",Q_BODY_ATTRS:"%%Q_BODY_ATTRS%%",Q_BODY_TAGS:"%%Q_BODY_TAGS%%"})})):(ssrTakeover=fromSSR,Vue__default.default.mixin({beforeCreate:beforeCreate,created(){!0===hasMeta(this)&&(this.__qMetaUnwatch=this.$watch("__qMeta",this.__qMetaUpdate))},activated:triggerMeta,deactivated:triggerMeta,beforeMount:triggerMeta,destroyed(){!0===hasMeta(this)&&(this.__qMetaUnwatch(),this.__qMetaUpdate())},methods:{__qMetaUpdate(){clearTimeout(updateId),updateId=setTimeout(updateClient.bind(this),50)}}}))}};let vm,uid=0;const defaults={},groups={},notificationsList={},positionClass={},emptyRE=/^\s*$/,positionList=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],badgePositions=["top-left","top-right","bottom-left","bottom-right"],notifTypes={positive:{icon:t=>t.iconSet.type.positive,color:"positive"},negative:{icon:t=>t.iconSet.type.negative,color:"negative"},warning:{icon:t=>t.iconSet.type.warning,color:"warning",textColor:"dark"},info:{icon:t=>t.iconSet.type.info,color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function addNotification(t,e,i){if(!t)return logError("parameter required");let s;const o={textColor:"white"};if(!0!==t.ignoreDefaults&&Object.assign(o,defaults),!1===isObject(t)&&(o.type&&Object.assign(o,notifTypes[o.type]),t={message:t}),Object.assign(o,notifTypes[t.type||o.type],t),"function"==typeof o.icon&&(o.icon=o.icon(e.$q)),o.spinner?!0===o.spinner&&(o.spinner=QSpinner):o.spinner=!1,o.meta={hasMedia:Boolean(!1!==o.spinner||o.icon||o.avatar),hasText:hasContent(o.message)||hasContent(o.caption)},o.position){if(!1===positionList.includes(o.position))return logError("wrong position",t)}else o.position="bottom";if(void 0===o.timeout)o.timeout=5e3;else{const e=parseInt(o.timeout,10);if(isNaN(e)||e<0)return logError("wrong timeout",t);o.timeout=e}0===o.timeout?o.progress=!1:!0===o.progress&&(o.meta.progressClass="q-notification__progress"+(o.progressClass?` ${o.progressClass}`:""),o.meta.progressStyle={animationDuration:`${o.timeout+1e3}ms`});const n=(!0===Array.isArray(t.actions)?t.actions:[]).concat(!0!==t.ignoreDefaults&&!0===Array.isArray(defaults.actions)?defaults.actions:[]).concat(void 0!==notifTypes[t.type]&&!0===Array.isArray(notifTypes[t.type].actions)?notifTypes[t.type].actions:[]),{closeBtn:r}=o;if(r&&n.push({label:"string"==typeof r?r:e.$q.lang.label.close}),o.actions=n.map(({handler:t,noDismiss:e,style:i,class:s,attrs:o,...n})=>({staticClass:s,style:i,props:{flat:!0,...n},attrs:o,on:{click:"function"==typeof t?()=>{t(),!0!==e&&a()}:()=>{a()}}})),void 0===o.multiLine&&(o.multiLine=o.actions.length>1),Object.assign(o.meta,{staticClass:"q-notification row items-stretch"+` q-notification--${!0===o.multiLine?"multi-line":"standard"}`+(void 0!==o.color?` bg-${o.color}`:"")+(void 0!==o.textColor?` text-${o.textColor}`:"")+(void 0!==o.classes?` ${o.classes}`:""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(!0===o.multiLine?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(!0===o.multiLine?"":" col"),leftClass:!0===o.meta.hasText?"additional":"single",attrs:{role:"alert",...o.attrs}}),!1===o.group?(o.group=void 0,o.meta.group=void 0):(void 0!==o.group&&!0!==o.group||(o.group=[o.message,o.caption,o.multiline].concat(o.actions.map(({props:t})=>`${t.label}*${t.icon}`)).join("|")),o.meta.group=o.group+"|"+o.position),0===o.actions.length?o.actions=void 0:o.meta.actionsClass="q-notification__actions row items-center "+(!0===o.multiLine?"justify-end":"col-auto")+(!0===o.meta.hasMedia?" q-notification__actions--with-media":""),void 0!==i){clearTimeout(i.notif.meta.timer),o.meta.uid=i.notif.meta.uid;const t=notificationsList[o.position].indexOf(i.notif);notificationsList[o.position][t]=o}else{const e=groups[o.meta.group];if(void 0===e){if(o.meta.uid=uid++,o.meta.badge=1,-1!==["left","right","center"].indexOf(o.position))notificationsList[o.position].splice(Math.floor(notificationsList[o.position].length/2),0,o);else{const t=o.position.indexOf("top")>-1?"unshift":"push";notificationsList[o.position][t](o)}void 0!==o.group&&(groups[o.meta.group]=o)}else{if(clearTimeout(e.meta.timer),void 0!==o.badgePosition){if(!1===badgePositions.includes(o.badgePosition))return logError("wrong badgePosition",t)}else o.badgePosition=`top-${o.position.indexOf("left")>-1?"right":"left"}`;o.meta.uid=e.meta.uid,o.meta.badge=e.meta.badge+1,o.meta.badgeClass=`q-notification__badge q-notification__badge--${o.badgePosition}`+(void 0!==o.badgeColor?` bg-${o.badgeColor}`:"")+(void 0!==o.badgeTextColor?` text-${o.badgeTextColor}`:"")+(o.badgeClass?` ${o.badgeClass}`:"");const i=notificationsList[o.position].indexOf(e);notificationsList[o.position][i]=groups[o.meta.group]=o}}const a=()=>{removeNotification(o,e),s=void 0};return e.$forceUpdate(),o.timeout>0&&(o.meta.timer=setTimeout(()=>{a()},o.timeout+1e3)),void 0!==o.group?e=>{void 0!==e?logError("trying to update a grouped one which is forbidden",t):a()}:(s={dismiss:a,config:t,notif:o},void 0===i?t=>{if(void 0!==s)if(void 0===t)s.dismiss();else{addNotification(Object.assign({},s.config,t,{group:!1,position:o.position}),e,s)}}:void Object.assign(i,s))}function removeNotification(t,e){clearTimeout(t.meta.timer);const i=notificationsList[t.position].indexOf(t);if(-1!==i){void 0!==t.group&&delete groups[t.meta.group];const s=e.$refs[""+t.meta.uid];if(s){const{width:t,height:e}=getComputedStyle(s);s.style.left=`${s.offsetLeft}px`,s.style.width=t,s.style.height=e}notificationsList[t.position].splice(i,1),e.$forceUpdate(),"function"==typeof t.onDismiss&&t.onDismiss()}}function hasContent(t){return void 0!==t&&null!==t&&!0!==emptyRE.test(t)}function logError(t,e){return console.error(`Notify: ${t}`,e),!1}const Notifications={name:"QNotifications",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},render:t=>t("div",{staticClass:"q-notifications"},positionList.map(e=>t("transition-group",{key:e,staticClass:positionClass[e],tag:"div",props:{name:`q-notification--${e}`,mode:"out-in"}},notificationsList[e].map(e=>{const{meta:i}=e,s=[];if(!0===i.hasMedia&&(!1!==e.spinner?s.push(t(e.spinner,{staticClass:"q-notification__spinner q-notification__spinner--"+i.leftClass,props:{color:e.spinnerColor,size:e.spinnerSize}})):e.icon?s.push(t(QIcon,{staticClass:"q-notification__icon q-notification__icon--"+i.leftClass,attrs:{role:"img"},props:{name:e.icon,color:e.iconColor,size:e.iconSize}})):e.avatar&&s.push(t(QAvatar,{staticClass:"q-notification__avatar q-notification__avatar--"+i.leftClass},[t("img",{attrs:{src:e.avatar,"aria-hidden":"true"}})]))),!0===i.hasText){let i;const o={staticClass:"q-notification__message col"};if(!0===e.html)o.domProps={innerHTML:e.caption?`
${e.message}
${e.caption}
`:e.message};else{const s=[e.message];i=e.caption?[t("div",s),t("div",{staticClass:"q-notification__caption"},[e.caption])]:s}s.push(t("div",o,i))}const o=[t("div",{staticClass:i.contentClass},s)];return!0===e.progress&&o.push(t("div",{key:`${i.uid}|p|${i.badge}`,staticClass:i.progressClass,style:i.progressStyle})),void 0!==e.actions&&o.push(t("div",{staticClass:i.actionsClass},e.actions.map(e=>t(QBtn,{...e})))),i.badge>1&&o.push(t("div",{key:`${i.uid}|${i.badge}`,staticClass:i.badgeClass,style:e.badgeStyle},[i.badge])),t("div",{ref:""+i.uid,key:i.uid,staticClass:i.staticClass,attrs:i.attrs},[t("div",{staticClass:i.wrapperClass},o)])})))),mounted(){if(void 0!==this.$q.fullscreen&&!0===this.$q.fullscreen.isCapable){const t=()=>{const t=getBodyFullscreenElement(this.$q.fullscreen.activeEl);this.$el.parentElement!==t&&t.appendChild(this.$el)};this.unwatchFullscreen=this.$watch("$q.fullscreen.activeEl",debounce(t,50)),!0===this.$q.fullscreen.isActive&&t()}},beforeDestroy(){void 0!==this.unwatchFullscreen&&this.unwatchFullscreen()}};var Notify={setDefaults(t){!0!==isSSR&&!0===isObject(t)&&Object.assign(defaults,t)},registerType(t,e){!0!==isSSR&&!0===isObject(e)&&(notifTypes[t]=e)},install({$q:t}){if(t.notify=this.create=!0===isSSR?noop:t=>addNotification(t,vm),t.notify.setDefaults=this.setDefaults,t.notify.registerType=this.registerType,void 0!==t.config.notify&&this.setDefaults(t.config.notify),!0!==isSSR){positionList.forEach(t=>{notificationsList[t]=[];const e=!0===["left","center","right"].includes(t)?"center":t.indexOf("top")>-1?"top":"bottom",i=t.indexOf("left")>-1?"start":t.indexOf("right")>-1?"end":"center",s=["left","right"].includes(t)?`items-${"left"===t?"start":"end"} justify-center`:"center"===t?"flex-center":`items-${i}`;positionClass[t]=`q-notifications__list q-notifications__list--${e} fixed column no-wrap ${s}`});const t=document.createElement("div");document.body.appendChild(t),(vm=new Vue__default.default(Notifications)).$mount(t)}}};function encode(t){return!0===isDate(t)?"__q_date|"+t.toUTCString():!0===isRegexp(t)?"__q_expr|"+t.source:"number"==typeof t?"__q_numb|"+t:"boolean"==typeof t?"__q_bool|"+(t?"1":"0"):"string"==typeof t?"__q_strn|"+t:"function"==typeof t?"__q_strn|"+t.toString():t===Object(t)?"__q_objt|"+JSON.stringify(t):t}function decode(t,e){if(t.length<9)return t;const i=t.substr(0,8),s=t.substring(9);switch(i){case"__q_date":return new Date(s);case"__q_expr":return new RegExp(s);case"__q_numb":return Number(s);case"__q_bool":return Boolean("1"===s);case"__q_strn":return""+s;case"__q_objt":return JSON.parse(s,e);default:return t}}function getEmptyStorage(){const t=()=>null;return{has:()=>!1,getLength:()=>0,getItem:t,getIndex:t,getKey:t,getAll:()=>{},getAllKeys:()=>[],set:noop,remove:noop,clear:noop,isEmpty:()=>!0}}function getStorage(t){const e=window[t+"Storage"],i=(t,i)=>{const s=e.getItem(t);return s?decode(s,i):null};return{has:(t,i)=>null!==e.getItem(t,i),getLength:()=>e.length,getItem:i,getIndex:(t,s)=>tt{let s;const o={},n=e.length;for(let r=0;r{const t=[],i=e.length;for(let s=0;s{e.setItem(t,encode(i))},remove:t=>{e.removeItem(t)},clear:()=>{e.clear()},isEmpty:()=>0===e.length}}var LocalStorage={install({$q:t}){const e=!0===isSSR||!1===client.has.webStorage?getEmptyStorage():getStorage("local");t.localStorage=e,Object.assign(this,e)}},SessionStorage={install({$q:t}){const e=!0===isSSR||!1===client.has.webStorage?getEmptyStorage():getStorage("session");t.sessionStorage=e,Object.assign(this,e)}},plugins=Object.freeze({__proto__:null,AddressbarColor:AddressbarColor,AppFullscreen:AppFullscreen,AppVisibility:AppVisibility,BottomSheet:BottomSheet,Cookies:Cookies,Dark:Dark,Dialog:Dialog,Interaction:Interaction,LoadingBar:LoadingBar,Loading:Loading,Meta:Meta,Notify:Notify,Platform:Platform,Screen:Screen,LocalStorage:LocalStorage,SessionStorage:SessionStorage});function fallback(t){const e=document.createElement("textarea");e.value=t,e.contentEditable=!0,e.style.position="fixed",document.body.appendChild(e),e.focus(),e.select();const i=document.execCommand("copy");return e.remove(),i}function copyToClipboard(t){return void 0!==navigator.clipboard?navigator.clipboard.writeText(t):new Promise((e,i)=>{const s=fallback(t);s?e(!0):i(s)})}function debouncedRef(t,e,i=250){const s={get value(){const i=t[e];return i!==s.propValue&&(s.propValue=i,s.internalValue=i,void 0!==s.timer&&clearTimeout(s.timer),s.timer=void 0),s.internalValue},set value(o){s.internalValue!==o&&(s.internalValue=o,void 0!==s.timer&&clearTimeout(s.timer),s.timer=setTimeout(()=>{t[e]=o,s.timer=void 0},i))},destroy(){void 0!==s.timer&&(clearTimeout(s.timer),s.timer=void 0,t[e]=s.internalValue)}};return t.$once("hook:beforeDestroy",s.destroy),s.propValue=NaN,s.internalValue=NaN,s}function clean(t){setTimeout(()=>{window.URL.revokeObjectURL(t.href)},1e4),t.remove()}function exportFile(t,e,i){const s=new Blob([e],{type:i||"text/plain"});if(window.navigator.msSaveOrOpenBlob)return window.navigator.msSaveOrOpenBlob(s,t);const o=document.createElement("a");o.download=t,o.href=window.URL.createObjectURL(s),o.classList.add("hidden"),o.style.position="fixed",document.body.appendChild(o);try{return o.click(),clean(o),!0}catch(t){return clean(o),t}}function parseFeatures(t){const e=Object.assign({noopener:!0},t),i=[];return Object.keys(e).forEach(t=>{!0===e[t]&&i.push(t)}),i.join(",")}function openWindow(t,e,i){let s=window.open;if(!0===Platform.is.cordova){if(void 0!==cordova&&void 0!==cordova.InAppBrowser&&void 0!==cordova.InAppBrowser.open)s=cordova.InAppBrowser.open;else if(void 0!==navigator&&void 0!==navigator.app)return navigator.app.loadUrl(t,{openExternal:!0})}else if(void 0!==Vue__default.default.prototype.$q.electron)return Vue__default.default.prototype.$q.electron.shell.openExternal(t);const o=s(t,"_blank",parseFeatures(i));if(o)return Platform.is.desktop&&o.focus(),o;e&&e()}var openUrl=(t,e,i)=>{if(!0!==Platform.is.ios||void 0===window.SafariViewController)return openWindow(t,e,i);window.SafariViewController.isAvailable(s=>{s?window.SafariViewController.show({url:t},noop,e):openWindow(t,e,i)})};function parsePromises(t){const e=Array.isArray(t);if(!0===e){const i=t.length;return{isList:e,totalJobs:i,resultAggregator:Array(i).fill(null)}}const i=Object.keys(t),s={};return i.forEach(t=>{s[t]=null}),{isList:e,totalJobs:i.length,resultAggregator:s,resultKeys:i}}function runSequentialPromises(t,{threadsNumber:e=1,abortOnFail:i=!0}={}){let s=-1,o=!1;const{isList:n,totalJobs:r,resultAggregator:a,resultKeys:l}=parsePromises(t),h=Array(e).fill((()=>new Promise((e,h)=>{!function d(){const c=++s;if(!0===o||c>=r)return void e();const u=!0===n?c:l[c];t[u](a).then(t=>{!0!==o?(a[u]={key:u,status:"fulfilled",value:t},setTimeout(d)):e()}).catch(t=>{if(!0===o)return void e();const s={key:u,status:"rejected",reason:t};if(a[u]=s,!0===i)return o=!0,void h({...s,resultAggregator:a});setTimeout(d)})}()}))());return Promise.all(h).then(()=>a)}var utils=Object.freeze({__proto__:null,clone:cloneDeep,colors:colors,copyToClipboard:copyToClipboard,date:date,debounce:debounce,debouncedRef:debouncedRef,dom:dom,event:event,noop:noop,exportFile:exportFile,extend:extend,format:format,frameDebounce:frameDebounce,is:is,morph:morph,openURL:openUrl,patterns:patterns,runSequentialPromises:runSequentialPromises,scroll:scroll,throttle:throttle,uid:uid$3}),index_common={...VuePlugin,install(t,e){VuePlugin.install(t,{components:components,directives:directives,plugins:plugins,...e})},Quasar:VuePlugin,...components,...directives,...plugins,...utils};module.exports=index_common; \ No newline at end of file diff --git a/dist/quasar.css b/dist/quasar.css new file mode 100644 index 00000000000..9ed40df95fe --- /dev/null +++ b/dist/quasar.css @@ -0,0 +1,12621 @@ +/* + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +*, +*:before, +*:after { + box-sizing: inherit; + -webkit-tap-highlight-color: transparent; + -moz-tap-highlight-color: transparent; +} +html, +body, +#q-app { + width: 100%; + direction: ltr; +} +body.platform-ios.within-iframe, +body.platform-ios.within-iframe #q-app { + width: 100px; + min-width: 100%; +} +html, +body { + margin: 0; + box-sizing: border-box; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary { + display: block; +} +/* + * line 1: Remove the bottom border in Firefox 39-. + * lines 2,3: Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} +img { + border-style: none; +} +svg:not(:root) { + overflow: hidden; +} +/* + * line 1: Correct the inheritance and scaling of font size in all browsers. + * line 2: Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +/* + * lines 1,2: Add the correct box sizing in Firefox. + * line 3: Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} +button, +input, +optgroup, +select, +textarea { + font: inherit; + font-family: inherit; + margin: 0; +} +optgroup { + font-weight: bold; +} +/* + * Show the overflow in IE. + * input: Show the overflow in Edge. + * select: Show the overflow in Edge, Firefox, and IE. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * select: Remove the inheritance of text transform in Firefox. + */ +button, +input, +select { + overflow: visible; + text-transform: none; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} +button:-moz-focusring, +input:-moz-focusring { + outline: 1px dotted ButtonText; +} +fieldset { + padding: 0.35em 0.75em 0.625em; +} +/** + * lines 1,3,4,6: Correct the text wrapping in Edge and IE. + * line 2: Correct the color inheritance from `fieldset` elements in IE. + * line 5: Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} +progress { + vertical-align: baseline; +} +textarea { + overflow: auto; +} +input[type='search']::-webkit-search-cancel-button, +input[type='search']::-webkit-search-decoration { + -webkit-appearance: none; +} +.q-icon { + line-height: 1; + width: 1em; + height: 1em; + flex-shrink: 0; + letter-spacing: normal; + text-transform: none; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + text-align: center; + position: relative; + box-sizing: content-box; + fill: currentColor; +} +.q-icon:before, +.q-icon:after { + width: 100%; + height: 100%; + display: flex !important; + align-items: center; + justify-content: center; +} +.q-icon > svg, +.q-icon > img { + width: 100%; + height: 100%; +} +.q-icon, +.material-icons, +.material-icons-outlined, +.material-icons-round, +.material-icons-sharp, +.material-symbols-outlined, +.material-symbols-rounded, +.material-symbols-sharp { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: inherit; + font-size: inherit; + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; +} +.q-panel { + height: 100%; + width: 100%; +} +.q-panel > div { + height: 100%; + width: 100%; +} +.q-panel-parent { + overflow: hidden; + position: relative; +} +.q-loading-bar { + position: fixed; + z-index: 9998; + transition: transform 0.5s cubic-bezier(0, 0, 0.2, 1), opacity 0.5s; + background: #f44336; +} +.q-loading-bar--top { + left: 0 /* rtl:ignore */; + right: 0 /* rtl:ignore */; + top: 0; + width: 100%; +} +.q-loading-bar--bottom { + left: 0 /* rtl:ignore */; + right: 0 /* rtl:ignore */; + bottom: 0; + width: 100%; +} +.q-loading-bar--right { + top: 0; + bottom: 0; + right: 0; + height: 100%; +} +.q-loading-bar--left { + top: 0; + bottom: 0; + left: 0; + height: 100%; +} +.q-avatar { + position: relative; + vertical-align: middle; + display: inline-block; + border-radius: 50%; + font-size: 48px; + height: 1em; + width: 1em; +} +.q-avatar__content { + font-size: 0.5em; + line-height: 0.5em; +} +.q-avatar__content, +.q-avatar img:not(.q-icon) { + border-radius: inherit; + height: inherit; + width: inherit; +} +.q-avatar--square { + border-radius: 0; +} +.q-badge { + background-color: #1976d2; + background-color: var(--q-color-primary); + color: #fff; + color: var(--q-color-dark-text); + padding: 2px 6px; + border-radius: 4px; + font-size: 12px; + line-height: 12px; + min-height: 12px; + font-weight: normal; + vertical-align: baseline; +} +.q-badge--single-line { + white-space: nowrap; +} +.q-badge--multi-line { + word-break: break-all; + word-wrap: break-word; +} +.q-badge--floating { + position: absolute; + top: -4px; + right: -3px; + cursor: inherit; +} +.q-badge--transparent { + opacity: 0.8; +} +.q-badge--outline { + background-color: transparent; + border: 1px solid currentColor; +} +.q-badge--rounded { + border-radius: 1em; +} +.q-banner { + min-height: 54px; + padding: 8px 16px; +} +.q-banner--top-padding { + padding-top: 14px; +} +.q-banner__avatar { + min-width: 1px !important; +} +.q-banner__avatar > .q-avatar { + font-size: 46px; +} +.q-banner__avatar > .q-icon { + font-size: 40px; +} +.q-banner__avatar:not(:empty) + .q-banner__content { + padding-left: 16px; +} +.q-banner__actions.col-auto { + padding-left: 16px; +} +.q-banner__actions.col-all .q-btn-item { + margin: 4px 0 0 4px; +} +.q-banner--dense { + min-height: 32px; + padding: 8px; +} +.q-banner--dense.q-banner--top-padding { + padding-top: 12px; +} +.q-banner--dense .q-banner__avatar > .q-avatar, +.q-banner--dense .q-banner__avatar > .q-icon { + font-size: 28px; +} +.q-banner--dense .q-banner__avatar:not(:empty) + .q-banner__content { + padding-left: 8px; +} +.q-banner--dense .q-banner__actions.col-auto { + padding-left: 8px; +} +.q-bar { + background: rgba(0,0,0,0.2); +} +.q-bar > .q-icon { + margin-left: 2px; +} +.q-bar > div, +.q-bar > div + .q-icon { + margin-left: 8px; +} +.q-bar > .q-btn { + margin-left: 2px; +} +.q-bar > .q-icon:first-child, +.q-bar > .q-btn:first-child, +.q-bar > div:first-child { + margin-left: 0; +} +.q-bar--standard { + padding: 0 12px; + height: 32px; + font-size: 18px; +} +.q-bar--standard > div { + font-size: 16px; +} +.q-bar--standard .q-btn { + font-size: 11px; +} +.q-bar--dense { + padding: 0 8px; + height: 24px; + font-size: 14px; +} +.q-bar--dense .q-btn { + font-size: 8px; +} +.q-bar--dark { + background: rgba(255,255,255,0.15); +} +@media (prefers-color-scheme: dark) { + .q-bar--dark-auto { + background: rgba(255,255,255,0.15); + } +} +.q-breadcrumbs__el { + color: inherit; +} +.q-breadcrumbs__el-icon { + font-size: 125%; +} +.q-breadcrumbs__el-icon--with-label { + margin-right: 8px; +} +[dir=rtl] .q-breadcrumbs__separator .q-icon { + transform: scaleX(-1) /* rtl:ignore */; +} +.q-btn { + display: inline-flex; + flex-direction: column; + align-items: stretch; + position: relative; + outline: 0; + border: 0; + vertical-align: middle; + padding: 0; + font-size: 14px; + line-height: 1.715em; + text-decoration: none; + color: inherit; + background: transparent; + font-weight: 500; + text-transform: uppercase; + text-align: center; + width: auto; + height: auto; +} +.q-btn .q-icon, +.q-btn .q-spinner { + font-size: 1.715em; +} +.q-btn.disabled { + opacity: 0.7 !important; +} +.q-btn__wrapper { + padding: 4px 16px; + min-height: 2.572em; + border-radius: inherit; + width: 100%; + height: 100%; +} +.q-btn__wrapper:before { + content: ''; + display: block; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + border-radius: inherit; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +.q-btn--actionable { + cursor: pointer; +} +.q-btn--actionable.q-btn--standard .q-btn__wrapper:before { + transition: box-shadow 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +.q-btn--actionable.q-btn--standard:active .q-btn__wrapper:before, +.q-btn--actionable.q-btn--standard.q-btn--active .q-btn__wrapper:before { + box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 5px 8px rgba(0,0,0,0.14), 0 1px 14px rgba(0,0,0,0.12); +} +.q-btn--no-uppercase { + text-transform: none; +} +.q-btn--rectangle { + border-radius: 3px; +} +.q-btn--outline { + background: transparent !important; +} +.q-btn--outline .q-btn__wrapper:before { + border: 1px solid currentColor; +} +.q-btn--push { + border-radius: 7px; +} +.q-btn--push .q-btn__wrapper:before { + border-bottom: 3px solid rgba(0,0,0,0.15); +} +.q-btn--push.q-btn--actionable { + transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +.q-btn--push.q-btn--actionable .q-btn__wrapper:before { + transition: top 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), bottom 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), border-bottom-width 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +.q-btn--push.q-btn--actionable:active, +.q-btn--push.q-btn--actionable.q-btn--active { + transform: translateY(2px); +} +.q-btn--push.q-btn--actionable:active .q-btn__wrapper:before, +.q-btn--push.q-btn--actionable.q-btn--active .q-btn__wrapper:before { + border-bottom-width: 0; +} +.q-btn--rounded { + border-radius: 28px; +} +.q-btn--round { + border-radius: 50%; +} +.q-btn--round .q-btn__wrapper { + padding: 0; + min-width: 3em; + min-height: 3em; +} +.q-btn--flat .q-btn__wrapper:before, +.q-btn--outline .q-btn__wrapper:before, +.q-btn--unelevated .q-btn__wrapper:before { + box-shadow: none; +} +.q-btn--dense .q-btn__wrapper { + padding: 0.285em; + min-height: 2em; +} +.q-btn--dense.q-btn--round .q-btn__wrapper { + padding: 0; + min-height: 2.4em; + min-width: 2.4em; +} +.q-btn--dense .on-left { + margin-right: 6px; +} +.q-btn--dense .on-right { + margin-left: 6px; +} +.q-btn--fab .q-icon, +.q-btn--fab-mini .q-icon { + font-size: 24px; +} +.q-btn--fab .q-icon { + margin: auto; +} +.q-btn--fab .q-btn__wrapper { + padding: 16px; + min-height: 56px; + min-width: 56px; +} +.q-btn--fab-mini .q-btn__wrapper { + padding: 8px; + min-height: 40px; + min-width: 40px; +} +.q-btn__content { + transition: opacity 0.3s; + z-index: 0; +} +.q-btn__content--hidden { + opacity: 0; + pointer-events: none; +} +.q-btn__progress { + border-radius: inherit; + z-index: 0; +} +.q-btn__progress-indicator { + z-index: -1; + transform: translateX(-100%); + background: rgba(255,255,255,0.25); +} +.q-btn__progress--dark .q-btn__progress-indicator { + background: rgba(0,0,0,0.2); +} +.q-btn--flat .q-btn__progress-indicator, +.q-btn--outline .q-btn__progress-indicator { + opacity: 0.2; + background: currentColor; +} +.q-btn-dropdown--split .q-btn-dropdown__arrow-container.q-btn--outline { + border-left: 1px solid currentColor; +} +.q-btn-dropdown--split .q-btn-dropdown__arrow-container:not(.q-btn--outline) { + border-left: 1px solid rgba(255,255,255,0.3); +} +.q-btn-dropdown--split .q-btn-dropdown__arrow-container .q-btn__wrapper { + padding: 0 4px; +} +.q-btn-dropdown--simple * + .q-btn-dropdown__arrow { + margin-left: 8px; +} +.q-btn-dropdown__arrow { + transition: transform 0.28s; +} +.q-btn-dropdown--current { + flex-grow: 1; +} +.q-btn-group { + border-radius: 3px; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + vertical-align: middle; +} +.q-btn-group > .q-btn-item { + border-radius: inherit; + align-self: stretch; +} +.q-btn-group > .q-btn-item .q-btn__wrapper:before { + box-shadow: none; +} +.q-btn-group > .q-btn-item .q-badge--floating { + right: 0; +} +.q-btn-group > .q-btn-group { + box-shadow: none; +} +.q-btn-group > .q-btn-group:first-child > .q-btn:first-child { + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; +} +.q-btn-group > .q-btn-group:last-child > .q-btn:last-child { + border-top-right-radius: inherit; + border-bottom-right-radius: inherit; +} +.q-btn-group > .q-btn-group:not(:first-child) > .q-btn:first-child .q-btn__wrapper:before { + border-left: 0; +} +.q-btn-group > .q-btn-group:not(:last-child) > .q-btn:last-child .q-btn__wrapper:before { + border-right: 0; +} +.q-btn-group > .q-btn-item:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.q-btn-group > .q-btn-item:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.q-btn-group > .q-btn-item.q-btn--standard .q-btn__wrapper:before { + z-index: -1; +} +.q-btn-group--push { + border-radius: 7px; +} +.q-btn-group--push > .q-btn--push.q-btn--actionable { + transform: none; +} +.q-btn-group--push > .q-btn--push.q-btn--actionable .q-btn__wrapper { + transition: margin-top 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), margin-bottom 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), box-shadow 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +.q-btn-group--push > .q-btn--push.q-btn--actionable:active .q-btn__wrapper, +.q-btn-group--push > .q-btn--push.q-btn--actionable.q-btn--active .q-btn__wrapper { + margin-top: 2px; + margin-bottom: -2px; +} +.q-btn-group--rounded { + border-radius: 28px; +} +.q-btn-group--square { + border-radius: 0; +} +.q-btn-group--flat, +.q-btn-group--outline, +.q-btn-group--unelevated { + box-shadow: none; +} +.q-btn-group--outline > .q-separator { + display: none; +} +.q-btn-group--outline > .q-btn-item + .q-btn-item .q-btn__wrapper:before { + border-left: 0; +} +.q-btn-group--outline > .q-btn-item:not(:last-child) .q-btn__wrapper:before { + border-right: 0; +} +.q-btn-group--stretch { + align-self: stretch; + border-radius: 0; +} +.q-btn-group--glossy > .q-btn-item { + background-image: linear-gradient(to bottom, rgba(255,255,255,0.3), rgba(255,255,255,0) 50%, rgba(0,0,0,0.12) 51%, rgba(0,0,0,0.04)) !important; +} +.q-btn-group--spread > .q-btn-group { + display: flex !important; +} +.q-btn-group--spread > .q-btn-item, +.q-btn-group--spread > .q-btn-group > .q-btn-item:not(.q-btn-dropdown__arrow-container) { + width: auto; + min-width: 0; + max-width: 100%; + flex: 10000 1 0%; +} +.q-btn-toggle { + position: relative; +} +.q-card { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; + vertical-align: top; + position: relative; +} +.q-card > div:first-child, +.q-card > img:first-child { + border-top: 0; + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.q-card > div:last-child, +.q-card > img:last-child { + border-bottom: 0; + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} +.q-card > div:not(:first-child), +.q-card > img:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.q-card > div:not(:last-child), +.q-card > img:not(:last-child) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.q-card > div { + border-left: 0; + border-right: 0; + box-shadow: none; +} +.q-card--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-card--dark { + border-color: rgba(255,255,255,0.28); +} +.q-card__section { + position: relative; +} +.q-card__section--vert { + padding: 16px; +} +.q-card__section--horiz > div:first-child, +.q-card__section--horiz > img:first-child { + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; +} +.q-card__section--horiz > div:last-child, +.q-card__section--horiz > img:last-child { + border-top-right-radius: inherit; + border-bottom-right-radius: inherit; +} +.q-card__section--horiz > div:not(:first-child), +.q-card__section--horiz > img:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.q-card__section--horiz > div:not(:last-child), +.q-card__section--horiz > img:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.q-card__section--horiz > div { + border-top: 0; + border-bottom: 0; + box-shadow: none; +} +.q-card__actions { + padding: 8px; + align-items: center; +} +.q-card__actions .q-btn__wrapper { + padding: 0 8px; +} +.q-card__actions--horiz > .q-btn-item + .q-btn-item, +.q-card__actions--horiz > .q-btn-group + .q-btn-item, +.q-card__actions--horiz > .q-btn-item + .q-btn-group { + margin-left: 8px; +} +.q-card__actions--vert > .q-btn-item.q-btn--round { + align-self: center; +} +.q-card__actions--vert > .q-btn-item + .q-btn-item, +.q-card__actions--vert > .q-btn-group + .q-btn-item, +.q-card__actions--vert > .q-btn-item + .q-btn-group { + margin-top: 4px; +} +.q-card__actions--vert > .q-btn-group > .q-btn-item { + flex-grow: 1; +} +.q-card > img { + display: block; + width: 100%; + max-width: 100%; + border: 0; +} +@media (prefers-color-scheme: dark) { + .q-card--dark-auto { + border-color: rgba(255,255,255,0.28); + } +} +.q-carousel { + height: 400px; +} +.q-carousel__slide { + min-height: 100%; + background-size: cover; + background-position: 50%; +} +.q-carousel__slide, +.q-carousel .q-carousel--padding { + padding: 16px; +} +.q-carousel__slides-container { + height: 100%; +} +.q-carousel__control { + color: #fff; + color: var(--q-color-dark-text); +} +.q-carousel__arrow { + pointer-events: none; +} +.q-carousel__arrow .q-icon { + font-size: 28px; +} +.q-carousel__arrow .q-btn { + pointer-events: all; +} +.q-carousel__prev-arrow--horizontal, +.q-carousel__next-arrow--horizontal { + top: 16px; + bottom: 16px; +} +.q-carousel__prev-arrow--horizontal { + left: 16px; +} +.q-carousel__next-arrow--horizontal { + right: 16px; +} +.q-carousel__prev-arrow--vertical, +.q-carousel__next-arrow--vertical { + left: 16px; + right: 16px; +} +.q-carousel__prev-arrow--vertical { + top: 16px; +} +.q-carousel__next-arrow--vertical { + bottom: 16px; +} +.q-carousel__navigation--top, +.q-carousel__navigation--bottom { + left: 16px; + right: 16px; + overflow-x: auto; + overflow-y: hidden; +} +.q-carousel__navigation--top { + top: 16px; +} +.q-carousel__navigation--bottom { + bottom: 16px; +} +.q-carousel__navigation--left, +.q-carousel__navigation--right { + top: 16px; + bottom: 16px; + overflow-x: hidden; + overflow-y: auto; +} +.q-carousel__navigation--left > .q-carousel__navigation-inner, +.q-carousel__navigation--right > .q-carousel__navigation-inner { + flex-direction: column; +} +.q-carousel__navigation--left { + left: 16px; +} +.q-carousel__navigation--right { + right: 16px; +} +.q-carousel__navigation-inner { + flex: 1 1 auto; +} +.q-carousel__navigation .q-btn { + margin: 6px 4px; +} +.q-carousel__navigation .q-btn .q-btn__wrapper { + padding: 5px; +} +.q-carousel__navigation-icon--inactive { + opacity: 0.7; +} +.q-carousel .q-carousel__thumbnail { + margin: 2px; + height: 50px; + width: auto; + display: inline-block; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; + vertical-align: middle; + opacity: 0.7; + transition: opacity 0.3s; +} +.q-carousel .q-carousel__thumbnail:hover, +.q-carousel .q-carousel__thumbnail--active { + opacity: 1; +} +.q-carousel .q-carousel__thumbnail--active { + border-color: currentColor; + cursor: default; +} +.q-carousel--navigation-top.q-carousel--with-padding .q-carousel__slide, +.q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide, +.q-carousel--navigation-top .q-carousel--padding, +.q-carousel--arrows-vertical .q-carousel--padding { + padding-top: 60px; +} +.q-carousel--navigation-bottom.q-carousel--with-padding .q-carousel__slide, +.q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide, +.q-carousel--navigation-bottom .q-carousel--padding, +.q-carousel--arrows-vertical .q-carousel--padding { + padding-bottom: 60px; +} +.q-carousel--navigation-left.q-carousel--with-padding .q-carousel__slide, +.q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide, +.q-carousel--navigation-left .q-carousel--padding, +.q-carousel--arrows-horizontal .q-carousel--padding { + padding-left: 60px; +} +.q-carousel--navigation-right.q-carousel--with-padding .q-carousel__slide, +.q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide, +.q-carousel--navigation-right .q-carousel--padding, +.q-carousel--arrows-horizontal .q-carousel--padding { + padding-right: 60px; +} +.q-carousel.fullscreen { + height: 100%; +} +.q-message-name, +.q-message-stamp, +.q-message-label { + font-size: small; +} +.q-message-label { + margin: 24px 0; + text-align: center; +} +.q-message-stamp { + color: inherit; + margin-top: 4px; + opacity: 0.6; + display: none; +} +.q-message-avatar { + border-radius: 50%; + width: 48px; + height: 48px; + min-width: 48px; +} +.q-message { + margin-bottom: 8px; +} +.q-message:first-child .q-message-label { + margin-top: 0; +} +.q-message-avatar--received { + margin-right: 8px; +} +.q-message-text--received { + color: #81c784; + border-radius: 4px 4px 4px 0; +} +.q-message-text--received:last-child:before { + right: 100%; + border-right: 0 solid transparent; + border-left: 8px solid transparent; + border-bottom: 8px solid currentColor; +} +.q-message-text-content--received { + color: #000; +} +.q-message-name--sent { + text-align: right; +} +.q-message-avatar--sent { + margin-left: 8px; +} +.q-message-container--sent { + flex-direction: row-reverse; +} +.q-message-text--sent { + color: #e0e0e0; + border-radius: 4px 4px 0 4px; +} +.q-message-text--sent:last-child:before { + left: 100%; + border-left: 0 solid transparent; + border-right: 8px solid transparent; + border-bottom: 8px solid currentColor; +} +.q-message-text-content--sent { + color: #000; +} +.q-message-text { + background: currentColor; + padding: 8px; + line-height: 1.2; + word-break: break-word; + position: relative; +} +.q-message-text + .q-message-text { + margin-top: 3px; +} +.q-message-text:last-child { + min-height: 48px; +} +.q-message-text:last-child .q-message-stamp { + display: block; +} +.q-message-text:last-child:before { + content: ''; + position: absolute; + bottom: 0; + width: 0; + height: 0; +} +.q-checkbox { + vertical-align: middle; +} +.q-checkbox__native { + width: 1px; + height: 1px; +} +.q-checkbox__bg, +.q-checkbox__icon-container { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.q-checkbox__bg { + top: 25%; + left: 25%; + width: 50%; + height: 50%; + border: 2px solid currentColor; + border-radius: 2px; + transition: background 0.22s cubic-bezier(0, 0, 0.2, 1) 0ms; + -webkit-print-color-adjust: exact; +} +.q-checkbox__icon { + color: currentColor; + font-size: 0.5em; +} +.q-checkbox__svg { + color: #fff; + color: var(--q-color-dark-text); +} +.q-checkbox__truthy { + stroke: currentColor; + stroke-width: 3.12px; + stroke-dashoffset: 29.78334; + stroke-dasharray: 29.78334; +} +.q-checkbox__indet { + fill: currentColor; + transform-origin: 50% 50%; + transform: rotate(-280deg) scale(0); +} +.q-checkbox__inner { + font-size: 40px; + width: 1em; + min-width: 1em; + height: 1em; + outline: 0; + border-radius: 50%; + color: rgba(0,0,0,0.54); +} +.q-checkbox__inner--truthy, +.q-checkbox__inner--indet { + color: #1976d2; + color: var(--q-color-primary); +} +.q-checkbox__inner--truthy .q-checkbox__bg, +.q-checkbox__inner--indet .q-checkbox__bg { + background: currentColor; +} +.q-checkbox__inner--truthy path { + stroke-dashoffset: 0; + transition: stroke-dashoffset 0.18s cubic-bezier(0.4, 0, 0.6, 1) 0ms; +} +.q-checkbox__inner--indet .q-checkbox__indet { + transform: rotate(0) scale(1); + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1) 0ms; +} +.q-checkbox.disabled { + opacity: 0.75 !important; +} +.q-checkbox--dark .q-checkbox__inner { + color: rgba(255,255,255,0.7); +} +.q-checkbox--dark .q-checkbox__inner:before { + opacity: 0.32 !important; +} +.q-checkbox--dark .q-checkbox__inner--truthy, +.q-checkbox--dark .q-checkbox__inner--indet { + color: #1976d2; + color: var(--q-color-primary); +} +.q-checkbox--dense .q-checkbox__inner { + width: 0.5em; + min-width: 0.5em; + height: 0.5em; +} +.q-checkbox--dense .q-checkbox__bg { + left: 5%; + top: 5%; + width: 90%; + height: 90%; +} +.q-checkbox--dense .q-checkbox__label { + padding-left: 0.5em; +} +.q-checkbox--dense.reverse .q-checkbox__label { + padding-left: 0; + padding-right: 0.5em; +} +body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + border-radius: 50%; + background: currentColor; + opacity: 0.12; + transform: scale3d(0, 0, 1); + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1); +} +body.desktop .q-checkbox:not(.disabled):focus .q-checkbox__inner:before, +body.desktop .q-checkbox:not(.disabled):hover .q-checkbox__inner:before { + transform: scale3d(1, 1, 1); +} +body.desktop .q-checkbox--dense:not(.disabled):focus .q-checkbox__inner:before, +body.desktop .q-checkbox--dense:not(.disabled):hover .q-checkbox__inner:before { + transform: scale3d(1.4, 1.4, 1); +} +@media (prefers-color-scheme: dark) { + .q-checkbox--dark-auto .q-checkbox__inner { + color: rgba(255,255,255,0.7); + } + .q-checkbox--dark-auto .q-checkbox__inner:before { + opacity: 0.32 !important; + } + .q-checkbox--dark-auto .q-checkbox__inner--truthy, + .q-checkbox--dark-auto .q-checkbox__inner--indet { + color: #1976d2; + color: var(--q-color-primary); + } +} +.q-chip { + vertical-align: middle; + border-radius: 16px; + outline: 0; + position: relative; + height: 2em; + max-width: 100%; + margin: 4px; + background: #e0e0e0; + background: var(--q-color-chip-background-light); + color: #000; + color: var(--q-color-light-text); + font-size: 14px; + padding: 0.5em 0.9em; +} +.q-chip--dark { + background: #323232; + background: var(--q-color-chip-background-dark); + color: #fff; + color: var(--q-color-dark-text); +} +.q-chip--colored .q-chip__icon, +.q-chip--dark .q-chip__icon { + color: inherit; +} +.q-chip--outline { + background: transparent !important; + border: 1px solid currentColor; +} +.q-chip--outline .q-avatar { + height: calc(1em - 2px); + width: calc(1em - 2px); +} +.q-chip .q-avatar { + font-size: 2em; + margin-left: -0.45em; + margin-right: 0.2em; + border-radius: 16px; +} +.q-chip .q-avatar ~ .q-avatar, +.q-chip .q-avatar--right { + margin-left: 0.2em; + margin-right: -0.45em; +} +.q-chip--selected .q-avatar:first-child:not(.q-avatar--right) { + display: none; +} +.q-chip__icon { + color: rgba(0,0,0,0.54); + font-size: 1.5em; + margin: -0.2em; +} +.q-chip__icon--left { + margin-right: 0.2em; +} +.q-chip__icon--right { + margin-left: 0.2em; +} +.q-chip__icon--remove { + margin-left: 0.1em; + margin-right: -0.5em; + opacity: 0.6; + outline: 0; +} +.q-chip__icon--remove:hover, +.q-chip__icon--remove:focus { + opacity: 1; +} +.q-chip__content { + white-space: nowrap; +} +.q-chip--dense { + border-radius: 12px; + padding: 0 0.4em; + height: 1.5em; +} +.q-chip--dense .q-avatar { + font-size: 1.5em; + margin-left: -0.27em; + margin-right: 0.1em; + border-radius: 12px; +} +.q-chip--dense .q-avatar ~ .q-avatar, +.q-chip--dense .q-avatar--right { + margin-left: 0.1em; + margin-right: -0.268em; +} +.q-chip--dense .q-chip__icon { + font-size: 1.25em; +} +.q-chip--dense .q-chip__icon--left { + margin-right: 0.195em; +} +.q-chip--dense .q-chip__icon--remove { + margin-right: -0.25em; +} +.q-chip--square { + border-radius: 4px; +} +.q-chip--square .q-avatar { + border-radius: 4px 0 0 4px; +} +.q-chip--square .q-avatar ~ .q-avatar, +.q-chip--square .q-avatar--right { + border-radius: 0 4px 4px 0; +} +body.desktop .q-chip--clickable:focus { + box-shadow: 0 1px 3px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12); +} +@media (prefers-color-scheme: dark) { + .q-chip--dark-auto { + background: #323232; + background: var(--q-color-chip-background-dark); + color: #fff; + color: var(--q-color-dark-text); + } + .q-chip--dark-auto .q-chip__icon { + color: inherit; + } +} +.q-circular-progress { + display: inline-block; + position: relative; + vertical-align: middle; + width: 1em; + height: 1em; + line-height: 1; +} +.q-circular-progress.q-focusable { + border-radius: 50%; +} +.q-circular-progress__svg { + width: 100%; + height: 100%; +} +.q-circular-progress__text { + font-size: 0.25em; +} +.q-circular-progress--indeterminate .q-circular-progress__svg { + transform-origin: 50% 50%; + -webkit-animation: q-spin 2s linear infinite /* rtl:ignore */; + animation: q-spin 2s linear infinite /* rtl:ignore */; +} +.q-circular-progress--indeterminate .q-circular-progress__circle { + stroke-dasharray: 1 400; + stroke-dashoffset: 0; + -webkit-animation: q-circular-progress-circle 1.5s ease-in-out infinite /* rtl:ignore */; + animation: q-circular-progress-circle 1.5s ease-in-out infinite /* rtl:ignore */; +} +.q-color-picker { + overflow: hidden; + max-width: 350px; + vertical-align: top; + min-width: 180px; + border-radius: 4px; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +.q-color-picker .q-tab { + padding: 0 !important; +} +.q-color-picker--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-color-picker__header-tabs { + height: 32px; +} +.q-color-picker__header-banner { + height: 36px; +} +.q-color-picker__header input { + line-height: 24px; + border: 0; +} +.q-color-picker__header .q-tab { + min-height: 32px !important; + height: 32px !important; +} +.q-color-picker__header .q-tab--inactive { + background: linear-gradient(to top, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.15) 25%, rgba(0,0,0,0.1)); +} +.q-color-picker__error-icon { + bottom: 2px; + right: 2px; + font-size: 24px; + opacity: 0; + transition: opacity 0.3s ease-in; +} +.q-color-picker__header-content { + position: relative; + background: #fff; + background: var(--q-color-light-page); +} +.q-color-picker__header-content--light { + color: #000; + color: var(--q-color-light-text); +} +.q-color-picker__header-content--dark { + color: #fff; + color: var(--q-color-dark-text); +} +.q-color-picker__header-content--dark .q-tab--inactive:before { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: rgba(255,255,255,0.2); +} +.q-color-picker__header-banner { + height: 36px; +} +.q-color-picker__header-bg { + background: #fff; + background: var(--q-color-light-page); + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==") !important; +} +.q-color-picker__footer { + height: 36px; +} +.q-color-picker__footer .q-tab { + min-height: 36px !important; + height: 36px !important; +} +.q-color-picker__footer .q-tab--inactive { + background: linear-gradient(to bottom, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.15) 25%, rgba(0,0,0,0.1)); +} +.q-color-picker__spectrum { + width: 100%; + height: 100%; +} +.q-color-picker__spectrum-tab { + padding: 0 !important; +} +.q-color-picker__spectrum-white { + background: linear-gradient(to right, #fff, rgba(255,255,255,0)); +} +.q-color-picker__spectrum-black { + background: linear-gradient(to top, #000, rgba(0,0,0,0)); +} +.q-color-picker__spectrum-circle { + width: 10px; + height: 10px; + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,0.3), 0 0 1px 2px rgba(0,0,0,0.4); + border-radius: 50%; + transform: translate(-5px, -5px); +} +.q-color-picker__hue .q-slider__track { + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important; + opacity: 1; +} +.q-color-picker__alpha .q-slider__track-container { + padding-top: 0; +} +.q-color-picker__alpha .q-slider__track:before { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + border-radius: inherit; + background: linear-gradient(90deg, rgba(255,255,255,0), #757575); +} +.q-color-picker__sliders { + padding: 0 16px; +} +.q-color-picker__sliders .q-slider__thumb { + color: #424242; +} +.q-color-picker__sliders .q-slider__thumb path { + stroke-width: 2px; + fill: transparent; +} +.q-color-picker__sliders .q-slider--active path { + stroke-width: 3px; +} +.q-color-picker__tune-tab .q-slider { + margin-left: 18px; + margin-right: 18px; +} +.q-color-picker__tune-tab input { + font-size: 11px; + border: 1px solid #e0e0e0; + border-radius: 4px; + width: 3.5em; +} +.q-color-picker__palette-tab { + padding: 0 !important; +} +.q-color-picker__palette-rows--editable .q-color-picker__cube { + cursor: pointer; +} +.q-color-picker__cube { + padding-bottom: 10%; + width: 10% !important; +} +.q-color-picker input { + color: inherit; + background: transparent; + outline: 0; + text-align: center; +} +.q-color-picker .q-tabs { + overflow: hidden; +} +.q-color-picker .q-tab--active { + box-shadow: 0 0 14px 3px rgba(0,0,0,0.2); +} +.q-color-picker .q-tab--active .q-focus-helper { + display: none; +} +.q-color-picker .q-tab__indicator { + display: none; +} +.q-color-picker .q-tab-panels { + background: inherit; +} +.q-color-picker--dark .q-color-picker__tune-tab input { + border: 1px solid rgba(255,255,255,0.3); +} +.q-color-picker--dark .q-slider { + color: #fafafa; +} +@media (prefers-color-scheme: dark) { + .q-color-picker--dark-auto .q-color-picker__tune-tab input { + border: 1px solid rgba(255,255,255,0.3); + } + .q-color-picker--dark-auto .q-slider { + color: #fafafa; + } +} +.q-date { + display: inline-flex; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; + background: #fff; + background: var(--q-color-light-page); + width: 290px; + min-width: 290px; + max-width: 100%; +} +.q-date--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-date__header { + border-top-left-radius: inherit; + color: #fff; + color: var(--q-color-dark-text); + background-color: #1976d2; + background-color: var(--q-color-primary); + padding: 16px; +} +.q-date__actions { + padding: 0 16px 16px; +} +.q-date__content .q-btn { + font-weight: normal; +} +.q-date__header-link { + opacity: 0.64; + outline: 0; + transition: opacity 0.3s ease-out; +} +.q-date__header-link--active, +.q-date__header-link:hover, +.q-date__header-link:focus { + opacity: 1; +} +.q-date__header-subtitle { + font-size: 14px; + line-height: 1.75; + letter-spacing: 0.00938em; +} +.q-date__header-title-label { + font-size: 24px; + line-height: 1.2; + letter-spacing: 0.00735em; +} +.q-date__view { + height: 100%; + width: 100%; + min-height: 290px; + padding: 16px; +} +.q-date__navigation { + height: 12.5%; +} +.q-date__navigation > div:first-child { + width: 8%; + min-width: 24px; + justify-content: flex-end; +} +.q-date__navigation > div:last-child { + width: 8%; + min-width: 24px; + justify-content: flex-start; +} +.q-date__calendar-weekdays { + height: 12.5%; +} +.q-date__calendar-weekdays > div { + opacity: 0.38; + font-size: 12px; +} +.q-date__calendar-item { + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; + width: 14.285% !important; + height: 12.5% !important; + position: relative; + padding: 1px; +} +.q-date__calendar-item:after { + content: ''; + position: absolute; + pointer-events: none; + top: 1px; + right: 0; + bottom: 1px; + left: 0; + border-style: dashed; + border-color: transparent; + border-width: 1px; +} +.q-date__calendar-item > div, +.q-date__calendar-item button { + width: 30px; + height: 30px; + border-radius: 50%; +} +.q-date__calendar-item > div { + line-height: 30px; + text-align: center; +} +.q-date__calendar-item > button { + line-height: 22px; +} +.q-date__calendar-item--out { + opacity: 0.18; +} +.q-date__calendar-item--fill { + visibility: hidden; + min-height: 32px; +} +.q-date__calendar-item--fill.q-date__range:before, +.q-date__calendar-item--fill.q-date__range-from:before, +.q-date__calendar-item--fill.q-date__range-to:before { + opacity: 0.05; +} +.q-date__range:before, +.q-date__range-from:before, +.q-date__range-to:before { + content: ''; + background-color: currentColor; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + right: 0; + opacity: 0.3; + pointer-events: none; +} +.q-date__range:nth-child(7n-6):before { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.q-date__range:nth-child(7n):before { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.q-date__range-from:before { + left: calc(50% - 15px); + border-top-left-radius: 28px; + border-bottom-left-radius: 28px; +} +.q-date__range-to:before { + right: calc(50% - 15px); + border-top-right-radius: 28px; + border-bottom-right-radius: 28px; +} +.q-date__edit-range:after { + border-color: currentColor transparent; +} +.q-date__edit-range:nth-child(7n-6):after { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.q-date__edit-range:nth-child(7n):after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.q-date__edit-range-from:after, +.q-date__edit-range-from-to:after { + left: 4px; + border-left-color: currentColor; + border-top-color: currentColor; + border-bottom-color: currentColor; + border-top-left-radius: 28px; + border-bottom-left-radius: 28px; +} +.q-date__edit-range-to:after, +.q-date__edit-range-from-to:after { + right: 4px; + border-right-color: currentColor; + border-top-color: currentColor; + border-bottom-color: currentColor; + border-top-right-radius: 28px; + border-bottom-right-radius: 28px; +} +.q-date__calendar-days-container { + height: 75%; + min-height: 192px; +} +.q-date__calendar-days > div { + height: 16.66% !important; +} +.q-date__event { + position: absolute; + bottom: 2px; + left: 50%; + height: 5px; + width: 8px; + border-radius: 5px; + background-color: #26a69a; + background-color: var(--q-color-secondary); + transform: translate3d(-50%, 0, 0); +} +.q-date__today { + box-shadow: 0 0 1px 0 currentColor; +} +.q-date__years-content { + padding: 0 8px; +} +.q-date__years-item, +.q-date__months-item { + flex: 0 0 33.3333%; +} +.q-date.disabled .q-date__header, +.q-date--readonly .q-date__header, +.q-date.disabled .q-date__content, +.q-date--readonly .q-date__content { + pointer-events: none; +} +.q-date--readonly .q-date__navigation { + display: none; +} +.q-date--portrait { + flex-direction: column; +} +.q-date--portrait-standard .q-date__content { + height: calc(100% - 86px); +} +.q-date--portrait-standard .q-date__header { + border-top-right-radius: inherit; + height: 86px; +} +.q-date--portrait-standard .q-date__header-title { + align-items: center; + height: 30px; +} +.q-date--portrait-minimal .q-date__content { + height: 100%; +} +.q-date--landscape { + flex-direction: row; + align-items: stretch; + min-width: 420px; +} +.q-date--landscape > div { + display: flex; + flex-direction: column; +} +.q-date--landscape .q-date__content { + height: 100%; +} +.q-date--landscape-standard { + min-width: 420px; +} +.q-date--landscape-standard .q-date__header { + border-bottom-left-radius: inherit; + min-width: 110px; + width: 110px; +} +.q-date--landscape-standard .q-date__header-title { + flex-direction: column; +} +.q-date--landscape-standard .q-date__header-today { + margin-top: 12px; + margin-left: -8px; +} +.q-date--landscape-minimal { + width: 310px; +} +.q-date--dark { + border-color: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + .q-date--dark-auto { + border-color: rgba(255,255,255,0.28); + } +} +.q-dialog { + contain: layout size; + contain: layout size style; + width: 100vw; +} +.q-dialog__title { + font-size: 1.25rem; + font-weight: 500; + line-height: 2rem; + letter-spacing: 0.0125em; +} +.q-dialog__progress { + font-size: 4rem; +} +.q-dialog__inner { + outline: 0; +} +.q-dialog__inner > div { + pointer-events: all; + overflow: auto; + -webkit-overflow-scrolling: touch; + will-change: scroll-position; + border-radius: 4px; + box-shadow: 0 2px 4px -1px rgba(0,0,0,0.2), 0 4px 5px rgba(0,0,0,0.14), 0 1px 10px rgba(0,0,0,0.12); +} +.q-dialog__inner--square > div { + border-radius: 0 !important; +} +.q-dialog__inner > .q-card > .q-card__actions .q-btn--rectangle .q-btn__wrapper { + min-width: 64px; +} +.q-dialog__inner--minimized { + padding: 24px; +} +.q-dialog__inner--minimized > div { + max-height: calc(100vh - 48px); +} +.q-dialog__inner--maximized > div { + height: 100%; + width: 100%; + max-height: 100vh; + max-width: 100vw; + border-radius: 0 !important; +} +.q-dialog__inner--top, +.q-dialog__inner--bottom { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +.q-dialog__inner--right, +.q-dialog__inner--left { + padding-right: 0 !important; + padding-left: 0 !important; +} +.q-dialog__inner--left:not([data-q-portal-animating]) > div, +.q-dialog__inner--top:not([data-q-portal-animating]) > div { + border-top-left-radius: 0; +} +.q-dialog__inner--right:not([data-q-portal-animating]) > div, +.q-dialog__inner--top:not([data-q-portal-animating]) > div { + border-top-right-radius: 0; +} +.q-dialog__inner--left:not([data-q-portal-animating]) > div, +.q-dialog__inner--bottom:not([data-q-portal-animating]) > div { + border-bottom-left-radius: 0; +} +.q-dialog__inner--right:not([data-q-portal-animating]) > div, +.q-dialog__inner--bottom:not([data-q-portal-animating]) > div { + border-bottom-right-radius: 0; +} +.q-dialog__inner--fullwidth > div { + width: 100% !important; + max-width: 100% !important; +} +.q-dialog__inner--fullheight > div { + height: 100% !important; + max-height: 100% !important; +} +.q-dialog__backdrop { + z-index: -1; + pointer-events: all; + outline: 0; + opacity: 0.4; + background: #000; + background: var(--q-color-backdrop-background); +} +html[dir=rtl] .q-dialog { + right: auto; +} +body.mobile .q-dialog { + contain: size; + contain: size style; +} +body.desktop .q-dialog--modal { + height: 100vh; +} +body.platform-ios .q-dialog__inner--minimized > div { + max-height: calc(100vh - 164px); +} +body.platform-android .q-dialog__inner--minimized > div { + max-height: calc(100% - 48px); +} +body.q-ios-padding .q-dialog__inner { + padding-top: 20px !important; + padding-top: env(safe-area-inset-top) !important; + padding-bottom: env(safe-area-inset-bottom) !important; +} +body.q-ios-padding .q-dialog__inner > div { + max-height: "calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important"; +} +@media (max-width: 599.98px) { + .q-dialog__inner--top, + .q-dialog__inner--bottom { + padding-left: 0; + padding-right: 0; + } + .q-dialog__inner--top > div, + .q-dialog__inner--bottom > div { + width: 100% !important; + } +} +@media (min-width: 600px) { + .q-dialog__inner--minimized > div { + max-width: 560px; + } +} +.q-bottom-sheet { + padding-bottom: 8px; +} +.q-bottom-sheet__avatar { + border-radius: 50%; +} +.q-bottom-sheet--list { + width: 400px; +} +.q-bottom-sheet--list .q-icon, +.q-bottom-sheet--list img { + font-size: 24px; + width: 24px; + height: 24px; +} +.q-bottom-sheet--grid { + width: 700px; +} +.q-bottom-sheet--grid .q-bottom-sheet__item { + padding: 8px; + text-align: center; + min-width: 100px; +} +.q-bottom-sheet--grid .q-icon, +.q-bottom-sheet--grid img, +.q-bottom-sheet--grid .q-bottom-sheet__empty-icon { + font-size: 48px; + width: 48px; + height: 48px; + margin-bottom: 8px; +} +.q-bottom-sheet--grid .q-separator { + margin: 12px 0; +} +.q-bottom-sheet__item { + flex: 0 0 33.3333%; +} +@media (min-width: 600px) { + .q-bottom-sheet__item { + flex: 0 0 25%; + } +} +.q-dialog-plugin { + width: 400px; +} +.q-dialog-plugin__form { + max-height: 50vh; +} +.q-dialog-plugin .q-card__section + .q-card__section { + padding-top: 0; +} +.q-dialog-plugin--progress { + text-align: center; +} +.q-editor { + border: 1px solid rgba(0,0,0,0.12); + border-radius: 4px; +} +.q-editor.disabled { + border-style: dashed; +} +.q-editor.fullscreen { + max-height: 100%; +} +.q-editor > div:first-child, +.q-editor__toolbars-container, +.q-editor__toolbars-container > div:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.q-editor__toolbars-container { + max-width: 100%; +} +.q-editor__content { + outline: 0; + padding: 10px; + min-height: 10em; + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; + overflow: auto; + max-width: 100%; +} +.q-editor__content pre { + white-space: pre-wrap; +} +.q-editor__content hr { + border: 0; + outline: 0; + margin: 1px; + height: 1px; + background: rgba(0,0,0,0.12); +} +.q-editor__content:empty:not(:focus):before { + content: attr(placeholder); + opacity: 0.7; +} +.q-editor__toolbar { + border-bottom: 1px solid rgba(0,0,0,0.12); + min-height: 32px; +} +.q-editor .q-btn { + margin: 4px; +} +.q-editor__toolbar-group { + position: relative; + margin: 0 4px; +} +.q-editor__toolbar-group + .q-editor__toolbar-group:before { + content: ''; + position: absolute; + left: -4px; + top: 4px; + bottom: 4px; + width: 1px; + background: rgba(0,0,0,0.12); +} +.q-editor__link-input { + color: inherit; + text-decoration: none; + text-transform: none; + border: none; + border-radius: 0; + background: none; + outline: 0; +} +.q-editor--flat, +.q-editor--flat .q-editor__toolbar { + border: 0; +} +.q-editor--dense .q-editor__toolbar-group { + display: flex; + align-items: center; + flex-wrap: nowrap; +} +.q-editor--dark { + border-color: rgba(255,255,255,0.28); +} +.q-editor--dark .q-editor__content hr { + background: rgba(255,255,255,0.28); +} +.q-editor--dark .q-editor__toolbar { + border-color: rgba(255,255,255,0.28); +} +.q-editor--dark .q-editor__toolbar-group + .q-editor__toolbar-group:before { + background: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + .q-editor--dark-auto { + border-color: rgba(255,255,255,0.28); + } + .q-editor--dark-auto .q-editor__content hr { + background: rgba(255,255,255,0.28); + } + .q-editor--dark-auto .q-editor__toolbar { + border-color: rgba(255,255,255,0.28); + } + .q-editor--dark-auto .q-editor__toolbar-group + .q-editor__toolbar-group:before { + background: rgba(255,255,255,0.28); + } +} +.q-expansion-item__border { + opacity: 0; +} +.q-expansion-item__toggle-icon { + position: relative; + transition: transform 0.3s; +} +.q-expansion-item__toggle-icon--rotated { + transform: rotate(180deg); +} +.q-expansion-item__toggle-focus { + width: 1em !important; + height: 1em !important; + position: relative !important; +} +.q-expansion-item__toggle-focus + .q-expansion-item__toggle-icon { + margin-top: -1em; +} +.q-expansion-item--standard.q-expansion-item--expanded > div > .q-expansion-item__border { + opacity: 1; +} +.q-expansion-item--popup { + transition: padding 0.5s; +} +.q-expansion-item--popup > .q-expansion-item__container { + border: 1px solid rgba(0,0,0,0.12); +} +.q-expansion-item--popup > .q-expansion-item__container > .q-separator { + display: none; +} +.q-expansion-item--popup.q-expansion-item--collapsed { + padding: 0 15px; +} +.q-expansion-item--popup.q-expansion-item--expanded { + padding: 15px 0; +} +.q-expansion-item--popup.q-expansion-item--expanded + .q-expansion-item--popup.q-expansion-item--expanded { + padding-top: 0; +} +.q-expansion-item--popup.q-expansion-item--collapsed:not(:first-child) > .q-expansion-item__container { + border-top-width: 0; +} +.q-expansion-item--popup.q-expansion-item--expanded + .q-expansion-item--popup.q-expansion-item--collapsed > .q-expansion-item__container { + border-top-width: 1px; +} +.q-expansion-item__content > .q-card { + box-shadow: none; + border-radius: 0; +} +.q-expansion-item:first-child > div > .q-expansion-item__border--top { + opacity: 0; +} +.q-expansion-item:last-child > div > .q-expansion-item__border--bottom { + opacity: 0; +} +.q-expansion-item--expanded + .q-expansion-item--expanded > div > .q-expansion-item__border--top { + opacity: 0; +} +.q-expansion-item--expanded .q-textarea--autogrow textarea { + -webkit-animation: q-expansion-done 0s; + animation: q-expansion-done 0s; +} +.z-fab { + z-index: 990; +} +.q-fab { + position: relative; + vertical-align: middle; +} +.q-fab > .q-btn { + width: 100%; +} +.q-fab--form-rounded { + border-radius: 28px; +} +.q-fab--form-square { + border-radius: 4px; +} +.q-fab__icon, +.q-fab__active-icon { + transition: opacity 0.4s, transform 0.4s; +} +.q-fab__icon { + opacity: 1; + transform: rotate(0deg); +} +.q-fab__active-icon { + opacity: 0; + transform: rotate(-180deg); +} +.q-fab__label--external { + position: absolute; + padding: 0 8px; + transition: opacity 0.18s cubic-bezier(0.65, 0.815, 0.735, 0.395); +} +.q-fab__label--external-hidden { + opacity: 0; + pointer-events: none; +} +.q-fab__label--external-left { + top: 50%; + left: -12px; + transform: translate(-100%, -50%); +} +.q-fab__label--external-right { + top: 50%; + right: -12px; + transform: translate(100%, -50%); +} +.q-fab__label--external-bottom { + bottom: -12px; + left: 50%; + transform: translate(-50%, 100%); +} +.q-fab__label--external-top { + top: -12px; + left: 50%; + transform: translate(-50%, -100%); +} +.q-fab__label--internal { + padding: 0; + transition: font-size 0.12s cubic-bezier(0.65, 0.815, 0.735, 0.395), max-height 0.12s cubic-bezier(0.65, 0.815, 0.735, 0.395), opacity 0.07s cubic-bezier(0.65, 0.815, 0.735, 0.395); + max-height: 30px; +} +.q-fab__label--internal-hidden { + font-size: 0; + opacity: 0; +} +.q-fab__label--internal-top { + padding-bottom: 0.12em; +} +.q-fab__label--internal-bottom { + padding-top: 0.12em; +} +.q-fab__label--internal-top.q-fab__label--internal-hidden, +.q-fab__label--internal-bottom.q-fab__label--internal-hidden { + max-height: 0; +} +.q-fab__label--internal-left { + padding-left: 0.285em; + padding-right: 0.571em; +} +.q-fab__label--internal-right { + padding-right: 0.285em; + padding-left: 0.571em; +} +.q-fab__icon-holder { + min-width: 24px; + min-height: 24px; + position: relative; +} +.q-fab__icon-holder--opened .q-fab__icon { + transform: rotate(180deg); + opacity: 0; +} +.q-fab__icon-holder--opened .q-fab__active-icon { + transform: rotate(0deg); + opacity: 1; +} +.q-fab__actions { + position: absolute; + opacity: 0; + transition: transform 0.18s ease-in, opacity 0.18s ease-in; + pointer-events: none; + align-items: center; + justify-content: center; + align-self: center; + padding: 3px; +} +.q-fab__actions .q-btn { + margin: 5px; +} +.q-fab__actions--right { + transform-origin: 0 50%; + transform: scale(0.4) translateX(-62px); + height: 56px; + left: 100%; + margin-left: 9px; +} +.q-fab__actions--left { + transform-origin: 100% 50%; + transform: scale(0.4) translateX(62px); + height: 56px; + right: 100%; + margin-right: 9px; + flex-direction: row-reverse; +} +.q-fab__actions--up { + transform-origin: 50% 100%; + transform: scale(0.4) translateY(62px); + width: 56px; + bottom: 100%; + margin-bottom: 9px; + flex-direction: column-reverse; +} +.q-fab__actions--down { + transform-origin: 50% 0; + transform: scale(0.4) translateY(-62px); + width: 56px; + top: 100%; + margin-top: 9px; + flex-direction: column; +} +.q-fab__actions--up, +.q-fab__actions--down { + left: 50%; + margin-left: -28px; +} +.q-fab__actions--opened { + opacity: 1; + transform: scale(1) translate(0, 0); + pointer-events: all; +} +.q-fab--align-left > .q-fab__actions--up, +.q-fab--align-left > .q-fab__actions--down { + align-items: flex-start; + left: 28px; +} +.q-fab--align-right > .q-fab__actions--up, +.q-fab--align-right > .q-fab__actions--down { + align-items: flex-end; + left: auto; + right: 0; +} +.q-field { + font-size: 14px; +} +.q-field ::-ms-clear, +.q-field ::-ms-reveal { + display: none; +} +.q-field--with-bottom { + padding-bottom: 20px; +} +.q-field__marginal { + height: 56px; + color: rgba(0,0,0,0.54); + font-size: 24px; +} +.q-field__marginal > * + * { + margin-left: 2px; +} +.q-field__marginal .q-avatar { + font-size: 32px; +} +.q-field__before, +.q-field__prepend { + padding-right: 12px; +} +.q-field__after, +.q-field__append { + padding-left: 12px; +} +.q-field__after:empty, +.q-field__append:empty { + display: none; +} +.q-field__append + .q-field__append { + padding-left: 2px; +} +.q-field__inner { + text-align: left; +} +.q-field__bottom { + font-size: 12px; + min-height: 20px; + line-height: 1; + color: rgba(0,0,0,0.54); + padding: 8px 12px 0; + backface-visibility: hidden; +} +.q-field__bottom--animated { + transform: translateY(100%); + position: absolute; + left: 0; + right: 0; + bottom: 0; +} +.q-field__messages { + line-height: 1; +} +.q-field__messages > div { + word-break: break-word; + word-wrap: break-word; + overflow-wrap: break-word; +} +.q-field__messages > div + div { + margin-top: 4px; +} +.q-field__counter { + padding-left: 8px; + line-height: 1; +} +.q-field--item-aligned { + padding: 8px 16px; +} +.q-field--item-aligned .q-field__before { + min-width: 56px; +} +.q-field__control-container { + height: inherit; +} +.q-field__control { + color: #1976d2; + color: var(--q-color-primary); + height: 56px; + max-width: 100%; + outline: none; +} +.q-field__control:before, +.q-field__control:after { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + pointer-events: none; +} +.q-field__control:before { + border-radius: inherit; +} +.q-field__shadow { + top: 8px; + opacity: 0; + overflow: hidden; + white-space: pre-wrap; + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field__shadow + .q-field__native::-moz-placeholder { + -moz-transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field__shadow + .q-field__native:-ms-input-placeholder { + -ms-transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field__shadow + .q-field__native::placeholder { + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field__shadow + .q-field__native:focus::-moz-placeholder { + opacity: 0; +} +.q-field__shadow + .q-field__native:focus:-ms-input-placeholder { + opacity: 0; +} +.q-field__shadow + .q-field__native:focus::placeholder { + opacity: 0; +} +.q-field__native, +.q-field__prefix, +.q-field__suffix, +.q-field__input { + font-weight: 400; + line-height: 28px; + letter-spacing: 0.00937em; + text-decoration: inherit; + text-transform: inherit; + border: none; + border-radius: 0; + background: none; + color: rgba(0,0,0,0.87); + outline: 0; + padding: 6px 0; +} +.q-field__native, +.q-field__input { + width: 100%; + min-width: 0; + outline: 0 !important; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +.q-field__native:-webkit-autofill, +.q-field__input:-webkit-autofill { + -webkit-animation-name: q-autofill; + -webkit-animation-fill-mode: both; +} +.q-field__native:-webkit-autofill + .q-field__label, +.q-field__input:-webkit-autofill + .q-field__label { + transform: translateY(-40%) scale(0.75); +} +.q-field__native[type="number"]:invalid + .q-field__label, +.q-field__input[type="number"]:invalid + .q-field__label { + transform: translateY(-40%) scale(0.75); +} +.q-field__native:invalid, +.q-field__input:invalid { + box-shadow: none; +} +.q-field__native[type="file"] { + line-height: 1em; +} +.q-field__input { + padding: 0; + height: 0; + min-height: 24px; + line-height: 24px; +} +.q-field__prefix, +.q-field__suffix { + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); + white-space: nowrap; +} +.q-field__prefix { + padding-right: 4px; +} +.q-field__suffix { + padding-left: 4px; +} +.q-field--readonly .q-placeholder, +.q-field--disabled .q-placeholder { + opacity: 1 !important; +} +.q-field--readonly.q-field--labeled .q-field__native, +.q-field--readonly.q-field--labeled .q-field__input { + cursor: default; +} +.q-field--readonly.q-field--float .q-field__native, +.q-field--readonly.q-field--float .q-field__input { + cursor: text; +} +.q-field--disabled .q-field__inner { + cursor: not-allowed; +} +.q-field--disabled .q-field__control { + pointer-events: none; +} +.q-field--disabled .q-field__control { + opacity: 0.6 !important; +} +.q-field--disabled .q-field__control div, +.q-field--disabled .q-field__control div * { + outline: 0 !important; +} +.q-field__label { + left: 0; + max-width: 100%; + top: 18px; + color: rgba(0,0,0,0.6); + font-size: 16px; + line-height: 20px; + font-weight: 400; + letter-spacing: 0.00937em; + text-decoration: inherit; + text-transform: inherit; + transform-origin: left top; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.324s cubic-bezier(0.4, 0, 0.2, 1); + backface-visibility: hidden; +} +.q-field__label-back { + position: absolute; + left: 0; + right: 0; + top: 7.5px; + height: 0; + z-index: -1; + transition: height 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--float .q-field__label-back { + height: 4.5px; +} +.q-field--float .q-field__label { + transform: translateY(-40%) scale(0.75); + max-width: 133%; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.396s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--highlighted .q-field__label { + color: currentColor; +} +.q-field--highlighted .q-field__shadow { + opacity: 0.5; +} +.q-field--filled .q-field__control { + padding: 0 12px; + background: rgba(0,0,0,0.05); + border-radius: 4px 4px 0 0; +} +.q-field--filled .q-field__control:before { + background: rgba(0,0,0,0.05); + border-bottom: 1px solid rgba(0,0,0,0.42); + opacity: 0; + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1), background 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--filled .q-field__control:hover:before { + opacity: 1; +} +.q-field--filled .q-field__control:after { + height: 2px; + top: auto; + transform-origin: center bottom; + transform: scale3d(0, 1, 1); + background: currentColor; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--filled.q-field--rounded .q-field__control { + border-radius: 28px 28px 0 0; +} +.q-field--filled.q-field--highlighted .q-field__control:before { + opacity: 1; + background: rgba(0,0,0,0.12); +} +.q-field--filled.q-field--highlighted .q-field__control:after { + transform: scale3d(1, 1, 1); +} +.q-field--filled.q-field--dark .q-field__control, +.q-field--filled.q-field--dark .q-field__control:before { + background: rgba(255,255,255,0.07); +} +.q-field--filled.q-field--dark.q-field--highlighted .q-field__control:before { + background: rgba(255,255,255,0.1); +} +.q-field--filled.q-field--readonly .q-field__control:before { + opacity: 1; + background: transparent; + border-bottom-style: dashed; +} +.q-field--outlined .q-field__control { + border-radius: 4px; + padding: 0 12px; +} +.q-field--outlined .q-field__control:before { + border: 1px solid rgba(0,0,0,0.24); + transition: border-color 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--outlined .q-field__control:hover:before { + border-color: #000; + border-color: var(--q-color-light-text); +} +.q-field--outlined .q-field__control:after { + height: inherit; + border-radius: inherit; + border: 2px solid transparent; + transition: border-color 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--outlined .q-field__native:-webkit-autofill, +.q-field--outlined .q-field__input:-webkit-autofill { + margin-top: 1px; + margin-bottom: 1px; +} +.q-field--outlined.q-field--rounded .q-field__control { + border-radius: 28px; +} +.q-field--outlined.q-field--highlighted .q-field__control:hover:before { + border-color: transparent; +} +.q-field--outlined.q-field--highlighted .q-field__control:after { + border-color: currentColor; + border-width: 2px; + transform: scale3d(1, 1, 1); +} +.q-field--outlined.q-field--readonly .q-field__control:before { + border-style: dashed; +} +.q-field--standard .q-field__control:before { + border-bottom: 1px solid rgba(0,0,0,0.24); + transition: border-color 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--standard .q-field__control:hover:before { + border-color: #000; + border-color: var(--q-color-light-text); +} +.q-field--standard .q-field__control:after { + height: 2px; + top: auto; + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; + transform-origin: center bottom; + transform: scale3d(0, 1, 1); + background: currentColor; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--standard.q-field--highlighted .q-field__control:after { + transform: scale3d(1, 1, 1); +} +.q-field--standard.q-field--readonly .q-field__control:before { + border-bottom-style: dashed; +} +.q-field--dark .q-field__control:before { + border-color: rgba(255,255,255,0.6); +} +.q-field--dark .q-field__control:hover:before { + border-color: #fff; + border-color: var(--q-color-dark-text); +} +.q-field--dark .q-field__native, +.q-field--dark .q-field__prefix, +.q-field--dark .q-field__suffix, +.q-field--dark .q-field__input { + color: #fff; + color: var(--q-color-dark-text); +} +.q-field--dark:not(.q-field--highlighted) .q-field__label, +.q-field--dark .q-field__marginal, +.q-field--dark .q-field__bottom { + color: rgba(255,255,255,0.7); +} +.q-field--standout .q-field__control { + padding: 0 12px; + background: rgba(0,0,0,0.05); + border-radius: 4px; + transition: box-shadow 0.36s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--standout .q-field__control:before { + background: rgba(0,0,0,0.07); + opacity: 0; + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1), background 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--standout .q-field__control:hover:before { + opacity: 1; +} +.q-field--standout.q-field--rounded .q-field__control { + border-radius: 28px; +} +.q-field--standout.q-field--highlighted .q-field__control { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + background: #121212; + background: var(--q-color-dark-page); +} +.q-field--standout.q-field--highlighted .q-field__native, +.q-field--standout.q-field--highlighted .q-field__prefix, +.q-field--standout.q-field--highlighted .q-field__suffix, +.q-field--standout.q-field--highlighted .q-field__prepend, +.q-field--standout.q-field--highlighted .q-field__append, +.q-field--standout.q-field--highlighted .q-field__input { + color: #fff; + color: var(--q-color-dark-text); +} +.q-field--standout.q-field--readonly .q-field__control:before { + opacity: 1; + background: transparent; + border: 1px dashed rgba(0,0,0,0.24); +} +.q-field--standout.q-field--dark .q-field__control { + background: rgba(255,255,255,0.07); +} +.q-field--standout.q-field--dark .q-field__control:before { + background: rgba(255,255,255,0.07); +} +.q-field--standout.q-field--dark.q-field--highlighted .q-field__control { + background: #fff; + background: var(--q-color-light-page); +} +.q-field--standout.q-field--dark.q-field--highlighted .q-field__native, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__prefix, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__suffix, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__prepend, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__append, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__input { + color: #000; + color: var(--q-color-light-text); +} +.q-field--standout.q-field--dark.q-field--readonly .q-field__control:before { + border-color: rgba(255,255,255,0.24); +} +.q-field--labeled--std .q-field__native, +.q-field--labeled--std .q-field__prefix, +.q-field--labeled--std .q-field__suffix { + line-height: 24px; + padding-top: 24px; + padding-bottom: 8px; +} +.q-field--labeled .q-field__shadow { + top: 0; +} +.q-field--labeled:not(.q-field--float) .q-field__prefix, +.q-field--labeled:not(.q-field--float) .q-field__suffix { + opacity: 0; +} +.q-field--labeled:not(.q-field--float) .q-field__native::-moz-placeholder, +.q-field--labeled:not(.q-field--float) .q-field__input::-moz-placeholder { + color: transparent; +} +.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder, +.q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder { + color: transparent !important; +} +.q-field--labeled:not(.q-field--float) .q-field__native::-moz-placeholder, .q-field--labeled:not(.q-field--float) .q-field__input::-moz-placeholder { + color: transparent; +} +.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder, .q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder { + color: transparent; +} +.q-field--labeled:not(.q-field--float) .q-field__native::placeholder, +.q-field--labeled:not(.q-field--float) .q-field__input::placeholder { + color: transparent; +} +.q-field--labeled--std.q-field--dense .q-field__native, +.q-field--labeled--std.q-field--dense .q-field__prefix, +.q-field--labeled--std.q-field--dense .q-field__suffix { + padding-top: 14px; + padding-bottom: 2px; +} +.q-field--dense .q-field__shadow { + top: 0; +} +.q-field--dense .q-field__control, +.q-field--dense .q-field__marginal { + height: 40px; +} +.q-field--dense .q-field__bottom { + font-size: 11px; +} +.q-field--dense .q-field__label { + font-size: 14px; + top: 10px; +} +.q-field--dense .q-field__before, +.q-field--dense .q-field__prepend { + padding-right: 6px; +} +.q-field--dense .q-field__after, +.q-field--dense .q-field__append { + padding-left: 6px; +} +.q-field--dense .q-field__append + .q-field__append { + padding-left: 2px; +} +.q-field--dense .q-field__marginal .q-avatar { + font-size: 24px; +} +.q-field--dense.q-field--float .q-field__label { + transform: translateY(-30%) scale(0.75); +} +.q-field--dense .q-field__native:-webkit-autofill + .q-field__label, +.q-field--dense .q-field__input:-webkit-autofill + .q-field__label { + transform: translateY(-30%) scale(0.75); +} +.q-field--dense .q-field__native[type="number"]:invalid + .q-field__label, +.q-field--dense .q-field__input[type="number"]:invalid + .q-field__label { + transform: translateY(-30%) scale(0.75); +} +.q-field--outlined--md.q-field--float .q-field__label { + max-width: 133%; + transform: translateY(-120%) scale(0.75); + padding-left: 6px; + padding-right: 6px; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1), padding 0.36s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.396s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--outlined--md .q-field__label { + z-index: 1; + left: -4px; + padding-left: 4px; + padding-right: 4px; + border-radius: 4px; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1), padding 0.36s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.324s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field--outlined--md .q-field__native:-webkit-autofill + .q-field__label, +.q-field--outlined--md .q-field__input:-webkit-autofill + .q-field__label { + transform: translateY(-120%) scale(0.75); +} +.q-field--outlined--md .q-field__native[type="number"]:invalid + .q-field__label, +.q-field--outlined--md .q-field__input[type="number"]:invalid + .q-field__label { + transform: translateY(-120%) scale(0.75); +} +.q-field--outlined--md.q-field--dense.q-field--outlined--md.q-field--float .q-field__label { + transform: translateY(-85%) scale(0.75); +} +.q-field--outlined--md.q-field--dense .q-field__native:-webkit-autofill + .q-field__label, +.q-field--outlined--md.q-field--dense .q-field__input:-webkit-autofill + .q-field__label { + transform: translateY(-85%) scale(0.75); +} +.q-field--outlined--md.q-field--dense .q-field__native[type="number"]:invalid + .q-field__label, +.q-field--outlined--md.q-field--dense .q-field__input[type="number"]:invalid + .q-field__label { + transform: translateY(-85%) scale(0.75); +} +.q-field--borderless .q-field__bottom, +.q-field--standard .q-field__bottom, +.q-field--borderless.q-field--dense .q-field__control, +.q-field--standard.q-field--dense .q-field__control { + padding-left: 0; + padding-right: 0; +} +.q-field--error .q-field__label { + -webkit-animation: q-field-label 0.36s; + animation: q-field-label 0.36s; +} +.q-field--error .q-field__bottom { + color: #c10015; + color: var(--q-color-negative); +} +.q-field__focusable-action { + opacity: 0.6; + cursor: pointer; + outline: 0 !important; + border: 0; + color: inherit; + background: transparent; + padding: 0; +} +.q-field__focusable-action:hover, +.q-field__focusable-action:focus { + opacity: 1; +} +.q-field--auto-height .q-field__control { + height: auto; +} +.q-field--auto-height .q-field__control, +.q-field--auto-height .q-field__native { + min-height: 56px; +} +.q-field--auto-height .q-field__native { + align-items: center; +} +.q-field--auto-height .q-field__control-container { + padding-top: 0; +} +.q-field--auto-height .q-field__native, +.q-field--auto-height .q-field__prefix, +.q-field--auto-height .q-field__suffix { + line-height: 18px; +} +.q-field--auto-height.q-field--labeled--std .q-field__control-container { + padding-top: 24px; +} +.q-field--auto-height.q-field--labeled--std .q-field__shadow { + top: 24px; +} +.q-field--auto-height.q-field--labeled--std .q-field__native, +.q-field--auto-height.q-field--labeled--std .q-field__prefix, +.q-field--auto-height.q-field--labeled--std .q-field__suffix { + padding-top: 0; +} +.q-field--auto-height.q-field--labeled--std .q-field__native { + min-height: 24px; +} +.q-field--auto-height.q-field--dense .q-field__control, +.q-field--auto-height.q-field--dense .q-field__native { + min-height: 40px; +} +.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__control-container { + padding-top: 14px; +} +.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__shadow { + top: 14px; +} +.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__native { + min-height: 24px; +} +.q-field--square .q-field__control { + border-radius: 0 !important; +} +.q-transition--field-message-enter-active, +.q-transition--field-message-leave-active { + transition: transform 0.6s cubic-bezier(0.86, 0, 0.07, 1), opacity 0.6s cubic-bezier(0.86, 0, 0.07, 1); +} +.q-transition--field-message-enter, +.q-transition--field-message-leave-to { + opacity: 0; + transform: translateY(-10px); +} +.q-transition--field-message-leave, +.q-transition--field-message-leave-active { + position: absolute; +} +@media (prefers-color-scheme: dark) { + .q-field--dark-auto.q-field--filled .q-field__control, + .q-field--dark-auto.q-field--filled .q-field__control:before { + background: rgba(255,255,255,0.07); + } + .q-field--dark-auto.q-field--filled.q-field--highlighted .q-field__control:before { + background: rgba(255,255,255,0.1); + } + .q-field--dark-auto .q-field__control:before { + border-color: rgba(255,255,255,0.6); + } + .q-field--dark-auto .q-field__control:hover:before { + border-color: #fff; + border-color: var(--q-color-dark-text); + } + .q-field--dark-auto .q-field__native, + .q-field--dark-auto .q-field__prefix, + .q-field--dark-auto .q-field__suffix, + .q-field--dark-auto .q-field__input { + color: #fff; + color: var(--q-color-dark-text); + } + .q-field--dark-auto:not(.q-field--highlighted) .q-field__label, + .q-field--dark-auto .q-field__marginal, + .q-field--dark-auto .q-field__bottom { + color: rgba(255,255,255,0.7); + } + .q-field--dark-auto.q-field--standout .q-field__control { + background: rgba(255,255,255,0.07); + } + .q-field--dark-auto.q-field--standout .q-field__control:before { + background: rgba(255,255,255,0.07); + } + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__control { + background: #fff; + background: var(--q-color-light-page); + } + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__native, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__prefix, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__suffix, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__prepend, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__append, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__input { + color: #000; + color: var(--q-color-light-text); + } + .q-field--dark-auto.q-field--standout.q-field--readonly .q-field__control:before { + border-color: rgba(255,255,255,0.24); + } +} +.q-file .q-field__native { + word-break: break-all; +} +.q-file .q-field__input { + opacity: 0 !important; +} +.q-file .q-field__input::-webkit-file-upload-button { + cursor: pointer; +} +.q-file__filler { + visibility: hidden; + width: 100%; + border: none; + padding: 0; +} +.q-file__dnd { + outline: 1px dashed currentColor; + outline-offset: -4px; +} +.q-form { + position: relative; +} +.q-img { + position: relative; + width: 100%; + display: inline-block; + vertical-align: middle; +} +.q-img__loading .q-spinner { + font-size: 50px; +} +.q-img__image { + border-radius: inherit; + background-repeat: no-repeat; +} +.q-img__content { + overflow: hidden; + border-radius: inherit; +} +.q-img__content > div { + position: absolute; + padding: 16px; + color: #fff; + background: rgba(0,0,0,0.47); +} +.q-img--menu .q-img__image { + pointer-events: none; +} +.q-img--menu .q-img__image > img { + pointer-events: all; + opacity: 0; +} +.q-img--menu .q-img__content { + pointer-events: none; +} +.q-img--menu .q-img__content > div { + pointer-events: all; +} +.q-inner-loading { + background: rgba(255,255,255,0.6); +} +.q-inner-loading--dark { + background: rgba(0,0,0,0.4); +} +.q-inner-loading__label { + margin-top: 8px; +} +@media (prefers-color-scheme: dark) { + .q-inner-loading--dark-auto { + background: rgba(0,0,0,0.4); + } +} +.q-textarea .q-field__control { + min-height: 56px; + height: auto; +} +.q-textarea .q-field__control-container { + padding-top: 2px; + padding-bottom: 2px; +} +.q-textarea .q-field__shadow { + top: 2px; + bottom: 2px; +} +.q-textarea .q-field__native, +.q-textarea .q-field__prefix, +.q-textarea .q-field__suffix { + line-height: 18px; +} +.q-textarea .q-field__native { + resize: vertical; + padding-top: 17px; + min-height: 52px; +} +.q-textarea.q-field--labeled--std .q-field__control-container { + padding-top: 26px; +} +.q-textarea.q-field--labeled--std .q-field__shadow { + top: 26px; +} +.q-textarea.q-field--labeled--std .q-field__native, +.q-textarea.q-field--labeled--std .q-field__prefix, +.q-textarea.q-field--labeled--std .q-field__suffix { + padding-top: 0; +} +.q-textarea.q-field--labeled--std .q-field__native { + min-height: 26px; + padding-top: 1px; +} +.q-textarea--autogrow .q-field__native { + resize: none; +} +.q-textarea.q-field--dense .q-field__control, +.q-textarea.q-field--dense .q-field__native { + min-height: 36px; +} +.q-textarea.q-field--dense .q-field__native { + padding-top: 9px; +} +.q-textarea.q-field--dense.q-field--labeled--std .q-field__control-container { + padding-top: 14px; +} +.q-textarea.q-field--dense.q-field--labeled--std .q-field__shadow { + top: 14px; +} +.q-textarea.q-field--dense.q-field--labeled--std .q-field__native { + min-height: 24px; + padding-top: 3px; +} +.q-textarea.q-field--dense.q-field--labeled--std .q-field__prefix, +.q-textarea.q-field--dense.q-field--labeled--std .q-field__suffix { + padding-top: 2px; +} +body.mobile .q-textarea .q-field__native, +.q-textarea.disabled .q-field__native { + resize: none; +} +.q-intersection { + position: relative; +} +.q-item { + min-height: 48px; + padding: 8px 16px; + color: inherit; + transition: color 0.3s, background-color 0.3s; +} +.q-item__section--side { + color: #757575; + align-items: flex-start; + padding-right: 16px; + width: auto; + min-width: 0; + max-width: 100%; +} +.q-item__section--side > .q-icon { + font-size: 24px; +} +.q-item__section--side > .q-avatar { + font-size: 40px; +} +.q-item__section--avatar { + color: inherit; + min-width: 56px; +} +.q-item__section--thumbnail img { + width: 100px; + height: 56px; +} +.q-item__section--nowrap { + white-space: nowrap; +} +.q-item > .q-item__section--thumbnail:first-child, +.q-item > .q-focus-helper + .q-item__section--thumbnail { + margin-left: -16px; +} +.q-item > .q-item__section--thumbnail:last-of-type { + margin-right: -16px; +} +.q-item__label { + line-height: 1.2em !important; + max-width: 100%; +} +.q-item__label--overline { + color: rgba(0,0,0,0.7); +} +.q-item__label--caption { + color: rgba(0,0,0,0.54); +} +.q-item__label--header { + color: #757575; + padding: 16px; + font-size: 0.875rem; + line-height: 1.25rem; + letter-spacing: 0.01786em; +} +.q-separator--spaced + .q-item__label--header, +.q-list--padding .q-item__label--header { + padding-top: 8px; +} +.q-item__label + .q-item__label { + margin-top: 4px; +} +.q-item__section--main { + width: auto; + min-width: 0; + max-width: 100%; + flex: 10000 1 0%; +} +.q-item__section--main + .q-item__section--main { + margin-left: 8px; +} +.q-item__section--main ~ .q-item__section--side { + align-items: flex-end; + padding-right: 0; + padding-left: 16px; +} +.q-item__section--main.q-item__section--thumbnail { + margin-left: 0; + margin-right: -16px; +} +.q-list--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-list--separator > .q-item-type + .q-item-type, +.q-list--separator > .q-virtual-scroll__content > .q-item-type + .q-item-type { + border-top: 1px solid rgba(0,0,0,0.12); +} +.q-list--padding { + padding: 8px 0; +} +.q-list--dense > .q-item, +.q-item--dense { + min-height: 32px; + padding: 2px 16px; +} +.q-list--dark.q-list--separator > .q-item-type + .q-item-type, +.q-list--dark.q-list--separator > .q-virtual-scroll__content > .q-item-type + .q-item-type { + border-top-color: rgba(255,255,255,0.28); +} +.q-list--dark, +.q-item--dark { + color: #fff; + color: var(--q-color-dark-text); + border-color: rgba(255,255,255,0.28); +} +.q-list--dark .q-item__section--side:not(.q-item__section--avatar), +.q-item--dark .q-item__section--side:not(.q-item__section--avatar) { + color: rgba(255,255,255,0.7); +} +.q-list--dark .q-item__label--header, +.q-item--dark .q-item__label--header { + color: rgba(255,255,255,0.64); +} +.q-list--dark .q-item__label--overline, +.q-item--dark .q-item__label--overline, +.q-list--dark .q-item__label--caption, +.q-item--dark .q-item__label--caption { + color: rgba(255,255,255,0.8); +} +.q-item { + position: relative; +} +.q-item.q-router-link--active, +.q-item--active { + color: #1976d2; + color: var(--q-color-primary); +} +@media (prefers-color-scheme: dark) { + .q-list--dark-auto.q-list--separator > .q-item-type + .q-item-type, + .q-list--dark-auto.q-list--separator > .q-virtual-scroll__content > .q-item-type + .q-item-type { + border-top-color: rgba(255,255,255,0.28); + } + .q-list--dark-auto, + .q-item--dark-auto { + color: #fff; + color: var(--q-color-dark-text); + border-color: rgba(255,255,255,0.28); + } + .q-list--dark-auto .q-item__section--side:not(.q-item__section--avatar), + .q-item--dark-auto .q-item__section--side:not(.q-item__section--avatar) { + color: rgba(255,255,255,0.7); + } + .q-list--dark-auto .q-item__label--header, + .q-item--dark-auto .q-item__label--header { + color: rgba(255,255,255,0.64); + } + .q-list--dark-auto .q-item__label--overline, + .q-item--dark-auto .q-item__label--overline, + .q-list--dark-auto .q-item__label--caption, + .q-item--dark-auto .q-item__label--caption { + color: rgba(255,255,255,0.8); + } +} +.q-knob { + font-size: 48px; +} +.q-knob--editable { + cursor: pointer; + outline: 0; +} +.q-knob--editable:before { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + border-radius: 50%; + box-shadow: none; + transition: box-shadow 0.24s ease-in-out; +} +.q-knob--editable:focus:before { + box-shadow: 0 2px 4px -1px rgba(0,0,0,0.2), 0 4px 5px rgba(0,0,0,0.14), 0 1px 10px rgba(0,0,0,0.12); +} +.q-layout { + width: 100%; +} +.q-layout-container { + position: relative; + width: 100%; + height: 100%; +} +.q-layout-container .q-layout { + min-height: 100%; +} +.q-layout-container > div { + contain: layout size; + contain: layout size style; + transform: translateZ(0); +} +.q-layout-container > div > div { + min-height: 0; + max-height: 100%; +} +.q-layout__shadow { + width: 100%; +} +.q-layout__shadow:after { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-shadow: 0 0 10px 2px rgba(0,0,0,0.2), 0 0px 10px rgba(0,0,0,0.24); +} +.q-layout__section--marginal { + background-color: #1976d2; + background-color: var(--q-color-primary); + color: #fff; + color: var(--q-color-dark-text); +} +.q-header--hidden { + transform: translateY(-110%); +} +.q-header--bordered { + border-bottom: 1px solid rgba(0,0,0,0.12); +} +.q-header .q-layout__shadow { + bottom: -10px; +} +.q-header .q-layout__shadow:after { + bottom: 10px; +} +.q-footer--hidden { + transform: translateY(110%); +} +.q-footer--bordered { + border-top: 1px solid rgba(0,0,0,0.12); +} +.q-footer .q-layout__shadow { + top: -10px; +} +.q-footer .q-layout__shadow:after { + top: 10px; +} +.q-header, +.q-footer { + z-index: 2000; +} +.q-drawer { + position: absolute; + top: 0; + bottom: 0; + z-index: 1000; + contain: layout size; + contain: layout size style; +} +.q-drawer--on-top { + z-index: 3000; +} +.q-drawer--left { + left: 0; + transform: translateX(-100%); +} +.q-drawer--left.q-drawer--bordered { + border-right: 1px solid rgba(0,0,0,0.12); +} +.q-drawer--left .q-layout__shadow { + left: 10px; + right: -10px; +} +.q-drawer--left .q-layout__shadow:after { + right: 10px; +} +.q-drawer--right { + right: 0; + transform: translateX(100%); +} +.q-drawer--right.q-drawer--bordered { + border-left: 1px solid rgba(0,0,0,0.12); +} +.q-drawer--right .q-layout__shadow { + left: -10px; +} +.q-drawer--right .q-layout__shadow:after { + left: 10px; +} +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini { + padding: 0 !important; +} +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item, +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section { + text-align: center; + justify-content: center; + padding-left: 0; + padding-right: 0; + min-width: 0; +} +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__label, +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--main, +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--side ~ .q-item__section--side { + display: none; +} +.q-drawer--mini .q-mini-drawer-hide, +.q-drawer--mini .q-expansion-item__content { + display: none; +} +.q-drawer--mini-animate .q-drawer__content { + overflow-x: hidden; + white-space: nowrap; +} +.q-drawer--standard .q-mini-drawer-only { + display: none; +} +.q-drawer--mobile .q-mini-drawer-only, +.q-drawer--mobile .q-mini-drawer-hide { + display: none; +} +.q-drawer__backdrop { + z-index: 2999 !important; + will-change: opacity; + opacity: 0; + background: #000; + background: var(--q-color-backdrop-background); +} +.q-drawer__opener { + z-index: 2001; + height: 100%; + width: 15px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.q-layout, +.q-header, +.q-footer, +.q-page { + position: relative; +} +.q-page-sticky--shrink { + pointer-events: none; +} +.q-page-sticky--shrink > div { + display: inline-block; + pointer-events: auto; +} +body.q-ios-padding .q-layout--standard .q-header > .q-toolbar:nth-child(1), +body.q-ios-padding .q-layout--standard .q-header > .q-tabs:nth-child(1) .q-tabs-head, +body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content { + padding-top: 20px; + min-height: 70px; + padding-top: env(safe-area-inset-top); + min-height: calc(env(safe-area-inset-top) + 50px); +} +body.q-ios-padding .q-layout--standard .q-footer > .q-toolbar:last-child, +body.q-ios-padding .q-layout--standard .q-footer > .q-tabs:last-child .q-tabs-head, +body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content { + padding-bottom: env(safe-area-inset-bottom); + min-height: calc(env(safe-area-inset-bottom) + 50px); +} +.q-body--layout-animate .q-drawer__backdrop { + transition: opacity 0.12s !important; +} +.q-body--layout-animate .q-drawer { + transition: transform 0.12s, width 0.12s, top 0.12s, bottom 0.12s !important; +} +.q-body--layout-animate .q-layout__section--marginal { + transition: transform 0.12s, left 0.12s, right 0.12s !important; +} +.q-body--layout-animate .q-page-container { + transition: padding-top 0.12s, padding-right 0.12s, padding-bottom 0.12s, padding-left 0.12s !important; +} +.q-body--layout-animate .q-page-sticky { + transition: transform 0.12s, left 0.12s, right 0.12s, top 0.12s, bottom 0.12s !important; +} +body:not(.q-body--layout-animate) .q-layout--prevent-focus { + visibility: hidden; +} +.q-body--drawer-toggle { + overflow-x: hidden !important; +} +@media (max-width: 599.98px) { + .q-layout-padding { + padding: 8px; + } +} +@media (min-width: 600px) and (max-width: 1439.98px) { + .q-layout-padding { + padding: 16px; + } +} +@media (min-width: 1440px) { + .q-layout-padding { + padding: 24px; + } +} +body.body--dark .q-header, +body.body--dark .q-footer, +body.body--dark .q-drawer { + border-color: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + body.body--dark-auto .q-header, + body.body--dark-auto .q-footer, + body.body--dark-auto .q-drawer { + border-color: rgba(255,255,255,0.28); + } +} +body.platform-ios .q-layout--containerized { + position: unset !important; +} +.q-linear-progress { + position: relative; + width: 100%; + overflow: hidden; + font-size: 4px; + height: 1em; + color: #1976d2; + color: var(--q-color-primary); + transform: scale3d(1, 1, 1); +} +.q-linear-progress__model, +.q-linear-progress__track { + transform-origin: 0 0; +} +.q-linear-progress__model--with-transition, +.q-linear-progress__track--with-transition { + transition: transform 0.3s; +} +.q-linear-progress--reverse .q-linear-progress__model, +.q-linear-progress--reverse .q-linear-progress__track { + transform-origin: 0 100%; +} +.q-linear-progress__model--determinate { + background: currentColor; +} +.q-linear-progress__model--indeterminate, +.q-linear-progress__model--query { + transition: none; +} +.q-linear-progress__model--indeterminate:before, +.q-linear-progress__model--query:before, +.q-linear-progress__model--indeterminate:after, +.q-linear-progress__model--query:after { + background: currentColor; + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + transform-origin: 0 0; +} +.q-linear-progress__model--indeterminate:before, +.q-linear-progress__model--query:before { + -webkit-animation: q-linear-progress--indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; + animation: q-linear-progress--indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; +} +.q-linear-progress__model--indeterminate:after, +.q-linear-progress__model--query:after { + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1); + -webkit-animation: q-linear-progress--indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + animation: q-linear-progress--indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + -webkit-animation-delay: 1.15s; + animation-delay: 1.15s; +} +.q-linear-progress__track { + opacity: 0.4; +} +.q-linear-progress__track--light, +.q-linear-progress__track--dark-auto { + background: rgba(0,0,0,0.26); +} +.q-linear-progress__track--dark { + background: rgba(255,255,255,0.6); +} +.q-linear-progress__stripe { + transition: width 0.3s; + background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, rgba(255,255,255,0) 75%, rgba(255,255,255,0)) !important; + background-size: 40px 40px !important; +} +@media (prefers-color-scheme: dark) { + .q-linear-progress__track--dark-auto { + background: rgba(255,255,255,0.6); + } +} +.q-menu { + display: inline-block; + max-width: 95vw; + max-height: 65vh; + outline: 0; + border-radius: 4px; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + background: #fff; + opacity: 0; +} +.q-menu__container { + position: fixed; + z-index: 6000; + contain: layout; + contain: layout style; +} +.q-menu--square { + border-radius: 0; +} +.q-option-group--inline > div { + display: inline-block; +} +.q-pagination input { + text-align: center; + -moz-appearance: textfield; +} +.q-pagination input::-webkit-outer-spin-button, +.q-pagination input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} +.q-pagination__content { + --q-pagination-gutter-parent: -2px; + --q-pagination-gutter-child: 2px; + margin-top: var(--q-pagination-gutter-parent); + margin-left: var(--q-pagination-gutter-parent); +} +.q-pagination__content > .q-btn, +.q-pagination__content > .q-input, +.q-pagination__middle > .q-btn { + margin-top: var(--q-pagination-gutter-child); + margin-left: var(--q-pagination-gutter-child); +} +.q-parallax { + position: relative; + width: 100%; + overflow: hidden; + border-radius: inherit; +} +.q-parallax__media > img, +.q-parallax__media > video { + position: absolute; + left: 50% /* rtl:ignore */; + bottom: 0; + min-width: 100%; + min-height: 100%; + will-change: transform; + display: none; +} +.q-popup-edit { + padding: 8px 16px; +} +.q-popup-edit__buttons { + margin-top: 8px; +} +.q-popup-edit__buttons .q-btn + .q-btn { + margin-left: 8px; +} +.q-pull-to-refresh { + position: relative; +} +.q-pull-to-refresh__puller { + border-radius: 50%; + width: 40px; + height: 40px; + color: #1976d2; + color: var(--q-color-primary); + background: #fff; + background: var(--q-color-light-page); + box-shadow: 0 0 4px 0 rgba(0,0,0,0.3); +} +.q-pull-to-refresh__puller--animating { + transition: transform 0.3s, opacity 0.3s; +} +.q-radio { + vertical-align: middle; +} +.q-radio__native { + width: 1px; + height: 1px; +} +.q-radio__bg, +.q-radio__icon-container { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.q-radio__bg { + top: 25%; + left: 25%; + width: 50%; + height: 50%; + -webkit-print-color-adjust: exact; +} +.q-radio__bg path { + fill: currentColor; +} +.q-radio__icon { + color: currentColor; + font-size: 0.5em; +} +.q-radio__check { + transform-origin: 50% 50%; + transform: scale3d(0, 0, 1); + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1) 0ms; +} +.q-radio__inner { + font-size: 40px; + width: 1em; + min-width: 1em; + height: 1em; + outline: 0; + border-radius: 50%; + color: rgba(0,0,0,0.54); +} +.q-radio__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); +} +.q-radio__inner--truthy .q-radio__check { + transform: scale3d(1, 1, 1); +} +.q-radio.disabled { + opacity: 0.75 !important; +} +.q-radio--dark .q-radio__inner { + color: rgba(255,255,255,0.7); +} +.q-radio--dark .q-radio__inner:before { + opacity: 0.32 !important; +} +.q-radio--dark .q-radio__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); +} +.q-radio--dense .q-radio__inner { + width: 0.5em; + min-width: 0.5em; + height: 0.5em; +} +.q-radio--dense .q-radio__bg { + left: 0; + top: 0; + width: 100%; + height: 100%; +} +.q-radio--dense .q-radio__label { + padding-left: 0.5em; +} +.q-radio--dense.reverse .q-radio__label { + padding-left: 0; + padding-right: 0.5em; +} +body.desktop .q-radio:not(.disabled) .q-radio__inner:before { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + border-radius: 50%; + background: currentColor; + opacity: 0.12; + transform: scale3d(0, 0, 1); + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1) 0ms; +} +body.desktop .q-radio:not(.disabled):focus .q-radio__inner:before, +body.desktop .q-radio:not(.disabled):hover .q-radio__inner:before { + transform: scale3d(1, 1, 1); +} +body.desktop .q-radio--dense:not(.disabled):focus .q-radio__inner:before, +body.desktop .q-radio--dense:not(.disabled):hover .q-radio__inner:before { + transform: scale3d(1.5, 1.5, 1); +} +@media (prefers-color-scheme: dark) { + .q-radio--dark-auto .q-radio__inner { + color: rgba(255,255,255,0.7); + } + .q-radio--dark-auto .q-radio__inner:before { + opacity: 0.32 !important; + } + .q-radio--dark-auto .q-radio__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); + } +} +.q-rating { + color: #ffeb3b; + vertical-align: middle; +} +.q-rating__icon-container { + height: 1em; + outline: 0; +} +.q-rating__icon-container + .q-rating__icon-container { + margin-left: 2px; +} +.q-rating__icon { + color: currentColor; + text-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); + position: relative; + opacity: 0.4; + transition: transform 0.2s ease-in, opacity 0.2s ease-in; +} +.q-rating__icon--hovered { + transform: scale(1.3); +} +.q-rating__icon--active { + opacity: 1; +} +.q-rating__icon--exselected { + opacity: 0.7; +} +.q-rating--no-dimming .q-rating__icon { + opacity: 1; +} +.q-rating--editable .q-rating__icon-container { + cursor: pointer; +} +.q-responsive { + position: relative; + max-width: 100%; + max-height: 100%; +} +.q-responsive__filler { + width: inherit; + max-width: inherit; + height: inherit; + max-height: inherit; +} +.q-responsive__content { + border-radius: inherit; +} +.q-responsive__content > * { + width: 100% !important; + height: 100% !important; + max-height: 100% !important; + max-width: 100% !important; +} +.q-scrollarea { + position: relative; + contain: strict; +} +.q-scrollarea__bar, +.q-scrollarea__thumb { + opacity: 0.2; + transition: opacity 0.3s; + will-change: opacity; + cursor: -webkit-grab; + cursor: grab; +} +.q-scrollarea__bar--v, +.q-scrollarea__thumb--v { + right: 0; + width: 10px; +} +.q-scrollarea__bar--h, +.q-scrollarea__thumb--h { + bottom: 0; + height: 10px; +} +.q-scrollarea__bar--invisible, +.q-scrollarea__thumb--invisible { + opacity: 0 !important; + pointer-events: none; +} +.q-scrollarea__thumb { + background: #121212; + background: var(--q-color-dark-page); +} +.q-scrollarea__thumb:hover { + opacity: 0.3; +} +.q-scrollarea__thumb:active { + opacity: 0.5; +} +.q-scrollarea__content { + min-height: 100%; + min-width: 100%; +} +.q-scrollarea--dark .q-scrollarea__thumb { + background: #fff; + background: var(--q-color-dark-text); +} +@media (prefers-color-scheme: dark) { + .q-scrollarea--dark-auto .q-scrollarea__thumb { + background: #fff; + background: var(--q-color-dark-text); + } +} +.q-select--without-input .q-field__control { + cursor: pointer; +} +.q-select--with-input .q-field__control { + cursor: text; +} +.q-select--with-chips .q-field__input { + margin: 7px 0; +} +.q-select--with-chips.q-field--labeled .q-field__native { + margin-top: -6px; + padding-bottom: 0; +} +.q-select--with-chips.q-field--dense .q-chip--dense { + margin: 1px 4px; + height: 20px; +} +.q-select--with-chips.q-field--dense .q-field__input { + margin: 0; +} +.q-select--with-chips.q-field--dense.q-field--labeled .q-field__native { + margin-top: 0; +} +.q-select .q-field__input { + min-width: 50px !important; + cursor: text; +} +.q-select .q-field__input--padding { + padding-left: 4px; +} +.q-select__focus-target, +.q-select__autocomplete-input { + position: absolute; + outline: 0 !important; + width: 1px; + height: 1px; + padding: 0; + border: 0; + opacity: 0; +} +.q-select__dropdown-icon { + cursor: pointer; + transition: transform 0.28s; +} +.q-select__close-icon { + cursor: pointer; +} +.q-select__close-icon:not(:last-child) { + margin-right: 12px; +} +.q-select.q-field--readonly .q-field__control, +.q-select.q-field--readonly .q-select__dropdown-icon { + cursor: default; +} +.q-select__dialog { + width: 90vw !important; + max-width: 90vw !important; + max-height: calc(100vh - 70px) !important; + display: flex; + flex-direction: column; +} +.q-select__dialog > .scroll { + position: relative; + background: inherit; +} +body.platform-android.native-mobile .q-dialog__inner--top .q-select__dialog { + max-height: calc(100vh - 24px) !important; +} +body.platform-android:not(.native-mobile) .q-select__dialog { + max-height: calc(100vh - 108px) !important; +} +body.platform-android:not(.native-mobile) .q-dialog__inner--top .q-select__dialog { + max-height: calc(100vh - 62px) !important; +} +body.platform-ios.native-mobile .q-dialog__inner--top > div { + border-radius: 4px; +} +body.platform-ios.native-mobile .q-dialog__inner--top .q-select__dialog--focused { + max-height: 47vh !important; +} +body.platform-ios:not(.native-mobile) .q-select__dialog { + max-height: calc(100vh - 164px) !important; +} +body.platform-ios:not(.native-mobile) .q-dialog__inner--top .q-select__dialog--focused { + max-height: 48vh !important; +} +.q-separator { + border: 0; + background: rgba(0,0,0,0.12); + margin: 0; + transition: background 0.3s, opacity 0.3s; + flex-shrink: 0; +} +.q-separator--dark { + background: rgba(255,255,255,0.28); +} +.q-separator--horizontal { + display: block; + height: 1px; +} +.q-separator--horizontal-inset { + margin-left: 16px; + margin-right: 16px; +} +.q-separator--horizontal-item-inset { + margin-left: 72px; + margin-right: 0; +} +.q-separator--horizontal-item-thumbnail-inset { + margin-left: 116px; + margin-right: 0; +} +.q-separator--vertical { + width: 1px; + height: auto; + align-self: stretch; +} +.q-separator--vertical-inset { + margin-top: 8px; + margin-bottom: 8px; +} +@media (prefers-color-scheme: dark) { + .q-separator--dark-auto { + background: rgba(255,255,255,0.28); + } +} +.q-skeleton { + background: rgba(0,0,0,0.12); + border-radius: 4px; + box-sizing: border-box; +} +.q-skeleton--anim { + cursor: wait; +} +.q-skeleton:before { + content: '\00a0'; +} +.q-skeleton--type-text { + transform: scale(1, 0.5); +} +.q-skeleton--type-circle, +.q-skeleton--type-QAvatar { + height: 48px; + width: 48px; + border-radius: 50%; +} +.q-skeleton--type-QBtn { + width: 90px; + height: 36px; +} +.q-skeleton--type-QBadge { + width: 70px; + height: 16px; +} +.q-skeleton--type-QChip { + width: 90px; + height: 28px; + border-radius: 16px; +} +.q-skeleton--type-QToolbar { + height: 50px; +} +.q-skeleton--type-QCheckbox, +.q-skeleton--type-QRadio { + width: 40px; + height: 40px; + border-radius: 50%; +} +.q-skeleton--type-QToggle { + width: 56px; + height: 40px; + border-radius: 7px; +} +.q-skeleton--type-QSlider, +.q-skeleton--type-QRange { + height: 40px; +} +.q-skeleton--type-QInput { + height: 56px; +} +.q-skeleton--bordered { + border: 1px solid rgba(0,0,0,0.05); +} +.q-skeleton--square { + border-radius: 0; +} +.q-skeleton--anim-fade { + -webkit-animation: q-skeleton--fade 1.5s linear 0.5s infinite; + animation: q-skeleton--fade 1.5s linear 0.5s infinite; +} +.q-skeleton--anim-pulse { + -webkit-animation: q-skeleton--pulse 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse 1.5s ease-in-out 0.5s infinite; +} +.q-skeleton--anim-pulse-x { + -webkit-animation: q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite; +} +.q-skeleton--anim-pulse-y { + -webkit-animation: q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite; +} +.q-skeleton--anim-wave, +.q-skeleton--anim-blink, +.q-skeleton--anim-pop { + position: relative; + overflow: hidden; + z-index: 1; +} +.q-skeleton--anim-wave:after, +.q-skeleton--anim-blink:after, +.q-skeleton--anim-pop:after { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 0; +} +.q-skeleton--anim-blink:after { + background: rgba(255,255,255,0.7); + -webkit-animation: q-skeleton--fade 1.5s linear 0.5s infinite; + animation: q-skeleton--fade 1.5s linear 0.5s infinite; +} +.q-skeleton--anim-wave:after { + background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + -webkit-animation: q-skeleton--wave 1.5s linear 0.5s infinite; + animation: q-skeleton--wave 1.5s linear 0.5s infinite; +} +.q-skeleton--dark { + background: rgba(255,255,255,0.05); +} +.q-skeleton--dark.q-skeleton--bordered { + border: 1px solid rgba(255,255,255,0.25); +} +.q-skeleton--dark.q-skeleton--anim-wave:after { + background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.1), rgba(255,255,255,0)); +} +.q-skeleton--dark.q-skeleton--anim-blink:after { + background: rgba(255,255,255,0.2); +} +@media (prefers-color-scheme: dark) { + .q-skeleton--dark-auto { + background: rgba(255,255,255,0.05); + } + .q-skeleton--dark-auto.q-skeleton--bordered { + border: 1px solid rgba(255,255,255,0.25); + } + .q-skeleton--dark-auto.q-skeleton--anim-wave:after { + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent); + } + .q-skeleton--dark-auto.q-skeleton--anim-blink:after { + background: rgba(255,255,255,0.2); + } +} +.q-slide-item { + position: relative; +} +.q-slide-item__left, +.q-slide-item__right, +.q-slide-item__top, +.q-slide-item__bottom { + visibility: hidden; + font-size: 14px; + color: #fff; + color: var(--q-color-dark-text); +} +.q-slide-item__left .q-icon, +.q-slide-item__right .q-icon, +.q-slide-item__top .q-icon, +.q-slide-item__bottom .q-icon { + font-size: 1.714em; +} +.q-slide-item__left { + background: #4caf50; + padding: 8px 16px; +} +.q-slide-item__left > div { + transform-origin: left center; +} +.q-slide-item__right { + background: #ff9800; + padding: 8px 16px; +} +.q-slide-item__right > div { + transform-origin: right center; +} +.q-slide-item__top { + background: #2196f3; + padding: 16px 8px; +} +.q-slide-item__top > div { + transform-origin: top center; +} +.q-slide-item__bottom { + background: #9c27b0; + padding: 16px 8px; +} +.q-slide-item__bottom > div { + transform-origin: bottom center; +} +.q-slide-item__content { + background: inherit; + transition: transform 0.2s ease-in; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; +} +.q-slider { + position: relative; +} +.q-slider--h { + width: 100%; +} +.q-slider--v { + height: 200px; +} +.q-slider--editable .q-slider__track-container { + cursor: -webkit-grab; + cursor: grab; +} +.q-slider__track-container { + outline: 0; +} +.q-slider__track-container--h { + width: 100%; + padding: 12px 0; +} +.q-slider__track-container--h .q-slider__selection { + will-change: width, left; +} +.q-slider__track-container--v { + height: 100%; + padding: 0 12px; +} +.q-slider__track-container--v .q-slider__selection { + will-change: height, top; +} +.q-slider__track { + color: #1976d2; + color: var(--q-color-primary); + background: rgba(0,0,0,0.1); + border-radius: 4px; + width: inherit; + height: inherit; +} +.q-slider__inner { + background: rgba(0,0,0,0.1); + border-radius: inherit; + width: 100%; + height: 100%; +} +.q-slider__selection { + background: currentColor; + border-radius: inherit; + width: 100%; + height: 100%; +} +.q-slider__markers { + color: rgba(0,0,0,0.3); + border-radius: inherit; + width: 100%; + height: 100%; +} +.q-slider__markers:after { + content: ''; + position: absolute; + background: currentColor; +} +.q-slider__markers--h { + background-image: repeating-linear-gradient(to right, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)); +} +.q-slider__markers--h:after { + height: 100%; + width: 2px; + top: 0; + right: 0; +} +.q-slider__markers--v { + background-image: repeating-linear-gradient(to bottom, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)); +} +.q-slider__markers--v:after { + width: 100%; + height: 2px; + left: 0; + bottom: 0; +} +.q-slider__marker-labels-container { + position: relative; + width: 100%; + height: 100%; + min-height: 24px; + min-width: 24px; +} +.q-slider__marker-labels { + position: absolute; +} +.q-slider__marker-labels--h-standard { + top: 0; +} +.q-slider__marker-labels--h-switched { + bottom: 0; +} +.q-slider__marker-labels--h-ltr { + transform: translateX(-50%) /* rtl:ignore */; +} +.q-slider__marker-labels--h-rtl { + transform: translateX(50%) /* rtl:ignore */; +} +.q-slider__marker-labels--v-standard { + left: 4px; +} +.q-slider__marker-labels--v-switched { + right: 4px; +} +.q-slider__marker-labels--v-ltr { + transform: translateY(-50%) /* rtl:ignore */; +} +.q-slider__marker-labels--v-rtl { + transform: translateY(50%) /* rtl:ignore */; +} +.q-slider__thumb { + z-index: 1; + outline: 0; + color: #1976d2; + color: var(--q-color-primary); + transition: transform 0.18s ease-out, fill 0.18s ease-out, stroke 0.18s ease-out; +} +.q-slider__thumb.q-slider--focus { + opacity: 1 !important; +} +.q-slider__thumb--wrong-value { + opacity: 0; +} +.q-slider__thumb--h { + top: 50%; + will-change: left; +} +.q-slider__thumb--h-ltr { + transform: translate(-50%, -50%) /* rtl:ignore */; +} +.q-slider__thumb--h-rtl { + transform: translate(50%, -50%) /* rtl:ignore */; +} +.q-slider__thumb--v { + left: 50% /* rtl:ignore */; + will-change: top; +} +.q-slider__thumb--v-ltr { + transform: translate(-50%, -50%) /* rtl:ignore */; +} +.q-slider__thumb--v-rtl { + transform: translate(-50%, 50%) /* rtl:ignore */; +} +.q-slider__thumb-shape { + top: 0; + left: 0; + stroke-width: 3.5; + stroke: currentColor; + transition: transform 0.28s; +} +.q-slider__thumb-shape path { + stroke: currentColor; + fill: currentColor; +} +.q-slider__focus-ring { + border-radius: 50%; + opacity: 0; + transition: transform 266.67ms ease-out, opacity 266.67ms ease-out, background-color 266.67ms ease-out; + transition-delay: 0.14s; +} +.q-slider__pin { + opacity: 0; + white-space: nowrap; + transition: opacity 0.28s ease-out; + transition-delay: 0.14s; +} +.q-slider__pin:before { + content: ''; + width: 0; + height: 0; + position: absolute; +} +.q-slider__pin--h:before { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + left: 50%; + transform: translateX(-50%); +} +.q-slider__pin--h-standard { + bottom: 100%; +} +.q-slider__pin--h-standard:before { + bottom: 2px; + border-top: 6px solid currentColor; +} +.q-slider__pin--h-switched { + top: 100%; +} +.q-slider__pin--h-switched:before { + top: 2px; + border-bottom: 6px solid currentColor; +} +.q-slider__pin--v { + top: 0; +} +.q-slider__pin--v:before { + top: 50%; + transform: translateY(-50%); + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; +} +.q-slider__pin--v-standard { + left: 100%; +} +.q-slider__pin--v-standard:before { + left: 2px; + border-right: 6px solid currentColor; +} +.q-slider__pin--v-switched { + right: 100%; +} +.q-slider__pin--v-switched:before { + right: 2px; + border-left: 6px solid currentColor; +} +.q-slider__label { + z-index: 1; + white-space: nowrap; + position: absolute; +} +.q-slider__label--h { + left: 50%; + transform: translateX(-50%); +} +.q-slider__label--h-standard { + bottom: 7px; +} +.q-slider__label--h-switched { + top: 7px; +} +.q-slider__label--v { + top: 50%; + transform: translateY(-50%); +} +.q-slider__label--v-standard { + left: 7px; +} +.q-slider__label--v-switched { + right: 7px; +} +.q-slider__text-container { + min-height: 25px; + padding: 2px 8px; + border-radius: 4px; + background: currentColor; + position: relative; + text-align: center; +} +.q-slider__text { + color: #fff; + color: var(--q-color-dark-text); + font-size: 12px; +} +.q-slider--no-value .q-slider__thumb, +.q-slider--no-value .q-slider__inner, +.q-slider--no-value .q-slider__selection { + opacity: 0; +} +.q-slider--focus .q-slider__focus-ring, +body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__focus-ring { + background: currentColor; + transform: scale3d(1.55, 1.55, 1); + opacity: 0.25; +} +.q-slider--focus .q-slider__thumb, +.q-slider--no-value:focus-within .q-slider__thumb, +body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__thumb, +.q-slider--focus .q-slider__inner, +.q-slider--no-value:focus-within .q-slider__inner, +body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__inner, +.q-slider--focus .q-slider__selection, +.q-slider--no-value:focus-within .q-slider__selection, +body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__selection { + opacity: 1; +} +.q-slider--inactive .q-slider__thumb--h { + transition: left 0.28s, right 0.28s; +} +.q-slider--inactive .q-slider__thumb--v { + transition: top 0.28s, bottom 0.28s; +} +.q-slider--inactive .q-slider__selection { + transition: width 0.28s, left 0.28s, right 0.28s, height 0.28s, top 0.28s, bottom 0.28s; +} +.q-slider--inactive .q-slider__text-container { + transition: transform 0.28s; +} +.q-slider--active { + cursor: -webkit-grabbing; + cursor: grabbing; +} +.q-slider--active .q-slider__thumb-shape { + transform: scale(1.5); +} +.q-slider--active .q-slider__focus-ring, +.q-slider--active.q-slider--label .q-slider__thumb-shape { + transform: scale(0) !important; +} +body.desktop .q-slider.q-slider--enabled .q-slider__track-container:hover .q-slider__pin { + opacity: 1; +} +.q-slider--label.q-slider--active .q-slider__pin, +.q-slider--label .q-slider--focus .q-slider__pin, +.q-slider--label.q-slider--label-always .q-slider__pin { + opacity: 1; +} +.q-slider--dark .q-slider__track { + background: rgba(255,255,255,0.1); +} +.q-slider--dark .q-slider__inner { + background: rgba(255,255,255,0.1); +} +.q-slider--dark .q-slider__markers { + color: rgba(255,255,255,0.3); +} +.q-slider--dense .q-slider__track-container--h { + padding: 6px 0; +} +.q-slider--dense .q-slider__track-container--v { + padding: 0 6px; +} +@media (prefers-color-scheme: dark) { + .q-slider--dark-auto .q-slider__track { + background: rgba(255,255,255,0.1); + } + .q-slider--dark-auto .q-slider__inner { + background: rgba(255,255,255,0.1); + } + .q-slider--dark-auto .q-slider__markers { + color: rgba(255,255,255,0.3); + } +} +.q-space { + flex-grow: 1 !important; +} +.q-spinner { + vertical-align: middle; +} +.q-spinner-mat { + -webkit-animation: q-spin 2s linear infinite; + animation: q-spin 2s linear infinite; + transform-origin: center center; +} +.q-spinner-mat .path { + stroke-dasharray: 1, 200 /* rtl:ignore */; + stroke-dashoffset: 0 /* rtl:ignore */; + -webkit-animation: q-mat-dash 1.5s ease-in-out infinite; + animation: q-mat-dash 1.5s ease-in-out infinite; +} +.q-splitter__panel { + position: relative; + z-index: 0; +} +.q-splitter__panel > .q-splitter { + width: 100%; + height: 100%; +} +.q-splitter__separator { + background-color: rgba(0,0,0,0.12); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + position: relative; + z-index: 1; +} +.q-splitter__separator-area > * { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.q-splitter--dark .q-splitter__separator { + background-color: rgba(255,255,255,0.28); +} +.q-splitter--vertical > .q-splitter__panel { + height: 100%; +} +.q-splitter--vertical.q-splitter--active { + cursor: col-resize; +} +.q-splitter--vertical > .q-splitter__separator { + width: 1px; +} +.q-splitter--vertical > .q-splitter__separator > div { + left: -6px; + right: -6px; +} +.q-splitter--vertical.q-splitter--workable > .q-splitter__separator { + cursor: col-resize; +} +.q-splitter--horizontal > .q-splitter__panel { + width: 100%; +} +.q-splitter--horizontal.q-splitter--active { + cursor: row-resize; +} +.q-splitter--horizontal > .q-splitter__separator { + height: 1px; +} +.q-splitter--horizontal > .q-splitter__separator > div { + top: -6px; + bottom: -6px; +} +.q-splitter--horizontal.q-splitter--workable > .q-splitter__separator { + cursor: row-resize; +} +.q-splitter__before, +.q-splitter__after { + overflow: auto; +} +@media (prefers-color-scheme: dark) { + .q-splitter--dark-auto .q-splitter__separator { + background-color: rgba(255,255,255,0.28); + } +} +.q-stepper { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; +} +.q-stepper__title { + font-size: 14px; + line-height: 18px; + letter-spacing: 0.1px; +} +.q-stepper__caption { + font-size: 12px; + line-height: 14px; +} +.q-stepper__dot { + contain: layout; + margin-right: 8px; + font-size: 14px; + width: 24px; + min-width: 24px; + height: 24px; + border-radius: 50%; + background: currentColor; +} +.q-stepper__dot span { + color: #fff; + color: var(--q-color-dark-text); +} +.q-stepper__tab { + padding: 8px 24px; + font-size: 14px; + color: #9e9e9e; + flex-direction: row; +} +.q-stepper__tab--navigation { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; +} +.q-stepper__tab--active, +.q-stepper__tab--done { + color: #1976d2; + color: var(--q-color-primary); +} +.q-stepper__tab--active .q-stepper__dot, +.q-stepper__tab--done .q-stepper__dot, +.q-stepper__tab--active .q-stepper__label, +.q-stepper__tab--done .q-stepper__label { + text-shadow: 0 0 0 currentColor; +} +.q-stepper__tab--disabled .q-stepper__dot { + background: rgba(0,0,0,0.22); +} +.q-stepper__tab--disabled .q-stepper__label { + color: rgba(0,0,0,0.32); +} +.q-stepper__tab--error { + color: #c10015; + color: var(--q-color-negative); +} +.q-stepper__tab--error-with-icon .q-stepper__dot { + background: transparent !important; +} +.q-stepper__tab--error-with-icon .q-stepper__dot span { + color: currentColor; +} +.q-stepper__tab--error-with-icon .q-stepper__dot .q-icon { + font-size: 24px; +} +.q-stepper__header { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.q-stepper__header--border { + border-bottom: 1px solid rgba(0,0,0,0.12); +} +.q-stepper__header--standard-labels .q-stepper__tab { + min-height: 72px; + justify-content: center; +} +.q-stepper__header--standard-labels .q-stepper__tab:first-child { + justify-content: flex-start; +} +.q-stepper__header--standard-labels .q-stepper__tab:last-child { + justify-content: flex-end; +} +.q-stepper__header--standard-labels .q-stepper__tab:only-child { + justify-content: center; +} +.q-stepper__header--standard-labels .q-stepper__dot:after { + display: none; +} +.q-stepper__header--alternative-labels .q-stepper__tab { + min-height: 104px; + padding: 24px 32px; + flex-direction: column; + justify-content: flex-start; +} +.q-stepper__header--alternative-labels .q-stepper__dot { + margin-right: 0; +} +.q-stepper__header--alternative-labels .q-stepper__label { + margin-top: 8px; + text-align: center; +} +.q-stepper__header--alternative-labels .q-stepper__label:before, +.q-stepper__header--alternative-labels .q-stepper__label:after { + display: none; +} +.q-stepper__header--contracted { + min-height: 72px; +} +.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab { + min-height: 72px; +} +.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:first-child { + align-items: flex-start; +} +.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:last-child { + align-items: flex-end; +} +.q-stepper__header--contracted .q-stepper__tab { + padding: 24px 0; +} +.q-stepper__header--contracted .q-stepper__tab:first-child .q-stepper__dot { + transform: translateX(24px); +} +.q-stepper__header--contracted .q-stepper__tab:last-child .q-stepper__dot { + transform: translateX(-24px); +} +.q-stepper__header--contracted .q-stepper__tab:not(:last-child) .q-stepper__dot:after { + display: block !important; +} +.q-stepper__header--contracted .q-stepper__dot { + margin: 0; +} +.q-stepper__header--contracted .q-stepper__label { + display: none; +} +.q-stepper__nav { + padding-top: 24px; +} +.q-stepper--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-stepper--horizontal .q-stepper__step-inner { + padding: 24px; +} +.q-stepper--horizontal .q-stepper__tab:first-child { + border-top-left-radius: inherit; +} +.q-stepper--horizontal .q-stepper__tab:last-child { + border-top-right-radius: inherit; +} +.q-stepper--horizontal .q-stepper__tab:first-child .q-stepper__dot:before, +.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__label:after, +.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__dot:after { + display: none; +} +.q-stepper--horizontal .q-stepper__tab { + overflow: hidden; +} +.q-stepper--horizontal .q-stepper__line { + contain: layout; +} +.q-stepper--horizontal .q-stepper__line:before, +.q-stepper--horizontal .q-stepper__line:after { + position: absolute; + top: 50%; + height: 1px; + width: 100vw; + background: rgba(0,0,0,0.12); +} +.q-stepper--horizontal .q-stepper__label:after, +.q-stepper--horizontal .q-stepper__dot:after { + content: ''; + left: 100%; + margin-left: 8px; +} +.q-stepper--horizontal .q-stepper__dot:before { + content: ''; + right: 100%; + margin-right: 8px; +} +.q-stepper--horizontal > .q-stepper__nav { + padding: 0 24px 24px; +} +.q-stepper--vertical { + padding: 16px 0; +} +.q-stepper--vertical .q-stepper__tab { + padding: 12px 24px; +} +.q-stepper--vertical .q-stepper__title { + line-height: 18px; +} +.q-stepper--vertical .q-stepper__step-inner { + padding: 0 24px 32px 60px; +} +.q-stepper--vertical > .q-stepper__nav { + padding: 24px 24px 0; +} +.q-stepper--vertical .q-stepper__step { + overflow: hidden; +} +.q-stepper--vertical .q-stepper__dot { + margin-right: 12px; +} +.q-stepper--vertical .q-stepper__dot:before, +.q-stepper--vertical .q-stepper__dot:after { + content: ''; + position: absolute; + left: 50%; + width: 1px; + height: 99999px; + background: rgba(0,0,0,0.12); +} +.q-stepper--vertical .q-stepper__dot:before { + bottom: 100%; + margin-bottom: 8px; +} +.q-stepper--vertical .q-stepper__dot:after { + top: 100%; + margin-top: 8px; +} +.q-stepper--vertical .q-stepper__step:first-child .q-stepper__dot:before, +.q-stepper--vertical .q-stepper__step:last-child .q-stepper__dot:after { + display: none; +} +.q-stepper--vertical .q-stepper__step:last-child .q-stepper__step-inner { + padding-bottom: 8px; +} +.q-stepper--dark .q-stepper__dot span { + color: #000; + color: var(--q-color-light-text); +} +.q-stepper--dark.q-stepper--bordered, +.q-stepper--dark .q-stepper__header--border { + border-color: rgba(255,255,255,0.28); +} +.q-stepper--dark.q-stepper--horizontal .q-stepper__line:before, +.q-stepper--dark.q-stepper--horizontal .q-stepper__line:after { + background: rgba(255,255,255,0.28); +} +.q-stepper--dark.q-stepper--vertical .q-stepper__dot:before, +.q-stepper--dark.q-stepper--vertical .q-stepper__dot:after { + background: rgba(255,255,255,0.28); +} +.q-stepper--dark .q-stepper__tab--disabled { + color: rgba(255,255,255,0.28); +} +.q-stepper--dark .q-stepper__tab--disabled .q-stepper__dot { + background: rgba(255,255,255,0.28); +} +.q-stepper--dark .q-stepper__tab--disabled .q-stepper__label { + color: rgba(255,255,255,0.54); +} +@media (prefers-color-scheme: dark) { + .q-stepper--dark-auto .q-stepper__dot span { + color: #000; + color: var(--q-color-light-text); + } + .q-stepper--dark-auto.q-stepper--bordered, + .q-stepper--dark-auto .q-stepper__header--border { + border-color: rgba(255,255,255,0.28); + } + .q-stepper--dark-auto.q-stepper--horizontal .q-stepper__line:before, + .q-stepper--dark-auto.q-stepper--horizontal .q-stepper__line:after { + background: rgba(255,255,255,0.28); + } + .q-stepper--dark-auto.q-stepper--vertical .q-stepper__dot:before, + .q-stepper--dark-auto.q-stepper--vertical .q-stepper__dot:after { + background: rgba(255,255,255,0.28); + } + .q-stepper--dark-auto .q-stepper__tab--disabled { + color: rgba(255,255,255,0.28); + } + .q-stepper--dark-auto .q-stepper__tab--disabled .q-stepper__dot { + background: rgba(255,255,255,0.28); + } + .q-stepper--dark-auto .q-stepper__tab--disabled .q-stepper__label { + color: rgba(255,255,255,0.54); + } +} +.q-tab-panel { + padding: 16px; +} +.q-markup-table { + overflow: auto; +} +.q-table { + width: 100%; + max-width: 100%; + border-collapse: separate; + border-spacing: 0; +} +.q-table thead tr, +.q-table tbody td { + height: 48px; +} +.q-table th { + font-weight: 500; + font-size: 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.q-table th.sortable { + cursor: pointer; +} +.q-table th.sortable:hover .q-table__sort-icon { + opacity: 0.64; +} +.q-table th.sorted .q-table__sort-icon { + opacity: 0.86 !important; +} +.q-table th.sort-desc .q-table__sort-icon { + transform: rotate(180deg); +} +.q-table th, +.q-table td { + padding: 7px 16px; + background-color: inherit; +} +.q-table thead, +.q-table td, +.q-table th { + border-style: solid; + border-width: 0; +} +.q-table tbody td { + font-size: 13px; +} +.q-table__card { + color: #000; + color: var(--q-color-light-text); + border-radius: 4px; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +.q-table__card .q-table__middle { + flex: 1 1 auto; +} +.q-table__card .q-table__top, +.q-table__card .q-table__bottom { + flex: 0 0 auto; +} +.q-table__container { + position: relative; +} +.q-table__container.fullscreen { + max-height: 100%; +} +.q-table__container > div:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.q-table__container > div:last-child { + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} +.q-table__container > .q-inner-loading { + border-radius: inherit !important; +} +.q-table__top { + padding: 12px 16px; +} +.q-table__top .q-table__control { + flex-wrap: wrap; +} +.q-table__title { + font-size: 20px; + letter-spacing: 0.005em; + font-weight: 400; +} +.q-table__separator { + min-width: 8px !important; +} +.q-table__progress { + height: 0 !important; +} +.q-table__progress th { + padding: 0 !important; + border: 0 !important; +} +.q-table__progress .q-linear-progress { + position: absolute; + bottom: 0; +} +.q-table__middle { + max-width: 100%; +} +.q-table__bottom { + min-height: 50px; + padding: 4px 14px 4px 16px; + font-size: 12px; +} +.q-table__bottom .q-table__control { + min-height: 24px; +} +.q-table__bottom-nodata-icon { + font-size: 200%; + margin-right: 8px; +} +.q-table__bottom-item { + margin-right: 16px; +} +.q-table__control { + display: flex; + align-items: center; +} +.q-table__sort-icon { + transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); + opacity: 0; + font-size: 120%; +} +.q-table__sort-icon--left, +.q-table__sort-icon--center { + margin-left: 4px; +} +.q-table__sort-icon--right { + margin-right: 4px; +} +.q-table--col-auto-width { + width: 1px; +} +.q-table--flat { + box-shadow: none; +} +.q-table--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-table--square { + border-radius: 0; +} +.q-table__linear-progress { + height: 2px; +} +.q-table--no-wrap th, +.q-table--no-wrap td { + white-space: nowrap; +} +.q-table--grid { + box-shadow: none; + border-radius: 4px; +} +.q-table--grid .q-table__top { + padding-bottom: 4px; +} +.q-table--grid .q-table__middle { + min-height: 2px; + margin-bottom: 4px; +} +.q-table--grid .q-table__middle thead, +.q-table--grid .q-table__middle thead th { + border: 0 !important; +} +.q-table--grid .q-table__linear-progress { + bottom: 0; +} +.q-table--grid .q-table__bottom { + border-top: 0; +} +.q-table--grid .q-table__grid-content { + flex: 1 1 auto; +} +.q-table--grid.fullscreen { + background: inherit; +} +.q-table__grid-item-card { + vertical-align: top; + padding: 12px; +} +.q-table__grid-item-card .q-separator { + margin: 12px 0; +} +.q-table__grid-item-row + .q-table__grid-item-row { + margin-top: 8px; +} +.q-table__grid-item-title { + opacity: 0.54; + font-weight: 500; + font-size: 12px; +} +.q-table__grid-item-value { + font-size: 13px; +} +.q-table__grid-item { + padding: 4px; + transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +.q-table__grid-item--selected { + transform: scale(0.95); +} +.q-table--horizontal-separator thead th, +.q-table--cell-separator thead th, +.q-table--horizontal-separator tbody tr:not(:last-child) > td, +.q-table--cell-separator tbody tr:not(:last-child) > td { + border-bottom-width: 1px; +} +.q-table--vertical-separator td, +.q-table--cell-separator td, +.q-table--vertical-separator th, +.q-table--cell-separator th { + border-left-width: 1px; +} +.q-table--vertical-separator thead tr:last-child th, +.q-table--cell-separator thead tr:last-child th, +.q-table--vertical-separator.q-table--loading tr:nth-last-child(2) th, +.q-table--cell-separator.q-table--loading tr:nth-last-child(2) th { + border-bottom-width: 1px; +} +.q-table--vertical-separator td:first-child, +.q-table--cell-separator td:first-child, +.q-table--vertical-separator th:first-child, +.q-table--cell-separator th:first-child { + border-left: 0; +} +.q-table--vertical-separator .q-table__top, +.q-table--cell-separator .q-table__top { + border-bottom: 1px solid rgba(0,0,0,0.12); +} +.q-table--dense .q-table__top { + padding: 6px 16px; +} +.q-table--dense .q-table__bottom { + min-height: 33px; +} +.q-table--dense .q-table__sort-icon { + font-size: 110%; +} +.q-table--dense .q-table th, +.q-table--dense .q-table td { + padding: 4px 8px; +} +.q-table--dense .q-table thead tr, +.q-table--dense .q-table tbody tr, +.q-table--dense .q-table tbody td { + height: 28px; +} +.q-table--dense .q-table th:first-child, +.q-table--dense .q-table td:first-child { + padding-left: 16px; +} +.q-table--dense .q-table th:last-child, +.q-table--dense .q-table td:last-child { + padding-right: 16px; +} +.q-table--dense .q-table__bottom-item { + margin-right: 8px; +} +.q-table--dense .q-table__select .q-field__control, +.q-table--dense .q-table__select .q-field__native { + min-height: 24px; + padding: 0; +} +.q-table--dense .q-table__select .q-field__marginal { + height: 24px; +} +.q-table__bottom { + border-top: 1px solid rgba(0,0,0,0.12); +} +.q-table thead, +.q-table tr, +.q-table th, +.q-table td { + border-color: rgba(0,0,0,0.12); +} +.q-table tbody td { + position: relative; +} +.q-table tbody td:before, +.q-table tbody td:after { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + pointer-events: none; +} +.q-table tbody td:before { + background: rgba(0,0,0,0.03); +} +.q-table tbody td:after { + background: rgba(0,0,0,0.06); +} +.q-table tbody tr.selected td:after { + content: ''; +} +body.desktop .q-table > tbody > tr:not(.q-tr--no-hover):hover > td:not(.q-td--no-hover):before { + content: ''; +} +.q-table__card--dark, +.q-table--dark { + border-color: rgba(255,255,255,0.28); +} +.q-table--dark .q-table__bottom, +.q-table--dark thead, +.q-table--dark tr, +.q-table--dark th, +.q-table--dark td { + border-color: rgba(255,255,255,0.28); +} +.q-table--dark tbody td:before { + background: rgba(255,255,255,0.07); +} +.q-table--dark tbody td:after { + background: rgba(255,255,255,0.1); +} +.q-table--dark.q-table--vertical-separator .q-table__top, +.q-table--dark.q-table--cell-separator .q-table__top { + border-color: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + .q-table__card--dark-auto, + .q-table--dark-auto { + border-color: rgba(255,255,255,0.28); + } + .q-table--dark-auto .q-table__bottom, + .q-table--dark-auto thead, + .q-table--dark-auto tr, + .q-table--dark-auto th, + .q-table--dark-auto td { + border-color: rgba(255,255,255,0.28); + } + .q-table--dark-auto tbody td:before { + background: rgba(255,255,255,0.07); + } + .q-table--dark-auto tbody td:after { + background: rgba(255,255,255,0.1); + } + .q-table--dark-auto.q-table--vertical-separator .q-table__top, + .q-table--dark-auto.q-table--cell-separator .q-table__top { + border-color: rgba(255,255,255,0.28); + } +} +.q-tab { + padding: 0 16px; + min-height: 48px; + transition: color 0.3s, background-color 0.3s; + text-transform: uppercase; + white-space: nowrap; + color: inherit; + text-decoration: none; +} +.q-tab--full { + min-height: 72px; +} +.q-tab--no-caps { + text-transform: none; +} +.q-tab__content { + height: inherit; + padding: 4px 0; + min-width: 40px; +} +.q-tab__content--inline .q-tab__icon + .q-tab__label { + padding-left: 8px; +} +.q-tab__content .q-chip--floating { + top: 0; + right: -16px; +} +.q-tab__icon { + width: 24px; + height: 24px; + font-size: 24px; +} +.q-tab__label { + font-size: 14px; + line-height: 1.715em; + font-weight: 500; +} +.q-tab .q-badge { + top: 3px; + right: -12px; +} +.q-tab__alert, +.q-tab__alert-icon { + position: absolute; +} +.q-tab__alert { + top: 7px; + right: -9px; + height: 10px; + width: 10px; + border-radius: 50%; + background: currentColor; +} +.q-tab__alert-icon { + top: 2px; + right: -12px; + font-size: 18px; +} +.q-tab__indicator { + opacity: 0; + height: 2px; + background: currentColor; +} +.q-tab--active .q-tab__indicator { + opacity: 1; + transform-origin: left /* rtl:ignore */; +} +.q-tab--inactive { + opacity: 0.85; +} +.q-tabs { + position: relative; + transition: color 0.3s, background-color 0.3s; +} +.q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--horizontal { + padding-left: 36px; + padding-right: 36px; +} +.q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--vertical { + padding-top: 36px; + padding-bottom: 36px; +} +.q-tabs--scrollable.q-tabs__arrows--outside .q-tabs__arrow--faded { + opacity: 0.3; + pointer-events: none; +} +.q-tabs--scrollable.q-tabs__arrows--inside .q-tabs__arrow--faded { + display: none; +} +.q-tabs--not-scrollable .q-tabs__arrow { + display: none; +} +.q-tabs--not-scrollable .q-tabs__content { + border-radius: inherit; +} +.q-tabs__arrow { + cursor: pointer; + font-size: 32px; + min-width: 36px; + text-shadow: 0 0 3px #fff, 0 0 1px #fff, 0 0 1px #000; + transition: opacity 0.3s; +} +.q-tabs__content { + overflow: hidden; + flex: 1 1 auto; +} +.q-tabs__content--align-center { + justify-content: center; +} +.q-tabs__content--align-right { + justify-content: flex-end; +} +.q-tabs__content--align-justify .q-tab { + flex: 1 1 auto; +} +.q-tabs__offset { + display: none; +} +.q-tabs--horizontal .q-tabs__arrow { + height: 100%; +} +.q-tabs--horizontal .q-tabs__arrow--start { + top: 0; + left: 0 /* rtl:ignore */; + bottom: 0; +} +.q-tabs--horizontal .q-tabs__arrow--end { + top: 0; + right: 0 /* rtl:ignore */; + bottom: 0; +} +.q-tabs--vertical { + display: block !important; + height: 100%; +} +.q-tabs--vertical .q-tabs__content { + display: block !important; + height: 100%; +} +.q-tabs--vertical .q-tabs__arrow { + width: 100%; + height: 36px; + text-align: center; +} +.q-tabs--vertical .q-tabs__arrow--start { + top: 0; + left: 0; + right: 0; +} +.q-tabs--vertical .q-tabs__arrow--end { + left: 0; + right: 0; + bottom: 0; +} +.q-tabs--vertical .q-tab { + padding: 0 8px; +} +.q-tabs--vertical .q-tab__indicator { + height: unset; + width: 2px; +} +.q-tabs--vertical.q-tabs--not-scrollable .q-tabs__content { + height: 100%; +} +.q-tabs--vertical.q-tabs--dense .q-tab__content { + min-width: 24px; +} +.q-tabs--dense .q-tab { + min-height: 36px; +} +.q-tabs--dense .q-tab--full { + min-height: 52px; +} +.q-time { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; + background: #fff; + outline: 0; + width: 290px; + min-width: 290px; + max-width: 100%; +} +.q-time--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-time__header { + border-top-left-radius: inherit; + color: #fff; + color: var(--q-color-dark-text); + background-color: #1976d2; + background-color: var(--q-color-primary); + padding: 16px; + font-weight: 300; +} +.q-time__actions { + padding: 0 16px 16px; +} +.q-time__header-label { + font-size: 28px; + line-height: 1; + letter-spacing: -0.00833em; +} +.q-time__header-label > div + div { + margin-left: 4px; +} +.q-time__link { + opacity: 0.56; + outline: 0; + transition: opacity 0.3s ease-out; +} +.q-time__link--active, +.q-time__link:hover, +.q-time__link:focus { + opacity: 1; +} +.q-time__header-ampm { + font-size: 16px; + letter-spacing: 0.1em; +} +.q-time__content { + padding: 16px; +} +.q-time__content:before { + content: ''; + display: block; + padding-bottom: 100%; +} +.q-time__container-parent { + padding: 16px; +} +.q-time__container-child { + border-radius: 50%; + background: rgba(0,0,0,0.12); +} +.q-time__clock { + padding: 24px; + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + font-size: 14px; +} +.q-time__clock-circle { + position: relative; +} +.q-time__clock-center { + height: 6px; + width: 6px; + margin: auto; + border-radius: 50%; + min-height: 0; + background: currentColor; +} +.q-time__clock-pointer { + width: 2px; + height: 50%; + transform-origin: 0 0 /* rtl:ignore */; + min-height: 0; + position: absolute; + left: 50%; + right: 0; + bottom: 0; + color: #1976d2; + color: var(--q-color-primary); + background: currentColor; + transform: translateX(-50%); +} +.q-time__clock-pointer:before, +.q-time__clock-pointer:after { + content: ''; + position: absolute; + left: 50%; + border-radius: 50%; + background: currentColor; + transform: translateX(-50%); +} +.q-time__clock-pointer:before { + bottom: -4px; + width: 8px; + height: 8px; +} +.q-time__clock-pointer:after { + top: -3px; + height: 6px; + width: 6px; +} +.q-time__clock-position { + position: absolute; + min-height: 32px; + width: 32px; + height: 32px; + font-size: 12px; + line-height: 32px; + margin: 0; + padding: 0; + transform: translate(-50%, -50%) /* rtl:ignore */; + border-radius: 50%; +} +.q-time__clock-position--disabled { + opacity: 0.4; +} +.q-time__clock-position--active { + background-color: #1976d2; + background-color: var(--q-color-primary); + color: #fff; + color: var(--q-color-dark-text); +} +.q-time__clock-pos-0 { + top: 0%; + left: 50% /* rtl:ignore */; +} +.q-time__clock-pos-1 { + top: 6.7%; + left: 75% /* rtl:ignore */; +} +.q-time__clock-pos-2 { + top: 25%; + left: 93.3% /* rtl:ignore */; +} +.q-time__clock-pos-3 { + top: 50%; + left: 100% /* rtl:ignore */; +} +.q-time__clock-pos-4 { + top: 75%; + left: 93.3% /* rtl:ignore */; +} +.q-time__clock-pos-5 { + top: 93.3%; + left: 75% /* rtl:ignore */; +} +.q-time__clock-pos-6 { + top: 100%; + left: 50% /* rtl:ignore */; +} +.q-time__clock-pos-7 { + top: 93.3%; + left: 25% /* rtl:ignore */; +} +.q-time__clock-pos-8 { + top: 75%; + left: 6.7% /* rtl:ignore */; +} +.q-time__clock-pos-9 { + top: 50%; + left: 0% /* rtl:ignore */; +} +.q-time__clock-pos-10 { + top: 25%; + left: 6.7% /* rtl:ignore */; +} +.q-time__clock-pos-11 { + top: 6.7%; + left: 25% /* rtl:ignore */; +} +.q-time__clock-pos-12 { + top: 15%; + left: 50% /* rtl:ignore */; +} +.q-time__clock-pos-13 { + top: 19.69%; + left: 67.5% /* rtl:ignore */; +} +.q-time__clock-pos-14 { + top: 32.5%; + left: 80.31% /* rtl:ignore */; +} +.q-time__clock-pos-15 { + top: 50%; + left: 85% /* rtl:ignore */; +} +.q-time__clock-pos-16 { + top: 67.5%; + left: 80.31% /* rtl:ignore */; +} +.q-time__clock-pos-17 { + top: 80.31%; + left: 67.5% /* rtl:ignore */; +} +.q-time__clock-pos-18 { + top: 85%; + left: 50% /* rtl:ignore */; +} +.q-time__clock-pos-19 { + top: 80.31%; + left: 32.5% /* rtl:ignore */; +} +.q-time__clock-pos-20 { + top: 67.5%; + left: 19.69% /* rtl:ignore */; +} +.q-time__clock-pos-21 { + top: 50%; + left: 15% /* rtl:ignore */; +} +.q-time__clock-pos-22 { + top: 32.5%; + left: 19.69% /* rtl:ignore */; +} +.q-time__clock-pos-23 { + top: 19.69%; + left: 32.5% /* rtl:ignore */; +} +.q-time__now-button { + background-color: #1976d2; + background-color: var(--q-color-primary); + color: #fff; + color: var(--q-color-dark-text); + top: 12px; + right: 12px; +} +.q-time.disabled .q-time__header-ampm, +.q-time--readonly .q-time__header-ampm, +.q-time.disabled .q-time__content, +.q-time--readonly .q-time__content { + pointer-events: none; +} +.q-time--portrait { + display: inline-flex; + flex-direction: column; +} +.q-time--portrait .q-time__header { + border-top-right-radius: inherit; + min-height: 86px; +} +.q-time--portrait .q-time__header-ampm { + margin-left: 12px; +} +.q-time--portrait.q-time--bordered .q-time__content { + margin: 1px 0; +} +.q-time--landscape { + display: inline-flex; + align-items: stretch; + min-width: 420px; +} +.q-time--landscape > div { + display: flex; + flex-direction: column; + justify-content: center; +} +.q-time--landscape .q-time__header { + border-bottom-left-radius: inherit; + min-width: 156px; +} +.q-time--landscape .q-time__header-ampm { + margin-top: 12px; +} +.q-time--dark { + border-color: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + .q-time--dark-auto { + border-color: rgba(255,255,255,0.28); + } +} +.q-timeline { + padding: 0; + width: 100%; + list-style: none; +} +.q-timeline h6 { + line-height: inherit; +} +.q-timeline--dark { + color: #fff; + color: var(--q-color-dark-text); +} +.q-timeline--dark .q-timeline__subtitle { + opacity: 0.7; +} +.q-timeline__content { + padding-bottom: 24px; +} +.q-timeline__title { + margin-top: 0; + margin-bottom: 16px; +} +.q-timeline__subtitle { + font-size: 12px; + margin-bottom: 8px; + opacity: 0.6; + text-transform: uppercase; + letter-spacing: 1px; + font-weight: 700; +} +.q-timeline__dot { + position: absolute; + top: 0; + bottom: 0; + width: 15px; +} +.q-timeline__dot:before, +.q-timeline__dot:after { + content: ''; + background: currentColor; + display: block; + position: absolute; +} +.q-timeline__dot:before { + border: 3px solid transparent; + border-radius: 100%; + height: 15px; + width: 15px; + top: 4px; + left: 0; + transition: background 0.3s ease-in-out, border 0.3s ease-in-out; +} +.q-timeline__dot:after { + width: 3px; + opacity: 0.4; + top: 24px; + bottom: 0; + left: 6px; +} +.q-timeline__dot .q-icon { + position: absolute; + top: 0; + left: 0; + right: 0; + font-size: 16px; + height: 38px; + line-height: 38px; + width: 100%; + color: #fff; + color: var(--q-color-dark-text); +} +.q-timeline__dot .q-icon > svg, +.q-timeline__dot .q-icon > img { + width: 1em; + height: 1em; +} +.q-timeline__dot-img { + position: absolute; + top: 4px; + left: 0; + right: 0; + height: 31px; + width: 31px; + background: currentColor; + border-radius: 50%; +} +.q-timeline__heading { + position: relative; +} +.q-timeline__heading:first-child .q-timeline__heading-title { + padding-top: 0; +} +.q-timeline__heading:last-child .q-timeline__heading-title { + padding-bottom: 0; +} +.q-timeline__heading-title { + padding: 32px 0; + margin: 0; +} +.q-timeline__entry { + position: relative; + line-height: 22px; +} +.q-timeline__entry:last-child { + padding-bottom: 0 !important; +} +.q-timeline__entry:last-child .q-timeline__dot:after { + content: none; +} +.q-timeline__entry--icon .q-timeline__dot { + width: 31px; +} +.q-timeline__entry--icon .q-timeline__dot:before { + height: 31px; + width: 31px; +} +.q-timeline__entry--icon .q-timeline__dot:after { + top: 41px; + left: 14px; +} +.q-timeline__entry--icon .q-timeline__subtitle { + padding-top: 8px; +} +.q-timeline--dense--right .q-timeline__entry { + padding-left: 40px; +} +.q-timeline--dense--right .q-timeline__entry--icon .q-timeline__dot { + left: -8px; +} +.q-timeline--dense--right .q-timeline__dot { + left: 0; +} +.q-timeline--dense--left .q-timeline__heading { + text-align: right; +} +.q-timeline--dense--left .q-timeline__entry { + padding-right: 40px; +} +.q-timeline--dense--left .q-timeline__entry--icon .q-timeline__dot { + right: -8px; +} +.q-timeline--dense--left .q-timeline__content, +.q-timeline--dense--left .q-timeline__title, +.q-timeline--dense--left .q-timeline__subtitle { + text-align: right; +} +.q-timeline--dense--left .q-timeline__dot { + right: 0; +} +.q-timeline--comfortable { + display: table; +} +.q-timeline--comfortable .q-timeline__heading { + display: table-row; + font-size: 200%; +} +.q-timeline--comfortable .q-timeline__heading > div { + display: table-cell; +} +.q-timeline--comfortable .q-timeline__entry { + display: table-row; + padding: 0; +} +.q-timeline--comfortable .q-timeline__entry--icon .q-timeline__content { + padding-top: 8px; +} +.q-timeline--comfortable .q-timeline__subtitle, +.q-timeline--comfortable .q-timeline__dot, +.q-timeline--comfortable .q-timeline__content { + display: table-cell; + vertical-align: top; +} +.q-timeline--comfortable .q-timeline__subtitle { + width: 35%; +} +.q-timeline--comfortable .q-timeline__dot { + position: relative; + min-width: 31px; +} +.q-timeline--comfortable--right .q-timeline__heading .q-timeline__heading-title { + margin-left: -50px; +} +.q-timeline--comfortable--right .q-timeline__subtitle { + text-align: right; + padding-right: 30px; +} +.q-timeline--comfortable--right .q-timeline__content { + padding-left: 30px; +} +.q-timeline--comfortable--right .q-timeline__entry--icon .q-timeline__dot { + left: -8px; +} +.q-timeline--comfortable--left .q-timeline__heading { + text-align: right; +} +.q-timeline--comfortable--left .q-timeline__heading .q-timeline__heading-title { + margin-right: -50px; +} +.q-timeline--comfortable--left .q-timeline__subtitle { + padding-left: 30px; +} +.q-timeline--comfortable--left .q-timeline__content { + padding-right: 30px; +} +.q-timeline--comfortable--left .q-timeline__content, +.q-timeline--comfortable--left .q-timeline__title { + text-align: right; +} +.q-timeline--comfortable--left .q-timeline__entry--icon .q-timeline__dot { + right: 0; +} +.q-timeline--comfortable--left .q-timeline__dot { + right: -8px; +} +.q-timeline--loose .q-timeline__heading-title { + text-align: center; + margin-left: 0; +} +.q-timeline--loose .q-timeline__entry, +.q-timeline--loose .q-timeline__subtitle, +.q-timeline--loose .q-timeline__dot, +.q-timeline--loose .q-timeline__content { + display: block; + margin: 0; + padding: 0; +} +.q-timeline--loose .q-timeline__dot { + position: absolute; + left: 50%; + margin-left: -7.15px; +} +.q-timeline--loose .q-timeline__entry { + padding-bottom: 24px; + overflow: hidden; +} +.q-timeline--loose .q-timeline__entry--icon .q-timeline__dot { + margin-left: -15px; +} +.q-timeline--loose .q-timeline__entry--icon .q-timeline__subtitle { + line-height: 38px; +} +.q-timeline--loose .q-timeline__entry--icon .q-timeline__content { + padding-top: 8px; +} +.q-timeline--loose .q-timeline__entry--left .q-timeline__content, +.q-timeline--loose .q-timeline__entry--right .q-timeline__subtitle { + float: left; + padding-right: 30px; + text-align: right; +} +.q-timeline--loose .q-timeline__entry--left .q-timeline__subtitle, +.q-timeline--loose .q-timeline__entry--right .q-timeline__content { + float: right; + text-align: left; + padding-left: 30px; +} +.q-timeline--loose .q-timeline__subtitle, +.q-timeline--loose .q-timeline__content { + width: 50%; +} +@media (prefers-color-scheme: dark) { + .q-timeline--dark-auto { + color: #fff; + color: var(--q-color-dark-text); + } + .q-timeline--dark-auto .q-timeline__subtitle { + opacity: 0.7; + } +} +.q-toggle { + vertical-align: middle; +} +.q-toggle__native { + width: 1px; + height: 1px; +} +.q-toggle__track { + height: 0.35em; + border-radius: 0.175em; + opacity: 0.38; + background: currentColor; +} +.q-toggle__thumb { + top: 0.25em; + left: 0.25em; + width: 0.5em; + height: 0.5em; + transition: left 0.22s cubic-bezier(0.4, 0, 0.2, 1); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + z-index: 0; +} +.q-toggle__thumb:after { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + border-radius: 50%; + background: #fff; + background: var(--q-color-light-page); + box-shadow: 0 3px 1px -2px rgba(0,0,0,0.2), 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12); +} +.q-toggle__thumb .q-icon { + font-size: 0.3em; + min-width: 1em; + color: #000; + color: var(--q-color-light-text); + opacity: 0.54; + z-index: 1; +} +.q-toggle__inner { + font-size: 40px; + width: 1.4em; + min-width: 1.4em; + height: 1em; + padding: 0.325em 0.3em; + -webkit-print-color-adjust: exact; +} +.q-toggle__inner--indet .q-toggle__thumb { + left: 0.45em; +} +.q-toggle__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); +} +.q-toggle__inner--truthy .q-toggle__track { + opacity: 0.54; +} +.q-toggle__inner--truthy .q-toggle__thumb { + left: 0.65em; +} +.q-toggle__inner--truthy .q-toggle__thumb:after { + background-color: currentColor; +} +.q-toggle__inner--truthy .q-toggle__thumb .q-icon { + color: #fff; + color: var(--q-color-dark-text); + opacity: 1; +} +.q-toggle.disabled { + opacity: 0.75 !important; +} +.q-toggle--dark .q-toggle__inner { + color: #fff; + color: var(--q-color-dark-text); +} +.q-toggle--dark .q-toggle__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); +} +.q-toggle--dark .q-toggle__thumb:before { + opacity: 0.32 !important; +} +.q-toggle--dense .q-toggle__inner { + width: 0.8em; + min-width: 0.8em; + height: 0.5em; + padding: 0.07625em 0; +} +.q-toggle--dense .q-toggle__thumb { + top: 0; + left: 0; +} +.q-toggle--dense .q-toggle__inner--indet .q-toggle__thumb { + left: 0.15em; +} +.q-toggle--dense .q-toggle__inner--truthy .q-toggle__thumb { + left: 0.3em; +} +.q-toggle--dense .q-toggle__label { + padding-left: 0.5em; +} +.q-toggle--dense.reverse .q-toggle__label { + padding-left: 0; + padding-right: 0.5em; +} +body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + border-radius: 50%; + background: currentColor; + opacity: 0.12; + transform: scale3d(0, 0, 1); + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1); +} +body.desktop .q-toggle:not(.disabled):focus .q-toggle__thumb:before, +body.desktop .q-toggle:not(.disabled):hover .q-toggle__thumb:before { + transform: scale3d(2, 2, 1); +} +body.desktop .q-toggle--dense:not(.disabled):focus .q-toggle__thumb:before, +body.desktop .q-toggle--dense:not(.disabled):hover .q-toggle__thumb:before { + transform: scale3d(1.5, 1.5, 1); +} +@media (prefers-color-scheme: dark) { + .q-toggle--dark-auto .q-toggle__inner { + color: #fff; + color: var(--q-color-dark-text); + } + .q-toggle--dark-auto .q-toggle__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); + } + .q-toggle--dark-auto .q-toggle__thumb:before { + opacity: 0.32 !important; + } +} +.q-toolbar { + position: relative; + padding: 0 12px; + min-height: 50px; + width: 100%; +} +.q-toolbar--inset { + padding-left: 58px; +} +.q-toolbar .q-avatar { + font-size: 38px; +} +.q-toolbar__title { + flex: 1 1 0%; + min-width: 1px; + max-width: 100%; + font-size: 21px; + font-weight: normal; + letter-spacing: 0.01em; + padding: 0 12px; +} +.q-toolbar__title:first-child { + padding-left: 0; +} +.q-toolbar__title:last-child { + padding-right: 0; +} +.q-tooltip { + padding: 6px 10px; + opacity: 0; +} +.q-tooltip__container { + position: fixed; + z-index: 9000; + contain: layout; + contain: layout style; +} +.q-tooltip--style { + font-size: 10px; + color: #fafafa; + background: #757575; + border-radius: 4px; + text-transform: none; + font-weight: normal; +} +@media (max-width: 599.98px) { + .q-tooltip { + font-size: 14px; + padding: 8px 16px; + } +} +.q-tree { + position: relative; + color: #9e9e9e; +} +.q-tree__node { + padding: 0 0 3px 22px; +} +.q-tree__node:after { + content: ''; + position: absolute; + top: -3px; + bottom: 0; + width: 2px; + right: auto; + left: -13px; + border-left: 1px solid currentColor; +} +.q-tree__node:last-child:after { + display: none; +} +.q-tree__node--disabled { + pointer-events: none; +} +.q-tree__node--disabled .disabled { + opacity: 1 !important; +} +.q-tree__node--disabled > div, +.q-tree__node--disabled > i, +.q-tree__node--disabled > .disabled { + opacity: 0.6 !important; +} +.q-tree__node--disabled > div .q-tree__node--disabled > div, +.q-tree__node--disabled > i .q-tree__node--disabled > div, +.q-tree__node--disabled > .disabled .q-tree__node--disabled > div, +.q-tree__node--disabled > div .q-tree__node--disabled > i, +.q-tree__node--disabled > i .q-tree__node--disabled > i, +.q-tree__node--disabled > .disabled .q-tree__node--disabled > i, +.q-tree__node--disabled > div .q-tree__node--disabled > .disabled, +.q-tree__node--disabled > i .q-tree__node--disabled > .disabled, +.q-tree__node--disabled > .disabled .q-tree__node--disabled > .disabled { + opacity: 1 !important; +} +.q-tree__node-header:before { + content: ''; + position: absolute; + top: -3px; + bottom: 50%; + width: 31px; + left: -35px; + border-left: 1px solid currentColor; + border-bottom: 1px solid currentColor; +} +.q-tree__children { + padding-left: 25px; +} +.q-tree__node-body { + padding: 5px 0 8px 5px; +} +.q-tree__node--parent { + padding-left: 2px; +} +.q-tree__node--parent > .q-tree__node-header:before { + width: 15px; + left: -15px; +} +.q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body { + padding: 5px 0 8px 27px; +} +.q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body:after { + content: ''; + position: absolute; + top: 0; + width: 2px; + height: 100%; + right: auto; + left: 12px; + border-left: 1px solid currentColor; + bottom: 50px; +} +.q-tree__node--link { + cursor: pointer; +} +.q-tree__node-header { + padding: 4px; + margin-top: 3px; + border-radius: 4px; + outline: 0; +} +.q-tree__node-header-content { + color: #000; + color: var(--q-color-light-text); + transition: color 0.3s; +} +.q-tree__node--selected .q-tree__node-header-content { + color: #9e9e9e; +} +.q-tree__icon, +.q-tree__node-header-content .q-icon { + font-size: 21px; +} +.q-tree__img { + height: 42px; + border-radius: 2px; +} +.q-tree__avatar, +.q-tree__node-header-content .q-avatar { + font-size: 28px; + border-radius: 50%; + width: 28px; + height: 28px; +} +.q-tree__arrow, +.q-tree__spinner { + font-size: 16px; + margin-right: 4px; +} +.q-tree__arrow { + transition: transform 0.3s; +} +.q-tree__arrow--rotate { + transform: rotate3d(0, 0, 1, 90deg); +} +.q-tree__tickbox { + margin-right: 4px; +} +.q-tree > .q-tree__node { + padding: 0; +} +.q-tree > .q-tree__node:after, +.q-tree > .q-tree__node > .q-tree__node-header:before { + display: none; +} +.q-tree > .q-tree__node--child > .q-tree__node-header { + padding-left: 24px; +} +.q-tree--dark .q-tree__node-header-content { + color: #fff; + color: var(--q-color-dark-text); +} +.q-tree--no-connectors .q-tree__node:after, +.q-tree--no-connectors .q-tree__node-header:before, +.q-tree--no-connectors .q-tree__node-body:after { + display: none !important; +} +.q-tree--dense > .q-tree__node--child > .q-tree__node-header { + padding-left: 1px; +} +.q-tree--dense .q-tree__arrow, +.q-tree--dense .q-tree__spinner { + margin-right: 1px; +} +.q-tree--dense .q-tree__img { + height: 32px; +} +.q-tree--dense .q-tree__tickbox { + margin-right: 3px; +} +.q-tree--dense .q-tree__node { + padding: 0; +} +.q-tree--dense .q-tree__node:after { + top: 0; + left: -8px; +} +.q-tree--dense .q-tree__node-header { + margin-top: 0; + padding: 1px; +} +.q-tree--dense .q-tree__node-header:before { + top: 0; + left: -8px; + width: 8px; +} +.q-tree--dense .q-tree__node--child { + padding-left: 17px; +} +.q-tree--dense .q-tree__node--child > .q-tree__node-header:before { + left: -25px; + width: 21px; +} +.q-tree--dense .q-tree__node-body { + padding: 0 0 2px; +} +.q-tree--dense .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body { + padding: 0 0 2px 20px; +} +.q-tree--dense .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body:after { + left: 8px; +} +.q-tree--dense .q-tree__children { + padding-left: 16px; +} +[dir=rtl] .q-tree__arrow { + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */; +} +[dir=rtl] .q-tree__arrow--rotate { + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */; +} +@media (prefers-color-scheme: dark) { + .q-tree--dark-auto .q-tree__node-header-content { + color: #fff; + color: var(--q-color-dark-text); + } +} +.q-uploader { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; + vertical-align: top; + position: relative; + width: 320px; + max-height: 320px; +} +.q-uploader--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-uploader__input { + opacity: 0; + width: 100%; + height: 100%; + cursor: pointer !important; + z-index: 1; +} +.q-uploader__input::-webkit-file-upload-button { + cursor: pointer; +} +.q-uploader__file:before { + content: ''; + border-top-left-radius: inherit; + border-top-right-radius: inherit; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + pointer-events: none; + background: currentColor; + opacity: 0.04; +} +.q-uploader__header { + position: relative; + border-top-left-radius: inherit; + border-top-right-radius: inherit; + background-color: #1976d2; + background-color: var(--q-color-primary); + color: #fff; + color: var(--q-color-dark-text); + width: 100%; +} +.q-uploader__spinner { + font-size: 24px; + margin-right: 4px; +} +.q-uploader__header-content { + padding: 8px; +} +.q-uploader__dnd { + outline: 1px dashed currentColor; + outline-offset: -4px; + background: rgba(255,255,255,0.6); +} +.q-uploader__overlay { + font-size: 36px; + color: #000; + color: var(--q-color-light-text); + background-color: rgba(255,255,255,0.6); +} +.q-uploader__list { + position: relative; + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; + padding: 8px; + min-height: 60px; + flex: 1 1 auto; +} +.q-uploader__file { + border-radius: 4px 4px 0 0; + border: 1px solid rgba(0,0,0,0.12); +} +.q-uploader__file .q-circular-progress { + font-size: 24px; +} +.q-uploader__file--img { + color: #fff; + color: var(--q-color-dark-text); + height: 200px; + min-width: 200px; + background-position: 50% 50%; + background-size: cover; + background-repeat: no-repeat; +} +.q-uploader__file--img:before { + content: none; +} +.q-uploader__file--img .q-circular-progress { + color: #fff; + color: var(--q-color-dark-text); +} +.q-uploader__file--img .q-uploader__file-header { + padding-bottom: 24px; + background: linear-gradient(to bottom, rgba(0,0,0,0.7) 20%, rgba(255,255,255,0)); +} +.q-uploader__file + .q-uploader__file { + margin-top: 8px; +} +.q-uploader__file-header { + position: relative; + padding: 4px 8px; + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.q-uploader__file-header-content { + padding-right: 8px; +} +.q-uploader__file-status { + font-size: 24px; + margin-right: 4px; +} +.q-uploader__title { + font-size: 14px; + font-weight: bold; + line-height: 18px; + word-break: break-word; +} +.q-uploader__subtitle { + font-size: 12px; + line-height: 18px; +} +.q-uploader--disabled .q-uploader__header, +.q-uploader--disabled .q-uploader__list { + pointer-events: none; +} +.q-uploader--dark { + border-color: rgba(255,255,255,0.28); +} +.q-uploader--dark .q-uploader__file { + border-color: rgba(255,255,255,0.28); +} +.q-uploader--dark .q-uploader__dnd, +.q-uploader--dark .q-uploader__overlay { + background: rgba(255,255,255,0.3); +} +.q-uploader--dark .q-uploader__overlay { + color: #fff; + color: var(--q-color-dark-text); +} +@media (prefers-color-scheme: dark) { + .q-uploader--dark-auto { + border-color: rgba(255,255,255,0.28); + } + .q-uploader--dark-auto .q-uploader__file { + border-color: rgba(255,255,255,0.28); + } + .q-uploader--dark-auto .q-uploader__dnd, + .q-uploader--dark-auto .q-uploader__overlay { + background: rgba(255,255,255,0.3); + } + .q-uploader--dark-auto .q-uploader__overlay { + color: #fff; + color: var(--q-color-dark-text); + } +} +.q-video { + position: relative; + overflow: hidden; + border-radius: inherit; +} +.q-video iframe, +.q-video object, +.q-video embed { + width: 100%; + height: 100%; +} +.q-video--responsive { + height: 0; +} +.q-video--responsive iframe, +.q-video--responsive object, +.q-video--responsive embed { + position: absolute; + top: 0; + left: 0; +} +.q-virtual-scroll:focus { + outline: 0; +} +.q-virtual-scroll__content { + outline: none; + contain: content; +} +.q-virtual-scroll__content > * { + overflow-anchor: none; +} +.q-virtual-scroll__content > [data-q-vs-anchor] { + overflow-anchor: auto; +} +.q-virtual-scroll__padding { + background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128,128,128,0.03) 20%, rgba(128,128,128,0.08) 50%, rgba(128,128,128,0.03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) /* rtl:ignore */; + background-size: 100% 50px /* rtl:ignore */; + background-size: var(--q-virtual-scroll-item-width, 100%) var(--q-virtual-scroll-item-height, 50px) /* rtl:ignore */; +} +.q-table .q-virtual-scroll__padding tr { + height: 0 !important; +} +.q-table .q-virtual-scroll__padding td { + padding: 0 !important; +} +.q-virtual-scroll--horizontal { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: stretch; +} +.q-virtual-scroll--horizontal .q-virtual-scroll__content { + display: flex; + flex-direction: row; + flex-wrap: nowrap; +} +.q-virtual-scroll--horizontal .q-virtual-scroll__padding, +.q-virtual-scroll--horizontal .q-virtual-scroll__content, +.q-virtual-scroll--horizontal .q-virtual-scroll__content > * { + flex: 0 0 auto; +} +.q-virtual-scroll--horizontal .q-virtual-scroll__padding { + background: linear-gradient(to left, rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128,128,128,0.03) 20%, rgba(128,128,128,0.08) 50%, rgba(128,128,128,0.03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) /* rtl:ignore */; + background-size: 50px 100% /* rtl:ignore */; + background-size: var(--q-virtual-scroll-item-width, 50px) var(--q-virtual-scroll-item-height, 100%) /* rtl:ignore */; +} +.q-ripple { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + width: 100%; + height: 100%; + color: inherit; + border-radius: inherit; + z-index: 0; + pointer-events: none; + overflow: hidden; + contain: strict; +} +.q-ripple__inner { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + opacity: 0; + color: inherit; + border-radius: 50%; + background: currentColor; + background-clip: padding-box; + pointer-events: none; + will-change: transform, opacity; +} +.q-ripple__inner--enter { + transition: transform 0.225s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.1s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-ripple__inner--leave { + transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-morph--invisible, +.q-morph--internal { + opacity: 0 !important; + pointer-events: none !important; + position: fixed !important; + right: 200vw !important; + bottom: 200vh !important; +} +.q-loading { + color: #000; + color: var(--q-color-light-text); + position: fixed !important; +} +.q-loading:before { + content: ''; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: currentColor; + opacity: 0.5; + z-index: -1; +} +.q-loading > div { + margin: 40px 20px 0; + max-width: 450px; + text-align: center; +} +.q-notifications__list { + z-index: 9500; + pointer-events: none; + left: 0; + right: 0; + margin-bottom: 10px; + position: relative; +} +.q-notifications__list--center { + top: 0; + bottom: 0; +} +.q-notifications__list--top { + top: 0; +} +.q-notifications__list--bottom { + bottom: 0; +} +body.q-ios-padding .q-notifications__list--center, +body.q-ios-padding .q-notifications__list--top { + top: 20px; + top: env(safe-area-inset-top); +} +body.q-ios-padding .q-notifications__list--center, +body.q-ios-padding .q-notifications__list--bottom { + bottom: env(safe-area-inset-bottom); +} +.q-notification { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; + pointer-events: all; + display: inline-flex; + margin: 10px 10px 0; + transition: transform 1s, opacity 1s; + z-index: 9500; + flex-shrink: 0; + max-width: 95vw; + background: #323232; + background: var(--q-color-notify-background); + color: #fff; + color: var(--q-color-dark-text); + font-size: 14px; +} +.q-notification__icon { + font-size: 24px; + flex: 0 0 1em; +} +.q-notification__icon--additional { + margin-right: 16px; +} +.q-notification__avatar { + font-size: 32px; +} +.q-notification__avatar--additional { + margin-right: 8px; +} +.q-notification__spinner { + font-size: 32px; +} +.q-notification__spinner--additional { + margin-right: 8px; +} +.q-notification__message { + padding: 8px 0; +} +.q-notification__caption { + font-size: 0.9em; + opacity: 0.7; +} +.q-notification__actions { + color: #1976d2; + color: var(--q-color-primary); +} +.q-notification__badge { + -webkit-animation: q-notif-badge 0.42s; + animation: q-notif-badge 0.42s; + padding: 4px 8px; + position: absolute; + background: #c10015; + box-shadow: 0 1px 3px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12); + background-color: #c10015; + background-color: var(--q-color-negative); + color: #fff; + color: var(--q-color-dark-text); + border-radius: 4px; + font-size: 12px; + line-height: 12px; +} +.q-notification__badge--top-left, +.q-notification__badge--top-right { + top: -6px; +} +.q-notification__badge--bottom-left, +.q-notification__badge--bottom-right { + bottom: -6px; +} +.q-notification__badge--top-left, +.q-notification__badge--bottom-left { + left: -22px; +} +.q-notification__badge--top-right, +.q-notification__badge--bottom-right { + right: -22px; +} +.q-notification__progress { + z-index: -1; + position: absolute; + height: 3px; + bottom: 0; + left: -10px; + right: -10px; + -webkit-animation: q-notif-progress linear; + animation: q-notif-progress linear; + background: currentColor; + opacity: 0.3; + border-radius: 4px 4px 0 0; + transform-origin: 0 50%; + transform: scaleX(0); +} +.q-notification--standard { + padding: 0 16px; + min-height: 48px; +} +.q-notification--standard .q-notification__actions { + padding: 6px 0 6px 8px; + margin-right: -8px; +} +.q-notification--multi-line { + min-height: 68px; + padding: 8px 16px; +} +.q-notification--multi-line .q-notification__badge--top-left, +.q-notification--multi-line .q-notification__badge--top-right { + top: -15px; +} +.q-notification--multi-line .q-notification__badge--bottom-left, +.q-notification--multi-line .q-notification__badge--bottom-right { + bottom: -15px; +} +.q-notification--multi-line .q-notification__progress { + bottom: -8px; +} +.q-notification--multi-line .q-notification__actions { + padding: 0; +} +.q-notification--multi-line .q-notification__actions--with-media { + padding-left: 25px; +} +.q-notification--top-left-enter, +.q-notification--top-left-leave-to, +.q-notification--top-enter, +.q-notification--top-leave-to, +.q-notification--top-right-enter, +.q-notification--top-right-leave-to { + opacity: 0; + transform: translateY(-50px); + z-index: 9499; +} +.q-notification--left-enter, +.q-notification--left-leave-to, +.q-notification--center-enter, +.q-notification--center-leave-to, +.q-notification--right-enter, +.q-notification--right-leave-to { + opacity: 0; + transform: rotateX(90deg); + z-index: 9499; +} +.q-notification--bottom-left-enter, +.q-notification--bottom-left-leave-to, +.q-notification--bottom-enter, +.q-notification--bottom-leave-to, +.q-notification--bottom-right-enter, +.q-notification--bottom-right-leave-to { + opacity: 0; + transform: translateY(50px); + z-index: 9499; +} +.q-notification--top-left-leave-active, +.q-notification--top-leave-active, +.q-notification--top-right-leave-active, +.q-notification--left-leave-active, +.q-notification--center-leave-active, +.q-notification--right-leave-active, +.q-notification--bottom-left-leave-active, +.q-notification--bottom-leave-active, +.q-notification--bottom-right-leave-active { + position: absolute; + z-index: 9499; + margin-left: 0; + margin-right: 0; +} +.q-notification--top-leave-active, +.q-notification--center-leave-active { + top: 0; +} +.q-notification--bottom-left-leave-active, +.q-notification--bottom-leave-active, +.q-notification--bottom-right-leave-active { + bottom: 0; +} +@media (min-width: 600px) { + .q-notification { + max-width: 65vw; + } +} +/* + * Animate.css additions + * Adapted from: https: + */ +:root { + --animate-duration: 0.3s; + --animate-delay: 0.3s; + --animate-repeat: 1; +} +.animated { + -webkit-animation-duration: var(--animate-duration); + animation-duration: var(--animate-duration); + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} +.animated.repeat-1 { + -webkit-animation-iteration-count: var(--animate-repeat); + animation-iteration-count: var(--animate-repeat); +} +.animated.repeat-2 { + -webkit-animation-iteration-count: calc(var(--animate-repeat) * 2); + animation-iteration-count: calc(var(--animate-repeat) * 2); +} +.animated.repeat-3 { + -webkit-animation-iteration-count: calc(var(--animate-repeat) * 3); + animation-iteration-count: calc(var(--animate-repeat) * 3); +} +.animated.delay-1s { + -webkit-animation-delay: var(--animate-delay); + animation-delay: var(--animate-delay); +} +.animated.delay-2s { + -webkit-animation-delay: calc(var(--animate-delay) * 2); + animation-delay: calc(var(--animate-delay) * 2); +} +.animated.delay-3s { + -webkit-animation-delay: calc(var(--animate-delay) * 3); + animation-delay: calc(var(--animate-delay) * 3); +} +.animated.delay-4s { + -webkit-animation-delay: calc(var(--animate-delay) * 4); + animation-delay: calc(var(--animate-delay) * 4); +} +.animated.delay-5s { + -webkit-animation-delay: calc(var(--animate-delay) * 5); + animation-delay: calc(var(--animate-delay) * 5); +} +.animated.faster { + -webkit-animation-duration: calc(var(--animate-duration) / 2); + animation-duration: calc(var(--animate-duration) / 2); +} +.animated.fast { + -webkit-animation-duration: calc(var(--animate-duration) * 0.8); + animation-duration: calc(var(--animate-duration) * 0.8); +} +.animated.slow { + -webkit-animation-duration: calc(var(--animate-duration) * 2); + animation-duration: calc(var(--animate-duration) * 2); +} +.animated.slower { + -webkit-animation-duration: calc(var(--animate-duration) * 3); + animation-duration: calc(var(--animate-duration) * 3); +} +@media print, (prefers-reduced-motion: reduce) { + .animated { + -webkit-animation-duration: 1ms !important; + animation-duration: 1ms !important; + transition-duration: 1ms !important; + -webkit-animation-iteration-count: 1 !important; + animation-iteration-count: 1 !important; + } + .animated[class*='Out'] { + opacity: 0; + } +} +.q-animate--scale { + -webkit-animation: q-scale 0.15s; + animation: q-scale 0.15s; + -webkit-animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1); + animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1); +} +.q-animate--fade { + -webkit-animation: q-fade 0.2s /* rtl:ignore */; + animation: q-fade 0.2s /* rtl:ignore */; +} +:root { + --q-color-primary: #1976d2; + --q-color-secondary: #26a69a; + --q-color-accent: #9c27b0; + --q-color-positive: #21ba45; + --q-color-negative: #c10015; + --q-color-info: #31ccec; + --q-color-warning: #f2c037; + --q-color-dark: #1d1d1d; + --q-color-light-text: #000; + --q-color-light-page: #fff; + --q-color-dark-text: #fff; + --q-color-dark-page: #121212; + --q-color-backdrop-background: #000; + --q-color-notify-background: #323232; + --q-color-chip-background-light: #e0e0e0; + --q-color-chip-background-dark: #323232; + --q-color-dialog-plugin-light: #1976d2; + --q-color-dialog-plugin-dark: #ffc107; +} +.text-dark { + color: #1d1d1d !important; + color: var(--q-color-dark) !important; +} +.bg-dark { + background: #1d1d1d !important; + background: var(--q-color-dark) !important; +} +.text-dialog-plugin-light, +.text-dialog-plugin-dark-auto { + color: #1976d2 !important; + color: var(--q-color-dialog-plugin-light) !important; +} +.bg-dialog-plugin-light, +.bg-dialog-plugin-dark-auto { + background: #1976d2 !important; + background: var(--q-color-dialog-plugin-light) !important; +} +.text-dialog-plugin-dark { + color: #ffc107 !important; + color: var(--q-color-dialog-plugin-dark) !important; +} +.bg-dialog-plugin-dark { + background: #ffc107 !important; + background: var(--q-color-dialog-plugin-dark) !important; +} +@media (prefers-color-scheme: dark) { + .text-dialog-plugin-dark-auto { + color: #ffc107 !important; + color: var(--q-color-dialog-plugin-dark) !important; + } + .bg-dialog-plugin-dark-auto { + background: #ffc107 !important; + background: var(--q-color-dialog-plugin-dark) !important; + } +} +.text-primary { + color: #1976d2 !important; + color: var(--q-color-primary) !important; +} +.bg-primary { + background: #1976d2 !important; + background: var(--q-color-primary) !important; +} +.text-secondary { + color: #26a69a !important; + color: var(--q-color-secondary) !important; +} +.bg-secondary { + background: #26a69a !important; + background: var(--q-color-secondary) !important; +} +.text-accent { + color: #9c27b0 !important; + color: var(--q-color-accent) !important; +} +.bg-accent { + background: #9c27b0 !important; + background: var(--q-color-accent) !important; +} +.text-positive { + color: #21ba45 !important; + color: var(--q-color-positive) !important; +} +.bg-positive { + background: #21ba45 !important; + background: var(--q-color-positive) !important; +} +.text-negative { + color: #c10015 !important; + color: var(--q-color-negative) !important; +} +.bg-negative { + background: #c10015 !important; + background: var(--q-color-negative) !important; +} +.text-info { + color: #31ccec !important; + color: var(--q-color-info) !important; +} +.bg-info { + background: #31ccec !important; + background: var(--q-color-info) !important; +} +.text-warning { + color: #f2c037 !important; + color: var(--q-color-warning) !important; +} +.bg-warning { + background: #f2c037 !important; + background: var(--q-color-warning) !important; +} +.text-white { + color: #fff !important; +} +.bg-white { + background: #fff !important; +} +.text-black { + color: #000 !important; +} +.bg-black { + background: #000 !important; +} +.text-transparent { + color: transparent !important; +} +.bg-transparent { + background: transparent !important; +} +.text-separator { + color: rgba(0,0,0,0.12) !important; +} +.bg-separator { + background: rgba(0,0,0,0.12) !important; +} +.text-dark-separator { + color: rgba(255,255,255,0.28) !important; +} +.bg-dark-separator { + background: rgba(255,255,255,0.28) !important; +} +.text-red { + color: #f44336 !important; +} +.text-red-1 { + color: #ffebee !important; +} +.text-red-2 { + color: #ffcdd2 !important; +} +.text-red-3 { + color: #ef9a9a !important; +} +.text-red-4 { + color: #e57373 !important; +} +.text-red-5 { + color: #ef5350 !important; +} +.text-red-6 { + color: #f44336 !important; +} +.text-red-7 { + color: #e53935 !important; +} +.text-red-8 { + color: #d32f2f !important; +} +.text-red-9 { + color: #c62828 !important; +} +.text-red-10 { + color: #b71c1c !important; +} +.text-red-11 { + color: #ff8a80 !important; +} +.text-red-12 { + color: #ff5252 !important; +} +.text-red-13 { + color: #ff1744 !important; +} +.text-red-14 { + color: #d50000 !important; +} +.text-pink { + color: #e91e63 !important; +} +.text-pink-1 { + color: #fce4ec !important; +} +.text-pink-2 { + color: #f8bbd0 !important; +} +.text-pink-3 { + color: #f48fb1 !important; +} +.text-pink-4 { + color: #f06292 !important; +} +.text-pink-5 { + color: #ec407a !important; +} +.text-pink-6 { + color: #e91e63 !important; +} +.text-pink-7 { + color: #d81b60 !important; +} +.text-pink-8 { + color: #c2185b !important; +} +.text-pink-9 { + color: #ad1457 !important; +} +.text-pink-10 { + color: #880e4f !important; +} +.text-pink-11 { + color: #ff80ab !important; +} +.text-pink-12 { + color: #ff4081 !important; +} +.text-pink-13 { + color: #f50057 !important; +} +.text-pink-14 { + color: #c51162 !important; +} +.text-purple { + color: #9c27b0 !important; +} +.text-purple-1 { + color: #f3e5f5 !important; +} +.text-purple-2 { + color: #e1bee7 !important; +} +.text-purple-3 { + color: #ce93d8 !important; +} +.text-purple-4 { + color: #ba68c8 !important; +} +.text-purple-5 { + color: #ab47bc !important; +} +.text-purple-6 { + color: #9c27b0 !important; +} +.text-purple-7 { + color: #8e24aa !important; +} +.text-purple-8 { + color: #7b1fa2 !important; +} +.text-purple-9 { + color: #6a1b9a !important; +} +.text-purple-10 { + color: #4a148c !important; +} +.text-purple-11 { + color: #ea80fc !important; +} +.text-purple-12 { + color: #e040fb !important; +} +.text-purple-13 { + color: #d500f9 !important; +} +.text-purple-14 { + color: #a0f !important; +} +.text-deep-purple { + color: #673ab7 !important; +} +.text-deep-purple-1 { + color: #ede7f6 !important; +} +.text-deep-purple-2 { + color: #d1c4e9 !important; +} +.text-deep-purple-3 { + color: #b39ddb !important; +} +.text-deep-purple-4 { + color: #9575cd !important; +} +.text-deep-purple-5 { + color: #7e57c2 !important; +} +.text-deep-purple-6 { + color: #673ab7 !important; +} +.text-deep-purple-7 { + color: #5e35b1 !important; +} +.text-deep-purple-8 { + color: #512da8 !important; +} +.text-deep-purple-9 { + color: #4527a0 !important; +} +.text-deep-purple-10 { + color: #311b92 !important; +} +.text-deep-purple-11 { + color: #b388ff !important; +} +.text-deep-purple-12 { + color: #7c4dff !important; +} +.text-deep-purple-13 { + color: #651fff !important; +} +.text-deep-purple-14 { + color: #6200ea !important; +} +.text-indigo { + color: #3f51b5 !important; +} +.text-indigo-1 { + color: #e8eaf6 !important; +} +.text-indigo-2 { + color: #c5cae9 !important; +} +.text-indigo-3 { + color: #9fa8da !important; +} +.text-indigo-4 { + color: #7986cb !important; +} +.text-indigo-5 { + color: #5c6bc0 !important; +} +.text-indigo-6 { + color: #3f51b5 !important; +} +.text-indigo-7 { + color: #3949ab !important; +} +.text-indigo-8 { + color: #303f9f !important; +} +.text-indigo-9 { + color: #283593 !important; +} +.text-indigo-10 { + color: #1a237e !important; +} +.text-indigo-11 { + color: #8c9eff !important; +} +.text-indigo-12 { + color: #536dfe !important; +} +.text-indigo-13 { + color: #3d5afe !important; +} +.text-indigo-14 { + color: #304ffe !important; +} +.text-blue { + color: #2196f3 !important; +} +.text-blue-1 { + color: #e3f2fd !important; +} +.text-blue-2 { + color: #bbdefb !important; +} +.text-blue-3 { + color: #90caf9 !important; +} +.text-blue-4 { + color: #64b5f6 !important; +} +.text-blue-5 { + color: #42a5f5 !important; +} +.text-blue-6 { + color: #2196f3 !important; +} +.text-blue-7 { + color: #1e88e5 !important; +} +.text-blue-8 { + color: #1976d2 !important; +} +.text-blue-9 { + color: #1565c0 !important; +} +.text-blue-10 { + color: #0d47a1 !important; +} +.text-blue-11 { + color: #82b1ff !important; +} +.text-blue-12 { + color: #448aff !important; +} +.text-blue-13 { + color: #2979ff !important; +} +.text-blue-14 { + color: #2962ff !important; +} +.text-light-blue { + color: #03a9f4 !important; +} +.text-light-blue-1 { + color: #e1f5fe !important; +} +.text-light-blue-2 { + color: #b3e5fc !important; +} +.text-light-blue-3 { + color: #81d4fa !important; +} +.text-light-blue-4 { + color: #4fc3f7 !important; +} +.text-light-blue-5 { + color: #29b6f6 !important; +} +.text-light-blue-6 { + color: #03a9f4 !important; +} +.text-light-blue-7 { + color: #039be5 !important; +} +.text-light-blue-8 { + color: #0288d1 !important; +} +.text-light-blue-9 { + color: #0277bd !important; +} +.text-light-blue-10 { + color: #01579b !important; +} +.text-light-blue-11 { + color: #80d8ff !important; +} +.text-light-blue-12 { + color: #40c4ff !important; +} +.text-light-blue-13 { + color: #00b0ff !important; +} +.text-light-blue-14 { + color: #0091ea !important; +} +.text-cyan { + color: #00bcd4 !important; +} +.text-cyan-1 { + color: #e0f7fa !important; +} +.text-cyan-2 { + color: #b2ebf2 !important; +} +.text-cyan-3 { + color: #80deea !important; +} +.text-cyan-4 { + color: #4dd0e1 !important; +} +.text-cyan-5 { + color: #26c6da !important; +} +.text-cyan-6 { + color: #00bcd4 !important; +} +.text-cyan-7 { + color: #00acc1 !important; +} +.text-cyan-8 { + color: #0097a7 !important; +} +.text-cyan-9 { + color: #00838f !important; +} +.text-cyan-10 { + color: #006064 !important; +} +.text-cyan-11 { + color: #84ffff !important; +} +.text-cyan-12 { + color: #18ffff !important; +} +.text-cyan-13 { + color: #00e5ff !important; +} +.text-cyan-14 { + color: #00b8d4 !important; +} +.text-teal { + color: #009688 !important; +} +.text-teal-1 { + color: #e0f2f1 !important; +} +.text-teal-2 { + color: #b2dfdb !important; +} +.text-teal-3 { + color: #80cbc4 !important; +} +.text-teal-4 { + color: #4db6ac !important; +} +.text-teal-5 { + color: #26a69a !important; +} +.text-teal-6 { + color: #009688 !important; +} +.text-teal-7 { + color: #00897b !important; +} +.text-teal-8 { + color: #00796b !important; +} +.text-teal-9 { + color: #00695c !important; +} +.text-teal-10 { + color: #004d40 !important; +} +.text-teal-11 { + color: #a7ffeb !important; +} +.text-teal-12 { + color: #64ffda !important; +} +.text-teal-13 { + color: #1de9b6 !important; +} +.text-teal-14 { + color: #00bfa5 !important; +} +.text-green { + color: #4caf50 !important; +} +.text-green-1 { + color: #e8f5e9 !important; +} +.text-green-2 { + color: #c8e6c9 !important; +} +.text-green-3 { + color: #a5d6a7 !important; +} +.text-green-4 { + color: #81c784 !important; +} +.text-green-5 { + color: #66bb6a !important; +} +.text-green-6 { + color: #4caf50 !important; +} +.text-green-7 { + color: #43a047 !important; +} +.text-green-8 { + color: #388e3c !important; +} +.text-green-9 { + color: #2e7d32 !important; +} +.text-green-10 { + color: #1b5e20 !important; +} +.text-green-11 { + color: #b9f6ca !important; +} +.text-green-12 { + color: #69f0ae !important; +} +.text-green-13 { + color: #00e676 !important; +} +.text-green-14 { + color: #00c853 !important; +} +.text-light-green { + color: #8bc34a !important; +} +.text-light-green-1 { + color: #f1f8e9 !important; +} +.text-light-green-2 { + color: #dcedc8 !important; +} +.text-light-green-3 { + color: #c5e1a5 !important; +} +.text-light-green-4 { + color: #aed581 !important; +} +.text-light-green-5 { + color: #9ccc65 !important; +} +.text-light-green-6 { + color: #8bc34a !important; +} +.text-light-green-7 { + color: #7cb342 !important; +} +.text-light-green-8 { + color: #689f38 !important; +} +.text-light-green-9 { + color: #558b2f !important; +} +.text-light-green-10 { + color: #33691e !important; +} +.text-light-green-11 { + color: #ccff90 !important; +} +.text-light-green-12 { + color: #b2ff59 !important; +} +.text-light-green-13 { + color: #76ff03 !important; +} +.text-light-green-14 { + color: #64dd17 !important; +} +.text-lime { + color: #cddc39 !important; +} +.text-lime-1 { + color: #f9fbe7 !important; +} +.text-lime-2 { + color: #f0f4c3 !important; +} +.text-lime-3 { + color: #e6ee9c !important; +} +.text-lime-4 { + color: #dce775 !important; +} +.text-lime-5 { + color: #d4e157 !important; +} +.text-lime-6 { + color: #cddc39 !important; +} +.text-lime-7 { + color: #c0ca33 !important; +} +.text-lime-8 { + color: #afb42b !important; +} +.text-lime-9 { + color: #9e9d24 !important; +} +.text-lime-10 { + color: #827717 !important; +} +.text-lime-11 { + color: #f4ff81 !important; +} +.text-lime-12 { + color: #eeff41 !important; +} +.text-lime-13 { + color: #c6ff00 !important; +} +.text-lime-14 { + color: #aeea00 !important; +} +.text-yellow { + color: #ffeb3b !important; +} +.text-yellow-1 { + color: #fffde7 !important; +} +.text-yellow-2 { + color: #fff9c4 !important; +} +.text-yellow-3 { + color: #fff59d !important; +} +.text-yellow-4 { + color: #fff176 !important; +} +.text-yellow-5 { + color: #ffee58 !important; +} +.text-yellow-6 { + color: #ffeb3b !important; +} +.text-yellow-7 { + color: #fdd835 !important; +} +.text-yellow-8 { + color: #fbc02d !important; +} +.text-yellow-9 { + color: #f9a825 !important; +} +.text-yellow-10 { + color: #f57f17 !important; +} +.text-yellow-11 { + color: #ffff8d !important; +} +.text-yellow-12 { + color: #ff0 !important; +} +.text-yellow-13 { + color: #ffea00 !important; +} +.text-yellow-14 { + color: #ffd600 !important; +} +.text-amber { + color: #ffc107 !important; +} +.text-amber-1 { + color: #fff8e1 !important; +} +.text-amber-2 { + color: #ffecb3 !important; +} +.text-amber-3 { + color: #ffe082 !important; +} +.text-amber-4 { + color: #ffd54f !important; +} +.text-amber-5 { + color: #ffca28 !important; +} +.text-amber-6 { + color: #ffc107 !important; +} +.text-amber-7 { + color: #ffb300 !important; +} +.text-amber-8 { + color: #ffa000 !important; +} +.text-amber-9 { + color: #ff8f00 !important; +} +.text-amber-10 { + color: #ff6f00 !important; +} +.text-amber-11 { + color: #ffe57f !important; +} +.text-amber-12 { + color: #ffd740 !important; +} +.text-amber-13 { + color: #ffc400 !important; +} +.text-amber-14 { + color: #ffab00 !important; +} +.text-orange { + color: #ff9800 !important; +} +.text-orange-1 { + color: #fff3e0 !important; +} +.text-orange-2 { + color: #ffe0b2 !important; +} +.text-orange-3 { + color: #ffcc80 !important; +} +.text-orange-4 { + color: #ffb74d !important; +} +.text-orange-5 { + color: #ffa726 !important; +} +.text-orange-6 { + color: #ff9800 !important; +} +.text-orange-7 { + color: #fb8c00 !important; +} +.text-orange-8 { + color: #f57c00 !important; +} +.text-orange-9 { + color: #ef6c00 !important; +} +.text-orange-10 { + color: #e65100 !important; +} +.text-orange-11 { + color: #ffd180 !important; +} +.text-orange-12 { + color: #ffab40 !important; +} +.text-orange-13 { + color: #ff9100 !important; +} +.text-orange-14 { + color: #ff6d00 !important; +} +.text-deep-orange { + color: #ff5722 !important; +} +.text-deep-orange-1 { + color: #fbe9e7 !important; +} +.text-deep-orange-2 { + color: #ffccbc !important; +} +.text-deep-orange-3 { + color: #ffab91 !important; +} +.text-deep-orange-4 { + color: #ff8a65 !important; +} +.text-deep-orange-5 { + color: #ff7043 !important; +} +.text-deep-orange-6 { + color: #ff5722 !important; +} +.text-deep-orange-7 { + color: #f4511e !important; +} +.text-deep-orange-8 { + color: #e64a19 !important; +} +.text-deep-orange-9 { + color: #d84315 !important; +} +.text-deep-orange-10 { + color: #bf360c !important; +} +.text-deep-orange-11 { + color: #ff9e80 !important; +} +.text-deep-orange-12 { + color: #ff6e40 !important; +} +.text-deep-orange-13 { + color: #ff3d00 !important; +} +.text-deep-orange-14 { + color: #dd2c00 !important; +} +.text-brown { + color: #795548 !important; +} +.text-brown-1 { + color: #efebe9 !important; +} +.text-brown-2 { + color: #d7ccc8 !important; +} +.text-brown-3 { + color: #bcaaa4 !important; +} +.text-brown-4 { + color: #a1887f !important; +} +.text-brown-5 { + color: #8d6e63 !important; +} +.text-brown-6 { + color: #795548 !important; +} +.text-brown-7 { + color: #6d4c41 !important; +} +.text-brown-8 { + color: #5d4037 !important; +} +.text-brown-9 { + color: #4e342e !important; +} +.text-brown-10 { + color: #3e2723 !important; +} +.text-brown-11 { + color: #d7ccc8 !important; +} +.text-brown-12 { + color: #bcaaa4 !important; +} +.text-brown-13 { + color: #8d6e63 !important; +} +.text-brown-14 { + color: #5d4037 !important; +} +.text-grey { + color: #9e9e9e !important; +} +.text-grey-1 { + color: #fafafa !important; +} +.text-grey-2 { + color: #f5f5f5 !important; +} +.text-grey-3 { + color: #eee !important; +} +.text-grey-4 { + color: #e0e0e0 !important; +} +.text-grey-5 { + color: #bdbdbd !important; +} +.text-grey-6 { + color: #9e9e9e !important; +} +.text-grey-7 { + color: #757575 !important; +} +.text-grey-8 { + color: #616161 !important; +} +.text-grey-9 { + color: #424242 !important; +} +.text-grey-10 { + color: #212121 !important; +} +.text-grey-11 { + color: #f5f5f5 !important; +} +.text-grey-12 { + color: #eee !important; +} +.text-grey-13 { + color: #bdbdbd !important; +} +.text-grey-14 { + color: #616161 !important; +} +.text-blue-grey { + color: #607d8b !important; +} +.text-blue-grey-1 { + color: #eceff1 !important; +} +.text-blue-grey-2 { + color: #cfd8dc !important; +} +.text-blue-grey-3 { + color: #b0bec5 !important; +} +.text-blue-grey-4 { + color: #90a4ae !important; +} +.text-blue-grey-5 { + color: #78909c !important; +} +.text-blue-grey-6 { + color: #607d8b !important; +} +.text-blue-grey-7 { + color: #546e7a !important; +} +.text-blue-grey-8 { + color: #455a64 !important; +} +.text-blue-grey-9 { + color: #37474f !important; +} +.text-blue-grey-10 { + color: #263238 !important; +} +.text-blue-grey-11 { + color: #cfd8dc !important; +} +.text-blue-grey-12 { + color: #b0bec5 !important; +} +.text-blue-grey-13 { + color: #78909c !important; +} +.text-blue-grey-14 { + color: #455a64 !important; +} +.bg-red { + background: #f44336 !important; +} +.bg-red-1 { + background: #ffebee !important; +} +.bg-red-2 { + background: #ffcdd2 !important; +} +.bg-red-3 { + background: #ef9a9a !important; +} +.bg-red-4 { + background: #e57373 !important; +} +.bg-red-5 { + background: #ef5350 !important; +} +.bg-red-6 { + background: #f44336 !important; +} +.bg-red-7 { + background: #e53935 !important; +} +.bg-red-8 { + background: #d32f2f !important; +} +.bg-red-9 { + background: #c62828 !important; +} +.bg-red-10 { + background: #b71c1c !important; +} +.bg-red-11 { + background: #ff8a80 !important; +} +.bg-red-12 { + background: #ff5252 !important; +} +.bg-red-13 { + background: #ff1744 !important; +} +.bg-red-14 { + background: #d50000 !important; +} +.bg-pink { + background: #e91e63 !important; +} +.bg-pink-1 { + background: #fce4ec !important; +} +.bg-pink-2 { + background: #f8bbd0 !important; +} +.bg-pink-3 { + background: #f48fb1 !important; +} +.bg-pink-4 { + background: #f06292 !important; +} +.bg-pink-5 { + background: #ec407a !important; +} +.bg-pink-6 { + background: #e91e63 !important; +} +.bg-pink-7 { + background: #d81b60 !important; +} +.bg-pink-8 { + background: #c2185b !important; +} +.bg-pink-9 { + background: #ad1457 !important; +} +.bg-pink-10 { + background: #880e4f !important; +} +.bg-pink-11 { + background: #ff80ab !important; +} +.bg-pink-12 { + background: #ff4081 !important; +} +.bg-pink-13 { + background: #f50057 !important; +} +.bg-pink-14 { + background: #c51162 !important; +} +.bg-purple { + background: #9c27b0 !important; +} +.bg-purple-1 { + background: #f3e5f5 !important; +} +.bg-purple-2 { + background: #e1bee7 !important; +} +.bg-purple-3 { + background: #ce93d8 !important; +} +.bg-purple-4 { + background: #ba68c8 !important; +} +.bg-purple-5 { + background: #ab47bc !important; +} +.bg-purple-6 { + background: #9c27b0 !important; +} +.bg-purple-7 { + background: #8e24aa !important; +} +.bg-purple-8 { + background: #7b1fa2 !important; +} +.bg-purple-9 { + background: #6a1b9a !important; +} +.bg-purple-10 { + background: #4a148c !important; +} +.bg-purple-11 { + background: #ea80fc !important; +} +.bg-purple-12 { + background: #e040fb !important; +} +.bg-purple-13 { + background: #d500f9 !important; +} +.bg-purple-14 { + background: #a0f !important; +} +.bg-deep-purple { + background: #673ab7 !important; +} +.bg-deep-purple-1 { + background: #ede7f6 !important; +} +.bg-deep-purple-2 { + background: #d1c4e9 !important; +} +.bg-deep-purple-3 { + background: #b39ddb !important; +} +.bg-deep-purple-4 { + background: #9575cd !important; +} +.bg-deep-purple-5 { + background: #7e57c2 !important; +} +.bg-deep-purple-6 { + background: #673ab7 !important; +} +.bg-deep-purple-7 { + background: #5e35b1 !important; +} +.bg-deep-purple-8 { + background: #512da8 !important; +} +.bg-deep-purple-9 { + background: #4527a0 !important; +} +.bg-deep-purple-10 { + background: #311b92 !important; +} +.bg-deep-purple-11 { + background: #b388ff !important; +} +.bg-deep-purple-12 { + background: #7c4dff !important; +} +.bg-deep-purple-13 { + background: #651fff !important; +} +.bg-deep-purple-14 { + background: #6200ea !important; +} +.bg-indigo { + background: #3f51b5 !important; +} +.bg-indigo-1 { + background: #e8eaf6 !important; +} +.bg-indigo-2 { + background: #c5cae9 !important; +} +.bg-indigo-3 { + background: #9fa8da !important; +} +.bg-indigo-4 { + background: #7986cb !important; +} +.bg-indigo-5 { + background: #5c6bc0 !important; +} +.bg-indigo-6 { + background: #3f51b5 !important; +} +.bg-indigo-7 { + background: #3949ab !important; +} +.bg-indigo-8 { + background: #303f9f !important; +} +.bg-indigo-9 { + background: #283593 !important; +} +.bg-indigo-10 { + background: #1a237e !important; +} +.bg-indigo-11 { + background: #8c9eff !important; +} +.bg-indigo-12 { + background: #536dfe !important; +} +.bg-indigo-13 { + background: #3d5afe !important; +} +.bg-indigo-14 { + background: #304ffe !important; +} +.bg-blue { + background: #2196f3 !important; +} +.bg-blue-1 { + background: #e3f2fd !important; +} +.bg-blue-2 { + background: #bbdefb !important; +} +.bg-blue-3 { + background: #90caf9 !important; +} +.bg-blue-4 { + background: #64b5f6 !important; +} +.bg-blue-5 { + background: #42a5f5 !important; +} +.bg-blue-6 { + background: #2196f3 !important; +} +.bg-blue-7 { + background: #1e88e5 !important; +} +.bg-blue-8 { + background: #1976d2 !important; +} +.bg-blue-9 { + background: #1565c0 !important; +} +.bg-blue-10 { + background: #0d47a1 !important; +} +.bg-blue-11 { + background: #82b1ff !important; +} +.bg-blue-12 { + background: #448aff !important; +} +.bg-blue-13 { + background: #2979ff !important; +} +.bg-blue-14 { + background: #2962ff !important; +} +.bg-light-blue { + background: #03a9f4 !important; +} +.bg-light-blue-1 { + background: #e1f5fe !important; +} +.bg-light-blue-2 { + background: #b3e5fc !important; +} +.bg-light-blue-3 { + background: #81d4fa !important; +} +.bg-light-blue-4 { + background: #4fc3f7 !important; +} +.bg-light-blue-5 { + background: #29b6f6 !important; +} +.bg-light-blue-6 { + background: #03a9f4 !important; +} +.bg-light-blue-7 { + background: #039be5 !important; +} +.bg-light-blue-8 { + background: #0288d1 !important; +} +.bg-light-blue-9 { + background: #0277bd !important; +} +.bg-light-blue-10 { + background: #01579b !important; +} +.bg-light-blue-11 { + background: #80d8ff !important; +} +.bg-light-blue-12 { + background: #40c4ff !important; +} +.bg-light-blue-13 { + background: #00b0ff !important; +} +.bg-light-blue-14 { + background: #0091ea !important; +} +.bg-cyan { + background: #00bcd4 !important; +} +.bg-cyan-1 { + background: #e0f7fa !important; +} +.bg-cyan-2 { + background: #b2ebf2 !important; +} +.bg-cyan-3 { + background: #80deea !important; +} +.bg-cyan-4 { + background: #4dd0e1 !important; +} +.bg-cyan-5 { + background: #26c6da !important; +} +.bg-cyan-6 { + background: #00bcd4 !important; +} +.bg-cyan-7 { + background: #00acc1 !important; +} +.bg-cyan-8 { + background: #0097a7 !important; +} +.bg-cyan-9 { + background: #00838f !important; +} +.bg-cyan-10 { + background: #006064 !important; +} +.bg-cyan-11 { + background: #84ffff !important; +} +.bg-cyan-12 { + background: #18ffff !important; +} +.bg-cyan-13 { + background: #00e5ff !important; +} +.bg-cyan-14 { + background: #00b8d4 !important; +} +.bg-teal { + background: #009688 !important; +} +.bg-teal-1 { + background: #e0f2f1 !important; +} +.bg-teal-2 { + background: #b2dfdb !important; +} +.bg-teal-3 { + background: #80cbc4 !important; +} +.bg-teal-4 { + background: #4db6ac !important; +} +.bg-teal-5 { + background: #26a69a !important; +} +.bg-teal-6 { + background: #009688 !important; +} +.bg-teal-7 { + background: #00897b !important; +} +.bg-teal-8 { + background: #00796b !important; +} +.bg-teal-9 { + background: #00695c !important; +} +.bg-teal-10 { + background: #004d40 !important; +} +.bg-teal-11 { + background: #a7ffeb !important; +} +.bg-teal-12 { + background: #64ffda !important; +} +.bg-teal-13 { + background: #1de9b6 !important; +} +.bg-teal-14 { + background: #00bfa5 !important; +} +.bg-green { + background: #4caf50 !important; +} +.bg-green-1 { + background: #e8f5e9 !important; +} +.bg-green-2 { + background: #c8e6c9 !important; +} +.bg-green-3 { + background: #a5d6a7 !important; +} +.bg-green-4 { + background: #81c784 !important; +} +.bg-green-5 { + background: #66bb6a !important; +} +.bg-green-6 { + background: #4caf50 !important; +} +.bg-green-7 { + background: #43a047 !important; +} +.bg-green-8 { + background: #388e3c !important; +} +.bg-green-9 { + background: #2e7d32 !important; +} +.bg-green-10 { + background: #1b5e20 !important; +} +.bg-green-11 { + background: #b9f6ca !important; +} +.bg-green-12 { + background: #69f0ae !important; +} +.bg-green-13 { + background: #00e676 !important; +} +.bg-green-14 { + background: #00c853 !important; +} +.bg-light-green { + background: #8bc34a !important; +} +.bg-light-green-1 { + background: #f1f8e9 !important; +} +.bg-light-green-2 { + background: #dcedc8 !important; +} +.bg-light-green-3 { + background: #c5e1a5 !important; +} +.bg-light-green-4 { + background: #aed581 !important; +} +.bg-light-green-5 { + background: #9ccc65 !important; +} +.bg-light-green-6 { + background: #8bc34a !important; +} +.bg-light-green-7 { + background: #7cb342 !important; +} +.bg-light-green-8 { + background: #689f38 !important; +} +.bg-light-green-9 { + background: #558b2f !important; +} +.bg-light-green-10 { + background: #33691e !important; +} +.bg-light-green-11 { + background: #ccff90 !important; +} +.bg-light-green-12 { + background: #b2ff59 !important; +} +.bg-light-green-13 { + background: #76ff03 !important; +} +.bg-light-green-14 { + background: #64dd17 !important; +} +.bg-lime { + background: #cddc39 !important; +} +.bg-lime-1 { + background: #f9fbe7 !important; +} +.bg-lime-2 { + background: #f0f4c3 !important; +} +.bg-lime-3 { + background: #e6ee9c !important; +} +.bg-lime-4 { + background: #dce775 !important; +} +.bg-lime-5 { + background: #d4e157 !important; +} +.bg-lime-6 { + background: #cddc39 !important; +} +.bg-lime-7 { + background: #c0ca33 !important; +} +.bg-lime-8 { + background: #afb42b !important; +} +.bg-lime-9 { + background: #9e9d24 !important; +} +.bg-lime-10 { + background: #827717 !important; +} +.bg-lime-11 { + background: #f4ff81 !important; +} +.bg-lime-12 { + background: #eeff41 !important; +} +.bg-lime-13 { + background: #c6ff00 !important; +} +.bg-lime-14 { + background: #aeea00 !important; +} +.bg-yellow { + background: #ffeb3b !important; +} +.bg-yellow-1 { + background: #fffde7 !important; +} +.bg-yellow-2 { + background: #fff9c4 !important; +} +.bg-yellow-3 { + background: #fff59d !important; +} +.bg-yellow-4 { + background: #fff176 !important; +} +.bg-yellow-5 { + background: #ffee58 !important; +} +.bg-yellow-6 { + background: #ffeb3b !important; +} +.bg-yellow-7 { + background: #fdd835 !important; +} +.bg-yellow-8 { + background: #fbc02d !important; +} +.bg-yellow-9 { + background: #f9a825 !important; +} +.bg-yellow-10 { + background: #f57f17 !important; +} +.bg-yellow-11 { + background: #ffff8d !important; +} +.bg-yellow-12 { + background: #ff0 !important; +} +.bg-yellow-13 { + background: #ffea00 !important; +} +.bg-yellow-14 { + background: #ffd600 !important; +} +.bg-amber { + background: #ffc107 !important; +} +.bg-amber-1 { + background: #fff8e1 !important; +} +.bg-amber-2 { + background: #ffecb3 !important; +} +.bg-amber-3 { + background: #ffe082 !important; +} +.bg-amber-4 { + background: #ffd54f !important; +} +.bg-amber-5 { + background: #ffca28 !important; +} +.bg-amber-6 { + background: #ffc107 !important; +} +.bg-amber-7 { + background: #ffb300 !important; +} +.bg-amber-8 { + background: #ffa000 !important; +} +.bg-amber-9 { + background: #ff8f00 !important; +} +.bg-amber-10 { + background: #ff6f00 !important; +} +.bg-amber-11 { + background: #ffe57f !important; +} +.bg-amber-12 { + background: #ffd740 !important; +} +.bg-amber-13 { + background: #ffc400 !important; +} +.bg-amber-14 { + background: #ffab00 !important; +} +.bg-orange { + background: #ff9800 !important; +} +.bg-orange-1 { + background: #fff3e0 !important; +} +.bg-orange-2 { + background: #ffe0b2 !important; +} +.bg-orange-3 { + background: #ffcc80 !important; +} +.bg-orange-4 { + background: #ffb74d !important; +} +.bg-orange-5 { + background: #ffa726 !important; +} +.bg-orange-6 { + background: #ff9800 !important; +} +.bg-orange-7 { + background: #fb8c00 !important; +} +.bg-orange-8 { + background: #f57c00 !important; +} +.bg-orange-9 { + background: #ef6c00 !important; +} +.bg-orange-10 { + background: #e65100 !important; +} +.bg-orange-11 { + background: #ffd180 !important; +} +.bg-orange-12 { + background: #ffab40 !important; +} +.bg-orange-13 { + background: #ff9100 !important; +} +.bg-orange-14 { + background: #ff6d00 !important; +} +.bg-deep-orange { + background: #ff5722 !important; +} +.bg-deep-orange-1 { + background: #fbe9e7 !important; +} +.bg-deep-orange-2 { + background: #ffccbc !important; +} +.bg-deep-orange-3 { + background: #ffab91 !important; +} +.bg-deep-orange-4 { + background: #ff8a65 !important; +} +.bg-deep-orange-5 { + background: #ff7043 !important; +} +.bg-deep-orange-6 { + background: #ff5722 !important; +} +.bg-deep-orange-7 { + background: #f4511e !important; +} +.bg-deep-orange-8 { + background: #e64a19 !important; +} +.bg-deep-orange-9 { + background: #d84315 !important; +} +.bg-deep-orange-10 { + background: #bf360c !important; +} +.bg-deep-orange-11 { + background: #ff9e80 !important; +} +.bg-deep-orange-12 { + background: #ff6e40 !important; +} +.bg-deep-orange-13 { + background: #ff3d00 !important; +} +.bg-deep-orange-14 { + background: #dd2c00 !important; +} +.bg-brown { + background: #795548 !important; +} +.bg-brown-1 { + background: #efebe9 !important; +} +.bg-brown-2 { + background: #d7ccc8 !important; +} +.bg-brown-3 { + background: #bcaaa4 !important; +} +.bg-brown-4 { + background: #a1887f !important; +} +.bg-brown-5 { + background: #8d6e63 !important; +} +.bg-brown-6 { + background: #795548 !important; +} +.bg-brown-7 { + background: #6d4c41 !important; +} +.bg-brown-8 { + background: #5d4037 !important; +} +.bg-brown-9 { + background: #4e342e !important; +} +.bg-brown-10 { + background: #3e2723 !important; +} +.bg-brown-11 { + background: #d7ccc8 !important; +} +.bg-brown-12 { + background: #bcaaa4 !important; +} +.bg-brown-13 { + background: #8d6e63 !important; +} +.bg-brown-14 { + background: #5d4037 !important; +} +.bg-grey { + background: #9e9e9e !important; +} +.bg-grey-1 { + background: #fafafa !important; +} +.bg-grey-2 { + background: #f5f5f5 !important; +} +.bg-grey-3 { + background: #eee !important; +} +.bg-grey-4 { + background: #e0e0e0 !important; +} +.bg-grey-5 { + background: #bdbdbd !important; +} +.bg-grey-6 { + background: #9e9e9e !important; +} +.bg-grey-7 { + background: #757575 !important; +} +.bg-grey-8 { + background: #616161 !important; +} +.bg-grey-9 { + background: #424242 !important; +} +.bg-grey-10 { + background: #212121 !important; +} +.bg-grey-11 { + background: #f5f5f5 !important; +} +.bg-grey-12 { + background: #eee !important; +} +.bg-grey-13 { + background: #bdbdbd !important; +} +.bg-grey-14 { + background: #616161 !important; +} +.bg-blue-grey { + background: #607d8b !important; +} +.bg-blue-grey-1 { + background: #eceff1 !important; +} +.bg-blue-grey-2 { + background: #cfd8dc !important; +} +.bg-blue-grey-3 { + background: #b0bec5 !important; +} +.bg-blue-grey-4 { + background: #90a4ae !important; +} +.bg-blue-grey-5 { + background: #78909c !important; +} +.bg-blue-grey-6 { + background: #607d8b !important; +} +.bg-blue-grey-7 { + background: #546e7a !important; +} +.bg-blue-grey-8 { + background: #455a64 !important; +} +.bg-blue-grey-9 { + background: #37474f !important; +} +.bg-blue-grey-10 { + background: #263238 !important; +} +.bg-blue-grey-11 { + background: #cfd8dc !important; +} +.bg-blue-grey-12 { + background: #b0bec5 !important; +} +.bg-blue-grey-13 { + background: #78909c !important; +} +.bg-blue-grey-14 { + background: #455a64 !important; +} +.shadow-transition { + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) !important; +} +.shadow-1 { + box-shadow: 0 1px 3px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12); +} +.shadow-up-1 { + box-shadow: 0 -1px 3px rgba(0,0,0,0.2), 0 -1px 1px rgba(0,0,0,0.14), 0 -2px 1px -1px rgba(0,0,0,0.12); +} +.shadow-2 { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +.shadow-up-2 { + box-shadow: 0 -1px 5px rgba(0,0,0,0.2), 0 -2px 2px rgba(0,0,0,0.14), 0 -3px 1px -2px rgba(0,0,0,0.12); +} +.shadow-3 { + box-shadow: 0 1px 8px rgba(0,0,0,0.2), 0 3px 4px rgba(0,0,0,0.14), 0 3px 3px -2px rgba(0,0,0,0.12); +} +.shadow-up-3 { + box-shadow: 0 -1px 8px rgba(0,0,0,0.2), 0 -3px 4px rgba(0,0,0,0.14), 0 -3px 3px -2px rgba(0,0,0,0.12); +} +.shadow-4 { + box-shadow: 0 2px 4px -1px rgba(0,0,0,0.2), 0 4px 5px rgba(0,0,0,0.14), 0 1px 10px rgba(0,0,0,0.12); +} +.shadow-up-4 { + box-shadow: 0 -2px 4px -1px rgba(0,0,0,0.2), 0 -4px 5px rgba(0,0,0,0.14), 0 -1px 10px rgba(0,0,0,0.12); +} +.shadow-5 { + box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 5px 8px rgba(0,0,0,0.14), 0 1px 14px rgba(0,0,0,0.12); +} +.shadow-up-5 { + box-shadow: 0 -3px 5px -1px rgba(0,0,0,0.2), 0 -5px 8px rgba(0,0,0,0.14), 0 -1px 14px rgba(0,0,0,0.12); +} +.shadow-6 { + box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 6px 10px rgba(0,0,0,0.14), 0 1px 18px rgba(0,0,0,0.12); +} +.shadow-up-6 { + box-shadow: 0 -3px 5px -1px rgba(0,0,0,0.2), 0 -6px 10px rgba(0,0,0,0.14), 0 -1px 18px rgba(0,0,0,0.12); +} +.shadow-7 { + box-shadow: 0 4px 5px -2px rgba(0,0,0,0.2), 0 7px 10px 1px rgba(0,0,0,0.14), 0 2px 16px 1px rgba(0,0,0,0.12); +} +.shadow-up-7 { + box-shadow: 0 -4px 5px -2px rgba(0,0,0,0.2), 0 -7px 10px 1px rgba(0,0,0,0.14), 0 -2px 16px 1px rgba(0,0,0,0.12); +} +.shadow-8 { + box-shadow: 0 5px 5px -3px rgba(0,0,0,0.2), 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12); +} +.shadow-up-8 { + box-shadow: 0 -5px 5px -3px rgba(0,0,0,0.2), 0 -8px 10px 1px rgba(0,0,0,0.14), 0 -3px 14px 2px rgba(0,0,0,0.12); +} +.shadow-9 { + box-shadow: 0 5px 6px -3px rgba(0,0,0,0.2), 0 9px 12px 1px rgba(0,0,0,0.14), 0 3px 16px 2px rgba(0,0,0,0.12); +} +.shadow-up-9 { + box-shadow: 0 -5px 6px -3px rgba(0,0,0,0.2), 0 -9px 12px 1px rgba(0,0,0,0.14), 0 -3px 16px 2px rgba(0,0,0,0.12); +} +.shadow-10 { + box-shadow: 0 6px 6px -3px rgba(0,0,0,0.2), 0 10px 14px 1px rgba(0,0,0,0.14), 0 4px 18px 3px rgba(0,0,0,0.12); +} +.shadow-up-10 { + box-shadow: 0 -6px 6px -3px rgba(0,0,0,0.2), 0 -10px 14px 1px rgba(0,0,0,0.14), 0 -4px 18px 3px rgba(0,0,0,0.12); +} +.shadow-11 { + box-shadow: 0 6px 7px -4px rgba(0,0,0,0.2), 0 11px 15px 1px rgba(0,0,0,0.14), 0 4px 20px 3px rgba(0,0,0,0.12); +} +.shadow-up-11 { + box-shadow: 0 -6px 7px -4px rgba(0,0,0,0.2), 0 -11px 15px 1px rgba(0,0,0,0.14), 0 -4px 20px 3px rgba(0,0,0,0.12); +} +.shadow-12 { + box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 12px 17px 2px rgba(0,0,0,0.14), 0 5px 22px 4px rgba(0,0,0,0.12); +} +.shadow-up-12 { + box-shadow: 0 -7px 8px -4px rgba(0,0,0,0.2), 0 -12px 17px 2px rgba(0,0,0,0.14), 0 -5px 22px 4px rgba(0,0,0,0.12); +} +.shadow-13 { + box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12); +} +.shadow-up-13 { + box-shadow: 0 -7px 8px -4px rgba(0,0,0,0.2), 0 -13px 19px 2px rgba(0,0,0,0.14), 0 -5px 24px 4px rgba(0,0,0,0.12); +} +.shadow-14 { + box-shadow: 0 7px 9px -4px rgba(0,0,0,0.2), 0 14px 21px 2px rgba(0,0,0,0.14), 0 5px 26px 4px rgba(0,0,0,0.12); +} +.shadow-up-14 { + box-shadow: 0 -7px 9px -4px rgba(0,0,0,0.2), 0 -14px 21px 2px rgba(0,0,0,0.14), 0 -5px 26px 4px rgba(0,0,0,0.12); +} +.shadow-15 { + box-shadow: 0 8px 9px -5px rgba(0,0,0,0.2), 0 15px 22px 2px rgba(0,0,0,0.14), 0 6px 28px 5px rgba(0,0,0,0.12); +} +.shadow-up-15 { + box-shadow: 0 -8px 9px -5px rgba(0,0,0,0.2), 0 -15px 22px 2px rgba(0,0,0,0.14), 0 -6px 28px 5px rgba(0,0,0,0.12); +} +.shadow-16 { + box-shadow: 0 8px 10px -5px rgba(0,0,0,0.2), 0 16px 24px 2px rgba(0,0,0,0.14), 0 6px 30px 5px rgba(0,0,0,0.12); +} +.shadow-up-16 { + box-shadow: 0 -8px 10px -5px rgba(0,0,0,0.2), 0 -16px 24px 2px rgba(0,0,0,0.14), 0 -6px 30px 5px rgba(0,0,0,0.12); +} +.shadow-17 { + box-shadow: 0 8px 11px -5px rgba(0,0,0,0.2), 0 17px 26px 2px rgba(0,0,0,0.14), 0 6px 32px 5px rgba(0,0,0,0.12); +} +.shadow-up-17 { + box-shadow: 0 -8px 11px -5px rgba(0,0,0,0.2), 0 -17px 26px 2px rgba(0,0,0,0.14), 0 -6px 32px 5px rgba(0,0,0,0.12); +} +.shadow-18 { + box-shadow: 0 9px 11px -5px rgba(0,0,0,0.2), 0 18px 28px 2px rgba(0,0,0,0.14), 0 7px 34px 6px rgba(0,0,0,0.12); +} +.shadow-up-18 { + box-shadow: 0 -9px 11px -5px rgba(0,0,0,0.2), 0 -18px 28px 2px rgba(0,0,0,0.14), 0 -7px 34px 6px rgba(0,0,0,0.12); +} +.shadow-19 { + box-shadow: 0 9px 12px -6px rgba(0,0,0,0.2), 0 19px 29px 2px rgba(0,0,0,0.14), 0 7px 36px 6px rgba(0,0,0,0.12); +} +.shadow-up-19 { + box-shadow: 0 -9px 12px -6px rgba(0,0,0,0.2), 0 -19px 29px 2px rgba(0,0,0,0.14), 0 -7px 36px 6px rgba(0,0,0,0.12); +} +.shadow-20 { + box-shadow: 0 10px 13px -6px rgba(0,0,0,0.2), 0 20px 31px 3px rgba(0,0,0,0.14), 0 8px 38px 7px rgba(0,0,0,0.12); +} +.shadow-up-20 { + box-shadow: 0 -10px 13px -6px rgba(0,0,0,0.2), 0 -20px 31px 3px rgba(0,0,0,0.14), 0 -8px 38px 7px rgba(0,0,0,0.12); +} +.shadow-21 { + box-shadow: 0 10px 13px -6px rgba(0,0,0,0.2), 0 21px 33px 3px rgba(0,0,0,0.14), 0 8px 40px 7px rgba(0,0,0,0.12); +} +.shadow-up-21 { + box-shadow: 0 -10px 13px -6px rgba(0,0,0,0.2), 0 -21px 33px 3px rgba(0,0,0,0.14), 0 -8px 40px 7px rgba(0,0,0,0.12); +} +.shadow-22 { + box-shadow: 0 10px 14px -6px rgba(0,0,0,0.2), 0 22px 35px 3px rgba(0,0,0,0.14), 0 8px 42px 7px rgba(0,0,0,0.12); +} +.shadow-up-22 { + box-shadow: 0 -10px 14px -6px rgba(0,0,0,0.2), 0 -22px 35px 3px rgba(0,0,0,0.14), 0 -8px 42px 7px rgba(0,0,0,0.12); +} +.shadow-23 { + box-shadow: 0 11px 14px -7px rgba(0,0,0,0.2), 0 23px 36px 3px rgba(0,0,0,0.14), 0 9px 44px 8px rgba(0,0,0,0.12); +} +.shadow-up-23 { + box-shadow: 0 -11px 14px -7px rgba(0,0,0,0.2), 0 -23px 36px 3px rgba(0,0,0,0.14), 0 -9px 44px 8px rgba(0,0,0,0.12); +} +.shadow-24 { + box-shadow: 0 11px 15px -7px rgba(0,0,0,0.2), 0 24px 38px 3px rgba(0,0,0,0.14), 0 9px 46px 8px rgba(0,0,0,0.12); +} +.shadow-up-24 { + box-shadow: 0 -11px 15px -7px rgba(0,0,0,0.2), 0 -24px 38px 3px rgba(0,0,0,0.14), 0 -9px 46px 8px rgba(0,0,0,0.12); +} +.no-shadow, +.shadow-0 { + box-shadow: none !important; +} +.inset-shadow { + box-shadow: 0 7px 9px -7px rgba(0,0,0,0.7) inset !important; +} +.inset-shadow-down { + box-shadow: 0 -7px 9px -7px rgba(0,0,0,0.7) inset !important; +} +.z-marginals { + z-index: 2000; +} +.z-notify { + z-index: 9500; +} +.z-fullscreen { + z-index: 6000; +} +.z-inherit { + z-index: inherit !important; +} +.row, +.column, +.flex { + display: flex; + flex-wrap: wrap; +} +.row.inline, +.column.inline, +.flex.inline { + display: inline-flex; +} +.row.reverse { + flex-direction: row-reverse; +} +.column { + flex-direction: column; +} +.column.reverse { + flex-direction: column-reverse; +} +.wrap { + flex-wrap: wrap; +} +.no-wrap { + flex-wrap: nowrap; +} +.reverse-wrap { + flex-wrap: wrap-reverse; +} +.order-first { + order: -10000; +} +.order-last { + order: 10000; +} +.order-none { + order: 0; +} +.justify-start { + justify-content: flex-start; +} +.justify-end { + justify-content: flex-end; +} +.justify-center, +.flex-center { + justify-content: center; +} +.justify-between { + justify-content: space-between; +} +.justify-around { + justify-content: space-around; +} +.justify-evenly { + justify-content: space-evenly; +} +.items-start { + align-items: flex-start; +} +.items-end { + align-items: flex-end; +} +.items-center, +.flex-center { + align-items: center; +} +.items-baseline { + align-items: baseline; +} +.items-stretch { + align-items: stretch; +} +.content-start { + align-content: flex-start; +} +.content-end { + align-content: flex-end; +} +.content-center { + align-content: center; +} +.content-stretch { + align-content: stretch; +} +.content-between { + align-content: space-between; +} +.content-around { + align-content: space-around; +} +.self-start { + align-self: flex-start; +} +.self-end { + align-self: flex-end; +} +.self-center { + align-self: center; +} +.self-baseline { + align-self: baseline; +} +.self-stretch { + align-self: stretch; +} +.q-gutter-x-none, +.q-gutter-none { + margin-left: 0; +} +.q-gutter-x-none > *, +.q-gutter-none > * { + margin-left: 0; +} +.q-gutter-y-none, +.q-gutter-none { + margin-top: 0; +} +.q-gutter-y-none > *, +.q-gutter-none > * { + margin-top: 0; +} +.q-col-gutter-x-none, +.q-col-gutter-none { + margin-left: 0; +} +.q-col-gutter-x-none > *, +.q-col-gutter-none > * { + padding-left: 0; +} +.q-col-gutter-y-none, +.q-col-gutter-none { + margin-top: 0; +} +.q-col-gutter-y-none > *, +.q-col-gutter-none > * { + padding-top: 0; +} +.q-gutter-x-xs, +.q-gutter-xs { + margin-left: -4px; +} +.q-gutter-x-xs > *, +.q-gutter-xs > * { + margin-left: 4px; +} +.q-gutter-y-xs, +.q-gutter-xs { + margin-top: -4px; +} +.q-gutter-y-xs > *, +.q-gutter-xs > * { + margin-top: 4px; +} +.q-col-gutter-x-xs, +.q-col-gutter-xs { + margin-left: -4px; +} +.q-col-gutter-x-xs > *, +.q-col-gutter-xs > * { + padding-left: 4px; +} +.q-col-gutter-y-xs, +.q-col-gutter-xs { + margin-top: -4px; +} +.q-col-gutter-y-xs > *, +.q-col-gutter-xs > * { + padding-top: 4px; +} +.q-gutter-x-sm, +.q-gutter-sm { + margin-left: -8px; +} +.q-gutter-x-sm > *, +.q-gutter-sm > * { + margin-left: 8px; +} +.q-gutter-y-sm, +.q-gutter-sm { + margin-top: -8px; +} +.q-gutter-y-sm > *, +.q-gutter-sm > * { + margin-top: 8px; +} +.q-col-gutter-x-sm, +.q-col-gutter-sm { + margin-left: -8px; +} +.q-col-gutter-x-sm > *, +.q-col-gutter-sm > * { + padding-left: 8px; +} +.q-col-gutter-y-sm, +.q-col-gutter-sm { + margin-top: -8px; +} +.q-col-gutter-y-sm > *, +.q-col-gutter-sm > * { + padding-top: 8px; +} +.q-gutter-x-md, +.q-gutter-md { + margin-left: -16px; +} +.q-gutter-x-md > *, +.q-gutter-md > * { + margin-left: 16px; +} +.q-gutter-y-md, +.q-gutter-md { + margin-top: -16px; +} +.q-gutter-y-md > *, +.q-gutter-md > * { + margin-top: 16px; +} +.q-col-gutter-x-md, +.q-col-gutter-md { + margin-left: -16px; +} +.q-col-gutter-x-md > *, +.q-col-gutter-md > * { + padding-left: 16px; +} +.q-col-gutter-y-md, +.q-col-gutter-md { + margin-top: -16px; +} +.q-col-gutter-y-md > *, +.q-col-gutter-md > * { + padding-top: 16px; +} +.q-gutter-x-lg, +.q-gutter-lg { + margin-left: -24px; +} +.q-gutter-x-lg > *, +.q-gutter-lg > * { + margin-left: 24px; +} +.q-gutter-y-lg, +.q-gutter-lg { + margin-top: -24px; +} +.q-gutter-y-lg > *, +.q-gutter-lg > * { + margin-top: 24px; +} +.q-col-gutter-x-lg, +.q-col-gutter-lg { + margin-left: -24px; +} +.q-col-gutter-x-lg > *, +.q-col-gutter-lg > * { + padding-left: 24px; +} +.q-col-gutter-y-lg, +.q-col-gutter-lg { + margin-top: -24px; +} +.q-col-gutter-y-lg > *, +.q-col-gutter-lg > * { + padding-top: 24px; +} +.q-gutter-x-xl, +.q-gutter-xl { + margin-left: -48px; +} +.q-gutter-x-xl > *, +.q-gutter-xl > * { + margin-left: 48px; +} +.q-gutter-y-xl, +.q-gutter-xl { + margin-top: -48px; +} +.q-gutter-y-xl > *, +.q-gutter-xl > * { + margin-top: 48px; +} +.q-col-gutter-x-xl, +.q-col-gutter-xl { + margin-left: -48px; +} +.q-col-gutter-x-xl > *, +.q-col-gutter-xl > * { + padding-left: 48px; +} +.q-col-gutter-y-xl, +.q-col-gutter-xl { + margin-top: -48px; +} +.q-col-gutter-y-xl > *, +.q-col-gutter-xl > * { + padding-top: 48px; +} +@media (min-width: 0) { + .row > .col, + .row > .col-xs, + .row > .col-auto, + .row > .col-xs-auto, + .row > .col-grow, + .row > .col-xs-grow, + .row > .col-shrink, + .row > .col-xs-shrink, + .row > .col-0, + .row > .col-xs-0, + .row > .col-1, + .row > .col-xs-1, + .row > .col-2, + .row > .col-xs-2, + .row > .col-3, + .row > .col-xs-3, + .row > .col-4, + .row > .col-xs-4, + .row > .col-5, + .row > .col-xs-5, + .row > .col-6, + .row > .col-xs-6, + .row > .col-7, + .row > .col-xs-7, + .row > .col-8, + .row > .col-xs-8, + .row > .col-9, + .row > .col-xs-9, + .row > .col-10, + .row > .col-xs-10, + .row > .col-11, + .row > .col-xs-11, + .row > .col-12, + .row > .col-xs-12, + .flex > .col, + .flex > .col-xs, + .flex > .col-auto, + .flex > .col-xs-auto, + .flex > .col-grow, + .flex > .col-xs-grow, + .flex > .col-shrink, + .flex > .col-xs-shrink, + .flex > .col-0, + .flex > .col-xs-0, + .flex > .col-1, + .flex > .col-xs-1, + .flex > .col-2, + .flex > .col-xs-2, + .flex > .col-3, + .flex > .col-xs-3, + .flex > .col-4, + .flex > .col-xs-4, + .flex > .col-5, + .flex > .col-xs-5, + .flex > .col-6, + .flex > .col-xs-6, + .flex > .col-7, + .flex > .col-xs-7, + .flex > .col-8, + .flex > .col-xs-8, + .flex > .col-9, + .flex > .col-xs-9, + .flex > .col-10, + .flex > .col-xs-10, + .flex > .col-11, + .flex > .col-xs-11, + .flex > .col-12, + .flex > .col-xs-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col, + .column > .col-xs, + .column > .col-auto, + .column > .col-xs-auto, + .column > .col-grow, + .column > .col-xs-grow, + .column > .col-shrink, + .column > .col-xs-shrink, + .column > .col-0, + .column > .col-xs-0, + .column > .col-1, + .column > .col-xs-1, + .column > .col-2, + .column > .col-xs-2, + .column > .col-3, + .column > .col-xs-3, + .column > .col-4, + .column > .col-xs-4, + .column > .col-5, + .column > .col-xs-5, + .column > .col-6, + .column > .col-xs-6, + .column > .col-7, + .column > .col-xs-7, + .column > .col-8, + .column > .col-xs-8, + .column > .col-9, + .column > .col-xs-9, + .column > .col-10, + .column > .col-xs-10, + .column > .col-11, + .column > .col-xs-11, + .column > .col-12, + .column > .col-xs-12, + .flex > .col, + .flex > .col-xs, + .flex > .col-auto, + .flex > .col-xs-auto, + .flex > .col-grow, + .flex > .col-xs-grow, + .flex > .col-shrink, + .flex > .col-xs-shrink, + .flex > .col-0, + .flex > .col-xs-0, + .flex > .col-1, + .flex > .col-xs-1, + .flex > .col-2, + .flex > .col-xs-2, + .flex > .col-3, + .flex > .col-xs-3, + .flex > .col-4, + .flex > .col-xs-4, + .flex > .col-5, + .flex > .col-xs-5, + .flex > .col-6, + .flex > .col-xs-6, + .flex > .col-7, + .flex > .col-xs-7, + .flex > .col-8, + .flex > .col-xs-8, + .flex > .col-9, + .flex > .col-xs-9, + .flex > .col-10, + .flex > .col-xs-10, + .flex > .col-11, + .flex > .col-xs-11, + .flex > .col-12, + .flex > .col-xs-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col, + .col-xs { + flex: 10000 1 0%; + } + .col-auto, + .col-xs-auto, + .col-0, + .col-xs-0, + .col-1, + .col-xs-1, + .col-2, + .col-xs-2, + .col-3, + .col-xs-3, + .col-4, + .col-xs-4, + .col-5, + .col-xs-5, + .col-6, + .col-xs-6, + .col-7, + .col-xs-7, + .col-8, + .col-xs-8, + .col-9, + .col-xs-9, + .col-10, + .col-xs-10, + .col-11, + .col-xs-11, + .col-12, + .col-xs-12 { + flex: 0 0 auto; + } + .col-grow, + .col-xs-grow { + flex: 1 0 auto; + } + .col-shrink, + .col-xs-shrink { + flex: 0 1 auto; + } + .row > .col-0, + .row > .col-xs-0 { + height: auto; + width: 0%; + } + .row > .offset-0, + .row > .offset-xs-0 { + margin-left: 0%; + } + .column > .col-0, + .column > .col-xs-0 { + height: 0%; + width: auto; + } + .row > .col-1, + .row > .col-xs-1 { + height: auto; + width: 8.3333%; + } + .row > .offset-1, + .row > .offset-xs-1 { + margin-left: 8.3333%; + } + .column > .col-1, + .column > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row > .col-2, + .row > .col-xs-2 { + height: auto; + width: 16.6667%; + } + .row > .offset-2, + .row > .offset-xs-2 { + margin-left: 16.6667%; + } + .column > .col-2, + .column > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row > .col-3, + .row > .col-xs-3 { + height: auto; + width: 25%; + } + .row > .offset-3, + .row > .offset-xs-3 { + margin-left: 25%; + } + .column > .col-3, + .column > .col-xs-3 { + height: 25%; + width: auto; + } + .row > .col-4, + .row > .col-xs-4 { + height: auto; + width: 33.3333%; + } + .row > .offset-4, + .row > .offset-xs-4 { + margin-left: 33.3333%; + } + .column > .col-4, + .column > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row > .col-5, + .row > .col-xs-5 { + height: auto; + width: 41.6667%; + } + .row > .offset-5, + .row > .offset-xs-5 { + margin-left: 41.6667%; + } + .column > .col-5, + .column > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row > .col-6, + .row > .col-xs-6 { + height: auto; + width: 50%; + } + .row > .offset-6, + .row > .offset-xs-6 { + margin-left: 50%; + } + .column > .col-6, + .column > .col-xs-6 { + height: 50%; + width: auto; + } + .row > .col-7, + .row > .col-xs-7 { + height: auto; + width: 58.3333%; + } + .row > .offset-7, + .row > .offset-xs-7 { + margin-left: 58.3333%; + } + .column > .col-7, + .column > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row > .col-8, + .row > .col-xs-8 { + height: auto; + width: 66.6667%; + } + .row > .offset-8, + .row > .offset-xs-8 { + margin-left: 66.6667%; + } + .column > .col-8, + .column > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row > .col-9, + .row > .col-xs-9 { + height: auto; + width: 75%; + } + .row > .offset-9, + .row > .offset-xs-9 { + margin-left: 75%; + } + .column > .col-9, + .column > .col-xs-9 { + height: 75%; + width: auto; + } + .row > .col-10, + .row > .col-xs-10 { + height: auto; + width: 83.3333%; + } + .row > .offset-10, + .row > .offset-xs-10 { + margin-left: 83.3333%; + } + .column > .col-10, + .column > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row > .col-11, + .row > .col-xs-11 { + height: auto; + width: 91.6667%; + } + .row > .offset-11, + .row > .offset-xs-11 { + margin-left: 91.6667%; + } + .column > .col-11, + .column > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row > .col-12, + .row > .col-xs-12 { + height: auto; + width: 100%; + } + .row > .offset-12, + .row > .offset-xs-12 { + margin-left: 100%; + } + .column > .col-12, + .column > .col-xs-12 { + height: 100%; + width: auto; + } + .row > .col-all { + height: auto; + flex: 0 0 100%; + } +} +@media (min-width: 600px) { + .row > .col-sm, + .row > .col-sm-auto, + .row > .col-sm-grow, + .row > .col-sm-shrink, + .row > .col-sm-0, + .row > .col-sm-1, + .row > .col-sm-2, + .row > .col-sm-3, + .row > .col-sm-4, + .row > .col-sm-5, + .row > .col-sm-6, + .row > .col-sm-7, + .row > .col-sm-8, + .row > .col-sm-9, + .row > .col-sm-10, + .row > .col-sm-11, + .row > .col-sm-12, + .flex > .col-sm, + .flex > .col-sm-auto, + .flex > .col-sm-grow, + .flex > .col-sm-shrink, + .flex > .col-sm-0, + .flex > .col-sm-1, + .flex > .col-sm-2, + .flex > .col-sm-3, + .flex > .col-sm-4, + .flex > .col-sm-5, + .flex > .col-sm-6, + .flex > .col-sm-7, + .flex > .col-sm-8, + .flex > .col-sm-9, + .flex > .col-sm-10, + .flex > .col-sm-11, + .flex > .col-sm-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col-sm, + .column > .col-sm-auto, + .column > .col-sm-grow, + .column > .col-sm-shrink, + .column > .col-sm-0, + .column > .col-sm-1, + .column > .col-sm-2, + .column > .col-sm-3, + .column > .col-sm-4, + .column > .col-sm-5, + .column > .col-sm-6, + .column > .col-sm-7, + .column > .col-sm-8, + .column > .col-sm-9, + .column > .col-sm-10, + .column > .col-sm-11, + .column > .col-sm-12, + .flex > .col-sm, + .flex > .col-sm-auto, + .flex > .col-sm-grow, + .flex > .col-sm-shrink, + .flex > .col-sm-0, + .flex > .col-sm-1, + .flex > .col-sm-2, + .flex > .col-sm-3, + .flex > .col-sm-4, + .flex > .col-sm-5, + .flex > .col-sm-6, + .flex > .col-sm-7, + .flex > .col-sm-8, + .flex > .col-sm-9, + .flex > .col-sm-10, + .flex > .col-sm-11, + .flex > .col-sm-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col-sm { + flex: 10000 1 0%; + } + .col-sm-auto, + .col-sm-0, + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12 { + flex: 0 0 auto; + } + .col-sm-grow { + flex: 1 0 auto; + } + .col-sm-shrink { + flex: 0 1 auto; + } + .row > .col-sm-0 { + height: auto; + width: 0%; + } + .row > .offset-sm-0 { + margin-left: 0%; + } + .column > .col-sm-0 { + height: 0%; + width: auto; + } + .row > .col-sm-1 { + height: auto; + width: 8.3333%; + } + .row > .offset-sm-1 { + margin-left: 8.3333%; + } + .column > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row > .col-sm-2 { + height: auto; + width: 16.6667%; + } + .row > .offset-sm-2 { + margin-left: 16.6667%; + } + .column > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row > .col-sm-3 { + height: auto; + width: 25%; + } + .row > .offset-sm-3 { + margin-left: 25%; + } + .column > .col-sm-3 { + height: 25%; + width: auto; + } + .row > .col-sm-4 { + height: auto; + width: 33.3333%; + } + .row > .offset-sm-4 { + margin-left: 33.3333%; + } + .column > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row > .col-sm-5 { + height: auto; + width: 41.6667%; + } + .row > .offset-sm-5 { + margin-left: 41.6667%; + } + .column > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row > .col-sm-6 { + height: auto; + width: 50%; + } + .row > .offset-sm-6 { + margin-left: 50%; + } + .column > .col-sm-6 { + height: 50%; + width: auto; + } + .row > .col-sm-7 { + height: auto; + width: 58.3333%; + } + .row > .offset-sm-7 { + margin-left: 58.3333%; + } + .column > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row > .col-sm-8 { + height: auto; + width: 66.6667%; + } + .row > .offset-sm-8 { + margin-left: 66.6667%; + } + .column > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row > .col-sm-9 { + height: auto; + width: 75%; + } + .row > .offset-sm-9 { + margin-left: 75%; + } + .column > .col-sm-9 { + height: 75%; + width: auto; + } + .row > .col-sm-10 { + height: auto; + width: 83.3333%; + } + .row > .offset-sm-10 { + margin-left: 83.3333%; + } + .column > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row > .col-sm-11 { + height: auto; + width: 91.6667%; + } + .row > .offset-sm-11 { + margin-left: 91.6667%; + } + .column > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row > .col-sm-12 { + height: auto; + width: 100%; + } + .row > .offset-sm-12 { + margin-left: 100%; + } + .column > .col-sm-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1024px) { + .row > .col-md, + .row > .col-md-auto, + .row > .col-md-grow, + .row > .col-md-shrink, + .row > .col-md-0, + .row > .col-md-1, + .row > .col-md-2, + .row > .col-md-3, + .row > .col-md-4, + .row > .col-md-5, + .row > .col-md-6, + .row > .col-md-7, + .row > .col-md-8, + .row > .col-md-9, + .row > .col-md-10, + .row > .col-md-11, + .row > .col-md-12, + .flex > .col-md, + .flex > .col-md-auto, + .flex > .col-md-grow, + .flex > .col-md-shrink, + .flex > .col-md-0, + .flex > .col-md-1, + .flex > .col-md-2, + .flex > .col-md-3, + .flex > .col-md-4, + .flex > .col-md-5, + .flex > .col-md-6, + .flex > .col-md-7, + .flex > .col-md-8, + .flex > .col-md-9, + .flex > .col-md-10, + .flex > .col-md-11, + .flex > .col-md-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col-md, + .column > .col-md-auto, + .column > .col-md-grow, + .column > .col-md-shrink, + .column > .col-md-0, + .column > .col-md-1, + .column > .col-md-2, + .column > .col-md-3, + .column > .col-md-4, + .column > .col-md-5, + .column > .col-md-6, + .column > .col-md-7, + .column > .col-md-8, + .column > .col-md-9, + .column > .col-md-10, + .column > .col-md-11, + .column > .col-md-12, + .flex > .col-md, + .flex > .col-md-auto, + .flex > .col-md-grow, + .flex > .col-md-shrink, + .flex > .col-md-0, + .flex > .col-md-1, + .flex > .col-md-2, + .flex > .col-md-3, + .flex > .col-md-4, + .flex > .col-md-5, + .flex > .col-md-6, + .flex > .col-md-7, + .flex > .col-md-8, + .flex > .col-md-9, + .flex > .col-md-10, + .flex > .col-md-11, + .flex > .col-md-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col-md { + flex: 10000 1 0%; + } + .col-md-auto, + .col-md-0, + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11, + .col-md-12 { + flex: 0 0 auto; + } + .col-md-grow { + flex: 1 0 auto; + } + .col-md-shrink { + flex: 0 1 auto; + } + .row > .col-md-0 { + height: auto; + width: 0%; + } + .row > .offset-md-0 { + margin-left: 0%; + } + .column > .col-md-0 { + height: 0%; + width: auto; + } + .row > .col-md-1 { + height: auto; + width: 8.3333%; + } + .row > .offset-md-1 { + margin-left: 8.3333%; + } + .column > .col-md-1 { + height: 8.3333%; + width: auto; + } + .row > .col-md-2 { + height: auto; + width: 16.6667%; + } + .row > .offset-md-2 { + margin-left: 16.6667%; + } + .column > .col-md-2 { + height: 16.6667%; + width: auto; + } + .row > .col-md-3 { + height: auto; + width: 25%; + } + .row > .offset-md-3 { + margin-left: 25%; + } + .column > .col-md-3 { + height: 25%; + width: auto; + } + .row > .col-md-4 { + height: auto; + width: 33.3333%; + } + .row > .offset-md-4 { + margin-left: 33.3333%; + } + .column > .col-md-4 { + height: 33.3333%; + width: auto; + } + .row > .col-md-5 { + height: auto; + width: 41.6667%; + } + .row > .offset-md-5 { + margin-left: 41.6667%; + } + .column > .col-md-5 { + height: 41.6667%; + width: auto; + } + .row > .col-md-6 { + height: auto; + width: 50%; + } + .row > .offset-md-6 { + margin-left: 50%; + } + .column > .col-md-6 { + height: 50%; + width: auto; + } + .row > .col-md-7 { + height: auto; + width: 58.3333%; + } + .row > .offset-md-7 { + margin-left: 58.3333%; + } + .column > .col-md-7 { + height: 58.3333%; + width: auto; + } + .row > .col-md-8 { + height: auto; + width: 66.6667%; + } + .row > .offset-md-8 { + margin-left: 66.6667%; + } + .column > .col-md-8 { + height: 66.6667%; + width: auto; + } + .row > .col-md-9 { + height: auto; + width: 75%; + } + .row > .offset-md-9 { + margin-left: 75%; + } + .column > .col-md-9 { + height: 75%; + width: auto; + } + .row > .col-md-10 { + height: auto; + width: 83.3333%; + } + .row > .offset-md-10 { + margin-left: 83.3333%; + } + .column > .col-md-10 { + height: 83.3333%; + width: auto; + } + .row > .col-md-11 { + height: auto; + width: 91.6667%; + } + .row > .offset-md-11 { + margin-left: 91.6667%; + } + .column > .col-md-11 { + height: 91.6667%; + width: auto; + } + .row > .col-md-12 { + height: auto; + width: 100%; + } + .row > .offset-md-12 { + margin-left: 100%; + } + .column > .col-md-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1440px) { + .row > .col-lg, + .row > .col-lg-auto, + .row > .col-lg-grow, + .row > .col-lg-shrink, + .row > .col-lg-0, + .row > .col-lg-1, + .row > .col-lg-2, + .row > .col-lg-3, + .row > .col-lg-4, + .row > .col-lg-5, + .row > .col-lg-6, + .row > .col-lg-7, + .row > .col-lg-8, + .row > .col-lg-9, + .row > .col-lg-10, + .row > .col-lg-11, + .row > .col-lg-12, + .flex > .col-lg, + .flex > .col-lg-auto, + .flex > .col-lg-grow, + .flex > .col-lg-shrink, + .flex > .col-lg-0, + .flex > .col-lg-1, + .flex > .col-lg-2, + .flex > .col-lg-3, + .flex > .col-lg-4, + .flex > .col-lg-5, + .flex > .col-lg-6, + .flex > .col-lg-7, + .flex > .col-lg-8, + .flex > .col-lg-9, + .flex > .col-lg-10, + .flex > .col-lg-11, + .flex > .col-lg-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col-lg, + .column > .col-lg-auto, + .column > .col-lg-grow, + .column > .col-lg-shrink, + .column > .col-lg-0, + .column > .col-lg-1, + .column > .col-lg-2, + .column > .col-lg-3, + .column > .col-lg-4, + .column > .col-lg-5, + .column > .col-lg-6, + .column > .col-lg-7, + .column > .col-lg-8, + .column > .col-lg-9, + .column > .col-lg-10, + .column > .col-lg-11, + .column > .col-lg-12, + .flex > .col-lg, + .flex > .col-lg-auto, + .flex > .col-lg-grow, + .flex > .col-lg-shrink, + .flex > .col-lg-0, + .flex > .col-lg-1, + .flex > .col-lg-2, + .flex > .col-lg-3, + .flex > .col-lg-4, + .flex > .col-lg-5, + .flex > .col-lg-6, + .flex > .col-lg-7, + .flex > .col-lg-8, + .flex > .col-lg-9, + .flex > .col-lg-10, + .flex > .col-lg-11, + .flex > .col-lg-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col-lg { + flex: 10000 1 0%; + } + .col-lg-auto, + .col-lg-0, + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12 { + flex: 0 0 auto; + } + .col-lg-grow { + flex: 1 0 auto; + } + .col-lg-shrink { + flex: 0 1 auto; + } + .row > .col-lg-0 { + height: auto; + width: 0%; + } + .row > .offset-lg-0 { + margin-left: 0%; + } + .column > .col-lg-0 { + height: 0%; + width: auto; + } + .row > .col-lg-1 { + height: auto; + width: 8.3333%; + } + .row > .offset-lg-1 { + margin-left: 8.3333%; + } + .column > .col-lg-1 { + height: 8.3333%; + width: auto; + } + .row > .col-lg-2 { + height: auto; + width: 16.6667%; + } + .row > .offset-lg-2 { + margin-left: 16.6667%; + } + .column > .col-lg-2 { + height: 16.6667%; + width: auto; + } + .row > .col-lg-3 { + height: auto; + width: 25%; + } + .row > .offset-lg-3 { + margin-left: 25%; + } + .column > .col-lg-3 { + height: 25%; + width: auto; + } + .row > .col-lg-4 { + height: auto; + width: 33.3333%; + } + .row > .offset-lg-4 { + margin-left: 33.3333%; + } + .column > .col-lg-4 { + height: 33.3333%; + width: auto; + } + .row > .col-lg-5 { + height: auto; + width: 41.6667%; + } + .row > .offset-lg-5 { + margin-left: 41.6667%; + } + .column > .col-lg-5 { + height: 41.6667%; + width: auto; + } + .row > .col-lg-6 { + height: auto; + width: 50%; + } + .row > .offset-lg-6 { + margin-left: 50%; + } + .column > .col-lg-6 { + height: 50%; + width: auto; + } + .row > .col-lg-7 { + height: auto; + width: 58.3333%; + } + .row > .offset-lg-7 { + margin-left: 58.3333%; + } + .column > .col-lg-7 { + height: 58.3333%; + width: auto; + } + .row > .col-lg-8 { + height: auto; + width: 66.6667%; + } + .row > .offset-lg-8 { + margin-left: 66.6667%; + } + .column > .col-lg-8 { + height: 66.6667%; + width: auto; + } + .row > .col-lg-9 { + height: auto; + width: 75%; + } + .row > .offset-lg-9 { + margin-left: 75%; + } + .column > .col-lg-9 { + height: 75%; + width: auto; + } + .row > .col-lg-10 { + height: auto; + width: 83.3333%; + } + .row > .offset-lg-10 { + margin-left: 83.3333%; + } + .column > .col-lg-10 { + height: 83.3333%; + width: auto; + } + .row > .col-lg-11 { + height: auto; + width: 91.6667%; + } + .row > .offset-lg-11 { + margin-left: 91.6667%; + } + .column > .col-lg-11 { + height: 91.6667%; + width: auto; + } + .row > .col-lg-12 { + height: auto; + width: 100%; + } + .row > .offset-lg-12 { + margin-left: 100%; + } + .column > .col-lg-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1920px) { + .row > .col-xl, + .row > .col-xl-auto, + .row > .col-xl-grow, + .row > .col-xl-shrink, + .row > .col-xl-0, + .row > .col-xl-1, + .row > .col-xl-2, + .row > .col-xl-3, + .row > .col-xl-4, + .row > .col-xl-5, + .row > .col-xl-6, + .row > .col-xl-7, + .row > .col-xl-8, + .row > .col-xl-9, + .row > .col-xl-10, + .row > .col-xl-11, + .row > .col-xl-12, + .flex > .col-xl, + .flex > .col-xl-auto, + .flex > .col-xl-grow, + .flex > .col-xl-shrink, + .flex > .col-xl-0, + .flex > .col-xl-1, + .flex > .col-xl-2, + .flex > .col-xl-3, + .flex > .col-xl-4, + .flex > .col-xl-5, + .flex > .col-xl-6, + .flex > .col-xl-7, + .flex > .col-xl-8, + .flex > .col-xl-9, + .flex > .col-xl-10, + .flex > .col-xl-11, + .flex > .col-xl-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col-xl, + .column > .col-xl-auto, + .column > .col-xl-grow, + .column > .col-xl-shrink, + .column > .col-xl-0, + .column > .col-xl-1, + .column > .col-xl-2, + .column > .col-xl-3, + .column > .col-xl-4, + .column > .col-xl-5, + .column > .col-xl-6, + .column > .col-xl-7, + .column > .col-xl-8, + .column > .col-xl-9, + .column > .col-xl-10, + .column > .col-xl-11, + .column > .col-xl-12, + .flex > .col-xl, + .flex > .col-xl-auto, + .flex > .col-xl-grow, + .flex > .col-xl-shrink, + .flex > .col-xl-0, + .flex > .col-xl-1, + .flex > .col-xl-2, + .flex > .col-xl-3, + .flex > .col-xl-4, + .flex > .col-xl-5, + .flex > .col-xl-6, + .flex > .col-xl-7, + .flex > .col-xl-8, + .flex > .col-xl-9, + .flex > .col-xl-10, + .flex > .col-xl-11, + .flex > .col-xl-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col-xl { + flex: 10000 1 0%; + } + .col-xl-auto, + .col-xl-0, + .col-xl-1, + .col-xl-2, + .col-xl-3, + .col-xl-4, + .col-xl-5, + .col-xl-6, + .col-xl-7, + .col-xl-8, + .col-xl-9, + .col-xl-10, + .col-xl-11, + .col-xl-12 { + flex: 0 0 auto; + } + .col-xl-grow { + flex: 1 0 auto; + } + .col-xl-shrink { + flex: 0 1 auto; + } + .row > .col-xl-0 { + height: auto; + width: 0%; + } + .row > .offset-xl-0 { + margin-left: 0%; + } + .column > .col-xl-0 { + height: 0%; + width: auto; + } + .row > .col-xl-1 { + height: auto; + width: 8.3333%; + } + .row > .offset-xl-1 { + margin-left: 8.3333%; + } + .column > .col-xl-1 { + height: 8.3333%; + width: auto; + } + .row > .col-xl-2 { + height: auto; + width: 16.6667%; + } + .row > .offset-xl-2 { + margin-left: 16.6667%; + } + .column > .col-xl-2 { + height: 16.6667%; + width: auto; + } + .row > .col-xl-3 { + height: auto; + width: 25%; + } + .row > .offset-xl-3 { + margin-left: 25%; + } + .column > .col-xl-3 { + height: 25%; + width: auto; + } + .row > .col-xl-4 { + height: auto; + width: 33.3333%; + } + .row > .offset-xl-4 { + margin-left: 33.3333%; + } + .column > .col-xl-4 { + height: 33.3333%; + width: auto; + } + .row > .col-xl-5 { + height: auto; + width: 41.6667%; + } + .row > .offset-xl-5 { + margin-left: 41.6667%; + } + .column > .col-xl-5 { + height: 41.6667%; + width: auto; + } + .row > .col-xl-6 { + height: auto; + width: 50%; + } + .row > .offset-xl-6 { + margin-left: 50%; + } + .column > .col-xl-6 { + height: 50%; + width: auto; + } + .row > .col-xl-7 { + height: auto; + width: 58.3333%; + } + .row > .offset-xl-7 { + margin-left: 58.3333%; + } + .column > .col-xl-7 { + height: 58.3333%; + width: auto; + } + .row > .col-xl-8 { + height: auto; + width: 66.6667%; + } + .row > .offset-xl-8 { + margin-left: 66.6667%; + } + .column > .col-xl-8 { + height: 66.6667%; + width: auto; + } + .row > .col-xl-9 { + height: auto; + width: 75%; + } + .row > .offset-xl-9 { + margin-left: 75%; + } + .column > .col-xl-9 { + height: 75%; + width: auto; + } + .row > .col-xl-10 { + height: auto; + width: 83.3333%; + } + .row > .offset-xl-10 { + margin-left: 83.3333%; + } + .column > .col-xl-10 { + height: 83.3333%; + width: auto; + } + .row > .col-xl-11 { + height: auto; + width: 91.6667%; + } + .row > .offset-xl-11 { + margin-left: 91.6667%; + } + .column > .col-xl-11 { + height: 91.6667%; + width: auto; + } + .row > .col-xl-12 { + height: auto; + width: 100%; + } + .row > .offset-xl-12 { + margin-left: 100%; + } + .column > .col-xl-12 { + height: 100%; + width: auto; + } +} +.rounded-borders { + border-radius: 4px; +} +.border-radius-inherit { + border-radius: inherit; +} +.no-transition { + transition: none !important; +} +.transition-0 { + transition: 0s !important; +} +.glossy { + background-image: linear-gradient(to bottom, rgba(255,255,255,0.3), rgba(255,255,255,0) 50%, rgba(0,0,0,0.12) 51%, rgba(0,0,0,0.04)) !important; +} +.q-placeholder::-moz-placeholder { + color: inherit; + opacity: 0.7; +} +.q-placeholder:-ms-input-placeholder { + color: inherit !important; + opacity: 0.7 !important; +} +.q-placeholder::placeholder { + color: inherit; + opacity: 0.7; +} +.q-body--fullscreen-mixin { + position: fixed !important; +} +.q-body--prevent-scroll { + width: 100vw; + height: 100vh; + overflow-x: hidden; + contain: layout size; + contain: layout size style; + -ms-scroll-chaining: none; + overscroll-behavior: none; + -webkit-overflow-scrolling: none; +} +.q-body--prevent-scroll body { + position: relative !important; + overflow: hidden; +} +.q-body--prevent-scroll .q-drawer__backdrop { + width: 100vw; + max-height: none; +} +.q-body--prevent-scroll[dir=rtl] .q-body--scroll-locked { + transform: translateX(var(--q-scroll-lock-left)); +} +.q-portal__container { + contain: size; + contain: size style; +} +.q-portal__clone { + position: fixed !important; + transform: none !important; + transition: none !important; + flex-shrink: 0 !important; + opacity: 0 !important; + z-index: -1 !important; +} +.q-focus__clone + * { + position: fixed !important; + transition: none !important; + opacity: 0 !important; + pointer-events: none !important; +} +body.native-mobile .q-focus__clone + * { + top: 50vh; +} +.q-no-input-spinner { + -moz-appearance: textfield !important; +} +.q-no-input-spinner::-webkit-outer-spin-button, +.q-no-input-spinner::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} +.q-link { + outline: 0; + text-decoration: none; +} +.q-link--focusable:focus-visible { + -webkit-text-decoration: underline dashed currentColor 1px; + text-decoration: underline dashed currentColor 1px; +} +body.electron .q-electron-drag { + -webkit-user-select: none; + -webkit-app-region: drag; +} +body.electron .q-electron-drag .q-btn-item, +body.electron .q-electron-drag--exception { + -webkit-app-region: no-drag; +} +img.responsive { + max-width: 100%; + height: auto; +} +.non-selectable { + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; +} +.scroll { + overflow: auto; +} +.scroll, +.scroll-x, +.scroll-y { + -webkit-overflow-scrolling: touch; + will-change: scroll-position; +} +.scroll-x { + overflow-x: auto; +} +.scroll-y { + overflow-y: auto; +} +.no-scroll { + overflow: hidden !important; +} +.no-pointer-events, +.no-pointer-events--children, +.no-pointer-events--children * { + pointer-events: none !important; +} +.all-pointer-events { + pointer-events: all !important; +} +.cursor-pointer { + cursor: pointer !important; +} +.cursor-not-allowed { + cursor: not-allowed !important; +} +.cursor-inherit { + cursor: inherit !important; +} +.cursor-none { + cursor: none !important; +} +[aria-busy='true'] { + cursor: progress; +} +[aria-controls], +[role='button'] { + cursor: pointer; +} +[aria-disabled] { + cursor: default; +} +.rotate-45 { + transform: rotate(45deg) /* rtl:ignore */; +} +.rotate-90 { + transform: rotate(90deg) /* rtl:ignore */; +} +.rotate-135 { + transform: rotate(135deg) /* rtl:ignore */; +} +.rotate-180 { + transform: rotate(180deg) /* rtl:ignore */; +} +/* deprecated: to be removed */ +.rotate-205 { + transform: rotate(205deg) /* rtl:ignore */; +} +.rotate-225 { + transform: rotate(225deg) /* rtl:ignore */; +} +.rotate-270 { + transform: rotate(270deg) /* rtl:ignore */; +} +.rotate-315 { + transform: rotate(315deg) /* rtl:ignore */; +} +.flip-horizontal { + transform: scaleX(-1); +} +.flip-vertical { + transform: scaleY(-1); +} +.float-left { + float: left; +} +.float-right { + float: right; +} +.relative-position { + position: relative; +} +.fixed, +.fixed-full, +.fullscreen, +.fixed-center, +.fixed-bottom, +.fixed-left, +.fixed-right, +.fixed-top, +.fixed-top-left, +.fixed-top-right, +.fixed-bottom-left, +.fixed-bottom-right { + position: fixed; +} +.absolute, +.absolute-full, +.absolute-center, +.absolute-bottom, +.absolute-left, +.absolute-right, +.absolute-top, +.absolute-top-left, +.absolute-top-right, +.absolute-bottom-left, +.absolute-bottom-right { + position: absolute; +} +.fixed-top, +.absolute-top { + top: 0; + left: 0; + right: 0; +} +.fixed-right, +.absolute-right { + top: 0; + right: 0; + bottom: 0; +} +.fixed-bottom, +.absolute-bottom { + right: 0; + bottom: 0; + left: 0; +} +.fixed-left, +.absolute-left { + top: 0; + bottom: 0; + left: 0; +} +.fixed-top-left, +.absolute-top-left { + top: 0; + left: 0; +} +.fixed-top-right, +.absolute-top-right { + top: 0; + right: 0; +} +.fixed-bottom-left, +.absolute-bottom-left { + bottom: 0; + left: 0; +} +.fixed-bottom-right, +.absolute-bottom-right { + bottom: 0; + right: 0; +} +.fullscreen { + z-index: 6000; + border-radius: 0 !important; + max-width: 100vw; + max-height: 100vh; +} +body.q-ios-padding .fullscreen { + padding-top: 20px !important; + padding-top: env(safe-area-inset-top) !important; + padding-bottom: env(safe-area-inset-bottom) !important; +} +.absolute-full, +.fullscreen, +.fixed-full { + top: 0; + right: 0; + bottom: 0; + left: 0; +} +.fixed-center, +.absolute-center { + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} +.vertical-top { + vertical-align: top !important; +} +.vertical-middle { + vertical-align: middle !important; +} +.vertical-bottom { + vertical-align: bottom !important; +} +.on-left { + margin-right: 12px; +} +.on-right { + margin-left: 12px; +} +:root { + --q-size-xs: 0; + --q-size-sm: 600px; + --q-size-md: 1024px; + --q-size-lg: 1440px; + --q-size-xl: 1920px; +} +.fit { + width: 100% !important; + height: 100% !important; +} +.full-height { + height: 100% !important; +} +.full-width { + width: 100% !important; + margin-left: 0 !important; + margin-right: 0 !important; +} +.window-height { + margin-top: 0 !important; + margin-bottom: 0 !important; + height: 100vh !important; +} +.window-width { + margin-left: 0 !important; + margin-right: 0 !important; + width: 100vw !important; +} +.block { + display: block !important; +} +.inline-block { + display: inline-block !important; +} +.q-pa-none { + padding: 0 0; +} +.q-pl-none { + padding-left: 0; +} +.q-pr-none { + padding-right: 0; +} +.q-pt-none, +.q-py-none { + padding-top: 0; +} +.q-pb-none, +.q-py-none { + padding-bottom: 0; +} +.q-px-none { + padding-left: 0; + padding-right: 0; +} +.q-ma-none { + margin: 0 0; +} +.q-ml-none { + margin-left: 0; +} +.q-mr-none { + margin-right: 0; +} +.q-mt-none, +.q-my-none { + margin-top: 0; +} +.q-mb-none, +.q-my-none { + margin-bottom: 0; +} +.q-mx-none { + margin-left: 0; + margin-right: 0; +} +.q-pa-xs { + padding: 4px 4px; +} +.q-pl-xs { + padding-left: 4px; +} +.q-pr-xs { + padding-right: 4px; +} +.q-pt-xs, +.q-py-xs { + padding-top: 4px; +} +.q-pb-xs, +.q-py-xs { + padding-bottom: 4px; +} +.q-px-xs { + padding-left: 4px; + padding-right: 4px; +} +.q-ma-xs { + margin: 4px 4px; +} +.q-ml-xs { + margin-left: 4px; +} +.q-mr-xs { + margin-right: 4px; +} +.q-mt-xs, +.q-my-xs { + margin-top: 4px; +} +.q-mb-xs, +.q-my-xs { + margin-bottom: 4px; +} +.q-mx-xs { + margin-left: 4px; + margin-right: 4px; +} +.q-pa-sm { + padding: 8px 8px; +} +.q-pl-sm { + padding-left: 8px; +} +.q-pr-sm { + padding-right: 8px; +} +.q-pt-sm, +.q-py-sm { + padding-top: 8px; +} +.q-pb-sm, +.q-py-sm { + padding-bottom: 8px; +} +.q-px-sm { + padding-left: 8px; + padding-right: 8px; +} +.q-ma-sm { + margin: 8px 8px; +} +.q-ml-sm { + margin-left: 8px; +} +.q-mr-sm { + margin-right: 8px; +} +.q-mt-sm, +.q-my-sm { + margin-top: 8px; +} +.q-mb-sm, +.q-my-sm { + margin-bottom: 8px; +} +.q-mx-sm { + margin-left: 8px; + margin-right: 8px; +} +.q-pa-md { + padding: 16px 16px; +} +.q-pl-md { + padding-left: 16px; +} +.q-pr-md { + padding-right: 16px; +} +.q-pt-md, +.q-py-md { + padding-top: 16px; +} +.q-pb-md, +.q-py-md { + padding-bottom: 16px; +} +.q-px-md { + padding-left: 16px; + padding-right: 16px; +} +.q-ma-md { + margin: 16px 16px; +} +.q-ml-md { + margin-left: 16px; +} +.q-mr-md { + margin-right: 16px; +} +.q-mt-md, +.q-my-md { + margin-top: 16px; +} +.q-mb-md, +.q-my-md { + margin-bottom: 16px; +} +.q-mx-md { + margin-left: 16px; + margin-right: 16px; +} +.q-pa-lg { + padding: 24px 24px; +} +.q-pl-lg { + padding-left: 24px; +} +.q-pr-lg { + padding-right: 24px; +} +.q-pt-lg, +.q-py-lg { + padding-top: 24px; +} +.q-pb-lg, +.q-py-lg { + padding-bottom: 24px; +} +.q-px-lg { + padding-left: 24px; + padding-right: 24px; +} +.q-ma-lg { + margin: 24px 24px; +} +.q-ml-lg { + margin-left: 24px; +} +.q-mr-lg { + margin-right: 24px; +} +.q-mt-lg, +.q-my-lg { + margin-top: 24px; +} +.q-mb-lg, +.q-my-lg { + margin-bottom: 24px; +} +.q-mx-lg { + margin-left: 24px; + margin-right: 24px; +} +.q-pa-xl { + padding: 48px 48px; +} +.q-pl-xl { + padding-left: 48px; +} +.q-pr-xl { + padding-right: 48px; +} +.q-pt-xl, +.q-py-xl { + padding-top: 48px; +} +.q-pb-xl, +.q-py-xl { + padding-bottom: 48px; +} +.q-px-xl { + padding-left: 48px; + padding-right: 48px; +} +.q-ma-xl { + margin: 48px 48px; +} +.q-ml-xl { + margin-left: 48px; +} +.q-mr-xl { + margin-right: 48px; +} +.q-mt-xl, +.q-my-xl { + margin-top: 48px; +} +.q-mb-xl, +.q-my-xl { + margin-bottom: 48px; +} +.q-mx-xl { + margin-left: 48px; + margin-right: 48px; +} +.q-mt-auto, +.q-my-auto { + margin-top: auto; +} +.q-ml-auto { + margin-left: auto; +} +.q-mb-auto, +.q-my-auto { + margin-bottom: auto; +} +.q-mr-auto { + margin-right: auto; +} +.q-mx-auto { + margin-left: auto; + margin-right: auto; +} +.q-touch { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + user-drag: none; + -khtml-user-drag: none; + -webkit-user-drag: none; +} +.q-touch-x { + touch-action: pan-x; +} +.q-touch-y { + touch-action: pan-y; +} +.q-transition--slide-right-leave-active, +.q-transition--slide-left-leave-active, +.q-transition--slide-up-leave-active, +.q-transition--slide-down-leave-active, +.q-transition--jump-right-leave-active, +.q-transition--jump-left-leave-active, +.q-transition--jump-up-leave-active, +.q-transition--jump-down-leave-active, +.q-transition--fade-leave-active, +.q-transition--scale-leave-active, +.q-transition--rotate-leave-active, +.q-transition--flip-leave-active { + position: absolute; +} +.q-transition--slide-right-enter-active, +.q-transition--slide-left-enter-active, +.q-transition--slide-up-enter-active, +.q-transition--slide-down-enter-active, +.q-transition--slide-right-leave-active, +.q-transition--slide-left-leave-active, +.q-transition--slide-up-leave-active, +.q-transition--slide-down-leave-active { + transition: transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); +} +.q-transition--slide-right-enter { + transform: translate3d(-100%, 0, 0); +} +.q-transition--slide-right-leave-to { + transform: translate3d(100%, 0, 0); +} +.q-transition--slide-left-enter { + transform: translate3d(100%, 0, 0); +} +.q-transition--slide-left-leave-to { + transform: translate3d(-100%, 0, 0); +} +.q-transition--slide-up-enter { + transform: translate3d(0, 100%, 0); +} +.q-transition--slide-up-leave-to { + transform: translate3d(0, -100%, 0); +} +.q-transition--slide-down-enter { + transform: translate3d(0, -100%, 0); +} +.q-transition--slide-down-leave-to { + transform: translate3d(0, 100%, 0); +} +.q-transition--jump-right-enter-active, +.q-transition--jump-left-enter-active, +.q-transition--jump-up-enter-active, +.q-transition--jump-down-enter-active, +.q-transition--jump-right-leave-active, +.q-transition--jump-left-leave-active, +.q-transition--jump-up-leave-active, +.q-transition--jump-down-leave-active { + transition: opacity 0.3s, transform 0.3s; +} +.q-transition--jump-right-enter, +.q-transition--jump-left-enter, +.q-transition--jump-up-enter, +.q-transition--jump-down-enter, +.q-transition--jump-right-leave-to, +.q-transition--jump-left-leave-to, +.q-transition--jump-up-leave-to, +.q-transition--jump-down-leave-to { + opacity: 0; +} +.q-transition--jump-right-enter { + transform: translate3d(-15px, 0, 0); +} +.q-transition--jump-right-leave-to { + transform: translate3d(15px, 0, 0); +} +.q-transition--jump-left-enter { + transform: translate3d(15px, 0, 0); +} +.q-transition--jump-left-leave-to { + transform: translateX(-15px); +} +.q-transition--jump-up-enter { + transform: translate3d(0, 15px, 0); +} +.q-transition--jump-up-leave-to { + transform: translate3d(0, -15px, 0); +} +.q-transition--jump-down-enter { + transform: translate3d(0, -15px, 0); +} +.q-transition--jump-down-leave-to { + transform: translate3d(0, 15px, 0); +} +.q-transition--fade-enter-active, +.q-transition--fade-leave-active { + transition: opacity 0.3s ease-out; +} +.q-transition--fade-enter, +.q-transition--fade-leave, +.q-transition--fade-leave-to { + opacity: 0; +} +.q-transition--scale-enter-active, +.q-transition--scale-leave-active { + transition: opacity 0.3s, transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); +} +.q-transition--scale-enter, +.q-transition--scale-leave, +.q-transition--scale-leave-to { + opacity: 0; + transform: scale3d(0, 0, 1); +} +.q-transition--rotate-enter-active, +.q-transition--rotate-leave-active { + transition: opacity 0.3s, transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); + transform-style: preserve-3d; +} +.q-transition--rotate-enter, +.q-transition--rotate-leave, +.q-transition--rotate-leave-to { + opacity: 0; + transform: scale3d(0, 0, 1) rotate3d(0, 0, 1, 90deg); +} +.q-transition--flip-right-enter-active, +.q-transition--flip-left-enter-active, +.q-transition--flip-up-enter-active, +.q-transition--flip-down-enter-active, +.q-transition--flip-right-leave-active, +.q-transition--flip-left-leave-active, +.q-transition--flip-up-leave-active, +.q-transition--flip-down-leave-active { + transition: transform 0.3s; + backface-visibility: hidden; +} +.q-transition--flip-right-enter-to, +.q-transition--flip-left-enter-to, +.q-transition--flip-up-enter-to, +.q-transition--flip-down-enter-to, +.q-transition--flip-right-leave, +.q-transition--flip-left-leave, +.q-transition--flip-up-leave, +.q-transition--flip-down-leave { + transform: perspective(400px) rotate3d(1, 1, 0, 0deg); +} +.q-transition--flip-right-enter { + transform: perspective(400px) rotate3d(0, 1, 0, -180deg); +} +.q-transition--flip-right-leave-to { + transform: perspective(400px) rotate3d(0, 1, 0, 180deg); +} +.q-transition--flip-left-enter { + transform: perspective(400px) rotate3d(0, 1, 0, 180deg); +} +.q-transition--flip-left-leave-to { + transform: perspective(400px) rotate3d(0, 1, 0, -180deg); +} +.q-transition--flip-up-enter { + transform: perspective(400px) rotate3d(1, 0, 0, -180deg); +} +.q-transition--flip-up-leave-to { + transform: perspective(400px) rotate3d(1, 0, 0, 180deg); +} +.q-transition--flip-down-enter { + transform: perspective(400px) rotate3d(1, 0, 0, 180deg); +} +.q-transition--flip-down-leave-to { + transform: perspective(400px) rotate3d(1, 0, 0, -180deg); +} +.q-transition--hide-scroll, +.q-transition--hide-scroll > .q-panel:first-child { + overflow: hidden !important; +} +body { + min-width: 100px; + min-height: 100%; + font-family: 'Roboto', '-apple-system', 'Helvetica Neue', Helvetica, Arial, sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-smoothing: antialiased; + line-height: 1.5; + font-size: 14px; +} +h1 { + font-size: 6rem; + font-weight: 300; + line-height: 6rem; + letter-spacing: -0.01562em; +} +h2 { + font-size: 3.75rem; + font-weight: 300; + line-height: 3.75rem; + letter-spacing: -0.00833em; +} +h3 { + font-size: 3rem; + font-weight: 400; + line-height: 3.125rem; + letter-spacing: normal; +} +h4 { + font-size: 2.125rem; + font-weight: 400; + line-height: 2.5rem; + letter-spacing: 0.00735em; +} +h5 { + font-size: 1.5rem; + font-weight: 400; + line-height: 2rem; + letter-spacing: normal; +} +h6 { + font-size: 1.25rem; + font-weight: 500; + line-height: 2rem; + letter-spacing: 0.0125em; +} +p { + margin: 0 0 16px; +} +.text-h1 { + font-size: 6rem; + font-weight: 300; + line-height: 6rem; + letter-spacing: -0.01562em; +} +.text-h2 { + font-size: 3.75rem; + font-weight: 300; + line-height: 3.75rem; + letter-spacing: -0.00833em; +} +.text-h3 { + font-size: 3rem; + font-weight: 400; + line-height: 3.125rem; + letter-spacing: normal; +} +.text-h4 { + font-size: 2.125rem; + font-weight: 400; + line-height: 2.5rem; + letter-spacing: 0.00735em; +} +.text-h5 { + font-size: 1.5rem; + font-weight: 400; + line-height: 2rem; + letter-spacing: normal; +} +.text-h6 { + font-size: 1.25rem; + font-weight: 500; + line-height: 2rem; + letter-spacing: 0.0125em; +} +.text-subtitle1 { + font-size: 1rem; + font-weight: 400; + line-height: 1.75rem; + letter-spacing: 0.00937em; +} +.text-subtitle2 { + font-size: 0.875rem; + font-weight: 500; + line-height: 1.375rem; + letter-spacing: 0.00714em; +} +.text-body1 { + font-size: 1rem; + font-weight: 400; + line-height: 1.5rem; + letter-spacing: 0.03125em; +} +.text-body2 { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.25rem; + letter-spacing: 0.01786em; +} +.text-overline { + font-size: 0.75rem; + font-weight: 500; + line-height: 2rem; + letter-spacing: 0.16667em; +} +.text-caption { + font-size: 0.75rem; + font-weight: 400; + line-height: 1.25rem; + letter-spacing: 0.03333em; +} +.text-uppercase { + text-transform: uppercase; +} +.text-lowercase { + text-transform: lowercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-center { + text-align: center; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-justify { + text-align: justify; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; +} +.text-italic { + font-style: italic; +} +.text-bold { + font-weight: bold; +} +.text-no-wrap { + white-space: nowrap; +} +.text-strike { + text-decoration: line-through; +} +.text-weight-thin { + font-weight: 100; +} +.text-weight-light { + font-weight: 300; +} +.text-weight-regular { + font-weight: 400; +} +.text-weight-medium { + font-weight: 500; +} +.text-weight-bold { + font-weight: 700; +} +.text-weight-bolder { + font-weight: 900; +} +small { + font-size: 80%; +} +big { + font-size: 170%; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +.no-margin { + margin: 0 !important; +} +.no-padding { + padding: 0 !important; +} +.no-border { + border: 0 !important; +} +.no-border-radius { + border-radius: 0 !important; +} +.no-box-shadow { + box-shadow: none !important; +} +.no-outline { + outline: 0 !important; +} +.ellipsis { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.ellipsis-2-lines, +.ellipsis-3-lines { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; +} +.ellipsis-2-lines { + -webkit-line-clamp: 2; +} +.ellipsis-3-lines { + -webkit-line-clamp: 3; +} +.readonly { + cursor: default !important; +} +.disabled, +[disabled], +.disabled *, +[disabled] * { + outline: 0 !important; + cursor: not-allowed !important; +} +.disabled, +[disabled] { + opacity: 0.6 !important; +} +.hidden { + display: none !important; +} +.invisible { + visibility: hidden !important; +} +.transparent { + background: transparent !important; +} +.overflow-auto { + overflow: auto !important; +} +.overflow-hidden { + overflow: hidden !important; +} +.overflow-hidden-y { + overflow-y: hidden !important; +} +.hide-scrollbar { + scrollbar-width: none; + -ms-overflow-style: none; +} +.hide-scrollbar::-webkit-scrollbar { + width: 0; + height: 0; + display: none; +} +.dimmed:after, +.light-dimmed:after { + content: ''; + position: absolute; + top: 0; + right: 0 /* rtl:ignore */; + bottom: 0; + left: 0 /* rtl:ignore */; +} +.dimmed:after { + background: rgba(0,0,0,0.4) !important; +} +.light-dimmed:after { + background: rgba(255,255,255,0.6) !important; +} +.z-top { + z-index: 7000 !important; +} +.z-max { + z-index: 9998 !important; +} +body:not(.desktop) .desktop-only, +body.desktop .desktop-hide { + display: none !important; +} +body:not(.mobile) .mobile-only, +body.mobile .mobile-hide { + display: none !important; +} +body:not(.native-mobile) .native-mobile-only, +body.native-mobile .native-mobile-hide { + display: none !important; +} +body:not(.cordova) .cordova-only, +body.cordova .cordova-hide { + display: none !important; +} +body:not(.capacitor) .capacitor-only, +body.capacitor .capacitor-hide { + display: none !important; +} +body:not(.electron) .electron-only, +body.electron .electron-hide { + display: none !important; +} +body:not(.touch) .touch-only, +body.touch .touch-hide { + display: none !important; +} +body:not(.within-iframe) .within-iframe-only, +body.within-iframe .within-iframe-hide { + display: none !important; +} +body:not(.platform-ios) .platform-ios-only, +body.platform-ios .platform-ios-hide { + display: none !important; +} +body:not(.platform-android) .platform-android-only, +body.platform-android .platform-android-hide { + display: none !important; +} +@media all and (orientation: portrait) { + .orientation-landscape { + display: none !important; + } +} +@media all and (orientation: landscape) { + .orientation-portrait { + display: none !important; + } +} +@media screen { + .print-only { + display: none !important; + } +} +@media print { + .print-hide { + display: none !important; + } +} +@media (max-width: 599.98px) { + .xs-hide, + .gt-xs, + .sm, + .gt-sm, + .md, + .gt-md, + .lg, + .gt-lg, + .xl { + display: none !important; + } +} +@media (min-width: 600px) and (max-width: 1023.98px) { + .sm-hide, + .xs, + .lt-sm, + .gt-sm, + .md, + .gt-md, + .lg, + .gt-lg, + .xl { + display: none !important; + } +} +@media (min-width: 1024px) and (max-width: 1439.98px) { + .md-hide, + .xs, + .lt-sm, + .sm, + .lt-md, + .gt-md, + .lg, + .gt-lg, + .xl { + display: none !important; + } +} +@media (min-width: 1440px) and (max-width: 1919.98px) { + .lg-hide, + .xs, + .lt-sm, + .sm, + .lt-md, + .md, + .lt-lg, + .gt-lg, + .xl { + display: none !important; + } +} +@media (min-width: 1920px) { + .xl-hide, + .xs, + .lt-sm, + .sm, + .lt-md, + .md, + .lt-lg, + .lg, + .lt-xl { + display: none !important; + } +} +.q-focus-helper, +.q-focusable, +.q-manual-focusable, +.q-hoverable { + outline: 0; +} +body.desktop .q-focus-helper { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + width: 100%; + height: 100%; + pointer-events: none; + border-radius: inherit; + opacity: 0; + transition: background-color 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), opacity 0.4s cubic-bezier(0.25, 0.8, 0.5, 1); +} +body.desktop .q-focus-helper:before, +body.desktop .q-focus-helper:after { + content: ''; + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + width: 100%; + height: 100%; + opacity: 0; + border-radius: inherit; + transition: background-color 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), opacity 0.6s cubic-bezier(0.25, 0.8, 0.5, 1); +} +body.desktop .q-focus-helper:before { + background: #000; +} +body.desktop .q-focus-helper:after { + background: #fff; +} +body.desktop .q-focus-helper--rounded { + border-radius: 4px; +} +body.desktop .q-focus-helper--round { + border-radius: 50%; +} +body.desktop .q-focusable:focus > .q-focus-helper, +body.desktop .q-manual-focusable--focused > .q-focus-helper, +body.desktop .q-hoverable:hover > .q-focus-helper { + background: currentColor; + opacity: 0.15; +} +body.desktop .q-focusable:focus > .q-focus-helper:before, +body.desktop .q-manual-focusable--focused > .q-focus-helper:before, +body.desktop .q-hoverable:hover > .q-focus-helper:before { + opacity: 0.1; +} +body.desktop .q-focusable:focus > .q-focus-helper:after, +body.desktop .q-manual-focusable--focused > .q-focus-helper:after, +body.desktop .q-hoverable:hover > .q-focus-helper:after { + opacity: 0.4; +} +body.desktop .q-focusable:focus > .q-focus-helper, +body.desktop .q-manual-focusable--focused > .q-focus-helper { + opacity: 0.22; +} +body.desktop .q-key-group-navigation--active { + outline: auto; +} +body.body--light, +body.body--dark-auto, +.q-light, +.q-dark-auto { + color: #000; + color: var(--q-color-light-text); + background: #fff; + background: var(--q-color-light-page); +} +body.body--dark { + color: #fff; + color: var(--q-color-dark-text); + background: #121212; + background: var(--q-color-dark-page); +} +.q-dark { + color: #fff; + color: var(--q-color-dark-text); + background: #1d1d1d; + background: var(--q-color-dark); +} +@media (prefers-color-scheme: dark) { + body.body--dark-auto { + color: #fff; + color: var(--q-color-dark-text); + background: #121212; + background: var(--q-color-dark-page); + } + .q-dark-auto { + color: #fff; + color: var(--q-color-dark-text); + background: #1d1d1d; + background: var(--q-color-dark); + } +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .q-item:after, + .q-toolbar:after, + .q-notification:after { + content: ''; + font-size: 0; + visibility: collapse; + display: inline; + width: 0; + } + .q-banner > .q-banner__avatar { + min-height: 38px; + } + .q-banner--dense > .q-banner__avatar { + min-height: 20px; + } + .q-item:after { + min-height: 32px; + } + .q-list--dense > .q-itemafter, + .q-item--denseafter { + min-height: 24px; + } + .q-toolbar:after { + min-height: 50px; + } + .q-notification--standard:after { + min-height: 48px; + } + .q-notification--multi-line { + min-height: 68px; + } + .q-btn__wrapper, + .q-time__content, + .q-toolbar__title, + .q-menu .q-item__section--main, + .q-table__middle { + flex-basis: auto; + } + .q-banner__content { + flex-basis: 0 !important; + } + .q-menu > .q-banner > .q-banner__content, + .q-dialog__inner > .q-banner > .q-banner__content { + flex-basis: auto !important; + } + .q-tab__content { + flex-basis: auto; + min-width: 100%; + } + .q-card__actions--vert { + flex: 0 0 auto; + } + .column { + min-width: 0%; + } + .q-item__section--avatar { + min-width: 56px; + } + button.q-btn--actionable:active:hover .q-btn__wrapper { + margin: -1px 1px 1px -1px; + } + .q-btn-group--push > button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper { + margin: 1px 1px -1px -1px; + } + .q-btn { + overflow: visible; + } + .q-btn--wrap { + flex-direction: row; + } + .q-carousel__slide > * { + max-width: 100%; + } + .q-tabs--vertical .q-tab__indicator { + height: auto; + } + .q-spinner { + -webkit-animation: q-ie-spinner 2s linear infinite /* rtl:ignore */; + animation: q-ie-spinner 2s linear infinite /* rtl:ignore */; + transform-origin: center center /* rtl:ignore */; + opacity: 0.5; + } + .q-spinner.q-spinner-mat .path { + stroke-dasharray: 89, 200; + } + .q-checkbox__indet { + opacity: 0; + } + .q-checkbox__inner--indet .q-checkbox__indet { + opacity: 1; + } + .q-radio__check { + opacity: 0; + } + .q-radio__inner--truthy .q-radio__check { + opacity: 1; + } + .q-date__main { + min-height: 290px !important; + } + .q-date__months { + align-items: stretch; + } + .q-time--portrait .q-time__main { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + flex: 1 0 auto; + } + .q-field__prefix, + .q-field__suffix { + flex: 1 0 auto; + } + .q-field__bottom--stale .q-field__messages { + left: 12px; + } + .q-field--borderless .q-field__bottom--stale .q-field__messages, + .q-field--standard .q-field__bottom--stale .q-field__messages { + left: 0; + } + .q-field--float .q-field__label { + max-width: 100%; + } + .q-focus-helper { + z-index: 1; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 0), (-ms-high-contrast: none) and (min-width: 0) { + .row > .col, + .row > .col-xs, + .flex > .col, + .flex > .col-xs { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 600px), (-ms-high-contrast: none) and (min-width: 600px) { + .row > .col-sm, + .flex > .col-sm { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1024px), (-ms-high-contrast: none) and (min-width: 1024px) { + .row > .col-md, + .flex > .col-md { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1440px), (-ms-high-contrast: none) and (min-width: 1440px) { + .row > .col-lg, + .flex > .col-lg { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1920px), (-ms-high-contrast: none) and (min-width: 1920px) { + .row > .col-xl, + .flex > .col-xl { + flex-basis: auto; + min-width: 0%; + } +} +@supports (-ms-ime-align: auto) { + .q-item:after, + .q-toolbar:after, + .q-notification:after { + content: ''; + font-size: 0; + visibility: collapse; + display: inline; + width: 0; + } + .q-banner > .q-banner__avatar { + min-height: 38px; + } + .q-banner--dense > .q-banner__avatar { + min-height: 20px; + } + .q-item:after { + min-height: 32px; + } + .q-list--dense > .q-itemafter, + .q-item--denseafter { + min-height: 24px; + } + .q-toolbar:after { + min-height: 50px; + } + .q-notification--standard:after { + min-height: 48px; + } + .q-notification--multi-line { + min-height: 68px; + } + .q-btn__wrapper, + .q-time__content, + .q-toolbar__title, + .q-menu .q-item__section--main, + .q-table__middle { + flex-basis: auto; + } + .q-banner__content { + flex-basis: 0 !important; + } + .q-menu > .q-banner > .q-banner__content, + .q-dialog__inner > .q-banner > .q-banner__content { + flex-basis: auto !important; + } + .q-tab__content { + flex-basis: auto; + min-width: 100%; + } + .q-card__actions--vert { + flex: 0 0 auto; + } + .column { + min-width: 0%; + } +@media screen and (-ms-high-contrast: active) and (min-width: 0), (-ms-high-contrast: none) and (min-width: 0) { + .row > .col, + .row > .col-xs, + .flex > .col, + .flex > .col-xs { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 600px), (-ms-high-contrast: none) and (min-width: 600px) { + .row > .col-sm, + .flex > .col-sm { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1024px), (-ms-high-contrast: none) and (min-width: 1024px) { + .row > .col-md, + .flex > .col-md { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1440px), (-ms-high-contrast: none) and (min-width: 1440px) { + .row > .col-lg, + .flex > .col-lg { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1920px), (-ms-high-contrast: none) and (min-width: 1920px) { + .row > .col-xl, + .flex > .col-xl { + flex-basis: auto; + min-width: 0%; + } +} + .q-item__section--avatar { + min-width: 56px; + } + button.q-btn--actionable:active:hover .q-btn__wrapper { + margin: -1px 1px 1px -1px; + } + .q-btn-group--push > button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper { + margin: 1px 1px -1px -1px; + } + .q-btn { + overflow: visible; + } + .q-btn--wrap { + flex-direction: row; + } + .q-carousel__slide > * { + max-width: 100%; + } + .q-tabs--vertical .q-tab__indicator { + height: auto; + } + .q-spinner { + -webkit-animation: q-ie-spinner 2s linear infinite /* rtl:ignore */; + animation: q-ie-spinner 2s linear infinite /* rtl:ignore */; + transform-origin: center center /* rtl:ignore */; + opacity: 0.5; + } + .q-spinner.q-spinner-mat .path { + stroke-dasharray: 89, 200; + } + .q-checkbox__indet { + opacity: 0; + } + .q-checkbox__inner--indet .q-checkbox__indet { + opacity: 1; + } + .q-radio__check { + opacity: 0; + } + .q-radio__inner--truthy .q-radio__check { + opacity: 1; + } + .q-date__main { + min-height: 290px !important; + } + .q-date__months { + align-items: stretch; + } + .q-time--portrait .q-time__main { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + flex: 1 0 auto; + } + .q-field__prefix, + .q-field__suffix { + flex: 1 0 auto; + } + .q-field__bottom--stale .q-field__messages { + left: 12px; + } + .q-field--borderless .q-field__bottom--stale .q-field__messages, + .q-field--standard .q-field__bottom--stale .q-field__messages { + left: 0; + } + .q-field--float .q-field__label { + max-width: 100%; + } + .q-focus-helper { + z-index: 1; + } +} +@-webkit-keyframes q-circular-progress-circle { + 0% { + stroke-dasharray: 1, 400; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 400, 400; + stroke-dashoffset: -100; + } + 100% { + stroke-dasharray: 400, 400; + stroke-dashoffset: -300; + } +} +@keyframes q-circular-progress-circle { + 0% { + stroke-dasharray: 1, 400; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 400, 400; + stroke-dashoffset: -100; + } + 100% { + stroke-dasharray: 400, 400; + stroke-dashoffset: -300; + } +} +@-webkit-keyframes q-expansion-done { + 0% { + --q-exp-done: 1; + } +} +@keyframes q-expansion-done { + 0% { + --q-exp-done: 1; + } +} +@-webkit-keyframes q-field-label { + 40% { + margin-left: 2px; + } + 60%, 80% { + margin-left: -2px; + } + 70%, 90% { + margin-left: 2px; + } +} +@keyframes q-field-label { + 40% { + margin-left: 2px; + } + 60%, 80% { + margin-left: -2px; + } + 70%, 90% { + margin-left: 2px; + } +} +@-webkit-keyframes q-autofill { + to { + background: transparent; + color: inherit; + } +} +@keyframes q-autofill { + to { + background: transparent; + color: inherit; + } +} +@-webkit-keyframes q-linear-progress--indeterminate { + 0% { + transform: translate3d(-35%, 0, 0) scale3d(0.35, 1, 1); + } + 60% { + transform: translate3d(100%, 0, 0) scale3d(0.9, 1, 1); + } + 100% { + transform: translate3d(100%, 0, 0) scale3d(0.9, 1, 1); + } +} +@keyframes q-linear-progress--indeterminate { + 0% { + transform: translate3d(-35%, 0, 0) scale3d(0.35, 1, 1); + } + 60% { + transform: translate3d(100%, 0, 0) scale3d(0.9, 1, 1); + } + 100% { + transform: translate3d(100%, 0, 0) scale3d(0.9, 1, 1); + } +} +@-webkit-keyframes q-linear-progress--indeterminate-short { + 0% { + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1); + } + 60% { + transform: translate3d(107%, 0, 0) scale3d(0.01, 1, 1); + } + 100% { + transform: translate3d(107%, 0, 0) scale3d(0.01, 1, 1); + } +} +@keyframes q-linear-progress--indeterminate-short { + 0% { + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1); + } + 60% { + transform: translate3d(107%, 0, 0) scale3d(0.01, 1, 1); + } + 100% { + transform: translate3d(107%, 0, 0) scale3d(0.01, 1, 1); + } +} +@-webkit-keyframes q-skeleton--fade { + 0% { + opacity: 1; + } + 50% { + opacity: 0.4; + } + 100% { + opacity: 1; + } +} +@keyframes q-skeleton--fade { + 0% { + opacity: 1; + } + 50% { + opacity: 0.4; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes q-skeleton--pulse { + 0% { + transform: scale(1); + } + 50% { + transform: scale(0.85); + } + 100% { + transform: scale(1); + } +} +@keyframes q-skeleton--pulse { + 0% { + transform: scale(1); + } + 50% { + transform: scale(0.85); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes q-skeleton--pulse-x { + 0% { + transform: scaleX(1); + } + 50% { + transform: scaleX(0.75); + } + 100% { + transform: scaleX(1); + } +} +@keyframes q-skeleton--pulse-x { + 0% { + transform: scaleX(1); + } + 50% { + transform: scaleX(0.75); + } + 100% { + transform: scaleX(1); + } +} +@-webkit-keyframes q-skeleton--pulse-y { + 0% { + transform: scaleY(1); + } + 50% { + transform: scaleY(0.75); + } + 100% { + transform: scaleY(1); + } +} +@keyframes q-skeleton--pulse-y { + 0% { + transform: scaleY(1); + } + 50% { + transform: scaleY(0.75); + } + 100% { + transform: scaleY(1); + } +} +@-webkit-keyframes q-skeleton--wave { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +} +@keyframes q-skeleton--wave { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +} +@-webkit-keyframes q-spin { + 0% { + transform: rotate3d(0, 0, 1, 0deg) /* rtl:ignore */; + } + 25% { + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */; + } + 50% { + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */; + } + 75% { + transform: rotate3d(0, 0, 1, 270deg) /* rtl:ignore */; + } + 100% { + transform: rotate3d(0, 0, 1, 359deg) /* rtl:ignore */; + } +} +@keyframes q-spin { + 0% { + transform: rotate3d(0, 0, 1, 0deg) /* rtl:ignore */; + } + 25% { + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */; + } + 50% { + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */; + } + 75% { + transform: rotate3d(0, 0, 1, 270deg) /* rtl:ignore */; + } + 100% { + transform: rotate3d(0, 0, 1, 359deg) /* rtl:ignore */; + } +} +@-webkit-keyframes q-mat-dash { + 0% { + stroke-dasharray: 1, 200 /* rtl:ignore */; + stroke-dashoffset: 0 /* rtl:ignore */; + } + 50% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -35px /* rtl:ignore */; + } + 100% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -124px /* rtl:ignore */; + } +} +@keyframes q-mat-dash { + 0% { + stroke-dasharray: 1, 200 /* rtl:ignore */; + stroke-dashoffset: 0 /* rtl:ignore */; + } + 50% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -35px /* rtl:ignore */; + } + 100% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -124px /* rtl:ignore */; + } +} +@-webkit-keyframes q-notif-badge { + 15% { + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + 30% { + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + 45% { + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + 60% { + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + 75% { + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } +} +@keyframes q-notif-badge { + 15% { + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + 30% { + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + 45% { + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + 60% { + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + 75% { + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } +} +@-webkit-keyframes q-notif-progress { + 0% { + transform: scaleX(1); + } + 100% { + transform: scaleX(0); + } +} +@keyframes q-notif-progress { + 0% { + transform: scaleX(1); + } + 100% { + transform: scaleX(0); + } +} +@-webkit-keyframes q-scale { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.04); + } + 100% { + transform: scale(1); + } +} +@keyframes q-scale { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.04); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes q-fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes q-fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes q-ie-spinner { + 0% { + opacity: 0.5; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0.5; + } +} +@keyframes q-ie-spinner { + 0% { + opacity: 0.5; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0.5; + } +} diff --git a/dist/quasar.esm.js b/dist/quasar.esm.js new file mode 100644 index 00000000000..808ba0d1ba9 --- /dev/null +++ b/dist/quasar.esm.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +import Vue from"vue";var version="1.22.0-beta.3";const isSSR="undefined"==typeof window;let iosCorrection,fromSSR=!1,onSSR=isSSR;function getMatch(t,e){const i=/(edge|edga|edgios)\/([\w.]+)/.exec(t)||/(opr)[\/]([\w.]+)/.exec(t)||/(vivaldi)[\/]([\w.]+)/.exec(t)||/(chrome|crios)[\/]([\w.]+)/.exec(t)||/(iemobile)[\/]([\w.]+)/.exec(t)||/(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(t)||/(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(t)||/(firefox|fxios)[\/]([\w.]+)/.exec(t)||/(webkit)[\/]([\w.]+)/.exec(t)||/(opera)(?:.*version|)[\/]([\w.]+)/.exec(t)||/(msie) ([\w.]+)/.exec(t)||t.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(t)||t.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(t)||[];return{browser:i[5]||i[3]||i[1]||"",version:i[2]||i[4]||"0",versionNumber:i[4]||i[2]||"0",platform:e[0]||""}}function getPlatformMatch(t){return/(ipad)/.exec(t)||/(ipod)/.exec(t)||/(windows phone)/.exec(t)||/(iphone)/.exec(t)||/(kindle)/.exec(t)||/(silk)/.exec(t)||/(android)/.exec(t)||/(win)/.exec(t)||/(mac)/.exec(t)||/(linux)/.exec(t)||/(cros)/.exec(t)||/(playbook)/.exec(t)||/(bb)/.exec(t)||/(blackberry)/.exec(t)||[]}const hasTouch=!1===isSSR&&("ontouchstart"in window||window.navigator.maxTouchPoints>0);function applyIosCorrection(t){iosCorrection={is:{...t}},delete t.mac,delete t.desktop;const e=Math.min(window.innerHeight,window.innerWidth)>414?"ipad":"iphone";Object.assign(t,{mobile:!0,ios:!0,platform:e,[e]:!0})}function getPlatform(t){const e=t.toLowerCase(),i=getMatch(e,getPlatformMatch(e)),s={};i.browser&&(s[i.browser]=!0,s.version=i.version,s.versionNumber=parseInt(i.versionNumber,10)),i.platform&&(s[i.platform]=!0);const o=s.android||s.ios||s.bb||s.blackberry||s.ipad||s.iphone||s.ipod||s.kindle||s.playbook||s.silk||s["windows phone"];return!0===o||e.indexOf("mobile")>-1?(s.mobile=!0,s.edga||s.edgios?(s.edge=!0,i.browser="edge"):s.crios?(s.chrome=!0,i.browser="chrome"):s.fxios&&(s.firefox=!0,i.browser="firefox")):s.desktop=!0,(s.ipod||s.ipad||s.iphone)&&(s.ios=!0),s["windows phone"]&&(s.winphone=!0,delete s["windows phone"]),(s.chrome||s.opr||s.safari||s.vivaldi||!0===s.mobile&&!0!==s.ios&&!0!==o)&&(s.webkit=!0),(s.rv||s.iemobile)&&(i.browser="ie",s.ie=!0),(s.safari&&s.blackberry||s.bb)&&(i.browser="blackberry",s.blackberry=!0),s.safari&&s.playbook&&(i.browser="playbook",s.playbook=!0),s.opr&&(i.browser="opera",s.opera=!0),s.safari&&s.android&&(i.browser="android",s.android=!0),s.safari&&s.kindle&&(i.browser="kindle",s.kindle=!0),s.safari&&s.silk&&(i.browser="silk",s.silk=!0),s.vivaldi&&(i.browser="vivaldi",s.vivaldi=!0),s.name=i.browser,s.platform=i.platform,!1===isSSR&&(e.indexOf("electron")>-1?s.electron=!0:document.location.href.indexOf("-extension://")>-1?s.bex=!0:(void 0!==window.Capacitor?(s.capacitor=!0,s.nativeMobile=!0,s.nativeMobileWrapper="capacitor"):void 0!==window._cordovaNative||void 0!==window.cordova?(s.cordova=!0,s.nativeMobile=!0,s.nativeMobileWrapper="cordova"):!0===window.matchMedia("(display-mode: standalone)").matches&&(s.standalone=!0),!0===hasTouch&&!0===s.mac&&(!0===s.desktop&&!0===s.safari||!0===s.nativeMobile&&!0!==s.android&&!0!==s.ios&&!0!==s.ipad)&&applyIosCorrection(s)),!0===(fromSSR=void 0===s.nativeMobile&&void 0===s.electron&&null!==document.querySelector("[data-server-rendered]"))&&(onSSR=!0)),s}const userAgent=!0!==isSSR?navigator.userAgent||navigator.vendor||window.opera:"",ssrClient={has:{touch:!1,webStorage:!1},within:{iframe:!1}},client=!1===isSSR?{userAgent:userAgent,is:getPlatform(userAgent),has:{touch:hasTouch,webStorage:(()=>{try{if(window.localStorage)return!0}catch(t){}return!1})()},within:{iframe:window.self!==window.top}}:ssrClient,Platform={install(t,e){!0===isSSR?e.server.push((t,e)=>{t.platform=this.parseSSR(e.ssr)}):!0===fromSSR?(Object.assign(this,client,iosCorrection,ssrClient),e.takeover.push(t=>{onSSR=fromSSR=!1,Object.assign(t.platform,client),iosCorrection=void 0}),Vue.util.defineReactive(t,"platform",this)):(Object.assign(this,client),t.platform=this)}};!0===isSSR?Platform.parseSSR=(t=>{const e=t.req.headers["user-agent"]||t.req.headers["User-Agent"]||"";return{...client,userAgent:e,is:getPlatform(e)}}):!0===client.is.ios&&window.navigator.vendor.toLowerCase().indexOf("apple");const listenOpts={hasPassive:!1,passiveCapture:!0,notPassiveCapture:!0};try{var opts=Object.defineProperty({},"passive",{get(){Object.assign(listenOpts,{hasPassive:!0,passive:{passive:!0},notPassive:{passive:!1},passiveCapture:{passive:!0,capture:!0},notPassiveCapture:{passive:!1,capture:!0}})}});window.addEventListener("qtest",null,opts),window.removeEventListener("qtest",null,opts)}catch(t){}function noop(){}function leftClick(t){return 0===t.button}function middleClick(t){return 1===t.button}function rightClick(t){return 2===t.button}function position(t){return t.touches&&t.touches[0]?t=t.touches[0]:t.changedTouches&&t.changedTouches[0]?t=t.changedTouches[0]:t.targetTouches&&t.targetTouches[0]&&(t=t.targetTouches[0]),{top:t.clientY,left:t.clientX}}function getEventPath(t){if(t.path)return t.path;if(t.composedPath)return t.composedPath();const e=[];let i=t.target;for(;i;){if(e.push(i),"HTML"===i.tagName)return e.push(document),e.push(window),e;i=i.parentElement}}function eventOnAncestors(t,e){const{target:i}=t;for(;null!==e&&void 0!==e;){if(e===i)return!0;e=e.parentNode}return!1}const LINE_HEIGHT=40,PAGE_HEIGHT=800;function getMouseWheelDistance(t){let e=t.deltaX,i=t.deltaY;if((e||i)&&t.deltaMode){const s=1===t.deltaMode?LINE_HEIGHT:PAGE_HEIGHT;e*=s,i*=s}return t.shiftKey&&!e&&([i,e]=[e,i]),{x:e,y:i}}function stop(t){t.stopPropagation()}function prevent(t){!1!==t.cancelable&&t.preventDefault()}function stopAndPrevent(t){!1!==t.cancelable&&t.preventDefault(),t.stopPropagation()}function preventDraggable(t,e){if(void 0===t||!0===e&&!0===t.__dragPrevented)return;const i=!0===e?t=>{t.__dragPrevented=!0,t.addEventListener("dragstart",prevent,listenOpts.notPassiveCapture)}:t=>{delete t.__dragPrevented,t.removeEventListener("dragstart",prevent,listenOpts.notPassiveCapture)};t.querySelectorAll("a, img").forEach(i)}function create(t,{bubbles:e=!1,cancelable:i=!1}={}){try{return new CustomEvent(t,{bubbles:e,cancelable:i})}catch(s){const o=document.createEvent("Event");return o.initEvent(t,e,i),o}}function addEvt(t,e,i){const s=`__q_${e}_evt`;t[s]=void 0!==t[s]?t[s].concat(i):i,i.forEach(e=>{e[0].addEventListener(e[1],t[e[2]],listenOpts[e[3]])})}function cleanEvt(t,e){const i=`__q_${e}_evt`;void 0!==t[i]&&(t[i].forEach(e=>{e[0].removeEventListener(e[1],t[e[2]],listenOpts[e[3]])}),t[i]=void 0)}var event={listenOpts:listenOpts,leftClick:leftClick,middleClick:middleClick,rightClick:rightClick,position:position,getEventPath:getEventPath,eventOnAncestors:eventOnAncestors,getMouseWheelDistance:getMouseWheelDistance,stop:stop,prevent:prevent,stopAndPrevent:stopAndPrevent,preventDraggable:preventDraggable,create:create};const isJapanese=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/,isChinese=/[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u,isKorean=/[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/,isPlainText=/[a-z0-9_ -]$/i,props$2=["isKeyboard","isComposing","isPointer","isMouse","isTouch","isDrag","isContext","isPending","event"];function getObject$1(){return props$2.reduce((t,e)=>(t[e]="event"===e&&null,t),{})}const config=getObject$1();config.isComposing=void 0;const eventsTouch=[["touchstart",{...config,isTouch:!0,isPointer:!0,isPending:!0},!0],["touchend",{...config,isTouch:!0,isPointer:!0,isPending:!1}],["touchcancel",{...config,isTouch:!0,isPointer:!0,isPending:!1}]],eventsCleanClick=["mousestart","touchstart","dragstart"],eventsTouchEnd=eventsTouch.slice(1),{passiveCapture:passiveCapture$3,notPassiveCapture:notPassiveCapture$1}=listenOpts,preventClickCleanupHandlers=[];function clickCleanup(){const{documentElement:t}=document,e=preventClickCleanupHandlers.slice();preventClickCleanupHandlers.length=0,e.forEach(e=>{t.removeEventListener("click",e,notPassiveCapture$1)})}const Interaction={install(t,e){if(!0===isSSR)return void e.server.push(t=>{t.interaction=getObject$1(),t.interaction.preventClick=noop});Object.assign(this,getObject$1());const i=this;props$2.forEach(t=>{Vue.util.defineReactive(i,t,i[t])}),Vue.util.defineReactive(t,"interaction",this);const s=(t,e,o)=>{const n=Object.keys(e).filter(t=>void 0!==e[t]).map(t=>{const s=e[t];return"function"==typeof s?e=>{i[t]=s(e)}:()=>{i[t]=s}}),r="function"==typeof o?o:!0===o?t=>{eventsTouchEnd.forEach(e=>{const i=s(e[0],e[1],()=>{eventsTouchEnd.forEach(e=>{t.target.removeEventListener(e[0],i,passiveCapture$3)})});t.target.addEventListener(config[0],i,passiveCapture$3)})}:noop,a=!0===eventsCleanClick.includes(t)?clickCleanup:noop;return t=>{n.forEach(e=>{e(t)}),i.event=t,r(t),a()}},{documentElement:o}=document,n=!0===client.is.firefox?t=>!1===isPlainText.test(t):t=>!0===isJapanese.test(t)||!0===isChinese.test(t)||!0===isKorean.test(t);[["keydown",{...config,isKeyboard:!0,isPending:!0}],["keypress",{...config,isKeyboard:!0,isPending:!0}],["keyup",{...config,isKeyboard:!0,isPending:!1}],!0===client.is.ios?["compositionstart",{isComposing:t=>(t.target.qComposing=!0,!0)}]:["compositionupdate",{isComposing:t=>(!0!==t.target.qComposing&&"string"==typeof t.data&&!0===n(t.data)&&(t.target.qComposing=!0),!0)}],["compositionend",{isComposing:t=>(!0===t.target.qComposing&&(t.target.qComposing=!1),!1)}],["mousedown",{...config,isMouse:!0,isPointer:!0,isPending:!0}],["mouseup",{...config,isMouse:!0,isPointer:!0,isPending:!1}],["dragstart",{isKeyboard:!1,isDrag:!0,isPending:!0}],["dragend",{isKeyboard:!1,isDrag:!0,isPending:!1}],["dragcancel",{isKeyboard:!1,isDrag:!0,isPending:!1}],["drop",{isKeyboard:!1,isDrag:!0,isPending:!1}],["contextmenu",{isContext:!0,isPending:!1}]].forEach(t=>{o.addEventListener(t[0],s.apply(this,t),passiveCapture$3)}),!0===client.has.touch&&eventsTouch.forEach(t=>{o.addEventListener(t[0],s.apply(this,t),passiveCapture$3)})},preventClick(t,e){const{documentElement:i}=document,s=i=>{t===i.target&&(!0===e?stopAndPrevent(i):prevent(i)),clickCleanup()};i.addEventListener("click",s,notPassiveCapture$1),preventClickCleanupHandlers.push(s)}};function debounce(t,e=250,i){let s;function o(){const o=arguments;clearTimeout(s),!0===i&&void 0===s&&t.apply(this,o),s=setTimeout(()=>{s=void 0,!0!==i&&t.apply(this,o)},e)}return o.cancel=(()=>{clearTimeout(s)}),o}const SIZE_LIST=["sm","md","lg","xl"],{passive:passive$4}=listenOpts;var Screen={width:0,height:0,name:"xs",sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1,setSizes:noop,setDebounce:noop,install(t,e,i){if(!0===isSSR)return void(t.screen=this);const{visualViewport:s}=window,o=s||window,n=document.scrollingElement||document.documentElement,r=void 0===s||!0===client.is.mobile?()=>[Math.max(window.innerWidth,n.clientWidth),Math.max(window.innerHeight,n.clientHeight)]:()=>[s.width*s.scale+window.innerWidth-n.clientWidth,s.height*s.scale+window.innerHeight-n.clientHeight],a=void 0!==i.screen&&!0===i.screen.bodyClasses,l=t=>{const[e,i]=r();if(i!==this.height&&(this.height=i),e!==this.width)this.width=e;else if(!0!==t)return;let s=this.sizes;this.gt.xs=e>=s.sm,this.gt.sm=e>=s.md,this.gt.md=e>=s.lg,this.gt.lg=e>=s.xl,this.lt.sm=e{SIZE_LIST.forEach(e=>{void 0!==t[e]&&(c[e]=t[e])})}),this.setDebounce=(t=>{d=t});const u=()=>{const t=getComputedStyle(document.body);t.getPropertyValue("--q-size-sm")&&SIZE_LIST.forEach(e=>{this.sizes[e]=parseInt(t.getPropertyValue(`--q-size-${e}`),10)}),this.setSizes=(t=>{SIZE_LIST.forEach(e=>{t[e]&&(this.sizes[e]=t[e])}),l(!0)}),this.setDebounce=(t=>{void 0!==h&&o.removeEventListener("resize",h,passive$4),h=t>0?debounce(l,t):l,o.addEventListener("resize",h,passive$4)}),this.setDebounce(d),Object.keys(c).length>0?(this.setSizes(c),c=void 0):l(),!0===a&&"xs"===this.name&&document.body.classList.add("screen--xs")};!0===fromSSR?e.takeover.push(u):u(),Vue.util.defineReactive(t,"screen",this)}};const Dark={isActive:null,mode:!1,install(t,e,{dark:i}){if(this.isActive="auto"===i?null:!0===i,!0===isSSR)return e.server.push((t,e)=>{t.dark={isActive:null,mode:!1,set:i=>{e.ssr.Q_BODY_CLASSES=e.ssr.Q_BODY_CLASSES.replace(" body--light","").replace(" body--dark-auto","").replace(" body--dark","")+` body--${!0===i?"dark":"auto"===i?"dark-auto":"light"}`,t.dark.isActive="auto"===i?null:!0===i,t.dark.mode=i},toggle:()=>{t.dark.set(!1===t.dark.isActive)}},t.dark.set(i)}),void(this.set=noop);const s=void 0!==i&&i;if(!0===fromSSR){const t=t=>{this.__fromSSR=t},i=this.set;this.set=t,t(s),e.takeover.push(()=>{document.body.classList.remove("body--dark-auto"),this.set=i,this.set(this.__fromSSR)})}else this.set(s);Vue.util.defineReactive(this,"isActive",this.isActive),Vue.util.defineReactive(t,"dark",this)},set(t){this.mode=t,"auto"===t?(void 0===this.__media&&(this.__media=window.matchMedia("(prefers-color-scheme: dark)"),this.__updateMedia=(()=>{this.set("auto")}),this.__media.addListener(this.__updateMedia)),t=this.__media.matches):void 0!==this.__media&&(this.__media.removeListener(this.__updateMedia),this.__media=void 0),this.isActive=!0===t,document.body.classList.remove(`body--${!0===t?"light":"dark"}`),document.body.classList.add(`body--${!0===t?"dark":"light"}`)},toggle(){Dark.set(!1===Dark.isActive)},__media:void 0},getTrue=()=>!0;function filterInvalidPath(t){return"string"==typeof t&&""!==t&&"/"!==t&&"#/"!==t}function normalizeExitPath(t){return!0===t.startsWith("#")&&(t=t.substr(1)),!1===t.startsWith("/")&&(t="/"+t),!0===t.endsWith("/")&&(t=t.substr(0,t.length-1)),"#"+t}function getShouldExitFn(t){if(!1===t.backButtonExit)return()=>!1;if("*"===t.backButtonExit)return getTrue;const e=["#/"];return!0===Array.isArray(t.backButtonExit)&&e.push(...t.backButtonExit.filter(filterInvalidPath).map(normalizeExitPath)),()=>e.includes(window.location.hash)}var History={__history:[],add:noop,remove:noop,install(t){if(!0===isSSR)return;const{cordova:e,capacitor:i}=client.is;if(!0!==e&&!0!==i)return;const s=t[!0===e?"cordova":"capacitor"];if(void 0!==s&&!1===s.backButton)return;if(!0===i&&(void 0===window.Capacitor||void 0===window.Capacitor.Plugins.App))return;this.add=(t=>{void 0===t.condition&&(t.condition=getTrue),this.__history.push(t)}),this.remove=(t=>{const e=this.__history.indexOf(t);e>=0&&this.__history.splice(e,1)});const o=getShouldExitFn(Object.assign({backButtonExit:!0},s)),n=()=>{if(this.__history.length){const t=this.__history[this.__history.length-1];!0===t.condition()&&(this.__history.pop(),t.handler())}else!0===o()?navigator.app.exitApp():window.history.back()};!0===e?document.addEventListener("deviceready",()=>{document.addEventListener("backbutton",n,!1)}):window.Capacitor.Plugins.App.addListener("backButton",n)}},defaultLang={isoName:"en-us",nativeName:"English (US)",label:{clear:"Clear",ok:"OK",cancel:"Cancel",close:"Close",set:"Set",select:"Select",reset:"Reset",remove:"Remove",update:"Update",create:"Create",search:"Search",filter:"Filter",refresh:"Refresh",expand:function(t){return t?`Expand "${t}"`:"Expand"},collapse:function(t){return t?`Collapse "${t}"`:"Collapse"}},date:{days:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),daysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"days"},table:{noData:"No data available",noResults:"No matching records found",loading:"Loading...",selectedRecords:function(t){return 1===t?"1 record selected.":(0===t?"No":t)+" records selected."},recordsPerPage:"Records per page:",allRows:"All",pagination:function(t,e,i){return t+"-"+e+" of "+i},columns:"Columns"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}};function getLocale(){if(!0===isSSR)return;const t=navigator.language||navigator.languages[0]||navigator.browserLanguage||navigator.userLanguage||navigator.systemLanguage;return t?t.toLowerCase():void 0}var lang={getLocale:getLocale,install(t,e,i){this.set=((e=defaultLang,i)=>{const s={...e,rtl:!0===e.rtl,getLocale:getLocale};if(!0===isSSR){if(void 0===i)return void console.error("SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)");const t=!0===s.rtl?"rtl":"ltr",e=`lang=${s.isoName} dir=${t}`;s.set=i.$q.lang.set,i.Q_HTML_ATTRS=void 0!==i.Q_PREV_LANG?i.Q_HTML_ATTRS.replace(i.Q_PREV_LANG,e):e,i.Q_PREV_LANG=e,i.$q.lang=s}else{if(!1===fromSSR){const t=document.documentElement;t.setAttribute("dir",!0===s.rtl?"rtl":"ltr"),t.setAttribute("lang",s.isoName)}s.set=this.set,t.lang=this.props=s,this.isoName=s.isoName,this.nativeName=s.nativeName}});const s=i||defaultLang;!0===isSSR?(e.server.push((t,e)=>{t.lang={},t.lang.set=(t=>{this.set(t,e.ssr)}),t.lang.set(s)}),this.isoName!==s.isoName&&(this.isoName=s.isoName,this.nativeName=s.nativeName,this.props=s)):(Vue.util.defineReactive(t,"lang",{}),this.set(s))}};const reRGBA=/^rgb(a)?\((\d{1,3}),(\d{1,3}),(\d{1,3}),?([01]?\.?\d*?)?\)$/;function rgbToHex({r:t,g:e,b:i,a:s}){const o=void 0!==s;if(t=Math.round(t),e=Math.round(e),i=Math.round(i),t>255||e>255||i>255||o&&s>100)throw new TypeError("Expected 3 numbers below 256 (and optionally one below 100)");return s=o?(256|Math.round(255*s/100)).toString(16).slice(1):"","#"+(i|e<<8|t<<16|1<<24).toString(16).slice(1)+s}function rgbToString({r:t,g:e,b:i,a:s}){return`rgb${void 0!==s?"a":""}(${t},${e},${i}${void 0!==s?","+s/100:""})`}function hexToRgb(t){if("string"!=typeof t)throw new TypeError("Expected a string");3===(t=t.replace(/^#/,"")).length?t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:4===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);const e=parseInt(t,16);return t.length>6?{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:Math.round((255&e)/2.55)}:{r:e>>16,g:e>>8&255,b:255&e}}function hsvToRgb({h:t,s:e,v:i,a:s}){let o,n,r;e/=100,i/=100,t/=360;const a=Math.floor(6*t),l=6*t-a,h=i*(1-e),c=i*(1-l*e),d=i*(1-(1-l)*e);switch(a%6){case 0:o=i,n=d,r=h;break;case 1:o=c,n=i,r=h;break;case 2:o=h,n=i,r=d;break;case 3:o=h,n=c,r=i;break;case 4:o=d,n=h,r=i;break;case 5:o=i,n=h,r=c}return{r:Math.round(255*o),g:Math.round(255*n),b:Math.round(255*r),a:s}}function rgbToHsv({r:t,g:e,b:i,a:s}){const o=Math.max(t,e,i),n=Math.min(t,e,i),r=o-n,a=0===o?0:r/o,l=o/255;let h;switch(o){case n:h=0;break;case t:h=e-i+r*(e1)throw new TypeError("Expected offset to be between -1 and 1");const{r:i,g:s,b:o,a:n}=textToRgb(t),r=void 0!==n?n/100:0;return rgbToHex({r:i,g:s,b:o,a:Math.round(100*Math.min(1,Math.max(0,r+e)))})}function setBrand(t,e,i=document.body){if("string"!=typeof t)throw new TypeError("Expected a string as color");if("string"!=typeof e)throw new TypeError("Expected a string as value");if(!(i instanceof Element))throw new TypeError("Expected a DOM element");i.style.setProperty(`--q-color-${t}`,e)}function getBrand(t,e=document.body){if("string"!=typeof t)throw new TypeError("Expected a string as color");if(!(e instanceof Element))throw new TypeError("Expected a DOM element");return getComputedStyle(e).getPropertyValue(`--q-color-${t}`).trim()||null}function getPaletteColor(t){if("string"!=typeof t)throw new TypeError("Expected a string as color");const e=document.createElement("div");e.className=`text-${t} invisible fixed no-pointer-events`,document.body.appendChild(e);const i=getComputedStyle(e).getPropertyValue("color");return e.remove(),rgbToHex(textToRgb(i))}var colors={rgbToHex:rgbToHex,hexToRgb:hexToRgb,hsvToRgb:hsvToRgb,rgbToHsv:rgbToHsv,textToRgb:textToRgb,lighten:lighten,luminosity:luminosity,brightness:brightness,blend:blend,changeAlpha:changeAlpha,setBrand:setBrand,getBrand:getBrand,getPaletteColor:getPaletteColor};function getMobilePlatform(t){return!0===t.ios?"ios":!0===t.android?"android":void 0}function getBodyClasses({is:t,has:e,within:i},s){const o=[!0===t.desktop?"desktop":"mobile",`${!1===e.touch?"no-":""}touch`];if(!0===t.mobile){const e=getMobilePlatform(t);void 0!==e&&o.push("platform-"+e)}if(!0===t.nativeMobile){const e=t.nativeMobileWrapper;o.push(e),o.push("native-mobile"),!0!==t.ios||void 0!==s[e]&&!1===s[e].iosStatusBarPadding||o.push("q-ios-padding")}else!0===t.electron?o.push("electron"):!0===t.bex&&o.push("bex");return!0===i.iframe&&o.push("within-iframe"),o}function clientUpdate(){const t=document.body.className;let e=t;void 0!==iosCorrection&&(e=e.replace("desktop","platform-ios mobile")),!0===client.has.touch&&(e=e.replace("no-touch","touch")),!0===client.within.iframe&&(e+=" within-iframe"),t!==e&&(document.body.className=e)}function setColors(t){for(const e in t)setBrand(e,t[e])}var Body={install(t,e){if(!0!==isSSR){if(!0===fromSSR)clientUpdate();else{const t=getBodyClasses(client,e);!0===client.is.ie&&11===client.is.versionNumber?t.forEach(t=>document.body.classList.add(t)):document.body.classList.add.apply(document.body.classList,t)}void 0!==e.brand&&setColors(e.brand)}else t.server.push((t,i)=>{const s=getBodyClasses(t.platform,e),o=i.ssr.setBodyClasses;void 0!==e.screen&&!0===e.screen.bodyClass&&s.push("screen--xs"),"function"==typeof o?o(s):i.ssr.Q_BODY_CLASSES=s.join(" ")})}},materialIcons={name:"material-icons",type:{positive:"check_circle",negative:"warning",info:"info",warning:"priority_high"},arrow:{up:"arrow_upward",right:"arrow_forward",down:"arrow_downward",left:"arrow_back",dropdown:"arrow_drop_down"},chevron:{left:"chevron_left",right:"chevron_right"},colorPicker:{spectrum:"gradient",tune:"tune",palette:"style"},pullToRefresh:{icon:"refresh"},carousel:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down",navigationIcon:"lens"},chip:{remove:"cancel",selected:"check"},datetime:{arrowLeft:"chevron_left",arrowRight:"chevron_right",now:"access_time",today:"today"},editor:{bold:"format_bold",italic:"format_italic",strikethrough:"strikethrough_s",underline:"format_underlined",unorderedList:"format_list_bulleted",orderedList:"format_list_numbered",subscript:"vertical_align_bottom",superscript:"vertical_align_top",hyperlink:"link",toggleFullscreen:"fullscreen",quote:"format_quote",left:"format_align_left",center:"format_align_center",right:"format_align_right",justify:"format_align_justify",print:"print",outdent:"format_indent_decrease",indent:"format_indent_increase",removeFormat:"format_clear",formatting:"text_format",fontSize:"format_size",align:"format_align_left",hr:"remove",undo:"undo",redo:"redo",heading:"format_size",code:"code",size:"format_size",font:"font_download",viewSource:"code"},expansionItem:{icon:"keyboard_arrow_down",denseIcon:"arrow_drop_down"},fab:{icon:"add",activeIcon:"close"},field:{clear:"cancel",error:"error"},pagination:{first:"first_page",prev:"keyboard_arrow_left",next:"keyboard_arrow_right",last:"last_page"},rating:{icon:"grade"},stepper:{done:"check",active:"edit",error:"warning"},tabs:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down"},table:{arrowUp:"arrow_upward",warning:"warning",firstPage:"first_page",prevPage:"chevron_left",nextPage:"chevron_right",lastPage:"last_page"},tree:{icon:"play_arrow"},uploader:{done:"done",clear:"clear",add:"add_box",upload:"cloud_upload",removeQueue:"clear_all",removeUploaded:"done_all"}},iconSet={install(t,e,i){const s=i||materialIcons;this.set=((e,i)=>{const s={...e};if(!0===isSSR){if(void 0===i)return void console.error("SSR ERROR: second param required: Quasar.iconSet.set(iconSet, ssrContext)");s.set=i.$q.iconSet.set,i.$q.iconSet=s}else s.set=this.set,t.iconSet=s}),!0===isSSR?e.server.push((t,e)=>{t.iconSet={},t.iconSet.set=(t=>{this.set(t,e.ssr)}),t.iconSet.set(s)}):(Vue.util.defineReactive(t,"iconMapFn",void 0),Vue.util.defineReactive(t,"iconSet",{}),this.set(s))}};const autoInstalled=[Platform,Screen,Dark,Interaction],queues={server:[],takeover:[]},$q={version:version,config:{}};function install(t,e={}){if(!0===this.__qInstalled)return;this.__qInstalled=!0;const i=$q.config=Object.freeze(e.config||{});if(Platform.install($q,queues),Body.install(queues,i),Dark.install($q,queues,i),Interaction.install($q,queues),Screen.install($q,queues,i),History.install(i),lang.install($q,queues,e.lang),iconSet.install($q,queues,e.iconSet),!0===isSSR?t.mixin({beforeCreate(){this.$q=this.$root.$options.$q}}):t.prototype.$q=$q,e.components&&Object.keys(e.components).forEach(i=>{const s=e.components[i];"function"==typeof s&&t.component(s.options.name,s)}),e.directives&&Object.keys(e.directives).forEach(i=>{const s=e.directives[i];void 0!==s.name&&void 0!==s.unbind&&t.directive(s.name,s)}),e.plugins){const t={$q:$q,queues:queues,cfg:i};Object.keys(e.plugins).forEach(i=>{const s=e.plugins[i];"function"==typeof s.install&&!1===autoInstalled.includes(s)&&s.install(t)})}}const mixin$1={mounted(){queues.takeover.forEach(t=>{t(this.$q)})}};function ssrUpdate(t){if(t.ssr){const e={...$q,ssrContext:t.ssr};Object.assign(t.ssr,{Q_HEAD_TAGS:"",Q_BODY_ATTRS:"",Q_BODY_TAGS:""}),t.app.$q=t.ssr.$q=e,queues.server.forEach(i=>{i(e,t)})}else{const e=t.app.mixins||[];!1===e.includes(mixin$1)&&(t.app.mixins=e.concat(mixin$1))}}var VuePlugin={version:version,install:install,lang:lang,iconSet:iconSet,ssrUpdate:ssrUpdate};const units=["B","KB","MB","GB","TB","PB"];function humanStorageSize(t){let e=0;for(;parseInt(t,10)>=1024&&e=e?s:new Array(e-s.length+1).join(i)+s}var format={humanStorageSize:humanStorageSize,capitalize:capitalize,between:between,normalizeToInterval:normalizeToInterval,pad:pad};function cache(t,e,i){if(!0===isSSR)return i;const s=`__qcache_${e}`;return void 0===t[s]?t[s]=i:t[s]}function cacheWithFn(t,e,i){if(!0===isSSR)return i();const s=`__qcache_${e}`;return void 0===t[s]?t[s]=i():t[s]}function getPropCacheMixin(t,e){return{data(){const i={},s=this[t];for(const t in s)i[t]=s[t];return{[e]:i}},watch:{[t](t,i){const s=this[e];if(void 0!==i)for(const e in i)void 0===t[e]&&this.$delete(s,e);for(const e in t)s[e]!==t[e]&&this.$set(s,e,t[e])}}}}const ariaHidden={"aria-hidden":"true"},iconAsButton={tabindex:0,type:"button","aria-hidden":!1,role:null};var AttrsMixin=getPropCacheMixin("$attrs","qAttrs");const xhr=isSSR?null:XMLHttpRequest,open=isSSR?null:xhr.prototype.open,positionValues=["top","right","bottom","left"];let stack=[],highjackCount=0;function translate({p:t,pos:e,active:i,horiz:s,reverse:o,dir:n}){let r=1,a=1;return!0===s?(!0===o&&(r=-1),"bottom"===e&&(a=-1),{transform:`translate3d(${r*(t-100)}%,${i?0:-200*a}%,0)`}):(!0===o&&(a=-1),"right"===e&&(r=-1),{transform:`translate3d(${i?0:n*r*-200}%,${a*(t-100)}%,0)`})}function inc(t,e){return"number"!=typeof e&&(e=t<25?3*Math.random()+3:t<65?3*Math.random():t<85?2*Math.random():t<99?.6:0),between(t+e,0,100)}function highjackAjax(t){highjackCount++,stack.push(t),highjackCount>1||(xhr.prototype.open=function(t,e){const i=[];this.addEventListener("loadstart",()=>{stack.forEach(t=>{const s=t.getHijackFilter();null!==s&&!0!==s(e)||(t.start(),i.push(t.stop))})},{once:!0}),this.addEventListener("loadend",()=>{i.forEach(t=>{t()})},{once:!0}),open.apply(this,arguments)})}function restoreAjax(t){stack=stack.filter(e=>e.start!==t),(highjackCount=Math.max(0,highjackCount-1))||(xhr.prototype.open=open)}var QAjaxBar=Vue.extend({name:"QAjaxBar",props:{position:{type:String,default:"top",validator:t=>positionValues.includes(t)},size:{type:String,default:"2px"},color:String,reverse:Boolean,skipHijack:Boolean,hijackFilter:Function},data:()=>({calls:0,progress:0,onScreen:!1,animate:!0}),computed:{classes(){return`q-loading-bar q-loading-bar--${this.position}`+(void 0!==this.color?` bg-${this.color}`:"")+(!0===this.animate?"":" no-transition")},style(){const t=this.onScreen,e=translate({p:this.progress,pos:this.position,active:t,horiz:this.horizontal,reverse:!0===this.$q.lang.rtl&&["top","bottom"].includes(this.position)?!1===this.reverse:this.reverse,dir:!0===this.$q.lang.rtl?-1:1});return e[this.sizeProp]=this.size,e.opacity=t?1:0,e},horizontal(){return"top"===this.position||"bottom"===this.position},sizeProp(){return this.horizontal?"height":"width"},attrs(){return!0===this.onScreen?{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":this.progress}:ariaHidden}},methods:{start(t=300){const e=this.speed,i=this.speed=Math.max(0,t)||0;return this.calls++,this.calls>1?(0===e&&i>0?this.__work():e>0&&i<=0&&clearTimeout(this.timer),this.calls):(clearTimeout(this.timer),this.$emit("start"),this.progress=0,this.timer=setTimeout(()=>{this.animate=!0,i>0&&this.__work()},!0===this.onScreen?500:1),!0!==this.onScreen&&(this.onScreen=!0,this.animate=!1),this.calls)},increment(t){return this.calls>0&&(this.progress=inc(this.progress,t)),this.calls},stop(){if(this.calls=Math.max(0,this.calls-1),this.calls>0)return this.calls;clearTimeout(this.timer),this.$emit("stop");const t=()=>{this.animate=!0,this.progress=100,this.timer=setTimeout(()=>{this.onScreen=!1},1e3)};return 0===this.progress?this.timer=setTimeout(t,1):t(),this.calls},__work(){this.progress<100&&(this.timer=setTimeout(()=>{this.increment(),this.__work()},this.speed))}},mounted(){!0!==this.skipHijack&&(this.hijacked=!0,highjackAjax({start:this.start,stop:this.stop,getHijackFilter:()=>this.hijackFilter||null}))},beforeDestroy(){clearTimeout(this.timer),!0===this.hijacked&&restoreAjax(this.start)},render(t){return t("div",{class:this.classes,style:this.style,attrs:this.attrs})}});const sizes={xs:18,sm:24,md:32,lg:38,xl:46};function getSizeMixin(t){return{props:{size:String},computed:{sizeStyle(){if(void 0!==this.size)return{fontSize:this.size in t?`${t[this.size]}px`:this.size}}}}}var SizeMixin=getSizeMixin(sizes),TagMixin={props:{tag:{type:String,default:"div"}}},ListenersMixin=getPropCacheMixin("$listeners","qListeners");function slot(t,e,i){return void 0!==t.$scopedSlots[e]?t.$scopedSlots[e]():i}function uniqueSlot(t,e,i){return void 0!==t.$scopedSlots[e]?[].concat(t.$scopedSlots[e]()):i}function mergeSlot(t,e,i){return void 0!==e.$scopedSlots[i]?t.concat(e.$scopedSlots[i]()):t}function mergeSlotSafely(t,e,i){if(void 0===e.$scopedSlots[i])return t;const s=e.$scopedSlots[i]();return void 0!==t?t.concat(s):s}const defaultViewBox="0 0 24 24",sameFn=t=>t,ionFn=t=>`ionicons ${t}`,libMap={"mdi-":t=>`mdi ${t}`,"icon-":sameFn,"bt-":t=>`bt ${t}`,"eva-":t=>`eva ${t}`,"ion-md":ionFn,"ion-ios":ionFn,"ion-logo":ionFn,"iconfont ":sameFn,"ti-":t=>`themify-icon ${t}`,"bi-":t=>`bootstrap-icons ${t}`},matMap={o_:"-outlined",r_:"-round",s_:"-sharp"},symMap={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},libRE=new RegExp("^("+Object.keys(libMap).join("|")+")"),matRE=new RegExp("^("+Object.keys(matMap).join("|")+")"),symRE=new RegExp("^("+Object.keys(symMap).join("|")+")"),mRE=/^[Mm]\s?[-+]?\.?\d/,imgRE=/^img:/,svgUseRE=/^svguse:/,ionRE=/^ion-/,faRE=/^(fa-(solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;var QIcon=Vue.extend({name:"QIcon",mixins:[ListenersMixin,SizeMixin,TagMixin],props:{tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean},computed:{classes(){return"q-icon"+(!0===this.left?" on-left":"")+(!0===this.right?" on-right":"")+(void 0!==this.color?` text-${this.color}`:"")},type(){let t,e=this.name;if("none"===e||!e)return{none:!0};if(void 0!==this.$q.iconMapFn){const t=this.$q.iconMapFn(e);if(void 0!==t){if(void 0===t.icon)return{cls:t.cls,content:void 0!==t.content?t.content:" "};if("none"===(e=t.icon)||!e)return{none:!0}}}if(!0===mRE.test(e)){const[t,i=defaultViewBox]=e.split("|");return{svg:!0,viewBox:i,nodes:t.split("&&").map(t=>{const[e,i,s]=t.split("@@");return this.$createElement("path",{attrs:{d:e,transform:s},style:i})})}}if(!0===imgRE.test(e))return{img:!0,src:e.substring(4)};if(!0===svgUseRE.test(e)){const[t,i=defaultViewBox]=e.split("|");return{svguse:!0,src:t.substring(7),viewBox:i}}let i=" ";const s=e.match(libRE);if(null!==s)t=libMap[s[1]](e);else if(!0===faRE.test(e))t=e;else if(!0===ionRE.test(e))t=`ionicons ion-${!0===this.$q.platform.is.ios?"ios":"md"}${e.substr(3)}`;else if(!0===symRE.test(e)){t="notranslate material-symbols";const s=e.match(symRE);null!==s&&(e=e.substring(6),t+=symMap[s[1]]),i=e}else{t="notranslate material-icons";const s=e.match(matRE);null!==s&&(e=e.substring(2),t+=matMap[s[1]]),i=e}return{cls:t,content:i}}},render(t){const e={class:this.classes,style:this.sizeStyle,on:{...this.qListeners},attrs:{"aria-hidden":"true",role:"presentation"}};return!0===this.type.none?t(this.tag,e,slot(this,"default")):!0===this.type.img?t("span",e,mergeSlot([t("img",{attrs:{src:this.type.src}})],this,"default")):!0===this.type.svg?t("span",e,mergeSlot([t("svg",{attrs:{viewBox:this.type.viewBox||"0 0 24 24",focusable:"false"}},this.type.nodes)],this,"default")):!0===this.type.svguse?t("span",e,mergeSlot([t("svg",{attrs:{viewBox:this.type.viewBox,focusable:"false"}},[t("use",{attrs:{"xlink:href":this.type.src}})])],this,"default")):(void 0!==this.type.cls&&(e.class+=" "+this.type.cls),t(this.tag,e,mergeSlot([this.type.content],this,"default")))}}),QAvatar=Vue.extend({name:"QAvatar",mixins:[ListenersMixin,SizeMixin],props:{fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},computed:{classes(){return{[`bg-${this.color}`]:this.color,[`text-${this.textColor} q-chip--colored`]:this.textColor,"q-avatar--square":this.square,"rounded-borders":this.rounded}},contentStyle(){if(this.fontSize)return{fontSize:this.fontSize}}},render(t){const e=void 0!==this.icon?[t(QIcon,{props:{name:this.icon}})]:void 0;return t("div",{staticClass:"q-avatar",style:this.sizeStyle,class:this.classes,on:{...this.qListeners}},[t("div",{staticClass:"q-avatar__content row flex-center overflow-hidden",style:this.contentStyle},mergeSlotSafely(e,this,"default"))])}}),QBadge=Vue.extend({name:"QBadge",mixins:[ListenersMixin],props:{color:String,textColor:String,floating:Boolean,transparent:Boolean,multiLine:Boolean,outline:Boolean,rounded:Boolean,label:[Number,String],align:{type:String,validator:t=>["top","middle","bottom"].includes(t)}},computed:{style(){if(void 0!==this.align)return{verticalAlign:this.align}},classes(){const t=!0===this.outline&&this.color||this.textColor;return"q-badge flex inline items-center no-wrap"+` q-badge--${!0===this.multiLine?"multi":"single"}-line`+(!0===this.outline?" q-badge--outline":void 0!==this.color?` bg-${this.color}`:"")+(void 0!==t?` text-${t}`:"")+(!0===this.floating?" q-badge--floating":"")+(!0===this.rounded?" q-badge--rounded":"")+(!0===this.transparent?" q-badge--transparent":"")},attrs(){return{role:"status","aria-label":this.label}}},render(t){return t("div",{style:this.style,class:this.classes,attrs:this.attrs,on:{...this.qListeners}},void 0!==this.label?[this.label]:slot(this,"default"))}}),DarkMixin={props:{dark:{type:Boolean,default:null}},computed:{darkSuffix(){return null===this.dark&&null===this.$q.dark.isActive?"dark-auto":!0===this.dark||null===this.dark&&!0===this.$q.dark.isActive?"dark":"light"}}};const attrs$6={role:"alert"};var QBanner=Vue.extend({name:"QBanner",mixins:[ListenersMixin,DarkMixin],props:{inlineActions:Boolean,dense:Boolean,rounded:Boolean},render(t){const e=slot(this,"action"),i=[t("div",{staticClass:"q-banner__avatar col-auto row items-center self-start"},slot(this,"avatar")),t("div",{staticClass:"q-banner__content col text-body2"},slot(this,"default"))];return void 0!==e&&i.push(t("div",{staticClass:"q-banner__actions row items-center justify-end",class:`col-${!0===this.inlineActions?"auto":"all"}`},e)),t("div",{staticClass:"q-banner row items-center",class:{"q-banner--top-padding":void 0!==e&&!this.inlineActions,"q-banner--dense":this.dense,[`q-banner--${this.darkSuffix} q-${this.darkSuffix}`]:!0,"rounded-borders":this.rounded},attrs:attrs$6,on:{...this.qListeners}},i)}});const attrs$5={role:"toolbar"};var QBar=Vue.extend({name:"QBar",mixins:[ListenersMixin,DarkMixin],props:{dense:Boolean},computed:{classes(){return`q-bar--${!0===this.dense?"dense":"standard"}`+` q-bar--${this.darkSuffix}`}},render(t){return t("div",{staticClass:"q-bar row no-wrap items-center",class:this.classes,attrs:attrs$5,on:{...this.qListeners}},slot(this,"default"))}});const alignMap={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},alignValues$2=Object.keys(alignMap);var AlignMixin={props:{align:{type:String,validator:t=>alignValues$2.includes(t)}},computed:{alignClass(){const t=void 0===this.align?!0===this.vertical?"stretch":"left":this.align;return`${!0===this.vertical?"items":"justify"}-${alignMap[t]}`}}};const disabledValues=[!0,""];var QBreadcrumbs=Vue.extend({name:"QBreadcrumbs",mixins:[ListenersMixin,AlignMixin],props:{separator:{type:String,default:"/"},separatorColor:String,activeColor:{type:String,default:"primary"},gutter:{type:String,validator:t=>["none","xs","sm","md","lg","xl"].includes(t),default:"sm"}},computed:{classes(){return`${this.alignClass}${"none"===this.gutter?"":` q-gutter-${this.gutter}`}`},sepClass(){return this.separatorColor?` text-${this.separatorColor}`:""},activeClass(){return` text-${this.activeColor}`}},render(t){const e=slot(this,"default");if(void 0===e)return;let i=1;const s=[],o=e.filter(t=>void 0!==t.tag&&t.tag.endsWith("-QBreadcrumbsEl")).length,n=void 0!==this.$scopedSlots.separator?this.$scopedSlots.separator:()=>this.separator;return e.forEach(e=>{if(void 0!==e.tag&&e.tag.endsWith("-QBreadcrumbsEl")){const r=i{})},__navigateOnClick(t){if(!0===this.hasRouterLink){const e=e=>this.__navigateToRouterLink(t,e);this.$emit("click",t,e),!1===t.navigate&&t.preventDefault(),!0!==t.defaultPrevented&&e()}else this.$emit("click",t)}}},QBreadcrumbsEl=Vue.extend({name:"QBreadcrumbsEl",mixins:[ListenersMixin,RouterLinkMixin],props:{label:String,icon:String},computed:{iconClass(){return"q-breadcrumbs__el-icon"+(void 0!==this.label?" q-breadcrumbs__el-icon--with-label":"")},renderData(){return{staticClass:"q-breadcrumbs__el q-link flex inline items-center relative-position "+(!0!==this.disable?"q-link--focusable"+this.linkClass:"q-breadcrumbs__el--disabled"),attrs:this.linkAttrs,on:{...this.qListeners,click:this.__navigateOnClick}}}},beforeCreate(){this.fallbackTag="span"},render(t){const e=[];return void 0!==this.icon&&e.push(t(QIcon,{class:this.iconClass,props:{name:this.icon}})),void 0!==this.label&&e.push(this.label),t(this.linkTag,this.renderData,mergeSlot(e,this,"default"))}}),mixin={mixins:[ListenersMixin],props:{color:String,size:{type:[Number,String],default:"1em"}},computed:{cSize(){return this.size in sizes?`${sizes[this.size]}px`:this.size},classes(){if(this.color)return`text-${this.color}`}}},QSpinner=Vue.extend({name:"QSpinner",mixins:[mixin],props:{thickness:{type:Number,default:5}},render(t){return t("svg",{staticClass:"q-spinner q-spinner-mat",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"25 25 50 50"}},[t("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":this.thickness,"stroke-miterlimit":"10"}})])}});function offset(t){if(t===window)return{top:0,left:0};const{top:e,left:i}=t.getBoundingClientRect();return{top:e,left:i}}function style(t,e){return window.getComputedStyle(t).getPropertyValue(e)}function height(t){return t===window?window.innerHeight:t.getBoundingClientRect().height}function width$1(t){return t===window?window.innerWidth:t.getBoundingClientRect().width}function css(t,e){const i=t.style;Object.keys(e).forEach(t=>{i[t]=e[t]})}function cssBatch(t,e){t.forEach(t=>css(t,e))}function ready(t){if("function"==typeof t)return"loading"!==document.readyState?t():void document.addEventListener("DOMContentLoaded",t,!1)}function getElement(t){const e=typeof t;if("function"===e&&(t=t()),"string"===e)try{t=document.querySelector(t)}catch(t){}return t!==Object(t)?null:!0===t._isVue&&void 0!==t.$el?t.$el:t}function getBodyFullscreenElement(t){return t===document.documentElement||null===t?document.body:t}var dom={offset:offset,style:style,height:height,width:width$1,css:css,cssBatch:cssBatch,ready:ready};function shouldIgnoreKey(t){return t!==Object(t)||0!==t.type.indexOf("key")||t.target!==document.activeElement||!0===t.target.qComposing}function isKeyCode(t,e){return!0!==shouldIgnoreKey(t)&&[].concat(e).includes(t.keyCode)}const{passiveCapture:passiveCapture$2}=listenOpts;function startPhase1(t,e,i,s){!0===i.modifiers.stop&&stop(t);const{color:o,early:n}=i.modifiers,r=!0===i.modifiers.center||!0===s,a=document.createElement("span"),l=document.createElement("span"),h=position(t),{left:c,top:d,width:u,height:p}=e.getBoundingClientRect(),m=Math.sqrt(u*u+p*p),g=m/2,f=`${(u-m)/2}px`,v=r?f:`${h.left-c-g}px`,_=`${(p-m)/2}px`,b=r?_:`${h.top-d-g}px`,y=Date.now()+300;let S,x,C,k,w;l.className="q-ripple__inner",css(l,{height:`${m}px`,width:`${m}px`,transform:`translate3d(${v},${b},0) scale3d(.2,.2,1)`,opacity:0}),a.className=`q-ripple${o?" text-"+o:""}`,a.setAttribute("dir","ltr"),a.appendChild(l),e.appendChild(a);const $=()=>{clearTimeout(S);const t=i.abort.indexOf($);if(t>-1)switch(i.abort.splice(t,1),a.remove(),C){case"mouse":document.removeEventListener("mouseup",x,passiveCapture$2),e.removeEventListener("mouseout",x,passiveCapture$2);break;case"keyboard":document.removeEventListener("keyup",x,passiveCapture$2);break;case"touch":k.removeEventListener("touchmove",$,passiveCapture$2),k.removeEventListener("touchmove",x,passiveCapture$2),k.removeEventListener("touchend",x,passiveCapture$2),k.removeEventListener("touchcancel",x,passiveCapture$2),i.preventMouse--}};i.abort.push($);const q=()=>{!0!==w&&(l.classList.remove("q-ripple__inner--enter"),l.classList.add("q-ripple__inner--leave"),l.style.opacity=0,S=setTimeout($,275))};!0===n&&(0===t.type.indexOf("mouse")?(C="mouse",x=(t=>{"mouseout"===t.type&&!0===e.contains(t.toElement)||(S=setTimeout(q,y-Date.now()))}),document.addEventListener("mouseup",x,passiveCapture$2),e.addEventListener("mouseout",x,passiveCapture$2)):0===t.type.indexOf("key")?(C="keyboard",i.preventKeyboard=!0,x=(()=>{i.preventKeyboard=!1,S=setTimeout(q,y-Date.now())}),document.addEventListener("keyup",x,passiveCapture$2)):(C="touch",w=!0,k=t.target,i.preventMouse++,x=(t=>{"touchmove"===t.type&&0!==t.changedTouches.length&&!0===e.contains(document.elementFromPoint(t.changedTouches[0].clientX,t.changedTouches[0].clientY))||(S=setTimeout(q,y-Date.now()))}),k.addEventListener("touchmove",$,passiveCapture$2),k.addEventListener("touchmove",x,passiveCapture$2),k.addEventListener("touchend",x,passiveCapture$2),k.addEventListener("touchcancel",x,passiveCapture$2))),S=setTimeout(()=>{!0===w&&(w=void 0,k.removeEventListener("touchmove",$,passiveCapture$2)),l.classList.add("q-ripple__inner--enter"),l.style.transform=`translate3d(${f},${_},0) scale3d(1,1,1)`,l.style.opacity=.2,!0!==n&&(S=setTimeout(q,y-Date.now()))},!0===w?70:50)}function updateCtx(t,e,{modifiers:i,arg:s,value:o}){if(t.enabled=!1!==o,!0===t.enabled){const n=Object.assign({},$q.config.ripple,i,o),r=void 0===t.modifiers.early||t.modifiers.early!==n.early;t.modifiers={early:!0===n.early,stop:!0===n.stop,center:!0===n.center,color:n.color||s,keyCodes:[].concat(n.keyCodes||13)},!0===r&&(cleanEvt(t,"main"),!0===n.early?addEvt(t,"main",[[e,"mousedown","start","passive"],[e,"touchstart","start","passive"],[e,"keydown","keystart","passive"]]):addEvt(t,"main",[[e,"click","start","passive"],[e,"keyup","keystart","passive"]]))}else t.abort.slice().forEach(t=>{t()}),cleanEvt(t,"main"),t.preventMouse=0,t.preventKeyboard=!1}var Ripple={name:"ripple",inserted(t,e){const i={modifiers:{},abort:[],preventMouse:0,preventKeyboard:!1,start(e){!0!==i.enabled||!0===e.qSkipRipple||"mousedown"===e.type&&0!==i.preventMouse||!(!0!==client.is.ie||e.clientX>=0)||startPhase1(e,t,i,$q.interaction.isKeyboard)},keystart(e){!0!==i.preventKeyboard&&!0===i.enabled&&!0!==e.qSkipRipple&&!0===isKeyCode(e,i.modifiers.keyCodes)&&startPhase1(e,t,i,!0)}};updateCtx(i,t,e),t.__qripple&&(t.__qripple_old=t.__qripple),t.__qripple=i},update(t,e){void 0!==t.__qripple&&updateCtx(t.__qripple,t,e)},unbind(t){const e=t.__qripple_old||t.__qripple;void 0!==e&&(e.abort.slice().forEach(t=>{t()}),cleanEvt(e,"main"),delete t[t.__qripple_old?"__qripple_old":"__qripple"])}},RippleMixin={directives:{Ripple:Ripple},props:{ripple:{type:[Boolean,Object],default:!0}}};const btnPadding={none:0,xs:4,sm:8,md:16,lg:24,xl:32},formTypes=["button","submit","reset"],mediaTypeRe=/[^\s]\/[^\s]/,btnDesignOptions=["flat","outline","push","unelevated"],getBtnDesign=(t,e)=>!0===t.flat?"flat":!0===t.outline?"outline":!0===t.push?"push":!0===t.unelevated?"unelevated":e;var BtnMixin={mixins:[ListenersMixin,RippleMixin,RouterLinkMixin,AlignMixin,getSizeMixin({xs:8,sm:10,md:14,lg:20,xl:24})],props:{type:{type:String,default:"button"},to:[Object,String],replace:Boolean,append:Boolean,label:[Number,String],icon:String,iconRight:String,...btnDesignOptions.reduce((t,e)=>(t[e]=Boolean)&&t,{}),square:Boolean,round:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],align:{default:"center"},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean},computed:{style(){if(!1===this.fab&&!1===this.fabMini)return this.sizeStyle},isRounded(){return!0===this.rounded||!0===this.fab||!0===this.fabMini},isActionable(){return!0!==this.disable&&!0!==this.loading},computedTabIndex(){return!0===this.isActionable?this.tabindex||0:-1},design(){return getBtnDesign(this,"standard")},attrs(){const t={tabindex:this.computedTabIndex};return!0===this.hasLink?Object.assign(t,this.linkAttrs):!0===formTypes.includes(this.type)&&(t.type=this.type),"a"===this.linkTag?(!0===this.disable?t["aria-disabled"]="true":void 0===t.href&&(t.role="button"),!0!==this.hasRouterLink&&!0===mediaTypeRe.test(this.type)&&(t.type=this.type)):!0===this.disable&&(t.disabled="",t["aria-disabled"]="true"),!0===this.loading&&void 0!==this.percentage&&(t.role="progressbar",t["aria-valuemin"]=0,t["aria-valuemax"]=100,t["aria-valuenow"]=this.percentage),t},classes(){let t;void 0!==this.color?t=!0===this.flat||!0===this.outline?`text-${this.textColor||this.color}`:`bg-${this.color} text-${this.textColor||"white"}`:this.textColor&&(t=`text-${this.textColor}`);const e=!0===this.round?"round":`rectangle${!0===this.isRounded?" q-btn--rounded":!0===this.square?" q-btn--square":""}`;return`q-btn--${this.design} q-btn--${e}`+(void 0!==t?" "+t:"")+(!0===this.isActionable?" q-btn--actionable q-focusable q-hoverable":!0===this.disable?" disabled":"")+(!0===this.fab?" q-btn--fab":!0===this.fabMini?" q-btn--fab-mini":"")+(!0===this.noCaps?" q-btn--no-uppercase":"")+(!0===this.noWrap?"":" q-btn--wrap")+(!0===this.dense?" q-btn--dense":"")+(!0===this.stretch?" no-border-radius self-stretch":"")+(!0===this.glossy?" glossy":"")},innerClasses(){return this.alignClass+(!0===this.stack?" column":" row")+(!0===this.noWrap?" no-wrap text-no-wrap":"")+(!0===this.loading?" q-btn__content--hidden":"")},wrapperStyle(){if(void 0!==this.padding)return{padding:this.padding.split(/\s+/).map(t=>t in btnPadding?btnPadding[t]+"px":t).join(" "),minWidth:"0",minHeight:"0"}}}};const{passiveCapture:passiveCapture$1}=listenOpts;let touchTarget=void 0,keyboardTarget=void 0,mouseTarget=void 0;const iconAttrs={role:"img","aria-hidden":"true"};var QBtn=Vue.extend({name:"QBtn",mixins:[BtnMixin],props:{percentage:Number,darkPercentage:Boolean},computed:{hasLabel(){return void 0!==this.label&&null!==this.label&&""!==this.label},computedRipple(){return!1!==this.ripple&&{keyCodes:!0===this.hasLink?[13,32]:[13],...!0===this.ripple?{}:this.ripple}},percentageStyle(){const t=Math.max(0,Math.min(100,this.percentage));if(t>0)return{transition:"transform 0.6s",transform:`translateX(${t-100}%)`}},onEvents(){if(!0===this.loading)return{mousedown:this.__onLoadingEvt,touchstart:this.__onLoadingEvt,click:this.__onLoadingEvt,keydown:this.__onLoadingEvt,keyup:this.__onLoadingEvt};if(!0===this.isActionable){const t={...this.qListeners,click:this.click,keydown:this.__onKeydown,mousedown:this.__onMousedown};return!0===this.$q.platform.has.touch&&(t[`${void 0===t.touchstart?"&":""}touchstart`]=this.__onTouchstart),t}return{click:stopAndPrevent}},directives(){if(!0!==this.disable&&!1!==this.ripple)return[{name:"ripple",value:this.computedRipple,modifiers:{center:this.round}}]}},methods:{click(t){if(void 0!==t){if(!0===t.defaultPrevented)return;const e=document.activeElement;if("submit"===this.type&&(!0===this.$q.platform.is.ie&&(t.clientX<0||t.clientY<0)||e!==document.body&&!1===this.$el.contains(e)&&!1===e.contains(this.$el))){this.$el.focus();const t=()=>{document.removeEventListener("keydown",stopAndPrevent,!0),document.removeEventListener("keyup",t,passiveCapture$1),void 0!==this.$el&&this.$el.removeEventListener("blur",t,passiveCapture$1)};document.addEventListener("keydown",stopAndPrevent,!0),document.addEventListener("keyup",t,passiveCapture$1),this.$el.addEventListener("blur",t,passiveCapture$1)}}this.__navigateOnClick(t)},__onKeydown(t){this.$emit("keydown",t),!0===isKeyCode(t,[13,32])&&(keyboardTarget!==this.$el&&(void 0!==keyboardTarget&&this.__cleanup(),!0!==t.defaultPrevented&&(this.$el.focus(),keyboardTarget=this.$el,this.$el.classList.add("q-btn--active"),document.addEventListener("keyup",this.__onPressEnd,!0),this.$el.addEventListener("blur",this.__onPressEnd,passiveCapture$1))),stopAndPrevent(t))},__onTouchstart(t){if(this.$emit("touchstart",t),touchTarget!==this.$el&&(void 0!==touchTarget&&this.__cleanup(),!0!==t.defaultPrevented)){touchTarget=this.$el;const e=this.touchTargetEl=t.target;e.addEventListener("touchcancel",this.__onPressEnd,passiveCapture$1),e.addEventListener("touchend",this.__onPressEnd,passiveCapture$1)}},__onMousedown(t){this.$emit("mousedown",t),mouseTarget!==this.$el&&(void 0!==mouseTarget&&this.__cleanup(),!0!==t.defaultPrevented&&(mouseTarget=this.$el,this.$el.classList.add("q-btn--active"),document.addEventListener("mouseup",this.__onPressEnd,passiveCapture$1)))},__onPressEnd(t){if(void 0===t||"blur"!==t.type||document.activeElement!==this.$el){if(void 0!==t&&"keyup"===t.type){if(keyboardTarget===this.$el&&!0===isKeyCode(t,[13,32])){const e=new MouseEvent("click",t);!0===t.defaultPrevented&&prevent(e),!0===t.cancelBubble&&stop(e),this.$el.dispatchEvent(e),stopAndPrevent(t)}this.$emit("keyup",t)}this.__cleanup()}},__cleanup(t){const e=this.$refs.blurTarget;if(!0===t||touchTarget!==this.$el&&mouseTarget!==this.$el||void 0===e||e===document.activeElement||!0!==this.$el.contains(document.activeElement)||(e.setAttribute("tabindex",-1),e.focus()),touchTarget===this.$el){const t=this.touchTargetEl;t.removeEventListener("touchcancel",this.__onPressEnd,passiveCapture$1),t.removeEventListener("touchend",this.__onPressEnd,passiveCapture$1),touchTarget=this.touchTargetEl=void 0}mouseTarget===this.$el&&(document.removeEventListener("mouseup",this.__onPressEnd,passiveCapture$1),mouseTarget=void 0),keyboardTarget===this.$el&&(document.removeEventListener("keyup",this.__onPressEnd,!0),void 0!==this.$el&&this.$el.removeEventListener("blur",this.__onPressEnd,passiveCapture$1),keyboardTarget=void 0),void 0!==this.$el&&this.$el.classList.remove("q-btn--active")},__onLoadingEvt(t){stopAndPrevent(t),t.qSkipRipple=!0}},beforeDestroy(){this.__cleanup(!0)},render(t){let e=[];void 0!==this.icon&&e.push(t(QIcon,{attrs:iconAttrs,props:{name:this.icon,left:!1===this.stack&&!0===this.hasLabel}})),!0===this.hasLabel&&e.push(t("span",{staticClass:"block"},[this.label])),e=mergeSlot(e,this,"default"),void 0!==this.iconRight&&!1===this.round&&e.push(t(QIcon,{attrs:iconAttrs,props:{name:this.iconRight,right:!1===this.stack&&!0===this.hasLabel}}));const i=[t("span",{staticClass:"q-focus-helper",ref:"blurTarget"})];return!0===this.loading&&void 0!==this.percentage&&i.push(t("span",{staticClass:"q-btn__progress absolute-full overflow-hidden",class:!0===this.darkPercentage?"q-btn__progress--dark":""},[t("span",{staticClass:"q-btn__progress-indicator fit block",style:this.percentageStyle})])),i.push(t("span",{staticClass:"q-btn__wrapper col row q-anchor--skip",style:this.wrapperStyle},[t("span",{staticClass:"q-btn__content text-center col items-center q-anchor--skip",class:this.innerClasses},e)])),null!==this.loading&&i.push(t("transition",{props:{name:"q-transition--fade"}},!0===this.loading?[t("span",{key:"loading",staticClass:"absolute-full flex flex-center"},void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():[t(QSpinner)])]:void 0)),t(!0===this.hasLink||"a"===this.type?"a":"button",{staticClass:"q-btn q-btn-item non-selectable no-outline",class:this.classes,style:this.style,attrs:this.attrs,on:this.onEvents,directives:this.directives},i)}});const panelParents=new WeakMap;function hideScroll(t){if(null!==t&&void 0!==t){const e=t.closest(".q-panel-parent");panelParents.set(t,e),null!==e&&e.classList.add("q-transition--hide-scroll")}}function restoreScroll(t){if(null!==t&&void 0!==t){const e=panelParents.get(t)||t.closest(".q-panel-parent");null!==e&&e.classList.remove("q-transition--hide-scroll")}}const onTransitionHideScroll={"before-leave":hideScroll,"after-leave":restoreScroll,"leave-cancelled":restoreScroll};var TransitionMixin={props:{transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"}},computed:{transitionProps(){const t=`q-transition--${this.transitionShow}`,e=`q-transition--${this.transitionHide}`;return{enterClass:`${t}-enter`,leaveClass:`${e}-leave`,appearClass:`${t}-appear`,enterToClass:`${t}-enter-to`,leaveToClass:`${e}-leave-to`,appearToClass:`${t}-appear-to`,enterActiveClass:`${t}-enter-active`,leaveActiveClass:`${e}-leave-active`,appearActiveClass:`${t}-appear-active`}}}},QBtnGroup=Vue.extend({name:"QBtnGroup",mixin:[ListenersMixin],props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},computed:{classes(){return["unelevated","outline","flat","rounded","square","push","stretch","glossy"].filter(t=>!0===this[t]).map(t=>`q-btn-group--${t}`).join(" ")}},render(t){return t("div",{staticClass:"q-btn-group row no-wrap "+(!0===this.spread?"q-btn-group--spread":"inline"),class:this.classes,on:{...this.qListeners}},slot(this,"default"))}});function clearSelection(){if(void 0!==window.getSelection){const t=window.getSelection();void 0!==t.empty?t.empty():void 0!==t.removeAllRanges&&(t.removeAllRanges(),!0!==Platform.is.mobile&&t.addRange(document.createRange()))}else void 0!==document.selection&&document.selection.empty()}const scrollListenerHandlers=[];function scrollEventDispatcher(t){scrollListenerHandlers.slice().forEach(e=>{t&&t.target&&!0===t.target.qScrollPrevented||!0===eventOnAncestors(t,e.scrollTarget)&&e(t)})}var AnchorMixin={props:{target:{default:!0},noParentEvent:Boolean,contextMenu:Boolean},watch:{contextMenu(t){void 0!==this.anchorEl&&(this.__unconfigureAnchorEl(),this.__configureAnchorEl(t))},target(){void 0!==this.anchorEl&&this.__unconfigureAnchorEl(),this.__pickAnchorEl()},noParentEvent(t){void 0!==this.anchorEl&&(!0===t?this.__unconfigureAnchorEl():this.__configureAnchorEl())}},methods:{__showCondition(t){return void 0!==this.anchorEl&&(void 0===t||(void 0===t.touches||t.touches.length<=1))},__contextClick(t){this.hide(t),prevent(t),this.$nextTick(()=>{this.show(t),t===Object(t)&&(t.qAnchorHandled=!0)})},__toggleKey(t){!0===isKeyCode(t,13)&&this.toggle(t)},__mobileCleanup(t){this.anchorEl.classList.remove("non-selectable"),clearTimeout(this.touchTimer),!0===this.showing&&void 0!==t&&clearSelection()},prevent:prevent,__mobileTouch(t){if(this.__mobileCleanup(t),!0!==this.__showCondition(t))return;this.hide(t),this.anchorEl.classList.add("non-selectable");const e=t.target;addEvt(this,"anchor",[[e,"touchmove","__mobileCleanup","passive"],[e,"touchend","__mobileCleanup","passive"],[e,"touchcancel","__mobileCleanup","passive"],[this.anchorEl,"contextmenu","prevent","notPassive"]]),this.touchTimer=setTimeout(()=>{this.show(t),t===Object(t)&&(t.qAnchorHandled=!0)},300)},__unconfigureAnchorEl(){cleanEvt(this,"anchor")},__configureAnchorEl(t=this.contextMenu){if(!0===this.noParentEvent||void 0===this.anchorEl)return;let e;addEvt(this,"anchor",e=!0===t?!0===this.$q.platform.is.mobile?[[this.anchorEl,"touchstart","__mobileTouch","passive"]]:[[this.anchorEl,"mousedown","hide","passive"],[this.anchorEl,"contextmenu","__contextClick","notPassive"]]:[[this.anchorEl,"click","toggle","passive"],[this.anchorEl,"keyup","__toggleKey","passive"]])},__setAnchorEl(t){for(this.anchorEl=t;this.anchorEl.classList.contains("q-anchor--skip");)this.anchorEl=this.anchorEl.parentNode;this.__configureAnchorEl()},__pickAnchorEl(){!1===this.target||""===this.target||null===this.parentEl?this.anchorEl=void 0:!0===this.target?this.__setAnchorEl(this.parentEl):(this.anchorEl=getElement(this.target)||void 0,void 0!==this.anchorEl?this.__configureAnchorEl():console.error(`Anchor: target "${this.target}" not found`,this))},__changeScrollEvent(t,e){const i=scrollListenerHandlers.length>0;if(void 0!==this.__scrollFn){const t=scrollListenerHandlers.indexOf(this.__scrollFn);t>-1&&scrollListenerHandlers.splice(t,1),this.__scrollFn=void 0}void 0!==t&&null!==e&&void 0!==e&&(t.scrollTarget=e===window?document:e,scrollListenerHandlers.push(t),this.__scrollFn=t),!0===i&&0===scrollListenerHandlers.length?window.removeEventListener("scroll",scrollEventDispatcher,listenOpts.passiveCapture):!1===i&&scrollListenerHandlers.length>0&&window.addEventListener("scroll",scrollEventDispatcher,listenOpts.passiveCapture)}},created(){"function"==typeof this.__configureScrollTarget&&"function"==typeof this.__unconfigureScrollTarget&&(this.noParentEventWatcher=this.$watch("noParentEvent",()=>{this.__unconfigureScrollTarget(),this.__configureScrollTarget()}))},mounted(){this.parentEl=this.$el.parentNode,this.__pickAnchorEl(),!0===this.value&&void 0===this.anchorEl&&this.$emit("input",!1)},beforeDestroy(){clearTimeout(this.touchTimer),void 0!==this.noParentEventWatcher&&this.noParentEventWatcher(),void 0!==this.__anchorCleanup&&this.__anchorCleanup(),this.__unconfigureAnchorEl()}},TimeoutMixin={created(){this.__tickFnList=[],this.__timeoutFnList=[]},deactivated(){this.__tickFnList.forEach(t=>{t.removeTick()}),this.__timeoutFnList.forEach(t=>{t.removeTimeout()})},beforeDestroy(){this.__tickFnList.forEach(t=>{t.removeTick()}),this.__tickFnList=void 0,this.__timeoutFnList.forEach(t=>{t.removeTimeout()}),this.__timeoutFnList=void 0},methods:{__useTick(t,e){const i={removeTick(){i.fn=void 0},registerTick:t=>{i.fn=t,this.$nextTick(()=>{i.fn===t&&(!1===this._isDestroyed&&i.fn(),i.fn=void 0)})}};this.__tickFnList.push(i),this[t]=i.registerTick,void 0!==e&&(this[e]=i.removeTick)},__useTimeout(t,e){const i={removeTimeout(){clearTimeout(i.timer)},registerTimeout:(t,e)=>{clearTimeout(i.timer),!1===this._isDestroyed&&(i.timer=setTimeout(t,e))}};this.__timeoutFnList.push(i),this[t]=i.registerTimeout,void 0!==e&&(this[e]=i.removeTimeout)}}};const labelClick={timeStamp:null,label:null,show:null};function isDuplicateLabelClick(t,e){if("click"!==t.type)return!1;const{timeStamp:i,label:s,show:o}=labelClick,{target:n}=t;return labelClick.show=e,labelClick.timeStamp=t.timeStamp,labelClick.label=n?"string"==typeof n.id&&""!==n.id&&null!==s&&s.htmlFor===n.id?s:"function"==typeof n.closest?n.closest("label"):null:null,i===labelClick.timeStamp&&s===labelClick.label&&o!==e}var ModelToggleMixin={mixins:[ListenersMixin],props:{value:{type:Boolean,default:void 0}},data:()=>({showing:!1}),watch:{value(t){this.__processModelChange(t)},$route(){!0===this.hideOnRouteChange&&!0===this.showing&&this.hide()}},methods:{toggle(t){this[!0===this.showing?"hide":"show"](t),t===Object(t)&&(t.qAnchorHandled=!0)},show(t){!0===this.disable||t===Object(t)&&(!0===t.qAnchorHandled||!0===isDuplicateLabelClick(t,"show"))||void 0!==this.__showCondition&&!0!==this.__showCondition(t)||(void 0!==this.qListeners.input&&!1===isSSR&&(this.$emit("input",!0),this.payload=t,this.$nextTick(()=>{this.payload===t&&(this.payload=void 0)})),void 0!==this.value&&void 0!==this.qListeners.input&&!0!==isSSR||this.__processShow(t))},__processShow(t){!0!==this.showing&&(void 0!==this.__preparePortal&&this.__preparePortal(),this.showing=!0,this.$emit("before-show",t),void 0!==this.__show?this.__show(t):this.$emit("show",t))},hide(t){!0!==this.disable&&(t!==Object(t)||!0!==t.qAnchorHandled&&!0!==isDuplicateLabelClick(t,"hide"))&&(void 0!==this.qListeners.input&&!1===isSSR&&(this.$emit("input",!1),this.payload=t,this.$nextTick(()=>{this.payload===t&&(this.payload=void 0)})),void 0!==this.value&&void 0!==this.qListeners.input&&!0!==isSSR||this.__processHide(t))},__processHide(t){!1!==this.showing&&(this.showing=!1,this.$emit("before-hide",t),void 0!==this.__hide?this.__hide(t):this.$emit("hide",t))},__processModelChange(t){!0===this.disable&&!0===t?void 0!==this.qListeners.input&&this.$emit("input",!1):!0===t!==this.showing&&this[`__process${!0===t?"Show":"Hide"}`](this.payload)}}};const FOCUSABLE_SELECTOR=[":focus",'a[href]:not([tabindex="-1"]):not(.q-focus__clone)','area[href]:not([tabindex="-1"]):not(.q-focus__clone)','input:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','select:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','textarea:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','button:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','iframe:not([tabindex="-1"]):not(.q-focus__clone)','[tabindex]:not([tabindex="-1"]):not(.q-focus__clone)','[contenteditable]:not([tabindex="-1"]):not(.q-focus__clone):not([contenteditable="false"])',".q-tab.q-focusable:not(.q-focus__clone)"].join(","),KEY_SKIP_SELECTOR=["input:not([disabled])","select:not([disabled])","select:not([disabled]) *","textarea:not([disabled])",'[contenteditable]:not([contenteditable="false"])','[contenteditable]:not([contenteditable="false"]) *',".q-key-group-navigation--ignore-key",".q-key-group-navigation--ignore-key *",".q-focus__clone"].join(","),EDITABLE_SELECTOR=['input:not(.q-focus__clone):not([disabled]):not([readonly]):not([type="button"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="radio"]):not([type="range"]):not([type="reset"]):not([type="submit"])',"textarea:not(.q-focus__clone):not([disabled]):not([readonly])",'[contenteditable]:not(.q-focus__clone):not([contenteditable="false"])','[contenteditable]:not(.q-focus__clone):not([contenteditable="false"]) *'].join(",");let managedFocusFn,scrollOffset=0;function isInPortal(t){return t.matches(".q-dialog *, .q-menu *, .q-tooltip *, .q-stepper__step-content *")}function isEditable(t){return t.matches(EDITABLE_SELECTOR)}function managedFocus(t){if(void 0===managedFocusFn){const e="function"==typeof t.scrollIntoViewIfNeeded?t=>{t.scrollIntoViewIfNeeded(!1)}:t=>{t.scrollIntoView()};managedFocusFn=!0===client.is.ios||!0===client.is.nativeMobile||!0===client.is.standalone?t=>{const i=isEditable(t);if(t===document.body||!0!==i&&t.tabIndex<0)return void(t!==document.activeElement&&t.focus({preventScroll:!0}));const s=isInPortal(t),o=t.cloneNode(!0),n=t.parentNode,r=document.scrollingElement||document.documentElement,a=r.scrollTop;o.setAttribute("tabindex",-1),o.removeAttribute("id"),o.removeAttribute("autofocus"),o.removeAttribute("data-autofocus"),o.classList.add("q-focus__clone"),n.insertBefore(o,t),t!==document.activeElement&&t.focus({preventScroll:!0}),setTimeout(()=>{if(o.remove(),t&&t===document.activeElement&&!0===i){!0===s&&e(t);const{top:i,bottom:o}=t.getBoundingClientRect(),n=void 0!==window.visualViewport?window.visualViewport.height:window.innerHeight;let l=r.scrollTop;if(i<0?l+=i-32:i>0&&o>n&&(l+=o-n+64),requestAnimationFrame(()=>{r.scrollTop=l}),!0!==t.qRestoreScrollSet&&!0!==s){scrollOffset+=l-a;const e=()=>{t&&(t.qRestoreScrollSet=void 0,t.removeEventListener("blur",e)),r.scrollTop!==l?scrollOffset=0:0!==scrollOffset&&requestAnimationFrame(()=>{const{activeElement:t}=document;(!t||!0!==isEditable(t)&&t.tabIndex<0)&&(r.scrollTop-=scrollOffset,scrollOffset=0)})};t.qRestoreScrollSet=!0,t.addEventListener("blur",e)}}},200)}:t=>{t!==document.activeElement&&t.focus({preventScroll:!0}),!0===isInPortal(t)&&!0===isEditable(t)&&setTimeout(()=>{t&&t===document.activeElement&&e(t)},200)}}managedFocusFn(t)}function changeFocusedElement(t,e,i=1,s,o,n){const r=t.length-1;if(!0===o&&(e>r||e<0))return;const a=normalizeToInterval(e,0,r);if(a===n||a>r)return;const l=document.activeElement,h=!0===s?()=>{managedFocus(t[a])}:()=>{t[a].focus()};null!==l?(l._qKeyNavIgnore=!0,h(),l._qKeyNavIgnore=!1):h(),document.activeElement!==t[a]&&changeFocusedElement(t,a+i,i,s,o,void 0===n?a:n)}const findProto=Array.prototype.find,findIndexProto=Array.prototype.findIndex,mapProto=Array.prototype.map;function closePortalMenus(t,e){do{if("QMenu"===t.$options.name){if(t.hide(e),!0===t.separateClosePopup)return t.$parent}else if(void 0!==t.__renderPortal)return void 0!==t.$parent&&"QPopupProxy"===t.$parent.$options.name?(t.hide(e),t.$parent):t;t=t.$parent}while(void 0!==t&&(void 0===t.$el.contains||!0!==t.$el.contains(e.target)))}function closePortals(t,e,i){for(;0!==i&&void 0!==t;){if(void 0!==t.__renderPortal){if(i--,"QMenu"===t.$options.name){t=closePortalMenus(t,e);continue}t.hide(e)}t=t.$parent}}function isOnGlobalDialog(t){for(;void 0!==t;){if("QGlobalDialog"===t.$options.name)return!0;if("QDialog"===t.$options.name)return!1;t=t.$parent}return!1}function getPortalsContainer(t){let e=findProto.call(t.children,t=>t.matches&&t.matches(".q-portal__container"));return void 0===e&&(e=document.createElement("div")).classList.add("q-portal__container"),e.parentElement===t&&null===e.nextElementSibling||t.appendChild(e),e}const portalVms=new WeakMap,Portal={inheritAttrs:!1,props:{contentClass:[Array,String,Object],contentStyle:[Array,String,Object]},methods:{focus(t){const e=this.__getInnerNode();if(void 0!==e&&!0!==e.contains(document.activeElement)){let i=null;if(""!==t&&(i=e.querySelector("string"==typeof t?t:"[autofocus][tabindex], [data-autofocus][tabindex]")||e.querySelector("string"==typeof t?t:"[autofocus] [tabindex], [data-autofocus] [tabindex]")||e.querySelector("string"==typeof t?t:"[autofocus], [data-autofocus]")),null!==i&&"function"==typeof i.focus)managedFocus(i);else{const t=Array.prototype.slice.call(e.querySelectorAll(FOCUSABLE_SELECTOR));t.length>0&&changeFocusedElement(t,!0===t[0].classList.contains("q-key-group-navigation--ignore-focus")?1:0,1,!0)}}},__showPortal(){if(void 0!==this.$q.fullscreen&&!0===this.$q.fullscreen.isCapable){const t=()=>{if(void 0===this.__portal)return;const t=getBodyFullscreenElement(this.$q.fullscreen.activeEl),e=this.__portal.$el.parentElement,i=getPortalsContainer(t);e===i||!0!==this.__onGlobalDialog&&!0!==t.contains(this.$el)||(i.appendChild(this.__portal.$el),e&&e.parentElement!==document.body&&0===e.children.length&&e.remove())};this.unwatchFullscreen=this.$watch("$q.fullscreen.activeEl",debounce(t,50)),!1!==this.__onGlobalDialog&&!0!==this.$q.fullscreen.isActive||t()}else void 0!==this.__portal&&!1===this.__onGlobalDialog&&getPortalsContainer(document.body).appendChild(this.__portal.$el)},__hidePortal(){if(void 0!==this.__portal){void 0!==this.unwatchFullscreen&&(this.unwatchFullscreen(),this.unwatchFullscreen=void 0),!1===this.__onGlobalDialog&&(this.__portal.$destroy(),this.__portal.$el.remove());const t=this.__portal.$el.parentElement;t&&t.parentElement!==document.body&&0===t.children.length&&t.remove(),this.__portal=void 0}},__preparePortal(){void 0===this.__portal&&(!0===this.__onGlobalDialog&&portalVms.set(this.$el,this),this.__portal=!0===this.__onGlobalDialog?{$el:this.$el,$refs:this.$refs}:new Vue({name:"QPortal",parent:this,inheritAttrs:!1,render:t=>(this.$nextTick(()=>{portalVms.set(this.__portal.$el,this)}),this.__renderPortal(t)),components:this.$options.components,directives:this.$options.directives}).$mount())},__getInnerNode(){return void 0!==this.__portal&&void 0!==this.__portal.$refs?this.__portal.$refs.inner:void 0},__focusCyclePortal(t){if(void 0===this.__portal||!0!==document.body.contains(this.__portal.$el))return;const e=this.__portal.$el.parentElement.children,{activeElement:i}=document,s=i?findIndexProto.call(e,t=>"function"==typeof t.contains&&t.contains(i)):-1;if(s<0){if(!0!==t){if(i){const t=portalVms.get(e[0]);t&&(t.__refocusTarget=i)}this.focus()}return}const o=portalVms.get(e[s]);if(!0===t){const t=mapProto.call(e,t=>portalVms.get(t)).filter(t=>t&&!0===this.__portal.$el.contains(t.__refocusTarget));if(t.length>0&&t.forEach(t=>{t.__refocusTarget=this.__refocusTarget}),t.indexOf(o)>-1)return}const n=!0===t?this:o||this,r=n.__refocusTarget;if(n!==this||!0!==t||!1!==n.seamless){if(!1===n.seamless)return void this.focus();if(s>0){const i=e[s-1],o=portalVms.get(i);if(o&&(!0!==t||!1===o.seamless)&&(-1!==[null,void 0,document.body].indexOf(r)||!1===i.contains(r)))return void o.focus()}}if(-1===[null,void 0,document.body].indexOf(r)&&!0===document.body.contains(r))managedFocus(r);else if(!0!==t){const{body:t}=document,e=t.hasAttribute("tabindex");!1===e&&t.setAttribute("tabindex",-1),t.focus(),!1===e&&this.$nextTick(()=>{t&&t.removeAttribute("tabindex")})}}},render(t){if(!0===this.__onGlobalDialog)return this.__renderPortal(t);void 0!==this.__portal&&this.__portal.$forceUpdate()},beforeDestroy(){this.__hidePortal()}};!1===isSSR&&(Portal.created=function(){this.__onGlobalDialog=isOnGlobalDialog(this.$parent)});var FocusWrapMixin={computed:{focusGuardElements(){return{firstGuard:this.$createElement("span",{staticClass:"no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus",attrs:{tabindex:0},on:{focus:this.__focusLast}}),lastGuard:this.$createElement("span",{staticClass:"no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus",attrs:{tabindex:0},on:{focus:this.__focusFirst}})}}},methods:{__focusFirst(t){const e=this.__getInnerNode();if(void 0!==e&&(!0!==t||!0!==e.contains(document.activeElement))){changeFocusedElement(Array.prototype.slice.call(e.querySelectorAll(FOCUSABLE_SELECTOR),1,-1),0,1)}},__focusLast(){const t=this.__getInnerNode();if(void 0!==t){const e=Array.prototype.slice.call(t.querySelectorAll(FOCUSABLE_SELECTOR),1,-1);changeFocusedElement(e,e.length-1,-1)}},__getFocusWrappedContent(t){return mergeSlot([this.focusGuardElements.firstGuard],this,t).concat(this.focusGuardElements.lastGuard)}}};function getVmOfNode(t){for(let e=t;null!==e;e=e.parentNode)if(void 0!==e.__vue__)return e.__vue__}function isVmChildOf(t,e){if(null===t||null===e)return null;for(let i=t;void 0!==i;i=i.$parent)if(i===e)return!0;return!1}let timer;const{notPassiveCapture:notPassiveCapture,passiveCapture:passiveCapture}=listenOpts,handlers$1={click:[],focus:[]};function hasModalsAbove(t){for(;null!==(t=t.nextElementSibling);)if(t.classList.contains("q-dialog--modal"))return!0;return!1}function execHandlers(t,e){for(let i=t.length-1;i>=0;i--)if(void 0===t[i](e))return}function globalHandler(t){clearTimeout(timer),"focusin"===t.type&&(!0===client.is.ie&&t.target===document.body||!0===t.target.hasAttribute("tabindex"))?timer=setTimeout(()=>{execHandlers(handlers$1.focus,t)},!0===client.is.ie?500:200):execHandlers(handlers$1.click,t)}var ClickOutside={name:"click-outside",bind(t,{arg:e,value:i},s){const o=s.componentInstance||s.context,n={trigger:i,toggleEl:e,handler(e){const i=e.target;if(!(!0===e.qClickOutside||!0!==document.body.contains(i)||8===i.nodeType||i===document.documentElement||!1!==i.classList.contains("no-pointer-events")||!0===hasModalsAbove(t)||void 0!==n.toggleEl&&!1!==n.toggleEl.contains(i)||i!==document.body&&!1!==isVmChildOf(getVmOfNode(i),o)))return e.qClickOutside=!0,n.trigger(e)}};t.__qclickoutside&&(t.__qclickoutside_old=t.__qclickoutside),t.__qclickoutside=n,0===handlers$1.click.length&&(document.addEventListener("mousedown",globalHandler,notPassiveCapture),document.addEventListener("touchstart",globalHandler,notPassiveCapture),document.addEventListener("focusin",globalHandler,passiveCapture)),handlers$1.click.push(n.handler),n.timerFocusin=setTimeout(()=>{handlers$1.focus.push(n.handler)},500)},update(t,{arg:e,value:i,oldValue:s}){const o=t.__qclickoutside;void 0!==o&&(o.toggleEl!==e&&(o.toggleEl=e),s!==i&&(o.trigger=i))},unbind(t){const e=t.__qclickoutside_old||t.__qclickoutside;if(void 0!==e){clearTimeout(e.timerFocusin);const i=handlers$1.click.findIndex(t=>t===e.handler),s=handlers$1.focus.findIndex(t=>t===e.handler);i>-1&&handlers$1.click.splice(i,1),s>-1&&handlers$1.focus.splice(s,1),0===handlers$1.click.length&&(clearTimeout(timer),document.removeEventListener("mousedown",globalHandler,notPassiveCapture),document.removeEventListener("touchstart",globalHandler,notPassiveCapture),document.removeEventListener("focusin",globalHandler,passiveCapture)),delete t[t.__qclickoutside_old?"__qclickoutside_old":"__qclickoutside"]}}};const scrollTargets=!0===isSSR?[]:[null,document,document.body,document.scrollingElement,document.documentElement];let rtlHasScrollBugStatus;function rtlHasScrollBug(){if(!0===isSSR)return!1;if(void 0===rtlHasScrollBugStatus){const t=document.createElement("div"),e=document.createElement("div");Object.assign(t.style,{direction:"rtl",width:"1px",height:"1px",overflow:"auto"}),Object.assign(e.style,{width:"1000px",height:"1px"}),t.appendChild(e),document.body.appendChild(t),t.scrollLeft=-1e3,rtlHasScrollBugStatus=t.scrollLeft>=0,t.remove()}return rtlHasScrollBugStatus}function getScrollTarget(t,e){let i=getElement(e);if(null===i){if(t!==Object(t)||"function"!=typeof t.closest)return window;i=t.closest(".scroll,.scroll-y,.overflow-auto,.q-dialog__inner > div")}return scrollTargets.includes(i)?window:i}function getScrollHeight(t){return(t===window?document.body:t).scrollHeight}function getScrollWidth(t){return(t===window?document.body:t).scrollWidth}function getVerticalScrollPosition(t){return t===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:t.scrollTop}const getScrollPosition=getVerticalScrollPosition;function getHorizontalScrollPosition(t){return t===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:t.scrollLeft}function animVerticalScrollTo(t,e,i=0){const s=void 0===arguments[3]?performance.now():arguments[3],o=getVerticalScrollPosition(t);i<=0?o!==e&&setScroll$1(t,e):requestAnimationFrame(n=>{const r=n-s,a=o+(e-o)/Math.max(r,i)*r;setScroll$1(t,a),a!==e&&animVerticalScrollTo(t,e,i-r,n)})}const animScrollTo=animVerticalScrollTo;function animHorizontalScrollTo(t,e,i=0){const s=void 0===arguments[3]?performance.now():arguments[3],o=getHorizontalScrollPosition(t);i<=0?o!==e&&setHorizontalScroll(t,e):requestAnimationFrame(n=>{const r=n-s,a=o+(e-o)/Math.max(r,i)*r;setHorizontalScroll(t,a),a!==e&&animHorizontalScrollTo(t,e,i-r,n)})}function setScroll$1(t,e){t!==window?t.scrollTop=e:window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e)}function setHorizontalScroll(t,e){t!==window?t.scrollLeft=e:window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)}function setVerticalScrollPosition(t,e,i){i?animVerticalScrollTo(t,e,i):setScroll$1(t,e)}const setScrollPosition=setVerticalScrollPosition;function setHorizontalScrollPosition(t,e,i){i?animHorizontalScrollTo(t,e,i):setHorizontalScroll(t,e)}let size;function getScrollbarWidth(){if(void 0!==size)return size;const t=document.createElement("p"),e=document.createElement("div");css(t,{width:"100%",height:"200px"}),css(e,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),e.appendChild(t),document.body.appendChild(e);const i=t.offsetWidth;e.style.overflow="scroll";let s=t.offsetWidth;return i===s&&(s=e.clientWidth),e.remove(),size=i-s}function hasScrollbar(t,e=!0){return!(!t||t.nodeType!==Node.ELEMENT_NODE)&&(e?t.scrollHeight>t.clientHeight&&(t.classList.contains("scroll")||t.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(t)["overflow-y"])):t.scrollWidth>t.clientWidth&&(t.classList.contains("scroll")||t.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(t)["overflow-x"])))}let executeWhenScrollableList=[];function executeWhenScrollable(t){return!0!==document.qScrollPrevented?(t(),noop):(-1===executeWhenScrollableList.indexOf(t)&&executeWhenScrollableList.push(t),()=>{const e=executeWhenScrollableList.indexOf(t);e>-1&&(executeWhenScrollableList=executeWhenScrollableList.splice(e,1))})}function triggerIsScrollable(){const t=executeWhenScrollableList.slice();executeWhenScrollableList=[],t.forEach(t=>{t()})}var scroll={getScrollTarget:getScrollTarget,getScrollHeight:getScrollHeight,getScrollWidth:getScrollWidth,getScrollPosition:getScrollPosition,getVerticalScrollPosition:getVerticalScrollPosition,getHorizontalScrollPosition:getHorizontalScrollPosition,rtlHasScrollBug:rtlHasScrollBug,animScrollTo:animScrollTo,animVerticalScrollTo:animVerticalScrollTo,animHorizontalScrollTo:animHorizontalScrollTo,setScrollPosition:setScrollPosition,setVerticalScrollPosition:setVerticalScrollPosition,setHorizontalScrollPosition:setHorizontalScrollPosition,executeWhenScrollable:executeWhenScrollable,getScrollbarWidth:getScrollbarWidth,hasScrollbar:hasScrollbar};const handlers=[];let escDown=!1;var EscapeKey={__install(){this.__installed=!0,window.addEventListener("keydown",t=>{escDown=27===t.keyCode}),window.addEventListener("blur",()=>{!0===escDown&&(escDown=!1)}),window.addEventListener("keyup",t=>{!0===escDown&&(escDown=!1,0!==handlers.length&&!0===isKeyCode(t,27)&&handlers[handlers.length-1].fn(t))})},register(t,e){!0===t.$q.platform.is.desktop&&(!0!==this.__installed&&this.__install(),handlers.push({comp:t,fn:e}))},pop(t){if(!0===t.$q.platform.is.desktop){const e=handlers.findIndex(e=>e.comp===t);e>-1&&handlers.splice(e,1)}}};const SIDE_SPACE=4,horizontalPos={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};function isFixedPositioned(t){for(;t&&t!==document;){if("fixed"===window.getComputedStyle(t).position)return!0;t=t.parentNode}return!1}function isDocumentScrollableX(){return"hidden"!==window.getComputedStyle(document.documentElement).overflowX&&"hidden"!==window.getComputedStyle(document.body).overflowX}function isDocumentScrollableY(){return"hidden"!==window.getComputedStyle(document.documentElement).overflowY&&"hidden"!==window.getComputedStyle(document.body).overflowY}function computeScrollLeft(t,e,i){if(!0===t)return{vpLeft:e.offsetLeft,apLeft:e.offsetLeft};const s=window.pageXOffset||window.scrollX||document.body.scrollLeft||0;if(!0!==i)return{vpLeft:s,apLeft:s};const o=(!0===rtlHasScrollBug()?0:document.documentElement.scrollWidth-document.documentElement.clientWidth)+s;return{vpLeft:o,apLeft:o+document.documentElement.scrollWidth-document.documentElement.clientWidth}}function validatePosition(t){const e=t.split(" ");return 2===e.length&&(!0!==["top","center","bottom"].includes(e[0])?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):!0===["left","middle","right","start","end"].includes(e[1])||(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1))}function validateOffset(t){return!0!==t||2===t.length&&("number"==typeof t[0]&&"number"==typeof t[1])}function parsePosition(t,e){const i=t.split(" ");return{vertical:i[0],horizontal:horizontalPos[`${i[1]}#${!0===e?"rtl":"ltr"}`]}}function getAnchorProps(t,e,i){let{top:s,left:o,right:n,bottom:r,width:a,height:l}=t.getBoundingClientRect();if(0===a&&(a=t.offsetWidth),0===l&&(l=t.offsetHeight),void 0!==e&&(o-=e[0],n+=e[0],s-=e[1],r+=e[1]),!0===i){const t=document.documentElement.scrollWidth-document.documentElement.clientWidth;o-=t,n-=t}return{left:o,middle:o+(n-o)/2,right:n,top:s,center:s+(r-s)/2,bottom:r,leftRev:n,middleRev:o+(n-o)/2,rightRev:o,topRev:r,centerRev:s+(r-s)/2,bottomRev:s,width:a,height:l}}function getTargetProps(t){let{width:e,height:i}=t.getBoundingClientRect();return 0===e&&(e=t.offsetWidth),0===i&&(i=t.offsetHeight),{width:e,height:i}}function setPosition(t){const e=t.el;if(!0===e.classList.contains("q-body--scroll-locked"))return;let i,s;const{documentElement:o,body:n,qScrollPrevented:r}=document,a=e.children[0],l="1"!==a.style.opacity,h=isFixedPositioned(t.anchorEl),c={...t.anchorOrigin},d={...t.selfOrigin},u=!0===h&&!0===client.is.ios&&void 0!==window.visualViewport?window.visualViewport:{offsetLeft:0,offsetTop:!0===r?o.scrollTop:0},{vpLeft:p,apLeft:m}=computeScrollLeft(h,u,t.rtl),g=!0===h?u.offsetTop:window.pageYOffset||window.scrollY||n.scrollTop||0,f=!0===r?"offsetWidth":!0===h||!0!==isDocumentScrollableX()?"clientWidth":"scrollWidth",v=!0===r?"offsetHeight":!0===h||!0!==isDocumentScrollableY()?"clientHeight":"scrollHeight",_=o[f],b=o[v];if(void 0===t.absoluteOffset)i=getAnchorProps(t.anchorEl,!0===t.cover?[0,0]:t.offset,!0===t.rtl&&!0!==h);else{const e=!0===t.rtl&&!0!==h?o.scrollWidth-o.clientWidth:0,{top:s,left:n}=t.anchorEl.getBoundingClientRect(),r=s+(!0===t.cover?0:t.absoluteOffset.top),a=n+(!0===t.cover||!0===t.fit?0:t.absoluteOffset.left)-e;i={left:a,middle:a,right:a,top:r,center:r,bottom:r,leftRev:a,middleRev:a,rightRev:a,topRev:r,centerRev:r,bottomRev:r,width:0,height:0}}const y={minWidth:t.minWidth||null,minHeight:t.minHeight||null,maxWidth:t.maxWidth||null,maxHeight:t.maxHeight||null};if(!0!==t.fit&&!0!==t.cover||(null===t.minWidth&&(y.minWidth=i.width+"px"),!0===t.cover&&null===t.minHeight&&(y.minHeight=i.height+"px")),Object.assign(a.style,y),!0===l){const t=a.cloneNode(!0);t.classList.add("q-portal__clone"),n.appendChild(t),s=getTargetProps(t),t.remove()}else s=getTargetProps(a);null!==y.minWidth&&i.width>s.width&&(y.minWidth=s.width+"px"),null!==y.minHeight&&i.height>s.height&&(y.minHeight=s.height+"px");const S={position:!0===h?"fixed":"absolute",left:null,right:null,marginLeft:null,marginRight:null,maxWidth:null,top:null,bottom:null,marginTop:null,marginBottom:null,maxHeight:null},x=Math.min(p+i[t.anchorOrigin.horizontal],_-m-i[t.anchorOrigin.horizontal])-SIDE_SPACE,C=Math.min(g+i[t.anchorOrigin.vertical],b-g-i[t.anchorOrigin.vertical])-SIDE_SPACE;"left"===d.horizontal&&s.width+SIDE_SPACE>_-m-i[c.horizontal]&&p+i[c.horizontal+"Rev"]>_-m-i[c.horizontal]?(d.horizontal="right",c.horizontal=c.horizontal+"Rev"):"right"===d.horizontal&&s.width+SIDE_SPACE>p+i[c.horizontal]&&_-m-i[c.horizontal+"Rev"]>p+i[c.horizontal]?(d.horizontal="left",c.horizontal=c.horizontal+"Rev"):"middle"===d.horizontal&&s.width/2>x&&(d.horizontal=p+i[c.horizontal]<_/2?"left":"right",c.horizontal=d.horizontal),"left"===d.horizontal?(S.left=0,S.marginLeft=`${p+i[c.horizontal]}px`,S.maxWidth=`${_-p-i[c.horizontal]-SIDE_SPACE}px`):"right"===d.horizontal?(S.right="100%",S.marginRight=`-${p+i[c.horizontal]}px`,S.maxWidth=`${p+i[c.horizontal]-SIDE_SPACE}px`):(S.right="100%",S.marginRight=`-${p+i[c.horizontal]}px`),"top"===d.vertical&&s.height+SIDE_SPACE>b-g-i[c.vertical]&&g+i[c.vertical+"Rev"]>b-g-i[c.vertical]?(d.vertical="bottom",c.vertical=c.vertical+"Rev"):"bottom"===d.vertical&&s.height+SIDE_SPACE>g+i[c.vertical]&&b-g-i[c.vertical+"Rev"]>g+i[c.vertical]?(d.vertical="top",c.vertical=c.vertical+"Rev"):"center"===d.vertical&&s.height/2>C&&(d.vertical=g+i[c.vertical]{a.style.opacity=1})}["left","middle","right"].forEach(t=>{horizontalPos[`${t}#ltr`]=t,horizontalPos[`${t}#rtl`]=t});var QMenu=Vue.extend({name:"QMenu",mixins:[AttrsMixin,DarkMixin,AnchorMixin,TimeoutMixin,ModelToggleMixin,Portal,TransitionMixin,FocusWrapMixin],directives:{ClickOutside:ClickOutside},props:{persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:validatePosition},self:{type:String,validator:validatePosition},offset:{type:Array,validator:validateOffset},scrollTarget:{default:void 0},touchPosition:{type:Boolean,default:null},minHeight:{type:String,default:null},minWidth:{type:String,default:null},maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}},computed:{anchorOrigin(){return parsePosition(this.anchor||(!0===this.cover?"center middle":"bottom start"),this.$q.lang.rtl)},selfOrigin(){return!0===this.cover?this.anchorOrigin:parsePosition(this.self||"top start",this.$q.lang.rtl)},menuClass(){return(!0===this.square?" q-menu--square":"")+` q-menu--${this.darkSuffix} q-${this.darkSuffix}`},hideOnRouteChange(){return!0!==this.persistent&&!0!==this.noRouteDismiss},onEvents(){const t={...this.qListeners,input:stop,"popup-show":stop,"popup-hide":stop};return!0===this.autoClose&&(t.click=this.__onAutoClose),t},attrs(){return{tabindex:-1,role:"menu",...this.qAttrs}}},methods:{__show(t){if(this.__refocusTarget=!0===this.$q.platform.is.desktop&&!1===this.noRefocus&&null!==document.activeElement?document.activeElement:void 0,EscapeKey.register(this,()=>{!0===this.persistent?this.__focusCyclePortal():(this.$emit("escape-key"),this.hide())}),this.__showPortal(),this.__configureScrollTarget(),this.absoluteOffset=void 0,void 0!==t&&(!0===this.touchPosition||!1!==this.touchPosition&&this.contextMenu)){const e=position(t);if(void 0!==e.left){const{top:t,left:i}=this.anchorEl.getBoundingClientRect();this.absoluteOffset={left:e.left-i,top:e.top-t}}}void 0===this.unwatch&&(this.unwatch=this.$watch(()=>this.$q.screen.width+"|"+this.$q.screen.height+"|"+this.self+"|"+this.anchor+"|"+this.$q.lang.rtl,this.updatePosition)),this.$el.dispatchEvent(create("popup-show",{bubbles:!0})),!0!==this.noFocus?(null!==document.activeElement&&document.activeElement.blur(),this.__registerTick(()=>{this.focus(),this.updatePosition()})):this.__registerTick(()=>{this.updatePosition()}),this.__registerTimeout(()=>{!0===this.$q.platform.is.ios&&(this.__avoidAutoClose=this.autoClose,this.__portal.$el.click()),this.$emit("show",t)},300)},__hide(t){this.__removeTick(),this.__anchorCleanup(!0),void 0!==t&&!0===t.qClickOutside||this.__focusCyclePortal(!0),this.$el.dispatchEvent(create("popup-hide",{bubbles:!0})),this.__registerTimeout(()=>{!0!==this.showing&&(this.__hidePortal(),this.$emit("hide",t))},300)},__anchorCleanup(t){this.absoluteOffset=void 0,void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0),!0!==t&&!0!==this.showing||(EscapeKey.pop(this),this.__unconfigureScrollTarget())},__unconfigureScrollTarget(){this.__changeScrollEvent()},__configureScrollTarget(){!this.showing||void 0===this.anchorEl&&void 0===this.scrollTarget||this.__changeScrollEvent(this.updatePosition,getScrollTarget(this.anchorEl,this.scrollTarget))},__onAutoClose(t){!0!==this.__avoidAutoClose?(closePortalMenus(this,t),void 0!==this.qListeners.click&&this.$emit("click",t)):this.__avoidAutoClose=!1},updatePosition(){if(void 0===this.anchorEl||void 0===this.__portal)return;const t=this.__portal.$el;8!==t.nodeType?(void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),this.settingPosition=requestAnimationFrame(()=>{const e=!0===this.touchPosition||!1!==this.touchPosition&&this.contextMenu;setPosition({el:t,offset:this.offset,anchorEl:this.anchorEl,anchorOrigin:this.anchorOrigin,selfOrigin:this.selfOrigin,absoluteOffset:this.absoluteOffset,fit:!0!==e&&!0===this.fit,cover:!0!==e&&!0===this.cover,minHeight:this.minHeight,minWidth:this.minWidth,maxHeight:this.maxHeight,maxWidth:this.maxWidth,rtl:this.$q.lang.rtl}),this.settingPosition=void 0})):setTimeout(this.updatePosition,25)},__onClickOutside(t){if(!0!==this.persistent&&!0===this.showing){const e=t.target.classList;return closePortalMenus(this,t),"touchstart"!==t.type&&!0!==e.contains("q-dialog__backdrop")||(stopAndPrevent(t),this.$q.interaction.preventClick(t.target,!0)),!0}},__renderPortal(t){return t("transition",{props:this.transitionProps},[!0===this.showing?t("div",{class:"q-menu__container column no-pointer-events",directives:[{name:"click-outside",value:this.__onClickOutside,arg:this.anchorEl}]},[t("div",{ref:"inner",staticClass:"q-menu scroll all-pointer-events"+this.menuClass,class:this.contentClass,style:this.contentStyle,attrs:this.attrs,on:this.onEvents},this.__getFocusWrappedContent("default"))]):null])}},created(){this.__useTick("__registerTick","__removeTick"),this.__useTimeout("__registerTimeout")},mounted(){this.__processModelChange(this.value)},beforeDestroy(){void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),!0===this.showing&&void 0!==this.anchorEl&&this.anchorEl.dispatchEvent(create("popup-hide",{bubbles:!0})),this.__refocusTarget=void 0}});let buf,bufIdx=0;const hexBytes=new Array(256);for(let t=0;t<256;t++)hexBytes[t]=(t+256).toString(16).substr(1);const randomBytes=(()=>{const t="undefined"!=typeof crypto?crypto:"undefined"!=typeof window?window.msCrypto:void 0;if(void 0!==t){if(void 0!==t.randomBytes)return t.randomBytes;if(void 0!==t.getRandomValues)return e=>{var i=new Uint8Array(e);return t.getRandomValues(i),i}}return t=>{const e=[];for(let i=t;i>0;i--)e.push(Math.floor(256*Math.random()));return e}})(),BUFFER_SIZE=4096;function uid$3(){(void 0===buf||bufIdx+16>BUFFER_SIZE)&&(bufIdx=0,buf=randomBytes(BUFFER_SIZE));const t=Array.prototype.slice.call(buf,bufIdx,bufIdx+=16);return t[6]=15&t[6]|64,t[8]=63&t[8]|128,hexBytes[t[0]]+hexBytes[t[1]]+hexBytes[t[2]]+hexBytes[t[3]]+"-"+hexBytes[t[4]]+hexBytes[t[5]]+"-"+hexBytes[t[6]]+hexBytes[t[7]]+"-"+hexBytes[t[8]]+hexBytes[t[9]]+"-"+hexBytes[t[10]]+hexBytes[t[11]]+hexBytes[t[12]]+hexBytes[t[13]]+hexBytes[t[14]]+hexBytes[t[15]]}const menuTransitionProps=Object.keys(TransitionMixin.props).reduce((t,e)=>(t[e]={})&&t,{});var QBtnDropdown=Vue.extend({name:"QBtnDropdown",mixins:[BtnMixin,AttrsMixin],inheritAttrs:!1,props:{value:Boolean,split:Boolean,dropdownIcon:String,contentClass:[Array,String,Object],contentStyle:[Array,String,Object],cover:Boolean,persistent:Boolean,noRouteDismiss:Boolean,autoClose:Boolean,menuAnchor:{type:String,default:"bottom end"},menuSelf:{type:String,default:"top end"},menuOffset:Array,...menuTransitionProps,disableMainBtn:Boolean,disableDropdown:Boolean,noIconAnimation:Boolean,toggleAriaLabel:String},data(){return{showing:this.value}},watch:{value(t){void 0!==this.$refs.menu&&this.$refs.menu[t?"show":"hide"]()},split(){this.hide()}},render(t){const e=slot(this,"label",[]),i={"aria-expanded":!0===this.showing?"true":"false","aria-haspopup":"true","aria-controls":this.targetUid,"aria-owns":this.targetUid,"aria-label":this.toggleAriaLabel||this.$q.lang.label[!0===this.showing?"collapse":"expand"](this.label)};(!0===this.disable||!1===this.split&&!0===this.disableMainBtn||!0===this.disableDropdown)&&(i["aria-disabled"]="true");const s=[t(QIcon,{props:{name:this.dropdownIcon||this.$q.iconSet.arrow.dropdown},class:"q-btn-dropdown__arrow"+(!0===this.showing&&!1===this.noIconAnimation?" rotate-180":"")+(!1===this.split?" q-btn-dropdown__arrow-container":"")})];if(!0!==this.disableDropdown&&s.push(t(QMenu,{key:"menu",ref:"menu",attrs:{id:this.targetUid},props:{cover:this.cover,fit:!0,persistent:this.persistent,noRouteDismiss:this.noRouteDismiss,autoClose:this.autoClose,anchor:this.menuAnchor,self:this.menuSelf,offset:this.menuOffset,contentClass:this.contentClass,contentStyle:this.contentStyle,separateClosePopup:!0,transitionShow:this.transitionShow,transitionHide:this.transitionHide},on:cache(this,"menu",{"before-show":t=>{this.showing=!0,this.$emit("before-show",t)},show:t=>{this.$emit("show",t),this.$emit("input",!0)},"before-hide":t=>{this.showing=!1,this.$emit("before-hide",t)},hide:t=>{this.$emit("hide",t),this.$emit("input",!1)}})},slot(this,"default"))),!1===this.split)return t(QBtn,{key:"nonSpl",class:"q-btn-dropdown q-btn-dropdown--simple",props:{...this.$props,disable:!0===this.disable||!0===this.disableMainBtn,noWrap:!0,round:!1},attrs:{...i,...this.qAttrs},on:cache(this,"nonSpl",{click:t=>{this.$emit("click",t)}}),scopedSlots:{loading:this.$scopedSlots.loading}},e.concat(s));const o=t(QBtn,{key:"spl",class:"q-btn-dropdown--current",props:{...this.$props,disable:!0===this.disable||!0===this.disableMainBtn,noWrap:!0,iconRight:this.iconRight,round:!1},attrs:this.qAttrs,on:cache(this,"spl",{click:t=>{stop(t),this.hide(),this.$emit("click",t)}}),scopedSlots:{loading:this.$scopedSlots.loading}},e);return t(QBtnGroup,{props:{outline:this.outline,flat:this.flat,rounded:this.rounded,square:this.square,push:this.push,unelevated:this.unelevated,glossy:this.glossy,stretch:this.stretch},staticClass:"q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item"},[o,t(QBtn,{staticClass:"q-btn-dropdown__arrow-container q-anchor--skip",attrs:i,props:{disable:!0===this.disable||!0===this.disableDropdown,outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,size:this.size,color:this.color,textColor:this.textColor,dense:this.dense,ripple:this.ripple}},s)])},methods:{toggle(t){this.$refs.menu&&this.$refs.menu.toggle(t)},show(t){this.$refs.menu&&this.$refs.menu.show(t)},hide(t){this.$refs.menu&&this.$refs.menu.hide(t)}},created(){this.targetUid=`d_${uid$3()}`},mounted(){!0===this.value&&this.show()}}),FormMixin={props:{name:String},computed:{formAttrs(){return{type:"hidden",name:this.name,value:this.value}}},methods:{__injectFormInput(t,e,i){t[e](this.$createElement("input",{staticClass:"hidden",class:i,attrs:this.formAttrs,domProps:this.formDomProps}))}}};const FormFieldMixin={props:{name:String},computed:{nameProp(){return this.name||this.for}}};var QBtnToggle=Vue.extend({name:"QBtnToggle",mixins:[ListenersMixin,RippleMixin,FormMixin],props:{value:{required:!0},options:{type:Array,required:!0,validator:t=>t.every(t=>("label"in t||"icon"in t||"slot"in t)&&"value"in t)},color:String,textColor:String,toggleColor:{type:String,default:"primary"},toggleTextColor:String,outline:Boolean,flat:Boolean,unelevated:Boolean,rounded:Boolean,push:Boolean,glossy:Boolean,size:String,padding:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,readonly:Boolean,disable:Boolean,stack:Boolean,stretch:Boolean,spread:Boolean,clearable:Boolean},computed:{hasActiveValue(){return void 0!==this.options.find(t=>t.value===this.value)},formAttrs(){return{type:"hidden",name:this.name,value:this.value}},btnOptions(){const t=(t,e)=>void 0===t[e]?this[e]:t[e];return this.options.map((e,i)=>({slot:e.slot,options:{key:i,class:e.class,style:e.style,on:{...this.qListeners,click:t=>this.__set(e.value,e,t)},attrs:{"aria-pressed":e.value===this.value?"true":"false",...e.attrs},props:{...e,slot:void 0,class:void 0,style:void 0,value:void 0,attrs:void 0,outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,unelevated:this.unelevated,dense:this.dense,disable:!0===this.disable||!0===e.disable,color:e.value===this.value?t(e,"toggleColor"):t(e,"color"),textColor:e.value===this.value?t(e,"toggleTextColor"):t(e,"textColor"),noCaps:!0===t(e,"noCaps"),noWrap:!0===t(e,"noWrap"),size:t(e,"size"),padding:t(e,"padding"),ripple:t(e,"ripple"),stack:!0===t(e,"stack"),stretch:!0===t(e,"stretch")}}}))}},methods:{__set(t,e,i){!0!==this.readonly&&(this.value===t?!0===this.clearable&&(this.$emit("input",null,null),this.$emit("clear")):this.$emit("input",t,e),this.$emit("click",i))}},render(t){const e=this.btnOptions.map(e=>t(QBtn,{...e.options},void 0!==e.slot?slot(this,e.slot):void 0));return void 0!==this.name&&!0!==this.disable&&!0===this.hasActiveValue&&this.__injectFormInput(e,"push"),t(QBtnGroup,{staticClass:"q-btn-toggle",props:{outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,stretch:this.stretch,unelevated:this.unelevated,glossy:this.glossy,spread:this.spread}},mergeSlot(e,this,"default"))}}),QCard=Vue.extend({name:"QCard",mixins:[ListenersMixin,DarkMixin,TagMixin],props:{square:Boolean,flat:Boolean,bordered:Boolean},computed:{classes(){return"q-card"+` q-card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.bordered?" q-card--bordered":"")+(!0===this.square?" q-card--square no-border-radius":"")+(!0===this.flat?" q-card--flat no-shadow":"")}},render(t){return t(this.tag,{class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QCardSection=Vue.extend({name:"QCardSection",mixins:[ListenersMixin,TagMixin],props:{horizontal:Boolean},computed:{classes(){return"q-card__section "+`q-card__section--${!0===this.horizontal?"horiz row no-wrap":"vert"}`}},render(t){return t(this.tag,{class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QCardActions=Vue.extend({name:"QCardActions",mixins:[ListenersMixin,AlignMixin],props:{vertical:Boolean},computed:{classes(){return`q-card__actions--${!0===this.vertical?"vert column":"horiz row"} ${this.alignClass}`}},render(t){return t("div",{staticClass:"q-card__actions",class:this.classes,on:{...this.qListeners}},slot(this,"default"))}});const hasMap="function"==typeof Map,hasSet="function"==typeof Set,hasArrayBuffer="function"==typeof ArrayBuffer;function isDeepEqual(t,e){if(t===e)return!0;if(null!==t&&null!==e&&"object"==typeof t&&"object"==typeof e){if(t.constructor!==e.constructor)return!1;let i,s;if(t.constructor===Array){if((i=t.length)!==e.length)return!1;for(s=i;0!=s--;)if(!0!==isDeepEqual(t[s],e[s]))return!1;return!0}if(!0===hasMap&&t.constructor===Map){if(t.size!==e.size)return!1;for(s=t.entries().next();!0!==s.done;){if(!0!==e.has(s.value[0]))return!1;s=s.next()}for(s=t.entries().next();!0!==s.done;){if(!0!==isDeepEqual(s.value[1],e.get(s.value[0])))return!1;s=s.next()}return!0}if(!0===hasSet&&t.constructor===Set){if(t.size!==e.size)return!1;for(s=t.entries().next();!0!==s.done;){if(!0!==e.has(s.value[0]))return!1;s=s.next()}return!0}if(!0===hasArrayBuffer&&null!=t.buffer&&t.buffer.constructor===ArrayBuffer){if((i=t.length)!==e.length)return!1;for(s=i;0!=s--;)if(t[s]!==e[s])return!1;return!0}if(t.constructor===RegExp)return t.source===e.source&&t.flags===e.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===e.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===e.toString();const o=Object.keys(t).filter(e=>void 0!==t[e]);if((i=o.length)!==Object.keys(e).filter(t=>void 0!==e[t]).length)return!1;for(s=i;0!=s--;){const i=o[s];if(!0!==isDeepEqual(t[i],e[i]))return!1}return!0}return t!=t&&e!=e}function isObject(t){return null!==t&&"object"==typeof t&&!0!==Array.isArray(t)}function isDate(t){return"[object Date]"===Object.prototype.toString.call(t)}function isRegexp(t){return"[object RegExp]"===Object.prototype.toString.call(t)}function isNumber(t){return"number"==typeof t&&isFinite(t)}var is={deepEqual:isDeepEqual,object:isObject,date:isDate,regexp:isRegexp,number:isNumber};const directions$1=["left","right","up","down","horizontal","vertical"],modifiersAll={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0,all:!0};function getModifierDirections(t){const e={};return directions$1.forEach(i=>{t[i]&&(e[i]=!0)}),0===Object.keys(e).length?modifiersAll:(!0===e.horizontal&&(e.left=e.right=!0),!0===e.vertical&&(e.up=e.down=!0),!0===e.left&&!0===e.right&&(e.horizontal=!0),!0===e.up&&!0===e.down&&(e.vertical=!0),!0===e.horizontal&&!0===e.vertical&&(e.all=!0),e)}function shouldStart(t,e){return void 0===e.event&&void 0!==t.target&&!0!==t.target.draggable&&"function"==typeof e.handler&&"INPUT"!==t.target.nodeName.toUpperCase()&&(void 0===t.qClonedBy||-1===t.qClonedBy.indexOf(e.uid))}function parseArg$3(t){const e=[.06,6,50];return"string"==typeof t&&t.length&&t.split(":").forEach((t,i)=>{const s=parseFloat(t);s&&(e[i]=s)}),e}function destroy$a(t){const e=t.__qtouchswipe;void 0!==e&&(cleanEvt(e,"main_mouse"),cleanEvt(e,"main_touch"),cleanEvt(e,"temp"),!0===client.is.firefox&&preventDraggable(t,!1),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchswipe)}function configureEvents$4(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&cleanEvt(e,"main_mouse"),!0===i.mouse&&addEvt(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===client.has.touch&&e.modifiers.capture!==i.capture&&(cleanEvt(e,"main_touch"),addEvt(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","notPassiveCapture"]])),e.modifiers=i}var TouchSwipe={name:"touch-swipe",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchswipe&&(destroy$a(t),t.__qtouchswipe_destroyed=!0);const o={handler:s,sensitivity:parseArg$3(i),arg:i,modifiers:{capture:null},direction:getModifierDirections(e),noop:noop,mouseStart(t){shouldStart(t,o)&&leftClick(t)&&(addEvt(o,"temp",[[document,"mousemove","move",`notPassive${!0===o.modifiers.mouseCapture?"Capture":""}`],[document,"mouseup","end","notPassiveCapture"]]),o.start(t,!0))},touchStart(t){if(shouldStart(t,o)){const e=t.target;addEvt(o,"temp",[[e,"touchmove","move","notPassiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(e,i){!0===client.is.firefox&&preventDraggable(t,!0);const s=position(e);o.event={x:s.left,y:s.top,time:Date.now(),mouse:!0===i,dir:!1}},move(t){if(void 0===o.event)return;if(!1!==o.event.dir)return void stopAndPrevent(t);const e=Date.now()-o.event.time;if(0===e)return;const i=position(t),s=i.left-o.event.x,n=Math.abs(s),r=i.top-o.event.y,a=Math.abs(r);if(!0!==o.event.mouse){if(no.sensitivity[0]&&(o.event.dir=r<0?"up":"down"),!0===o.direction.horizontal&&n>a&&a<100&&l>o.sensitivity[0]&&(o.event.dir=s<0?"left":"right"),!0===o.direction.up&&no.sensitivity[0]&&(o.event.dir="up"),!0===o.direction.down&&n0&&n<100&&h>o.sensitivity[0]&&(o.event.dir="down"),!0===o.direction.left&&n>a&&s<0&&a<100&&l>o.sensitivity[0]&&(o.event.dir="left"),!0===o.direction.right&&n>a&&s>0&&a<100&&l>o.sensitivity[0]&&(o.event.dir="right"),!1!==o.event.dir?(stopAndPrevent(t),!0===o.event.mouse&&(document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),clearSelection(),o.styleCleanup=(t=>{o.styleCleanup=void 0,document.body.classList.remove("non-selectable");const e=()=>{document.body.classList.remove("no-pointer-events--children")};!0===t?setTimeout(e,50):e()})),o.handler({evt:t,touch:!0!==o.event.mouse,mouse:o.event.mouse,direction:o.event.dir,duration:e,distance:{x:n,y:a}})):o.end(t)},end(e){void 0!==o.event&&(cleanEvt(o,"temp"),!0===client.is.firefox&&preventDraggable(t,!1),void 0!==o.styleCleanup&&o.styleCleanup(!0),void 0!==e&&!1!==o.event.dir&&stopAndPrevent(e),o.event=void 0)}};t.__qtouchswipe=o,configureEvents$4(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchswipe;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&(n.sensitivity=parseArg$3(i)),!0!==isDeepEqual(n.modifiers,e)&&(configureEvents$4(t,n,e),n.direction=getModifierDirections(e)))},unbind(t){void 0===t.__qtouchswipe_destroyed?destroy$a(t):delete t.__qtouchswipe_destroyed}};function getPanelWrapper(t){return t("div",{key:"stop",staticClass:"q-panel scroll",on:cache(this,"stop",{input:stop})},slot(this,"default"))}const PanelWrapper=Vue.extend({render:getPanelWrapper}),PanelParentMixin={mixins:[ListenersMixin],directives:{TouchSwipe:TouchSwipe},props:{value:{required:!0},animated:Boolean,infinite:Boolean,swipeable:Boolean,vertical:Boolean,transitionPrev:String,transitionNext:String,keepAlive:Boolean,keepAliveInclude:[String,Array,RegExp],keepAliveExclude:[String,Array,RegExp],keepAliveMax:Number},data:()=>({panelIndex:null,panelTransition:null}),computed:{panelDirectives(){if(!0===this.swipeable)return[{name:"touch-swipe",value:this.__swipe,modifiers:{horizontal:!0!==this.vertical,vertical:this.vertical,mouse:!0}}]},contentKey(){return"string"==typeof this.value||"number"==typeof this.value?this.value:String(this.value)},transitionPrevComputed(){return this.transitionPrev||`slide-${!0===this.vertical?"down":"right"}`},transitionNextComputed(){return this.transitionNext||`slide-${!0===this.vertical?"up":"left"}`},keepAliveProps(){return{include:this.keepAliveInclude,exclude:this.keepAliveExclude,max:this.keepAliveMax}},needsUniqueWrapper(){return void 0!==this.keepAliveInclude||void 0!==this.keepAliveExclude}},watch:{value(t,e){const i=!0===this.__isValidPanelName(t)?this.__getPanelIndex(t):-1;!0!==this.__forcedPanelTransition&&this.__updatePanelTransition(-1===i?0:i{this.$emit("transition",t,e)}))}},methods:{next(){this.__go(1)},previous(){this.__go(-1)},goTo(t){this.$emit("input",t)},__isValidPanelName:t=>void 0!==t&&null!==t&&""!==t,__getPanelIndex(t){return this.panels.findIndex(e=>{const i=e.componentOptions.propsData;return i.name===t&&""!==i.disable&&!0!==i.disable})},__getEnabledPanels(){return this.panels.filter(t=>{const e=t.componentOptions.propsData;return""!==e.disable&&!0!==e.disable})},__updatePanelTransition(t){const e=0!==t&&!0===this.animated&&-1!==this.panelIndex?"q-transition--"+(-1===t?this.transitionPrevComputed:this.transitionNextComputed):null;this.panelTransition!==e&&(this.panelTransition=e)},__go(t,e=this.panelIndex){let i=e+t;const s=this.panels;for(;i>-1&&i{this.__forcedPanelTransition=!1});i+=t}!0===this.infinite&&s.length>0&&-1!==e&&e!==s.length&&this.__go(t,-1===t?s.length:-1)},__swipe(t){const e=!0===this.vertical?"up":"left";this.__go((!0===this.$q.lang.rtl?-1:1)*(t.direction===e?1:-1))},__updatePanelIndex(){const t=this.__getPanelIndex(this.value);return this.panelIndex!==t&&(this.panelIndex=t),!0},__getPanelContent(t){if(0===this.panels.length)return;const e=this.__isValidPanelName(this.value)&&this.__updatePanelIndex()&&this.panels[this.panelIndex],i=!0===this.keepAlive?[t("keep-alive",{props:this.keepAliveProps},[t(!0===this.needsUniqueWrapper?cacheWithFn(this,this.contentKey,()=>Vue.extend({name:this.contentKey,render:getPanelWrapper})):PanelWrapper,{key:this.contentKey},[e])])]:[t("div",{staticClass:"q-panel scroll",key:this.contentKey,on:cache(this,"stop",{input:stop})},[e])];return!0===this.animated?[t("transition",{props:{name:this.panelTransition},on:onTransitionHideScroll},i)]:i}},render(t){return this.panels=slot(this,"default",[]).filter(t=>void 0!==t&&void 0!==t.componentOptions&&void 0!==t.componentOptions.propsData&&this.__isValidPanelName(t.componentOptions.propsData.name)),this.__renderPanels(t)}},PanelChildMixin={mixins:[ListenersMixin],props:{name:{required:!0},disable:Boolean}};let fullscreenCounter=0;var FullscreenMixin={props:{fullscreen:Boolean,noRouteFullscreenExit:Boolean},data:()=>({inFullscreen:!1}),watch:{$route(){!0!==this.noRouteFullscreenExit&&this.exitFullscreen()},fullscreen(t){this.inFullscreen!==t&&this.toggleFullscreen()},inFullscreen(t){this.$emit("update:fullscreen",t),this.$emit("fullscreen",t)}},methods:{toggleFullscreen(){!0===this.inFullscreen?this.exitFullscreen():this.setFullscreen()},setFullscreen(){!0!==this.inFullscreen&&(this.inFullscreen=!0,this.container=this.$el.parentNode,this.container.replaceChild(this.fullscreenFillerNode,this.$el),document.body.appendChild(this.$el),1===++fullscreenCounter&&document.body.classList.add("q-body--fullscreen-mixin"),this.__historyFullscreen={handler:this.exitFullscreen},History.add(this.__historyFullscreen))},exitFullscreen(){!0===this.inFullscreen&&(void 0!==this.__historyFullscreen&&(History.remove(this.__historyFullscreen),this.__historyFullscreen=void 0),this.container.replaceChild(this.$el,this.fullscreenFillerNode),this.inFullscreen=!1,0===(fullscreenCounter=Math.max(0,fullscreenCounter-1))&&(document.body.classList.remove("q-body--fullscreen-mixin"),void 0!==this.$el.scrollIntoView&&setTimeout(()=>{this.$el.scrollIntoView()})))}},beforeMount(){this.fullscreenFillerNode=document.createElement("span")},mounted(){!0===this.fullscreen&&this.setFullscreen()},beforeDestroy(){this.exitFullscreen()}},QCarousel=Vue.extend({name:"QCarousel",mixins:[DarkMixin,PanelParentMixin,FullscreenMixin],props:{height:String,padding:Boolean,controlType:{type:String,validator:t=>["regular","flat","outline","push","unelevated"].includes(t),default:"flat"},controlColor:String,controlTextColor:String,autoplay:[Number,Boolean],arrows:Boolean,prevIcon:String,nextIcon:String,navigation:Boolean,navigationPosition:{type:String,validator:t=>["top","right","bottom","left"].includes(t)},navigationIcon:String,navigationActiveIcon:String,thumbnails:Boolean},computed:{style(){if(!0!==this.inFullscreen&&void 0!==this.height)return{height:this.height}},direction(){return!0===this.vertical?"vertical":"horizontal"},classes(){return`q-carousel q-panel-parent q-carousel--with${!0===this.padding?"":"out"}-padding`+(!0===this.inFullscreen?" fullscreen":"")+` q-carousel--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.arrows?` q-carousel--arrows-${this.direction}`:"")+(!0===this.navigation?` q-carousel--navigation-${this.navigationPositionComputed}`:"")},arrowIcons(){const t=[this.prevIcon||this.$q.iconSet.carousel[!0===this.vertical?"up":"left"],this.nextIcon||this.$q.iconSet.carousel[!0===this.vertical?"down":"right"]];return!1===this.vertical&&!0===this.$q.lang.rtl?t.reverse():t},navIcon(){return this.navigationIcon||this.$q.iconSet.carousel.navigationIcon},navActiveIcon(){return this.navigationActiveIcon||this.navIcon},navigationPositionComputed(){return this.navigationPosition||(!0===this.vertical?"right":"bottom")},controlProps(){return{color:this.controlColor,textColor:this.controlTextColor,round:!0,[this.controlType]:!0,dense:!0}},transitionPrevComputed(){return this.transitionPrev||"fade"},transitionNextComputed(){return this.transitionNext||"fade"}},watch:{value(){this.autoplay&&(clearInterval(this.timer),this.__startTimer())},autoplay(t){t?this.__startTimer():clearInterval(this.timer)}},methods:{__startTimer(){const t=!0===isNumber(this.autoplay)?this.autoplay:5e3;this.timer=setTimeout(t>=0?this.next:this.previous,Math.abs(t))},__getNavigationContainer(t,e,i){return t("div",{class:"q-carousel__control q-carousel__navigation no-wrap absolute flex"+` q-carousel__navigation--${e} q-carousel__navigation--${this.navigationPositionComputed}`+(void 0!==this.controlColor?` text-${this.controlColor}`:"")},[t("div",{staticClass:"q-carousel__navigation-inner flex flex-center no-wrap"},this.__getEnabledPanels().map(i))])},__getContent(t){const e=[];if(!0===this.navigation){const i=void 0!==this.$scopedSlots["navigation-icon"]?this.$scopedSlots["navigation-icon"]:e=>t(QBtn,{key:"nav#"+e.name,class:`q-carousel__navigation-icon q-carousel__navigation-icon--${!0===e.active?"":"in"}active`,props:e.btnProps,on:cache(this,"nav#"+e.name,{click:e.onClick})}),s=this.panels.length-1;e.push(this.__getNavigationContainer(t,"buttons",(t,e)=>{const o=t.componentOptions.propsData.name,n=this.panelIndex===e;return i({index:e,maxIndex:s,name:o,active:n,btnProps:{icon:!0===n?this.navActiveIcon:this.navIcon,size:"sm",...this.controlProps},onClick:()=>{this.goTo(o)}})}))}else if(!0===this.thumbnails){const i=void 0!==this.controlColor?` text-${this.controlColor}`:"";e.push(this.__getNavigationContainer(t,"thumbnails",e=>{const s=e.componentOptions.propsData;return t("img",{class:`q-carousel__thumbnail q-carousel__thumbnail--${s.name===this.value?"":"in"}active`+i,attrs:{src:s.imgSrc},key:"tmb#"+s.name,on:cache(this,"tmb#"+s.name,{click:()=>{this.goTo(s.name)}})})}))}return!0===this.arrows&&this.panelIndex>=0&&((!0===this.infinite||this.panelIndex>0)&&e.push(t("div",{staticClass:`q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--${this.direction} absolute flex flex-center`},[t(QBtn,{key:"prev",props:{icon:this.arrowIcons[0],...this.controlProps},on:cache(this,"prev",{click:this.previous})})])),(!0===this.infinite||this.panelIndex["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)},offset:{type:Array,default:()=>[18,18],validator:t=>2===t.length}},computed:{classes(){return`absolute-${this.position}`},style(){return{margin:`${this.offset[1]}px ${this.offset[0]}px`}}},render(t){return t("div",{staticClass:"q-carousel__control absolute",style:this.style,class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QChatMessage=Vue.extend({name:"QChatMessage",mixins:[ListenersMixin],props:{sent:Boolean,label:String,bgColor:String,textColor:String,name:String,avatar:String,text:Array,stamp:String,size:String,labelSanitize:Boolean,nameSanitize:Boolean,textSanitize:Boolean,stampSanitize:Boolean},computed:{textClass(){return`q-message-text-content q-message-text-content--${this.op}`+(void 0!==this.textColor?` text-${this.textColor}`:"")},messageClass(){return`q-message-text q-message-text--${this.op}`+(void 0!==this.bgColor?` text-${this.bgColor}`:"")},containerClass(){return"q-message-container row items-end no-wrap"+(!0===this.sent?" reverse":"")},sizeClass(){if(void 0!==this.size)return`col-${this.size}`},op(){return!0===this.sent?"sent":"received"}},methods:{__wrapStamp(t,e){if(void 0!==this.$scopedSlots.stamp)return[e,t("div",{staticClass:"q-message-stamp"},this.$scopedSlots.stamp())];if(this.stamp){return[e,t("div",{staticClass:"q-message-stamp",domProps:{[!0===this.stampSanitize?"textContent":"innerHTML"]:this.stamp}})]}return[e]},__getText(t,e,i){const s=!0===this.textSanitize?"textContent":"innerHTML";if(!0===i&&!0===e.some(t=>void 0===t.tag&&void 0!==t.text))return[t("div",{class:this.messageClass},[t("div",{class:this.textClass},this.__wrapStamp(t,t("div",e)))])];const o=!0!==i?e=>t("div",{domProps:{[s]:e}}):e.length>1?t=>t:e=>t("div",[e]);return e.map((e,i)=>t("div",{key:i,class:this.messageClass},[t("div",{class:this.textClass},this.__wrapStamp(t,o(e)))]))}},render(t){const e=[];void 0!==this.$scopedSlots.avatar?e.push(this.$scopedSlots.avatar()):void 0!==this.avatar&&e.push(t("img",{class:`q-message-avatar q-message-avatar--${this.op}`,attrs:{src:this.avatar,"aria-hidden":"true"}}));const i=[];void 0!==this.$scopedSlots.name?i.push(t("div",{class:`q-message-name q-message-name--${this.op}`},this.$scopedSlots.name())):void 0!==this.name&&i.push(t("div",{class:`q-message-name q-message-name--${this.op}`,domProps:{[!0===this.nameSanitize?"textContent":"innerHTML"]:this.name}})),void 0!==this.text&&i.push(this.__getText(t,this.text)),void 0!==this.$scopedSlots.default&&i.push(this.__getText(t,this.$scopedSlots.default(),!0)),e.push(t("div",{class:this.sizeClass},i));const s=[];return void 0!==this.$scopedSlots.label?s.push(t("div",{staticClass:"q-message-label"},this.$scopedSlots.label())):void 0!==this.label&&s.push(t("div",{staticClass:"q-message-label",domProps:{[!0===this.labelSanitize?"textContent":"innerHTML"]:this.label}})),s.push(t("div",{class:this.containerClass},e)),t("div",{class:`q-message q-message-${this.op}`,on:{...this.qListeners}},s)}}),OptionSizeMixin=getSizeMixin({xs:30,sm:35,md:40,lg:50,xl:60}),RefocusTargetMixin={computed:{__refocusTargetEl(){if(!0!==this.disable)return this.$createElement("span",{ref:"refocusTarget",staticClass:"no-outline",attrs:{tabindex:-1}})}},methods:{__refocusTarget(t){if(!0===this.$el.contains(document.activeElement)){const t=!0===this.$q.interaction.isPointer?this.$refs.refocusTarget:this.$el;void 0!==t&&document.activeElement!==t&&t.focus()}}}},CheckboxMixin={mixins:[DarkMixin,OptionSizeMixin,FormMixin,RefocusTargetMixin],props:{value:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:t=>"tf"===t||"ft"===t},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},computed:{isTrue(){return!0===this.modelIsArray?this.index>-1:this.value===this.trueValue},isFalse(){return!0===this.modelIsArray?-1===this.index:this.value===this.falseValue},isIndeterminate(){return!1===this.isTrue&&!1===this.isFalse},index(){if(!0===this.modelIsArray)return this.value.indexOf(this.val)},modelIsArray(){return void 0!==this.val&&Array.isArray(this.value)},computedTabindex(){return!0===this.disable?-1:this.tabindex||0},classes(){return`q-${this.type} cursor-pointer no-outline row inline no-wrap items-center`+(!0===this.disable?" disabled":"")+` q-${this.type}--${this.darkSuffix}`+(!0===this.dense?` q-${this.type}--dense`:"")+(!0===this.leftLabel?" reverse":"")},innerClass(){const t=!0===this.isTrue?"truthy":!0===this.isFalse?"falsy":"indet",e=void 0===this.color||!0!==this.keepColor&&("toggle"===this.type?!0!==this.isTrue:!0===this.isFalse)?"":` text-${this.color}`;return`q-${this.type}__inner--${t}${e}`},formAttrs(){const t={type:"checkbox"};return void 0!==this.name&&Object.assign(t,{checked:this.isTrue,name:this.name,value:!0===this.modelIsArray?this.val:this.trueValue}),t},attrs(){const t={tabindex:this.computedTabindex,role:"toggle"===this.type?"switch":"checkbox","aria-label":this.label,"aria-checked":!0===this.isIndeterminate?"mixed":!0===this.isTrue?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{toggle(t){void 0!==t&&(stopAndPrevent(t),this.__refocusTarget(t)),!0!==this.disable&&this.$emit("input",this.__getNextValue(),t)},__getNextValue(){if(!0===this.modelIsArray){if(!0===this.isTrue){const t=this.value.slice();return t.splice(this.index,1),t}return this.value.concat([this.val])}if(!0===this.isTrue){if("ft"!==this.toggleOrder||!1===this.toggleIndeterminate)return this.falseValue}else{if(!0!==this.isFalse)return"ft"!==this.toggleOrder?this.trueValue:this.falseValue;if("ft"===this.toggleOrder||!1===this.toggleIndeterminate)return this.trueValue}return this.indeterminateValue},__onKeydown(t){13!==t.keyCode&&32!==t.keyCode||stopAndPrevent(t)},__onKeyup(t){13!==t.keyCode&&32!==t.keyCode||this.toggle(t)}},render(t){const e=this.__getInner(t);!0!==this.disable&&this.__injectFormInput(e,"unshift",`q-${this.type}__native absolute q-ma-none q-pa-none`);const i=[t("div",{staticClass:`q-${this.type}__inner relative-position non-selectable`,class:this.innerClass,style:this.sizeStyle,attrs:{"aria-hidden":"true"}},e)];void 0!==this.__refocusTargetEl&&i.push(this.__refocusTargetEl);const s=void 0!==this.label?mergeSlot([this.label],this,"default"):slot(this,"default");return void 0!==s&&i.push(t("div",{staticClass:`q-${this.type}__label q-anchor--skip`},s)),t("div",{key:"inpExt",class:this.classes,attrs:this.attrs,on:cache(this,"inpExt",{click:this.toggle,keydown:this.__onKeydown,keyup:this.__onKeyup})},i)}},QCheckbox=Vue.extend({name:"QCheckbox",mixins:[CheckboxMixin],computed:{computedIcon(){return!0===this.isTrue?this.checkedIcon:!0===this.isIndeterminate?this.indeterminateIcon:this.uncheckedIcon}},methods:{__getInner(t){return void 0!==this.computedIcon?[t("div",{key:"icon",staticClass:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[t(QIcon,{staticClass:"q-checkbox__icon",props:{name:this.computedIcon}})])]:[t("div",{key:"svg",staticClass:"q-checkbox__bg absolute"},[t("svg",{staticClass:"q-checkbox__svg fit absolute-full",attrs:{focusable:"false",viewBox:"0 0 24 24"}},[t("path",{staticClass:"q-checkbox__truthy",attrs:{fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}}),t("path",{staticClass:"q-checkbox__indet",attrs:{d:"M4,14H20V10H4"}})])])]}},created(){this.type="checkbox"}}),QChip=Vue.extend({name:"QChip",mixins:[RippleMixin,DarkMixin,getSizeMixin({xs:8,sm:10,md:14,lg:20,xl:24})],model:{event:"remove"},props:{dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,value:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean},computed:{classes(){const t=!0===this.outline&&this.color||this.textColor;return{[`bg-${this.color}`]:!1===this.outline&&void 0!==this.color,[`text-${t} q-chip--colored`]:t,disabled:this.disable,"q-chip--dense":this.dense,"q-chip--outline":this.outline,"q-chip--selected":this.selected,"q-chip--clickable cursor-pointer non-selectable q-hoverable":this.isClickable,"q-chip--square":this.square,[`q-chip--${this.localDarkSuffix}`]:!0}},localDarkSuffix(){return"string"==typeof this.color&&this.color.trim().length>0?!0===this.dark?"dark":"light":this.darkSuffix},hasLeftIcon(){return!0===this.selected||void 0!==this.icon},leftIcon(){return!0===this.selected?this.iconSelected||this.$q.iconSet.chip.selected:this.icon},removeIcon(){return this.iconRemove||this.$q.iconSet.chip.remove},isClickable(){return!1===this.disable&&(!0===this.clickable||null!==this.selected)},attrs(){const t=!0===this.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.tabindex||0};return{chip:t,remove:{...t,role:"button","aria-hidden":"false","aria-label":this.removeAriaLabel||this.$q.lang.label.remove}}}},methods:{__onKeyup(t){13===t.keyCode&&this.__onClick(t)},__onClick(t){this.disable||(this.$emit("update:selected",!this.selected),this.$emit("click",t))},__onRemove(t){void 0!==t.keyCode&&13!==t.keyCode||(stopAndPrevent(t),!this.disable&&this.$emit("remove",!1))},__getContent(t){const e=[];!0===this.isClickable&&e.push(t("div",{staticClass:"q-focus-helper"})),!0===this.hasLeftIcon&&e.push(t(QIcon,{staticClass:"q-chip__icon q-chip__icon--left",props:{name:this.leftIcon}}));const i=void 0!==this.label?[t("div",{staticClass:"ellipsis"},[this.label])]:void 0;return e.push(t("div",{staticClass:"q-chip__content col row no-wrap items-center q-anchor--skip"},mergeSlotSafely(i,this,"default"))),this.iconRight&&e.push(t(QIcon,{staticClass:"q-chip__icon q-chip__icon--right",props:{name:this.iconRight}})),!0===this.removable&&e.push(t(QIcon,{key:"non",staticClass:"q-chip__icon q-chip__icon--remove cursor-pointer",props:{name:this.removeIcon},attrs:this.attrs.remove,on:cache(this,"non",{click:this.__onRemove,keyup:this.__onRemove})})),e}},render(t){if(!1===this.value)return;const e={staticClass:"q-chip row inline no-wrap items-center",class:this.classes,style:this.sizeStyle};return!0===this.isClickable&&Object.assign(e,{key:"click",attrs:this.attrs.chip,on:cache(this,"click",{click:this.__onClick,keyup:this.__onKeyup}),directives:cache(this,"dir#"+this.ripple,[{name:"ripple",value:this.ripple}])}),t("div",e,this.__getContent(t))}});const radius=50,diameter=100,circumference=100*Math.PI,strokeDashArray=Math.round(1e3*circumference)/1e3;var QCircularProgress=Vue.extend({name:"QCircularProgress",mixins:[ListenersMixin,SizeMixin],props:{value:{type:Number,default:0},min:{type:Number,default:0},max:{type:Number,default:100},color:String,centerColor:String,trackColor:String,fontSize:String,rounded:Boolean,thickness:{type:Number,default:.2,validator:t=>t>=0&&t<=1},angle:{type:Number,default:0},indeterminate:Boolean,showValue:Boolean,reverse:Boolean,instantFeedback:Boolean},computed:{normalizedValue(){return between(this.value,this.min,this.max)},svgStyle(){const t=!0===this.$q.lang.rtl?-this.angle:this.angle;return{transform:this.reverse!==(!0===this.$q.lang.rtl)?`scale3d(-1, 1, 1) rotate3d(0, 0, 1, ${-90-t}deg)`:`rotate3d(0, 0, 1, ${t-90}deg)`}},circleStyle(){if(!0!==this.instantFeedback&&!0!==this.indeterminate)return{transition:"stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease"}},viewBox(){return 100/(1-this.thickness/2)},viewBoxAttr(){return`${this.viewBox/2} ${this.viewBox/2} ${this.viewBox} ${this.viewBox}`},strokeDashOffset(){return(1-(this.normalizedValue-this.min)/(this.max-this.min))*circumference},strokeWidth(){return this.thickness/2*this.viewBox},attrs(){return{role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":!0===this.indeterminate?void 0:this.normalizedValue}}},methods:{__getCircle(t,{thickness:e,offset:i,color:s,cls:o,rounded:n}){return t("circle",{staticClass:"q-circular-progress__"+o,class:void 0!==s?`text-${s}`:null,style:this.circleStyle,attrs:{fill:"transparent",stroke:"currentColor","stroke-width":e,"stroke-dasharray":strokeDashArray,"stroke-dashoffset":i,"stroke-linecap":n,cx:this.viewBox,cy:this.viewBox,r:50}})}},render(t){const e=[];void 0!==this.centerColor&&"transparent"!==this.centerColor&&e.push(t("circle",{staticClass:"q-circular-progress__center",class:`text-${this.centerColor}`,attrs:{fill:"currentColor",r:50-this.strokeWidth/2,cx:this.viewBox,cy:this.viewBox}})),void 0!==this.trackColor&&"transparent"!==this.trackColor&&e.push(this.__getCircle(t,{cls:"track",thickness:this.strokeWidth,offset:0,color:this.trackColor})),e.push(this.__getCircle(t,{cls:"circle",thickness:this.strokeWidth,offset:this.strokeDashOffset,color:this.color,rounded:!0===this.rounded?"round":void 0}));const i=[t("svg",{staticClass:"q-circular-progress__svg",style:this.svgStyle,attrs:{focusable:"false",viewBox:this.viewBoxAttr,"aria-hidden":"true"}},e)];return!0===this.showValue&&i.push(t("div",{staticClass:"q-circular-progress__text absolute-full row flex-center content-center",style:{fontSize:this.fontSize}},void 0!==this.$scopedSlots.default?this.$scopedSlots.default():[t("div",[this.normalizedValue])])),t("div",{staticClass:"q-circular-progress",class:`q-circular-progress--${!0===this.indeterminate?"in":""}determinate`,style:this.sizeStyle,on:{...this.qListeners},attrs:this.attrs},mergeSlotSafely(i,this,"internal"))}});const hex=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,hexa=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,hexOrHexa=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,rgb=/^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])\)$/,rgba=/^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)\)$/,testPattern={date:t=>/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t),time:t=>/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(t),fulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(t),timeOrFulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(t),email:t=>/^(([^<>()[\]\\.,;:\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(t),hexColor:t=>hex.test(t),hexaColor:t=>hexa.test(t),hexOrHexaColor:t=>hexOrHexa.test(t),rgbColor:t=>rgb.test(t),rgbaColor:t=>rgba.test(t),rgbOrRgbaColor:t=>rgb.test(t)||rgba.test(t),hexOrRgbColor:t=>hex.test(t)||rgb.test(t),hexaOrRgbaColor:t=>hexa.test(t)||rgba.test(t),anyColor:t=>hexOrHexa.test(t)||rgb.test(t)||rgba.test(t)};var patterns={testPattern:testPattern};function throttle(t,e=250){let i,s=!1;return function(){return!1===s&&(s=!0,setTimeout(()=>{s=!1},e),i=t.apply(this,arguments)),i}}function getChanges(t,e,i){const s=position(t);let o,n=s.left-e.event.x,r=s.top-e.event.y,a=Math.abs(n),l=Math.abs(r);const h=e.direction;!0===h.horizontal&&!0!==h.vertical?o=n<0?"left":"right":!0!==h.horizontal&&!0===h.vertical?o=r<0?"up":"down":!0===h.up&&r<0?(o="up",a>l&&(!0===h.left&&n<0?o="left":!0===h.right&&n>0&&(o="right"))):!0===h.down&&r>0?(o="down",a>l&&(!0===h.left&&n<0?o="left":!0===h.right&&n>0&&(o="right"))):!0===h.left&&n<0?(o="left",a0&&(o="down"))):!0===h.right&&n>0&&(o="right",a0&&(o="down")));let c=!1;if(void 0===o&&!1===i){if(!0===e.event.isFirst||void 0===e.event.lastDir)return{};c=!0,"left"===(o=e.event.lastDir)||"right"===o?(s.left-=n,a=0,n=0):(s.top-=r,l=0,r=0)}return{synthetic:c,payload:{evt:t,touch:!0!==e.event.mouse,mouse:!0===e.event.mouse,position:s,direction:o,isFirst:e.event.isFirst,isFinal:!0===i,duration:Date.now()-e.event.time,distance:{x:a,y:l},offset:{x:n,y:r},delta:{x:s.left-e.event.lastX,y:s.top-e.event.lastY}}}}function destroy$9(t){const e=t.__qtouchpan;void 0!==e&&(void 0!==e.event&&e.end(),cleanEvt(e,"main_mouse"),cleanEvt(e,"main_touch"),cleanEvt(e,"temp"),!0===client.is.firefox&&preventDraggable(t,!1),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchpan)}function configureEvents$3(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&cleanEvt(e,"main_mouse"),!0===i.mouse&&addEvt(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===client.has.touch&&e.modifiers.capture!==i.capture&&(cleanEvt(e,"main_touch"),addEvt(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","notPassiveCapture"]])),e.modifiers=i}function handleEvent(t,e,i){!0===t.modifiers.mouse&&!0===i?stopAndPrevent(e):(!0===t.modifiers.stop&&stop(e),!0===t.modifiers.prevent&&prevent(e))}let uid$2=0;var TouchPan={name:"touch-pan",bind(t,{modifiers:e,value:i}){void 0!==t.__qtouchpan&&(destroy$9(t),t.__qtouchpan_destroyed=!0);const s={uid:"qvtp_"+uid$2++,handler:i,modifiers:{capture:null},direction:getModifierDirections(e),noop:noop,mouseStart(t){shouldStart(t,s)&&leftClick(t)&&(addEvt(s,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),s.start(t,!0))},touchStart(t){if(shouldStart(t,s)){const e=t.target;addEvt(s,"temp",[[e,"touchmove","move","notPassiveCapture"],[e,"touchcancel","end","passiveCapture"],[e,"touchend","end","passiveCapture"]]),s.start(t)}},start(e,i){if(!0===client.is.firefox&&preventDraggable(t,!0),s.lastEvt=e,!0===i||!0===s.modifiers.stop){if(!0!==s.direction.all&&(!0!==i||!0!==s.modifiers.mouseAllDir&&!0!==s.modifiers.mousealldir)){const t=e.type.indexOf("mouse")>-1?new MouseEvent(e.type,e):new TouchEvent(e.type,e);!0===e.defaultPrevented&&prevent(t),!0===e.cancelBubble&&stop(t),Object.assign(t,{qClickOutside:e.qClickOutside,qAnchorHandled:e.qAnchorHandled,qClonedBy:void 0===e.qClonedBy?[s.uid]:e.qClonedBy.concat(s.uid)}),s.initialEvent={target:e.target,event:t}}stop(e)}const{left:o,top:n}=position(e);s.event={x:o,y:n,time:Date.now(),mouse:!0===i,detected:!1,isFirst:!0,isFinal:!1,lastX:o,lastY:n}},move(t){if(void 0===s.event)return;s.lastEvt=t;const e=!0===s.event.mouse,i=()=>{let i;handleEvent(s,t,e),!0!==s.modifiers.preserveCursor&&!0!==s.modifiers.preservecursor&&(i=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),!0===e&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),clearSelection(),s.styleCleanup=(t=>{if(s.styleCleanup=void 0,void 0!==i&&(document.documentElement.style.cursor=i),document.body.classList.remove("non-selectable"),!0===e){const e=()=>{document.body.classList.remove("no-pointer-events--children")};void 0!==t?setTimeout(()=>{e(),t()},50):e()}else void 0!==t&&t()})};if(!0===s.event.detected){!0!==s.event.isFirst&&handleEvent(s,t,s.event.mouse);const{payload:e,synthetic:o}=getChanges(t,s,!1);return void(void 0!==e&&(!1===s.handler(e)?s.end(t):(void 0===s.styleCleanup&&!0===s.event.isFirst&&i(),s.event.lastX=e.position.left,s.event.lastY=e.position.top,s.event.lastDir=!0===o?void 0:e.direction,s.event.isFirst=!1)))}if(!0===s.direction.all||!0===e&&(!0===s.modifiers.mouseAllDir||!0===s.modifiers.mousealldir))return i(),s.event.detected=!0,void s.move(t);const o=position(t),n=o.left-s.event.x,r=o.top-s.event.y,a=Math.abs(n),l=Math.abs(r);a!==l&&(!0===s.direction.horizontal&&a>l||!0===s.direction.vertical&&a0||!0===s.direction.left&&a>l&&n<0||!0===s.direction.right&&a>l&&n>0?(s.event.detected=!0,s.move(t)):s.end(t,!0))},end(e,i){if(void 0!==s.event){if(cleanEvt(s,"temp"),!0===client.is.firefox&&preventDraggable(t,!1),!0===i)void 0!==s.styleCleanup&&s.styleCleanup(),!0!==s.event.detected&&void 0!==s.initialEvent&&s.initialEvent.target.dispatchEvent(s.initialEvent.event);else if(!0===s.event.detected){!0===s.event.isFirst&&s.handler(getChanges(void 0===e?s.lastEvt:e,s).payload);const{payload:t}=getChanges(void 0===e?s.lastEvt:e,s,!0),i=()=>{s.handler(t)};void 0!==s.styleCleanup?s.styleCleanup(i):i()}s.event=void 0,s.initialEvent=void 0,s.lastEvt=void 0}}};t.__qtouchpan=s,configureEvents$3(t,s,e)},update(t,{modifiers:e,value:i,oldValue:s}){const o=t.__qtouchpan;void 0!==o&&(s!==i&&("function"!=typeof i&&o.end(),o.handler=i),!0!==isDeepEqual(o.modifiers,e)&&(configureEvents$3(t,o,e),o.direction=getModifierDirections(e)))},unbind(t){void 0===t.__qtouchpan_destroyed?destroy$9(t):delete t.__qtouchpan_destroyed}};const markerPrefixClass="q-slider__marker-labels",defaultMarkerConvertFn=t=>({value:t}),keyCodes$3=[34,37,40,33,39,38],SliderMixin={mixins:[DarkMixin,FormMixin],directives:{TouchPan:TouchPan},props:{min:{type:Number,default:0},max:{type:Number,default:100},innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:t=>t>=0},snap:Boolean,vertical:Boolean,reverse:Boolean,hideSelection:Boolean,color:String,markerLabelsClass:String,label:Boolean,labelColor:String,labelTextColor:String,labelAlways:Boolean,switchLabelSide:Boolean,markers:[Boolean,Number],markerLabels:[Boolean,Array,Object,Function],switchMarkerLabelsSide:Boolean,trackImg:String,trackColor:String,innerTrackImg:String,innerTrackColor:String,selectionColor:String,selectionImg:String,thumbSize:{type:String,default:"20px"},trackSize:{type:String,default:"4px"},disable:Boolean,readonly:Boolean,dense:Boolean,tabindex:[String,Number],thumbColor:String,thumbPath:{type:String,default:"M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"}},data:()=>({active:!1,preventFocus:!1,focus:!1,dragging:void 0}),computed:{axis(){return!0===this.vertical?"--v":"--h"},labelSide(){return"-"+(!0===this.switchLabelSide?"switched":"standard")},isReversed(){return!0===this.vertical?!0===this.reverse:this.reverse!==(!0===this.$q.lang.rtl)},computedInnerMin(){return this.__getInnerMin()},computedInnerMax(){return this.__getInnerMax()},editable(){return!0!==this.disable&&!0!==this.readonly&&this.computedInnerMin<=this.computedInnerMax},computedDecimals(){return(String(this.step).trim("0").split(".")[1]||"").length},computedStep(){return 0===this.step?1:this.step},computedTabindex(){return!0===this.editable?this.tabindex||0:-1},trackLen(){return this.max-this.min},innerBarLen(){return this.computedInnerMax-this.computedInnerMin},innerMinRatio(){return this.__convertModelToRatio(this.computedInnerMin)},innerMaxRatio(){return this.__convertModelToRatio(this.computedInnerMax)},positionProp(){return!0===this.vertical?!0===this.isReversed?"bottom":"top":!0===this.isReversed?"right":"left"},sizeProp(){return!0===this.vertical?"height":"width"},thicknessProp(){return!0===this.vertical?"width":"height"},orientation(){return!0===this.vertical?"vertical":"horizontal"},attributes(){const t={role:"slider","aria-valuemin":this.computedInnerMin,"aria-valuemax":this.computedInnerMax,"aria-orientation":this.orientation,"data-step":this.step};return!0===this.disable?t["aria-disabled"]="true":!0===this.readonly&&(t["aria-readonly"]="true"),t},classes(){return`q-slider q-slider${this.axis} q-slider--${!0===this.active?"":"in"}active inline no-wrap `+(!0===this.vertical?"row":"column")+(!0===this.disable?" disabled":" q-slider--enabled"+(!0===this.editable?" q-slider--editable":""))+("both"===this.focus?" q-slider--focus":"")+(this.label||!0===this.labelAlways?" q-slider--label":"")+(!0===this.labelAlways?" q-slider--label-always":"")+` q-slider--${this.darkSuffix}`+(!0===this.dense?" q-slider--dense q-slider--dense"+this.axis:"")+" q-key-group-navigation--ignore-key"},selectionBarClass(){const t=this.selectionColor||this.color;return"q-slider__selection absolute"+(void 0!==t?` text-${t}`:"")},markerClass(){return this.__getAxisClass("markers")+" absolute overflow-hidden"},trackContainerClass(){return this.__getAxisClass("track-container")},pinClass(){return this.__getPositionClass("pin")},labelClass(){return this.__getPositionClass("label")},textContainerClass(){return this.__getPositionClass("text-container")},markerLabelsContainerClass(){return this.__getPositionClass("marker-labels-container")+(void 0!==this.markerLabelsClass?` ${this.markerLabelsClass}`:"")},trackClass(){return"q-slider__track relative-position no-outline"+(void 0!==this.trackColor?` bg-${this.trackColor}`:"")},trackStyle(){const t={[this.thicknessProp]:this.trackSize};return void 0!==this.trackImg&&(t.backgroundImage=`url(${this.trackImg}) !important`),t},innerBarClass(){return"q-slider__inner absolute"+(void 0!==this.innerTrackColor?` bg-${this.innerTrackColor}`:"")},innerBarStyle(){const t={[this.positionProp]:`${100*this.innerMinRatio}%`,[this.sizeProp]:`${100*(this.innerMaxRatio-this.innerMinRatio)}%`};return void 0!==this.innerTrackImg&&(t.backgroundImage=`url(${this.innerTrackImg}) !important`),t},markerStep(){return!0===isNumber(this.markers)?this.markers:this.computedStep},markerTicks(){const t=[],e=this.markerStep;let i=this.min;do{t.push(i),i+=e}while(i({index:e,value:t.value,label:t.label||t.value,classes:this.markerLabelClass+(void 0!==t.classes?" "+t.classes:""),style:{...this.__getMarkerLabelStyle(t.value),...t.style||{}}}))},markerScope(){return{markerList:this.markerLabelsList,markerMap:this.markerLabelsMap,classes:this.markerLabelClass,getStyle:this.__getMarkerLabelStyle}},markerStyle(){if(0!==this.innerBarLen){const t=100*this.markerStep/this.innerBarLen;return{...this.innerBarStyle,backgroundSize:!0===this.vertical?`2px ${t}%`:`${t}% 2px`}}return null},markerLabelsMap(){if(!1===this.markerLabels)return null;const t={};return this.markerLabelsList.forEach(e=>{t[e.value]=e}),t},panDirectives(){return!0===this.editable?[{name:"touch-pan",value:this.__onPan,modifiers:{[this.orientation]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}}]:null},getKeyOffset(){const t=[33,34],e=!0===this.vertical&&!0===this.reverse?-this.computedStep:this.computedStep,i=!0===this.vertical?[33,38,this.$q.lang.rtl===this.reverse?37:39]:[34,40,this.$q.lang.rtl===this.reverse?37:39];return s=>e*(t.includes(s)?10:1)*(i.includes(s)?-1:1)}},methods:{__getInnerMin(){return!0===isNaN(this.innerMin)||this.innerMinthis.max?this.max:this.innerMax},__getPositionClass(t){const e="q-slider__"+t;return`${e} ${e}${this.axis} ${e}${this.axis}${this.labelSide}`},__getAxisClass(t){const e="q-slider__"+t;return`${e} ${e}${this.axis}`},__convertRatioToModel(t){let e=this.min+t*(this.max-this.min);if(this.step>0){const t=(e-this.min)%this.step;e+=(Math.abs(t)>=this.step/2?(t<0?-1:1)*this.step:0)-t}return this.computedDecimals>0&&(e=parseFloat(e.toFixed(this.computedDecimals))),between(e,this.computedInnerMin,this.computedInnerMax)},__convertModelToRatio(t){return 0===this.trackLen?0:between((t-this.min)/this.trackLen,0,1)},__getDraggingRatio(t,e){const i=position(t),s=!0===this.vertical?between((i.top-e.top)/e.height,0,1):between((i.left-e.left)/e.width,0,1);return between(!0===this.isReversed?1-s:s,this.innerMinRatio,this.innerMaxRatio)},__getMarkerList(t){if(!1===t)return null;if(!0===t)return this.markerTicks.map(defaultMarkerConvertFn);if("function"==typeof t)return this.markerTicks.map(e=>{const i=t(e);return!0===isObject(i)?{...i,value:e}:{value:e,label:i}});const e=({value:t})=>t>=this.min&&t<=this.max;return!0===Array.isArray(t)?t.map(t=>!0===isObject(t)?t:{value:t}).filter(e):Object.keys(t).map(e=>{const i=t[e],s=Number(e);return!0===isObject(i)?{...i,value:s}:{value:s,label:i}}).filter(e)},__getMarkerLabelStyle(t){return{[this.positionProp]:`${100*(t-this.min)/this.trackLen}%`}},__getMarkerLabelsContent(t){if(void 0!==this.$scopedSlots["marker-label-group"])return this.$scopedSlots["marker-label-group"](this.markerScope);const e=this.$scopedSlots["marker-label"];return void 0!==e?this.markerLabelsList.map(t=>e({marker:t,...this.markerScope})):this.markerLabelsList.map(e=>t("div",{key:e.value,style:e.style,class:e.classes},e.label))},__onPan(t){!0===t.isFinal?(void 0!==this.dragging&&(this.__updatePosition(t.evt),!0===t.touch&&this.__updateValue(!0),this.dragging=void 0,this.$emit("pan","end")),this.active=!1,this.focus=!1):!0===t.isFirst?(this.dragging=this.__getDragging(t.evt),this.__updatePosition(t.evt),this.__updateValue(),this.active=!0,this.$emit("pan","start")):(this.__updatePosition(t.evt),this.__updateValue())},__onBlur(){this.focus=!1},__onActivate(t){this.__updatePosition(t,this.__getDragging(t)),this.__updateValue(),this.preventFocus=!0,this.active=!0,document.addEventListener("mouseup",this.__onDeactivate,!0)},__onDeactivate(){this.preventFocus=!1,this.active=!1,this.__updateValue(!0),this.__onBlur(),document.removeEventListener("mouseup",this.__onDeactivate,!0)},__onMobileClick(t){this.__updatePosition(t,this.__getDragging(t)),this.__updateValue(!0)},__onKeyup(t){keyCodes$3.includes(t.keyCode)&&this.__updateValue(!0)},__getTextContainerStyle(t){if(!0===this.vertical)return null;const e=this.$q.lang.rtl!==this.reverse?1-t:t;return{transform:`translateX(calc(${2*e-1} * ${this.thumbSize} / 2 + ${50-100*e}%))`}},__getThumb(t,e){const i=[t("svg",{class:"q-slider__thumb-shape absolute-full",attrs:{viewBox:"0 0 20 20","aria-hidden":"true"}},[t("path",{attrs:{d:this.thumbPath}})]),t("div",{class:"q-slider__focus-ring fit"})];return!0!==this.label&&!0!==this.labelAlways||(i.push(t("div",{class:this.pinClass+" absolute fit no-pointer-events"+e.pinColor},[t("div",{class:this.labelClass,style:{minWidth:this.thumbSize}},[t("div",{class:this.textContainerClass,style:e.textContainerStyle},[t("span",{class:e.textClass},e.label)])])])),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(i,"push")),t("div",{class:e.classes,style:e.style,...e.nodeData},i)},__getContent(t,e){const i=[];"transparent"!==this.innerTrackColor&&i.push(t("div",{key:"inner",class:this.innerBarClass,style:this.innerBarStyle})),"transparent"!==this.selectionColor&&i.push(t("div",{key:"selection",class:this.selectionBarClass,style:this.selectionBarStyle})),!1!==this.markers&&i.push(t("div",{key:"marker",class:this.markerClass,style:this.markerStyle})),e(i);const s=[t("div",{key:"trackC",class:this.trackContainerClass,attrs:this.trackContainerAttrs,on:this.trackContainerEvents,directives:this.panDirectives},[t("div",{class:this.trackClass,style:this.trackStyle},i)])];if(!1!==this.markerLabels){s[!0===this.switchMarkerLabelsSide?"unshift":"push"](t("div",{key:"markerL",class:this.markerLabelsContainerClass},this.__getMarkerLabelsContent(t)))}return s}},beforeDestroy(){document.removeEventListener("mouseup",this.__onDeactivate,!0)}};var QSlider=Vue.extend({name:"QSlider",mixins:[SliderMixin],props:{value:{required:!0,default:null,validator:t=>"number"==typeof t||null===t},labelValue:[String,Number]},data(){return{model:null===this.value?this.__getInnerMin():between(this.value,this.min,this.max),curRatio:0}},computed:{modelRatio(){return this.__convertModelToRatio(this.model)},ratio(){return!0===this.active?this.curRatio:this.modelRatio},selectionBarStyle(){const t=this.innerMinRatio,e={[this.positionProp]:`${100*t}%`,[this.sizeProp]:`${100*(between(this.ratio,t,this.innerMaxRatio)-t)}%`};return void 0!==this.selectionImg&&(e.backgroundImage=`url(${this.selectionImg}) !important`),e},thumbLabel(){return void 0!==this.labelValue?this.labelValue:this.valuethis.max?this.value:this.model},thumbClasses(){const t=this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.valuethis.max?" q-slider__thumb--wrong-value":"")+(!1===this.preventFocus&&!0===this.focus?" q-slider--focus":"")+(void 0!==t?` text-${t}`:"")},thumbStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratio}%`}},thumbPinColor(){return void 0!==this.labelColor?` text-${this.labelColor}`:""},thumbTextContainerStyle(){return this.__getTextContainerStyle(this.ratio)},thumbTextClass(){return"q-slider__text"+(void 0!==this.labelTextColor?` text-${this.labelTextColor}`:"")},trackContainerAttrs(){return!0!==this.$q.platform.is.mobile?{tabindex:this.computedTabindex}:void 0},trackContainerEvents(){return!0!==this.editable?{}:!0===this.$q.platform.is.mobile?{click:this.__onMobileClick}:{mousedown:this.__onActivate,focus:this.__onFocus,blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}},modelUpdate(){return[this.value,this.min,this.max,this.innerMin,this.innerMax].join("#")}},watch:{modelUpdate(){this.model=null===this.value?this.computedInnerMin:between(this.value,this.min,this.max)}},methods:{__updateValue(t){this.model!==this.value&&this.$emit("input",this.model),!0===t&&this.$emit("change",this.model)},__getDragging(){return this.$el.getBoundingClientRect()},__updatePosition(t,e=this.dragging){const i=this.__getDraggingRatio(t,e);this.model=this.__convertRatioToModel(i),this.curRatio=!0!==this.snap||0===this.computedStep?between(i,this.innerMinRatio,this.innerMaxRatio):this.__convertModelToRatio(this.model)},__onFocus(){this.focus=!0},__onKeydown(t){keyCodes$3.includes(t.keyCode)&&(this.focus=!0,stopAndPrevent(t),this.model=between(parseFloat((this.model+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),this.computedInnerMin,this.computedInnerMax),this.__updateValue())}},render(t){const e=this.__getContent(t,e=>{e.push(this.__getThumb(t,{pinColor:this.thumbPinColor,textContainerStyle:this.thumbTextContainerStyle,textClass:this.thumbTextClass,label:this.thumbLabel,classes:this.thumbClasses,style:this.thumbStyle,nodeData:{}}))});return t("div",{class:this.classes+(null===this.value?" q-slider--no-value":""),attrs:{...this.attributes,"aria-valuenow":this.value}},e)}}),CanRenderMixin={data:()=>({canRender:!onSSR}),mounted(){!1===this.canRender&&(this.canRender=!0)}},QResizeObserver=Vue.extend({name:"QResizeObserver",mixins:[CanRenderMixin],props:{debounce:{type:[String,Number],default:100}},data(){return!0===this.hasObserver?{}:{url:!0===this.$q.platform.is.ie?null:"about:blank"}},methods:{trigger(t){!0===t||0===this.debounce||"0"===this.debounce?this.__emit():null===this.timer&&(this.timer=setTimeout(this.__emit,this.debounce))},__emit(){if(null!==this.timer&&(clearTimeout(this.timer),this.timer=null),!this.$el||!this.$el.parentNode)return;const t=this.$el.parentNode,e={width:t.offsetWidth,height:t.offsetHeight};e.width===this.size.width&&e.height===this.size.height||(this.size=e,this.$emit("resize",this.size))},__cleanup(){void 0!==this.curDocView&&(void 0!==this.curDocView.removeEventListener&&this.curDocView.removeEventListener("resize",this.trigger,listenOpts.passive),this.curDocView=void 0)},__onObjLoad(){this.__cleanup(),this.$el.contentDocument&&(this.curDocView=this.$el.contentDocument.defaultView,this.curDocView.addEventListener("resize",this.trigger,listenOpts.passive)),this.__emit()}},render(t){if(!1!==this.canRender&&!0!==this.hasObserver)return t("object",{key:"load",style:this.style,attrs:{tabindex:-1,type:"text/html",data:this.url,"aria-hidden":"true"},on:cache(this,"load",{load:this.__onObjLoad})})},beforeCreate(){this.size={width:-1,height:-1},!0!==isSSR&&(this.hasObserver="undefined"!=typeof ResizeObserver,!0!==this.hasObserver&&(this.style=`${this.$q.platform.is.ie?"visibility:hidden;":""}display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;`))},mounted(){if(this.timer=null,!0===this.hasObserver)return this.observer=new ResizeObserver(this.trigger),this.observer.observe(this.$el.parentNode),void this.__emit();!0===this.$q.platform.is.ie?(this.url="about:blank",this.__emit()):this.__onObjLoad()},beforeDestroy(){clearTimeout(this.timer),!0!==this.hasObserver?this.__cleanup():void 0!==this.observer&&this.$el.parentNode&&this.observer.unobserve(this.$el.parentNode)}});function injectProp(t,e,i,s){return Object.defineProperty(t,e,{get:i,set:s,enumerable:!0}),t}function getIndicatorClass(t,e,i){const s=!0===i?["left","right"]:["top","bottom"];return`absolute-${!0===e?s[0]:s[1]}${t?` text-${t}`:""}`}const alignValues$1=["left","center","right","justify"],getDefaultBestScore=()=>({matchedLen:0,queryDiff:9999,hrefLen:0,exact:!1,redirected:!0});function hasQueryIncluded(t,e){for(const i in t)if(t[i]!==e[i])return!1;return!0}var QTabs=Vue.extend({name:"QTabs",mixins:[TimeoutMixin,ListenersMixin],provide(){return{$tabs:this}},props:{value:[Number,String],align:{type:String,default:"center",validator:t=>alignValues$1.includes(t)},breakpoint:{type:[String,Number],default:600},vertical:Boolean,shrink:Boolean,stretch:Boolean,activeClass:String,activeColor:String,activeBgColor:String,indicatorColor:String,leftIcon:String,rightIcon:String,outsideArrows:Boolean,mobileArrows:Boolean,switchIndicator:Boolean,narrowIndicator:Boolean,inlineLabel:Boolean,noCaps:Boolean,dense:Boolean,contentClass:String},data(){return{scrollable:!1,leftArrow:!0,rightArrow:!1,justify:!1,tabNameList:[],currentModel:this.value,hasFocus:!1,avoidRouteWatcher:!1}},watch:{isRTL(){this.__localUpdateArrows()},value(t){this.__updateModel({name:t,setCurrent:!0,skipEmit:!0})},outsideArrows(){this.__recalculateScroll()},arrowsEnabled(t){this.__localUpdateArrows=!0===t?this.__updateArrowsFn:noop,this.__recalculateScroll()}},computed:{tabProps(){return{activeClass:this.activeClass,activeColor:this.activeColor,activeBgColor:this.activeBgColor,indicatorClass:getIndicatorClass(this.indicatorColor,this.switchIndicator,this.vertical),narrowIndicator:this.narrowIndicator,inlineLabel:this.inlineLabel,noCaps:this.noCaps}},hasActiveTab(){return this.tabNameList.some(t=>t.name===this.currentModel)},arrowsEnabled(){return!0===this.$q.platform.is.desktop||!0===this.mobileArrows},alignClass(){return`q-tabs__content--align-${!0===this.scrollable?"left":!0===this.justify?"justify":this.align}`},classes(){return"q-tabs row no-wrap items-center"+` q-tabs--${!0===this.scrollable?"":"not-"}scrollable`+` q-tabs--${!0===this.vertical?"vertical":"horizontal"}`+` q-tabs__arrows--${!0===this.arrowsEnabled&&!0===this.outsideArrows?"outside":"inside"}`+(!0===this.dense?" q-tabs--dense":"")+(!0===this.shrink?" col-shrink":"")+(!0===this.stretch?" self-stretch":"")},innerClass(){return"q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position "+this.alignClass+(void 0!==this.contentClass?` ${this.contentClass}`:"")+(!0===this.$q.platform.is.mobile?" scroll":"")},domProps(){return!0===this.vertical?{container:"height",content:"offsetHeight",scroll:"scrollHeight"}:{container:"width",content:"offsetWidth",scroll:"scrollWidth"}},isRTL(){return!0!==this.vertical&&!0===this.$q.lang.rtl},rtlPosCorrection(){return!1===rtlHasScrollBug()&&!0===this.isRTL},posFn(){return!0===this.rtlPosCorrection?{get:t=>Math.abs(t.scrollLeft),set:(t,e)=>{t.scrollLeft=-e}}:!0===this.vertical?{get:t=>t.scrollTop,set:(t,e)=>{t.scrollTop=e}}:{get:t=>t.scrollLeft,set:(t,e)=>{t.scrollLeft=e}}},onEvents(){return{input:stop,...this.qListeners,focusin:this.__onFocusin,focusout:this.__onFocusout}}},methods:{__updateModel({name:t,setCurrent:e,skipEmit:i}){this.currentModel!==t&&(!0!==i&&void 0!==this.qListeners.input&&this.$emit("input",t),!0!==e&&void 0!==this.qListeners.input||(this.__animate(this.currentModel,t),this.currentModel=t))},__recalculateScroll(){this.__registerScrollTick(()=>{this.__updateContainer({width:this.$el.offsetWidth,height:this.$el.offsetHeight})})},__updateContainer(t){if(void 0===this.domProps||!this.$refs.content)return;const e=t[this.domProps.container],i=Math.min(this.$refs.content[this.domProps.scroll],Array.prototype.reduce.call(this.$refs.content.children,(t,e)=>t+(e[this.domProps.content]||0),0)),s=e>0&&i>e;this.scrollable!==s&&(this.scrollable=s),!0===s&&this.__registerUpdateArrowsTick(this.__localUpdateArrows);const o=ee.name===t):null,s=void 0!==e&&null!==e&&""!==e?this.tabVmList.find(t=>t.name===e):null;if(i&&s){const t=i.$refs.tabIndicator,e=s.$refs.tabIndicator;clearTimeout(this.animateTimer),t.style.transition="none",t.style.transform="none",e.style.transition="none",e.style.transform="none";const o=t.getBoundingClientRect(),n=e.getBoundingClientRect();e.style.transform=!0===this.vertical?`translate3d(0,${o.top-n.top}px,0) scale3d(1,${n.height?o.height/n.height:1},1)`:`translate3d(${o.left-n.left}px,0,0) scale3d(${n.width?o.width/n.width:1},1,1)`,this.__registerAnimateTick(()=>{this.animateTimer=setTimeout(()=>{e.style.transition="transform .25s cubic-bezier(.4, 0, .2, 1)",e.style.transform="none"},70)})}s&&!0===this.scrollable&&this.__scrollToTabEl(s.$el)},__scrollToTabEl(t){const e=this.$refs.content,{left:i,width:s,top:o,height:n}=e.getBoundingClientRect(),r=t.getBoundingClientRect();let a=!0===this.vertical?r.top-o:r.left-i;if(a<0)return e[!0===this.vertical?"scrollTop":"scrollLeft"]+=Math.floor(a),void this.__localUpdateArrows();(a+=!0===this.vertical?r.height-n:r.width-s)>0&&(e[!0===this.vertical?"scrollTop":"scrollLeft"]+=Math.ceil(a),this.__localUpdateArrows())},__updateArrowsFn(){const t=this.$refs.content;if(null!==t){const e=t.getBoundingClientRect(),i=!0===this.vertical?t.scrollTop:Math.abs(t.scrollLeft);!0===this.isRTL?(this.leftArrow=Math.ceil(i+e.width)0):(this.leftArrow=i>0,this.rightArrow=!0===this.vertical?Math.ceil(i+e.height){!0===this.__scrollTowards(t)&&this.__stopAnimScroll()},5)},__scrollToStart(){this.__animScrollTo(!0===this.rtlPosCorrection?Number.MAX_SAFE_INTEGER:0)},__scrollToEnd(){this.__animScrollTo(!0===this.rtlPosCorrection?0:Number.MAX_SAFE_INTEGER)},__stopAnimScroll(){clearInterval(this.scrollTimer)},__onKbdNavigate(t,e){const i=Array.prototype.filter.call(this.$refs.content.children,t=>t===e||t.matches&&!0===t.matches(".q-tab.q-focusable")),s=i.length;if(0===s)return;if(36===t)return!0!==i[0].contains(document.activeElement)&&(this.__scrollToTabEl(i[0]),i[0].focus(),!0);if(35===t)return!0!==i[s-1].contains(document.activeElement)&&(this.__scrollToTabEl(i[s-1]),i[s-1].focus(),!0);const o=t===(!0===this.vertical?38:37),n=t===(!0===this.vertical?40:39),r=!0===o?-1:!0===n?1:void 0;if(void 0!==r){const t=!0===this.isRTL?-1:1,o=i.indexOf(e)+r*t;return!(o<0||o>=s||!0===i[o].contains(document.activeElement))&&(this.__scrollToTabEl(i[o]),i[o].focus({preventScroll:!0}),!0)}},__scrollTowards(t){const e=this.$refs.content,{get:i,set:s}=this.posFn;let o=!1,n=i(e);const r=t=t)&&(o=!0,n=t),s(e,n),this.__localUpdateArrows(),o},__updateActiveRoute(){let t=null,e={matchedLen:0,queryDiff:9999,hrefLen:0,exact:!1,redirected:!0};const i=this.tabVmList.filter(t=>!0===t.hasRouterLink),s=i.length,{query:o}=this.$route,n=Object.keys(o).length;for(let r=0;re.matchedLen?(t=s.name,e=g):g.matchedLen===e.matchedLen&&(g.queryDiffe.hrefLen&&(t=s.name,e=g))}null===t&&!0===this.tabVmList.some(t=>void 0===t.hasRouterLink&&t.name===this.currentModel)||this.__updateModel({name:t,setCurrent:!0})},__onFocusin(t){if(this.__removeFocusTimeout(),!0!==this.hasFocus&&this.$el&&t.target&&"function"==typeof t.target.closest){const e=t.target.closest(".q-tab");e&&!0===this.$el.contains(e)&&(this.hasFocus=!0,!0===this.scrollable&&this.__scrollToTabEl(e))}void 0!==this.qListeners.focusin&&this.$emit("focusin",t)},__onFocusout(t){this.__registerFocusTimeout(()=>{this.hasFocus=!1},30),void 0!==this.qListeners.focusout&&this.$emit("focusout",t)},__verifyRouteModel(){!1===this.avoidRouteWatcher?this.__registerScrollToTabTimeout(this.__updateActiveRoute):this.__removeScrollToTabTimeout()},__watchRoute(){if(void 0===this.unwatchRoute){const t=this.$watch(()=>this.$route.fullPath,this.__verifyRouteModel);this.unwatchRoute=(()=>{t(),this.unwatchRoute=void 0})}},__registerTab(t){this.tabVmList.push(t),this.tabNameList.push(injectProp({},"name",()=>t.name)),this.__recalculateScroll(),void 0===t.hasRouterLink||void 0===this.$route?this.__registerScrollToTabTimeout(()=>{if(!0===this.scrollable){const t=this.currentModel,e=void 0!==t&&null!==t&&""!==t?this.tabVmList.find(e=>e.name===t):null;e&&this.__scrollToTabEl(e.$el)}}):(this.__watchRoute(),!0===t.hasRouterLink&&this.__verifyRouteModel())},__unregisterTab(t){const e=this.tabVmList.indexOf(t);this.tabVmList.splice(e,1),this.tabNameList.splice(e,1),this.__recalculateScroll(),void 0!==this.unwatchRoute&&void 0!==t.hasRouterLink&&(!0===this.tabVmList.every(t=>void 0===t.hasRouterLink)&&this.unwatchRoute(),this.__verifyRouteModel())},__cleanup(){clearTimeout(this.animateTimer),this.__stopAnimScroll(),void 0!==this.unwatchRoute&&this.unwatchRoute()}},created(){this.__useTick("__registerScrollTick"),this.__useTick("__registerUpdateArrowsTick"),this.__useTick("__registerAnimateTick"),this.__useTimeout("__registerFocusTimeout","__removeFocusTimeout"),this.__useTimeout("__registerScrollToTabTimeout","__removeScrollToTabTimeout"),Object.assign(this,{tabVmList:[],__localUpdateArrows:!0===this.arrowsEnabled?this.__updateArrowsFn:noop})},activated(){!0===this.hadRouteWatcher&&this.__watchRoute(),this.__recalculateScroll()},deactivated(){this.hadRouteWatcher=void 0!==this.unwatchRoute,this.__cleanup()},beforeDestroy(){this.__cleanup()},render(t){const e=[t(QResizeObserver,{key:"resize",on:cache(this,"resize",{resize:this.__updateContainer})}),t("div",{key:"scroll",ref:"content",class:this.innerClass,on:!0===this.arrowsEnabled?cache(this,"scroll",{scroll:this.__updateArrowsFn}):void 0},slot(this,"default"))];return!0===this.arrowsEnabled&&e.push(t(QIcon,{key:"onS",class:"q-tabs__arrow q-tabs__arrow--start absolute q-tab__icon"+(!0===this.leftArrow?"":" q-tabs__arrow--faded"),props:{name:this.leftIcon||this.$q.iconSet.tabs[!0===this.vertical?"up":"left"]},on:cache(this,"onS",{"&mousedown":this.__scrollToStart,"&touchstart":this.__scrollToStart,"&mouseup":this.__stopAnimScroll,"&mouseleave":this.__stopAnimScroll,"&touchend":this.__stopAnimScroll})}),t(QIcon,{key:"onE",class:"q-tabs__arrow q-tabs__arrow--end absolute q-tab__icon"+(!0===this.rightArrow?"":" q-tabs__arrow--faded"),props:{name:this.rightIcon||this.$q.iconSet.tabs[!0===this.vertical?"down":"right"]},on:cache(this,"onE",{"&mousedown":this.__scrollToEnd,"&touchstart":this.__scrollToEnd,"&mouseup":this.__stopAnimScroll,"&mouseleave":this.__stopAnimScroll,"&touchend":this.__stopAnimScroll})})),t("div",{class:this.classes,on:this.onEvents,attrs:{role:"tablist"}},e)}});let id$1=0;var QTab=Vue.extend({name:"QTab",mixins:[RippleMixin,ListenersMixin],inject:{$tabs:{default(){console.error("QTab/QRouteTab components need to be child of QTabs")}}},props:{icon:String,label:[Number,String],alert:[Boolean,String],alertIcon:String,name:{type:[Number,String],default:()=>`t_${id$1++}`},noCaps:Boolean,tabindex:[String,Number],disable:Boolean,contentClass:String},computed:{isActive(){return this.$tabs.currentModel===this.name},classes(){return"q-tab relative-position self-stretch flex flex-center text-center"+(!0===this.isActive?" q-tab--active"+(this.$tabs.tabProps.activeClass?" "+this.$tabs.tabProps.activeClass:"")+(this.$tabs.tabProps.activeColor?` text-${this.$tabs.tabProps.activeColor}`:"")+(this.$tabs.tabProps.activeBgColor?` bg-${this.$tabs.tabProps.activeBgColor}`:""):" q-tab--inactive")+(this.icon&&this.label&&!1===this.$tabs.tabProps.inlineLabel?" q-tab--full":"")+(!0===this.noCaps||!0===this.$tabs.tabProps.noCaps?" q-tab--no-caps":"")+(!0===this.disable?" disabled":" q-focusable q-hoverable cursor-pointer")+(void 0!==this.hasRouterLinkProps?this.linkClass:"")},innerClass(){return"q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable q-key-group-navigation--ignore-key "+(!0===this.$tabs.tabProps.inlineLabel?"row no-wrap q-tab__content--inline":"column")+(void 0!==this.contentClass?` ${this.contentClass}`:"")},computedTabIndex(){return!0===this.disable||!0===this.$tabs.hasFocus||!1===this.isActive&&!0===this.$tabs.hasActiveTab?-1:this.tabindex||0},computedRipple(){return!1!==this.ripple&&Object.assign({keyCodes:[13,32],early:!0},!0===this.ripple?{}:this.ripple)},onEvents(){return{input:stop,...this.qListeners,click:this.__onClick,keydown:this.__onKeydown}},attrs(){const t={...this.linkAttrs,tabindex:this.computedTabIndex,role:"tab","aria-selected":!0===this.isActive?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{__onClick(t,e){if(!0!==e&&void 0!==this.$refs.blurTarget&&this.$refs.blurTarget.focus({preventScroll:!0}),!0!==this.disable){if(void 0===this.hasRouterLinkProps)return this.$tabs.__updateModel({name:this.name}),void(void 0!==this.qListeners.click&&this.$emit("click",t));if(!0===this.hasRouterLink){const e=(e,i,s)=>{const{to:o,replace:n,append:r,returnRouterError:a}=!1===t.navigate?{to:e,replace:i,append:s}:e||{};let l;const h=void 0===o||r===this.append&&!0===isDeepEqual(o,this.to)?this.$tabs.avoidRouteWatcher=uid$3():null;return this.__navigateToRouterLink(t,{to:o,replace:n,append:r,returnRouterError:!0}).catch(t=>{l=t}).then(t=>(h===this.$tabs.avoidRouteWatcher&&(this.$tabs.avoidRouteWatcher=!1,void 0!==l&&!0!==l.message.startsWith("Avoided redundant navigation")||this.$tabs.__updateModel({name:this.name})),void 0!==l&&!0===a?Promise.reject(l):t))};return void 0!==this.qListeners.click&&this.$emit("click",t,e),!1===t.navigate&&t.preventDefault(),void(!0!==t.defaultPrevented&&e())}void 0!==this.qListeners.click&&this.$emit("click",t)}else!0===this.hasRouterLink&&stopAndPrevent(t)},__onKeydown(t){isKeyCode(t,[13,32])?this.__onClick(t,!0):!0!==shouldIgnoreKey(t)&&t.keyCode>=35&&t.keyCode<=40&&!0!==t.altKey&&!0!==t.metaKey&&!0===this.$tabs.__onKbdNavigate(t.keyCode,this.$el)&&stopAndPrevent(t),void 0!==this.qListeners.keydown&&this.$emit("keydown",t)},__getContent(t){const e=this.$tabs.tabProps.narrowIndicator,i=[],s=t("div",{ref:"tabIndicator",staticClass:"q-tab__indicator",class:this.$tabs.tabProps.indicatorClass});void 0!==this.icon&&i.push(t(QIcon,{staticClass:"q-tab__icon",props:{name:this.icon}})),void 0!==this.label&&i.push(t("div",{staticClass:"q-tab__label"},[this.label])),!1!==this.alert&&i.push(void 0!==this.alertIcon?t(QIcon,{staticClass:"q-tab__alert-icon",props:{color:!0!==this.alert?this.alert:void 0,name:this.alertIcon}}):t("div",{staticClass:"q-tab__alert",class:!0!==this.alert?`text-${this.alert}`:null})),!0===e&&i.push(s);const o=[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"}),t("div",{class:this.innerClass},mergeSlot(i,this,"default"))];return!1===e&&o.push(s),o},__renderTab(t,e){return t(e,{class:this.classes,attrs:this.attrs,on:this.onEvents,directives:!1===this.ripple||!0===this.disable?null:[{name:"ripple",value:this.computedRipple}]},this.__getContent(t))}},mounted(){this.$tabs.__registerTab(this)},beforeDestroy(){this.$tabs.__unregisterTab(this)},render(t){return this.__renderTab(t,"div")}}),QTabPanels=Vue.extend({name:"QTabPanels",mixins:[DarkMixin,PanelParentMixin],computed:{classes(){return"q-tab-panels q-panel-parent"+` q-tab-panels--${this.darkSuffix} q-${this.darkSuffix}`}},methods:{__renderPanels(t){return t("div",{class:this.classes,directives:this.panelDirectives,on:{...this.qListeners}},this.__getPanelContent(t))}}});const attrs$4={role:"tabpanel"};var QTabPanel=Vue.extend({name:"QTabPanel",mixins:[PanelChildMixin],render(t){return t("div",{staticClass:"q-tab-panel",attrs:attrs$4,on:{...this.qListeners}},slot(this,"default"))}});const palette=["rgb(255,204,204)","rgb(255,230,204)","rgb(255,255,204)","rgb(204,255,204)","rgb(204,255,230)","rgb(204,255,255)","rgb(204,230,255)","rgb(204,204,255)","rgb(230,204,255)","rgb(255,204,255)","rgb(255,153,153)","rgb(255,204,153)","rgb(255,255,153)","rgb(153,255,153)","rgb(153,255,204)","rgb(153,255,255)","rgb(153,204,255)","rgb(153,153,255)","rgb(204,153,255)","rgb(255,153,255)","rgb(255,102,102)","rgb(255,179,102)","rgb(255,255,102)","rgb(102,255,102)","rgb(102,255,179)","rgb(102,255,255)","rgb(102,179,255)","rgb(102,102,255)","rgb(179,102,255)","rgb(255,102,255)","rgb(255,51,51)","rgb(255,153,51)","rgb(255,255,51)","rgb(51,255,51)","rgb(51,255,153)","rgb(51,255,255)","rgb(51,153,255)","rgb(51,51,255)","rgb(153,51,255)","rgb(255,51,255)","rgb(255,0,0)","rgb(255,128,0)","rgb(255,255,0)","rgb(0,255,0)","rgb(0,255,128)","rgb(0,255,255)","rgb(0,128,255)","rgb(0,0,255)","rgb(128,0,255)","rgb(255,0,255)","rgb(245,0,0)","rgb(245,123,0)","rgb(245,245,0)","rgb(0,245,0)","rgb(0,245,123)","rgb(0,245,245)","rgb(0,123,245)","rgb(0,0,245)","rgb(123,0,245)","rgb(245,0,245)","rgb(214,0,0)","rgb(214,108,0)","rgb(214,214,0)","rgb(0,214,0)","rgb(0,214,108)","rgb(0,214,214)","rgb(0,108,214)","rgb(0,0,214)","rgb(108,0,214)","rgb(214,0,214)","rgb(163,0,0)","rgb(163,82,0)","rgb(163,163,0)","rgb(0,163,0)","rgb(0,163,82)","rgb(0,163,163)","rgb(0,82,163)","rgb(0,0,163)","rgb(82,0,163)","rgb(163,0,163)","rgb(92,0,0)","rgb(92,46,0)","rgb(92,92,0)","rgb(0,92,0)","rgb(0,92,46)","rgb(0,92,92)","rgb(0,46,92)","rgb(0,0,92)","rgb(46,0,92)","rgb(92,0,92)","rgb(255,255,255)","rgb(205,205,205)","rgb(178,178,178)","rgb(153,153,153)","rgb(127,127,127)","rgb(102,102,102)","rgb(76,76,76)","rgb(51,51,51)","rgb(25,25,25)","rgb(0,0,0)"],thumbPath="M5 5 h10 v10 h-10 v-10 z",alphaTrackImg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==";var QColor=Vue.extend({name:"QColor",mixins:[ListenersMixin,DarkMixin,FormMixin],directives:{TouchPan:TouchPan},props:{value:String,defaultValue:String,defaultView:{type:String,default:"spectrum",validator:t=>["spectrum","tune","palette"].includes(t)},formatModel:{type:String,default:"auto",validator:t=>["auto","hex","rgb","hexa","rgba"].includes(t)},palette:Array,noHeader:Boolean,noHeaderTabs:Boolean,noFooter:Boolean,square:Boolean,flat:Boolean,bordered:Boolean,disable:Boolean,readonly:Boolean},data(){return{topView:"auto"===this.formatModel?void 0===this.value||null===this.value||""===this.value||this.value.startsWith("#")?"hex":"rgb":this.formatModel.startsWith("hex")?"hex":"rgb",view:this.defaultView,model:this.__parseModel(this.value||this.defaultValue)}},watch:{value(t){const e=this.__parseModel(t||this.defaultValue);e.hex!==this.model.hex&&(this.model=e)},defaultValue(t){if(!this.value&&t){const e=this.__parseModel(t);e.hex!==this.model.hex&&(this.model=e)}}},computed:{editable(){return!0!==this.disable&&!0!==this.readonly},forceHex(){return"auto"===this.formatModel?null:this.formatModel.indexOf("hex")>-1},forceAlpha(){return"auto"===this.formatModel?null:this.formatModel.indexOf("a")>-1},isHex(){return void 0===this.value||null===this.value||""===this.value||this.value.startsWith("#")},isOutputHex(){return null!==this.forceHex?this.forceHex:this.isHex},formAttrs(){return{type:"hidden",name:this.name,value:this.model[!0===this.isOutputHex?"hex":"rgb"]}},hasAlpha(){return null!==this.forceAlpha?this.forceAlpha:void 0!==this.model.a},currentBgColor(){return{backgroundColor:this.model.rgb||"#000"}},headerClass(){return`q-color-picker__header-content--${void 0!==this.model.a&&this.model.a<65||luminosity(this.model)>.4?"light":"dark"}`},spectrumStyle(){return{background:`hsl(${this.model.h},100%,50%)`}},spectrumPointerStyle(){return{top:`${100-this.model.v}%`,[!0===this.$q.lang.rtl?"right":"left"]:`${this.model.s}%`}},computedPalette(){return void 0!==this.palette&&this.palette.length>0?this.palette:palette},classes(){return"q-color-picker"+(!0===this.bordered?" q-color-picker--bordered":"")+(!0===this.square?" q-color-picker--square no-border-radius":"")+(!0===this.flat?" q-color-picker--flat no-shadow":"")+(!0===this.disable?" disabled":"")+` q-color-picker--${this.darkSuffix} q-${this.darkSuffix}`},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0}},created(){this.__spectrumChange=throttle(this.__spectrumChange,20)},render(t){const e=[this.__getContent(t)];return void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),!0!==this.noHeader&&e.unshift(this.__getHeader(t)),!0!==this.noFooter&&e.push(this.__getFooter(t)),t("div",{class:this.classes,attrs:this.attrs,on:{...this.qListeners}},e)},methods:{__getHeader(t){const e=[];return!0!==this.noHeaderTabs&&e.push(t(QTabs,{key:"topVTab",class:"q-color-picker__header-tabs",props:{value:this.topView,dense:!0,align:"justify"},on:cache(this,"topVTab",{input:t=>{this.topView=t}})},[t(QTab,{props:{label:"HEX"+(!0===this.hasAlpha?"A":""),name:"hex",ripple:!1}}),t(QTab,{props:{label:"RGB"+(!0===this.hasAlpha?"A":""),name:"rgb",ripple:!1}})])),e.push(t("div",{staticClass:"q-color-picker__header-banner row flex-center no-wrap"},[t("input",{key:"topIn",staticClass:"fit",domProps:{value:this.model[this.topView]},attrs:!0!==this.editable?{readonly:!0}:null,on:cache(this,"topIn",{input:t=>{this.__updateErrorIcon(!0===this.__onEditorChange(t))},change:stop,blur:t=>{!0===this.__onEditorChange(t,!0)&&this.$forceUpdate(),this.__updateErrorIcon(!1)}})}),t(QIcon,{ref:"errorIcon",staticClass:"q-color-picker__error-icon absolute no-pointer-events",props:{name:this.$q.iconSet.type.negative}})])),t("div",{staticClass:"q-color-picker__header relative-position overflow-hidden"},[t("div",{staticClass:"q-color-picker__header-bg absolute-full"}),t("div",{staticClass:"q-color-picker__header-content",class:this.headerClass,style:this.currentBgColor},e)])},__getContent(t){return t(QTabPanels,{props:{value:this.view,animated:!0}},[t(QTabPanel,{staticClass:"q-color-picker__spectrum-tab overflow-hidden",props:{name:"spectrum"}},this.__getSpectrumTab(t)),t(QTabPanel,{staticClass:"q-pa-md q-color-picker__tune-tab",props:{name:"tune"}},this.__getTuneTab(t)),t(QTabPanel,{staticClass:"q-color-picker__palette-tab",props:{name:"palette"}},this.__getPaletteTab(t))])},__getFooter(t){return t("div",{staticClass:"q-color-picker__footer relative-position overflow-hidden"},[t(QTabs,{key:"ftIn",staticClass:"absolute-full",props:{value:this.view,dense:!0,align:"justify"},on:cache(this,"ftIn",{input:t=>{this.view=t}})},[t(QTab,{props:{icon:this.$q.iconSet.colorPicker.spectrum,name:"spectrum",ripple:!1}}),t(QTab,{props:{icon:this.$q.iconSet.colorPicker.tune,name:"tune",ripple:!1}}),t(QTab,{props:{icon:this.$q.iconSet.colorPicker.palette,name:"palette",ripple:!1}})])])},__getSpectrumTab(t){return[t("div",{key:"spectrT",ref:"spectrum",staticClass:"q-color-picker__spectrum non-selectable relative-position cursor-pointer",style:this.spectrumStyle,class:{readonly:!0!==this.editable},on:!0===this.editable?cache(this,"spectrT",{click:this.__spectrumClick,mousedown:this.__activate}):null,directives:!0===this.editable?cache(this,"spectrDir",[{name:"touch-pan",modifiers:{prevent:!0,stop:!0,mouse:!0},value:this.__spectrumPan}]):null},[t("div",{style:{paddingBottom:"100%"}}),t("div",{staticClass:"q-color-picker__spectrum-white absolute-full"}),t("div",{staticClass:"q-color-picker__spectrum-black absolute-full"}),t("div",{staticClass:"absolute",style:this.spectrumPointerStyle},[void 0!==this.model.hex?t("div",{staticClass:"q-color-picker__spectrum-circle"}):null])]),t("div",{staticClass:"q-color-picker__sliders"},[t(QSlider,{key:"hueSlide",staticClass:"q-color-picker__hue non-selectable",props:{value:this.model.h,min:0,max:360,trackSize:"8px",innerTrackColor:"transparent",selectionColor:"transparent",readonly:!0!==this.editable,thumbPath:thumbPath},on:cache(this,"hueSlide",{input:this.__onHueChange,change:t=>this.__onHueChange(t,!0)})}),!0===this.hasAlpha?t(QSlider,{key:"alphaSlide",staticClass:"q-color-picker__alpha non-selectable",props:{value:this.model.a,min:0,max:100,trackSize:"8px",trackColor:"white",innerTrackColor:"transparent",selectionColor:"transparent",trackImg:alphaTrackImg,readonly:!0!==this.editable,hideSelection:!0,thumbPath:thumbPath},on:cache(this,"alphaSlide",{input:t=>this.__onNumericChange(t,"a",100),change:t=>this.__onNumericChange(t,"a",100,void 0,!0)})}):null])]},__getTuneTab(t){const e={inputmode:"numeric",maxlength:3,readonly:!0!==this.editable};return[t("div",{staticClass:"row items-center no-wrap"},[t("div",["R"]),t(QSlider,{key:"rSlide",props:{value:this.model.r,min:0,max:255,color:"red",dark:this.dark,readonly:!0!==this.editable},on:cache(this,"rSlide",{input:t=>this.__onNumericChange(t,"r",255),change:t=>this.__onNumericChange(t,"r",255,void 0,!0)})}),t("input",{key:"rIn",domProps:{value:this.model.r},attrs:e,on:cache(this,"rIn",{input:t=>this.__onNumericChange(t.target.value,"r",255,t),change:stop,blur:t=>this.__onNumericChange(t.target.value,"r",255,t,!0)})})]),t("div",{staticClass:"row items-center no-wrap"},[t("div",["G"]),t(QSlider,{key:"gSlide",props:{value:this.model.g,min:0,max:255,color:"green",dark:this.dark,readonly:!0!==this.editable},on:cache(this,"gSlide",{input:t=>this.__onNumericChange(t,"g",255),change:t=>this.__onNumericChange(t,"g",255,void 0,!0)})}),t("input",{key:"gIn",domProps:{value:this.model.g},attrs:e,on:cache(this,"gIn",{input:t=>this.__onNumericChange(t.target.value,"g",255,t),change:stop,blur:t=>this.__onNumericChange(t.target.value,"g",255,t,!0)})})]),t("div",{staticClass:"row items-center no-wrap"},[t("div",["B"]),t(QSlider,{key:"bSlide",props:{value:this.model.b,min:0,max:255,color:"blue",readonly:!0!==this.editable,dark:this.dark},on:cache(this,"bSlide",{input:t=>this.__onNumericChange(t,"b",255),change:t=>this.__onNumericChange(t,"b",255,void 0,!0)})}),t("input",{key:"bIn",domProps:{value:this.model.b},attrs:e,on:cache(this,"bIn",{input:t=>this.__onNumericChange(t.target.value,"b",255,t),change:stop,blur:t=>this.__onNumericChange(t.target.value,"b",255,t,!0)})})]),!0===this.hasAlpha?t("div",{staticClass:"row items-center no-wrap"},[t("div",["A"]),t(QSlider,{key:"aSlide",props:{value:this.model.a,color:"grey",readonly:!0!==this.editable,dark:this.dark},on:cache(this,"aSlide",{input:t=>this.__onNumericChange(t,"a",100),change:t=>this.__onNumericChange(t,"a",100,void 0,!0)})}),t("input",{key:"aIn",domProps:{value:this.model.a},attrs:e,on:cache(this,"aIn",{input:t=>this.__onNumericChange(t.target.value,"a",100,t),change:stop,blur:t=>this.__onNumericChange(t.target.value,"a",100,t,!0)})})]):null]},__getPaletteTab(t){return[t("div",{staticClass:"row items-center q-color-picker__palette-rows",class:!0===this.editable?"q-color-picker__palette-rows--editable":""},this.computedPalette.map(e=>t("div",{key:"palette#"+e,staticClass:"q-color-picker__cube col-auto",style:{backgroundColor:e},on:!0===this.editable?cache(this,"palette#"+e,{click:()=>{this.__onPalettePick(e)}}):null})))]},__onSpectrumChange(t,e,i){const s=this.$refs.spectrum;if(void 0===s)return;const o=s.clientWidth,n=s.clientHeight,r=s.getBoundingClientRect();let a=Math.min(o,Math.max(0,t-r.left));!0===this.$q.lang.rtl&&(a=o-a);const l=Math.min(n,Math.max(0,e-r.top)),h=Math.round(100*a/o),c=Math.round(100*Math.max(0,Math.min(1,-l/n+1))),d=hsvToRgb({h:this.model.h,s:h,v:c,a:!0===this.hasAlpha?this.model.a:void 0});this.model.s=h,this.model.v=c,this.__update(d,i)},__onHueChange(t,e){const i=hsvToRgb({h:t=Math.round(t),s:this.model.s,v:this.model.v,a:!0===this.hasAlpha?this.model.a:void 0});this.model.h=t,this.__update(i,e)},__onNumericChange(t,e,i,s,o){if(void 0!==s&&stop(s),!/^[0-9]+$/.test(t))return void(!0===o&&this.$forceUpdate());const n=Math.floor(Number(t));if(n<0||n>i)return void(!0===o&&this.$forceUpdate());const r={r:"r"===e?n:this.model.r,g:"g"===e?n:this.model.g,b:"b"===e?n:this.model.b,a:!0===this.hasAlpha?"a"===e?n:this.model.a:void 0};if("a"!==e){const t=rgbToHsv(r);this.model.h=t.h,this.model.s=t.s,this.model.v=t.v}if(this.__update(r,o),void 0!==s&&!0!==o&&void 0!==s.target.selectionEnd){const t=s.target.selectionEnd;this.$nextTick(()=>{s.target.setSelectionRange(t,t)})}},__onEditorChange(t,e){let i;const s=t.target.value;if(stop(t),"hex"===this.topView){if(s.length!==(!0===this.hasAlpha?9:7)||!/^#[0-9A-Fa-f]+$/.test(s))return!0;i=hexToRgb(s)}else{let t;if(!s.endsWith(")"))return!0;if(!0!==this.hasAlpha&&s.startsWith("rgb(")){if(3!==(t=s.substring(4,s.length-1).split(",").map(t=>parseInt(t,10))).length||!/^rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)$/.test(s))return!0}else{if(!0!==this.hasAlpha||!s.startsWith("rgba("))return!0;{if(4!==(t=s.substring(5,s.length-1).split(",")).length||!/^rgba\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/.test(s))return!0;for(let e=0;e<3;e++){const i=parseInt(t[e],10);if(i<0||i>255)return!0;t[e]=i}const e=parseFloat(t[3]);if(e<0||e>1)return!0;t[3]=e}}if(t[0]<0||t[0]>255||t[1]<0||t[1]>255||t[2]<0||t[2]>255||!0===this.hasAlpha&&(t[3]<0||t[3]>1))return!0;i={r:t[0],g:t[1],b:t[2],a:!0===this.hasAlpha?100*t[3]:void 0}}const o=rgbToHsv(i);if(this.model.h=o.h,this.model.s=o.s,this.model.v=o.v,this.__update(i,e),!0!==e){const e=t.target.selectionEnd;this.$nextTick(()=>{t.target.setSelectionRange(e,e)})}},__onPalettePick(t){const e=this.__parseModel(t),i={r:e.r,g:e.g,b:e.b,a:e.a};void 0===i.a&&(i.a=this.model.a),this.model.h=e.h,this.model.s=e.s,this.model.v=e.v,this.__update(i,!0)},__update(t,e){this.model.hex=rgbToHex(t),this.model.rgb=rgbToString(t),this.model.r=t.r,this.model.g=t.g,this.model.b=t.b,this.model.a=t.a;const i=this.model[!0===this.isOutputHex?"hex":"rgb"];this.$emit("input",i),!0===e&&this.$emit("change",i)},__updateErrorIcon(t){void 0!==this.$refs.errorIcon&&(this.$refs.errorIcon.$el.style.opacity=t?1:0)},__parseModel(t){const e=void 0!==this.forceAlpha?this.forceAlpha:"auto"===this.formatModel?null:this.formatModel.indexOf("a")>-1;if("string"!=typeof t||0===t.length||!0!==testPattern.anyColor(t.replace(/ /g,"")))return{h:0,s:0,v:0,r:0,g:0,b:0,a:!0===e?100:void 0,hex:void 0,rgb:void 0};const i=textToRgb(t);return!0===e&&void 0===i.a&&(i.a=100),i.hex=rgbToHex(i),i.rgb=rgbToString(i),Object.assign(i,rgbToHsv(i))},__spectrumPan(t){t.isFinal?this.__onSpectrumChange(t.position.left,t.position.top,!0):this.__spectrumChange(t)},__spectrumChange(t){this.__onSpectrumChange(t.position.left,t.position.top)},__spectrumClick(t){this.__onSpectrumChange(t.pageX-window.pageXOffset,t.pageY-window.pageYOffset,!0)},__activate(t){this.__onSpectrumChange(t.pageX-window.pageXOffset,t.pageY-window.pageYOffset)}}});const keyCodes$2={horizontal:{first:[36],prev:[37],next:[39],last:[35]},vertical:{first:[33],prev:[38],next:[40],last:[34]}};function matchNavigationKeyIgnoreEl(t){return!0===t.classList.contains("q-key-group-navigation--ignore-key")}function createFocusTargets(t){const e=document.createElement("span");e.setAttribute("tabindex",-1),e.classList.add("no-outline"),e.classList.add("absolute"),e.classList.add("no-pointer-events"),t.firstTarget=e,t.lastTarget=e.cloneNode()}function addFocusTargets(t,e){e.appendChild(t.lastTarget),e.childElementCount>0?e.insertBefore(t.firstTarget,e.childNodes[0]):e.appendChild(t.firstTarget)}function removeFocusTargets(t){void 0!==t.firstTarget&&t.firstTarget.remove(),void 0!==t.lastTarget&&t.lastTarget.remove()}function parseArg$2(t){const e=[1,1,"q-key-group-navigation--active"];if("string"==typeof t&&t.length>0){const i=t.split(":");for(let t=0;t<2;t++){const s=parseInt(i[t],10);s&&(e[t]=s)}}return{offsetY:e[0],offsetX:e[1],activeClass:e[2]}}function configureEvents$2(t,e,i,s){!0===i.vertical?e.keyCodes=keyCodes$2.vertical:e.keyCodes=!0===i.horizontal?keyCodes$2.horizontal:keyCodes$2.all;const o=-1===[!1,0,"0"].indexOf(s);e.enabled!==o&&(!0===e.enabled&&cleanEvt(e,"main"),!0===o&&addEvt(e,"main",[[t,"keydown","keyDown","capture"],[t,"focusin","focusIn","passiveCapture"],[t,"focusout","focusOut","passiveCapture"],[t,"mousedown","setRestoreEl","passiveCapture"],[t,"touchstart","setRestoreEl","passiveCapture"]]),e.enabled=o)}keyCodes$2.all=Object.keys(keyCodes$2.horizontal).reduce((t,e)=>({...t,[e]:keyCodes$2.horizontal[e].concat(keyCodes$2.vertical[e])}),{}),keyCodes$2.horizontal.list=Object.keys(keyCodes$2.horizontal).reduce((t,e)=>t.concat(keyCodes$2.horizontal[e]),[9]),keyCodes$2.horizontal.listH=keyCodes$2.horizontal.list,keyCodes$2.vertical.list=Object.keys(keyCodes$2.vertical).reduce((t,e)=>t.concat(keyCodes$2.vertical[e]),[9]),keyCodes$2.vertical.listH=[],keyCodes$2.all.list=Object.keys(keyCodes$2.all).reduce((t,e)=>t.concat(keyCodes$2.all[e]),[9]),keyCodes$2.all.listH=keyCodes$2.horizontal.list;var KeyGroupNavigation={name:"key-group-navigation",bind(t,{modifiers:e,arg:i,value:s}){const o={keyCodes:keyCodes$2.all,arg:i,modifiers:{},...parseArg$2(i),focusRestoreEl:null,keyDown(e){const{keyCode:i,shiftKey:s,target:n}=e;if(-1===o.keyCodes.list.indexOf(i)||!0===n.matches(KEY_SKIP_SELECTOR))return;if(stop(e),9===i)return addFocusTargets(o,t),!0===s?void 0!==o.firstTarget?o.firstTarget.focus():prevent(e):void 0!==o.lastTarget?o.lastTarget.focus():prevent(e),void requestAnimationFrame(()=>{removeFocusTargets(o)});const r=document.activeElement,a=r?r.closest(".q-key-group-navigation"):null,l=null!==a&&a!==t?Array.prototype.filter.call(a.querySelectorAll(FOCUSABLE_SELECTOR),t=>t!==r):[],h=Array.prototype.filter.call(t.querySelectorAll(FOCUSABLE_SELECTOR),t=>!0!==l.includes(t)),c=h.length-1;if(!(c<0)){if(o.keyCodes.first.indexOf(i)>-1)changeFocusedElement(h,0,1);else if(o.keyCodes.last.indexOf(i)>-1)changeFocusedElement(h,c,-1);else{const t=null===r?-1:h.indexOf(r.closest(FOCUSABLE_SELECTOR)),e=-1===o.keyCodes.listH.indexOf(i)?o.offsetY:o.offsetX;o.keyCodes.prev.indexOf(i)>-1&&changeFocusedElement(h,Math.max(-1,t-e),-1,1!==e),o.keyCodes.next.indexOf(i)>-1&&changeFocusedElement(h,t+e,1,1!==e)}document.activeElement&&(o.focusRestoreEl=document.activeElement),prevent(e)}},setRestoreEl(t){t.target&&(o.focusRestoreEl=t.target)},setActive(){o.active=!0,t.classList.add(o.activeClass)},setInactive(){o.active=!1,t.classList.remove(o.activeClass)},focusIn(e){if(!0!==Interaction.isKeyboard)return void(!0===o.active&&o.setInactive());const i=getEventPath(e),s=void 0!==i.slice(0,i.indexOf(t)).find(matchNavigationKeyIgnoreEl);if(!0!==o.active?!0!==s&&o.setActive():!0===s&&o.setInactive(),e.target===o.firstTarget||e.target===o.lastTarget||null!==e.relatedTarget&&(void 0!==e.relatedTarget.classList&&!0===e.relatedTarget.classList.contains("q-key-group-navigation--ignore-focus")||!0===e.relatedTarget._qKeyNavIgnore&&!0===t.contains(e.relatedTarget)))return;const n=t.querySelector(".q-key-group-navigation__refocus"),r=null!==n&&n.closest(".q-key-group-navigation")===t?n:o.focusRestoreEl;if(null===r||!0===t.contains(e.relatedTarget))document.activeElement&&(o.focusRestoreEl=document.activeElement);else{const t=r.closest(FOCUSABLE_SELECTOR),e=t&&"function"==typeof t.focus?t:"function"===r.focus?r:null;requestAnimationFrame(()=>{null!==e&&(e._qKeyNavIgnore=!0,e.focus(),requestAnimationFrame(()=>{e&&(e._qKeyNavIgnore=!1)}))})}},focusOut(e){!0!==o.active||null!==e.relatedTarget&&!1!==t.contains(e.relatedTarget)||o.setInactive()}};t.__qkeygrpnav&&(t.__qkeygrpnav_old=t.__qkeygrpnav),t.__qkeygrpnav=o,t.classList.add("q-key-group-navigation"),createFocusTargets(o),configureEvents$2(t,o,e,s)},update(t,{modifiers:e,arg:i,value:s}){const o=t.__qkeygrpnav;void 0!==o&&(o.arg!==i&&Object.assign(o,parseArg$2(i)),configureEvents$2(t,o,e,s))},unbind(t){const e=t.__qkeygrpnav_old||t.__qkeygrpnav;void 0!==e&&(t.classList.remove("q-key-group-navigation"),removeFocusTargets(e),cleanEvt(e,"main"),!0===e.active&&e.setInactive(),delete t[t.__qkeygrpnav_old?"__qkeygrpnav_old":"__qkeygrpnav"])}};const breaks=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178];function toJalaali(t,e,i){return"[object Date]"===Object.prototype.toString.call(t)&&(i=t.getDate(),e=t.getMonth()+1,t=t.getFullYear()),d2j(g2d(t,e,i))}function toGregorian(t,e,i){return d2g(j2d(t,e,i))}function isLeapJalaaliYear(t){return 0===jalCalLeap(t)}function jalaaliMonthLength(t,e){return e<=6?31:e<=11?30:isLeapJalaaliYear(t)?30:29}function jalCalLeap(t){const e=breaks.length;let i,s,o,n,r,a=breaks[0];if(t=breaks[e-1])throw new Error("Invalid Jalaali year "+t);for(r=1;r=breaks[i-1])throw new Error("Invalid Jalaali year "+t);for(l=1;l=0){if(o<=185)return{jy:n,jm:s=1+div(o,31),jd:i=mod(o,31)+1};o-=186}else n-=1,o+=179,1===r.leap&&(o+=1);return{jy:n,jm:s=7+div(o,30),jd:i=mod(o,30)+1}}function g2d(t,e,i){let s=div(1461*(t+div(e-8,6)+100100),4)+div(153*mod(e+9,12)+2,5)+i-34840408;return s=s-div(3*div(t+100100+div(e-8,6),100),4)+752}function d2g(t){let e=4*t+139361631;const i=5*div(mod(e=e+4*div(3*div(4*t+183187720,146097),4)-3908,1461),4)+308,s=div(mod(i,153),5)+1,o=mod(div(i,153),12)+1;return{gy:div(e,1461)-100100+div(8-o,6),gm:o,gd:s}}function div(t,e){return~~(t/e)}function mod(t,e){return t-~~(t/e)*e}const calendars=["gregorian","persian"];var DateTimeMixin={mixins:[DarkMixin,FormMixin,ListenersMixin],props:{value:{required:!0},mask:{type:String},locale:Object,calendar:{type:String,validator:t=>calendars.includes(t),default:"gregorian"},landscape:Boolean,color:String,textColor:String,square:Boolean,flat:Boolean,bordered:Boolean,readonly:Boolean,disable:Boolean},computed:{computedMask(){return this.__getMask()},computedLocale(){return this.__getLocale()},editable(){return!0!==this.disable&&!0!==this.readonly},computedColor(){return this.color||"primary"},computedTextColor(){return this.textColor||"white"},computedTabindex(){return!0===this.editable?0:-1},headerClass(){const t=[];return void 0!==this.color&&t.push(`bg-${this.color}`),void 0!==this.textColor&&t.push(`text-${this.textColor}`),t.join(" ")}},methods:{__getLocale(){return void 0!==this.locale?{...this.$q.lang.date,...this.locale}:this.$q.lang.date},__getCurrentDate(t){const e=new Date,i=!0===t?null:0;if("persian"===this.calendar){const t=toJalaali(e);return{year:t.jy,month:t.jm,day:t.jd}}return{year:e.getFullYear(),month:e.getMonth()+1,day:e.getDate(),hour:i,minute:i,second:i,millisecond:i}},__getCurrentTime(){const t=new Date;return{hour:t.getHours(),minute:t.getMinutes(),second:t.getSeconds(),millisecond:t.getMilliseconds()}},__getDayHash:t=>t.year+"/"+pad(t.month)+"/"+pad(t.day)}};const MILLISECONDS_IN_DAY=864e5,MILLISECONDS_IN_HOUR=36e5,MILLISECONDS_IN_MINUTE=6e4,dateConstructorArgs=["year","month","date","hours","minutes","seconds","milliseconds"],defaultMask="YYYY-MM-DDTHH:mm:ss.SSSZ",token=/\[((?:[^\]\\]|\\]|\\)*)\]|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]/g,reverseToken=/(\[[^\]]*\])|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]|([.*+:?^,\s${}()|\\]+)/g,regexStore=new Map;function getRegexData(t,e){const i="("+e.days.join("|")+"|)",s=t+i;if(!0===regexStore.has(s))return regexStore.get(s);const o="("+e.daysShort.join("|")+"|)",n="("+e.months.join("|")+"|)",r="("+e.monthsShort.join("|")+"|)",a={};let l=0;const h=t.replace(reverseToken,t=>{switch(l++,t){case"YY":return a.YY=l,"(-?\\d{1,2}|)";case"YYYY":return a.YYYY=l,"(-?\\d{1,4}|)";case"M":return a.M=l,"(\\d{1,2}|)";case"MM":return a.M=l,"(\\d{2}|)";case"MMM":return a.MMM=l,r;case"MMMM":return a.MMMM=l,n;case"D":return a.D=l,"(\\d{1,2}|)";case"Do":return a.D=l,"(\\d{1,2}(?:st|nd|rd|th)|)";case"DD":return a.D=l,"(\\d{2}|)";case"H":return a.H=l,"(\\d{1,2}|)";case"HH":return a.H=l,"(\\d{2}|)";case"h":return a.h=l,"(\\d{1,2}|)";case"hh":return a.h=l,"(\\d{2}|)";case"m":return a.m=l,"(\\d{1,2}|)";case"mm":return a.m=l,"(\\d{2}|)";case"s":return a.s=l,"(\\d{1,2}|)";case"ss":return a.s=l,"(\\d{2}|)";case"S":return a.S=l,"(\\d{1}|)";case"SS":return a.S=l,"(\\d{2}|)";case"SSS":return a.S=l,"(\\d{3}|)";case"A":return a.A=l,"(AM|PM|)";case"a":return a.a=l,"(am|pm|)";case"aa":return a.aa=l,"(a\\.m\\.|p\\.m\\.|)";case"ddd":return o;case"dddd":return i;case"Q":case"d":case"E":return"(\\d{1}|)";case"Qo":return"(1st|2nd|3rd|4th|)";case"DDD":case"DDDD":return"(\\d{1,3}|)";case"w":return"(\\d{1,2}|)";case"ww":return"(\\d{2}|)";case"Z":return a.Z=l,"(Z|[+-]\\d{2}:\\d{2}|)";case"ZZ":return a.ZZ=l,"(Z|[+-]\\d{2}\\d{2}|)";case"X":return a.X=l,"(-?\\d+|)";case"x":return a.x=l,"(-?\\d{4,}|)";default:return l--,"["===t[0]&&(t=t.substring(1,t.length-1)),t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}),c={map:a,regex:new RegExp("^"+h)};return regexStore.set(s,c),c}function getDateLocale(t,e){return void 0!==t?t:void 0!==e?e.date:defaultLang.date}function formatTimezone(t,e=""){const i=t>0?"-":"+",s=Math.abs(t),o=s%60;return i+pad(Math.floor(s/60))+e+pad(o)}function normalizeMod(t){const e={...t};return void 0!==t.years&&(e.year=t.years,delete e.years),void 0!==t.months&&(e.month=t.months,delete e.months),void 0!==t.days&&(e.date=t.days,delete e.days),void 0!==t.day&&(e.date=t.day,delete e.day),void 0!==t.hour&&(e.hours=t.hour,delete e.hour),void 0!==t.minute&&(e.minutes=t.minute,delete e.minute),void 0!==t.second&&(e.seconds=t.second,delete e.second),void 0!==t.millisecond&&(e.milliseconds=t.millisecond,delete e.millisecond),e}const maxDayDate=new Date;function getMaxDay(t,e,i){return"persian"===i?jalaaliMonthLength(t,e):(maxDayDate.setFullYear(t),maxDayDate.setMonth(e),maxDayDate.setDate(0),maxDayDate.getDate())}function applyYearMonthDay(t,e,i){const s=void 0!==e.year?e.year:t[`get${i}FullYear`](),o=void 0!==e.month?e.month-1:t[`get${i}Month`](),n=getMaxDay(s,o+1),r=Math.max(1,Math.min(n,void 0!==e.date?e.date:t[`get${i}Date`]()));return t[`set${i}Date`](1),t[`set${i}Month`](2),t[`set${i}FullYear`](s),t[`set${i}Month`](o),t[`set${i}Date`](r),delete e.year,delete e.month,delete e.date,t}function applyYearMonthDayChange(t,e,i){let s=t.getFullYear(),o=t.getMonth()+1;return void 0!==e.year&&(s+=i*e.year,delete e.year),void 0!==e.month&&(o+=i*e.month,delete e.month),applyYearMonthDay(t,{year:s,month:o},""),void 0!==e.date&&(t.setDate(t.getDate()+i*e.date),delete e.date),t}function getChange(t,e,i){const s=normalizeMod(e),o=new Date(t),n=void 0!==s.year||void 0!==s.month||void 0!==s.date?applyYearMonthDayChange(o,s,i):o;for(const t in s){const e=capitalize(t);n[`set${e}`](n[`get${e}`]()+i*s[t])}return n}function __safeCreateDate(...t){return t.length>1&&t[0]>=0&&t[0]<=99?buildDate(dateConstructorArgs.reduce((e,i,s)=>(void 0!==t[s]&&(e[i]=t[s]),e),{})):new Date(...t)}function adjustDate(t,e,i){const s=normalizeMod(e),o=!0===i?"UTC":"",n=null===t||void 0===t?new Date:new Date(t),r=void 0!==s.year||void 0!==s.month||void 0!==s.date?applyYearMonthDay(n,s,o):n;for(const t in s){r[`set${o}${t.charAt(0).toUpperCase()+t.slice(1)}`](s[t])}return r}function extractDate(t,e,i){const s=__splitDate(t,e,i),o=__safeCreateDate(s.year,null===s.month?null:s.month-1,null===s.day?1:s.day,s.hour,s.minute,s.second,s.millisecond),n=o.getTimezoneOffset();return null===s.timezoneOffset||s.timezoneOffset===n?o:getChange(o,{minutes:s.timezoneOffset-n},1)}function __splitDate(t,e,i,s,o){const n={year:null,month:null,day:null,hour:null,minute:null,second:null,millisecond:null,timezoneOffset:null,dateHash:null,timeHash:null};if(void 0!==o&&Object.assign(n,o),void 0===t||null===t||""===t||"string"!=typeof t)return n;void 0===e&&(e=defaultMask);const r=getDateLocale(i,lang.props),a=r.months,l=r.monthsShort,{regex:h,map:c}=getRegexData(e,r),d=t.match(h);if(null===d)return n;const u={...c};Object.keys(u).forEach(t=>{""===d[u[t]]&&(u[t]=void 0)});let p="";if(void 0!==u.X||void 0!==u.x){const t=parseInt(d[void 0!==u.X?u.X:u.x],10);if(!0===isNaN(t)||t<0)return n;const e=new Date(t*(void 0!==u.X?1e3:1));n.year=e.getFullYear(),n.month=e.getMonth()+1,n.day=e.getDate(),n.hour=e.getHours(),n.minute=e.getMinutes(),n.second=e.getSeconds(),n.millisecond=e.getMilliseconds()}else{if(void 0!==u.YYYY)n.year=parseInt(d[u.YYYY],10);else if(void 0!==u.YY){const t=parseInt(d[u.YY],10);n.year=t<0?t:2e3+t}if(void 0!==u.M){if(n.month=parseInt(d[u.M],10),n.month<1||n.month>12)return n}else void 0!==u.MMM?n.month=l.indexOf(d[u.MMM])+1:void 0!==u.MMMM&&(n.month=a.indexOf(d[u.MMMM])+1);if(void 0!==u.D){if(n.day=parseInt(d[u.D],10),null===n.year||null===n.month||n.day<1)return n;if(n.day>getMaxDay(n.year,n.month,s))return n}void 0!==u.H?n.hour=parseInt(d[u.H],10)%24:void 0!==u.h&&(n.hour=parseInt(d[u.h],10)%12,(u.A&&"PM"===d[u.A]||u.a&&"pm"===d[u.a]||u.aa&&"p.m."===d[u.aa])&&(n.hour+=12),n.hour=n.hour%24),void 0!==u.m&&(n.minute=parseInt(d[u.m],10)%60),void 0!==u.s&&(n.second=parseInt(d[u.s],10)%60),void 0!==u.S&&(n.millisecond=parseInt(d[u.S],10)*10**(3-d[u.S].length)),void 0===u.Z&&void 0===u.ZZ||(p=void 0!==u.Z?d[u.Z].replace(":",""):d[u.ZZ],n.timezoneOffset=("+"===p[0]?-1:1)*(60*p.slice(1,3)+1*p.slice(3,5)))}return n.dateHash=n.year+"/"+pad(n.month)+"/"+pad(n.day),n.timeHash=pad(n.hour)+":"+pad(n.minute)+":"+pad(n.second)+p,n}function isValid(t){return"number"==typeof t||!1===isNaN(Date.parse(t))}function buildDate(t,e){return adjustDate(null,t,e)}function getDayOfWeek(t,e){const i=getDateLocale(e,lang.props);return 1+(7+new Date(t).getDay()-(i.firstDayOfWeek||0))%7}function getWeekOfYear(t){const e=__safeCreateDate(t.getFullYear(),t.getMonth(),t.getDate());e.setDate(e.getDate()-(e.getDay()+6)%7+3);const i=__safeCreateDate(e.getFullYear(),0,4);i.setDate(i.getDate()-(i.getDay()+6)%7+3);const s=e.getTimezoneOffset()-i.getTimezoneOffset();e.setHours(e.getHours()-s);const o=(e-i)/(7*MILLISECONDS_IN_DAY);return 1+Math.floor(o)}function getDayIdentifier(t){return 1e4*t.getFullYear()+100*t.getMonth()+t.getDate()}function getDateIdentifier(t,e){const i=new Date(t);return!0===e?getDayIdentifier(i):i.getTime()}function isBetweenDates(t,e,i,s={}){const o=getDateIdentifier(e,s.onlyDate),n=getDateIdentifier(i,s.onlyDate),r=getDateIdentifier(t,s.onlyDate);return(r>o||!0===s.inclusiveFrom&&r===o)&&(r{e=Math.max(e,new Date(t))}),e}function getMinDate(t){let e=new Date(t);return Array.prototype.slice.call(arguments,1).forEach(t=>{e=Math.min(e,new Date(t))}),e}function getDiff(t,e,i){return Math.floor((t.getTime()-t.getTimezoneOffset()*MILLISECONDS_IN_MINUTE-(e.getTime()-e.getTimezoneOffset()*MILLISECONDS_IN_MINUTE))/i)}function getDateDiff(t,e,i="days"){const s=new Date(t),o=new Date(e);switch(i){case"years":case"year":return s.getFullYear()-o.getFullYear();case"months":case"month":return 12*(s.getFullYear()-o.getFullYear())+s.getMonth()-o.getMonth();case"days":case"day":case"date":return getDiff(startOfDate(s,"day"),startOfDate(o,"day"),MILLISECONDS_IN_DAY);case"hours":case"hour":return getDiff(startOfDate(s,"hour"),startOfDate(o,"hour"),MILLISECONDS_IN_HOUR);case"minutes":case"minute":return getDiff(startOfDate(s,"minute"),startOfDate(o,"minute"),MILLISECONDS_IN_MINUTE);case"seconds":case"second":return getDiff(startOfDate(s,"second"),startOfDate(o,"second"),1e3)}}function getDayOfYear(t){return getDateDiff(t,startOfDate(t,"year"),"days")+1}function inferDateFormat(t){return!0===isDate(t)?"date":"number"==typeof t?"number":"string"}function getDateBetween(t,e,i){const s=new Date(t);if(e){const t=new Date(e);if(st)return t}return s}function isSameDate(t,e,i){const s=new Date(t),o=new Date(e);if(void 0===i)return s.getTime()===o.getTime();switch(i){case"second":case"seconds":if(s.getSeconds()!==o.getSeconds())return!1;case"minute":case"minutes":if(s.getMinutes()!==o.getMinutes())return!1;case"hour":case"hours":if(s.getHours()!==o.getHours())return!1;case"day":case"days":case"date":if(s.getDate()!==o.getDate())return!1;case"month":case"months":if(s.getMonth()!==o.getMonth())return!1;case"year":case"years":if(s.getFullYear()!==o.getFullYear())return!1;break;default:throw new Error(`date isSameDate unknown unit ${i}`)}return!0}function daysInMonth(t){return __safeCreateDate(t.getFullYear(),t.getMonth()+1,0).getDate()}function getOrdinal(t){if(t>=11&&t<=13)return`${t}th`;switch(t%10){case 1:return`${t}st`;case 2:return`${t}nd`;case 3:return`${t}rd`}return`${t}th`}const formatter={YY(t,e,i){const s=this.YYYY(t,e,i)%100;return s>=0?pad(s):"-"+pad(Math.abs(s))},YYYY:(t,e,i)=>void 0!==i&&null!==i?i:t.getFullYear(),M:t=>t.getMonth()+1,MM:t=>pad(t.getMonth()+1),MMM:(t,e)=>e.monthsShort[t.getMonth()],MMMM:(t,e)=>e.months[t.getMonth()],Q:t=>Math.ceil((t.getMonth()+1)/3),Qo(t){return getOrdinal(this.Q(t))},D:t=>t.getDate(),Do:t=>getOrdinal(t.getDate()),DD:t=>pad(t.getDate()),DDD:t=>getDayOfYear(t),DDDD:t=>pad(getDayOfYear(t),3),d:t=>t.getDay(),dd(t,e){return this.dddd(t,e).slice(0,2)},ddd:(t,e)=>e.daysShort[t.getDay()],dddd:(t,e)=>e.days[t.getDay()],E:t=>t.getDay()||7,w:t=>getWeekOfYear(t),ww:t=>pad(getWeekOfYear(t)),H:t=>t.getHours(),HH:t=>pad(t.getHours()),h(t){const e=t.getHours();return 0===e?12:e>12?e%12:e},hh(t){return pad(this.h(t))},m:t=>t.getMinutes(),mm:t=>pad(t.getMinutes()),s:t=>t.getSeconds(),ss:t=>pad(t.getSeconds()),S:t=>Math.floor(t.getMilliseconds()/100),SS:t=>pad(Math.floor(t.getMilliseconds()/10)),SSS:t=>pad(t.getMilliseconds(),3),A(t){return this.H(t)<12?"AM":"PM"},a(t){return this.H(t)<12?"am":"pm"},aa(t){return this.H(t)<12?"a.m.":"p.m."},Z:(t,e,i,s)=>formatTimezone(void 0===s||null===s?t.getTimezoneOffset():s,":"),ZZ:(t,e,i,s)=>formatTimezone(void 0===s||null===s?t.getTimezoneOffset():s),X:t=>Math.floor(t.getTime()/1e3),x:t=>t.getTime()};function formatDate(t,e,i,s,o){if(0!==t&&!t||t===1/0||t===-1/0)return;const n=new Date(t);if(isNaN(n))return;void 0===e&&(e=defaultMask);const r=getDateLocale(i,lang.props);return e.replace(token,(t,e)=>t in formatter?formatter[t](n,r,s,o):void 0===e?t:e.split("\\]").join("]"))}function clone(t){return!0===isDate(t)?new Date(t.getTime()):t}var date={isValid:isValid,extractDate:extractDate,buildDate:buildDate,getDayOfWeek:getDayOfWeek,getWeekOfYear:getWeekOfYear,isBetweenDates:isBetweenDates,addToDate:addToDate,subtractFromDate:subtractFromDate,adjustDate:adjustDate,startOfDate:startOfDate,endOfDate:endOfDate,getMaxDate:getMaxDate,getMinDate:getMinDate,getDateDiff:getDateDiff,getDayOfYear:getDayOfYear,inferDateFormat:inferDateFormat,getDateBetween:getDateBetween,isSameDate:isSameDate,daysInMonth:daysInMonth,formatDate:formatDate,clone:clone};const yearsInterval=20,views=["Calendar","Years","Months"],viewIsValid=t=>views.includes(t),yearMonthValidator=t=>/^-?[\d]+\/[0-1]\d$/.test(t),modelNavigationValidator=t=>["from","to",!1].indexOf(t)>-1,hashToInt=t=>{if("string"!=typeof t)return NaN;const e=t.split("/");return 1e4*parseInt(e[0],10)+parseInt(e.slice(1).join(""),10)},lineStr=" — ";function modelIsValid(t){return null!==t.dateHash&&null!==t.day&&null!==t.month&&null!==t.year}var QDate=Vue.extend({name:"QDate",mixins:[DateTimeMixin],directives:{KeyGroupNavigation:KeyGroupNavigation},props:{multiple:Boolean,range:Boolean,dayAsRange:Boolean,title:String,subtitle:String,mask:{default:"YYYY/MM/DD"},defaultYearMonth:{type:String,validator:yearMonthValidator},yearsInMonthView:Boolean,events:[Array,Function],eventColor:[String,Function],emitImmediately:Boolean,options:[Array,Function],modelNavigation:{type:[String,Boolean],default:"from",validator:modelNavigationValidator},navigationMinYearMonth:{type:String,validator:yearMonthValidator},navigationMaxYearMonth:{type:String,validator:yearMonthValidator},noUnset:Boolean,firstDayOfWeek:[String,Number],todayBtn:Boolean,minimal:Boolean,defaultView:{type:String,default:"Calendar",validator:viewIsValid}},data(){const t=this.__getMask(),e=this.__getLocale(),i=this.__getViewModel(t,e),s=i.year,o=!0===this.$q.lang.rtl?"right":"left";return{view:this.defaultView,monthDirection:o,yearDirection:o,startYear:s-s%20-(s<0?20:0),editRange:void 0,innerMask:t,innerLocale:e,viewModel:i}},watch:{value(t){if(this.lastEmitValue===t)this.lastEmitValue=0;else{const{year:t,month:e}=this.__getViewModel(this.innerMask,this.innerLocale);this.__updateViewModel(t,e)}},view(){this.$nextTick(()=>{void 0!==this.$refs.viewTarget&&this.$refs.viewTarget.$el.focus()})},"viewModel.year"(t){this.$emit("navigation",{year:t,month:this.viewModel.month})},"viewModel.month"(t){this.$emit("navigation",{year:this.viewModel.year,month:t})},computedMask(t){this.__updateValue(t,this.innerLocale,"mask"),this.innerMask=t},computedLocale(t){this.__updateValue(this.innerMask,t,"locale"),this.innerLocale=t}},computed:{classes(){const t=!0===this.landscape?"landscape":"portrait";return`q-date q-date--${t} q-date--${t}-${!0===this.minimal?"minimal":"standard"}`+` q-date--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.bordered?" q-date--bordered":"")+(!0===this.square?" q-date--square no-border-radius":"")+(!0===this.flat?" q-date--flat no-shadow":"")+(!0===this.disable?" disabled":!0===this.readonly?" q-date--readonly":"")},isImmediate(){return!0===this.emitImmediately&&!0!==this.multiple&&!0!==this.range},normalizedModel(){return!0===Array.isArray(this.value)?this.value:null!==this.value&&void 0!==this.value?[this.value]:[]},daysModel(){return this.normalizedModel.filter(t=>"string"==typeof t).map(t=>this.__decodeString(t,this.innerMask,this.innerLocale)).filter(modelIsValid)},rangeModel(){const t=t=>this.__decodeString(t,this.innerMask,this.innerLocale);return this.normalizedModel.filter(t=>!0===isObject(t)&&void 0!==t.from&&void 0!==t.to).map(e=>{const i=t(e.from),s=t(e.to);return hashToInt(i.dateHash)<=hashToInt(s.dateHash)?{from:i,to:s}:{from:s,to:i}}).filter(t=>!0===modelIsValid(t.from)&&!0===modelIsValid(t.to))},getNativeDateFn(){return"persian"!==this.calendar?t=>{const e=__safeCreateDate(t.year,t.month-1,t.day);return e.setFullYear(t.year),e}:t=>{const e=toGregorian(t.year,t.month,t.day),i=__safeCreateDate(e.gy,e.gm-1,e.gd);return i.setFullYear(t.year),i}},encodeObjectFn(){return"persian"===this.calendar?this.__getDayHash:(t,e,i)=>formatDate(__safeCreateDate(t.year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond),void 0===e?this.innerMask:e,void 0===i?this.innerLocale:i,t.year,t.timezoneOffset)},daysInModel(){return this.daysModel.length+this.rangeModel.reduce((t,e)=>t+1+getDateDiff(this.getNativeDateFn(e.to),this.getNativeDateFn(e.from)),0)},headerTitle(){if(void 0!==this.title&&null!==this.title&&this.title.length>0)return this.title;if(void 0!==this.editRange){const t=this.editRange.init,e=this.getNativeDateFn(t);return this.innerLocale.daysShort[e.getDay()]+", "+this.innerLocale.monthsShort[t.month-1]+" "+t.day+" — ?"}if(0===this.daysInModel)return" — ";if(this.daysInModel>1)return`${this.daysInModel} ${this.innerLocale.pluralDay}`;const t=this.minSelectedModel,e=this.getNativeDateFn(t);return!0===isNaN(e.valueOf())?" — ":void 0!==this.innerLocale.headerTitle?this.innerLocale.headerTitle(e,t):this.innerLocale.daysShort[e.getDay()]+", "+this.innerLocale.monthsShort[t.month-1]+" "+t.day},headerSubtitle(){if(void 0!==this.subtitle&&null!==this.subtitle&&this.subtitle.length>0)return this.subtitle;if(0===this.daysInModel)return" — ";if(this.daysInModel>1){const t=this.minSelectedModel,e=this.maxSelectedModel,i=this.innerLocale.monthsShort;return i[t.month-1]+(t.year!==e.year?" "+t.year+" — "+i[e.month-1]+" ":t.month!==e.month?" — "+i[e.month-1]:"")+" "+e.year}return this.minSelectedModel.year},minSelectedModel(){return this.daysModel.concat(this.rangeModel.map(t=>t.from)).sort((t,e)=>t.year-e.year||t.month-e.month)[0]},maxSelectedModel(){return this.daysModel.concat(this.rangeModel.map(t=>t.to)).sort((t,e)=>e.year-t.year||e.month-t.month)[0]},dateArrow(){const t=[this.$q.iconSet.datetime.arrowLeft,this.$q.iconSet.datetime.arrowRight];return!0===this.$q.lang.rtl?t.reverse():t},computedFirstDayOfWeek(){return void 0!==this.firstDayOfWeek?Number(this.firstDayOfWeek):this.innerLocale.firstDayOfWeek},daysOfWeek(){const t=this.innerLocale.daysShort,e=this.computedFirstDayOfWeek;return e>0?t.slice(e,7).concat(t.slice(0,e)):t},daysInMonth(){const{year:t,month:e}=this.viewModel;return"persian"!==this.calendar?{prev:__safeCreateDate(t,e-1,0).getDate(),cur:__safeCreateDate(t,e,0).getDate(),next:__safeCreateDate(t,e+1,0).getDate()}:{prev:jalaaliMonthLength(1===e?t-1:t,1===e?12:e-1),cur:jalaaliMonthLength(t,e),next:jalaaliMonthLength(12===e?t+1:t,12===e?1:e+1)}},today(){return this.__getCurrentDate()},evtColor(){return"function"==typeof this.eventColor?this.eventColor:()=>this.eventColor},minNav(){if(void 0!==this.navigationMinYearMonth){const t=this.navigationMinYearMonth.split("/");return{year:parseInt(t[0],10),month:parseInt(t[1],10)}}},maxNav(){if(void 0!==this.navigationMaxYearMonth){const t=this.navigationMaxYearMonth.split("/");return{year:parseInt(t[0],10),month:parseInt(t[1],10)}}},navBoundaries(){const t={month:{prev:!0,next:!0},year:{prev:!0,next:!0}};return void 0!==this.minNav&&this.minNav.year>=this.viewModel.year&&(t.year.prev=!1,this.minNav.year===this.viewModel.year&&this.minNav.month>=this.viewModel.month&&(t.month.prev=!1)),void 0!==this.maxNav&&this.maxNav.year<=this.viewModel.year&&(t.year.next=!1,this.maxNav.year===this.viewModel.year&&this.maxNav.month<=this.viewModel.month&&(t.month.next=!1)),t},daysMap(){const t={};return this.daysModel.forEach(e=>{const i=this.__getMonthHash(e);void 0===t[i]&&(t[i]=[]),t[i].push(e.day)}),t},rangeMap(){const t={};return this.rangeModel.forEach(e=>{const i=this.__getMonthHash(e.from),s=this.__getMonthHash(e.to),o=hashToInt(s);if(void 0===t[i]&&(t[i]=[]),t[i].push({from:e.from.day,to:i===s?e.to.day:void 0,range:e}),hashToInt(i)12&&(r.year++,r.month=1),a=this.__getMonthHash(r)}}),t},rangeViewMap(){if(void 0===this.editRange)return{};const t={},{init:e,initHash:i,final:s,finalHash:o}=this.editRange,[n,r]=hashToInt(i)<=hashToInt(o)?[e,s]:[s,e],a=hashToInt(this.__getMonthHash(n)),l=hashToInt(this.__getMonthHash(r));return["prev","cur","next"].forEach(e=>{const i=hashToInt(this.viewMonthHash[e]);if(a>i||lthis.options.includes(t);for(let i=1;i<=this.daysInMonth.cur;i++){const s=this.viewMonthHash.cur+"/"+pad(i);t[i]=e(s)}return t},eventDaysMap(){const t={};if(void 0===this.events)for(let e=1;e<=this.daysInMonth.cur;e++)t[e]=!1;else{const e="function"==typeof this.events?this.events:t=>this.events.includes(t);for(let i=1;i<=this.daysInMonth.cur;i++){const s=this.viewMonthHash.cur+"/"+pad(i);t[i]=!0===e(s)&&this.evtColor(s)}}return t},startFillDays(){let t;const{year:e,month:i}=this.viewModel;if("persian"!==this.calendar)t=__safeCreateDate(e,i-1,1);else{const s=toGregorian(e,i,1);t=__safeCreateDate(s.gy,s.gm-1,s.gd)}const s=t.getDay()-this.computedFirstDayOfWeek-1;return{days:s<0?s+7:s,endDay:this.daysInMonth.prev}},days(){const t=[],{days:e,endDay:i}=this.startFillDays;if(e<6){for(let s=i-e;s<=i;s++)t.push({i:s,day:this.viewMonthHash.prev+"/"+pad(s),fill:!0});this.__fillDaysMeta(t,this.viewMonthHash.prev,i,-i+e+1,i-e,i)}const s=t.length;for(let e=1;e<=this.daysInMonth.cur;e++){const i={i:e,day:this.viewMonthHash.cur+"/"+pad(e),event:this.eventDaysMap[e],classes:[]};!0===this.selectionDaysMap[e]&&(i.in=!0,i.flat=!0),t.push(i)}this.__fillDaysMeta(t,this.viewMonthHash.cur,this.daysInMonth.cur,s,1,this.daysInMonth.cur),this.viewModel.year===this.today.year&&this.viewModel.month===this.today.month&&(t[s+this.today.day-1].today=!0);const o=t.length%7;if(o>0){const e=7-o;for(let i=1;i<=e;i++)t.push({i:i,day:this.viewMonthHash.next+"/"+pad(i),fill:!0});this.__fillDaysMeta(t,this.viewMonthHash.next,this.daysInMonth.next,s+this.daysInMonth.cur,1,e)}return t.forEach(t=>{let e="q-date__calendar-item ";e+=!0===t.fill?"q-date__calendar-item--fill":`q-date__calendar-item--${!0===t.in?"in":"out"}`,void 0===t.range&&!0!==t.editRange||(e+=` text-${t.color}`),void 0===t.range||!0===t.rangeTo&&!0===t.rangeFrom||(e+=` q-date__range${!0===t.rangeFrom?"-from":!0===t.rangeTo?"-to":""}`),!0===t.editRange&&(e+=` q-date__edit-range${!0===t.editRangeFrom?"-from":""}${!0===t.editRangeTo?"-to":""}`),t.classes=e}),t},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0}},methods:{setToday(){this.__toggleDate(this.today,this.__getMonthHash(this.today)),this.setCalendarTo(this.today.year,this.today.month)},setView(t){!0===viewIsValid(t)&&(this.view=t)},offsetCalendar(t,e){["month","year"].includes(t)&&this[`__goTo${"month"===t?"Month":"Year"}`](!0===e?-1:1)},setCalendarTo(t,e){this.view="Calendar",this.__updateViewModel(t,e)},setEditingRange(t,e,i){if(void 0===i&&(i=this.modelNavigation),!1===this.range||!t)return void(this.editRange=void 0);const s=Object.assign({...this.viewModel},t),o=void 0!==e?Object.assign({...this.viewModel},e):s;this.editRange={init:s,initHash:this.__getDayHash(s),final:o,finalHash:this.__getDayHash(o)},["from","to"].indexOf(i)>-1&&this.$nextTick(()=>{this.setCalendarTo("from"===i?s.year:o.year,"from"===i?s.month:o.month)})},__getMask(){return"persian"===this.calendar?"YYYY/MM/DD":this.mask},__decodeString(t,e,i){return __splitDate(t,e,i,this.calendar,{hour:0,minute:0,second:0,millisecond:0})},__getViewModel(t,e){if(!1===this.modelNavigation)return void 0===this.viewModel?this.__getDefaultViewModel():this.viewModel;const i=!0===Array.isArray(this.value)?this.value:this.value?[this.value]:[];if(0===i.length)return this.__getDefaultViewModel();const s=i["from"===this.modelNavigation?0:i.length-1],o=this.__decodeString(void 0!==s.from?s.from:s,t,e);return null===o.dateHash?this.__getDefaultViewModel():o},__getDefaultViewModel(){let t,e;if(void 0!==this.defaultYearMonth){const i=this.defaultYearMonth.split("/");t=parseInt(i[0],10),e=parseInt(i[1],10)}else{const i=void 0!==this.today?this.today:this.__getCurrentDate();t=i.year,e=i.month}return{year:t,month:e,day:1,hour:0,minute:0,second:0,millisecond:0,dateHash:t+"/"+pad(e)+"/01"}},__getHeader(t){if(!0!==this.minimal)return t("div",{staticClass:"q-date__header",class:this.headerClass},[t("div",{staticClass:"relative-position"},[t("transition",{props:{name:"q-transition--fade"}},[t("div",{key:"h-yr-"+this.headerSubtitle,staticClass:"q-date__header-subtitle q-date__header-link",class:"Years"===this.view?"q-date__header-link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:cache(this,"vY",{click:()=>{this.view="Years"},keyup:t=>{13===t.keyCode&&(this.view="Years")}})},[this.headerSubtitle])])]),t("div",{staticClass:"q-date__header-title relative-position flex no-wrap"},[t("div",{staticClass:"relative-position col"},[t("transition",{props:{name:"q-transition--fade"}},[t("div",{key:"h-sub"+this.headerTitle,staticClass:"q-date__header-title-label q-date__header-link",class:"Calendar"===this.view?"q-date__header-link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:cache(this,"vC",{click:()=>{this.view="Calendar"},keyup:t=>{13===t.keyCode&&(this.view="Calendar")}})},[this.headerTitle])])]),!0===this.todayBtn?t(QBtn,{key:"today",staticClass:"q-date__header-today self-start",props:{icon:this.$q.iconSet.datetime.today,flat:!0,size:"sm",round:!0,tabindex:this.computedTabindex},on:cache(this,"today",{click:this.setToday})}):null])])},__getNavigation(t,{label:e,view:i,key:s,dir:o,goTo:n,boundaries:r,cls:a}){return[t("div",{staticClass:"row items-center q-date__arrow"},[t(QBtn,{key:"go-#"+i,props:{round:!0,dense:!0,size:"sm",flat:!0,icon:this.dateArrow[0],tabindex:this.computedTabindex,disable:!1===r.prev},on:cache(this,"go-#"+i,{click(){n(-1)}})})]),t("div",{staticClass:"relative-position overflow-hidden flex flex-center"+a},[t("transition",{props:{name:"q-transition--jump-"+o}},[t("div",{key:s},[t(QBtn,{key:"view#"+i,props:{flat:!0,dense:!0,noCaps:!0,label:e,tabindex:this.computedTabindex},on:cache(this,"view#"+i,{click:()=>{this.view=i}})})])])]),t("div",{staticClass:"row items-center q-date__arrow"},[t(QBtn,{key:"go+#"+i,props:{round:!0,dense:!0,size:"sm",flat:!0,icon:this.dateArrow[1],tabindex:this.computedTabindex,disable:!1===r.next},on:cache(this,"go+#"+i,{click(){n(1)}})})])]},__getCalendarView(t){const e=void 0!==this.$scopedSlots.day?this.$scopedSlots.day:e=>!1!==e.event?[t("div",{staticClass:"q-date__event bg-"+e.event})]:null,i=void 0!==this.$scopedSlots.day?this.$scopedSlots.day:e=>t("div",[e.i]),s=this.days.find(t=>!0===t.unelevated),o=void 0===s?this.days.find(t=>!0===t.today):s,n=void 0===o?1:o.i,r="persian"===this.calendar?"dayP#":"day#";return[t("div",{key:"calendar-view",staticClass:"q-date__view q-date__calendar"},[t("div",{staticClass:"q-date__navigation row items-center no-wrap"},this.__getNavigation(t,{label:this.innerLocale.months[this.viewModel.month-1],view:"Months",key:this.viewModel.month,dir:this.monthDirection,goTo:this.__goToMonth,boundaries:this.navBoundaries.month,cls:" col"}).concat(this.__getNavigation(t,{label:this.viewModel.year,view:"Years",key:this.viewModel.year,dir:this.yearDirection,goTo:this.__goToYear,boundaries:this.navBoundaries.year,cls:""}))),t("div",{staticClass:"q-date__calendar-weekdays row items-center no-wrap"},this.daysOfWeek.map(e=>t("div",{staticClass:"q-date__calendar-item"},[t("div",[e])]))),t("div",{key:"kNavC",staticClass:"q-date__calendar-days-container relative-position overflow-hidden",directives:cache(this,"kNavC",[{name:"key-group-navigation",arg:"7"}])},[t("transition",{props:{name:"q-transition--slide-"+this.monthDirection}},[t("div",{key:this.viewMonthHash.cur,staticClass:"q-date__calendar-days fit"},this.days.map(s=>t("div",{staticClass:s.classes},[!0===s.in?t(QBtn,{key:r+s.i,staticClass:!0===s.today?"q-date__today":null,ref:n===s.i?"viewTarget":void 0,props:{dense:!0,flat:s.flat,unelevated:s.unelevated,color:s.color,textColor:s.textColor,label:s.i,tabindex:this.computedTabindex},on:cache(this,r+s.i,{click:()=>{this.__onDayClick(s.i)},focusin:()=>{this.__onDayMouseover(s.i)},mouseenter:()=>{this.__onDayMouseover(s.i)}})},e(s)):i(s)])))])])])]},__getMonthsView(t){const e=this.viewModel.year===this.today.year,i=t=>void 0!==this.minNav&&this.viewModel.year===this.minNav.year&&this.minNav.month>t||void 0!==this.maxNav&&this.viewModel.year===this.maxNav.year&&this.maxNav.montht("div",{staticClass:"q-date__months-item flex flex-center"},[t(QBtn,{key:"month#"+r,staticClass:!0===e&&this.today.month===r+1?"q-date__today":null,ref:this.viewModel.month===r+1?"viewTarget":void 0,props:Object.assign({label:n,tabindex:this.computedTabindex,disable:i(r+1)},this.viewModel.month===r+1?s:o),on:cache(this,"month#"+r,{click:()=>{this.__setMonth(r+1)}})})]));return!0===this.yearsInMonthView&&n.unshift(t("div",{staticClass:"row no-wrap full-width"},[this.__getNavigation(t,{label:this.viewModel.year,view:"Years",key:this.viewModel.year,dir:this.yearDirection,goTo:this.__goToYear,boundaries:this.navBoundaries.year,cls:" col"})])),t("div",{key:"kNavYM",staticClass:"q-date__view q-date__months flex flex-center",directives:cache(this,"kNavYM",[{name:"key-group-navigation",arg:"3"}])},n)},__getYearsView(t){const e=this.startYear,i=e+20,s=[],o=this.viewModel.year>=e&&this.viewModel.year<=i?this.viewModel.year:this.today.year>=e&&this.today.year<=i?this.today.year:e,n=t=>void 0!==this.minNav&&this.minNav.year>t||void 0!==this.maxNav&&this.maxNav.year{this.__setYear(r)}})})]))}return t("div",{staticClass:"q-date__view q-date__years flex flex-center"},[t("div",{staticClass:"col-auto"},[t(QBtn,{key:"y-",props:{round:!0,dense:!0,flat:!0,icon:this.dateArrow[0],tabindex:this.computedTabindex,disable:n(e)},on:cache(this,"y-",{click:()=>{this.startYear-=20}})})]),t("div",{key:"kNavYM",staticClass:"q-date__years-content col self-stretch row items-center",directives:cache(this,"kNavYM",[{name:"key-group-navigation",arg:"3"}])},s),t("div",{staticClass:"col-auto"},[t(QBtn,{key:"y+",props:{round:!0,dense:!0,flat:!0,icon:this.dateArrow[1],tabindex:this.computedTabindex,disable:n(i)},on:cache(this,"y+",{click:()=>{this.startYear+=20}})})])])},__fillDaysMeta(t,e,i,s,o,n){if(void 0!==this.daysMap[e]&&this.daysMap[e].filter(t=>t>=o&&t<=n).forEach(e=>{const i=s+e-1;Object.assign(t[i],{selected:!0,unelevated:!0,flat:!1,color:this.computedColor,textColor:this.computedTextColor})}),void 0!==this.rangeMap[e]&&this.rangeMap[e].forEach(e=>{const r=s+Math.max(o,void 0===e.from?1:e.from)-1,a=s+Math.min(n,void 0===e.to?i:e.to)-1;for(let i=r;i<=a;i++)Object.assign(t[i],{range:e.range,unelevated:!0,color:this.computedColor,textColor:this.computedTextColor});e.from>=o&&e.from<=n&&Object.assign(t[r],{rangeFrom:!0,flat:!1}),e.to>=o&&e.to<=n&&Object.assign(t[a],{rangeTo:!0,flat:!1})}),void 0!==this.rangeViewMap[e]){const i=s+Math.max(o,this.rangeViewMap[e].from)-1,r=s+Math.min(n,this.rangeViewMap[e].to)-1;for(let e=i;e<=r;e++)t[e].color=this.computedColor,t[e].editRange=!0;!0===this.rangeViewMap[e].includeFrom&&this.rangeViewMap[e].from>=o&&this.rangeViewMap[e].from<=n&&(t[i].editRangeFrom=!0),!0===this.rangeViewMap[e].includeTo&&this.rangeViewMap[e].to>=o&&this.rangeViewMap[e].to<=n&&(t[r].editRangeTo=!0)}},__goToMonth(t){let e=this.viewModel.year,i=Number(this.viewModel.month)+t;13===i?(i=1,e++):0===i&&(i=12,e--),this.__updateViewModel(e,i),!0===this.isImmediate&&this.__emitImmediately("month")},__goToYear(t){const e=Number(this.viewModel.year)+t;this.__updateViewModel(e,this.viewModel.month),!0===this.isImmediate&&this.__emitImmediately("year")},__setYear(t){this.__updateViewModel(t,this.viewModel.month),this.view="Years"===this.defaultView?"Months":"Calendar",!0===this.isImmediate&&this.__emitImmediately("year")},__setMonth(t){this.__updateViewModel(this.viewModel.year,t),this.view="Calendar",!0===this.isImmediate&&this.__emitImmediately("month")},__getMonthHash:t=>t.year+"/"+pad(t.month),__toggleDate(t,e){const i=this.daysMap[e];(void 0!==i&&!0===i.includes(t.day)?this.__removeFromModel:this.__addToModel)(t)},__getShortDate:t=>({year:t.year,month:t.month,day:t.day}),__onDayClick(t){const e={...this.viewModel,day:t};if(!1!==this.range)if(void 0===this.editRange){const i=this.days.find(e=>!0!==e.fill&&e.i===t);if(!0!==this.noUnset&&void 0!==i.range)return void this.__removeFromModel({target:e,from:i.range.from,to:i.range.to});if(!0===i.selected)return void this.__removeFromModel(e);const s=this.__getDayHash(e);this.editRange={init:e,initHash:s,final:e,finalHash:s},this.$emit("range-start",this.__getShortDate(e))}else{const t=this.editRange.initHash,i=this.__getDayHash(e),s=hashToInt(t)<=hashToInt(i)?{from:this.editRange.init,to:e}:{from:e,to:this.editRange.init};this.editRange=void 0,this.__addToModel(t===i&&!0!==this.dayAsRange?e:{target:e,...s}),this.$emit("range-end",{from:this.__getShortDate(s.from),to:this.__getShortDate(s.to)})}else this.__toggleDate(e,this.viewMonthHash.cur)},__onDayMouseover(t){if(void 0!==this.editRange){const e={...this.viewModel,day:t};Object.assign(this.editRange,{final:e,finalHash:this.__getDayHash(e)}),this.$emit("range-change",{from:this.__getShortDate(this.editRange.init),to:this.__getShortDate(this.editRange.final)})}},__updateViewModel(t,e){t=parseInt(t,10),e=parseInt(e,10),void 0!==this.minNav&&t<=this.minNav.year&&(t=this.minNav.year,e=this.maxNav.year&&(t=this.maxNav.year,e>this.maxNav.month&&(e=this.maxNav.month));const i=t+"/"+pad(e)+"/01";i!==this.viewModel.dateHash&&(this.monthDirection=hashToInt(this.viewModel.dateHash){this.startYear=t-t%20-(t<0?20:0),Object.assign(this.viewModel,{year:t,month:e,day:1,dateHash:i})}))},__emitValue(t,e,i){const s=null!==t&&1===t.length&&!1===this.multiple?t[0]:t;this.lastEmitValue=s;const{reason:o,details:n}=this.__getEmitParams(e,i);this.$emit("input",s,o,n)},__emitImmediately(t){const e=void 0!==this.daysModel[0]&&!0===modelIsValid(this.daysModel[0])?{...this.daysModel[0]}:{...this.viewModel};this.$nextTick(()=>{e.year=this.viewModel.year,e.month=this.viewModel.month;const i="persian"!==this.calendar?__safeCreateDate(e.year,e.month,0).getDate():jalaaliMonthLength(e.year,e.month);e.day=Math.min(Math.max(1,e.day),i);const s=this.__encodeEntry(e);this.lastEmitValue=s;const{details:o}=this.__getEmitParams("",e);this.$emit("input",s,t,o)})},__getEmitParams(t,e){return void 0!==e.from?{reason:`${t}-range`,details:{...this.__getShortDate(e.target),from:this.__getShortDate(e.from),to:this.__getShortDate(e.to),changed:!0}}:{reason:`${t}-day`,details:{...this.__getShortDate(e),changed:!0}}},__encodeEntry(t,e,i){return void 0!==t.from?{from:this.encodeObjectFn(t.from,e,i),to:this.encodeObjectFn(t.to,e,i)}:this.encodeObjectFn(t,e,i)},__addToModel(t){let e;if(!0===this.multiple)if(void 0!==t.from){const i=hashToInt(this.__getDayHash(t.from)),s=hashToInt(this.__getDayHash(t.to)),o=this.daysModel.filter(t=>{const e=hashToInt(t.dateHash);return es}),n=this.rangeModel.filter(({from:t,to:e})=>hashToInt(e.dateHash)s);e=o.concat(n).concat(t).map(t=>this.__encodeEntry(t))}else{const i=this.normalizedModel.slice();i.push(this.__encodeEntry(t)),e=i}else e=this.__encodeEntry(t);this.__emitValue(e,"add",t)},__removeFromModel(t){if(!0===this.noUnset)return;let e=null;if(!0===this.multiple&&!0===Array.isArray(this.value)){const i=this.__encodeEntry(t);0===(e=void 0!==t.from?this.value.filter(t=>void 0===t.from||t.from!==i.from&&t.to!==i.to):this.value.filter(t=>t!==i)).length&&(e=null)}this.__emitValue(e,"remove",t)},__updateValue(t,e,i){const s=this.daysModel.concat(this.rangeModel).map(i=>this.__encodeEntry(i,t,e)).filter(t=>void 0!==t.from?!0===modelIsValid(t.from)&&!0===modelIsValid(t.to):modelIsValid(t));this.$emit("input",(!0===this.multiple?s:s[0])||null,i)}},render(t){const e=[t("div",{staticClass:"q-date__content col relative-position"},[t("transition",{props:{name:"q-transition--fade"}},[this[`__get${this.view}View`](t)])])],i=slot(this,"default");return void 0!==i&&e.push(t("div",{staticClass:"q-date__actions"},i)),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{class:this.classes,attrs:this.attrs,directives:[KeyGroupNavigation],on:{...this.qListeners}},[this.__getHeader(t),t("div",{staticClass:"q-date__main col column"},e)])}}),HistoryMixin={methods:{__addHistory(){this.__historyEntry={condition:()=>!0===this.hideOnRouteChange,handler:this.hide},History.add(this.__historyEntry)},__removeHistory(){void 0!==this.__historyEntry&&(History.remove(this.__historyEntry),this.__historyEntry=void 0)}},beforeDestroy(){!0===this.showing&&this.__removeHistory()}};const{passive:passive$3}=listenOpts;let applyTimer,orientationTimer,closeTimer,registered=0,state={},iosScrollActive=!1;function iosScroll(){if(!1===iosScrollActive)return;const{innerHeight:t,visualViewport:e}=window,{clientHeight:i}=document.documentElement,s=t-Math.ceil(e.height*e.scale);0===s&&i>t?document.documentElement.scrollTop-=3:(s>1&&s<4&&(document.documentElement.scrollTop+=s-1),iosScrollActive=!1)}function onIosScroll(){!1!==iosScrollActive&&cancelAnimationFrame(iosScrollActive),iosScrollActive=requestAnimationFrame(iosScroll)}function onMobileRotate(){clearTimeout(orientationTimer),orientationTimer=setTimeout(()=>{requestAnimationFrame(()=>{const{documentElement:t,body:e}=document;t.style.height=`${window.innerHeight}px`,e.style.height=`${t.clientHeight+state.scrollTop}px`})},200)}function apply$1(t,e){const{documentElement:i,body:s}=document,{visualViewport:o}=window;if(clearTimeout(applyTimer),clearTimeout(orientationTimer),"add"===t){document.qScrollPrevented=!0;const t=getScrollbarWidth();requestAnimationFrame(()=>{const{innerHeight:n,innerWidth:r}=window,{overflowX:a,overflowY:l,backgroundColor:h}=window.getComputedStyle(s);if(state={htmlStyleBefore:i.style.cssText,bodyStyleBefore:s.style.cssText,htmlStyleAfter:"",bodyStyleAfter:"",scrollLeft:i.scrollLeft,scrollTop:i.scrollTop},!0===client.is.mobile)i.style.height=`${n}px`,s.style.width=`calc(100vw + ${Math.abs(state.scrollLeft)}px)`,s.style.height=`${n+state.scrollTop}px`,window.addEventListener("orientationchange",onMobileRotate,passive$3),void 0!==o&&!0===client.is.ios&&(applyTimer=setTimeout(()=>{o.addEventListener("scroll",onIosScroll,passive$3)},500));else{const{scrollWidth:o,scrollHeight:h}=s,c="hidden"!==a&&("scroll"===a||o>r)?t:0,d="hidden"!==l&&("scroll"===l||h>n)?t:0;(d>0||c>0)&&(d>0&&(i.style.width=`calc(100vw - ${d}px)`,!0===e&&(i.style.marginRight=`${d}px`)),c>0&&(i.style.height=`calc(100vh - ${c}px)`)),s.style.width=`calc(100vw + ${Math.abs(state.scrollLeft)-d}px)`,s.style.height=`calc(100vh + ${state.scrollTop-c}px)`}s.style.left=`${-state.scrollLeft}px`,s.style.top=`${-state.scrollTop}px`,s.style["padding"+(!0===e?"Left":"Right")]=`${Math.abs(state.scrollLeft)}px`,i.style.backgroundColor=h||"rgba(128, 128, 128, 0.01)",i.classList.add("q-body--prevent-scroll"),window.scrollTo(0,0),requestAnimationFrame(()=>{0!==s.scrollTop&&(s.scrollTop=0)}),i.style.setProperty("--q-scroll-lock-left",`${-state.scrollLeft}px`);const c=document.querySelectorAll(".q-menu__container, .q-tooltip__container");for(let t=c.length-1;t>=0;t--)"absolute"===c[t].style.position&&c[t].classList.add("q-body--scroll-locked");state.htmlStyleAfter=i.style.cssText.split(";").filter(t=>t.trim().length>0),state.bodyStyleAfter=s.style.cssText.split(";").filter(t=>t.trim().length>0)})}else!0===client.is.mobile&&(window.removeEventListener("orientationchange",onMobileRotate,passive$3),void 0!==o&&!0===client.is.ios&&(o.removeEventListener("scroll",onIosScroll,passive$3),iosScrollActive=!1)),requestAnimationFrame(()=>{i.classList.remove("q-body--prevent-scroll");const t=state.htmlStyleAfter.reduce((t,e)=>t.replace(e+";",""),i.style.cssText),e=state.bodyStyleAfter.reduce((t,e)=>t.replace(e+";",""),s.style.cssText);i.style.cssText=state.htmlStyleBefore+t,s.style.cssText=state.bodyStyleBefore+e;const o=document.querySelectorAll(".q-body--scroll-locked");for(let t=o.length-1;t>=0;t--)o[t].classList.remove("q-body--scroll-locked");window.scrollTo(state.scrollLeft,state.scrollTop),applyTimer=setTimeout(()=>{document.qScrollPrevented=!1,triggerIsScrollable()},50)})}function preventScroll(t,e){let i="add";if(!0===t){if(registered++,void 0!==closeTimer)return clearTimeout(closeTimer),void(closeTimer=void 0);if(registered>1)return}else{if(0===registered)return;if(--registered>0)return;if(i="remove",!0===client.is.ios&&!0===client.is.nativeMobile)return clearTimeout(closeTimer),void(closeTimer=setTimeout(()=>{apply$1(i,e),closeTimer=void 0},100))}apply$1(i,e)}var PreventScrollMixin={methods:{__preventScroll(t){t===this.preventedScroll||void 0===this.preventedScroll&&!0!==t||(this.preventedScroll=t,preventScroll(t,this.$q.lang.rtl))}}};const positionClass$1={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},transitions={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]};var QDialog=Vue.extend({name:"QDialog",mixins:[AttrsMixin,HistoryMixin,ModelToggleMixin,Portal,PreventScrollMixin,FocusWrapMixin],props:{persistent:Boolean,autoClose:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,position:{type:String,default:"standard",validator:t=>"standard"===t||["top","bottom","left","right"].includes(t)},transitionShow:String,transitionHide:String},watch:{seamless(t){!0===this.showing&&this.__preventScroll(!0!==t)}},computed:{classes(){return`q-dialog__inner--${!0===this.maximized?"maximized":"minimized"} `+`q-dialog__inner--${this.position} ${positionClass$1[this.position]}`+(!0===this.fullWidth?" q-dialog__inner--fullwidth":"")+(!0===this.fullHeight?" q-dialog__inner--fullheight":"")+(!0===this.square?" q-dialog__inner--square":"")},transitionProps(){const t=`q-transition--${void 0===this.transitionShow?transitions[this.position][0]:this.transitionShow}`,e=`q-transition--${void 0===this.transitionHide?transitions[this.position][1]:this.transitionHide}`;return{enterClass:`${t}-enter`,leaveClass:`${e}-leave`,appearClass:`${t}-appear`,enterToClass:`${t}-enter-to`,leaveToClass:`${e}-leave-to`,appearToClass:`${t}-appear-to`,enterActiveClass:`${t}-enter-active`,leaveActiveClass:`${e}-leave-active`,appearActiveClass:`${t}-appear-active`}},useBackdrop(){return!0===this.showing&&!0!==this.seamless},hideOnRouteChange(){return!0!==this.persistent&&!0!==this.noRouteDismiss&&!0!==this.seamless},onBackdropEvents(){return{focusin:this.__onBackdropClick}},onInnerEvents(){const t={...this.qListeners,input:stop,"popup-show":stop,"popup-hide":stop};return!0===this.autoClose&&(t.click=this.__onAutoClose),t},onTransitionEvents(){return{"before-enter":this.__onTransitionBeforeEnter,enter:this.__onTransitionEnter,"after-enter":this.__onTransitionAfterEnter,"enter-cancelled":this.__onTransitionEnterCancelled,"before-leave":this.__onTransitionBeforeLeave,"after-leave":this.__onTransitionAfterLeave}},attrs(){return{role:"dialog","aria-modal":!0===this.useBackdrop?"true":"false",...this.qAttrs}}},methods:{shake(t){t&&"function"==typeof t.focus?t.focus():this.__focusFirst(!0),this.$emit("shake");const e=this.__getInnerNode();void 0!==e&&(e.classList.remove("q-animate--scale"),e.classList.add("q-animate--scale"),clearTimeout(this.shakeTimeout),this.shakeTimeout=setTimeout(()=>{e.classList.remove("q-animate--scale")},170))},__show(){this.__addHistory(),this.__refocusTarget=!0===this.$q.platform.is.desktop&&!1===this.noRefocus&&null!==document.activeElement?document.activeElement:void 0,this.$el.dispatchEvent(create("popup-show",{bubbles:!0})),EscapeKey.register(this,()=>{!0!==this.seamless?!0===this.persistent||!0===this.noEscDismiss?!0!==this.maximized&&!0!==this.noShake?this.shake():this.__focusFirst(!0):(this.$emit("escape-key"),this.hide()):this.__focusCyclePortal()}),this.__showPortal()},__hide(){this.__removeHistory(),this.__cleanup(!0),this.$el.dispatchEvent(create("popup-hide",{bubbles:!0}))},__onTransitionBeforeEnter(t){!0===this.$q.platform.is.ios&&t.click(),!0!==this.seamless&&this.__preventScroll(!0),t.setAttribute("data-q-portal-animating",!0)},__onTransitionEnter(){!0!==this.noFocus&&this.focus()},__onTransitionAfterEnter(t){t.removeAttribute("data-q-portal-animating"),this.$emit("show",{target:t})},__onTransitionEnterCancelled(t){t.removeAttribute("data-q-portal-animating"),!0!==this.seamless&&this.__preventScroll(!1)},__onTransitionBeforeLeave(){!0!==this.showing&&(this.__focusCyclePortal(!0),!0!==this.seamless&&(document.documentElement.scrollTop=0))},__onTransitionAfterLeave(t){!0!==this.showing&&(this.__hidePortal(),!0!==this.seamless&&this.__preventScroll(!1),this.$emit("hide",{target:t}))},__onAutoClose(t){this.hide(t),void 0!==this.qListeners.click&&this.$emit("click",t)},__onBackdropClick(t){!0!==this.persistent&&!0!==this.noBackdropDismiss?this.hide(t):!0!==this.noShake&&this.shake(t.relatedTarget)},__cleanup(t){clearTimeout(this.shakeTimeout),!0!==t&&!0!==this.showing||EscapeKey.pop(this)},__renderPortal(t){return t("div",{staticClass:`q-dialog fullscreen no-pointer-events q-dialog--${!0===this.seamless?"seamless":"modal"}`,class:this.contentClass,style:this.contentStyle,attrs:this.attrs},[t("transition",{props:{name:"q-transition--fade"}},!0===this.useBackdrop?[t("div",{staticClass:"q-dialog__backdrop fixed-full",attrs:{...ariaHidden,tabindex:-1},on:this.onBackdropEvents})]:null),t("transition",{props:this.transitionProps,on:this.onTransitionEvents},[!0===this.showing?t("div",{ref:"inner",staticClass:"q-dialog__inner flex no-pointer-events",class:this.classes,attrs:{tabindex:-1},on:this.onInnerEvents},this.__getFocusWrappedContent("default")):null])])}},mounted(){this.__processModelChange(this.value)},beforeDestroy(){this.__cleanup(),this.__preventScroll(!1),this.__refocusTarget=void 0}});const duration=150,mouseEvents=["mouseover","mouseout","mouseenter","mouseleave"];var QDrawer=Vue.extend({name:"QDrawer",inject:{layout:{default(){console.error("QDrawer needs to be child of QLayout")}}},mixins:[DarkMixin,HistoryMixin,TimeoutMixin,ModelToggleMixin,PreventScrollMixin],directives:{TouchPan:TouchPan},props:{side:{type:String,default:"left",validator:t=>["left","right"].includes(t)},width:{type:Number,default:300},mini:Boolean,miniToOverlay:Boolean,miniWidth:{type:Number,default:57},breakpoint:{type:Number,default:1023},showIfAbove:Boolean,behavior:{type:String,validator:t=>["default","desktop","mobile"].includes(t),default:"default"},bordered:Boolean,elevated:Boolean,contentStyle:[String,Object,Array],contentClass:[String,Object,Array],overlay:Boolean,persistent:Boolean,noSwipeOpen:Boolean,noSwipeClose:Boolean,noSwipeBackdrop:Boolean},data(){const t="mobile"===this.behavior||"desktop"!==this.behavior&&this.layout.totalWidth<=this.breakpoint;return{belowBreakpoint:t,showing:!0===this.showIfAbove&&!1===t||!0===this.value}},watch:{belowBreakpoint(t){!0===t?(this.lastDesktopState=this.showing,!0===this.showing&&this.hide(!1)):!1===this.overlay&&"mobile"!==this.behavior&&!1!==this.lastDesktopState&&(!0===this.showing?(this.__applyPosition(0),this.__applyBackdrop(0),this.__cleanup()):this.show(!1))},"layout.totalWidth"(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),!0!==this.layout.container?this.clearExecuteWhenScrollable=executeWhenScrollable(this.__updateBelowBreakpoint):this.__updateBelowBreakpoint()},side(t,e){this.layout.instances[e]===this&&(this.layout.instances[e]=void 0,this.layout[e].space=!1,this.layout[e].offset=0),this.layout.instances[t]=this,this.layout[t].size=this.size,this.layout[t].space=this.onLayout,this.layout[t].offset=this.offset},behavior(){this.__updateBelowBreakpoint()},breakpoint(){this.__updateBelowBreakpoint()},"layout.container"(t){!0===this.showing&&this.__preventScroll(!0!==t),!0===t&&this.__updateBelowBreakpoint()},"layout.scrollbarWidth"(){this.__applyPosition(!0===this.showing?0:void 0)},offset(t){this.__update("offset",t)},onLayout(t){this.$emit("on-layout",t),this.__update("space",t)},rightSide(){this.__applyPosition()},size(t){this.__applyPosition(),this.__updateSizeOnLayout(this.miniToOverlay,t)},miniToOverlay(t){this.__updateSizeOnLayout(t,this.size)},"$q.lang.rtl"(){this.__applyPosition()},mini(){!0===this.value&&(this.__animateMini(),this.layout.__animate())},isMini(t){this.$emit("mini-state",t)}},computed:{rightSide(){return"right"===this.side},otherSide(){return!0===this.rightSide?"left":"right"},offset(){return!0===this.showing&&!1===this.belowBreakpoint&&!1===this.overlay?!0===this.miniToOverlay?this.miniWidth:this.size:0},size(){return!0===this.isMini?this.miniWidth:this.width},fixed(){return!0===this.overlay||!0===this.miniToOverlay||this.layout.view.indexOf(this.rightSide?"R":"L")>-1||this.$q.platform.is.ios&&!0===this.layout.container},onLayout(){return!0===this.showing&&!1===this.belowBreakpoint&&!1===this.overlay},onScreenOverlay(){return!0===this.showing&&!1===this.belowBreakpoint&&!0===this.overlay},backdropClass(){return!1===this.showing?"no-pointer-events":null},headerSlot(){return!0===this.rightSide?"r"===this.layout.rows.top[2]:"l"===this.layout.rows.top[0]},footerSlot(){return!0===this.rightSide?"r"===this.layout.rows.bottom[2]:"l"===this.layout.rows.bottom[0]},aboveStyle(){const t={};return!0===this.layout.header.space&&!1===this.headerSlot&&(!0===this.fixed?t.top=`${this.layout.header.offset}px`:!0===this.layout.header.space&&(t.top=`${this.layout.header.size}px`)),!0===this.layout.footer.space&&!1===this.footerSlot&&(!0===this.fixed?t.bottom=`${this.layout.footer.offset}px`:!0===this.layout.footer.space&&(t.bottom=`${this.layout.footer.size}px`)),t},style(){const t={width:`${this.size}px`};return!0===this.belowBreakpoint?t:Object.assign(t,this.aboveStyle)},classes(){return`q-drawer--${this.side}`+(!0===this.bordered?" q-drawer--bordered":"")+` q-drawer--${this.darkSuffix} q-${this.darkSuffix}`+(!0!==this.showing?" q-layout--prevent-focus":"")+(!0===this.belowBreakpoint?" fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding":` q-drawer--${!0===this.isMini?"mini":"standard"}`+(!0===this.fixed||!0!==this.onLayout?" fixed":"")+(!0===this.overlay||!0===this.miniToOverlay?" q-drawer--on-top":"")+(!0===this.headerSlot?" q-drawer--top-padding":""))},stateDirection(){return(!0===this.$q.lang.rtl?-1:1)*(!0===this.rightSide?1:-1)},isMini(){return!0===this.mini&&!0!==this.belowBreakpoint},onNativeEvents(){if(!0!==this.belowBreakpoint){const t={"!click":t=>{this.$emit("click",t)}};return mouseEvents.forEach(e=>{t[e]=(t=>{void 0!==this.qListeners[e]&&this.$emit(e,t)})}),t}},onBackdropEvents(){return{click:this.hide,touchmove:stopAndPrevent}},hideOnRouteChange(){return!0!==this.persistent&&(!0===this.belowBreakpoint||!0===this.onScreenOverlay)},onOpenerEvents:()=>({touchstart:stopAndPrevent}),openDirective(){const t=!0===this.$q.lang.rtl?this.side:this.otherSide;return[{name:"touch-pan",value:this.__openByTouch,modifiers:{[t]:!0,mouse:!0,prevent:!0}}]},contentCloseDirective(){if(!0!==this.noSwipeClose){const t=!0===this.$q.lang.rtl?this.otherSide:this.side;return[{name:"touch-pan",value:this.__closeByTouch,modifiers:{[t]:!0,mouse:!0}}]}},backdropCloseDirective(){if(!0!==this.noSwipeBackdrop){const t=!0===this.$q.lang.rtl?this.otherSide:this.side;return[{name:"touch-pan",value:this.__closeByTouch,modifiers:{[t]:!0,mouse:!0,mouseAllDir:!0}}]}}},methods:{__applyPosition(t){void 0===t?this.$nextTick(()=>{t=!0===this.showing?0:this.size,this.__applyPosition(this.stateDirection*t)}):void 0!==this.$refs.content&&(!0!==this.layout.container||!0!==this.rightSide||!0!==this.belowBreakpoint&&Math.abs(t)!==this.size?!0!==this.layout.container&&!0===this.rightSide&&!0===this.belowBreakpoint&&(t+=(!0===this.$q.lang.rtl?-1:1)*this.layout.scrollbarWidth):t+=this.stateDirection*this.layout.scrollbarWidth,this.__lastPosition!==t&&(this.$refs.content.style.transform=`translateX(${t}px)`,this.__lastPosition=t))},__applyBackdrop(t,e){void 0!==this.$refs.backdrop?this.$refs.backdrop.style.opacity=this.lastBackdropOpacity=.4*t:!0!==e&&this.$nextTick(()=>{this.__applyBackdrop(t,!0)})},__setBackdropVisible(t){void 0!==this.$refs.backdrop&&this.$refs.backdrop.classList[!0===t?"remove":"add"]("no-pointer-events")},__setScrollable(t){const e=!0===t?"remove":!0!==this.layout.container?"add":"";""!==e&&document.body.classList[e]("q-body--drawer-toggle")},__animateMini(){void 0!==this.timerMini?clearTimeout(this.timerMini):void 0!==this.$el&&this.$el.classList.add("q-drawer--mini-animate"),this.timerMini=setTimeout(()=>{void 0!==this.$el&&this.$el.classList.remove("q-drawer--mini-animate"),this.timerMini=void 0},150)},__openByTouch(t){if(!1!==this.showing)return;const e=this.size,i=between(t.distance.x,0,e);if(!0===t.isFinal){const t=this.$refs.content,s=i>=Math.min(75,e);return t.classList.remove("no-transition"),void(!0===s?this.show():(this.layout.__animate(),this.__applyBackdrop(0),this.__applyPosition(this.stateDirection*e),t.classList.remove("q-drawer--delimiter"),t.classList.add("q-layout--prevent-focus"),this.__setBackdropVisible(!1)))}if(this.__applyPosition((!0===this.$q.lang.rtl?!0!==this.rightSide:this.rightSide)?Math.max(e-i,0):Math.min(0,i-e)),this.__applyBackdrop(between(i/e,0,1)),!0===t.isFirst){const t=this.$refs.content;t.classList.add("no-transition"),t.classList.add("q-drawer--delimiter"),t.classList.remove("q-layout--prevent-focus"),this.__setBackdropVisible(!0)}},__closeByTouch(t){if(!0!==this.showing)return;const e=this.size,i=t.direction===this.side,s=(!0===this.$q.lang.rtl?!0!==i:i)?between(t.distance.x,0,e):0;if(!0===t.isFinal){const t=Math.abs(s){!1!==t&&this.__setScrollable(!0),!0!==e&&this.$emit("show",t)},150)},__hide(t,e){this.__removeHistory(),!1!==t&&this.layout.__animate(),this.__applyBackdrop(0),this.__applyPosition(this.stateDirection*this.size),this.__setBackdropVisible(!1),this.__cleanup(),!0!==e?this.__registerTimeout(()=>{this.$emit("hide",t)},150):this.__removeTimeout()},__cleanup(){this.__preventScroll(!1),this.__setScrollable(!0)},__update(t,e){this.layout[this.side][t]!==e&&(this.layout[this.side][t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__updateSizeOnLayout(t,e){this.__update("size",!0===t?this.miniWidth:e)},__updateBelowBreakpoint(){this.__updateLocal("belowBreakpoint","mobile"===this.behavior||"desktop"!==this.behavior&&this.layout.totalWidth<=this.breakpoint)}},created(){this.__useTimeout("__registerTimeout","__removeTimeout"),this.layout.instances[this.side]=this,this.__updateSizeOnLayout(this.miniToOverlay,this.size),this.__update("space",this.onLayout),this.__update("offset",this.offset),!0===this.showIfAbove&&!0!==this.value&&!0===this.showing&&void 0!==this.qListeners.input&&this.$emit("input",!0)},mounted(){this.$emit("on-layout",this.onLayout),this.$emit("mini-state",this.isMini),this.lastDesktopState=!0===this.showIfAbove;const t=()=>{this[`__${!0===this.showing?"show":"hide"}`](!1,!0)};0===this.layout.totalWidth?this.watcher=this.$watch("layout.totalWidth",()=>{this.watcher(),this.watcher=void 0,!1===this.showing&&!0===this.showIfAbove&&!1===this.belowBreakpoint?this.show(!1):t()}):this.$nextTick(t)},beforeDestroy(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),void 0!==this.watcher&&this.watcher(),clearTimeout(this.timerMini),!0===this.showing&&this.__cleanup(),this.layout.instances[this.side]===this&&(this.layout.instances[this.side]=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},render(t){const e=[];!0===this.belowBreakpoint&&(!0!==this.noSwipeOpen&&e.push(t("div",{staticClass:`q-drawer__opener fixed-${this.side}`,attrs:ariaHidden,directives:this.openDirective,on:this.onOpenerEvents})),e.push(t("div",{ref:"backdrop",staticClass:"fullscreen q-drawer__backdrop",class:this.backdropClass,attrs:ariaHidden,style:void 0!==this.lastBackdropOpacity?{opacity:this.lastBackdropOpacity}:null,on:this.onBackdropEvents,directives:!1===this.showing?void 0:this.backdropCloseDirective})));const i=[t("div",{staticClass:"q-drawer__content fit "+(!0===this.layout.container?"overflow-auto":"scroll"),class:this.contentClass,style:this.contentStyle},!0===this.isMini&&void 0!==this.$scopedSlots.mini?this.$scopedSlots.mini():slot(this,"default"))];return!0===this.elevated&&!0===this.showing&&i.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(t("aside",{ref:"content",staticClass:"q-drawer",class:this.classes,style:this.style,on:this.onNativeEvents,directives:!0===this.belowBreakpoint?this.contentCloseDirective:void 0},i)),t("div",{staticClass:"q-drawer-container"},e)}});const attrs$3={role:"tooltip"};var QTooltip=Vue.extend({name:"QTooltip",mixins:[AnchorMixin,TimeoutMixin,ModelToggleMixin,Portal,TransitionMixin],props:{minHeight:{type:String,default:null},minWidth:{type:String,default:null},maxHeight:{type:String,default:null},maxWidth:{type:String,default:null},transitionShow:{default:"jump-down"},transitionHide:{default:"jump-up"},anchor:{type:String,default:"bottom middle",validator:validatePosition},self:{type:String,default:"top middle",validator:validatePosition},offset:{type:Array,default:()=>[14,14],validator:validateOffset},scrollTarget:{default:void 0},delay:{type:Number,default:0},hideDelay:{type:Number,default:0}},computed:{anchorOrigin(){return parsePosition(this.anchor,this.$q.lang.rtl)},selfOrigin(){return parsePosition(this.self,this.$q.lang.rtl)},hideOnRouteChange(){return!0!==this.persistent}},methods:{__show(t){this.__showPortal(),this.__registerTick(()=>{this.updatePosition(),this.__configureScrollTarget()}),void 0===this.unwatch&&(this.unwatch=this.$watch(()=>this.$q.screen.width+"|"+this.$q.screen.height+"|"+this.self+"|"+this.anchor+"|"+this.$q.lang.rtl,this.updatePosition)),this.__registerTimeout(()=>{this.$emit("show",t)},300)},__hide(t){this.__removeTick(),this.__anchorCleanup(),this.__registerTimeout(()=>{!0!==this.showing&&(this.__hidePortal(),this.$emit("hide",t))},300)},__anchorCleanup(){void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0),this.__unconfigureScrollTarget(),cleanEvt(this,"tooltipTemp"),cleanEvt(this,"tooltipPreventMenu"),cleanEvt(this,"anchorTemp")},updatePosition(){if(void 0===this.anchorEl||void 0===this.__portal)return;const t=this.__portal.$el;8!==t.nodeType?(void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),this.settingPosition=requestAnimationFrame(()=>{setPosition({el:t,offset:this.offset,anchorEl:this.anchorEl,anchorOrigin:this.anchorOrigin,selfOrigin:this.selfOrigin,minHeight:this.minHeight,minWidth:this.minWidth,maxHeight:this.maxHeight,maxWidth:this.maxWidth,rtl:this.$q.lang.rtl}),this.settingPosition=void 0})):setTimeout(this.updatePosition,25)},__delayShow(t){if(!0===this.$q.platform.is.mobile){if(this.showing)return;clearSelection(),document.body.classList.add("non-selectable");const t=this.anchorEl;addEvt(this,"tooltipTemp",["touchcancel","touchend","click"].map(e=>[t,e,"__clearPreventContextMenu","passiveCapture"]).concat([[document,"touchstart","__delayHide","passiveCapture"]])),addEvt(this,"tooltipPreventMenu",[[document,"contextmenu","prevent","capture"]])}this.__registerTimeout(()=>{this.show(t)},this.delay)},__delayHide(t){const e=this.__getInnerNode();if(void 0!==e&&t)if("mouseleave"===t.type){if(!0===e.contains(t.relatedTarget))return cleanEvt(this,"anchorTemp"),void addEvt(this,"anchorTemp",[[e,"mouseleave","__delayHide","passive"]])}else if(!0===e.contains(t.target))return;!0===this.$q.platform.is.mobile?(cleanEvt(this,"tooltipTemp"),cleanEvt(this,"tooltipPreventMenu"),clearSelection(),setTimeout(()=>{document.body.classList.remove("non-selectable")},10)):cleanEvt(this,"anchorTemp"),this.__registerTimeout(()=>{this.hide(t)},this.hideDelay)},__clearPreventContextMenu(){cleanEvt(this,"tooltipPreventMenu")},__configureAnchorEl(){if(!0===this.noParentEvent||void 0===this.anchorEl)return;addEvt(this,"anchor",!0===this.$q.platform.is.mobile?[[this.anchorEl,"touchstart","__delayShow","passive"]]:[[this.anchorEl,"mouseenter","__delayShow","passive"],[this.anchorEl,"mouseleave","__delayHide","passive"]])},__unconfigureScrollTarget(){this.__changeScrollEvent()},__configureScrollTarget(){if(!0===this.showing&&(void 0!==this.anchorEl||void 0!==this.scrollTarget)){const t=!0===this.noParentEvent?this.updatePosition:this.hide;this.__changeScrollEvent(t,getScrollTarget(this.anchorEl,this.scrollTarget))}},__renderPortal(t){return t("transition",{props:this.transitionProps},[!0===this.showing?t("div",{staticClass:"q-tooltip__container column no-pointer-events"},[t("div",{ref:"inner",staticClass:"q-tooltip q-tooltip--style scroll all-pointer-events",class:this.contentClass,style:this.contentStyle,attrs:attrs$3},slot(this,"default"))]):null])}},created(){this.__useTick("__registerTick","__removeTick"),this.__useTimeout("__registerTimeout")},mounted(){this.__processModelChange(this.value)},beforeDestroy(){void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition)}});const attrs$2={role:"list"};var QList=Vue.extend({name:"QList",mixins:[ListenersMixin,DarkMixin],props:{bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean},computed:{classes(){return"q-list"+(!0===this.bordered?" q-list--bordered":"")+(!0===this.dense?" q-list--dense":"")+(!0===this.separator?" q-list--separator":"")+` q-list--${this.darkSuffix}`+(!0===this.padding?" q-list--padding":"")}},render(t){return t("div",{class:this.classes,attrs:attrs$2,on:{...this.qListeners}},slot(this,"default"))}}),QItem=Vue.extend({name:"QItem",mixins:[DarkMixin,RouterLinkMixin,TagMixin,ListenersMixin],props:{active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},computed:{isActionable(){return!0===this.clickable||!0===this.hasLink||"label"===this.tag},isClickable(){return!0!==this.disable&&!0===this.isActionable},classes(){return"q-item q-item-type row no-wrap"+(!0===this.dense?" q-item--dense":"")+`q-item--${this.darkSuffix}`+(!0===this.hasLink&&null===this.active?this.linkClass:!0===this.active?` q-item--active${void 0!==this.activeClass?` ${this.activeClass}`:""} `:"")+(!0===this.disable?" disabled":"")+(!0===this.isClickable?" q-item--clickable q-link cursor-pointer "+(!0===this.manualFocus?"q-manual-focusable":"q-focusable q-hoverable")+(!0===this.focused?" q-manual-focusable--focused":""):"")},style(){if(void 0!==this.insetLevel){return{["padding"+(!0===this.$q.lang.rtl?"Right":"Left")]:16+56*this.insetLevel+"px"}}},onEvents(){return{...this.qListeners,focus:this.__onFocus,click:this.__onClick,keyup:this.__onKeyup}}},methods:{__onClick(t){!0===this.isClickable&&(this.__refocus(),this.__navigateOnClick(t))},__onFocus(t){!0===this.isClickable&&this.__refocus(),void 0!==this.qListeners.focus&&this.$emit("focus",t)},__onKeyup(t){if(!0===this.isClickable&&!0===isKeyCode(t,13)){stopAndPrevent(t);const e=new MouseEvent("click",t);this.$el.dispatchEvent(e)}this.$emit("keyup",t)},__getContent(t){const e=uniqueSlot(this,"default",[]);return!0===this.isClickable&&e.unshift(t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"})),e},__refocus(){!0===this.$q.interaction.isPointer&&void 0!==this.$refs.blurTarget&&document.activeElement===this.$el?this.$refs.blurTarget.focus():!0===this.$q.interaction.isKeyboard&&document.activeElement===this.$refs.blurTarget&&this.$el.focus()}},render(t){const e={class:this.classes,style:this.style,attrs:{role:"listitem"},on:this.onEvents};return!0===this.isClickable?(e.attrs.tabindex=this.tabindex||"0",Object.assign(e.attrs,this.linkAttrs)):!0===this.isActionable&&(e.attrs["aria-disabled"]="true"),t(this.linkTag,e,this.__getContent(t))}}),QItemSection=Vue.extend({name:"QItemSection",mixins:[ListenersMixin],props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},computed:{classes(){const t=this.avatar||this.side||this.thumbnail;return{"q-item__section--top":this.top,"q-item__section--avatar":this.avatar,"q-item__section--thumbnail":this.thumbnail,"q-item__section--side":t,"q-item__section--nowrap":this.noWrap,"q-item__section--main":!t,[`justify-${this.top?"start":"center"}`]:!0}}},render(t){return t("div",{staticClass:"q-item__section column",class:this.classes,on:{...this.qListeners}},slot(this,"default"))}});function run(t,e,i){e.handler?e.handler(t,i,i.caret):i.runCmd(e.cmd,e.param)}function __getGroup(t,e){return t("div",{staticClass:"q-editor__toolbar-group"},e)}function getBtn(t,e,i,s,o=!1){const n=o||"toggle"===i.type&&(i.toggled?i.toggled(e):i.cmd&&e.caret.is(i.cmd,i.param)),r=[],a={click(t){s&&s(),run(t,i,e)}};if(i.tip&&e.$q.platform.is.desktop){const e=i.key?t("div",[t("small",`(CTRL + ${String.fromCharCode(i.key)})`)]):null;r.push(t(QTooltip,{props:{delay:1e3}},[t("div",{domProps:{innerHTML:i.tip}}),e]))}return t(QBtn,{props:{...e.buttonProps,icon:null!==i.icon?i.icon:void 0,color:n?i.toggleColor||e.toolbarToggleColor:i.color||e.toolbarColor,textColor:n&&!e.toolbarPush?null:i.textColor||e.toolbarTextColor,label:i.label,disable:!!i.disable&&("function"!=typeof i.disable||i.disable(e)),size:"sm"},on:a},r)}function getDropdown(t,e,i){const s="only-icons"===i.list;let o,n,r=i.label,a=null!==i.icon?i.icon:void 0;function l(){c.componentInstance.hide()}if(s)n=i.options.map(i=>{const s=void 0===i.type&&e.caret.is(i.cmd,i.param);return s&&(r=i.tip,a=null!==i.icon?i.icon:void 0),getBtn(t,e,i,l,s)}),o=e.toolbarBackgroundClass,n=[__getGroup(t,n)];else{const s=void 0!==e.toolbarToggleColor?`text-${e.toolbarToggleColor}`:null,h=void 0!==e.toolbarTextColor?`text-${e.toolbarTextColor}`:null,c="no-icons"===i.list;n=i.options.map(i=>{const o=!!i.disable&&i.disable(e),n=void 0===i.type&&e.caret.is(i.cmd,i.param);n&&(r=i.tip,a=null!==i.icon?i.icon:void 0);const d=i.htmlTip;return t(QItem,{props:{active:n,activeClass:s,clickable:!0,disable:o,dense:!0},on:{click(t){l(),e.$refs.content&&e.$refs.content.focus(),e.caret.restore(),run(t,i,e)}}},[!0===c?null:t(QItemSection,{class:n?s:h,props:{side:!0}},[t(QIcon,{props:{name:null!==i.icon?i.icon:void 0}})]),t(QItemSection,[d?t("div",{staticClass:"text-no-wrap",domProps:{innerHTML:i.htmlTip}}):i.tip?t("div",{staticClass:"text-no-wrap"},[i.tip]):null])])}),o=[e.toolbarBackgroundClass,h],n=[t(QList,[n])]}const h=i.highlight&&r!==i.label,c=t(QBtnDropdown,{props:{...e.buttonProps,noCaps:!0,noWrap:!0,color:h?e.toolbarToggleColor:e.toolbarColor,textColor:h&&!e.toolbarPush?null:e.toolbarTextColor,label:i.fixedLabel?i.label:r,icon:i.fixedIcon?null!==i.icon?i.icon:void 0:a,contentClass:o}},n);return c}function getToolbar(t,e){if(e.caret)return e.buttons.filter(t=>!e.isViewingSource||t.find(t=>"viewsource"===t.cmd)).map(i=>__getGroup(t,i.map(i=>(!e.isViewingSource||"viewsource"===i.cmd)&&("slot"===i.type?slot(e,i.slot):"dropdown"===i.type?getDropdown(t,e,i):getBtn(t,e,i)))))}function getFonts(t,e,i,s={}){const o=Object.keys(s);if(0===o.length)return{};const n={default_font:{cmd:"fontName",param:t,icon:i,tip:e}};return o.forEach(t=>{const e=s[t];n[t]={cmd:"fontName",param:e,icon:i,tip:e,htmlTip:`${e}`}}),n}function getLinkEditor(t,e,i){if(e.caret){const s=e.toolbarColor||e.toolbarTextColor;let o=e.editLinkUrl;const n=()=>{e.caret.restore(),o!==e.editLinkUrl&&document.execCommand("createLink",!1,""===o?" ":o),e.editLinkUrl=null,!0===i&&e.$nextTick(e.__onInput)};return[t("div",{staticClass:"q-mx-xs",class:`text-${s}`},[`${e.$q.lang.editor.url}: `]),t("input",{key:"qedt_btm_input",staticClass:"col q-editor__link-input",domProps:{value:o},on:{input:t=>{stop(t),o=t.target.value},keydown:t=>{if(!0!==shouldIgnoreKey(t))switch(t.keyCode){case 13:return prevent(t),n();case 27:prevent(t),e.caret.restore(),e.editLinkUrl&&"https://"!==e.editLinkUrl||document.execCommand("unlink"),e.editLinkUrl=null}}}}),__getGroup(t,[t(QBtn,{key:"qedt_btm_rem",attrs:{tabindex:-1},props:{...e.buttonProps,label:e.$q.lang.label.remove,noCaps:!0},on:{click:()=>{e.caret.restore(),document.execCommand("unlink"),e.editLinkUrl=null,!0===i&&e.$nextTick(e.__onInput)}}}),t(QBtn,{key:"qedt_btm_upd",props:{...e.buttonProps,label:e.$q.lang.label.update,noCaps:!0},on:{click:n}})])]}}function getBlockElement(t,e){if(e&&t===e)return null;const i=t.nodeName.toLowerCase();if(!0===["div","li","ul","ol","blockquote"].includes(i))return t;const s=(window.getComputedStyle?window.getComputedStyle(t):t.currentStyle).display;return"block"===s||"table"===s?t:getBlockElement(t.parentNode)}function isChildOf(t,e,i){return!(!t||t===document.body)&&(!0===i&&t===e||(e===document?document.body:e).contains(t.parentNode))}function createRange(t,e,i){if(i||((i=document.createRange()).selectNode(t),i.setStart(t,0)),0===e.count)i.setEnd(t,e.count);else if(e.count>0)if(t.nodeType===Node.TEXT_NODE)t.textContent.length0}get range(){const t=this.selection;return null!==t&&t.rangeCount?t.getRangeAt(0):this._range}get parent(){const t=this.range;if(null!==t){const e=t.startContainer;return e.nodeType===document.ELEMENT_NODE?e:e.parentNode}return null}get blockParent(){const t=this.parent;return null!==t?getBlockElement(t,this.el):null}save(t=this.range){null!==t&&(this._range=t)}restore(t=this._range){const e=document.createRange(),i=document.getSelection();null!==t?(e.setStart(t.startContainer,t.startOffset),e.setEnd(t.endContainer,t.endOffset),i.removeAllRanges(),i.addRange(e)):(i.selectAllChildren(this.el),i.collapseToEnd())}savePosition(){let t,e=-1;const i=document.getSelection(),s=this.el.parentNode;if(i.focusNode&&isChildOf(i.focusNode,s))for(t=i.focusNode,e=i.focusOffset;t&&t!==s;)t!==this.el&&t.previousSibling?e+=(t=t.previousSibling).textContent.length:t=t.parentNode;this.savedPos=e}restorePosition(t=0){if(this.savedPos>0&&this.savedPos\n \n \n Print - ${document.title}\n \n \n
${this.el.innerHTML}
\n \n \n `),t.print(),void t.close()}if("link"===t){const t=this.getParentAttribute("href");if(null===t){const t=this.selectWord(this.selection),e=t?t.toString():"";if(!(e.length||this.range&&this.range.cloneContents().querySelector("img")))return;this.vm.editLinkUrl=urlRegex.test(e)?e:"https://",document.execCommand("createLink",!1,this.vm.editLinkUrl),this.save(t.getRangeAt(0))}else this.vm.editLinkUrl=t,this.range.selectNodeContents(this.parent),this.save();return}if("fullscreen"===t)return this.vm.toggleFullscreen(),void i();if("viewsource"===t)return this.vm.isViewingSource=!1===this.vm.isViewingSource,this.vm.__setContent(this.vm.value),void i()}document.execCommand(t,!1,e),i()}selectWord(t){if(null===t||!0!==t.isCollapsed||void 0===t.modify)return t;const e=document.createRange();e.setStart(t.anchorNode,t.anchorOffset),e.setEnd(t.focusNode,t.focusOffset);const i=e.collapsed?["backward","forward"]:["forward","backward"];e.detach();const s=t.focusNode,o=t.focusOffset;return t.collapse(t.anchorNode,t.anchorOffset),t.modify("move",i[0],"character"),t.modify("move",i[1],"word"),t.extend(s,o),t.modify("extend",i[1],"character"),t.modify("extend",i[0],"word"),t}}const toString=Object.prototype.toString,hasOwn=Object.prototype.hasOwnProperty,notPlainObject=new Set(["Boolean","Number","String","Function","Array","Date","RegExp"].map(t=>"[object "+t+"]"));function isPlainObject(t){if(t!==Object(t)||!0===notPlainObject.has(toString.call(t)))return!1;if(t.constructor&&!1===hasOwn.call(t,"constructor")&&!1===hasOwn.call(t.constructor.prototype,"isPrototypeOf"))return!1;let e;for(e in t);return void 0===e||hasOwn.call(t,e)}function extend(){let t,e,i,s,o,n,r=arguments[0]||{},a=1,l=!1;const h=arguments.length;for("boolean"==typeof r&&(l=r,r=arguments[1]||{},a=2),Object(r)!==r&&"function"!=typeof r&&(r={}),h===a&&(r=this,a--);a0===t.length||t.every(t=>t.length),default:()=>[["left","center","right","justify"],["bold","italic","underline","strike"],["undo","redo"]]},toolbarColor:String,toolbarBg:String,toolbarTextColor:String,toolbarToggleColor:{type:String,default:"primary"},toolbarOutline:Boolean,toolbarPush:Boolean,toolbarRounded:Boolean,paragraphTag:{type:String,validator:t=>["div","p"].includes(t),default:"div"},contentStyle:Object,contentClass:[Object,Array,String],square:Boolean,flat:Boolean,dense:Boolean},computed:{editable(){return!this.readonly&&!this.disable},hasToolbar(){return this.toolbar&&this.toolbar.length>0},toolbarBackgroundClass(){if(this.toolbarBg)return`bg-${this.toolbarBg}`},buttonProps(){return{type:"a",flat:!0!==this.toolbarOutline&&!0!==this.toolbarPush,noWrap:!0,outline:this.toolbarOutline,push:this.toolbarPush,rounded:this.toolbarRounded,dense:!0,color:this.toolbarColor,disable:!this.editable,size:"sm"}},buttonDef(){const t=this.$q.lang.editor,e=this.$q.iconSet.editor;return{bold:{cmd:"bold",icon:e.bold,tip:t.bold,key:66},italic:{cmd:"italic",icon:e.italic,tip:t.italic,key:73},strike:{cmd:"strikeThrough",icon:e.strikethrough,tip:t.strikethrough,key:83},underline:{cmd:"underline",icon:e.underline,tip:t.underline,key:85},unordered:{cmd:"insertUnorderedList",icon:e.unorderedList,tip:t.unorderedList},ordered:{cmd:"insertOrderedList",icon:e.orderedList,tip:t.orderedList},subscript:{cmd:"subscript",icon:e.subscript,tip:t.subscript,htmlTip:"x2"},superscript:{cmd:"superscript",icon:e.superscript,tip:t.superscript,htmlTip:"x2"},link:{cmd:"link",disable:t=>t.caret&&!t.caret.can("link"),icon:e.hyperlink,tip:t.hyperlink,key:76},fullscreen:{cmd:"fullscreen",icon:e.toggleFullscreen,tip:t.toggleFullscreen,key:70},viewsource:{cmd:"viewsource",icon:e.viewSource,tip:t.viewSource},quote:{cmd:"formatBlock",param:"BLOCKQUOTE",icon:e.quote,tip:t.quote,key:81},left:{cmd:"justifyLeft",icon:e.left,tip:t.left},center:{cmd:"justifyCenter",icon:e.center,tip:t.center},right:{cmd:"justifyRight",icon:e.right,tip:t.right},justify:{cmd:"justifyFull",icon:e.justify,tip:t.justify},print:{type:"no-state",cmd:"print",icon:e.print,tip:t.print,key:80},outdent:{type:"no-state",disable:t=>t.caret&&!t.caret.can("outdent"),cmd:"outdent",icon:e.outdent,tip:t.outdent},indent:{type:"no-state",disable:t=>t.caret&&!t.caret.can("indent"),cmd:"indent",icon:e.indent,tip:t.indent},removeFormat:{type:"no-state",cmd:"removeFormat",icon:e.removeFormat,tip:t.removeFormat},hr:{type:"no-state",cmd:"insertHorizontalRule",icon:e.hr,tip:t.hr},undo:{type:"no-state",cmd:"undo",icon:e.undo,tip:t.undo,key:90},redo:{type:"no-state",cmd:"redo",icon:e.redo,tip:t.redo,key:89},h1:{cmd:"formatBlock",param:"H1",icon:e.heading1||e.heading,tip:t.heading1,htmlTip:`

${t.heading1}

`},h2:{cmd:"formatBlock",param:"H2",icon:e.heading2||e.heading,tip:t.heading2,htmlTip:`

${t.heading2}

`},h3:{cmd:"formatBlock",param:"H3",icon:e.heading3||e.heading,tip:t.heading3,htmlTip:`

${t.heading3}

`},h4:{cmd:"formatBlock",param:"H4",icon:e.heading4||e.heading,tip:t.heading4,htmlTip:`

${t.heading4}

`},h5:{cmd:"formatBlock",param:"H5",icon:e.heading5||e.heading,tip:t.heading5,htmlTip:`
${t.heading5}
`},h6:{cmd:"formatBlock",param:"H6",icon:e.heading6||e.heading,tip:t.heading6,htmlTip:`
${t.heading6}
`},p:{cmd:"formatBlock",param:this.paragraphTag.toUpperCase(),icon:e.heading,tip:t.paragraph},code:{cmd:"formatBlock",param:"PRE",icon:e.code,htmlTip:`${t.code}`},"size-1":{cmd:"fontSize",param:"1",icon:e.size1||e.size,tip:t.size1,htmlTip:`${t.size1}`},"size-2":{cmd:"fontSize",param:"2",icon:e.size2||e.size,tip:t.size2,htmlTip:`${t.size2}`},"size-3":{cmd:"fontSize",param:"3",icon:e.size3||e.size,tip:t.size3,htmlTip:`${t.size3}`},"size-4":{cmd:"fontSize",param:"4",icon:e.size4||e.size,tip:t.size4,htmlTip:`${t.size4}`},"size-5":{cmd:"fontSize",param:"5",icon:e.size5||e.size,tip:t.size5,htmlTip:`${t.size5}`},"size-6":{cmd:"fontSize",param:"6",icon:e.size6||e.size,tip:t.size6,htmlTip:`${t.size6}`},"size-7":{cmd:"fontSize",param:"7",icon:e.size7||e.size,tip:t.size7,htmlTip:`${t.size7}`}}},buttons(){const t=this.definitions||{},e=this.definitions||this.fonts?extend(!0,{},this.buttonDef,t,getFonts(this.defaultFont,this.$q.lang.editor.defaultFont,this.$q.iconSet.editor.font,this.fonts)):this.buttonDef;return this.toolbar.map(i=>i.map(i=>{if(i.options)return{type:"dropdown",icon:i.icon,label:i.label,size:"sm",dense:!0,fixedLabel:i.fixedLabel,fixedIcon:i.fixedIcon,highlight:i.highlight,list:i.list,options:i.options.map(t=>e[t])};const s=e[i];return s?"no-state"===s.type||t[i]&&(void 0===s.cmd||this.buttonDef[s.cmd]&&"no-state"===this.buttonDef[s.cmd].type)?s:Object.assign({type:"toggle"},s):{type:"slot",slot:i}}))},keys(){const t={},e=e=>{e.key&&(t[e.key]={cmd:e.cmd,param:e.param})};return this.buttons.forEach(t=>{t.forEach(t=>{t.options?t.options.forEach(e):e(t)})}),t},innerStyle(){return this.inFullscreen?this.contentStyle:[{minHeight:this.minHeight,height:this.height,maxHeight:this.maxHeight},this.contentStyle]},classes(){return`q-editor q-editor--${!0===this.isViewingSource?"source":"default"}`+(!0===this.disable?" disabled":"")+(!0===this.inFullscreen?" fullscreen column":"")+(!0===this.square?" q-editor--square no-border-radius":"")+(!0===this.flat?" q-editor--flat":"")+(!0===this.dense?" q-editor--dense":"")+` q-editor--${this.darkSuffix} q-${this.darkSuffix}`},innerClass(){return[this.contentClass,{col:this.inFullscreen,"overflow-auto":this.inFullscreen||this.maxHeight}]},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0},onEditor(){return{focusin:this.__onFocusin,focusout:this.__onFocusout}}},data(){return{lastEmit:this.value,editLinkUrl:null,isViewingSource:!1}},watch:{value(t){this.lastEmit!==t&&(this.lastEmit=t,this.__setContent(t,!0))}},methods:{__onInput(){if(void 0!==this.$refs.content){const t=!0===this.isViewingSource?this.$refs.content.innerText:this.$refs.content.innerHTML;t!==this.value&&(this.lastEmit=t,this.$emit("input",t))}},__onKeydown(t){if(this.$emit("keydown",t),!0!==t.ctrlKey||!0===shouldIgnoreKey(t))return this.refreshToolbar(),void(this.$q.platform.is.ie&&this.$nextTick(this.__onInput));const e=t.keyCode,i=this.keys[e];if(void 0!==i){const{cmd:e,param:s}=i;stopAndPrevent(t),this.runCmd(e,s,!1)}},__onClick(t){this.refreshToolbar(),this.$emit("click",t)},__onBlur(t){if(void 0!==this.$refs.content){const{scrollTop:t,scrollHeight:e}=this.$refs.content;this.__offsetBottom=e-t}!0!==this.$q.platform.is.ie&&this.caret.save(),this.$emit("blur",t)},__onFocus(t){this.$nextTick(()=>{void 0!==this.$refs.content&&void 0!==this.__offsetBottom&&(this.$refs.content.scrollTop=this.$refs.content.scrollHeight-this.__offsetBottom)}),this.$emit("focus",t)},__onFocusin(t){if(!0===this.$el.contains(t.target)&&(null===t.relatedTarget||!0!==this.$el.contains(t.relatedTarget))){const t=`inner${!0===this.isViewingSource?"Text":"HTML"}`;this.caret.restorePosition(this.$refs.content[t].length),this.refreshToolbar()}},__onFocusout(t){!0!==this.$el.contains(t.target)||null!==t.relatedTarget&&!0===this.$el.contains(t.relatedTarget)||(this.caret.savePosition(),this.refreshToolbar())},__onPointerStart(t){this.__offsetBottom=void 0,void 0!==this.qListeners[t.type]&&this.$emit(t.type,t)},__onSelectionchange(){this.caret.save()},runCmd(t,e,i=!0){this.focus(),this.caret.restore(),this.caret.apply(t,e,()=>{this.focus(),this.caret.save(),!0!==this.$q.platform.is.ie&&!0!==this.$q.platform.is.edge||this.$nextTick(this.__onInput),i&&this.refreshToolbar()})},refreshToolbar(){setTimeout(()=>{this.editLinkUrl=null,this.$forceUpdate()},1)},focus(){void 0!==this.$refs.content&&this.$refs.content.focus({preventScroll:!0})},getContentEl(){return this.$refs.content},__setContent(t,e){if(void 0!==this.$refs.content){!0===e&&this.caret.savePosition();const i=`inner${!0===this.isViewingSource?"Text":"HTML"}`;this.$refs.content[i]=t,!0===e&&(this.caret.restorePosition(this.$refs.content[i].length),this.refreshToolbar())}}},created(){!1===isSSR&&(document.execCommand("defaultParagraphSeparator",!1,this.paragraphTag),this.defaultFont=window.getComputedStyle(document.body).fontFamily)},mounted(){this.caret=new Caret(this.$refs.content,this),this.__setContent(this.value),this.refreshToolbar(),document.addEventListener("selectionchange",this.__onSelectionchange)},beforeDestroy(){document.removeEventListener("selectionchange",this.__onSelectionchange)},render(t){let e;if(this.hasToolbar){const i=[t("div",{key:"qedt_top",staticClass:"q-editor__toolbar row no-wrap scroll-x",class:this.toolbarBackgroundClass},getToolbar(t,this))];null!==this.editLinkUrl&&i.push(t("div",{key:"qedt_btm",staticClass:"q-editor__toolbar row no-wrap items-center scroll-x",class:this.toolbarBackgroundClass},getLinkEditor(t,this,this.$q.platform.is.ie))),e=t("div",{key:"toolbar_ctainer",staticClass:"q-editor__toolbars-container relative-position",directives:[KeyGroupNavigation]},i)}const i={...this.qListeners,input:this.__onInput,keydown:this.__onKeydown,click:this.__onClick,blur:this.__onBlur,focus:this.__onFocus,mousedown:this.__onPointerStart,touchstart:this.__onPointerStart};return t("div",{style:{height:!0===this.inFullscreen?"100%":null},class:this.classes,attrs:this.attrs,on:this.onEditor},[e,t("div",{ref:"content",staticClass:"q-editor__content",style:this.innerStyle,class:this.innerClass,attrs:{contenteditable:this.editable,placeholder:this.placeholder},domProps:isSSR?{innerHTML:this.value}:void 0,on:i})])}}),QItemLabel=Vue.extend({name:"QItemLabel",mixins:[ListenersMixin],props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},computed:{classes(){return{"q-item__label--overline text-overline":this.overline,"q-item__label--caption text-caption":this.caption,"q-item__label--header":this.header,ellipsis:1===parseInt(this.lines,10)}},style(){if(void 0!==this.lines&&parseInt(this.lines,10)>1)return{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":this.lines}}},render(t){return t("div",{staticClass:"q-item__label",style:this.style,class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QSlideTransition=Vue.extend({name:"QSlideTransition",props:{appear:Boolean,duration:{type:Number,default:300}},methods:{__begin(t,e,i){t.style.overflowY="hidden",void 0!==e&&(t.style.height=`${e}px`),t.style.transition=`height ${this.duration}ms cubic-bezier(.25, .8, .50, 1)`,this.animating=!0,this.done=i},__end(t,e){t.style.overflowY=null,t.style.height=null,t.style.transition=null,this.__cleanup(),e!==this.lastEvent&&this.$emit(e)},__cleanup(){this.done&&this.done(),this.done=null,this.animating=!1,clearTimeout(this.timer),clearTimeout(this.timerFallback),void 0!==this.el&&this.el.removeEventListener("transitionend",this.animListener),this.animListener=null}},beforeDestroy(){this.animating&&this.__cleanup()},render(t){return t("transition",{key:"tr",props:{css:!1,appear:this.appear},on:cache(this,"tr",{enter:(t,e)=>{let i=0;this.el=t,!0===this.animating?(this.__cleanup(),i=t.offsetHeight===t.scrollHeight?0:void 0):this.lastEvent="hide",this.__begin(t,i,e),this.timer=setTimeout(()=>{t.style.height=`${t.scrollHeight}px`,this.animListener=(e=>{Object(e)===e&&e.target!==t||this.__end(t,"show")}),t.addEventListener("transitionend",this.animListener),this.timerFallback=setTimeout(this.animListener,1.1*this.duration)},100)},leave:(t,e)=>{let i;this.el=t,!0===this.animating?this.__cleanup():(this.lastEvent="show",i=t.scrollHeight),this.__begin(t,i,e),this.timer=setTimeout(()=>{t.style.height=0,this.animListener=(e=>{Object(e)===e&&e.target!==t||this.__end(t,"hide")}),t.addEventListener("transitionend",this.animListener),this.timerFallback=setTimeout(this.animListener,1.1*this.duration)},100)}})},slot(this,"default"))}});const insetMap={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},margins={xs:2,sm:4,md:8,lg:16,xl:24};var QSeparator=Vue.extend({name:"QSeparator",mixins:[DarkMixin,ListenersMixin],props:{spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},computed:{orientation(){return!0===this.vertical?"vertical":"horizontal"},classPrefix(){return` q-separator--${this.orientation}`},insetClass(){return!1!==this.inset?`${this.classPrefix}-${insetMap[this.inset]}`:""},classes(){return`q-separator${this.classPrefix}${this.insetClass}`+(void 0!==this.color?` bg-${this.color}`:"")+` q-separator--${this.darkSuffix}`},style(){const t={};if(void 0!==this.size&&(t[!0===this.vertical?"width":"height"]=this.size),!1!==this.spaced){const e=!0===this.spaced?`${margins.md}px`:this.spaced in margins?`${margins[this.spaced]}px`:this.spaced,i=!0===this.vertical?["Left","Right"]:["Top","Bottom"];t[`margin${i[0]}`]=t[`margin${i[1]}`]=e}return t},attrs(){return{"aria-orientation":this.orientation}}},render(t){return t("hr",{staticClass:"q-separator",class:this.classes,style:this.style,attrs:this.attrs,on:{...this.qListeners}})}});const eventName="q:expansion-item:close",LINK_PROPS=Object.keys(routerLinkProps);var QExpansionItem=Vue.extend({name:"QExpansionItem",mixins:[DarkMixin,TimeoutMixin,ModelToggleMixin],props:{...routerLinkProps,icon:String,label:String,labelLines:[Number,String],caption:String,captionLines:[Number,String],dense:Boolean,toggleAriaLabel:String,expandIcon:String,expandedIcon:String,expandIconClass:[Array,String,Object],duration:Number,headerInsetLevel:Number,contentInsetLevel:Number,expandSeparator:Boolean,defaultOpened:Boolean,hideExpandIcon:Boolean,expandIconToggle:Boolean,switchToggleSide:Boolean,denseToggle:Boolean,group:String,popup:Boolean,headerStyle:[Array,String,Object],headerClass:[Array,String,Object]},data(){return{showing:void 0!==this.value?this.value:this.defaultOpened}},watch:{showing(t){!0===t&&(!0!==this.shouldRenderContent&&(this.shouldRenderContent=!0),void 0!==this.group&&this.$root.$emit(eventName,this))},group(t,e){void 0!==t&&void 0===e?this.$root.$on(eventName,this.__eventHandler):void 0===t&&void 0!==e&&this.$root.$off(eventName,this.__eventHandler)}},computed:{classes(){return`q-expansion-item--${!0===this.showing?"expanded":"collapsed"}`+` q-expansion-item--${!0===this.popup?"popup":"standard"}`},contentStyle(){if(void 0!==this.contentInsetLevel){return{["padding"+(!0===this.$q.lang.rtl?"Right":"Left")]:56*this.contentInsetLevel+"px"}}},hasLink(){return!0!==this.disable&&(void 0!==this.href||void 0!==this.to&&null!==this.to&&""!==this.to)},linkProps(){const t={};return LINK_PROPS.forEach(e=>{t[e]=this[e]}),t},isClickable(){return!0===this.hasLink||!0!==this.expandIconToggle},expansionIcon(){return void 0!==this.expandedIcon&&!0===this.showing?this.expandedIcon:this.expandIcon||this.$q.iconSet.expansionItem[!0===this.denseToggle?"denseIcon":"icon"]},activeToggleIcon(){return!0!==this.disable&&(!0===this.hasLink||!0===this.expandIconToggle)},headerSlotScope(){return{expanded:!0===this.showing,detailsId:this.targetUid,toggle:this.toggle,show:this.show,hide:this.hide}},toggleAriaAttrs(){const t=void 0!==this.toggleAriaLabel?this.toggleAriaLabel:this.$q.lang.label[!0===this.showing?"collapse":"expand"](this.label);return{role:"button","aria-expanded":!0===this.showing?"true":"false","aria-owns":this.targetUid,"aria-controls":this.targetUid,"aria-label":t}}},methods:{__onHeaderClick(t){!0!==this.hasLink&&this.toggle(t),this.$emit("click",t)},__toggleIconKeyboard(t){13===t.keyCode&&this.__toggleIcon(t)},__toggleIcon(t){!0===this.$q.interaction.isPointer&&void 0!==this.$refs.blurTarget&&document.activeElement!==this.$refs.blurTarget?this.$refs.blurTarget.focus():!0===this.$q.interaction.isKeyboard&&document.activeElement===this.$refs.blurTarget&&this.$refs.blurTarget.parentNode.focus(),this.toggle(t),stopAndPrevent(t)},__eventHandler(t){this!==t&&this.group===t.group&&this.hide()},__getToggleIcon(t){const e={staticClass:`q-focusable relative-position cursor-pointer${!0===this.denseToggle&&!0===this.switchToggleSide?" items-end":""}`,class:this.expandIconClass,props:{side:!0!==this.switchToggleSide,avatar:this.switchToggleSide}},i=[t(QIcon,{staticClass:"q-expansion-item__toggle-icon",class:void 0===this.expandedIcon&&!0===this.showing?"q-expansion-item__toggle-icon--rotated":void 0,props:{name:this.expansionIcon}})];return!0===this.activeToggleIcon&&(Object.assign(e,{key:"inpExt",attrs:{tabindex:0,...this.toggleAriaAttrs},on:cache(this,"inpExt",{click:this.__toggleIcon,keyup:this.__toggleIconKeyboard})}),i.unshift(t("div",{ref:"blurTarget",staticClass:"q-expansion-item__toggle-focus q-icon q-focus-helper q-focus-helper--rounded",attrs:{tabindex:-1}}))),t(QItemSection,e,i)},__getHeader(t){let e;void 0!==this.$scopedSlots.header?e=[].concat(this.$scopedSlots.header(this.headerSlotScope)):(e=[t(QItemSection,[t(QItemLabel,{props:{lines:this.labelLines}},[this.label||""]),this.caption?t(QItemLabel,{props:{lines:this.captionLines,caption:!0}},[this.caption]):null])],this.icon&&e[!0===this.switchToggleSide?"push":"unshift"](t(QItemSection,{props:{side:!0===this.switchToggleSide,avatar:!0!==this.switchToggleSide}},[t(QIcon,{props:{name:this.icon}})]))),!0!==this.disable&&!0!==this.hideExpandIcon&&e[!0===this.switchToggleSide?"unshift":"push"](this.__getToggleIcon(t));const i={ref:"item",style:this.headerStyle,class:this.headerClass,props:{dark:this.dark,disable:this.disable,dense:this.dense,insetLevel:this.headerInsetLevel}};return!0===this.isClickable&&(i.props.clickable=!0,!0===this.hasLink?Object.assign(i.props,this.linkProps):i.attrs=this.toggleAriaAttrs,i.on={...this.qListeners,click:this.__onHeaderClick}),t(QItem,i,e)},__getContent(t){const e=[this.__getHeader(t),t(QSlideTransition,{key:"slide",props:{duration:this.duration},on:cache(this,"slide",{show:()=>{this.$emit("after-show")},hide:()=>{this.$emit("after-hide")}})},[t("div",{staticClass:"q-expansion-item__content relative-position",style:this.contentStyle,attrs:{id:this.targetUid},directives:[{name:"show",value:this.showing}]},!0===this.shouldRenderContent?slot(this,"default"):void 0)])];return this.expandSeparator&&e.push(t(QSeparator,{staticClass:"q-expansion-item__border q-expansion-item__border--top absolute-top",props:{dark:this.dark}}),t(QSeparator,{staticClass:"q-expansion-item__border q-expansion-item__border--bottom absolute-bottom",props:{dark:this.dark}})),e}},render(t){return t("div",{staticClass:"q-expansion-item q-item-type",class:this.classes},[t("div",{staticClass:"q-expansion-item__container relative-position"},this.__getContent(t))])},created(){this.shouldRenderContent=!0===this.showing,void 0!==this.group&&this.$root.$on(eventName,this.__eventHandler),this.targetUid=`e_${uid$3()}`},beforeDestroy(){void 0!==this.group&&this.$root.$off(eventName,this.__eventHandler)}});const labelPositions=["top","right","bottom","left"];var FabMixin={mixins:[ListenersMixin],props:{type:{type:String,default:"a"},outline:Boolean,push:Boolean,flat:Boolean,unelevated:Boolean,color:String,textColor:String,glossy:Boolean,square:Boolean,padding:String,label:{type:[String,Number],default:""},labelPosition:{type:String,default:"right",validator:t=>labelPositions.includes(t)},externalLabel:Boolean,hideLabel:{type:Boolean},labelClass:[Array,String,Object],labelStyle:[Array,String,Object],disable:Boolean,tabindex:[Number,String]},computed:{formClass(){return`q-fab--form-${!0===this.square?"square":"rounded"}`},stacked(){return!1===this.externalLabel&&["top","bottom"].includes(this.labelPosition)},labelProps(){if(!0===this.externalLabel){const t=null===this.hideLabel?!1===this.showing:this.hideLabel;return{action:"push",data:{staticClass:"q-fab__label q-tooltip--style q-fab__label--external"+` q-fab__label--external-${this.labelPosition}`+(!0===t?" q-fab__label--external-hidden":""),style:this.labelStyle,class:this.labelClass}}}return{action:["left","top"].includes(this.labelPosition)?"unshift":"push",data:{staticClass:`q-fab__label q-fab__label--internal q-fab__label--internal-${this.labelPosition}`+(!0===this.hideLabel?" q-fab__label--internal-hidden":""),style:this.labelStyle,class:this.labelClass}}}}};const directions=["up","right","down","left"],alignValues=["left","center","right"];var QFab=Vue.extend({name:"QFab",inheritAttrs:!1,mixins:[FabMixin,AttrsMixin,ModelToggleMixin],provide(){return{__qFab:this}},props:{icon:String,activeIcon:String,hideIcon:Boolean,hideLabel:{default:null},direction:{type:String,default:"right",validator:t=>directions.includes(t)},persistent:Boolean,verticalActionsAlign:{type:String,default:"center",validator:t=>alignValues.includes(t)}},data(){return{showing:!0===this.value}},computed:{hideOnRouteChange(){return!0!==this.persistent},classes(){return`q-fab--align-${this.verticalActionsAlign} ${this.formClass}`+(!0===this.showing?" q-fab--opened":"")},actionsClasses(){return`q-fab__actions--${this.direction}`+(!0===this.showing?" q-fab__actions--opened":"")},actionsAttrs(){const t={id:this.targetUid};return!0===this.showing?t.role="menu":t["aria-hidden"]="true",t},iconHolderClasses(){return!0===this.showing?"q-fab__icon-holder--opened":""},attrs(){return{"aria-expanded":!0===this.showing?"true":"false","aria-haspopup":"true","aria-controls":this.targetUid,"aria-owns":this.targetUid,...this.qAttrs}},slotScope(){return{opened:this.showing}}},methods:{__onChildClick(t){this.hide(t),this.$refs.trigger&&this.$refs.trigger.$el&&this.$refs.trigger.$el.focus()},__getIcon(t,e,i){const s=this.$scopedSlots[e],o=`q-fab__${e} absolute-full`;return void 0===s?t(QIcon,{staticClass:o,props:{name:this[i]||this.$q.iconSet.fab[i]}}):t("div",{staticClass:o},s(this.slotScope))}},render(t){const e=[];return!0!==this.hideIcon&&e.push(t("div",{staticClass:"q-fab__icon-holder",class:this.iconHolderClasses},[this.__getIcon(t,"icon","icon"),this.__getIcon(t,"active-icon","activeIcon")])),""===this.label&&void 0===this.$scopedSlots.label||e[this.labelProps.action](t("div",this.labelProps.data,void 0!==this.$scopedSlots.label?this.$scopedSlots.label(this.slotScope):[this.label])),t("div",{staticClass:"q-fab z-fab row inline justify-center",class:this.classes,on:{...this.qListeners}},[t(QBtn,{key:"tog",ref:"trigger",class:this.formClass,props:{...this.$props,noWrap:!0,stack:this.stacked,align:void 0,icon:void 0,label:void 0,noCaps:!0,fab:!0},attrs:this.attrs,on:cache(this,"tog",{click:this.toggle})},mergeSlot(e,this,"tooltip")),t("div",{staticClass:"q-fab__actions flex no-wrap inline",class:this.actionsClasses,attrs:this.actionsAttrs},slot(this,"default"))])},created(){this.targetUid=`fb_${uid$3()}`}});const anchorMap={start:"self-end",center:"self-center",end:"self-start"},anchorValues=Object.keys(anchorMap);var QFabAction=Vue.extend({name:"QFabAction",mixins:[FabMixin],props:{icon:{type:String,default:""},anchor:{type:String,validator:t=>anchorValues.includes(t)},to:[String,Object],replace:Boolean},inject:{__qFab:{default:()=>({showing:!0,__onChildClick:noop})}},computed:{classes(){const t=anchorMap[this.anchor];return this.formClass+(void 0!==t?` ${t}`:"")},onEvents(){return{...this.qListeners,click:this.click}},isDisabled(){return!0!==this.__qFab.showing||!0===this.disable}},methods:{click(t){this.__qFab.__onChildClick(t),this.$emit("click",t)}},render(t){const e=[];return void 0!==this.$scopedSlots.icon?e.push(this.$scopedSlots.icon()):""!==this.icon&&e.push(t(QIcon,{props:{name:this.icon}})),""===this.label&&void 0===this.$scopedSlots.label||e[this.labelProps.action](t("div",this.labelProps.data,void 0!==this.$scopedSlots.label?this.$scopedSlots.label():[this.label])),t(QBtn,{class:this.classes,props:{...this.$props,noWrap:!0,stack:this.stacked,icon:void 0,label:void 0,noCaps:!0,fabMini:!0,disable:this.isDisabled},on:this.onEvents},mergeSlot(e,this,"default"))}});const lazyRulesValues=[!0,!1,"ondemand"];var ValidateMixin={props:{value:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],validator:t=>lazyRulesValues.includes(t)}},data:()=>({isDirty:null,innerError:!1,innerErrorMessage:void 0}),watch:{value(){this.__validateIfNeeded()},disable(t){!0===t?this.__resetValidation():this.__validateIfNeeded(!0)},reactiveRules:{handler(t){!0===t?void 0===this.unwatchRules&&(this.unwatchRules=this.$watch("rules",()=>{this.__validateIfNeeded(!0)})):void 0!==this.unwatchRules&&(this.unwatchRules(),this.unwatchRules=void 0)},immediate:!0},focused(t){!0===t?null===this.isDirty&&(this.isDirty=!1):!1===this.isDirty&&(this.isDirty=!0,!0===this.hasActiveRules&&"ondemand"!==this.lazyRules&&!1===this.innerLoading&&this.debouncedValidate())},hasError(t){const e=document.getElementById(this.targetUid);null!==e&&e.setAttribute("aria-invalid",!0===t)}},computed:{hasRules(){return void 0!==this.rules&&null!==this.rules&&this.rules.length>0},hasActiveRules(){return!0!==this.disable&&!0===this.hasRules},hasError(){return!0===this.error||!0===this.innerError},computedErrorMessage(){return"string"==typeof this.errorMessage&&this.errorMessage.length>0?this.errorMessage:this.innerErrorMessage}},created(){this.debouncedValidate=debounce(this.validate,0)},mounted(){this.validateIndex=0},beforeDestroy(){void 0!==this.unwatchRules&&this.unwatchRules(),this.debouncedValidate.cancel()},methods:{resetValidation(){this.isDirty=null,this.__resetValidation()},validate(t=this.value){if(!0!==this.hasActiveRules)return!0;const e=++this.validateIndex,i=!0!==this.innerLoading?()=>!0!==this.isDirty&&(this.isDirty=!0):()=>{},s=(t,e)=>{!0===t&&i(),this.innerError!==t&&(this.innerError=t);const s=e||void 0;this.innerErrorMessage!==s&&(this.innerErrorMessage=s),!1!==this.innerLoading&&(this.innerLoading=!1)},o=[];for(let e=0;e{if(void 0===t||!1===Array.isArray(t)||0===t.length)return e===this.validateIndex&&s(!1),!0;const i=t.find(t=>!1===t||"string"==typeof t);return e===this.validateIndex&&s(void 0!==i,i),void 0===i},t=>(e===this.validateIndex&&(console.error(t),s(!0)),!1)))},__resetValidation(){this.debouncedValidate.cancel(),this.validateIndex++,this.innerLoading=!1,this.innerError=!1,this.innerErrorMessage=void 0},__validateIfNeeded(t){!0===this.hasActiveRules&&"ondemand"!==this.lazyRules&&(!0===this.isDirty||!0!==this.lazyRules&&!0!==t)&&this.debouncedValidate()}}};function getTargetUid(t){return void 0===t?`f_${uid$3()}`:t}const parentStyles=new WeakMap;var QField=Vue.extend({name:"QField",mixins:[DarkMixin,ValidateMixin,AttrsMixin],inheritAttrs:!1,props:{label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,outlinedMd:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String,maxlength:[Number,String],maxValues:[Number,String]},data(){return{focused:!1,targetUid:getTargetUid(this.for),innerLoading:!1}},watch:{for(t){this.targetUid=getTargetUid(t)}},computed:{editable(){return!0!==this.disable&&!0!==this.readonly},hasValue(){const t=void 0===this.__getControl?this.value:this.innerValue;return void 0!==t&&null!==t&&(""+t).length>0},computedCounter(){if(!1!==this.counter){const t="string"==typeof this.value||"number"==typeof this.value?(""+this.value).length:!0===Array.isArray(this.value)?this.value.length:0,e=void 0!==this.maxlength?this.maxlength:this.maxValues;return t+(void 0!==e?" / "+e:"")}},floatingLabel(){return!0===this.stackLabel||!0===this.focused||"number"==typeof this.inputValue||"string"==typeof this.inputValue&&this.inputValue.length>0||!0!==this.hideSelected&&!0===this.hasValue||void 0!==this.displayValue&&null!==this.displayValue&&(""+this.displayValue).length>0},shouldRenderBottom(){return!0===this.bottomSlots||void 0!==this.hint||!0===this.hasRules||!0===this.counter||null!==this.error},classes(){const t="outlined"===this.styleType&&!0===this.outlinedMd?"md":"std";return{[this.fieldClass]:void 0!==this.fieldClass,[`q-field--${this.styleType}`]:!0,[`q-field--outlined--${t}`]:"outlined"===this.styleType,"q-field--rounded":this.rounded,"q-field--square":this.square,"q-field--focused":!0===this.focused,"q-field--highlighted":!0===this.focused||!0===this.hasError,"q-field--float":this.floatingLabel,"q-field--labeled":this.hasLabel,[`q-field--labeled--${t}`]:this.hasLabel,"q-field--dense":this.dense,"q-field--item-aligned q-item-type":this.itemAligned,[`q-field--${this.darkSuffix}`]:!0,"q-field--auto-height":void 0===this.__getControl,"q-field--with-bottom":!0!==this.hideBottomSpace&&!0===this.shouldRenderBottom,"q-field--error":this.hasError,"q-field--readonly":!0===this.readonly&&!0!==this.disable,"q-field--disabled":!0===this.disable}},styleType(){return!0===this.filled?"filled":!0===this.outlined||!0===this.outlinedMd?"outlined":!0===this.borderless?"borderless":this.standout?"standout":"standard"},contentClass(){const t=[];if(!0===this.hasError)t.push("text-negative");else{if("string"==typeof this.standout&&this.standout.length>0&&!0===this.focused)return this.standout;void 0!==this.color&&t.push("text-"+this.color)}return void 0!==this.bgColor&&t.push(`bg-${this.bgColor}`),t},hasLabel(){return!0===this.labelSlot||void 0!==this.label},labelClass(){if(void 0!==this.labelColor&&!0!==this.hasError)return"text-"+this.labelColor},controlSlotScope(){return{id:this.targetUid,field:this.$el,editable:this.editable,focused:this.focused,floatingLabel:this.floatingLabel,value:this.value,emitValue:this.__emitValue}},bottomSlotScope(){return{id:this.targetUid,field:this.$el,editable:this.editable,focused:this.focused,value:this.value,errorMessage:this.computedErrorMessage}},attrs(){const t={for:this.targetUid};return!0===this.disable?t["aria-disabled"]="true":!0===this.readonly&&(t["aria-readonly"]="true"),t}},methods:{focus(){this.__focus()},blur(){const t=document.activeElement;null!==t&&this.$el.contains(t)&&t.blur()},__focus(){const t=document.activeElement;let e=this.$refs.target;void 0===e||null!==t&&t.id===this.targetUid||(!0===e.hasAttribute("tabindex")||(e=e.querySelector("[tabindex]")),null!==e&&managedFocus(e))},__getContent(t){const e=[];return void 0!==this.$scopedSlots.prepend&&e.push(t("div",{staticClass:"q-field__prepend q-field__marginal row no-wrap items-center",key:"prepend",on:this.slotsEvents},this.$scopedSlots.prepend())),e.push(t("div",{staticClass:"q-field__control-container col relative-position row no-wrap q-anchor--skip"},this.__getControlContainer(t))),!0===this.hasError&&!1===this.noErrorIcon&&e.push(this.__getInnerAppendNode(t,"error",[t(QIcon,{props:{name:this.$q.iconSet.field.error,color:"negative"}})])),!0===this.loading||!0===this.innerLoading?e.push(this.__getInnerAppendNode(t,"inner-loading-append",void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():[t(QSpinner,{props:{color:this.color}})])):!0===this.clearable&&!0===this.hasValue&&!0===this.editable&&e.push(this.__getInnerAppendNode(t,"inner-clearable-append",[t(QIcon,{staticClass:"q-field__focusable-action",props:{tag:"button",name:this.clearIcon||this.$q.iconSet.field.clear},attrs:iconAsButton,on:this.clearableEvents})])),void 0!==this.$scopedSlots.append&&e.push(t("div",{staticClass:"q-field__append q-field__marginal row no-wrap items-center",key:"append",on:this.slotsEvents},this.$scopedSlots.append())),void 0!==this.__getInnerAppend&&e.push(this.__getInnerAppendNode(t,"inner-append",this.__getInnerAppend(t))),void 0!==this.__getControlChild&&e.push(this.__getControlChild(t)),e},__getControlContainer(t){const e=[];void 0!==this.prefix&&null!==this.prefix&&e.push(t("div",{staticClass:"q-field__prefix no-pointer-events row items-center"},[this.prefix])),!0===this.hasShadow&&void 0!==this.__getShadowControl&&e.push(this.__getShadowControl(t)),void 0!==this.__getControl?e.push(this.__getControl(t)):void 0!==this.$scopedSlots.rawControl?e.push(this.$scopedSlots.rawControl()):void 0!==this.$scopedSlots.control&&e.push(t("div",{ref:"target",staticClass:"q-field__native row",attrs:{tabindex:-1,...this.qAttrs,"data-autofocus":this.autofocus||void 0}},this.$scopedSlots.control(this.controlSlotScope)));const i=[slot(this,"label",this.label)];return!0===this.outlinedMd&&i.unshift(t("div",{staticClass:"q-field__label-back",style:{backgroundColor:this.__getBgColor()}})),!0===this.hasLabel&&e.push(t("div",{staticClass:"q-field__label no-pointer-events absolute ellipsis",class:this.labelClass},i)),void 0!==this.suffix&&null!==this.suffix&&e.push(t("div",{staticClass:"q-field__suffix no-pointer-events row items-center"},[this.suffix])),e.concat(void 0!==this.__getDefaultSlot?this.__getDefaultSlot(t):slot(this,"default"))},__getBottom(t){let e,i;!0===this.hasError?(i="q--slot-error",void 0!==this.$scopedSlots.error?e=this.$scopedSlots.error(this.bottomSlotScope):void 0!==this.computedErrorMessage&&(e=[t("div",{attrs:{role:"alert"}},[this.computedErrorMessage])],i=this.computedErrorMessage)):!0===this.hideHint&&!0!==this.focused||(i="q--slot-hint",void 0!==this.$scopedSlots.hint?e=this.$scopedSlots.hint(this.bottomSlotScope):void 0!==this.hint&&(e=[t("div",[this.hint])],i=this.hint));const s=!0===this.counter||void 0!==this.$scopedSlots.counter;if(!0===this.hideBottomSpace&&!1===s&&void 0===e)return;const o=t("div",{key:i,staticClass:"q-field__messages col"},e);return t("div",{staticClass:"q-field__bottom row items-start q-field__bottom--"+(!0!==this.hideBottomSpace?"animated":"stale"),on:{click:prevent}},[!0===this.hideBottomSpace?o:t("transition",{props:{name:"q-transition--field-message"}},[o]),!0===s?t("div",{staticClass:"q-field__counter"},void 0!==this.$scopedSlots.counter?this.$scopedSlots.counter():[this.computedCounter]):null])},__getInnerAppendNode:(t,e,i)=>null===i?null:t("div",{staticClass:"q-field__append q-field__marginal row no-wrap items-center q-anchor--skip",key:e},i),__onControlPopupShow(t){void 0!==t&&stop(t),this.$emit("popup-show",t),this.hasPopupOpen=!0,this.__onControlFocusin(t)},__onControlPopupHide(t){void 0!==t&&stop(t),this.$emit("popup-hide",t),this.hasPopupOpen=!1,this.__onControlFocusout(t)},__onControlFocusin(t){clearTimeout(this.focusoutTimer),!0===this.editable&&!1===this.focused&&(this.focused=!0,this.$emit("focus",t))},__onControlFocusout(t,e){clearTimeout(this.focusoutTimer),this.focusoutTimer=setTimeout(()=>{(!0!==document.hasFocus()||!0!==this.hasPopupOpen&&void 0!==this.$refs&&void 0!==this.$refs.control&&!1===this.$refs.control.contains(document.activeElement))&&(!0===this.focused&&(this.focused=!1,this.$emit("blur",t)),void 0!==e&&e())})},__clearValue(t){if(stopAndPrevent(t),!0!==this.$q.platform.is.mobile){(this.$refs.target||this.$el).focus()}else!0===this.$el.contains(document.activeElement)&&document.activeElement.blur();"file"===this.type&&(this.$refs.input.value=null),this.$emit("input",null),this.$emit("clear",this.value),this.$nextTick(()=>{this.resetValidation(),!0!==this.$q.platform.is.mobile&&(this.isDirty=!1)})},__emitValue(t){this.$emit("input",t)},__getBgColor(){let t,e;for(let i=this.parents.length-1;i>=0;i--)if(t=this.parents[i],parentStyles.has(t)&&"rgba(0, 0, 0, 0)"!==(e=parentStyles.get(t).backgroundColor)&&"transparent"!==e)return e}},render(t){void 0!==this.__onPreRender&&this.__onPreRender();const e=void 0===this.__getControl&&void 0===this.$scopedSlots.control?{...this.qAttrs,"data-autofocus":this.autofocus||void 0,...this.attrs}:this.attrs;return t("label",{staticClass:"q-field q-validation-component row no-wrap items-start q-key-group-navigation--ignore-key",class:this.classes,attrs:e},[void 0!==this.$scopedSlots.before?t("div",{staticClass:"q-field__before q-field__marginal row no-wrap items-center",on:this.slotsEvents},this.$scopedSlots.before()):null,t("div",{staticClass:"q-field__inner relative-position col self-stretch"},[t("div",{ref:"control",staticClass:"q-field__control relative-position row no-wrap",class:this.contentClass,attrs:{tabindex:-1},on:this.controlEvents},this.__getContent(t)),!0===this.shouldRenderBottom?this.__getBottom(t):null]),void 0!==this.$scopedSlots.after?t("div",{staticClass:"q-field__after q-field__marginal row no-wrap items-center",on:this.slotsEvents},this.$scopedSlots.after()):null])},created(){void 0!==this.__onPreRender&&this.__onPreRender(),this.slotsEvents={click:prevent},this.clearableEvents={click:this.__clearValue},this.controlEvents=void 0!==this.__getControlEvents?this.__getControlEvents():{focusin:this.__onControlFocusin,focusout:this.__onControlFocusout,"popup-show":this.__onControlPopupShow,"popup-hide":this.__onControlPopupHide},this.parents=[]},mounted(){!0===fromSSR&&void 0===this.for&&(this.targetUid=getTargetUid()),!0===this.autofocus&&this.focus(),this.$nextTick(()=>{let t=this.$refs.control;for(;t;)!0!==parentStyles.has(t)&&parentStyles.set(t,window.getComputedStyle(t)),this.parents.unshift(t),t=t.parentElement;!0===this.outlinedMd&&this.parents.length>0&&this.$forceUpdate()})},activated(){!0===this.shouldActivate&&!0===this.autofocus&&this.focus()},deactivated(){this.shouldActivate=!0},beforeDestroy(){clearTimeout(this.focusoutTimer),this.parents=[]}});function filterFiles(t,e,i,s){const o=[];return t.forEach(t=>{!0===s(t)?o.push(t):e.push({failedPropValidation:i,file:t})}),o}function stopAndPreventDrag(t){t&&t.dataTransfer&&(t.dataTransfer.dropEffect="copy"),stopAndPrevent(t)}var FileMixin={props:{multiple:Boolean,accept:String,capture:String,maxFileSize:[Number,String],maxTotalSize:[Number,String],maxFiles:[Number,String],filter:Function},computed:{extensions(){if(void 0!==this.accept)return this.accept.split(",").map(t=>"*"===(t=t.trim())?"*/":(t.endsWith("/*")&&(t=t.slice(0,t.length-1)),t.toUpperCase()))},maxFilesNumber(){return parseInt(this.maxFiles,10)},maxTotalSizeNumber(){return parseInt(this.maxTotalSize,10)}},methods:{pickFiles(t){if(!0===this.editable)if(t!==Object(t)&&(t={target:null}),null!==t.target&&!0===t.target.matches('input[type="file"]'))0===t.clientX&&0===t.clientY&&stop(t);else{const e=this.__getFileInput();e&&e!==t.target&&e.click(t)}},addFiles(t){this.editable&&t&&this.__addFiles(null,t)},__processFiles(t,e,i,s){let o=Array.from(e||t.target.files);const n=[],r=()=>{n.length>0&&this.$emit("rejected",n)};if(void 0!==this.accept&&-1===this.extensions.indexOf("*/")&&0===(o=filterFiles(o,n,"accept",t=>this.extensions.some(e=>t.type.toUpperCase().startsWith(e)||t.name.toUpperCase().endsWith(e)))).length)return r();if(void 0!==this.maxFileSize){const t=parseInt(this.maxFileSize,10);if(0===(o=filterFiles(o,n,"max-file-size",e=>e.size<=t)).length)return r()}if(!0!==this.multiple&&o.length>0&&(o=[o[0]]),o.forEach(t=>{t.__key=t.webkitRelativePath+t.lastModified+t.name+t.size}),!0===s){const t=i.map(t=>t.__key);o=filterFiles(o,n,"duplicate",e=>!1===t.includes(e.__key))}if(0===o.length)return r();if(void 0!==this.maxTotalSize){let t=!0===s?i.reduce((t,e)=>t+e.size,0):0;if(0===(o=filterFiles(o,n,"max-total-size",e=>(t+=e.size)<=this.maxTotalSizeNumber)).length)return r()}if("function"==typeof this.filter){const t=this.filter(o);o=filterFiles(o,n,"filter",e=>t.includes(e))}if(void 0!==this.maxFiles){let t=!0===s?i.length:0;if(0===(o=filterFiles(o,n,"max-files",()=>++t<=this.maxFilesNumber)).length)return r()}return r(),o.length>0?o:void 0},__onDragOver(t){stopAndPreventDrag(t),!0!==this.dnd&&(this.dnd=!0)},__onDragLeave(t){stopAndPrevent(t),!0===(null!==t.relatedTarget||!0!==Platform.is.safari?t.relatedTarget!==this.$refs.dnd:!1===document.elementsFromPoint(t.clientX,t.clientY).includes(this.$refs.dnd))&&(this.dnd=!1)},__onDrop(t){stopAndPreventDrag(t);const e=t.dataTransfer.files;e.length>0&&this.__addFiles(null,e),this.dnd=!1},__getDnd(t,e){if(!0===this.dnd)return t("div",{key:"dnd",staticClass:`q-${e}__dnd absolute-full`,ref:"dnd",on:cache(this,"dnd",{dragenter:stopAndPreventDrag,dragover:stopAndPreventDrag,dragleave:this.__onDragLeave,drop:this.__onDrop})})}}};const FileValueMixin={computed:{formDomProps(){if("file"===this.type)try{const t="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(this.value)===this.value&&("length"in this.value?Array.from(this.value):[this.value]).forEach(e=>{t.items.add(e)}),{files:t.files}}catch(t){return{files:void 0}}}}};var QFile=Vue.extend({name:"QFile",mixins:[QField,FileMixin,FormFieldMixin,FileValueMixin],props:{value:!0===isSSR?{}:[File,FileList,Array],append:Boolean,useChips:Boolean,displayValue:[String,Number],tabindex:{type:[String,Number],default:0},counterLabel:Function,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},data:()=>({dnd:!1}),computed:{innerValue(){return Object(this.value)===this.value?"length"in this.value?Array.from(this.value):[this.value]:[]},selectedString(){return this.innerValue.map(t=>t.name).join(", ")},totalSize(){return humanStorageSize(this.innerValue.reduce((t,e)=>t+e.size,0))},counterProps(){return{totalSize:this.totalSize,filesNumber:this.innerValue.length,maxFiles:this.maxFiles}},computedCounter(){if(void 0!==this.counterLabel)return this.counterLabel(this.counterProps);const t=this.maxFiles;return`${this.innerValue.length}${void 0!==t?" / "+t:""} (${this.totalSize})`},inputAttrs(){return{tabindex:-1,type:"file",title:"",accept:this.accept,capture:this.capture,name:this.nameProp,...this.qAttrs,id:this.targetUid,disabled:!0!==this.editable}},isAppending(){return!0===this.multiple&&!0===this.append},fieldClass(){return"q-file q-field--auto-height"+(!0===this.dnd?" q-file--dnd":"")}},methods:{removeAtIndex(t){const e=this.innerValue.slice();e.splice(t,1),this.__emitValue(e)},removeFile(t){const e=this.innerValue.findIndex(t);e>-1&&this.removeAtIndex(e)},__emitValue(t){this.$emit("input",!0===this.multiple?t:t[0])},__onKeydown(t){13===t.keyCode&&prevent(t)},__onKeyup(t){13!==t.keyCode&&32!==t.keyCode||this.pickFiles(t)},__getFileInput(){return this.$refs.input},__addFiles(t,e){const i=this.__processFiles(t,e,this.innerValue,this.isAppending),s=this.__getFileInput();void 0!==s&&(s.value=""),void 0!==i&&((!0===this.multiple?this.value&&i.every(t=>this.innerValue.includes(t)):this.value===i[0])||this.__emitValue(!0===this.isAppending?this.innerValue.concat(i):i))},__getControl(t){const e={key:"target",ref:"target",staticClass:"q-field__native row items-center cursor-pointer",attrs:{tabindex:this.tabindex}};return!0===this.editable&&(e.on=cache(this,"native",{dragover:this.__onDragOver,dragleave:this.__onDragLeave,keydown:this.__onKeydown,keyup:this.__onKeyup})),t("div",e,[this.__getInput(t)].concat(this.__getSelection(t)))},__getControlChild(t){return this.__getDnd(t,"file")},__getFiller(t){return[t("input",{class:[this.inputClass,"q-file__filler"],style:this.inputStyle})]},__getSelection(t){if(void 0!==this.$scopedSlots.file)return 0===this.innerValue.length?this.__getFiller(t):this.innerValue.map((t,e)=>this.$scopedSlots.file({index:e,file:t,ref:this}));if(void 0!==this.$scopedSlots.selected)return 0===this.innerValue.length?this.__getFiller(t):this.$scopedSlots.selected({files:this.innerValue,ref:this});if(!0===this.useChips)return 0===this.innerValue.length?this.__getFiller(t):this.innerValue.map((e,i)=>t(QChip,{key:"rem#"+i,props:{removable:this.editable,dense:!0,textColor:this.color,tabindex:this.tabindex},on:cache(this,"rem#"+i,{remove:()=>{this.removeAtIndex(i)}})},[t("span",{staticClass:"ellipsis",domProps:{textContent:e.name}})]));const e=void 0!==this.displayValue?this.displayValue:this.selectedString;return e.length>0?[t("div",{style:this.inputStyle,class:this.inputClass,domProps:{textContent:e}})]:this.__getFiller(t)},__getInput(t){const e={key:"input",ref:"input",staticClass:"q-field__input fit absolute-full cursor-pointer",attrs:this.inputAttrs,domProps:this.formDomProps,on:cache(this,"input",{change:this.__addFiles})};return!0===this.multiple&&(e.attrs.multiple=!0),t("input",e)}},created(){this.type="file"}}),QFooter=Vue.extend({name:"QFooter",mixins:[ListenersMixin],inject:{layout:{default(){console.error("QFooter needs to be child of QLayout")}}},props:{value:{type:Boolean,default:!0},reveal:Boolean,bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},data(){return{size:parseInt(this.heightHint,10),revealed:!0,windowHeight:onSSR||this.layout.container?0:window.innerHeight}},watch:{value(t){this.__update("space",t),this.__updateLocal("revealed",!0),this.layout.__animate()},offset(t){this.__update("offset",t)},reveal(t){!1===t&&this.__updateLocal("revealed",this.value)},revealed(t){this.layout.__animate(),this.$emit("reveal",t)},"layout.scroll"(){this.__updateRevealed()},"layout.height"(){this.__updateRevealed()},size(){this.__updateRevealed()},"$q.screen.height"(t){!0!==this.layout.container&&this.__updateLocal("windowHeight",t)}},computed:{fixed(){return!0===this.reveal||this.layout.view.indexOf("F")>-1||this.$q.platform.is.ios&&!0===this.layout.container},containerHeight(){return!0===this.layout.container?this.layout.containerHeight:this.windowHeight},offset(){if(!0!==this.value)return 0;if(!0===this.fixed)return!0===this.revealed?this.size:0;const t=this.layout.scroll.position+this.containerHeight+this.size-this.layout.height;return t>0?t:0},hidden(){return!0!==this.value||!0===this.fixed&&!0!==this.revealed},revealOnFocus(){return!0===this.value&&!0===this.hidden&&!0===this.reveal},classes(){return(!0===this.fixed?"fixed":"absolute")+"-bottom"+(!0===this.bordered?" q-footer--bordered":"")+(!0===this.hidden?" q-footer--hidden":"")+(!0!==this.value?" q-layout--prevent-focus":"")+(!0!==this.value&&!0!==this.fixed?" hidden":"")},style(){const t=this.layout.rows.bottom,e={};return"l"===t[0]&&!0===this.layout.left.space&&(e[!0===this.$q.lang.rtl?"right":"left"]=`${this.layout.left.size}px`),"r"===t[2]&&!0===this.layout.right.space&&(e[!0===this.$q.lang.rtl?"left":"right"]=`${this.layout.right.size}px`),e},onEvents(){return{...this.qListeners,focusin:this.__onFocusin,input:stop}}},render(t){const e=mergeSlot([t(QResizeObserver,{key:"resize",props:{debounce:0},on:cache(this,"resize",{resize:this.__onResize})})],this,"default");return!0===this.elevated&&e.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),t("footer",{staticClass:"q-footer q-layout__section--marginal",class:this.classes,style:this.style,on:this.onEvents},e)},created(){this.layout.instances.footer=this,!0===this.value&&this.__update("size",this.size),this.__update("space",this.value),this.__update("offset",this.offset)},beforeDestroy(){this.layout.instances.footer===this&&(this.layout.instances.footer=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},methods:{__onResize({height:t}){this.__updateLocal("size",t),this.__update("size",t)},__update(t,e){this.layout.footer[t]!==e&&(this.layout.footer[t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__updateRevealed(){if(!0!==this.reveal)return;const{direction:t,position:e,inflectionPoint:i}=this.layout.scroll;this.__updateLocal("revealed","up"===t||e-i<100||this.layout.height-this.containerHeight-e-this.size<300)},__onFocusin(t){!0===this.revealOnFocus&&this.__updateLocal("revealed",!0),this.$emit("focusin",t)}}}),QForm=Vue.extend({name:"QForm",mixins:[ListenersMixin],props:{autofocus:Boolean,noErrorFocus:Boolean,noResetFocus:Boolean,greedy:Boolean},computed:{onEvents(){return{...this.qListeners,submit:this.submit,reset:this.reset}}},mounted(){this.validateIndex=0,!0===this.autofocus&&this.focus()},activated(){!0===this.shouldActivate&&!0===this.autofocus&&this.focus()},deactivated(){this.shouldActivate=!0},methods:{validate(t){const e="boolean"==typeof t?t:!0!==this.noErrorFocus,i=++this.validateIndex,s=this.getValidationComponents().filter(t=>!0!==t.disable),o=(t,e)=>{this.$emit("validation-"+(!0===t?"success":"error"),e)},n=t=>{const e=t.validate();return"function"==typeof e.then?e.then(e=>({valid:e,comp:t}),e=>({valid:!1,comp:t,err:e})):Promise.resolve({valid:e,comp:t})};return(!0===this.greedy?Promise.all(s.map(n)).then(t=>t.filter(t=>!0!==t.valid)):s.reduce((t,e)=>t.then(()=>n(e).then(t=>{if(!1===t.valid)return Promise.reject(t)})),Promise.resolve()).catch(t=>[t])).then(t=>{if(void 0===t||0===t.length)return i===this.validateIndex&&o(!0),!0;if(i===this.validateIndex){const{comp:i,err:s}=t[0];if(void 0!==s&&console.error(s),o(!1,i),!0===e){const e=t.find(({comp:t})=>"function"==typeof t.focus&&!0!==t._isBeingDestroyed&&!0!==t._isDestroyed&&!0!==t._inactive);void 0!==e&&e.comp.focus()}}return!1})},resetValidation(){this.validateIndex++,this.getValidationComponents().forEach(t=>{"function"==typeof t.resetValidation&&t.resetValidation()})},submit(t){void 0!==t&&stopAndPrevent(t);const e=this.validateIndex+1;this.validate().then(i=>{e===this.validateIndex&&!0===i&&(void 0!==this.qListeners.submit?this.$emit("submit",t):void 0!==t&&void 0!==t.target&&"function"==typeof t.target.submit&&t.target.submit())})},reset(t){void 0!==t&&stopAndPrevent(t),this.$emit("reset"),this.$nextTick(()=>{this.resetValidation(),!0===this.autofocus&&!0!==this.noResetFocus&&this.focus()})},focus(){if(!this.$el)return;const t=this.$el.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||this.$el.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||this.$el.querySelector("[autofocus], [data-autofocus]")||Array.prototype.find.call(this.$el.querySelectorAll("[tabindex]"),t=>t.tabIndex>-1);null!==t&&void 0!==t&&managedFocus(t)},getValidationComponents(){return Array.prototype.map.call(this.$el.getElementsByClassName("q-validation-component"),t=>t.__vue__).filter(t=>void 0!==t&&"function"==typeof t.validate)}},render(t){return t("form",{staticClass:"q-form",on:this.onEvents},slot(this,"default"))}}),QHeader=Vue.extend({name:"QHeader",mixins:[ListenersMixin],inject:{layout:{default(){console.error("QHeader needs to be child of QLayout")}}},props:{value:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},data(){return{size:parseInt(this.heightHint,10),revealed:!0}},watch:{value(t){this.__update("space",t),this.__updateLocal("revealed",!0),this.layout.__animate()},offset(t){this.__update("offset",t)},reveal(t){!1===t&&this.__updateLocal("revealed",this.value)},revealed(t){this.layout.__animate(),this.$emit("reveal",t)},"layout.scroll"(t){!0===this.reveal&&this.__updateLocal("revealed","up"===t.direction||t.position<=this.revealOffset||t.position-t.inflectionPoint<100)}},computed:{fixed(){return!0===this.reveal||this.layout.view.indexOf("H")>-1||this.$q.platform.is.ios&&!0===this.layout.container},offset(){if(!0!==this.value)return 0;if(!0===this.fixed)return!0===this.revealed?this.size:0;const t=this.size-this.layout.scroll.position;return t>0?t:0},hidden(){return!0!==this.value||!0===this.fixed&&!0!==this.revealed},revealOnFocus(){return!0===this.value&&!0===this.hidden&&!0===this.reveal},classes(){return(!0===this.fixed?"fixed":"absolute")+"-top"+(!0===this.bordered?" q-header--bordered":"")+(!0===this.hidden?" q-header--hidden":"")+(!0!==this.value?" q-layout--prevent-focus":"")},style(){const t=this.layout.rows.top,e={};return"l"===t[0]&&!0===this.layout.left.space&&(e[!0===this.$q.lang.rtl?"right":"left"]=`${this.layout.left.size}px`),"r"===t[2]&&!0===this.layout.right.space&&(e[!0===this.$q.lang.rtl?"left":"right"]=`${this.layout.right.size}px`),e},onEvents(){return{...this.qListeners,focusin:this.__onFocusin,input:stop}}},render(t){const e=uniqueSlot(this,"default",[]);return!0===this.elevated&&e.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(t(QResizeObserver,{key:"resize",props:{debounce:0},on:cache(this,"resize",{resize:this.__onResize})})),t("header",{staticClass:"q-header q-layout__section--marginal",class:this.classes,style:this.style,on:this.onEvents},e)},created(){this.layout.instances.header=this,!0===this.value&&this.__update("size",this.size),this.__update("space",this.value),this.__update("offset",this.offset)},beforeDestroy(){this.layout.instances.header===this&&(this.layout.instances.header=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},methods:{__onResize({height:t}){this.__updateLocal("size",t),this.__update("size",t)},__update(t,e){this.layout.header[t]!==e&&(this.layout.header[t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__onFocusin(t){!0===this.revealOnFocus&&this.__updateLocal("revealed",!0),this.$emit("focusin",t)}}}),RatioMixin={props:{ratio:[String,Number]},computed:{ratioStyle(){const t=this.ratio||this.naturalRatio;if(void 0!==t)return{paddingBottom:`${100/t}%`}}}},QImg=Vue.extend({name:"QImg",mixins:[ListenersMixin,RatioMixin],props:{src:String,srcset:String,sizes:String,alt:String,width:String,height:String,placeholderSrc:String,basic:Boolean,contain:Boolean,position:{type:String,default:"50% 50%"},transition:{type:String,default:"fade"},imgClass:[Array,String,Object],imgStyle:Object,nativeContextMenu:Boolean,noDefaultSpinner:Boolean,spinnerColor:String,spinnerSize:String},data(){return{currentSrc:"",image:null,isLoading:!!this.src,hasError:!1,naturalRatio:void 0}},watch:{src(){this.__load()},srcset(t){this.__updateWatcher(t)}},computed:{url(){return this.currentSrc||this.placeholderSrc||void 0},attrs(){const t={role:"img"};return void 0!==this.alt&&(t["aria-label"]=this.alt),t},imgContainerStyle(){return Object.assign({backgroundSize:!0===this.contain?"contain":"cover",backgroundPosition:this.position},this.imgStyle,{backgroundImage:`url("${this.url}")`})},style(){return{width:this.width,height:this.height}},classes(){return"q-img overflow-hidden"+(!0===this.nativeContextMenu?" q-img--menu":"")}},methods:{__onLoad(t){this.isLoading=!1,this.hasError=!1,this.__computeRatio(t),this.__updateSrc(),this.__updateWatcher(this.srcset),this.$emit("load",this.currentSrc)},__onError(t){clearTimeout(this.ratioTimer),this.isLoading=!1,this.hasError=!0,this.currentSrc="",this.$emit("error",t)},__updateSrc(){if(void 0!==this.image&&!1===this.isLoading){const t=this.image.currentSrc||this.image.src;this.currentSrc!==t&&(this.currentSrc=t)}},__updateWatcher(t){t?void 0===this.unwatch&&(this.unwatch=this.$watch("$q.screen.width",this.__updateSrc)):void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0)},__load(){if(clearTimeout(this.ratioTimer),this.hasError=!1,!this.src)return this.isLoading=!1,this.image=void 0,void(this.currentSrc="");this.isLoading=!0;const t=new Image;this.image=t,t.onerror=(e=>{this.image===t&&!0!==this.destroyed&&this.__onError(e)}),t.onload=(()=>{!0!==this.destroyed&&this.image===t&&(void 0!==t.decode?t.decode().catch(e=>{this.image===t&&!0!==this.destroyed&&this.__onError(e)}).then(()=>{this.image===t&&!0!==this.destroyed&&this.__onLoad(t)}):this.__onLoad(t))}),t.src=this.src,this.srcset&&(t.srcset=this.srcset),void 0!==this.sizes?t.sizes=this.sizes:Object.assign(t,{height:this.height,width:this.width})},__computeRatio(t){const{naturalHeight:e,naturalWidth:i}=t;e||i?this.naturalRatio=0===e?1:i/e:this.ratioTimer=setTimeout(()=>{this.image===t&&!0!==this.destroyed&&this.__computeRatio(t)},100)},__getImage(t){const e=!0===this.nativeContextMenu?[t("img",{staticClass:"absolute-full fit",attrs:{src:this.url,"aria-hidden":"true"}})]:void 0,i=void 0!==this.url?t("div",{key:this.url,staticClass:"q-img__image absolute-full",class:this.imgClass,style:this.imgContainerStyle},e):null;return!0===this.basic?i:t("transition",{props:{name:"q-transition--"+this.transition}},[i])},__getContent(t){const e=slot(this,!0===this.hasError?"error":"default");return!0===this.basic?t("div",{key:"content",staticClass:"q-img__content absolute-full"},e):t("transition",{props:{name:"q-transition--fade"}},[!0===this.isLoading?t("div",{key:"placeholder",staticClass:"q-img__loading absolute-full flex flex-center"},void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():!1===this.noDefaultSpinner?[t(QSpinner,{props:{color:this.spinnerColor,size:this.spinnerSize}})]:void 0):t("div",{key:"content",staticClass:"q-img__content absolute-full"},e)])}},render(t){return t("div",{class:this.classes,style:this.style,attrs:this.attrs,on:{...this.qListeners}},[t("div",{style:this.ratioStyle}),this.__getImage(t),this.__getContent(t)])},beforeMount(){if(void 0!==this.placeholderSrc&&void 0===this.ratio){const t=new Image;t.src=this.placeholderSrc,this.__computeRatio(t)}!0===this.isLoading&&this.__load()},beforeDestroy(){this.destroyed=!0,clearTimeout(this.ratioTimer),void 0!==this.unwatch&&this.unwatch()}});const{passive:passive$2}=listenOpts;var QInfiniteScroll=Vue.extend({name:"QInfiniteScroll",mixins:[ListenersMixin],props:{offset:{type:Number,default:500},debounce:{type:[String,Number],default:100},scrollTarget:{default:void 0},initialIndex:Number,disable:Boolean,reverse:Boolean},data(){return{index:this.initialIndex||0,isFetching:!1,isWorking:!0}},watch:{disable(t){!0===t?this.stop():this.resume()},reverse(){!1===this.isFetching&&!0===this.isWorking&&this.immediatePoll()},scrollTarget(){this.updateScrollTarget()},debounce(t){this.__setDebounce(t)}},methods:{poll(){if(void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),!0===this.disable||!0===this.isFetching||!1===this.isWorking)return;if(this.__scrollTarget===window&&!0===document.qScrollPrevented)return void(this.clearExecuteWhenScrollable=executeWhenScrollable(this.poll));const t=getScrollHeight(this.__scrollTarget),e=getScrollPosition(this.__scrollTarget),i=height(this.__scrollTarget);!1===this.reverse?Math.round(e+i+this.offset)>=Math.round(t)&&this.trigger():Math.round(e){!0===this.isWorking&&(this.isFetching=!1,this.$nextTick(()=>{if(!0===this.reverse){const e=getScrollHeight(this.__scrollTarget),i=getScrollPosition(this.__scrollTarget),s=e-t;setScrollPosition(this.__scrollTarget,i+s)}!0===e?this.stop():this.$el.closest("body")&&this.poll()}))})},reset(){this.index=0},resume(){!1===this.isWorking&&(this.isWorking=!0,this.__scrollTarget.addEventListener("scroll",this.poll,passive$2)),this.immediatePoll()},stop(){!0===this.isWorking&&(this.isWorking=!1,this.isFetching=!1,this.__scrollTarget.removeEventListener("scroll",this.poll,passive$2),"function"==typeof this.poll.cancel&&this.poll.cancel())},updateScrollTarget(){if(this.__scrollTarget&&!0===this.isWorking&&this.__scrollTarget.removeEventListener("scroll",this.poll,passive$2),this.__scrollTarget=getScrollTarget(this.$el,this.scrollTarget),!0===this.isWorking){if(this.__scrollTarget.addEventListener("scroll",this.poll,passive$2),!0===this.reverse){const t=getScrollHeight(this.__scrollTarget),e=height(this.__scrollTarget);setScrollPosition(this.__scrollTarget,t-e)}this.immediatePoll()}},setIndex(t){this.index=t},__setDebounce(t){t=parseInt(t,10);const e=this.poll;this.poll=t<=0?this.immediatePoll:debounce(this.immediatePoll,!0===isNaN(t)?100:t),this.__scrollTarget&&!0===this.isWorking&&(void 0!==e&&this.__scrollTarget.removeEventListener("scroll",e,passive$2),this.__scrollTarget.addEventListener("scroll",this.poll,passive$2))}},mounted(){this.immediatePoll=this.poll,this.__setDebounce(this.debounce),this.updateScrollTarget()},activated(){void 0!==this.__scrollPosition&&this.__scrollTarget&&setScrollPosition(this.__scrollTarget,this.__scrollPosition)},deactivated(){this.__scrollPosition=this.__scrollTarget?getScrollPosition(this.__scrollTarget):void 0},beforeDestroy(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),this.stop()},render(t){const e=uniqueSlot(this,"default",[]);return!0!==this.disable&&!0===this.isWorking&&e[!1===this.reverse?"push":"unshift"](t("div",{staticClass:"q-infinite-scroll__loading",class:!0===this.isFetching?"":"invisible"},slot(this,"loading"))),t("div",{staticClass:"q-infinite-scroll",on:{...this.qListeners}},e)}}),QInnerLoading=Vue.extend({name:"QInnerLoading",mixins:[ListenersMixin,DarkMixin,TransitionMixin],props:{showing:Boolean,color:String,size:{type:[String,Number],default:42},label:String,labelClass:String,labelStyle:[String,Array,Object]},computed:{classes(){return"q-inner-loading absolute-full column flex-center"+` q-inner-loading--${this.darkSuffix}`},labelClasses(){return"q-inner-loading__label"+(void 0!==this.labelClass?` ${this.labelClass}`:"")}},methods:{__getInner(t){const e=[t(QSpinner,{props:{size:this.size,color:this.color}})];return void 0!==this.label&&e.push(t("div",{class:this.labelClasses,style:this.labelStyle},[this.label])),e},__getContent(t){return!0===this.showing?[t("div",{staticClass:this.classes,on:{...this.qListeners}},void 0!==this.$scopedSlots.default?this.$scopedSlots.default():this.__getInner(t))]:void 0}},render(t){return t("transition",{props:{...this.transitionProps,appear:!0}},this.__getContent(t))}});const NAMED_MASKS={date:"####/##/##",datetime:"####/##/## ##:##",time:"##:##",fulltime:"##:##:##",phone:"(###) ### - ####",card:"#### #### #### ####"},TOKENS={"#":{pattern:"[\\d]",negate:"[^\\d]"},S:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]"},N:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]"},A:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleUpperCase()},a:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleLowerCase()},X:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleUpperCase()},x:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleLowerCase()}},KEYS=Object.keys(TOKENS);KEYS.forEach(t=>{TOKENS[t].regex=new RegExp(TOKENS[t].pattern)});const tokenRegexMask=new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+KEYS.join("")+"])|(.)","g"),escRegex=/[.*+?^${}()|[\]\\]/g,MARKER=String.fromCharCode(1);var MaskMixin={props:{mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean},watch:{type(){this.__updateMaskInternals()},autogrow(){this.__updateMaskInternals()},mask(t){if(void 0!==t)this.__updateMaskValue(this.innerValue,!0);else{const t=this.__unmask(this.innerValue);this.__updateMaskInternals(),this.value!==t&&this.$emit("input",t)}},fillMask(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue,!0)},reverseFillMask(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue,!0)},unmaskedValue(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue)}},methods:{__getInitialMaskedValue(){if(this.__updateMaskInternals(),!0===this.hasMask){const t=this.__mask(this.__unmask(this.value));return!1!==this.fillMask?this.__fillWithMask(t):t}return this.value},__getPaddedMaskMarked(t){if(t-1){for(let s=t-e.length;s>0;s--)i+=MARKER;e=e.slice(0,s)+i+e.slice(s)}return e},__updateMaskInternals(){if(this.hasMask=void 0!==this.mask&&this.mask.length>0&&(!0===this.autogrow||["textarea","text","search","url","tel","password"].includes(this.type)),!1===this.hasMask)return this.computedUnmask=void 0,this.maskMarked="",void(this.maskReplaced="");const t=void 0===NAMED_MASKS[this.mask]?this.mask:NAMED_MASKS[this.mask],e="string"==typeof this.fillMask&&this.fillMask.length>0?this.fillMask.slice(0,1):"_",i=e.replace(escRegex,"\\$&"),s=[],o=[],n=[];let r=!0===this.reverseFillMask,a="",l="";t.replace(tokenRegexMask,(t,e,i,h,c)=>{if(void 0!==h){const t=TOKENS[h];n.push(t),l=t.negate,!0===r&&(o.push("(?:"+l+"+)?("+t.pattern+"+)?(?:"+l+"+)?("+t.pattern+"+)?"),r=!1),o.push("(?:"+l+"+)?("+t.pattern+")?")}else if(void 0!==i)a="\\"+("\\"===i?"":i),n.push(i),s.push("([^"+a+"]+)?"+a+"?");else{const t=void 0!==e?e:c;a="\\"===t?"\\\\\\\\":t.replace(escRegex,"\\\\$&"),n.push(t),s.push("([^"+a+"]+)?"+a+"?")}});const h=new RegExp("^"+s.join("")+"("+(""===a?".":"[^"+a+"]")+"+)?"+(""===a?"":"["+a+"]*")+"$"),c=o.length-1,d=o.map((t,e)=>0===e&&!0===this.reverseFillMask?new RegExp("^"+i+"*"+t):e===c?new RegExp("^"+t+"("+(""===l?".":l)+"+)?"+(!0===this.reverseFillMask?"$":i+"*")):new RegExp("^"+t));this.computedMask=n,this.computedUnmask=(t=>{const e=h.exec(t);null!==e&&(t=e.slice(1).join(""));const i=[],s=d.length;for(let e=0,o=t;e0?i.join(""):t}),this.maskMarked=n.map(t=>"string"==typeof t?t:MARKER).join(""),this.maskReplaced=this.maskMarked.split(MARKER).join(e)},__updateMaskValue(t,e,i){const s=this.$refs.input,o=s.selectionEnd,n=s.value.length-o,r=this.__unmask(t);!0===e&&this.__updateMaskInternals();const a=this.__mask(r),l=!1!==this.fillMask?this.__fillWithMask(a):a,h=this.innerValue!==l;s.value!==l&&(s.value=l),!0===h&&(this.innerValue=l),document.activeElement===s&&this.$nextTick(()=>{if(l!==this.maskReplaced)if("insertFromPaste"!==i||!0===this.reverseFillMask)if(["deleteContentBackward","deleteContentForward"].indexOf(i)>-1){const t=!0===this.reverseFillMask?0===o?l.length>a.length?1:0:Math.max(0,l.length-(l===this.maskReplaced?0:Math.min(a.length,n)+1))+1:o;s.setSelectionRange(t,t,"forward")}else if(!0===this.reverseFillMask)if(!0===h){const t=Math.max(0,l.length-(l===this.maskReplaced?0:Math.min(a.length,n+1)));1===t&&1===o?s.setSelectionRange(t,t,"forward"):this.__moveCursorRightReverse(s,t,t)}else{const t=l.length-n;s.setSelectionRange(t,t,"backward")}else if(!0===h){const t=Math.max(0,this.maskMarked.indexOf(MARKER),Math.min(a.length,o)-1);this.__moveCursorRight(s,t,t)}else{const t=o-1;this.__moveCursorRight(s,t,t)}else{const t=o-1;this.__moveCursorRight(s,t,t)}else{const t=!0===this.reverseFillMask?this.maskReplaced.length:0;s.setSelectionRange(t,t,"forward")}});const c=!0===this.unmaskedValue?this.__unmask(l):l;String(this.value)!==c&&this.__emitValue(c,!0)},__moveCursorForPaste(t,e,i){const s=this.__mask(this.__unmask(t.value));e=Math.max(0,this.maskMarked.indexOf(MARKER),Math.min(s.length,e)),t.setSelectionRange(e,i,"forward")},__moveCursorLeft(t,e,i,s){const o=-1===this.maskMarked.slice(e-1).indexOf(MARKER);let n=Math.max(0,e-1);for(;n>=0;n--)if(this.maskMarked[n]===MARKER){e=n,!0===o&&e++;break}if(n<0&&void 0!==this.maskMarked[e]&&this.maskMarked[e]!==MARKER)return this.__moveCursorRight(t,0,0);e>=0&&t.setSelectionRange(e,!0===s?i:e,"backward")},__moveCursorRight(t,e,i,s){const o=t.value.length;let n=Math.min(o,i+1);for(;n<=o;n++){if(this.maskMarked[n]===MARKER){i=n;break}this.maskMarked[n-1]===MARKER&&(i=n)}if(n>o&&void 0!==this.maskMarked[i-1]&&this.maskMarked[i-1]!==MARKER)return this.__moveCursorLeft(t,o,o);t.setSelectionRange(s?e:i,i,"forward")},__moveCursorLeftReverse(t,e,i,s){const o=this.__getPaddedMaskMarked(t.value.length);let n=Math.max(0,e-1);for(;n>=0;n--){if(o[n-1]===MARKER){e=n;break}if(o[n]===MARKER&&(e=n,0===n))break}if(n<0&&void 0!==o[e]&&o[e]!==MARKER)return this.__moveCursorRightReverse(t,0,0);e>=0&&t.setSelectionRange(e,!0===s?i:e,"backward")},__moveCursorRightReverse(t,e,i,s){const o=t.value.length,n=this.__getPaddedMaskMarked(o),r=-1===n.slice(0,i+1).indexOf(MARKER);let a=Math.min(o,i+1);for(;a<=o;a++)if(n[a-1]===MARKER){(i=a)>0&&!0===r&&i--;break}if(a>o&&void 0!==n[i-1]&&n[i-1]!==MARKER)return this.__moveCursorLeftReverse(t,o,o);t.setSelectionRange(!0===s?e:i,i,"forward")},__onMaskedKeydown(t){if(!0===shouldIgnoreKey(t))return;const e=this.$refs.input,i=e.selectionStart,s=e.selectionEnd;if(37===t.keyCode||39===t.keyCode){const o=this["__moveCursor"+(39===t.keyCode?"Right":"Left")+(!0===this.reverseFillMask?"Reverse":"")];t.preventDefault(),o(e,i,s,t.shiftKey)}else 8===t.keyCode&&!0!==this.reverseFillMask&&i===s?this.__moveCursorLeft(e,i,s,!0):46===t.keyCode&&!0===this.reverseFillMask&&i===s&&this.__moveCursorRightReverse(e,i,s,!0);this.$emit("keydown",t)},__mask(t){if(void 0===t||null===t||""===t)return"";if(!0===this.reverseFillMask)return this.__maskReverse(t);const e=this.computedMask;let i=0,s="";for(let o=0;o=0&&s>-1;n--){const r=e[n];let a=t[s];if("string"==typeof r)o=r+o,a===r&&s--;else{if(void 0===a||!r.regex.test(a))return o;do{o=(void 0!==r.transform?r.transform(a):a)+o,a=t[--s]}while(i===n&&void 0!==a&&r.regex.test(a))}}return o},__unmask(t){return"string"!=typeof t||void 0===this.computedUnmask?"number"==typeof t?this.computedUnmask(""+t):t:this.computedUnmask(t)},__fillWithMask(t){return this.maskReplaced.length-t.length<=0?t:!0===this.reverseFillMask&&t.length>0?this.maskReplaced.slice(0,-t.length)+t:t+this.maskReplaced.slice(t.length)}}},QInput=Vue.extend({name:"QInput",mixins:[QField,MaskMixin,FormFieldMixin,FileValueMixin,ListenersMixin],props:{value:{required:!1},shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},watch:{value(t){if(!0===this.hasMask){if(!0===this.stopValueWatcher&&(this.stopValueWatcher=!1,String(t)===this.emitCachedValue))return;this.__updateMaskValue(t)}else this.innerValue!==t&&(this.innerValue=t,"number"===this.type&&!0===this.hasOwnProperty("tempValue")&&(!0===this.typedNumber?this.typedNumber=!1:delete this.tempValue));!0===this.autogrow&&this.$nextTick(this.__adjustHeight)},type(){this.$refs.input&&(this.$refs.input.value=this.value)},autogrow(t){if(!0===t)this.$nextTick(this.__adjustHeight);else if(this.qAttrs.rows>0&&void 0!==this.$refs.input){this.$refs.input.style.height="auto"}},dense(){!0===this.autogrow&&this.$nextTick(this.__adjustHeight)}},data(){return{innerValue:this.__getInitialMaskedValue()}},computed:{isTextarea(){return"textarea"===this.type||!0===this.autogrow},isTypeText(){return!0===this.isTextarea||["text","search","url","tel","password"].includes(this.type)},fieldClass(){return`q-${!0===this.isTextarea?"textarea":"input"}`+(!0===this.autogrow?" q-textarea--autogrow":"")},hasShadow(){return"file"!==this.type&&"string"==typeof this.shadowText&&this.shadowText.length>0},onEvents(){const t={...this.qListeners,input:this.__onInput,compositionend:this.__onCompositionend,paste:this.__onPaste,change:this.__onChange,blur:this.__onFinishEditing,focus:this.__onFocus};return!0===this.hasMask&&(t.keydown=this.__onMaskedKeydown),!0===this.autogrow&&(t.animationend=this.__onAnimationend),t},inputAttrs(){const t={tabindex:0,"data-autofocus":this.autofocus||void 0,rows:"textarea"===this.type?6:void 0,"aria-label":this.label,name:this.nameProp,...this.qAttrs,id:this.targetUid,type:this.type,maxlength:this.maxlength,disabled:!0===this.disable,readonly:!0===this.readonly};return!0===this.autogrow&&(t.rows=1),t}},methods:{focus(){const t=document.activeElement;void 0===this.$refs.input||this.$refs.input===t||null!==t&&t.id===this.targetUid||managedFocus(this.$refs.input)},select(){void 0!==this.$refs.input&&this.$refs.input.select()},getNativeElement(){return this.$refs.input},__onPaste(t){if(!0===this.hasMask&&!0!==this.reverseFillMask){const e=t.target;this.__moveCursorForPaste(e,e.selectionStart,e.selectionEnd)}this.$emit("paste",t)},__onInput(t){if(!t||!t.target||!0===t.target.qComposing)return;if("file"===this.type)return void this.$emit("input",t.target.files);const e=t.target.value;if(!0===this.hasMask)this.__updateMaskValue(e,!1,t.inputType);else if(this.__emitValue(e),!0===this.isTypeText&&t.target===document.activeElement){const{selectionStart:i,selectionEnd:s}=t.target;void 0!==i&&void 0!==s&&this.$nextTick(()=>{t.target===document.activeElement&&0===e.indexOf(t.target.value)&&t.target.setSelectionRange(i,s)})}!0===this.autogrow&&this.__adjustHeight()},__onChange(t){!0===t.target.qComposing&&(t.target.qComposing=!1,this.__onInput(t)),clearTimeout(this.emitTimer),void 0!==this.emitValueFn&&this.emitValueFn(),this.$emit("change",t)},__onFinishEditing(t){void 0!==t&&stop(t),clearTimeout(this.emitTimer),void 0!==this.emitValueFn&&this.emitValueFn(),this.typedNumber=!1,this.stopValueWatcher=!1,delete this.tempValue,"file"!==this.type&&setTimeout(()=>{void 0!==this.$refs.input&&(this.$refs.input.value=void 0!==this.innerValue?this.innerValue:"")})},__onFocus(t){stop(t),managedFocus(t.target)},__onCompositionend(t){void 0!==this.qListeners.compositionend&&this.$emit("compositionend",t),this.__onInput(t)},__onAnimationend(t){void 0!==this.qListeners.animationend&&this.$emit("animationend",t),this.__adjustHeight()},__emitValue(t,e){this.emitValueFn=(()=>{"number"!==this.type&&!0===this.hasOwnProperty("tempValue")&&delete this.tempValue,this.value!==t&&this.emitCachedValue!==t&&(this.emitCachedValue=t,!0===e&&(this.stopValueWatcher=!0),this.$emit("input",t),this.$nextTick(()=>{this.emitCachedValue===t&&(this.emitCachedValue=NaN)})),this.emitValueFn=void 0}),"number"===this.type&&(this.typedNumber=!0,this.tempValue=t),void 0!==this.debounce?(clearTimeout(this.emitTimer),this.tempValue=t,this.emitTimer=setTimeout(this.emitValueFn,this.debounce)):this.emitValueFn()},__adjustHeight(){requestAnimationFrame(()=>{const t=this.$refs.input;if(void 0!==t){const e=t.parentNode.style,{overflow:i}=t.style;!0!==this.$q.platform.is.firefox&&(t.style.overflow="hidden"),t.style.height="1px",e.marginBottom=t.scrollHeight-1+"px",t.style.height=t.scrollHeight+"px",t.style.overflow=i,e.marginBottom=""}})},__getCurValue(){return!0===this.hasOwnProperty("tempValue")?this.tempValue:void 0!==this.innerValue?this.innerValue:""},__getShadowControl(t){return t("div",{staticClass:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(!0===this.isTextarea?"":" text-no-wrap")},[t("span",{staticClass:"invisible"},this.__getCurValue()),t("span",this.shadowText)])},__getControl(t){return t(!0===this.isTextarea?"textarea":"input",{ref:"input",staticClass:"q-field__native q-placeholder",style:this.inputStyle,class:this.inputClass,attrs:this.inputAttrs,on:this.onEvents,domProps:"file"!==this.type?{value:this.__getCurValue()}:this.formDomProps})}},created(){this.emitCachedValue=NaN},mounted(){!0===this.autogrow&&this.__adjustHeight()},beforeDestroy(){this.__onFinishEditing()}});const defaultCfg$1={threshold:0,root:null,rootMargin:"0px"};function update$3(t,e,i,s){let o,n,r;"function"==typeof i?(o=i,n=defaultCfg$1,r=void 0===e.cfg):(o=i.handler,n=Object.assign({},defaultCfg$1,i.cfg),r=void 0===e.cfg||!1===isDeepEqual(e.cfg,n)),e.handler!==o&&(e.handler=o);const a=!0===s.once;e.once!==a&&(e.once=a),!0===r&&(e.cfg=n,void 0!==e.observer&&e.observer.unobserve(t),e.observer=new IntersectionObserver(([i])=>{if("function"==typeof e.handler){if(null===i.rootBounds&&(void 0!==t.__vue__?!0!==t.__vue__._inactive:!0===document.body.contains(t)))return e.observer.unobserve(t),void e.observer.observe(t);(!1===e.handler(i,e.observer)||!0===e.once&&!0===i.isIntersecting)&&destroy$8(t)}},n),e.observer.observe(t))}function destroy$8(t){const e=t.__qvisible;void 0!==e&&(void 0!==e.observer&&e.observer.unobserve(t),delete t.__qvisible)}var Intersection={name:"intersection",inserted(t,{modifiers:e,value:i}){void 0!==t.__qvisible&&(destroy$8(t),t.__qvisible_destroyed=!0);const s={};update$3(t,s,i,e),t.__qvisible=s},update(t,{value:e,modifiers:i}){const s=t.__qvisible;void 0!==s&&update$3(t,s,e,i)},unbind(t){void 0===t.__qvisible_destroyed?destroy$8(t):delete t.__qvisible_destroyed}},QIntersection=Vue.extend({name:"QIntersection",mixins:[TagMixin,ListenersMixin],directives:{Intersection:Intersection},props:{once:Boolean,transition:String,ssrPrerender:Boolean,margin:String,threshold:[Number,Array],root:{default:null},disable:Boolean},data(){return{showing:!0===onSSR&&this.ssrPrerender}},computed:{value(){return void 0!==this.root||void 0!==this.margin||void 0!==this.threshold?{handler:this.__trigger,cfg:{root:this.root,rootMargin:this.margin,threshold:this.threshold}}:this.__trigger},directives(){if(!0!==this.disable&&(!0!==onSSR||!0!==this.once||!0!==this.ssrPrerender))return[{name:"intersection",value:this.value,modifiers:{once:this.once}}]}},methods:{__trigger(t){this.showing!==t.isIntersecting&&(this.showing=t.isIntersecting,void 0!==this.qListeners.visibility&&this.$emit("visibility",this.showing))}},render(t){const e=!0===this.showing?slot(this,"default"):void 0;return t(this.tag,{staticClass:"q-intersection",on:{...this.qListeners},directives:this.directives},this.transition?[t("transition",{props:{name:"q-transition--"+this.transition}},e)]:e)}});const keyCodes$1=[34,37,40,33,39,38];var QKnob=Vue.extend({name:"QKnob",mixins:[{props:QCircularProgress.options.props},FormMixin],directives:{TouchPan:TouchPan},props:{innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:t=>t>=0},tabindex:{type:[Number,String],default:0},disable:Boolean,readonly:Boolean},data(){const t=this.__getInnerMin(this.innerMin),e=this.__getInnerMax(this.innerMax);return{model:null===this.value?t:between(this.value,t,e),dragging:!1}},watch:{modelUpdate(){this.model=null===this.value?this.computedInnerMin:between(this.value,this.computedInnerMin,this.computedInnerMax),this.__updateValue(!0)}},computed:{classes(){return"q-knob non-selectable q-key-group-navigation--ignore-key"+(!0===this.editable?" q-knob--editable":!0===this.disable?" disabled":"")},computedInnerMin(){return this.__getInnerMin(this.innerMin)},computedInnerMax(){return this.__getInnerMax(this.innerMax)},modelUpdate(){return`${this.value}|${this.computedInnerMin}|${this.computedInnerMax}`},editable(){return!1===this.disable&&!1===this.readonly},decimals(){return(String(this.step).trim("0").split(".")[1]||"").length},computedStep(){return 0===this.step?1:this.step},computedInstantFeedback(){return!0===this.instantFeedback||!0===this.dragging},onEvents(){return!0===this.$q.platform.is.mobile?{click:this.__click}:{mousedown:this.__activate,click:this.__click,keydown:this.__keydown,keyup:this.__keyup}},attrs(){const t={role:"slider","aria-valuemin":this.computedInnerMin,"aria-valuemax":this.computedInnerMax,"aria-valuenow":this.value};return!0===this.editable?t.tabindex=this.tabindex:t[`aria-${!0===this.disable?"disabled":"readonly"}`]="",t}},methods:{__getInnerMin(t){return!0===isNaN(t)||this.innerMinthis.max?this.max:this.innerMax},__updateCenterPosition(){const{top:t,left:e,width:i,height:s}=this.$el.getBoundingClientRect();this.centerPosition={top:t+s/2,left:e+i/2}},__pan(t){t.isFinal?(this.__updatePosition(t.evt,!0),this.dragging=!1):t.isFirst?(this.__updateCenterPosition(),this.dragging=!0,this.__updatePosition(t.evt)):this.__updatePosition(t.evt)},__click(t){this.__updateCenterPosition(),this.__updatePosition(t,!0)},__keydown(t){if(!keyCodes$1.includes(t.keyCode))return;stopAndPrevent(t);const e=([34,33].includes(t.keyCode)?10:1)*this.computedStep,i=[34,37,40].includes(t.keyCode)?-e:e;this.model=between(parseFloat((this.model+i).toFixed(this.decimals)),this.computedInnerMin,this.computedInnerMax),this.__updateValue()},__keyup(t){keyCodes$1.includes(t.keyCode)&&this.__updateValue(!0)},__activate(t){this.__updateCenterPosition(),this.__updatePosition(t)},__updatePosition(t,e){const i=this.centerPosition,s=position(t),o=Math.abs(s.top-i.top),n=Math.sqrt(o**2+Math.abs(s.left-i.left)**2);let r=Math.asin(o/n)*(180/Math.PI);r=s.top=t/2?(e<0?-1:1)*t:0),a=parseFloat(a.toFixed(this.decimals))}a=between(a,this.computedInnerMin,this.computedInnerMax),this.$emit("drag-value",a),this.model!==a&&(this.model=a),this.__updateValue(e)},__updateValue(t){this.value!==this.model&&this.$emit("input",this.model),!0===t&&this.$emit("change",this.model)},__getNameInput(){return this.$createElement("input",{attrs:this.formAttrs})}},render(t){const e={class:this.classes,attrs:this.attrs,props:{...this.$props,value:this.model,instantFeedback:this.computedInstantFeedback}};return!0===this.editable&&(e.key="dir",e.on=this.onEvents,e.directives=cache(this,"dir",[{name:"touch-pan",value:this.__pan,modifiers:{prevent:!0,stop:!0,mouse:!0}}]),void 0!==this.name&&(e.scopedSlots={internal:this.__getNameInput})),t(QCircularProgress,e,slot(this,"default"))}});const{passive:passive$1}=listenOpts,axisValues=["both","horizontal","vertical"];var QScrollObserver=Vue.extend({name:"QScrollObserver",props:{axis:{type:String,validator:t=>axisValues.includes(t),default:"vertical"},debounce:[String,Number],scrollTarget:{default:void 0}},render:noop,data:()=>({scroll:{position:{top:0,left:0},direction:"none",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}}}),watch:{scrollTarget(){this.__unconfigureScrollTarget(),this.__configureScrollTarget()}},methods:{getPosition(){return JSON.parse(JSON.stringify(this.scroll))},trigger(t){if(!0===t||0===this.debounce||"0"===this.debounce)this.__emit();else if(void 0===this.clearTimer){const[t,e]=this.debounce?[setTimeout(this.__emit,this.debounce),clearTimeout]:[requestAnimationFrame(this.__emit),cancelAnimationFrame];this.clearTimer=(()=>{e(t),this.clearTimer=void 0})}},__emit(){void 0!==this.clearTimer&&this.clearTimer();const t=Math.max(0,getVerticalScrollPosition(this.__scrollTarget)),e=getHorizontalScrollPosition(this.__scrollTarget),i={top:t-this.scroll.position.top,left:e-this.scroll.position.left};if("vertical"===this.axis&&0===i.top||"horizontal"===this.axis&&0===i.left)return;const s=Math.abs(i.top)>=Math.abs(i.left)?i.top<0?"up":"down":i.left<0?"left":"right";this.scroll.position={top:t,left:e},this.scroll.directionChanged=this.scroll.direction!==s,this.scroll.delta=i,!0===this.scroll.directionChanged&&(this.scroll.direction=s,this.scroll.inflectionPoint=this.scroll.position),this.$emit("scroll",this.getPosition())},__configureScrollTarget(){this.__scrollTarget=getScrollTarget(this.$el.parentNode,this.scrollTarget),this.__scrollTarget.addEventListener("scroll",this.trigger,passive$1),this.trigger(!0)},__unconfigureScrollTarget(){void 0!==this.__scrollTarget&&(this.__scrollTarget.removeEventListener("scroll",this.trigger,passive$1),this.__scrollTarget=void 0)}},mounted(){this.__configureScrollTarget()},beforeDestroy(){void 0!==this.clearTimer&&this.clearTimer(),this.__unconfigureScrollTarget()}}),QLayout=Vue.extend({name:"QLayout",mixins:[ListenersMixin],provide(){return{layout:this}},props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:t=>/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(t.toLowerCase())}},data(){return{height:this.$q.screen.height,width:!0===this.container?0:this.$q.screen.width,containerHeight:0,scrollbarWidth:!0===onSSR?0:getScrollbarWidth(),header:{size:0,offset:0,space:!1},right:{size:300,offset:0,space:!1},footer:{size:0,offset:0,space:!1},left:{size:300,offset:0,space:!1},scroll:{position:0,direction:"down"}}},computed:{rows(){const t=this.view.toLowerCase().split(" ");return{top:t[0].split(""),middle:t[1].split(""),bottom:t[2].split("")}},style(){return!0===this.container?null:{minHeight:this.$q.screen.height+"px"}},targetStyle(){if(0!==this.scrollbarWidth)return{[!0===this.$q.lang.rtl?"left":"right"]:`${this.scrollbarWidth}px`}},targetChildStyle(){if(0!==this.scrollbarWidth)return{[!0===this.$q.lang.rtl?"right":"left"]:0,[!0===this.$q.lang.rtl?"left":"right"]:`-${this.scrollbarWidth}px`,width:`calc(100% + ${this.scrollbarWidth}px)`}},totalWidth(){return this.width+this.scrollbarWidth},classes(){return"q-layout q-layout--"+(!0===this.container?"containerized":"standard")},scrollbarEvtAction(){return!0!==this.container&&this.scrollbarWidth>0?"add":"remove"}},watch:{scrollbarEvtAction:"__updateScrollEvent"},created(){this.instances={}},mounted(){"add"===this.scrollbarEvtAction&&this.__updateScrollEvent("add")},beforeDestroy(){"add"===this.scrollbarEvtAction&&this.__updateScrollEvent("remove")},render(t){const e=t("div",{class:this.classes,style:this.style,attrs:{tabindex:-1},on:{...this.qListeners}},mergeSlot([t(QScrollObserver,{key:"scroll",on:cache(this,"scroll",{scroll:this.__onPageScroll})}),t(QResizeObserver,{key:"resizeOut",on:cache(this,"resizeOut",{resize:this.__onPageResize})})],this,"default"));return!0===this.container?t("div",{staticClass:"q-layout-container overflow-hidden"},[t(QResizeObserver,{key:"resizeIn",on:cache(this,"resizeIn",{resize:this.__onContainerResize})}),t("div",{staticClass:"absolute-full",style:this.targetStyle},[t("div",{staticClass:"scroll",style:this.targetChildStyle},[e])])]):e},methods:{__animate(){void 0!==this.timer?clearTimeout(this.timer):document.body.classList.add("q-body--layout-animate"),this.timer=setTimeout(()=>{document.body.classList.remove("q-body--layout-animate"),this.timer=void 0},150)},__onPageScroll(t){!0!==this.container&&!0===document.qScrollPrevented||(this.scroll={position:t.position.top,direction:t.direction,directionChanged:t.directionChanged,inflectionPoint:t.inflectionPoint.top,delta:t.delta.top},void 0!==this.qListeners.scroll&&this.$emit("scroll",{...this.scroll}))},__onPageResize({height:t,width:e}){let i=!1;this.height!==t&&(i=!0,this.height=t,void 0!==this.qListeners["scroll-height"]&&this.$emit("scroll-height",t),this.__updateScrollbarWidth()),this.width!==e&&(i=!0,this.width=e),!0===i&&void 0!==this.qListeners.resize&&this.$emit("resize",{height:t,width:e})},__onContainerResize({height:t}){this.containerHeight!==t&&(this.containerHeight=t,this.__updateScrollbarWidth())},__updateScrollbarWidth(){if(!0===this.container){const t=this.height>this.containerHeight?getScrollbarWidth():0;this.scrollbarWidth!==t&&(this.scrollbarWidth=t)}},__updateScrollEvent(t){void 0!==this.timerScrollbar&&"remove"===t&&(clearTimeout(this.timerScrollbar),this.__restoreScrollbar()),window[`${t}EventListener`]("resize",this.__hideScrollbar)},__hideScrollbar(){if(void 0===this.timerScrollbar){const{offsetHeight:t,classList:e}=document.body;if(t>this.$q.screen.height)return;e.add("hide-scrollbar")}else clearTimeout(this.timerScrollbar);this.timerScrollbar=setTimeout(this.__restoreScrollbar,200)},__restoreScrollbar(){this.timerScrollbar=void 0,document.body.classList.remove("hide-scrollbar")}}}),QMarkupTable=Vue.extend({name:"QMarkupTable",mixins:[DarkMixin,ListenersMixin],props:{dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:t=>["horizontal","vertical","cell","none"].includes(t)},wrapCells:Boolean},computed:{classes(){return`q-table--${this.separator}-separator`+` q-table--${this.darkSuffix} q-table__card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.dense?" q-table--dense":"")+(!0===this.flat?" q-table--flat":"")+(!0===this.bordered?" q-table--bordered":"")+(!0===this.square?" q-table--square":"")+(!1===this.wrapCells?" q-table--no-wrap":"")}},render(t){return t("div",{staticClass:"q-markup-table q-table__container q-table__card",class:this.classes,on:{...this.qListeners}},[t("table",{staticClass:"q-table"},slot(this,"default"))])}}),QNoSsr=Vue.extend({name:"QNoSsr",mixins:[CanRenderMixin,TagMixin,ListenersMixin],props:{placeholder:String},render(t){const e={on:{...this.qListeners}};if(!0===this.canRender){const i=slot(this,"default");return void 0===i?i:i.length>1?t(this.tag,e,i):i[0]}e.staticClass="q-no-ssr-placeholder";const i=slot(this,"placeholder");return void 0!==i?i.length>1?t(this.tag,e,i):i[0]:void 0!==this.placeholder?t(this.tag,e,[this.placeholder]):void 0}}),QRadio=Vue.extend({name:"QRadio",mixins:[DarkMixin,OptionSizeMixin,FormMixin,RefocusTargetMixin],props:{value:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},computed:{isTrue(){return this.value===this.val},classes(){return"q-radio cursor-pointer no-outline row inline no-wrap items-center"+(!0===this.disable?" disabled":"")+` q-radio--${this.darkSuffix}`+(!0===this.dense?" q-radio--dense":"")+(!0===this.leftLabel?" reverse":"")},innerClass(){const t=void 0===this.color||!0!==this.keepColor&&!0!==this.isTrue?"":` text-${this.color}`;return`q-radio__inner--${!0===this.isTrue?"truthy":"falsy"}${t}`},computedIcon(){return!0===this.isTrue?this.checkedIcon:this.uncheckedIcon},computedTabindex(){return!0===this.disable?-1:this.tabindex||0},formAttrs(){const t={type:"radio"};return void 0!==this.name&&Object.assign(t,{name:this.name,value:this.val}),t},formDomProps(){if(void 0!==this.name&&!0===this.isTrue)return{checked:!0}},attrs(){const t={tabindex:this.computedTabindex,role:"radio","aria-label":this.label,"aria-checked":!0===this.isTrue?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{set(t){void 0!==t&&(stopAndPrevent(t),this.__refocusTarget(t)),!0!==this.disable&&!0!==this.isTrue&&this.$emit("input",this.val,t)}},render(t){const e=void 0!==this.computedIcon?[t("div",{key:"icon",staticClass:"q-radio__icon-container absolute-full flex flex-center no-wrap"},[t(QIcon,{staticClass:"q-radio__icon",props:{name:this.computedIcon}})])]:[t("svg",{key:"svg",staticClass:"q-radio__bg absolute non-selectable",attrs:{focusable:"false",viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12"}}),t("path",{staticClass:"q-radio__check",attrs:{d:"M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6"}})])];!0!==this.disable&&this.__injectFormInput(e,"unshift","q-radio__native q-ma-none q-pa-none");const i=[t("div",{staticClass:"q-radio__inner relative-position",class:this.innerClass,style:this.sizeStyle,attrs:{"aria-hidden":"true"}},e)];void 0!==this.__refocusTargetEl&&i.push(this.__refocusTargetEl);const s=void 0!==this.label?mergeSlot([this.label],this,"default"):slot(this,"default");return void 0!==s&&i.push(t("div",{staticClass:"q-radio__label q-anchor--skip"},s)),t("div",{key:"inpExt",class:this.classes,attrs:this.attrs,on:cache(this,"inpExt",{click:this.set,keydown:t=>{13!==t.keyCode&&32!==t.keyCode||stopAndPrevent(t)},keyup:t=>{13!==t.keyCode&&32!==t.keyCode||this.set(t)}})},i)}}),QToggle=Vue.extend({name:"QToggle",mixins:[CheckboxMixin],props:{icon:String,iconColor:String},computed:{computedIcon(){return(!0===this.isTrue?this.checkedIcon:!0===this.isIndeterminate?this.indeterminateIcon:this.uncheckedIcon)||this.icon},computedIconColor(){if(!0===this.isTrue)return this.iconColor}},methods:{__getInner(t){return[t("div",{staticClass:"q-toggle__track"}),t("div",{staticClass:"q-toggle__thumb absolute flex flex-center no-wrap"},void 0!==this.computedIcon?[t(QIcon,{props:{name:this.computedIcon,color:this.computedIconColor}})]:void 0)]}},created(){this.type="toggle"}});const components$1={radio:QRadio,checkbox:QCheckbox,toggle:QToggle},typeValues=Object.keys(components$1);var QOptionGroup=Vue.extend({name:"QOptionGroup",mixins:[DarkMixin,ListenersMixin],props:{value:{required:!0},options:{type:Array,validator:t=>t.every(t=>"value"in t&&"label"in t)},name:String,type:{default:"radio",validator:t=>typeValues.includes(t)},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean},computed:{component(){return components$1[this.type]},model(){return Array.isArray(this.value)?this.value.slice():this.value},classes(){return"q-option-group q-gutter-x-sm"+(!0===this.inline?" q-option-group--inline":"")},attrs(){if("radio"===this.type){const t={role:"radiogroup"};return!0===this.disable&&(t["aria-disabled"]="true"),t}return{role:"group"}}},methods:{__update(t){this.$emit("input",t)}},created(){const t=Array.isArray(this.value);"radio"===this.type?t&&console.error("q-option-group: model should not be array"):!1===t&&console.error("q-option-group: model should be array in your case")},render(t){return t("div",{class:this.classes,attrs:this.attrs,on:{...this.qListeners}},this.options.map((e,i)=>{const s=void 0!==this.$scopedSlots["label-"+i]?this.$scopedSlots["label-"+i](e):void 0!==this.$scopedSlots.label?this.$scopedSlots.label(e):void 0;return t("div",[t(this.component,{key:"inp",props:{value:this.value,val:e.value,name:void 0===e.name?this.name:e.name,disable:this.disable||e.disable,label:void 0===s?e.label:void 0,leftLabel:void 0===e.leftLabel?this.leftLabel:e.leftLabel,color:void 0===e.color?this.color:e.color,checkedIcon:e.checkedIcon,uncheckedIcon:e.uncheckedIcon,dark:void 0===e.dark?this.dark:e.dark,size:void 0===e.size?this.size:e.size,dense:this.dense,keepColor:void 0===e.keepColor?this.keepColor:e.keepColor},on:cache(this,"inp",{input:this.__update})},s)])}))}}),QPage=Vue.extend({name:"QPage",mixins:[ListenersMixin],inject:{pageContainer:{default(){console.error("QPage needs to be child of QPageContainer")}},layout:{}},props:{padding:Boolean,styleFn:Function},computed:{style(){const t=(!0===this.layout.header.space?this.layout.header.size:0)+(!0===this.layout.footer.space?this.layout.footer.size:0);if("function"==typeof this.styleFn){const e=!0===this.layout.container?this.layout.containerHeight:this.$q.screen.height;return this.styleFn(t,e)}return{minHeight:!0===this.layout.container?this.layout.containerHeight-t+"px":0===this.$q.screen.height?`calc(100vh - ${t}px)`:this.$q.screen.height-t+"px"}},classes(){if(!0===this.padding)return"q-layout-padding"}},render(t){return t("main",{staticClass:"q-page",style:this.style,class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QPageContainer=Vue.extend({name:"QPageContainer",mixins:[ListenersMixin],inject:{layout:{default(){console.error("QPageContainer needs to be child of QLayout")}}},provide:{pageContainer:!0},computed:{style(){const t={};return!0===this.layout.header.space&&(t.paddingTop=`${this.layout.header.size}px`),!0===this.layout.right.space&&(t[`padding${!0===this.$q.lang.rtl?"Left":"Right"}`]=`${this.layout.right.size}px`),!0===this.layout.footer.space&&(t.paddingBottom=`${this.layout.footer.size}px`),!0===this.layout.left.space&&(t[`padding${!0===this.$q.lang.rtl?"Right":"Left"}`]=`${this.layout.left.size}px`),t}},render(t){return t("div",{staticClass:"q-page-container",style:this.style,on:{...this.qListeners}},slot(this,"default"))}}),QPageSticky=Vue.extend({name:"QPageSticky",mixins:[ListenersMixin],inject:{layout:{default(){console.error("QPageSticky needs to be child of QLayout")}}},props:{position:{type:String,default:"bottom-right",validator:t=>["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)},offset:{type:Array,validator:t=>2===t.length},expand:Boolean},computed:{attach(){const t=this.position;return{top:t.indexOf("top")>-1,right:t.indexOf("right")>-1,bottom:t.indexOf("bottom")>-1,left:t.indexOf("left")>-1,vertical:"top"===t||"bottom"===t,horizontal:"left"===t||"right"===t}},top(){return this.layout.header.offset},right(){return this.layout.right.offset},bottom(){return this.layout.footer.offset},left(){return this.layout.left.offset},style(){let t=0,e=0;const i=this.attach,s=!0===this.$q.lang.rtl?-1:1;!0===i.top&&0!==this.top?e=`${this.top}px`:!0===i.bottom&&0!==this.bottom&&(e=`${-this.bottom}px`),!0===i.left&&0!==this.left?t=`${s*this.left}px`:!0===i.right&&0!==this.right&&(t=`${-s*this.right}px`);const o={transform:`translate(${t}, ${e})`};return this.offset&&(o.margin=`${this.offset[1]}px ${this.offset[0]}px`),!0===i.vertical?(0!==this.left&&(o[!0===this.$q.lang.rtl?"right":"left"]=`${this.left}px`),0!==this.right&&(o[!0===this.$q.lang.rtl?"left":"right"]=`${this.right}px`)):!0===i.horizontal&&(0!==this.top&&(o.top=`${this.top}px`),0!==this.bottom&&(o.bottom=`${this.bottom}px`)),o},classes(){return`fixed-${this.position} q-page-sticky--${!0===this.expand?"expand":"shrink"}`}},render(t){const e=slot(this,"default");return t("div",{staticClass:"q-page-sticky row flex-center",class:this.classes,style:this.style,on:{...this.qListeners}},!0===this.expand?e:[t("div",e)])}}),QPageScroller=Vue.extend({name:"QPageScroller",mixins:[QPageSticky],props:{scrollOffset:{type:Number,default:1e3},reverse:Boolean,duration:{type:Number,default:300},offset:{default:()=>[18,18]}},inject:{layout:{default(){console.error("QPageScroller needs to be used within a QLayout")}}},data(){return{showing:this.__isVisible()}},computed:{scrollHeight(){return this.layout.height-(!0===this.layout.container?this.layout.containerHeight:this.$q.screen.height)},onEvents(){return{...this.qListeners,click:this.__onClick}}},watch:{"layout.scroll.position"(){this.__updateVisibility()},reverse:{handler(t){!0===t?void 0===this.heightWatcher&&(this.heightWatcher=this.$watch("scrollHeight",this.__updateVisibility)):void 0!==this.heightWatcher&&this.__cleanup()},immediate:!0}},methods:{__isVisible(){return!0===this.reverse?this.scrollHeight-this.layout.scroll.position>this.scrollOffset:this.layout.scroll.position>this.scrollOffset},__onClick(t){const e=getScrollTarget(!0===this.layout.container?this.$el:this.layout.$el);setScrollPosition(e,!0===this.reverse?this.layout.height:0,this.duration),this.$emit("click",t)},__updateVisibility(){const t=this.__isVisible();this.showing!==t&&(this.showing=t)},__cleanup(){this.heightWatcher(),this.heightWatcher=void 0}},render(t){return t("transition",{props:{name:"q-transition--fade"}},!0===this.showing?[t("div",{staticClass:"q-page-scroller",on:this.onEvents},[QPageSticky.options.render.call(this,t)])]:null)},beforeDestroy(){void 0!==this.heightWatcher&&this.__cleanup()}});function getBool(t,e){return[!0,!1].includes(t)?t:e}var QPagination=Vue.extend({name:"QPagination",mixins:[DarkMixin,ListenersMixin],props:{value:{type:Number,required:!0},min:{type:[Number,String],default:1},max:{type:[Number,String],required:!0},maxPages:{type:[Number,String],default:0,validator:t=>("string"==typeof t?parseInt(t,10):t)>=0},inputStyle:[Array,String,Object],inputClass:[Array,String,Object],size:String,disable:Boolean,input:Boolean,iconPrev:String,iconNext:String,iconFirst:String,iconLast:String,toFn:Function,boundaryLinks:{type:Boolean,default:null},boundaryNumbers:{type:Boolean,default:null},directionLinks:{type:Boolean,default:null},ellipses:{type:Boolean,default:null},ripple:{type:[Boolean,Object],default:null},round:Boolean,rounded:Boolean,flat:Boolean,outline:Boolean,unelevated:Boolean,push:Boolean,glossy:Boolean,color:{type:String,default:"primary"},textColor:String,activeDesign:{type:String,default:"",values:t=>""===t||btnDesignOptions.includes(t)},activeColor:String,activeTextColor:String,gutter:String,padding:{type:String,default:"3px 2px"}},data:()=>({newPage:null}),watch:{min(){this.model=this.value},max(){this.model=this.value}},computed:{model:{get(){return this.value},set(t){if(t=parseInt(t,10),this.disable||isNaN(t))return;const e=between(t,this.__min,this.__max);this.$emit("input",e)}},inputPlaceholder(){return this.model+" / "+this.__max},__min(){return parseInt(this.min,10)},__max(){return parseInt(this.max,10)},__maxPages(){return parseInt(this.maxPages,10)},__boundaryLinks(){return getBool(this.boundaryLinks,this.input)},__boundaryNumbers(){return getBool(this.boundaryNumbers,!this.input)},__directionLinks(){return getBool(this.directionLinks,this.input)},__ellipses(){return getBool(this.ellipses,!this.input)},__gutter(){return this.gutter in btnPadding?`${btnPadding[this.gutter]}px`:this.gutter||null},__gutterStyle(){return null!==this.__gutter?`--q-pagination-gutter-parent:-${this.__gutter};--q-pagination-gutter-child:${this.__gutter}`:null},__btnDesign(){return getBtnDesign(this,"flat")},__btnActiveDesign(){const t={[this.__btnDesign]:!1};return""!==this.activeDesign&&(t[this.activeDesign]=!0),t},icons(){const t=[this.iconFirst||this.$q.iconSet.pagination.first,this.iconPrev||this.$q.iconSet.pagination.prev,this.iconNext||this.$q.iconSet.pagination.next,this.iconLast||this.$q.iconSet.pagination.last];return!0===this.$q.lang.rtl?t.reverse():t},attrs(){const t={role:"navigation"};return!0===this.disable&&(t["aria-disabled"]="true"),t},btnProps(){return{[this.__btnDesign]:!0,round:this.round,rounded:this.rounded,padding:this.padding,color:this.color,textColor:this.textColor,size:this.size,ripple:null===this.ripple||this.ripple}},activeBtnProps(){return{...this.__btnActiveDesign,color:this.activeColor||this.color,textColor:this.activeTextColor||this.textColor}},btnConfig(){let t=Math.max(this.__maxPages,1+(this.__ellipses?2:0)+(this.__boundaryNumbers?2:0));const e={pgFrom:this.__min,pgTo:this.__max,ellipsesStart:!1,ellipsesEnd:!1,boundaryStart:!1,boundaryEnd:!1,marginalStyle:{minWidth:`${Math.max(2,String(this.__max).length)}em`}};return this.__maxPages&&tthis.__min+(this.__boundaryNumbers?1:0)&&(e.ellipsesStart=!0,e.pgFrom++),this.__boundaryNumbers&&(e.boundaryEnd=!0,e.pgTo--),this.__ellipses&&e.pgTo{this.model=this.newPage,this.newPage=null};return{input:t=>{this.newPage=t},keyup:e=>{!0===isKeyCode(e,13)&&t()},blur:t}}},methods:{set(t){this.model=t},setByOffset(t){this.model=this.model+t},__getBtn(t,e,i,s,o){return e.props={...this.btnProps,...i},e.attrs={"aria-label":s,"aria-current":"false",...e.attrs},!0===o&&(Object.assign(e.props,this.activeBtnProps),e.attrs["aria-current"]="true"),void 0!==s&&(void 0!==this.toFn?e.props.to=this.toFn(s):e.on={click:()=>{this.set(s)}}),t(QBtn,e)}},render(t){const e=[],i=[];let s;if(!0===this.__boundaryLinks&&(e.push(this.__getBtn(t,{key:"bls"},{disable:this.disable||this.value<=this.__min,icon:this.icons[0]},this.__min)),i.unshift(this.__getBtn(t,{key:"ble"},{disable:this.disable||this.value>=this.__max,icon:this.icons[3]},this.__max))),!0===this.__directionLinks&&(e.push(this.__getBtn(t,{key:"bdp"},{disable:this.disable||this.value<=this.__min,icon:this.icons[1]},this.value-1)),i.unshift(this.__getBtn(t,{key:"bdn"},{disable:this.disable||this.value>=this.__max,icon:this.icons[2]},this.value+1))),!0!==this.input){s=[];const{pgFrom:o,pgTo:n,marginalStyle:r}=this.btnConfig;if(!0===this.btnConfig.boundaryStart){const i=this.__min===this.value;e.push(this.__getBtn(t,{key:"bns",style:r},{disable:this.disable,label:this.__min},this.__min,i))}if(!0===this.btnConfig.boundaryEnd){const e=this.__max===this.value;i.unshift(this.__getBtn(t,{key:"bne",style:r},{disable:this.disable,label:this.__max},this.__max,e))}!0===this.btnConfig.ellipsesStart&&e.push(this.__getBtn(t,{key:"bes",style:r},{disable:this.disable,label:"…",ripple:!1},o-1)),!0===this.btnConfig.ellipsesEnd&&i.unshift(this.__getBtn(t,{key:"bee",style:r},{disable:this.disable,label:"…",ripple:!1},n+1));for(let e=o;e<=n;e++)s.push(this.__getBtn(t,{key:`bpg${e}`,style:r},{disable:this.disable,label:e},e,e===this.value))}return t("div",{staticClass:"q-pagination row no-wrap items-center",class:{disabled:this.disable},attrs:this.attrs,on:{...this.qListeners}},[t("div",{staticClass:"q-pagination__content row no-wrap items-center",style:this.__gutterStyle},[...e,t("div",{key:"stop",staticClass:"q-pagination__middle row justify-center",on:!0===this.input?cache(this,"stop",{input:stop}):null},!0===this.input?[t(QInput,{key:"inp",staticClass:"inline",style:{width:`${this.inputPlaceholder.length/1.5}em`},props:{type:"number",dense:!0,value:this.newPage,disable:this.disable,dark:this.dark,borderless:!0,inputClass:this.inputClass,inputStyle:this.inputStyle},attrs:{placeholder:this.inputPlaceholder,min:this.__min,max:this.__max},on:{...this.inputEvents}})]:s),...i])])}});function frameDebounce(t){let e,i,s=!1;function o(){i=arguments,!0!==s&&(s=!0,e=requestAnimationFrame(()=>{t.apply(this,i),i=void 0,s=!1}))}return o.cancel=(()=>{window.cancelAnimationFrame(e),s=!1}),o}const{passive:passive}=listenOpts;var QParallax=Vue.extend({name:"QParallax",mixins:[ListenersMixin],props:{src:String,height:{type:Number,default:500},speed:{type:Number,default:1,validator:t=>t>=0&&t<=1},scrollTarget:{default:void 0}},data:()=>({scrolling:!1,percentScrolled:0}),watch:{height(){!0===this.working&&this.__updatePos()},scrollTarget(){!0===this.working&&(this.__stop(),this.__start())}},methods:{__update(t){this.percentScrolled=t,void 0!==this.qListeners.scroll&&this.$emit("scroll",t)},__updatePos(){let t,e,i;this.__scrollTarget===window?(t=0,i=e=window.innerHeight):i=(t=offset(this.__scrollTarget).top)+(e=height(this.__scrollTarget));const s=offset(this.$el).top,o=s+this.height;if(void 0!==this.observer||o>t&&s{this[!0===t[0].isIntersecting?"__start":"__stop"]()}),this.observer.observe(this.$el)):this.__start()},beforeDestroy(){this.__stop(),void 0!==this.observer&&this.observer.disconnect(),this.media.onload=this.media.onloadstart=this.media.loadedmetadata=null}});function cloneDeep(t,e=new WeakMap){if(Object(t)!==t)return t;if(e.has(t))return e.get(t);const i=t instanceof Date?new Date(t):t instanceof RegExp?new RegExp(t.source,t.flags):t instanceof Set?new Set:t instanceof Map?new Map:"function"!=typeof t.constructor?Object.create(null):void 0!==t.prototype&&"function"==typeof t.prototype.constructor?t:new t.constructor;if("function"==typeof t.constructor&&"function"==typeof t.valueOf){const i=t.valueOf();if(Object(i)!==i){const s=new t.constructor(i);return e.set(t,s),s}}return e.set(t,i),t instanceof Set?t.forEach(t=>{i.add(cloneDeep(t,e))}):t instanceof Map&&t.forEach((t,s)=>{i.set(s,cloneDeep(t,e))}),Object.assign(i,...Object.keys(t).map(i=>({[i]:cloneDeep(t[i],e)})))}var QPopupEdit=Vue.extend({name:"QPopupEdit",mixins:[AttrsMixin],props:{value:{required:!0},title:String,buttons:Boolean,labelSet:String,labelCancel:String,color:{type:String,default:"primary"},validate:{type:Function,default:()=>!0},autoSave:Boolean,cover:{type:Boolean,default:!0},contentClass:String,disable:Boolean},data:()=>({modelChanged:!1,model:null}),computed:{classes(){return"q-popup-edit"+(void 0!==this.contentClass?` ${this.contentClass}`:"")},modelValue(){return!0===this.modelChanged?this.model:this.value},initialValue(){return!0!==this.modelChanged?this.model:this.value},defaultSlotScope(){return injectProp({initialValue:this.initialValue,updatePosition:this.__reposition,emitValue:this.__changeModel,validate:this.validate,set:this.set,cancel:this.cancel},"value",()=>this.modelValue,this.__changeModel)},menuProps(){return{...this.qAttrs,cover:this.cover,contentClass:this.classes}}},methods:{set(){!0===this.validate(this.modelValue)&&(!0===this.__hasChanged()&&(this.$emit("save",this.modelValue,this.initialValue),!0===this.modelChanged&&this.$emit("input",this.modelValue)),this.__close())},cancel(){!0===this.__hasChanged()&&(this.$emit("cancel",this.modelValue,this.initialValue),!0!==this.modelChanged&&this.$emit("input",this.initialValue)),this.__close()},show(t){void 0!==this.$refs.menu&&this.$refs.menu.show(t)},hide(t){void 0!==this.$refs.menu&&this.$refs.menu.hide(t)},__hasChanged(){return!1===isDeepEqual(this.modelValue,this.initialValue)},__changeModel(t){!0!==this.disable&&(this.model=t,this.modelChanged=!0)},__close(){this.validated=!0,!0===this.$refs.menu.showing&&this.$refs.menu.hide()},__reposition(){this.$nextTick(()=>{this.$refs.menu.updatePosition()})},__getContent(t){const e=slot(this,"title",this.title),i=void 0===this.$scopedSlots.default?[]:[].concat(this.$scopedSlots.default(this.defaultSlotScope));return e&&i.unshift(t("div",{staticClass:"q-dialog__title q-mt-sm q-mb-sm"},[e])),!0===this.buttons&&i.push(t("div",{staticClass:"q-popup-edit__buttons row justify-center no-wrap"},[t(QBtn,{key:"cancel",props:{flat:!0,color:this.color,label:this.labelCancel||this.$q.lang.label.cancel},on:cache(this,"cancel",{click:this.cancel})}),t(QBtn,{key:"ok",props:{flat:!0,color:this.color,label:this.labelSet||this.$q.lang.label.set},on:cache(this,"ok",{click:this.set})})])),i}},render(t){if(!0!==this.disable)return t(QMenu,{key:"menu",ref:"menu",props:this.menuProps,on:cache(this,"menu",{"before-show":()=>{this.validated=!1,this.modelChanged=!1,this.model=cloneDeep(this.value),this.watcher=this.$watch("value",this.__reposition),this.$emit("before-show")},show:()=>{this.$emit("show")},"escape-key":this.cancel,"before-hide":()=>{this.watcher(),!1===this.validated&&!0===this.__hasChanged()&&(!0===this.autoSave&&!0===this.validate(this.model)?(this.$emit("save",this.modelValue,this.initialValue),!0===this.modelChanged&&this.$emit("input",this.modelValue)):(this.$emit("cancel",this.modelValue,this.initialValue),!0!==this.modelChanged&&this.$emit("input",this.initialValue))),this.$emit("before-hide")},hide:()=>{this.$emit("hide")},keyup:t=>{!0===isKeyCode(t,13)&&this.set()}})},this.__getContent(t))}}),QPopupProxy=Vue.extend({name:"QPopupProxy",mixins:[AttrsMixin,ListenersMixin,AnchorMixin],props:{breakpoint:{type:[String,Number],default:450}},data(){const t=parseInt(this.breakpoint,10);return{type:this.$q.screen.width({state:"pull",pullRatio:0,pulling:!1,pullPosition:-40,animating:!1,positionCSS:{}}),computed:{style(){return{opacity:this.pullRatio,transform:`translateY(${this.pullPosition}px) rotate(${360*this.pullRatio}deg)`}},classes(){return"q-pull-to-refresh__puller row flex-center"+(!0===this.animating?" q-pull-to-refresh__puller--animating":"")+(void 0!==this.bgColor?` bg-${this.bgColor}`:"")},directives(){if(!0!==this.disable){const t={down:!0};return!0!==this.noMouse&&(t.mouse=!0),[{name:"touch-pan",modifiers:t,value:this.__pull}]}},contentClass(){return`q-pull-to-refresh__content${!0===this.pulling?" no-pointer-events":""}`}},watch:{scrollTarget(){this.updateScrollTarget()}},methods:{trigger(){this.$emit("refresh",()=>{this.__animateTo({pos:-40,ratio:0},()=>{this.state="pull"})})},updateScrollTarget(){this.__scrollTarget=getScrollTarget(this.$el,this.scrollTarget)},__pull(t){if(!0===t.isFinal)return void(!0===this.pulling&&(this.pulling=!1,"pulled"===this.state?(this.state="refreshing",this.__animateTo({pos:20}),this.trigger()):"pull"===this.state&&this.__animateTo({pos:-40,ratio:0})));if(!0===this.animating||"refreshing"===this.state)return!1;if(!0===t.isFirst){if(0!==getScrollPosition(this.__scrollTarget)||"down"!==t.direction)return!0===this.pulling&&(this.pulling=!1,this.state="pull",this.__animateTo({pos:-40,ratio:0})),!1;this.pulling=!0;const{top:e,left:i}=this.$el.getBoundingClientRect();this.positionCSS={top:e+"px",left:i+"px",width:window.getComputedStyle(this.$el).getPropertyValue("width")}}prevent(t.evt);const e=Math.min(140,Math.max(0,t.distance.y));this.pullPosition=e-40,this.pullRatio=between(e/60,0,1);const i=this.pullPosition>20?"pulled":"pull";this.state!==i&&(this.state=i)},__animateTo({pos:t,ratio:e},i){this.animating=!0,this.pullPosition=t,void 0!==e&&(this.pullRatio=e),clearTimeout(this.timer),this.timer=setTimeout(()=>{this.animating=!1,i&&i()},300)}},mounted(){this.updateScrollTarget()},beforeDestroy(){clearTimeout(this.timer)},render(t){return t("div",{staticClass:"q-pull-to-refresh",on:{...this.qListeners},directives:this.directives},[t("div",{class:this.contentClass},slot(this,"default")),t("div",{staticClass:"q-pull-to-refresh__puller-container fixed row flex-center no-pointer-events z-top",style:this.positionCSS},[t("div",{style:this.style,class:this.classes},["refreshing"!==this.state?t(QIcon,{props:{name:this.icon||this.$q.iconSet.pullToRefresh.icon,color:this.color,size:"32px"}}):t(QSpinner,{props:{size:"24px",color:this.color}})])])])}});const dragType={MIN:0,RANGE:1,MAX:2};var QRange=Vue.extend({name:"QRange",mixins:[SliderMixin],props:{value:{type:Object,default:()=>({min:null,max:null}),validator:t=>"min"in t&&"max"in t},dragRange:Boolean,dragOnlyRange:Boolean,leftLabelColor:String,leftLabelTextColor:String,rightLabelColor:String,rightLabelTextColor:String,leftLabelValue:[String,Number],rightLabelValue:[String,Number],leftThumbColor:String,rightThumbColor:String},data(){return{model:{min:null===this.value.min?this.__getInnerMin():between(this.value.min,this.min,this.max),max:null===this.value.max?this.__getInnerMax():between(this.value.max,this.min,this.max)},curMinRatio:0,curMaxRatio:0}},computed:{canDragRange(){return!0===this.dragRange||!0===this.dragOnlyRange},modelMinRatio(){return this.__convertModelToRatio(this.model.min)},modelMaxRatio(){return this.__convertModelToRatio(this.model.max)},ratioMin(){return!0===this.active?this.curMinRatio:this.modelMinRatio},ratioMax(){return!0===this.active?this.curMaxRatio:this.modelMaxRatio},selectionBarStyle(){const t=Math.max(this.ratioMin,this.innerMinRatio),e={[this.positionProp]:`${100*t}%`,[this.sizeProp]:`${100*(between(this.ratioMax,t,this.innerMaxRatio)-t)}%`};return void 0!==this.selectionImg&&(e.backgroundImage=`url(${this.selectionImg}) !important`),e},trackContainerAttrs(){return!0!==this.$q.platform.is.mobile?{tabindex:!1!==this.canDragRange?this.computedTabindex:-1}:void 0},trackContainerEvents(){return!0!==this.editable?{}:!0===this.$q.platform.is.mobile?{click:this.__onMobileClick}:{mousedown:this.__onActivate,focus:()=>{this.focus="both"},blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}},thumbAttrs(){return{tabindex:!0!==this.dragOnlyRange?this.computedTabindex:null}},thumbMinEvents(){return this.__getEvents("min")},thumbMaxEvents(){return this.__getEvents("max")},thumbMinLabel(){return void 0!==this.leftLabelValue?this.leftLabelValue:this.value.minthis.max?this.value.min:this.model.min},thumbMaxLabel(){return void 0!==this.rightLabelValue?this.rightLabelValue:this.value.maxthis.max?this.value.max:this.model.max},thumbMinClasses(){const t=this.leftThumbColor||this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.value.minthis.max?" q-slider__thumb--wrong-value":"")+(!1!==this.preventFocus||"min"!==this.focus&&"both"!==this.focus?"":" q-slider--focus")+(void 0!==t?` text-${t}`:"")},thumbMaxClasses(){const t=this.rightThumbColor||this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.value.maxthis.max?" q-slider__thumb--hidden":"")+(!1!==this.preventFocus||"max"!==this.focus&&"both"!==this.focus?"":" q-slider--focus")+(void 0!==t?` text-${t}`:"")},thumbMinStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratioMin}%`,zIndex:"min"===this.focus?2:void 0}},thumbMaxStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratioMax}%`,zIndex:"max"===this.focus?2:void 0}},thumbMinPinColor(){const t=this.leftLabelColor||this.labelColor;return void 0!==t?` text-${t}`:""},thumbMaxPinColor(){const t=this.rightLabelColor||this.labelColor;return void 0!==t?` text-${t}`:""},thumbMinTextContainerStyle(){return this.__getTextContainerStyle(this.ratioMin)},thumbMaxTextContainerStyle(){return this.__getTextContainerStyle(this.ratioMax)},thumbMinTextClass(){const t=this.leftLabelTextColor||this.labelTextColor;return"q-slider__text"+(void 0!==t?` text-${t}`:"")},thumbMaxTextClass(){const t=this.rightLabelTextColor||this.labelTextColor;return"q-slider__text"+(void 0!==t?` text-${t}`:"")},formAttrs(){return{type:"hidden",name:this.name,value:`${this.value.min}|${this.value.max}`}},modelUpdate(){return[this.value.min,this.value.max,this.min,this.max,this.innerMin,this.innerMax].join("#")}},watch:{modelUpdate(){this.model.min=null===this.value.min?this.computedInnerMin:between(this.value.min,this.min,this.max),this.model.max=null===this.value.max?this.computedInnerMax:between(this.value.max,this.min,this.max)},focus(t){if("both"===t&&!0!==this.canDragRange){if(!0!==this.$q.platform.is.mobile){const t=this.$refs[`${this.nextFocus}Thumb`];void 0!==t&&t.focus()}}else!1!==t&&t!==this.nextFocus&&(this.nextFocus=t)}},methods:{__updateValue(t){this.model.min===this.value.min&&this.model.max===this.value.max||this.$emit("input",{...this.model}),!0===t&&this.$emit("change",{...this.model})},__getDragging(t){const{left:e,top:i,width:s,height:o}=this.$el.getBoundingClientRect(),n=!0===this.dragOnlyRange?0:(!0===this.vertical?this.$refs.minThumb.offsetHeight/(2*o):this.$refs.minThumb.offsetWidth/(2*s))+(this.modelMaxRatio-this.modelMinRatio)/20,r={left:e,top:i,width:s,height:o,valueMin:this.model.min,valueMax:this.model.max,ratioMin:this.modelMinRatio,ratioMax:this.modelMaxRatio},a=this.__getDraggingRatio(t,r);return!0!==this.dragOnlyRange&&a=e.ratioMin?(i={minR:e.ratioMin,maxR:s,min:e.valueMin,max:o},this.focus="max"):(i={minR:s,maxR:e.ratioMin,min:o,max:e.valueMin},this.focus="min");break;case dragType.RANGE:const t=s-e.offsetRatio,n=between(e.ratioMin+t,this.innerMinRatio,this.innerMaxRatio-e.rangeRatio),r=o-e.offsetModel,a=between(e.valueMin+r,this.computedInnerMin,this.computedInnerMax-e.rangeValue);i={minR:n,maxR:n+e.rangeRatio,min:parseFloat(a.toFixed(this.computedDecimals)),max:parseFloat((a+e.rangeValue).toFixed(this.computedDecimals))},this.focus="both"}const n="min"===this.focus&&i.max>=this.computedInnerMin&&i.max<=this.computedInnerMax||"max"===this.focus&&i.min>=this.computedInnerMin&&i.min<=this.computedInnerMax?this.focus:null;this.model={min:"max"!==n?between(i.min,this.computedInnerMin,this.computedInnerMax):i.min,max:"min"!==n?between(i.max,this.computedInnerMin,this.computedInnerMax):i.max},null!==this.model.min&&null!==this.model.max||(this.model.min=i.min||this.computedInnerMin,this.model.max=i.max||this.computedInnerMax),!0!==this.snap||0===this.step?(this.curMinRatio="max"!==n?between(i.minR,this.innerMinRatio,this.innerMaxRatio):i.minR,this.curMaxRatio="min"!==n?between(i.maxR,this.innerMinRatio,this.innerMaxRatio):i.maxR):(this.curMinRatio=this.__convertModelToRatio(this.model.min),this.curMaxRatio=this.__convertModelToRatio(this.model.max))},__getEvents(t){return!0!==this.$q.platform.is.mobile&&!0===this.editable&&!0!==this.dragOnlyRange?{focus:()=>{this.focus=t},blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}:{}},__onKeydown(t){if(!keyCodes$3.includes(t.keyCode))return;const e="both"===this.focus&&!0!==this.canDragRange;if(!1!==this.focus&&!0!==e||(this.focus=this.nextFocus),stopAndPrevent(t),!0===this.dragOnlyRange||!0===this.dragRange&&"both"===this.focus){const e=this.model.max-this.model.min,i=between(parseFloat((this.model.min+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),this.computedInnerMin,this.computedInnerMax-e);this.model={min:i,max:parseFloat((i+e).toFixed(this.computedDecimals))}}else{if("min"!==this.focus&&"max"!==this.focus)return;{const e=this.focus;this.model={...this.model,[e]:between(parseFloat((this.model[e]+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),"min"===e?this.computedInnerMin:this.model.min,"max"===e?this.computedInnerMax:this.model.max)}}}this.__updateValue()}},created(){this.nextFocus="min"},render(t){const e=this.__getContent(t,e=>{const i=this.__getThumb(t,{pinColor:this.thumbMinPinColor,textContainerStyle:this.thumbMinTextContainerStyle,textClass:this.thumbMinTextClass,label:this.thumbMinLabel,classes:this.thumbMinClasses,style:this.thumbMinStyle,nodeData:{ref:"minThumb",key:"tmin",on:this.thumbMinEvents,attrs:this.thumbAttrs}}),s=this.__getThumb(t,{pinColor:this.thumbMaxPinColor,textContainerStyle:this.thumbMaxTextContainerStyle,textClass:this.thumbMaxTextClass,label:this.thumbMaxLabel,classes:this.thumbMaxClasses,style:this.thumbMaxStyle,nodeData:{ref:"maxThumb",key:"tmax",on:this.thumbMaxEvents,attrs:this.thumbAttrs}});!0===this.reverse?e.push(s,i):e.push(i,s)});return t("div",{class:"q-range "+this.classes+(null===this.value.min||null===this.value.max?" q-slider--no-value":""),attrs:{...this.attributes,"aria-valuenow":this.value.min+"|"+this.value.max}},e)}}),QRating=Vue.extend({name:"QRating",mixins:[SizeMixin,FormMixin,ListenersMixin],directives:{KeyGroupNavigation:KeyGroupNavigation},props:{value:{type:Number,required:!0},max:{type:[String,Number],default:5},icon:[String,Array],iconHalf:[String,Array],iconSelected:[String,Array],iconAriaLabel:[String,Array],color:[String,Array],colorHalf:[String,Array],colorSelected:[String,Array],vertical:Boolean,noReset:Boolean,noDimming:Boolean,readonly:Boolean,disable:Boolean},data:()=>({mouseModel:0}),computed:{editable(){return!0!==this.readonly&&!0!==this.disable},classes(){return`q-rating--${!0===this.editable?"":"non-"}editable`+(!0===this.vertical?" column justify-center":" row items-center")+(!0===this.noDimming?" q-rating--no-dimming":"")+(!0===this.disable?" disabled":"")+(void 0!==this.color&&!1===Array.isArray(this.color)?` text-${this.color}`:"")},iconData(){const t=!0===Array.isArray(this.icon)?this.icon.length:0,e=!0===Array.isArray(this.iconSelected)?this.iconSelected.length:0,i=!0===Array.isArray(this.iconHalf)?this.iconHalf.length:0,s=!0===Array.isArray(this.color)?this.color.length:0,o=!0===Array.isArray(this.colorSelected)?this.colorSelected.length:0,n=!0===Array.isArray(this.colorHalf)?this.colorHalf.length:0;return{iconLen:t,icon:t>0?this.icon[t-1]:this.icon,selIconLen:e,selIcon:e>0?this.iconSelected[e-1]:this.iconSelected,halfIconLen:i,halfIcon:i>0?this.iconHalf[e-1]:this.iconHalf,colorLen:s,color:s>0?this.color[s-1]:this.color,selColorLen:o,selColor:o>0?this.colorSelected[o-1]:this.colorSelected,halfColorLen:n,halfColor:n>0?this.colorHalf[n-1]:this.colorHalf}},iconLabel(){if("string"==typeof this.iconAriaLabel){const t=this.iconAriaLabel.length>0?`${this.iconAriaLabel} `:"";return e=>`${t}${e}`}if(!0===Array.isArray(this.iconAriaLabel)){const t=this.iconAriaLabel.length;if(t>0)return e=>this.iconAriaLabel[Math.min(e,t)-1]}return(t,e)=>`${e} ${t}`},stars(){const t=[],e=this.iconData,i=Math.ceil(this.value),s=!0===this.editable?0:null,o=void 0===this.iconHalf||i===this.value?-1:i;for(let n=1;n<=this.max;n++){const r=this.mouseModel>=n||0===this.mouseModel&&this.value>=n,a=o===n&&this.mouseModel0&&(!0===a?i:this.value)>=n&&this.mouseModel-1&&(this.__set(e),stopAndPrevent(t))}},render(t){const e=[];return this.stars.forEach(({classes:i,name:s,attrs:o},n)=>{const r=n+1;e.push(t("div",{key:"i#"+r,ref:`rt${r}`,staticClass:"q-rating__icon-container flex flex-center",attrs:o,on:cache(this,"i#"+r,{click:()=>{this.__set(r)},mouseover:()=>{this.__setHoverValue(r)},mouseout:()=>{this.mouseModel=0},focus:()=>{this.__setHoverValue(r)},blur:()=>{this.mouseModel=0},keyup:t=>{this.__keyup(t,r)}})},mergeSlot([t(QIcon,{class:i,props:{name:s}})],this,`tip-${r}`)))}),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{staticClass:"q-rating inline",class:this.classes,style:this.sizeStyle,attrs:this.attrs,directives:this.directives,on:{...this.qListeners}},e)}}),QResponsive=Vue.extend({name:"QResponsive",mixins:[RatioMixin,ListenersMixin],render(t){return t("div",{staticClass:"q-responsive",on:{...this.qListeners}},[t("div",{staticClass:"q-responsive__filler overflow-hidden"},[t("div",{style:this.ratioStyle})]),t("div",{staticClass:"q-responsive__content absolute-full fit"},slot(this,"default"))])}});const getMinThumbSize=t=>t>=250?50:Math.ceil(t/5),axisList=["vertical","horizontal"],dirProps={vertical:{offset:"offsetY",scroll:"scrollTop",dir:"down",dist:"y"},horizontal:{offset:"offsetX",scroll:"scrollLeft",dir:"right",dist:"x"}};var QScrollArea=Vue.extend({name:"QScrollArea",mixins:[DarkMixin],directives:{TouchPan:TouchPan},props:{thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},horizontal:Boolean,tabindex:[String,Number]},data:()=>({tempShowing:!1,panning:!1,hover:!1,container:{vertical:0,horizontal:0},scroll:{vertical:{position:0,size:0},horizontal:{position:0,size:0}}}),computed:{classes(){return"q-scrollarea"+` q-scrollarea--${this.darkSuffix}`},verticalScrollPercentage(){const t=this.scroll.vertical.size-this.container.vertical;if(t<=0)return 0;const e=between(this.scroll.vertical.position/t,0,1);return Math.round(1e4*e)/1e4},horizontalScrollPercentage(){const t=this.scroll.horizontal.size-this.container.horizontal;if(t<=0)return 0;const e=between(this.scroll.horizontal.position/t,0,1);return Math.round(1e4*e)/1e4},verticalThumbHidden(){return!0!==(null===this.visible?this.hover:this.visible)&&!1===this.tempShowing&&!1===this.panning||this.scroll.vertical.size<=this.container.vertical+1},horizontalThumbHidden(){return!0!==(null===this.visible?this.hover:this.visible)&&!1===this.tempShowing&&!1===this.panning||this.scroll.horizontal.size<=this.container.horizontal+1},verticalThumbStart(){return this.verticalScrollPercentage*(this.container.vertical-this.verticalThumbSize)},horizontalThumbStart(){return this.horizontalScrollPercentage*(this.container.horizontal-this.horizontalThumbSize)},verticalThumbSize(){return Math.round(between(this.container.vertical*this.container.vertical/this.scroll.vertical.size,getMinThumbSize(this.container.vertical),this.container.vertical))},horizontalThumbSize(){return Math.round(between(this.container.horizontal*this.container.horizontal/this.scroll.horizontal.size,getMinThumbSize(this.container.horizontal),this.container.horizontal))},verticalStyle(){return{...this.thumbStyle,...this.verticalThumbStyle,top:`${this.verticalThumbStart}px`,height:`${this.verticalThumbSize}px`}},horizontalStyle(){return{...this.thumbStyle,...this.horizontalThumbStyle,left:`${this.horizontalThumbStart}px`,width:`${this.horizontalThumbSize}px`}},verticalThumbClass(){return"q-scrollarea__thumb q-scrollarea__thumb--v absolute-right"+(!0===this.verticalThumbHidden?" q-scrollarea__thumb--invisible":"")},horizontalThumbClass(){return"q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom"+(!0===this.horizontalThumbHidden?" q-scrollarea__thumb--invisible":"")},verticalBarClass(){return"q-scrollarea__bar q-scrollarea__bar--v absolute-right"+(!0===this.verticalThumbHidden?" q-scrollarea__bar--invisible":"")},horizontalBarClass(){return"q-scrollarea__bar q-scrollarea__bar--h absolute-bottom"+(!0===this.horizontalThumbHidden?" q-scrollarea__bar--invisible":"")},scrollComputed(){return{vertical:{...this.scroll.vertical,percentage:this.verticalScrollPercentage,thumbHidden:this.verticalThumbHidden,thumbStart:this.verticalThumbStart,thumbSize:this.verticalThumbSize,style:this.verticalStyle,thumbClass:this.verticalThumbClass,barClass:this.verticalBarClass},horizontal:{...this.scroll.horizontal,percentage:this.horizontalScrollPercentage,thumbHidden:this.horizontalThumbHidden,thumbStart:this.horizontalThumbStart,thumbSize:this.horizontalThumbSize,style:this.horizontalStyle,thumbClass:this.horizontalThumbClass,barClass:this.horizontalBarClass}}},mainStyle(){return!0===this.verticalThumbHidden&&!0===this.horizontalThumbHidden?this.contentStyle:this.contentActiveStyle},verticalThumbDirectives(){return[{name:"touch-pan",modifiers:{vertical:!0,prevent:!0,mouse:!0,mouseAllDir:!0},value:t=>{this.__panThumb(t,"vertical")}}]},horizontalThumbDirectives(){return[{name:"touch-pan",modifiers:{horizontal:!0,prevent:!0,mouse:!0,mouseAllDir:!0},value:t=>{this.__panThumb(t,"horizontal")}}]},scrollAttrs(){if(void 0!==this.tabindex)return{tabindex:this.tabindex}}},methods:{getScrollTarget(){return this.$refs.target},getScroll(){const t={};return axisList.forEach(e=>{const i=this.scrollComputed[e];t[e+"Position"]=i.position,t[e+"Percentage"]=i.percentage,t[e+"Size"]=i.size,t[e+"ContainerSize"]=this.container[e]}),t},getScrollPosition(t){return"both"===t?{top:this.scroll.vertical.position,left:this.scroll.horizontal.position}:(!0!==axisList.includes(t)&&(t=!0===this.horizontal?"horizontal":"vertical"),this.scroll[t].position)},getScrollPercentage(t){return"both"===t?{top:this.verticalScrollPercentage,left:this.horizontalScrollPercentage}:(!0!==axisList.includes(t)&&(t=!0===this.horizontal?"horizontal":"vertical"),this[`${t}ScrollPercentage`])},setScrollPosition(t,e,i){if(!1===axisList.includes(t)){if(!0===isNaN(t))return void console.error("[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)");[t,e,i]=[!0===this.horizontal?"horizontal":"vertical",t,e]}("vertical"===t?setVerticalScrollPosition:setHorizontalScrollPosition)(this.$refs.target,e,i)},setScrollPercentage(t,e,i){if(!1===axisList.includes(t)){if(!0===isNaN(t))return void console.error("[QScrollArea]: wrong first param of setScrollPercentage (vertical/horizontal)");[t,e,i]=[!0===this.horizontal?"horizontal":"vertical",t,e]}this.setScrollPosition(t,e*(this.scroll[t].size-this.container[t]),i)},__updateContainer({height:t,width:e}){let i=!1;this.container.vertical!==t&&(this.container.vertical=t,i=!0),this.container.horizontal!==e&&(this.container.horizontal=e,i=!0),!0===i&&this.__startTimer()},__updateScroll({position:t}){let e=!1;this.scroll.vertical.position!==t.top&&(this.scroll.vertical.position=t.top,e=!0),this.scroll.horizontal.position!==t.left&&(this.scroll.horizontal.position=t.left,e=!0),!0===e&&this.__startTimer()},__updateScrollSize({height:t,width:e}){let i=!1;this.scroll.horizontal.size!==e&&(this.scroll.horizontal.size=e,i=!0),this.scroll.vertical.size!==t&&(this.scroll.vertical.size=t,i=!0),!0===i&&this.__startTimer()},__panThumb(t,e){const i=this.scrollComputed[e];if(!0===t.isFinal){if(!0!==this.panning)return;this.panning=!1}else if(!0===t.isFirst){if(!0===i.thumbHidden)return;this.refPos=i.position,this.panning=!0}else if(!0!==this.panning)return;const s=dirProps[e],o=this.container[e],n=(i.size-o)/(o-i.thumbSize),r=t.distance[s.dist],a=this.refPos+(t.direction===s.dir?1:-1)*r*n;this.__setScroll(a,e)},__mouseDown(t,e){const i=this.scrollComputed[e];if(!0!==i.thumbHidden){const s=t[dirProps[e].offset];if(si.thumbStart+i.thumbSize){const t=s-i.thumbSize/2;this.__setScroll(t/this.container[e]*i.size,e)}const o="vertical"===e?this.$refs.verticalThumb:this.$refs.horizontalThumb;void 0!==o&&o.dispatchEvent(new MouseEvent(t.type,t))}},__verticalMouseDown(t){this.__mouseDown(t,"vertical")},__horizontalMouseDown(t){this.__mouseDown(t,"horizontal")},__startTimer(){!0===this.tempShowing?clearTimeout(this.timer):this.tempShowing=!0,this.timer=setTimeout(()=>{this.tempShowing=!1},this.delay),void 0!==this.$listeners.scroll&&this.__emitScroll()},__setScroll(t,e){this.$refs.target[dirProps[e].scroll]=t},__mouseEnter(){this.hover=!0},__mouseLeave(){this.hover=!1}},render(t){return t("div",{key:"desk",class:this.classes,on:cache(this,"desk",{mouseenter:this.__mouseEnter,mouseleave:this.__mouseLeave})},[t("div",{ref:"target",staticClass:"q-scrollarea__container scroll relative-position fit hide-scrollbar",attrs:this.scrollAttrs},[t("div",{staticClass:"q-scrollarea__content absolute",style:this.mainStyle},mergeSlot([t(QResizeObserver,{key:"resizeIn",props:{debounce:0},on:cache(this,"resizeIn",{resize:this.__updateScrollSize})})],this,"default")),t(QScrollObserver,{key:"scroll",props:{axis:"both"},on:cache(this,"scroll",{scroll:this.__updateScroll})})]),t(QResizeObserver,{key:"resizeOut",props:{debounce:0},on:cache(this,"resizeOut",{resize:this.__updateContainer})}),t("div",{key:"barV",class:this.verticalBarClass,style:[this.barStyle,this.verticalBarStyle],attrs:ariaHidden,on:cache(this,"barV",{mousedown:this.__verticalMouseDown})}),t("div",{key:"barH",class:this.horizontalBarClass,style:[this.barStyle,this.horizontalBarStyle],attrs:ariaHidden,on:cache(this,"barH",{mousedown:this.__horizontalMouseDown})}),t("div",{ref:"verticalThumb",class:this.verticalThumbClass,style:this.verticalStyle,attrs:ariaHidden,directives:this.verticalThumbDirectives}),t("div",{ref:"horizontalThumb",class:this.horizontalThumbClass,style:this.horizontalStyle,attrs:ariaHidden,directives:this.horizontalThumbDirectives})])},created(){this.__emitScroll=debounce(()=>{const t=this.getScroll();t.ref=this,this.$emit("scroll",t)},0)},activated(){if(void 0===this.__scrollPosition)return;const t=this.getScrollTarget();void 0!==t&&(setHorizontalScrollPosition(t,this.__scrollPosition.left),setVerticalScrollPosition(t,this.__scrollPosition.top))},deactivated(){this.__scrollPosition=this.getScrollPosition("both")},beforeDestroy(){this.__emitScroll.cancel(),clearTimeout(this.timer)}});function scrollDebounce(t){let e,i=0;const s=()=>{e=void 0,i=0,t()};function o(){i++,clearTimeout(e),e=setTimeout(s,200),i>50&&(i=0,t(!0))}return o.cancel=(()=>{clearTimeout(e),e=void 0,i=0}),o}const aggBucketSize=1e3,scrollToEdges=["start","center","end","start-force","center-force","end-force"],filterProto=Array.prototype.filter;function sumFn(t,e){return t+e}function getScrollDetails(t,e,i,s,o,n,r,a){const l=t===window?document.scrollingElement||document.documentElement:t,h=!0===o?"offsetWidth":"offsetHeight",c={scrollStart:0,scrollViewSize:-r-a,scrollMaxSize:0,offsetStart:-r,offsetEnd:-a};if(!0===o?(t===window?(c.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,c.scrollViewSize+=document.documentElement.clientWidth):(c.scrollStart=l.scrollLeft,c.scrollViewSize+=l.clientWidth),c.scrollMaxSize=l.scrollWidth,!0===n&&(c.scrollStart=(!0===rtlHasScrollBug()?c.scrollMaxSize-c.scrollViewSize:0)-c.scrollStart)):(t===window?(c.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,c.scrollViewSize+=document.documentElement.clientHeight):(c.scrollStart=l.scrollTop,c.scrollViewSize+=l.clientHeight),c.scrollMaxSize=l.scrollHeight),void 0!==i)for(let t=i.previousElementSibling;null!==t;t=t.previousElementSibling)!1===t.classList.contains("q-virtual-scroll--skip")&&(c.offsetStart+=t[h]);if(void 0!==s)for(let t=s.nextElementSibling;null!==t;t=t.nextElementSibling)!1===t.classList.contains("q-virtual-scroll--skip")&&(c.offsetEnd+=t[h]);if(e!==t){const i=l.getBoundingClientRect(),s=e.getBoundingClientRect();!0===o?(c.offsetStart+=s.left-i.left,c.offsetEnd-=s.width):(c.offsetStart+=s.top-i.top,c.offsetEnd-=s.height),t!==window&&(c.offsetStart+=c.scrollStart),c.offsetEnd+=c.scrollMaxSize-c.offsetStart}return c}function setScroll(t,e,i,s){"end"===e&&(e=(t===window?document.body:t)[!0===i?"scrollWidth":"scrollHeight"]),t===window?!0===i?(!0===s&&(e=(!0===rtlHasScrollBug()?document.body.scrollWidth-document.documentElement.clientWidth:0)-e),window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e):!0===i?(!0===s&&(e=(!0===rtlHasScrollBug()?t.scrollWidth-t.offsetWidth:0)-e),t.scrollLeft=e):t.scrollTop=e}function sumSize(t,e,i,s){if(i>=s)return 0;const o=e.length,n=Math.floor(i/aggBucketSize),r=Math.floor((s-1)/aggBucketSize)+1;let a=t.slice(n,r).reduce(sumFn,0);return i%aggBucketSize!=0&&(a-=e.slice(n*aggBucketSize,i).reduce(sumFn,0)),s%aggBucketSize!=0&&s!==o&&(a-=e.slice(s,r*aggBucketSize).reduce(sumFn,0)),a}const commonVirtScrollProps={virtualScrollSliceSize:{type:[Number,String],default:null},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]};function setOverflowAnchor(t,e){void 0===setOverflowAnchor.isSupported&&(setOverflowAnchor.isSupported=void 0!==window.getComputedStyle(document.body).overflowAnchor),!1!==setOverflowAnchor.isSupported&&void 0!==t&&(cancelAnimationFrame(t._qOverflowAnimationFrame),t._qOverflowAnimationFrame=requestAnimationFrame(()=>{if(void 0===t)return;const i=t.children||[];filterProto.call(i,t=>t.dataset&&void 0!==t.dataset.qVsAnchor).forEach(t=>{delete t.dataset.qVsAnchor});const s=i[e];s&&s.dataset&&(s.dataset.qVsAnchor="")}))}const commonVirtPropsList=Object.keys(commonVirtScrollProps);var VirtualScroll={props:{virtualScrollHorizontal:Boolean,...commonVirtScrollProps},data:()=>({virtualScrollSliceRange:{from:0,to:0}}),watch:{needsSliceRecalc(){this.__setVirtualScrollSize()},needsReset(){this.reset()}},computed:{needsReset(){return["virtualScrollItemSizeComputed","virtualScrollHorizontal"].map(t=>this[t]).join(";")},needsSliceRecalc(){return this.needsReset+";"+["virtualScrollSliceRatioBefore","virtualScrollSliceRatioAfter"].map(t=>this[t]).join(";")},colspanAttr(){return void 0!==this.tableColspan?{colspan:this.tableColspan}:{colspan:100}},virtualScrollItemSizeComputed(){return this.virtualScrollItemSize}},methods:{reset(){this.__resetVirtualScroll(this.prevToIndex,!0)},refresh(t){this.__resetVirtualScroll(void 0===t?this.prevToIndex:t)},scrollTo(t,e){const i=this.__getVirtualScrollTarget();if(void 0===i||null===i||8===i.nodeType)return;const s=getScrollDetails(i,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd);this.__scrollViewSize!==s.scrollViewSize&&this.__setVirtualScrollSize(s.scrollViewSize),this.__setVirtualScrollSliceRange(i,s,Math.min(this.virtualScrollLength-1,Math.max(0,parseInt(t,10)||0)),0,scrollToEdges.indexOf(e)>-1?e:this.prevToIndex>-1&&t>this.prevToIndex?"end":"start")},__onVirtualScrollEvt(t){const e=this.__getVirtualScrollTarget();if(void 0===e||null===e||8===e.nodeType)return;if(!0===this.$q.interaction.isKeyboard&&null!==this.$q.interaction.event&&"string"==typeof this.$q.interaction.event.key){const t=this.$q.interaction.event.key.toLowerCase();"home"!==t&&"end"!==t||setScroll(e,"home"===t?0:"end",this.virtualScrollHorizontal,this.$q.lang.rtl)}const i=getScrollDetails(e,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd),s=this.virtualScrollLength-1,o=i.scrollMaxSize-i.offsetStart-i.offsetEnd-this.virtualScrollPaddingAfter;if(this.prevScrollStart===i.scrollStart)return;if(i.scrollMaxSize<=0)return void this.__setVirtualScrollSliceRange(e,i,0,0);this.__scrollViewSize!==i.scrollViewSize&&this.__setVirtualScrollSize(i.scrollViewSize),this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from);const n=Math.floor(i.scrollMaxSize-Math.max(i.scrollViewSize,i.offsetEnd)-Math.min(this.virtualScrollSizes[s],i.scrollViewSize/2));if(n>0&&Math.ceil(i.scrollStart)>=n)return void this.__setVirtualScrollSliceRange(e,i,s,i.scrollMaxSize-i.offsetEnd-this.virtualScrollSizesAgg.reduce(sumFn,0));let r=0,a=i.scrollStart-i.offsetStart,l=a;if(a<=o&&a+i.scrollViewSize>=this.virtualScrollPaddingBefore)a-=this.virtualScrollPaddingBefore,r=this.virtualScrollSliceRange.from,l=a;else for(let t=0;a>=this.virtualScrollSizesAgg[t]&&r0&&r-i.scrollViewSize?(r++,l=a):l=this.virtualScrollSizes[r]+a;this.__setVirtualScrollSliceRange(e,i,r,l,void 0,t)},__setVirtualScrollSliceRange(t,e,i,s,o,n){const r="string"==typeof o&&o.indexOf("-force")>-1,a=!0===r?o.replace("-force",""):o,l=void 0!==a?a:"start";let h=Math.max(0,i-this.virtualScrollSliceSizeComputed[l]),c=h+this.virtualScrollSliceSizeComputed.total;c>this.virtualScrollLength&&(c=this.virtualScrollLength,h=Math.max(0,c-this.virtualScrollSliceSizeComputed.total)),this.prevScrollStart=e.scrollStart;const d=h!==this.virtualScrollSliceRange.from||c!==this.virtualScrollSliceRange.to;if(!1===d&&void 0===a)return void this.__emitScroll(i);const{activeElement:u}=document,p=this.$refs.content;!0===d&&void 0!==p&&p!==u&&!0===p.contains(u)&&!0!==p.qVsFocusout&&(p.qVsFocusout=!0,p.addEventListener("focusout",this.__onBlurRefocusFn),setTimeout(()=>{void 0!==p&&(p.removeEventListener("focusout",this.__onBlurRefocusFn),p.qVsFocusout=!1)},500)),setOverflowAnchor(p,i-h);const m=void 0!==a?this.virtualScrollSizes.slice(h,i).reduce(sumFn,0):0;if(!0===d){const t=c>=this.virtualScrollSliceRange.from&&h<=this.virtualScrollSliceRange.to?this.virtualScrollSliceRange.to:c;this.virtualScrollSliceRange={from:h,to:t},this.virtualScrollPaddingBefore=sumSize(this.virtualScrollSizesAgg,this.virtualScrollSizes,0,h),this.virtualScrollPaddingAfter=sumSize(this.virtualScrollSizesAgg,this.virtualScrollSizes,this.virtualScrollSliceRange.to,this.virtualScrollLength),cancelAnimationFrame(this.vsRangeToAnimationFrame),this.vsRangeToAnimationFrame=requestAnimationFrame(()=>{this.virtualScrollSliceRange.to!==c&&this.prevScrollStart===e.scrollStart&&(this.virtualScrollSliceRange={from:this.virtualScrollSliceRange.from,to:c},this.virtualScrollPaddingAfter=sumSize(this.virtualScrollSizesAgg,this.virtualScrollSizes,c,this.virtualScrollLength))})}cancelAnimationFrame(this.vsScrollAnimationFrame),this.vsScrollAnimationFrame=requestAnimationFrame(()=>{if(this.prevScrollStart!==e.scrollStart)return;!0===d&&this.__updateVirtualScrollSizes(h);const o=this.virtualScrollSizes.slice(h,i).reduce(sumFn,0),l=o+e.offsetStart+this.virtualScrollPaddingBefore,c=l+this.virtualScrollSizes[i];let u=l+s;if(void 0!==a){const t=o-m,s=e.scrollStart+t;u=!0!==r&&st.classList&&!1===t.classList.contains("q-virtual-scroll--skip")),s=i.length,o=!0===this.virtualScrollHorizontal?t=>t.getBoundingClientRect().width:t=>t.offsetHeight;let n,r,a=t;for(let t=0;t=s;t--)this.virtualScrollSizes[t]=i;const o=Math.floor((this.virtualScrollLength-1)/aggBucketSize);this.virtualScrollSizesAgg=[];for(let t=0;t<=o;t++){let e=0;const i=Math.min((t+1)*aggBucketSize,this.virtualScrollLength);for(let s=t*aggBucketSize;s=0?(this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from),this.$nextTick(()=>{this.scrollTo(t)})):this.__onVirtualScrollEvt()},__setVirtualScrollSize(t){if(void 0===t&&"undefined"!=typeof window){const e=this.__getVirtualScrollTarget();void 0!==e&&null!==e&&8!==e.nodeType&&(t=getScrollDetails(e,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd).scrollViewSize)}this.__scrollViewSize=t;const e=parseFloat(this.virtualScrollSliceRatioBefore)||0,i=1+e+(parseFloat(this.virtualScrollSliceRatioAfter)||0),s=void 0===t||t<=0?1:Math.ceil(t/this.virtualScrollItemSizeComputed),o=Math.max(1,s,Math.ceil((this.virtualScrollSliceSize>0?this.virtualScrollSliceSize:10)/i));this.virtualScrollSliceSizeComputed={total:Math.ceil(o*i),start:Math.ceil(o*e),center:Math.ceil(o*(.5+e)),end:Math.ceil(o*(1+e)),view:s}},__padVirtualScroll(t,e,i){const s=!0===this.virtualScrollHorizontal?"width":"height",o={["--q-virtual-scroll-item-"+s]:this.virtualScrollItemSizeComputed+"px"};return["tbody"===e?t(e,{staticClass:"q-virtual-scroll__padding",key:"before",ref:"before"},[t("tr",[t("td",{style:{[s]:`${this.virtualScrollPaddingBefore}px`,...o},attrs:this.colspanAttr})])]):t(e,{staticClass:"q-virtual-scroll__padding",key:"before",ref:"before",style:{[s]:`${this.virtualScrollPaddingBefore}px`,...o}}),t(e,{staticClass:"q-virtual-scroll__content",key:"content",ref:"content",attrs:{tabindex:-1}},i),"tbody"===e?t(e,{staticClass:"q-virtual-scroll__padding",key:"after",ref:"after"},[t("tr",[t("td",{style:{[s]:`${this.virtualScrollPaddingAfter}px`,...o},attrs:this.colspanAttr})])]):t(e,{staticClass:"q-virtual-scroll__padding",key:"after",ref:"after",style:{[s]:`${this.virtualScrollPaddingAfter}px`,...o}})]},__emitScroll(t){this.prevToIndex!==t&&(void 0!==this.qListeners["virtual-scroll"]&&this.$emit("virtual-scroll",{index:t,from:this.virtualScrollSliceRange.from,to:this.virtualScrollSliceRange.to-1,direction:t["add","add-unique","toggle"].includes(t),reEscapeList=".*+?^${}()|[]\\";var QSelect=Vue.extend({name:"QSelect",mixins:[QField,VirtualScroll,FormFieldMixin,ListenersMixin],props:{value:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueSanitize:Boolean,dropdownIcon:String,options:{type:Array,default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsSanitize:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],dialogContentClass:[String,Array,Object],dialogContentStyle:[String,Array,Object],dialogCloseIcon:[Boolean,String],useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:validateNewValueMode},mapOptions:Boolean,emitValue:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:String,transitionHide:String,behavior:{type:String,validator:t=>["default","menu","dialog"].includes(t),default:"default"},virtualScrollItemSize:{type:[Number,String],default:void 0}},data:()=>({menu:!1,dialog:!1,optionIndex:-1,inputValue:"",dialogFieldFocused:!1}),watch:{innerValue:{handler(t){this.innerValueCache=t,!0===this.useInput&&!0===this.fillInput&&!0!==this.multiple&&!0!==this.innerLoading&&(!0!==this.dialog&&!0!==this.menu||!0!==this.hasValue)&&(!0!==this.userInputValue&&this.__resetInputValue(),!0!==this.dialog&&!0!==this.menu||this.filter(""))},immediate:!0},fillInput(){this.__resetInputValue()},menu(t){this.__updateMenu(t)},virtualScrollLength(t,e){!0===this.menu&&!1===this.innerLoading&&(this.__resetVirtualScroll(-1,!0),this.$nextTick(()=>{!0===this.menu&&!1===this.innerLoading&&(t>e?this.__resetVirtualScroll():this.__updateMenu(!0))}))}},computed:{isOptionsDark(){return null===this.optionsDark?null===this.dark?this.$q.dark.isActive:this.dark:this.optionsDark},optionsDarkSuffix(){return null===this.isOptionsDark?"dark-auto":!0===this.isOptionsDark?"dark":"light"},virtualScrollLength(){return Array.isArray(this.options)?this.options.length:0},fieldClass(){return`q-select q-field--auto-height q-select--with${!0!==this.useInput?"out":""}-input`+` q-select--with${!0!==this.useChips?"out":""}-chips`+` q-select--${!0===this.multiple?"multiple":"single"}`},computedInputClass(){return!0===this.hideSelected||0===this.innerValue.length?this.inputClass:void 0===this.inputClass?"q-field__input--padding":[this.inputClass,"q-field__input--padding"]},menuContentClass(){return(!0===this.virtualScrollHorizontal?"q-virtual-scroll--horizontal":"")+(this.popupContentClass?" "+this.popupContentClass:"")},innerValue(){const t=!0===this.mapOptions&&!0!==this.multiple,e=void 0===this.value||null===this.value&&!0!==t?[]:!0===this.multiple&&Array.isArray(this.value)?this.value:[this.value];if(!0===this.mapOptions&&!0===Array.isArray(this.options)){const i=!0===this.mapOptions&&void 0!==this.innerValueCache?this.innerValueCache:[],s=e.map(t=>this.__getOption(t,i));return null===this.value&&!0===t?s.filter(t=>null!==t):s}return e},noOptions(){return 0===this.virtualScrollLength},selectedString(){return this.innerValue.map(t=>this.getOptionLabel(t)).join(", ")},sanitizeFn(){return!0===this.optionsSanitize?()=>!0:t=>void 0!==t&&null!==t&&!0===t.sanitize},displayAsText(){return!0===this.displayValueSanitize||void 0===this.displayValue&&(!0===this.optionsSanitize||this.innerValue.some(this.sanitizeFn))},computedTabindex(){return!0===this.focused?this.tabindex:-1},selectedScope(){return this.innerValue.map((t,e)=>({index:e,opt:t,sanitize:this.sanitizeFn(t),selected:!0,removeAtIndex:this.__removeAtIndexAndFocus,toggleOption:this.toggleOption,tabindex:this.computedTabindex}))},optionScope(){if(0===this.virtualScrollLength)return[];const{from:t,to:e}=this.virtualScrollSliceRange,{options:i,optionEls:s}=this.__optionScopeCache;return this.options.slice(t,e).map((e,o)=>{const n=this.isOptionDisabled(e),r=t+o,a={clickable:!0,active:!1,activeClass:this.computedOptionsSelectedClass,manualFocus:!0,focused:!1,disable:n,tabindex:-1,dense:this.optionsDense,dark:this.isOptionsDark},l={role:"option",id:`${this.targetUid}_${r}`};!0!==n&&(!0===this.isOptionSelected(e)&&(a.active=!0),l["aria-selected"]=!0===a.active?"true":"false",this.optionIndex===r&&(a.focused=!0));const h={click:()=>{this.toggleOption(e)}};!0===this.$q.platform.is.desktop&&(h.mousemove=(()=>{!0===this.menu&&this.setOptionIndex(r)}));const c={index:r,opt:e,sanitize:this.sanitizeFn(e),selected:a.active,focused:a.focused,toggleOption:this.toggleOption,setOptionIndex:this.setOptionIndex,itemProps:a,itemAttrs:l};return void 0!==i[o]&&!0===isDeepEqual(c,i[o])||(i[o]=c,s[o]=void 0),{...c,itemEvents:h}})},dropdownArrowIcon(){return void 0!==this.dropdownIcon?this.dropdownIcon:this.$q.iconSet.arrow.dropdown},computedDialogCloseIcon(){return!0===this.dialogCloseIcon?!0===this.$q.lang.rtl?this.$q.iconSet.chevron.right:this.$q.iconSet.chevron.left:"string"==typeof this.dialogCloseIcon&&this.dialogCloseIcon.length>0&&this.dialogCloseIcon},squaredMenu(){return!1===this.optionsCover&&!0!==this.outlined&&!0!==this.standout&&!0!==this.borderless&&!0!==this.rounded},computedOptionsSelectedClass(){return void 0!==this.optionsSelectedClass?this.optionsSelectedClass:void 0!==this.color?`text-${this.color}`:""},innerOptionsValue(){return this.innerValue.map(t=>this.getOptionValue(t))},getOptionValue(){return this.__getPropValueFn("optionValue","value")},getOptionLabel(){return this.__getPropValueFn("optionLabel","label")},isOptionDisabled(){const t=this.__getPropValueFn("optionDisable","disable");return(...e)=>!0===t.apply(null,e)},inputControlEvents(){return{input:this.__onInput,compositionend:this.__onInput,change:this.__onChange,keydown:this.__onTargetKeydown,keyup:this.__onTargetAutocomplete,keypress:this.__onTargetKeypress,focus:this.__onTargetFocus,click:this.__onTargetClick}},closeButtonEvents(){return{click:t=>{stopAndPrevent(t),this.hidePopup()}}},virtualScrollItemSizeComputed(){return void 0===this.virtualScrollItemSize?!0===this.optionsDense?24:48:this.virtualScrollItemSize},comboboxAttrs(){const t={tabindex:this.tabindex,role:"combobox","aria-label":this.label,"aria-readonly":!0===this.readonly?"true":"false","aria-autocomplete":!0===this.useInput?"list":"none","aria-expanded":!0===this.menu?"true":"false","aria-owns":`${this.targetUid}_lb`,"aria-controls":`${this.targetUid}_lb`};return this.optionIndex>=0&&(t["aria-activedescendant"]=`${this.targetUid}_${this.optionIndex}`),t},listboxAttrs(){return{id:`${this.targetUid}_lb`,role:"listbox","aria-multiselectable":!0===this.multiple?"true":"false"}}},methods:{getEmittingOptionValue(t){return!0===this.emitValue?this.getOptionValue(t):t},removeAtIndex(t){if(t>-1&&t=this.maxValues)return;const s=this.value.slice();this.$emit("add",{index:s.length,value:i}),s.push(i),this.$emit("input",s)},toggleOption(t,e){if(!0!==this.editable||void 0===t||!0===this.isOptionDisabled(t))return;const i=this.getOptionValue(t);if(!0!==this.multiple)return!0!==e&&(this.updateInputValue(!0===this.fillInput?this.getOptionLabel(t):"",!0,!0),this.dialogFieldFocused=!1,document.activeElement.blur(),this.hidePopup()),void 0!==this.$refs.target&&this.$refs.target.focus(),void(0!==this.innerValue.length&&!0===isDeepEqual(this.getOptionValue(this.innerValue[0]),i)||this.$emit("input",!0===this.emitValue?i:t));if((!0!==this.hasDialog||!0===this.dialogFieldFocused)&&this.__focus(),this.__selectInputText(),0===this.innerValue.length){const e=!0===this.emitValue?i:t;return this.$emit("add",{index:0,value:e}),void this.$emit("input",!0===this.multiple?[e]:e)}const s=this.value.slice(),o=this.innerOptionsValue.findIndex(t=>isDeepEqual(t,i));if(o>-1)this.$emit("remove",{index:o,value:s.splice(o,1)[0]});else{if(void 0!==this.maxValues&&s.length>=this.maxValues)return;const e=!0===this.emitValue?i:t;this.$emit("add",{index:s.length,value:e}),s.push(e)}this.$emit("input",s)},setOptionIndex(t){if(!0!==this.$q.platform.is.desktop)return;const e=t>-1&&t{this.setOptionIndex(i),this.scrollTo(i),!0!==e&&!0===this.useInput&&!0===this.fillInput&&this.__setInputValue(i>=0?this.getOptionLabel(this.options[i]):this.defaultInputValue)}))}},__getOption(t,e){const i=e=>isDeepEqual(this.getOptionValue(e),t);return this.options.find(i)||e.find(i)||t},__getPropValueFn(t,e){const i=void 0!==this[t]?this[t]:e;return"function"==typeof i?i:t=>null!==t&&"object"==typeof t&&i in t?t[i]:t},isOptionSelected(t){const e=this.getOptionValue(t);return void 0!==this.innerOptionsValue.find(t=>isDeepEqual(t,e))},__selectInputText(t){!0===this.useInput&&void 0!==this.$refs.target&&(void 0===t||this.$refs.target===t.target&&t.target.value===this.selectedString)&&this.$refs.target.select()},__onTargetKeyup(t){!0===isKeyCode(t,27)&&!0===this.menu&&(stop(t),this.hidePopup(),this.__resetInputValue()),this.$emit("keyup",t)},__onTargetAutocomplete(t){const{value:e}=t.target;if(void 0===t.keyCode)if(t.target.value="",clearTimeout(this.inputTimer),this.__resetInputValue(),"string"==typeof e&&e.length>0){const t=e.toLocaleLowerCase(),i=e=>{const i=this.options.find(i=>e(i).toLocaleLowerCase()===t);return void 0!==i&&(-1===this.innerValue.indexOf(i)?this.toggleOption(i):this.hidePopup(),!0)},s=t=>{!0!==i(this.getOptionValue)&&!0!==i(this.getOptionLabel)&&!0!==t&&this.filter(e,!0,()=>s(!0))};s()}else this.__clearValue(t);else this.__onTargetKeyup(t)},__onTargetKeypress(t){this.$emit("keypress",t)},__onTargetKeydown(t){if(this.$emit("keydown",t),!0===shouldIgnoreKey(t))return;const e=this.inputValue.length>0&&(void 0!==this.newValueMode||void 0!==this.qListeners["new-value"]),i=!0!==t.shiftKey&&!0!==this.multiple&&(this.optionIndex>-1||!0===e);if(27===t.keyCode)return void prevent(t);if(9===t.keyCode&&!1===i)return void this.__closeMenu();if(void 0===t.target||t.target.id!==this.targetUid)return;if(40===t.keyCode&&!0!==this.innerLoading&&!1===this.menu)return stopAndPrevent(t),void this.showPopup();if(8===t.keyCode&&!0!==this.hideSelected&&0===this.inputValue.length)return void(!0===this.multiple&&Array.isArray(this.value)?this.removeAtIndex(this.value.length-1):!0!==this.multiple&&null!==this.value&&this.$emit("input",null));35!==t.keyCode&&36!==t.keyCode||"string"==typeof this.inputValue&&0!==this.inputValue.length||(stopAndPrevent(t),this.optionIndex=-1,this.moveOptionSelection(36===t.keyCode?1:-1,this.multiple)),33!==t.keyCode&&34!==t.keyCode||void 0===this.virtualScrollSliceSizeComputed||(stopAndPrevent(t),this.optionIndex=Math.max(-1,Math.min(this.virtualScrollLength,this.optionIndex+(33===t.keyCode?-1:1)*this.virtualScrollSliceSizeComputed.view)),this.moveOptionSelection(33===t.keyCode?1:-1,this.multiple)),38!==t.keyCode&&40!==t.keyCode||(stopAndPrevent(t),this.moveOptionSelection(38===t.keyCode?-1:1,this.multiple));const s=this.virtualScrollLength;if((void 0===this.searchBuffer||this.searchBufferExp0&&!0!==this.useInput&&void 0!==t.key&&1===t.key.length&&t.altKey===t.ctrlKey&&(32!==t.keyCode||this.searchBuffer.length>0)){!0!==this.menu&&this.showPopup(t);const e=t.key.toLocaleLowerCase(),i=1===this.searchBuffer.length&&this.searchBuffer[0]===e;this.searchBufferExp=Date.now()+1500,!1===i&&(stopAndPrevent(t),this.searchBuffer+=e);const o=new RegExp("^"+this.searchBuffer.split("").map(t=>reEscapeList.indexOf(t)>-1?"\\"+t:t).join(".*"),"i");let n=this.optionIndex;if(!0===i||n<0||!0!==o.test(this.getOptionLabel(this.options[n])))do{n=normalizeToInterval(n+1,-1,s-1)}while(n!==this.optionIndex&&(!0===this.isOptionDisabled(this.options[n])||!0!==o.test(this.getOptionLabel(this.options[n]))));this.optionIndex!==n&&this.$nextTick(()=>{this.setOptionIndex(n),this.scrollTo(n),n>=0&&!0===this.useInput&&!0===this.fillInput&&this.__setInputValue(this.getOptionLabel(this.options[n]))})}else if(13===t.keyCode||32===t.keyCode&&!0!==this.useInput&&""===this.searchBuffer||9===t.keyCode&&!1!==i)if(9!==t.keyCode&&stopAndPrevent(t),this.optionIndex>-1&&this.optionIndex{if(e){if(!0!==validateNewValueMode(e))return}else e=this.newValueMode;void 0!==t&&null!==t&&(this.updateInputValue("",!0!==this.multiple,!0),this["toggle"===e?"toggleOption":"add"](t,"add-unique"===e),!0!==this.multiple&&(void 0!==this.$refs.target&&this.$refs.target.focus(),this.hidePopup()))};if(void 0!==this.qListeners["new-value"]?this.$emit("new-value",this.inputValue,t):t(this.inputValue),!0!==this.multiple)return}!0===this.menu?this.__closeMenu():!0!==this.innerLoading&&this.showPopup()}},__onTargetFocus(t){managedFocus(t.target),this.__selectInputText(t)},__onTargetClick(t){!0===this.hasDialog&&stop(t)},__getVirtualScrollEl(){return!0===this.hasDialog?this.$refs.menuContent:void 0!==this.$refs.menu&&void 0!==this.$refs.menu.__portal?(this.$refs.menu.__portal.$el.children||[])[0]:void 0},__getVirtualScrollTarget(){return this.__getVirtualScrollEl()},__getSelection(t){return!0===this.hideSelected?[]:void 0!==this.$scopedSlots["selected-item"]?this.selectedScope.map(t=>this.$scopedSlots["selected-item"](t)).slice():void 0!==this.$scopedSlots.selected?[].concat(this.$scopedSlots.selected()):!0===this.useChips?this.selectedScope.map((e,i)=>t(QChip,{key:"rem#"+i,props:{removable:!0===this.editable&&!0!==this.isOptionDisabled(e.opt),dense:!0,textColor:this.color,tabindex:this.computedTabindex},on:cache(this,"rem#"+i,{remove(){e.removeAtIndex(i)}})},[t("span",{staticClass:"ellipsis",domProps:{[!0===e.sanitize?"textContent":"innerHTML"]:this.getOptionLabel(e.opt)}})])):[t("span",{domProps:{[this.displayAsText?"textContent":"innerHTML"]:void 0!==this.displayValue?this.displayValue:this.selectedString}})]},__getControl(t,e){const i=this.__getSelection(t),s=!0===e||!0!==this.dialog||!0!==this.hasDialog;if(!0===this.useInput)i.push(this.__getInput(t,e,s));else if(!0===this.editable){const o=!0===s?this.comboboxAttrs:void 0;i.push(t("input",{ref:!0===s?"target":void 0,key:"d_t",staticClass:"q-select__focus-target",attrs:{id:!0===s?this.targetUid:void 0,readonly:!0,"data-autofocus":(!0===e?!0===s:this.autofocus)||void 0,...o},on:cache(this,"f-tget",{keydown:this.__onTargetKeydown,keyup:this.__onTargetKeyup,keypress:this.__onTargetKeypress})})),!0===s&&"string"==typeof this.autocomplete&&this.autocomplete.length>0&&i.push(t("input",{key:"autoinp",staticClass:"q-select__autocomplete-input",attrs:{autocomplete:this.autocomplete,tabindex:-1},on:cache(this,"autoinp",{keyup:this.__onTargetAutocomplete})}))}if(void 0!==this.nameProp&&!0!==this.disable&&this.innerOptionsValue.length>0){const e=this.innerOptionsValue.map(e=>t("option",{attrs:{value:e,selected:!0}}));i.push(t("select",{staticClass:"hidden",attrs:{name:this.nameProp,multiple:this.multiple}},e))}const o=!0===this.useInput||!0!==s?void 0:this.qAttrs;return t("div",{staticClass:"q-field__native row items-center",attrs:o},i)},__getOptions(t){if(!0!==this.menu)return;if(!0===this.noOptions)return void 0!==this.$scopedSlots["no-option"]?this.$scopedSlots["no-option"]({inputValue:this.inputValue}):void 0;void 0!==this.$scopedSlots.option&&this.__optionScopeCache.optionSlot!==this.$scopedSlots.option&&(this.__optionScopeCache.optionSlot=this.$scopedSlots.option,this.__optionScopeCache.optionEls=[]);const e=void 0!==this.$scopedSlots.option?this.$scopedSlots.option:e=>t(QItem,{key:e.index,props:e.itemProps,attrs:e.itemAttrs,on:e.itemEvents},[t(QItemSection,[t(QItemLabel,{domProps:{[!0===e.sanitize?"textContent":"innerHTML"]:this.getOptionLabel(e.opt)}})])]),{optionEls:i}=this.__optionScopeCache;let s=this.__padVirtualScroll(t,"div",this.optionScope.map((t,s)=>(void 0===i[s]&&(i[s]=e(t)),i[s])));return void 0!==this.$scopedSlots["before-options"]&&(s=this.$scopedSlots["before-options"]().concat(s)),mergeSlot(s,this,"after-options")},__prependDialogCloseIcon(t){return!1===this.computedDialogCloseIcon||!0!==this.hasDialog||!0!==this.dialog?slot(this,"prepend"):mergeSlot([t(QIcon,{staticClass:"q-select__close-icon q-field__focusable-action",props:{tag:"button",name:this.computedDialogCloseIcon},attrs:iconAsButton,on:this.closeButtonEvents})],this,"prepend")},__getInnerAppend(t){return!0!==this.loading&&!0!==this.innerLoadingIndicator&&!0!==this.hideDropdownIcon?[t(QIcon,{staticClass:"q-select__dropdown-icon"+(!0===this.menu?" rotate-180":""),props:{name:this.dropdownArrowIcon}})]:null},__getInput(t,e,i){const s=!0===i?{...this.comboboxAttrs,...this.qAttrs}:void 0,o={ref:!0===i?"target":void 0,key:"i_t",staticClass:"q-field__input q-placeholder col",style:this.inputStyle,class:this.computedInputClass,domProps:{value:void 0!==this.inputValue?this.inputValue:""},attrs:{type:"search",...s,id:!0===i?this.targetUid:void 0,maxlength:this.maxlength,autocomplete:this.autocomplete,"data-autofocus":(!0===e?!0===i:this.autofocus)||void 0,disabled:!0===this.disable,readonly:!0===this.readonly},on:this.inputControlEvents};return!0!==e&&!0===this.hasDialog&&(o.staticClass+=" no-pointer-events"),t("input",o)},__onChange(t){!0===t.target.qComposing&&(t.target.qComposing=!1,this.__onInput(t))},__onInput(t){if(!t||!t.target||!0===t.target.qComposing)return;const e="string"==typeof t.data&&!0===t.isComposing&&t.data.length+1===t.target.value.length?t.data:t.target.value;this.inputValue!==e&&(clearTimeout(this.inputTimer),this.__setInputValue(e),this.userInputValue=!0,this.defaultInputValue=this.inputValue,!0===this.focused||!0===this.hasDialog&&!0!==this.dialogFieldFocused||this.__focus(),void 0!==this.qListeners.filter&&(this.inputTimer=setTimeout(()=>{this.filter(this.inputValue)},this.inputDebounce)))},__setInputValue(t){this.inputValue!==t&&(this.inputValue=t,this.$emit("input-value",t))},updateInputValue(t,e,i){this.userInputValue=!0!==i,!0===this.useInput&&(this.__setInputValue(t),!0!==e&&!0===i||(this.defaultInputValue=t),!0!==e&&this.filter(t))},filter(t,e,i){if(void 0===this.qListeners.filter||!0!==e&&!0!==this.focused)return;!0===this.innerLoading?this.$emit("filter-abort"):(this.innerLoading=!0,this.innerLoadingIndicator=!0),""!==t&&!0!==this.multiple&&this.innerValue.length>0&&!0!==this.userInputValue&&t===this.getOptionLabel(this.innerValue[0])&&(t="");const s=setTimeout(()=>{!0===this.menu&&(this.menu=!1)},10);clearTimeout(this.filterId),this.filterId=s,this.$emit("filter",t,(t,o)=>{!0!==e&&!0!==this.focused||this.filterId!==s||(clearTimeout(this.filterId),"function"==typeof t&&t(),this.innerLoadingIndicator=!1,this.$nextTick(()=>{this.innerLoading=!1,!0===this.editable&&(!0===e?!0===this.menu&&this.hidePopup():!0===this.menu?this.__updateMenu(!0):(this.menu=!0,!0===this.hasDialog&&(this.dialog=!0))),"function"==typeof o&&this.$nextTick(()=>{o(this)}),"function"==typeof i&&this.$nextTick(()=>{i(this)})}))},()=>{!0===this.focused&&this.filterId===s&&(clearTimeout(this.filterId),this.innerLoading=!1,this.innerLoadingIndicator=!1),!0===this.menu&&(this.menu=!1)})},__getControlEvents(){const t=t=>{this.__onControlFocusout(t,()=>{this.__resetInputValue(),this.__closeMenu()})};return{focusin:this.__onControlFocusin,focusout:t,"popup-show":this.__onControlPopupShow,"popup-hide":e=>{void 0!==e&&stop(e),this.$emit("popup-hide",e),this.hasPopupOpen=!1,t(e)},click:t=>{if(prevent(t),!0!==this.hasDialog&&!0===this.menu)return this.__closeMenu(),void(void 0!==this.$refs.target&&this.$refs.target.focus());this.showPopup(t)}}},__getControlChild(t){if(!1!==this.editable&&(!0===this.dialog||!0!==this.noOptions||void 0!==this.$scopedSlots["no-option"]))return this[`__get${!0===this.hasDialog?"Dialog":"Menu"}`](t)},__getMenu(t){return t(QMenu,{key:"menu",ref:"menu",props:{value:this.menu,fit:!0!==this.menuShrink,cover:!0===this.optionsCover&&!0!==this.noOptions&&!0!==this.useInput,anchor:this.menuAnchor,self:this.menuSelf,offset:this.menuOffset,contentClass:this.menuContentClass,contentStyle:this.popupContentStyle,dark:this.isOptionsDark,noParentEvent:!0,noRefocus:!0,noFocus:!0,square:this.squaredMenu,transitionShow:this.transitionShow,transitionHide:this.transitionHide,separateClosePopup:!0},attrs:this.listboxAttrs,on:cache(this,"menu",{"&scroll":this.__onVirtualScrollEvt,"before-hide":this.__closeMenu,show:this.__onMenuShow})},this.__getOptions(t))},__onMenuShow(){this.__setVirtualScrollSize()},__onDialogFieldFocus(t){stop(t),void 0!==this.$refs.target&&this.$refs.target.focus(),this.dialogFieldFocused=!0},__onDialogFieldBlur(t){stop(t),this.$nextTick(()=>{this.dialogFieldFocused=!1})},__getDialog(t){const e=[t(QField,{staticClass:`col-auto ${this.fieldClass}`,props:{...this.$props,for:this.targetUid,dark:this.isOptionsDark,square:!0,filled:!0,itemAligned:!1,loading:this.innerLoadingIndicator,stackLabel:this.inputValue.length>0},on:{...this.qListeners,focus:this.__onDialogFieldFocus,blur:this.__onDialogFieldBlur},scopedSlots:{...this.$scopedSlots,rawControl:()=>this.__getControl(t,!0),prepend:()=>this.__prependDialogCloseIcon(t),before:void 0,after:void 0}})];return!0===this.menu&&e.push(t("div",{key:"virtMenu",ref:"menuContent",staticClass:"col scroll",class:this.menuContentClass,style:this.popupContentStyle,attrs:this.listboxAttrs,on:cache(this,"virtMenu",{click:prevent,"&scroll":this.__onVirtualScrollEvt})},this.__getOptions(t))),t(QDialog,{key:"dialog",ref:"dialog",props:{value:this.dialog,position:!0===this.useInput?"top":void 0,contentClass:this.dialogContentClass,contentStyle:this.dialogContentStyle,transitionShow:this.transitionShow,transitionHide:this.transitionHide},on:cache(this,"dialog",{"before-hide":this.__onDialogBeforeHide,hide:this.__onDialogHide,show:this.__onDialogShow})},[t("div",{staticClass:"q-select__dialog"+` q-select__dialog--${this.optionsDarkSuffix} q-${this.optionsDarkSuffix}`+(!0===this.dialogFieldFocused?" q-select__dialog--focused":"")},e)])},__onDialogBeforeHide(){!0===this.useInput&&!0!==this.$q.platform.is.desktop||(this.$refs.dialog.__refocusTarget=this.$el.querySelector(".q-field__native > [tabindex]:last-child")),this.focused=!1,this.dialogFieldFocused=!1},__onDialogHide(t){!0!==this.$q.platform.is.desktop&&document.activeElement.blur(),this.hidePopup(),!1===this.focused&&this.$emit("blur",t),this.__resetInputValue()},__onDialogShow(){const t=document.activeElement;null!==t&&t.id===this.targetUid||this.$refs.target===t||void 0===this.$refs.target||this.$refs.target.focus(),this.__setVirtualScrollSize()},__closeMenu(){void 0!==this.__optionScopeCache&&(this.__optionScopeCache.optionEls=[]),!0!==this.dialog&&(this.optionIndex=-1,!0===this.menu&&(this.menu=!1),!1===this.focused&&(clearTimeout(this.filterId),this.filterId=void 0,!0===this.innerLoading&&(this.$emit("filter-abort"),this.innerLoading=!1,this.innerLoadingIndicator=!1)))},showPopup(t){!0===this.editable&&(!0===this.hasDialog?(this.__onControlFocusin(t),this.dialog=!0,this.$nextTick(()=>{this.__focus()})):this.__focus(),void 0!==this.qListeners.filter?this.filter(this.inputValue):!0===this.noOptions&&void 0===this.$scopedSlots["no-option"]||(this.menu=!0))},hidePopup(){this.dialog=!1,this.__closeMenu()},__resetInputValue(){!0===this.useInput&&this.updateInputValue(!0!==this.multiple&&!0===this.fillInput&&this.innerValue.length>0&&this.getOptionLabel(this.innerValue[0])||"",!0,!0)},__updateMenu(t){let e=-1;if(!0===t){if(this.innerValue.length>0){const t=this.getOptionValue(this.innerValue[0]);e=this.options.findIndex(e=>isDeepEqual(this.getOptionValue(e),t))}this.__resetVirtualScroll(e)}this.setOptionIndex(e)},__onPreRender(){this.hasDialog=(!0===this.$q.platform.is.mobile||"dialog"===this.behavior)&&("menu"!==this.behavior&&(!0!==this.useInput||(void 0!==this.$scopedSlots["no-option"]||void 0!==this.qListeners.filter||!1===this.noOptions)))},updateMenuPosition(){!1===this.dialog&&void 0!==this.$refs.menu&&this.$refs.menu.updatePosition()}},beforeMount(){this.__optionScopeCache={optionSlot:this.$scopedSlots.option,options:[],optionEls:[]}},beforeDestroy(){this.__optionScopeCache=void 0,clearTimeout(this.inputTimer)}});const skeletonTypes=["text","rect","circle","QBtn","QBadge","QChip","QToolbar","QCheckbox","QRadio","QToggle","QSlider","QRange","QInput","QAvatar"],skeletonAnimations=["wave","pulse","pulse-x","pulse-y","fade","blink","none"];var QSkeleton=Vue.extend({name:"QSkeleton",mixins:[DarkMixin,TagMixin,ListenersMixin],props:{type:{type:String,validator:t=>skeletonTypes.includes(t),default:"rect"},animation:{type:String,validator:t=>skeletonAnimations.includes(t),default:"wave"},square:Boolean,bordered:Boolean,size:String,width:String,height:String},computed:{style(){return void 0!==this.size?{width:this.size,height:this.size}:{width:this.width,height:this.height}},classes(){return`q-skeleton--${this.darkSuffix} q-skeleton--type-${this.type}`+("none"!==this.animation?` q-skeleton--anim q-skeleton--anim-${this.animation}`:"")+(!0===this.square?" q-skeleton--square":"")+(!0===this.bordered?" q-skeleton--bordered":"")}},render(t){return t(this.tag,{staticClass:"q-skeleton",class:this.classes,style:this.style,on:{...this.qListeners}},slot(this,"default"))}});const slotsDef=[["left","center","start","width"],["right","center","end","width"],["top","start","center","height"],["bottom","end","center","height"]];var QSlideItem=Vue.extend({name:"QSlideItem",mixins:[DarkMixin,ListenersMixin],props:{leftColor:String,rightColor:String,topColor:String,bottomColor:String},directives:{TouchPan:TouchPan},computed:{langDir(){return!0===this.$q.lang.rtl?{left:"right",right:"left"}:{left:"left",right:"right"}}},methods:{reset(){this.$refs.content.style.transform="translate(0,0)",this.__emitSlide(this.__showing,0,!0)},__emitSlide(t,e,i){void 0!==this.qListeners.slide&&this.$emit("slide",{side:t,ratio:e,isReset:i})},__pan(t){const e=this.$refs.content;if(t.isFinal)return e.classList.remove("no-transition"),void(1===this.__scale?(e.style.transform=`translate${this.__axis}(${100*this.__dir}%)`,this.timer=setTimeout(()=>{this.$emit(this.__showing,{reset:this.reset}),this.$emit("action",{side:this.__showing,reset:this.reset})},230)):(e.style.transform="translate(0,0)",this.__emitSlide(this.__showing,0,!0)));if(t.isFirst?(this.__dir=null,this.__size={left:0,right:0,top:0,bottom:0},this.__scale=0,e.classList.add("no-transition"),slotsDef.forEach(t=>{if(void 0!==this.$scopedSlots[t[0]]){const e=this.$refs[t[0]+"Content"];e.style.transform="scale(1)",this.__size[t[0]]=e.getBoundingClientRect()[t[3]]}}),this.__axis="up"===t.direction||"down"===t.direction?"Y":"X"):t.direction="X"===this.__axis?t.offset.x<0?"left":"right":t.offset.y<0?"up":"down",void 0===this.$scopedSlots.left&&t.direction===this.langDir.right||void 0===this.$scopedSlots.right&&t.direction===this.langDir.left||void 0===this.$scopedSlots.top&&"down"===t.direction||void 0===this.$scopedSlots.bottom&&"up"===t.direction)return void(e.style.transform="translate(0,0)");let i,s,o;"X"===this.__axis?(s="left"===t.direction?-1:1,i=1===s?this.langDir.left:this.langDir.right,o=t.distance.x):(s="up"===t.direction?-2:2,i=2===s?"top":"bottom",o=t.distance.y),null!==this.__dir&&Math.abs(s)!==Math.abs(this.__dir)||(this.__dir!==s&&(["left","right","top","bottom"].forEach(t=>{void 0!==this.$refs[t]&&(this.$refs[t].style.visibility=i===t?"visible":"hidden")}),this.__showing=i,this.__dir=s),this.__scale=Math.max(0,Math.min(1,(o-40)/this.__size[i])),e.style.transform=`translate${this.__axis}(${o*s/Math.abs(s)}px)`,this.$refs[`${i}Content`].style.transform=`scale(${this.__scale})`,this.__emitSlide(i,this.__scale,!1))}},render(t){const e=[],i={left:void 0!==this.$scopedSlots[this.langDir.right],right:void 0!==this.$scopedSlots[this.langDir.left],up:void 0!==this.$scopedSlots.bottom,down:void 0!==this.$scopedSlots.top},s=Object.keys(i).filter(t=>!0===i[t]);return slotsDef.forEach(i=>{const s=i[0];void 0!==this.$scopedSlots[s]&&e.push(t("div",{ref:s,class:`q-slide-item__${s} absolute-full row no-wrap items-${i[1]} justify-${i[2]}`+(void 0!==this[s+"Color"]?` bg-${this[s+"Color"]}`:"")},[t("div",{ref:s+"Content"},this.$scopedSlots[s]())]))}),e.push(t("div",{ref:"content",key:"content",staticClass:"q-slide-item__content",directives:s.length>0?cacheWithFn(this,"dir#"+s.join(""),()=>{const t={prevent:!0,stop:!0,mouse:!0};return s.forEach(e=>{t[e]=!0}),[{name:"touch-pan",value:this.__pan,modifiers:t}]}):null},slot(this,"default"))),t("div",{staticClass:"q-slide-item q-item-type overflow-hidden"+` q-slide-item--${this.darkSuffix} q-${this.darkSuffix}`,on:{...this.qListeners}},e)},beforeDestroy(){clearTimeout(this.timer)}}),QSpace=Vue.extend({name:"QSpace",mixins:[ListenersMixin],render(t){return t("div",{staticClass:"q-space",on:{...this.qListeners}})}}),QSpinnerAudio=Vue.extend({name:"QSpinnerAudio",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 55 80",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"matrix(1 0 0 -1 0 80)"}},[t("rect",{attrs:{width:"10",height:"20",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"4.3s",values:"20;45;57;80;64;32;66;45;64;23;66;13;64;56;34;34;2;23;76;79;20",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"15",width:"10",height:"80",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"2s",values:"80;55;33;5;75;23;73;33;12;14;60;80",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"30",width:"10",height:"50",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"1.4s",values:"50;34;78;23;56;23;34;76;80;54;21;50",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"45",width:"10",height:"30",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"2s",values:"30;45;13;80;56;72;45;76;34;23;67;30",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),QSpinnerBall=Vue.extend({name:"QSpinnerBall",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 57 57",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(1 1)","stroke-width":"2",fill:"none","fill-rule":"evenodd"}},[t("circle",{attrs:{cx:"5",cy:"50",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",values:"50;5;50;50",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",begin:"0s",dur:"2.2s",values:"5;27;49;5",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"27",cy:"5",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",from:"5",to:"5",values:"5;50;50;5",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",begin:"0s",dur:"2.2s",from:"27",to:"27",values:"27;49;5;27",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"49",cy:"50",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",values:"50;50;5;50",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",from:"49",to:"49",begin:"0s",dur:"2.2s",values:"49;5;27;49",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),QSpinnerBars=Vue.extend({name:"QSpinnerBars",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg"}},[t("rect",{attrs:{y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"30",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"60",width:"15",height:"140",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"90",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"120",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})])])}}),QSpinnerBox=Vue.extend({name:"QSpinnerBox",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"25",y:"25",width:"50",height:"50",fill:"none","stroke-width":"4",stroke:"currentColor"}},[t("animateTransform",{attrs:{id:"spinnerBox",attributeName:"transform",type:"rotate",from:"0 50 50",to:"180 50 50",dur:"0.5s",begin:"rectBox.end"}})]),t("rect",{attrs:{x:"27",y:"27",width:"46",height:"50",fill:"currentColor"}},[t("animate",{attrs:{id:"rectBox",attributeName:"height",begin:"0s;spinnerBox.end",dur:"1.3s",from:"50",to:"0",fill:"freeze"}})])])}}),QSpinnerClock=Vue.extend({name:"QSpinnerClock",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("circle",{attrs:{cx:"50",cy:"50",r:"48",fill:"none","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor"}}),t("line",{attrs:{"stroke-linecap":"round","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor",x1:"50",y1:"50",x2:"85",y2:"50.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"2s",repeatCount:"indefinite"}})]),t("line",{attrs:{"stroke-linecap":"round","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor",x1:"50",y1:"50",x2:"49.5",y2:"74"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"15s",repeatCount:"indefinite"}})])])}}),QSpinnerComment=Vue.extend({name:"QSpinnerComment",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"0",y:"0",width:"100",height:"100",fill:"none"}}),t("path",{attrs:{d:"M78,19H22c-6.6,0-12,5.4-12,12v31c0,6.6,5.4,12,12,12h37.2c0.4,3,1.8,5.6,3.7,7.6c2.4,2.5,5.1,4.1,9.1,4 c-1.4-2.1-2-7.2-2-10.3c0-0.4,0-0.8,0-1.3h8c6.6,0,12-5.4,12-12V31C90,24.4,84.6,19,78,19z",fill:"currentColor"}}),t("circle",{attrs:{cx:"30",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;1;1",keyTimes:"0;0.2;1",dur:"1s",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"50",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;0;1;1",keyTimes:"0;0.2;0.4;1",dur:"1s",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"70",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;0;1;1",keyTimes:"0;0.4;0.6;1",dur:"1s",repeatCount:"indefinite"}})])])}}),QSpinnerCube=Vue.extend({name:"QSpinnerCube",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"0",y:"0",width:"100",height:"100",fill:"none"}}),t("g",{attrs:{transform:"translate(25 25)"}},[t("rect",{attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.9"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(75 25)"}},[t("rect",{attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.8"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.1s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(25 75)"}},[t("rect",{staticClass:"cube",attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.7"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.3s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(75 75)"}},[t("rect",{staticClass:"cube",attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.6"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.2s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])])])}}),QSpinnerDots=Vue.extend({name:"QSpinnerDots",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg"}},[t("circle",{attrs:{cx:"15",cy:"15",r:"15"}},[t("animate",{attrs:{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"60",cy:"15",r:"9","fill-opacity":".3"}},[t("animate",{attrs:{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:".5",to:".5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"105",cy:"15",r:"15"}},[t("animate",{attrs:{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"}})])])}}),QSpinnerFacebook=Vue.extend({name:"QSpinnerFacebook",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid"}},[t("g",{attrs:{transform:"translate(20 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.6"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])]),t("g",{attrs:{transform:"translate(50 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.8"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0.1s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])]),t("g",{attrs:{transform:"translate(80 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.9"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0.2s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])])])}}),QSpinnerGears=Vue.extend({name:"QSpinnerGears",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(-20,-20)"}},[t("path",{attrs:{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"90 50 50",to:"0 50 50",dur:"1s",repeatCount:"indefinite"}})])]),t("g",{attrs:{transform:"translate(20,20) rotate(15 50 50)"}},[t("path",{attrs:{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"90 50 50",dur:"1s",repeatCount:"indefinite"}})])])])}}),QSpinnerGrid=Vue.extend({name:"QSpinnerGrid",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 105 105",xmlns:"http://www.w3.org/2000/svg"}},[t("circle",{attrs:{cx:"12.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0s",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"12.5",cy:"52.5",r:"12.5","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"100ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"300ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"52.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"600ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"800ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"52.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"400ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"12.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"700ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"500ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"200ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})])])}}),QSpinnerHearts=Vue.extend({name:"QSpinnerHearts",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 140 64",xmlns:"http://www.w3.org/2000/svg"}},[t("path",{attrs:{d:"M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.716-6.002 11.47-7.65 17.304-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0s",dur:"1.4s",values:"0.5;1;0.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.593-2.32 17.308 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0.7s",dur:"1.4s",values:"0.5;1;0.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z"}})])}}),QSpinnerHourglass=Vue.extend({name:"QSpinnerHourglass",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",[t("path",{staticClass:"glass",attrs:{fill:"none",stroke:"currentColor","stroke-width":"5","stroke-miterlimit":"10",d:"M58.4,51.7c-0.9-0.9-1.4-2-1.4-2.3s0.5-0.4,1.4-1.4 C70.8,43.8,79.8,30.5,80,15.5H70H30H20c0.2,15,9.2,28.1,21.6,32.3c0.9,0.9,1.4,1.2,1.4,1.5s-0.5,1.6-1.4,2.5 C29.2,56.1,20.2,69.5,20,85.5h10h40h10C79.8,69.5,70.8,55.9,58.4,51.7z"}}),t("clipPath",{attrs:{id:"uil-hourglass-clip1"}},[t("rect",{staticClass:"clip",attrs:{x:"15",y:"20",width:"70",height:"25"}},[t("animate",{attrs:{attributeName:"height",from:"25",to:"0",dur:"1s",repeatCount:"indefinite",values:"25;0;0",keyTimes:"0;0.5;1"}}),t("animate",{attrs:{attributeName:"y",from:"20",to:"45",dur:"1s",repeatCount:"indefinite",values:"20;45;45",keyTimes:"0;0.5;1"}})])]),t("clipPath",{attrs:{id:"uil-hourglass-clip2"}},[t("rect",{staticClass:"clip",attrs:{x:"15",y:"55",width:"70",height:"25"}},[t("animate",{attrs:{attributeName:"height",from:"0",to:"25",dur:"1s",repeatCount:"indefinite",values:"0;25;25",keyTimes:"0;0.5;1"}}),t("animate",{attrs:{attributeName:"y",from:"80",to:"55",dur:"1s",repeatCount:"indefinite",values:"80;55;55",keyTimes:"0;0.5;1"}})])]),t("path",{staticClass:"sand",attrs:{d:"M29,23c3.1,11.4,11.3,19.5,21,19.5S67.9,34.4,71,23H29z","clip-path":"url(#uil-hourglass-clip1)",fill:"currentColor"}}),t("path",{staticClass:"sand",attrs:{d:"M71.6,78c-3-11.6-11.5-20-21.5-20s-18.5,8.4-21.5,20H71.6z","clip-path":"url(#uil-hourglass-clip2)",fill:"currentColor"}}),t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"180 50 50",repeatCount:"indefinite",dur:"1s",values:"0 50 50;0 50 50;180 50 50",keyTimes:"0;0.7;1"}})])])}}),QSpinnerInfinity=Vue.extend({name:"QSpinnerInfinity",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("path",{attrs:{d:"M24.3,30C11.4,30,5,43.3,5,50s6.4,20,19.3,20c19.3,0,32.1-40,51.4-40C88.6,30,95,43.3,95,50s-6.4,20-19.3,20C56.4,70,43.6,30,24.3,30z",fill:"none",stroke:"currentColor","stroke-width":"8","stroke-dasharray":"10.691205342610678 10.691205342610678","stroke-dashoffset":"0"}},[t("animate",{attrs:{attributeName:"stroke-dashoffset",from:"0",to:"21.382410685221355",begin:"0",dur:"2s",repeatCount:"indefinite",fill:"freeze"}})])])}}),QSpinnerIos=Vue.extend({name:"QSpinnerIos",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,stroke:"currentColor",fill:"currentColor",viewBox:"0 0 64 64"}},[t("g",{attrs:{"stroke-width":"4","stroke-linecap":"round"}},[t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(180)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(210)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(240)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".1;0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(270)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".15;.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(300)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".25;.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(330)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".35;.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(0)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".45;.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(30)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".55;.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(60)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".65;.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(90)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".7;.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(120)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".85;.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(150)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"}})])])])}}),QSpinnerOrbit=Vue.extend({name:"QSpinnerOrbit",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("circle",{attrs:{cx:"50",cy:"50",r:"44",fill:"none","stroke-width":"4","stroke-opacity":".5",stroke:"currentColor"}}),t("circle",{attrs:{cx:"8",cy:"54",r:"6",fill:"currentColor","stroke-width":"3",stroke:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 48",to:"360 50 52",dur:"2s",repeatCount:"indefinite"}})])])}}),QSpinnerOval=Vue.extend({name:"QSpinnerOval",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(1 1)","stroke-width":"2",fill:"none","fill-rule":"evenodd"}},[t("circle",{attrs:{"stroke-opacity":".5",cx:"18",cy:"18",r:"18"}}),t("path",{attrs:{d:"M36 18c0-9.94-8.06-18-18-18"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"}})])])])}}),QSpinnerPie=Vue.extend({name:"QSpinnerPie",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("path",{attrs:{d:"M0 50A50 50 0 0 1 50 0L50 50L0 50",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"0.8s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M50 0A50 50 0 0 1 100 50L50 50L50 0",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"1.6s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M100 50A50 50 0 0 1 50 100L50 50L100 50",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"2.4s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M50 100A50 50 0 0 1 0 50L50 50L50 100",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"3.2s",repeatCount:"indefinite"}})])])}}),QSpinnerPuff=Vue.extend({name:"QSpinnerPuff",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 44 44",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{fill:"none","fill-rule":"evenodd","stroke-width":"2"}},[t("circle",{attrs:{cx:"22",cy:"22",r:"1"}},[t("animate",{attrs:{attributeName:"r",begin:"0s",dur:"1.8s",values:"1; 20",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.165, 0.84, 0.44, 1",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"0s",dur:"1.8s",values:"1; 0",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.3, 0.61, 0.355, 1",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"1"}},[t("animate",{attrs:{attributeName:"r",begin:"-0.9s",dur:"1.8s",values:"1; 20",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.165, 0.84, 0.44, 1",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"-0.9s",dur:"1.8s",values:"1; 0",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.3, 0.61, 0.355, 1",repeatCount:"indefinite"}})])])])}}),QSpinnerRadio=Vue.extend({name:"QSpinnerRadio",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"scale(0.55)"}},[t("circle",{attrs:{cx:"30",cy:"150",r:"30",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})]),t("path",{attrs:{d:"M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0.1",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})]),t("path",{attrs:{d:"M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0.2",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})])])])}}),QSpinnerRings=Vue.extend({name:"QSpinnerRings",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{fill:"none","fill-rule":"evenodd",transform:"translate(1 1)","stroke-width":"2"}},[t("circle",{attrs:{cx:"22",cy:"22",r:"6"}},[t("animate",{attrs:{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"6"}},[t("animate",{attrs:{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"8"}},[t("animate",{attrs:{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),QSpinnerTail=Vue.extend({name:"QSpinnerTail",mixins:[mixin],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg"}},[t("defs",[t("linearGradient",{attrs:{x1:"8.042%",y1:"0%",x2:"65.682%",y2:"23.865%",id:"a"}},[t("stop",{attrs:{"stop-color":"currentColor","stop-opacity":"0",offset:"0%"}}),t("stop",{attrs:{"stop-color":"currentColor","stop-opacity":".631",offset:"63.146%"}}),t("stop",{attrs:{"stop-color":"currentColor",offset:"100%"}})])]),t("g",{attrs:{transform:"translate(1 1)",fill:"none","fill-rule":"evenodd"}},[t("path",{attrs:{d:"M36 18c0-9.94-8.06-18-18-18",stroke:"url(#a)","stroke-width":"2"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"0.9s",repeatCount:"indefinite"}})]),t("circle",{attrs:{fill:"currentColor",cx:"36",cy:"18",r:"1"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"0.9s",repeatCount:"indefinite"}})])])])}});const keyDirections={37:"left",38:"up",39:"right",40:"down"};var QSplitter=Vue.extend({name:"QSplitter",mixins:[DarkMixin,ListenersMixin],directives:{TouchPan:TouchPan},props:{value:{type:Number,required:!0},reverse:Boolean,unit:{type:String,default:"%",validator:t=>["%","px"].includes(t)},limits:{type:Array,validator:t=>2===t.length&&("number"==typeof t[0]&&"number"==typeof t[1]&&(t[0]>=0&&t[0]<=t[1]))},emitImmediately:Boolean,horizontal:Boolean,disable:Boolean,tabindex:[String,Number],beforeClass:[Array,String,Object],afterClass:[Array,String,Object],separatorClass:[Array,String,Object],separatorStyle:[Array,String,Object]},watch:{value:{immediate:!0,handler(t){this.__normalize(t,this.computedLimits)}},limits:{deep:!0,handler(){this.$nextTick(()=>{this.__normalize(this.value,this.computedLimits)})}}},computed:{classes(){return(!0===this.horizontal?"column":"row")+` q-splitter--${!0===this.horizontal?"horizontal":"vertical"}`+` q-splitter--${!0===this.disable?"disabled":"workable"}`+` q-splitter--${this.darkSuffix}`},prop(){return!0===this.horizontal?"height":"width"},side(){return!0!==this.reverse?"before":"after"},computedLimits(){return void 0!==this.limits?this.limits:"%"===this.unit?[10,90]:[50,1/0]},styles(){return{[this.side]:{[this.prop]:this.__getCSSValue(this.value)}}},separatorDirectives(){if(!0!==this.disable)return[{name:"touch-pan",value:this.__pan,modifiers:{[!0===this.horizontal?"vertical":"horizontal"]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}}]},separatorAttrs(){const t=!0===this.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.tabindex||0},e=this.__getAriaValue(this.value);return{role:"separator","aria-orientation":!0===this.horizontal?"horizontal":"vertical","aria-controls":this.targetUid,"aria-valuemin":this.computedLimits[0],"aria-valuemax":this.computedLimits[1],"aria-valuenow":e.now,"aria-valuetext":e.text,...t}},separatorEvents(){return!0===this.disable?void 0:{keydown:this.__panKeydown}}},methods:{__panStart(){const t=this.$el.getBoundingClientRect()[this.prop];this.__dir=!0===this.horizontal?"up":"left",this.__maxValue="%"===this.unit?100:t,this.__value=Math.min(this.__maxValue,this.computedLimits[1],Math.max(this.computedLimits[0],this.value)),this.__multiplier=(!0!==this.reverse?1:-1)*(!0===this.horizontal?1:!0===this.$q.lang.rtl?-1:1)*("%"===this.unit?0===t?0:100/t:1),this.$el.classList.add("q-splitter--active")},__panProgress(t){this.__normalized=Math.min(this.__maxValue,this.computedLimits[1],Math.max(this.computedLimits[0],t)),this.$refs[this.side].style[this.prop]=this.__getCSSValue(this.__normalized);const e=this.__getAriaValue(this.__normalized);this.$refs.separator.setAttribute("aria-valuenow",e.now),this.$refs.separator.setAttribute("aria-valuetext",e.text),!0===this.emitImmediately&&this.value!==this.__normalized&&this.$emit("input",this.__normalized)},__panEnd(){void 0!==this.__panCleanup&&this.__panCleanup(),this.__normalized!==this.value&&this.$emit("input",this.__normalized),this.$el.classList.remove("q-splitter--active")},__pan(t){if(!0===t.isFinal)return void this.__panEnd();if(!0===t.isFirst)return void this.__panStart();const e=this.__value+this.__multiplier*(t.direction===this.__dir?-1:1)*t.distance[!0===this.horizontal?"y":"x"];this.__panProgress(e)},__panKeydown(t){if(void 0!==this.qListeners.keydown&&this.$emit("keydown",t),!0===this.disable||!0===t.defaultPrevented||!0!==this.horizontal&&-1===[37,39].indexOf(t.keyCode)||!0===this.horizontal&&-1===[38,40].indexOf(t.keyCode))return;stopAndPrevent(t),void 0===this.__panCleanup&&(document.addEventListener("keyup",this.__panEnd),document.addEventListener("focusout",this.__panEnd),this.__panCleanup=(()=>{this.__panCleanup=void 0,document.removeEventListener("keyup",this.__panEnd),document.removeEventListener("focusout",this.__panEnd),this.__panEnd()}),this.__panStart(),this.__normalized=this.__value);const e=keyDirections[t.keyCode],i=this.__normalized+this.__multiplier*(e===this.__dir?-1:1)*(!0===t.shiftKey?1:10);this.__panProgress(i)},__normalize(t,e){te[1]&&this.$emit("input",e[1])},__getAriaValue(t){const e="%"===this.unit?t:Math.round(t);return{now:e,text:Math.round(100*e)/100+this.unit}},__getCSSValue(t){return("%"===this.unit?t:Math.round(t))+this.unit}},created(){this.targetUid=`sp_${uid$3()}`},beforeDestroy(){void 0!==this.__panCleanup&&this.__panCleanup()},render(t){const e={[this.side]:{id:this.targetUid}},i=[t("div",{key:"before",ref:"before",staticClass:"q-splitter__panel q-splitter__before"+(!0===this.reverse?" col":""),style:this.styles.before,class:this.beforeClass,attrs:e.before,on:cache(this,"stop",{input:stop})},slot(this,"before")),t("div",{staticClass:"q-splitter__separator",ref:"separator",style:this.separatorStyle,class:this.separatorClass,attrs:this.separatorAttrs,on:this.separatorEvents},[t("div",{staticClass:"absolute-full q-splitter__separator-area",directives:this.separatorDirectives},slot(this,"separator"))]),t("div",{key:"after",ref:"after",staticClass:"q-splitter__panel q-splitter__after"+(!0===this.reverse?"":" col"),style:this.styles.after,class:this.afterClass,attrs:e.after,on:cache(this,"stop",{input:stop})},slot(this,"after"))];return t("div",{staticClass:"q-splitter no-wrap",class:this.classes,on:{...this.qListeners}},mergeSlot(i,this,"default"))}}),StepHeader=Vue.extend({name:"StepHeader",mixins:[AttrsMixin],directives:{Ripple:Ripple},props:{stepper:{},step:{}},computed:{isDisable(){const t=this.step.disable;return!0===t||""===t},isActive(){return!0!==this.isDisable&&this.stepper.value===this.step.name},isError(){const t=this.step.error;return!0===t||""===t},isDone(){const t=this.step.done;return!0===t||""===t},headerNav(){const t=this.step.headerNav,e=!0===t||""===t||void 0===t;return!1===this.isDisable&&this.stepper.headerNav&&e},hasPrefix(){return this.step.prefix&&void 0===this.icon},icon(){let t;return"none"===(t=!0===this.isActive?this.__getProp("activeIcon",this.$q.iconSet.stepper.active):!0===this.isError?this.__getProp("errorIcon",this.$q.iconSet.stepper.error):!0===this.isDone?this.__getProp("doneIcon",this.$q.iconSet.stepper.done):this.step.icon||this.stepper.inactiveIcon)?void 0:t},color(){return!0===this.isError?this.__getProp("errorColor"):!0===this.isActive?this.__getProp("activeColor"):!1===this.isDisable&&!0===this.isDone?this.__getProp("doneColor"):this.step.color||this.stepper.inactiveColor},classes(){return"q-stepper__tab col-grow flex items-center no-wrap relative-position"+(void 0!==this.color?` text-${this.color}`:"")+(!0===this.isError?" q-stepper__tab--error q-stepper__tab--error-with-"+(!0===this.hasPrefix?"prefix":"icon"):"")+(!0===this.isActive?" q-stepper__tab--active":"")+(!0===this.isDone?" q-stepper__tab--done":"")+(!0===this.headerNav?" q-stepper__tab--navigation q-focusable q-hoverable":"")+(!0===this.isDisable?" q-stepper__tab--disabled":"")}},methods:{activate(){void 0!==this.$refs.blurTarget&&this.$refs.blurTarget.focus(),!1===this.isActive&&this.stepper.goTo(this.step.name)},keyup(t){13===t.keyCode&&!1===this.isActive&&this.stepper.goTo(this.step.name)},__getProp(t,e){return this.step[t]||this.stepper[t]||e}},render(t){const e={class:this.classes};!0===this.stepper.headerNav&&(e.directives=[{name:"ripple",value:this.headerNav}]),!0===this.headerNav&&Object.assign(e,{key:"headnavon",on:cache(this,"headnavon",{click:this.activate,keyup:this.keyup}),attrs:!0===this.isDisable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.qAttrs.tabindex||0}});const i=[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"}),t("div",{staticClass:"q-stepper__dot row flex-center q-stepper__line relative-position"},[t("span",{staticClass:"row flex-center"},[!0===this.hasPrefix?this.step.prefix:t(QIcon,{props:{name:this.icon}})])])];if(void 0!==this.step.title&&null!==this.step.title){const e=[t("div",{staticClass:"q-stepper__title"},[this.step.title])];void 0!==this.step.caption&&null!==this.step.caption&&e.push(t("div",{staticClass:"q-stepper__caption"},[this.step.caption])),i.push(t("div",{staticClass:"q-stepper__label q-stepper__line relative-position"},e))}return t("div",e,i)}});const attrs$1={role:"tabpanel"},StepWrapper=Vue.extend({name:"QStepWrapper",render(t){return t("div",{staticClass:"q-stepper__step-content"},[t("div",{staticClass:"q-stepper__step-inner"},slot(this,"default"))])}});var QStep=Vue.extend({name:"QStep",inject:{stepper:{default(){console.error("QStep needs to be child of QStepper")}}},mixins:[PanelChildMixin],props:{icon:String,color:String,title:{type:String,required:!0},caption:String,prefix:[String,Number],doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String,headerNav:{type:Boolean,default:!0},done:Boolean,error:Boolean},computed:{isActive(){return this.stepper.value===this.name},onEvents(){return!0!==this.isActive||!0!==this.stepper.vertical||!0!==this.$q.platform.is.ios&&!0===this.$q.platform.is.chrome?{...this.qListeners}:{...this.qListeners,scroll:this.__keepScroll}}},methods:{__keepScroll(t){const{target:e}=t;e.scrollTop>0&&(e.scrollTop=0),void 0!==this.qListeners.scroll&&this.$emit("scroll",t)}},render(t){const e=this.stepper.vertical,i=!0===e&&!0===this.stepper.keepAlive?t("keep-alive",!0===this.isActive?[t(StepWrapper,{key:this.name},slot(this,"default"))]:void 0):!0!==e||!0===this.isActive?StepWrapper.options.render.call(this,t):void 0;return t("div",{staticClass:"q-stepper__step",attrs:attrs$1,on:this.onEvents},!0===e?[t(StepHeader,{props:{stepper:this.stepper,step:this}}),!0===this.stepper.animated?t(QSlideTransition,[i]):i]:[i])}}),QStepper=Vue.extend({name:"QStepper",provide(){return{stepper:this}},mixins:[DarkMixin,PanelParentMixin],props:{flat:Boolean,bordered:Boolean,alternativeLabels:Boolean,headerNav:Boolean,contracted:Boolean,headerClass:String,inactiveColor:String,inactiveIcon:String,doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String},computed:{classes(){const t=!0===this.dark||null===this.dark&&!1!==this.$q.dark.isActive;return`q-stepper q-stepper--${!0===this.vertical?"vertical":"horizontal"}`+(!0===this.flat||!0===t?" q-stepper--flat no-shadow":"")+(!0===this.bordered||!0===t&&!1===this.flat?" q-stepper--bordered":"")+` q-stepper--${this.darkSuffix} q-${this.darkSuffix}`},headerClasses(){return"q-stepper__header row items-stretch justify-between"+` q-stepper__header--${!0===this.alternativeLabels?"alternative":"standard"}-labels`+(!1===this.flat||!0===this.bordered?" q-stepper__header--border":"")+(!0===this.contracted?" q-stepper__header--contracted":"")+(void 0!==this.headerClass?` ${this.headerClass}`:"")}},methods:{__getContent(t){const e=slot(this,"message",[]);if(!0===this.vertical){this.__isValidPanelName(this.value)&&this.__updatePanelIndex();const i=t("div",{key:"stop",staticClass:"q-stepper__content",on:cache(this,"stop",{input:stop})},slot(this,"default"));return void 0===e?[i]:e.concat(i)}return[t("div",{class:this.headerClasses},this.panels.map(e=>{const i=e.componentOptions.propsData;return t(StepHeader,{key:i.name,props:{stepper:this,step:i}})}))].concat(e,t("div",{staticClass:"q-stepper__content q-panel-parent",directives:this.panelDirectives},this.__getPanelContent(t)))},__renderPanels(t){return t("div",{class:this.classes,on:{...this.qListeners}},mergeSlot(this.__getContent(t),this,"navigation"))}}}),QStepperNavigation=Vue.extend({name:"QStepperNavigation",mixins:[ListenersMixin],render(t){return t("div",{staticClass:"q-stepper__nav",on:{...this.qListeners}},slot(this,"default"))}}),Top={computed:{marginalsScope(){return{pagination:this.computedPagination,pagesNumber:this.pagesNumber,isFirstPage:this.isFirstPage,isLastPage:this.isLastPage,firstPage:this.firstPage,prevPage:this.prevPage,nextPage:this.nextPage,lastPage:this.lastPage,inFullscreen:this.inFullscreen,toggleFullscreen:this.toggleFullscreen}}},methods:{__getTopDiv(t){const e=this.$scopedSlots.top,i=this.$scopedSlots["top-left"],s=this.$scopedSlots["top-right"],o=this.$scopedSlots["top-selection"],n=!0===this.hasSelectionMode&&void 0!==o&&this.rowsSelectedNumber>0,r="q-table__top relative-position row items-center";if(void 0!==e)return t("div",{staticClass:r},[e(this.marginalsScope)]);let a;return!0===n?a=o(this.marginalsScope).slice():(a=[],void 0!==i?a.push(t("div",{staticClass:"q-table-control"},[i(this.marginalsScope)])):this.title&&a.push(t("div",{staticClass:"q-table__control"},[t("div",{staticClass:"q-table__title",class:this.titleClass},this.title)]))),void 0!==s&&(a.push(t("div",{staticClass:"q-table__separator col"})),a.push(t("div",{staticClass:"q-table__control"},[s(this.marginalsScope)]))),0!==a.length?t("div",{staticClass:r},a):void 0}}},QTh=Vue.extend({name:"QTh",mixins:[ListenersMixin],props:{props:Object,autoWidth:Boolean},render(t){const e={...this.qListeners};if(void 0===this.props)return t("th",{on:e,class:!0===this.autoWidth?"q-table--col-auto-width":null},slot(this,"default"));let i,s;const o=this.$vnode.key;if(o){if(void 0===(i=this.props.colsMap[o]))return}else i=this.props.col;if(!0===i.sortable){const e="right"===i.align?"unshift":"push";(s=uniqueSlot(this,"default",[]))[e](t(QIcon,{props:{name:this.$q.iconSet.table.arrowUp},staticClass:i.__iconClass}))}else s=slot(this,"default");const n=!0===i.sortable?{click:t=>{this.props.sort(i),this.$emit("click",t)}}:{};return t("th",{on:{...e,...n},style:i.headerStyle,class:i.__thClass+(!0===this.autoWidth?" q-table--col-auto-width":"")},s)}}),TableHeader={computed:{headerSelectedValue(){return!0===this.someRowsSelected?null:this.allRowsSelected}},methods:{__getTHead(t){const e=this.__getTHeadTR(t);return!0===this.loading&&void 0===this.$scopedSlots.loading&&e.push(t("tr",{staticClass:"q-table__progress"},[t("th",{staticClass:"relative-position",attrs:{colspan:this.computedColspan}},this.__getProgress(t))])),t("thead",e)},__getTHeadTR(t){const e=this.$scopedSlots.header,i=this.$scopedSlots["header-cell"];if(void 0!==e)return e(this.__getHeaderScope({header:!0})).slice();const s=this.computedCols.map(e=>{const s=this.$scopedSlots[`header-cell-${e.name}`],o=void 0!==s?s:i,n=this.__getHeaderScope({col:e});return void 0!==o?o(n):t(QTh,{key:e.name,props:{props:n}},e.label)});if(!0===this.singleSelection&&!0!==this.grid)s.unshift(t("th",{staticClass:"q-table--col-auto-width"},[" "]));else if(!0===this.multipleSelection){const e=this.$scopedSlots["header-selection"],i=void 0!==e?e(this.__getHeaderScope({})):[t(QCheckbox,{key:"inp",props:{color:this.color,value:this.headerSelectedValue,dark:this.dark,dense:this.dense},on:cache(this,"inp",{input:this.__onMultipleSelectionSet})})];s.unshift(t("th",{staticClass:"q-table--col-auto-width"},i))}return[t("tr",{style:this.tableHeaderStyle,class:this.tableHeaderClass},s)]},__getHeaderScope(t){return Object.assign(t,{cols:this.computedCols,sort:this.sort,colsMap:this.computedColsMap,color:this.color,dark:this.dark,dense:this.dense}),!0===this.multipleSelection&&(injectProp(t,"selected",()=>this.headerSelectedValue,this.__onMultipleSelectionSet),t.partialSelected=this.someRowsSelected,t.multipleSelect=!0),t},__onMultipleSelectionSet(t){!0===this.someRowsSelected&&(t=!1),this.__updateSelection(this.computedRows.map(this.getRowKey),this.computedRows,t)}}},TableBody={methods:{__getTBodyTR(t,e,i,s){const o=this.getRowKey(e),n=this.isRowSelected(o);if(void 0!==i)return i(this.__getBodyScope({key:o,row:e,pageIndex:s,__trClass:n?"selected":""}));const r=this.$scopedSlots["body-cell"],a=this.computedCols.map(i=>{const n=this.$scopedSlots[`body-cell-${i.name}`],a=void 0!==n?n:r;return void 0!==a?a(this.__getBodyCellScope({key:o,row:e,pageIndex:s,col:i})):t("td",{class:i.__tdClass(e),style:i.__tdStyle(e)},this.getCellValue(i,e))});if(!0===this.hasSelectionMode){const i=this.$scopedSlots["body-selection"],r=void 0!==i?i(this.__getBodySelectionScope({key:o,row:e,pageIndex:s})):[t(QCheckbox,{props:{value:n,color:this.color,dark:this.dark,dense:this.dense},on:{input:(t,i)=>{this.__updateSelection([o],[e],t,i)}}})];a.unshift(t("td",{staticClass:"q-table--col-auto-width"},r))}const l={key:o,class:{selected:n},on:{}};return void 0!==this.qListeners["row-click"]&&(l.class["cursor-pointer"]=!0,l.on.click=(t=>{this.$emit("row-click",t,e,s)})),void 0!==this.qListeners["row-dblclick"]&&(l.class["cursor-pointer"]=!0,l.on.dblclick=(t=>{this.$emit("row-dblclick",t,e,s)})),void 0!==this.qListeners["row-contextmenu"]&&(l.class["cursor-pointer"]=!0,l.on.contextmenu=(t=>{this.$emit("row-contextmenu",t,e,s)})),t("tr",l,a)},__getTBody(t){const e=this.$scopedSlots.body,i=this.$scopedSlots["top-row"],s=this.$scopedSlots["bottom-row"];let o=this.computedRows.map((i,s)=>this.__getTBodyTR(t,i,e,s));return void 0!==i&&(o=i({cols:this.computedCols}).concat(o)),void 0!==s&&(o=o.concat(s({cols:this.computedCols}))),t("tbody",o)},__getVirtualTBodyTR(t){const e=this.$scopedSlots.body;return i=>this.__getTBodyTR(t,i.item,e,i.index)},__getBodyScope(t){return this.__injectBodyCommonScope(t),t.cols=t.cols.map(e=>injectProp({...e},"value",()=>this.getCellValue(e,t.row))),t},__getBodyCellScope(t){return this.__injectBodyCommonScope(t),injectProp(t,"value",()=>this.getCellValue(t.col,t.row))},__getBodySelectionScope(t){return this.__injectBodyCommonScope(t),t},__injectBodyCommonScope(t){Object.assign(t,{cols:this.computedCols,colsMap:this.computedColsMap,sort:this.sort,rowIndex:this.firstRowIndex+t.pageIndex,color:this.color,dark:this.dark,dense:this.dense}),!0===this.hasSelectionMode&&injectProp(t,"selected",()=>this.isRowSelected(t.key),(e,i)=>{this.__updateSelection([t.key],[t.row],e,i)}),injectProp(t,"expand",()=>this.isRowExpanded(t.key),e=>{this.__updateExpanded(t.key,e)})},getCellValue(t,e){const i="function"==typeof t.field?t.field(e):e[t.field];return void 0!==t.format?t.format(i,e):i}}};const staticClass="q-table__bottom row items-center";var Bottom={props:{hideBottom:Boolean,hideSelectedBanner:Boolean,hideNoData:Boolean,hidePagination:Boolean},computed:{navIcon(){const t=[this.iconFirstPage||this.$q.iconSet.table.firstPage,this.iconPrevPage||this.$q.iconSet.table.prevPage,this.iconNextPage||this.$q.iconSet.table.nextPage,this.iconLastPage||this.$q.iconSet.table.lastPage];return!0===this.$q.lang.rtl?t.reverse():t}},methods:{__getBottomDiv(t){if(!0===this.hideBottom)return;if(!0===this.nothingToDisplay){if(!0===this.hideNoData)return;const e=!0===this.loading?this.loadingLabel||this.$q.lang.table.loading:this.filter?this.noResultsLabel||this.$q.lang.table.noResults:this.noDataLabel||this.$q.lang.table.noData,i=this.$scopedSlots["no-data"],s=void 0!==i?[i({message:e,icon:this.$q.iconSet.table.warning,filter:this.filter})]:[t(QIcon,{staticClass:"q-table__bottom-nodata-icon",props:{name:this.$q.iconSet.table.warning}}),e];return t("div",{staticClass:staticClass+" q-table__bottom--nodata"},s)}const e=this.$scopedSlots.bottom;if(void 0!==e)return t("div",{staticClass:staticClass},[e(this.marginalsScope)]);const i=!0!==this.hideSelectedBanner&&!0===this.hasSelectionMode&&this.rowsSelectedNumber>0?[t("div",{staticClass:"q-table__control"},[t("div",[(this.selectedRowsLabel||this.$q.lang.table.selectedRecords)(this.rowsSelectedNumber)])])]:[];return!0!==this.hidePagination?t("div",{staticClass:staticClass+" justify-end"},this.__getPaginationDiv(t,i)):i.length>0?t("div",{staticClass:staticClass},i):void 0},__getPaginationDiv(t,e){let i;const{rowsPerPage:s}=this.computedPagination,o=this.paginationLabel||this.$q.lang.table.pagination,n=this.$scopedSlots.pagination,r=this.rowsPerPageOptions.length>1;if(e.push(t("div",{staticClass:"q-table__separator col"})),!0===r&&e.push(t("div",{staticClass:"q-table__control"},[t("span",{staticClass:"q-table__bottom-item"},[this.rowsPerPageLabel||this.$q.lang.table.recordsPerPage]),t(QSelect,{key:"pgSize",staticClass:"q-table__select inline q-table__bottom-item",props:{color:this.color,value:s,options:this.computedRowsPerPageOptions,displayValue:0===s?this.$q.lang.table.allRows:s,dark:this.dark,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0},on:cache(this,"pgSize",{input:t=>{this.setPagination({page:1,rowsPerPage:t.value})}})})])),void 0!==n)i=n(this.marginalsScope);else if(i=[t("span",0!==s?{staticClass:"q-table__bottom-item"}:{},[s?o(this.firstRowIndex+1,Math.min(this.lastRowIndex,this.computedRowsNumber),this.computedRowsNumber):o(1,this.filteredSortedRowsNumber,this.computedRowsNumber)])],0!==s&&this.pagesNumber>1){const e={color:this.color,round:!0,dense:!0,flat:!0};!0===this.dense&&(e.size="sm"),this.pagesNumber>2&&i.push(t(QBtn,{key:"pgFirst",props:{...e,icon:this.navIcon[0],disable:this.isFirstPage},on:cache(this,"pgFirst",{click:this.firstPage})})),i.push(t(QBtn,{key:"pgPrev",props:{...e,icon:this.navIcon[1],disable:this.isFirstPage},on:cache(this,"pgPrev",{click:this.prevPage})}),t(QBtn,{key:"pgNext",props:{...e,icon:this.navIcon[2],disable:this.isLastPage},on:cache(this,"pgNext",{click:this.nextPage})})),this.pagesNumber>2&&i.push(t(QBtn,{key:"pgLast",props:{...e,icon:this.navIcon[3],disable:this.isLastPage},on:cache(this,"pgLast",{click:this.lastPage})}))}return e.push(t("div",{staticClass:"q-table__control"},i)),e}}},TableGrid={methods:{__getGridHeader(t){return t("div",{staticClass:"q-table__middle"},!0===this.gridHeader?[t("table",{staticClass:"q-table"},[this.__getTHead(t)])]:!0===this.loading&&void 0===this.$scopedSlots.loading?this.__getProgress(t):void 0)},__getGridBody(t){const e=void 0!==this.$scopedSlots.item?this.$scopedSlots.item:e=>{const i=e.cols.map(e=>t("div",{staticClass:"q-table__grid-item-row"},[t("div",{staticClass:"q-table__grid-item-title"},[e.label]),t("div",{staticClass:"q-table__grid-item-value"},[e.value])]));if(!0===this.hasSelectionMode){const s=this.$scopedSlots["body-selection"],o=void 0!==s?s(e):[t(QCheckbox,{props:{value:e.selected,color:this.color,dark:this.dark,dense:this.dense},on:{input:(t,i)=>{this.__updateSelection([e.key],[e.row],t,i)}}})];i.unshift(t("div",{staticClass:"q-table__grid-item-row"},o),t(QSeparator,{props:{dark:this.dark}}))}const s={staticClass:"q-table__grid-item-card"+this.cardDefaultClass,class:this.cardClass,style:this.cardStyle,on:{}};return void 0===this.qListeners["row-click"]&&void 0===this.qListeners["row-dblclick"]||(s.staticClass+=" cursor-pointer"),void 0!==this.qListeners["row-click"]&&(s.on.click=(t=>{this.$emit("row-click",t,e.row,e.pageIndex)})),void 0!==this.qListeners["row-dblclick"]&&(s.on.dblclick=(t=>{this.$emit("row-dblclick",t,e.row,e.pageIndex)})),t("div",{staticClass:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3",class:!0===e.selected?"q-table__grid-item--selected":""},[t("div",s,i)])};return t("div",{staticClass:"q-table__grid-content row",class:this.cardContainerClass,style:this.cardContainerStyle},this.computedRows.map((t,i)=>e(this.__getBodyScope({key:this.getRowKey(t),row:t,pageIndex:i}))))}}};function getTableMiddle(t,e,i){return t("div",{...e,staticClass:"q-table__middle"+(void 0!==e.staticClass?" "+e.staticClass:"")},[t("table",{staticClass:"q-table"},i)])}const comps={list:QList,table:QMarkupTable};var QVirtualScroll=Vue.extend({name:"QVirtualScroll",mixins:[AttrsMixin,ListenersMixin,VirtualScroll],props:{type:{type:String,default:"list",validator:t=>["list","table","__qtable"].includes(t)},items:{type:Array,default:()=>[]},itemsFn:Function,itemsSize:Number,scrollTarget:{default:void 0}},computed:{virtualScrollLength(){return this.itemsSize>=0&&void 0!==this.itemsFn?parseInt(this.itemsSize,10):Array.isArray(this.items)?this.items.length:0},virtualScrollScope(){if(0===this.virtualScrollLength)return[];const t=(t,e)=>({index:this.virtualScrollSliceRange.from+e,item:t});return void 0===this.itemsFn?this.items.slice(this.virtualScrollSliceRange.from,this.virtualScrollSliceRange.to).map(t):this.itemsFn(this.virtualScrollSliceRange.from,this.virtualScrollSliceRange.to-this.virtualScrollSliceRange.from).map(t)},classes(){return"q-virtual-scroll q-virtual-scroll"+(!0===this.virtualScrollHorizontal?"--horizontal":"--vertical")+(void 0!==this.scrollTarget?"":" scroll")},attrs(){return void 0!==this.scrollTarget?void 0:{tabindex:0}}},watch:{virtualScrollLength(){this.__resetVirtualScroll()},scrollTarget(){this.__unconfigureScrollTarget(),this.__configureScrollTarget()}},methods:{__getVirtualScrollEl(){return this.$el},__getVirtualScrollTarget(){return this.__scrollTarget},__configureScrollTarget(){this.__scrollTarget=getScrollTarget(this.$el,this.scrollTarget),this.__scrollTarget.addEventListener("scroll",this.__onVirtualScrollEvt,listenOpts.passive)},__unconfigureScrollTarget(){void 0!==this.__scrollTarget&&(this.__scrollTarget.removeEventListener("scroll",this.__onVirtualScrollEvt,listenOpts.passive),this.__scrollTarget=void 0)}},beforeMount(){this.__resetVirtualScroll()},mounted(){this.__configureScrollTarget()},activated(){this.__configureScrollTarget()},deactivated(){this.__unconfigureScrollTarget()},beforeDestroy(){this.__unconfigureScrollTarget()},render(t){if(void 0===this.$scopedSlots.default)return void console.error("QVirtualScroll: default scoped slot is required for rendering",this);let e=this.__padVirtualScroll(t,"list"===this.type?"div":"tbody",this.virtualScrollScope.map(this.$scopedSlots.default));return void 0!==this.$scopedSlots.before&&(e=this.$scopedSlots.before().concat(e)),e=mergeSlot(e,this,"after"),"__qtable"===this.type?getTableMiddle(t,{staticClass:this.classes},e):t(comps[this.type],{class:this.classes,attrs:this.attrs,props:this.qAttrs,on:{...this.qListeners}},e)}});function sortDate(t,e){return new Date(t)-new Date(e)}var Sort={props:{sortMethod:{type:Function,default(t,e,i){const s=this.colList.find(t=>t.name===e);if(void 0===s||void 0===s.field)return t;const o=!0===i?-1:1,n="function"==typeof s.field?t=>s.field(t):t=>t[s.field];return t.sort((t,e)=>{let i=n(t),r=n(e);return null===i||void 0===i?-1*o:null===r||void 0===r?1*o:void 0!==s.sort?s.sort(i,r,t,e)*o:!0===isNumber(i)&&!0===isNumber(r)?(i-r)*o:!0===isDate(i)&&!0===isDate(r)?sortDate(i,r)*o:"boolean"==typeof i&&"boolean"==typeof r?(i-r)*o:([i,r]=[i,r].map(t=>(t+"").toLocaleString().toLowerCase()),i"ad"===t||"da"===t,default:"ad"}},computed:{columnToSort(){const{sortBy:t}=this.computedPagination;if(t)return this.colList.find(e=>e.name===t)||null}},methods:{sort(t){let e=this.columnSortOrder;if(!0===isObject(t))t.sortOrder&&(e=t.sortOrder),t=t.name;else{const i=this.colList.find(e=>e.name===t);void 0!==i&&i.sortOrder&&(e=i.sortOrder)}let{sortBy:i,descending:s}=this.computedPagination;i!==t?(i=t,s="da"===e):!0===this.binaryStateSort?s=!s:!0===s?"ad"===e?i=null:s=!1:"ad"===e?s=!0:i=null,this.setPagination({sortBy:i,descending:s,page:1})}}},Filter={props:{filter:[String,Object],filterMethod:{type:Function,default(t,e,i=this.computedCols,s=this.getCellValue){const o=e?e.toLowerCase():"";return t.filter(t=>i.some(e=>{const i=s(e,t)+"";return-1!==("undefined"===i||"null"===i?"":i.toLowerCase()).indexOf(o)}))}}},watch:{filter:{handler(){this.$nextTick(()=>{this.setPagination({page:1},!0)})},deep:!0}}};function samePagination(t,e){for(const i in e)if(e[i]!==t[i])return!1;return!0}function fixPagination(t){return t.page<1&&(t.page=1),void 0!==t.rowsPerPage&&t.rowsPerPage<1&&(t.rowsPerPage=0),t}var Pagination={props:{pagination:Object,rowsPerPageOptions:{type:Array,default:()=>[5,7,10,15,20,25,50,0]}},computed:{computedPagination(){return fixPagination(void 0!==this.qListeners["update:pagination"]?{...this.innerPagination,...this.pagination}:this.innerPagination)},firstRowIndex(){const{page:t,rowsPerPage:e}=this.computedPagination;return(t-1)*e},lastRowIndex(){const{page:t,rowsPerPage:e}=this.computedPagination;return t*e},isFirstPage(){return 1===this.computedPagination.page},pagesNumber(){return 0===this.computedPagination.rowsPerPage?1:Math.max(1,Math.ceil(this.computedRowsNumber/this.computedPagination.rowsPerPage))},isLastPage(){return 0===this.lastRowIndex||this.computedPagination.page>=this.pagesNumber},computedRowsPerPageOptions(){return(this.rowsPerPageOptions.includes(this.innerPagination.rowsPerPage)?this.rowsPerPageOptions:[this.innerPagination.rowsPerPage].concat(this.rowsPerPageOptions)).map(t=>({label:0===t?this.$q.lang.table.allRows:""+t,value:t}))}},watch:{pagesNumber(t,e){if(t===e)return;const i=this.computedPagination.page;t&&!i?this.setPagination({page:1}):t1&&this.setPagination({page:t-1})},nextPage(){const{page:t,rowsPerPage:e}=this.computedPagination;this.lastRowIndex>0&&t*e["single","multiple","none"].includes(t)},selected:{type:Array,default:()=>[]}},computed:{selectedKeys(){const t={};return this.selected.map(this.getRowKey).forEach(e=>{t[e]=!0}),t},hasSelectionMode(){return"none"!==this.selection},singleSelection(){return"single"===this.selection},multipleSelection(){return"multiple"===this.selection},allRowsSelected(){return this.computedRows.length>0&&this.computedRows.every(t=>!0===this.selectedKeys[this.getRowKey(t)])},someRowsSelected(){return!0!==this.allRowsSelected&&this.computedRows.some(t=>!0===this.selectedKeys[this.getRowKey(t)])},rowsSelectedNumber(){return this.selected.length}},methods:{isRowSelected(t){return!0===this.selectedKeys[t]},clearSelection(){this.$emit("update:selected",[])},__updateSelection(t,e,i,s){this.$emit("selection",{rows:e,added:i,keys:t,evt:s});const o=!0===this.singleSelection?!0===i?e:[]:!0===i?this.selected.concat(e):this.selected.filter(e=>!1===t.includes(this.getRowKey(e)));this.$emit("update:selected",o)}}};function getVal(t){return Array.isArray(t)?t.slice():[]}var RowExpand={props:{expanded:Array},data(){return{innerExpanded:getVal(this.expanded)}},watch:{expanded(t){this.innerExpanded=getVal(t)}},methods:{isRowExpanded(t){return this.innerExpanded.includes(t)},setExpanded(t){void 0!==this.expanded?this.$emit("update:expanded",t):this.innerExpanded=t},__updateExpanded(t,e){const i=this.innerExpanded.slice(),s=i.indexOf(t);!0===e?-1===s&&(i.push(t),this.setExpanded(i)):-1!==s&&(i.splice(s,1),this.setExpanded(i))}}},ColumnSelection={props:{visibleColumns:Array},computed:{colList(){if(void 0!==this.columns)return this.columns;const t=this.data[0];return void 0!==t?Object.keys(t).map(e=>({name:e,label:e.toUpperCase(),field:e,align:isNumber(t[e])?"right":"left",sortable:!0})):[]},computedCols(){const{sortBy:t,descending:e}=this.computedPagination;return(void 0!==this.visibleColumns?this.colList.filter(t=>!0===t.required||!0===this.visibleColumns.includes(t.name)):this.colList).map(i=>{const s=i.align||"right",o=`text-${s}`;return{...i,align:s,__iconClass:`q-table__sort-icon q-table__sort-icon--${s}`,__thClass:o+(void 0!==i.headerClasses?" "+i.headerClasses:"")+(!0===i.sortable?" sortable":"")+(i.name===t?` sorted ${!0===e?"sort-desc":""}`:""),__tdStyle:void 0!==i.style?"function"!=typeof i.style?()=>i.style:i.style:()=>null,__tdClass:void 0!==i.classes?"function"!=typeof i.classes?()=>o+" "+i.classes:t=>o+" "+i.classes(t):()=>o}})},computedColsMap(){const t={};return this.computedCols.forEach(e=>{t[e.name]=e}),t},computedColspan(){return void 0!==this.tableColspan?this.tableColspan:this.computedCols.length+(!0===this.hasSelectionMode?1:0)}}};const commonVirtPropsObj={};commonVirtPropsList.forEach(t=>{commonVirtPropsObj[t]={}});var QTable=Vue.extend({name:"QTable",mixins:[DarkMixin,ListenersMixin,FullscreenMixin,Top,TableHeader,TableBody,Bottom,TableGrid,Sort,Filter,Pagination,RowSelection,RowExpand,ColumnSelection],props:{data:{type:Array,default:()=>[]},rowKey:{type:[String,Function],default:"id"},columns:Array,loading:Boolean,binaryStateSort:Boolean,iconFirstPage:String,iconPrevPage:String,iconNextPage:String,iconLastPage:String,title:String,hideHeader:Boolean,grid:Boolean,gridHeader:Boolean,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:t=>["horizontal","vertical","cell","none"].includes(t)},wrapCells:Boolean,virtualScroll:Boolean,...commonVirtPropsObj,noDataLabel:String,noResultsLabel:String,loadingLabel:String,selectedRowsLabel:Function,rowsPerPageLabel:String,paginationLabel:Function,color:{type:String,default:"grey-8"},titleClass:[String,Array,Object],tableStyle:[String,Array,Object],tableClass:[String,Array,Object],tableHeaderStyle:[String,Array,Object],tableHeaderClass:[String,Array,Object],cardContainerClass:[String,Array,Object],cardContainerStyle:[String,Array,Object],cardStyle:[String,Array,Object],cardClass:[String,Array,Object]},data(){return{innerPagination:Object.assign({sortBy:null,descending:!1,page:1,rowsPerPage:this.rowsPerPageOptions.length>0?this.rowsPerPageOptions[0]:5},this.pagination)}},watch:{needsReset(){!0===this.hasVirtScroll&&void 0!==this.$refs.virtScroll&&this.$refs.virtScroll.reset()}},computed:{getRowKey(){return"function"==typeof this.rowKey?this.rowKey:t=>t[this.rowKey]},hasVirtScroll(){return!0!==this.grid&&!0===this.virtualScroll},needsReset(){return["tableStyle","tableClass","tableHeaderStyle","tableHeaderClass","__containerClass"].map(t=>this[t]).join(";")},filteredSortedRows(){let t=this.data;if(!0===this.isServerSide||0===t.length)return t;const{sortBy:e,descending:i}=this.computedPagination;return this.filter&&(t=this.filterMethod(t,this.filter,this.computedCols,this.getCellValue)),void 0!==this.columnToSort&&(t=this.sortMethod(this.data===t?t.slice():t,e,i)),t},filteredSortedRowsNumber(){return this.filteredSortedRows.length},computedRows(){let t=this.filteredSortedRows;if(!0===this.isServerSide)return t;const{rowsPerPage:e}=this.computedPagination;return 0!==e&&(0===this.firstRowIndex&&this.data!==t?t.length>this.lastRowIndex&&(t=t.slice(0,this.lastRowIndex)):t=t.slice(this.firstRowIndex,this.lastRowIndex)),t},computedRowsNumber(){return!0===this.isServerSide?this.computedPagination.rowsNumber||0:this.filteredSortedRowsNumber},nothingToDisplay(){return 0===this.computedRows.length},isServerSide(){return void 0!==this.computedPagination.rowsNumber},cardDefaultClass(){return" q-table__card"+` q-table__card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.square?" q-table--square":"")+(!0===this.flat?" q-table--flat":"")+(!0===this.bordered?" q-table--bordered":"")},__containerClass(){return`q-table__container q-table--${this.separator}-separator column no-wrap`+(!0===this.grid?" q-table--grid":this.cardDefaultClass)+` q-table--${this.darkSuffix}`+(!0===this.dense?" q-table--dense":"")+(!1===this.wrapCells?" q-table--no-wrap":"")+(!0===this.inFullscreen?" fullscreen scroll":"")},containerClass(){return this.__containerClass+(!0===this.loading?" q-table--loading":"")},virtProps(){const t={};return commonVirtPropsList.forEach(e=>{t[e]=this[e]}),void 0===t.virtualScrollItemSize&&(t.virtualScrollItemSize=!0===this.dense?28:48),t}},render(t){const e=[this.__getTopDiv(t)],i={staticClass:this.containerClass};return!0===this.grid?e.push(this.__getGridHeader(t)):Object.assign(i,{class:this.cardClass,style:this.cardStyle}),e.push(this.__getBody(t),this.__getBottomDiv(t)),!0===this.loading&&void 0!==this.$scopedSlots.loading&&e.push(this.$scopedSlots.loading()),t("div",i,e)},methods:{requestServerInteraction(t={}){this.$nextTick(()=>{this.$emit("request",{pagination:t.pagination||this.computedPagination,filter:t.filter||this.filter,getCellValue:this.getCellValue})})},resetVirtualScroll(){!0===this.hasVirtScroll&&this.$refs.virtScroll.reset()},__getBody(t){if(!0===this.grid)return this.__getGridBody(t);const e=!0!==this.hideHeader?this.__getTHead(t):null;if(!0===this.hasVirtScroll){const i=this.$scopedSlots["top-row"],s=this.$scopedSlots["bottom-row"],o={default:this.__getVirtualTBodyTR(t)};if(void 0!==i){const s=t("tbody",i({cols:this.computedCols}));o.before=null===e?()=>[s]:()=>[e].concat(s)}else null!==e&&(o.before=(()=>e));return void 0!==s&&(o.after=(()=>t("tbody",s({cols:this.computedCols})))),t(QVirtualScroll,{key:"vs",ref:"virtScroll",props:{...this.virtProps,items:this.computedRows,type:"__qtable",tableColspan:this.computedColspan},on:cache(this,"vs",{"virtual-scroll":this.__onVScroll}),class:this.tableClass,style:this.tableStyle,scopedSlots:o})}return getTableMiddle(t,{staticClass:"scroll",class:this.tableClass,style:this.tableStyle},[e,this.__getTBody(t)])},scrollTo(t,e){if(void 0!==this.$refs.virtScroll)return void this.$refs.virtScroll.scrollTo(t,e);t=parseInt(t,10);const i=this.$el.querySelector(`tbody tr:nth-of-type(${t+1})`);if(null!==i){const e=this.$el.querySelector(".q-table__middle.scroll"),s=i.offsetTop-this.virtualScrollStickySizeStart,o=s/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t)},options:Function,hourOptions:Array,minuteOptions:Array,secondOptions:Array,withSeconds:Boolean,nowBtn:Boolean},data(){const t=__splitDate(this.value,this.__getMask(),this.__getLocale(),this.calendar,this.__getDefaultDateModel());let e="Hour";return null!==t.hour&&(null===t.minute?e="Minute":!0===this.withSeconds&&null===t.second&&(e="Second")),{view:e,isAM:null===t.hour||t.hour<12,innerModel:t}},watch:{value(t){const e=__splitDate(t,this.computedMask,this.computedLocale,this.calendar,this.defaultDateModel);e.dateHash===this.innerModel.dateHash&&e.timeHash===this.innerModel.timeHash||(this.innerModel=e,null===e.hour?this.__goToView("Hour"):(this.isAM=e.hour<12,null===e.minute&&"Second"===this.view&&this.__goToView("Minute")))},computedMask(){this.$nextTick(()=>{this.__updateValue()})},computedLocale(){this.$nextTick(()=>{this.__updateValue()})}},computed:{classes(){return`q-time q-time--${!0===this.landscape?"landscape":"portrait"}`+` q-time--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.disable?" disabled":!0===this.readonly?" q-time--readonly":"")+(!0===this.bordered?" q-time--bordered":"")+(!0===this.square?" q-time--square no-border-radius":"")+(!0===this.flat?" q-time--flat no-shadow":"")+" q-key-group-navigation--ignore-key"},stringModel(){const t=this.innerModel;return{hour:null===t.hour?"--":!0===this.computedFormat24h?pad(t.hour):String(!0===this.isAM?0===t.hour?12:t.hour:t.hour>12?t.hour-12:t.hour),minute:null===t.minute?"--":pad(t.minute),second:null===t.second?"--":pad(t.second)}},defaultDateModel(){return this.__getDefaultDateModel()},computedFormat24h(){return null!==this.format24h?this.format24h:this.$q.lang.date.format24h},pointerStyle(){const t="Hour"===this.view,e=!0===t?12:60,i=this.innerModel[this.view.toLowerCase()];let s=`rotate(${Math.round(i*(360/e))-180}deg) translateX(-50%)`;return!0===t&&!0===this.computedFormat24h&&this.innerModel.hour>=12&&(s+=" scale(.7)"),{transform:s}},minLink(){return null!==this.innerModel.hour},secLink(){return!0===this.minLink&&null!==this.innerModel.minute},hourInSelection(){return void 0!==this.hourOptions?t=>this.hourOptions.includes(t):void 0!==this.options?t=>this.options(t,null,null):void 0},minuteInSelection(){return void 0!==this.minuteOptions?t=>this.minuteOptions.includes(t):void 0!==this.options?t=>this.options(this.innerModel.hour,t,null):void 0},secondInSelection(){return void 0!==this.secondOptions?t=>this.secondOptions.includes(t):void 0!==this.options?t=>this.options(this.innerModel.hour,this.innerModel.minute,t):void 0},validHours(){if(void 0!==this.hourInSelection){const t=this.__getValidValues(0,11,this.hourInSelection),e=this.__getValidValues(12,11,this.hourInSelection);return{am:t,pm:e,values:t.values.concat(e.values)}}},validMinutes(){if(void 0!==this.minuteInSelection)return this.__getValidValues(0,59,this.minuteInSelection)},validSeconds(){if(void 0!==this.secondInSelection)return this.__getValidValues(0,59,this.secondInSelection)},viewValidOptions(){switch(this.view){case"Hour":return this.validHours;case"Minute":return this.validMinutes;case"Second":return this.validSeconds}},positions(){let t,e,i=0,s=1;const o=void 0!==this.viewValidOptions?this.viewValidOptions.values:void 0;"Hour"===this.view?!0===this.computedFormat24h?(t=0,e=23):(t=0,e=11,!1===this.isAM&&(i=12)):(t=0,e=55,s=5);const n=[];for(let r=t,a=t;r<=e;r+=s,a++){const t=r+i,e=void 0!==o&&!1===o.includes(t),s="Hour"===this.view&&0===r?!0===this.computedFormat24h?"00":"12":r;n.push({val:t,index:a,disable:e,label:s})}return n}},methods:{setNow(){const t=__splitDate(this.__updateValue({...this.__getCurrentDate(),...this.__getCurrentTime()}),this.computedMask,this.computedLocale,this.calendar,this.defaultDateModel);this.innerModel=t,this.isAM=t.hour<12,this.__goToView("Hour")},__getValidValues(t,e,i){const s=Array.apply(null,{length:e+1}).map((e,s)=>{const o=s+t;return{index:o,val:!0===i(o)}}).filter(t=>!0===t.val).map(t=>t.index);return{min:s[0],max:s[s.length-1],values:s,threshold:e+1}},__getWheelDist(t,e,i){const s=Math.abs(t-e);return Math.min(s,i-s)},__getNormalizedClockValue(t,{min:e,max:i,values:s,threshold:o}){if(t===e)return e;if(ti)return this.__getWheelDist(t,e,o)<=this.__getWheelDist(t,i,o)?e:i;const n=s.findIndex(e=>t<=e),r=s[n-1],a=s[n];return t-r<=a-t?r:a},__getMask(){return"persian"!==this.calendar&&null!==this.mask?this.mask:`HH:mm${!0===this.withSeconds?":ss":""}`},__getDefaultDateModel(){if("string"!=typeof this.defaultDate){const t=this.__getCurrentDate(!0);return t.dateHash=this.__getDayHash(t),t}return __splitDate(this.defaultDate,"YYYY/MM/DD",void 0,this.calendar)},__click(t){!0!==this.__shouldAbortInteraction()&&(!0!==this.$q.platform.is.desktop&&this.__updateClock(t,this.__getClockRect()),this.__goToNextView())},__activate(t){!0!==this.__shouldAbortInteraction()&&this.__updateClock(t,this.__getClockRect())},__shouldAbortInteraction(){return!0===this._isBeingDestroyed||!0===this._isDestroyed||void 0!==this.viewValidOptions&&(0===this.viewValidOptions.values.length||"Hour"===this.view&&!0!==this.computedFormat24h&&0===this.validHours[!0===this.isAM?"am":"pm"].values.length)},__getClockRect(){const t=this.$refs.clock,{top:e,left:i,width:s}=t.getBoundingClientRect(),o=s/2;return{top:e+o,left:i+o,dist:.7*o}},__goToView(t){this.view!==t&&(this.view=t),void 0!==this.$refs[t]&&this.$refs[t]!==document.activeElement&&this.$refs[t].focus()},__goToNextView(){"Hour"===this.view?this.__goToView("Minute"):this.withSeconds&&"Minute"===this.view?this.__goToView("Second"):this.__updateValue(void 0,!0)},__drag(t){!0!==this.__shouldAbortInteraction()&&(!0===t.isFinal?(this.draggingClockRect=!1,this.dragCache=null,this.__goToNextView()):!0===t.isFirst?(this.draggingClockRect=this.__getClockRect(),this.dragCache=this.__updateClock(t.evt,this.draggingClockRect)):this.dragCache=this.__updateClock(t.evt,this.draggingClockRect,this.dragCache))},__updateClock(t,e,i){const s=position(t),o=Math.abs(s.top-e.top),n=Math.sqrt(Math.pow(Math.abs(s.top-e.top),2)+Math.pow(Math.abs(s.left-e.left),2));let r,a=Math.asin(o/n)*(180/Math.PI);if(a=s.top0&&this.validHours.pm.values.length>0?n>=e.dist:this.validHours.am.values.length>0;r=this.__getNormalizedClockValue(r+(!0===t?0:12),this.validHours[!0===t?"am":"pm"])}else r=Math.round(r),!0===this.computedFormat24h?n{this.view="Hour"},keydown:preventKbdArrows,keyup:this.__onKeyupHour})},[this.stringModel.hour]),t("div",[":"]),t("div",!0===this.minLink?{key:"vM",ref:"Minute",staticClass:"q-time__link",class:"Minute"===this.view?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex,"data-autofocus":"Minute"===this.view},on:cache(this,"vM",{focus:()=>{this.view="Minute"},keydown:preventKbdArrows,keyup:this.__onKeyupMinute})}:{staticClass:"q-time__link"},[this.stringModel.minute])];return!0===this.withSeconds&&e.push(t("div",[":"]),t("div",!0===this.secLink?{key:"vS",ref:"Second",staticClass:"q-time__link",class:"Second"===this.view?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex,"data-autofocus":"Second"===this.view},on:cache(this,"vS",{focus:()=>{this.view="Second"},keydown:preventKbdArrows,keyup:this.__onKeyupSecond})}:{staticClass:"q-time__link"},[this.stringModel.second])),t("div",{staticClass:"q-time__header flex flex-center no-wrap",class:this.headerClass},[t("div",{staticClass:"q-time__header-label row items-center no-wrap",attrs:{dir:"ltr"}},e),!1===this.computedFormat24h?t("div",{staticClass:"q-time__header-ampm column items-between no-wrap"},[t("div",{key:"AM",staticClass:"q-time__link",class:!0===this.isAM?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:cache(this,"AM",{click:this.__setAm,keyup:t=>{13===t.keyCode&&this.__setAm()}})},["AM"]),t("div",{key:"PM",staticClass:"q-time__link",class:!0!==this.isAM?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:cache(this,"PM",{click:this.__setPm,keyup:t=>{13===t.keyCode&&this.__setPm()}})},["PM"])]):null])},__getClock(t){const e=this.view.toLowerCase(),i=this.innerModel[e];return t("div",{staticClass:"q-time__content col relative-position"},[t("transition",{props:{name:"q-transition--scale"}},[t("div",{key:"clock"+this.view,staticClass:"q-time__container-parent absolute-full"},[t("div",{ref:"clock",staticClass:"q-time__container-child fit overflow-hidden"},[t("div",{key:"click",staticClass:"q-time__clock cursor-pointer non-selectable",on:cache(this,"click",{click:this.__click,mousedown:this.__activate}),directives:cache(this,"touch",[{name:"touch-pan",value:this.__drag,modifiers:{stop:!0,prevent:!0,mouse:!0}}])},[t("div",{staticClass:"q-time__clock-circle fit"},[t("div",{staticClass:"q-time__clock-pointer",style:this.pointerStyle,class:null===this.innerModel[e]?"hidden":void 0!==this.color?`text-${this.color}`:""}),this.positions.map(e=>t("div",{staticClass:`q-time__clock-position row flex-center q-time__clock-pos-${e.index}`,class:e.val===i?this.headerClass.concat(" q-time__clock-position--active"):!0===e.disable?"q-time__clock-position--disabled":null},[t("span",[e.label])]))])])])])]),!0===this.nowBtn?t(QBtn,{key:"now",staticClass:"q-time__now-button absolute",props:{icon:this.$q.iconSet.datetime.now,unelevated:!0,size:"sm",round:!0,color:this.color,textColor:this.textColor,tabindex:this.computedTabindex},on:cache(this,"now",{click:this.setNow})}):null])},__setHour(t){this.innerModel.hour!==t&&(this.innerModel.hour=t,this.__verifyAndUpdate())},__setMinute(t){this.innerModel.minute!==t&&(this.innerModel.minute=t,this.__verifyAndUpdate())},__setSecond(t){this.innerModel.second!==t&&(this.innerModel.second=t,this.__verifyAndUpdate())},__setAm(){!1===this.isAM&&(this.isAM=!0,null!==this.innerModel.hour&&(this.innerModel.hour-=12,this.__verifyAndUpdate()))},__setPm(){!0===this.isAM&&(this.isAM=!1,null!==this.innerModel.hour&&(this.innerModel.hour+=12,this.__verifyAndUpdate()))},__verifyAndUpdate(){return void 0!==this.hourInSelection&&!0!==this.hourInSelection(this.innerModel.hour)?(this.innerModel=__splitDate(),void this.__goToView("Hour")):void 0!==this.minuteInSelection&&!0!==this.minuteInSelection(this.innerModel.minute)?(this.innerModel.minute=null,this.innerModel.second=null,void this.__goToView("Minute")):!0===this.withSeconds&&void 0!==this.secondInSelection&&!0!==this.secondInSelection(this.innerModel.second)?(this.innerModel.second=null,void this.__goToView("Second")):void(null===this.innerModel.hour||null===this.innerModel.minute||!0===this.withSeconds&&null===this.innerModel.second||this.__updateValue())},__updateValue(t,e){const i=Object.assign({...this.innerModel},t),s="persian"===this.calendar?pad(i.hour)+":"+pad(i.minute)+(!0===this.withSeconds?":"+pad(i.second):""):formatDate(__safeCreateDate(i.year,null===i.month?null:i.month-1,i.day,i.hour,i.minute,i.second,i.millisecond),this.computedMask,this.computedLocale,i.year,i.timezoneOffset);return i.changed=s!==this.value,!0===e&&!0!==i.changed||this.$emit("input",s,i),!0===e&&this.$emit("change",s,i),s}},render(t){const e=[this.__getClock(t)],i=slot(this,"default");return void 0!==i&&e.push(t("div",{staticClass:"q-time__actions"},i)),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{class:this.classes,on:{...this.qListeners},attrs:{tabindex:-1}},[this.__getHeader(t),t("div",{staticClass:"q-time__main col overflow-auto"},e)])}}),QTimeline=Vue.extend({name:"QTimeline",mixins:[DarkMixin,ListenersMixin],provide(){return{__timeline:this}},props:{color:{type:String,default:"primary"},side:{type:String,default:"right",validator:t=>["left","right"].includes(t)},layout:{type:String,default:"dense",validator:t=>["dense","comfortable","loose"].includes(t)}},computed:{classes(){return`q-timeline--${this.layout} q-timeline--${this.layout}--${this.side}`+` q-timeline--${this.darkSuffix}`}},render(t){return t("ul",{staticClass:"q-timeline",class:this.classes,on:{...this.qListeners}},slot(this,"default"))}}),QTimelineEntry=Vue.extend({name:"QTimelineEntry",inject:{__timeline:{default(){console.error("QTimelineEntry needs to be child of QTimeline")}}},mixins:[ListenersMixin],props:{heading:Boolean,tag:{type:String,default:"h3"},side:{type:String,default:"right",validator:t=>["left","right"].includes(t)},icon:String,avatar:String,color:String,title:String,subtitle:String,body:String},computed:{colorClass(){return`text-${this.color||this.__timeline.color}`},classes(){return`q-timeline__entry--${this.side}`+(void 0!==this.icon||void 0!==this.avatar?" q-timeline__entry--icon":"")},reverse(){return"comfortable"===this.__timeline.layout&&"left"===this.__timeline.side}},render(t){const e=uniqueSlot(this,"default",[]);if(void 0!==this.body&&e.unshift(this.body),!0===this.heading){const i=[t("div"),t("div"),t(this.tag,{staticClass:"q-timeline__heading-title"},e)];return t("div",{staticClass:"q-timeline__heading",on:{...this.qListeners}},!0===this.reverse?i.reverse():i)}let i;void 0!==this.icon?i=[t(QIcon,{staticClass:"row items-center justify-center",props:{name:this.icon}})]:void 0!==this.avatar&&(i=[t("img",{staticClass:"q-timeline__dot-img",domProps:{src:this.avatar}})]);const s=[t("div",{staticClass:"q-timeline__subtitle"},[t("span",slot(this,"subtitle",[this.subtitle]))]),t("div",{staticClass:"q-timeline__dot",class:this.colorClass},i),t("div",{staticClass:"q-timeline__content"},[t("h6",{staticClass:"q-timeline__title"},slot(this,"title",[this.title]))].concat(e))];return t("li",{staticClass:"q-timeline__entry",class:this.classes,on:{...this.qListeners}},!0===this.reverse?s.reverse():s)}});const attrs={role:"toolbar"};var QToolbar=Vue.extend({name:"QToolbar",mixins:[ListenersMixin],props:{inset:Boolean},render(t){return t("div",{staticClass:"q-toolbar row no-wrap items-center",class:this.inset?"q-toolbar--inset":null,attrs:attrs,on:{...this.qListeners}},slot(this,"default"))}}),QToolbarTitle=Vue.extend({name:"QToolbarTitle",mixins:[ListenersMixin],props:{shrink:Boolean},computed:{classes(){return"q-toolbar__title ellipsis"+(!0===this.shrink?" col-shrink":"")}},render(t){return t("div",{class:this.classes,on:{...this.qListeners}},slot(this,"default"))}});const tickStrategyOptions=["none","strict","leaf","leaf-filtered"];var QTree=Vue.extend({name:"QTree",mixins:[DarkMixin],props:{nodes:{type:Array,required:!0},nodeKey:{type:String,required:!0},labelKey:{type:String,default:"label"},childrenKey:{type:String,default:"children"},dense:Boolean,color:String,controlColor:String,textColor:String,selectedColor:String,icon:String,tickStrategy:{type:String,default:"none",validator:t=>tickStrategyOptions.includes(t)},ticked:Array,expanded:Array,selected:{},noSelectionUnset:Boolean,defaultExpandAll:Boolean,accordion:Boolean,filter:String,filterMethod:{type:Function,default(t,e){const i=e.toLowerCase();return t[this.labelKey]&&t[this.labelKey].toLowerCase().indexOf(i)>-1}},duration:Number,noConnectors:Boolean,noTransition:Boolean,noNodesLabel:String,noResultsLabel:String},computed:{classes(){return`q-tree q-tree--${!0===this.dense?"dense":"standard"}`+(!0===this.noConnectors?" q-tree--no-connectors":"")+` q-tree--${this.darkSuffix}`+(void 0!==this.color?` text-${this.color}`:"")},hasSelection(){return void 0!==this.selected},computedIcon(){return this.icon||this.$q.iconSet.tree.icon},computedControlColor(){return this.controlColor||this.color},textColorClass(){if(void 0!==this.textColor)return`text-${this.textColor}`},selectedColorClass(){const t=this.selectedColor||this.color;if(t)return`text-${t}`},meta(){const t=this.metaMap;t.clear();const e=(i,s)=>{const o=i.tickStrategy||(s?s.tickStrategy:this.tickStrategy),n=i[this.nodeKey],r=i[this.childrenKey]&&i[this.childrenKey].length>0,a=!0!==i.disabled&&!0===this.hasSelection&&!1!==i.selectable,l=!0!==i.disabled&&!1!==i.expandable,h="none"!==o,c="strict"===o,d="leaf-filtered"===o,u="leaf"===o||"leaf-filtered"===o;let p=!0!==i.disabled&&!1!==i.tickable;!0===u&&!0===p&&s&&!0!==s.tickable&&(p=!1);let m=i.lazy;!0===m&&void 0!==this.lazy[n]&&!0===Array.isArray(i[this.childrenKey])&&(m=this.lazy[n]);const g={key:n,parent:s,isParent:r,lazy:m,disabled:i.disabled,link:!0!==i.disabled&&(!0===a||!0===l&&(!0===r||!0===m)),children:[],matchesFilter:!this.filter||this.filterMethod(i,this.filter),selected:n===this.selected&&!0===a,selectable:a,expanded:!0===r&&this.innerExpanded.includes(n),expandable:l,noTick:!0===i.noTick||!0!==c&&m&&"loaded"!==m,tickable:p,tickStrategy:o,hasTicking:h,strictTicking:c,leafFilteredTicking:d,leafTicking:u,ticked:!0===c?this.innerTicked.includes(n):!0!==r&&this.innerTicked.includes(n)};if(!0===g.expanded&&!0!==this.renderedMap.has(n)&&this.renderedMap.set(n,!0),t.set(n,g),!0===r&&(g.children=i[this.childrenKey].map(t=>e(t,g)),this.filter&&(!0!==g.matchesFilter?g.matchesFilter=g.children.some(t=>t.matchesFilter):!0!==g.noTick&&!0!==g.disabled&&!0===g.tickable&&!0===d&&!0===g.children.every(t=>!0!==t.matchesFilter||!0===t.noTick||!0!==t.tickable)&&(g.tickable=!1)),!0===g.matchesFilter&&(!0!==g.noTick&&!0!==c&&!0===g.children.every(t=>t.noTick)&&(g.noTick=!0),u))){if(g.ticked=!1,g.indeterminate=g.children.some(t=>!0===t.indeterminate),g.tickable=!0===g.tickable&&g.children.some(t=>t.tickable),!0!==g.indeterminate){const t=g.children.reduce((t,e)=>!0===e.ticked?t+1:t,0);t===g.children.length?g.ticked=!0:t>0&&(g.indeterminate=!0)}!0===g.indeterminate&&(g.indeterminateNextState=g.children.every(t=>!0!==t.tickable||!0!==t.ticked))}return g};return this.nodes.forEach(t=>e(t,null)),t}},data(){return{lazy:{},innerTicked:this.ticked||[],innerExpanded:this.expanded||[]}},watch:{ticked(t){this.innerTicked=t},expanded(t){this.innerExpanded=t}},methods:{getNodeByKey(t){const e=[].reduce,i=(s,o)=>s||!o?s:!0===Array.isArray(o)?e.call(Object(o),i,s):o[this.nodeKey]===t?o:o[this.childrenKey]?i(null,o[this.childrenKey]):void 0;return i(null,this.nodes)},getTickedNodes(){return this.innerTicked.map(t=>this.getNodeByKey(t))},getExpandedNodes(){return this.innerExpanded.map(t=>this.getNodeByKey(t))},isExpanded(t){const e=this.meta.get(t);return void 0!==e&&e.expanded},collapseAll(){void 0!==this.expanded?this.$emit("update:expanded",[]):this.innerExpanded=[]},expandAll(){const t=this.innerExpanded,e=i=>{i[this.childrenKey]&&i[this.childrenKey].length>0&&!1!==i.expandable&&!0!==i.disabled&&(t.push(i[this.nodeKey]),i[this.childrenKey].forEach(e))};this.nodes.forEach(e),void 0!==this.expanded?this.$emit("update:expanded",t):this.innerExpanded=t},setExpanded(t,e,i=this.getNodeByKey(t),s=this.meta.get(t)){if(s.lazy&&"loaded"!==s.lazy){if("loading"===s.lazy)return;this.$set(this.lazy,t,"loading"),!0!==Array.isArray(i[this.childrenKey])&&this.$set(i,this.childrenKey,[]),this.$emit("lazy-load",{node:i,key:t,done:e=>{this.lazy[t]="loaded",this.$set(i,this.childrenKey,!0===Array.isArray(e)?e:[]),this.$nextTick(()=>{const e=this.meta.get(t);void 0!==e&&!0===e.isParent&&this.__setExpanded(t,!0)})},fail:()=>{this.$delete(this.lazy,t),0===i[this.childrenKey].length&&this.$delete(i,this.childrenKey)}})}else!0===s.isParent&&!0===s.expandable&&this.__setExpanded(t,e)},__setExpanded(t,e){let i=this.innerExpanded;const s=void 0!==this.expanded;if(!0===s&&(i=i.slice()),e){if(this.accordion){const e=this.meta.get(t);if(void 0!==e){const s=[];e.parent?e.parent.children.forEach(e=>{e.key!==t&&!0===e.expandable&&s.push(e.key)}):this.nodes.forEach(e=>{const i=e[this.nodeKey];i!==t&&s.push(i)}),s.length>0&&(i=i.filter(t=>!1===s.includes(t)))}}i=i.concat([t]).filter((t,e,i)=>i.indexOf(t)===e)}else i=i.filter(e=>e!==t);!0===s?this.$emit("update:expanded",i):this.innerExpanded=i},isTicked(t){const e=this.meta.get(t);return void 0!==e&&e.ticked},setTicked(t,e){let i=this.innerTicked;const s=void 0!==this.ticked;!0===s&&(i=i.slice()),i=e?i.concat(t).filter((t,e,i)=>i.indexOf(t)===e):i.filter(e=>!1===t.includes(e)),!0===s&&this.$emit("update:ticked",i)},__getSlotScope(t,e,i){const s={tree:this,node:t,key:i,color:this.color,dark:this.dark};return injectProp(s,"expanded",()=>e.expanded,t=>{t!==e.expanded&&this.setExpanded(i,t)}),injectProp(s,"ticked",()=>e.ticked,t=>{t!==e.ticked&&this.setTicked([i],t)}),s},__getChildren(t,e){return(this.filter?e.filter(t=>this.meta.get(t[this.nodeKey]).matchesFilter):e).map(e=>this.__getNode(t,e))},__getNodeMedia(t,e){if(void 0!==e.icon)return t(QIcon,{staticClass:"q-tree__icon q-mr-sm",props:{name:e.icon,color:e.iconColor}});const i=e.img||e.avatar;return i?t("img",{staticClass:`q-tree__${e.img?"img":"avatar"} q-mr-sm`,attrs:{src:i}}):void 0},__getNode(t,e){const i=e[this.nodeKey],s=this.meta.get(i),o=e.header&&this.$scopedSlots[`header-${e.header}`]||this.$scopedSlots["default-header"],n=!0===s.isParent?this.__getChildren(t,e[this.childrenKey]):[],r=n.length>0||s.lazy&&"loaded"!==s.lazy;let a=e.body&&this.$scopedSlots[`body-${e.body}`]||this.$scopedSlots["default-body"];const l=void 0!==o||void 0!==a?this.__getSlotScope(e,s,i):null;void 0!==a&&(a=t("div",{staticClass:"q-tree__node-body relative-position"},[t("div",{class:this.textColorClass},[a(l)])]));const h=()=>t("div",{staticClass:"q-tree__node-collapsible",class:this.textColorClass,directives:[{name:"show",value:s.expanded}]},!0===this.renderedMap.has(i)?[a,t("div",{staticClass:"q-tree__children",class:{"q-tree__node--disabled":s.disabled}},n)]:void 0);return t("div",{key:i,staticClass:"q-tree__node relative-position",class:{"q-tree__node--parent":r,"q-tree__node--child":!0!==r}},[t("div",{staticClass:"q-tree__node-header relative-position row no-wrap items-center",class:{"q-tree__node--link q-hoverable q-focusable":s.link,"q-tree__node--selected":s.selected,"q-tree__node--disabled":s.disabled},attrs:{tabindex:s.link?0:-1},on:{click:t=>{this.__onClick(e,s,t)},keypress:t=>{!0!==shouldIgnoreKey(t)&&(13===t.keyCode?this.__onClick(e,s,t,!0):32===t.keyCode&&this.__onExpandClick(e,s,t,!0))}}},[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:`blurTarget_${s.key}`}),"loading"===s.lazy?t(QSpinner,{staticClass:"q-tree__spinner",props:{color:this.computedControlColor}}):!0===r?t(QIcon,{staticClass:"q-tree__arrow",class:{"q-tree__arrow--rotate":s.expanded},props:{name:this.computedIcon},on:{click:t=>{this.__onExpandClick(e,s,t)}}}):null,!0===s.hasTicking&&!0!==s.noTick?t(QCheckbox,{staticClass:"q-tree__tickbox",props:{value:!0===s.indeterminate?null:s.ticked,color:this.computedControlColor,dark:this.dark,dense:!0,keepColor:!0,disable:!0!==s.tickable},on:{keydown:stopAndPrevent,input:t=>{this.__onTickedClick(s,t)}}}):null,t("div",{staticClass:"q-tree__node-header-content col row no-wrap items-center",class:s.selected?this.selectedColorClass:this.textColorClass},[o?o(l):[this.__getNodeMedia(t,e),t("div",e[this.labelKey])]])]),!0===r?!0===this.noTransition?h():t(QSlideTransition,{key:"slide",props:{duration:this.duration},on:cache(this,"slide",{show:()=>{this.$emit("after-show")},hide:()=>{this.$emit("after-hide")}})},[h()]):!0===this.renderedMap.has(i)?a:void 0])},__blur(t){const e=this.$refs[`blurTarget_${t}`];void 0!==e&&e.focus()},__onClick(t,e,i,s){!0!==s&&this.__blur(e.key),this.hasSelection&&e.selectable?!1===this.noSelectionUnset?this.$emit("update:selected",e.key!==this.selected?e.key:null):e.key!==this.selected&&this.$emit("update:selected",void 0===e.key?null:e.key):this.__onExpandClick(t,e,i,s),"function"==typeof t.handler&&t.handler(t)},__onExpandClick(t,e,i,s){void 0!==i&&stopAndPrevent(i),!0!==s&&this.__blur(e.key),this.setExpanded(e.key,!0!==e.expanded,t,e)},__onTickedClick(t,e){if(!0===t.indeterminate&&(e=t.indeterminateNextState),t.strictTicking)this.setTicked([t.key],e);else if(t.leafTicking){const i=[],s=t=>{t.isParent?(!0!==e&&!0!==t.noTick&&!0===t.tickable&&i.push(t.key),!0===t.leafTicking&&t.children.forEach(s)):!0===t.noTick||!0!==t.tickable||!0===t.leafFilteredTicking&&!0!==t.matchesFilter||i.push(t.key)};s(t),this.setTicked(i,e)}}},render(t){const e=this.__getChildren(t,this.nodes);return t("div",{class:this.classes},0===e.length?this.filter?this.noResultsLabel||this.$q.lang.tree.noResults:this.noNodesLabel||this.$q.lang.tree.noNodes:e)},created(){this.renderedMap=new Map,this.metaMap=new Map,!0===this.defaultExpandAll&&this.expandAll()},beforeDestroy(){this.renderedMap.clear(),this.renderedMap=void 0,this.metaMap.clear(),this.metaMap=void 0}}),QUploaderBase=Vue.extend({name:"QUploaderBase",mixins:[DarkMixin,FileMixin],props:{label:String,color:String,textColor:String,square:Boolean,flat:Boolean,bordered:Boolean,noThumbnails:Boolean,autoUpload:Boolean,hideUploadBtn:Boolean,disable:Boolean,readonly:Boolean},provide(){return{__qUploaderGetInput:this.__getInputControl}},data:()=>({files:[],queuedFiles:[],uploadedFiles:[],dnd:!1,expanded:!1,uploadSize:0,uploadedSize:0}),watch:{isUploading(t,e){!1===e&&!0===t?this.$emit("start"):!0===e&&!1===t&&this.$emit("finish")}},computed:{canUpload(){return!0===this.editable&&!0!==this.isBusy&&!0!==this.isUploading&&this.queuedFiles.length>0},canAddFiles(){return!0===this.editable&&!0!==this.isUploading&&(!0===this.multiple||0===this.queuedFiles.length)&&(void 0===this.maxFiles||this.files.length{this.uploadedFiles=[]})},removeQueuedFiles(){this.__removeFiles(["idle","failed"],({size:t})=>{this.uploadSize-=t,this.queuedFiles=[]})},__removeFiles(t,e){if(!0===this.disable)return;const i={files:[],size:0},s=this.files.filter(e=>-1===t.indexOf(e.__status)||(i.size+=e.size,i.files.push(e),void 0!==e.__img&&window.URL.revokeObjectURL(e.__img.src),!1));i.files.length>0&&(this.files=s,void 0!==e&&e(i),this.$emit("removed",i.files))},removeFile(t){this.disable||("uploaded"===t.__status?this.uploadedFiles=this.uploadedFiles.filter(e=>e.__key!==t.__key):"uploading"===t.__status?t.__abort():this.uploadSize-=t.size,this.files=this.files.filter(e=>e.__key!==t.__key||(void 0!==e.__img&&window.URL.revokeObjectURL(e.__img.src),!1)),this.queuedFiles=this.queuedFiles.filter(e=>e.__key!==t.__key),this.$emit("removed",[t]))},__revokeImgURLs(){this.files.forEach(t=>{void 0!==t.__img&&window.URL.revokeObjectURL(t.__img.src)})},__getFileInput(){return this.$refs.input||this.$el.getElementsByClassName("q-uploader__input")[0]},__getProgressLabel:t=>(100*t).toFixed(2)+"%",__updateFile(t,e,i){if(t.__status=e,"idle"===e)return t.__uploaded=0,t.__progress=0,t.__sizeLabel=humanStorageSize(t.size),void(t.__progressLabel="0.00%");"failed"!==e?(t.__uploaded="uploaded"===e?t.size:i,t.__progress="uploaded"===e?1:Math.min(.9999,t.__uploaded/t.size),t.__progressLabel=this.__getProgressLabel(t.__progress),this.$forceUpdate()):this.$forceUpdate()},__addFiles(t,e){const i=this.__processFiles(t,e,this.files,!0),s=this.__getFileInput();void 0!==s&&(s.value=""),void 0!==i&&(i.forEach(t=>{if(this.__updateFile(t,"idle"),this.uploadSize+=t.size,!0!==this.noThumbnails&&t.type.toUpperCase().startsWith("IMAGE")){const e=new Image;e.src=window.URL.createObjectURL(t),t.__img=e}}),this.files=this.files.concat(i),this.queuedFiles=this.queuedFiles.concat(i),this.$emit("added",i),!0===this.autoUpload&&this.upload())},__getBtn(t,e,i,s){if(!0===e)return t(QBtn,{props:{type:"a",icon:this.$q.iconSet.uploader[i],flat:!0,dense:!0},on:{click:"add"===i?this.pickFiles:s}},"add"===i?this.__getInputControl(t):null)},__getInputControl(t){return[t("input",{key:"input",ref:"input",staticClass:"q-uploader__input overflow-hidden absolute-full",attrs:{tabindex:-1,type:"file",title:"",accept:this.accept,capture:this.capture,...!0===this.multiple?{multiple:!0}:{}},on:cache(this,"input",{mousedown:stop,click:this.pickFiles,change:this.__addFiles})})]},__getHeader(t){return void 0!==this.$scopedSlots.header?this.$scopedSlots.header(this):[t("div",{staticClass:"q-uploader__header-content column"},[t("div",{staticClass:"flex flex-center no-wrap q-gutter-xs"},[this.__getBtn(t,this.queuedFiles.length>0,"removeQueue",this.removeQueuedFiles),this.__getBtn(t,this.uploadedFiles.length>0,"removeUploaded",this.removeUploadedFiles),!0===this.isUploading?t(QSpinner,{staticClass:"q-uploader__spinner"}):null,t("div",{staticClass:"col column justify-center"},[void 0!==this.label?t("div",{staticClass:"q-uploader__title"},[this.label]):null,t("div",{staticClass:"q-uploader__subtitle"},[this.uploadSizeLabel+" / "+this.uploadProgressLabel])]),this.__getBtn(t,this.canAddFiles,"add",this.pickFiles),this.__getBtn(t,!1===this.hideUploadBtn&&!0===this.canUpload,"upload",this.upload),this.__getBtn(t,this.isUploading,"clear",this.abort)])])]},__getList(t){return void 0!==this.$scopedSlots.list?this.$scopedSlots.list(this):this.files.map(e=>t("div",{key:e.__key,staticClass:"q-uploader__file relative-position",class:{"q-uploader__file--img":!0!==this.noThumbnails&&void 0!==e.__img,"q-uploader__file--failed":"failed"===e.__status,"q-uploader__file--uploaded":"uploaded"===e.__status},style:!0!==this.noThumbnails&&void 0!==e.__img?{backgroundImage:'url("'+e.__img.src+'")'}:null},[t("div",{staticClass:"q-uploader__file-header row flex-center no-wrap"},["failed"===e.__status?t(QIcon,{staticClass:"q-uploader__file-status",props:{name:this.$q.iconSet.type.negative,color:"negative"}}):null,t("div",{staticClass:"q-uploader__file-header-content col"},[t("div",{staticClass:"q-uploader__title"},[e.name]),t("div",{staticClass:"q-uploader__subtitle row items-center no-wrap"},[e.__sizeLabel+" / "+e.__progressLabel])]),"uploading"===e.__status?t(QCircularProgress,{props:{value:e.__progress,min:0,max:1,indeterminate:0===e.__progress}}):t(QBtn,{props:{round:!0,dense:!0,flat:!0,icon:this.$q.iconSet.uploader["uploaded"===e.__status?"done":"clear"]},on:{click:()=>{this.removeFile(e)}}})])]))}},beforeDestroy(){!0===this.isUploading&&this.abort(),this.files.length>0&&this.__revokeImgURLs()},render(t){const e=[t("div",{staticClass:"q-uploader__header",class:this.colorClass},this.__getHeader(t)),t("div",{staticClass:"q-uploader__list scroll"},this.__getList(t)),this.__getDnd(t,"uploader")];return!0===this.isBusy&&e.push(t("div",{staticClass:"q-uploader__overlay absolute-full flex flex-center"},[t(QSpinner)])),t("div",{key:"drag",staticClass:"q-uploader column no-wrap",class:{[`q-uploader--${this.darkSuffix} q-${this.darkSuffix}`]:!0,"q-uploader--bordered":this.bordered,"q-uploader--square no-border-radius":this.square,"q-uploader--flat no-shadow":this.flat,"disabled q-uploader--disabled":this.disable,"q-uploader--dnd":this.dnd},on:!0===this.canAddFiles?cache(this,"drag",{dragover:this.__onDragOver,dragleave:this.__onDragLeave}):null},e)}});function getFn(t){return"function"==typeof t?t:()=>t}var UploaderXHRMixin={props:{url:[Function,String],method:{type:[Function,String],default:"POST"},fieldName:{type:[Function,String],default:t=>t.name},headers:[Function,Array],formFields:[Function,Array],withCredentials:[Function,Boolean],sendRaw:[Function,Boolean],batch:[Function,Boolean],factory:Function},data:()=>({xhrs:[],promises:[],workingThreads:0}),computed:{xhrProps(){return{url:getFn(this.url),method:getFn(this.method),headers:getFn(this.headers),formFields:getFn(this.formFields),fieldName:getFn(this.fieldName),withCredentials:getFn(this.withCredentials),sendRaw:getFn(this.sendRaw),batch:getFn(this.batch)}},isUploading(){return this.workingThreads>0},isBusy(){return this.promises.length>0}},methods:{abort(){this.xhrs.forEach(t=>{t.abort()}),this.promises.length>0&&(this.abortPromises=!0)},upload(){if(!1===this.canUpload)return;const t=this.queuedFiles.slice(0);this.queuedFiles=[],this.xhrProps.batch(t)?this.__runFactory(t):t.forEach(t=>{this.__runFactory([t])})},__runFactory(t){if(this.workingThreads++,"function"!=typeof this.factory)return void this.__uploadFiles(t,{});const e=this.factory(t);if(e)if("function"==typeof e.catch&&"function"==typeof e.then){this.promises.push(e);const i=i=>{!0!==this._isBeingDestroyed&&!0!==this._isDestroyed&&(this.promises=this.promises.filter(t=>t!==e),0===this.promises.length&&(this.abortPromises=!1),this.queuedFiles=this.queuedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"failed")}),this.$emit("factory-failed",i,t),this.workingThreads--)};e.then(s=>{!0===this.abortPromises?i(new Error("Aborted")):!0!==this._isBeingDestroyed&&!0!==this._isDestroyed&&(this.promises=this.promises.filter(t=>t!==e),this.__uploadFiles(t,s))}).catch(i)}else this.__uploadFiles(t,e||{});else this.$emit("factory-failed",new Error("QUploader: factory() does not return properly"),t),this.workingThreads--},__uploadFiles(t,e){const i=new FormData,s=new XMLHttpRequest,o=(t,i)=>void 0!==e[t]?getFn(e[t])(i):this.xhrProps[t](i),n=o("url",t);if(!n)return console.error("q-uploader: invalid or no URL specified"),void this.workingThreads--;const r=o("formFields",t);void 0!==r&&r.forEach(t=>{i.append(t.name,t.value)});let a,l=0,h=0,c=0,d=0;s.upload.addEventListener("progress",e=>{if(!0===a)return;const i=Math.min(d,e.loaded);this.uploadedSize+=i-c;let s=(c=i)-h;for(let e=l;s>0&&ei.size))return void this.__updateFile(i,"uploading",s);s-=i.size,l++,h+=i.size,this.__updateFile(i,"uploading",i.size)}},!1),s.onreadystatechange=(()=>{s.readyState<4||(s.status&&s.status<400?(this.uploadedFiles=this.uploadedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"uploaded")}),this.$emit("uploaded",{files:t,xhr:s})):(a=!0,this.uploadedSize-=c,this.queuedFiles=this.queuedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"failed")}),this.$emit("failed",{files:t,xhr:s})),this.workingThreads--,this.xhrs=this.xhrs.filter(t=>t!==s))}),s.open(o("method",t),n),!0===o("withCredentials",t)&&(s.withCredentials=!0);const u=o("headers",t);void 0!==u&&u.forEach(t=>{s.setRequestHeader(t.name,t.value)});const p=o("sendRaw",t);t.forEach(t=>{this.__updateFile(t,"uploading",0),!0!==p&&i.append(o("fieldName",t),t,t.name),t.xhr=s,t.__abort=(()=>{s.abort()}),d+=t.size}),this.$emit("uploading",{files:t,xhr:s}),this.xhrs.push(s),!0===p?s.send(new Blob(t)):s.send(i)}}},QUploader=Vue.extend({name:"QUploader",mixins:[QUploaderBase,UploaderXHRMixin]}),QUploaderAddTrigger=Vue.extend({name:"QUploaderAddTrigger",inject:{__qUploaderGetInput:{default(){console.error("QUploaderAddTrigger needs to be child of QUploader")}}},render(t){return this.__qUploaderGetInput(t)}}),QVideo=Vue.extend({name:"QVideo",mixins:[RatioMixin,ListenersMixin],props:{src:{type:String,required:!0},title:String,fetchpriority:{type:String,default:"auto"},loading:{type:String,default:"eager"},referrerpolicy:{type:String,default:"strict-origin-when-cross-origin"}},computed:{iframeData(){return{attrs:{src:this.src,frameborder:"0",title:this.title,allowfullscreen:!0,fetchpriority:this.fetchpriority,loading:this.loading,referrerpolicy:this.referrerpolicy}}},classes(){return"q-video"+(void 0!==this.ratio?" q-video--responsive":"")}},render(t){return t("div",{class:this.classes,style:this.ratioStyle,on:{...this.qListeners}},[t("iframe",this.iframeData)])}}),components=Object.freeze({__proto__:null,QAjaxBar:QAjaxBar,QAvatar:QAvatar,QBadge:QBadge,QBanner:QBanner,QBar:QBar,QBreadcrumbs:QBreadcrumbs,QBreadcrumbsEl:QBreadcrumbsEl,QBtn:QBtn,QBtnDropdown:QBtnDropdown,QBtnGroup:QBtnGroup,QBtnToggle:QBtnToggle,QCard:QCard,QCardSection:QCardSection,QCardActions:QCardActions,QCarousel:QCarousel,QCarouselSlide:QCarouselSlide,QCarouselControl:QCarouselControl,QChatMessage:QChatMessage,QCheckbox:QCheckbox,QChip:QChip,QCircularProgress:QCircularProgress,QColor:QColor,QDate:QDate,QDialog:QDialog,QDrawer:QDrawer,QEditor:QEditor,QExpansionItem:QExpansionItem,QFab:QFab,QFabAction:QFabAction,QField:QField,QFile:QFile,QFooter:QFooter,QForm:QForm,QHeader:QHeader,QIcon:QIcon,QImg:QImg,QInfiniteScroll:QInfiniteScroll,QInnerLoading:QInnerLoading,QInput:QInput,QIntersection:QIntersection,QList:QList,QItem:QItem,QItemSection:QItemSection,QItemLabel:QItemLabel,QKnob:QKnob,QLayout:QLayout,QMarkupTable:QMarkupTable,QMenu:QMenu,QNoSsr:QNoSsr,QOptionGroup:QOptionGroup,QPage:QPage,QPageContainer:QPageContainer,QPageScroller:QPageScroller,QPageSticky:QPageSticky,QPagination:QPagination,QParallax:QParallax,QPopupEdit:QPopupEdit,QPopupProxy:QPopupProxy,QLinearProgress:QLinearProgress,QPullToRefresh:QPullToRefresh,QRadio:QRadio,QRange:QRange,QRating:QRating,QResizeObserver:QResizeObserver,QResponsive:QResponsive,QScrollArea:QScrollArea,QScrollObserver:QScrollObserver,QSelect:QSelect,QSeparator:QSeparator,QSkeleton:QSkeleton,QSlideItem:QSlideItem,QSlideTransition:QSlideTransition,QSlider:QSlider,QSpace:QSpace,QSpinner:QSpinner,QSpinnerAudio:QSpinnerAudio,QSpinnerBall:QSpinnerBall,QSpinnerBars:QSpinnerBars,QSpinnerBox:QSpinnerBox,QSpinnerClock:QSpinnerClock,QSpinnerComment:QSpinnerComment,QSpinnerCube:QSpinnerCube,QSpinnerDots:QSpinnerDots,QSpinnerFacebook:QSpinnerFacebook,QSpinnerGears:QSpinnerGears,QSpinnerGrid:QSpinnerGrid,QSpinnerHearts:QSpinnerHearts,QSpinnerHourglass:QSpinnerHourglass,QSpinnerInfinity:QSpinnerInfinity,QSpinnerIos:QSpinnerIos,QSpinnerOrbit:QSpinnerOrbit,QSpinnerOval:QSpinnerOval,QSpinnerPie:QSpinnerPie,QSpinnerPuff:QSpinnerPuff,QSpinnerRadio:QSpinnerRadio,QSpinnerRings:QSpinnerRings,QSpinnerTail:QSpinnerTail,QSplitter:QSplitter,QStep:QStep,QStepper:QStepper,QStepperNavigation:QStepperNavigation,QTabPanels:QTabPanels,QTabPanel:QTabPanel,QTable:QTable,QTh:QTh,QTr:QTr,QTd:QTd,QTabs:QTabs,QTab:QTab,QRouteTab:QRouteTab,QTime:QTime,QTimeline:QTimeline,QTimelineEntry:QTimelineEntry,QToggle:QToggle,QToolbar:QToolbar,QToolbarTitle:QToolbarTitle,QTooltip:QTooltip,QTree:QTree,QUploader:QUploader,QUploaderBase:QUploaderBase,QUploaderAddTrigger:QUploaderAddTrigger,QVideo:QVideo,QVirtualScroll:QVirtualScroll});function getDepth(t){if(!1===t)return 0;if(!0===t||void 0===t)return 1;const e=parseInt(t,10);return isNaN(e)?0:e}function destroy$7(t){const e=t.__qclosepopup;void 0!==e&&(t.removeEventListener("click",e.handler),t.removeEventListener("keyup",e.handlerKey),delete t.__qclosepopup)}var ClosePopup={name:"close-popup",bind(t,{value:e},i){void 0!==t.__qclosepopup&&(destroy$7(t),t.__qclosepopup_destroyed=!0);const s={depth:getDepth(e),handler(t){0!==s.depth&&setTimeout(()=>{closePortals(i.componentInstance||i.context,t,s.depth)})},handlerKey(t){!0===isKeyCode(t,13)&&s.handler(t)}};t.__qclosepopup=s,t.addEventListener("click",s.handler),t.addEventListener("keyup",s.handlerKey)},update(t,{value:e,oldValue:i}){void 0!==t.__qclosepopup&&i!==e&&(t.__qclosepopup.depth=getDepth(e))},unbind(t){void 0===t.__qclosepopup_destroyed?destroy$7(t):delete t.__qclosepopup_destroyed}};function destroy$6(t){const e=t.__qgoback;void 0!==e&&(t.removeEventListener("click",e.goBack),t.removeEventListener("keyup",e.goBackKey),delete t.__qgoback)}var GoBack={name:"go-back",bind(t,{modifiers:e,value:i},s){void 0!==t.__qgoback&&(destroy$6(t),t.__qgoback_destroyed=!0);const o={value:i,position:window.history.length-1,single:e.single,goBack(){const t=s.context.$router;!0===o.single?t.go(-1):!0===client.is.nativeMobile?t.go(o.position-window.history.length):t.replace(o.value)},goBackKey(t){!0===isKeyCode(t,13)&&o.goBack()}};t.__qgoback=o,t.addEventListener("click",o.goBack),t.addEventListener("keyup",o.goBackKey)},update(t,{modifiers:e,value:i,oldValue:s}){const o=t.__qgoback;void 0!==o&&(o.single!==e.single&&(o.single=e.single),s!==i&&(o.value=i))},unbind(t){void 0===t.__qgoback_destroyed?destroy$6(t):delete t.__qgoback_destroyed}};let id=0,offsetBase=void 0;function getAbsolutePosition(t,e){void 0===offsetBase&&((offsetBase=document.createElement("div")).style.cssText="position: absolute; left: 0; top: 0",document.body.appendChild(offsetBase));const i=t.getBoundingClientRect(),s=offsetBase.getBoundingClientRect(),{marginLeft:o,marginRight:n,marginTop:r,marginBottom:a}=window.getComputedStyle(t),l=parseInt(o,10)+parseInt(n,10),h=parseInt(r,10)+parseInt(a,10);return{left:i.left-s.left,top:i.top-s.top,width:i.right-i.left,height:i.bottom-i.top,widthM:i.right-i.left+(!0===e?0:l),heightM:i.bottom-i.top+(!0===e?0:h),marginH:!0===e?l:0,marginV:!0===e?h:0}}function getAbsoluteSize(t){return{width:t.scrollWidth,height:t.scrollHeight}}const styleEdges=["Top","Right","Bottom","Left"],styleBorderRadiuses=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],reStyleSkipKey=/-block|-inline|block-|inline-/,reStyleSkipRule=/(-block|-inline|block-|inline-).*:/;function getComputedStyle$1(t,e){const i=window.getComputedStyle(t),s={};for(let t=0;t-1){const t=o.replace("border","");let e="";for(let s=0;s!0!==reStyleSkipRule.test(t)).join(";"):i[o]}return s}const zIndexPositions=["absolute","fixed","relative","sticky"];function getMaxZIndex(t){let e=t,i=0;for(;null!==e&&e!==document;){const{position:s,zIndex:o}=window.getComputedStyle(e),n=Number(o);n>i&&(e===t||!0===zIndexPositions.includes(s))&&(i=n),e=e.parentNode}return i}function normalizeElements(t){return{from:t.from,to:void 0!==t.to?t.to:t.from}}function normalizeOptions(t){return"number"==typeof t?t={duration:t}:"function"==typeof t&&(t={onEnd:t}),{...t,waitFor:void 0===t.waitFor?0:t.waitFor,duration:!0===isNaN(t.duration)?300:parseInt(t.duration,10),easing:"string"==typeof t.easing&&t.easing.length>0?t.easing:"ease-in-out",delay:!0===isNaN(t.delay)?0:parseInt(t.delay,10),fill:"string"==typeof t.fill&&t.fill.length>0?t.fill:"none",resize:!0===t.resize,useCSS:!0===t.useCSS||!0===t.usecss,hideFromClone:!0===t.hideFromClone||!0===t.hidefromclone,keepToClone:!0===t.keepToClone||!0===t.keeptoclone,tween:!0===t.tween,tweenFromOpacity:!0===isNaN(t.tweenFromOpacity)?.6:parseFloat(t.tweenFromOpacity),tweenToOpacity:!0===isNaN(t.tweenToOpacity)?.5:parseFloat(t.tweenToOpacity)}}function isValidElement(t){return t&&t.ownerDocument===document&&null!==t.parentNode}function morph(t){let e=()=>!1,i=!1,s=!0;const o=normalizeElements(t),n=normalizeOptions(t),r=getElement(o.from);if(!0!==isValidElement(r))return e;"function"==typeof r.qMorphCancel&&r.qMorphCancel();let a=void 0,l=void 0,h=void 0,c=void 0;const d=r.parentNode,u=r.nextElementSibling,p=getAbsolutePosition(r,n.resize),{width:m,height:g}=getAbsoluteSize(d),{borderWidth:f,borderStyle:v,borderColor:_,borderRadius:b,backgroundColor:y,transform:S,position:x,cssText:C}=getComputedStyle$1(r,["borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","transform","position","cssText"]),k=r.classList.toString(),w=r.style.cssText,$=r.cloneNode(!0),q=!0===n.tween?r.cloneNode(!0):void 0;void 0!==q&&(q.className=q.classList.toString().split(" ").filter(t=>!1===/^bg-/.test(t)).join(" ")),!0===n.hideFromClone&&$.classList.add("q-morph--internal"),$.setAttribute("aria-hidden","true"),$.style.transition="none",$.style.animation="none",$.style.pointerEvents="none",d.insertBefore($,u),r.qMorphCancel=(()=>{i=!0,$.remove(),void 0!==q&&q.remove(),!0===n.hideFromClone&&$.classList.remove("q-morph--internal"),r.qMorphCancel=void 0});return"function"==typeof t.onToggle&&t.onToggle(),requestAnimationFrame(()=>{const t=getElement(o.to);if(!0===i||!0!==isValidElement(t))return void("function"==typeof r.qMorphCancel&&r.qMorphCancel());r!==t&&"function"==typeof t.qMorphCancel&&t.qMorphCancel(),!0!==n.keepToClone&&t.classList.add("q-morph--internal"),$.classList.add("q-morph--internal");const{width:u,height:T}=getAbsoluteSize(d),{width:M,height:E}=getAbsoluteSize(t.parentNode);!0!==n.hideFromClone&&$.classList.remove("q-morph--internal"),t.qMorphCancel=(()=>{i=!0,$.remove(),void 0!==q&&q.remove(),!0===n.hideFromClone&&$.classList.remove("q-morph--internal"),!0!==n.keepToClone&&t.classList.remove("q-morph--internal"),r.qMorphCancel=void 0,t.qMorphCancel=void 0});const L=()=>{if(!0===i)return void("function"==typeof t.qMorphCancel&&t.qMorphCancel());!0!==n.hideFromClone&&($.classList.add("q-morph--internal"),$.innerHTML="",$.style.left=0,$.style.right="unset",$.style.top=0,$.style.bottom="unset",$.style.transform="none"),!0!==n.keepToClone&&t.classList.remove("q-morph--internal");const o=t.parentNode,{width:L,height:P}=getAbsoluteSize(o),A=t.cloneNode(n.keepToClone);A.setAttribute("aria-hidden","true"),!0!==n.keepToClone&&(A.style.left=0,A.style.right="unset",A.style.top=0,A.style.bottom="unset",A.style.transform="none",A.style.pointerEvents="none"),A.classList.add("q-morph--internal");const B=t===r&&d===o?$:t.nextElementSibling;o.insertBefore(A,B);const{borderWidth:I,borderStyle:R,borderColor:D,borderRadius:z,backgroundColor:O,transform:V,position:Q,cssText:F}=getComputedStyle$1(t,["borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","transform","position","cssText"]),N=t.classList.toString(),H=t.style.cssText;t.style.cssText=F,t.style.transform="none",t.style.animation="none",t.style.transition="none",t.className=N.split(" ").filter(t=>!1===/^bg-/.test(t)).join(" ");const j=getAbsolutePosition(t,n.resize),W=p.left-j.left,K=p.top-j.top,U=p.width/(j.width>0?j.width:10),Y=p.height/(j.height>0?j.height:100),G=m-u,X=g-T,Z=L-M,J=P-E,tt=Math.max(p.widthM,G),et=Math.max(p.heightM,X),it=Math.max(j.widthM,Z),st=Math.max(j.heightM,J),ot=r===t&&!1===["absolute","fixed"].includes(Q)&&!1===["absolute","fixed"].includes(x);let nt="fixed"===Q,rt=o;for(;!0!==nt&&rt!==document;)nt="fixed"===window.getComputedStyle(rt).position,rt=rt.parentNode;if(!0!==n.hideFromClone&&($.style.display="block",$.style.flex="0 0 auto",$.style.opacity=0,$.style.minWidth="unset",$.style.maxWidth="unset",$.style.minHeight="unset",$.style.maxHeight="unset",$.classList.remove("q-morph--internal")),!0!==n.keepToClone&&(A.style.display="block",A.style.flex="0 0 auto",A.style.opacity=0,A.style.minWidth="unset",A.style.maxWidth="unset",A.style.minHeight="unset",A.style.maxHeight="unset"),A.classList.remove("q-morph--internal"),"string"==typeof n.classes&&(t.className+=" "+n.classes),"string"==typeof n.style)t.style.cssText+=" "+n.style;else if(!0===isObject(n.style))for(const e in n.style)t.style[e]=n.style[e];const at=getMaxZIndex($),lt=getMaxZIndex(t),ht=!0===nt?document.documentElement:{scrollLeft:0,scrollTop:0};t.style.position=!0===nt?"fixed":"absolute",t.style.left=`${j.left-ht.scrollLeft}px`,t.style.right="unset",t.style.top=`${j.top-ht.scrollTop}px`,t.style.margin=0,!0===n.resize&&(t.style.minWidth="unset",t.style.maxWidth="unset",t.style.minHeight="unset",t.style.maxHeight="unset",t.style.overflow="hidden",t.style.overflowX="hidden",t.style.overflowY="hidden"),document.body.appendChild(t),void 0!==q&&(q.style.cssText=C,q.style.transform="none",q.style.animation="none",q.style.transition="none",q.style.position=t.style.position,q.style.left=`${p.left-ht.scrollLeft}px`,q.style.right="unset",q.style.top=`${p.top-ht.scrollTop}px`,q.style.margin=0,q.style.pointerEvents="none",!0===n.resize&&(q.style.minWidth="unset",q.style.maxWidth="unset",q.style.minHeight="unset",q.style.maxHeight="unset",q.style.overflow="hidden",q.style.overflowX="hidden",q.style.overflowY="hidden"),document.body.appendChild(q));const ct=i=>{r===t&&!0!==s?(t.style.cssText=w,t.className=k):(t.style.cssText=H,t.className=N),A.parentNode===o&&o.insertBefore(t,A),$.remove(),A.remove(),void 0!==q&&q.remove(),e=(()=>!1),r.qMorphCancel=void 0,t.qMorphCancel=void 0,"function"==typeof n.onEnd&&n.onEnd(!0===s?"to":"from",!0===i)};if(!0!==n.useCSS&&"function"==typeof t.animate){const o=!0===n.resize?{transform:`translate(${W}px, ${K}px)`,width:`${tt}px`,height:`${et}px`}:{transform:`translate(${W}px, ${K}px) scale(${U}, ${Y})`},d=!0===n.resize?{width:`${it}px`,height:`${st}px`}:{},u=!0===n.resize?{width:`${tt}px`,height:`${et}px`}:{},m=!0===n.resize?{transform:`translate(${-1*W}px, ${-1*K}px)`,width:`${it}px`,height:`${st}px`}:{transform:`translate(${-1*W}px, ${-1*K}px) scale(${1/U}, ${1/Y})`},g=void 0!==q?{opacity:n.tweenToOpacity}:{backgroundColor:y},x=void 0!==q?{opacity:1}:{backgroundColor:O};c=t.animate([{margin:0,borderWidth:f,borderStyle:v,borderColor:_,borderRadius:b,zIndex:at,transformOrigin:"0 0",...o,...g},{margin:0,borderWidth:I,borderStyle:R,borderColor:D,borderRadius:z,zIndex:lt,transformOrigin:"0 0",transform:V,...d,...x}],{duration:n.duration,easing:n.easing,fill:n.fill,delay:n.delay}),l=void 0===q?void 0:q.animate([{opacity:n.tweenFromOpacity,margin:0,borderWidth:f,borderStyle:v,borderColor:_,borderRadius:b,zIndex:at,transformOrigin:"0 0",transform:S,...u},{opacity:0,margin:0,borderWidth:I,borderStyle:R,borderColor:D,borderRadius:z,zIndex:lt,transformOrigin:"0 0",...m}],{duration:n.duration,easing:n.easing,fill:n.fill,delay:n.delay}),a=!0===n.hideFromClone||!0===ot?void 0:$.animate([{margin:`${X<0?X/2:0}px ${G<0?G/2:0}px`,width:`${tt+p.marginH}px`,height:`${et+p.marginV}px`},{margin:0,width:0,height:0}],{duration:n.duration,easing:n.easing,fill:n.fill,delay:n.delay}),h=!0===n.keepToClone?void 0:A.animate([!0===ot?{margin:`${X<0?X/2:0}px ${G<0?G/2:0}px`,width:`${tt+p.marginH}px`,height:`${et+p.marginV}px`}:{margin:0,width:0,height:0},{margin:`${J<0?J/2:0}px ${Z<0?Z/2:0}px`,width:`${it+j.marginH}px`,height:`${st+j.marginV}px`}],{duration:n.duration,easing:n.easing,fill:n.fill,delay:n.delay});const C=t=>{void 0!==a&&a.cancel(),void 0!==l&&l.cancel(),void 0!==h&&h.cancel(),c.cancel(),c.removeEventListener("finish",C),c.removeEventListener("cancel",C),ct(t),a=void 0,l=void 0,h=void 0,c=void 0};r.qMorphCancel=(()=>{r.qMorphCancel=void 0,i=!0,C()}),t.qMorphCancel=(()=>{t.qMorphCancel=void 0,i=!0,C()}),c.addEventListener("finish",C),c.addEventListener("cancel",C),e=(t=>!0!==i&&void 0!==c&&(!0===t?(C(!0),!0):(s=!0!==s,void 0!==a&&a.reverse(),void 0!==l&&l.reverse(),void 0!==h&&h.reverse(),c.reverse(),!0)))}else{const o=`q-morph-anim-${++id}`,a=document.createElement("style"),l=!0===n.resize?`\n transform: translate(${W}px, ${K}px);\n width: ${tt}px;\n height: ${et}px;\n `:`transform: translate(${W}px, ${K}px) scale(${U}, ${Y});`,h=!0===n.resize?`\n width: ${it}px;\n height: ${st}px;\n `:"",c=!0===n.resize?`\n width: ${tt}px;\n height: ${et}px;\n `:"",d=!0===n.resize?`\n transform: translate(${-1*W}px, ${-1*K}px);\n width: ${it}px;\n height: ${st}px;\n `:`transform: translate(${-1*W}px, ${-1*K}px) scale(${1/U}, ${1/Y});`,u=void 0!==q?`opacity: ${n.tweenToOpacity};`:`background-color: ${y};`,m=void 0!==q?"opacity: 1;":`background-color: ${O};`,g=void 0===q?"":`\n @keyframes ${o}-from-tween {\n 0% {\n opacity: ${n.tweenFromOpacity};\n margin: 0;\n border-width: ${f};\n border-style: ${v};\n border-color: ${_};\n border-radius: ${b};\n z-index: ${at};\n transform-origin: 0 0;\n transform: ${S};\n ${c}\n }\n\n 100% {\n opacity: 0;\n margin: 0;\n border-width: ${I};\n border-style: ${R};\n border-color: ${D};\n border-radius: ${z};\n z-index: ${lt};\n transform-origin: 0 0;\n ${d}\n }\n }\n `,x=!0===n.hideFromClone||!0===ot?"":`\n @keyframes ${o}-from {\n 0% {\n margin: ${X<0?X/2:0}px ${G<0?G/2:0}px;\n width: ${tt+p.marginH}px;\n height: ${et+p.marginV}px;\n }\n\n 100% {\n margin: 0;\n width: 0;\n height: 0;\n }\n }\n `,C=!0===ot?`\n margin: ${X<0?X/2:0}px ${G<0?G/2:0}px;\n width: ${tt+p.marginH}px;\n height: ${et+p.marginV}px;\n `:"\n margin: 0;\n width: 0;\n height: 0;\n ",k=!0===n.keepToClone?"":`\n @keyframes ${o}-to {\n 0% {\n ${C}\n }\n\n 100% {\n margin: ${J<0?J/2:0}px ${Z<0?Z/2:0}px;\n width: ${it+j.marginH}px;\n height: ${st+j.marginV}px;\n }\n }\n `;a.innerHTML=`\n @keyframes ${o} {\n 0% {\n margin: 0;\n border-width: ${f};\n border-style: ${v};\n border-color: ${_};\n border-radius: ${b};\n background-color: ${y};\n z-index: ${at};\n transform-origin: 0 0;\n ${l}\n ${u}\n }\n\n 100% {\n margin: 0;\n border-width: ${I};\n border-style: ${R};\n border-color: ${D};\n border-radius: ${z};\n background-color: ${O};\n z-index: ${lt};\n transform-origin: 0 0;\n transform: ${V};\n ${h}\n ${m}\n }\n }\n\n ${x}\n\n ${g}\n\n ${k}\n `,document.head.appendChild(a);let w="normal";$.style.animation=`${n.duration}ms ${n.easing} ${n.delay}ms ${w} ${n.fill} ${o}-from`,void 0!==q&&(q.style.animation=`${n.duration}ms ${n.easing} ${n.delay}ms ${w} ${n.fill} ${o}-from-tween`),A.style.animation=`${n.duration}ms ${n.easing} ${n.delay}ms ${w} ${n.fill} ${o}-to`,t.style.animation=`${n.duration}ms ${n.easing} ${n.delay}ms ${w} ${n.fill} ${o}`;const T=e=>{e===Object(e)&&e.animationName!==o||(t.removeEventListener("animationend",T),t.removeEventListener("animationcancel",T),ct(),a.remove())};r.qMorphCancel=(()=>{r.qMorphCancel=void 0,i=!0,T()}),t.qMorphCancel=(()=>{t.qMorphCancel=void 0,i=!0,T()}),t.addEventListener("animationend",T),t.addEventListener("animationcancel",T),e=(e=>!!(!0!==i&&t&&$&&A)&&(!0===e?(T(),!0):(s=!0!==s,w="normal"===w?"reverse":"normal",$.style.animationDirection=w,q.style.animationDirection=w,A.style.animationDirection=w,t.style.animationDirection=w,!0)))}};n.waitFor>0||"transitionend"===n.waitFor||n.waitFor===Object(n.waitFor)&&"function"==typeof n.waitFor.then?(n.waitFor>0?new Promise(t=>setTimeout(t,n.waitFor)):"transitionend"===n.waitFor?new Promise(e=>{const i=setTimeout(()=>{s()},400),s=o=>{clearTimeout(i),t&&(t.removeEventListener("transitionend",s),t.removeEventListener("transitioncancel",s)),e()};t.addEventListener("transitionend",s),t.addEventListener("transitioncancel",s)}):n.waitFor).then(L).catch(()=>{"function"==typeof t.qMorphCancel&&t.qMorphCancel()}):L()}),t=>e(t)}const morphGroups={},mods=["resize","useCSS","hideFromClone","keepToClone","tween"],props$1=["duration","delay","easing","fill","classes","style","duration","tweenFromOpacity","tweenToOpacity","waitFor","onEnd"];function changeClass(t,e){t.clsAction!==e&&(t.clsAction=e,t.el.classList[e]("q-morph--invisible"))}function trigger(t){if(!0===t.animating||t.queue.length<2)return;const[e,i]=t.queue;t.animating=!0,e.animating=!0,i.animating=!0,changeClass(e,"remove"),changeClass(i,"remove");const s=morph({from:e.el,to:i.el,onToggle(){changeClass(e,"add"),changeClass(i,"remove")},...i.opts,onEnd(s,o){void 0!==i.opts.onEnd&&i.opts.onEnd(s,o),!0!==o&&(e.animating=!1,i.animating=!1,t.animating=!1,t.cancel=void 0,t.queue.shift(),trigger(t))}});t.cancel=(()=>{s(!0),t.cancel=void 0})}function changeModel(t,e){if(t.name!==e)!1===t.animating&&changeClass(t,"add");else{const i=morphGroups[t.group];void 0===i?(morphGroups[t.group]={name:t.group,model:e,queue:[t],animating:!1},changeClass(t,"remove")):i.model!==e&&(i.model=e,i.queue.push(t),!1===i.animating&&2===i.queue.length&&trigger(i))}}function setOptsFromValue(t,e){void 0!==e.group&&(t.group=e.group),void 0!==e.name&&(t.name=e.name);const i=t.opts;props$1.forEach(t=>{void 0!==e[t]&&(i[t]=e[t])})}function updateArg(t,e){const i="string"==typeof e&&e.length>0?e.split(":"):[];t.name=i[0],t.group=i[1],Object.assign(t.opts,{duration:!0===isNaN(i[2])?300:parseFloat(i[2]),waitFor:i[3]})}function updateModifiers(t,e){const i=t.opts;mods.forEach(t=>{i[t]=!0===e[t]})}function updateValue(t,e){let i;Object(e)===e?(i=""+e.model,setOptsFromValue(t,e),updateModifiers(t,e)):i=""+e,i!==t.model?(t.model=i,changeModel(t,i)):!1===t.animating&&void 0!==t.clsAction&&t.el.classList[t.clsAction]("q-morph--invisible")}function destroy$5(t){const e=t.__qmorph;if(void 0!==e){const i=morphGroups[e.group];if(void 0!==i){-1!==i.queue.indexOf(e)&&(i.queue=i.queue.filter(t=>t!==e),0===i.queue.length&&(void 0!==i.cancel&&i.cancel(),delete morphGroups[e.group]))}"add"===e.clsAction&&t.classList.remove("q-morph--invisible"),delete t.__qmorph}}var Morph={name:"morph",inserted(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qmorph&&(destroy$5(t),t.__qmorph_destroyed=!0);const o={el:t,arg:i,animating:!1,opts:{}};updateModifiers(o,e),updateArg(o,i),updateValue(o,s),t.__qmorph=o},update(t,{modifiers:e,arg:i,value:s}){const o=t.__qmorph;void 0!==o&&(updateModifiers(o,e),o.arg!==i&&updateArg(o,i),updateValue(o,s))},unbind(t){void 0===t.__qmorph_destroyed?destroy$5(t):delete t.__qmorph_destroyed}};const defaultCfg={childList:!0,subtree:!0,attributes:!0,characterData:!0,attributeOldValue:!0,characterDataOldValue:!0};function update$2(t,e,i){e.handler=i,void 0!==e.observer&&e.observer.disconnect(),e.observer=new MutationObserver(i=>{if("function"==typeof e.handler){!1!==e.handler(i)&&!0!==e.once||destroy$4(t)}}),e.observer.observe(t,e.opts)}function destroy$4(t){const e=t.__qmutation;void 0!==e&&(void 0!==e.observer&&e.observer.disconnect(),delete t.__qmutation)}var Mutation={name:"mutation",inserted(t,{modifiers:{once:e,...i},value:s}){void 0!==t.__qmutation&&(destroy$4(t),t.__qmutation_destroyed=!0);const o={once:e};o.opts=0===Object.keys(i).length?defaultCfg:i,update$2(t,o,s),t.__qmutation=o},update(t,{modifiers:{once:e,...i},value:s,oldValue:o}){const n=t.__qmutation;if(void 0!==n){const e=0===Object.keys(i).length?defaultCfg:i;o===s&&!0===isDeepEqual(n.opts,e)||(n.opts=e,update$2(t,n,s))}},unbind(t){void 0===t.__qmutation_destroyed?destroy$4(t):delete t.__qmutation_destroyed}};function update$1(t,{value:e,oldValue:i}){"function"==typeof e?(t.handler=e,"function"!=typeof i&&(t.scrollTarget.addEventListener("scroll",t.scroll,listenOpts.passive),t.scroll())):t.scrollTarget.removeEventListener("scroll",t.scroll,listenOpts.passive)}function destroy$3(t){const e=t.__qscrollfire;void 0!==e&&(e.scrollTarget.removeEventListener("scroll",e.scroll,listenOpts.passive),e.scroll.cancel(),delete t.__qscrollfire)}var ScrollFire={name:"scroll-fire",inserted(t,e){void 0!==t.__qscrollfire&&(destroy$3(t),t.__qscrollfire_destroyed=!0);const i={scrollTarget:getScrollTarget(t),scroll:debounce(()=>{let e,s;i.scrollTarget===window?(s=t.getBoundingClientRect().bottom,e=window.innerHeight):(s=offset(t).top+height(t),e=offset(i.scrollTarget).top+height(i.scrollTarget)),s>0&&s0&&t.split(":").forEach((t,i)=>{const s=parseInt(t,10);s&&(e[i]=s)}),{duration:e[0],touchSensitivity:e[1],mouseSensitivity:e[2]}}function destroy$1(t){const e=t.__qtouchhold;void 0!==e&&(cleanEvt(e,"main"),cleanEvt(e,"temp"),clearTimeout(e.timer),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchhold)}function configureEvents$1(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&cleanEvt(e,"main_mouse"),!0===i.mouse&&addEvt(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===client.has.touch&&e.modifiers.capture!==i.capture&&(cleanEvt(e,"main_touch"),addEvt(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","passiveCapture"]])),e.modifiers=i}var TouchHold={name:"touch-hold",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchhold&&(destroy$1(t),t.__qtouchhold_destroyed=!0);const o={handler:s,arg:i,modifiers:{capture:null},...parseArg$1(i),noop:noop,mouseStart(t){"function"==typeof o.handler&&!0===leftClick(t)&&(addEvt(o,"temp",[[document,"mousemove","move","passiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(t,!0))},touchStart(t){if(void 0!==t.target&&"function"==typeof o.handler){const e=t.target;addEvt(o,"temp",[[e,"touchmove","move","passiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(t,e){o.origin=position(t);const i=Date.now();!0===client.is.mobile&&(document.body.classList.add("non-selectable"),clearSelection(),o.styleCleanup=(t=>{o.styleCleanup=void 0;const e=()=>{document.body.classList.remove("non-selectable")};!0===t?(clearSelection(),setTimeout(e,10)):e()})),o.triggered=!1,o.sensitivity=!0===e?o.mouseSensitivity:o.touchSensitivity,o.timer=setTimeout(()=>{clearSelection(),o.triggered=!0,o.handler({evt:t,touch:!0!==e,mouse:!0===e,position:o.origin,duration:Date.now()-i})},o.duration)},move(t){const{top:e,left:i}=position(t);(Math.abs(i-o.origin.left)>=o.sensitivity||Math.abs(e-o.origin.top)>=o.sensitivity)&&clearTimeout(o.timer)},end(t){cleanEvt(o,"temp"),void 0!==o.styleCleanup&&o.styleCleanup(o.triggered),!0===o.triggered?void 0!==t&&stopAndPrevent(t):clearTimeout(o.timer)}};t.__qtouchhold=o,configureEvents$1(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchhold;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&Object.assign(n,parseArg$1(i)),!0!==isDeepEqual(n.modifiers,e)&&configureEvents$1(t,n,e))},unbind(t){void 0===t.__qtouchhold_destroyed?destroy$1(t):delete t.__qtouchhold_destroyed}};const keyCodes={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},keyRegex=new RegExp(`^([\\d+]+|${Object.keys(keyCodes).join("|")})$`,"i");function shouldEnd(t,e){const{top:i,left:s}=position(t);return Math.abs(s-e.left)>=7||Math.abs(i-e.top)>=7}function parseArg(t){const e="string"==typeof t&&t.length>0?t.split(":").map(t=>parseInt(t,10)):[0,600,300];return{durations:e,durationsLast:e.length-1}}function destroy(t){const e=t.__qtouchrepeat;void 0!==e&&(clearTimeout(e.timer),cleanEvt(e,"main_mouse"),cleanEvt(e,"main_touch"),cleanEvt(e,"main_kbd"),cleanEvt(e,"temp"),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchrepeat)}function configureEvents(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&cleanEvt(e,"main_mouse"),!0===i.mouse&&addEvt(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===client.has.touch&&e.modifiers.capture!==i.capture&&(cleanEvt(e,"main_touch"),addEvt(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","passiveCapture"]]));const s=Object.keys(i).reduce((t,e)=>{if(!0===keyRegex.test(e)){const i=isNaN(parseInt(e,10))?keyCodes[e.toLowerCase()]:parseInt(e,10);i>=0&&t.push(i)}return t},[]);e.keyboard.length>0==s.length>0&&e.modifiers.keyCapture===i.keyCapture&&e.modifiers.keycapture===i.keycapture||(e.keyboard.length>0&&cleanEvt(e,"main_kbd"),s.length>0&&addEvt(e,"main_kbd",[[t,"keydown","keyboardStart",`notPassive${!0===i.keyCapture||!0===i.keycapture?"Capture":""}`]])),e.modifiers=i,e.keyboard=s}var TouchRepeat={name:"touch-repeat",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchrepeat&&(destroy(t),t.__qtouchrepeat_destroyed=!0);const o={keyboard:[],handler:s,arg:i,modifiers:{capture:null},...parseArg(i),noop:noop,mouseStart(t){void 0===o.event&&"function"==typeof o.handler&&!0===leftClick(t)&&(addEvt(o,"temp",[[document,"mousemove","move","passiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(t,!0))},keyboardStart(e){if("function"==typeof o.handler&&!0===isKeyCode(e,o.keyboard)){if((0===o.durations[0]||void 0!==o.event)&&(stopAndPrevent(e),t.focus(),void 0!==o.event))return;addEvt(o,"temp",[[document,"keyup","end","notPassiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(e,!1,!0)}},touchStart(t){if(void 0!==t.target&&"function"==typeof o.handler){const e=t.target;addEvt(o,"temp",[[e,"touchmove","move","passiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(t,e,i){function s(t){o.styleCleanup=void 0,document.documentElement.style.cursor="";const e=()=>{document.body.classList.remove("non-selectable")};!0===t?(clearSelection(),setTimeout(e,10)):e()}!0!==i&&(o.origin=position(t)),!0===client.is.mobile&&(document.body.classList.add("non-selectable"),clearSelection(),o.styleCleanup=s),o.event={touch:!0!==e&&!0!==i,mouse:!0===e,keyboard:!0===i,startTime:Date.now(),repeatCount:0};const n=()=>{if(void 0===o.event)return;0===o.event.repeatCount&&(o.event.evt=t,!0===i?o.event.keyCode=t.keyCode:o.event.position=position(t),!0!==client.is.mobile&&(document.documentElement.style.cursor="pointer",document.body.classList.add("non-selectable"),clearSelection(),o.styleCleanup=s)),o.event.duration=Date.now()-o.event.startTime,o.event.repeatCount+=1,o.handler(o.event);const e=o.durationsLast0&&stopAndPrevent(t),cleanEvt(o,"temp"),clearTimeout(o.timer),o.event=void 0)}};t.__qtouchrepeat=o,configureEvents(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchrepeat;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&Object.assign(n,parseArg(i)),!0!==isDeepEqual(n.modifiers,e)&&configureEvents(t,n,e))},unbind(t){void 0===t.__qtouchrepeat_destroyed?destroy(t):delete t.__qtouchrepeat_destroyed}},directives=Object.freeze({__proto__:null,ClosePopup:ClosePopup,GoBack:GoBack,Intersection:Intersection,KeyGroupNavigation:KeyGroupNavigation,Morph:Morph,Mutation:Mutation,Ripple:Ripple,ScrollFire:ScrollFire,Scroll:Scroll,TouchHold:TouchHold,TouchPan:TouchPan,TouchRepeat:TouchRepeat,TouchSwipe:TouchSwipe});let metaValue;function getProp(){return Platform.is.winphone?"msapplication-navbutton-color":Platform.is.safari?"apple-mobile-web-app-status-bar-style":"theme-color"}function getMetaTag(t){const e=document.getElementsByTagName("META");for(const i in e)if(e[i].name===t)return e[i]}function setColor(t){void 0===metaValue&&(metaValue=getProp());let e=getMetaTag(metaValue);const i=void 0===e;i&&(e=document.createElement("meta")).setAttribute("name",metaValue),e.setAttribute("content",t),i&&document.head.appendChild(e)}var AddressbarColor={install({$q:t,cfg:e}){this.set=!1!==isSSR||!0!==Platform.is.mobile||!0!==Platform.is.nativeMobile&&!0!==Platform.is.winphone&&!0!==Platform.is.safari&&!0!==Platform.is.webkit&&!0!==Platform.is.vivaldi?noop:t=>{const e=t||getBrand("primary");!0===Platform.is.nativeMobile&&window.StatusBar?window.StatusBar.backgroundColorByHexString(e):setColor(e)},t.addressbarColor=this,e.addressbarColor&&this.set(e.addressbarColor)}};const prefixes={};function promisify(t,e){try{const i=t[e]();return void 0===i?Promise.resolve():i}catch(t){return Promise.reject(t)}}function checkActive(t){t.activeEl=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement||null,t.isActive=null!==t.activeEl}var AppFullscreen={isCapable:!1,isActive:!1,activeEl:null,request(t){if(!0===this.isCapable){const e=t||document.documentElement;if(e!==this.activeEl){return(!0===client.is.ie&&null!==this.activeEl&&e.contains(this.activeEl)?this.exit():Promise.resolve()).then(()=>promisify(e,prefixes.request)).catch(t=>null!==this.activeEl?this.exit().then(()=>promisify(e,prefixes.request)):Promise.reject(t)).then(t=>(checkActive(this),t))}}return this.__getErr()},exit(){return!0===this.isCapable&&!0===this.isActive?promisify(document,prefixes.exit).then(t=>(checkActive(this),this.isActive?this.exit():t)):this.__getErr()},toggle(t){const e=t||document.documentElement;return this.activeEl===e?this.exit():this.request(e)},install({$q:t}){t.fullscreen=this,this.__getErr=(()=>Promise.resolve()),!0!==isSSR&&(prefixes.request=["requestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitRequestFullscreen"].find(t=>void 0!==document.documentElement[t]),this.isCapable=void 0!==prefixes.request,!1!==this.isCapable?(prefixes.exit=["exitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen"].find(t=>document[t]),checkActive(this),["onfullscreenchange","onmsfullscreenchange","onwebkitfullscreenchange"].forEach(t=>{document[t]=(()=>{checkActive(this)})}),Vue.util.defineReactive(this,"isActive",this.isActive),Vue.util.defineReactive(this,"activeEl",this.activeEl)):this.__getErr=(()=>Promise.reject("Not capable")))}},AppVisibility={appVisible:!1,install({$q:t}){if(!0===isSSR)return void(this.appVisible=t.appVisible=!0);let e,i;void 0!==document.hidden?(e="hidden",i="visibilitychange"):void 0!==document.msHidden?(e="msHidden",i="msvisibilitychange"):void 0!==document.webkitHidden&&(e="webkitHidden",i="webkitvisibilitychange");const s=()=>{this.appVisible=t.appVisible=!document[e]};s(),i&&void 0!==document[e]&&(Vue.util.defineReactive(t,"appVisible",this.appVisible),document.addEventListener(i,s,!1))}};const optsGrid={staticClass:"row items-stretch justify-start",attrs:{role:"list"}},optsList={attrs:{role:"list"}},attrsGridItem={tabindex:0,role:"listitem"};var BottomSheet$1=Vue.extend({name:"BottomSheetPlugin",mixins:[DarkMixin,AttrsMixin],inheritAttrs:!1,props:{title:String,message:String,actions:Array,grid:Boolean,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},computed:{dialogProps(){return{...this.qAttrs,position:"bottom"}}},methods:{show(){this.$refs.dialog.show()},hide(){this.$refs.dialog.hide()},onOk(t){this.$emit("ok",t),this.hide()},__getGrid(t){return this.actions.map(e=>{const i=e.avatar||e.img;return void 0===e.label?t(QSeparator,{staticClass:"col-all",props:{dark:this.dark}}):t("div",{staticClass:"q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position",class:e.classes,attrs:attrsGridItem,on:{click:()=>this.onOk(e),keyup:t=>{13===t.keyCode&&this.onOk(e)}}},[t("div",{staticClass:"q-focus-helper"}),e.icon?t(QIcon,{props:{name:e.icon,color:e.color}}):i?t("img",{attrs:{src:i},staticClass:e.avatar?"q-bottom-sheet__avatar":null}):t("div",{staticClass:"q-bottom-sheet__empty-icon"}),t("div",[e.label])])})},__getList(t){return this.actions.map(e=>{const i=e.avatar||e.img;return void 0===e.label?t(QSeparator,{props:{spaced:!0,dark:this.dark}}):t(QItem,{staticClass:"q-bottom-sheet__item",class:e.classes,props:{tabindex:0,clickable:!0,dark:this.dark},on:{click:()=>this.onOk(e),keyup:t=>{13===t.keyCode&&this.onOk(e)}}},[t(QItemSection,{props:{avatar:!0}},[e.icon?t(QIcon,{props:{name:e.icon,color:e.color}}):i?t("img",{attrs:{src:i},staticClass:e.avatar?"q-bottom-sheet__avatar":null}):null]),t(QItemSection,[e.label])])})}},render(t){const e=[];return this.title&&e.push(t(QCardSection,{staticClass:"q-dialog__title"},[this.title])),this.message&&e.push(t(QCardSection,{staticClass:"q-dialog__message"},[this.message])),e.push(!0===this.grid?t("div",optsGrid,this.__getGrid(t)):t("div",optsList,this.__getList(t))),t(QDialog,{key:"dialog",ref:"dialog",props:this.dialogProps,on:cache(this,"hide",{hide:()=>{this.$emit("hide")}})},[t(QCard,{staticClass:`q-bottom-sheet q-bottom-sheet--${!0===this.grid?"grid":"list"}`+` q-bottom-sheet--${this.darkSuffix} q-${this.darkSuffix}`,style:this.cardStyle,class:this.cardClass},e)])}});const ssrAPI={onOk:()=>ssrAPI,okCancel:()=>ssrAPI,hide:()=>ssrAPI,update:()=>ssrAPI};function merge(t,e){for(const i in e)"spinner"!==i&&Object(e[i])===e[i]?(t[i]=Object(t[i])!==t[i]?{}:{...t[i]},merge(t[i],e[i])):t[i]=e[i]}let appRoot;function getDialogParent(t,e){if(void 0!==t)return t;if(void 0!==e)return e;if(void 0===appRoot){const t=document.getElementById("q-app");t&&t.__vue__&&(appRoot=t.__vue__.$root)}return appRoot}function globalDialog(t){return({className:e,class:i,style:s,component:o,root:n,parent:r,...a})=>{if(!0===isSSR)return ssrAPI;void 0!==i&&(a.cardClass=i),void 0!==s&&(a.cardStyle=s);const l=void 0!==o;let h,c;!0===l?h=o:(h=t,c=a);const d=[],u=[],p={onOk:t=>(d.push(t),p),onCancel:t=>(u.push(t),p),onDismiss:t=>(d.push(t),u.push(t),p),hide:()=>(v.$refs.dialog.hide(),p),update:({className:t,class:e,style:i,component:s,root:o,parent:n,...r})=>(null!==v&&(void 0!==e&&(r.cardClass=e),void 0!==i&&(r.cardStyle=i),!0===l?Object.assign(a,r):(merge(a,r),c={...a}),v.$forceUpdate()),p)},m=document.createElement("div");getPortalsContainer(document.body).appendChild(m);let g=!1;const f={ok:t=>{g=!0,d.forEach(e=>{e(t)})},hide:()=>{v.$destroy(),v.$el.remove(),v=null,!0!==g&&u.forEach(t=>{t()})}};let v=new Vue({name:"QGlobalDialog",el:m,parent:getDialogParent(r,n),render:t=>t(h,{ref:"dialog",props:a,attrs:c,on:f}),mounted(){void 0!==this.$refs.dialog?this.$refs.dialog.show():f["hook:mounted"]=(()=>{void 0!==this.$refs.dialog&&this.$refs.dialog.show()})}});return p}}var BottomSheet={install({$q:t}){this.create=t.bottomSheet=globalDialog(BottomSheet$1)}};function encode$1(t){return encodeURIComponent(t)}function decode$1(t){return decodeURIComponent(t)}function stringifyCookieValue(t){return encode$1("string"==typeof t&&"j:"!==t.slice(0,2)?t:"j:"+JSON.stringify(t))}function read(t,e){if(""===t)return t;if(0===t.indexOf('"')&&(t=t.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")),"j:"===(t=decode$1(t.replace(/\+/g," "))).slice(0,2))try{return JSON.parse(t.slice(2),e)}catch(t){}try{const i=JSON.parse(t,e);return void 0!==e||i===Object(i)||!0===Array.isArray(i)?i:t}catch(e){return t}}function getString(t){const e=new Date;return e.setMilliseconds(e.getMilliseconds()+t),e.toUTCString()}function parseExpireString(t){let e=0;const i=t.match(/(\d+)d/),s=t.match(/(\d+)h/),o=t.match(/(\d+)m/),n=t.match(/(\d+)s/);return i&&(e+=864e5*i[1]),s&&(e+=36e5*s[1]),o&&(e+=6e4*o[1]),n&&(e+=1e3*n[1]),0===e?t:getString(e)}function set(t,e,i={},s){let o,n;void 0!==i.expires&&("[object Date]"===Object.prototype.toString.call(i.expires)?o=i.expires.toUTCString():"string"==typeof i.expires?o=parseExpireString(i.expires):(n=parseFloat(i.expires),o=!1===isNaN(n)?getString(864e5*n):i.expires));const r=`${encode$1(t)}=${stringifyCookieValue(e)}`,a=[r,void 0!==o?"; Expires="+o:"",i.path?"; Path="+i.path:"",i.domain?"; Domain="+i.domain:"",i.sameSite?"; SameSite="+i.sameSite:"",i.httpOnly?"; HttpOnly":"",i.secure?"; Secure":"",i.other?"; "+i.other:""].join("");if(s){s.req.qCookies?s.req.qCookies.push(a):s.req.qCookies=[a],s.res.setHeader("Set-Cookie",s.req.qCookies);let e=s.req.headers.cookie||"";if(void 0!==o&&n<0){const i=get(t,s,void 0,!0);if(void 0!==i){const s=`${encode$1(t)}=${stringifyCookieValue(i)}`;e=e.replace(`${s}; `,"").replace(`; ${s}`,"").replace(`${s}`,"")}}else e=e?`${r}; ${e}`:a;s.req.headers.cookie=e}else document.cookie=a}function get(t,e,i,s){const o=e?e.req.headers:document,n=o.cookie?o.cookie.split("; "):[],r=n.length;let a,l,h,c=t?null:{},d=0;for(;dget(e,t,i),set:(e,i,s)=>set(e,i,s,t),has:(e,i)=>has(e,t,i),remove:(e,i)=>remove(e,i,t),getAll:e=>get(null,t,e)}}var Cookies={parseSSR(t){return void 0!==t?getObject(t):this},install({$q:t,queues:e}){!0===isSSR?e.server.push((t,e)=>{t.cookies=getObject(e.ssr)}):(Object.assign(this,getObject()),t.cookies=this)}},DialogPlugin=Vue.extend({name:"DialogPlugin",mixins:[DarkMixin,AttrsMixin],inheritAttrs:!1,props:{title:String,message:String,prompt:Object,options:Object,progress:[Boolean,Object],html:Boolean,ok:{type:[String,Object,Boolean],default:!0},cancel:[String,Object,Boolean],focus:{type:String,default:"ok",validator:t=>["ok","cancel","none"].includes(t)},stackButtons:Boolean,color:String,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},computed:{classes(){return"q-dialog-plugin"+` q-dialog-plugin--${this.darkSuffix} q-${this.darkSuffix}`+(!1!==this.progress?" q-dialog-plugin--progress":"")},spinner(){if(!1!==this.progress)return!0===isObject(this.progress)?{component:this.progress.spinner||QSpinner,props:{color:this.progress.color||this.vmColor}}:{component:QSpinner,props:{color:this.vmColor}}},hasForm(){return void 0!==this.prompt||void 0!==this.options},okLabel(){return!0===isObject(this.ok)?this.$q.lang.label.ok:!0===this.ok?this.$q.lang.label.ok:this.ok},cancelLabel(){return!0===isObject(this.cancel)?this.$q.lang.label.cancel:!0===this.cancel?this.$q.lang.label.cancel:this.cancel},vmColor(){return this.color||`dialog-plugin-${this.darkSuffix}`},okDisabled(){return void 0!==this.prompt?void 0!==this.prompt.isValid&&!0!==this.prompt.isValid(this.prompt.model):void 0!==this.options?void 0!==this.options.isValid&&!0!==this.options.isValid(this.options.model):void 0},okProps(){return{color:this.vmColor,label:this.okLabel,ripple:!1,disable:this.okDisabled,...!0===isObject(this.ok)?this.ok:{flat:!0}}},cancelProps(){return{color:this.vmColor,label:this.cancelLabel,ripple:!1,...!0===isObject(this.cancel)?this.cancel:{flat:!0}}}},methods:{show(){this.$refs.dialog.show()},hide(){this.$refs.dialog.hide()},getPrompt(t){return[t(QInput,{key:"prompt",props:{value:this.prompt.model,type:this.prompt.type,label:this.prompt.label,stackLabel:this.prompt.stackLabel,outlined:this.prompt.outlined,filled:this.prompt.filled,standout:this.prompt.standout,rounded:this.prompt.rounded,square:this.prompt.square,counter:this.prompt.counter,maxlength:this.prompt.maxlength,prefix:this.prompt.prefix,suffix:this.prompt.suffix,color:this.vmColor,dense:!0,autofocus:!0,dark:this.dark},attrs:this.prompt.attrs,on:cache(this,"prompt",{input:t=>{this.prompt.model=t},keyup:t=>{!0!==this.okDisabled&&"textarea"!==this.prompt.type&&!0===isKeyCode(t,13)&&this.onOk()}})})]},getOptions(t){return[t(QOptionGroup,{key:"opts",props:{value:this.options.model,type:this.options.type,color:this.vmColor,inline:this.options.inline,options:this.options.items,dark:this.dark},on:cache(this,"opts",{input:t=>{this.options.model=t}})})]},getButtons(t){const e=[];if(this.cancel&&e.push(t(QBtn,{key:"cancel",props:this.cancelProps,attrs:{"data-autofocus":"cancel"===this.focus&&!0!==this.hasForm},on:cache(this,"cancel",{click:this.onCancel})})),this.ok&&e.push(t(QBtn,{key:"ok",props:this.okProps,attrs:{"data-autofocus":"ok"===this.focus&&!0!==this.hasForm},on:cache(this,"ok",{click:this.onOk})})),e.length>0)return t(QCardActions,{staticClass:!0===this.stackButtons?"items-end":null,props:{vertical:this.stackButtons,align:"right"}},e)},onOk(){this.$emit("ok",cloneDeep(this.getData())),this.hide()},onCancel(){this.hide()},getData(){return void 0!==this.prompt?this.prompt.model:void 0!==this.options?this.options.model:void 0},getSection(t,e,i){return!0===this.html?t(QCardSection,{staticClass:e,domProps:{innerHTML:i}}):t(QCardSection,{staticClass:e},[i])}},render(t){const e=[];return this.title&&e.push(this.getSection(t,"q-dialog__title",this.title)),!1!==this.progress&&e.push(t(QCardSection,{staticClass:"q-dialog__progress"},[t(this.spinner.component,{props:this.spinner.props})])),this.message&&e.push(this.getSection(t,"q-dialog__message",this.message)),void 0!==this.prompt?e.push(t(QCardSection,{staticClass:"scroll q-dialog-plugin__form"},this.getPrompt(t))):void 0!==this.options&&e.push(t(QSeparator,{props:{dark:this.dark}}),t(QCardSection,{staticClass:"scroll q-dialog-plugin__form"},this.getOptions(t)),t(QSeparator,{props:{dark:this.dark}})),(this.ok||this.cancel)&&e.push(this.getButtons(t)),t(QDialog,{key:"dialog",ref:"dialog",props:{...this.qAttrs,value:this.value},on:cache(this,"hide",{hide:()=>{this.$emit("hide")}})},[t(QCard,{staticClass:this.classes,style:this.cardStyle,class:this.cardClass,props:{dark:this.dark}},e)])}}),Dialog={install({$q:t}){this.create=t.dialog=globalDialog(DialogPlugin)}},LoadingBar={isActive:!1,start:noop,stop:noop,increment:noop,setDefaults:noop,install({$q:t,cfg:e}){if(t.loadingBar=this,!0===isSSR)return;const i=void 0!==e.loadingBar?{...e.loadingBar}:{},s={start:()=>{this.isActive=!0},stop:()=>{this.isActive=!1}},o=new Vue({name:"LoadingBar",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},render:t=>t(QAjaxBar,{ref:"bar",props:i,on:s})}).$mount().$refs.bar;Object.assign(this,{start:o.start,stop:o.stop,increment:o.increment,setDefaults:t=>{!0===isObject(t)&&Object.assign(i,t),o.$parent.$forceUpdate()}}),Vue.util.defineReactive(this,"isActive",this.isActive),Vue.util.defineReactive(o,"isActive",this.isActive),o.setDefaults=this.setDefaults,document.body.appendChild(o.$parent.$el)}};let vm$1,timeout,uid$1=0,props={},activeGroups={};const originalDefaults={group:"__default_quasar_group__",delay:0,message:!1,spinnerSize:80,spinnerColor:"white",messageColor:"white",backgroundColor:"black",spinner:QSpinner,customClass:""},defaults$1={...originalDefaults};function registerProps(t){if(t&&void 0!==t.group&&void 0!==activeGroups[t.group])return Object.assign(activeGroups[t.group],t);const e=!0===isObject(t)&&!0===t.ignoreDefaults?{...originalDefaults,...t}:{...defaults$1,...t};return activeGroups[e.group]=e,e}const Loading={isActive:!1,show(t){if(!0===isSSR)return;props=registerProps(t);const{group:e}=props;return props.customClass+=` text-${props.backgroundColor}`,this.isActive=!0,void 0!==vm$1?(props.uid=uid$1,vm$1.$forceUpdate()):(props.uid=++uid$1,clearTimeout(timeout),timeout=setTimeout(()=>{timeout=void 0;const t=document.createElement("div");document.body.appendChild(t),vm$1=new Vue({name:"QLoading",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},el:t,mounted(){preventScroll(!0)},render:t=>t("transition",{key:"tr",props:{name:"q-transition--fade",appear:!0},on:cache(this,"tr",{"after-leave":()=>{!0!==this.isActive&&void 0!==vm$1&&(preventScroll(!1),vm$1.$destroy(),vm$1.$el.remove(),vm$1=void 0)}})},[!0===this.isActive?t("div",{staticClass:"q-loading fullscreen column flex-center z-max",key:props.uid,class:props.customClass.trim()},[t(props.spinner,{props:{color:props.spinnerColor,size:props.spinnerSize}}),props.message&&t("div",{class:`text-${props.messageColor}`,domProps:{[!0===props.sanitize?"textContent":"innerHTML"]:props.message}})||void 0]):null])})},props.delay)),t=>{void 0!==t&&Object(t)===t?this.show({...t,group:e}):this.hide(e)}},hide(t){if(!0===this.isActive){if(void 0===t)activeGroups={};else{if(void 0===activeGroups[t])return;{delete activeGroups[t];const e=Object.keys(activeGroups);if(0!==e.length){const t=e[e.length-1];return void this.show({group:t})}}}void 0!==timeout&&(clearTimeout(timeout),timeout=void 0),this.isActive=!1}},setDefaults(t){!0===isObject(t)&&Object.assign(defaults$1,t)},install({$q:t,cfg:{loading:e}}){this.setDefaults(e),t.loading=this}};let updateId,ssrTakeover;function normalize(t){t.title&&(t.title=t.titleTemplate?t.titleTemplate(t.title):t.title,delete t.titleTemplate),[["meta","content"],["link","href"]].forEach(e=>{const i=t[e[0]],s=e[1];for(const t in i){const e=i[t];e.template&&(1===Object.keys(e).length?delete i[t]:(e[s]=e.template(e[s]||""),delete e.template))}})}function changed(t,e){if(Object.keys(t).length!==Object.keys(e).length)return!0;for(const i in t)if(t[i]!==e[i])return!0}function bodyFilter(t){return!1===["class","style"].includes(t)}function htmlFilter(t){return!1===["lang","dir"].includes(t)}function diff(t,e){const i={},s={};return void 0===t?{add:e,remove:s}:(t.title!==e.title&&(i.title=e.title),["meta","link","script","htmlAttr","bodyAttr"].forEach(o=>{const n=t[o],r=e[o];if(s[o]=[],void 0!==n&&null!==n){i[o]={};for(const t in n)!1===r.hasOwnProperty(t)&&s[o].push(t);for(const t in r)!1===n.hasOwnProperty(t)?i[o][t]=r[t]:!0===changed(n[t],r[t])&&(s[o].push(t),i[o][t]=r[t])}else i[o]=r}),{add:i,remove:s})}function apply({add:t,remove:e}){t.title&&(document.title=t.title),Object.keys(e).length>0&&(["meta","link","script"].forEach(t=>{e[t].forEach(e=>{document.head.querySelector(`${t}[data-qmeta="${e}"]`).remove()})}),e.htmlAttr.filter(htmlFilter).forEach(t=>{document.documentElement.removeAttribute(t)}),e.bodyAttr.filter(bodyFilter).forEach(t=>{document.body.removeAttribute(t)})),["meta","link","script"].forEach(e=>{const i=t[e];for(const t in i){const s=document.createElement(e);for(const e in i[t])"innerHTML"!==e&&s.setAttribute(e,i[t][e]);s.setAttribute("data-qmeta",t),"script"===e&&(s.innerHTML=i[t].innerHTML||""),document.head.appendChild(s)}}),Object.keys(t.htmlAttr).filter(htmlFilter).forEach(e=>{document.documentElement.setAttribute(e,t.htmlAttr[e]||"")}),Object.keys(t.bodyAttr).filter(bodyFilter).forEach(e=>{document.body.setAttribute(e,t.bodyAttr[e]||"")})}function parseMeta(t,e){!0!==t._inactive&&(!0===hasMeta(t)&&(extend(!0,e,t.__qMeta),!0===t.$options.meta.stopPropagation)||t.$children.forEach(t=>{parseMeta(t,e)}))}function updateClient(){!0===ssrTakeover&&(ssrTakeover=!1,this.$root.__currentMeta=window.__Q_META__);const t={title:"",titleTemplate:null,meta:{},link:{},script:{},htmlAttr:{},bodyAttr:{}};parseMeta(this.$root,t),normalize(t),apply(diff(this.$root.__currentMeta,t)),this.$root.__currentMeta=t}function getAttr(t){return e=>{const i=t[e];return e+(!0!==i&&void 0!==i?`="${i}"`:"")}}function getHead(t){let e="";return t.title&&(e+=`${t.title}`),["meta","link","script"].forEach(i=>{const s=t[i];for(const t in s){const o=Object.keys(s[t]).filter(t=>"innerHTML"!==t).map(getAttr(s[t]));e+=`<${i} ${o.join(" ")} data-qmeta="${t}">`,"script"===i&&(e+=`${s[t].innerHTML||""}<\/script>`)}}),e}function getServerMeta(t,e,i){const s={title:"",titleTemplate:null,meta:{},link:{},htmlAttr:{},bodyAttr:{},noscript:{}};parseMeta(t,s),normalize(s);const o=void 0!==i&&void 0!==i.nonce?` nonce="${i.nonce}"`:"",n={"%%Q_HTML_ATTRS%%":Object.keys(s.htmlAttr).filter(htmlFilter).map(getAttr(s.htmlAttr)).join(" "),"%%Q_HEAD_TAGS%%":getHead(s),"%%Q_BODY_ATTRS%%":Object.keys(s.bodyAttr).filter(bodyFilter).map(getAttr(s.bodyAttr)).join(" "),"%%Q_BODY_TAGS%%":Object.keys(s.noscript).map(t=>``).join("")+`window.__Q_META__=${delete s.noscript&&JSON.stringify(s)}<\/script>`};return Object.keys(n).forEach(t=>{e=e.replace(t,n[t])}),e}function beforeCreate(){"function"==typeof this.$options.meta?(void 0===this.$options.computed&&(this.$options.computed={}),this.$options.computed.__qMeta=this.$options.meta):!0===hasMeta(this)&&(this.__qMeta=this.$options.meta)}function hasMeta(t){return void 0!==t.$options.meta&&null!==t.$options.meta}function triggerMeta(){!0===hasMeta(this)&&this.__qMetaUpdate()}!1===isSSR&&Vue.util.defineReactive(Loading,"isActive",Loading.isActive);var Meta={install({queues:t}){!0===isSSR?(Vue.prototype.$getMetaHTML=(t=>(e,i)=>getServerMeta(t,e,i)),Vue.mixin({beforeCreate:beforeCreate}),t.server.push((t,e)=>{e.ssr.Q_HTML_ATTRS+=" %%Q_HTML_ATTRS%%",Object.assign(e.ssr,{Q_HEAD_TAGS:"%%Q_HEAD_TAGS%%",Q_BODY_ATTRS:"%%Q_BODY_ATTRS%%",Q_BODY_TAGS:"%%Q_BODY_TAGS%%"})})):(ssrTakeover=fromSSR,Vue.mixin({beforeCreate:beforeCreate,created(){!0===hasMeta(this)&&(this.__qMetaUnwatch=this.$watch("__qMeta",this.__qMetaUpdate))},activated:triggerMeta,deactivated:triggerMeta,beforeMount:triggerMeta,destroyed(){!0===hasMeta(this)&&(this.__qMetaUnwatch(),this.__qMetaUpdate())},methods:{__qMetaUpdate(){clearTimeout(updateId),updateId=setTimeout(updateClient.bind(this),50)}}}))}};let vm,uid=0;const defaults={},groups={},notificationsList={},positionClass={},emptyRE=/^\s*$/,positionList=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],badgePositions=["top-left","top-right","bottom-left","bottom-right"],notifTypes={positive:{icon:t=>t.iconSet.type.positive,color:"positive"},negative:{icon:t=>t.iconSet.type.negative,color:"negative"},warning:{icon:t=>t.iconSet.type.warning,color:"warning",textColor:"dark"},info:{icon:t=>t.iconSet.type.info,color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function addNotification(t,e,i){if(!t)return logError("parameter required");let s;const o={textColor:"white"};if(!0!==t.ignoreDefaults&&Object.assign(o,defaults),!1===isObject(t)&&(o.type&&Object.assign(o,notifTypes[o.type]),t={message:t}),Object.assign(o,notifTypes[t.type||o.type],t),"function"==typeof o.icon&&(o.icon=o.icon(e.$q)),o.spinner?!0===o.spinner&&(o.spinner=QSpinner):o.spinner=!1,o.meta={hasMedia:Boolean(!1!==o.spinner||o.icon||o.avatar),hasText:hasContent(o.message)||hasContent(o.caption)},o.position){if(!1===positionList.includes(o.position))return logError("wrong position",t)}else o.position="bottom";if(void 0===o.timeout)o.timeout=5e3;else{const e=parseInt(o.timeout,10);if(isNaN(e)||e<0)return logError("wrong timeout",t);o.timeout=e}0===o.timeout?o.progress=!1:!0===o.progress&&(o.meta.progressClass="q-notification__progress"+(o.progressClass?` ${o.progressClass}`:""),o.meta.progressStyle={animationDuration:`${o.timeout+1e3}ms`});const n=(!0===Array.isArray(t.actions)?t.actions:[]).concat(!0!==t.ignoreDefaults&&!0===Array.isArray(defaults.actions)?defaults.actions:[]).concat(void 0!==notifTypes[t.type]&&!0===Array.isArray(notifTypes[t.type].actions)?notifTypes[t.type].actions:[]),{closeBtn:r}=o;if(r&&n.push({label:"string"==typeof r?r:e.$q.lang.label.close}),o.actions=n.map(({handler:t,noDismiss:e,style:i,class:s,attrs:o,...n})=>({staticClass:s,style:i,props:{flat:!0,...n},attrs:o,on:{click:"function"==typeof t?()=>{t(),!0!==e&&a()}:()=>{a()}}})),void 0===o.multiLine&&(o.multiLine=o.actions.length>1),Object.assign(o.meta,{staticClass:"q-notification row items-stretch"+` q-notification--${!0===o.multiLine?"multi-line":"standard"}`+(void 0!==o.color?` bg-${o.color}`:"")+(void 0!==o.textColor?` text-${o.textColor}`:"")+(void 0!==o.classes?` ${o.classes}`:""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(!0===o.multiLine?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(!0===o.multiLine?"":" col"),leftClass:!0===o.meta.hasText?"additional":"single",attrs:{role:"alert",...o.attrs}}),!1===o.group?(o.group=void 0,o.meta.group=void 0):(void 0!==o.group&&!0!==o.group||(o.group=[o.message,o.caption,o.multiline].concat(o.actions.map(({props:t})=>`${t.label}*${t.icon}`)).join("|")),o.meta.group=o.group+"|"+o.position),0===o.actions.length?o.actions=void 0:o.meta.actionsClass="q-notification__actions row items-center "+(!0===o.multiLine?"justify-end":"col-auto")+(!0===o.meta.hasMedia?" q-notification__actions--with-media":""),void 0!==i){clearTimeout(i.notif.meta.timer),o.meta.uid=i.notif.meta.uid;const t=notificationsList[o.position].indexOf(i.notif);notificationsList[o.position][t]=o}else{const e=groups[o.meta.group];if(void 0===e){if(o.meta.uid=uid++,o.meta.badge=1,-1!==["left","right","center"].indexOf(o.position))notificationsList[o.position].splice(Math.floor(notificationsList[o.position].length/2),0,o);else{const t=o.position.indexOf("top")>-1?"unshift":"push";notificationsList[o.position][t](o)}void 0!==o.group&&(groups[o.meta.group]=o)}else{if(clearTimeout(e.meta.timer),void 0!==o.badgePosition){if(!1===badgePositions.includes(o.badgePosition))return logError("wrong badgePosition",t)}else o.badgePosition=`top-${o.position.indexOf("left")>-1?"right":"left"}`;o.meta.uid=e.meta.uid,o.meta.badge=e.meta.badge+1,o.meta.badgeClass=`q-notification__badge q-notification__badge--${o.badgePosition}`+(void 0!==o.badgeColor?` bg-${o.badgeColor}`:"")+(void 0!==o.badgeTextColor?` text-${o.badgeTextColor}`:"")+(o.badgeClass?` ${o.badgeClass}`:"");const i=notificationsList[o.position].indexOf(e);notificationsList[o.position][i]=groups[o.meta.group]=o}}const a=()=>{removeNotification(o,e),s=void 0};return e.$forceUpdate(),o.timeout>0&&(o.meta.timer=setTimeout(()=>{a()},o.timeout+1e3)),void 0!==o.group?e=>{void 0!==e?logError("trying to update a grouped one which is forbidden",t):a()}:(s={dismiss:a,config:t,notif:o},void 0===i?t=>{if(void 0!==s)if(void 0===t)s.dismiss();else{addNotification(Object.assign({},s.config,t,{group:!1,position:o.position}),e,s)}}:void Object.assign(i,s))}function removeNotification(t,e){clearTimeout(t.meta.timer);const i=notificationsList[t.position].indexOf(t);if(-1!==i){void 0!==t.group&&delete groups[t.meta.group];const s=e.$refs[""+t.meta.uid];if(s){const{width:t,height:e}=getComputedStyle(s);s.style.left=`${s.offsetLeft}px`,s.style.width=t,s.style.height=e}notificationsList[t.position].splice(i,1),e.$forceUpdate(),"function"==typeof t.onDismiss&&t.onDismiss()}}function hasContent(t){return void 0!==t&&null!==t&&!0!==emptyRE.test(t)}function logError(t,e){return console.error(`Notify: ${t}`,e),!1}const Notifications={name:"QNotifications",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},render:t=>t("div",{staticClass:"q-notifications"},positionList.map(e=>t("transition-group",{key:e,staticClass:positionClass[e],tag:"div",props:{name:`q-notification--${e}`,mode:"out-in"}},notificationsList[e].map(e=>{const{meta:i}=e,s=[];if(!0===i.hasMedia&&(!1!==e.spinner?s.push(t(e.spinner,{staticClass:"q-notification__spinner q-notification__spinner--"+i.leftClass,props:{color:e.spinnerColor,size:e.spinnerSize}})):e.icon?s.push(t(QIcon,{staticClass:"q-notification__icon q-notification__icon--"+i.leftClass,attrs:{role:"img"},props:{name:e.icon,color:e.iconColor,size:e.iconSize}})):e.avatar&&s.push(t(QAvatar,{staticClass:"q-notification__avatar q-notification__avatar--"+i.leftClass},[t("img",{attrs:{src:e.avatar,"aria-hidden":"true"}})]))),!0===i.hasText){let i;const o={staticClass:"q-notification__message col"};if(!0===e.html)o.domProps={innerHTML:e.caption?`
${e.message}
${e.caption}
`:e.message};else{const s=[e.message];i=e.caption?[t("div",s),t("div",{staticClass:"q-notification__caption"},[e.caption])]:s}s.push(t("div",o,i))}const o=[t("div",{staticClass:i.contentClass},s)];return!0===e.progress&&o.push(t("div",{key:`${i.uid}|p|${i.badge}`,staticClass:i.progressClass,style:i.progressStyle})),void 0!==e.actions&&o.push(t("div",{staticClass:i.actionsClass},e.actions.map(e=>t(QBtn,{...e})))),i.badge>1&&o.push(t("div",{key:`${i.uid}|${i.badge}`,staticClass:i.badgeClass,style:e.badgeStyle},[i.badge])),t("div",{ref:""+i.uid,key:i.uid,staticClass:i.staticClass,attrs:i.attrs},[t("div",{staticClass:i.wrapperClass},o)])})))),mounted(){if(void 0!==this.$q.fullscreen&&!0===this.$q.fullscreen.isCapable){const t=()=>{const t=getBodyFullscreenElement(this.$q.fullscreen.activeEl);this.$el.parentElement!==t&&t.appendChild(this.$el)};this.unwatchFullscreen=this.$watch("$q.fullscreen.activeEl",debounce(t,50)),!0===this.$q.fullscreen.isActive&&t()}},beforeDestroy(){void 0!==this.unwatchFullscreen&&this.unwatchFullscreen()}};var Notify={setDefaults(t){!0!==isSSR&&!0===isObject(t)&&Object.assign(defaults,t)},registerType(t,e){!0!==isSSR&&!0===isObject(e)&&(notifTypes[t]=e)},install({$q:t}){if(t.notify=this.create=!0===isSSR?noop:t=>addNotification(t,vm),t.notify.setDefaults=this.setDefaults,t.notify.registerType=this.registerType,void 0!==t.config.notify&&this.setDefaults(t.config.notify),!0!==isSSR){positionList.forEach(t=>{notificationsList[t]=[];const e=!0===["left","center","right"].includes(t)?"center":t.indexOf("top")>-1?"top":"bottom",i=t.indexOf("left")>-1?"start":t.indexOf("right")>-1?"end":"center",s=["left","right"].includes(t)?`items-${"left"===t?"start":"end"} justify-center`:"center"===t?"flex-center":`items-${i}`;positionClass[t]=`q-notifications__list q-notifications__list--${e} fixed column no-wrap ${s}`});const t=document.createElement("div");document.body.appendChild(t),(vm=new Vue(Notifications)).$mount(t)}}};function encode(t){return!0===isDate(t)?"__q_date|"+t.toUTCString():!0===isRegexp(t)?"__q_expr|"+t.source:"number"==typeof t?"__q_numb|"+t:"boolean"==typeof t?"__q_bool|"+(t?"1":"0"):"string"==typeof t?"__q_strn|"+t:"function"==typeof t?"__q_strn|"+t.toString():t===Object(t)?"__q_objt|"+JSON.stringify(t):t}function decode(t,e){if(t.length<9)return t;const i=t.substr(0,8),s=t.substring(9);switch(i){case"__q_date":return new Date(s);case"__q_expr":return new RegExp(s);case"__q_numb":return Number(s);case"__q_bool":return Boolean("1"===s);case"__q_strn":return""+s;case"__q_objt":return JSON.parse(s,e);default:return t}}function getEmptyStorage(){const t=()=>null;return{has:()=>!1,getLength:()=>0,getItem:t,getIndex:t,getKey:t,getAll:()=>{},getAllKeys:()=>[],set:noop,remove:noop,clear:noop,isEmpty:()=>!0}}function getStorage(t){const e=window[t+"Storage"],i=(t,i)=>{const s=e.getItem(t);return s?decode(s,i):null};return{has:(t,i)=>null!==e.getItem(t,i),getLength:()=>e.length,getItem:i,getIndex:(t,s)=>tt{let s;const o={},n=e.length;for(let r=0;r{const t=[],i=e.length;for(let s=0;s{e.setItem(t,encode(i))},remove:t=>{e.removeItem(t)},clear:()=>{e.clear()},isEmpty:()=>0===e.length}}var LocalStorage={install({$q:t}){const e=!0===isSSR||!1===client.has.webStorage?getEmptyStorage():getStorage("local");t.localStorage=e,Object.assign(this,e)}},SessionStorage={install({$q:t}){const e=!0===isSSR||!1===client.has.webStorage?getEmptyStorage():getStorage("session");t.sessionStorage=e,Object.assign(this,e)}},plugins=Object.freeze({__proto__:null,AddressbarColor:AddressbarColor,AppFullscreen:AppFullscreen,AppVisibility:AppVisibility,BottomSheet:BottomSheet,Cookies:Cookies,Dark:Dark,Dialog:Dialog,Interaction:Interaction,LoadingBar:LoadingBar,Loading:Loading,Meta:Meta,Notify:Notify,Platform:Platform,Screen:Screen,LocalStorage:LocalStorage,SessionStorage:SessionStorage});function fallback(t){const e=document.createElement("textarea");e.value=t,e.contentEditable=!0,e.style.position="fixed",document.body.appendChild(e),e.focus(),e.select();const i=document.execCommand("copy");return e.remove(),i}function copyToClipboard(t){return void 0!==navigator.clipboard?navigator.clipboard.writeText(t):new Promise((e,i)=>{const s=fallback(t);s?e(!0):i(s)})}function debouncedRef(t,e,i=250){const s={get value(){const i=t[e];return i!==s.propValue&&(s.propValue=i,s.internalValue=i,void 0!==s.timer&&clearTimeout(s.timer),s.timer=void 0),s.internalValue},set value(o){s.internalValue!==o&&(s.internalValue=o,void 0!==s.timer&&clearTimeout(s.timer),s.timer=setTimeout(()=>{t[e]=o,s.timer=void 0},i))},destroy(){void 0!==s.timer&&(clearTimeout(s.timer),s.timer=void 0,t[e]=s.internalValue)}};return t.$once("hook:beforeDestroy",s.destroy),s.propValue=NaN,s.internalValue=NaN,s}function clean(t){setTimeout(()=>{window.URL.revokeObjectURL(t.href)},1e4),t.remove()}function exportFile(t,e,i){const s=new Blob([e],{type:i||"text/plain"});if(window.navigator.msSaveOrOpenBlob)return window.navigator.msSaveOrOpenBlob(s,t);const o=document.createElement("a");o.download=t,o.href=window.URL.createObjectURL(s),o.classList.add("hidden"),o.style.position="fixed",document.body.appendChild(o);try{return o.click(),clean(o),!0}catch(t){return clean(o),t}}function parseFeatures(t){const e=Object.assign({noopener:!0},t),i=[];return Object.keys(e).forEach(t=>{!0===e[t]&&i.push(t)}),i.join(",")}function openWindow(t,e,i){let s=window.open;if(!0===Platform.is.cordova){if(void 0!==cordova&&void 0!==cordova.InAppBrowser&&void 0!==cordova.InAppBrowser.open)s=cordova.InAppBrowser.open;else if(void 0!==navigator&&void 0!==navigator.app)return navigator.app.loadUrl(t,{openExternal:!0})}else if(void 0!==Vue.prototype.$q.electron)return Vue.prototype.$q.electron.shell.openExternal(t);const o=s(t,"_blank",parseFeatures(i));if(o)return Platform.is.desktop&&o.focus(),o;e&&e()}var openUrl=(t,e,i)=>{if(!0!==Platform.is.ios||void 0===window.SafariViewController)return openWindow(t,e,i);window.SafariViewController.isAvailable(s=>{s?window.SafariViewController.show({url:t},noop,e):openWindow(t,e,i)})};function parsePromises(t){const e=Array.isArray(t);if(!0===e){const i=t.length;return{isList:e,totalJobs:i,resultAggregator:Array(i).fill(null)}}const i=Object.keys(t),s={};return i.forEach(t=>{s[t]=null}),{isList:e,totalJobs:i.length,resultAggregator:s,resultKeys:i}}function runSequentialPromises(t,{threadsNumber:e=1,abortOnFail:i=!0}={}){let s=-1,o=!1;const{isList:n,totalJobs:r,resultAggregator:a,resultKeys:l}=parsePromises(t),h=Array(e).fill((()=>new Promise((e,h)=>{!function c(){const d=++s;if(!0===o||d>=r)return void e();const u=!0===n?d:l[d];t[u](a).then(t=>{!0!==o?(a[u]={key:u,status:"fulfilled",value:t},setTimeout(c)):e()}).catch(t=>{if(!0===o)return void e();const s={key:u,status:"rejected",reason:t};if(a[u]=s,!0===i)return o=!0,void h({...s,resultAggregator:a});setTimeout(c)})}()}))());return Promise.all(h).then(()=>a)}var index_esm={...VuePlugin,install(t,e){VuePlugin.install(t,{components:components,directives:directives,plugins:plugins,...e})}};export{AddressbarColor,AppFullscreen,AppVisibility,BottomSheet,ClosePopup,Cookies,Dark,Dialog,GoBack,Interaction,Intersection,KeyGroupNavigation,Loading,LoadingBar,LocalStorage,Meta,Morph,Mutation,Notify,Platform,QAjaxBar,QAvatar,QBadge,QBanner,QBar,QBreadcrumbs,QBreadcrumbsEl,QBtn,QBtnDropdown,QBtnGroup,QBtnToggle,QCard,QCardActions,QCardSection,QCarousel,QCarouselControl,QCarouselSlide,QChatMessage,QCheckbox,QChip,QCircularProgress,QColor,QDate,QDialog,QDrawer,QEditor,QExpansionItem,QFab,QFabAction,QField,QFile,QFooter,QForm,QHeader,QIcon,QImg,QInfiniteScroll,QInnerLoading,QInput,QIntersection,QItem,QItemLabel,QItemSection,QKnob,QLayout,QLinearProgress,QList,QMarkupTable,QMenu,QNoSsr,QOptionGroup,QPage,QPageContainer,QPageScroller,QPageSticky,QPagination,QParallax,QPopupEdit,QPopupProxy,QPullToRefresh,QRadio,QRange,QRating,QResizeObserver,QResponsive,QRouteTab,QScrollArea,QScrollObserver,QSelect,QSeparator,QSkeleton,QSlideItem,QSlideTransition,QSlider,QSpace,QSpinner,QSpinnerAudio,QSpinnerBall,QSpinnerBars,QSpinnerBox,QSpinnerClock,QSpinnerComment,QSpinnerCube,QSpinnerDots,QSpinnerFacebook,QSpinnerGears,QSpinnerGrid,QSpinnerHearts,QSpinnerHourglass,QSpinnerInfinity,QSpinnerIos,QSpinnerOrbit,QSpinnerOval,QSpinnerPie,QSpinnerPuff,QSpinnerRadio,QSpinnerRings,QSpinnerTail,QSplitter,QStep,QStepper,QStepperNavigation,QTab,QTabPanel,QTabPanels,QTable,QTabs,QTd,QTh,QTime,QTimeline,QTimelineEntry,QToggle,QToolbar,QToolbarTitle,QTooltip,QTr,QTree,QUploader,QUploaderAddTrigger,QUploaderBase,QVideo,QVirtualScroll,Ripple,Screen,Scroll,ScrollFire,SessionStorage,TouchHold,TouchPan,TouchRepeat,TouchSwipe,cloneDeep as clone,colors,copyToClipboard,date,debounce,debouncedRef,index_esm as default,dom,event,exportFile,extend,format,frameDebounce,is,morph,noop,openUrl as openURL,patterns,runSequentialPromises,scroll,throttle,uid$3 as uid}; \ No newline at end of file diff --git a/dist/quasar.ie.polyfills.js b/dist/quasar.ie.polyfills.js new file mode 100644 index 00000000000..69ff1605779 --- /dev/null +++ b/dist/quasar.ie.polyfills.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +function objectOrFunction(e){var t=typeof e;return null!==e&&("object"===t||"function"===t)}function isFunction(e){return"function"==typeof e}"undefined"!=typeof window&&function(e){[Element.prototype,CharacterData.prototype,DocumentType.prototype].forEach(function(e){e.hasOwnProperty("remove")||Object.defineProperty(e,"remove",{configurable:!0,enumerable:!0,writable:!0,value:function(){null!==this.parentNode&&this.parentNode.removeChild(this)}})});try{new MouseEvent("test")}catch(r){var t=function(t,r){r=r||{bubbles:!1,cancelable:!1};var n=document.createEvent("MouseEvent");return n.initMouseEvent(t,r.bubbles,r.cancelable,e,0,r.screenX||0,r.screenY||0,r.clientX||0,r.clientY||0,r.ctrlKey||!1,r.altKey||!1,r.shiftKey||!1,r.metaKey||!1,r.button||0,r.relatedTarget||null),n};t.prototype=Event.prototype,e.MouseEvent=t}"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){var r=arguments;if(null===e||void 0===e)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(e),o=1;o0?0|t:0;return this.substring(r,r+e.length)===e}}),String.prototype.endsWith||(String.prototype.endsWith=function(e,t){return(void 0===t||t>this.length)&&(t=this.length),this.substring(t-e.length,t)===e}),Number.isInteger||(Number.isInteger=function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}),Array.prototype.includes||(Array.prototype.includes=function(e){return!!~this.indexOf(e)}),Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){var t=this;do{if(t.matches(e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(e){if(null==this)throw TypeError('"this" is null or not defined');var t=Object(this),r=t.length>>>0;if("function"!=typeof e)throw TypeError("predicate must be a function");for(var n=arguments[1],o=0;o>>0,n=arguments[1],o=0;o0?0|e:0;return this.substring(r,r+t.length)===t}}),String.prototype.endsWith||(String.prototype.endsWith=function(t,e){return(void 0===e||e>this.length)&&(e=this.length),this.substring(e-t.length,e)===t}),Number.isInteger||(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t}),Array.prototype.includes||(Array.prototype.includes=function(t){return!!~this.indexOf(t)}),Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(t){var e=this;do{if(e.matches(t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null==this)throw TypeError('"this" is null or not defined');var e=Object(this),r=e.length>>>0;if("function"!=typeof t)throw TypeError("predicate must be a function");for(var n=arguments[1],o=0;o>>0,n=arguments[1],o=0;oimg,.q-icon>svg{width:100%;height:100%}.material-icons,.material-icons-outlined,.material-icons-round,.material-icons-sharp,.material-symbols-outlined,.material-symbols-rounded,.material-symbols-sharp,.q-icon{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:inherit;font-size:inherit;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.q-panel,.q-panel>div{height:100%;width:100%}.q-panel-parent{overflow:hidden;position:relative}.q-loading-bar{position:fixed;z-index:9998;transition:transform 0.5s cubic-bezier(0,0,0.2,1),opacity 0.5s;background:#f44336}.q-loading-bar--top{left:0;right:0;top:0;width:100%}.q-loading-bar--bottom{left:0;right:0;bottom:0;width:100%}.q-loading-bar--right{top:0;bottom:0;right:0;height:100%}.q-loading-bar--left{top:0;bottom:0;left:0;height:100%}.q-avatar{position:relative;vertical-align:middle;display:inline-block;border-radius:50%;font-size:48px;height:1em;width:1em}.q-avatar__content{font-size:0.5em;line-height:0.5em}.q-avatar__content,.q-avatar img:not(.q-icon){border-radius:inherit;height:inherit;width:inherit}.q-avatar--square{border-radius:0}.q-badge{background-color:#1976d2;background-color:var(--q-color-primary);color:#fff;color:var(--q-color-dark-text);padding:2px 6px;border-radius:4px;font-size:12px;line-height:12px;min-height:12px;font-weight:400;vertical-align:baseline}.q-badge--single-line{white-space:nowrap}.q-badge--multi-line{word-break:break-all;word-wrap:break-word}.q-badge--floating{position:absolute;top:-4px;right:-3px;cursor:inherit}.q-badge--transparent{opacity:0.8}.q-badge--outline{background-color:transparent;border:1px solid currentColor}.q-badge--rounded{border-radius:1em}.q-banner{min-height:54px;padding:8px 16px}.q-banner--top-padding{padding-top:14px}.q-banner__avatar{min-width:1px!important}.q-banner__avatar>.q-avatar{font-size:46px}.q-banner__avatar>.q-icon{font-size:40px}.q-banner__actions.col-auto,.q-banner__avatar:not(:empty)+.q-banner__content{padding-left:16px}.q-banner__actions.col-all .q-btn-item{margin:4px 0 0 4px}.q-banner--dense{min-height:32px;padding:8px}.q-banner--dense.q-banner--top-padding{padding-top:12px}.q-banner--dense .q-banner__avatar>.q-avatar,.q-banner--dense .q-banner__avatar>.q-icon{font-size:28px}.q-banner--dense .q-banner__actions.col-auto,.q-banner--dense .q-banner__avatar:not(:empty)+.q-banner__content{padding-left:8px}.q-bar{background:rgba(0,0,0,0.2)}.q-bar>.q-icon{margin-left:2px}.q-bar>div,.q-bar>div+.q-icon{margin-left:8px}.q-bar>.q-btn{margin-left:2px}.q-bar>.q-btn:first-child,.q-bar>.q-icon:first-child,.q-bar>div:first-child{margin-left:0}.q-bar--standard{padding:0 12px;height:32px;font-size:18px}.q-bar--standard>div{font-size:16px}.q-bar--standard .q-btn{font-size:11px}.q-bar--dense{padding:0 8px;height:24px;font-size:14px}.q-bar--dense .q-btn{font-size:8px}.q-bar--dark{background:hsla(0,0%,100%,0.15)}@media (prefers-color-scheme:dark){.q-bar--dark-auto{background:hsla(0,0%,100%,0.15)}}.q-breadcrumbs__el{color:inherit}.q-breadcrumbs__el-icon{font-size:125%}.q-breadcrumbs__el-icon--with-label{margin-right:8px}[dir=rtl] .q-breadcrumbs__separator .q-icon{transform:scaleX(-1)}.q-btn{display:inline-flex;flex-direction:column;align-items:stretch;position:relative;outline:0;border:0;vertical-align:middle;padding:0;font-size:14px;line-height:1.715em;text-decoration:none;color:inherit;background:transparent;font-weight:500;text-transform:uppercase;text-align:center;width:auto;height:auto}.q-btn .q-icon,.q-btn .q-spinner{font-size:1.715em}.q-btn.disabled{opacity:0.7!important}.q-btn__wrapper{padding:4px 16px;min-height:2.572em;border-radius:inherit;width:100%;height:100%}.q-btn__wrapper:before{content:"";display:block;position:absolute;left:0;right:0;top:0;bottom:0;border-radius:inherit;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}.q-btn--actionable{cursor:pointer}.q-btn--actionable.q-btn--standard .q-btn__wrapper:before{transition:box-shadow 0.3s cubic-bezier(0.25,0.8,0.5,1)}.q-btn--actionable.q-btn--standard.q-btn--active .q-btn__wrapper:before,.q-btn--actionable.q-btn--standard:active .q-btn__wrapper:before{box-shadow:0 3px 5px -1px rgba(0,0,0,0.2),0 5px 8px rgba(0,0,0,0.14),0 1px 14px rgba(0,0,0,0.12)}.q-btn--no-uppercase{text-transform:none}.q-btn--rectangle{border-radius:3px}.q-btn--outline{background:transparent!important}.q-btn--outline .q-btn__wrapper:before{border:1px solid currentColor}.q-btn--push{border-radius:7px}.q-btn--push .q-btn__wrapper:before{border-bottom:3px solid rgba(0,0,0,0.15)}.q-btn--push.q-btn--actionable{transition:transform 0.3s cubic-bezier(0.25,0.8,0.5,1)}.q-btn--push.q-btn--actionable .q-btn__wrapper:before{transition:top 0.3s cubic-bezier(0.25,0.8,0.5,1),bottom 0.3s cubic-bezier(0.25,0.8,0.5,1),border-bottom-width 0.3s cubic-bezier(0.25,0.8,0.5,1)}.q-btn--push.q-btn--actionable.q-btn--active,.q-btn--push.q-btn--actionable:active{transform:translateY(2px)}.q-btn--push.q-btn--actionable.q-btn--active .q-btn__wrapper:before,.q-btn--push.q-btn--actionable:active .q-btn__wrapper:before{border-bottom-width:0}.q-btn--rounded{border-radius:28px}.q-btn--round{border-radius:50%}.q-btn--round .q-btn__wrapper{padding:0;min-width:3em;min-height:3em}.q-btn--flat .q-btn__wrapper:before,.q-btn--outline .q-btn__wrapper:before,.q-btn--unelevated .q-btn__wrapper:before{box-shadow:none}.q-btn--dense .q-btn__wrapper{padding:0.285em;min-height:2em}.q-btn--dense.q-btn--round .q-btn__wrapper{padding:0;min-height:2.4em;min-width:2.4em}.q-btn--dense .on-left{margin-right:6px}.q-btn--dense .on-right{margin-left:6px}.q-btn--fab-mini .q-icon,.q-btn--fab .q-icon{font-size:24px}.q-btn--fab .q-icon{margin:auto}.q-btn--fab .q-btn__wrapper{padding:16px;min-height:56px;min-width:56px}.q-btn--fab-mini .q-btn__wrapper{padding:8px;min-height:40px;min-width:40px}.q-btn__content{transition:opacity 0.3s;z-index:0}.q-btn__content--hidden{opacity:0;pointer-events:none}.q-btn__progress{border-radius:inherit;z-index:0}.q-btn__progress-indicator{z-index:-1;transform:translateX(-100%);background:hsla(0,0%,100%,0.25)}.q-btn__progress--dark .q-btn__progress-indicator{background:rgba(0,0,0,0.2)}.q-btn--flat .q-btn__progress-indicator,.q-btn--outline .q-btn__progress-indicator{opacity:0.2;background:currentColor}.q-btn-dropdown--split .q-btn-dropdown__arrow-container.q-btn--outline{border-left:1px solid currentColor}.q-btn-dropdown--split .q-btn-dropdown__arrow-container:not(.q-btn--outline){border-left:1px solid hsla(0,0%,100%,0.3)}.q-btn-dropdown--split .q-btn-dropdown__arrow-container .q-btn__wrapper{padding:0 4px}.q-btn-dropdown--simple *+.q-btn-dropdown__arrow{margin-left:8px}.q-btn-dropdown__arrow{transition:transform 0.28s}.q-btn-dropdown--current{flex-grow:1}.q-btn-group{border-radius:3px;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);vertical-align:middle}.q-btn-group>.q-btn-item{border-radius:inherit;align-self:stretch}.q-btn-group>.q-btn-item .q-btn__wrapper:before{box-shadow:none}.q-btn-group>.q-btn-item .q-badge--floating{right:0}.q-btn-group>.q-btn-group{box-shadow:none}.q-btn-group>.q-btn-group:first-child>.q-btn:first-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}.q-btn-group>.q-btn-group:last-child>.q-btn:last-child{border-top-right-radius:inherit;border-bottom-right-radius:inherit}.q-btn-group>.q-btn-group:not(:first-child)>.q-btn:first-child .q-btn__wrapper:before{border-left:0}.q-btn-group>.q-btn-group:not(:last-child)>.q-btn:last-child .q-btn__wrapper:before{border-right:0}.q-btn-group>.q-btn-item:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.q-btn-group>.q-btn-item:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.q-btn-group>.q-btn-item.q-btn--standard .q-btn__wrapper:before{z-index:-1}.q-btn-group--push{border-radius:7px}.q-btn-group--push>.q-btn--push.q-btn--actionable{transform:none}.q-btn-group--push>.q-btn--push.q-btn--actionable .q-btn__wrapper{transition:margin-top 0.3s cubic-bezier(0.25,0.8,0.5,1),margin-bottom 0.3s cubic-bezier(0.25,0.8,0.5,1),box-shadow 0.3s cubic-bezier(0.25,0.8,0.5,1)}.q-btn-group--push>.q-btn--push.q-btn--actionable.q-btn--active .q-btn__wrapper,.q-btn-group--push>.q-btn--push.q-btn--actionable:active .q-btn__wrapper{margin-top:2px;margin-bottom:-2px}.q-btn-group--rounded{border-radius:28px}.q-btn-group--square{border-radius:0}.q-btn-group--flat,.q-btn-group--outline,.q-btn-group--unelevated{box-shadow:none}.q-btn-group--outline>.q-separator{display:none}.q-btn-group--outline>.q-btn-item+.q-btn-item .q-btn__wrapper:before{border-left:0}.q-btn-group--outline>.q-btn-item:not(:last-child) .q-btn__wrapper:before{border-right:0}.q-btn-group--stretch{align-self:stretch;border-radius:0}.q-btn-group--glossy>.q-btn-item{background-image:linear-gradient(180deg,hsla(0,0%,100%,0.3),hsla(0,0%,100%,0) 50%,rgba(0,0,0,0.12) 51%,rgba(0,0,0,0.04))!important}.q-btn-group--spread>.q-btn-group{display:flex!important}.q-btn-group--spread>.q-btn-group>.q-btn-item:not(.q-btn-dropdown__arrow-container),.q-btn-group--spread>.q-btn-item{width:auto;min-width:0;max-width:100%;flex:10000 1 0%}.q-btn-toggle,.q-card{position:relative}.q-card{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px;vertical-align:top}.q-card>div:first-child,.q-card>img:first-child{border-top:0;border-top-left-radius:inherit;border-top-right-radius:inherit}.q-card>div:last-child,.q-card>img:last-child{border-bottom:0;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.q-card>div:not(:first-child),.q-card>img:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.q-card>div:not(:last-child),.q-card>img:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}.q-card>div{border-left:0;border-right:0;box-shadow:none}.q-card--bordered{border:1px solid rgba(0,0,0,0.12)}.q-card--dark{border-color:hsla(0,0%,100%,0.28)}.q-card__section{position:relative}.q-card__section--vert{padding:16px}.q-card__section--horiz>div:first-child,.q-card__section--horiz>img:first-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}.q-card__section--horiz>div:last-child,.q-card__section--horiz>img:last-child{border-top-right-radius:inherit;border-bottom-right-radius:inherit}.q-card__section--horiz>div:not(:first-child),.q-card__section--horiz>img:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.q-card__section--horiz>div:not(:last-child),.q-card__section--horiz>img:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.q-card__section--horiz>div{border-top:0;border-bottom:0;box-shadow:none}.q-card__actions{padding:8px;align-items:center}.q-card__actions .q-btn__wrapper{padding:0 8px}.q-card__actions--horiz>.q-btn-group+.q-btn-item,.q-card__actions--horiz>.q-btn-item+.q-btn-group,.q-card__actions--horiz>.q-btn-item+.q-btn-item{margin-left:8px}.q-card__actions--vert>.q-btn-item.q-btn--round{align-self:center}.q-card__actions--vert>.q-btn-group+.q-btn-item,.q-card__actions--vert>.q-btn-item+.q-btn-group,.q-card__actions--vert>.q-btn-item+.q-btn-item{margin-top:4px}.q-card__actions--vert>.q-btn-group>.q-btn-item{flex-grow:1}.q-card>img{display:block;width:100%;max-width:100%;border:0}@media (prefers-color-scheme:dark){.q-card--dark-auto{border-color:hsla(0,0%,100%,0.28)}}.q-carousel{height:400px}.q-carousel__slide{min-height:100%;background-size:cover;background-position:50%}.q-carousel .q-carousel--padding,.q-carousel__slide{padding:16px}.q-carousel__slides-container{height:100%}.q-carousel__control{color:#fff;color:var(--q-color-dark-text)}.q-carousel__arrow{pointer-events:none}.q-carousel__arrow .q-icon{font-size:28px}.q-carousel__arrow .q-btn{pointer-events:all}.q-carousel__next-arrow--horizontal,.q-carousel__prev-arrow--horizontal{top:16px;bottom:16px}.q-carousel__prev-arrow--horizontal{left:16px}.q-carousel__next-arrow--horizontal{right:16px}.q-carousel__next-arrow--vertical,.q-carousel__prev-arrow--vertical{left:16px;right:16px}.q-carousel__prev-arrow--vertical{top:16px}.q-carousel__next-arrow--vertical{bottom:16px}.q-carousel__navigation--bottom,.q-carousel__navigation--top{left:16px;right:16px;overflow-x:auto;overflow-y:hidden}.q-carousel__navigation--top{top:16px}.q-carousel__navigation--bottom{bottom:16px}.q-carousel__navigation--left,.q-carousel__navigation--right{top:16px;bottom:16px;overflow-x:hidden;overflow-y:auto}.q-carousel__navigation--left>.q-carousel__navigation-inner,.q-carousel__navigation--right>.q-carousel__navigation-inner{flex-direction:column}.q-carousel__navigation--left{left:16px}.q-carousel__navigation--right{right:16px}.q-carousel__navigation-inner{flex:1 1 auto}.q-carousel__navigation .q-btn{margin:6px 4px}.q-carousel__navigation .q-btn .q-btn__wrapper{padding:5px}.q-carousel__navigation-icon--inactive{opacity:0.7}.q-carousel .q-carousel__thumbnail{margin:2px;height:50px;width:auto;display:inline-block;cursor:pointer;border:1px solid transparent;border-radius:4px;vertical-align:middle;opacity:0.7;transition:opacity 0.3s}.q-carousel .q-carousel__thumbnail--active,.q-carousel .q-carousel__thumbnail:hover{opacity:1}.q-carousel .q-carousel__thumbnail--active{border-color:currentColor;cursor:default}.q-carousel--arrows-vertical .q-carousel--padding,.q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-top .q-carousel--padding,.q-carousel--navigation-top.q-carousel--with-padding .q-carousel__slide{padding-top:60px}.q-carousel--arrows-vertical .q-carousel--padding,.q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-bottom .q-carousel--padding,.q-carousel--navigation-bottom.q-carousel--with-padding .q-carousel__slide{padding-bottom:60px}.q-carousel--arrows-horizontal .q-carousel--padding,.q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-left .q-carousel--padding,.q-carousel--navigation-left.q-carousel--with-padding .q-carousel__slide{padding-left:60px}.q-carousel--arrows-horizontal .q-carousel--padding,.q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-right .q-carousel--padding,.q-carousel--navigation-right.q-carousel--with-padding .q-carousel__slide{padding-right:60px}.q-carousel.fullscreen{height:100%}.q-message-label,.q-message-name,.q-message-stamp{font-size:small}.q-message-label{margin:24px 0;text-align:center}.q-message-stamp{color:inherit;margin-top:4px;opacity:0.6;display:none}.q-message-avatar{border-radius:50%;width:48px;height:48px;min-width:48px}.q-message{margin-bottom:8px}.q-message:first-child .q-message-label{margin-top:0}.q-message-avatar--received{margin-right:8px}.q-message-text--received{color:#81c784;border-radius:4px 4px 4px 0}.q-message-text--received:last-child:before{right:100%;border-right:0 solid transparent;border-left:8px solid transparent;border-bottom:8px solid currentColor}.q-message-text-content--received{color:#000}.q-message-name--sent{text-align:right}.q-message-avatar--sent{margin-left:8px}.q-message-container--sent{flex-direction:row-reverse}.q-message-text--sent{color:#e0e0e0;border-radius:4px 4px 0 4px}.q-message-text--sent:last-child:before{left:100%;border-left:0 solid transparent;border-right:8px solid transparent;border-bottom:8px solid currentColor}.q-message-text-content--sent{color:#000}.q-message-text{background:currentColor;padding:8px;line-height:1.2;word-break:break-word;position:relative}.q-message-text+.q-message-text{margin-top:3px}.q-message-text:last-child{min-height:48px}.q-message-text:last-child .q-message-stamp{display:block}.q-message-text:last-child:before{content:"";position:absolute;bottom:0;width:0;height:0}.q-checkbox{vertical-align:middle}.q-checkbox__native{width:1px;height:1px}.q-checkbox__bg,.q-checkbox__icon-container{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.q-checkbox__bg{top:25%;left:25%;width:50%;height:50%;border:2px solid currentColor;border-radius:2px;transition:background 0.22s cubic-bezier(0,0,0.2,1) 0ms;-webkit-print-color-adjust:exact}.q-checkbox__icon{color:currentColor;font-size:0.5em}.q-checkbox__svg{color:#fff;color:var(--q-color-dark-text)}.q-checkbox__truthy{stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.78334;stroke-dasharray:29.78334}.q-checkbox__indet{fill:currentColor;transform-origin:50% 50%;transform:rotate(-280deg) scale(0)}.q-checkbox__inner{font-size:40px;width:1em;min-width:1em;height:1em;outline:0;border-radius:50%;color:rgba(0,0,0,0.54)}.q-checkbox__inner--indet,.q-checkbox__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-checkbox__inner--indet .q-checkbox__bg,.q-checkbox__inner--truthy .q-checkbox__bg{background:currentColor}.q-checkbox__inner--truthy path{stroke-dashoffset:0;transition:stroke-dashoffset 0.18s cubic-bezier(0.4,0,0.6,1) 0ms}.q-checkbox__inner--indet .q-checkbox__indet{transform:rotate(0) scale(1);transition:transform 0.22s cubic-bezier(0,0,0.2,1) 0ms}.q-checkbox.disabled{opacity:0.75!important}.q-checkbox--dark .q-checkbox__inner{color:hsla(0,0%,100%,0.7)}.q-checkbox--dark .q-checkbox__inner:before{opacity:0.32!important}.q-checkbox--dark .q-checkbox__inner--indet,.q-checkbox--dark .q-checkbox__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-checkbox--dense .q-checkbox__inner{width:0.5em;min-width:0.5em;height:0.5em}.q-checkbox--dense .q-checkbox__bg{left:5%;top:5%;width:90%;height:90%}.q-checkbox--dense .q-checkbox__label{padding-left:0.5em}.q-checkbox--dense.reverse .q-checkbox__label{padding-left:0;padding-right:0.5em}body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:currentColor;opacity:0.12;transform:scale3d(0,0,1);transition:transform 0.22s cubic-bezier(0,0,0.2,1)}body.desktop .q-checkbox:not(.disabled):focus .q-checkbox__inner:before,body.desktop .q-checkbox:not(.disabled):hover .q-checkbox__inner:before{transform:scale3d(1,1,1)}body.desktop .q-checkbox--dense:not(.disabled):focus .q-checkbox__inner:before,body.desktop .q-checkbox--dense:not(.disabled):hover .q-checkbox__inner:before{transform:scale3d(1.4,1.4,1)}@media (prefers-color-scheme:dark){.q-checkbox--dark-auto .q-checkbox__inner{color:hsla(0,0%,100%,0.7)}.q-checkbox--dark-auto .q-checkbox__inner:before{opacity:0.32!important}.q-checkbox--dark-auto .q-checkbox__inner--indet,.q-checkbox--dark-auto .q-checkbox__inner--truthy{color:#1976d2;color:var(--q-color-primary)}}.q-chip{vertical-align:middle;border-radius:16px;outline:0;position:relative;height:2em;max-width:100%;margin:4px;background:#e0e0e0;background:var(--q-color-chip-background-light);color:#000;color:var(--q-color-light-text);font-size:14px;padding:0.5em 0.9em}.q-chip--dark{background:#323232;background:var(--q-color-chip-background-dark);color:#fff;color:var(--q-color-dark-text)}.q-chip--colored .q-chip__icon,.q-chip--dark .q-chip__icon{color:inherit}.q-chip--outline{background:transparent!important;border:1px solid currentColor}.q-chip--outline .q-avatar{height:calc(1em - 2px);width:calc(1em - 2px)}.q-chip .q-avatar{font-size:2em;margin-left:-0.45em;margin-right:0.2em;border-radius:16px}.q-chip .q-avatar--right,.q-chip .q-avatar~.q-avatar{margin-left:0.2em;margin-right:-0.45em}.q-chip--selected .q-avatar:first-child:not(.q-avatar--right){display:none}.q-chip__icon{color:rgba(0,0,0,0.54);font-size:1.5em;margin:-0.2em}.q-chip__icon--left{margin-right:0.2em}.q-chip__icon--right{margin-left:0.2em}.q-chip__icon--remove{margin-left:0.1em;margin-right:-0.5em;opacity:0.6;outline:0}.q-chip__icon--remove:focus,.q-chip__icon--remove:hover{opacity:1}.q-chip__content{white-space:nowrap}.q-chip--dense{border-radius:12px;padding:0 0.4em;height:1.5em}.q-chip--dense .q-avatar{font-size:1.5em;margin-left:-0.27em;margin-right:0.1em;border-radius:12px}.q-chip--dense .q-avatar--right,.q-chip--dense .q-avatar~.q-avatar{margin-left:0.1em;margin-right:-0.268em}.q-chip--dense .q-chip__icon{font-size:1.25em}.q-chip--dense .q-chip__icon--left{margin-right:0.195em}.q-chip--dense .q-chip__icon--remove{margin-right:-0.25em}.q-chip--square{border-radius:4px}.q-chip--square .q-avatar{border-radius:4px 0 0 4px}.q-chip--square .q-avatar--right,.q-chip--square .q-avatar~.q-avatar{border-radius:0 4px 4px 0}body.desktop .q-chip--clickable:focus{box-shadow:0 1px 3px rgba(0,0,0,0.2),0 1px 1px rgba(0,0,0,0.14),0 2px 1px -1px rgba(0,0,0,0.12)}@media (prefers-color-scheme:dark){.q-chip--dark-auto{background:#323232;background:var(--q-color-chip-background-dark);color:#fff;color:var(--q-color-dark-text)}.q-chip--dark-auto .q-chip__icon{color:inherit}}.q-circular-progress{display:inline-block;position:relative;vertical-align:middle;width:1em;height:1em;line-height:1}.q-circular-progress.q-focusable{border-radius:50%}.q-circular-progress__svg{width:100%;height:100%}.q-circular-progress__text{font-size:0.25em}.q-circular-progress--indeterminate .q-circular-progress__svg{transform-origin:50% 50%;-webkit-animation:q-spin 2s linear infinite;animation:q-spin 2s linear infinite}.q-circular-progress--indeterminate .q-circular-progress__circle{stroke-dasharray:1 400;stroke-dashoffset:0;-webkit-animation:q-circular-progress-circle 1.5s ease-in-out infinite;animation:q-circular-progress-circle 1.5s ease-in-out infinite}.q-color-picker{overflow:hidden;max-width:350px;vertical-align:top;min-width:180px;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}.q-color-picker .q-tab{padding:0!important}.q-color-picker--bordered{border:1px solid rgba(0,0,0,0.12)}.q-color-picker__header-tabs{height:32px}.q-color-picker__header input{line-height:24px;border:0}.q-color-picker__header .q-tab{min-height:32px!important;height:32px!important}.q-color-picker__header .q-tab--inactive{background:linear-gradient(0deg,rgba(0,0,0,0.3) 0%,rgba(0,0,0,0.15) 25%,rgba(0,0,0,0.1))}.q-color-picker__error-icon{bottom:2px;right:2px;font-size:24px;opacity:0;transition:opacity 0.3s ease-in}.q-color-picker__header-content{position:relative;background:#fff;background:var(--q-color-light-page)}.q-color-picker__header-content--light{color:#000;color:var(--q-color-light-text)}.q-color-picker__header-content--dark{color:#fff;color:var(--q-color-dark-text)}.q-color-picker__header-content--dark .q-tab--inactive:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:hsla(0,0%,100%,0.2)}.q-color-picker__header-banner{height:36px}.q-color-picker__header-bg{background:#fff;background:var(--q-color-light-page);background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==")!important}.q-color-picker__footer{height:36px}.q-color-picker__footer .q-tab{min-height:36px!important;height:36px!important}.q-color-picker__footer .q-tab--inactive{background:linear-gradient(180deg,rgba(0,0,0,0.3) 0%,rgba(0,0,0,0.15) 25%,rgba(0,0,0,0.1))}.q-color-picker__spectrum{width:100%;height:100%}.q-color-picker__spectrum-tab{padding:0!important}.q-color-picker__spectrum-white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.q-color-picker__spectrum-black{background:linear-gradient(0deg,#000,transparent)}.q-color-picker__spectrum-circle{width:10px;height:10px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,0.3),0 0 1px 2px rgba(0,0,0,0.4);border-radius:50%;transform:translate(-5px,-5px)}.q-color-picker__hue .q-slider__track{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)!important;opacity:1}.q-color-picker__alpha .q-slider__track-container{padding-top:0}.q-color-picker__alpha .q-slider__track:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:linear-gradient(90deg,hsla(0,0%,100%,0),#757575)}.q-color-picker__sliders{padding:0 16px}.q-color-picker__sliders .q-slider__thumb{color:#424242}.q-color-picker__sliders .q-slider__thumb path{stroke-width:2px;fill:transparent}.q-color-picker__sliders .q-slider--active path{stroke-width:3px}.q-color-picker__tune-tab .q-slider{margin-left:18px;margin-right:18px}.q-color-picker__tune-tab input{font-size:11px;border:1px solid #e0e0e0;border-radius:4px;width:3.5em}.q-color-picker__palette-tab{padding:0!important}.q-color-picker__palette-rows--editable .q-color-picker__cube{cursor:pointer}.q-color-picker__cube{padding-bottom:10%;width:10%!important}.q-color-picker input{color:inherit;background:transparent;outline:0;text-align:center}.q-color-picker .q-tabs{overflow:hidden}.q-color-picker .q-tab--active{box-shadow:0 0 14px 3px rgba(0,0,0,0.2)}.q-color-picker .q-tab--active .q-focus-helper,.q-color-picker .q-tab__indicator{display:none}.q-color-picker .q-tab-panels{background:inherit}.q-color-picker--dark .q-color-picker__tune-tab input{border:1px solid hsla(0,0%,100%,0.3)}.q-color-picker--dark .q-slider{color:#fafafa}@media (prefers-color-scheme:dark){.q-color-picker--dark-auto .q-color-picker__tune-tab input{border:1px solid hsla(0,0%,100%,0.3)}.q-color-picker--dark-auto .q-slider{color:#fafafa}}.q-date{display:inline-flex;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px;background:#fff;background:var(--q-color-light-page);width:290px;min-width:290px;max-width:100%}.q-date--bordered{border:1px solid rgba(0,0,0,0.12)}.q-date__header{border-top-left-radius:inherit;color:#fff;color:var(--q-color-dark-text);background-color:#1976d2;background-color:var(--q-color-primary);padding:16px}.q-date__actions{padding:0 16px 16px}.q-date__content .q-btn{font-weight:400}.q-date__header-link{opacity:0.64;outline:0;transition:opacity 0.3s ease-out}.q-date__header-link--active,.q-date__header-link:focus,.q-date__header-link:hover{opacity:1}.q-date__header-subtitle{font-size:14px;line-height:1.75;letter-spacing:0.00938em}.q-date__header-title-label{font-size:24px;line-height:1.2;letter-spacing:0.00735em}.q-date__view{height:100%;width:100%;min-height:290px;padding:16px}.q-date__navigation{height:12.5%}.q-date__navigation>div:first-child{width:8%;min-width:24px;justify-content:flex-end}.q-date__navigation>div:last-child{width:8%;min-width:24px;justify-content:flex-start}.q-date__calendar-weekdays{height:12.5%}.q-date__calendar-weekdays>div{opacity:0.38;font-size:12px}.q-date__calendar-item{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:14.285%!important;height:12.5%!important;position:relative;padding:1px}.q-date__calendar-item:after{content:"";position:absolute;pointer-events:none;top:1px;right:0;bottom:1px;left:0;border-style:dashed;border-color:transparent;border-width:1px}.q-date__calendar-item>div,.q-date__calendar-item button{width:30px;height:30px;border-radius:50%}.q-date__calendar-item>div{line-height:30px;text-align:center}.q-date__calendar-item>button{line-height:22px}.q-date__calendar-item--out{opacity:0.18}.q-date__calendar-item--fill{visibility:hidden;min-height:32px}.q-date__calendar-item--fill.q-date__range-from:before,.q-date__calendar-item--fill.q-date__range-to:before,.q-date__calendar-item--fill.q-date__range:before{opacity:0.05}.q-date__range-from:before,.q-date__range-to:before,.q-date__range:before{content:"";background-color:currentColor;position:absolute;top:1px;bottom:1px;left:0;right:0;opacity:0.3;pointer-events:none}.q-date__range:nth-child(7n-6):before{border-top-left-radius:0;border-bottom-left-radius:0}.q-date__range:nth-child(7n):before{border-top-right-radius:0;border-bottom-right-radius:0}.q-date__range-from:before{left:calc(50% - 15px);border-top-left-radius:28px;border-bottom-left-radius:28px}.q-date__range-to:before{right:calc(50% - 15px);border-top-right-radius:28px;border-bottom-right-radius:28px}.q-date__edit-range:after{border-color:currentColor transparent}.q-date__edit-range:nth-child(7n-6):after{border-top-left-radius:0;border-bottom-left-radius:0}.q-date__edit-range:nth-child(7n):after{border-top-right-radius:0;border-bottom-right-radius:0}.q-date__edit-range-from-to:after,.q-date__edit-range-from:after{left:4px;border-left-color:currentColor;border-top-color:currentColor;border-bottom-color:currentColor;border-top-left-radius:28px;border-bottom-left-radius:28px}.q-date__edit-range-from-to:after,.q-date__edit-range-to:after{right:4px;border-right-color:currentColor;border-top-color:currentColor;border-bottom-color:currentColor;border-top-right-radius:28px;border-bottom-right-radius:28px}.q-date__calendar-days-container{height:75%;min-height:192px}.q-date__calendar-days>div{height:16.66%!important}.q-date__event{position:absolute;bottom:2px;left:50%;height:5px;width:8px;border-radius:5px;background-color:#26a69a;background-color:var(--q-color-secondary);transform:translate3d(-50%,0,0)}.q-date__today{box-shadow:0 0 1px 0 currentColor}.q-date__years-content{padding:0 8px}.q-date__months-item,.q-date__years-item{flex:0 0 33.3333%}.q-date--readonly .q-date__content,.q-date--readonly .q-date__header,.q-date.disabled .q-date__content,.q-date.disabled .q-date__header{pointer-events:none}.q-date--readonly .q-date__navigation{display:none}.q-date--portrait{flex-direction:column}.q-date--portrait-standard .q-date__content{height:calc(100% - 86px)}.q-date--portrait-standard .q-date__header{border-top-right-radius:inherit;height:86px}.q-date--portrait-standard .q-date__header-title{align-items:center;height:30px}.q-date--portrait-minimal .q-date__content{height:100%}.q-date--landscape{flex-direction:row;align-items:stretch;min-width:420px}.q-date--landscape>div{display:flex;flex-direction:column}.q-date--landscape .q-date__content{height:100%}.q-date--landscape-standard{min-width:420px}.q-date--landscape-standard .q-date__header{border-bottom-left-radius:inherit;min-width:110px;width:110px}.q-date--landscape-standard .q-date__header-title{flex-direction:column}.q-date--landscape-standard .q-date__header-today{margin-top:12px;margin-left:-8px}.q-date--landscape-minimal{width:310px}.q-date--dark{border-color:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){.q-date--dark-auto{border-color:hsla(0,0%,100%,0.28)}}.q-dialog{contain:layout size;contain:layout size style;width:100vw}.q-dialog__title{font-size:1.25rem;font-weight:500;line-height:2rem;letter-spacing:0.0125em}.q-dialog__progress{font-size:4rem}.q-dialog__inner{outline:0}.q-dialog__inner>div{pointer-events:all;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position;border-radius:4px;box-shadow:0 2px 4px -1px rgba(0,0,0,0.2),0 4px 5px rgba(0,0,0,0.14),0 1px 10px rgba(0,0,0,0.12)}.q-dialog__inner--square>div{border-radius:0!important}.q-dialog__inner>.q-card>.q-card__actions .q-btn--rectangle .q-btn__wrapper{min-width:64px}.q-dialog__inner--minimized{padding:24px}.q-dialog__inner--minimized>div{max-height:calc(100vh - 48px)}.q-dialog__inner--maximized>div{height:100%;width:100%;max-height:100vh;max-width:100vw;border-radius:0!important}.q-dialog__inner--bottom,.q-dialog__inner--top{padding-top:0!important;padding-bottom:0!important}.q-dialog__inner--left,.q-dialog__inner--right{padding-right:0!important;padding-left:0!important}.q-dialog__inner--left:not([data-q-portal-animating])>div,.q-dialog__inner--top:not([data-q-portal-animating])>div{border-top-left-radius:0}.q-dialog__inner--right:not([data-q-portal-animating])>div,.q-dialog__inner--top:not([data-q-portal-animating])>div{border-top-right-radius:0}.q-dialog__inner--bottom:not([data-q-portal-animating])>div,.q-dialog__inner--left:not([data-q-portal-animating])>div{border-bottom-left-radius:0}.q-dialog__inner--bottom:not([data-q-portal-animating])>div,.q-dialog__inner--right:not([data-q-portal-animating])>div{border-bottom-right-radius:0}.q-dialog__inner--fullwidth>div{width:100%!important;max-width:100%!important}.q-dialog__inner--fullheight>div{height:100%!important;max-height:100%!important}.q-dialog__backdrop{z-index:-1;pointer-events:all;outline:0;opacity:0.4;background:#000;background:var(--q-color-backdrop-background)}html[dir=rtl] .q-dialog{right:auto}body.mobile .q-dialog{contain:size;contain:size style}body.desktop .q-dialog--modal{height:100vh}body.platform-ios .q-dialog__inner--minimized>div{max-height:calc(100vh - 164px)}body.platform-android .q-dialog__inner--minimized>div{max-height:calc(100% - 48px)}body.q-ios-padding .q-dialog__inner{padding-top:20px!important;padding-top:env(safe-area-inset-top)!important;padding-bottom:env(safe-area-inset-bottom)!important}body.q-ios-padding .q-dialog__inner>div{max-height:"calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important"}@media (max-width:599.98px){.q-dialog__inner--bottom,.q-dialog__inner--top{padding-left:0;padding-right:0}.q-dialog__inner--bottom>div,.q-dialog__inner--top>div{width:100%!important}}@media (min-width:600px){.q-dialog__inner--minimized>div{max-width:560px}}.q-bottom-sheet{padding-bottom:8px}.q-bottom-sheet__avatar{border-radius:50%}.q-bottom-sheet--list{width:400px}.q-bottom-sheet--list .q-icon,.q-bottom-sheet--list img{font-size:24px;width:24px;height:24px}.q-bottom-sheet--grid{width:700px}.q-bottom-sheet--grid .q-bottom-sheet__item{padding:8px;text-align:center;min-width:100px}.q-bottom-sheet--grid .q-bottom-sheet__empty-icon,.q-bottom-sheet--grid .q-icon,.q-bottom-sheet--grid img{font-size:48px;width:48px;height:48px;margin-bottom:8px}.q-bottom-sheet--grid .q-separator{margin:12px 0}.q-bottom-sheet__item{flex:0 0 33.3333%}@media (min-width:600px){.q-bottom-sheet__item{flex:0 0 25%}}.q-dialog-plugin{width:400px}.q-dialog-plugin__form{max-height:50vh}.q-dialog-plugin .q-card__section+.q-card__section{padding-top:0}.q-dialog-plugin--progress{text-align:center}.q-editor{border:1px solid rgba(0,0,0,0.12);border-radius:4px}.q-editor.disabled{border-style:dashed}.q-editor.fullscreen{max-height:100%}.q-editor>div:first-child,.q-editor__toolbars-container,.q-editor__toolbars-container>div:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-editor__toolbars-container{max-width:100%}.q-editor__content{outline:0;padding:10px;min-height:10em;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;overflow:auto;max-width:100%}.q-editor__content pre{white-space:pre-wrap}.q-editor__content hr{border:0;outline:0;margin:1px;height:1px;background:rgba(0,0,0,0.12)}.q-editor__content:empty:not(:focus):before{content:attr(placeholder);opacity:0.7}.q-editor__toolbar{border-bottom:1px solid rgba(0,0,0,0.12);min-height:32px}.q-editor .q-btn{margin:4px}.q-editor__toolbar-group{position:relative;margin:0 4px}.q-editor__toolbar-group+.q-editor__toolbar-group:before{content:"";position:absolute;left:-4px;top:4px;bottom:4px;width:1px;background:rgba(0,0,0,0.12)}.q-editor__link-input{color:inherit;text-decoration:none;text-transform:none;border:none;border-radius:0;background:none;outline:0}.q-editor--flat,.q-editor--flat .q-editor__toolbar{border:0}.q-editor--dense .q-editor__toolbar-group{display:flex;align-items:center;flex-wrap:nowrap}.q-editor--dark{border-color:hsla(0,0%,100%,0.28)}.q-editor--dark .q-editor__content hr{background:hsla(0,0%,100%,0.28)}.q-editor--dark .q-editor__toolbar{border-color:hsla(0,0%,100%,0.28)}.q-editor--dark .q-editor__toolbar-group+.q-editor__toolbar-group:before{background:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){.q-editor--dark-auto{border-color:hsla(0,0%,100%,0.28)}.q-editor--dark-auto .q-editor__content hr{background:hsla(0,0%,100%,0.28)}.q-editor--dark-auto .q-editor__toolbar{border-color:hsla(0,0%,100%,0.28)}.q-editor--dark-auto .q-editor__toolbar-group+.q-editor__toolbar-group:before{background:hsla(0,0%,100%,0.28)}}.q-expansion-item__border{opacity:0}.q-expansion-item__toggle-icon{position:relative;transition:transform 0.3s}.q-expansion-item__toggle-icon--rotated{transform:rotate(180deg)}.q-expansion-item__toggle-focus{width:1em!important;height:1em!important;position:relative!important}.q-expansion-item__toggle-focus+.q-expansion-item__toggle-icon{margin-top:-1em}.q-expansion-item--standard.q-expansion-item--expanded>div>.q-expansion-item__border{opacity:1}.q-expansion-item--popup{transition:padding 0.5s}.q-expansion-item--popup>.q-expansion-item__container{border:1px solid rgba(0,0,0,0.12)}.q-expansion-item--popup>.q-expansion-item__container>.q-separator{display:none}.q-expansion-item--popup.q-expansion-item--collapsed{padding:0 15px}.q-expansion-item--popup.q-expansion-item--expanded{padding:15px 0}.q-expansion-item--popup.q-expansion-item--expanded+.q-expansion-item--popup.q-expansion-item--expanded{padding-top:0}.q-expansion-item--popup.q-expansion-item--collapsed:not(:first-child)>.q-expansion-item__container{border-top-width:0}.q-expansion-item--popup.q-expansion-item--expanded+.q-expansion-item--popup.q-expansion-item--collapsed>.q-expansion-item__container{border-top-width:1px}.q-expansion-item__content>.q-card{box-shadow:none;border-radius:0}.q-expansion-item--expanded+.q-expansion-item--expanded>div>.q-expansion-item__border--top,.q-expansion-item:first-child>div>.q-expansion-item__border--top,.q-expansion-item:last-child>div>.q-expansion-item__border--bottom{opacity:0}.q-expansion-item--expanded .q-textarea--autogrow textarea{-webkit-animation:q-expansion-done 0s;animation:q-expansion-done 0s}.z-fab{z-index:990}.q-fab{position:relative;vertical-align:middle}.q-fab>.q-btn{width:100%}.q-fab--form-rounded{border-radius:28px}.q-fab--form-square{border-radius:4px}.q-fab__active-icon,.q-fab__icon{transition:opacity 0.4s,transform 0.4s}.q-fab__icon{opacity:1;transform:rotate(0deg)}.q-fab__active-icon{opacity:0;transform:rotate(-180deg)}.q-fab__label--external{position:absolute;padding:0 8px;transition:opacity 0.18s cubic-bezier(0.65,0.815,0.735,0.395)}.q-fab__label--external-hidden{opacity:0;pointer-events:none}.q-fab__label--external-left{top:50%;left:-12px;transform:translate(-100%,-50%)}.q-fab__label--external-right{top:50%;right:-12px;transform:translate(100%,-50%)}.q-fab__label--external-bottom{bottom:-12px;left:50%;transform:translate(-50%,100%)}.q-fab__label--external-top{top:-12px;left:50%;transform:translate(-50%,-100%)}.q-fab__label--internal{padding:0;transition:font-size 0.12s cubic-bezier(0.65,0.815,0.735,0.395),max-height 0.12s cubic-bezier(0.65,0.815,0.735,0.395),opacity 0.07s cubic-bezier(0.65,0.815,0.735,0.395);max-height:30px}.q-fab__label--internal-hidden{font-size:0;opacity:0}.q-fab__label--internal-top{padding-bottom:0.12em}.q-fab__label--internal-bottom{padding-top:0.12em}.q-fab__label--internal-bottom.q-fab__label--internal-hidden,.q-fab__label--internal-top.q-fab__label--internal-hidden{max-height:0}.q-fab__label--internal-left{padding-left:0.285em;padding-right:0.571em}.q-fab__label--internal-right{padding-right:0.285em;padding-left:0.571em}.q-fab__icon-holder{min-width:24px;min-height:24px;position:relative}.q-fab__icon-holder--opened .q-fab__icon{transform:rotate(180deg);opacity:0}.q-fab__icon-holder--opened .q-fab__active-icon{transform:rotate(0deg);opacity:1}.q-fab__actions{position:absolute;opacity:0;transition:transform 0.18s ease-in,opacity 0.18s ease-in;pointer-events:none;align-items:center;justify-content:center;align-self:center;padding:3px}.q-fab__actions .q-btn{margin:5px}.q-fab__actions--right{transform-origin:0 50%;transform:scale(0.4) translateX(-62px);height:56px;left:100%;margin-left:9px}.q-fab__actions--left{transform-origin:100% 50%;transform:scale(0.4) translateX(62px);height:56px;right:100%;margin-right:9px;flex-direction:row-reverse}.q-fab__actions--up{transform-origin:50% 100%;transform:scale(0.4) translateY(62px);width:56px;bottom:100%;margin-bottom:9px;flex-direction:column-reverse}.q-fab__actions--down{transform-origin:50% 0;transform:scale(0.4) translateY(-62px);width:56px;top:100%;margin-top:9px;flex-direction:column}.q-fab__actions--down,.q-fab__actions--up{left:50%;margin-left:-28px}.q-fab__actions--opened{opacity:1;transform:scale(1) translate(0,0);pointer-events:all}.q-fab--align-left>.q-fab__actions--down,.q-fab--align-left>.q-fab__actions--up{align-items:flex-start;left:28px}.q-fab--align-right>.q-fab__actions--down,.q-fab--align-right>.q-fab__actions--up{align-items:flex-end;left:auto;right:0}.q-field{font-size:14px}.q-field ::-ms-clear,.q-field ::-ms-reveal{display:none}.q-field--with-bottom{padding-bottom:20px}.q-field__marginal{height:56px;color:rgba(0,0,0,0.54);font-size:24px}.q-field__marginal>*+*{margin-left:2px}.q-field__marginal .q-avatar{font-size:32px}.q-field__before,.q-field__prepend{padding-right:12px}.q-field__after,.q-field__append{padding-left:12px}.q-field__after:empty,.q-field__append:empty{display:none}.q-field__append+.q-field__append{padding-left:2px}.q-field__inner{text-align:left}.q-field__bottom{font-size:12px;min-height:20px;line-height:1;color:rgba(0,0,0,0.54);padding:8px 12px 0;backface-visibility:hidden}.q-field__bottom--animated{transform:translateY(100%);position:absolute;left:0;right:0;bottom:0}.q-field__messages{line-height:1}.q-field__messages>div{word-break:break-word;word-wrap:break-word;overflow-wrap:break-word}.q-field__messages>div+div{margin-top:4px}.q-field__counter{padding-left:8px;line-height:1}.q-field--item-aligned{padding:8px 16px}.q-field--item-aligned .q-field__before{min-width:56px}.q-field__control-container{height:inherit}.q-field__control{color:#1976d2;color:var(--q-color-primary);height:56px;max-width:100%;outline:none}.q-field__control:after,.q-field__control:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.q-field__control:before{border-radius:inherit}.q-field__shadow{top:8px;opacity:0;overflow:hidden;white-space:pre-wrap;transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field__shadow+.q-field__native::-moz-placeholder{-moz-transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1);transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field__shadow+.q-field__native:-ms-input-placeholder{-ms-transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1);transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field__shadow+.q-field__native::placeholder{transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field__shadow+.q-field__native:focus::-moz-placeholder{opacity:0}.q-field__shadow+.q-field__native:focus:-ms-input-placeholder{opacity:0}.q-field__shadow+.q-field__native:focus::placeholder{opacity:0}.q-field__input,.q-field__native,.q-field__prefix,.q-field__suffix{font-weight:400;line-height:28px;letter-spacing:0.00937em;text-decoration:inherit;text-transform:inherit;border:none;border-radius:0;background:none;color:rgba(0,0,0,0.87);outline:0;padding:6px 0}.q-field__input,.q-field__native{width:100%;min-width:0;outline:0!important;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.q-field__input:-webkit-autofill,.q-field__native:-webkit-autofill{-webkit-animation-name:q-autofill;-webkit-animation-fill-mode:both}.q-field__input:-webkit-autofill+.q-field__label,.q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-40%) scale(0.75)}.q-field__input[type=number]:invalid+.q-field__label,.q-field__native[type=number]:invalid+.q-field__label{transform:translateY(-40%) scale(0.75)}.q-field__input:invalid,.q-field__native:invalid{box-shadow:none}.q-field__native[type=file]{line-height:1em}.q-field__input{padding:0;height:0;min-height:24px;line-height:24px}.q-field__prefix,.q-field__suffix{transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1);white-space:nowrap}.q-field__prefix{padding-right:4px}.q-field__suffix{padding-left:4px}.q-field--disabled .q-placeholder,.q-field--readonly .q-placeholder{opacity:1!important}.q-field--readonly.q-field--labeled .q-field__input,.q-field--readonly.q-field--labeled .q-field__native{cursor:default}.q-field--readonly.q-field--float .q-field__input,.q-field--readonly.q-field--float .q-field__native{cursor:text}.q-field--disabled .q-field__inner{cursor:not-allowed}.q-field--disabled .q-field__control{pointer-events:none;opacity:0.6!important}.q-field--disabled .q-field__control div,.q-field--disabled .q-field__control div *{outline:0!important}.q-field__label{left:0;max-width:100%;top:18px;color:rgba(0,0,0,0.6);font-size:16px;line-height:20px;font-weight:400;letter-spacing:0.00937em;text-decoration:inherit;text-transform:inherit;transform-origin:left top;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1),max-width 0.324s cubic-bezier(0.4,0,0.2,1);backface-visibility:hidden}.q-field__label-back{position:absolute;left:0;right:0;top:7.5px;height:0;z-index:-1;transition:height 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--float .q-field__label-back{height:4.5px}.q-field--float .q-field__label{transform:translateY(-40%) scale(0.75);max-width:133%;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1),max-width 0.396s cubic-bezier(0.4,0,0.2,1)}.q-field--highlighted .q-field__label{color:currentColor}.q-field--highlighted .q-field__shadow{opacity:0.5}.q-field--filled .q-field__control{padding:0 12px;background:rgba(0,0,0,0.05);border-radius:4px 4px 0 0}.q-field--filled .q-field__control:before{background:rgba(0,0,0,0.05);border-bottom:1px solid rgba(0,0,0,0.42);opacity:0;transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1),background 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--filled .q-field__control:hover:before{opacity:1}.q-field--filled .q-field__control:after{height:2px;top:auto;transform-origin:center bottom;transform:scale3d(0,1,1);background:currentColor;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--filled.q-field--rounded .q-field__control{border-radius:28px 28px 0 0}.q-field--filled.q-field--highlighted .q-field__control:before{opacity:1;background:rgba(0,0,0,0.12)}.q-field--filled.q-field--highlighted .q-field__control:after{transform:scale3d(1,1,1)}.q-field--filled.q-field--dark .q-field__control,.q-field--filled.q-field--dark .q-field__control:before{background:hsla(0,0%,100%,0.07)}.q-field--filled.q-field--dark.q-field--highlighted .q-field__control:before{background:hsla(0,0%,100%,0.1)}.q-field--filled.q-field--readonly .q-field__control:before{opacity:1;background:transparent;border-bottom-style:dashed}.q-field--outlined .q-field__control{border-radius:4px;padding:0 12px}.q-field--outlined .q-field__control:before{border:1px solid rgba(0,0,0,0.24);transition:border-color 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--outlined .q-field__control:hover:before{border-color:#000;border-color:var(--q-color-light-text)}.q-field--outlined .q-field__control:after{height:inherit;border-radius:inherit;border:2px solid transparent;transition:border-color 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--outlined .q-field__input:-webkit-autofill,.q-field--outlined .q-field__native:-webkit-autofill{margin-top:1px;margin-bottom:1px}.q-field--outlined.q-field--rounded .q-field__control{border-radius:28px}.q-field--outlined.q-field--highlighted .q-field__control:hover:before{border-color:transparent}.q-field--outlined.q-field--highlighted .q-field__control:after{border-color:currentColor;border-width:2px;transform:scale3d(1,1,1)}.q-field--outlined.q-field--readonly .q-field__control:before{border-style:dashed}.q-field--standard .q-field__control:before{border-bottom:1px solid rgba(0,0,0,0.24);transition:border-color 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--standard .q-field__control:hover:before{border-color:#000;border-color:var(--q-color-light-text)}.q-field--standard .q-field__control:after{height:2px;top:auto;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;transform-origin:center bottom;transform:scale3d(0,1,1);background:currentColor;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--standard.q-field--highlighted .q-field__control:after{transform:scale3d(1,1,1)}.q-field--standard.q-field--readonly .q-field__control:before{border-bottom-style:dashed}.q-field--dark .q-field__control:before{border-color:hsla(0,0%,100%,0.6)}.q-field--dark .q-field__control:hover:before{border-color:#fff;border-color:var(--q-color-dark-text)}.q-field--dark .q-field__input,.q-field--dark .q-field__native,.q-field--dark .q-field__prefix,.q-field--dark .q-field__suffix{color:#fff;color:var(--q-color-dark-text)}.q-field--dark .q-field__bottom,.q-field--dark .q-field__marginal,.q-field--dark:not(.q-field--highlighted) .q-field__label{color:hsla(0,0%,100%,0.7)}.q-field--standout .q-field__control{padding:0 12px;background:rgba(0,0,0,0.05);border-radius:4px;transition:box-shadow 0.36s cubic-bezier(0.4,0,0.2,1),background-color 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--standout .q-field__control:before{background:rgba(0,0,0,0.07);opacity:0;transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1),background 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field--standout .q-field__control:hover:before{opacity:1}.q-field--standout.q-field--rounded .q-field__control{border-radius:28px}.q-field--standout.q-field--highlighted .q-field__control{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);background:#121212;background:var(--q-color-dark-page)}.q-field--standout.q-field--highlighted .q-field__append,.q-field--standout.q-field--highlighted .q-field__input,.q-field--standout.q-field--highlighted .q-field__native,.q-field--standout.q-field--highlighted .q-field__prefix,.q-field--standout.q-field--highlighted .q-field__prepend,.q-field--standout.q-field--highlighted .q-field__suffix{color:#fff;color:var(--q-color-dark-text)}.q-field--standout.q-field--readonly .q-field__control:before{opacity:1;background:transparent;border:1px dashed rgba(0,0,0,0.24)}.q-field--standout.q-field--dark .q-field__control,.q-field--standout.q-field--dark .q-field__control:before{background:hsla(0,0%,100%,0.07)}.q-field--standout.q-field--dark.q-field--highlighted .q-field__control{background:#fff;background:var(--q-color-light-page)}.q-field--standout.q-field--dark.q-field--highlighted .q-field__append,.q-field--standout.q-field--dark.q-field--highlighted .q-field__input,.q-field--standout.q-field--dark.q-field--highlighted .q-field__native,.q-field--standout.q-field--dark.q-field--highlighted .q-field__prefix,.q-field--standout.q-field--dark.q-field--highlighted .q-field__prepend,.q-field--standout.q-field--dark.q-field--highlighted .q-field__suffix{color:#000;color:var(--q-color-light-text)}.q-field--standout.q-field--dark.q-field--readonly .q-field__control:before{border-color:hsla(0,0%,100%,0.24)}.q-field--labeled--std .q-field__native,.q-field--labeled--std .q-field__prefix,.q-field--labeled--std .q-field__suffix{line-height:24px;padding-top:24px;padding-bottom:8px}.q-field--labeled .q-field__shadow{top:0}.q-field--labeled:not(.q-field--float) .q-field__prefix,.q-field--labeled:not(.q-field--float) .q-field__suffix{opacity:0}.q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder,.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder{color:transparent!important}.q-field--labeled:not(.q-field--float) .q-field__input::-moz-placeholder,.q-field--labeled:not(.q-field--float) .q-field__native::-moz-placeholder{color:transparent}.q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder,.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder{color:transparent}.q-field--labeled:not(.q-field--float) .q-field__input::placeholder,.q-field--labeled:not(.q-field--float) .q-field__native::placeholder{color:transparent}.q-field--labeled--std.q-field--dense .q-field__native,.q-field--labeled--std.q-field--dense .q-field__prefix,.q-field--labeled--std.q-field--dense .q-field__suffix{padding-top:14px;padding-bottom:2px}.q-field--dense .q-field__shadow{top:0}.q-field--dense .q-field__control,.q-field--dense .q-field__marginal{height:40px}.q-field--dense .q-field__bottom{font-size:11px}.q-field--dense .q-field__label{font-size:14px;top:10px}.q-field--dense .q-field__before,.q-field--dense .q-field__prepend{padding-right:6px}.q-field--dense .q-field__after,.q-field--dense .q-field__append{padding-left:6px}.q-field--dense .q-field__append+.q-field__append{padding-left:2px}.q-field--dense .q-field__marginal .q-avatar{font-size:24px}.q-field--dense.q-field--float .q-field__label{transform:translateY(-30%) scale(0.75)}.q-field--dense .q-field__input:-webkit-autofill+.q-field__label,.q-field--dense .q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-30%) scale(0.75)}.q-field--dense .q-field__input[type=number]:invalid+.q-field__label,.q-field--dense .q-field__native[type=number]:invalid+.q-field__label{transform:translateY(-30%) scale(0.75)}.q-field--outlined--md.q-field--float .q-field__label{max-width:133%;transform:translateY(-120%) scale(0.75);padding-left:6px;padding-right:6px;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1),padding 0.36s cubic-bezier(0.4,0,0.2,1),max-width 0.396s cubic-bezier(0.4,0,0.2,1)}.q-field--outlined--md .q-field__label{z-index:1;left:-4px;padding-left:4px;padding-right:4px;border-radius:4px;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1),padding 0.36s cubic-bezier(0.4,0,0.2,1),max-width 0.324s cubic-bezier(0.4,0,0.2,1)}.q-field--outlined--md .q-field__input:-webkit-autofill+.q-field__label,.q-field--outlined--md .q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-120%) scale(0.75)}.q-field--outlined--md .q-field__input[type=number]:invalid+.q-field__label,.q-field--outlined--md .q-field__native[type=number]:invalid+.q-field__label{transform:translateY(-120%) scale(0.75)}.q-field--outlined--md.q-field--dense.q-field--outlined--md.q-field--float .q-field__label{transform:translateY(-85%) scale(0.75)}.q-field--outlined--md.q-field--dense .q-field__input:-webkit-autofill+.q-field__label,.q-field--outlined--md.q-field--dense .q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-85%) scale(0.75)}.q-field--outlined--md.q-field--dense .q-field__input[type=number]:invalid+.q-field__label,.q-field--outlined--md.q-field--dense .q-field__native[type=number]:invalid+.q-field__label{transform:translateY(-85%) scale(0.75)}.q-field--borderless.q-field--dense .q-field__control,.q-field--borderless .q-field__bottom,.q-field--standard.q-field--dense .q-field__control,.q-field--standard .q-field__bottom{padding-left:0;padding-right:0}.q-field--error .q-field__label{-webkit-animation:q-field-label 0.36s;animation:q-field-label 0.36s}.q-field--error .q-field__bottom{color:#c10015;color:var(--q-color-negative)}.q-field__focusable-action{opacity:0.6;cursor:pointer;outline:0!important;border:0;color:inherit;background:transparent;padding:0}.q-field__focusable-action:focus,.q-field__focusable-action:hover{opacity:1}.q-field--auto-height .q-field__control{height:auto}.q-field--auto-height .q-field__control,.q-field--auto-height .q-field__native{min-height:56px}.q-field--auto-height .q-field__native{align-items:center}.q-field--auto-height .q-field__control-container{padding-top:0}.q-field--auto-height .q-field__native,.q-field--auto-height .q-field__prefix,.q-field--auto-height .q-field__suffix{line-height:18px}.q-field--auto-height.q-field--labeled--std .q-field__control-container{padding-top:24px}.q-field--auto-height.q-field--labeled--std .q-field__shadow{top:24px}.q-field--auto-height.q-field--labeled--std .q-field__native,.q-field--auto-height.q-field--labeled--std .q-field__prefix,.q-field--auto-height.q-field--labeled--std .q-field__suffix{padding-top:0}.q-field--auto-height.q-field--labeled--std .q-field__native{min-height:24px}.q-field--auto-height.q-field--dense .q-field__control,.q-field--auto-height.q-field--dense .q-field__native{min-height:40px}.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__control-container{padding-top:14px}.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__shadow{top:14px}.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__native{min-height:24px}.q-field--square .q-field__control{border-radius:0!important}.q-transition--field-message-enter-active,.q-transition--field-message-leave-active{transition:transform 0.6s cubic-bezier(0.86,0,0.07,1),opacity 0.6s cubic-bezier(0.86,0,0.07,1)}.q-transition--field-message-enter,.q-transition--field-message-leave-to{opacity:0;transform:translateY(-10px)}.q-transition--field-message-leave,.q-transition--field-message-leave-active{position:absolute}@media (prefers-color-scheme:dark){.q-field--dark-auto.q-field--filled .q-field__control,.q-field--dark-auto.q-field--filled .q-field__control:before{background:hsla(0,0%,100%,0.07)}.q-field--dark-auto.q-field--filled.q-field--highlighted .q-field__control:before{background:hsla(0,0%,100%,0.1)}.q-field--dark-auto .q-field__control:before{border-color:hsla(0,0%,100%,0.6)}.q-field--dark-auto .q-field__control:hover:before{border-color:#fff;border-color:var(--q-color-dark-text)}.q-field--dark-auto .q-field__input,.q-field--dark-auto .q-field__native,.q-field--dark-auto .q-field__prefix,.q-field--dark-auto .q-field__suffix{color:#fff;color:var(--q-color-dark-text)}.q-field--dark-auto .q-field__bottom,.q-field--dark-auto .q-field__marginal,.q-field--dark-auto:not(.q-field--highlighted) .q-field__label{color:hsla(0,0%,100%,0.7)}.q-field--dark-auto.q-field--standout .q-field__control,.q-field--dark-auto.q-field--standout .q-field__control:before{background:hsla(0,0%,100%,0.07)}.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__control{background:#fff;background:var(--q-color-light-page)}.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__append,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__input,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__native,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__prefix,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__prepend,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__suffix{color:#000;color:var(--q-color-light-text)}.q-field--dark-auto.q-field--standout.q-field--readonly .q-field__control:before{border-color:hsla(0,0%,100%,0.24)}}.q-file .q-field__native{word-break:break-all}.q-file .q-field__input{opacity:0!important}.q-file .q-field__input::-webkit-file-upload-button{cursor:pointer}.q-file__filler{visibility:hidden;width:100%;border:none;padding:0}.q-file__dnd{outline:1px dashed currentColor;outline-offset:-4px}.q-form,.q-img{position:relative}.q-img{width:100%;display:inline-block;vertical-align:middle}.q-img__loading .q-spinner{font-size:50px}.q-img__image{border-radius:inherit;background-repeat:no-repeat}.q-img__content{overflow:hidden;border-radius:inherit}.q-img__content>div{position:absolute;padding:16px;color:#fff;background:rgba(0,0,0,0.47)}.q-img--menu .q-img__image{pointer-events:none}.q-img--menu .q-img__image>img{pointer-events:all;opacity:0}.q-img--menu .q-img__content{pointer-events:none}.q-img--menu .q-img__content>div{pointer-events:all}.q-inner-loading{background:hsla(0,0%,100%,0.6)}.q-inner-loading--dark{background:rgba(0,0,0,0.4)}.q-inner-loading__label{margin-top:8px}@media (prefers-color-scheme:dark){.q-inner-loading--dark-auto{background:rgba(0,0,0,0.4)}}.q-textarea .q-field__control{min-height:56px;height:auto}.q-textarea .q-field__control-container{padding-top:2px;padding-bottom:2px}.q-textarea .q-field__shadow{top:2px;bottom:2px}.q-textarea .q-field__native,.q-textarea .q-field__prefix,.q-textarea .q-field__suffix{line-height:18px}.q-textarea .q-field__native{resize:vertical;padding-top:17px;min-height:52px}.q-textarea.q-field--labeled--std .q-field__control-container{padding-top:26px}.q-textarea.q-field--labeled--std .q-field__shadow{top:26px}.q-textarea.q-field--labeled--std .q-field__native,.q-textarea.q-field--labeled--std .q-field__prefix,.q-textarea.q-field--labeled--std .q-field__suffix{padding-top:0}.q-textarea.q-field--labeled--std .q-field__native{min-height:26px;padding-top:1px}.q-textarea--autogrow .q-field__native{resize:none}.q-textarea.q-field--dense .q-field__control,.q-textarea.q-field--dense .q-field__native{min-height:36px}.q-textarea.q-field--dense .q-field__native{padding-top:9px}.q-textarea.q-field--dense.q-field--labeled--std .q-field__control-container{padding-top:14px}.q-textarea.q-field--dense.q-field--labeled--std .q-field__shadow{top:14px}.q-textarea.q-field--dense.q-field--labeled--std .q-field__native{min-height:24px;padding-top:3px}.q-textarea.q-field--dense.q-field--labeled--std .q-field__prefix,.q-textarea.q-field--dense.q-field--labeled--std .q-field__suffix{padding-top:2px}.q-textarea.disabled .q-field__native,body.mobile .q-textarea .q-field__native{resize:none}.q-intersection{position:relative}.q-item{min-height:48px;padding:8px 16px;color:inherit;transition:color 0.3s,background-color 0.3s}.q-item__section--side{color:#757575;align-items:flex-start;padding-right:16px;width:auto;min-width:0;max-width:100%}.q-item__section--side>.q-icon{font-size:24px}.q-item__section--side>.q-avatar{font-size:40px}.q-item__section--avatar{color:inherit;min-width:56px}.q-item__section--thumbnail img{width:100px;height:56px}.q-item__section--nowrap{white-space:nowrap}.q-item>.q-focus-helper+.q-item__section--thumbnail,.q-item>.q-item__section--thumbnail:first-child{margin-left:-16px}.q-item>.q-item__section--thumbnail:last-of-type{margin-right:-16px}.q-item__label{line-height:1.2em!important;max-width:100%}.q-item__label--overline{color:rgba(0,0,0,0.7)}.q-item__label--caption{color:rgba(0,0,0,0.54)}.q-item__label--header{color:#757575;padding:16px;font-size:0.875rem;line-height:1.25rem;letter-spacing:0.01786em}.q-list--padding .q-item__label--header,.q-separator--spaced+.q-item__label--header{padding-top:8px}.q-item__label+.q-item__label{margin-top:4px}.q-item__section--main{width:auto;min-width:0;max-width:100%;flex:10000 1 0%}.q-item__section--main+.q-item__section--main{margin-left:8px}.q-item__section--main~.q-item__section--side{align-items:flex-end;padding-right:0;padding-left:16px}.q-item__section--main.q-item__section--thumbnail{margin-left:0;margin-right:-16px}.q-list--bordered{border:1px solid rgba(0,0,0,0.12)}.q-list--separator>.q-item-type+.q-item-type,.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top:1px solid rgba(0,0,0,0.12)}.q-list--padding{padding:8px 0}.q-item--dense,.q-list--dense>.q-item{min-height:32px;padding:2px 16px}.q-list--dark.q-list--separator>.q-item-type+.q-item-type,.q-list--dark.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top-color:hsla(0,0%,100%,0.28)}.q-item--dark,.q-list--dark{color:#fff;color:var(--q-color-dark-text);border-color:hsla(0,0%,100%,0.28)}.q-item--dark .q-item__section--side:not(.q-item__section--avatar),.q-list--dark .q-item__section--side:not(.q-item__section--avatar){color:hsla(0,0%,100%,0.7)}.q-item--dark .q-item__label--header,.q-list--dark .q-item__label--header{color:hsla(0,0%,100%,0.64)}.q-item--dark .q-item__label--caption,.q-item--dark .q-item__label--overline,.q-list--dark .q-item__label--caption,.q-list--dark .q-item__label--overline{color:hsla(0,0%,100%,0.8)}.q-item{position:relative}.q-item--active,.q-item.q-router-link--active{color:#1976d2;color:var(--q-color-primary)}@media (prefers-color-scheme:dark){.q-list--dark-auto.q-list--separator>.q-item-type+.q-item-type,.q-list--dark-auto.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top-color:hsla(0,0%,100%,0.28)}.q-item--dark-auto,.q-list--dark-auto{color:#fff;color:var(--q-color-dark-text);border-color:hsla(0,0%,100%,0.28)}.q-item--dark-auto .q-item__section--side:not(.q-item__section--avatar),.q-list--dark-auto .q-item__section--side:not(.q-item__section--avatar){color:hsla(0,0%,100%,0.7)}.q-item--dark-auto .q-item__label--header,.q-list--dark-auto .q-item__label--header{color:hsla(0,0%,100%,0.64)}.q-item--dark-auto .q-item__label--caption,.q-item--dark-auto .q-item__label--overline,.q-list--dark-auto .q-item__label--caption,.q-list--dark-auto .q-item__label--overline{color:hsla(0,0%,100%,0.8)}}.q-knob{font-size:48px}.q-knob--editable{cursor:pointer;outline:0}.q-knob--editable:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;box-shadow:none;transition:box-shadow 0.24s ease-in-out}.q-knob--editable:focus:before{box-shadow:0 2px 4px -1px rgba(0,0,0,0.2),0 4px 5px rgba(0,0,0,0.14),0 1px 10px rgba(0,0,0,0.12)}.q-layout{width:100%}.q-layout-container{position:relative;width:100%;height:100%}.q-layout-container .q-layout{min-height:100%}.q-layout-container>div{contain:layout size;contain:layout size style;transform:translateZ(0)}.q-layout-container>div>div{min-height:0;max-height:100%}.q-layout__shadow{width:100%}.q-layout__shadow:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:0 0 10px 2px rgba(0,0,0,0.2),0 0px 10px rgba(0,0,0,0.24)}.q-layout__section--marginal{background-color:#1976d2;background-color:var(--q-color-primary);color:#fff;color:var(--q-color-dark-text)}.q-header--hidden{transform:translateY(-110%)}.q-header--bordered{border-bottom:1px solid rgba(0,0,0,0.12)}.q-header .q-layout__shadow{bottom:-10px}.q-header .q-layout__shadow:after{bottom:10px}.q-footer--hidden{transform:translateY(110%)}.q-footer--bordered{border-top:1px solid rgba(0,0,0,0.12)}.q-footer .q-layout__shadow{top:-10px}.q-footer .q-layout__shadow:after{top:10px}.q-footer,.q-header{z-index:2000}.q-drawer{position:absolute;top:0;bottom:0;z-index:1000;contain:layout size;contain:layout size style}.q-drawer--on-top{z-index:3000}.q-drawer--left{left:0;transform:translateX(-100%)}.q-drawer--left.q-drawer--bordered{border-right:1px solid rgba(0,0,0,0.12)}.q-drawer--left .q-layout__shadow{left:10px;right:-10px}.q-drawer--left .q-layout__shadow:after{right:10px}.q-drawer--right{right:0;transform:translateX(100%)}.q-drawer--right.q-drawer--bordered{border-left:1px solid rgba(0,0,0,0.12)}.q-drawer--right .q-layout__shadow{left:-10px}.q-drawer--right .q-layout__shadow:after{left:10px}.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini{padding:0!important}.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section{text-align:center;justify-content:center;padding-left:0;padding-right:0;min-width:0}.q-drawer--mini .q-expansion-item__content,.q-drawer--mini .q-mini-drawer-hide,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__label,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--main,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--side~.q-item__section--side{display:none}.q-drawer--mini-animate .q-drawer__content{overflow-x:hidden;white-space:nowrap}.q-drawer--mobile .q-mini-drawer-hide,.q-drawer--mobile .q-mini-drawer-only,.q-drawer--standard .q-mini-drawer-only{display:none}.q-drawer__backdrop{z-index:2999!important;will-change:opacity;opacity:0;background:#000;background:var(--q-color-backdrop-background)}.q-drawer__opener{z-index:2001;height:100%;width:15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.q-footer,.q-header,.q-layout,.q-page{position:relative}.q-page-sticky--shrink{pointer-events:none}.q-page-sticky--shrink>div{display:inline-block;pointer-events:auto}body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content,body.q-ios-padding .q-layout--standard .q-header>.q-tabs:first-child .q-tabs-head,body.q-ios-padding .q-layout--standard .q-header>.q-toolbar:first-child{padding-top:20px;min-height:70px;padding-top:env(safe-area-inset-top);min-height:calc(env(safe-area-inset-top) + 50px)}body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content,body.q-ios-padding .q-layout--standard .q-footer>.q-tabs:last-child .q-tabs-head,body.q-ios-padding .q-layout--standard .q-footer>.q-toolbar:last-child{padding-bottom:env(safe-area-inset-bottom);min-height:calc(env(safe-area-inset-bottom) + 50px)}.q-body--layout-animate .q-drawer__backdrop{transition:opacity 0.12s!important}.q-body--layout-animate .q-drawer{transition:transform 0.12s,width 0.12s,top 0.12s,bottom 0.12s!important}.q-body--layout-animate .q-layout__section--marginal{transition:transform 0.12s,left 0.12s,right 0.12s!important}.q-body--layout-animate .q-page-container{transition:padding-top 0.12s,padding-right 0.12s,padding-bottom 0.12s,padding-left 0.12s!important}.q-body--layout-animate .q-page-sticky{transition:transform 0.12s,left 0.12s,right 0.12s,top 0.12s,bottom 0.12s!important}body:not(.q-body--layout-animate) .q-layout--prevent-focus{visibility:hidden}.q-body--drawer-toggle{overflow-x:hidden!important}@media (max-width:599.98px){.q-layout-padding{padding:8px}}@media (min-width:600px) and (max-width:1439.98px){.q-layout-padding{padding:16px}}@media (min-width:1440px){.q-layout-padding{padding:24px}}body.body--dark .q-drawer,body.body--dark .q-footer,body.body--dark .q-header{border-color:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){body.body--dark-auto .q-drawer,body.body--dark-auto .q-footer,body.body--dark-auto .q-header{border-color:hsla(0,0%,100%,0.28)}}body.platform-ios .q-layout--containerized{position:unset!important}.q-linear-progress{position:relative;width:100%;overflow:hidden;font-size:4px;height:1em;color:#1976d2;color:var(--q-color-primary);transform:scale3d(1,1,1)}.q-linear-progress__model,.q-linear-progress__track{transform-origin:0 0}.q-linear-progress__model--with-transition,.q-linear-progress__track--with-transition{transition:transform 0.3s}.q-linear-progress--reverse .q-linear-progress__model,.q-linear-progress--reverse .q-linear-progress__track{transform-origin:0 100%}.q-linear-progress__model--determinate{background:currentColor}.q-linear-progress__model--indeterminate,.q-linear-progress__model--query{transition:none}.q-linear-progress__model--indeterminate:after,.q-linear-progress__model--indeterminate:before,.q-linear-progress__model--query:after,.q-linear-progress__model--query:before{background:currentColor;content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:0 0}.q-linear-progress__model--indeterminate:before,.q-linear-progress__model--query:before{-webkit-animation:q-linear-progress--indeterminate 2.1s cubic-bezier(0.65,0.815,0.735,0.395) infinite;animation:q-linear-progress--indeterminate 2.1s cubic-bezier(0.65,0.815,0.735,0.395) infinite}.q-linear-progress__model--indeterminate:after,.q-linear-progress__model--query:after{transform:translate3d(-101%,0,0) scale3d(1,1,1);-webkit-animation:q-linear-progress--indeterminate-short 2.1s cubic-bezier(0.165,0.84,0.44,1) infinite;animation:q-linear-progress--indeterminate-short 2.1s cubic-bezier(0.165,0.84,0.44,1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}.q-linear-progress__track{opacity:0.4}.q-linear-progress__track--dark-auto,.q-linear-progress__track--light{background:rgba(0,0,0,0.26)}.q-linear-progress__track--dark{background:hsla(0,0%,100%,0.6)}.q-linear-progress__stripe{transition:width 0.3s;background-image:linear-gradient(45deg,hsla(0,0%,100%,0.15) 25%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0) 50%,hsla(0,0%,100%,0.15) 0,hsla(0,0%,100%,0.15) 75%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))!important;background-size:40px 40px!important}@media (prefers-color-scheme:dark){.q-linear-progress__track--dark-auto{background:hsla(0,0%,100%,0.6)}}.q-menu{display:inline-block;max-width:95vw;max-height:65vh;outline:0;border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);background:#fff;opacity:0}.q-menu__container{position:fixed;z-index:6000;contain:layout;contain:layout style}.q-menu--square{border-radius:0}.q-option-group--inline>div{display:inline-block}.q-pagination input{text-align:center;-moz-appearance:textfield}.q-pagination input::-webkit-inner-spin-button,.q-pagination input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.q-pagination__content{--q-pagination-gutter-parent:-2px;--q-pagination-gutter-child:2px;margin-top:var(--q-pagination-gutter-parent);margin-left:var(--q-pagination-gutter-parent)}.q-pagination__content>.q-btn,.q-pagination__content>.q-input,.q-pagination__middle>.q-btn{margin-top:var(--q-pagination-gutter-child);margin-left:var(--q-pagination-gutter-child)}.q-parallax{position:relative;width:100%;overflow:hidden;border-radius:inherit}.q-parallax__media>img,.q-parallax__media>video{position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;will-change:transform;display:none}.q-popup-edit{padding:8px 16px}.q-popup-edit__buttons{margin-top:8px}.q-popup-edit__buttons .q-btn+.q-btn{margin-left:8px}.q-pull-to-refresh{position:relative}.q-pull-to-refresh__puller{border-radius:50%;width:40px;height:40px;color:#1976d2;color:var(--q-color-primary);background:#fff;background:var(--q-color-light-page);box-shadow:0 0 4px 0 rgba(0,0,0,0.3)}.q-pull-to-refresh__puller--animating{transition:transform 0.3s,opacity 0.3s}.q-radio{vertical-align:middle}.q-radio__native{width:1px;height:1px}.q-radio__bg,.q-radio__icon-container{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.q-radio__bg{top:25%;left:25%;width:50%;height:50%;-webkit-print-color-adjust:exact}.q-radio__bg path{fill:currentColor}.q-radio__icon{color:currentColor;font-size:0.5em}.q-radio__check{transform-origin:50% 50%;transform:scale3d(0,0,1);transition:transform 0.22s cubic-bezier(0,0,0.2,1) 0ms}.q-radio__inner{font-size:40px;width:1em;min-width:1em;height:1em;outline:0;border-radius:50%;color:rgba(0,0,0,0.54)}.q-radio__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-radio__inner--truthy .q-radio__check{transform:scale3d(1,1,1)}.q-radio.disabled{opacity:0.75!important}.q-radio--dark .q-radio__inner{color:hsla(0,0%,100%,0.7)}.q-radio--dark .q-radio__inner:before{opacity:0.32!important}.q-radio--dark .q-radio__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-radio--dense .q-radio__inner{width:0.5em;min-width:0.5em;height:0.5em}.q-radio--dense .q-radio__bg{left:0;top:0;width:100%;height:100%}.q-radio--dense .q-radio__label{padding-left:0.5em}.q-radio--dense.reverse .q-radio__label{padding-left:0;padding-right:0.5em}body.desktop .q-radio:not(.disabled) .q-radio__inner:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:currentColor;opacity:0.12;transform:scale3d(0,0,1);transition:transform 0.22s cubic-bezier(0,0,0.2,1) 0ms}body.desktop .q-radio:not(.disabled):focus .q-radio__inner:before,body.desktop .q-radio:not(.disabled):hover .q-radio__inner:before{transform:scale3d(1,1,1)}body.desktop .q-radio--dense:not(.disabled):focus .q-radio__inner:before,body.desktop .q-radio--dense:not(.disabled):hover .q-radio__inner:before{transform:scale3d(1.5,1.5,1)}@media (prefers-color-scheme:dark){.q-radio--dark-auto .q-radio__inner{color:hsla(0,0%,100%,0.7)}.q-radio--dark-auto .q-radio__inner:before{opacity:0.32!important}.q-radio--dark-auto .q-radio__inner--truthy{color:#1976d2;color:var(--q-color-primary)}}.q-rating{color:#ffeb3b;vertical-align:middle}.q-rating__icon-container{height:1em;outline:0}.q-rating__icon-container+.q-rating__icon-container{margin-left:2px}.q-rating__icon{color:currentColor;text-shadow:0 1px 3px rgba(0,0,0,0.12),0 1px 2px rgba(0,0,0,0.24);position:relative;opacity:0.4;transition:transform 0.2s ease-in,opacity 0.2s ease-in}.q-rating__icon--hovered{transform:scale(1.3)}.q-rating__icon--active{opacity:1}.q-rating__icon--exselected{opacity:0.7}.q-rating--no-dimming .q-rating__icon{opacity:1}.q-rating--editable .q-rating__icon-container{cursor:pointer}.q-responsive{position:relative;max-width:100%;max-height:100%}.q-responsive__filler{width:inherit;max-width:inherit;height:inherit;max-height:inherit}.q-responsive__content{border-radius:inherit}.q-responsive__content>*{width:100%!important;height:100%!important;max-height:100%!important;max-width:100%!important}.q-scrollarea{position:relative;contain:strict}.q-scrollarea__bar,.q-scrollarea__thumb{opacity:0.2;transition:opacity 0.3s;will-change:opacity;cursor:-webkit-grab;cursor:grab}.q-scrollarea__bar--v,.q-scrollarea__thumb--v{right:0;width:10px}.q-scrollarea__bar--h,.q-scrollarea__thumb--h{bottom:0;height:10px}.q-scrollarea__bar--invisible,.q-scrollarea__thumb--invisible{opacity:0!important;pointer-events:none}.q-scrollarea__thumb{background:#121212;background:var(--q-color-dark-page)}.q-scrollarea__thumb:hover{opacity:0.3}.q-scrollarea__thumb:active{opacity:0.5}.q-scrollarea__content{min-height:100%;min-width:100%}.q-scrollarea--dark .q-scrollarea__thumb{background:#fff;background:var(--q-color-dark-text)}@media (prefers-color-scheme:dark){.q-scrollarea--dark-auto .q-scrollarea__thumb{background:#fff;background:var(--q-color-dark-text)}}.q-select--without-input .q-field__control{cursor:pointer}.q-select--with-input .q-field__control{cursor:text}.q-select--with-chips .q-field__input{margin:7px 0}.q-select--with-chips.q-field--labeled .q-field__native{margin-top:-6px;padding-bottom:0}.q-select--with-chips.q-field--dense .q-chip--dense{margin:1px 4px;height:20px}.q-select--with-chips.q-field--dense .q-field__input{margin:0}.q-select--with-chips.q-field--dense.q-field--labeled .q-field__native{margin-top:0}.q-select .q-field__input{min-width:50px!important;cursor:text}.q-select .q-field__input--padding{padding-left:4px}.q-select__autocomplete-input,.q-select__focus-target{position:absolute;outline:0!important;width:1px;height:1px;padding:0;border:0;opacity:0}.q-select__dropdown-icon{cursor:pointer;transition:transform 0.28s}.q-select__close-icon{cursor:pointer}.q-select__close-icon:not(:last-child){margin-right:12px}.q-select.q-field--readonly .q-field__control,.q-select.q-field--readonly .q-select__dropdown-icon{cursor:default}.q-select__dialog{width:90vw!important;max-width:90vw!important;max-height:calc(100vh - 70px)!important;display:flex;flex-direction:column}.q-select__dialog>.scroll{position:relative;background:inherit}body.platform-android.native-mobile .q-dialog__inner--top .q-select__dialog{max-height:calc(100vh - 24px)!important}body.platform-android:not(.native-mobile) .q-select__dialog{max-height:calc(100vh - 108px)!important}body.platform-android:not(.native-mobile) .q-dialog__inner--top .q-select__dialog{max-height:calc(100vh - 62px)!important}body.platform-ios.native-mobile .q-dialog__inner--top>div{border-radius:4px}body.platform-ios.native-mobile .q-dialog__inner--top .q-select__dialog--focused{max-height:47vh!important}body.platform-ios:not(.native-mobile) .q-select__dialog{max-height:calc(100vh - 164px)!important}body.platform-ios:not(.native-mobile) .q-dialog__inner--top .q-select__dialog--focused{max-height:48vh!important}.q-separator{border:0;background:rgba(0,0,0,0.12);margin:0;transition:background 0.3s,opacity 0.3s;flex-shrink:0}.q-separator--dark{background:hsla(0,0%,100%,0.28)}.q-separator--horizontal{display:block;height:1px}.q-separator--horizontal-inset{margin-left:16px;margin-right:16px}.q-separator--horizontal-item-inset{margin-left:72px;margin-right:0}.q-separator--horizontal-item-thumbnail-inset{margin-left:116px;margin-right:0}.q-separator--vertical{width:1px;height:auto;align-self:stretch}.q-separator--vertical-inset{margin-top:8px;margin-bottom:8px}@media (prefers-color-scheme:dark){.q-separator--dark-auto{background:hsla(0,0%,100%,0.28)}}.q-skeleton{background:rgba(0,0,0,0.12);border-radius:4px;box-sizing:border-box}.q-skeleton--anim{cursor:wait}.q-skeleton:before{content:"\00a0"}.q-skeleton--type-text{transform:scale(1,0.5)}.q-skeleton--type-circle,.q-skeleton--type-QAvatar{height:48px;width:48px;border-radius:50%}.q-skeleton--type-QBtn{width:90px;height:36px}.q-skeleton--type-QBadge{width:70px;height:16px}.q-skeleton--type-QChip{width:90px;height:28px;border-radius:16px}.q-skeleton--type-QToolbar{height:50px}.q-skeleton--type-QCheckbox,.q-skeleton--type-QRadio{width:40px;height:40px;border-radius:50%}.q-skeleton--type-QToggle{width:56px;height:40px;border-radius:7px}.q-skeleton--type-QRange,.q-skeleton--type-QSlider{height:40px}.q-skeleton--type-QInput{height:56px}.q-skeleton--bordered{border:1px solid rgba(0,0,0,0.05)}.q-skeleton--square{border-radius:0}.q-skeleton--anim-fade{-webkit-animation:q-skeleton--fade 1.5s linear 0.5s infinite;animation:q-skeleton--fade 1.5s linear 0.5s infinite}.q-skeleton--anim-pulse{-webkit-animation:q-skeleton--pulse 1.5s ease-in-out 0.5s infinite;animation:q-skeleton--pulse 1.5s ease-in-out 0.5s infinite}.q-skeleton--anim-pulse-x{-webkit-animation:q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite;animation:q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite}.q-skeleton--anim-pulse-y{-webkit-animation:q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite;animation:q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite}.q-skeleton--anim-blink,.q-skeleton--anim-pop,.q-skeleton--anim-wave{position:relative;overflow:hidden;z-index:1}.q-skeleton--anim-blink:after,.q-skeleton--anim-pop:after,.q-skeleton--anim-wave:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:0}.q-skeleton--anim-blink:after{background:hsla(0,0%,100%,0.7);-webkit-animation:q-skeleton--fade 1.5s linear 0.5s infinite;animation:q-skeleton--fade 1.5s linear 0.5s infinite}.q-skeleton--anim-wave:after{background:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0.5),hsla(0,0%,100%,0));-webkit-animation:q-skeleton--wave 1.5s linear 0.5s infinite;animation:q-skeleton--wave 1.5s linear 0.5s infinite}.q-skeleton--dark{background:hsla(0,0%,100%,0.05)}.q-skeleton--dark.q-skeleton--bordered{border:1px solid hsla(0,0%,100%,0.25)}.q-skeleton--dark.q-skeleton--anim-wave:after{background:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0.1),hsla(0,0%,100%,0))}.q-skeleton--dark.q-skeleton--anim-blink:after{background:hsla(0,0%,100%,0.2)}@media (prefers-color-scheme:dark){.q-skeleton--dark-auto{background:hsla(0,0%,100%,0.05)}.q-skeleton--dark-auto.q-skeleton--bordered{border:1px solid hsla(0,0%,100%,0.25)}.q-skeleton--dark-auto.q-skeleton--anim-wave:after{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,0.1),transparent)}.q-skeleton--dark-auto.q-skeleton--anim-blink:after{background:hsla(0,0%,100%,0.2)}}.q-slide-item{position:relative}.q-slide-item__bottom,.q-slide-item__left,.q-slide-item__right,.q-slide-item__top{visibility:hidden;font-size:14px;color:#fff;color:var(--q-color-dark-text)}.q-slide-item__bottom .q-icon,.q-slide-item__left .q-icon,.q-slide-item__right .q-icon,.q-slide-item__top .q-icon{font-size:1.714em}.q-slide-item__left{background:#4caf50;padding:8px 16px}.q-slide-item__left>div{transform-origin:left center}.q-slide-item__right{background:#ff9800;padding:8px 16px}.q-slide-item__right>div{transform-origin:right center}.q-slide-item__top{background:#2196f3;padding:16px 8px}.q-slide-item__top>div{transform-origin:top center}.q-slide-item__bottom{background:#9c27b0;padding:16px 8px}.q-slide-item__bottom>div{transform-origin:bottom center}.q-slide-item__content{background:inherit;transition:transform 0.2s ease-in;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.q-slider{position:relative}.q-slider--h{width:100%}.q-slider--v{height:200px}.q-slider--editable .q-slider__track-container{cursor:-webkit-grab;cursor:grab}.q-slider__track-container{outline:0}.q-slider__track-container--h{width:100%;padding:12px 0}.q-slider__track-container--h .q-slider__selection{will-change:width,left}.q-slider__track-container--v{height:100%;padding:0 12px}.q-slider__track-container--v .q-slider__selection{will-change:height,top}.q-slider__track{color:#1976d2;color:var(--q-color-primary);background:rgba(0,0,0,0.1);border-radius:4px;width:inherit;height:inherit}.q-slider__inner{background:rgba(0,0,0,0.1)}.q-slider__inner,.q-slider__selection{border-radius:inherit;width:100%;height:100%}.q-slider__selection{background:currentColor}.q-slider__markers{color:rgba(0,0,0,0.3);border-radius:inherit;width:100%;height:100%}.q-slider__markers:after{content:"";position:absolute;background:currentColor}.q-slider__markers--h{background-image:repeating-linear-gradient(90deg,currentColor,currentColor 2px,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))}.q-slider__markers--h:after{height:100%;width:2px;top:0;right:0}.q-slider__markers--v{background-image:repeating-linear-gradient(180deg,currentColor,currentColor 2px,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))}.q-slider__markers--v:after{width:100%;height:2px;left:0;bottom:0}.q-slider__marker-labels-container{position:relative;width:100%;height:100%;min-height:24px;min-width:24px}.q-slider__marker-labels{position:absolute}.q-slider__marker-labels--h-standard{top:0}.q-slider__marker-labels--h-switched{bottom:0}.q-slider__marker-labels--h-ltr{transform:translateX(-50%)}.q-slider__marker-labels--h-rtl{transform:translateX(50%)}.q-slider__marker-labels--v-standard{left:4px}.q-slider__marker-labels--v-switched{right:4px}.q-slider__marker-labels--v-ltr{transform:translateY(-50%)}.q-slider__marker-labels--v-rtl{transform:translateY(50%)}.q-slider__thumb{z-index:1;outline:0;color:#1976d2;color:var(--q-color-primary);transition:transform 0.18s ease-out,fill 0.18s ease-out,stroke 0.18s ease-out}.q-slider__thumb.q-slider--focus{opacity:1!important}.q-slider__thumb--wrong-value{opacity:0}.q-slider__thumb--h{top:50%;will-change:left}.q-slider__thumb--h-ltr{transform:translate(-50%,-50%)}.q-slider__thumb--h-rtl{transform:translate(50%,-50%)}.q-slider__thumb--v{left:50%;will-change:top}.q-slider__thumb--v-ltr{transform:translate(-50%,-50%)}.q-slider__thumb--v-rtl{transform:translate(-50%,50%)}.q-slider__thumb-shape{top:0;left:0;stroke-width:3.5;stroke:currentColor;transition:transform 0.28s}.q-slider__thumb-shape path{stroke:currentColor;fill:currentColor}.q-slider__focus-ring{border-radius:50%;opacity:0;transition:transform 266.67ms ease-out,opacity 266.67ms ease-out,background-color 266.67ms ease-out;transition-delay:0.14s}.q-slider__pin{opacity:0;white-space:nowrap;transition:opacity 0.28s ease-out;transition-delay:0.14s}.q-slider__pin:before{content:"";width:0;height:0;position:absolute}.q-slider__pin--h:before{border-left:6px solid transparent;border-right:6px solid transparent;left:50%;transform:translateX(-50%)}.q-slider__pin--h-standard{bottom:100%}.q-slider__pin--h-standard:before{bottom:2px;border-top:6px solid currentColor}.q-slider__pin--h-switched{top:100%}.q-slider__pin--h-switched:before{top:2px;border-bottom:6px solid currentColor}.q-slider__pin--v{top:0}.q-slider__pin--v:before{top:50%;transform:translateY(-50%);border-top:6px solid transparent;border-bottom:6px solid transparent}.q-slider__pin--v-standard{left:100%}.q-slider__pin--v-standard:before{left:2px;border-right:6px solid currentColor}.q-slider__pin--v-switched{right:100%}.q-slider__pin--v-switched:before{right:2px;border-left:6px solid currentColor}.q-slider__label{z-index:1;white-space:nowrap;position:absolute}.q-slider__label--h{left:50%;transform:translateX(-50%)}.q-slider__label--h-standard{bottom:7px}.q-slider__label--h-switched{top:7px}.q-slider__label--v{top:50%;transform:translateY(-50%)}.q-slider__label--v-standard{left:7px}.q-slider__label--v-switched{right:7px}.q-slider__text-container{min-height:25px;padding:2px 8px;border-radius:4px;background:currentColor;position:relative;text-align:center}.q-slider__text{color:#fff;color:var(--q-color-dark-text);font-size:12px}.q-slider--no-value .q-slider__inner,.q-slider--no-value .q-slider__selection,.q-slider--no-value .q-slider__thumb{opacity:0}.q-slider--focus .q-slider__focus-ring,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__focus-ring{background:currentColor;transform:scale3d(1.55,1.55,1);opacity:0.25}.q-slider--focus .q-slider__inner,.q-slider--focus .q-slider__selection,.q-slider--focus .q-slider__thumb,.q-slider--no-value:focus-within .q-slider__inner,.q-slider--no-value:focus-within .q-slider__selection,.q-slider--no-value:focus-within .q-slider__thumb,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__inner,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__selection,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__thumb{opacity:1}.q-slider--inactive .q-slider__thumb--h{transition:left 0.28s,right 0.28s}.q-slider--inactive .q-slider__thumb--v{transition:top 0.28s,bottom 0.28s}.q-slider--inactive .q-slider__selection{transition:width 0.28s,left 0.28s,right 0.28s,height 0.28s,top 0.28s,bottom 0.28s}.q-slider--inactive .q-slider__text-container{transition:transform 0.28s}.q-slider--active{cursor:-webkit-grabbing;cursor:grabbing}.q-slider--active .q-slider__thumb-shape{transform:scale(1.5)}.q-slider--active.q-slider--label .q-slider__thumb-shape,.q-slider--active .q-slider__focus-ring{transform:scale(0)!important}.q-slider--label.q-slider--active .q-slider__pin,.q-slider--label .q-slider--focus .q-slider__pin,.q-slider--label.q-slider--label-always .q-slider__pin,body.desktop .q-slider.q-slider--enabled .q-slider__track-container:hover .q-slider__pin{opacity:1}.q-slider--dark .q-slider__inner,.q-slider--dark .q-slider__track{background:hsla(0,0%,100%,0.1)}.q-slider--dark .q-slider__markers{color:hsla(0,0%,100%,0.3)}.q-slider--dense .q-slider__track-container--h{padding:6px 0}.q-slider--dense .q-slider__track-container--v{padding:0 6px}@media (prefers-color-scheme:dark){.q-slider--dark-auto .q-slider__inner,.q-slider--dark-auto .q-slider__track{background:hsla(0,0%,100%,0.1)}.q-slider--dark-auto .q-slider__markers{color:hsla(0,0%,100%,0.3)}}.q-space{flex-grow:1!important}.q-spinner{vertical-align:middle}.q-spinner-mat{-webkit-animation:q-spin 2s linear infinite;animation:q-spin 2s linear infinite;transform-origin:center center}.q-spinner-mat .path{stroke-dasharray:1,200;stroke-dashoffset:0;-webkit-animation:q-mat-dash 1.5s ease-in-out infinite;animation:q-mat-dash 1.5s ease-in-out infinite}.q-splitter__panel{position:relative;z-index:0}.q-splitter__panel>.q-splitter{width:100%;height:100%}.q-splitter__separator{background-color:rgba(0,0,0,0.12);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;z-index:1}.q-splitter__separator-area>*{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.q-splitter--dark .q-splitter__separator{background-color:hsla(0,0%,100%,0.28)}.q-splitter--vertical>.q-splitter__panel{height:100%}.q-splitter--vertical.q-splitter--active{cursor:col-resize}.q-splitter--vertical>.q-splitter__separator{width:1px}.q-splitter--vertical>.q-splitter__separator>div{left:-6px;right:-6px}.q-splitter--vertical.q-splitter--workable>.q-splitter__separator{cursor:col-resize}.q-splitter--horizontal>.q-splitter__panel{width:100%}.q-splitter--horizontal.q-splitter--active{cursor:row-resize}.q-splitter--horizontal>.q-splitter__separator{height:1px}.q-splitter--horizontal>.q-splitter__separator>div{top:-6px;bottom:-6px}.q-splitter--horizontal.q-splitter--workable>.q-splitter__separator{cursor:row-resize}.q-splitter__after,.q-splitter__before{overflow:auto}@media (prefers-color-scheme:dark){.q-splitter--dark-auto .q-splitter__separator{background-color:hsla(0,0%,100%,0.28)}}.q-stepper{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px}.q-stepper__title{font-size:14px;line-height:18px;letter-spacing:0.1px}.q-stepper__caption{font-size:12px;line-height:14px}.q-stepper__dot{contain:layout;margin-right:8px;font-size:14px;width:24px;min-width:24px;height:24px;border-radius:50%;background:currentColor}.q-stepper__dot span{color:#fff;color:var(--q-color-dark-text)}.q-stepper__tab{padding:8px 24px;font-size:14px;color:#9e9e9e;flex-direction:row}.q-stepper__tab--navigation{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.q-stepper__tab--active,.q-stepper__tab--done{color:#1976d2;color:var(--q-color-primary)}.q-stepper__tab--active .q-stepper__dot,.q-stepper__tab--active .q-stepper__label,.q-stepper__tab--done .q-stepper__dot,.q-stepper__tab--done .q-stepper__label{text-shadow:0 0 0 currentColor}.q-stepper__tab--disabled .q-stepper__dot{background:rgba(0,0,0,0.22)}.q-stepper__tab--disabled .q-stepper__label{color:rgba(0,0,0,0.32)}.q-stepper__tab--error{color:#c10015;color:var(--q-color-negative)}.q-stepper__tab--error-with-icon .q-stepper__dot{background:transparent!important}.q-stepper__tab--error-with-icon .q-stepper__dot span{color:currentColor}.q-stepper__tab--error-with-icon .q-stepper__dot .q-icon{font-size:24px}.q-stepper__header{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-stepper__header--border{border-bottom:1px solid rgba(0,0,0,0.12)}.q-stepper__header--standard-labels .q-stepper__tab{min-height:72px;justify-content:center}.q-stepper__header--standard-labels .q-stepper__tab:first-child{justify-content:flex-start}.q-stepper__header--standard-labels .q-stepper__tab:last-child{justify-content:flex-end}.q-stepper__header--standard-labels .q-stepper__tab:only-child{justify-content:center}.q-stepper__header--standard-labels .q-stepper__dot:after{display:none}.q-stepper__header--alternative-labels .q-stepper__tab{min-height:104px;padding:24px 32px;flex-direction:column;justify-content:flex-start}.q-stepper__header--alternative-labels .q-stepper__dot{margin-right:0}.q-stepper__header--alternative-labels .q-stepper__label{margin-top:8px;text-align:center}.q-stepper__header--alternative-labels .q-stepper__label:after,.q-stepper__header--alternative-labels .q-stepper__label:before{display:none}.q-stepper__header--contracted,.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab{min-height:72px}.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:first-child{align-items:flex-start}.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:last-child{align-items:flex-end}.q-stepper__header--contracted .q-stepper__tab{padding:24px 0}.q-stepper__header--contracted .q-stepper__tab:first-child .q-stepper__dot{transform:translateX(24px)}.q-stepper__header--contracted .q-stepper__tab:last-child .q-stepper__dot{transform:translateX(-24px)}.q-stepper__header--contracted .q-stepper__tab:not(:last-child) .q-stepper__dot:after{display:block!important}.q-stepper__header--contracted .q-stepper__dot{margin:0}.q-stepper__header--contracted .q-stepper__label{display:none}.q-stepper__nav{padding-top:24px}.q-stepper--bordered{border:1px solid rgba(0,0,0,0.12)}.q-stepper--horizontal .q-stepper__step-inner{padding:24px}.q-stepper--horizontal .q-stepper__tab:first-child{border-top-left-radius:inherit}.q-stepper--horizontal .q-stepper__tab:last-child{border-top-right-radius:inherit}.q-stepper--horizontal .q-stepper__tab:first-child .q-stepper__dot:before,.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__dot:after,.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__label:after{display:none}.q-stepper--horizontal .q-stepper__tab{overflow:hidden}.q-stepper--horizontal .q-stepper__line{contain:layout}.q-stepper--horizontal .q-stepper__line:after,.q-stepper--horizontal .q-stepper__line:before{position:absolute;top:50%;height:1px;width:100vw;background:rgba(0,0,0,0.12)}.q-stepper--horizontal .q-stepper__dot:after,.q-stepper--horizontal .q-stepper__label:after{content:"";left:100%;margin-left:8px}.q-stepper--horizontal .q-stepper__dot:before{content:"";right:100%;margin-right:8px}.q-stepper--horizontal>.q-stepper__nav{padding:0 24px 24px}.q-stepper--vertical{padding:16px 0}.q-stepper--vertical .q-stepper__tab{padding:12px 24px}.q-stepper--vertical .q-stepper__title{line-height:18px}.q-stepper--vertical .q-stepper__step-inner{padding:0 24px 32px 60px}.q-stepper--vertical>.q-stepper__nav{padding:24px 24px 0}.q-stepper--vertical .q-stepper__step{overflow:hidden}.q-stepper--vertical .q-stepper__dot{margin-right:12px}.q-stepper--vertical .q-stepper__dot:after,.q-stepper--vertical .q-stepper__dot:before{content:"";position:absolute;left:50%;width:1px;height:99999px;background:rgba(0,0,0,0.12)}.q-stepper--vertical .q-stepper__dot:before{bottom:100%;margin-bottom:8px}.q-stepper--vertical .q-stepper__dot:after{top:100%;margin-top:8px}.q-stepper--vertical .q-stepper__step:first-child .q-stepper__dot:before,.q-stepper--vertical .q-stepper__step:last-child .q-stepper__dot:after{display:none}.q-stepper--vertical .q-stepper__step:last-child .q-stepper__step-inner{padding-bottom:8px}.q-stepper--dark .q-stepper__dot span{color:#000;color:var(--q-color-light-text)}.q-stepper--dark.q-stepper--bordered,.q-stepper--dark .q-stepper__header--border{border-color:hsla(0,0%,100%,0.28)}.q-stepper--dark.q-stepper--horizontal .q-stepper__line:after,.q-stepper--dark.q-stepper--horizontal .q-stepper__line:before,.q-stepper--dark.q-stepper--vertical .q-stepper__dot:after,.q-stepper--dark.q-stepper--vertical .q-stepper__dot:before{background:hsla(0,0%,100%,0.28)}.q-stepper--dark .q-stepper__tab--disabled{color:hsla(0,0%,100%,0.28)}.q-stepper--dark .q-stepper__tab--disabled .q-stepper__dot{background:hsla(0,0%,100%,0.28)}.q-stepper--dark .q-stepper__tab--disabled .q-stepper__label{color:hsla(0,0%,100%,0.54)}@media (prefers-color-scheme:dark){.q-stepper--dark-auto .q-stepper__dot span{color:#000;color:var(--q-color-light-text)}.q-stepper--dark-auto.q-stepper--bordered,.q-stepper--dark-auto .q-stepper__header--border{border-color:hsla(0,0%,100%,0.28)}.q-stepper--dark-auto.q-stepper--horizontal .q-stepper__line:after,.q-stepper--dark-auto.q-stepper--horizontal .q-stepper__line:before,.q-stepper--dark-auto.q-stepper--vertical .q-stepper__dot:after,.q-stepper--dark-auto.q-stepper--vertical .q-stepper__dot:before{background:hsla(0,0%,100%,0.28)}.q-stepper--dark-auto .q-stepper__tab--disabled{color:hsla(0,0%,100%,0.28)}.q-stepper--dark-auto .q-stepper__tab--disabled .q-stepper__dot{background:hsla(0,0%,100%,0.28)}.q-stepper--dark-auto .q-stepper__tab--disabled .q-stepper__label{color:hsla(0,0%,100%,0.54)}}.q-tab-panel{padding:16px}.q-markup-table{overflow:auto}.q-table{width:100%;max-width:100%;border-collapse:separate;border-spacing:0}.q-table tbody td,.q-table thead tr{height:48px}.q-table th{font-weight:500;font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.q-table th.sortable{cursor:pointer}.q-table th.sortable:hover .q-table__sort-icon{opacity:0.64}.q-table th.sorted .q-table__sort-icon{opacity:0.86!important}.q-table th.sort-desc .q-table__sort-icon{transform:rotate(180deg)}.q-table td,.q-table th{padding:7px 16px;background-color:inherit}.q-table td,.q-table th,.q-table thead{border-style:solid;border-width:0}.q-table tbody td{font-size:13px}.q-table__card{color:#000;color:var(--q-color-light-text);border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}.q-table__card .q-table__middle{flex:1 1 auto}.q-table__card .q-table__bottom,.q-table__card .q-table__top{flex:0 0 auto}.q-table__container{position:relative}.q-table__container.fullscreen{max-height:100%}.q-table__container>div:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-table__container>div:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.q-table__container>.q-inner-loading{border-radius:inherit!important}.q-table__top{padding:12px 16px}.q-table__top .q-table__control{flex-wrap:wrap}.q-table__title{font-size:20px;letter-spacing:0.005em;font-weight:400}.q-table__separator{min-width:8px!important}.q-table__progress{height:0!important}.q-table__progress th{padding:0!important;border:0!important}.q-table__progress .q-linear-progress{position:absolute;bottom:0}.q-table__middle{max-width:100%}.q-table__bottom{min-height:50px;padding:4px 14px 4px 16px;font-size:12px}.q-table__bottom .q-table__control{min-height:24px}.q-table__bottom-nodata-icon{font-size:200%;margin-right:8px}.q-table__bottom-item{margin-right:16px}.q-table__control{display:flex;align-items:center}.q-table__sort-icon{transition:transform 0.3s cubic-bezier(0.25,0.8,0.5,1);opacity:0;font-size:120%}.q-table__sort-icon--center,.q-table__sort-icon--left{margin-left:4px}.q-table__sort-icon--right{margin-right:4px}.q-table--col-auto-width{width:1px}.q-table--flat{box-shadow:none}.q-table--bordered{border:1px solid rgba(0,0,0,0.12)}.q-table--square{border-radius:0}.q-table__linear-progress{height:2px}.q-table--no-wrap td,.q-table--no-wrap th{white-space:nowrap}.q-table--grid{box-shadow:none;border-radius:4px}.q-table--grid .q-table__top{padding-bottom:4px}.q-table--grid .q-table__middle{min-height:2px;margin-bottom:4px}.q-table--grid .q-table__middle thead,.q-table--grid .q-table__middle thead th{border:0!important}.q-table--grid .q-table__linear-progress{bottom:0}.q-table--grid .q-table__bottom{border-top:0}.q-table--grid .q-table__grid-content{flex:1 1 auto}.q-table--grid.fullscreen{background:inherit}.q-table__grid-item-card{vertical-align:top;padding:12px}.q-table__grid-item-card .q-separator{margin:12px 0}.q-table__grid-item-row+.q-table__grid-item-row{margin-top:8px}.q-table__grid-item-title{opacity:0.54;font-weight:500;font-size:12px}.q-table__grid-item-value{font-size:13px}.q-table__grid-item{padding:4px;transition:transform 0.3s cubic-bezier(0.25,0.8,0.5,1)}.q-table__grid-item--selected{transform:scale(0.95)}.q-table--cell-separator tbody tr:not(:last-child)>td,.q-table--cell-separator thead th,.q-table--horizontal-separator tbody tr:not(:last-child)>td,.q-table--horizontal-separator thead th{border-bottom-width:1px}.q-table--cell-separator td,.q-table--cell-separator th,.q-table--vertical-separator td,.q-table--vertical-separator th{border-left-width:1px}.q-table--cell-separator.q-table--loading tr:nth-last-child(2) th,.q-table--cell-separator thead tr:last-child th,.q-table--vertical-separator.q-table--loading tr:nth-last-child(2) th,.q-table--vertical-separator thead tr:last-child th{border-bottom-width:1px}.q-table--cell-separator td:first-child,.q-table--cell-separator th:first-child,.q-table--vertical-separator td:first-child,.q-table--vertical-separator th:first-child{border-left:0}.q-table--cell-separator .q-table__top,.q-table--vertical-separator .q-table__top{border-bottom:1px solid rgba(0,0,0,0.12)}.q-table--dense .q-table__top{padding:6px 16px}.q-table--dense .q-table__bottom{min-height:33px}.q-table--dense .q-table__sort-icon{font-size:110%}.q-table--dense .q-table td,.q-table--dense .q-table th{padding:4px 8px}.q-table--dense .q-table tbody td,.q-table--dense .q-table tbody tr,.q-table--dense .q-table thead tr{height:28px}.q-table--dense .q-table td:first-child,.q-table--dense .q-table th:first-child{padding-left:16px}.q-table--dense .q-table td:last-child,.q-table--dense .q-table th:last-child{padding-right:16px}.q-table--dense .q-table__bottom-item{margin-right:8px}.q-table--dense .q-table__select .q-field__control,.q-table--dense .q-table__select .q-field__native{min-height:24px;padding:0}.q-table--dense .q-table__select .q-field__marginal{height:24px}.q-table__bottom{border-top:1px solid rgba(0,0,0,0.12)}.q-table td,.q-table th,.q-table thead,.q-table tr{border-color:rgba(0,0,0,0.12)}.q-table tbody td{position:relative}.q-table tbody td:after,.q-table tbody td:before{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}.q-table tbody td:before{background:rgba(0,0,0,0.03)}.q-table tbody td:after{background:rgba(0,0,0,0.06)}.q-table tbody tr.selected td:after,body.desktop .q-table>tbody>tr:not(.q-tr--no-hover):hover>td:not(.q-td--no-hover):before{content:""}.q-table--dark,.q-table--dark .q-table__bottom,.q-table--dark td,.q-table--dark th,.q-table--dark thead,.q-table--dark tr,.q-table__card--dark{border-color:hsla(0,0%,100%,0.28)}.q-table--dark tbody td:before{background:hsla(0,0%,100%,0.07)}.q-table--dark tbody td:after{background:hsla(0,0%,100%,0.1)}.q-table--dark.q-table--cell-separator .q-table__top,.q-table--dark.q-table--vertical-separator .q-table__top{border-color:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){.q-table--dark-auto,.q-table--dark-auto .q-table__bottom,.q-table--dark-auto td,.q-table--dark-auto th,.q-table--dark-auto thead,.q-table--dark-auto tr,.q-table__card--dark-auto{border-color:hsla(0,0%,100%,0.28)}.q-table--dark-auto tbody td:before{background:hsla(0,0%,100%,0.07)}.q-table--dark-auto tbody td:after{background:hsla(0,0%,100%,0.1)}.q-table--dark-auto.q-table--cell-separator .q-table__top,.q-table--dark-auto.q-table--vertical-separator .q-table__top{border-color:hsla(0,0%,100%,0.28)}}.q-tab{padding:0 16px;min-height:48px;transition:color 0.3s,background-color 0.3s;text-transform:uppercase;white-space:nowrap;color:inherit;text-decoration:none}.q-tab--full{min-height:72px}.q-tab--no-caps{text-transform:none}.q-tab__content{height:inherit;padding:4px 0;min-width:40px}.q-tab__content--inline .q-tab__icon+.q-tab__label{padding-left:8px}.q-tab__content .q-chip--floating{top:0;right:-16px}.q-tab__icon{width:24px;height:24px;font-size:24px}.q-tab__label{font-size:14px;line-height:1.715em;font-weight:500}.q-tab .q-badge{top:3px;right:-12px}.q-tab__alert,.q-tab__alert-icon{position:absolute}.q-tab__alert{top:7px;right:-9px;height:10px;width:10px;border-radius:50%;background:currentColor}.q-tab__alert-icon{top:2px;right:-12px;font-size:18px}.q-tab__indicator{opacity:0;height:2px;background:currentColor}.q-tab--active .q-tab__indicator{opacity:1;transform-origin:left}.q-tab--inactive{opacity:0.85}.q-tabs{position:relative;transition:color 0.3s,background-color 0.3s}.q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--horizontal{padding-left:36px;padding-right:36px}.q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--vertical{padding-top:36px;padding-bottom:36px}.q-tabs--scrollable.q-tabs__arrows--outside .q-tabs__arrow--faded{opacity:0.3;pointer-events:none}.q-tabs--not-scrollable .q-tabs__arrow,.q-tabs--scrollable.q-tabs__arrows--inside .q-tabs__arrow--faded{display:none}.q-tabs--not-scrollable .q-tabs__content{border-radius:inherit}.q-tabs__arrow{cursor:pointer;font-size:32px;min-width:36px;text-shadow:0 0 3px #fff,0 0 1px #fff,0 0 1px #000;transition:opacity 0.3s}.q-tabs__content{overflow:hidden;flex:1 1 auto}.q-tabs__content--align-center{justify-content:center}.q-tabs__content--align-right{justify-content:flex-end}.q-tabs__content--align-justify .q-tab{flex:1 1 auto}.q-tabs__offset{display:none}.q-tabs--horizontal .q-tabs__arrow{height:100%}.q-tabs--horizontal .q-tabs__arrow--start{top:0;left:0;bottom:0}.q-tabs--horizontal .q-tabs__arrow--end{top:0;right:0;bottom:0}.q-tabs--vertical,.q-tabs--vertical .q-tabs__content{display:block!important;height:100%}.q-tabs--vertical .q-tabs__arrow{width:100%;height:36px;text-align:center}.q-tabs--vertical .q-tabs__arrow--start{top:0;left:0;right:0}.q-tabs--vertical .q-tabs__arrow--end{left:0;right:0;bottom:0}.q-tabs--vertical .q-tab{padding:0 8px}.q-tabs--vertical .q-tab__indicator{height:unset;width:2px}.q-tabs--vertical.q-tabs--not-scrollable .q-tabs__content{height:100%}.q-tabs--vertical.q-tabs--dense .q-tab__content{min-width:24px}.q-tabs--dense .q-tab{min-height:36px}.q-tabs--dense .q-tab--full{min-height:52px}.q-time{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px;background:#fff;outline:0;width:290px;min-width:290px;max-width:100%}.q-time--bordered{border:1px solid rgba(0,0,0,0.12)}.q-time__header{border-top-left-radius:inherit;color:#fff;color:var(--q-color-dark-text);background-color:#1976d2;background-color:var(--q-color-primary);padding:16px;font-weight:300}.q-time__actions{padding:0 16px 16px}.q-time__header-label{font-size:28px;line-height:1;letter-spacing:-0.00833em}.q-time__header-label>div+div{margin-left:4px}.q-time__link{opacity:0.56;outline:0;transition:opacity 0.3s ease-out}.q-time__link--active,.q-time__link:focus,.q-time__link:hover{opacity:1}.q-time__header-ampm{font-size:16px;letter-spacing:0.1em}.q-time__content{padding:16px}.q-time__content:before{content:"";display:block;padding-bottom:100%}.q-time__container-parent{padding:16px}.q-time__container-child{border-radius:50%;background:rgba(0,0,0,0.12)}.q-time__clock{padding:24px;width:100%;height:100%;max-width:100%;max-height:100%;font-size:14px}.q-time__clock-circle{position:relative}.q-time__clock-center{height:6px;width:6px;margin:auto;border-radius:50%;min-height:0;background:currentColor}.q-time__clock-pointer{width:2px;height:50%;transform-origin:0 0;min-height:0;position:absolute;left:50%;right:0;bottom:0;color:#1976d2;color:var(--q-color-primary);background:currentColor;transform:translateX(-50%)}.q-time__clock-pointer:after,.q-time__clock-pointer:before{content:"";position:absolute;left:50%;border-radius:50%;background:currentColor;transform:translateX(-50%)}.q-time__clock-pointer:before{bottom:-4px;width:8px;height:8px}.q-time__clock-pointer:after{top:-3px;height:6px;width:6px}.q-time__clock-position{position:absolute;min-height:32px;width:32px;height:32px;font-size:12px;line-height:32px;margin:0;padding:0;transform:translate(-50%,-50%);border-radius:50%}.q-time__clock-position--disabled{opacity:0.4}.q-time__clock-position--active{background-color:#1976d2;background-color:var(--q-color-primary);color:#fff;color:var(--q-color-dark-text)}.q-time__clock-pos-0{top:0%;left:50%}.q-time__clock-pos-1{top:6.7%;left:75%}.q-time__clock-pos-2{top:25%;left:93.3%}.q-time__clock-pos-3{top:50%;left:100%}.q-time__clock-pos-4{top:75%;left:93.3%}.q-time__clock-pos-5{top:93.3%;left:75%}.q-time__clock-pos-6{top:100%;left:50%}.q-time__clock-pos-7{top:93.3%;left:25%}.q-time__clock-pos-8{top:75%;left:6.7%}.q-time__clock-pos-9{top:50%;left:0%}.q-time__clock-pos-10{top:25%;left:6.7%}.q-time__clock-pos-11{top:6.7%;left:25%}.q-time__clock-pos-12{top:15%;left:50%}.q-time__clock-pos-13{top:19.69%;left:67.5%}.q-time__clock-pos-14{top:32.5%;left:80.31%}.q-time__clock-pos-15{top:50%;left:85%}.q-time__clock-pos-16{top:67.5%;left:80.31%}.q-time__clock-pos-17{top:80.31%;left:67.5%}.q-time__clock-pos-18{top:85%;left:50%}.q-time__clock-pos-19{top:80.31%;left:32.5%}.q-time__clock-pos-20{top:67.5%;left:19.69%}.q-time__clock-pos-21{top:50%;left:15%}.q-time__clock-pos-22{top:32.5%;left:19.69%}.q-time__clock-pos-23{top:19.69%;left:32.5%}.q-time__now-button{background-color:#1976d2;background-color:var(--q-color-primary);color:#fff;color:var(--q-color-dark-text);top:12px;right:12px}.q-time--readonly .q-time__content,.q-time--readonly .q-time__header-ampm,.q-time.disabled .q-time__content,.q-time.disabled .q-time__header-ampm{pointer-events:none}.q-time--portrait{display:inline-flex;flex-direction:column}.q-time--portrait .q-time__header{border-top-right-radius:inherit;min-height:86px}.q-time--portrait .q-time__header-ampm{margin-left:12px}.q-time--portrait.q-time--bordered .q-time__content{margin:1px 0}.q-time--landscape{display:inline-flex;align-items:stretch;min-width:420px}.q-time--landscape>div{display:flex;flex-direction:column;justify-content:center}.q-time--landscape .q-time__header{border-bottom-left-radius:inherit;min-width:156px}.q-time--landscape .q-time__header-ampm{margin-top:12px}.q-time--dark{border-color:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){.q-time--dark-auto{border-color:hsla(0,0%,100%,0.28)}}.q-timeline{padding:0;width:100%;list-style:none}.q-timeline h6{line-height:inherit}.q-timeline--dark{color:#fff;color:var(--q-color-dark-text)}.q-timeline--dark .q-timeline__subtitle{opacity:0.7}.q-timeline__content{padding-bottom:24px}.q-timeline__title{margin-top:0;margin-bottom:16px}.q-timeline__subtitle{font-size:12px;margin-bottom:8px;opacity:0.6;text-transform:uppercase;letter-spacing:1px;font-weight:700}.q-timeline__dot{position:absolute;top:0;bottom:0;width:15px}.q-timeline__dot:after,.q-timeline__dot:before{content:"";background:currentColor;display:block;position:absolute}.q-timeline__dot:before{border:3px solid transparent;border-radius:100%;height:15px;width:15px;top:4px;left:0;transition:background 0.3s ease-in-out,border 0.3s ease-in-out}.q-timeline__dot:after{width:3px;opacity:0.4;top:24px;bottom:0;left:6px}.q-timeline__dot .q-icon{position:absolute;top:0;left:0;right:0;font-size:16px;height:38px;line-height:38px;width:100%;color:#fff;color:var(--q-color-dark-text)}.q-timeline__dot .q-icon>img,.q-timeline__dot .q-icon>svg{width:1em;height:1em}.q-timeline__dot-img{position:absolute;top:4px;left:0;right:0;height:31px;width:31px;background:currentColor;border-radius:50%}.q-timeline__heading{position:relative}.q-timeline__heading:first-child .q-timeline__heading-title{padding-top:0}.q-timeline__heading:last-child .q-timeline__heading-title{padding-bottom:0}.q-timeline__heading-title{padding:32px 0;margin:0}.q-timeline__entry{position:relative;line-height:22px}.q-timeline__entry:last-child{padding-bottom:0!important}.q-timeline__entry:last-child .q-timeline__dot:after{content:none}.q-timeline__entry--icon .q-timeline__dot{width:31px}.q-timeline__entry--icon .q-timeline__dot:before{height:31px;width:31px}.q-timeline__entry--icon .q-timeline__dot:after{top:41px;left:14px}.q-timeline__entry--icon .q-timeline__subtitle{padding-top:8px}.q-timeline--dense--right .q-timeline__entry{padding-left:40px}.q-timeline--dense--right .q-timeline__entry--icon .q-timeline__dot{left:-8px}.q-timeline--dense--right .q-timeline__dot{left:0}.q-timeline--dense--left .q-timeline__heading{text-align:right}.q-timeline--dense--left .q-timeline__entry{padding-right:40px}.q-timeline--dense--left .q-timeline__entry--icon .q-timeline__dot{right:-8px}.q-timeline--dense--left .q-timeline__content,.q-timeline--dense--left .q-timeline__subtitle,.q-timeline--dense--left .q-timeline__title{text-align:right}.q-timeline--dense--left .q-timeline__dot{right:0}.q-timeline--comfortable{display:table}.q-timeline--comfortable .q-timeline__heading{display:table-row;font-size:200%}.q-timeline--comfortable .q-timeline__heading>div{display:table-cell}.q-timeline--comfortable .q-timeline__entry{display:table-row;padding:0}.q-timeline--comfortable .q-timeline__entry--icon .q-timeline__content{padding-top:8px}.q-timeline--comfortable .q-timeline__content,.q-timeline--comfortable .q-timeline__dot,.q-timeline--comfortable .q-timeline__subtitle{display:table-cell;vertical-align:top}.q-timeline--comfortable .q-timeline__subtitle{width:35%}.q-timeline--comfortable .q-timeline__dot{position:relative;min-width:31px}.q-timeline--comfortable--right .q-timeline__heading .q-timeline__heading-title{margin-left:-50px}.q-timeline--comfortable--right .q-timeline__subtitle{text-align:right;padding-right:30px}.q-timeline--comfortable--right .q-timeline__content{padding-left:30px}.q-timeline--comfortable--right .q-timeline__entry--icon .q-timeline__dot{left:-8px}.q-timeline--comfortable--left .q-timeline__heading{text-align:right}.q-timeline--comfortable--left .q-timeline__heading .q-timeline__heading-title{margin-right:-50px}.q-timeline--comfortable--left .q-timeline__subtitle{padding-left:30px}.q-timeline--comfortable--left .q-timeline__content{padding-right:30px}.q-timeline--comfortable--left .q-timeline__content,.q-timeline--comfortable--left .q-timeline__title{text-align:right}.q-timeline--comfortable--left .q-timeline__entry--icon .q-timeline__dot{right:0}.q-timeline--comfortable--left .q-timeline__dot{right:-8px}.q-timeline--loose .q-timeline__heading-title{text-align:center;margin-left:0}.q-timeline--loose .q-timeline__content,.q-timeline--loose .q-timeline__dot,.q-timeline--loose .q-timeline__entry,.q-timeline--loose .q-timeline__subtitle{display:block;margin:0;padding:0}.q-timeline--loose .q-timeline__dot{position:absolute;left:50%;margin-left:-7.15px}.q-timeline--loose .q-timeline__entry{padding-bottom:24px;overflow:hidden}.q-timeline--loose .q-timeline__entry--icon .q-timeline__dot{margin-left:-15px}.q-timeline--loose .q-timeline__entry--icon .q-timeline__subtitle{line-height:38px}.q-timeline--loose .q-timeline__entry--icon .q-timeline__content{padding-top:8px}.q-timeline--loose .q-timeline__entry--left .q-timeline__content,.q-timeline--loose .q-timeline__entry--right .q-timeline__subtitle{float:left;padding-right:30px;text-align:right}.q-timeline--loose .q-timeline__entry--left .q-timeline__subtitle,.q-timeline--loose .q-timeline__entry--right .q-timeline__content{float:right;text-align:left;padding-left:30px}.q-timeline--loose .q-timeline__content,.q-timeline--loose .q-timeline__subtitle{width:50%}@media (prefers-color-scheme:dark){.q-timeline--dark-auto{color:#fff;color:var(--q-color-dark-text)}.q-timeline--dark-auto .q-timeline__subtitle{opacity:0.7}}.q-toggle{vertical-align:middle}.q-toggle__native{width:1px;height:1px}.q-toggle__track{height:0.35em;border-radius:0.175em;opacity:0.38;background:currentColor}.q-toggle__thumb{top:0.25em;left:0.25em;width:0.5em;height:0.5em;transition:left 0.22s cubic-bezier(0.4,0,0.2,1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0}.q-toggle__thumb:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:#fff;background:var(--q-color-light-page);box-shadow:0 3px 1px -2px rgba(0,0,0,0.2),0 2px 2px 0 rgba(0,0,0,0.14),0 1px 5px 0 rgba(0,0,0,0.12)}.q-toggle__thumb .q-icon{font-size:0.3em;min-width:1em;color:#000;color:var(--q-color-light-text);opacity:0.54;z-index:1}.q-toggle__inner{font-size:40px;width:1.4em;min-width:1.4em;height:1em;padding:0.325em 0.3em;-webkit-print-color-adjust:exact}.q-toggle__inner--indet .q-toggle__thumb{left:0.45em}.q-toggle__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-toggle__inner--truthy .q-toggle__track{opacity:0.54}.q-toggle__inner--truthy .q-toggle__thumb{left:0.65em}.q-toggle__inner--truthy .q-toggle__thumb:after{background-color:currentColor}.q-toggle__inner--truthy .q-toggle__thumb .q-icon{color:#fff;color:var(--q-color-dark-text);opacity:1}.q-toggle.disabled{opacity:0.75!important}.q-toggle--dark .q-toggle__inner{color:#fff;color:var(--q-color-dark-text)}.q-toggle--dark .q-toggle__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-toggle--dark .q-toggle__thumb:before{opacity:0.32!important}.q-toggle--dense .q-toggle__inner{width:0.8em;min-width:0.8em;height:0.5em;padding:0.07625em 0}.q-toggle--dense .q-toggle__thumb{top:0;left:0}.q-toggle--dense .q-toggle__inner--indet .q-toggle__thumb{left:0.15em}.q-toggle--dense .q-toggle__inner--truthy .q-toggle__thumb{left:0.3em}.q-toggle--dense .q-toggle__label{padding-left:0.5em}.q-toggle--dense.reverse .q-toggle__label{padding-left:0;padding-right:0.5em}body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:currentColor;opacity:0.12;transform:scale3d(0,0,1);transition:transform 0.22s cubic-bezier(0,0,0.2,1)}body.desktop .q-toggle:not(.disabled):focus .q-toggle__thumb:before,body.desktop .q-toggle:not(.disabled):hover .q-toggle__thumb:before{transform:scale3d(2,2,1)}body.desktop .q-toggle--dense:not(.disabled):focus .q-toggle__thumb:before,body.desktop .q-toggle--dense:not(.disabled):hover .q-toggle__thumb:before{transform:scale3d(1.5,1.5,1)}@media (prefers-color-scheme:dark){.q-toggle--dark-auto .q-toggle__inner{color:#fff;color:var(--q-color-dark-text)}.q-toggle--dark-auto .q-toggle__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-toggle--dark-auto .q-toggle__thumb:before{opacity:0.32!important}}.q-toolbar{position:relative;padding:0 12px;min-height:50px;width:100%}.q-toolbar--inset{padding-left:58px}.q-toolbar .q-avatar{font-size:38px}.q-toolbar__title{flex:1 1 0%;min-width:1px;max-width:100%;font-size:21px;font-weight:400;letter-spacing:0.01em;padding:0 12px}.q-toolbar__title:first-child{padding-left:0}.q-toolbar__title:last-child{padding-right:0}.q-tooltip{padding:6px 10px;opacity:0}.q-tooltip__container{position:fixed;z-index:9000;contain:layout;contain:layout style}.q-tooltip--style{font-size:10px;color:#fafafa;background:#757575;border-radius:4px;text-transform:none;font-weight:400}@media (max-width:599.98px){.q-tooltip{font-size:14px;padding:8px 16px}}.q-tree{position:relative;color:#9e9e9e}.q-tree__node{padding:0 0 3px 22px}.q-tree__node:after{content:"";position:absolute;top:-3px;bottom:0;width:2px;right:auto;left:-13px;border-left:1px solid currentColor}.q-tree__node:last-child:after{display:none}.q-tree__node--disabled{pointer-events:none}.q-tree__node--disabled .disabled{opacity:1!important}.q-tree__node--disabled>.disabled,.q-tree__node--disabled>div,.q-tree__node--disabled>i{opacity:0.6!important}.q-tree__node--disabled>.disabled .q-tree__node--disabled>.disabled,.q-tree__node--disabled>.disabled .q-tree__node--disabled>div,.q-tree__node--disabled>.disabled .q-tree__node--disabled>i,.q-tree__node--disabled>div .q-tree__node--disabled>.disabled,.q-tree__node--disabled>div .q-tree__node--disabled>div,.q-tree__node--disabled>div .q-tree__node--disabled>i,.q-tree__node--disabled>i .q-tree__node--disabled>.disabled,.q-tree__node--disabled>i .q-tree__node--disabled>div,.q-tree__node--disabled>i .q-tree__node--disabled>i{opacity:1!important}.q-tree__node-header:before{content:"";position:absolute;top:-3px;bottom:50%;width:31px;left:-35px;border-left:1px solid currentColor;border-bottom:1px solid currentColor}.q-tree__children{padding-left:25px}.q-tree__node-body{padding:5px 0 8px 5px}.q-tree__node--parent{padding-left:2px}.q-tree__node--parent>.q-tree__node-header:before{width:15px;left:-15px}.q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:5px 0 8px 27px}.q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{content:"";position:absolute;top:0;width:2px;height:100%;right:auto;left:12px;border-left:1px solid currentColor;bottom:50px}.q-tree__node--link{cursor:pointer}.q-tree__node-header{padding:4px;margin-top:3px;border-radius:4px;outline:0}.q-tree__node-header-content{color:#000;color:var(--q-color-light-text);transition:color 0.3s}.q-tree__node--selected .q-tree__node-header-content{color:#9e9e9e}.q-tree__icon,.q-tree__node-header-content .q-icon{font-size:21px}.q-tree__img{height:42px;border-radius:2px}.q-tree__avatar,.q-tree__node-header-content .q-avatar{font-size:28px;border-radius:50%;width:28px;height:28px}.q-tree__arrow,.q-tree__spinner{font-size:16px;margin-right:4px}.q-tree__arrow{transition:transform 0.3s}.q-tree__arrow--rotate{transform:rotate3d(0,0,1,90deg)}.q-tree__tickbox{margin-right:4px}.q-tree>.q-tree__node{padding:0}.q-tree>.q-tree__node:after,.q-tree>.q-tree__node>.q-tree__node-header:before{display:none}.q-tree>.q-tree__node--child>.q-tree__node-header{padding-left:24px}.q-tree--dark .q-tree__node-header-content{color:#fff;color:var(--q-color-dark-text)}.q-tree--no-connectors .q-tree__node-body:after,.q-tree--no-connectors .q-tree__node-header:before,.q-tree--no-connectors .q-tree__node:after{display:none!important}.q-tree--dense>.q-tree__node--child>.q-tree__node-header{padding-left:1px}.q-tree--dense .q-tree__arrow,.q-tree--dense .q-tree__spinner{margin-right:1px}.q-tree--dense .q-tree__img{height:32px}.q-tree--dense .q-tree__tickbox{margin-right:3px}.q-tree--dense .q-tree__node{padding:0}.q-tree--dense .q-tree__node:after{top:0;left:-8px}.q-tree--dense .q-tree__node-header{margin-top:0;padding:1px}.q-tree--dense .q-tree__node-header:before{top:0;left:-8px;width:8px}.q-tree--dense .q-tree__node--child{padding-left:17px}.q-tree--dense .q-tree__node--child>.q-tree__node-header:before{left:-25px;width:21px}.q-tree--dense .q-tree__node-body{padding:0 0 2px}.q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:0 0 2px 20px}.q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{left:8px}.q-tree--dense .q-tree__children{padding-left:16px}[dir=rtl] .q-tree__arrow{transform:rotate3d(0,0,1,180deg)}[dir=rtl] .q-tree__arrow--rotate{transform:rotate3d(0,0,1,90deg)}@media (prefers-color-scheme:dark){.q-tree--dark-auto .q-tree__node-header-content{color:#fff;color:var(--q-color-dark-text)}}.q-uploader{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px;vertical-align:top;position:relative;width:320px;max-height:320px}.q-uploader--bordered{border:1px solid rgba(0,0,0,0.12)}.q-uploader__input{opacity:0;width:100%;height:100%;cursor:pointer!important;z-index:1}.q-uploader__input::-webkit-file-upload-button{cursor:pointer}.q-uploader__file:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:currentColor;opacity:0.04}.q-uploader__file:before,.q-uploader__header{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-uploader__header{position:relative;background-color:#1976d2;background-color:var(--q-color-primary);color:#fff;color:var(--q-color-dark-text);width:100%}.q-uploader__spinner{font-size:24px;margin-right:4px}.q-uploader__header-content{padding:8px}.q-uploader__dnd{outline:1px dashed currentColor;outline-offset:-4px;background:hsla(0,0%,100%,0.6)}.q-uploader__overlay{font-size:36px;color:#000;color:var(--q-color-light-text);background-color:hsla(0,0%,100%,0.6)}.q-uploader__list{position:relative;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;padding:8px;min-height:60px;flex:1 1 auto}.q-uploader__file{border-radius:4px 4px 0 0;border:1px solid rgba(0,0,0,0.12)}.q-uploader__file .q-circular-progress{font-size:24px}.q-uploader__file--img{color:#fff;color:var(--q-color-dark-text);height:200px;min-width:200px;background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.q-uploader__file--img:before{content:none}.q-uploader__file--img .q-circular-progress{color:#fff;color:var(--q-color-dark-text)}.q-uploader__file--img .q-uploader__file-header{padding-bottom:24px;background:linear-gradient(180deg,rgba(0,0,0,0.7) 20%,hsla(0,0%,100%,0))}.q-uploader__file+.q-uploader__file{margin-top:8px}.q-uploader__file-header{position:relative;padding:4px 8px;border-top-left-radius:inherit;border-top-right-radius:inherit}.q-uploader__file-header-content{padding-right:8px}.q-uploader__file-status{font-size:24px;margin-right:4px}.q-uploader__title{font-size:14px;font-weight:700;line-height:18px;word-break:break-word}.q-uploader__subtitle{font-size:12px;line-height:18px}.q-uploader--disabled .q-uploader__header,.q-uploader--disabled .q-uploader__list{pointer-events:none}.q-uploader--dark,.q-uploader--dark .q-uploader__file{border-color:hsla(0,0%,100%,0.28)}.q-uploader--dark .q-uploader__dnd,.q-uploader--dark .q-uploader__overlay{background:hsla(0,0%,100%,0.3)}.q-uploader--dark .q-uploader__overlay{color:#fff;color:var(--q-color-dark-text)}@media (prefers-color-scheme:dark){.q-uploader--dark-auto,.q-uploader--dark-auto .q-uploader__file{border-color:hsla(0,0%,100%,0.28)}.q-uploader--dark-auto .q-uploader__dnd,.q-uploader--dark-auto .q-uploader__overlay{background:hsla(0,0%,100%,0.3)}.q-uploader--dark-auto .q-uploader__overlay{color:#fff;color:var(--q-color-dark-text)}}.q-video{position:relative;overflow:hidden;border-radius:inherit}.q-video embed,.q-video iframe,.q-video object{width:100%;height:100%}.q-video--responsive{height:0}.q-video--responsive embed,.q-video--responsive iframe,.q-video--responsive object{position:absolute;top:0;left:0}.q-virtual-scroll:focus{outline:0}.q-virtual-scroll__content{outline:none;contain:content}.q-virtual-scroll__content>*{overflow-anchor:none}.q-virtual-scroll__content>[data-q-vs-anchor]{overflow-anchor:auto}.q-virtual-scroll__padding{background:linear-gradient(hsla(0,0%,100%,0),hsla(0,0%,100%,0) 20%,hsla(0,0%,50.2%,0.03) 0,hsla(0,0%,50.2%,0.08) 50%,hsla(0,0%,50.2%,0.03) 80%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0));background-size:100% 50px;background-size:var(--q-virtual-scroll-item-width,100%) var(--q-virtual-scroll-item-height,50px)}.q-table .q-virtual-scroll__padding tr{height:0!important}.q-table .q-virtual-scroll__padding td{padding:0!important}.q-virtual-scroll--horizontal{align-items:stretch}.q-virtual-scroll--horizontal,.q-virtual-scroll--horizontal .q-virtual-scroll__content{display:flex;flex-direction:row;flex-wrap:nowrap}.q-virtual-scroll--horizontal .q-virtual-scroll__content,.q-virtual-scroll--horizontal .q-virtual-scroll__content>*,.q-virtual-scroll--horizontal .q-virtual-scroll__padding{flex:0 0 auto}.q-virtual-scroll--horizontal .q-virtual-scroll__padding{background:linear-gradient(270deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0) 20%,hsla(0,0%,50.2%,0.03) 0,hsla(0,0%,50.2%,0.08) 50%,hsla(0,0%,50.2%,0.03) 80%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0));background-size:50px 100%;background-size:var(--q-virtual-scroll-item-width,50px) var(--q-virtual-scroll-item-height,100%)}.q-ripple{width:100%;height:100%;border-radius:inherit;z-index:0;overflow:hidden;contain:strict}.q-ripple,.q-ripple__inner{position:absolute;top:0;left:0;color:inherit;pointer-events:none}.q-ripple__inner{opacity:0;border-radius:50%;background:currentColor;background-clip:padding-box;will-change:transform,opacity}.q-ripple__inner--enter{transition:transform 0.225s cubic-bezier(0.4,0,0.2,1),opacity 0.1s cubic-bezier(0.4,0,0.2,1)}.q-ripple__inner--leave{transition:opacity 0.25s cubic-bezier(0.4,0,0.2,1)}.q-morph--internal,.q-morph--invisible{opacity:0!important;pointer-events:none!important;position:fixed!important;right:200vw!important;bottom:200vh!important}.q-loading{color:#000;color:var(--q-color-light-text);position:fixed!important}.q-loading:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;background:currentColor;opacity:0.5;z-index:-1}.q-loading>div{margin:40px 20px 0;max-width:450px;text-align:center}.q-notifications__list{z-index:9500;pointer-events:none;left:0;right:0;margin-bottom:10px;position:relative}.q-notifications__list--center{top:0;bottom:0}.q-notifications__list--top{top:0}.q-notifications__list--bottom{bottom:0}body.q-ios-padding .q-notifications__list--center,body.q-ios-padding .q-notifications__list--top{top:20px;top:env(safe-area-inset-top)}body.q-ios-padding .q-notifications__list--bottom,body.q-ios-padding .q-notifications__list--center{bottom:env(safe-area-inset-bottom)}.q-notification{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px;pointer-events:all;display:inline-flex;margin:10px 10px 0;transition:transform 1s,opacity 1s;z-index:9500;flex-shrink:0;max-width:95vw;background:#323232;background:var(--q-color-notify-background);color:#fff;color:var(--q-color-dark-text);font-size:14px}.q-notification__icon{font-size:24px;flex:0 0 1em}.q-notification__icon--additional{margin-right:16px}.q-notification__avatar{font-size:32px}.q-notification__avatar--additional{margin-right:8px}.q-notification__spinner{font-size:32px}.q-notification__spinner--additional{margin-right:8px}.q-notification__message{padding:8px 0}.q-notification__caption{font-size:0.9em;opacity:0.7}.q-notification__actions{color:#1976d2;color:var(--q-color-primary)}.q-notification__badge{-webkit-animation:q-notif-badge 0.42s;animation:q-notif-badge 0.42s;padding:4px 8px;position:absolute;background:#c10015;box-shadow:0 1px 3px rgba(0,0,0,0.2),0 1px 1px rgba(0,0,0,0.14),0 2px 1px -1px rgba(0,0,0,0.12);background-color:#c10015;background-color:var(--q-color-negative);color:#fff;color:var(--q-color-dark-text);border-radius:4px;font-size:12px;line-height:12px}.q-notification__badge--top-left,.q-notification__badge--top-right{top:-6px}.q-notification__badge--bottom-left,.q-notification__badge--bottom-right{bottom:-6px}.q-notification__badge--bottom-left,.q-notification__badge--top-left{left:-22px}.q-notification__badge--bottom-right,.q-notification__badge--top-right{right:-22px}.q-notification__progress{z-index:-1;position:absolute;height:3px;bottom:0;left:-10px;right:-10px;-webkit-animation:q-notif-progress linear;animation:q-notif-progress linear;background:currentColor;opacity:0.3;border-radius:4px 4px 0 0;transform-origin:0 50%;transform:scaleX(0)}.q-notification--standard{padding:0 16px;min-height:48px}.q-notification--standard .q-notification__actions{padding:6px 0 6px 8px;margin-right:-8px}.q-notification--multi-line{min-height:68px;padding:8px 16px}.q-notification--multi-line .q-notification__badge--top-left,.q-notification--multi-line .q-notification__badge--top-right{top:-15px}.q-notification--multi-line .q-notification__badge--bottom-left,.q-notification--multi-line .q-notification__badge--bottom-right{bottom:-15px}.q-notification--multi-line .q-notification__progress{bottom:-8px}.q-notification--multi-line .q-notification__actions{padding:0}.q-notification--multi-line .q-notification__actions--with-media{padding-left:25px}.q-notification--top-enter,.q-notification--top-leave-to,.q-notification--top-left-enter,.q-notification--top-left-leave-to,.q-notification--top-right-enter,.q-notification--top-right-leave-to{opacity:0;transform:translateY(-50px);z-index:9499}.q-notification--center-enter,.q-notification--center-leave-to,.q-notification--left-enter,.q-notification--left-leave-to,.q-notification--right-enter,.q-notification--right-leave-to{opacity:0;transform:rotateX(90deg);z-index:9499}.q-notification--bottom-enter,.q-notification--bottom-leave-to,.q-notification--bottom-left-enter,.q-notification--bottom-left-leave-to,.q-notification--bottom-right-enter,.q-notification--bottom-right-leave-to{opacity:0;transform:translateY(50px);z-index:9499}.q-notification--bottom-leave-active,.q-notification--bottom-left-leave-active,.q-notification--bottom-right-leave-active,.q-notification--center-leave-active,.q-notification--left-leave-active,.q-notification--right-leave-active,.q-notification--top-leave-active,.q-notification--top-left-leave-active,.q-notification--top-right-leave-active{position:absolute;z-index:9499;margin-left:0;margin-right:0}.q-notification--center-leave-active,.q-notification--top-leave-active{top:0}.q-notification--bottom-leave-active,.q-notification--bottom-left-leave-active,.q-notification--bottom-right-leave-active{bottom:0}@media (min-width:600px){.q-notification{max-width:65vw}}:root{--animate-duration:0.3s;--animate-delay:0.3s;--animate-repeat:1}.animated{-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.repeat-1{-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animated.repeat-2{-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animated.repeat-3{-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animated.delay-1s{-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animated.delay-2s{-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animated.delay-3s{-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animated.delay-4s{-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animated.delay-5s{-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animated.faster{-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animated.fast{-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animated.slow{-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animated.slower{-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animated[class*=Out]{opacity:0}}.q-animate--scale{-webkit-animation:q-scale 0.15s;animation:q-scale 0.15s;-webkit-animation-timing-function:cubic-bezier(0.25,0.8,0.25,1);animation-timing-function:cubic-bezier(0.25,0.8,0.25,1)}.q-animate--fade{-webkit-animation:q-fade 0.2s;animation:q-fade 0.2s}:root{--q-color-primary:#1976d2;--q-color-secondary:#26a69a;--q-color-accent:#9c27b0;--q-color-positive:#21ba45;--q-color-negative:#c10015;--q-color-info:#31ccec;--q-color-warning:#f2c037;--q-color-dark:#1d1d1d;--q-color-light-text:#000;--q-color-light-page:#fff;--q-color-dark-text:#fff;--q-color-dark-page:#121212;--q-color-backdrop-background:#000;--q-color-notify-background:#323232;--q-color-chip-background-light:#e0e0e0;--q-color-chip-background-dark:#323232;--q-color-dialog-plugin-light:#1976d2;--q-color-dialog-plugin-dark:#ffc107}.text-dark{color:#1d1d1d!important;color:var(--q-color-dark)!important}.bg-dark{background:#1d1d1d!important;background:var(--q-color-dark)!important}.text-dialog-plugin-dark-auto,.text-dialog-plugin-light{color:#1976d2!important;color:var(--q-color-dialog-plugin-light)!important}.bg-dialog-plugin-dark-auto,.bg-dialog-plugin-light{background:#1976d2!important;background:var(--q-color-dialog-plugin-light)!important}.text-dialog-plugin-dark{color:#ffc107!important;color:var(--q-color-dialog-plugin-dark)!important}.bg-dialog-plugin-dark{background:#ffc107!important;background:var(--q-color-dialog-plugin-dark)!important}@media (prefers-color-scheme:dark){.text-dialog-plugin-dark-auto{color:#ffc107!important;color:var(--q-color-dialog-plugin-dark)!important}.bg-dialog-plugin-dark-auto{background:#ffc107!important;background:var(--q-color-dialog-plugin-dark)!important}}.text-primary{color:#1976d2!important;color:var(--q-color-primary)!important}.bg-primary{background:#1976d2!important;background:var(--q-color-primary)!important}.text-secondary{color:#26a69a!important;color:var(--q-color-secondary)!important}.bg-secondary{background:#26a69a!important;background:var(--q-color-secondary)!important}.text-accent{color:#9c27b0!important;color:var(--q-color-accent)!important}.bg-accent{background:#9c27b0!important;background:var(--q-color-accent)!important}.text-positive{color:#21ba45!important;color:var(--q-color-positive)!important}.bg-positive{background:#21ba45!important;background:var(--q-color-positive)!important}.text-negative{color:#c10015!important;color:var(--q-color-negative)!important}.bg-negative{background:#c10015!important;background:var(--q-color-negative)!important}.text-info{color:#31ccec!important;color:var(--q-color-info)!important}.bg-info{background:#31ccec!important;background:var(--q-color-info)!important}.text-warning{color:#f2c037!important;color:var(--q-color-warning)!important}.bg-warning{background:#f2c037!important;background:var(--q-color-warning)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.text-transparent{color:transparent!important}.bg-transparent{background:transparent!important}.text-separator{color:rgba(0,0,0,0.12)!important}.bg-separator{background:rgba(0,0,0,0.12)!important}.text-dark-separator{color:hsla(0,0%,100%,0.28)!important}.bg-dark-separator{background:hsla(0,0%,100%,0.28)!important}.text-red{color:#f44336!important}.text-red-1{color:#ffebee!important}.text-red-2{color:#ffcdd2!important}.text-red-3{color:#ef9a9a!important}.text-red-4{color:#e57373!important}.text-red-5{color:#ef5350!important}.text-red-6{color:#f44336!important}.text-red-7{color:#e53935!important}.text-red-8{color:#d32f2f!important}.text-red-9{color:#c62828!important}.text-red-10{color:#b71c1c!important}.text-red-11{color:#ff8a80!important}.text-red-12{color:#ff5252!important}.text-red-13{color:#ff1744!important}.text-red-14{color:#d50000!important}.text-pink{color:#e91e63!important}.text-pink-1{color:#fce4ec!important}.text-pink-2{color:#f8bbd0!important}.text-pink-3{color:#f48fb1!important}.text-pink-4{color:#f06292!important}.text-pink-5{color:#ec407a!important}.text-pink-6{color:#e91e63!important}.text-pink-7{color:#d81b60!important}.text-pink-8{color:#c2185b!important}.text-pink-9{color:#ad1457!important}.text-pink-10{color:#880e4f!important}.text-pink-11{color:#ff80ab!important}.text-pink-12{color:#ff4081!important}.text-pink-13{color:#f50057!important}.text-pink-14{color:#c51162!important}.text-purple{color:#9c27b0!important}.text-purple-1{color:#f3e5f5!important}.text-purple-2{color:#e1bee7!important}.text-purple-3{color:#ce93d8!important}.text-purple-4{color:#ba68c8!important}.text-purple-5{color:#ab47bc!important}.text-purple-6{color:#9c27b0!important}.text-purple-7{color:#8e24aa!important}.text-purple-8{color:#7b1fa2!important}.text-purple-9{color:#6a1b9a!important}.text-purple-10{color:#4a148c!important}.text-purple-11{color:#ea80fc!important}.text-purple-12{color:#e040fb!important}.text-purple-13{color:#d500f9!important}.text-purple-14{color:#a0f!important}.text-deep-purple{color:#673ab7!important}.text-deep-purple-1{color:#ede7f6!important}.text-deep-purple-2{color:#d1c4e9!important}.text-deep-purple-3{color:#b39ddb!important}.text-deep-purple-4{color:#9575cd!important}.text-deep-purple-5{color:#7e57c2!important}.text-deep-purple-6{color:#673ab7!important}.text-deep-purple-7{color:#5e35b1!important}.text-deep-purple-8{color:#512da8!important}.text-deep-purple-9{color:#4527a0!important}.text-deep-purple-10{color:#311b92!important}.text-deep-purple-11{color:#b388ff!important}.text-deep-purple-12{color:#7c4dff!important}.text-deep-purple-13{color:#651fff!important}.text-deep-purple-14{color:#6200ea!important}.text-indigo{color:#3f51b5!important}.text-indigo-1{color:#e8eaf6!important}.text-indigo-2{color:#c5cae9!important}.text-indigo-3{color:#9fa8da!important}.text-indigo-4{color:#7986cb!important}.text-indigo-5{color:#5c6bc0!important}.text-indigo-6{color:#3f51b5!important}.text-indigo-7{color:#3949ab!important}.text-indigo-8{color:#303f9f!important}.text-indigo-9{color:#283593!important}.text-indigo-10{color:#1a237e!important}.text-indigo-11{color:#8c9eff!important}.text-indigo-12{color:#536dfe!important}.text-indigo-13{color:#3d5afe!important}.text-indigo-14{color:#304ffe!important}.text-blue{color:#2196f3!important}.text-blue-1{color:#e3f2fd!important}.text-blue-2{color:#bbdefb!important}.text-blue-3{color:#90caf9!important}.text-blue-4{color:#64b5f6!important}.text-blue-5{color:#42a5f5!important}.text-blue-6{color:#2196f3!important}.text-blue-7{color:#1e88e5!important}.text-blue-8{color:#1976d2!important}.text-blue-9{color:#1565c0!important}.text-blue-10{color:#0d47a1!important}.text-blue-11{color:#82b1ff!important}.text-blue-12{color:#448aff!important}.text-blue-13{color:#2979ff!important}.text-blue-14{color:#2962ff!important}.text-light-blue{color:#03a9f4!important}.text-light-blue-1{color:#e1f5fe!important}.text-light-blue-2{color:#b3e5fc!important}.text-light-blue-3{color:#81d4fa!important}.text-light-blue-4{color:#4fc3f7!important}.text-light-blue-5{color:#29b6f6!important}.text-light-blue-6{color:#03a9f4!important}.text-light-blue-7{color:#039be5!important}.text-light-blue-8{color:#0288d1!important}.text-light-blue-9{color:#0277bd!important}.text-light-blue-10{color:#01579b!important}.text-light-blue-11{color:#80d8ff!important}.text-light-blue-12{color:#40c4ff!important}.text-light-blue-13{color:#00b0ff!important}.text-light-blue-14{color:#0091ea!important}.text-cyan{color:#00bcd4!important}.text-cyan-1{color:#e0f7fa!important}.text-cyan-2{color:#b2ebf2!important}.text-cyan-3{color:#80deea!important}.text-cyan-4{color:#4dd0e1!important}.text-cyan-5{color:#26c6da!important}.text-cyan-6{color:#00bcd4!important}.text-cyan-7{color:#00acc1!important}.text-cyan-8{color:#0097a7!important}.text-cyan-9{color:#00838f!important}.text-cyan-10{color:#006064!important}.text-cyan-11{color:#84ffff!important}.text-cyan-12{color:#18ffff!important}.text-cyan-13{color:#00e5ff!important}.text-cyan-14{color:#00b8d4!important}.text-teal{color:#009688!important}.text-teal-1{color:#e0f2f1!important}.text-teal-2{color:#b2dfdb!important}.text-teal-3{color:#80cbc4!important}.text-teal-4{color:#4db6ac!important}.text-teal-5{color:#26a69a!important}.text-teal-6{color:#009688!important}.text-teal-7{color:#00897b!important}.text-teal-8{color:#00796b!important}.text-teal-9{color:#00695c!important}.text-teal-10{color:#004d40!important}.text-teal-11{color:#a7ffeb!important}.text-teal-12{color:#64ffda!important}.text-teal-13{color:#1de9b6!important}.text-teal-14{color:#00bfa5!important}.text-green{color:#4caf50!important}.text-green-1{color:#e8f5e9!important}.text-green-2{color:#c8e6c9!important}.text-green-3{color:#a5d6a7!important}.text-green-4{color:#81c784!important}.text-green-5{color:#66bb6a!important}.text-green-6{color:#4caf50!important}.text-green-7{color:#43a047!important}.text-green-8{color:#388e3c!important}.text-green-9{color:#2e7d32!important}.text-green-10{color:#1b5e20!important}.text-green-11{color:#b9f6ca!important}.text-green-12{color:#69f0ae!important}.text-green-13{color:#00e676!important}.text-green-14{color:#00c853!important}.text-light-green{color:#8bc34a!important}.text-light-green-1{color:#f1f8e9!important}.text-light-green-2{color:#dcedc8!important}.text-light-green-3{color:#c5e1a5!important}.text-light-green-4{color:#aed581!important}.text-light-green-5{color:#9ccc65!important}.text-light-green-6{color:#8bc34a!important}.text-light-green-7{color:#7cb342!important}.text-light-green-8{color:#689f38!important}.text-light-green-9{color:#558b2f!important}.text-light-green-10{color:#33691e!important}.text-light-green-11{color:#ccff90!important}.text-light-green-12{color:#b2ff59!important}.text-light-green-13{color:#76ff03!important}.text-light-green-14{color:#64dd17!important}.text-lime{color:#cddc39!important}.text-lime-1{color:#f9fbe7!important}.text-lime-2{color:#f0f4c3!important}.text-lime-3{color:#e6ee9c!important}.text-lime-4{color:#dce775!important}.text-lime-5{color:#d4e157!important}.text-lime-6{color:#cddc39!important}.text-lime-7{color:#c0ca33!important}.text-lime-8{color:#afb42b!important}.text-lime-9{color:#9e9d24!important}.text-lime-10{color:#827717!important}.text-lime-11{color:#f4ff81!important}.text-lime-12{color:#eeff41!important}.text-lime-13{color:#c6ff00!important}.text-lime-14{color:#aeea00!important}.text-yellow{color:#ffeb3b!important}.text-yellow-1{color:#fffde7!important}.text-yellow-2{color:#fff9c4!important}.text-yellow-3{color:#fff59d!important}.text-yellow-4{color:#fff176!important}.text-yellow-5{color:#ffee58!important}.text-yellow-6{color:#ffeb3b!important}.text-yellow-7{color:#fdd835!important}.text-yellow-8{color:#fbc02d!important}.text-yellow-9{color:#f9a825!important}.text-yellow-10{color:#f57f17!important}.text-yellow-11{color:#ffff8d!important}.text-yellow-12{color:#ff0!important}.text-yellow-13{color:#ffea00!important}.text-yellow-14{color:#ffd600!important}.text-amber{color:#ffc107!important}.text-amber-1{color:#fff8e1!important}.text-amber-2{color:#ffecb3!important}.text-amber-3{color:#ffe082!important}.text-amber-4{color:#ffd54f!important}.text-amber-5{color:#ffca28!important}.text-amber-6{color:#ffc107!important}.text-amber-7{color:#ffb300!important}.text-amber-8{color:#ffa000!important}.text-amber-9{color:#ff8f00!important}.text-amber-10{color:#ff6f00!important}.text-amber-11{color:#ffe57f!important}.text-amber-12{color:#ffd740!important}.text-amber-13{color:#ffc400!important}.text-amber-14{color:#ffab00!important}.text-orange{color:#ff9800!important}.text-orange-1{color:#fff3e0!important}.text-orange-2{color:#ffe0b2!important}.text-orange-3{color:#ffcc80!important}.text-orange-4{color:#ffb74d!important}.text-orange-5{color:#ffa726!important}.text-orange-6{color:#ff9800!important}.text-orange-7{color:#fb8c00!important}.text-orange-8{color:#f57c00!important}.text-orange-9{color:#ef6c00!important}.text-orange-10{color:#e65100!important}.text-orange-11{color:#ffd180!important}.text-orange-12{color:#ffab40!important}.text-orange-13{color:#ff9100!important}.text-orange-14{color:#ff6d00!important}.text-deep-orange{color:#ff5722!important}.text-deep-orange-1{color:#fbe9e7!important}.text-deep-orange-2{color:#ffccbc!important}.text-deep-orange-3{color:#ffab91!important}.text-deep-orange-4{color:#ff8a65!important}.text-deep-orange-5{color:#ff7043!important}.text-deep-orange-6{color:#ff5722!important}.text-deep-orange-7{color:#f4511e!important}.text-deep-orange-8{color:#e64a19!important}.text-deep-orange-9{color:#d84315!important}.text-deep-orange-10{color:#bf360c!important}.text-deep-orange-11{color:#ff9e80!important}.text-deep-orange-12{color:#ff6e40!important}.text-deep-orange-13{color:#ff3d00!important}.text-deep-orange-14{color:#dd2c00!important}.text-brown{color:#795548!important}.text-brown-1{color:#efebe9!important}.text-brown-2{color:#d7ccc8!important}.text-brown-3{color:#bcaaa4!important}.text-brown-4{color:#a1887f!important}.text-brown-5{color:#8d6e63!important}.text-brown-6{color:#795548!important}.text-brown-7{color:#6d4c41!important}.text-brown-8{color:#5d4037!important}.text-brown-9{color:#4e342e!important}.text-brown-10{color:#3e2723!important}.text-brown-11{color:#d7ccc8!important}.text-brown-12{color:#bcaaa4!important}.text-brown-13{color:#8d6e63!important}.text-brown-14{color:#5d4037!important}.text-grey{color:#9e9e9e!important}.text-grey-1{color:#fafafa!important}.text-grey-2{color:#f5f5f5!important}.text-grey-3{color:#eee!important}.text-grey-4{color:#e0e0e0!important}.text-grey-5{color:#bdbdbd!important}.text-grey-6{color:#9e9e9e!important}.text-grey-7{color:#757575!important}.text-grey-8{color:#616161!important}.text-grey-9{color:#424242!important}.text-grey-10{color:#212121!important}.text-grey-11{color:#f5f5f5!important}.text-grey-12{color:#eee!important}.text-grey-13{color:#bdbdbd!important}.text-grey-14{color:#616161!important}.text-blue-grey{color:#607d8b!important}.text-blue-grey-1{color:#eceff1!important}.text-blue-grey-2{color:#cfd8dc!important}.text-blue-grey-3{color:#b0bec5!important}.text-blue-grey-4{color:#90a4ae!important}.text-blue-grey-5{color:#78909c!important}.text-blue-grey-6{color:#607d8b!important}.text-blue-grey-7{color:#546e7a!important}.text-blue-grey-8{color:#455a64!important}.text-blue-grey-9{color:#37474f!important}.text-blue-grey-10{color:#263238!important}.text-blue-grey-11{color:#cfd8dc!important}.text-blue-grey-12{color:#b0bec5!important}.text-blue-grey-13{color:#78909c!important}.text-blue-grey-14{color:#455a64!important}.bg-red{background:#f44336!important}.bg-red-1{background:#ffebee!important}.bg-red-2{background:#ffcdd2!important}.bg-red-3{background:#ef9a9a!important}.bg-red-4{background:#e57373!important}.bg-red-5{background:#ef5350!important}.bg-red-6{background:#f44336!important}.bg-red-7{background:#e53935!important}.bg-red-8{background:#d32f2f!important}.bg-red-9{background:#c62828!important}.bg-red-10{background:#b71c1c!important}.bg-red-11{background:#ff8a80!important}.bg-red-12{background:#ff5252!important}.bg-red-13{background:#ff1744!important}.bg-red-14{background:#d50000!important}.bg-pink{background:#e91e63!important}.bg-pink-1{background:#fce4ec!important}.bg-pink-2{background:#f8bbd0!important}.bg-pink-3{background:#f48fb1!important}.bg-pink-4{background:#f06292!important}.bg-pink-5{background:#ec407a!important}.bg-pink-6{background:#e91e63!important}.bg-pink-7{background:#d81b60!important}.bg-pink-8{background:#c2185b!important}.bg-pink-9{background:#ad1457!important}.bg-pink-10{background:#880e4f!important}.bg-pink-11{background:#ff80ab!important}.bg-pink-12{background:#ff4081!important}.bg-pink-13{background:#f50057!important}.bg-pink-14{background:#c51162!important}.bg-purple{background:#9c27b0!important}.bg-purple-1{background:#f3e5f5!important}.bg-purple-2{background:#e1bee7!important}.bg-purple-3{background:#ce93d8!important}.bg-purple-4{background:#ba68c8!important}.bg-purple-5{background:#ab47bc!important}.bg-purple-6{background:#9c27b0!important}.bg-purple-7{background:#8e24aa!important}.bg-purple-8{background:#7b1fa2!important}.bg-purple-9{background:#6a1b9a!important}.bg-purple-10{background:#4a148c!important}.bg-purple-11{background:#ea80fc!important}.bg-purple-12{background:#e040fb!important}.bg-purple-13{background:#d500f9!important}.bg-purple-14{background:#a0f!important}.bg-deep-purple{background:#673ab7!important}.bg-deep-purple-1{background:#ede7f6!important}.bg-deep-purple-2{background:#d1c4e9!important}.bg-deep-purple-3{background:#b39ddb!important}.bg-deep-purple-4{background:#9575cd!important}.bg-deep-purple-5{background:#7e57c2!important}.bg-deep-purple-6{background:#673ab7!important}.bg-deep-purple-7{background:#5e35b1!important}.bg-deep-purple-8{background:#512da8!important}.bg-deep-purple-9{background:#4527a0!important}.bg-deep-purple-10{background:#311b92!important}.bg-deep-purple-11{background:#b388ff!important}.bg-deep-purple-12{background:#7c4dff!important}.bg-deep-purple-13{background:#651fff!important}.bg-deep-purple-14{background:#6200ea!important}.bg-indigo{background:#3f51b5!important}.bg-indigo-1{background:#e8eaf6!important}.bg-indigo-2{background:#c5cae9!important}.bg-indigo-3{background:#9fa8da!important}.bg-indigo-4{background:#7986cb!important}.bg-indigo-5{background:#5c6bc0!important}.bg-indigo-6{background:#3f51b5!important}.bg-indigo-7{background:#3949ab!important}.bg-indigo-8{background:#303f9f!important}.bg-indigo-9{background:#283593!important}.bg-indigo-10{background:#1a237e!important}.bg-indigo-11{background:#8c9eff!important}.bg-indigo-12{background:#536dfe!important}.bg-indigo-13{background:#3d5afe!important}.bg-indigo-14{background:#304ffe!important}.bg-blue{background:#2196f3!important}.bg-blue-1{background:#e3f2fd!important}.bg-blue-2{background:#bbdefb!important}.bg-blue-3{background:#90caf9!important}.bg-blue-4{background:#64b5f6!important}.bg-blue-5{background:#42a5f5!important}.bg-blue-6{background:#2196f3!important}.bg-blue-7{background:#1e88e5!important}.bg-blue-8{background:#1976d2!important}.bg-blue-9{background:#1565c0!important}.bg-blue-10{background:#0d47a1!important}.bg-blue-11{background:#82b1ff!important}.bg-blue-12{background:#448aff!important}.bg-blue-13{background:#2979ff!important}.bg-blue-14{background:#2962ff!important}.bg-light-blue{background:#03a9f4!important}.bg-light-blue-1{background:#e1f5fe!important}.bg-light-blue-2{background:#b3e5fc!important}.bg-light-blue-3{background:#81d4fa!important}.bg-light-blue-4{background:#4fc3f7!important}.bg-light-blue-5{background:#29b6f6!important}.bg-light-blue-6{background:#03a9f4!important}.bg-light-blue-7{background:#039be5!important}.bg-light-blue-8{background:#0288d1!important}.bg-light-blue-9{background:#0277bd!important}.bg-light-blue-10{background:#01579b!important}.bg-light-blue-11{background:#80d8ff!important}.bg-light-blue-12{background:#40c4ff!important}.bg-light-blue-13{background:#00b0ff!important}.bg-light-blue-14{background:#0091ea!important}.bg-cyan{background:#00bcd4!important}.bg-cyan-1{background:#e0f7fa!important}.bg-cyan-2{background:#b2ebf2!important}.bg-cyan-3{background:#80deea!important}.bg-cyan-4{background:#4dd0e1!important}.bg-cyan-5{background:#26c6da!important}.bg-cyan-6{background:#00bcd4!important}.bg-cyan-7{background:#00acc1!important}.bg-cyan-8{background:#0097a7!important}.bg-cyan-9{background:#00838f!important}.bg-cyan-10{background:#006064!important}.bg-cyan-11{background:#84ffff!important}.bg-cyan-12{background:#18ffff!important}.bg-cyan-13{background:#00e5ff!important}.bg-cyan-14{background:#00b8d4!important}.bg-teal{background:#009688!important}.bg-teal-1{background:#e0f2f1!important}.bg-teal-2{background:#b2dfdb!important}.bg-teal-3{background:#80cbc4!important}.bg-teal-4{background:#4db6ac!important}.bg-teal-5{background:#26a69a!important}.bg-teal-6{background:#009688!important}.bg-teal-7{background:#00897b!important}.bg-teal-8{background:#00796b!important}.bg-teal-9{background:#00695c!important}.bg-teal-10{background:#004d40!important}.bg-teal-11{background:#a7ffeb!important}.bg-teal-12{background:#64ffda!important}.bg-teal-13{background:#1de9b6!important}.bg-teal-14{background:#00bfa5!important}.bg-green{background:#4caf50!important}.bg-green-1{background:#e8f5e9!important}.bg-green-2{background:#c8e6c9!important}.bg-green-3{background:#a5d6a7!important}.bg-green-4{background:#81c784!important}.bg-green-5{background:#66bb6a!important}.bg-green-6{background:#4caf50!important}.bg-green-7{background:#43a047!important}.bg-green-8{background:#388e3c!important}.bg-green-9{background:#2e7d32!important}.bg-green-10{background:#1b5e20!important}.bg-green-11{background:#b9f6ca!important}.bg-green-12{background:#69f0ae!important}.bg-green-13{background:#00e676!important}.bg-green-14{background:#00c853!important}.bg-light-green{background:#8bc34a!important}.bg-light-green-1{background:#f1f8e9!important}.bg-light-green-2{background:#dcedc8!important}.bg-light-green-3{background:#c5e1a5!important}.bg-light-green-4{background:#aed581!important}.bg-light-green-5{background:#9ccc65!important}.bg-light-green-6{background:#8bc34a!important}.bg-light-green-7{background:#7cb342!important}.bg-light-green-8{background:#689f38!important}.bg-light-green-9{background:#558b2f!important}.bg-light-green-10{background:#33691e!important}.bg-light-green-11{background:#ccff90!important}.bg-light-green-12{background:#b2ff59!important}.bg-light-green-13{background:#76ff03!important}.bg-light-green-14{background:#64dd17!important}.bg-lime{background:#cddc39!important}.bg-lime-1{background:#f9fbe7!important}.bg-lime-2{background:#f0f4c3!important}.bg-lime-3{background:#e6ee9c!important}.bg-lime-4{background:#dce775!important}.bg-lime-5{background:#d4e157!important}.bg-lime-6{background:#cddc39!important}.bg-lime-7{background:#c0ca33!important}.bg-lime-8{background:#afb42b!important}.bg-lime-9{background:#9e9d24!important}.bg-lime-10{background:#827717!important}.bg-lime-11{background:#f4ff81!important}.bg-lime-12{background:#eeff41!important}.bg-lime-13{background:#c6ff00!important}.bg-lime-14{background:#aeea00!important}.bg-yellow{background:#ffeb3b!important}.bg-yellow-1{background:#fffde7!important}.bg-yellow-2{background:#fff9c4!important}.bg-yellow-3{background:#fff59d!important}.bg-yellow-4{background:#fff176!important}.bg-yellow-5{background:#ffee58!important}.bg-yellow-6{background:#ffeb3b!important}.bg-yellow-7{background:#fdd835!important}.bg-yellow-8{background:#fbc02d!important}.bg-yellow-9{background:#f9a825!important}.bg-yellow-10{background:#f57f17!important}.bg-yellow-11{background:#ffff8d!important}.bg-yellow-12{background:#ff0!important}.bg-yellow-13{background:#ffea00!important}.bg-yellow-14{background:#ffd600!important}.bg-amber{background:#ffc107!important}.bg-amber-1{background:#fff8e1!important}.bg-amber-2{background:#ffecb3!important}.bg-amber-3{background:#ffe082!important}.bg-amber-4{background:#ffd54f!important}.bg-amber-5{background:#ffca28!important}.bg-amber-6{background:#ffc107!important}.bg-amber-7{background:#ffb300!important}.bg-amber-8{background:#ffa000!important}.bg-amber-9{background:#ff8f00!important}.bg-amber-10{background:#ff6f00!important}.bg-amber-11{background:#ffe57f!important}.bg-amber-12{background:#ffd740!important}.bg-amber-13{background:#ffc400!important}.bg-amber-14{background:#ffab00!important}.bg-orange{background:#ff9800!important}.bg-orange-1{background:#fff3e0!important}.bg-orange-2{background:#ffe0b2!important}.bg-orange-3{background:#ffcc80!important}.bg-orange-4{background:#ffb74d!important}.bg-orange-5{background:#ffa726!important}.bg-orange-6{background:#ff9800!important}.bg-orange-7{background:#fb8c00!important}.bg-orange-8{background:#f57c00!important}.bg-orange-9{background:#ef6c00!important}.bg-orange-10{background:#e65100!important}.bg-orange-11{background:#ffd180!important}.bg-orange-12{background:#ffab40!important}.bg-orange-13{background:#ff9100!important}.bg-orange-14{background:#ff6d00!important}.bg-deep-orange{background:#ff5722!important}.bg-deep-orange-1{background:#fbe9e7!important}.bg-deep-orange-2{background:#ffccbc!important}.bg-deep-orange-3{background:#ffab91!important}.bg-deep-orange-4{background:#ff8a65!important}.bg-deep-orange-5{background:#ff7043!important}.bg-deep-orange-6{background:#ff5722!important}.bg-deep-orange-7{background:#f4511e!important}.bg-deep-orange-8{background:#e64a19!important}.bg-deep-orange-9{background:#d84315!important}.bg-deep-orange-10{background:#bf360c!important}.bg-deep-orange-11{background:#ff9e80!important}.bg-deep-orange-12{background:#ff6e40!important}.bg-deep-orange-13{background:#ff3d00!important}.bg-deep-orange-14{background:#dd2c00!important}.bg-brown{background:#795548!important}.bg-brown-1{background:#efebe9!important}.bg-brown-2{background:#d7ccc8!important}.bg-brown-3{background:#bcaaa4!important}.bg-brown-4{background:#a1887f!important}.bg-brown-5{background:#8d6e63!important}.bg-brown-6{background:#795548!important}.bg-brown-7{background:#6d4c41!important}.bg-brown-8{background:#5d4037!important}.bg-brown-9{background:#4e342e!important}.bg-brown-10{background:#3e2723!important}.bg-brown-11{background:#d7ccc8!important}.bg-brown-12{background:#bcaaa4!important}.bg-brown-13{background:#8d6e63!important}.bg-brown-14{background:#5d4037!important}.bg-grey{background:#9e9e9e!important}.bg-grey-1{background:#fafafa!important}.bg-grey-2{background:#f5f5f5!important}.bg-grey-3{background:#eee!important}.bg-grey-4{background:#e0e0e0!important}.bg-grey-5{background:#bdbdbd!important}.bg-grey-6{background:#9e9e9e!important}.bg-grey-7{background:#757575!important}.bg-grey-8{background:#616161!important}.bg-grey-9{background:#424242!important}.bg-grey-10{background:#212121!important}.bg-grey-11{background:#f5f5f5!important}.bg-grey-12{background:#eee!important}.bg-grey-13{background:#bdbdbd!important}.bg-grey-14{background:#616161!important}.bg-blue-grey{background:#607d8b!important}.bg-blue-grey-1{background:#eceff1!important}.bg-blue-grey-2{background:#cfd8dc!important}.bg-blue-grey-3{background:#b0bec5!important}.bg-blue-grey-4{background:#90a4ae!important}.bg-blue-grey-5{background:#78909c!important}.bg-blue-grey-6{background:#607d8b!important}.bg-blue-grey-7{background:#546e7a!important}.bg-blue-grey-8{background:#455a64!important}.bg-blue-grey-9{background:#37474f!important}.bg-blue-grey-10{background:#263238!important}.bg-blue-grey-11{background:#cfd8dc!important}.bg-blue-grey-12{background:#b0bec5!important}.bg-blue-grey-13{background:#78909c!important}.bg-blue-grey-14{background:#455a64!important}.shadow-transition{transition:box-shadow 0.28s cubic-bezier(0.4,0,0.2,1)!important}.shadow-1{box-shadow:0 1px 3px rgba(0,0,0,0.2),0 1px 1px rgba(0,0,0,0.14),0 2px 1px -1px rgba(0,0,0,0.12)}.shadow-up-1{box-shadow:0 -1px 3px rgba(0,0,0,0.2),0 -1px 1px rgba(0,0,0,0.14),0 -2px 1px -1px rgba(0,0,0,0.12)}.shadow-2{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}.shadow-up-2{box-shadow:0 -1px 5px rgba(0,0,0,0.2),0 -2px 2px rgba(0,0,0,0.14),0 -3px 1px -2px rgba(0,0,0,0.12)}.shadow-3{box-shadow:0 1px 8px rgba(0,0,0,0.2),0 3px 4px rgba(0,0,0,0.14),0 3px 3px -2px rgba(0,0,0,0.12)}.shadow-up-3{box-shadow:0 -1px 8px rgba(0,0,0,0.2),0 -3px 4px rgba(0,0,0,0.14),0 -3px 3px -2px rgba(0,0,0,0.12)}.shadow-4{box-shadow:0 2px 4px -1px rgba(0,0,0,0.2),0 4px 5px rgba(0,0,0,0.14),0 1px 10px rgba(0,0,0,0.12)}.shadow-up-4{box-shadow:0 -2px 4px -1px rgba(0,0,0,0.2),0 -4px 5px rgba(0,0,0,0.14),0 -1px 10px rgba(0,0,0,0.12)}.shadow-5{box-shadow:0 3px 5px -1px rgba(0,0,0,0.2),0 5px 8px rgba(0,0,0,0.14),0 1px 14px rgba(0,0,0,0.12)}.shadow-up-5{box-shadow:0 -3px 5px -1px rgba(0,0,0,0.2),0 -5px 8px rgba(0,0,0,0.14),0 -1px 14px rgba(0,0,0,0.12)}.shadow-6{box-shadow:0 3px 5px -1px rgba(0,0,0,0.2),0 6px 10px rgba(0,0,0,0.14),0 1px 18px rgba(0,0,0,0.12)}.shadow-up-6{box-shadow:0 -3px 5px -1px rgba(0,0,0,0.2),0 -6px 10px rgba(0,0,0,0.14),0 -1px 18px rgba(0,0,0,0.12)}.shadow-7{box-shadow:0 4px 5px -2px rgba(0,0,0,0.2),0 7px 10px 1px rgba(0,0,0,0.14),0 2px 16px 1px rgba(0,0,0,0.12)}.shadow-up-7{box-shadow:0 -4px 5px -2px rgba(0,0,0,0.2),0 -7px 10px 1px rgba(0,0,0,0.14),0 -2px 16px 1px rgba(0,0,0,0.12)}.shadow-8{box-shadow:0 5px 5px -3px rgba(0,0,0,0.2),0 8px 10px 1px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12)}.shadow-up-8{box-shadow:0 -5px 5px -3px rgba(0,0,0,0.2),0 -8px 10px 1px rgba(0,0,0,0.14),0 -3px 14px 2px rgba(0,0,0,0.12)}.shadow-9{box-shadow:0 5px 6px -3px rgba(0,0,0,0.2),0 9px 12px 1px rgba(0,0,0,0.14),0 3px 16px 2px rgba(0,0,0,0.12)}.shadow-up-9{box-shadow:0 -5px 6px -3px rgba(0,0,0,0.2),0 -9px 12px 1px rgba(0,0,0,0.14),0 -3px 16px 2px rgba(0,0,0,0.12)}.shadow-10{box-shadow:0 6px 6px -3px rgba(0,0,0,0.2),0 10px 14px 1px rgba(0,0,0,0.14),0 4px 18px 3px rgba(0,0,0,0.12)}.shadow-up-10{box-shadow:0 -6px 6px -3px rgba(0,0,0,0.2),0 -10px 14px 1px rgba(0,0,0,0.14),0 -4px 18px 3px rgba(0,0,0,0.12)}.shadow-11{box-shadow:0 6px 7px -4px rgba(0,0,0,0.2),0 11px 15px 1px rgba(0,0,0,0.14),0 4px 20px 3px rgba(0,0,0,0.12)}.shadow-up-11{box-shadow:0 -6px 7px -4px rgba(0,0,0,0.2),0 -11px 15px 1px rgba(0,0,0,0.14),0 -4px 20px 3px rgba(0,0,0,0.12)}.shadow-12{box-shadow:0 7px 8px -4px rgba(0,0,0,0.2),0 12px 17px 2px rgba(0,0,0,0.14),0 5px 22px 4px rgba(0,0,0,0.12)}.shadow-up-12{box-shadow:0 -7px 8px -4px rgba(0,0,0,0.2),0 -12px 17px 2px rgba(0,0,0,0.14),0 -5px 22px 4px rgba(0,0,0,0.12)}.shadow-13{box-shadow:0 7px 8px -4px rgba(0,0,0,0.2),0 13px 19px 2px rgba(0,0,0,0.14),0 5px 24px 4px rgba(0,0,0,0.12)}.shadow-up-13{box-shadow:0 -7px 8px -4px rgba(0,0,0,0.2),0 -13px 19px 2px rgba(0,0,0,0.14),0 -5px 24px 4px rgba(0,0,0,0.12)}.shadow-14{box-shadow:0 7px 9px -4px rgba(0,0,0,0.2),0 14px 21px 2px rgba(0,0,0,0.14),0 5px 26px 4px rgba(0,0,0,0.12)}.shadow-up-14{box-shadow:0 -7px 9px -4px rgba(0,0,0,0.2),0 -14px 21px 2px rgba(0,0,0,0.14),0 -5px 26px 4px rgba(0,0,0,0.12)}.shadow-15{box-shadow:0 8px 9px -5px rgba(0,0,0,0.2),0 15px 22px 2px rgba(0,0,0,0.14),0 6px 28px 5px rgba(0,0,0,0.12)}.shadow-up-15{box-shadow:0 -8px 9px -5px rgba(0,0,0,0.2),0 -15px 22px 2px rgba(0,0,0,0.14),0 -6px 28px 5px rgba(0,0,0,0.12)}.shadow-16{box-shadow:0 8px 10px -5px rgba(0,0,0,0.2),0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12)}.shadow-up-16{box-shadow:0 -8px 10px -5px rgba(0,0,0,0.2),0 -16px 24px 2px rgba(0,0,0,0.14),0 -6px 30px 5px rgba(0,0,0,0.12)}.shadow-17{box-shadow:0 8px 11px -5px rgba(0,0,0,0.2),0 17px 26px 2px rgba(0,0,0,0.14),0 6px 32px 5px rgba(0,0,0,0.12)}.shadow-up-17{box-shadow:0 -8px 11px -5px rgba(0,0,0,0.2),0 -17px 26px 2px rgba(0,0,0,0.14),0 -6px 32px 5px rgba(0,0,0,0.12)}.shadow-18{box-shadow:0 9px 11px -5px rgba(0,0,0,0.2),0 18px 28px 2px rgba(0,0,0,0.14),0 7px 34px 6px rgba(0,0,0,0.12)}.shadow-up-18{box-shadow:0 -9px 11px -5px rgba(0,0,0,0.2),0 -18px 28px 2px rgba(0,0,0,0.14),0 -7px 34px 6px rgba(0,0,0,0.12)}.shadow-19{box-shadow:0 9px 12px -6px rgba(0,0,0,0.2),0 19px 29px 2px rgba(0,0,0,0.14),0 7px 36px 6px rgba(0,0,0,0.12)}.shadow-up-19{box-shadow:0 -9px 12px -6px rgba(0,0,0,0.2),0 -19px 29px 2px rgba(0,0,0,0.14),0 -7px 36px 6px rgba(0,0,0,0.12)}.shadow-20{box-shadow:0 10px 13px -6px rgba(0,0,0,0.2),0 20px 31px 3px rgba(0,0,0,0.14),0 8px 38px 7px rgba(0,0,0,0.12)}.shadow-up-20{box-shadow:0 -10px 13px -6px rgba(0,0,0,0.2),0 -20px 31px 3px rgba(0,0,0,0.14),0 -8px 38px 7px rgba(0,0,0,0.12)}.shadow-21{box-shadow:0 10px 13px -6px rgba(0,0,0,0.2),0 21px 33px 3px rgba(0,0,0,0.14),0 8px 40px 7px rgba(0,0,0,0.12)}.shadow-up-21{box-shadow:0 -10px 13px -6px rgba(0,0,0,0.2),0 -21px 33px 3px rgba(0,0,0,0.14),0 -8px 40px 7px rgba(0,0,0,0.12)}.shadow-22{box-shadow:0 10px 14px -6px rgba(0,0,0,0.2),0 22px 35px 3px rgba(0,0,0,0.14),0 8px 42px 7px rgba(0,0,0,0.12)}.shadow-up-22{box-shadow:0 -10px 14px -6px rgba(0,0,0,0.2),0 -22px 35px 3px rgba(0,0,0,0.14),0 -8px 42px 7px rgba(0,0,0,0.12)}.shadow-23{box-shadow:0 11px 14px -7px rgba(0,0,0,0.2),0 23px 36px 3px rgba(0,0,0,0.14),0 9px 44px 8px rgba(0,0,0,0.12)}.shadow-up-23{box-shadow:0 -11px 14px -7px rgba(0,0,0,0.2),0 -23px 36px 3px rgba(0,0,0,0.14),0 -9px 44px 8px rgba(0,0,0,0.12)}.shadow-24{box-shadow:0 11px 15px -7px rgba(0,0,0,0.2),0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12)}.shadow-up-24{box-shadow:0 -11px 15px -7px rgba(0,0,0,0.2),0 -24px 38px 3px rgba(0,0,0,0.14),0 -9px 46px 8px rgba(0,0,0,0.12)}.no-shadow,.shadow-0{box-shadow:none!important}.inset-shadow{box-shadow:inset 0 7px 9px -7px rgba(0,0,0,0.7)!important}.inset-shadow-down{box-shadow:inset 0 -7px 9px -7px rgba(0,0,0,0.7)!important}.z-marginals{z-index:2000}.z-notify{z-index:9500}.z-fullscreen{z-index:6000}.z-inherit{z-index:inherit!important}.column,.flex,.row{display:flex;flex-wrap:wrap}.column.inline,.flex.inline,.row.inline{display:inline-flex}.row.reverse{flex-direction:row-reverse}.column{flex-direction:column}.column.reverse{flex-direction:column-reverse}.wrap{flex-wrap:wrap}.no-wrap{flex-wrap:nowrap}.reverse-wrap{flex-wrap:wrap-reverse}.order-first{order:-10000}.order-last{order:10000}.order-none{order:0}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.flex-center,.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.flex-center,.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-center{align-content:center}.content-stretch{align-content:stretch}.content-between{align-content:space-between}.content-around{align-content:space-around}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}.q-gutter-none,.q-gutter-none>*,.q-gutter-x-none,.q-gutter-x-none>*{margin-left:0}.q-gutter-none,.q-gutter-none>*,.q-gutter-y-none,.q-gutter-y-none>*{margin-top:0}.q-col-gutter-none,.q-col-gutter-x-none{margin-left:0}.q-col-gutter-none>*,.q-col-gutter-x-none>*{padding-left:0}.q-col-gutter-none,.q-col-gutter-y-none{margin-top:0}.q-col-gutter-none>*,.q-col-gutter-y-none>*{padding-top:0}.q-gutter-x-xs,.q-gutter-xs{margin-left:-4px}.q-gutter-x-xs>*,.q-gutter-xs>*{margin-left:4px}.q-gutter-xs,.q-gutter-y-xs{margin-top:-4px}.q-gutter-xs>*,.q-gutter-y-xs>*{margin-top:4px}.q-col-gutter-x-xs,.q-col-gutter-xs{margin-left:-4px}.q-col-gutter-x-xs>*,.q-col-gutter-xs>*{padding-left:4px}.q-col-gutter-xs,.q-col-gutter-y-xs{margin-top:-4px}.q-col-gutter-xs>*,.q-col-gutter-y-xs>*{padding-top:4px}.q-gutter-sm,.q-gutter-x-sm{margin-left:-8px}.q-gutter-sm>*,.q-gutter-x-sm>*{margin-left:8px}.q-gutter-sm,.q-gutter-y-sm{margin-top:-8px}.q-gutter-sm>*,.q-gutter-y-sm>*{margin-top:8px}.q-col-gutter-sm,.q-col-gutter-x-sm{margin-left:-8px}.q-col-gutter-sm>*,.q-col-gutter-x-sm>*{padding-left:8px}.q-col-gutter-sm,.q-col-gutter-y-sm{margin-top:-8px}.q-col-gutter-sm>*,.q-col-gutter-y-sm>*{padding-top:8px}.q-gutter-md,.q-gutter-x-md{margin-left:-16px}.q-gutter-md>*,.q-gutter-x-md>*{margin-left:16px}.q-gutter-md,.q-gutter-y-md{margin-top:-16px}.q-gutter-md>*,.q-gutter-y-md>*{margin-top:16px}.q-col-gutter-md,.q-col-gutter-x-md{margin-left:-16px}.q-col-gutter-md>*,.q-col-gutter-x-md>*{padding-left:16px}.q-col-gutter-md,.q-col-gutter-y-md{margin-top:-16px}.q-col-gutter-md>*,.q-col-gutter-y-md>*{padding-top:16px}.q-gutter-lg,.q-gutter-x-lg{margin-left:-24px}.q-gutter-lg>*,.q-gutter-x-lg>*{margin-left:24px}.q-gutter-lg,.q-gutter-y-lg{margin-top:-24px}.q-gutter-lg>*,.q-gutter-y-lg>*{margin-top:24px}.q-col-gutter-lg,.q-col-gutter-x-lg{margin-left:-24px}.q-col-gutter-lg>*,.q-col-gutter-x-lg>*{padding-left:24px}.q-col-gutter-lg,.q-col-gutter-y-lg{margin-top:-24px}.q-col-gutter-lg>*,.q-col-gutter-y-lg>*{padding-top:24px}.q-gutter-x-xl,.q-gutter-xl{margin-left:-48px}.q-gutter-x-xl>*,.q-gutter-xl>*{margin-left:48px}.q-gutter-xl,.q-gutter-y-xl{margin-top:-48px}.q-gutter-xl>*,.q-gutter-y-xl>*{margin-top:48px}.q-col-gutter-x-xl,.q-col-gutter-xl{margin-left:-48px}.q-col-gutter-x-xl>*,.q-col-gutter-xl>*{padding-left:48px}.q-col-gutter-xl,.q-col-gutter-y-xl{margin-top:-48px}.q-col-gutter-xl>*,.q-col-gutter-y-xl>*{padding-top:48px}@media (min-width:0){.flex>.col,.flex>.col-0,.flex>.col-1,.flex>.col-2,.flex>.col-3,.flex>.col-4,.flex>.col-5,.flex>.col-6,.flex>.col-7,.flex>.col-8,.flex>.col-9,.flex>.col-10,.flex>.col-11,.flex>.col-12,.flex>.col-auto,.flex>.col-grow,.flex>.col-shrink,.flex>.col-xs,.flex>.col-xs-0,.flex>.col-xs-1,.flex>.col-xs-2,.flex>.col-xs-3,.flex>.col-xs-4,.flex>.col-xs-5,.flex>.col-xs-6,.flex>.col-xs-7,.flex>.col-xs-8,.flex>.col-xs-9,.flex>.col-xs-10,.flex>.col-xs-11,.flex>.col-xs-12,.flex>.col-xs-auto,.flex>.col-xs-grow,.flex>.col-xs-shrink,.row>.col,.row>.col-0,.row>.col-1,.row>.col-2,.row>.col-3,.row>.col-4,.row>.col-5,.row>.col-6,.row>.col-7,.row>.col-8,.row>.col-9,.row>.col-10,.row>.col-11,.row>.col-12,.row>.col-auto,.row>.col-grow,.row>.col-shrink,.row>.col-xs,.row>.col-xs-0,.row>.col-xs-1,.row>.col-xs-2,.row>.col-xs-3,.row>.col-xs-4,.row>.col-xs-5,.row>.col-xs-6,.row>.col-xs-7,.row>.col-xs-8,.row>.col-xs-9,.row>.col-xs-10,.row>.col-xs-11,.row>.col-xs-12,.row>.col-xs-auto,.row>.col-xs-grow,.row>.col-xs-shrink{width:auto;min-width:0;max-width:100%}.column>.col,.column>.col-0,.column>.col-1,.column>.col-2,.column>.col-3,.column>.col-4,.column>.col-5,.column>.col-6,.column>.col-7,.column>.col-8,.column>.col-9,.column>.col-10,.column>.col-11,.column>.col-12,.column>.col-auto,.column>.col-grow,.column>.col-shrink,.column>.col-xs,.column>.col-xs-0,.column>.col-xs-1,.column>.col-xs-2,.column>.col-xs-3,.column>.col-xs-4,.column>.col-xs-5,.column>.col-xs-6,.column>.col-xs-7,.column>.col-xs-8,.column>.col-xs-9,.column>.col-xs-10,.column>.col-xs-11,.column>.col-xs-12,.column>.col-xs-auto,.column>.col-xs-grow,.column>.col-xs-shrink,.flex>.col,.flex>.col-0,.flex>.col-1,.flex>.col-2,.flex>.col-3,.flex>.col-4,.flex>.col-5,.flex>.col-6,.flex>.col-7,.flex>.col-8,.flex>.col-9,.flex>.col-10,.flex>.col-11,.flex>.col-12,.flex>.col-auto,.flex>.col-grow,.flex>.col-shrink,.flex>.col-xs,.flex>.col-xs-0,.flex>.col-xs-1,.flex>.col-xs-2,.flex>.col-xs-3,.flex>.col-xs-4,.flex>.col-xs-5,.flex>.col-xs-6,.flex>.col-xs-7,.flex>.col-xs-8,.flex>.col-xs-9,.flex>.col-xs-10,.flex>.col-xs-11,.flex>.col-xs-12,.flex>.col-xs-auto,.flex>.col-xs-grow,.flex>.col-xs-shrink{height:auto;min-height:0;max-height:100%}.col,.col-xs{flex:10000 1 0%}.col-0,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-xs-0,.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-auto{flex:0 0 auto}.col-grow,.col-xs-grow{flex:1 0 auto}.col-shrink,.col-xs-shrink{flex:0 1 auto}.row>.col-0,.row>.col-xs-0{height:auto;width:0%}.row>.offset-0,.row>.offset-xs-0{margin-left:0%}.column>.col-0,.column>.col-xs-0{height:0%;width:auto}.row>.col-1,.row>.col-xs-1{height:auto;width:8.3333%}.row>.offset-1,.row>.offset-xs-1{margin-left:8.3333%}.column>.col-1,.column>.col-xs-1{height:8.3333%;width:auto}.row>.col-2,.row>.col-xs-2{height:auto;width:16.6667%}.row>.offset-2,.row>.offset-xs-2{margin-left:16.6667%}.column>.col-2,.column>.col-xs-2{height:16.6667%;width:auto}.row>.col-3,.row>.col-xs-3{height:auto;width:25%}.row>.offset-3,.row>.offset-xs-3{margin-left:25%}.column>.col-3,.column>.col-xs-3{height:25%;width:auto}.row>.col-4,.row>.col-xs-4{height:auto;width:33.3333%}.row>.offset-4,.row>.offset-xs-4{margin-left:33.3333%}.column>.col-4,.column>.col-xs-4{height:33.3333%;width:auto}.row>.col-5,.row>.col-xs-5{height:auto;width:41.6667%}.row>.offset-5,.row>.offset-xs-5{margin-left:41.6667%}.column>.col-5,.column>.col-xs-5{height:41.6667%;width:auto}.row>.col-6,.row>.col-xs-6{height:auto;width:50%}.row>.offset-6,.row>.offset-xs-6{margin-left:50%}.column>.col-6,.column>.col-xs-6{height:50%;width:auto}.row>.col-7,.row>.col-xs-7{height:auto;width:58.3333%}.row>.offset-7,.row>.offset-xs-7{margin-left:58.3333%}.column>.col-7,.column>.col-xs-7{height:58.3333%;width:auto}.row>.col-8,.row>.col-xs-8{height:auto;width:66.6667%}.row>.offset-8,.row>.offset-xs-8{margin-left:66.6667%}.column>.col-8,.column>.col-xs-8{height:66.6667%;width:auto}.row>.col-9,.row>.col-xs-9{height:auto;width:75%}.row>.offset-9,.row>.offset-xs-9{margin-left:75%}.column>.col-9,.column>.col-xs-9{height:75%;width:auto}.row>.col-10,.row>.col-xs-10{height:auto;width:83.3333%}.row>.offset-10,.row>.offset-xs-10{margin-left:83.3333%}.column>.col-10,.column>.col-xs-10{height:83.3333%;width:auto}.row>.col-11,.row>.col-xs-11{height:auto;width:91.6667%}.row>.offset-11,.row>.offset-xs-11{margin-left:91.6667%}.column>.col-11,.column>.col-xs-11{height:91.6667%;width:auto}.row>.col-12,.row>.col-xs-12{height:auto;width:100%}.row>.offset-12,.row>.offset-xs-12{margin-left:100%}.column>.col-12,.column>.col-xs-12{height:100%;width:auto}.row>.col-all{height:auto;flex:0 0 100%}}@media (min-width:600px){.flex>.col-sm,.flex>.col-sm-0,.flex>.col-sm-1,.flex>.col-sm-2,.flex>.col-sm-3,.flex>.col-sm-4,.flex>.col-sm-5,.flex>.col-sm-6,.flex>.col-sm-7,.flex>.col-sm-8,.flex>.col-sm-9,.flex>.col-sm-10,.flex>.col-sm-11,.flex>.col-sm-12,.flex>.col-sm-auto,.flex>.col-sm-grow,.flex>.col-sm-shrink,.row>.col-sm,.row>.col-sm-0,.row>.col-sm-1,.row>.col-sm-2,.row>.col-sm-3,.row>.col-sm-4,.row>.col-sm-5,.row>.col-sm-6,.row>.col-sm-7,.row>.col-sm-8,.row>.col-sm-9,.row>.col-sm-10,.row>.col-sm-11,.row>.col-sm-12,.row>.col-sm-auto,.row>.col-sm-grow,.row>.col-sm-shrink{width:auto;min-width:0;max-width:100%}.column>.col-sm,.column>.col-sm-0,.column>.col-sm-1,.column>.col-sm-2,.column>.col-sm-3,.column>.col-sm-4,.column>.col-sm-5,.column>.col-sm-6,.column>.col-sm-7,.column>.col-sm-8,.column>.col-sm-9,.column>.col-sm-10,.column>.col-sm-11,.column>.col-sm-12,.column>.col-sm-auto,.column>.col-sm-grow,.column>.col-sm-shrink,.flex>.col-sm,.flex>.col-sm-0,.flex>.col-sm-1,.flex>.col-sm-2,.flex>.col-sm-3,.flex>.col-sm-4,.flex>.col-sm-5,.flex>.col-sm-6,.flex>.col-sm-7,.flex>.col-sm-8,.flex>.col-sm-9,.flex>.col-sm-10,.flex>.col-sm-11,.flex>.col-sm-12,.flex>.col-sm-auto,.flex>.col-sm-grow,.flex>.col-sm-shrink{height:auto;min-height:0;max-height:100%}.col-sm{flex:10000 1 0%}.col-sm-0,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto{flex:0 0 auto}.col-sm-grow{flex:1 0 auto}.col-sm-shrink{flex:0 1 auto}.row>.col-sm-0{height:auto;width:0%}.row>.offset-sm-0{margin-left:0%}.column>.col-sm-0{height:0%;width:auto}.row>.col-sm-1{height:auto;width:8.3333%}.row>.offset-sm-1{margin-left:8.3333%}.column>.col-sm-1{height:8.3333%;width:auto}.row>.col-sm-2{height:auto;width:16.6667%}.row>.offset-sm-2{margin-left:16.6667%}.column>.col-sm-2{height:16.6667%;width:auto}.row>.col-sm-3{height:auto;width:25%}.row>.offset-sm-3{margin-left:25%}.column>.col-sm-3{height:25%;width:auto}.row>.col-sm-4{height:auto;width:33.3333%}.row>.offset-sm-4{margin-left:33.3333%}.column>.col-sm-4{height:33.3333%;width:auto}.row>.col-sm-5{height:auto;width:41.6667%}.row>.offset-sm-5{margin-left:41.6667%}.column>.col-sm-5{height:41.6667%;width:auto}.row>.col-sm-6{height:auto;width:50%}.row>.offset-sm-6{margin-left:50%}.column>.col-sm-6{height:50%;width:auto}.row>.col-sm-7{height:auto;width:58.3333%}.row>.offset-sm-7{margin-left:58.3333%}.column>.col-sm-7{height:58.3333%;width:auto}.row>.col-sm-8{height:auto;width:66.6667%}.row>.offset-sm-8{margin-left:66.6667%}.column>.col-sm-8{height:66.6667%;width:auto}.row>.col-sm-9{height:auto;width:75%}.row>.offset-sm-9{margin-left:75%}.column>.col-sm-9{height:75%;width:auto}.row>.col-sm-10{height:auto;width:83.3333%}.row>.offset-sm-10{margin-left:83.3333%}.column>.col-sm-10{height:83.3333%;width:auto}.row>.col-sm-11{height:auto;width:91.6667%}.row>.offset-sm-11{margin-left:91.6667%}.column>.col-sm-11{height:91.6667%;width:auto}.row>.col-sm-12{height:auto;width:100%}.row>.offset-sm-12{margin-left:100%}.column>.col-sm-12{height:100%;width:auto}}@media (min-width:1024px){.flex>.col-md,.flex>.col-md-0,.flex>.col-md-1,.flex>.col-md-2,.flex>.col-md-3,.flex>.col-md-4,.flex>.col-md-5,.flex>.col-md-6,.flex>.col-md-7,.flex>.col-md-8,.flex>.col-md-9,.flex>.col-md-10,.flex>.col-md-11,.flex>.col-md-12,.flex>.col-md-auto,.flex>.col-md-grow,.flex>.col-md-shrink,.row>.col-md,.row>.col-md-0,.row>.col-md-1,.row>.col-md-2,.row>.col-md-3,.row>.col-md-4,.row>.col-md-5,.row>.col-md-6,.row>.col-md-7,.row>.col-md-8,.row>.col-md-9,.row>.col-md-10,.row>.col-md-11,.row>.col-md-12,.row>.col-md-auto,.row>.col-md-grow,.row>.col-md-shrink{width:auto;min-width:0;max-width:100%}.column>.col-md,.column>.col-md-0,.column>.col-md-1,.column>.col-md-2,.column>.col-md-3,.column>.col-md-4,.column>.col-md-5,.column>.col-md-6,.column>.col-md-7,.column>.col-md-8,.column>.col-md-9,.column>.col-md-10,.column>.col-md-11,.column>.col-md-12,.column>.col-md-auto,.column>.col-md-grow,.column>.col-md-shrink,.flex>.col-md,.flex>.col-md-0,.flex>.col-md-1,.flex>.col-md-2,.flex>.col-md-3,.flex>.col-md-4,.flex>.col-md-5,.flex>.col-md-6,.flex>.col-md-7,.flex>.col-md-8,.flex>.col-md-9,.flex>.col-md-10,.flex>.col-md-11,.flex>.col-md-12,.flex>.col-md-auto,.flex>.col-md-grow,.flex>.col-md-shrink{height:auto;min-height:0;max-height:100%}.col-md{flex:10000 1 0%}.col-md-0,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto{flex:0 0 auto}.col-md-grow{flex:1 0 auto}.col-md-shrink{flex:0 1 auto}.row>.col-md-0{height:auto;width:0%}.row>.offset-md-0{margin-left:0%}.column>.col-md-0{height:0%;width:auto}.row>.col-md-1{height:auto;width:8.3333%}.row>.offset-md-1{margin-left:8.3333%}.column>.col-md-1{height:8.3333%;width:auto}.row>.col-md-2{height:auto;width:16.6667%}.row>.offset-md-2{margin-left:16.6667%}.column>.col-md-2{height:16.6667%;width:auto}.row>.col-md-3{height:auto;width:25%}.row>.offset-md-3{margin-left:25%}.column>.col-md-3{height:25%;width:auto}.row>.col-md-4{height:auto;width:33.3333%}.row>.offset-md-4{margin-left:33.3333%}.column>.col-md-4{height:33.3333%;width:auto}.row>.col-md-5{height:auto;width:41.6667%}.row>.offset-md-5{margin-left:41.6667%}.column>.col-md-5{height:41.6667%;width:auto}.row>.col-md-6{height:auto;width:50%}.row>.offset-md-6{margin-left:50%}.column>.col-md-6{height:50%;width:auto}.row>.col-md-7{height:auto;width:58.3333%}.row>.offset-md-7{margin-left:58.3333%}.column>.col-md-7{height:58.3333%;width:auto}.row>.col-md-8{height:auto;width:66.6667%}.row>.offset-md-8{margin-left:66.6667%}.column>.col-md-8{height:66.6667%;width:auto}.row>.col-md-9{height:auto;width:75%}.row>.offset-md-9{margin-left:75%}.column>.col-md-9{height:75%;width:auto}.row>.col-md-10{height:auto;width:83.3333%}.row>.offset-md-10{margin-left:83.3333%}.column>.col-md-10{height:83.3333%;width:auto}.row>.col-md-11{height:auto;width:91.6667%}.row>.offset-md-11{margin-left:91.6667%}.column>.col-md-11{height:91.6667%;width:auto}.row>.col-md-12{height:auto;width:100%}.row>.offset-md-12{margin-left:100%}.column>.col-md-12{height:100%;width:auto}}@media (min-width:1440px){.flex>.col-lg,.flex>.col-lg-0,.flex>.col-lg-1,.flex>.col-lg-2,.flex>.col-lg-3,.flex>.col-lg-4,.flex>.col-lg-5,.flex>.col-lg-6,.flex>.col-lg-7,.flex>.col-lg-8,.flex>.col-lg-9,.flex>.col-lg-10,.flex>.col-lg-11,.flex>.col-lg-12,.flex>.col-lg-auto,.flex>.col-lg-grow,.flex>.col-lg-shrink,.row>.col-lg,.row>.col-lg-0,.row>.col-lg-1,.row>.col-lg-2,.row>.col-lg-3,.row>.col-lg-4,.row>.col-lg-5,.row>.col-lg-6,.row>.col-lg-7,.row>.col-lg-8,.row>.col-lg-9,.row>.col-lg-10,.row>.col-lg-11,.row>.col-lg-12,.row>.col-lg-auto,.row>.col-lg-grow,.row>.col-lg-shrink{width:auto;min-width:0;max-width:100%}.column>.col-lg,.column>.col-lg-0,.column>.col-lg-1,.column>.col-lg-2,.column>.col-lg-3,.column>.col-lg-4,.column>.col-lg-5,.column>.col-lg-6,.column>.col-lg-7,.column>.col-lg-8,.column>.col-lg-9,.column>.col-lg-10,.column>.col-lg-11,.column>.col-lg-12,.column>.col-lg-auto,.column>.col-lg-grow,.column>.col-lg-shrink,.flex>.col-lg,.flex>.col-lg-0,.flex>.col-lg-1,.flex>.col-lg-2,.flex>.col-lg-3,.flex>.col-lg-4,.flex>.col-lg-5,.flex>.col-lg-6,.flex>.col-lg-7,.flex>.col-lg-8,.flex>.col-lg-9,.flex>.col-lg-10,.flex>.col-lg-11,.flex>.col-lg-12,.flex>.col-lg-auto,.flex>.col-lg-grow,.flex>.col-lg-shrink{height:auto;min-height:0;max-height:100%}.col-lg{flex:10000 1 0%}.col-lg-0,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto{flex:0 0 auto}.col-lg-grow{flex:1 0 auto}.col-lg-shrink{flex:0 1 auto}.row>.col-lg-0{height:auto;width:0%}.row>.offset-lg-0{margin-left:0%}.column>.col-lg-0{height:0%;width:auto}.row>.col-lg-1{height:auto;width:8.3333%}.row>.offset-lg-1{margin-left:8.3333%}.column>.col-lg-1{height:8.3333%;width:auto}.row>.col-lg-2{height:auto;width:16.6667%}.row>.offset-lg-2{margin-left:16.6667%}.column>.col-lg-2{height:16.6667%;width:auto}.row>.col-lg-3{height:auto;width:25%}.row>.offset-lg-3{margin-left:25%}.column>.col-lg-3{height:25%;width:auto}.row>.col-lg-4{height:auto;width:33.3333%}.row>.offset-lg-4{margin-left:33.3333%}.column>.col-lg-4{height:33.3333%;width:auto}.row>.col-lg-5{height:auto;width:41.6667%}.row>.offset-lg-5{margin-left:41.6667%}.column>.col-lg-5{height:41.6667%;width:auto}.row>.col-lg-6{height:auto;width:50%}.row>.offset-lg-6{margin-left:50%}.column>.col-lg-6{height:50%;width:auto}.row>.col-lg-7{height:auto;width:58.3333%}.row>.offset-lg-7{margin-left:58.3333%}.column>.col-lg-7{height:58.3333%;width:auto}.row>.col-lg-8{height:auto;width:66.6667%}.row>.offset-lg-8{margin-left:66.6667%}.column>.col-lg-8{height:66.6667%;width:auto}.row>.col-lg-9{height:auto;width:75%}.row>.offset-lg-9{margin-left:75%}.column>.col-lg-9{height:75%;width:auto}.row>.col-lg-10{height:auto;width:83.3333%}.row>.offset-lg-10{margin-left:83.3333%}.column>.col-lg-10{height:83.3333%;width:auto}.row>.col-lg-11{height:auto;width:91.6667%}.row>.offset-lg-11{margin-left:91.6667%}.column>.col-lg-11{height:91.6667%;width:auto}.row>.col-lg-12{height:auto;width:100%}.row>.offset-lg-12{margin-left:100%}.column>.col-lg-12{height:100%;width:auto}}@media (min-width:1920px){.flex>.col-xl,.flex>.col-xl-0,.flex>.col-xl-1,.flex>.col-xl-2,.flex>.col-xl-3,.flex>.col-xl-4,.flex>.col-xl-5,.flex>.col-xl-6,.flex>.col-xl-7,.flex>.col-xl-8,.flex>.col-xl-9,.flex>.col-xl-10,.flex>.col-xl-11,.flex>.col-xl-12,.flex>.col-xl-auto,.flex>.col-xl-grow,.flex>.col-xl-shrink,.row>.col-xl,.row>.col-xl-0,.row>.col-xl-1,.row>.col-xl-2,.row>.col-xl-3,.row>.col-xl-4,.row>.col-xl-5,.row>.col-xl-6,.row>.col-xl-7,.row>.col-xl-8,.row>.col-xl-9,.row>.col-xl-10,.row>.col-xl-11,.row>.col-xl-12,.row>.col-xl-auto,.row>.col-xl-grow,.row>.col-xl-shrink{width:auto;min-width:0;max-width:100%}.column>.col-xl,.column>.col-xl-0,.column>.col-xl-1,.column>.col-xl-2,.column>.col-xl-3,.column>.col-xl-4,.column>.col-xl-5,.column>.col-xl-6,.column>.col-xl-7,.column>.col-xl-8,.column>.col-xl-9,.column>.col-xl-10,.column>.col-xl-11,.column>.col-xl-12,.column>.col-xl-auto,.column>.col-xl-grow,.column>.col-xl-shrink,.flex>.col-xl,.flex>.col-xl-0,.flex>.col-xl-1,.flex>.col-xl-2,.flex>.col-xl-3,.flex>.col-xl-4,.flex>.col-xl-5,.flex>.col-xl-6,.flex>.col-xl-7,.flex>.col-xl-8,.flex>.col-xl-9,.flex>.col-xl-10,.flex>.col-xl-11,.flex>.col-xl-12,.flex>.col-xl-auto,.flex>.col-xl-grow,.flex>.col-xl-shrink{height:auto;min-height:0;max-height:100%}.col-xl{flex:10000 1 0%}.col-xl-0,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{flex:0 0 auto}.col-xl-grow{flex:1 0 auto}.col-xl-shrink{flex:0 1 auto}.row>.col-xl-0{height:auto;width:0%}.row>.offset-xl-0{margin-left:0%}.column>.col-xl-0{height:0%;width:auto}.row>.col-xl-1{height:auto;width:8.3333%}.row>.offset-xl-1{margin-left:8.3333%}.column>.col-xl-1{height:8.3333%;width:auto}.row>.col-xl-2{height:auto;width:16.6667%}.row>.offset-xl-2{margin-left:16.6667%}.column>.col-xl-2{height:16.6667%;width:auto}.row>.col-xl-3{height:auto;width:25%}.row>.offset-xl-3{margin-left:25%}.column>.col-xl-3{height:25%;width:auto}.row>.col-xl-4{height:auto;width:33.3333%}.row>.offset-xl-4{margin-left:33.3333%}.column>.col-xl-4{height:33.3333%;width:auto}.row>.col-xl-5{height:auto;width:41.6667%}.row>.offset-xl-5{margin-left:41.6667%}.column>.col-xl-5{height:41.6667%;width:auto}.row>.col-xl-6{height:auto;width:50%}.row>.offset-xl-6{margin-left:50%}.column>.col-xl-6{height:50%;width:auto}.row>.col-xl-7{height:auto;width:58.3333%}.row>.offset-xl-7{margin-left:58.3333%}.column>.col-xl-7{height:58.3333%;width:auto}.row>.col-xl-8{height:auto;width:66.6667%}.row>.offset-xl-8{margin-left:66.6667%}.column>.col-xl-8{height:66.6667%;width:auto}.row>.col-xl-9{height:auto;width:75%}.row>.offset-xl-9{margin-left:75%}.column>.col-xl-9{height:75%;width:auto}.row>.col-xl-10{height:auto;width:83.3333%}.row>.offset-xl-10{margin-left:83.3333%}.column>.col-xl-10{height:83.3333%;width:auto}.row>.col-xl-11{height:auto;width:91.6667%}.row>.offset-xl-11{margin-left:91.6667%}.column>.col-xl-11{height:91.6667%;width:auto}.row>.col-xl-12{height:auto;width:100%}.row>.offset-xl-12{margin-left:100%}.column>.col-xl-12{height:100%;width:auto}}.rounded-borders{border-radius:4px}.border-radius-inherit{border-radius:inherit}.no-transition{transition:none!important}.transition-0{transition:0s!important}.glossy{background-image:linear-gradient(180deg,hsla(0,0%,100%,0.3),hsla(0,0%,100%,0) 50%,rgba(0,0,0,0.12) 51%,rgba(0,0,0,0.04))!important}.q-placeholder::-moz-placeholder{color:inherit;opacity:0.7}.q-placeholder:-ms-input-placeholder{color:inherit!important;opacity:0.7!important}.q-placeholder::placeholder{color:inherit;opacity:0.7}.q-body--fullscreen-mixin{position:fixed!important}.q-body--prevent-scroll{width:100vw;height:100vh;overflow-x:hidden;contain:layout size;contain:layout size style;-ms-scroll-chaining:none;overscroll-behavior:none;-webkit-overflow-scrolling:none}.q-body--prevent-scroll body{position:relative!important;overflow:hidden}.q-body--prevent-scroll .q-drawer__backdrop{width:100vw;max-height:none}.q-body--prevent-scroll[dir=rtl] .q-body--scroll-locked{transform:translateX(var(--q-scroll-lock-left))}.q-portal__container{contain:size;contain:size style}.q-portal__clone{transform:none!important;flex-shrink:0!important;z-index:-1!important}.q-focus__clone+*,.q-portal__clone{position:fixed!important;transition:none!important;opacity:0!important}.q-focus__clone+*{pointer-events:none!important}body.native-mobile .q-focus__clone+*{top:50vh}.q-no-input-spinner{-moz-appearance:textfield!important}.q-no-input-spinner::-webkit-inner-spin-button,.q-no-input-spinner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.q-link{outline:0;text-decoration:none}.q-link--focusable:focus-visible{-webkit-text-decoration:underline dashed currentColor 1px;text-decoration:underline dashed currentColor 1px}body.electron .q-electron-drag{-webkit-user-select:none;-webkit-app-region:drag}body.electron .q-electron-drag--exception,body.electron .q-electron-drag .q-btn-item{-webkit-app-region:no-drag}img.responsive{max-width:100%;height:auto}.non-selectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.scroll{overflow:auto}.scroll,.scroll-x,.scroll-y{-webkit-overflow-scrolling:touch;will-change:scroll-position}.scroll-x{overflow-x:auto}.scroll-y{overflow-y:auto}.no-scroll{overflow:hidden!important}.no-pointer-events,.no-pointer-events--children,.no-pointer-events--children *{pointer-events:none!important}.all-pointer-events{pointer-events:all!important}.cursor-pointer{cursor:pointer!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-inherit{cursor:inherit!important}.cursor-none{cursor:none!important}[aria-busy=true]{cursor:progress}[aria-controls],[role=button]{cursor:pointer}[aria-disabled]{cursor:default}.rotate-45{transform:rotate(45deg)}.rotate-90{transform:rotate(90deg)}.rotate-135{transform:rotate(135deg)}.rotate-180{transform:rotate(180deg)}.rotate-205{transform:rotate(205deg)}.rotate-225{transform:rotate(225deg)}.rotate-270{transform:rotate(270deg)}.rotate-315{transform:rotate(315deg)}.flip-horizontal{transform:scaleX(-1)}.flip-vertical{transform:scaleY(-1)}.float-left{float:left}.float-right{float:right}.relative-position{position:relative}.fixed,.fixed-bottom,.fixed-bottom-left,.fixed-bottom-right,.fixed-center,.fixed-full,.fixed-left,.fixed-right,.fixed-top,.fixed-top-left,.fixed-top-right,.fullscreen{position:fixed}.absolute,.absolute-bottom,.absolute-bottom-left,.absolute-bottom-right,.absolute-center,.absolute-full,.absolute-left,.absolute-right,.absolute-top,.absolute-top-left,.absolute-top-right{position:absolute}.absolute-top,.fixed-top{top:0;left:0;right:0}.absolute-right,.fixed-right{top:0;right:0;bottom:0}.absolute-bottom,.fixed-bottom{right:0;bottom:0;left:0}.absolute-left,.fixed-left{top:0;bottom:0;left:0}.absolute-top-left,.fixed-top-left{top:0;left:0}.absolute-top-right,.fixed-top-right{top:0;right:0}.absolute-bottom-left,.fixed-bottom-left{bottom:0;left:0}.absolute-bottom-right,.fixed-bottom-right{bottom:0;right:0}.fullscreen{z-index:6000;border-radius:0!important;max-width:100vw;max-height:100vh}body.q-ios-padding .fullscreen{padding-top:20px!important;padding-top:env(safe-area-inset-top)!important;padding-bottom:env(safe-area-inset-bottom)!important}.absolute-full,.fixed-full,.fullscreen{top:0;right:0;bottom:0;left:0}.absolute-center,.fixed-center{top:50%;left:50%;transform:translate(-50%,-50%)}.vertical-top{vertical-align:top!important}.vertical-middle{vertical-align:middle!important}.vertical-bottom{vertical-align:bottom!important}.on-left{margin-right:12px}.on-right{margin-left:12px}:root{--q-size-xs:0;--q-size-sm:600px;--q-size-md:1024px;--q-size-lg:1440px;--q-size-xl:1920px}.fit{width:100%!important}.fit,.full-height{height:100%!important}.full-width{width:100%!important;margin-left:0!important;margin-right:0!important}.window-height{margin-top:0!important;margin-bottom:0!important;height:100vh!important}.window-width{margin-left:0!important;margin-right:0!important;width:100vw!important}.block{display:block!important}.inline-block{display:inline-block!important}.q-pa-none{padding:0 0}.q-pl-none{padding-left:0}.q-pr-none{padding-right:0}.q-pt-none,.q-py-none{padding-top:0}.q-pb-none,.q-py-none{padding-bottom:0}.q-px-none{padding-left:0;padding-right:0}.q-ma-none{margin:0 0}.q-ml-none{margin-left:0}.q-mr-none{margin-right:0}.q-mt-none,.q-my-none{margin-top:0}.q-mb-none,.q-my-none{margin-bottom:0}.q-mx-none{margin-left:0;margin-right:0}.q-pa-xs{padding:4px 4px}.q-pl-xs{padding-left:4px}.q-pr-xs{padding-right:4px}.q-pt-xs,.q-py-xs{padding-top:4px}.q-pb-xs,.q-py-xs{padding-bottom:4px}.q-px-xs{padding-left:4px;padding-right:4px}.q-ma-xs{margin:4px 4px}.q-ml-xs{margin-left:4px}.q-mr-xs{margin-right:4px}.q-mt-xs,.q-my-xs{margin-top:4px}.q-mb-xs,.q-my-xs{margin-bottom:4px}.q-mx-xs{margin-left:4px;margin-right:4px}.q-pa-sm{padding:8px 8px}.q-pl-sm{padding-left:8px}.q-pr-sm{padding-right:8px}.q-pt-sm,.q-py-sm{padding-top:8px}.q-pb-sm,.q-py-sm{padding-bottom:8px}.q-px-sm{padding-left:8px;padding-right:8px}.q-ma-sm{margin:8px 8px}.q-ml-sm{margin-left:8px}.q-mr-sm{margin-right:8px}.q-mt-sm,.q-my-sm{margin-top:8px}.q-mb-sm,.q-my-sm{margin-bottom:8px}.q-mx-sm{margin-left:8px;margin-right:8px}.q-pa-md{padding:16px 16px}.q-pl-md{padding-left:16px}.q-pr-md{padding-right:16px}.q-pt-md,.q-py-md{padding-top:16px}.q-pb-md,.q-py-md{padding-bottom:16px}.q-px-md{padding-left:16px;padding-right:16px}.q-ma-md{margin:16px 16px}.q-ml-md{margin-left:16px}.q-mr-md{margin-right:16px}.q-mt-md,.q-my-md{margin-top:16px}.q-mb-md,.q-my-md{margin-bottom:16px}.q-mx-md{margin-left:16px;margin-right:16px}.q-pa-lg{padding:24px 24px}.q-pl-lg{padding-left:24px}.q-pr-lg{padding-right:24px}.q-pt-lg,.q-py-lg{padding-top:24px}.q-pb-lg,.q-py-lg{padding-bottom:24px}.q-px-lg{padding-left:24px;padding-right:24px}.q-ma-lg{margin:24px 24px}.q-ml-lg{margin-left:24px}.q-mr-lg{margin-right:24px}.q-mt-lg,.q-my-lg{margin-top:24px}.q-mb-lg,.q-my-lg{margin-bottom:24px}.q-mx-lg{margin-left:24px;margin-right:24px}.q-pa-xl{padding:48px 48px}.q-pl-xl{padding-left:48px}.q-pr-xl{padding-right:48px}.q-pt-xl,.q-py-xl{padding-top:48px}.q-pb-xl,.q-py-xl{padding-bottom:48px}.q-px-xl{padding-left:48px;padding-right:48px}.q-ma-xl{margin:48px 48px}.q-ml-xl{margin-left:48px}.q-mr-xl{margin-right:48px}.q-mt-xl,.q-my-xl{margin-top:48px}.q-mb-xl,.q-my-xl{margin-bottom:48px}.q-mx-xl{margin-left:48px;margin-right:48px}.q-mt-auto,.q-my-auto{margin-top:auto}.q-ml-auto{margin-left:auto}.q-mb-auto,.q-my-auto{margin-bottom:auto}.q-mr-auto,.q-mx-auto{margin-right:auto}.q-mx-auto{margin-left:auto}.q-touch{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;user-drag:none;-khtml-user-drag:none;-webkit-user-drag:none}.q-touch-x{touch-action:pan-x}.q-touch-y{touch-action:pan-y}.q-transition--fade-leave-active,.q-transition--flip-leave-active,.q-transition--jump-down-leave-active,.q-transition--jump-left-leave-active,.q-transition--jump-right-leave-active,.q-transition--jump-up-leave-active,.q-transition--rotate-leave-active,.q-transition--scale-leave-active,.q-transition--slide-down-leave-active,.q-transition--slide-left-leave-active,.q-transition--slide-right-leave-active,.q-transition--slide-up-leave-active{position:absolute}.q-transition--slide-down-enter-active,.q-transition--slide-down-leave-active,.q-transition--slide-left-enter-active,.q-transition--slide-left-leave-active,.q-transition--slide-right-enter-active,.q-transition--slide-right-leave-active,.q-transition--slide-up-enter-active,.q-transition--slide-up-leave-active{transition:transform 0.3s cubic-bezier(0.215,0.61,0.355,1)}.q-transition--slide-right-enter{transform:translate3d(-100%,0,0)}.q-transition--slide-left-enter,.q-transition--slide-right-leave-to{transform:translate3d(100%,0,0)}.q-transition--slide-left-leave-to{transform:translate3d(-100%,0,0)}.q-transition--slide-up-enter{transform:translate3d(0,100%,0)}.q-transition--slide-down-enter,.q-transition--slide-up-leave-to{transform:translate3d(0,-100%,0)}.q-transition--slide-down-leave-to{transform:translate3d(0,100%,0)}.q-transition--jump-down-enter-active,.q-transition--jump-down-leave-active,.q-transition--jump-left-enter-active,.q-transition--jump-left-leave-active,.q-transition--jump-right-enter-active,.q-transition--jump-right-leave-active,.q-transition--jump-up-enter-active,.q-transition--jump-up-leave-active{transition:opacity 0.3s,transform 0.3s}.q-transition--jump-down-enter,.q-transition--jump-down-leave-to,.q-transition--jump-left-enter,.q-transition--jump-left-leave-to,.q-transition--jump-right-enter,.q-transition--jump-right-leave-to,.q-transition--jump-up-enter,.q-transition--jump-up-leave-to{opacity:0}.q-transition--jump-right-enter{transform:translate3d(-15px,0,0)}.q-transition--jump-left-enter,.q-transition--jump-right-leave-to{transform:translate3d(15px,0,0)}.q-transition--jump-left-leave-to{transform:translateX(-15px)}.q-transition--jump-up-enter{transform:translate3d(0,15px,0)}.q-transition--jump-down-enter,.q-transition--jump-up-leave-to{transform:translate3d(0,-15px,0)}.q-transition--jump-down-leave-to{transform:translate3d(0,15px,0)}.q-transition--fade-enter-active,.q-transition--fade-leave-active{transition:opacity 0.3s ease-out}.q-transition--fade-enter,.q-transition--fade-leave,.q-transition--fade-leave-to{opacity:0}.q-transition--scale-enter-active,.q-transition--scale-leave-active{transition:opacity 0.3s,transform 0.3s cubic-bezier(0.215,0.61,0.355,1)}.q-transition--scale-enter,.q-transition--scale-leave,.q-transition--scale-leave-to{opacity:0;transform:scale3d(0,0,1)}.q-transition--rotate-enter-active,.q-transition--rotate-leave-active{transition:opacity 0.3s,transform 0.3s cubic-bezier(0.215,0.61,0.355,1);transform-style:preserve-3d}.q-transition--rotate-enter,.q-transition--rotate-leave,.q-transition--rotate-leave-to{opacity:0;transform:scale3d(0,0,1) rotate3d(0,0,1,90deg)}.q-transition--flip-down-enter-active,.q-transition--flip-down-leave-active,.q-transition--flip-left-enter-active,.q-transition--flip-left-leave-active,.q-transition--flip-right-enter-active,.q-transition--flip-right-leave-active,.q-transition--flip-up-enter-active,.q-transition--flip-up-leave-active{transition:transform 0.3s;backface-visibility:hidden}.q-transition--flip-down-enter-to,.q-transition--flip-down-leave,.q-transition--flip-left-enter-to,.q-transition--flip-left-leave,.q-transition--flip-right-enter-to,.q-transition--flip-right-leave,.q-transition--flip-up-enter-to,.q-transition--flip-up-leave{transform:perspective(400px) rotate3d(1,1,0,0deg)}.q-transition--flip-right-enter{transform:perspective(400px) rotate3d(0,1,0,-180deg)}.q-transition--flip-left-enter,.q-transition--flip-right-leave-to{transform:perspective(400px) rotate3d(0,1,0,180deg)}.q-transition--flip-left-leave-to{transform:perspective(400px) rotate3d(0,1,0,-180deg)}.q-transition--flip-up-enter{transform:perspective(400px) rotate3d(1,0,0,-180deg)}.q-transition--flip-down-enter,.q-transition--flip-up-leave-to{transform:perspective(400px) rotate3d(1,0,0,180deg)}.q-transition--flip-down-leave-to{transform:perspective(400px) rotate3d(1,0,0,-180deg)}.q-transition--hide-scroll,.q-transition--hide-scroll>.q-panel:first-child{overflow:hidden!important}body{min-width:100px;min-height:100%;font-family:Roboto,-apple-system,Helvetica Neue,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;line-height:1.5;font-size:14px}h1{font-size:6rem;line-height:6rem;letter-spacing:-0.01562em}h1,h2{font-weight:300}h2{font-size:3.75rem;line-height:3.75rem;letter-spacing:-0.00833em}h3{font-size:3rem;line-height:3.125rem;letter-spacing:normal}h3,h4{font-weight:400}h4{font-size:2.125rem;line-height:2.5rem;letter-spacing:0.00735em}h5{font-size:1.5rem;font-weight:400;letter-spacing:normal}h5,h6{line-height:2rem}h6{font-size:1.25rem;font-weight:500;letter-spacing:0.0125em}p{margin:0 0 16px}.text-h1{font-size:6rem;font-weight:300;line-height:6rem;letter-spacing:-0.01562em}.text-h2{font-size:3.75rem;font-weight:300;line-height:3.75rem;letter-spacing:-0.00833em}.text-h3{font-size:3rem;font-weight:400;line-height:3.125rem;letter-spacing:normal}.text-h4{font-size:2.125rem;font-weight:400;line-height:2.5rem;letter-spacing:0.00735em}.text-h5{font-size:1.5rem;font-weight:400;line-height:2rem;letter-spacing:normal}.text-h6{font-size:1.25rem;font-weight:500;line-height:2rem;letter-spacing:0.0125em}.text-subtitle1{font-size:1rem;font-weight:400;line-height:1.75rem;letter-spacing:0.00937em}.text-subtitle2{font-size:0.875rem;font-weight:500;line-height:1.375rem;letter-spacing:0.00714em}.text-body1{font-size:1rem;font-weight:400;line-height:1.5rem;letter-spacing:0.03125em}.text-body2{font-size:0.875rem;font-weight:400;line-height:1.25rem;letter-spacing:0.01786em}.text-overline{font-size:0.75rem;font-weight:500;line-height:2rem;letter-spacing:0.16667em}.text-caption{font-size:0.75rem;font-weight:400;line-height:1.25rem;letter-spacing:0.03333em}.text-uppercase{text-transform:uppercase}.text-lowercase{text-transform:lowercase}.text-capitalize{text-transform:capitalize}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-justify{text-align:justify;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.text-italic{font-style:italic}.text-bold{font-weight:700}.text-no-wrap{white-space:nowrap}.text-strike{text-decoration:line-through}.text-weight-thin{font-weight:100}.text-weight-light{font-weight:300}.text-weight-regular{font-weight:400}.text-weight-medium{font-weight:500}.text-weight-bold{font-weight:700}.text-weight-bolder{font-weight:900}small{font-size:80%}big{font-size:170%}sub{bottom:-0.25em}sup{top:-0.5em}.no-margin{margin:0!important}.no-padding{padding:0!important}.no-border{border:0!important}.no-border-radius{border-radius:0!important}.no-box-shadow{box-shadow:none!important}.no-outline{outline:0!important}.ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ellipsis-2-lines,.ellipsis-3-lines{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical}.ellipsis-2-lines{-webkit-line-clamp:2}.ellipsis-3-lines{-webkit-line-clamp:3}.readonly{cursor:default!important}.disabled,.disabled *,[disabled],[disabled] *{outline:0!important;cursor:not-allowed!important}.disabled,[disabled]{opacity:0.6!important}.hidden{display:none!important}.invisible{visibility:hidden!important}.transparent{background:transparent!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-hidden-y{overflow-y:hidden!important}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{width:0;height:0;display:none}.dimmed:after,.light-dimmed:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.dimmed:after{background:rgba(0,0,0,0.4)!important}.light-dimmed:after{background:hsla(0,0%,100%,0.6)!important}.z-top{z-index:7000!important}.z-max{z-index:9998!important}body.capacitor .capacitor-hide,body.cordova .cordova-hide,body.desktop .desktop-hide,body.electron .electron-hide,body.mobile .mobile-hide,body.native-mobile .native-mobile-hide,body.platform-android .platform-android-hide,body.platform-ios .platform-ios-hide,body.touch .touch-hide,body.within-iframe .within-iframe-hide,body:not(.capacitor) .capacitor-only,body:not(.cordova) .cordova-only,body:not(.desktop) .desktop-only,body:not(.electron) .electron-only,body:not(.mobile) .mobile-only,body:not(.native-mobile) .native-mobile-only,body:not(.platform-android) .platform-android-only,body:not(.platform-ios) .platform-ios-only,body:not(.touch) .touch-only,body:not(.within-iframe) .within-iframe-only{display:none!important}@media (orientation:portrait){.orientation-landscape{display:none!important}}@media (orientation:landscape){.orientation-portrait{display:none!important}}@media screen{.print-only{display:none!important}}@media print{.print-hide{display:none!important}}@media (max-width:599.98px){.gt-lg,.gt-md,.gt-sm,.gt-xs,.lg,.md,.sm,.xl,.xs-hide{display:none!important}}@media (min-width:600px) and (max-width:1023.98px){.gt-lg,.gt-md,.gt-sm,.lg,.lt-sm,.md,.sm-hide,.xl,.xs{display:none!important}}@media (min-width:1024px) and (max-width:1439.98px){.gt-lg,.gt-md,.lg,.lt-md,.lt-sm,.md-hide,.sm,.xl,.xs{display:none!important}}@media (min-width:1440px) and (max-width:1919.98px){.gt-lg,.lg-hide,.lt-lg,.lt-md,.lt-sm,.md,.sm,.xl,.xs{display:none!important}}@media (min-width:1920px){.lg,.lt-lg,.lt-md,.lt-sm,.lt-xl,.md,.sm,.xl-hide,.xs{display:none!important}}.q-focus-helper,.q-focusable,.q-hoverable,.q-manual-focusable{outline:0}body.desktop .q-focus-helper{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;border-radius:inherit;opacity:0;transition:background-color 0.3s cubic-bezier(0.25,0.8,0.5,1),opacity 0.4s cubic-bezier(0.25,0.8,0.5,1)}body.desktop .q-focus-helper:after,body.desktop .q-focus-helper:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;border-radius:inherit;transition:background-color 0.3s cubic-bezier(0.25,0.8,0.5,1),opacity 0.6s cubic-bezier(0.25,0.8,0.5,1)}body.desktop .q-focus-helper:before{background:#000}body.desktop .q-focus-helper:after{background:#fff}body.desktop .q-focus-helper--rounded{border-radius:4px}body.desktop .q-focus-helper--round{border-radius:50%}body.desktop .q-focusable:focus>.q-focus-helper,body.desktop .q-hoverable:hover>.q-focus-helper,body.desktop .q-manual-focusable--focused>.q-focus-helper{background:currentColor;opacity:0.15}body.desktop .q-focusable:focus>.q-focus-helper:before,body.desktop .q-hoverable:hover>.q-focus-helper:before,body.desktop .q-manual-focusable--focused>.q-focus-helper:before{opacity:0.1}body.desktop .q-focusable:focus>.q-focus-helper:after,body.desktop .q-hoverable:hover>.q-focus-helper:after,body.desktop .q-manual-focusable--focused>.q-focus-helper:after{opacity:0.4}body.desktop .q-focusable:focus>.q-focus-helper,body.desktop .q-manual-focusable--focused>.q-focus-helper{opacity:0.22}body.desktop .q-key-group-navigation--active{outline:auto}.q-dark-auto,.q-light,body.body--dark-auto,body.body--light{color:#000;color:var(--q-color-light-text);background:#fff;background:var(--q-color-light-page)}body.body--dark{background:#121212;background:var(--q-color-dark-page)}.q-dark,body.body--dark{color:#fff;color:var(--q-color-dark-text)}.q-dark{background:#1d1d1d;background:var(--q-color-dark)}@media (prefers-color-scheme:dark){body.body--dark-auto{background:#121212;background:var(--q-color-dark-page)}.q-dark-auto,body.body--dark-auto{color:#fff;color:var(--q-color-dark-text)}.q-dark-auto{background:#1d1d1d;background:var(--q-color-dark)}}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.q-item:after,.q-notification:after,.q-toolbar:after{content:"";font-size:0;visibility:collapse;display:inline;width:0}.q-banner>.q-banner__avatar{min-height:38px}.q-banner--dense>.q-banner__avatar{min-height:20px}.q-item:after{min-height:32px}.q-item--denseafter,.q-list--dense>.q-itemafter{min-height:24px}.q-toolbar:after{min-height:50px}.q-notification--standard:after{min-height:48px}.q-notification--multi-line{min-height:68px}.q-btn__wrapper,.q-menu .q-item__section--main,.q-table__middle,.q-time__content,.q-toolbar__title{flex-basis:auto}.q-banner__content{flex-basis:0!important}.q-dialog__inner>.q-banner>.q-banner__content,.q-menu>.q-banner>.q-banner__content{flex-basis:auto!important}.q-tab__content{flex-basis:auto;min-width:100%}.q-card__actions--vert{flex:0 0 auto}.column{min-width:0%}.q-item__section--avatar{min-width:56px}button.q-btn--actionable:active:hover .q-btn__wrapper{margin:-1px 1px 1px -1px}.q-btn-group--push>button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper{margin:1px 1px -1px -1px}.q-btn{overflow:visible}.q-btn--wrap{flex-direction:row}.q-carousel__slide>*{max-width:100%}.q-tabs--vertical .q-tab__indicator{height:auto}.q-spinner{-webkit-animation:q-ie-spinner 2s linear infinite;animation:q-ie-spinner 2s linear infinite;transform-origin:center center;opacity:0.5}.q-spinner.q-spinner-mat .path{stroke-dasharray:89,200}.q-checkbox__indet{opacity:0}.q-checkbox__inner--indet .q-checkbox__indet{opacity:1}.q-radio__check{opacity:0}.q-radio__inner--truthy .q-radio__check{opacity:1}.q-date__main{min-height:290px!important}.q-date__months{align-items:stretch}.q-time--portrait .q-time__main{display:flex;flex-direction:column;flex-wrap:nowrap;flex:1 0 auto}.q-field__prefix,.q-field__suffix{flex:1 0 auto}.q-field__bottom--stale .q-field__messages{left:12px}.q-field--borderless .q-field__bottom--stale .q-field__messages,.q-field--standard .q-field__bottom--stale .q-field__messages{left:0}.q-field--float .q-field__label{max-width:100%}.q-focus-helper{z-index:1}}@media (-ms-high-contrast:none) and (min-width:0),screen and (-ms-high-contrast:active) and (min-width:0){.flex>.col,.flex>.col-xs,.row>.col,.row>.col-xs{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:600px),screen and (-ms-high-contrast:active) and (min-width:600px){.flex>.col-sm,.row>.col-sm{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1024px),screen and (-ms-high-contrast:active) and (min-width:1024px){.flex>.col-md,.row>.col-md{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1440px),screen and (-ms-high-contrast:active) and (min-width:1440px){.flex>.col-lg,.row>.col-lg{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1920px),screen and (-ms-high-contrast:active) and (min-width:1920px){.flex>.col-xl,.row>.col-xl{flex-basis:auto;min-width:0%}}@supports (-ms-ime-align:auto){.q-item:after,.q-notification:after,.q-toolbar:after{content:"";font-size:0;visibility:collapse;display:inline;width:0}.q-banner>.q-banner__avatar{min-height:38px}.q-banner--dense>.q-banner__avatar{min-height:20px}.q-item:after{min-height:32px}.q-item--denseafter,.q-list--dense>.q-itemafter{min-height:24px}.q-toolbar:after{min-height:50px}.q-notification--standard:after{min-height:48px}.q-notification--multi-line{min-height:68px}.q-btn__wrapper,.q-menu .q-item__section--main,.q-table__middle,.q-time__content,.q-toolbar__title{flex-basis:auto}.q-banner__content{flex-basis:0!important}.q-dialog__inner>.q-banner>.q-banner__content,.q-menu>.q-banner>.q-banner__content{flex-basis:auto!important}.q-tab__content{flex-basis:auto;min-width:100%}.q-card__actions--vert{flex:0 0 auto}.column{min-width:0%}@media (-ms-high-contrast:none) and (min-width:0),screen and (-ms-high-contrast:active) and (min-width:0){.flex>.col,.flex>.col-xs,.row>.col,.row>.col-xs{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:600px),screen and (-ms-high-contrast:active) and (min-width:600px){.flex>.col-sm,.row>.col-sm{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1024px),screen and (-ms-high-contrast:active) and (min-width:1024px){.flex>.col-md,.row>.col-md{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1440px),screen and (-ms-high-contrast:active) and (min-width:1440px){.flex>.col-lg,.row>.col-lg{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1920px),screen and (-ms-high-contrast:active) and (min-width:1920px){.flex>.col-xl,.row>.col-xl{flex-basis:auto;min-width:0%}}.q-item__section--avatar{min-width:56px}button.q-btn--actionable:active:hover .q-btn__wrapper{margin:-1px 1px 1px -1px}.q-btn-group--push>button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper{margin:1px 1px -1px -1px}.q-btn{overflow:visible}.q-btn--wrap{flex-direction:row}.q-carousel__slide>*{max-width:100%}.q-tabs--vertical .q-tab__indicator{height:auto}.q-spinner{-webkit-animation:q-ie-spinner 2s linear infinite;animation:q-ie-spinner 2s linear infinite;transform-origin:center center;opacity:0.5}.q-spinner.q-spinner-mat .path{stroke-dasharray:89,200}.q-checkbox__indet{opacity:0}.q-checkbox__inner--indet .q-checkbox__indet{opacity:1}.q-radio__check{opacity:0}.q-radio__inner--truthy .q-radio__check{opacity:1}.q-date__main{min-height:290px!important}.q-date__months{align-items:stretch}.q-time--portrait .q-time__main{display:flex;flex-direction:column;flex-wrap:nowrap;flex:1 0 auto}.q-field__prefix,.q-field__suffix{flex:1 0 auto}.q-field__bottom--stale .q-field__messages{left:12px}.q-field--borderless .q-field__bottom--stale .q-field__messages,.q-field--standard .q-field__bottom--stale .q-field__messages{left:0}.q-field--float .q-field__label{max-width:100%}.q-focus-helper{z-index:1}}@-webkit-keyframes q-circular-progress-circle{0%{stroke-dasharray:1,400;stroke-dashoffset:0}50%{stroke-dasharray:400,400;stroke-dashoffset:-100}to{stroke-dasharray:400,400;stroke-dashoffset:-300}}@keyframes q-circular-progress-circle{0%{stroke-dasharray:1,400;stroke-dashoffset:0}50%{stroke-dasharray:400,400;stroke-dashoffset:-100}to{stroke-dasharray:400,400;stroke-dashoffset:-300}}@-webkit-keyframes q-expansion-done{0%{--q-exp-done:1}}@keyframes q-expansion-done{0%{--q-exp-done:1}}@-webkit-keyframes q-field-label{40%{margin-left:2px}60%,80%{margin-left:-2px}70%,90%{margin-left:2px}}@keyframes q-field-label{40%{margin-left:2px}60%,80%{margin-left:-2px}70%,90%{margin-left:2px}}@-webkit-keyframes q-autofill{to{background:transparent;color:inherit}}@keyframes q-autofill{to{background:transparent;color:inherit}}@-webkit-keyframes q-linear-progress--indeterminate{0%{transform:translate3d(-35%,0,0) scale3d(0.35,1,1)}60%{transform:translate3d(100%,0,0) scale3d(0.9,1,1)}to{transform:translate3d(100%,0,0) scale3d(0.9,1,1)}}@keyframes q-linear-progress--indeterminate{0%{transform:translate3d(-35%,0,0) scale3d(0.35,1,1)}60%{transform:translate3d(100%,0,0) scale3d(0.9,1,1)}to{transform:translate3d(100%,0,0) scale3d(0.9,1,1)}}@-webkit-keyframes q-linear-progress--indeterminate-short{0%{transform:translate3d(-101%,0,0) scale3d(1,1,1)}60%{transform:translate3d(107%,0,0) scale3d(0.01,1,1)}to{transform:translate3d(107%,0,0) scale3d(0.01,1,1)}}@keyframes q-linear-progress--indeterminate-short{0%{transform:translate3d(-101%,0,0) scale3d(1,1,1)}60%{transform:translate3d(107%,0,0) scale3d(0.01,1,1)}to{transform:translate3d(107%,0,0) scale3d(0.01,1,1)}}@-webkit-keyframes q-skeleton--fade{0%{opacity:1}50%{opacity:0.4}to{opacity:1}}@keyframes q-skeleton--fade{0%{opacity:1}50%{opacity:0.4}to{opacity:1}}@-webkit-keyframes q-skeleton--pulse{0%{transform:scale(1)}50%{transform:scale(0.85)}to{transform:scale(1)}}@keyframes q-skeleton--pulse{0%{transform:scale(1)}50%{transform:scale(0.85)}to{transform:scale(1)}}@-webkit-keyframes q-skeleton--pulse-x{0%{transform:scaleX(1)}50%{transform:scaleX(0.75)}to{transform:scaleX(1)}}@keyframes q-skeleton--pulse-x{0%{transform:scaleX(1)}50%{transform:scaleX(0.75)}to{transform:scaleX(1)}}@-webkit-keyframes q-skeleton--pulse-y{0%{transform:scaleY(1)}50%{transform:scaleY(0.75)}to{transform:scaleY(1)}}@keyframes q-skeleton--pulse-y{0%{transform:scaleY(1)}50%{transform:scaleY(0.75)}to{transform:scaleY(1)}}@-webkit-keyframes q-skeleton--wave{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@keyframes q-skeleton--wave{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@-webkit-keyframes q-spin{0%{transform:rotate3d(0,0,1,0deg)}25%{transform:rotate3d(0,0,1,90deg)}50%{transform:rotate3d(0,0,1,180deg)}75%{transform:rotate3d(0,0,1,270deg)}to{transform:rotate3d(0,0,1,359deg)}}@keyframes q-spin{0%{transform:rotate3d(0,0,1,0deg)}25%{transform:rotate3d(0,0,1,90deg)}50%{transform:rotate3d(0,0,1,180deg)}75%{transform:rotate3d(0,0,1,270deg)}to{transform:rotate3d(0,0,1,359deg)}}@-webkit-keyframes q-mat-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes q-mat-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-webkit-keyframes q-notif-badge{15%{transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes q-notif-badge{15%{transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@-webkit-keyframes q-notif-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes q-notif-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@-webkit-keyframes q-scale{0%{transform:scale(1)}50%{transform:scale(1.04)}to{transform:scale(1)}}@keyframes q-scale{0%{transform:scale(1)}50%{transform:scale(1.04)}to{transform:scale(1)}}@-webkit-keyframes q-fade{0%{opacity:0}to{opacity:1}}@keyframes q-fade{0%{opacity:0}to{opacity:1}}@-webkit-keyframes q-ie-spinner{0%{opacity:0.5}50%{opacity:1}to{opacity:0.5}}@keyframes q-ie-spinner{0%{opacity:0.5}50%{opacity:1}to{opacity:0.5}} \ No newline at end of file diff --git a/dist/quasar.rtl.css b/dist/quasar.rtl.css new file mode 100644 index 00000000000..ff599f25059 --- /dev/null +++ b/dist/quasar.rtl.css @@ -0,0 +1,15097 @@ +/* + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +*, +*:before, +*:after { + box-sizing: inherit; + -webkit-tap-highlight-color: transparent; + -moz-tap-highlight-color: transparent; +} +html, +body, +#q-app { + width: 100%; +} +html[dir=ltr], [dir=ltr] body, [dir=ltr] #q-app { + direction: ltr; +} +html[dir=rtl], [dir=rtl] body, [dir=rtl] #q-app { + direction: rtl; +} +body.platform-ios.within-iframe, +body.platform-ios.within-iframe #q-app { + width: 100px; + min-width: 100%; +} +html, +body { + box-sizing: border-box; +} +html[dir], [dir] body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary { + display: block; +} +/* + * line 1: Remove the bottom border in Firefox 39-. + * lines 2,3: Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + text-decoration: underline; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} +[dir] abbr[title] { + border-bottom: none; +} +[dir] img { + border-style: none; +} +svg:not(:root) { + overflow: hidden; +} +/* + * line 1: Correct the inheritance and scaling of font size in all browsers. + * line 2: Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +/* + * lines 1,2: Add the correct box sizing in Firefox. + * line 3: Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} +button, +input, +optgroup, +select, +textarea { + font: inherit; + font-family: inherit; +} +[dir] button, [dir] input, [dir] optgroup, [dir] select, [dir] textarea { + margin: 0; +} +optgroup { + font-weight: bold; +} +/* + * Show the overflow in IE. + * input: Show the overflow in Edge. + * select: Show the overflow in Edge, Firefox, and IE. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * select: Remove the inheritance of text transform in Firefox. + */ +button, +input, +select { + overflow: visible; + text-transform: none; +} +[dir] button::-moz-focus-inner, [dir] input::-moz-focus-inner { + border: 0; + padding: 0; +} +button:-moz-focusring, +input:-moz-focusring { + outline: 1px dotted ButtonText; +} +[dir] fieldset { + padding: 0.35em 0.75em 0.625em; +} +/** + * lines 1,3,4,6: Correct the text wrapping in Edge and IE. + * line 2: Correct the color inheritance from `fieldset` elements in IE. + * line 5: Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + white-space: normal; +} +[dir] legend { + padding: 0; +} +progress { + vertical-align: baseline; +} +textarea { + overflow: auto; +} +input[type='search']::-webkit-search-cancel-button, +input[type='search']::-webkit-search-decoration { + -webkit-appearance: none; +} +.q-icon { + line-height: 1; + width: 1em; + height: 1em; + flex-shrink: 0; + letter-spacing: normal; + text-transform: none; + white-space: nowrap; + word-wrap: normal; + position: relative; + box-sizing: content-box; + fill: currentColor; +} +[dir] .q-icon { + text-align: center; +} +[dir=ltr] .q-icon { + direction: ltr; +} +[dir=rtl] .q-icon { + direction: rtl; +} +.q-icon:before, +.q-icon:after { + width: 100%; + height: 100%; + display: flex !important; + align-items: center; + justify-content: center; +} +.q-icon > svg, +.q-icon > img { + width: 100%; + height: 100%; +} +.q-icon, +.material-icons, +.material-icons-outlined, +.material-icons-round, +.material-icons-sharp, +.material-symbols-outlined, +.material-symbols-rounded, +.material-symbols-sharp { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: inherit; + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; +} +[dir] .q-icon, [dir] .material-icons, [dir] .material-icons-outlined, [dir] .material-icons-round, [dir] .material-icons-sharp, [dir] .material-symbols-outlined, [dir] .material-symbols-rounded, [dir] .material-symbols-sharp { + cursor: inherit; +} +.q-panel { + height: 100%; + width: 100%; +} +.q-panel > div { + height: 100%; + width: 100%; +} +.q-panel-parent { + overflow: hidden; + position: relative; +} +.q-loading-bar { + position: fixed; + z-index: 9998; + transition: transform 0.5s cubic-bezier(0, 0, 0.2, 1), opacity 0.5s; +} +[dir] .q-loading-bar { + background: #f44336; +} +.q-loading-bar--top { + left: 0 /* rtl:ignore */; + right: 0 /* rtl:ignore */; + top: 0; + width: 100%; +} +.q-loading-bar--bottom { + left: 0 /* rtl:ignore */; + right: 0 /* rtl:ignore */; + bottom: 0; + width: 100%; +} +.q-loading-bar--right { + top: 0; + bottom: 0; + height: 100%; +} +[dir=ltr] .q-loading-bar--right { + right: 0; +} +[dir=rtl] .q-loading-bar--right { + left: 0; +} +.q-loading-bar--left { + top: 0; + bottom: 0; + height: 100%; +} +[dir=ltr] .q-loading-bar--left { + left: 0; +} +[dir=rtl] .q-loading-bar--left { + right: 0; +} +.q-avatar { + position: relative; + vertical-align: middle; + display: inline-block; + font-size: 48px; + height: 1em; + width: 1em; +} +[dir] .q-avatar { + border-radius: 50%; +} +.q-avatar__content { + font-size: 0.5em; + line-height: 0.5em; +} +.q-avatar__content, +.q-avatar img:not(.q-icon) { + height: inherit; + width: inherit; +} +[dir] .q-avatar__content, [dir] .q-avatar img:not(.q-icon) { + border-radius: inherit; +} +[dir] .q-avatar--square { + border-radius: 0; +} +.q-badge { + color: #fff; + color: var(--q-color-dark-text); + font-size: 12px; + line-height: 12px; + min-height: 12px; + font-weight: normal; + vertical-align: baseline; +} +[dir] .q-badge { + background-color: #1976d2; + background-color: var(--q-color-primary); + padding: 2px 6px; + border-radius: 4px; +} +.q-badge--single-line { + white-space: nowrap; +} +.q-badge--multi-line { + word-break: break-all; + word-wrap: break-word; +} +.q-badge--floating { + position: absolute; + top: -4px; +} +[dir] .q-badge--floating { + cursor: inherit; +} +[dir=ltr] .q-badge--floating { + right: -3px; +} +[dir=rtl] .q-badge--floating { + left: -3px; +} +.q-badge--transparent { + opacity: 0.8; +} +[dir] .q-badge--outline { + background-color: transparent; + border: 1px solid currentColor; +} +[dir] .q-badge--rounded { + border-radius: 1em; +} +.q-banner { + min-height: 54px; +} +[dir] .q-banner { + padding: 8px 16px; +} +[dir] .q-banner--top-padding { + padding-top: 14px; +} +.q-banner__avatar { + min-width: 1px !important; +} +.q-banner__avatar > .q-avatar { + font-size: 46px; +} +.q-banner__avatar > .q-icon { + font-size: 40px; +} +[dir=ltr] .q-banner__avatar:not(:empty) + .q-banner__content { + padding-left: 16px; +} +[dir=rtl] .q-banner__avatar:not(:empty) + .q-banner__content { + padding-right: 16px; +} +[dir=ltr] .q-banner__actions.col-auto { + padding-left: 16px; +} +[dir=rtl] .q-banner__actions.col-auto { + padding-right: 16px; +} +[dir=ltr] .q-banner__actions.col-all .q-btn-item { + margin: 4px 0 0 4px; +} +[dir=rtl] .q-banner__actions.col-all .q-btn-item { + margin: 4px 4px 0 0; +} +.q-banner--dense { + min-height: 32px; +} +[dir] .q-banner--dense { + padding: 8px; +} +[dir] .q-banner--dense.q-banner--top-padding { + padding-top: 12px; +} +.q-banner--dense .q-banner__avatar > .q-avatar, +.q-banner--dense .q-banner__avatar > .q-icon { + font-size: 28px; +} +[dir=ltr] .q-banner--dense .q-banner__avatar:not(:empty) + .q-banner__content { + padding-left: 8px; +} +[dir=rtl] .q-banner--dense .q-banner__avatar:not(:empty) + .q-banner__content { + padding-right: 8px; +} +[dir=ltr] .q-banner--dense .q-banner__actions.col-auto { + padding-left: 8px; +} +[dir=rtl] .q-banner--dense .q-banner__actions.col-auto { + padding-right: 8px; +} +[dir] .q-bar { + background: rgba(0,0,0,0.2); +} +[dir=ltr] .q-bar > .q-icon { + margin-left: 2px; +} +[dir=rtl] .q-bar > .q-icon { + margin-right: 2px; +} +[dir=ltr] .q-bar > div, [dir=ltr] .q-bar > div + .q-icon { + margin-left: 8px; +} +[dir=rtl] .q-bar > div, [dir=rtl] .q-bar > div + .q-icon { + margin-right: 8px; +} +[dir=ltr] .q-bar > .q-btn { + margin-left: 2px; +} +[dir=rtl] .q-bar > .q-btn { + margin-right: 2px; +} +[dir=ltr] .q-bar > .q-icon:first-child, [dir=ltr] .q-bar > .q-btn:first-child, [dir=ltr] .q-bar > div:first-child { + margin-left: 0; +} +[dir=rtl] .q-bar > .q-icon:first-child, [dir=rtl] .q-bar > .q-btn:first-child, [dir=rtl] .q-bar > div:first-child { + margin-right: 0; +} +.q-bar--standard { + height: 32px; + font-size: 18px; +} +[dir] .q-bar--standard { + padding: 0 12px; +} +.q-bar--standard > div { + font-size: 16px; +} +.q-bar--standard .q-btn { + font-size: 11px; +} +.q-bar--dense { + height: 24px; + font-size: 14px; +} +[dir] .q-bar--dense { + padding: 0 8px; +} +.q-bar--dense .q-btn { + font-size: 8px; +} +[dir] .q-bar--dark { + background: rgba(255,255,255,0.15); +} +@media (prefers-color-scheme: dark) { + [dir] .q-bar--dark-auto { + background: rgba(255,255,255,0.15); + } +} +.q-breadcrumbs__el { + color: inherit; +} +.q-breadcrumbs__el-icon { + font-size: 125%; +} +[dir=ltr] .q-breadcrumbs__el-icon--with-label { + margin-right: 8px; +} +[dir=rtl] .q-breadcrumbs__el-icon--with-label { + margin-left: 8px; +} +[dir=rtl] .q-breadcrumbs__separator .q-icon { + transform: scaleX(-1) /* rtl:ignore */; +} +.q-btn { + display: inline-flex; + flex-direction: column; + align-items: stretch; + position: relative; + outline: 0; + vertical-align: middle; + font-size: 14px; + line-height: 1.715em; + text-decoration: none; + color: inherit; + font-weight: 500; + text-transform: uppercase; + width: auto; + height: auto; +} +[dir] .q-btn { + border: 0; + padding: 0; + background: transparent; + text-align: center; +} +.q-btn .q-icon, +.q-btn .q-spinner { + font-size: 1.715em; +} +.q-btn.disabled { + opacity: 0.7 !important; +} +.q-btn__wrapper { + min-height: 2.572em; + width: 100%; + height: 100%; +} +[dir] .q-btn__wrapper { + padding: 4px 16px; + border-radius: inherit; +} +.q-btn__wrapper:before { + content: ''; + display: block; + position: absolute; + top: 0; + bottom: 0; +} +[dir] .q-btn__wrapper:before { + border-radius: inherit; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +[dir=ltr] .q-btn__wrapper:before { + left: 0; + right: 0; +} +[dir=rtl] .q-btn__wrapper:before { + right: 0; + left: 0; +} +[dir] .q-btn--actionable { + cursor: pointer; +} +.q-btn--actionable.q-btn--standard .q-btn__wrapper:before { + transition: box-shadow 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +[dir] .q-btn--actionable.q-btn--standard:active .q-btn__wrapper:before, [dir] .q-btn--actionable.q-btn--standard.q-btn--active .q-btn__wrapper:before { + box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 5px 8px rgba(0,0,0,0.14), 0 1px 14px rgba(0,0,0,0.12); +} +.q-btn--no-uppercase { + text-transform: none; +} +[dir] .q-btn--rectangle { + border-radius: 3px; +} +[dir] .q-btn--outline { + background: transparent !important; +} +[dir] .q-btn--outline .q-btn__wrapper:before { + border: 1px solid currentColor; +} +[dir] .q-btn--push { + border-radius: 7px; +} +[dir] .q-btn--push .q-btn__wrapper:before { + border-bottom: 3px solid rgba(0,0,0,0.15); +} +.q-btn--push.q-btn--actionable { + transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +.q-btn--push.q-btn--actionable .q-btn__wrapper:before { + transition: top 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), bottom 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), border-bottom-width 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +[dir] .q-btn--push.q-btn--actionable:active, [dir] .q-btn--push.q-btn--actionable.q-btn--active { + transform: translateY(2px); +} +[dir] .q-btn--push.q-btn--actionable:active .q-btn__wrapper:before, [dir] .q-btn--push.q-btn--actionable.q-btn--active .q-btn__wrapper:before { + border-bottom-width: 0; +} +[dir] .q-btn--rounded { + border-radius: 28px; +} +[dir] .q-btn--round { + border-radius: 50%; +} +.q-btn--round .q-btn__wrapper { + min-width: 3em; + min-height: 3em; +} +[dir] .q-btn--round .q-btn__wrapper { + padding: 0; +} +[dir] .q-btn--flat .q-btn__wrapper:before, [dir] .q-btn--outline .q-btn__wrapper:before, [dir] .q-btn--unelevated .q-btn__wrapper:before { + box-shadow: none; +} +.q-btn--dense .q-btn__wrapper { + min-height: 2em; +} +[dir] .q-btn--dense .q-btn__wrapper { + padding: 0.285em; +} +.q-btn--dense.q-btn--round .q-btn__wrapper { + min-height: 2.4em; + min-width: 2.4em; +} +[dir] .q-btn--dense.q-btn--round .q-btn__wrapper { + padding: 0; +} +[dir=ltr] .q-btn--dense .on-left { + margin-right: 6px; +} +[dir=rtl] .q-btn--dense .on-left { + margin-left: 6px; +} +[dir=ltr] .q-btn--dense .on-right { + margin-left: 6px; +} +[dir=rtl] .q-btn--dense .on-right { + margin-right: 6px; +} +.q-btn--fab .q-icon, +.q-btn--fab-mini .q-icon { + font-size: 24px; +} +[dir] .q-btn--fab .q-icon { + margin: auto; +} +.q-btn--fab .q-btn__wrapper { + min-height: 56px; + min-width: 56px; +} +[dir] .q-btn--fab .q-btn__wrapper { + padding: 16px; +} +.q-btn--fab-mini .q-btn__wrapper { + min-height: 40px; + min-width: 40px; +} +[dir] .q-btn--fab-mini .q-btn__wrapper { + padding: 8px; +} +.q-btn__content { + transition: opacity 0.3s; + z-index: 0; +} +.q-btn__content--hidden { + opacity: 0; + pointer-events: none; +} +.q-btn__progress { + z-index: 0; +} +[dir] .q-btn__progress { + border-radius: inherit; +} +.q-btn__progress-indicator { + z-index: -1; +} +[dir] .q-btn__progress-indicator { + background: rgba(255,255,255,0.25); +} +[dir=ltr] .q-btn__progress-indicator { + transform: translateX(-100%); +} +[dir=rtl] .q-btn__progress-indicator { + transform: translateX(100%); +} +[dir] .q-btn__progress--dark .q-btn__progress-indicator { + background: rgba(0,0,0,0.2); +} +.q-btn--flat .q-btn__progress-indicator, +.q-btn--outline .q-btn__progress-indicator { + opacity: 0.2; +} +[dir] .q-btn--flat .q-btn__progress-indicator, [dir] .q-btn--outline .q-btn__progress-indicator { + background: currentColor; +} +[dir=ltr] .q-btn-dropdown--split .q-btn-dropdown__arrow-container.q-btn--outline { + border-left: 1px solid currentColor; +} +[dir=rtl] .q-btn-dropdown--split .q-btn-dropdown__arrow-container.q-btn--outline { + border-right: 1px solid currentColor; +} +[dir=ltr] .q-btn-dropdown--split .q-btn-dropdown__arrow-container:not(.q-btn--outline) { + border-left: 1px solid rgba(255,255,255,0.3); +} +[dir=rtl] .q-btn-dropdown--split .q-btn-dropdown__arrow-container:not(.q-btn--outline) { + border-right: 1px solid rgba(255,255,255,0.3); +} +[dir] .q-btn-dropdown--split .q-btn-dropdown__arrow-container .q-btn__wrapper { + padding: 0 4px; +} +[dir=ltr] .q-btn-dropdown--simple * + .q-btn-dropdown__arrow { + margin-left: 8px; +} +[dir=rtl] .q-btn-dropdown--simple * + .q-btn-dropdown__arrow { + margin-right: 8px; +} +.q-btn-dropdown__arrow { + transition: transform 0.28s; +} +.q-btn-dropdown--current { + flex-grow: 1; +} +.q-btn-group { + vertical-align: middle; +} +[dir] .q-btn-group { + border-radius: 3px; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +.q-btn-group > .q-btn-item { + align-self: stretch; +} +[dir] .q-btn-group > .q-btn-item { + border-radius: inherit; +} +[dir] .q-btn-group > .q-btn-item .q-btn__wrapper:before { + box-shadow: none; +} +[dir=ltr] .q-btn-group > .q-btn-item .q-badge--floating { + right: 0; +} +[dir=rtl] .q-btn-group > .q-btn-item .q-badge--floating { + left: 0; +} +[dir] .q-btn-group > .q-btn-group { + box-shadow: none; +} +[dir=ltr] .q-btn-group > .q-btn-group:first-child > .q-btn:first-child { + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; +} +[dir=rtl] .q-btn-group > .q-btn-group:first-child > .q-btn:first-child { + border-top-right-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=ltr] .q-btn-group > .q-btn-group:last-child > .q-btn:last-child { + border-top-right-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=rtl] .q-btn-group > .q-btn-group:last-child > .q-btn:last-child { + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; +} +[dir=ltr] .q-btn-group > .q-btn-group:not(:first-child) > .q-btn:first-child .q-btn__wrapper:before { + border-left: 0; +} +[dir=rtl] .q-btn-group > .q-btn-group:not(:first-child) > .q-btn:first-child .q-btn__wrapper:before { + border-right: 0; +} +[dir=ltr] .q-btn-group > .q-btn-group:not(:last-child) > .q-btn:last-child .q-btn__wrapper:before { + border-right: 0; +} +[dir=rtl] .q-btn-group > .q-btn-group:not(:last-child) > .q-btn:last-child .q-btn__wrapper:before { + border-left: 0; +} +[dir=ltr] .q-btn-group > .q-btn-item:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +[dir=rtl] .q-btn-group > .q-btn-item:not(:last-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +[dir=ltr] .q-btn-group > .q-btn-item:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +[dir=rtl] .q-btn-group > .q-btn-item:not(:first-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.q-btn-group > .q-btn-item.q-btn--standard .q-btn__wrapper:before { + z-index: -1; +} +[dir] .q-btn-group--push { + border-radius: 7px; +} +[dir] .q-btn-group--push > .q-btn--push.q-btn--actionable { + transform: none; +} +.q-btn-group--push > .q-btn--push.q-btn--actionable .q-btn__wrapper { + transition: margin-top 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), margin-bottom 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), box-shadow 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +[dir] .q-btn-group--push > .q-btn--push.q-btn--actionable:active .q-btn__wrapper, [dir] .q-btn-group--push > .q-btn--push.q-btn--actionable.q-btn--active .q-btn__wrapper { + margin-top: 2px; + margin-bottom: -2px; +} +[dir] .q-btn-group--rounded { + border-radius: 28px; +} +[dir] .q-btn-group--square { + border-radius: 0; +} +[dir] .q-btn-group--flat, [dir] .q-btn-group--outline, [dir] .q-btn-group--unelevated { + box-shadow: none; +} +.q-btn-group--outline > .q-separator { + display: none; +} +[dir=ltr] .q-btn-group--outline > .q-btn-item + .q-btn-item .q-btn__wrapper:before { + border-left: 0; +} +[dir=rtl] .q-btn-group--outline > .q-btn-item + .q-btn-item .q-btn__wrapper:before { + border-right: 0; +} +[dir=ltr] .q-btn-group--outline > .q-btn-item:not(:last-child) .q-btn__wrapper:before { + border-right: 0; +} +[dir=rtl] .q-btn-group--outline > .q-btn-item:not(:last-child) .q-btn__wrapper:before { + border-left: 0; +} +.q-btn-group--stretch { + align-self: stretch; +} +[dir] .q-btn-group--stretch { + border-radius: 0; +} +[dir] .q-btn-group--glossy > .q-btn-item { + background-image: linear-gradient(to bottom, rgba(255,255,255,0.3), rgba(255,255,255,0) 50%, rgba(0,0,0,0.12) 51%, rgba(0,0,0,0.04)) !important; +} +.q-btn-group--spread > .q-btn-group { + display: flex !important; +} +.q-btn-group--spread > .q-btn-item, +.q-btn-group--spread > .q-btn-group > .q-btn-item:not(.q-btn-dropdown__arrow-container) { + width: auto; + min-width: 0; + max-width: 100%; + flex: 10000 1 0%; +} +.q-btn-toggle { + position: relative; +} +.q-card { + vertical-align: top; + position: relative; +} +[dir] .q-card { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; +} +[dir] .q-card > div:first-child, [dir] .q-card > img:first-child { + border-top: 0; +} +[dir=ltr] .q-card > div:first-child, [dir=ltr] .q-card > img:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +[dir=rtl] .q-card > div:first-child, [dir=rtl] .q-card > img:first-child { + border-top-right-radius: inherit; + border-top-left-radius: inherit; +} +[dir] .q-card > div:last-child, [dir] .q-card > img:last-child { + border-bottom: 0; +} +[dir=ltr] .q-card > div:last-child, [dir=ltr] .q-card > img:last-child { + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=rtl] .q-card > div:last-child, [dir=rtl] .q-card > img:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +[dir=ltr] .q-card > div:not(:first-child), [dir=ltr] .q-card > img:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +[dir=rtl] .q-card > div:not(:first-child), [dir=rtl] .q-card > img:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; +} +[dir=ltr] .q-card > div:not(:last-child), [dir=ltr] .q-card > img:not(:last-child) { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +[dir=rtl] .q-card > div:not(:last-child), [dir=rtl] .q-card > img:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +[dir] .q-card > div { + box-shadow: none; +} +[dir=ltr] .q-card > div { + border-left: 0; + border-right: 0; +} +[dir=rtl] .q-card > div { + border-right: 0; + border-left: 0; +} +[dir] .q-card--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +[dir] .q-card--dark { + border-color: rgba(255,255,255,0.28); +} +.q-card__section { + position: relative; +} +[dir] .q-card__section--vert { + padding: 16px; +} +[dir=ltr] .q-card__section--horiz > div:first-child, [dir=ltr] .q-card__section--horiz > img:first-child { + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; +} +[dir=rtl] .q-card__section--horiz > div:first-child, [dir=rtl] .q-card__section--horiz > img:first-child { + border-top-right-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=ltr] .q-card__section--horiz > div:last-child, [dir=ltr] .q-card__section--horiz > img:last-child { + border-top-right-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=rtl] .q-card__section--horiz > div:last-child, [dir=rtl] .q-card__section--horiz > img:last-child { + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; +} +[dir=ltr] .q-card__section--horiz > div:not(:first-child), [dir=ltr] .q-card__section--horiz > img:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +[dir=rtl] .q-card__section--horiz > div:not(:first-child), [dir=rtl] .q-card__section--horiz > img:not(:first-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +[dir=ltr] .q-card__section--horiz > div:not(:last-child), [dir=ltr] .q-card__section--horiz > img:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +[dir=rtl] .q-card__section--horiz > div:not(:last-child), [dir=rtl] .q-card__section--horiz > img:not(:last-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +[dir] .q-card__section--horiz > div { + border-top: 0; + border-bottom: 0; + box-shadow: none; +} +.q-card__actions { + align-items: center; +} +[dir] .q-card__actions { + padding: 8px; +} +[dir] .q-card__actions .q-btn__wrapper { + padding: 0 8px; +} +[dir=ltr] .q-card__actions--horiz > .q-btn-item + .q-btn-item, [dir=ltr] .q-card__actions--horiz > .q-btn-group + .q-btn-item, [dir=ltr] .q-card__actions--horiz > .q-btn-item + .q-btn-group { + margin-left: 8px; +} +[dir=rtl] .q-card__actions--horiz > .q-btn-item + .q-btn-item, [dir=rtl] .q-card__actions--horiz > .q-btn-group + .q-btn-item, [dir=rtl] .q-card__actions--horiz > .q-btn-item + .q-btn-group { + margin-right: 8px; +} +.q-card__actions--vert > .q-btn-item.q-btn--round { + align-self: center; +} +[dir] .q-card__actions--vert > .q-btn-item + .q-btn-item, [dir] .q-card__actions--vert > .q-btn-group + .q-btn-item, [dir] .q-card__actions--vert > .q-btn-item + .q-btn-group { + margin-top: 4px; +} +.q-card__actions--vert > .q-btn-group > .q-btn-item { + flex-grow: 1; +} +.q-card > img { + display: block; + width: 100%; + max-width: 100%; +} +[dir] .q-card > img { + border: 0; +} +@media (prefers-color-scheme: dark) { + [dir] .q-card--dark-auto { + border-color: rgba(255,255,255,0.28); + } +} +.q-carousel { + height: 400px; +} +.q-carousel__slide { + min-height: 100%; +} +[dir] .q-carousel__slide { + background-size: cover; + background-position: 50%; +} +[dir] .q-carousel__slide, [dir] .q-carousel .q-carousel--padding { + padding: 16px; +} +.q-carousel__slides-container { + height: 100%; +} +.q-carousel__control { + color: #fff; + color: var(--q-color-dark-text); +} +.q-carousel__arrow { + pointer-events: none; +} +.q-carousel__arrow .q-icon { + font-size: 28px; +} +.q-carousel__arrow .q-btn { + pointer-events: all; +} +.q-carousel__prev-arrow--horizontal, +.q-carousel__next-arrow--horizontal { + top: 16px; + bottom: 16px; +} +[dir=ltr] .q-carousel__prev-arrow--horizontal { + left: 16px; +} +[dir=rtl] .q-carousel__prev-arrow--horizontal { + right: 16px; +} +[dir=ltr] .q-carousel__next-arrow--horizontal { + right: 16px; +} +[dir=rtl] .q-carousel__next-arrow--horizontal { + left: 16px; +} +[dir=ltr] .q-carousel__prev-arrow--vertical, [dir=ltr] .q-carousel__next-arrow--vertical { + left: 16px; + right: 16px; +} +[dir=rtl] .q-carousel__prev-arrow--vertical, [dir=rtl] .q-carousel__next-arrow--vertical { + right: 16px; + left: 16px; +} +.q-carousel__prev-arrow--vertical { + top: 16px; +} +.q-carousel__next-arrow--vertical { + bottom: 16px; +} +.q-carousel__navigation--top, +.q-carousel__navigation--bottom { + overflow-x: auto; + overflow-y: hidden; +} +[dir=ltr] .q-carousel__navigation--top, [dir=ltr] .q-carousel__navigation--bottom { + left: 16px; + right: 16px; +} +[dir=rtl] .q-carousel__navigation--top, [dir=rtl] .q-carousel__navigation--bottom { + right: 16px; + left: 16px; +} +.q-carousel__navigation--top { + top: 16px; +} +.q-carousel__navigation--bottom { + bottom: 16px; +} +.q-carousel__navigation--left, +.q-carousel__navigation--right { + top: 16px; + bottom: 16px; + overflow-x: hidden; + overflow-y: auto; +} +.q-carousel__navigation--left > .q-carousel__navigation-inner, +.q-carousel__navigation--right > .q-carousel__navigation-inner { + flex-direction: column; +} +[dir=ltr] .q-carousel__navigation--left { + left: 16px; +} +[dir=rtl] .q-carousel__navigation--left { + right: 16px; +} +[dir=ltr] .q-carousel__navigation--right { + right: 16px; +} +[dir=rtl] .q-carousel__navigation--right { + left: 16px; +} +.q-carousel__navigation-inner { + flex: 1 1 auto; +} +[dir] .q-carousel__navigation .q-btn { + margin: 6px 4px; +} +[dir] .q-carousel__navigation .q-btn .q-btn__wrapper { + padding: 5px; +} +.q-carousel__navigation-icon--inactive { + opacity: 0.7; +} +.q-carousel .q-carousel__thumbnail { + height: 50px; + width: auto; + display: inline-block; + vertical-align: middle; + opacity: 0.7; + transition: opacity 0.3s; +} +[dir] .q-carousel .q-carousel__thumbnail { + margin: 2px; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; +} +.q-carousel .q-carousel__thumbnail:hover, +.q-carousel .q-carousel__thumbnail--active { + opacity: 1; +} +[dir] .q-carousel .q-carousel__thumbnail--active { + border-color: currentColor; + cursor: default; +} +[dir] .q-carousel--navigation-top.q-carousel--with-padding .q-carousel__slide, [dir] .q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide, [dir] .q-carousel--navigation-top .q-carousel--padding, [dir] .q-carousel--arrows-vertical .q-carousel--padding { + padding-top: 60px; +} +[dir] .q-carousel--navigation-bottom.q-carousel--with-padding .q-carousel__slide, [dir] .q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide, [dir] .q-carousel--navigation-bottom .q-carousel--padding, [dir] .q-carousel--arrows-vertical .q-carousel--padding { + padding-bottom: 60px; +} +[dir=ltr] .q-carousel--navigation-left.q-carousel--with-padding .q-carousel__slide, [dir=ltr] .q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide, [dir=ltr] .q-carousel--navigation-left .q-carousel--padding, [dir=ltr] .q-carousel--arrows-horizontal .q-carousel--padding { + padding-left: 60px; +} +[dir=rtl] .q-carousel--navigation-left.q-carousel--with-padding .q-carousel__slide, [dir=rtl] .q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide, [dir=rtl] .q-carousel--navigation-left .q-carousel--padding, [dir=rtl] .q-carousel--arrows-horizontal .q-carousel--padding { + padding-right: 60px; +} +[dir=ltr] .q-carousel--navigation-right.q-carousel--with-padding .q-carousel__slide, [dir=ltr] .q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide, [dir=ltr] .q-carousel--navigation-right .q-carousel--padding, [dir=ltr] .q-carousel--arrows-horizontal .q-carousel--padding { + padding-right: 60px; +} +[dir=rtl] .q-carousel--navigation-right.q-carousel--with-padding .q-carousel__slide, [dir=rtl] .q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide, [dir=rtl] .q-carousel--navigation-right .q-carousel--padding, [dir=rtl] .q-carousel--arrows-horizontal .q-carousel--padding { + padding-left: 60px; +} +.q-carousel.fullscreen { + height: 100%; +} +.q-message-name, +.q-message-stamp, +.q-message-label { + font-size: small; +} +[dir] .q-message-label { + margin: 24px 0; + text-align: center; +} +.q-message-stamp { + color: inherit; + opacity: 0.6; + display: none; +} +[dir] .q-message-stamp { + margin-top: 4px; +} +.q-message-avatar { + width: 48px; + height: 48px; + min-width: 48px; +} +[dir] .q-message-avatar { + border-radius: 50%; +} +[dir] .q-message { + margin-bottom: 8px; +} +[dir] .q-message:first-child .q-message-label { + margin-top: 0; +} +[dir=ltr] .q-message-avatar--received { + margin-right: 8px; +} +[dir=rtl] .q-message-avatar--received { + margin-left: 8px; +} +.q-message-text--received { + color: #81c784; +} +[dir=ltr] .q-message-text--received { + border-radius: 4px 4px 4px 0; +} +[dir=rtl] .q-message-text--received { + border-radius: 4px 4px 0 4px; +} +[dir] .q-message-text--received:last-child:before { + border-bottom: 8px solid currentColor; +} +[dir=ltr] .q-message-text--received:last-child:before { + right: 100%; + border-right: 0 solid transparent; + border-left: 8px solid transparent; +} +[dir=rtl] .q-message-text--received:last-child:before { + left: 100%; + border-left: 0 solid transparent; + border-right: 8px solid transparent; +} +.q-message-text-content--received { + color: #000; +} +[dir=ltr] .q-message-name--sent { + text-align: right; +} +[dir=rtl] .q-message-name--sent { + text-align: left; +} +[dir=ltr] .q-message-avatar--sent { + margin-left: 8px; +} +[dir=rtl] .q-message-avatar--sent { + margin-right: 8px; +} +.q-message-container--sent { + flex-direction: row-reverse; +} +.q-message-text--sent { + color: #e0e0e0; +} +[dir=ltr] .q-message-text--sent { + border-radius: 4px 4px 0 4px; +} +[dir=rtl] .q-message-text--sent { + border-radius: 4px 4px 4px 0; +} +[dir] .q-message-text--sent:last-child:before { + border-bottom: 8px solid currentColor; +} +[dir=ltr] .q-message-text--sent:last-child:before { + left: 100%; + border-left: 0 solid transparent; + border-right: 8px solid transparent; +} +[dir=rtl] .q-message-text--sent:last-child:before { + right: 100%; + border-right: 0 solid transparent; + border-left: 8px solid transparent; +} +.q-message-text-content--sent { + color: #000; +} +.q-message-text { + line-height: 1.2; + word-break: break-word; + position: relative; +} +[dir] .q-message-text { + background: currentColor; + padding: 8px; +} +[dir] .q-message-text + .q-message-text { + margin-top: 3px; +} +.q-message-text:last-child { + min-height: 48px; +} +.q-message-text:last-child .q-message-stamp { + display: block; +} +.q-message-text:last-child:before { + content: ''; + position: absolute; + bottom: 0; + width: 0; + height: 0; +} +.q-checkbox { + vertical-align: middle; +} +.q-checkbox__native { + width: 1px; + height: 1px; +} +.q-checkbox__bg, +.q-checkbox__icon-container { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.q-checkbox__bg { + top: 25%; + width: 50%; + height: 50%; + transition: background 0.22s cubic-bezier(0, 0, 0.2, 1) 0ms; + -webkit-print-color-adjust: exact; +} +[dir] .q-checkbox__bg { + border: 2px solid currentColor; + border-radius: 2px; +} +[dir=ltr] .q-checkbox__bg { + left: 25%; +} +[dir=rtl] .q-checkbox__bg { + right: 25%; +} +.q-checkbox__icon { + color: currentColor; + font-size: 0.5em; +} +.q-checkbox__svg { + color: #fff; + color: var(--q-color-dark-text); +} +.q-checkbox__truthy { + stroke: currentColor; + stroke-width: 3.12px; + stroke-dashoffset: 29.78334; + stroke-dasharray: 29.78334; +} +.q-checkbox__indet { + fill: currentColor; +} +[dir] .q-checkbox__indet { + transform-origin: 50% 50%; +} +[dir=ltr] .q-checkbox__indet { + transform: rotate(-280deg) scale(0); +} +[dir=rtl] .q-checkbox__indet { + transform: rotate(280deg) scale(0); +} +.q-checkbox__inner { + font-size: 40px; + width: 1em; + min-width: 1em; + height: 1em; + outline: 0; + color: rgba(0,0,0,0.54); +} +[dir] .q-checkbox__inner { + border-radius: 50%; +} +.q-checkbox__inner--truthy, +.q-checkbox__inner--indet { + color: #1976d2; + color: var(--q-color-primary); +} +[dir] .q-checkbox__inner--truthy .q-checkbox__bg, [dir] .q-checkbox__inner--indet .q-checkbox__bg { + background: currentColor; +} +.q-checkbox__inner--truthy path { + stroke-dashoffset: 0; + transition: stroke-dashoffset 0.18s cubic-bezier(0.4, 0, 0.6, 1) 0ms; +} +.q-checkbox__inner--indet .q-checkbox__indet { + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1) 0ms; +} +[dir] .q-checkbox__inner--indet .q-checkbox__indet { + transform: rotate(0) scale(1); +} +.q-checkbox.disabled { + opacity: 0.75 !important; +} +.q-checkbox--dark .q-checkbox__inner { + color: rgba(255,255,255,0.7); +} +.q-checkbox--dark .q-checkbox__inner:before { + opacity: 0.32 !important; +} +.q-checkbox--dark .q-checkbox__inner--truthy, +.q-checkbox--dark .q-checkbox__inner--indet { + color: #1976d2; + color: var(--q-color-primary); +} +.q-checkbox--dense .q-checkbox__inner { + width: 0.5em; + min-width: 0.5em; + height: 0.5em; +} +.q-checkbox--dense .q-checkbox__bg { + top: 5%; + width: 90%; + height: 90%; +} +[dir=ltr] .q-checkbox--dense .q-checkbox__bg { + left: 5%; +} +[dir=rtl] .q-checkbox--dense .q-checkbox__bg { + right: 5%; +} +[dir=ltr] .q-checkbox--dense .q-checkbox__label { + padding-left: 0.5em; +} +[dir=rtl] .q-checkbox--dense .q-checkbox__label { + padding-right: 0.5em; +} +[dir=ltr] .q-checkbox--dense.reverse .q-checkbox__label { + padding-left: 0; + padding-right: 0.5em; +} +[dir=rtl] .q-checkbox--dense.reverse .q-checkbox__label { + padding-right: 0; + padding-left: 0.5em; +} +body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + opacity: 0.12; + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1); +} +[dir] body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before { + border-radius: 50%; + background: currentColor; + transform: scale3d(0, 0, 1); +} +[dir=ltr] body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before { + right: 0; + left: 0; +} +[dir=rtl] body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before { + left: 0; + right: 0; +} +[dir] body.desktop .q-checkbox:not(.disabled):focus .q-checkbox__inner:before, [dir] body.desktop .q-checkbox:not(.disabled):hover .q-checkbox__inner:before { + transform: scale3d(1, 1, 1); +} +[dir] body.desktop .q-checkbox--dense:not(.disabled):focus .q-checkbox__inner:before, [dir] body.desktop .q-checkbox--dense:not(.disabled):hover .q-checkbox__inner:before { + transform: scale3d(1.4, 1.4, 1); +} +@media (prefers-color-scheme: dark) { + .q-checkbox--dark-auto .q-checkbox__inner { + color: rgba(255,255,255,0.7); + } + .q-checkbox--dark-auto .q-checkbox__inner:before { + opacity: 0.32 !important; + } + .q-checkbox--dark-auto .q-checkbox__inner--truthy, + .q-checkbox--dark-auto .q-checkbox__inner--indet { + color: #1976d2; + color: var(--q-color-primary); + } +} +.q-chip { + vertical-align: middle; + outline: 0; + position: relative; + height: 2em; + max-width: 100%; + color: #000; + color: var(--q-color-light-text); + font-size: 14px; +} +[dir] .q-chip { + border-radius: 16px; + margin: 4px; + background: #e0e0e0; + background: var(--q-color-chip-background-light); + padding: 0.5em 0.9em; +} +.q-chip--dark { + color: #fff; + color: var(--q-color-dark-text); +} +[dir] .q-chip--dark { + background: #323232; + background: var(--q-color-chip-background-dark); +} +.q-chip--colored .q-chip__icon, +.q-chip--dark .q-chip__icon { + color: inherit; +} +[dir] .q-chip--outline { + background: transparent !important; + border: 1px solid currentColor; +} +.q-chip--outline .q-avatar { + height: calc(1em - 2px); + width: calc(1em - 2px); +} +.q-chip .q-avatar { + font-size: 2em; +} +[dir] .q-chip .q-avatar { + border-radius: 16px; +} +[dir=ltr] .q-chip .q-avatar { + margin-left: -0.45em; + margin-right: 0.2em; +} +[dir=rtl] .q-chip .q-avatar { + margin-right: -0.45em; + margin-left: 0.2em; +} +[dir=ltr] .q-chip .q-avatar ~ .q-avatar, [dir=ltr] .q-chip .q-avatar--right { + margin-left: 0.2em; + margin-right: -0.45em; +} +[dir=rtl] .q-chip .q-avatar ~ .q-avatar, [dir=rtl] .q-chip .q-avatar--right { + margin-right: 0.2em; + margin-left: -0.45em; +} +.q-chip--selected .q-avatar:first-child:not(.q-avatar--right) { + display: none; +} +.q-chip__icon { + color: rgba(0,0,0,0.54); + font-size: 1.5em; +} +[dir] .q-chip__icon { + margin: -0.2em; +} +[dir=ltr] .q-chip__icon--left { + margin-right: 0.2em; +} +[dir=rtl] .q-chip__icon--left { + margin-left: 0.2em; +} +[dir=ltr] .q-chip__icon--right { + margin-left: 0.2em; +} +[dir=rtl] .q-chip__icon--right { + margin-right: 0.2em; +} +.q-chip__icon--remove { + opacity: 0.6; + outline: 0; +} +[dir=ltr] .q-chip__icon--remove { + margin-left: 0.1em; + margin-right: -0.5em; +} +[dir=rtl] .q-chip__icon--remove { + margin-right: 0.1em; + margin-left: -0.5em; +} +.q-chip__icon--remove:hover, +.q-chip__icon--remove:focus { + opacity: 1; +} +.q-chip__content { + white-space: nowrap; +} +.q-chip--dense { + height: 1.5em; +} +[dir] .q-chip--dense { + border-radius: 12px; + padding: 0 0.4em; +} +.q-chip--dense .q-avatar { + font-size: 1.5em; +} +[dir] .q-chip--dense .q-avatar { + border-radius: 12px; +} +[dir=ltr] .q-chip--dense .q-avatar { + margin-left: -0.27em; + margin-right: 0.1em; +} +[dir=rtl] .q-chip--dense .q-avatar { + margin-right: -0.27em; + margin-left: 0.1em; +} +[dir=ltr] .q-chip--dense .q-avatar ~ .q-avatar, [dir=ltr] .q-chip--dense .q-avatar--right { + margin-left: 0.1em; + margin-right: -0.268em; +} +[dir=rtl] .q-chip--dense .q-avatar ~ .q-avatar, [dir=rtl] .q-chip--dense .q-avatar--right { + margin-right: 0.1em; + margin-left: -0.268em; +} +.q-chip--dense .q-chip__icon { + font-size: 1.25em; +} +[dir=ltr] .q-chip--dense .q-chip__icon--left { + margin-right: 0.195em; +} +[dir=rtl] .q-chip--dense .q-chip__icon--left { + margin-left: 0.195em; +} +[dir=ltr] .q-chip--dense .q-chip__icon--remove { + margin-right: -0.25em; +} +[dir=rtl] .q-chip--dense .q-chip__icon--remove { + margin-left: -0.25em; +} +[dir] .q-chip--square { + border-radius: 4px; +} +[dir=ltr] .q-chip--square .q-avatar { + border-radius: 4px 0 0 4px; +} +[dir=rtl] .q-chip--square .q-avatar { + border-radius: 0 4px 4px 0; +} +[dir=ltr] .q-chip--square .q-avatar ~ .q-avatar, [dir=ltr] .q-chip--square .q-avatar--right { + border-radius: 0 4px 4px 0; +} +[dir=rtl] .q-chip--square .q-avatar ~ .q-avatar, [dir=rtl] .q-chip--square .q-avatar--right { + border-radius: 4px 0 0 4px; +} +[dir] body.desktop .q-chip--clickable:focus { + box-shadow: 0 1px 3px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12); +} +@media (prefers-color-scheme: dark) { + .q-chip--dark-auto { + color: #fff; + color: var(--q-color-dark-text); + } + [dir] .q-chip--dark-auto { + background: #323232; + background: var(--q-color-chip-background-dark); + } + .q-chip--dark-auto .q-chip__icon { + color: inherit; + } +} +.q-circular-progress { + display: inline-block; + position: relative; + vertical-align: middle; + width: 1em; + height: 1em; + line-height: 1; +} +[dir] .q-circular-progress.q-focusable { + border-radius: 50%; +} +.q-circular-progress__svg { + width: 100%; + height: 100%; +} +.q-circular-progress__text { + font-size: 0.25em; +} +.q-circular-progress--indeterminate .q-circular-progress__svg { + -webkit-animation: q-spin 2s linear infinite /* rtl:ignore */; + animation: q-spin 2s linear infinite /* rtl:ignore */; +} +[dir] .q-circular-progress--indeterminate .q-circular-progress__svg { + transform-origin: 50% 50%; +} +.q-circular-progress--indeterminate .q-circular-progress__circle { + stroke-dasharray: 1 400; + stroke-dashoffset: 0; + -webkit-animation: q-circular-progress-circle 1.5s ease-in-out infinite /* rtl:ignore */; + animation: q-circular-progress-circle 1.5s ease-in-out infinite /* rtl:ignore */; +} +.q-color-picker { + overflow: hidden; + max-width: 350px; + vertical-align: top; + min-width: 180px; +} +[dir] .q-color-picker { + border-radius: 4px; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +[dir] .q-color-picker .q-tab { + padding: 0 !important; +} +[dir] .q-color-picker--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-color-picker__header-tabs { + height: 32px; +} +.q-color-picker__header-banner { + height: 36px; +} +.q-color-picker__header input { + line-height: 24px; +} +[dir] .q-color-picker__header input { + border: 0; +} +.q-color-picker__header .q-tab { + min-height: 32px !important; + height: 32px !important; +} +[dir] .q-color-picker__header .q-tab--inactive { + background: linear-gradient(to top, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.15) 25%, rgba(0,0,0,0.1)); +} +.q-color-picker__error-icon { + bottom: 2px; + font-size: 24px; + opacity: 0; + transition: opacity 0.3s ease-in; +} +[dir=ltr] .q-color-picker__error-icon { + right: 2px; +} +[dir=rtl] .q-color-picker__error-icon { + left: 2px; +} +.q-color-picker__header-content { + position: relative; +} +[dir] .q-color-picker__header-content { + background: #fff; + background: var(--q-color-light-page); +} +.q-color-picker__header-content--light { + color: #000; + color: var(--q-color-light-text); +} +.q-color-picker__header-content--dark { + color: #fff; + color: var(--q-color-dark-text); +} +.q-color-picker__header-content--dark .q-tab--inactive:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; +} +[dir] .q-color-picker__header-content--dark .q-tab--inactive:before { + background: rgba(255,255,255,0.2); +} +[dir=ltr] .q-color-picker__header-content--dark .q-tab--inactive:before { + right: 0; + left: 0; +} +[dir=rtl] .q-color-picker__header-content--dark .q-tab--inactive:before { + left: 0; + right: 0; +} +.q-color-picker__header-banner { + height: 36px; +} +[dir] .q-color-picker__header-bg { + background: #fff; + background: var(--q-color-light-page); + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==") !important; +} +.q-color-picker__footer { + height: 36px; +} +.q-color-picker__footer .q-tab { + min-height: 36px !important; + height: 36px !important; +} +[dir] .q-color-picker__footer .q-tab--inactive { + background: linear-gradient(to bottom, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.15) 25%, rgba(0,0,0,0.1)); +} +.q-color-picker__spectrum { + width: 100%; + height: 100%; +} +[dir] .q-color-picker__spectrum-tab { + padding: 0 !important; +} +[dir=ltr] .q-color-picker__spectrum-white { + background: linear-gradient(to right, #fff, rgba(255,255,255,0)); +} +[dir=rtl] .q-color-picker__spectrum-white { + background: linear-gradient(to left, #fff, rgba(255,255,255,0)); +} +[dir] .q-color-picker__spectrum-black { + background: linear-gradient(to top, #000, rgba(0,0,0,0)); +} +.q-color-picker__spectrum-circle { + width: 10px; + height: 10px; +} +[dir] .q-color-picker__spectrum-circle { + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,0.3), 0 0 1px 2px rgba(0,0,0,0.4); + border-radius: 50%; +} +[dir=ltr] .q-color-picker__spectrum-circle { + transform: translate(-5px, -5px); +} +[dir=rtl] .q-color-picker__spectrum-circle { + transform: translate(5px, -5px); +} +.q-color-picker__hue .q-slider__track { + opacity: 1; +} +[dir=ltr] .q-color-picker__hue .q-slider__track { + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important; +} +[dir=rtl] .q-color-picker__hue .q-slider__track { + background: linear-gradient(to left, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important; +} +[dir] .q-color-picker__alpha .q-slider__track-container { + padding-top: 0; +} +.q-color-picker__alpha .q-slider__track:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; +} +[dir] .q-color-picker__alpha .q-slider__track:before { + border-radius: inherit; +} +[dir=ltr] .q-color-picker__alpha .q-slider__track:before { + right: 0; + left: 0; + background: linear-gradient(90deg, rgba(255,255,255,0), #757575); +} +[dir=rtl] .q-color-picker__alpha .q-slider__track:before { + left: 0; + right: 0; + background: linear-gradient(-90deg, rgba(255,255,255,0), #757575); +} +[dir] .q-color-picker__sliders { + padding: 0 16px; +} +.q-color-picker__sliders .q-slider__thumb { + color: #424242; +} +.q-color-picker__sliders .q-slider__thumb path { + stroke-width: 2px; + fill: transparent; +} +.q-color-picker__sliders .q-slider--active path { + stroke-width: 3px; +} +[dir=ltr] .q-color-picker__tune-tab .q-slider { + margin-left: 18px; + margin-right: 18px; +} +[dir=rtl] .q-color-picker__tune-tab .q-slider { + margin-right: 18px; + margin-left: 18px; +} +.q-color-picker__tune-tab input { + font-size: 11px; + width: 3.5em; +} +[dir] .q-color-picker__tune-tab input { + border: 1px solid #e0e0e0; + border-radius: 4px; +} +[dir] .q-color-picker__palette-tab { + padding: 0 !important; +} +[dir] .q-color-picker__palette-rows--editable .q-color-picker__cube { + cursor: pointer; +} +.q-color-picker__cube { + width: 10% !important; +} +[dir] .q-color-picker__cube { + padding-bottom: 10%; +} +.q-color-picker input { + color: inherit; + outline: 0; +} +[dir] .q-color-picker input { + background: transparent; + text-align: center; +} +.q-color-picker .q-tabs { + overflow: hidden; +} +[dir] .q-color-picker .q-tab--active { + box-shadow: 0 0 14px 3px rgba(0,0,0,0.2); +} +.q-color-picker .q-tab--active .q-focus-helper { + display: none; +} +.q-color-picker .q-tab__indicator { + display: none; +} +[dir] .q-color-picker .q-tab-panels { + background: inherit; +} +[dir] .q-color-picker--dark .q-color-picker__tune-tab input { + border: 1px solid rgba(255,255,255,0.3); +} +.q-color-picker--dark .q-slider { + color: #fafafa; +} +@media (prefers-color-scheme: dark) { + [dir] .q-color-picker--dark-auto .q-color-picker__tune-tab input { + border: 1px solid rgba(255,255,255,0.3); + } + .q-color-picker--dark-auto .q-slider { + color: #fafafa; + } +} +.q-date { + display: inline-flex; + width: 290px; + min-width: 290px; + max-width: 100%; +} +[dir] .q-date { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; + background: #fff; + background: var(--q-color-light-page); +} +[dir] .q-date--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-date__header { + color: #fff; + color: var(--q-color-dark-text); +} +[dir] .q-date__header { + background-color: #1976d2; + background-color: var(--q-color-primary); + padding: 16px; +} +[dir=ltr] .q-date__header { + border-top-left-radius: inherit; +} +[dir=rtl] .q-date__header { + border-top-right-radius: inherit; +} +[dir] .q-date__actions { + padding: 0 16px 16px; +} +.q-date__content .q-btn { + font-weight: normal; +} +.q-date__header-link { + opacity: 0.64; + outline: 0; + transition: opacity 0.3s ease-out; +} +.q-date__header-link--active, +.q-date__header-link:hover, +.q-date__header-link:focus { + opacity: 1; +} +.q-date__header-subtitle { + font-size: 14px; + line-height: 1.75; + letter-spacing: 0.00938em; +} +.q-date__header-title-label { + font-size: 24px; + line-height: 1.2; + letter-spacing: 0.00735em; +} +.q-date__view { + height: 100%; + width: 100%; + min-height: 290px; +} +[dir] .q-date__view { + padding: 16px; +} +.q-date__navigation { + height: 12.5%; +} +.q-date__navigation > div:first-child { + width: 8%; + min-width: 24px; + justify-content: flex-end; +} +.q-date__navigation > div:last-child { + width: 8%; + min-width: 24px; + justify-content: flex-start; +} +.q-date__calendar-weekdays { + height: 12.5%; +} +.q-date__calendar-weekdays > div { + opacity: 0.38; + font-size: 12px; +} +.q-date__calendar-item { + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; + width: 14.285% !important; + height: 12.5% !important; + position: relative; +} +[dir] .q-date__calendar-item { + padding: 1px; +} +.q-date__calendar-item:after { + content: ''; + position: absolute; + pointer-events: none; + top: 1px; + bottom: 1px; +} +[dir] .q-date__calendar-item:after { + border-style: dashed; + border-color: transparent; + border-width: 1px; +} +[dir=ltr] .q-date__calendar-item:after { + right: 0; + left: 0; +} +[dir=rtl] .q-date__calendar-item:after { + left: 0; + right: 0; +} +.q-date__calendar-item > div, +.q-date__calendar-item button { + width: 30px; + height: 30px; +} +[dir] .q-date__calendar-item > div, [dir] .q-date__calendar-item button { + border-radius: 50%; +} +.q-date__calendar-item > div { + line-height: 30px; +} +[dir] .q-date__calendar-item > div { + text-align: center; +} +.q-date__calendar-item > button { + line-height: 22px; +} +.q-date__calendar-item--out { + opacity: 0.18; +} +.q-date__calendar-item--fill { + visibility: hidden; + min-height: 32px; +} +.q-date__calendar-item--fill.q-date__range:before, +.q-date__calendar-item--fill.q-date__range-from:before, +.q-date__calendar-item--fill.q-date__range-to:before { + opacity: 0.05; +} +.q-date__range:before, +.q-date__range-from:before, +.q-date__range-to:before { + content: ''; + position: absolute; + top: 1px; + bottom: 1px; + opacity: 0.3; + pointer-events: none; +} +[dir] .q-date__range:before, [dir] .q-date__range-from:before, [dir] .q-date__range-to:before { + background-color: currentColor; +} +[dir=ltr] .q-date__range:before, [dir=ltr] .q-date__range-from:before, [dir=ltr] .q-date__range-to:before { + left: 0; + right: 0; +} +[dir=rtl] .q-date__range:before, [dir=rtl] .q-date__range-from:before, [dir=rtl] .q-date__range-to:before { + right: 0; + left: 0; +} +[dir=ltr] .q-date__range:nth-child(7n-6):before { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +[dir=rtl] .q-date__range:nth-child(7n-6):before { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +[dir=ltr] .q-date__range:nth-child(7n):before { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +[dir=rtl] .q-date__range:nth-child(7n):before { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +[dir=ltr] .q-date__range-from:before { + left: calc(50% - 15px); + border-top-left-radius: 28px; + border-bottom-left-radius: 28px; +} +[dir=rtl] .q-date__range-from:before { + right: calc(50% - 15px); + border-top-right-radius: 28px; + border-bottom-right-radius: 28px; +} +[dir=ltr] .q-date__range-to:before { + right: calc(50% - 15px); + border-top-right-radius: 28px; + border-bottom-right-radius: 28px; +} +[dir=rtl] .q-date__range-to:before { + left: calc(50% - 15px); + border-top-left-radius: 28px; + border-bottom-left-radius: 28px; +} +[dir] .q-date__edit-range:after { + border-color: currentColor transparent; +} +[dir=ltr] .q-date__edit-range:nth-child(7n-6):after { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +[dir=rtl] .q-date__edit-range:nth-child(7n-6):after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +[dir=ltr] .q-date__edit-range:nth-child(7n):after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +[dir=rtl] .q-date__edit-range:nth-child(7n):after { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +[dir] .q-date__edit-range-from:after, [dir] .q-date__edit-range-from-to:after { + border-top-color: currentColor; + border-bottom-color: currentColor; +} +[dir=ltr] .q-date__edit-range-from:after, [dir=ltr] .q-date__edit-range-from-to:after { + left: 4px; + border-left-color: currentColor; + border-top-left-radius: 28px; + border-bottom-left-radius: 28px; +} +[dir=rtl] .q-date__edit-range-from:after, [dir=rtl] .q-date__edit-range-from-to:after { + right: 4px; + border-right-color: currentColor; + border-top-right-radius: 28px; + border-bottom-right-radius: 28px; +} +[dir] .q-date__edit-range-to:after, [dir] .q-date__edit-range-from-to:after { + border-top-color: currentColor; + border-bottom-color: currentColor; +} +[dir=ltr] .q-date__edit-range-to:after, [dir=ltr] .q-date__edit-range-from-to:after { + right: 4px; + border-right-color: currentColor; + border-top-right-radius: 28px; + border-bottom-right-radius: 28px; +} +[dir=rtl] .q-date__edit-range-to:after, [dir=rtl] .q-date__edit-range-from-to:after { + left: 4px; + border-left-color: currentColor; + border-top-left-radius: 28px; + border-bottom-left-radius: 28px; +} +.q-date__calendar-days-container { + height: 75%; + min-height: 192px; +} +.q-date__calendar-days > div { + height: 16.66% !important; +} +.q-date__event { + position: absolute; + bottom: 2px; + height: 5px; + width: 8px; +} +[dir] .q-date__event { + border-radius: 5px; + background-color: #26a69a; + background-color: var(--q-color-secondary); +} +[dir=ltr] .q-date__event { + left: 50%; + transform: translate3d(-50%, 0, 0); +} +[dir=rtl] .q-date__event { + right: 50%; + transform: translate3d(50%, 0, 0); +} +[dir] .q-date__today { + box-shadow: 0 0 1px 0 currentColor; +} +[dir] .q-date__years-content { + padding: 0 8px; +} +.q-date__years-item, +.q-date__months-item { + flex: 0 0 33.3333%; +} +.q-date.disabled .q-date__header, +.q-date--readonly .q-date__header, +.q-date.disabled .q-date__content, +.q-date--readonly .q-date__content { + pointer-events: none; +} +.q-date--readonly .q-date__navigation { + display: none; +} +.q-date--portrait { + flex-direction: column; +} +.q-date--portrait-standard .q-date__content { + height: calc(100% - 86px); +} +.q-date--portrait-standard .q-date__header { + height: 86px; +} +[dir=ltr] .q-date--portrait-standard .q-date__header { + border-top-right-radius: inherit; +} +[dir=rtl] .q-date--portrait-standard .q-date__header { + border-top-left-radius: inherit; +} +.q-date--portrait-standard .q-date__header-title { + align-items: center; + height: 30px; +} +.q-date--portrait-minimal .q-date__content { + height: 100%; +} +.q-date--landscape { + flex-direction: row; + align-items: stretch; + min-width: 420px; +} +.q-date--landscape > div { + display: flex; + flex-direction: column; +} +.q-date--landscape .q-date__content { + height: 100%; +} +.q-date--landscape-standard { + min-width: 420px; +} +.q-date--landscape-standard .q-date__header { + min-width: 110px; + width: 110px; +} +[dir=ltr] .q-date--landscape-standard .q-date__header { + border-bottom-left-radius: inherit; +} +[dir=rtl] .q-date--landscape-standard .q-date__header { + border-bottom-right-radius: inherit; +} +.q-date--landscape-standard .q-date__header-title { + flex-direction: column; +} +[dir] .q-date--landscape-standard .q-date__header-today { + margin-top: 12px; +} +[dir=ltr] .q-date--landscape-standard .q-date__header-today { + margin-left: -8px; +} +[dir=rtl] .q-date--landscape-standard .q-date__header-today { + margin-right: -8px; +} +.q-date--landscape-minimal { + width: 310px; +} +[dir] .q-date--dark { + border-color: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + [dir] .q-date--dark-auto { + border-color: rgba(255,255,255,0.28); + } +} +.q-dialog { + contain: layout size; + contain: layout size style; + width: 100vw; +} +.q-dialog__title { + font-size: 1.25rem; + font-weight: 500; + line-height: 2rem; + letter-spacing: 0.0125em; +} +.q-dialog__progress { + font-size: 4rem; +} +.q-dialog__inner { + outline: 0; +} +.q-dialog__inner > div { + pointer-events: all; + overflow: auto; + -webkit-overflow-scrolling: touch; + will-change: scroll-position; +} +[dir] .q-dialog__inner > div { + border-radius: 4px; + box-shadow: 0 2px 4px -1px rgba(0,0,0,0.2), 0 4px 5px rgba(0,0,0,0.14), 0 1px 10px rgba(0,0,0,0.12); +} +[dir] .q-dialog__inner--square > div { + border-radius: 0 !important; +} +.q-dialog__inner > .q-card > .q-card__actions .q-btn--rectangle .q-btn__wrapper { + min-width: 64px; +} +[dir] .q-dialog__inner--minimized { + padding: 24px; +} +.q-dialog__inner--minimized > div { + max-height: calc(100vh - 48px); +} +.q-dialog__inner--maximized > div { + height: 100%; + width: 100%; + max-height: 100vh; + max-width: 100vw; +} +[dir] .q-dialog__inner--maximized > div { + border-radius: 0 !important; +} +[dir] .q-dialog__inner--top, [dir] .q-dialog__inner--bottom { + padding-top: 0 !important; + padding-bottom: 0 !important; +} +[dir=ltr] .q-dialog__inner--right, [dir=ltr] .q-dialog__inner--left { + padding-right: 0 !important; + padding-left: 0 !important; +} +[dir=rtl] .q-dialog__inner--right, [dir=rtl] .q-dialog__inner--left { + padding-left: 0 !important; + padding-right: 0 !important; +} +[dir=ltr] .q-dialog__inner--left:not([data-q-portal-animating]) > div, [dir=ltr] .q-dialog__inner--top:not([data-q-portal-animating]) > div { + border-top-left-radius: 0; +} +[dir=rtl] .q-dialog__inner--left:not([data-q-portal-animating]) > div, [dir=rtl] .q-dialog__inner--top:not([data-q-portal-animating]) > div { + border-top-right-radius: 0; +} +[dir=ltr] .q-dialog__inner--right:not([data-q-portal-animating]) > div, [dir=ltr] .q-dialog__inner--top:not([data-q-portal-animating]) > div { + border-top-right-radius: 0; +} +[dir=rtl] .q-dialog__inner--right:not([data-q-portal-animating]) > div, [dir=rtl] .q-dialog__inner--top:not([data-q-portal-animating]) > div { + border-top-left-radius: 0; +} +[dir=ltr] .q-dialog__inner--left:not([data-q-portal-animating]) > div, [dir=ltr] .q-dialog__inner--bottom:not([data-q-portal-animating]) > div { + border-bottom-left-radius: 0; +} +[dir=rtl] .q-dialog__inner--left:not([data-q-portal-animating]) > div, [dir=rtl] .q-dialog__inner--bottom:not([data-q-portal-animating]) > div { + border-bottom-right-radius: 0; +} +[dir=ltr] .q-dialog__inner--right:not([data-q-portal-animating]) > div, [dir=ltr] .q-dialog__inner--bottom:not([data-q-portal-animating]) > div { + border-bottom-right-radius: 0; +} +[dir=rtl] .q-dialog__inner--right:not([data-q-portal-animating]) > div, [dir=rtl] .q-dialog__inner--bottom:not([data-q-portal-animating]) > div { + border-bottom-left-radius: 0; +} +.q-dialog__inner--fullwidth > div { + width: 100% !important; + max-width: 100% !important; +} +.q-dialog__inner--fullheight > div { + height: 100% !important; + max-height: 100% !important; +} +.q-dialog__backdrop { + z-index: -1; + pointer-events: all; + outline: 0; + opacity: 0.4; +} +[dir] .q-dialog__backdrop { + background: #000; + background: var(--q-color-backdrop-background); +} +html[dir=rtl] .q-dialog { + right: auto; +} +body.mobile .q-dialog { + contain: size; + contain: size style; +} +body.desktop .q-dialog--modal { + height: 100vh; +} +body.platform-ios .q-dialog__inner--minimized > div { + max-height: calc(100vh - 164px); +} +body.platform-android .q-dialog__inner--minimized > div { + max-height: calc(100% - 48px); +} +[dir] body.q-ios-padding .q-dialog__inner { + padding-top: 20px !important; + padding-top: env(safe-area-inset-top) !important; + padding-bottom: env(safe-area-inset-bottom) !important; +} +body.q-ios-padding .q-dialog__inner > div { + max-height: "calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important"; +} +@media (max-width: 599.98px) { + [dir=ltr] .q-dialog__inner--top, [dir=ltr] .q-dialog__inner--bottom { + padding-left: 0; + padding-right: 0; + } + [dir=rtl] .q-dialog__inner--top, [dir=rtl] .q-dialog__inner--bottom { + padding-right: 0; + padding-left: 0; + } + .q-dialog__inner--top > div, + .q-dialog__inner--bottom > div { + width: 100% !important; + } +} +@media (min-width: 600px) { + .q-dialog__inner--minimized > div { + max-width: 560px; + } +} +[dir] .q-bottom-sheet { + padding-bottom: 8px; +} +[dir] .q-bottom-sheet__avatar { + border-radius: 50%; +} +.q-bottom-sheet--list { + width: 400px; +} +.q-bottom-sheet--list .q-icon, +.q-bottom-sheet--list img { + font-size: 24px; + width: 24px; + height: 24px; +} +.q-bottom-sheet--grid { + width: 700px; +} +.q-bottom-sheet--grid .q-bottom-sheet__item { + min-width: 100px; +} +[dir] .q-bottom-sheet--grid .q-bottom-sheet__item { + padding: 8px; + text-align: center; +} +.q-bottom-sheet--grid .q-icon, +.q-bottom-sheet--grid img, +.q-bottom-sheet--grid .q-bottom-sheet__empty-icon { + font-size: 48px; + width: 48px; + height: 48px; +} +[dir] .q-bottom-sheet--grid .q-icon, [dir] .q-bottom-sheet--grid img, [dir] .q-bottom-sheet--grid .q-bottom-sheet__empty-icon { + margin-bottom: 8px; +} +[dir] .q-bottom-sheet--grid .q-separator { + margin: 12px 0; +} +.q-bottom-sheet__item { + flex: 0 0 33.3333%; +} +@media (min-width: 600px) { + .q-bottom-sheet__item { + flex: 0 0 25%; + } +} +.q-dialog-plugin { + width: 400px; +} +.q-dialog-plugin__form { + max-height: 50vh; +} +[dir] .q-dialog-plugin .q-card__section + .q-card__section { + padding-top: 0; +} +[dir] .q-dialog-plugin--progress { + text-align: center; +} +[dir] .q-editor { + border: 1px solid rgba(0,0,0,0.12); + border-radius: 4px; +} +[dir] .q-editor.disabled { + border-style: dashed; +} +.q-editor.fullscreen { + max-height: 100%; +} +[dir=ltr] .q-editor > div:first-child, [dir=ltr] .q-editor__toolbars-container, [dir=ltr] .q-editor__toolbars-container > div:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +[dir=rtl] .q-editor > div:first-child, [dir=rtl] .q-editor__toolbars-container, [dir=rtl] .q-editor__toolbars-container > div:first-child { + border-top-right-radius: inherit; + border-top-left-radius: inherit; +} +.q-editor__toolbars-container { + max-width: 100%; +} +.q-editor__content { + outline: 0; + min-height: 10em; + overflow: auto; + max-width: 100%; +} +[dir] .q-editor__content { + padding: 10px; +} +[dir=ltr] .q-editor__content { + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=rtl] .q-editor__content { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.q-editor__content pre { + white-space: pre-wrap; +} +.q-editor__content hr { + outline: 0; + height: 1px; +} +[dir] .q-editor__content hr { + border: 0; + margin: 1px; + background: rgba(0,0,0,0.12); +} +.q-editor__content:empty:not(:focus):before { + content: attr(placeholder); + opacity: 0.7; +} +.q-editor__toolbar { + min-height: 32px; +} +[dir] .q-editor__toolbar { + border-bottom: 1px solid rgba(0,0,0,0.12); +} +[dir] .q-editor .q-btn { + margin: 4px; +} +.q-editor__toolbar-group { + position: relative; +} +[dir] .q-editor__toolbar-group { + margin: 0 4px; +} +.q-editor__toolbar-group + .q-editor__toolbar-group:before { + content: ''; + position: absolute; + top: 4px; + bottom: 4px; + width: 1px; +} +[dir] .q-editor__toolbar-group + .q-editor__toolbar-group:before { + background: rgba(0,0,0,0.12); +} +[dir=ltr] .q-editor__toolbar-group + .q-editor__toolbar-group:before { + left: -4px; +} +[dir=rtl] .q-editor__toolbar-group + .q-editor__toolbar-group:before { + right: -4px; +} +.q-editor__link-input { + color: inherit; + text-decoration: none; + text-transform: none; + outline: 0; +} +[dir] .q-editor__link-input { + border: none; + border-radius: 0; + background: none; +} +[dir] .q-editor--flat, [dir] .q-editor--flat .q-editor__toolbar { + border: 0; +} +.q-editor--dense .q-editor__toolbar-group { + display: flex; + align-items: center; + flex-wrap: nowrap; +} +[dir] .q-editor--dark { + border-color: rgba(255,255,255,0.28); +} +[dir] .q-editor--dark .q-editor__content hr { + background: rgba(255,255,255,0.28); +} +[dir] .q-editor--dark .q-editor__toolbar { + border-color: rgba(255,255,255,0.28); +} +[dir] .q-editor--dark .q-editor__toolbar-group + .q-editor__toolbar-group:before { + background: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + [dir] .q-editor--dark-auto { + border-color: rgba(255,255,255,0.28); + } + [dir] .q-editor--dark-auto .q-editor__content hr { + background: rgba(255,255,255,0.28); + } + [dir] .q-editor--dark-auto .q-editor__toolbar { + border-color: rgba(255,255,255,0.28); + } + [dir] .q-editor--dark-auto .q-editor__toolbar-group + .q-editor__toolbar-group:before { + background: rgba(255,255,255,0.28); + } +} +.q-expansion-item__border { + opacity: 0; +} +.q-expansion-item__toggle-icon { + position: relative; + transition: transform 0.3s; +} +[dir=ltr] .q-expansion-item__toggle-icon--rotated { + transform: rotate(180deg); +} +[dir=rtl] .q-expansion-item__toggle-icon--rotated { + transform: rotate(-180deg); +} +.q-expansion-item__toggle-focus { + width: 1em !important; + height: 1em !important; + position: relative !important; +} +[dir] .q-expansion-item__toggle-focus + .q-expansion-item__toggle-icon { + margin-top: -1em; +} +.q-expansion-item--standard.q-expansion-item--expanded > div > .q-expansion-item__border { + opacity: 1; +} +.q-expansion-item--popup { + transition: padding 0.5s; +} +[dir] .q-expansion-item--popup > .q-expansion-item__container { + border: 1px solid rgba(0,0,0,0.12); +} +.q-expansion-item--popup > .q-expansion-item__container > .q-separator { + display: none; +} +[dir] .q-expansion-item--popup.q-expansion-item--collapsed { + padding: 0 15px; +} +[dir] .q-expansion-item--popup.q-expansion-item--expanded { + padding: 15px 0; +} +[dir] .q-expansion-item--popup.q-expansion-item--expanded + .q-expansion-item--popup.q-expansion-item--expanded { + padding-top: 0; +} +[dir] .q-expansion-item--popup.q-expansion-item--collapsed:not(:first-child) > .q-expansion-item__container { + border-top-width: 0; +} +[dir] .q-expansion-item--popup.q-expansion-item--expanded + .q-expansion-item--popup.q-expansion-item--collapsed > .q-expansion-item__container { + border-top-width: 1px; +} +[dir] .q-expansion-item__content > .q-card { + box-shadow: none; + border-radius: 0; +} +.q-expansion-item:first-child > div > .q-expansion-item__border--top { + opacity: 0; +} +.q-expansion-item:last-child > div > .q-expansion-item__border--bottom { + opacity: 0; +} +.q-expansion-item--expanded + .q-expansion-item--expanded > div > .q-expansion-item__border--top { + opacity: 0; +} +[dir=ltr] .q-expansion-item--expanded .q-textarea--autogrow textarea { + -webkit-animation: q-expansion-done 0s; + animation: q-expansion-done 0s; +} +[dir=rtl] .q-expansion-item--expanded .q-textarea--autogrow textarea { + -webkit-animation: q-expansion-done 0s; + animation: q-expansion-done 0s; +} +.z-fab { + z-index: 990; +} +.q-fab { + position: relative; + vertical-align: middle; +} +.q-fab > .q-btn { + width: 100%; +} +[dir] .q-fab--form-rounded { + border-radius: 28px; +} +[dir] .q-fab--form-square { + border-radius: 4px; +} +.q-fab__icon, +.q-fab__active-icon { + transition: opacity 0.4s, transform 0.4s; +} +.q-fab__icon { + opacity: 1; +} +[dir] .q-fab__icon { + transform: rotate(0deg); +} +.q-fab__active-icon { + opacity: 0; +} +[dir=ltr] .q-fab__active-icon { + transform: rotate(-180deg); +} +[dir=rtl] .q-fab__active-icon { + transform: rotate(180deg); +} +.q-fab__label--external { + position: absolute; + transition: opacity 0.18s cubic-bezier(0.65, 0.815, 0.735, 0.395); +} +[dir] .q-fab__label--external { + padding: 0 8px; +} +.q-fab__label--external-hidden { + opacity: 0; + pointer-events: none; +} +.q-fab__label--external-left { + top: 50%; +} +[dir=ltr] .q-fab__label--external-left { + left: -12px; + transform: translate(-100%, -50%); +} +[dir=rtl] .q-fab__label--external-left { + right: -12px; + transform: translate(100%, -50%); +} +.q-fab__label--external-right { + top: 50%; +} +[dir=ltr] .q-fab__label--external-right { + right: -12px; + transform: translate(100%, -50%); +} +[dir=rtl] .q-fab__label--external-right { + left: -12px; + transform: translate(-100%, -50%); +} +.q-fab__label--external-bottom { + bottom: -12px; +} +[dir=ltr] .q-fab__label--external-bottom { + left: 50%; + transform: translate(-50%, 100%); +} +[dir=rtl] .q-fab__label--external-bottom { + right: 50%; + transform: translate(50%, 100%); +} +.q-fab__label--external-top { + top: -12px; +} +[dir=ltr] .q-fab__label--external-top { + left: 50%; + transform: translate(-50%, -100%); +} +[dir=rtl] .q-fab__label--external-top { + right: 50%; + transform: translate(50%, -100%); +} +.q-fab__label--internal { + transition: font-size 0.12s cubic-bezier(0.65, 0.815, 0.735, 0.395), max-height 0.12s cubic-bezier(0.65, 0.815, 0.735, 0.395), opacity 0.07s cubic-bezier(0.65, 0.815, 0.735, 0.395); + max-height: 30px; +} +[dir] .q-fab__label--internal { + padding: 0; +} +.q-fab__label--internal-hidden { + font-size: 0; + opacity: 0; +} +[dir] .q-fab__label--internal-top { + padding-bottom: 0.12em; +} +[dir] .q-fab__label--internal-bottom { + padding-top: 0.12em; +} +.q-fab__label--internal-top.q-fab__label--internal-hidden, +.q-fab__label--internal-bottom.q-fab__label--internal-hidden { + max-height: 0; +} +[dir=ltr] .q-fab__label--internal-left { + padding-left: 0.285em; + padding-right: 0.571em; +} +[dir=rtl] .q-fab__label--internal-left { + padding-right: 0.285em; + padding-left: 0.571em; +} +[dir=ltr] .q-fab__label--internal-right { + padding-right: 0.285em; + padding-left: 0.571em; +} +[dir=rtl] .q-fab__label--internal-right { + padding-left: 0.285em; + padding-right: 0.571em; +} +.q-fab__icon-holder { + min-width: 24px; + min-height: 24px; + position: relative; +} +.q-fab__icon-holder--opened .q-fab__icon { + opacity: 0; +} +[dir=ltr] .q-fab__icon-holder--opened .q-fab__icon { + transform: rotate(180deg); +} +[dir=rtl] .q-fab__icon-holder--opened .q-fab__icon { + transform: rotate(-180deg); +} +.q-fab__icon-holder--opened .q-fab__active-icon { + opacity: 1; +} +[dir] .q-fab__icon-holder--opened .q-fab__active-icon { + transform: rotate(0deg); +} +.q-fab__actions { + position: absolute; + opacity: 0; + transition: transform 0.18s ease-in, opacity 0.18s ease-in; + pointer-events: none; + align-items: center; + justify-content: center; + align-self: center; +} +[dir] .q-fab__actions { + padding: 3px; +} +[dir] .q-fab__actions .q-btn { + margin: 5px; +} +.q-fab__actions--right { + height: 56px; +} +[dir=ltr] .q-fab__actions--right { + transform-origin: 0 50%; + transform: scale(0.4) translateX(-62px); + left: 100%; + margin-left: 9px; +} +[dir=rtl] .q-fab__actions--right { + transform-origin: 100% 50%; + transform: scale(0.4) translateX(62px); + right: 100%; + margin-right: 9px; +} +.q-fab__actions--left { + height: 56px; + flex-direction: row-reverse; +} +[dir=ltr] .q-fab__actions--left { + transform-origin: 100% 50%; + transform: scale(0.4) translateX(62px); + right: 100%; + margin-right: 9px; +} +[dir=rtl] .q-fab__actions--left { + transform-origin: 0% 50%; + transform: scale(0.4) translateX(-62px); + left: 100%; + margin-left: 9px; +} +.q-fab__actions--up { + width: 56px; + bottom: 100%; + flex-direction: column-reverse; +} +[dir] .q-fab__actions--up { + transform-origin: 50% 100%; + transform: scale(0.4) translateY(62px); + margin-bottom: 9px; +} +.q-fab__actions--down { + width: 56px; + top: 100%; + flex-direction: column; +} +[dir] .q-fab__actions--down { + transform-origin: 50% 0; + transform: scale(0.4) translateY(-62px); + margin-top: 9px; +} +[dir=ltr] .q-fab__actions--up, [dir=ltr] .q-fab__actions--down { + left: 50%; + margin-left: -28px; +} +[dir=rtl] .q-fab__actions--up, [dir=rtl] .q-fab__actions--down { + right: 50%; + margin-right: -28px; +} +.q-fab__actions--opened { + opacity: 1; + pointer-events: all; +} +[dir] .q-fab__actions--opened { + transform: scale(1) translate(0, 0); +} +.q-fab--align-left > .q-fab__actions--up, +.q-fab--align-left > .q-fab__actions--down { + align-items: flex-start; +} +[dir=ltr] .q-fab--align-left > .q-fab__actions--up, [dir=ltr] .q-fab--align-left > .q-fab__actions--down { + left: 28px; +} +[dir=rtl] .q-fab--align-left > .q-fab__actions--up, [dir=rtl] .q-fab--align-left > .q-fab__actions--down { + right: 28px; +} +.q-fab--align-right > .q-fab__actions--up, +.q-fab--align-right > .q-fab__actions--down { + align-items: flex-end; +} +[dir=ltr] .q-fab--align-right > .q-fab__actions--up, [dir=ltr] .q-fab--align-right > .q-fab__actions--down { + left: auto; + right: 0; +} +[dir=rtl] .q-fab--align-right > .q-fab__actions--up, [dir=rtl] .q-fab--align-right > .q-fab__actions--down { + right: auto; + left: 0; +} +.q-field { + font-size: 14px; +} +.q-field ::-ms-clear, +.q-field ::-ms-reveal { + display: none; +} +[dir] .q-field--with-bottom { + padding-bottom: 20px; +} +.q-field__marginal { + height: 56px; + color: rgba(0,0,0,0.54); + font-size: 24px; +} +[dir=ltr] .q-field__marginal > * + * { + margin-left: 2px; +} +[dir=rtl] .q-field__marginal > * + * { + margin-right: 2px; +} +.q-field__marginal .q-avatar { + font-size: 32px; +} +[dir=ltr] .q-field__before, [dir=ltr] .q-field__prepend { + padding-right: 12px; +} +[dir=rtl] .q-field__before, [dir=rtl] .q-field__prepend { + padding-left: 12px; +} +[dir=ltr] .q-field__after, [dir=ltr] .q-field__append { + padding-left: 12px; +} +[dir=rtl] .q-field__after, [dir=rtl] .q-field__append { + padding-right: 12px; +} +.q-field__after:empty, +.q-field__append:empty { + display: none; +} +[dir=ltr] .q-field__append + .q-field__append { + padding-left: 2px; +} +[dir=rtl] .q-field__append + .q-field__append { + padding-right: 2px; +} +[dir=ltr] .q-field__inner { + text-align: left; +} +[dir=rtl] .q-field__inner { + text-align: right; +} +.q-field__bottom { + font-size: 12px; + min-height: 20px; + line-height: 1; + color: rgba(0,0,0,0.54); + backface-visibility: hidden; +} +[dir] .q-field__bottom { + padding: 8px 12px 0; +} +.q-field__bottom--animated { + position: absolute; + bottom: 0; +} +[dir] .q-field__bottom--animated { + transform: translateY(100%); +} +[dir=ltr] .q-field__bottom--animated { + left: 0; + right: 0; +} +[dir=rtl] .q-field__bottom--animated { + right: 0; + left: 0; +} +.q-field__messages { + line-height: 1; +} +.q-field__messages > div { + word-break: break-word; + word-wrap: break-word; + overflow-wrap: break-word; +} +[dir] .q-field__messages > div + div { + margin-top: 4px; +} +.q-field__counter { + line-height: 1; +} +[dir=ltr] .q-field__counter { + padding-left: 8px; +} +[dir=rtl] .q-field__counter { + padding-right: 8px; +} +[dir] .q-field--item-aligned { + padding: 8px 16px; +} +.q-field--item-aligned .q-field__before { + min-width: 56px; +} +.q-field__control-container { + height: inherit; +} +.q-field__control { + color: #1976d2; + color: var(--q-color-primary); + height: 56px; + max-width: 100%; + outline: none; +} +.q-field__control:before, +.q-field__control:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + pointer-events: none; +} +[dir=ltr] .q-field__control:before, [dir=ltr] .q-field__control:after { + right: 0; + left: 0; +} +[dir=rtl] .q-field__control:before, [dir=rtl] .q-field__control:after { + left: 0; + right: 0; +} +[dir] .q-field__control:before { + border-radius: inherit; +} +.q-field__shadow { + top: 8px; + opacity: 0; + overflow: hidden; + white-space: pre-wrap; + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field__shadow + .q-field__native::-moz-placeholder { + -moz-transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field__shadow + .q-field__native:-ms-input-placeholder { + -ms-transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field__shadow + .q-field__native::placeholder { + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-field__shadow + .q-field__native:focus::-moz-placeholder { + opacity: 0; +} +.q-field__shadow + .q-field__native:focus:-ms-input-placeholder { + opacity: 0; +} +.q-field__shadow + .q-field__native:focus::placeholder { + opacity: 0; +} +.q-field__native, +.q-field__prefix, +.q-field__suffix, +.q-field__input { + font-weight: 400; + line-height: 28px; + letter-spacing: 0.00937em; + text-decoration: inherit; + text-transform: inherit; + color: rgba(0,0,0,0.87); + outline: 0; +} +[dir] .q-field__native, [dir] .q-field__prefix, [dir] .q-field__suffix, [dir] .q-field__input { + border: none; + border-radius: 0; + background: none; + padding: 6px 0; +} +.q-field__native, +.q-field__input { + width: 100%; + min-width: 0; + outline: 0 !important; + -webkit-user-select: auto; + -moz-user-select: auto; + -ms-user-select: auto; + user-select: auto; +} +[dir=ltr] .q-field__native:-webkit-autofill, [dir=ltr] .q-field__input:-webkit-autofill { + -webkit-animation-name: q-autofill; + -webkit-animation-fill-mode: both; +} +[dir=rtl] .q-field__native:-webkit-autofill, [dir=rtl] .q-field__input:-webkit-autofill { + -webkit-animation-name: q-autofill; + -webkit-animation-fill-mode: both; +} +[dir] .q-field__native:-webkit-autofill + .q-field__label, [dir] .q-field__input:-webkit-autofill + .q-field__label { + transform: translateY(-40%) scale(0.75); +} +[dir] .q-field__native[type="number"]:invalid + .q-field__label, [dir] .q-field__input[type="number"]:invalid + .q-field__label { + transform: translateY(-40%) scale(0.75); +} +[dir] .q-field__native:invalid, [dir] .q-field__input:invalid { + box-shadow: none; +} +.q-field__native[type="file"] { + line-height: 1em; +} +.q-field__input { + height: 0; + min-height: 24px; + line-height: 24px; +} +[dir] .q-field__input { + padding: 0; +} +.q-field__prefix, +.q-field__suffix { + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1); + white-space: nowrap; +} +[dir=ltr] .q-field__prefix { + padding-right: 4px; +} +[dir=rtl] .q-field__prefix { + padding-left: 4px; +} +[dir=ltr] .q-field__suffix { + padding-left: 4px; +} +[dir=rtl] .q-field__suffix { + padding-right: 4px; +} +.q-field--readonly .q-placeholder, +.q-field--disabled .q-placeholder { + opacity: 1 !important; +} +[dir] .q-field--readonly.q-field--labeled .q-field__native, [dir] .q-field--readonly.q-field--labeled .q-field__input { + cursor: default; +} +[dir] .q-field--readonly.q-field--float .q-field__native, [dir] .q-field--readonly.q-field--float .q-field__input { + cursor: text; +} +[dir] .q-field--disabled .q-field__inner { + cursor: not-allowed; +} +.q-field--disabled .q-field__control { + pointer-events: none; +} +.q-field--disabled .q-field__control { + opacity: 0.6 !important; +} +.q-field--disabled .q-field__control div, +.q-field--disabled .q-field__control div * { + outline: 0 !important; +} +.q-field__label { + max-width: 100%; + top: 18px; + color: rgba(0,0,0,0.6); + font-size: 16px; + line-height: 20px; + font-weight: 400; + letter-spacing: 0.00937em; + text-decoration: inherit; + text-transform: inherit; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.324s cubic-bezier(0.4, 0, 0.2, 1); + backface-visibility: hidden; +} +[dir=ltr] .q-field__label { + left: 0; + transform-origin: left top; +} +[dir=rtl] .q-field__label { + right: 0; + transform-origin: right top; +} +.q-field__label-back { + position: absolute; + top: 7.5px; + height: 0; + z-index: -1; + transition: height 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir=ltr] .q-field__label-back { + left: 0; + right: 0; +} +[dir=rtl] .q-field__label-back { + right: 0; + left: 0; +} +.q-field--float .q-field__label-back { + height: 4.5px; +} +.q-field--float .q-field__label { + max-width: 133%; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.396s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--float .q-field__label { + transform: translateY(-40%) scale(0.75); +} +.q-field--highlighted .q-field__label { + color: currentColor; +} +.q-field--highlighted .q-field__shadow { + opacity: 0.5; +} +[dir] .q-field--filled .q-field__control { + padding: 0 12px; + background: rgba(0,0,0,0.05); + border-radius: 4px 4px 0 0; +} +.q-field--filled .q-field__control:before { + opacity: 0; + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1), background 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--filled .q-field__control:before { + background: rgba(0,0,0,0.05); + border-bottom: 1px solid rgba(0,0,0,0.42); +} +.q-field--filled .q-field__control:hover:before { + opacity: 1; +} +.q-field--filled .q-field__control:after { + height: 2px; + top: auto; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--filled .q-field__control:after { + transform-origin: center bottom; + transform: scale3d(0, 1, 1); + background: currentColor; +} +[dir] .q-field--filled.q-field--rounded .q-field__control { + border-radius: 28px 28px 0 0; +} +.q-field--filled.q-field--highlighted .q-field__control:before { + opacity: 1; +} +[dir] .q-field--filled.q-field--highlighted .q-field__control:before { + background: rgba(0,0,0,0.12); +} +[dir] .q-field--filled.q-field--highlighted .q-field__control:after { + transform: scale3d(1, 1, 1); +} +[dir] .q-field--filled.q-field--dark .q-field__control, [dir] .q-field--filled.q-field--dark .q-field__control:before { + background: rgba(255,255,255,0.07); +} +[dir] .q-field--filled.q-field--dark.q-field--highlighted .q-field__control:before { + background: rgba(255,255,255,0.1); +} +.q-field--filled.q-field--readonly .q-field__control:before { + opacity: 1; +} +[dir] .q-field--filled.q-field--readonly .q-field__control:before { + background: transparent; + border-bottom-style: dashed; +} +[dir] .q-field--outlined .q-field__control { + border-radius: 4px; + padding: 0 12px; +} +.q-field--outlined .q-field__control:before { + transition: border-color 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--outlined .q-field__control:before { + border: 1px solid rgba(0,0,0,0.24); +} +[dir] .q-field--outlined .q-field__control:hover:before { + border-color: #000; + border-color: var(--q-color-light-text); +} +.q-field--outlined .q-field__control:after { + height: inherit; + transition: border-color 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--outlined .q-field__control:after { + border-radius: inherit; + border: 2px solid transparent; +} +[dir] .q-field--outlined .q-field__native:-webkit-autofill, [dir] .q-field--outlined .q-field__input:-webkit-autofill { + margin-top: 1px; + margin-bottom: 1px; +} +[dir] .q-field--outlined.q-field--rounded .q-field__control { + border-radius: 28px; +} +[dir] .q-field--outlined.q-field--highlighted .q-field__control:hover:before { + border-color: transparent; +} +[dir] .q-field--outlined.q-field--highlighted .q-field__control:after { + border-color: currentColor; + border-width: 2px; + transform: scale3d(1, 1, 1); +} +[dir] .q-field--outlined.q-field--readonly .q-field__control:before { + border-style: dashed; +} +.q-field--standard .q-field__control:before { + transition: border-color 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--standard .q-field__control:before { + border-bottom: 1px solid rgba(0,0,0,0.24); +} +[dir] .q-field--standard .q-field__control:hover:before { + border-color: #000; + border-color: var(--q-color-light-text); +} +.q-field--standard .q-field__control:after { + height: 2px; + top: auto; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--standard .q-field__control:after { + transform-origin: center bottom; + transform: scale3d(0, 1, 1); + background: currentColor; +} +[dir=ltr] .q-field--standard .q-field__control:after { + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=rtl] .q-field--standard .q-field__control:after { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +[dir] .q-field--standard.q-field--highlighted .q-field__control:after { + transform: scale3d(1, 1, 1); +} +[dir] .q-field--standard.q-field--readonly .q-field__control:before { + border-bottom-style: dashed; +} +[dir] .q-field--dark .q-field__control:before { + border-color: rgba(255,255,255,0.6); +} +[dir] .q-field--dark .q-field__control:hover:before { + border-color: #fff; + border-color: var(--q-color-dark-text); +} +.q-field--dark .q-field__native, +.q-field--dark .q-field__prefix, +.q-field--dark .q-field__suffix, +.q-field--dark .q-field__input { + color: #fff; + color: var(--q-color-dark-text); +} +.q-field--dark:not(.q-field--highlighted) .q-field__label, +.q-field--dark .q-field__marginal, +.q-field--dark .q-field__bottom { + color: rgba(255,255,255,0.7); +} +.q-field--standout .q-field__control { + transition: box-shadow 0.36s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--standout .q-field__control { + padding: 0 12px; + background: rgba(0,0,0,0.05); + border-radius: 4px; +} +.q-field--standout .q-field__control:before { + opacity: 0; + transition: opacity 0.36s cubic-bezier(0.4, 0, 0.2, 1), background 0.36s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--standout .q-field__control:before { + background: rgba(0,0,0,0.07); +} +.q-field--standout .q-field__control:hover:before { + opacity: 1; +} +[dir] .q-field--standout.q-field--rounded .q-field__control { + border-radius: 28px; +} +[dir] .q-field--standout.q-field--highlighted .q-field__control { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + background: #121212; + background: var(--q-color-dark-page); +} +.q-field--standout.q-field--highlighted .q-field__native, +.q-field--standout.q-field--highlighted .q-field__prefix, +.q-field--standout.q-field--highlighted .q-field__suffix, +.q-field--standout.q-field--highlighted .q-field__prepend, +.q-field--standout.q-field--highlighted .q-field__append, +.q-field--standout.q-field--highlighted .q-field__input { + color: #fff; + color: var(--q-color-dark-text); +} +.q-field--standout.q-field--readonly .q-field__control:before { + opacity: 1; +} +[dir] .q-field--standout.q-field--readonly .q-field__control:before { + background: transparent; + border: 1px dashed rgba(0,0,0,0.24); +} +[dir] .q-field--standout.q-field--dark .q-field__control { + background: rgba(255,255,255,0.07); +} +[dir] .q-field--standout.q-field--dark .q-field__control:before { + background: rgba(255,255,255,0.07); +} +[dir] .q-field--standout.q-field--dark.q-field--highlighted .q-field__control { + background: #fff; + background: var(--q-color-light-page); +} +.q-field--standout.q-field--dark.q-field--highlighted .q-field__native, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__prefix, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__suffix, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__prepend, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__append, +.q-field--standout.q-field--dark.q-field--highlighted .q-field__input { + color: #000; + color: var(--q-color-light-text); +} +[dir] .q-field--standout.q-field--dark.q-field--readonly .q-field__control:before { + border-color: rgba(255,255,255,0.24); +} +.q-field--labeled--std .q-field__native, +.q-field--labeled--std .q-field__prefix, +.q-field--labeled--std .q-field__suffix { + line-height: 24px; +} +[dir] .q-field--labeled--std .q-field__native, [dir] .q-field--labeled--std .q-field__prefix, [dir] .q-field--labeled--std .q-field__suffix { + padding-top: 24px; + padding-bottom: 8px; +} +.q-field--labeled .q-field__shadow { + top: 0; +} +.q-field--labeled:not(.q-field--float) .q-field__prefix, +.q-field--labeled:not(.q-field--float) .q-field__suffix { + opacity: 0; +} +.q-field--labeled:not(.q-field--float) .q-field__native::-moz-placeholder, +.q-field--labeled:not(.q-field--float) .q-field__input::-moz-placeholder { + color: transparent; +} +.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder, +.q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder { + color: transparent !important; +} +.q-field--labeled:not(.q-field--float) .q-field__native::-moz-placeholder, .q-field--labeled:not(.q-field--float) .q-field__input::-moz-placeholder { + color: transparent; +} +.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder, .q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder { + color: transparent; +} +.q-field--labeled:not(.q-field--float) .q-field__native::placeholder, +.q-field--labeled:not(.q-field--float) .q-field__input::placeholder { + color: transparent; +} +[dir] .q-field--labeled--std.q-field--dense .q-field__native, [dir] .q-field--labeled--std.q-field--dense .q-field__prefix, [dir] .q-field--labeled--std.q-field--dense .q-field__suffix { + padding-top: 14px; + padding-bottom: 2px; +} +.q-field--dense .q-field__shadow { + top: 0; +} +.q-field--dense .q-field__control, +.q-field--dense .q-field__marginal { + height: 40px; +} +.q-field--dense .q-field__bottom { + font-size: 11px; +} +.q-field--dense .q-field__label { + font-size: 14px; + top: 10px; +} +[dir=ltr] .q-field--dense .q-field__before, [dir=ltr] .q-field--dense .q-field__prepend { + padding-right: 6px; +} +[dir=rtl] .q-field--dense .q-field__before, [dir=rtl] .q-field--dense .q-field__prepend { + padding-left: 6px; +} +[dir=ltr] .q-field--dense .q-field__after, [dir=ltr] .q-field--dense .q-field__append { + padding-left: 6px; +} +[dir=rtl] .q-field--dense .q-field__after, [dir=rtl] .q-field--dense .q-field__append { + padding-right: 6px; +} +[dir=ltr] .q-field--dense .q-field__append + .q-field__append { + padding-left: 2px; +} +[dir=rtl] .q-field--dense .q-field__append + .q-field__append { + padding-right: 2px; +} +.q-field--dense .q-field__marginal .q-avatar { + font-size: 24px; +} +[dir] .q-field--dense.q-field--float .q-field__label { + transform: translateY(-30%) scale(0.75); +} +[dir] .q-field--dense .q-field__native:-webkit-autofill + .q-field__label, [dir] .q-field--dense .q-field__input:-webkit-autofill + .q-field__label { + transform: translateY(-30%) scale(0.75); +} +[dir] .q-field--dense .q-field__native[type="number"]:invalid + .q-field__label, [dir] .q-field--dense .q-field__input[type="number"]:invalid + .q-field__label { + transform: translateY(-30%) scale(0.75); +} +.q-field--outlined--md.q-field--float .q-field__label { + max-width: 133%; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1), padding 0.36s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.396s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--outlined--md.q-field--float .q-field__label { + transform: translateY(-120%) scale(0.75); +} +[dir=ltr] .q-field--outlined--md.q-field--float .q-field__label { + padding-left: 6px; + padding-right: 6px; +} +[dir=rtl] .q-field--outlined--md.q-field--float .q-field__label { + padding-right: 6px; + padding-left: 6px; +} +.q-field--outlined--md .q-field__label { + z-index: 1; + transition: transform 0.36s cubic-bezier(0.4, 0, 0.2, 1), padding 0.36s cubic-bezier(0.4, 0, 0.2, 1), max-width 0.324s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir] .q-field--outlined--md .q-field__label { + border-radius: 4px; +} +[dir=ltr] .q-field--outlined--md .q-field__label { + left: -4px; + padding-left: 4px; + padding-right: 4px; +} +[dir=rtl] .q-field--outlined--md .q-field__label { + right: -4px; + padding-right: 4px; + padding-left: 4px; +} +[dir] .q-field--outlined--md .q-field__native:-webkit-autofill + .q-field__label, [dir] .q-field--outlined--md .q-field__input:-webkit-autofill + .q-field__label { + transform: translateY(-120%) scale(0.75); +} +[dir] .q-field--outlined--md .q-field__native[type="number"]:invalid + .q-field__label, [dir] .q-field--outlined--md .q-field__input[type="number"]:invalid + .q-field__label { + transform: translateY(-120%) scale(0.75); +} +[dir] .q-field--outlined--md.q-field--dense.q-field--outlined--md.q-field--float .q-field__label { + transform: translateY(-85%) scale(0.75); +} +[dir] .q-field--outlined--md.q-field--dense .q-field__native:-webkit-autofill + .q-field__label, [dir] .q-field--outlined--md.q-field--dense .q-field__input:-webkit-autofill + .q-field__label { + transform: translateY(-85%) scale(0.75); +} +[dir] .q-field--outlined--md.q-field--dense .q-field__native[type="number"]:invalid + .q-field__label, [dir] .q-field--outlined--md.q-field--dense .q-field__input[type="number"]:invalid + .q-field__label { + transform: translateY(-85%) scale(0.75); +} +[dir=ltr] .q-field--borderless .q-field__bottom, [dir=ltr] .q-field--standard .q-field__bottom, [dir=ltr] .q-field--borderless.q-field--dense .q-field__control, [dir=ltr] .q-field--standard.q-field--dense .q-field__control { + padding-left: 0; + padding-right: 0; +} +[dir=rtl] .q-field--borderless .q-field__bottom, [dir=rtl] .q-field--standard .q-field__bottom, [dir=rtl] .q-field--borderless.q-field--dense .q-field__control, [dir=rtl] .q-field--standard.q-field--dense .q-field__control { + padding-right: 0; + padding-left: 0; +} +[dir=ltr] .q-field--error .q-field__label { + -webkit-animation: q-field-label-ltr 0.36s; + animation: q-field-label-ltr 0.36s; +} +[dir=rtl] .q-field--error .q-field__label { + -webkit-animation: q-field-label-rtl 0.36s; + animation: q-field-label-rtl 0.36s; +} +.q-field--error .q-field__bottom { + color: #c10015; + color: var(--q-color-negative); +} +.q-field__focusable-action { + opacity: 0.6; + outline: 0 !important; + color: inherit; +} +[dir] .q-field__focusable-action { + cursor: pointer; + border: 0; + background: transparent; + padding: 0; +} +.q-field__focusable-action:hover, +.q-field__focusable-action:focus { + opacity: 1; +} +.q-field--auto-height .q-field__control { + height: auto; +} +.q-field--auto-height .q-field__control, +.q-field--auto-height .q-field__native { + min-height: 56px; +} +.q-field--auto-height .q-field__native { + align-items: center; +} +[dir] .q-field--auto-height .q-field__control-container { + padding-top: 0; +} +.q-field--auto-height .q-field__native, +.q-field--auto-height .q-field__prefix, +.q-field--auto-height .q-field__suffix { + line-height: 18px; +} +[dir] .q-field--auto-height.q-field--labeled--std .q-field__control-container { + padding-top: 24px; +} +.q-field--auto-height.q-field--labeled--std .q-field__shadow { + top: 24px; +} +[dir] .q-field--auto-height.q-field--labeled--std .q-field__native, [dir] .q-field--auto-height.q-field--labeled--std .q-field__prefix, [dir] .q-field--auto-height.q-field--labeled--std .q-field__suffix { + padding-top: 0; +} +.q-field--auto-height.q-field--labeled--std .q-field__native { + min-height: 24px; +} +.q-field--auto-height.q-field--dense .q-field__control, +.q-field--auto-height.q-field--dense .q-field__native { + min-height: 40px; +} +[dir] .q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__control-container { + padding-top: 14px; +} +.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__shadow { + top: 14px; +} +.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__native { + min-height: 24px; +} +[dir] .q-field--square .q-field__control { + border-radius: 0 !important; +} +.q-transition--field-message-enter-active, +.q-transition--field-message-leave-active { + transition: transform 0.6s cubic-bezier(0.86, 0, 0.07, 1), opacity 0.6s cubic-bezier(0.86, 0, 0.07, 1); +} +.q-transition--field-message-enter, +.q-transition--field-message-leave-to { + opacity: 0; +} +[dir] .q-transition--field-message-enter, [dir] .q-transition--field-message-leave-to { + transform: translateY(-10px); +} +.q-transition--field-message-leave, +.q-transition--field-message-leave-active { + position: absolute; +} +@media (prefers-color-scheme: dark) { + [dir] .q-field--dark-auto.q-field--filled .q-field__control, [dir] .q-field--dark-auto.q-field--filled .q-field__control:before { + background: rgba(255,255,255,0.07); + } + [dir] .q-field--dark-auto.q-field--filled.q-field--highlighted .q-field__control:before { + background: rgba(255,255,255,0.1); + } + [dir] .q-field--dark-auto .q-field__control:before { + border-color: rgba(255,255,255,0.6); + } + [dir] .q-field--dark-auto .q-field__control:hover:before { + border-color: #fff; + border-color: var(--q-color-dark-text); + } + .q-field--dark-auto .q-field__native, + .q-field--dark-auto .q-field__prefix, + .q-field--dark-auto .q-field__suffix, + .q-field--dark-auto .q-field__input { + color: #fff; + color: var(--q-color-dark-text); + } + .q-field--dark-auto:not(.q-field--highlighted) .q-field__label, + .q-field--dark-auto .q-field__marginal, + .q-field--dark-auto .q-field__bottom { + color: rgba(255,255,255,0.7); + } + [dir] .q-field--dark-auto.q-field--standout .q-field__control { + background: rgba(255,255,255,0.07); + } + [dir] .q-field--dark-auto.q-field--standout .q-field__control:before { + background: rgba(255,255,255,0.07); + } + [dir] .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__control { + background: #fff; + background: var(--q-color-light-page); + } + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__native, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__prefix, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__suffix, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__prepend, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__append, + .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__input { + color: #000; + color: var(--q-color-light-text); + } + [dir] .q-field--dark-auto.q-field--standout.q-field--readonly .q-field__control:before { + border-color: rgba(255,255,255,0.24); + } +} +.q-file .q-field__native { + word-break: break-all; +} +.q-file .q-field__input { + opacity: 0 !important; +} +[dir] .q-file .q-field__input::-webkit-file-upload-button { + cursor: pointer; +} +.q-file__filler { + visibility: hidden; + width: 100%; +} +[dir] .q-file__filler { + border: none; + padding: 0; +} +.q-file__dnd { + outline: 1px dashed currentColor; + outline-offset: -4px; +} +.q-form { + position: relative; +} +.q-img { + position: relative; + width: 100%; + display: inline-block; + vertical-align: middle; +} +.q-img__loading .q-spinner { + font-size: 50px; +} +[dir] .q-img__image { + border-radius: inherit; + background-repeat: no-repeat; +} +.q-img__content { + overflow: hidden; +} +[dir] .q-img__content { + border-radius: inherit; +} +.q-img__content > div { + position: absolute; + color: #fff; +} +[dir] .q-img__content > div { + padding: 16px; + background: rgba(0,0,0,0.47); +} +.q-img--menu .q-img__image { + pointer-events: none; +} +.q-img--menu .q-img__image > img { + pointer-events: all; + opacity: 0; +} +.q-img--menu .q-img__content { + pointer-events: none; +} +.q-img--menu .q-img__content > div { + pointer-events: all; +} +[dir] .q-inner-loading { + background: rgba(255,255,255,0.6); +} +[dir] .q-inner-loading--dark { + background: rgba(0,0,0,0.4); +} +[dir] .q-inner-loading__label { + margin-top: 8px; +} +@media (prefers-color-scheme: dark) { + [dir] .q-inner-loading--dark-auto { + background: rgba(0,0,0,0.4); + } +} +.q-textarea .q-field__control { + min-height: 56px; + height: auto; +} +[dir] .q-textarea .q-field__control-container { + padding-top: 2px; + padding-bottom: 2px; +} +.q-textarea .q-field__shadow { + top: 2px; + bottom: 2px; +} +.q-textarea .q-field__native, +.q-textarea .q-field__prefix, +.q-textarea .q-field__suffix { + line-height: 18px; +} +.q-textarea .q-field__native { + resize: vertical; + min-height: 52px; +} +[dir] .q-textarea .q-field__native { + padding-top: 17px; +} +[dir] .q-textarea.q-field--labeled--std .q-field__control-container { + padding-top: 26px; +} +.q-textarea.q-field--labeled--std .q-field__shadow { + top: 26px; +} +[dir] .q-textarea.q-field--labeled--std .q-field__native, [dir] .q-textarea.q-field--labeled--std .q-field__prefix, [dir] .q-textarea.q-field--labeled--std .q-field__suffix { + padding-top: 0; +} +.q-textarea.q-field--labeled--std .q-field__native { + min-height: 26px; +} +[dir] .q-textarea.q-field--labeled--std .q-field__native { + padding-top: 1px; +} +.q-textarea--autogrow .q-field__native { + resize: none; +} +.q-textarea.q-field--dense .q-field__control, +.q-textarea.q-field--dense .q-field__native { + min-height: 36px; +} +[dir] .q-textarea.q-field--dense .q-field__native { + padding-top: 9px; +} +[dir] .q-textarea.q-field--dense.q-field--labeled--std .q-field__control-container { + padding-top: 14px; +} +.q-textarea.q-field--dense.q-field--labeled--std .q-field__shadow { + top: 14px; +} +.q-textarea.q-field--dense.q-field--labeled--std .q-field__native { + min-height: 24px; +} +[dir] .q-textarea.q-field--dense.q-field--labeled--std .q-field__native { + padding-top: 3px; +} +[dir] .q-textarea.q-field--dense.q-field--labeled--std .q-field__prefix, [dir] .q-textarea.q-field--dense.q-field--labeled--std .q-field__suffix { + padding-top: 2px; +} +body.mobile .q-textarea .q-field__native, +.q-textarea.disabled .q-field__native { + resize: none; +} +.q-intersection { + position: relative; +} +.q-item { + min-height: 48px; + color: inherit; + transition: color 0.3s, background-color 0.3s; +} +[dir] .q-item { + padding: 8px 16px; +} +.q-item__section--side { + color: #757575; + align-items: flex-start; + width: auto; + min-width: 0; + max-width: 100%; +} +[dir=ltr] .q-item__section--side { + padding-right: 16px; +} +[dir=rtl] .q-item__section--side { + padding-left: 16px; +} +.q-item__section--side > .q-icon { + font-size: 24px; +} +.q-item__section--side > .q-avatar { + font-size: 40px; +} +.q-item__section--avatar { + color: inherit; + min-width: 56px; +} +.q-item__section--thumbnail img { + width: 100px; + height: 56px; +} +.q-item__section--nowrap { + white-space: nowrap; +} +[dir=ltr] .q-item > .q-item__section--thumbnail:first-child, [dir=ltr] .q-item > .q-focus-helper + .q-item__section--thumbnail { + margin-left: -16px; +} +[dir=rtl] .q-item > .q-item__section--thumbnail:first-child, [dir=rtl] .q-item > .q-focus-helper + .q-item__section--thumbnail { + margin-right: -16px; +} +[dir=ltr] .q-item > .q-item__section--thumbnail:last-of-type { + margin-right: -16px; +} +[dir=rtl] .q-item > .q-item__section--thumbnail:last-of-type { + margin-left: -16px; +} +.q-item__label { + line-height: 1.2em !important; + max-width: 100%; +} +.q-item__label--overline { + color: rgba(0,0,0,0.7); +} +.q-item__label--caption { + color: rgba(0,0,0,0.54); +} +.q-item__label--header { + color: #757575; + font-size: 0.875rem; + line-height: 1.25rem; + letter-spacing: 0.01786em; +} +[dir] .q-item__label--header { + padding: 16px; +} +[dir] .q-separator--spaced + .q-item__label--header, [dir] .q-list--padding .q-item__label--header { + padding-top: 8px; +} +[dir] .q-item__label + .q-item__label { + margin-top: 4px; +} +.q-item__section--main { + width: auto; + min-width: 0; + max-width: 100%; + flex: 10000 1 0%; +} +[dir=ltr] .q-item__section--main + .q-item__section--main { + margin-left: 8px; +} +[dir=rtl] .q-item__section--main + .q-item__section--main { + margin-right: 8px; +} +.q-item__section--main ~ .q-item__section--side { + align-items: flex-end; +} +[dir=ltr] .q-item__section--main ~ .q-item__section--side { + padding-right: 0; + padding-left: 16px; +} +[dir=rtl] .q-item__section--main ~ .q-item__section--side { + padding-left: 0; + padding-right: 16px; +} +[dir=ltr] .q-item__section--main.q-item__section--thumbnail { + margin-left: 0; + margin-right: -16px; +} +[dir=rtl] .q-item__section--main.q-item__section--thumbnail { + margin-right: 0; + margin-left: -16px; +} +[dir] .q-list--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +[dir] .q-list--separator > .q-item-type + .q-item-type, [dir] .q-list--separator > .q-virtual-scroll__content > .q-item-type + .q-item-type { + border-top: 1px solid rgba(0,0,0,0.12); +} +[dir] .q-list--padding { + padding: 8px 0; +} +.q-list--dense > .q-item, +.q-item--dense { + min-height: 32px; +} +[dir] .q-list--dense > .q-item, [dir] .q-item--dense { + padding: 2px 16px; +} +[dir] .q-list--dark.q-list--separator > .q-item-type + .q-item-type, [dir] .q-list--dark.q-list--separator > .q-virtual-scroll__content > .q-item-type + .q-item-type { + border-top-color: rgba(255,255,255,0.28); +} +.q-list--dark, +.q-item--dark { + color: #fff; + color: var(--q-color-dark-text); +} +[dir] .q-list--dark, [dir] .q-item--dark { + border-color: rgba(255,255,255,0.28); +} +.q-list--dark .q-item__section--side:not(.q-item__section--avatar), +.q-item--dark .q-item__section--side:not(.q-item__section--avatar) { + color: rgba(255,255,255,0.7); +} +.q-list--dark .q-item__label--header, +.q-item--dark .q-item__label--header { + color: rgba(255,255,255,0.64); +} +.q-list--dark .q-item__label--overline, +.q-item--dark .q-item__label--overline, +.q-list--dark .q-item__label--caption, +.q-item--dark .q-item__label--caption { + color: rgba(255,255,255,0.8); +} +.q-item { + position: relative; +} +.q-item.q-router-link--active, +.q-item--active { + color: #1976d2; + color: var(--q-color-primary); +} +@media (prefers-color-scheme: dark) { + [dir] .q-list--dark-auto.q-list--separator > .q-item-type + .q-item-type, [dir] .q-list--dark-auto.q-list--separator > .q-virtual-scroll__content > .q-item-type + .q-item-type { + border-top-color: rgba(255,255,255,0.28); + } + .q-list--dark-auto, + .q-item--dark-auto { + color: #fff; + color: var(--q-color-dark-text); + } + [dir] .q-list--dark-auto, [dir] .q-item--dark-auto { + border-color: rgba(255,255,255,0.28); + } + .q-list--dark-auto .q-item__section--side:not(.q-item__section--avatar), + .q-item--dark-auto .q-item__section--side:not(.q-item__section--avatar) { + color: rgba(255,255,255,0.7); + } + .q-list--dark-auto .q-item__label--header, + .q-item--dark-auto .q-item__label--header { + color: rgba(255,255,255,0.64); + } + .q-list--dark-auto .q-item__label--overline, + .q-item--dark-auto .q-item__label--overline, + .q-list--dark-auto .q-item__label--caption, + .q-item--dark-auto .q-item__label--caption { + color: rgba(255,255,255,0.8); + } +} +.q-knob { + font-size: 48px; +} +.q-knob--editable { + outline: 0; +} +[dir] .q-knob--editable { + cursor: pointer; +} +.q-knob--editable:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + transition: box-shadow 0.24s ease-in-out; +} +[dir] .q-knob--editable:before { + border-radius: 50%; + box-shadow: none; +} +[dir=ltr] .q-knob--editable:before { + right: 0; + left: 0; +} +[dir=rtl] .q-knob--editable:before { + left: 0; + right: 0; +} +[dir] .q-knob--editable:focus:before { + box-shadow: 0 2px 4px -1px rgba(0,0,0,0.2), 0 4px 5px rgba(0,0,0,0.14), 0 1px 10px rgba(0,0,0,0.12); +} +.q-layout { + width: 100%; +} +.q-layout-container { + position: relative; + width: 100%; + height: 100%; +} +.q-layout-container .q-layout { + min-height: 100%; +} +.q-layout-container > div { + contain: layout size; + contain: layout size style; +} +[dir] .q-layout-container > div { + transform: translateZ(0); +} +.q-layout-container > div > div { + min-height: 0; + max-height: 100%; +} +.q-layout__shadow { + width: 100%; +} +.q-layout__shadow:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; +} +[dir] .q-layout__shadow:after { + box-shadow: 0 0 10px 2px rgba(0,0,0,0.2), 0 0px 10px rgba(0,0,0,0.24); +} +[dir=ltr] .q-layout__shadow:after { + right: 0; + left: 0; +} +[dir=rtl] .q-layout__shadow:after { + left: 0; + right: 0; +} +.q-layout__section--marginal { + color: #fff; + color: var(--q-color-dark-text); +} +[dir] .q-layout__section--marginal { + background-color: #1976d2; + background-color: var(--q-color-primary); +} +[dir] .q-header--hidden { + transform: translateY(-110%); +} +[dir] .q-header--bordered { + border-bottom: 1px solid rgba(0,0,0,0.12); +} +.q-header .q-layout__shadow { + bottom: -10px; +} +.q-header .q-layout__shadow:after { + bottom: 10px; +} +[dir] .q-footer--hidden { + transform: translateY(110%); +} +[dir] .q-footer--bordered { + border-top: 1px solid rgba(0,0,0,0.12); +} +.q-footer .q-layout__shadow { + top: -10px; +} +.q-footer .q-layout__shadow:after { + top: 10px; +} +.q-header, +.q-footer { + z-index: 2000; +} +.q-drawer { + position: absolute; + top: 0; + bottom: 0; + z-index: 1000; + contain: layout size; + contain: layout size style; +} +.q-drawer--on-top { + z-index: 3000; +} +[dir=ltr] .q-drawer--left { + left: 0; + transform: translateX(-100%); +} +[dir=rtl] .q-drawer--left { + right: 0; + transform: translateX(100%); +} +[dir=ltr] .q-drawer--left.q-drawer--bordered { + border-right: 1px solid rgba(0,0,0,0.12); +} +[dir=rtl] .q-drawer--left.q-drawer--bordered { + border-left: 1px solid rgba(0,0,0,0.12); +} +[dir=ltr] .q-drawer--left .q-layout__shadow { + left: 10px; + right: -10px; +} +[dir=rtl] .q-drawer--left .q-layout__shadow { + right: 10px; + left: -10px; +} +[dir=ltr] .q-drawer--left .q-layout__shadow:after { + right: 10px; +} +[dir=rtl] .q-drawer--left .q-layout__shadow:after { + left: 10px; +} +[dir=ltr] .q-drawer--right { + right: 0; + transform: translateX(100%); +} +[dir=rtl] .q-drawer--right { + left: 0; + transform: translateX(-100%); +} +[dir=ltr] .q-drawer--right.q-drawer--bordered { + border-left: 1px solid rgba(0,0,0,0.12); +} +[dir=rtl] .q-drawer--right.q-drawer--bordered { + border-right: 1px solid rgba(0,0,0,0.12); +} +[dir=ltr] .q-drawer--right .q-layout__shadow { + left: -10px; +} +[dir=rtl] .q-drawer--right .q-layout__shadow { + right: -10px; +} +[dir=ltr] .q-drawer--right .q-layout__shadow:after { + left: 10px; +} +[dir=rtl] .q-drawer--right .q-layout__shadow:after { + right: 10px; +} +[dir] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini { + padding: 0 !important; +} +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item, +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section { + justify-content: center; + min-width: 0; +} +[dir] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item, [dir] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section { + text-align: center; +} +[dir=ltr] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item, [dir=ltr] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section { + padding-left: 0; + padding-right: 0; +} +[dir=rtl] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item, [dir=rtl] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section { + padding-right: 0; + padding-left: 0; +} +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__label, +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--main, +.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--side ~ .q-item__section--side { + display: none; +} +.q-drawer--mini .q-mini-drawer-hide, +.q-drawer--mini .q-expansion-item__content { + display: none; +} +.q-drawer--mini-animate .q-drawer__content { + overflow-x: hidden; + white-space: nowrap; +} +.q-drawer--standard .q-mini-drawer-only { + display: none; +} +.q-drawer--mobile .q-mini-drawer-only, +.q-drawer--mobile .q-mini-drawer-hide { + display: none; +} +.q-drawer__backdrop { + z-index: 2999 !important; + will-change: opacity; + opacity: 0; +} +[dir] .q-drawer__backdrop { + background: #000; + background: var(--q-color-backdrop-background); +} +.q-drawer__opener { + z-index: 2001; + height: 100%; + width: 15px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.q-layout, +.q-header, +.q-footer, +.q-page { + position: relative; +} +.q-page-sticky--shrink { + pointer-events: none; +} +.q-page-sticky--shrink > div { + display: inline-block; + pointer-events: auto; +} +body.q-ios-padding .q-layout--standard .q-header > .q-toolbar:nth-child(1), +body.q-ios-padding .q-layout--standard .q-header > .q-tabs:nth-child(1) .q-tabs-head, +body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content { + min-height: 70px; + min-height: calc(env(safe-area-inset-top) + 50px); +} +[dir] body.q-ios-padding .q-layout--standard .q-header > .q-toolbar:nth-child(1), [dir] body.q-ios-padding .q-layout--standard .q-header > .q-tabs:nth-child(1) .q-tabs-head, [dir] body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content { + padding-top: 20px; + padding-top: env(safe-area-inset-top); +} +body.q-ios-padding .q-layout--standard .q-footer > .q-toolbar:last-child, +body.q-ios-padding .q-layout--standard .q-footer > .q-tabs:last-child .q-tabs-head, +body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content { + min-height: calc(env(safe-area-inset-bottom) + 50px); +} +[dir] body.q-ios-padding .q-layout--standard .q-footer > .q-toolbar:last-child, [dir] body.q-ios-padding .q-layout--standard .q-footer > .q-tabs:last-child .q-tabs-head, [dir] body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content { + padding-bottom: env(safe-area-inset-bottom); +} +.q-body--layout-animate .q-drawer__backdrop { + transition: opacity 0.12s !important; +} +.q-body--layout-animate .q-drawer { + transition: transform 0.12s, width 0.12s, top 0.12s, bottom 0.12s !important; +} +[dir=ltr] .q-body--layout-animate .q-layout__section--marginal { + transition: transform 0.12s, left 0.12s, right 0.12s !important; +} +[dir=rtl] .q-body--layout-animate .q-layout__section--marginal { + transition: transform 0.12s, right 0.12s, left 0.12s !important; +} +[dir=ltr] .q-body--layout-animate .q-page-container { + transition: padding-top 0.12s, padding-right 0.12s, padding-bottom 0.12s, padding-left 0.12s !important; +} +[dir=rtl] .q-body--layout-animate .q-page-container { + transition: padding-top 0.12s, padding-left 0.12s, padding-bottom 0.12s, padding-right 0.12s !important; +} +[dir=ltr] .q-body--layout-animate .q-page-sticky { + transition: transform 0.12s, left 0.12s, right 0.12s, top 0.12s, bottom 0.12s !important; +} +[dir=rtl] .q-body--layout-animate .q-page-sticky { + transition: transform 0.12s, right 0.12s, left 0.12s, top 0.12s, bottom 0.12s !important; +} +body:not(.q-body--layout-animate) .q-layout--prevent-focus { + visibility: hidden; +} +.q-body--drawer-toggle { + overflow-x: hidden !important; +} +@media (max-width: 599.98px) { + [dir] .q-layout-padding { + padding: 8px; + } +} +@media (min-width: 600px) and (max-width: 1439.98px) { + [dir] .q-layout-padding { + padding: 16px; + } +} +@media (min-width: 1440px) { + [dir] .q-layout-padding { + padding: 24px; + } +} +[dir] body.body--dark .q-header, [dir] body.body--dark .q-footer, [dir] body.body--dark .q-drawer { + border-color: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + [dir] body.body--dark-auto .q-header, [dir] body.body--dark-auto .q-footer, [dir] body.body--dark-auto .q-drawer { + border-color: rgba(255,255,255,0.28); + } +} +body.platform-ios .q-layout--containerized { + position: unset !important; +} +.q-linear-progress { + position: relative; + width: 100%; + overflow: hidden; + font-size: 4px; + height: 1em; + color: #1976d2; + color: var(--q-color-primary); +} +[dir] .q-linear-progress { + transform: scale3d(1, 1, 1); +} +[dir=ltr] .q-linear-progress__model, [dir=ltr] .q-linear-progress__track { + transform-origin: 0 0; +} +[dir=rtl] .q-linear-progress__model, [dir=rtl] .q-linear-progress__track { + transform-origin: 100% 0; +} +.q-linear-progress__model--with-transition, +.q-linear-progress__track--with-transition { + transition: transform 0.3s; +} +[dir=ltr] .q-linear-progress--reverse .q-linear-progress__model, [dir=ltr] .q-linear-progress--reverse .q-linear-progress__track { + transform-origin: 0 100%; +} +[dir=rtl] .q-linear-progress--reverse .q-linear-progress__model, [dir=rtl] .q-linear-progress--reverse .q-linear-progress__track { + transform-origin: 100% 100%; +} +[dir] .q-linear-progress__model--determinate { + background: currentColor; +} +.q-linear-progress__model--indeterminate, +.q-linear-progress__model--query { + transition: none; +} +.q-linear-progress__model--indeterminate:before, +.q-linear-progress__model--query:before, +.q-linear-progress__model--indeterminate:after, +.q-linear-progress__model--query:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; +} +[dir] .q-linear-progress__model--indeterminate:before, [dir] .q-linear-progress__model--query:before, [dir] .q-linear-progress__model--indeterminate:after, [dir] .q-linear-progress__model--query:after { + background: currentColor; +} +[dir=ltr] .q-linear-progress__model--indeterminate:before, [dir=ltr] .q-linear-progress__model--query:before, [dir=ltr] .q-linear-progress__model--indeterminate:after, [dir=ltr] .q-linear-progress__model--query:after { + right: 0; + left: 0; + transform-origin: 0 0; +} +[dir=rtl] .q-linear-progress__model--indeterminate:before, [dir=rtl] .q-linear-progress__model--query:before, [dir=rtl] .q-linear-progress__model--indeterminate:after, [dir=rtl] .q-linear-progress__model--query:after { + left: 0; + right: 0; + transform-origin: 100% 0; +} +[dir=ltr] .q-linear-progress__model--indeterminate:before, [dir=ltr] .q-linear-progress__model--query:before { + -webkit-animation: q-linear-progress--indeterminate-ltr 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; + animation: q-linear-progress--indeterminate-ltr 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; +} +[dir=rtl] .q-linear-progress__model--indeterminate:before, [dir=rtl] .q-linear-progress__model--query:before { + -webkit-animation: q-linear-progress--indeterminate-rtl 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; + animation: q-linear-progress--indeterminate-rtl 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite; +} +[dir=ltr] .q-linear-progress__model--indeterminate:after, [dir=ltr] .q-linear-progress__model--query:after { + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1); + -webkit-animation: q-linear-progress--indeterminate-short-ltr 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + animation: q-linear-progress--indeterminate-short-ltr 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + -webkit-animation-delay: 1.15s; + animation-delay: 1.15s; +} +[dir=rtl] .q-linear-progress__model--indeterminate:after, [dir=rtl] .q-linear-progress__model--query:after { + transform: translate3d(101%, 0, 0) scale3d(1, 1, 1); + -webkit-animation: q-linear-progress--indeterminate-short-rtl 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + animation: q-linear-progress--indeterminate-short-rtl 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite; + -webkit-animation-delay: 1.15s; + animation-delay: 1.15s; +} +.q-linear-progress__track { + opacity: 0.4; +} +[dir] .q-linear-progress__track--light, [dir] .q-linear-progress__track--dark-auto { + background: rgba(0,0,0,0.26); +} +[dir] .q-linear-progress__track--dark { + background: rgba(255,255,255,0.6); +} +.q-linear-progress__stripe { + transition: width 0.3s; +} +[dir] .q-linear-progress__stripe { + background-size: 40px 40px !important; +} +[dir=ltr] .q-linear-progress__stripe { + background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, rgba(255,255,255,0) 75%, rgba(255,255,255,0)) !important; +} +[dir=rtl] .q-linear-progress__stripe { + background-image: linear-gradient(-45deg, rgba(255,255,255,0.15) 25%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, rgba(255,255,255,0) 75%, rgba(255,255,255,0)) !important; +} +@media (prefers-color-scheme: dark) { + [dir] .q-linear-progress__track--dark-auto { + background: rgba(255,255,255,0.6); + } +} +.q-menu { + display: inline-block; + max-width: 95vw; + max-height: 65vh; + outline: 0; + opacity: 0; +} +[dir] .q-menu { + border-radius: 4px; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + background: #fff; +} +.q-menu__container { + position: fixed; + z-index: 6000; + contain: layout; + contain: layout style; +} +[dir] .q-menu--square { + border-radius: 0; +} +.q-option-group--inline > div { + display: inline-block; +} +.q-pagination input { + -moz-appearance: textfield; +} +[dir] .q-pagination input { + text-align: center; +} +.q-pagination input::-webkit-outer-spin-button, +.q-pagination input::-webkit-inner-spin-button { + -webkit-appearance: none; +} +[dir] .q-pagination input::-webkit-outer-spin-button, [dir] .q-pagination input::-webkit-inner-spin-button { + margin: 0; +} +.q-pagination__content { + --q-pagination-gutter-parent: -2px; + --q-pagination-gutter-child: 2px; +} +[dir] .q-pagination__content { + margin-top: var(--q-pagination-gutter-parent); +} +[dir=ltr] .q-pagination__content { + margin-left: var(--q-pagination-gutter-parent); +} +[dir=rtl] .q-pagination__content { + margin-right: var(--q-pagination-gutter-parent); +} +[dir] .q-pagination__content > .q-btn, [dir] .q-pagination__content > .q-input, [dir] .q-pagination__middle > .q-btn { + margin-top: var(--q-pagination-gutter-child); +} +[dir=ltr] .q-pagination__content > .q-btn, [dir=ltr] .q-pagination__content > .q-input, [dir=ltr] .q-pagination__middle > .q-btn { + margin-left: var(--q-pagination-gutter-child); +} +[dir=rtl] .q-pagination__content > .q-btn, [dir=rtl] .q-pagination__content > .q-input, [dir=rtl] .q-pagination__middle > .q-btn { + margin-right: var(--q-pagination-gutter-child); +} +.q-parallax { + position: relative; + width: 100%; + overflow: hidden; +} +[dir] .q-parallax { + border-radius: inherit; +} +.q-parallax__media > img, +.q-parallax__media > video { + position: absolute; + left: 50% /* rtl:ignore */; + bottom: 0; + min-width: 100%; + min-height: 100%; + will-change: transform; + display: none; +} +[dir] .q-popup-edit { + padding: 8px 16px; +} +[dir] .q-popup-edit__buttons { + margin-top: 8px; +} +[dir=ltr] .q-popup-edit__buttons .q-btn + .q-btn { + margin-left: 8px; +} +[dir=rtl] .q-popup-edit__buttons .q-btn + .q-btn { + margin-right: 8px; +} +.q-pull-to-refresh { + position: relative; +} +.q-pull-to-refresh__puller { + width: 40px; + height: 40px; + color: #1976d2; + color: var(--q-color-primary); +} +[dir] .q-pull-to-refresh__puller { + border-radius: 50%; + background: #fff; + background: var(--q-color-light-page); + box-shadow: 0 0 4px 0 rgba(0,0,0,0.3); +} +.q-pull-to-refresh__puller--animating { + transition: transform 0.3s, opacity 0.3s; +} +.q-radio { + vertical-align: middle; +} +.q-radio__native { + width: 1px; + height: 1px; +} +.q-radio__bg, +.q-radio__icon-container { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.q-radio__bg { + top: 25%; + width: 50%; + height: 50%; + -webkit-print-color-adjust: exact; +} +[dir=ltr] .q-radio__bg { + left: 25%; +} +[dir=rtl] .q-radio__bg { + right: 25%; +} +.q-radio__bg path { + fill: currentColor; +} +.q-radio__icon { + color: currentColor; + font-size: 0.5em; +} +.q-radio__check { + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1) 0ms; +} +[dir] .q-radio__check { + transform-origin: 50% 50%; + transform: scale3d(0, 0, 1); +} +.q-radio__inner { + font-size: 40px; + width: 1em; + min-width: 1em; + height: 1em; + outline: 0; + color: rgba(0,0,0,0.54); +} +[dir] .q-radio__inner { + border-radius: 50%; +} +.q-radio__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); +} +[dir] .q-radio__inner--truthy .q-radio__check { + transform: scale3d(1, 1, 1); +} +.q-radio.disabled { + opacity: 0.75 !important; +} +.q-radio--dark .q-radio__inner { + color: rgba(255,255,255,0.7); +} +.q-radio--dark .q-radio__inner:before { + opacity: 0.32 !important; +} +.q-radio--dark .q-radio__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); +} +.q-radio--dense .q-radio__inner { + width: 0.5em; + min-width: 0.5em; + height: 0.5em; +} +.q-radio--dense .q-radio__bg { + top: 0; + width: 100%; + height: 100%; +} +[dir=ltr] .q-radio--dense .q-radio__bg { + left: 0; +} +[dir=rtl] .q-radio--dense .q-radio__bg { + right: 0; +} +[dir=ltr] .q-radio--dense .q-radio__label { + padding-left: 0.5em; +} +[dir=rtl] .q-radio--dense .q-radio__label { + padding-right: 0.5em; +} +[dir=ltr] .q-radio--dense.reverse .q-radio__label { + padding-left: 0; + padding-right: 0.5em; +} +[dir=rtl] .q-radio--dense.reverse .q-radio__label { + padding-right: 0; + padding-left: 0.5em; +} +body.desktop .q-radio:not(.disabled) .q-radio__inner:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + opacity: 0.12; + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1) 0ms; +} +[dir] body.desktop .q-radio:not(.disabled) .q-radio__inner:before { + border-radius: 50%; + background: currentColor; + transform: scale3d(0, 0, 1); +} +[dir=ltr] body.desktop .q-radio:not(.disabled) .q-radio__inner:before { + right: 0; + left: 0; +} +[dir=rtl] body.desktop .q-radio:not(.disabled) .q-radio__inner:before { + left: 0; + right: 0; +} +[dir] body.desktop .q-radio:not(.disabled):focus .q-radio__inner:before, [dir] body.desktop .q-radio:not(.disabled):hover .q-radio__inner:before { + transform: scale3d(1, 1, 1); +} +[dir] body.desktop .q-radio--dense:not(.disabled):focus .q-radio__inner:before, [dir] body.desktop .q-radio--dense:not(.disabled):hover .q-radio__inner:before { + transform: scale3d(1.5, 1.5, 1); +} +@media (prefers-color-scheme: dark) { + .q-radio--dark-auto .q-radio__inner { + color: rgba(255,255,255,0.7); + } + .q-radio--dark-auto .q-radio__inner:before { + opacity: 0.32 !important; + } + .q-radio--dark-auto .q-radio__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); + } +} +.q-rating { + color: #ffeb3b; + vertical-align: middle; +} +.q-rating__icon-container { + height: 1em; + outline: 0; +} +[dir=ltr] .q-rating__icon-container + .q-rating__icon-container { + margin-left: 2px; +} +[dir=rtl] .q-rating__icon-container + .q-rating__icon-container { + margin-right: 2px; +} +.q-rating__icon { + color: currentColor; + position: relative; + opacity: 0.4; + transition: transform 0.2s ease-in, opacity 0.2s ease-in; +} +[dir] .q-rating__icon { + text-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); +} +[dir] .q-rating__icon--hovered { + transform: scale(1.3); +} +.q-rating__icon--active { + opacity: 1; +} +.q-rating__icon--exselected { + opacity: 0.7; +} +.q-rating--no-dimming .q-rating__icon { + opacity: 1; +} +[dir] .q-rating--editable .q-rating__icon-container { + cursor: pointer; +} +.q-responsive { + position: relative; + max-width: 100%; + max-height: 100%; +} +.q-responsive__filler { + width: inherit; + max-width: inherit; + height: inherit; + max-height: inherit; +} +[dir] .q-responsive__content { + border-radius: inherit; +} +.q-responsive__content > * { + width: 100% !important; + height: 100% !important; + max-height: 100% !important; + max-width: 100% !important; +} +.q-scrollarea { + position: relative; + contain: strict; +} +.q-scrollarea__bar, +.q-scrollarea__thumb { + opacity: 0.2; + transition: opacity 0.3s; + will-change: opacity; +} +[dir] .q-scrollarea__bar, [dir] .q-scrollarea__thumb { + cursor: -webkit-grab; + cursor: grab; +} +.q-scrollarea__bar--v, +.q-scrollarea__thumb--v { + width: 10px; +} +[dir=ltr] .q-scrollarea__bar--v, [dir=ltr] .q-scrollarea__thumb--v { + right: 0; +} +[dir=rtl] .q-scrollarea__bar--v, [dir=rtl] .q-scrollarea__thumb--v { + left: 0; +} +.q-scrollarea__bar--h, +.q-scrollarea__thumb--h { + bottom: 0; + height: 10px; +} +.q-scrollarea__bar--invisible, +.q-scrollarea__thumb--invisible { + opacity: 0 !important; + pointer-events: none; +} +[dir] .q-scrollarea__thumb { + background: #121212; + background: var(--q-color-dark-page); +} +.q-scrollarea__thumb:hover { + opacity: 0.3; +} +.q-scrollarea__thumb:active { + opacity: 0.5; +} +.q-scrollarea__content { + min-height: 100%; + min-width: 100%; +} +[dir] .q-scrollarea--dark .q-scrollarea__thumb { + background: #fff; + background: var(--q-color-dark-text); +} +@media (prefers-color-scheme: dark) { + [dir] .q-scrollarea--dark-auto .q-scrollarea__thumb { + background: #fff; + background: var(--q-color-dark-text); + } +} +[dir] .q-select--without-input .q-field__control { + cursor: pointer; +} +[dir] .q-select--with-input .q-field__control { + cursor: text; +} +[dir] .q-select--with-chips .q-field__input { + margin: 7px 0; +} +[dir] .q-select--with-chips.q-field--labeled .q-field__native { + margin-top: -6px; + padding-bottom: 0; +} +.q-select--with-chips.q-field--dense .q-chip--dense { + height: 20px; +} +[dir] .q-select--with-chips.q-field--dense .q-chip--dense { + margin: 1px 4px; +} +[dir] .q-select--with-chips.q-field--dense .q-field__input { + margin: 0; +} +[dir] .q-select--with-chips.q-field--dense.q-field--labeled .q-field__native { + margin-top: 0; +} +.q-select .q-field__input { + min-width: 50px !important; +} +[dir] .q-select .q-field__input { + cursor: text; +} +[dir=ltr] .q-select .q-field__input--padding { + padding-left: 4px; +} +[dir=rtl] .q-select .q-field__input--padding { + padding-right: 4px; +} +.q-select__focus-target, +.q-select__autocomplete-input { + position: absolute; + outline: 0 !important; + width: 1px; + height: 1px; + opacity: 0; +} +[dir] .q-select__focus-target, [dir] .q-select__autocomplete-input { + padding: 0; + border: 0; +} +.q-select__dropdown-icon { + transition: transform 0.28s; +} +[dir] .q-select__dropdown-icon { + cursor: pointer; +} +[dir] .q-select__close-icon { + cursor: pointer; +} +[dir=ltr] .q-select__close-icon:not(:last-child) { + margin-right: 12px; +} +[dir=rtl] .q-select__close-icon:not(:last-child) { + margin-left: 12px; +} +[dir] .q-select.q-field--readonly .q-field__control, [dir] .q-select.q-field--readonly .q-select__dropdown-icon { + cursor: default; +} +.q-select__dialog { + width: 90vw !important; + max-width: 90vw !important; + max-height: calc(100vh - 70px) !important; + display: flex; + flex-direction: column; +} +.q-select__dialog > .scroll { + position: relative; +} +[dir] .q-select__dialog > .scroll { + background: inherit; +} +body.platform-android.native-mobile .q-dialog__inner--top .q-select__dialog { + max-height: calc(100vh - 24px) !important; +} +body.platform-android:not(.native-mobile) .q-select__dialog { + max-height: calc(100vh - 108px) !important; +} +body.platform-android:not(.native-mobile) .q-dialog__inner--top .q-select__dialog { + max-height: calc(100vh - 62px) !important; +} +[dir] body.platform-ios.native-mobile .q-dialog__inner--top > div { + border-radius: 4px; +} +body.platform-ios.native-mobile .q-dialog__inner--top .q-select__dialog--focused { + max-height: 47vh !important; +} +body.platform-ios:not(.native-mobile) .q-select__dialog { + max-height: calc(100vh - 164px) !important; +} +body.platform-ios:not(.native-mobile) .q-dialog__inner--top .q-select__dialog--focused { + max-height: 48vh !important; +} +.q-separator { + transition: background 0.3s, opacity 0.3s; + flex-shrink: 0; +} +[dir] .q-separator { + border: 0; + background: rgba(0,0,0,0.12); + margin: 0; +} +[dir] .q-separator--dark { + background: rgba(255,255,255,0.28); +} +.q-separator--horizontal { + display: block; + height: 1px; +} +[dir=ltr] .q-separator--horizontal-inset { + margin-left: 16px; + margin-right: 16px; +} +[dir=rtl] .q-separator--horizontal-inset { + margin-right: 16px; + margin-left: 16px; +} +[dir=ltr] .q-separator--horizontal-item-inset { + margin-left: 72px; + margin-right: 0; +} +[dir=rtl] .q-separator--horizontal-item-inset { + margin-right: 72px; + margin-left: 0; +} +[dir=ltr] .q-separator--horizontal-item-thumbnail-inset { + margin-left: 116px; + margin-right: 0; +} +[dir=rtl] .q-separator--horizontal-item-thumbnail-inset { + margin-right: 116px; + margin-left: 0; +} +.q-separator--vertical { + width: 1px; + height: auto; + align-self: stretch; +} +[dir] .q-separator--vertical-inset { + margin-top: 8px; + margin-bottom: 8px; +} +@media (prefers-color-scheme: dark) { + [dir] .q-separator--dark-auto { + background: rgba(255,255,255,0.28); + } +} +.q-skeleton { + box-sizing: border-box; +} +[dir] .q-skeleton { + background: rgba(0,0,0,0.12); + border-radius: 4px; +} +[dir] .q-skeleton--anim { + cursor: wait; +} +.q-skeleton:before { + content: '\00a0'; +} +[dir] .q-skeleton--type-text { + transform: scale(1, 0.5); +} +.q-skeleton--type-circle, +.q-skeleton--type-QAvatar { + height: 48px; + width: 48px; +} +[dir] .q-skeleton--type-circle, [dir] .q-skeleton--type-QAvatar { + border-radius: 50%; +} +.q-skeleton--type-QBtn { + width: 90px; + height: 36px; +} +.q-skeleton--type-QBadge { + width: 70px; + height: 16px; +} +.q-skeleton--type-QChip { + width: 90px; + height: 28px; +} +[dir] .q-skeleton--type-QChip { + border-radius: 16px; +} +.q-skeleton--type-QToolbar { + height: 50px; +} +.q-skeleton--type-QCheckbox, +.q-skeleton--type-QRadio { + width: 40px; + height: 40px; +} +[dir] .q-skeleton--type-QCheckbox, [dir] .q-skeleton--type-QRadio { + border-radius: 50%; +} +.q-skeleton--type-QToggle { + width: 56px; + height: 40px; +} +[dir] .q-skeleton--type-QToggle { + border-radius: 7px; +} +.q-skeleton--type-QSlider, +.q-skeleton--type-QRange { + height: 40px; +} +.q-skeleton--type-QInput { + height: 56px; +} +[dir] .q-skeleton--bordered { + border: 1px solid rgba(0,0,0,0.05); +} +[dir] .q-skeleton--square { + border-radius: 0; +} +[dir=ltr] .q-skeleton--anim-fade { + -webkit-animation: q-skeleton--fade 1.5s linear 0.5s infinite; + animation: q-skeleton--fade 1.5s linear 0.5s infinite; +} +[dir=rtl] .q-skeleton--anim-fade { + -webkit-animation: q-skeleton--fade 1.5s linear 0.5s infinite; + animation: q-skeleton--fade 1.5s linear 0.5s infinite; +} +[dir=ltr] .q-skeleton--anim-pulse { + -webkit-animation: q-skeleton--pulse 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse 1.5s ease-in-out 0.5s infinite; +} +[dir=rtl] .q-skeleton--anim-pulse { + -webkit-animation: q-skeleton--pulse 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse 1.5s ease-in-out 0.5s infinite; +} +[dir=ltr] .q-skeleton--anim-pulse-x { + -webkit-animation: q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite; +} +[dir=rtl] .q-skeleton--anim-pulse-x { + -webkit-animation: q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite; +} +[dir=ltr] .q-skeleton--anim-pulse-y { + -webkit-animation: q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite; +} +[dir=rtl] .q-skeleton--anim-pulse-y { + -webkit-animation: q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite; + animation: q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite; +} +.q-skeleton--anim-wave, +.q-skeleton--anim-blink, +.q-skeleton--anim-pop { + position: relative; + overflow: hidden; + z-index: 1; +} +.q-skeleton--anim-wave:after, +.q-skeleton--anim-blink:after, +.q-skeleton--anim-pop:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + z-index: 0; +} +[dir=ltr] .q-skeleton--anim-wave:after, [dir=ltr] .q-skeleton--anim-blink:after, [dir=ltr] .q-skeleton--anim-pop:after { + right: 0; + left: 0; +} +[dir=rtl] .q-skeleton--anim-wave:after, [dir=rtl] .q-skeleton--anim-blink:after, [dir=rtl] .q-skeleton--anim-pop:after { + left: 0; + right: 0; +} +[dir] .q-skeleton--anim-blink:after { + background: rgba(255,255,255,0.7); +} +[dir=ltr] .q-skeleton--anim-blink:after { + -webkit-animation: q-skeleton--fade 1.5s linear 0.5s infinite; + animation: q-skeleton--fade 1.5s linear 0.5s infinite; +} +[dir=rtl] .q-skeleton--anim-blink:after { + -webkit-animation: q-skeleton--fade 1.5s linear 0.5s infinite; + animation: q-skeleton--fade 1.5s linear 0.5s infinite; +} +[dir=ltr] .q-skeleton--anim-wave:after { + background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + -webkit-animation: q-skeleton--wave-ltr 1.5s linear 0.5s infinite; + animation: q-skeleton--wave-ltr 1.5s linear 0.5s infinite; +} +[dir=rtl] .q-skeleton--anim-wave:after { + background: linear-gradient(-90deg, rgba(255,255,255,0), rgba(255,255,255,0.5), rgba(255,255,255,0)); + -webkit-animation: q-skeleton--wave-rtl 1.5s linear 0.5s infinite; + animation: q-skeleton--wave-rtl 1.5s linear 0.5s infinite; +} +[dir] .q-skeleton--dark { + background: rgba(255,255,255,0.05); +} +[dir] .q-skeleton--dark.q-skeleton--bordered { + border: 1px solid rgba(255,255,255,0.25); +} +[dir=ltr] .q-skeleton--dark.q-skeleton--anim-wave:after { + background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,0.1), rgba(255,255,255,0)); +} +[dir=rtl] .q-skeleton--dark.q-skeleton--anim-wave:after { + background: linear-gradient(-90deg, rgba(255,255,255,0), rgba(255,255,255,0.1), rgba(255,255,255,0)); +} +[dir] .q-skeleton--dark.q-skeleton--anim-blink:after { + background: rgba(255,255,255,0.2); +} +@media (prefers-color-scheme: dark) { + [dir] .q-skeleton--dark-auto { + background: rgba(255,255,255,0.05); + } + [dir] .q-skeleton--dark-auto.q-skeleton--bordered { + border: 1px solid rgba(255,255,255,0.25); + } + [dir=ltr] .q-skeleton--dark-auto.q-skeleton--anim-wave:after { + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent); + } + [dir=rtl] .q-skeleton--dark-auto.q-skeleton--anim-wave:after { + background: linear-gradient(-90deg, transparent, rgba(255,255,255,0.1), transparent); + } + [dir] .q-skeleton--dark-auto.q-skeleton--anim-blink:after { + background: rgba(255,255,255,0.2); + } +} +.q-slide-item { + position: relative; +} +.q-slide-item__left, +.q-slide-item__right, +.q-slide-item__top, +.q-slide-item__bottom { + visibility: hidden; + font-size: 14px; + color: #fff; + color: var(--q-color-dark-text); +} +.q-slide-item__left .q-icon, +.q-slide-item__right .q-icon, +.q-slide-item__top .q-icon, +.q-slide-item__bottom .q-icon { + font-size: 1.714em; +} +[dir] .q-slide-item__left { + background: #4caf50; + padding: 8px 16px; +} +[dir=ltr] .q-slide-item__left > div { + transform-origin: left center; +} +[dir=rtl] .q-slide-item__left > div { + transform-origin: right center; +} +[dir] .q-slide-item__right { + background: #ff9800; + padding: 8px 16px; +} +[dir=ltr] .q-slide-item__right > div { + transform-origin: right center; +} +[dir=rtl] .q-slide-item__right > div { + transform-origin: left center; +} +[dir] .q-slide-item__top { + background: #2196f3; + padding: 16px 8px; +} +[dir] .q-slide-item__top > div { + transform-origin: top center; +} +[dir] .q-slide-item__bottom { + background: #9c27b0; + padding: 16px 8px; +} +[dir] .q-slide-item__bottom > div { + transform-origin: bottom center; +} +.q-slide-item__content { + transition: transform 0.2s ease-in; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +[dir] .q-slide-item__content { + background: inherit; + cursor: pointer; +} +.q-slider { + position: relative; +} +.q-slider--h { + width: 100%; +} +.q-slider--v { + height: 200px; +} +[dir] .q-slider--editable .q-slider__track-container { + cursor: -webkit-grab; + cursor: grab; +} +.q-slider__track-container { + outline: 0; +} +.q-slider__track-container--h { + width: 100%; +} +[dir] .q-slider__track-container--h { + padding: 12px 0; +} +.q-slider__track-container--h .q-slider__selection { + will-change: width, left; +} +.q-slider__track-container--v { + height: 100%; +} +[dir] .q-slider__track-container--v { + padding: 0 12px; +} +.q-slider__track-container--v .q-slider__selection { + will-change: height, top; +} +.q-slider__track { + color: #1976d2; + color: var(--q-color-primary); + width: inherit; + height: inherit; +} +[dir] .q-slider__track { + background: rgba(0,0,0,0.1); + border-radius: 4px; +} +.q-slider__inner { + width: 100%; + height: 100%; +} +[dir] .q-slider__inner { + background: rgba(0,0,0,0.1); + border-radius: inherit; +} +.q-slider__selection { + width: 100%; + height: 100%; +} +[dir] .q-slider__selection { + background: currentColor; + border-radius: inherit; +} +.q-slider__markers { + color: rgba(0,0,0,0.3); + width: 100%; + height: 100%; +} +[dir] .q-slider__markers { + border-radius: inherit; +} +.q-slider__markers:after { + content: ''; + position: absolute; +} +[dir] .q-slider__markers:after { + background: currentColor; +} +[dir=ltr] .q-slider__markers--h { + background-image: repeating-linear-gradient(to right, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)); +} +[dir=rtl] .q-slider__markers--h { + background-image: repeating-linear-gradient(to left, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)); +} +.q-slider__markers--h:after { + height: 100%; + width: 2px; + top: 0; +} +[dir=ltr] .q-slider__markers--h:after { + right: 0; +} +[dir=rtl] .q-slider__markers--h:after { + left: 0; +} +[dir] .q-slider__markers--v { + background-image: repeating-linear-gradient(to bottom, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)); +} +.q-slider__markers--v:after { + width: 100%; + height: 2px; + bottom: 0; +} +[dir=ltr] .q-slider__markers--v:after { + left: 0; +} +[dir=rtl] .q-slider__markers--v:after { + right: 0; +} +.q-slider__marker-labels-container { + position: relative; + width: 100%; + height: 100%; + min-height: 24px; + min-width: 24px; +} +.q-slider__marker-labels { + position: absolute; +} +.q-slider__marker-labels--h-standard { + top: 0; +} +.q-slider__marker-labels--h-switched { + bottom: 0; +} +.q-slider__marker-labels--h-ltr { + transform: translateX(-50%) /* rtl:ignore */; +} +.q-slider__marker-labels--h-rtl { + transform: translateX(50%) /* rtl:ignore */; +} +[dir=ltr] .q-slider__marker-labels--v-standard { + left: 4px; +} +[dir=rtl] .q-slider__marker-labels--v-standard { + right: 4px; +} +[dir=ltr] .q-slider__marker-labels--v-switched { + right: 4px; +} +[dir=rtl] .q-slider__marker-labels--v-switched { + left: 4px; +} +.q-slider__marker-labels--v-ltr { + transform: translateY(-50%) /* rtl:ignore */; +} +.q-slider__marker-labels--v-rtl { + transform: translateY(50%) /* rtl:ignore */; +} +.q-slider__thumb { + z-index: 1; + outline: 0; + color: #1976d2; + color: var(--q-color-primary); + transition: transform 0.18s ease-out, fill 0.18s ease-out, stroke 0.18s ease-out; +} +.q-slider__thumb.q-slider--focus { + opacity: 1 !important; +} +.q-slider__thumb--wrong-value { + opacity: 0; +} +.q-slider__thumb--h { + top: 50%; + will-change: left; +} +.q-slider__thumb--h-ltr { + transform: translate(-50%, -50%) /* rtl:ignore */; +} +.q-slider__thumb--h-rtl { + transform: translate(50%, -50%) /* rtl:ignore */; +} +.q-slider__thumb--v { + left: 50% /* rtl:ignore */; + will-change: top; +} +.q-slider__thumb--v-ltr { + transform: translate(-50%, -50%) /* rtl:ignore */; +} +.q-slider__thumb--v-rtl { + transform: translate(-50%, 50%) /* rtl:ignore */; +} +.q-slider__thumb-shape { + top: 0; + stroke-width: 3.5; + stroke: currentColor; + transition: transform 0.28s; +} +[dir=ltr] .q-slider__thumb-shape { + left: 0; +} +[dir=rtl] .q-slider__thumb-shape { + right: 0; +} +.q-slider__thumb-shape path { + stroke: currentColor; + fill: currentColor; +} +.q-slider__focus-ring { + opacity: 0; + transition: transform 266.67ms ease-out, opacity 266.67ms ease-out, background-color 266.67ms ease-out; +} +[dir] .q-slider__focus-ring { + border-radius: 50%; + transition-delay: 0.14s; +} +.q-slider__pin { + opacity: 0; + white-space: nowrap; + transition: opacity 0.28s ease-out; +} +[dir] .q-slider__pin { + transition-delay: 0.14s; +} +.q-slider__pin:before { + content: ''; + width: 0; + height: 0; + position: absolute; +} +[dir=ltr] .q-slider__pin--h:before { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + left: 50%; + transform: translateX(-50%); +} +[dir=rtl] .q-slider__pin--h:before { + border-right: 6px solid transparent; + border-left: 6px solid transparent; + right: 50%; + transform: translateX(50%); +} +.q-slider__pin--h-standard { + bottom: 100%; +} +.q-slider__pin--h-standard:before { + bottom: 2px; +} +[dir] .q-slider__pin--h-standard:before { + border-top: 6px solid currentColor; +} +.q-slider__pin--h-switched { + top: 100%; +} +.q-slider__pin--h-switched:before { + top: 2px; +} +[dir] .q-slider__pin--h-switched:before { + border-bottom: 6px solid currentColor; +} +.q-slider__pin--v { + top: 0; +} +.q-slider__pin--v:before { + top: 50%; +} +[dir] .q-slider__pin--v:before { + transform: translateY(-50%); + border-top: 6px solid transparent; + border-bottom: 6px solid transparent; +} +[dir=ltr] .q-slider__pin--v-standard { + left: 100%; +} +[dir=rtl] .q-slider__pin--v-standard { + right: 100%; +} +[dir=ltr] .q-slider__pin--v-standard:before { + left: 2px; + border-right: 6px solid currentColor; +} +[dir=rtl] .q-slider__pin--v-standard:before { + right: 2px; + border-left: 6px solid currentColor; +} +[dir=ltr] .q-slider__pin--v-switched { + right: 100%; +} +[dir=rtl] .q-slider__pin--v-switched { + left: 100%; +} +[dir=ltr] .q-slider__pin--v-switched:before { + right: 2px; + border-left: 6px solid currentColor; +} +[dir=rtl] .q-slider__pin--v-switched:before { + left: 2px; + border-right: 6px solid currentColor; +} +.q-slider__label { + z-index: 1; + white-space: nowrap; + position: absolute; +} +[dir=ltr] .q-slider__label--h { + left: 50%; + transform: translateX(-50%); +} +[dir=rtl] .q-slider__label--h { + right: 50%; + transform: translateX(50%); +} +.q-slider__label--h-standard { + bottom: 7px; +} +.q-slider__label--h-switched { + top: 7px; +} +.q-slider__label--v { + top: 50%; +} +[dir] .q-slider__label--v { + transform: translateY(-50%); +} +[dir=ltr] .q-slider__label--v-standard { + left: 7px; +} +[dir=rtl] .q-slider__label--v-standard { + right: 7px; +} +[dir=ltr] .q-slider__label--v-switched { + right: 7px; +} +[dir=rtl] .q-slider__label--v-switched { + left: 7px; +} +.q-slider__text-container { + min-height: 25px; + position: relative; +} +[dir] .q-slider__text-container { + padding: 2px 8px; + border-radius: 4px; + background: currentColor; + text-align: center; +} +.q-slider__text { + color: #fff; + color: var(--q-color-dark-text); + font-size: 12px; +} +.q-slider--no-value .q-slider__thumb, +.q-slider--no-value .q-slider__inner, +.q-slider--no-value .q-slider__selection { + opacity: 0; +} +.q-slider--focus .q-slider__focus-ring, +body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__focus-ring { + opacity: 0.25; +} +[dir] .q-slider--focus .q-slider__focus-ring, [dir] body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__focus-ring { + background: currentColor; + transform: scale3d(1.55, 1.55, 1); +} +.q-slider--focus .q-slider__thumb, +.q-slider--no-value:focus-within .q-slider__thumb, +body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__thumb, +.q-slider--focus .q-slider__inner, +.q-slider--no-value:focus-within .q-slider__inner, +body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__inner, +.q-slider--focus .q-slider__selection, +.q-slider--no-value:focus-within .q-slider__selection, +body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__selection { + opacity: 1; +} +[dir=ltr] .q-slider--inactive .q-slider__thumb--h { + transition: left 0.28s, right 0.28s; +} +[dir=rtl] .q-slider--inactive .q-slider__thumb--h { + transition: right 0.28s, left 0.28s; +} +.q-slider--inactive .q-slider__thumb--v { + transition: top 0.28s, bottom 0.28s; +} +[dir=ltr] .q-slider--inactive .q-slider__selection { + transition: width 0.28s, left 0.28s, right 0.28s, height 0.28s, top 0.28s, bottom 0.28s; +} +[dir=rtl] .q-slider--inactive .q-slider__selection { + transition: width 0.28s, right 0.28s, left 0.28s, height 0.28s, top 0.28s, bottom 0.28s; +} +.q-slider--inactive .q-slider__text-container { + transition: transform 0.28s; +} +[dir] .q-slider--active { + cursor: -webkit-grabbing; + cursor: grabbing; +} +[dir] .q-slider--active .q-slider__thumb-shape { + transform: scale(1.5); +} +[dir] .q-slider--active .q-slider__focus-ring, [dir] .q-slider--active.q-slider--label .q-slider__thumb-shape { + transform: scale(0) !important; +} +body.desktop .q-slider.q-slider--enabled .q-slider__track-container:hover .q-slider__pin { + opacity: 1; +} +.q-slider--label.q-slider--active .q-slider__pin, +.q-slider--label .q-slider--focus .q-slider__pin, +.q-slider--label.q-slider--label-always .q-slider__pin { + opacity: 1; +} +[dir] .q-slider--dark .q-slider__track { + background: rgba(255,255,255,0.1); +} +[dir] .q-slider--dark .q-slider__inner { + background: rgba(255,255,255,0.1); +} +.q-slider--dark .q-slider__markers { + color: rgba(255,255,255,0.3); +} +[dir] .q-slider--dense .q-slider__track-container--h { + padding: 6px 0; +} +[dir] .q-slider--dense .q-slider__track-container--v { + padding: 0 6px; +} +@media (prefers-color-scheme: dark) { + [dir] .q-slider--dark-auto .q-slider__track { + background: rgba(255,255,255,0.1); + } + [dir] .q-slider--dark-auto .q-slider__inner { + background: rgba(255,255,255,0.1); + } + .q-slider--dark-auto .q-slider__markers { + color: rgba(255,255,255,0.3); + } +} +.q-space { + flex-grow: 1 !important; +} +.q-spinner { + vertical-align: middle; +} +[dir] .q-spinner-mat { + transform-origin: center center; +} +[dir=ltr] .q-spinner-mat { + -webkit-animation: q-spin-ltr 2s linear infinite; + animation: q-spin-ltr 2s linear infinite; +} +[dir=rtl] .q-spinner-mat { + -webkit-animation: q-spin-rtl 2s linear infinite; + animation: q-spin-rtl 2s linear infinite; +} +.q-spinner-mat .path { + stroke-dasharray: 1, 200 /* rtl:ignore */; + stroke-dashoffset: 0 /* rtl:ignore */; +} +[dir=ltr] .q-spinner-mat .path { + -webkit-animation: q-mat-dash-ltr 1.5s ease-in-out infinite; + animation: q-mat-dash-ltr 1.5s ease-in-out infinite; +} +[dir=rtl] .q-spinner-mat .path { + -webkit-animation: q-mat-dash-rtl 1.5s ease-in-out infinite; + animation: q-mat-dash-rtl 1.5s ease-in-out infinite; +} +.q-splitter__panel { + position: relative; + z-index: 0; +} +.q-splitter__panel > .q-splitter { + width: 100%; + height: 100%; +} +.q-splitter__separator { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + position: relative; + z-index: 1; +} +[dir] .q-splitter__separator { + background-color: rgba(0,0,0,0.12); +} +.q-splitter__separator-area > * { + position: absolute; + top: 50%; +} +[dir=ltr] .q-splitter__separator-area > * { + left: 50%; + transform: translate(-50%, -50%); +} +[dir=rtl] .q-splitter__separator-area > * { + right: 50%; + transform: translate(50%, -50%); +} +[dir] .q-splitter--dark .q-splitter__separator { + background-color: rgba(255,255,255,0.28); +} +.q-splitter--vertical > .q-splitter__panel { + height: 100%; +} +[dir] .q-splitter--vertical.q-splitter--active { + cursor: col-resize; +} +.q-splitter--vertical > .q-splitter__separator { + width: 1px; +} +[dir=ltr] .q-splitter--vertical > .q-splitter__separator > div { + left: -6px; + right: -6px; +} +[dir=rtl] .q-splitter--vertical > .q-splitter__separator > div { + right: -6px; + left: -6px; +} +[dir] .q-splitter--vertical.q-splitter--workable > .q-splitter__separator { + cursor: col-resize; +} +.q-splitter--horizontal > .q-splitter__panel { + width: 100%; +} +[dir] .q-splitter--horizontal.q-splitter--active { + cursor: row-resize; +} +.q-splitter--horizontal > .q-splitter__separator { + height: 1px; +} +.q-splitter--horizontal > .q-splitter__separator > div { + top: -6px; + bottom: -6px; +} +[dir] .q-splitter--horizontal.q-splitter--workable > .q-splitter__separator { + cursor: row-resize; +} +.q-splitter__before, +.q-splitter__after { + overflow: auto; +} +@media (prefers-color-scheme: dark) { + [dir] .q-splitter--dark-auto .q-splitter__separator { + background-color: rgba(255,255,255,0.28); + } +} +[dir] .q-stepper { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; +} +.q-stepper__title { + font-size: 14px; + line-height: 18px; + letter-spacing: 0.1px; +} +.q-stepper__caption { + font-size: 12px; + line-height: 14px; +} +.q-stepper__dot { + contain: layout; + font-size: 14px; + width: 24px; + min-width: 24px; + height: 24px; +} +[dir] .q-stepper__dot { + border-radius: 50%; + background: currentColor; +} +[dir=ltr] .q-stepper__dot { + margin-right: 8px; +} +[dir=rtl] .q-stepper__dot { + margin-left: 8px; +} +.q-stepper__dot span { + color: #fff; + color: var(--q-color-dark-text); +} +.q-stepper__tab { + font-size: 14px; + color: #9e9e9e; + flex-direction: row; +} +[dir] .q-stepper__tab { + padding: 8px 24px; +} +.q-stepper__tab--navigation { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +[dir] .q-stepper__tab--navigation { + cursor: pointer; +} +.q-stepper__tab--active, +.q-stepper__tab--done { + color: #1976d2; + color: var(--q-color-primary); +} +[dir] .q-stepper__tab--active .q-stepper__dot, [dir] .q-stepper__tab--done .q-stepper__dot, [dir] .q-stepper__tab--active .q-stepper__label, [dir] .q-stepper__tab--done .q-stepper__label { + text-shadow: 0 0 0 currentColor; +} +[dir] .q-stepper__tab--disabled .q-stepper__dot { + background: rgba(0,0,0,0.22); +} +.q-stepper__tab--disabled .q-stepper__label { + color: rgba(0,0,0,0.32); +} +.q-stepper__tab--error { + color: #c10015; + color: var(--q-color-negative); +} +[dir] .q-stepper__tab--error-with-icon .q-stepper__dot { + background: transparent !important; +} +.q-stepper__tab--error-with-icon .q-stepper__dot span { + color: currentColor; +} +.q-stepper__tab--error-with-icon .q-stepper__dot .q-icon { + font-size: 24px; +} +[dir=ltr] .q-stepper__header { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +[dir=rtl] .q-stepper__header { + border-top-right-radius: inherit; + border-top-left-radius: inherit; +} +[dir] .q-stepper__header--border { + border-bottom: 1px solid rgba(0,0,0,0.12); +} +.q-stepper__header--standard-labels .q-stepper__tab { + min-height: 72px; + justify-content: center; +} +.q-stepper__header--standard-labels .q-stepper__tab:first-child { + justify-content: flex-start; +} +.q-stepper__header--standard-labels .q-stepper__tab:last-child { + justify-content: flex-end; +} +.q-stepper__header--standard-labels .q-stepper__tab:only-child { + justify-content: center; +} +.q-stepper__header--standard-labels .q-stepper__dot:after { + display: none; +} +.q-stepper__header--alternative-labels .q-stepper__tab { + min-height: 104px; + flex-direction: column; + justify-content: flex-start; +} +[dir] .q-stepper__header--alternative-labels .q-stepper__tab { + padding: 24px 32px; +} +[dir=ltr] .q-stepper__header--alternative-labels .q-stepper__dot { + margin-right: 0; +} +[dir=rtl] .q-stepper__header--alternative-labels .q-stepper__dot { + margin-left: 0; +} +[dir] .q-stepper__header--alternative-labels .q-stepper__label { + margin-top: 8px; + text-align: center; +} +.q-stepper__header--alternative-labels .q-stepper__label:before, +.q-stepper__header--alternative-labels .q-stepper__label:after { + display: none; +} +.q-stepper__header--contracted { + min-height: 72px; +} +.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab { + min-height: 72px; +} +.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:first-child { + align-items: flex-start; +} +.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:last-child { + align-items: flex-end; +} +[dir] .q-stepper__header--contracted .q-stepper__tab { + padding: 24px 0; +} +[dir=ltr] .q-stepper__header--contracted .q-stepper__tab:first-child .q-stepper__dot { + transform: translateX(24px); +} +[dir=rtl] .q-stepper__header--contracted .q-stepper__tab:first-child .q-stepper__dot { + transform: translateX(-24px); +} +[dir=ltr] .q-stepper__header--contracted .q-stepper__tab:last-child .q-stepper__dot { + transform: translateX(-24px); +} +[dir=rtl] .q-stepper__header--contracted .q-stepper__tab:last-child .q-stepper__dot { + transform: translateX(24px); +} +.q-stepper__header--contracted .q-stepper__tab:not(:last-child) .q-stepper__dot:after { + display: block !important; +} +[dir] .q-stepper__header--contracted .q-stepper__dot { + margin: 0; +} +.q-stepper__header--contracted .q-stepper__label { + display: none; +} +[dir] .q-stepper__nav { + padding-top: 24px; +} +[dir] .q-stepper--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +[dir] .q-stepper--horizontal .q-stepper__step-inner { + padding: 24px; +} +[dir=ltr] .q-stepper--horizontal .q-stepper__tab:first-child { + border-top-left-radius: inherit; +} +[dir=rtl] .q-stepper--horizontal .q-stepper__tab:first-child { + border-top-right-radius: inherit; +} +[dir=ltr] .q-stepper--horizontal .q-stepper__tab:last-child { + border-top-right-radius: inherit; +} +[dir=rtl] .q-stepper--horizontal .q-stepper__tab:last-child { + border-top-left-radius: inherit; +} +.q-stepper--horizontal .q-stepper__tab:first-child .q-stepper__dot:before, +.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__label:after, +.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__dot:after { + display: none; +} +.q-stepper--horizontal .q-stepper__tab { + overflow: hidden; +} +.q-stepper--horizontal .q-stepper__line { + contain: layout; +} +.q-stepper--horizontal .q-stepper__line:before, +.q-stepper--horizontal .q-stepper__line:after { + position: absolute; + top: 50%; + height: 1px; + width: 100vw; +} +[dir] .q-stepper--horizontal .q-stepper__line:before, [dir] .q-stepper--horizontal .q-stepper__line:after { + background: rgba(0,0,0,0.12); +} +.q-stepper--horizontal .q-stepper__label:after, +.q-stepper--horizontal .q-stepper__dot:after { + content: ''; +} +[dir=ltr] .q-stepper--horizontal .q-stepper__label:after, [dir=ltr] .q-stepper--horizontal .q-stepper__dot:after { + left: 100%; + margin-left: 8px; +} +[dir=rtl] .q-stepper--horizontal .q-stepper__label:after, [dir=rtl] .q-stepper--horizontal .q-stepper__dot:after { + right: 100%; + margin-right: 8px; +} +.q-stepper--horizontal .q-stepper__dot:before { + content: ''; +} +[dir=ltr] .q-stepper--horizontal .q-stepper__dot:before { + right: 100%; + margin-right: 8px; +} +[dir=rtl] .q-stepper--horizontal .q-stepper__dot:before { + left: 100%; + margin-left: 8px; +} +[dir] .q-stepper--horizontal > .q-stepper__nav { + padding: 0 24px 24px; +} +[dir] .q-stepper--vertical { + padding: 16px 0; +} +[dir] .q-stepper--vertical .q-stepper__tab { + padding: 12px 24px; +} +.q-stepper--vertical .q-stepper__title { + line-height: 18px; +} +[dir=ltr] .q-stepper--vertical .q-stepper__step-inner { + padding: 0 24px 32px 60px; +} +[dir=rtl] .q-stepper--vertical .q-stepper__step-inner { + padding: 0 60px 32px 24px; +} +[dir] .q-stepper--vertical > .q-stepper__nav { + padding: 24px 24px 0; +} +.q-stepper--vertical .q-stepper__step { + overflow: hidden; +} +[dir=ltr] .q-stepper--vertical .q-stepper__dot { + margin-right: 12px; +} +[dir=rtl] .q-stepper--vertical .q-stepper__dot { + margin-left: 12px; +} +.q-stepper--vertical .q-stepper__dot:before, +.q-stepper--vertical .q-stepper__dot:after { + content: ''; + position: absolute; + width: 1px; + height: 99999px; +} +[dir] .q-stepper--vertical .q-stepper__dot:before, [dir] .q-stepper--vertical .q-stepper__dot:after { + background: rgba(0,0,0,0.12); +} +[dir=ltr] .q-stepper--vertical .q-stepper__dot:before, [dir=ltr] .q-stepper--vertical .q-stepper__dot:after { + left: 50%; +} +[dir=rtl] .q-stepper--vertical .q-stepper__dot:before, [dir=rtl] .q-stepper--vertical .q-stepper__dot:after { + right: 50%; +} +.q-stepper--vertical .q-stepper__dot:before { + bottom: 100%; +} +[dir] .q-stepper--vertical .q-stepper__dot:before { + margin-bottom: 8px; +} +.q-stepper--vertical .q-stepper__dot:after { + top: 100%; +} +[dir] .q-stepper--vertical .q-stepper__dot:after { + margin-top: 8px; +} +.q-stepper--vertical .q-stepper__step:first-child .q-stepper__dot:before, +.q-stepper--vertical .q-stepper__step:last-child .q-stepper__dot:after { + display: none; +} +[dir] .q-stepper--vertical .q-stepper__step:last-child .q-stepper__step-inner { + padding-bottom: 8px; +} +.q-stepper--dark .q-stepper__dot span { + color: #000; + color: var(--q-color-light-text); +} +[dir] .q-stepper--dark.q-stepper--bordered, [dir] .q-stepper--dark .q-stepper__header--border { + border-color: rgba(255,255,255,0.28); +} +[dir] .q-stepper--dark.q-stepper--horizontal .q-stepper__line:before, [dir] .q-stepper--dark.q-stepper--horizontal .q-stepper__line:after { + background: rgba(255,255,255,0.28); +} +[dir] .q-stepper--dark.q-stepper--vertical .q-stepper__dot:before, [dir] .q-stepper--dark.q-stepper--vertical .q-stepper__dot:after { + background: rgba(255,255,255,0.28); +} +.q-stepper--dark .q-stepper__tab--disabled { + color: rgba(255,255,255,0.28); +} +[dir] .q-stepper--dark .q-stepper__tab--disabled .q-stepper__dot { + background: rgba(255,255,255,0.28); +} +.q-stepper--dark .q-stepper__tab--disabled .q-stepper__label { + color: rgba(255,255,255,0.54); +} +@media (prefers-color-scheme: dark) { + .q-stepper--dark-auto .q-stepper__dot span { + color: #000; + color: var(--q-color-light-text); + } + [dir] .q-stepper--dark-auto.q-stepper--bordered, [dir] .q-stepper--dark-auto .q-stepper__header--border { + border-color: rgba(255,255,255,0.28); + } + [dir] .q-stepper--dark-auto.q-stepper--horizontal .q-stepper__line:before, [dir] .q-stepper--dark-auto.q-stepper--horizontal .q-stepper__line:after { + background: rgba(255,255,255,0.28); + } + [dir] .q-stepper--dark-auto.q-stepper--vertical .q-stepper__dot:before, [dir] .q-stepper--dark-auto.q-stepper--vertical .q-stepper__dot:after { + background: rgba(255,255,255,0.28); + } + .q-stepper--dark-auto .q-stepper__tab--disabled { + color: rgba(255,255,255,0.28); + } + [dir] .q-stepper--dark-auto .q-stepper__tab--disabled .q-stepper__dot { + background: rgba(255,255,255,0.28); + } + .q-stepper--dark-auto .q-stepper__tab--disabled .q-stepper__label { + color: rgba(255,255,255,0.54); + } +} +[dir] .q-tab-panel { + padding: 16px; +} +.q-markup-table { + overflow: auto; +} +.q-table { + width: 100%; + max-width: 100%; + border-collapse: separate; + border-spacing: 0; +} +.q-table thead tr, +.q-table tbody td { + height: 48px; +} +.q-table th { + font-weight: 500; + font-size: 12px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +[dir] .q-table th.sortable { + cursor: pointer; +} +.q-table th.sortable:hover .q-table__sort-icon { + opacity: 0.64; +} +.q-table th.sorted .q-table__sort-icon { + opacity: 0.86 !important; +} +[dir=ltr] .q-table th.sort-desc .q-table__sort-icon { + transform: rotate(180deg); +} +[dir=rtl] .q-table th.sort-desc .q-table__sort-icon { + transform: rotate(-180deg); +} +[dir] .q-table th, [dir] .q-table td { + padding: 7px 16px; + background-color: inherit; +} +[dir] .q-table thead, [dir] .q-table td, [dir] .q-table th { + border-style: solid; + border-width: 0; +} +.q-table tbody td { + font-size: 13px; +} +.q-table__card { + color: #000; + color: var(--q-color-light-text); +} +[dir] .q-table__card { + border-radius: 4px; + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +.q-table__card .q-table__middle { + flex: 1 1 auto; +} +.q-table__card .q-table__top, +.q-table__card .q-table__bottom { + flex: 0 0 auto; +} +.q-table__container { + position: relative; +} +.q-table__container.fullscreen { + max-height: 100%; +} +[dir=ltr] .q-table__container > div:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +[dir=rtl] .q-table__container > div:first-child { + border-top-right-radius: inherit; + border-top-left-radius: inherit; +} +[dir=ltr] .q-table__container > div:last-child { + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=rtl] .q-table__container > div:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +[dir] .q-table__container > .q-inner-loading { + border-radius: inherit !important; +} +[dir] .q-table__top { + padding: 12px 16px; +} +.q-table__top .q-table__control { + flex-wrap: wrap; +} +.q-table__title { + font-size: 20px; + letter-spacing: 0.005em; + font-weight: 400; +} +.q-table__separator { + min-width: 8px !important; +} +.q-table__progress { + height: 0 !important; +} +[dir] .q-table__progress th { + padding: 0 !important; + border: 0 !important; +} +.q-table__progress .q-linear-progress { + position: absolute; + bottom: 0; +} +.q-table__middle { + max-width: 100%; +} +.q-table__bottom { + min-height: 50px; + font-size: 12px; +} +[dir=ltr] .q-table__bottom { + padding: 4px 14px 4px 16px; +} +[dir=rtl] .q-table__bottom { + padding: 4px 16px 4px 14px; +} +.q-table__bottom .q-table__control { + min-height: 24px; +} +.q-table__bottom-nodata-icon { + font-size: 200%; +} +[dir=ltr] .q-table__bottom-nodata-icon { + margin-right: 8px; +} +[dir=rtl] .q-table__bottom-nodata-icon { + margin-left: 8px; +} +[dir=ltr] .q-table__bottom-item { + margin-right: 16px; +} +[dir=rtl] .q-table__bottom-item { + margin-left: 16px; +} +.q-table__control { + display: flex; + align-items: center; +} +.q-table__sort-icon { + transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); + opacity: 0; + font-size: 120%; +} +[dir=ltr] .q-table__sort-icon--left, [dir=ltr] .q-table__sort-icon--center { + margin-left: 4px; +} +[dir=rtl] .q-table__sort-icon--left, [dir=rtl] .q-table__sort-icon--center { + margin-right: 4px; +} +[dir=ltr] .q-table__sort-icon--right { + margin-right: 4px; +} +[dir=rtl] .q-table__sort-icon--right { + margin-left: 4px; +} +.q-table--col-auto-width { + width: 1px; +} +[dir] .q-table--flat { + box-shadow: none; +} +[dir] .q-table--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +[dir] .q-table--square { + border-radius: 0; +} +.q-table__linear-progress { + height: 2px; +} +.q-table--no-wrap th, +.q-table--no-wrap td { + white-space: nowrap; +} +[dir] .q-table--grid { + box-shadow: none; + border-radius: 4px; +} +[dir] .q-table--grid .q-table__top { + padding-bottom: 4px; +} +.q-table--grid .q-table__middle { + min-height: 2px; +} +[dir] .q-table--grid .q-table__middle { + margin-bottom: 4px; +} +[dir] .q-table--grid .q-table__middle thead, [dir] .q-table--grid .q-table__middle thead th { + border: 0 !important; +} +.q-table--grid .q-table__linear-progress { + bottom: 0; +} +[dir] .q-table--grid .q-table__bottom { + border-top: 0; +} +.q-table--grid .q-table__grid-content { + flex: 1 1 auto; +} +[dir] .q-table--grid.fullscreen { + background: inherit; +} +.q-table__grid-item-card { + vertical-align: top; +} +[dir] .q-table__grid-item-card { + padding: 12px; +} +[dir] .q-table__grid-item-card .q-separator { + margin: 12px 0; +} +[dir] .q-table__grid-item-row + .q-table__grid-item-row { + margin-top: 8px; +} +.q-table__grid-item-title { + opacity: 0.54; + font-weight: 500; + font-size: 12px; +} +.q-table__grid-item-value { + font-size: 13px; +} +.q-table__grid-item { + transition: transform 0.3s cubic-bezier(0.25, 0.8, 0.5, 1); +} +[dir] .q-table__grid-item { + padding: 4px; +} +[dir] .q-table__grid-item--selected { + transform: scale(0.95); +} +[dir] .q-table--horizontal-separator thead th, [dir] .q-table--cell-separator thead th, [dir] .q-table--horizontal-separator tbody tr:not(:last-child) > td, [dir] .q-table--cell-separator tbody tr:not(:last-child) > td { + border-bottom-width: 1px; +} +[dir=ltr] .q-table--vertical-separator td, [dir=ltr] .q-table--cell-separator td, [dir=ltr] .q-table--vertical-separator th, [dir=ltr] .q-table--cell-separator th { + border-left-width: 1px; +} +[dir=rtl] .q-table--vertical-separator td, [dir=rtl] .q-table--cell-separator td, [dir=rtl] .q-table--vertical-separator th, [dir=rtl] .q-table--cell-separator th { + border-right-width: 1px; +} +[dir] .q-table--vertical-separator thead tr:last-child th, [dir] .q-table--cell-separator thead tr:last-child th, [dir] .q-table--vertical-separator.q-table--loading tr:nth-last-child(2) th, [dir] .q-table--cell-separator.q-table--loading tr:nth-last-child(2) th { + border-bottom-width: 1px; +} +[dir=ltr] .q-table--vertical-separator td:first-child, [dir=ltr] .q-table--cell-separator td:first-child, [dir=ltr] .q-table--vertical-separator th:first-child, [dir=ltr] .q-table--cell-separator th:first-child { + border-left: 0; +} +[dir=rtl] .q-table--vertical-separator td:first-child, [dir=rtl] .q-table--cell-separator td:first-child, [dir=rtl] .q-table--vertical-separator th:first-child, [dir=rtl] .q-table--cell-separator th:first-child { + border-right: 0; +} +[dir] .q-table--vertical-separator .q-table__top, [dir] .q-table--cell-separator .q-table__top { + border-bottom: 1px solid rgba(0,0,0,0.12); +} +[dir] .q-table--dense .q-table__top { + padding: 6px 16px; +} +.q-table--dense .q-table__bottom { + min-height: 33px; +} +.q-table--dense .q-table__sort-icon { + font-size: 110%; +} +[dir] .q-table--dense .q-table th, [dir] .q-table--dense .q-table td { + padding: 4px 8px; +} +.q-table--dense .q-table thead tr, +.q-table--dense .q-table tbody tr, +.q-table--dense .q-table tbody td { + height: 28px; +} +[dir=ltr] .q-table--dense .q-table th:first-child, [dir=ltr] .q-table--dense .q-table td:first-child { + padding-left: 16px; +} +[dir=rtl] .q-table--dense .q-table th:first-child, [dir=rtl] .q-table--dense .q-table td:first-child { + padding-right: 16px; +} +[dir=ltr] .q-table--dense .q-table th:last-child, [dir=ltr] .q-table--dense .q-table td:last-child { + padding-right: 16px; +} +[dir=rtl] .q-table--dense .q-table th:last-child, [dir=rtl] .q-table--dense .q-table td:last-child { + padding-left: 16px; +} +[dir=ltr] .q-table--dense .q-table__bottom-item { + margin-right: 8px; +} +[dir=rtl] .q-table--dense .q-table__bottom-item { + margin-left: 8px; +} +.q-table--dense .q-table__select .q-field__control, +.q-table--dense .q-table__select .q-field__native { + min-height: 24px; +} +[dir] .q-table--dense .q-table__select .q-field__control, [dir] .q-table--dense .q-table__select .q-field__native { + padding: 0; +} +.q-table--dense .q-table__select .q-field__marginal { + height: 24px; +} +[dir] .q-table__bottom { + border-top: 1px solid rgba(0,0,0,0.12); +} +[dir] .q-table thead, [dir] .q-table tr, [dir] .q-table th, [dir] .q-table td { + border-color: rgba(0,0,0,0.12); +} +.q-table tbody td { + position: relative; +} +.q-table tbody td:before, +.q-table tbody td:after { + position: absolute; + top: 0; + bottom: 0; + pointer-events: none; +} +[dir=ltr] .q-table tbody td:before, [dir=ltr] .q-table tbody td:after { + left: 0; + right: 0; +} +[dir=rtl] .q-table tbody td:before, [dir=rtl] .q-table tbody td:after { + right: 0; + left: 0; +} +[dir] .q-table tbody td:before { + background: rgba(0,0,0,0.03); +} +[dir] .q-table tbody td:after { + background: rgba(0,0,0,0.06); +} +.q-table tbody tr.selected td:after { + content: ''; +} +body.desktop .q-table > tbody > tr:not(.q-tr--no-hover):hover > td:not(.q-td--no-hover):before { + content: ''; +} +[dir] .q-table__card--dark, [dir] .q-table--dark { + border-color: rgba(255,255,255,0.28); +} +[dir] .q-table--dark .q-table__bottom, [dir] .q-table--dark thead, [dir] .q-table--dark tr, [dir] .q-table--dark th, [dir] .q-table--dark td { + border-color: rgba(255,255,255,0.28); +} +[dir] .q-table--dark tbody td:before { + background: rgba(255,255,255,0.07); +} +[dir] .q-table--dark tbody td:after { + background: rgba(255,255,255,0.1); +} +[dir] .q-table--dark.q-table--vertical-separator .q-table__top, [dir] .q-table--dark.q-table--cell-separator .q-table__top { + border-color: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + [dir] .q-table__card--dark-auto, [dir] .q-table--dark-auto { + border-color: rgba(255,255,255,0.28); + } + [dir] .q-table--dark-auto .q-table__bottom, [dir] .q-table--dark-auto thead, [dir] .q-table--dark-auto tr, [dir] .q-table--dark-auto th, [dir] .q-table--dark-auto td { + border-color: rgba(255,255,255,0.28); + } + [dir] .q-table--dark-auto tbody td:before { + background: rgba(255,255,255,0.07); + } + [dir] .q-table--dark-auto tbody td:after { + background: rgba(255,255,255,0.1); + } + [dir] .q-table--dark-auto.q-table--vertical-separator .q-table__top, [dir] .q-table--dark-auto.q-table--cell-separator .q-table__top { + border-color: rgba(255,255,255,0.28); + } +} +.q-tab { + min-height: 48px; + transition: color 0.3s, background-color 0.3s; + text-transform: uppercase; + white-space: nowrap; + color: inherit; + text-decoration: none; +} +[dir] .q-tab { + padding: 0 16px; +} +.q-tab--full { + min-height: 72px; +} +.q-tab--no-caps { + text-transform: none; +} +.q-tab__content { + height: inherit; + min-width: 40px; +} +[dir] .q-tab__content { + padding: 4px 0; +} +[dir=ltr] .q-tab__content--inline .q-tab__icon + .q-tab__label { + padding-left: 8px; +} +[dir=rtl] .q-tab__content--inline .q-tab__icon + .q-tab__label { + padding-right: 8px; +} +.q-tab__content .q-chip--floating { + top: 0; +} +[dir=ltr] .q-tab__content .q-chip--floating { + right: -16px; +} +[dir=rtl] .q-tab__content .q-chip--floating { + left: -16px; +} +.q-tab__icon { + width: 24px; + height: 24px; + font-size: 24px; +} +.q-tab__label { + font-size: 14px; + line-height: 1.715em; + font-weight: 500; +} +.q-tab .q-badge { + top: 3px; +} +[dir=ltr] .q-tab .q-badge { + right: -12px; +} +[dir=rtl] .q-tab .q-badge { + left: -12px; +} +.q-tab__alert, +.q-tab__alert-icon { + position: absolute; +} +.q-tab__alert { + top: 7px; + height: 10px; + width: 10px; +} +[dir] .q-tab__alert { + border-radius: 50%; + background: currentColor; +} +[dir=ltr] .q-tab__alert { + right: -9px; +} +[dir=rtl] .q-tab__alert { + left: -9px; +} +.q-tab__alert-icon { + top: 2px; + font-size: 18px; +} +[dir=ltr] .q-tab__alert-icon { + right: -12px; +} +[dir=rtl] .q-tab__alert-icon { + left: -12px; +} +.q-tab__indicator { + opacity: 0; + height: 2px; +} +[dir] .q-tab__indicator { + background: currentColor; +} +.q-tab--active .q-tab__indicator { + opacity: 1; + transform-origin: left /* rtl:ignore */; +} +.q-tab--inactive { + opacity: 0.85; +} +.q-tabs { + position: relative; + transition: color 0.3s, background-color 0.3s; +} +[dir=ltr] .q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--horizontal { + padding-left: 36px; + padding-right: 36px; +} +[dir=rtl] .q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--horizontal { + padding-right: 36px; + padding-left: 36px; +} +[dir] .q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--vertical { + padding-top: 36px; + padding-bottom: 36px; +} +.q-tabs--scrollable.q-tabs__arrows--outside .q-tabs__arrow--faded { + opacity: 0.3; + pointer-events: none; +} +.q-tabs--scrollable.q-tabs__arrows--inside .q-tabs__arrow--faded { + display: none; +} +.q-tabs--not-scrollable .q-tabs__arrow { + display: none; +} +[dir] .q-tabs--not-scrollable .q-tabs__content { + border-radius: inherit; +} +.q-tabs__arrow { + font-size: 32px; + min-width: 36px; + transition: opacity 0.3s; +} +[dir] .q-tabs__arrow { + cursor: pointer; + text-shadow: 0 0 3px #fff, 0 0 1px #fff, 0 0 1px #000; +} +.q-tabs__content { + overflow: hidden; + flex: 1 1 auto; +} +.q-tabs__content--align-center { + justify-content: center; +} +.q-tabs__content--align-right { + justify-content: flex-end; +} +.q-tabs__content--align-justify .q-tab { + flex: 1 1 auto; +} +.q-tabs__offset { + display: none; +} +.q-tabs--horizontal .q-tabs__arrow { + height: 100%; +} +.q-tabs--horizontal .q-tabs__arrow--start { + top: 0; + left: 0 /* rtl:ignore */; + bottom: 0; +} +.q-tabs--horizontal .q-tabs__arrow--end { + top: 0; + right: 0 /* rtl:ignore */; + bottom: 0; +} +.q-tabs--vertical { + display: block !important; + height: 100%; +} +.q-tabs--vertical .q-tabs__content { + display: block !important; + height: 100%; +} +.q-tabs--vertical .q-tabs__arrow { + width: 100%; + height: 36px; +} +[dir] .q-tabs--vertical .q-tabs__arrow { + text-align: center; +} +.q-tabs--vertical .q-tabs__arrow--start { + top: 0; +} +[dir=ltr] .q-tabs--vertical .q-tabs__arrow--start { + left: 0; + right: 0; +} +[dir=rtl] .q-tabs--vertical .q-tabs__arrow--start { + right: 0; + left: 0; +} +.q-tabs--vertical .q-tabs__arrow--end { + bottom: 0; +} +[dir=ltr] .q-tabs--vertical .q-tabs__arrow--end { + left: 0; + right: 0; +} +[dir=rtl] .q-tabs--vertical .q-tabs__arrow--end { + right: 0; + left: 0; +} +[dir] .q-tabs--vertical .q-tab { + padding: 0 8px; +} +.q-tabs--vertical .q-tab__indicator { + height: unset; + width: 2px; +} +.q-tabs--vertical.q-tabs--not-scrollable .q-tabs__content { + height: 100%; +} +.q-tabs--vertical.q-tabs--dense .q-tab__content { + min-width: 24px; +} +.q-tabs--dense .q-tab { + min-height: 36px; +} +.q-tabs--dense .q-tab--full { + min-height: 52px; +} +.q-time { + outline: 0; + width: 290px; + min-width: 290px; + max-width: 100%; +} +[dir] .q-time { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; + background: #fff; +} +[dir] .q-time--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-time__header { + color: #fff; + color: var(--q-color-dark-text); + font-weight: 300; +} +[dir] .q-time__header { + background-color: #1976d2; + background-color: var(--q-color-primary); + padding: 16px; +} +[dir=ltr] .q-time__header { + border-top-left-radius: inherit; +} +[dir=rtl] .q-time__header { + border-top-right-radius: inherit; +} +[dir] .q-time__actions { + padding: 0 16px 16px; +} +.q-time__header-label { + font-size: 28px; + line-height: 1; + letter-spacing: -0.00833em; +} +[dir=ltr] .q-time__header-label > div + div { + margin-left: 4px; +} +[dir=rtl] .q-time__header-label > div + div { + margin-right: 4px; +} +.q-time__link { + opacity: 0.56; + outline: 0; + transition: opacity 0.3s ease-out; +} +.q-time__link--active, +.q-time__link:hover, +.q-time__link:focus { + opacity: 1; +} +.q-time__header-ampm { + font-size: 16px; + letter-spacing: 0.1em; +} +[dir] .q-time__content { + padding: 16px; +} +.q-time__content:before { + content: ''; + display: block; +} +[dir] .q-time__content:before { + padding-bottom: 100%; +} +[dir] .q-time__container-parent { + padding: 16px; +} +[dir] .q-time__container-child { + border-radius: 50%; + background: rgba(0,0,0,0.12); +} +.q-time__clock { + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + font-size: 14px; +} +[dir] .q-time__clock { + padding: 24px; +} +.q-time__clock-circle { + position: relative; +} +.q-time__clock-center { + height: 6px; + width: 6px; + min-height: 0; +} +[dir] .q-time__clock-center { + margin: auto; + border-radius: 50%; + background: currentColor; +} +.q-time__clock-pointer { + width: 2px; + height: 50%; + transform-origin: 0 0 /* rtl:ignore */; + min-height: 0; + position: absolute; + bottom: 0; + color: #1976d2; + color: var(--q-color-primary); +} +[dir] .q-time__clock-pointer { + background: currentColor; +} +[dir=ltr] .q-time__clock-pointer { + left: 50%; + right: 0; + transform: translateX(-50%); +} +[dir=rtl] .q-time__clock-pointer { + right: 50%; + left: 0; + transform: translateX(50%); +} +.q-time__clock-pointer:before, +.q-time__clock-pointer:after { + content: ''; + position: absolute; +} +[dir] .q-time__clock-pointer:before, [dir] .q-time__clock-pointer:after { + border-radius: 50%; + background: currentColor; +} +[dir=ltr] .q-time__clock-pointer:before, [dir=ltr] .q-time__clock-pointer:after { + left: 50%; + transform: translateX(-50%); +} +[dir=rtl] .q-time__clock-pointer:before, [dir=rtl] .q-time__clock-pointer:after { + right: 50%; + transform: translateX(50%); +} +.q-time__clock-pointer:before { + bottom: -4px; + width: 8px; + height: 8px; +} +.q-time__clock-pointer:after { + top: -3px; + height: 6px; + width: 6px; +} +.q-time__clock-position { + position: absolute; + min-height: 32px; + width: 32px; + height: 32px; + font-size: 12px; + line-height: 32px; + transform: translate(-50%, -50%) /* rtl:ignore */; +} +[dir] .q-time__clock-position { + margin: 0; + padding: 0; + border-radius: 50%; +} +.q-time__clock-position--disabled { + opacity: 0.4; +} +.q-time__clock-position--active { + color: #fff; + color: var(--q-color-dark-text); +} +[dir] .q-time__clock-position--active { + background-color: #1976d2; + background-color: var(--q-color-primary); +} +.q-time__clock-pos-0 { + top: 0%; + left: 50% /* rtl:ignore */; +} +.q-time__clock-pos-1 { + top: 6.7%; + left: 75% /* rtl:ignore */; +} +.q-time__clock-pos-2 { + top: 25%; + left: 93.3% /* rtl:ignore */; +} +.q-time__clock-pos-3 { + top: 50%; + left: 100% /* rtl:ignore */; +} +.q-time__clock-pos-4 { + top: 75%; + left: 93.3% /* rtl:ignore */; +} +.q-time__clock-pos-5 { + top: 93.3%; + left: 75% /* rtl:ignore */; +} +.q-time__clock-pos-6 { + top: 100%; + left: 50% /* rtl:ignore */; +} +.q-time__clock-pos-7 { + top: 93.3%; + left: 25% /* rtl:ignore */; +} +.q-time__clock-pos-8 { + top: 75%; + left: 6.7% /* rtl:ignore */; +} +.q-time__clock-pos-9 { + top: 50%; + left: 0% /* rtl:ignore */; +} +.q-time__clock-pos-10 { + top: 25%; + left: 6.7% /* rtl:ignore */; +} +.q-time__clock-pos-11 { + top: 6.7%; + left: 25% /* rtl:ignore */; +} +.q-time__clock-pos-12 { + top: 15%; + left: 50% /* rtl:ignore */; +} +.q-time__clock-pos-13 { + top: 19.69%; + left: 67.5% /* rtl:ignore */; +} +.q-time__clock-pos-14 { + top: 32.5%; + left: 80.31% /* rtl:ignore */; +} +.q-time__clock-pos-15 { + top: 50%; + left: 85% /* rtl:ignore */; +} +.q-time__clock-pos-16 { + top: 67.5%; + left: 80.31% /* rtl:ignore */; +} +.q-time__clock-pos-17 { + top: 80.31%; + left: 67.5% /* rtl:ignore */; +} +.q-time__clock-pos-18 { + top: 85%; + left: 50% /* rtl:ignore */; +} +.q-time__clock-pos-19 { + top: 80.31%; + left: 32.5% /* rtl:ignore */; +} +.q-time__clock-pos-20 { + top: 67.5%; + left: 19.69% /* rtl:ignore */; +} +.q-time__clock-pos-21 { + top: 50%; + left: 15% /* rtl:ignore */; +} +.q-time__clock-pos-22 { + top: 32.5%; + left: 19.69% /* rtl:ignore */; +} +.q-time__clock-pos-23 { + top: 19.69%; + left: 32.5% /* rtl:ignore */; +} +.q-time__now-button { + color: #fff; + color: var(--q-color-dark-text); + top: 12px; +} +[dir] .q-time__now-button { + background-color: #1976d2; + background-color: var(--q-color-primary); +} +[dir=ltr] .q-time__now-button { + right: 12px; +} +[dir=rtl] .q-time__now-button { + left: 12px; +} +.q-time.disabled .q-time__header-ampm, +.q-time--readonly .q-time__header-ampm, +.q-time.disabled .q-time__content, +.q-time--readonly .q-time__content { + pointer-events: none; +} +.q-time--portrait { + display: inline-flex; + flex-direction: column; +} +.q-time--portrait .q-time__header { + min-height: 86px; +} +[dir=ltr] .q-time--portrait .q-time__header { + border-top-right-radius: inherit; +} +[dir=rtl] .q-time--portrait .q-time__header { + border-top-left-radius: inherit; +} +[dir=ltr] .q-time--portrait .q-time__header-ampm { + margin-left: 12px; +} +[dir=rtl] .q-time--portrait .q-time__header-ampm { + margin-right: 12px; +} +[dir] .q-time--portrait.q-time--bordered .q-time__content { + margin: 1px 0; +} +.q-time--landscape { + display: inline-flex; + align-items: stretch; + min-width: 420px; +} +.q-time--landscape > div { + display: flex; + flex-direction: column; + justify-content: center; +} +.q-time--landscape .q-time__header { + min-width: 156px; +} +[dir=ltr] .q-time--landscape .q-time__header { + border-bottom-left-radius: inherit; +} +[dir=rtl] .q-time--landscape .q-time__header { + border-bottom-right-radius: inherit; +} +[dir] .q-time--landscape .q-time__header-ampm { + margin-top: 12px; +} +[dir] .q-time--dark { + border-color: rgba(255,255,255,0.28); +} +@media (prefers-color-scheme: dark) { + [dir] .q-time--dark-auto { + border-color: rgba(255,255,255,0.28); + } +} +.q-timeline { + width: 100%; + list-style: none; +} +[dir] .q-timeline { + padding: 0; +} +.q-timeline h6 { + line-height: inherit; +} +.q-timeline--dark { + color: #fff; + color: var(--q-color-dark-text); +} +.q-timeline--dark .q-timeline__subtitle { + opacity: 0.7; +} +[dir] .q-timeline__content { + padding-bottom: 24px; +} +[dir] .q-timeline__title { + margin-top: 0; + margin-bottom: 16px; +} +.q-timeline__subtitle { + font-size: 12px; + opacity: 0.6; + text-transform: uppercase; + letter-spacing: 1px; + font-weight: 700; +} +[dir] .q-timeline__subtitle { + margin-bottom: 8px; +} +.q-timeline__dot { + position: absolute; + top: 0; + bottom: 0; + width: 15px; +} +.q-timeline__dot:before, +.q-timeline__dot:after { + content: ''; + display: block; + position: absolute; +} +[dir] .q-timeline__dot:before, [dir] .q-timeline__dot:after { + background: currentColor; +} +.q-timeline__dot:before { + height: 15px; + width: 15px; + top: 4px; + transition: background 0.3s ease-in-out, border 0.3s ease-in-out; +} +[dir] .q-timeline__dot:before { + border: 3px solid transparent; + border-radius: 100%; +} +[dir=ltr] .q-timeline__dot:before { + left: 0; +} +[dir=rtl] .q-timeline__dot:before { + right: 0; +} +.q-timeline__dot:after { + width: 3px; + opacity: 0.4; + top: 24px; + bottom: 0; +} +[dir=ltr] .q-timeline__dot:after { + left: 6px; +} +[dir=rtl] .q-timeline__dot:after { + right: 6px; +} +.q-timeline__dot .q-icon { + position: absolute; + top: 0; + font-size: 16px; + height: 38px; + line-height: 38px; + width: 100%; + color: #fff; + color: var(--q-color-dark-text); +} +[dir=ltr] .q-timeline__dot .q-icon { + left: 0; + right: 0; +} +[dir=rtl] .q-timeline__dot .q-icon { + right: 0; + left: 0; +} +.q-timeline__dot .q-icon > svg, +.q-timeline__dot .q-icon > img { + width: 1em; + height: 1em; +} +.q-timeline__dot-img { + position: absolute; + top: 4px; + height: 31px; + width: 31px; +} +[dir] .q-timeline__dot-img { + background: currentColor; + border-radius: 50%; +} +[dir=ltr] .q-timeline__dot-img { + left: 0; + right: 0; +} +[dir=rtl] .q-timeline__dot-img { + right: 0; + left: 0; +} +.q-timeline__heading { + position: relative; +} +[dir] .q-timeline__heading:first-child .q-timeline__heading-title { + padding-top: 0; +} +[dir] .q-timeline__heading:last-child .q-timeline__heading-title { + padding-bottom: 0; +} +[dir] .q-timeline__heading-title { + padding: 32px 0; + margin: 0; +} +.q-timeline__entry { + position: relative; + line-height: 22px; +} +[dir] .q-timeline__entry:last-child { + padding-bottom: 0 !important; +} +.q-timeline__entry:last-child .q-timeline__dot:after { + content: none; +} +.q-timeline__entry--icon .q-timeline__dot { + width: 31px; +} +.q-timeline__entry--icon .q-timeline__dot:before { + height: 31px; + width: 31px; +} +.q-timeline__entry--icon .q-timeline__dot:after { + top: 41px; +} +[dir=ltr] .q-timeline__entry--icon .q-timeline__dot:after { + left: 14px; +} +[dir=rtl] .q-timeline__entry--icon .q-timeline__dot:after { + right: 14px; +} +[dir] .q-timeline__entry--icon .q-timeline__subtitle { + padding-top: 8px; +} +[dir=ltr] .q-timeline--dense--right .q-timeline__entry { + padding-left: 40px; +} +[dir=rtl] .q-timeline--dense--right .q-timeline__entry { + padding-right: 40px; +} +[dir=ltr] .q-timeline--dense--right .q-timeline__entry--icon .q-timeline__dot { + left: -8px; +} +[dir=rtl] .q-timeline--dense--right .q-timeline__entry--icon .q-timeline__dot { + right: -8px; +} +[dir=ltr] .q-timeline--dense--right .q-timeline__dot { + left: 0; +} +[dir=rtl] .q-timeline--dense--right .q-timeline__dot { + right: 0; +} +[dir=ltr] .q-timeline--dense--left .q-timeline__heading { + text-align: right; +} +[dir=rtl] .q-timeline--dense--left .q-timeline__heading { + text-align: left; +} +[dir=ltr] .q-timeline--dense--left .q-timeline__entry { + padding-right: 40px; +} +[dir=rtl] .q-timeline--dense--left .q-timeline__entry { + padding-left: 40px; +} +[dir=ltr] .q-timeline--dense--left .q-timeline__entry--icon .q-timeline__dot { + right: -8px; +} +[dir=rtl] .q-timeline--dense--left .q-timeline__entry--icon .q-timeline__dot { + left: -8px; +} +[dir=ltr] .q-timeline--dense--left .q-timeline__content, [dir=ltr] .q-timeline--dense--left .q-timeline__title, [dir=ltr] .q-timeline--dense--left .q-timeline__subtitle { + text-align: right; +} +[dir=rtl] .q-timeline--dense--left .q-timeline__content, [dir=rtl] .q-timeline--dense--left .q-timeline__title, [dir=rtl] .q-timeline--dense--left .q-timeline__subtitle { + text-align: left; +} +[dir=ltr] .q-timeline--dense--left .q-timeline__dot { + right: 0; +} +[dir=rtl] .q-timeline--dense--left .q-timeline__dot { + left: 0; +} +.q-timeline--comfortable { + display: table; +} +.q-timeline--comfortable .q-timeline__heading { + display: table-row; + font-size: 200%; +} +.q-timeline--comfortable .q-timeline__heading > div { + display: table-cell; +} +.q-timeline--comfortable .q-timeline__entry { + display: table-row; +} +[dir] .q-timeline--comfortable .q-timeline__entry { + padding: 0; +} +[dir] .q-timeline--comfortable .q-timeline__entry--icon .q-timeline__content { + padding-top: 8px; +} +.q-timeline--comfortable .q-timeline__subtitle, +.q-timeline--comfortable .q-timeline__dot, +.q-timeline--comfortable .q-timeline__content { + display: table-cell; + vertical-align: top; +} +.q-timeline--comfortable .q-timeline__subtitle { + width: 35%; +} +.q-timeline--comfortable .q-timeline__dot { + position: relative; + min-width: 31px; +} +[dir=ltr] .q-timeline--comfortable--right .q-timeline__heading .q-timeline__heading-title { + margin-left: -50px; +} +[dir=rtl] .q-timeline--comfortable--right .q-timeline__heading .q-timeline__heading-title { + margin-right: -50px; +} +[dir=ltr] .q-timeline--comfortable--right .q-timeline__subtitle { + text-align: right; + padding-right: 30px; +} +[dir=rtl] .q-timeline--comfortable--right .q-timeline__subtitle { + text-align: left; + padding-left: 30px; +} +[dir=ltr] .q-timeline--comfortable--right .q-timeline__content { + padding-left: 30px; +} +[dir=rtl] .q-timeline--comfortable--right .q-timeline__content { + padding-right: 30px; +} +[dir=ltr] .q-timeline--comfortable--right .q-timeline__entry--icon .q-timeline__dot { + left: -8px; +} +[dir=rtl] .q-timeline--comfortable--right .q-timeline__entry--icon .q-timeline__dot { + right: -8px; +} +[dir=ltr] .q-timeline--comfortable--left .q-timeline__heading { + text-align: right; +} +[dir=rtl] .q-timeline--comfortable--left .q-timeline__heading { + text-align: left; +} +[dir=ltr] .q-timeline--comfortable--left .q-timeline__heading .q-timeline__heading-title { + margin-right: -50px; +} +[dir=rtl] .q-timeline--comfortable--left .q-timeline__heading .q-timeline__heading-title { + margin-left: -50px; +} +[dir=ltr] .q-timeline--comfortable--left .q-timeline__subtitle { + padding-left: 30px; +} +[dir=rtl] .q-timeline--comfortable--left .q-timeline__subtitle { + padding-right: 30px; +} +[dir=ltr] .q-timeline--comfortable--left .q-timeline__content { + padding-right: 30px; +} +[dir=rtl] .q-timeline--comfortable--left .q-timeline__content { + padding-left: 30px; +} +[dir=ltr] .q-timeline--comfortable--left .q-timeline__content, [dir=ltr] .q-timeline--comfortable--left .q-timeline__title { + text-align: right; +} +[dir=rtl] .q-timeline--comfortable--left .q-timeline__content, [dir=rtl] .q-timeline--comfortable--left .q-timeline__title { + text-align: left; +} +[dir=ltr] .q-timeline--comfortable--left .q-timeline__entry--icon .q-timeline__dot { + right: 0; +} +[dir=rtl] .q-timeline--comfortable--left .q-timeline__entry--icon .q-timeline__dot { + left: 0; +} +[dir=ltr] .q-timeline--comfortable--left .q-timeline__dot { + right: -8px; +} +[dir=rtl] .q-timeline--comfortable--left .q-timeline__dot { + left: -8px; +} +[dir] .q-timeline--loose .q-timeline__heading-title { + text-align: center; +} +[dir=ltr] .q-timeline--loose .q-timeline__heading-title { + margin-left: 0; +} +[dir=rtl] .q-timeline--loose .q-timeline__heading-title { + margin-right: 0; +} +.q-timeline--loose .q-timeline__entry, +.q-timeline--loose .q-timeline__subtitle, +.q-timeline--loose .q-timeline__dot, +.q-timeline--loose .q-timeline__content { + display: block; +} +[dir] .q-timeline--loose .q-timeline__entry, [dir] .q-timeline--loose .q-timeline__subtitle, [dir] .q-timeline--loose .q-timeline__dot, [dir] .q-timeline--loose .q-timeline__content { + margin: 0; + padding: 0; +} +.q-timeline--loose .q-timeline__dot { + position: absolute; +} +[dir=ltr] .q-timeline--loose .q-timeline__dot { + left: 50%; + margin-left: -7.15px; +} +[dir=rtl] .q-timeline--loose .q-timeline__dot { + right: 50%; + margin-right: -7.15px; +} +.q-timeline--loose .q-timeline__entry { + overflow: hidden; +} +[dir] .q-timeline--loose .q-timeline__entry { + padding-bottom: 24px; +} +[dir=ltr] .q-timeline--loose .q-timeline__entry--icon .q-timeline__dot { + margin-left: -15px; +} +[dir=rtl] .q-timeline--loose .q-timeline__entry--icon .q-timeline__dot { + margin-right: -15px; +} +.q-timeline--loose .q-timeline__entry--icon .q-timeline__subtitle { + line-height: 38px; +} +[dir] .q-timeline--loose .q-timeline__entry--icon .q-timeline__content { + padding-top: 8px; +} +[dir=ltr] .q-timeline--loose .q-timeline__entry--left .q-timeline__content, [dir=ltr] .q-timeline--loose .q-timeline__entry--right .q-timeline__subtitle { + float: left; + padding-right: 30px; + text-align: right; +} +[dir=rtl] .q-timeline--loose .q-timeline__entry--left .q-timeline__content, [dir=rtl] .q-timeline--loose .q-timeline__entry--right .q-timeline__subtitle { + float: right; + padding-left: 30px; + text-align: left; +} +[dir=ltr] .q-timeline--loose .q-timeline__entry--left .q-timeline__subtitle, [dir=ltr] .q-timeline--loose .q-timeline__entry--right .q-timeline__content { + float: right; + text-align: left; + padding-left: 30px; +} +[dir=rtl] .q-timeline--loose .q-timeline__entry--left .q-timeline__subtitle, [dir=rtl] .q-timeline--loose .q-timeline__entry--right .q-timeline__content { + float: left; + text-align: right; + padding-right: 30px; +} +.q-timeline--loose .q-timeline__subtitle, +.q-timeline--loose .q-timeline__content { + width: 50%; +} +@media (prefers-color-scheme: dark) { + .q-timeline--dark-auto { + color: #fff; + color: var(--q-color-dark-text); + } + .q-timeline--dark-auto .q-timeline__subtitle { + opacity: 0.7; + } +} +.q-toggle { + vertical-align: middle; +} +.q-toggle__native { + width: 1px; + height: 1px; +} +.q-toggle__track { + height: 0.35em; + opacity: 0.38; +} +[dir] .q-toggle__track { + border-radius: 0.175em; + background: currentColor; +} +.q-toggle__thumb { + top: 0.25em; + width: 0.5em; + height: 0.5em; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + z-index: 0; +} +[dir=ltr] .q-toggle__thumb { + left: 0.25em; + transition: left 0.22s cubic-bezier(0.4, 0, 0.2, 1); +} +[dir=rtl] .q-toggle__thumb { + right: 0.25em; + transition: right 0.22s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-toggle__thumb:after { + content: ''; + position: absolute; + top: 0; + bottom: 0; +} +[dir] .q-toggle__thumb:after { + border-radius: 50%; + background: #fff; + background: var(--q-color-light-page); + box-shadow: 0 3px 1px -2px rgba(0,0,0,0.2), 0 2px 2px 0 rgba(0,0,0,0.14), 0 1px 5px 0 rgba(0,0,0,0.12); +} +[dir=ltr] .q-toggle__thumb:after { + right: 0; + left: 0; +} +[dir=rtl] .q-toggle__thumb:after { + left: 0; + right: 0; +} +.q-toggle__thumb .q-icon { + font-size: 0.3em; + min-width: 1em; + color: #000; + color: var(--q-color-light-text); + opacity: 0.54; + z-index: 1; +} +.q-toggle__inner { + font-size: 40px; + width: 1.4em; + min-width: 1.4em; + height: 1em; + -webkit-print-color-adjust: exact; +} +[dir] .q-toggle__inner { + padding: 0.325em 0.3em; +} +[dir=ltr] .q-toggle__inner--indet .q-toggle__thumb { + left: 0.45em; +} +[dir=rtl] .q-toggle__inner--indet .q-toggle__thumb { + right: 0.45em; +} +.q-toggle__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); +} +.q-toggle__inner--truthy .q-toggle__track { + opacity: 0.54; +} +[dir=ltr] .q-toggle__inner--truthy .q-toggle__thumb { + left: 0.65em; +} +[dir=rtl] .q-toggle__inner--truthy .q-toggle__thumb { + right: 0.65em; +} +[dir] .q-toggle__inner--truthy .q-toggle__thumb:after { + background-color: currentColor; +} +.q-toggle__inner--truthy .q-toggle__thumb .q-icon { + color: #fff; + color: var(--q-color-dark-text); + opacity: 1; +} +.q-toggle.disabled { + opacity: 0.75 !important; +} +.q-toggle--dark .q-toggle__inner { + color: #fff; + color: var(--q-color-dark-text); +} +.q-toggle--dark .q-toggle__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); +} +.q-toggle--dark .q-toggle__thumb:before { + opacity: 0.32 !important; +} +.q-toggle--dense .q-toggle__inner { + width: 0.8em; + min-width: 0.8em; + height: 0.5em; +} +[dir] .q-toggle--dense .q-toggle__inner { + padding: 0.07625em 0; +} +.q-toggle--dense .q-toggle__thumb { + top: 0; +} +[dir=ltr] .q-toggle--dense .q-toggle__thumb { + left: 0; +} +[dir=rtl] .q-toggle--dense .q-toggle__thumb { + right: 0; +} +[dir=ltr] .q-toggle--dense .q-toggle__inner--indet .q-toggle__thumb { + left: 0.15em; +} +[dir=rtl] .q-toggle--dense .q-toggle__inner--indet .q-toggle__thumb { + right: 0.15em; +} +[dir=ltr] .q-toggle--dense .q-toggle__inner--truthy .q-toggle__thumb { + left: 0.3em; +} +[dir=rtl] .q-toggle--dense .q-toggle__inner--truthy .q-toggle__thumb { + right: 0.3em; +} +[dir=ltr] .q-toggle--dense .q-toggle__label { + padding-left: 0.5em; +} +[dir=rtl] .q-toggle--dense .q-toggle__label { + padding-right: 0.5em; +} +[dir=ltr] .q-toggle--dense.reverse .q-toggle__label { + padding-left: 0; + padding-right: 0.5em; +} +[dir=rtl] .q-toggle--dense.reverse .q-toggle__label { + padding-right: 0; + padding-left: 0.5em; +} +body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + opacity: 0.12; + transition: transform 0.22s cubic-bezier(0, 0, 0.2, 1); +} +[dir] body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before { + border-radius: 50%; + background: currentColor; + transform: scale3d(0, 0, 1); +} +[dir=ltr] body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before { + right: 0; + left: 0; +} +[dir=rtl] body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before { + left: 0; + right: 0; +} +[dir] body.desktop .q-toggle:not(.disabled):focus .q-toggle__thumb:before, [dir] body.desktop .q-toggle:not(.disabled):hover .q-toggle__thumb:before { + transform: scale3d(2, 2, 1); +} +[dir] body.desktop .q-toggle--dense:not(.disabled):focus .q-toggle__thumb:before, [dir] body.desktop .q-toggle--dense:not(.disabled):hover .q-toggle__thumb:before { + transform: scale3d(1.5, 1.5, 1); +} +@media (prefers-color-scheme: dark) { + .q-toggle--dark-auto .q-toggle__inner { + color: #fff; + color: var(--q-color-dark-text); + } + .q-toggle--dark-auto .q-toggle__inner--truthy { + color: #1976d2; + color: var(--q-color-primary); + } + .q-toggle--dark-auto .q-toggle__thumb:before { + opacity: 0.32 !important; + } +} +.q-toolbar { + position: relative; + min-height: 50px; + width: 100%; +} +[dir] .q-toolbar { + padding: 0 12px; +} +[dir=ltr] .q-toolbar--inset { + padding-left: 58px; +} +[dir=rtl] .q-toolbar--inset { + padding-right: 58px; +} +.q-toolbar .q-avatar { + font-size: 38px; +} +.q-toolbar__title { + flex: 1 1 0%; + min-width: 1px; + max-width: 100%; + font-size: 21px; + font-weight: normal; + letter-spacing: 0.01em; +} +[dir] .q-toolbar__title { + padding: 0 12px; +} +[dir=ltr] .q-toolbar__title:first-child { + padding-left: 0; +} +[dir=rtl] .q-toolbar__title:first-child { + padding-right: 0; +} +[dir=ltr] .q-toolbar__title:last-child { + padding-right: 0; +} +[dir=rtl] .q-toolbar__title:last-child { + padding-left: 0; +} +.q-tooltip { + opacity: 0; +} +[dir] .q-tooltip { + padding: 6px 10px; +} +.q-tooltip__container { + position: fixed; + z-index: 9000; + contain: layout; + contain: layout style; +} +.q-tooltip--style { + font-size: 10px; + color: #fafafa; + text-transform: none; + font-weight: normal; +} +[dir] .q-tooltip--style { + background: #757575; + border-radius: 4px; +} +@media (max-width: 599.98px) { + .q-tooltip { + font-size: 14px; + } + [dir] .q-tooltip { + padding: 8px 16px; + } +} +.q-tree { + position: relative; + color: #9e9e9e; +} +[dir=ltr] .q-tree__node { + padding: 0 0 3px 22px; +} +[dir=rtl] .q-tree__node { + padding: 0 22px 3px 0; +} +.q-tree__node:after { + content: ''; + position: absolute; + top: -3px; + bottom: 0; + width: 2px; +} +[dir=ltr] .q-tree__node:after { + right: auto; + left: -13px; + border-left: 1px solid currentColor; +} +[dir=rtl] .q-tree__node:after { + left: auto; + right: -13px; + border-right: 1px solid currentColor; +} +.q-tree__node:last-child:after { + display: none; +} +.q-tree__node--disabled { + pointer-events: none; +} +.q-tree__node--disabled .disabled { + opacity: 1 !important; +} +.q-tree__node--disabled > div, +.q-tree__node--disabled > i, +.q-tree__node--disabled > .disabled { + opacity: 0.6 !important; +} +.q-tree__node--disabled > div .q-tree__node--disabled > div, +.q-tree__node--disabled > i .q-tree__node--disabled > div, +.q-tree__node--disabled > .disabled .q-tree__node--disabled > div, +.q-tree__node--disabled > div .q-tree__node--disabled > i, +.q-tree__node--disabled > i .q-tree__node--disabled > i, +.q-tree__node--disabled > .disabled .q-tree__node--disabled > i, +.q-tree__node--disabled > div .q-tree__node--disabled > .disabled, +.q-tree__node--disabled > i .q-tree__node--disabled > .disabled, +.q-tree__node--disabled > .disabled .q-tree__node--disabled > .disabled { + opacity: 1 !important; +} +.q-tree__node-header:before { + content: ''; + position: absolute; + top: -3px; + bottom: 50%; + width: 31px; +} +[dir] .q-tree__node-header:before { + border-bottom: 1px solid currentColor; +} +[dir=ltr] .q-tree__node-header:before { + left: -35px; + border-left: 1px solid currentColor; +} +[dir=rtl] .q-tree__node-header:before { + right: -35px; + border-right: 1px solid currentColor; +} +[dir=ltr] .q-tree__children { + padding-left: 25px; +} +[dir=rtl] .q-tree__children { + padding-right: 25px; +} +[dir=ltr] .q-tree__node-body { + padding: 5px 0 8px 5px; +} +[dir=rtl] .q-tree__node-body { + padding: 5px 5px 8px 0; +} +[dir=ltr] .q-tree__node--parent { + padding-left: 2px; +} +[dir=rtl] .q-tree__node--parent { + padding-right: 2px; +} +.q-tree__node--parent > .q-tree__node-header:before { + width: 15px; +} +[dir=ltr] .q-tree__node--parent > .q-tree__node-header:before { + left: -15px; +} +[dir=rtl] .q-tree__node--parent > .q-tree__node-header:before { + right: -15px; +} +[dir=ltr] .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body { + padding: 5px 0 8px 27px; +} +[dir=rtl] .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body { + padding: 5px 27px 8px 0; +} +.q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body:after { + content: ''; + position: absolute; + top: 0; + width: 2px; + height: 100%; + bottom: 50px; +} +[dir=ltr] .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body:after { + right: auto; + left: 12px; + border-left: 1px solid currentColor; +} +[dir=rtl] .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body:after { + left: auto; + right: 12px; + border-right: 1px solid currentColor; +} +[dir] .q-tree__node--link { + cursor: pointer; +} +.q-tree__node-header { + outline: 0; +} +[dir] .q-tree__node-header { + padding: 4px; + margin-top: 3px; + border-radius: 4px; +} +.q-tree__node-header-content { + color: #000; + color: var(--q-color-light-text); + transition: color 0.3s; +} +.q-tree__node--selected .q-tree__node-header-content { + color: #9e9e9e; +} +.q-tree__icon, +.q-tree__node-header-content .q-icon { + font-size: 21px; +} +.q-tree__img { + height: 42px; +} +[dir] .q-tree__img { + border-radius: 2px; +} +.q-tree__avatar, +.q-tree__node-header-content .q-avatar { + font-size: 28px; + width: 28px; + height: 28px; +} +[dir] .q-tree__avatar, [dir] .q-tree__node-header-content .q-avatar { + border-radius: 50%; +} +.q-tree__arrow, +.q-tree__spinner { + font-size: 16px; +} +[dir=ltr] .q-tree__arrow, [dir=ltr] .q-tree__spinner { + margin-right: 4px; +} +[dir=rtl] .q-tree__arrow, [dir=rtl] .q-tree__spinner { + margin-left: 4px; +} +.q-tree__arrow { + transition: transform 0.3s; +} +[dir=ltr] .q-tree__arrow--rotate { + transform: rotate3d(0, 0, 1, 90deg); +} +[dir=rtl] .q-tree__arrow--rotate { + transform: rotate3d(0, 0, 1, -90deg); +} +[dir=ltr] .q-tree__tickbox { + margin-right: 4px; +} +[dir=rtl] .q-tree__tickbox { + margin-left: 4px; +} +[dir] .q-tree > .q-tree__node { + padding: 0; +} +.q-tree > .q-tree__node:after, +.q-tree > .q-tree__node > .q-tree__node-header:before { + display: none; +} +[dir=ltr] .q-tree > .q-tree__node--child > .q-tree__node-header { + padding-left: 24px; +} +[dir=rtl] .q-tree > .q-tree__node--child > .q-tree__node-header { + padding-right: 24px; +} +.q-tree--dark .q-tree__node-header-content { + color: #fff; + color: var(--q-color-dark-text); +} +.q-tree--no-connectors .q-tree__node:after, +.q-tree--no-connectors .q-tree__node-header:before, +.q-tree--no-connectors .q-tree__node-body:after { + display: none !important; +} +[dir=ltr] .q-tree--dense > .q-tree__node--child > .q-tree__node-header { + padding-left: 1px; +} +[dir=rtl] .q-tree--dense > .q-tree__node--child > .q-tree__node-header { + padding-right: 1px; +} +[dir=ltr] .q-tree--dense .q-tree__arrow, [dir=ltr] .q-tree--dense .q-tree__spinner { + margin-right: 1px; +} +[dir=rtl] .q-tree--dense .q-tree__arrow, [dir=rtl] .q-tree--dense .q-tree__spinner { + margin-left: 1px; +} +.q-tree--dense .q-tree__img { + height: 32px; +} +[dir=ltr] .q-tree--dense .q-tree__tickbox { + margin-right: 3px; +} +[dir=rtl] .q-tree--dense .q-tree__tickbox { + margin-left: 3px; +} +[dir] .q-tree--dense .q-tree__node { + padding: 0; +} +.q-tree--dense .q-tree__node:after { + top: 0; +} +[dir=ltr] .q-tree--dense .q-tree__node:after { + left: -8px; +} +[dir=rtl] .q-tree--dense .q-tree__node:after { + right: -8px; +} +[dir] .q-tree--dense .q-tree__node-header { + margin-top: 0; + padding: 1px; +} +.q-tree--dense .q-tree__node-header:before { + top: 0; + width: 8px; +} +[dir=ltr] .q-tree--dense .q-tree__node-header:before { + left: -8px; +} +[dir=rtl] .q-tree--dense .q-tree__node-header:before { + right: -8px; +} +[dir=ltr] .q-tree--dense .q-tree__node--child { + padding-left: 17px; +} +[dir=rtl] .q-tree--dense .q-tree__node--child { + padding-right: 17px; +} +.q-tree--dense .q-tree__node--child > .q-tree__node-header:before { + width: 21px; +} +[dir=ltr] .q-tree--dense .q-tree__node--child > .q-tree__node-header:before { + left: -25px; +} +[dir=rtl] .q-tree--dense .q-tree__node--child > .q-tree__node-header:before { + right: -25px; +} +[dir] .q-tree--dense .q-tree__node-body { + padding: 0 0 2px; +} +[dir=ltr] .q-tree--dense .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body { + padding: 0 0 2px 20px; +} +[dir=rtl] .q-tree--dense .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body { + padding: 0 20px 2px 0; +} +[dir=ltr] .q-tree--dense .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body:after { + left: 8px; +} +[dir=rtl] .q-tree--dense .q-tree__node--parent > .q-tree__node-collapsible > .q-tree__node-body:after { + right: 8px; +} +[dir=ltr] .q-tree--dense .q-tree__children { + padding-left: 16px; +} +[dir=rtl] .q-tree--dense .q-tree__children { + padding-right: 16px; +} +[dir=rtl] .q-tree__arrow { + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */; +} +[dir=rtl] .q-tree__arrow--rotate { + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */; +} +@media (prefers-color-scheme: dark) { + .q-tree--dark-auto .q-tree__node-header-content { + color: #fff; + color: var(--q-color-dark-text); + } +} +.q-uploader { + vertical-align: top; + position: relative; + width: 320px; + max-height: 320px; +} +[dir] .q-uploader { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; +} +[dir] .q-uploader--bordered { + border: 1px solid rgba(0,0,0,0.12); +} +.q-uploader__input { + opacity: 0; + width: 100%; + height: 100%; + z-index: 1; +} +[dir] .q-uploader__input { + cursor: pointer !important; +} +[dir] .q-uploader__input::-webkit-file-upload-button { + cursor: pointer; +} +.q-uploader__file:before { + content: ''; + position: absolute; + top: 0; + bottom: 0; + pointer-events: none; + opacity: 0.04; +} +[dir] .q-uploader__file:before { + background: currentColor; +} +[dir=ltr] .q-uploader__file:before { + border-top-left-radius: inherit; + border-top-right-radius: inherit; + right: 0; + left: 0; +} +[dir=rtl] .q-uploader__file:before { + border-top-right-radius: inherit; + border-top-left-radius: inherit; + left: 0; + right: 0; +} +.q-uploader__header { + position: relative; + color: #fff; + color: var(--q-color-dark-text); + width: 100%; +} +[dir] .q-uploader__header { + background-color: #1976d2; + background-color: var(--q-color-primary); +} +[dir=ltr] .q-uploader__header { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +[dir=rtl] .q-uploader__header { + border-top-right-radius: inherit; + border-top-left-radius: inherit; +} +.q-uploader__spinner { + font-size: 24px; +} +[dir=ltr] .q-uploader__spinner { + margin-right: 4px; +} +[dir=rtl] .q-uploader__spinner { + margin-left: 4px; +} +[dir] .q-uploader__header-content { + padding: 8px; +} +.q-uploader__dnd { + outline: 1px dashed currentColor; + outline-offset: -4px; +} +[dir] .q-uploader__dnd { + background: rgba(255,255,255,0.6); +} +.q-uploader__overlay { + font-size: 36px; + color: #000; + color: var(--q-color-light-text); +} +[dir] .q-uploader__overlay { + background-color: rgba(255,255,255,0.6); +} +.q-uploader__list { + position: relative; + min-height: 60px; + flex: 1 1 auto; +} +[dir] .q-uploader__list { + padding: 8px; +} +[dir=ltr] .q-uploader__list { + border-bottom-left-radius: inherit; + border-bottom-right-radius: inherit; +} +[dir=rtl] .q-uploader__list { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +[dir] .q-uploader__file { + border-radius: 4px 4px 0 0; + border: 1px solid rgba(0,0,0,0.12); +} +.q-uploader__file .q-circular-progress { + font-size: 24px; +} +.q-uploader__file--img { + color: #fff; + color: var(--q-color-dark-text); + height: 200px; + min-width: 200px; +} +[dir] .q-uploader__file--img { + background-position: 50% 50%; + background-size: cover; + background-repeat: no-repeat; +} +.q-uploader__file--img:before { + content: none; +} +.q-uploader__file--img .q-circular-progress { + color: #fff; + color: var(--q-color-dark-text); +} +[dir] .q-uploader__file--img .q-uploader__file-header { + padding-bottom: 24px; + background: linear-gradient(to bottom, rgba(0,0,0,0.7) 20%, rgba(255,255,255,0)); +} +[dir] .q-uploader__file + .q-uploader__file { + margin-top: 8px; +} +.q-uploader__file-header { + position: relative; +} +[dir] .q-uploader__file-header { + padding: 4px 8px; +} +[dir=ltr] .q-uploader__file-header { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +[dir=rtl] .q-uploader__file-header { + border-top-right-radius: inherit; + border-top-left-radius: inherit; +} +[dir=ltr] .q-uploader__file-header-content { + padding-right: 8px; +} +[dir=rtl] .q-uploader__file-header-content { + padding-left: 8px; +} +.q-uploader__file-status { + font-size: 24px; +} +[dir=ltr] .q-uploader__file-status { + margin-right: 4px; +} +[dir=rtl] .q-uploader__file-status { + margin-left: 4px; +} +.q-uploader__title { + font-size: 14px; + font-weight: bold; + line-height: 18px; + word-break: break-word; +} +.q-uploader__subtitle { + font-size: 12px; + line-height: 18px; +} +.q-uploader--disabled .q-uploader__header, +.q-uploader--disabled .q-uploader__list { + pointer-events: none; +} +[dir] .q-uploader--dark { + border-color: rgba(255,255,255,0.28); +} +[dir] .q-uploader--dark .q-uploader__file { + border-color: rgba(255,255,255,0.28); +} +[dir] .q-uploader--dark .q-uploader__dnd, [dir] .q-uploader--dark .q-uploader__overlay { + background: rgba(255,255,255,0.3); +} +.q-uploader--dark .q-uploader__overlay { + color: #fff; + color: var(--q-color-dark-text); +} +@media (prefers-color-scheme: dark) { + [dir] .q-uploader--dark-auto { + border-color: rgba(255,255,255,0.28); + } + [dir] .q-uploader--dark-auto .q-uploader__file { + border-color: rgba(255,255,255,0.28); + } + [dir] .q-uploader--dark-auto .q-uploader__dnd, [dir] .q-uploader--dark-auto .q-uploader__overlay { + background: rgba(255,255,255,0.3); + } + .q-uploader--dark-auto .q-uploader__overlay { + color: #fff; + color: var(--q-color-dark-text); + } +} +.q-video { + position: relative; + overflow: hidden; +} +[dir] .q-video { + border-radius: inherit; +} +.q-video iframe, +.q-video object, +.q-video embed { + width: 100%; + height: 100%; +} +.q-video--responsive { + height: 0; +} +.q-video--responsive iframe, +.q-video--responsive object, +.q-video--responsive embed { + position: absolute; + top: 0; +} +[dir=ltr] .q-video--responsive iframe, [dir=ltr] .q-video--responsive object, [dir=ltr] .q-video--responsive embed { + left: 0; +} +[dir=rtl] .q-video--responsive iframe, [dir=rtl] .q-video--responsive object, [dir=rtl] .q-video--responsive embed { + right: 0; +} +.q-virtual-scroll:focus { + outline: 0; +} +.q-virtual-scroll__content { + outline: none; + contain: content; +} +.q-virtual-scroll__content > * { + overflow-anchor: none; +} +.q-virtual-scroll__content > [data-q-vs-anchor] { + overflow-anchor: auto; +} +.q-virtual-scroll__padding { + background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128,128,128,0.03) 20%, rgba(128,128,128,0.08) 50%, rgba(128,128,128,0.03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) /* rtl:ignore */; + background-size: 100% 50px /* rtl:ignore */; + background-size: var(--q-virtual-scroll-item-width, 100%) var(--q-virtual-scroll-item-height, 50px) /* rtl:ignore */; +} +.q-table .q-virtual-scroll__padding tr { + height: 0 !important; +} +[dir] .q-table .q-virtual-scroll__padding td { + padding: 0 !important; +} +.q-virtual-scroll--horizontal { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: stretch; +} +.q-virtual-scroll--horizontal .q-virtual-scroll__content { + display: flex; + flex-direction: row; + flex-wrap: nowrap; +} +.q-virtual-scroll--horizontal .q-virtual-scroll__padding, +.q-virtual-scroll--horizontal .q-virtual-scroll__content, +.q-virtual-scroll--horizontal .q-virtual-scroll__content > * { + flex: 0 0 auto; +} +.q-virtual-scroll--horizontal .q-virtual-scroll__padding { + background: linear-gradient(to left, rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128,128,128,0.03) 20%, rgba(128,128,128,0.08) 50%, rgba(128,128,128,0.03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) /* rtl:ignore */; + background-size: 50px 100% /* rtl:ignore */; + background-size: var(--q-virtual-scroll-item-width, 50px) var(--q-virtual-scroll-item-height, 100%) /* rtl:ignore */; +} +.q-ripple { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + width: 100%; + height: 100%; + color: inherit; + z-index: 0; + pointer-events: none; + overflow: hidden; + contain: strict; +} +[dir] .q-ripple { + border-radius: inherit; +} +.q-ripple__inner { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + opacity: 0; + color: inherit; + pointer-events: none; + will-change: transform, opacity; +} +[dir] .q-ripple__inner { + border-radius: 50%; + background: currentColor; + background-clip: padding-box; +} +.q-ripple__inner--enter { + transition: transform 0.225s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.1s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-ripple__inner--leave { + transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1); +} +.q-morph--invisible, +.q-morph--internal { + opacity: 0 !important; + pointer-events: none !important; + position: fixed !important; + bottom: 200vh !important; +} +[dir=ltr] .q-morph--invisible, [dir=ltr] .q-morph--internal { + right: 200vw !important; +} +[dir=rtl] .q-morph--invisible, [dir=rtl] .q-morph--internal { + left: 200vw !important; +} +.q-loading { + color: #000; + color: var(--q-color-light-text); + position: fixed !important; +} +.q-loading:before { + content: ''; + position: fixed; + top: 0; + bottom: 0; + opacity: 0.5; + z-index: -1; +} +[dir] .q-loading:before { + background: currentColor; +} +[dir=ltr] .q-loading:before { + right: 0; + left: 0; +} +[dir=rtl] .q-loading:before { + left: 0; + right: 0; +} +.q-loading > div { + max-width: 450px; +} +[dir] .q-loading > div { + margin: 40px 20px 0; + text-align: center; +} +.q-notifications__list { + z-index: 9500; + pointer-events: none; + position: relative; +} +[dir] .q-notifications__list { + margin-bottom: 10px; +} +[dir=ltr] .q-notifications__list { + left: 0; + right: 0; +} +[dir=rtl] .q-notifications__list { + right: 0; + left: 0; +} +.q-notifications__list--center { + top: 0; + bottom: 0; +} +.q-notifications__list--top { + top: 0; +} +.q-notifications__list--bottom { + bottom: 0; +} +body.q-ios-padding .q-notifications__list--center, +body.q-ios-padding .q-notifications__list--top { + top: 20px; + top: env(safe-area-inset-top); +} +body.q-ios-padding .q-notifications__list--center, +body.q-ios-padding .q-notifications__list--bottom { + bottom: env(safe-area-inset-bottom); +} +.q-notification { + pointer-events: all; + display: inline-flex; + transition: transform 1s, opacity 1s; + z-index: 9500; + flex-shrink: 0; + max-width: 95vw; + color: #fff; + color: var(--q-color-dark-text); + font-size: 14px; +} +[dir] .q-notification { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); + border-radius: 4px; + margin: 10px 10px 0; + background: #323232; + background: var(--q-color-notify-background); +} +.q-notification__icon { + font-size: 24px; + flex: 0 0 1em; +} +[dir=ltr] .q-notification__icon--additional { + margin-right: 16px; +} +[dir=rtl] .q-notification__icon--additional { + margin-left: 16px; +} +.q-notification__avatar { + font-size: 32px; +} +[dir=ltr] .q-notification__avatar--additional { + margin-right: 8px; +} +[dir=rtl] .q-notification__avatar--additional { + margin-left: 8px; +} +.q-notification__spinner { + font-size: 32px; +} +[dir=ltr] .q-notification__spinner--additional { + margin-right: 8px; +} +[dir=rtl] .q-notification__spinner--additional { + margin-left: 8px; +} +[dir] .q-notification__message { + padding: 8px 0; +} +.q-notification__caption { + font-size: 0.9em; + opacity: 0.7; +} +.q-notification__actions { + color: #1976d2; + color: var(--q-color-primary); +} +.q-notification__badge { + position: absolute; + color: #fff; + color: var(--q-color-dark-text); + font-size: 12px; + line-height: 12px; +} +[dir] .q-notification__badge { + padding: 4px 8px; + background: #c10015; + box-shadow: 0 1px 3px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12); + background-color: #c10015; + background-color: var(--q-color-negative); + border-radius: 4px; +} +[dir=ltr] .q-notification__badge { + -webkit-animation: q-notif-badge-ltr 0.42s; + animation: q-notif-badge-ltr 0.42s; +} +[dir=rtl] .q-notification__badge { + -webkit-animation: q-notif-badge-rtl 0.42s; + animation: q-notif-badge-rtl 0.42s; +} +.q-notification__badge--top-left, +.q-notification__badge--top-right { + top: -6px; +} +.q-notification__badge--bottom-left, +.q-notification__badge--bottom-right { + bottom: -6px; +} +[dir=ltr] .q-notification__badge--top-left, [dir=ltr] .q-notification__badge--bottom-left { + left: -22px; +} +[dir=rtl] .q-notification__badge--top-left, [dir=rtl] .q-notification__badge--bottom-left { + right: -22px; +} +[dir=ltr] .q-notification__badge--top-right, [dir=ltr] .q-notification__badge--bottom-right { + right: -22px; +} +[dir=rtl] .q-notification__badge--top-right, [dir=rtl] .q-notification__badge--bottom-right { + left: -22px; +} +.q-notification__progress { + z-index: -1; + position: absolute; + height: 3px; + bottom: 0; + opacity: 0.3; +} +[dir] .q-notification__progress { + background: currentColor; + border-radius: 4px 4px 0 0; + transform: scaleX(0); +} +[dir=ltr] .q-notification__progress { + left: -10px; + right: -10px; + -webkit-animation: q-notif-progress linear; + animation: q-notif-progress linear; + transform-origin: 0 50%; +} +[dir=rtl] .q-notification__progress { + right: -10px; + left: -10px; + -webkit-animation: q-notif-progress linear; + animation: q-notif-progress linear; + transform-origin: 100% 50%; +} +.q-notification--standard { + min-height: 48px; +} +[dir] .q-notification--standard { + padding: 0 16px; +} +[dir=ltr] .q-notification--standard .q-notification__actions { + padding: 6px 0 6px 8px; + margin-right: -8px; +} +[dir=rtl] .q-notification--standard .q-notification__actions { + padding: 6px 8px 6px 0; + margin-left: -8px; +} +.q-notification--multi-line { + min-height: 68px; +} +[dir] .q-notification--multi-line { + padding: 8px 16px; +} +.q-notification--multi-line .q-notification__badge--top-left, +.q-notification--multi-line .q-notification__badge--top-right { + top: -15px; +} +.q-notification--multi-line .q-notification__badge--bottom-left, +.q-notification--multi-line .q-notification__badge--bottom-right { + bottom: -15px; +} +.q-notification--multi-line .q-notification__progress { + bottom: -8px; +} +[dir] .q-notification--multi-line .q-notification__actions { + padding: 0; +} +[dir=ltr] .q-notification--multi-line .q-notification__actions--with-media { + padding-left: 25px; +} +[dir=rtl] .q-notification--multi-line .q-notification__actions--with-media { + padding-right: 25px; +} +.q-notification--top-left-enter, +.q-notification--top-left-leave-to, +.q-notification--top-enter, +.q-notification--top-leave-to, +.q-notification--top-right-enter, +.q-notification--top-right-leave-to { + opacity: 0; + z-index: 9499; +} +[dir] .q-notification--top-left-enter, [dir] .q-notification--top-left-leave-to, [dir] .q-notification--top-enter, [dir] .q-notification--top-leave-to, [dir] .q-notification--top-right-enter, [dir] .q-notification--top-right-leave-to { + transform: translateY(-50px); +} +.q-notification--left-enter, +.q-notification--left-leave-to, +.q-notification--center-enter, +.q-notification--center-leave-to, +.q-notification--right-enter, +.q-notification--right-leave-to { + opacity: 0; + z-index: 9499; +} +[dir] .q-notification--left-enter, [dir] .q-notification--left-leave-to, [dir] .q-notification--center-enter, [dir] .q-notification--center-leave-to, [dir] .q-notification--right-enter, [dir] .q-notification--right-leave-to { + transform: rotateX(90deg); +} +.q-notification--bottom-left-enter, +.q-notification--bottom-left-leave-to, +.q-notification--bottom-enter, +.q-notification--bottom-leave-to, +.q-notification--bottom-right-enter, +.q-notification--bottom-right-leave-to { + opacity: 0; + z-index: 9499; +} +[dir] .q-notification--bottom-left-enter, [dir] .q-notification--bottom-left-leave-to, [dir] .q-notification--bottom-enter, [dir] .q-notification--bottom-leave-to, [dir] .q-notification--bottom-right-enter, [dir] .q-notification--bottom-right-leave-to { + transform: translateY(50px); +} +.q-notification--top-left-leave-active, +.q-notification--top-leave-active, +.q-notification--top-right-leave-active, +.q-notification--left-leave-active, +.q-notification--center-leave-active, +.q-notification--right-leave-active, +.q-notification--bottom-left-leave-active, +.q-notification--bottom-leave-active, +.q-notification--bottom-right-leave-active { + position: absolute; + z-index: 9499; +} +[dir=ltr] .q-notification--top-left-leave-active, [dir=ltr] .q-notification--top-leave-active, [dir=ltr] .q-notification--top-right-leave-active, [dir=ltr] .q-notification--left-leave-active, [dir=ltr] .q-notification--center-leave-active, [dir=ltr] .q-notification--right-leave-active, [dir=ltr] .q-notification--bottom-left-leave-active, [dir=ltr] .q-notification--bottom-leave-active, [dir=ltr] .q-notification--bottom-right-leave-active { + margin-left: 0; + margin-right: 0; +} +[dir=rtl] .q-notification--top-left-leave-active, [dir=rtl] .q-notification--top-leave-active, [dir=rtl] .q-notification--top-right-leave-active, [dir=rtl] .q-notification--left-leave-active, [dir=rtl] .q-notification--center-leave-active, [dir=rtl] .q-notification--right-leave-active, [dir=rtl] .q-notification--bottom-left-leave-active, [dir=rtl] .q-notification--bottom-leave-active, [dir=rtl] .q-notification--bottom-right-leave-active { + margin-right: 0; + margin-left: 0; +} +.q-notification--top-leave-active, +.q-notification--center-leave-active { + top: 0; +} +.q-notification--bottom-left-leave-active, +.q-notification--bottom-leave-active, +.q-notification--bottom-right-leave-active { + bottom: 0; +} +@media (min-width: 600px) { + .q-notification { + max-width: 65vw; + } +} +/* + * Animate.css additions + * Adapted from: https: + */ +:root { + --animate-duration: 0.3s; + --animate-delay: 0.3s; + --animate-repeat: 1; +} +[dir=ltr] .animated { + -webkit-animation-duration: var(--animate-duration); + animation-duration: var(--animate-duration); + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +[dir=rtl] .animated { + -webkit-animation-duration: var(--animate-duration); + animation-duration: var(--animate-duration); + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} +[dir=ltr] .animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} +[dir=rtl] .animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} +[dir=ltr] .animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} +[dir=rtl] .animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} +[dir=ltr] .animated.repeat-1 { + -webkit-animation-iteration-count: var(--animate-repeat); + animation-iteration-count: var(--animate-repeat); +} +[dir=rtl] .animated.repeat-1 { + -webkit-animation-iteration-count: var(--animate-repeat); + animation-iteration-count: var(--animate-repeat); +} +[dir=ltr] .animated.repeat-2 { + -webkit-animation-iteration-count: calc(var(--animate-repeat) * 2); + animation-iteration-count: calc(var(--animate-repeat) * 2); +} +[dir=rtl] .animated.repeat-2 { + -webkit-animation-iteration-count: calc(var(--animate-repeat) * 2); + animation-iteration-count: calc(var(--animate-repeat) * 2); +} +[dir=ltr] .animated.repeat-3 { + -webkit-animation-iteration-count: calc(var(--animate-repeat) * 3); + animation-iteration-count: calc(var(--animate-repeat) * 3); +} +[dir=rtl] .animated.repeat-3 { + -webkit-animation-iteration-count: calc(var(--animate-repeat) * 3); + animation-iteration-count: calc(var(--animate-repeat) * 3); +} +[dir=ltr] .animated.delay-1s { + -webkit-animation-delay: var(--animate-delay); + animation-delay: var(--animate-delay); +} +[dir=rtl] .animated.delay-1s { + -webkit-animation-delay: var(--animate-delay); + animation-delay: var(--animate-delay); +} +[dir=ltr] .animated.delay-2s { + -webkit-animation-delay: calc(var(--animate-delay) * 2); + animation-delay: calc(var(--animate-delay) * 2); +} +[dir=rtl] .animated.delay-2s { + -webkit-animation-delay: calc(var(--animate-delay) * 2); + animation-delay: calc(var(--animate-delay) * 2); +} +[dir=ltr] .animated.delay-3s { + -webkit-animation-delay: calc(var(--animate-delay) * 3); + animation-delay: calc(var(--animate-delay) * 3); +} +[dir=rtl] .animated.delay-3s { + -webkit-animation-delay: calc(var(--animate-delay) * 3); + animation-delay: calc(var(--animate-delay) * 3); +} +[dir=ltr] .animated.delay-4s { + -webkit-animation-delay: calc(var(--animate-delay) * 4); + animation-delay: calc(var(--animate-delay) * 4); +} +[dir=rtl] .animated.delay-4s { + -webkit-animation-delay: calc(var(--animate-delay) * 4); + animation-delay: calc(var(--animate-delay) * 4); +} +[dir=ltr] .animated.delay-5s { + -webkit-animation-delay: calc(var(--animate-delay) * 5); + animation-delay: calc(var(--animate-delay) * 5); +} +[dir=rtl] .animated.delay-5s { + -webkit-animation-delay: calc(var(--animate-delay) * 5); + animation-delay: calc(var(--animate-delay) * 5); +} +[dir=ltr] .animated.faster { + -webkit-animation-duration: calc(var(--animate-duration) / 2); + animation-duration: calc(var(--animate-duration) / 2); +} +[dir=rtl] .animated.faster { + -webkit-animation-duration: calc(var(--animate-duration) / 2); + animation-duration: calc(var(--animate-duration) / 2); +} +[dir=ltr] .animated.fast { + -webkit-animation-duration: calc(var(--animate-duration) * 0.8); + animation-duration: calc(var(--animate-duration) * 0.8); +} +[dir=rtl] .animated.fast { + -webkit-animation-duration: calc(var(--animate-duration) * 0.8); + animation-duration: calc(var(--animate-duration) * 0.8); +} +[dir=ltr] .animated.slow { + -webkit-animation-duration: calc(var(--animate-duration) * 2); + animation-duration: calc(var(--animate-duration) * 2); +} +[dir=rtl] .animated.slow { + -webkit-animation-duration: calc(var(--animate-duration) * 2); + animation-duration: calc(var(--animate-duration) * 2); +} +[dir=ltr] .animated.slower { + -webkit-animation-duration: calc(var(--animate-duration) * 3); + animation-duration: calc(var(--animate-duration) * 3); +} +[dir=rtl] .animated.slower { + -webkit-animation-duration: calc(var(--animate-duration) * 3); + animation-duration: calc(var(--animate-duration) * 3); +} +@media print, (prefers-reduced-motion: reduce) { + [dir] .animated { + transition-duration: 1ms !important; + } + [dir=ltr] .animated { + -webkit-animation-duration: 1ms !important; + animation-duration: 1ms !important; + -webkit-animation-iteration-count: 1 !important; + animation-iteration-count: 1 !important; + } + [dir=rtl] .animated { + -webkit-animation-duration: 1ms !important; + animation-duration: 1ms !important; + -webkit-animation-iteration-count: 1 !important; + animation-iteration-count: 1 !important; + } + .animated[class*='Out'] { + opacity: 0; + } +} +[dir=ltr] .q-animate--scale { + -webkit-animation: q-scale 0.15s; + animation: q-scale 0.15s; + -webkit-animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1); + animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1); +} +[dir=rtl] .q-animate--scale { + -webkit-animation: q-scale 0.15s; + animation: q-scale 0.15s; + -webkit-animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1); + animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1); +} +.q-animate--fade { + -webkit-animation: q-fade 0.2s /* rtl:ignore */; + animation: q-fade 0.2s /* rtl:ignore */; +} +:root { + --q-color-primary: #1976d2; + --q-color-secondary: #26a69a; + --q-color-accent: #9c27b0; + --q-color-positive: #21ba45; + --q-color-negative: #c10015; + --q-color-info: #31ccec; + --q-color-warning: #f2c037; + --q-color-dark: #1d1d1d; + --q-color-light-text: #000; + --q-color-light-page: #fff; + --q-color-dark-text: #fff; + --q-color-dark-page: #121212; + --q-color-backdrop-background: #000; + --q-color-notify-background: #323232; + --q-color-chip-background-light: #e0e0e0; + --q-color-chip-background-dark: #323232; + --q-color-dialog-plugin-light: #1976d2; + --q-color-dialog-plugin-dark: #ffc107; +} +.text-dark { + color: #1d1d1d !important; + color: var(--q-color-dark) !important; +} +[dir] .bg-dark { + background: #1d1d1d !important; + background: var(--q-color-dark) !important; +} +.text-dialog-plugin-light, +.text-dialog-plugin-dark-auto { + color: #1976d2 !important; + color: var(--q-color-dialog-plugin-light) !important; +} +[dir] .bg-dialog-plugin-light, [dir] .bg-dialog-plugin-dark-auto { + background: #1976d2 !important; + background: var(--q-color-dialog-plugin-light) !important; +} +.text-dialog-plugin-dark { + color: #ffc107 !important; + color: var(--q-color-dialog-plugin-dark) !important; +} +[dir] .bg-dialog-plugin-dark { + background: #ffc107 !important; + background: var(--q-color-dialog-plugin-dark) !important; +} +@media (prefers-color-scheme: dark) { + .text-dialog-plugin-dark-auto { + color: #ffc107 !important; + color: var(--q-color-dialog-plugin-dark) !important; + } + [dir] .bg-dialog-plugin-dark-auto { + background: #ffc107 !important; + background: var(--q-color-dialog-plugin-dark) !important; + } +} +.text-primary { + color: #1976d2 !important; + color: var(--q-color-primary) !important; +} +[dir] .bg-primary { + background: #1976d2 !important; + background: var(--q-color-primary) !important; +} +.text-secondary { + color: #26a69a !important; + color: var(--q-color-secondary) !important; +} +[dir] .bg-secondary { + background: #26a69a !important; + background: var(--q-color-secondary) !important; +} +.text-accent { + color: #9c27b0 !important; + color: var(--q-color-accent) !important; +} +[dir] .bg-accent { + background: #9c27b0 !important; + background: var(--q-color-accent) !important; +} +.text-positive { + color: #21ba45 !important; + color: var(--q-color-positive) !important; +} +[dir] .bg-positive { + background: #21ba45 !important; + background: var(--q-color-positive) !important; +} +.text-negative { + color: #c10015 !important; + color: var(--q-color-negative) !important; +} +[dir] .bg-negative { + background: #c10015 !important; + background: var(--q-color-negative) !important; +} +.text-info { + color: #31ccec !important; + color: var(--q-color-info) !important; +} +[dir] .bg-info { + background: #31ccec !important; + background: var(--q-color-info) !important; +} +.text-warning { + color: #f2c037 !important; + color: var(--q-color-warning) !important; +} +[dir] .bg-warning { + background: #f2c037 !important; + background: var(--q-color-warning) !important; +} +.text-white { + color: #fff !important; +} +[dir] .bg-white { + background: #fff !important; +} +.text-black { + color: #000 !important; +} +[dir] .bg-black { + background: #000 !important; +} +.text-transparent { + color: transparent !important; +} +[dir] .bg-transparent { + background: transparent !important; +} +.text-separator { + color: rgba(0,0,0,0.12) !important; +} +[dir] .bg-separator { + background: rgba(0,0,0,0.12) !important; +} +.text-dark-separator { + color: rgba(255,255,255,0.28) !important; +} +[dir] .bg-dark-separator { + background: rgba(255,255,255,0.28) !important; +} +.text-red { + color: #f44336 !important; +} +.text-red-1 { + color: #ffebee !important; +} +.text-red-2 { + color: #ffcdd2 !important; +} +.text-red-3 { + color: #ef9a9a !important; +} +.text-red-4 { + color: #e57373 !important; +} +.text-red-5 { + color: #ef5350 !important; +} +.text-red-6 { + color: #f44336 !important; +} +.text-red-7 { + color: #e53935 !important; +} +.text-red-8 { + color: #d32f2f !important; +} +.text-red-9 { + color: #c62828 !important; +} +.text-red-10 { + color: #b71c1c !important; +} +.text-red-11 { + color: #ff8a80 !important; +} +.text-red-12 { + color: #ff5252 !important; +} +.text-red-13 { + color: #ff1744 !important; +} +.text-red-14 { + color: #d50000 !important; +} +.text-pink { + color: #e91e63 !important; +} +.text-pink-1 { + color: #fce4ec !important; +} +.text-pink-2 { + color: #f8bbd0 !important; +} +.text-pink-3 { + color: #f48fb1 !important; +} +.text-pink-4 { + color: #f06292 !important; +} +.text-pink-5 { + color: #ec407a !important; +} +.text-pink-6 { + color: #e91e63 !important; +} +.text-pink-7 { + color: #d81b60 !important; +} +.text-pink-8 { + color: #c2185b !important; +} +.text-pink-9 { + color: #ad1457 !important; +} +.text-pink-10 { + color: #880e4f !important; +} +.text-pink-11 { + color: #ff80ab !important; +} +.text-pink-12 { + color: #ff4081 !important; +} +.text-pink-13 { + color: #f50057 !important; +} +.text-pink-14 { + color: #c51162 !important; +} +.text-purple { + color: #9c27b0 !important; +} +.text-purple-1 { + color: #f3e5f5 !important; +} +.text-purple-2 { + color: #e1bee7 !important; +} +.text-purple-3 { + color: #ce93d8 !important; +} +.text-purple-4 { + color: #ba68c8 !important; +} +.text-purple-5 { + color: #ab47bc !important; +} +.text-purple-6 { + color: #9c27b0 !important; +} +.text-purple-7 { + color: #8e24aa !important; +} +.text-purple-8 { + color: #7b1fa2 !important; +} +.text-purple-9 { + color: #6a1b9a !important; +} +.text-purple-10 { + color: #4a148c !important; +} +.text-purple-11 { + color: #ea80fc !important; +} +.text-purple-12 { + color: #e040fb !important; +} +.text-purple-13 { + color: #d500f9 !important; +} +.text-purple-14 { + color: #a0f !important; +} +.text-deep-purple { + color: #673ab7 !important; +} +.text-deep-purple-1 { + color: #ede7f6 !important; +} +.text-deep-purple-2 { + color: #d1c4e9 !important; +} +.text-deep-purple-3 { + color: #b39ddb !important; +} +.text-deep-purple-4 { + color: #9575cd !important; +} +.text-deep-purple-5 { + color: #7e57c2 !important; +} +.text-deep-purple-6 { + color: #673ab7 !important; +} +.text-deep-purple-7 { + color: #5e35b1 !important; +} +.text-deep-purple-8 { + color: #512da8 !important; +} +.text-deep-purple-9 { + color: #4527a0 !important; +} +.text-deep-purple-10 { + color: #311b92 !important; +} +.text-deep-purple-11 { + color: #b388ff !important; +} +.text-deep-purple-12 { + color: #7c4dff !important; +} +.text-deep-purple-13 { + color: #651fff !important; +} +.text-deep-purple-14 { + color: #6200ea !important; +} +.text-indigo { + color: #3f51b5 !important; +} +.text-indigo-1 { + color: #e8eaf6 !important; +} +.text-indigo-2 { + color: #c5cae9 !important; +} +.text-indigo-3 { + color: #9fa8da !important; +} +.text-indigo-4 { + color: #7986cb !important; +} +.text-indigo-5 { + color: #5c6bc0 !important; +} +.text-indigo-6 { + color: #3f51b5 !important; +} +.text-indigo-7 { + color: #3949ab !important; +} +.text-indigo-8 { + color: #303f9f !important; +} +.text-indigo-9 { + color: #283593 !important; +} +.text-indigo-10 { + color: #1a237e !important; +} +.text-indigo-11 { + color: #8c9eff !important; +} +.text-indigo-12 { + color: #536dfe !important; +} +.text-indigo-13 { + color: #3d5afe !important; +} +.text-indigo-14 { + color: #304ffe !important; +} +.text-blue { + color: #2196f3 !important; +} +.text-blue-1 { + color: #e3f2fd !important; +} +.text-blue-2 { + color: #bbdefb !important; +} +.text-blue-3 { + color: #90caf9 !important; +} +.text-blue-4 { + color: #64b5f6 !important; +} +.text-blue-5 { + color: #42a5f5 !important; +} +.text-blue-6 { + color: #2196f3 !important; +} +.text-blue-7 { + color: #1e88e5 !important; +} +.text-blue-8 { + color: #1976d2 !important; +} +.text-blue-9 { + color: #1565c0 !important; +} +.text-blue-10 { + color: #0d47a1 !important; +} +.text-blue-11 { + color: #82b1ff !important; +} +.text-blue-12 { + color: #448aff !important; +} +.text-blue-13 { + color: #2979ff !important; +} +.text-blue-14 { + color: #2962ff !important; +} +.text-light-blue { + color: #03a9f4 !important; +} +.text-light-blue-1 { + color: #e1f5fe !important; +} +.text-light-blue-2 { + color: #b3e5fc !important; +} +.text-light-blue-3 { + color: #81d4fa !important; +} +.text-light-blue-4 { + color: #4fc3f7 !important; +} +.text-light-blue-5 { + color: #29b6f6 !important; +} +.text-light-blue-6 { + color: #03a9f4 !important; +} +.text-light-blue-7 { + color: #039be5 !important; +} +.text-light-blue-8 { + color: #0288d1 !important; +} +.text-light-blue-9 { + color: #0277bd !important; +} +.text-light-blue-10 { + color: #01579b !important; +} +.text-light-blue-11 { + color: #80d8ff !important; +} +.text-light-blue-12 { + color: #40c4ff !important; +} +.text-light-blue-13 { + color: #00b0ff !important; +} +.text-light-blue-14 { + color: #0091ea !important; +} +.text-cyan { + color: #00bcd4 !important; +} +.text-cyan-1 { + color: #e0f7fa !important; +} +.text-cyan-2 { + color: #b2ebf2 !important; +} +.text-cyan-3 { + color: #80deea !important; +} +.text-cyan-4 { + color: #4dd0e1 !important; +} +.text-cyan-5 { + color: #26c6da !important; +} +.text-cyan-6 { + color: #00bcd4 !important; +} +.text-cyan-7 { + color: #00acc1 !important; +} +.text-cyan-8 { + color: #0097a7 !important; +} +.text-cyan-9 { + color: #00838f !important; +} +.text-cyan-10 { + color: #006064 !important; +} +.text-cyan-11 { + color: #84ffff !important; +} +.text-cyan-12 { + color: #18ffff !important; +} +.text-cyan-13 { + color: #00e5ff !important; +} +.text-cyan-14 { + color: #00b8d4 !important; +} +.text-teal { + color: #009688 !important; +} +.text-teal-1 { + color: #e0f2f1 !important; +} +.text-teal-2 { + color: #b2dfdb !important; +} +.text-teal-3 { + color: #80cbc4 !important; +} +.text-teal-4 { + color: #4db6ac !important; +} +.text-teal-5 { + color: #26a69a !important; +} +.text-teal-6 { + color: #009688 !important; +} +.text-teal-7 { + color: #00897b !important; +} +.text-teal-8 { + color: #00796b !important; +} +.text-teal-9 { + color: #00695c !important; +} +.text-teal-10 { + color: #004d40 !important; +} +.text-teal-11 { + color: #a7ffeb !important; +} +.text-teal-12 { + color: #64ffda !important; +} +.text-teal-13 { + color: #1de9b6 !important; +} +.text-teal-14 { + color: #00bfa5 !important; +} +.text-green { + color: #4caf50 !important; +} +.text-green-1 { + color: #e8f5e9 !important; +} +.text-green-2 { + color: #c8e6c9 !important; +} +.text-green-3 { + color: #a5d6a7 !important; +} +.text-green-4 { + color: #81c784 !important; +} +.text-green-5 { + color: #66bb6a !important; +} +.text-green-6 { + color: #4caf50 !important; +} +.text-green-7 { + color: #43a047 !important; +} +.text-green-8 { + color: #388e3c !important; +} +.text-green-9 { + color: #2e7d32 !important; +} +.text-green-10 { + color: #1b5e20 !important; +} +.text-green-11 { + color: #b9f6ca !important; +} +.text-green-12 { + color: #69f0ae !important; +} +.text-green-13 { + color: #00e676 !important; +} +.text-green-14 { + color: #00c853 !important; +} +.text-light-green { + color: #8bc34a !important; +} +.text-light-green-1 { + color: #f1f8e9 !important; +} +.text-light-green-2 { + color: #dcedc8 !important; +} +.text-light-green-3 { + color: #c5e1a5 !important; +} +.text-light-green-4 { + color: #aed581 !important; +} +.text-light-green-5 { + color: #9ccc65 !important; +} +.text-light-green-6 { + color: #8bc34a !important; +} +.text-light-green-7 { + color: #7cb342 !important; +} +.text-light-green-8 { + color: #689f38 !important; +} +.text-light-green-9 { + color: #558b2f !important; +} +.text-light-green-10 { + color: #33691e !important; +} +.text-light-green-11 { + color: #ccff90 !important; +} +.text-light-green-12 { + color: #b2ff59 !important; +} +.text-light-green-13 { + color: #76ff03 !important; +} +.text-light-green-14 { + color: #64dd17 !important; +} +.text-lime { + color: #cddc39 !important; +} +.text-lime-1 { + color: #f9fbe7 !important; +} +.text-lime-2 { + color: #f0f4c3 !important; +} +.text-lime-3 { + color: #e6ee9c !important; +} +.text-lime-4 { + color: #dce775 !important; +} +.text-lime-5 { + color: #d4e157 !important; +} +.text-lime-6 { + color: #cddc39 !important; +} +.text-lime-7 { + color: #c0ca33 !important; +} +.text-lime-8 { + color: #afb42b !important; +} +.text-lime-9 { + color: #9e9d24 !important; +} +.text-lime-10 { + color: #827717 !important; +} +.text-lime-11 { + color: #f4ff81 !important; +} +.text-lime-12 { + color: #eeff41 !important; +} +.text-lime-13 { + color: #c6ff00 !important; +} +.text-lime-14 { + color: #aeea00 !important; +} +.text-yellow { + color: #ffeb3b !important; +} +.text-yellow-1 { + color: #fffde7 !important; +} +.text-yellow-2 { + color: #fff9c4 !important; +} +.text-yellow-3 { + color: #fff59d !important; +} +.text-yellow-4 { + color: #fff176 !important; +} +.text-yellow-5 { + color: #ffee58 !important; +} +.text-yellow-6 { + color: #ffeb3b !important; +} +.text-yellow-7 { + color: #fdd835 !important; +} +.text-yellow-8 { + color: #fbc02d !important; +} +.text-yellow-9 { + color: #f9a825 !important; +} +.text-yellow-10 { + color: #f57f17 !important; +} +.text-yellow-11 { + color: #ffff8d !important; +} +.text-yellow-12 { + color: #ff0 !important; +} +.text-yellow-13 { + color: #ffea00 !important; +} +.text-yellow-14 { + color: #ffd600 !important; +} +.text-amber { + color: #ffc107 !important; +} +.text-amber-1 { + color: #fff8e1 !important; +} +.text-amber-2 { + color: #ffecb3 !important; +} +.text-amber-3 { + color: #ffe082 !important; +} +.text-amber-4 { + color: #ffd54f !important; +} +.text-amber-5 { + color: #ffca28 !important; +} +.text-amber-6 { + color: #ffc107 !important; +} +.text-amber-7 { + color: #ffb300 !important; +} +.text-amber-8 { + color: #ffa000 !important; +} +.text-amber-9 { + color: #ff8f00 !important; +} +.text-amber-10 { + color: #ff6f00 !important; +} +.text-amber-11 { + color: #ffe57f !important; +} +.text-amber-12 { + color: #ffd740 !important; +} +.text-amber-13 { + color: #ffc400 !important; +} +.text-amber-14 { + color: #ffab00 !important; +} +.text-orange { + color: #ff9800 !important; +} +.text-orange-1 { + color: #fff3e0 !important; +} +.text-orange-2 { + color: #ffe0b2 !important; +} +.text-orange-3 { + color: #ffcc80 !important; +} +.text-orange-4 { + color: #ffb74d !important; +} +.text-orange-5 { + color: #ffa726 !important; +} +.text-orange-6 { + color: #ff9800 !important; +} +.text-orange-7 { + color: #fb8c00 !important; +} +.text-orange-8 { + color: #f57c00 !important; +} +.text-orange-9 { + color: #ef6c00 !important; +} +.text-orange-10 { + color: #e65100 !important; +} +.text-orange-11 { + color: #ffd180 !important; +} +.text-orange-12 { + color: #ffab40 !important; +} +.text-orange-13 { + color: #ff9100 !important; +} +.text-orange-14 { + color: #ff6d00 !important; +} +.text-deep-orange { + color: #ff5722 !important; +} +.text-deep-orange-1 { + color: #fbe9e7 !important; +} +.text-deep-orange-2 { + color: #ffccbc !important; +} +.text-deep-orange-3 { + color: #ffab91 !important; +} +.text-deep-orange-4 { + color: #ff8a65 !important; +} +.text-deep-orange-5 { + color: #ff7043 !important; +} +.text-deep-orange-6 { + color: #ff5722 !important; +} +.text-deep-orange-7 { + color: #f4511e !important; +} +.text-deep-orange-8 { + color: #e64a19 !important; +} +.text-deep-orange-9 { + color: #d84315 !important; +} +.text-deep-orange-10 { + color: #bf360c !important; +} +.text-deep-orange-11 { + color: #ff9e80 !important; +} +.text-deep-orange-12 { + color: #ff6e40 !important; +} +.text-deep-orange-13 { + color: #ff3d00 !important; +} +.text-deep-orange-14 { + color: #dd2c00 !important; +} +.text-brown { + color: #795548 !important; +} +.text-brown-1 { + color: #efebe9 !important; +} +.text-brown-2 { + color: #d7ccc8 !important; +} +.text-brown-3 { + color: #bcaaa4 !important; +} +.text-brown-4 { + color: #a1887f !important; +} +.text-brown-5 { + color: #8d6e63 !important; +} +.text-brown-6 { + color: #795548 !important; +} +.text-brown-7 { + color: #6d4c41 !important; +} +.text-brown-8 { + color: #5d4037 !important; +} +.text-brown-9 { + color: #4e342e !important; +} +.text-brown-10 { + color: #3e2723 !important; +} +.text-brown-11 { + color: #d7ccc8 !important; +} +.text-brown-12 { + color: #bcaaa4 !important; +} +.text-brown-13 { + color: #8d6e63 !important; +} +.text-brown-14 { + color: #5d4037 !important; +} +.text-grey { + color: #9e9e9e !important; +} +.text-grey-1 { + color: #fafafa !important; +} +.text-grey-2 { + color: #f5f5f5 !important; +} +.text-grey-3 { + color: #eee !important; +} +.text-grey-4 { + color: #e0e0e0 !important; +} +.text-grey-5 { + color: #bdbdbd !important; +} +.text-grey-6 { + color: #9e9e9e !important; +} +.text-grey-7 { + color: #757575 !important; +} +.text-grey-8 { + color: #616161 !important; +} +.text-grey-9 { + color: #424242 !important; +} +.text-grey-10 { + color: #212121 !important; +} +.text-grey-11 { + color: #f5f5f5 !important; +} +.text-grey-12 { + color: #eee !important; +} +.text-grey-13 { + color: #bdbdbd !important; +} +.text-grey-14 { + color: #616161 !important; +} +.text-blue-grey { + color: #607d8b !important; +} +.text-blue-grey-1 { + color: #eceff1 !important; +} +.text-blue-grey-2 { + color: #cfd8dc !important; +} +.text-blue-grey-3 { + color: #b0bec5 !important; +} +.text-blue-grey-4 { + color: #90a4ae !important; +} +.text-blue-grey-5 { + color: #78909c !important; +} +.text-blue-grey-6 { + color: #607d8b !important; +} +.text-blue-grey-7 { + color: #546e7a !important; +} +.text-blue-grey-8 { + color: #455a64 !important; +} +.text-blue-grey-9 { + color: #37474f !important; +} +.text-blue-grey-10 { + color: #263238 !important; +} +.text-blue-grey-11 { + color: #cfd8dc !important; +} +.text-blue-grey-12 { + color: #b0bec5 !important; +} +.text-blue-grey-13 { + color: #78909c !important; +} +.text-blue-grey-14 { + color: #455a64 !important; +} +[dir] .bg-red { + background: #f44336 !important; +} +[dir] .bg-red-1 { + background: #ffebee !important; +} +[dir] .bg-red-2 { + background: #ffcdd2 !important; +} +[dir] .bg-red-3 { + background: #ef9a9a !important; +} +[dir] .bg-red-4 { + background: #e57373 !important; +} +[dir] .bg-red-5 { + background: #ef5350 !important; +} +[dir] .bg-red-6 { + background: #f44336 !important; +} +[dir] .bg-red-7 { + background: #e53935 !important; +} +[dir] .bg-red-8 { + background: #d32f2f !important; +} +[dir] .bg-red-9 { + background: #c62828 !important; +} +[dir] .bg-red-10 { + background: #b71c1c !important; +} +[dir] .bg-red-11 { + background: #ff8a80 !important; +} +[dir] .bg-red-12 { + background: #ff5252 !important; +} +[dir] .bg-red-13 { + background: #ff1744 !important; +} +[dir] .bg-red-14 { + background: #d50000 !important; +} +[dir] .bg-pink { + background: #e91e63 !important; +} +[dir] .bg-pink-1 { + background: #fce4ec !important; +} +[dir] .bg-pink-2 { + background: #f8bbd0 !important; +} +[dir] .bg-pink-3 { + background: #f48fb1 !important; +} +[dir] .bg-pink-4 { + background: #f06292 !important; +} +[dir] .bg-pink-5 { + background: #ec407a !important; +} +[dir] .bg-pink-6 { + background: #e91e63 !important; +} +[dir] .bg-pink-7 { + background: #d81b60 !important; +} +[dir] .bg-pink-8 { + background: #c2185b !important; +} +[dir] .bg-pink-9 { + background: #ad1457 !important; +} +[dir] .bg-pink-10 { + background: #880e4f !important; +} +[dir] .bg-pink-11 { + background: #ff80ab !important; +} +[dir] .bg-pink-12 { + background: #ff4081 !important; +} +[dir] .bg-pink-13 { + background: #f50057 !important; +} +[dir] .bg-pink-14 { + background: #c51162 !important; +} +[dir] .bg-purple { + background: #9c27b0 !important; +} +[dir] .bg-purple-1 { + background: #f3e5f5 !important; +} +[dir] .bg-purple-2 { + background: #e1bee7 !important; +} +[dir] .bg-purple-3 { + background: #ce93d8 !important; +} +[dir] .bg-purple-4 { + background: #ba68c8 !important; +} +[dir] .bg-purple-5 { + background: #ab47bc !important; +} +[dir] .bg-purple-6 { + background: #9c27b0 !important; +} +[dir] .bg-purple-7 { + background: #8e24aa !important; +} +[dir] .bg-purple-8 { + background: #7b1fa2 !important; +} +[dir] .bg-purple-9 { + background: #6a1b9a !important; +} +[dir] .bg-purple-10 { + background: #4a148c !important; +} +[dir] .bg-purple-11 { + background: #ea80fc !important; +} +[dir] .bg-purple-12 { + background: #e040fb !important; +} +[dir] .bg-purple-13 { + background: #d500f9 !important; +} +[dir] .bg-purple-14 { + background: #a0f !important; +} +[dir] .bg-deep-purple { + background: #673ab7 !important; +} +[dir] .bg-deep-purple-1 { + background: #ede7f6 !important; +} +[dir] .bg-deep-purple-2 { + background: #d1c4e9 !important; +} +[dir] .bg-deep-purple-3 { + background: #b39ddb !important; +} +[dir] .bg-deep-purple-4 { + background: #9575cd !important; +} +[dir] .bg-deep-purple-5 { + background: #7e57c2 !important; +} +[dir] .bg-deep-purple-6 { + background: #673ab7 !important; +} +[dir] .bg-deep-purple-7 { + background: #5e35b1 !important; +} +[dir] .bg-deep-purple-8 { + background: #512da8 !important; +} +[dir] .bg-deep-purple-9 { + background: #4527a0 !important; +} +[dir] .bg-deep-purple-10 { + background: #311b92 !important; +} +[dir] .bg-deep-purple-11 { + background: #b388ff !important; +} +[dir] .bg-deep-purple-12 { + background: #7c4dff !important; +} +[dir] .bg-deep-purple-13 { + background: #651fff !important; +} +[dir] .bg-deep-purple-14 { + background: #6200ea !important; +} +[dir] .bg-indigo { + background: #3f51b5 !important; +} +[dir] .bg-indigo-1 { + background: #e8eaf6 !important; +} +[dir] .bg-indigo-2 { + background: #c5cae9 !important; +} +[dir] .bg-indigo-3 { + background: #9fa8da !important; +} +[dir] .bg-indigo-4 { + background: #7986cb !important; +} +[dir] .bg-indigo-5 { + background: #5c6bc0 !important; +} +[dir] .bg-indigo-6 { + background: #3f51b5 !important; +} +[dir] .bg-indigo-7 { + background: #3949ab !important; +} +[dir] .bg-indigo-8 { + background: #303f9f !important; +} +[dir] .bg-indigo-9 { + background: #283593 !important; +} +[dir] .bg-indigo-10 { + background: #1a237e !important; +} +[dir] .bg-indigo-11 { + background: #8c9eff !important; +} +[dir] .bg-indigo-12 { + background: #536dfe !important; +} +[dir] .bg-indigo-13 { + background: #3d5afe !important; +} +[dir] .bg-indigo-14 { + background: #304ffe !important; +} +[dir] .bg-blue { + background: #2196f3 !important; +} +[dir] .bg-blue-1 { + background: #e3f2fd !important; +} +[dir] .bg-blue-2 { + background: #bbdefb !important; +} +[dir] .bg-blue-3 { + background: #90caf9 !important; +} +[dir] .bg-blue-4 { + background: #64b5f6 !important; +} +[dir] .bg-blue-5 { + background: #42a5f5 !important; +} +[dir] .bg-blue-6 { + background: #2196f3 !important; +} +[dir] .bg-blue-7 { + background: #1e88e5 !important; +} +[dir] .bg-blue-8 { + background: #1976d2 !important; +} +[dir] .bg-blue-9 { + background: #1565c0 !important; +} +[dir] .bg-blue-10 { + background: #0d47a1 !important; +} +[dir] .bg-blue-11 { + background: #82b1ff !important; +} +[dir] .bg-blue-12 { + background: #448aff !important; +} +[dir] .bg-blue-13 { + background: #2979ff !important; +} +[dir] .bg-blue-14 { + background: #2962ff !important; +} +[dir] .bg-light-blue { + background: #03a9f4 !important; +} +[dir] .bg-light-blue-1 { + background: #e1f5fe !important; +} +[dir] .bg-light-blue-2 { + background: #b3e5fc !important; +} +[dir] .bg-light-blue-3 { + background: #81d4fa !important; +} +[dir] .bg-light-blue-4 { + background: #4fc3f7 !important; +} +[dir] .bg-light-blue-5 { + background: #29b6f6 !important; +} +[dir] .bg-light-blue-6 { + background: #03a9f4 !important; +} +[dir] .bg-light-blue-7 { + background: #039be5 !important; +} +[dir] .bg-light-blue-8 { + background: #0288d1 !important; +} +[dir] .bg-light-blue-9 { + background: #0277bd !important; +} +[dir] .bg-light-blue-10 { + background: #01579b !important; +} +[dir] .bg-light-blue-11 { + background: #80d8ff !important; +} +[dir] .bg-light-blue-12 { + background: #40c4ff !important; +} +[dir] .bg-light-blue-13 { + background: #00b0ff !important; +} +[dir] .bg-light-blue-14 { + background: #0091ea !important; +} +[dir] .bg-cyan { + background: #00bcd4 !important; +} +[dir] .bg-cyan-1 { + background: #e0f7fa !important; +} +[dir] .bg-cyan-2 { + background: #b2ebf2 !important; +} +[dir] .bg-cyan-3 { + background: #80deea !important; +} +[dir] .bg-cyan-4 { + background: #4dd0e1 !important; +} +[dir] .bg-cyan-5 { + background: #26c6da !important; +} +[dir] .bg-cyan-6 { + background: #00bcd4 !important; +} +[dir] .bg-cyan-7 { + background: #00acc1 !important; +} +[dir] .bg-cyan-8 { + background: #0097a7 !important; +} +[dir] .bg-cyan-9 { + background: #00838f !important; +} +[dir] .bg-cyan-10 { + background: #006064 !important; +} +[dir] .bg-cyan-11 { + background: #84ffff !important; +} +[dir] .bg-cyan-12 { + background: #18ffff !important; +} +[dir] .bg-cyan-13 { + background: #00e5ff !important; +} +[dir] .bg-cyan-14 { + background: #00b8d4 !important; +} +[dir] .bg-teal { + background: #009688 !important; +} +[dir] .bg-teal-1 { + background: #e0f2f1 !important; +} +[dir] .bg-teal-2 { + background: #b2dfdb !important; +} +[dir] .bg-teal-3 { + background: #80cbc4 !important; +} +[dir] .bg-teal-4 { + background: #4db6ac !important; +} +[dir] .bg-teal-5 { + background: #26a69a !important; +} +[dir] .bg-teal-6 { + background: #009688 !important; +} +[dir] .bg-teal-7 { + background: #00897b !important; +} +[dir] .bg-teal-8 { + background: #00796b !important; +} +[dir] .bg-teal-9 { + background: #00695c !important; +} +[dir] .bg-teal-10 { + background: #004d40 !important; +} +[dir] .bg-teal-11 { + background: #a7ffeb !important; +} +[dir] .bg-teal-12 { + background: #64ffda !important; +} +[dir] .bg-teal-13 { + background: #1de9b6 !important; +} +[dir] .bg-teal-14 { + background: #00bfa5 !important; +} +[dir] .bg-green { + background: #4caf50 !important; +} +[dir] .bg-green-1 { + background: #e8f5e9 !important; +} +[dir] .bg-green-2 { + background: #c8e6c9 !important; +} +[dir] .bg-green-3 { + background: #a5d6a7 !important; +} +[dir] .bg-green-4 { + background: #81c784 !important; +} +[dir] .bg-green-5 { + background: #66bb6a !important; +} +[dir] .bg-green-6 { + background: #4caf50 !important; +} +[dir] .bg-green-7 { + background: #43a047 !important; +} +[dir] .bg-green-8 { + background: #388e3c !important; +} +[dir] .bg-green-9 { + background: #2e7d32 !important; +} +[dir] .bg-green-10 { + background: #1b5e20 !important; +} +[dir] .bg-green-11 { + background: #b9f6ca !important; +} +[dir] .bg-green-12 { + background: #69f0ae !important; +} +[dir] .bg-green-13 { + background: #00e676 !important; +} +[dir] .bg-green-14 { + background: #00c853 !important; +} +[dir] .bg-light-green { + background: #8bc34a !important; +} +[dir] .bg-light-green-1 { + background: #f1f8e9 !important; +} +[dir] .bg-light-green-2 { + background: #dcedc8 !important; +} +[dir] .bg-light-green-3 { + background: #c5e1a5 !important; +} +[dir] .bg-light-green-4 { + background: #aed581 !important; +} +[dir] .bg-light-green-5 { + background: #9ccc65 !important; +} +[dir] .bg-light-green-6 { + background: #8bc34a !important; +} +[dir] .bg-light-green-7 { + background: #7cb342 !important; +} +[dir] .bg-light-green-8 { + background: #689f38 !important; +} +[dir] .bg-light-green-9 { + background: #558b2f !important; +} +[dir] .bg-light-green-10 { + background: #33691e !important; +} +[dir] .bg-light-green-11 { + background: #ccff90 !important; +} +[dir] .bg-light-green-12 { + background: #b2ff59 !important; +} +[dir] .bg-light-green-13 { + background: #76ff03 !important; +} +[dir] .bg-light-green-14 { + background: #64dd17 !important; +} +[dir] .bg-lime { + background: #cddc39 !important; +} +[dir] .bg-lime-1 { + background: #f9fbe7 !important; +} +[dir] .bg-lime-2 { + background: #f0f4c3 !important; +} +[dir] .bg-lime-3 { + background: #e6ee9c !important; +} +[dir] .bg-lime-4 { + background: #dce775 !important; +} +[dir] .bg-lime-5 { + background: #d4e157 !important; +} +[dir] .bg-lime-6 { + background: #cddc39 !important; +} +[dir] .bg-lime-7 { + background: #c0ca33 !important; +} +[dir] .bg-lime-8 { + background: #afb42b !important; +} +[dir] .bg-lime-9 { + background: #9e9d24 !important; +} +[dir] .bg-lime-10 { + background: #827717 !important; +} +[dir] .bg-lime-11 { + background: #f4ff81 !important; +} +[dir] .bg-lime-12 { + background: #eeff41 !important; +} +[dir] .bg-lime-13 { + background: #c6ff00 !important; +} +[dir] .bg-lime-14 { + background: #aeea00 !important; +} +[dir] .bg-yellow { + background: #ffeb3b !important; +} +[dir] .bg-yellow-1 { + background: #fffde7 !important; +} +[dir] .bg-yellow-2 { + background: #fff9c4 !important; +} +[dir] .bg-yellow-3 { + background: #fff59d !important; +} +[dir] .bg-yellow-4 { + background: #fff176 !important; +} +[dir] .bg-yellow-5 { + background: #ffee58 !important; +} +[dir] .bg-yellow-6 { + background: #ffeb3b !important; +} +[dir] .bg-yellow-7 { + background: #fdd835 !important; +} +[dir] .bg-yellow-8 { + background: #fbc02d !important; +} +[dir] .bg-yellow-9 { + background: #f9a825 !important; +} +[dir] .bg-yellow-10 { + background: #f57f17 !important; +} +[dir] .bg-yellow-11 { + background: #ffff8d !important; +} +[dir] .bg-yellow-12 { + background: #ff0 !important; +} +[dir] .bg-yellow-13 { + background: #ffea00 !important; +} +[dir] .bg-yellow-14 { + background: #ffd600 !important; +} +[dir] .bg-amber { + background: #ffc107 !important; +} +[dir] .bg-amber-1 { + background: #fff8e1 !important; +} +[dir] .bg-amber-2 { + background: #ffecb3 !important; +} +[dir] .bg-amber-3 { + background: #ffe082 !important; +} +[dir] .bg-amber-4 { + background: #ffd54f !important; +} +[dir] .bg-amber-5 { + background: #ffca28 !important; +} +[dir] .bg-amber-6 { + background: #ffc107 !important; +} +[dir] .bg-amber-7 { + background: #ffb300 !important; +} +[dir] .bg-amber-8 { + background: #ffa000 !important; +} +[dir] .bg-amber-9 { + background: #ff8f00 !important; +} +[dir] .bg-amber-10 { + background: #ff6f00 !important; +} +[dir] .bg-amber-11 { + background: #ffe57f !important; +} +[dir] .bg-amber-12 { + background: #ffd740 !important; +} +[dir] .bg-amber-13 { + background: #ffc400 !important; +} +[dir] .bg-amber-14 { + background: #ffab00 !important; +} +[dir] .bg-orange { + background: #ff9800 !important; +} +[dir] .bg-orange-1 { + background: #fff3e0 !important; +} +[dir] .bg-orange-2 { + background: #ffe0b2 !important; +} +[dir] .bg-orange-3 { + background: #ffcc80 !important; +} +[dir] .bg-orange-4 { + background: #ffb74d !important; +} +[dir] .bg-orange-5 { + background: #ffa726 !important; +} +[dir] .bg-orange-6 { + background: #ff9800 !important; +} +[dir] .bg-orange-7 { + background: #fb8c00 !important; +} +[dir] .bg-orange-8 { + background: #f57c00 !important; +} +[dir] .bg-orange-9 { + background: #ef6c00 !important; +} +[dir] .bg-orange-10 { + background: #e65100 !important; +} +[dir] .bg-orange-11 { + background: #ffd180 !important; +} +[dir] .bg-orange-12 { + background: #ffab40 !important; +} +[dir] .bg-orange-13 { + background: #ff9100 !important; +} +[dir] .bg-orange-14 { + background: #ff6d00 !important; +} +[dir] .bg-deep-orange { + background: #ff5722 !important; +} +[dir] .bg-deep-orange-1 { + background: #fbe9e7 !important; +} +[dir] .bg-deep-orange-2 { + background: #ffccbc !important; +} +[dir] .bg-deep-orange-3 { + background: #ffab91 !important; +} +[dir] .bg-deep-orange-4 { + background: #ff8a65 !important; +} +[dir] .bg-deep-orange-5 { + background: #ff7043 !important; +} +[dir] .bg-deep-orange-6 { + background: #ff5722 !important; +} +[dir] .bg-deep-orange-7 { + background: #f4511e !important; +} +[dir] .bg-deep-orange-8 { + background: #e64a19 !important; +} +[dir] .bg-deep-orange-9 { + background: #d84315 !important; +} +[dir] .bg-deep-orange-10 { + background: #bf360c !important; +} +[dir] .bg-deep-orange-11 { + background: #ff9e80 !important; +} +[dir] .bg-deep-orange-12 { + background: #ff6e40 !important; +} +[dir] .bg-deep-orange-13 { + background: #ff3d00 !important; +} +[dir] .bg-deep-orange-14 { + background: #dd2c00 !important; +} +[dir] .bg-brown { + background: #795548 !important; +} +[dir] .bg-brown-1 { + background: #efebe9 !important; +} +[dir] .bg-brown-2 { + background: #d7ccc8 !important; +} +[dir] .bg-brown-3 { + background: #bcaaa4 !important; +} +[dir] .bg-brown-4 { + background: #a1887f !important; +} +[dir] .bg-brown-5 { + background: #8d6e63 !important; +} +[dir] .bg-brown-6 { + background: #795548 !important; +} +[dir] .bg-brown-7 { + background: #6d4c41 !important; +} +[dir] .bg-brown-8 { + background: #5d4037 !important; +} +[dir] .bg-brown-9 { + background: #4e342e !important; +} +[dir] .bg-brown-10 { + background: #3e2723 !important; +} +[dir] .bg-brown-11 { + background: #d7ccc8 !important; +} +[dir] .bg-brown-12 { + background: #bcaaa4 !important; +} +[dir] .bg-brown-13 { + background: #8d6e63 !important; +} +[dir] .bg-brown-14 { + background: #5d4037 !important; +} +[dir] .bg-grey { + background: #9e9e9e !important; +} +[dir] .bg-grey-1 { + background: #fafafa !important; +} +[dir] .bg-grey-2 { + background: #f5f5f5 !important; +} +[dir] .bg-grey-3 { + background: #eee !important; +} +[dir] .bg-grey-4 { + background: #e0e0e0 !important; +} +[dir] .bg-grey-5 { + background: #bdbdbd !important; +} +[dir] .bg-grey-6 { + background: #9e9e9e !important; +} +[dir] .bg-grey-7 { + background: #757575 !important; +} +[dir] .bg-grey-8 { + background: #616161 !important; +} +[dir] .bg-grey-9 { + background: #424242 !important; +} +[dir] .bg-grey-10 { + background: #212121 !important; +} +[dir] .bg-grey-11 { + background: #f5f5f5 !important; +} +[dir] .bg-grey-12 { + background: #eee !important; +} +[dir] .bg-grey-13 { + background: #bdbdbd !important; +} +[dir] .bg-grey-14 { + background: #616161 !important; +} +[dir] .bg-blue-grey { + background: #607d8b !important; +} +[dir] .bg-blue-grey-1 { + background: #eceff1 !important; +} +[dir] .bg-blue-grey-2 { + background: #cfd8dc !important; +} +[dir] .bg-blue-grey-3 { + background: #b0bec5 !important; +} +[dir] .bg-blue-grey-4 { + background: #90a4ae !important; +} +[dir] .bg-blue-grey-5 { + background: #78909c !important; +} +[dir] .bg-blue-grey-6 { + background: #607d8b !important; +} +[dir] .bg-blue-grey-7 { + background: #546e7a !important; +} +[dir] .bg-blue-grey-8 { + background: #455a64 !important; +} +[dir] .bg-blue-grey-9 { + background: #37474f !important; +} +[dir] .bg-blue-grey-10 { + background: #263238 !important; +} +[dir] .bg-blue-grey-11 { + background: #cfd8dc !important; +} +[dir] .bg-blue-grey-12 { + background: #b0bec5 !important; +} +[dir] .bg-blue-grey-13 { + background: #78909c !important; +} +[dir] .bg-blue-grey-14 { + background: #455a64 !important; +} +.shadow-transition { + transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1) !important; +} +[dir] .shadow-1 { + box-shadow: 0 1px 3px rgba(0,0,0,0.2), 0 1px 1px rgba(0,0,0,0.14), 0 2px 1px -1px rgba(0,0,0,0.12); +} +[dir] .shadow-up-1 { + box-shadow: 0 -1px 3px rgba(0,0,0,0.2), 0 -1px 1px rgba(0,0,0,0.14), 0 -2px 1px -1px rgba(0,0,0,0.12); +} +[dir] .shadow-2 { + box-shadow: 0 1px 5px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12); +} +[dir] .shadow-up-2 { + box-shadow: 0 -1px 5px rgba(0,0,0,0.2), 0 -2px 2px rgba(0,0,0,0.14), 0 -3px 1px -2px rgba(0,0,0,0.12); +} +[dir] .shadow-3 { + box-shadow: 0 1px 8px rgba(0,0,0,0.2), 0 3px 4px rgba(0,0,0,0.14), 0 3px 3px -2px rgba(0,0,0,0.12); +} +[dir] .shadow-up-3 { + box-shadow: 0 -1px 8px rgba(0,0,0,0.2), 0 -3px 4px rgba(0,0,0,0.14), 0 -3px 3px -2px rgba(0,0,0,0.12); +} +[dir] .shadow-4 { + box-shadow: 0 2px 4px -1px rgba(0,0,0,0.2), 0 4px 5px rgba(0,0,0,0.14), 0 1px 10px rgba(0,0,0,0.12); +} +[dir] .shadow-up-4 { + box-shadow: 0 -2px 4px -1px rgba(0,0,0,0.2), 0 -4px 5px rgba(0,0,0,0.14), 0 -1px 10px rgba(0,0,0,0.12); +} +[dir] .shadow-5 { + box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 5px 8px rgba(0,0,0,0.14), 0 1px 14px rgba(0,0,0,0.12); +} +[dir] .shadow-up-5 { + box-shadow: 0 -3px 5px -1px rgba(0,0,0,0.2), 0 -5px 8px rgba(0,0,0,0.14), 0 -1px 14px rgba(0,0,0,0.12); +} +[dir] .shadow-6 { + box-shadow: 0 3px 5px -1px rgba(0,0,0,0.2), 0 6px 10px rgba(0,0,0,0.14), 0 1px 18px rgba(0,0,0,0.12); +} +[dir] .shadow-up-6 { + box-shadow: 0 -3px 5px -1px rgba(0,0,0,0.2), 0 -6px 10px rgba(0,0,0,0.14), 0 -1px 18px rgba(0,0,0,0.12); +} +[dir] .shadow-7 { + box-shadow: 0 4px 5px -2px rgba(0,0,0,0.2), 0 7px 10px 1px rgba(0,0,0,0.14), 0 2px 16px 1px rgba(0,0,0,0.12); +} +[dir] .shadow-up-7 { + box-shadow: 0 -4px 5px -2px rgba(0,0,0,0.2), 0 -7px 10px 1px rgba(0,0,0,0.14), 0 -2px 16px 1px rgba(0,0,0,0.12); +} +[dir] .shadow-8 { + box-shadow: 0 5px 5px -3px rgba(0,0,0,0.2), 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12); +} +[dir] .shadow-up-8 { + box-shadow: 0 -5px 5px -3px rgba(0,0,0,0.2), 0 -8px 10px 1px rgba(0,0,0,0.14), 0 -3px 14px 2px rgba(0,0,0,0.12); +} +[dir] .shadow-9 { + box-shadow: 0 5px 6px -3px rgba(0,0,0,0.2), 0 9px 12px 1px rgba(0,0,0,0.14), 0 3px 16px 2px rgba(0,0,0,0.12); +} +[dir] .shadow-up-9 { + box-shadow: 0 -5px 6px -3px rgba(0,0,0,0.2), 0 -9px 12px 1px rgba(0,0,0,0.14), 0 -3px 16px 2px rgba(0,0,0,0.12); +} +[dir] .shadow-10 { + box-shadow: 0 6px 6px -3px rgba(0,0,0,0.2), 0 10px 14px 1px rgba(0,0,0,0.14), 0 4px 18px 3px rgba(0,0,0,0.12); +} +[dir] .shadow-up-10 { + box-shadow: 0 -6px 6px -3px rgba(0,0,0,0.2), 0 -10px 14px 1px rgba(0,0,0,0.14), 0 -4px 18px 3px rgba(0,0,0,0.12); +} +[dir] .shadow-11 { + box-shadow: 0 6px 7px -4px rgba(0,0,0,0.2), 0 11px 15px 1px rgba(0,0,0,0.14), 0 4px 20px 3px rgba(0,0,0,0.12); +} +[dir] .shadow-up-11 { + box-shadow: 0 -6px 7px -4px rgba(0,0,0,0.2), 0 -11px 15px 1px rgba(0,0,0,0.14), 0 -4px 20px 3px rgba(0,0,0,0.12); +} +[dir] .shadow-12 { + box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 12px 17px 2px rgba(0,0,0,0.14), 0 5px 22px 4px rgba(0,0,0,0.12); +} +[dir] .shadow-up-12 { + box-shadow: 0 -7px 8px -4px rgba(0,0,0,0.2), 0 -12px 17px 2px rgba(0,0,0,0.14), 0 -5px 22px 4px rgba(0,0,0,0.12); +} +[dir] .shadow-13 { + box-shadow: 0 7px 8px -4px rgba(0,0,0,0.2), 0 13px 19px 2px rgba(0,0,0,0.14), 0 5px 24px 4px rgba(0,0,0,0.12); +} +[dir] .shadow-up-13 { + box-shadow: 0 -7px 8px -4px rgba(0,0,0,0.2), 0 -13px 19px 2px rgba(0,0,0,0.14), 0 -5px 24px 4px rgba(0,0,0,0.12); +} +[dir] .shadow-14 { + box-shadow: 0 7px 9px -4px rgba(0,0,0,0.2), 0 14px 21px 2px rgba(0,0,0,0.14), 0 5px 26px 4px rgba(0,0,0,0.12); +} +[dir] .shadow-up-14 { + box-shadow: 0 -7px 9px -4px rgba(0,0,0,0.2), 0 -14px 21px 2px rgba(0,0,0,0.14), 0 -5px 26px 4px rgba(0,0,0,0.12); +} +[dir] .shadow-15 { + box-shadow: 0 8px 9px -5px rgba(0,0,0,0.2), 0 15px 22px 2px rgba(0,0,0,0.14), 0 6px 28px 5px rgba(0,0,0,0.12); +} +[dir] .shadow-up-15 { + box-shadow: 0 -8px 9px -5px rgba(0,0,0,0.2), 0 -15px 22px 2px rgba(0,0,0,0.14), 0 -6px 28px 5px rgba(0,0,0,0.12); +} +[dir] .shadow-16 { + box-shadow: 0 8px 10px -5px rgba(0,0,0,0.2), 0 16px 24px 2px rgba(0,0,0,0.14), 0 6px 30px 5px rgba(0,0,0,0.12); +} +[dir] .shadow-up-16 { + box-shadow: 0 -8px 10px -5px rgba(0,0,0,0.2), 0 -16px 24px 2px rgba(0,0,0,0.14), 0 -6px 30px 5px rgba(0,0,0,0.12); +} +[dir] .shadow-17 { + box-shadow: 0 8px 11px -5px rgba(0,0,0,0.2), 0 17px 26px 2px rgba(0,0,0,0.14), 0 6px 32px 5px rgba(0,0,0,0.12); +} +[dir] .shadow-up-17 { + box-shadow: 0 -8px 11px -5px rgba(0,0,0,0.2), 0 -17px 26px 2px rgba(0,0,0,0.14), 0 -6px 32px 5px rgba(0,0,0,0.12); +} +[dir] .shadow-18 { + box-shadow: 0 9px 11px -5px rgba(0,0,0,0.2), 0 18px 28px 2px rgba(0,0,0,0.14), 0 7px 34px 6px rgba(0,0,0,0.12); +} +[dir] .shadow-up-18 { + box-shadow: 0 -9px 11px -5px rgba(0,0,0,0.2), 0 -18px 28px 2px rgba(0,0,0,0.14), 0 -7px 34px 6px rgba(0,0,0,0.12); +} +[dir] .shadow-19 { + box-shadow: 0 9px 12px -6px rgba(0,0,0,0.2), 0 19px 29px 2px rgba(0,0,0,0.14), 0 7px 36px 6px rgba(0,0,0,0.12); +} +[dir] .shadow-up-19 { + box-shadow: 0 -9px 12px -6px rgba(0,0,0,0.2), 0 -19px 29px 2px rgba(0,0,0,0.14), 0 -7px 36px 6px rgba(0,0,0,0.12); +} +[dir] .shadow-20 { + box-shadow: 0 10px 13px -6px rgba(0,0,0,0.2), 0 20px 31px 3px rgba(0,0,0,0.14), 0 8px 38px 7px rgba(0,0,0,0.12); +} +[dir] .shadow-up-20 { + box-shadow: 0 -10px 13px -6px rgba(0,0,0,0.2), 0 -20px 31px 3px rgba(0,0,0,0.14), 0 -8px 38px 7px rgba(0,0,0,0.12); +} +[dir] .shadow-21 { + box-shadow: 0 10px 13px -6px rgba(0,0,0,0.2), 0 21px 33px 3px rgba(0,0,0,0.14), 0 8px 40px 7px rgba(0,0,0,0.12); +} +[dir] .shadow-up-21 { + box-shadow: 0 -10px 13px -6px rgba(0,0,0,0.2), 0 -21px 33px 3px rgba(0,0,0,0.14), 0 -8px 40px 7px rgba(0,0,0,0.12); +} +[dir] .shadow-22 { + box-shadow: 0 10px 14px -6px rgba(0,0,0,0.2), 0 22px 35px 3px rgba(0,0,0,0.14), 0 8px 42px 7px rgba(0,0,0,0.12); +} +[dir] .shadow-up-22 { + box-shadow: 0 -10px 14px -6px rgba(0,0,0,0.2), 0 -22px 35px 3px rgba(0,0,0,0.14), 0 -8px 42px 7px rgba(0,0,0,0.12); +} +[dir] .shadow-23 { + box-shadow: 0 11px 14px -7px rgba(0,0,0,0.2), 0 23px 36px 3px rgba(0,0,0,0.14), 0 9px 44px 8px rgba(0,0,0,0.12); +} +[dir] .shadow-up-23 { + box-shadow: 0 -11px 14px -7px rgba(0,0,0,0.2), 0 -23px 36px 3px rgba(0,0,0,0.14), 0 -9px 44px 8px rgba(0,0,0,0.12); +} +[dir] .shadow-24 { + box-shadow: 0 11px 15px -7px rgba(0,0,0,0.2), 0 24px 38px 3px rgba(0,0,0,0.14), 0 9px 46px 8px rgba(0,0,0,0.12); +} +[dir] .shadow-up-24 { + box-shadow: 0 -11px 15px -7px rgba(0,0,0,0.2), 0 -24px 38px 3px rgba(0,0,0,0.14), 0 -9px 46px 8px rgba(0,0,0,0.12); +} +[dir] .no-shadow, [dir] .shadow-0 { + box-shadow: none !important; +} +[dir] .inset-shadow { + box-shadow: 0 7px 9px -7px rgba(0,0,0,0.7) inset !important; +} +[dir] .inset-shadow-down { + box-shadow: 0 -7px 9px -7px rgba(0,0,0,0.7) inset !important; +} +.z-marginals { + z-index: 2000; +} +.z-notify { + z-index: 9500; +} +.z-fullscreen { + z-index: 6000; +} +.z-inherit { + z-index: inherit !important; +} +.row, +.column, +.flex { + display: flex; + flex-wrap: wrap; +} +.row.inline, +.column.inline, +.flex.inline { + display: inline-flex; +} +.row.reverse { + flex-direction: row-reverse; +} +.column { + flex-direction: column; +} +.column.reverse { + flex-direction: column-reverse; +} +.wrap { + flex-wrap: wrap; +} +.no-wrap { + flex-wrap: nowrap; +} +.reverse-wrap { + flex-wrap: wrap-reverse; +} +.order-first { + order: -10000; +} +.order-last { + order: 10000; +} +.order-none { + order: 0; +} +.justify-start { + justify-content: flex-start; +} +.justify-end { + justify-content: flex-end; +} +.justify-center, +.flex-center { + justify-content: center; +} +.justify-between { + justify-content: space-between; +} +.justify-around { + justify-content: space-around; +} +.justify-evenly { + justify-content: space-evenly; +} +.items-start { + align-items: flex-start; +} +.items-end { + align-items: flex-end; +} +.items-center, +.flex-center { + align-items: center; +} +.items-baseline { + align-items: baseline; +} +.items-stretch { + align-items: stretch; +} +.content-start { + align-content: flex-start; +} +.content-end { + align-content: flex-end; +} +.content-center { + align-content: center; +} +.content-stretch { + align-content: stretch; +} +.content-between { + align-content: space-between; +} +.content-around { + align-content: space-around; +} +.self-start { + align-self: flex-start; +} +.self-end { + align-self: flex-end; +} +.self-center { + align-self: center; +} +.self-baseline { + align-self: baseline; +} +.self-stretch { + align-self: stretch; +} +[dir=ltr] .q-gutter-x-none, [dir=ltr] .q-gutter-none { + margin-left: 0; +} +[dir=rtl] .q-gutter-x-none, [dir=rtl] .q-gutter-none { + margin-right: 0; +} +[dir=ltr] .q-gutter-x-none > *, [dir=ltr] .q-gutter-none > * { + margin-left: 0; +} +[dir=rtl] .q-gutter-x-none > *, [dir=rtl] .q-gutter-none > * { + margin-right: 0; +} +[dir] .q-gutter-y-none, [dir] .q-gutter-none { + margin-top: 0; +} +[dir] .q-gutter-y-none > *, [dir] .q-gutter-none > * { + margin-top: 0; +} +[dir=ltr] .q-col-gutter-x-none, [dir=ltr] .q-col-gutter-none { + margin-left: 0; +} +[dir=rtl] .q-col-gutter-x-none, [dir=rtl] .q-col-gutter-none { + margin-right: 0; +} +[dir=ltr] .q-col-gutter-x-none > *, [dir=ltr] .q-col-gutter-none > * { + padding-left: 0; +} +[dir=rtl] .q-col-gutter-x-none > *, [dir=rtl] .q-col-gutter-none > * { + padding-right: 0; +} +[dir] .q-col-gutter-y-none, [dir] .q-col-gutter-none { + margin-top: 0; +} +[dir] .q-col-gutter-y-none > *, [dir] .q-col-gutter-none > * { + padding-top: 0; +} +[dir=ltr] .q-gutter-x-xs, [dir=ltr] .q-gutter-xs { + margin-left: -4px; +} +[dir=rtl] .q-gutter-x-xs, [dir=rtl] .q-gutter-xs { + margin-right: -4px; +} +[dir=ltr] .q-gutter-x-xs > *, [dir=ltr] .q-gutter-xs > * { + margin-left: 4px; +} +[dir=rtl] .q-gutter-x-xs > *, [dir=rtl] .q-gutter-xs > * { + margin-right: 4px; +} +[dir] .q-gutter-y-xs, [dir] .q-gutter-xs { + margin-top: -4px; +} +[dir] .q-gutter-y-xs > *, [dir] .q-gutter-xs > * { + margin-top: 4px; +} +[dir=ltr] .q-col-gutter-x-xs, [dir=ltr] .q-col-gutter-xs { + margin-left: -4px; +} +[dir=rtl] .q-col-gutter-x-xs, [dir=rtl] .q-col-gutter-xs { + margin-right: -4px; +} +[dir=ltr] .q-col-gutter-x-xs > *, [dir=ltr] .q-col-gutter-xs > * { + padding-left: 4px; +} +[dir=rtl] .q-col-gutter-x-xs > *, [dir=rtl] .q-col-gutter-xs > * { + padding-right: 4px; +} +[dir] .q-col-gutter-y-xs, [dir] .q-col-gutter-xs { + margin-top: -4px; +} +[dir] .q-col-gutter-y-xs > *, [dir] .q-col-gutter-xs > * { + padding-top: 4px; +} +[dir=ltr] .q-gutter-x-sm, [dir=ltr] .q-gutter-sm { + margin-left: -8px; +} +[dir=rtl] .q-gutter-x-sm, [dir=rtl] .q-gutter-sm { + margin-right: -8px; +} +[dir=ltr] .q-gutter-x-sm > *, [dir=ltr] .q-gutter-sm > * { + margin-left: 8px; +} +[dir=rtl] .q-gutter-x-sm > *, [dir=rtl] .q-gutter-sm > * { + margin-right: 8px; +} +[dir] .q-gutter-y-sm, [dir] .q-gutter-sm { + margin-top: -8px; +} +[dir] .q-gutter-y-sm > *, [dir] .q-gutter-sm > * { + margin-top: 8px; +} +[dir=ltr] .q-col-gutter-x-sm, [dir=ltr] .q-col-gutter-sm { + margin-left: -8px; +} +[dir=rtl] .q-col-gutter-x-sm, [dir=rtl] .q-col-gutter-sm { + margin-right: -8px; +} +[dir=ltr] .q-col-gutter-x-sm > *, [dir=ltr] .q-col-gutter-sm > * { + padding-left: 8px; +} +[dir=rtl] .q-col-gutter-x-sm > *, [dir=rtl] .q-col-gutter-sm > * { + padding-right: 8px; +} +[dir] .q-col-gutter-y-sm, [dir] .q-col-gutter-sm { + margin-top: -8px; +} +[dir] .q-col-gutter-y-sm > *, [dir] .q-col-gutter-sm > * { + padding-top: 8px; +} +[dir=ltr] .q-gutter-x-md, [dir=ltr] .q-gutter-md { + margin-left: -16px; +} +[dir=rtl] .q-gutter-x-md, [dir=rtl] .q-gutter-md { + margin-right: -16px; +} +[dir=ltr] .q-gutter-x-md > *, [dir=ltr] .q-gutter-md > * { + margin-left: 16px; +} +[dir=rtl] .q-gutter-x-md > *, [dir=rtl] .q-gutter-md > * { + margin-right: 16px; +} +[dir] .q-gutter-y-md, [dir] .q-gutter-md { + margin-top: -16px; +} +[dir] .q-gutter-y-md > *, [dir] .q-gutter-md > * { + margin-top: 16px; +} +[dir=ltr] .q-col-gutter-x-md, [dir=ltr] .q-col-gutter-md { + margin-left: -16px; +} +[dir=rtl] .q-col-gutter-x-md, [dir=rtl] .q-col-gutter-md { + margin-right: -16px; +} +[dir=ltr] .q-col-gutter-x-md > *, [dir=ltr] .q-col-gutter-md > * { + padding-left: 16px; +} +[dir=rtl] .q-col-gutter-x-md > *, [dir=rtl] .q-col-gutter-md > * { + padding-right: 16px; +} +[dir] .q-col-gutter-y-md, [dir] .q-col-gutter-md { + margin-top: -16px; +} +[dir] .q-col-gutter-y-md > *, [dir] .q-col-gutter-md > * { + padding-top: 16px; +} +[dir=ltr] .q-gutter-x-lg, [dir=ltr] .q-gutter-lg { + margin-left: -24px; +} +[dir=rtl] .q-gutter-x-lg, [dir=rtl] .q-gutter-lg { + margin-right: -24px; +} +[dir=ltr] .q-gutter-x-lg > *, [dir=ltr] .q-gutter-lg > * { + margin-left: 24px; +} +[dir=rtl] .q-gutter-x-lg > *, [dir=rtl] .q-gutter-lg > * { + margin-right: 24px; +} +[dir] .q-gutter-y-lg, [dir] .q-gutter-lg { + margin-top: -24px; +} +[dir] .q-gutter-y-lg > *, [dir] .q-gutter-lg > * { + margin-top: 24px; +} +[dir=ltr] .q-col-gutter-x-lg, [dir=ltr] .q-col-gutter-lg { + margin-left: -24px; +} +[dir=rtl] .q-col-gutter-x-lg, [dir=rtl] .q-col-gutter-lg { + margin-right: -24px; +} +[dir=ltr] .q-col-gutter-x-lg > *, [dir=ltr] .q-col-gutter-lg > * { + padding-left: 24px; +} +[dir=rtl] .q-col-gutter-x-lg > *, [dir=rtl] .q-col-gutter-lg > * { + padding-right: 24px; +} +[dir] .q-col-gutter-y-lg, [dir] .q-col-gutter-lg { + margin-top: -24px; +} +[dir] .q-col-gutter-y-lg > *, [dir] .q-col-gutter-lg > * { + padding-top: 24px; +} +[dir=ltr] .q-gutter-x-xl, [dir=ltr] .q-gutter-xl { + margin-left: -48px; +} +[dir=rtl] .q-gutter-x-xl, [dir=rtl] .q-gutter-xl { + margin-right: -48px; +} +[dir=ltr] .q-gutter-x-xl > *, [dir=ltr] .q-gutter-xl > * { + margin-left: 48px; +} +[dir=rtl] .q-gutter-x-xl > *, [dir=rtl] .q-gutter-xl > * { + margin-right: 48px; +} +[dir] .q-gutter-y-xl, [dir] .q-gutter-xl { + margin-top: -48px; +} +[dir] .q-gutter-y-xl > *, [dir] .q-gutter-xl > * { + margin-top: 48px; +} +[dir=ltr] .q-col-gutter-x-xl, [dir=ltr] .q-col-gutter-xl { + margin-left: -48px; +} +[dir=rtl] .q-col-gutter-x-xl, [dir=rtl] .q-col-gutter-xl { + margin-right: -48px; +} +[dir=ltr] .q-col-gutter-x-xl > *, [dir=ltr] .q-col-gutter-xl > * { + padding-left: 48px; +} +[dir=rtl] .q-col-gutter-x-xl > *, [dir=rtl] .q-col-gutter-xl > * { + padding-right: 48px; +} +[dir] .q-col-gutter-y-xl, [dir] .q-col-gutter-xl { + margin-top: -48px; +} +[dir] .q-col-gutter-y-xl > *, [dir] .q-col-gutter-xl > * { + padding-top: 48px; +} +@media (min-width: 0) { + .row > .col, + .row > .col-xs, + .row > .col-auto, + .row > .col-xs-auto, + .row > .col-grow, + .row > .col-xs-grow, + .row > .col-shrink, + .row > .col-xs-shrink, + .row > .col-0, + .row > .col-xs-0, + .row > .col-1, + .row > .col-xs-1, + .row > .col-2, + .row > .col-xs-2, + .row > .col-3, + .row > .col-xs-3, + .row > .col-4, + .row > .col-xs-4, + .row > .col-5, + .row > .col-xs-5, + .row > .col-6, + .row > .col-xs-6, + .row > .col-7, + .row > .col-xs-7, + .row > .col-8, + .row > .col-xs-8, + .row > .col-9, + .row > .col-xs-9, + .row > .col-10, + .row > .col-xs-10, + .row > .col-11, + .row > .col-xs-11, + .row > .col-12, + .row > .col-xs-12, + .flex > .col, + .flex > .col-xs, + .flex > .col-auto, + .flex > .col-xs-auto, + .flex > .col-grow, + .flex > .col-xs-grow, + .flex > .col-shrink, + .flex > .col-xs-shrink, + .flex > .col-0, + .flex > .col-xs-0, + .flex > .col-1, + .flex > .col-xs-1, + .flex > .col-2, + .flex > .col-xs-2, + .flex > .col-3, + .flex > .col-xs-3, + .flex > .col-4, + .flex > .col-xs-4, + .flex > .col-5, + .flex > .col-xs-5, + .flex > .col-6, + .flex > .col-xs-6, + .flex > .col-7, + .flex > .col-xs-7, + .flex > .col-8, + .flex > .col-xs-8, + .flex > .col-9, + .flex > .col-xs-9, + .flex > .col-10, + .flex > .col-xs-10, + .flex > .col-11, + .flex > .col-xs-11, + .flex > .col-12, + .flex > .col-xs-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col, + .column > .col-xs, + .column > .col-auto, + .column > .col-xs-auto, + .column > .col-grow, + .column > .col-xs-grow, + .column > .col-shrink, + .column > .col-xs-shrink, + .column > .col-0, + .column > .col-xs-0, + .column > .col-1, + .column > .col-xs-1, + .column > .col-2, + .column > .col-xs-2, + .column > .col-3, + .column > .col-xs-3, + .column > .col-4, + .column > .col-xs-4, + .column > .col-5, + .column > .col-xs-5, + .column > .col-6, + .column > .col-xs-6, + .column > .col-7, + .column > .col-xs-7, + .column > .col-8, + .column > .col-xs-8, + .column > .col-9, + .column > .col-xs-9, + .column > .col-10, + .column > .col-xs-10, + .column > .col-11, + .column > .col-xs-11, + .column > .col-12, + .column > .col-xs-12, + .flex > .col, + .flex > .col-xs, + .flex > .col-auto, + .flex > .col-xs-auto, + .flex > .col-grow, + .flex > .col-xs-grow, + .flex > .col-shrink, + .flex > .col-xs-shrink, + .flex > .col-0, + .flex > .col-xs-0, + .flex > .col-1, + .flex > .col-xs-1, + .flex > .col-2, + .flex > .col-xs-2, + .flex > .col-3, + .flex > .col-xs-3, + .flex > .col-4, + .flex > .col-xs-4, + .flex > .col-5, + .flex > .col-xs-5, + .flex > .col-6, + .flex > .col-xs-6, + .flex > .col-7, + .flex > .col-xs-7, + .flex > .col-8, + .flex > .col-xs-8, + .flex > .col-9, + .flex > .col-xs-9, + .flex > .col-10, + .flex > .col-xs-10, + .flex > .col-11, + .flex > .col-xs-11, + .flex > .col-12, + .flex > .col-xs-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col, + .col-xs { + flex: 10000 1 0%; + } + .col-auto, + .col-xs-auto, + .col-0, + .col-xs-0, + .col-1, + .col-xs-1, + .col-2, + .col-xs-2, + .col-3, + .col-xs-3, + .col-4, + .col-xs-4, + .col-5, + .col-xs-5, + .col-6, + .col-xs-6, + .col-7, + .col-xs-7, + .col-8, + .col-xs-8, + .col-9, + .col-xs-9, + .col-10, + .col-xs-10, + .col-11, + .col-xs-11, + .col-12, + .col-xs-12 { + flex: 0 0 auto; + } + .col-grow, + .col-xs-grow { + flex: 1 0 auto; + } + .col-shrink, + .col-xs-shrink { + flex: 0 1 auto; + } + .row > .col-0, + .row > .col-xs-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row > .offset-0, [dir=ltr] .row > .offset-xs-0 { + margin-left: 0%; + } + [dir=rtl] .row > .offset-0, [dir=rtl] .row > .offset-xs-0 { + margin-right: 0%; + } + .column > .col-0, + .column > .col-xs-0 { + height: 0%; + width: auto; + } + .row > .col-1, + .row > .col-xs-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row > .offset-1, [dir=ltr] .row > .offset-xs-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row > .offset-1, [dir=rtl] .row > .offset-xs-1 { + margin-right: 8.3333%; + } + .column > .col-1, + .column > .col-xs-1 { + height: 8.3333%; + width: auto; + } + .row > .col-2, + .row > .col-xs-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row > .offset-2, [dir=ltr] .row > .offset-xs-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row > .offset-2, [dir=rtl] .row > .offset-xs-2 { + margin-right: 16.6667%; + } + .column > .col-2, + .column > .col-xs-2 { + height: 16.6667%; + width: auto; + } + .row > .col-3, + .row > .col-xs-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row > .offset-3, [dir=ltr] .row > .offset-xs-3 { + margin-left: 25%; + } + [dir=rtl] .row > .offset-3, [dir=rtl] .row > .offset-xs-3 { + margin-right: 25%; + } + .column > .col-3, + .column > .col-xs-3 { + height: 25%; + width: auto; + } + .row > .col-4, + .row > .col-xs-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row > .offset-4, [dir=ltr] .row > .offset-xs-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row > .offset-4, [dir=rtl] .row > .offset-xs-4 { + margin-right: 33.3333%; + } + .column > .col-4, + .column > .col-xs-4 { + height: 33.3333%; + width: auto; + } + .row > .col-5, + .row > .col-xs-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row > .offset-5, [dir=ltr] .row > .offset-xs-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row > .offset-5, [dir=rtl] .row > .offset-xs-5 { + margin-right: 41.6667%; + } + .column > .col-5, + .column > .col-xs-5 { + height: 41.6667%; + width: auto; + } + .row > .col-6, + .row > .col-xs-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row > .offset-6, [dir=ltr] .row > .offset-xs-6 { + margin-left: 50%; + } + [dir=rtl] .row > .offset-6, [dir=rtl] .row > .offset-xs-6 { + margin-right: 50%; + } + .column > .col-6, + .column > .col-xs-6 { + height: 50%; + width: auto; + } + .row > .col-7, + .row > .col-xs-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row > .offset-7, [dir=ltr] .row > .offset-xs-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row > .offset-7, [dir=rtl] .row > .offset-xs-7 { + margin-right: 58.3333%; + } + .column > .col-7, + .column > .col-xs-7 { + height: 58.3333%; + width: auto; + } + .row > .col-8, + .row > .col-xs-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row > .offset-8, [dir=ltr] .row > .offset-xs-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row > .offset-8, [dir=rtl] .row > .offset-xs-8 { + margin-right: 66.6667%; + } + .column > .col-8, + .column > .col-xs-8 { + height: 66.6667%; + width: auto; + } + .row > .col-9, + .row > .col-xs-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row > .offset-9, [dir=ltr] .row > .offset-xs-9 { + margin-left: 75%; + } + [dir=rtl] .row > .offset-9, [dir=rtl] .row > .offset-xs-9 { + margin-right: 75%; + } + .column > .col-9, + .column > .col-xs-9 { + height: 75%; + width: auto; + } + .row > .col-10, + .row > .col-xs-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row > .offset-10, [dir=ltr] .row > .offset-xs-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row > .offset-10, [dir=rtl] .row > .offset-xs-10 { + margin-right: 83.3333%; + } + .column > .col-10, + .column > .col-xs-10 { + height: 83.3333%; + width: auto; + } + .row > .col-11, + .row > .col-xs-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row > .offset-11, [dir=ltr] .row > .offset-xs-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row > .offset-11, [dir=rtl] .row > .offset-xs-11 { + margin-right: 91.6667%; + } + .column > .col-11, + .column > .col-xs-11 { + height: 91.6667%; + width: auto; + } + .row > .col-12, + .row > .col-xs-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row > .offset-12, [dir=ltr] .row > .offset-xs-12 { + margin-left: 100%; + } + [dir=rtl] .row > .offset-12, [dir=rtl] .row > .offset-xs-12 { + margin-right: 100%; + } + .column > .col-12, + .column > .col-xs-12 { + height: 100%; + width: auto; + } + .row > .col-all { + height: auto; + flex: 0 0 100%; + } +} +@media (min-width: 600px) { + .row > .col-sm, + .row > .col-sm-auto, + .row > .col-sm-grow, + .row > .col-sm-shrink, + .row > .col-sm-0, + .row > .col-sm-1, + .row > .col-sm-2, + .row > .col-sm-3, + .row > .col-sm-4, + .row > .col-sm-5, + .row > .col-sm-6, + .row > .col-sm-7, + .row > .col-sm-8, + .row > .col-sm-9, + .row > .col-sm-10, + .row > .col-sm-11, + .row > .col-sm-12, + .flex > .col-sm, + .flex > .col-sm-auto, + .flex > .col-sm-grow, + .flex > .col-sm-shrink, + .flex > .col-sm-0, + .flex > .col-sm-1, + .flex > .col-sm-2, + .flex > .col-sm-3, + .flex > .col-sm-4, + .flex > .col-sm-5, + .flex > .col-sm-6, + .flex > .col-sm-7, + .flex > .col-sm-8, + .flex > .col-sm-9, + .flex > .col-sm-10, + .flex > .col-sm-11, + .flex > .col-sm-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col-sm, + .column > .col-sm-auto, + .column > .col-sm-grow, + .column > .col-sm-shrink, + .column > .col-sm-0, + .column > .col-sm-1, + .column > .col-sm-2, + .column > .col-sm-3, + .column > .col-sm-4, + .column > .col-sm-5, + .column > .col-sm-6, + .column > .col-sm-7, + .column > .col-sm-8, + .column > .col-sm-9, + .column > .col-sm-10, + .column > .col-sm-11, + .column > .col-sm-12, + .flex > .col-sm, + .flex > .col-sm-auto, + .flex > .col-sm-grow, + .flex > .col-sm-shrink, + .flex > .col-sm-0, + .flex > .col-sm-1, + .flex > .col-sm-2, + .flex > .col-sm-3, + .flex > .col-sm-4, + .flex > .col-sm-5, + .flex > .col-sm-6, + .flex > .col-sm-7, + .flex > .col-sm-8, + .flex > .col-sm-9, + .flex > .col-sm-10, + .flex > .col-sm-11, + .flex > .col-sm-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col-sm { + flex: 10000 1 0%; + } + .col-sm-auto, + .col-sm-0, + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11, + .col-sm-12 { + flex: 0 0 auto; + } + .col-sm-grow { + flex: 1 0 auto; + } + .col-sm-shrink { + flex: 0 1 auto; + } + .row > .col-sm-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row > .offset-sm-0 { + margin-left: 0%; + } + [dir=rtl] .row > .offset-sm-0 { + margin-right: 0%; + } + .column > .col-sm-0 { + height: 0%; + width: auto; + } + .row > .col-sm-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row > .offset-sm-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row > .offset-sm-1 { + margin-right: 8.3333%; + } + .column > .col-sm-1 { + height: 8.3333%; + width: auto; + } + .row > .col-sm-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row > .offset-sm-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row > .offset-sm-2 { + margin-right: 16.6667%; + } + .column > .col-sm-2 { + height: 16.6667%; + width: auto; + } + .row > .col-sm-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row > .offset-sm-3 { + margin-left: 25%; + } + [dir=rtl] .row > .offset-sm-3 { + margin-right: 25%; + } + .column > .col-sm-3 { + height: 25%; + width: auto; + } + .row > .col-sm-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row > .offset-sm-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row > .offset-sm-4 { + margin-right: 33.3333%; + } + .column > .col-sm-4 { + height: 33.3333%; + width: auto; + } + .row > .col-sm-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row > .offset-sm-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row > .offset-sm-5 { + margin-right: 41.6667%; + } + .column > .col-sm-5 { + height: 41.6667%; + width: auto; + } + .row > .col-sm-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row > .offset-sm-6 { + margin-left: 50%; + } + [dir=rtl] .row > .offset-sm-6 { + margin-right: 50%; + } + .column > .col-sm-6 { + height: 50%; + width: auto; + } + .row > .col-sm-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row > .offset-sm-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row > .offset-sm-7 { + margin-right: 58.3333%; + } + .column > .col-sm-7 { + height: 58.3333%; + width: auto; + } + .row > .col-sm-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row > .offset-sm-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row > .offset-sm-8 { + margin-right: 66.6667%; + } + .column > .col-sm-8 { + height: 66.6667%; + width: auto; + } + .row > .col-sm-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row > .offset-sm-9 { + margin-left: 75%; + } + [dir=rtl] .row > .offset-sm-9 { + margin-right: 75%; + } + .column > .col-sm-9 { + height: 75%; + width: auto; + } + .row > .col-sm-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row > .offset-sm-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row > .offset-sm-10 { + margin-right: 83.3333%; + } + .column > .col-sm-10 { + height: 83.3333%; + width: auto; + } + .row > .col-sm-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row > .offset-sm-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row > .offset-sm-11 { + margin-right: 91.6667%; + } + .column > .col-sm-11 { + height: 91.6667%; + width: auto; + } + .row > .col-sm-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row > .offset-sm-12 { + margin-left: 100%; + } + [dir=rtl] .row > .offset-sm-12 { + margin-right: 100%; + } + .column > .col-sm-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1024px) { + .row > .col-md, + .row > .col-md-auto, + .row > .col-md-grow, + .row > .col-md-shrink, + .row > .col-md-0, + .row > .col-md-1, + .row > .col-md-2, + .row > .col-md-3, + .row > .col-md-4, + .row > .col-md-5, + .row > .col-md-6, + .row > .col-md-7, + .row > .col-md-8, + .row > .col-md-9, + .row > .col-md-10, + .row > .col-md-11, + .row > .col-md-12, + .flex > .col-md, + .flex > .col-md-auto, + .flex > .col-md-grow, + .flex > .col-md-shrink, + .flex > .col-md-0, + .flex > .col-md-1, + .flex > .col-md-2, + .flex > .col-md-3, + .flex > .col-md-4, + .flex > .col-md-5, + .flex > .col-md-6, + .flex > .col-md-7, + .flex > .col-md-8, + .flex > .col-md-9, + .flex > .col-md-10, + .flex > .col-md-11, + .flex > .col-md-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col-md, + .column > .col-md-auto, + .column > .col-md-grow, + .column > .col-md-shrink, + .column > .col-md-0, + .column > .col-md-1, + .column > .col-md-2, + .column > .col-md-3, + .column > .col-md-4, + .column > .col-md-5, + .column > .col-md-6, + .column > .col-md-7, + .column > .col-md-8, + .column > .col-md-9, + .column > .col-md-10, + .column > .col-md-11, + .column > .col-md-12, + .flex > .col-md, + .flex > .col-md-auto, + .flex > .col-md-grow, + .flex > .col-md-shrink, + .flex > .col-md-0, + .flex > .col-md-1, + .flex > .col-md-2, + .flex > .col-md-3, + .flex > .col-md-4, + .flex > .col-md-5, + .flex > .col-md-6, + .flex > .col-md-7, + .flex > .col-md-8, + .flex > .col-md-9, + .flex > .col-md-10, + .flex > .col-md-11, + .flex > .col-md-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col-md { + flex: 10000 1 0%; + } + .col-md-auto, + .col-md-0, + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11, + .col-md-12 { + flex: 0 0 auto; + } + .col-md-grow { + flex: 1 0 auto; + } + .col-md-shrink { + flex: 0 1 auto; + } + .row > .col-md-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row > .offset-md-0 { + margin-left: 0%; + } + [dir=rtl] .row > .offset-md-0 { + margin-right: 0%; + } + .column > .col-md-0 { + height: 0%; + width: auto; + } + .row > .col-md-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row > .offset-md-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row > .offset-md-1 { + margin-right: 8.3333%; + } + .column > .col-md-1 { + height: 8.3333%; + width: auto; + } + .row > .col-md-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row > .offset-md-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row > .offset-md-2 { + margin-right: 16.6667%; + } + .column > .col-md-2 { + height: 16.6667%; + width: auto; + } + .row > .col-md-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row > .offset-md-3 { + margin-left: 25%; + } + [dir=rtl] .row > .offset-md-3 { + margin-right: 25%; + } + .column > .col-md-3 { + height: 25%; + width: auto; + } + .row > .col-md-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row > .offset-md-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row > .offset-md-4 { + margin-right: 33.3333%; + } + .column > .col-md-4 { + height: 33.3333%; + width: auto; + } + .row > .col-md-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row > .offset-md-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row > .offset-md-5 { + margin-right: 41.6667%; + } + .column > .col-md-5 { + height: 41.6667%; + width: auto; + } + .row > .col-md-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row > .offset-md-6 { + margin-left: 50%; + } + [dir=rtl] .row > .offset-md-6 { + margin-right: 50%; + } + .column > .col-md-6 { + height: 50%; + width: auto; + } + .row > .col-md-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row > .offset-md-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row > .offset-md-7 { + margin-right: 58.3333%; + } + .column > .col-md-7 { + height: 58.3333%; + width: auto; + } + .row > .col-md-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row > .offset-md-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row > .offset-md-8 { + margin-right: 66.6667%; + } + .column > .col-md-8 { + height: 66.6667%; + width: auto; + } + .row > .col-md-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row > .offset-md-9 { + margin-left: 75%; + } + [dir=rtl] .row > .offset-md-9 { + margin-right: 75%; + } + .column > .col-md-9 { + height: 75%; + width: auto; + } + .row > .col-md-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row > .offset-md-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row > .offset-md-10 { + margin-right: 83.3333%; + } + .column > .col-md-10 { + height: 83.3333%; + width: auto; + } + .row > .col-md-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row > .offset-md-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row > .offset-md-11 { + margin-right: 91.6667%; + } + .column > .col-md-11 { + height: 91.6667%; + width: auto; + } + .row > .col-md-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row > .offset-md-12 { + margin-left: 100%; + } + [dir=rtl] .row > .offset-md-12 { + margin-right: 100%; + } + .column > .col-md-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1440px) { + .row > .col-lg, + .row > .col-lg-auto, + .row > .col-lg-grow, + .row > .col-lg-shrink, + .row > .col-lg-0, + .row > .col-lg-1, + .row > .col-lg-2, + .row > .col-lg-3, + .row > .col-lg-4, + .row > .col-lg-5, + .row > .col-lg-6, + .row > .col-lg-7, + .row > .col-lg-8, + .row > .col-lg-9, + .row > .col-lg-10, + .row > .col-lg-11, + .row > .col-lg-12, + .flex > .col-lg, + .flex > .col-lg-auto, + .flex > .col-lg-grow, + .flex > .col-lg-shrink, + .flex > .col-lg-0, + .flex > .col-lg-1, + .flex > .col-lg-2, + .flex > .col-lg-3, + .flex > .col-lg-4, + .flex > .col-lg-5, + .flex > .col-lg-6, + .flex > .col-lg-7, + .flex > .col-lg-8, + .flex > .col-lg-9, + .flex > .col-lg-10, + .flex > .col-lg-11, + .flex > .col-lg-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col-lg, + .column > .col-lg-auto, + .column > .col-lg-grow, + .column > .col-lg-shrink, + .column > .col-lg-0, + .column > .col-lg-1, + .column > .col-lg-2, + .column > .col-lg-3, + .column > .col-lg-4, + .column > .col-lg-5, + .column > .col-lg-6, + .column > .col-lg-7, + .column > .col-lg-8, + .column > .col-lg-9, + .column > .col-lg-10, + .column > .col-lg-11, + .column > .col-lg-12, + .flex > .col-lg, + .flex > .col-lg-auto, + .flex > .col-lg-grow, + .flex > .col-lg-shrink, + .flex > .col-lg-0, + .flex > .col-lg-1, + .flex > .col-lg-2, + .flex > .col-lg-3, + .flex > .col-lg-4, + .flex > .col-lg-5, + .flex > .col-lg-6, + .flex > .col-lg-7, + .flex > .col-lg-8, + .flex > .col-lg-9, + .flex > .col-lg-10, + .flex > .col-lg-11, + .flex > .col-lg-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col-lg { + flex: 10000 1 0%; + } + .col-lg-auto, + .col-lg-0, + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11, + .col-lg-12 { + flex: 0 0 auto; + } + .col-lg-grow { + flex: 1 0 auto; + } + .col-lg-shrink { + flex: 0 1 auto; + } + .row > .col-lg-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row > .offset-lg-0 { + margin-left: 0%; + } + [dir=rtl] .row > .offset-lg-0 { + margin-right: 0%; + } + .column > .col-lg-0 { + height: 0%; + width: auto; + } + .row > .col-lg-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row > .offset-lg-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row > .offset-lg-1 { + margin-right: 8.3333%; + } + .column > .col-lg-1 { + height: 8.3333%; + width: auto; + } + .row > .col-lg-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row > .offset-lg-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row > .offset-lg-2 { + margin-right: 16.6667%; + } + .column > .col-lg-2 { + height: 16.6667%; + width: auto; + } + .row > .col-lg-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row > .offset-lg-3 { + margin-left: 25%; + } + [dir=rtl] .row > .offset-lg-3 { + margin-right: 25%; + } + .column > .col-lg-3 { + height: 25%; + width: auto; + } + .row > .col-lg-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row > .offset-lg-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row > .offset-lg-4 { + margin-right: 33.3333%; + } + .column > .col-lg-4 { + height: 33.3333%; + width: auto; + } + .row > .col-lg-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row > .offset-lg-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row > .offset-lg-5 { + margin-right: 41.6667%; + } + .column > .col-lg-5 { + height: 41.6667%; + width: auto; + } + .row > .col-lg-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row > .offset-lg-6 { + margin-left: 50%; + } + [dir=rtl] .row > .offset-lg-6 { + margin-right: 50%; + } + .column > .col-lg-6 { + height: 50%; + width: auto; + } + .row > .col-lg-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row > .offset-lg-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row > .offset-lg-7 { + margin-right: 58.3333%; + } + .column > .col-lg-7 { + height: 58.3333%; + width: auto; + } + .row > .col-lg-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row > .offset-lg-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row > .offset-lg-8 { + margin-right: 66.6667%; + } + .column > .col-lg-8 { + height: 66.6667%; + width: auto; + } + .row > .col-lg-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row > .offset-lg-9 { + margin-left: 75%; + } + [dir=rtl] .row > .offset-lg-9 { + margin-right: 75%; + } + .column > .col-lg-9 { + height: 75%; + width: auto; + } + .row > .col-lg-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row > .offset-lg-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row > .offset-lg-10 { + margin-right: 83.3333%; + } + .column > .col-lg-10 { + height: 83.3333%; + width: auto; + } + .row > .col-lg-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row > .offset-lg-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row > .offset-lg-11 { + margin-right: 91.6667%; + } + .column > .col-lg-11 { + height: 91.6667%; + width: auto; + } + .row > .col-lg-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row > .offset-lg-12 { + margin-left: 100%; + } + [dir=rtl] .row > .offset-lg-12 { + margin-right: 100%; + } + .column > .col-lg-12 { + height: 100%; + width: auto; + } +} +@media (min-width: 1920px) { + .row > .col-xl, + .row > .col-xl-auto, + .row > .col-xl-grow, + .row > .col-xl-shrink, + .row > .col-xl-0, + .row > .col-xl-1, + .row > .col-xl-2, + .row > .col-xl-3, + .row > .col-xl-4, + .row > .col-xl-5, + .row > .col-xl-6, + .row > .col-xl-7, + .row > .col-xl-8, + .row > .col-xl-9, + .row > .col-xl-10, + .row > .col-xl-11, + .row > .col-xl-12, + .flex > .col-xl, + .flex > .col-xl-auto, + .flex > .col-xl-grow, + .flex > .col-xl-shrink, + .flex > .col-xl-0, + .flex > .col-xl-1, + .flex > .col-xl-2, + .flex > .col-xl-3, + .flex > .col-xl-4, + .flex > .col-xl-5, + .flex > .col-xl-6, + .flex > .col-xl-7, + .flex > .col-xl-8, + .flex > .col-xl-9, + .flex > .col-xl-10, + .flex > .col-xl-11, + .flex > .col-xl-12 { + width: auto; + min-width: 0; + max-width: 100%; + } + .column > .col-xl, + .column > .col-xl-auto, + .column > .col-xl-grow, + .column > .col-xl-shrink, + .column > .col-xl-0, + .column > .col-xl-1, + .column > .col-xl-2, + .column > .col-xl-3, + .column > .col-xl-4, + .column > .col-xl-5, + .column > .col-xl-6, + .column > .col-xl-7, + .column > .col-xl-8, + .column > .col-xl-9, + .column > .col-xl-10, + .column > .col-xl-11, + .column > .col-xl-12, + .flex > .col-xl, + .flex > .col-xl-auto, + .flex > .col-xl-grow, + .flex > .col-xl-shrink, + .flex > .col-xl-0, + .flex > .col-xl-1, + .flex > .col-xl-2, + .flex > .col-xl-3, + .flex > .col-xl-4, + .flex > .col-xl-5, + .flex > .col-xl-6, + .flex > .col-xl-7, + .flex > .col-xl-8, + .flex > .col-xl-9, + .flex > .col-xl-10, + .flex > .col-xl-11, + .flex > .col-xl-12 { + height: auto; + min-height: 0; + max-height: 100%; + } + .col-xl { + flex: 10000 1 0%; + } + .col-xl-auto, + .col-xl-0, + .col-xl-1, + .col-xl-2, + .col-xl-3, + .col-xl-4, + .col-xl-5, + .col-xl-6, + .col-xl-7, + .col-xl-8, + .col-xl-9, + .col-xl-10, + .col-xl-11, + .col-xl-12 { + flex: 0 0 auto; + } + .col-xl-grow { + flex: 1 0 auto; + } + .col-xl-shrink { + flex: 0 1 auto; + } + .row > .col-xl-0 { + height: auto; + width: 0%; + } + [dir=ltr] .row > .offset-xl-0 { + margin-left: 0%; + } + [dir=rtl] .row > .offset-xl-0 { + margin-right: 0%; + } + .column > .col-xl-0 { + height: 0%; + width: auto; + } + .row > .col-xl-1 { + height: auto; + width: 8.3333%; + } + [dir=ltr] .row > .offset-xl-1 { + margin-left: 8.3333%; + } + [dir=rtl] .row > .offset-xl-1 { + margin-right: 8.3333%; + } + .column > .col-xl-1 { + height: 8.3333%; + width: auto; + } + .row > .col-xl-2 { + height: auto; + width: 16.6667%; + } + [dir=ltr] .row > .offset-xl-2 { + margin-left: 16.6667%; + } + [dir=rtl] .row > .offset-xl-2 { + margin-right: 16.6667%; + } + .column > .col-xl-2 { + height: 16.6667%; + width: auto; + } + .row > .col-xl-3 { + height: auto; + width: 25%; + } + [dir=ltr] .row > .offset-xl-3 { + margin-left: 25%; + } + [dir=rtl] .row > .offset-xl-3 { + margin-right: 25%; + } + .column > .col-xl-3 { + height: 25%; + width: auto; + } + .row > .col-xl-4 { + height: auto; + width: 33.3333%; + } + [dir=ltr] .row > .offset-xl-4 { + margin-left: 33.3333%; + } + [dir=rtl] .row > .offset-xl-4 { + margin-right: 33.3333%; + } + .column > .col-xl-4 { + height: 33.3333%; + width: auto; + } + .row > .col-xl-5 { + height: auto; + width: 41.6667%; + } + [dir=ltr] .row > .offset-xl-5 { + margin-left: 41.6667%; + } + [dir=rtl] .row > .offset-xl-5 { + margin-right: 41.6667%; + } + .column > .col-xl-5 { + height: 41.6667%; + width: auto; + } + .row > .col-xl-6 { + height: auto; + width: 50%; + } + [dir=ltr] .row > .offset-xl-6 { + margin-left: 50%; + } + [dir=rtl] .row > .offset-xl-6 { + margin-right: 50%; + } + .column > .col-xl-6 { + height: 50%; + width: auto; + } + .row > .col-xl-7 { + height: auto; + width: 58.3333%; + } + [dir=ltr] .row > .offset-xl-7 { + margin-left: 58.3333%; + } + [dir=rtl] .row > .offset-xl-7 { + margin-right: 58.3333%; + } + .column > .col-xl-7 { + height: 58.3333%; + width: auto; + } + .row > .col-xl-8 { + height: auto; + width: 66.6667%; + } + [dir=ltr] .row > .offset-xl-8 { + margin-left: 66.6667%; + } + [dir=rtl] .row > .offset-xl-8 { + margin-right: 66.6667%; + } + .column > .col-xl-8 { + height: 66.6667%; + width: auto; + } + .row > .col-xl-9 { + height: auto; + width: 75%; + } + [dir=ltr] .row > .offset-xl-9 { + margin-left: 75%; + } + [dir=rtl] .row > .offset-xl-9 { + margin-right: 75%; + } + .column > .col-xl-9 { + height: 75%; + width: auto; + } + .row > .col-xl-10 { + height: auto; + width: 83.3333%; + } + [dir=ltr] .row > .offset-xl-10 { + margin-left: 83.3333%; + } + [dir=rtl] .row > .offset-xl-10 { + margin-right: 83.3333%; + } + .column > .col-xl-10 { + height: 83.3333%; + width: auto; + } + .row > .col-xl-11 { + height: auto; + width: 91.6667%; + } + [dir=ltr] .row > .offset-xl-11 { + margin-left: 91.6667%; + } + [dir=rtl] .row > .offset-xl-11 { + margin-right: 91.6667%; + } + .column > .col-xl-11 { + height: 91.6667%; + width: auto; + } + .row > .col-xl-12 { + height: auto; + width: 100%; + } + [dir=ltr] .row > .offset-xl-12 { + margin-left: 100%; + } + [dir=rtl] .row > .offset-xl-12 { + margin-right: 100%; + } + .column > .col-xl-12 { + height: 100%; + width: auto; + } +} +[dir] .rounded-borders { + border-radius: 4px; +} +[dir] .border-radius-inherit { + border-radius: inherit; +} +.no-transition { + transition: none !important; +} +.transition-0 { + transition: 0s !important; +} +[dir] .glossy { + background-image: linear-gradient(to bottom, rgba(255,255,255,0.3), rgba(255,255,255,0) 50%, rgba(0,0,0,0.12) 51%, rgba(0,0,0,0.04)) !important; +} +.q-placeholder::-moz-placeholder { + color: inherit; + opacity: 0.7; +} +.q-placeholder:-ms-input-placeholder { + color: inherit !important; + opacity: 0.7 !important; +} +.q-placeholder::placeholder { + color: inherit; + opacity: 0.7; +} +.q-body--fullscreen-mixin { + position: fixed !important; +} +.q-body--prevent-scroll { + width: 100vw; + height: 100vh; + overflow-x: hidden; + contain: layout size; + contain: layout size style; + -ms-scroll-chaining: none; + overscroll-behavior: none; + -webkit-overflow-scrolling: none; +} +.q-body--prevent-scroll body { + position: relative !important; + overflow: hidden; +} +.q-body--prevent-scroll .q-drawer__backdrop { + width: 100vw; + max-height: none; +} +.q-body--prevent-scroll[dir=rtl] .q-body--scroll-locked { + transform: translateX(var(--q-scroll-lock-left)); +} +.q-portal__container { + contain: size; + contain: size style; +} +.q-portal__clone { + position: fixed !important; + transition: none !important; + flex-shrink: 0 !important; + opacity: 0 !important; + z-index: -1 !important; +} +[dir] .q-portal__clone { + transform: none !important; +} +.q-focus__clone + * { + position: fixed !important; + transition: none !important; + opacity: 0 !important; + pointer-events: none !important; +} +body.native-mobile .q-focus__clone + * { + top: 50vh; +} +.q-no-input-spinner { + -moz-appearance: textfield !important; +} +.q-no-input-spinner::-webkit-outer-spin-button, +.q-no-input-spinner::-webkit-inner-spin-button { + -webkit-appearance: none; +} +[dir] .q-no-input-spinner::-webkit-outer-spin-button, [dir] .q-no-input-spinner::-webkit-inner-spin-button { + margin: 0; +} +.q-link { + outline: 0; + text-decoration: none; +} +.q-link--focusable:focus-visible { + -webkit-text-decoration: underline dashed currentColor 1px; + text-decoration: underline dashed currentColor 1px; +} +body.electron .q-electron-drag { + -webkit-user-select: none; + -webkit-app-region: drag; +} +body.electron .q-electron-drag .q-btn-item, +body.electron .q-electron-drag--exception { + -webkit-app-region: no-drag; +} +img.responsive { + max-width: 100%; + height: auto; +} +.non-selectable { + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; +} +.scroll { + overflow: auto; +} +.scroll, +.scroll-x, +.scroll-y { + -webkit-overflow-scrolling: touch; + will-change: scroll-position; +} +.scroll-x { + overflow-x: auto; +} +.scroll-y { + overflow-y: auto; +} +.no-scroll { + overflow: hidden !important; +} +.no-pointer-events, +.no-pointer-events--children, +.no-pointer-events--children * { + pointer-events: none !important; +} +.all-pointer-events { + pointer-events: all !important; +} +[dir] .cursor-pointer { + cursor: pointer !important; +} +[dir] .cursor-not-allowed { + cursor: not-allowed !important; +} +[dir] .cursor-inherit { + cursor: inherit !important; +} +[dir] .cursor-none { + cursor: none !important; +} +[dir] [aria-busy='true'] { + cursor: progress; +} +[dir] [aria-controls], [dir] [role='button'] { + cursor: pointer; +} +[dir] [aria-disabled] { + cursor: default; +} +.rotate-45 { + transform: rotate(45deg) /* rtl:ignore */; +} +.rotate-90 { + transform: rotate(90deg) /* rtl:ignore */; +} +.rotate-135 { + transform: rotate(135deg) /* rtl:ignore */; +} +.rotate-180 { + transform: rotate(180deg) /* rtl:ignore */; +} +/* deprecated: to be removed */ +.rotate-205 { + transform: rotate(205deg) /* rtl:ignore */; +} +.rotate-225 { + transform: rotate(225deg) /* rtl:ignore */; +} +.rotate-270 { + transform: rotate(270deg) /* rtl:ignore */; +} +.rotate-315 { + transform: rotate(315deg) /* rtl:ignore */; +} +[dir] .flip-horizontal { + transform: scaleX(-1); +} +[dir] .flip-vertical { + transform: scaleY(-1); +} +[dir=ltr] .float-left { + float: left; +} +[dir=rtl] .float-left { + float: right; +} +[dir=ltr] .float-right { + float: right; +} +[dir=rtl] .float-right { + float: left; +} +.relative-position { + position: relative; +} +.fixed, +.fixed-full, +.fullscreen, +.fixed-center, +.fixed-bottom, +.fixed-left, +.fixed-right, +.fixed-top, +.fixed-top-left, +.fixed-top-right, +.fixed-bottom-left, +.fixed-bottom-right { + position: fixed; +} +.absolute, +.absolute-full, +.absolute-center, +.absolute-bottom, +.absolute-left, +.absolute-right, +.absolute-top, +.absolute-top-left, +.absolute-top-right, +.absolute-bottom-left, +.absolute-bottom-right { + position: absolute; +} +.fixed-top, +.absolute-top { + top: 0; +} +[dir=ltr] .fixed-top, [dir=ltr] .absolute-top { + left: 0; + right: 0; +} +[dir=rtl] .fixed-top, [dir=rtl] .absolute-top { + right: 0; + left: 0; +} +.fixed-right, +.absolute-right { + top: 0; + bottom: 0; +} +[dir=ltr] .fixed-right, [dir=ltr] .absolute-right { + right: 0; +} +[dir=rtl] .fixed-right, [dir=rtl] .absolute-right { + left: 0; +} +.fixed-bottom, +.absolute-bottom { + bottom: 0; +} +[dir=ltr] .fixed-bottom, [dir=ltr] .absolute-bottom { + right: 0; + left: 0; +} +[dir=rtl] .fixed-bottom, [dir=rtl] .absolute-bottom { + left: 0; + right: 0; +} +.fixed-left, +.absolute-left { + top: 0; + bottom: 0; +} +[dir=ltr] .fixed-left, [dir=ltr] .absolute-left { + left: 0; +} +[dir=rtl] .fixed-left, [dir=rtl] .absolute-left { + right: 0; +} +.fixed-top-left, +.absolute-top-left { + top: 0; +} +[dir=ltr] .fixed-top-left, [dir=ltr] .absolute-top-left { + left: 0; +} +[dir=rtl] .fixed-top-left, [dir=rtl] .absolute-top-left { + right: 0; +} +.fixed-top-right, +.absolute-top-right { + top: 0; +} +[dir=ltr] .fixed-top-right, [dir=ltr] .absolute-top-right { + right: 0; +} +[dir=rtl] .fixed-top-right, [dir=rtl] .absolute-top-right { + left: 0; +} +.fixed-bottom-left, +.absolute-bottom-left { + bottom: 0; +} +[dir=ltr] .fixed-bottom-left, [dir=ltr] .absolute-bottom-left { + left: 0; +} +[dir=rtl] .fixed-bottom-left, [dir=rtl] .absolute-bottom-left { + right: 0; +} +.fixed-bottom-right, +.absolute-bottom-right { + bottom: 0; +} +[dir=ltr] .fixed-bottom-right, [dir=ltr] .absolute-bottom-right { + right: 0; +} +[dir=rtl] .fixed-bottom-right, [dir=rtl] .absolute-bottom-right { + left: 0; +} +.fullscreen { + z-index: 6000; + max-width: 100vw; + max-height: 100vh; +} +[dir] .fullscreen { + border-radius: 0 !important; +} +[dir] body.q-ios-padding .fullscreen { + padding-top: 20px !important; + padding-top: env(safe-area-inset-top) !important; + padding-bottom: env(safe-area-inset-bottom) !important; +} +.absolute-full, +.fullscreen, +.fixed-full { + top: 0; + bottom: 0; +} +[dir=ltr] .absolute-full, [dir=ltr] .fullscreen, [dir=ltr] .fixed-full { + right: 0; + left: 0; +} +[dir=rtl] .absolute-full, [dir=rtl] .fullscreen, [dir=rtl] .fixed-full { + left: 0; + right: 0; +} +.fixed-center, +.absolute-center { + top: 50%; +} +[dir=ltr] .fixed-center, [dir=ltr] .absolute-center { + left: 50%; + transform: translate(-50%, -50%); +} +[dir=rtl] .fixed-center, [dir=rtl] .absolute-center { + right: 50%; + transform: translate(50%, -50%); +} +.vertical-top { + vertical-align: top !important; +} +.vertical-middle { + vertical-align: middle !important; +} +.vertical-bottom { + vertical-align: bottom !important; +} +[dir=ltr] .on-left { + margin-right: 12px; +} +[dir=rtl] .on-left { + margin-left: 12px; +} +[dir=ltr] .on-right { + margin-left: 12px; +} +[dir=rtl] .on-right { + margin-right: 12px; +} +:root { + --q-size-xs: 0; + --q-size-sm: 600px; + --q-size-md: 1024px; + --q-size-lg: 1440px; + --q-size-xl: 1920px; +} +.fit { + width: 100% !important; + height: 100% !important; +} +.full-height { + height: 100% !important; +} +.full-width { + width: 100% !important; +} +[dir=ltr] .full-width { + margin-left: 0 !important; + margin-right: 0 !important; +} +[dir=rtl] .full-width { + margin-right: 0 !important; + margin-left: 0 !important; +} +.window-height { + height: 100vh !important; +} +[dir] .window-height { + margin-top: 0 !important; + margin-bottom: 0 !important; +} +.window-width { + width: 100vw !important; +} +[dir=ltr] .window-width { + margin-left: 0 !important; + margin-right: 0 !important; +} +[dir=rtl] .window-width { + margin-right: 0 !important; + margin-left: 0 !important; +} +.block { + display: block !important; +} +.inline-block { + display: inline-block !important; +} +[dir] .q-pa-none { + padding: 0 0; +} +[dir=ltr] .q-pl-none { + padding-left: 0; +} +[dir=rtl] .q-pl-none { + padding-right: 0; +} +[dir=ltr] .q-pr-none { + padding-right: 0; +} +[dir=rtl] .q-pr-none { + padding-left: 0; +} +[dir] .q-pt-none, [dir] .q-py-none { + padding-top: 0; +} +[dir] .q-pb-none, [dir] .q-py-none { + padding-bottom: 0; +} +[dir=ltr] .q-px-none { + padding-left: 0; + padding-right: 0; +} +[dir=rtl] .q-px-none { + padding-right: 0; + padding-left: 0; +} +[dir] .q-ma-none { + margin: 0 0; +} +[dir=ltr] .q-ml-none { + margin-left: 0; +} +[dir=rtl] .q-ml-none { + margin-right: 0; +} +[dir=ltr] .q-mr-none { + margin-right: 0; +} +[dir=rtl] .q-mr-none { + margin-left: 0; +} +[dir] .q-mt-none, [dir] .q-my-none { + margin-top: 0; +} +[dir] .q-mb-none, [dir] .q-my-none { + margin-bottom: 0; +} +[dir=ltr] .q-mx-none { + margin-left: 0; + margin-right: 0; +} +[dir=rtl] .q-mx-none { + margin-right: 0; + margin-left: 0; +} +[dir] .q-pa-xs { + padding: 4px 4px; +} +[dir=ltr] .q-pl-xs { + padding-left: 4px; +} +[dir=rtl] .q-pl-xs { + padding-right: 4px; +} +[dir=ltr] .q-pr-xs { + padding-right: 4px; +} +[dir=rtl] .q-pr-xs { + padding-left: 4px; +} +[dir] .q-pt-xs, [dir] .q-py-xs { + padding-top: 4px; +} +[dir] .q-pb-xs, [dir] .q-py-xs { + padding-bottom: 4px; +} +[dir=ltr] .q-px-xs { + padding-left: 4px; + padding-right: 4px; +} +[dir=rtl] .q-px-xs { + padding-right: 4px; + padding-left: 4px; +} +[dir] .q-ma-xs { + margin: 4px 4px; +} +[dir=ltr] .q-ml-xs { + margin-left: 4px; +} +[dir=rtl] .q-ml-xs { + margin-right: 4px; +} +[dir=ltr] .q-mr-xs { + margin-right: 4px; +} +[dir=rtl] .q-mr-xs { + margin-left: 4px; +} +[dir] .q-mt-xs, [dir] .q-my-xs { + margin-top: 4px; +} +[dir] .q-mb-xs, [dir] .q-my-xs { + margin-bottom: 4px; +} +[dir=ltr] .q-mx-xs { + margin-left: 4px; + margin-right: 4px; +} +[dir=rtl] .q-mx-xs { + margin-right: 4px; + margin-left: 4px; +} +[dir] .q-pa-sm { + padding: 8px 8px; +} +[dir=ltr] .q-pl-sm { + padding-left: 8px; +} +[dir=rtl] .q-pl-sm { + padding-right: 8px; +} +[dir=ltr] .q-pr-sm { + padding-right: 8px; +} +[dir=rtl] .q-pr-sm { + padding-left: 8px; +} +[dir] .q-pt-sm, [dir] .q-py-sm { + padding-top: 8px; +} +[dir] .q-pb-sm, [dir] .q-py-sm { + padding-bottom: 8px; +} +[dir=ltr] .q-px-sm { + padding-left: 8px; + padding-right: 8px; +} +[dir=rtl] .q-px-sm { + padding-right: 8px; + padding-left: 8px; +} +[dir] .q-ma-sm { + margin: 8px 8px; +} +[dir=ltr] .q-ml-sm { + margin-left: 8px; +} +[dir=rtl] .q-ml-sm { + margin-right: 8px; +} +[dir=ltr] .q-mr-sm { + margin-right: 8px; +} +[dir=rtl] .q-mr-sm { + margin-left: 8px; +} +[dir] .q-mt-sm, [dir] .q-my-sm { + margin-top: 8px; +} +[dir] .q-mb-sm, [dir] .q-my-sm { + margin-bottom: 8px; +} +[dir=ltr] .q-mx-sm { + margin-left: 8px; + margin-right: 8px; +} +[dir=rtl] .q-mx-sm { + margin-right: 8px; + margin-left: 8px; +} +[dir] .q-pa-md { + padding: 16px 16px; +} +[dir=ltr] .q-pl-md { + padding-left: 16px; +} +[dir=rtl] .q-pl-md { + padding-right: 16px; +} +[dir=ltr] .q-pr-md { + padding-right: 16px; +} +[dir=rtl] .q-pr-md { + padding-left: 16px; +} +[dir] .q-pt-md, [dir] .q-py-md { + padding-top: 16px; +} +[dir] .q-pb-md, [dir] .q-py-md { + padding-bottom: 16px; +} +[dir=ltr] .q-px-md { + padding-left: 16px; + padding-right: 16px; +} +[dir=rtl] .q-px-md { + padding-right: 16px; + padding-left: 16px; +} +[dir] .q-ma-md { + margin: 16px 16px; +} +[dir=ltr] .q-ml-md { + margin-left: 16px; +} +[dir=rtl] .q-ml-md { + margin-right: 16px; +} +[dir=ltr] .q-mr-md { + margin-right: 16px; +} +[dir=rtl] .q-mr-md { + margin-left: 16px; +} +[dir] .q-mt-md, [dir] .q-my-md { + margin-top: 16px; +} +[dir] .q-mb-md, [dir] .q-my-md { + margin-bottom: 16px; +} +[dir=ltr] .q-mx-md { + margin-left: 16px; + margin-right: 16px; +} +[dir=rtl] .q-mx-md { + margin-right: 16px; + margin-left: 16px; +} +[dir] .q-pa-lg { + padding: 24px 24px; +} +[dir=ltr] .q-pl-lg { + padding-left: 24px; +} +[dir=rtl] .q-pl-lg { + padding-right: 24px; +} +[dir=ltr] .q-pr-lg { + padding-right: 24px; +} +[dir=rtl] .q-pr-lg { + padding-left: 24px; +} +[dir] .q-pt-lg, [dir] .q-py-lg { + padding-top: 24px; +} +[dir] .q-pb-lg, [dir] .q-py-lg { + padding-bottom: 24px; +} +[dir=ltr] .q-px-lg { + padding-left: 24px; + padding-right: 24px; +} +[dir=rtl] .q-px-lg { + padding-right: 24px; + padding-left: 24px; +} +[dir] .q-ma-lg { + margin: 24px 24px; +} +[dir=ltr] .q-ml-lg { + margin-left: 24px; +} +[dir=rtl] .q-ml-lg { + margin-right: 24px; +} +[dir=ltr] .q-mr-lg { + margin-right: 24px; +} +[dir=rtl] .q-mr-lg { + margin-left: 24px; +} +[dir] .q-mt-lg, [dir] .q-my-lg { + margin-top: 24px; +} +[dir] .q-mb-lg, [dir] .q-my-lg { + margin-bottom: 24px; +} +[dir=ltr] .q-mx-lg { + margin-left: 24px; + margin-right: 24px; +} +[dir=rtl] .q-mx-lg { + margin-right: 24px; + margin-left: 24px; +} +[dir] .q-pa-xl { + padding: 48px 48px; +} +[dir=ltr] .q-pl-xl { + padding-left: 48px; +} +[dir=rtl] .q-pl-xl { + padding-right: 48px; +} +[dir=ltr] .q-pr-xl { + padding-right: 48px; +} +[dir=rtl] .q-pr-xl { + padding-left: 48px; +} +[dir] .q-pt-xl, [dir] .q-py-xl { + padding-top: 48px; +} +[dir] .q-pb-xl, [dir] .q-py-xl { + padding-bottom: 48px; +} +[dir=ltr] .q-px-xl { + padding-left: 48px; + padding-right: 48px; +} +[dir=rtl] .q-px-xl { + padding-right: 48px; + padding-left: 48px; +} +[dir] .q-ma-xl { + margin: 48px 48px; +} +[dir=ltr] .q-ml-xl { + margin-left: 48px; +} +[dir=rtl] .q-ml-xl { + margin-right: 48px; +} +[dir=ltr] .q-mr-xl { + margin-right: 48px; +} +[dir=rtl] .q-mr-xl { + margin-left: 48px; +} +[dir] .q-mt-xl, [dir] .q-my-xl { + margin-top: 48px; +} +[dir] .q-mb-xl, [dir] .q-my-xl { + margin-bottom: 48px; +} +[dir=ltr] .q-mx-xl { + margin-left: 48px; + margin-right: 48px; +} +[dir=rtl] .q-mx-xl { + margin-right: 48px; + margin-left: 48px; +} +[dir] .q-mt-auto, [dir] .q-my-auto { + margin-top: auto; +} +[dir=ltr] .q-ml-auto { + margin-left: auto; +} +[dir=rtl] .q-ml-auto { + margin-right: auto; +} +[dir] .q-mb-auto, [dir] .q-my-auto { + margin-bottom: auto; +} +[dir=ltr] .q-mr-auto { + margin-right: auto; +} +[dir=rtl] .q-mr-auto { + margin-left: auto; +} +[dir=ltr] .q-mx-auto { + margin-left: auto; + margin-right: auto; +} +[dir=rtl] .q-mx-auto { + margin-right: auto; + margin-left: auto; +} +.q-touch { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + user-drag: none; + -khtml-user-drag: none; + -webkit-user-drag: none; +} +.q-touch-x { + touch-action: pan-x; +} +.q-touch-y { + touch-action: pan-y; +} +.q-transition--slide-right-leave-active, +.q-transition--slide-left-leave-active, +.q-transition--slide-up-leave-active, +.q-transition--slide-down-leave-active, +.q-transition--jump-right-leave-active, +.q-transition--jump-left-leave-active, +.q-transition--jump-up-leave-active, +.q-transition--jump-down-leave-active, +.q-transition--fade-leave-active, +.q-transition--scale-leave-active, +.q-transition--rotate-leave-active, +.q-transition--flip-leave-active { + position: absolute; +} +.q-transition--slide-right-enter-active, +.q-transition--slide-left-enter-active, +.q-transition--slide-up-enter-active, +.q-transition--slide-down-enter-active, +.q-transition--slide-right-leave-active, +.q-transition--slide-left-leave-active, +.q-transition--slide-up-leave-active, +.q-transition--slide-down-leave-active { + transition: transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); +} +[dir=ltr] .q-transition--slide-right-enter { + transform: translate3d(-100%, 0, 0); +} +[dir=rtl] .q-transition--slide-right-enter { + transform: translate3d(100%, 0, 0); +} +[dir=ltr] .q-transition--slide-right-leave-to { + transform: translate3d(100%, 0, 0); +} +[dir=rtl] .q-transition--slide-right-leave-to { + transform: translate3d(-100%, 0, 0); +} +[dir=ltr] .q-transition--slide-left-enter { + transform: translate3d(100%, 0, 0); +} +[dir=rtl] .q-transition--slide-left-enter { + transform: translate3d(-100%, 0, 0); +} +[dir=ltr] .q-transition--slide-left-leave-to { + transform: translate3d(-100%, 0, 0); +} +[dir=rtl] .q-transition--slide-left-leave-to { + transform: translate3d(100%, 0, 0); +} +[dir] .q-transition--slide-up-enter { + transform: translate3d(0, 100%, 0); +} +[dir] .q-transition--slide-up-leave-to { + transform: translate3d(0, -100%, 0); +} +[dir] .q-transition--slide-down-enter { + transform: translate3d(0, -100%, 0); +} +[dir] .q-transition--slide-down-leave-to { + transform: translate3d(0, 100%, 0); +} +.q-transition--jump-right-enter-active, +.q-transition--jump-left-enter-active, +.q-transition--jump-up-enter-active, +.q-transition--jump-down-enter-active, +.q-transition--jump-right-leave-active, +.q-transition--jump-left-leave-active, +.q-transition--jump-up-leave-active, +.q-transition--jump-down-leave-active { + transition: opacity 0.3s, transform 0.3s; +} +.q-transition--jump-right-enter, +.q-transition--jump-left-enter, +.q-transition--jump-up-enter, +.q-transition--jump-down-enter, +.q-transition--jump-right-leave-to, +.q-transition--jump-left-leave-to, +.q-transition--jump-up-leave-to, +.q-transition--jump-down-leave-to { + opacity: 0; +} +[dir=ltr] .q-transition--jump-right-enter { + transform: translate3d(-15px, 0, 0); +} +[dir=rtl] .q-transition--jump-right-enter { + transform: translate3d(15px, 0, 0); +} +[dir=ltr] .q-transition--jump-right-leave-to { + transform: translate3d(15px, 0, 0); +} +[dir=rtl] .q-transition--jump-right-leave-to { + transform: translate3d(-15px, 0, 0); +} +[dir=ltr] .q-transition--jump-left-enter { + transform: translate3d(15px, 0, 0); +} +[dir=rtl] .q-transition--jump-left-enter { + transform: translate3d(-15px, 0, 0); +} +[dir=ltr] .q-transition--jump-left-leave-to { + transform: translateX(-15px); +} +[dir=rtl] .q-transition--jump-left-leave-to { + transform: translateX(15px); +} +[dir] .q-transition--jump-up-enter { + transform: translate3d(0, 15px, 0); +} +[dir] .q-transition--jump-up-leave-to { + transform: translate3d(0, -15px, 0); +} +[dir] .q-transition--jump-down-enter { + transform: translate3d(0, -15px, 0); +} +[dir] .q-transition--jump-down-leave-to { + transform: translate3d(0, 15px, 0); +} +.q-transition--fade-enter-active, +.q-transition--fade-leave-active { + transition: opacity 0.3s ease-out; +} +.q-transition--fade-enter, +.q-transition--fade-leave, +.q-transition--fade-leave-to { + opacity: 0; +} +.q-transition--scale-enter-active, +.q-transition--scale-leave-active { + transition: opacity 0.3s, transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); +} +.q-transition--scale-enter, +.q-transition--scale-leave, +.q-transition--scale-leave-to { + opacity: 0; +} +[dir] .q-transition--scale-enter, [dir] .q-transition--scale-leave, [dir] .q-transition--scale-leave-to { + transform: scale3d(0, 0, 1); +} +.q-transition--rotate-enter-active, +.q-transition--rotate-leave-active { + transition: opacity 0.3s, transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); + transform-style: preserve-3d; +} +.q-transition--rotate-enter, +.q-transition--rotate-leave, +.q-transition--rotate-leave-to { + opacity: 0; +} +[dir=ltr] .q-transition--rotate-enter, [dir=ltr] .q-transition--rotate-leave, [dir=ltr] .q-transition--rotate-leave-to { + transform: scale3d(0, 0, 1) rotate3d(0, 0, 1, 90deg); +} +[dir=rtl] .q-transition--rotate-enter, [dir=rtl] .q-transition--rotate-leave, [dir=rtl] .q-transition--rotate-leave-to { + transform: scale3d(0, 0, 1) rotate3d(0, 0, 1, -90deg); +} +.q-transition--flip-right-enter-active, +.q-transition--flip-left-enter-active, +.q-transition--flip-up-enter-active, +.q-transition--flip-down-enter-active, +.q-transition--flip-right-leave-active, +.q-transition--flip-left-leave-active, +.q-transition--flip-up-leave-active, +.q-transition--flip-down-leave-active { + transition: transform 0.3s; + backface-visibility: hidden; +} +[dir=ltr] .q-transition--flip-right-enter-to, [dir=ltr] .q-transition--flip-left-enter-to, [dir=ltr] .q-transition--flip-up-enter-to, [dir=ltr] .q-transition--flip-down-enter-to, [dir=ltr] .q-transition--flip-right-leave, [dir=ltr] .q-transition--flip-left-leave, [dir=ltr] .q-transition--flip-up-leave, [dir=ltr] .q-transition--flip-down-leave { + transform: perspective(400px) rotate3d(1, 1, 0, 0deg); +} +[dir=rtl] .q-transition--flip-right-enter-to, [dir=rtl] .q-transition--flip-left-enter-to, [dir=rtl] .q-transition--flip-up-enter-to, [dir=rtl] .q-transition--flip-down-enter-to, [dir=rtl] .q-transition--flip-right-leave, [dir=rtl] .q-transition--flip-left-leave, [dir=rtl] .q-transition--flip-up-leave, [dir=rtl] .q-transition--flip-down-leave { + transform: perspective(400px) rotate3d(1, -1, 0, 0deg); +} +[dir=ltr] .q-transition--flip-right-enter { + transform: perspective(400px) rotate3d(0, 1, 0, -180deg); +} +[dir=rtl] .q-transition--flip-right-enter { + transform: perspective(400px) rotate3d(0, -1, 0, 180deg); +} +[dir=ltr] .q-transition--flip-right-leave-to { + transform: perspective(400px) rotate3d(0, 1, 0, 180deg); +} +[dir=rtl] .q-transition--flip-right-leave-to { + transform: perspective(400px) rotate3d(0, -1, 0, -180deg); +} +[dir=ltr] .q-transition--flip-left-enter { + transform: perspective(400px) rotate3d(0, 1, 0, 180deg); +} +[dir=rtl] .q-transition--flip-left-enter { + transform: perspective(400px) rotate3d(0, -1, 0, -180deg); +} +[dir=ltr] .q-transition--flip-left-leave-to { + transform: perspective(400px) rotate3d(0, 1, 0, -180deg); +} +[dir=rtl] .q-transition--flip-left-leave-to { + transform: perspective(400px) rotate3d(0, -1, 0, 180deg); +} +[dir=ltr] .q-transition--flip-up-enter { + transform: perspective(400px) rotate3d(1, 0, 0, -180deg); +} +[dir=rtl] .q-transition--flip-up-enter { + transform: perspective(400px) rotate3d(1, 0, 0, 180deg); +} +[dir=ltr] .q-transition--flip-up-leave-to { + transform: perspective(400px) rotate3d(1, 0, 0, 180deg); +} +[dir=rtl] .q-transition--flip-up-leave-to { + transform: perspective(400px) rotate3d(1, 0, 0, -180deg); +} +[dir=ltr] .q-transition--flip-down-enter { + transform: perspective(400px) rotate3d(1, 0, 0, 180deg); +} +[dir=rtl] .q-transition--flip-down-enter { + transform: perspective(400px) rotate3d(1, 0, 0, -180deg); +} +[dir=ltr] .q-transition--flip-down-leave-to { + transform: perspective(400px) rotate3d(1, 0, 0, -180deg); +} +[dir=rtl] .q-transition--flip-down-leave-to { + transform: perspective(400px) rotate3d(1, 0, 0, 180deg); +} +.q-transition--hide-scroll, +.q-transition--hide-scroll > .q-panel:first-child { + overflow: hidden !important; +} +body { + min-width: 100px; + min-height: 100%; + font-family: 'Roboto', '-apple-system', 'Helvetica Neue', Helvetica, Arial, sans-serif; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-smoothing: antialiased; + line-height: 1.5; + font-size: 14px; +} +h1 { + font-size: 6rem; + font-weight: 300; + line-height: 6rem; + letter-spacing: -0.01562em; +} +h2 { + font-size: 3.75rem; + font-weight: 300; + line-height: 3.75rem; + letter-spacing: -0.00833em; +} +h3 { + font-size: 3rem; + font-weight: 400; + line-height: 3.125rem; + letter-spacing: normal; +} +h4 { + font-size: 2.125rem; + font-weight: 400; + line-height: 2.5rem; + letter-spacing: 0.00735em; +} +h5 { + font-size: 1.5rem; + font-weight: 400; + line-height: 2rem; + letter-spacing: normal; +} +h6 { + font-size: 1.25rem; + font-weight: 500; + line-height: 2rem; + letter-spacing: 0.0125em; +} +[dir] p { + margin: 0 0 16px; +} +.text-h1 { + font-size: 6rem; + font-weight: 300; + line-height: 6rem; + letter-spacing: -0.01562em; +} +.text-h2 { + font-size: 3.75rem; + font-weight: 300; + line-height: 3.75rem; + letter-spacing: -0.00833em; +} +.text-h3 { + font-size: 3rem; + font-weight: 400; + line-height: 3.125rem; + letter-spacing: normal; +} +.text-h4 { + font-size: 2.125rem; + font-weight: 400; + line-height: 2.5rem; + letter-spacing: 0.00735em; +} +.text-h5 { + font-size: 1.5rem; + font-weight: 400; + line-height: 2rem; + letter-spacing: normal; +} +.text-h6 { + font-size: 1.25rem; + font-weight: 500; + line-height: 2rem; + letter-spacing: 0.0125em; +} +.text-subtitle1 { + font-size: 1rem; + font-weight: 400; + line-height: 1.75rem; + letter-spacing: 0.00937em; +} +.text-subtitle2 { + font-size: 0.875rem; + font-weight: 500; + line-height: 1.375rem; + letter-spacing: 0.00714em; +} +.text-body1 { + font-size: 1rem; + font-weight: 400; + line-height: 1.5rem; + letter-spacing: 0.03125em; +} +.text-body2 { + font-size: 0.875rem; + font-weight: 400; + line-height: 1.25rem; + letter-spacing: 0.01786em; +} +.text-overline { + font-size: 0.75rem; + font-weight: 500; + line-height: 2rem; + letter-spacing: 0.16667em; +} +.text-caption { + font-size: 0.75rem; + font-weight: 400; + line-height: 1.25rem; + letter-spacing: 0.03333em; +} +.text-uppercase { + text-transform: uppercase; +} +.text-lowercase { + text-transform: lowercase; +} +.text-capitalize { + text-transform: capitalize; +} +[dir] .text-center { + text-align: center; +} +[dir=ltr] .text-left { + text-align: left; +} +[dir=rtl] .text-left { + text-align: right; +} +[dir=ltr] .text-right { + text-align: right; +} +[dir=rtl] .text-right { + text-align: left; +} +.text-justify { + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; +} +[dir] .text-justify { + text-align: justify; +} +.text-italic { + font-style: italic; +} +.text-bold { + font-weight: bold; +} +.text-no-wrap { + white-space: nowrap; +} +.text-strike { + text-decoration: line-through; +} +.text-weight-thin { + font-weight: 100; +} +.text-weight-light { + font-weight: 300; +} +.text-weight-regular { + font-weight: 400; +} +.text-weight-medium { + font-weight: 500; +} +.text-weight-bold { + font-weight: 700; +} +.text-weight-bolder { + font-weight: 900; +} +small { + font-size: 80%; +} +big { + font-size: 170%; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +[dir] .no-margin { + margin: 0 !important; +} +[dir] .no-padding { + padding: 0 !important; +} +[dir] .no-border { + border: 0 !important; +} +[dir] .no-border-radius { + border-radius: 0 !important; +} +[dir] .no-box-shadow { + box-shadow: none !important; +} +.no-outline { + outline: 0 !important; +} +.ellipsis { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +.ellipsis-2-lines, +.ellipsis-3-lines { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; +} +.ellipsis-2-lines { + -webkit-line-clamp: 2; +} +.ellipsis-3-lines { + -webkit-line-clamp: 3; +} +[dir] .readonly { + cursor: default !important; +} +.disabled, +[disabled], +.disabled *, +[disabled] * { + outline: 0 !important; +} +[dir] .disabled, [dir] [disabled], [dir] .disabled *, [dir] [disabled] * { + cursor: not-allowed !important; +} +.disabled, +[disabled] { + opacity: 0.6 !important; +} +.hidden { + display: none !important; +} +.invisible { + visibility: hidden !important; +} +[dir] .transparent { + background: transparent !important; +} +.overflow-auto { + overflow: auto !important; +} +.overflow-hidden { + overflow: hidden !important; +} +.overflow-hidden-y { + overflow-y: hidden !important; +} +.hide-scrollbar { + scrollbar-width: none; + -ms-overflow-style: none; +} +.hide-scrollbar::-webkit-scrollbar { + width: 0; + height: 0; + display: none; +} +.dimmed:after, +.light-dimmed:after { + content: ''; + position: absolute; + top: 0; + right: 0 /* rtl:ignore */; + bottom: 0; + left: 0 /* rtl:ignore */; +} +[dir] .dimmed:after { + background: rgba(0,0,0,0.4) !important; +} +[dir] .light-dimmed:after { + background: rgba(255,255,255,0.6) !important; +} +.z-top { + z-index: 7000 !important; +} +.z-max { + z-index: 9998 !important; +} +body:not(.desktop) .desktop-only, +body.desktop .desktop-hide { + display: none !important; +} +body:not(.mobile) .mobile-only, +body.mobile .mobile-hide { + display: none !important; +} +body:not(.native-mobile) .native-mobile-only, +body.native-mobile .native-mobile-hide { + display: none !important; +} +body:not(.cordova) .cordova-only, +body.cordova .cordova-hide { + display: none !important; +} +body:not(.capacitor) .capacitor-only, +body.capacitor .capacitor-hide { + display: none !important; +} +body:not(.electron) .electron-only, +body.electron .electron-hide { + display: none !important; +} +body:not(.touch) .touch-only, +body.touch .touch-hide { + display: none !important; +} +body:not(.within-iframe) .within-iframe-only, +body.within-iframe .within-iframe-hide { + display: none !important; +} +body:not(.platform-ios) .platform-ios-only, +body.platform-ios .platform-ios-hide { + display: none !important; +} +body:not(.platform-android) .platform-android-only, +body.platform-android .platform-android-hide { + display: none !important; +} +@media all and (orientation: portrait) { + .orientation-landscape { + display: none !important; + } +} +@media all and (orientation: landscape) { + .orientation-portrait { + display: none !important; + } +} +@media screen { + .print-only { + display: none !important; + } +} +@media print { + .print-hide { + display: none !important; + } +} +@media (max-width: 599.98px) { + .xs-hide, + .gt-xs, + .sm, + .gt-sm, + .md, + .gt-md, + .lg, + .gt-lg, + .xl { + display: none !important; + } +} +@media (min-width: 600px) and (max-width: 1023.98px) { + .sm-hide, + .xs, + .lt-sm, + .gt-sm, + .md, + .gt-md, + .lg, + .gt-lg, + .xl { + display: none !important; + } +} +@media (min-width: 1024px) and (max-width: 1439.98px) { + .md-hide, + .xs, + .lt-sm, + .sm, + .lt-md, + .gt-md, + .lg, + .gt-lg, + .xl { + display: none !important; + } +} +@media (min-width: 1440px) and (max-width: 1919.98px) { + .lg-hide, + .xs, + .lt-sm, + .sm, + .lt-md, + .md, + .lt-lg, + .gt-lg, + .xl { + display: none !important; + } +} +@media (min-width: 1920px) { + .xl-hide, + .xs, + .lt-sm, + .sm, + .lt-md, + .md, + .lt-lg, + .lg, + .lt-xl { + display: none !important; + } +} +.q-focus-helper, +.q-focusable, +.q-manual-focusable, +.q-hoverable { + outline: 0; +} +body.desktop .q-focus-helper { + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + width: 100%; + height: 100%; + pointer-events: none; + opacity: 0; + transition: background-color 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), opacity 0.4s cubic-bezier(0.25, 0.8, 0.5, 1); +} +[dir] body.desktop .q-focus-helper { + border-radius: inherit; +} +body.desktop .q-focus-helper:before, +body.desktop .q-focus-helper:after { + content: ''; + position: absolute; + top: 0; + left: 0 /* rtl:ignore */; + width: 100%; + height: 100%; + opacity: 0; + transition: background-color 0.3s cubic-bezier(0.25, 0.8, 0.5, 1), opacity 0.6s cubic-bezier(0.25, 0.8, 0.5, 1); +} +[dir] body.desktop .q-focus-helper:before, [dir] body.desktop .q-focus-helper:after { + border-radius: inherit; +} +[dir] body.desktop .q-focus-helper:before { + background: #000; +} +[dir] body.desktop .q-focus-helper:after { + background: #fff; +} +[dir] body.desktop .q-focus-helper--rounded { + border-radius: 4px; +} +[dir] body.desktop .q-focus-helper--round { + border-radius: 50%; +} +body.desktop .q-focusable:focus > .q-focus-helper, +body.desktop .q-manual-focusable--focused > .q-focus-helper, +body.desktop .q-hoverable:hover > .q-focus-helper { + opacity: 0.15; +} +[dir] body.desktop .q-focusable:focus > .q-focus-helper, [dir] body.desktop .q-manual-focusable--focused > .q-focus-helper, [dir] body.desktop .q-hoverable:hover > .q-focus-helper { + background: currentColor; +} +body.desktop .q-focusable:focus > .q-focus-helper:before, +body.desktop .q-manual-focusable--focused > .q-focus-helper:before, +body.desktop .q-hoverable:hover > .q-focus-helper:before { + opacity: 0.1; +} +body.desktop .q-focusable:focus > .q-focus-helper:after, +body.desktop .q-manual-focusable--focused > .q-focus-helper:after, +body.desktop .q-hoverable:hover > .q-focus-helper:after { + opacity: 0.4; +} +body.desktop .q-focusable:focus > .q-focus-helper, +body.desktop .q-manual-focusable--focused > .q-focus-helper { + opacity: 0.22; +} +body.desktop .q-key-group-navigation--active { + outline: auto; +} +body.body--light, +body.body--dark-auto, +.q-light, +.q-dark-auto { + color: #000; + color: var(--q-color-light-text); +} +[dir] body.body--light, [dir] body.body--dark-auto, [dir] .q-light, [dir] .q-dark-auto { + background: #fff; + background: var(--q-color-light-page); +} +body.body--dark { + color: #fff; + color: var(--q-color-dark-text); +} +[dir] body.body--dark { + background: #121212; + background: var(--q-color-dark-page); +} +.q-dark { + color: #fff; + color: var(--q-color-dark-text); +} +[dir] .q-dark { + background: #1d1d1d; + background: var(--q-color-dark); +} +@media (prefers-color-scheme: dark) { + body.body--dark-auto { + color: #fff; + color: var(--q-color-dark-text); + } + [dir] body.body--dark-auto { + background: #121212; + background: var(--q-color-dark-page); + } + .q-dark-auto { + color: #fff; + color: var(--q-color-dark-text); + } + [dir] .q-dark-auto { + background: #1d1d1d; + background: var(--q-color-dark); + } +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .q-item:after, + .q-toolbar:after, + .q-notification:after { + content: ''; + font-size: 0; + visibility: collapse; + display: inline; + width: 0; + } + .q-banner > .q-banner__avatar { + min-height: 38px; + } + .q-banner--dense > .q-banner__avatar { + min-height: 20px; + } + .q-item:after { + min-height: 32px; + } + .q-list--dense > .q-itemafter, + .q-item--denseafter { + min-height: 24px; + } + .q-toolbar:after { + min-height: 50px; + } + .q-notification--standard:after { + min-height: 48px; + } + .q-notification--multi-line { + min-height: 68px; + } + .q-btn__wrapper, + .q-time__content, + .q-toolbar__title, + .q-menu .q-item__section--main, + .q-table__middle { + flex-basis: auto; + } + .q-banner__content { + flex-basis: 0 !important; + } + .q-menu > .q-banner > .q-banner__content, + .q-dialog__inner > .q-banner > .q-banner__content { + flex-basis: auto !important; + } + .q-tab__content { + flex-basis: auto; + min-width: 100%; + } + .q-card__actions--vert { + flex: 0 0 auto; + } + .column { + min-width: 0%; + } + .q-item__section--avatar { + min-width: 56px; + } + [dir=ltr] button.q-btn--actionable:active:hover .q-btn__wrapper { + margin: -1px 1px 1px -1px; + } + [dir=rtl] button.q-btn--actionable:active:hover .q-btn__wrapper { + margin: -1px -1px 1px 1px; + } + [dir=ltr] .q-btn-group--push > button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper { + margin: 1px 1px -1px -1px; + } + [dir=rtl] .q-btn-group--push > button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper { + margin: 1px -1px -1px 1px; + } + .q-btn { + overflow: visible; + } + .q-btn--wrap { + flex-direction: row; + } + .q-carousel__slide > * { + max-width: 100%; + } + .q-tabs--vertical .q-tab__indicator { + height: auto; + } + .q-spinner { + -webkit-animation: q-ie-spinner 2s linear infinite /* rtl:ignore */; + animation: q-ie-spinner 2s linear infinite /* rtl:ignore */; + transform-origin: center center /* rtl:ignore */; + opacity: 0.5; + } + .q-spinner.q-spinner-mat .path { + stroke-dasharray: 89, 200; + } + .q-checkbox__indet { + opacity: 0; + } + .q-checkbox__inner--indet .q-checkbox__indet { + opacity: 1; + } + .q-radio__check { + opacity: 0; + } + .q-radio__inner--truthy .q-radio__check { + opacity: 1; + } + .q-date__main { + min-height: 290px !important; + } + .q-date__months { + align-items: stretch; + } + .q-time--portrait .q-time__main { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + flex: 1 0 auto; + } + .q-field__prefix, + .q-field__suffix { + flex: 1 0 auto; + } + [dir=ltr] .q-field__bottom--stale .q-field__messages { + left: 12px; + } + [dir=rtl] .q-field__bottom--stale .q-field__messages { + right: 12px; + } + [dir=ltr] .q-field--borderless .q-field__bottom--stale .q-field__messages, [dir=ltr] .q-field--standard .q-field__bottom--stale .q-field__messages { + left: 0; + } + [dir=rtl] .q-field--borderless .q-field__bottom--stale .q-field__messages, [dir=rtl] .q-field--standard .q-field__bottom--stale .q-field__messages { + right: 0; + } + .q-field--float .q-field__label { + max-width: 100%; + } + .q-focus-helper { + z-index: 1; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 0), (-ms-high-contrast: none) and (min-width: 0) { + .row > .col, + .row > .col-xs, + .flex > .col, + .flex > .col-xs { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 600px), (-ms-high-contrast: none) and (min-width: 600px) { + .row > .col-sm, + .flex > .col-sm { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1024px), (-ms-high-contrast: none) and (min-width: 1024px) { + .row > .col-md, + .flex > .col-md { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1440px), (-ms-high-contrast: none) and (min-width: 1440px) { + .row > .col-lg, + .flex > .col-lg { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1920px), (-ms-high-contrast: none) and (min-width: 1920px) { + .row > .col-xl, + .flex > .col-xl { + flex-basis: auto; + min-width: 0%; + } +} +@supports (-ms-ime-align: auto) { + .q-item:after, + .q-toolbar:after, + .q-notification:after { + content: ''; + font-size: 0; + visibility: collapse; + display: inline; + width: 0; + } + .q-banner > .q-banner__avatar { + min-height: 38px; + } + .q-banner--dense > .q-banner__avatar { + min-height: 20px; + } + .q-item:after { + min-height: 32px; + } + .q-list--dense > .q-itemafter, + .q-item--denseafter { + min-height: 24px; + } + .q-toolbar:after { + min-height: 50px; + } + .q-notification--standard:after { + min-height: 48px; + } + .q-notification--multi-line { + min-height: 68px; + } + .q-btn__wrapper, + .q-time__content, + .q-toolbar__title, + .q-menu .q-item__section--main, + .q-table__middle { + flex-basis: auto; + } + .q-banner__content { + flex-basis: 0 !important; + } + .q-menu > .q-banner > .q-banner__content, + .q-dialog__inner > .q-banner > .q-banner__content { + flex-basis: auto !important; + } + .q-tab__content { + flex-basis: auto; + min-width: 100%; + } + .q-card__actions--vert { + flex: 0 0 auto; + } + .column { + min-width: 0%; + } +@media screen and (-ms-high-contrast: active) and (min-width: 0), (-ms-high-contrast: none) and (min-width: 0) { + .row > .col, + .row > .col-xs, + .flex > .col, + .flex > .col-xs { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 600px), (-ms-high-contrast: none) and (min-width: 600px) { + .row > .col-sm, + .flex > .col-sm { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1024px), (-ms-high-contrast: none) and (min-width: 1024px) { + .row > .col-md, + .flex > .col-md { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1440px), (-ms-high-contrast: none) and (min-width: 1440px) { + .row > .col-lg, + .flex > .col-lg { + flex-basis: auto; + min-width: 0%; + } +} +@media screen and (-ms-high-contrast: active) and (min-width: 1920px), (-ms-high-contrast: none) and (min-width: 1920px) { + .row > .col-xl, + .flex > .col-xl { + flex-basis: auto; + min-width: 0%; + } +} + .q-item__section--avatar { + min-width: 56px; + } + [dir=ltr] button.q-btn--actionable:active:hover .q-btn__wrapper { + margin: -1px 1px 1px -1px; + } + [dir=rtl] button.q-btn--actionable:active:hover .q-btn__wrapper { + margin: -1px -1px 1px 1px; + } + [dir=ltr] .q-btn-group--push > button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper { + margin: 1px 1px -1px -1px; + } + [dir=rtl] .q-btn-group--push > button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper { + margin: 1px -1px -1px 1px; + } + .q-btn { + overflow: visible; + } + .q-btn--wrap { + flex-direction: row; + } + .q-carousel__slide > * { + max-width: 100%; + } + .q-tabs--vertical .q-tab__indicator { + height: auto; + } + .q-spinner { + -webkit-animation: q-ie-spinner 2s linear infinite /* rtl:ignore */; + animation: q-ie-spinner 2s linear infinite /* rtl:ignore */; + transform-origin: center center /* rtl:ignore */; + opacity: 0.5; + } + .q-spinner.q-spinner-mat .path { + stroke-dasharray: 89, 200; + } + .q-checkbox__indet { + opacity: 0; + } + .q-checkbox__inner--indet .q-checkbox__indet { + opacity: 1; + } + .q-radio__check { + opacity: 0; + } + .q-radio__inner--truthy .q-radio__check { + opacity: 1; + } + .q-date__main { + min-height: 290px !important; + } + .q-date__months { + align-items: stretch; + } + .q-time--portrait .q-time__main { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + flex: 1 0 auto; + } + .q-field__prefix, + .q-field__suffix { + flex: 1 0 auto; + } + [dir=ltr] .q-field__bottom--stale .q-field__messages { + left: 12px; + } + [dir=rtl] .q-field__bottom--stale .q-field__messages { + right: 12px; + } + [dir=ltr] .q-field--borderless .q-field__bottom--stale .q-field__messages, [dir=ltr] .q-field--standard .q-field__bottom--stale .q-field__messages { + left: 0; + } + [dir=rtl] .q-field--borderless .q-field__bottom--stale .q-field__messages, [dir=rtl] .q-field--standard .q-field__bottom--stale .q-field__messages { + right: 0; + } + .q-field--float .q-field__label { + max-width: 100%; + } + .q-focus-helper { + z-index: 1; + } +} +@-webkit-keyframes q-circular-progress-circle { + 0% { + stroke-dasharray: 1, 400; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 400, 400; + stroke-dashoffset: -100; + } + 100% { + stroke-dasharray: 400, 400; + stroke-dashoffset: -300; + } +} +@keyframes q-circular-progress-circle { + 0% { + stroke-dasharray: 1, 400; + stroke-dashoffset: 0; + } + 50% { + stroke-dasharray: 400, 400; + stroke-dashoffset: -100; + } + 100% { + stroke-dasharray: 400, 400; + stroke-dashoffset: -300; + } +} +@-webkit-keyframes q-expansion-done { + 0% { + --q-exp-done: 1; + } +} +@keyframes q-expansion-done { + 0% { + --q-exp-done: 1; + } +} +@-webkit-keyframes q-field-label-ltr { + 40% { + margin-left: 2px; + } + 60%, 80% { + margin-left: -2px; + } + 70%, 90% { + margin-left: 2px; + } +} +@-webkit-keyframes q-field-label-rtl { + 40% { + margin-left: 2px; + } + 60%, 80% { + margin-left: -2px; + } + 70%, 90% { + margin-left: 2px; + } +} +@keyframes q-field-label-ltr { + 40% { + margin-left: 2px; + } + 60%, 80% { + margin-left: -2px; + } + 70%, 90% { + margin-left: 2px; + } +} +@keyframes q-field-label-rtl { + 40% { + margin-left: 2px; + } + 60%, 80% { + margin-left: -2px; + } + 70%, 90% { + margin-left: 2px; + } +} +@-webkit-keyframes q-autofill { + to { + background: transparent; + color: inherit; + } +} +@keyframes q-autofill { + to { + background: transparent; + color: inherit; + } +} +@-webkit-keyframes q-linear-progress--indeterminate-ltr { + 0% { + transform: translate3d(-35%, 0, 0) scale3d(0.35, 1, 1); + } + 60% { + transform: translate3d(100%, 0, 0) scale3d(0.9, 1, 1); + } + 100% { + transform: translate3d(100%, 0, 0) scale3d(0.9, 1, 1); + } +} +@-webkit-keyframes q-linear-progress--indeterminate-rtl { + 0% { + transform: translate3d(35%, 0, 0) scale3d(0.35, 1, 1); + } + 60% { + transform: translate3d(-100%, 0, 0) scale3d(0.9, 1, 1); + } + 100% { + transform: translate3d(-100%, 0, 0) scale3d(0.9, 1, 1); + } +} +@keyframes q-linear-progress--indeterminate-ltr { + 0% { + transform: translate3d(-35%, 0, 0) scale3d(0.35, 1, 1); + } + 60% { + transform: translate3d(100%, 0, 0) scale3d(0.9, 1, 1); + } + 100% { + transform: translate3d(100%, 0, 0) scale3d(0.9, 1, 1); + } +} +@keyframes q-linear-progress--indeterminate-rtl { + 0% { + transform: translate3d(35%, 0, 0) scale3d(0.35, 1, 1); + } + 60% { + transform: translate3d(-100%, 0, 0) scale3d(0.9, 1, 1); + } + 100% { + transform: translate3d(-100%, 0, 0) scale3d(0.9, 1, 1); + } +} +@-webkit-keyframes q-linear-progress--indeterminate-short-ltr { + 0% { + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1); + } + 60% { + transform: translate3d(107%, 0, 0) scale3d(0.01, 1, 1); + } + 100% { + transform: translate3d(107%, 0, 0) scale3d(0.01, 1, 1); + } +} +@-webkit-keyframes q-linear-progress--indeterminate-short-rtl { + 0% { + transform: translate3d(101%, 0, 0) scale3d(1, 1, 1); + } + 60% { + transform: translate3d(-107%, 0, 0) scale3d(0.01, 1, 1); + } + 100% { + transform: translate3d(-107%, 0, 0) scale3d(0.01, 1, 1); + } +} +@keyframes q-linear-progress--indeterminate-short-ltr { + 0% { + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1); + } + 60% { + transform: translate3d(107%, 0, 0) scale3d(0.01, 1, 1); + } + 100% { + transform: translate3d(107%, 0, 0) scale3d(0.01, 1, 1); + } +} +@keyframes q-linear-progress--indeterminate-short-rtl { + 0% { + transform: translate3d(101%, 0, 0) scale3d(1, 1, 1); + } + 60% { + transform: translate3d(-107%, 0, 0) scale3d(0.01, 1, 1); + } + 100% { + transform: translate3d(-107%, 0, 0) scale3d(0.01, 1, 1); + } +} +@-webkit-keyframes q-skeleton--fade { + 0% { + opacity: 1; + } + 50% { + opacity: 0.4; + } + 100% { + opacity: 1; + } +} +@keyframes q-skeleton--fade { + 0% { + opacity: 1; + } + 50% { + opacity: 0.4; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes q-skeleton--pulse { + 0% { + transform: scale(1); + } + 50% { + transform: scale(0.85); + } + 100% { + transform: scale(1); + } +} +@keyframes q-skeleton--pulse { + 0% { + transform: scale(1); + } + 50% { + transform: scale(0.85); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes q-skeleton--pulse-x { + 0% { + transform: scaleX(1); + } + 50% { + transform: scaleX(0.75); + } + 100% { + transform: scaleX(1); + } +} +@keyframes q-skeleton--pulse-x { + 0% { + transform: scaleX(1); + } + 50% { + transform: scaleX(0.75); + } + 100% { + transform: scaleX(1); + } +} +@-webkit-keyframes q-skeleton--pulse-y { + 0% { + transform: scaleY(1); + } + 50% { + transform: scaleY(0.75); + } + 100% { + transform: scaleY(1); + } +} +@keyframes q-skeleton--pulse-y { + 0% { + transform: scaleY(1); + } + 50% { + transform: scaleY(0.75); + } + 100% { + transform: scaleY(1); + } +} +@-webkit-keyframes q-skeleton--wave-ltr { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +} +@-webkit-keyframes q-skeleton--wave-rtl { + 0% { + transform: translateX(100%); + } + 100% { + transform: translateX(-100%); + } +} +@keyframes q-skeleton--wave-ltr { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +} +@keyframes q-skeleton--wave-rtl { + 0% { + transform: translateX(100%); + } + 100% { + transform: translateX(-100%); + } +} +@-webkit-keyframes q-spin-ltr { + 0% { + transform: rotate3d(0, 0, 1, 0deg) /* rtl:ignore */; + } + 25% { + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */; + } + 50% { + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */; + } + 75% { + transform: rotate3d(0, 0, 1, 270deg) /* rtl:ignore */; + } + 100% { + transform: rotate3d(0, 0, 1, 359deg) /* rtl:ignore */; + } +} +@-webkit-keyframes q-spin-rtl { + 0% { + transform: rotate3d(0, 0, 1, 0deg) /* rtl:ignore */; + } + 25% { + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */; + } + 50% { + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */; + } + 75% { + transform: rotate3d(0, 0, 1, 270deg) /* rtl:ignore */; + } + 100% { + transform: rotate3d(0, 0, 1, 359deg) /* rtl:ignore */; + } +} +@keyframes q-spin { + 0% { + transform: rotate3d(0, 0, 1, 0deg) /* rtl:ignore */; + } + 25% { + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */; + } + 50% { + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */; + } + 75% { + transform: rotate3d(0, 0, 1, 270deg) /* rtl:ignore */; + } + 100% { + transform: rotate3d(0, 0, 1, 359deg) /* rtl:ignore */; + } +} +@-webkit-keyframes q-mat-dash-ltr { + 0% { + stroke-dasharray: 1, 200 /* rtl:ignore */; + stroke-dashoffset: 0 /* rtl:ignore */; + } + 50% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -35px /* rtl:ignore */; + } + 100% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -124px /* rtl:ignore */; + } +} +@-webkit-keyframes q-mat-dash-rtl { + 0% { + stroke-dasharray: 1, 200 /* rtl:ignore */; + stroke-dashoffset: 0 /* rtl:ignore */; + } + 50% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -35px /* rtl:ignore */; + } + 100% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -124px /* rtl:ignore */; + } +} +@keyframes q-mat-dash { + 0% { + stroke-dasharray: 1, 200 /* rtl:ignore */; + stroke-dashoffset: 0 /* rtl:ignore */; + } + 50% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -35px /* rtl:ignore */; + } + 100% { + stroke-dasharray: 89, 200 /* rtl:ignore */; + stroke-dashoffset: -124px /* rtl:ignore */; + } +} +@-webkit-keyframes q-notif-badge-ltr { + 15% { + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + 30% { + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + 45% { + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + 60% { + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + 75% { + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } +} +@-webkit-keyframes q-notif-badge-rtl { + 15% { + transform: translate3d(25%, 0, 0) rotate3d(0, 0, 1, 5deg); + } + 30% { + transform: translate3d(-20%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + 45% { + transform: translate3d(15%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + 60% { + transform: translate3d(-10%, 0, 0) rotate3d(0, 0, 1, -2deg); + } + 75% { + transform: translate3d(5%, 0, 0) rotate3d(0, 0, 1, 1deg); + } +} +@keyframes q-notif-badge-ltr { + 15% { + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + 30% { + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + 45% { + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + 60% { + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + 75% { + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } +} +@keyframes q-notif-badge-rtl { + 15% { + transform: translate3d(25%, 0, 0) rotate3d(0, 0, 1, 5deg); + } + 30% { + transform: translate3d(-20%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + 45% { + transform: translate3d(15%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + 60% { + transform: translate3d(-10%, 0, 0) rotate3d(0, 0, 1, -2deg); + } + 75% { + transform: translate3d(5%, 0, 0) rotate3d(0, 0, 1, 1deg); + } +} +@-webkit-keyframes q-notif-progress { + 0% { + transform: scaleX(1); + } + 100% { + transform: scaleX(0); + } +} +@keyframes q-notif-progress { + 0% { + transform: scaleX(1); + } + 100% { + transform: scaleX(0); + } +} +@-webkit-keyframes q-scale { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.04); + } + 100% { + transform: scale(1); + } +} +@keyframes q-scale { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.04); + } + 100% { + transform: scale(1); + } +} +@-webkit-keyframes q-fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes q-fade { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes q-ie-spinner { + 0% { + opacity: 0.5; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0.5; + } +} +@keyframes q-ie-spinner { + 0% { + opacity: 0.5; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0.5; + } +} diff --git a/dist/quasar.rtl.min.css b/dist/quasar.rtl.min.css new file mode 100644 index 00000000000..230be3e5676 --- /dev/null +++ b/dist/quasar.rtl.min.css @@ -0,0 +1 @@ +*,:after,:before{box-sizing:inherit;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent}#q-app,body,html{width:100%}[dir=ltr] #q-app,[dir=ltr] body,html[dir=ltr]{direction:ltr}[dir=rtl] #q-app,[dir=rtl] body,html[dir=rtl]{direction:rtl}body.platform-ios.within-iframe,body.platform-ios.within-iframe #q-app{width:100px;min-width:100%}body,html{box-sizing:border-box}[dir] body,html[dir]{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}[dir] abbr[title]{border-bottom:none}[dir] img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;font-family:inherit}[dir] button,[dir] input,[dir] optgroup,[dir] select,[dir] textarea{margin:0}optgroup{font-weight:700}button,input,select{overflow:visible;text-transform:none}[dir] button::-moz-focus-inner,[dir] input::-moz-focus-inner{border:0;padding:0}button:-moz-focusring,input:-moz-focusring{outline:1px dotted ButtonText}[dir] fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;white-space:normal}[dir] legend{padding:0}progress{vertical-align:baseline}textarea{overflow:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.q-icon{line-height:1;width:1em;height:1em;flex-shrink:0;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;position:relative;box-sizing:content-box;fill:currentColor}[dir] .q-icon{text-align:center}[dir=ltr] .q-icon{direction:ltr}[dir=rtl] .q-icon{direction:rtl}.q-icon:after,.q-icon:before{width:100%;height:100%;display:flex!important;align-items:center;justify-content:center}.q-icon>img,.q-icon>svg{width:100%;height:100%}.material-icons,.material-icons-outlined,.material-icons-round,.material-icons-sharp,.material-symbols-outlined,.material-symbols-rounded,.material-symbols-sharp,.q-icon{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:inherit;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}[dir] .material-icons,[dir] .material-icons-outlined,[dir] .material-icons-round,[dir] .material-icons-sharp,[dir] .material-symbols-outlined,[dir] .material-symbols-rounded,[dir] .material-symbols-sharp,[dir] .q-icon{cursor:inherit}.q-panel,.q-panel>div{height:100%;width:100%}.q-panel-parent{overflow:hidden;position:relative}.q-loading-bar{position:fixed;z-index:9998;transition:transform 0.5s cubic-bezier(0,0,0.2,1),opacity 0.5s}[dir] .q-loading-bar{background:#f44336}.q-loading-bar--top{left:0;right:0;top:0;width:100%}.q-loading-bar--bottom{left:0;right:0;bottom:0;width:100%}.q-loading-bar--right{top:0;bottom:0;height:100%}[dir=ltr] .q-loading-bar--right{right:0}[dir=rtl] .q-loading-bar--right{left:0}.q-loading-bar--left{top:0;bottom:0;height:100%}[dir=ltr] .q-loading-bar--left{left:0}[dir=rtl] .q-loading-bar--left{right:0}.q-avatar{position:relative;vertical-align:middle;display:inline-block;font-size:48px;height:1em;width:1em}[dir] .q-avatar{border-radius:50%}.q-avatar__content{font-size:0.5em;line-height:0.5em}.q-avatar__content,.q-avatar img:not(.q-icon){height:inherit;width:inherit}[dir] .q-avatar__content,[dir] .q-avatar img:not(.q-icon){border-radius:inherit}[dir] .q-avatar--square{border-radius:0}.q-badge{color:#fff;color:var(--q-color-dark-text);font-size:12px;line-height:12px;min-height:12px;font-weight:400;vertical-align:baseline}[dir] .q-badge{background-color:#1976d2;background-color:var(--q-color-primary);padding:2px 6px;border-radius:4px}.q-badge--single-line{white-space:nowrap}.q-badge--multi-line{word-break:break-all;word-wrap:break-word}.q-badge--floating{position:absolute;top:-4px}[dir] .q-badge--floating{cursor:inherit}[dir=ltr] .q-badge--floating{right:-3px}[dir=rtl] .q-badge--floating{left:-3px}.q-badge--transparent{opacity:0.8}[dir] .q-badge--outline{background-color:transparent;border:1px solid currentColor}[dir] .q-badge--rounded{border-radius:1em}.q-banner{min-height:54px}[dir] .q-banner{padding:8px 16px}[dir] .q-banner--top-padding{padding-top:14px}.q-banner__avatar{min-width:1px!important}.q-banner__avatar>.q-avatar{font-size:46px}.q-banner__avatar>.q-icon{font-size:40px}[dir=ltr] .q-banner__avatar:not(:empty)+.q-banner__content{padding-left:16px}[dir=rtl] .q-banner__avatar:not(:empty)+.q-banner__content{padding-right:16px}[dir=ltr] .q-banner__actions.col-auto{padding-left:16px}[dir=rtl] .q-banner__actions.col-auto{padding-right:16px}[dir=ltr] .q-banner__actions.col-all .q-btn-item{margin:4px 0 0 4px}[dir=rtl] .q-banner__actions.col-all .q-btn-item{margin:4px 4px 0 0}.q-banner--dense{min-height:32px}[dir] .q-banner--dense{padding:8px}[dir] .q-banner--dense.q-banner--top-padding{padding-top:12px}.q-banner--dense .q-banner__avatar>.q-avatar,.q-banner--dense .q-banner__avatar>.q-icon{font-size:28px}[dir=ltr] .q-banner--dense .q-banner__avatar:not(:empty)+.q-banner__content{padding-left:8px}[dir=rtl] .q-banner--dense .q-banner__avatar:not(:empty)+.q-banner__content{padding-right:8px}[dir=ltr] .q-banner--dense .q-banner__actions.col-auto{padding-left:8px}[dir=rtl] .q-banner--dense .q-banner__actions.col-auto{padding-right:8px}[dir] .q-bar{background:rgba(0,0,0,0.2)}[dir=ltr] .q-bar>.q-icon{margin-left:2px}[dir=rtl] .q-bar>.q-icon{margin-right:2px}[dir=ltr] .q-bar>div,[dir=ltr] .q-bar>div+.q-icon{margin-left:8px}[dir=rtl] .q-bar>div,[dir=rtl] .q-bar>div+.q-icon{margin-right:8px}[dir=ltr] .q-bar>.q-btn{margin-left:2px}[dir=rtl] .q-bar>.q-btn{margin-right:2px}[dir=ltr] .q-bar>.q-btn:first-child,[dir=ltr] .q-bar>.q-icon:first-child,[dir=ltr] .q-bar>div:first-child{margin-left:0}[dir=rtl] .q-bar>.q-btn:first-child,[dir=rtl] .q-bar>.q-icon:first-child,[dir=rtl] .q-bar>div:first-child{margin-right:0}.q-bar--standard{height:32px;font-size:18px}[dir] .q-bar--standard{padding:0 12px}.q-bar--standard>div{font-size:16px}.q-bar--standard .q-btn{font-size:11px}.q-bar--dense{height:24px;font-size:14px}[dir] .q-bar--dense{padding:0 8px}.q-bar--dense .q-btn{font-size:8px}[dir] .q-bar--dark{background:hsla(0,0%,100%,0.15)}@media (prefers-color-scheme:dark){[dir] .q-bar--dark-auto{background:hsla(0,0%,100%,0.15)}}.q-breadcrumbs__el{color:inherit}.q-breadcrumbs__el-icon{font-size:125%}[dir=ltr] .q-breadcrumbs__el-icon--with-label{margin-right:8px}[dir=rtl] .q-breadcrumbs__el-icon--with-label{margin-left:8px}[dir=rtl] .q-breadcrumbs__separator .q-icon{transform:scaleX(-1)}.q-btn{display:inline-flex;flex-direction:column;align-items:stretch;position:relative;outline:0;vertical-align:middle;font-size:14px;line-height:1.715em;text-decoration:none;color:inherit;font-weight:500;text-transform:uppercase;width:auto;height:auto}[dir] .q-btn{border:0;padding:0;background:transparent;text-align:center}.q-btn .q-icon,.q-btn .q-spinner{font-size:1.715em}.q-btn.disabled{opacity:0.7!important}.q-btn__wrapper{min-height:2.572em;width:100%;height:100%}[dir] .q-btn__wrapper{padding:4px 16px;border-radius:inherit}.q-btn__wrapper:before{content:"";display:block;position:absolute;top:0;bottom:0}[dir] .q-btn__wrapper:before{border-radius:inherit;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}[dir=ltr] .q-btn__wrapper:before,[dir=rtl] .q-btn__wrapper:before{left:0;right:0}[dir] .q-btn--actionable{cursor:pointer}.q-btn--actionable.q-btn--standard .q-btn__wrapper:before{transition:box-shadow 0.3s cubic-bezier(0.25,0.8,0.5,1)}[dir] .q-btn--actionable.q-btn--standard.q-btn--active .q-btn__wrapper:before,[dir] .q-btn--actionable.q-btn--standard:active .q-btn__wrapper:before{box-shadow:0 3px 5px -1px rgba(0,0,0,0.2),0 5px 8px rgba(0,0,0,0.14),0 1px 14px rgba(0,0,0,0.12)}.q-btn--no-uppercase{text-transform:none}[dir] .q-btn--rectangle{border-radius:3px}[dir] .q-btn--outline{background:transparent!important}[dir] .q-btn--outline .q-btn__wrapper:before{border:1px solid currentColor}[dir] .q-btn--push{border-radius:7px}[dir] .q-btn--push .q-btn__wrapper:before{border-bottom:3px solid rgba(0,0,0,0.15)}.q-btn--push.q-btn--actionable{transition:transform 0.3s cubic-bezier(0.25,0.8,0.5,1)}.q-btn--push.q-btn--actionable .q-btn__wrapper:before{transition:top 0.3s cubic-bezier(0.25,0.8,0.5,1),bottom 0.3s cubic-bezier(0.25,0.8,0.5,1),border-bottom-width 0.3s cubic-bezier(0.25,0.8,0.5,1)}[dir] .q-btn--push.q-btn--actionable.q-btn--active,[dir] .q-btn--push.q-btn--actionable:active{transform:translateY(2px)}[dir] .q-btn--push.q-btn--actionable.q-btn--active .q-btn__wrapper:before,[dir] .q-btn--push.q-btn--actionable:active .q-btn__wrapper:before{border-bottom-width:0}[dir] .q-btn--rounded{border-radius:28px}[dir] .q-btn--round{border-radius:50%}.q-btn--round .q-btn__wrapper{min-width:3em;min-height:3em}[dir] .q-btn--round .q-btn__wrapper{padding:0}[dir] .q-btn--flat .q-btn__wrapper:before,[dir] .q-btn--outline .q-btn__wrapper:before,[dir] .q-btn--unelevated .q-btn__wrapper:before{box-shadow:none}.q-btn--dense .q-btn__wrapper{min-height:2em}[dir] .q-btn--dense .q-btn__wrapper{padding:0.285em}.q-btn--dense.q-btn--round .q-btn__wrapper{min-height:2.4em;min-width:2.4em}[dir] .q-btn--dense.q-btn--round .q-btn__wrapper{padding:0}[dir=ltr] .q-btn--dense .on-left{margin-right:6px}[dir=ltr] .q-btn--dense .on-right,[dir=rtl] .q-btn--dense .on-left{margin-left:6px}[dir=rtl] .q-btn--dense .on-right{margin-right:6px}.q-btn--fab-mini .q-icon,.q-btn--fab .q-icon{font-size:24px}[dir] .q-btn--fab .q-icon{margin:auto}.q-btn--fab .q-btn__wrapper{min-height:56px;min-width:56px}[dir] .q-btn--fab .q-btn__wrapper{padding:16px}.q-btn--fab-mini .q-btn__wrapper{min-height:40px;min-width:40px}[dir] .q-btn--fab-mini .q-btn__wrapper{padding:8px}.q-btn__content{transition:opacity 0.3s;z-index:0}.q-btn__content--hidden{opacity:0;pointer-events:none}.q-btn__progress{z-index:0}[dir] .q-btn__progress{border-radius:inherit}.q-btn__progress-indicator{z-index:-1}[dir] .q-btn__progress-indicator{background:hsla(0,0%,100%,0.25)}[dir=ltr] .q-btn__progress-indicator{transform:translateX(-100%)}[dir=rtl] .q-btn__progress-indicator{transform:translateX(100%)}[dir] .q-btn__progress--dark .q-btn__progress-indicator{background:rgba(0,0,0,0.2)}.q-btn--flat .q-btn__progress-indicator,.q-btn--outline .q-btn__progress-indicator{opacity:0.2}[dir] .q-btn--flat .q-btn__progress-indicator,[dir] .q-btn--outline .q-btn__progress-indicator{background:currentColor}[dir=ltr] .q-btn-dropdown--split .q-btn-dropdown__arrow-container.q-btn--outline{border-left:1px solid currentColor}[dir=rtl] .q-btn-dropdown--split .q-btn-dropdown__arrow-container.q-btn--outline{border-right:1px solid currentColor}[dir=ltr] .q-btn-dropdown--split .q-btn-dropdown__arrow-container:not(.q-btn--outline){border-left:1px solid hsla(0,0%,100%,0.3)}[dir=rtl] .q-btn-dropdown--split .q-btn-dropdown__arrow-container:not(.q-btn--outline){border-right:1px solid hsla(0,0%,100%,0.3)}[dir] .q-btn-dropdown--split .q-btn-dropdown__arrow-container .q-btn__wrapper{padding:0 4px}[dir=ltr] .q-btn-dropdown--simple *+.q-btn-dropdown__arrow{margin-left:8px}[dir=rtl] .q-btn-dropdown--simple *+.q-btn-dropdown__arrow{margin-right:8px}.q-btn-dropdown__arrow{transition:transform 0.28s}.q-btn-dropdown--current{flex-grow:1}.q-btn-group{vertical-align:middle}[dir] .q-btn-group{border-radius:3px;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}.q-btn-group>.q-btn-item{align-self:stretch}[dir] .q-btn-group>.q-btn-item{border-radius:inherit}[dir] .q-btn-group>.q-btn-item .q-btn__wrapper:before{box-shadow:none}[dir=ltr] .q-btn-group>.q-btn-item .q-badge--floating{right:0}[dir=rtl] .q-btn-group>.q-btn-item .q-badge--floating{left:0}[dir] .q-btn-group>.q-btn-group{box-shadow:none}[dir=ltr] .q-btn-group>.q-btn-group:first-child>.q-btn:first-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}[dir=ltr] .q-btn-group>.q-btn-group:last-child>.q-btn:last-child,[dir=rtl] .q-btn-group>.q-btn-group:first-child>.q-btn:first-child{border-top-right-radius:inherit;border-bottom-right-radius:inherit}[dir=rtl] .q-btn-group>.q-btn-group:last-child>.q-btn:last-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}[dir=ltr] .q-btn-group>.q-btn-group:not(:first-child)>.q-btn:first-child .q-btn__wrapper:before{border-left:0}[dir=ltr] .q-btn-group>.q-btn-group:not(:last-child)>.q-btn:last-child .q-btn__wrapper:before,[dir=rtl] .q-btn-group>.q-btn-group:not(:first-child)>.q-btn:first-child .q-btn__wrapper:before{border-right:0}[dir=rtl] .q-btn-group>.q-btn-group:not(:last-child)>.q-btn:last-child .q-btn__wrapper:before{border-left:0}[dir=ltr] .q-btn-group>.q-btn-item:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}[dir=ltr] .q-btn-group>.q-btn-item:not(:first-child),[dir=rtl] .q-btn-group>.q-btn-item:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}[dir=rtl] .q-btn-group>.q-btn-item:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.q-btn-group>.q-btn-item.q-btn--standard .q-btn__wrapper:before{z-index:-1}[dir] .q-btn-group--push{border-radius:7px}[dir] .q-btn-group--push>.q-btn--push.q-btn--actionable{transform:none}.q-btn-group--push>.q-btn--push.q-btn--actionable .q-btn__wrapper{transition:margin-top 0.3s cubic-bezier(0.25,0.8,0.5,1),margin-bottom 0.3s cubic-bezier(0.25,0.8,0.5,1),box-shadow 0.3s cubic-bezier(0.25,0.8,0.5,1)}[dir] .q-btn-group--push>.q-btn--push.q-btn--actionable.q-btn--active .q-btn__wrapper,[dir] .q-btn-group--push>.q-btn--push.q-btn--actionable:active .q-btn__wrapper{margin-top:2px;margin-bottom:-2px}[dir] .q-btn-group--rounded{border-radius:28px}[dir] .q-btn-group--square{border-radius:0}[dir] .q-btn-group--flat,[dir] .q-btn-group--outline,[dir] .q-btn-group--unelevated{box-shadow:none}.q-btn-group--outline>.q-separator{display:none}[dir=ltr] .q-btn-group--outline>.q-btn-item+.q-btn-item .q-btn__wrapper:before{border-left:0}[dir=ltr] .q-btn-group--outline>.q-btn-item:not(:last-child) .q-btn__wrapper:before,[dir=rtl] .q-btn-group--outline>.q-btn-item+.q-btn-item .q-btn__wrapper:before{border-right:0}[dir=rtl] .q-btn-group--outline>.q-btn-item:not(:last-child) .q-btn__wrapper:before{border-left:0}.q-btn-group--stretch{align-self:stretch}[dir] .q-btn-group--stretch{border-radius:0}[dir] .q-btn-group--glossy>.q-btn-item{background-image:linear-gradient(180deg,hsla(0,0%,100%,0.3),hsla(0,0%,100%,0) 50%,rgba(0,0,0,0.12) 51%,rgba(0,0,0,0.04))!important}.q-btn-group--spread>.q-btn-group{display:flex!important}.q-btn-group--spread>.q-btn-group>.q-btn-item:not(.q-btn-dropdown__arrow-container),.q-btn-group--spread>.q-btn-item{width:auto;min-width:0;max-width:100%;flex:10000 1 0%}.q-btn-toggle,.q-card{position:relative}.q-card{vertical-align:top}[dir] .q-card{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px}[dir] .q-card>div:first-child,[dir] .q-card>img:first-child{border-top:0}[dir=ltr] .q-card>div:first-child,[dir=ltr] .q-card>img:first-child,[dir=rtl] .q-card>div:first-child,[dir=rtl] .q-card>img:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}[dir] .q-card>div:last-child,[dir] .q-card>img:last-child{border-bottom:0}[dir=ltr] .q-card>div:last-child,[dir=ltr] .q-card>img:last-child,[dir=rtl] .q-card>div:last-child,[dir=rtl] .q-card>img:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}[dir=ltr] .q-card>div:not(:first-child),[dir=ltr] .q-card>img:not(:first-child),[dir=rtl] .q-card>div:not(:first-child),[dir=rtl] .q-card>img:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}[dir=ltr] .q-card>div:not(:last-child),[dir=ltr] .q-card>img:not(:last-child),[dir=rtl] .q-card>div:not(:last-child),[dir=rtl] .q-card>img:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}[dir] .q-card>div{box-shadow:none}[dir=ltr] .q-card>div,[dir=rtl] .q-card>div{border-left:0;border-right:0}[dir] .q-card--bordered{border:1px solid rgba(0,0,0,0.12)}[dir] .q-card--dark{border-color:hsla(0,0%,100%,0.28)}.q-card__section{position:relative}[dir] .q-card__section--vert{padding:16px}[dir=ltr] .q-card__section--horiz>div:first-child,[dir=ltr] .q-card__section--horiz>img:first-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}[dir=ltr] .q-card__section--horiz>div:last-child,[dir=ltr] .q-card__section--horiz>img:last-child,[dir=rtl] .q-card__section--horiz>div:first-child,[dir=rtl] .q-card__section--horiz>img:first-child{border-top-right-radius:inherit;border-bottom-right-radius:inherit}[dir=rtl] .q-card__section--horiz>div:last-child,[dir=rtl] .q-card__section--horiz>img:last-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}[dir=ltr] .q-card__section--horiz>div:not(:first-child),[dir=ltr] .q-card__section--horiz>img:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}[dir=ltr] .q-card__section--horiz>div:not(:last-child),[dir=ltr] .q-card__section--horiz>img:not(:last-child),[dir=rtl] .q-card__section--horiz>div:not(:first-child),[dir=rtl] .q-card__section--horiz>img:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .q-card__section--horiz>div:not(:last-child),[dir=rtl] .q-card__section--horiz>img:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}[dir] .q-card__section--horiz>div{border-top:0;border-bottom:0;box-shadow:none}.q-card__actions{align-items:center}[dir] .q-card__actions{padding:8px}[dir] .q-card__actions .q-btn__wrapper{padding:0 8px}[dir=ltr] .q-card__actions--horiz>.q-btn-group+.q-btn-item,[dir=ltr] .q-card__actions--horiz>.q-btn-item+.q-btn-group,[dir=ltr] .q-card__actions--horiz>.q-btn-item+.q-btn-item{margin-left:8px}[dir=rtl] .q-card__actions--horiz>.q-btn-group+.q-btn-item,[dir=rtl] .q-card__actions--horiz>.q-btn-item+.q-btn-group,[dir=rtl] .q-card__actions--horiz>.q-btn-item+.q-btn-item{margin-right:8px}.q-card__actions--vert>.q-btn-item.q-btn--round{align-self:center}[dir] .q-card__actions--vert>.q-btn-group+.q-btn-item,[dir] .q-card__actions--vert>.q-btn-item+.q-btn-group,[dir] .q-card__actions--vert>.q-btn-item+.q-btn-item{margin-top:4px}.q-card__actions--vert>.q-btn-group>.q-btn-item{flex-grow:1}.q-card>img{display:block;width:100%;max-width:100%}[dir] .q-card>img{border:0}@media (prefers-color-scheme:dark){[dir] .q-card--dark-auto{border-color:hsla(0,0%,100%,0.28)}}.q-carousel{height:400px}.q-carousel__slide{min-height:100%}[dir] .q-carousel__slide{background-size:cover;background-position:50%}[dir] .q-carousel .q-carousel--padding,[dir] .q-carousel__slide{padding:16px}.q-carousel__slides-container{height:100%}.q-carousel__control{color:#fff;color:var(--q-color-dark-text)}.q-carousel__arrow{pointer-events:none}.q-carousel__arrow .q-icon{font-size:28px}.q-carousel__arrow .q-btn{pointer-events:all}.q-carousel__next-arrow--horizontal,.q-carousel__prev-arrow--horizontal{top:16px;bottom:16px}[dir=ltr] .q-carousel__prev-arrow--horizontal{left:16px}[dir=ltr] .q-carousel__next-arrow--horizontal,[dir=rtl] .q-carousel__prev-arrow--horizontal{right:16px}[dir=rtl] .q-carousel__next-arrow--horizontal{left:16px}[dir=ltr] .q-carousel__next-arrow--vertical,[dir=ltr] .q-carousel__prev-arrow--vertical,[dir=rtl] .q-carousel__next-arrow--vertical,[dir=rtl] .q-carousel__prev-arrow--vertical{left:16px;right:16px}.q-carousel__prev-arrow--vertical{top:16px}.q-carousel__next-arrow--vertical{bottom:16px}.q-carousel__navigation--bottom,.q-carousel__navigation--top{overflow-x:auto;overflow-y:hidden}[dir=ltr] .q-carousel__navigation--bottom,[dir=ltr] .q-carousel__navigation--top,[dir=rtl] .q-carousel__navigation--bottom,[dir=rtl] .q-carousel__navigation--top{left:16px;right:16px}.q-carousel__navigation--top{top:16px}.q-carousel__navigation--bottom{bottom:16px}.q-carousel__navigation--left,.q-carousel__navigation--right{top:16px;bottom:16px;overflow-x:hidden;overflow-y:auto}.q-carousel__navigation--left>.q-carousel__navigation-inner,.q-carousel__navigation--right>.q-carousel__navigation-inner{flex-direction:column}[dir=ltr] .q-carousel__navigation--left{left:16px}[dir=ltr] .q-carousel__navigation--right,[dir=rtl] .q-carousel__navigation--left{right:16px}[dir=rtl] .q-carousel__navigation--right{left:16px}.q-carousel__navigation-inner{flex:1 1 auto}[dir] .q-carousel__navigation .q-btn{margin:6px 4px}[dir] .q-carousel__navigation .q-btn .q-btn__wrapper{padding:5px}.q-carousel__navigation-icon--inactive{opacity:0.7}.q-carousel .q-carousel__thumbnail{height:50px;width:auto;display:inline-block;vertical-align:middle;opacity:0.7;transition:opacity 0.3s}[dir] .q-carousel .q-carousel__thumbnail{margin:2px;cursor:pointer;border:1px solid transparent;border-radius:4px}.q-carousel .q-carousel__thumbnail--active,.q-carousel .q-carousel__thumbnail:hover{opacity:1}[dir] .q-carousel .q-carousel__thumbnail--active{border-color:currentColor;cursor:default}[dir] .q-carousel--arrows-vertical .q-carousel--padding,[dir] .q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide,[dir] .q-carousel--navigation-top .q-carousel--padding,[dir] .q-carousel--navigation-top.q-carousel--with-padding .q-carousel__slide{padding-top:60px}[dir] .q-carousel--arrows-vertical .q-carousel--padding,[dir] .q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide,[dir] .q-carousel--navigation-bottom .q-carousel--padding,[dir] .q-carousel--navigation-bottom.q-carousel--with-padding .q-carousel__slide{padding-bottom:60px}[dir=ltr] .q-carousel--arrows-horizontal .q-carousel--padding,[dir=ltr] .q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,[dir=ltr] .q-carousel--navigation-left .q-carousel--padding,[dir=ltr] .q-carousel--navigation-left.q-carousel--with-padding .q-carousel__slide{padding-left:60px}[dir=ltr] .q-carousel--arrows-horizontal .q-carousel--padding,[dir=ltr] .q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,[dir=ltr] .q-carousel--navigation-right .q-carousel--padding,[dir=ltr] .q-carousel--navigation-right.q-carousel--with-padding .q-carousel__slide,[dir=rtl] .q-carousel--arrows-horizontal .q-carousel--padding,[dir=rtl] .q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,[dir=rtl] .q-carousel--navigation-left .q-carousel--padding,[dir=rtl] .q-carousel--navigation-left.q-carousel--with-padding .q-carousel__slide{padding-right:60px}[dir=rtl] .q-carousel--arrows-horizontal .q-carousel--padding,[dir=rtl] .q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,[dir=rtl] .q-carousel--navigation-right .q-carousel--padding,[dir=rtl] .q-carousel--navigation-right.q-carousel--with-padding .q-carousel__slide{padding-left:60px}.q-carousel.fullscreen{height:100%}.q-message-label,.q-message-name,.q-message-stamp{font-size:small}[dir] .q-message-label{margin:24px 0;text-align:center}.q-message-stamp{color:inherit;opacity:0.6;display:none}[dir] .q-message-stamp{margin-top:4px}.q-message-avatar{width:48px;height:48px;min-width:48px}[dir] .q-message-avatar{border-radius:50%}[dir] .q-message{margin-bottom:8px}[dir] .q-message:first-child .q-message-label{margin-top:0}[dir=ltr] .q-message-avatar--received{margin-right:8px}[dir=rtl] .q-message-avatar--received{margin-left:8px}.q-message-text--received{color:#81c784}[dir=ltr] .q-message-text--received{border-radius:4px 4px 4px 0}[dir=rtl] .q-message-text--received{border-radius:4px 4px 0 4px}[dir] .q-message-text--received:last-child:before{border-bottom:8px solid currentColor}[dir=ltr] .q-message-text--received:last-child:before{right:100%;border-right:0 solid transparent;border-left:8px solid transparent}[dir=rtl] .q-message-text--received:last-child:before{left:100%;border-left:0 solid transparent;border-right:8px solid transparent}.q-message-text-content--received{color:#000}[dir=ltr] .q-message-name--sent{text-align:right}[dir=rtl] .q-message-name--sent{text-align:left}[dir=ltr] .q-message-avatar--sent{margin-left:8px}[dir=rtl] .q-message-avatar--sent{margin-right:8px}.q-message-container--sent{flex-direction:row-reverse}.q-message-text--sent{color:#e0e0e0}[dir=ltr] .q-message-text--sent{border-radius:4px 4px 0 4px}[dir=rtl] .q-message-text--sent{border-radius:4px 4px 4px 0}[dir] .q-message-text--sent:last-child:before{border-bottom:8px solid currentColor}[dir=ltr] .q-message-text--sent:last-child:before{left:100%;border-left:0 solid transparent;border-right:8px solid transparent}[dir=rtl] .q-message-text--sent:last-child:before{right:100%;border-right:0 solid transparent;border-left:8px solid transparent}.q-message-text-content--sent{color:#000}.q-message-text{line-height:1.2;word-break:break-word;position:relative}[dir] .q-message-text{background:currentColor;padding:8px}[dir] .q-message-text+.q-message-text{margin-top:3px}.q-message-text:last-child{min-height:48px}.q-message-text:last-child .q-message-stamp{display:block}.q-message-text:last-child:before{content:"";position:absolute;bottom:0;width:0;height:0}.q-checkbox{vertical-align:middle}.q-checkbox__native{width:1px;height:1px}.q-checkbox__bg,.q-checkbox__icon-container{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.q-checkbox__bg{top:25%;width:50%;height:50%;transition:background 0.22s cubic-bezier(0,0,0.2,1) 0ms;-webkit-print-color-adjust:exact}[dir] .q-checkbox__bg{border:2px solid currentColor;border-radius:2px}[dir=ltr] .q-checkbox__bg{left:25%}[dir=rtl] .q-checkbox__bg{right:25%}.q-checkbox__icon{color:currentColor;font-size:0.5em}.q-checkbox__svg{color:#fff;color:var(--q-color-dark-text)}.q-checkbox__truthy{stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.78334;stroke-dasharray:29.78334}.q-checkbox__indet{fill:currentColor}[dir] .q-checkbox__indet{transform-origin:50% 50%}[dir=ltr] .q-checkbox__indet{transform:rotate(-280deg) scale(0)}[dir=rtl] .q-checkbox__indet{transform:rotate(280deg) scale(0)}.q-checkbox__inner{font-size:40px;width:1em;min-width:1em;height:1em;outline:0;color:rgba(0,0,0,0.54)}[dir] .q-checkbox__inner{border-radius:50%}.q-checkbox__inner--indet,.q-checkbox__inner--truthy{color:#1976d2;color:var(--q-color-primary)}[dir] .q-checkbox__inner--indet .q-checkbox__bg,[dir] .q-checkbox__inner--truthy .q-checkbox__bg{background:currentColor}.q-checkbox__inner--truthy path{stroke-dashoffset:0;transition:stroke-dashoffset 0.18s cubic-bezier(0.4,0,0.6,1) 0ms}.q-checkbox__inner--indet .q-checkbox__indet{transition:transform 0.22s cubic-bezier(0,0,0.2,1) 0ms}[dir] .q-checkbox__inner--indet .q-checkbox__indet{transform:rotate(0) scale(1)}.q-checkbox.disabled{opacity:0.75!important}.q-checkbox--dark .q-checkbox__inner{color:hsla(0,0%,100%,0.7)}.q-checkbox--dark .q-checkbox__inner:before{opacity:0.32!important}.q-checkbox--dark .q-checkbox__inner--indet,.q-checkbox--dark .q-checkbox__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-checkbox--dense .q-checkbox__inner{width:0.5em;min-width:0.5em;height:0.5em}.q-checkbox--dense .q-checkbox__bg{top:5%;width:90%;height:90%}[dir=ltr] .q-checkbox--dense .q-checkbox__bg{left:5%}[dir=rtl] .q-checkbox--dense .q-checkbox__bg{right:5%}[dir=ltr] .q-checkbox--dense .q-checkbox__label{padding-left:0.5em}[dir=rtl] .q-checkbox--dense .q-checkbox__label{padding-right:0.5em}[dir=ltr] .q-checkbox--dense.reverse .q-checkbox__label{padding-left:0;padding-right:0.5em}[dir=rtl] .q-checkbox--dense.reverse .q-checkbox__label{padding-right:0;padding-left:0.5em}body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before{content:"";position:absolute;top:0;bottom:0;opacity:0.12;transition:transform 0.22s cubic-bezier(0,0,0.2,1)}[dir] body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before{border-radius:50%;background:currentColor;transform:scale3d(0,0,1)}[dir=ltr] body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before,[dir=rtl] body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before{right:0;left:0}[dir] body.desktop .q-checkbox:not(.disabled):focus .q-checkbox__inner:before,[dir] body.desktop .q-checkbox:not(.disabled):hover .q-checkbox__inner:before{transform:scale3d(1,1,1)}[dir] body.desktop .q-checkbox--dense:not(.disabled):focus .q-checkbox__inner:before,[dir] body.desktop .q-checkbox--dense:not(.disabled):hover .q-checkbox__inner:before{transform:scale3d(1.4,1.4,1)}@media (prefers-color-scheme:dark){.q-checkbox--dark-auto .q-checkbox__inner{color:hsla(0,0%,100%,0.7)}.q-checkbox--dark-auto .q-checkbox__inner:before{opacity:0.32!important}.q-checkbox--dark-auto .q-checkbox__inner--indet,.q-checkbox--dark-auto .q-checkbox__inner--truthy{color:#1976d2;color:var(--q-color-primary)}}.q-chip{vertical-align:middle;outline:0;position:relative;height:2em;max-width:100%;color:#000;color:var(--q-color-light-text);font-size:14px}[dir] .q-chip{border-radius:16px;margin:4px;background:#e0e0e0;background:var(--q-color-chip-background-light);padding:0.5em 0.9em}.q-chip--dark{color:#fff;color:var(--q-color-dark-text)}[dir] .q-chip--dark{background:#323232;background:var(--q-color-chip-background-dark)}.q-chip--colored .q-chip__icon,.q-chip--dark .q-chip__icon{color:inherit}[dir] .q-chip--outline{background:transparent!important;border:1px solid currentColor}.q-chip--outline .q-avatar{height:calc(1em - 2px);width:calc(1em - 2px)}.q-chip .q-avatar{font-size:2em}[dir] .q-chip .q-avatar{border-radius:16px}[dir=ltr] .q-chip .q-avatar{margin-left:-0.45em;margin-right:0.2em}[dir=ltr] .q-chip .q-avatar--right,[dir=ltr] .q-chip .q-avatar~.q-avatar,[dir=rtl] .q-chip .q-avatar{margin-right:-0.45em;margin-left:0.2em}[dir=rtl] .q-chip .q-avatar--right,[dir=rtl] .q-chip .q-avatar~.q-avatar{margin-right:0.2em;margin-left:-0.45em}.q-chip--selected .q-avatar:first-child:not(.q-avatar--right){display:none}.q-chip__icon{color:rgba(0,0,0,0.54);font-size:1.5em}[dir] .q-chip__icon{margin:-0.2em}[dir=ltr] .q-chip__icon--left{margin-right:0.2em}[dir=ltr] .q-chip__icon--right,[dir=rtl] .q-chip__icon--left{margin-left:0.2em}[dir=rtl] .q-chip__icon--right{margin-right:0.2em}.q-chip__icon--remove{opacity:0.6;outline:0}[dir=ltr] .q-chip__icon--remove{margin-left:0.1em;margin-right:-0.5em}[dir=rtl] .q-chip__icon--remove{margin-right:0.1em;margin-left:-0.5em}.q-chip__icon--remove:focus,.q-chip__icon--remove:hover{opacity:1}.q-chip__content{white-space:nowrap}.q-chip--dense{height:1.5em}[dir] .q-chip--dense{border-radius:12px;padding:0 0.4em}.q-chip--dense .q-avatar{font-size:1.5em}[dir] .q-chip--dense .q-avatar{border-radius:12px}[dir=ltr] .q-chip--dense .q-avatar{margin-left:-0.27em;margin-right:0.1em}[dir=rtl] .q-chip--dense .q-avatar{margin-right:-0.27em;margin-left:0.1em}[dir=ltr] .q-chip--dense .q-avatar--right,[dir=ltr] .q-chip--dense .q-avatar~.q-avatar{margin-left:0.1em;margin-right:-0.268em}[dir=rtl] .q-chip--dense .q-avatar--right,[dir=rtl] .q-chip--dense .q-avatar~.q-avatar{margin-right:0.1em;margin-left:-0.268em}.q-chip--dense .q-chip__icon{font-size:1.25em}[dir=ltr] .q-chip--dense .q-chip__icon--left{margin-right:0.195em}[dir=rtl] .q-chip--dense .q-chip__icon--left{margin-left:0.195em}[dir=ltr] .q-chip--dense .q-chip__icon--remove{margin-right:-0.25em}[dir=rtl] .q-chip--dense .q-chip__icon--remove{margin-left:-0.25em}[dir] .q-chip--square{border-radius:4px}[dir=ltr] .q-chip--square .q-avatar{border-radius:4px 0 0 4px}[dir=ltr] .q-chip--square .q-avatar--right,[dir=ltr] .q-chip--square .q-avatar~.q-avatar,[dir=rtl] .q-chip--square .q-avatar{border-radius:0 4px 4px 0}[dir=rtl] .q-chip--square .q-avatar--right,[dir=rtl] .q-chip--square .q-avatar~.q-avatar{border-radius:4px 0 0 4px}[dir] body.desktop .q-chip--clickable:focus{box-shadow:0 1px 3px rgba(0,0,0,0.2),0 1px 1px rgba(0,0,0,0.14),0 2px 1px -1px rgba(0,0,0,0.12)}@media (prefers-color-scheme:dark){.q-chip--dark-auto{color:#fff;color:var(--q-color-dark-text)}[dir] .q-chip--dark-auto{background:#323232;background:var(--q-color-chip-background-dark)}.q-chip--dark-auto .q-chip__icon{color:inherit}}.q-circular-progress{display:inline-block;position:relative;vertical-align:middle;width:1em;height:1em;line-height:1}[dir] .q-circular-progress.q-focusable{border-radius:50%}.q-circular-progress__svg{width:100%;height:100%}.q-circular-progress__text{font-size:0.25em}.q-circular-progress--indeterminate .q-circular-progress__svg{-webkit-animation:q-spin 2s linear infinite;animation:q-spin 2s linear infinite}[dir] .q-circular-progress--indeterminate .q-circular-progress__svg{transform-origin:50% 50%}.q-circular-progress--indeterminate .q-circular-progress__circle{stroke-dasharray:1 400;stroke-dashoffset:0;-webkit-animation:q-circular-progress-circle 1.5s ease-in-out infinite;animation:q-circular-progress-circle 1.5s ease-in-out infinite}.q-color-picker{overflow:hidden;max-width:350px;vertical-align:top;min-width:180px}[dir] .q-color-picker{border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}[dir] .q-color-picker .q-tab{padding:0!important}[dir] .q-color-picker--bordered{border:1px solid rgba(0,0,0,0.12)}.q-color-picker__header-tabs{height:32px}.q-color-picker__header input{line-height:24px}[dir] .q-color-picker__header input{border:0}.q-color-picker__header .q-tab{min-height:32px!important;height:32px!important}[dir] .q-color-picker__header .q-tab--inactive{background:linear-gradient(0deg,rgba(0,0,0,0.3) 0%,rgba(0,0,0,0.15) 25%,rgba(0,0,0,0.1))}.q-color-picker__error-icon{bottom:2px;font-size:24px;opacity:0;transition:opacity 0.3s ease-in}[dir=ltr] .q-color-picker__error-icon{right:2px}[dir=rtl] .q-color-picker__error-icon{left:2px}.q-color-picker__header-content{position:relative}[dir] .q-color-picker__header-content{background:#fff;background:var(--q-color-light-page)}.q-color-picker__header-content--light{color:#000;color:var(--q-color-light-text)}.q-color-picker__header-content--dark{color:#fff;color:var(--q-color-dark-text)}.q-color-picker__header-content--dark .q-tab--inactive:before{content:"";position:absolute;top:0;bottom:0}[dir] .q-color-picker__header-content--dark .q-tab--inactive:before{background:hsla(0,0%,100%,0.2)}[dir=ltr] .q-color-picker__header-content--dark .q-tab--inactive:before,[dir=rtl] .q-color-picker__header-content--dark .q-tab--inactive:before{right:0;left:0}.q-color-picker__header-banner{height:36px}[dir] .q-color-picker__header-bg{background:#fff;background:var(--q-color-light-page);background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==")!important}.q-color-picker__footer{height:36px}.q-color-picker__footer .q-tab{min-height:36px!important;height:36px!important}[dir] .q-color-picker__footer .q-tab--inactive{background:linear-gradient(180deg,rgba(0,0,0,0.3) 0%,rgba(0,0,0,0.15) 25%,rgba(0,0,0,0.1))}.q-color-picker__spectrum{width:100%;height:100%}[dir] .q-color-picker__spectrum-tab{padding:0!important}[dir=ltr] .q-color-picker__spectrum-white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}[dir=rtl] .q-color-picker__spectrum-white{background:linear-gradient(270deg,#fff,hsla(0,0%,100%,0))}[dir] .q-color-picker__spectrum-black{background:linear-gradient(0deg,#000,transparent)}.q-color-picker__spectrum-circle{width:10px;height:10px}[dir] .q-color-picker__spectrum-circle{box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,0.3),0 0 1px 2px rgba(0,0,0,0.4);border-radius:50%}[dir=ltr] .q-color-picker__spectrum-circle{transform:translate(-5px,-5px)}[dir=rtl] .q-color-picker__spectrum-circle{transform:translate(5px,-5px)}.q-color-picker__hue .q-slider__track{opacity:1}[dir=ltr] .q-color-picker__hue .q-slider__track{background:linear-gradient(90deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)!important}[dir=rtl] .q-color-picker__hue .q-slider__track{background:linear-gradient(270deg,red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)!important}[dir] .q-color-picker__alpha .q-slider__track-container{padding-top:0}.q-color-picker__alpha .q-slider__track:before{content:"";position:absolute;top:0;bottom:0}[dir] .q-color-picker__alpha .q-slider__track:before{border-radius:inherit}[dir=ltr] .q-color-picker__alpha .q-slider__track:before{right:0;left:0;background:linear-gradient(90deg,hsla(0,0%,100%,0),#757575)}[dir=rtl] .q-color-picker__alpha .q-slider__track:before{left:0;right:0;background:linear-gradient(-90deg,hsla(0,0%,100%,0),#757575)}[dir] .q-color-picker__sliders{padding:0 16px}.q-color-picker__sliders .q-slider__thumb{color:#424242}.q-color-picker__sliders .q-slider__thumb path{stroke-width:2px;fill:transparent}.q-color-picker__sliders .q-slider--active path{stroke-width:3px}[dir=ltr] .q-color-picker__tune-tab .q-slider,[dir=rtl] .q-color-picker__tune-tab .q-slider{margin-left:18px;margin-right:18px}.q-color-picker__tune-tab input{font-size:11px;width:3.5em}[dir] .q-color-picker__tune-tab input{border:1px solid #e0e0e0;border-radius:4px}[dir] .q-color-picker__palette-tab{padding:0!important}[dir] .q-color-picker__palette-rows--editable .q-color-picker__cube{cursor:pointer}.q-color-picker__cube{width:10%!important}[dir] .q-color-picker__cube{padding-bottom:10%}.q-color-picker input{color:inherit;outline:0}[dir] .q-color-picker input{background:transparent;text-align:center}.q-color-picker .q-tabs{overflow:hidden}[dir] .q-color-picker .q-tab--active{box-shadow:0 0 14px 3px rgba(0,0,0,0.2)}.q-color-picker .q-tab--active .q-focus-helper,.q-color-picker .q-tab__indicator{display:none}[dir] .q-color-picker .q-tab-panels{background:inherit}[dir] .q-color-picker--dark .q-color-picker__tune-tab input{border:1px solid hsla(0,0%,100%,0.3)}.q-color-picker--dark .q-slider{color:#fafafa}@media (prefers-color-scheme:dark){[dir] .q-color-picker--dark-auto .q-color-picker__tune-tab input{border:1px solid hsla(0,0%,100%,0.3)}.q-color-picker--dark-auto .q-slider{color:#fafafa}}.q-date{display:inline-flex;width:290px;min-width:290px;max-width:100%}[dir] .q-date{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px;background:#fff;background:var(--q-color-light-page)}[dir] .q-date--bordered{border:1px solid rgba(0,0,0,0.12)}.q-date__header{color:#fff;color:var(--q-color-dark-text)}[dir] .q-date__header{background-color:#1976d2;background-color:var(--q-color-primary);padding:16px}[dir=ltr] .q-date__header{border-top-left-radius:inherit}[dir=rtl] .q-date__header{border-top-right-radius:inherit}[dir] .q-date__actions{padding:0 16px 16px}.q-date__content .q-btn{font-weight:400}.q-date__header-link{opacity:0.64;outline:0;transition:opacity 0.3s ease-out}.q-date__header-link--active,.q-date__header-link:focus,.q-date__header-link:hover{opacity:1}.q-date__header-subtitle{font-size:14px;line-height:1.75;letter-spacing:0.00938em}.q-date__header-title-label{font-size:24px;line-height:1.2;letter-spacing:0.00735em}.q-date__view{height:100%;width:100%;min-height:290px}[dir] .q-date__view{padding:16px}.q-date__navigation{height:12.5%}.q-date__navigation>div:first-child{width:8%;min-width:24px;justify-content:flex-end}.q-date__navigation>div:last-child{width:8%;min-width:24px;justify-content:flex-start}.q-date__calendar-weekdays{height:12.5%}.q-date__calendar-weekdays>div{opacity:0.38;font-size:12px}.q-date__calendar-item{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:14.285%!important;height:12.5%!important;position:relative}[dir] .q-date__calendar-item{padding:1px}.q-date__calendar-item:after{content:"";position:absolute;pointer-events:none;top:1px;bottom:1px}[dir] .q-date__calendar-item:after{border-style:dashed;border-color:transparent;border-width:1px}[dir=ltr] .q-date__calendar-item:after,[dir=rtl] .q-date__calendar-item:after{right:0;left:0}.q-date__calendar-item>div,.q-date__calendar-item button{width:30px;height:30px}[dir] .q-date__calendar-item>div,[dir] .q-date__calendar-item button{border-radius:50%}.q-date__calendar-item>div{line-height:30px}[dir] .q-date__calendar-item>div{text-align:center}.q-date__calendar-item>button{line-height:22px}.q-date__calendar-item--out{opacity:0.18}.q-date__calendar-item--fill{visibility:hidden;min-height:32px}.q-date__calendar-item--fill.q-date__range-from:before,.q-date__calendar-item--fill.q-date__range-to:before,.q-date__calendar-item--fill.q-date__range:before{opacity:0.05}.q-date__range-from:before,.q-date__range-to:before,.q-date__range:before{content:"";position:absolute;top:1px;bottom:1px;opacity:0.3;pointer-events:none}[dir] .q-date__range-from:before,[dir] .q-date__range-to:before,[dir] .q-date__range:before{background-color:currentColor}[dir=ltr] .q-date__range-from:before,[dir=ltr] .q-date__range-to:before,[dir=ltr] .q-date__range:before,[dir=rtl] .q-date__range-from:before,[dir=rtl] .q-date__range-to:before,[dir=rtl] .q-date__range:before{left:0;right:0}[dir=ltr] .q-date__range:nth-child(7n-6):before{border-top-left-radius:0;border-bottom-left-radius:0}[dir=ltr] .q-date__range:nth-child(7n):before,[dir=rtl] .q-date__range:nth-child(7n-6):before{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .q-date__range:nth-child(7n):before{border-top-left-radius:0;border-bottom-left-radius:0}[dir=ltr] .q-date__range-from:before{left:calc(50% - 15px);border-top-left-radius:28px;border-bottom-left-radius:28px}[dir=ltr] .q-date__range-to:before,[dir=rtl] .q-date__range-from:before{right:calc(50% - 15px);border-top-right-radius:28px;border-bottom-right-radius:28px}[dir=rtl] .q-date__range-to:before{left:calc(50% - 15px);border-top-left-radius:28px;border-bottom-left-radius:28px}[dir] .q-date__edit-range:after{border-color:currentColor transparent}[dir=ltr] .q-date__edit-range:nth-child(7n-6):after{border-top-left-radius:0;border-bottom-left-radius:0}[dir=ltr] .q-date__edit-range:nth-child(7n):after,[dir=rtl] .q-date__edit-range:nth-child(7n-6):after{border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .q-date__edit-range:nth-child(7n):after{border-top-left-radius:0;border-bottom-left-radius:0}[dir] .q-date__edit-range-from-to:after,[dir] .q-date__edit-range-from:after{border-top-color:currentColor;border-bottom-color:currentColor}[dir=ltr] .q-date__edit-range-from-to:after,[dir=ltr] .q-date__edit-range-from:after{left:4px;border-left-color:currentColor;border-top-left-radius:28px;border-bottom-left-radius:28px}[dir=rtl] .q-date__edit-range-from-to:after,[dir=rtl] .q-date__edit-range-from:after{right:4px;border-right-color:currentColor;border-top-right-radius:28px;border-bottom-right-radius:28px}[dir] .q-date__edit-range-from-to:after,[dir] .q-date__edit-range-to:after{border-top-color:currentColor;border-bottom-color:currentColor}[dir=ltr] .q-date__edit-range-from-to:after,[dir=ltr] .q-date__edit-range-to:after{right:4px;border-right-color:currentColor;border-top-right-radius:28px;border-bottom-right-radius:28px}[dir=rtl] .q-date__edit-range-from-to:after,[dir=rtl] .q-date__edit-range-to:after{left:4px;border-left-color:currentColor;border-top-left-radius:28px;border-bottom-left-radius:28px}.q-date__calendar-days-container{height:75%;min-height:192px}.q-date__calendar-days>div{height:16.66%!important}.q-date__event{position:absolute;bottom:2px;height:5px;width:8px}[dir] .q-date__event{border-radius:5px;background-color:#26a69a;background-color:var(--q-color-secondary)}[dir=ltr] .q-date__event{left:50%;transform:translate3d(-50%,0,0)}[dir=rtl] .q-date__event{right:50%;transform:translate3d(50%,0,0)}[dir] .q-date__today{box-shadow:0 0 1px 0 currentColor}[dir] .q-date__years-content{padding:0 8px}.q-date__months-item,.q-date__years-item{flex:0 0 33.3333%}.q-date--readonly .q-date__content,.q-date--readonly .q-date__header,.q-date.disabled .q-date__content,.q-date.disabled .q-date__header{pointer-events:none}.q-date--readonly .q-date__navigation{display:none}.q-date--portrait{flex-direction:column}.q-date--portrait-standard .q-date__content{height:calc(100% - 86px)}.q-date--portrait-standard .q-date__header{height:86px}[dir=ltr] .q-date--portrait-standard .q-date__header{border-top-right-radius:inherit}[dir=rtl] .q-date--portrait-standard .q-date__header{border-top-left-radius:inherit}.q-date--portrait-standard .q-date__header-title{align-items:center;height:30px}.q-date--portrait-minimal .q-date__content{height:100%}.q-date--landscape{flex-direction:row;align-items:stretch;min-width:420px}.q-date--landscape>div{display:flex;flex-direction:column}.q-date--landscape .q-date__content{height:100%}.q-date--landscape-standard{min-width:420px}.q-date--landscape-standard .q-date__header{min-width:110px;width:110px}[dir=ltr] .q-date--landscape-standard .q-date__header{border-bottom-left-radius:inherit}[dir=rtl] .q-date--landscape-standard .q-date__header{border-bottom-right-radius:inherit}.q-date--landscape-standard .q-date__header-title{flex-direction:column}[dir] .q-date--landscape-standard .q-date__header-today{margin-top:12px}[dir=ltr] .q-date--landscape-standard .q-date__header-today{margin-left:-8px}[dir=rtl] .q-date--landscape-standard .q-date__header-today{margin-right:-8px}.q-date--landscape-minimal{width:310px}[dir] .q-date--dark{border-color:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){[dir] .q-date--dark-auto{border-color:hsla(0,0%,100%,0.28)}}.q-dialog{contain:layout size;contain:layout size style;width:100vw}.q-dialog__title{font-size:1.25rem;font-weight:500;line-height:2rem;letter-spacing:0.0125em}.q-dialog__progress{font-size:4rem}.q-dialog__inner{outline:0}.q-dialog__inner>div{pointer-events:all;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position}[dir] .q-dialog__inner>div{border-radius:4px;box-shadow:0 2px 4px -1px rgba(0,0,0,0.2),0 4px 5px rgba(0,0,0,0.14),0 1px 10px rgba(0,0,0,0.12)}[dir] .q-dialog__inner--square>div{border-radius:0!important}.q-dialog__inner>.q-card>.q-card__actions .q-btn--rectangle .q-btn__wrapper{min-width:64px}[dir] .q-dialog__inner--minimized{padding:24px}.q-dialog__inner--minimized>div{max-height:calc(100vh - 48px)}.q-dialog__inner--maximized>div{height:100%;width:100%;max-height:100vh;max-width:100vw}[dir] .q-dialog__inner--maximized>div{border-radius:0!important}[dir] .q-dialog__inner--bottom,[dir] .q-dialog__inner--top{padding-top:0!important;padding-bottom:0!important}[dir=ltr] .q-dialog__inner--left,[dir=ltr] .q-dialog__inner--right,[dir=rtl] .q-dialog__inner--left,[dir=rtl] .q-dialog__inner--right{padding-right:0!important;padding-left:0!important}[dir=ltr] .q-dialog__inner--left:not([data-q-portal-animating])>div,[dir=ltr] .q-dialog__inner--top:not([data-q-portal-animating])>div{border-top-left-radius:0}[dir=ltr] .q-dialog__inner--right:not([data-q-portal-animating])>div,[dir=ltr] .q-dialog__inner--top:not([data-q-portal-animating])>div,[dir=rtl] .q-dialog__inner--left:not([data-q-portal-animating])>div,[dir=rtl] .q-dialog__inner--top:not([data-q-portal-animating])>div{border-top-right-radius:0}[dir=rtl] .q-dialog__inner--right:not([data-q-portal-animating])>div,[dir=rtl] .q-dialog__inner--top:not([data-q-portal-animating])>div{border-top-left-radius:0}[dir=ltr] .q-dialog__inner--bottom:not([data-q-portal-animating])>div,[dir=ltr] .q-dialog__inner--left:not([data-q-portal-animating])>div{border-bottom-left-radius:0}[dir=ltr] .q-dialog__inner--bottom:not([data-q-portal-animating])>div,[dir=ltr] .q-dialog__inner--right:not([data-q-portal-animating])>div,[dir=rtl] .q-dialog__inner--bottom:not([data-q-portal-animating])>div,[dir=rtl] .q-dialog__inner--left:not([data-q-portal-animating])>div{border-bottom-right-radius:0}[dir=rtl] .q-dialog__inner--bottom:not([data-q-portal-animating])>div,[dir=rtl] .q-dialog__inner--right:not([data-q-portal-animating])>div{border-bottom-left-radius:0}.q-dialog__inner--fullwidth>div{width:100%!important;max-width:100%!important}.q-dialog__inner--fullheight>div{height:100%!important;max-height:100%!important}.q-dialog__backdrop{z-index:-1;pointer-events:all;outline:0;opacity:0.4}[dir] .q-dialog__backdrop{background:#000;background:var(--q-color-backdrop-background)}html[dir=rtl] .q-dialog{right:auto}body.mobile .q-dialog{contain:size;contain:size style}body.desktop .q-dialog--modal{height:100vh}body.platform-ios .q-dialog__inner--minimized>div{max-height:calc(100vh - 164px)}body.platform-android .q-dialog__inner--minimized>div{max-height:calc(100% - 48px)}[dir] body.q-ios-padding .q-dialog__inner{padding-top:20px!important;padding-top:env(safe-area-inset-top)!important;padding-bottom:env(safe-area-inset-bottom)!important}body.q-ios-padding .q-dialog__inner>div{max-height:"calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important"}@media (max-width:599.98px){[dir=ltr] .q-dialog__inner--bottom,[dir=ltr] .q-dialog__inner--top,[dir=rtl] .q-dialog__inner--bottom,[dir=rtl] .q-dialog__inner--top{padding-left:0;padding-right:0}.q-dialog__inner--bottom>div,.q-dialog__inner--top>div{width:100%!important}}@media (min-width:600px){.q-dialog__inner--minimized>div{max-width:560px}}[dir] .q-bottom-sheet{padding-bottom:8px}[dir] .q-bottom-sheet__avatar{border-radius:50%}.q-bottom-sheet--list{width:400px}.q-bottom-sheet--list .q-icon,.q-bottom-sheet--list img{font-size:24px;width:24px;height:24px}.q-bottom-sheet--grid{width:700px}.q-bottom-sheet--grid .q-bottom-sheet__item{min-width:100px}[dir] .q-bottom-sheet--grid .q-bottom-sheet__item{padding:8px;text-align:center}.q-bottom-sheet--grid .q-bottom-sheet__empty-icon,.q-bottom-sheet--grid .q-icon,.q-bottom-sheet--grid img{font-size:48px;width:48px;height:48px}[dir] .q-bottom-sheet--grid .q-bottom-sheet__empty-icon,[dir] .q-bottom-sheet--grid .q-icon,[dir] .q-bottom-sheet--grid img{margin-bottom:8px}[dir] .q-bottom-sheet--grid .q-separator{margin:12px 0}.q-bottom-sheet__item{flex:0 0 33.3333%}@media (min-width:600px){.q-bottom-sheet__item{flex:0 0 25%}}.q-dialog-plugin{width:400px}.q-dialog-plugin__form{max-height:50vh}[dir] .q-dialog-plugin .q-card__section+.q-card__section{padding-top:0}[dir] .q-dialog-plugin--progress{text-align:center}[dir] .q-editor{border:1px solid rgba(0,0,0,0.12);border-radius:4px}[dir] .q-editor.disabled{border-style:dashed}.q-editor.fullscreen{max-height:100%}[dir=ltr] .q-editor>div:first-child,[dir=ltr] .q-editor__toolbars-container,[dir=ltr] .q-editor__toolbars-container>div:first-child,[dir=rtl] .q-editor>div:first-child,[dir=rtl] .q-editor__toolbars-container,[dir=rtl] .q-editor__toolbars-container>div:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-editor__toolbars-container{max-width:100%}.q-editor__content{outline:0;min-height:10em;overflow:auto;max-width:100%}[dir] .q-editor__content{padding:10px}[dir=ltr] .q-editor__content,[dir=rtl] .q-editor__content{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.q-editor__content pre{white-space:pre-wrap}.q-editor__content hr{outline:0;height:1px}[dir] .q-editor__content hr{border:0;margin:1px;background:rgba(0,0,0,0.12)}.q-editor__content:empty:not(:focus):before{content:attr(placeholder);opacity:0.7}.q-editor__toolbar{min-height:32px}[dir] .q-editor__toolbar{border-bottom:1px solid rgba(0,0,0,0.12)}[dir] .q-editor .q-btn{margin:4px}.q-editor__toolbar-group{position:relative}[dir] .q-editor__toolbar-group{margin:0 4px}.q-editor__toolbar-group+.q-editor__toolbar-group:before{content:"";position:absolute;top:4px;bottom:4px;width:1px}[dir] .q-editor__toolbar-group+.q-editor__toolbar-group:before{background:rgba(0,0,0,0.12)}[dir=ltr] .q-editor__toolbar-group+.q-editor__toolbar-group:before{left:-4px}[dir=rtl] .q-editor__toolbar-group+.q-editor__toolbar-group:before{right:-4px}.q-editor__link-input{color:inherit;text-decoration:none;text-transform:none;outline:0}[dir] .q-editor__link-input{border:none;border-radius:0;background:none}[dir] .q-editor--flat,[dir] .q-editor--flat .q-editor__toolbar{border:0}.q-editor--dense .q-editor__toolbar-group{display:flex;align-items:center;flex-wrap:nowrap}[dir] .q-editor--dark{border-color:hsla(0,0%,100%,0.28)}[dir] .q-editor--dark .q-editor__content hr{background:hsla(0,0%,100%,0.28)}[dir] .q-editor--dark .q-editor__toolbar{border-color:hsla(0,0%,100%,0.28)}[dir] .q-editor--dark .q-editor__toolbar-group+.q-editor__toolbar-group:before{background:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){[dir] .q-editor--dark-auto{border-color:hsla(0,0%,100%,0.28)}[dir] .q-editor--dark-auto .q-editor__content hr{background:hsla(0,0%,100%,0.28)}[dir] .q-editor--dark-auto .q-editor__toolbar{border-color:hsla(0,0%,100%,0.28)}[dir] .q-editor--dark-auto .q-editor__toolbar-group+.q-editor__toolbar-group:before{background:hsla(0,0%,100%,0.28)}}.q-expansion-item__border{opacity:0}.q-expansion-item__toggle-icon{position:relative;transition:transform 0.3s}[dir=ltr] .q-expansion-item__toggle-icon--rotated{transform:rotate(180deg)}[dir=rtl] .q-expansion-item__toggle-icon--rotated{transform:rotate(-180deg)}.q-expansion-item__toggle-focus{width:1em!important;height:1em!important;position:relative!important}[dir] .q-expansion-item__toggle-focus+.q-expansion-item__toggle-icon{margin-top:-1em}.q-expansion-item--standard.q-expansion-item--expanded>div>.q-expansion-item__border{opacity:1}.q-expansion-item--popup{transition:padding 0.5s}[dir] .q-expansion-item--popup>.q-expansion-item__container{border:1px solid rgba(0,0,0,0.12)}.q-expansion-item--popup>.q-expansion-item__container>.q-separator{display:none}[dir] .q-expansion-item--popup.q-expansion-item--collapsed{padding:0 15px}[dir] .q-expansion-item--popup.q-expansion-item--expanded{padding:15px 0}[dir] .q-expansion-item--popup.q-expansion-item--expanded+.q-expansion-item--popup.q-expansion-item--expanded{padding-top:0}[dir] .q-expansion-item--popup.q-expansion-item--collapsed:not(:first-child)>.q-expansion-item__container{border-top-width:0}[dir] .q-expansion-item--popup.q-expansion-item--expanded+.q-expansion-item--popup.q-expansion-item--collapsed>.q-expansion-item__container{border-top-width:1px}[dir] .q-expansion-item__content>.q-card{box-shadow:none;border-radius:0}.q-expansion-item--expanded+.q-expansion-item--expanded>div>.q-expansion-item__border--top,.q-expansion-item:first-child>div>.q-expansion-item__border--top,.q-expansion-item:last-child>div>.q-expansion-item__border--bottom{opacity:0}[dir=ltr] .q-expansion-item--expanded .q-textarea--autogrow textarea,[dir=rtl] .q-expansion-item--expanded .q-textarea--autogrow textarea{-webkit-animation:q-expansion-done 0s;animation:q-expansion-done 0s}.z-fab{z-index:990}.q-fab{position:relative;vertical-align:middle}.q-fab>.q-btn{width:100%}[dir] .q-fab--form-rounded{border-radius:28px}[dir] .q-fab--form-square{border-radius:4px}.q-fab__active-icon,.q-fab__icon{transition:opacity 0.4s,transform 0.4s}.q-fab__icon{opacity:1}[dir] .q-fab__icon{transform:rotate(0deg)}.q-fab__active-icon{opacity:0}[dir=ltr] .q-fab__active-icon{transform:rotate(-180deg)}[dir=rtl] .q-fab__active-icon{transform:rotate(180deg)}.q-fab__label--external{position:absolute;transition:opacity 0.18s cubic-bezier(0.65,0.815,0.735,0.395)}[dir] .q-fab__label--external{padding:0 8px}.q-fab__label--external-hidden{opacity:0;pointer-events:none}.q-fab__label--external-left{top:50%}[dir=ltr] .q-fab__label--external-left{left:-12px;transform:translate(-100%,-50%)}[dir=rtl] .q-fab__label--external-left{right:-12px;transform:translate(100%,-50%)}.q-fab__label--external-right{top:50%}[dir=ltr] .q-fab__label--external-right{right:-12px;transform:translate(100%,-50%)}[dir=rtl] .q-fab__label--external-right{left:-12px;transform:translate(-100%,-50%)}.q-fab__label--external-bottom{bottom:-12px}[dir=ltr] .q-fab__label--external-bottom{left:50%;transform:translate(-50%,100%)}[dir=rtl] .q-fab__label--external-bottom{right:50%;transform:translate(50%,100%)}.q-fab__label--external-top{top:-12px}[dir=ltr] .q-fab__label--external-top{left:50%;transform:translate(-50%,-100%)}[dir=rtl] .q-fab__label--external-top{right:50%;transform:translate(50%,-100%)}.q-fab__label--internal{transition:font-size 0.12s cubic-bezier(0.65,0.815,0.735,0.395),max-height 0.12s cubic-bezier(0.65,0.815,0.735,0.395),opacity 0.07s cubic-bezier(0.65,0.815,0.735,0.395);max-height:30px}[dir] .q-fab__label--internal{padding:0}.q-fab__label--internal-hidden{font-size:0;opacity:0}[dir] .q-fab__label--internal-top{padding-bottom:0.12em}[dir] .q-fab__label--internal-bottom{padding-top:0.12em}.q-fab__label--internal-bottom.q-fab__label--internal-hidden,.q-fab__label--internal-top.q-fab__label--internal-hidden{max-height:0}[dir=ltr] .q-fab__label--internal-left{padding-left:0.285em;padding-right:0.571em}[dir=ltr] .q-fab__label--internal-right,[dir=rtl] .q-fab__label--internal-left{padding-right:0.285em;padding-left:0.571em}[dir=rtl] .q-fab__label--internal-right{padding-left:0.285em;padding-right:0.571em}.q-fab__icon-holder{min-width:24px;min-height:24px;position:relative}.q-fab__icon-holder--opened .q-fab__icon{opacity:0}[dir=ltr] .q-fab__icon-holder--opened .q-fab__icon{transform:rotate(180deg)}[dir=rtl] .q-fab__icon-holder--opened .q-fab__icon{transform:rotate(-180deg)}.q-fab__icon-holder--opened .q-fab__active-icon{opacity:1}[dir] .q-fab__icon-holder--opened .q-fab__active-icon{transform:rotate(0deg)}.q-fab__actions{position:absolute;opacity:0;transition:transform 0.18s ease-in,opacity 0.18s ease-in;pointer-events:none;align-items:center;justify-content:center;align-self:center}[dir] .q-fab__actions{padding:3px}[dir] .q-fab__actions .q-btn{margin:5px}.q-fab__actions--right{height:56px}[dir=ltr] .q-fab__actions--right{transform-origin:0 50%;transform:scale(0.4) translateX(-62px);left:100%;margin-left:9px}[dir=rtl] .q-fab__actions--right{transform-origin:100% 50%;transform:scale(0.4) translateX(62px);right:100%;margin-right:9px}.q-fab__actions--left{height:56px;flex-direction:row-reverse}[dir=ltr] .q-fab__actions--left{transform-origin:100% 50%;transform:scale(0.4) translateX(62px);right:100%;margin-right:9px}[dir=rtl] .q-fab__actions--left{transform-origin:0% 50%;transform:scale(0.4) translateX(-62px);left:100%;margin-left:9px}.q-fab__actions--up{width:56px;bottom:100%;flex-direction:column-reverse}[dir] .q-fab__actions--up{transform-origin:50% 100%;transform:scale(0.4) translateY(62px);margin-bottom:9px}.q-fab__actions--down{width:56px;top:100%;flex-direction:column}[dir] .q-fab__actions--down{transform-origin:50% 0;transform:scale(0.4) translateY(-62px);margin-top:9px}[dir=ltr] .q-fab__actions--down,[dir=ltr] .q-fab__actions--up{left:50%;margin-left:-28px}[dir=rtl] .q-fab__actions--down,[dir=rtl] .q-fab__actions--up{right:50%;margin-right:-28px}.q-fab__actions--opened{opacity:1;pointer-events:all}[dir] .q-fab__actions--opened{transform:scale(1) translate(0,0)}.q-fab--align-left>.q-fab__actions--down,.q-fab--align-left>.q-fab__actions--up{align-items:flex-start}[dir=ltr] .q-fab--align-left>.q-fab__actions--down,[dir=ltr] .q-fab--align-left>.q-fab__actions--up{left:28px}[dir=rtl] .q-fab--align-left>.q-fab__actions--down,[dir=rtl] .q-fab--align-left>.q-fab__actions--up{right:28px}.q-fab--align-right>.q-fab__actions--down,.q-fab--align-right>.q-fab__actions--up{align-items:flex-end}[dir=ltr] .q-fab--align-right>.q-fab__actions--down,[dir=ltr] .q-fab--align-right>.q-fab__actions--up{left:auto;right:0}[dir=rtl] .q-fab--align-right>.q-fab__actions--down,[dir=rtl] .q-fab--align-right>.q-fab__actions--up{right:auto;left:0}.q-field{font-size:14px}.q-field ::-ms-clear,.q-field ::-ms-reveal{display:none}[dir] .q-field--with-bottom{padding-bottom:20px}.q-field__marginal{height:56px;color:rgba(0,0,0,0.54);font-size:24px}[dir=ltr] .q-field__marginal>*+*{margin-left:2px}[dir=rtl] .q-field__marginal>*+*{margin-right:2px}.q-field__marginal .q-avatar{font-size:32px}[dir=ltr] .q-field__before,[dir=ltr] .q-field__prepend{padding-right:12px}[dir=ltr] .q-field__after,[dir=ltr] .q-field__append,[dir=rtl] .q-field__before,[dir=rtl] .q-field__prepend{padding-left:12px}[dir=rtl] .q-field__after,[dir=rtl] .q-field__append{padding-right:12px}.q-field__after:empty,.q-field__append:empty{display:none}[dir=ltr] .q-field__append+.q-field__append{padding-left:2px}[dir=rtl] .q-field__append+.q-field__append{padding-right:2px}[dir=ltr] .q-field__inner{text-align:left}[dir=rtl] .q-field__inner{text-align:right}.q-field__bottom{font-size:12px;min-height:20px;line-height:1;color:rgba(0,0,0,0.54);backface-visibility:hidden}[dir] .q-field__bottom{padding:8px 12px 0}.q-field__bottom--animated{position:absolute;bottom:0}[dir] .q-field__bottom--animated{transform:translateY(100%)}[dir=ltr] .q-field__bottom--animated,[dir=rtl] .q-field__bottom--animated{left:0;right:0}.q-field__messages{line-height:1}.q-field__messages>div{word-break:break-word;word-wrap:break-word;overflow-wrap:break-word}[dir] .q-field__messages>div+div{margin-top:4px}.q-field__counter{line-height:1}[dir=ltr] .q-field__counter{padding-left:8px}[dir=rtl] .q-field__counter{padding-right:8px}[dir] .q-field--item-aligned{padding:8px 16px}.q-field--item-aligned .q-field__before{min-width:56px}.q-field__control-container{height:inherit}.q-field__control{color:#1976d2;color:var(--q-color-primary);height:56px;max-width:100%;outline:none}.q-field__control:after,.q-field__control:before{content:"";position:absolute;top:0;bottom:0;pointer-events:none}[dir=ltr] .q-field__control:after,[dir=ltr] .q-field__control:before,[dir=rtl] .q-field__control:after,[dir=rtl] .q-field__control:before{right:0;left:0}[dir] .q-field__control:before{border-radius:inherit}.q-field__shadow{top:8px;opacity:0;overflow:hidden;white-space:pre-wrap;transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field__shadow+.q-field__native::-moz-placeholder{-moz-transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1);transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field__shadow+.q-field__native:-ms-input-placeholder{-ms-transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1);transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field__shadow+.q-field__native::placeholder{transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1)}.q-field__shadow+.q-field__native:focus::-moz-placeholder{opacity:0}.q-field__shadow+.q-field__native:focus:-ms-input-placeholder{opacity:0}.q-field__shadow+.q-field__native:focus::placeholder{opacity:0}.q-field__input,.q-field__native,.q-field__prefix,.q-field__suffix{font-weight:400;line-height:28px;letter-spacing:0.00937em;text-decoration:inherit;text-transform:inherit;color:rgba(0,0,0,0.87);outline:0}[dir] .q-field__input,[dir] .q-field__native,[dir] .q-field__prefix,[dir] .q-field__suffix{border:none;border-radius:0;background:none;padding:6px 0}.q-field__input,.q-field__native{width:100%;min-width:0;outline:0!important;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}[dir=ltr] .q-field__input:-webkit-autofill,[dir=ltr] .q-field__native:-webkit-autofill,[dir=rtl] .q-field__input:-webkit-autofill,[dir=rtl] .q-field__native:-webkit-autofill{-webkit-animation-name:q-autofill;-webkit-animation-fill-mode:both}[dir] .q-field__input:-webkit-autofill+.q-field__label,[dir] .q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-40%) scale(0.75)}[dir] .q-field__input[type=number]:invalid+.q-field__label,[dir] .q-field__native[type=number]:invalid+.q-field__label{transform:translateY(-40%) scale(0.75)}[dir] .q-field__input:invalid,[dir] .q-field__native:invalid{box-shadow:none}.q-field__native[type=file]{line-height:1em}.q-field__input{height:0;min-height:24px;line-height:24px}[dir] .q-field__input{padding:0}.q-field__prefix,.q-field__suffix{transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1);white-space:nowrap}[dir=ltr] .q-field__prefix{padding-right:4px}[dir=ltr] .q-field__suffix,[dir=rtl] .q-field__prefix{padding-left:4px}[dir=rtl] .q-field__suffix{padding-right:4px}.q-field--disabled .q-placeholder,.q-field--readonly .q-placeholder{opacity:1!important}[dir] .q-field--readonly.q-field--labeled .q-field__input,[dir] .q-field--readonly.q-field--labeled .q-field__native{cursor:default}[dir] .q-field--readonly.q-field--float .q-field__input,[dir] .q-field--readonly.q-field--float .q-field__native{cursor:text}[dir] .q-field--disabled .q-field__inner{cursor:not-allowed}.q-field--disabled .q-field__control{pointer-events:none;opacity:0.6!important}.q-field--disabled .q-field__control div,.q-field--disabled .q-field__control div *{outline:0!important}.q-field__label{max-width:100%;top:18px;color:rgba(0,0,0,0.6);font-size:16px;line-height:20px;font-weight:400;letter-spacing:0.00937em;text-decoration:inherit;text-transform:inherit;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1),max-width 0.324s cubic-bezier(0.4,0,0.2,1);backface-visibility:hidden}[dir=ltr] .q-field__label{left:0;transform-origin:left top}[dir=rtl] .q-field__label{right:0;transform-origin:right top}.q-field__label-back{position:absolute;top:7.5px;height:0;z-index:-1;transition:height 0.36s cubic-bezier(0.4,0,0.2,1)}[dir=ltr] .q-field__label-back,[dir=rtl] .q-field__label-back{left:0;right:0}.q-field--float .q-field__label-back{height:4.5px}.q-field--float .q-field__label{max-width:133%;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1),max-width 0.396s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--float .q-field__label{transform:translateY(-40%) scale(0.75)}.q-field--highlighted .q-field__label{color:currentColor}.q-field--highlighted .q-field__shadow{opacity:0.5}[dir] .q-field--filled .q-field__control{padding:0 12px;background:rgba(0,0,0,0.05);border-radius:4px 4px 0 0}.q-field--filled .q-field__control:before{opacity:0;transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1),background 0.36s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--filled .q-field__control:before{background:rgba(0,0,0,0.05);border-bottom:1px solid rgba(0,0,0,0.42)}.q-field--filled .q-field__control:hover:before{opacity:1}.q-field--filled .q-field__control:after{height:2px;top:auto;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--filled .q-field__control:after{transform-origin:center bottom;transform:scale3d(0,1,1);background:currentColor}[dir] .q-field--filled.q-field--rounded .q-field__control{border-radius:28px 28px 0 0}.q-field--filled.q-field--highlighted .q-field__control:before{opacity:1}[dir] .q-field--filled.q-field--highlighted .q-field__control:before{background:rgba(0,0,0,0.12)}[dir] .q-field--filled.q-field--highlighted .q-field__control:after{transform:scale3d(1,1,1)}[dir] .q-field--filled.q-field--dark .q-field__control,[dir] .q-field--filled.q-field--dark .q-field__control:before{background:hsla(0,0%,100%,0.07)}[dir] .q-field--filled.q-field--dark.q-field--highlighted .q-field__control:before{background:hsla(0,0%,100%,0.1)}.q-field--filled.q-field--readonly .q-field__control:before{opacity:1}[dir] .q-field--filled.q-field--readonly .q-field__control:before{background:transparent;border-bottom-style:dashed}[dir] .q-field--outlined .q-field__control{border-radius:4px;padding:0 12px}.q-field--outlined .q-field__control:before{transition:border-color 0.36s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--outlined .q-field__control:before{border:1px solid rgba(0,0,0,0.24)}[dir] .q-field--outlined .q-field__control:hover:before{border-color:#000;border-color:var(--q-color-light-text)}.q-field--outlined .q-field__control:after{height:inherit;transition:border-color 0.36s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--outlined .q-field__control:after{border-radius:inherit;border:2px solid transparent}[dir] .q-field--outlined .q-field__input:-webkit-autofill,[dir] .q-field--outlined .q-field__native:-webkit-autofill{margin-top:1px;margin-bottom:1px}[dir] .q-field--outlined.q-field--rounded .q-field__control{border-radius:28px}[dir] .q-field--outlined.q-field--highlighted .q-field__control:hover:before{border-color:transparent}[dir] .q-field--outlined.q-field--highlighted .q-field__control:after{border-color:currentColor;border-width:2px;transform:scale3d(1,1,1)}[dir] .q-field--outlined.q-field--readonly .q-field__control:before{border-style:dashed}.q-field--standard .q-field__control:before{transition:border-color 0.36s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--standard .q-field__control:before{border-bottom:1px solid rgba(0,0,0,0.24)}[dir] .q-field--standard .q-field__control:hover:before{border-color:#000;border-color:var(--q-color-light-text)}.q-field--standard .q-field__control:after{height:2px;top:auto;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--standard .q-field__control:after{transform-origin:center bottom;transform:scale3d(0,1,1);background:currentColor}[dir=ltr] .q-field--standard .q-field__control:after,[dir=rtl] .q-field--standard .q-field__control:after{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}[dir] .q-field--standard.q-field--highlighted .q-field__control:after{transform:scale3d(1,1,1)}[dir] .q-field--standard.q-field--readonly .q-field__control:before{border-bottom-style:dashed}[dir] .q-field--dark .q-field__control:before{border-color:hsla(0,0%,100%,0.6)}[dir] .q-field--dark .q-field__control:hover:before{border-color:#fff;border-color:var(--q-color-dark-text)}.q-field--dark .q-field__input,.q-field--dark .q-field__native,.q-field--dark .q-field__prefix,.q-field--dark .q-field__suffix{color:#fff;color:var(--q-color-dark-text)}.q-field--dark .q-field__bottom,.q-field--dark .q-field__marginal,.q-field--dark:not(.q-field--highlighted) .q-field__label{color:hsla(0,0%,100%,0.7)}.q-field--standout .q-field__control{transition:box-shadow 0.36s cubic-bezier(0.4,0,0.2,1),background-color 0.36s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--standout .q-field__control{padding:0 12px;background:rgba(0,0,0,0.05);border-radius:4px}.q-field--standout .q-field__control:before{opacity:0;transition:opacity 0.36s cubic-bezier(0.4,0,0.2,1),background 0.36s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--standout .q-field__control:before{background:rgba(0,0,0,0.07)}.q-field--standout .q-field__control:hover:before{opacity:1}[dir] .q-field--standout.q-field--rounded .q-field__control{border-radius:28px}[dir] .q-field--standout.q-field--highlighted .q-field__control{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);background:#121212;background:var(--q-color-dark-page)}.q-field--standout.q-field--highlighted .q-field__append,.q-field--standout.q-field--highlighted .q-field__input,.q-field--standout.q-field--highlighted .q-field__native,.q-field--standout.q-field--highlighted .q-field__prefix,.q-field--standout.q-field--highlighted .q-field__prepend,.q-field--standout.q-field--highlighted .q-field__suffix{color:#fff;color:var(--q-color-dark-text)}.q-field--standout.q-field--readonly .q-field__control:before{opacity:1}[dir] .q-field--standout.q-field--readonly .q-field__control:before{background:transparent;border:1px dashed rgba(0,0,0,0.24)}[dir] .q-field--standout.q-field--dark .q-field__control,[dir] .q-field--standout.q-field--dark .q-field__control:before{background:hsla(0,0%,100%,0.07)}[dir] .q-field--standout.q-field--dark.q-field--highlighted .q-field__control{background:#fff;background:var(--q-color-light-page)}.q-field--standout.q-field--dark.q-field--highlighted .q-field__append,.q-field--standout.q-field--dark.q-field--highlighted .q-field__input,.q-field--standout.q-field--dark.q-field--highlighted .q-field__native,.q-field--standout.q-field--dark.q-field--highlighted .q-field__prefix,.q-field--standout.q-field--dark.q-field--highlighted .q-field__prepend,.q-field--standout.q-field--dark.q-field--highlighted .q-field__suffix{color:#000;color:var(--q-color-light-text)}[dir] .q-field--standout.q-field--dark.q-field--readonly .q-field__control:before{border-color:hsla(0,0%,100%,0.24)}.q-field--labeled--std .q-field__native,.q-field--labeled--std .q-field__prefix,.q-field--labeled--std .q-field__suffix{line-height:24px}[dir] .q-field--labeled--std .q-field__native,[dir] .q-field--labeled--std .q-field__prefix,[dir] .q-field--labeled--std .q-field__suffix{padding-top:24px;padding-bottom:8px}.q-field--labeled .q-field__shadow{top:0}.q-field--labeled:not(.q-field--float) .q-field__prefix,.q-field--labeled:not(.q-field--float) .q-field__suffix{opacity:0}.q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder,.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder{color:transparent!important}.q-field--labeled:not(.q-field--float) .q-field__input::-moz-placeholder,.q-field--labeled:not(.q-field--float) .q-field__native::-moz-placeholder{color:transparent}.q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder,.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder{color:transparent}.q-field--labeled:not(.q-field--float) .q-field__input::placeholder,.q-field--labeled:not(.q-field--float) .q-field__native::placeholder{color:transparent}[dir] .q-field--labeled--std.q-field--dense .q-field__native,[dir] .q-field--labeled--std.q-field--dense .q-field__prefix,[dir] .q-field--labeled--std.q-field--dense .q-field__suffix{padding-top:14px;padding-bottom:2px}.q-field--dense .q-field__shadow{top:0}.q-field--dense .q-field__control,.q-field--dense .q-field__marginal{height:40px}.q-field--dense .q-field__bottom{font-size:11px}.q-field--dense .q-field__label{font-size:14px;top:10px}[dir=ltr] .q-field--dense .q-field__before,[dir=ltr] .q-field--dense .q-field__prepend{padding-right:6px}[dir=ltr] .q-field--dense .q-field__after,[dir=ltr] .q-field--dense .q-field__append,[dir=rtl] .q-field--dense .q-field__before,[dir=rtl] .q-field--dense .q-field__prepend{padding-left:6px}[dir=rtl] .q-field--dense .q-field__after,[dir=rtl] .q-field--dense .q-field__append{padding-right:6px}[dir=ltr] .q-field--dense .q-field__append+.q-field__append{padding-left:2px}[dir=rtl] .q-field--dense .q-field__append+.q-field__append{padding-right:2px}.q-field--dense .q-field__marginal .q-avatar{font-size:24px}[dir] .q-field--dense.q-field--float .q-field__label{transform:translateY(-30%) scale(0.75)}[dir] .q-field--dense .q-field__input:-webkit-autofill+.q-field__label,[dir] .q-field--dense .q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-30%) scale(0.75)}[dir] .q-field--dense .q-field__input[type=number]:invalid+.q-field__label,[dir] .q-field--dense .q-field__native[type=number]:invalid+.q-field__label{transform:translateY(-30%) scale(0.75)}.q-field--outlined--md.q-field--float .q-field__label{max-width:133%;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1),padding 0.36s cubic-bezier(0.4,0,0.2,1),max-width 0.396s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--outlined--md.q-field--float .q-field__label{transform:translateY(-120%) scale(0.75)}[dir=ltr] .q-field--outlined--md.q-field--float .q-field__label,[dir=rtl] .q-field--outlined--md.q-field--float .q-field__label{padding-left:6px;padding-right:6px}.q-field--outlined--md .q-field__label{z-index:1;transition:transform 0.36s cubic-bezier(0.4,0,0.2,1),padding 0.36s cubic-bezier(0.4,0,0.2,1),max-width 0.324s cubic-bezier(0.4,0,0.2,1)}[dir] .q-field--outlined--md .q-field__label{border-radius:4px}[dir=ltr] .q-field--outlined--md .q-field__label{left:-4px;padding-left:4px;padding-right:4px}[dir=rtl] .q-field--outlined--md .q-field__label{right:-4px;padding-right:4px;padding-left:4px}[dir] .q-field--outlined--md .q-field__input:-webkit-autofill+.q-field__label,[dir] .q-field--outlined--md .q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-120%) scale(0.75)}[dir] .q-field--outlined--md .q-field__input[type=number]:invalid+.q-field__label,[dir] .q-field--outlined--md .q-field__native[type=number]:invalid+.q-field__label{transform:translateY(-120%) scale(0.75)}[dir] .q-field--outlined--md.q-field--dense.q-field--outlined--md.q-field--float .q-field__label{transform:translateY(-85%) scale(0.75)}[dir] .q-field--outlined--md.q-field--dense .q-field__input:-webkit-autofill+.q-field__label,[dir] .q-field--outlined--md.q-field--dense .q-field__native:-webkit-autofill+.q-field__label{transform:translateY(-85%) scale(0.75)}[dir] .q-field--outlined--md.q-field--dense .q-field__input[type=number]:invalid+.q-field__label,[dir] .q-field--outlined--md.q-field--dense .q-field__native[type=number]:invalid+.q-field__label{transform:translateY(-85%) scale(0.75)}[dir=ltr] .q-field--borderless.q-field--dense .q-field__control,[dir=ltr] .q-field--borderless .q-field__bottom,[dir=ltr] .q-field--standard.q-field--dense .q-field__control,[dir=ltr] .q-field--standard .q-field__bottom,[dir=rtl] .q-field--borderless.q-field--dense .q-field__control,[dir=rtl] .q-field--borderless .q-field__bottom,[dir=rtl] .q-field--standard.q-field--dense .q-field__control,[dir=rtl] .q-field--standard .q-field__bottom{padding-left:0;padding-right:0}[dir=ltr] .q-field--error .q-field__label{-webkit-animation:q-field-label-ltr 0.36s;animation:q-field-label-ltr 0.36s}[dir=rtl] .q-field--error .q-field__label{-webkit-animation:q-field-label-rtl 0.36s;animation:q-field-label-rtl 0.36s}.q-field--error .q-field__bottom{color:#c10015;color:var(--q-color-negative)}.q-field__focusable-action{opacity:0.6;outline:0!important;color:inherit}[dir] .q-field__focusable-action{cursor:pointer;border:0;background:transparent;padding:0}.q-field__focusable-action:focus,.q-field__focusable-action:hover{opacity:1}.q-field--auto-height .q-field__control{height:auto}.q-field--auto-height .q-field__control,.q-field--auto-height .q-field__native{min-height:56px}.q-field--auto-height .q-field__native{align-items:center}[dir] .q-field--auto-height .q-field__control-container{padding-top:0}.q-field--auto-height .q-field__native,.q-field--auto-height .q-field__prefix,.q-field--auto-height .q-field__suffix{line-height:18px}[dir] .q-field--auto-height.q-field--labeled--std .q-field__control-container{padding-top:24px}.q-field--auto-height.q-field--labeled--std .q-field__shadow{top:24px}[dir] .q-field--auto-height.q-field--labeled--std .q-field__native,[dir] .q-field--auto-height.q-field--labeled--std .q-field__prefix,[dir] .q-field--auto-height.q-field--labeled--std .q-field__suffix{padding-top:0}.q-field--auto-height.q-field--labeled--std .q-field__native{min-height:24px}.q-field--auto-height.q-field--dense .q-field__control,.q-field--auto-height.q-field--dense .q-field__native{min-height:40px}[dir] .q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__control-container{padding-top:14px}.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__shadow{top:14px}.q-field--auto-height.q-field--dense.q-field--labeled--std .q-field__native{min-height:24px}[dir] .q-field--square .q-field__control{border-radius:0!important}.q-transition--field-message-enter-active,.q-transition--field-message-leave-active{transition:transform 0.6s cubic-bezier(0.86,0,0.07,1),opacity 0.6s cubic-bezier(0.86,0,0.07,1)}.q-transition--field-message-enter,.q-transition--field-message-leave-to{opacity:0}[dir] .q-transition--field-message-enter,[dir] .q-transition--field-message-leave-to{transform:translateY(-10px)}.q-transition--field-message-leave,.q-transition--field-message-leave-active{position:absolute}@media (prefers-color-scheme:dark){[dir] .q-field--dark-auto.q-field--filled .q-field__control,[dir] .q-field--dark-auto.q-field--filled .q-field__control:before{background:hsla(0,0%,100%,0.07)}[dir] .q-field--dark-auto.q-field--filled.q-field--highlighted .q-field__control:before{background:hsla(0,0%,100%,0.1)}[dir] .q-field--dark-auto .q-field__control:before{border-color:hsla(0,0%,100%,0.6)}[dir] .q-field--dark-auto .q-field__control:hover:before{border-color:#fff;border-color:var(--q-color-dark-text)}.q-field--dark-auto .q-field__input,.q-field--dark-auto .q-field__native,.q-field--dark-auto .q-field__prefix,.q-field--dark-auto .q-field__suffix{color:#fff;color:var(--q-color-dark-text)}.q-field--dark-auto .q-field__bottom,.q-field--dark-auto .q-field__marginal,.q-field--dark-auto:not(.q-field--highlighted) .q-field__label{color:hsla(0,0%,100%,0.7)}[dir] .q-field--dark-auto.q-field--standout .q-field__control,[dir] .q-field--dark-auto.q-field--standout .q-field__control:before{background:hsla(0,0%,100%,0.07)}[dir] .q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__control{background:#fff;background:var(--q-color-light-page)}.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__append,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__input,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__native,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__prefix,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__prepend,.q-field--dark-auto.q-field--standout.q-field--highlighted .q-field__suffix{color:#000;color:var(--q-color-light-text)}[dir] .q-field--dark-auto.q-field--standout.q-field--readonly .q-field__control:before{border-color:hsla(0,0%,100%,0.24)}}.q-file .q-field__native{word-break:break-all}.q-file .q-field__input{opacity:0!important}[dir] .q-file .q-field__input::-webkit-file-upload-button{cursor:pointer}.q-file__filler{visibility:hidden;width:100%}[dir] .q-file__filler{border:none;padding:0}.q-file__dnd{outline:1px dashed currentColor;outline-offset:-4px}.q-form,.q-img{position:relative}.q-img{width:100%;display:inline-block;vertical-align:middle}.q-img__loading .q-spinner{font-size:50px}[dir] .q-img__image{border-radius:inherit;background-repeat:no-repeat}.q-img__content{overflow:hidden}[dir] .q-img__content{border-radius:inherit}.q-img__content>div{position:absolute;color:#fff}[dir] .q-img__content>div{padding:16px;background:rgba(0,0,0,0.47)}.q-img--menu .q-img__image{pointer-events:none}.q-img--menu .q-img__image>img{pointer-events:all;opacity:0}.q-img--menu .q-img__content{pointer-events:none}.q-img--menu .q-img__content>div{pointer-events:all}[dir] .q-inner-loading{background:hsla(0,0%,100%,0.6)}[dir] .q-inner-loading--dark{background:rgba(0,0,0,0.4)}[dir] .q-inner-loading__label{margin-top:8px}@media (prefers-color-scheme:dark){[dir] .q-inner-loading--dark-auto{background:rgba(0,0,0,0.4)}}.q-textarea .q-field__control{min-height:56px;height:auto}[dir] .q-textarea .q-field__control-container{padding-top:2px;padding-bottom:2px}.q-textarea .q-field__shadow{top:2px;bottom:2px}.q-textarea .q-field__native,.q-textarea .q-field__prefix,.q-textarea .q-field__suffix{line-height:18px}.q-textarea .q-field__native{resize:vertical;min-height:52px}[dir] .q-textarea .q-field__native{padding-top:17px}[dir] .q-textarea.q-field--labeled--std .q-field__control-container{padding-top:26px}.q-textarea.q-field--labeled--std .q-field__shadow{top:26px}[dir] .q-textarea.q-field--labeled--std .q-field__native,[dir] .q-textarea.q-field--labeled--std .q-field__prefix,[dir] .q-textarea.q-field--labeled--std .q-field__suffix{padding-top:0}.q-textarea.q-field--labeled--std .q-field__native{min-height:26px}[dir] .q-textarea.q-field--labeled--std .q-field__native{padding-top:1px}.q-textarea--autogrow .q-field__native{resize:none}.q-textarea.q-field--dense .q-field__control,.q-textarea.q-field--dense .q-field__native{min-height:36px}[dir] .q-textarea.q-field--dense .q-field__native{padding-top:9px}[dir] .q-textarea.q-field--dense.q-field--labeled--std .q-field__control-container{padding-top:14px}.q-textarea.q-field--dense.q-field--labeled--std .q-field__shadow{top:14px}.q-textarea.q-field--dense.q-field--labeled--std .q-field__native{min-height:24px}[dir] .q-textarea.q-field--dense.q-field--labeled--std .q-field__native{padding-top:3px}[dir] .q-textarea.q-field--dense.q-field--labeled--std .q-field__prefix,[dir] .q-textarea.q-field--dense.q-field--labeled--std .q-field__suffix{padding-top:2px}.q-textarea.disabled .q-field__native,body.mobile .q-textarea .q-field__native{resize:none}.q-intersection{position:relative}.q-item{min-height:48px;color:inherit;transition:color 0.3s,background-color 0.3s}[dir] .q-item{padding:8px 16px}.q-item__section--side{color:#757575;align-items:flex-start;width:auto;min-width:0;max-width:100%}[dir=ltr] .q-item__section--side{padding-right:16px}[dir=rtl] .q-item__section--side{padding-left:16px}.q-item__section--side>.q-icon{font-size:24px}.q-item__section--side>.q-avatar{font-size:40px}.q-item__section--avatar{color:inherit;min-width:56px}.q-item__section--thumbnail img{width:100px;height:56px}.q-item__section--nowrap{white-space:nowrap}[dir=ltr] .q-item>.q-focus-helper+.q-item__section--thumbnail,[dir=ltr] .q-item>.q-item__section--thumbnail:first-child{margin-left:-16px}[dir=ltr] .q-item>.q-item__section--thumbnail:last-of-type,[dir=rtl] .q-item>.q-focus-helper+.q-item__section--thumbnail,[dir=rtl] .q-item>.q-item__section--thumbnail:first-child{margin-right:-16px}[dir=rtl] .q-item>.q-item__section--thumbnail:last-of-type{margin-left:-16px}.q-item__label{line-height:1.2em!important;max-width:100%}.q-item__label--overline{color:rgba(0,0,0,0.7)}.q-item__label--caption{color:rgba(0,0,0,0.54)}.q-item__label--header{color:#757575;font-size:0.875rem;line-height:1.25rem;letter-spacing:0.01786em}[dir] .q-item__label--header{padding:16px}[dir] .q-list--padding .q-item__label--header,[dir] .q-separator--spaced+.q-item__label--header{padding-top:8px}[dir] .q-item__label+.q-item__label{margin-top:4px}.q-item__section--main{width:auto;min-width:0;max-width:100%;flex:10000 1 0%}[dir=ltr] .q-item__section--main+.q-item__section--main{margin-left:8px}[dir=rtl] .q-item__section--main+.q-item__section--main{margin-right:8px}.q-item__section--main~.q-item__section--side{align-items:flex-end}[dir=ltr] .q-item__section--main~.q-item__section--side{padding-right:0;padding-left:16px}[dir=rtl] .q-item__section--main~.q-item__section--side{padding-left:0;padding-right:16px}[dir=ltr] .q-item__section--main.q-item__section--thumbnail{margin-left:0;margin-right:-16px}[dir=rtl] .q-item__section--main.q-item__section--thumbnail{margin-right:0;margin-left:-16px}[dir] .q-list--bordered{border:1px solid rgba(0,0,0,0.12)}[dir] .q-list--separator>.q-item-type+.q-item-type,[dir] .q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top:1px solid rgba(0,0,0,0.12)}[dir] .q-list--padding{padding:8px 0}.q-item--dense,.q-list--dense>.q-item{min-height:32px}[dir] .q-item--dense,[dir] .q-list--dense>.q-item{padding:2px 16px}[dir] .q-list--dark.q-list--separator>.q-item-type+.q-item-type,[dir] .q-list--dark.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top-color:hsla(0,0%,100%,0.28)}.q-item--dark,.q-list--dark{color:#fff;color:var(--q-color-dark-text)}[dir] .q-item--dark,[dir] .q-list--dark{border-color:hsla(0,0%,100%,0.28)}.q-item--dark .q-item__section--side:not(.q-item__section--avatar),.q-list--dark .q-item__section--side:not(.q-item__section--avatar){color:hsla(0,0%,100%,0.7)}.q-item--dark .q-item__label--header,.q-list--dark .q-item__label--header{color:hsla(0,0%,100%,0.64)}.q-item--dark .q-item__label--caption,.q-item--dark .q-item__label--overline,.q-list--dark .q-item__label--caption,.q-list--dark .q-item__label--overline{color:hsla(0,0%,100%,0.8)}.q-item{position:relative}.q-item--active,.q-item.q-router-link--active{color:#1976d2;color:var(--q-color-primary)}@media (prefers-color-scheme:dark){[dir] .q-list--dark-auto.q-list--separator>.q-item-type+.q-item-type,[dir] .q-list--dark-auto.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top-color:hsla(0,0%,100%,0.28)}.q-item--dark-auto,.q-list--dark-auto{color:#fff;color:var(--q-color-dark-text)}[dir] .q-item--dark-auto,[dir] .q-list--dark-auto{border-color:hsla(0,0%,100%,0.28)}.q-item--dark-auto .q-item__section--side:not(.q-item__section--avatar),.q-list--dark-auto .q-item__section--side:not(.q-item__section--avatar){color:hsla(0,0%,100%,0.7)}.q-item--dark-auto .q-item__label--header,.q-list--dark-auto .q-item__label--header{color:hsla(0,0%,100%,0.64)}.q-item--dark-auto .q-item__label--caption,.q-item--dark-auto .q-item__label--overline,.q-list--dark-auto .q-item__label--caption,.q-list--dark-auto .q-item__label--overline{color:hsla(0,0%,100%,0.8)}}.q-knob{font-size:48px}.q-knob--editable{outline:0}[dir] .q-knob--editable{cursor:pointer}.q-knob--editable:before{content:"";position:absolute;top:0;bottom:0;transition:box-shadow 0.24s ease-in-out}[dir] .q-knob--editable:before{border-radius:50%;box-shadow:none}[dir=ltr] .q-knob--editable:before,[dir=rtl] .q-knob--editable:before{right:0;left:0}[dir] .q-knob--editable:focus:before{box-shadow:0 2px 4px -1px rgba(0,0,0,0.2),0 4px 5px rgba(0,0,0,0.14),0 1px 10px rgba(0,0,0,0.12)}.q-layout{width:100%}.q-layout-container{position:relative;width:100%;height:100%}.q-layout-container .q-layout{min-height:100%}.q-layout-container>div{contain:layout size;contain:layout size style}[dir] .q-layout-container>div{transform:translateZ(0)}.q-layout-container>div>div{min-height:0;max-height:100%}.q-layout__shadow{width:100%}.q-layout__shadow:after{content:"";position:absolute;top:0;bottom:0}[dir] .q-layout__shadow:after{box-shadow:0 0 10px 2px rgba(0,0,0,0.2),0 0px 10px rgba(0,0,0,0.24)}[dir=ltr] .q-layout__shadow:after,[dir=rtl] .q-layout__shadow:after{right:0;left:0}.q-layout__section--marginal{color:#fff;color:var(--q-color-dark-text)}[dir] .q-layout__section--marginal{background-color:#1976d2;background-color:var(--q-color-primary)}[dir] .q-header--hidden{transform:translateY(-110%)}[dir] .q-header--bordered{border-bottom:1px solid rgba(0,0,0,0.12)}.q-header .q-layout__shadow{bottom:-10px}.q-header .q-layout__shadow:after{bottom:10px}[dir] .q-footer--hidden{transform:translateY(110%)}[dir] .q-footer--bordered{border-top:1px solid rgba(0,0,0,0.12)}.q-footer .q-layout__shadow{top:-10px}.q-footer .q-layout__shadow:after{top:10px}.q-footer,.q-header{z-index:2000}.q-drawer{position:absolute;top:0;bottom:0;z-index:1000;contain:layout size;contain:layout size style}.q-drawer--on-top{z-index:3000}[dir=ltr] .q-drawer--left{left:0;transform:translateX(-100%)}[dir=rtl] .q-drawer--left{right:0;transform:translateX(100%)}[dir=ltr] .q-drawer--left.q-drawer--bordered{border-right:1px solid rgba(0,0,0,0.12)}[dir=rtl] .q-drawer--left.q-drawer--bordered{border-left:1px solid rgba(0,0,0,0.12)}[dir=ltr] .q-drawer--left .q-layout__shadow{left:10px;right:-10px}[dir=rtl] .q-drawer--left .q-layout__shadow{right:10px;left:-10px}[dir=ltr] .q-drawer--left .q-layout__shadow:after{right:10px}[dir=rtl] .q-drawer--left .q-layout__shadow:after{left:10px}[dir=ltr] .q-drawer--right{right:0;transform:translateX(100%)}[dir=rtl] .q-drawer--right{left:0;transform:translateX(-100%)}[dir=ltr] .q-drawer--right.q-drawer--bordered{border-left:1px solid rgba(0,0,0,0.12)}[dir=rtl] .q-drawer--right.q-drawer--bordered{border-right:1px solid rgba(0,0,0,0.12)}[dir=ltr] .q-drawer--right .q-layout__shadow{left:-10px}[dir=rtl] .q-drawer--right .q-layout__shadow{right:-10px}[dir=ltr] .q-drawer--right .q-layout__shadow:after{left:10px}[dir=rtl] .q-drawer--right .q-layout__shadow:after{right:10px}[dir] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini{padding:0!important}.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section{justify-content:center;min-width:0}[dir] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item,[dir] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section{text-align:center}[dir=ltr] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item,[dir=ltr] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section,[dir=rtl] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item,[dir=rtl] .q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section{padding-left:0;padding-right:0}.q-drawer--mini .q-expansion-item__content,.q-drawer--mini .q-mini-drawer-hide,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__label,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--main,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--side~.q-item__section--side{display:none}.q-drawer--mini-animate .q-drawer__content{overflow-x:hidden;white-space:nowrap}.q-drawer--mobile .q-mini-drawer-hide,.q-drawer--mobile .q-mini-drawer-only,.q-drawer--standard .q-mini-drawer-only{display:none}.q-drawer__backdrop{z-index:2999!important;will-change:opacity;opacity:0}[dir] .q-drawer__backdrop{background:#000;background:var(--q-color-backdrop-background)}.q-drawer__opener{z-index:2001;height:100%;width:15px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.q-footer,.q-header,.q-layout,.q-page{position:relative}.q-page-sticky--shrink{pointer-events:none}.q-page-sticky--shrink>div{display:inline-block;pointer-events:auto}body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content,body.q-ios-padding .q-layout--standard .q-header>.q-tabs:first-child .q-tabs-head,body.q-ios-padding .q-layout--standard .q-header>.q-toolbar:first-child{min-height:70px;min-height:calc(env(safe-area-inset-top) + 50px)}[dir] body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content,[dir] body.q-ios-padding .q-layout--standard .q-header>.q-tabs:first-child .q-tabs-head,[dir] body.q-ios-padding .q-layout--standard .q-header>.q-toolbar:first-child{padding-top:20px;padding-top:env(safe-area-inset-top)}body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content,body.q-ios-padding .q-layout--standard .q-footer>.q-tabs:last-child .q-tabs-head,body.q-ios-padding .q-layout--standard .q-footer>.q-toolbar:last-child{min-height:calc(env(safe-area-inset-bottom) + 50px)}[dir] body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content,[dir] body.q-ios-padding .q-layout--standard .q-footer>.q-tabs:last-child .q-tabs-head,[dir] body.q-ios-padding .q-layout--standard .q-footer>.q-toolbar:last-child{padding-bottom:env(safe-area-inset-bottom)}.q-body--layout-animate .q-drawer__backdrop{transition:opacity 0.12s!important}.q-body--layout-animate .q-drawer{transition:transform 0.12s,width 0.12s,top 0.12s,bottom 0.12s!important}[dir=ltr] .q-body--layout-animate .q-layout__section--marginal{transition:transform 0.12s,left 0.12s,right 0.12s!important}[dir=rtl] .q-body--layout-animate .q-layout__section--marginal{transition:transform 0.12s,right 0.12s,left 0.12s!important}[dir=ltr] .q-body--layout-animate .q-page-container{transition:padding-top 0.12s,padding-right 0.12s,padding-bottom 0.12s,padding-left 0.12s!important}[dir=rtl] .q-body--layout-animate .q-page-container{transition:padding-top 0.12s,padding-left 0.12s,padding-bottom 0.12s,padding-right 0.12s!important}[dir=ltr] .q-body--layout-animate .q-page-sticky{transition:transform 0.12s,left 0.12s,right 0.12s,top 0.12s,bottom 0.12s!important}[dir=rtl] .q-body--layout-animate .q-page-sticky{transition:transform 0.12s,right 0.12s,left 0.12s,top 0.12s,bottom 0.12s!important}body:not(.q-body--layout-animate) .q-layout--prevent-focus{visibility:hidden}.q-body--drawer-toggle{overflow-x:hidden!important}@media (max-width:599.98px){[dir] .q-layout-padding{padding:8px}}@media (min-width:600px) and (max-width:1439.98px){[dir] .q-layout-padding{padding:16px}}@media (min-width:1440px){[dir] .q-layout-padding{padding:24px}}[dir] body.body--dark .q-drawer,[dir] body.body--dark .q-footer,[dir] body.body--dark .q-header{border-color:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){[dir] body.body--dark-auto .q-drawer,[dir] body.body--dark-auto .q-footer,[dir] body.body--dark-auto .q-header{border-color:hsla(0,0%,100%,0.28)}}body.platform-ios .q-layout--containerized{position:unset!important}.q-linear-progress{position:relative;width:100%;overflow:hidden;font-size:4px;height:1em;color:#1976d2;color:var(--q-color-primary)}[dir] .q-linear-progress{transform:scale3d(1,1,1)}[dir=ltr] .q-linear-progress__model,[dir=ltr] .q-linear-progress__track{transform-origin:0 0}[dir=rtl] .q-linear-progress__model,[dir=rtl] .q-linear-progress__track{transform-origin:100% 0}.q-linear-progress__model--with-transition,.q-linear-progress__track--with-transition{transition:transform 0.3s}[dir=ltr] .q-linear-progress--reverse .q-linear-progress__model,[dir=ltr] .q-linear-progress--reverse .q-linear-progress__track{transform-origin:0 100%}[dir=rtl] .q-linear-progress--reverse .q-linear-progress__model,[dir=rtl] .q-linear-progress--reverse .q-linear-progress__track{transform-origin:100% 100%}[dir] .q-linear-progress__model--determinate{background:currentColor}.q-linear-progress__model--indeterminate,.q-linear-progress__model--query{transition:none}.q-linear-progress__model--indeterminate:after,.q-linear-progress__model--indeterminate:before,.q-linear-progress__model--query:after,.q-linear-progress__model--query:before{content:"";position:absolute;top:0;bottom:0}[dir] .q-linear-progress__model--indeterminate:after,[dir] .q-linear-progress__model--indeterminate:before,[dir] .q-linear-progress__model--query:after,[dir] .q-linear-progress__model--query:before{background:currentColor}[dir=ltr] .q-linear-progress__model--indeterminate:after,[dir=ltr] .q-linear-progress__model--indeterminate:before,[dir=ltr] .q-linear-progress__model--query:after,[dir=ltr] .q-linear-progress__model--query:before{right:0;left:0;transform-origin:0 0}[dir=rtl] .q-linear-progress__model--indeterminate:after,[dir=rtl] .q-linear-progress__model--indeterminate:before,[dir=rtl] .q-linear-progress__model--query:after,[dir=rtl] .q-linear-progress__model--query:before{left:0;right:0;transform-origin:100% 0}[dir=ltr] .q-linear-progress__model--indeterminate:before,[dir=ltr] .q-linear-progress__model--query:before{-webkit-animation:q-linear-progress--indeterminate-ltr 2.1s cubic-bezier(0.65,0.815,0.735,0.395) infinite;animation:q-linear-progress--indeterminate-ltr 2.1s cubic-bezier(0.65,0.815,0.735,0.395) infinite}[dir=rtl] .q-linear-progress__model--indeterminate:before,[dir=rtl] .q-linear-progress__model--query:before{-webkit-animation:q-linear-progress--indeterminate-rtl 2.1s cubic-bezier(0.65,0.815,0.735,0.395) infinite;animation:q-linear-progress--indeterminate-rtl 2.1s cubic-bezier(0.65,0.815,0.735,0.395) infinite}[dir=ltr] .q-linear-progress__model--indeterminate:after,[dir=ltr] .q-linear-progress__model--query:after{transform:translate3d(-101%,0,0) scale3d(1,1,1);-webkit-animation:q-linear-progress--indeterminate-short-ltr 2.1s cubic-bezier(0.165,0.84,0.44,1) infinite;animation:q-linear-progress--indeterminate-short-ltr 2.1s cubic-bezier(0.165,0.84,0.44,1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}[dir=rtl] .q-linear-progress__model--indeterminate:after,[dir=rtl] .q-linear-progress__model--query:after{transform:translate3d(101%,0,0) scale3d(1,1,1);-webkit-animation:q-linear-progress--indeterminate-short-rtl 2.1s cubic-bezier(0.165,0.84,0.44,1) infinite;animation:q-linear-progress--indeterminate-short-rtl 2.1s cubic-bezier(0.165,0.84,0.44,1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}.q-linear-progress__track{opacity:0.4}[dir] .q-linear-progress__track--dark-auto,[dir] .q-linear-progress__track--light{background:rgba(0,0,0,0.26)}[dir] .q-linear-progress__track--dark{background:hsla(0,0%,100%,0.6)}.q-linear-progress__stripe{transition:width 0.3s}[dir] .q-linear-progress__stripe{background-size:40px 40px!important}[dir=ltr] .q-linear-progress__stripe{background-image:linear-gradient(45deg,hsla(0,0%,100%,0.15) 25%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0) 50%,hsla(0,0%,100%,0.15) 0,hsla(0,0%,100%,0.15) 75%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))!important}[dir=rtl] .q-linear-progress__stripe{background-image:linear-gradient(-45deg,hsla(0,0%,100%,0.15) 25%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0) 50%,hsla(0,0%,100%,0.15) 0,hsla(0,0%,100%,0.15) 75%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))!important}@media (prefers-color-scheme:dark){[dir] .q-linear-progress__track--dark-auto{background:hsla(0,0%,100%,0.6)}}.q-menu{display:inline-block;max-width:95vw;max-height:65vh;outline:0;opacity:0}[dir] .q-menu{border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);background:#fff}.q-menu__container{position:fixed;z-index:6000;contain:layout;contain:layout style}[dir] .q-menu--square{border-radius:0}.q-option-group--inline>div{display:inline-block}.q-pagination input{-moz-appearance:textfield}[dir] .q-pagination input{text-align:center}.q-pagination input::-webkit-inner-spin-button,.q-pagination input::-webkit-outer-spin-button{-webkit-appearance:none}[dir] .q-pagination input::-webkit-inner-spin-button,[dir] .q-pagination input::-webkit-outer-spin-button{margin:0}.q-pagination__content{--q-pagination-gutter-parent:-2px;--q-pagination-gutter-child:2px}[dir] .q-pagination__content{margin-top:var(--q-pagination-gutter-parent)}[dir=ltr] .q-pagination__content{margin-left:var(--q-pagination-gutter-parent)}[dir=rtl] .q-pagination__content{margin-right:var(--q-pagination-gutter-parent)}[dir] .q-pagination__content>.q-btn,[dir] .q-pagination__content>.q-input,[dir] .q-pagination__middle>.q-btn{margin-top:var(--q-pagination-gutter-child)}[dir=ltr] .q-pagination__content>.q-btn,[dir=ltr] .q-pagination__content>.q-input,[dir=ltr] .q-pagination__middle>.q-btn{margin-left:var(--q-pagination-gutter-child)}[dir=rtl] .q-pagination__content>.q-btn,[dir=rtl] .q-pagination__content>.q-input,[dir=rtl] .q-pagination__middle>.q-btn{margin-right:var(--q-pagination-gutter-child)}.q-parallax{position:relative;width:100%;overflow:hidden}[dir] .q-parallax{border-radius:inherit}.q-parallax__media>img,.q-parallax__media>video{position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;will-change:transform;display:none}[dir] .q-popup-edit{padding:8px 16px}[dir] .q-popup-edit__buttons{margin-top:8px}[dir=ltr] .q-popup-edit__buttons .q-btn+.q-btn{margin-left:8px}[dir=rtl] .q-popup-edit__buttons .q-btn+.q-btn{margin-right:8px}.q-pull-to-refresh{position:relative}.q-pull-to-refresh__puller{width:40px;height:40px;color:#1976d2;color:var(--q-color-primary)}[dir] .q-pull-to-refresh__puller{border-radius:50%;background:#fff;background:var(--q-color-light-page);box-shadow:0 0 4px 0 rgba(0,0,0,0.3)}.q-pull-to-refresh__puller--animating{transition:transform 0.3s,opacity 0.3s}.q-radio{vertical-align:middle}.q-radio__native{width:1px;height:1px}.q-radio__bg,.q-radio__icon-container{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.q-radio__bg{top:25%;width:50%;height:50%;-webkit-print-color-adjust:exact}[dir=ltr] .q-radio__bg{left:25%}[dir=rtl] .q-radio__bg{right:25%}.q-radio__bg path{fill:currentColor}.q-radio__icon{color:currentColor;font-size:0.5em}.q-radio__check{transition:transform 0.22s cubic-bezier(0,0,0.2,1) 0ms}[dir] .q-radio__check{transform-origin:50% 50%;transform:scale3d(0,0,1)}.q-radio__inner{font-size:40px;width:1em;min-width:1em;height:1em;outline:0;color:rgba(0,0,0,0.54)}[dir] .q-radio__inner{border-radius:50%}.q-radio__inner--truthy{color:#1976d2;color:var(--q-color-primary)}[dir] .q-radio__inner--truthy .q-radio__check{transform:scale3d(1,1,1)}.q-radio.disabled{opacity:0.75!important}.q-radio--dark .q-radio__inner{color:hsla(0,0%,100%,0.7)}.q-radio--dark .q-radio__inner:before{opacity:0.32!important}.q-radio--dark .q-radio__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-radio--dense .q-radio__inner{width:0.5em;min-width:0.5em;height:0.5em}.q-radio--dense .q-radio__bg{top:0;width:100%;height:100%}[dir=ltr] .q-radio--dense .q-radio__bg{left:0}[dir=rtl] .q-radio--dense .q-radio__bg{right:0}[dir=ltr] .q-radio--dense .q-radio__label{padding-left:0.5em}[dir=rtl] .q-radio--dense .q-radio__label{padding-right:0.5em}[dir=ltr] .q-radio--dense.reverse .q-radio__label{padding-left:0;padding-right:0.5em}[dir=rtl] .q-radio--dense.reverse .q-radio__label{padding-right:0;padding-left:0.5em}body.desktop .q-radio:not(.disabled) .q-radio__inner:before{content:"";position:absolute;top:0;bottom:0;opacity:0.12;transition:transform 0.22s cubic-bezier(0,0,0.2,1) 0ms}[dir] body.desktop .q-radio:not(.disabled) .q-radio__inner:before{border-radius:50%;background:currentColor;transform:scale3d(0,0,1)}[dir=ltr] body.desktop .q-radio:not(.disabled) .q-radio__inner:before,[dir=rtl] body.desktop .q-radio:not(.disabled) .q-radio__inner:before{right:0;left:0}[dir] body.desktop .q-radio:not(.disabled):focus .q-radio__inner:before,[dir] body.desktop .q-radio:not(.disabled):hover .q-radio__inner:before{transform:scale3d(1,1,1)}[dir] body.desktop .q-radio--dense:not(.disabled):focus .q-radio__inner:before,[dir] body.desktop .q-radio--dense:not(.disabled):hover .q-radio__inner:before{transform:scale3d(1.5,1.5,1)}@media (prefers-color-scheme:dark){.q-radio--dark-auto .q-radio__inner{color:hsla(0,0%,100%,0.7)}.q-radio--dark-auto .q-radio__inner:before{opacity:0.32!important}.q-radio--dark-auto .q-radio__inner--truthy{color:#1976d2;color:var(--q-color-primary)}}.q-rating{color:#ffeb3b;vertical-align:middle}.q-rating__icon-container{height:1em;outline:0}[dir=ltr] .q-rating__icon-container+.q-rating__icon-container{margin-left:2px}[dir=rtl] .q-rating__icon-container+.q-rating__icon-container{margin-right:2px}.q-rating__icon{color:currentColor;position:relative;opacity:0.4;transition:transform 0.2s ease-in,opacity 0.2s ease-in}[dir] .q-rating__icon{text-shadow:0 1px 3px rgba(0,0,0,0.12),0 1px 2px rgba(0,0,0,0.24)}[dir] .q-rating__icon--hovered{transform:scale(1.3)}.q-rating__icon--active{opacity:1}.q-rating__icon--exselected{opacity:0.7}.q-rating--no-dimming .q-rating__icon{opacity:1}[dir] .q-rating--editable .q-rating__icon-container{cursor:pointer}.q-responsive{position:relative;max-width:100%;max-height:100%}.q-responsive__filler{width:inherit;max-width:inherit;height:inherit;max-height:inherit}[dir] .q-responsive__content{border-radius:inherit}.q-responsive__content>*{width:100%!important;height:100%!important;max-height:100%!important;max-width:100%!important}.q-scrollarea{position:relative;contain:strict}.q-scrollarea__bar,.q-scrollarea__thumb{opacity:0.2;transition:opacity 0.3s;will-change:opacity}[dir] .q-scrollarea__bar,[dir] .q-scrollarea__thumb{cursor:-webkit-grab;cursor:grab}.q-scrollarea__bar--v,.q-scrollarea__thumb--v{width:10px}[dir=ltr] .q-scrollarea__bar--v,[dir=ltr] .q-scrollarea__thumb--v{right:0}[dir=rtl] .q-scrollarea__bar--v,[dir=rtl] .q-scrollarea__thumb--v{left:0}.q-scrollarea__bar--h,.q-scrollarea__thumb--h{bottom:0;height:10px}.q-scrollarea__bar--invisible,.q-scrollarea__thumb--invisible{opacity:0!important;pointer-events:none}[dir] .q-scrollarea__thumb{background:#121212;background:var(--q-color-dark-page)}.q-scrollarea__thumb:hover{opacity:0.3}.q-scrollarea__thumb:active{opacity:0.5}.q-scrollarea__content{min-height:100%;min-width:100%}[dir] .q-scrollarea--dark .q-scrollarea__thumb{background:#fff;background:var(--q-color-dark-text)}@media (prefers-color-scheme:dark){[dir] .q-scrollarea--dark-auto .q-scrollarea__thumb{background:#fff;background:var(--q-color-dark-text)}}[dir] .q-select--without-input .q-field__control{cursor:pointer}[dir] .q-select--with-input .q-field__control{cursor:text}[dir] .q-select--with-chips .q-field__input{margin:7px 0}[dir] .q-select--with-chips.q-field--labeled .q-field__native{margin-top:-6px;padding-bottom:0}.q-select--with-chips.q-field--dense .q-chip--dense{height:20px}[dir] .q-select--with-chips.q-field--dense .q-chip--dense{margin:1px 4px}[dir] .q-select--with-chips.q-field--dense .q-field__input{margin:0}[dir] .q-select--with-chips.q-field--dense.q-field--labeled .q-field__native{margin-top:0}.q-select .q-field__input{min-width:50px!important}[dir] .q-select .q-field__input{cursor:text}[dir=ltr] .q-select .q-field__input--padding{padding-left:4px}[dir=rtl] .q-select .q-field__input--padding{padding-right:4px}.q-select__autocomplete-input,.q-select__focus-target{position:absolute;outline:0!important;width:1px;height:1px;opacity:0}[dir] .q-select__autocomplete-input,[dir] .q-select__focus-target{padding:0;border:0}.q-select__dropdown-icon{transition:transform 0.28s}[dir] .q-select__close-icon,[dir] .q-select__dropdown-icon{cursor:pointer}[dir=ltr] .q-select__close-icon:not(:last-child){margin-right:12px}[dir=rtl] .q-select__close-icon:not(:last-child){margin-left:12px}[dir] .q-select.q-field--readonly .q-field__control,[dir] .q-select.q-field--readonly .q-select__dropdown-icon{cursor:default}.q-select__dialog{width:90vw!important;max-width:90vw!important;max-height:calc(100vh - 70px)!important;display:flex;flex-direction:column}.q-select__dialog>.scroll{position:relative}[dir] .q-select__dialog>.scroll{background:inherit}body.platform-android.native-mobile .q-dialog__inner--top .q-select__dialog{max-height:calc(100vh - 24px)!important}body.platform-android:not(.native-mobile) .q-select__dialog{max-height:calc(100vh - 108px)!important}body.platform-android:not(.native-mobile) .q-dialog__inner--top .q-select__dialog{max-height:calc(100vh - 62px)!important}[dir] body.platform-ios.native-mobile .q-dialog__inner--top>div{border-radius:4px}body.platform-ios.native-mobile .q-dialog__inner--top .q-select__dialog--focused{max-height:47vh!important}body.platform-ios:not(.native-mobile) .q-select__dialog{max-height:calc(100vh - 164px)!important}body.platform-ios:not(.native-mobile) .q-dialog__inner--top .q-select__dialog--focused{max-height:48vh!important}.q-separator{transition:background 0.3s,opacity 0.3s;flex-shrink:0}[dir] .q-separator{border:0;background:rgba(0,0,0,0.12);margin:0}[dir] .q-separator--dark{background:hsla(0,0%,100%,0.28)}.q-separator--horizontal{display:block;height:1px}[dir=ltr] .q-separator--horizontal-inset,[dir=rtl] .q-separator--horizontal-inset{margin-left:16px;margin-right:16px}[dir=ltr] .q-separator--horizontal-item-inset{margin-left:72px;margin-right:0}[dir=rtl] .q-separator--horizontal-item-inset{margin-right:72px;margin-left:0}[dir=ltr] .q-separator--horizontal-item-thumbnail-inset{margin-left:116px;margin-right:0}[dir=rtl] .q-separator--horizontal-item-thumbnail-inset{margin-right:116px;margin-left:0}.q-separator--vertical{width:1px;height:auto;align-self:stretch}[dir] .q-separator--vertical-inset{margin-top:8px;margin-bottom:8px}@media (prefers-color-scheme:dark){[dir] .q-separator--dark-auto{background:hsla(0,0%,100%,0.28)}}.q-skeleton{box-sizing:border-box}[dir] .q-skeleton{background:rgba(0,0,0,0.12);border-radius:4px}[dir] .q-skeleton--anim{cursor:wait}.q-skeleton:before{content:"\00a0"}[dir] .q-skeleton--type-text{transform:scale(1,0.5)}.q-skeleton--type-circle,.q-skeleton--type-QAvatar{height:48px;width:48px}[dir] .q-skeleton--type-circle,[dir] .q-skeleton--type-QAvatar{border-radius:50%}.q-skeleton--type-QBtn{width:90px;height:36px}.q-skeleton--type-QBadge{width:70px;height:16px}.q-skeleton--type-QChip{width:90px;height:28px}[dir] .q-skeleton--type-QChip{border-radius:16px}.q-skeleton--type-QToolbar{height:50px}.q-skeleton--type-QCheckbox,.q-skeleton--type-QRadio{width:40px;height:40px}[dir] .q-skeleton--type-QCheckbox,[dir] .q-skeleton--type-QRadio{border-radius:50%}.q-skeleton--type-QToggle{width:56px;height:40px}[dir] .q-skeleton--type-QToggle{border-radius:7px}.q-skeleton--type-QRange,.q-skeleton--type-QSlider{height:40px}.q-skeleton--type-QInput{height:56px}[dir] .q-skeleton--bordered{border:1px solid rgba(0,0,0,0.05)}[dir] .q-skeleton--square{border-radius:0}[dir=ltr] .q-skeleton--anim-fade,[dir=rtl] .q-skeleton--anim-fade{-webkit-animation:q-skeleton--fade 1.5s linear 0.5s infinite;animation:q-skeleton--fade 1.5s linear 0.5s infinite}[dir=ltr] .q-skeleton--anim-pulse,[dir=rtl] .q-skeleton--anim-pulse{-webkit-animation:q-skeleton--pulse 1.5s ease-in-out 0.5s infinite;animation:q-skeleton--pulse 1.5s ease-in-out 0.5s infinite}[dir=ltr] .q-skeleton--anim-pulse-x,[dir=rtl] .q-skeleton--anim-pulse-x{-webkit-animation:q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite;animation:q-skeleton--pulse-x 1.5s ease-in-out 0.5s infinite}[dir=ltr] .q-skeleton--anim-pulse-y,[dir=rtl] .q-skeleton--anim-pulse-y{-webkit-animation:q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite;animation:q-skeleton--pulse-y 1.5s ease-in-out 0.5s infinite}.q-skeleton--anim-blink,.q-skeleton--anim-pop,.q-skeleton--anim-wave{position:relative;overflow:hidden;z-index:1}.q-skeleton--anim-blink:after,.q-skeleton--anim-pop:after,.q-skeleton--anim-wave:after{content:"";position:absolute;top:0;bottom:0;z-index:0}[dir=ltr] .q-skeleton--anim-blink:after,[dir=ltr] .q-skeleton--anim-pop:after,[dir=ltr] .q-skeleton--anim-wave:after,[dir=rtl] .q-skeleton--anim-blink:after,[dir=rtl] .q-skeleton--anim-pop:after,[dir=rtl] .q-skeleton--anim-wave:after{right:0;left:0}[dir] .q-skeleton--anim-blink:after{background:hsla(0,0%,100%,0.7)}[dir=ltr] .q-skeleton--anim-blink:after,[dir=rtl] .q-skeleton--anim-blink:after{-webkit-animation:q-skeleton--fade 1.5s linear 0.5s infinite;animation:q-skeleton--fade 1.5s linear 0.5s infinite}[dir=ltr] .q-skeleton--anim-wave:after{background:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0.5),hsla(0,0%,100%,0));-webkit-animation:q-skeleton--wave-ltr 1.5s linear 0.5s infinite;animation:q-skeleton--wave-ltr 1.5s linear 0.5s infinite}[dir=rtl] .q-skeleton--anim-wave:after{background:linear-gradient(-90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0.5),hsla(0,0%,100%,0));-webkit-animation:q-skeleton--wave-rtl 1.5s linear 0.5s infinite;animation:q-skeleton--wave-rtl 1.5s linear 0.5s infinite}[dir] .q-skeleton--dark{background:hsla(0,0%,100%,0.05)}[dir] .q-skeleton--dark.q-skeleton--bordered{border:1px solid hsla(0,0%,100%,0.25)}[dir=ltr] .q-skeleton--dark.q-skeleton--anim-wave:after{background:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0.1),hsla(0,0%,100%,0))}[dir=rtl] .q-skeleton--dark.q-skeleton--anim-wave:after{background:linear-gradient(-90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0.1),hsla(0,0%,100%,0))}[dir] .q-skeleton--dark.q-skeleton--anim-blink:after{background:hsla(0,0%,100%,0.2)}@media (prefers-color-scheme:dark){[dir] .q-skeleton--dark-auto{background:hsla(0,0%,100%,0.05)}[dir] .q-skeleton--dark-auto.q-skeleton--bordered{border:1px solid hsla(0,0%,100%,0.25)}[dir=ltr] .q-skeleton--dark-auto.q-skeleton--anim-wave:after{background:linear-gradient(90deg,transparent,hsla(0,0%,100%,0.1),transparent)}[dir=rtl] .q-skeleton--dark-auto.q-skeleton--anim-wave:after{background:linear-gradient(-90deg,transparent,hsla(0,0%,100%,0.1),transparent)}[dir] .q-skeleton--dark-auto.q-skeleton--anim-blink:after{background:hsla(0,0%,100%,0.2)}}.q-slide-item{position:relative}.q-slide-item__bottom,.q-slide-item__left,.q-slide-item__right,.q-slide-item__top{visibility:hidden;font-size:14px;color:#fff;color:var(--q-color-dark-text)}.q-slide-item__bottom .q-icon,.q-slide-item__left .q-icon,.q-slide-item__right .q-icon,.q-slide-item__top .q-icon{font-size:1.714em}[dir] .q-slide-item__left{background:#4caf50;padding:8px 16px}[dir=ltr] .q-slide-item__left>div{transform-origin:left center}[dir=rtl] .q-slide-item__left>div{transform-origin:right center}[dir] .q-slide-item__right{background:#ff9800;padding:8px 16px}[dir=ltr] .q-slide-item__right>div{transform-origin:right center}[dir=rtl] .q-slide-item__right>div{transform-origin:left center}[dir] .q-slide-item__top{background:#2196f3;padding:16px 8px}[dir] .q-slide-item__top>div{transform-origin:top center}[dir] .q-slide-item__bottom{background:#9c27b0;padding:16px 8px}[dir] .q-slide-item__bottom>div{transform-origin:bottom center}.q-slide-item__content{transition:transform 0.2s ease-in;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[dir] .q-slide-item__content{background:inherit;cursor:pointer}.q-slider{position:relative}.q-slider--h{width:100%}.q-slider--v{height:200px}[dir] .q-slider--editable .q-slider__track-container{cursor:-webkit-grab;cursor:grab}.q-slider__track-container{outline:0}.q-slider__track-container--h{width:100%}[dir] .q-slider__track-container--h{padding:12px 0}.q-slider__track-container--h .q-slider__selection{will-change:width,left}.q-slider__track-container--v{height:100%}[dir] .q-slider__track-container--v{padding:0 12px}.q-slider__track-container--v .q-slider__selection{will-change:height,top}.q-slider__track{color:#1976d2;color:var(--q-color-primary);width:inherit;height:inherit}[dir] .q-slider__track{background:rgba(0,0,0,0.1);border-radius:4px}.q-slider__inner{width:100%;height:100%}[dir] .q-slider__inner{background:rgba(0,0,0,0.1);border-radius:inherit}.q-slider__selection{width:100%;height:100%}[dir] .q-slider__selection{background:currentColor;border-radius:inherit}.q-slider__markers{color:rgba(0,0,0,0.3);width:100%;height:100%}[dir] .q-slider__markers{border-radius:inherit}.q-slider__markers:after{content:"";position:absolute}[dir] .q-slider__markers:after{background:currentColor}[dir=ltr] .q-slider__markers--h{background-image:repeating-linear-gradient(90deg,currentColor,currentColor 2px,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))}[dir=rtl] .q-slider__markers--h{background-image:repeating-linear-gradient(270deg,currentColor,currentColor 2px,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))}.q-slider__markers--h:after{height:100%;width:2px;top:0}[dir=ltr] .q-slider__markers--h:after{right:0}[dir=rtl] .q-slider__markers--h:after{left:0}[dir] .q-slider__markers--v{background-image:repeating-linear-gradient(180deg,currentColor,currentColor 2px,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0))}.q-slider__markers--v:after{width:100%;height:2px;bottom:0}[dir=ltr] .q-slider__markers--v:after{left:0}[dir=rtl] .q-slider__markers--v:after{right:0}.q-slider__marker-labels-container{position:relative;width:100%;height:100%;min-height:24px;min-width:24px}.q-slider__marker-labels{position:absolute}.q-slider__marker-labels--h-standard{top:0}.q-slider__marker-labels--h-switched{bottom:0}.q-slider__marker-labels--h-ltr{transform:translateX(-50%)}.q-slider__marker-labels--h-rtl{transform:translateX(50%)}[dir=ltr] .q-slider__marker-labels--v-standard{left:4px}[dir=ltr] .q-slider__marker-labels--v-switched,[dir=rtl] .q-slider__marker-labels--v-standard{right:4px}[dir=rtl] .q-slider__marker-labels--v-switched{left:4px}.q-slider__marker-labels--v-ltr{transform:translateY(-50%)}.q-slider__marker-labels--v-rtl{transform:translateY(50%)}.q-slider__thumb{z-index:1;outline:0;color:#1976d2;color:var(--q-color-primary);transition:transform 0.18s ease-out,fill 0.18s ease-out,stroke 0.18s ease-out}.q-slider__thumb.q-slider--focus{opacity:1!important}.q-slider__thumb--wrong-value{opacity:0}.q-slider__thumb--h{top:50%;will-change:left}.q-slider__thumb--h-ltr{transform:translate(-50%,-50%)}.q-slider__thumb--h-rtl{transform:translate(50%,-50%)}.q-slider__thumb--v{left:50%;will-change:top}.q-slider__thumb--v-ltr{transform:translate(-50%,-50%)}.q-slider__thumb--v-rtl{transform:translate(-50%,50%)}.q-slider__thumb-shape{top:0;stroke-width:3.5;stroke:currentColor;transition:transform 0.28s}[dir=ltr] .q-slider__thumb-shape{left:0}[dir=rtl] .q-slider__thumb-shape{right:0}.q-slider__thumb-shape path{stroke:currentColor;fill:currentColor}.q-slider__focus-ring{opacity:0;transition:transform 266.67ms ease-out,opacity 266.67ms ease-out,background-color 266.67ms ease-out}[dir] .q-slider__focus-ring{border-radius:50%;transition-delay:0.14s}.q-slider__pin{opacity:0;white-space:nowrap;transition:opacity 0.28s ease-out}[dir] .q-slider__pin{transition-delay:0.14s}.q-slider__pin:before{content:"";width:0;height:0;position:absolute}[dir=ltr] .q-slider__pin--h:before{border-left:6px solid transparent;border-right:6px solid transparent;left:50%;transform:translateX(-50%)}[dir=rtl] .q-slider__pin--h:before{border-right:6px solid transparent;border-left:6px solid transparent;right:50%;transform:translateX(50%)}.q-slider__pin--h-standard{bottom:100%}.q-slider__pin--h-standard:before{bottom:2px}[dir] .q-slider__pin--h-standard:before{border-top:6px solid currentColor}.q-slider__pin--h-switched{top:100%}.q-slider__pin--h-switched:before{top:2px}[dir] .q-slider__pin--h-switched:before{border-bottom:6px solid currentColor}.q-slider__pin--v{top:0}.q-slider__pin--v:before{top:50%}[dir] .q-slider__pin--v:before{transform:translateY(-50%);border-top:6px solid transparent;border-bottom:6px solid transparent}[dir=ltr] .q-slider__pin--v-standard{left:100%}[dir=rtl] .q-slider__pin--v-standard{right:100%}[dir=ltr] .q-slider__pin--v-standard:before{left:2px;border-right:6px solid currentColor}[dir=rtl] .q-slider__pin--v-standard:before{right:2px;border-left:6px solid currentColor}[dir=ltr] .q-slider__pin--v-switched{right:100%}[dir=rtl] .q-slider__pin--v-switched{left:100%}[dir=ltr] .q-slider__pin--v-switched:before{right:2px;border-left:6px solid currentColor}[dir=rtl] .q-slider__pin--v-switched:before{left:2px;border-right:6px solid currentColor}.q-slider__label{z-index:1;white-space:nowrap;position:absolute}[dir=ltr] .q-slider__label--h{left:50%;transform:translateX(-50%)}[dir=rtl] .q-slider__label--h{right:50%;transform:translateX(50%)}.q-slider__label--h-standard{bottom:7px}.q-slider__label--h-switched{top:7px}.q-slider__label--v{top:50%}[dir] .q-slider__label--v{transform:translateY(-50%)}[dir=ltr] .q-slider__label--v-standard{left:7px}[dir=ltr] .q-slider__label--v-switched,[dir=rtl] .q-slider__label--v-standard{right:7px}[dir=rtl] .q-slider__label--v-switched{left:7px}.q-slider__text-container{min-height:25px;position:relative}[dir] .q-slider__text-container{padding:2px 8px;border-radius:4px;background:currentColor;text-align:center}.q-slider__text{color:#fff;color:var(--q-color-dark-text);font-size:12px}.q-slider--no-value .q-slider__inner,.q-slider--no-value .q-slider__selection,.q-slider--no-value .q-slider__thumb{opacity:0}.q-slider--focus .q-slider__focus-ring,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__focus-ring{opacity:0.25}[dir] .q-slider--focus .q-slider__focus-ring,[dir] body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__focus-ring{background:currentColor;transform:scale3d(1.55,1.55,1)}.q-slider--focus .q-slider__inner,.q-slider--focus .q-slider__selection,.q-slider--focus .q-slider__thumb,.q-slider--no-value:focus-within .q-slider__inner,.q-slider--no-value:focus-within .q-slider__selection,.q-slider--no-value:focus-within .q-slider__thumb,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__inner,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__selection,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__thumb{opacity:1}[dir=ltr] .q-slider--inactive .q-slider__thumb--h{transition:left 0.28s,right 0.28s}[dir=rtl] .q-slider--inactive .q-slider__thumb--h{transition:right 0.28s,left 0.28s}.q-slider--inactive .q-slider__thumb--v{transition:top 0.28s,bottom 0.28s}[dir=ltr] .q-slider--inactive .q-slider__selection{transition:width 0.28s,left 0.28s,right 0.28s,height 0.28s,top 0.28s,bottom 0.28s}[dir=rtl] .q-slider--inactive .q-slider__selection{transition:width 0.28s,right 0.28s,left 0.28s,height 0.28s,top 0.28s,bottom 0.28s}.q-slider--inactive .q-slider__text-container{transition:transform 0.28s}[dir] .q-slider--active{cursor:-webkit-grabbing;cursor:grabbing}[dir] .q-slider--active .q-slider__thumb-shape{transform:scale(1.5)}[dir] .q-slider--active.q-slider--label .q-slider__thumb-shape,[dir] .q-slider--active .q-slider__focus-ring{transform:scale(0)!important}.q-slider--label.q-slider--active .q-slider__pin,.q-slider--label .q-slider--focus .q-slider__pin,.q-slider--label.q-slider--label-always .q-slider__pin,body.desktop .q-slider.q-slider--enabled .q-slider__track-container:hover .q-slider__pin{opacity:1}[dir] .q-slider--dark .q-slider__inner,[dir] .q-slider--dark .q-slider__track{background:hsla(0,0%,100%,0.1)}.q-slider--dark .q-slider__markers{color:hsla(0,0%,100%,0.3)}[dir] .q-slider--dense .q-slider__track-container--h{padding:6px 0}[dir] .q-slider--dense .q-slider__track-container--v{padding:0 6px}@media (prefers-color-scheme:dark){[dir] .q-slider--dark-auto .q-slider__inner,[dir] .q-slider--dark-auto .q-slider__track{background:hsla(0,0%,100%,0.1)}.q-slider--dark-auto .q-slider__markers{color:hsla(0,0%,100%,0.3)}}.q-space{flex-grow:1!important}.q-spinner{vertical-align:middle}[dir] .q-spinner-mat{transform-origin:center center}[dir=ltr] .q-spinner-mat{-webkit-animation:q-spin-ltr 2s linear infinite;animation:q-spin-ltr 2s linear infinite}[dir=rtl] .q-spinner-mat{-webkit-animation:q-spin-rtl 2s linear infinite;animation:q-spin-rtl 2s linear infinite}.q-spinner-mat .path{stroke-dasharray:1,200;stroke-dashoffset:0}[dir=ltr] .q-spinner-mat .path{-webkit-animation:q-mat-dash-ltr 1.5s ease-in-out infinite;animation:q-mat-dash-ltr 1.5s ease-in-out infinite}[dir=rtl] .q-spinner-mat .path{-webkit-animation:q-mat-dash-rtl 1.5s ease-in-out infinite;animation:q-mat-dash-rtl 1.5s ease-in-out infinite}.q-splitter__panel{position:relative;z-index:0}.q-splitter__panel>.q-splitter{width:100%;height:100%}.q-splitter__separator{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;z-index:1}[dir] .q-splitter__separator{background-color:rgba(0,0,0,0.12)}.q-splitter__separator-area>*{position:absolute;top:50%}[dir=ltr] .q-splitter__separator-area>*{left:50%;transform:translate(-50%,-50%)}[dir=rtl] .q-splitter__separator-area>*{right:50%;transform:translate(50%,-50%)}[dir] .q-splitter--dark .q-splitter__separator{background-color:hsla(0,0%,100%,0.28)}.q-splitter--vertical>.q-splitter__panel{height:100%}[dir] .q-splitter--vertical.q-splitter--active{cursor:col-resize}.q-splitter--vertical>.q-splitter__separator{width:1px}[dir=ltr] .q-splitter--vertical>.q-splitter__separator>div,[dir=rtl] .q-splitter--vertical>.q-splitter__separator>div{left:-6px;right:-6px}[dir] .q-splitter--vertical.q-splitter--workable>.q-splitter__separator{cursor:col-resize}.q-splitter--horizontal>.q-splitter__panel{width:100%}[dir] .q-splitter--horizontal.q-splitter--active{cursor:row-resize}.q-splitter--horizontal>.q-splitter__separator{height:1px}.q-splitter--horizontal>.q-splitter__separator>div{top:-6px;bottom:-6px}[dir] .q-splitter--horizontal.q-splitter--workable>.q-splitter__separator{cursor:row-resize}.q-splitter__after,.q-splitter__before{overflow:auto}@media (prefers-color-scheme:dark){[dir] .q-splitter--dark-auto .q-splitter__separator{background-color:hsla(0,0%,100%,0.28)}}[dir] .q-stepper{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px}.q-stepper__title{font-size:14px;line-height:18px;letter-spacing:0.1px}.q-stepper__caption{font-size:12px;line-height:14px}.q-stepper__dot{contain:layout;font-size:14px;width:24px;min-width:24px;height:24px}[dir] .q-stepper__dot{border-radius:50%;background:currentColor}[dir=ltr] .q-stepper__dot{margin-right:8px}[dir=rtl] .q-stepper__dot{margin-left:8px}.q-stepper__dot span{color:#fff;color:var(--q-color-dark-text)}.q-stepper__tab{font-size:14px;color:#9e9e9e;flex-direction:row}[dir] .q-stepper__tab{padding:8px 24px}.q-stepper__tab--navigation{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[dir] .q-stepper__tab--navigation{cursor:pointer}.q-stepper__tab--active,.q-stepper__tab--done{color:#1976d2;color:var(--q-color-primary)}[dir] .q-stepper__tab--active .q-stepper__dot,[dir] .q-stepper__tab--active .q-stepper__label,[dir] .q-stepper__tab--done .q-stepper__dot,[dir] .q-stepper__tab--done .q-stepper__label{text-shadow:0 0 0 currentColor}[dir] .q-stepper__tab--disabled .q-stepper__dot{background:rgba(0,0,0,0.22)}.q-stepper__tab--disabled .q-stepper__label{color:rgba(0,0,0,0.32)}.q-stepper__tab--error{color:#c10015;color:var(--q-color-negative)}[dir] .q-stepper__tab--error-with-icon .q-stepper__dot{background:transparent!important}.q-stepper__tab--error-with-icon .q-stepper__dot span{color:currentColor}.q-stepper__tab--error-with-icon .q-stepper__dot .q-icon{font-size:24px}[dir=ltr] .q-stepper__header,[dir=rtl] .q-stepper__header{border-top-left-radius:inherit;border-top-right-radius:inherit}[dir] .q-stepper__header--border{border-bottom:1px solid rgba(0,0,0,0.12)}.q-stepper__header--standard-labels .q-stepper__tab{min-height:72px;justify-content:center}.q-stepper__header--standard-labels .q-stepper__tab:first-child{justify-content:flex-start}.q-stepper__header--standard-labels .q-stepper__tab:last-child{justify-content:flex-end}.q-stepper__header--standard-labels .q-stepper__tab:only-child{justify-content:center}.q-stepper__header--standard-labels .q-stepper__dot:after{display:none}.q-stepper__header--alternative-labels .q-stepper__tab{min-height:104px;flex-direction:column;justify-content:flex-start}[dir] .q-stepper__header--alternative-labels .q-stepper__tab{padding:24px 32px}[dir=ltr] .q-stepper__header--alternative-labels .q-stepper__dot{margin-right:0}[dir=rtl] .q-stepper__header--alternative-labels .q-stepper__dot{margin-left:0}[dir] .q-stepper__header--alternative-labels .q-stepper__label{margin-top:8px;text-align:center}.q-stepper__header--alternative-labels .q-stepper__label:after,.q-stepper__header--alternative-labels .q-stepper__label:before{display:none}.q-stepper__header--contracted,.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab{min-height:72px}.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:first-child{align-items:flex-start}.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:last-child{align-items:flex-end}[dir] .q-stepper__header--contracted .q-stepper__tab{padding:24px 0}[dir=ltr] .q-stepper__header--contracted .q-stepper__tab:first-child .q-stepper__dot{transform:translateX(24px)}[dir=ltr] .q-stepper__header--contracted .q-stepper__tab:last-child .q-stepper__dot,[dir=rtl] .q-stepper__header--contracted .q-stepper__tab:first-child .q-stepper__dot{transform:translateX(-24px)}[dir=rtl] .q-stepper__header--contracted .q-stepper__tab:last-child .q-stepper__dot{transform:translateX(24px)}.q-stepper__header--contracted .q-stepper__tab:not(:last-child) .q-stepper__dot:after{display:block!important}[dir] .q-stepper__header--contracted .q-stepper__dot{margin:0}.q-stepper__header--contracted .q-stepper__label{display:none}[dir] .q-stepper__nav{padding-top:24px}[dir] .q-stepper--bordered{border:1px solid rgba(0,0,0,0.12)}[dir] .q-stepper--horizontal .q-stepper__step-inner{padding:24px}[dir=ltr] .q-stepper--horizontal .q-stepper__tab:first-child{border-top-left-radius:inherit}[dir=ltr] .q-stepper--horizontal .q-stepper__tab:last-child,[dir=rtl] .q-stepper--horizontal .q-stepper__tab:first-child{border-top-right-radius:inherit}[dir=rtl] .q-stepper--horizontal .q-stepper__tab:last-child{border-top-left-radius:inherit}.q-stepper--horizontal .q-stepper__tab:first-child .q-stepper__dot:before,.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__dot:after,.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__label:after{display:none}.q-stepper--horizontal .q-stepper__tab{overflow:hidden}.q-stepper--horizontal .q-stepper__line{contain:layout}.q-stepper--horizontal .q-stepper__line:after,.q-stepper--horizontal .q-stepper__line:before{position:absolute;top:50%;height:1px;width:100vw}[dir] .q-stepper--horizontal .q-stepper__line:after,[dir] .q-stepper--horizontal .q-stepper__line:before{background:rgba(0,0,0,0.12)}.q-stepper--horizontal .q-stepper__dot:after,.q-stepper--horizontal .q-stepper__label:after{content:""}[dir=ltr] .q-stepper--horizontal .q-stepper__dot:after,[dir=ltr] .q-stepper--horizontal .q-stepper__label:after{left:100%;margin-left:8px}[dir=rtl] .q-stepper--horizontal .q-stepper__dot:after,[dir=rtl] .q-stepper--horizontal .q-stepper__label:after{right:100%;margin-right:8px}.q-stepper--horizontal .q-stepper__dot:before{content:""}[dir=ltr] .q-stepper--horizontal .q-stepper__dot:before{right:100%;margin-right:8px}[dir=rtl] .q-stepper--horizontal .q-stepper__dot:before{left:100%;margin-left:8px}[dir] .q-stepper--horizontal>.q-stepper__nav{padding:0 24px 24px}[dir] .q-stepper--vertical{padding:16px 0}[dir] .q-stepper--vertical .q-stepper__tab{padding:12px 24px}.q-stepper--vertical .q-stepper__title{line-height:18px}[dir=ltr] .q-stepper--vertical .q-stepper__step-inner{padding:0 24px 32px 60px}[dir=rtl] .q-stepper--vertical .q-stepper__step-inner{padding:0 60px 32px 24px}[dir] .q-stepper--vertical>.q-stepper__nav{padding:24px 24px 0}.q-stepper--vertical .q-stepper__step{overflow:hidden}[dir=ltr] .q-stepper--vertical .q-stepper__dot{margin-right:12px}[dir=rtl] .q-stepper--vertical .q-stepper__dot{margin-left:12px}.q-stepper--vertical .q-stepper__dot:after,.q-stepper--vertical .q-stepper__dot:before{content:"";position:absolute;width:1px;height:99999px}[dir] .q-stepper--vertical .q-stepper__dot:after,[dir] .q-stepper--vertical .q-stepper__dot:before{background:rgba(0,0,0,0.12)}[dir=ltr] .q-stepper--vertical .q-stepper__dot:after,[dir=ltr] .q-stepper--vertical .q-stepper__dot:before{left:50%}[dir=rtl] .q-stepper--vertical .q-stepper__dot:after,[dir=rtl] .q-stepper--vertical .q-stepper__dot:before{right:50%}.q-stepper--vertical .q-stepper__dot:before{bottom:100%}[dir] .q-stepper--vertical .q-stepper__dot:before{margin-bottom:8px}.q-stepper--vertical .q-stepper__dot:after{top:100%}[dir] .q-stepper--vertical .q-stepper__dot:after{margin-top:8px}.q-stepper--vertical .q-stepper__step:first-child .q-stepper__dot:before,.q-stepper--vertical .q-stepper__step:last-child .q-stepper__dot:after{display:none}[dir] .q-stepper--vertical .q-stepper__step:last-child .q-stepper__step-inner{padding-bottom:8px}.q-stepper--dark .q-stepper__dot span{color:#000;color:var(--q-color-light-text)}[dir] .q-stepper--dark.q-stepper--bordered,[dir] .q-stepper--dark .q-stepper__header--border{border-color:hsla(0,0%,100%,0.28)}[dir] .q-stepper--dark.q-stepper--horizontal .q-stepper__line:after,[dir] .q-stepper--dark.q-stepper--horizontal .q-stepper__line:before,[dir] .q-stepper--dark.q-stepper--vertical .q-stepper__dot:after,[dir] .q-stepper--dark.q-stepper--vertical .q-stepper__dot:before{background:hsla(0,0%,100%,0.28)}.q-stepper--dark .q-stepper__tab--disabled{color:hsla(0,0%,100%,0.28)}[dir] .q-stepper--dark .q-stepper__tab--disabled .q-stepper__dot{background:hsla(0,0%,100%,0.28)}.q-stepper--dark .q-stepper__tab--disabled .q-stepper__label{color:hsla(0,0%,100%,0.54)}@media (prefers-color-scheme:dark){.q-stepper--dark-auto .q-stepper__dot span{color:#000;color:var(--q-color-light-text)}[dir] .q-stepper--dark-auto.q-stepper--bordered,[dir] .q-stepper--dark-auto .q-stepper__header--border{border-color:hsla(0,0%,100%,0.28)}[dir] .q-stepper--dark-auto.q-stepper--horizontal .q-stepper__line:after,[dir] .q-stepper--dark-auto.q-stepper--horizontal .q-stepper__line:before,[dir] .q-stepper--dark-auto.q-stepper--vertical .q-stepper__dot:after,[dir] .q-stepper--dark-auto.q-stepper--vertical .q-stepper__dot:before{background:hsla(0,0%,100%,0.28)}.q-stepper--dark-auto .q-stepper__tab--disabled{color:hsla(0,0%,100%,0.28)}[dir] .q-stepper--dark-auto .q-stepper__tab--disabled .q-stepper__dot{background:hsla(0,0%,100%,0.28)}.q-stepper--dark-auto .q-stepper__tab--disabled .q-stepper__label{color:hsla(0,0%,100%,0.54)}}[dir] .q-tab-panel{padding:16px}.q-markup-table{overflow:auto}.q-table{width:100%;max-width:100%;border-collapse:separate;border-spacing:0}.q-table tbody td,.q-table thead tr{height:48px}.q-table th{font-weight:500;font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[dir] .q-table th.sortable{cursor:pointer}.q-table th.sortable:hover .q-table__sort-icon{opacity:0.64}.q-table th.sorted .q-table__sort-icon{opacity:0.86!important}[dir=ltr] .q-table th.sort-desc .q-table__sort-icon{transform:rotate(180deg)}[dir=rtl] .q-table th.sort-desc .q-table__sort-icon{transform:rotate(-180deg)}[dir] .q-table td,[dir] .q-table th{padding:7px 16px;background-color:inherit}[dir] .q-table td,[dir] .q-table th,[dir] .q-table thead{border-style:solid;border-width:0}.q-table tbody td{font-size:13px}.q-table__card{color:#000;color:var(--q-color-light-text)}[dir] .q-table__card{border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}.q-table__card .q-table__middle{flex:1 1 auto}.q-table__card .q-table__bottom,.q-table__card .q-table__top{flex:0 0 auto}.q-table__container{position:relative}.q-table__container.fullscreen{max-height:100%}[dir=ltr] .q-table__container>div:first-child,[dir=rtl] .q-table__container>div:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}[dir=ltr] .q-table__container>div:last-child,[dir=rtl] .q-table__container>div:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}[dir] .q-table__container>.q-inner-loading{border-radius:inherit!important}[dir] .q-table__top{padding:12px 16px}.q-table__top .q-table__control{flex-wrap:wrap}.q-table__title{font-size:20px;letter-spacing:0.005em;font-weight:400}.q-table__separator{min-width:8px!important}.q-table__progress{height:0!important}[dir] .q-table__progress th{padding:0!important;border:0!important}.q-table__progress .q-linear-progress{position:absolute;bottom:0}.q-table__middle{max-width:100%}.q-table__bottom{min-height:50px;font-size:12px}[dir=ltr] .q-table__bottom{padding:4px 14px 4px 16px}[dir=rtl] .q-table__bottom{padding:4px 16px 4px 14px}.q-table__bottom .q-table__control{min-height:24px}.q-table__bottom-nodata-icon{font-size:200%}[dir=ltr] .q-table__bottom-nodata-icon{margin-right:8px}[dir=rtl] .q-table__bottom-nodata-icon{margin-left:8px}[dir=ltr] .q-table__bottom-item{margin-right:16px}[dir=rtl] .q-table__bottom-item{margin-left:16px}.q-table__control{display:flex;align-items:center}.q-table__sort-icon{transition:transform 0.3s cubic-bezier(0.25,0.8,0.5,1);opacity:0;font-size:120%}[dir=ltr] .q-table__sort-icon--center,[dir=ltr] .q-table__sort-icon--left{margin-left:4px}[dir=ltr] .q-table__sort-icon--right,[dir=rtl] .q-table__sort-icon--center,[dir=rtl] .q-table__sort-icon--left{margin-right:4px}[dir=rtl] .q-table__sort-icon--right{margin-left:4px}.q-table--col-auto-width{width:1px}[dir] .q-table--flat{box-shadow:none}[dir] .q-table--bordered{border:1px solid rgba(0,0,0,0.12)}[dir] .q-table--square{border-radius:0}.q-table__linear-progress{height:2px}.q-table--no-wrap td,.q-table--no-wrap th{white-space:nowrap}[dir] .q-table--grid{box-shadow:none;border-radius:4px}[dir] .q-table--grid .q-table__top{padding-bottom:4px}.q-table--grid .q-table__middle{min-height:2px}[dir] .q-table--grid .q-table__middle{margin-bottom:4px}[dir] .q-table--grid .q-table__middle thead,[dir] .q-table--grid .q-table__middle thead th{border:0!important}.q-table--grid .q-table__linear-progress{bottom:0}[dir] .q-table--grid .q-table__bottom{border-top:0}.q-table--grid .q-table__grid-content{flex:1 1 auto}[dir] .q-table--grid.fullscreen{background:inherit}.q-table__grid-item-card{vertical-align:top}[dir] .q-table__grid-item-card{padding:12px}[dir] .q-table__grid-item-card .q-separator{margin:12px 0}[dir] .q-table__grid-item-row+.q-table__grid-item-row{margin-top:8px}.q-table__grid-item-title{opacity:0.54;font-weight:500;font-size:12px}.q-table__grid-item-value{font-size:13px}.q-table__grid-item{transition:transform 0.3s cubic-bezier(0.25,0.8,0.5,1)}[dir] .q-table__grid-item{padding:4px}[dir] .q-table__grid-item--selected{transform:scale(0.95)}[dir] .q-table--cell-separator tbody tr:not(:last-child)>td,[dir] .q-table--cell-separator thead th,[dir] .q-table--horizontal-separator tbody tr:not(:last-child)>td,[dir] .q-table--horizontal-separator thead th{border-bottom-width:1px}[dir=ltr] .q-table--cell-separator td,[dir=ltr] .q-table--cell-separator th,[dir=ltr] .q-table--vertical-separator td,[dir=ltr] .q-table--vertical-separator th{border-left-width:1px}[dir=rtl] .q-table--cell-separator td,[dir=rtl] .q-table--cell-separator th,[dir=rtl] .q-table--vertical-separator td,[dir=rtl] .q-table--vertical-separator th{border-right-width:1px}[dir] .q-table--cell-separator.q-table--loading tr:nth-last-child(2) th,[dir] .q-table--cell-separator thead tr:last-child th,[dir] .q-table--vertical-separator.q-table--loading tr:nth-last-child(2) th,[dir] .q-table--vertical-separator thead tr:last-child th{border-bottom-width:1px}[dir=ltr] .q-table--cell-separator td:first-child,[dir=ltr] .q-table--cell-separator th:first-child,[dir=ltr] .q-table--vertical-separator td:first-child,[dir=ltr] .q-table--vertical-separator th:first-child{border-left:0}[dir=rtl] .q-table--cell-separator td:first-child,[dir=rtl] .q-table--cell-separator th:first-child,[dir=rtl] .q-table--vertical-separator td:first-child,[dir=rtl] .q-table--vertical-separator th:first-child{border-right:0}[dir] .q-table--cell-separator .q-table__top,[dir] .q-table--vertical-separator .q-table__top{border-bottom:1px solid rgba(0,0,0,0.12)}[dir] .q-table--dense .q-table__top{padding:6px 16px}.q-table--dense .q-table__bottom{min-height:33px}.q-table--dense .q-table__sort-icon{font-size:110%}[dir] .q-table--dense .q-table td,[dir] .q-table--dense .q-table th{padding:4px 8px}.q-table--dense .q-table tbody td,.q-table--dense .q-table tbody tr,.q-table--dense .q-table thead tr{height:28px}[dir=ltr] .q-table--dense .q-table td:first-child,[dir=ltr] .q-table--dense .q-table th:first-child{padding-left:16px}[dir=ltr] .q-table--dense .q-table td:last-child,[dir=ltr] .q-table--dense .q-table th:last-child,[dir=rtl] .q-table--dense .q-table td:first-child,[dir=rtl] .q-table--dense .q-table th:first-child{padding-right:16px}[dir=rtl] .q-table--dense .q-table td:last-child,[dir=rtl] .q-table--dense .q-table th:last-child{padding-left:16px}[dir=ltr] .q-table--dense .q-table__bottom-item{margin-right:8px}[dir=rtl] .q-table--dense .q-table__bottom-item{margin-left:8px}.q-table--dense .q-table__select .q-field__control,.q-table--dense .q-table__select .q-field__native{min-height:24px}[dir] .q-table--dense .q-table__select .q-field__control,[dir] .q-table--dense .q-table__select .q-field__native{padding:0}.q-table--dense .q-table__select .q-field__marginal{height:24px}[dir] .q-table__bottom{border-top:1px solid rgba(0,0,0,0.12)}[dir] .q-table td,[dir] .q-table th,[dir] .q-table thead,[dir] .q-table tr{border-color:rgba(0,0,0,0.12)}.q-table tbody td{position:relative}.q-table tbody td:after,.q-table tbody td:before{position:absolute;top:0;bottom:0;pointer-events:none}[dir=ltr] .q-table tbody td:after,[dir=ltr] .q-table tbody td:before,[dir=rtl] .q-table tbody td:after,[dir=rtl] .q-table tbody td:before{left:0;right:0}[dir] .q-table tbody td:before{background:rgba(0,0,0,0.03)}[dir] .q-table tbody td:after{background:rgba(0,0,0,0.06)}.q-table tbody tr.selected td:after,body.desktop .q-table>tbody>tr:not(.q-tr--no-hover):hover>td:not(.q-td--no-hover):before{content:""}[dir] .q-table--dark,[dir] .q-table--dark .q-table__bottom,[dir] .q-table--dark td,[dir] .q-table--dark th,[dir] .q-table--dark thead,[dir] .q-table--dark tr,[dir] .q-table__card--dark{border-color:hsla(0,0%,100%,0.28)}[dir] .q-table--dark tbody td:before{background:hsla(0,0%,100%,0.07)}[dir] .q-table--dark tbody td:after{background:hsla(0,0%,100%,0.1)}[dir] .q-table--dark.q-table--cell-separator .q-table__top,[dir] .q-table--dark.q-table--vertical-separator .q-table__top{border-color:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){[dir] .q-table--dark-auto,[dir] .q-table--dark-auto .q-table__bottom,[dir] .q-table--dark-auto td,[dir] .q-table--dark-auto th,[dir] .q-table--dark-auto thead,[dir] .q-table--dark-auto tr,[dir] .q-table__card--dark-auto{border-color:hsla(0,0%,100%,0.28)}[dir] .q-table--dark-auto tbody td:before{background:hsla(0,0%,100%,0.07)}[dir] .q-table--dark-auto tbody td:after{background:hsla(0,0%,100%,0.1)}[dir] .q-table--dark-auto.q-table--cell-separator .q-table__top,[dir] .q-table--dark-auto.q-table--vertical-separator .q-table__top{border-color:hsla(0,0%,100%,0.28)}}.q-tab{min-height:48px;transition:color 0.3s,background-color 0.3s;text-transform:uppercase;white-space:nowrap;color:inherit;text-decoration:none}[dir] .q-tab{padding:0 16px}.q-tab--full{min-height:72px}.q-tab--no-caps{text-transform:none}.q-tab__content{height:inherit;min-width:40px}[dir] .q-tab__content{padding:4px 0}[dir=ltr] .q-tab__content--inline .q-tab__icon+.q-tab__label{padding-left:8px}[dir=rtl] .q-tab__content--inline .q-tab__icon+.q-tab__label{padding-right:8px}.q-tab__content .q-chip--floating{top:0}[dir=ltr] .q-tab__content .q-chip--floating{right:-16px}[dir=rtl] .q-tab__content .q-chip--floating{left:-16px}.q-tab__icon{width:24px;height:24px;font-size:24px}.q-tab__label{font-size:14px;line-height:1.715em;font-weight:500}.q-tab .q-badge{top:3px}[dir=ltr] .q-tab .q-badge{right:-12px}[dir=rtl] .q-tab .q-badge{left:-12px}.q-tab__alert,.q-tab__alert-icon{position:absolute}.q-tab__alert{top:7px;height:10px;width:10px}[dir] .q-tab__alert{border-radius:50%;background:currentColor}[dir=ltr] .q-tab__alert{right:-9px}[dir=rtl] .q-tab__alert{left:-9px}.q-tab__alert-icon{top:2px;font-size:18px}[dir=ltr] .q-tab__alert-icon{right:-12px}[dir=rtl] .q-tab__alert-icon{left:-12px}.q-tab__indicator{opacity:0;height:2px}[dir] .q-tab__indicator{background:currentColor}.q-tab--active .q-tab__indicator{opacity:1;transform-origin:left}.q-tab--inactive{opacity:0.85}.q-tabs{position:relative;transition:color 0.3s,background-color 0.3s}[dir=ltr] .q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--horizontal,[dir=rtl] .q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--horizontal{padding-left:36px;padding-right:36px}[dir] .q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--vertical{padding-top:36px;padding-bottom:36px}.q-tabs--scrollable.q-tabs__arrows--outside .q-tabs__arrow--faded{opacity:0.3;pointer-events:none}.q-tabs--not-scrollable .q-tabs__arrow,.q-tabs--scrollable.q-tabs__arrows--inside .q-tabs__arrow--faded{display:none}[dir] .q-tabs--not-scrollable .q-tabs__content{border-radius:inherit}.q-tabs__arrow{font-size:32px;min-width:36px;transition:opacity 0.3s}[dir] .q-tabs__arrow{cursor:pointer;text-shadow:0 0 3px #fff,0 0 1px #fff,0 0 1px #000}.q-tabs__content{overflow:hidden;flex:1 1 auto}.q-tabs__content--align-center{justify-content:center}.q-tabs__content--align-right{justify-content:flex-end}.q-tabs__content--align-justify .q-tab{flex:1 1 auto}.q-tabs__offset{display:none}.q-tabs--horizontal .q-tabs__arrow{height:100%}.q-tabs--horizontal .q-tabs__arrow--start{top:0;left:0;bottom:0}.q-tabs--horizontal .q-tabs__arrow--end{top:0;right:0;bottom:0}.q-tabs--vertical,.q-tabs--vertical .q-tabs__content{display:block!important;height:100%}.q-tabs--vertical .q-tabs__arrow{width:100%;height:36px}[dir] .q-tabs--vertical .q-tabs__arrow{text-align:center}.q-tabs--vertical .q-tabs__arrow--start{top:0}[dir=ltr] .q-tabs--vertical .q-tabs__arrow--start,[dir=rtl] .q-tabs--vertical .q-tabs__arrow--start{left:0;right:0}.q-tabs--vertical .q-tabs__arrow--end{bottom:0}[dir=ltr] .q-tabs--vertical .q-tabs__arrow--end,[dir=rtl] .q-tabs--vertical .q-tabs__arrow--end{left:0;right:0}[dir] .q-tabs--vertical .q-tab{padding:0 8px}.q-tabs--vertical .q-tab__indicator{height:unset;width:2px}.q-tabs--vertical.q-tabs--not-scrollable .q-tabs__content{height:100%}.q-tabs--vertical.q-tabs--dense .q-tab__content{min-width:24px}.q-tabs--dense .q-tab{min-height:36px}.q-tabs--dense .q-tab--full{min-height:52px}.q-time{outline:0;width:290px;min-width:290px;max-width:100%}[dir] .q-time{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px;background:#fff}[dir] .q-time--bordered{border:1px solid rgba(0,0,0,0.12)}.q-time__header{color:#fff;color:var(--q-color-dark-text);font-weight:300}[dir] .q-time__header{background-color:#1976d2;background-color:var(--q-color-primary);padding:16px}[dir=ltr] .q-time__header{border-top-left-radius:inherit}[dir=rtl] .q-time__header{border-top-right-radius:inherit}[dir] .q-time__actions{padding:0 16px 16px}.q-time__header-label{font-size:28px;line-height:1;letter-spacing:-0.00833em}[dir=ltr] .q-time__header-label>div+div{margin-left:4px}[dir=rtl] .q-time__header-label>div+div{margin-right:4px}.q-time__link{opacity:0.56;outline:0;transition:opacity 0.3s ease-out}.q-time__link--active,.q-time__link:focus,.q-time__link:hover{opacity:1}.q-time__header-ampm{font-size:16px;letter-spacing:0.1em}[dir] .q-time__content{padding:16px}.q-time__content:before{content:"";display:block}[dir] .q-time__content:before{padding-bottom:100%}[dir] .q-time__container-parent{padding:16px}[dir] .q-time__container-child{border-radius:50%;background:rgba(0,0,0,0.12)}.q-time__clock{width:100%;height:100%;max-width:100%;max-height:100%;font-size:14px}[dir] .q-time__clock{padding:24px}.q-time__clock-circle{position:relative}.q-time__clock-center{height:6px;width:6px;min-height:0}[dir] .q-time__clock-center{margin:auto;border-radius:50%;background:currentColor}.q-time__clock-pointer{width:2px;height:50%;transform-origin:0 0;min-height:0;position:absolute;bottom:0;color:#1976d2;color:var(--q-color-primary)}[dir] .q-time__clock-pointer{background:currentColor}[dir=ltr] .q-time__clock-pointer{left:50%;right:0;transform:translateX(-50%)}[dir=rtl] .q-time__clock-pointer{right:50%;left:0;transform:translateX(50%)}.q-time__clock-pointer:after,.q-time__clock-pointer:before{content:"";position:absolute}[dir] .q-time__clock-pointer:after,[dir] .q-time__clock-pointer:before{border-radius:50%;background:currentColor}[dir=ltr] .q-time__clock-pointer:after,[dir=ltr] .q-time__clock-pointer:before{left:50%;transform:translateX(-50%)}[dir=rtl] .q-time__clock-pointer:after,[dir=rtl] .q-time__clock-pointer:before{right:50%;transform:translateX(50%)}.q-time__clock-pointer:before{bottom:-4px;width:8px;height:8px}.q-time__clock-pointer:after{top:-3px;height:6px;width:6px}.q-time__clock-position{position:absolute;min-height:32px;width:32px;height:32px;font-size:12px;line-height:32px;transform:translate(-50%,-50%)}[dir] .q-time__clock-position{margin:0;padding:0;border-radius:50%}.q-time__clock-position--disabled{opacity:0.4}.q-time__clock-position--active{color:#fff;color:var(--q-color-dark-text)}[dir] .q-time__clock-position--active{background-color:#1976d2;background-color:var(--q-color-primary)}.q-time__clock-pos-0{top:0%;left:50%}.q-time__clock-pos-1{top:6.7%;left:75%}.q-time__clock-pos-2{top:25%;left:93.3%}.q-time__clock-pos-3{top:50%;left:100%}.q-time__clock-pos-4{top:75%;left:93.3%}.q-time__clock-pos-5{top:93.3%;left:75%}.q-time__clock-pos-6{top:100%;left:50%}.q-time__clock-pos-7{top:93.3%;left:25%}.q-time__clock-pos-8{top:75%;left:6.7%}.q-time__clock-pos-9{top:50%;left:0%}.q-time__clock-pos-10{top:25%;left:6.7%}.q-time__clock-pos-11{top:6.7%;left:25%}.q-time__clock-pos-12{top:15%;left:50%}.q-time__clock-pos-13{top:19.69%;left:67.5%}.q-time__clock-pos-14{top:32.5%;left:80.31%}.q-time__clock-pos-15{top:50%;left:85%}.q-time__clock-pos-16{top:67.5%;left:80.31%}.q-time__clock-pos-17{top:80.31%;left:67.5%}.q-time__clock-pos-18{top:85%;left:50%}.q-time__clock-pos-19{top:80.31%;left:32.5%}.q-time__clock-pos-20{top:67.5%;left:19.69%}.q-time__clock-pos-21{top:50%;left:15%}.q-time__clock-pos-22{top:32.5%;left:19.69%}.q-time__clock-pos-23{top:19.69%;left:32.5%}.q-time__now-button{color:#fff;color:var(--q-color-dark-text);top:12px}[dir] .q-time__now-button{background-color:#1976d2;background-color:var(--q-color-primary)}[dir=ltr] .q-time__now-button{right:12px}[dir=rtl] .q-time__now-button{left:12px}.q-time--readonly .q-time__content,.q-time--readonly .q-time__header-ampm,.q-time.disabled .q-time__content,.q-time.disabled .q-time__header-ampm{pointer-events:none}.q-time--portrait{display:inline-flex;flex-direction:column}.q-time--portrait .q-time__header{min-height:86px}[dir=ltr] .q-time--portrait .q-time__header{border-top-right-radius:inherit}[dir=rtl] .q-time--portrait .q-time__header{border-top-left-radius:inherit}[dir=ltr] .q-time--portrait .q-time__header-ampm{margin-left:12px}[dir=rtl] .q-time--portrait .q-time__header-ampm{margin-right:12px}[dir] .q-time--portrait.q-time--bordered .q-time__content{margin:1px 0}.q-time--landscape{display:inline-flex;align-items:stretch;min-width:420px}.q-time--landscape>div{display:flex;flex-direction:column;justify-content:center}.q-time--landscape .q-time__header{min-width:156px}[dir=ltr] .q-time--landscape .q-time__header{border-bottom-left-radius:inherit}[dir=rtl] .q-time--landscape .q-time__header{border-bottom-right-radius:inherit}[dir] .q-time--landscape .q-time__header-ampm{margin-top:12px}[dir] .q-time--dark{border-color:hsla(0,0%,100%,0.28)}@media (prefers-color-scheme:dark){[dir] .q-time--dark-auto{border-color:hsla(0,0%,100%,0.28)}}.q-timeline{width:100%;list-style:none}[dir] .q-timeline{padding:0}.q-timeline h6{line-height:inherit}.q-timeline--dark{color:#fff;color:var(--q-color-dark-text)}.q-timeline--dark .q-timeline__subtitle{opacity:0.7}[dir] .q-timeline__content{padding-bottom:24px}[dir] .q-timeline__title{margin-top:0;margin-bottom:16px}.q-timeline__subtitle{font-size:12px;opacity:0.6;text-transform:uppercase;letter-spacing:1px;font-weight:700}[dir] .q-timeline__subtitle{margin-bottom:8px}.q-timeline__dot{position:absolute;top:0;bottom:0;width:15px}.q-timeline__dot:after,.q-timeline__dot:before{content:"";display:block;position:absolute}[dir] .q-timeline__dot:after,[dir] .q-timeline__dot:before{background:currentColor}.q-timeline__dot:before{height:15px;width:15px;top:4px;transition:background 0.3s ease-in-out,border 0.3s ease-in-out}[dir] .q-timeline__dot:before{border:3px solid transparent;border-radius:100%}[dir=ltr] .q-timeline__dot:before{left:0}[dir=rtl] .q-timeline__dot:before{right:0}.q-timeline__dot:after{width:3px;opacity:0.4;top:24px;bottom:0}[dir=ltr] .q-timeline__dot:after{left:6px}[dir=rtl] .q-timeline__dot:after{right:6px}.q-timeline__dot .q-icon{position:absolute;top:0;font-size:16px;height:38px;line-height:38px;width:100%;color:#fff;color:var(--q-color-dark-text)}[dir=ltr] .q-timeline__dot .q-icon,[dir=rtl] .q-timeline__dot .q-icon{left:0;right:0}.q-timeline__dot .q-icon>img,.q-timeline__dot .q-icon>svg{width:1em;height:1em}.q-timeline__dot-img{position:absolute;top:4px;height:31px;width:31px}[dir] .q-timeline__dot-img{background:currentColor;border-radius:50%}[dir=ltr] .q-timeline__dot-img,[dir=rtl] .q-timeline__dot-img{left:0;right:0}.q-timeline__heading{position:relative}[dir] .q-timeline__heading:first-child .q-timeline__heading-title{padding-top:0}[dir] .q-timeline__heading:last-child .q-timeline__heading-title{padding-bottom:0}[dir] .q-timeline__heading-title{padding:32px 0;margin:0}.q-timeline__entry{position:relative;line-height:22px}[dir] .q-timeline__entry:last-child{padding-bottom:0!important}.q-timeline__entry:last-child .q-timeline__dot:after{content:none}.q-timeline__entry--icon .q-timeline__dot{width:31px}.q-timeline__entry--icon .q-timeline__dot:before{height:31px;width:31px}.q-timeline__entry--icon .q-timeline__dot:after{top:41px}[dir=ltr] .q-timeline__entry--icon .q-timeline__dot:after{left:14px}[dir=rtl] .q-timeline__entry--icon .q-timeline__dot:after{right:14px}[dir] .q-timeline__entry--icon .q-timeline__subtitle{padding-top:8px}[dir=ltr] .q-timeline--dense--right .q-timeline__entry{padding-left:40px}[dir=rtl] .q-timeline--dense--right .q-timeline__entry{padding-right:40px}[dir=ltr] .q-timeline--dense--right .q-timeline__entry--icon .q-timeline__dot{left:-8px}[dir=rtl] .q-timeline--dense--right .q-timeline__entry--icon .q-timeline__dot{right:-8px}[dir=ltr] .q-timeline--dense--right .q-timeline__dot{left:0}[dir=rtl] .q-timeline--dense--right .q-timeline__dot{right:0}[dir=ltr] .q-timeline--dense--left .q-timeline__heading{text-align:right}[dir=rtl] .q-timeline--dense--left .q-timeline__heading{text-align:left}[dir=ltr] .q-timeline--dense--left .q-timeline__entry{padding-right:40px}[dir=rtl] .q-timeline--dense--left .q-timeline__entry{padding-left:40px}[dir=ltr] .q-timeline--dense--left .q-timeline__entry--icon .q-timeline__dot{right:-8px}[dir=rtl] .q-timeline--dense--left .q-timeline__entry--icon .q-timeline__dot{left:-8px}[dir=ltr] .q-timeline--dense--left .q-timeline__content,[dir=ltr] .q-timeline--dense--left .q-timeline__subtitle,[dir=ltr] .q-timeline--dense--left .q-timeline__title{text-align:right}[dir=rtl] .q-timeline--dense--left .q-timeline__content,[dir=rtl] .q-timeline--dense--left .q-timeline__subtitle,[dir=rtl] .q-timeline--dense--left .q-timeline__title{text-align:left}[dir=ltr] .q-timeline--dense--left .q-timeline__dot{right:0}[dir=rtl] .q-timeline--dense--left .q-timeline__dot{left:0}.q-timeline--comfortable{display:table}.q-timeline--comfortable .q-timeline__heading{display:table-row;font-size:200%}.q-timeline--comfortable .q-timeline__heading>div{display:table-cell}.q-timeline--comfortable .q-timeline__entry{display:table-row}[dir] .q-timeline--comfortable .q-timeline__entry{padding:0}[dir] .q-timeline--comfortable .q-timeline__entry--icon .q-timeline__content{padding-top:8px}.q-timeline--comfortable .q-timeline__content,.q-timeline--comfortable .q-timeline__dot,.q-timeline--comfortable .q-timeline__subtitle{display:table-cell;vertical-align:top}.q-timeline--comfortable .q-timeline__subtitle{width:35%}.q-timeline--comfortable .q-timeline__dot{position:relative;min-width:31px}[dir=ltr] .q-timeline--comfortable--right .q-timeline__heading .q-timeline__heading-title{margin-left:-50px}[dir=rtl] .q-timeline--comfortable--right .q-timeline__heading .q-timeline__heading-title{margin-right:-50px}[dir=ltr] .q-timeline--comfortable--right .q-timeline__subtitle{text-align:right;padding-right:30px}[dir=rtl] .q-timeline--comfortable--right .q-timeline__subtitle{text-align:left;padding-left:30px}[dir=ltr] .q-timeline--comfortable--right .q-timeline__content{padding-left:30px}[dir=rtl] .q-timeline--comfortable--right .q-timeline__content{padding-right:30px}[dir=ltr] .q-timeline--comfortable--right .q-timeline__entry--icon .q-timeline__dot{left:-8px}[dir=rtl] .q-timeline--comfortable--right .q-timeline__entry--icon .q-timeline__dot{right:-8px}[dir=ltr] .q-timeline--comfortable--left .q-timeline__heading{text-align:right}[dir=rtl] .q-timeline--comfortable--left .q-timeline__heading{text-align:left}[dir=ltr] .q-timeline--comfortable--left .q-timeline__heading .q-timeline__heading-title{margin-right:-50px}[dir=rtl] .q-timeline--comfortable--left .q-timeline__heading .q-timeline__heading-title{margin-left:-50px}[dir=ltr] .q-timeline--comfortable--left .q-timeline__subtitle{padding-left:30px}[dir=ltr] .q-timeline--comfortable--left .q-timeline__content,[dir=rtl] .q-timeline--comfortable--left .q-timeline__subtitle{padding-right:30px}[dir=rtl] .q-timeline--comfortable--left .q-timeline__content{padding-left:30px}[dir=ltr] .q-timeline--comfortable--left .q-timeline__content,[dir=ltr] .q-timeline--comfortable--left .q-timeline__title{text-align:right}[dir=rtl] .q-timeline--comfortable--left .q-timeline__content,[dir=rtl] .q-timeline--comfortable--left .q-timeline__title{text-align:left}[dir=ltr] .q-timeline--comfortable--left .q-timeline__entry--icon .q-timeline__dot{right:0}[dir=rtl] .q-timeline--comfortable--left .q-timeline__entry--icon .q-timeline__dot{left:0}[dir=ltr] .q-timeline--comfortable--left .q-timeline__dot{right:-8px}[dir=rtl] .q-timeline--comfortable--left .q-timeline__dot{left:-8px}[dir] .q-timeline--loose .q-timeline__heading-title{text-align:center}[dir=ltr] .q-timeline--loose .q-timeline__heading-title{margin-left:0}[dir=rtl] .q-timeline--loose .q-timeline__heading-title{margin-right:0}.q-timeline--loose .q-timeline__content,.q-timeline--loose .q-timeline__dot,.q-timeline--loose .q-timeline__entry,.q-timeline--loose .q-timeline__subtitle{display:block}[dir] .q-timeline--loose .q-timeline__content,[dir] .q-timeline--loose .q-timeline__dot,[dir] .q-timeline--loose .q-timeline__entry,[dir] .q-timeline--loose .q-timeline__subtitle{margin:0;padding:0}.q-timeline--loose .q-timeline__dot{position:absolute}[dir=ltr] .q-timeline--loose .q-timeline__dot{left:50%;margin-left:-7.15px}[dir=rtl] .q-timeline--loose .q-timeline__dot{right:50%;margin-right:-7.15px}.q-timeline--loose .q-timeline__entry{overflow:hidden}[dir] .q-timeline--loose .q-timeline__entry{padding-bottom:24px}[dir=ltr] .q-timeline--loose .q-timeline__entry--icon .q-timeline__dot{margin-left:-15px}[dir=rtl] .q-timeline--loose .q-timeline__entry--icon .q-timeline__dot{margin-right:-15px}.q-timeline--loose .q-timeline__entry--icon .q-timeline__subtitle{line-height:38px}[dir] .q-timeline--loose .q-timeline__entry--icon .q-timeline__content{padding-top:8px}[dir=ltr] .q-timeline--loose .q-timeline__entry--left .q-timeline__content,[dir=ltr] .q-timeline--loose .q-timeline__entry--right .q-timeline__subtitle{float:left;padding-right:30px;text-align:right}[dir=ltr] .q-timeline--loose .q-timeline__entry--left .q-timeline__subtitle,[dir=ltr] .q-timeline--loose .q-timeline__entry--right .q-timeline__content,[dir=rtl] .q-timeline--loose .q-timeline__entry--left .q-timeline__content,[dir=rtl] .q-timeline--loose .q-timeline__entry--right .q-timeline__subtitle{float:right;padding-left:30px;text-align:left}[dir=rtl] .q-timeline--loose .q-timeline__entry--left .q-timeline__subtitle,[dir=rtl] .q-timeline--loose .q-timeline__entry--right .q-timeline__content{float:left;text-align:right;padding-right:30px}.q-timeline--loose .q-timeline__content,.q-timeline--loose .q-timeline__subtitle{width:50%}@media (prefers-color-scheme:dark){.q-timeline--dark-auto{color:#fff;color:var(--q-color-dark-text)}.q-timeline--dark-auto .q-timeline__subtitle{opacity:0.7}}.q-toggle{vertical-align:middle}.q-toggle__native{width:1px;height:1px}.q-toggle__track{height:0.35em;opacity:0.38}[dir] .q-toggle__track{border-radius:0.175em;background:currentColor}.q-toggle__thumb{top:0.25em;width:0.5em;height:0.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0}[dir=ltr] .q-toggle__thumb{left:0.25em;transition:left 0.22s cubic-bezier(0.4,0,0.2,1)}[dir=rtl] .q-toggle__thumb{right:0.25em;transition:right 0.22s cubic-bezier(0.4,0,0.2,1)}.q-toggle__thumb:after{content:"";position:absolute;top:0;bottom:0}[dir] .q-toggle__thumb:after{border-radius:50%;background:#fff;background:var(--q-color-light-page);box-shadow:0 3px 1px -2px rgba(0,0,0,0.2),0 2px 2px 0 rgba(0,0,0,0.14),0 1px 5px 0 rgba(0,0,0,0.12)}[dir=ltr] .q-toggle__thumb:after,[dir=rtl] .q-toggle__thumb:after{right:0;left:0}.q-toggle__thumb .q-icon{font-size:0.3em;min-width:1em;color:#000;color:var(--q-color-light-text);opacity:0.54;z-index:1}.q-toggle__inner{font-size:40px;width:1.4em;min-width:1.4em;height:1em;-webkit-print-color-adjust:exact}[dir] .q-toggle__inner{padding:0.325em 0.3em}[dir=ltr] .q-toggle__inner--indet .q-toggle__thumb{left:0.45em}[dir=rtl] .q-toggle__inner--indet .q-toggle__thumb{right:0.45em}.q-toggle__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-toggle__inner--truthy .q-toggle__track{opacity:0.54}[dir=ltr] .q-toggle__inner--truthy .q-toggle__thumb{left:0.65em}[dir=rtl] .q-toggle__inner--truthy .q-toggle__thumb{right:0.65em}[dir] .q-toggle__inner--truthy .q-toggle__thumb:after{background-color:currentColor}.q-toggle__inner--truthy .q-toggle__thumb .q-icon{color:#fff;color:var(--q-color-dark-text);opacity:1}.q-toggle.disabled{opacity:0.75!important}.q-toggle--dark .q-toggle__inner{color:#fff;color:var(--q-color-dark-text)}.q-toggle--dark .q-toggle__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-toggle--dark .q-toggle__thumb:before{opacity:0.32!important}.q-toggle--dense .q-toggle__inner{width:0.8em;min-width:0.8em;height:0.5em}[dir] .q-toggle--dense .q-toggle__inner{padding:0.07625em 0}.q-toggle--dense .q-toggle__thumb{top:0}[dir=ltr] .q-toggle--dense .q-toggle__thumb{left:0}[dir=rtl] .q-toggle--dense .q-toggle__thumb{right:0}[dir=ltr] .q-toggle--dense .q-toggle__inner--indet .q-toggle__thumb{left:0.15em}[dir=rtl] .q-toggle--dense .q-toggle__inner--indet .q-toggle__thumb{right:0.15em}[dir=ltr] .q-toggle--dense .q-toggle__inner--truthy .q-toggle__thumb{left:0.3em}[dir=rtl] .q-toggle--dense .q-toggle__inner--truthy .q-toggle__thumb{right:0.3em}[dir=ltr] .q-toggle--dense .q-toggle__label{padding-left:0.5em}[dir=rtl] .q-toggle--dense .q-toggle__label{padding-right:0.5em}[dir=ltr] .q-toggle--dense.reverse .q-toggle__label{padding-left:0;padding-right:0.5em}[dir=rtl] .q-toggle--dense.reverse .q-toggle__label{padding-right:0;padding-left:0.5em}body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before{content:"";position:absolute;top:0;bottom:0;opacity:0.12;transition:transform 0.22s cubic-bezier(0,0,0.2,1)}[dir] body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before{border-radius:50%;background:currentColor;transform:scale3d(0,0,1)}[dir=ltr] body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before,[dir=rtl] body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before{right:0;left:0}[dir] body.desktop .q-toggle:not(.disabled):focus .q-toggle__thumb:before,[dir] body.desktop .q-toggle:not(.disabled):hover .q-toggle__thumb:before{transform:scale3d(2,2,1)}[dir] body.desktop .q-toggle--dense:not(.disabled):focus .q-toggle__thumb:before,[dir] body.desktop .q-toggle--dense:not(.disabled):hover .q-toggle__thumb:before{transform:scale3d(1.5,1.5,1)}@media (prefers-color-scheme:dark){.q-toggle--dark-auto .q-toggle__inner{color:#fff;color:var(--q-color-dark-text)}.q-toggle--dark-auto .q-toggle__inner--truthy{color:#1976d2;color:var(--q-color-primary)}.q-toggle--dark-auto .q-toggle__thumb:before{opacity:0.32!important}}.q-toolbar{position:relative;min-height:50px;width:100%}[dir] .q-toolbar{padding:0 12px}[dir=ltr] .q-toolbar--inset{padding-left:58px}[dir=rtl] .q-toolbar--inset{padding-right:58px}.q-toolbar .q-avatar{font-size:38px}.q-toolbar__title{flex:1 1 0%;min-width:1px;max-width:100%;font-size:21px;font-weight:400;letter-spacing:0.01em}[dir] .q-toolbar__title{padding:0 12px}[dir=ltr] .q-toolbar__title:first-child{padding-left:0}[dir=ltr] .q-toolbar__title:last-child,[dir=rtl] .q-toolbar__title:first-child{padding-right:0}[dir=rtl] .q-toolbar__title:last-child{padding-left:0}.q-tooltip{opacity:0}[dir] .q-tooltip{padding:6px 10px}.q-tooltip__container{position:fixed;z-index:9000;contain:layout;contain:layout style}.q-tooltip--style{font-size:10px;color:#fafafa;text-transform:none;font-weight:400}[dir] .q-tooltip--style{background:#757575;border-radius:4px}@media (max-width:599.98px){.q-tooltip{font-size:14px}[dir] .q-tooltip{padding:8px 16px}}.q-tree{position:relative;color:#9e9e9e}[dir=ltr] .q-tree__node{padding:0 0 3px 22px}[dir=rtl] .q-tree__node{padding:0 22px 3px 0}.q-tree__node:after{content:"";position:absolute;top:-3px;bottom:0;width:2px}[dir=ltr] .q-tree__node:after{right:auto;left:-13px;border-left:1px solid currentColor}[dir=rtl] .q-tree__node:after{left:auto;right:-13px;border-right:1px solid currentColor}.q-tree__node:last-child:after{display:none}.q-tree__node--disabled{pointer-events:none}.q-tree__node--disabled .disabled{opacity:1!important}.q-tree__node--disabled>.disabled,.q-tree__node--disabled>div,.q-tree__node--disabled>i{opacity:0.6!important}.q-tree__node--disabled>.disabled .q-tree__node--disabled>.disabled,.q-tree__node--disabled>.disabled .q-tree__node--disabled>div,.q-tree__node--disabled>.disabled .q-tree__node--disabled>i,.q-tree__node--disabled>div .q-tree__node--disabled>.disabled,.q-tree__node--disabled>div .q-tree__node--disabled>div,.q-tree__node--disabled>div .q-tree__node--disabled>i,.q-tree__node--disabled>i .q-tree__node--disabled>.disabled,.q-tree__node--disabled>i .q-tree__node--disabled>div,.q-tree__node--disabled>i .q-tree__node--disabled>i{opacity:1!important}.q-tree__node-header:before{content:"";position:absolute;top:-3px;bottom:50%;width:31px}[dir] .q-tree__node-header:before{border-bottom:1px solid currentColor}[dir=ltr] .q-tree__node-header:before{left:-35px;border-left:1px solid currentColor}[dir=rtl] .q-tree__node-header:before{right:-35px;border-right:1px solid currentColor}[dir=ltr] .q-tree__children{padding-left:25px}[dir=rtl] .q-tree__children{padding-right:25px}[dir=ltr] .q-tree__node-body{padding:5px 0 8px 5px}[dir=rtl] .q-tree__node-body{padding:5px 5px 8px 0}[dir=ltr] .q-tree__node--parent{padding-left:2px}[dir=rtl] .q-tree__node--parent{padding-right:2px}.q-tree__node--parent>.q-tree__node-header:before{width:15px}[dir=ltr] .q-tree__node--parent>.q-tree__node-header:before{left:-15px}[dir=rtl] .q-tree__node--parent>.q-tree__node-header:before{right:-15px}[dir=ltr] .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:5px 0 8px 27px}[dir=rtl] .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:5px 27px 8px 0}.q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{content:"";position:absolute;top:0;width:2px;height:100%;bottom:50px}[dir=ltr] .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{right:auto;left:12px;border-left:1px solid currentColor}[dir=rtl] .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{left:auto;right:12px;border-right:1px solid currentColor}[dir] .q-tree__node--link{cursor:pointer}.q-tree__node-header{outline:0}[dir] .q-tree__node-header{padding:4px;margin-top:3px;border-radius:4px}.q-tree__node-header-content{color:#000;color:var(--q-color-light-text);transition:color 0.3s}.q-tree__node--selected .q-tree__node-header-content{color:#9e9e9e}.q-tree__icon,.q-tree__node-header-content .q-icon{font-size:21px}.q-tree__img{height:42px}[dir] .q-tree__img{border-radius:2px}.q-tree__avatar,.q-tree__node-header-content .q-avatar{font-size:28px;width:28px;height:28px}[dir] .q-tree__avatar,[dir] .q-tree__node-header-content .q-avatar{border-radius:50%}.q-tree__arrow,.q-tree__spinner{font-size:16px}[dir=ltr] .q-tree__arrow,[dir=ltr] .q-tree__spinner{margin-right:4px}[dir=rtl] .q-tree__arrow,[dir=rtl] .q-tree__spinner{margin-left:4px}.q-tree__arrow{transition:transform 0.3s}[dir=ltr] .q-tree__arrow--rotate{transform:rotate3d(0,0,1,90deg)}[dir=rtl] .q-tree__arrow--rotate{transform:rotate3d(0,0,1,-90deg)}[dir=ltr] .q-tree__tickbox{margin-right:4px}[dir=rtl] .q-tree__tickbox{margin-left:4px}[dir] .q-tree>.q-tree__node{padding:0}.q-tree>.q-tree__node:after,.q-tree>.q-tree__node>.q-tree__node-header:before{display:none}[dir=ltr] .q-tree>.q-tree__node--child>.q-tree__node-header{padding-left:24px}[dir=rtl] .q-tree>.q-tree__node--child>.q-tree__node-header{padding-right:24px}.q-tree--dark .q-tree__node-header-content{color:#fff;color:var(--q-color-dark-text)}.q-tree--no-connectors .q-tree__node-body:after,.q-tree--no-connectors .q-tree__node-header:before,.q-tree--no-connectors .q-tree__node:after{display:none!important}[dir=ltr] .q-tree--dense>.q-tree__node--child>.q-tree__node-header{padding-left:1px}[dir=rtl] .q-tree--dense>.q-tree__node--child>.q-tree__node-header{padding-right:1px}[dir=ltr] .q-tree--dense .q-tree__arrow,[dir=ltr] .q-tree--dense .q-tree__spinner{margin-right:1px}[dir=rtl] .q-tree--dense .q-tree__arrow,[dir=rtl] .q-tree--dense .q-tree__spinner{margin-left:1px}.q-tree--dense .q-tree__img{height:32px}[dir=ltr] .q-tree--dense .q-tree__tickbox{margin-right:3px}[dir=rtl] .q-tree--dense .q-tree__tickbox{margin-left:3px}[dir] .q-tree--dense .q-tree__node{padding:0}.q-tree--dense .q-tree__node:after{top:0}[dir=ltr] .q-tree--dense .q-tree__node:after{left:-8px}[dir=rtl] .q-tree--dense .q-tree__node:after{right:-8px}[dir] .q-tree--dense .q-tree__node-header{margin-top:0;padding:1px}.q-tree--dense .q-tree__node-header:before{top:0;width:8px}[dir=ltr] .q-tree--dense .q-tree__node-header:before{left:-8px}[dir=rtl] .q-tree--dense .q-tree__node-header:before{right:-8px}[dir=ltr] .q-tree--dense .q-tree__node--child{padding-left:17px}[dir=rtl] .q-tree--dense .q-tree__node--child{padding-right:17px}.q-tree--dense .q-tree__node--child>.q-tree__node-header:before{width:21px}[dir=ltr] .q-tree--dense .q-tree__node--child>.q-tree__node-header:before{left:-25px}[dir=rtl] .q-tree--dense .q-tree__node--child>.q-tree__node-header:before{right:-25px}[dir] .q-tree--dense .q-tree__node-body{padding:0 0 2px}[dir=ltr] .q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:0 0 2px 20px}[dir=rtl] .q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:0 20px 2px 0}[dir=ltr] .q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{left:8px}[dir=rtl] .q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{right:8px}[dir=ltr] .q-tree--dense .q-tree__children{padding-left:16px}[dir=rtl] .q-tree--dense .q-tree__children{padding-right:16px}[dir=rtl] .q-tree__arrow{transform:rotate3d(0,0,1,180deg)}[dir=rtl] .q-tree__arrow--rotate{transform:rotate3d(0,0,1,90deg)}@media (prefers-color-scheme:dark){.q-tree--dark-auto .q-tree__node-header-content{color:#fff;color:var(--q-color-dark-text)}}.q-uploader{vertical-align:top;position:relative;width:320px;max-height:320px}[dir] .q-uploader{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px}[dir] .q-uploader--bordered{border:1px solid rgba(0,0,0,0.12)}.q-uploader__input{opacity:0;width:100%;height:100%;z-index:1}[dir] .q-uploader__input{cursor:pointer!important}[dir] .q-uploader__input::-webkit-file-upload-button{cursor:pointer}.q-uploader__file:before{content:"";position:absolute;top:0;bottom:0;pointer-events:none;opacity:0.04}[dir] .q-uploader__file:before{background:currentColor}[dir=ltr] .q-uploader__file:before,[dir=rtl] .q-uploader__file:before{border-top-left-radius:inherit;border-top-right-radius:inherit;right:0;left:0}.q-uploader__header{position:relative;color:#fff;color:var(--q-color-dark-text);width:100%}[dir] .q-uploader__header{background-color:#1976d2;background-color:var(--q-color-primary)}[dir=ltr] .q-uploader__header,[dir=rtl] .q-uploader__header{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-uploader__spinner{font-size:24px}[dir=ltr] .q-uploader__spinner{margin-right:4px}[dir=rtl] .q-uploader__spinner{margin-left:4px}[dir] .q-uploader__header-content{padding:8px}.q-uploader__dnd{outline:1px dashed currentColor;outline-offset:-4px}[dir] .q-uploader__dnd{background:hsla(0,0%,100%,0.6)}.q-uploader__overlay{font-size:36px;color:#000;color:var(--q-color-light-text)}[dir] .q-uploader__overlay{background-color:hsla(0,0%,100%,0.6)}.q-uploader__list{position:relative;min-height:60px;flex:1 1 auto}[dir] .q-uploader__list{padding:8px}[dir=ltr] .q-uploader__list,[dir=rtl] .q-uploader__list{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}[dir] .q-uploader__file{border-radius:4px 4px 0 0;border:1px solid rgba(0,0,0,0.12)}.q-uploader__file .q-circular-progress{font-size:24px}.q-uploader__file--img{color:#fff;color:var(--q-color-dark-text);height:200px;min-width:200px}[dir] .q-uploader__file--img{background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.q-uploader__file--img:before{content:none}.q-uploader__file--img .q-circular-progress{color:#fff;color:var(--q-color-dark-text)}[dir] .q-uploader__file--img .q-uploader__file-header{padding-bottom:24px;background:linear-gradient(180deg,rgba(0,0,0,0.7) 20%,hsla(0,0%,100%,0))}[dir] .q-uploader__file+.q-uploader__file{margin-top:8px}.q-uploader__file-header{position:relative}[dir] .q-uploader__file-header{padding:4px 8px}[dir=ltr] .q-uploader__file-header,[dir=rtl] .q-uploader__file-header{border-top-left-radius:inherit;border-top-right-radius:inherit}[dir=ltr] .q-uploader__file-header-content{padding-right:8px}[dir=rtl] .q-uploader__file-header-content{padding-left:8px}.q-uploader__file-status{font-size:24px}[dir=ltr] .q-uploader__file-status{margin-right:4px}[dir=rtl] .q-uploader__file-status{margin-left:4px}.q-uploader__title{font-size:14px;font-weight:700;line-height:18px;word-break:break-word}.q-uploader__subtitle{font-size:12px;line-height:18px}.q-uploader--disabled .q-uploader__header,.q-uploader--disabled .q-uploader__list{pointer-events:none}[dir] .q-uploader--dark,[dir] .q-uploader--dark .q-uploader__file{border-color:hsla(0,0%,100%,0.28)}[dir] .q-uploader--dark .q-uploader__dnd,[dir] .q-uploader--dark .q-uploader__overlay{background:hsla(0,0%,100%,0.3)}.q-uploader--dark .q-uploader__overlay{color:#fff;color:var(--q-color-dark-text)}@media (prefers-color-scheme:dark){[dir] .q-uploader--dark-auto,[dir] .q-uploader--dark-auto .q-uploader__file{border-color:hsla(0,0%,100%,0.28)}[dir] .q-uploader--dark-auto .q-uploader__dnd,[dir] .q-uploader--dark-auto .q-uploader__overlay{background:hsla(0,0%,100%,0.3)}.q-uploader--dark-auto .q-uploader__overlay{color:#fff;color:var(--q-color-dark-text)}}.q-video{position:relative;overflow:hidden}[dir] .q-video{border-radius:inherit}.q-video embed,.q-video iframe,.q-video object{width:100%;height:100%}.q-video--responsive{height:0}.q-video--responsive embed,.q-video--responsive iframe,.q-video--responsive object{position:absolute;top:0}[dir=ltr] .q-video--responsive embed,[dir=ltr] .q-video--responsive iframe,[dir=ltr] .q-video--responsive object{left:0}[dir=rtl] .q-video--responsive embed,[dir=rtl] .q-video--responsive iframe,[dir=rtl] .q-video--responsive object{right:0}.q-virtual-scroll:focus{outline:0}.q-virtual-scroll__content{outline:none;contain:content}.q-virtual-scroll__content>*{overflow-anchor:none}.q-virtual-scroll__content>[data-q-vs-anchor]{overflow-anchor:auto}.q-virtual-scroll__padding{background:linear-gradient(hsla(0,0%,100%,0),hsla(0,0%,100%,0) 20%,hsla(0,0%,50.2%,0.03) 0,hsla(0,0%,50.2%,0.08) 50%,hsla(0,0%,50.2%,0.03) 80%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0));background-size:100% 50px;background-size:var(--q-virtual-scroll-item-width,100%) var(--q-virtual-scroll-item-height,50px)}.q-table .q-virtual-scroll__padding tr{height:0!important}[dir] .q-table .q-virtual-scroll__padding td{padding:0!important}.q-virtual-scroll--horizontal{align-items:stretch}.q-virtual-scroll--horizontal,.q-virtual-scroll--horizontal .q-virtual-scroll__content{display:flex;flex-direction:row;flex-wrap:nowrap}.q-virtual-scroll--horizontal .q-virtual-scroll__content,.q-virtual-scroll--horizontal .q-virtual-scroll__content>*,.q-virtual-scroll--horizontal .q-virtual-scroll__padding{flex:0 0 auto}.q-virtual-scroll--horizontal .q-virtual-scroll__padding{background:linear-gradient(270deg,hsla(0,0%,100%,0),hsla(0,0%,100%,0) 20%,hsla(0,0%,50.2%,0.03) 0,hsla(0,0%,50.2%,0.08) 50%,hsla(0,0%,50.2%,0.03) 80%,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,0));background-size:50px 100%;background-size:var(--q-virtual-scroll-item-width,50px) var(--q-virtual-scroll-item-height,100%)}.q-ripple{position:absolute;top:0;left:0;width:100%;height:100%;color:inherit;z-index:0;pointer-events:none;overflow:hidden;contain:strict}[dir] .q-ripple{border-radius:inherit}.q-ripple__inner{position:absolute;top:0;left:0;opacity:0;color:inherit;pointer-events:none;will-change:transform,opacity}[dir] .q-ripple__inner{border-radius:50%;background:currentColor;background-clip:padding-box}.q-ripple__inner--enter{transition:transform 0.225s cubic-bezier(0.4,0,0.2,1),opacity 0.1s cubic-bezier(0.4,0,0.2,1)}.q-ripple__inner--leave{transition:opacity 0.25s cubic-bezier(0.4,0,0.2,1)}.q-morph--internal,.q-morph--invisible{opacity:0!important;pointer-events:none!important;position:fixed!important;bottom:200vh!important}[dir=ltr] .q-morph--internal,[dir=ltr] .q-morph--invisible{right:200vw!important}[dir=rtl] .q-morph--internal,[dir=rtl] .q-morph--invisible{left:200vw!important}.q-loading{color:#000;color:var(--q-color-light-text);position:fixed!important}.q-loading:before{content:"";position:fixed;top:0;bottom:0;opacity:0.5;z-index:-1}[dir] .q-loading:before{background:currentColor}[dir=ltr] .q-loading:before,[dir=rtl] .q-loading:before{right:0;left:0}.q-loading>div{max-width:450px}[dir] .q-loading>div{margin:40px 20px 0;text-align:center}.q-notifications__list{z-index:9500;pointer-events:none;position:relative}[dir] .q-notifications__list{margin-bottom:10px}[dir=ltr] .q-notifications__list,[dir=rtl] .q-notifications__list{left:0;right:0}.q-notifications__list--center{top:0;bottom:0}.q-notifications__list--top{top:0}.q-notifications__list--bottom{bottom:0}body.q-ios-padding .q-notifications__list--center,body.q-ios-padding .q-notifications__list--top{top:20px;top:env(safe-area-inset-top)}body.q-ios-padding .q-notifications__list--bottom,body.q-ios-padding .q-notifications__list--center{bottom:env(safe-area-inset-bottom)}.q-notification{pointer-events:all;display:inline-flex;transition:transform 1s,opacity 1s;z-index:9500;flex-shrink:0;max-width:95vw;color:#fff;color:var(--q-color-dark-text);font-size:14px}[dir] .q-notification{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12);border-radius:4px;margin:10px 10px 0;background:#323232;background:var(--q-color-notify-background)}.q-notification__icon{font-size:24px;flex:0 0 1em}[dir=ltr] .q-notification__icon--additional{margin-right:16px}[dir=rtl] .q-notification__icon--additional{margin-left:16px}.q-notification__avatar{font-size:32px}[dir=ltr] .q-notification__avatar--additional{margin-right:8px}[dir=rtl] .q-notification__avatar--additional{margin-left:8px}.q-notification__spinner{font-size:32px}[dir=ltr] .q-notification__spinner--additional{margin-right:8px}[dir=rtl] .q-notification__spinner--additional{margin-left:8px}[dir] .q-notification__message{padding:8px 0}.q-notification__caption{font-size:0.9em;opacity:0.7}.q-notification__actions{color:#1976d2;color:var(--q-color-primary)}.q-notification__badge{position:absolute;color:#fff;color:var(--q-color-dark-text);font-size:12px;line-height:12px}[dir] .q-notification__badge{padding:4px 8px;background:#c10015;box-shadow:0 1px 3px rgba(0,0,0,0.2),0 1px 1px rgba(0,0,0,0.14),0 2px 1px -1px rgba(0,0,0,0.12);background-color:#c10015;background-color:var(--q-color-negative);border-radius:4px}[dir=ltr] .q-notification__badge{-webkit-animation:q-notif-badge-ltr 0.42s;animation:q-notif-badge-ltr 0.42s}[dir=rtl] .q-notification__badge{-webkit-animation:q-notif-badge-rtl 0.42s;animation:q-notif-badge-rtl 0.42s}.q-notification__badge--top-left,.q-notification__badge--top-right{top:-6px}.q-notification__badge--bottom-left,.q-notification__badge--bottom-right{bottom:-6px}[dir=ltr] .q-notification__badge--bottom-left,[dir=ltr] .q-notification__badge--top-left{left:-22px}[dir=ltr] .q-notification__badge--bottom-right,[dir=ltr] .q-notification__badge--top-right,[dir=rtl] .q-notification__badge--bottom-left,[dir=rtl] .q-notification__badge--top-left{right:-22px}[dir=rtl] .q-notification__badge--bottom-right,[dir=rtl] .q-notification__badge--top-right{left:-22px}.q-notification__progress{z-index:-1;position:absolute;height:3px;bottom:0;opacity:0.3}[dir] .q-notification__progress{background:currentColor;border-radius:4px 4px 0 0;transform:scaleX(0)}[dir=ltr] .q-notification__progress{transform-origin:0 50%}[dir=ltr] .q-notification__progress,[dir=rtl] .q-notification__progress{left:-10px;right:-10px;-webkit-animation:q-notif-progress linear;animation:q-notif-progress linear}[dir=rtl] .q-notification__progress{transform-origin:100% 50%}.q-notification--standard{min-height:48px}[dir] .q-notification--standard{padding:0 16px}[dir=ltr] .q-notification--standard .q-notification__actions{padding:6px 0 6px 8px;margin-right:-8px}[dir=rtl] .q-notification--standard .q-notification__actions{padding:6px 8px 6px 0;margin-left:-8px}.q-notification--multi-line{min-height:68px}[dir] .q-notification--multi-line{padding:8px 16px}.q-notification--multi-line .q-notification__badge--top-left,.q-notification--multi-line .q-notification__badge--top-right{top:-15px}.q-notification--multi-line .q-notification__badge--bottom-left,.q-notification--multi-line .q-notification__badge--bottom-right{bottom:-15px}.q-notification--multi-line .q-notification__progress{bottom:-8px}[dir] .q-notification--multi-line .q-notification__actions{padding:0}[dir=ltr] .q-notification--multi-line .q-notification__actions--with-media{padding-left:25px}[dir=rtl] .q-notification--multi-line .q-notification__actions--with-media{padding-right:25px}.q-notification--top-enter,.q-notification--top-leave-to,.q-notification--top-left-enter,.q-notification--top-left-leave-to,.q-notification--top-right-enter,.q-notification--top-right-leave-to{opacity:0;z-index:9499}[dir] .q-notification--top-enter,[dir] .q-notification--top-leave-to,[dir] .q-notification--top-left-enter,[dir] .q-notification--top-left-leave-to,[dir] .q-notification--top-right-enter,[dir] .q-notification--top-right-leave-to{transform:translateY(-50px)}.q-notification--center-enter,.q-notification--center-leave-to,.q-notification--left-enter,.q-notification--left-leave-to,.q-notification--right-enter,.q-notification--right-leave-to{opacity:0;z-index:9499}[dir] .q-notification--center-enter,[dir] .q-notification--center-leave-to,[dir] .q-notification--left-enter,[dir] .q-notification--left-leave-to,[dir] .q-notification--right-enter,[dir] .q-notification--right-leave-to{transform:rotateX(90deg)}.q-notification--bottom-enter,.q-notification--bottom-leave-to,.q-notification--bottom-left-enter,.q-notification--bottom-left-leave-to,.q-notification--bottom-right-enter,.q-notification--bottom-right-leave-to{opacity:0;z-index:9499}[dir] .q-notification--bottom-enter,[dir] .q-notification--bottom-leave-to,[dir] .q-notification--bottom-left-enter,[dir] .q-notification--bottom-left-leave-to,[dir] .q-notification--bottom-right-enter,[dir] .q-notification--bottom-right-leave-to{transform:translateY(50px)}.q-notification--bottom-leave-active,.q-notification--bottom-left-leave-active,.q-notification--bottom-right-leave-active,.q-notification--center-leave-active,.q-notification--left-leave-active,.q-notification--right-leave-active,.q-notification--top-leave-active,.q-notification--top-left-leave-active,.q-notification--top-right-leave-active{position:absolute;z-index:9499}[dir=ltr] .q-notification--bottom-leave-active,[dir=ltr] .q-notification--bottom-left-leave-active,[dir=ltr] .q-notification--bottom-right-leave-active,[dir=ltr] .q-notification--center-leave-active,[dir=ltr] .q-notification--left-leave-active,[dir=ltr] .q-notification--right-leave-active,[dir=ltr] .q-notification--top-leave-active,[dir=ltr] .q-notification--top-left-leave-active,[dir=ltr] .q-notification--top-right-leave-active,[dir=rtl] .q-notification--bottom-leave-active,[dir=rtl] .q-notification--bottom-left-leave-active,[dir=rtl] .q-notification--bottom-right-leave-active,[dir=rtl] .q-notification--center-leave-active,[dir=rtl] .q-notification--left-leave-active,[dir=rtl] .q-notification--right-leave-active,[dir=rtl] .q-notification--top-leave-active,[dir=rtl] .q-notification--top-left-leave-active,[dir=rtl] .q-notification--top-right-leave-active{margin-left:0;margin-right:0}.q-notification--center-leave-active,.q-notification--top-leave-active{top:0}.q-notification--bottom-leave-active,.q-notification--bottom-left-leave-active,.q-notification--bottom-right-leave-active{bottom:0}@media (min-width:600px){.q-notification{max-width:65vw}}:root{--animate-duration:0.3s;--animate-delay:0.3s;--animate-repeat:1}[dir=ltr] .animated,[dir=rtl] .animated{-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}[dir=ltr] .animated.infinite,[dir=rtl] .animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}[dir=ltr] .animated.hinge,[dir=rtl] .animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}[dir=ltr] .animated.repeat-1,[dir=rtl] .animated.repeat-1{-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}[dir=ltr] .animated.repeat-2,[dir=rtl] .animated.repeat-2{-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}[dir=ltr] .animated.repeat-3,[dir=rtl] .animated.repeat-3{-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}[dir=ltr] .animated.delay-1s,[dir=rtl] .animated.delay-1s{-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}[dir=ltr] .animated.delay-2s,[dir=rtl] .animated.delay-2s{-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}[dir=ltr] .animated.delay-3s,[dir=rtl] .animated.delay-3s{-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}[dir=ltr] .animated.delay-4s,[dir=rtl] .animated.delay-4s{-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}[dir=ltr] .animated.delay-5s,[dir=rtl] .animated.delay-5s{-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}[dir=ltr] .animated.faster,[dir=rtl] .animated.faster{-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}[dir=ltr] .animated.fast,[dir=rtl] .animated.fast{-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}[dir=ltr] .animated.slow,[dir=rtl] .animated.slow{-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}[dir=ltr] .animated.slower,[dir=rtl] .animated.slower{-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{[dir] .animated{transition-duration:1ms!important}[dir=ltr] .animated,[dir=rtl] .animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animated[class*=Out]{opacity:0}}[dir=ltr] .q-animate--scale,[dir=rtl] .q-animate--scale{-webkit-animation:q-scale 0.15s;animation:q-scale 0.15s;-webkit-animation-timing-function:cubic-bezier(0.25,0.8,0.25,1);animation-timing-function:cubic-bezier(0.25,0.8,0.25,1)}.q-animate--fade{-webkit-animation:q-fade 0.2s;animation:q-fade 0.2s}:root{--q-color-primary:#1976d2;--q-color-secondary:#26a69a;--q-color-accent:#9c27b0;--q-color-positive:#21ba45;--q-color-negative:#c10015;--q-color-info:#31ccec;--q-color-warning:#f2c037;--q-color-dark:#1d1d1d;--q-color-light-text:#000;--q-color-light-page:#fff;--q-color-dark-text:#fff;--q-color-dark-page:#121212;--q-color-backdrop-background:#000;--q-color-notify-background:#323232;--q-color-chip-background-light:#e0e0e0;--q-color-chip-background-dark:#323232;--q-color-dialog-plugin-light:#1976d2;--q-color-dialog-plugin-dark:#ffc107}.text-dark{color:#1d1d1d!important;color:var(--q-color-dark)!important}[dir] .bg-dark{background:#1d1d1d!important;background:var(--q-color-dark)!important}.text-dialog-plugin-dark-auto,.text-dialog-plugin-light{color:#1976d2!important;color:var(--q-color-dialog-plugin-light)!important}[dir] .bg-dialog-plugin-dark-auto,[dir] .bg-dialog-plugin-light{background:#1976d2!important;background:var(--q-color-dialog-plugin-light)!important}.text-dialog-plugin-dark{color:#ffc107!important;color:var(--q-color-dialog-plugin-dark)!important}[dir] .bg-dialog-plugin-dark{background:#ffc107!important;background:var(--q-color-dialog-plugin-dark)!important}@media (prefers-color-scheme:dark){.text-dialog-plugin-dark-auto{color:#ffc107!important;color:var(--q-color-dialog-plugin-dark)!important}[dir] .bg-dialog-plugin-dark-auto{background:#ffc107!important;background:var(--q-color-dialog-plugin-dark)!important}}.text-primary{color:#1976d2!important;color:var(--q-color-primary)!important}[dir] .bg-primary{background:#1976d2!important;background:var(--q-color-primary)!important}.text-secondary{color:#26a69a!important;color:var(--q-color-secondary)!important}[dir] .bg-secondary{background:#26a69a!important;background:var(--q-color-secondary)!important}.text-accent{color:#9c27b0!important;color:var(--q-color-accent)!important}[dir] .bg-accent{background:#9c27b0!important;background:var(--q-color-accent)!important}.text-positive{color:#21ba45!important;color:var(--q-color-positive)!important}[dir] .bg-positive{background:#21ba45!important;background:var(--q-color-positive)!important}.text-negative{color:#c10015!important;color:var(--q-color-negative)!important}[dir] .bg-negative{background:#c10015!important;background:var(--q-color-negative)!important}.text-info{color:#31ccec!important;color:var(--q-color-info)!important}[dir] .bg-info{background:#31ccec!important;background:var(--q-color-info)!important}.text-warning{color:#f2c037!important;color:var(--q-color-warning)!important}[dir] .bg-warning{background:#f2c037!important;background:var(--q-color-warning)!important}.text-white{color:#fff!important}[dir] .bg-white{background:#fff!important}.text-black{color:#000!important}[dir] .bg-black{background:#000!important}.text-transparent{color:transparent!important}[dir] .bg-transparent{background:transparent!important}.text-separator{color:rgba(0,0,0,0.12)!important}[dir] .bg-separator{background:rgba(0,0,0,0.12)!important}.text-dark-separator{color:hsla(0,0%,100%,0.28)!important}[dir] .bg-dark-separator{background:hsla(0,0%,100%,0.28)!important}.text-red{color:#f44336!important}.text-red-1{color:#ffebee!important}.text-red-2{color:#ffcdd2!important}.text-red-3{color:#ef9a9a!important}.text-red-4{color:#e57373!important}.text-red-5{color:#ef5350!important}.text-red-6{color:#f44336!important}.text-red-7{color:#e53935!important}.text-red-8{color:#d32f2f!important}.text-red-9{color:#c62828!important}.text-red-10{color:#b71c1c!important}.text-red-11{color:#ff8a80!important}.text-red-12{color:#ff5252!important}.text-red-13{color:#ff1744!important}.text-red-14{color:#d50000!important}.text-pink{color:#e91e63!important}.text-pink-1{color:#fce4ec!important}.text-pink-2{color:#f8bbd0!important}.text-pink-3{color:#f48fb1!important}.text-pink-4{color:#f06292!important}.text-pink-5{color:#ec407a!important}.text-pink-6{color:#e91e63!important}.text-pink-7{color:#d81b60!important}.text-pink-8{color:#c2185b!important}.text-pink-9{color:#ad1457!important}.text-pink-10{color:#880e4f!important}.text-pink-11{color:#ff80ab!important}.text-pink-12{color:#ff4081!important}.text-pink-13{color:#f50057!important}.text-pink-14{color:#c51162!important}.text-purple{color:#9c27b0!important}.text-purple-1{color:#f3e5f5!important}.text-purple-2{color:#e1bee7!important}.text-purple-3{color:#ce93d8!important}.text-purple-4{color:#ba68c8!important}.text-purple-5{color:#ab47bc!important}.text-purple-6{color:#9c27b0!important}.text-purple-7{color:#8e24aa!important}.text-purple-8{color:#7b1fa2!important}.text-purple-9{color:#6a1b9a!important}.text-purple-10{color:#4a148c!important}.text-purple-11{color:#ea80fc!important}.text-purple-12{color:#e040fb!important}.text-purple-13{color:#d500f9!important}.text-purple-14{color:#a0f!important}.text-deep-purple{color:#673ab7!important}.text-deep-purple-1{color:#ede7f6!important}.text-deep-purple-2{color:#d1c4e9!important}.text-deep-purple-3{color:#b39ddb!important}.text-deep-purple-4{color:#9575cd!important}.text-deep-purple-5{color:#7e57c2!important}.text-deep-purple-6{color:#673ab7!important}.text-deep-purple-7{color:#5e35b1!important}.text-deep-purple-8{color:#512da8!important}.text-deep-purple-9{color:#4527a0!important}.text-deep-purple-10{color:#311b92!important}.text-deep-purple-11{color:#b388ff!important}.text-deep-purple-12{color:#7c4dff!important}.text-deep-purple-13{color:#651fff!important}.text-deep-purple-14{color:#6200ea!important}.text-indigo{color:#3f51b5!important}.text-indigo-1{color:#e8eaf6!important}.text-indigo-2{color:#c5cae9!important}.text-indigo-3{color:#9fa8da!important}.text-indigo-4{color:#7986cb!important}.text-indigo-5{color:#5c6bc0!important}.text-indigo-6{color:#3f51b5!important}.text-indigo-7{color:#3949ab!important}.text-indigo-8{color:#303f9f!important}.text-indigo-9{color:#283593!important}.text-indigo-10{color:#1a237e!important}.text-indigo-11{color:#8c9eff!important}.text-indigo-12{color:#536dfe!important}.text-indigo-13{color:#3d5afe!important}.text-indigo-14{color:#304ffe!important}.text-blue{color:#2196f3!important}.text-blue-1{color:#e3f2fd!important}.text-blue-2{color:#bbdefb!important}.text-blue-3{color:#90caf9!important}.text-blue-4{color:#64b5f6!important}.text-blue-5{color:#42a5f5!important}.text-blue-6{color:#2196f3!important}.text-blue-7{color:#1e88e5!important}.text-blue-8{color:#1976d2!important}.text-blue-9{color:#1565c0!important}.text-blue-10{color:#0d47a1!important}.text-blue-11{color:#82b1ff!important}.text-blue-12{color:#448aff!important}.text-blue-13{color:#2979ff!important}.text-blue-14{color:#2962ff!important}.text-light-blue{color:#03a9f4!important}.text-light-blue-1{color:#e1f5fe!important}.text-light-blue-2{color:#b3e5fc!important}.text-light-blue-3{color:#81d4fa!important}.text-light-blue-4{color:#4fc3f7!important}.text-light-blue-5{color:#29b6f6!important}.text-light-blue-6{color:#03a9f4!important}.text-light-blue-7{color:#039be5!important}.text-light-blue-8{color:#0288d1!important}.text-light-blue-9{color:#0277bd!important}.text-light-blue-10{color:#01579b!important}.text-light-blue-11{color:#80d8ff!important}.text-light-blue-12{color:#40c4ff!important}.text-light-blue-13{color:#00b0ff!important}.text-light-blue-14{color:#0091ea!important}.text-cyan{color:#00bcd4!important}.text-cyan-1{color:#e0f7fa!important}.text-cyan-2{color:#b2ebf2!important}.text-cyan-3{color:#80deea!important}.text-cyan-4{color:#4dd0e1!important}.text-cyan-5{color:#26c6da!important}.text-cyan-6{color:#00bcd4!important}.text-cyan-7{color:#00acc1!important}.text-cyan-8{color:#0097a7!important}.text-cyan-9{color:#00838f!important}.text-cyan-10{color:#006064!important}.text-cyan-11{color:#84ffff!important}.text-cyan-12{color:#18ffff!important}.text-cyan-13{color:#00e5ff!important}.text-cyan-14{color:#00b8d4!important}.text-teal{color:#009688!important}.text-teal-1{color:#e0f2f1!important}.text-teal-2{color:#b2dfdb!important}.text-teal-3{color:#80cbc4!important}.text-teal-4{color:#4db6ac!important}.text-teal-5{color:#26a69a!important}.text-teal-6{color:#009688!important}.text-teal-7{color:#00897b!important}.text-teal-8{color:#00796b!important}.text-teal-9{color:#00695c!important}.text-teal-10{color:#004d40!important}.text-teal-11{color:#a7ffeb!important}.text-teal-12{color:#64ffda!important}.text-teal-13{color:#1de9b6!important}.text-teal-14{color:#00bfa5!important}.text-green{color:#4caf50!important}.text-green-1{color:#e8f5e9!important}.text-green-2{color:#c8e6c9!important}.text-green-3{color:#a5d6a7!important}.text-green-4{color:#81c784!important}.text-green-5{color:#66bb6a!important}.text-green-6{color:#4caf50!important}.text-green-7{color:#43a047!important}.text-green-8{color:#388e3c!important}.text-green-9{color:#2e7d32!important}.text-green-10{color:#1b5e20!important}.text-green-11{color:#b9f6ca!important}.text-green-12{color:#69f0ae!important}.text-green-13{color:#00e676!important}.text-green-14{color:#00c853!important}.text-light-green{color:#8bc34a!important}.text-light-green-1{color:#f1f8e9!important}.text-light-green-2{color:#dcedc8!important}.text-light-green-3{color:#c5e1a5!important}.text-light-green-4{color:#aed581!important}.text-light-green-5{color:#9ccc65!important}.text-light-green-6{color:#8bc34a!important}.text-light-green-7{color:#7cb342!important}.text-light-green-8{color:#689f38!important}.text-light-green-9{color:#558b2f!important}.text-light-green-10{color:#33691e!important}.text-light-green-11{color:#ccff90!important}.text-light-green-12{color:#b2ff59!important}.text-light-green-13{color:#76ff03!important}.text-light-green-14{color:#64dd17!important}.text-lime{color:#cddc39!important}.text-lime-1{color:#f9fbe7!important}.text-lime-2{color:#f0f4c3!important}.text-lime-3{color:#e6ee9c!important}.text-lime-4{color:#dce775!important}.text-lime-5{color:#d4e157!important}.text-lime-6{color:#cddc39!important}.text-lime-7{color:#c0ca33!important}.text-lime-8{color:#afb42b!important}.text-lime-9{color:#9e9d24!important}.text-lime-10{color:#827717!important}.text-lime-11{color:#f4ff81!important}.text-lime-12{color:#eeff41!important}.text-lime-13{color:#c6ff00!important}.text-lime-14{color:#aeea00!important}.text-yellow{color:#ffeb3b!important}.text-yellow-1{color:#fffde7!important}.text-yellow-2{color:#fff9c4!important}.text-yellow-3{color:#fff59d!important}.text-yellow-4{color:#fff176!important}.text-yellow-5{color:#ffee58!important}.text-yellow-6{color:#ffeb3b!important}.text-yellow-7{color:#fdd835!important}.text-yellow-8{color:#fbc02d!important}.text-yellow-9{color:#f9a825!important}.text-yellow-10{color:#f57f17!important}.text-yellow-11{color:#ffff8d!important}.text-yellow-12{color:#ff0!important}.text-yellow-13{color:#ffea00!important}.text-yellow-14{color:#ffd600!important}.text-amber{color:#ffc107!important}.text-amber-1{color:#fff8e1!important}.text-amber-2{color:#ffecb3!important}.text-amber-3{color:#ffe082!important}.text-amber-4{color:#ffd54f!important}.text-amber-5{color:#ffca28!important}.text-amber-6{color:#ffc107!important}.text-amber-7{color:#ffb300!important}.text-amber-8{color:#ffa000!important}.text-amber-9{color:#ff8f00!important}.text-amber-10{color:#ff6f00!important}.text-amber-11{color:#ffe57f!important}.text-amber-12{color:#ffd740!important}.text-amber-13{color:#ffc400!important}.text-amber-14{color:#ffab00!important}.text-orange{color:#ff9800!important}.text-orange-1{color:#fff3e0!important}.text-orange-2{color:#ffe0b2!important}.text-orange-3{color:#ffcc80!important}.text-orange-4{color:#ffb74d!important}.text-orange-5{color:#ffa726!important}.text-orange-6{color:#ff9800!important}.text-orange-7{color:#fb8c00!important}.text-orange-8{color:#f57c00!important}.text-orange-9{color:#ef6c00!important}.text-orange-10{color:#e65100!important}.text-orange-11{color:#ffd180!important}.text-orange-12{color:#ffab40!important}.text-orange-13{color:#ff9100!important}.text-orange-14{color:#ff6d00!important}.text-deep-orange{color:#ff5722!important}.text-deep-orange-1{color:#fbe9e7!important}.text-deep-orange-2{color:#ffccbc!important}.text-deep-orange-3{color:#ffab91!important}.text-deep-orange-4{color:#ff8a65!important}.text-deep-orange-5{color:#ff7043!important}.text-deep-orange-6{color:#ff5722!important}.text-deep-orange-7{color:#f4511e!important}.text-deep-orange-8{color:#e64a19!important}.text-deep-orange-9{color:#d84315!important}.text-deep-orange-10{color:#bf360c!important}.text-deep-orange-11{color:#ff9e80!important}.text-deep-orange-12{color:#ff6e40!important}.text-deep-orange-13{color:#ff3d00!important}.text-deep-orange-14{color:#dd2c00!important}.text-brown{color:#795548!important}.text-brown-1{color:#efebe9!important}.text-brown-2{color:#d7ccc8!important}.text-brown-3{color:#bcaaa4!important}.text-brown-4{color:#a1887f!important}.text-brown-5{color:#8d6e63!important}.text-brown-6{color:#795548!important}.text-brown-7{color:#6d4c41!important}.text-brown-8{color:#5d4037!important}.text-brown-9{color:#4e342e!important}.text-brown-10{color:#3e2723!important}.text-brown-11{color:#d7ccc8!important}.text-brown-12{color:#bcaaa4!important}.text-brown-13{color:#8d6e63!important}.text-brown-14{color:#5d4037!important}.text-grey{color:#9e9e9e!important}.text-grey-1{color:#fafafa!important}.text-grey-2{color:#f5f5f5!important}.text-grey-3{color:#eee!important}.text-grey-4{color:#e0e0e0!important}.text-grey-5{color:#bdbdbd!important}.text-grey-6{color:#9e9e9e!important}.text-grey-7{color:#757575!important}.text-grey-8{color:#616161!important}.text-grey-9{color:#424242!important}.text-grey-10{color:#212121!important}.text-grey-11{color:#f5f5f5!important}.text-grey-12{color:#eee!important}.text-grey-13{color:#bdbdbd!important}.text-grey-14{color:#616161!important}.text-blue-grey{color:#607d8b!important}.text-blue-grey-1{color:#eceff1!important}.text-blue-grey-2{color:#cfd8dc!important}.text-blue-grey-3{color:#b0bec5!important}.text-blue-grey-4{color:#90a4ae!important}.text-blue-grey-5{color:#78909c!important}.text-blue-grey-6{color:#607d8b!important}.text-blue-grey-7{color:#546e7a!important}.text-blue-grey-8{color:#455a64!important}.text-blue-grey-9{color:#37474f!important}.text-blue-grey-10{color:#263238!important}.text-blue-grey-11{color:#cfd8dc!important}.text-blue-grey-12{color:#b0bec5!important}.text-blue-grey-13{color:#78909c!important}.text-blue-grey-14{color:#455a64!important}[dir] .bg-red{background:#f44336!important}[dir] .bg-red-1{background:#ffebee!important}[dir] .bg-red-2{background:#ffcdd2!important}[dir] .bg-red-3{background:#ef9a9a!important}[dir] .bg-red-4{background:#e57373!important}[dir] .bg-red-5{background:#ef5350!important}[dir] .bg-red-6{background:#f44336!important}[dir] .bg-red-7{background:#e53935!important}[dir] .bg-red-8{background:#d32f2f!important}[dir] .bg-red-9{background:#c62828!important}[dir] .bg-red-10{background:#b71c1c!important}[dir] .bg-red-11{background:#ff8a80!important}[dir] .bg-red-12{background:#ff5252!important}[dir] .bg-red-13{background:#ff1744!important}[dir] .bg-red-14{background:#d50000!important}[dir] .bg-pink{background:#e91e63!important}[dir] .bg-pink-1{background:#fce4ec!important}[dir] .bg-pink-2{background:#f8bbd0!important}[dir] .bg-pink-3{background:#f48fb1!important}[dir] .bg-pink-4{background:#f06292!important}[dir] .bg-pink-5{background:#ec407a!important}[dir] .bg-pink-6{background:#e91e63!important}[dir] .bg-pink-7{background:#d81b60!important}[dir] .bg-pink-8{background:#c2185b!important}[dir] .bg-pink-9{background:#ad1457!important}[dir] .bg-pink-10{background:#880e4f!important}[dir] .bg-pink-11{background:#ff80ab!important}[dir] .bg-pink-12{background:#ff4081!important}[dir] .bg-pink-13{background:#f50057!important}[dir] .bg-pink-14{background:#c51162!important}[dir] .bg-purple{background:#9c27b0!important}[dir] .bg-purple-1{background:#f3e5f5!important}[dir] .bg-purple-2{background:#e1bee7!important}[dir] .bg-purple-3{background:#ce93d8!important}[dir] .bg-purple-4{background:#ba68c8!important}[dir] .bg-purple-5{background:#ab47bc!important}[dir] .bg-purple-6{background:#9c27b0!important}[dir] .bg-purple-7{background:#8e24aa!important}[dir] .bg-purple-8{background:#7b1fa2!important}[dir] .bg-purple-9{background:#6a1b9a!important}[dir] .bg-purple-10{background:#4a148c!important}[dir] .bg-purple-11{background:#ea80fc!important}[dir] .bg-purple-12{background:#e040fb!important}[dir] .bg-purple-13{background:#d500f9!important}[dir] .bg-purple-14{background:#a0f!important}[dir] .bg-deep-purple{background:#673ab7!important}[dir] .bg-deep-purple-1{background:#ede7f6!important}[dir] .bg-deep-purple-2{background:#d1c4e9!important}[dir] .bg-deep-purple-3{background:#b39ddb!important}[dir] .bg-deep-purple-4{background:#9575cd!important}[dir] .bg-deep-purple-5{background:#7e57c2!important}[dir] .bg-deep-purple-6{background:#673ab7!important}[dir] .bg-deep-purple-7{background:#5e35b1!important}[dir] .bg-deep-purple-8{background:#512da8!important}[dir] .bg-deep-purple-9{background:#4527a0!important}[dir] .bg-deep-purple-10{background:#311b92!important}[dir] .bg-deep-purple-11{background:#b388ff!important}[dir] .bg-deep-purple-12{background:#7c4dff!important}[dir] .bg-deep-purple-13{background:#651fff!important}[dir] .bg-deep-purple-14{background:#6200ea!important}[dir] .bg-indigo{background:#3f51b5!important}[dir] .bg-indigo-1{background:#e8eaf6!important}[dir] .bg-indigo-2{background:#c5cae9!important}[dir] .bg-indigo-3{background:#9fa8da!important}[dir] .bg-indigo-4{background:#7986cb!important}[dir] .bg-indigo-5{background:#5c6bc0!important}[dir] .bg-indigo-6{background:#3f51b5!important}[dir] .bg-indigo-7{background:#3949ab!important}[dir] .bg-indigo-8{background:#303f9f!important}[dir] .bg-indigo-9{background:#283593!important}[dir] .bg-indigo-10{background:#1a237e!important}[dir] .bg-indigo-11{background:#8c9eff!important}[dir] .bg-indigo-12{background:#536dfe!important}[dir] .bg-indigo-13{background:#3d5afe!important}[dir] .bg-indigo-14{background:#304ffe!important}[dir] .bg-blue{background:#2196f3!important}[dir] .bg-blue-1{background:#e3f2fd!important}[dir] .bg-blue-2{background:#bbdefb!important}[dir] .bg-blue-3{background:#90caf9!important}[dir] .bg-blue-4{background:#64b5f6!important}[dir] .bg-blue-5{background:#42a5f5!important}[dir] .bg-blue-6{background:#2196f3!important}[dir] .bg-blue-7{background:#1e88e5!important}[dir] .bg-blue-8{background:#1976d2!important}[dir] .bg-blue-9{background:#1565c0!important}[dir] .bg-blue-10{background:#0d47a1!important}[dir] .bg-blue-11{background:#82b1ff!important}[dir] .bg-blue-12{background:#448aff!important}[dir] .bg-blue-13{background:#2979ff!important}[dir] .bg-blue-14{background:#2962ff!important}[dir] .bg-light-blue{background:#03a9f4!important}[dir] .bg-light-blue-1{background:#e1f5fe!important}[dir] .bg-light-blue-2{background:#b3e5fc!important}[dir] .bg-light-blue-3{background:#81d4fa!important}[dir] .bg-light-blue-4{background:#4fc3f7!important}[dir] .bg-light-blue-5{background:#29b6f6!important}[dir] .bg-light-blue-6{background:#03a9f4!important}[dir] .bg-light-blue-7{background:#039be5!important}[dir] .bg-light-blue-8{background:#0288d1!important}[dir] .bg-light-blue-9{background:#0277bd!important}[dir] .bg-light-blue-10{background:#01579b!important}[dir] .bg-light-blue-11{background:#80d8ff!important}[dir] .bg-light-blue-12{background:#40c4ff!important}[dir] .bg-light-blue-13{background:#00b0ff!important}[dir] .bg-light-blue-14{background:#0091ea!important}[dir] .bg-cyan{background:#00bcd4!important}[dir] .bg-cyan-1{background:#e0f7fa!important}[dir] .bg-cyan-2{background:#b2ebf2!important}[dir] .bg-cyan-3{background:#80deea!important}[dir] .bg-cyan-4{background:#4dd0e1!important}[dir] .bg-cyan-5{background:#26c6da!important}[dir] .bg-cyan-6{background:#00bcd4!important}[dir] .bg-cyan-7{background:#00acc1!important}[dir] .bg-cyan-8{background:#0097a7!important}[dir] .bg-cyan-9{background:#00838f!important}[dir] .bg-cyan-10{background:#006064!important}[dir] .bg-cyan-11{background:#84ffff!important}[dir] .bg-cyan-12{background:#18ffff!important}[dir] .bg-cyan-13{background:#00e5ff!important}[dir] .bg-cyan-14{background:#00b8d4!important}[dir] .bg-teal{background:#009688!important}[dir] .bg-teal-1{background:#e0f2f1!important}[dir] .bg-teal-2{background:#b2dfdb!important}[dir] .bg-teal-3{background:#80cbc4!important}[dir] .bg-teal-4{background:#4db6ac!important}[dir] .bg-teal-5{background:#26a69a!important}[dir] .bg-teal-6{background:#009688!important}[dir] .bg-teal-7{background:#00897b!important}[dir] .bg-teal-8{background:#00796b!important}[dir] .bg-teal-9{background:#00695c!important}[dir] .bg-teal-10{background:#004d40!important}[dir] .bg-teal-11{background:#a7ffeb!important}[dir] .bg-teal-12{background:#64ffda!important}[dir] .bg-teal-13{background:#1de9b6!important}[dir] .bg-teal-14{background:#00bfa5!important}[dir] .bg-green{background:#4caf50!important}[dir] .bg-green-1{background:#e8f5e9!important}[dir] .bg-green-2{background:#c8e6c9!important}[dir] .bg-green-3{background:#a5d6a7!important}[dir] .bg-green-4{background:#81c784!important}[dir] .bg-green-5{background:#66bb6a!important}[dir] .bg-green-6{background:#4caf50!important}[dir] .bg-green-7{background:#43a047!important}[dir] .bg-green-8{background:#388e3c!important}[dir] .bg-green-9{background:#2e7d32!important}[dir] .bg-green-10{background:#1b5e20!important}[dir] .bg-green-11{background:#b9f6ca!important}[dir] .bg-green-12{background:#69f0ae!important}[dir] .bg-green-13{background:#00e676!important}[dir] .bg-green-14{background:#00c853!important}[dir] .bg-light-green{background:#8bc34a!important}[dir] .bg-light-green-1{background:#f1f8e9!important}[dir] .bg-light-green-2{background:#dcedc8!important}[dir] .bg-light-green-3{background:#c5e1a5!important}[dir] .bg-light-green-4{background:#aed581!important}[dir] .bg-light-green-5{background:#9ccc65!important}[dir] .bg-light-green-6{background:#8bc34a!important}[dir] .bg-light-green-7{background:#7cb342!important}[dir] .bg-light-green-8{background:#689f38!important}[dir] .bg-light-green-9{background:#558b2f!important}[dir] .bg-light-green-10{background:#33691e!important}[dir] .bg-light-green-11{background:#ccff90!important}[dir] .bg-light-green-12{background:#b2ff59!important}[dir] .bg-light-green-13{background:#76ff03!important}[dir] .bg-light-green-14{background:#64dd17!important}[dir] .bg-lime{background:#cddc39!important}[dir] .bg-lime-1{background:#f9fbe7!important}[dir] .bg-lime-2{background:#f0f4c3!important}[dir] .bg-lime-3{background:#e6ee9c!important}[dir] .bg-lime-4{background:#dce775!important}[dir] .bg-lime-5{background:#d4e157!important}[dir] .bg-lime-6{background:#cddc39!important}[dir] .bg-lime-7{background:#c0ca33!important}[dir] .bg-lime-8{background:#afb42b!important}[dir] .bg-lime-9{background:#9e9d24!important}[dir] .bg-lime-10{background:#827717!important}[dir] .bg-lime-11{background:#f4ff81!important}[dir] .bg-lime-12{background:#eeff41!important}[dir] .bg-lime-13{background:#c6ff00!important}[dir] .bg-lime-14{background:#aeea00!important}[dir] .bg-yellow{background:#ffeb3b!important}[dir] .bg-yellow-1{background:#fffde7!important}[dir] .bg-yellow-2{background:#fff9c4!important}[dir] .bg-yellow-3{background:#fff59d!important}[dir] .bg-yellow-4{background:#fff176!important}[dir] .bg-yellow-5{background:#ffee58!important}[dir] .bg-yellow-6{background:#ffeb3b!important}[dir] .bg-yellow-7{background:#fdd835!important}[dir] .bg-yellow-8{background:#fbc02d!important}[dir] .bg-yellow-9{background:#f9a825!important}[dir] .bg-yellow-10{background:#f57f17!important}[dir] .bg-yellow-11{background:#ffff8d!important}[dir] .bg-yellow-12{background:#ff0!important}[dir] .bg-yellow-13{background:#ffea00!important}[dir] .bg-yellow-14{background:#ffd600!important}[dir] .bg-amber{background:#ffc107!important}[dir] .bg-amber-1{background:#fff8e1!important}[dir] .bg-amber-2{background:#ffecb3!important}[dir] .bg-amber-3{background:#ffe082!important}[dir] .bg-amber-4{background:#ffd54f!important}[dir] .bg-amber-5{background:#ffca28!important}[dir] .bg-amber-6{background:#ffc107!important}[dir] .bg-amber-7{background:#ffb300!important}[dir] .bg-amber-8{background:#ffa000!important}[dir] .bg-amber-9{background:#ff8f00!important}[dir] .bg-amber-10{background:#ff6f00!important}[dir] .bg-amber-11{background:#ffe57f!important}[dir] .bg-amber-12{background:#ffd740!important}[dir] .bg-amber-13{background:#ffc400!important}[dir] .bg-amber-14{background:#ffab00!important}[dir] .bg-orange{background:#ff9800!important}[dir] .bg-orange-1{background:#fff3e0!important}[dir] .bg-orange-2{background:#ffe0b2!important}[dir] .bg-orange-3{background:#ffcc80!important}[dir] .bg-orange-4{background:#ffb74d!important}[dir] .bg-orange-5{background:#ffa726!important}[dir] .bg-orange-6{background:#ff9800!important}[dir] .bg-orange-7{background:#fb8c00!important}[dir] .bg-orange-8{background:#f57c00!important}[dir] .bg-orange-9{background:#ef6c00!important}[dir] .bg-orange-10{background:#e65100!important}[dir] .bg-orange-11{background:#ffd180!important}[dir] .bg-orange-12{background:#ffab40!important}[dir] .bg-orange-13{background:#ff9100!important}[dir] .bg-orange-14{background:#ff6d00!important}[dir] .bg-deep-orange{background:#ff5722!important}[dir] .bg-deep-orange-1{background:#fbe9e7!important}[dir] .bg-deep-orange-2{background:#ffccbc!important}[dir] .bg-deep-orange-3{background:#ffab91!important}[dir] .bg-deep-orange-4{background:#ff8a65!important}[dir] .bg-deep-orange-5{background:#ff7043!important}[dir] .bg-deep-orange-6{background:#ff5722!important}[dir] .bg-deep-orange-7{background:#f4511e!important}[dir] .bg-deep-orange-8{background:#e64a19!important}[dir] .bg-deep-orange-9{background:#d84315!important}[dir] .bg-deep-orange-10{background:#bf360c!important}[dir] .bg-deep-orange-11{background:#ff9e80!important}[dir] .bg-deep-orange-12{background:#ff6e40!important}[dir] .bg-deep-orange-13{background:#ff3d00!important}[dir] .bg-deep-orange-14{background:#dd2c00!important}[dir] .bg-brown{background:#795548!important}[dir] .bg-brown-1{background:#efebe9!important}[dir] .bg-brown-2{background:#d7ccc8!important}[dir] .bg-brown-3{background:#bcaaa4!important}[dir] .bg-brown-4{background:#a1887f!important}[dir] .bg-brown-5{background:#8d6e63!important}[dir] .bg-brown-6{background:#795548!important}[dir] .bg-brown-7{background:#6d4c41!important}[dir] .bg-brown-8{background:#5d4037!important}[dir] .bg-brown-9{background:#4e342e!important}[dir] .bg-brown-10{background:#3e2723!important}[dir] .bg-brown-11{background:#d7ccc8!important}[dir] .bg-brown-12{background:#bcaaa4!important}[dir] .bg-brown-13{background:#8d6e63!important}[dir] .bg-brown-14{background:#5d4037!important}[dir] .bg-grey{background:#9e9e9e!important}[dir] .bg-grey-1{background:#fafafa!important}[dir] .bg-grey-2{background:#f5f5f5!important}[dir] .bg-grey-3{background:#eee!important}[dir] .bg-grey-4{background:#e0e0e0!important}[dir] .bg-grey-5{background:#bdbdbd!important}[dir] .bg-grey-6{background:#9e9e9e!important}[dir] .bg-grey-7{background:#757575!important}[dir] .bg-grey-8{background:#616161!important}[dir] .bg-grey-9{background:#424242!important}[dir] .bg-grey-10{background:#212121!important}[dir] .bg-grey-11{background:#f5f5f5!important}[dir] .bg-grey-12{background:#eee!important}[dir] .bg-grey-13{background:#bdbdbd!important}[dir] .bg-grey-14{background:#616161!important}[dir] .bg-blue-grey{background:#607d8b!important}[dir] .bg-blue-grey-1{background:#eceff1!important}[dir] .bg-blue-grey-2{background:#cfd8dc!important}[dir] .bg-blue-grey-3{background:#b0bec5!important}[dir] .bg-blue-grey-4{background:#90a4ae!important}[dir] .bg-blue-grey-5{background:#78909c!important}[dir] .bg-blue-grey-6{background:#607d8b!important}[dir] .bg-blue-grey-7{background:#546e7a!important}[dir] .bg-blue-grey-8{background:#455a64!important}[dir] .bg-blue-grey-9{background:#37474f!important}[dir] .bg-blue-grey-10{background:#263238!important}[dir] .bg-blue-grey-11{background:#cfd8dc!important}[dir] .bg-blue-grey-12{background:#b0bec5!important}[dir] .bg-blue-grey-13{background:#78909c!important}[dir] .bg-blue-grey-14{background:#455a64!important}.shadow-transition{transition:box-shadow 0.28s cubic-bezier(0.4,0,0.2,1)!important}[dir] .shadow-1{box-shadow:0 1px 3px rgba(0,0,0,0.2),0 1px 1px rgba(0,0,0,0.14),0 2px 1px -1px rgba(0,0,0,0.12)}[dir] .shadow-up-1{box-shadow:0 -1px 3px rgba(0,0,0,0.2),0 -1px 1px rgba(0,0,0,0.14),0 -2px 1px -1px rgba(0,0,0,0.12)}[dir] .shadow-2{box-shadow:0 1px 5px rgba(0,0,0,0.2),0 2px 2px rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12)}[dir] .shadow-up-2{box-shadow:0 -1px 5px rgba(0,0,0,0.2),0 -2px 2px rgba(0,0,0,0.14),0 -3px 1px -2px rgba(0,0,0,0.12)}[dir] .shadow-3{box-shadow:0 1px 8px rgba(0,0,0,0.2),0 3px 4px rgba(0,0,0,0.14),0 3px 3px -2px rgba(0,0,0,0.12)}[dir] .shadow-up-3{box-shadow:0 -1px 8px rgba(0,0,0,0.2),0 -3px 4px rgba(0,0,0,0.14),0 -3px 3px -2px rgba(0,0,0,0.12)}[dir] .shadow-4{box-shadow:0 2px 4px -1px rgba(0,0,0,0.2),0 4px 5px rgba(0,0,0,0.14),0 1px 10px rgba(0,0,0,0.12)}[dir] .shadow-up-4{box-shadow:0 -2px 4px -1px rgba(0,0,0,0.2),0 -4px 5px rgba(0,0,0,0.14),0 -1px 10px rgba(0,0,0,0.12)}[dir] .shadow-5{box-shadow:0 3px 5px -1px rgba(0,0,0,0.2),0 5px 8px rgba(0,0,0,0.14),0 1px 14px rgba(0,0,0,0.12)}[dir] .shadow-up-5{box-shadow:0 -3px 5px -1px rgba(0,0,0,0.2),0 -5px 8px rgba(0,0,0,0.14),0 -1px 14px rgba(0,0,0,0.12)}[dir] .shadow-6{box-shadow:0 3px 5px -1px rgba(0,0,0,0.2),0 6px 10px rgba(0,0,0,0.14),0 1px 18px rgba(0,0,0,0.12)}[dir] .shadow-up-6{box-shadow:0 -3px 5px -1px rgba(0,0,0,0.2),0 -6px 10px rgba(0,0,0,0.14),0 -1px 18px rgba(0,0,0,0.12)}[dir] .shadow-7{box-shadow:0 4px 5px -2px rgba(0,0,0,0.2),0 7px 10px 1px rgba(0,0,0,0.14),0 2px 16px 1px rgba(0,0,0,0.12)}[dir] .shadow-up-7{box-shadow:0 -4px 5px -2px rgba(0,0,0,0.2),0 -7px 10px 1px rgba(0,0,0,0.14),0 -2px 16px 1px rgba(0,0,0,0.12)}[dir] .shadow-8{box-shadow:0 5px 5px -3px rgba(0,0,0,0.2),0 8px 10px 1px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12)}[dir] .shadow-up-8{box-shadow:0 -5px 5px -3px rgba(0,0,0,0.2),0 -8px 10px 1px rgba(0,0,0,0.14),0 -3px 14px 2px rgba(0,0,0,0.12)}[dir] .shadow-9{box-shadow:0 5px 6px -3px rgba(0,0,0,0.2),0 9px 12px 1px rgba(0,0,0,0.14),0 3px 16px 2px rgba(0,0,0,0.12)}[dir] .shadow-up-9{box-shadow:0 -5px 6px -3px rgba(0,0,0,0.2),0 -9px 12px 1px rgba(0,0,0,0.14),0 -3px 16px 2px rgba(0,0,0,0.12)}[dir] .shadow-10{box-shadow:0 6px 6px -3px rgba(0,0,0,0.2),0 10px 14px 1px rgba(0,0,0,0.14),0 4px 18px 3px rgba(0,0,0,0.12)}[dir] .shadow-up-10{box-shadow:0 -6px 6px -3px rgba(0,0,0,0.2),0 -10px 14px 1px rgba(0,0,0,0.14),0 -4px 18px 3px rgba(0,0,0,0.12)}[dir] .shadow-11{box-shadow:0 6px 7px -4px rgba(0,0,0,0.2),0 11px 15px 1px rgba(0,0,0,0.14),0 4px 20px 3px rgba(0,0,0,0.12)}[dir] .shadow-up-11{box-shadow:0 -6px 7px -4px rgba(0,0,0,0.2),0 -11px 15px 1px rgba(0,0,0,0.14),0 -4px 20px 3px rgba(0,0,0,0.12)}[dir] .shadow-12{box-shadow:0 7px 8px -4px rgba(0,0,0,0.2),0 12px 17px 2px rgba(0,0,0,0.14),0 5px 22px 4px rgba(0,0,0,0.12)}[dir] .shadow-up-12{box-shadow:0 -7px 8px -4px rgba(0,0,0,0.2),0 -12px 17px 2px rgba(0,0,0,0.14),0 -5px 22px 4px rgba(0,0,0,0.12)}[dir] .shadow-13{box-shadow:0 7px 8px -4px rgba(0,0,0,0.2),0 13px 19px 2px rgba(0,0,0,0.14),0 5px 24px 4px rgba(0,0,0,0.12)}[dir] .shadow-up-13{box-shadow:0 -7px 8px -4px rgba(0,0,0,0.2),0 -13px 19px 2px rgba(0,0,0,0.14),0 -5px 24px 4px rgba(0,0,0,0.12)}[dir] .shadow-14{box-shadow:0 7px 9px -4px rgba(0,0,0,0.2),0 14px 21px 2px rgba(0,0,0,0.14),0 5px 26px 4px rgba(0,0,0,0.12)}[dir] .shadow-up-14{box-shadow:0 -7px 9px -4px rgba(0,0,0,0.2),0 -14px 21px 2px rgba(0,0,0,0.14),0 -5px 26px 4px rgba(0,0,0,0.12)}[dir] .shadow-15{box-shadow:0 8px 9px -5px rgba(0,0,0,0.2),0 15px 22px 2px rgba(0,0,0,0.14),0 6px 28px 5px rgba(0,0,0,0.12)}[dir] .shadow-up-15{box-shadow:0 -8px 9px -5px rgba(0,0,0,0.2),0 -15px 22px 2px rgba(0,0,0,0.14),0 -6px 28px 5px rgba(0,0,0,0.12)}[dir] .shadow-16{box-shadow:0 8px 10px -5px rgba(0,0,0,0.2),0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12)}[dir] .shadow-up-16{box-shadow:0 -8px 10px -5px rgba(0,0,0,0.2),0 -16px 24px 2px rgba(0,0,0,0.14),0 -6px 30px 5px rgba(0,0,0,0.12)}[dir] .shadow-17{box-shadow:0 8px 11px -5px rgba(0,0,0,0.2),0 17px 26px 2px rgba(0,0,0,0.14),0 6px 32px 5px rgba(0,0,0,0.12)}[dir] .shadow-up-17{box-shadow:0 -8px 11px -5px rgba(0,0,0,0.2),0 -17px 26px 2px rgba(0,0,0,0.14),0 -6px 32px 5px rgba(0,0,0,0.12)}[dir] .shadow-18{box-shadow:0 9px 11px -5px rgba(0,0,0,0.2),0 18px 28px 2px rgba(0,0,0,0.14),0 7px 34px 6px rgba(0,0,0,0.12)}[dir] .shadow-up-18{box-shadow:0 -9px 11px -5px rgba(0,0,0,0.2),0 -18px 28px 2px rgba(0,0,0,0.14),0 -7px 34px 6px rgba(0,0,0,0.12)}[dir] .shadow-19{box-shadow:0 9px 12px -6px rgba(0,0,0,0.2),0 19px 29px 2px rgba(0,0,0,0.14),0 7px 36px 6px rgba(0,0,0,0.12)}[dir] .shadow-up-19{box-shadow:0 -9px 12px -6px rgba(0,0,0,0.2),0 -19px 29px 2px rgba(0,0,0,0.14),0 -7px 36px 6px rgba(0,0,0,0.12)}[dir] .shadow-20{box-shadow:0 10px 13px -6px rgba(0,0,0,0.2),0 20px 31px 3px rgba(0,0,0,0.14),0 8px 38px 7px rgba(0,0,0,0.12)}[dir] .shadow-up-20{box-shadow:0 -10px 13px -6px rgba(0,0,0,0.2),0 -20px 31px 3px rgba(0,0,0,0.14),0 -8px 38px 7px rgba(0,0,0,0.12)}[dir] .shadow-21{box-shadow:0 10px 13px -6px rgba(0,0,0,0.2),0 21px 33px 3px rgba(0,0,0,0.14),0 8px 40px 7px rgba(0,0,0,0.12)}[dir] .shadow-up-21{box-shadow:0 -10px 13px -6px rgba(0,0,0,0.2),0 -21px 33px 3px rgba(0,0,0,0.14),0 -8px 40px 7px rgba(0,0,0,0.12)}[dir] .shadow-22{box-shadow:0 10px 14px -6px rgba(0,0,0,0.2),0 22px 35px 3px rgba(0,0,0,0.14),0 8px 42px 7px rgba(0,0,0,0.12)}[dir] .shadow-up-22{box-shadow:0 -10px 14px -6px rgba(0,0,0,0.2),0 -22px 35px 3px rgba(0,0,0,0.14),0 -8px 42px 7px rgba(0,0,0,0.12)}[dir] .shadow-23{box-shadow:0 11px 14px -7px rgba(0,0,0,0.2),0 23px 36px 3px rgba(0,0,0,0.14),0 9px 44px 8px rgba(0,0,0,0.12)}[dir] .shadow-up-23{box-shadow:0 -11px 14px -7px rgba(0,0,0,0.2),0 -23px 36px 3px rgba(0,0,0,0.14),0 -9px 44px 8px rgba(0,0,0,0.12)}[dir] .shadow-24{box-shadow:0 11px 15px -7px rgba(0,0,0,0.2),0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12)}[dir] .shadow-up-24{box-shadow:0 -11px 15px -7px rgba(0,0,0,0.2),0 -24px 38px 3px rgba(0,0,0,0.14),0 -9px 46px 8px rgba(0,0,0,0.12)}[dir] .no-shadow,[dir] .shadow-0{box-shadow:none!important}[dir] .inset-shadow{box-shadow:inset 0 7px 9px -7px rgba(0,0,0,0.7)!important}[dir] .inset-shadow-down{box-shadow:inset 0 -7px 9px -7px rgba(0,0,0,0.7)!important}.z-marginals{z-index:2000}.z-notify{z-index:9500}.z-fullscreen{z-index:6000}.z-inherit{z-index:inherit!important}.column,.flex,.row{display:flex;flex-wrap:wrap}.column.inline,.flex.inline,.row.inline{display:inline-flex}.row.reverse{flex-direction:row-reverse}.column{flex-direction:column}.column.reverse{flex-direction:column-reverse}.wrap{flex-wrap:wrap}.no-wrap{flex-wrap:nowrap}.reverse-wrap{flex-wrap:wrap-reverse}.order-first{order:-10000}.order-last{order:10000}.order-none{order:0}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.flex-center,.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.flex-center,.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-center{align-content:center}.content-stretch{align-content:stretch}.content-between{align-content:space-between}.content-around{align-content:space-around}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}[dir=ltr] .q-gutter-none,[dir=ltr] .q-gutter-x-none{margin-left:0}[dir=rtl] .q-gutter-none,[dir=rtl] .q-gutter-x-none{margin-right:0}[dir=ltr] .q-gutter-none>*,[dir=ltr] .q-gutter-x-none>*{margin-left:0}[dir=rtl] .q-gutter-none>*,[dir=rtl] .q-gutter-x-none>*{margin-right:0}[dir] .q-gutter-none,[dir] .q-gutter-none>*,[dir] .q-gutter-y-none,[dir] .q-gutter-y-none>*{margin-top:0}[dir=ltr] .q-col-gutter-none,[dir=ltr] .q-col-gutter-x-none{margin-left:0}[dir=rtl] .q-col-gutter-none,[dir=rtl] .q-col-gutter-x-none{margin-right:0}[dir=ltr] .q-col-gutter-none>*,[dir=ltr] .q-col-gutter-x-none>*{padding-left:0}[dir=rtl] .q-col-gutter-none>*,[dir=rtl] .q-col-gutter-x-none>*{padding-right:0}[dir] .q-col-gutter-none,[dir] .q-col-gutter-y-none{margin-top:0}[dir] .q-col-gutter-none>*,[dir] .q-col-gutter-y-none>*{padding-top:0}[dir=ltr] .q-gutter-x-xs,[dir=ltr] .q-gutter-xs{margin-left:-4px}[dir=rtl] .q-gutter-x-xs,[dir=rtl] .q-gutter-xs{margin-right:-4px}[dir=ltr] .q-gutter-x-xs>*,[dir=ltr] .q-gutter-xs>*{margin-left:4px}[dir=rtl] .q-gutter-x-xs>*,[dir=rtl] .q-gutter-xs>*{margin-right:4px}[dir] .q-gutter-xs,[dir] .q-gutter-y-xs{margin-top:-4px}[dir] .q-gutter-xs>*,[dir] .q-gutter-y-xs>*{margin-top:4px}[dir=ltr] .q-col-gutter-x-xs,[dir=ltr] .q-col-gutter-xs{margin-left:-4px}[dir=rtl] .q-col-gutter-x-xs,[dir=rtl] .q-col-gutter-xs{margin-right:-4px}[dir=ltr] .q-col-gutter-x-xs>*,[dir=ltr] .q-col-gutter-xs>*{padding-left:4px}[dir=rtl] .q-col-gutter-x-xs>*,[dir=rtl] .q-col-gutter-xs>*{padding-right:4px}[dir] .q-col-gutter-xs,[dir] .q-col-gutter-y-xs{margin-top:-4px}[dir] .q-col-gutter-xs>*,[dir] .q-col-gutter-y-xs>*{padding-top:4px}[dir=ltr] .q-gutter-sm,[dir=ltr] .q-gutter-x-sm{margin-left:-8px}[dir=rtl] .q-gutter-sm,[dir=rtl] .q-gutter-x-sm{margin-right:-8px}[dir=ltr] .q-gutter-sm>*,[dir=ltr] .q-gutter-x-sm>*{margin-left:8px}[dir=rtl] .q-gutter-sm>*,[dir=rtl] .q-gutter-x-sm>*{margin-right:8px}[dir] .q-gutter-sm,[dir] .q-gutter-y-sm{margin-top:-8px}[dir] .q-gutter-sm>*,[dir] .q-gutter-y-sm>*{margin-top:8px}[dir=ltr] .q-col-gutter-sm,[dir=ltr] .q-col-gutter-x-sm{margin-left:-8px}[dir=rtl] .q-col-gutter-sm,[dir=rtl] .q-col-gutter-x-sm{margin-right:-8px}[dir=ltr] .q-col-gutter-sm>*,[dir=ltr] .q-col-gutter-x-sm>*{padding-left:8px}[dir=rtl] .q-col-gutter-sm>*,[dir=rtl] .q-col-gutter-x-sm>*{padding-right:8px}[dir] .q-col-gutter-sm,[dir] .q-col-gutter-y-sm{margin-top:-8px}[dir] .q-col-gutter-sm>*,[dir] .q-col-gutter-y-sm>*{padding-top:8px}[dir=ltr] .q-gutter-md,[dir=ltr] .q-gutter-x-md{margin-left:-16px}[dir=rtl] .q-gutter-md,[dir=rtl] .q-gutter-x-md{margin-right:-16px}[dir=ltr] .q-gutter-md>*,[dir=ltr] .q-gutter-x-md>*{margin-left:16px}[dir=rtl] .q-gutter-md>*,[dir=rtl] .q-gutter-x-md>*{margin-right:16px}[dir] .q-gutter-md,[dir] .q-gutter-y-md{margin-top:-16px}[dir] .q-gutter-md>*,[dir] .q-gutter-y-md>*{margin-top:16px}[dir=ltr] .q-col-gutter-md,[dir=ltr] .q-col-gutter-x-md{margin-left:-16px}[dir=rtl] .q-col-gutter-md,[dir=rtl] .q-col-gutter-x-md{margin-right:-16px}[dir=ltr] .q-col-gutter-md>*,[dir=ltr] .q-col-gutter-x-md>*{padding-left:16px}[dir=rtl] .q-col-gutter-md>*,[dir=rtl] .q-col-gutter-x-md>*{padding-right:16px}[dir] .q-col-gutter-md,[dir] .q-col-gutter-y-md{margin-top:-16px}[dir] .q-col-gutter-md>*,[dir] .q-col-gutter-y-md>*{padding-top:16px}[dir=ltr] .q-gutter-lg,[dir=ltr] .q-gutter-x-lg{margin-left:-24px}[dir=rtl] .q-gutter-lg,[dir=rtl] .q-gutter-x-lg{margin-right:-24px}[dir=ltr] .q-gutter-lg>*,[dir=ltr] .q-gutter-x-lg>*{margin-left:24px}[dir=rtl] .q-gutter-lg>*,[dir=rtl] .q-gutter-x-lg>*{margin-right:24px}[dir] .q-gutter-lg,[dir] .q-gutter-y-lg{margin-top:-24px}[dir] .q-gutter-lg>*,[dir] .q-gutter-y-lg>*{margin-top:24px}[dir=ltr] .q-col-gutter-lg,[dir=ltr] .q-col-gutter-x-lg{margin-left:-24px}[dir=rtl] .q-col-gutter-lg,[dir=rtl] .q-col-gutter-x-lg{margin-right:-24px}[dir=ltr] .q-col-gutter-lg>*,[dir=ltr] .q-col-gutter-x-lg>*{padding-left:24px}[dir=rtl] .q-col-gutter-lg>*,[dir=rtl] .q-col-gutter-x-lg>*{padding-right:24px}[dir] .q-col-gutter-lg,[dir] .q-col-gutter-y-lg{margin-top:-24px}[dir] .q-col-gutter-lg>*,[dir] .q-col-gutter-y-lg>*{padding-top:24px}[dir=ltr] .q-gutter-x-xl,[dir=ltr] .q-gutter-xl{margin-left:-48px}[dir=rtl] .q-gutter-x-xl,[dir=rtl] .q-gutter-xl{margin-right:-48px}[dir=ltr] .q-gutter-x-xl>*,[dir=ltr] .q-gutter-xl>*{margin-left:48px}[dir=rtl] .q-gutter-x-xl>*,[dir=rtl] .q-gutter-xl>*{margin-right:48px}[dir] .q-gutter-xl,[dir] .q-gutter-y-xl{margin-top:-48px}[dir] .q-gutter-xl>*,[dir] .q-gutter-y-xl>*{margin-top:48px}[dir=ltr] .q-col-gutter-x-xl,[dir=ltr] .q-col-gutter-xl{margin-left:-48px}[dir=rtl] .q-col-gutter-x-xl,[dir=rtl] .q-col-gutter-xl{margin-right:-48px}[dir=ltr] .q-col-gutter-x-xl>*,[dir=ltr] .q-col-gutter-xl>*{padding-left:48px}[dir=rtl] .q-col-gutter-x-xl>*,[dir=rtl] .q-col-gutter-xl>*{padding-right:48px}[dir] .q-col-gutter-xl,[dir] .q-col-gutter-y-xl{margin-top:-48px}[dir] .q-col-gutter-xl>*,[dir] .q-col-gutter-y-xl>*{padding-top:48px}@media (min-width:0){.flex>.col,.flex>.col-0,.flex>.col-1,.flex>.col-2,.flex>.col-3,.flex>.col-4,.flex>.col-5,.flex>.col-6,.flex>.col-7,.flex>.col-8,.flex>.col-9,.flex>.col-10,.flex>.col-11,.flex>.col-12,.flex>.col-auto,.flex>.col-grow,.flex>.col-shrink,.flex>.col-xs,.flex>.col-xs-0,.flex>.col-xs-1,.flex>.col-xs-2,.flex>.col-xs-3,.flex>.col-xs-4,.flex>.col-xs-5,.flex>.col-xs-6,.flex>.col-xs-7,.flex>.col-xs-8,.flex>.col-xs-9,.flex>.col-xs-10,.flex>.col-xs-11,.flex>.col-xs-12,.flex>.col-xs-auto,.flex>.col-xs-grow,.flex>.col-xs-shrink,.row>.col,.row>.col-0,.row>.col-1,.row>.col-2,.row>.col-3,.row>.col-4,.row>.col-5,.row>.col-6,.row>.col-7,.row>.col-8,.row>.col-9,.row>.col-10,.row>.col-11,.row>.col-12,.row>.col-auto,.row>.col-grow,.row>.col-shrink,.row>.col-xs,.row>.col-xs-0,.row>.col-xs-1,.row>.col-xs-2,.row>.col-xs-3,.row>.col-xs-4,.row>.col-xs-5,.row>.col-xs-6,.row>.col-xs-7,.row>.col-xs-8,.row>.col-xs-9,.row>.col-xs-10,.row>.col-xs-11,.row>.col-xs-12,.row>.col-xs-auto,.row>.col-xs-grow,.row>.col-xs-shrink{width:auto;min-width:0;max-width:100%}.column>.col,.column>.col-0,.column>.col-1,.column>.col-2,.column>.col-3,.column>.col-4,.column>.col-5,.column>.col-6,.column>.col-7,.column>.col-8,.column>.col-9,.column>.col-10,.column>.col-11,.column>.col-12,.column>.col-auto,.column>.col-grow,.column>.col-shrink,.column>.col-xs,.column>.col-xs-0,.column>.col-xs-1,.column>.col-xs-2,.column>.col-xs-3,.column>.col-xs-4,.column>.col-xs-5,.column>.col-xs-6,.column>.col-xs-7,.column>.col-xs-8,.column>.col-xs-9,.column>.col-xs-10,.column>.col-xs-11,.column>.col-xs-12,.column>.col-xs-auto,.column>.col-xs-grow,.column>.col-xs-shrink,.flex>.col,.flex>.col-0,.flex>.col-1,.flex>.col-2,.flex>.col-3,.flex>.col-4,.flex>.col-5,.flex>.col-6,.flex>.col-7,.flex>.col-8,.flex>.col-9,.flex>.col-10,.flex>.col-11,.flex>.col-12,.flex>.col-auto,.flex>.col-grow,.flex>.col-shrink,.flex>.col-xs,.flex>.col-xs-0,.flex>.col-xs-1,.flex>.col-xs-2,.flex>.col-xs-3,.flex>.col-xs-4,.flex>.col-xs-5,.flex>.col-xs-6,.flex>.col-xs-7,.flex>.col-xs-8,.flex>.col-xs-9,.flex>.col-xs-10,.flex>.col-xs-11,.flex>.col-xs-12,.flex>.col-xs-auto,.flex>.col-xs-grow,.flex>.col-xs-shrink{height:auto;min-height:0;max-height:100%}.col,.col-xs{flex:10000 1 0%}.col-0,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-xs-0,.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-auto{flex:0 0 auto}.col-grow,.col-xs-grow{flex:1 0 auto}.col-shrink,.col-xs-shrink{flex:0 1 auto}.row>.col-0,.row>.col-xs-0{height:auto;width:0%}[dir=ltr] .row>.offset-0,[dir=ltr] .row>.offset-xs-0{margin-left:0%}[dir=rtl] .row>.offset-0,[dir=rtl] .row>.offset-xs-0{margin-right:0%}.column>.col-0,.column>.col-xs-0{height:0%;width:auto}.row>.col-1,.row>.col-xs-1{height:auto;width:8.3333%}[dir=ltr] .row>.offset-1,[dir=ltr] .row>.offset-xs-1{margin-left:8.3333%}[dir=rtl] .row>.offset-1,[dir=rtl] .row>.offset-xs-1{margin-right:8.3333%}.column>.col-1,.column>.col-xs-1{height:8.3333%;width:auto}.row>.col-2,.row>.col-xs-2{height:auto;width:16.6667%}[dir=ltr] .row>.offset-2,[dir=ltr] .row>.offset-xs-2{margin-left:16.6667%}[dir=rtl] .row>.offset-2,[dir=rtl] .row>.offset-xs-2{margin-right:16.6667%}.column>.col-2,.column>.col-xs-2{height:16.6667%;width:auto}.row>.col-3,.row>.col-xs-3{height:auto;width:25%}[dir=ltr] .row>.offset-3,[dir=ltr] .row>.offset-xs-3{margin-left:25%}[dir=rtl] .row>.offset-3,[dir=rtl] .row>.offset-xs-3{margin-right:25%}.column>.col-3,.column>.col-xs-3{height:25%;width:auto}.row>.col-4,.row>.col-xs-4{height:auto;width:33.3333%}[dir=ltr] .row>.offset-4,[dir=ltr] .row>.offset-xs-4{margin-left:33.3333%}[dir=rtl] .row>.offset-4,[dir=rtl] .row>.offset-xs-4{margin-right:33.3333%}.column>.col-4,.column>.col-xs-4{height:33.3333%;width:auto}.row>.col-5,.row>.col-xs-5{height:auto;width:41.6667%}[dir=ltr] .row>.offset-5,[dir=ltr] .row>.offset-xs-5{margin-left:41.6667%}[dir=rtl] .row>.offset-5,[dir=rtl] .row>.offset-xs-5{margin-right:41.6667%}.column>.col-5,.column>.col-xs-5{height:41.6667%;width:auto}.row>.col-6,.row>.col-xs-6{height:auto;width:50%}[dir=ltr] .row>.offset-6,[dir=ltr] .row>.offset-xs-6{margin-left:50%}[dir=rtl] .row>.offset-6,[dir=rtl] .row>.offset-xs-6{margin-right:50%}.column>.col-6,.column>.col-xs-6{height:50%;width:auto}.row>.col-7,.row>.col-xs-7{height:auto;width:58.3333%}[dir=ltr] .row>.offset-7,[dir=ltr] .row>.offset-xs-7{margin-left:58.3333%}[dir=rtl] .row>.offset-7,[dir=rtl] .row>.offset-xs-7{margin-right:58.3333%}.column>.col-7,.column>.col-xs-7{height:58.3333%;width:auto}.row>.col-8,.row>.col-xs-8{height:auto;width:66.6667%}[dir=ltr] .row>.offset-8,[dir=ltr] .row>.offset-xs-8{margin-left:66.6667%}[dir=rtl] .row>.offset-8,[dir=rtl] .row>.offset-xs-8{margin-right:66.6667%}.column>.col-8,.column>.col-xs-8{height:66.6667%;width:auto}.row>.col-9,.row>.col-xs-9{height:auto;width:75%}[dir=ltr] .row>.offset-9,[dir=ltr] .row>.offset-xs-9{margin-left:75%}[dir=rtl] .row>.offset-9,[dir=rtl] .row>.offset-xs-9{margin-right:75%}.column>.col-9,.column>.col-xs-9{height:75%;width:auto}.row>.col-10,.row>.col-xs-10{height:auto;width:83.3333%}[dir=ltr] .row>.offset-10,[dir=ltr] .row>.offset-xs-10{margin-left:83.3333%}[dir=rtl] .row>.offset-10,[dir=rtl] .row>.offset-xs-10{margin-right:83.3333%}.column>.col-10,.column>.col-xs-10{height:83.3333%;width:auto}.row>.col-11,.row>.col-xs-11{height:auto;width:91.6667%}[dir=ltr] .row>.offset-11,[dir=ltr] .row>.offset-xs-11{margin-left:91.6667%}[dir=rtl] .row>.offset-11,[dir=rtl] .row>.offset-xs-11{margin-right:91.6667%}.column>.col-11,.column>.col-xs-11{height:91.6667%;width:auto}.row>.col-12,.row>.col-xs-12{height:auto;width:100%}[dir=ltr] .row>.offset-12,[dir=ltr] .row>.offset-xs-12{margin-left:100%}[dir=rtl] .row>.offset-12,[dir=rtl] .row>.offset-xs-12{margin-right:100%}.column>.col-12,.column>.col-xs-12{height:100%;width:auto}.row>.col-all{height:auto;flex:0 0 100%}}@media (min-width:600px){.flex>.col-sm,.flex>.col-sm-0,.flex>.col-sm-1,.flex>.col-sm-2,.flex>.col-sm-3,.flex>.col-sm-4,.flex>.col-sm-5,.flex>.col-sm-6,.flex>.col-sm-7,.flex>.col-sm-8,.flex>.col-sm-9,.flex>.col-sm-10,.flex>.col-sm-11,.flex>.col-sm-12,.flex>.col-sm-auto,.flex>.col-sm-grow,.flex>.col-sm-shrink,.row>.col-sm,.row>.col-sm-0,.row>.col-sm-1,.row>.col-sm-2,.row>.col-sm-3,.row>.col-sm-4,.row>.col-sm-5,.row>.col-sm-6,.row>.col-sm-7,.row>.col-sm-8,.row>.col-sm-9,.row>.col-sm-10,.row>.col-sm-11,.row>.col-sm-12,.row>.col-sm-auto,.row>.col-sm-grow,.row>.col-sm-shrink{width:auto;min-width:0;max-width:100%}.column>.col-sm,.column>.col-sm-0,.column>.col-sm-1,.column>.col-sm-2,.column>.col-sm-3,.column>.col-sm-4,.column>.col-sm-5,.column>.col-sm-6,.column>.col-sm-7,.column>.col-sm-8,.column>.col-sm-9,.column>.col-sm-10,.column>.col-sm-11,.column>.col-sm-12,.column>.col-sm-auto,.column>.col-sm-grow,.column>.col-sm-shrink,.flex>.col-sm,.flex>.col-sm-0,.flex>.col-sm-1,.flex>.col-sm-2,.flex>.col-sm-3,.flex>.col-sm-4,.flex>.col-sm-5,.flex>.col-sm-6,.flex>.col-sm-7,.flex>.col-sm-8,.flex>.col-sm-9,.flex>.col-sm-10,.flex>.col-sm-11,.flex>.col-sm-12,.flex>.col-sm-auto,.flex>.col-sm-grow,.flex>.col-sm-shrink{height:auto;min-height:0;max-height:100%}.col-sm{flex:10000 1 0%}.col-sm-0,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto{flex:0 0 auto}.col-sm-grow{flex:1 0 auto}.col-sm-shrink{flex:0 1 auto}.row>.col-sm-0{height:auto;width:0%}[dir=ltr] .row>.offset-sm-0{margin-left:0%}[dir=rtl] .row>.offset-sm-0{margin-right:0%}.column>.col-sm-0{height:0%;width:auto}.row>.col-sm-1{height:auto;width:8.3333%}[dir=ltr] .row>.offset-sm-1{margin-left:8.3333%}[dir=rtl] .row>.offset-sm-1{margin-right:8.3333%}.column>.col-sm-1{height:8.3333%;width:auto}.row>.col-sm-2{height:auto;width:16.6667%}[dir=ltr] .row>.offset-sm-2{margin-left:16.6667%}[dir=rtl] .row>.offset-sm-2{margin-right:16.6667%}.column>.col-sm-2{height:16.6667%;width:auto}.row>.col-sm-3{height:auto;width:25%}[dir=ltr] .row>.offset-sm-3{margin-left:25%}[dir=rtl] .row>.offset-sm-3{margin-right:25%}.column>.col-sm-3{height:25%;width:auto}.row>.col-sm-4{height:auto;width:33.3333%}[dir=ltr] .row>.offset-sm-4{margin-left:33.3333%}[dir=rtl] .row>.offset-sm-4{margin-right:33.3333%}.column>.col-sm-4{height:33.3333%;width:auto}.row>.col-sm-5{height:auto;width:41.6667%}[dir=ltr] .row>.offset-sm-5{margin-left:41.6667%}[dir=rtl] .row>.offset-sm-5{margin-right:41.6667%}.column>.col-sm-5{height:41.6667%;width:auto}.row>.col-sm-6{height:auto;width:50%}[dir=ltr] .row>.offset-sm-6{margin-left:50%}[dir=rtl] .row>.offset-sm-6{margin-right:50%}.column>.col-sm-6{height:50%;width:auto}.row>.col-sm-7{height:auto;width:58.3333%}[dir=ltr] .row>.offset-sm-7{margin-left:58.3333%}[dir=rtl] .row>.offset-sm-7{margin-right:58.3333%}.column>.col-sm-7{height:58.3333%;width:auto}.row>.col-sm-8{height:auto;width:66.6667%}[dir=ltr] .row>.offset-sm-8{margin-left:66.6667%}[dir=rtl] .row>.offset-sm-8{margin-right:66.6667%}.column>.col-sm-8{height:66.6667%;width:auto}.row>.col-sm-9{height:auto;width:75%}[dir=ltr] .row>.offset-sm-9{margin-left:75%}[dir=rtl] .row>.offset-sm-9{margin-right:75%}.column>.col-sm-9{height:75%;width:auto}.row>.col-sm-10{height:auto;width:83.3333%}[dir=ltr] .row>.offset-sm-10{margin-left:83.3333%}[dir=rtl] .row>.offset-sm-10{margin-right:83.3333%}.column>.col-sm-10{height:83.3333%;width:auto}.row>.col-sm-11{height:auto;width:91.6667%}[dir=ltr] .row>.offset-sm-11{margin-left:91.6667%}[dir=rtl] .row>.offset-sm-11{margin-right:91.6667%}.column>.col-sm-11{height:91.6667%;width:auto}.row>.col-sm-12{height:auto;width:100%}[dir=ltr] .row>.offset-sm-12{margin-left:100%}[dir=rtl] .row>.offset-sm-12{margin-right:100%}.column>.col-sm-12{height:100%;width:auto}}@media (min-width:1024px){.flex>.col-md,.flex>.col-md-0,.flex>.col-md-1,.flex>.col-md-2,.flex>.col-md-3,.flex>.col-md-4,.flex>.col-md-5,.flex>.col-md-6,.flex>.col-md-7,.flex>.col-md-8,.flex>.col-md-9,.flex>.col-md-10,.flex>.col-md-11,.flex>.col-md-12,.flex>.col-md-auto,.flex>.col-md-grow,.flex>.col-md-shrink,.row>.col-md,.row>.col-md-0,.row>.col-md-1,.row>.col-md-2,.row>.col-md-3,.row>.col-md-4,.row>.col-md-5,.row>.col-md-6,.row>.col-md-7,.row>.col-md-8,.row>.col-md-9,.row>.col-md-10,.row>.col-md-11,.row>.col-md-12,.row>.col-md-auto,.row>.col-md-grow,.row>.col-md-shrink{width:auto;min-width:0;max-width:100%}.column>.col-md,.column>.col-md-0,.column>.col-md-1,.column>.col-md-2,.column>.col-md-3,.column>.col-md-4,.column>.col-md-5,.column>.col-md-6,.column>.col-md-7,.column>.col-md-8,.column>.col-md-9,.column>.col-md-10,.column>.col-md-11,.column>.col-md-12,.column>.col-md-auto,.column>.col-md-grow,.column>.col-md-shrink,.flex>.col-md,.flex>.col-md-0,.flex>.col-md-1,.flex>.col-md-2,.flex>.col-md-3,.flex>.col-md-4,.flex>.col-md-5,.flex>.col-md-6,.flex>.col-md-7,.flex>.col-md-8,.flex>.col-md-9,.flex>.col-md-10,.flex>.col-md-11,.flex>.col-md-12,.flex>.col-md-auto,.flex>.col-md-grow,.flex>.col-md-shrink{height:auto;min-height:0;max-height:100%}.col-md{flex:10000 1 0%}.col-md-0,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto{flex:0 0 auto}.col-md-grow{flex:1 0 auto}.col-md-shrink{flex:0 1 auto}.row>.col-md-0{height:auto;width:0%}[dir=ltr] .row>.offset-md-0{margin-left:0%}[dir=rtl] .row>.offset-md-0{margin-right:0%}.column>.col-md-0{height:0%;width:auto}.row>.col-md-1{height:auto;width:8.3333%}[dir=ltr] .row>.offset-md-1{margin-left:8.3333%}[dir=rtl] .row>.offset-md-1{margin-right:8.3333%}.column>.col-md-1{height:8.3333%;width:auto}.row>.col-md-2{height:auto;width:16.6667%}[dir=ltr] .row>.offset-md-2{margin-left:16.6667%}[dir=rtl] .row>.offset-md-2{margin-right:16.6667%}.column>.col-md-2{height:16.6667%;width:auto}.row>.col-md-3{height:auto;width:25%}[dir=ltr] .row>.offset-md-3{margin-left:25%}[dir=rtl] .row>.offset-md-3{margin-right:25%}.column>.col-md-3{height:25%;width:auto}.row>.col-md-4{height:auto;width:33.3333%}[dir=ltr] .row>.offset-md-4{margin-left:33.3333%}[dir=rtl] .row>.offset-md-4{margin-right:33.3333%}.column>.col-md-4{height:33.3333%;width:auto}.row>.col-md-5{height:auto;width:41.6667%}[dir=ltr] .row>.offset-md-5{margin-left:41.6667%}[dir=rtl] .row>.offset-md-5{margin-right:41.6667%}.column>.col-md-5{height:41.6667%;width:auto}.row>.col-md-6{height:auto;width:50%}[dir=ltr] .row>.offset-md-6{margin-left:50%}[dir=rtl] .row>.offset-md-6{margin-right:50%}.column>.col-md-6{height:50%;width:auto}.row>.col-md-7{height:auto;width:58.3333%}[dir=ltr] .row>.offset-md-7{margin-left:58.3333%}[dir=rtl] .row>.offset-md-7{margin-right:58.3333%}.column>.col-md-7{height:58.3333%;width:auto}.row>.col-md-8{height:auto;width:66.6667%}[dir=ltr] .row>.offset-md-8{margin-left:66.6667%}[dir=rtl] .row>.offset-md-8{margin-right:66.6667%}.column>.col-md-8{height:66.6667%;width:auto}.row>.col-md-9{height:auto;width:75%}[dir=ltr] .row>.offset-md-9{margin-left:75%}[dir=rtl] .row>.offset-md-9{margin-right:75%}.column>.col-md-9{height:75%;width:auto}.row>.col-md-10{height:auto;width:83.3333%}[dir=ltr] .row>.offset-md-10{margin-left:83.3333%}[dir=rtl] .row>.offset-md-10{margin-right:83.3333%}.column>.col-md-10{height:83.3333%;width:auto}.row>.col-md-11{height:auto;width:91.6667%}[dir=ltr] .row>.offset-md-11{margin-left:91.6667%}[dir=rtl] .row>.offset-md-11{margin-right:91.6667%}.column>.col-md-11{height:91.6667%;width:auto}.row>.col-md-12{height:auto;width:100%}[dir=ltr] .row>.offset-md-12{margin-left:100%}[dir=rtl] .row>.offset-md-12{margin-right:100%}.column>.col-md-12{height:100%;width:auto}}@media (min-width:1440px){.flex>.col-lg,.flex>.col-lg-0,.flex>.col-lg-1,.flex>.col-lg-2,.flex>.col-lg-3,.flex>.col-lg-4,.flex>.col-lg-5,.flex>.col-lg-6,.flex>.col-lg-7,.flex>.col-lg-8,.flex>.col-lg-9,.flex>.col-lg-10,.flex>.col-lg-11,.flex>.col-lg-12,.flex>.col-lg-auto,.flex>.col-lg-grow,.flex>.col-lg-shrink,.row>.col-lg,.row>.col-lg-0,.row>.col-lg-1,.row>.col-lg-2,.row>.col-lg-3,.row>.col-lg-4,.row>.col-lg-5,.row>.col-lg-6,.row>.col-lg-7,.row>.col-lg-8,.row>.col-lg-9,.row>.col-lg-10,.row>.col-lg-11,.row>.col-lg-12,.row>.col-lg-auto,.row>.col-lg-grow,.row>.col-lg-shrink{width:auto;min-width:0;max-width:100%}.column>.col-lg,.column>.col-lg-0,.column>.col-lg-1,.column>.col-lg-2,.column>.col-lg-3,.column>.col-lg-4,.column>.col-lg-5,.column>.col-lg-6,.column>.col-lg-7,.column>.col-lg-8,.column>.col-lg-9,.column>.col-lg-10,.column>.col-lg-11,.column>.col-lg-12,.column>.col-lg-auto,.column>.col-lg-grow,.column>.col-lg-shrink,.flex>.col-lg,.flex>.col-lg-0,.flex>.col-lg-1,.flex>.col-lg-2,.flex>.col-lg-3,.flex>.col-lg-4,.flex>.col-lg-5,.flex>.col-lg-6,.flex>.col-lg-7,.flex>.col-lg-8,.flex>.col-lg-9,.flex>.col-lg-10,.flex>.col-lg-11,.flex>.col-lg-12,.flex>.col-lg-auto,.flex>.col-lg-grow,.flex>.col-lg-shrink{height:auto;min-height:0;max-height:100%}.col-lg{flex:10000 1 0%}.col-lg-0,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto{flex:0 0 auto}.col-lg-grow{flex:1 0 auto}.col-lg-shrink{flex:0 1 auto}.row>.col-lg-0{height:auto;width:0%}[dir=ltr] .row>.offset-lg-0{margin-left:0%}[dir=rtl] .row>.offset-lg-0{margin-right:0%}.column>.col-lg-0{height:0%;width:auto}.row>.col-lg-1{height:auto;width:8.3333%}[dir=ltr] .row>.offset-lg-1{margin-left:8.3333%}[dir=rtl] .row>.offset-lg-1{margin-right:8.3333%}.column>.col-lg-1{height:8.3333%;width:auto}.row>.col-lg-2{height:auto;width:16.6667%}[dir=ltr] .row>.offset-lg-2{margin-left:16.6667%}[dir=rtl] .row>.offset-lg-2{margin-right:16.6667%}.column>.col-lg-2{height:16.6667%;width:auto}.row>.col-lg-3{height:auto;width:25%}[dir=ltr] .row>.offset-lg-3{margin-left:25%}[dir=rtl] .row>.offset-lg-3{margin-right:25%}.column>.col-lg-3{height:25%;width:auto}.row>.col-lg-4{height:auto;width:33.3333%}[dir=ltr] .row>.offset-lg-4{margin-left:33.3333%}[dir=rtl] .row>.offset-lg-4{margin-right:33.3333%}.column>.col-lg-4{height:33.3333%;width:auto}.row>.col-lg-5{height:auto;width:41.6667%}[dir=ltr] .row>.offset-lg-5{margin-left:41.6667%}[dir=rtl] .row>.offset-lg-5{margin-right:41.6667%}.column>.col-lg-5{height:41.6667%;width:auto}.row>.col-lg-6{height:auto;width:50%}[dir=ltr] .row>.offset-lg-6{margin-left:50%}[dir=rtl] .row>.offset-lg-6{margin-right:50%}.column>.col-lg-6{height:50%;width:auto}.row>.col-lg-7{height:auto;width:58.3333%}[dir=ltr] .row>.offset-lg-7{margin-left:58.3333%}[dir=rtl] .row>.offset-lg-7{margin-right:58.3333%}.column>.col-lg-7{height:58.3333%;width:auto}.row>.col-lg-8{height:auto;width:66.6667%}[dir=ltr] .row>.offset-lg-8{margin-left:66.6667%}[dir=rtl] .row>.offset-lg-8{margin-right:66.6667%}.column>.col-lg-8{height:66.6667%;width:auto}.row>.col-lg-9{height:auto;width:75%}[dir=ltr] .row>.offset-lg-9{margin-left:75%}[dir=rtl] .row>.offset-lg-9{margin-right:75%}.column>.col-lg-9{height:75%;width:auto}.row>.col-lg-10{height:auto;width:83.3333%}[dir=ltr] .row>.offset-lg-10{margin-left:83.3333%}[dir=rtl] .row>.offset-lg-10{margin-right:83.3333%}.column>.col-lg-10{height:83.3333%;width:auto}.row>.col-lg-11{height:auto;width:91.6667%}[dir=ltr] .row>.offset-lg-11{margin-left:91.6667%}[dir=rtl] .row>.offset-lg-11{margin-right:91.6667%}.column>.col-lg-11{height:91.6667%;width:auto}.row>.col-lg-12{height:auto;width:100%}[dir=ltr] .row>.offset-lg-12{margin-left:100%}[dir=rtl] .row>.offset-lg-12{margin-right:100%}.column>.col-lg-12{height:100%;width:auto}}@media (min-width:1920px){.flex>.col-xl,.flex>.col-xl-0,.flex>.col-xl-1,.flex>.col-xl-2,.flex>.col-xl-3,.flex>.col-xl-4,.flex>.col-xl-5,.flex>.col-xl-6,.flex>.col-xl-7,.flex>.col-xl-8,.flex>.col-xl-9,.flex>.col-xl-10,.flex>.col-xl-11,.flex>.col-xl-12,.flex>.col-xl-auto,.flex>.col-xl-grow,.flex>.col-xl-shrink,.row>.col-xl,.row>.col-xl-0,.row>.col-xl-1,.row>.col-xl-2,.row>.col-xl-3,.row>.col-xl-4,.row>.col-xl-5,.row>.col-xl-6,.row>.col-xl-7,.row>.col-xl-8,.row>.col-xl-9,.row>.col-xl-10,.row>.col-xl-11,.row>.col-xl-12,.row>.col-xl-auto,.row>.col-xl-grow,.row>.col-xl-shrink{width:auto;min-width:0;max-width:100%}.column>.col-xl,.column>.col-xl-0,.column>.col-xl-1,.column>.col-xl-2,.column>.col-xl-3,.column>.col-xl-4,.column>.col-xl-5,.column>.col-xl-6,.column>.col-xl-7,.column>.col-xl-8,.column>.col-xl-9,.column>.col-xl-10,.column>.col-xl-11,.column>.col-xl-12,.column>.col-xl-auto,.column>.col-xl-grow,.column>.col-xl-shrink,.flex>.col-xl,.flex>.col-xl-0,.flex>.col-xl-1,.flex>.col-xl-2,.flex>.col-xl-3,.flex>.col-xl-4,.flex>.col-xl-5,.flex>.col-xl-6,.flex>.col-xl-7,.flex>.col-xl-8,.flex>.col-xl-9,.flex>.col-xl-10,.flex>.col-xl-11,.flex>.col-xl-12,.flex>.col-xl-auto,.flex>.col-xl-grow,.flex>.col-xl-shrink{height:auto;min-height:0;max-height:100%}.col-xl{flex:10000 1 0%}.col-xl-0,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{flex:0 0 auto}.col-xl-grow{flex:1 0 auto}.col-xl-shrink{flex:0 1 auto}.row>.col-xl-0{height:auto;width:0%}[dir=ltr] .row>.offset-xl-0{margin-left:0%}[dir=rtl] .row>.offset-xl-0{margin-right:0%}.column>.col-xl-0{height:0%;width:auto}.row>.col-xl-1{height:auto;width:8.3333%}[dir=ltr] .row>.offset-xl-1{margin-left:8.3333%}[dir=rtl] .row>.offset-xl-1{margin-right:8.3333%}.column>.col-xl-1{height:8.3333%;width:auto}.row>.col-xl-2{height:auto;width:16.6667%}[dir=ltr] .row>.offset-xl-2{margin-left:16.6667%}[dir=rtl] .row>.offset-xl-2{margin-right:16.6667%}.column>.col-xl-2{height:16.6667%;width:auto}.row>.col-xl-3{height:auto;width:25%}[dir=ltr] .row>.offset-xl-3{margin-left:25%}[dir=rtl] .row>.offset-xl-3{margin-right:25%}.column>.col-xl-3{height:25%;width:auto}.row>.col-xl-4{height:auto;width:33.3333%}[dir=ltr] .row>.offset-xl-4{margin-left:33.3333%}[dir=rtl] .row>.offset-xl-4{margin-right:33.3333%}.column>.col-xl-4{height:33.3333%;width:auto}.row>.col-xl-5{height:auto;width:41.6667%}[dir=ltr] .row>.offset-xl-5{margin-left:41.6667%}[dir=rtl] .row>.offset-xl-5{margin-right:41.6667%}.column>.col-xl-5{height:41.6667%;width:auto}.row>.col-xl-6{height:auto;width:50%}[dir=ltr] .row>.offset-xl-6{margin-left:50%}[dir=rtl] .row>.offset-xl-6{margin-right:50%}.column>.col-xl-6{height:50%;width:auto}.row>.col-xl-7{height:auto;width:58.3333%}[dir=ltr] .row>.offset-xl-7{margin-left:58.3333%}[dir=rtl] .row>.offset-xl-7{margin-right:58.3333%}.column>.col-xl-7{height:58.3333%;width:auto}.row>.col-xl-8{height:auto;width:66.6667%}[dir=ltr] .row>.offset-xl-8{margin-left:66.6667%}[dir=rtl] .row>.offset-xl-8{margin-right:66.6667%}.column>.col-xl-8{height:66.6667%;width:auto}.row>.col-xl-9{height:auto;width:75%}[dir=ltr] .row>.offset-xl-9{margin-left:75%}[dir=rtl] .row>.offset-xl-9{margin-right:75%}.column>.col-xl-9{height:75%;width:auto}.row>.col-xl-10{height:auto;width:83.3333%}[dir=ltr] .row>.offset-xl-10{margin-left:83.3333%}[dir=rtl] .row>.offset-xl-10{margin-right:83.3333%}.column>.col-xl-10{height:83.3333%;width:auto}.row>.col-xl-11{height:auto;width:91.6667%}[dir=ltr] .row>.offset-xl-11{margin-left:91.6667%}[dir=rtl] .row>.offset-xl-11{margin-right:91.6667%}.column>.col-xl-11{height:91.6667%;width:auto}.row>.col-xl-12{height:auto;width:100%}[dir=ltr] .row>.offset-xl-12{margin-left:100%}[dir=rtl] .row>.offset-xl-12{margin-right:100%}.column>.col-xl-12{height:100%;width:auto}}[dir] .rounded-borders{border-radius:4px}[dir] .border-radius-inherit{border-radius:inherit}.no-transition{transition:none!important}.transition-0{transition:0s!important}[dir] .glossy{background-image:linear-gradient(180deg,hsla(0,0%,100%,0.3),hsla(0,0%,100%,0) 50%,rgba(0,0,0,0.12) 51%,rgba(0,0,0,0.04))!important}.q-placeholder::-moz-placeholder{color:inherit;opacity:0.7}.q-placeholder:-ms-input-placeholder{color:inherit!important;opacity:0.7!important}.q-placeholder::placeholder{color:inherit;opacity:0.7}.q-body--fullscreen-mixin{position:fixed!important}.q-body--prevent-scroll{width:100vw;height:100vh;overflow-x:hidden;contain:layout size;contain:layout size style;-ms-scroll-chaining:none;overscroll-behavior:none;-webkit-overflow-scrolling:none}.q-body--prevent-scroll body{position:relative!important;overflow:hidden}.q-body--prevent-scroll .q-drawer__backdrop{width:100vw;max-height:none}.q-body--prevent-scroll[dir=rtl] .q-body--scroll-locked{transform:translateX(var(--q-scroll-lock-left))}.q-portal__container{contain:size;contain:size style}.q-portal__clone{position:fixed!important;transition:none!important;flex-shrink:0!important;opacity:0!important;z-index:-1!important}[dir] .q-portal__clone{transform:none!important}.q-focus__clone+*{position:fixed!important;transition:none!important;opacity:0!important;pointer-events:none!important}body.native-mobile .q-focus__clone+*{top:50vh}.q-no-input-spinner{-moz-appearance:textfield!important}.q-no-input-spinner::-webkit-inner-spin-button,.q-no-input-spinner::-webkit-outer-spin-button{-webkit-appearance:none}[dir] .q-no-input-spinner::-webkit-inner-spin-button,[dir] .q-no-input-spinner::-webkit-outer-spin-button{margin:0}.q-link{outline:0;text-decoration:none}.q-link--focusable:focus-visible{-webkit-text-decoration:underline dashed currentColor 1px;text-decoration:underline dashed currentColor 1px}body.electron .q-electron-drag{-webkit-user-select:none;-webkit-app-region:drag}body.electron .q-electron-drag--exception,body.electron .q-electron-drag .q-btn-item{-webkit-app-region:no-drag}img.responsive{max-width:100%;height:auto}.non-selectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.scroll{overflow:auto}.scroll,.scroll-x,.scroll-y{-webkit-overflow-scrolling:touch;will-change:scroll-position}.scroll-x{overflow-x:auto}.scroll-y{overflow-y:auto}.no-scroll{overflow:hidden!important}.no-pointer-events,.no-pointer-events--children,.no-pointer-events--children *{pointer-events:none!important}.all-pointer-events{pointer-events:all!important}[dir] .cursor-pointer{cursor:pointer!important}[dir] .cursor-not-allowed{cursor:not-allowed!important}[dir] .cursor-inherit{cursor:inherit!important}[dir] .cursor-none{cursor:none!important}[dir] [aria-busy=true]{cursor:progress}[dir] [aria-controls],[dir] [role=button]{cursor:pointer}[dir] [aria-disabled]{cursor:default}.rotate-45{transform:rotate(45deg)}.rotate-90{transform:rotate(90deg)}.rotate-135{transform:rotate(135deg)}.rotate-180{transform:rotate(180deg)}.rotate-205{transform:rotate(205deg)}.rotate-225{transform:rotate(225deg)}.rotate-270{transform:rotate(270deg)}.rotate-315{transform:rotate(315deg)}[dir] .flip-horizontal{transform:scaleX(-1)}[dir] .flip-vertical{transform:scaleY(-1)}[dir=ltr] .float-left{float:left}[dir=ltr] .float-right,[dir=rtl] .float-left{float:right}[dir=rtl] .float-right{float:left}.relative-position{position:relative}.fixed,.fixed-bottom,.fixed-bottom-left,.fixed-bottom-right,.fixed-center,.fixed-full,.fixed-left,.fixed-right,.fixed-top,.fixed-top-left,.fixed-top-right,.fullscreen{position:fixed}.absolute,.absolute-bottom,.absolute-bottom-left,.absolute-bottom-right,.absolute-center,.absolute-full,.absolute-left,.absolute-right,.absolute-top,.absolute-top-left,.absolute-top-right{position:absolute}.absolute-top,.fixed-top{top:0}[dir=ltr] .absolute-top,[dir=ltr] .fixed-top,[dir=rtl] .absolute-top,[dir=rtl] .fixed-top{left:0;right:0}.absolute-right,.fixed-right{top:0;bottom:0}[dir=ltr] .absolute-right,[dir=ltr] .fixed-right{right:0}[dir=rtl] .absolute-right,[dir=rtl] .fixed-right{left:0}.absolute-bottom,.fixed-bottom{bottom:0}[dir=ltr] .absolute-bottom,[dir=ltr] .fixed-bottom,[dir=rtl] .absolute-bottom,[dir=rtl] .fixed-bottom{right:0;left:0}.absolute-left,.fixed-left{top:0;bottom:0}[dir=ltr] .absolute-left,[dir=ltr] .fixed-left{left:0}[dir=rtl] .absolute-left,[dir=rtl] .fixed-left{right:0}.absolute-top-left,.fixed-top-left{top:0}[dir=ltr] .absolute-top-left,[dir=ltr] .fixed-top-left{left:0}[dir=rtl] .absolute-top-left,[dir=rtl] .fixed-top-left{right:0}.absolute-top-right,.fixed-top-right{top:0}[dir=ltr] .absolute-top-right,[dir=ltr] .fixed-top-right{right:0}[dir=rtl] .absolute-top-right,[dir=rtl] .fixed-top-right{left:0}.absolute-bottom-left,.fixed-bottom-left{bottom:0}[dir=ltr] .absolute-bottom-left,[dir=ltr] .fixed-bottom-left{left:0}[dir=rtl] .absolute-bottom-left,[dir=rtl] .fixed-bottom-left{right:0}.absolute-bottom-right,.fixed-bottom-right{bottom:0}[dir=ltr] .absolute-bottom-right,[dir=ltr] .fixed-bottom-right{right:0}[dir=rtl] .absolute-bottom-right,[dir=rtl] .fixed-bottom-right{left:0}.fullscreen{z-index:6000;max-width:100vw;max-height:100vh}[dir] .fullscreen{border-radius:0!important}[dir] body.q-ios-padding .fullscreen{padding-top:20px!important;padding-top:env(safe-area-inset-top)!important;padding-bottom:env(safe-area-inset-bottom)!important}.absolute-full,.fixed-full,.fullscreen{top:0;bottom:0}[dir=ltr] .absolute-full,[dir=ltr] .fixed-full,[dir=ltr] .fullscreen,[dir=rtl] .absolute-full,[dir=rtl] .fixed-full,[dir=rtl] .fullscreen{right:0;left:0}.absolute-center,.fixed-center{top:50%}[dir=ltr] .absolute-center,[dir=ltr] .fixed-center{left:50%;transform:translate(-50%,-50%)}[dir=rtl] .absolute-center,[dir=rtl] .fixed-center{right:50%;transform:translate(50%,-50%)}.vertical-top{vertical-align:top!important}.vertical-middle{vertical-align:middle!important}.vertical-bottom{vertical-align:bottom!important}[dir=ltr] .on-left{margin-right:12px}[dir=ltr] .on-right,[dir=rtl] .on-left{margin-left:12px}[dir=rtl] .on-right{margin-right:12px}:root{--q-size-xs:0;--q-size-sm:600px;--q-size-md:1024px;--q-size-lg:1440px;--q-size-xl:1920px}.fit{width:100%!important}.fit,.full-height{height:100%!important}.full-width{width:100%!important}[dir=ltr] .full-width,[dir=rtl] .full-width{margin-left:0!important;margin-right:0!important}.window-height{height:100vh!important}[dir] .window-height{margin-top:0!important;margin-bottom:0!important}.window-width{width:100vw!important}[dir=ltr] .window-width,[dir=rtl] .window-width{margin-left:0!important;margin-right:0!important}.block{display:block!important}.inline-block{display:inline-block!important}[dir] .q-pa-none{padding:0 0}[dir=ltr] .q-pl-none{padding-left:0}[dir=ltr] .q-pr-none,[dir=rtl] .q-pl-none{padding-right:0}[dir=rtl] .q-pr-none{padding-left:0}[dir] .q-pt-none,[dir] .q-py-none{padding-top:0}[dir] .q-pb-none,[dir] .q-py-none{padding-bottom:0}[dir=ltr] .q-px-none,[dir=rtl] .q-px-none{padding-left:0;padding-right:0}[dir] .q-ma-none{margin:0 0}[dir=ltr] .q-ml-none{margin-left:0}[dir=ltr] .q-mr-none,[dir=rtl] .q-ml-none{margin-right:0}[dir=rtl] .q-mr-none{margin-left:0}[dir] .q-mt-none,[dir] .q-my-none{margin-top:0}[dir] .q-mb-none,[dir] .q-my-none{margin-bottom:0}[dir=ltr] .q-mx-none,[dir=rtl] .q-mx-none{margin-left:0;margin-right:0}[dir] .q-pa-xs{padding:4px 4px}[dir=ltr] .q-pl-xs{padding-left:4px}[dir=ltr] .q-pr-xs,[dir=rtl] .q-pl-xs{padding-right:4px}[dir=rtl] .q-pr-xs{padding-left:4px}[dir] .q-pt-xs,[dir] .q-py-xs{padding-top:4px}[dir] .q-pb-xs,[dir] .q-py-xs{padding-bottom:4px}[dir=ltr] .q-px-xs,[dir=rtl] .q-px-xs{padding-left:4px;padding-right:4px}[dir] .q-ma-xs{margin:4px 4px}[dir=ltr] .q-ml-xs{margin-left:4px}[dir=ltr] .q-mr-xs,[dir=rtl] .q-ml-xs{margin-right:4px}[dir=rtl] .q-mr-xs{margin-left:4px}[dir] .q-mt-xs,[dir] .q-my-xs{margin-top:4px}[dir] .q-mb-xs,[dir] .q-my-xs{margin-bottom:4px}[dir=ltr] .q-mx-xs,[dir=rtl] .q-mx-xs{margin-left:4px;margin-right:4px}[dir] .q-pa-sm{padding:8px 8px}[dir=ltr] .q-pl-sm{padding-left:8px}[dir=ltr] .q-pr-sm,[dir=rtl] .q-pl-sm{padding-right:8px}[dir=rtl] .q-pr-sm{padding-left:8px}[dir] .q-pt-sm,[dir] .q-py-sm{padding-top:8px}[dir] .q-pb-sm,[dir] .q-py-sm{padding-bottom:8px}[dir=ltr] .q-px-sm,[dir=rtl] .q-px-sm{padding-left:8px;padding-right:8px}[dir] .q-ma-sm{margin:8px 8px}[dir=ltr] .q-ml-sm{margin-left:8px}[dir=ltr] .q-mr-sm,[dir=rtl] .q-ml-sm{margin-right:8px}[dir=rtl] .q-mr-sm{margin-left:8px}[dir] .q-mt-sm,[dir] .q-my-sm{margin-top:8px}[dir] .q-mb-sm,[dir] .q-my-sm{margin-bottom:8px}[dir=ltr] .q-mx-sm,[dir=rtl] .q-mx-sm{margin-left:8px;margin-right:8px}[dir] .q-pa-md{padding:16px 16px}[dir=ltr] .q-pl-md{padding-left:16px}[dir=ltr] .q-pr-md,[dir=rtl] .q-pl-md{padding-right:16px}[dir=rtl] .q-pr-md{padding-left:16px}[dir] .q-pt-md,[dir] .q-py-md{padding-top:16px}[dir] .q-pb-md,[dir] .q-py-md{padding-bottom:16px}[dir=ltr] .q-px-md,[dir=rtl] .q-px-md{padding-left:16px;padding-right:16px}[dir] .q-ma-md{margin:16px 16px}[dir=ltr] .q-ml-md{margin-left:16px}[dir=ltr] .q-mr-md,[dir=rtl] .q-ml-md{margin-right:16px}[dir=rtl] .q-mr-md{margin-left:16px}[dir] .q-mt-md,[dir] .q-my-md{margin-top:16px}[dir] .q-mb-md,[dir] .q-my-md{margin-bottom:16px}[dir=ltr] .q-mx-md,[dir=rtl] .q-mx-md{margin-left:16px;margin-right:16px}[dir] .q-pa-lg{padding:24px 24px}[dir=ltr] .q-pl-lg{padding-left:24px}[dir=ltr] .q-pr-lg,[dir=rtl] .q-pl-lg{padding-right:24px}[dir=rtl] .q-pr-lg{padding-left:24px}[dir] .q-pt-lg,[dir] .q-py-lg{padding-top:24px}[dir] .q-pb-lg,[dir] .q-py-lg{padding-bottom:24px}[dir=ltr] .q-px-lg,[dir=rtl] .q-px-lg{padding-left:24px;padding-right:24px}[dir] .q-ma-lg{margin:24px 24px}[dir=ltr] .q-ml-lg{margin-left:24px}[dir=ltr] .q-mr-lg,[dir=rtl] .q-ml-lg{margin-right:24px}[dir=rtl] .q-mr-lg{margin-left:24px}[dir] .q-mt-lg,[dir] .q-my-lg{margin-top:24px}[dir] .q-mb-lg,[dir] .q-my-lg{margin-bottom:24px}[dir=ltr] .q-mx-lg,[dir=rtl] .q-mx-lg{margin-left:24px;margin-right:24px}[dir] .q-pa-xl{padding:48px 48px}[dir=ltr] .q-pl-xl{padding-left:48px}[dir=ltr] .q-pr-xl,[dir=rtl] .q-pl-xl{padding-right:48px}[dir=rtl] .q-pr-xl{padding-left:48px}[dir] .q-pt-xl,[dir] .q-py-xl{padding-top:48px}[dir] .q-pb-xl,[dir] .q-py-xl{padding-bottom:48px}[dir=ltr] .q-px-xl,[dir=rtl] .q-px-xl{padding-left:48px;padding-right:48px}[dir] .q-ma-xl{margin:48px 48px}[dir=ltr] .q-ml-xl{margin-left:48px}[dir=ltr] .q-mr-xl,[dir=rtl] .q-ml-xl{margin-right:48px}[dir=rtl] .q-mr-xl{margin-left:48px}[dir] .q-mt-xl,[dir] .q-my-xl{margin-top:48px}[dir] .q-mb-xl,[dir] .q-my-xl{margin-bottom:48px}[dir=ltr] .q-mx-xl,[dir=rtl] .q-mx-xl{margin-left:48px;margin-right:48px}[dir] .q-mt-auto,[dir] .q-my-auto{margin-top:auto}[dir=ltr] .q-ml-auto{margin-left:auto}[dir=rtl] .q-ml-auto{margin-right:auto}[dir] .q-mb-auto,[dir] .q-my-auto{margin-bottom:auto}[dir=ltr] .q-mr-auto{margin-right:auto}[dir=rtl] .q-mr-auto{margin-left:auto}[dir=ltr] .q-mx-auto,[dir=rtl] .q-mx-auto{margin-left:auto;margin-right:auto}.q-touch{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;user-drag:none;-khtml-user-drag:none;-webkit-user-drag:none}.q-touch-x{touch-action:pan-x}.q-touch-y{touch-action:pan-y}.q-transition--fade-leave-active,.q-transition--flip-leave-active,.q-transition--jump-down-leave-active,.q-transition--jump-left-leave-active,.q-transition--jump-right-leave-active,.q-transition--jump-up-leave-active,.q-transition--rotate-leave-active,.q-transition--scale-leave-active,.q-transition--slide-down-leave-active,.q-transition--slide-left-leave-active,.q-transition--slide-right-leave-active,.q-transition--slide-up-leave-active{position:absolute}.q-transition--slide-down-enter-active,.q-transition--slide-down-leave-active,.q-transition--slide-left-enter-active,.q-transition--slide-left-leave-active,.q-transition--slide-right-enter-active,.q-transition--slide-right-leave-active,.q-transition--slide-up-enter-active,.q-transition--slide-up-leave-active{transition:transform 0.3s cubic-bezier(0.215,0.61,0.355,1)}[dir=ltr] .q-transition--slide-right-enter{transform:translate3d(-100%,0,0)}[dir=ltr] .q-transition--slide-right-leave-to,[dir=rtl] .q-transition--slide-right-enter{transform:translate3d(100%,0,0)}[dir=rtl] .q-transition--slide-right-leave-to{transform:translate3d(-100%,0,0)}[dir=ltr] .q-transition--slide-left-enter{transform:translate3d(100%,0,0)}[dir=ltr] .q-transition--slide-left-leave-to,[dir=rtl] .q-transition--slide-left-enter{transform:translate3d(-100%,0,0)}[dir=rtl] .q-transition--slide-left-leave-to{transform:translate3d(100%,0,0)}[dir] .q-transition--slide-up-enter{transform:translate3d(0,100%,0)}[dir] .q-transition--slide-down-enter,[dir] .q-transition--slide-up-leave-to{transform:translate3d(0,-100%,0)}[dir] .q-transition--slide-down-leave-to{transform:translate3d(0,100%,0)}.q-transition--jump-down-enter-active,.q-transition--jump-down-leave-active,.q-transition--jump-left-enter-active,.q-transition--jump-left-leave-active,.q-transition--jump-right-enter-active,.q-transition--jump-right-leave-active,.q-transition--jump-up-enter-active,.q-transition--jump-up-leave-active{transition:opacity 0.3s,transform 0.3s}.q-transition--jump-down-enter,.q-transition--jump-down-leave-to,.q-transition--jump-left-enter,.q-transition--jump-left-leave-to,.q-transition--jump-right-enter,.q-transition--jump-right-leave-to,.q-transition--jump-up-enter,.q-transition--jump-up-leave-to{opacity:0}[dir=ltr] .q-transition--jump-right-enter{transform:translate3d(-15px,0,0)}[dir=ltr] .q-transition--jump-right-leave-to,[dir=rtl] .q-transition--jump-right-enter{transform:translate3d(15px,0,0)}[dir=rtl] .q-transition--jump-right-leave-to{transform:translate3d(-15px,0,0)}[dir=ltr] .q-transition--jump-left-enter{transform:translate3d(15px,0,0)}[dir=rtl] .q-transition--jump-left-enter{transform:translate3d(-15px,0,0)}[dir=ltr] .q-transition--jump-left-leave-to{transform:translateX(-15px)}[dir=rtl] .q-transition--jump-left-leave-to{transform:translateX(15px)}[dir] .q-transition--jump-up-enter{transform:translate3d(0,15px,0)}[dir] .q-transition--jump-down-enter,[dir] .q-transition--jump-up-leave-to{transform:translate3d(0,-15px,0)}[dir] .q-transition--jump-down-leave-to{transform:translate3d(0,15px,0)}.q-transition--fade-enter-active,.q-transition--fade-leave-active{transition:opacity 0.3s ease-out}.q-transition--fade-enter,.q-transition--fade-leave,.q-transition--fade-leave-to{opacity:0}.q-transition--scale-enter-active,.q-transition--scale-leave-active{transition:opacity 0.3s,transform 0.3s cubic-bezier(0.215,0.61,0.355,1)}.q-transition--scale-enter,.q-transition--scale-leave,.q-transition--scale-leave-to{opacity:0}[dir] .q-transition--scale-enter,[dir] .q-transition--scale-leave,[dir] .q-transition--scale-leave-to{transform:scale3d(0,0,1)}.q-transition--rotate-enter-active,.q-transition--rotate-leave-active{transition:opacity 0.3s,transform 0.3s cubic-bezier(0.215,0.61,0.355,1);transform-style:preserve-3d}.q-transition--rotate-enter,.q-transition--rotate-leave,.q-transition--rotate-leave-to{opacity:0}[dir=ltr] .q-transition--rotate-enter,[dir=ltr] .q-transition--rotate-leave,[dir=ltr] .q-transition--rotate-leave-to{transform:scale3d(0,0,1) rotate3d(0,0,1,90deg)}[dir=rtl] .q-transition--rotate-enter,[dir=rtl] .q-transition--rotate-leave,[dir=rtl] .q-transition--rotate-leave-to{transform:scale3d(0,0,1) rotate3d(0,0,1,-90deg)}.q-transition--flip-down-enter-active,.q-transition--flip-down-leave-active,.q-transition--flip-left-enter-active,.q-transition--flip-left-leave-active,.q-transition--flip-right-enter-active,.q-transition--flip-right-leave-active,.q-transition--flip-up-enter-active,.q-transition--flip-up-leave-active{transition:transform 0.3s;backface-visibility:hidden}[dir=ltr] .q-transition--flip-down-enter-to,[dir=ltr] .q-transition--flip-down-leave,[dir=ltr] .q-transition--flip-left-enter-to,[dir=ltr] .q-transition--flip-left-leave,[dir=ltr] .q-transition--flip-right-enter-to,[dir=ltr] .q-transition--flip-right-leave,[dir=ltr] .q-transition--flip-up-enter-to,[dir=ltr] .q-transition--flip-up-leave{transform:perspective(400px) rotate3d(1,1,0,0deg)}[dir=rtl] .q-transition--flip-down-enter-to,[dir=rtl] .q-transition--flip-down-leave,[dir=rtl] .q-transition--flip-left-enter-to,[dir=rtl] .q-transition--flip-left-leave,[dir=rtl] .q-transition--flip-right-enter-to,[dir=rtl] .q-transition--flip-right-leave,[dir=rtl] .q-transition--flip-up-enter-to,[dir=rtl] .q-transition--flip-up-leave{transform:perspective(400px) rotate3d(1,-1,0,0deg)}[dir=ltr] .q-transition--flip-right-enter{transform:perspective(400px) rotate3d(0,1,0,-180deg)}[dir=rtl] .q-transition--flip-right-enter{transform:perspective(400px) rotate3d(0,-1,0,180deg)}[dir=ltr] .q-transition--flip-right-leave-to{transform:perspective(400px) rotate3d(0,1,0,180deg)}[dir=rtl] .q-transition--flip-right-leave-to{transform:perspective(400px) rotate3d(0,-1,0,-180deg)}[dir=ltr] .q-transition--flip-left-enter{transform:perspective(400px) rotate3d(0,1,0,180deg)}[dir=rtl] .q-transition--flip-left-enter{transform:perspective(400px) rotate3d(0,-1,0,-180deg)}[dir=ltr] .q-transition--flip-left-leave-to{transform:perspective(400px) rotate3d(0,1,0,-180deg)}[dir=rtl] .q-transition--flip-left-leave-to{transform:perspective(400px) rotate3d(0,-1,0,180deg)}[dir=ltr] .q-transition--flip-up-enter{transform:perspective(400px) rotate3d(1,0,0,-180deg)}[dir=ltr] .q-transition--flip-up-leave-to,[dir=rtl] .q-transition--flip-up-enter{transform:perspective(400px) rotate3d(1,0,0,180deg)}[dir=rtl] .q-transition--flip-up-leave-to{transform:perspective(400px) rotate3d(1,0,0,-180deg)}[dir=ltr] .q-transition--flip-down-enter{transform:perspective(400px) rotate3d(1,0,0,180deg)}[dir=ltr] .q-transition--flip-down-leave-to,[dir=rtl] .q-transition--flip-down-enter{transform:perspective(400px) rotate3d(1,0,0,-180deg)}[dir=rtl] .q-transition--flip-down-leave-to{transform:perspective(400px) rotate3d(1,0,0,180deg)}.q-transition--hide-scroll,.q-transition--hide-scroll>.q-panel:first-child{overflow:hidden!important}body{min-width:100px;min-height:100%;font-family:Roboto,-apple-system,Helvetica Neue,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;line-height:1.5;font-size:14px}h1{font-size:6rem;line-height:6rem;letter-spacing:-0.01562em}h1,h2{font-weight:300}h2{font-size:3.75rem;line-height:3.75rem;letter-spacing:-0.00833em}h3{font-size:3rem;line-height:3.125rem;letter-spacing:normal}h3,h4{font-weight:400}h4{font-size:2.125rem;line-height:2.5rem;letter-spacing:0.00735em}h5{font-size:1.5rem;font-weight:400;letter-spacing:normal}h5,h6{line-height:2rem}h6{font-size:1.25rem;font-weight:500;letter-spacing:0.0125em}[dir] p{margin:0 0 16px}.text-h1{font-size:6rem;font-weight:300;line-height:6rem;letter-spacing:-0.01562em}.text-h2{font-size:3.75rem;font-weight:300;line-height:3.75rem;letter-spacing:-0.00833em}.text-h3{font-size:3rem;font-weight:400;line-height:3.125rem;letter-spacing:normal}.text-h4{font-size:2.125rem;font-weight:400;line-height:2.5rem;letter-spacing:0.00735em}.text-h5{font-size:1.5rem;font-weight:400;line-height:2rem;letter-spacing:normal}.text-h6{font-size:1.25rem;font-weight:500;line-height:2rem;letter-spacing:0.0125em}.text-subtitle1{font-size:1rem;font-weight:400;line-height:1.75rem;letter-spacing:0.00937em}.text-subtitle2{font-size:0.875rem;font-weight:500;line-height:1.375rem;letter-spacing:0.00714em}.text-body1{font-size:1rem;font-weight:400;line-height:1.5rem;letter-spacing:0.03125em}.text-body2{font-size:0.875rem;font-weight:400;line-height:1.25rem;letter-spacing:0.01786em}.text-overline{font-size:0.75rem;font-weight:500;line-height:2rem;letter-spacing:0.16667em}.text-caption{font-size:0.75rem;font-weight:400;line-height:1.25rem;letter-spacing:0.03333em}.text-uppercase{text-transform:uppercase}.text-lowercase{text-transform:lowercase}.text-capitalize{text-transform:capitalize}[dir] .text-center{text-align:center}[dir=ltr] .text-left{text-align:left}[dir=ltr] .text-right,[dir=rtl] .text-left{text-align:right}[dir=rtl] .text-right{text-align:left}.text-justify{-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}[dir] .text-justify{text-align:justify}.text-italic{font-style:italic}.text-bold{font-weight:700}.text-no-wrap{white-space:nowrap}.text-strike{text-decoration:line-through}.text-weight-thin{font-weight:100}.text-weight-light{font-weight:300}.text-weight-regular{font-weight:400}.text-weight-medium{font-weight:500}.text-weight-bold{font-weight:700}.text-weight-bolder{font-weight:900}small{font-size:80%}big{font-size:170%}sub{bottom:-0.25em}sup{top:-0.5em}[dir] .no-margin{margin:0!important}[dir] .no-padding{padding:0!important}[dir] .no-border{border:0!important}[dir] .no-border-radius{border-radius:0!important}[dir] .no-box-shadow{box-shadow:none!important}.no-outline{outline:0!important}.ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ellipsis-2-lines,.ellipsis-3-lines{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical}.ellipsis-2-lines{-webkit-line-clamp:2}.ellipsis-3-lines{-webkit-line-clamp:3}[dir] .readonly{cursor:default!important}.disabled,.disabled *,[disabled],[disabled] *{outline:0!important}[dir] .disabled,[dir] .disabled *,[dir] [disabled],[dir] [disabled] *{cursor:not-allowed!important}.disabled,[disabled]{opacity:0.6!important}.hidden{display:none!important}.invisible{visibility:hidden!important}[dir] .transparent{background:transparent!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-hidden-y{overflow-y:hidden!important}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{width:0;height:0;display:none}.dimmed:after,.light-dimmed:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}[dir] .dimmed:after{background:rgba(0,0,0,0.4)!important}[dir] .light-dimmed:after{background:hsla(0,0%,100%,0.6)!important}.z-top{z-index:7000!important}.z-max{z-index:9998!important}body.capacitor .capacitor-hide,body.cordova .cordova-hide,body.desktop .desktop-hide,body.electron .electron-hide,body.mobile .mobile-hide,body.native-mobile .native-mobile-hide,body.platform-android .platform-android-hide,body.platform-ios .platform-ios-hide,body.touch .touch-hide,body.within-iframe .within-iframe-hide,body:not(.capacitor) .capacitor-only,body:not(.cordova) .cordova-only,body:not(.desktop) .desktop-only,body:not(.electron) .electron-only,body:not(.mobile) .mobile-only,body:not(.native-mobile) .native-mobile-only,body:not(.platform-android) .platform-android-only,body:not(.platform-ios) .platform-ios-only,body:not(.touch) .touch-only,body:not(.within-iframe) .within-iframe-only{display:none!important}@media (orientation:portrait){.orientation-landscape{display:none!important}}@media (orientation:landscape){.orientation-portrait{display:none!important}}@media screen{.print-only{display:none!important}}@media print{.print-hide{display:none!important}}@media (max-width:599.98px){.gt-lg,.gt-md,.gt-sm,.gt-xs,.lg,.md,.sm,.xl,.xs-hide{display:none!important}}@media (min-width:600px) and (max-width:1023.98px){.gt-lg,.gt-md,.gt-sm,.lg,.lt-sm,.md,.sm-hide,.xl,.xs{display:none!important}}@media (min-width:1024px) and (max-width:1439.98px){.gt-lg,.gt-md,.lg,.lt-md,.lt-sm,.md-hide,.sm,.xl,.xs{display:none!important}}@media (min-width:1440px) and (max-width:1919.98px){.gt-lg,.lg-hide,.lt-lg,.lt-md,.lt-sm,.md,.sm,.xl,.xs{display:none!important}}@media (min-width:1920px){.lg,.lt-lg,.lt-md,.lt-sm,.lt-xl,.md,.sm,.xl-hide,.xs{display:none!important}}.q-focus-helper,.q-focusable,.q-hoverable,.q-manual-focusable{outline:0}body.desktop .q-focus-helper{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;opacity:0;transition:background-color 0.3s cubic-bezier(0.25,0.8,0.5,1),opacity 0.4s cubic-bezier(0.25,0.8,0.5,1)}[dir] body.desktop .q-focus-helper{border-radius:inherit}body.desktop .q-focus-helper:after,body.desktop .q-focus-helper:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;transition:background-color 0.3s cubic-bezier(0.25,0.8,0.5,1),opacity 0.6s cubic-bezier(0.25,0.8,0.5,1)}[dir] body.desktop .q-focus-helper:after,[dir] body.desktop .q-focus-helper:before{border-radius:inherit}[dir] body.desktop .q-focus-helper:before{background:#000}[dir] body.desktop .q-focus-helper:after{background:#fff}[dir] body.desktop .q-focus-helper--rounded{border-radius:4px}[dir] body.desktop .q-focus-helper--round{border-radius:50%}body.desktop .q-focusable:focus>.q-focus-helper,body.desktop .q-hoverable:hover>.q-focus-helper,body.desktop .q-manual-focusable--focused>.q-focus-helper{opacity:0.15}[dir] body.desktop .q-focusable:focus>.q-focus-helper,[dir] body.desktop .q-hoverable:hover>.q-focus-helper,[dir] body.desktop .q-manual-focusable--focused>.q-focus-helper{background:currentColor}body.desktop .q-focusable:focus>.q-focus-helper:before,body.desktop .q-hoverable:hover>.q-focus-helper:before,body.desktop .q-manual-focusable--focused>.q-focus-helper:before{opacity:0.1}body.desktop .q-focusable:focus>.q-focus-helper:after,body.desktop .q-hoverable:hover>.q-focus-helper:after,body.desktop .q-manual-focusable--focused>.q-focus-helper:after{opacity:0.4}body.desktop .q-focusable:focus>.q-focus-helper,body.desktop .q-manual-focusable--focused>.q-focus-helper{opacity:0.22}body.desktop .q-key-group-navigation--active{outline:auto}.q-dark-auto,.q-light,body.body--dark-auto,body.body--light{color:#000;color:var(--q-color-light-text)}[dir] .q-dark-auto,[dir] .q-light,[dir] body.body--dark-auto,[dir] body.body--light{background:#fff;background:var(--q-color-light-page)}body.body--dark{color:#fff;color:var(--q-color-dark-text)}[dir] body.body--dark{background:#121212;background:var(--q-color-dark-page)}.q-dark{color:#fff;color:var(--q-color-dark-text)}[dir] .q-dark{background:#1d1d1d;background:var(--q-color-dark)}@media (prefers-color-scheme:dark){body.body--dark-auto{color:#fff;color:var(--q-color-dark-text)}[dir] body.body--dark-auto{background:#121212;background:var(--q-color-dark-page)}.q-dark-auto{color:#fff;color:var(--q-color-dark-text)}[dir] .q-dark-auto{background:#1d1d1d;background:var(--q-color-dark)}}@media (-ms-high-contrast:none),screen and (-ms-high-contrast:active){.q-item:after,.q-notification:after,.q-toolbar:after{content:"";font-size:0;visibility:collapse;display:inline;width:0}.q-banner>.q-banner__avatar{min-height:38px}.q-banner--dense>.q-banner__avatar{min-height:20px}.q-item:after{min-height:32px}.q-item--denseafter,.q-list--dense>.q-itemafter{min-height:24px}.q-toolbar:after{min-height:50px}.q-notification--standard:after{min-height:48px}.q-notification--multi-line{min-height:68px}.q-btn__wrapper,.q-menu .q-item__section--main,.q-table__middle,.q-time__content,.q-toolbar__title{flex-basis:auto}.q-banner__content{flex-basis:0!important}.q-dialog__inner>.q-banner>.q-banner__content,.q-menu>.q-banner>.q-banner__content{flex-basis:auto!important}.q-tab__content{flex-basis:auto;min-width:100%}.q-card__actions--vert{flex:0 0 auto}.column{min-width:0%}.q-item__section--avatar{min-width:56px}[dir=ltr] button.q-btn--actionable:active:hover .q-btn__wrapper{margin:-1px 1px 1px -1px}[dir=rtl] button.q-btn--actionable:active:hover .q-btn__wrapper{margin:-1px -1px 1px 1px}[dir=ltr] .q-btn-group--push>button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper{margin:1px 1px -1px -1px}[dir=rtl] .q-btn-group--push>button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper{margin:1px -1px -1px 1px}.q-btn{overflow:visible}.q-btn--wrap{flex-direction:row}.q-carousel__slide>*{max-width:100%}.q-tabs--vertical .q-tab__indicator{height:auto}.q-spinner{-webkit-animation:q-ie-spinner 2s linear infinite;animation:q-ie-spinner 2s linear infinite;transform-origin:center center;opacity:0.5}.q-spinner.q-spinner-mat .path{stroke-dasharray:89,200}.q-checkbox__indet{opacity:0}.q-checkbox__inner--indet .q-checkbox__indet{opacity:1}.q-radio__check{opacity:0}.q-radio__inner--truthy .q-radio__check{opacity:1}.q-date__main{min-height:290px!important}.q-date__months{align-items:stretch}.q-time--portrait .q-time__main{display:flex;flex-direction:column;flex-wrap:nowrap;flex:1 0 auto}.q-field__prefix,.q-field__suffix{flex:1 0 auto}[dir=ltr] .q-field__bottom--stale .q-field__messages{left:12px}[dir=rtl] .q-field__bottom--stale .q-field__messages{right:12px}[dir=ltr] .q-field--borderless .q-field__bottom--stale .q-field__messages,[dir=ltr] .q-field--standard .q-field__bottom--stale .q-field__messages{left:0}[dir=rtl] .q-field--borderless .q-field__bottom--stale .q-field__messages,[dir=rtl] .q-field--standard .q-field__bottom--stale .q-field__messages{right:0}.q-field--float .q-field__label{max-width:100%}.q-focus-helper{z-index:1}}@media (-ms-high-contrast:none) and (min-width:0),screen and (-ms-high-contrast:active) and (min-width:0){.flex>.col,.flex>.col-xs,.row>.col,.row>.col-xs{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:600px),screen and (-ms-high-contrast:active) and (min-width:600px){.flex>.col-sm,.row>.col-sm{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1024px),screen and (-ms-high-contrast:active) and (min-width:1024px){.flex>.col-md,.row>.col-md{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1440px),screen and (-ms-high-contrast:active) and (min-width:1440px){.flex>.col-lg,.row>.col-lg{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1920px),screen and (-ms-high-contrast:active) and (min-width:1920px){.flex>.col-xl,.row>.col-xl{flex-basis:auto;min-width:0%}}@supports (-ms-ime-align:auto){.q-item:after,.q-notification:after,.q-toolbar:after{content:"";font-size:0;visibility:collapse;display:inline;width:0}.q-banner>.q-banner__avatar{min-height:38px}.q-banner--dense>.q-banner__avatar{min-height:20px}.q-item:after{min-height:32px}.q-item--denseafter,.q-list--dense>.q-itemafter{min-height:24px}.q-toolbar:after{min-height:50px}.q-notification--standard:after{min-height:48px}.q-notification--multi-line{min-height:68px}.q-btn__wrapper,.q-menu .q-item__section--main,.q-table__middle,.q-time__content,.q-toolbar__title{flex-basis:auto}.q-banner__content{flex-basis:0!important}.q-dialog__inner>.q-banner>.q-banner__content,.q-menu>.q-banner>.q-banner__content{flex-basis:auto!important}.q-tab__content{flex-basis:auto;min-width:100%}.q-card__actions--vert{flex:0 0 auto}.column{min-width:0%}@media (-ms-high-contrast:none) and (min-width:0),screen and (-ms-high-contrast:active) and (min-width:0){.flex>.col,.flex>.col-xs,.row>.col,.row>.col-xs{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:600px),screen and (-ms-high-contrast:active) and (min-width:600px){.flex>.col-sm,.row>.col-sm{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1024px),screen and (-ms-high-contrast:active) and (min-width:1024px){.flex>.col-md,.row>.col-md{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1440px),screen and (-ms-high-contrast:active) and (min-width:1440px){.flex>.col-lg,.row>.col-lg{flex-basis:auto;min-width:0%}}@media (-ms-high-contrast:none) and (min-width:1920px),screen and (-ms-high-contrast:active) and (min-width:1920px){.flex>.col-xl,.row>.col-xl{flex-basis:auto;min-width:0%}}.q-item__section--avatar{min-width:56px}[dir=ltr] button.q-btn--actionable:active:hover .q-btn__wrapper{margin:-1px 1px 1px -1px}[dir=rtl] button.q-btn--actionable:active:hover .q-btn__wrapper{margin:-1px -1px 1px 1px}[dir=ltr] .q-btn-group--push>button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper{margin:1px 1px -1px -1px}[dir=rtl] .q-btn-group--push>button.q-btn--push.q-btn--actionable:active:hover .q-btn__wrapper{margin:1px -1px -1px 1px}.q-btn{overflow:visible}.q-btn--wrap{flex-direction:row}.q-carousel__slide>*{max-width:100%}.q-tabs--vertical .q-tab__indicator{height:auto}.q-spinner{-webkit-animation:q-ie-spinner 2s linear infinite;animation:q-ie-spinner 2s linear infinite;transform-origin:center center;opacity:0.5}.q-spinner.q-spinner-mat .path{stroke-dasharray:89,200}.q-checkbox__indet{opacity:0}.q-checkbox__inner--indet .q-checkbox__indet{opacity:1}.q-radio__check{opacity:0}.q-radio__inner--truthy .q-radio__check{opacity:1}.q-date__main{min-height:290px!important}.q-date__months{align-items:stretch}.q-time--portrait .q-time__main{display:flex;flex-direction:column;flex-wrap:nowrap;flex:1 0 auto}.q-field__prefix,.q-field__suffix{flex:1 0 auto}[dir=ltr] .q-field__bottom--stale .q-field__messages{left:12px}[dir=rtl] .q-field__bottom--stale .q-field__messages{right:12px}[dir=ltr] .q-field--borderless .q-field__bottom--stale .q-field__messages,[dir=ltr] .q-field--standard .q-field__bottom--stale .q-field__messages{left:0}[dir=rtl] .q-field--borderless .q-field__bottom--stale .q-field__messages,[dir=rtl] .q-field--standard .q-field__bottom--stale .q-field__messages{right:0}.q-field--float .q-field__label{max-width:100%}.q-focus-helper{z-index:1}}@-webkit-keyframes q-circular-progress-circle{0%{stroke-dasharray:1,400;stroke-dashoffset:0}50%{stroke-dasharray:400,400;stroke-dashoffset:-100}to{stroke-dasharray:400,400;stroke-dashoffset:-300}}@keyframes q-circular-progress-circle{0%{stroke-dasharray:1,400;stroke-dashoffset:0}50%{stroke-dasharray:400,400;stroke-dashoffset:-100}to{stroke-dasharray:400,400;stroke-dashoffset:-300}}@-webkit-keyframes q-expansion-done{0%{--q-exp-done:1}}@keyframes q-expansion-done{0%{--q-exp-done:1}}@-webkit-keyframes q-field-label-ltr{40%{margin-left:2px}60%,80%{margin-left:-2px}70%,90%{margin-left:2px}}@-webkit-keyframes q-field-label-rtl{40%{margin-left:2px}60%,80%{margin-left:-2px}70%,90%{margin-left:2px}}@keyframes q-field-label-ltr{40%{margin-left:2px}60%,80%{margin-left:-2px}70%,90%{margin-left:2px}}@keyframes q-field-label-rtl{40%{margin-left:2px}60%,80%{margin-left:-2px}70%,90%{margin-left:2px}}@-webkit-keyframes q-autofill{to{background:transparent;color:inherit}}@keyframes q-autofill{to{background:transparent;color:inherit}}@-webkit-keyframes q-linear-progress--indeterminate-ltr{0%{transform:translate3d(-35%,0,0) scale3d(0.35,1,1)}60%{transform:translate3d(100%,0,0) scale3d(0.9,1,1)}to{transform:translate3d(100%,0,0) scale3d(0.9,1,1)}}@-webkit-keyframes q-linear-progress--indeterminate-rtl{0%{transform:translate3d(35%,0,0) scale3d(0.35,1,1)}60%{transform:translate3d(-100%,0,0) scale3d(0.9,1,1)}to{transform:translate3d(-100%,0,0) scale3d(0.9,1,1)}}@keyframes q-linear-progress--indeterminate-ltr{0%{transform:translate3d(-35%,0,0) scale3d(0.35,1,1)}60%{transform:translate3d(100%,0,0) scale3d(0.9,1,1)}to{transform:translate3d(100%,0,0) scale3d(0.9,1,1)}}@keyframes q-linear-progress--indeterminate-rtl{0%{transform:translate3d(35%,0,0) scale3d(0.35,1,1)}60%{transform:translate3d(-100%,0,0) scale3d(0.9,1,1)}to{transform:translate3d(-100%,0,0) scale3d(0.9,1,1)}}@-webkit-keyframes q-linear-progress--indeterminate-short-ltr{0%{transform:translate3d(-101%,0,0) scale3d(1,1,1)}60%{transform:translate3d(107%,0,0) scale3d(0.01,1,1)}to{transform:translate3d(107%,0,0) scale3d(0.01,1,1)}}@-webkit-keyframes q-linear-progress--indeterminate-short-rtl{0%{transform:translate3d(101%,0,0) scale3d(1,1,1)}60%{transform:translate3d(-107%,0,0) scale3d(0.01,1,1)}to{transform:translate3d(-107%,0,0) scale3d(0.01,1,1)}}@keyframes q-linear-progress--indeterminate-short-ltr{0%{transform:translate3d(-101%,0,0) scale3d(1,1,1)}60%{transform:translate3d(107%,0,0) scale3d(0.01,1,1)}to{transform:translate3d(107%,0,0) scale3d(0.01,1,1)}}@keyframes q-linear-progress--indeterminate-short-rtl{0%{transform:translate3d(101%,0,0) scale3d(1,1,1)}60%{transform:translate3d(-107%,0,0) scale3d(0.01,1,1)}to{transform:translate3d(-107%,0,0) scale3d(0.01,1,1)}}@-webkit-keyframes q-skeleton--fade{0%{opacity:1}50%{opacity:0.4}to{opacity:1}}@keyframes q-skeleton--fade{0%{opacity:1}50%{opacity:0.4}to{opacity:1}}@-webkit-keyframes q-skeleton--pulse{0%{transform:scale(1)}50%{transform:scale(0.85)}to{transform:scale(1)}}@keyframes q-skeleton--pulse{0%{transform:scale(1)}50%{transform:scale(0.85)}to{transform:scale(1)}}@-webkit-keyframes q-skeleton--pulse-x{0%{transform:scaleX(1)}50%{transform:scaleX(0.75)}to{transform:scaleX(1)}}@keyframes q-skeleton--pulse-x{0%{transform:scaleX(1)}50%{transform:scaleX(0.75)}to{transform:scaleX(1)}}@-webkit-keyframes q-skeleton--pulse-y{0%{transform:scaleY(1)}50%{transform:scaleY(0.75)}to{transform:scaleY(1)}}@keyframes q-skeleton--pulse-y{0%{transform:scaleY(1)}50%{transform:scaleY(0.75)}to{transform:scaleY(1)}}@-webkit-keyframes q-skeleton--wave-ltr{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@-webkit-keyframes q-skeleton--wave-rtl{0%{transform:translateX(100%)}to{transform:translateX(-100%)}}@keyframes q-skeleton--wave-ltr{0%{transform:translateX(-100%)}to{transform:translateX(100%)}}@keyframes q-skeleton--wave-rtl{0%{transform:translateX(100%)}to{transform:translateX(-100%)}}@-webkit-keyframes q-spin-ltr{0%{transform:rotate3d(0,0,1,0deg)}25%{transform:rotate3d(0,0,1,90deg)}50%{transform:rotate3d(0,0,1,180deg)}75%{transform:rotate3d(0,0,1,270deg)}to{transform:rotate3d(0,0,1,359deg)}}@-webkit-keyframes q-spin-rtl{0%{transform:rotate3d(0,0,1,0deg)}25%{transform:rotate3d(0,0,1,90deg)}50%{transform:rotate3d(0,0,1,180deg)}75%{transform:rotate3d(0,0,1,270deg)}to{transform:rotate3d(0,0,1,359deg)}}@keyframes q-spin{0%{transform:rotate3d(0,0,1,0deg)}25%{transform:rotate3d(0,0,1,90deg)}50%{transform:rotate3d(0,0,1,180deg)}75%{transform:rotate3d(0,0,1,270deg)}to{transform:rotate3d(0,0,1,359deg)}}@-webkit-keyframes q-mat-dash-ltr{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-webkit-keyframes q-mat-dash-rtl{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes q-mat-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@-webkit-keyframes q-notif-badge-ltr{15%{transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@-webkit-keyframes q-notif-badge-rtl{15%{transform:translate3d(25%,0,0) rotate3d(0,0,1,5deg)}30%{transform:translate3d(-20%,0,0) rotate3d(0,0,1,-3deg)}45%{transform:translate3d(15%,0,0) rotate3d(0,0,1,3deg)}60%{transform:translate3d(-10%,0,0) rotate3d(0,0,1,-2deg)}75%{transform:translate3d(5%,0,0) rotate3d(0,0,1,1deg)}}@keyframes q-notif-badge-ltr{15%{transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes q-notif-badge-rtl{15%{transform:translate3d(25%,0,0) rotate3d(0,0,1,5deg)}30%{transform:translate3d(-20%,0,0) rotate3d(0,0,1,-3deg)}45%{transform:translate3d(15%,0,0) rotate3d(0,0,1,3deg)}60%{transform:translate3d(-10%,0,0) rotate3d(0,0,1,-2deg)}75%{transform:translate3d(5%,0,0) rotate3d(0,0,1,1deg)}}@-webkit-keyframes q-notif-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@keyframes q-notif-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@-webkit-keyframes q-scale{0%{transform:scale(1)}50%{transform:scale(1.04)}to{transform:scale(1)}}@keyframes q-scale{0%{transform:scale(1)}50%{transform:scale(1.04)}to{transform:scale(1)}}@-webkit-keyframes q-fade{0%{opacity:0}to{opacity:1}}@keyframes q-fade{0%{opacity:0}to{opacity:1}}@-webkit-keyframes q-ie-spinner{0%{opacity:0.5}50%{opacity:1}to{opacity:0.5}}@keyframes q-ie-spinner{0%{opacity:0.5}50%{opacity:1}to{opacity:0.5}} \ No newline at end of file diff --git a/dist/quasar.sass b/dist/quasar.sass new file mode 100644 index 00000000000..9b6ac09a53f --- /dev/null +++ b/dist/quasar.sass @@ -0,0 +1,8123 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +@function str-replace($string, $search, $replace: '') + $index: str-index($string, $search) + @if $index + $start: str-slice($string, 1, $index - 1) + $end: str-replace(str-slice($string, $index + str-length($search)), $search, $replace) + @return $start + $replace + $end + @return $string +@function str-fr($selector, $name, $i: '') + @return str-replace(str-replace($selector, '', $name), '', $i) +@function str-fe($selector, $name, $noProc, $i: '') + @if $noProc + @return str-fr($selector, $name, $i) + @return join(str-fr($selector, '', $i), str-fr($selector, $name, $i), $separator: comma) +$PI: 3.14159265359 +@function pow($number, $exp) + $value: 1 + @if $exp > 0 + @for $i from 1 through $exp + $value: $value * $number + @else if $exp < 0 + @for $i from 1 through -$exp + $value: $value / $number + @return $value +@function fact($number) + $value: 1 + @if $number > 0 + @for $i from 1 through $number + $value: $value * $i + @return $value +@function toFixed($number, $power) + @return round($number * $power) / $power +@function sin($angle) + $sin: 0 + + $rad: $angle / 180 * $PI + + @for $i from 0 through 25 + $sin: $sin + pow(-1, $i) * pow($rad, (2 * $i + 1)) / fact(2 * $i + 1) + @return $sin +@function cos($angle) + $cos: 0 + + $rad: $angle / 180 * $PI + + @for $i from 0 through 25 + $cos: $cos + pow(-1, $i) * pow($rad, 2 * $i) / fact(2 * $i) + @return $cos +$space-base : 16px !default +$space-x-base : $space-base !default +$space-y-base : $space-base !default +$space-none : (x: 0, y: 0) !default +$space-xs : (x: ($space-x-base * .25), y: ($space-y-base * .25)) !default +$space-sm : (x: ($space-x-base * .5), y: ($space-y-base * .5)) !default +$space-md : (x: $space-x-base, y: $space-y-base) !default +$space-lg : (x: ($space-x-base * 1.5), y: ($space-y-base * 1.5)) !default +$space-xl : (x: ($space-x-base * 3), y: ($space-y-base * 3)) !default +$spaces: ('none': $space-none, 'xs': $space-xs, 'sm': $space-sm, 'md': $space-md, 'lg': $space-lg, 'xl': $space-xl) !default +$animate-duration : .3s !default +$animate-delay : .3s !default +$animate-repeat : 1 !default +$breakpoint-xs: 599px !default +$breakpoint-sm: 1023px !default +$breakpoint-md: 1439px !default +$breakpoint-lg: 1919px !default +$flex-cols : 12 !default +$flex-gutter-xs : ($space-base * .25) !default +$flex-gutter-sm : ($space-base * .5) !default +$flex-gutter-md : $space-base !default +$flex-gutter-lg : ($space-base * 1.5) !default +$flex-gutter-xl : ($space-base * 3) !default +$body-font-size : 14px !default +$body-line-height : 1.5 !default +$flex-gutter: ('none': 0, 'xs': $flex-gutter-xs, 'sm': $flex-gutter-sm, 'md': $flex-gutter-md, 'lg': $flex-gutter-lg, 'xl': $flex-gutter-xl) !default +$sizes: ('xs': 0, 'sm': ($breakpoint-xs + 1), 'md': ($breakpoint-sm + 1), 'lg': ($breakpoint-md + 1), 'xl': ($breakpoint-lg + 1)) !default +$breakpoint-xs-max: (map-get($sizes, "sm") - 0.02) !default +$breakpoint-sm-min: map-get($sizes, "sm") !default +$breakpoint-sm-max: (map-get($sizes, "md") - 0.02) !default +$breakpoint-md-min: map-get($sizes, "md") !default +$breakpoint-md-max: (map-get($sizes, "lg") - 0.02) !default +$breakpoint-lg-min: map-get($sizes, "lg") !default +$breakpoint-lg-max: (map-get($sizes, "xl") - 0.02) !default +$breakpoint-xl-min: map-get($sizes, "xl") !default +$h1: (size: 6rem, line-height: 6rem, letter-spacing: -.01562em, weight: 300) !default +$h2: (size: 3.75rem, line-height: 3.75rem, letter-spacing: -.00833em, weight: 300) !default +$h3: (size: 3rem, line-height: 3.125rem, letter-spacing: normal, weight: 400) !default +$h4: (size: 2.125rem, line-height: 2.5rem, letter-spacing: .00735em, weight: 400) !default +$h5: (size: 1.5rem, line-height: 2rem, letter-spacing: normal, weight: 400) !default +$h6: (size: 1.25rem, line-height: 2rem, letter-spacing: .0125em, weight: 500) !default +$subtitle1: (size: 1rem, line-height: 1.75rem, letter-spacing: .00937em, weight: 400) !default +$subtitle2: (size: .875rem, line-height: 1.375rem, letter-spacing: .00714em, weight: 500) !default +$body1: (size: 1rem, line-height: 1.5rem, letter-spacing: .03125em, weight: 400) !default +$body2: (size: .875rem, line-height: 1.25rem, letter-spacing: .01786em, weight: 400) !default +$overline: (size: .75rem, line-height: 2rem, letter-spacing: .16667em, weight: 500) !default +$caption: (size: .75rem, line-height: 1.25rem, letter-spacing: .03333em, weight: 400) !default +$headings: ('h1': $h1, 'h2': $h2, 'h3': $h3, 'h4': $h4, 'h5': $h5, 'h6': $h6, 'subtitle1': $subtitle1, 'subtitle2': $subtitle2, 'body1': $body1, 'body2': $body2, 'overline': $overline, 'caption': $caption) !default +$h-tags: (h1: map-get($headings, "h1"), h2: map-get($headings, "h2"), h3: map-get($headings, "h3"), h4: map-get($headings, "h4"), h5: map-get($headings, "h5"), h6: map-get($headings, "h6")) !default +$text-weights: (thin: 100, light: 300, regular: 400, medium: 500, bold: 700, bolder: 900) !default +$primary : #1976D2 !default +$secondary : #26A69A !default +$accent : #9C27B0 !default +$light-page : #ffffff !default +$light-text : #000000 !default +$dark-page : #121212 !default +$dark-text : #ffffff !default +$dark : #1d1d1d !default +$positive : #21BA45 !default +$negative : #C10015 !default +$info : #31CCEC !default +$warning : #F2C037 !default +$dialog-plugin-light : $primary !default +$dialog-plugin-dark : #ffc107 !default +$notify-background : #323232 !default +$chip-background-light : #e0e0e0 !default +$chip-background-dark : #323232 !default +$backdrop-background : #000000 !default +$dimmed-background : rgba(0, 0, 0, .4) !default +$light-dimmed-background : rgba(255, 255, 255, .6) !default +$separator-color : rgba(0, 0, 0, .12) !default +$separator-dark-color : rgba(255, 255, 255, .28) !default +$red : #f44336 !default +$red-1 : #ffebee !default +$red-2 : #ffcdd2 !default +$red-3 : #ef9a9a !default +$red-4 : #e57373 !default +$red-5 : #ef5350 !default +$red-6 : #f44336 !default +$red-7 : #e53935 !default +$red-8 : #d32f2f !default +$red-9 : #c62828 !default +$red-10 : #b71c1c !default +$red-11 : #ff8a80 !default +$red-12 : #ff5252 !default +$red-13 : #ff1744 !default +$red-14 : #d50000 !default +$pink : #e91e63 !default +$pink-1 : #fce4ec !default +$pink-2 : #f8bbd0 !default +$pink-3 : #f48fb1 !default +$pink-4 : #f06292 !default +$pink-5 : #ec407a !default +$pink-6 : #e91e63 !default +$pink-7 : #d81b60 !default +$pink-8 : #c2185b !default +$pink-9 : #ad1457 !default +$pink-10 : #880e4f !default +$pink-11 : #ff80ab !default +$pink-12 : #ff4081 !default +$pink-13 : #f50057 !default +$pink-14 : #c51162 !default +$purple : #9c27b0 !default +$purple-1 : #f3e5f5 !default +$purple-2 : #e1bee7 !default +$purple-3 : #ce93d8 !default +$purple-4 : #ba68c8 !default +$purple-5 : #ab47bc !default +$purple-6 : #9c27b0 !default +$purple-7 : #8e24aa !default +$purple-8 : #7b1fa2 !default +$purple-9 : #6a1b9a !default +$purple-10 : #4a148c !default +$purple-11 : #ea80fc !default +$purple-12 : #e040fb !default +$purple-13 : #d500f9 !default +$purple-14 : #aa00ff !default +$deep-purple : #673ab7 !default +$deep-purple-1 : #ede7f6 !default +$deep-purple-2 : #d1c4e9 !default +$deep-purple-3 : #b39ddb !default +$deep-purple-4 : #9575cd !default +$deep-purple-5 : #7e57c2 !default +$deep-purple-6 : #673ab7 !default +$deep-purple-7 : #5e35b1 !default +$deep-purple-8 : #512da8 !default +$deep-purple-9 : #4527a0 !default +$deep-purple-10 : #311b92 !default +$deep-purple-11 : #b388ff !default +$deep-purple-12 : #7c4dff !default +$deep-purple-13 : #651fff !default +$deep-purple-14 : #6200ea !default +$indigo : #3f51b5 !default +$indigo-1 : #e8eaf6 !default +$indigo-2 : #c5cae9 !default +$indigo-3 : #9fa8da !default +$indigo-4 : #7986cb !default +$indigo-5 : #5c6bc0 !default +$indigo-6 : #3f51b5 !default +$indigo-7 : #3949ab !default +$indigo-8 : #303f9f !default +$indigo-9 : #283593 !default +$indigo-10 : #1a237e !default +$indigo-11 : #8c9eff !default +$indigo-12 : #536dfe !default +$indigo-13 : #3d5afe !default +$indigo-14 : #304ffe !default +$blue : #2196f3 !default +$blue-1 : #e3f2fd !default +$blue-2 : #bbdefb !default +$blue-3 : #90caf9 !default +$blue-4 : #64b5f6 !default +$blue-5 : #42a5f5 !default +$blue-6 : #2196f3 !default +$blue-7 : #1e88e5 !default +$blue-8 : #1976d2 !default +$blue-9 : #1565c0 !default +$blue-10 : #0d47a1 !default +$blue-11 : #82b1ff !default +$blue-12 : #448aff !default +$blue-13 : #2979ff !default +$blue-14 : #2962ff !default +$light-blue : #03a9f4 !default +$light-blue-1 : #e1f5fe !default +$light-blue-2 : #b3e5fc !default +$light-blue-3 : #81d4fa !default +$light-blue-4 : #4fc3f7 !default +$light-blue-5 : #29b6f6 !default +$light-blue-6 : #03a9f4 !default +$light-blue-7 : #039be5 !default +$light-blue-8 : #0288d1 !default +$light-blue-9 : #0277bd !default +$light-blue-10 : #01579b !default +$light-blue-11 : #80d8ff !default +$light-blue-12 : #40c4ff !default +$light-blue-13 : #00b0ff !default +$light-blue-14 : #0091ea !default +$cyan : #00bcd4 !default +$cyan-1 : #e0f7fa !default +$cyan-2 : #b2ebf2 !default +$cyan-3 : #80deea !default +$cyan-4 : #4dd0e1 !default +$cyan-5 : #26c6da !default +$cyan-6 : #00bcd4 !default +$cyan-7 : #00acc1 !default +$cyan-8 : #0097a7 !default +$cyan-9 : #00838f !default +$cyan-10 : #006064 !default +$cyan-11 : #84ffff !default +$cyan-12 : #18ffff !default +$cyan-13 : #00e5ff !default +$cyan-14 : #00b8d4 !default +$teal : #009688 !default +$teal-1 : #e0f2f1 !default +$teal-2 : #b2dfdb !default +$teal-3 : #80cbc4 !default +$teal-4 : #4db6ac !default +$teal-5 : #26a69a !default +$teal-6 : #009688 !default +$teal-7 : #00897b !default +$teal-8 : #00796b !default +$teal-9 : #00695c !default +$teal-10 : #004d40 !default +$teal-11 : #a7ffeb !default +$teal-12 : #64ffda !default +$teal-13 : #1de9b6 !default +$teal-14 : #00bfa5 !default +$green : #4caf50 !default +$green-1 : #e8f5e9 !default +$green-2 : #c8e6c9 !default +$green-3 : #a5d6a7 !default +$green-4 : #81c784 !default +$green-5 : #66bb6a !default +$green-6 : #4caf50 !default +$green-7 : #43a047 !default +$green-8 : #388e3c !default +$green-9 : #2e7d32 !default +$green-10 : #1b5e20 !default +$green-11 : #b9f6ca !default +$green-12 : #69f0ae !default +$green-13 : #00e676 !default +$green-14 : #00c853 !default +$light-green : #8bc34a !default +$light-green-1 : #f1f8e9 !default +$light-green-2 : #dcedc8 !default +$light-green-3 : #c5e1a5 !default +$light-green-4 : #aed581 !default +$light-green-5 : #9ccc65 !default +$light-green-6 : #8bc34a !default +$light-green-7 : #7cb342 !default +$light-green-8 : #689f38 !default +$light-green-9 : #558b2f !default +$light-green-10 : #33691e !default +$light-green-11 : #ccff90 !default +$light-green-12 : #b2ff59 !default +$light-green-13 : #76ff03 !default +$light-green-14 : #64dd17 !default +$lime : #cddc39 !default +$lime-1 : #f9fbe7 !default +$lime-2 : #f0f4c3 !default +$lime-3 : #e6ee9c !default +$lime-4 : #dce775 !default +$lime-5 : #d4e157 !default +$lime-6 : #cddc39 !default +$lime-7 : #c0ca33 !default +$lime-8 : #afb42b !default +$lime-9 : #9e9d24 !default +$lime-10 : #827717 !default +$lime-11 : #f4ff81 !default +$lime-12 : #eeff41 !default +$lime-13 : #c6ff00 !default +$lime-14 : #aeea00 !default +$yellow : #ffeb3b !default +$yellow-1 : #fffde7 !default +$yellow-2 : #fff9c4 !default +$yellow-3 : #fff59d !default +$yellow-4 : #fff176 !default +$yellow-5 : #ffee58 !default +$yellow-6 : #ffeb3b !default +$yellow-7 : #fdd835 !default +$yellow-8 : #fbc02d !default +$yellow-9 : #f9a825 !default +$yellow-10 : #f57f17 !default +$yellow-11 : #ffff8d !default +$yellow-12 : #ffff00 !default +$yellow-13 : #ffea00 !default +$yellow-14 : #ffd600 !default +$amber : #ffc107 !default +$amber-1 : #fff8e1 !default +$amber-2 : #ffecb3 !default +$amber-3 : #ffe082 !default +$amber-4 : #ffd54f !default +$amber-5 : #ffca28 !default +$amber-6 : #ffc107 !default +$amber-7 : #ffb300 !default +$amber-8 : #ffa000 !default +$amber-9 : #ff8f00 !default +$amber-10 : #ff6f00 !default +$amber-11 : #ffe57f !default +$amber-12 : #ffd740 !default +$amber-13 : #ffc400 !default +$amber-14 : #ffab00 !default +$orange : #ff9800 !default +$orange-1 : #fff3e0 !default +$orange-2 : #ffe0b2 !default +$orange-3 : #ffcc80 !default +$orange-4 : #ffb74d !default +$orange-5 : #ffa726 !default +$orange-6 : #ff9800 !default +$orange-7 : #fb8c00 !default +$orange-8 : #f57c00 !default +$orange-9 : #ef6c00 !default +$orange-10 : #e65100 !default +$orange-11 : #ffd180 !default +$orange-12 : #ffab40 !default +$orange-13 : #ff9100 !default +$orange-14 : #ff6d00 !default +$deep-orange : #ff5722 !default +$deep-orange-1 : #fbe9e7 !default +$deep-orange-2 : #ffccbc !default +$deep-orange-3 : #ffab91 !default +$deep-orange-4 : #ff8a65 !default +$deep-orange-5 : #ff7043 !default +$deep-orange-6 : #ff5722 !default +$deep-orange-7 : #f4511e !default +$deep-orange-8 : #e64a19 !default +$deep-orange-9 : #d84315 !default +$deep-orange-10 : #bf360c !default +$deep-orange-11 : #ff9e80 !default +$deep-orange-12 : #ff6e40 !default +$deep-orange-13 : #ff3d00 !default +$deep-orange-14 : #dd2c00 !default +$brown : #795548 !default +$brown-1 : #efebe9 !default +$brown-2 : #d7ccc8 !default +$brown-3 : #bcaaa4 !default +$brown-4 : #a1887f !default +$brown-5 : #8d6e63 !default +$brown-6 : #795548 !default +$brown-7 : #6d4c41 !default +$brown-8 : #5d4037 !default +$brown-9 : #4e342e !default +$brown-10 : #3e2723 !default +$brown-11 : #d7ccc8 !default +$brown-12 : #bcaaa4 !default +$brown-13 : #8d6e63 !default +$brown-14 : #5d4037 !default +$grey : #9e9e9e !default +$grey-1 : #fafafa !default +$grey-2 : #f5f5f5 !default +$grey-3 : #eeeeee !default +$grey-4 : #e0e0e0 !default +$grey-5 : #bdbdbd !default +$grey-6 : #9e9e9e !default +$grey-7 : #757575 !default +$grey-8 : #616161 !default +$grey-9 : #424242 !default +$grey-10 : #212121 !default +$grey-11 : #f5f5f5 !default +$grey-12 : #eeeeee !default +$grey-13 : #bdbdbd !default +$grey-14 : #616161 !default +$blue-grey : #607d8b !default +$blue-grey-1 : #eceff1 !default +$blue-grey-2 : #cfd8dc !default +$blue-grey-3 : #b0bec5 !default +$blue-grey-4 : #90a4ae !default +$blue-grey-5 : #78909c !default +$blue-grey-6 : #607d8b !default +$blue-grey-7 : #546e7a !default +$blue-grey-8 : #455a64 !default +$blue-grey-9 : #37474f !default +$blue-grey-10 : #263238 !default +$blue-grey-11 : #cfd8dc !default +$blue-grey-12 : #b0bec5 !default +$blue-grey-13 : #78909c !default +$blue-grey-14 : #455a64 !default +$ios-statusbar-height : 20px !default +$z-fab : 990 !default +$z-side : 1000 !default +$z-marginals : 2000 !default +$z-fixed-drawer : 3000 !default +$z-fullscreen : 6000 !default +$z-menu : 6000 !default +$z-top : 7000 !default +$z-tooltip : 9000 !default +$z-notify : 9500 !default +$z-max : 9998 !default +$shadow-color : #000 !default +$shadow-transition : box-shadow .28s cubic-bezier(.4, 0, .2, 1) !default +$inset-shadow : 0 7px 9px -7px rgba($shadow-color, .7) inset !default +$inset-shadow-down : 0 -7px 9px -7px rgba($shadow-color, .7) inset !default +$elevation-umbra : rgba($shadow-color, .2) !default +$elevation-penumbra : rgba($shadow-color, .14) !default +$elevation-ambient : rgba($shadow-color, .12) !default +$shadow-0 : 0 0 0 $elevation-umbra, 0 0 0 $elevation-penumbra, 0 0 0 $elevation-ambient !default +$shadow-1 : 0 1px 3px $elevation-umbra, 0 1px 1px $elevation-penumbra, 0 2px 1px -1px $elevation-ambient !default +$shadow-2 : 0 1px 5px $elevation-umbra, 0 2px 2px $elevation-penumbra, 0 3px 1px -2px $elevation-ambient !default +$shadow-3 : 0 1px 8px $elevation-umbra, 0 3px 4px $elevation-penumbra, 0 3px 3px -2px $elevation-ambient !default +$shadow-4 : 0 2px 4px -1px $elevation-umbra, 0 4px 5px $elevation-penumbra, 0 1px 10px $elevation-ambient !default +$shadow-5 : 0 3px 5px -1px $elevation-umbra, 0 5px 8px $elevation-penumbra, 0 1px 14px $elevation-ambient !default +$shadow-6 : 0 3px 5px -1px $elevation-umbra, 0 6px 10px $elevation-penumbra, 0 1px 18px $elevation-ambient !default +$shadow-7 : 0 4px 5px -2px $elevation-umbra, 0 7px 10px 1px $elevation-penumbra, 0 2px 16px 1px $elevation-ambient !default +$shadow-8 : 0 5px 5px -3px $elevation-umbra, 0 8px 10px 1px $elevation-penumbra, 0 3px 14px 2px $elevation-ambient !default +$shadow-9 : 0 5px 6px -3px $elevation-umbra, 0 9px 12px 1px $elevation-penumbra, 0 3px 16px 2px $elevation-ambient !default +$shadow-10 : 0 6px 6px -3px $elevation-umbra, 0 10px 14px 1px $elevation-penumbra, 0 4px 18px 3px $elevation-ambient !default +$shadow-11 : 0 6px 7px -4px $elevation-umbra, 0 11px 15px 1px $elevation-penumbra, 0 4px 20px 3px $elevation-ambient !default +$shadow-12 : 0 7px 8px -4px $elevation-umbra, 0 12px 17px 2px $elevation-penumbra, 0 5px 22px 4px $elevation-ambient !default +$shadow-13 : 0 7px 8px -4px $elevation-umbra, 0 13px 19px 2px $elevation-penumbra, 0 5px 24px 4px $elevation-ambient !default +$shadow-14 : 0 7px 9px -4px $elevation-umbra, 0 14px 21px 2px $elevation-penumbra, 0 5px 26px 4px $elevation-ambient !default +$shadow-15 : 0 8px 9px -5px $elevation-umbra, 0 15px 22px 2px $elevation-penumbra, 0 6px 28px 5px $elevation-ambient !default +$shadow-16 : 0 8px 10px -5px $elevation-umbra, 0 16px 24px 2px $elevation-penumbra, 0 6px 30px 5px $elevation-ambient !default +$shadow-17 : 0 8px 11px -5px $elevation-umbra, 0 17px 26px 2px $elevation-penumbra, 0 6px 32px 5px $elevation-ambient !default +$shadow-18 : 0 9px 11px -5px $elevation-umbra, 0 18px 28px 2px $elevation-penumbra, 0 7px 34px 6px $elevation-ambient !default +$shadow-19 : 0 9px 12px -6px $elevation-umbra, 0 19px 29px 2px $elevation-penumbra, 0 7px 36px 6px $elevation-ambient !default +$shadow-20 : 0 10px 13px -6px $elevation-umbra, 0 20px 31px 3px $elevation-penumbra, 0 8px 38px 7px $elevation-ambient !default +$shadow-21 : 0 10px 13px -6px $elevation-umbra, 0 21px 33px 3px $elevation-penumbra, 0 8px 40px 7px $elevation-ambient !default +$shadow-22 : 0 10px 14px -6px $elevation-umbra, 0 22px 35px 3px $elevation-penumbra, 0 8px 42px 7px $elevation-ambient !default +$shadow-23 : 0 11px 14px -7px $elevation-umbra, 0 23px 36px 3px $elevation-penumbra, 0 9px 44px 8px $elevation-ambient !default +$shadow-24 : 0 11px 15px -7px $elevation-umbra, 0 24px 38px 3px $elevation-penumbra, 0 9px 46px 8px $elevation-ambient !default +$shadows: ($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5, $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10, $shadow-11, $shadow-12, $shadow-13, $shadow-14, $shadow-15, $shadow-16, $shadow-17, $shadow-18, $shadow-19, $shadow-20, $shadow-21, $shadow-22, $shadow-23, $shadow-24) +$shadow-up-0 : 0 0 0 $elevation-umbra, 0 0 0 $elevation-penumbra, 0 0 0 $elevation-ambient !default +$shadow-up-1 : 0 -1px 3px $elevation-umbra, 0 -1px 1px $elevation-penumbra, 0 -2px 1px -1px $elevation-ambient !default +$shadow-up-2 : 0 -1px 5px $elevation-umbra, 0 -2px 2px $elevation-penumbra, 0 -3px 1px -2px $elevation-ambient !default +$shadow-up-3 : 0 -1px 8px $elevation-umbra, 0 -3px 4px $elevation-penumbra, 0 -3px 3px -2px $elevation-ambient !default +$shadow-up-4 : 0 -2px 4px -1px $elevation-umbra, 0 -4px 5px $elevation-penumbra, 0 -1px 10px $elevation-ambient !default +$shadow-up-5 : 0 -3px 5px -1px $elevation-umbra, 0 -5px 8px $elevation-penumbra, 0 -1px 14px $elevation-ambient !default +$shadow-up-6 : 0 -3px 5px -1px $elevation-umbra, 0 -6px 10px $elevation-penumbra, 0 -1px 18px $elevation-ambient !default +$shadow-up-7 : 0 -4px 5px -2px $elevation-umbra, 0 -7px 10px 1px $elevation-penumbra, 0 -2px 16px 1px $elevation-ambient !default +$shadow-up-8 : 0 -5px 5px -3px $elevation-umbra, 0 -8px 10px 1px $elevation-penumbra, 0 -3px 14px 2px $elevation-ambient !default +$shadow-up-9 : 0 -5px 6px -3px $elevation-umbra, 0 -9px 12px 1px $elevation-penumbra, 0 -3px 16px 2px $elevation-ambient !default +$shadow-up-10 : 0 -6px 6px -3px $elevation-umbra, 0 -10px 14px 1px $elevation-penumbra, 0 -4px 18px 3px $elevation-ambient !default +$shadow-up-11 : 0 -6px 7px -4px $elevation-umbra, 0 -11px 15px 1px $elevation-penumbra, 0 -4px 20px 3px $elevation-ambient !default +$shadow-up-12 : 0 -7px 8px -4px $elevation-umbra, 0 -12px 17px 2px $elevation-penumbra, 0 -5px 22px 4px $elevation-ambient !default +$shadow-up-13 : 0 -7px 8px -4px $elevation-umbra, 0 -13px 19px 2px $elevation-penumbra, 0 -5px 24px 4px $elevation-ambient !default +$shadow-up-14 : 0 -7px 9px -4px $elevation-umbra, 0 -14px 21px 2px $elevation-penumbra, 0 -5px 26px 4px $elevation-ambient !default +$shadow-up-15 : 0 -8px 9px -5px $elevation-umbra, 0 -15px 22px 2px $elevation-penumbra, 0 -6px 28px 5px $elevation-ambient !default +$shadow-up-16 : 0 -8px 10px -5px $elevation-umbra, 0 -16px 24px 2px $elevation-penumbra, 0 -6px 30px 5px $elevation-ambient !default +$shadow-up-17 : 0 -8px 11px -5px $elevation-umbra, 0 -17px 26px 2px $elevation-penumbra, 0 -6px 32px 5px $elevation-ambient !default +$shadow-up-18 : 0 -9px 11px -5px $elevation-umbra, 0 -18px 28px 2px $elevation-penumbra, 0 -7px 34px 6px $elevation-ambient !default +$shadow-up-19 : 0 -9px 12px -6px $elevation-umbra, 0 -19px 29px 2px $elevation-penumbra, 0 -7px 36px 6px $elevation-ambient !default +$shadow-up-20 : 0 -10px 13px -6px $elevation-umbra, 0 -20px 31px 3px $elevation-penumbra, 0 -8px 38px 7px $elevation-ambient !default +$shadow-up-21 : 0 -10px 13px -6px $elevation-umbra, 0 -21px 33px 3px $elevation-penumbra, 0 -8px 40px 7px $elevation-ambient !default +$shadow-up-22 : 0 -10px 14px -6px $elevation-umbra, 0 -22px 35px 3px $elevation-penumbra, 0 -8px 42px 7px $elevation-ambient !default +$shadow-up-23 : 0 -11px 14px -7px $elevation-umbra, 0 -23px 36px 3px $elevation-penumbra, 0 -9px 44px 8px $elevation-ambient !default +$shadow-up-24 : 0 -11px 15px -7px $elevation-umbra, 0 -24px 38px 3px $elevation-penumbra, 0 -9px 46px 8px $elevation-ambient !default +$shadows-up: ($shadow-up-1, $shadow-up-2, $shadow-up-3, $shadow-up-4, $shadow-up-5, $shadow-up-6, $shadow-up-7, $shadow-up-8, $shadow-up-9, $shadow-up-10, $shadow-up-11, $shadow-up-12, $shadow-up-13, $shadow-up-14, $shadow-up-15, $shadow-up-16, $shadow-up-17, $shadow-up-18, $shadow-up-19, $shadow-up-20, $shadow-up-21, $shadow-up-22, $shadow-up-23, $shadow-up-24) +$generic-border-radius : 4px !default +$generic-hover-transition : .3s cubic-bezier(.25, .8, .5, 1) !default +$typography-font-family : 'Roboto', '-apple-system', 'Helvetica Neue', Helvetica, Arial, sans-serif !default +$min-line-height : 1.12 !default +$button-border-radius : 3px !default +$button-padding : 4px 16px !default +$button-dense-padding : .285em !default +$button-transition : $generic-hover-transition !default +$button-font-size : 14px !default +$button-line-height : 1.715em !default +$button-font-weight : 500 !default +$button-shadow : $shadow-2 !default +$button-shadow-active : $shadow-5 !default +$button-rounded-border-radius : 28px !default +$button-push-border-radius : 7px !default +$chat-message-received-color : #000 !default +$chat-message-received-bg : $green-4 !default +$chat-message-sent-color : #000 !default +$chat-message-sent-bg : $grey-4 !default +$chat-message-avatar-size : 48px !default +$chat-message-border-radius : $generic-border-radius !default +$chat-message-distance : 8px !default +$chat-message-text-padding : 8px !default +$item-base-color : $grey-5 !default +$editor-border-color : $separator-color !default +$editor-border-dark-color : $separator-dark-color !default +$editor-content-padding : 10px !default +$editor-content-min-height : 10em !default +$editor-toolbar-padding : 4px !default +$editor-hr-color : $editor-border-color !default +$editor-hr-dark-color : $editor-border-dark-color !default +$editor-button-gutter : 4px !default +$table-transition : $generic-hover-transition !default +$table-border-radius : $generic-border-radius !default +$table-box-shadow : $shadow-2 !default +$table-border-color : $separator-color !default +$table-hover-background : rgba(0, 0, 0, .03) !default +$table-selected-background : rgba(0, 0, 0, .06) !default +$table-dark-border-color : $separator-dark-color !default +$table-dark-hover-background : rgba(255, 255, 255, .07) !default +$table-dark-selected-background : rgba(255, 255, 255, .1) !default +$toolbar-min-height : 50px !default +$toolbar-padding : 0 12px !default +$toolbar-inset-size : 58px !default +$toolbar-title-font-size : 21px !default +$toolbar-title-font-weight : normal !default +$toolbar-title-letter-spacing : .01em !default +$toolbar-title-padding : 0 12px !default +$layout-border : 1px solid $separator-color !default +$layout-shadow : 0 0 10px 2px rgba(0,0,0,0.2), 0 0px 10px rgba(0,0,0,0.24) !default +$menu-background : #fff !default +$menu-box-shadow : $shadow-2 !default +$menu-max-width : 95vw !default +$rating-grade-color : $yellow !default +$rating-shadow : 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24) !default +$tooltip-color : #fafafa !default +$tooltip-background : $grey-7 !default +$tooltip-padding : 6px 10px !default +$tooltip-border-radius : $generic-border-radius !default +$tooltip-fontsize : 10px !default +$tooltip-mobile-padding : 8px 16px !default +$tooltip-mobile-fontsize : 14px !default +$option-focus-transition : .22s cubic-bezier(0,0,.2,1) !default +$input-font-size : 14px !default +$input-text-color : rgba(0,0,0,.87) !default +$input-label-color : rgba(0,0,0,.6) !default +$input-autofill-color : inherit !default +$img-width : 100% !default +$img-background-repeat : no-repeat !default +$img-loading-font-size : 50px !default +$img-content-position : absolute !default +$img-content-padding : 16px !default +$img-content-color : #fff !default +$img-content-background : rgba(0, 0, 0, .47) !default +*, *:before, *:after + box-sizing: inherit + -webkit-tap-highlight-color: transparent + -moz-tap-highlight-color: transparent +html, body, #q-app + width: 100% + direction: ltr +body.platform-ios.within-iframe, body.platform-ios.within-iframe #q-app + width: 100px + min-width: 100% +html, body + margin: 0 + box-sizing: border-box +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary + display: block +/* + * line 1: Remove the bottom border in Firefox 39-. + * lines 2,3: Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] + border-bottom: none + text-decoration: underline + text-decoration: underline dotted +img + border-style: none +svg:not(:root) + overflow: hidden +/* + * line 1: Correct the inheritance and scaling of font size in all browsers. + * line 2: Correct the odd `em` font sizing in all browsers. + */ +code, kbd, pre, samp + font-family: monospace, monospace + font-size: 1em +/* + * lines 1,2: Add the correct box sizing in Firefox. + * line 3: Show the overflow in Edge and IE. + */ +hr + box-sizing: content-box + height: 0 + overflow: visible +button, +input, +optgroup, +select, +textarea + font: inherit + font-family: inherit + margin: 0 +optgroup + font-weight: bold +/* + * Show the overflow in IE. + * input: Show the overflow in Edge. + * select: Show the overflow in Edge, Firefox, and IE. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * select: Remove the inheritance of text transform in Firefox. + */ +button, +input, +select + overflow: visible + text-transform: none +button::-moz-focus-inner, input::-moz-focus-inner + border: 0 + padding: 0 +button:-moz-focusring, input:-moz-focusring + outline: 1px dotted ButtonText +fieldset + padding: 0.35em 0.75em 0.625em +/** + * lines 1,3,4,6: Correct the text wrapping in Edge and IE. + * line 2: Correct the color inheritance from `fieldset` elements in IE. + * line 5: Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend + box-sizing: border-box + color: inherit + display: table + max-width: 100% + padding: 0 + white-space: normal +progress + vertical-align: baseline +textarea + overflow: auto +input[type='search']::-webkit-search-cancel-button, +input[type='search']::-webkit-search-decoration + -webkit-appearance: none +.q-icon + line-height: 1 + width: 1em + height: 1em + flex-shrink: 0 + letter-spacing: normal + text-transform: none + white-space: nowrap + word-wrap: normal + direction: ltr + text-align: center + position: relative + box-sizing: content-box + fill: currentColor + &:before, &:after + width: 100% + height: 100% + display: flex !important + align-items: center + justify-content: center + > svg, + > img + width: 100% + height: 100% +.q-icon, +.material-icons, +.material-icons-outlined, +.material-icons-round, +.material-icons-sharp, +.material-symbols-outlined, +.material-symbols-rounded, +.material-symbols-sharp + user-select: none + cursor: inherit + font-size: inherit + display: inline-flex + align-items: center + justify-content: center + vertical-align: middle +.q-panel + height: 100% + width: 100% + > div + height: 100% + width: 100% +.q-panel-parent + overflow: hidden + position: relative +.q-loading-bar + position: fixed + z-index: $z-max + transition: transform .5s cubic-bezier(0,0,.2,1), opacity .5s + background: $red + &--top + left: 0 #{"/* rtl:ignore */"} + right: 0 #{"/* rtl:ignore */"} + top: 0 + width: 100% + &--bottom + left: 0 #{"/* rtl:ignore */"} + right: 0 #{"/* rtl:ignore */"} + bottom: 0 + width: 100% + &--right + top: 0 + bottom: 0 + right: 0 + height: 100% + &--left + top: 0 + bottom: 0 + left: 0 + height: 100% +.q-avatar + position: relative + vertical-align: middle + display: inline-block + border-radius: 50% + font-size: 48px + height: 1em + width: 1em + &__content + font-size: .5em + line-height: .5em + &__content, img:not(.q-icon) + border-radius: inherit + height: inherit + width: inherit + &--square + border-radius: 0 +.q-badge + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + padding: 2px 6px + border-radius: $generic-border-radius + font-size: 12px + line-height: 12px + min-height: 12px + font-weight: normal + vertical-align: baseline + &--single-line + white-space: nowrap + &--multi-line + word-break: break-all + word-wrap: break-word + &--floating + position: absolute + top: -4px + right: -3px + cursor: inherit + &--transparent + opacity: .8 + &--outline + background-color: transparent + border: 1px solid currentColor + &--rounded + border-radius: 1em +.q-banner + min-height: 54px + padding: 8px 16px + &--top-padding + padding-top: 14px + &__avatar + min-width: 1px !important + > .q-avatar + font-size: 46px + > .q-icon + font-size: 40px + &__avatar:not(:empty) + &__content + padding-left: 16px + &__actions + &.col-auto + padding-left: 16px + &.col-all + .q-btn-item + margin: 4px 0 0 4px + &--dense + min-height: 32px + padding: 8px + &.q-banner--top-padding + padding-top: 12px + .q-banner__avatar + > .q-avatar, > .q-icon + font-size: 28px + .q-banner__avatar:not(:empty) + .q-banner__content + padding-left: 8px + .q-banner__actions + &.col-auto + padding-left: 8px +.q-bar + background: rgba(0,0,0,.2) + > .q-icon + margin-left: 2px + > div, > div + .q-icon + margin-left: 8px + > .q-btn + margin-left: 2px + > .q-icon:first-child, > .q-btn:first-child, > div:first-child + margin-left: 0 + &--standard + padding: 0 12px + height: 32px + font-size: 18px + > div + font-size: 16px + .q-btn + font-size: 11px + &--dense + padding: 0 8px + height: 24px + font-size: 14px + .q-btn + font-size: 8px + &--dark + background: rgba(255,255,255,.15) +@media (prefers-color-scheme: dark) + .q-bar--dark-auto + background: rgba(255,255,255,.15) +.q-breadcrumbs + &__el + color: inherit + &__el-icon + font-size: 125% + &--with-label + margin-right: 8px +[dir=rtl] .q-breadcrumbs__separator .q-icon + transform: scaleX(-1) #{"/* rtl:ignore */"} +.q-btn + display: inline-flex + flex-direction: column + align-items: stretch + position: relative + outline: 0 + border: 0 + vertical-align: middle + padding: 0 + font-size: $button-font-size + line-height: $button-line-height + text-decoration: none + color: inherit + background: transparent + font-weight: $button-font-weight + text-transform: uppercase + text-align: center + width: auto + height: auto + .q-icon, .q-spinner + font-size: $button-line-height + &.disabled + opacity: .7 !important + &__wrapper + padding: $button-padding + min-height: 2.572em + border-radius: inherit + width: 100% + height: 100% + &:before + content: '' + display: block + position: absolute + left: 0 + right: 0 + top: 0 + bottom: 0 + border-radius: inherit + box-shadow: $button-shadow + &--actionable + cursor: pointer + &.q-btn--standard + .q-btn__wrapper:before + + + + + transition: box-shadow $button-transition + &:active, + &.q-btn--active + .q-btn__wrapper:before + box-shadow: $button-shadow-active + &--no-uppercase + text-transform: none + &--rectangle + border-radius: $button-border-radius + &--outline + background: transparent !important + .q-btn__wrapper:before + border: 1px solid currentColor + &--push + border-radius: $button-push-border-radius + .q-btn__wrapper:before + border-bottom: 3px solid rgba(0,0,0,.15) + &.q-btn--actionable + transition: transform $button-transition + .q-btn__wrapper:before + transition: top $button-transition, bottom $button-transition, border-bottom-width $button-transition + &:active, + &.q-btn--active + transform: translateY(2px) + .q-btn__wrapper:before + border-bottom-width: 0 + &--rounded + border-radius: $button-rounded-border-radius + &--round + border-radius: 50% + .q-btn__wrapper + padding: 0 + min-width: 3em + min-height: 3em + &--flat, &--outline, &--unelevated + .q-btn__wrapper:before + box-shadow: none + &--dense + .q-btn__wrapper + padding: $button-dense-padding + min-height: 2em + &.q-btn--round + .q-btn__wrapper + padding: 0 + min-height: 2.4em + min-width: 2.4em + .on-left + margin-right: 6px + .on-right + margin-left: 6px + &--fab, &--fab-mini + .q-icon + font-size: 24px + &--fab + .q-icon + margin: auto + .q-btn__wrapper + padding: 16px + min-height: 56px + min-width: 56px + &--fab-mini .q-btn__wrapper + padding: 8px + min-height: 40px + min-width: 40px + + &__content + transition: opacity .3s + z-index: 0 + &--hidden + opacity: 0 + pointer-events: none + &__progress + border-radius: inherit + z-index: 0 + &-indicator + z-index: -1 + transform: translateX(-100%) + background: rgba(255,255,255,.25) + &--dark + .q-btn__progress-indicator + background: rgba(0,0,0,.2) + &--flat, &--outline + .q-btn__progress-indicator + opacity: 0.2 + background: currentColor +.q-btn-dropdown + &--split .q-btn-dropdown__arrow-container + &.q-btn--outline + border-left: 1px solid currentColor + &:not(.q-btn--outline) + border-left: 1px solid rgba(255,255,255,.3) + .q-btn__wrapper + padding: 0 4px + &--simple * + .q-btn-dropdown__arrow + margin-left: 8px + &__arrow + transition: transform .28s + &--current + flex-grow: 1 +.q-btn-group + border-radius: $button-border-radius + box-shadow: $button-shadow + vertical-align: middle + > .q-btn-item + border-radius: inherit + align-self: stretch + .q-btn__wrapper:before + box-shadow: none + .q-badge--floating + right: 0 + > .q-btn-group + box-shadow: none + &:first-child + > .q-btn:first-child + border-top-left-radius: inherit + border-bottom-left-radius: inherit + &:last-child + > .q-btn:last-child + border-top-right-radius: inherit + border-bottom-right-radius: inherit + > .q-btn-group:not(:first-child) > .q-btn:first-child + .q-btn__wrapper:before + border-left: 0 + > .q-btn-group:not(:last-child) > .q-btn:last-child + .q-btn__wrapper:before + border-right: 0 + > .q-btn-item:not(:last-child) + border-top-right-radius: 0 + border-bottom-right-radius: 0 + > .q-btn-item:not(:first-child) + border-top-left-radius: 0 + border-bottom-left-radius: 0 + > .q-btn-item.q-btn--standard + .q-btn__wrapper:before + z-index: -1 + &--push + border-radius: $button-push-border-radius + > .q-btn--push + &.q-btn--actionable + transform: none + .q-btn__wrapper + transition: margin-top $button-transition, margin-bottom $button-transition, box-shadow $button-transition + &:active, + &.q-btn--active + .q-btn__wrapper + margin-top: 2px + margin-bottom: -2px + &--rounded + border-radius: $button-rounded-border-radius + &--square + border-radius: 0 + &--flat, &--outline, &--unelevated + box-shadow: none + &--outline + > .q-separator + display: none + > .q-btn-item + .q-btn-item + .q-btn__wrapper:before + border-left: 0 + > .q-btn-item:not(:last-child) + .q-btn__wrapper:before + border-right: 0 + &--stretch + align-self: stretch + border-radius: 0 + &--glossy + > .q-btn-item + background-image: linear-gradient(to bottom, rgba(#fff, .3), rgba(#fff, 0) 50%, rgba(#000, .12) 51%, rgba(#000, .04)) !important + &--spread + > .q-btn-group + display: flex !important + > .q-btn-item, > .q-btn-group > .q-btn-item:not(.q-btn-dropdown__arrow-container) + width: auto + min-width: 0 + max-width: 100% + flex: 10000 1 0% +.q-btn-toggle + position: relative +.q-card + box-shadow: $shadow-2 + border-radius: $generic-border-radius + vertical-align: top + position: relative + > div, + > img + &:first-child + border-top: 0 + border-top-left-radius: inherit + border-top-right-radius: inherit + > div, + > img + &:last-child + border-bottom: 0 + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + > div, + > img + &:not(:first-child) + border-top-left-radius: 0 + border-top-right-radius: 0 + > div, + > img + &:not(:last-child) + border-bottom-left-radius: 0 + border-bottom-right-radius: 0 + > div + border-left: 0 + border-right: 0 + box-shadow: none + &--bordered + border: 1px solid $separator-color + &--dark + border-color: $separator-dark-color + &__section + position: relative + &--vert + padding: 16px + &--horiz + > div, + > img + &:first-child + border-top-left-radius: inherit + border-bottom-left-radius: inherit + &:last-child + border-top-right-radius: inherit + border-bottom-right-radius: inherit + &:not(:first-child) + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:not(:last-child) + border-top-right-radius: 0 + border-bottom-right-radius: 0 + > div + border-top: 0 + border-bottom: 0 + box-shadow: none + &__actions + padding: 8px + align-items: center + .q-btn__wrapper + padding: 0 8px + &--horiz + > .q-btn-item + .q-btn-item, + > .q-btn-group + .q-btn-item, + > .q-btn-item + .q-btn-group + margin-left: 8px + &--vert + > .q-btn-item.q-btn--round + align-self: center + > .q-btn-item + .q-btn-item, + > .q-btn-group + .q-btn-item, + > .q-btn-item + .q-btn-group + margin-top: 4px + > .q-btn-group > .q-btn-item + flex-grow: 1 + > img + display: block + width: 100% + max-width: 100% + border: 0 +@media (prefers-color-scheme: dark) + .q-card--dark-auto + border-color: $separator-dark-color +.q-carousel + height: 400px + &__slide + min-height: 100% + background-size: cover + background-position: 50% + &__slide, .q-carousel--padding + padding: 16px + &__slides-container + height: 100% + &__control + color: $dark-text + color: var(--q-color-dark-text) + &__arrow + pointer-events: none + .q-icon + font-size: 28px + .q-btn + pointer-events: all + &__prev-arrow--horizontal, + &__next-arrow--horizontal + top: 16px + bottom: 16px + &__prev-arrow--horizontal + left: 16px + &__next-arrow--horizontal + right: 16px + &__prev-arrow--vertical, + &__next-arrow--vertical + left: 16px + right: 16px + &__prev-arrow--vertical + top: 16px + &__next-arrow--vertical + bottom: 16px + &__navigation + &--top, + &--bottom + left: 16px + right: 16px + overflow-x: auto + overflow-y: hidden + &--top + top: 16px + &--bottom + bottom: 16px + &--left, + &--right + top: 16px + bottom: 16px + overflow-x: hidden + overflow-y: auto + > .q-carousel__navigation-inner + flex-direction: column + &--left + left: 16px + &--right + right: 16px + &-inner + flex: 1 1 auto + .q-btn + margin: 6px 4px + .q-btn__wrapper + padding: 5px + &__navigation-icon--inactive + opacity: .7 + .q-carousel__thumbnail + margin: 2px + height: 50px + width: auto + display: inline-block + cursor: pointer + border: 1px solid transparent + border-radius: $generic-border-radius + vertical-align: middle + opacity: .7 + transition: opacity .3s + .q-carousel__thumbnail:hover, + .q-carousel__thumbnail--active + opacity: 1 + .q-carousel__thumbnail--active + border-color: currentColor + cursor: default + &--navigation-top, + &--arrows-vertical + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-top: 60px + &--navigation-bottom, + &--arrows-vertical + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-bottom: 60px + &--navigation-left, + &--arrows-horizontal + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-left: 60px + &--navigation-right, + &--arrows-horizontal + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-right: 60px + &.fullscreen + height: 100% +.q-message-name, .q-message-stamp, .q-message-label + font-size: small +.q-message-label + margin: (3 * $chat-message-distance) 0 + text-align: center +.q-message-stamp + color: inherit + margin-top: 4px + opacity: .6 + display: none +.q-message-avatar + border-radius: 50% + width: $chat-message-avatar-size + height: $chat-message-avatar-size + min-width: $chat-message-avatar-size +.q-message + margin-bottom: $chat-message-distance + &:first-child .q-message-label + margin-top: 0 +.q-message-avatar--received + margin-right: 8px +.q-message-text--received + color: $chat-message-received-bg + border-radius: $chat-message-border-radius $chat-message-border-radius $chat-message-border-radius 0 + &:last-child:before + right: 100% + border-right: 0 solid transparent + border-left: 8px solid transparent + border-bottom: 8px solid currentColor +.q-message-text-content--received + color: $chat-message-received-color +.q-message-name--sent + text-align: right +.q-message-avatar--sent + margin-left: 8px +.q-message-container--sent + flex-direction: row-reverse +.q-message-text--sent + color: $chat-message-sent-bg + border-radius: $chat-message-border-radius $chat-message-border-radius 0 $chat-message-border-radius + &:last-child:before + left: 100% + border-left: 0 solid transparent + border-right: 8px solid transparent + border-bottom: 8px solid currentColor +.q-message-text-content--sent + color: $chat-message-sent-color +.q-message-text + background: currentColor + padding: $chat-message-text-padding + line-height: max(1.2, $min-line-height) + word-break: break-word + position: relative + & + & + margin-top: 3px + &:last-child + min-height: $chat-message-avatar-size + .q-message-stamp + display: block + &:before + content: '' + position: absolute + bottom: 0 + width: 0 + height: 0 +$checkbox-transition: .22s cubic-bezier(0,0,.2,1) 0ms +.q-checkbox + vertical-align: middle + &__native + width: 1px + height: 1px + &__bg, + &__icon-container + user-select: none + &__bg + top: 25% + left: 25% + width: 50% + height: 50% + border: 2px solid currentColor + border-radius: 2px + transition: background $checkbox-transition + -webkit-print-color-adjust: exact + &__icon + color: currentColor + font-size: .5em + &__svg + color: $dark-text + color: var(--q-color-dark-text) + &__truthy + stroke: currentColor + stroke-width: 3.12px + stroke-dashoffset: 29.78334 + stroke-dasharray: 29.78334 + &__indet + fill: currentColor + transform-origin: 50% 50% + transform: rotate(-280deg) scale(0) + &__inner + font-size: 40px + width: 1em + min-width: 1em + height: 1em + outline: 0 + border-radius: 50% + color: rgba(0,0,0,.54) + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) + .q-checkbox__bg + background: currentColor + &--truthy + path + stroke-dashoffset: 0 + transition: stroke-dashoffset .18s cubic-bezier(.4,0,.6,1) 0ms + &--indet + .q-checkbox__indet + transform: rotate(0) scale(1) + transition: transform $checkbox-transition + &.disabled + opacity: .75 !important + &--dark + .q-checkbox__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) + &--dense + .q-checkbox__inner + width: .5em + min-width: .5em + height: .5em + .q-checkbox__bg + left: 5% + top: 5% + width: 90% + height: 90% + .q-checkbox__label + padding-left: .5em + &.reverse .q-checkbox__label + padding-left: 0 + padding-right: .5em +body.desktop + .q-checkbox:not(.disabled) + .q-checkbox__inner:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $option-focus-transition + &:focus, + &:hover + .q-checkbox__inner:before + transform: scale3d(1, 1, 1) + .q-checkbox--dense:not(.disabled) + &:focus, + &:hover + .q-checkbox__inner:before + transform: scale3d(1.4, 1.4, 1) +@media (prefers-color-scheme: dark) + .q-checkbox--dark-auto + .q-checkbox__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) +$chip-height: 2em +.q-chip + vertical-align: middle + border-radius: 16px + outline: 0 + position: relative + height: $chip-height + max-width: 100% + margin: 4px + background: $chip-background-light + background: var(--q-color-chip-background-light) + color: $light-text + color: var(--q-color-light-text) + font-size: 14px + padding: .5em .9em + &--dark + background: $chip-background-dark + background: var(--q-color-chip-background-dark) + color: $dark-text + color: var(--q-color-dark-text) + &--colored, + &--dark + .q-chip__icon + color: inherit + &--outline + background: transparent !important + border: 1px solid currentColor + .q-avatar + height: calc(1em - 2px) + width: calc(1em - 2px) + .q-avatar + font-size: $chip-height + margin-left: -.45em + margin-right: .2em + border-radius: 16px + ~ .q-avatar, + &--right + margin-left: .2em + margin-right: -.45em + &--selected + .q-avatar:first-child:not(.q-avatar--right) + display: none + &__icon + color: rgba(0,0,0,.54) + font-size: 1.5em + margin: -.2em + &--left + margin-right: .2em + &--right + margin-left: .2em + &--remove + margin-left: .1em + margin-right: -.5em + opacity: .6 + outline: 0 + &:hover, + &:focus + opacity: 1 + &__content + white-space: nowrap + &--dense + border-radius: 12px + padding: 0 .4em + height: 1.5em + .q-avatar + font-size: 1.5em + margin-left: -.27em + margin-right: .1em + border-radius: 12px + ~ .q-avatar, + &--right + margin-left: .1em + margin-right: -.268em + .q-chip__icon + font-size: 1.25em + &--left + margin-right: .195em + &--remove + margin-right: -.25em + &--square + border-radius: $generic-border-radius + .q-avatar + border-radius: $generic-border-radius 0 0 $generic-border-radius + ~ .q-avatar, + &--right + border-radius: 0 $generic-border-radius $generic-border-radius 0 +body.desktop .q-chip--clickable:focus + box-shadow: $shadow-1 +@media (prefers-color-scheme: dark) + .q-chip--dark-auto + background: $chip-background-dark + background: var(--q-color-chip-background-dark) + color: $dark-text + color: var(--q-color-dark-text) + .q-chip__icon + color: inherit +.q-circular-progress + display: inline-block + position: relative + vertical-align: middle + width: 1em + height: 1em + line-height: 1 + &.q-focusable + border-radius: 50% + &__svg + width: 100% + height: 100% + &__text + font-size: .25em + &--indeterminate + .q-circular-progress__svg + transform-origin: 50% 50% + animation: q-spin 2s linear infinite #{"/* rtl:ignore */"} + .q-circular-progress__circle + stroke-dasharray: 1 400 + stroke-dashoffset: 0 + animation: q-circular-progress-circle 1.5s ease-in-out infinite #{"/* rtl:ignore */"} +@keyframes q-circular-progress-circle + 0% + stroke-dasharray: 1, 400 + stroke-dashoffset: 0 + 50% + stroke-dasharray: 400, 400 + stroke-dashoffset: -100 + 100% + stroke-dasharray: 400, 400 + stroke-dashoffset: -300 +.q-color-picker + overflow: hidden + max-width: 350px + vertical-align: top + min-width: 180px + border-radius: $generic-border-radius + box-shadow: $shadow-2 + .q-tab + padding: 0 !important + &--bordered + border: 1px solid $separator-color + &__header + &-tabs + height: 32px + &-banner + height: 36px + input + line-height: 24px + border: 0 + .q-tab + min-height: 32px !important + height: 32px !important + &--inactive + background: linear-gradient(to top, rgba(0,0,0,.3) 0%, rgba(0,0,0,.15) 25%, rgba(0,0,0,.1)) + &__error-icon + bottom: 2px + right: 2px + font-size: 24px + opacity: 0 + transition: opacity .3s ease-in + &__header-content + position: relative + background: $light-page + background: var(--q-color-light-page) + &--light + color: $light-text + color: var(--q-color-light-text) + &--dark + color: $dark-text + color: var(--q-color-dark-text) + .q-tab--inactive + &:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + background: rgba(255,255,255,.2) + &__header-banner + height: 36px + &__header-bg + background: $light-page + background: var(--q-color-light-page) + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==') !important + &__footer + height: 36px + .q-tab + min-height: 36px !important + height: 36px !important + &--inactive + background: linear-gradient(to bottom, rgba(0,0,0,.3) 0%, rgba(0,0,0,.15) 25%, rgba(0,0,0,.1)) + + &__spectrum + width: 100% + height: 100% + &__spectrum-tab + padding: 0 !important + &__spectrum-white + background: linear-gradient(to right, #fff, rgba(255,255,255,0)) + &__spectrum-black + background: linear-gradient(to top, #000, rgba(0,0,0,0)) + &__spectrum-circle + width: 10px + height: 10px + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), 0 0 1px 2px rgba(0,0,0,.4) + border-radius: 50% + transform: translate(-5px, -5px) + &__hue .q-slider__track + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important + opacity: 1 + &__alpha + .q-slider__track-container + padding-top: 0 + .q-slider__track:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: inherit + background: linear-gradient(90deg, rgba(255,255,255,0), $grey-7) + &__sliders + padding: 0 16px + .q-slider__thumb + color: $grey-9 + path + stroke-width: 2px + fill: transparent + .q-slider--active path + stroke-width: 3px + + &__tune-tab + .q-slider + margin-left: 18px + margin-right: 18px + input + font-size: 11px + border: 1px solid $grey-4 + border-radius: $generic-border-radius + width: 3.5em + + &__palette-tab + padding: 0 !important + &__palette-rows + &--editable .q-color-picker__cube + cursor: pointer + &__cube + padding-bottom: 10% + width: 10% !important + + input + color: inherit + background: transparent + outline: 0 + text-align: center + .q-tabs + overflow: hidden + .q-tab--active + box-shadow: 0 0 14px 3px rgba(0,0,0,.2) + .q-focus-helper + display: none + .q-tab__indicator + display: none + .q-tab-panels + background: inherit + &--dark + .q-color-picker__tune-tab input + border: 1px solid rgba($dark-text, .3) + .q-slider + color: $grey-1 +@media (prefers-color-scheme: dark) + .q-color-picker--dark-auto + .q-color-picker__tune-tab input + border: 1px solid rgba($dark-text, .3) + .q-slider + color: $grey-1 +.q-date + display: inline-flex + box-shadow: $shadow-2 + border-radius: $generic-border-radius + background: $light-page + background: var(--q-color-light-page) + width: 290px + min-width: 290px + max-width: 100% + &--bordered + border: 1px solid $separator-color + &__header + border-top-left-radius: inherit + color: $dark-text + color: var(--q-color-dark-text) + background-color: $primary + background-color: var(--q-color-primary) + padding: 16px + &__actions + padding: 0 16px 16px + &__content .q-btn + font-weight: normal + &__header-link + opacity: .64 + outline: 0 + transition: opacity .3s ease-out + &--active, &:hover, &:focus + opacity: 1 + &__header-subtitle + font-size: 14px + line-height: 1.75 + letter-spacing: .00938em + &__header-title-label + font-size: 24px + line-height: 1.2 + letter-spacing: .00735em + &__view + height: 100% + width: 100% + min-height: 290px + padding: 16px + &__navigation + height: 12.5% + > div:first-child + width: 8% + min-width: 24px + justify-content: flex-end + > div:last-child + width: 8% + min-width: 24px + justify-content: flex-start + &__calendar-weekdays + height: 12.5% + > div + opacity: .38 + font-size: 12px + &__calendar-item + display: inline-flex + align-items: center + justify-content: center + vertical-align: middle + width: 14.285% !important + height: 12.5% !important + position: relative + padding: 1px + &:after + content: '' + position: absolute + pointer-events: none + top: 1px + right: 0 + bottom: 1px + left: 0 + border-style: dashed + border-color: transparent + border-width: 1px + > div, button + width: 30px + height: 30px + border-radius: 50% + > div + line-height: 30px + text-align: center + > button + line-height: 22px + &--out + opacity: .18 + &--fill + visibility: hidden + min-height: 32px + &.q-date + &__range, &__range-from, &__range-to + &:before + opacity: .05 + &__range, &__range-from, &__range-to + &:before + content: '' + background-color: currentColor + position: absolute + top: 1px + bottom: 1px + left: 0 + right: 0 + opacity: .3 + pointer-events: none + &__range + &:nth-child(7n-6) + &:before + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:nth-child(7n) + &:before + border-top-right-radius: 0 + border-bottom-right-radius: 0 + &__range-from + &:before + left: calc(50% - 15px) + border-top-left-radius: $button-rounded-border-radius + border-bottom-left-radius: $button-rounded-border-radius + &__range-to + &:before + right: calc(50% - 15px) + border-top-right-radius: $button-rounded-border-radius + border-bottom-right-radius: $button-rounded-border-radius + &__edit-range + &:after + border-color: currentColor transparent + &:nth-child(7n-6) + &:after + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:nth-child(7n) + &:after + border-top-right-radius: 0 + border-bottom-right-radius: 0 + &-from, &-from-to + &:after + left: 4px + border-left-color: currentColor + border-top-color: currentColor + border-bottom-color: currentColor + border-top-left-radius: $button-rounded-border-radius + border-bottom-left-radius: $button-rounded-border-radius + &-to, &-from-to + &:after + right: 4px + border-right-color: currentColor + border-top-color: currentColor + border-bottom-color: currentColor + border-top-right-radius: $button-rounded-border-radius + border-bottom-right-radius: $button-rounded-border-radius + &__calendar-days-container + height: 75% + min-height: 192px + &__calendar-days > div + height: 16.66% !important + &__event + position: absolute + bottom: 2px + left: 50% + height: 5px + width: 8px + border-radius: 5px + background-color: $secondary + background-color: var(--q-color-secondary) + transform: translate3d(-50%, 0, 0) + &__today + box-shadow: 0 0 1px 0 currentColor + &__years-content + padding: 0 8px + &__years-item, &__months-item + flex: 0 0 33.3333% + &.disabled, &--readonly + .q-date__header, .q-date__content + pointer-events: none + &--readonly .q-date__navigation + display: none + &--portrait + flex-direction: column + &--portrait-standard + .q-date__content + height: calc(100% - 86px) + .q-date__header + border-top-right-radius: inherit + height: 86px + .q-date__header-title + align-items: center + height: 30px + &--portrait-minimal + .q-date__content + height: 100% + &--landscape + flex-direction: row + align-items: stretch + min-width: 420px + > div + display: flex + flex-direction: column + .q-date__content + height: 100% + &--landscape-standard + min-width: 420px + .q-date__header + border-bottom-left-radius: inherit + min-width: 110px + width: 110px + .q-date__header-title + flex-direction: column + .q-date__header-today + margin-top: 12px + margin-left: -8px + &--landscape-minimal + width: 310px + &--dark + border-color: $separator-dark-color +@media (prefers-color-scheme: dark) + .q-date--dark-auto + border-color: $separator-dark-color +.q-dialog + contain: layout size + contain: layout size style + width: 100vw + &__title + font-size: 1.25rem + font-weight: 500 + line-height: 2rem + letter-spacing: .0125em + &__progress + font-size: 4rem + &__inner + outline: 0 + > div + pointer-events: all + overflow: auto + -webkit-overflow-scrolling: touch + will-change: scroll-position + border-radius: $generic-border-radius + box-shadow: $shadow-4 + &--square > div + border-radius: 0 !important + > .q-card + > .q-card__actions .q-btn--rectangle .q-btn__wrapper + min-width: 64px + &--minimized + padding: 24px + > div + max-height: calc(100vh - 48px) + &--maximized + > div + height: 100% + width: 100% + max-height: 100vh + max-width: 100vw + border-radius: 0 !important + &--top, &--bottom + padding-top: 0 !important + padding-bottom: 0 !important + &--right, &--left + padding-right: 0 !important + padding-left: 0 !important + &--left, &--top + &:not([data-q-portal-animating]) > div + border-top-left-radius: 0 + &--right, &--top + &:not([data-q-portal-animating]) > div + border-top-right-radius: 0 + &--left, &--bottom + &:not([data-q-portal-animating]) > div + border-bottom-left-radius: 0 + &--right, &--bottom + &:not([data-q-portal-animating]) > div + border-bottom-right-radius: 0 + &--fullwidth + > div + width: 100% !important + max-width: 100% !important + &--fullheight + > div + height: 100% !important + max-height: 100% !important + &__backdrop + z-index: -1 + pointer-events: all + outline: 0 + opacity: .4 + background: $backdrop-background + background: var(--q-color-backdrop-background) +html[dir=rtl] + .q-dialog + right: auto +body.mobile + .q-dialog + contain: size + contain: size style +body.desktop + .q-dialog--modal + height: 100vh +body.platform-ios + .q-dialog__inner--minimized > div + max-height: calc(100vh - 164px) +body.platform-android + .q-dialog__inner--minimized > div + max-height: calc(100% - 48px) +body.q-ios-padding .q-dialog__inner + padding-top: $ios-statusbar-height !important + padding-top: env(safe-area-inset-top) !important + padding-bottom: env(safe-area-inset-bottom) !important + > div + max-height: calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important +@media (max-width: $breakpoint-xs-max) + .q-dialog__inner + &--top, &--bottom + padding-left: 0 + padding-right: 0 + > div + width: 100% !important +@media (min-width: $breakpoint-sm-min) + .q-dialog__inner--minimized > div + max-width: 560px +.q-bottom-sheet + padding-bottom: 8px + &__avatar + border-radius: 50% + &--list + width: 400px + .q-icon, img + font-size: 24px + width: 24px + height: 24px + &--grid + width: 700px + .q-bottom-sheet__item + padding: 8px + text-align: center + min-width: 100px + .q-icon, img, .q-bottom-sheet__empty-icon + font-size: 48px + width: 48px + height: 48px + margin-bottom: 8px + .q-separator + margin: 12px 0 + &__item + flex: 0 0 33.3333% +@media (min-width: $breakpoint-sm-min) + .q-bottom-sheet__item + flex: 0 0 25% +.q-dialog-plugin + width: 400px + &__form + max-height: 50vh + .q-card__section + .q-card__section + padding-top: 0 + &--progress + text-align: center +.q-editor + border: 1px solid $editor-border-color + border-radius: $generic-border-radius + &.disabled + border-style: dashed + &.fullscreen + max-height: 100% + > div:first-child, + &__toolbars-container, + &__toolbars-container > div:first-child + border-top-left-radius: inherit + border-top-right-radius: inherit + &__toolbars-container + max-width: 100% + &__content + outline: 0 + padding: $editor-content-padding + min-height: $editor-content-min-height + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + overflow: auto + max-width: 100% + pre + white-space: pre-wrap + hr + border: 0 + outline: 0 + margin: 1px + height: 1px + background: $editor-hr-color + &:empty:not(:focus):before + content: attr(placeholder) + opacity: .7 + &__toolbar + border-bottom: 1px solid $editor-border-color + min-height: 32px + .q-btn + margin: $editor-button-gutter + &__toolbar-group + position: relative + margin: 0 $editor-button-gutter + & + & + &:before + content: '' + position: absolute + left: (- $editor-button-gutter) + top: $editor-button-gutter + bottom: $editor-button-gutter + width: 1px + background: $editor-border-color + &__link-input + color: inherit + text-decoration: none + text-transform: none + border: none + border-radius: 0 + background: none + outline: 0 + &--flat + &, .q-editor__toolbar + border: 0 + &--dense + .q-editor__toolbar-group + display: flex + align-items: center + flex-wrap: nowrap + &--dark + border-color: $editor-border-dark-color + .q-editor + &__content hr + background: $editor-hr-dark-color + &__toolbar + border-color: $editor-border-dark-color + .q-editor__toolbar-group + .q-editor__toolbar-group:before + background: $editor-border-dark-color +@media (prefers-color-scheme: dark) + .q-editor--dark-auto + border-color: $editor-border-dark-color + .q-editor + &__content hr + background: $editor-hr-dark-color + &__toolbar + border-color: $editor-border-dark-color + .q-editor__toolbar-group + .q-editor__toolbar-group:before + background: $editor-border-dark-color +.q-expansion-item + &__border + opacity: 0 + &__toggle-icon + position: relative + transition: transform .3s + &--rotated + transform: rotate(180deg) + &__toggle-focus + width: 1em !important + height: 1em !important + position: relative !important + & + .q-expansion-item__toggle-icon + margin-top: -1em + &--standard + &.q-expansion-item--expanded + > div > .q-expansion-item__border + opacity: 1 + &--popup + transition: padding .5s + > .q-expansion-item__container + border: 1px solid $separator-color + > .q-separator + display: none + &.q-expansion-item + &--collapsed + padding: 0 15px + &--expanded + padding: 15px 0 + & + & + padding-top: 0 + &.q-expansion-item--collapsed:not(:first-child) + > .q-expansion-item__container + border-top-width: 0 + &.q-expansion-item--expanded + &.q-expansion-item--collapsed + > .q-expansion-item__container + border-top-width: 1px + &__content > .q-card + box-shadow: none + border-radius: 0 + &:first-child > div > .q-expansion-item__border--top + opacity: 0 + &:last-child > div > .q-expansion-item__border--bottom + opacity: 0 + &--expanded + &--expanded + > div > .q-expansion-item__border--top + opacity: 0 + &--expanded .q-textarea--autogrow textarea + animation: q-expansion-done 0s +@keyframes q-expansion-done + 0% + --q-exp-done: 1 +.z-fab + z-index: $z-fab +.q-fab + position: relative + vertical-align: middle + > .q-btn + width: 100% + &--form-rounded + border-radius: $button-rounded-border-radius + &--form-square + border-radius: $generic-border-radius + &__icon, &__active-icon + transition: opacity .4s, transform .4s + &__icon + opacity: 1 + transform: rotate(0deg) + &__active-icon + opacity: 0 + transform: rotate(-180deg) + &__label + &--external + position: absolute + padding: 0 8px + transition: opacity .18s cubic-bezier(.65,.815,.735,.395) + &-hidden + opacity: 0 + pointer-events: none + &--external-left + top: 50% + left: -12px + transform: translate(-100%, -50%) + &--external-right + top: 50% + right: -12px + transform: translate(100%, -50%) + &--external-bottom + bottom: -12px + left: 50% + transform: translate(-50%, 100%) + &--external-top + top: -12px + left: 50% + transform: translate(-50%, -100%) + &--internal + padding: 0 + transition: font-size .12s cubic-bezier(.65,.815,.735,.395), max-height .12s cubic-bezier(.65,.815,.735,.395), opacity .07s cubic-bezier(.65,.815,.735,.395) + max-height: 30px + &-hidden + font-size: 0 + opacity: 0 + &-top + padding-bottom: .12em + &-bottom + padding-top: .12em + &-top, &-bottom + &.q-fab__label--internal-hidden + max-height: 0 + &-left + padding-left: .285em + padding-right: .571em + &-right + padding-right: .285em + padding-left: .571em + &__icon-holder + min-width: 24px + min-height: 24px + position: relative + &--opened + .q-fab__icon + transform: rotate(180deg) + opacity: 0 + .q-fab__active-icon + transform: rotate(0deg) + opacity: 1 + &__actions + position: absolute + opacity: 0 + transition: transform .18s ease-in, opacity .18s ease-in + pointer-events: none + align-items: center + justify-content: center + align-self: center + padding: 3px + .q-btn + margin: 5px + &--right + transform-origin: 0 50% + transform: scale(.4) translateX(-62px) + height: 56px + left: 100% + margin-left: 9px + &--left + transform-origin: 100% 50% + transform: scale(.4) translateX(62px) + height: 56px + right: 100% + margin-right: 9px + flex-direction: row-reverse + &--up + transform-origin: 50% 100% + transform: scale(.4) translateY(62px) + width: 56px + bottom: 100% + margin-bottom: 9px + flex-direction: column-reverse + &--down + transform-origin: 50% 0 + transform: scale(.4) translateY(-62px) + width: 56px + top: 100% + margin-top: 9px + flex-direction: column + &--up, &--down + left: 50% + margin-left: -28px + &--opened + opacity: 1 + transform: scale(1) translate(0, 0) + pointer-events: all + &--align-left + > .q-fab__actions + &--up, &--down + align-items: flex-start + left: 28px + &--align-right + > .q-fab__actions + &--up, &--down + align-items: flex-end + left: auto + right: 0 +$field-transition: .36s cubic-bezier(.4,0,.2,1) +$field-transition-label-right-down: .396s cubic-bezier(.4,0,.2,1) +$field-transition-label-right-up: .324s cubic-bezier(.4,0,.2,1) +.q-field + font-size: $input-font-size + ::-ms-clear, + ::-ms-reveal + display: none + &--with-bottom + padding-bottom: 20px + &__marginal + height: 56px + color: rgba(0,0,0,.54) + font-size: 24px + > * + * + margin-left: 2px + .q-avatar + font-size: 32px + &__before, &__prepend + padding-right: 12px + &__after, &__append + padding-left: 12px + &:empty + display: none + &__append + &__append + padding-left: 2px + &__inner + text-align: left + &__bottom + font-size: 12px + min-height: 20px + line-height: 1 + color: rgba(0,0,0,.54) + padding: 8px 12px 0 + backface-visibility: hidden + &--animated + transform: translateY(100%) + position: absolute + left: 0 + right: 0 + bottom: 0 + &__messages + line-height: 1 + > div + word-break: break-word + word-wrap: break-word + overflow-wrap: break-word + & + div + margin-top: 4px + &__counter + padding-left: 8px + line-height: 1 + &--item-aligned + padding: 8px 16px + .q-field__before + min-width: 56px + &__control-container + height: inherit + &__control + color: $primary + color: var(--q-color-primary) + height: 56px + max-width: 100% + outline: none + &:before, &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + pointer-events: none + &:before + border-radius: inherit + &__shadow + top: 8px + opacity: 0 + overflow: hidden + white-space: pre-wrap + transition: opacity $field-transition + + .q-field__native + &::placeholder + transition: opacity $field-transition + &:focus::placeholder + opacity: 0 + &__native, &__prefix, &__suffix, &__input + font-weight: 400 + line-height: 28px + letter-spacing: .00937em + text-decoration: inherit + text-transform: inherit + border: none + border-radius: 0 + background: none + color: $input-text-color + outline: 0 + padding: 6px 0 + &__native, &__input + width: 100% + min-width: 0 + outline: 0 !important + user-select: auto + &:-webkit-autofill + -webkit-animation-name: q-autofill + -webkit-animation-fill-mode: both + &:-webkit-autofill + .q-field__label + transform: translateY(-40%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-40%) scale(.75) + &:invalid + box-shadow: none + &__native[type="file"] + line-height: 1em + &__input + padding: 0 + height: 0 + min-height: 24px + line-height: 24px + &__prefix, &__suffix + transition: opacity $field-transition + white-space: nowrap + &__prefix + padding-right: 4px + &__suffix + padding-left: 4px + &--readonly, &--disabled + .q-placeholder + opacity: 1 !important + &--readonly + &.q-field--labeled + .q-field__native, .q-field__input + cursor: default + &.q-field--float + .q-field__native, .q-field__input + cursor: text + &--disabled + .q-field__inner + cursor: not-allowed + .q-field__control + pointer-events: none + .q-field__control + opacity: .6 !important + div, div * + outline: 0 !important + &__label + left: 0 + max-width: 100% + top: 18px + color: $input-label-color + font-size: 16px + line-height: 20px + font-weight: 400 + letter-spacing: .00937em + text-decoration: inherit + text-transform: inherit + transform-origin: left top + transition: transform $field-transition, max-width $field-transition-label-right-up + backface-visibility: hidden + &__label-back + position: absolute + left: 0 + right: 0 + top: 7.5px + height: 0 + z-index: -1 + transition: height $field-transition + &--float .q-field__label-back + height: 4.5px + &--float .q-field__label + transform: translateY(-40%) scale(.75) + max-width: 133% + transition: transform $field-transition, max-width $field-transition-label-right-down + &--highlighted + .q-field__label + color: currentColor + .q-field__shadow + opacity: .5 + &--filled + .q-field__control + padding: 0 12px + background: rgba(0,0,0,.05) + border-radius: $generic-border-radius $generic-border-radius 0 0 + &:before + background: rgba(0,0,0,.05) + border-bottom: 1px solid rgba(0,0,0,.42) + opacity: 0 + transition: opacity $field-transition, background $field-transition + &:hover:before + opacity: 1 + &:after + height: 2px + top: auto + transform-origin: center bottom + transform: scale3d(0, 1, 1) + background: currentColor + transition: transform $field-transition + &.q-field--rounded .q-field__control + border-radius: 28px 28px 0 0 + &.q-field--highlighted + .q-field__control + &:before + opacity: 1 + background: rgba(0,0,0,.12) + &:after + transform: scale3d(1, 1, 1) + &.q-field--dark + .q-field__control, .q-field__control:before + background: rgba(255,255,255,.07) + &.q-field--highlighted .q-field__control:before + background: rgba(255,255,255,.1) + &.q-field--readonly + .q-field__control:before + opacity: 1 + background: transparent + border-bottom-style: dashed + &--outlined + .q-field__control + border-radius: $generic-border-radius + padding: 0 12px + &:before + border: 1px solid rgba(0,0,0,.24) + transition: border-color $field-transition + &:hover:before + border-color: $light-text + border-color: var(--q-color-light-text) + &:after + height: inherit + border-radius: inherit + border: 2px solid transparent + transition: border-color $field-transition + .q-field__native, + .q-field__input + &:-webkit-autofill + margin-top: 1px + margin-bottom: 1px + &.q-field--rounded .q-field__control + border-radius: 28px + &.q-field--highlighted + + .q-field__control:hover:before + border-color: transparent + .q-field__control:after + border-color: currentColor + border-width: 2px + transform: scale3d(1, 1, 1) + &.q-field--readonly + .q-field__control:before + border-style: dashed + &--standard + .q-field__control + &:before + border-bottom: 1px solid rgba(0,0,0,.24) + transition: border-color $field-transition + &:hover:before + border-color: $light-text + border-color: var(--q-color-light-text) + &:after + height: 2px + top: auto + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + transform-origin: center bottom + transform: scale3d(0, 1, 1) + background: currentColor + transition: transform $field-transition + &.q-field--highlighted + .q-field__control:after + transform: scale3d(1, 1, 1) + &.q-field--readonly + .q-field__control:before + border-bottom-style: dashed + &--dark + .q-field__control:before + border-color: rgba(255,255,255,.6) + .q-field__control:hover:before + border-color: $dark-text + border-color: var(--q-color-dark-text) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + &:not(.q-field--highlighted) .q-field__label, .q-field__marginal, .q-field__bottom + color: rgba(255,255,255,.7) + &--standout + .q-field__control + padding: 0 12px + background: rgba(0,0,0,.05) + border-radius: $generic-border-radius + transition: box-shadow $field-transition, background-color $field-transition + &:before + background: rgba(0,0,0,.07) + opacity: 0 + transition: opacity $field-transition, background $field-transition + &:hover:before + opacity: 1 + &.q-field--rounded .q-field__control + border-radius: 28px + &.q-field--highlighted + .q-field__control + box-shadow: $shadow-2 + background: $dark-page + background: var(--q-color-dark-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + &.q-field--readonly + .q-field__control:before + opacity: 1 + background: transparent + border: 1px dashed rgba(0,0,0,.24) + &.q-field--dark + .q-field__control + background: rgba(255,255,255,.07) + &:before + background: rgba(255,255,255,.07) + &.q-field--highlighted + .q-field__control + background: $light-page + background: var(--q-color-light-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $light-text + color: var(--q-color-light-text) + &.q-field--readonly + .q-field__control:before + border-color: rgba(255,255,255,.24) + &--labeled + &--std + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 24px + padding-top: 24px + padding-bottom: 8px + .q-field__shadow + top: 0 + &:not(.q-field--float) + .q-field__prefix, .q-field__suffix + opacity: 0 + .q-field__native, .q-field__input + &::-webkit-input-placeholder + color: transparent + &::-moz-placeholder + color: transparent + &:-ms-input-placeholder + color: transparent !important + &::-ms-input-placeholder + color: transparent + &::placeholder + color: transparent + &--std.q-field--dense + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 14px + padding-bottom: 2px + &--dense + .q-field__shadow + top: 0 + .q-field__control, .q-field__marginal + height: 40px + .q-field__bottom + font-size: 11px + .q-field__label + font-size: 14px + top: 10px + .q-field__before, .q-field__prepend + padding-right: 6px + .q-field__after, .q-field__append + padding-left: 6px + .q-field__append + .q-field__append + padding-left: 2px + .q-field__marginal + .q-avatar + font-size: 24px + &.q-field--float .q-field__label + transform: translateY(-30%) scale(.75) + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-30%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-30%) scale(.75) + &--outlined--md + &.q-field--float .q-field__label + max-width: 133% + transform: translateY(-120%) scale(.75) + padding-left: 6px + padding-right: 6px + transition: transform $field-transition, padding $field-transition, max-width $field-transition-label-right-down + .q-field__label + z-index: 1 + left: -4px + padding-left: 4px + padding-right: 4px + border-radius: 4px + transition: transform $field-transition, padding $field-transition, max-width $field-transition-label-right-up + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-120%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-120%) scale(.75) + &.q-field--dense + &.q-field--outlined--md.q-field--float .q-field__label + transform: translateY(-85%) scale(.75) + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-85%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-85%) scale(.75) + &--borderless, &--standard + .q-field__bottom, + &.q-field--dense .q-field__control + padding-left: 0 + padding-right: 0 + &--error + .q-field__label + animation: q-field-label .36s + .q-field__bottom + color: $negative + color: var(--q-color-negative) + &__focusable-action + opacity: 0.6 + cursor: pointer + outline: 0 !important + border: 0 + color: inherit + background: transparent + padding: 0 + &:hover, + &:focus + opacity: 1 + &--auto-height + .q-field__control + height: auto + .q-field__control, .q-field__native + min-height: 56px + .q-field__native + align-items: center + .q-field__control-container + padding-top: 0 + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 18px + &.q-field--labeled--std + .q-field__control-container + padding-top: 24px + .q-field__shadow + top: 24px + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 0 + .q-field__native + min-height: 24px + &.q-field--dense + .q-field__control, .q-field__native + min-height: 40px + &.q-field--labeled--std + .q-field__control-container + padding-top: 14px + .q-field__shadow + top: 14px + .q-field__native + min-height: 24px + &--square .q-field__control + border-radius: 0 !important +.q-transition--field-message + &-enter-active, + &-leave-active + transition: transform .6s cubic-bezier(.86,0,.07,1), opacity .6s cubic-bezier(.86,0,.07,1) + &-enter, &-leave-to + opacity: 0 + transform: translateY(-10px) + &-leave, &-leave-active + position: absolute +@media (prefers-color-scheme: dark) + .q-field--dark-auto + &.q-field--filled + .q-field__control, .q-field__control:before + background: rgba(255,255,255,.07) + &.q-field--highlighted .q-field__control:before + background: rgba(255,255,255,.1) + .q-field__control:before + border-color: rgba(255,255,255,.6) + .q-field__control:hover:before + border-color: $dark-text + border-color: var(--q-color-dark-text) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + &:not(.q-field--highlighted) .q-field__label, .q-field__marginal, .q-field__bottom + color: rgba(255,255,255,.7) + &.q-field--standout + .q-field__control + background: rgba(255,255,255,.07) + &:before + background: rgba(255,255,255,.07) + &.q-field--highlighted + .q-field__control + background: $light-page + background: var(--q-color-light-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $light-text + color: var(--q-color-light-text) + &.q-field--readonly + .q-field__control:before + border-color: rgba(255,255,255,.24) +@keyframes q-field-label + 40% + margin-left: 2px + 60%, 80% + margin-left: -2px + 70%, 90% + margin-left: 2px +@keyframes q-autofill + to + background: transparent + color: $input-autofill-color +.q-file + .q-field__native + word-break: break-all + .q-field__input + opacity: 0 !important + &::-webkit-file-upload-button + cursor: pointer + &__filler + visibility: hidden + width: 100% + border: none + padding: 0 + &__dnd + outline: 1px dashed currentColor + outline-offset: -4px +.q-form + position: relative +.q-img + position: relative + width: $img-width + display: inline-block + vertical-align: middle + &__loading .q-spinner + font-size: $img-loading-font-size + &__image + border-radius: inherit + background-repeat: $img-background-repeat + &__content + overflow: hidden + border-radius: inherit + > div + position: $img-content-position + padding: $img-content-padding + color: $img-content-color + background: $img-content-background + &--menu + .q-img + &__image + pointer-events: none + > img + pointer-events: all + opacity: 0 + &__content + pointer-events: none + > div + pointer-events: all +.q-inner-loading + background: $light-dimmed-background + &--dark + background: $dimmed-background + &__label + margin-top: 8px +@media (prefers-color-scheme: dark) + .q-inner-loading--dark-auto + background: $dimmed-background +.q-textarea + .q-field__control + min-height: 56px + height: auto + .q-field__control-container + padding-top: 2px + padding-bottom: 2px + .q-field__shadow + top: 2px + bottom: 2px + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 18px + .q-field__native + resize: vertical + padding-top: 17px + min-height: 52px + &.q-field--labeled--std + .q-field__control-container + padding-top: 26px + .q-field__shadow + top: 26px + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 0 + .q-field__native + min-height: 26px + padding-top: 1px + &--autogrow + .q-field__native + resize: none + &.q-field--dense + .q-field__control, .q-field__native + min-height: 36px + .q-field__native + padding-top: 9px + &.q-field--labeled--std + .q-field__control-container + padding-top: 14px + .q-field__shadow + top: 14px + .q-field__native + min-height: 24px + padding-top: 3px + .q-field__prefix, .q-field__suffix + padding-top: 2px +body.mobile .q-textarea, +.q-textarea.disabled + .q-field__native + resize: none +.q-intersection + position: relative +.q-item + min-height: 48px + padding: 8px 16px + color: inherit + transition: color .3s, background-color .3s + &__section + &--side + color: $grey-7 + align-items: flex-start + padding-right: 16px + width: auto + min-width: 0 + max-width: 100% + > .q-icon + font-size: 24px + > .q-avatar + font-size: 40px + &--avatar + color: inherit + min-width: 56px + &--thumbnail + img + width: 100px + height: 56px + &--nowrap + white-space: nowrap + > .q-item__section--thumbnail:first-child, + > .q-focus-helper + .q-item__section--thumbnail + margin-left: -16px + > .q-item__section--thumbnail:last-of-type + margin-right: -16px + &__label + line-height: 1.2em !important + max-width: 100% + &--overline + color: rgba(0,0,0,.7) + &--caption + color: rgba(0,0,0,.54) + &--header + color: $grey-7 + padding: 16px + font-size: .875rem + line-height: 1.25rem + letter-spacing: .01786em + .q-separator--spaced + &, .q-list--padding & + padding-top: 8px + & + .q-item__label + margin-top: 4px +.q-item__section--main + width: auto + min-width: 0 + max-width: 100% + flex: 10000 1 0% + & + & + margin-left: 8px + ~ .q-item__section--side + align-items: flex-end + padding-right: 0 + padding-left: 16px + &.q-item__section--thumbnail + margin-left: 0 + margin-right: -16px +.q-list + &--bordered + border: 1px solid $separator-color + &--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top: 1px solid $separator-color + &--padding + padding: 8px 0 +.q-list--dense > .q-item, .q-item--dense + min-height: 32px + padding: 2px 16px +.q-list--dark.q-list--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top-color: $separator-dark-color +.q-list--dark, .q-item--dark + color: $dark-text + color: var(--q-color-dark-text) + border-color: $separator-dark-color + .q-item__section--side:not(.q-item__section--avatar) + color: rgba(255,255,255,.7) + .q-item__label + &--header + color: rgba(255,255,255,.64) + &--overline, &--caption + color: rgba(255,255,255,.8) +.q-item + position: relative + &.q-router-link--active, &--active + color: $primary + color: var(--q-color-primary) +@media (prefers-color-scheme: dark) + .q-list--dark-auto.q-list--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top-color: $separator-dark-color + .q-list--dark-auto, .q-item--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + border-color: $separator-dark-color + .q-item__section--side:not(.q-item__section--avatar) + color: rgba(255,255,255,.7) + .q-item__label + &--header + color: rgba(255,255,255,.64) + &--overline, &--caption + color: rgba(255,255,255,.8) +.q-knob + font-size: 48px + &--editable + cursor: pointer + outline: 0 + &:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + box-shadow: none + transition: box-shadow .24s ease-in-out + &:focus:before + box-shadow: $shadow-4 +.q-layout + width: 100% +.q-layout-container + position: relative + width: 100% + height: 100% + .q-layout + min-height: 100% + > div + contain: layout size + contain: layout size style + transform: translateZ(0) + > div + min-height: 0 + max-height: 100% +.q-layout__shadow + width: 100% + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + box-shadow: $layout-shadow +.q-layout__section--marginal + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) +.q-header + &--hidden + transform: translateY(-110%) + &--bordered + border-bottom: $layout-border + .q-layout__shadow + bottom: -10px + &:after + bottom: 10px +.q-footer + &--hidden + transform: translateY(110%) + &--bordered + border-top: $layout-border + .q-layout__shadow + top: -10px + &:after + top: 10px +.q-header, .q-footer + z-index: $z-marginals +.q-drawer + position: absolute + top: 0 + bottom: 0 + z-index: $z-side + contain: layout size + contain: layout size style + &--on-top + z-index: $z-fixed-drawer + &--left + left: 0 + transform: translateX(-100%) + &.q-drawer--bordered + border-right: $layout-border + .q-layout__shadow + left: 10px + right: -10px + &:after + right: 10px + &--right + right: 0 + transform: translateX(100%) + &.q-drawer--bordered + border-left: $layout-border + .q-layout__shadow + left: -10px + &:after + left: 10px + &-container:not(&--mini-animate) &--mini + padding: 0 !important + .q-item, .q-item__section + text-align: center + justify-content: center + padding-left: 0 + padding-right: 0 + min-width: 0 + .q-item__label, .q-item__section--main, .q-item__section--side ~ .q-item__section--side + display: none + &--mini + .q-mini-drawer-hide, .q-expansion-item__content + display: none + &--mini-animate &__content + overflow-x: hidden + white-space: nowrap + &--standard + .q-mini-drawer-only + display: none + &--mobile + .q-mini-drawer-only, .q-mini-drawer-hide + display: none + &__backdrop + z-index: ($z-fixed-drawer - 1) !important + will-change: opacity + opacity: 0 + background: $backdrop-background + background: var(--q-color-backdrop-background) + &__opener + z-index: ($z-marginals + 1) + height: 100% + width: 15px + user-select: none +.q-layout, .q-header, .q-footer, .q-page + position: relative +.q-page-sticky--shrink + pointer-events: none + > div + display: inline-block + pointer-events: auto +body.q-ios-padding + .q-layout--standard .q-header > .q-toolbar:nth-child(1), + .q-layout--standard .q-header > .q-tabs:nth-child(1) .q-tabs-head, + .q-layout--standard .q-drawer--top-padding .q-drawer__content + padding-top: $ios-statusbar-height + min-height: ($toolbar-min-height + $ios-statusbar-height) + padding-top: env(safe-area-inset-top) + min-height: calc(env(safe-area-inset-top) + #{$toolbar-min-height}) + .q-layout--standard .q-footer > .q-toolbar:last-child, + .q-layout--standard .q-footer > .q-tabs:last-child .q-tabs-head, + .q-layout--standard .q-drawer--top-padding .q-drawer__content + padding-bottom: env(safe-area-inset-bottom) + min-height: calc(env(safe-area-inset-bottom) + #{$toolbar-min-height}) +.q-body--layout-animate + .q-drawer__backdrop + transition: opacity .12s !important + .q-drawer + transition: transform .12s, width .12s, top .12s, bottom .12s !important + .q-layout__section--marginal + transition: transform .12s, left .12s, right .12s !important + .q-page-container + transition: padding-top .12s, padding-right .12s, padding-bottom .12s, padding-left .12s !important + .q-page-sticky + transition: transform .12s, left .12s, right .12s, top .12s, bottom .12s !important +body:not(.q-body--layout-animate) + .q-layout--prevent-focus + visibility: hidden +.q-body--drawer-toggle + overflow-x: hidden !important +.q-layout-padding + @media (max-width: $breakpoint-xs-max) + padding: 8px + @media (min-width: $breakpoint-sm-min) and (max-width: $breakpoint-md-max) + padding: 16px + @media (min-width: $breakpoint-lg-min) + padding: 24px +body.body--dark + .q-header, .q-footer, .q-drawer + border-color: $separator-dark-color +@media (prefers-color-scheme: dark) + body.body--dark-auto + .q-header, .q-footer, .q-drawer + border-color: $separator-dark-color +body.platform-ios + .q-layout--containerized + + + + position: unset !important +.q-linear-progress + position: relative + width: 100% + overflow: hidden + font-size: 4px + height: 1em + color: $primary + color: var(--q-color-primary) + transform: scale3d(1, 1, 1) + &__model, &__track + transform-origin: 0 0 + &--with-transition + transition: transform .3s + &--reverse + .q-linear-progress + &__model, &__track + transform-origin: 0 100% + &__model + &--determinate + background: currentColor + &--indeterminate, &--query + transition: none + &:before, &:after + background: currentColor + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + transform-origin: 0 0 + &:before + animation: q-linear-progress--indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite + &:after + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1) + animation: q-linear-progress--indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite + animation-delay: 1.15s + &__track + opacity: .4 + &--light, + &--dark-auto + background: rgba(0,0,0,.26) + &--dark + background: rgba(255,255,255,.6) + &__stripe + transition: width .3s + background-image: linear-gradient(45deg, rgba(255,255,255,.15) 25%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, rgba(255,255,255,0) 75%, rgba(255,255,255,0)) !important + background-size: 40px 40px !important +@media (prefers-color-scheme: dark) + .q-linear-progress__track--dark-auto + background: rgba(255,255,255,.6) +@keyframes q-linear-progress--indeterminate + 0% + transform: translate3d(-35%, 0, 0) scale3d(.35, 1, 1) + 60% + transform: translate3d(100%, 0, 0) scale3d(.9, 1, 1) + 100% + transform: translate3d(100%, 0, 0) scale3d(.9, 1, 1) +@keyframes q-linear-progress--indeterminate-short + 0% + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1) + 60% + transform: translate3d(107%, 0, 0) scale3d(.01, 1, 1) + 100% + transform: translate3d(107%, 0, 0) scale3d(.01, 1, 1) +.q-menu + display: inline-block + max-width: $menu-max-width + max-height: 65vh + outline: 0 + border-radius: $generic-border-radius + box-shadow: $menu-box-shadow + background: $menu-background + opacity: 0 + &__container + position: fixed + z-index: $z-menu + contain: layout + contain: layout style + &--square + border-radius: 0 +.q-option-group + &--inline + > div + display: inline-block +.q-pagination + input + text-align: center + -moz-appearance: textfield + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button + -webkit-appearance: none + margin: 0 + &__content + --q-pagination-gutter-parent: -2px + --q-pagination-gutter-child: 2px + margin-top: var(--q-pagination-gutter-parent) + margin-left: var(--q-pagination-gutter-parent) + &__content > .q-btn, + &__content > .q-input, + &__middle > .q-btn + margin-top: var(--q-pagination-gutter-child) + margin-left: var(--q-pagination-gutter-child) +.q-parallax + position: relative + width: 100% + overflow: hidden + border-radius: inherit +.q-parallax__media + > img, > video + position: absolute + left: 50% #{"/* rtl:ignore */"} + bottom: 0 + min-width: 100% + min-height: 100% + will-change: transform + display: none +.q-popup-edit + padding: 8px 16px + &__buttons + margin-top: 8px + .q-btn + .q-btn + margin-left: 8px +.q-pull-to-refresh + position: relative + &__puller + border-radius: 50% + width: 40px + height: 40px + color: $primary + color: var(--q-color-primary) + background: $light-page + background: var(--q-color-light-page) + box-shadow: 0 0 4px 0 rgba(0,0,0,.3) + &--animating + transition: transform .3s, opacity .3s +$radio-transition: .22s cubic-bezier(0,0,.2,1) 0ms +.q-radio + vertical-align: middle + &__native + width: 1px + height: 1px + &__bg, + &__icon-container + user-select: none + &__bg + top: 25% + left: 25% + width: 50% + height: 50% + -webkit-print-color-adjust: exact + path + fill: currentColor + &__icon + color: currentColor + font-size: .5em + &__check + transform-origin: 50% 50% + transform: scale3d(0, 0, 1) + transition: transform $radio-transition + &__inner + font-size: 40px + width: 1em + min-width: 1em + height: 1em + outline: 0 + border-radius: 50% + color: rgba(0,0,0,.54) + &--truthy + color: $primary + color: var(--q-color-primary) + .q-radio__check + transform: scale3d(1, 1, 1) + &.disabled + opacity: .75 !important + &--dark + .q-radio__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy + color: $primary + color: var(--q-color-primary) + &--dense + .q-radio__inner + width: .5em + min-width: .5em + height: .5em + .q-radio__bg + left: 0 + top: 0 + width: 100% + height: 100% + .q-radio__label + padding-left: .5em + &.reverse .q-radio__label + padding-left: 0 + padding-right: .5em +body.desktop + .q-radio:not(.disabled) + .q-radio__inner:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $radio-transition + &:focus, + &:hover + .q-radio__inner:before + transform: scale3d(1, 1, 1) + .q-radio--dense:not(.disabled) + &:focus, + &:hover + .q-radio__inner:before + transform: scale3d(1.5, 1.5, 1) +@media (prefers-color-scheme: dark) + .q-radio--dark-auto + .q-radio__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy + color: $primary + color: var(--q-color-primary) +.q-rating + color: $rating-grade-color + vertical-align: middle + &__icon-container + height: 1em + outline: 0 + & + & + margin-left: 2px + &__icon + color: currentColor + text-shadow: $rating-shadow + position: relative + opacity: .4 + transition: transform .2s ease-in, opacity .2s ease-in + &--hovered + transform: scale(1.3) + &--active + opacity: 1 + &--exselected + opacity: .7 + &--no-dimming .q-rating__icon + opacity: 1 + &--editable .q-rating__icon-container + cursor: pointer +.q-responsive + position: relative + max-width: 100% + max-height: 100% + &__filler + width: inherit + max-width: inherit + height: inherit + max-height: inherit + &__content + border-radius: inherit + > * + width: 100% !important + height: 100% !important + max-height: 100% !important + max-width: 100% !important +.q-scrollarea + position: relative + contain: strict + &__bar, + &__thumb + opacity: .2 + transition: opacity .3s + will-change: opacity + cursor: grab + &--v + right: 0 + width: 10px + &--h + bottom: 0 + height: 10px + &--invisible + opacity: 0 !important + pointer-events: none + &__thumb + background: $dark-page + background: var(--q-color-dark-page) + &:hover + opacity: .3 + &:active + opacity: .5 + &__content + min-height: 100% + min-width: 100% + &--dark .q-scrollarea__thumb + background: $dark-text + background: var(--q-color-dark-text) +@media (prefers-color-scheme: dark) + .q-scrollarea--dark-auto + .q-scrollarea__thumb + background: $dark-text + background: var(--q-color-dark-text) +.q-select + &--without-input + .q-field__control + cursor: pointer + &--with-input + .q-field__control + cursor: text + &--with-chips + .q-field__input + margin: 7px 0 + &.q-field--labeled + .q-field__native + margin-top: -6px + padding-bottom: 0 + &.q-field--dense + .q-chip--dense + margin: 1px 4px + height: 20px + .q-field__input + margin: 0 + &.q-field--labeled + .q-field__native + margin-top: 0 + .q-field__input + min-width: 50px !important + cursor: text + &--padding + padding-left: 4px + &__focus-target, + &__autocomplete-input + position: absolute + outline: 0 !important + width: 1px + height: 1px + padding: 0 + border: 0 + opacity: 0 + &__dropdown-icon + cursor: pointer + transition: transform .28s + &__close-icon + cursor: pointer + &:not(:last-child) + margin-right: 12px + &.q-field--readonly + .q-field__control, .q-select__dropdown-icon + cursor: default + &__dialog + width: 90vw !important + max-width: 90vw !important + max-height: calc(100vh - 70px) !important + display: flex + flex-direction: column + > .scroll + position: relative + background: inherit +body.platform-android + &.native-mobile .q-dialog__inner--top .q-select__dialog + max-height: calc(100vh - 24px) !important + &:not(.native-mobile) + .q-select__dialog + max-height: calc(100vh - 108px) !important + .q-dialog__inner--top .q-select__dialog + max-height: calc(100vh - 62px) !important +body.platform-ios + &.native-mobile .q-dialog__inner--top + > div + border-radius: $generic-border-radius + .q-select__dialog--focused + max-height: 47vh !important + &:not(.native-mobile) + .q-select__dialog + + max-height: calc(100vh - 164px) !important + .q-dialog__inner--top .q-select__dialog--focused + max-height: 48vh !important +.q-separator + border: 0 + background: $separator-color + margin: 0 + transition: background .3s, opacity .3s + flex-shrink: 0 + &--dark + background: $separator-dark-color + &--horizontal + display: block + height: 1px + &-inset + margin-left: 16px + margin-right: 16px + &-item-inset + margin-left: 72px + margin-right: 0 + &-item-thumbnail-inset + margin-left: 116px + margin-right: 0 + &--vertical + width: 1px + height: auto + align-self: stretch + &-inset + margin-top: 8px + margin-bottom: 8px +@media (prefers-color-scheme: dark) + .q-separator--dark-auto + background: $separator-dark-color +.q-skeleton + background: $separator-color + border-radius: $generic-border-radius + &--anim + cursor: wait + + box-sizing: border-box + &:before + content: '\00a0' + &--type + &-text + transform: scale(1, .5) + &-circle, + &-QAvatar + height: 48px + width: 48px + border-radius: 50% + &-QBtn + width: 90px + height: 36px + &-QBadge + width: 70px + height: 16px + &-QChip + width: 90px + height: 28px + border-radius: 16px + &-QToolbar + height: 50px + &-QCheckbox, + &-QRadio + width: 40px + height: 40px + border-radius: 50% + &-QToggle + width: 56px + height: 40px + border-radius: 7px + &-QSlider, + &-QRange + height: 40px + &-QInput + height: 56px + &--bordered + border: 1px solid rgba(0,0,0,.05) + &--square + border-radius: 0 + &--anim-fade + animation: q-skeleton--fade 1.5s linear .5s infinite + &--anim-pulse + animation: q-skeleton--pulse 1.5s ease-in-out .5s infinite + &--anim-pulse-x + animation: q-skeleton--pulse-x 1.5s ease-in-out .5s infinite + &--anim-pulse-y + animation: q-skeleton--pulse-y 1.5s ease-in-out .5s infinite + &--anim-wave, + &--anim-blink, + &--anim-pop + position: relative + overflow: hidden + z-index: 1 + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + z-index: 0 + &--anim-blink:after + background: rgba(255,255,255,.7) + animation: q-skeleton--fade 1.5s linear .5s infinite + &--anim-wave:after + background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.5), rgba(255,255,255,0)) + animation: q-skeleton--wave 1.5s linear .5s infinite + &--dark + background: rgba(255, 255, 255, 0.05) + &.q-skeleton--bordered + border: 1px solid rgba(255,255,255,.25) + &.q-skeleton--anim-wave:after + background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.1), rgba(255,255,255,0)) + &.q-skeleton--anim-blink:after + background: rgba(255,255,255,.2) +@media (prefers-color-scheme: dark) + .q-skeleton--dark-auto + background: rgba(255, 255, 255, 0.05) + &.q-skeleton--bordered + border: 1px solid rgba(255,255,255,.25) + &.q-skeleton--anim-wave:after + background: linear-gradient(90deg, transparent, rgba(255,255,255,.1), transparent) + &.q-skeleton--anim-blink:after + background: rgba(255,255,255,.2) +@keyframes q-skeleton--fade + 0% + opacity: 1 + 50% + opacity: .4 + 100% + opacity: 1 +@keyframes q-skeleton--pulse + 0% + transform: scale(1) + 50% + transform: scale(.85) + 100% + transform: scale(1) +@keyframes q-skeleton--pulse-x + 0% + transform: scaleX(1) + 50% + transform: scaleX(.75) + 100% + transform: scaleX(1) +@keyframes q-skeleton--pulse-y + 0% + transform: scaleY(1) + 50% + transform: scaleY(.75) + 100% + transform: scaleY(1) +@keyframes q-skeleton--wave + 0% + transform: translateX(-100%) + 100% + transform: translateX(100%) +.q-slide-item + position: relative + &__left, &__right, &__top, &__bottom + visibility: hidden + font-size: 14px + color: $dark-text + color: var(--q-color-dark-text) + .q-icon + font-size: 1.714em + &__left + background: $green + padding: 8px 16px + > div + transform-origin: left center + &__right + background: $orange + padding: 8px 16px + > div + transform-origin: right center + &__top + background: $blue + padding: 16px 8px + > div + transform-origin: top center + &__bottom + background: $purple + padding: 16px 8px + > div + transform-origin: bottom center + &__content + background: inherit + transition: transform .2s ease-in + user-select: none + cursor: pointer +.q-slider + position: relative + &--h + width: 100% + &--v + height: 200px + &--editable .q-slider__track-container + cursor: grab + &__track-container + outline: 0 + &--h + width: 100% + padding: 12px 0 + .q-slider__selection + will-change: width, left + &--v + height: 100% + padding: 0 12px + .q-slider__selection + will-change: height, top + &__track + color: $primary + color: var(--q-color-primary) + background: rgba(0,0,0,.1) + border-radius: $generic-border-radius + width: inherit + height: inherit + &__inner + background: rgba(0,0,0,.1) + border-radius: inherit + width: 100% + height: 100% + &__selection + background: currentColor + border-radius: inherit + width: 100% + height: 100% + &__markers + color: rgba(0,0,0,.3) + border-radius: inherit + width: 100% + height: 100% + &:after + content: '' + position: absolute + background: currentColor + &--h + background-image: repeating-linear-gradient(to right, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)) + &:after + height: 100% + width: 2px + top: 0 + right: 0 + &--v + background-image: repeating-linear-gradient(to bottom, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)) + &:after + width: 100% + height: 2px + left: 0 + bottom: 0 + &__marker-labels-container + position: relative + width: 100% + height: 100% + min-height: 24px + min-width: 24px + &__marker-labels + position: absolute + &--h + &-standard + top: 0 + &-switched + bottom: 0 + &-ltr + transform: translateX(-50%) #{"/* rtl:ignore */"} + &-rtl + transform: translateX(50%) #{"/* rtl:ignore */"} + &--v + &-standard + left: 4px + &-switched + right: 4px + &-ltr + transform: translateY(-50%) #{"/* rtl:ignore */"} + &-rtl + transform: translateY(50%) #{"/* rtl:ignore */"} + &__thumb + z-index: 1 + outline: 0 + color: $primary + color: var(--q-color-primary) + transition: transform .18s ease-out, fill .18s ease-out, stroke .18s ease-out + &.q-slider--focus + opacity: 1 !important + &--wrong-value + opacity: 0 + &--h + top: 50% + will-change: left + &-ltr + transform: translate(-50%,-50%) #{"/* rtl:ignore */"} + &-rtl + transform: translate(50%,-50%) #{"/* rtl:ignore */"} + &--v + left: 50% #{"/* rtl:ignore */"} + will-change: top + &-ltr + transform: translate(-50%,-50%) #{"/* rtl:ignore */"} + &-rtl + transform: translate(-50%,50%) #{"/* rtl:ignore */"} + &__thumb-shape + top: 0 + left: 0 + stroke-width: 3.5 + stroke: currentColor + transition: transform .28s + path + stroke: currentColor + fill: currentColor + &__focus-ring + border-radius: 50% + opacity: 0 + transition: transform 266.67ms ease-out, opacity 266.67ms ease-out, background-color 266.67ms ease-out + transition-delay: .14s + &__pin + opacity: 0 + white-space: nowrap + transition: opacity .28s ease-out + transition-delay: .14s + &:before + content: '' + width: 0 + height: 0 + position: absolute + &--h + &:before + border-left: 6px solid transparent + border-right: 6px solid transparent + left: 50% + transform: translateX(-50%) + &-standard + bottom: 100% + &:before + bottom: 2px + border-top: 6px solid currentColor + &-switched + top: 100% + &:before + top: 2px + border-bottom: 6px solid currentColor + &--v + top: 0 + &:before + top: 50% + transform: translateY(-50%) + border-top: 6px solid transparent + border-bottom: 6px solid transparent + &-standard + left: 100% + &:before + left: 2px + border-right: 6px solid currentColor + &-switched + right: 100% + &:before + right: 2px + border-left: 6px solid currentColor + &__label + z-index: 1 + white-space: nowrap + position: absolute + &--h + left: 50% + transform: translateX(-50%) + &-standard + bottom: 7px + &-switched + top: 7px + &--v + top: 50% + transform: translateY(-50%) + &-standard + left: 7px + &-switched + right: 7px + &__text-container + min-height: 25px + padding: 2px 8px + border-radius: $generic-border-radius + background: currentColor + position: relative + text-align: center + &__text + color: $dark-text + color: var(--q-color-dark-text) + font-size: 12px + &--no-value + .q-slider__thumb, + .q-slider__inner, + .q-slider__selection + opacity: 0 + &--focus, + body.desktop &.q-slider--editable .q-slider__track-container:hover + .q-slider__focus-ring + background: currentColor + transform: scale3d(1.55, 1.55, 1) + opacity: .25 + &--focus, + &--no-value:focus-within, + body.desktop &.q-slider--editable .q-slider__track-container:hover + .q-slider__thumb, + .q-slider__inner, + .q-slider__selection + opacity: 1 + &--inactive + .q-slider__thumb + &--h + transition: left .28s, right .28s + &--v + transition: top .28s, bottom .28s + .q-slider__selection + transition: width .28s, left .28s, right .28s, height .28s, top .28s, bottom .28s + .q-slider__text-container + transition: transform .28s + &--active + cursor: grabbing + .q-slider__thumb-shape + transform: scale(1.5) + .q-slider__focus-ring, + &.q-slider--label .q-slider__thumb-shape + transform: scale(0) !important + body.desktop &.q-slider--enabled .q-slider__track-container:hover + .q-slider__pin + opacity: 1 + &--label + &.q-slider--active, + .q-slider--focus, + &.q-slider--label-always + .q-slider__pin + opacity: 1 + &--dark + .q-slider__track + background: rgba($light-page,.1) + .q-slider__inner + background: rgba($light-page,.1) + .q-slider__markers + color: rgba($light-page,.3) + &--dense + .q-slider__track-container + &--h + padding: 6px 0 + &--v + padding: 0 6px +@media (prefers-color-scheme: dark) + .q-slider--dark-auto + .q-slider__track + background: rgba($light-page,.1) + .q-slider__inner + background: rgba($light-page,.1) + .q-slider__markers + color: rgba($light-page,.3) +.q-space + flex-grow: 1 !important +.q-spinner + vertical-align: middle +.q-spinner-mat + animation: q-spin 2s linear infinite + transform-origin: center center + .path + stroke-dasharray: 1, 200 #{"/* rtl:ignore */"} + stroke-dashoffset: 0 #{"/* rtl:ignore */"} + animation: q-mat-dash 1.5s ease-in-out infinite +@keyframes q-spin + 0% + transform: rotate3d(0, 0, 1, 0deg) #{"/* rtl:ignore */"} + 25% + transform: rotate3d(0, 0, 1, 90deg) #{"/* rtl:ignore */"} + 50% + transform: rotate3d(0, 0, 1, 180deg) #{"/* rtl:ignore */"} + 75% + transform: rotate3d(0, 0, 1, 270deg) #{"/* rtl:ignore */"} + 100% + transform: rotate3d(0, 0, 1, 359deg) #{"/* rtl:ignore */"} +@keyframes q-mat-dash + 0% + stroke-dasharray: 1, 200 #{"/* rtl:ignore */"} + stroke-dashoffset: 0 #{"/* rtl:ignore */"} + 50% + stroke-dasharray: 89, 200 #{"/* rtl:ignore */"} + stroke-dashoffset: -35px #{"/* rtl:ignore */"} + 100% + stroke-dasharray: 89, 200 #{"/* rtl:ignore */"} + stroke-dashoffset: -124px #{"/* rtl:ignore */"} +.q-splitter + &__panel + position: relative + z-index: 0 + > .q-splitter + width: 100% + height: 100% + &__separator + background-color: $separator-color + user-select: none + position: relative + z-index: 1 + &__separator-area > * + position: absolute + top: 50% + left: 50% + transform: translate(-50%, -50%) + &--dark + .q-splitter__separator + background-color: $separator-dark-color + &--vertical + > .q-splitter__panel + height: 100% + &.q-splitter--active + cursor: col-resize + > .q-splitter__separator + width: 1px + > div + left: -6px + right: -6px + &.q-splitter--workable > .q-splitter__separator + cursor: col-resize + &--horizontal + > .q-splitter__panel + width: 100% + &.q-splitter--active + cursor: row-resize + > .q-splitter__separator + height: 1px + > div + top: -6px + bottom: -6px + &.q-splitter--workable > .q-splitter__separator + cursor: row-resize + &__before, &__after + overflow: auto +@media (prefers-color-scheme: dark) + .q-splitter--dark-auto + .q-splitter__separator + background-color: $separator-dark-color +.q-stepper + box-shadow: $shadow-2 + border-radius: $generic-border-radius + &__title + font-size: 14px + line-height: 18px + letter-spacing: .1px + &__caption + font-size: 12px + line-height: 14px + &__dot + contain: layout + margin-right: 8px + font-size: 14px + width: 24px + min-width: 24px + height: 24px + border-radius: 50% + background: currentColor + span + color: $dark-text + color: var(--q-color-dark-text) + &__tab + padding: 8px 24px + font-size: 14px + color: $grey + flex-direction: row + &__tab + &--navigation + user-select: none + cursor: pointer + &--active, &--done + color: $primary + color: var(--q-color-primary) + .q-stepper__dot, .q-stepper__label + text-shadow: 0 0 0 currentColor + &--disabled + .q-stepper__dot + background: rgba(0,0,0,.22) + .q-stepper__label + color: rgba(0,0,0,.32) + &--error + color: $negative + color: var(--q-color-negative) + &--error-with-icon + .q-stepper__dot + background: transparent !important + span + color: currentColor + .q-icon + font-size: 24px + &__header + border-top-left-radius: inherit + border-top-right-radius: inherit + &--border + border-bottom: 1px solid $separator-color + &--standard-labels + .q-stepper__tab + min-height: 72px + justify-content: center + &:first-child + justify-content: flex-start + &:last-child + justify-content: flex-end + &:only-child + justify-content: center + .q-stepper__dot:after + display: none + &--alternative-labels + .q-stepper__tab + min-height: 104px + padding: 24px 32px + flex-direction: column + justify-content: flex-start + .q-stepper__dot + margin-right: 0 + .q-stepper__label + margin-top: 8px + text-align: center + &:before, &:after + display: none + &--contracted + min-height: 72px + &.q-stepper__header--alternative-labels + .q-stepper__tab + min-height: 72px + &:first-child + align-items: flex-start + &:last-child + align-items: flex-end + .q-stepper__tab + padding: 24px 0 + &:first-child + .q-stepper__dot + transform: translateX(24px) + &:last-child + .q-stepper__dot + transform: translateX(-24px) + &:not(:last-child) + .q-stepper__dot:after + display: block !important + .q-stepper__dot + margin: 0 + .q-stepper__label + display: none + &__nav + padding-top: 24px + &--bordered + border: 1px solid $separator-color + &--horizontal + .q-stepper__step-inner + padding: 24px + .q-stepper__tab:first-child + border-top-left-radius: inherit + .q-stepper__tab:last-child + border-top-right-radius: inherit + .q-stepper__tab:first-child .q-stepper__dot:before, + .q-stepper__tab:last-child .q-stepper__label:after, + .q-stepper__tab:last-child .q-stepper__dot:after + display: none + .q-stepper__tab + overflow: hidden + .q-stepper__line + contain: layout + &:before, &:after + position: absolute + top: 50% + height: 1px + width: 100vw + background: $separator-color + .q-stepper__label:after, .q-stepper__dot:after + content: '' + left: 100% + margin-left: 8px + .q-stepper__dot:before + content: '' + right: 100% + margin-right: 8px + > .q-stepper__nav + padding: 0 24px 24px + &--vertical + padding: 16px 0 + .q-stepper__tab + padding: 12px 24px + .q-stepper__title + line-height: 18px + .q-stepper__step-inner + padding: 0 24px 32px 60px + > .q-stepper__nav + padding: 24px 24px 0 + .q-stepper__step + overflow: hidden + .q-stepper__dot + margin-right: 12px + &:before, &:after + content: '' + position: absolute + left: 50% + width: 1px + height: 99999px + background: $separator-color + .q-stepper__dot:before + bottom: 100% + margin-bottom: 8px + .q-stepper__dot:after + top: 100% + margin-top: 8px + .q-stepper__step:first-child .q-stepper__dot:before, + .q-stepper__step:last-child .q-stepper__dot:after + display: none + .q-stepper__step:last-child .q-stepper__step-inner + padding-bottom: 8px + &--dark + .q-stepper__dot span + color: $light-text + color: var(--q-color-light-text) + &.q-stepper--bordered, + .q-stepper__header--border + border-color: $separator-dark-color + &.q-stepper--horizontal + .q-stepper__line + &:before, &:after + background: $separator-dark-color + &.q-stepper--vertical + .q-stepper__dot + &:before, &:after + background: $separator-dark-color + .q-stepper__tab + &--disabled + color: $separator-dark-color + .q-stepper__dot + background: $separator-dark-color + .q-stepper__label + color: rgba(255,255,255,.54) +@media (prefers-color-scheme: dark) + .q-stepper--dark-auto + .q-stepper__dot span + color: $light-text + color: var(--q-color-light-text) + &.q-stepper--bordered, + .q-stepper__header--border + border-color: $separator-dark-color + &.q-stepper--horizontal + .q-stepper__line + &:before, &:after + background: $separator-dark-color + &.q-stepper--vertical + .q-stepper__dot + &:before, &:after + background: $separator-dark-color + .q-stepper__tab + &--disabled + color: $separator-dark-color + .q-stepper__dot + background: $separator-dark-color + .q-stepper__label + color: rgba(255,255,255,.54) +.q-tab-panel + padding: 16px +.q-markup-table + overflow: auto +.q-table + width: 100% + max-width: 100% + border-collapse: separate + border-spacing: 0 + thead tr, tbody td + height: 48px + th + font-weight: 500 + font-size: 12px + user-select: none + &.sortable + cursor: pointer + &:hover .q-table__sort-icon + opacity: .64 + &.sorted .q-table__sort-icon + opacity: .86 !important + &.sort-desc .q-table__sort-icon + transform: rotate(180deg) + th, td + padding: 7px 16px + background-color: inherit + thead, td, th + border-style: solid + border-width: 0 + tbody td + font-size: 13px + &__card + color: $light-text + color: var(--q-color-light-text) + border-radius: $table-border-radius + box-shadow: $table-box-shadow + .q-table__middle + flex: 1 1 auto + .q-table__top, + .q-table__bottom + flex: 0 0 auto + &__container + position: relative + &.fullscreen + max-height: 100% + > div:first-child + border-top-left-radius: inherit + border-top-right-radius: inherit + > div:last-child + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + > .q-inner-loading + border-radius: inherit !important + &__top + padding: 12px 16px + .q-table__control + flex-wrap: wrap + &__title + font-size: 20px + letter-spacing: .005em + font-weight: 400 + &__separator + min-width: 8px !important + &__progress + height: 0 !important + th + padding: 0 !important + border: 0 !important + .q-linear-progress + position: absolute + bottom: 0 + &__middle + max-width: 100% + &__bottom + min-height: 50px + padding: 4px 14px 4px 16px + font-size: 12px + .q-table__control + min-height: 24px + &__bottom-nodata-icon + font-size: 200% + margin-right: 8px + &__bottom-item + margin-right: 16px + &__control + display: flex + align-items: center + &__sort-icon + transition: transform $table-transition + opacity: 0 + font-size: 120% + &--left, &--center + margin-left: 4px + &--right + margin-right: 4px + &--col-auto-width + width: 1px + &--flat + box-shadow: none + &--bordered + border: 1px solid $table-border-color + &--square + border-radius: 0 + &__linear-progress + height: 2px + &--no-wrap + th, td + white-space: nowrap + &--grid + box-shadow: none + border-radius: $generic-border-radius + .q-table__top + padding-bottom: 4px + .q-table__middle + min-height: 2px + margin-bottom: 4px + thead + &, th + border: 0 !important + .q-table__linear-progress + bottom: 0 + .q-table__bottom + border-top: 0 + .q-table__grid-content + flex: 1 1 auto + &.fullscreen + background: inherit + &__grid-item-card + vertical-align: top + padding: 12px + .q-separator + margin: 12px 0 + &__grid-item-row + &__grid-item-row + margin-top: 8px + &__grid-item-title + opacity: .54 + font-weight: 500 + font-size: 12px + &__grid-item-value + font-size: 13px + &__grid-item + padding: 4px + transition: transform $table-transition + &--selected + transform: scale(.95) +.q-table--horizontal-separator, .q-table--cell-separator + thead th, tbody tr:not(:last-child) > td + border-bottom-width: 1px +.q-table--vertical-separator, .q-table--cell-separator + td, th + border-left-width: 1px + thead tr:last-child th, + &.q-table--loading tr:nth-last-child(2) th + border-bottom-width: 1px + td:first-child, th:first-child + border-left: 0 + .q-table__top + border-bottom: 1px solid $table-border-color +.q-table--dense + .q-table__top + padding: 6px 16px + .q-table__bottom + min-height: 33px + .q-table__sort-icon + font-size: 110% + .q-table + th, td + padding: 4px 8px + thead tr, tbody tr, tbody td + height: 28px + th:first-child, td:first-child + padding-left: 16px + th:last-child, td:last-child + padding-right: 16px + .q-table__bottom-item + margin-right: 8px + .q-table__select + .q-field__control, .q-field__native + min-height: 24px + padding: 0 + .q-field__marginal + height: 24px +.q-table__bottom + border-top: 1px solid $table-border-color +.q-table + thead, tr, th, td + border-color: $table-border-color + tbody + td + position: relative + &:before, &:after + position: absolute + top: 0 + left: 0 + right: 0 + bottom: 0 + pointer-events: none + &:before + background: $table-hover-background + &:after + background: $table-selected-background + tr.selected td:after + content: '' +body.desktop .q-table > tbody > tr:not(.q-tr--no-hover):hover > td:not(.q-td--no-hover):before + content: '' +.q-table__card--dark, .q-table--dark + border-color: $table-dark-border-color +.q-table--dark + .q-table__bottom, thead, tr, th, td + border-color: $table-dark-border-color + tbody + td + &:before + background: $table-dark-hover-background + &:after + background: $table-dark-selected-background + &.q-table--vertical-separator, &.q-table--cell-separator + .q-table__top + border-color: $table-dark-border-color +@media (prefers-color-scheme: dark) + .q-table__card--dark-auto, .q-table--dark-auto + border-color: $table-dark-border-color + .q-table--dark-auto + .q-table__bottom, thead, tr, th, td + border-color: $table-dark-border-color + tbody + td + &:before + background: $table-dark-hover-background + &:after + background: $table-dark-selected-background + &.q-table--vertical-separator, &.q-table--cell-separator + .q-table__top + border-color: $table-dark-border-color +.q-tab + padding: 0 16px + min-height: 48px + transition: color .3s, background-color .3s + text-transform: uppercase + white-space: nowrap + + color: inherit + text-decoration: none + &--full + min-height: 72px + &--no-caps + text-transform: none + &__content + height: inherit + padding: 4px 0 + min-width: 40px + &--inline + .q-tab__icon + .q-tab__label + padding-left: 8px + .q-chip--floating + top: 0 + right: -16px + &__icon + width: 24px + height: 24px + font-size: 24px + &__label + font-size: $button-font-size + line-height: $button-line-height + font-weight: $button-font-weight + .q-badge + top: 3px + right: -12px + &__alert, &__alert-icon + position: absolute + &__alert + top: 7px + right: -9px + height: 10px + width: 10px + border-radius: 50% + background: currentColor + &__alert-icon + top: 2px + right: -12px + font-size: 18px + &__indicator + opacity: 0 + height: 2px + background: currentColor + &--active .q-tab__indicator + opacity: 1 + transform-origin: left #{"/* rtl:ignore */"} + &--inactive + opacity: .85 +.q-tabs + position: relative + transition: color .3s, background-color .3s + &--scrollable + &.q-tabs__arrows--outside + &.q-tabs--horizontal + padding-left: 36px + padding-right: 36px + &.q-tabs--vertical + padding-top: 36px + padding-bottom: 36px + .q-tabs__arrow--faded + opacity: 0.3 + pointer-events: none + &.q-tabs__arrows--inside + .q-tabs__arrow--faded + display: none + &--not-scrollable + .q-tabs__arrow + display: none + .q-tabs__content + border-radius: inherit + &__arrow + cursor: pointer + font-size: 32px + min-width: 36px + text-shadow: 0 0 3px #fff, 0 0 1px #fff, 0 0 1px #000 + transition: opacity .3s + &__content + overflow: hidden + flex: 1 1 auto + &--align + &-center + justify-content: center + &-right + justify-content: flex-end + &-justify .q-tab + flex: 1 1 auto + &__offset + display: none + &--horizontal .q-tabs__arrow + height: 100% + &--start + top: 0 + left: 0 #{"/* rtl:ignore */"} + bottom: 0 + &--end + top: 0 + right: 0 #{"/* rtl:ignore */"} + bottom: 0 + &--vertical + display: block !important + height: 100% + .q-tabs__content + display: block !important + height: 100% + .q-tabs__arrow + width: 100% + height: 36px + text-align: center + &--start + top: 0 + left: 0 + right: 0 + &--end + left: 0 + right: 0 + bottom: 0 + .q-tab + padding: 0 8px + .q-tab__indicator + height: unset + width: 2px + &--vertical.q-tabs--not-scrollable + .q-tabs__content + height: 100% + &--vertical.q-tabs--dense + .q-tab__content + min-width: 24px + &--dense + .q-tab + min-height: 36px + &--full + min-height: 52px +.q-time + box-shadow: $shadow-2 + border-radius: $generic-border-radius + outline: 0 + width: 290px + min-width: 290px + max-width: 100% + &--bordered + border: 1px solid $separator-color + &__header + border-top-left-radius: inherit + color: $dark-text + color: var(--q-color-dark-text) + background-color: $primary + background-color: var(--q-color-primary) + padding: 16px + font-weight: 300 + &__actions + padding: 0 16px 16px + &__header-label + font-size: 28px + line-height: 1 + letter-spacing: -.00833em + > div + div + margin-left: 4px + &__link + opacity: .56 + outline: 0 + transition: opacity .3s ease-out + &--active, &:hover, &:focus + opacity: 1 + &__header-ampm + font-size: 16px + letter-spacing: .1em + &__content + padding: 16px + &:before + content: '' + display: block + padding-bottom: 100% + &__container-parent + padding: 16px + &__container-child + border-radius: 50% + background: rgba(0,0,0,.12) + &__clock + padding: 24px + width: 100% + height: 100% + max-width: 100% + max-height: 100% + font-size: 14px + &__clock-circle + position: relative + &__clock-center + height: 6px + width: 6px + margin: auto + border-radius: 50% + min-height: 0 + background: currentColor + &__clock-pointer + width: 2px + height: 50% + transform-origin: 0 0 #{"/* rtl:ignore */"} + min-height: 0 + position: absolute + left: 50% + right: 0 + bottom: 0 + color: $primary + color: var(--q-color-primary) + background: currentColor + transform: translateX(-50%) + &:before, &:after + content: '' + position: absolute + left: 50% + border-radius: 50% + background: currentColor + transform: translateX(-50%) + &:before + bottom: -4px + width: 8px + height: 8px + &:after + top: -3px + height: 6px + width: 6px + &__clock-position + position: absolute + min-height: 32px + width: 32px + height: 32px + font-size: 12px + line-height: 32px + margin: 0 + padding: 0 + transform: translate(-50%, -50%) #{"/* rtl:ignore */"} + border-radius: 50% + &--disabled + opacity: .4 + &--active + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + @for $pos from 0 through 11 + $angle: (270 + 30 * $pos) + $top: (1 + sin($angle)) + $left: (1 + cos($angle)) + &__clock-pos-#{$pos} + top: toFixed(percentage($top * 0.5), 100) + left: toFixed(percentage($left * 0.5), 100) #{"/* rtl:ignore */"} + @for $pos from 12 through 23 + $angle: (270 + 30 * $pos) + $top: (1 + sin($angle)) + $left: (1 + cos($angle)) + &__clock-pos-#{$pos} + top: toFixed(percentage(.15 + $top * .35), 100) + left: toFixed(percentage(.15 + $left * .35), 100) #{"/* rtl:ignore */"} + &__now-button + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + top: 12px + right: 12px + &.disabled, &--readonly + .q-time__header-ampm, .q-time__content + pointer-events: none + &--portrait + display: inline-flex + flex-direction: column + .q-time__header + border-top-right-radius: inherit + min-height: 86px + .q-time__header-ampm + margin-left: 12px + &.q-time--bordered .q-time__content + margin: 1px 0 + &--landscape + display: inline-flex + align-items: stretch + min-width: 420px + > div + display: flex + flex-direction: column + justify-content: center + .q-time__header + border-bottom-left-radius: inherit + min-width: 156px + .q-time__header-ampm + margin-top: 12px + &--dark + border-color: $separator-dark-color +@media (prefers-color-scheme: dark) + .q-time--dark-auto + border-color: $separator-dark-color +.q-timeline + padding: 0 + width: 100% + list-style: none + h6 + line-height: inherit + &--dark + color: $dark-text + color: var(--q-color-dark-text) + .q-timeline__subtitle + opacity: .7 + &__content + padding-bottom: 24px + &__title + margin-top: 0 + margin-bottom: 16px + &__subtitle + font-size: 12px + margin-bottom: 8px + opacity: .6 + text-transform: uppercase + letter-spacing: 1px + font-weight: 700 + &__dot + position: absolute + top: 0 + bottom: 0 + width: 15px + &:before, &:after + content: '' + background: currentColor + display: block + position: absolute + &:before + border: 3px solid transparent + border-radius: 100% + height: 15px + width: 15px + top: 4px + left: 0 + transition: background .3s ease-in-out, border .3s ease-in-out + &:after + width: 3px + opacity: .4 + top: 24px + bottom: 0 + left: 6px + .q-icon + position: absolute + top: 0 + left: 0 + right: 0 + font-size: 16px + height: 38px + line-height: 38px + width: 100% + color: $dark-text + color: var(--q-color-dark-text) + > svg, + > img + width: 1em + height: 1em + &__dot-img + position: absolute + top: 4px + left: 0 + right: 0 + height: 31px + width: 31px + background: currentColor + border-radius: 50% + &__heading + position: relative + &:first-child .q-timeline__heading-title + padding-top: 0 + &:last-child .q-timeline__heading-title + padding-bottom: 0 + &__heading-title + padding: 32px 0 + margin: 0 + &__entry + position: relative + line-height: 22px + &:last-child + padding-bottom: 0 !important + .q-timeline__dot:after + content: none + &--icon + .q-timeline__dot + width: 31px + &:before + height: 31px + width: 31px + &:after + top: 41px + left: 14px + .q-timeline__subtitle + padding-top: 8px + &--dense--right + .q-timeline + &__entry + padding-left: 40px + &--icon .q-timeline__dot + left: -8px + &__dot + left: 0 + &--dense--left + .q-timeline + &__heading + text-align: right + &__entry + padding-right: 40px + &--icon .q-timeline__dot + right: -8px + &__content, + &__title, + &__subtitle + text-align: right + &__dot + right: 0 + &--comfortable + display: table + .q-timeline + &__heading + display: table-row + font-size: 200% + > div + display: table-cell + &__entry + display: table-row + padding: 0 + &--icon .q-timeline__content + padding-top: 8px + &__subtitle, &__dot, &__content + display: table-cell + vertical-align: top + &__subtitle + width: 35% + &__dot + position: relative + min-width: 31px + &--comfortable--right + .q-timeline + &__heading + .q-timeline__heading-title + margin-left: -50px + &__subtitle + text-align: right + padding-right: 30px + &__content + padding-left: 30px + &__entry--icon .q-timeline__dot + left: -8px + &--comfortable--left + .q-timeline + &__heading + text-align: right + .q-timeline__heading-title + margin-right: -50px + &__subtitle + padding-left: 30px + &__content + padding-right: 30px + &__content, + &__title + text-align: right + &__entry--icon .q-timeline__dot + right: 0 + &__dot + right: -8px + &--loose + .q-timeline + &__heading-title + text-align: center + margin-left: 0 + &__entry, &__subtitle, &__dot, &__content + display: block + margin: 0 + padding: 0 + &__dot + position: absolute + left: 50% + margin-left: -7.15px + &__entry + padding-bottom: 24px + overflow: hidden + &--icon + .q-timeline__dot + margin-left: -15px + .q-timeline__subtitle + line-height: 38px + .q-timeline__content + padding-top: 8px + &--left .q-timeline__content, + &--right .q-timeline__subtitle + float: left + padding-right: 30px + text-align: right + &--left .q-timeline__subtitle, + &--right .q-timeline__content + float: right + text-align: left + padding-left: 30px + &__subtitle, &__content + width: 50% +@media (prefers-color-scheme: dark) + .q-timeline--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + .q-timeline__subtitle + opacity: .7 +$toggle-transition: .22s cubic-bezier(.4,0,.2,1) +.q-toggle + vertical-align: middle + &__native + width: 1px + height: 1px + &__track + height: .35em + border-radius: .175em + opacity: .38 + background: currentColor + &__thumb + top: .25em + left: .25em + width: .5em + height: .5em + transition: left $toggle-transition + user-select: none + z-index: 0 + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: $light-page + background: var(--q-color-light-page) + box-shadow: 0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12) + .q-icon + font-size: .3em + min-width: 1em + color: $light-text + color: var(--q-color-light-text) + opacity: .54 + z-index: 1 + &__inner + font-size: 40px + width: 1.4em + min-width: 1.4em + height: 1em + padding: .325em .3em + -webkit-print-color-adjust: exact + &--indet + .q-toggle__thumb + left: .45em + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__track + opacity: .54 + .q-toggle__thumb + left: .65em + &:after + background-color: currentColor + .q-icon + color: $dark-text + color: var(--q-color-dark-text) + opacity: 1 + &.disabled + opacity: .75 !important + &--dark + .q-toggle__inner + color: $dark-text + color: var(--q-color-dark-text) + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__thumb:before + opacity: .32 !important + &--dense + .q-toggle__inner + width: .8em + min-width: .8em + height: .5em + padding: .07625em 0 + .q-toggle__thumb + top: 0 + left: 0 + .q-toggle__inner--indet + .q-toggle__thumb + left: .15em + .q-toggle__inner--truthy + .q-toggle__thumb + left: .3em + .q-toggle__label + padding-left: .5em + &.reverse .q-toggle__label + padding-left: 0 + padding-right: .5em +body.desktop + .q-toggle:not(.disabled) + .q-toggle__thumb:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $option-focus-transition + &:focus, + &:hover + .q-toggle__thumb:before + transform: scale3d(2, 2, 1) + .q-toggle--dense:not(.disabled) + &:focus, + &:hover + .q-toggle__thumb:before + transform: scale3d(1.5, 1.5, 1) +@media (prefers-color-scheme: dark) + .q-toggle--dark-auto + .q-toggle__inner + color: $dark-text + color: var(--q-color-dark-text) + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__thumb:before + opacity: .32 !important +.q-toolbar + position: relative + padding: $toolbar-padding + min-height: $toolbar-min-height + width: 100% + &--inset + padding-left: $toolbar-inset-size + .q-avatar + font-size: 38px +.q-toolbar__title + flex: 1 1 0% + min-width: 1px + max-width: 100% + font-size: $toolbar-title-font-size + font-weight: $toolbar-title-font-weight + letter-spacing: $toolbar-title-letter-spacing + padding: $toolbar-title-padding + &:first-child + padding-left: 0 + &:last-child + padding-right: 0 +.q-tooltip + padding: $tooltip-padding + opacity: 0 + &__container + position: fixed + z-index: $z-tooltip + contain: layout + contain: layout style + &--style + font-size: $tooltip-fontsize + color: $tooltip-color + background: $tooltip-background + border-radius: $tooltip-border-radius + text-transform: none + font-weight: normal + @media (max-width: $breakpoint-xs-max) + font-size: $tooltip-mobile-fontsize + padding: $tooltip-mobile-padding +.q-tree + position: relative + color: $grey + &__node + padding: 0 0 3px 22px + &:after + content: '' + position: absolute + top: -3px + bottom: 0 + width: 2px + right: auto + left: -13px + border-left: 1px solid currentColor + &:last-child:after + display: none + &--disabled + pointer-events: none + .disabled + opacity: 1 !important + > div, + > i, + > .disabled + opacity: .6 !important + .q-tree__node--disabled + > div, + > i, + > .disabled + opacity: 1 !important + &__node-header:before + content: '' + position: absolute + top: -3px + bottom: 50% + width: 31px + left: -35px + border-left: 1px solid currentColor + border-bottom: 1px solid currentColor + &__children + padding-left: 25px + &__node-body + padding: 5px 0 8px 5px + &__node--parent + padding-left: 2px + > .q-tree__node-header:before + width: 15px + left: -15px + > .q-tree__node-collapsible > .q-tree__node-body + padding: 5px 0 8px 27px + &:after + content: '' + position: absolute + top: 0 + width: 2px + height: 100% + right: auto + left: 12px + border-left: 1px solid currentColor + bottom: 50px + &__node--link + cursor: pointer + &__node-header + padding: 4px + margin-top: 3px + border-radius: $generic-border-radius + outline: 0 + &__node-header-content + color: $light-text + color: var(--q-color-light-text) + transition: color .3s + &__node--selected .q-tree__node-header-content + color: $grey + &__icon, + &__node-header-content .q-icon + font-size: 21px + &__img + height: 42px + border-radius: 2px + &__avatar, + &__node-header-content .q-avatar + font-size: 28px + border-radius: 50% + width: 28px + height: 28px + &__arrow, + &__spinner + font-size: 16px + margin-right: 4px + &__arrow + transition: transform .3s + &--rotate + transform: rotate3d(0, 0, 1, 90deg) + &__tickbox + margin-right: 4px + + > .q-tree__node + padding: 0 + &:after, > .q-tree__node-header:before + display: none + + > .q-tree__node--child > .q-tree__node-header + padding-left: 24px + &--dark + .q-tree__node-header-content + color: $dark-text + color: var(--q-color-dark-text) + &--no-connectors + .q-tree__node:after, + .q-tree__node-header:before, + .q-tree__node-body:after + display: none !important + &--dense + > .q-tree__node--child > .q-tree__node-header + padding-left: 1px + .q-tree + &__arrow, + &__spinner + margin-right: 1px + &__img + height: 32px + &__tickbox + margin-right: 3px + &__node + padding: 0 + &:after + top: 0 + left: -8px + &__node-header + margin-top: 0 + padding: 1px + &:before + top: 0 + left: -8px + width: 8px + &__node--child + padding-left: 17px + > .q-tree__node-header:before + left: -25px + width: 21px + &__node-body + padding: 0 0 2px + &__node--parent > .q-tree__node-collapsible > .q-tree__node-body + padding: 0 0 2px 20px + &:after + left: 8px + &__children + padding-left: 16px +[dir=rtl] + .q-tree__arrow + transform: rotate3d(0, 0, 1, 180deg) #{"/* rtl:ignore */"} + &--rotate + transform: rotate3d(0, 0, 1, 90deg) #{"/* rtl:ignore */"} +@media (prefers-color-scheme: dark) + .q-tree--dark-auto + .q-tree__node-header-content + color: $dark-text + color: var(--q-color-dark-text) +.q-uploader + box-shadow: $shadow-2 + border-radius: $generic-border-radius + vertical-align: top + position: relative + width: 320px + max-height: 320px + &--bordered + border: 1px solid $separator-color + &__input + opacity: 0 + width: 100% + height: 100% + cursor: pointer !important + z-index: 1 + + &::-webkit-file-upload-button + cursor: pointer + &__file + &:before + content: '' + border-top-left-radius: inherit + border-top-right-radius: inherit + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + pointer-events: none + background: currentColor + opacity: .04 + &__header + position: relative + border-top-left-radius: inherit + border-top-right-radius: inherit + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + width: 100% + &__spinner + font-size: 24px + margin-right: 4px + &__header-content + padding: 8px + &__dnd + outline: 1px dashed currentColor + outline-offset: -4px + background: rgba(255,255,255,.6) + &__overlay + font-size: 36px + color: $light-text + color: var(--q-color-light-text) + background-color: rgba(255,255,255,.6) + &__list + position: relative + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + padding: 8px + min-height: 60px + flex: 1 1 auto + &__file + border-radius: $generic-border-radius $generic-border-radius 0 0 + border: 1px solid $separator-color + .q-circular-progress + font-size: 24px + &--img + color: $dark-text + color: var(--q-color-dark-text) + height: 200px + min-width: 200px + background-position: 50% 50% + background-size: cover + background-repeat: no-repeat + &:before + content: none + .q-circular-progress + color: $dark-text + color: var(--q-color-dark-text) + .q-uploader__file-header + padding-bottom: 24px + background: linear-gradient(to bottom, rgba(0,0,0,.7) 20%, rgba(255,255,255,0)) + & + & + margin-top: 8px + &__file-header + position: relative + padding: 4px 8px + border-top-left-radius: inherit + border-top-right-radius: inherit + &__file-header-content + padding-right: 8px + &__file-status + font-size: 24px + margin-right: 4px + &__title + font-size: 14px + font-weight: bold + line-height: 18px + word-break: break-word + &__subtitle + font-size: 12px + line-height: 18px + &--disabled + .q-uploader__header, .q-uploader__list + pointer-events: none + &--dark + border-color: $separator-dark-color + .q-uploader__file + border-color: $separator-dark-color + .q-uploader__dnd, .q-uploader__overlay + background: rgba(255,255,255,.3) + .q-uploader__overlay + color: $dark-text + color: var(--q-color-dark-text) +@media (prefers-color-scheme: dark) + .q-uploader--dark-auto + border-color: $separator-dark-color + .q-uploader__file + border-color: $separator-dark-color + .q-uploader__dnd, .q-uploader__overlay + background: rgba(255,255,255,.3) + .q-uploader__overlay + color: $dark-text + color: var(--q-color-dark-text) +img.responsive + max-width: 100% + height: auto +.q-video + position: relative + overflow: hidden + border-radius: inherit + iframe, + object, + embed + width: 100% + height: 100% + &--responsive + height: 0 + iframe, + object, + embed + position: absolute + top: 0 + left: 0 +.q-virtual-scroll + &:focus + outline: 0 + &__content + outline: none + contain: content + > * + overflow-anchor: none + > [data-q-vs-anchor] + overflow-anchor: auto + &__padding + background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) #{"/* rtl:ignore */"} + background-size: 100% 50px #{"/* rtl:ignore */"} + background-size: var(--q-virtual-scroll-item-width, 100%) var(--q-virtual-scroll-item-height, 50px) #{"/* rtl:ignore */"} + .q-table & + tr + height: 0 !important + td + padding: 0 !important + &--horizontal + display: flex + flex-direction: row + flex-wrap: nowrap + align-items: stretch + .q-virtual-scroll + &__content + display: flex + flex-direction: row + flex-wrap: nowrap + &__padding, + &__content, + &__content > * + flex: 0 0 auto + &__padding + background: linear-gradient(to left, rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) #{"/* rtl:ignore */"} + background-size: 50px 100% #{"/* rtl:ignore */"} + background-size: var(--q-virtual-scroll-item-width, 50px) var(--q-virtual-scroll-item-height, 100%) #{"/* rtl:ignore */"} +.q-ripple + position: absolute + top: 0 + left: 0 #{"/* rtl:ignore */"} + width: 100% + height: 100% + color: inherit + border-radius: inherit + z-index: 0 + pointer-events: none + overflow: hidden + contain: strict + &__inner + position: absolute + top: 0 + left: 0 #{"/* rtl:ignore */"} + opacity: 0 + color: inherit + border-radius: 50% + background: currentColor + background-clip: padding-box + pointer-events: none + will-change: transform, opacity + &--enter + transition: transform .225s cubic-bezier(.4, 0, .2, 1), opacity .1s cubic-bezier(.4, 0, .2, 1) + &--leave + transition: opacity .25s cubic-bezier(.4, 0, .2, 1) +.q-morph--invisible, +.q-morph--internal + opacity: 0 !important + pointer-events: none !important + position: fixed !important + right: 200vw !important + bottom: 200vh !important +.q-loading + color: $light-text + color: var(--q-color-light-text) + + position: fixed !important + &:before + content: '' + position: fixed + top: 0 + right: 0 + bottom: 0 + left: 0 + background: currentColor + opacity: .5 + z-index: -1 + > div + margin: 40px 20px 0 + max-width: 450px + text-align: center +.q-notifications__list + z-index: $z-notify + pointer-events: none + left: 0 + right: 0 + margin-bottom: 10px + position: relative + &--center + top: 0 + bottom: 0 + &--top + top: 0 + &--bottom + bottom: 0 +body.q-ios-padding .q-notifications__list + &--center, &--top + top: $ios-statusbar-height + top: env(safe-area-inset-top) + &--center, &--bottom + bottom: env(safe-area-inset-bottom) +.q-notification + box-shadow: $shadow-2 + border-radius: $generic-border-radius + pointer-events: all + display: inline-flex + margin: 10px 10px 0 + transition: transform 1s, opacity 1s + z-index: $z-notify + flex-shrink: 0 + max-width: 95vw + background: $notify-background + background: var(--q-color-notify-background) + color: $dark-text + color: var(--q-color-dark-text) + font-size: 14px + &__icon + font-size: 24px + flex: 0 0 1em + &--additional + margin-right: 16px + &__avatar + font-size: 32px + &--additional + margin-right: 8px + &__spinner + font-size: 32px + &--additional + margin-right: 8px + &__message + padding: 8px 0 + &__caption + font-size: 0.9em + opacity: 0.7 + &__actions + color: $primary + color: var(--q-color-primary) + &__badge + animation: q-notif-badge .42s + padding: 4px 8px + position: absolute + background: $negative + box-shadow: $shadow-1 + background-color: $negative + background-color: var(--q-color-negative) + color: $dark-text + color: var(--q-color-dark-text) + border-radius: $generic-border-radius + font-size: 12px + line-height: 12px + &--top-left, + &--top-right + top: -6px + &--bottom-left, + &--bottom-right + bottom: -6px + &--top-left, + &--bottom-left + left: -22px + &--top-right, + &--bottom-right + right: -22px + &__progress + z-index: -1 + position: absolute + height: 3px + bottom: 0 + left: -10px + right: -10px + animation: q-notif-progress linear + background: currentColor + opacity: .3 + border-radius: $generic-border-radius $generic-border-radius 0 0 + transform-origin: 0 50% + transform: scaleX(0) + &--standard + padding: 0 16px + min-height: 48px + .q-notification__actions + padding: 6px 0 6px 8px + margin-right: -8px + &--multi-line + min-height: 68px + padding: 8px 16px + .q-notification__badge + &--top-left, + &--top-right + top: -15px + &--bottom-left, + &--bottom-right + bottom: -15px + .q-notification__progress + bottom: -8px + .q-notification__actions + padding: 0 + &--with-media + padding-left: 25px + &--top-left-enter, &--top-left-leave-to, + &--top-enter, &--top-leave-to, + &--top-right-enter, &--top-right-leave-to + opacity: 0 + transform: translateY(-50px) + z-index: ($z-notify - 1) + &--left-enter, &--left-leave-to, + &--center-enter, &--center-leave-to, + &--right-enter, &--right-leave-to + opacity: 0 + transform: rotateX(90deg) + z-index: ($z-notify - 1) + &--bottom-left-enter, &--bottom-left-leave-to, + &--bottom-enter, &--bottom-leave-to, + &--bottom-right-enter, &--bottom-right-leave-to + opacity: 0 + transform: translateY(50px) + z-index: ($z-notify - 1) + &--top-left-leave-active, + &--top-leave-active, + &--top-right-leave-active, + &--left-leave-active, + &--center-leave-active, + &--right-leave-active, + &--bottom-left-leave-active, + &--bottom-leave-active, + &--bottom-right-leave-active + position: absolute + z-index: ($z-notify - 1) + margin-left: 0 + margin-right: 0 + &--top-leave-active, + &--center-leave-active + top: 0 + &--bottom-left-leave-active, + &--bottom-leave-active, + &--bottom-right-leave-active + bottom: 0 +@media (min-width: $breakpoint-sm-min) + .q-notification + max-width: 65vw +@keyframes q-notif-badge + 15% + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg) + 30% + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg) + 45% + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg) + 60% + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg) + 75% + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg) +@keyframes q-notif-progress + 0% + transform: scaleX(1) + 100% + transform: scaleX(0) +/* + * Animate.css additions + * Adapted from: https: + */ +\:root + --animate-duration: #{$animate-duration} + --animate-delay: #{$animate-delay} + --animate-repeat: #{$animate-repeat} +.animated + animation-duration: var(--animate-duration) + animation-fill-mode: both + &.infinite + animation-iteration-count: infinite + + &.hinge + animation-duration: 2s + &.repeat-1 + animation-iteration-count: var(--animate-repeat) + &.repeat-2 + animation-iteration-count: calc(var(--animate-repeat) * 2) + &.repeat-3 + animation-iteration-count: calc(var(--animate-repeat) * 3) + &.delay-1s + animation-delay: var(--animate-delay) + &.delay-2s + animation-delay: calc(var(--animate-delay) * 2) + &.delay-3s + animation-delay: calc(var(--animate-delay) * 3) + &.delay-4s + animation-delay: calc(var(--animate-delay) * 4) + &.delay-5s + animation-delay: calc(var(--animate-delay) * 5) + &.faster + animation-duration: calc(var(--animate-duration) / 2) + &.fast + animation-duration: calc(var(--animate-duration) * 0.8) + &.slow + animation-duration: calc(var(--animate-duration) * 2) + &.slower + animation-duration: calc(var(--animate-duration) * 3) +@media print, (prefers-reduced-motion: reduce) + .animated + animation-duration: 1ms !important + transition-duration: 1ms !important + animation-iteration-count: 1 !important + .animated[class*='Out'] + opacity: 0 +.q-animate--scale + animation: q-scale .15s + animation-timing-function: cubic-bezier(.25,.8,.25,1) +@keyframes q-scale + 0% + transform: scale(1) + 50% + transform: scale(1.04) + 100% + transform: scale(1) +.q-animate--fade + animation: q-fade .2s #{"/* rtl:ignore */"} +@keyframes q-fade + 0% + opacity: 0 + 100% + opacity: 1 +\:root + --q-color-primary: #{$primary} + --q-color-secondary: #{$secondary} + --q-color-accent: #{$accent} + --q-color-positive: #{$positive} + --q-color-negative: #{$negative} + --q-color-info: #{$info} + --q-color-warning: #{$warning} + --q-color-dark: #{$dark} + --q-color-light-text: #{$light-text} + --q-color-light-page: #{$light-page} + --q-color-dark-text: #{$dark-text} + --q-color-dark-page: #{$dark-page} + --q-color-backdrop-background: #{$backdrop-background} + --q-color-notify-background: #{$notify-background} + --q-color-chip-background-light: #{$chip-background-light} + --q-color-chip-background-dark: #{$chip-background-dark} + --q-color-dialog-plugin-light: #{$dialog-plugin-light} + --q-color-dialog-plugin-dark: #{$dialog-plugin-dark} +.text-dark + color: $dark !important + color: var(--q-color-dark) !important +.bg-dark + background: $dark !important + background: var(--q-color-dark) !important +.text-dialog-plugin-light, +.text-dialog-plugin-dark-auto + color: $dialog-plugin-light !important + color: var(--q-color-dialog-plugin-light) !important +.bg-dialog-plugin-light, +.bg-dialog-plugin-dark-auto + background: $dialog-plugin-light !important + background: var(--q-color-dialog-plugin-light) !important +.text-dialog-plugin-dark + color: $dialog-plugin-dark !important + color: var(--q-color-dialog-plugin-dark) !important +.bg-dialog-plugin-dark + background: $dialog-plugin-dark !important + background: var(--q-color-dialog-plugin-dark) !important +@media (prefers-color-scheme: dark) + .text-dialog-plugin-dark-auto + color: $dialog-plugin-dark !important + color: var(--q-color-dialog-plugin-dark) !important + .bg-dialog-plugin-dark-auto + background: $dialog-plugin-dark !important + background: var(--q-color-dialog-plugin-dark) !important +.text-primary + color: $primary !important + color: var(--q-color-primary) !important +.bg-primary + background: $primary !important + background: var(--q-color-primary) !important +.text-secondary + color: $secondary !important + color: var(--q-color-secondary) !important +.bg-secondary + background: $secondary !important + background: var(--q-color-secondary) !important +.text-accent + color: $accent !important + color: var(--q-color-accent) !important +.bg-accent + background: $accent !important + background: var(--q-color-accent) !important +.text-positive + color: $positive !important + color: var(--q-color-positive) !important +.bg-positive + background: $positive !important + background: var(--q-color-positive) !important +.text-negative + color: $negative !important + color: var(--q-color-negative) !important +.bg-negative + background: $negative !important + background: var(--q-color-negative) !important +.text-info + color: $info !important + color: var(--q-color-info) !important +.bg-info + background: $info !important + background: var(--q-color-info) !important +.text-warning + color: $warning !important + color: var(--q-color-warning) !important +.bg-warning + background: $warning !important + background: var(--q-color-warning) !important +.text-white + color: #fff !important +.bg-white + background: #fff !important +.text-black + color: #000 !important +.bg-black + background: #000 !important +.text-transparent + color: transparent !important +.bg-transparent + background: transparent !important +.text-separator + color: $separator-color !important +.bg-separator + background: $separator-color !important +.text-dark-separator + color: $separator-dark-color !important +.bg-dark-separator + background: $separator-dark-color !important +.text-red + color: $red !important +.text-red-1 + color: $red-1 !important +.text-red-2 + color: $red-2 !important +.text-red-3 + color: $red-3 !important +.text-red-4 + color: $red-4 !important +.text-red-5 + color: $red-5 !important +.text-red-6 + color: $red-6 !important +.text-red-7 + color: $red-7 !important +.text-red-8 + color: $red-8 !important +.text-red-9 + color: $red-9 !important +.text-red-10 + color: $red-10 !important +.text-red-11 + color: $red-11 !important +.text-red-12 + color: $red-12 !important +.text-red-13 + color: $red-13 !important +.text-red-14 + color: $red-14 !important +.text-pink + color: $pink !important +.text-pink-1 + color: $pink-1 !important +.text-pink-2 + color: $pink-2 !important +.text-pink-3 + color: $pink-3 !important +.text-pink-4 + color: $pink-4 !important +.text-pink-5 + color: $pink-5 !important +.text-pink-6 + color: $pink-6 !important +.text-pink-7 + color: $pink-7 !important +.text-pink-8 + color: $pink-8 !important +.text-pink-9 + color: $pink-9 !important +.text-pink-10 + color: $pink-10 !important +.text-pink-11 + color: $pink-11 !important +.text-pink-12 + color: $pink-12 !important +.text-pink-13 + color: $pink-13 !important +.text-pink-14 + color: $pink-14 !important +.text-purple + color: $purple !important +.text-purple-1 + color: $purple-1 !important +.text-purple-2 + color: $purple-2 !important +.text-purple-3 + color: $purple-3 !important +.text-purple-4 + color: $purple-4 !important +.text-purple-5 + color: $purple-5 !important +.text-purple-6 + color: $purple-6 !important +.text-purple-7 + color: $purple-7 !important +.text-purple-8 + color: $purple-8 !important +.text-purple-9 + color: $purple-9 !important +.text-purple-10 + color: $purple-10 !important +.text-purple-11 + color: $purple-11 !important +.text-purple-12 + color: $purple-12 !important +.text-purple-13 + color: $purple-13 !important +.text-purple-14 + color: $purple-14 !important +.text-deep-purple + color: $deep-purple !important +.text-deep-purple-1 + color: $deep-purple-1 !important +.text-deep-purple-2 + color: $deep-purple-2 !important +.text-deep-purple-3 + color: $deep-purple-3 !important +.text-deep-purple-4 + color: $deep-purple-4 !important +.text-deep-purple-5 + color: $deep-purple-5 !important +.text-deep-purple-6 + color: $deep-purple-6 !important +.text-deep-purple-7 + color: $deep-purple-7 !important +.text-deep-purple-8 + color: $deep-purple-8 !important +.text-deep-purple-9 + color: $deep-purple-9 !important +.text-deep-purple-10 + color: $deep-purple-10 !important +.text-deep-purple-11 + color: $deep-purple-11 !important +.text-deep-purple-12 + color: $deep-purple-12 !important +.text-deep-purple-13 + color: $deep-purple-13 !important +.text-deep-purple-14 + color: $deep-purple-14 !important +.text-indigo + color: $indigo !important +.text-indigo-1 + color: $indigo-1 !important +.text-indigo-2 + color: $indigo-2 !important +.text-indigo-3 + color: $indigo-3 !important +.text-indigo-4 + color: $indigo-4 !important +.text-indigo-5 + color: $indigo-5 !important +.text-indigo-6 + color: $indigo-6 !important +.text-indigo-7 + color: $indigo-7 !important +.text-indigo-8 + color: $indigo-8 !important +.text-indigo-9 + color: $indigo-9 !important +.text-indigo-10 + color: $indigo-10 !important +.text-indigo-11 + color: $indigo-11 !important +.text-indigo-12 + color: $indigo-12 !important +.text-indigo-13 + color: $indigo-13 !important +.text-indigo-14 + color: $indigo-14 !important +.text-blue + color: $blue !important +.text-blue-1 + color: $blue-1 !important +.text-blue-2 + color: $blue-2 !important +.text-blue-3 + color: $blue-3 !important +.text-blue-4 + color: $blue-4 !important +.text-blue-5 + color: $blue-5 !important +.text-blue-6 + color: $blue-6 !important +.text-blue-7 + color: $blue-7 !important +.text-blue-8 + color: $blue-8 !important +.text-blue-9 + color: $blue-9 !important +.text-blue-10 + color: $blue-10 !important +.text-blue-11 + color: $blue-11 !important +.text-blue-12 + color: $blue-12 !important +.text-blue-13 + color: $blue-13 !important +.text-blue-14 + color: $blue-14 !important +.text-light-blue + color: $light-blue !important +.text-light-blue-1 + color: $light-blue-1 !important +.text-light-blue-2 + color: $light-blue-2 !important +.text-light-blue-3 + color: $light-blue-3 !important +.text-light-blue-4 + color: $light-blue-4 !important +.text-light-blue-5 + color: $light-blue-5 !important +.text-light-blue-6 + color: $light-blue-6 !important +.text-light-blue-7 + color: $light-blue-7 !important +.text-light-blue-8 + color: $light-blue-8 !important +.text-light-blue-9 + color: $light-blue-9 !important +.text-light-blue-10 + color: $light-blue-10 !important +.text-light-blue-11 + color: $light-blue-11 !important +.text-light-blue-12 + color: $light-blue-12 !important +.text-light-blue-13 + color: $light-blue-13 !important +.text-light-blue-14 + color: $light-blue-14 !important +.text-cyan + color: $cyan !important +.text-cyan-1 + color: $cyan-1 !important +.text-cyan-2 + color: $cyan-2 !important +.text-cyan-3 + color: $cyan-3 !important +.text-cyan-4 + color: $cyan-4 !important +.text-cyan-5 + color: $cyan-5 !important +.text-cyan-6 + color: $cyan-6 !important +.text-cyan-7 + color: $cyan-7 !important +.text-cyan-8 + color: $cyan-8 !important +.text-cyan-9 + color: $cyan-9 !important +.text-cyan-10 + color: $cyan-10 !important +.text-cyan-11 + color: $cyan-11 !important +.text-cyan-12 + color: $cyan-12 !important +.text-cyan-13 + color: $cyan-13 !important +.text-cyan-14 + color: $cyan-14 !important +.text-teal + color: $teal !important +.text-teal-1 + color: $teal-1 !important +.text-teal-2 + color: $teal-2 !important +.text-teal-3 + color: $teal-3 !important +.text-teal-4 + color: $teal-4 !important +.text-teal-5 + color: $teal-5 !important +.text-teal-6 + color: $teal-6 !important +.text-teal-7 + color: $teal-7 !important +.text-teal-8 + color: $teal-8 !important +.text-teal-9 + color: $teal-9 !important +.text-teal-10 + color: $teal-10 !important +.text-teal-11 + color: $teal-11 !important +.text-teal-12 + color: $teal-12 !important +.text-teal-13 + color: $teal-13 !important +.text-teal-14 + color: $teal-14 !important +.text-green + color: $green !important +.text-green-1 + color: $green-1 !important +.text-green-2 + color: $green-2 !important +.text-green-3 + color: $green-3 !important +.text-green-4 + color: $green-4 !important +.text-green-5 + color: $green-5 !important +.text-green-6 + color: $green-6 !important +.text-green-7 + color: $green-7 !important +.text-green-8 + color: $green-8 !important +.text-green-9 + color: $green-9 !important +.text-green-10 + color: $green-10 !important +.text-green-11 + color: $green-11 !important +.text-green-12 + color: $green-12 !important +.text-green-13 + color: $green-13 !important +.text-green-14 + color: $green-14 !important +.text-light-green + color: $light-green !important +.text-light-green-1 + color: $light-green-1 !important +.text-light-green-2 + color: $light-green-2 !important +.text-light-green-3 + color: $light-green-3 !important +.text-light-green-4 + color: $light-green-4 !important +.text-light-green-5 + color: $light-green-5 !important +.text-light-green-6 + color: $light-green-6 !important +.text-light-green-7 + color: $light-green-7 !important +.text-light-green-8 + color: $light-green-8 !important +.text-light-green-9 + color: $light-green-9 !important +.text-light-green-10 + color: $light-green-10 !important +.text-light-green-11 + color: $light-green-11 !important +.text-light-green-12 + color: $light-green-12 !important +.text-light-green-13 + color: $light-green-13 !important +.text-light-green-14 + color: $light-green-14 !important +.text-lime + color: $lime !important +.text-lime-1 + color: $lime-1 !important +.text-lime-2 + color: $lime-2 !important +.text-lime-3 + color: $lime-3 !important +.text-lime-4 + color: $lime-4 !important +.text-lime-5 + color: $lime-5 !important +.text-lime-6 + color: $lime-6 !important +.text-lime-7 + color: $lime-7 !important +.text-lime-8 + color: $lime-8 !important +.text-lime-9 + color: $lime-9 !important +.text-lime-10 + color: $lime-10 !important +.text-lime-11 + color: $lime-11 !important +.text-lime-12 + color: $lime-12 !important +.text-lime-13 + color: $lime-13 !important +.text-lime-14 + color: $lime-14 !important +.text-yellow + color: $yellow !important +.text-yellow-1 + color: $yellow-1 !important +.text-yellow-2 + color: $yellow-2 !important +.text-yellow-3 + color: $yellow-3 !important +.text-yellow-4 + color: $yellow-4 !important +.text-yellow-5 + color: $yellow-5 !important +.text-yellow-6 + color: $yellow-6 !important +.text-yellow-7 + color: $yellow-7 !important +.text-yellow-8 + color: $yellow-8 !important +.text-yellow-9 + color: $yellow-9 !important +.text-yellow-10 + color: $yellow-10 !important +.text-yellow-11 + color: $yellow-11 !important +.text-yellow-12 + color: $yellow-12 !important +.text-yellow-13 + color: $yellow-13 !important +.text-yellow-14 + color: $yellow-14 !important +.text-amber + color: $amber !important +.text-amber-1 + color: $amber-1 !important +.text-amber-2 + color: $amber-2 !important +.text-amber-3 + color: $amber-3 !important +.text-amber-4 + color: $amber-4 !important +.text-amber-5 + color: $amber-5 !important +.text-amber-6 + color: $amber-6 !important +.text-amber-7 + color: $amber-7 !important +.text-amber-8 + color: $amber-8 !important +.text-amber-9 + color: $amber-9 !important +.text-amber-10 + color: $amber-10 !important +.text-amber-11 + color: $amber-11 !important +.text-amber-12 + color: $amber-12 !important +.text-amber-13 + color: $amber-13 !important +.text-amber-14 + color: $amber-14 !important +.text-orange + color: $orange !important +.text-orange-1 + color: $orange-1 !important +.text-orange-2 + color: $orange-2 !important +.text-orange-3 + color: $orange-3 !important +.text-orange-4 + color: $orange-4 !important +.text-orange-5 + color: $orange-5 !important +.text-orange-6 + color: $orange-6 !important +.text-orange-7 + color: $orange-7 !important +.text-orange-8 + color: $orange-8 !important +.text-orange-9 + color: $orange-9 !important +.text-orange-10 + color: $orange-10 !important +.text-orange-11 + color: $orange-11 !important +.text-orange-12 + color: $orange-12 !important +.text-orange-13 + color: $orange-13 !important +.text-orange-14 + color: $orange-14 !important +.text-deep-orange + color: $deep-orange !important +.text-deep-orange-1 + color: $deep-orange-1 !important +.text-deep-orange-2 + color: $deep-orange-2 !important +.text-deep-orange-3 + color: $deep-orange-3 !important +.text-deep-orange-4 + color: $deep-orange-4 !important +.text-deep-orange-5 + color: $deep-orange-5 !important +.text-deep-orange-6 + color: $deep-orange-6 !important +.text-deep-orange-7 + color: $deep-orange-7 !important +.text-deep-orange-8 + color: $deep-orange-8 !important +.text-deep-orange-9 + color: $deep-orange-9 !important +.text-deep-orange-10 + color: $deep-orange-10 !important +.text-deep-orange-11 + color: $deep-orange-11 !important +.text-deep-orange-12 + color: $deep-orange-12 !important +.text-deep-orange-13 + color: $deep-orange-13 !important +.text-deep-orange-14 + color: $deep-orange-14 !important +.text-brown + color: $brown !important +.text-brown-1 + color: $brown-1 !important +.text-brown-2 + color: $brown-2 !important +.text-brown-3 + color: $brown-3 !important +.text-brown-4 + color: $brown-4 !important +.text-brown-5 + color: $brown-5 !important +.text-brown-6 + color: $brown-6 !important +.text-brown-7 + color: $brown-7 !important +.text-brown-8 + color: $brown-8 !important +.text-brown-9 + color: $brown-9 !important +.text-brown-10 + color: $brown-10 !important +.text-brown-11 + color: $brown-11 !important +.text-brown-12 + color: $brown-12 !important +.text-brown-13 + color: $brown-13 !important +.text-brown-14 + color: $brown-14 !important +.text-grey + color: $grey !important +.text-grey-1 + color: $grey-1 !important +.text-grey-2 + color: $grey-2 !important +.text-grey-3 + color: $grey-3 !important +.text-grey-4 + color: $grey-4 !important +.text-grey-5 + color: $grey-5 !important +.text-grey-6 + color: $grey-6 !important +.text-grey-7 + color: $grey-7 !important +.text-grey-8 + color: $grey-8 !important +.text-grey-9 + color: $grey-9 !important +.text-grey-10 + color: $grey-10 !important +.text-grey-11 + color: $grey-11 !important +.text-grey-12 + color: $grey-12 !important +.text-grey-13 + color: $grey-13 !important +.text-grey-14 + color: $grey-14 !important +.text-blue-grey + color: $blue-grey !important +.text-blue-grey-1 + color: $blue-grey-1 !important +.text-blue-grey-2 + color: $blue-grey-2 !important +.text-blue-grey-3 + color: $blue-grey-3 !important +.text-blue-grey-4 + color: $blue-grey-4 !important +.text-blue-grey-5 + color: $blue-grey-5 !important +.text-blue-grey-6 + color: $blue-grey-6 !important +.text-blue-grey-7 + color: $blue-grey-7 !important +.text-blue-grey-8 + color: $blue-grey-8 !important +.text-blue-grey-9 + color: $blue-grey-9 !important +.text-blue-grey-10 + color: $blue-grey-10 !important +.text-blue-grey-11 + color: $blue-grey-11 !important +.text-blue-grey-12 + color: $blue-grey-12 !important +.text-blue-grey-13 + color: $blue-grey-13 !important +.text-blue-grey-14 + color: $blue-grey-14 !important +.bg-red + background: $red !important +.bg-red-1 + background: $red-1 !important +.bg-red-2 + background: $red-2 !important +.bg-red-3 + background: $red-3 !important +.bg-red-4 + background: $red-4 !important +.bg-red-5 + background: $red-5 !important +.bg-red-6 + background: $red-6 !important +.bg-red-7 + background: $red-7 !important +.bg-red-8 + background: $red-8 !important +.bg-red-9 + background: $red-9 !important +.bg-red-10 + background: $red-10 !important +.bg-red-11 + background: $red-11 !important +.bg-red-12 + background: $red-12 !important +.bg-red-13 + background: $red-13 !important +.bg-red-14 + background: $red-14 !important +.bg-pink + background: $pink !important +.bg-pink-1 + background: $pink-1 !important +.bg-pink-2 + background: $pink-2 !important +.bg-pink-3 + background: $pink-3 !important +.bg-pink-4 + background: $pink-4 !important +.bg-pink-5 + background: $pink-5 !important +.bg-pink-6 + background: $pink-6 !important +.bg-pink-7 + background: $pink-7 !important +.bg-pink-8 + background: $pink-8 !important +.bg-pink-9 + background: $pink-9 !important +.bg-pink-10 + background: $pink-10 !important +.bg-pink-11 + background: $pink-11 !important +.bg-pink-12 + background: $pink-12 !important +.bg-pink-13 + background: $pink-13 !important +.bg-pink-14 + background: $pink-14 !important +.bg-purple + background: $purple !important +.bg-purple-1 + background: $purple-1 !important +.bg-purple-2 + background: $purple-2 !important +.bg-purple-3 + background: $purple-3 !important +.bg-purple-4 + background: $purple-4 !important +.bg-purple-5 + background: $purple-5 !important +.bg-purple-6 + background: $purple-6 !important +.bg-purple-7 + background: $purple-7 !important +.bg-purple-8 + background: $purple-8 !important +.bg-purple-9 + background: $purple-9 !important +.bg-purple-10 + background: $purple-10 !important +.bg-purple-11 + background: $purple-11 !important +.bg-purple-12 + background: $purple-12 !important +.bg-purple-13 + background: $purple-13 !important +.bg-purple-14 + background: $purple-14 !important +.bg-deep-purple + background: $deep-purple !important +.bg-deep-purple-1 + background: $deep-purple-1 !important +.bg-deep-purple-2 + background: $deep-purple-2 !important +.bg-deep-purple-3 + background: $deep-purple-3 !important +.bg-deep-purple-4 + background: $deep-purple-4 !important +.bg-deep-purple-5 + background: $deep-purple-5 !important +.bg-deep-purple-6 + background: $deep-purple-6 !important +.bg-deep-purple-7 + background: $deep-purple-7 !important +.bg-deep-purple-8 + background: $deep-purple-8 !important +.bg-deep-purple-9 + background: $deep-purple-9 !important +.bg-deep-purple-10 + background: $deep-purple-10 !important +.bg-deep-purple-11 + background: $deep-purple-11 !important +.bg-deep-purple-12 + background: $deep-purple-12 !important +.bg-deep-purple-13 + background: $deep-purple-13 !important +.bg-deep-purple-14 + background: $deep-purple-14 !important +.bg-indigo + background: $indigo !important +.bg-indigo-1 + background: $indigo-1 !important +.bg-indigo-2 + background: $indigo-2 !important +.bg-indigo-3 + background: $indigo-3 !important +.bg-indigo-4 + background: $indigo-4 !important +.bg-indigo-5 + background: $indigo-5 !important +.bg-indigo-6 + background: $indigo-6 !important +.bg-indigo-7 + background: $indigo-7 !important +.bg-indigo-8 + background: $indigo-8 !important +.bg-indigo-9 + background: $indigo-9 !important +.bg-indigo-10 + background: $indigo-10 !important +.bg-indigo-11 + background: $indigo-11 !important +.bg-indigo-12 + background: $indigo-12 !important +.bg-indigo-13 + background: $indigo-13 !important +.bg-indigo-14 + background: $indigo-14 !important +.bg-blue + background: $blue !important +.bg-blue-1 + background: $blue-1 !important +.bg-blue-2 + background: $blue-2 !important +.bg-blue-3 + background: $blue-3 !important +.bg-blue-4 + background: $blue-4 !important +.bg-blue-5 + background: $blue-5 !important +.bg-blue-6 + background: $blue-6 !important +.bg-blue-7 + background: $blue-7 !important +.bg-blue-8 + background: $blue-8 !important +.bg-blue-9 + background: $blue-9 !important +.bg-blue-10 + background: $blue-10 !important +.bg-blue-11 + background: $blue-11 !important +.bg-blue-12 + background: $blue-12 !important +.bg-blue-13 + background: $blue-13 !important +.bg-blue-14 + background: $blue-14 !important +.bg-light-blue + background: $light-blue !important +.bg-light-blue-1 + background: $light-blue-1 !important +.bg-light-blue-2 + background: $light-blue-2 !important +.bg-light-blue-3 + background: $light-blue-3 !important +.bg-light-blue-4 + background: $light-blue-4 !important +.bg-light-blue-5 + background: $light-blue-5 !important +.bg-light-blue-6 + background: $light-blue-6 !important +.bg-light-blue-7 + background: $light-blue-7 !important +.bg-light-blue-8 + background: $light-blue-8 !important +.bg-light-blue-9 + background: $light-blue-9 !important +.bg-light-blue-10 + background: $light-blue-10 !important +.bg-light-blue-11 + background: $light-blue-11 !important +.bg-light-blue-12 + background: $light-blue-12 !important +.bg-light-blue-13 + background: $light-blue-13 !important +.bg-light-blue-14 + background: $light-blue-14 !important +.bg-cyan + background: $cyan !important +.bg-cyan-1 + background: $cyan-1 !important +.bg-cyan-2 + background: $cyan-2 !important +.bg-cyan-3 + background: $cyan-3 !important +.bg-cyan-4 + background: $cyan-4 !important +.bg-cyan-5 + background: $cyan-5 !important +.bg-cyan-6 + background: $cyan-6 !important +.bg-cyan-7 + background: $cyan-7 !important +.bg-cyan-8 + background: $cyan-8 !important +.bg-cyan-9 + background: $cyan-9 !important +.bg-cyan-10 + background: $cyan-10 !important +.bg-cyan-11 + background: $cyan-11 !important +.bg-cyan-12 + background: $cyan-12 !important +.bg-cyan-13 + background: $cyan-13 !important +.bg-cyan-14 + background: $cyan-14 !important +.bg-teal + background: $teal !important +.bg-teal-1 + background: $teal-1 !important +.bg-teal-2 + background: $teal-2 !important +.bg-teal-3 + background: $teal-3 !important +.bg-teal-4 + background: $teal-4 !important +.bg-teal-5 + background: $teal-5 !important +.bg-teal-6 + background: $teal-6 !important +.bg-teal-7 + background: $teal-7 !important +.bg-teal-8 + background: $teal-8 !important +.bg-teal-9 + background: $teal-9 !important +.bg-teal-10 + background: $teal-10 !important +.bg-teal-11 + background: $teal-11 !important +.bg-teal-12 + background: $teal-12 !important +.bg-teal-13 + background: $teal-13 !important +.bg-teal-14 + background: $teal-14 !important +.bg-green + background: $green !important +.bg-green-1 + background: $green-1 !important +.bg-green-2 + background: $green-2 !important +.bg-green-3 + background: $green-3 !important +.bg-green-4 + background: $green-4 !important +.bg-green-5 + background: $green-5 !important +.bg-green-6 + background: $green-6 !important +.bg-green-7 + background: $green-7 !important +.bg-green-8 + background: $green-8 !important +.bg-green-9 + background: $green-9 !important +.bg-green-10 + background: $green-10 !important +.bg-green-11 + background: $green-11 !important +.bg-green-12 + background: $green-12 !important +.bg-green-13 + background: $green-13 !important +.bg-green-14 + background: $green-14 !important +.bg-light-green + background: $light-green !important +.bg-light-green-1 + background: $light-green-1 !important +.bg-light-green-2 + background: $light-green-2 !important +.bg-light-green-3 + background: $light-green-3 !important +.bg-light-green-4 + background: $light-green-4 !important +.bg-light-green-5 + background: $light-green-5 !important +.bg-light-green-6 + background: $light-green-6 !important +.bg-light-green-7 + background: $light-green-7 !important +.bg-light-green-8 + background: $light-green-8 !important +.bg-light-green-9 + background: $light-green-9 !important +.bg-light-green-10 + background: $light-green-10 !important +.bg-light-green-11 + background: $light-green-11 !important +.bg-light-green-12 + background: $light-green-12 !important +.bg-light-green-13 + background: $light-green-13 !important +.bg-light-green-14 + background: $light-green-14 !important +.bg-lime + background: $lime !important +.bg-lime-1 + background: $lime-1 !important +.bg-lime-2 + background: $lime-2 !important +.bg-lime-3 + background: $lime-3 !important +.bg-lime-4 + background: $lime-4 !important +.bg-lime-5 + background: $lime-5 !important +.bg-lime-6 + background: $lime-6 !important +.bg-lime-7 + background: $lime-7 !important +.bg-lime-8 + background: $lime-8 !important +.bg-lime-9 + background: $lime-9 !important +.bg-lime-10 + background: $lime-10 !important +.bg-lime-11 + background: $lime-11 !important +.bg-lime-12 + background: $lime-12 !important +.bg-lime-13 + background: $lime-13 !important +.bg-lime-14 + background: $lime-14 !important +.bg-yellow + background: $yellow !important +.bg-yellow-1 + background: $yellow-1 !important +.bg-yellow-2 + background: $yellow-2 !important +.bg-yellow-3 + background: $yellow-3 !important +.bg-yellow-4 + background: $yellow-4 !important +.bg-yellow-5 + background: $yellow-5 !important +.bg-yellow-6 + background: $yellow-6 !important +.bg-yellow-7 + background: $yellow-7 !important +.bg-yellow-8 + background: $yellow-8 !important +.bg-yellow-9 + background: $yellow-9 !important +.bg-yellow-10 + background: $yellow-10 !important +.bg-yellow-11 + background: $yellow-11 !important +.bg-yellow-12 + background: $yellow-12 !important +.bg-yellow-13 + background: $yellow-13 !important +.bg-yellow-14 + background: $yellow-14 !important +.bg-amber + background: $amber !important +.bg-amber-1 + background: $amber-1 !important +.bg-amber-2 + background: $amber-2 !important +.bg-amber-3 + background: $amber-3 !important +.bg-amber-4 + background: $amber-4 !important +.bg-amber-5 + background: $amber-5 !important +.bg-amber-6 + background: $amber-6 !important +.bg-amber-7 + background: $amber-7 !important +.bg-amber-8 + background: $amber-8 !important +.bg-amber-9 + background: $amber-9 !important +.bg-amber-10 + background: $amber-10 !important +.bg-amber-11 + background: $amber-11 !important +.bg-amber-12 + background: $amber-12 !important +.bg-amber-13 + background: $amber-13 !important +.bg-amber-14 + background: $amber-14 !important +.bg-orange + background: $orange !important +.bg-orange-1 + background: $orange-1 !important +.bg-orange-2 + background: $orange-2 !important +.bg-orange-3 + background: $orange-3 !important +.bg-orange-4 + background: $orange-4 !important +.bg-orange-5 + background: $orange-5 !important +.bg-orange-6 + background: $orange-6 !important +.bg-orange-7 + background: $orange-7 !important +.bg-orange-8 + background: $orange-8 !important +.bg-orange-9 + background: $orange-9 !important +.bg-orange-10 + background: $orange-10 !important +.bg-orange-11 + background: $orange-11 !important +.bg-orange-12 + background: $orange-12 !important +.bg-orange-13 + background: $orange-13 !important +.bg-orange-14 + background: $orange-14 !important +.bg-deep-orange + background: $deep-orange !important +.bg-deep-orange-1 + background: $deep-orange-1 !important +.bg-deep-orange-2 + background: $deep-orange-2 !important +.bg-deep-orange-3 + background: $deep-orange-3 !important +.bg-deep-orange-4 + background: $deep-orange-4 !important +.bg-deep-orange-5 + background: $deep-orange-5 !important +.bg-deep-orange-6 + background: $deep-orange-6 !important +.bg-deep-orange-7 + background: $deep-orange-7 !important +.bg-deep-orange-8 + background: $deep-orange-8 !important +.bg-deep-orange-9 + background: $deep-orange-9 !important +.bg-deep-orange-10 + background: $deep-orange-10 !important +.bg-deep-orange-11 + background: $deep-orange-11 !important +.bg-deep-orange-12 + background: $deep-orange-12 !important +.bg-deep-orange-13 + background: $deep-orange-13 !important +.bg-deep-orange-14 + background: $deep-orange-14 !important +.bg-brown + background: $brown !important +.bg-brown-1 + background: $brown-1 !important +.bg-brown-2 + background: $brown-2 !important +.bg-brown-3 + background: $brown-3 !important +.bg-brown-4 + background: $brown-4 !important +.bg-brown-5 + background: $brown-5 !important +.bg-brown-6 + background: $brown-6 !important +.bg-brown-7 + background: $brown-7 !important +.bg-brown-8 + background: $brown-8 !important +.bg-brown-9 + background: $brown-9 !important +.bg-brown-10 + background: $brown-10 !important +.bg-brown-11 + background: $brown-11 !important +.bg-brown-12 + background: $brown-12 !important +.bg-brown-13 + background: $brown-13 !important +.bg-brown-14 + background: $brown-14 !important +.bg-grey + background: $grey !important +.bg-grey-1 + background: $grey-1 !important +.bg-grey-2 + background: $grey-2 !important +.bg-grey-3 + background: $grey-3 !important +.bg-grey-4 + background: $grey-4 !important +.bg-grey-5 + background: $grey-5 !important +.bg-grey-6 + background: $grey-6 !important +.bg-grey-7 + background: $grey-7 !important +.bg-grey-8 + background: $grey-8 !important +.bg-grey-9 + background: $grey-9 !important +.bg-grey-10 + background: $grey-10 !important +.bg-grey-11 + background: $grey-11 !important +.bg-grey-12 + background: $grey-12 !important +.bg-grey-13 + background: $grey-13 !important +.bg-grey-14 + background: $grey-14 !important +.bg-blue-grey + background: $blue-grey !important +.bg-blue-grey-1 + background: $blue-grey-1 !important +.bg-blue-grey-2 + background: $blue-grey-2 !important +.bg-blue-grey-3 + background: $blue-grey-3 !important +.bg-blue-grey-4 + background: $blue-grey-4 !important +.bg-blue-grey-5 + background: $blue-grey-5 !important +.bg-blue-grey-6 + background: $blue-grey-6 !important +.bg-blue-grey-7 + background: $blue-grey-7 !important +.bg-blue-grey-8 + background: $blue-grey-8 !important +.bg-blue-grey-9 + background: $blue-grey-9 !important +.bg-blue-grey-10 + background: $blue-grey-10 !important +.bg-blue-grey-11 + background: $blue-grey-11 !important +.bg-blue-grey-12 + background: $blue-grey-12 !important +.bg-blue-grey-13 + background: $blue-grey-13 !important +.bg-blue-grey-14 + background: $blue-grey-14 !important +.shadow-transition + transition: $shadow-transition !important +@for $z from 1 through 24 + .shadow-#{$z} + box-shadow: nth($shadows, $z) + .shadow-up-#{$z} + box-shadow: nth($shadows-up, $z) +.no-shadow, .shadow-0 + box-shadow: none !important +.inset-shadow + box-shadow: $inset-shadow !important +.inset-shadow-down + box-shadow: $inset-shadow-down !important +.z-marginals + z-index: $z-marginals +.z-notify + z-index: $z-notify +.z-fullscreen + z-index: $z-fullscreen +.z-inherit + z-index: inherit !important +@mixin fg($name, $size) + $noProcNotZero: $size > 0 + @media (min-width: $size) + #{str-fe('.col', $name, $noProcNotZero)} + &, &-auto, &-grow, &-shrink + .row > &, .flex > & + width: auto + min-width: 0 + max-width: 100% + .column > &, .flex > & + height: auto + min-height: 0 + max-height: 100% + & + flex: 10000 1 0% + &-auto + flex: 0 0 auto + &-grow + flex: 1 0 auto + &-shrink + flex: 0 1 auto + @for $i from 0 through $flex-cols + $ic: quote('' + $i) + #{str-fe('.col-', $name, $noProcNotZero, $ic)} + @extend .col#{$name}-auto + .row + #{str-fe('> .col-', $name, $noProcNotZero, $ic)} + height: auto + width: toFixed(percentage($i / $flex-cols), 10000) + @if $i != 0 or $name != '' + #{str-fe('> .offset-', $name, $noProcNotZero, $ic)} + margin-left: toFixed(percentage($i / $flex-cols), 10000) + .column + #{str-fe('> .col-', $name, $noProcNotZero, $ic)} + height: toFixed(percentage($i / $flex-cols), 10000) + width: auto + @if $size == 0 and $i == $flex-cols + .row > .col-all + height: auto + flex: 0 0 100% +.row, .column, .flex + display: flex + flex-wrap: wrap + &.inline + display: inline-flex +.row.reverse + flex-direction: row-reverse +.column + flex-direction: column + &.reverse + flex-direction: column-reverse +.wrap + flex-wrap: wrap +.no-wrap + flex-wrap: nowrap +.reverse-wrap + flex-wrap: wrap-reverse +.order- + &first + order: -10000 + &last + order: 10000 + &none + order: 0 +.justify- + &start + justify-content: flex-start + &end + justify-content: flex-end + ¢er + justify-content: center + &between + justify-content: space-between + &around + justify-content: space-around + &evenly + justify-content: space-evenly +.items- + &start + align-items: flex-start + &end + align-items: flex-end + ¢er + align-items: center + &baseline + align-items: baseline + &stretch + align-items: stretch +.content- + &start + align-content: flex-start + &end + align-content: flex-end + ¢er + align-content: center + &stretch + align-content: stretch + &between + align-content: space-between + &around + align-content: space-around +.self- + &start + align-self: flex-start + &end + align-self: flex-end + ¢er + align-self: center + &baseline + align-self: baseline + &stretch + align-self: stretch +.flex-center + @extend .items-center + @extend .justify-center +@each $name, $size in $flex-gutter + .q-gutter + &-x-#{$name} + margin-left: -$size + > * + margin-left: $size + &-y-#{$name} + margin-top: -$size + > * + margin-top: $size + &-#{$name} + @extend .q-gutter-x-#{$name} + @extend .q-gutter-y-#{$name} + .q-col-gutter + &-x-#{$name} + margin-left: -$size + > * + padding-left: $size + &-y-#{$name} + margin-top: -$size + > * + padding-top: $size + &-#{$name} + @extend .q-col-gutter-x-#{$name} + @extend .q-col-gutter-y-#{$name} +@each $name, $size in $sizes + @include fg("-" + $name, $size) +.rounded-borders + border-radius: $generic-border-radius +.border-radius-inherit + border-radius: inherit +.no-transition + transition: none !important +.transition-0 + transition: 0s !important +.glossy + background-image: linear-gradient(to bottom, rgba(#fff, .3), rgba(#fff, 0) 50%, rgba(#000, .12) 51%, rgba(#000, .04)) !important +.q-placeholder + &::-webkit-input-placeholder + color: inherit + opacity: .7 + &::-moz-placeholder + color: inherit + opacity: .7 + &:-ms-input-placeholder + color: inherit !important + opacity: .7 !important + &::-ms-input-placeholder + color: inherit + opacity: .7 + &::placeholder + color: inherit + opacity: .7 +.q-body--fullscreen-mixin + position: fixed !important +.q-body--prevent-scroll + width: 100vw + height: 100vh + overflow-x: hidden + contain: layout size + contain: layout size style + overscroll-behavior: none + -webkit-overflow-scrolling: none + body + position: relative !important + overflow: hidden + .q-drawer__backdrop + width: 100vw + max-height: none + &[dir=rtl] + .q-body--scroll-locked + transform: translateX(var(--q-scroll-lock-left)) +.q-portal__container + contain: size + contain: size style +.q-portal__clone + position: fixed !important + transform: none !important + transition: none !important + flex-shrink: 0 !important + opacity: 0 !important + z-index: -1 !important +.q-focus__clone + * + position: fixed !important + transition: none !important + opacity: 0 !important + pointer-events: none !important +body.native-mobile + .q-focus__clone + * + top: 50vh +.q-no-input-spinner + -moz-appearance: textfield !important + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button + -webkit-appearance: none + margin: 0 +.q-link + outline: 0 + text-decoration: none + &--focusable:focus-visible + text-decoration: underline dashed currentColor 1px +body.electron + .q-electron-drag + -webkit-user-select: none + -webkit-app-region: drag + .q-electron-drag .q-btn-item, .q-electron-drag--exception + -webkit-app-region: no-drag +img.responsive + max-width: 100% + height: auto +.non-selectable + user-select: none !important +.scroll + overflow: auto +.scroll, .scroll-x, .scroll-y + -webkit-overflow-scrolling: touch + will-change: scroll-position +.scroll-x + overflow-x: auto +.scroll-y + overflow-y: auto +.no-scroll + overflow: hidden !important +.no-pointer-events, +.no-pointer-events--children, +.no-pointer-events--children * + pointer-events: none !important +.all-pointer-events + pointer-events: all !important +.cursor + &-pointer + cursor: pointer !important + &-not-allowed + cursor: not-allowed !important + &-inherit + cursor: inherit !important + &-none + cursor: none !important +[aria-busy='true'] + cursor: progress +[aria-controls], +[role='button'] + cursor: pointer +[aria-disabled] + cursor: default +.rotate-45 + transform: rotate(45deg) #{"/* rtl:ignore */"} +.rotate-90 + transform: rotate(90deg) #{"/* rtl:ignore */"} +.rotate-135 + transform: rotate(135deg) #{"/* rtl:ignore */"} +.rotate-180 + transform: rotate(180deg) #{"/* rtl:ignore */"} +/* deprecated: to be removed */ +.rotate-205 + transform: rotate(205deg) #{"/* rtl:ignore */"} +.rotate-225 + transform: rotate(225deg) #{"/* rtl:ignore */"} +.rotate-270 + transform: rotate(270deg) #{"/* rtl:ignore */"} +.rotate-315 + transform: rotate(315deg) #{"/* rtl:ignore */"} +.flip-horizontal + transform: scaleX(-1) +.flip-vertical + transform: scaleY(-1) +.float-left + float: left +.float-right + float: right +.relative-position + position: relative +.fixed, +.fixed-full, +.fullscreen, +.fixed-center, +.fixed-bottom, +.fixed-left, +.fixed-right, +.fixed-top, +.fixed-top-left, +.fixed-top-right, +.fixed-bottom-left, +.fixed-bottom-right + position: fixed +.absolute, +.absolute-full, +.absolute-center, +.absolute-bottom, +.absolute-left, +.absolute-right, +.absolute-top, +.absolute-top-left, +.absolute-top-right, +.absolute-bottom-left, +.absolute-bottom-right + position: absolute +.fixed-top, .absolute-top + top: 0 + left: 0 + right: 0 +.fixed-right, .absolute-right + top: 0 + right: 0 + bottom: 0 +.fixed-bottom, .absolute-bottom + right: 0 + bottom: 0 + left: 0 +.fixed-left, .absolute-left + top: 0 + bottom: 0 + left: 0 +.fixed-top-left, .absolute-top-left + top: 0 + left: 0 +.fixed-top-right, .absolute-top-right + top: 0 + right: 0 +.fixed-bottom-left, .absolute-bottom-left + bottom: 0 + left: 0 +.fixed-bottom-right, .absolute-bottom-right + bottom: 0 + right: 0 +.fullscreen + z-index: $z-fullscreen + border-radius: 0 !important + max-width: 100vw + max-height: 100vh +body.q-ios-padding .fullscreen + padding-top: $ios-statusbar-height !important + padding-top: env(safe-area-inset-top) !important + padding-bottom: env(safe-area-inset-bottom) !important +.absolute-full, .fullscreen, .fixed-full + top: 0 + right: 0 + bottom: 0 + left: 0 +.fixed-center, .absolute-center + top: 50% + left: 50% + transform: translate(-50%, -50%) +.vertical- + &top + vertical-align: top !important + &middle + vertical-align: middle !important + &bottom + vertical-align: bottom !important +.on-left + margin-right: 12px +.on-right + margin-left: 12px +\:root + @each $name, $size in $sizes + #{"--q-size-"}#{$name}: #{$size} +.fit + width: 100% !important + height: 100% !important +.full-height + height: 100% !important +.full-width + width: 100% !important + margin-left: 0 !important + margin-right: 0 !important +.window-height + margin-top: 0 !important + margin-bottom: 0 !important + height: 100vh !important +.window-width + margin-left: 0 !important + margin-right: 0 !important + width: 100vw !important +.block + display: block !important +.inline-block + display: inline-block !important +@each $space, $value in $spaces + .q-pa-#{$space} + padding: map-get($value, "y") map-get($value, "x") + .q-pl-#{$space} + padding-left: map-get($value, "x") + .q-pr-#{$space} + padding-right: map-get($value, "x") + .q-pt-#{$space} + padding-top: map-get($value, "y") + .q-pb-#{$space} + padding-bottom: map-get($value, "y") + .q-px-#{$space} + padding-left: map-get($value, "x") + padding-right: map-get($value, "x") + .q-py-#{$space} + padding-top: map-get($value, "y") + padding-bottom: map-get($value, "y") + .q-ma-#{$space} + margin: map-get($value, "y") map-get($value, "x") + .q-ml-#{$space} + margin-left: map-get($value, "x") + .q-mr-#{$space} + margin-right: map-get($value, "x") + .q-mt-#{$space} + margin-top: map-get($value, "y") + .q-mb-#{$space} + margin-bottom: map-get($value, "y") + .q-mx-#{$space} + margin-left: map-get($value, "x") + margin-right: map-get($value, "x") + .q-my-#{$space} + margin-top: map-get($value, "y") + margin-bottom: map-get($value, "y") +.q-mt-auto, .q-my-auto + margin-top: auto +.q-ml-auto + margin-left: auto +.q-mb-auto, .q-my-auto + margin-bottom: auto +.q-mr-auto + margin-right: auto +.q-mx-auto + margin-left: auto + margin-right: auto +.q-touch + user-select: none + user-drag: none + -khtml-user-drag: none + -webkit-user-drag: none +.q-touch-x + touch-action: pan-x +.q-touch-y + touch-action: pan-y +$transition-easing: cubic-bezier(0.215, 0.61, 0.355, 1) +.q-transition + &--slide-right, + &--slide-left, + &--slide-up, + &--slide-down, + &--jump-right, + &--jump-left, + &--jump-up, + &--jump-down, + &--fade, + &--scale, + &--rotate, + &--flip + &-leave-active + position: absolute + &--slide-right, + &--slide-left, + &--slide-up, + &--slide-down + &-enter-active, + &-leave-active + transition: transform .3s $transition-easing + &--slide-right + &-enter + transform: translate3d(-100%, 0, 0) + &-leave-to + transform: translate3d(100%, 0, 0) + &--slide-left + &-enter + transform: translate3d(100%, 0, 0) + &-leave-to + transform: translate3d(-100%, 0, 0) + &--slide-up + &-enter + transform: translate3d(0, 100%, 0) + &-leave-to + transform: translate3d(0, -100%, 0) + &--slide-down + &-enter + transform: translate3d(0, -100%, 0) + &-leave-to + transform: translate3d(0, 100%, 0) + &--jump-right, + &--jump-left, + &--jump-up, + &--jump-down + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s + &-enter, + &-leave-to + opacity: 0 + &--jump-right + &-enter + transform: translate3d(-15px, 0, 0) + &-leave-to + transform: translate3d(15px, 0, 0) + &--jump-left + &-enter + transform: translate3d(15px, 0, 0) + &-leave-to + transform: translateX(-15px) + &--jump-up + &-enter + transform: translate3d(0, 15px, 0) + &-leave-to + transform: translate3d(0, -15px, 0) + &--jump-down + &-enter + transform: translate3d(0, -15px, 0) + &-leave-to + transform: translate3d(0, 15px, 0) + &--fade + &-enter-active, + &-leave-active + transition: opacity .3s ease-out + &-enter, + &-leave, + &-leave-to + opacity: 0 + &--scale + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s $transition-easing + &-enter, + &-leave, + &-leave-to + opacity: 0 + transform: scale3d(0, 0, 1) + &--rotate + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s $transition-easing + transform-style: preserve-3d + &-enter, + &-leave, + &-leave-to + opacity: 0 + transform: scale3d(0, 0, 1) rotate3d(0, 0, 1, 90deg) + &--flip-right, + &--flip-left, + &--flip-up, + &--flip-down + &-enter-active, + &-leave-active + transition: transform .3s + backface-visibility: hidden + &-enter-to, + &-leave + transform: perspective(400px) rotate3d(1, 1, 0, 0deg) + &--flip-right + &-enter + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + &-leave-to + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + &--flip-left + &-enter + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + &-leave-to + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + &--flip-up + &-enter + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + &-leave-to + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + &--flip-down + &-enter + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + &-leave-to + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + &--hide-scroll, + &--hide-scroll > .q-panel:first-child + overflow: hidden !important +body + min-width: 100px + min-height: 100% + font-family: $typography-font-family + -ms-text-size-adjust: 100% + -webkit-text-size-adjust: 100% + -webkit-font-smoothing: antialiased + -moz-osx-font-smoothing: grayscale + font-smoothing: antialiased + line-height: $body-line-height + font-size: $body-font-size +@each $heading, $value in $h-tags + #{$heading} + font-size: map-get($value, "size") + font-weight: map-get($value, "weight") + line-height: map-get($value, "line-height") + letter-spacing: map-get($value, "letter-spacing") +p + margin: 0 0 map-get(map-get($spaces, "md"), "y") +.text- + @each $heading, $value in $headings + &#{$heading} + font-size: map-get($value, "size") + font-weight: map-get($value, "weight") + line-height: map-get($value, "line-height") + letter-spacing: map-get($value, "letter-spacing") + &uppercase + text-transform: uppercase + &lowercase + text-transform: lowercase + &capitalize + text-transform: capitalize + ¢er + text-align: center + &left + text-align: left + &right + text-align: right + &justify + text-align: justify + hyphens: auto + &italic + font-style: italic + &bold + font-weight: bold + &no-wrap + white-space: nowrap + &strike + text-decoration: line-through + @each $weight, $value in $text-weights + &weight-#{$weight} + font-weight: $value +small + font-size: 80% +big + font-size: 170% +sub + bottom: -.25em +sup + top: -.5em +.no-margin + margin: 0 !important +.no-padding + padding: 0 !important +.no-border + border: 0 !important +.no-border-radius + border-radius: 0 !important +.no-box-shadow + box-shadow: none !important +.no-outline + outline: 0 !important +.ellipsis + text-overflow: ellipsis + white-space: nowrap + overflow: hidden + &-2-lines, &-3-lines + overflow: hidden + display: -webkit-box + -webkit-box-orient: vertical + &-2-lines + -webkit-line-clamp: 2 + &-3-lines + -webkit-line-clamp: 3 +.readonly + cursor: default !important +.disabled, [disabled] + &, * + outline: 0 !important + cursor: not-allowed !important +.disabled, [disabled] + opacity: .6 !important +.hidden + display: none !important +.invisible + visibility: hidden !important +.transparent + background: transparent !important +.overflow-auto + overflow: auto !important +.overflow-hidden + overflow: hidden !important +.overflow-hidden-y + overflow-y: hidden !important +.hide-scrollbar + scrollbar-width: none + -ms-overflow-style: none + &::-webkit-scrollbar + width: 0 + height: 0 + display: none +.dimmed, .light-dimmed + &:after + content: '' + position: absolute + top: 0 + right: 0 #{"/* rtl:ignore */"} + bottom: 0 + left: 0 #{"/* rtl:ignore */"} +.dimmed:after + background: $dimmed-background !important +.light-dimmed:after + background: $light-dimmed-background !important +.z-top + z-index: $z-top !important +.z-max + z-index: $z-max !important +$platforms: desktop, mobile, native-mobile, cordova, capacitor, electron, touch, within-iframe, platform-ios, platform-android +@each $type in $platforms + body:not(.#{$type}) .#{$type}-only, + body.#{$type} .#{$type}-hide + display: none !important +@media all and (orientation: portrait) + .orientation-landscape + display: none !important +@media all and (orientation: landscape) + .orientation-portrait + display: none !important +@media screen + .print-only + display: none !important +@media print + .print-hide + display: none !important +@media (max-width: $breakpoint-xs-max) + .xs-hide, .gt-xs, .sm, .gt-sm, .md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-sm-min) and (max-width: $breakpoint-sm-max) + .sm-hide, .xs, .lt-sm, .gt-sm, .md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-md-min) and (max-width: $breakpoint-md-max) + .md-hide, .xs, .lt-sm, .sm, .lt-md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-lg-min) and (max-width: $breakpoint-lg-max) + .lg-hide, .xs, .lt-sm, .sm, .lt-md, .md, .lt-lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-xl-min) + .xl-hide, .xs, .lt-sm, .sm, .lt-md, .md, .lt-lg, .lg, .lt-xl + display: none !important +.q-focus-helper, .q-focusable, .q-manual-focusable, .q-hoverable + outline: 0 +body.desktop + .q-focus-helper + position: absolute + top: 0 + left: 0 #{"/* rtl:ignore */"} + width: 100% + height: 100% + pointer-events: none + border-radius: inherit + opacity: 0 + transition: background-color .3s cubic-bezier(.25,.8,.5,1), opacity .4s cubic-bezier(.25,.8,.5,1) + &:before, &:after + content: '' + position: absolute + top: 0 + left: 0 #{"/* rtl:ignore */"} + width: 100% + height: 100% + opacity: 0 + border-radius: inherit + transition: background-color .3s cubic-bezier(.25,.8,.5,1), opacity .6s cubic-bezier(.25,.8,.5,1) + &:before + background: #000 + &:after + background: #fff + &--rounded + border-radius: $generic-border-radius + &--round + border-radius: 50% + .q-focusable:focus, .q-manual-focusable--focused, .q-hoverable:hover + > .q-focus-helper + background: currentColor + opacity: .15 + &:before + opacity: .1 + &:after + opacity: .4 + .q-focusable:focus, .q-manual-focusable--focused + > .q-focus-helper + opacity: .22 + .q-key-group-navigation--active + outline: auto +body.body--light, +body.body--dark-auto, +.q-light, +.q-dark-auto + color: $light-text + color: var(--q-color-light-text) + background: $light-page + background: var(--q-color-light-page) +body.body--dark + color: $dark-text + color: var(--q-color-dark-text) + background: $dark-page + background: var(--q-color-dark-page) +.q-dark + color: $dark-text + color: var(--q-color-dark-text) + background: $dark + background: var(--q-color-dark) +@media (prefers-color-scheme: dark) + body.body--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + background: $dark-page + background: var(--q-color-dark-page) + .q-dark-auto + color: $dark-text + color: var(--q-color-dark-text) + background: $dark + background: var(--q-color-dark) +@mixin ie_style + + .q-item, + .q-toolbar, + .q-notification + &:after + content: '' + font-size: 0 + visibility: collapse + display: inline + width: 0 + .q-banner > .q-banner__avatar + min-height: 38px + .q-banner--dense > .q-banner__avatar + min-height: 20px + .q-item:after + min-height: 32px + .q-list--dense > .q-item, + .q-item--dense + &after + min-height: 24px + .q-toolbar:after + min-height: $toolbar-min-height + .q-notification + &--standard:after + min-height: 48px + &--multi-line + min-height: 68px + + .q-btn__wrapper, + .q-time__content, + .q-toolbar__title, + .q-menu .q-item__section--main, + .q-table__middle + flex-basis: auto + .q-banner__content + flex-basis: 0 !important + .q-menu, + .q-dialog__inner + > .q-banner > .q-banner__content + flex-basis: auto !important + .q-tab__content + flex-basis: auto + min-width: 100% + .q-card__actions--vert + flex: 0 0 auto + .column + min-width: 0% + @each $name, $size in $sizes + $noProcNotZero: $size > 0 + @media (min-width: $size) + #{str-fe('.col', "-" + $name, $noProcNotZero)} + .row > &, .flex > & + flex-basis: auto + min-width: 0% + + .q-item + &__section + &--avatar + + min-width: 56px + + button.q-btn--actionable:active:hover + .q-btn__wrapper + margin: -1px 1px 1px -1px + .q-btn-group + &--push + > button.q-btn--push.q-btn--actionable:active:hover + .q-btn__wrapper + margin: 1px 1px -1px -1px + .q-btn + overflow: visible + &--wrap + flex-direction: row + + .q-carousel__slide > * + max-width: 100% + + .q-tabs--vertical + .q-tab__indicator + height: auto + + .q-spinner + animation: q-ie-spinner 2s linear infinite #{"/* rtl:ignore */"} + transform-origin: center center #{"/* rtl:ignore */"} + opacity: .5 + &.q-spinner-mat .path + stroke-dasharray: 89, 200 + + .q-checkbox + &__indet + opacity: 0 + &__inner--indet + .q-checkbox__indet + opacity: 1 + + .q-radio + &__check + opacity: 0 + &__inner--truthy + .q-radio__check + opacity: 1 + + .q-date__main + min-height: 290px !important + .q-date__months + align-items: stretch + .q-time--portrait .q-time__main + display: flex + flex-direction: column + flex-wrap: nowrap + flex: 1 0 auto + + .q-field + &__prefix, &__suffix + flex: 1 0 auto + &__bottom--stale + .q-field__messages + left: 12px + &--borderless, &--standard + .q-field__bottom--stale + .q-field__messages + left: 0 + &--float .q-field__label + max-width: 100% + + .q-focus-helper + z-index: 1 +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) + @include ie_style +@supports (-ms-ime-align:auto) + @include ie_style +@keyframes q-ie-spinner + 0% + opacity: .5 + 50% + opacity: 1 + 100% + opacity: .5 diff --git a/dist/quasar.styl b/dist/quasar.styl new file mode 100644 index 00000000000..797e30dca7d --- /dev/null +++ b/dist/quasar.styl @@ -0,0 +1,8176 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +$space-base ?= 16px +$space-x-base ?= $space-base +$space-y-base ?= $space-base +$space-none ?= { x: 0, y: 0 } +$space-xs ?= { x: ($space-x-base * .25), y: ($space-y-base * .25) } +$space-sm ?= { x: ($space-x-base * .5), y: ($space-y-base * .5) } +$space-md ?= { x: $space-x-base, y: $space-y-base } +$space-lg ?= { x: ($space-x-base * 1.5), y: ($space-y-base * 1.5) } +$space-xl ?= { x: ($space-x-base * 3), y: ($space-y-base * 3) } +$spaces ?= { + none: $space-none, + xs: $space-xs, + sm: $space-sm, + md: $space-md, + lg: $space-lg, + xl: $space-xl +} +$animate-duration ?= .3s +$animate-delay ?= .3s +$animate-repeat ?= 1 +$breakpoint-xs ?= 599px +$breakpoint-sm ?= 1023px +$breakpoint-md ?= 1439px +$breakpoint-lg ?= 1919px +$flex-cols ?= 12 +$flex-gutter-xs ?= ($space-base * .25) +$flex-gutter-sm ?= ($space-base * .5) +$flex-gutter-md ?= $space-base +$flex-gutter-lg ?= ($space-base * 1.5) +$flex-gutter-xl ?= ($space-base * 3) +$body-font-size ?= 14px +$body-line-height ?= 1.5 +$flex-gutter ?= { + none: 0, + xs: $flex-gutter-xs, + sm: $flex-gutter-sm, + md: $flex-gutter-md, + lg: $flex-gutter-lg, + xl: $flex-gutter-xl +} +$sizes ?= { + xs: 0, + sm: $breakpoint-xs + 1, + md: $breakpoint-sm + 1, + lg: $breakpoint-md + 1, + xl: $breakpoint-lg + 1 +} +$breakpoint-xs-max ?= ($sizes.sm - 0.02) +$breakpoint-sm-min ?= $sizes.sm +$breakpoint-sm-max ?= ($sizes.md - 0.02) +$breakpoint-md-min ?= $sizes.md +$breakpoint-md-max ?= ($sizes.lg - 0.02) +$breakpoint-lg-min ?= $sizes.lg +$breakpoint-lg-max ?= ($sizes.xl - 0.02) +$breakpoint-xl-min ?= $sizes.xl +$headings ?= { + h1: { + size: 6rem, + line-height: 6rem, + weight: 300, + letter-spacing: -.01562em + }, + h2: { + size: 3.75rem, + line-height: 3.75rem, + letter-spacing: -.00833em, + weight: 300 + }, + h3: { + size: 3rem, + line-height: 3.125rem, + letter-spacing: normal, + weight: 400 + }, + h4: { + size: 2.125rem, + line-height: 2.5rem, + letter-spacing: .00735em, + weight: 400 + }, + h5: { + size: 1.5rem, + line-height: 2rem, + letter-spacing: normal, + weight: 400 + }, + h6: { + size: 1.25rem, + line-height: 2rem, + letter-spacing: .0125em, + weight: 500 + }, + subtitle1: { + size: 1rem, + line-height: 1.75rem, + letter-spacing: .00937em, + weight: 400 + }, + subtitle2: { + size: .875rem, + line-height: 1.375rem, + letter-spacing: .00714em, + weight: 500 + }, + body1: { + size: 1rem, + line-height: 1.5rem, + letter-spacing: .03125em, + weight: 400 + }, + body2: { + size: .875rem, + line-height: 1.25rem, + letter-spacing: .01786em, + weight: 400 + }, + overline: { + size: .75rem, + line-height: 2rem, + letter-spacing: .16667em, + weight: 500 + }, + caption: { + size: .75rem, + line-height: 1.25rem, + letter-spacing: .03333em, + weight: 400 + } +} +$h-tags ?= { + h1: $headings.h1, + h2: $headings.h2, + h3: $headings.h3, + h4: $headings.h4, + h5: $headings.h5, + h6: $headings.h6 +} +$text-weights ?= { + thin: 100, + light: 300, + regular: 400, + medium: 500, + bold: 700, + bolder: 900 +} +$primary ?= #1976D2 +$secondary ?= #26A69A +$accent ?= #9C27B0 +$light-page ?= #ffffff +$light-text ?= #000000 +$dark-page ?= #121212 +$dark-text ?= #ffffff +$dark ?= #1d1d1d +$positive ?= #21BA45 +$negative ?= #C10015 +$info ?= #31CCEC +$warning ?= #F2C037 +$dialog-plugin-light ?= $primary +$dialog-plugin-dark ?= #ffc107 +$notify-background ?= #323232 +$chip-background-light ?= #e0e0e0 +$chip-background-dark ?= #323232 +$backdrop-background ?= #000000 +$dimmed-background ?= rgba(0, 0, 0, .4) +$light-dimmed-background ?= rgba(255, 255, 255, .6) +$separator-color ?= rgba(0, 0, 0, .12) +$separator-dark-color ?= rgba(255, 255, 255, .28) +$red ?= #f44336 +$red-1 ?= #ffebee +$red-2 ?= #ffcdd2 +$red-3 ?= #ef9a9a +$red-4 ?= #e57373 +$red-5 ?= #ef5350 +$red-6 ?= #f44336 +$red-7 ?= #e53935 +$red-8 ?= #d32f2f +$red-9 ?= #c62828 +$red-10 ?= #b71c1c +$red-11 ?= #ff8a80 +$red-12 ?= #ff5252 +$red-13 ?= #ff1744 +$red-14 ?= #d50000 +$pink ?= #e91e63 +$pink-1 ?= #fce4ec +$pink-2 ?= #f8bbd0 +$pink-3 ?= #f48fb1 +$pink-4 ?= #f06292 +$pink-5 ?= #ec407a +$pink-6 ?= #e91e63 +$pink-7 ?= #d81b60 +$pink-8 ?= #c2185b +$pink-9 ?= #ad1457 +$pink-10 ?= #880e4f +$pink-11 ?= #ff80ab +$pink-12 ?= #ff4081 +$pink-13 ?= #f50057 +$pink-14 ?= #c51162 +$purple ?= #9c27b0 +$purple-1 ?= #f3e5f5 +$purple-2 ?= #e1bee7 +$purple-3 ?= #ce93d8 +$purple-4 ?= #ba68c8 +$purple-5 ?= #ab47bc +$purple-6 ?= #9c27b0 +$purple-7 ?= #8e24aa +$purple-8 ?= #7b1fa2 +$purple-9 ?= #6a1b9a +$purple-10 ?= #4a148c +$purple-11 ?= #ea80fc +$purple-12 ?= #e040fb +$purple-13 ?= #d500f9 +$purple-14 ?= #aa00ff +$deep-purple ?= #673ab7 +$deep-purple-1 ?= #ede7f6 +$deep-purple-2 ?= #d1c4e9 +$deep-purple-3 ?= #b39ddb +$deep-purple-4 ?= #9575cd +$deep-purple-5 ?= #7e57c2 +$deep-purple-6 ?= #673ab7 +$deep-purple-7 ?= #5e35b1 +$deep-purple-8 ?= #512da8 +$deep-purple-9 ?= #4527a0 +$deep-purple-10 ?= #311b92 +$deep-purple-11 ?= #b388ff +$deep-purple-12 ?= #7c4dff +$deep-purple-13 ?= #651fff +$deep-purple-14 ?= #6200ea +$indigo ?= #3f51b5 +$indigo-1 ?= #e8eaf6 +$indigo-2 ?= #c5cae9 +$indigo-3 ?= #9fa8da +$indigo-4 ?= #7986cb +$indigo-5 ?= #5c6bc0 +$indigo-6 ?= #3f51b5 +$indigo-7 ?= #3949ab +$indigo-8 ?= #303f9f +$indigo-9 ?= #283593 +$indigo-10 ?= #1a237e +$indigo-11 ?= #8c9eff +$indigo-12 ?= #536dfe +$indigo-13 ?= #3d5afe +$indigo-14 ?= #304ffe +$blue ?= #2196f3 +$blue-1 ?= #e3f2fd +$blue-2 ?= #bbdefb +$blue-3 ?= #90caf9 +$blue-4 ?= #64b5f6 +$blue-5 ?= #42a5f5 +$blue-6 ?= #2196f3 +$blue-7 ?= #1e88e5 +$blue-8 ?= #1976d2 +$blue-9 ?= #1565c0 +$blue-10 ?= #0d47a1 +$blue-11 ?= #82b1ff +$blue-12 ?= #448aff +$blue-13 ?= #2979ff +$blue-14 ?= #2962ff +$light-blue ?= #03a9f4 +$light-blue-1 ?= #e1f5fe +$light-blue-2 ?= #b3e5fc +$light-blue-3 ?= #81d4fa +$light-blue-4 ?= #4fc3f7 +$light-blue-5 ?= #29b6f6 +$light-blue-6 ?= #03a9f4 +$light-blue-7 ?= #039be5 +$light-blue-8 ?= #0288d1 +$light-blue-9 ?= #0277bd +$light-blue-10 ?= #01579b +$light-blue-11 ?= #80d8ff +$light-blue-12 ?= #40c4ff +$light-blue-13 ?= #00b0ff +$light-blue-14 ?= #0091ea +$cyan ?= #00bcd4 +$cyan-1 ?= #e0f7fa +$cyan-2 ?= #b2ebf2 +$cyan-3 ?= #80deea +$cyan-4 ?= #4dd0e1 +$cyan-5 ?= #26c6da +$cyan-6 ?= #00bcd4 +$cyan-7 ?= #00acc1 +$cyan-8 ?= #0097a7 +$cyan-9 ?= #00838f +$cyan-10 ?= #006064 +$cyan-11 ?= #84ffff +$cyan-12 ?= #18ffff +$cyan-13 ?= #00e5ff +$cyan-14 ?= #00b8d4 +$teal ?= #009688 +$teal-1 ?= #e0f2f1 +$teal-2 ?= #b2dfdb +$teal-3 ?= #80cbc4 +$teal-4 ?= #4db6ac +$teal-5 ?= #26a69a +$teal-6 ?= #009688 +$teal-7 ?= #00897b +$teal-8 ?= #00796b +$teal-9 ?= #00695c +$teal-10 ?= #004d40 +$teal-11 ?= #a7ffeb +$teal-12 ?= #64ffda +$teal-13 ?= #1de9b6 +$teal-14 ?= #00bfa5 +$green ?= #4caf50 +$green-1 ?= #e8f5e9 +$green-2 ?= #c8e6c9 +$green-3 ?= #a5d6a7 +$green-4 ?= #81c784 +$green-5 ?= #66bb6a +$green-6 ?= #4caf50 +$green-7 ?= #43a047 +$green-8 ?= #388e3c +$green-9 ?= #2e7d32 +$green-10 ?= #1b5e20 +$green-11 ?= #b9f6ca +$green-12 ?= #69f0ae +$green-13 ?= #00e676 +$green-14 ?= #00c853 +$light-green ?= #8bc34a +$light-green-1 ?= #f1f8e9 +$light-green-2 ?= #dcedc8 +$light-green-3 ?= #c5e1a5 +$light-green-4 ?= #aed581 +$light-green-5 ?= #9ccc65 +$light-green-6 ?= #8bc34a +$light-green-7 ?= #7cb342 +$light-green-8 ?= #689f38 +$light-green-9 ?= #558b2f +$light-green-10 ?= #33691e +$light-green-11 ?= #ccff90 +$light-green-12 ?= #b2ff59 +$light-green-13 ?= #76ff03 +$light-green-14 ?= #64dd17 +$lime ?= #cddc39 +$lime-1 ?= #f9fbe7 +$lime-2 ?= #f0f4c3 +$lime-3 ?= #e6ee9c +$lime-4 ?= #dce775 +$lime-5 ?= #d4e157 +$lime-6 ?= #cddc39 +$lime-7 ?= #c0ca33 +$lime-8 ?= #afb42b +$lime-9 ?= #9e9d24 +$lime-10 ?= #827717 +$lime-11 ?= #f4ff81 +$lime-12 ?= #eeff41 +$lime-13 ?= #c6ff00 +$lime-14 ?= #aeea00 +$yellow ?= #ffeb3b +$yellow-1 ?= #fffde7 +$yellow-2 ?= #fff9c4 +$yellow-3 ?= #fff59d +$yellow-4 ?= #fff176 +$yellow-5 ?= #ffee58 +$yellow-6 ?= #ffeb3b +$yellow-7 ?= #fdd835 +$yellow-8 ?= #fbc02d +$yellow-9 ?= #f9a825 +$yellow-10 ?= #f57f17 +$yellow-11 ?= #ffff8d +$yellow-12 ?= #ffff00 +$yellow-13 ?= #ffea00 +$yellow-14 ?= #ffd600 +$amber ?= #ffc107 +$amber-1 ?= #fff8e1 +$amber-2 ?= #ffecb3 +$amber-3 ?= #ffe082 +$amber-4 ?= #ffd54f +$amber-5 ?= #ffca28 +$amber-6 ?= #ffc107 +$amber-7 ?= #ffb300 +$amber-8 ?= #ffa000 +$amber-9 ?= #ff8f00 +$amber-10 ?= #ff6f00 +$amber-11 ?= #ffe57f +$amber-12 ?= #ffd740 +$amber-13 ?= #ffc400 +$amber-14 ?= #ffab00 +$orange ?= #ff9800 +$orange-1 ?= #fff3e0 +$orange-2 ?= #ffe0b2 +$orange-3 ?= #ffcc80 +$orange-4 ?= #ffb74d +$orange-5 ?= #ffa726 +$orange-6 ?= #ff9800 +$orange-7 ?= #fb8c00 +$orange-8 ?= #f57c00 +$orange-9 ?= #ef6c00 +$orange-10 ?= #e65100 +$orange-11 ?= #ffd180 +$orange-12 ?= #ffab40 +$orange-13 ?= #ff9100 +$orange-14 ?= #ff6d00 +$deep-orange ?= #ff5722 +$deep-orange-1 ?= #fbe9e7 +$deep-orange-2 ?= #ffccbc +$deep-orange-3 ?= #ffab91 +$deep-orange-4 ?= #ff8a65 +$deep-orange-5 ?= #ff7043 +$deep-orange-6 ?= #ff5722 +$deep-orange-7 ?= #f4511e +$deep-orange-8 ?= #e64a19 +$deep-orange-9 ?= #d84315 +$deep-orange-10 ?= #bf360c +$deep-orange-11 ?= #ff9e80 +$deep-orange-12 ?= #ff6e40 +$deep-orange-13 ?= #ff3d00 +$deep-orange-14 ?= #dd2c00 +$brown ?= #795548 +$brown-1 ?= #efebe9 +$brown-2 ?= #d7ccc8 +$brown-3 ?= #bcaaa4 +$brown-4 ?= #a1887f +$brown-5 ?= #8d6e63 +$brown-6 ?= #795548 +$brown-7 ?= #6d4c41 +$brown-8 ?= #5d4037 +$brown-9 ?= #4e342e +$brown-10 ?= #3e2723 +$brown-11 ?= #d7ccc8 +$brown-12 ?= #bcaaa4 +$brown-13 ?= #8d6e63 +$brown-14 ?= #5d4037 +$grey ?= #9e9e9e +$grey-1 ?= #fafafa +$grey-2 ?= #f5f5f5 +$grey-3 ?= #eeeeee +$grey-4 ?= #e0e0e0 +$grey-5 ?= #bdbdbd +$grey-6 ?= #9e9e9e +$grey-7 ?= #757575 +$grey-8 ?= #616161 +$grey-9 ?= #424242 +$grey-10 ?= #212121 +$grey-11 ?= #f5f5f5 +$grey-12 ?= #eeeeee +$grey-13 ?= #bdbdbd +$grey-14 ?= #616161 +$blue-grey ?= #607d8b +$blue-grey-1 ?= #eceff1 +$blue-grey-2 ?= #cfd8dc +$blue-grey-3 ?= #b0bec5 +$blue-grey-4 ?= #90a4ae +$blue-grey-5 ?= #78909c +$blue-grey-6 ?= #607d8b +$blue-grey-7 ?= #546e7a +$blue-grey-8 ?= #455a64 +$blue-grey-9 ?= #37474f +$blue-grey-10 ?= #263238 +$blue-grey-11 ?= #cfd8dc +$blue-grey-12 ?= #b0bec5 +$blue-grey-13 ?= #78909c +$blue-grey-14 ?= #455a64 +$ios-statusbar-height ?= 20px +$z-fab ?= 990 +$z-side ?= 1000 +$z-marginals ?= 2000 +$z-fixed-drawer ?= 3000 +$z-fullscreen ?= 6000 +$z-menu ?= 6000 +$z-top ?= 7000 +$z-tooltip ?= 9000 +$z-notify ?= 9500 +$z-max ?= 9998 +$shadow-color ?= black +$shadow-transition ?= box-shadow .28s cubic-bezier(.4, 0, .2, 1) +$inset-shadow ?= 0 7px 9px -7px alpha($shadow-color, .7) inset +$inset-shadow-down ?= 0 -7px 9px -7px alpha($shadow-color, .7) inset +$elevation-umbra ?= alpha($shadow-color, .2) +$elevation-penumbra ?= alpha($shadow-color, .14) +$elevation-ambient ?= alpha($shadow-color, .12) +$shadow-0 ?= 0 0 0 $elevation-umbra, 0 0 0 $elevation-penumbra, 0 0 0 $elevation-ambient +$shadow-1 ?= 0 1px 3px $elevation-umbra, 0 1px 1px $elevation-penumbra, 0 2px 1px -1px $elevation-ambient +$shadow-2 ?= 0 1px 5px $elevation-umbra, 0 2px 2px $elevation-penumbra, 0 3px 1px -2px $elevation-ambient +$shadow-3 ?= 0 1px 8px $elevation-umbra, 0 3px 4px $elevation-penumbra, 0 3px 3px -2px $elevation-ambient +$shadow-4 ?= 0 2px 4px -1px $elevation-umbra, 0 4px 5px $elevation-penumbra, 0 1px 10px $elevation-ambient +$shadow-5 ?= 0 3px 5px -1px $elevation-umbra, 0 5px 8px $elevation-penumbra, 0 1px 14px $elevation-ambient +$shadow-6 ?= 0 3px 5px -1px $elevation-umbra, 0 6px 10px $elevation-penumbra, 0 1px 18px $elevation-ambient +$shadow-7 ?= 0 4px 5px -2px $elevation-umbra, 0 7px 10px 1px $elevation-penumbra, 0 2px 16px 1px $elevation-ambient +$shadow-8 ?= 0 5px 5px -3px $elevation-umbra, 0 8px 10px 1px $elevation-penumbra, 0 3px 14px 2px $elevation-ambient +$shadow-9 ?= 0 5px 6px -3px $elevation-umbra, 0 9px 12px 1px $elevation-penumbra, 0 3px 16px 2px $elevation-ambient +$shadow-10 ?= 0 6px 6px -3px $elevation-umbra, 0 10px 14px 1px $elevation-penumbra, 0 4px 18px 3px $elevation-ambient +$shadow-11 ?= 0 6px 7px -4px $elevation-umbra, 0 11px 15px 1px $elevation-penumbra, 0 4px 20px 3px $elevation-ambient +$shadow-12 ?= 0 7px 8px -4px $elevation-umbra, 0 12px 17px 2px $elevation-penumbra, 0 5px 22px 4px $elevation-ambient +$shadow-13 ?= 0 7px 8px -4px $elevation-umbra, 0 13px 19px 2px $elevation-penumbra, 0 5px 24px 4px $elevation-ambient +$shadow-14 ?= 0 7px 9px -4px $elevation-umbra, 0 14px 21px 2px $elevation-penumbra, 0 5px 26px 4px $elevation-ambient +$shadow-15 ?= 0 8px 9px -5px $elevation-umbra, 0 15px 22px 2px $elevation-penumbra, 0 6px 28px 5px $elevation-ambient +$shadow-16 ?= 0 8px 10px -5px $elevation-umbra, 0 16px 24px 2px $elevation-penumbra, 0 6px 30px 5px $elevation-ambient +$shadow-17 ?= 0 8px 11px -5px $elevation-umbra, 0 17px 26px 2px $elevation-penumbra, 0 6px 32px 5px $elevation-ambient +$shadow-18 ?= 0 9px 11px -5px $elevation-umbra, 0 18px 28px 2px $elevation-penumbra, 0 7px 34px 6px $elevation-ambient +$shadow-19 ?= 0 9px 12px -6px $elevation-umbra, 0 19px 29px 2px $elevation-penumbra, 0 7px 36px 6px $elevation-ambient +$shadow-20 ?= 0 10px 13px -6px $elevation-umbra, 0 20px 31px 3px $elevation-penumbra, 0 8px 38px 7px $elevation-ambient +$shadow-21 ?= 0 10px 13px -6px $elevation-umbra, 0 21px 33px 3px $elevation-penumbra, 0 8px 40px 7px $elevation-ambient +$shadow-22 ?= 0 10px 14px -6px $elevation-umbra, 0 22px 35px 3px $elevation-penumbra, 0 8px 42px 7px $elevation-ambient +$shadow-23 ?= 0 11px 14px -7px $elevation-umbra, 0 23px 36px 3px $elevation-penumbra, 0 9px 44px 8px $elevation-ambient +$shadow-24 ?= 0 11px 15px -7px $elevation-umbra, 0 24px 38px 3px $elevation-penumbra, 0 9px 46px 8px $elevation-ambient +$shadow-up-0 ?= 0 0 0 $elevation-umbra, 0 0 0 $elevation-penumbra, 0 0 0 $elevation-ambient +$shadow-up-1 ?= 0 -1px 3px $elevation-umbra, 0 -1px 1px $elevation-penumbra, 0 -2px 1px -1px $elevation-ambient +$shadow-up-2 ?= 0 -1px 5px $elevation-umbra, 0 -2px 2px $elevation-penumbra, 0 -3px 1px -2px $elevation-ambient +$shadow-up-3 ?= 0 -1px 8px $elevation-umbra, 0 -3px 4px $elevation-penumbra, 0 -3px 3px -2px $elevation-ambient +$shadow-up-4 ?= 0 -2px 4px -1px $elevation-umbra, 0 -4px 5px $elevation-penumbra, 0 -1px 10px $elevation-ambient +$shadow-up-5 ?= 0 -3px 5px -1px $elevation-umbra, 0 -5px 8px $elevation-penumbra, 0 -1px 14px $elevation-ambient +$shadow-up-6 ?= 0 -3px 5px -1px $elevation-umbra, 0 -6px 10px $elevation-penumbra, 0 -1px 18px $elevation-ambient +$shadow-up-7 ?= 0 -4px 5px -2px $elevation-umbra, 0 -7px 10px 1px $elevation-penumbra, 0 -2px 16px 1px $elevation-ambient +$shadow-up-8 ?= 0 -5px 5px -3px $elevation-umbra, 0 -8px 10px 1px $elevation-penumbra, 0 -3px 14px 2px $elevation-ambient +$shadow-up-9 ?= 0 -5px 6px -3px $elevation-umbra, 0 -9px 12px 1px $elevation-penumbra, 0 -3px 16px 2px $elevation-ambient +$shadow-up-10 ?= 0 -6px 6px -3px $elevation-umbra, 0 -10px 14px 1px $elevation-penumbra, 0 -4px 18px 3px $elevation-ambient +$shadow-up-11 ?= 0 -6px 7px -4px $elevation-umbra, 0 -11px 15px 1px $elevation-penumbra, 0 -4px 20px 3px $elevation-ambient +$shadow-up-12 ?= 0 -7px 8px -4px $elevation-umbra, 0 -12px 17px 2px $elevation-penumbra, 0 -5px 22px 4px $elevation-ambient +$shadow-up-13 ?= 0 -7px 8px -4px $elevation-umbra, 0 -13px 19px 2px $elevation-penumbra, 0 -5px 24px 4px $elevation-ambient +$shadow-up-14 ?= 0 -7px 9px -4px $elevation-umbra, 0 -14px 21px 2px $elevation-penumbra, 0 -5px 26px 4px $elevation-ambient +$shadow-up-15 ?= 0 -8px 9px -5px $elevation-umbra, 0 -15px 22px 2px $elevation-penumbra, 0 -6px 28px 5px $elevation-ambient +$shadow-up-16 ?= 0 -8px 10px -5px $elevation-umbra, 0 -16px 24px 2px $elevation-penumbra, 0 -6px 30px 5px $elevation-ambient +$shadow-up-17 ?= 0 -8px 11px -5px $elevation-umbra, 0 -17px 26px 2px $elevation-penumbra, 0 -6px 32px 5px $elevation-ambient +$shadow-up-18 ?= 0 -9px 11px -5px $elevation-umbra, 0 -18px 28px 2px $elevation-penumbra, 0 -7px 34px 6px $elevation-ambient +$shadow-up-19 ?= 0 -9px 12px -6px $elevation-umbra, 0 -19px 29px 2px $elevation-penumbra, 0 -7px 36px 6px $elevation-ambient +$shadow-up-20 ?= 0 -10px 13px -6px $elevation-umbra, 0 -20px 31px 3px $elevation-penumbra, 0 -8px 38px 7px $elevation-ambient +$shadow-up-21 ?= 0 -10px 13px -6px $elevation-umbra, 0 -21px 33px 3px $elevation-penumbra, 0 -8px 40px 7px $elevation-ambient +$shadow-up-22 ?= 0 -10px 14px -6px $elevation-umbra, 0 -22px 35px 3px $elevation-penumbra, 0 -8px 42px 7px $elevation-ambient +$shadow-up-23 ?= 0 -11px 14px -7px $elevation-umbra, 0 -23px 36px 3px $elevation-penumbra, 0 -9px 44px 8px $elevation-ambient +$shadow-up-24 ?= 0 -11px 15px -7px $elevation-umbra, 0 -24px 38px 3px $elevation-penumbra, 0 -9px 46px 8px $elevation-ambient +$generic-border-radius ?= 4px +$generic-hover-transition ?= .3s cubic-bezier(.25, .8, .5, 1) +$typography-font-family ?= 'Roboto', '-apple-system', 'Helvetica Neue', Helvetica, Arial, sans-serif +$min-line-height ?= 1.12 +$button-border-radius ?= 3px +$button-padding ?= 4px 16px +$button-dense-padding ?= .285em +$button-transition ?= $generic-hover-transition +$button-font-size ?= 14px +$button-line-height ?= 1.715em +$button-font-weight ?= 500 +$button-shadow ?= $shadow-2 +$button-shadow-active ?= $shadow-5 +$button-rounded-border-radius ?= 28px +$button-push-border-radius ?= 7px +$chat-message-received-color ?= black +$chat-message-received-bg ?= $green-4 +$chat-message-sent-color ?= black +$chat-message-sent-bg ?= $grey-4 +$chat-message-avatar-size ?= 48px +$chat-message-border-radius ?= $generic-border-radius +$chat-message-distance ?= 8px +$chat-message-text-padding ?= 8px +$item-base-color ?= $grey-5 +$editor-border-color ?= $separator-color +$editor-border-dark-color ?= $separator-dark-color +$editor-content-padding ?= 10px +$editor-content-min-height ?= 10em +$editor-toolbar-padding ?= 4px +$editor-hr-color ?= $editor-border-color +$editor-hr-dark-color ?= $editor-border-dark-color +$editor-button-gutter ?= 4px +$table-transition ?= $generic-hover-transition +$table-border-radius ?= $generic-border-radius +$table-box-shadow ?= $shadow-2 +$table-border-color ?= $separator-color +$table-hover-background ?= rgba(0, 0, 0, .03) +$table-selected-background ?= rgba(0, 0, 0, .06) +$table-dark-border-color ?= $separator-dark-color +$table-dark-hover-background ?= rgba(255, 255, 255, .07) +$table-dark-selected-background ?= rgba(255, 255, 255, .1) +$toolbar-min-height ?= 50px +$toolbar-padding ?= 0 12px +$toolbar-inset-size ?= 58px +$toolbar-title-font-size ?= 21px +$toolbar-title-font-weight ?= normal +$toolbar-title-letter-spacing ?= .01em +$toolbar-title-padding ?= 0 12px +$layout-border ?= 1px solid $separator-color +$layout-shadow ?= 0 0 10px 2px rgba(0,0,0,0.2), 0 0px 10px rgba(0,0,0,0.24) +$menu-background ?= white +$menu-box-shadow ?= $shadow-2 +$menu-max-width ?= 95vw +$rating-grade-color ?= $yellow +$rating-shadow ?= 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24) +$tooltip-color ?= #fafafa +$tooltip-background ?= $grey-7 +$tooltip-padding ?= 6px 10px +$tooltip-border-radius ?= $generic-border-radius +$tooltip-fontsize ?= 10px +$tooltip-mobile-padding ?= 8px 16px +$tooltip-mobile-fontsize ?= 14px +$option-focus-transition ?= .22s cubic-bezier(0,0,.2,1) +$input-font-size ?= 14px +$input-text-color ?= rgba(0,0,0,.87) +$input-label-color ?= rgba(0,0,0,.6) +$input-autofill-color ?= inherit +$img-width ?= 100% +$img-background-repeat ?= no-repeat +$img-loading-font-size ?= 50px +$img-content-position ?= absolute +$img-content-padding ?= 16px +$img-content-color ?= white +$img-content-background ?= rgba(0, 0, 0, .47) +*, *:before, *:after + box-sizing: inherit + -webkit-tap-highlight-color: transparent + -moz-tap-highlight-color: transparent +html, body, #q-app + width: 100% + direction: ltr +body.platform-ios.within-iframe, body.platform-ios.within-iframe #q-app + width: 100px + min-width: 100% +html, body + margin: 0 + box-sizing: border-box +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary + display: block +/* + * line 1: Remove the bottom border in Firefox 39-. + * lines 2,3: Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] + border-bottom: none + text-decoration: underline + text-decoration: underline dotted +img + border-style: none +svg:not(:root) + overflow: hidden +/* + * line 1: Correct the inheritance and scaling of font size in all browsers. + * line 2: Correct the odd `em` font sizing in all browsers. + */ +code, kbd, pre, samp + font-family: monospace, monospace + font-size: 1em +/* + * lines 1,2: Add the correct box sizing in Firefox. + * line 3: Show the overflow in Edge and IE. + */ +hr + box-sizing: content-box + height: 0 + overflow: visible +button, +input, +optgroup, +select, +textarea + font: inherit + font-family: inherit + margin: 0 +optgroup + font-weight: bold +/* + * Show the overflow in IE. + * input: Show the overflow in Edge. + * select: Show the overflow in Edge, Firefox, and IE. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * select: Remove the inheritance of text transform in Firefox. + */ +button, +input, +select + overflow: visible + text-transform: none +button::-moz-focus-inner, input::-moz-focus-inner + border: 0 + padding: 0 +button:-moz-focusring, input:-moz-focusring + outline: 1px dotted ButtonText +fieldset + padding: 0.35em 0.75em 0.625em +/** + * lines 1,3,4,6: Correct the text wrapping in Edge and IE. + * line 2: Correct the color inheritance from `fieldset` elements in IE. + * line 5: Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend + box-sizing: border-box + color: inherit + display: table + max-width: 100% + padding: 0 + white-space: normal +progress + vertical-align: baseline +textarea + overflow: auto +input[type='search']::-webkit-search-cancel-button, +input[type='search']::-webkit-search-decoration + -webkit-appearance: none +.q-icon + line-height: 1 + width: 1em + height: 1em + flex-shrink: 0 + letter-spacing: normal + text-transform: none + white-space: nowrap + word-wrap: normal + direction: ltr + text-align: center + position: relative + box-sizing: content-box + fill: currentColor + &:before, &:after + width: 100% + height: 100% + display: flex !important + align-items: center + justify-content: center + > svg, + > img + width: 100% + height: 100% +.q-icon, +.material-icons, +.material-icons-outlined, +.material-icons-round, +.material-icons-sharp, +.material-symbols-outlined, +.material-symbols-rounded, +.material-symbols-sharp + user-select: none + cursor: inherit + font-size: inherit + display: inline-flex + align-items: center + justify-content: center + vertical-align: middle +.q-panel + height 100% + width 100% + > div + height 100% + width 100% +.q-panel-parent + overflow hidden + position relative +.q-loading-bar + position: fixed + z-index: $z-max + transition: transform .5s cubic-bezier(0,0,.2,1), opacity .5s + background: $red + &--top + left: 0 /* rtl:ignore */ + right: 0 /* rtl:ignore */ + top: 0 + width: 100% + &--bottom + left: 0 /* rtl:ignore */ + right: 0 /* rtl:ignore */ + bottom: 0 + width: 100% + &--right + top: 0 + bottom: 0 + right: 0 + height: 100% + &--left + top: 0 + bottom: 0 + left: 0 + height: 100% +.q-avatar + position: relative + vertical-align: middle + display: inline-block + border-radius: 50% + font-size: 48px + height: 1em + width: 1em + &__content + font-size: .5em + line-height: .5em + &__content, img:not(.q-icon) + border-radius: inherit + height: inherit + width: inherit + &--square + border-radius: 0 +.q-badge + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + padding: 2px 6px + border-radius: $generic-border-radius + font-size: 12px + line-height: 12px + min-height: 12px + font-weight: normal + vertical-align: baseline + &--single-line + white-space: nowrap + &--multi-line + word-break: break-all + word-wrap: break-word + &--floating + position: absolute + top: -4px + right: -3px + cursor: inherit + &--transparent + opacity: .8 + &--outline + background-color: transparent + border: 1px solid currentColor + &--rounded + border-radius: 1em +.q-banner + min-height: 54px + padding: 8px 16px + &--top-padding + padding-top: 14px + &__avatar + min-width: 1px !important + > .q-avatar + font-size: 46px + > .q-icon + font-size: 40px + &__avatar:not(:empty) + &__content + padding-left: 16px + &__actions + &.col-auto + padding-left: 16px + &.col-all + .q-btn-item + margin: 4px 0 0 4px + &--dense + min-height: 32px + padding: 8px + &.q-banner--top-padding + padding-top: 12px + .q-banner__avatar + > .q-avatar, > .q-icon + font-size: 28px + .q-banner__avatar:not(:empty) + .q-banner__content + padding-left: 8px + .q-banner__actions + &.col-auto + padding-left: 8px +.q-bar + background: rgba(0,0,0,.2) + > .q-icon + margin-left: 2px + > div, > div + .q-icon + margin-left: 8px + > .q-btn + margin-left: 2px + > .q-icon:first-child, > .q-btn:first-child, > div:first-child + margin-left: 0 + &--standard + padding: 0 12px + height: 32px + font-size: 18px + > div + font-size: 16px + .q-btn + font-size: 11px + &--dense + padding: 0 8px + height: 24px + font-size: 14px + .q-btn + font-size: 8px + &--dark + background: rgba(255,255,255,.15) +@media (prefers-color-scheme: dark) + .q-bar--dark-auto + background: rgba(255,255,255,.15) +.q-breadcrumbs + &__el + color: inherit + &__el-icon + font-size: 125% + &--with-label + margin-right: 8px +[dir=rtl] .q-breadcrumbs__separator .q-icon + transform: scaleX(-1) /* rtl:ignore */ +.q-btn + display: inline-flex + flex-direction: column + align-items: stretch + position: relative + outline: 0 + border: 0 + vertical-align: middle + padding: 0 + font-size: $button-font-size + line-height: $button-line-height + text-decoration: none + color: inherit + background: transparent + font-weight: $button-font-weight + text-transform: uppercase + text-align: center + width: auto + height: auto + .q-icon, .q-spinner + font-size: $button-line-height + &.disabled + opacity: .7 !important + &__wrapper + padding: $button-padding + min-height: 2.572em + border-radius: inherit + width: 100% + height: 100% + &:before + content: '' + display: block + position: absolute + left: 0 + right: 0 + top: 0 + bottom: 0 + border-radius: inherit + box-shadow: $button-shadow + &--actionable + cursor: pointer + &.q-btn--standard + .q-btn__wrapper:before + + + + + transition: box-shadow $button-transition + &:active, + &.q-btn--active + .q-btn__wrapper:before + box-shadow: $button-shadow-active + &--no-uppercase + text-transform: none + &--rectangle + border-radius: $button-border-radius + &--outline + background: transparent !important + .q-btn__wrapper:before + border: 1px solid currentColor + &--push + border-radius: $button-push-border-radius + .q-btn__wrapper:before + border-bottom: 3px solid rgba(0,0,0,.15) + &.q-btn--actionable + transition: transform $button-transition + .q-btn__wrapper:before + transition: top $button-transition, bottom $button-transition, border-bottom-width $button-transition + &:active, + &.q-btn--active + transform: translateY(2px) + .q-btn__wrapper:before + border-bottom-width: 0 + &--rounded + border-radius: $button-rounded-border-radius + &--round + border-radius: 50% + .q-btn__wrapper + padding: 0 + min-width: 3em + min-height: 3em + &--flat, &--outline, &--unelevated + .q-btn__wrapper:before + box-shadow: none + &--dense + .q-btn__wrapper + padding: $button-dense-padding + min-height: 2em + &.q-btn--round + .q-btn__wrapper + padding: 0 + min-height: 2.4em + min-width: 2.4em + .on-left + margin-right: 6px + .on-right + margin-left: 6px + &--fab, &--fab-mini + .q-icon + font-size: 24px + &--fab + .q-icon + margin: auto + .q-btn__wrapper + padding: 16px + min-height: 56px + min-width: 56px + &--fab-mini .q-btn__wrapper + padding: 8px + min-height: 40px + min-width: 40px + + &__content + transition: opacity .3s + z-index: 0 + &--hidden + opacity: 0 + pointer-events: none + &__progress + border-radius: inherit + z-index: 0 + &-indicator + z-index: -1 + transform: translateX(-100%) + background: rgba(255,255,255,.25) + &--dark + .q-btn__progress-indicator + background: rgba(0,0,0,.2) + &--flat, &--outline + .q-btn__progress-indicator + opacity: 0.2 + background: currentColor +.q-btn-dropdown + &--split .q-btn-dropdown__arrow-container + &.q-btn--outline + border-left: 1px solid currentColor + &:not(.q-btn--outline) + border-left: 1px solid rgba(255,255,255,.3) + .q-btn__wrapper + padding: 0 4px + &--simple * + .q-btn-dropdown__arrow + margin-left: 8px + &__arrow + transition: transform .28s + &--current + flex-grow: 1 +.q-btn-group + border-radius: $button-border-radius + box-shadow: $button-shadow + vertical-align: middle + > .q-btn-item + border-radius: inherit + align-self: stretch + .q-btn__wrapper:before + box-shadow: none + .q-badge--floating + right: 0 + > .q-btn-group + box-shadow: none + &:first-child + > .q-btn:first-child + border-top-left-radius: inherit + border-bottom-left-radius: inherit + &:last-child + > .q-btn:last-child + border-top-right-radius: inherit + border-bottom-right-radius: inherit + > .q-btn-group:not(:first-child) > .q-btn:first-child + .q-btn__wrapper:before + border-left: 0 + > .q-btn-group:not(:last-child) > .q-btn:last-child + .q-btn__wrapper:before + border-right: 0 + > .q-btn-item:not(:last-child) + border-top-right-radius: 0 + border-bottom-right-radius: 0 + > .q-btn-item:not(:first-child) + border-top-left-radius: 0 + border-bottom-left-radius: 0 + > .q-btn-item.q-btn--standard + .q-btn__wrapper:before + z-index: -1 + &--push + border-radius: $button-push-border-radius + > .q-btn--push + &.q-btn--actionable + transform: none + .q-btn__wrapper + transition: margin-top $button-transition, margin-bottom $button-transition, box-shadow $button-transition + &:active, + &.q-btn--active + .q-btn__wrapper + margin-top: 2px + margin-bottom: -2px + &--rounded + border-radius: $button-rounded-border-radius + &--square + border-radius: 0 + &--flat, &--outline, &--unelevated + box-shadow: none + &--outline + > .q-separator + display: none + > .q-btn-item + .q-btn-item + .q-btn__wrapper:before + border-left: 0 + > .q-btn-item:not(:last-child) + .q-btn__wrapper:before + border-right: 0 + &--stretch + align-self: stretch + border-radius: 0 + &--glossy + > .q-btn-item + background-image: linear-gradient(to bottom, rgba(#fff, .3), rgba(#fff, 0) 50%, rgba(#000, .12) 51%, rgba(#000, .04)) !important + &--spread + > .q-btn-group + display: flex !important + > .q-btn-item, > .q-btn-group > .q-btn-item:not(.q-btn-dropdown__arrow-container) + width: auto + min-width: 0 + max-width: 100% + flex: 10000 1 0% +.q-btn-toggle + position: relative +.q-card + box-shadow: $shadow-2 + border-radius: $generic-border-radius + vertical-align: top + position: relative + > div, + > img + &:first-child + border-top: 0 + border-top-left-radius: inherit + border-top-right-radius: inherit + > div, + > img + &:last-child + border-bottom: 0 + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + > div, + > img + &:not(:first-child) + border-top-left-radius: 0 + border-top-right-radius: 0 + > div, + > img + &:not(:last-child) + border-bottom-left-radius: 0 + border-bottom-right-radius: 0 + > div + border-left: 0 + border-right: 0 + box-shadow: none + &--bordered + border: 1px solid $separator-color + &--dark + border-color: $separator-dark-color + &__section + position: relative + &--vert + padding: 16px + &--horiz + > div, + > img + &:first-child + border-top-left-radius: inherit + border-bottom-left-radius: inherit + &:last-child + border-top-right-radius: inherit + border-bottom-right-radius: inherit + &:not(:first-child) + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:not(:last-child) + border-top-right-radius: 0 + border-bottom-right-radius: 0 + > div + border-top: 0 + border-bottom: 0 + box-shadow: none + &__actions + padding: 8px + align-items: center + .q-btn__wrapper + padding: 0 8px + &--horiz + > .q-btn-item + .q-btn-item, + > .q-btn-group + .q-btn-item, + > .q-btn-item + .q-btn-group + margin-left: 8px + &--vert + > .q-btn-item.q-btn--round + align-self: center + > .q-btn-item + .q-btn-item, + > .q-btn-group + .q-btn-item, + > .q-btn-item + .q-btn-group + margin-top: 4px + > .q-btn-group > .q-btn-item + flex-grow: 1 + > img + display: block + width: 100% + max-width: 100% + border: 0 +@media (prefers-color-scheme: dark) + .q-card--dark-auto + border-color: $separator-dark-color +.q-carousel + height: 400px + &__slide + min-height: 100% + background-size: cover + background-position: 50% + &__slide, .q-carousel--padding + padding: 16px + &__slides-container + height: 100% + &__control + color: $dark-text + color: var(--q-color-dark-text) + &__arrow + pointer-events: none + .q-icon + font-size: 28px + .q-btn + pointer-events: all + &__prev-arrow--horizontal, + &__next-arrow--horizontal + top: 16px + bottom: 16px + &__prev-arrow--horizontal + left: 16px + &__next-arrow--horizontal + right: 16px + &__prev-arrow--vertical, + &__next-arrow--vertical + left: 16px + right: 16px + &__prev-arrow--vertical + top: 16px + &__next-arrow--vertical + bottom: 16px + &__navigation + &--top, + &--bottom + left: 16px + right: 16px + overflow-x: auto + overflow-y: hidden + &--top + top: 16px + &--bottom + bottom: 16px + &--left, + &--right + top: 16px + bottom: 16px + overflow-x: hidden + overflow-y: auto + > .q-carousel__navigation-inner + flex-direction: column + &--left + left: 16px + &--right + right: 16px + &-inner + flex: 1 1 auto + .q-btn + margin: 6px 4px + .q-btn__wrapper + padding: 5px + &__navigation-icon--inactive + opacity: .7 + .q-carousel__thumbnail + margin: 2px + height: 50px + width: auto + display: inline-block + cursor: pointer + border: 1px solid transparent + border-radius: $generic-border-radius + vertical-align: middle + opacity: .7 + transition: opacity .3s + .q-carousel__thumbnail:hover, + .q-carousel__thumbnail--active + opacity: 1 + .q-carousel__thumbnail--active + border-color: currentColor + cursor: default + &--navigation-top, + &--arrows-vertical + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-top: 60px + &--navigation-bottom, + &--arrows-vertical + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-bottom: 60px + &--navigation-left, + &--arrows-horizontal + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-left: 60px + &--navigation-right, + &--arrows-horizontal + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-right: 60px + &.fullscreen + height: 100% +.q-message-name, .q-message-stamp, .q-message-label + font-size: small +.q-message-label + margin: (3 * $chat-message-distance) 0 + text-align: center +.q-message-stamp + color: inherit + margin-top: 4px + opacity: .6 + display: none +.q-message-avatar + border-radius: 50% + width: $chat-message-avatar-size + height: $chat-message-avatar-size + min-width: $chat-message-avatar-size +.q-message + margin-bottom: $chat-message-distance + &:first-child .q-message-label + margin-top: 0 +.q-message-avatar--received + margin-right: 8px +.q-message-text--received + color: $chat-message-received-bg + border-radius: $chat-message-border-radius $chat-message-border-radius $chat-message-border-radius 0 + &:last-child:before + right: 100% + border-right: 0 solid transparent + border-left: 8px solid transparent + border-bottom: 8px solid currentColor +.q-message-text-content--received + color: $chat-message-received-color +.q-message-name--sent + text-align: right +.q-message-avatar--sent + margin-left: 8px +.q-message-container--sent + flex-direction: row-reverse +.q-message-text--sent + color: $chat-message-sent-bg + border-radius: $chat-message-border-radius $chat-message-border-radius 0 $chat-message-border-radius + &:last-child:before + left: 100% + border-left: 0 solid transparent + border-right: 8px solid transparent + border-bottom: 8px solid currentColor +.q-message-text-content--sent + color: $chat-message-sent-color +.q-message-text + background: currentColor + padding: $chat-message-text-padding + line-height: max(1.2, $min-line-height) + word-break: break-word + position: relative + & + & + margin-top: 3px + &:last-child + min-height: $chat-message-avatar-size + .q-message-stamp + display: block + &:before + content: '' + position: absolute + bottom: 0 + width: 0 + height: 0 +$checkbox-transition = .22s cubic-bezier(0,0,.2,1) 0ms +.q-checkbox + vertical-align: middle + &__native + width: 1px + height: 1px + &__bg, + &__icon-container + user-select: none + &__bg + top: 25% + left: 25% + width: 50% + height: 50% + border: 2px solid currentColor + border-radius: 2px + transition: background $checkbox-transition + -webkit-print-color-adjust: exact + &__icon + color: currentColor + font-size: .5em + &__svg + color: $dark-text + color: var(--q-color-dark-text) + &__truthy + stroke: currentColor + stroke-width: 3.12px + stroke-dashoffset: 29.78334 + stroke-dasharray: 29.78334 + &__indet + fill: currentColor + transform-origin: 50% 50% + transform: rotate(-280deg) scale(0) + &__inner + font-size: 40px + width: 1em + min-width: 1em + height: 1em + outline: 0 + border-radius: 50% + color: rgba(0,0,0,.54) + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) + .q-checkbox__bg + background: currentColor + &--truthy + path + stroke-dashoffset: 0 + transition: stroke-dashoffset .18s cubic-bezier(.4,0,.6,1) 0ms + &--indet + .q-checkbox__indet + transform: rotate(0) scale(1) + transition: transform $checkbox-transition + &.disabled + opacity: .75 !important + &--dark + .q-checkbox__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) + &--dense + .q-checkbox__inner + width: .5em + min-width: .5em + height: .5em + .q-checkbox__bg + left: 5% + top: 5% + width: 90% + height: 90% + .q-checkbox__label + padding-left: .5em + &.reverse .q-checkbox__label + padding-left: 0 + padding-right: .5em +body.desktop + .q-checkbox:not(.disabled) + .q-checkbox__inner:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $option-focus-transition + &:focus, + &:hover + .q-checkbox__inner:before + transform: scale3d(1, 1, 1) + .q-checkbox--dense:not(.disabled) + &:focus, + &:hover + .q-checkbox__inner:before + transform: scale3d(1.4, 1.4, 1) +@media (prefers-color-scheme: dark) + .q-checkbox--dark-auto + .q-checkbox__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) +$chip-height = 2em +.q-chip + vertical-align: middle + border-radius: 16px + outline: 0 + position: relative + height: $chip-height + max-width: 100% + margin: 4px + background: $chip-background-light + background: var(--q-color-chip-background-light) + color: $light-text + color: var(--q-color-light-text) + font-size: 14px + padding: .5em .9em + &--dark + background: $chip-background-dark + background: var(--q-color-chip-background-dark) + color: $dark-text + color: var(--q-color-dark-text) + &--colored, + &--dark + .q-chip__icon + color: inherit + &--outline + background: transparent !important + border: 1px solid currentColor + .q-avatar + height: calc(1em - 2px) + width: calc(1em - 2px) + .q-avatar + font-size: $chip-height + margin-left: -.45em + margin-right: .2em + border-radius: 16px + ~ .q-avatar, + &--right + margin-left: .2em + margin-right: -.45em + &--selected + .q-avatar:first-child:not(.q-avatar--right) + display: none + &__icon + color: rgba(0,0,0,.54) + font-size: 1.5em + margin: -.2em + &--left + margin-right: .2em + &--right + margin-left: .2em + &--remove + margin-left: .1em + margin-right: -.5em + opacity: .6 + outline: 0 + &:hover, + &:focus + opacity: 1 + &__content + white-space: nowrap + &--dense + border-radius: 12px + padding: 0 .4em + height: 1.5em + .q-avatar + font-size: 1.5em + margin-left: -.27em + margin-right: .1em + border-radius: 12px + ~ .q-avatar, + &--right + margin-left: .1em + margin-right: -.268em + .q-chip__icon + font-size: 1.25em + &--left + margin-right: .195em + &--remove + margin-right: -.25em + &--square + border-radius: $generic-border-radius + .q-avatar + border-radius: $generic-border-radius 0 0 $generic-border-radius + ~ .q-avatar, + &--right + border-radius: 0 $generic-border-radius $generic-border-radius 0 +body.desktop .q-chip--clickable:focus + box-shadow: $shadow-1 +@media (prefers-color-scheme: dark) + .q-chip--dark-auto + background: $chip-background-dark + background: var(--q-color-chip-background-dark) + color: $dark-text + color: var(--q-color-dark-text) + .q-chip__icon + color: inherit +.q-circular-progress + display: inline-block + position: relative + vertical-align: middle + width: 1em + height: 1em + line-height: 1 + &.q-focusable + border-radius: 50% + &__svg + width: 100% + height: 100% + &__text + font-size: .25em + &--indeterminate + .q-circular-progress__svg + transform-origin: 50% 50% + animation: q-spin 2s linear infinite /* rtl:ignore */ + .q-circular-progress__circle + stroke-dasharray: 1 400 + stroke-dashoffset: 0 + animation: q-circular-progress-circle 1.5s ease-in-out infinite /* rtl:ignore */ +@keyframes q-circular-progress-circle + 0% + stroke-dasharray: 1, 400 + stroke-dashoffset: 0 + 50% + stroke-dasharray: 400, 400 + stroke-dashoffset: -100 + 100% + stroke-dasharray: 400, 400 + stroke-dashoffset: -300 +.q-color-picker + overflow: hidden + max-width: 350px + vertical-align: top + min-width: 180px + border-radius: $generic-border-radius + box-shadow: $shadow-2 + .q-tab + padding: 0 !important + &--bordered + border: 1px solid $separator-color + &__header + &-tabs + height: 32px + &-banner + height: 36px + input + line-height: 24px + border: 0 + .q-tab + min-height: 32px !important + height: 32px !important + &--inactive + background: linear-gradient(to top, rgba(0,0,0,.3) 0%, rgba(0,0,0,.15) 25%, rgba(0,0,0,.1)) + &__error-icon + bottom: 2px + right: 2px + font-size: 24px + opacity: 0 + transition: opacity .3s ease-in + &__header-content + position: relative + background: $light-page + background: var(--q-color-light-page) + &--light + color: $light-text + color: var(--q-color-light-text) + &--dark + color: $dark-text + color: var(--q-color-dark-text) + .q-tab--inactive + &:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + background: rgba(255,255,255,.2) + &__header-banner + height: 36px + &__header-bg + background: $light-page + background: var(--q-color-light-page) + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==') !important + &__footer + height: 36px + .q-tab + min-height: 36px !important + height: 36px !important + &--inactive + background: linear-gradient(to bottom, rgba(0,0,0,.3) 0%, rgba(0,0,0,.15) 25%, rgba(0,0,0,.1)) + + &__spectrum + width: 100% + height: 100% + &__spectrum-tab + padding: 0 !important + &__spectrum-white + background: linear-gradient(to right, #fff, rgba(255,255,255,0)) + &__spectrum-black + background: linear-gradient(to top, #000, rgba(0,0,0,0)) + &__spectrum-circle + width: 10px + height: 10px + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), 0 0 1px 2px rgba(0,0,0,.4) + border-radius: 50% + transform: translate(-5px, -5px) + &__hue .q-slider__track + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important + opacity: 1 + &__alpha + .q-slider__track-container + padding-top: 0 + .q-slider__track:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: inherit + background: linear-gradient(90deg, rgba(255,255,255,0), $grey-7) + &__sliders + padding: 0 16px + .q-slider__thumb + color: $grey-9 + path + stroke-width: 2px + fill: transparent + .q-slider--active path + stroke-width: 3px + + &__tune-tab + .q-slider + margin-left: 18px + margin-right: 18px + input + font-size: 11px + border: 1px solid $grey-4 + border-radius: $generic-border-radius + width: 3.5em + + &__palette-tab + padding: 0 !important + &__palette-rows + &--editable .q-color-picker__cube + cursor: pointer + &__cube + padding-bottom: 10% + width: 10% !important + + input + color: inherit + background: transparent + outline: 0 + text-align: center + .q-tabs + overflow: hidden + .q-tab--active + box-shadow: 0 0 14px 3px rgba(0,0,0,.2) + .q-focus-helper + display: none + .q-tab__indicator + display: none + .q-tab-panels + background: inherit + &--dark + .q-color-picker__tune-tab input + border: 1px solid alpha($dark-text, .3) + .q-slider + color: $grey-1 +@media (prefers-color-scheme: dark) + .q-color-picker--dark-auto + .q-color-picker__tune-tab input + border: 1px solid alpha($dark-text, .3) + .q-slider + color: $grey-1 +.q-date + display: inline-flex + box-shadow: $shadow-2 + border-radius: $generic-border-radius + background: $light-page + background: var(--q-color-light-page) + width: 290px + min-width: 290px + max-width: 100% + &--bordered + border: 1px solid $separator-color + &__header + border-top-left-radius: inherit + color: $dark-text + color: var(--q-color-dark-text) + background-color: $primary + background-color: var(--q-color-primary) + padding: 16px + &__actions + padding: 0 16px 16px + &__content .q-btn + font-weight: normal + &__header-link + opacity: .64 + outline: 0 + transition: opacity .3s ease-out + &--active, &:hover, &:focus + opacity: 1 + &__header-subtitle + font-size: 14px + line-height: 1.75 + letter-spacing: .00938em + &__header-title-label + font-size: 24px + line-height: 1.2 + letter-spacing: .00735em + &__view + height: 100% + width: 100% + min-height: 290px + padding: 16px + &__navigation + height: 12.5% + > div:first-child + width: 8% + min-width: 24px + justify-content: flex-end + > div:last-child + width: 8% + min-width: 24px + justify-content: flex-start + &__calendar-weekdays + height: 12.5% + > div + opacity: .38 + font-size: 12px + &__calendar-item + display: inline-flex + align-items: center + justify-content: center + vertical-align: middle + width: 14.285% !important + height: 12.5% !important + position: relative + padding: 1px + &:after + content: '' + position: absolute + pointer-events: none + top: 1px + right: 0 + bottom: 1px + left: 0 + border-style: dashed + border-color: transparent + border-width: 1px + > div, button + width: 30px + height: 30px + border-radius: 50% + > div + line-height: 30px + text-align: center + > button + line-height: 22px + &--out + opacity: .18 + &--fill + visibility: hidden + min-height: 32px + &.q-date + &__range, &__range-from, &__range-to + &:before + opacity: .05 + &__range, &__range-from, &__range-to + &:before + content: '' + background-color: currentColor + position: absolute + top: 1px + bottom: 1px + left: 0 + right: 0 + opacity: .3 + pointer-events: none + &__range + &:nth-child(7n-6) + &:before + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:nth-child(7n) + &:before + border-top-right-radius: 0 + border-bottom-right-radius: 0 + &__range-from + &:before + left: calc(50% - 15px) + border-top-left-radius: $button-rounded-border-radius + border-bottom-left-radius: $button-rounded-border-radius + &__range-to + &:before + right: calc(50% - 15px) + border-top-right-radius: $button-rounded-border-radius + border-bottom-right-radius: $button-rounded-border-radius + &__edit-range + &:after + border-color: currentColor transparent + &:nth-child(7n-6) + &:after + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:nth-child(7n) + &:after + border-top-right-radius: 0 + border-bottom-right-radius: 0 + &-from, &-from-to + &:after + left: 4px + border-left-color: currentColor + border-top-color: currentColor + border-bottom-color: currentColor + border-top-left-radius: $button-rounded-border-radius + border-bottom-left-radius: $button-rounded-border-radius + &-to, &-from-to + &:after + right: 4px + border-right-color: currentColor + border-top-color: currentColor + border-bottom-color: currentColor + border-top-right-radius: $button-rounded-border-radius + border-bottom-right-radius: $button-rounded-border-radius + &__calendar-days-container + height: 75% + min-height: 192px + &__calendar-days > div + height: 16.66% !important + &__event + position: absolute + bottom: 2px + left: 50% + height: 5px + width: 8px + border-radius: 5px + background-color: $secondary + background-color: var(--q-color-secondary) + transform: translate3d(-50%, 0, 0) + &__today + box-shadow: 0 0 1px 0 currentColor + &__years-content + padding: 0 8px + &__years-item, &__months-item + flex: 0 0 33.3333% + &.disabled, &--readonly + .q-date__header, .q-date__content + pointer-events: none + &--readonly .q-date__navigation + display: none + &--portrait + flex-direction: column + &--portrait-standard + .q-date__content + height: calc(100% - 86px) + .q-date__header + border-top-right-radius: inherit + height: 86px + .q-date__header-title + align-items: center + height: 30px + &--portrait-minimal + .q-date__content + height: 100% + &--landscape + flex-direction: row + align-items: stretch + min-width: 420px + > div + display: flex + flex-direction: column + .q-date__content + height: 100% + &--landscape-standard + min-width: 420px + .q-date__header + border-bottom-left-radius: inherit + min-width: 110px + width: 110px + .q-date__header-title + flex-direction: column + .q-date__header-today + margin-top: 12px + margin-left: -8px + &--landscape-minimal + width: 310px + &--dark + border-color: $separator-dark-color +@media (prefers-color-scheme: dark) + .q-date--dark-auto + border-color: $separator-dark-color +.q-dialog + contain: layout size + contain: layout size style + width: 100vw + &__title + font-size: 1.25rem + font-weight: 500 + line-height: 2rem + letter-spacing: .0125em + &__progress + font-size: 4rem + &__inner + outline: 0 + > div + pointer-events: all + overflow: auto + -webkit-overflow-scrolling: touch + will-change: scroll-position + border-radius: $generic-border-radius + box-shadow: $shadow-4 + &--square > div + border-radius: 0 !important + > .q-card + > .q-card__actions .q-btn--rectangle .q-btn__wrapper + min-width: 64px + &--minimized + padding: 24px + > div + max-height: calc(100vh - 48px) + &--maximized + > div + height: 100% + width: 100% + max-height: 100vh + max-width: 100vw + border-radius: 0 !important + &--top, &--bottom + padding-top: 0 !important + padding-bottom: 0 !important + &--right, &--left + padding-right: 0 !important + padding-left: 0 !important + &--left, &--top + &:not([data-q-portal-animating]) > div + border-top-left-radius: 0 + &--right, &--top + &:not([data-q-portal-animating]) > div + border-top-right-radius: 0 + &--left, &--bottom + &:not([data-q-portal-animating]) > div + border-bottom-left-radius: 0 + &--right, &--bottom + &:not([data-q-portal-animating]) > div + border-bottom-right-radius: 0 + &--fullwidth + > div + width: 100% !important + max-width: 100% !important + &--fullheight + > div + height: 100% !important + max-height: 100% !important + &__backdrop + z-index: -1 + pointer-events: all + outline: 0 + opacity: .4 + background: $backdrop-background + background: var(--q-color-backdrop-background) +html[dir=rtl] + .q-dialog + right: auto +body.mobile + .q-dialog + contain: size + contain: size style +body.desktop + .q-dialog--modal + height: 100vh +body.platform-ios + .q-dialog__inner--minimized > div + max-height: calc(100vh - 164px) +body.platform-android + .q-dialog__inner--minimized > div + max-height: calc(100% - 48px) +body.q-ios-padding .q-dialog__inner + padding-top: $ios-statusbar-height !important + padding-top: env(safe-area-inset-top) !important + padding-bottom: env(safe-area-inset-bottom) !important + > div + + max-height: "calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important" +@media (max-width: $breakpoint-xs-max) + .q-dialog__inner + &--top, &--bottom + padding-left: 0 + padding-right: 0 + > div + width: 100% !important +@media (min-width: $breakpoint-sm-min) + .q-dialog__inner--minimized > div + max-width: 560px +.q-bottom-sheet + padding-bottom: 8px + &__avatar + border-radius: 50% + &--list + width: 400px + .q-icon, img + font-size: 24px + width: 24px + height: 24px + &--grid + width: 700px + .q-bottom-sheet__item + padding: 8px + text-align: center + min-width: 100px + .q-icon, img, .q-bottom-sheet__empty-icon + font-size: 48px + width: 48px + height: 48px + margin-bottom: 8px + .q-separator + margin: 12px 0 + &__item + flex: 0 0 33.3333% +@media (min-width: $breakpoint-sm-min) + .q-bottom-sheet__item + flex: 0 0 25% +.q-dialog-plugin + width: 400px + &__form + max-height: 50vh + .q-card__section + .q-card__section + padding-top: 0 + &--progress + text-align: center +.q-editor + border: 1px solid $editor-border-color + border-radius: $generic-border-radius + &.disabled + border-style: dashed + &.fullscreen + max-height: 100% + > div:first-child, + &__toolbars-container, + &__toolbars-container > div:first-child + border-top-left-radius: inherit + border-top-right-radius: inherit + &__toolbars-container + max-width: 100% + &__content + outline: 0 + padding: $editor-content-padding + min-height: $editor-content-min-height + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + overflow: auto + max-width: 100% + pre + white-space: pre-wrap + hr + border: 0 + outline: 0 + margin: 1px + height: 1px + background: $editor-hr-color + &:empty:not(:focus):before + content: attr(placeholder) + opacity: .7 + &__toolbar + border-bottom: 1px solid $editor-border-color + min-height: 32px + .q-btn + margin: $editor-button-gutter + &__toolbar-group + position: relative + margin: 0 $editor-button-gutter + & + & + &:before + content: '' + position: absolute + left: (- $editor-button-gutter) + top: $editor-button-gutter + bottom: $editor-button-gutter + width: 1px + background: $editor-border-color + &__link-input + color: inherit + text-decoration: none + text-transform: none + border: none + border-radius: 0 + background: none + outline: 0 + &--flat + &, .q-editor__toolbar + border: 0 + &--dense + .q-editor__toolbar-group + display: flex + align-items: center + flex-wrap: nowrap + &--dark + border-color: $editor-border-dark-color + .q-editor + &__content hr + background: $editor-hr-dark-color + &__toolbar + border-color: $editor-border-dark-color + .q-editor__toolbar-group + .q-editor__toolbar-group:before + background: $editor-border-dark-color +@media (prefers-color-scheme: dark) + .q-editor--dark-auto + border-color: $editor-border-dark-color + .q-editor + &__content hr + background: $editor-hr-dark-color + &__toolbar + border-color: $editor-border-dark-color + .q-editor__toolbar-group + .q-editor__toolbar-group:before + background: $editor-border-dark-color +.q-expansion-item + &__border + opacity: 0 + &__toggle-icon + position: relative + transition: transform .3s + &--rotated + transform: rotate(180deg) + &__toggle-focus + width: 1em !important + height: 1em !important + position: relative !important + & + .q-expansion-item__toggle-icon + margin-top: -1em + &--standard + &.q-expansion-item--expanded + > div > .q-expansion-item__border + opacity: 1 + &--popup + transition: padding .5s + > .q-expansion-item__container + border: 1px solid $separator-color + > .q-separator + display: none + &.q-expansion-item + &--collapsed + padding: 0 15px + &--expanded + padding: 15px 0 + & + & + padding-top: 0 + &.q-expansion-item--collapsed:not(:first-child) + > .q-expansion-item__container + border-top-width: 0 + &.q-expansion-item--expanded + &.q-expansion-item--collapsed + > .q-expansion-item__container + border-top-width: 1px + &__content > .q-card + box-shadow: none + border-radius: 0 + &:first-child > div > .q-expansion-item__border--top + opacity: 0 + &:last-child > div > .q-expansion-item__border--bottom + opacity: 0 + &--expanded + &--expanded + > div > .q-expansion-item__border--top + opacity: 0 + &--expanded .q-textarea--autogrow textarea + animation: q-expansion-done 0s +@keyframes q-expansion-done + 0% + --q-exp-done: 1 +.z-fab + z-index: $z-fab +.q-fab + position: relative + vertical-align: middle + > .q-btn + width: 100% + &--form-rounded + border-radius: $button-rounded-border-radius + &--form-square + border-radius: $generic-border-radius + &__icon, &__active-icon + transition: opacity .4s, transform .4s + &__icon + opacity: 1 + transform: rotate(0deg) + &__active-icon + opacity: 0 + transform: rotate(-180deg) + &__label + &--external + position: absolute + padding: 0 8px + transition: opacity .18s cubic-bezier(.65,.815,.735,.395) + &-hidden + opacity: 0 + pointer-events: none + &--external-left + top: 50% + left: -12px + transform: translate(-100%, -50%) + &--external-right + top: 50% + right: -12px + transform: translate(100%, -50%) + &--external-bottom + bottom: -12px + left: 50% + transform: translate(-50%, 100%) + &--external-top + top: -12px + left: 50% + transform: translate(-50%, -100%) + &--internal + padding: 0 + transition: font-size .12s cubic-bezier(.65,.815,.735,.395), max-height .12s cubic-bezier(.65,.815,.735,.395), opacity .07s cubic-bezier(.65,.815,.735,.395) + max-height: 30px + &-hidden + font-size: 0 + opacity: 0 + &-top + padding-bottom: .12em + &-bottom + padding-top: .12em + &-top, &-bottom + &.q-fab__label--internal-hidden + max-height: 0 + &-left + padding-left: .285em + padding-right: .571em + &-right + padding-right: .285em + padding-left: .571em + &__icon-holder + min-width: 24px + min-height: 24px + position: relative + &--opened + .q-fab__icon + transform: rotate(180deg) + opacity: 0 + .q-fab__active-icon + transform: rotate(0deg) + opacity: 1 + &__actions + position: absolute + opacity: 0 + transition: transform .18s ease-in, opacity .18s ease-in + pointer-events: none + align-items: center + justify-content: center + align-self: center + padding: 3px + .q-btn + margin: 5px + &--right + transform-origin: 0 50% + transform: scale(.4) translateX(-62px) + height: 56px + left: 100% + margin-left: 9px + &--left + transform-origin: 100% 50% + transform: scale(.4) translateX(62px) + height: 56px + right: 100% + margin-right: 9px + flex-direction: row-reverse + &--up + transform-origin: 50% 100% + transform: scale(.4) translateY(62px) + width: 56px + bottom: 100% + margin-bottom: 9px + flex-direction: column-reverse + &--down + transform-origin: 50% 0 + transform: scale(.4) translateY(-62px) + width: 56px + top: 100% + margin-top: 9px + flex-direction: column + &--up, &--down + left: 50% + margin-left: -28px + &--opened + opacity: 1 + transform: scale(1) translate(0, 0) + pointer-events: all + &--align-left + > .q-fab__actions + &--up, &--down + align-items: flex-start + left: 28px + &--align-right + > .q-fab__actions + &--up, &--down + align-items: flex-end + left: auto + right: 0 +$field-transition = .36s cubic-bezier(.4,0,.2,1) +$field-transition-label-right-down = .396s cubic-bezier(.4,0,.2,1) +$field-transition-label-right-up = .324s cubic-bezier(.4,0,.2,1) +.q-field + font-size: $input-font-size + ::-ms-clear, + ::-ms-reveal + display: none + &--with-bottom + padding-bottom: 20px + &__marginal + height: 56px + color: rgba(0,0,0,.54) + font-size: 24px + > * + * + margin-left: 2px + .q-avatar + font-size: 32px + &__before, &__prepend + padding-right: 12px + &__after, &__append + padding-left: 12px + &:empty + display: none + &__append + &__append + padding-left: 2px + &__inner + text-align: left + &__bottom + font-size: 12px + min-height: 20px + line-height: 1 + color: rgba(0,0,0,.54) + padding: 8px 12px 0 + backface-visibility: hidden + &--animated + transform: translateY(100%) + position: absolute + left: 0 + right: 0 + bottom: 0 + &__messages + line-height: 1 + > div + word-break: break-word + word-wrap: break-word + overflow-wrap: break-word + & + div + margin-top: 4px + &__counter + padding-left: 8px + line-height: 1 + &--item-aligned + padding: 8px 16px + .q-field__before + min-width: 56px + &__control-container + height: inherit + &__control + color: $primary + color: var(--q-color-primary) + height: 56px + max-width: 100% + outline: none + &:before, &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + pointer-events: none + &:before + border-radius: inherit + &__shadow + top: 8px + opacity: 0 + overflow: hidden + white-space: pre-wrap + transition: opacity $field-transition + + .q-field__native + &::placeholder + transition: opacity $field-transition + &:focus::placeholder + opacity: 0 + &__native, &__prefix, &__suffix, &__input + font-weight: 400 + line-height: 28px + letter-spacing: .00937em + text-decoration: inherit + text-transform: inherit + border: none + border-radius: 0 + background: none + color: $input-text-color + outline: 0 + padding: 6px 0 + &__native, &__input + width: 100% + min-width: 0 + outline: 0 !important + user-select: auto + &:-webkit-autofill + -webkit-animation-name: q-autofill + -webkit-animation-fill-mode: both + &:-webkit-autofill + .q-field__label + transform: translateY(-40%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-40%) scale(.75) + &:invalid + box-shadow: none + &__native[type="file"] + line-height: 1em + &__input + padding: 0 + height: 0 + min-height: 24px + line-height: 24px + &__prefix, &__suffix + transition: opacity $field-transition + white-space: nowrap + &__prefix + padding-right: 4px + &__suffix + padding-left: 4px + &--readonly, &--disabled + .q-placeholder + opacity: 1 !important + &--readonly + &.q-field--labeled + .q-field__native, .q-field__input + cursor: default + &.q-field--float + .q-field__native, .q-field__input + cursor: text + &--disabled + .q-field__inner + cursor: not-allowed + .q-field__control + pointer-events: none + .q-field__control + opacity: .6 !important + div, div * + outline: 0 !important + &__label + left: 0 + max-width: 100% + top: 18px + color: $input-label-color + font-size: 16px + line-height: 20px + font-weight: 400 + letter-spacing: .00937em + text-decoration: inherit + text-transform: inherit + transform-origin: left top + transition: transform $field-transition, max-width $field-transition-label-right-up + backface-visibility: hidden + &__label-back + position: absolute + left: 0 + right: 0 + top: 7.5px + height: 0 + z-index: -1 + transition: height $field-transition + &--float .q-field__label-back + height: 4.5px + &--float .q-field__label + transform: translateY(-40%) scale(.75) + max-width: 133% + transition: transform $field-transition, max-width $field-transition-label-right-down + &--highlighted + .q-field__label + color: currentColor + .q-field__shadow + opacity: .5 + &--filled + .q-field__control + padding: 0 12px + background: rgba(0,0,0,.05) + border-radius: $generic-border-radius $generic-border-radius 0 0 + &:before + background: rgba(0,0,0,.05) + border-bottom: 1px solid rgba(0,0,0,.42) + opacity: 0 + transition: opacity $field-transition, background $field-transition + &:hover:before + opacity: 1 + &:after + height: 2px + top: auto + transform-origin: center bottom + transform: scale3d(0, 1, 1) + background: currentColor + transition: transform $field-transition + &.q-field--rounded .q-field__control + border-radius: 28px 28px 0 0 + &.q-field--highlighted + .q-field__control + &:before + opacity: 1 + background: rgba(0,0,0,.12) + &:after + transform: scale3d(1, 1, 1) + &.q-field--dark + .q-field__control, .q-field__control:before + background: rgba(255,255,255,.07) + &.q-field--highlighted .q-field__control:before + background: rgba(255,255,255,.1) + &.q-field--readonly + .q-field__control:before + opacity: 1 + background: transparent + border-bottom-style: dashed + &--outlined + .q-field__control + border-radius: $generic-border-radius + padding: 0 12px + &:before + border: 1px solid rgba(0,0,0,.24) + transition: border-color $field-transition + &:hover:before + border-color: $light-text + border-color: var(--q-color-light-text) + &:after + height: inherit + border-radius: inherit + border: 2px solid transparent + transition: border-color $field-transition + .q-field__native, + .q-field__input + &:-webkit-autofill + margin-top: 1px + margin-bottom: 1px + &.q-field--rounded .q-field__control + border-radius: 28px + &.q-field--highlighted + + .q-field__control:hover:before + border-color: transparent + .q-field__control:after + border-color: currentColor + border-width: 2px + transform: scale3d(1, 1, 1) + &.q-field--readonly + .q-field__control:before + border-style: dashed + &--standard + .q-field__control + &:before + border-bottom: 1px solid rgba(0,0,0,.24) + transition: border-color $field-transition + &:hover:before + border-color: $light-text + border-color: var(--q-color-light-text) + &:after + height: 2px + top: auto + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + transform-origin: center bottom + transform: scale3d(0, 1, 1) + background: currentColor + transition: transform $field-transition + &.q-field--highlighted + .q-field__control:after + transform: scale3d(1, 1, 1) + &.q-field--readonly + .q-field__control:before + border-bottom-style: dashed + &--dark + .q-field__control:before + border-color: rgba(255,255,255,.6) + .q-field__control:hover:before + border-color: $dark-text + border-color: var(--q-color-dark-text) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + &:not(.q-field--highlighted) .q-field__label, .q-field__marginal, .q-field__bottom + color: rgba(255,255,255,.7) + &--standout + .q-field__control + padding: 0 12px + background: rgba(0,0,0,.05) + border-radius: $generic-border-radius + transition: box-shadow $field-transition, background-color $field-transition + &:before + background: rgba(0,0,0,.07) + opacity: 0 + transition: opacity $field-transition, background $field-transition + &:hover:before + opacity: 1 + &.q-field--rounded .q-field__control + border-radius: 28px + &.q-field--highlighted + .q-field__control + box-shadow: $shadow-2 + background: $dark-page + background: var(--q-color-dark-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + &.q-field--readonly + .q-field__control:before + opacity: 1 + background: transparent + border: 1px dashed rgba(0,0,0,.24) + &.q-field--dark + .q-field__control + background: rgba(255,255,255,.07) + &:before + background: rgba(255,255,255,.07) + &.q-field--highlighted + .q-field__control + background: $light-page + background: var(--q-color-light-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $light-text + color: var(--q-color-light-text) + &.q-field--readonly + .q-field__control:before + border-color: rgba(255,255,255,.24) + &--labeled + &--std + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 24px + padding-top: 24px + padding-bottom: 8px + .q-field__shadow + top: 0 + &:not(.q-field--float) + .q-field__prefix, .q-field__suffix + opacity: 0 + .q-field__native, .q-field__input + &::-webkit-input-placeholder + color: transparent + &::-moz-placeholder + color: transparent + &:-ms-input-placeholder + color: transparent !important + &::-ms-input-placeholder + color: transparent + &::placeholder + color: transparent + &--std.q-field--dense + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 14px + padding-bottom: 2px + &--dense + .q-field__shadow + top: 0 + .q-field__control, .q-field__marginal + height: 40px + .q-field__bottom + font-size: 11px + .q-field__label + font-size: 14px + top: 10px + .q-field__before, .q-field__prepend + padding-right: 6px + .q-field__after, .q-field__append + padding-left: 6px + .q-field__append + .q-field__append + padding-left: 2px + .q-field__marginal + .q-avatar + font-size: 24px + &.q-field--float .q-field__label + transform: translateY(-30%) scale(.75) + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-30%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-30%) scale(.75) + &--outlined--md + &.q-field--float .q-field__label + max-width: 133% + transform: translateY(-120%) scale(.75) + padding-left: 6px + padding-right: 6px + transition: transform $field-transition, padding $field-transition, max-width $field-transition-label-right-down + .q-field__label + z-index: 1 + left: -4px + padding-left: 4px + padding-right: 4px + border-radius: 4px + transition: transform $field-transition, padding $field-transition, max-width $field-transition-label-right-up + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-120%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-120%) scale(.75) + &.q-field--dense + &.q-field--outlined--md.q-field--float .q-field__label + transform: translateY(-85%) scale(.75) + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-85%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-85%) scale(.75) + &--borderless, &--standard + .q-field__bottom, + &.q-field--dense .q-field__control + padding-left: 0 + padding-right: 0 + &--error + .q-field__label + animation: q-field-label .36s + .q-field__bottom + color: $negative + color: var(--q-color-negative) + &__focusable-action + opacity: 0.6 + cursor: pointer + outline: 0 !important + border: 0 + color: inherit + background: transparent + padding: 0 + &:hover, + &:focus + opacity: 1 + &--auto-height + .q-field__control + height: auto + .q-field__control, .q-field__native + min-height: 56px + .q-field__native + align-items: center + .q-field__control-container + padding-top: 0 + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 18px + &.q-field--labeled--std + .q-field__control-container + padding-top: 24px + .q-field__shadow + top: 24px + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 0 + .q-field__native + min-height: 24px + &.q-field--dense + .q-field__control, .q-field__native + min-height: 40px + &.q-field--labeled--std + .q-field__control-container + padding-top: 14px + .q-field__shadow + top: 14px + .q-field__native + min-height: 24px + &--square .q-field__control + border-radius: 0 !important +.q-transition--field-message + &-enter-active, + &-leave-active + transition: transform .6s cubic-bezier(.86,0,.07,1), opacity .6s cubic-bezier(.86,0,.07,1) + &-enter, &-leave-to + opacity: 0 + transform: translateY(-10px) + &-leave, &-leave-active + position: absolute +@media (prefers-color-scheme: dark) + .q-field--dark-auto + &.q-field--filled + .q-field__control, .q-field__control:before + background: rgba(255,255,255,.07) + &.q-field--highlighted .q-field__control:before + background: rgba(255,255,255,.1) + .q-field__control:before + border-color: rgba(255,255,255,.6) + .q-field__control:hover:before + border-color: $dark-text + border-color: var(--q-color-dark-text) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + &:not(.q-field--highlighted) .q-field__label, .q-field__marginal, .q-field__bottom + color: rgba(255,255,255,.7) + &.q-field--standout + .q-field__control + background: rgba(255,255,255,.07) + &:before + background: rgba(255,255,255,.07) + &.q-field--highlighted + .q-field__control + background: $light-page + background: var(--q-color-light-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $light-text + color: var(--q-color-light-text) + &.q-field--readonly + .q-field__control:before + border-color: rgba(255,255,255,.24) +@keyframes q-field-label + 40% + margin-left: 2px + 60%, 80% + margin-left: -2px + 70%, 90% + margin-left: 2px +@keyframes q-autofill + to + background: transparent + color: $input-autofill-color +.q-file + .q-field__native + word-break: break-all + .q-field__input + opacity: 0 !important + &::-webkit-file-upload-button + cursor: pointer + &__filler + visibility: hidden + width: 100% + border: none + padding: 0 + &__dnd + outline: 1px dashed currentColor + outline-offset: -4px +.q-form + position: relative +.q-img + position: relative + width: $img-width + display: inline-block + vertical-align: middle + &__loading .q-spinner + font-size: $img-loading-font-size + &__image + border-radius: inherit + background-repeat: $img-background-repeat + &__content + overflow: hidden + border-radius: inherit + > div + position: $img-content-position + padding: $img-content-padding + color: $img-content-color + background: $img-content-background + &--menu + .q-img + &__image + pointer-events: none + > img + pointer-events: all + opacity: 0 + &__content + pointer-events: none + > div + pointer-events: all +.q-inner-loading + background: $light-dimmed-background + &--dark + background: $dimmed-background + &__label + margin-top: 8px +@media (prefers-color-scheme: dark) + .q-inner-loading--dark-auto + background: $dimmed-background +.q-textarea + .q-field__control + min-height: 56px + height: auto + .q-field__control-container + padding-top: 2px + padding-bottom: 2px + .q-field__shadow + top: 2px + bottom: 2px + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 18px + .q-field__native + resize: vertical + padding-top: 17px + min-height: 52px + &.q-field--labeled--std + .q-field__control-container + padding-top: 26px + .q-field__shadow + top: 26px + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 0 + .q-field__native + min-height: 26px + padding-top: 1px + &--autogrow + .q-field__native + resize: none + &.q-field--dense + .q-field__control, .q-field__native + min-height: 36px + .q-field__native + padding-top: 9px + &.q-field--labeled--std + .q-field__control-container + padding-top: 14px + .q-field__shadow + top: 14px + .q-field__native + min-height: 24px + padding-top: 3px + .q-field__prefix, .q-field__suffix + padding-top: 2px +body.mobile .q-textarea, +.q-textarea.disabled + .q-field__native + resize: none +.q-intersection + position: relative +.q-item + min-height: 48px + padding: 8px 16px + color: inherit + transition: color .3s, background-color .3s + &__section + &--side + color: $grey-7 + align-items: flex-start + padding-right: 16px + width: auto + min-width: 0 + max-width: 100% + > .q-icon + font-size: 24px + > .q-avatar + font-size: 40px + &--avatar + color: inherit + min-width: 56px + &--thumbnail + img + width: 100px + height: 56px + &--nowrap + white-space: nowrap + > .q-item__section--thumbnail:first-child, + > .q-focus-helper + .q-item__section--thumbnail + margin-left: -16px + > .q-item__section--thumbnail:last-of-type + margin-right: -16px + &__label + line-height: 1.2em !important + max-width: 100% + &--overline + color: rgba(0,0,0,.7) + &--caption + color: rgba(0,0,0,.54) + &--header + color: $grey-7 + padding: 16px + font-size: .875rem + line-height: 1.25rem + letter-spacing: .01786em + .q-separator--spaced + &, .q-list--padding & + padding-top: 8px + & + .q-item__label + margin-top: 4px +.q-item__section--main + width: auto + min-width: 0 + max-width: 100% + flex: 10000 1 0% + & + & + margin-left: 8px + ~ .q-item__section--side + align-items: flex-end + padding-right: 0 + padding-left: 16px + &.q-item__section--thumbnail + margin-left: 0 + margin-right: -16px +.q-list + &--bordered + border: 1px solid $separator-color + &--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top: 1px solid $separator-color + &--padding + padding: 8px 0 +.q-list--dense > .q-item, .q-item--dense + min-height: 32px + padding: 2px 16px +.q-list--dark.q-list--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top-color: $separator-dark-color +.q-list--dark, .q-item--dark + color: $dark-text + color: var(--q-color-dark-text) + border-color: $separator-dark-color + .q-item__section--side:not(.q-item__section--avatar) + color: rgba(255,255,255,.7) + .q-item__label + &--header + color: rgba(255,255,255,.64) + &--overline, &--caption + color: rgba(255,255,255,.8) +.q-item + position: relative + &.q-router-link--active, &--active + color: $primary + color: var(--q-color-primary) +@media (prefers-color-scheme: dark) + .q-list--dark-auto.q-list--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top-color: $separator-dark-color + .q-list--dark-auto, .q-item--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + border-color: $separator-dark-color + .q-item__section--side:not(.q-item__section--avatar) + color: rgba(255,255,255,.7) + .q-item__label + &--header + color: rgba(255,255,255,.64) + &--overline, &--caption + color: rgba(255,255,255,.8) +.q-knob + font-size: 48px + &--editable + cursor: pointer + outline: 0 + &:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + box-shadow: none + transition: box-shadow .24s ease-in-out + &:focus:before + box-shadow: $shadow-4 +.q-layout + width: 100% +.q-layout-container + position: relative + width: 100% + height: 100% + .q-layout + min-height: 100% + > div + contain: layout size + contain: layout size style + transform: translateZ(0) + > div + min-height: 0 + max-height: 100% +.q-layout__shadow + width: 100% + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + box-shadow: $layout-shadow +.q-layout__section--marginal + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) +.q-header + &--hidden + transform: translateY(-110%) + &--bordered + border-bottom: $layout-border + .q-layout__shadow + bottom: -10px + &:after + bottom: 10px +.q-footer + &--hidden + transform: translateY(110%) + &--bordered + border-top: $layout-border + .q-layout__shadow + top: -10px + &:after + top: 10px +.q-header, .q-footer + z-index: $z-marginals +.q-drawer + position: absolute + top: 0 + bottom: 0 + z-index: $z-side + contain: layout size + contain: layout size style + &--on-top + z-index: $z-fixed-drawer + &--left + left: 0 + transform: translateX(-100%) + &.q-drawer--bordered + border-right: $layout-border + .q-layout__shadow + left: 10px + right: -10px + &:after + right: 10px + &--right + right: 0 + transform: translateX(100%) + &.q-drawer--bordered + border-left: $layout-border + .q-layout__shadow + left: -10px + &:after + left: 10px + &-container:not(&--mini-animate) &--mini + padding: 0 !important + .q-item, .q-item__section + text-align: center + justify-content: center + padding-left: 0 + padding-right: 0 + min-width: 0 + .q-item__label, .q-item__section--main, .q-item__section--side ~ .q-item__section--side + display: none + &--mini + .q-mini-drawer-hide, .q-expansion-item__content + display: none + &--mini-animate &__content + overflow-x: hidden + white-space: nowrap + &--standard + .q-mini-drawer-only + display: none + &--mobile + .q-mini-drawer-only, .q-mini-drawer-hide + display: none + &__backdrop + z-index: ($z-fixed-drawer - 1) !important + will-change: opacity + opacity: 0 + background: $backdrop-background + background: var(--q-color-backdrop-background) + &__opener + z-index: ($z-marginals + 1) + height: 100% + width: 15px + user-select: none +.q-layout, .q-header, .q-footer, .q-page + position: relative +.q-page-sticky--shrink + pointer-events: none + > div + display: inline-block + pointer-events: auto +body.q-ios-padding + .q-layout--standard .q-header > .q-toolbar:nth-child(1), + .q-layout--standard .q-header > .q-tabs:nth-child(1) .q-tabs-head, + .q-layout--standard .q-drawer--top-padding .q-drawer__content + padding-top: $ios-statusbar-height + min-height: ($toolbar-min-height + $ios-statusbar-height) + padding-top: env(safe-area-inset-top) + min-height: "calc(env(safe-area-inset-top) + %s)" % $toolbar-min-height + .q-layout--standard .q-footer > .q-toolbar:last-child, + .q-layout--standard .q-footer > .q-tabs:last-child .q-tabs-head, + .q-layout--standard .q-drawer--top-padding .q-drawer__content + padding-bottom: env(safe-area-inset-bottom) + min-height: "calc(env(safe-area-inset-bottom) + %s)" % $toolbar-min-height +.q-body--layout-animate + .q-drawer__backdrop + transition: opacity .12s !important + .q-drawer + transition: transform .12s, width .12s, top .12s, bottom .12s !important + .q-layout__section--marginal + transition: transform .12s, left .12s, right .12s !important + .q-page-container + transition: padding-top .12s, padding-right .12s, padding-bottom .12s, padding-left .12s !important + .q-page-sticky + transition: transform .12s, left .12s, right .12s, top .12s, bottom .12s !important +body:not(.q-body--layout-animate) + .q-layout--prevent-focus + visibility: hidden +.q-body--drawer-toggle + overflow-x: hidden !important +.q-layout-padding + @media (max-width: $breakpoint-xs-max) + padding: 8px + @media (min-width: $breakpoint-sm-min) and (max-width: $breakpoint-md-max) + padding: 16px + @media (min-width: $breakpoint-lg-min) + padding: 24px +body.body--dark + .q-header, .q-footer, .q-drawer + border-color: $separator-dark-color +@media (prefers-color-scheme: dark) + body.body--dark-auto + .q-header, .q-footer, .q-drawer + border-color: $separator-dark-color +body.platform-ios + .q-layout--containerized + + + + position: unset !important +.q-linear-progress + position: relative + width: 100% + overflow: hidden + font-size: 4px + height: 1em + color: $primary + color: var(--q-color-primary) + transform: scale3d(1, 1, 1) + &__model, &__track + transform-origin: 0 0 + &--with-transition + transition: transform .3s + &--reverse + .q-linear-progress + &__model, &__track + transform-origin: 0 100% + &__model + &--determinate + background: currentColor + &--indeterminate, &--query + transition: none + &:before, &:after + background: currentColor + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + transform-origin: 0 0 + &:before + animation: q-linear-progress--indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite + &:after + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1) + animation: q-linear-progress--indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite + animation-delay: 1.15s + &__track + opacity: .4 + &--light, + &--dark-auto + background: rgba(0,0,0,.26) + &--dark + background: rgba(255,255,255,.6) + &__stripe + transition: width .3s + background-image: linear-gradient(45deg, rgba(255,255,255,.15) 25%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, rgba(255,255,255,0) 75%, rgba(255,255,255,0)) !important + background-size: 40px 40px !important +@media (prefers-color-scheme: dark) + .q-linear-progress__track--dark-auto + background: rgba(255,255,255,.6) +@keyframes q-linear-progress--indeterminate + 0% + transform: translate3d(-35%, 0, 0) scale3d(.35, 1, 1) + 60% + transform: translate3d(100%, 0, 0) scale3d(.9, 1, 1) + 100% + transform: translate3d(100%, 0, 0) scale3d(.9, 1, 1) +@keyframes q-linear-progress--indeterminate-short + 0% + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1) + 60% + transform: translate3d(107%, 0, 0) scale3d(.01, 1, 1) + 100% + transform: translate3d(107%, 0, 0) scale3d(.01, 1, 1) +.q-menu + display: inline-block + max-width: $menu-max-width + max-height: 65vh + outline: 0 + border-radius: $generic-border-radius + box-shadow: $menu-box-shadow + background: $menu-background + opacity: 0 + &__container + position: fixed + z-index: $z-menu + contain: layout + contain: layout style + &--square + border-radius: 0 +.q-option-group + &--inline + > div + display: inline-block +.q-pagination + input + text-align: center + -moz-appearance: textfield + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button + -webkit-appearance: none + margin: 0 + &__content + --q-pagination-gutter-parent: -2px + --q-pagination-gutter-child: 2px + margin-top: var(--q-pagination-gutter-parent) + margin-left: var(--q-pagination-gutter-parent) + &__content > .q-btn, + &__content > .q-input, + &__middle > .q-btn + margin-top: var(--q-pagination-gutter-child) + margin-left: var(--q-pagination-gutter-child) +.q-parallax + position: relative + width: 100% + overflow: hidden + border-radius: inherit +.q-parallax__media + > img, > video + position: absolute + left: 50% /* rtl:ignore */ + bottom: 0 + min-width: 100% + min-height: 100% + will-change: transform + display: none +.q-popup-edit + padding: 8px 16px + &__buttons + margin-top: 8px + .q-btn + .q-btn + margin-left: 8px +.q-pull-to-refresh + position: relative + &__puller + border-radius: 50% + width: 40px + height: 40px + color: $primary + color: var(--q-color-primary) + background: $light-page + background: var(--q-color-light-page) + box-shadow: 0 0 4px 0 rgba(0,0,0,.3) + &--animating + transition: transform .3s, opacity .3s +$radio-transition = .22s cubic-bezier(0,0,.2,1) 0ms +.q-radio + vertical-align: middle + &__native + width: 1px + height: 1px + &__bg, + &__icon-container + user-select: none + &__bg + top: 25% + left: 25% + width: 50% + height: 50% + -webkit-print-color-adjust: exact + path + fill: currentColor + &__icon + color: currentColor + font-size: .5em + &__check + transform-origin: 50% 50% + transform: scale3d(0, 0, 1) + transition: transform $radio-transition + &__inner + font-size: 40px + width: 1em + min-width: 1em + height: 1em + outline: 0 + border-radius: 50% + color: rgba(0,0,0,.54) + &--truthy + color: $primary + color: var(--q-color-primary) + .q-radio__check + transform: scale3d(1, 1, 1) + &.disabled + opacity: .75 !important + &--dark + .q-radio__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy + color: $primary + color: var(--q-color-primary) + &--dense + .q-radio__inner + width: .5em + min-width: .5em + height: .5em + .q-radio__bg + left: 0 + top: 0 + width: 100% + height: 100% + .q-radio__label + padding-left: .5em + &.reverse .q-radio__label + padding-left: 0 + padding-right: .5em +body.desktop + .q-radio:not(.disabled) + .q-radio__inner:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $radio-transition + &:focus, + &:hover + .q-radio__inner:before + transform: scale3d(1, 1, 1) + .q-radio--dense:not(.disabled) + &:focus, + &:hover + .q-radio__inner:before + transform: scale3d(1.5, 1.5, 1) +@media (prefers-color-scheme: dark) + .q-radio--dark-auto + .q-radio__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy + color: $primary + color: var(--q-color-primary) +.q-rating + color: $rating-grade-color + vertical-align: middle + &__icon-container + height: 1em + outline: 0 + & + & + margin-left: 2px + &__icon + color: currentColor + text-shadow: $rating-shadow + position: relative + opacity: .4 + transition: transform .2s ease-in, opacity .2s ease-in + &--hovered + transform: scale(1.3) + &--active + opacity: 1 + &--exselected + opacity: .7 + &--no-dimming .q-rating__icon + opacity: 1 + &--editable .q-rating__icon-container + cursor: pointer +.q-responsive + position: relative + max-width: 100% + max-height: 100% + &__filler + width: inherit + max-width: inherit + height: inherit + max-height: inherit + &__content + border-radius: inherit + > * + width: 100% !important + height: 100% !important + max-height: 100% !important + max-width: 100% !important +.q-scrollarea + position: relative + contain: strict + &__bar, + &__thumb + opacity: .2 + transition: opacity .3s + will-change: opacity + cursor: grab + &--v + right: 0 + width: 10px + &--h + bottom: 0 + height: 10px + &--invisible + opacity: 0 !important + pointer-events: none + &__thumb + background: $dark-page + background: var(--q-color-dark-page) + &:hover + opacity: .3 + &:active + opacity: .5 + &__content + min-height: 100% + min-width: 100% + &--dark .q-scrollarea__thumb + background: $dark-text + background: var(--q-color-dark-text) +@media (prefers-color-scheme: dark) + .q-scrollarea--dark-auto + .q-scrollarea__thumb + background: $dark-text + background: var(--q-color-dark-text) +.q-select + &--without-input + .q-field__control + cursor: pointer + &--with-input + .q-field__control + cursor: text + &--with-chips + .q-field__input + margin: 7px 0 + &.q-field--labeled + .q-field__native + margin-top: -6px + padding-bottom: 0 + &.q-field--dense + .q-chip--dense + margin: 1px 4px + height: 20px + .q-field__input + margin: 0 + &.q-field--labeled + .q-field__native + margin-top: 0 + .q-field__input + min-width: 50px !important + cursor: text + &--padding + padding-left: 4px + &__focus-target, + &__autocomplete-input + position: absolute + outline: 0 !important + width: 1px + height: 1px + padding: 0 + border: 0 + opacity: 0 + &__dropdown-icon + cursor: pointer + transition: transform .28s + &__close-icon + cursor: pointer + &:not(:last-child) + margin-right: 12px + &.q-field--readonly + .q-field__control, .q-select__dropdown-icon + cursor: default + &__dialog + width: 90vw !important + max-width: 90vw !important + max-height: calc(100vh - 70px) !important + display: flex + flex-direction: column + > .scroll + position: relative + background: inherit +body.platform-android + &.native-mobile .q-dialog__inner--top .q-select__dialog + max-height: calc(100vh - 24px) !important + &:not(.native-mobile) + .q-select__dialog + max-height: calc(100vh - 108px) !important + .q-dialog__inner--top .q-select__dialog + max-height: calc(100vh - 62px) !important +body.platform-ios + &.native-mobile .q-dialog__inner--top + > div + border-radius: $generic-border-radius + .q-select__dialog--focused + max-height: 47vh !important + &:not(.native-mobile) + .q-select__dialog + + max-height: calc(100vh - 164px) !important + .q-dialog__inner--top .q-select__dialog--focused + max-height: 48vh !important +.q-separator + border: 0 + background: $separator-color + margin: 0 + transition: background .3s, opacity .3s + flex-shrink: 0 + &--dark + background: $separator-dark-color + &--horizontal + display: block + height: 1px + &-inset + margin-left: 16px + margin-right: 16px + &-item-inset + margin-left: 72px + margin-right: 0 + &-item-thumbnail-inset + margin-left: 116px + margin-right: 0 + &--vertical + width: 1px + height: auto + align-self: stretch + &-inset + margin-top: 8px + margin-bottom: 8px +@media (prefers-color-scheme: dark) + .q-separator--dark-auto + background: $separator-dark-color +.q-skeleton + background: $separator-color + border-radius: $generic-border-radius + &--anim + cursor: wait + + box-sizing: border-box + &:before + content: '\00a0' + &--type + &-text + transform: scale(1, .5) + &-circle, + &-QAvatar + height: 48px + width: 48px + border-radius: 50% + &-QBtn + width: 90px + height: 36px + &-QBadge + width: 70px + height: 16px + &-QChip + width: 90px + height: 28px + border-radius: 16px + &-QToolbar + height: 50px + &-QCheckbox, + &-QRadio + width: 40px + height: 40px + border-radius: 50% + &-QToggle + width: 56px + height: 40px + border-radius: 7px + &-QSlider, + &-QRange + height: 40px + &-QInput + height: 56px + &--bordered + border: 1px solid rgba(0,0,0,.05) + &--square + border-radius: 0 + &--anim-fade + animation: q-skeleton--fade 1.5s linear .5s infinite + &--anim-pulse + animation: q-skeleton--pulse 1.5s ease-in-out .5s infinite + &--anim-pulse-x + animation: q-skeleton--pulse-x 1.5s ease-in-out .5s infinite + &--anim-pulse-y + animation: q-skeleton--pulse-y 1.5s ease-in-out .5s infinite + &--anim-wave, + &--anim-blink, + &--anim-pop + position: relative + overflow: hidden + z-index: 1 + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + z-index: 0 + &--anim-blink:after + background: rgba(255,255,255,.7) + animation: q-skeleton--fade 1.5s linear .5s infinite + &--anim-wave:after + background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.5), rgba(255,255,255,0)) + animation: q-skeleton--wave 1.5s linear .5s infinite + &--dark + background: rgba(255, 255, 255, 0.05) + &.q-skeleton--bordered + border: 1px solid rgba(255,255,255,.25) + &.q-skeleton--anim-wave:after + background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.1), rgba(255,255,255,0)) + &.q-skeleton--anim-blink:after + background: rgba(255,255,255,.2) +@media (prefers-color-scheme: dark) + .q-skeleton--dark-auto + background: rgba(255, 255, 255, 0.05) + &.q-skeleton--bordered + border: 1px solid rgba(255,255,255,.25) + &.q-skeleton--anim-wave:after + background: linear-gradient(90deg, transparent, rgba(255,255,255,.1), transparent) + &.q-skeleton--anim-blink:after + background: rgba(255,255,255,.2) +@keyframes q-skeleton--fade + 0% + opacity: 1 + 50% + opacity: .4 + 100% + opacity: 1 +@keyframes q-skeleton--pulse + 0% + transform: scale(1) + 50% + transform: scale(.85) + 100% + transform: scale(1) +@keyframes q-skeleton--pulse-x + 0% + transform: scaleX(1) + 50% + transform: scaleX(.75) + 100% + transform: scaleX(1) +@keyframes q-skeleton--pulse-y + 0% + transform: scaleY(1) + 50% + transform: scaleY(.75) + 100% + transform: scaleY(1) +@keyframes q-skeleton--wave + 0% + transform: translateX(-100%) + 100% + transform: translateX(100%) +.q-slide-item + position: relative + &__left, &__right, &__top, &__bottom + visibility: hidden + font-size: 14px + color: $dark-text + color: var(--q-color-dark-text) + .q-icon + font-size: 1.714em + &__left + background: $green + padding: 8px 16px + > div + transform-origin: left center + &__right + background: $orange + padding: 8px 16px + > div + transform-origin: right center + &__top + background: $blue + padding: 16px 8px + > div + transform-origin: top center + &__bottom + background: $purple + padding: 16px 8px + > div + transform-origin: bottom center + &__content + background: inherit + transition: transform .2s ease-in + user-select: none + cursor: pointer +.q-slider + position: relative + &--h + width: 100% + &--v + height: 200px + &--editable .q-slider__track-container + cursor: grab + &__track-container + outline: 0 + &--h + width: 100% + padding: 12px 0 + .q-slider__selection + will-change: width, left + &--v + height: 100% + padding: 0 12px + .q-slider__selection + will-change: height, top + &__track + color: $primary + color: var(--q-color-primary) + background: rgba(0,0,0,.1) + border-radius: $generic-border-radius + width: inherit + height: inherit + &__inner + background: rgba(0,0,0,.1) + border-radius: inherit + width: 100% + height: 100% + &__selection + background: currentColor + border-radius: inherit + width: 100% + height: 100% + &__markers + color: rgba(0,0,0,.3) + border-radius: inherit + width: 100% + height: 100% + &:after + content: '' + position: absolute + background: currentColor + &--h + background-image: repeating-linear-gradient(to right, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)) + &:after + height: 100% + width: 2px + top: 0 + right: 0 + &--v + background-image: repeating-linear-gradient(to bottom, currentColor, currentColor 2px, rgba(255,255,255,0) 0, rgba(255,255,255,0)) + &:after + width: 100% + height: 2px + left: 0 + bottom: 0 + &__marker-labels-container + position: relative + width: 100% + height: 100% + min-height: 24px + min-width: 24px + &__marker-labels + position: absolute + &--h + &-standard + top: 0 + &-switched + bottom: 0 + &-ltr + transform: translateX(-50%) /* rtl:ignore */ + &-rtl + transform: translateX(50%) /* rtl:ignore */ + &--v + &-standard + left: 4px + &-switched + right: 4px + &-ltr + transform: translateY(-50%) /* rtl:ignore */ + &-rtl + transform: translateY(50%) /* rtl:ignore */ + &__thumb + z-index: 1 + outline: 0 + color: $primary + color: var(--q-color-primary) + transition: transform .18s ease-out, fill .18s ease-out, stroke .18s ease-out + &.q-slider--focus + opacity: 1 !important + &--wrong-value + opacity: 0 + &--h + top: 50% + will-change: left + &-ltr + transform: translate(-50%,-50%) /* rtl:ignore */ + &-rtl + transform: translate(50%,-50%) /* rtl:ignore */ + &--v + left: 50% /* rtl:ignore */ + will-change: top + &-ltr + transform: translate(-50%,-50%) /* rtl:ignore */ + &-rtl + transform: translate(-50%,50%) /* rtl:ignore */ + &__thumb-shape + top: 0 + left: 0 + stroke-width: 3.5 + stroke: currentColor + transition: transform .28s + path + stroke: currentColor + fill: currentColor + &__focus-ring + border-radius: 50% + opacity: 0 + transition: transform 266.67ms ease-out, opacity 266.67ms ease-out, background-color 266.67ms ease-out + transition-delay: .14s + &__pin + opacity: 0 + white-space: nowrap + transition: opacity .28s ease-out + transition-delay: .14s + &:before + content: '' + width: 0 + height: 0 + position: absolute + &--h + &:before + border-left: 6px solid transparent + border-right: 6px solid transparent + left: 50% + transform: translateX(-50%) + &-standard + bottom: 100% + &:before + bottom: 2px + border-top: 6px solid currentColor + &-switched + top: 100% + &:before + top: 2px + border-bottom: 6px solid currentColor + &--v + top: 0 + &:before + top: 50% + transform: translateY(-50%) + border-top: 6px solid transparent + border-bottom: 6px solid transparent + &-standard + left: 100% + &:before + left: 2px + border-right: 6px solid currentColor + &-switched + right: 100% + &:before + right: 2px + border-left: 6px solid currentColor + &__label + z-index: 1 + white-space: nowrap + position: absolute + &--h + left: 50% + transform: translateX(-50%) + &-standard + bottom: 7px + &-switched + top: 7px + &--v + top: 50% + transform: translateY(-50%) + &-standard + left: 7px + &-switched + right: 7px + &__text-container + min-height: 25px + padding: 2px 8px + border-radius: $generic-border-radius + background: currentColor + position: relative + text-align: center + &__text + color: $dark-text + color: var(--q-color-dark-text) + font-size: 12px + &--no-value + .q-slider__thumb, + .q-slider__inner, + .q-slider__selection + opacity: 0 + &--focus, + body.desktop &.q-slider--editable .q-slider__track-container:hover + .q-slider__focus-ring + background: currentColor + transform: scale3d(1.55, 1.55, 1) + opacity: .25 + &--focus, + &--no-value:focus-within, + body.desktop &.q-slider--editable .q-slider__track-container:hover + .q-slider__thumb, + .q-slider__inner, + .q-slider__selection + opacity: 1 + &--inactive + .q-slider__thumb + &--h + transition: left .28s, right .28s + &--v + transition: top .28s, bottom .28s + .q-slider__selection + transition: width .28s, left .28s, right .28s, height .28s, top .28s, bottom .28s + .q-slider__text-container + transition: transform .28s + &--active + cursor: grabbing + .q-slider__thumb-shape + transform: scale(1.5) + .q-slider__focus-ring, + &.q-slider--label .q-slider__thumb-shape + transform: scale(0) !important + body.desktop &.q-slider--enabled .q-slider__track-container:hover + .q-slider__pin + opacity: 1 + &--label + &.q-slider--active, + .q-slider--focus, + &.q-slider--label-always + .q-slider__pin + opacity: 1 + &--dark + .q-slider__track + background: alpha($light-page,.1) + .q-slider__inner + background: alpha($light-page,.1) + .q-slider__markers + color: alpha($light-page,.3) + &--dense + .q-slider__track-container + &--h + padding: 6px 0 + &--v + padding: 0 6px +@media (prefers-color-scheme: dark) + .q-slider--dark-auto + .q-slider__track + background: alpha($light-page,.1) + .q-slider__inner + background: alpha($light-page,.1) + .q-slider__markers + color: alpha($light-page,.3) +.q-space + flex-grow: 1 !important +.q-spinner + vertical-align: middle +.q-spinner-mat + animation: q-spin 2s linear infinite + transform-origin: center center + .path + stroke-dasharray: 1, 200 /* rtl:ignore */ + stroke-dashoffset: 0 /* rtl:ignore */ + animation: q-mat-dash 1.5s ease-in-out infinite +@keyframes q-spin + 0% + transform: rotate3d(0, 0, 1, 0deg) /* rtl:ignore */ + 25% + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */ + 50% + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */ + 75% + transform: rotate3d(0, 0, 1, 270deg) /* rtl:ignore */ + 100% + transform: rotate3d(0, 0, 1, 359deg) /* rtl:ignore */ +@keyframes q-mat-dash + 0% + stroke-dasharray: 1, 200 /* rtl:ignore */ + stroke-dashoffset: 0 /* rtl:ignore */ + 50% + stroke-dasharray: 89, 200 /* rtl:ignore */ + stroke-dashoffset: -35px /* rtl:ignore */ + 100% + stroke-dasharray: 89, 200 /* rtl:ignore */ + stroke-dashoffset: -124px /* rtl:ignore */ +.q-splitter + &__panel + position: relative + z-index: 0 + > .q-splitter + width: 100% + height: 100% + &__separator + background-color: $separator-color + user-select: none + position: relative + z-index: 1 + &__separator-area > * + position: absolute + top: 50% + left: 50% + transform: translate(-50%, -50%) + &--dark + .q-splitter__separator + background-color: $separator-dark-color + &--vertical + > .q-splitter__panel + height: 100% + &.q-splitter--active + cursor: col-resize + > .q-splitter__separator + width: 1px + > div + left: -6px + right: -6px + &.q-splitter--workable > .q-splitter__separator + cursor: col-resize + &--horizontal + > .q-splitter__panel + width: 100% + &.q-splitter--active + cursor: row-resize + > .q-splitter__separator + height: 1px + > div + top: -6px + bottom: -6px + &.q-splitter--workable > .q-splitter__separator + cursor: row-resize + &__before, &__after + overflow: auto +@media (prefers-color-scheme: dark) + .q-splitter--dark-auto + .q-splitter__separator + background-color: $separator-dark-color +.q-stepper + box-shadow: $shadow-2 + border-radius: $generic-border-radius + &__title + font-size: 14px + line-height: 18px + letter-spacing: .1px + &__caption + font-size: 12px + line-height: 14px + &__dot + contain: layout + margin-right: 8px + font-size: 14px + width: 24px + min-width: 24px + height: 24px + border-radius: 50% + background: currentColor + span + color: $dark-text + color: var(--q-color-dark-text) + &__tab + padding: 8px 24px + font-size: 14px + color: $grey + flex-direction: row + &__tab + &--navigation + user-select: none + cursor: pointer + &--active, &--done + color: $primary + color: var(--q-color-primary) + .q-stepper__dot, .q-stepper__label + text-shadow: 0 0 0 currentColor + &--disabled + .q-stepper__dot + background: rgba(0,0,0,.22) + .q-stepper__label + color: rgba(0,0,0,.32) + &--error + color: $negative + color: var(--q-color-negative) + &--error-with-icon + .q-stepper__dot + background: transparent !important + span + color: currentColor + .q-icon + font-size: 24px + &__header + border-top-left-radius: inherit + border-top-right-radius: inherit + &--border + border-bottom: 1px solid $separator-color + &--standard-labels + .q-stepper__tab + min-height: 72px + justify-content: center + &:first-child + justify-content: flex-start + &:last-child + justify-content: flex-end + &:only-child + justify-content: center + .q-stepper__dot:after + display: none + &--alternative-labels + .q-stepper__tab + min-height: 104px + padding: 24px 32px + flex-direction: column + justify-content: flex-start + .q-stepper__dot + margin-right: 0 + .q-stepper__label + margin-top: 8px + text-align: center + &:before, &:after + display: none + &--contracted + min-height: 72px + &.q-stepper__header--alternative-labels + .q-stepper__tab + min-height: 72px + &:first-child + align-items: flex-start + &:last-child + align-items: flex-end + .q-stepper__tab + padding: 24px 0 + &:first-child + .q-stepper__dot + transform: translateX(24px) + &:last-child + .q-stepper__dot + transform: translateX(-24px) + &:not(:last-child) + .q-stepper__dot:after + display: block !important + .q-stepper__dot + margin: 0 + .q-stepper__label + display: none + &__nav + padding-top: 24px + &--bordered + border: 1px solid $separator-color + &--horizontal + .q-stepper__step-inner + padding: 24px + .q-stepper__tab:first-child + border-top-left-radius: inherit + .q-stepper__tab:last-child + border-top-right-radius: inherit + .q-stepper__tab:first-child .q-stepper__dot:before, + .q-stepper__tab:last-child .q-stepper__label:after, + .q-stepper__tab:last-child .q-stepper__dot:after + display: none + .q-stepper__tab + overflow: hidden + .q-stepper__line + contain: layout + &:before, &:after + position: absolute + top: 50% + height: 1px + width: 100vw + background: $separator-color + .q-stepper__label:after, .q-stepper__dot:after + content: '' + left: 100% + margin-left: 8px + .q-stepper__dot:before + content: '' + right: 100% + margin-right: 8px + > .q-stepper__nav + padding: 0 24px 24px + &--vertical + padding: 16px 0 + .q-stepper__tab + padding: 12px 24px + .q-stepper__title + line-height: 18px + .q-stepper__step-inner + padding: 0 24px 32px 60px + > .q-stepper__nav + padding: 24px 24px 0 + .q-stepper__step + overflow: hidden + .q-stepper__dot + margin-right: 12px + &:before, &:after + content: '' + position: absolute + left: 50% + width: 1px + height: 99999px + background: $separator-color + .q-stepper__dot:before + bottom: 100% + margin-bottom: 8px + .q-stepper__dot:after + top: 100% + margin-top: 8px + .q-stepper__step:first-child .q-stepper__dot:before, + .q-stepper__step:last-child .q-stepper__dot:after + display: none + .q-stepper__step:last-child .q-stepper__step-inner + padding-bottom: 8px + &--dark + .q-stepper__dot span + color: $light-text + color: var(--q-color-light-text) + &.q-stepper--bordered, + .q-stepper__header--border + border-color: $separator-dark-color + &.q-stepper--horizontal + .q-stepper__line + &:before, &:after + background: $separator-dark-color + &.q-stepper--vertical + .q-stepper__dot + &:before, &:after + background: $separator-dark-color + .q-stepper__tab + &--disabled + color: $separator-dark-color + .q-stepper__dot + background: $separator-dark-color + .q-stepper__label + color: rgba(255,255,255,.54) +@media (prefers-color-scheme: dark) + .q-stepper--dark-auto + .q-stepper__dot span + color: $light-text + color: var(--q-color-light-text) + &.q-stepper--bordered, + .q-stepper__header--border + border-color: $separator-dark-color + &.q-stepper--horizontal + .q-stepper__line + &:before, &:after + background: $separator-dark-color + &.q-stepper--vertical + .q-stepper__dot + &:before, &:after + background: $separator-dark-color + .q-stepper__tab + &--disabled + color: $separator-dark-color + .q-stepper__dot + background: $separator-dark-color + .q-stepper__label + color: rgba(255,255,255,.54) +.q-tab-panel + padding: 16px +.q-markup-table + overflow: auto +.q-table + width: 100% + max-width: 100% + border-collapse: separate + border-spacing: 0 + thead tr, tbody td + height: 48px + th + font-weight: 500 + font-size: 12px + user-select: none + &.sortable + cursor: pointer + &:hover .q-table__sort-icon + opacity: .64 + &.sorted .q-table__sort-icon + opacity: .86 !important + &.sort-desc .q-table__sort-icon + transform: rotate(180deg) + th, td + padding: 7px 16px + background-color: inherit + thead, td, th + border-style: solid + border-width: 0 + tbody td + font-size: 13px + &__card + color: $light-text + color: var(--q-color-light-text) + border-radius: $table-border-radius + box-shadow: $table-box-shadow + .q-table__middle + flex: 1 1 auto + .q-table__top, + .q-table__bottom + flex: 0 0 auto + &__container + position: relative + &.fullscreen + max-height: 100% + > div:first-child + border-top-left-radius: inherit + border-top-right-radius: inherit + > div:last-child + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + > .q-inner-loading + border-radius: inherit !important + &__top + padding: 12px 16px + .q-table__control + flex-wrap: wrap + &__title + font-size: 20px + letter-spacing: .005em + font-weight: 400 + &__separator + min-width: 8px !important + &__progress + height: 0 !important + th + padding: 0 !important + border: 0 !important + .q-linear-progress + position: absolute + bottom: 0 + &__middle + max-width: 100% + &__bottom + min-height: 50px + padding: 4px 14px 4px 16px + font-size: 12px + .q-table__control + min-height: 24px + &__bottom-nodata-icon + font-size: 200% + margin-right: 8px + &__bottom-item + margin-right: 16px + &__control + display: flex + align-items: center + &__sort-icon + transition: transform $table-transition + opacity: 0 + font-size: 120% + &--left, &--center + margin-left: 4px + &--right + margin-right: 4px + &--col-auto-width + width: 1px + &--flat + box-shadow: none + &--bordered + border: 1px solid $table-border-color + &--square + border-radius: 0 + &__linear-progress + height: 2px + &--no-wrap + th, td + white-space: nowrap + &--grid + box-shadow: none + border-radius: $generic-border-radius + .q-table__top + padding-bottom: 4px + .q-table__middle + min-height: 2px + margin-bottom: 4px + thead + &, th + border: 0 !important + .q-table__linear-progress + bottom: 0 + .q-table__bottom + border-top: 0 + .q-table__grid-content + flex: 1 1 auto + &.fullscreen + background: inherit + &__grid-item-card + vertical-align: top + padding: 12px + .q-separator + margin: 12px 0 + &__grid-item-row + &__grid-item-row + margin-top: 8px + &__grid-item-title + opacity: .54 + font-weight: 500 + font-size: 12px + &__grid-item-value + font-size: 13px + &__grid-item + padding: 4px + transition: transform $table-transition + &--selected + transform: scale(.95) +.q-table--horizontal-separator, .q-table--cell-separator + thead th, tbody tr:not(:last-child) > td + border-bottom-width: 1px +.q-table--vertical-separator, .q-table--cell-separator + td, th + border-left-width: 1px + thead tr:last-child th, + &.q-table--loading tr:nth-last-child(2) th + border-bottom-width: 1px + td:first-child, th:first-child + border-left: 0 + .q-table__top + border-bottom: 1px solid $table-border-color +.q-table--dense + .q-table__top + padding: 6px 16px + .q-table__bottom + min-height: 33px + .q-table__sort-icon + font-size: 110% + .q-table + th, td + padding: 4px 8px + thead tr, tbody tr, tbody td + height: 28px + th:first-child, td:first-child + padding-left: 16px + th:last-child, td:last-child + padding-right: 16px + .q-table__bottom-item + margin-right: 8px + .q-table__select + .q-field__control, .q-field__native + min-height: 24px + padding: 0 + .q-field__marginal + height: 24px +.q-table__bottom + border-top: 1px solid $table-border-color +.q-table + thead, tr, th, td + border-color: $table-border-color + tbody + td + position: relative + &:before, &:after + position: absolute + top: 0 + left: 0 + right: 0 + bottom: 0 + pointer-events: none + &:before + background: $table-hover-background + &:after + background: $table-selected-background + tr.selected td:after + content: '' +body.desktop .q-table > tbody > tr:not(.q-tr--no-hover):hover > td:not(.q-td--no-hover):before + content: '' +.q-table__card--dark, .q-table--dark + border-color: $table-dark-border-color +.q-table--dark + .q-table__bottom, thead, tr, th, td + border-color: $table-dark-border-color + tbody + td + &:before + background: $table-dark-hover-background + &:after + background: $table-dark-selected-background + &.q-table--vertical-separator, &.q-table--cell-separator + .q-table__top + border-color: $table-dark-border-color +@media (prefers-color-scheme: dark) + .q-table__card--dark-auto, .q-table--dark-auto + border-color: $table-dark-border-color + .q-table--dark-auto + .q-table__bottom, thead, tr, th, td + border-color: $table-dark-border-color + tbody + td + &:before + background: $table-dark-hover-background + &:after + background: $table-dark-selected-background + &.q-table--vertical-separator, &.q-table--cell-separator + .q-table__top + border-color: $table-dark-border-color +.q-tab + padding: 0 16px + min-height: 48px + transition: color .3s, background-color .3s + text-transform: uppercase + white-space: nowrap + + color: inherit + text-decoration: none + &--full + min-height: 72px + &--no-caps + text-transform: none + &__content + height: inherit + padding: 4px 0 + min-width: 40px + &--inline + .q-tab__icon + .q-tab__label + padding-left: 8px + .q-chip--floating + top: 0 + right: -16px + &__icon + width: 24px + height: 24px + font-size: 24px + &__label + font-size: $button-font-size + line-height: $button-line-height + font-weight: $button-font-weight + .q-badge + top: 3px + right: -12px + &__alert, &__alert-icon + position: absolute + &__alert + top: 7px + right: -9px + height: 10px + width: 10px + border-radius: 50% + background: currentColor + &__alert-icon + top: 2px + right: -12px + font-size: 18px + &__indicator + opacity: 0 + height: 2px + background: currentColor + &--active .q-tab__indicator + opacity: 1 + transform-origin: left /* rtl:ignore */ + &--inactive + opacity: .85 +.q-tabs + position: relative + transition: color .3s, background-color .3s + &--scrollable + &.q-tabs__arrows--outside + &.q-tabs--horizontal + padding-left: 36px + padding-right: 36px + &.q-tabs--vertical + padding-top: 36px + padding-bottom: 36px + .q-tabs__arrow--faded + opacity: 0.3 + pointer-events: none + &.q-tabs__arrows--inside + .q-tabs__arrow--faded + display: none + &--not-scrollable + .q-tabs__arrow + display: none + .q-tabs__content + border-radius: inherit + &__arrow + cursor: pointer + font-size: 32px + min-width: 36px + text-shadow: 0 0 3px #fff, 0 0 1px #fff, 0 0 1px #000 + transition: opacity .3s + &__content + overflow: hidden + flex: 1 1 auto + &--align + &-center + justify-content: center + &-right + justify-content: flex-end + &-justify .q-tab + flex: 1 1 auto + &__offset + display: none + &--horizontal .q-tabs__arrow + height: 100% + &--start + top: 0 + left: 0 /* rtl:ignore */ + bottom: 0 + &--end + top: 0 + right: 0 /* rtl:ignore */ + bottom: 0 + &--vertical + display: block !important + height: 100% + .q-tabs__content + display: block !important + height: 100% + .q-tabs__arrow + width: 100% + height: 36px + text-align: center + &--start + top: 0 + left: 0 + right: 0 + &--end + left: 0 + right: 0 + bottom: 0 + .q-tab + padding: 0 8px + .q-tab__indicator + height: unset + width: 2px + &--vertical.q-tabs--not-scrollable + .q-tabs__content + height: 100% + &--vertical.q-tabs--dense + .q-tab__content + min-width: 24px + &--dense + .q-tab + min-height: 36px + &--full + min-height: 52px +.q-time + box-shadow: $shadow-2 + border-radius: $generic-border-radius + background: #fff + outline: 0 + width: 290px + min-width: 290px + max-width: 100% + &--bordered + border: 1px solid $separator-color + &__header + border-top-left-radius: inherit + color: $dark-text + color: var(--q-color-dark-text) + background-color: $primary + background-color: var(--q-color-primary) + padding: 16px + font-weight: 300 + &__actions + padding: 0 16px 16px + &__header-label + font-size: 28px + line-height: 1 + letter-spacing: -.00833em + > div + div + margin-left: 4px + &__link + opacity: .56 + outline: 0 + transition: opacity .3s ease-out + &--active, &:hover, &:focus + opacity: 1 + &__header-ampm + font-size: 16px + letter-spacing: .1em + &__content + padding: 16px + &:before + content: '' + display: block + padding-bottom: 100% + &__container-parent + padding: 16px + &__container-child + border-radius: 50% + background: rgba(0,0,0,.12) + &__clock + padding: 24px + width: 100% + height: 100% + max-width: 100% + max-height: 100% + font-size: 14px + &__clock-circle + position: relative + &__clock-center + height: 6px + width: 6px + margin: auto + border-radius: 50% + min-height: 0 + background: currentColor + &__clock-pointer + width: 2px + height: 50% + transform-origin: 0 0 /* rtl:ignore */ + min-height: 0 + position: absolute + left: 50% + right: 0 + bottom: 0 + color: $primary + color: var(--q-color-primary) + background: currentColor + transform: translateX(-50%) + &:before, &:after + content: '' + position: absolute + left: 50% + border-radius: 50% + background: currentColor + transform: translateX(-50%) + &:before + bottom: -4px + width: 8px + height: 8px + &:after + top: -3px + height: 6px + width: 6px + &__clock-position + position: absolute + min-height: 32px + width: 32px + height: 32px + font-size: 12px + line-height: 32px + margin: 0 + padding: 0 + transform: translate(-50%, -50%) /* rtl:ignore */ + border-radius: 50% + &--disabled + opacity: .4 + &--active + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + for $pos in 0..11 + $angle = (270 + 30 * $pos) + $top = (1 + sin($angle * 1deg)) + $left = (1 + cos($angle * 1deg)) + &__clock-pos-{$pos} + top: round($top * 50%, 2) + left: round($left * 50%, 2) /* rtl:ignore */ + for $pos in 12..23 + $angle = (270 + 30 * $pos) + $top = (1 + sin($angle * 1deg)) + $left = (1 + cos($angle * 1deg)) + &__clock-pos-{$pos} + top: round(15% + $top * 35%, 2) + left: round(15% + $left * 35%, 2) /* rtl:ignore */ + &__now-button + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + top: 12px + right: 12px + &.disabled, &--readonly + .q-time__header-ampm, .q-time__content + pointer-events: none + &--portrait + display: inline-flex + flex-direction: column + .q-time__header + border-top-right-radius: inherit + min-height: 86px + .q-time__header-ampm + margin-left: 12px + &.q-time--bordered .q-time__content + margin: 1px 0 + &--landscape + display: inline-flex + align-items: stretch + min-width: 420px + > div + display: flex + flex-direction: column + justify-content: center + .q-time__header + border-bottom-left-radius: inherit + min-width: 156px + .q-time__header-ampm + margin-top: 12px + &--dark + border-color: $separator-dark-color +@media (prefers-color-scheme: dark) + .q-time--dark-auto + border-color: $separator-dark-color +.q-timeline + padding: 0 + width: 100% + list-style: none + h6 + line-height: inherit + &--dark + color: $dark-text + color: var(--q-color-dark-text) + .q-timeline__subtitle + opacity: .7 + &__content + padding-bottom: 24px + &__title + margin-top: 0 + margin-bottom: 16px + &__subtitle + font-size: 12px + margin-bottom: 8px + opacity: .6 + text-transform: uppercase + letter-spacing: 1px + font-weight: 700 + &__dot + position: absolute + top: 0 + bottom: 0 + width: 15px + &:before, &:after + content: '' + background: currentColor + display: block + position: absolute + &:before + border: 3px solid transparent + border-radius: 100% + height: 15px + width: 15px + top: 4px + left: 0 + transition: background .3s ease-in-out, border .3s ease-in-out + &:after + width: 3px + opacity: .4 + top: 24px + bottom: 0 + left: 6px + .q-icon + position: absolute + top: 0 + left: 0 + right: 0 + font-size: 16px + height: 38px + line-height: 38px + width: 100% + color: $dark-text + color: var(--q-color-dark-text) + > svg, + > img + width: 1em + height: 1em + &__dot-img + position: absolute + top: 4px + left: 0 + right: 0 + height: 31px + width: 31px + background: currentColor + border-radius: 50% + &__heading + position: relative + &:first-child .q-timeline__heading-title + padding-top: 0 + &:last-child .q-timeline__heading-title + padding-bottom: 0 + &__heading-title + padding: 32px 0 + margin: 0 + &__entry + position: relative + line-height: 22px + &:last-child + padding-bottom: 0 !important + .q-timeline__dot:after + content: none + &--icon + .q-timeline__dot + width: 31px + &:before + height: 31px + width: 31px + &:after + top: 41px + left: 14px + .q-timeline__subtitle + padding-top: 8px + &--dense--right + .q-timeline + &__entry + padding-left: 40px + &--icon .q-timeline__dot + left: -8px + &__dot + left: 0 + &--dense--left + .q-timeline + &__heading + text-align: right + &__entry + padding-right: 40px + &--icon .q-timeline__dot + right: -8px + &__content, + &__title, + &__subtitle + text-align: right + &__dot + right: 0 + &--comfortable + display: table + .q-timeline + &__heading + display: table-row + font-size: 200% + > div + display: table-cell + &__entry + display: table-row + padding: 0 + &--icon .q-timeline__content + padding-top: 8px + &__subtitle, &__dot, &__content + display: table-cell + vertical-align: top + &__subtitle + width: 35% + &__dot + position: relative + min-width: 31px + &--comfortable--right + .q-timeline + &__heading + .q-timeline__heading-title + margin-left: -50px + &__subtitle + text-align: right + padding-right: 30px + &__content + padding-left: 30px + &__entry--icon .q-timeline__dot + left: -8px + &--comfortable--left + .q-timeline + &__heading + text-align: right + .q-timeline__heading-title + margin-right: -50px + &__subtitle + padding-left: 30px + &__content + padding-right: 30px + &__content, + &__title + text-align: right + &__entry--icon .q-timeline__dot + right: 0 + &__dot + right: -8px + &--loose + .q-timeline + &__heading-title + text-align: center + margin-left: 0 + &__entry, &__subtitle, &__dot, &__content + display: block + margin: 0 + padding: 0 + &__dot + position: absolute + left: 50% + margin-left: -7.15px + &__entry + padding-bottom: 24px + overflow: hidden + &--icon + .q-timeline__dot + margin-left: -15px + .q-timeline__subtitle + line-height: 38px + .q-timeline__content + padding-top: 8px + &--left .q-timeline__content, + &--right .q-timeline__subtitle + float: left + padding-right: 30px + text-align: right + &--left .q-timeline__subtitle, + &--right .q-timeline__content + float: right + text-align: left + padding-left: 30px + &__subtitle, &__content + width: 50% +@media (prefers-color-scheme: dark) + .q-timeline--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + .q-timeline__subtitle + opacity: .7 +$toggle-transition = .22s cubic-bezier(.4,0,.2,1) +.q-toggle + vertical-align: middle + &__native + width: 1px + height: 1px + &__track + height: .35em + border-radius: .175em + opacity: .38 + background: currentColor + &__thumb + top: .25em + left: .25em + width: .5em + height: .5em + transition: left $toggle-transition + user-select: none + z-index: 0 + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: $light-page + background: var(--q-color-light-page) + box-shadow: 0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12) + .q-icon + font-size: .3em + min-width: 1em + color: $light-text + color: var(--q-color-light-text) + opacity: .54 + z-index: 1 + &__inner + font-size: 40px + width: 1.4em + min-width: 1.4em + height: 1em + padding: .325em .3em + -webkit-print-color-adjust: exact + &--indet + .q-toggle__thumb + left: .45em + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__track + opacity: .54 + .q-toggle__thumb + left: .65em + &:after + background-color: currentColor + .q-icon + color: $dark-text + color: var(--q-color-dark-text) + opacity: 1 + &.disabled + opacity: .75 !important + &--dark + .q-toggle__inner + color: $dark-text + color: var(--q-color-dark-text) + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__thumb:before + opacity: .32 !important + &--dense + .q-toggle__inner + width: .8em + min-width: .8em + height: .5em + padding: .07625em 0 + .q-toggle__thumb + top: 0 + left: 0 + .q-toggle__inner--indet + .q-toggle__thumb + left: .15em + .q-toggle__inner--truthy + .q-toggle__thumb + left: .3em + .q-toggle__label + padding-left: .5em + &.reverse .q-toggle__label + padding-left: 0 + padding-right: .5em +body.desktop + .q-toggle:not(.disabled) + .q-toggle__thumb:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $option-focus-transition + &:focus, + &:hover + .q-toggle__thumb:before + transform: scale3d(2, 2, 1) + .q-toggle--dense:not(.disabled) + &:focus, + &:hover + .q-toggle__thumb:before + transform: scale3d(1.5, 1.5, 1) +@media (prefers-color-scheme: dark) + .q-toggle--dark-auto + .q-toggle__inner + color: $dark-text + color: var(--q-color-dark-text) + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__thumb:before + opacity: .32 !important +.q-toolbar + position: relative + padding: $toolbar-padding + min-height: $toolbar-min-height + width: 100% + &--inset + padding-left: $toolbar-inset-size + .q-avatar + font-size: 38px +.q-toolbar__title + flex: 1 1 0% + min-width: 1px + max-width: 100% + font-size: $toolbar-title-font-size + font-weight: $toolbar-title-font-weight + letter-spacing: $toolbar-title-letter-spacing + padding: $toolbar-title-padding + &:first-child + padding-left: 0 + &:last-child + padding-right: 0 +.q-tooltip + padding: $tooltip-padding + opacity: 0 + &__container + position: fixed + z-index: $z-tooltip + contain: layout + contain: layout style + &--style + font-size: $tooltip-fontsize + color: $tooltip-color + background: $tooltip-background + border-radius: $tooltip-border-radius + text-transform: none + font-weight: normal + @media (max-width: $breakpoint-xs-max) + font-size: $tooltip-mobile-fontsize + padding: $tooltip-mobile-padding +.q-tree + position: relative + color: $grey + &__node + padding: 0 0 3px 22px + &:after + content: '' + position: absolute + top: -3px + bottom: 0 + width: 2px + right: auto + left: -13px + border-left: 1px solid currentColor + &:last-child:after + display: none + &--disabled + pointer-events: none + .disabled + opacity: 1 !important + > div, + > i, + > .disabled + opacity: .6 !important + .q-tree__node--disabled + > div, + > i, + > .disabled + opacity: 1 !important + &__node-header:before + content: '' + position: absolute + top: -3px + bottom: 50% + width: 31px + left: -35px + border-left: 1px solid currentColor + border-bottom: 1px solid currentColor + &__children + padding-left: 25px + &__node-body + padding: 5px 0 8px 5px + &__node--parent + padding-left: 2px + > .q-tree__node-header:before + width: 15px + left: -15px + > .q-tree__node-collapsible > .q-tree__node-body + padding: 5px 0 8px 27px + &:after + content: '' + position: absolute + top: 0 + width: 2px + height: 100% + right: auto + left: 12px + border-left: 1px solid currentColor + bottom: 50px + &__node--link + cursor: pointer + &__node-header + padding: 4px + margin-top: 3px + border-radius: $generic-border-radius + outline: 0 + &__node-header-content + color: $light-text + color: var(--q-color-light-text) + transition: color .3s + &__node--selected .q-tree__node-header-content + color: $grey + &__icon, + &__node-header-content .q-icon + font-size: 21px + &__img + height: 42px + border-radius: 2px + &__avatar, + &__node-header-content .q-avatar + font-size: 28px + border-radius: 50% + width: 28px + height: 28px + &__arrow, + &__spinner + font-size: 16px + margin-right: 4px + &__arrow + transition: transform .3s + &--rotate + transform: rotate3d(0, 0, 1, 90deg) + &__tickbox + margin-right: 4px + + > .q-tree__node + padding: 0 + &:after, > .q-tree__node-header:before + display: none + + > .q-tree__node--child > .q-tree__node-header + padding-left: 24px + &--dark + .q-tree__node-header-content + color: $dark-text + color: var(--q-color-dark-text) + &--no-connectors + .q-tree__node:after, + .q-tree__node-header:before, + .q-tree__node-body:after + display: none !important + &--dense + > .q-tree__node--child > .q-tree__node-header + padding-left: 1px + .q-tree + &__arrow, + &__spinner + margin-right: 1px + &__img + height: 32px + &__tickbox + margin-right: 3px + &__node + padding: 0 + &:after + top: 0 + left: -8px + &__node-header + margin-top: 0 + padding: 1px + &:before + top: 0 + left: -8px + width: 8px + &__node--child + padding-left: 17px + > .q-tree__node-header:before + left: -25px + width: 21px + &__node-body + padding: 0 0 2px + &__node--parent > .q-tree__node-collapsible > .q-tree__node-body + padding: 0 0 2px 20px + &:after + left: 8px + &__children + padding-left: 16px +[dir=rtl] + .q-tree__arrow + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */ + &--rotate + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */ +@media (prefers-color-scheme: dark) + .q-tree--dark-auto + .q-tree__node-header-content + color: $dark-text + color: var(--q-color-dark-text) +.q-uploader + box-shadow: $shadow-2 + border-radius: $generic-border-radius + vertical-align: top + position: relative + width: 320px + max-height: 320px + &--bordered + border: 1px solid $separator-color + &__input + opacity: 0 + width: 100% + height: 100% + cursor: pointer !important + z-index: 1 + + &::-webkit-file-upload-button + cursor: pointer + &__file + &:before + content: '' + border-top-left-radius: inherit + border-top-right-radius: inherit + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + pointer-events: none + background: currentColor + opacity: .04 + &__header + position: relative + border-top-left-radius: inherit + border-top-right-radius: inherit + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + width: 100% + &__spinner + font-size: 24px + margin-right: 4px + &__header-content + padding: 8px + &__dnd + outline: 1px dashed currentColor + outline-offset: -4px + background: rgba(255,255,255,.6) + &__overlay + font-size: 36px + color: $light-text + color: var(--q-color-light-text) + background-color: rgba(255,255,255,.6) + &__list + position: relative + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + padding: 8px + min-height: 60px + flex: 1 1 auto + &__file + border-radius: $generic-border-radius $generic-border-radius 0 0 + border: 1px solid $separator-color + .q-circular-progress + font-size: 24px + &--img + color: $dark-text + color: var(--q-color-dark-text) + height: 200px + min-width: 200px + background-position: 50% 50% + background-size: cover + background-repeat: no-repeat + &:before + content: none + .q-circular-progress + color: $dark-text + color: var(--q-color-dark-text) + .q-uploader__file-header + padding-bottom: 24px + background: linear-gradient(to bottom, rgba(0,0,0,.7) 20%, rgba(255,255,255,0)) + & + & + margin-top: 8px + &__file-header + position: relative + padding: 4px 8px + border-top-left-radius: inherit + border-top-right-radius: inherit + &__file-header-content + padding-right: 8px + &__file-status + font-size: 24px + margin-right: 4px + &__title + font-size: 14px + font-weight: bold + line-height: 18px + word-break: break-word + &__subtitle + font-size: 12px + line-height: 18px + &--disabled + .q-uploader__header, .q-uploader__list + pointer-events: none + &--dark + border-color: $separator-dark-color + .q-uploader__file + border-color: $separator-dark-color + .q-uploader__dnd, .q-uploader__overlay + background: rgba(255,255,255,.3) + .q-uploader__overlay + color: $dark-text + color: var(--q-color-dark-text) +@media (prefers-color-scheme: dark) + .q-uploader--dark-auto + border-color: $separator-dark-color + .q-uploader__file + border-color: $separator-dark-color + .q-uploader__dnd, .q-uploader__overlay + background: rgba(255,255,255,.3) + .q-uploader__overlay + color: $dark-text + color: var(--q-color-dark-text) +.q-video + position: relative + overflow: hidden + border-radius: inherit + iframe, + object, + embed + width: 100% + height: 100% + &--responsive + height: 0 + iframe, + object, + embed + position: absolute + top: 0 + left: 0 +.q-virtual-scroll + &:focus + outline: 0 + &__content + outline: none + contain: content + > * + overflow-anchor: none + > [data-q-vs-anchor] + overflow-anchor: auto + &__padding + background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) /* rtl:ignore */ + background-size: 100% 50px /* rtl:ignore */ + background-size: var(--q-virtual-scroll-item-width, 100%) var(--q-virtual-scroll-item-height, 50px) /* rtl:ignore */ + .q-table & + tr + height: 0 !important + td + padding: 0 !important + &--horizontal + display: flex + flex-direction: row + flex-wrap: nowrap + align-items: stretch + .q-virtual-scroll + &__content + display: flex + flex-direction: row + flex-wrap: nowrap + &__padding, + &__content, + &__content > * + flex: 0 0 auto + &__padding + background: linear-gradient(to left, rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) /* rtl:ignore */ + background-size: 50px 100% /* rtl:ignore */ + background-size: var(--q-virtual-scroll-item-width, 50px) var(--q-virtual-scroll-item-height, 100%) /* rtl:ignore */ +.q-ripple + position: absolute + top: 0 + left: 0 /* rtl:ignore */ + width: 100% + height: 100% + color: inherit + border-radius: inherit + z-index: 0 + pointer-events: none + overflow: hidden + contain: strict + &__inner + position: absolute + top: 0 + left: 0 /* rtl:ignore */ + opacity: 0 + color: inherit + border-radius: 50% + background: currentColor + background-clip: padding-box + pointer-events: none + will-change: transform, opacity + &--enter + transition: transform .225s cubic-bezier(.4, 0, .2, 1), opacity .1s cubic-bezier(.4, 0, .2, 1) + &--leave + transition: opacity .25s cubic-bezier(.4, 0, .2, 1) +.q-morph--invisible, +.q-morph--internal + opacity: 0 !important + pointer-events: none !important + position: fixed !important + right: 200vw !important + bottom: 200vh !important +.q-loading + color: $light-text + color: var(--q-color-light-text) + + position: fixed !important + &:before + content: '' + position: fixed + top: 0 + right: 0 + bottom: 0 + left: 0 + background: currentColor + opacity: .5 + z-index: -1 + > div + margin: 40px 20px 0 + max-width: 450px + text-align: center +.q-notifications__list + z-index: $z-notify + pointer-events: none + left: 0 + right: 0 + margin-bottom: 10px + position: relative + &--center + top: 0 + bottom: 0 + &--top + top: 0 + &--bottom + bottom: 0 +body.q-ios-padding .q-notifications__list + &--center, &--top + top: $ios-statusbar-height + top: env(safe-area-inset-top) + &--center, &--bottom + bottom: env(safe-area-inset-bottom) +.q-notification + box-shadow: $shadow-2 + border-radius: $generic-border-radius + pointer-events: all + display: inline-flex + margin: 10px 10px 0 + transition: transform 1s, opacity 1s + z-index: $z-notify + flex-shrink: 0 + max-width: 95vw + background: $notify-background + background: var(--q-color-notify-background) + color: $dark-text + color: var(--q-color-dark-text) + font-size: 14px + &__icon + font-size: 24px + flex: 0 0 1em + &--additional + margin-right: 16px + &__avatar + font-size: 32px + &--additional + margin-right: 8px + &__spinner + font-size: 32px + &--additional + margin-right: 8px + &__message + padding: 8px 0 + &__caption + font-size: 0.9em + opacity: 0.7 + &__actions + color: $primary + color: var(--q-color-primary) + &__badge + animation: q-notif-badge .42s + padding: 4px 8px + position: absolute + background: $negative + box-shadow: $shadow-1 + background-color: $negative + background-color: var(--q-color-negative) + color: $dark-text + color: var(--q-color-dark-text) + border-radius: $generic-border-radius + font-size: 12px + line-height: 12px + &--top-left, + &--top-right + top: -6px + &--bottom-left, + &--bottom-right + bottom: -6px + &--top-left, + &--bottom-left + left: -22px + &--top-right, + &--bottom-right + right: -22px + &__progress + z-index: -1 + position: absolute + height: 3px + bottom: 0 + left: -10px + right: -10px + animation: q-notif-progress linear + background: currentColor + opacity: .3 + border-radius: $generic-border-radius $generic-border-radius 0 0 + transform-origin: 0 50% + transform: scaleX(0) + &--standard + padding: 0 16px + min-height: 48px + .q-notification__actions + padding: 6px 0 6px 8px + margin-right: -8px + &--multi-line + min-height: 68px + padding: 8px 16px + .q-notification__badge + &--top-left, + &--top-right + top: -15px + &--bottom-left, + &--bottom-right + bottom: -15px + .q-notification__progress + bottom: -8px + .q-notification__actions + padding: 0 + &--with-media + padding-left: 25px + &--top-left-enter, &--top-left-leave-to, + &--top-enter, &--top-leave-to, + &--top-right-enter, &--top-right-leave-to + opacity: 0 + transform: translateY(-50px) + z-index: ($z-notify - 1) + &--left-enter, &--left-leave-to, + &--center-enter, &--center-leave-to, + &--right-enter, &--right-leave-to + opacity: 0 + transform: rotateX(90deg) + z-index: ($z-notify - 1) + &--bottom-left-enter, &--bottom-left-leave-to, + &--bottom-enter, &--bottom-leave-to, + &--bottom-right-enter, &--bottom-right-leave-to + opacity: 0 + transform: translateY(50px) + z-index: ($z-notify - 1) + &--top-left-leave-active, + &--top-leave-active, + &--top-right-leave-active, + &--left-leave-active, + &--center-leave-active, + &--right-leave-active, + &--bottom-left-leave-active, + &--bottom-leave-active, + &--bottom-right-leave-active + position: absolute + z-index: ($z-notify - 1) + margin-left: 0 + margin-right: 0 + &--top-leave-active, + &--center-leave-active + top: 0 + &--bottom-left-leave-active, + &--bottom-leave-active, + &--bottom-right-leave-active + bottom: 0 +@media (min-width: $breakpoint-sm-min) + .q-notification + max-width: 65vw +@keyframes q-notif-badge + 15% + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg) + 30% + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg) + 45% + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg) + 60% + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg) + 75% + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg) +@keyframes q-notif-progress + 0% + transform: scaleX(1) + 100% + transform: scaleX(0) +/* + * Animate.css additions + * Adapted from: https: + */ +:root + --animate-duration: $animate-duration + --animate-delay: $animate-delay + --animate-repeat: $animate-repeat +.animated + animation-duration: var(--animate-duration) + animation-fill-mode: both + &.infinite + animation-iteration-count: infinite + + &.hinge + animation-duration: 2s + &.repeat-1 + animation-iteration-count: var(--animate-repeat) + &.repeat-2 + animation-iteration-count: calc(var(--animate-repeat) * 2) + &.repeat-3 + animation-iteration-count: calc(var(--animate-repeat) * 3) + &.delay-1s + animation-delay: var(--animate-delay) + &.delay-2s + animation-delay: calc(var(--animate-delay) * 2) + &.delay-3s + animation-delay: calc(var(--animate-delay) * 3) + &.delay-4s + animation-delay: calc(var(--animate-delay) * 4) + &.delay-5s + animation-delay: calc(var(--animate-delay) * 5) + &.faster + animation-duration: calc(var(--animate-duration) / 2) + &.fast + animation-duration: calc(var(--animate-duration) * 0.8) + &.slow + animation-duration: calc(var(--animate-duration) * 2) + &.slower + animation-duration: calc(var(--animate-duration) * 3) +@media print, (prefers-reduced-motion: reduce) + .animated + animation-duration: 1ms !important + transition-duration: 1ms !important + animation-iteration-count: 1 !important + .animated[class*='Out'] + opacity: 0 +.q-animate--scale + animation: q-scale .15s + animation-timing-function: cubic-bezier(.25,.8,.25,1) +@keyframes q-scale + 0% + transform: scale(1) + 50% + transform: scale(1.04) + 100% + transform: scale(1) +.q-animate--fade + animation: q-fade .2s /* rtl:ignore */ +@keyframes q-fade + 0% + opacity: 0 + 100% + opacity: 1 +:root + --q-color-primary: $primary + --q-color-secondary: $secondary + --q-color-accent: $accent + --q-color-positive: $positive + --q-color-negative: $negative + --q-color-info: $info + --q-color-warning: $warning + --q-color-dark: $dark + --q-color-light-text: $light-text + --q-color-light-page: $light-page + --q-color-dark-text: $dark-text + --q-color-dark-page: $dark-page + --q-color-backdrop-background: $backdrop-background + --q-color-notify-background: $notify-background + --q-color-chip-background-light: $chip-background-light + --q-color-chip-background-dark: $chip-background-dark + --q-color-dialog-plugin-light: $dialog-plugin-light + --q-color-dialog-plugin-dark: $dialog-plugin-dark +.text-dark + color: $dark !important + color: var(--q-color-dark) !important +.bg-dark + background: $dark !important + background: var(--q-color-dark) !important +.text-dialog-plugin-light, +.text-dialog-plugin-dark-auto + color: $dialog-plugin-light !important + color: var(--q-color-dialog-plugin-light) !important +.bg-dialog-plugin-light, +.bg-dialog-plugin-dark-auto + background: $dialog-plugin-light !important + background: var(--q-color-dialog-plugin-light) !important +.text-dialog-plugin-dark + color: $dialog-plugin-dark !important + color: var(--q-color-dialog-plugin-dark) !important +.bg-dialog-plugin-dark + background: $dialog-plugin-dark !important + background: var(--q-color-dialog-plugin-dark) !important +@media (prefers-color-scheme: dark) + .text-dialog-plugin-dark-auto + color: $dialog-plugin-dark !important + color: var(--q-color-dialog-plugin-dark) !important + .bg-dialog-plugin-dark-auto + background: $dialog-plugin-dark !important + background: var(--q-color-dialog-plugin-dark) !important +.text-primary + color: $primary !important + color: var(--q-color-primary) !important +.bg-primary + background: $primary !important + background: var(--q-color-primary) !important +.text-secondary + color: $secondary !important + color: var(--q-color-secondary) !important +.bg-secondary + background: $secondary !important + background: var(--q-color-secondary) !important +.text-accent + color: $accent !important + color: var(--q-color-accent) !important +.bg-accent + background: $accent !important + background: var(--q-color-accent) !important +.text-positive + color: $positive !important + color: var(--q-color-positive) !important +.bg-positive + background: $positive !important + background: var(--q-color-positive) !important +.text-negative + color: $negative !important + color: var(--q-color-negative) !important +.bg-negative + background: $negative !important + background: var(--q-color-negative) !important +.text-info + color: $info !important + color: var(--q-color-info) !important +.bg-info + background: $info !important + background: var(--q-color-info) !important +.text-warning + color: $warning !important + color: var(--q-color-warning) !important +.bg-warning + background: $warning !important + background: var(--q-color-warning) !important +.text-white + color: #fff !important +.bg-white + background: #fff !important +.text-black + color: #000 !important +.bg-black + background: #000 !important +.text-transparent + color: transparent !important +.bg-transparent + background: transparent !important +.text-separator + color: $separator-color !important +.bg-separator + background: $separator-color !important +.text-dark-separator + color: $separator-dark-color !important +.bg-dark-separator + background: $separator-dark-color !important +.text-red + color: $red !important +.text-red-1 + color: $red-1 !important +.text-red-2 + color: $red-2 !important +.text-red-3 + color: $red-3 !important +.text-red-4 + color: $red-4 !important +.text-red-5 + color: $red-5 !important +.text-red-6 + color: $red-6 !important +.text-red-7 + color: $red-7 !important +.text-red-8 + color: $red-8 !important +.text-red-9 + color: $red-9 !important +.text-red-10 + color: $red-10 !important +.text-red-11 + color: $red-11 !important +.text-red-12 + color: $red-12 !important +.text-red-13 + color: $red-13 !important +.text-red-14 + color: $red-14 !important +.text-pink + color: $pink !important +.text-pink-1 + color: $pink-1 !important +.text-pink-2 + color: $pink-2 !important +.text-pink-3 + color: $pink-3 !important +.text-pink-4 + color: $pink-4 !important +.text-pink-5 + color: $pink-5 !important +.text-pink-6 + color: $pink-6 !important +.text-pink-7 + color: $pink-7 !important +.text-pink-8 + color: $pink-8 !important +.text-pink-9 + color: $pink-9 !important +.text-pink-10 + color: $pink-10 !important +.text-pink-11 + color: $pink-11 !important +.text-pink-12 + color: $pink-12 !important +.text-pink-13 + color: $pink-13 !important +.text-pink-14 + color: $pink-14 !important +.text-purple + color: $purple !important +.text-purple-1 + color: $purple-1 !important +.text-purple-2 + color: $purple-2 !important +.text-purple-3 + color: $purple-3 !important +.text-purple-4 + color: $purple-4 !important +.text-purple-5 + color: $purple-5 !important +.text-purple-6 + color: $purple-6 !important +.text-purple-7 + color: $purple-7 !important +.text-purple-8 + color: $purple-8 !important +.text-purple-9 + color: $purple-9 !important +.text-purple-10 + color: $purple-10 !important +.text-purple-11 + color: $purple-11 !important +.text-purple-12 + color: $purple-12 !important +.text-purple-13 + color: $purple-13 !important +.text-purple-14 + color: $purple-14 !important +.text-deep-purple + color: $deep-purple !important +.text-deep-purple-1 + color: $deep-purple-1 !important +.text-deep-purple-2 + color: $deep-purple-2 !important +.text-deep-purple-3 + color: $deep-purple-3 !important +.text-deep-purple-4 + color: $deep-purple-4 !important +.text-deep-purple-5 + color: $deep-purple-5 !important +.text-deep-purple-6 + color: $deep-purple-6 !important +.text-deep-purple-7 + color: $deep-purple-7 !important +.text-deep-purple-8 + color: $deep-purple-8 !important +.text-deep-purple-9 + color: $deep-purple-9 !important +.text-deep-purple-10 + color: $deep-purple-10 !important +.text-deep-purple-11 + color: $deep-purple-11 !important +.text-deep-purple-12 + color: $deep-purple-12 !important +.text-deep-purple-13 + color: $deep-purple-13 !important +.text-deep-purple-14 + color: $deep-purple-14 !important +.text-indigo + color: $indigo !important +.text-indigo-1 + color: $indigo-1 !important +.text-indigo-2 + color: $indigo-2 !important +.text-indigo-3 + color: $indigo-3 !important +.text-indigo-4 + color: $indigo-4 !important +.text-indigo-5 + color: $indigo-5 !important +.text-indigo-6 + color: $indigo-6 !important +.text-indigo-7 + color: $indigo-7 !important +.text-indigo-8 + color: $indigo-8 !important +.text-indigo-9 + color: $indigo-9 !important +.text-indigo-10 + color: $indigo-10 !important +.text-indigo-11 + color: $indigo-11 !important +.text-indigo-12 + color: $indigo-12 !important +.text-indigo-13 + color: $indigo-13 !important +.text-indigo-14 + color: $indigo-14 !important +.text-blue + color: $blue !important +.text-blue-1 + color: $blue-1 !important +.text-blue-2 + color: $blue-2 !important +.text-blue-3 + color: $blue-3 !important +.text-blue-4 + color: $blue-4 !important +.text-blue-5 + color: $blue-5 !important +.text-blue-6 + color: $blue-6 !important +.text-blue-7 + color: $blue-7 !important +.text-blue-8 + color: $blue-8 !important +.text-blue-9 + color: $blue-9 !important +.text-blue-10 + color: $blue-10 !important +.text-blue-11 + color: $blue-11 !important +.text-blue-12 + color: $blue-12 !important +.text-blue-13 + color: $blue-13 !important +.text-blue-14 + color: $blue-14 !important +.text-light-blue + color: $light-blue !important +.text-light-blue-1 + color: $light-blue-1 !important +.text-light-blue-2 + color: $light-blue-2 !important +.text-light-blue-3 + color: $light-blue-3 !important +.text-light-blue-4 + color: $light-blue-4 !important +.text-light-blue-5 + color: $light-blue-5 !important +.text-light-blue-6 + color: $light-blue-6 !important +.text-light-blue-7 + color: $light-blue-7 !important +.text-light-blue-8 + color: $light-blue-8 !important +.text-light-blue-9 + color: $light-blue-9 !important +.text-light-blue-10 + color: $light-blue-10 !important +.text-light-blue-11 + color: $light-blue-11 !important +.text-light-blue-12 + color: $light-blue-12 !important +.text-light-blue-13 + color: $light-blue-13 !important +.text-light-blue-14 + color: $light-blue-14 !important +.text-cyan + color: $cyan !important +.text-cyan-1 + color: $cyan-1 !important +.text-cyan-2 + color: $cyan-2 !important +.text-cyan-3 + color: $cyan-3 !important +.text-cyan-4 + color: $cyan-4 !important +.text-cyan-5 + color: $cyan-5 !important +.text-cyan-6 + color: $cyan-6 !important +.text-cyan-7 + color: $cyan-7 !important +.text-cyan-8 + color: $cyan-8 !important +.text-cyan-9 + color: $cyan-9 !important +.text-cyan-10 + color: $cyan-10 !important +.text-cyan-11 + color: $cyan-11 !important +.text-cyan-12 + color: $cyan-12 !important +.text-cyan-13 + color: $cyan-13 !important +.text-cyan-14 + color: $cyan-14 !important +.text-teal + color: $teal !important +.text-teal-1 + color: $teal-1 !important +.text-teal-2 + color: $teal-2 !important +.text-teal-3 + color: $teal-3 !important +.text-teal-4 + color: $teal-4 !important +.text-teal-5 + color: $teal-5 !important +.text-teal-6 + color: $teal-6 !important +.text-teal-7 + color: $teal-7 !important +.text-teal-8 + color: $teal-8 !important +.text-teal-9 + color: $teal-9 !important +.text-teal-10 + color: $teal-10 !important +.text-teal-11 + color: $teal-11 !important +.text-teal-12 + color: $teal-12 !important +.text-teal-13 + color: $teal-13 !important +.text-teal-14 + color: $teal-14 !important +.text-green + color: $green !important +.text-green-1 + color: $green-1 !important +.text-green-2 + color: $green-2 !important +.text-green-3 + color: $green-3 !important +.text-green-4 + color: $green-4 !important +.text-green-5 + color: $green-5 !important +.text-green-6 + color: $green-6 !important +.text-green-7 + color: $green-7 !important +.text-green-8 + color: $green-8 !important +.text-green-9 + color: $green-9 !important +.text-green-10 + color: $green-10 !important +.text-green-11 + color: $green-11 !important +.text-green-12 + color: $green-12 !important +.text-green-13 + color: $green-13 !important +.text-green-14 + color: $green-14 !important +.text-light-green + color: $light-green !important +.text-light-green-1 + color: $light-green-1 !important +.text-light-green-2 + color: $light-green-2 !important +.text-light-green-3 + color: $light-green-3 !important +.text-light-green-4 + color: $light-green-4 !important +.text-light-green-5 + color: $light-green-5 !important +.text-light-green-6 + color: $light-green-6 !important +.text-light-green-7 + color: $light-green-7 !important +.text-light-green-8 + color: $light-green-8 !important +.text-light-green-9 + color: $light-green-9 !important +.text-light-green-10 + color: $light-green-10 !important +.text-light-green-11 + color: $light-green-11 !important +.text-light-green-12 + color: $light-green-12 !important +.text-light-green-13 + color: $light-green-13 !important +.text-light-green-14 + color: $light-green-14 !important +.text-lime + color: $lime !important +.text-lime-1 + color: $lime-1 !important +.text-lime-2 + color: $lime-2 !important +.text-lime-3 + color: $lime-3 !important +.text-lime-4 + color: $lime-4 !important +.text-lime-5 + color: $lime-5 !important +.text-lime-6 + color: $lime-6 !important +.text-lime-7 + color: $lime-7 !important +.text-lime-8 + color: $lime-8 !important +.text-lime-9 + color: $lime-9 !important +.text-lime-10 + color: $lime-10 !important +.text-lime-11 + color: $lime-11 !important +.text-lime-12 + color: $lime-12 !important +.text-lime-13 + color: $lime-13 !important +.text-lime-14 + color: $lime-14 !important +.text-yellow + color: $yellow !important +.text-yellow-1 + color: $yellow-1 !important +.text-yellow-2 + color: $yellow-2 !important +.text-yellow-3 + color: $yellow-3 !important +.text-yellow-4 + color: $yellow-4 !important +.text-yellow-5 + color: $yellow-5 !important +.text-yellow-6 + color: $yellow-6 !important +.text-yellow-7 + color: $yellow-7 !important +.text-yellow-8 + color: $yellow-8 !important +.text-yellow-9 + color: $yellow-9 !important +.text-yellow-10 + color: $yellow-10 !important +.text-yellow-11 + color: $yellow-11 !important +.text-yellow-12 + color: $yellow-12 !important +.text-yellow-13 + color: $yellow-13 !important +.text-yellow-14 + color: $yellow-14 !important +.text-amber + color: $amber !important +.text-amber-1 + color: $amber-1 !important +.text-amber-2 + color: $amber-2 !important +.text-amber-3 + color: $amber-3 !important +.text-amber-4 + color: $amber-4 !important +.text-amber-5 + color: $amber-5 !important +.text-amber-6 + color: $amber-6 !important +.text-amber-7 + color: $amber-7 !important +.text-amber-8 + color: $amber-8 !important +.text-amber-9 + color: $amber-9 !important +.text-amber-10 + color: $amber-10 !important +.text-amber-11 + color: $amber-11 !important +.text-amber-12 + color: $amber-12 !important +.text-amber-13 + color: $amber-13 !important +.text-amber-14 + color: $amber-14 !important +.text-orange + color: $orange !important +.text-orange-1 + color: $orange-1 !important +.text-orange-2 + color: $orange-2 !important +.text-orange-3 + color: $orange-3 !important +.text-orange-4 + color: $orange-4 !important +.text-orange-5 + color: $orange-5 !important +.text-orange-6 + color: $orange-6 !important +.text-orange-7 + color: $orange-7 !important +.text-orange-8 + color: $orange-8 !important +.text-orange-9 + color: $orange-9 !important +.text-orange-10 + color: $orange-10 !important +.text-orange-11 + color: $orange-11 !important +.text-orange-12 + color: $orange-12 !important +.text-orange-13 + color: $orange-13 !important +.text-orange-14 + color: $orange-14 !important +.text-deep-orange + color: $deep-orange !important +.text-deep-orange-1 + color: $deep-orange-1 !important +.text-deep-orange-2 + color: $deep-orange-2 !important +.text-deep-orange-3 + color: $deep-orange-3 !important +.text-deep-orange-4 + color: $deep-orange-4 !important +.text-deep-orange-5 + color: $deep-orange-5 !important +.text-deep-orange-6 + color: $deep-orange-6 !important +.text-deep-orange-7 + color: $deep-orange-7 !important +.text-deep-orange-8 + color: $deep-orange-8 !important +.text-deep-orange-9 + color: $deep-orange-9 !important +.text-deep-orange-10 + color: $deep-orange-10 !important +.text-deep-orange-11 + color: $deep-orange-11 !important +.text-deep-orange-12 + color: $deep-orange-12 !important +.text-deep-orange-13 + color: $deep-orange-13 !important +.text-deep-orange-14 + color: $deep-orange-14 !important +.text-brown + color: $brown !important +.text-brown-1 + color: $brown-1 !important +.text-brown-2 + color: $brown-2 !important +.text-brown-3 + color: $brown-3 !important +.text-brown-4 + color: $brown-4 !important +.text-brown-5 + color: $brown-5 !important +.text-brown-6 + color: $brown-6 !important +.text-brown-7 + color: $brown-7 !important +.text-brown-8 + color: $brown-8 !important +.text-brown-9 + color: $brown-9 !important +.text-brown-10 + color: $brown-10 !important +.text-brown-11 + color: $brown-11 !important +.text-brown-12 + color: $brown-12 !important +.text-brown-13 + color: $brown-13 !important +.text-brown-14 + color: $brown-14 !important +.text-grey + color: $grey !important +.text-grey-1 + color: $grey-1 !important +.text-grey-2 + color: $grey-2 !important +.text-grey-3 + color: $grey-3 !important +.text-grey-4 + color: $grey-4 !important +.text-grey-5 + color: $grey-5 !important +.text-grey-6 + color: $grey-6 !important +.text-grey-7 + color: $grey-7 !important +.text-grey-8 + color: $grey-8 !important +.text-grey-9 + color: $grey-9 !important +.text-grey-10 + color: $grey-10 !important +.text-grey-11 + color: $grey-11 !important +.text-grey-12 + color: $grey-12 !important +.text-grey-13 + color: $grey-13 !important +.text-grey-14 + color: $grey-14 !important +.text-blue-grey + color: $blue-grey !important +.text-blue-grey-1 + color: $blue-grey-1 !important +.text-blue-grey-2 + color: $blue-grey-2 !important +.text-blue-grey-3 + color: $blue-grey-3 !important +.text-blue-grey-4 + color: $blue-grey-4 !important +.text-blue-grey-5 + color: $blue-grey-5 !important +.text-blue-grey-6 + color: $blue-grey-6 !important +.text-blue-grey-7 + color: $blue-grey-7 !important +.text-blue-grey-8 + color: $blue-grey-8 !important +.text-blue-grey-9 + color: $blue-grey-9 !important +.text-blue-grey-10 + color: $blue-grey-10 !important +.text-blue-grey-11 + color: $blue-grey-11 !important +.text-blue-grey-12 + color: $blue-grey-12 !important +.text-blue-grey-13 + color: $blue-grey-13 !important +.text-blue-grey-14 + color: $blue-grey-14 !important +.bg-red + background: $red !important +.bg-red-1 + background: $red-1 !important +.bg-red-2 + background: $red-2 !important +.bg-red-3 + background: $red-3 !important +.bg-red-4 + background: $red-4 !important +.bg-red-5 + background: $red-5 !important +.bg-red-6 + background: $red-6 !important +.bg-red-7 + background: $red-7 !important +.bg-red-8 + background: $red-8 !important +.bg-red-9 + background: $red-9 !important +.bg-red-10 + background: $red-10 !important +.bg-red-11 + background: $red-11 !important +.bg-red-12 + background: $red-12 !important +.bg-red-13 + background: $red-13 !important +.bg-red-14 + background: $red-14 !important +.bg-pink + background: $pink !important +.bg-pink-1 + background: $pink-1 !important +.bg-pink-2 + background: $pink-2 !important +.bg-pink-3 + background: $pink-3 !important +.bg-pink-4 + background: $pink-4 !important +.bg-pink-5 + background: $pink-5 !important +.bg-pink-6 + background: $pink-6 !important +.bg-pink-7 + background: $pink-7 !important +.bg-pink-8 + background: $pink-8 !important +.bg-pink-9 + background: $pink-9 !important +.bg-pink-10 + background: $pink-10 !important +.bg-pink-11 + background: $pink-11 !important +.bg-pink-12 + background: $pink-12 !important +.bg-pink-13 + background: $pink-13 !important +.bg-pink-14 + background: $pink-14 !important +.bg-purple + background: $purple !important +.bg-purple-1 + background: $purple-1 !important +.bg-purple-2 + background: $purple-2 !important +.bg-purple-3 + background: $purple-3 !important +.bg-purple-4 + background: $purple-4 !important +.bg-purple-5 + background: $purple-5 !important +.bg-purple-6 + background: $purple-6 !important +.bg-purple-7 + background: $purple-7 !important +.bg-purple-8 + background: $purple-8 !important +.bg-purple-9 + background: $purple-9 !important +.bg-purple-10 + background: $purple-10 !important +.bg-purple-11 + background: $purple-11 !important +.bg-purple-12 + background: $purple-12 !important +.bg-purple-13 + background: $purple-13 !important +.bg-purple-14 + background: $purple-14 !important +.bg-deep-purple + background: $deep-purple !important +.bg-deep-purple-1 + background: $deep-purple-1 !important +.bg-deep-purple-2 + background: $deep-purple-2 !important +.bg-deep-purple-3 + background: $deep-purple-3 !important +.bg-deep-purple-4 + background: $deep-purple-4 !important +.bg-deep-purple-5 + background: $deep-purple-5 !important +.bg-deep-purple-6 + background: $deep-purple-6 !important +.bg-deep-purple-7 + background: $deep-purple-7 !important +.bg-deep-purple-8 + background: $deep-purple-8 !important +.bg-deep-purple-9 + background: $deep-purple-9 !important +.bg-deep-purple-10 + background: $deep-purple-10 !important +.bg-deep-purple-11 + background: $deep-purple-11 !important +.bg-deep-purple-12 + background: $deep-purple-12 !important +.bg-deep-purple-13 + background: $deep-purple-13 !important +.bg-deep-purple-14 + background: $deep-purple-14 !important +.bg-indigo + background: $indigo !important +.bg-indigo-1 + background: $indigo-1 !important +.bg-indigo-2 + background: $indigo-2 !important +.bg-indigo-3 + background: $indigo-3 !important +.bg-indigo-4 + background: $indigo-4 !important +.bg-indigo-5 + background: $indigo-5 !important +.bg-indigo-6 + background: $indigo-6 !important +.bg-indigo-7 + background: $indigo-7 !important +.bg-indigo-8 + background: $indigo-8 !important +.bg-indigo-9 + background: $indigo-9 !important +.bg-indigo-10 + background: $indigo-10 !important +.bg-indigo-11 + background: $indigo-11 !important +.bg-indigo-12 + background: $indigo-12 !important +.bg-indigo-13 + background: $indigo-13 !important +.bg-indigo-14 + background: $indigo-14 !important +.bg-blue + background: $blue !important +.bg-blue-1 + background: $blue-1 !important +.bg-blue-2 + background: $blue-2 !important +.bg-blue-3 + background: $blue-3 !important +.bg-blue-4 + background: $blue-4 !important +.bg-blue-5 + background: $blue-5 !important +.bg-blue-6 + background: $blue-6 !important +.bg-blue-7 + background: $blue-7 !important +.bg-blue-8 + background: $blue-8 !important +.bg-blue-9 + background: $blue-9 !important +.bg-blue-10 + background: $blue-10 !important +.bg-blue-11 + background: $blue-11 !important +.bg-blue-12 + background: $blue-12 !important +.bg-blue-13 + background: $blue-13 !important +.bg-blue-14 + background: $blue-14 !important +.bg-light-blue + background: $light-blue !important +.bg-light-blue-1 + background: $light-blue-1 !important +.bg-light-blue-2 + background: $light-blue-2 !important +.bg-light-blue-3 + background: $light-blue-3 !important +.bg-light-blue-4 + background: $light-blue-4 !important +.bg-light-blue-5 + background: $light-blue-5 !important +.bg-light-blue-6 + background: $light-blue-6 !important +.bg-light-blue-7 + background: $light-blue-7 !important +.bg-light-blue-8 + background: $light-blue-8 !important +.bg-light-blue-9 + background: $light-blue-9 !important +.bg-light-blue-10 + background: $light-blue-10 !important +.bg-light-blue-11 + background: $light-blue-11 !important +.bg-light-blue-12 + background: $light-blue-12 !important +.bg-light-blue-13 + background: $light-blue-13 !important +.bg-light-blue-14 + background: $light-blue-14 !important +.bg-cyan + background: $cyan !important +.bg-cyan-1 + background: $cyan-1 !important +.bg-cyan-2 + background: $cyan-2 !important +.bg-cyan-3 + background: $cyan-3 !important +.bg-cyan-4 + background: $cyan-4 !important +.bg-cyan-5 + background: $cyan-5 !important +.bg-cyan-6 + background: $cyan-6 !important +.bg-cyan-7 + background: $cyan-7 !important +.bg-cyan-8 + background: $cyan-8 !important +.bg-cyan-9 + background: $cyan-9 !important +.bg-cyan-10 + background: $cyan-10 !important +.bg-cyan-11 + background: $cyan-11 !important +.bg-cyan-12 + background: $cyan-12 !important +.bg-cyan-13 + background: $cyan-13 !important +.bg-cyan-14 + background: $cyan-14 !important +.bg-teal + background: $teal !important +.bg-teal-1 + background: $teal-1 !important +.bg-teal-2 + background: $teal-2 !important +.bg-teal-3 + background: $teal-3 !important +.bg-teal-4 + background: $teal-4 !important +.bg-teal-5 + background: $teal-5 !important +.bg-teal-6 + background: $teal-6 !important +.bg-teal-7 + background: $teal-7 !important +.bg-teal-8 + background: $teal-8 !important +.bg-teal-9 + background: $teal-9 !important +.bg-teal-10 + background: $teal-10 !important +.bg-teal-11 + background: $teal-11 !important +.bg-teal-12 + background: $teal-12 !important +.bg-teal-13 + background: $teal-13 !important +.bg-teal-14 + background: $teal-14 !important +.bg-green + background: $green !important +.bg-green-1 + background: $green-1 !important +.bg-green-2 + background: $green-2 !important +.bg-green-3 + background: $green-3 !important +.bg-green-4 + background: $green-4 !important +.bg-green-5 + background: $green-5 !important +.bg-green-6 + background: $green-6 !important +.bg-green-7 + background: $green-7 !important +.bg-green-8 + background: $green-8 !important +.bg-green-9 + background: $green-9 !important +.bg-green-10 + background: $green-10 !important +.bg-green-11 + background: $green-11 !important +.bg-green-12 + background: $green-12 !important +.bg-green-13 + background: $green-13 !important +.bg-green-14 + background: $green-14 !important +.bg-light-green + background: $light-green !important +.bg-light-green-1 + background: $light-green-1 !important +.bg-light-green-2 + background: $light-green-2 !important +.bg-light-green-3 + background: $light-green-3 !important +.bg-light-green-4 + background: $light-green-4 !important +.bg-light-green-5 + background: $light-green-5 !important +.bg-light-green-6 + background: $light-green-6 !important +.bg-light-green-7 + background: $light-green-7 !important +.bg-light-green-8 + background: $light-green-8 !important +.bg-light-green-9 + background: $light-green-9 !important +.bg-light-green-10 + background: $light-green-10 !important +.bg-light-green-11 + background: $light-green-11 !important +.bg-light-green-12 + background: $light-green-12 !important +.bg-light-green-13 + background: $light-green-13 !important +.bg-light-green-14 + background: $light-green-14 !important +.bg-lime + background: $lime !important +.bg-lime-1 + background: $lime-1 !important +.bg-lime-2 + background: $lime-2 !important +.bg-lime-3 + background: $lime-3 !important +.bg-lime-4 + background: $lime-4 !important +.bg-lime-5 + background: $lime-5 !important +.bg-lime-6 + background: $lime-6 !important +.bg-lime-7 + background: $lime-7 !important +.bg-lime-8 + background: $lime-8 !important +.bg-lime-9 + background: $lime-9 !important +.bg-lime-10 + background: $lime-10 !important +.bg-lime-11 + background: $lime-11 !important +.bg-lime-12 + background: $lime-12 !important +.bg-lime-13 + background: $lime-13 !important +.bg-lime-14 + background: $lime-14 !important +.bg-yellow + background: $yellow !important +.bg-yellow-1 + background: $yellow-1 !important +.bg-yellow-2 + background: $yellow-2 !important +.bg-yellow-3 + background: $yellow-3 !important +.bg-yellow-4 + background: $yellow-4 !important +.bg-yellow-5 + background: $yellow-5 !important +.bg-yellow-6 + background: $yellow-6 !important +.bg-yellow-7 + background: $yellow-7 !important +.bg-yellow-8 + background: $yellow-8 !important +.bg-yellow-9 + background: $yellow-9 !important +.bg-yellow-10 + background: $yellow-10 !important +.bg-yellow-11 + background: $yellow-11 !important +.bg-yellow-12 + background: $yellow-12 !important +.bg-yellow-13 + background: $yellow-13 !important +.bg-yellow-14 + background: $yellow-14 !important +.bg-amber + background: $amber !important +.bg-amber-1 + background: $amber-1 !important +.bg-amber-2 + background: $amber-2 !important +.bg-amber-3 + background: $amber-3 !important +.bg-amber-4 + background: $amber-4 !important +.bg-amber-5 + background: $amber-5 !important +.bg-amber-6 + background: $amber-6 !important +.bg-amber-7 + background: $amber-7 !important +.bg-amber-8 + background: $amber-8 !important +.bg-amber-9 + background: $amber-9 !important +.bg-amber-10 + background: $amber-10 !important +.bg-amber-11 + background: $amber-11 !important +.bg-amber-12 + background: $amber-12 !important +.bg-amber-13 + background: $amber-13 !important +.bg-amber-14 + background: $amber-14 !important +.bg-orange + background: $orange !important +.bg-orange-1 + background: $orange-1 !important +.bg-orange-2 + background: $orange-2 !important +.bg-orange-3 + background: $orange-3 !important +.bg-orange-4 + background: $orange-4 !important +.bg-orange-5 + background: $orange-5 !important +.bg-orange-6 + background: $orange-6 !important +.bg-orange-7 + background: $orange-7 !important +.bg-orange-8 + background: $orange-8 !important +.bg-orange-9 + background: $orange-9 !important +.bg-orange-10 + background: $orange-10 !important +.bg-orange-11 + background: $orange-11 !important +.bg-orange-12 + background: $orange-12 !important +.bg-orange-13 + background: $orange-13 !important +.bg-orange-14 + background: $orange-14 !important +.bg-deep-orange + background: $deep-orange !important +.bg-deep-orange-1 + background: $deep-orange-1 !important +.bg-deep-orange-2 + background: $deep-orange-2 !important +.bg-deep-orange-3 + background: $deep-orange-3 !important +.bg-deep-orange-4 + background: $deep-orange-4 !important +.bg-deep-orange-5 + background: $deep-orange-5 !important +.bg-deep-orange-6 + background: $deep-orange-6 !important +.bg-deep-orange-7 + background: $deep-orange-7 !important +.bg-deep-orange-8 + background: $deep-orange-8 !important +.bg-deep-orange-9 + background: $deep-orange-9 !important +.bg-deep-orange-10 + background: $deep-orange-10 !important +.bg-deep-orange-11 + background: $deep-orange-11 !important +.bg-deep-orange-12 + background: $deep-orange-12 !important +.bg-deep-orange-13 + background: $deep-orange-13 !important +.bg-deep-orange-14 + background: $deep-orange-14 !important +.bg-brown + background: $brown !important +.bg-brown-1 + background: $brown-1 !important +.bg-brown-2 + background: $brown-2 !important +.bg-brown-3 + background: $brown-3 !important +.bg-brown-4 + background: $brown-4 !important +.bg-brown-5 + background: $brown-5 !important +.bg-brown-6 + background: $brown-6 !important +.bg-brown-7 + background: $brown-7 !important +.bg-brown-8 + background: $brown-8 !important +.bg-brown-9 + background: $brown-9 !important +.bg-brown-10 + background: $brown-10 !important +.bg-brown-11 + background: $brown-11 !important +.bg-brown-12 + background: $brown-12 !important +.bg-brown-13 + background: $brown-13 !important +.bg-brown-14 + background: $brown-14 !important +.bg-grey + background: $grey !important +.bg-grey-1 + background: $grey-1 !important +.bg-grey-2 + background: $grey-2 !important +.bg-grey-3 + background: $grey-3 !important +.bg-grey-4 + background: $grey-4 !important +.bg-grey-5 + background: $grey-5 !important +.bg-grey-6 + background: $grey-6 !important +.bg-grey-7 + background: $grey-7 !important +.bg-grey-8 + background: $grey-8 !important +.bg-grey-9 + background: $grey-9 !important +.bg-grey-10 + background: $grey-10 !important +.bg-grey-11 + background: $grey-11 !important +.bg-grey-12 + background: $grey-12 !important +.bg-grey-13 + background: $grey-13 !important +.bg-grey-14 + background: $grey-14 !important +.bg-blue-grey + background: $blue-grey !important +.bg-blue-grey-1 + background: $blue-grey-1 !important +.bg-blue-grey-2 + background: $blue-grey-2 !important +.bg-blue-grey-3 + background: $blue-grey-3 !important +.bg-blue-grey-4 + background: $blue-grey-4 !important +.bg-blue-grey-5 + background: $blue-grey-5 !important +.bg-blue-grey-6 + background: $blue-grey-6 !important +.bg-blue-grey-7 + background: $blue-grey-7 !important +.bg-blue-grey-8 + background: $blue-grey-8 !important +.bg-blue-grey-9 + background: $blue-grey-9 !important +.bg-blue-grey-10 + background: $blue-grey-10 !important +.bg-blue-grey-11 + background: $blue-grey-11 !important +.bg-blue-grey-12 + background: $blue-grey-12 !important +.bg-blue-grey-13 + background: $blue-grey-13 !important +.bg-blue-grey-14 + background: $blue-grey-14 !important +.shadow-transition + transition: $shadow-transition !important +for $z in 1..24 + .shadow-{$z} + box-shadow: $shadow-+$z + .shadow-up-{$z} + box-shadow: $shadow-up-+$z +.no-shadow, .shadow-0 + box-shadow: none !important +.inset-shadow + box-shadow: $inset-shadow !important +.inset-shadow-down + box-shadow: $inset-shadow-down !important +.z-marginals + z-index: $z-marginals +.z-notify + z-index: $z-notify +.z-fullscreen + z-index: $z-fullscreen +.z-inherit + z-index: inherit !important +str-fr(selector, name, i = '') + unquote(replace(unquote(''), unquote(i), replace(unquote(''), unquote(name), unquote(selector)))) +str-fe(selector, name, noProc, i = '') + if noProc + return str-fr(selector, name, i) + return unquote(join(',', str-fr(selector, '', i) str-fr(selector, name, i))) +fg($name, $size) + $noProcNotZero = ($size > 0) + @media (min-width $size) + {str-fe('.col', $name, $noProcNotZero)} + &, &-auto, &-grow, &-shrink + .row > &, .flex > & + width: auto + min-width: 0 + max-width: 100% + .column > &, .flex > & + height: auto + min-height: 0 + max-height: 100% + & + flex: 10000 1 0% + &-auto + flex: 0 0 auto + &-grow + flex: 1 0 auto + &-shrink + flex: 0 1 auto + for $i in (0..$flex-cols) + $ic = s('%s', $i) + {str-fe('.col-', $name, $noProcNotZero, $ic)} + @extends .col{$name}-auto + .row + {str-fe('> .col-', $name, $noProcNotZero, $ic)} + height: auto + width: (round($i / $flex-cols * 100, 4))% + if $i != 0 || $name != '' + {str-fe('> .offset-', $name, $noProcNotZero, $ic)} + margin-left: (round($i / $flex-cols * 100, 4))% + .column + {str-fe('> .col-', $name, $noProcNotZero, $ic)} + height: (round($i / $flex-cols * 100, 4))% + width: auto + if $size == 0 + if $i == $flex-cols + .row > .col-all + height: auto + flex: 0 0 100% +.row, .column, .flex + display: flex + flex-wrap: wrap + &.inline + display: inline-flex +.row.reverse + flex-direction: row-reverse +.column + flex-direction: column + &.reverse + flex-direction: column-reverse +.wrap + flex-wrap: wrap +.no-wrap + flex-wrap: nowrap +.reverse-wrap + flex-wrap: wrap-reverse +.order- + &first + order: -10000 + &last + order: 10000 + &none + order: 0 +.justify- + &start + justify-content: flex-start + &end + justify-content: flex-end + ¢er + justify-content: center + &between + justify-content: space-between + &around + justify-content: space-around + &evenly + justify-content: space-evenly +.items- + &start + align-items: flex-start + &end + align-items: flex-end + ¢er + align-items: center + &baseline + align-items: baseline + &stretch + align-items: stretch +.content- + &start + align-content: flex-start + &end + align-content: flex-end + ¢er + align-content: center + &stretch + align-content: stretch + &between + align-content: space-between + &around + align-content: space-around +.self- + &start + align-self: flex-start + &end + align-self: flex-end + ¢er + align-self: center + &baseline + align-self: baseline + &stretch + align-self: stretch +.flex-center + @extends .items-center + @extends .justify-center +for $name, $size in $flex-gutter + .q-gutter + &-x-{$name} + margin-left: (- $size) + > * + margin-left: $size + &-y-{$name} + margin-top: (- $size) + > * + margin-top: $size + &-{$name} + @extends .q-gutter-x-{$name}, .q-gutter-y-{$name} + .q-col-gutter + &-x-{$name} + margin-left: (- $size) + > * + padding-left: ($size) + &-y-{$name} + margin-top: (- $size) + > * + padding-top: $size + &-{$name} + @extends .q-col-gutter-x-{$name}, .q-col-gutter-y-{$name} +for $name, $size in $sizes + fg(s('-%s', unquote($name)), $size) +.rounded-borders + border-radius: $generic-border-radius +.border-radius-inherit + border-radius: inherit +.no-transition + transition: none !important +.transition-0 + transition: 0s !important +.glossy + background-image: linear-gradient(to bottom, rgba(#fff, .3), rgba(#fff, 0) 50%, rgba(#000, .12) 51%, rgba(#000, .04)) !important +.q-placeholder + &::-webkit-input-placeholder + color: inherit + opacity: .7 + &::-moz-placeholder + color: inherit + opacity: .7 + &:-ms-input-placeholder + color: inherit !important + opacity: .7 !important + &::-ms-input-placeholder + color: inherit + opacity: .7 + &::placeholder + color: inherit + opacity: .7 +.q-body--fullscreen-mixin + position: fixed !important +.q-body--prevent-scroll + width: 100vw + height: 100vh + overflow-x: hidden + contain: layout size + contain: layout size style + overscroll-behavior: none + -webkit-overflow-scrolling: none + body + position: relative !important + overflow: hidden + .q-drawer__backdrop + width: 100vw + max-height: none + &[dir=rtl] + .q-body--scroll-locked + transform: translateX(var(--q-scroll-lock-left)) +.q-portal__container + contain: size + contain: size style +.q-portal__clone + position: fixed !important + transform: none !important + transition: none !important + flex-shrink: 0 !important + opacity: 0 !important + z-index: -1 !important +.q-focus__clone + * + position: fixed !important + transition: none !important + opacity: 0 !important + pointer-events: none !important +body.native-mobile + .q-focus__clone + * + top: 50vh +.q-no-input-spinner + -moz-appearance: textfield !important + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button + -webkit-appearance: none + margin: 0 +.q-link + outline: 0 + text-decoration: none + &--focusable:focus-visible + text-decoration: underline dashed currentColor 1px +body.electron + .q-electron-drag + -webkit-user-select: none + -webkit-app-region: drag + .q-electron-drag .q-btn-item, .q-electron-drag--exception + -webkit-app-region: no-drag +img.responsive + max-width: 100% + height: auto +.non-selectable + user-select: none !important +.scroll + overflow: auto +.scroll, .scroll-x, .scroll-y + -webkit-overflow-scrolling: touch + will-change: scroll-position +.scroll-x + overflow-x: auto +.scroll-y + overflow-y: auto +.no-scroll + overflow: hidden !important +.no-pointer-events, +.no-pointer-events--children, +.no-pointer-events--children * + pointer-events: none !important +.all-pointer-events + pointer-events: all !important +.cursor + &-pointer + cursor: pointer !important + &-not-allowed + cursor: not-allowed !important + &-inherit + cursor: inherit !important + &-none + cursor: none !important +[aria-busy='true'] + cursor: progress +[aria-controls], +[role='button'] + cursor: pointer +[aria-disabled] + cursor: default +.rotate-45 + transform: rotate(45deg) /* rtl:ignore */ +.rotate-90 + transform: rotate(90deg) /* rtl:ignore */ +.rotate-135 + transform: rotate(135deg) /* rtl:ignore */ +.rotate-180 + transform: rotate(180deg) /* rtl:ignore */ +/* deprecated: to be removed */ +.rotate-205 + transform: rotate(205deg) /* rtl:ignore */ +.rotate-225 + transform: rotate(225deg) /* rtl:ignore */ +.rotate-270 + transform: rotate(270deg) /* rtl:ignore */ +.rotate-315 + transform: rotate(315deg) /* rtl:ignore */ +.flip-horizontal + transform: scaleX(-1) +.flip-vertical + transform: scaleY(-1) +.float-left + float: left +.float-right + float: right +.relative-position + position: relative +.fixed, +.fixed-full, +.fullscreen, +.fixed-center, +.fixed-bottom, +.fixed-left, +.fixed-right, +.fixed-top, +.fixed-top-left, +.fixed-top-right, +.fixed-bottom-left, +.fixed-bottom-right + position: fixed +.absolute, +.absolute-full, +.absolute-center, +.absolute-bottom, +.absolute-left, +.absolute-right, +.absolute-top, +.absolute-top-left, +.absolute-top-right, +.absolute-bottom-left, +.absolute-bottom-right + position: absolute +.fixed-top, .absolute-top + top: 0 + left: 0 + right: 0 +.fixed-right, .absolute-right + top: 0 + right: 0 + bottom: 0 +.fixed-bottom, .absolute-bottom + right: 0 + bottom: 0 + left: 0 +.fixed-left, .absolute-left + top: 0 + bottom: 0 + left: 0 +.fixed-top-left, .absolute-top-left + top: 0 + left: 0 +.fixed-top-right, .absolute-top-right + top: 0 + right: 0 +.fixed-bottom-left, .absolute-bottom-left + bottom: 0 + left: 0 +.fixed-bottom-right, .absolute-bottom-right + bottom: 0 + right: 0 +.fullscreen + z-index: $z-fullscreen + border-radius: 0 !important + max-width: 100vw + max-height: 100vh +body.q-ios-padding .fullscreen + padding-top: $ios-statusbar-height !important + padding-top: env(safe-area-inset-top) !important + padding-bottom: env(safe-area-inset-bottom) !important +.absolute-full, .fullscreen, .fixed-full + top: 0 + right: 0 + bottom: 0 + left: 0 +.fixed-center, .absolute-center + top: 50% + left: 50% + transform: translate(-50%, -50%) +.vertical- + &top + vertical-align: top !important + &middle + vertical-align: middle !important + &bottom + vertical-align: bottom !important +.on-left + margin-right: 12px +.on-right + margin-left: 12px +:root + for $name, $size in $sizes + --q-size-{$name}: $size +.fit + width: 100% !important + height: 100% !important +.full-height + height: 100% !important +.full-width + width: 100% !important + margin-left: 0 !important + margin-right: 0 !important +.window-height + margin-top: 0 !important + margin-bottom: 0 !important + height: 100vh !important +.window-width + margin-left: 0 !important + margin-right: 0 !important + width: 100vw !important +.block + display: block !important +.inline-block + display: inline-block !important +for $space, $value in $spaces + .q-pa-{$space} + padding: $value.y $value.x + .q-pl-{$space} + padding-left: $value.x + .q-pr-{$space} + padding-right: $value.x + .q-pt-{$space} + padding-top: $value.y + .q-pb-{$space} + padding-bottom: $value.y + .q-px-{$space} + padding-left: $value.x + padding-right: $value.x + .q-py-{$space} + @extends .q-pt-{$space}, .q-pb-{$space} + .q-ma-{$space} + margin: $value.y $value.x + .q-ml-{$space} + margin-left: $value.x + .q-mr-{$space} + margin-right: $value.x + .q-mt-{$space} + margin-top: $value.y + .q-mb-{$space} + margin-bottom: $value.y + .q-mx-{$space} + margin-left: $value.x + margin-right: $value.x + .q-my-{$space} + @extends .q-mt-{$space}, .q-mb-{$space} +.q-mt-auto, .q-my-auto + margin-top: auto +.q-ml-auto + margin-left: auto +.q-mb-auto, .q-my-auto + margin-bottom: auto +.q-mr-auto + margin-right: auto +.q-mx-auto + margin-left: auto + margin-right: auto +.q-touch + user-select: none + user-drag: none + -khtml-user-drag: none + -webkit-user-drag: none +.q-touch-x + touch-action: pan-x +.q-touch-y + touch-action: pan-y +$transition-easing = cubic-bezier(0.215, 0.61, 0.355, 1) +.q-transition + &--slide-right, + &--slide-left, + &--slide-up, + &--slide-down, + &--jump-right, + &--jump-left, + &--jump-up, + &--jump-down, + &--fade, + &--scale, + &--rotate, + &--flip + &-leave-active + position: absolute + &--slide-right, + &--slide-left, + &--slide-up, + &--slide-down + &-enter-active, + &-leave-active + transition: transform .3s $transition-easing + &--slide-right + &-enter + transform: translate3d(-100%, 0, 0) + &-leave-to + transform: translate3d(100%, 0, 0) + &--slide-left + &-enter + transform: translate3d(100%, 0, 0) + &-leave-to + transform: translate3d(-100%, 0, 0) + &--slide-up + &-enter + transform: translate3d(0, 100%, 0) + &-leave-to + transform: translate3d(0, -100%, 0) + &--slide-down + &-enter + transform: translate3d(0, -100%, 0) + &-leave-to + transform: translate3d(0, 100%, 0) + &--jump-right, + &--jump-left, + &--jump-up, + &--jump-down + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s + &-enter, + &-leave-to + opacity: 0 + &--jump-right + &-enter + transform: translate3d(-15px, 0, 0) + &-leave-to + transform: translate3d(15px, 0, 0) + &--jump-left + &-enter + transform: translate3d(15px, 0, 0) + &-leave-to + transform: translateX(-15px) + &--jump-up + &-enter + transform: translate3d(0, 15px, 0) + &-leave-to + transform: translate3d(0, -15px, 0) + &--jump-down + &-enter + transform: translate3d(0, -15px, 0) + &-leave-to + transform: translate3d(0, 15px, 0) + &--fade + &-enter-active, + &-leave-active + transition: opacity .3s ease-out + &-enter, + &-leave, + &-leave-to + opacity: 0 + &--scale + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s $transition-easing + &-enter, + &-leave, + &-leave-to + opacity: 0 + transform: scale3d(0, 0, 1) + &--rotate + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s $transition-easing + transform-style: preserve-3d + &-enter, + &-leave, + &-leave-to + opacity: 0 + transform: scale3d(0, 0, 1) rotate3d(0, 0, 1, 90deg) + &--flip-right, + &--flip-left, + &--flip-up, + &--flip-down + &-enter-active, + &-leave-active + transition: transform .3s + backface-visibility: hidden + &-enter-to, + &-leave + transform: perspective(400px) rotate3d(1, 1, 0, 0deg) + &--flip-right + &-enter + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + &-leave-to + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + &--flip-left + &-enter + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + &-leave-to + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + &--flip-up + &-enter + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + &-leave-to + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + &--flip-down + &-enter + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + &-leave-to + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + &--hide-scroll, + &--hide-scroll > .q-panel:first-child + overflow: hidden !important +body + min-width: 100px + min-height: 100% + font-family: $typography-font-family + -ms-text-size-adjust: 100% + -webkit-text-size-adjust: 100% + -webkit-font-smoothing: antialiased + -moz-osx-font-smoothing: grayscale + font-smoothing: antialiased + line-height: $body-line-height + font-size: $body-font-size +for $heading, $value in $h-tags + {$heading} + font-size: $value.size + font-weight: $value.weight + line-height: $value.line-height + letter-spacing: $value.letter-spacing +p + margin: 0 0 $spaces.md.y +.text- + for $heading, $value in $headings + &{$heading} + font-size: $value.size + font-weight: $value.weight + line-height: $value.line-height + letter-spacing: $value.letter-spacing + &uppercase + text-transform: uppercase + &lowercase + text-transform: lowercase + &capitalize + text-transform: capitalize + ¢er + text-align: center + &left + text-align: left + &right + text-align: right + &justify + text-align: justify + hyphens: auto + &italic + font-style: italic + &bold + font-weight: bold + &no-wrap + white-space: nowrap + &strike + text-decoration: line-through + for $weight, $value in $text-weights + &weight-{$weight} + font-weight: $value +small + font-size: 80% +big + font-size: 170% +sub + bottom: -.25em +sup + top: -.5em +.no-margin + margin: 0 !important +.no-padding + padding: 0 !important +.no-border + border: 0 !important +.no-border-radius + border-radius: 0 !important +.no-box-shadow + box-shadow: none !important +.no-outline + outline: 0 !important +.ellipsis + text-overflow: ellipsis + white-space: nowrap + overflow: hidden + &-2-lines, &-3-lines + overflow: hidden + display: -webkit-box + -webkit-box-orient: vertical + &-2-lines + -webkit-line-clamp: 2 + &-3-lines + -webkit-line-clamp: 3 +.readonly + cursor: default !important +.disabled, [disabled] + &, * + outline: 0 !important + cursor: not-allowed !important +.disabled, [disabled] + opacity: .6 !important +.hidden + display: none !important +.invisible + visibility: hidden !important +.transparent + background: transparent !important +.overflow-auto + overflow: auto !important +.overflow-hidden + overflow: hidden !important +.overflow-hidden-y + overflow-y: hidden !important +.hide-scrollbar + scrollbar-width: none + -ms-overflow-style: none + &::-webkit-scrollbar + width: 0 + height: 0 + display: none +.dimmed, .light-dimmed + &:after + content: '' + position: absolute + top: 0 + right: 0 /* rtl:ignore */ + bottom: 0 + left: 0 /* rtl:ignore */ +.dimmed:after + background: $dimmed-background !important +.light-dimmed:after + background: $light-dimmed-background !important +.z-top + z-index: $z-top !important +.z-max + z-index: $z-max !important +for type in desktop mobile native-mobile cordova capacitor electron touch within-iframe platform-ios platform-android + body:not(.{type}) .{type}-only, + body.{type} .{type}-hide + display: none !important +@media all and (orientation: portrait) + .orientation-landscape + display: none !important +@media all and (orientation: landscape) + .orientation-portrait + display: none !important +@media screen + .print-only + display: none !important +@media print + .print-hide + display: none !important +@media (max-width: $breakpoint-xs-max) + .xs-hide, .gt-xs, .sm, .gt-sm, .md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-sm-min) and (max-width: $breakpoint-sm-max) + .sm-hide, .xs, .lt-sm, .gt-sm, .md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-md-min) and (max-width: $breakpoint-md-max) + .md-hide, .xs, .lt-sm, .sm, .lt-md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-lg-min) and (max-width: $breakpoint-lg-max) + .lg-hide, .xs, .lt-sm, .sm, .lt-md, .md, .lt-lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-xl-min) + .xl-hide, .xs, .lt-sm, .sm, .lt-md, .md, .lt-lg, .lg, .lt-xl + display: none !important +.q-focus-helper, .q-focusable, .q-manual-focusable, .q-hoverable + outline: 0 +body.desktop + .q-focus-helper + position: absolute + top: 0 + left: 0 /* rtl:ignore */ + width: 100% + height: 100% + pointer-events: none + border-radius: inherit + opacity: 0 + transition: background-color .3s cubic-bezier(.25,.8,.5,1), opacity .4s cubic-bezier(.25,.8,.5,1) + &:before, &:after + content: '' + position: absolute + top: 0 + left: 0 /* rtl:ignore */ + width: 100% + height: 100% + opacity: 0 + border-radius: inherit + transition: background-color .3s cubic-bezier(.25,.8,.5,1), opacity .6s cubic-bezier(.25,.8,.5,1) + &:before + background: #000 + &:after + background: #fff + &--rounded + border-radius: $generic-border-radius + &--round + border-radius: 50% + .q-focusable:focus, .q-manual-focusable--focused, .q-hoverable:hover + > .q-focus-helper + background: currentColor + opacity: .15 + &:before + opacity: .1 + &:after + opacity: .4 + .q-focusable:focus, .q-manual-focusable--focused + > .q-focus-helper + opacity: .22 + .q-key-group-navigation--active + outline: auto +body.body--light, +body.body--dark-auto, +.q-light, +.q-dark-auto + color: $light-text + color: var(--q-color-light-text) + background: $light-page + background: var(--q-color-light-page) +body.body--dark + color: $dark-text + color: var(--q-color-dark-text) + background: $dark-page + background: var(--q-color-dark-page) +.q-dark + color: $dark-text + color: var(--q-color-dark-text) + background: $dark + background: var(--q-color-dark) +@media (prefers-color-scheme: dark) + body.body--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + background: $dark-page + background: var(--q-color-dark-page) + .q-dark-auto + color: $dark-text + color: var(--q-color-dark-text) + background: $dark + background: var(--q-color-dark) +str-fr(selector, name, i = '') + unquote(replace(unquote(''), unquote(i), replace(unquote(''), unquote(name), unquote(selector)))) +str-fe(selector, name, noProc, i = '') + if noProc + return str-fr(selector, name, i) + return unquote(join(',', str-fr(selector, '', i) str-fr(selector, name, i))) +ie_style = @block + + .q-item, + .q-toolbar, + .q-notification + &:after + content: '' + font-size: 0 + visibility: collapse + display: inline + width: 0 + .q-banner > .q-banner__avatar + min-height: 38px + .q-banner--dense > .q-banner__avatar + min-height: 20px + .q-item:after + min-height: 32px + .q-list--dense > .q-item, + .q-item--dense + &after + min-height: 24px + .q-toolbar:after + min-height: $toolbar-min-height + .q-notification + &--standard:after + min-height: 48px + &--multi-line + min-height: 68px + + .q-btn__wrapper, + .q-time__content, + .q-toolbar__title, + .q-menu .q-item__section--main, + .q-table__middle + flex-basis: auto + .q-banner__content + flex-basis: 0 !important + .q-menu, + .q-dialog__inner + > .q-banner > .q-banner__content + flex-basis: auto !important + .q-tab__content + flex-basis: auto + min-width: 100% + .q-card__actions--vert + flex: 0 0 auto + .column + min-width: 0% + for $name, $size in $sizes + $noProcNotZero = $size > 0 + @media (min-width $size) + {str-fe('.col', s('-%s', unquote($name)), $noProcNotZero)} + .row > &, .flex > & + flex-basis: auto + min-width: 0% + + .q-item + &__section + &--avatar + + min-width: 56px + + button.q-btn--actionable:active:hover + .q-btn__wrapper + margin: -1px 1px 1px -1px + .q-btn-group + &--push + > button.q-btn--push.q-btn--actionable:active:hover + .q-btn__wrapper + margin: 1px 1px -1px -1px + .q-btn + overflow: visible + &--wrap + flex-direction: row + + .q-carousel__slide > * + max-width: 100% + + .q-tabs--vertical + .q-tab__indicator + height: auto + + .q-spinner + animation: q-ie-spinner 2s linear infinite /* rtl:ignore */ + transform-origin: center center /* rtl:ignore */ + opacity: .5 + &.q-spinner-mat .path + stroke-dasharray: 89, 200 + + .q-checkbox + &__indet + opacity: 0 + &__inner--indet + .q-checkbox__indet + opacity: 1 + + .q-radio + &__check + opacity: 0 + &__inner--truthy + .q-radio__check + opacity: 1 + + .q-date__main + min-height: 290px !important + .q-date__months + align-items: stretch + .q-time--portrait .q-time__main + display: flex + flex-direction: column + flex-wrap: nowrap + flex: 1 0 auto + + .q-field + &__prefix, &__suffix + flex: 1 0 auto + &__bottom--stale + .q-field__messages + left: 12px + &--borderless, &--standard + .q-field__bottom--stale + .q-field__messages + left: 0 + &--float .q-field__label + max-width: 100% + + .q-focus-helper + z-index: 1 +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) + {ie_style} +@supports (-ms-ime-align:auto) + {ie_style} +@keyframes q-ie-spinner + 0% + opacity: .5 + 50% + opacity: 1 + 100% + opacity: .5 diff --git a/dist/quasar.umd.js b/dist/quasar.umd.js new file mode 100644 index 00000000000..3b065ac6cd2 --- /dev/null +++ b/dist/quasar.umd.js @@ -0,0 +1,43818 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('vue')) : + typeof define === 'function' && define.amd ? define(['vue'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Quasar = factory(global.Vue)); +})(this, (function (Vue) { 'use strict'; + + function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + + var Vue__default = /*#__PURE__*/_interopDefaultLegacy(Vue); + + var version = "1.22.0-beta.3"; + + /* eslint-disable no-useless-escape */ + + var isSSR = typeof window === 'undefined'; + var fromSSR = false; + var onSSR = isSSR; + var iosCorrection; + + function getMatch (userAgent, platformMatch) { + var match = /(edge|edga|edgios)\/([\w.]+)/.exec(userAgent) || + /(opr)[\/]([\w.]+)/.exec(userAgent) || + /(vivaldi)[\/]([\w.]+)/.exec(userAgent) || + /(chrome|crios)[\/]([\w.]+)/.exec(userAgent) || + /(iemobile)[\/]([\w.]+)/.exec(userAgent) || + /(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(userAgent) || + /(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(userAgent) || + /(firefox|fxios)[\/]([\w.]+)/.exec(userAgent) || + /(webkit)[\/]([\w.]+)/.exec(userAgent) || + /(opera)(?:.*version|)[\/]([\w.]+)/.exec(userAgent) || + /(msie) ([\w.]+)/.exec(userAgent) || + (userAgent.indexOf('trident') >= 0 && /(rv)(?::| )([\w.]+)/.exec(userAgent)) || + (userAgent.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(userAgent)) || + []; + + return { + browser: match[5] || match[3] || match[1] || '', + version: match[2] || match[4] || '0', + versionNumber: match[4] || match[2] || '0', + platform: platformMatch[0] || '' + } + } + + function getPlatformMatch (userAgent) { + return /(ipad)/.exec(userAgent) || + /(ipod)/.exec(userAgent) || + /(windows phone)/.exec(userAgent) || + /(iphone)/.exec(userAgent) || + /(kindle)/.exec(userAgent) || + /(silk)/.exec(userAgent) || + /(android)/.exec(userAgent) || + /(win)/.exec(userAgent) || + /(mac)/.exec(userAgent) || + /(linux)/.exec(userAgent) || + /(cros)/.exec(userAgent) || + /(playbook)/.exec(userAgent) || + /(bb)/.exec(userAgent) || + /(blackberry)/.exec(userAgent) || + [] + } + + var hasTouch = isSSR === false + ? 'ontouchstart' in window || window.navigator.maxTouchPoints > 0 + : false; + + function applyIosCorrection (is) { + var obj; + + iosCorrection = { is: Object.assign({}, is) }; + + delete is.mac; + delete is.desktop; + + var platform = Math.min(window.innerHeight, window.innerWidth) > 414 + ? 'ipad' + : 'iphone'; + + Object.assign(is, ( obj = { + mobile: true, + ios: true, + platform: platform + }, obj[ platform ] = true, obj )); + } + + function getPlatform (UA) { + var + userAgent = UA.toLowerCase(), + platformMatch = getPlatformMatch(userAgent), + matched = getMatch(userAgent, platformMatch), + browser = {}; + + if (matched.browser) { + browser[matched.browser] = true; + browser.version = matched.version; + browser.versionNumber = parseInt(matched.versionNumber, 10); + } + + if (matched.platform) { + browser[matched.platform] = true; + } + + var knownMobiles = browser.android || + browser.ios || + browser.bb || + browser.blackberry || + browser.ipad || + browser.iphone || + browser.ipod || + browser.kindle || + browser.playbook || + browser.silk || + browser['windows phone']; + + // These are all considered mobile platforms, meaning they run a mobile browser + if (knownMobiles === true || userAgent.indexOf('mobile') > -1) { + browser.mobile = true; + + if (browser.edga || browser.edgios) { + browser.edge = true; + matched.browser = 'edge'; + } + else if (browser.crios) { + browser.chrome = true; + matched.browser = 'chrome'; + } + else if (browser.fxios) { + browser.firefox = true; + matched.browser = 'firefox'; + } + } + // If it's not mobile we should consider it's desktop platform, meaning it runs a desktop browser + // It's a workaround for anonymized user agents + // (browser.cros || browser.mac || browser.linux || browser.win) + else { + browser.desktop = true; + } + + // Set iOS if on iPod, iPad or iPhone + if (browser.ipod || browser.ipad || browser.iphone) { + browser.ios = true; + } + + if (browser['windows phone']) { + browser.winphone = true; + delete browser['windows phone']; + } + + // Chrome, Opera 15+, Vivaldi and Safari are webkit based browsers + if ( + browser.chrome || + browser.opr || + browser.safari || + browser.vivaldi || + // we expect unknown, non iOS mobile browsers to be webkit based + ( + browser.mobile === true && + browser.ios !== true && + knownMobiles !== true + ) + ) { + browser.webkit = true; + } + + // IE11 has a new token so we will assign it msie to avoid breaking changes + if (browser.rv || browser.iemobile) { + matched.browser = 'ie'; + browser.ie = true; + } + + // Blackberry browsers are marked as Safari on BlackBerry + if (browser.safari && browser.blackberry || browser.bb) { + matched.browser = 'blackberry'; + browser.blackberry = true; + } + + // Playbook browsers are marked as Safari on Playbook + if (browser.safari && browser.playbook) { + matched.browser = 'playbook'; + browser.playbook = true; + } + + // Opera 15+ are identified as opr + if (browser.opr) { + matched.browser = 'opera'; + browser.opera = true; + } + + // Stock Android browsers are marked as Safari on Android. + if (browser.safari && browser.android) { + matched.browser = 'android'; + browser.android = true; + } + + // Kindle browsers are marked as Safari on Kindle + if (browser.safari && browser.kindle) { + matched.browser = 'kindle'; + browser.kindle = true; + } + + // Kindle Silk browsers are marked as Safari on Kindle + if (browser.safari && browser.silk) { + matched.browser = 'silk'; + browser.silk = true; + } + + if (browser.vivaldi) { + matched.browser = 'vivaldi'; + browser.vivaldi = true; + } + + // Assign the name and platform variable + browser.name = matched.browser; + browser.platform = matched.platform; + + if (isSSR === false) { + if (userAgent.indexOf('electron') > -1) { + browser.electron = true; + } + else if (document.location.href.indexOf('-extension://') > -1) { + browser.bex = true; + } + else { + if (window.Capacitor !== void 0) { + browser.capacitor = true; + browser.nativeMobile = true; + browser.nativeMobileWrapper = 'capacitor'; + } + else if (window._cordovaNative !== void 0 || window.cordova !== void 0) { + browser.cordova = true; + browser.nativeMobile = true; + browser.nativeMobileWrapper = 'cordova'; + } + else if (window.matchMedia('(display-mode: standalone)').matches === true) { + browser.standalone = true; + } + + if ( + hasTouch === true && + browser.mac === true && + ( + (browser.desktop === true && browser.safari === true) || + ( + browser.nativeMobile === true && + browser.android !== true && + browser.ios !== true && + browser.ipad !== true + ) + ) + ) { + /* + * Correction needed for iOS since the default + * setting on iPad is to request desktop view; if we have + * touch support and the user agent says it's a + * desktop, we infer that it's an iPhone/iPad with desktop view + * so we must fix the false positives + */ + applyIosCorrection(browser); + } + } + + fromSSR = browser.nativeMobile === void 0 && + browser.electron === void 0 && + document.querySelector('[data-server-rendered]') !== null; + + if (fromSSR === true) { + onSSR = true; + } + } + + return browser + } + + var userAgent = isSSR !== true + ? navigator.userAgent || navigator.vendor || window.opera + : ''; + + var ssrClient = { + has: { + touch: false, + webStorage: false + }, + within: { iframe: false } + }; + + // We export "client" for hydration error-free parts, + // like touch directives who do not (and must NOT) wait + // for the client takeover; + // Do NOT import this directly in your app, unless you really know + // what you are doing. + var client = isSSR === false + ? { + userAgent: userAgent, + is: getPlatform(userAgent), + has: { + touch: hasTouch, + webStorage: (function () { + try { + if (window.localStorage) { + return true + } + } + catch (e) {} + return false + })() + }, + within: { + iframe: window.self !== window.top + } + } + : ssrClient; + + var Platform = { + install: function install ($q, queues) { + var this$1$1 = this; + + if (isSSR === true) { + // we're on server-side, so we push + // to the server queue instead of + // applying directly + queues.server.push(function (q, ctx) { + q.platform = this$1$1.parseSSR(ctx.ssr); + }); + } + else if (fromSSR === true) { + // must match with server-side before + // client taking over in order to prevent + // hydration errors + Object.assign(this, client, iosCorrection, ssrClient); + + // takeover should increase accuracy for + // the rest of the props; we also avoid + // hydration errors + queues.takeover.push(function (q) { + onSSR = fromSSR = false; + Object.assign(q.platform, client); + iosCorrection = void 0; + }); + + // we need to make platform reactive + // for the takeover phase + Vue__default["default"].util.defineReactive($q, 'platform', this); + } + else { + // we don't have any business with SSR, so + // directly applying... + Object.assign(this, client); + $q.platform = this; + } + } + }; + + if (isSSR === true) { + Platform.parseSSR = function (/* ssrContext */ ssr) { + var userAgent = ssr.req.headers['user-agent'] || ssr.req.headers['User-Agent'] || ''; + return Object.assign({}, client, + {userAgent: userAgent, + is: getPlatform(userAgent)}) + }; + } + else { + client.is.ios === true && + window.navigator.vendor.toLowerCase().indexOf('apple') === -1; + } + + var listenOpts = { + hasPassive: false, + passiveCapture: true, + notPassiveCapture: true + }; + + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get () { + Object.assign(listenOpts, { + hasPassive: true, + passive: { passive: true }, + notPassive: { passive: false }, + passiveCapture: { passive: true, capture: true }, + notPassiveCapture: { passive: false, capture: true } + }); + } + }); + window.addEventListener('qtest', null, opts); + window.removeEventListener('qtest', null, opts); + } + catch (e) {} + + function noop () {} + + function leftClick (e) { + return e.button === 0 + } + + function middleClick (e) { + return e.button === 1 + } + + function rightClick (e) { + return e.button === 2 + } + + function position (e) { + if (e.touches && e.touches[0]) { + e = e.touches[0]; + } + else if (e.changedTouches && e.changedTouches[0]) { + e = e.changedTouches[0]; + } + else if (e.targetTouches && e.targetTouches[0]) { + e = e.targetTouches[0]; + } + + return { + top: e.clientY, + left: e.clientX + } + } + + function getEventPath (e) { + if (e.path) { + return e.path + } + if (e.composedPath) { + return e.composedPath() + } + + var path = []; + var el = e.target; + + while (el) { + path.push(el); + + if (el.tagName === 'HTML') { + path.push(document); + path.push(window); + return path + } + + el = el.parentElement; + } + } + + function eventOnAncestors (e, el) { + var target = e.target; + + while (el !== null && el !== void 0) { + if (el === target) { + return true + } + el = el.parentNode; + } + + return false + } + + // Reasonable defaults + var + LINE_HEIGHT = 40, + PAGE_HEIGHT = 800; + + function getMouseWheelDistance (e) { + var assign; + + var x = e.deltaX, y = e.deltaY; + + if ((x || y) && e.deltaMode) { + var multiplier = e.deltaMode === 1 ? LINE_HEIGHT : PAGE_HEIGHT; + x *= multiplier; + y *= multiplier; + } + + if (e.shiftKey && !x) { + (assign = [x, y], y = assign[0], x = assign[1]); + } + + return { x: x, y: y } + } + + function stop (e) { + e.stopPropagation(); + } + + function prevent (e) { + e.cancelable !== false && e.preventDefault(); + } + + function stopAndPrevent (e) { + e.cancelable !== false && e.preventDefault(); + e.stopPropagation(); + } + + function preventDraggable (el, status) { + if (el === void 0 || (status === true && el.__dragPrevented === true)) { + return + } + + var fn = status === true + ? function (el) { + el.__dragPrevented = true; + el.addEventListener('dragstart', prevent, listenOpts.notPassiveCapture); + } + : function (el) { + delete el.__dragPrevented; + el.removeEventListener('dragstart', prevent, listenOpts.notPassiveCapture); + }; + + el.querySelectorAll('a, img').forEach(fn); + } + + function create (name, ref) { + if ( ref === void 0 ) ref = {}; + var bubbles = ref.bubbles; if ( bubbles === void 0 ) bubbles = false; + var cancelable = ref.cancelable; if ( cancelable === void 0 ) cancelable = false; + + try { + return new CustomEvent(name, { bubbles: bubbles, cancelable: cancelable }) + } + catch (e) { + // IE doesn't support `new Event()`, so... + var evt = document.createEvent('Event'); + evt.initEvent(name, bubbles, cancelable); + return evt + } + } + + function addEvt (ctx, targetName, events) { + var name = "__q_" + targetName + "_evt"; + + ctx[name] = ctx[name] !== void 0 + ? ctx[name].concat(events) + : events; + + events.forEach(function (evt) { + evt[0].addEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]]); + }); + } + + function cleanEvt (ctx, targetName) { + var name = "__q_" + targetName + "_evt"; + + if (ctx[name] !== void 0) { + ctx[name].forEach(function (evt) { + evt[0].removeEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]]); + }); + ctx[name] = void 0; + } + } + + /* + * also update /types/utils/event.d.ts + */ + + var event = { + listenOpts: listenOpts, + leftClick: leftClick, + middleClick: middleClick, + rightClick: rightClick, + position: position, + getEventPath: getEventPath, + eventOnAncestors: eventOnAncestors, + getMouseWheelDistance: getMouseWheelDistance, + stop: stop, + prevent: prevent, + stopAndPrevent: stopAndPrevent, + preventDraggable: preventDraggable, + create: create + }; + + var isJapanese = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/; + var isChinese = /(?:[\u3300-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\uFE30-\uFE4F]|[\uD840-\uD868\uD86A-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD873[\uDC00-\uDEAF]|\uD87E[\uDC00-\uDE1F])/; + var isKorean = /[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/; + var isPlainText = /[a-z0-9_ -]$/i; + + var props$2 = [ + 'isKeyboard', + 'isComposing', + + 'isPointer', + 'isMouse', + 'isTouch', + 'isDrag', + + 'isContext', + + 'isPending', + + 'event' + ]; + + function getObject$1 () { + return props$2.reduce(function (acc, type) { + acc[type] = type === 'event' ? null : false; + return acc + }, {}) + } + + var config = getObject$1(); + config.isComposing = void 0; + + var eventsTouch = [ + ['touchstart', Object.assign({}, config, {isTouch: true, isPointer: true, isPending: true}), true], + ['touchend', Object.assign({}, config, {isTouch: true, isPointer: true, isPending: false})], + ['touchcancel', Object.assign({}, config, {isTouch: true, isPointer: true, isPending: false})] + ]; + + var eventsCleanClick = ['mousestart', 'touchstart', 'dragstart']; + + var eventsTouchEnd = eventsTouch.slice(1); + + var passiveCapture$3 = listenOpts.passiveCapture; + var notPassiveCapture$1 = listenOpts.notPassiveCapture; + + var preventClickCleanupHandlers = []; + + function clickCleanup () { + var documentElement = document.documentElement; + var fns = preventClickCleanupHandlers.slice(); + + preventClickCleanupHandlers.length = 0; + + fns.forEach(function (fn) { + documentElement.removeEventListener('click', fn, notPassiveCapture$1); + }); + } + + var Interaction = { + install: function install ($q, queues) { + var this$1$1 = this; + + if (isSSR === true) { + queues.server.push(function (q) { + q.interaction = getObject$1(); + q.interaction.preventClick = noop; + }); + return + } + + Object.assign(this, getObject$1()); + + var self = this; + + props$2.forEach(function (prop) { + Vue__default["default"].util.defineReactive(self, prop, self[prop]); + }); + Vue__default["default"].util.defineReactive($q, 'interaction', this); + + var fnFactory = function (eventType, props, touchLocal) { + var setStateFns = Object.keys(props) + .filter(function (key) { return props[key] !== void 0; }) + .map(function (key) { + var value = props[key]; + + if (typeof value === 'function') { + return function (event) { + self[key] = value(event); + } + } + + return function () { + self[key] = value; + } + }); + + var touchLocalFn = typeof touchLocal === 'function' + ? touchLocal + : ( + touchLocal === true + ? function (event) { + eventsTouchEnd.forEach(function (setConfig) { + var fn = fnFactory(setConfig[0], setConfig[1], function () { + eventsTouchEnd.forEach(function (clearConfig) { + event.target.removeEventListener(clearConfig[0], fn, passiveCapture$3); + }); + }); + event.target.addEventListener(config[0], fn, passiveCapture$3); + }); + } + : noop + ); + + var clickCleanupFn = eventsCleanClick.includes(eventType) === true + ? clickCleanup + : noop; + + return function (event) { + setStateFns.forEach(function (fn) { + fn(event); + }); + + self.event = event; + + touchLocalFn(event); + + clickCleanupFn(); + } + }; + + var documentElement = document.documentElement; + var checkComposition = client.is.firefox === true + ? function (text) { return isPlainText.test(text) === false; } + : function (text) { return (isJapanese.test(text) === true || isChinese.test(text) === true || isKorean.test(text) === true); }; + var events = [ + ['keydown', Object.assign({}, config, {isKeyboard: true, isPending: true})], + ['keypress', Object.assign({}, config, {isKeyboard: true, isPending: true})], + ['keyup', Object.assign({}, config, {isKeyboard: true, isPending: false})], + + client.is.ios === true + ? ['compositionstart', { + isComposing: function (ev) { + ev.target.qComposing = true; + return true + } + }] + : ['compositionupdate', { + isComposing: function (ev) { + if ( + ev.target.qComposing !== true && + typeof ev.data === 'string' && + checkComposition(ev.data) === true + ) { + ev.target.qComposing = true; + } + return true + } + }], + ['compositionend', { + isComposing: function (ev) { + if (ev.target.qComposing === true) { + ev.target.qComposing = false; + } + return false + } + }], + + ['mousedown', Object.assign({}, config, {isMouse: true, isPointer: true, isPending: true})], + ['mouseup', Object.assign({}, config, {isMouse: true, isPointer: true, isPending: false})], + + ['dragstart', { isKeyboard: false, isDrag: true, isPending: true }], + ['dragend', { isKeyboard: false, isDrag: true, isPending: false }], + ['dragcancel', { isKeyboard: false, isDrag: true, isPending: false }], + ['drop', { isKeyboard: false, isDrag: true, isPending: false }], + + ['contextmenu', { isContext: true, isPending: false }] + ]; + + events.forEach(function (config) { + documentElement.addEventListener(config[0], fnFactory.apply(this$1$1, config), passiveCapture$3); + }); + + if (client.has.touch === true) { + eventsTouch.forEach(function (config) { + documentElement.addEventListener(config[0], fnFactory.apply(this$1$1, config), passiveCapture$3); + }); + } + }, + + preventClick: function preventClick (target, stop) { + var documentElement = document.documentElement; + var fn = function (evt) { + if (target === evt.target) { + if (stop === true) { + stopAndPrevent(evt); + } + else { + prevent(evt); + } + } + clickCleanup(); + }; + + documentElement.addEventListener('click', fn, notPassiveCapture$1); + + preventClickCleanupHandlers.push(fn); + } + }; + + function debounce (fn, wait, immediate) { + if ( wait === void 0 ) wait = 250; + + var timeout; + + function debounced (/* ...args */) { + var this$1$1 = this; + + var args = arguments; + + var later = function () { + timeout = void 0; + if (immediate !== true) { + fn.apply(this$1$1, args); + } + }; + + clearTimeout(timeout); + if (immediate === true && timeout === void 0) { + fn.apply(this, args); + } + timeout = setTimeout(later, wait); + } + + debounced.cancel = function () { + clearTimeout(timeout); + }; + + return debounced + } + + var SIZE_LIST = ['sm', 'md', 'lg', 'xl']; + var passive$4 = listenOpts.passive; + + var Screen = { + width: 0, + height: 0, + + name: 'xs', + + sizes: { + sm: 600, + md: 1024, + lg: 1440, + xl: 1920 + }, + + lt: { + sm: true, + md: true, + lg: true, + xl: true + }, + gt: { + xs: false, + sm: false, + md: false, + lg: false + }, + xs: true, + sm: false, + md: false, + lg: false, + xl: false, + + setSizes: noop, + setDebounce: noop, + + install: function install ($q, queues, cfg) { + var this$1$1 = this; + + if (isSSR === true) { + $q.screen = this; + return + } + + var visualViewport = window.visualViewport; + var target = visualViewport || window; + var scrollingElement = document.scrollingElement || document.documentElement; + var getSize = visualViewport === void 0 || client.is.mobile === true + ? function () { return [ + Math.max(window.innerWidth, scrollingElement.clientWidth), + Math.max(window.innerHeight, scrollingElement.clientHeight) + ]; } + : function () { return [ + visualViewport.width * visualViewport.scale + window.innerWidth - scrollingElement.clientWidth, + visualViewport.height * visualViewport.scale + window.innerHeight - scrollingElement.clientHeight + ]; }; + + var classes = cfg.screen !== void 0 && cfg.screen.bodyClasses === true; + + var update = function (force) { + var ref = getSize(); + var w = ref[0]; + var h = ref[1]; + + if (h !== this$1$1.height) { + this$1$1.height = h; + } + + if (w !== this$1$1.width) { + this$1$1.width = w; + } + else if (force !== true) { + return + } + + var s = this$1$1.sizes; + + this$1$1.gt.xs = w >= s.sm; + this$1$1.gt.sm = w >= s.md; + this$1$1.gt.md = w >= s.lg; + this$1$1.gt.lg = w >= s.xl; + this$1$1.lt.sm = w < s.sm; + this$1$1.lt.md = w < s.md; + this$1$1.lt.lg = w < s.lg; + this$1$1.lt.xl = w < s.xl; + this$1$1.xs = this$1$1.lt.sm; + this$1$1.sm = this$1$1.gt.xs === true && this$1$1.lt.md === true; + this$1$1.md = this$1$1.gt.sm === true && this$1$1.lt.lg === true; + this$1$1.lg = this$1$1.gt.md === true && this$1$1.lt.xl === true; + this$1$1.xl = this$1$1.gt.lg; + + s = (this$1$1.xs === true && 'xs') || + (this$1$1.sm === true && 'sm') || + (this$1$1.md === true && 'md') || + (this$1$1.lg === true && 'lg') || + 'xl'; + + if (s !== this$1$1.name) { + if (classes === true) { + document.body.classList.remove(("screen--" + (this$1$1.name))); + document.body.classList.add(("screen--" + s)); + } + this$1$1.name = s; + } + }; + + var updateEvt, updateSizes = {}, updateDebounce = 16; + + this.setSizes = function (sizes) { + SIZE_LIST.forEach(function (name) { + if (sizes[name] !== void 0) { + updateSizes[name] = sizes[name]; + } + }); + }; + this.setDebounce = function (deb) { + updateDebounce = deb; + }; + + var start = function () { + var style = getComputedStyle(document.body); + + // if css props available + if (style.getPropertyValue('--q-size-sm')) { + SIZE_LIST.forEach(function (name) { + this$1$1.sizes[name] = parseInt(style.getPropertyValue(("--q-size-" + name)), 10); + }); + } + + this$1$1.setSizes = function (sizes) { + SIZE_LIST.forEach(function (name) { + if (sizes[name]) { + this$1$1.sizes[name] = sizes[name]; + } + }); + update(true); + }; + + this$1$1.setDebounce = function (delay) { + updateEvt !== void 0 && target.removeEventListener('resize', updateEvt, passive$4); + updateEvt = delay > 0 + ? debounce(update, delay) + : update; + target.addEventListener('resize', updateEvt, passive$4); + }; + + this$1$1.setDebounce(updateDebounce); + + if (Object.keys(updateSizes).length > 0) { + this$1$1.setSizes(updateSizes); + updateSizes = void 0; // free up memory + } + else { + update(); + } + + // due to optimizations, this would be left out otherwise + classes === true && this$1$1.name === 'xs' && + document.body.classList.add('screen--xs'); + }; + + if (fromSSR === true) { + queues.takeover.push(start); + } + else { + start(); + } + + Vue__default["default"].util.defineReactive($q, 'screen', this); + } + }; + + var Dark = { + isActive: null, + mode: false, + + install: function install ($q, queues, ref) { + var this$1$1 = this; + var dark = ref.dark; + + this.isActive = dark === 'auto' ? null : dark === true; + + if (isSSR === true) { + queues.server.push(function (q, ctx) { + q.dark = { + isActive: null, + mode: false, + set: function (val) { + ctx.ssr.Q_BODY_CLASSES = ctx.ssr.Q_BODY_CLASSES + .replace(' body--light', '') + .replace(' body--dark-auto', '') + .replace(' body--dark', '') + + " body--" + (val === true ? 'dark' : (val === 'auto' ? 'dark-auto' : 'light')); + + q.dark.isActive = val === 'auto' ? null : val === true; + q.dark.mode = val; + }, + toggle: function () { + q.dark.set(q.dark.isActive === false); + } + }; + + q.dark.set(dark); + }); + + this.set = noop; + return + } + + var initialVal = dark !== void 0 + ? dark + : false; + + if (fromSSR === true) { + var ssrSet = function (val) { + this$1$1.__fromSSR = val; + }; + + var originalSet = this.set; + + this.set = ssrSet; + ssrSet(initialVal); + + queues.takeover.push(function () { + document.body.classList.remove('body--dark-auto'); + this$1$1.set = originalSet; + this$1$1.set(this$1$1.__fromSSR); + }); + } + else { + this.set(initialVal); + } + + Vue__default["default"].util.defineReactive(this, 'isActive', this.isActive); + Vue__default["default"].util.defineReactive($q, 'dark', this); + }, + + set: function set (val) { + var this$1$1 = this; + + this.mode = val; + + if (val === 'auto') { + if (this.__media === void 0) { + this.__media = window.matchMedia('(prefers-color-scheme: dark)'); + this.__updateMedia = function () { this$1$1.set('auto'); }; + this.__media.addListener(this.__updateMedia); + } + + val = this.__media.matches; + } + else if (this.__media !== void 0) { + this.__media.removeListener(this.__updateMedia); + this.__media = void 0; + } + + this.isActive = val === true; + + document.body.classList.remove(("body--" + (val === true ? 'light' : 'dark'))); + document.body.classList.add(("body--" + (val === true ? 'dark' : 'light'))); + }, + + toggle: function toggle () { + Dark.set(Dark.isActive === false); + }, + + __media: void 0 + }; + + var getTrue = function () { return true; }; + + function filterInvalidPath (path) { + return typeof path === 'string' && + path !== '' && + path !== '/' && + path !== '#/' + } + + function normalizeExitPath (path) { + path.startsWith('#') === true && (path = path.substr(1)); + path.startsWith('/') === false && (path = '/' + path); + path.endsWith('/') === true && (path = path.substr(0, path.length - 1)); + return '#' + path + } + + function getShouldExitFn (cfg) { + if (cfg.backButtonExit === false) { + return function () { return false; } + } + + if (cfg.backButtonExit === '*') { + return getTrue + } + + // Add default root path + var exitPaths = [ '#/' ]; + + // Add custom exit paths + Array.isArray(cfg.backButtonExit) === true && exitPaths.push.apply( + exitPaths, cfg.backButtonExit.filter(filterInvalidPath).map(normalizeExitPath) + ); + + return function () { return exitPaths.includes(window.location.hash); } + } + + var History = { + __history: [], + add: noop, + remove: noop, + + install: function install (cfg) { + var this$1$1 = this; + + if (isSSR === true) { + return + } + + var ref = client.is; + var cordova = ref.cordova; + var capacitor = ref.capacitor; + + if (cordova !== true && capacitor !== true) { + return + } + + var qConf = cfg[cordova === true ? 'cordova' : 'capacitor']; + + if (qConf !== void 0 && qConf.backButton === false) { + return + } + + // if the '@capacitor/app' plugin is not installed + // then we got nothing to do + if ( + // if we're on Capacitor mode + capacitor === true && + // and it's also not in Capacitor's main instance + (window.Capacitor === void 0 || window.Capacitor.Plugins.App === void 0) + ) { + return + } + + this.add = function (entry) { + if (entry.condition === void 0) { + entry.condition = getTrue; + } + this$1$1.__history.push(entry); + }; + + this.remove = function (entry) { + var index = this$1$1.__history.indexOf(entry); + if (index >= 0) { + this$1$1.__history.splice(index, 1); + } + }; + + var shouldExit = getShouldExitFn( + Object.assign( + { backButtonExit: true }, + qConf + ) + ); + + var backHandler = function () { + if (this$1$1.__history.length) { + var entry = this$1$1.__history[this$1$1.__history.length - 1]; + + if (entry.condition() === true) { + this$1$1.__history.pop(); + entry.handler(); + } + } + else if (shouldExit() === true) { + navigator.app.exitApp(); + } + else { + window.history.back(); + } + }; + + if (cordova === true) { + document.addEventListener('deviceready', function () { + document.addEventListener('backbutton', backHandler, false); + }); + } + else { + window.Capacitor.Plugins.App.addListener('backButton', backHandler); + } + } + }; + + var defaultLang = { + isoName: 'en-us', + nativeName: 'English (US)', + label: { + clear: 'Clear', + ok: 'OK', + cancel: 'Cancel', + close: 'Close', + set: 'Set', + select: 'Select', + reset: 'Reset', + remove: 'Remove', + update: 'Update', + create: 'Create', + search: 'Search', + filter: 'Filter', + refresh: 'Refresh', + expand: function (label) { return label ? ("Expand \"" + label + "\"") : 'Expand' }, + collapse: function (label) { return label ? ("Collapse \"" + label + "\"") : 'Collapse' } + }, + date: { + days: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + daysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'days' + }, + table: { + noData: 'No data available', + noResults: 'No matching records found', + loading: 'Loading...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 record selected.' + : (rows === 0 ? 'No' : rows) + ' records selected.' + }, + recordsPerPage: 'Records per page:', + allRows: 'All', + pagination: function (start, end, total) { + return start + '-' + end + ' of ' + total + }, + columns: 'Columns' + }, + editor: { + url: 'URL', + bold: 'Bold', + italic: 'Italic', + strikethrough: 'Strikethrough', + underline: 'Underline', + unorderedList: 'Unordered List', + orderedList: 'Ordered List', + subscript: 'Subscript', + superscript: 'Superscript', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Toggle Fullscreen', + quote: 'Quote', + left: 'Left align', + center: 'Center align', + right: 'Right align', + justify: 'Justify align', + print: 'Print', + outdent: 'Decrease indentation', + indent: 'Increase indentation', + removeFormat: 'Remove formatting', + formatting: 'Formatting', + fontSize: 'Font Size', + align: 'Align', + hr: 'Insert Horizontal Rule', + undo: 'Undo', + redo: 'Redo', + heading1: 'Heading 1', + heading2: 'Heading 2', + heading3: 'Heading 3', + heading4: 'Heading 4', + heading5: 'Heading 5', + heading6: 'Heading 6', + paragraph: 'Paragraph', + code: 'Code', + size1: 'Very small', + size2: 'A bit small', + size3: 'Normal', + size4: 'Medium-large', + size5: 'Big', + size6: 'Very big', + size7: 'Maximum', + defaultFont: 'Default Font', + viewSource: 'View Source' + }, + tree: { + noNodes: 'No nodes available', + noResults: 'No matching nodes found' + } + }; + + function getLocale () { + if (isSSR === true) { return } + + var val = + navigator.language || + navigator.languages[0] || + navigator.browserLanguage || + navigator.userLanguage || + navigator.systemLanguage; + + if (val) { + return val.toLowerCase() + } + } + + var lang = { + getLocale: getLocale, + + install: function install ($q, queues, lang) { + var this$1$1 = this; + + this.set = function (langObject, ssrContext) { + if ( langObject === void 0 ) langObject = defaultLang; + + var lang = Object.assign({}, langObject, + {rtl: langObject.rtl === true, + getLocale: getLocale}); + + if (isSSR === true) { + if (ssrContext === void 0) { + console.error('SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)'); + return + } + + var dir = lang.rtl === true ? 'rtl' : 'ltr'; + var attrs = "lang=" + (lang.isoName) + " dir=" + dir; + + lang.set = ssrContext.$q.lang.set; + + ssrContext.Q_HTML_ATTRS = ssrContext.Q_PREV_LANG !== void 0 + ? ssrContext.Q_HTML_ATTRS.replace(ssrContext.Q_PREV_LANG, attrs) + : attrs; + + ssrContext.Q_PREV_LANG = attrs; + ssrContext.$q.lang = lang; + } + else { + if (fromSSR === false) { + var el = document.documentElement; + el.setAttribute('dir', lang.rtl === true ? 'rtl' : 'ltr'); + el.setAttribute('lang', lang.isoName); + } + + lang.set = this$1$1.set; + $q.lang = this$1$1.props = lang; + this$1$1.isoName = lang.isoName; + this$1$1.nativeName = lang.nativeName; + } + }; + + var initialLang = lang || defaultLang; + + if (isSSR === true) { + queues.server.push(function (q, ctx) { + q.lang = {}; + q.lang.set = function (langObject) { + this$1$1.set(langObject, ctx.ssr); + }; + + q.lang.set(initialLang); + }); + + // one-time SSR server operation + if (this.isoName !== initialLang.isoName) { + this.isoName = initialLang.isoName; + this.nativeName = initialLang.nativeName; + this.props = initialLang; + } + } + else { + Vue__default["default"].util.defineReactive($q, 'lang', {}); + this.set(initialLang); + } + } + }; + + var reRGBA = /^rgb(a)?\((\d{1,3}),(\d{1,3}),(\d{1,3}),?([01]?\.?\d*?)?\)$/; + + function rgbToHex (ref) { + var r = ref.r; + var g = ref.g; + var b = ref.b; + var a = ref.a; + + var alpha = a !== void 0; + + r = Math.round(r); + g = Math.round(g); + b = Math.round(b); + + if ( + r > 255 || + g > 255 || + b > 255 || + (alpha && a > 100) + ) { + throw new TypeError('Expected 3 numbers below 256 (and optionally one below 100)') + } + + a = alpha + ? (Math.round(255 * a / 100) | 1 << 8).toString(16).slice(1) + : ''; + + return '#' + ((b | g << 8 | r << 16) | 1 << 24).toString(16).slice(1) + a + } + + function rgbToString (ref) { + var r = ref.r; + var g = ref.g; + var b = ref.b; + var a = ref.a; + + return ("rgb" + (a !== void 0 ? 'a' : '') + "(" + r + "," + g + "," + b + (a !== void 0 ? ',' + (a / 100) : '') + ")") + } + + function hexToRgb (hex) { + if (typeof hex !== 'string') { + throw new TypeError('Expected a string') + } + + hex = hex.replace(/^#/, ''); + + if (hex.length === 3) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; + } + else if (hex.length === 4) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3]; + } + + var num = parseInt(hex, 16); + + return hex.length > 6 + ? { r: num >> 24 & 255, g: num >> 16 & 255, b: num >> 8 & 255, a: Math.round((num & 255) / 2.55) } + : { r: num >> 16, g: num >> 8 & 255, b: num & 255 } + } + + function hsvToRgb (ref) { + var h = ref.h; + var s = ref.s; + var v = ref.v; + var a = ref.a; + + var r, g, b; + s = s / 100; + v = v / 100; + + h = h / 360; + var + i = Math.floor(h * 6), + f = h * 6 - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s); + + switch (i % 6) { + case 0: + r = v; + g = t; + b = p; + break + case 1: + r = q; + g = v; + b = p; + break + case 2: + r = p; + g = v; + b = t; + break + case 3: + r = p; + g = q; + b = v; + break + case 4: + r = t; + g = p; + b = v; + break + case 5: + r = v; + g = p; + b = q; + break + } + + return { + r: Math.round(r * 255), + g: Math.round(g * 255), + b: Math.round(b * 255), + a: a + } + } + + function rgbToHsv (ref) { + var r = ref.r; + var g = ref.g; + var b = ref.b; + var a = ref.a; + + var + max = Math.max(r, g, b), + min = Math.min(r, g, b), + d = max - min, + s = (max === 0 ? 0 : d / max), + v = max / 255; + var h; + + switch (max) { + case min: + h = 0; + break + case r: + h = (g - b) + d * (g < b ? 6 : 0); + h /= 6 * d; + break + case g: + h = (b - r) + d * 2; + h /= 6 * d; + break + case b: + h = (r - g) + d * 4; + h /= 6 * d; + break + } + + return { + h: Math.round(h * 360), + s: Math.round(s * 100), + v: Math.round(v * 100), + a: a + } + } + + function textToRgb (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string') + } + + var color = str.replace(/ /g, ''); + + var m = reRGBA.exec(color); + + if (m === null) { + return hexToRgb(color) + } + + var rgb = { + r: Math.min(255, parseInt(m[2], 10)), + g: Math.min(255, parseInt(m[3], 10)), + b: Math.min(255, parseInt(m[4], 10)) + }; + + if (m[1]) { + var alpha = parseFloat(m[5]); + rgb.a = Math.min(1, isNaN(alpha) === true ? 1 : alpha) * 100; + } + + return rgb + } + + /* works as darken if percent < 0 */ + function lighten (color, percent) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (typeof percent !== 'number') { + throw new TypeError('Expected a numeric percent') + } + + var rgb = textToRgb(color), + t = percent < 0 ? 0 : 255, + p = Math.abs(percent) / 100, + R = rgb.r, + G = rgb.g, + B = rgb.b; + + return '#' + ( + 0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + + (Math.round((t - G) * p) + G) * 0x100 + + (Math.round((t - B) * p) + B) + ).toString(16).slice(1) + } + + function luminosity (color) { + if (typeof color !== 'string' && (!color || color.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b} object as color') + } + + var + rgb = typeof color === 'string' ? textToRgb(color) : color, + r = rgb.r / 255, + g = rgb.g / 255, + b = rgb.b / 255, + R = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4), + G = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4), + B = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4); + return 0.2126 * R + 0.7152 * G + 0.0722 * B + } + + function brightness (color) { + if (typeof color !== 'string' && (!color || color.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b} object as color') + } + + var rgb = typeof color === 'string' + ? textToRgb(color) + : color; + + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000 + } + + function blend (fgColor, bgColor) { + if (typeof fgColor !== 'string' && (!fgColor || fgColor.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b[, a]} object as fgColor') + } + + if (typeof bgColor !== 'string' && (!bgColor || bgColor.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b[, a]} object as bgColor') + } + + var + rgb1 = typeof fgColor === 'string' ? textToRgb(fgColor) : fgColor, + r1 = rgb1.r / 255, + g1 = rgb1.g / 255, + b1 = rgb1.b / 255, + a1 = rgb1.a !== void 0 ? rgb1.a / 100 : 1, + rgb2 = typeof bgColor === 'string' ? textToRgb(bgColor) : bgColor, + r2 = rgb2.r / 255, + g2 = rgb2.g / 255, + b2 = rgb2.b / 255, + a2 = rgb2.a !== void 0 ? rgb2.a / 100 : 1, + a = a1 + a2 * (1 - a1), + r = Math.round(((r1 * a1 + r2 * a2 * (1 - a1)) / a) * 255), + g = Math.round(((g1 * a1 + g2 * a2 * (1 - a1)) / a) * 255), + b = Math.round(((b1 * a1 + b2 * a2 * (1 - a1)) / a) * 255); + + var ret = { r: r, g: g, b: b, a: Math.round(a * 100) }; + return typeof fgColor === 'string' + ? rgbToHex(ret) + : ret + } + + function changeAlpha (color, offset) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + + if (offset === void 0 || offset < -1 || offset > 1) { + throw new TypeError('Expected offset to be between -1 and 1') + } + + var ref = textToRgb(color); + var r = ref.r; + var g = ref.g; + var b = ref.b; + var a = ref.a; + var alpha = a !== void 0 ? a / 100 : 0; + + return rgbToHex({ + r: r, g: g, b: b, a: Math.round(Math.min(1, Math.max(0, alpha + offset)) * 100) + }) + } + + function setBrand (color, value, element) { + if ( element === void 0 ) element = document.body; + + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (typeof value !== 'string') { + throw new TypeError('Expected a string as value') + } + if (!(element instanceof Element)) { + throw new TypeError('Expected a DOM element') + } + + element.style.setProperty(("--q-color-" + color), value); + } + + function getBrand (color, element) { + if ( element === void 0 ) element = document.body; + + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (!(element instanceof Element)) { + throw new TypeError('Expected a DOM element') + } + + return getComputedStyle(element).getPropertyValue(("--q-color-" + color)).trim() || null + } + + function getPaletteColor (colorName) { + if (typeof colorName !== 'string') { + throw new TypeError('Expected a string as color') + } + + var el = document.createElement('div'); + + el.className = "text-" + colorName + " invisible fixed no-pointer-events"; + document.body.appendChild(el); + + var result = getComputedStyle(el).getPropertyValue('color'); + + el.remove(); + + return rgbToHex(textToRgb(result)) + } + + var colors = { + rgbToHex: rgbToHex, + hexToRgb: hexToRgb, + hsvToRgb: hsvToRgb, + rgbToHsv: rgbToHsv, + textToRgb: textToRgb, + lighten: lighten, + luminosity: luminosity, + brightness: brightness, + blend: blend, + changeAlpha: changeAlpha, + setBrand: setBrand, + getBrand: getBrand, + getPaletteColor: getPaletteColor + }; + + function getMobilePlatform (is) { + if (is.ios === true) { return 'ios' } + if (is.android === true) { return 'android' } + } + + function getBodyClasses (ref, cfg) { + var is = ref.is; + var has = ref.has; + var within = ref.within; + + var cls = [ + is.desktop === true ? 'desktop' : 'mobile', + ((has.touch === false ? 'no-' : '') + "touch") + ]; + + if (is.mobile === true) { + var mobile = getMobilePlatform(is); + mobile !== void 0 && cls.push('platform-' + mobile); + } + + if (is.nativeMobile === true) { + var type = is.nativeMobileWrapper; + + cls.push(type); + cls.push('native-mobile'); + + if ( + is.ios === true && + (cfg[type] === void 0 || cfg[type].iosStatusBarPadding !== false) + ) { + cls.push('q-ios-padding'); + } + } + else if (is.electron === true) { + cls.push('electron'); + } + else if (is.bex === true) { + cls.push('bex'); + } + + within.iframe === true && cls.push('within-iframe'); + + return cls + } + + // SSR takeover corrections + function clientUpdate () { + var classes = document.body.className; + var newCls = classes; + + if (iosCorrection !== void 0) { + newCls = newCls.replace('desktop', 'platform-ios mobile'); + } + + if (client.has.touch === true) { + newCls = newCls.replace('no-touch', 'touch'); + } + + if (client.within.iframe === true) { + newCls += ' within-iframe'; + } + + if (classes !== newCls) { + document.body.className = newCls; + } + } + + function setColors (brand) { + for (var color in brand) { + setBrand(color, brand[color]); + } + } + + var Body = { + install: function install (queues, cfg) { + if (isSSR === true) { + queues.server.push(function (q, ctx) { + var + cls = getBodyClasses(q.platform, cfg), + fn = ctx.ssr.setBodyClasses; + + if (cfg.screen !== void 0 && cfg.screen.bodyClass === true) { + cls.push('screen--xs'); + } + + if (typeof fn === 'function') { + fn(cls); + } + else { + ctx.ssr.Q_BODY_CLASSES = cls.join(' '); + } + }); + + return + } + + if (fromSSR === true) { + clientUpdate(); + } + else { + var cls = getBodyClasses(client, cfg); + + if (client.is.ie === true && client.is.versionNumber === 11) { + cls.forEach(function (c) { return document.body.classList.add(c); }); + } + else { + document.body.classList.add.apply(document.body.classList, cls); + } + } + + cfg.brand !== void 0 && setColors(cfg.brand); + } + }; + + var materialIcons = { + name: 'material-icons', + type: { + positive: 'check_circle', + negative: 'warning', + info: 'info', + warning: 'priority_high' + }, + arrow: { + up: 'arrow_upward', + right: 'arrow_forward', + down: 'arrow_downward', + left: 'arrow_back', + dropdown: 'arrow_drop_down' + }, + chevron: { + left: 'chevron_left', + right: 'chevron_right' + }, + colorPicker: { + spectrum: 'gradient', + tune: 'tune', + palette: 'style' + }, + pullToRefresh: { + icon: 'refresh' + }, + carousel: { + left: 'chevron_left', + right: 'chevron_right', + up: 'keyboard_arrow_up', + down: 'keyboard_arrow_down', + navigationIcon: 'lens' + }, + chip: { + remove: 'cancel', + selected: 'check' + }, + datetime: { + arrowLeft: 'chevron_left', + arrowRight: 'chevron_right', + now: 'access_time', + today: 'today' + }, + editor: { + bold: 'format_bold', + italic: 'format_italic', + strikethrough: 'strikethrough_s', + underline: 'format_underlined', + unorderedList: 'format_list_bulleted', + orderedList: 'format_list_numbered', + subscript: 'vertical_align_bottom', + superscript: 'vertical_align_top', + hyperlink: 'link', + toggleFullscreen: 'fullscreen', + quote: 'format_quote', + left: 'format_align_left', + center: 'format_align_center', + right: 'format_align_right', + justify: 'format_align_justify', + print: 'print', + outdent: 'format_indent_decrease', + indent: 'format_indent_increase', + removeFormat: 'format_clear', + formatting: 'text_format', + fontSize: 'format_size', + align: 'format_align_left', + hr: 'remove', + undo: 'undo', + redo: 'redo', + heading: 'format_size', + code: 'code', + size: 'format_size', + font: 'font_download', + viewSource: 'code' + }, + expansionItem: { + icon: 'keyboard_arrow_down', + denseIcon: 'arrow_drop_down' + }, + fab: { + icon: 'add', + activeIcon: 'close' + }, + field: { + clear: 'cancel', + error: 'error' + }, + pagination: { + first: 'first_page', + prev: 'keyboard_arrow_left', + next: 'keyboard_arrow_right', + last: 'last_page' + }, + rating: { + icon: 'grade' + }, + stepper: { + done: 'check', + active: 'edit', + error: 'warning' + }, + tabs: { + left: 'chevron_left', + right: 'chevron_right', + up: 'keyboard_arrow_up', + down: 'keyboard_arrow_down' + }, + table: { + arrowUp: 'arrow_upward', + warning: 'warning', + firstPage: 'first_page', + prevPage: 'chevron_left', + nextPage: 'chevron_right', + lastPage: 'last_page' + }, + tree: { + icon: 'play_arrow' + }, + uploader: { + done: 'done', + clear: 'clear', + add: 'add_box', + upload: 'cloud_upload', + removeQueue: 'clear_all', + removeUploaded: 'done_all' + } + }; + + var iconSet = { + install: function install ($q, queues, iconSet) { + var this$1$1 = this; + + var initialSet = iconSet || materialIcons; + + this.set = function (setObject, ssrContext) { + var def = Object.assign({}, setObject); + + if (isSSR === true) { + if (ssrContext === void 0) { + console.error('SSR ERROR: second param required: Quasar.iconSet.set(iconSet, ssrContext)'); + return + } + + def.set = ssrContext.$q.iconSet.set; + ssrContext.$q.iconSet = def; + } + else { + def.set = this$1$1.set; + $q.iconSet = def; + } + }; + + if (isSSR === true) { + queues.server.push(function (q, ctx) { + q.iconSet = {}; + q.iconSet.set = function (setObject) { + this$1$1.set(setObject, ctx.ssr); + }; + + q.iconSet.set(initialSet); + }); + } + else { + Vue__default["default"].util.defineReactive($q, 'iconMapFn', void 0); + Vue__default["default"].util.defineReactive($q, 'iconSet', {}); + + this.set(initialSet); + } + } + }; + + var autoInstalled = [ + Platform, Screen, Dark, Interaction + ]; + + var queues = { + server: [], // on SSR update + takeover: [] // on client takeover + }; + + var $q = { + version: version, + config: {} + }; + + function install (Vue, opts) { + if ( opts === void 0 ) opts = {}; + + if (this.__qInstalled === true) { return } + this.__qInstalled = true; + + var cfg = $q.config = Object.freeze(opts.config || {}); + + // required plugins + Platform.install($q, queues); + Body.install(queues, cfg); + Dark.install($q, queues, cfg); + Interaction.install($q, queues); + Screen.install($q, queues, cfg); + History.install(cfg); + lang.install($q, queues, opts.lang); + iconSet.install($q, queues, opts.iconSet); + + if (isSSR === true) { + Vue.mixin({ + beforeCreate: function beforeCreate () { + this.$q = this.$root.$options.$q; + } + }); + } + else { + Vue.prototype.$q = $q; + } + + opts.components && Object.keys(opts.components).forEach(function (key) { + var c = opts.components[key]; + if (typeof c === 'function') { + Vue.component(c.options.name, c); + } + }); + + opts.directives && Object.keys(opts.directives).forEach(function (key) { + var d = opts.directives[key]; + if (d.name !== void 0 && d.unbind !== void 0) { + Vue.directive(d.name, d); + } + }); + + if (opts.plugins) { + var param = { $q: $q, queues: queues, cfg: cfg }; + Object.keys(opts.plugins).forEach(function (key) { + var p = opts.plugins[key]; + if (typeof p.install === 'function' && autoInstalled.includes(p) === false) { + p.install(param); + } + }); + } + } + + var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; + + function humanStorageSize (bytes) { + var u = 0; + + while (parseInt(bytes, 10) >= 1024 && u < units.length - 1) { + bytes /= 1024; + ++u; + } + + return ("" + (bytes.toFixed(1)) + (units[u])) + } + + function capitalize (str) { + return str.charAt(0).toUpperCase() + str.slice(1) + } + + function between (v, min, max) { + return max <= min + ? min + : Math.min(max, Math.max(min, v)) + } + + function normalizeToInterval (v, min, max) { + if (max <= min) { + return min + } + + var size = (max - min + 1); + + var index = min + (v - min) % size; + if (index < min) { + index = size + index; + } + + return index === 0 ? 0 : index // fix for (-a % a) => -0 + } + + function pad (v, length, char) { + if ( length === void 0 ) length = 2; + if ( char === void 0 ) char = '0'; + + if (v === void 0 || v === null) { + return v + } + + var val = '' + v; + return val.length >= length + ? val + : new Array(length - val.length + 1).join(char) + val + } + + var format = { + humanStorageSize: humanStorageSize, + capitalize: capitalize, + between: between, + normalizeToInterval: normalizeToInterval, + pad: pad + }; + + function cache (vm, key, obj) { + if (isSSR === true) { return obj } + + var k = "__qcache_" + key; + return vm[k] === void 0 + ? (vm[k] = obj) + : vm[k] + } + + function cacheWithFn (vm, key, fn) { + if (isSSR === true) { return fn() } + + var k = "__qcache_" + key; + return vm[k] === void 0 + ? (vm[k] = fn()) + : vm[k] + } + + function getPropCacheMixin (propName, proxyPropName) { + var obj; + + return { + data: function data () { + var obj; + + var target = {}; + var source = this[propName]; + + for (var prop in source) { + target[prop] = source[prop]; + } + + return ( obj = {}, obj[proxyPropName] = target, obj ) + }, + + watch: ( obj = {}, obj[propName] = function (newObj, oldObj) { + var target = this[proxyPropName]; + + if (oldObj !== void 0) { + // we first delete obsolete events + for (var prop in oldObj) { + if (newObj[prop] === void 0) { + this.$delete(target, prop); + } + } + } + + for (var prop$1 in newObj) { + // we then update changed events + if (target[prop$1] !== newObj[prop$1]) { + this.$set(target, prop$1, newObj[prop$1]); + } + } + }, obj ) + } + } + + var ariaHidden = { 'aria-hidden': 'true' }; + + var iconAsButton = { tabindex: 0, type: 'button', 'aria-hidden': false, role: null }; + + var AttrsMixin = getPropCacheMixin('$attrs', 'qAttrs'); + + var + xhr = isSSR ? null : XMLHttpRequest, + open = isSSR ? null : xhr.prototype.open, + positionValues = [ 'top', 'right', 'bottom', 'left' ]; + + var stack = []; + var highjackCount = 0; + + function translate (ref) { + var p = ref.p; + var pos = ref.pos; + var active = ref.active; + var horiz = ref.horiz; + var reverse = ref.reverse; + var dir = ref.dir; + + var x = 1, y = 1; + + if (horiz === true) { + if (reverse === true) { x = -1; } + if (pos === 'bottom') { y = -1; } + return { transform: ("translate3d(" + (x * (p - 100)) + "%," + (active ? 0 : y * -200) + "%,0)") } + } + + if (reverse === true) { y = -1; } + if (pos === 'right') { x = -1; } + return { transform: ("translate3d(" + (active ? 0 : dir * x * -200) + "%," + (y * (p - 100)) + "%,0)") } + } + + function inc (p, amount) { + if (typeof amount !== 'number') { + if (p < 25) { + amount = Math.random() * 3 + 3; + } + else if (p < 65) { + amount = Math.random() * 3; + } + else if (p < 85) { + amount = Math.random() * 2; + } + else if (p < 99) { + amount = 0.6; + } + else { + amount = 0; + } + } + return between(p + amount, 0, 100) + } + + function highjackAjax (stackEntry) { + highjackCount++; + + stack.push(stackEntry); + + if (highjackCount > 1) { return } + + xhr.prototype.open = function (_, url) { + var stopStack = []; + + var loadStart = function () { + stack.forEach(function (entry) { + var hijackFilter = entry.getHijackFilter(); + if ( + hijackFilter === null || + hijackFilter(url) === true + ) { + entry.start(); + stopStack.push(entry.stop); + } + }); + }; + + var loadEnd = function () { + stopStack.forEach(function (stop) { stop(); }); + }; + + this.addEventListener('loadstart', loadStart, { once: true }); + this.addEventListener('loadend', loadEnd, { once: true }); + + open.apply(this, arguments); + }; + } + + function restoreAjax (start) { + stack = stack.filter(function (entry) { return entry.start !== start; }); + + highjackCount = Math.max(0, highjackCount - 1); + if (!highjackCount) { + xhr.prototype.open = open; + } + } + + var QAjaxBar = Vue__default["default"].extend({ + name: 'QAjaxBar', + + props: { + position: { + type: String, + default: 'top', + validator: function (val) { return positionValues.includes(val); } + }, + + size: { + type: String, + default: '2px' + }, + + color: String, + reverse: Boolean, + + skipHijack: Boolean, + hijackFilter: Function + }, + + data: function data () { + return { + calls: 0, + progress: 0, + onScreen: false, + animate: true + } + }, + + computed: { + classes: function classes () { + return "q-loading-bar q-loading-bar--" + (this.position) + + (this.color !== void 0 ? (" bg-" + (this.color)) : '') + + (this.animate === true ? '' : ' no-transition') + }, + + style: function style () { + var active = this.onScreen; + + var o = translate({ + p: this.progress, + pos: this.position, + active: active, + horiz: this.horizontal, + reverse: this.$q.lang.rtl === true && ['top', 'bottom'].includes(this.position) + ? this.reverse === false + : this.reverse, + dir: this.$q.lang.rtl === true ? -1 : 1 + }); + + o[this.sizeProp] = this.size; + o.opacity = active ? 1 : 0; + + return o + }, + + horizontal: function horizontal () { + return this.position === 'top' || this.position === 'bottom' + }, + + sizeProp: function sizeProp () { + return this.horizontal ? 'height' : 'width' + }, + + attrs: function attrs () { + return this.onScreen === true + ? { + role: 'progressbar', + 'aria-valuemin': 0, + 'aria-valuemax': 100, + 'aria-valuenow': this.progress + } + : ariaHidden + } + }, + + methods: { + start: function start (speed) { + var this$1$1 = this; + if ( speed === void 0 ) speed = 300; + + var oldSpeed = this.speed; + var newSpeed = this.speed = Math.max(0, speed) || 0; + + this.calls++; + + if (this.calls > 1) { + if (oldSpeed === 0 && newSpeed > 0) { + this.__work(); + } + else if (oldSpeed > 0 && newSpeed <= 0) { + clearTimeout(this.timer); + } + + return this.calls + } + + clearTimeout(this.timer); + this.$emit('start'); + + this.progress = 0; + + this.timer = setTimeout(function () { + this$1$1.animate = true; + newSpeed > 0 && this$1$1.__work(); + }, this.onScreen === true ? 500 : 1); + + if (this.onScreen !== true) { + this.onScreen = true; + this.animate = false; + } + + return this.calls + }, + + increment: function increment (amount) { + if (this.calls > 0) { + this.progress = inc(this.progress, amount); + } + + return this.calls + }, + + stop: function stop () { + var this$1$1 = this; + + this.calls = Math.max(0, this.calls - 1); + + if (this.calls > 0) { + return this.calls + } + + clearTimeout(this.timer); + this.$emit('stop'); + + var end = function () { + this$1$1.animate = true; + this$1$1.progress = 100; + this$1$1.timer = setTimeout(function () { + this$1$1.onScreen = false; + }, 1000); + }; + + if (this.progress === 0) { + this.timer = setTimeout(end, 1); + } + else { + end(); + } + + return this.calls + }, + + __work: function __work () { + var this$1$1 = this; + + if (this.progress < 100) { + this.timer = setTimeout(function () { + this$1$1.increment(); + this$1$1.__work(); + }, this.speed); + } + } + }, + + mounted: function mounted () { + var this$1$1 = this; + + if (this.skipHijack !== true) { + this.hijacked = true; + highjackAjax({ + start: this.start, + stop: this.stop, + getHijackFilter: function () { return this$1$1.hijackFilter || null; } + }); + } + }, + + beforeDestroy: function beforeDestroy () { + clearTimeout(this.timer); + this.hijacked === true && restoreAjax(this.start); + }, + + render: function render (h) { + return h('div', { + class: this.classes, + style: this.style, + attrs: this.attrs + }) + } + }); + + var sizes = { + xs: 18, + sm: 24, + md: 32, + lg: 38, + xl: 46 + }; + + function getSizeMixin (sizes) { + return { + props: { + size: String + }, + + computed: { + sizeStyle: function sizeStyle () { + if (this.size !== void 0) { + return { fontSize: this.size in sizes ? ((sizes[this.size]) + "px") : this.size } + } + } + } + } + } + + var SizeMixin = getSizeMixin(sizes); + + var TagMixin = { + props: { + tag: { + type: String, + default: 'div' + } + } + }; + + var ListenersMixin = getPropCacheMixin('$listeners', 'qListeners'); + + function slot (vm, slotName, otherwise) { + return vm.$scopedSlots[slotName] !== void 0 + ? vm.$scopedSlots[slotName]() + : otherwise + } + + function uniqueSlot (vm, slotName, otherwise) { + return vm.$scopedSlots[slotName] !== void 0 + ? [].concat(vm.$scopedSlots[slotName]()) + : otherwise + } + + /** + * Source definitely exists, + * so it's merged with the possible slot + */ + function mergeSlot (source, vm, slotName) { + return vm.$scopedSlots[slotName] !== void 0 + ? source.concat(vm.$scopedSlots[slotName]()) + : source + } + + /** + * Merge with possible slot, + * even if source might not exist + */ + function mergeSlotSafely (source, vm, slotName) { + if (vm.$scopedSlots[slotName] === void 0) { + return source + } + + var slot = vm.$scopedSlots[slotName](); + return source !== void 0 + ? source.concat(slot) + : slot + } + + var defaultViewBox = '0 0 24 24'; + + var sameFn = function (i) { return i; }; + var ionFn = function (i) { return ("ionicons " + i); }; + + var libMap = { + 'mdi-': function (i) { return ("mdi " + i); }, + 'icon-': sameFn, // fontawesome equiv + 'bt-': function (i) { return ("bt " + i); }, + 'eva-': function (i) { return ("eva " + i); }, + 'ion-md': ionFn, + 'ion-ios': ionFn, + 'ion-logo': ionFn, + 'iconfont ': sameFn, + 'ti-': function (i) { return ("themify-icon " + i); }, + 'bi-': function (i) { return ("bootstrap-icons " + i); } + }; + + var matMap = { + o_: '-outlined', + r_: '-round', + s_: '-sharp' + }; + + var symMap = { + sym_o_: '-outlined', + sym_r_: '-rounded', + sym_s_: '-sharp' + }; + + var libRE = new RegExp('^(' + Object.keys(libMap).join('|') + ')'); + var matRE = new RegExp('^(' + Object.keys(matMap).join('|') + ')'); + var symRE = new RegExp('^(' + Object.keys(symMap).join('|') + ')'); + var mRE = /^[Mm]\s?[-+]?\.?\d/; + var imgRE = /^img:/; + var svgUseRE = /^svguse:/; + var ionRE = /^ion-/; + var faRE = /^(fa-(solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /; + + var QIcon = Vue__default["default"].extend({ + name: 'QIcon', + + mixins: [ ListenersMixin, SizeMixin, TagMixin ], + + props: { + tag: { + type: String, + default: 'i' + }, + + name: String, + color: String, + left: Boolean, + right: Boolean + }, + + computed: { + classes: function classes () { + return 'q-icon' + + (this.left === true ? ' on-left' : '') + + (this.right === true ? ' on-right' : '') + + (this.color !== void 0 ? (" text-" + (this.color)) : '') + }, + + type: function type () { + var this$1$1 = this; + + var cls; + var icon = this.name; + + if (icon === 'none' || !icon) { + return { none: true } + } + + if (this.$q.iconMapFn !== void 0) { + var res = this.$q.iconMapFn(icon); + if (res !== void 0) { + if (res.icon !== void 0) { + icon = res.icon; + if (icon === 'none' || !icon) { + return { none: true } + } + } + else { + return { + cls: res.cls, + content: res.content !== void 0 + ? res.content + : ' ' + } + } + } + } + + if (mRE.test(icon) === true) { + var ref = icon.split('|'); + var def = ref[0]; + var viewBox = ref[1]; if ( viewBox === void 0 ) viewBox = defaultViewBox; + + return { + svg: true, + viewBox: viewBox, + nodes: def.split('&&').map(function (path) { + var ref = path.split('@@'); + var d = ref[0]; + var style = ref[1]; + var transform = ref[2]; + return this$1$1.$createElement('path', { + attrs: { d: d, transform: transform }, + style: style + }) + }) + } + } + + if (imgRE.test(icon) === true) { + return { + img: true, + src: icon.substring(4) + } + } + + if (svgUseRE.test(icon) === true) { + var ref$1 = icon.split('|'); + var def$1 = ref$1[0]; + var viewBox$1 = ref$1[1]; if ( viewBox$1 === void 0 ) viewBox$1 = defaultViewBox; + + return { + svguse: true, + src: def$1.substring(7), + viewBox: viewBox$1 + } + } + + var content = ' '; + var matches = icon.match(libRE); + + if (matches !== null) { + cls = libMap[ matches[ 1 ] ](icon); + } + else if (faRE.test(icon) === true) { + cls = icon; + } + else if (ionRE.test(icon) === true) { + cls = "ionicons ion-" + (this.$q.platform.is.ios === true ? 'ios' : 'md') + (icon.substr(3)); + } + else if (symRE.test(icon) === true) { + // "notranslate" class is for Google Translate + // to avoid tampering with Material Symbols ligature font + // + // Caution: To be able to add suffix to the class name, + // keep the 'material-symbols' at the end of the string. + cls = 'notranslate material-symbols'; + + var matches$1 = icon.match(symRE); + if (matches$1 !== null) { + icon = icon.substring(6); + cls += symMap[ matches$1[ 1 ] ]; + } + + content = icon; + } + else { + // "notranslate" class is for Google Translate + // to avoid tampering with Material Icons ligature font + // + // Caution: To be able to add suffix to the class name, + // keep the 'material-icons' at the end of the string. + cls = 'notranslate material-icons'; + + var matches$2 = icon.match(matRE); + if (matches$2 !== null) { + icon = icon.substring(2); + cls += matMap[ matches$2[ 1 ] ]; + } + + content = icon; + } + + return { + cls: cls, + content: content + } + } + }, + + render: function render (h) { + var data = { + class: this.classes, + style: this.sizeStyle, + on: Object.assign({}, this.qListeners), + attrs: { + 'aria-hidden': 'true', + role: 'presentation' + } + }; + + if (this.type.none === true) { + return h(this.tag, data, slot(this, 'default')) + } + + if (this.type.img === true) { + return h('span', data, mergeSlot([ + h('img', { + attrs: { src: this.type.src } + }) + ], this, 'default')) + } + + if (this.type.svg === true) { + return h('span', data, mergeSlot([ + h('svg', { + attrs: { + viewBox: this.type.viewBox || '0 0 24 24', + focusable: 'false' /* needed for IE11 */ + } + }, this.type.nodes) + ], this, 'default')) + } + + if (this.type.svguse === true) { + return h('span', data, mergeSlot([ + h('svg', { + attrs: { + viewBox: this.type.viewBox, + focusable: 'false' /* needed for IE11 */ + } + }, [ + h('use', { attrs: { 'xlink:href': this.type.src } }) + ]) + ], this, 'default')) + } + + if (this.type.cls !== void 0) { + data.class += ' ' + this.type.cls; + } + + return h(this.tag, data, mergeSlot([ + this.type.content + ], this, 'default')) + } + }); + + var QAvatar = Vue__default["default"].extend({ + name: 'QAvatar', + + mixins: [ ListenersMixin, SizeMixin ], + + props: { + fontSize: String, + + color: String, + textColor: String, + + icon: String, + square: Boolean, + rounded: Boolean + }, + + computed: { + classes: function classes () { + var obj; + + return ( obj = {}, obj[("bg-" + (this.color))] = this.color, obj[("text-" + (this.textColor) + " q-chip--colored")] = this.textColor, obj['q-avatar--square'] = this.square, obj['rounded-borders'] = this.rounded, obj ) + }, + + contentStyle: function contentStyle () { + if (this.fontSize) { + return { fontSize: this.fontSize } + } + } + }, + + render: function render (h) { + var icon = this.icon !== void 0 + ? [ h(QIcon, { props: { name: this.icon } }) ] + : void 0; + + return h('div', { + staticClass: 'q-avatar', + style: this.sizeStyle, + class: this.classes, + on: Object.assign({}, this.qListeners) + }, [ + h('div', { + staticClass: 'q-avatar__content row flex-center overflow-hidden', + style: this.contentStyle + }, mergeSlotSafely(icon, this, 'default')) + ]) + } + }); + + var QBadge = Vue__default["default"].extend({ + name: 'QBadge', + + mixins: [ ListenersMixin ], + + props: { + color: String, + textColor: String, + + floating: Boolean, + transparent: Boolean, + multiLine: Boolean, + outline: Boolean, + rounded: Boolean, + + label: [Number, String], + + align: { + type: String, + validator: function (v) { return ['top', 'middle', 'bottom'].includes(v); } + } + }, + + computed: { + style: function style () { + if (this.align !== void 0) { + return { verticalAlign: this.align } + } + }, + + classes: function classes () { + var text = this.outline === true + ? this.color || this.textColor + : this.textColor; + + return 'q-badge flex inline items-center no-wrap' + + " q-badge--" + (this.multiLine === true ? 'multi' : 'single') + "-line" + + (this.outline === true + ? ' q-badge--outline' + : (this.color !== void 0 ? (" bg-" + (this.color)) : '') + ) + + (text !== void 0 ? (" text-" + text) : '') + + (this.floating === true ? ' q-badge--floating' : '') + + (this.rounded === true ? ' q-badge--rounded' : '') + + (this.transparent === true ? ' q-badge--transparent' : '') + }, + + attrs: function attrs () { + return { + role: 'status', + 'aria-label': this.label + } + } + }, + + render: function render (h) { + return h('div', { + style: this.style, + class: this.classes, + attrs: this.attrs, + on: Object.assign({}, this.qListeners) + }, this.label !== void 0 ? [ this.label ] : slot(this, 'default')) + } + }); + + var DarkMixin = { + props: { + dark: { + type: Boolean, + default: null + } + }, + + computed: { + darkSuffix: function darkSuffix () { + if (this.dark === null && this.$q.dark.isActive === null) { + return 'dark-auto' + } + + return this.dark === true || (this.dark === null && this.$q.dark.isActive === true) + ? 'dark' + : 'light' + } + } + }; + + var attrs$6 = { role: 'alert' }; + + var QBanner = Vue__default["default"].extend({ + name: 'QBanner', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + inlineActions: Boolean, + dense: Boolean, + rounded: Boolean + }, + + render: function render (h) { + var obj; + + var actions = slot(this, 'action'); + var child = [ + h('div', { + staticClass: 'q-banner__avatar col-auto row items-center self-start' + }, slot(this, 'avatar')), + + h('div', { + staticClass: 'q-banner__content col text-body2' + }, slot(this, 'default')) + ]; + + actions !== void 0 && child.push( + h('div', { + staticClass: 'q-banner__actions row items-center justify-end', + class: ("col-" + (this.inlineActions === true ? 'auto' : 'all')) + }, actions) + ); + + return h('div', { + staticClass: 'q-banner row items-center', + class: ( obj = { + 'q-banner--top-padding': actions !== void 0 && !this.inlineActions, + 'q-banner--dense': this.dense + }, obj[("q-banner--" + (this.darkSuffix) + " q-" + (this.darkSuffix))] = true, obj['rounded-borders'] = this.rounded, obj ), + attrs: attrs$6, + on: Object.assign({}, this.qListeners) + }, child) + } + }); + + var attrs$5 = { role: 'toolbar' }; + + var QBar = Vue__default["default"].extend({ + name: 'QBar', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + dense: Boolean + }, + + computed: { + classes: function classes () { + return "q-bar--" + (this.dense === true ? 'dense' : 'standard') + + " q-bar--" + (this.darkSuffix) + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-bar row no-wrap items-center', + class: this.classes, + attrs: attrs$5, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var + alignMap = { + left: 'start', + center: 'center', + right: 'end', + between: 'between', + around: 'around', + evenly: 'evenly', + stretch: 'stretch' + }, + alignValues$2 = Object.keys(alignMap); + + var AlignMixin = { + props: { + align: { + type: String, + validator: function (v) { return alignValues$2.includes(v); } + } + }, + + computed: { + alignClass: function alignClass () { + var align = this.align === void 0 + ? (this.vertical === true ? 'stretch' : 'left') + : this.align; + + return ((this.vertical === true ? 'items' : 'justify') + "-" + (alignMap[align])) + } + } + }; + + var disabledValues = [ true, '' ]; + + var QBreadcrumbs = Vue__default["default"].extend({ + name: 'QBreadcrumbs', + + mixins: [ ListenersMixin, AlignMixin ], + + props: { + separator: { + type: String, + default: '/' + }, + separatorColor: String, + + activeColor: { + type: String, + default: 'primary' + }, + + gutter: { + type: String, + validator: function (v) { return ['none', 'xs', 'sm', 'md', 'lg', 'xl'].includes(v); }, + default: 'sm' + } + }, + + computed: { + classes: function classes () { + return ("" + (this.alignClass) + (this.gutter === 'none' ? '' : (" q-gutter-" + (this.gutter)))) + }, + + sepClass: function sepClass () { + return this.separatorColor + ? (" text-" + (this.separatorColor)) + : '' + }, + + activeClass: function activeClass () { + return (" text-" + (this.activeColor)) + } + }, + + render: function render (h) { + var this$1$1 = this; + + var nodes = slot(this, 'default'); + if (nodes === void 0) { return } + + var els = 1; + + var + child = [], + len = nodes.filter(function (c) { return c.tag !== void 0 && c.tag.endsWith('-QBreadcrumbsEl'); }).length, + separator = this.$scopedSlots.separator !== void 0 + ? this.$scopedSlots.separator + : function () { return this$1$1.separator; }; + + nodes.forEach(function (comp) { + if (comp.tag !== void 0 && comp.tag.endsWith('-QBreadcrumbsEl')) { + var middle = els < len; + var disabled = disabledValues.includes(comp.componentOptions.propsData.disable); + var cls = middle === true + ? (disabled !== true ? this$1$1.activeClass : '') + : ' q-breadcrumbs--last'; + + els++; + + child.push(h('div', { + staticClass: 'flex items-center' + cls + }, [ comp ])); + + middle === true && child.push(h('div', { + staticClass: 'q-breadcrumbs__separator' + this$1$1.sepClass + }, separator())); + } + else { + child.push(comp); + } + }); + + return h('div', { + staticClass: 'q-breadcrumbs', + on: Object.assign({}, this.qListeners) + }, [ + h('div', { + staticClass: 'flex items-center', + class: this.classes + }, child) + ]) + } + }); + + var trailingSlashRE = /\/?$/; + + function equals (current, target) { + if (Object.keys(current).length !== Object.keys(target).length) { + return false + } + + // route query and params are strings when read from URL + for (var key in target) { + if (!(key in current) || String(current[key]) !== String(target[key])) { + return false + } + } + return true + } + + function includes (current, target) { + for (var key in target) { + if (!(key in current)) { + return false + } + } + return true + } + + function isSameRoute (current, target) { + if (!target) { + return false + } + + if (current.path && target.path) { + return ( + current.path.replace(trailingSlashRE, '') === target.path.replace(trailingSlashRE, '') && + current.hash === target.hash && + equals(current.query, target.query) + ) + } + + return typeof current.name === 'string' && + current.name === target.name && + current.hash === target.hash && + equals(current.query, target.query) === true && + equals(current.params, target.params) === true + } + + function isIncludedRoute (current, target) { + return current.path.replace(trailingSlashRE, '/').indexOf(target.path.replace(trailingSlashRE, '/')) === 0 && + (typeof target.hash !== 'string' || target.hash.length < 2 || current.hash === target.hash) && + includes(current.query, target.query) === true + } + + var routerLinkProps = { + // router-link + to: [String, Object], + exact: Boolean, + append: Boolean, + replace: Boolean, + activeClass: { + type: String, + default: 'q-router-link--active' + }, + exactActiveClass: { + type: String, + default: 'q-router-link--exact-active' + }, + + // regular link + href: String, + target: String, + + // state + disable: Boolean + }; + + // external props: type, tag + // external: fallbackTag + + var RouterLinkMixin = { + props: routerLinkProps, + + computed: { + hasHrefLink: function hasHrefLink () { + return this.disable !== true && this.href !== void 0 + }, + + // beware, it gets overwritten in QRouteTab + hasRouterLinkProps: function hasRouterLinkProps () { + return this.$router !== void 0 && + this.disable !== true && + this.hasHrefLink !== true && + this.to !== void 0 && this.to !== null && this.to !== '' + }, + + resolvedLink: function resolvedLink () { + return this.hasRouterLinkProps === true + ? this.__getLink(this.to, this.append) + : null + }, + + hasRouterLink: function hasRouterLink () { + return this.resolvedLink !== null + }, + + hasLink: function hasLink () { + return this.hasHrefLink === true || this.hasRouterLink === true + }, + + linkTag: function linkTag () { + return this.type === 'a' || this.hasLink === true + ? 'a' + : (this.tag || this.fallbackTag || 'div') + }, + + linkAttrs: function linkAttrs () { + return this.hasHrefLink === true + ? { + href: this.href, + target: this.target + } + : ( + this.hasRouterLink === true + ? { + href: this.resolvedLink.href, + target: this.target + } + : {} + ) + }, + + linkIsActive: function linkIsActive () { + return this.hasRouterLink === true && + isIncludedRoute(this.$route, this.resolvedLink.route) + }, + + linkIsExactActive: function linkIsExactActive () { + return this.hasRouterLink === true && + isSameRoute(this.$route, this.resolvedLink.route) + }, + + linkClass: function linkClass () { + return this.hasRouterLink === true + ? ( + this.linkIsExactActive === true + ? (" " + (this.exactActiveClass) + " " + (this.activeClass)) + : ( + this.exact === true + ? '' + : (this.linkIsActive === true ? (" " + (this.activeClass)) : '') + ) + ) + : '' + } + }, + + methods: { + __getLink: function __getLink (to, append) { + // we protect from accessing this.$route without + // actually needing it so that we won't trigger + // unnecessary updates in computed props using this method + try { + return append === true + ? this.$router.resolve(to, this.$route, true) + : this.$router.resolve(to) + } + catch (_) {} + + return null + }, + + /** + * @returns Promise | Promise + */ + __navigateToRouterLink: function __navigateToRouterLink ( + e, + ref + ) { + if ( ref === void 0 ) ref = {}; + var returnRouterError = ref.returnRouterError; + var to = ref.to; + var replace = ref.replace; if ( replace === void 0 ) replace = this.replace; + var append = ref.append; + + if (this.disable === true) { + // ensure native navigation is prevented in all cases, + // like in QRouteTab where hasRouterLinkProps does not care about disable state + e.preventDefault(); + return Promise.resolve(false) + } + + if ( + // don't redirect with control keys; + // should match RouterLink from Vue Router + e.metaKey || e.altKey || e.ctrlKey || e.shiftKey || + + // don't redirect on right click + (e.button !== void 0 && e.button !== 0) || + + // don't redirect if it should open in a new window + this.target === '_blank' + ) { + return Promise.resolve(false) + } + + e.preventDefault(); + + var resolvedLink = to === void 0 + ? this.resolvedLink + : this.__getLink(to, append); + + if (resolvedLink === null) { + return Promise[returnRouterError === true ? 'reject' : 'resolve'](false) + } + + var promise = this.$router[replace === true ? 'replace' : 'push'](resolvedLink.location); + + return returnRouterError === true + ? promise + : promise.catch(function () {}) + }, + + __navigateOnClick: function __navigateOnClick (e) { + var this$1$1 = this; + + if (this.hasRouterLink === true) { + var go = function (opts) { return this$1$1.__navigateToRouterLink(e, opts); }; + + this.$emit('click', e, go); + + // for backward compatibility + e.navigate === false && e.preventDefault(); + + e.defaultPrevented !== true && go(); + } + else { + this.$emit('click', e); + } + } + } + }; + + var QBreadcrumbsEl = Vue__default["default"].extend({ + name: 'QBreadcrumbsEl', + + mixins: [ ListenersMixin, RouterLinkMixin ], + + props: { + label: String, + icon: String + }, + + computed: { + iconClass: function iconClass () { + return 'q-breadcrumbs__el-icon' + + (this.label !== void 0 ? ' q-breadcrumbs__el-icon--with-label' : '') + }, + + renderData: function renderData () { + return { + staticClass: 'q-breadcrumbs__el q-link ' + + 'flex inline items-center relative-position ' + + (this.disable !== true ? 'q-link--focusable' + this.linkClass : 'q-breadcrumbs__el--disabled'), + attrs: this.linkAttrs, + on: Object.assign({}, this.qListeners, + {click: this.__navigateOnClick}) + } + } + }, + + beforeCreate: function beforeCreate () { + this.fallbackTag = 'span'; + }, + + render: function render (h) { + var child = []; + + this.icon !== void 0 && child.push( + h(QIcon, { + class: this.iconClass, + props: { name: this.icon } + }) + ); + + this.label !== void 0 && child.push(this.label); + + return h(this.linkTag, this.renderData, mergeSlot(child, this, 'default')) + } + }); + + var mixin = { + mixins: [ ListenersMixin ], + + props: { + color: String, + size: { + type: [Number, String], + default: '1em' + } + }, + + computed: { + cSize: function cSize () { + return this.size in sizes + ? ((sizes[this.size]) + "px") + : this.size + }, + + classes: function classes () { + if (this.color) { + return ("text-" + (this.color)) + } + } + } + }; + + var QSpinner = Vue__default["default"].extend({ + name: 'QSpinner', + + mixins: [ mixin ], + + props: { + thickness: { + type: Number, + default: 5 + } + }, + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner q-spinner-mat', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '25 25 50 50' + } + }, [ + h('circle', { + staticClass: 'path', + attrs: { + 'cx': '50', + 'cy': '50', + 'r': '20', + 'fill': 'none', + 'stroke': 'currentColor', + 'stroke-width': this.thickness, + 'stroke-miterlimit': '10' + } + }) + ]) + } + }); + + function offset (el) { + if (el === window) { + return { top: 0, left: 0 } + } + var ref = el.getBoundingClientRect(); + var top = ref.top; + var left = ref.left; + return { top: top, left: left } + } + + function style (el, property) { + return window.getComputedStyle(el).getPropertyValue(property) + } + + function height (el) { + return el === window + ? window.innerHeight + : el.getBoundingClientRect().height + } + + function width$1 (el) { + return el === window + ? window.innerWidth + : el.getBoundingClientRect().width + } + + function css (element, css) { + var style = element.style; + + Object.keys(css).forEach(function (prop) { + style[prop] = css[prop]; + }); + } + + function cssBatch (elements, style) { + elements.forEach(function (el) { return css(el, style); }); + } + + function ready (fn) { + if (typeof fn !== 'function') { + return + } + + if (document.readyState !== 'loading') { + return fn() + } + + document.addEventListener('DOMContentLoaded', fn, false); + } + + // internal + function getElement (el) { + var type = typeof el; + + if (type === 'function') { + el = el(); + } + + if (type === 'string') { + try { + el = document.querySelector(el); + } + catch (err) {} + } + + if (el !== Object(el)) { + return null + } + + return el._isVue === true && el.$el !== void 0 + ? el.$el + : el + } + + // internal + function getBodyFullscreenElement (activeEl) { + return activeEl === document.documentElement || activeEl === null + ? document.body + : activeEl + } + + var dom = { + offset: offset, + style: style, + height: height, + width: width$1, + css: css, + cssBatch: cssBatch, + ready: ready + }; + + function shouldIgnoreKey (evt) { + return evt !== Object(evt) || + evt.type.indexOf('key') !== 0 || + evt.target !== document.activeElement || + evt.target.qComposing === true + } + + function isKeyCode (evt, keyCodes) { + return shouldIgnoreKey(evt) === true + ? false + : [].concat(keyCodes).includes(evt.keyCode) + } + + var passiveCapture$2 = listenOpts.passiveCapture; + + function startPhase1 (evtStart, el, ctx, forceCenter) { + ctx.modifiers.stop === true && stop(evtStart); + + var ref = ctx.modifiers; + var color = ref.color; + var early = ref.early; + var center = ctx.modifiers.center === true || forceCenter === true, + node = document.createElement('span'), + innerNode = document.createElement('span'), + pos = position(evtStart); + var ref$1 = el.getBoundingClientRect(); + var left = ref$1.left; + var top = ref$1.top; + var width = ref$1.width; + var height = ref$1.height; + var diameter = Math.sqrt(width * width + height * height), + radius = diameter / 2, + centerX = ((width - diameter) / 2) + "px", + x = center ? centerX : ((pos.left - left - radius) + "px"), + centerY = ((height - diameter) / 2) + "px", + y = center ? centerY : ((pos.top - top - radius) + "px"), + delay = Date.now() + 300; + + innerNode.className = 'q-ripple__inner'; + css(innerNode, { + height: (diameter + "px"), + width: (diameter + "px"), + transform: ("translate3d(" + x + "," + y + ",0) scale3d(.2,.2,1)"), + opacity: 0 + }); + + node.className = "q-ripple" + (color ? ' text-' + color : ''); + node.setAttribute('dir', 'ltr'); + node.appendChild(innerNode); + el.appendChild(node); + + var timer, startPhase2, eventSource, target, waitForScroll; + + var abort = function () { + clearTimeout(timer); + + var index = ctx.abort.indexOf(abort); + if (index > -1) { + ctx.abort.splice(index, 1); + node.remove(); + + switch (eventSource) { + case 'mouse': + document.removeEventListener('mouseup', startPhase2, passiveCapture$2); + el.removeEventListener('mouseout', startPhase2, passiveCapture$2); + break + case 'keyboard': + document.removeEventListener('keyup', startPhase2, passiveCapture$2); + break + case 'touch': + target.removeEventListener('touchmove', abort, passiveCapture$2); + target.removeEventListener('touchmove', startPhase2, passiveCapture$2); + target.removeEventListener('touchend', startPhase2, passiveCapture$2); + target.removeEventListener('touchcancel', startPhase2, passiveCapture$2); + ctx.preventMouse--; + break + } + } + }; + ctx.abort.push(abort); + + var phase2 = function () { + if (waitForScroll !== true) { + innerNode.classList.remove('q-ripple__inner--enter'); + innerNode.classList.add('q-ripple__inner--leave'); + innerNode.style.opacity = 0; + + timer = setTimeout(abort, 275); + } + }; + + if (early === true) { + if (evtStart.type.indexOf('mouse') === 0) { + eventSource = 'mouse'; + + startPhase2 = function (evtEnd) { + if ( + evtEnd.type !== 'mouseout' || + el.contains(evtEnd.toElement) !== true + ) { + timer = setTimeout(phase2, delay - Date.now()); + } + }; + + document.addEventListener('mouseup', startPhase2, passiveCapture$2); + el.addEventListener('mouseout', startPhase2, passiveCapture$2); + } + else if (evtStart.type.indexOf('key') === 0) { + eventSource = 'keyboard'; + ctx.preventKeyboard = true; + + startPhase2 = function () { + ctx.preventKeyboard = false; + timer = setTimeout(phase2, delay - Date.now()); + }; + + document.addEventListener('keyup', startPhase2, passiveCapture$2); + } + else { + eventSource = 'touch'; + waitForScroll = true; + target = evtStart.target; + ctx.preventMouse++; + + startPhase2 = function (evtEnd) { + if ( + evtEnd.type !== 'touchmove' || + evtEnd.changedTouches.length === 0 || + el.contains(document.elementFromPoint(evtEnd.changedTouches[0].clientX, evtEnd.changedTouches[0].clientY)) !== true + ) { + timer = setTimeout(phase2, delay - Date.now()); + } + }; + + target.addEventListener('touchmove', abort, passiveCapture$2); + target.addEventListener('touchmove', startPhase2, passiveCapture$2); + target.addEventListener('touchend', startPhase2, passiveCapture$2); + target.addEventListener('touchcancel', startPhase2, passiveCapture$2); + } + } + + timer = setTimeout(function () { + if (waitForScroll === true) { + waitForScroll = void 0; + target.removeEventListener('touchmove', abort, passiveCapture$2); + } + + innerNode.classList.add('q-ripple__inner--enter'); + innerNode.style.transform = "translate3d(" + centerX + "," + centerY + ",0) scale3d(1,1,1)"; + innerNode.style.opacity = 0.2; + + if (early !== true) { + timer = setTimeout(phase2, delay - Date.now()); + } + }, waitForScroll === true ? 70 : 50); // allow a longer delay to catch scroll + } + + function updateCtx (ctx, el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + + ctx.enabled = value !== false; + + if (ctx.enabled === true) { + var cfg = Object.assign({}, $q.config.ripple, modifiers, value); + var earlyChanged = ctx.modifiers.early === void 0 || ctx.modifiers.early !== cfg.early; + + ctx.modifiers = { + early: cfg.early === true, + stop: cfg.stop === true, + center: cfg.center === true, + color: cfg.color || arg, + keyCodes: [].concat(cfg.keyCodes || 13) + }; + + if (earlyChanged === true) { + cleanEvt(ctx, 'main'); + + if (cfg.early === true) { + addEvt(ctx, 'main', [ + [ el, 'mousedown', 'start', 'passive' ], + [ el, 'touchstart', 'start', 'passive' ], + [ el, 'keydown', 'keystart', 'passive' ] + ]); + } + else { + addEvt(ctx, 'main', [ + [ el, 'click', 'start', 'passive' ], + [ el, 'keyup', 'keystart', 'passive' ] + ]); + } + } + } + else { + ctx.abort.slice().forEach(function (fn) { fn(); }); + cleanEvt(ctx, 'main'); + ctx.preventMouse = 0; + ctx.preventKeyboard = false; + } + } + + var Ripple = { + name: 'ripple', + + inserted: function inserted (el, binding) { + var ctx = { + modifiers: {}, + abort: [], + preventMouse: 0, + preventKeyboard: false, + + start: function start (evt) { + if ( + ctx.enabled === true && + evt.qSkipRipple !== true && + (evt.type !== 'mousedown' || ctx.preventMouse === 0) && + // on ENTER in form IE emits a PointerEvent with negative client cordinates + (client.is.ie !== true || evt.clientX >= 0) + ) { + startPhase1(evt, el, ctx, $q.interaction.isKeyboard); + } + }, + + keystart: function keystart (evt) { + if ( + ctx.preventKeyboard !== true && + ctx.enabled === true && + evt.qSkipRipple !== true && + isKeyCode(evt, ctx.modifiers.keyCodes) === true + ) { + startPhase1(evt, el, ctx, true); + } + } + }; + + updateCtx(ctx, el, binding); + + if (el.__qripple) { + el.__qripple_old = el.__qripple; + } + + el.__qripple = ctx; + }, + + update: function update (el, binding) { + el.__qripple !== void 0 && updateCtx(el.__qripple, el, binding); + }, + + unbind: function unbind (el) { + var ctx = el.__qripple_old || el.__qripple; + if (ctx !== void 0) { + ctx.abort.slice().forEach(function (fn) { fn(); }); + cleanEvt(ctx, 'main'); + delete el[el.__qripple_old ? '__qripple_old' : '__qripple']; + } + } + }; + + var RippleMixin = { + directives: { + Ripple: Ripple + }, + + props: { + ripple: { + type: [Boolean, Object], + default: true + } + } + }; + + var btnPadding = { + none: 0, + xs: 4, + sm: 8, + md: 16, + lg: 24, + xl: 32 + }; + + var formTypes = [ 'button', 'submit', 'reset' ]; + var mediaTypeRe = /[^\s]\/[^\s]/; + + var btnDesignOptions = [ 'flat', 'outline', 'push', 'unelevated' ]; + var getBtnDesign = function (vm, defaultValue) { + if (vm.flat === true) { return 'flat' } + if (vm.outline === true) { return 'outline' } + if (vm.push === true) { return 'push' } + if (vm.unelevated === true) { return 'unelevated' } + return defaultValue + }; + + var BtnMixin = { + mixins: [ + ListenersMixin, + RippleMixin, + RouterLinkMixin, + AlignMixin, + getSizeMixin({ + xs: 8, + sm: 10, + md: 14, + lg: 20, + xl: 24 + }) + ], + + props: Object.assign({}, {type: { + type: String, + default: 'button' + }, + + to: [ Object, String ], + replace: Boolean, + append: Boolean, + + label: [ Number, String ], + icon: String, + iconRight: String}, + + btnDesignOptions.reduce( + function (acc, val) { return (acc[ val ] = Boolean) && acc; }, + {} + ), + + {square: Boolean, + round: Boolean, + rounded: Boolean, + glossy: Boolean, + + size: String, + fab: Boolean, + fabMini: Boolean, + padding: String, + + color: String, + textColor: String, + noCaps: Boolean, + noWrap: Boolean, + dense: Boolean, + + tabindex: [ Number, String ], + + align: { default: 'center' }, + stack: Boolean, + stretch: Boolean, + loading: { + type: Boolean, + default: null + }, + disable: Boolean}), + + computed: { + style: function style () { + if (this.fab === false && this.fabMini === false) { + return this.sizeStyle + } + }, + + isRounded: function isRounded () { + return this.rounded === true || this.fab === true || this.fabMini === true + }, + + isActionable: function isActionable () { + return this.disable !== true && this.loading !== true + }, + + computedTabIndex: function computedTabIndex () { + return this.isActionable === true ? this.tabindex || 0 : -1 + }, + + design: function design () { + return getBtnDesign(this, 'standard') + }, + + attrs: function attrs () { + var acc = { tabindex: this.computedTabIndex }; + + if (this.hasLink === true) { + Object.assign(acc, this.linkAttrs); + } + else if (formTypes.includes(this.type) === true) { + acc.type = this.type; + } + + if (this.linkTag === 'a') { + if (this.disable === true) { + acc['aria-disabled'] = 'true'; + } + else if (acc.href === void 0) { + acc.role = 'button'; + } + + if (this.hasRouterLink !== true && mediaTypeRe.test(this.type) === true) { + acc.type = this.type; + } + } + else if (this.disable === true) { + acc.disabled = ''; + acc['aria-disabled'] = 'true'; + } + + if (this.loading === true && this.percentage !== void 0) { + acc.role = 'progressbar'; + acc['aria-valuemin'] = 0; + acc['aria-valuemax'] = 100; + acc['aria-valuenow'] = this.percentage; + } + + return acc + }, + + classes: function classes () { + var colors; + + if (this.color !== void 0) { + if (this.flat === true || this.outline === true) { + colors = "text-" + (this.textColor || this.color); + } + else { + colors = "bg-" + (this.color) + " text-" + (this.textColor || 'white'); + } + } + else if (this.textColor) { + colors = "text-" + (this.textColor); + } + + var shape = this.round === true + ? 'round' + : ("rectangle" + (this.isRounded === true ? ' q-btn--rounded' : (this.square === true ? ' q-btn--square' : ''))); + + return "q-btn--" + (this.design) + " q-btn--" + shape + + (colors !== void 0 ? ' ' + colors : '') + + (this.isActionable === true ? ' q-btn--actionable q-focusable q-hoverable' : (this.disable === true ? ' disabled' : '')) + + (this.fab === true ? ' q-btn--fab' : (this.fabMini === true ? ' q-btn--fab-mini' : '')) + + (this.noCaps === true ? ' q-btn--no-uppercase' : '') + + (this.noWrap === true ? '' : ' q-btn--wrap') + // this is for IE11 + (this.dense === true ? ' q-btn--dense' : '') + + (this.stretch === true ? ' no-border-radius self-stretch' : '') + + (this.glossy === true ? ' glossy' : '') + }, + + innerClasses: function innerClasses () { + return this.alignClass + (this.stack === true ? ' column' : ' row') + + (this.noWrap === true ? ' no-wrap text-no-wrap' : '') + + (this.loading === true ? ' q-btn__content--hidden' : '') + }, + + wrapperStyle: function wrapperStyle () { + if (this.padding !== void 0) { + return { + padding: this.padding + .split(/\s+/) + .map(function (v) { return v in btnPadding ? btnPadding[v] + 'px' : v; }) + .join(' '), + minWidth: '0', + minHeight: '0' + } + } + } + } + }; + + var passiveCapture$1 = listenOpts.passiveCapture; + + var + touchTarget = void 0, + keyboardTarget = void 0, + mouseTarget = void 0; + + var iconAttrs = { role: 'img', 'aria-hidden': 'true' }; + + var QBtn = Vue__default["default"].extend({ + name: 'QBtn', + + mixins: [ BtnMixin ], + + props: { + percentage: Number, + darkPercentage: Boolean + }, + + computed: { + hasLabel: function hasLabel () { + return this.label !== void 0 && this.label !== null && this.label !== '' + }, + + computedRipple: function computedRipple () { + return this.ripple === false + ? false + : Object.assign({}, {keyCodes: this.hasLink === true ? [ 13, 32 ] : [ 13 ]}, + (this.ripple === true ? {} : this.ripple)) + }, + + percentageStyle: function percentageStyle () { + var val = Math.max(0, Math.min(100, this.percentage)); + if (val > 0) { + return { transition: 'transform 0.6s', transform: ("translateX(" + (val - 100) + "%)") } + } + }, + + onEvents: function onEvents () { + if (this.loading === true) { + return { + mousedown: this.__onLoadingEvt, + touchstart: this.__onLoadingEvt, + click: this.__onLoadingEvt, + keydown: this.__onLoadingEvt, + keyup: this.__onLoadingEvt + } + } + + if (this.isActionable === true) { + var on = Object.assign({}, this.qListeners, + {click: this.click, + keydown: this.__onKeydown, + mousedown: this.__onMousedown}); + + if (this.$q.platform.has.touch === true) { + on[ ((on.touchstart === void 0 ? '&' : '') + "touchstart") ] = this.__onTouchstart; + } + + return on + } + + return { + // needed; especially for disabled tags + click: stopAndPrevent + } + }, + + directives: function directives () { + if (this.disable !== true && this.ripple !== false) { + return [{ + name: 'ripple', + value: this.computedRipple, + modifiers: { center: this.round } + }] + } + } + }, + + methods: { + click: function click (e) { + var this$1$1 = this; + + if (e !== void 0) { + if (e.defaultPrevented === true) { + return + } + + var el = document.activeElement; + // focus button if it came from ENTER on form + // prevent the new submit (already done) + if ( + this.type === 'submit' && + ( + (this.$q.platform.is.ie === true && (e.clientX < 0 || e.clientY < 0)) || + ( + el !== document.body && + this.$el.contains(el) === false && + // required for iOS and desktop Safari + el.contains(this.$el) === false + ) + ) + ) { + this.$el.focus(); + + var onClickCleanup = function () { + document.removeEventListener('keydown', stopAndPrevent, true); + document.removeEventListener('keyup', onClickCleanup, passiveCapture$1); + this$1$1.$el !== void 0 && this$1$1.$el.removeEventListener('blur', onClickCleanup, passiveCapture$1); + }; + + document.addEventListener('keydown', stopAndPrevent, true); + document.addEventListener('keyup', onClickCleanup, passiveCapture$1); + this.$el.addEventListener('blur', onClickCleanup, passiveCapture$1); + } + } + + this.__navigateOnClick(e); + }, + + __onKeydown: function __onKeydown (e) { + this.$emit('keydown', e); + + if (isKeyCode(e, [ 13, 32 ]) === true) { + if (keyboardTarget !== this.$el) { + keyboardTarget !== void 0 && this.__cleanup(); + + if (e.defaultPrevented !== true) { + // focus external button if the focus helper was focused before + this.$el.focus(); + + keyboardTarget = this.$el; + this.$el.classList.add('q-btn--active'); + document.addEventListener('keyup', this.__onPressEnd, true); + this.$el.addEventListener('blur', this.__onPressEnd, passiveCapture$1); + } + } + + stopAndPrevent(e); + } + }, + + __onTouchstart: function __onTouchstart (e) { + this.$emit('touchstart', e); + + if (touchTarget !== this.$el) { + touchTarget !== void 0 && this.__cleanup(); + + if (e.defaultPrevented !== true) { + touchTarget = this.$el; + var target = this.touchTargetEl = e.target; + target.addEventListener('touchcancel', this.__onPressEnd, passiveCapture$1); + target.addEventListener('touchend', this.__onPressEnd, passiveCapture$1); + } + } + }, + + __onMousedown: function __onMousedown (e) { + this.$emit('mousedown', e); + + if (mouseTarget !== this.$el) { + mouseTarget !== void 0 && this.__cleanup(); + + if (e.defaultPrevented !== true) { + mouseTarget = this.$el; + this.$el.classList.add('q-btn--active'); + document.addEventListener('mouseup', this.__onPressEnd, passiveCapture$1); + } + } + }, + + __onPressEnd: function __onPressEnd (e) { + // needed for IE (because it emits blur when focusing button from focus helper) + if (e !== void 0 && e.type === 'blur' && document.activeElement === this.$el) { + return + } + + if (e !== void 0 && e.type === 'keyup') { + if (keyboardTarget === this.$el && isKeyCode(e, [ 13, 32 ]) === true) { + // for click trigger + var evt = new MouseEvent('click', e); + e.defaultPrevented === true && prevent(evt); + e.cancelBubble === true && stop(evt); + this.$el.dispatchEvent(evt); + + stopAndPrevent(e); + } + + this.$emit('keyup', e); + } + + this.__cleanup(); + }, + + __cleanup: function __cleanup (destroying) { + var blurTarget = this.$refs.blurTarget; + + if ( + destroying !== true && + (touchTarget === this.$el || mouseTarget === this.$el) && + blurTarget !== void 0 && + blurTarget !== document.activeElement && + this.$el.contains(document.activeElement) === true + ) { + blurTarget.setAttribute('tabindex', -1); + blurTarget.focus(); + } + + if (touchTarget === this.$el) { + var target = this.touchTargetEl; + target.removeEventListener('touchcancel', this.__onPressEnd, passiveCapture$1); + target.removeEventListener('touchend', this.__onPressEnd, passiveCapture$1); + touchTarget = this.touchTargetEl = void 0; + } + + if (mouseTarget === this.$el) { + document.removeEventListener('mouseup', this.__onPressEnd, passiveCapture$1); + mouseTarget = void 0; + } + + if (keyboardTarget === this.$el) { + document.removeEventListener('keyup', this.__onPressEnd, true); + this.$el !== void 0 && this.$el.removeEventListener('blur', this.__onPressEnd, passiveCapture$1); + keyboardTarget = void 0; + } + + this.$el !== void 0 && this.$el.classList.remove('q-btn--active'); + }, + + __onLoadingEvt: function __onLoadingEvt (evt) { + stopAndPrevent(evt); + evt.qSkipRipple = true; + } + }, + + beforeDestroy: function beforeDestroy () { + this.__cleanup(true); + }, + + render: function render (h) { + var inner = []; + + this.icon !== void 0 && inner.push( + h(QIcon, { + attrs: iconAttrs, + props: { name: this.icon, left: this.stack === false && this.hasLabel === true } + }) + ); + + this.hasLabel === true && inner.push( + h('span', { staticClass: 'block' }, [ this.label ]) + ); + + inner = mergeSlot(inner, this, 'default'); + + if (this.iconRight !== void 0 && this.round === false) { + inner.push( + h(QIcon, { + attrs: iconAttrs, + props: { name: this.iconRight, right: this.stack === false && this.hasLabel === true } + }) + ); + } + + var child = [ + h('span', { + staticClass: 'q-focus-helper', + ref: 'blurTarget' + }) + ]; + + if (this.loading === true && this.percentage !== void 0) { + child.push( + h('span', { + staticClass: 'q-btn__progress absolute-full overflow-hidden', + class: this.darkPercentage === true ? 'q-btn__progress--dark' : '' + }, [ + h('span', { + staticClass: 'q-btn__progress-indicator fit block', + style: this.percentageStyle + }) + ]) + ); + } + + child.push( + h('span', { + staticClass: 'q-btn__wrapper col row q-anchor--skip', + style: this.wrapperStyle + }, [ + h('span', { + staticClass: 'q-btn__content text-center col items-center q-anchor--skip', + class: this.innerClasses + }, inner) + ]) + ); + + this.loading !== null && child.push( + h('transition', { + props: { name: 'q-transition--fade' } + }, this.loading === true ? [ + h('span', { + key: 'loading', + staticClass: 'absolute-full flex flex-center' + }, this.$scopedSlots.loading !== void 0 ? this.$scopedSlots.loading() : [ h(QSpinner) ]) + ] : void 0) + ); + + return h(this.hasLink === true || this.type === 'a' ? 'a' : 'button', { + staticClass: 'q-btn q-btn-item non-selectable no-outline', + class: this.classes, + style: this.style, + attrs: this.attrs, + on: this.onEvents, + directives: this.directives + }, child) + } + }); + + var panelParents = new WeakMap(); + + function hideScroll (el) { + if (el !== null && el !== void 0) { + var parent = el.closest('.q-panel-parent'); + panelParents.set(el, parent); + parent !== null && parent.classList.add('q-transition--hide-scroll'); + } + } + + function restoreScroll (el) { + if (el !== null && el !== void 0) { + var parent = panelParents.get(el) || el.closest('.q-panel-parent'); + parent !== null && parent.classList.remove('q-transition--hide-scroll'); + } + } + + var onTransitionHideScroll = { + 'before-leave': hideScroll, + 'after-leave': restoreScroll, + 'leave-cancelled': restoreScroll + }; + + var TransitionMixin = { + props: { + transitionShow: { + type: String, + default: 'fade' + }, + + transitionHide: { + type: String, + default: 'fade' + } + }, + + computed: { + transitionProps: function transitionProps () { + var show = "q-transition--" + (this.transitionShow); + var hide = "q-transition--" + (this.transitionHide); + return { + enterClass: (show + "-enter"), + leaveClass: (hide + "-leave"), + appearClass: (show + "-appear"), + enterToClass: (show + "-enter-to"), + leaveToClass: (hide + "-leave-to"), + appearToClass: (show + "-appear-to"), + enterActiveClass: (show + "-enter-active"), + leaveActiveClass: (hide + "-leave-active"), + appearActiveClass: (show + "-appear-active") + } + } + } + }; + + var QBtnGroup = Vue__default["default"].extend({ + name: 'QBtnGroup', + + mixin: [ ListenersMixin ], + + props: { + unelevated: Boolean, + outline: Boolean, + flat: Boolean, + rounded: Boolean, + square: Boolean, + push: Boolean, + stretch: Boolean, + glossy: Boolean, + spread: Boolean + }, + + computed: { + classes: function classes () { + var this$1$1 = this; + + return ['unelevated', 'outline', 'flat', 'rounded', 'square', 'push', 'stretch', 'glossy'] + .filter(function (t) { return this$1$1[t] === true; }) + .map(function (t) { return ("q-btn-group--" + t); }).join(' ') + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-btn-group row no-wrap ' + + (this.spread === true ? 'q-btn-group--spread' : 'inline'), + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + function clearSelection () { + if (window.getSelection !== void 0) { + var selection = window.getSelection(); + if (selection.empty !== void 0) { + selection.empty(); + } + else if (selection.removeAllRanges !== void 0) { + selection.removeAllRanges(); + Platform.is.mobile !== true && selection.addRange(document.createRange()); + } + } + else if (document.selection !== void 0) { + document.selection.empty(); + } + } + + var scrollListenerHandlers = []; + + function scrollEventDispatcher (e) { + scrollListenerHandlers + .slice() + .forEach(function (fn) { + if (e && e.target && e.target.qScrollPrevented === true) { + return + } + + eventOnAncestors(e, fn.scrollTarget) === true && fn(e); + }); + } + + var AnchorMixin = { + props: { + target: { + default: true + }, + noParentEvent: Boolean, + contextMenu: Boolean + }, + + watch: { + contextMenu: function contextMenu (val) { + if (this.anchorEl !== void 0) { + this.__unconfigureAnchorEl(); + this.__configureAnchorEl(val); + } + }, + + target: function target () { + if (this.anchorEl !== void 0) { + this.__unconfigureAnchorEl(); + } + + this.__pickAnchorEl(); + }, + + noParentEvent: function noParentEvent (val) { + if (this.anchorEl !== void 0) { + if (val === true) { + this.__unconfigureAnchorEl(); + } + else { + this.__configureAnchorEl(); + } + } + } + }, + + methods: { + __showCondition: function __showCondition (evt) { + // abort with no parent configured or on multi-touch + if (this.anchorEl === void 0) { + return false + } + if (evt === void 0) { + return true + } + return evt.touches === void 0 || evt.touches.length <= 1 + }, + + __contextClick: function __contextClick (evt) { + var this$1$1 = this; + + this.hide(evt); + prevent(evt); + this.$nextTick(function () { + this$1$1.show(evt); + + if (evt === Object(evt)) { + evt.qAnchorHandled = true; + } + }); + }, + + __toggleKey: function __toggleKey (evt) { + isKeyCode(evt, 13) === true && this.toggle(evt); + }, + + __mobileCleanup: function __mobileCleanup (evt) { + this.anchorEl.classList.remove('non-selectable'); + clearTimeout(this.touchTimer); + + if (this.showing === true && evt !== void 0) { + clearSelection(); + } + }, + + prevent: prevent, + + __mobileTouch: function __mobileTouch (evt) { + var this$1$1 = this; + + this.__mobileCleanup(evt); + + if (this.__showCondition(evt) !== true) { + return + } + + this.hide(evt); + this.anchorEl.classList.add('non-selectable'); + + var target = evt.target; + addEvt(this, 'anchor', [ + [ target, 'touchmove', '__mobileCleanup', 'passive' ], + [ target, 'touchend', '__mobileCleanup', 'passive' ], + [ target, 'touchcancel', '__mobileCleanup', 'passive' ], + [ this.anchorEl, 'contextmenu', 'prevent', 'notPassive' ] + ]); + + this.touchTimer = setTimeout(function () { + this$1$1.show(evt); + + if (evt === Object(evt)) { + evt.qAnchorHandled = true; + } + }, 300); + }, + + __unconfigureAnchorEl: function __unconfigureAnchorEl () { + cleanEvt(this, 'anchor'); + }, + + __configureAnchorEl: function __configureAnchorEl (context) { + if ( context === void 0 ) context = this.contextMenu; + + if (this.noParentEvent === true || this.anchorEl === void 0) { return } + + var evts; + + if (context === true) { + if (this.$q.platform.is.mobile === true) { + evts = [ + [ this.anchorEl, 'touchstart', '__mobileTouch', 'passive' ] + ]; + } + else { + evts = [ + [ this.anchorEl, 'mousedown', 'hide', 'passive' ], + [ this.anchorEl, 'contextmenu', '__contextClick', 'notPassive' ] + ]; + } + } + else { + evts = [ + [ this.anchorEl, 'click', 'toggle', 'passive' ], + [ this.anchorEl, 'keyup', '__toggleKey', 'passive' ] + ]; + } + + addEvt(this, 'anchor', evts); + }, + + __setAnchorEl: function __setAnchorEl (el) { + this.anchorEl = el; + while (this.anchorEl.classList.contains('q-anchor--skip')) { + this.anchorEl = this.anchorEl.parentNode; + } + this.__configureAnchorEl(); + }, + + __pickAnchorEl: function __pickAnchorEl () { + if (this.target === false || this.target === '' || this.parentEl === null) { + this.anchorEl = void 0; + } + else if (this.target === true) { + this.__setAnchorEl(this.parentEl); + } + else { + this.anchorEl = getElement(this.target) || void 0; + + if (this.anchorEl !== void 0) { + this.__configureAnchorEl(); + } + else { + console.error(("Anchor: target \"" + (this.target) + "\" not found"), this); + } + } + }, + + __changeScrollEvent: function __changeScrollEvent (fn, scrollTarget) { + var hadHandlers = scrollListenerHandlers.length > 0; + + if (this.__scrollFn !== void 0) { + var index = scrollListenerHandlers.indexOf(this.__scrollFn); + + if (index > -1) { + scrollListenerHandlers.splice(index, 1); + } + + this.__scrollFn = void 0; + } + + if (fn !== void 0 && scrollTarget !== null && scrollTarget !== void 0) { + fn.scrollTarget = scrollTarget === window ? document : scrollTarget; + scrollListenerHandlers.push(fn); + + this.__scrollFn = fn; + } + + if (hadHandlers === true && scrollListenerHandlers.length === 0) { + window.removeEventListener('scroll', scrollEventDispatcher, listenOpts.passiveCapture); + } + else if (hadHandlers === false && scrollListenerHandlers.length > 0) { + window.addEventListener('scroll', scrollEventDispatcher, listenOpts.passiveCapture); + } + } + }, + + created: function created () { + var this$1$1 = this; + + if ( + typeof this.__configureScrollTarget === 'function' && + typeof this.__unconfigureScrollTarget === 'function' + ) { + this.noParentEventWatcher = this.$watch('noParentEvent', function () { + this$1$1.__unconfigureScrollTarget(); + this$1$1.__configureScrollTarget(); + }); + } + }, + + mounted: function mounted () { + this.parentEl = this.$el.parentNode; + this.__pickAnchorEl(); + + if (this.value === true && this.anchorEl === void 0) { + this.$emit('input', false); + } + }, + + beforeDestroy: function beforeDestroy () { + clearTimeout(this.touchTimer); + this.noParentEventWatcher !== void 0 && this.noParentEventWatcher(); + this.__anchorCleanup !== void 0 && this.__anchorCleanup(); + this.__unconfigureAnchorEl(); + } + }; + + var TimeoutMixin = { + created: function created () { + this.__tickFnList = []; + this.__timeoutFnList = []; + }, + + deactivated: function deactivated () { + this.__tickFnList.forEach(function (tick) { tick.removeTick(); }); + this.__timeoutFnList.forEach(function (tick) { tick.removeTimeout(); }); + }, + + beforeDestroy: function beforeDestroy () { + this.__tickFnList.forEach(function (tick) { tick.removeTick(); }); + this.__tickFnList = void 0; + + this.__timeoutFnList.forEach(function (tick) { tick.removeTimeout(); }); + this.__timeoutFnList = void 0; + }, + + methods: { + __useTick: function __useTick (registerFnName, removeFnName) { + var this$1$1 = this; + + var tick = { + removeTick: function removeTick () { + tick.fn = void 0; + }, + + registerTick: function (fn) { + tick.fn = fn; + + this$1$1.$nextTick(function () { + if (tick.fn === fn) { + // we also check if VM is destroyed, since if it + // got to trigger one nextTick() we cannot stop it + this$1$1._isDestroyed === false && tick.fn(); + tick.fn = void 0; + } + }); + } + }; + + this.__tickFnList.push(tick); + + this[registerFnName] = tick.registerTick; + removeFnName !== void 0 && (this[removeFnName] = tick.removeTick); + }, + + __useTimeout: function __useTimeout (registerFnName, removeFnName) { + var this$1$1 = this; + + var timeout = { + removeTimeout: function removeTimeout () { + clearTimeout(timeout.timer); + }, + + registerTimeout: function (fn, delay) { + clearTimeout(timeout.timer); + + if (this$1$1._isDestroyed === false) { + timeout.timer = setTimeout(fn, delay); + } + } + }; + + this.__timeoutFnList.push(timeout); + + this[registerFnName] = timeout.registerTimeout; + removeFnName !== void 0 && (this[removeFnName] = timeout.removeTimeout); + } + } + }; + + var labelClick = { timeStamp: null, label: null, show: null }; + + function isDuplicateLabelClick (evt, fromShow) { + if (evt.type !== 'click') { + return false + } + + var timeStamp = labelClick.timeStamp; + var label = labelClick.label; + var show = labelClick.show; + var target = evt.target; + + labelClick.show = fromShow; + labelClick.timeStamp = evt.timeStamp; + labelClick.label = target + ? ( + typeof target.id === 'string' && target.id !== '' && label !== null && label.htmlFor === target.id + ? label + : typeof target.closest === 'function' ? target.closest('label') : null + ) + : null; + + return timeStamp === labelClick.timeStamp && label === labelClick.label && show !== fromShow + } + + var ModelToggleMixin = { + mixins: [ ListenersMixin ], + + props: { + value: { + type: Boolean, + default: void 0 + } + }, + + data: function data () { + return { + showing: false + } + }, + + watch: { + value: function value (val) { + this.__processModelChange(val); + }, + + $route: function $route () { + this.hideOnRouteChange === true && this.showing === true && this.hide(); + } + }, + + methods: { + toggle: function toggle (evt) { + this[this.showing === true ? 'hide' : 'show'](evt); + + if (evt === Object(evt)) { + evt.qAnchorHandled = true; + } + }, + + show: function show (evt) { + var this$1$1 = this; + + if ( + this.disable === true || + ( + evt === Object(evt) && + (evt.qAnchorHandled === true || isDuplicateLabelClick(evt, 'show') === true) + ) || + (this.__showCondition !== void 0 && this.__showCondition(evt) !== true) + ) { + return + } + + if (this.qListeners.input !== void 0 && isSSR === false) { + this.$emit('input', true); + this.payload = evt; + this.$nextTick(function () { + if (this$1$1.payload === evt) { + this$1$1.payload = void 0; + } + }); + } + + if (this.value === void 0 || this.qListeners.input === void 0 || isSSR === true) { + this.__processShow(evt); + } + }, + + __processShow: function __processShow (evt) { + if (this.showing === true) { + return + } + + // need to call it before setting showing to true + // in order to not ruin the animation + this.__preparePortal !== void 0 && this.__preparePortal(); + + this.showing = true; + + this.$emit('before-show', evt); + + if (this.__show !== void 0) { + this.__show(evt); + } + else { + this.$emit('show', evt); + } + }, + + hide: function hide (evt) { + var this$1$1 = this; + + if ( + this.disable === true || + ( + evt === Object(evt) && + (evt.qAnchorHandled === true || isDuplicateLabelClick(evt, 'hide') === true) + ) + ) { + return + } + + if (this.qListeners.input !== void 0 && isSSR === false) { + this.$emit('input', false); + this.payload = evt; + this.$nextTick(function () { + if (this$1$1.payload === evt) { + this$1$1.payload = void 0; + } + }); + } + if (this.value === void 0 || this.qListeners.input === void 0 || isSSR === true) { + this.__processHide(evt); + } + }, + + __processHide: function __processHide (evt) { + if (this.showing === false) { + return + } + + this.showing = false; + + this.$emit('before-hide', evt); + + if (this.__hide !== void 0) { + this.__hide(evt); + } + else { + this.$emit('hide', evt); + } + }, + + __processModelChange: function __processModelChange (val) { + if (this.disable === true && val === true) { + this.qListeners.input !== void 0 && this.$emit('input', false); + } + else if ((val === true) !== this.showing) { + this[("__process" + (val === true ? 'Show' : 'Hide'))](this.payload); + } + } + } + }; + + var FOCUSABLE_SELECTOR = [ + ':focus', + 'a[href]:not([tabindex="-1"]):not(.q-focus__clone)', + 'area[href]:not([tabindex="-1"]):not(.q-focus__clone)', + 'input:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'select:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'textarea:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'button:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'iframe:not([tabindex="-1"]):not(.q-focus__clone)', + '[tabindex]:not([tabindex="-1"]):not(.q-focus__clone)', + '[contenteditable]:not([tabindex="-1"]):not(.q-focus__clone):not([contenteditable="false"])', + '.q-tab.q-focusable:not(.q-focus__clone)' + ].join(','); + + var KEY_SKIP_SELECTOR = [ + 'input:not([disabled])', + 'select:not([disabled])', + 'select:not([disabled]) *', + 'textarea:not([disabled])', + '[contenteditable]:not([contenteditable="false"])', + '[contenteditable]:not([contenteditable="false"]) *', + '.q-key-group-navigation--ignore-key', + '.q-key-group-navigation--ignore-key *', + '.q-focus__clone' + ].join(','); + + var EDITABLE_SELECTOR = [ + 'input:not(.q-focus__clone):not([disabled]):not([readonly]):not([type="button"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="radio"]):not([type="range"]):not([type="reset"]):not([type="submit"])', + 'textarea:not(.q-focus__clone):not([disabled]):not([readonly])', + '[contenteditable]:not(.q-focus__clone):not([contenteditable="false"])', + '[contenteditable]:not(.q-focus__clone):not([contenteditable="false"]) *' + ].join(','); + + var scrollOffset = 0; + var managedFocusFn; + + function isInPortal (el) { + return el.matches('.q-dialog *, .q-menu *, .q-tooltip *, .q-stepper__step-content *') + } + + function isEditable (el) { + return el.matches(EDITABLE_SELECTOR) + } + + function managedFocus (el) { + if (managedFocusFn === void 0) { + var scrollIntoView = typeof el.scrollIntoViewIfNeeded === 'function' + ? function (target) { target.scrollIntoViewIfNeeded(false); } + : function (target) { target.scrollIntoView(); }; + + managedFocusFn = client.is.ios === true || client.is.nativeMobile === true || client.is.standalone === true + ? function (el) { + var elEditable = isEditable(el); + + if ( + el === document.body || + (elEditable !== true && el.tabIndex < 0) + ) { + el !== document.activeElement && el.focus({ preventScroll: true }); + + return + } + + var elInPortal = isInPortal(el); + + var clone = el.cloneNode(true); + var parent = el.parentNode; + var scrollingElement = document.scrollingElement || document.documentElement; + var initialScrollTop = scrollingElement.scrollTop; + + clone.setAttribute('tabindex', -1); + clone.removeAttribute('id'); + clone.removeAttribute('autofocus'); + clone.removeAttribute('data-autofocus'); + clone.classList.add('q-focus__clone'); + + parent.insertBefore(clone, el); + + el !== document.activeElement && el.focus({ preventScroll: true }); + + setTimeout(function () { + clone.remove(); + + if (el && el === document.activeElement && elEditable === true) { + elInPortal === true && scrollIntoView(el); + + var ref = el.getBoundingClientRect(); + var top = ref.top; + var bottom = ref.bottom; + var height = window.visualViewport !== void 0 + ? window.visualViewport.height + : window.innerHeight; + + var finalScrollTop = scrollingElement.scrollTop; + + if (top < 0) { + finalScrollTop += top - 32; + } + else if (top > 0 && bottom > height) { + finalScrollTop += bottom - height + 64; + } + + requestAnimationFrame(function () { + scrollingElement.scrollTop = finalScrollTop; + }); + + if (el.qRestoreScrollSet !== true && elInPortal !== true) { + scrollOffset += finalScrollTop - initialScrollTop; + + var restoreScrollFn = function () { + if (el) { + el.qRestoreScrollSet = void 0; + el.removeEventListener('blur', restoreScrollFn); + } + + if (scrollingElement.scrollTop !== finalScrollTop) { + scrollOffset = 0; + } + else if (scrollOffset !== 0) { + requestAnimationFrame(function () { + var activeElement = document.activeElement; + if ( + !activeElement || + (isEditable(activeElement) !== true && activeElement.tabIndex < 0) + ) { + scrollingElement.scrollTop -= scrollOffset; + scrollOffset = 0; + } + }); + } + }; + + el.qRestoreScrollSet = true; + el.addEventListener('blur', restoreScrollFn); + } + } + }, 200); + } + : function (el) { + el !== document.activeElement && el.focus({ preventScroll: true }); + + if (isInPortal(el) === true && isEditable(el) === true) { + setTimeout(function () { + el && el === document.activeElement && scrollIntoView(el); + }, 200); + } + }; + } + + managedFocusFn(el); + } + + function changeFocusedElement (list, to, direction, managed, noWrap, start) { + if ( direction === void 0 ) direction = 1; + + var lastIndex = list.length - 1; + + if (noWrap === true && (to > lastIndex || to < 0)) { + return + } + + var index = normalizeToInterval(to, 0, lastIndex); + + if (index === start || index > lastIndex) { + return + } + + var initialEl = document.activeElement; + var focusFn = managed === true + ? function () { managedFocus(list[index]); } + : function () { list[index].focus(); }; + + if (initialEl !== null) { + initialEl._qKeyNavIgnore = true; + focusFn(); + initialEl._qKeyNavIgnore = false; + } + else { + focusFn(); + } + + if (document.activeElement !== list[index]) { + changeFocusedElement(list, index + direction, direction, managed, noWrap, start === void 0 ? index : start); + } + } + + var findProto = Array.prototype.find; + var findIndexProto = Array.prototype.findIndex; + var mapProto = Array.prototype.map; + + function closePortalMenus (vm, evt) { + do { + if (vm.$options.name === 'QMenu') { + vm.hide(evt); + + // is this a point of separation? + if (vm.separateClosePopup === true) { + return vm.$parent + } + } + else if (vm.__renderPortal !== void 0) { + // treat it as point of separation if parent is QPopupProxy + // (so mobile matches desktop behavior) + // and hide it too + if (vm.$parent !== void 0 && vm.$parent.$options.name === 'QPopupProxy') { + vm.hide(evt); + return vm.$parent + } + else { + return vm + } + } + vm = vm.$parent; + } while ( + vm !== void 0 && ( + vm.$el.contains === void 0 || // IE polyfill does not work on comments + vm.$el.contains(evt.target) !== true + ) + ) + } + + function closePortals (vm, evt, depth) { + while (depth !== 0 && vm !== void 0) { + if (vm.__renderPortal !== void 0) { + depth--; + + if (vm.$options.name === 'QMenu') { + vm = closePortalMenus(vm, evt); + continue + } + + vm.hide(evt); + } + + vm = vm.$parent; + } + } + + function isOnGlobalDialog (vm) { + while (vm !== void 0) { + if (vm.$options.name === 'QGlobalDialog') { + return true + } + if (vm.$options.name === 'QDialog') { + return false + } + + vm = vm.$parent; + } + return false + } + + function getPortalsContainer (fullscreenElement) { + var container = findProto.call(fullscreenElement.children, function (el) { return el.matches && el.matches('.q-portal__container'); }); + + if (container === void 0) { + container = document.createElement('div'); + container.classList.add('q-portal__container'); + } + + if (container.parentElement !== fullscreenElement || container.nextElementSibling !== null) { + fullscreenElement.appendChild(container); + } + + return container + } + + var portalVms = new WeakMap(); + + var Portal = { + inheritAttrs: false, + + props: { + contentClass: [ Array, String, Object ], + contentStyle: [ Array, String, Object ] + }, + + methods: { + focus: function focus (selector) { + var node = this.__getInnerNode(); + + if (node !== void 0 && node.contains(document.activeElement) !== true) { + var autofocusNode = null; + + if (selector !== '') { + autofocusNode = node.querySelector(typeof selector === 'string' ? selector : '[autofocus][tabindex], [data-autofocus][tabindex]') || + node.querySelector(typeof selector === 'string' ? selector : '[autofocus] [tabindex], [data-autofocus] [tabindex]') || + node.querySelector(typeof selector === 'string' ? selector : '[autofocus], [data-autofocus]'); + } + + if (autofocusNode !== null && typeof autofocusNode.focus === 'function') { + managedFocus(autofocusNode); + } + else { + var focusableElements = Array.prototype.slice.call(node.querySelectorAll(FOCUSABLE_SELECTOR)); + focusableElements.length > 0 && changeFocusedElement( + focusableElements, + focusableElements[0].classList.contains('q-key-group-navigation--ignore-focus') === true ? 1 : 0, + 1, + true + ); + } + } + }, + + __showPortal: function __showPortal () { + var this$1$1 = this; + + if (this.$q.fullscreen !== void 0 && this.$q.fullscreen.isCapable === true) { + var append = function () { + if (this$1$1.__portal === void 0) { + return + } + + var + newParent = getBodyFullscreenElement(this$1$1.$q.fullscreen.activeEl), + oldContainer = this$1$1.__portal.$el.parentElement, + newContainer = getPortalsContainer(newParent); + + if ( + oldContainer !== newContainer && + (this$1$1.__onGlobalDialog === true || newParent.contains(this$1$1.$el) === true) + ) { + newContainer.appendChild(this$1$1.__portal.$el); + + if (oldContainer && oldContainer.parentElement !== document.body && oldContainer.children.length === 0) { + oldContainer.remove(); + } + } + }; + + this.unwatchFullscreen = this.$watch('$q.fullscreen.activeEl', debounce(append, 50)); + + if (this.__onGlobalDialog === false || this.$q.fullscreen.isActive === true) { + append(); + } + } + else if (this.__portal !== void 0 && this.__onGlobalDialog === false) { + getPortalsContainer(document.body).appendChild(this.__portal.$el); + } + }, + + __hidePortal: function __hidePortal () { + if (this.__portal !== void 0) { + if (this.unwatchFullscreen !== void 0) { + this.unwatchFullscreen(); + this.unwatchFullscreen = void 0; + } + + if (this.__onGlobalDialog === false) { + this.__portal.$destroy(); + this.__portal.$el.remove(); + } + + var container = this.__portal.$el.parentElement; + if (container && container.parentElement !== document.body && container.children.length === 0) { + container.remove(); + } + + this.__portal = void 0; + } + }, + + __preparePortal: function __preparePortal () { + var this$1$1 = this; + + if (this.__portal === void 0) { + if (this.__onGlobalDialog === true) { + portalVms.set(this.$el, this); + } + + this.__portal = this.__onGlobalDialog === true + ? { + $el: this.$el, + $refs: this.$refs + } + : new Vue__default["default"]({ + name: 'QPortal', + parent: this, + + inheritAttrs: false, + + render: function (h) { + this$1$1.$nextTick(function () { + portalVms.set(this$1$1.__portal.$el, this$1$1); + }); + + return this$1$1.__renderPortal(h) + }, + + components: this.$options.components, + directives: this.$options.directives + }).$mount(); + } + }, + + __getInnerNode: function __getInnerNode () { + return this.__portal !== void 0 && this.__portal.$refs !== void 0 + ? this.__portal.$refs.inner + : void 0 + }, + + __focusCyclePortal: function __focusCyclePortal (hiding) { + var this$1$1 = this; + + if (this.__portal === void 0 || document.body.contains(this.__portal.$el) !== true) { + return + } + + var portals = this.__portal.$el.parentElement.children; + var activeElement = document.activeElement; + var activePortalIndex = activeElement + ? findIndexProto.call(portals, function (el) { return typeof el.contains === 'function' && el.contains(activeElement); }) + : -1; + + // current focus is not in a portal + if (activePortalIndex < 0) { + // we are not refocusing because portal is hiding + if (hiding !== true) { + // we change the element that should receive focus when the bottom-most portal is closed + if (activeElement) { + var firstVm = portalVms.get(portals[0]); + firstVm && (firstVm.__refocusTarget = activeElement); + } + + // we focus the top-most portal (we are here from ESC so this is top-most) + this.focus(); + } + return + } + + var focusedVm = portalVms.get(portals[activePortalIndex]); + + // we are hiding and the focus is in a portal that has refocusTarget in our portal + if (hiding === true) { + var childVms = mapProto + .call(portals, function (el) { return portalVms.get(el); }) + .filter(function (vm) { return vm && this$1$1.__portal.$el.contains(vm.__refocusTarget) === true; }); + + if (childVms.length > 0) { + childVms.forEach(function (vm) { + vm.__refocusTarget = this$1$1.__refocusTarget; + }); + } + + if (childVms.indexOf(focusedVm) > -1) { + return + } + } + + var activeVm = hiding === true + ? this + : focusedVm || this; + var refocusTarget = activeVm.__refocusTarget; + + // we are focusing another portal if our portal + // is not top-most or it is not hiding or it is not modal + if (activeVm !== this || hiding !== true || activeVm.seamless !== false) { + // if active portal is modal we focus the top-most portal + if (activeVm.seamless === false) { + this.focus(); + return + } + + if (activePortalIndex > 0) { + var prevEl = portals[activePortalIndex - 1]; + var prevVm = portalVms.get(prevEl); + + // if we have a portal below the active one + // and we are not hiding or we are modal + // and the refocusTarget is not in the portal below + // we focus the portal below (if refocusTarget is in that portal it will be focused below) + if ( + prevVm && + (hiding !== true || prevVm.seamless === false) && + ( + [ null, void 0, document.body ].indexOf(refocusTarget) !== -1 || + prevEl.contains(refocusTarget) === false + ) + ) { + prevVm.focus(); + return + } + } + } + + if ([ null, void 0, document.body ].indexOf(refocusTarget) === -1 && document.body.contains(refocusTarget) === true) { + managedFocus(refocusTarget); + } + else if (hiding !== true) { + var body = document.body; + var hasTabindex = body.hasAttribute('tabindex'); + hasTabindex === false && body.setAttribute('tabindex', -1); + body.focus(); + hasTabindex === false && this.$nextTick(function () { + body && body.removeAttribute('tabindex'); + }); + } + } + }, + + render: function render (h) { + if (this.__onGlobalDialog === true) { + return this.__renderPortal(h) + } + + if (this.__portal !== void 0) { + this.__portal.$forceUpdate(); + } + }, + + beforeDestroy: function beforeDestroy () { + this.__hidePortal(); + } + }; + + if (isSSR === false) { + Portal.created = function () { + this.__onGlobalDialog = isOnGlobalDialog(this.$parent); + }; + } + + var FocusWrapMixin = { + computed: { + focusGuardElements: function focusGuardElements () { + return { + firstGuard: this.$createElement('span', { + staticClass: 'no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus', + attrs: { tabindex: 0 }, + on: { focus: this.__focusLast } + }), + lastGuard: this.$createElement('span', { + staticClass: 'no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus', + attrs: { tabindex: 0 }, + on: { focus: this.__focusFirst } + }) + } + } + }, + + methods: { + __focusFirst: function __focusFirst (keepInsideFocus) { + var innerNode = this.__getInnerNode(); + if (innerNode !== void 0 && (keepInsideFocus !== true || innerNode.contains(document.activeElement) !== true)) { + var focusableElements = Array.prototype.slice.call(innerNode.querySelectorAll(FOCUSABLE_SELECTOR), 1, -1); + changeFocusedElement(focusableElements, 0, 1); + } + }, + + __focusLast: function __focusLast () { + var innerNode = this.__getInnerNode(); + if (innerNode !== void 0) { + var focusableElements = Array.prototype.slice.call(innerNode.querySelectorAll(FOCUSABLE_SELECTOR), 1, -1); + changeFocusedElement(focusableElements, focusableElements.length - 1, -1); + } + }, + + __getFocusWrappedContent: function __getFocusWrappedContent (slotName) { + return mergeSlot([ + this.focusGuardElements.firstGuard + ], this, slotName).concat( + this.focusGuardElements.lastGuard + ) + } + } + }; + + function getVmOfNode (el) { + for (var node = el; node !== null; node = node.parentNode) { + // node.__vue__ can be null if the instance was destroyed + if (node.__vue__ !== void 0) { + return node.__vue__ + } + } + } + + function isVmChildOf (childVm, parentVm) { + // node.__vue__ can be null if the instance was destroyed + if (childVm === null || parentVm === null) { + return null + } + + for (var vm = childVm; vm !== void 0; vm = vm.$parent) { + if (vm === parentVm) { + return true + } + } + return false + } + + var timer; + + var notPassiveCapture = listenOpts.notPassiveCapture; + var passiveCapture = listenOpts.passiveCapture; + var handlers$1 = { + click: [], + focus: [] + }; + + function hasModalsAbove (node) { + while ((node = node.nextElementSibling) !== null) { + if (node.classList.contains('q-dialog--modal')) { + return true + } + } + + return false + } + + function execHandlers (list, evt) { + for (var i = list.length - 1; i >= 0; i--) { + if (list[i](evt) === void 0) { + return + } + } + } + + function globalHandler (evt) { + clearTimeout(timer); + + // prevent autofocus on body resulting from blur + if ( + evt.type === 'focusin' && ( + (client.is.ie === true && evt.target === document.body) || + evt.target.hasAttribute('tabindex') === true + ) + ) { + timer = setTimeout(function () { + execHandlers(handlers$1.focus, evt); + }, client.is.ie === true ? 500 : 200); + } + else { + execHandlers(handlers$1.click, evt); + } + } + + var ClickOutside = { + name: 'click-outside', + + bind: function bind (el, ref, vnode) { + var arg = ref.arg; + var value = ref.value; + + var vmEl = vnode.componentInstance || vnode.context; + + var ctx = { + trigger: value, + toggleEl: arg, + + handler: function handler (evt) { + var target = evt.target; + + if ( + evt.qClickOutside !== true && + document.body.contains(target) === true && + target.nodeType !== 8 && + // directives that prevent click by using pointer-events none generate click on html element + target !== document.documentElement && + target.classList.contains('no-pointer-events') === false && + hasModalsAbove(el) !== true && + ( + ctx.toggleEl === void 0 || + ctx.toggleEl.contains(target) === false + ) && + ( + target === document.body || + isVmChildOf(getVmOfNode(target), vmEl) === false + ) + ) { + // mark the event as being processed by clickOutside + // used to prevent refocus after menu close + evt.qClickOutside = true; + + return ctx.trigger(evt) + } + } + }; + + if (el.__qclickoutside) { + el.__qclickoutside_old = el.__qclickoutside; + } + + el.__qclickoutside = ctx; + + if (handlers$1.click.length === 0) { + document.addEventListener('mousedown', globalHandler, notPassiveCapture); + document.addEventListener('touchstart', globalHandler, notPassiveCapture); + document.addEventListener('focusin', globalHandler, passiveCapture); + } + + handlers$1.click.push(ctx.handler); + + ctx.timerFocusin = setTimeout(function () { + handlers$1.focus.push(ctx.handler); + }, 500); + }, + + update: function update (el, ref) { + var arg = ref.arg; + var value = ref.value; + var oldValue = ref.oldValue; + + var ctx = el.__qclickoutside; + + if (ctx !== void 0) { + if (ctx.toggleEl !== arg) { + ctx.toggleEl = arg; + } + if (oldValue !== value) { + ctx.trigger = value; + } + } + }, + + unbind: function unbind (el) { + var ctx = el.__qclickoutside_old || el.__qclickoutside; + if (ctx !== void 0) { + clearTimeout(ctx.timerFocusin); + + var + indexClick = handlers$1.click.findIndex(function (h) { return h === ctx.handler; }), + indexFocus = handlers$1.focus.findIndex(function (h) { return h === ctx.handler; }); + + indexClick > -1 && handlers$1.click.splice(indexClick, 1); + indexFocus > -1 && handlers$1.focus.splice(indexFocus, 1); + + if (handlers$1.click.length === 0) { + clearTimeout(timer); + document.removeEventListener('mousedown', globalHandler, notPassiveCapture); + document.removeEventListener('touchstart', globalHandler, notPassiveCapture); + document.removeEventListener('focusin', globalHandler, passiveCapture); + } + + delete el[el.__qclickoutside_old ? '__qclickoutside_old' : '__qclickoutside']; + } + } + }; + + var scrollTargets = isSSR === true + ? [] + : [ null, document, document.body, document.scrollingElement, document.documentElement ]; + + var rtlHasScrollBugStatus; + function rtlHasScrollBug () { + if (isSSR === true) { + return false + } + + if (rtlHasScrollBugStatus === void 0) { + var scroller = document.createElement('div'); + var spacer = document.createElement('div'); + + Object.assign(scroller.style, { + direction: 'rtl', + width: '1px', + height: '1px', + overflow: 'auto' + }); + + Object.assign(spacer.style, { + width: '1000px', + height: '1px' + }); + + scroller.appendChild(spacer); + document.body.appendChild(scroller); + scroller.scrollLeft = -1000; + + rtlHasScrollBugStatus = scroller.scrollLeft >= 0; + + scroller.remove(); + } + + return rtlHasScrollBugStatus + } + + function getScrollTarget (el, targetEl) { + var target = getElement(targetEl); + + if (target === null) { + if (el !== Object(el) || typeof el.closest !== 'function') { + return window + } + + target = el.closest('.scroll,.scroll-y,.overflow-auto,.q-dialog__inner > div'); + } + + return scrollTargets.includes(target) + ? window + : target + } + + function getScrollHeight (el) { + return (el === window ? document.body : el).scrollHeight + } + + function getScrollWidth (el) { + return (el === window ? document.body : el).scrollWidth + } + + function getVerticalScrollPosition (scrollTarget) { + return scrollTarget === window + ? window.pageYOffset || window.scrollY || document.body.scrollTop || 0 + : scrollTarget.scrollTop + } + + var getScrollPosition = getVerticalScrollPosition; + + function getHorizontalScrollPosition (scrollTarget) { + return scrollTarget === window + ? window.pageXOffset || window.scrollX || document.body.scrollLeft || 0 + : scrollTarget.scrollLeft + } + + function animVerticalScrollTo (el, to, duration /* , prevTime */) { + if ( duration === void 0 ) duration = 0; + + var prevTime = arguments[ 3 ] === void 0 ? performance.now() : arguments[ 3 ]; + var pos = getVerticalScrollPosition(el); + + if (duration <= 0) { + if (pos !== to) { + setScroll$1(el, to); + } + return + } + + requestAnimationFrame(function (nowTime) { + var frameTime = nowTime - prevTime; + var newPos = pos + (to - pos) / Math.max(frameTime, duration) * frameTime; + setScroll$1(el, newPos); + if (newPos !== to) { + animVerticalScrollTo(el, to, duration - frameTime, nowTime); + } + }); + } + + var animScrollTo = animVerticalScrollTo; + + function animHorizontalScrollTo (el, to, duration /* , prevTime */) { + if ( duration === void 0 ) duration = 0; + + var prevTime = arguments[ 3 ] === void 0 ? performance.now() : arguments[ 3 ]; + var pos = getHorizontalScrollPosition(el); + + if (duration <= 0) { + if (pos !== to) { + setHorizontalScroll(el, to); + } + return + } + + requestAnimationFrame(function (nowTime) { + var frameTime = nowTime - prevTime; + var newPos = pos + (to - pos) / Math.max(frameTime, duration) * frameTime; + setHorizontalScroll(el, newPos); + if (newPos !== to) { + animHorizontalScrollTo(el, to, duration - frameTime, nowTime); + } + }); + } + + function setScroll$1 (scrollTarget, offset) { + if (scrollTarget === window) { + window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, offset); + return + } + scrollTarget.scrollTop = offset; + } + + function setHorizontalScroll (scrollTarget, offset) { + if (scrollTarget === window) { + window.scrollTo(offset, window.pageYOffset || window.scrollY || document.body.scrollTop || 0); + return + } + scrollTarget.scrollLeft = offset; + } + + function setVerticalScrollPosition (scrollTarget, offset, duration) { + if (duration) { + animVerticalScrollTo(scrollTarget, offset, duration); + return + } + setScroll$1(scrollTarget, offset); + } + + var setScrollPosition = setVerticalScrollPosition; + + function setHorizontalScrollPosition (scrollTarget, offset, duration) { + if (duration) { + animHorizontalScrollTo(scrollTarget, offset, duration); + return + } + setHorizontalScroll(scrollTarget, offset); + } + + var size; + function getScrollbarWidth () { + if (size !== void 0) { + return size + } + + var + inner = document.createElement('p'), + outer = document.createElement('div'); + + css(inner, { + width: '100%', + height: '200px' + }); + css(outer, { + position: 'absolute', + top: '0px', + left: '0px', + visibility: 'hidden', + width: '200px', + height: '150px', + overflow: 'hidden' + }); + + outer.appendChild(inner); + + document.body.appendChild(outer); + + var w1 = inner.offsetWidth; + outer.style.overflow = 'scroll'; + var w2 = inner.offsetWidth; + + if (w1 === w2) { + w2 = outer.clientWidth; + } + + outer.remove(); + size = w1 - w2; + + return size + } + + function hasScrollbar (el, onY) { + if ( onY === void 0 ) onY = true; + + if (!el || el.nodeType !== Node.ELEMENT_NODE) { + return false + } + + return onY + ? ( + el.scrollHeight > el.clientHeight && ( + el.classList.contains('scroll') || + el.classList.contains('overflow-auto') || + [ 'auto', 'scroll' ].includes(window.getComputedStyle(el)['overflow-y']) + ) + ) + : ( + el.scrollWidth > el.clientWidth && ( + el.classList.contains('scroll') || + el.classList.contains('overflow-auto') || + [ 'auto', 'scroll' ].includes(window.getComputedStyle(el)['overflow-x']) + ) + ) + } + + var executeWhenScrollableList = []; + + function executeWhenScrollable (fn) { + if (document.qScrollPrevented !== true) { + fn(); + + return noop + } + + if (executeWhenScrollableList.indexOf(fn) === -1) { + executeWhenScrollableList.push(fn); + } + + return function () { + var index = executeWhenScrollableList.indexOf(fn); + if (index > -1) { + executeWhenScrollableList = executeWhenScrollableList.splice(index, 1); + } + } + } + + function triggerIsScrollable () { + var list = executeWhenScrollableList.slice(); + executeWhenScrollableList = []; + list.forEach(function (fn) { fn(); }); + } + + var scroll = { + getScrollTarget: getScrollTarget, + + getScrollHeight: getScrollHeight, + getScrollWidth: getScrollWidth, + + getScrollPosition: getScrollPosition, + getVerticalScrollPosition: getVerticalScrollPosition, + getHorizontalScrollPosition: getHorizontalScrollPosition, + rtlHasScrollBug: rtlHasScrollBug, + + animScrollTo: animScrollTo, + animVerticalScrollTo: animVerticalScrollTo, + animHorizontalScrollTo: animHorizontalScrollTo, + + setScrollPosition: setScrollPosition, + setVerticalScrollPosition: setVerticalScrollPosition, + setHorizontalScrollPosition: setHorizontalScrollPosition, + + executeWhenScrollable: executeWhenScrollable, + + getScrollbarWidth: getScrollbarWidth, + hasScrollbar: hasScrollbar + }; + + var handlers = []; + var escDown = false; + + var EscapeKey = { + __install: function __install () { + this.__installed = true; + window.addEventListener('keydown', function (evt) { + escDown = evt.keyCode === 27; + }); + window.addEventListener('blur', function () { + escDown === true && (escDown = false); + }); + window.addEventListener('keyup', function (evt) { + if (escDown === true) { + escDown = false; + + if (handlers.length !== 0 && isKeyCode(evt, 27) === true) { + handlers[handlers.length - 1].fn(evt); + } + } + }); + }, + + register: function register (comp, fn) { + if (comp.$q.platform.is.desktop === true) { + this.__installed !== true && this.__install(); + handlers.push({ comp: comp, fn: fn }); + } + }, + + pop: function pop (comp) { + if (comp.$q.platform.is.desktop === true) { + var index = handlers.findIndex(function (h) { return h.comp === comp; }); + if (index > -1) { + handlers.splice(index, 1); + } + } + } + }; + + var SIDE_SPACE = 4; // how many pixels to reserve on the edge + + var horizontalPos = { + 'start#ltr': 'left', + 'start#rtl': 'right', + 'end#ltr': 'right', + 'end#rtl': 'left' + } + + ;['left', 'middle', 'right'].forEach(function (pos) { + horizontalPos[(pos + "#ltr")] = pos; + horizontalPos[(pos + "#rtl")] = pos; + }); + + function isFixedPositioned (el) { + while (el && el !== document) { + if (window.getComputedStyle(el).position === 'fixed') { + return true + } + el = el.parentNode; + } + + return false + } + + function isDocumentScrollableX () { + return window.getComputedStyle(document.documentElement).overflowX !== 'hidden' && + window.getComputedStyle(document.body).overflowX !== 'hidden' + } + + function isDocumentScrollableY () { + return window.getComputedStyle(document.documentElement).overflowY !== 'hidden' && + window.getComputedStyle(document.body).overflowY !== 'hidden' + } + + function computeScrollLeft (fixedPositioned, viewport, rtl) { + if (fixedPositioned === true) { + return { vpLeft: viewport.offsetLeft, apLeft: viewport.offsetLeft } + } + + var scrollLeft = window.pageXOffset || window.scrollX || document.body.scrollLeft || 0; + + if (rtl !== true) { + return { vpLeft: scrollLeft, apLeft: scrollLeft } + } + + // TODO: check if the correction is needed also if rtlHasScrollBug + var vpLeft = (rtlHasScrollBug() === true ? 0 : document.documentElement.scrollWidth - document.documentElement.clientWidth) + scrollLeft; + return { + vpLeft: vpLeft, + apLeft: vpLeft + document.documentElement.scrollWidth - document.documentElement.clientWidth + } + } + + function validatePosition (pos) { + var parts = pos.split(' '); + if (parts.length !== 2) { + return false + } + if ([ 'top', 'center', 'bottom' ].includes(parts[0]) !== true) { + console.error('Anchor/Self position must start with one of top/center/bottom'); + return false + } + if ([ 'left', 'middle', 'right', 'start', 'end' ].includes(parts[1]) !== true) { + console.error('Anchor/Self position must end with one of left/middle/right/start/end'); + return false + } + return true + } + + function validateOffset (val) { + if (val !== true) { return true } + if (val.length !== 2) { return false } + if (typeof val[0] !== 'number' || typeof val[1] !== 'number') { + return false + } + return true + } + + function parsePosition (pos, rtl) { + var parts = pos.split(' '); + return { + vertical: parts[0], + horizontal: horizontalPos[((parts[1]) + "#" + (rtl === true ? 'rtl' : 'ltr'))] + } + } + + function getAnchorProps (el, offset, rtlCorrection) { + var ref = el.getBoundingClientRect(); + var top = ref.top; + var left = ref.left; + var right = ref.right; + var bottom = ref.bottom; + var width = ref.width; + var height = ref.height; + + if (width === 0) { + width = el.offsetWidth; + } + if (height === 0) { + height = el.offsetHeight; + } + + if (offset !== void 0) { + left -= offset[0]; + right += offset[0]; + top -= offset[1]; + bottom += offset[1]; + } + + // TODO: check if the correction is needed also if rtlHasScrollBug + if (rtlCorrection === true) { + var diff = document.documentElement.scrollWidth - document.documentElement.clientWidth; + left -= diff; + right -= diff; + } + + return { + left: left, + middle: left + (right - left) / 2, + right: right, + + top: top, + center: top + (bottom - top) / 2, + bottom: bottom, + + leftRev: right, + middleRev: left + (right - left) / 2, + rightRev: left, + + topRev: bottom, + centerRev: top + (bottom - top) / 2, + bottomRev: top, + + width: width, + height: height + } + } + + function getTargetProps (el) { + var ref = el.getBoundingClientRect(); + var width = ref.width; + var height = ref.height; + + if (width === 0) { + width = el.offsetWidth; + } + if (height === 0) { + height = el.offsetHeight; + } + + return { + width: width, + height: height + } + } + + // cfg: { el, anchorEl, anchorOrigin, selfOrigin, offset, absoluteOffset, cover, fit, minHeight, minWidth, maxHeight, maxWidth, rtl } + function setPosition (cfg) { + var extEl = cfg.el; + + if (extEl.classList.contains('q-body--scroll-locked') === true) { + return + } + + var anchorProps, targetProps; + + var documentElement = document.documentElement; + var body = document.body; + var qScrollPrevented = document.qScrollPrevented; + var intEl = extEl.children[0], + firstRender = intEl.style.opacity !== '1', + fixedPositioned = isFixedPositioned(cfg.anchorEl), + anchorOrigin = Object.assign({}, cfg.anchorOrigin), + selfOrigin = Object.assign({}, cfg.selfOrigin), + viewport = fixedPositioned === true && client.is.ios === true && window.visualViewport !== void 0 + ? window.visualViewport + : { offsetLeft: 0, offsetTop: qScrollPrevented === true ? documentElement.scrollTop : 0 }; + var ref = computeScrollLeft(fixedPositioned, viewport, cfg.rtl); + var vpLeft = ref.vpLeft; + var apLeft = ref.apLeft; + var vpTop = fixedPositioned === true + ? viewport.offsetTop + : (window.pageYOffset || window.scrollY || body.scrollTop || 0), + vpWidthProp = qScrollPrevented === true + ? 'offsetWidth' + : (fixedPositioned === true || isDocumentScrollableX() !== true ? 'clientWidth' : 'scrollWidth'), + vpHeightProp = qScrollPrevented === true + ? 'offsetHeight' + : (fixedPositioned === true || isDocumentScrollableY() !== true ? 'clientHeight' : 'scrollHeight'), + vpWidth = documentElement[vpWidthProp], + vpHeight = documentElement[vpHeightProp]; + + if (cfg.absoluteOffset === void 0) { + anchorProps = getAnchorProps(cfg.anchorEl, cfg.cover === true ? [0, 0] : cfg.offset, cfg.rtl === true && fixedPositioned !== true); + } + else { + var + leftOffset = cfg.rtl === true && fixedPositioned !== true + ? documentElement.scrollWidth - documentElement.clientWidth + : 0; + var ref$1 = cfg.anchorEl.getBoundingClientRect(); + var anchorTop = ref$1.top; + var anchorLeft = ref$1.left; + var top = anchorTop + (cfg.cover === true ? 0 : cfg.absoluteOffset.top), + left = anchorLeft + (cfg.cover === true || cfg.fit === true ? 0 : cfg.absoluteOffset.left) - leftOffset; + + anchorProps = { + left: left, + middle: left, + right: left, + + top: top, + center: top, + bottom: top, + + leftRev: left, + middleRev: left, + rightRev: left, + + topRev: top, + centerRev: top, + bottomRev: top, + + width: 0, + height: 0 + }; + } + + var intElStyle = { + minWidth: cfg.minWidth || null, + minHeight: cfg.minHeight || null, + maxWidth: cfg.maxWidth || null, + maxHeight: cfg.maxHeight || null + }; + + if (cfg.fit === true || cfg.cover === true) { + if (cfg.minWidth === null) { + intElStyle.minWidth = anchorProps.width + 'px'; + } + if (cfg.cover === true && cfg.minHeight === null) { + intElStyle.minHeight = anchorProps.height + 'px'; + } + } + + Object.assign(intEl.style, intElStyle); + + if (firstRender === true) { + var clone = intEl.cloneNode(true); + clone.classList.add('q-portal__clone'); + body.appendChild(clone); + targetProps = getTargetProps(clone); + clone.remove(); + } + else { + targetProps = getTargetProps(intEl); + } + + if (intElStyle.minWidth !== null && anchorProps.width > targetProps.width) { + intElStyle.minWidth = targetProps.width + 'px'; + } + if (intElStyle.minHeight !== null && anchorProps.height > targetProps.height) { + intElStyle.minHeight = targetProps.height + 'px'; + } + + var extElStyle = { + position: fixedPositioned === true ? 'fixed' : 'absolute', + + left: null, + right: null, + marginLeft: null, + marginRight: null, + maxWidth: null, + + top: null, + bottom: null, + marginTop: null, + marginBottom: null, + maxHeight: null + }; + + var + halfWidth = Math.min(vpLeft + anchorProps[cfg.anchorOrigin.horizontal], vpWidth - apLeft - anchorProps[cfg.anchorOrigin.horizontal]) - SIDE_SPACE, + halfHeight = Math.min(vpTop + anchorProps[cfg.anchorOrigin.vertical], vpHeight - vpTop - anchorProps[cfg.anchorOrigin.vertical]) - SIDE_SPACE; + + // horizontal repositioning + if ( + selfOrigin.horizontal === 'left' && + targetProps.width + SIDE_SPACE > vpWidth - apLeft - anchorProps[anchorOrigin.horizontal] && + vpLeft + anchorProps[anchorOrigin.horizontal + 'Rev'] > vpWidth - apLeft - anchorProps[anchorOrigin.horizontal] + ) { + selfOrigin.horizontal = 'right'; + anchorOrigin.horizontal = anchorOrigin.horizontal + 'Rev'; + } + else if ( + selfOrigin.horizontal === 'right' && + targetProps.width + SIDE_SPACE > vpLeft + anchorProps[anchorOrigin.horizontal] && + vpWidth - apLeft - anchorProps[anchorOrigin.horizontal + 'Rev'] > vpLeft + anchorProps[anchorOrigin.horizontal] + ) { + selfOrigin.horizontal = 'left'; + anchorOrigin.horizontal = anchorOrigin.horizontal + 'Rev'; + } + else if ( + selfOrigin.horizontal === 'middle' && + targetProps.width / 2 > halfWidth + ) { + selfOrigin.horizontal = vpLeft + anchorProps[anchorOrigin.horizontal] < vpWidth / 2 + ? 'left' + : 'right'; + anchorOrigin.horizontal = selfOrigin.horizontal; + } + + // horizontal styles + if (selfOrigin.horizontal === 'left') { + extElStyle.left = 0; + extElStyle.marginLeft = (vpLeft + anchorProps[anchorOrigin.horizontal]) + "px"; + extElStyle.maxWidth = (vpWidth - vpLeft - anchorProps[anchorOrigin.horizontal] - SIDE_SPACE) + "px"; + } + else if (selfOrigin.horizontal === 'right') { + extElStyle.right = '100%'; + extElStyle.marginRight = "-" + (vpLeft + anchorProps[anchorOrigin.horizontal]) + "px"; + extElStyle.maxWidth = (vpLeft + anchorProps[anchorOrigin.horizontal] - SIDE_SPACE) + "px"; + } + else { + extElStyle.right = '100%'; + extElStyle.marginRight = "-" + (vpLeft + anchorProps[anchorOrigin.horizontal]) + "px"; + } + + // vertical repositioning + if ( + selfOrigin.vertical === 'top' && + targetProps.height + SIDE_SPACE > vpHeight - vpTop - anchorProps[anchorOrigin.vertical] && + vpTop + anchorProps[anchorOrigin.vertical + 'Rev'] > vpHeight - vpTop - anchorProps[anchorOrigin.vertical] + ) { + selfOrigin.vertical = 'bottom'; + anchorOrigin.vertical = anchorOrigin.vertical + 'Rev'; + } + else if ( + selfOrigin.vertical === 'bottom' && + targetProps.height + SIDE_SPACE > vpTop + anchorProps[anchorOrigin.vertical] && + vpHeight - vpTop - anchorProps[anchorOrigin.vertical + 'Rev'] > vpTop + anchorProps[anchorOrigin.vertical] + ) { + selfOrigin.vertical = 'top'; + anchorOrigin.vertical = anchorOrigin.vertical + 'Rev'; + } + else if ( + selfOrigin.vertical === 'center' && + targetProps.height / 2 > halfHeight + ) { + selfOrigin.vertical = vpTop + anchorProps[anchorOrigin.vertical] < vpHeight / 2 + ? 'top' + : 'bottom'; + anchorOrigin.vertical = selfOrigin.vertical; + } + + // vertical styles + if (selfOrigin.vertical === 'top') { + extElStyle.top = 0; + extElStyle.marginTop = (vpTop + anchorProps[anchorOrigin.vertical]) + "px"; + extElStyle.maxHeight = (vpHeight - vpTop - anchorProps[anchorOrigin.vertical] - SIDE_SPACE) + "px"; + } + else if (selfOrigin.vertical === 'bottom') { + extElStyle.bottom = '100%'; + extElStyle.marginBottom = "-" + (vpTop + anchorProps[anchorOrigin.vertical]) + "px"; + extElStyle.maxHeight = (vpTop + anchorProps[anchorOrigin.vertical] - SIDE_SPACE) + "px"; + } + else { + extElStyle.bottom = '100%'; + extElStyle.marginBottom = "-" + (vpTop + anchorProps[anchorOrigin.vertical]) + "px"; + } + + if (selfOrigin.horizontal === 'middle' && selfOrigin.vertical === 'center') { + intElStyle.transform = 'translate(50%, 50%)'; + extElStyle.transformOrigin = '100% 100%'; + } + else if (selfOrigin.horizontal === 'middle') { + intElStyle.transform = 'translateX(50%)'; + extElStyle.transformOrigin = '100% 50%'; + } + else if (selfOrigin.vertical === 'center') { + intElStyle.transform = 'translateY(50%)'; + extElStyle.transformOrigin = '50% 100%'; + } + else { + intElStyle.transform = null; + extElStyle.transformOrigin = '50% 50%'; + } + + Object.assign(extEl.style, extElStyle); + Object.assign(intEl.style, intElStyle); + + if (firstRender === true) { + requestAnimationFrame(function () { + intEl.style.opacity = 1; + }); + } + } + + var QMenu = Vue__default["default"].extend({ + name: 'QMenu', + + mixins: [ + AttrsMixin, + DarkMixin, + AnchorMixin, + TimeoutMixin, + ModelToggleMixin, + Portal, + TransitionMixin, + FocusWrapMixin + ], + + directives: { + ClickOutside: ClickOutside + }, + + props: { + persistent: Boolean, + autoClose: Boolean, + separateClosePopup: Boolean, + + noRouteDismiss: Boolean, + noRefocus: Boolean, + noFocus: Boolean, + + fit: Boolean, + cover: Boolean, + + square: Boolean, + + anchor: { + type: String, + validator: validatePosition + }, + self: { + type: String, + validator: validatePosition + }, + offset: { + type: Array, + validator: validateOffset + }, + + scrollTarget: { + default: void 0 + }, + + touchPosition: { + type: Boolean, + default: null + }, + + minHeight: { + type: String, + default: null + }, + minWidth: { + type: String, + default: null + }, + + maxHeight: { + type: String, + default: null + }, + maxWidth: { + type: String, + default: null + } + }, + + computed: { + anchorOrigin: function anchorOrigin () { + return parsePosition( + this.anchor || ( + this.cover === true ? 'center middle' : 'bottom start' + ), + this.$q.lang.rtl + ) + }, + + selfOrigin: function selfOrigin () { + return this.cover === true + ? this.anchorOrigin + : parsePosition(this.self || 'top start', this.$q.lang.rtl) + }, + + menuClass: function menuClass () { + return (this.square === true ? ' q-menu--square' : '') + + " q-menu--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + }, + + hideOnRouteChange: function hideOnRouteChange () { + return this.persistent !== true && + this.noRouteDismiss !== true + }, + + onEvents: function onEvents () { + var on = Object.assign({}, this.qListeners, + // stop propagating these events from children + {input: stop, + 'popup-show': stop, + 'popup-hide': stop}); + + if (this.autoClose === true) { + on.click = this.__onAutoClose; + } + + return on + }, + + attrs: function attrs () { + return Object.assign({}, {tabindex: -1, + role: 'menu'}, + this.qAttrs) + } + }, + + methods: { + __show: function __show (evt) { + var this$1$1 = this; + + // IE can have null document.activeElement + this.__refocusTarget = this.$q.platform.is.desktop === true && this.noRefocus === false && document.activeElement !== null + ? document.activeElement + : void 0; + + EscapeKey.register(this, function () { + if (this$1$1.persistent === true) { + this$1$1.__focusCyclePortal(); + } + else { + this$1$1.$emit('escape-key'); + this$1$1.hide(); + } + }); + + this.__showPortal(); + this.__configureScrollTarget(); + + this.absoluteOffset = void 0; + + if (evt !== void 0 && (this.touchPosition === true || (this.touchPosition !== false && this.contextMenu))) { + var pos = position(evt); + + if (pos.left !== void 0) { + var ref = this.anchorEl.getBoundingClientRect(); + var top = ref.top; + var left = ref.left; + this.absoluteOffset = { left: pos.left - left, top: pos.top - top }; + } + } + + if (this.unwatch === void 0) { + this.unwatch = this.$watch( + function () { return this$1$1.$q.screen.width + '|' + this$1$1.$q.screen.height + '|' + this$1$1.self + '|' + this$1$1.anchor + '|' + this$1$1.$q.lang.rtl; }, + this.updatePosition + ); + } + + this.$el.dispatchEvent(create('popup-show', { bubbles: true })); + + if (this.noFocus !== true) { + // IE can have null document.activeElement + document.activeElement !== null && document.activeElement.blur(); + + this.__registerTick(function () { + this$1$1.focus(); + this$1$1.updatePosition(); + }); + } + else { + this.__registerTick(function () { + this$1$1.updatePosition(); + }); + } + + this.__registerTimeout(function () { + // required in order to avoid the "double-tap needed" issue + if (this$1$1.$q.platform.is.ios === true) { + // if auto-close, then this click should + // not close the menu + this$1$1.__avoidAutoClose = this$1$1.autoClose; + this$1$1.__portal.$el.click(); + } + + this$1$1.$emit('show', evt); + }, 300); + }, + + __hide: function __hide (evt) { + var this$1$1 = this; + + this.__removeTick(); + this.__anchorCleanup(true); + + // check null for IE + if ( + // menu was hidden from code or ESC plugin + evt === void 0 || + // menu was not closed from a mouse or touch clickOutside + evt.qClickOutside !== true + ) { + this.__focusCyclePortal(true); + } + + this.$el.dispatchEvent(create('popup-hide', { bubbles: true })); + + // should __removeTimeout() if this gets removed + this.__registerTimeout(function () { + if (this$1$1.showing !== true) { + this$1$1.__hidePortal(); + this$1$1.$emit('hide', evt); + } + }, 300); + }, + + __anchorCleanup: function __anchorCleanup (hiding) { + this.absoluteOffset = void 0; + + if (this.unwatch !== void 0) { + this.unwatch(); + this.unwatch = void 0; + } + + if (hiding === true || this.showing === true) { + EscapeKey.pop(this); + this.__unconfigureScrollTarget(); + } + }, + + __unconfigureScrollTarget: function __unconfigureScrollTarget () { + this.__changeScrollEvent(); + }, + + __configureScrollTarget: function __configureScrollTarget () { + if (this.showing && (this.anchorEl !== void 0 || this.scrollTarget !== void 0)) { + this.__changeScrollEvent(this.updatePosition, getScrollTarget(this.anchorEl, this.scrollTarget)); + } + }, + + __onAutoClose: function __onAutoClose (e) { + // if auto-close, then the ios double-tap fix which + // issues a click should not close the menu + if (this.__avoidAutoClose !== true) { + closePortalMenus(this, e); + this.qListeners.click !== void 0 && this.$emit('click', e); + } + else { + this.__avoidAutoClose = false; + } + }, + + updatePosition: function updatePosition () { + var this$1$1 = this; + + if (this.anchorEl === void 0 || this.__portal === void 0) { + return + } + + var el = this.__portal.$el; + + if (el.nodeType === 8) { // IE replaces the comment with delay + setTimeout(this.updatePosition, 25); + return + } + + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition); + this.settingPosition = requestAnimationFrame(function () { + var touchPosition = this$1$1.touchPosition === true || (this$1$1.touchPosition !== false && this$1$1.contextMenu); + + setPosition({ + el: el, + offset: this$1$1.offset, + anchorEl: this$1$1.anchorEl, + anchorOrigin: this$1$1.anchorOrigin, + selfOrigin: this$1$1.selfOrigin, + absoluteOffset: this$1$1.absoluteOffset, + fit: touchPosition !== true && this$1$1.fit === true, + cover: touchPosition !== true && this$1$1.cover === true, + minHeight: this$1$1.minHeight, + minWidth: this$1$1.minWidth, + maxHeight: this$1$1.maxHeight, + maxWidth: this$1$1.maxWidth, + rtl: this$1$1.$q.lang.rtl + }); + this$1$1.settingPosition = void 0; + }); + }, + + __onClickOutside: function __onClickOutside (e) { + if (this.persistent !== true && this.showing === true) { + var targetClassList = e.target.classList; + + closePortalMenus(this, e); + if ( + // always prevent touch event + e.type === 'touchstart' || + // prevent click if it's on a dialog backdrop + targetClassList.contains('q-dialog__backdrop') === true + ) { + stopAndPrevent(e); + this.$q.interaction.preventClick(e.target, true); + } + return true + } + }, + + __renderPortal: function __renderPortal (h) { + return h('transition', { + props: this.transitionProps + }, [ + this.showing === true ? h('div', { + class: 'q-menu__container column no-pointer-events', + directives: [{ + name: 'click-outside', + value: this.__onClickOutside, + arg: this.anchorEl + }] + }, [ + h('div', { + ref: 'inner', + staticClass: 'q-menu scroll all-pointer-events' + this.menuClass, + class: this.contentClass, + style: this.contentStyle, + attrs: this.attrs, + on: this.onEvents + }, this.__getFocusWrappedContent('default')) + ]) : null + ]) + } + }, + + created: function created () { + this.__useTick('__registerTick', '__removeTick'); + this.__useTimeout('__registerTimeout'); + }, + + mounted: function mounted () { + this.__processModelChange(this.value); + }, + + beforeDestroy: function beforeDestroy () { + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition); + + // When the menu is destroyed while open we can only emit the event on anchorEl + if (this.showing === true && this.anchorEl !== void 0) { + this.anchorEl.dispatchEvent( + create('popup-hide', { bubbles: true }) + ); + } + this.__refocusTarget = void 0; + } + }); + + /** + * Based on the work of https://github.com/jchook/uuid-random + */ + + var + buf, + bufIdx = 0; + var hexBytes = new Array(256); + + // Pre-calculate toString(16) for speed + for (var i = 0; i < 256; i++) { + hexBytes[i] = (i + 0x100).toString(16).substr(1); + } + + // Use best available PRNG + var randomBytes = (function () { + // Node & Browser support + var lib = typeof crypto !== 'undefined' + ? crypto + : ( + typeof window !== 'undefined' + ? window.msCrypto // IE11 + : void 0 + ); + + if (lib !== void 0) { + if (lib.randomBytes !== void 0) { + return lib.randomBytes + } + if (lib.getRandomValues !== void 0) { + return function (n) { + var bytes = new Uint8Array(n); + lib.getRandomValues(bytes); + return bytes + } + } + } + + return function (n) { + var r = []; + for (var i = n; i > 0; i--) { + r.push(Math.floor(Math.random() * 256)); + } + return r + } + })(); + + // Buffer random numbers for speed + // Reduce memory usage by decreasing this number (min 16) + // or improve speed by increasing this number (try 16384) + var BUFFER_SIZE = 4096; + + function uid$3 () { + // Buffer some random bytes for speed + if (buf === void 0 || (bufIdx + 16 > BUFFER_SIZE)) { + bufIdx = 0; + buf = randomBytes(BUFFER_SIZE); + } + + var b = Array.prototype.slice.call(buf, bufIdx, (bufIdx += 16)); + b[6] = (b[6] & 0x0f) | 0x40; + b[8] = (b[8] & 0x3f) | 0x80; + + return hexBytes[b[0]] + hexBytes[b[1]] + + hexBytes[b[2]] + hexBytes[b[3]] + '-' + + hexBytes[b[4]] + hexBytes[b[5]] + '-' + + hexBytes[b[6]] + hexBytes[b[7]] + '-' + + hexBytes[b[8]] + hexBytes[b[9]] + '-' + + hexBytes[b[10]] + hexBytes[b[11]] + + hexBytes[b[12]] + hexBytes[b[13]] + + hexBytes[b[14]] + hexBytes[b[15]] + } + + // let's not duplicate type checking and prop validations + // so just specify the props here with no type description + var menuTransitionProps = Object.keys(TransitionMixin.props).reduce( + function (acc, key) { return (acc[ key ] = {}) && acc; }, + {} + ); + + var QBtnDropdown = Vue__default["default"].extend({ + name: 'QBtnDropdown', + + mixins: [ BtnMixin, AttrsMixin ], + + inheritAttrs: false, + + props: Object.assign({}, {value: Boolean, + split: Boolean, + dropdownIcon: String, + + contentClass: [ Array, String, Object ], + contentStyle: [ Array, String, Object ], + + cover: Boolean, + persistent: Boolean, + noRouteDismiss: Boolean, + autoClose: Boolean, + + menuAnchor: { + type: String, + default: 'bottom end' + }, + menuSelf: { + type: String, + default: 'top end' + }, + menuOffset: Array}, + menuTransitionProps, + + {disableMainBtn: Boolean, + disableDropdown: Boolean, + + noIconAnimation: Boolean, + + toggleAriaLabel: String}), + + data: function data () { + return { + showing: this.value + } + }, + + watch: { + value: function value (val) { + this.$refs.menu !== void 0 && this.$refs.menu[val ? 'show' : 'hide'](); + }, + + split: function split () { + this.hide(); + } + }, + + render: function render (h) { + var this$1$1 = this; + + var label = slot(this, 'label', []); + var attrs = { + 'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-haspopup': 'true', + 'aria-controls': this.targetUid, + 'aria-owns': this.targetUid, + 'aria-label': this.toggleAriaLabel || this.$q.lang.label[ this.showing === true ? 'collapse' : 'expand' ](this.label) + }; + + if ( + this.disable === true || + ( + (this.split === false && this.disableMainBtn === true) || + this.disableDropdown === true + ) + ) { + attrs['aria-disabled'] = 'true'; + } + + var Arrow = [ + h(QIcon, { + props: { name: this.dropdownIcon || this.$q.iconSet.arrow.dropdown }, + class: 'q-btn-dropdown__arrow' + + (this.showing === true && this.noIconAnimation === false ? ' rotate-180' : '') + + (this.split === false ? ' q-btn-dropdown__arrow-container' : '') + }) + ]; + + this.disableDropdown !== true && Arrow.push( + h(QMenu, { + key: 'menu', + ref: 'menu', + attrs: { + id: this.targetUid + }, + props: { + cover: this.cover, + fit: true, + persistent: this.persistent, + noRouteDismiss: this.noRouteDismiss, + autoClose: this.autoClose, + anchor: this.menuAnchor, + self: this.menuSelf, + offset: this.menuOffset, + contentClass: this.contentClass, + contentStyle: this.contentStyle, + separateClosePopup: true, + transitionShow: this.transitionShow, + transitionHide: this.transitionHide + }, + on: cache(this, 'menu', { + 'before-show': function (e) { + this$1$1.showing = true; + this$1$1.$emit('before-show', e); + }, + show: function (e) { + this$1$1.$emit('show', e); + this$1$1.$emit('input', true); + }, + 'before-hide': function (e) { + this$1$1.showing = false; + this$1$1.$emit('before-hide', e); + }, + hide: function (e) { + this$1$1.$emit('hide', e); + this$1$1.$emit('input', false); + } + }) + }, slot(this, 'default')) + ); + + if (this.split === false) { + return h(QBtn, { + key: 'nonSpl', + class: 'q-btn-dropdown q-btn-dropdown--simple', + props: Object.assign({}, this.$props, + {disable: this.disable === true || this.disableMainBtn === true, + noWrap: true, + round: false}), + attrs: Object.assign({}, attrs, + this.qAttrs), + on: cache(this, 'nonSpl', { + click: function (e) { + this$1$1.$emit('click', e); + } + }), + scopedSlots: { + loading: this.$scopedSlots.loading + } + }, label.concat(Arrow)) + } + + var Btn = h(QBtn, { + key: 'spl', + class: 'q-btn-dropdown--current', + props: Object.assign({}, this.$props, + {disable: this.disable === true || this.disableMainBtn === true, + noWrap: true, + iconRight: this.iconRight, + round: false}), + attrs: this.qAttrs, + on: cache(this, 'spl', { + click: function (e) { + stop(e); // prevent showing the menu on click + this$1$1.hide(); + this$1$1.$emit('click', e); + } + }), + scopedSlots: { + loading: this.$scopedSlots.loading + } + }, label); + + return h(QBtnGroup, { + props: { + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + square: this.square, + push: this.push, + unelevated: this.unelevated, + glossy: this.glossy, + stretch: this.stretch + }, + staticClass: 'q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item' + }, [ + Btn, + + h(QBtn, { + staticClass: 'q-btn-dropdown__arrow-container q-anchor--skip', + attrs: attrs, + props: { + disable: this.disable === true || this.disableDropdown === true, + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + push: this.push, + size: this.size, + color: this.color, + textColor: this.textColor, + dense: this.dense, + ripple: this.ripple + } + }, Arrow) + ]) + }, + + methods: { + toggle: function toggle (evt) { + this.$refs.menu && this.$refs.menu.toggle(evt); + }, + + show: function show (evt) { + this.$refs.menu && this.$refs.menu.show(evt); + }, + + hide: function hide (evt) { + this.$refs.menu && this.$refs.menu.hide(evt); + } + }, + + created: function created () { + this.targetUid = "d_" + (uid$3()); + }, + + mounted: function mounted () { + this.value === true && this.show(); + } + }); + + var FormMixin = { + props: { + name: String + }, + + computed: { + formAttrs: function formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.value + } + } + }, + + methods: { + __injectFormInput: function __injectFormInput (child, action, className) { + child[action]( + this.$createElement('input', { + staticClass: 'hidden', + class: className, + attrs: this.formAttrs, + domProps: this.formDomProps + }) + ); + } + } + }; + + var FormFieldMixin = { + props: { + name: String + }, + + computed: { + nameProp: function nameProp () { + return this.name || this.for + } + } + }; + + var QBtnToggle = Vue__default["default"].extend({ + name: 'QBtnToggle', + + mixins: [ ListenersMixin, RippleMixin, FormMixin ], + + props: { + value: { + required: true + }, + + options: { + type: Array, + required: true, + validator: function (v) { return v.every( + function (opt) { return ('label' in opt || 'icon' in opt || 'slot' in opt) && 'value' in opt; } + ); } + }, + + // To avoid seeing the active raise shadow through the transparent button, give it a color (even white). + color: String, + textColor: String, + toggleColor: { + type: String, + default: 'primary' + }, + toggleTextColor: String, + + outline: Boolean, + flat: Boolean, + unelevated: Boolean, + rounded: Boolean, + push: Boolean, + glossy: Boolean, + + size: String, + padding: String, + + noCaps: Boolean, + noWrap: Boolean, + dense: Boolean, + readonly: Boolean, + disable: Boolean, + + stack: Boolean, + stretch: Boolean, + + spread: Boolean, + + clearable: Boolean + }, + + computed: { + hasActiveValue: function hasActiveValue () { + var this$1$1 = this; + + return this.options.find(function (opt) { return opt.value === this$1$1.value; }) !== void 0 + }, + + formAttrs: function formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.value + } + }, + + btnOptions: function btnOptions () { + var this$1$1 = this; + + var mergeOption = function (opt, key) { return opt[key] === void 0 ? this$1$1[key] : opt[key]; }; + + return this.options.map(function (opt, i) { return ({ + slot: opt.slot, + + options: { + key: i, + class: opt.class, + style: opt.style, + on: Object.assign({}, this$1$1.qListeners, + {click: function (e) { return this$1$1.__set(opt.value, opt, e); }}), + attrs: Object.assign({}, {'aria-pressed': opt.value === this$1$1.value ? 'true' : 'false'}, + opt.attrs), + props: Object.assign({}, opt, + {slot: void 0, + class: void 0, + style: void 0, + value: void 0, + attrs: void 0, + + outline: this$1$1.outline, + flat: this$1$1.flat, + rounded: this$1$1.rounded, + push: this$1$1.push, + unelevated: this$1$1.unelevated, + dense: this$1$1.dense, + + disable: this$1$1.disable === true || opt.disable === true, + + // Options that come from the button specific options first, then from general props + color: opt.value === this$1$1.value ? mergeOption(opt, 'toggleColor') : mergeOption(opt, 'color'), + textColor: opt.value === this$1$1.value ? mergeOption(opt, 'toggleTextColor') : mergeOption(opt, 'textColor'), + noCaps: mergeOption(opt, 'noCaps') === true, + noWrap: mergeOption(opt, 'noWrap') === true, + + size: mergeOption(opt, 'size'), + padding: mergeOption(opt, 'padding'), + ripple: mergeOption(opt, 'ripple'), + stack: mergeOption(opt, 'stack') === true, + stretch: mergeOption(opt, 'stretch') === true}) + } + }); }) + } + }, + + methods: { + __set: function __set (value, opt, e) { + if (this.readonly !== true) { + if (this.value === value) { + if (this.clearable === true) { + this.$emit('input', null, null); + this.$emit('clear'); + } + } + else { + this.$emit('input', value, opt); + } + + this.$emit('click', e); + } + } + }, + + render: function render (h) { + var this$1$1 = this; + + var child = this.btnOptions.map(function (opt) { + return h(QBtn, Object.assign({}, opt.options), opt.slot !== void 0 ? slot(this$1$1, opt.slot) : void 0) + }); + + if (this.name !== void 0 && this.disable !== true && this.hasActiveValue === true) { + this.__injectFormInput(child, 'push'); + } + + return h(QBtnGroup, { + staticClass: 'q-btn-toggle', + props: { + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + push: this.push, + stretch: this.stretch, + unelevated: this.unelevated, + glossy: this.glossy, + spread: this.spread + } + }, mergeSlot(child, this, 'default')) + } + }); + + var QCard = Vue__default["default"].extend({ + name: 'QCard', + + mixins: [ ListenersMixin, DarkMixin, TagMixin ], + + props: { + square: Boolean, + flat: Boolean, + bordered: Boolean + }, + + computed: { + classes: function classes () { + return 'q-card' + + " q-card--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + + (this.bordered === true ? ' q-card--bordered' : '') + + (this.square === true ? ' q-card--square no-border-radius' : '') + + (this.flat === true ? ' q-card--flat no-shadow' : '') + } + }, + + render: function render (h) { + return h(this.tag, { + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QCardSection = Vue__default["default"].extend({ + name: 'QCardSection', + + mixins: [ ListenersMixin, TagMixin ], + + props: { + horizontal: Boolean + }, + + computed: { + classes: function classes () { + return 'q-card__section ' + + "q-card__section--" + (this.horizontal === true ? 'horiz row no-wrap' : 'vert') + } + }, + + render: function render (h) { + return h(this.tag, { + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QCardActions = Vue__default["default"].extend({ + name: 'QCardActions', + + mixins: [ ListenersMixin, AlignMixin ], + + props: { + vertical: Boolean + }, + + computed: { + classes: function classes () { + return ("q-card__actions--" + (this.vertical === true ? 'vert column' : 'horiz row') + " " + (this.alignClass)) + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-card__actions', + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var + hasMap = typeof Map === 'function', + hasSet = typeof Set === 'function', + hasArrayBuffer = typeof ArrayBuffer === 'function'; + + function isDeepEqual (a, b) { + if (a === b) { + return true + } + + if (a !== null && b !== null && typeof a === 'object' && typeof b === 'object') { + if (a.constructor !== b.constructor) { + return false + } + + var length, i; + + if (a.constructor === Array) { + length = a.length; + + if (length !== b.length) { + return false + } + + for (i = length; i-- !== 0;) { + if (isDeepEqual(a[i], b[i]) !== true) { + return false + } + } + + return true + } + + if (hasMap === true && a.constructor === Map) { + if (a.size !== b.size) { + return false + } + + i = a.entries().next(); + while (i.done !== true) { + if (b.has(i.value[0]) !== true) { + return false + } + i = i.next(); + } + + i = a.entries().next(); + while (i.done !== true) { + if (isDeepEqual(i.value[1], b.get(i.value[0])) !== true) { + return false + } + i = i.next(); + } + + return true + } + + if (hasSet === true && a.constructor === Set) { + if (a.size !== b.size) { + return false + } + + i = a.entries().next(); + while (i.done !== true) { + if (b.has(i.value[0]) !== true) { + return false + } + i = i.next(); + } + + return true + } + + if (hasArrayBuffer === true && a.buffer != null && a.buffer.constructor === ArrayBuffer) { + length = a.length; + + if (length !== b.length) { + return false + } + + for (i = length; i-- !== 0;) { + if (a[i] !== b[i]) { + return false + } + } + + return true + } + + if (a.constructor === RegExp) { + return a.source === b.source && a.flags === b.flags + } + + if (a.valueOf !== Object.prototype.valueOf) { + return a.valueOf() === b.valueOf() + } + + if (a.toString !== Object.prototype.toString) { + return a.toString() === b.toString() + } + + var keys = Object.keys(a).filter(function (key) { return a[key] !== void 0; }); + length = keys.length; + + if (length !== Object.keys(b).filter(function (key) { return b[key] !== void 0; }).length) { + return false + } + + for (i = length; i-- !== 0;) { + var key = keys[i]; + if (isDeepEqual(a[key], b[key]) !== true) { + return false + } + } + + return true + } + + // true if both NaN, false otherwise + return a !== a && b !== b // eslint-disable-line no-self-compare + } + + // not perfect, but what we ARE interested is for Arrays not to slip in + // as spread operator will mess things up in various areas + // see https://jsbench.me/tbl0iliyax/1 + function isObject (v) { + return v !== null && typeof v === 'object' && Array.isArray(v) !== true + } + + function isDate (v) { + return Object.prototype.toString.call(v) === '[object Date]' + } + + function isRegexp (v) { + return Object.prototype.toString.call(v) === '[object RegExp]' + } + + function isNumber (v) { + return typeof v === 'number' && isFinite(v) + } + + var is = { + deepEqual: isDeepEqual, + object: isObject, + date: isDate, + regexp: isRegexp, + number: isNumber + }; + + var directions$1 = [ 'left', 'right', 'up', 'down', 'horizontal', 'vertical' ]; + + var modifiersAll = { + left: true, + right: true, + up: true, + down: true, + horizontal: true, + vertical: true, + all: true + }; + + function getModifierDirections (mod) { + var dir = {}; + + directions$1.forEach(function (direction) { + if (mod[direction]) { + dir[direction] = true; + } + }); + + if (Object.keys(dir).length === 0) { + return modifiersAll + } + + if (dir.horizontal === true) { + dir.left = dir.right = true; + } + if (dir.vertical === true) { + dir.up = dir.down = true; + } + if (dir.left === true && dir.right === true) { + dir.horizontal = true; + } + if (dir.up === true && dir.down === true) { + dir.vertical = true; + } + if (dir.horizontal === true && dir.vertical === true) { + dir.all = true; + } + + return dir + } + + function shouldStart (evt, ctx) { + return ctx.event === void 0 && + evt.target !== void 0 && + evt.target.draggable !== true && + typeof ctx.handler === 'function' && + evt.target.nodeName.toUpperCase() !== 'INPUT' && + (evt.qClonedBy === void 0 || evt.qClonedBy.indexOf(ctx.uid) === -1) + } + + function parseArg$3 (arg) { + // delta (min velocity -- dist / time) + // mobile min distance on first move + // desktop min distance until deciding if it's a swipe or not + var data = [0.06, 6, 50]; + + if (typeof arg === 'string' && arg.length) { + arg.split(':').forEach(function (val, index) { + var v = parseFloat(val); + v && (data[index] = v); + }); + } + + return data + } + + function destroy$a (el) { + var ctx = el.__qtouchswipe; + + if (ctx !== void 0) { + cleanEvt(ctx, 'main_mouse'); + cleanEvt(ctx, 'main_touch'); + cleanEvt(ctx, 'temp'); + + client.is.firefox === true && preventDraggable(el, false); + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + delete el.__qtouchswipe; + } + } + + function configureEvents$4 (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse'); + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', ("passive" + (modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : '')) ] + ]); + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch'); + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', ("passive" + (modifiers.capture === true ? 'Capture' : '')) ], + [ el, 'touchmove', 'noop', 'notPassiveCapture' ] // cannot be passive (ex: iOS scroll) + ]); + } + + ctx.modifiers = modifiers; + } + + var TouchSwipe = { + name: 'touch-swipe', + + bind: function bind (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + + if (el.__qtouchswipe !== void 0) { + destroy$a(el); + el.__qtouchswipe_destroyed = true; + } + + var ctx = { + handler: value, + sensitivity: parseArg$3(arg), + arg: arg, + modifiers: { capture: null }, // make sure touch listeners are initiated + direction: getModifierDirections(modifiers), + + noop: noop, + + mouseStart: function mouseStart (evt) { + if (shouldStart(evt, ctx) && leftClick(evt)) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', ("notPassive" + (ctx.modifiers.mouseCapture === true ? 'Capture' : '')) ], + [ document, 'mouseup', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt, true); + } + }, + + touchStart: function touchStart (evt) { + if (shouldStart(evt, ctx)) { + var target = evt.target; + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'notPassiveCapture' ], + [ target, 'touchcancel', 'end', 'notPassiveCapture' ], + [ target, 'touchend', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt); + } + }, + + start: function start (evt, mouseEvent) { + client.is.firefox === true && preventDraggable(el, true); + + var pos = position(evt); + + ctx.event = { + x: pos.left, + y: pos.top, + time: Date.now(), + mouse: mouseEvent === true, + dir: false + }; + }, + + move: function move (evt) { + if (ctx.event === void 0) { + return + } + + if (ctx.event.dir !== false) { + stopAndPrevent(evt); + return + } + + var time = Date.now() - ctx.event.time; + + if (time === 0) { + return + } + + var + pos = position(evt), + distX = pos.left - ctx.event.x, + absX = Math.abs(distX), + distY = pos.top - ctx.event.y, + absY = Math.abs(distY); + + if (ctx.event.mouse !== true) { + if (absX < ctx.sensitivity[1] && absY < ctx.sensitivity[1]) { + ctx.end(evt); + return + } + } + else if (absX < ctx.sensitivity[2] && absY < ctx.sensitivity[2]) { + return + } + + var + velX = absX / time, + velY = absY / time; + + if ( + ctx.direction.vertical === true && + absX < absY && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = distY < 0 ? 'up' : 'down'; + } + + if ( + ctx.direction.horizontal === true && + absX > absY && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = distX < 0 ? 'left' : 'right'; + } + + if ( + ctx.direction.up === true && + absX < absY && + distY < 0 && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = 'up'; + } + + if ( + ctx.direction.down === true && + absX < absY && + distY > 0 && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = 'down'; + } + + if ( + ctx.direction.left === true && + absX > absY && + distX < 0 && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = 'left'; + } + + if ( + ctx.direction.right === true && + absX > absY && + distX > 0 && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = 'right'; + } + + if (ctx.event.dir !== false) { + stopAndPrevent(evt); + + if (ctx.event.mouse === true) { + document.body.classList.add('no-pointer-events--children'); + document.body.classList.add('non-selectable'); + clearSelection(); + + ctx.styleCleanup = function (withDelay) { + ctx.styleCleanup = void 0; + + document.body.classList.remove('non-selectable'); + + var remove = function () { + document.body.classList.remove('no-pointer-events--children'); + }; + + if (withDelay === true) { setTimeout(remove, 50); } + else { remove(); } + }; + } + + ctx.handler({ + evt: evt, + touch: ctx.event.mouse !== true, + mouse: ctx.event.mouse, + direction: ctx.event.dir, + duration: time, + distance: { + x: absX, + y: absY + } + }); + } + else { + ctx.end(evt); + } + }, + + end: function end (evt) { + if (ctx.event === void 0) { + return + } + + cleanEvt(ctx, 'temp'); + client.is.firefox === true && preventDraggable(el, false); + ctx.styleCleanup !== void 0 && ctx.styleCleanup(true); + evt !== void 0 && ctx.event.dir !== false && stopAndPrevent(evt); + + ctx.event = void 0; + } + }; + + el.__qtouchswipe = ctx; + + configureEvents$4(el, ctx, modifiers); + }, + + update: function update (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + var oldValue = ref.oldValue; + + var ctx = el.__qtouchswipe; + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end(); + ctx.handler = value; + } + + if (ctx.arg !== arg) { + ctx.sensitivity = parseArg$3(arg); + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents$4(el, ctx, modifiers); + + ctx.direction = getModifierDirections(modifiers); + } + } + }, + + unbind: function unbind (el) { + if (el.__qtouchswipe_destroyed === void 0) { + destroy$a(el); + } + else { + delete el.__qtouchswipe_destroyed; + } + } + }; + + function getPanelWrapper (h) { + return h('div', { + key: 'stop', + staticClass: 'q-panel scroll', + // stop propagation of content emitted @input + // which would tamper with Panel's model + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'default')) + } + + var PanelWrapper = Vue__default["default"].extend({ + render: getPanelWrapper + }); + + var PanelParentMixin = { + mixins: [ ListenersMixin ], + + directives: { + TouchSwipe: TouchSwipe + }, + + props: { + value: { + required: true + }, + + animated: Boolean, + infinite: Boolean, + swipeable: Boolean, + vertical: Boolean, + + transitionPrev: String, + transitionNext: String, + + keepAlive: Boolean, + keepAliveInclude: [ String, Array, RegExp ], + keepAliveExclude: [ String, Array, RegExp ], + keepAliveMax: Number + }, + + data: function data () { + return { + panelIndex: null, + panelTransition: null + } + }, + + computed: { + panelDirectives: function panelDirectives () { + if (this.swipeable === true) { + return [{ + name: 'touch-swipe', + value: this.__swipe, + modifiers: { + horizontal: this.vertical !== true, + vertical: this.vertical, + mouse: true + } + }] + } + }, + + contentKey: function contentKey () { + return typeof this.value === 'string' || typeof this.value === 'number' + ? this.value + : String(this.value) + }, + + transitionPrevComputed: function transitionPrevComputed () { + return this.transitionPrev || ("slide-" + (this.vertical === true ? 'down' : 'right')) + }, + + transitionNextComputed: function transitionNextComputed () { + return this.transitionNext || ("slide-" + (this.vertical === true ? 'up' : 'left')) + }, + + keepAliveProps: function keepAliveProps () { + return { + include: this.keepAliveInclude, + exclude: this.keepAliveExclude, + max: this.keepAliveMax + } + }, + + needsUniqueWrapper: function needsUniqueWrapper () { + return this.keepAliveInclude !== void 0 || + this.keepAliveExclude !== void 0 + } + }, + + watch: { + value: function value (newVal, oldVal) { + var this$1$1 = this; + + var index = this.__isValidPanelName(newVal) === true + ? this.__getPanelIndex(newVal) + : -1; + + if (this.__forcedPanelTransition !== true) { + this.__updatePanelTransition( + index === -1 ? 0 : (index < this.__getPanelIndex(oldVal) ? -1 : 1) + ); + } + + if (this.panelIndex !== index) { + this.panelIndex = index; + this.$emit('before-transition', newVal, oldVal); + this.$nextTick(function () { + this$1$1.$emit('transition', newVal, oldVal); + }); + } + } + }, + + methods: { + next: function next () { + this.__go(1); + }, + + previous: function previous () { + this.__go(-1); + }, + + goTo: function goTo (name) { + this.$emit('input', name); + }, + + __isValidPanelName: function __isValidPanelName (name) { + return name !== void 0 && name !== null && name !== '' + }, + + __getPanelIndex: function __getPanelIndex (name) { + return this.panels.findIndex(function (panel) { + var opt = panel.componentOptions.propsData; + return opt.name === name && + opt.disable !== '' && + opt.disable !== true + }) + }, + + __getEnabledPanels: function __getEnabledPanels () { + return this.panels.filter(function (panel) { + var opt = panel.componentOptions.propsData; + return opt.disable !== '' && opt.disable !== true + }) + }, + + __updatePanelTransition: function __updatePanelTransition (direction) { + var val = direction !== 0 && this.animated === true && this.panelIndex !== -1 + ? 'q-transition--' + (direction === -1 ? this.transitionPrevComputed : this.transitionNextComputed) + : null; + + if (this.panelTransition !== val) { + this.panelTransition = val; + } + }, + + __go: function __go (direction, startIndex) { + var this$1$1 = this; + if ( startIndex === void 0 ) startIndex = this.panelIndex; + + var index = startIndex + direction; + var slots = this.panels; + + while (index > -1 && index < slots.length) { + var opt = slots[index].componentOptions; + + if ( + opt !== void 0 && + opt.propsData.disable !== '' && + opt.propsData.disable !== true + ) { + this.__updatePanelTransition(direction); + this.__forcedPanelTransition = true; + this.$emit('input', slots[index].componentOptions.propsData.name); + setTimeout(function () { + this$1$1.__forcedPanelTransition = false; + }); + return + } + + index += direction; + } + + if (this.infinite === true && slots.length > 0 && startIndex !== -1 && startIndex !== slots.length) { + this.__go(direction, direction === -1 ? slots.length : -1); + } + }, + + __swipe: function __swipe (evt) { + var dir = this.vertical === true ? 'up' : 'left'; + this.__go((this.$q.lang.rtl === true ? -1 : 1) * (evt.direction === dir ? 1 : -1)); + }, + + __updatePanelIndex: function __updatePanelIndex () { + var index = this.__getPanelIndex(this.value); + + if (this.panelIndex !== index) { + this.panelIndex = index; + } + + return true + }, + + __getPanelContent: function __getPanelContent (h) { + var this$1$1 = this; + + if (this.panels.length === 0) { + return + } + + var panel = this.__isValidPanelName(this.value) && + this.__updatePanelIndex() && + this.panels[this.panelIndex]; + + var content = this.keepAlive === true + ? [ + h('keep-alive', { props: this.keepAliveProps }, [ + h( + this.needsUniqueWrapper === true + ? cacheWithFn(this, this.contentKey, function () { return Vue__default["default"].extend({ + name: this$1$1.contentKey, + render: getPanelWrapper + }); }) + : PanelWrapper, + { key: this.contentKey }, + [ panel ] + ) + ]) + ] + : [ + h('div', { + staticClass: 'q-panel scroll', + key: this.contentKey, + // stop propagation of content emitted @input + // which would tamper with Panel's model + on: cache(this, 'stop', { input: stop }) + }, [ panel ]) + ]; + + return this.animated === true + ? [ + h('transition', { + props: { name: this.panelTransition }, + on: onTransitionHideScroll + }, content) + ] + : content + } + }, + + render: function render (h) { + var this$1$1 = this; + + this.panels = slot(this, 'default', []).filter( + function (panel) { return panel !== void 0 && + panel.componentOptions !== void 0 && + panel.componentOptions.propsData !== void 0 && + this$1$1.__isValidPanelName(panel.componentOptions.propsData.name); } + ); + + return this.__renderPanels(h) + } + }; + + var PanelChildMixin = { + mixins: [ ListenersMixin ], + + props: { + name: { + required: true + }, + disable: Boolean + } + }; + + var fullscreenCounter = 0; + + var FullscreenMixin = { + props: { + fullscreen: Boolean, + noRouteFullscreenExit: Boolean + }, + + data: function data () { + return { + inFullscreen: false + } + }, + + watch: { + $route: function $route () { + this.noRouteFullscreenExit !== true && this.exitFullscreen(); + }, + + fullscreen: function fullscreen (v) { + if (this.inFullscreen !== v) { + this.toggleFullscreen(); + } + }, + + inFullscreen: function inFullscreen (v) { + this.$emit('update:fullscreen', v); + this.$emit('fullscreen', v); + } + }, + + methods: { + toggleFullscreen: function toggleFullscreen () { + if (this.inFullscreen === true) { + this.exitFullscreen(); + } + else { + this.setFullscreen(); + } + }, + + setFullscreen: function setFullscreen () { + if (this.inFullscreen === true) { + return + } + + this.inFullscreen = true; + this.container = this.$el.parentNode; + this.container.replaceChild(this.fullscreenFillerNode, this.$el); + document.body.appendChild(this.$el); + + fullscreenCounter++; + + if (fullscreenCounter === 1) { + document.body.classList.add('q-body--fullscreen-mixin'); + } + + this.__historyFullscreen = { + handler: this.exitFullscreen + }; + History.add(this.__historyFullscreen); + }, + + exitFullscreen: function exitFullscreen () { + var this$1$1 = this; + + if (this.inFullscreen !== true) { + return + } + + if (this.__historyFullscreen !== void 0) { + History.remove(this.__historyFullscreen); + this.__historyFullscreen = void 0; + } + this.container.replaceChild(this.$el, this.fullscreenFillerNode); + this.inFullscreen = false; + + fullscreenCounter = Math.max(0, fullscreenCounter - 1); + + if (fullscreenCounter === 0) { + document.body.classList.remove('q-body--fullscreen-mixin'); + + if (this.$el.scrollIntoView !== void 0) { + setTimeout(function () { this$1$1.$el.scrollIntoView(); }); + } + } + } + }, + + beforeMount: function beforeMount () { + this.fullscreenFillerNode = document.createElement('span'); + }, + + mounted: function mounted () { + this.fullscreen === true && this.setFullscreen(); + }, + + beforeDestroy: function beforeDestroy () { + this.exitFullscreen(); + } + }; + + var QCarousel = Vue__default["default"].extend({ + name: 'QCarousel', + + mixins: [ DarkMixin, PanelParentMixin, FullscreenMixin ], + + props: { + height: String, + padding: Boolean, + + controlType: { + type: String, + validator: function (v) { return [ 'regular', 'flat', 'outline', 'push', 'unelevated' ].includes(v); }, + default: 'flat' + }, + controlColor: String, + controlTextColor: String, + + autoplay: [ Number, Boolean ], + + arrows: Boolean, + prevIcon: String, + nextIcon: String, + + navigation: Boolean, + navigationPosition: { + type: String, + validator: function (v) { return [ 'top', 'right', 'bottom', 'left' ].includes(v); } + }, + navigationIcon: String, + navigationActiveIcon: String, + + thumbnails: Boolean + }, + + computed: { + style: function style () { + if (this.inFullscreen !== true && this.height !== void 0) { + return { + height: this.height + } + } + }, + + direction: function direction () { + return this.vertical === true ? 'vertical' : 'horizontal' + }, + + classes: function classes () { + return "q-carousel q-panel-parent q-carousel--with" + (this.padding === true ? '' : 'out') + "-padding" + + (this.inFullscreen === true ? ' fullscreen' : '') + + " q-carousel--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + + (this.arrows === true ? (" q-carousel--arrows-" + (this.direction)) : '') + + (this.navigation === true ? (" q-carousel--navigation-" + (this.navigationPositionComputed)) : '') + }, + + arrowIcons: function arrowIcons () { + var ico = [ + this.prevIcon || this.$q.iconSet.carousel[this.vertical === true ? 'up' : 'left'], + this.nextIcon || this.$q.iconSet.carousel[this.vertical === true ? 'down' : 'right'] + ]; + + return this.vertical === false && this.$q.lang.rtl === true + ? ico.reverse() + : ico + }, + + navIcon: function navIcon () { + return this.navigationIcon || this.$q.iconSet.carousel.navigationIcon + }, + + navActiveIcon: function navActiveIcon () { + return this.navigationActiveIcon || this.navIcon + }, + + navigationPositionComputed: function navigationPositionComputed () { + return this.navigationPosition || (this.vertical === true ? 'right' : 'bottom') + }, + + controlProps: function controlProps () { + var obj; + + return ( obj = { + color: this.controlColor, + textColor: this.controlTextColor, + round: true + }, obj[ this.controlType ] = true, obj.dense = true, obj ) + }, + + transitionPrevComputed: function transitionPrevComputed () { + return this.transitionPrev || 'fade' + }, + + transitionNextComputed: function transitionNextComputed () { + return this.transitionNext || 'fade' + } + }, + + watch: { + value: function value () { + if (this.autoplay) { + clearInterval(this.timer); + this.__startTimer(); + } + }, + + autoplay: function autoplay (val) { + if (val) { + this.__startTimer(); + } + else { + clearInterval(this.timer); + } + } + }, + + methods: { + __startTimer: function __startTimer () { + var duration = isNumber(this.autoplay) === true + ? this.autoplay + : 5000; + + this.timer = setTimeout( + duration >= 0 ? this.next : this.previous, + Math.abs(duration) + ); + }, + + __getNavigationContainer: function __getNavigationContainer (h, type, mapping) { + return h('div', { + class: 'q-carousel__control q-carousel__navigation no-wrap absolute flex' + + " q-carousel__navigation--" + type + " q-carousel__navigation--" + (this.navigationPositionComputed) + + (this.controlColor !== void 0 ? (" text-" + (this.controlColor)) : '') + }, [ + h('div', { + staticClass: 'q-carousel__navigation-inner flex flex-center no-wrap' + }, this.__getEnabledPanels().map(mapping)) + ]) + }, + + __getContent: function __getContent (h) { + var this$1$1 = this; + + var node = []; + + if (this.navigation === true) { + var fn = this.$scopedSlots['navigation-icon'] !== void 0 + ? this.$scopedSlots['navigation-icon'] + : function (opts) { return h(QBtn, { + key: 'nav#' + opts.name, + class: ("q-carousel__navigation-icon q-carousel__navigation-icon--" + (opts.active === true ? '' : 'in') + "active"), + props: opts.btnProps, + on: cache(this$1$1, 'nav#' + opts.name, { click: opts.onClick }) + }); }; + + var maxIndex = this.panels.length - 1; + node.push( + this.__getNavigationContainer(h, 'buttons', function (panel, index) { + var name = panel.componentOptions.propsData.name; + var active = this$1$1.panelIndex === index; + + return fn({ + index: index, + maxIndex: maxIndex, + name: name, + active: active, + btnProps: Object.assign({}, {icon: active === true ? this$1$1.navActiveIcon : this$1$1.navIcon, + size: 'sm'}, + this$1$1.controlProps), + onClick: function () { this$1$1.goTo(name); } + }) + }) + ); + } + else if (this.thumbnails === true) { + var color = this.controlColor !== void 0 + ? (" text-" + (this.controlColor)) + : ''; + + node.push(this.__getNavigationContainer(h, 'thumbnails', function (panel) { + var slide = panel.componentOptions.propsData; + + return h('img', { + class: "q-carousel__thumbnail q-carousel__thumbnail--" + (slide.name === this$1$1.value ? '' : 'in') + "active" + color, + attrs: { + src: slide.imgSrc + }, + key: 'tmb#' + slide.name, + on: cache(this$1$1, 'tmb#' + slide.name, { click: function () { this$1$1.goTo(slide.name); } }) + }) + })); + } + + if (this.arrows === true && this.panelIndex >= 0) { + if (this.infinite === true || this.panelIndex > 0) { + node.push( + h('div', { + staticClass: ("q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--" + (this.direction) + " absolute flex flex-center") + }, [ + h(QBtn, { + key: 'prev', + props: Object.assign({}, {icon: this.arrowIcons[0]}, this.controlProps), + on: cache(this, 'prev', { click: this.previous }) + }) + ]) + ); + } + + if (this.infinite === true || this.panelIndex < this.panels.length - 1) { + node.push( + h('div', { + staticClass: ("q-carousel__control q-carousel__arrow q-carousel__next-arrow q-carousel__next-arrow--" + (this.direction) + " absolute flex flex-center") + }, [ + h(QBtn, { + key: 'next', + props: Object.assign({}, {icon: this.arrowIcons[1]}, this.controlProps), + on: cache(this, 'next', { click: this.next }) + }) + ]) + ); + } + } + + return mergeSlot(node, this, 'control') + }, + + __renderPanels: function __renderPanels (h) { + return h('div', { + style: this.style, + class: this.classes, + on: Object.assign({}, this.qListeners) + }, [ + h('div', { + staticClass: 'q-carousel__slides-container', + directives: this.panelDirectives + }, this.__getPanelContent(h)) + ].concat(this.__getContent(h))) + } + }, + + mounted: function mounted () { + this.autoplay && this.__startTimer(); + }, + + beforeDestroy: function beforeDestroy () { + clearInterval(this.timer); + } + }); + + var QCarouselSlide = Vue__default["default"].extend({ + name: 'QCarouselSlide', + + mixins: [ PanelChildMixin ], + + props: { + imgSrc: String + }, + + computed: { + style: function style () { + if (this.imgSrc) { + return { + backgroundImage: ("url(\"" + (this.imgSrc) + "\")") + } + } + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-carousel__slide', + style: this.style, + attrs: { role: 'tabpanel' }, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QCarouselControl = Vue__default["default"].extend({ + name: 'QCarouselControl', + + mixins: [ ListenersMixin ], + + props: { + position: { + type: String, + default: 'bottom-right', + validator: function (v) { return [ + 'top-right', 'top-left', + 'bottom-right', 'bottom-left', + 'top', 'right', 'bottom', 'left' + ].includes(v); } + }, + offset: { + type: Array, + default: function () { return [18, 18]; }, + validator: function (v) { return v.length === 2; } + } + }, + + computed: { + classes: function classes () { + return ("absolute-" + (this.position)) + }, + + style: function style () { + return { + margin: ((this.offset[1]) + "px " + (this.offset[0]) + "px") + } + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-carousel__control absolute', + style: this.style, + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QChatMessage = Vue__default["default"].extend({ + name: 'QChatMessage', + + mixins: [ ListenersMixin ], + + props: { + sent: Boolean, + label: String, + bgColor: String, + textColor: String, + name: String, + avatar: String, + text: Array, + stamp: String, + size: String, + labelSanitize: Boolean, + nameSanitize: Boolean, + textSanitize: Boolean, + stampSanitize: Boolean + }, + + computed: { + textClass: function textClass () { + return "q-message-text-content q-message-text-content--" + (this.op) + + (this.textColor !== void 0 ? (" text-" + (this.textColor)) : '') + }, + + messageClass: function messageClass () { + return "q-message-text q-message-text--" + (this.op) + + (this.bgColor !== void 0 ? (" text-" + (this.bgColor)) : '') + }, + + containerClass: function containerClass () { + return 'q-message-container row items-end no-wrap' + + (this.sent === true ? ' reverse' : '') + }, + + sizeClass: function sizeClass () { + if (this.size !== void 0) { + return ("col-" + (this.size)) + } + }, + + op: function op () { + return this.sent === true ? 'sent' : 'received' + } + }, + + methods: { + __wrapStamp: function __wrapStamp (h, node) { + var obj; + + if (this.$scopedSlots.stamp !== void 0) { + return [ node, h('div', { staticClass: 'q-message-stamp' }, this.$scopedSlots.stamp()) ] + } + + if (this.stamp) { + var domPropStamp = this.stampSanitize === true ? 'textContent' : 'innerHTML'; + + return [ + node, + h('div', { + staticClass: 'q-message-stamp', + domProps: ( obj = {}, obj[domPropStamp] = this.stamp, obj ) + }) + ] + } + + return [ node ] + }, + + __getText: function __getText (h, contentList, withSlots) { + var this$1$1 = this; + + var domPropText = this.textSanitize === true ? 'textContent' : 'innerHTML'; + + if ( + withSlots === true && + contentList.some(function (entry) { return entry.tag === void 0 && entry.text !== void 0; }) === true + ) { + return [ + h('div', { class: this.messageClass }, [ + h('div', { class: this.textClass }, this.__wrapStamp(h, h('div', contentList))) + ]) + ] + } + + var content = withSlots !== true + ? function (text) { + var obj; + + return h('div', { domProps: ( obj = {}, obj[domPropText] = text, obj ) }); + } + : (contentList.length > 1 ? function (text) { return text; } : function (text) { return h('div', [text]); }); + + return contentList.map(function (msg, index) { return h('div', { + key: index, + class: this$1$1.messageClass + }, [ + h('div', { class: this$1$1.textClass }, this$1$1.__wrapStamp(h, content(msg))) + ]); }) + } + }, + + render: function render (h) { + var obj, obj$1; + + var container = []; + + if (this.$scopedSlots.avatar !== void 0) { + container.push(this.$scopedSlots.avatar()); + } + else if (this.avatar !== void 0) { + container.push( + h('img', { + class: ("q-message-avatar q-message-avatar--" + (this.op)), + attrs: { src: this.avatar, 'aria-hidden': 'true' } + }) + ); + } + + var msg = []; + + if (this.$scopedSlots.name !== void 0) { + msg.push( + h('div', { + class: ("q-message-name q-message-name--" + (this.op)) + }, this.$scopedSlots.name()) + ); + } + else if (this.name !== void 0) { + msg.push( + h('div', { + class: ("q-message-name q-message-name--" + (this.op)), + domProps: ( obj = {}, obj[this.nameSanitize === true ? 'textContent' : 'innerHTML'] = this.name, obj ) + }) + ); + } + + this.text !== void 0 && msg.push( + this.__getText(h, this.text) + ); + + this.$scopedSlots.default !== void 0 && msg.push( + this.__getText(h, this.$scopedSlots.default(), true) + ); + + container.push( + h('div', { class: this.sizeClass }, msg) + ); + + var child = []; + + if (this.$scopedSlots.label !== void 0) { + child.push( + h('div', { staticClass: 'q-message-label' }, this.$scopedSlots.label()) + ); + } + else if (this.label !== void 0) { + child.push( + h('div', { + staticClass: 'q-message-label', + domProps: ( obj$1 = {}, obj$1[this.labelSanitize === true ? 'textContent' : 'innerHTML'] = this.label, obj$1 ) + }) + ); + } + + child.push( + h('div', { class: this.containerClass }, container) + ); + + return h('div', { + class: ("q-message q-message-" + (this.op)), + on: Object.assign({}, this.qListeners) + }, child) + } + }); + + var OptionSizeMixin = getSizeMixin({ + xs: 30, + sm: 35, + md: 40, + lg: 50, + xl: 60 + }); + + var RefocusTargetMixin = { + computed: { + __refocusTargetEl: function __refocusTargetEl () { + if (this.disable !== true) { + return this.$createElement('span', { + ref: 'refocusTarget', + staticClass: 'no-outline', + attrs: { tabindex: -1 } + }) + } + } + }, + + methods: { + __refocusTarget: function __refocusTarget (e) { + if (this.$el.contains(document.activeElement) === true) { + var el = this.$q.interaction.isPointer === true + ? this.$refs.refocusTarget + : this.$el; + + el !== void 0 && document.activeElement !== el && el.focus(); + } + } + } + }; + + var CheckboxMixin = { + mixins: [ DarkMixin, OptionSizeMixin, FormMixin, RefocusTargetMixin ], + + props: { + value: { + required: true, + default: null + }, + val: {}, + + trueValue: { default: true }, + falseValue: { default: false }, + indeterminateValue: { default: null }, + + checkedIcon: String, + uncheckedIcon: String, + indeterminateIcon: String, + + toggleOrder: { + type: String, + validator: function (v) { return v === 'tf' || v === 'ft'; } + }, + toggleIndeterminate: Boolean, + + label: String, + leftLabel: Boolean, + + color: String, + keepColor: Boolean, + dense: Boolean, + + disable: Boolean, + tabindex: [String, Number] + }, + + computed: { + isTrue: function isTrue () { + return this.modelIsArray === true + ? this.index > -1 + : this.value === this.trueValue + }, + + isFalse: function isFalse () { + return this.modelIsArray === true + ? this.index === -1 + : this.value === this.falseValue + }, + + isIndeterminate: function isIndeterminate () { + return this.isTrue === false && this.isFalse === false + }, + + index: function index () { + if (this.modelIsArray === true) { + return this.value.indexOf(this.val) + } + }, + + modelIsArray: function modelIsArray () { + return this.val !== void 0 && Array.isArray(this.value) + }, + + computedTabindex: function computedTabindex () { + return this.disable === true ? -1 : this.tabindex || 0 + }, + + classes: function classes () { + return "q-" + (this.type) + " cursor-pointer no-outline row inline no-wrap items-center" + + (this.disable === true ? ' disabled' : '') + + " q-" + (this.type) + "--" + (this.darkSuffix) + + (this.dense === true ? (" q-" + (this.type) + "--dense") : '') + + (this.leftLabel === true ? ' reverse' : '') + }, + + innerClass: function innerClass () { + var state = this.isTrue === true ? 'truthy' : (this.isFalse === true ? 'falsy' : 'indet'); + var color = this.color !== void 0 && ( + this.keepColor === true || + (this.type === 'toggle' ? this.isTrue === true : this.isFalse !== true) + ) + ? (" text-" + (this.color)) + : ''; + + return ("q-" + (this.type) + "__inner--" + state + color) + }, + + formAttrs: function formAttrs () { + var prop = { type: 'checkbox' }; + + this.name !== void 0 && Object.assign(prop, { + checked: this.isTrue, + name: this.name, + value: this.modelIsArray === true + ? this.val + : this.trueValue + }); + + return prop + }, + + attrs: function attrs () { + var attrs = { + tabindex: this.computedTabindex, + role: this.type === 'toggle' ? 'switch' : 'checkbox', + 'aria-label': this.label, + 'aria-checked': this.isIndeterminate === true + ? 'mixed' + : (this.isTrue === true ? 'true' : 'false') + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + + return attrs + } + }, + + methods: { + toggle: function toggle (e) { + if (e !== void 0) { + stopAndPrevent(e); + this.__refocusTarget(e); + } + + if (this.disable !== true) { + this.$emit('input', this.__getNextValue(), e); + } + }, + + __getNextValue: function __getNextValue () { + if (this.modelIsArray === true) { + if (this.isTrue === true) { + var val = this.value.slice(); + val.splice(this.index, 1); + return val + } + + return this.value.concat([ this.val ]) + } + + if (this.isTrue === true) { + if (this.toggleOrder !== 'ft' || this.toggleIndeterminate === false) { + return this.falseValue + } + } + else if (this.isFalse === true) { + if (this.toggleOrder === 'ft' || this.toggleIndeterminate === false) { + return this.trueValue + } + } + else { + return this.toggleOrder !== 'ft' + ? this.trueValue + : this.falseValue + } + + return this.indeterminateValue + }, + + __onKeydown: function __onKeydown (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + stopAndPrevent(e); + } + }, + + __onKeyup: function __onKeyup (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + this.toggle(e); + } + } + }, + + render: function render (h) { + var inner = this.__getInner(h); + + this.disable !== true && this.__injectFormInput( + inner, + 'unshift', + ("q-" + (this.type) + "__native absolute q-ma-none q-pa-none") + ); + + var child = [ + h('div', { + staticClass: ("q-" + (this.type) + "__inner relative-position non-selectable"), + class: this.innerClass, + style: this.sizeStyle, + attrs: { 'aria-hidden': 'true' } + }, inner) + ]; + + if (this.__refocusTargetEl !== void 0) { + child.push(this.__refocusTargetEl); + } + + var label = this.label !== void 0 + ? mergeSlot([ this.label ], this, 'default') + : slot(this, 'default'); + + label !== void 0 && child.push( + h('div', { + staticClass: ("q-" + (this.type) + "__label q-anchor--skip") + }, label) + ); + + return h('div', { + key: 'inpExt', + class: this.classes, + attrs: this.attrs, + on: cache(this, 'inpExt', { + click: this.toggle, + keydown: this.__onKeydown, + keyup: this.__onKeyup + }) + }, child) + } + }; + + var QCheckbox = Vue__default["default"].extend({ + name: 'QCheckbox', + + mixins: [ CheckboxMixin ], + + computed: { + computedIcon: function computedIcon () { + return this.isTrue === true + ? this.checkedIcon + : (this.isIndeterminate === true + ? this.indeterminateIcon + : this.uncheckedIcon + ) + } + }, + + methods: { + __getInner: function __getInner (h) { + return this.computedIcon !== void 0 + ? [ + h('div', { + key: 'icon', + staticClass: 'q-checkbox__icon-container absolute-full flex flex-center no-wrap' + }, [ + h(QIcon, { + staticClass: 'q-checkbox__icon', + props: { name: this.computedIcon } + }) + ]) + ] + : [ + h('div', { + key: 'svg', + staticClass: 'q-checkbox__bg absolute' + }, [ + h('svg', { + staticClass: 'q-checkbox__svg fit absolute-full', + attrs: { focusable: 'false' /* needed for IE11 */, viewBox: '0 0 24 24' } + }, [ + h('path', { + staticClass: 'q-checkbox__truthy', + attrs: { + fill: 'none', + d: 'M1.73,12.91 8.1,19.28 22.79,4.59' + } + }), + + h('path', { + staticClass: 'q-checkbox__indet', + attrs: { + d: 'M4,14H20V10H4' + } + }) + ]) + ]) + ] + } + }, + + created: function created () { + this.type = 'checkbox'; + } + }); + + var QChip = Vue__default["default"].extend({ + name: 'QChip', + + mixins: [ + RippleMixin, + DarkMixin, + getSizeMixin({ + xs: 8, + sm: 10, + md: 14, + lg: 20, + xl: 24 + }) + ], + + model: { + event: 'remove' + }, + + props: { + dense: Boolean, + + icon: String, + iconRight: String, + iconRemove: String, + iconSelected: String, + label: [String, Number], + + color: String, + textColor: String, + + value: { + type: Boolean, + default: true + }, + selected: { + type: Boolean, + default: null + }, + + square: Boolean, + outline: Boolean, + clickable: Boolean, + removable: Boolean, + + removeAriaLabel: String, + + tabindex: [String, Number], + disable: Boolean + }, + + computed: { + classes: function classes () { + var obj; + + var text = this.outline === true + ? this.color || this.textColor + : this.textColor; + + return ( obj = {}, obj[("bg-" + (this.color))] = this.outline === false && this.color !== void 0, obj[("text-" + text + " q-chip--colored")] = text, obj.disabled = this.disable, obj['q-chip--dense'] = this.dense, obj['q-chip--outline'] = this.outline, obj['q-chip--selected'] = this.selected, obj['q-chip--clickable cursor-pointer non-selectable q-hoverable'] = this.isClickable, obj['q-chip--square'] = this.square, obj[("q-chip--" + (this.localDarkSuffix))] = true, obj ) + }, + + localDarkSuffix: function localDarkSuffix () { + if (typeof this.color === 'string' && this.color.trim().length > 0) { + return this.dark === true ? 'dark' : 'light' + } + + return this.darkSuffix + }, + + hasLeftIcon: function hasLeftIcon () { + return this.selected === true || this.icon !== void 0 + }, + + leftIcon: function leftIcon () { + return this.selected === true + ? this.iconSelected || this.$q.iconSet.chip.selected + : this.icon + }, + + removeIcon: function removeIcon () { + return this.iconRemove || this.$q.iconSet.chip.remove + }, + + isClickable: function isClickable () { + return this.disable === false && (this.clickable === true || this.selected !== null) + }, + + attrs: function attrs () { + var chip = this.disable === true + ? { tabindex: -1, 'aria-disabled': 'true' } + : { tabindex: this.tabindex || 0 }; + var remove = Object.assign({}, chip, + {role: 'button', + 'aria-hidden': 'false', + 'aria-label': this.removeAriaLabel || this.$q.lang.label.remove}); + + return { chip: chip, remove: remove } + } + }, + + methods: { + __onKeyup: function __onKeyup (e) { + e.keyCode === 13 /* ENTER */ && this.__onClick(e); + }, + + __onClick: function __onClick (e) { + if (!this.disable) { + this.$emit('update:selected', !this.selected); + this.$emit('click', e); + } + }, + + __onRemove: function __onRemove (e) { + if (e.keyCode === void 0 || e.keyCode === 13) { + stopAndPrevent(e); + !this.disable && this.$emit('remove', false); + } + }, + + __getContent: function __getContent (h) { + var child = []; + + this.isClickable === true && child.push( + h('div', { staticClass: 'q-focus-helper' }) + ); + + this.hasLeftIcon === true && child.push( + h(QIcon, { + staticClass: 'q-chip__icon q-chip__icon--left', + props: { name: this.leftIcon } + }) + ); + + var label = this.label !== void 0 + ? [ h('div', { staticClass: 'ellipsis' }, [ this.label ]) ] + : void 0; + + child.push( + h('div', { + staticClass: 'q-chip__content col row no-wrap items-center q-anchor--skip' + }, mergeSlotSafely(label, this, 'default')) + ); + + this.iconRight && child.push( + h(QIcon, { + staticClass: 'q-chip__icon q-chip__icon--right', + props: { name: this.iconRight } + }) + ); + + this.removable === true && child.push( + h(QIcon, { + key: 'non', + staticClass: 'q-chip__icon q-chip__icon--remove cursor-pointer', + props: { name: this.removeIcon }, + attrs: this.attrs.remove, + on: cache(this, 'non', { + click: this.__onRemove, + keyup: this.__onRemove + }) + }) + ); + + return child + } + }, + + render: function render (h) { + if (this.value === false) { return } + + var data = { + staticClass: 'q-chip row inline no-wrap items-center', + class: this.classes, + style: this.sizeStyle + }; + + this.isClickable === true && Object.assign(data, { + key: 'click', + attrs: this.attrs.chip, + on: cache(this, 'click', { + click: this.__onClick, + keyup: this.__onKeyup + }), + directives: cache(this, 'dir#' + this.ripple, [ + { name: 'ripple', value: this.ripple } + ]) + }); + + return h('div', data, this.__getContent(h)) + } + }); + + var + radius = 50, + diameter = 2 * radius, + circumference = diameter * Math.PI, + strokeDashArray = Math.round(circumference * 1000) / 1000; + + var QCircularProgress = Vue__default["default"].extend({ + name: 'QCircularProgress', + + mixins: [ ListenersMixin, SizeMixin ], + + props: { + value: { + type: Number, + default: 0 + }, + + min: { + type: Number, + default: 0 + }, + max: { + type: Number, + default: 100 + }, + + color: String, + centerColor: String, + trackColor: String, + + fontSize: String, + rounded: Boolean, + + // ratio + thickness: { + type: Number, + default: 0.2, + validator: function (v) { return v >= 0 && v <= 1; } + }, + + angle: { + type: Number, + default: 0 + }, + + indeterminate: Boolean, + showValue: Boolean, + reverse: Boolean, + + instantFeedback: Boolean + }, + + computed: { + normalizedValue: function normalizedValue () { + return between(this.value, this.min, this.max) + }, + + svgStyle: function svgStyle () { + var angle = this.$q.lang.rtl === true ? -this.angle : this.angle; + + return { + transform: this.reverse !== (this.$q.lang.rtl === true) + ? ("scale3d(-1, 1, 1) rotate3d(0, 0, 1, " + (-90 - angle) + "deg)") + : ("rotate3d(0, 0, 1, " + (angle - 90) + "deg)") + } + }, + + circleStyle: function circleStyle () { + if (this.instantFeedback !== true && this.indeterminate !== true) { + return { transition: 'stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease' } + } + }, + + viewBox: function viewBox () { + return diameter / (1 - this.thickness / 2) + }, + + viewBoxAttr: function viewBoxAttr () { + return ((this.viewBox / 2) + " " + (this.viewBox / 2) + " " + (this.viewBox) + " " + (this.viewBox)) + }, + + strokeDashOffset: function strokeDashOffset () { + var progress = 1 - (this.normalizedValue - this.min) / (this.max - this.min); + return progress * circumference + }, + + strokeWidth: function strokeWidth () { + return this.thickness / 2 * this.viewBox + }, + + attrs: function attrs () { + return { + role: 'progressbar', + 'aria-valuemin': this.min, + 'aria-valuemax': this.max, + 'aria-valuenow': this.indeterminate === true ? void 0 : this.normalizedValue + } + } + }, + + methods: { + __getCircle: function __getCircle (h, ref) { + var thickness = ref.thickness; + var offset = ref.offset; + var color = ref.color; + var cls = ref.cls; + var rounded = ref.rounded; + + return h('circle', { + staticClass: 'q-circular-progress__' + cls, + class: color !== void 0 ? ("text-" + color) : null, + style: this.circleStyle, + attrs: { + fill: 'transparent', + stroke: 'currentColor', + 'stroke-width': thickness, + 'stroke-dasharray': strokeDashArray, + 'stroke-dashoffset': offset, + 'stroke-linecap': rounded, + cx: this.viewBox, + cy: this.viewBox, + r: radius + } + }) + } + }, + + render: function render (h) { + var svgChild = []; + + this.centerColor !== void 0 && this.centerColor !== 'transparent' && svgChild.push( + h('circle', { + staticClass: 'q-circular-progress__center', + class: ("text-" + (this.centerColor)), + attrs: { + fill: 'currentColor', + r: radius - this.strokeWidth / 2, + cx: this.viewBox, + cy: this.viewBox + } + }) + ); + + this.trackColor !== void 0 && this.trackColor !== 'transparent' && svgChild.push( + this.__getCircle(h, { + cls: 'track', + thickness: this.strokeWidth, + offset: 0, + color: this.trackColor + }) + ); + + svgChild.push( + this.__getCircle(h, { + cls: 'circle', + thickness: this.strokeWidth, + offset: this.strokeDashOffset, + color: this.color, + rounded: this.rounded === true ? 'round' : void 0 + }) + ); + + var child = [ + h('svg', { + staticClass: 'q-circular-progress__svg', + style: this.svgStyle, + attrs: { + focusable: 'false' /* needed for IE11 */, + viewBox: this.viewBoxAttr, + 'aria-hidden': 'true' + } + }, svgChild) + ]; + + this.showValue === true && child.push( + h('div', { + staticClass: 'q-circular-progress__text absolute-full row flex-center content-center', + style: { fontSize: this.fontSize } + }, this.$scopedSlots.default !== void 0 ? this.$scopedSlots.default() : [ h('div', [ this.normalizedValue ]) ]) + ); + + return h('div', { + staticClass: 'q-circular-progress', + class: ("q-circular-progress--" + (this.indeterminate === true ? 'in' : '') + "determinate"), + style: this.sizeStyle, + on: Object.assign({}, this.qListeners), + attrs: this.attrs + }, mergeSlotSafely(child, this, 'internal')) + } + }); + + // file referenced from docs + + var + hex = /^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/, + hexa = /^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/, + hexOrHexa = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/, + rgb = /^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])\)$/, + rgba = /^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)\)$/; + + var testPattern = { + date: function (v) { return /^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(v); }, + time: function (v) { return /^([0-1]?\d|2[0-3]):[0-5]\d$/.test(v); }, + fulltime: function (v) { return /^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(v); }, + timeOrFulltime: function (v) { return /^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(v); }, + + // -- RFC 5322 -- + // -- Added in v1.18.10 -- + // This is a basic helper validation. + // For something more complex (like RFC 822) you should write and use your own rule. + // We won't be accepting PRs to enhance the one below because of the reason above. + email: function (v) { return /^(([^<>()[\]\\.,;:\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(v); }, + + hexColor: function (v) { return hex.test(v); }, + hexaColor: function (v) { return hexa.test(v); }, + hexOrHexaColor: function (v) { return hexOrHexa.test(v); }, + + rgbColor: function (v) { return rgb.test(v); }, + rgbaColor: function (v) { return rgba.test(v); }, + rgbOrRgbaColor: function (v) { return rgb.test(v) || rgba.test(v); }, + + hexOrRgbColor: function (v) { return hex.test(v) || rgb.test(v); }, + hexaOrRgbaColor: function (v) { return hexa.test(v) || rgba.test(v); }, + anyColor: function (v) { return hexOrHexa.test(v) || rgb.test(v) || rgba.test(v); } + }; + + var patterns = { + testPattern: testPattern + }; + + function throttle (fn, limit) { + if ( limit === void 0 ) limit = 250; + + var wait = false, result; + + return function (/* ...args */) { + if (wait === false) { + wait = true; + setTimeout(function () { wait = false; }, limit); + result = fn.apply(this, arguments); + } + + return result + } + } + + function getChanges (evt, ctx, isFinal) { + var pos = position(evt); + var + dir, + distX = pos.left - ctx.event.x, + distY = pos.top - ctx.event.y, + absX = Math.abs(distX), + absY = Math.abs(distY); + + var direction = ctx.direction; + + if (direction.horizontal === true && direction.vertical !== true) { + dir = distX < 0 ? 'left' : 'right'; + } + else if (direction.horizontal !== true && direction.vertical === true) { + dir = distY < 0 ? 'up' : 'down'; + } + else if (direction.up === true && distY < 0) { + dir = 'up'; + if (absX > absY) { + if (direction.left === true && distX < 0) { + dir = 'left'; + } + else if (direction.right === true && distX > 0) { + dir = 'right'; + } + } + } + else if (direction.down === true && distY > 0) { + dir = 'down'; + if (absX > absY) { + if (direction.left === true && distX < 0) { + dir = 'left'; + } + else if (direction.right === true && distX > 0) { + dir = 'right'; + } + } + } + else if (direction.left === true && distX < 0) { + dir = 'left'; + if (absX < absY) { + if (direction.up === true && distY < 0) { + dir = 'up'; + } + else if (direction.down === true && distY > 0) { + dir = 'down'; + } + } + } + else if (direction.right === true && distX > 0) { + dir = 'right'; + if (absX < absY) { + if (direction.up === true && distY < 0) { + dir = 'up'; + } + else if (direction.down === true && distY > 0) { + dir = 'down'; + } + } + } + + var synthetic = false; + + if (dir === void 0 && isFinal === false) { + if (ctx.event.isFirst === true || ctx.event.lastDir === void 0) { + return {} + } + + dir = ctx.event.lastDir; + synthetic = true; + + if (dir === 'left' || dir === 'right') { + pos.left -= distX; + absX = 0; + distX = 0; + } + else { + pos.top -= distY; + absY = 0; + distY = 0; + } + } + + return { + synthetic: synthetic, + payload: { + evt: evt, + touch: ctx.event.mouse !== true, + mouse: ctx.event.mouse === true, + position: pos, + direction: dir, + isFirst: ctx.event.isFirst, + isFinal: isFinal === true, + duration: Date.now() - ctx.event.time, + distance: { + x: absX, + y: absY + }, + offset: { + x: distX, + y: distY + }, + delta: { + x: pos.left - ctx.event.lastX, + y: pos.top - ctx.event.lastY + } + } + } + } + + function destroy$9 (el) { + var ctx = el.__qtouchpan; + if (ctx !== void 0) { + // emit the end event when the directive is destroyed while active + // this is only needed in TouchPan because the rest of the touch directives do not emit an end event + // the condition is also checked in the start of function but we avoid the call + ctx.event !== void 0 && ctx.end(); + + cleanEvt(ctx, 'main_mouse'); + cleanEvt(ctx, 'main_touch'); + cleanEvt(ctx, 'temp'); + + client.is.firefox === true && preventDraggable(el, false); + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + delete el.__qtouchpan; + } + } + + function configureEvents$3 (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse'); + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', ("passive" + (modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : '')) ] + ]); + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch'); + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', ("passive" + (modifiers.capture === true ? 'Capture' : '')) ], + [ el, 'touchmove', 'noop', 'notPassiveCapture' ] // cannot be passive (ex: iOS scroll) + ]); + } + + ctx.modifiers = modifiers; + } + + function handleEvent (ctx, evt, mouseEvent) { + if (ctx.modifiers.mouse === true && mouseEvent === true) { + stopAndPrevent(evt); + } + else { + ctx.modifiers.stop === true && stop(evt); + ctx.modifiers.prevent === true && prevent(evt); + } + } + + var uid$2 = 0; + + var TouchPan = { + name: 'touch-pan', + + bind: function bind (el, ref) { + var modifiers = ref.modifiers; + var value = ref.value; + + if (el.__qtouchpan !== void 0) { + destroy$9(el); + el.__qtouchpan_destroyed = true; + } + + var ctx = { + uid: 'qvtp_' + (uid$2++), + handler: value, + modifiers: { capture: null }, // make sure touch listeners are initiated + direction: getModifierDirections(modifiers), + + noop: noop, + + mouseStart: function mouseStart (evt) { + if (shouldStart(evt, ctx) && leftClick(evt)) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', 'notPassiveCapture' ], + [ document, 'mouseup', 'end', 'passiveCapture' ] + ]); + + ctx.start(evt, true); + } + }, + + touchStart: function touchStart (evt) { + if (shouldStart(evt, ctx)) { + var target = evt.target; + + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'notPassiveCapture' ], + [ target, 'touchcancel', 'end', 'passiveCapture' ], + [ target, 'touchend', 'end', 'passiveCapture' ] + ]); + + ctx.start(evt); + } + }, + + start: function start (evt, mouseEvent) { + client.is.firefox === true && preventDraggable(el, true); + ctx.lastEvt = evt; + + /* + * Stop propagation so possible upper v-touch-pan don't catch this as well; + * If we're not the target (based on modifiers), we'll re-emit the event later + */ + if (mouseEvent === true || ctx.modifiers.stop === true) { + /* + * are we directly switching to detected state? + * clone event only otherwise + */ + if ( + ctx.direction.all !== true && + (mouseEvent !== true || (ctx.modifiers.mouseAllDir !== true && ctx.modifiers.mousealldir !== true)) + ) { + var clone = evt.type.indexOf('mouse') > -1 + ? new MouseEvent(evt.type, evt) + : new TouchEvent(evt.type, evt); + + evt.defaultPrevented === true && prevent(clone); + evt.cancelBubble === true && stop(clone); + + Object.assign(clone, { + qClickOutside: evt.qClickOutside, + qAnchorHandled: evt.qAnchorHandled, + qClonedBy: evt.qClonedBy === void 0 + ? [ ctx.uid ] + : evt.qClonedBy.concat(ctx.uid) + }); + + ctx.initialEvent = { + target: evt.target, + event: clone + }; + } + + stop(evt); + } + + var ref = position(evt); + var left = ref.left; + var top = ref.top; + + ctx.event = { + x: left, + y: top, + time: Date.now(), + mouse: mouseEvent === true, + detected: false, + isFirst: true, + isFinal: false, + lastX: left, + lastY: top + }; + }, + + move: function move (evt) { + if (ctx.event === void 0) { + return + } + + ctx.lastEvt = evt; + + var isMouseEvt = ctx.event.mouse === true; + var start = function () { + handleEvent(ctx, evt, isMouseEvt); + + var cursor; + if (ctx.modifiers.preserveCursor !== true && ctx.modifiers.preservecursor !== true) { + cursor = document.documentElement.style.cursor || ''; + document.documentElement.style.cursor = 'grabbing'; + } + isMouseEvt === true && document.body.classList.add('no-pointer-events--children'); + document.body.classList.add('non-selectable'); + clearSelection(); + + ctx.styleCleanup = function (withDelayedFn) { + ctx.styleCleanup = void 0; + + if (cursor !== void 0) { + document.documentElement.style.cursor = cursor; + } + document.body.classList.remove('non-selectable'); + + if (isMouseEvt === true) { + var remove = function () { + document.body.classList.remove('no-pointer-events--children'); + }; + + if (withDelayedFn !== void 0) { + setTimeout(function () { + remove(); + withDelayedFn(); + }, 50); + } + else { remove(); } + } + else if (withDelayedFn !== void 0) { + withDelayedFn(); + } + }; + }; + + if (ctx.event.detected === true) { + ctx.event.isFirst !== true && handleEvent(ctx, evt, ctx.event.mouse); + + var ref = getChanges(evt, ctx, false); + var payload = ref.payload; + var synthetic = ref.synthetic; + + if (payload !== void 0) { + if (ctx.handler(payload) === false) { + ctx.end(evt); + } + else { + if (ctx.styleCleanup === void 0 && ctx.event.isFirst === true) { + start(); + } + + ctx.event.lastX = payload.position.left; + ctx.event.lastY = payload.position.top; + ctx.event.lastDir = synthetic === true ? void 0 : payload.direction; + ctx.event.isFirst = false; + } + } + + return + } + + if ( + ctx.direction.all === true || + (isMouseEvt === true && (ctx.modifiers.mouseAllDir === true || ctx.modifiers.mousealldir === true)) + ) { + start(); + ctx.event.detected = true; + ctx.move(evt); + return + } + + var + pos = position(evt), + distX = pos.left - ctx.event.x, + distY = pos.top - ctx.event.y, + absX = Math.abs(distX), + absY = Math.abs(distY); + + if (absX !== absY) { + if ( + (ctx.direction.horizontal === true && absX > absY) || + (ctx.direction.vertical === true && absX < absY) || + (ctx.direction.up === true && absX < absY && distY < 0) || + (ctx.direction.down === true && absX < absY && distY > 0) || + (ctx.direction.left === true && absX > absY && distX < 0) || + (ctx.direction.right === true && absX > absY && distX > 0) + ) { + ctx.event.detected = true; + ctx.move(evt); + } + else { + ctx.end(evt, true); + } + } + }, + + end: function end (evt, abort) { + if (ctx.event === void 0) { + return + } + + cleanEvt(ctx, 'temp'); + client.is.firefox === true && preventDraggable(el, false); + + if (abort === true) { + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + if (ctx.event.detected !== true && ctx.initialEvent !== void 0) { + ctx.initialEvent.target.dispatchEvent(ctx.initialEvent.event); + } + } + else if (ctx.event.detected === true) { + ctx.event.isFirst === true && ctx.handler(getChanges(evt === void 0 ? ctx.lastEvt : evt, ctx).payload); + + var ref = getChanges(evt === void 0 ? ctx.lastEvt : evt, ctx, true); + var payload = ref.payload; + var fn = function () { ctx.handler(payload); }; + + if (ctx.styleCleanup !== void 0) { + ctx.styleCleanup(fn); + } + else { + fn(); + } + } + + ctx.event = void 0; + ctx.initialEvent = void 0; + ctx.lastEvt = void 0; + } + }; + + el.__qtouchpan = ctx; + + configureEvents$3(el, ctx, modifiers); + }, + + update: function update (el, ref) { + var modifiers = ref.modifiers; + var value = ref.value; + var oldValue = ref.oldValue; + + var ctx = el.__qtouchpan; + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end(); + ctx.handler = value; + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents$3(el, ctx, modifiers); + + ctx.direction = getModifierDirections(modifiers); + } + } + }, + + unbind: function unbind (el) { + if (el.__qtouchpan_destroyed === void 0) { + destroy$9(el); + } + else { + delete el.__qtouchpan_destroyed; + } + } + }; + + var markerPrefixClass = 'q-slider__marker-labels'; + var defaultMarkerConvertFn = function (v) { return ({ value: v }); }; + + // PGDOWN, LEFT, DOWN, PGUP, RIGHT, UP + var keyCodes$3 = [ 34, 37, 40, 33, 39, 38 ]; + + var SliderMixin = { + mixins: [ DarkMixin, FormMixin ], + + directives: { + TouchPan: TouchPan + }, + + props: { + min: { + type: Number, + default: 0 + }, + max: { + type: Number, + default: 100 + }, + innerMin: Number, + innerMax: Number, + + step: { + type: Number, + default: 1, + validator: function (v) { return v >= 0; } + }, + + snap: Boolean, + + vertical: Boolean, + reverse: Boolean, + + hideSelection: Boolean, + + color: String, + markerLabelsClass: String, + + label: Boolean, + labelColor: String, + labelTextColor: String, + labelAlways: Boolean, + switchLabelSide: Boolean, + + markers: [ Boolean, Number ], + markerLabels: [ Boolean, Array, Object, Function ], + switchMarkerLabelsSide: Boolean, + + trackImg: String, + trackColor: String, + innerTrackImg: String, + innerTrackColor: String, + selectionColor: String, + selectionImg: String, + + thumbSize: { + type: String, + default: '20px' + }, + trackSize: { + type: String, + default: '4px' + }, + + disable: Boolean, + readonly: Boolean, + dense: Boolean, + + tabindex: [ String, Number ], + + thumbColor: String, + thumbPath: { + type: String, + default: 'M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0' + } + }, + + data: function data () { + return { + active: false, + preventFocus: false, + focus: false, + dragging: void 0 + } + }, + + computed: { + axis: function axis () { + return this.vertical === true ? '--v' : '--h' + }, + + labelSide: function labelSide () { + return '-' + (this.switchLabelSide === true ? 'switched' : 'standard') + }, + + isReversed: function isReversed () { + return this.vertical === true + ? this.reverse === true + : this.reverse !== (this.$q.lang.rtl === true) + }, + + computedInnerMin: function computedInnerMin () { + return this.__getInnerMin() + }, + + computedInnerMax: function computedInnerMax () { + return this.__getInnerMax() + }, + + editable: function editable () { + return this.disable !== true && this.readonly !== true && + this.computedInnerMin <= this.computedInnerMax + }, + + computedDecimals: function computedDecimals () { + return (String(this.step).trim('0').split('.')[ 1 ] || '').length + }, + + computedStep: function computedStep () { + return this.step === 0 ? 1 : this.step + }, + + computedTabindex: function computedTabindex () { + return this.editable === true ? this.tabindex || 0 : -1 + }, + + trackLen: function trackLen () { + return this.max - this.min + }, + + innerBarLen: function innerBarLen () { + return this.computedInnerMax - this.computedInnerMin + }, + + innerMinRatio: function innerMinRatio () { + return this.__convertModelToRatio(this.computedInnerMin) + }, + + innerMaxRatio: function innerMaxRatio () { + return this.__convertModelToRatio(this.computedInnerMax) + }, + + positionProp: function positionProp () { + return this.vertical === true + ? (this.isReversed === true ? 'bottom' : 'top') + : (this.isReversed === true ? 'right' : 'left') + }, + + sizeProp: function sizeProp () { + return this.vertical === true ? 'height' : 'width' + }, + + thicknessProp: function thicknessProp () { + return this.vertical === true ? 'width' : 'height' + }, + + orientation: function orientation () { + return this.vertical === true ? 'vertical' : 'horizontal' + }, + + attributes: function attributes () { + var acc = { + role: 'slider', + 'aria-valuemin': this.computedInnerMin, + 'aria-valuemax': this.computedInnerMax, + 'aria-orientation': this.orientation, + 'data-step': this.step + }; + + if (this.disable === true) { + acc[ 'aria-disabled' ] = 'true'; + } + else if (this.readonly === true) { + acc[ 'aria-readonly' ] = 'true'; + } + + return acc + }, + + classes: function classes () { + return "q-slider q-slider" + (this.axis) + " q-slider--" + (this.active === true ? '' : 'in') + "active inline no-wrap " + + (this.vertical === true ? 'row' : 'column') + + (this.disable === true ? ' disabled' : ' q-slider--enabled' + (this.editable === true ? ' q-slider--editable' : '')) + + (this.focus === 'both' ? ' q-slider--focus' : '') + + (this.label || this.labelAlways === true ? ' q-slider--label' : '') + + (this.labelAlways === true ? ' q-slider--label-always' : '') + + " q-slider--" + (this.darkSuffix) + + (this.dense === true ? ' q-slider--dense q-slider--dense' + this.axis : '') + + ' q-key-group-navigation--ignore-key' + }, + + selectionBarClass: function selectionBarClass () { + var color = this.selectionColor || this.color; + return 'q-slider__selection absolute' + + (color !== void 0 ? (" text-" + color) : '') + }, + + markerClass: function markerClass () { + return this.__getAxisClass('markers') + ' absolute overflow-hidden' + }, + trackContainerClass: function trackContainerClass () { + return this.__getAxisClass('track-container') + }, + pinClass: function pinClass () { + return this.__getPositionClass('pin') + }, + labelClass: function labelClass () { + return this.__getPositionClass('label') + }, + textContainerClass: function textContainerClass () { + return this.__getPositionClass('text-container') + }, + markerLabelsContainerClass: function markerLabelsContainerClass () { + return this.__getPositionClass('marker-labels-container') + + (this.markerLabelsClass !== void 0 ? (" " + (this.markerLabelsClass)) : '') + }, + + trackClass: function trackClass () { + return 'q-slider__track relative-position no-outline' + + (this.trackColor !== void 0 ? (" bg-" + (this.trackColor)) : '') + }, + trackStyle: function trackStyle () { + var acc = {}; + acc[ this.thicknessProp ] = this.trackSize; + if (this.trackImg !== void 0) { + acc.backgroundImage = "url(" + (this.trackImg) + ") !important"; + } + return acc + }, + + innerBarClass: function innerBarClass () { + return 'q-slider__inner absolute' + + (this.innerTrackColor !== void 0 ? (" bg-" + (this.innerTrackColor)) : '') + }, + + innerBarStyle: function innerBarStyle () { + var acc = {}; + acc[ this.positionProp ] = ((100 * this.innerMinRatio) + "%"); + acc[ this.sizeProp ] = ((100 * (this.innerMaxRatio - this.innerMinRatio)) + "%"); + if (this.innerTrackImg !== void 0) { + acc.backgroundImage = "url(" + (this.innerTrackImg) + ") !important"; + } + return acc + }, + + markerStep: function markerStep () { + return isNumber(this.markers) === true ? this.markers : this.computedStep + }, + + markerTicks: function markerTicks () { + var acc = []; + var step = this.markerStep; + + var value = this.min; + do { + acc.push(value); + value += step; + } while (value < this.max) + + acc.push(this.max); + return acc + }, + + markerLabelClass: function markerLabelClass () { + var prefix = " " + markerPrefixClass + (this.axis) + "-"; + return markerPrefixClass + + "" + prefix + (this.switchMarkerLabelsSide === true ? 'switched' : 'standard') + + "" + prefix + (this.isReversed === true ? 'rtl' : 'ltr') + }, + + markerLabelsList: function markerLabelsList () { + var this$1$1 = this; + + if (this.markerLabels === false) { return null } + + return this.__getMarkerList(this.markerLabels).map(function (entry, index) { return ({ + index: index, + value: entry.value, + label: entry.label || entry.value, + classes: this$1$1.markerLabelClass + + (entry.classes !== void 0 ? ' ' + entry.classes : ''), + style: Object.assign({}, this$1$1.__getMarkerLabelStyle(entry.value), + (entry.style || {})) + }); }) + }, + + markerScope: function markerScope () { + return { + markerList: this.markerLabelsList, + markerMap: this.markerLabelsMap, + classes: this.markerLabelClass, + getStyle: this.__getMarkerLabelStyle + } + }, + + markerStyle: function markerStyle () { + if (this.innerBarLen !== 0) { + var size = 100 * this.markerStep / this.innerBarLen; + + return Object.assign({}, this.innerBarStyle, + {backgroundSize: this.vertical === true + ? ("2px " + size + "%") + : (size + "% 2px")}) + } + + return null + }, + + markerLabelsMap: function markerLabelsMap () { + if (this.markerLabels === false) { return null } + + var acc = {}; + this.markerLabelsList.forEach(function (entry) { + acc[ entry.value ] = entry; + }); + return acc + }, + + panDirectives: function panDirectives () { + var obj; + + return this.editable === true + ? [{ + name: 'touch-pan', + value: this.__onPan, + modifiers: ( obj = {}, obj[ this.orientation ] = true, obj.prevent = true, obj.stop = true, obj.mouse = true, obj.mouseAllDir = true, obj ) + }] + : null + }, + + getKeyOffset: function getKeyOffset () { + var bigStepKeyCodes = [ 33, 34 ]; + var computedStep = this.vertical === true && this.reverse === true + ? -this.computedStep + : this.computedStep; + var negativeKeyCodes = this.vertical === true + ? [ 33, 38, this.$q.lang.rtl === this.reverse ? 37 : 39 ] + : [ 34, 40, this.$q.lang.rtl === this.reverse ? 37 : 39 ]; + + return function (keyCode) { return ( + computedStep * + (bigStepKeyCodes.includes(keyCode) ? 10 : 1) * + (negativeKeyCodes.includes(keyCode) ? -1 : 1) + ); } + } + }, + + methods: { + __getInnerMin: function __getInnerMin () { + return isNaN(this.innerMin) === true || this.innerMin < this.min + ? this.min + : this.innerMin + }, + + __getInnerMax: function __getInnerMax () { + return isNaN(this.innerMax) === true || this.innerMax > this.max + ? this.max + : this.innerMax + }, + + __getPositionClass: function __getPositionClass (name) { + var cls = 'q-slider__' + name; + return (cls + " " + cls + (this.axis) + " " + cls + (this.axis) + (this.labelSide)) + }, + + __getAxisClass: function __getAxisClass (name) { + var cls = 'q-slider__' + name; + return (cls + " " + cls + (this.axis)) + }, + + __convertRatioToModel: function __convertRatioToModel (ratio) { + var model = this.min + ratio * (this.max - this.min); + + if (this.step > 0) { + var modulo = (model - this.min) % this.step; + model += (Math.abs(modulo) >= this.step / 2 ? (modulo < 0 ? -1 : 1) * this.step : 0) - modulo; + } + + if (this.computedDecimals > 0) { + model = parseFloat(model.toFixed(this.computedDecimals)); + } + + return between(model, this.computedInnerMin, this.computedInnerMax) + }, + + __convertModelToRatio: function __convertModelToRatio (model) { + return this.trackLen === 0 + ? 0 + : between((model - this.min) / this.trackLen, 0, 1) + }, + + __getDraggingRatio: function __getDraggingRatio (evt, dragging) { + var + pos = position(evt), + val = this.vertical === true + ? between((pos.top - dragging.top) / dragging.height, 0, 1) + : between((pos.left - dragging.left) / dragging.width, 0, 1); + + return between( + this.isReversed === true ? 1.0 - val : val, + this.innerMinRatio, + this.innerMaxRatio + ) + }, + + __getMarkerList: function __getMarkerList (def) { + var this$1$1 = this; + + if (def === false) { return null } + + if (def === true) { + return this.markerTicks.map(defaultMarkerConvertFn) + } + + if (typeof def === 'function') { + return this.markerTicks.map(function (value) { + var item = def(value); + return isObject(item) === true ? Object.assign({}, item, {value: value}) : { value: value, label: item } + }) + } + + var filterFn = function (ref) { + var value = ref.value; + + return value >= this$1$1.min && value <= this$1$1.max; + }; + + if (Array.isArray(def) === true) { + return def + .map(function (item) { return (isObject(item) === true ? item : { value: item }); }) + .filter(filterFn) + } + + return Object.keys(def).map(function (key) { + var item = def[ key ]; + var value = Number(key); + return isObject(item) === true ? Object.assign({}, item, {value: value}) : { value: value, label: item } + }).filter(filterFn) + }, + + __getMarkerLabelStyle: function __getMarkerLabelStyle (val) { + var obj; + + return ( obj = {}, obj[ this.positionProp ] = ((100 * (val - this.min) / this.trackLen) + "%"), obj ) + }, + + __getMarkerLabelsContent: function __getMarkerLabelsContent (h) { + var this$1$1 = this; + + if (this.$scopedSlots[ 'marker-label-group' ] !== void 0) { + return this.$scopedSlots[ 'marker-label-group' ](this.markerScope) + } + + var fn = this.$scopedSlots[ 'marker-label' ]; + if (fn !== void 0) { + return this.markerLabelsList.map(function (marker) { return fn(Object.assign({}, {marker: marker}, + this$1$1.markerScope)); }) + } + + return this.markerLabelsList.map(function (marker) { return h('div', { + key: marker.value, + style: marker.style, + class: marker.classes + }, marker.label); }) + }, + + __onPan: function __onPan (event) { + if (event.isFinal === true) { + if (this.dragging !== void 0) { + this.__updatePosition(event.evt); + // only if touch, because we also have mousedown/up: + event.touch === true && this.__updateValue(true); + this.dragging = void 0; + this.$emit('pan', 'end'); + } + this.active = false; + this.focus = false; + } + else if (event.isFirst === true) { + this.dragging = this.__getDragging(event.evt); + this.__updatePosition(event.evt); + this.__updateValue(); + this.active = true; + this.$emit('pan', 'start'); + } + else { + this.__updatePosition(event.evt); + this.__updateValue(); + } + }, + + __onBlur: function __onBlur () { + this.focus = false; + }, + + __onActivate: function __onActivate (evt) { + this.__updatePosition(evt, this.__getDragging(evt)); + this.__updateValue(); + + this.preventFocus = true; + this.active = true; + + document.addEventListener('mouseup', this.__onDeactivate, true); + }, + + __onDeactivate: function __onDeactivate () { + this.preventFocus = false; + this.active = false; + + this.__updateValue(true); + this.__onBlur(); + + document.removeEventListener('mouseup', this.__onDeactivate, true); + }, + + __onMobileClick: function __onMobileClick (evt) { + this.__updatePosition(evt, this.__getDragging(evt)); + this.__updateValue(true); + }, + + __onKeyup: function __onKeyup (evt) { + if (keyCodes$3.includes(evt.keyCode)) { + this.__updateValue(true); + } + }, + + __getTextContainerStyle: function __getTextContainerStyle (ratio) { + if (this.vertical === true) { return null } + + var p = this.$q.lang.rtl !== this.reverse ? 1 - ratio : ratio; + return { + transform: ("translateX(calc(" + (2 * p - 1) + " * " + (this.thumbSize) + " / 2 + " + (50 - 100 * p) + "%))") + } + }, + + __getThumb: function __getThumb (h, thumb) { + var thumbContent = [ + h('svg', { + class: 'q-slider__thumb-shape absolute-full', + attrs: { + viewBox: '0 0 20 20', + 'aria-hidden': 'true' + } + }, [ + h('path', { + attrs: { d: this.thumbPath } + }) + ]), + + h('div', { class: 'q-slider__focus-ring fit' }) + ]; + + if (this.label === true || this.labelAlways === true) { + thumbContent.push( + h('div', { + class: this.pinClass + ' absolute fit no-pointer-events' + thumb.pinColor + }, [ + h('div', { + class: this.labelClass, + style: { minWidth: this.thumbSize } + }, [ + h('div', { + class: this.textContainerClass, + style: thumb.textContainerStyle + }, [ + h('span', { class: thumb.textClass }, thumb.label) + ]) + ]) + ]) + ); + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(thumbContent, 'push'); + } + } + + return h('div', Object.assign({}, {class: thumb.classes, + style: thumb.style}, + thumb.nodeData), thumbContent) + }, + + __getContent: function __getContent (h, injectThumb) { + var trackContent = []; + + this.innerTrackColor !== 'transparent' && trackContent.push( + h('div', { + key: 'inner', + class: this.innerBarClass, + style: this.innerBarStyle + }) + ); + + this.selectionColor !== 'transparent' && trackContent.push( + h('div', { + key: 'selection', + class: this.selectionBarClass, + style: this.selectionBarStyle + }) + ); + + this.markers !== false && trackContent.push( + h('div', { + key: 'marker', + class: this.markerClass, + style: this.markerStyle + }) + ); + + injectThumb(trackContent); + + var content = [ + h( + 'div', + { + key: 'trackC', + class: this.trackContainerClass, + attrs: this.trackContainerAttrs, + on: this.trackContainerEvents, + directives: this.panDirectives + }, + [ + h('div', { + class: this.trackClass, + style: this.trackStyle + }, trackContent) + ] + ) + ]; + + if (this.markerLabels !== false) { + var action = this.switchMarkerLabelsSide === true + ? 'unshift' + : 'push'; + + content[ action ]( + h('div', { + key: 'markerL', + class: this.markerLabelsContainerClass + }, this.__getMarkerLabelsContent(h)) + ); + } + + return content + } + }, + + beforeDestroy: function beforeDestroy () { + document.removeEventListener('mouseup', this.__onDeactivate, true); + } + }; + + var QSlider = Vue__default["default"].extend({ + name: 'QSlider', + + mixins: [ SliderMixin ], + + props: { + value: { + required: true, + default: null, + validator: function (v) { return typeof v === 'number' || v === null; } + }, + + labelValue: [ String, Number ] + }, + + data: function data () { + return { + model: this.value === null ? this.__getInnerMin() : between(this.value, this.min, this.max), + curRatio: 0 + } + }, + + computed: { + modelRatio: function modelRatio () { + return this.__convertModelToRatio(this.model) + }, + + ratio: function ratio () { + return this.active === true ? this.curRatio : this.modelRatio + }, + + selectionBarStyle: function selectionBarStyle () { + var minRatio = this.innerMinRatio; + var acc = {}; + acc[ this.positionProp ] = ((100 * minRatio) + "%"); + acc[ this.sizeProp ] = ((100 * (between(this.ratio, minRatio, this.innerMaxRatio) - minRatio)) + "%"); + if (this.selectionImg !== void 0) { + acc.backgroundImage = "url(" + (this.selectionImg) + ") !important"; + } + return acc + }, + + thumbLabel: function thumbLabel () { + return this.labelValue !== void 0 + ? this.labelValue + : (this.value < this.min || this.value > this.max ? this.value : this.model) + }, + + thumbClasses: function thumbClasses () { + var color = this.thumbColor || this.color; + return "q-slider__thumb q-slider__thumb" + (this.axis) + " q-slider__thumb" + (this.axis) + "-" + (this.isReversed === true ? 'rtl' : 'ltr') + " absolute non-selectable" + + (this.value < this.min || this.value > this.max ? ' q-slider__thumb--wrong-value' : '') + + ( + this.preventFocus === false && this.focus === true + ? ' q-slider--focus' + : '' + ) + + (color !== void 0 ? (" text-" + color) : '') + }, + + thumbStyle: function thumbStyle () { + var obj; + + return ( obj = { + width: this.thumbSize, + height: this.thumbSize + }, obj[ this.positionProp ] = ((100 * this.ratio) + "%"), obj ) + }, + + thumbPinColor: function thumbPinColor () { + return this.labelColor !== void 0 + ? (" text-" + (this.labelColor)) + : '' + }, + + thumbTextContainerStyle: function thumbTextContainerStyle () { + return this.__getTextContainerStyle(this.ratio) + }, + + thumbTextClass: function thumbTextClass () { + return 'q-slider__text' + + (this.labelTextColor !== void 0 ? (" text-" + (this.labelTextColor)) : '') + }, + + trackContainerAttrs: function trackContainerAttrs () { + return this.$q.platform.is.mobile !== true + ? { tabindex: this.computedTabindex } + : void 0 + }, + + trackContainerEvents: function trackContainerEvents () { + if (this.editable !== true) { + return {} + } + + return this.$q.platform.is.mobile === true + ? { click: this.__onMobileClick } + : { + mousedown: this.__onActivate, + focus: this.__onFocus, + blur: this.__onBlur, + keydown: this.__onKeydown, + keyup: this.__onKeyup + } + }, + + modelUpdate: function modelUpdate () { + return [ + this.value, + this.min, + this.max, + this.innerMin, + this.innerMax + ].join('#') + } + }, + + watch: { + modelUpdate: function modelUpdate () { + this.model = this.value === null + ? this.computedInnerMin + : between(this.value, this.min, this.max); + } + }, + + methods: { + __updateValue: function __updateValue (change) { + if (this.model !== this.value) { + this.$emit('input', this.model); + } + change === true && this.$emit('change', this.model); + }, + + __getDragging: function __getDragging () { + return this.$el.getBoundingClientRect() + }, + + __updatePosition: function __updatePosition (event, dragging) { + if ( dragging === void 0 ) dragging = this.dragging; + + var ratio = this.__getDraggingRatio(event, dragging); + + this.model = this.__convertRatioToModel(ratio); + this.curRatio = this.snap !== true || this.computedStep === 0 + ? between(ratio, this.innerMinRatio, this.innerMaxRatio) + : this.__convertModelToRatio(this.model); + }, + + __onFocus: function __onFocus () { + this.focus = true; + }, + + __onKeydown: function __onKeydown (evt) { + if (!keyCodes$3.includes(evt.keyCode)) { + return + } + + this.focus = true; + + stopAndPrevent(evt); + + this.model = between( + parseFloat((this.model + this.getKeyOffset(evt.keyCode)).toFixed(this.computedDecimals)), + this.computedInnerMin, + this.computedInnerMax + ); + + this.__updateValue(); + } + }, + + render: function render (h) { + var this$1$1 = this; + + var content = this.__getContent(h, function (node) { + node.push( + this$1$1.__getThumb(h, { + pinColor: this$1$1.thumbPinColor, + textContainerStyle: this$1$1.thumbTextContainerStyle, + textClass: this$1$1.thumbTextClass, + label: this$1$1.thumbLabel, + classes: this$1$1.thumbClasses, + style: this$1$1.thumbStyle, + nodeData: {} + }) + ); + }); + + return h('div', { + class: this.classes + (this.value === null ? ' q-slider--no-value' : ''), + attrs: Object.assign({}, this.attributes, + {'aria-valuenow': this.value}) + }, content) + } + }); + + // using it to manage SSR rendering with best performance + + var CanRenderMixin = { + data: function data () { + return { + canRender: !onSSR + } + }, + + mounted: function mounted () { + this.canRender === false && (this.canRender = true); + } + }; + + var QResizeObserver = Vue__default["default"].extend({ + name: 'QResizeObserver', + + mixins: [ CanRenderMixin ], + + props: { + debounce: { + type: [ String, Number ], + default: 100 + } + }, + + data: function data () { + return this.hasObserver === true + ? {} + : { url: this.$q.platform.is.ie === true ? null : 'about:blank' } + }, + + methods: { + trigger: function trigger (immediately) { + if (immediately === true || this.debounce === 0 || this.debounce === '0') { + this.__emit(); + } + else if (this.timer === null) { + this.timer = setTimeout(this.__emit, this.debounce); + } + }, + + __emit: function __emit () { + if (this.timer !== null) { + clearTimeout(this.timer); + this.timer = null; + } + + if (!this.$el || !this.$el.parentNode) { + return + } + + var + parent = this.$el.parentNode, + size = { + width: parent.offsetWidth, + height: parent.offsetHeight + }; + + if (size.width === this.size.width && size.height === this.size.height) { + return + } + + this.size = size; + this.$emit('resize', this.size); + }, + + __cleanup: function __cleanup () { + if (this.curDocView !== void 0) { + // iOS is fuzzy, need to check it first + if (this.curDocView.removeEventListener !== void 0) { + this.curDocView.removeEventListener('resize', this.trigger, listenOpts.passive); + } + this.curDocView = void 0; + } + }, + + __onObjLoad: function __onObjLoad () { + this.__cleanup(); + + if (this.$el.contentDocument) { + this.curDocView = this.$el.contentDocument.defaultView; + this.curDocView.addEventListener('resize', this.trigger, listenOpts.passive); + } + + this.__emit(); + } + }, + + render: function render (h) { + if (this.canRender === false || this.hasObserver === true) { + return + } + + return h('object', { + key: 'load', + style: this.style, + attrs: { + tabindex: -1, // fix for Firefox + type: 'text/html', + data: this.url, + 'aria-hidden': 'true' + }, + on: cache(this, 'load', { + load: this.__onObjLoad + }) + }) + }, + + beforeCreate: function beforeCreate () { + this.size = { width: -1, height: -1 }; + if (isSSR === true) { return } + + this.hasObserver = typeof ResizeObserver !== 'undefined'; + + if (this.hasObserver !== true) { + this.style = (this.$q.platform.is.ie ? 'visibility:hidden;' : '') + "display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;"; + } + }, + + mounted: function mounted () { + this.timer = null; + + if (this.hasObserver === true) { + this.observer = new ResizeObserver(this.trigger); + this.observer.observe(this.$el.parentNode); + this.__emit(); + return + } + + if (this.$q.platform.is.ie === true) { + this.url = 'about:blank'; + this.__emit(); + } + else { + this.__onObjLoad(); + } + }, + + beforeDestroy: function beforeDestroy () { + clearTimeout(this.timer); + + if (this.hasObserver === true) { + if (this.observer !== void 0 && this.$el.parentNode) { + this.observer.unobserve(this.$el.parentNode); + } + return + } + + this.__cleanup(); + } + }); + + function injectProp (target, propName, get, set) { + Object.defineProperty(target, propName, { + get: get, + set: set, + enumerable: true + }); + return target + } + + function getIndicatorClass (color, top, vertical) { + var pos = vertical === true + ? ['left', 'right'] + : ['top', 'bottom']; + + return ("absolute-" + (top === true ? pos[0] : pos[1]) + (color ? (" text-" + color) : '')) + } + + var alignValues$1 = [ 'left', 'center', 'right', 'justify' ]; + var getDefaultBestScore = function () { return ({ matchedLen: 0, queryDiff: 9999, hrefLen: 0, exact: false, redirected: true }); }; + + function hasQueryIncluded (targetQuery, matchingQuery) { + for (var key in targetQuery) { + if (targetQuery[ key ] !== matchingQuery[ key ]) { + return false + } + } + + return true + } + + var QTabs = Vue__default["default"].extend({ + name: 'QTabs', + + mixins: [ TimeoutMixin, ListenersMixin ], + + provide: function provide () { + return { $tabs: this } + }, + + props: { + value: [Number, String], + + align: { + type: String, + default: 'center', + validator: function (v) { return alignValues$1.includes(v); } + }, + breakpoint: { + type: [String, Number], + default: 600 + }, + + vertical: Boolean, + shrink: Boolean, + stretch: Boolean, + + activeClass: String, + activeColor: String, + activeBgColor: String, + indicatorColor: String, + leftIcon: String, + rightIcon: String, + + outsideArrows: Boolean, + mobileArrows: Boolean, + + switchIndicator: Boolean, + + narrowIndicator: Boolean, + inlineLabel: Boolean, + noCaps: Boolean, + + dense: Boolean, + + contentClass: String + }, + + data: function data () { + return { + scrollable: false, + leftArrow: true, + rightArrow: false, + justify: false, + + tabNameList: [], + + // used by children + currentModel: this.value, + hasFocus: false, + avoidRouteWatcher: false // false | string (uid) + } + }, + + watch: { + isRTL: function isRTL () { + this.__localUpdateArrows(); + }, + + value: function value (name) { + this.__updateModel({ name: name, setCurrent: true, skipEmit: true }); + }, + + outsideArrows: function outsideArrows () { + this.__recalculateScroll(); + }, + + arrowsEnabled: function arrowsEnabled (v) { + this.__localUpdateArrows = v === true + ? this.__updateArrowsFn + : noop; + + this.__recalculateScroll(); + } + }, + + computed: { + // used by children + tabProps: function tabProps () { + return { + activeClass: this.activeClass, + activeColor: this.activeColor, + activeBgColor: this.activeBgColor, + indicatorClass: getIndicatorClass( + this.indicatorColor, + this.switchIndicator, + this.vertical + ), + narrowIndicator: this.narrowIndicator, + inlineLabel: this.inlineLabel, + noCaps: this.noCaps + } + }, + + // used by children + hasActiveTab: function hasActiveTab () { + var this$1$1 = this; + + return this.tabNameList.some(function (entry) { return entry.name === this$1$1.currentModel; }) + }, + + arrowsEnabled: function arrowsEnabled () { + return this.$q.platform.is.desktop === true || this.mobileArrows === true + }, + + alignClass: function alignClass () { + var align = this.scrollable === true + ? 'left' + : (this.justify === true ? 'justify' : this.align); + + return ("q-tabs__content--align-" + align) + }, + + classes: function classes () { + return 'q-tabs row no-wrap items-center' + + " q-tabs--" + (this.scrollable === true ? '' : 'not-') + "scrollable" + + " q-tabs--" + (this.vertical === true ? 'vertical' : 'horizontal') + + " q-tabs__arrows--" + (this.arrowsEnabled === true && this.outsideArrows === true ? 'outside' : 'inside') + + (this.dense === true ? ' q-tabs--dense' : '') + + (this.shrink === true ? ' col-shrink' : '') + + (this.stretch === true ? ' self-stretch' : '') + }, + + innerClass: function innerClass () { + return 'q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position ' + + this.alignClass + + (this.contentClass !== void 0 ? (" " + (this.contentClass)) : '') + + (this.$q.platform.is.mobile === true ? ' scroll' : '') + }, + + domProps: function domProps () { + return this.vertical === true + ? { container: 'height', content: 'offsetHeight', scroll: 'scrollHeight' } + : { container: 'width', content: 'offsetWidth', scroll: 'scrollWidth' } + }, + + isRTL: function isRTL () { + return this.vertical !== true && this.$q.lang.rtl === true + }, + + rtlPosCorrection: function rtlPosCorrection () { + return rtlHasScrollBug() === false && this.isRTL === true + }, + + // let's speed up execution of time-sensitive scrollTowards() + // with a computed variable by directly applying the minimal + // number of instructions on get/set functions + posFn: function posFn () { + return this.rtlPosCorrection === true + ? { get: function (content) { return Math.abs(content.scrollLeft); }, set: function (content, pos) { content.scrollLeft = -pos; } } + : ( + this.vertical === true + ? { get: function (content) { return content.scrollTop; }, set: function (content, pos) { content.scrollTop = pos; } } + : { get: function (content) { return content.scrollLeft; }, set: function (content, pos) { content.scrollLeft = pos; } } + ) + }, + + onEvents: function onEvents () { + return Object.assign({}, {input: stop}, + this.qListeners, + {focusin: this.__onFocusin, + focusout: this.__onFocusout}) + } + }, + + methods: { + // used by children too + __updateModel: function __updateModel (ref) { + var name = ref.name; + var setCurrent = ref.setCurrent; + var skipEmit = ref.skipEmit; + + if (this.currentModel !== name) { + if (skipEmit !== true && this.qListeners.input !== void 0) { + this.$emit('input', name); + } + + if (setCurrent === true || this.qListeners.input === void 0) { + this.__animate(this.currentModel, name); + this.currentModel = name; + } + } + }, + + __recalculateScroll: function __recalculateScroll () { + var this$1$1 = this; + + this.__registerScrollTick(function () { + this$1$1.__updateContainer({ + width: this$1$1.$el.offsetWidth, + height: this$1$1.$el.offsetHeight + }); + }); + }, + + __updateContainer: function __updateContainer (domSize) { + var this$1$1 = this; + + // it can be called faster than component being initialized + // so we need to protect against that case + // (one example of such case is the docs release notes page) + if (this.domProps === void 0 || !this.$refs.content) { return } + + var + size = domSize[ this.domProps.container ], + scrollSize = Math.min( + this.$refs.content[this.domProps.scroll], + Array.prototype.reduce.call( + this.$refs.content.children, + function (acc, el) { return acc + (el[ this$1$1.domProps.content ] || 0); }, + 0 + ) + ), + scroll = size > 0 && scrollSize > size; // when there is no tab, in Chrome, size === 0 and scrollSize === 1 + + if (this.scrollable !== scroll) { + this.scrollable = scroll; + } + + // Arrows need to be updated even if the scroll status was already true + scroll === true && this.__registerUpdateArrowsTick(this.__localUpdateArrows); + + var localJustify = size < parseInt(this.breakpoint, 10); + + if (this.justify !== localJustify) { + this.justify = localJustify; + } + }, + + __animate: function __animate (oldName, newName) { + var this$1$1 = this; + + var + oldTab = oldName !== void 0 && oldName !== null && oldName !== '' + ? this.tabVmList.find(function (tab) { return tab.name === oldName; }) + : null, + newTab = newName !== void 0 && newName !== null && newName !== '' + ? this.tabVmList.find(function (tab) { return tab.name === newName; }) + : null; + + if (oldTab && newTab) { + var + oldEl = oldTab.$refs.tabIndicator, + newEl = newTab.$refs.tabIndicator; + + clearTimeout(this.animateTimer); + + oldEl.style.transition = 'none'; + oldEl.style.transform = 'none'; + newEl.style.transition = 'none'; + newEl.style.transform = 'none'; + + var + oldPos = oldEl.getBoundingClientRect(), + newPos = newEl.getBoundingClientRect(); + + newEl.style.transform = this.vertical === true + ? ("translate3d(0," + (oldPos.top - newPos.top) + "px,0) scale3d(1," + (newPos.height ? oldPos.height / newPos.height : 1) + ",1)") + : ("translate3d(" + (oldPos.left - newPos.left) + "px,0,0) scale3d(" + (newPos.width ? oldPos.width / newPos.width : 1) + ",1,1)"); + + // allow scope updates to kick in (QRouteTab needs more time) + this.__registerAnimateTick(function () { + this$1$1.animateTimer = setTimeout(function () { + newEl.style.transition = 'transform .25s cubic-bezier(.4, 0, .2, 1)'; + newEl.style.transform = 'none'; + }, 70); + }); + } + + if (newTab && this.scrollable === true) { + this.__scrollToTabEl(newTab.$el); + } + }, + + __scrollToTabEl: function __scrollToTabEl (el) { + var + contentRef = this.$refs.content; + var ref = contentRef.getBoundingClientRect(); + var left = ref.left; + var width = ref.width; + var top = ref.top; + var height = ref.height; + var newPos = el.getBoundingClientRect(); + + var offset = this.vertical === true ? newPos.top - top : newPos.left - left; + + if (offset < 0) { + contentRef[ this.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.floor(offset); + this.__localUpdateArrows(); + return + } + + offset += this.vertical === true ? newPos.height - height : newPos.width - width; + if (offset > 0) { + contentRef[ this.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.ceil(offset); + this.__localUpdateArrows(); + } + }, + + __updateArrowsFn: function __updateArrowsFn () { + var content = this.$refs.content; + if (content !== null) { + var + rect = content.getBoundingClientRect(), + pos = this.vertical === true ? content.scrollTop : Math.abs(content.scrollLeft); + + if (this.isRTL === true) { + this.leftArrow = Math.ceil(pos + rect.width) < content.scrollWidth - 1; + this.rightArrow = pos > 0; + } + else { + this.leftArrow = pos > 0; + this.rightArrow = this.vertical === true + ? Math.ceil(pos + rect.height) < content.scrollHeight + : Math.ceil(pos + rect.width) < content.scrollWidth; + } + } + }, + + __animScrollTo: function __animScrollTo (value) { + var this$1$1 = this; + + this.__stopAnimScroll(); + this.scrollTimer = setInterval(function () { + if (this$1$1.__scrollTowards(value) === true) { + this$1$1.__stopAnimScroll(); + } + }, 5); + }, + + __scrollToStart: function __scrollToStart () { + this.__animScrollTo(this.rtlPosCorrection === true ? Number.MAX_SAFE_INTEGER : 0); + }, + + __scrollToEnd: function __scrollToEnd () { + this.__animScrollTo(this.rtlPosCorrection === true ? 0 : Number.MAX_SAFE_INTEGER); + }, + + __stopAnimScroll: function __stopAnimScroll () { + clearInterval(this.scrollTimer); + }, + + // used by children + __onKbdNavigate: function __onKbdNavigate (keyCode, fromEl) { + var tabs = Array.prototype.filter.call( + this.$refs.content.children, + function (el) { return el === fromEl || (el.matches && el.matches('.q-tab.q-focusable') === true); } + ); + + var len = tabs.length; + if (len === 0) { return } + + if (keyCode === 36) { // Home + if (tabs[ 0 ].contains(document.activeElement) === true) { + return false + } + + this.__scrollToTabEl(tabs[ 0 ]); + tabs[ 0 ].focus(); + return true + } + if (keyCode === 35) { // End + if (tabs[ len - 1 ].contains(document.activeElement) === true) { + return false + } + + this.__scrollToTabEl(tabs[ len - 1 ]); + tabs[ len - 1 ].focus(); + return true + } + + var dirPrev = keyCode === (this.vertical === true ? 38 /* ArrowUp */ : 37 /* ArrowLeft */); + var dirNext = keyCode === (this.vertical === true ? 40 /* ArrowDown */ : 39 /* ArrowRight */); + + var dir = dirPrev === true ? -1 : (dirNext === true ? 1 : void 0); + + if (dir !== void 0) { + var rtlDir = this.isRTL === true ? -1 : 1; + var index = tabs.indexOf(fromEl) + dir * rtlDir; + + if ( + index < 0 || + index >= len || + tabs[ index ].contains(document.activeElement) === true + ) { + return false + } + + this.__scrollToTabEl(tabs[ index ]); + tabs[ index ].focus({ preventScroll: true }); + + return true + } + }, + + __scrollTowards: function __scrollTowards (value) { + var + content = this.$refs.content; + var ref = this.posFn; + var get = ref.get; + var set = ref.set; + + var + done = false, + pos = get(content); + + var direction = value < pos ? -1 : 1; + + pos += direction * 5; + + if (pos < 0) { + done = true; + pos = 0; + } + else if ( + (direction === -1 && pos <= value) || + (direction === 1 && pos >= value) + ) { + done = true; + pos = value; + } + + set(content, pos); + this.__localUpdateArrows(); + + return done + }, + + // do not use directly; use __verifyRouteModel() instead + __updateActiveRoute: function __updateActiveRoute () { + var this$1$1 = this; + + var name = null, bestScore = getDefaultBestScore(); + + var vmList = this.tabVmList.filter(function (tab) { return tab.hasRouterLink === true; }); + var vmLen = vmList.length; + + var ref = this.$route; + var currentQuery = ref.query; + var currentQueryLen = Object.keys(currentQuery).length; + + for (var tabIndex = 0; tabIndex < vmLen; tabIndex++) { + var tab = vmList[tabIndex]; + var exact = tab.exact === true; + + // if a) it doesn't respect the active/exact active status + // or b) we already found an exact match and this one isn't set as exact + // then we don't deal with it + if ( + tab[ exact === true ? 'linkIsExactActive' : 'linkIsActive' ] !== true || + (bestScore.exact === true && exact !== true) + ) { + continue + } + + var ref$1 = tab.resolvedLink; + var route = ref$1.route; + var href = ref$1.href; + var matched = route.matched; + var query = route.query; + var hash = route.hash; + var redirected = route.redirectedFrom !== void 0; + + if (exact === true) { + // hey, we found the perfect match; no more searching! + if (redirected === false) { + name = tab.name; + break + } + + if (bestScore.exact === false) { + // we reset values so we can discard previous non-exact matches + // and so we can register this exact one below + bestScore = getDefaultBestScore(); + } + } + + // if best is non-redirected and this one is redirected + // then this one is inferior so we don't care about it + if (bestScore.redirected === false && redirected === true) { + continue + } + + var queryLen = Object.keys(query).length; + + if ( + // if it's exact it already perfectly includes current query + // so no point in computing it + exact === false && + queryLen !== 0 && + hasQueryIncluded(query, currentQuery) === false + ) { + // it has query and it doesn't includes the current one + continue + } + + var newScore = { + exact: exact, + redirected: redirected, + matchedLen: matched.length, + queryDiff: exact === true + ? 0 // avoid computing as it's 0 anyway + : currentQueryLen - queryLen, + hrefLen: href.length - hash.length + }; + + if (newScore.matchedLen > bestScore.matchedLen) { + // it matches more routes so it's more specific so we set it as current champion + name = tab.name; + bestScore = newScore; + continue + } + else if (newScore.matchedLen !== bestScore.matchedLen) { + // it matches less routes than the current champion so we discard it + continue + } + + if (newScore.queryDiff < bestScore.queryDiff) { + // query is closer to the current one so we set it as current champion + name = tab.name; + bestScore = newScore; + continue + } + else if (newScore.queryDiff !== bestScore.queryDiff) { + continue + } + + if (newScore.hrefLen > bestScore.hrefLen) { + // href is lengthier so it's more specific so we set it as current champion + name = tab.name; + bestScore = newScore; + } + } + + if ( + name === null && + this.tabVmList.some(function (tab) { return tab.hasRouterLink === void 0 && tab.name === this$1$1.currentModel; }) === true + ) { + // we shouldn't interfere if non-route tab is active + return + } + + this.__updateModel({ name: name, setCurrent: true }); + }, + + __onFocusin: function __onFocusin (e) { + this.__removeFocusTimeout(); + + if ( + this.hasFocus !== true && + this.$el && + e.target && + typeof e.target.closest === 'function' + ) { + var tab = e.target.closest('.q-tab'); + + // if the target is contained by a QTab/QRouteTab + // (it might be other elements focused, like additional QBtn) + if (tab && this.$el.contains(tab) === true) { + this.hasFocus = true; + + if (this.scrollable === true) { + this.__scrollToTabEl(tab); + } + } + } + + this.qListeners.focusin !== void 0 && this.$emit('focusin', e); + }, + + __onFocusout: function __onFocusout (e) { + var this$1$1 = this; + + this.__registerFocusTimeout(function () { this$1$1.hasFocus = false; }, 30); + this.qListeners.focusout !== void 0 && this.$emit('focusout', e); + }, + + // used by children + __verifyRouteModel: function __verifyRouteModel () { + if (this.avoidRouteWatcher === false) { + this.__registerScrollToTabTimeout(this.__updateActiveRoute); + } + else { + this.__removeScrollToTabTimeout(); + } + }, + + __watchRoute: function __watchRoute () { + var this$1$1 = this; + + if (this.unwatchRoute === void 0) { + var unwatch = this.$watch(function () { return this$1$1.$route.fullPath; }, this.__verifyRouteModel); + this.unwatchRoute = function () { + unwatch(); + this$1$1.unwatchRoute = void 0; + }; + } + }, + + // used by children + __registerTab: function __registerTab (tabVm) { + var this$1$1 = this; + + // we avoid setting tabVmList in data() as this would + // make the whole vm reactive + this.tabVmList.push(tabVm); + // ...so we extract only the needed stuff out of it + // into data() defined tabNameList + this.tabNameList.push( + injectProp({}, 'name', function () { return tabVm.name; }) + ); + + this.__recalculateScroll(); + + // if it's a QTab + if (tabVm.hasRouterLink === void 0 || this.$route === void 0) { + // we should position to the currently active tab (if any) + this.__registerScrollToTabTimeout(function () { + if (this$1$1.scrollable === true) { + var value = this$1$1.currentModel; + var newTab = value !== void 0 && value !== null && value !== '' + ? this$1$1.tabVmList.find(function (tab) { return tab.name === value; }) + : null; + + newTab && this$1$1.__scrollToTabEl(newTab.$el); + } + }); + } + // else if it's a QRouteTab with a valid link + else { + this.__watchRoute(); + + if (tabVm.hasRouterLink === true) { + this.__verifyRouteModel(); + } + } + }, + + // used by children + __unregisterTab: function __unregisterTab (tabVm) { + var index = this.tabVmList.indexOf(tabVm); + + this.tabVmList.splice(index, 1); + this.tabNameList.splice(index, 1); + + this.__recalculateScroll(); + + // if we're watching route and this tab is a QRouteTab + if (this.unwatchRoute !== void 0 && tabVm.hasRouterLink !== void 0) { + // unwatch route if we don't have any QRouteTabs left + if (this.tabVmList.every(function (tab) { return tab.hasRouterLink === void 0; }) === true) { + this.unwatchRoute(); + } + + // then update model + this.__verifyRouteModel(); + } + }, + + __cleanup: function __cleanup () { + clearTimeout(this.animateTimer); + this.__stopAnimScroll(); + this.unwatchRoute !== void 0 && this.unwatchRoute(); + } + }, + + created: function created () { + this.__useTick('__registerScrollTick'); + this.__useTick('__registerUpdateArrowsTick'); + this.__useTick('__registerAnimateTick'); + + this.__useTimeout('__registerFocusTimeout', '__removeFocusTimeout'); + this.__useTimeout('__registerScrollToTabTimeout', '__removeScrollToTabTimeout'); + + Object.assign(this, { + tabVmList: [], + __localUpdateArrows: this.arrowsEnabled === true + ? this.__updateArrowsFn + : noop + }); + }, + + activated: function activated () { + this.hadRouteWatcher === true && this.__watchRoute(); + this.__recalculateScroll(); + }, + + deactivated: function deactivated () { + this.hadRouteWatcher = this.unwatchRoute !== void 0; + this.__cleanup(); + }, + + beforeDestroy: function beforeDestroy () { + this.__cleanup(); + }, + + render: function render (h) { + var child = [ + h(QResizeObserver, { + key: 'resize', + on: cache(this, 'resize', { resize: this.__updateContainer }) + }), + + h('div', { + key: 'scroll', + ref: 'content', + class: this.innerClass, + on: this.arrowsEnabled === true ? cache(this, 'scroll', { scroll: this.__updateArrowsFn }) : void 0 + }, slot(this, 'default')) + ]; + + this.arrowsEnabled === true && child.push( + h(QIcon, { + key: 'onS', + class: 'q-tabs__arrow q-tabs__arrow--start absolute q-tab__icon' + + (this.leftArrow === true ? '' : ' q-tabs__arrow--faded'), + props: { name: this.leftIcon || this.$q.iconSet.tabs[ this.vertical === true ? 'up' : 'left' ] }, + on: cache(this, 'onS', { + '&mousedown': this.__scrollToStart, + '&touchstart': this.__scrollToStart, + '&mouseup': this.__stopAnimScroll, + '&mouseleave': this.__stopAnimScroll, + '&touchend': this.__stopAnimScroll + }) + }), + + h(QIcon, { + key: 'onE', + class: 'q-tabs__arrow q-tabs__arrow--end absolute q-tab__icon' + + (this.rightArrow === true ? '' : ' q-tabs__arrow--faded'), + props: { name: this.rightIcon || this.$q.iconSet.tabs[ this.vertical === true ? 'down' : 'right' ] }, + on: cache(this, 'onE', { + '&mousedown': this.__scrollToEnd, + '&touchstart': this.__scrollToEnd, + '&mouseup': this.__stopAnimScroll, + '&mouseleave': this.__stopAnimScroll, + '&touchend': this.__stopAnimScroll + }) + }) + ); + + return h('div', { + class: this.classes, + on: this.onEvents, + attrs: { role: 'tablist' } + }, child) + } + }); + + var id$1 = 0; + + var QTab = Vue__default["default"].extend({ + name: 'QTab', + + mixins: [ RippleMixin, ListenersMixin ], + + inject: { + $tabs: { + default: function default$1 () { + console.error('QTab/QRouteTab components need to be child of QTabs'); + } + } + }, + + props: { + icon: String, + label: [Number, String], + + alert: [Boolean, String], + alertIcon: String, + + name: { + type: [Number, String], + default: function () { return ("t_" + (id$1++)); } + }, + + noCaps: Boolean, + + tabindex: [String, Number], + disable: Boolean, + + contentClass: String + }, + + computed: { + isActive: function isActive () { + return this.$tabs.currentModel === this.name + }, + + classes: function classes () { + return 'q-tab relative-position self-stretch flex flex-center text-center' + + ( + this.isActive === true + ? ( + ' q-tab--active' + + (this.$tabs.tabProps.activeClass ? ' ' + this.$tabs.tabProps.activeClass : '') + + (this.$tabs.tabProps.activeColor ? (" text-" + (this.$tabs.tabProps.activeColor)) : '') + + (this.$tabs.tabProps.activeBgColor ? (" bg-" + (this.$tabs.tabProps.activeBgColor)) : '') + ) + : ' q-tab--inactive' + ) + + (this.icon && this.label && this.$tabs.tabProps.inlineLabel === false ? ' q-tab--full' : '') + + (this.noCaps === true || this.$tabs.tabProps.noCaps === true ? ' q-tab--no-caps' : '') + + (this.disable === true ? ' disabled' : ' q-focusable q-hoverable cursor-pointer') + + (this.hasRouterLinkProps !== void 0 ? this.linkClass : '') + }, + + innerClass: function innerClass () { + return 'q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable q-key-group-navigation--ignore-key ' + + (this.$tabs.tabProps.inlineLabel === true ? 'row no-wrap q-tab__content--inline' : 'column') + + (this.contentClass !== void 0 ? (" " + (this.contentClass)) : '') + }, + + computedTabIndex: function computedTabIndex () { + return ( + this.disable === true || + this.$tabs.hasFocus === true || + (this.isActive === false && this.$tabs.hasActiveTab === true) + ) + ? -1 + : this.tabindex || 0 + }, + + computedRipple: function computedRipple () { + return this.ripple === false + ? false + : Object.assign( + { keyCodes: [13, 32], early: true }, + this.ripple === true ? {} : this.ripple + ) + }, + + onEvents: function onEvents () { + return Object.assign({}, {input: stop}, + this.qListeners, + {click: this.__onClick, + keydown: this.__onKeydown}) + }, + + attrs: function attrs () { + var attrs = Object.assign({}, this.linkAttrs, + {tabindex: this.computedTabIndex, + role: 'tab', + 'aria-selected': this.isActive === true ? 'true' : 'false'}); + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + + return attrs + } + }, + + methods: { + __onClick: function __onClick (e, keyboard) { + var this$1$1 = this; + + if (keyboard !== true && this.$refs.blurTarget !== void 0) { + this.$refs.blurTarget.focus({ preventScroll: true }); + } + + if (this.disable === true) { + // we should hinder native navigation though + this.hasRouterLink === true && stopAndPrevent(e); + return + } + + // do we have a QTab? + if (this.hasRouterLinkProps === void 0) { + this.$tabs.__updateModel({ name: this.name }); + this.qListeners.click !== void 0 && this.$emit('click', e); + return + } + + if (this.hasRouterLink === true) { + var go = function (first, second, third) { + // for backwards compatibility + var ref = e.navigate === false + ? { to: first, replace: second, append: third } + : (first || {}); + var to = ref.to; + var replace = ref.replace; + var append = ref.append; + var returnRouterError = ref.returnRouterError; + + // if requiring to go to another route, then we + // let the QTabs route watcher do its job, + // otherwise directly select this + var hardError; + var reqId = to === void 0 || (append === this$1$1.append && isDeepEqual(to, this$1$1.to) === true) + ? (this$1$1.$tabs.avoidRouteWatcher = uid$3()) + : null; + + return this$1$1.__navigateToRouterLink(e, { to: to, replace: replace, append: append, returnRouterError: true }) + .catch(function (err) { hardError = err; }) + .then(function (result) { + if (reqId === this$1$1.$tabs.avoidRouteWatcher) { + this$1$1.$tabs.avoidRouteWatcher = false; + + // if we don't have any hard errors, except for + // when navigating to the same route (on all other errors, + // like when navigation was aborted in a nav guard, we don't activate this tab) + if ( + hardError === void 0 || + hardError.message.startsWith('Avoided redundant navigation') === true + ) { + this$1$1.$tabs.__updateModel({ name: this$1$1.name }); + } + } + + return hardError !== void 0 && returnRouterError === true + ? Promise.reject(hardError) + : result + }) + }; + + this.qListeners.click !== void 0 && this.$emit('click', e, go); + + // for backwards compatibility + e.navigate === false && e.preventDefault(); + + e.defaultPrevented !== true && go(); + + return + } + + this.qListeners.click !== void 0 && this.$emit('click', e); + }, + + __onKeydown: function __onKeydown (e) { + if (isKeyCode(e, [ 13, 32 ])) { + this.__onClick(e, true); + } + else if ( + shouldIgnoreKey(e) !== true && + e.keyCode >= 35 && + e.keyCode <= 40 && + e.altKey !== true && + e.metaKey !== true + ) { + this.$tabs.__onKbdNavigate(e.keyCode, this.$el) === true && stopAndPrevent(e); + } + + this.qListeners.keydown !== void 0 && this.$emit('keydown', e); + }, + + __getContent: function __getContent (h) { + var + narrow = this.$tabs.tabProps.narrowIndicator, + content = [], + indicator = h('div', { + ref: 'tabIndicator', + staticClass: 'q-tab__indicator', + class: this.$tabs.tabProps.indicatorClass + }); + + this.icon !== void 0 && content.push( + h(QIcon, { + staticClass: 'q-tab__icon', + props: { name: this.icon } + }) + ); + + this.label !== void 0 && content.push( + h('div', { + staticClass: 'q-tab__label' + }, [ this.label ]) + ); + + this.alert !== false && content.push( + this.alertIcon !== void 0 + ? h(QIcon, { + staticClass: 'q-tab__alert-icon', + props: { + color: this.alert !== true + ? this.alert + : void 0, + name: this.alertIcon + } + }) + : h('div', { + staticClass: 'q-tab__alert', + class: this.alert !== true + ? ("text-" + (this.alert)) + : null + }) + ); + + narrow === true && content.push(indicator); + + var node = [ + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: 'blurTarget' }), + h('div', { class: this.innerClass }, mergeSlot(content, this, 'default')) + ]; + + narrow === false && node.push(indicator); + + return node + }, + + __renderTab: function __renderTab (h, tag) { + var data = { + class: this.classes, + attrs: this.attrs, + on: this.onEvents, + directives: this.ripple === false || this.disable === true ? null : [ + { name: 'ripple', value: this.computedRipple } + ] + }; + + return h(tag, data, this.__getContent(h)) + } + }, + + mounted: function mounted () { + this.$tabs.__registerTab(this); + }, + + beforeDestroy: function beforeDestroy () { + this.$tabs.__unregisterTab(this); + }, + + render: function render (h) { + return this.__renderTab(h, 'div') + } + }); + + var QTabPanels = Vue__default["default"].extend({ + name: 'QTabPanels', + + mixins: [ DarkMixin, PanelParentMixin ], + + computed: { + classes: function classes () { + return 'q-tab-panels q-panel-parent' + + " q-tab-panels--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + } + }, + + methods: { + __renderPanels: function __renderPanels (h) { + return h('div', { + class: this.classes, + directives: this.panelDirectives, + on: Object.assign({}, this.qListeners) + }, this.__getPanelContent(h)) + } + } + }); + + var attrs$4 = { role: 'tabpanel' }; + + var QTabPanel = Vue__default["default"].extend({ + name: 'QTabPanel', + + mixins: [ PanelChildMixin ], + + render: function render (h) { + return h('div', { + staticClass: 'q-tab-panel', + attrs: attrs$4, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var palette = [ + 'rgb(255,204,204)', 'rgb(255,230,204)', 'rgb(255,255,204)', 'rgb(204,255,204)', 'rgb(204,255,230)', 'rgb(204,255,255)', 'rgb(204,230,255)', 'rgb(204,204,255)', 'rgb(230,204,255)', 'rgb(255,204,255)', + 'rgb(255,153,153)', 'rgb(255,204,153)', 'rgb(255,255,153)', 'rgb(153,255,153)', 'rgb(153,255,204)', 'rgb(153,255,255)', 'rgb(153,204,255)', 'rgb(153,153,255)', 'rgb(204,153,255)', 'rgb(255,153,255)', + 'rgb(255,102,102)', 'rgb(255,179,102)', 'rgb(255,255,102)', 'rgb(102,255,102)', 'rgb(102,255,179)', 'rgb(102,255,255)', 'rgb(102,179,255)', 'rgb(102,102,255)', 'rgb(179,102,255)', 'rgb(255,102,255)', + 'rgb(255,51,51)', 'rgb(255,153,51)', 'rgb(255,255,51)', 'rgb(51,255,51)', 'rgb(51,255,153)', 'rgb(51,255,255)', 'rgb(51,153,255)', 'rgb(51,51,255)', 'rgb(153,51,255)', 'rgb(255,51,255)', + 'rgb(255,0,0)', 'rgb(255,128,0)', 'rgb(255,255,0)', 'rgb(0,255,0)', 'rgb(0,255,128)', 'rgb(0,255,255)', 'rgb(0,128,255)', 'rgb(0,0,255)', 'rgb(128,0,255)', 'rgb(255,0,255)', + 'rgb(245,0,0)', 'rgb(245,123,0)', 'rgb(245,245,0)', 'rgb(0,245,0)', 'rgb(0,245,123)', 'rgb(0,245,245)', 'rgb(0,123,245)', 'rgb(0,0,245)', 'rgb(123,0,245)', 'rgb(245,0,245)', + 'rgb(214,0,0)', 'rgb(214,108,0)', 'rgb(214,214,0)', 'rgb(0,214,0)', 'rgb(0,214,108)', 'rgb(0,214,214)', 'rgb(0,108,214)', 'rgb(0,0,214)', 'rgb(108,0,214)', 'rgb(214,0,214)', + 'rgb(163,0,0)', 'rgb(163,82,0)', 'rgb(163,163,0)', 'rgb(0,163,0)', 'rgb(0,163,82)', 'rgb(0,163,163)', 'rgb(0,82,163)', 'rgb(0,0,163)', 'rgb(82,0,163)', 'rgb(163,0,163)', + 'rgb(92,0,0)', 'rgb(92,46,0)', 'rgb(92,92,0)', 'rgb(0,92,0)', 'rgb(0,92,46)', 'rgb(0,92,92)', 'rgb(0,46,92)', 'rgb(0,0,92)', 'rgb(46,0,92)', 'rgb(92,0,92)', + 'rgb(255,255,255)', 'rgb(205,205,205)', 'rgb(178,178,178)', 'rgb(153,153,153)', 'rgb(127,127,127)', 'rgb(102,102,102)', 'rgb(76,76,76)', 'rgb(51,51,51)', 'rgb(25,25,25)', 'rgb(0,0,0)' + ]; + + var thumbPath = 'M5 5 h10 v10 h-10 v-10 z'; + var alphaTrackImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg=='; + + var QColor = Vue__default["default"].extend({ + name: 'QColor', + + mixins: [ ListenersMixin, DarkMixin, FormMixin ], + + directives: { + TouchPan: TouchPan + }, + + props: { + value: String, + + defaultValue: String, + defaultView: { + type: String, + default: 'spectrum', + validator: function (v) { return ['spectrum', 'tune', 'palette'].includes(v); } + }, + + formatModel: { + type: String, + default: 'auto', + validator: function (v) { return ['auto', 'hex', 'rgb', 'hexa', 'rgba'].includes(v); } + }, + + palette: Array, + + noHeader: Boolean, + noHeaderTabs: Boolean, + noFooter: Boolean, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + disable: Boolean, + readonly: Boolean + }, + + data: function data () { + return { + topView: this.formatModel === 'auto' + ? ( + (this.value === void 0 || this.value === null || this.value === '' || this.value.startsWith('#')) + ? 'hex' + : 'rgb' + ) + : (this.formatModel.startsWith('hex') ? 'hex' : 'rgb'), + view: this.defaultView, + model: this.__parseModel(this.value || this.defaultValue) + } + }, + + watch: { + value: function value (v) { + var model = this.__parseModel(v || this.defaultValue); + if (model.hex !== this.model.hex) { + this.model = model; + } + }, + + defaultValue: function defaultValue (v) { + if (!this.value && v) { + var model = this.__parseModel(v); + if (model.hex !== this.model.hex) { + this.model = model; + } + } + } + }, + + computed: { + editable: function editable () { + return this.disable !== true && this.readonly !== true + }, + + forceHex: function forceHex () { + return this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('hex') > -1 + }, + + forceAlpha: function forceAlpha () { + return this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('a') > -1 + }, + + isHex: function isHex () { + return this.value === void 0 || + this.value === null || + this.value === '' || + this.value.startsWith('#') + }, + + isOutputHex: function isOutputHex () { + return this.forceHex !== null + ? this.forceHex + : this.isHex + }, + + formAttrs: function formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.model[ this.isOutputHex === true ? 'hex' : 'rgb' ] + } + }, + + hasAlpha: function hasAlpha () { + if (this.forceAlpha !== null) { + return this.forceAlpha + } + return this.model.a !== void 0 + }, + + currentBgColor: function currentBgColor () { + return { + backgroundColor: this.model.rgb || '#000' + } + }, + + headerClass: function headerClass () { + var light = this.model.a !== void 0 && this.model.a < 65 + ? true + : luminosity(this.model) > 0.4; + + return ("q-color-picker__header-content--" + (light ? 'light' : 'dark')) + }, + + spectrumStyle: function spectrumStyle () { + return { + background: ("hsl(" + (this.model.h) + ",100%,50%)") + } + }, + + spectrumPointerStyle: function spectrumPointerStyle () { + var obj; + + return ( obj = { + top: ((100 - this.model.v) + "%") + }, obj[this.$q.lang.rtl === true ? 'right' : 'left'] = ((this.model.s) + "%"), obj ) + }, + + computedPalette: function computedPalette () { + return this.palette !== void 0 && this.palette.length > 0 + ? this.palette + : palette + }, + + classes: function classes () { + return 'q-color-picker' + + (this.bordered === true ? ' q-color-picker--bordered' : '') + + (this.square === true ? ' q-color-picker--square no-border-radius' : '') + + (this.flat === true ? ' q-color-picker--flat no-shadow' : '') + + (this.disable === true ? ' disabled' : '') + + " q-color-picker--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + }, + + attrs: function attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + } + }, + + created: function created () { + this.__spectrumChange = throttle(this.__spectrumChange, 20); + }, + + render: function render (h) { + var child = [ this.__getContent(h) ]; + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(child, 'push'); + } + + this.noHeader !== true && child.unshift( + this.__getHeader(h) + ); + + this.noFooter !== true && child.push( + this.__getFooter(h) + ); + + return h('div', { + class: this.classes, + attrs: this.attrs, + on: Object.assign({}, this.qListeners) + }, child) + }, + + methods: { + __getHeader: function __getHeader (h) { + var this$1$1 = this; + + var child = []; + + this.noHeaderTabs !== true && child.push( + h(QTabs, { + key: 'topVTab', + class: 'q-color-picker__header-tabs', + props: { + value: this.topView, + dense: true, + align: 'justify' + }, + on: cache(this, 'topVTab', { + input: function (val) { this$1$1.topView = val; } + }) + }, [ + h(QTab, { + props: { + label: 'HEX' + (this.hasAlpha === true ? 'A' : ''), + name: 'hex', + ripple: false + } + }), + + h(QTab, { + props: { + label: 'RGB' + (this.hasAlpha === true ? 'A' : ''), + name: 'rgb', + ripple: false + } + }) + ]) + ); + + child.push( + h('div', { + staticClass: 'q-color-picker__header-banner row flex-center no-wrap' + }, [ + h('input', { + key: 'topIn', + staticClass: 'fit', + domProps: { value: this.model[this.topView] }, + attrs: this.editable !== true ? { + readonly: true + } : null, + on: cache(this, 'topIn', { + input: function (evt) { + this$1$1.__updateErrorIcon(this$1$1.__onEditorChange(evt) === true); + }, + change: stop, + blur: function (evt) { + this$1$1.__onEditorChange(evt, true) === true && this$1$1.$forceUpdate(); + this$1$1.__updateErrorIcon(false); + } + }) + }), + + h(QIcon, { + ref: 'errorIcon', + staticClass: 'q-color-picker__error-icon absolute no-pointer-events', + props: { name: this.$q.iconSet.type.negative } + }) + ]) + ); + + return h('div', { + staticClass: 'q-color-picker__header relative-position overflow-hidden' + }, [ + h('div', { staticClass: 'q-color-picker__header-bg absolute-full' }), + + h('div', { + staticClass: 'q-color-picker__header-content', + class: this.headerClass, + style: this.currentBgColor + }, child) + ]) + }, + + __getContent: function __getContent (h) { + return h(QTabPanels, { + props: { + value: this.view, + animated: true + } + }, [ + h(QTabPanel, { + staticClass: 'q-color-picker__spectrum-tab overflow-hidden', + props: { name: 'spectrum' } + }, this.__getSpectrumTab(h)), + + h(QTabPanel, { + staticClass: 'q-pa-md q-color-picker__tune-tab', + props: { name: 'tune' } + }, this.__getTuneTab(h)), + + h(QTabPanel, { + staticClass: 'q-color-picker__palette-tab', + props: { name: 'palette' } + }, this.__getPaletteTab(h)) + ]) + }, + + __getFooter: function __getFooter (h) { + var this$1$1 = this; + + return h('div', { + staticClass: 'q-color-picker__footer relative-position overflow-hidden' + }, [ + h(QTabs, { + key: 'ftIn', + staticClass: 'absolute-full', + props: { + value: this.view, + dense: true, + align: 'justify' + }, + on: cache(this, 'ftIn', { + input: function (val) { this$1$1.view = val; } + }) + }, [ + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.spectrum, + name: 'spectrum', + ripple: false + } + }), + + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.tune, + name: 'tune', + ripple: false + } + }), + + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.palette, + name: 'palette', + ripple: false + } + }) + ]) + ]) + }, + + __getSpectrumTab: function __getSpectrumTab (h) { + var this$1$1 = this; + + return [ + h('div', { + key: 'spectrT', + ref: 'spectrum', + staticClass: 'q-color-picker__spectrum non-selectable relative-position cursor-pointer', + style: this.spectrumStyle, + class: { readonly: this.editable !== true }, + on: this.editable === true + ? cache(this, 'spectrT', { + click: this.__spectrumClick, + mousedown: this.__activate + }) + : null, + directives: this.editable === true + ? cache(this, 'spectrDir', [{ + name: 'touch-pan', + modifiers: { + prevent: true, + stop: true, + mouse: true + }, + value: this.__spectrumPan + }]) + : null + }, [ + h('div', { style: { paddingBottom: '100%' } }), + h('div', { staticClass: 'q-color-picker__spectrum-white absolute-full' }), + h('div', { staticClass: 'q-color-picker__spectrum-black absolute-full' }), + h('div', { + staticClass: 'absolute', + style: this.spectrumPointerStyle + }, [ + this.model.hex !== void 0 ? h('div', { staticClass: 'q-color-picker__spectrum-circle' }) : null + ]) + ]), + + h('div', { + staticClass: 'q-color-picker__sliders' + }, [ + h(QSlider, { + key: 'hueSlide', + staticClass: 'q-color-picker__hue non-selectable', + props: { + value: this.model.h, + min: 0, + max: 360, + trackSize: '8px', + innerTrackColor: 'transparent', + selectionColor: 'transparent', + readonly: this.editable !== true, + thumbPath: thumbPath + }, + on: cache(this, 'hueSlide', { + input: this.__onHueChange, + change: function (val) { return this$1$1.__onHueChange(val, true); } + }) + }), + + this.hasAlpha === true + ? h(QSlider, { + key: 'alphaSlide', + staticClass: 'q-color-picker__alpha non-selectable', + props: { + value: this.model.a, + min: 0, + max: 100, + trackSize: '8px', + trackColor: 'white', + innerTrackColor: 'transparent', + selectionColor: 'transparent', + trackImg: alphaTrackImg, + readonly: this.editable !== true, + hideSelection: true, + thumbPath: thumbPath + }, + on: cache(this, 'alphaSlide', { + input: function (value) { return this$1$1.__onNumericChange(value, 'a', 100); }, + change: function (value) { return this$1$1.__onNumericChange(value, 'a', 100, void 0, true); } + }) + }) + : null + ]) + ] + }, + + __getTuneTab: function __getTuneTab (h) { + var this$1$1 = this; + + var attrs = { + inputmode: 'numeric', + maxlength: 3, + readonly: this.editable !== true + }; + + return [ + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['R']), + h(QSlider, { + key: 'rSlide', + props: { + value: this.model.r, + min: 0, + max: 255, + color: 'red', + dark: this.dark, + readonly: this.editable !== true + }, + on: cache(this, 'rSlide', { + input: function (value) { return this$1$1.__onNumericChange(value, 'r', 255); }, + change: function (value) { return this$1$1.__onNumericChange(value, 'r', 255, void 0, true); } + }) + }), + h('input', { + key: 'rIn', + domProps: { value: this.model.r }, + attrs: attrs, + on: cache(this, 'rIn', { + input: function (evt) { return this$1$1.__onNumericChange(evt.target.value, 'r', 255, evt); }, + change: stop, + blur: function (evt) { return this$1$1.__onNumericChange(evt.target.value, 'r', 255, evt, true); } + }) + }) + ]), + + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['G']), + h(QSlider, { + key: 'gSlide', + props: { + value: this.model.g, + min: 0, + max: 255, + color: 'green', + dark: this.dark, + readonly: this.editable !== true + }, + on: cache(this, 'gSlide', { + input: function (value) { return this$1$1.__onNumericChange(value, 'g', 255); }, + change: function (value) { return this$1$1.__onNumericChange(value, 'g', 255, void 0, true); } + }) + }), + h('input', { + key: 'gIn', + domProps: { value: this.model.g }, + attrs: attrs, + on: cache(this, 'gIn', { + input: function (evt) { return this$1$1.__onNumericChange(evt.target.value, 'g', 255, evt); }, + change: stop, + blur: function (evt) { return this$1$1.__onNumericChange(evt.target.value, 'g', 255, evt, true); } + }) + }) + ]), + + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['B']), + h(QSlider, { + key: 'bSlide', + props: { + value: this.model.b, + min: 0, + max: 255, + color: 'blue', + readonly: this.editable !== true, + dark: this.dark + }, + on: cache(this, 'bSlide', { + input: function (value) { return this$1$1.__onNumericChange(value, 'b', 255); }, + change: function (value) { return this$1$1.__onNumericChange(value, 'b', 255, void 0, true); } + }) + }), + h('input', { + key: 'bIn', + domProps: { value: this.model.b }, + attrs: attrs, + on: cache(this, 'bIn', { + input: function (evt) { return this$1$1.__onNumericChange(evt.target.value, 'b', 255, evt); }, + change: stop, + blur: function (evt) { return this$1$1.__onNumericChange(evt.target.value, 'b', 255, evt, true); } + }) + }) + ]), + + this.hasAlpha === true ? h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['A']), + h(QSlider, { + key: 'aSlide', + props: { + value: this.model.a, + color: 'grey', + readonly: this.editable !== true, + dark: this.dark + }, + on: cache(this, 'aSlide', { + input: function (value) { return this$1$1.__onNumericChange(value, 'a', 100); }, + change: function (value) { return this$1$1.__onNumericChange(value, 'a', 100, void 0, true); } + }) + }), + h('input', { + key: 'aIn', + domProps: { value: this.model.a }, + attrs: attrs, + on: cache(this, 'aIn', { + input: function (evt) { return this$1$1.__onNumericChange(evt.target.value, 'a', 100, evt); }, + change: stop, + blur: function (evt) { return this$1$1.__onNumericChange(evt.target.value, 'a', 100, evt, true); } + }) + }) + ]) : null + ] + }, + + __getPaletteTab: function __getPaletteTab (h) { + var this$1$1 = this; + + return [ + h('div', { + staticClass: 'row items-center q-color-picker__palette-rows', + class: this.editable === true + ? 'q-color-picker__palette-rows--editable' + : '' + }, this.computedPalette.map(function (color) { return h('div', { + key: 'palette#' + color, + staticClass: 'q-color-picker__cube col-auto', + style: { backgroundColor: color }, + on: this$1$1.editable === true ? cache(this$1$1, 'palette#' + color, { + click: function () { + this$1$1.__onPalettePick(color); + } + }) : null + }); })) + ] + }, + + __onSpectrumChange: function __onSpectrumChange (left, top, change) { + var panel = this.$refs.spectrum; + if (panel === void 0) { return } + + var + width = panel.clientWidth, + height = panel.clientHeight, + rect = panel.getBoundingClientRect(); + + var x = Math.min(width, Math.max(0, left - rect.left)); + + if (this.$q.lang.rtl === true) { + x = width - x; + } + + var + y = Math.min(height, Math.max(0, top - rect.top)), + s = Math.round(100 * x / width), + v = Math.round(100 * Math.max(0, Math.min(1, -(y / height) + 1))), + rgb = hsvToRgb({ + h: this.model.h, + s: s, + v: v, + a: this.hasAlpha === true ? this.model.a : void 0 + }); + + this.model.s = s; + this.model.v = v; + this.__update(rgb, change); + }, + + __onHueChange: function __onHueChange (h, change) { + h = Math.round(h); + var rgb = hsvToRgb({ + h: h, + s: this.model.s, + v: this.model.v, + a: this.hasAlpha === true ? this.model.a : void 0 + }); + + this.model.h = h; + this.__update(rgb, change); + }, + + __onNumericChange: function __onNumericChange (value, formatModel, max, evt, change) { + evt !== void 0 && stop(evt); + + if (!/^[0-9]+$/.test(value)) { + change === true && this.$forceUpdate(); + return + } + + var val = Math.floor(Number(value)); + + if (val < 0 || val > max) { + change === true && this.$forceUpdate(); + return + } + + var rgb = { + r: formatModel === 'r' ? val : this.model.r, + g: formatModel === 'g' ? val : this.model.g, + b: formatModel === 'b' ? val : this.model.b, + a: this.hasAlpha === true + ? (formatModel === 'a' ? val : this.model.a) + : void 0 + }; + + if (formatModel !== 'a') { + var hsv = rgbToHsv(rgb); + this.model.h = hsv.h; + this.model.s = hsv.s; + this.model.v = hsv.v; + } + + this.__update(rgb, change); + + if (evt !== void 0 && change !== true && evt.target.selectionEnd !== void 0) { + var index = evt.target.selectionEnd; + this.$nextTick(function () { + evt.target.setSelectionRange(index, index); + }); + } + }, + + __onEditorChange: function __onEditorChange (evt, change) { + var rgb; + var inp = evt.target.value; + + stop(evt); + + if (this.topView === 'hex') { + if ( + inp.length !== (this.hasAlpha === true ? 9 : 7) || + !/^#[0-9A-Fa-f]+$/.test(inp) + ) { + return true + } + + rgb = hexToRgb(inp); + } + else { + var model; + + if (!inp.endsWith(')')) { + return true + } + else if (this.hasAlpha !== true && inp.startsWith('rgb(')) { + model = inp.substring(4, inp.length - 1).split(',').map(function (n) { return parseInt(n, 10); }); + + if ( + model.length !== 3 || + !/^rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)$/.test(inp) + ) { + return true + } + } + else if (this.hasAlpha === true && inp.startsWith('rgba(')) { + model = inp.substring(5, inp.length - 1).split(','); + + if ( + model.length !== 4 || + !/^rgba\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/.test(inp) + ) { + return true + } + + for (var i = 0; i < 3; i++) { + var v = parseInt(model[i], 10); + if (v < 0 || v > 255) { + return true + } + model[i] = v; + } + + var v$1 = parseFloat(model[3]); + if (v$1 < 0 || v$1 > 1) { + return true + } + model[3] = v$1; + } + else { + return true + } + + if ( + model[0] < 0 || model[0] > 255 || + model[1] < 0 || model[1] > 255 || + model[2] < 0 || model[2] > 255 || + (this.hasAlpha === true && (model[3] < 0 || model[3] > 1)) + ) { + return true + } + + rgb = { + r: model[0], + g: model[1], + b: model[2], + a: this.hasAlpha === true + ? model[3] * 100 + : void 0 + }; + } + + var hsv = rgbToHsv(rgb); + this.model.h = hsv.h; + this.model.s = hsv.s; + this.model.v = hsv.v; + + this.__update(rgb, change); + + if (change !== true) { + var index = evt.target.selectionEnd; + this.$nextTick(function () { + evt.target.setSelectionRange(index, index); + }); + } + }, + + __onPalettePick: function __onPalettePick (color) { + var def = this.__parseModel(color); + var rgb = { r: def.r, g: def.g, b: def.b, a: def.a }; + + if (rgb.a === void 0) { + rgb.a = this.model.a; + } + + this.model.h = def.h; + this.model.s = def.s; + this.model.v = def.v; + + this.__update(rgb, true); + }, + + __update: function __update (rgb, change) { + // update internally + this.model.hex = rgbToHex(rgb); + this.model.rgb = rgbToString(rgb); + this.model.r = rgb.r; + this.model.g = rgb.g; + this.model.b = rgb.b; + this.model.a = rgb.a; + + var value = this.model[this.isOutputHex === true ? 'hex' : 'rgb']; + + // emit new value + this.$emit('input', value); + change === true && this.$emit('change', value); + }, + + __updateErrorIcon: function __updateErrorIcon (val) { + // we MUST avoid vue triggering a render, + // so manually changing this + if (this.$refs.errorIcon !== void 0) { + this.$refs.errorIcon.$el.style.opacity = val ? 1 : 0; + } + }, + + __parseModel: function __parseModel (v) { + var forceAlpha = this.forceAlpha !== void 0 + ? this.forceAlpha + : ( + this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('a') > -1 + ); + + if (typeof v !== 'string' || v.length === 0 || testPattern.anyColor(v.replace(/ /g, '')) !== true) { + return { + h: 0, + s: 0, + v: 0, + r: 0, + g: 0, + b: 0, + a: forceAlpha === true ? 100 : void 0, + hex: void 0, + rgb: void 0 + } + } + + var model = textToRgb(v); + + if (forceAlpha === true && model.a === void 0) { + model.a = 100; + } + + model.hex = rgbToHex(model); + model.rgb = rgbToString(model); + + return Object.assign(model, rgbToHsv(model)) + }, + + __spectrumPan: function __spectrumPan (evt) { + if (evt.isFinal) { + this.__onSpectrumChange( + evt.position.left, + evt.position.top, + true + ); + } + else { + this.__spectrumChange(evt); + } + }, + + // throttled in created() + __spectrumChange: function __spectrumChange (evt) { + this.__onSpectrumChange( + evt.position.left, + evt.position.top + ); + }, + + __spectrumClick: function __spectrumClick (evt) { + this.__onSpectrumChange( + evt.pageX - window.pageXOffset, + evt.pageY - window.pageYOffset, + true + ); + }, + + __activate: function __activate (evt) { + this.__onSpectrumChange( + evt.pageX - window.pageXOffset, + evt.pageY - window.pageYOffset + ); + } + } + }); + + var keyCodes$2 = { + horizontal: { + first: [ 36 ], // HOME + prev: [ 37 ], // ARROW_LEFT + next: [ 39 ], // ARROW_RIGHT + last: [ 35 ] // END + }, + vertical: { + first: [ 33 ], // PG_UP + prev: [ 38 ], // ARROW_UP + next: [ 40 ], // ARROW_DOWN + last: [ 34 ] // PG_DOWN + } + }; + + keyCodes$2.all = Object.keys(keyCodes$2.horizontal).reduce(function (acc, key) { + var obj; + + return (Object.assign({}, acc, + ( obj = {}, obj[key] = keyCodes$2.horizontal[key].concat(keyCodes$2.vertical[key]), obj ))); + }, {}); + + keyCodes$2.horizontal.list = Object.keys(keyCodes$2.horizontal).reduce(function (acc, k) { return acc.concat(keyCodes$2.horizontal[k]); }, [9]); + keyCodes$2.horizontal.listH = keyCodes$2.horizontal.list; + keyCodes$2.vertical.list = Object.keys(keyCodes$2.vertical).reduce(function (acc, k) { return acc.concat(keyCodes$2.vertical[k]); }, [9]); + keyCodes$2.vertical.listH = []; + keyCodes$2.all.list = Object.keys(keyCodes$2.all).reduce(function (acc, k) { return acc.concat(keyCodes$2.all[k]); }, [9]); + keyCodes$2.all.listH = keyCodes$2.horizontal.list; + + function matchNavigationKeyIgnoreEl (el) { + return el.classList.contains('q-key-group-navigation--ignore-key') === true + } + + function createFocusTargets (ctx) { + var target = document.createElement('span'); + target.setAttribute('tabindex', -1); + target.classList.add('no-outline'); + target.classList.add('absolute'); + target.classList.add('no-pointer-events'); + + ctx.firstTarget = target; + ctx.lastTarget = target.cloneNode(); + } + + function addFocusTargets (ctx, el) { + el.appendChild(ctx.lastTarget); + + if (el.childElementCount > 0) { + el.insertBefore(ctx.firstTarget, el.childNodes[0]); + } + else { + el.appendChild(ctx.firstTarget); + } + } + + function removeFocusTargets (ctx) { + ctx.firstTarget !== void 0 && ctx.firstTarget.remove(); + ctx.lastTarget !== void 0 && ctx.lastTarget.remove(); + } + + function parseArg$2 (arg) { + var data = [ 1, 1, 'q-key-group-navigation--active' ]; + + if (typeof arg === 'string' && arg.length > 0) { + var splits = arg.split(':'); + + for (var i = 0; i < 2; i++) { + var v = parseInt(splits[i], 10); + v && (data[i] = v); + } + } + + return { + offsetY: data[0], + offsetX: data[1], + activeClass: data[2] + } + } + + function configureEvents$2 (el, ctx, modifiers, value) { + if (modifiers.vertical === true) { + ctx.keyCodes = keyCodes$2.vertical; + } + else { + ctx.keyCodes = modifiers.horizontal === true + ? keyCodes$2.horizontal + : keyCodes$2.all; + } + + var enabled = [false, 0, '0'].indexOf(value) === -1; + + if (ctx.enabled !== enabled) { + ctx.enabled === true && cleanEvt(ctx, 'main'); + + enabled === true && addEvt(ctx, 'main', [ + [ el, 'keydown', 'keyDown', 'capture' ], + [ el, 'focusin', 'focusIn', 'passiveCapture' ], + [ el, 'focusout', 'focusOut', 'passiveCapture' ], + [ el, 'mousedown', 'setRestoreEl', 'passiveCapture' ], + [ el, 'touchstart', 'setRestoreEl', 'passiveCapture' ] + ]); + + ctx.enabled = enabled; + } + } + + var KeyGroupNavigation = { + name: 'key-group-navigation', + + bind: function bind (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + + var ctx = Object.assign({}, {keyCodes: keyCodes$2.all, + arg: arg, + modifiers: {}}, + + parseArg$2(arg), + + {focusRestoreEl: null, + + keyDown: function keyDown (evt) { + var keyCode = evt.keyCode; + var shiftKey = evt.shiftKey; + var target = evt.target; + + if ( + ctx.keyCodes.list.indexOf(keyCode) === -1 || + target.matches(KEY_SKIP_SELECTOR) === true + ) { + return + } + + stop(evt); + + if (keyCode === 9) { // TAB + addFocusTargets(ctx, el); + + if (shiftKey === true) { + if (ctx.firstTarget !== void 0) { + ctx.firstTarget.focus(); + } + else { + prevent(evt); + } + } + else { + if (ctx.lastTarget !== void 0) { + ctx.lastTarget.focus(); + } + else { + prevent(evt); + } + } + + // required for IE11 + requestAnimationFrame(function () { + removeFocusTargets(ctx); + }); + + return + } + + var initialEl = document.activeElement; + var keyNavGroup = initialEl + ? initialEl.closest('.q-key-group-navigation') + : null; + var ignoredFocusableElements = keyNavGroup !== null && keyNavGroup !== el + ? Array.prototype.filter.call( + keyNavGroup.querySelectorAll(FOCUSABLE_SELECTOR), + function (elm) { return elm !== initialEl; } + ) + : []; + var focusableElements = Array.prototype.filter.call( + el.querySelectorAll(FOCUSABLE_SELECTOR), + function (elm) { return ignoredFocusableElements.includes(elm) !== true; } + ); + var lastElementIndex = focusableElements.length - 1; + + if (lastElementIndex < 0) { + return + } + + if (ctx.keyCodes.first.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, 0, 1); + } + else if (ctx.keyCodes.last.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, lastElementIndex, -1); + } + else { + var currentIndex = initialEl === null + ? -1 + : focusableElements.indexOf(initialEl.closest(FOCUSABLE_SELECTOR)); + + var offset = ctx.keyCodes.listH.indexOf(keyCode) === -1 + ? ctx.offsetY + : ctx.offsetX; + + if (ctx.keyCodes.prev.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, Math.max(-1, currentIndex - offset), -1, offset !== 1); + } + if (ctx.keyCodes.next.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, currentIndex + offset, 1, offset !== 1); + } + } + + if (document.activeElement) { + ctx.focusRestoreEl = document.activeElement; + } + + prevent(evt); + }, + + setRestoreEl: function setRestoreEl (evt) { + if (evt.target) { + ctx.focusRestoreEl = evt.target; + } + }, + + setActive: function setActive () { + ctx.active = true; + el.classList.add(ctx.activeClass); + }, + + setInactive: function setInactive () { + ctx.active = false; + el.classList.remove(ctx.activeClass); + }, + + focusIn: function focusIn (evt) { + if (Interaction.isKeyboard !== true) { + ctx.active === true && ctx.setInactive(); + + return + } + + var path = getEventPath(evt); // required for IE11 + var ignored = path.slice(0, path.indexOf(el)).find(matchNavigationKeyIgnoreEl) !== void 0; + + if (ctx.active !== true) { + ignored !== true && ctx.setActive(); + } + else if (ignored === true) { + ctx.setInactive(); + } + + if ( + evt.target === ctx.firstTarget || + evt.target === ctx.lastTarget || + ( + evt.relatedTarget !== null && + ( + ( + evt.relatedTarget.classList !== void 0 && // required for IE11 + evt.relatedTarget.classList.contains('q-key-group-navigation--ignore-focus') === true + ) || + ( + evt.relatedTarget._qKeyNavIgnore === true && + el.contains(evt.relatedTarget) === true + ) + ) + ) + ) { + return + } + + var refocusEl = el.querySelector('.q-key-group-navigation__refocus'); + var focusRestoreEl = refocusEl !== null && refocusEl.closest('.q-key-group-navigation') === el + ? refocusEl + : ctx.focusRestoreEl; + + if ( + focusRestoreEl === null || + el.contains(evt.relatedTarget) === true + ) { + if (document.activeElement) { + ctx.focusRestoreEl = document.activeElement; + } + } + else { + var focusableEl = focusRestoreEl.closest(FOCUSABLE_SELECTOR); + var focusedEl = focusableEl && typeof focusableEl.focus === 'function' + ? focusableEl + : ( + focusRestoreEl.focus === 'function' + ? focusRestoreEl + : null + ); + + requestAnimationFrame(function () { + if (focusedEl !== null) { + focusedEl._qKeyNavIgnore = true; + + focusedEl.focus(); + + requestAnimationFrame(function () { + focusedEl && (focusedEl._qKeyNavIgnore = false); + }); + } + }); + } + }, + + focusOut: function focusOut (evt) { + if ( + ctx.active === true && + (evt.relatedTarget === null || el.contains(evt.relatedTarget) === false) + ) { + ctx.setInactive(); + } + }}); + + if (el.__qkeygrpnav) { + el.__qkeygrpnav_old = el.__qkeygrpnav; + } + + el.__qkeygrpnav = ctx; + + el.classList.add('q-key-group-navigation'); + createFocusTargets(ctx); + configureEvents$2(el, ctx, modifiers, value); + }, + + update: function update (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + + var ctx = el.__qkeygrpnav; + if (ctx !== void 0) { + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg$2(arg)); + } + + configureEvents$2(el, ctx, modifiers, value); + } + }, + + unbind: function unbind (el) { + var ctx = el.__qkeygrpnav_old || el.__qkeygrpnav; + if (ctx !== void 0) { + el.classList.remove('q-key-group-navigation'); + removeFocusTargets(ctx); + cleanEvt(ctx, 'main'); + ctx.active === true && ctx.setInactive(); + + delete el[el.__qkeygrpnav_old ? '__qkeygrpnav_old' : '__qkeygrpnav']; + } + } + }; + + // taken from https://github.com/jalaali/jalaali-js + + /* + Jalaali years starting the 33-year rule. + */ + var breaks = [ -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, + 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178 + ]; + + /* + Converts a Gregorian date to Jalaali. + */ + function toJalaali (gy, gm, gd) { + if (Object.prototype.toString.call(gy) === '[object Date]') { + gd = gy.getDate(); + gm = gy.getMonth() + 1; + gy = gy.getFullYear(); + } + return d2j(g2d(gy, gm, gd)) + } + + /* + Converts a Jalaali date to Gregorian. + */ + function toGregorian (jy, jm, jd) { + return d2g(j2d(jy, jm, jd)) + } + + /* + Is this a leap year or not? + */ + function isLeapJalaaliYear (jy) { + return jalCalLeap(jy) === 0 + } + + /* + Number of days in a given month in a Jalaali year. + */ + function jalaaliMonthLength (jy, jm) { + if (jm <= 6) { return 31 } + if (jm <= 11) { return 30 } + if (isLeapJalaaliYear(jy)) { return 30 } + return 29 + } + + /* + This function determines if the Jalaali (Persian) year is + leap (366-day long) or is the common year (365 days) + + @param jy Jalaali calendar year (-61 to 3177) + @returns number of years since the last leap year (0 to 4) + */ + function jalCalLeap (jy) { + var bl = breaks.length; + var + jp = breaks[0], + jm, + jump, + leap, + n, + i; + + if (jy < jp || jy >= breaks[bl - 1]) { throw new Error('Invalid Jalaali year ' + jy) } + + for (i = 1; i < bl; i += 1) { + jm = breaks[i]; + jump = jm - jp; + if (jy < jm) { break } + jp = jm; + } + n = jy - jp; + + if (jump - n < 6) { n = n - jump + div(jump + 4, 33) * 33; } + leap = mod(mod(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + + return leap + } + + /* + This function determines if the Jalaali (Persian) year is + leap (366-day long) or is the common year (365 days), and + finds the day in March (Gregorian calendar) of the first + day of the Jalaali year (jy). + + @param jy Jalaali calendar year (-61 to 3177) + @param withoutLeap when don't need leap (true or false) default is false + @return + leap: number of years since the last leap year (0 to 4) + gy: Gregorian year of the beginning of Jalaali year + march: the March day of Farvardin the 1st (1st day of jy) + @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm + @see: http://www.fourmilab.ch/documents/calendar/ + */ + function jalCal (jy, withoutLeap) { + var + bl = breaks.length, + gy = jy + 621; + var + leapJ = -14, + jp = breaks[0], + jm, + jump, + leap, + n, + i; + + if (jy < jp || jy >= breaks[bl - 1]) { throw new Error('Invalid Jalaali year ' + jy) } + + // Find the limiting years for the Jalaali year jy. + for (i = 1; i < bl; i += 1) { + jm = breaks[i]; + jump = jm - jp; + if (jy < jm) { break } + leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4); + jp = jm; + } + n = jy - jp; + + // Find the number of leap years from AD 621 to the beginning + // of the current Jalaali year in the Persian calendar. + leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4); + if (mod(jump, 33) === 4 && jump - n === 4) { leapJ += 1; } + + // And the same in the Gregorian calendar (until the year gy). + var leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150; + + // Determine the Gregorian date of Farvardin the 1st. + var march = 20 + leapJ - leapG; + + // Find how many years have passed since the last leap year. + if (!withoutLeap) { + if (jump - n < 6) { n = n - jump + div(jump + 4, 33) * 33; } + leap = mod(mod(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + } + + return { + leap: leap, + gy: gy, + march: march + } + } + + /* + Converts a date of the Jalaali calendar to the Julian Day number. + + @param jy Jalaali year (1 to 3100) + @param jm Jalaali month (1 to 12) + @param jd Jalaali day (1 to 29/31) + @return Julian Day number + */ + function j2d (jy, jm, jd) { + var r = jalCal(jy, true); + return g2d(r.gy, 3, r.march) + (jm - 1) * 31 - div(jm, 7) * (jm - 7) + jd - 1 + } + + /* + Converts the Julian Day number to a date in the Jalaali calendar. + + @param jdn Julian Day number + @return + jy: Jalaali year (1 to 3100) + jm: Jalaali month (1 to 12) + jd: Jalaali day (1 to 29/31) + */ + function d2j (jdn) { + var gy = d2g(jdn).gy; // Calculate Gregorian year (gy). + var + jy = gy - 621, + jd, + jm, + k; + var + r = jalCal(jy, false), + jdn1f = g2d(gy, 3, r.march); + + // Find number of days that passed since 1 Farvardin. + k = jdn - jdn1f; + if (k >= 0) { + if (k <= 185) { + // The first 6 months. + jm = 1 + div(k, 31); + jd = mod(k, 31) + 1; + return { jy: jy, + jm: jm, + jd: jd + } + } + else { + // The remaining months. + k -= 186; + } + } + else { + // Previous Jalaali year. + jy -= 1; + k += 179; + if (r.leap === 1) { k += 1; } + } + jm = 7 + div(k, 30); + jd = mod(k, 30) + 1; + return { jy: jy, + jm: jm, + jd: jd + } + } + + /* + Calculates the Julian Day number from Gregorian or Julian + calendar dates. This integer number corresponds to the noon of + the date (i.e. 12 hours of Universal Time). + The procedure was tested to be good since 1 March, -100100 (of both + calendars) up to a few million years into the future. + + @param gy Calendar year (years BC numbered 0, -1, -2, ...) + @param gm Calendar month (1 to 12) + @param gd Calendar day of the month (1 to 28/29/30/31) + @return Julian Day number + */ + function g2d (gy, gm, gd) { + var d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + + div(153 * mod(gm + 9, 12) + 2, 5) + + gd - 34840408; + d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752; + return d + } + + /* + Calculates Gregorian and Julian calendar dates from the Julian Day number + (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both + calendars) to some millions years ahead of the present. + + @param jdn Julian Day number + @return + gy: Calendar year (years BC numbered 0, -1, -2, ...) + gm: Calendar month (1 to 12) + gd: Calendar day of the month M (1 to 28/29/30/31) + */ + function d2g (jdn) { + var j = 4 * jdn + 139361631; + j = j + div(div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908; + var + i = div(mod(j, 1461), 4) * 5 + 308, + gd = div(mod(i, 153), 5) + 1, + gm = mod(div(i, 153), 12) + 1, + gy = div(j, 1461) - 100100 + div(8 - gm, 6); + return { + gy: gy, + gm: gm, + gd: gd + } + } + + /* + Utility helper functions. + */ + + function div (a, b) { + return ~~(a / b) + } + + function mod (a, b) { + return a - ~~(a / b) * b + } + + var calendars = [ 'gregorian', 'persian' ]; + + var DateTimeMixin = { + mixins: [ DarkMixin, FormMixin, ListenersMixin ], + + props: { + value: { + required: true + }, + + mask: { + type: String + }, + locale: Object, + + calendar: { + type: String, + validator: function (v) { return calendars.includes(v); }, + default: 'gregorian' + }, + + landscape: Boolean, + + color: String, + textColor: String, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + readonly: Boolean, + disable: Boolean + }, + + computed: { + computedMask: function computedMask () { + return this.__getMask() + }, + + computedLocale: function computedLocale () { + return this.__getLocale() + }, + + editable: function editable () { + return this.disable !== true && this.readonly !== true + }, + + computedColor: function computedColor () { + return this.color || 'primary' + }, + + computedTextColor: function computedTextColor () { + return this.textColor || 'white' + }, + + computedTabindex: function computedTabindex () { + return this.editable === true ? 0 : -1 + }, + + headerClass: function headerClass () { + var cls = []; + this.color !== void 0 && cls.push(("bg-" + (this.color))); + this.textColor !== void 0 && cls.push(("text-" + (this.textColor))); + return cls.join(' ') + } + }, + + methods: { + __getLocale: function __getLocale () { + return this.locale !== void 0 + ? Object.assign({}, this.$q.lang.date, this.locale) + : this.$q.lang.date + }, + + __getCurrentDate: function __getCurrentDate (dateOnly) { + var d = new Date(); + var timeFill = dateOnly === true ? null : 0; + + if (this.calendar === 'persian') { + var jDate = toJalaali(d); + return { + year: jDate.jy, + month: jDate.jm, + day: jDate.jd + } + } + + return { + year: d.getFullYear(), + month: d.getMonth() + 1, + day: d.getDate(), + hour: timeFill, + minute: timeFill, + second: timeFill, + millisecond: timeFill + } + }, + + __getCurrentTime: function __getCurrentTime () { + var d = new Date(); + + return { + hour: d.getHours(), + minute: d.getMinutes(), + second: d.getSeconds(), + millisecond: d.getMilliseconds() + } + }, + + __getDayHash: function __getDayHash (date) { + return date.year + '/' + pad(date.month) + '/' + pad(date.day) + } + } + }; + + /* eslint no-fallthrough: 0 */ + + var + MILLISECONDS_IN_DAY = 86400000, + MILLISECONDS_IN_HOUR = 3600000, + MILLISECONDS_IN_MINUTE = 60000, + dateConstructorArgs = [ 'year', 'month', 'date', 'hours', 'minutes', 'seconds', 'milliseconds' ], + defaultMask = 'YYYY-MM-DDTHH:mm:ss.SSSZ', + token = /\[((?:[^\]\\]|\\]|\\)*)\]|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]/g, + reverseToken = /(\[[^\]]*\])|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]|([.*+:?^,\s${}()|\\]+)/g, + regexStore = new Map(); + + function getRegexData (mask, dateLocale) { + var + days = '(' + dateLocale.days.join('|') + '|)', + key = mask + days; + + if (regexStore.has(key) === true) { + return regexStore.get(key) + } + + var + daysShort = '(' + dateLocale.daysShort.join('|') + '|)', + months = '(' + dateLocale.months.join('|') + '|)', + monthsShort = '(' + dateLocale.monthsShort.join('|') + '|)'; + + var map = {}; + var index = 0; + + var regexText = mask.replace(reverseToken, function (match) { + index++; + switch (match) { + case 'YY': + map.YY = index; + return '(-?\\d{1,2}|)' + case 'YYYY': + map.YYYY = index; + return '(-?\\d{1,4}|)' + case 'M': + map.M = index; + return '(\\d{1,2}|)' + case 'MM': + map.M = index; // bumping to M + return '(\\d{2}|)' + case 'MMM': + map.MMM = index; + return monthsShort + case 'MMMM': + map.MMMM = index; + return months + case 'D': + map.D = index; + return '(\\d{1,2}|)' + case 'Do': + map.D = index; // bumping to D + return '(\\d{1,2}(?:st|nd|rd|th)|)' + case 'DD': + map.D = index; // bumping to D + return '(\\d{2}|)' + case 'H': + map.H = index; + return '(\\d{1,2}|)' + case 'HH': + map.H = index; // bumping to H + return '(\\d{2}|)' + case 'h': + map.h = index; + return '(\\d{1,2}|)' + case 'hh': + map.h = index; // bumping to h + return '(\\d{2}|)' + case 'm': + map.m = index; + return '(\\d{1,2}|)' + case 'mm': + map.m = index; // bumping to m + return '(\\d{2}|)' + case 's': + map.s = index; + return '(\\d{1,2}|)' + case 'ss': + map.s = index; // bumping to s + return '(\\d{2}|)' + case 'S': + map.S = index; + return '(\\d{1}|)' + case 'SS': + map.S = index; // bump to S + return '(\\d{2}|)' + case 'SSS': + map.S = index; // bump to S + return '(\\d{3}|)' + case 'A': + map.A = index; + return '(AM|PM|)' + case 'a': + map.a = index; + return '(am|pm|)' + case 'aa': + map.aa = index; + return '(a\\.m\\.|p\\.m\\.|)' + + case 'ddd': + return daysShort + case 'dddd': + return days + case 'Q': + case 'd': + case 'E': + return '(\\d{1}|)' + case 'Qo': + return '(1st|2nd|3rd|4th|)' + case 'DDD': + case 'DDDD': + return '(\\d{1,3}|)' + case 'w': + return '(\\d{1,2}|)' + case 'ww': + return '(\\d{2}|)' + + case 'Z': // to split: (?:(Z)()()|([+-])?(\\d{2}):?(\\d{2})) + map.Z = index; + return '(Z|[+-]\\d{2}:\\d{2}|)' + case 'ZZ': + map.ZZ = index; + return '(Z|[+-]\\d{2}\\d{2}|)' + + case 'X': + map.X = index; + return '(-?\\d+|)' + case 'x': + map.x = index; + return '(-?\\d{4,}|)' + + default: + index--; + if (match[ 0 ] === '[') { + match = match.substring(1, match.length - 1); + } + return match.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + } + }); + + var res = { map: map, regex: new RegExp('^' + regexText) }; + regexStore.set(key, res); + + return res + } + + function getDateLocale (paramDateLocale, langProps) { + return paramDateLocale !== void 0 + ? paramDateLocale + : ( + langProps !== void 0 + ? langProps.date + : defaultLang.date + ) + } + + function formatTimezone (offset, delimeter) { + if ( delimeter === void 0 ) delimeter = ''; + + var + sign = offset > 0 ? '-' : '+', + absOffset = Math.abs(offset), + hours = Math.floor(absOffset / 60), + minutes = absOffset % 60; + + return sign + pad(hours) + delimeter + pad(minutes) + } + + function normalizeMod (mod) { + var acc = Object.assign({}, mod); + + if (mod.years !== void 0) { + acc.year = mod.years; + delete acc.years; + } + + if (mod.months !== void 0) { + acc.month = mod.months; + delete acc.months; + } + + if (mod.days !== void 0) { + acc.date = mod.days; + delete acc.days; + } + if (mod.day !== void 0) { + acc.date = mod.day; + delete acc.day; + } + + if (mod.hour !== void 0) { + acc.hours = mod.hour; + delete acc.hour; + } + + if (mod.minute !== void 0) { + acc.minutes = mod.minute; + delete acc.minute; + } + + if (mod.second !== void 0) { + acc.seconds = mod.second; + delete acc.second; + } + + if (mod.millisecond !== void 0) { + acc.milliseconds = mod.millisecond; + delete acc.millisecond; + } + + return acc + } + + var maxDayDate = new Date(); + function getMaxDay (year, month, calendar) { + if (calendar === 'persian') { + return jalaaliMonthLength(year, month) + } + + maxDayDate.setFullYear(year); + maxDayDate.setMonth(month); + maxDayDate.setDate(0); + return maxDayDate.getDate() + } + + function applyYearMonthDay (date, mod, type) { + var + year = mod.year !== void 0 ? mod.year : date[ ("get" + type + "FullYear") ](), + month = mod.month !== void 0 ? mod.month - 1 : date[ ("get" + type + "Month") ](), + maxDay = getMaxDay(year, month + 1), + day = Math.max(1, Math.min(maxDay, mod.date !== void 0 ? mod.date : date[ ("get" + type + "Date") ]())); + + date[ ("set" + type + "Date") ](1); + date[ ("set" + type + "Month") ](2); + + date[ ("set" + type + "FullYear") ](year); + date[ ("set" + type + "Month") ](month); + date[ ("set" + type + "Date") ](day); + + delete mod.year; + delete mod.month; + delete mod.date; + + return date + } + + function applyYearMonthDayChange (date, mod, sign) { + var + year = date.getFullYear(), + month = date.getMonth() + 1; + + if (mod.year !== void 0) { + year += sign * mod.year; + delete mod.year; + } + + if (mod.month !== void 0) { + month += sign * mod.month; + delete mod.month; + } + + applyYearMonthDay(date, { year: year, month: month }, ''); + + if (mod.date !== void 0) { + date.setDate(date.getDate() + sign * mod.date); + delete mod.date; + } + + return date + } + + function getChange (date, rawMod, sign) { + var + mod = normalizeMod(rawMod), + d = new Date(date), + t = mod.year !== void 0 || mod.month !== void 0 || mod.date !== void 0 + ? applyYearMonthDayChange(d, mod, sign) // removes year/month/day + : d; + + for (var key in mod) { + var op = capitalize(key); + t[ ("set" + op) ](t[ ("get" + op) ]() + sign * mod[ key ]); + } + + return t + } + + function __safeCreateDate () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + if (args.length > 1 && args[0] >= 0 && args[0] <= 99) { + return buildDate(dateConstructorArgs.reduce(function (mod, key, index) { + if (args[index] !== void 0) { + mod[key] = args[index]; + } + + return mod + }, {})) + } + + return new (Function.prototype.bind.apply( Date, [ null ].concat( args) )) + } + + function adjustDate (date, rawMod, utc) { + var + mod = normalizeMod(rawMod), + type = utc === true ? 'UTC' : '', + d = date === null || date === void 0 ? new Date() : new Date(date), + t = mod.year !== void 0 || mod.month !== void 0 || mod.date !== void 0 + ? applyYearMonthDay(d, mod, type) // removes year/month/day + : d; + + for (var key in mod) { + var op = key.charAt(0).toUpperCase() + key.slice(1); + t[ ("set" + type + op) ](mod[ key ]); + } + + return t + } + + function extractDate (str, mask, dateLocale) { + var d = __splitDate(str, mask, dateLocale); + + var date = __safeCreateDate( + d.year, + d.month === null ? null : d.month - 1, + d.day === null ? 1 : d.day, + d.hour, + d.minute, + d.second, + d.millisecond + ); + + var tzOffset = date.getTimezoneOffset(); + + return d.timezoneOffset === null || d.timezoneOffset === tzOffset + ? date + : getChange(date, { minutes: d.timezoneOffset - tzOffset }, 1) + } + + function __splitDate (str, mask, dateLocale, calendar, defaultModel) { + var date = { + year: null, + month: null, + day: null, + hour: null, + minute: null, + second: null, + millisecond: null, + timezoneOffset: null, + dateHash: null, + timeHash: null + }; + + defaultModel !== void 0 && Object.assign(date, defaultModel); + + if ( + str === void 0 || + str === null || + str === '' || + typeof str !== 'string' + ) { + return date + } + + if (mask === void 0) { + mask = defaultMask; + } + + var + langOpts = getDateLocale(dateLocale, lang.props), + months = langOpts.months, + monthsShort = langOpts.monthsShort; + + var ref = getRegexData(mask, langOpts); + var regex = ref.regex; + var map = ref.map; + + var match = str.match(regex); + + if (match === null) { + return date + } + + var idx = Object.assign({}, map); + Object.keys(idx).forEach(function (key) { + if (match[idx[key]] === '') { + idx[key] = void 0; + } + }); + + var tzString = ''; + + if (idx.X !== void 0 || idx.x !== void 0) { + var stamp = parseInt(match[ idx.X !== void 0 ? idx.X : idx.x ], 10); + + if (isNaN(stamp) === true || stamp < 0) { + return date + } + + var d = new Date(stamp * (idx.X !== void 0 ? 1000 : 1)); + + date.year = d.getFullYear(); + date.month = d.getMonth() + 1; + date.day = d.getDate(); + date.hour = d.getHours(); + date.minute = d.getMinutes(); + date.second = d.getSeconds(); + date.millisecond = d.getMilliseconds(); + } + else { + if (idx.YYYY !== void 0) { + date.year = parseInt(match[ idx.YYYY ], 10); + } + else if (idx.YY !== void 0) { + var y = parseInt(match[ idx.YY ], 10); + date.year = y < 0 ? y : 2000 + y; + } + + if (idx.M !== void 0) { + date.month = parseInt(match[ idx.M ], 10); + if (date.month < 1 || date.month > 12) { + return date + } + } + else if (idx.MMM !== void 0) { + date.month = monthsShort.indexOf(match[ idx.MMM ]) + 1; + } + else if (idx.MMMM !== void 0) { + date.month = months.indexOf(match[ idx.MMMM ]) + 1; + } + + if (idx.D !== void 0) { + date.day = parseInt(match[ idx.D ], 10); + + if (date.year === null || date.month === null || date.day < 1) { + return date + } + + if (date.day > getMaxDay(date.year, date.month, calendar)) { + return date + } + } + + if (idx.H !== void 0) { + date.hour = parseInt(match[ idx.H ], 10) % 24; + } + else if (idx.h !== void 0) { + date.hour = parseInt(match[ idx.h ], 10) % 12; + if ( + (idx.A && match[ idx.A ] === 'PM') || + (idx.a && match[ idx.a ] === 'pm') || + (idx.aa && match[ idx.aa ] === 'p.m.') + ) { + date.hour += 12; + } + date.hour = date.hour % 24; + } + + if (idx.m !== void 0) { + date.minute = parseInt(match[ idx.m ], 10) % 60; + } + + if (idx.s !== void 0) { + date.second = parseInt(match[ idx.s ], 10) % 60; + } + + if (idx.S !== void 0) { + date.millisecond = parseInt(match[ idx.S ], 10) * Math.pow( 10, (3 - match[ idx.S ].length) ); + } + + if (idx.Z !== void 0 || idx.ZZ !== void 0) { + tzString = (idx.Z !== void 0 ? match[ idx.Z ].replace(':', '') : match[ idx.ZZ ]); + date.timezoneOffset = (tzString[ 0 ] === '+' ? -1 : 1) * (60 * tzString.slice(1, 3) + 1 * tzString.slice(3, 5)); + } + } + + date.dateHash = date.year + '/' + pad(date.month) + '/' + pad(date.day); + date.timeHash = pad(date.hour) + ':' + pad(date.minute) + ':' + pad(date.second) + tzString; + + return date + } + + function isValid (date) { + return typeof date === 'number' + ? true + : isNaN(Date.parse(date)) === false + } + + function buildDate (mod, utc) { + return adjustDate(null, mod, utc) + } + + function getDayOfWeek (date, dateLocale) { + var langOpts = getDateLocale(dateLocale, lang.props); + var dow = new Date(date).getDay(); + return 1 + (7 + dow - (langOpts.firstDayOfWeek || 0)) % 7 + } + + function getWeekOfYear (date) { + // Remove time components of date + var thursday = __safeCreateDate(date.getFullYear(), date.getMonth(), date.getDate()); + + // Change date to Thursday same week + thursday.setDate(thursday.getDate() - ((thursday.getDay() + 6) % 7) + 3); + + // Take January 4th as it is always in week 1 (see ISO 8601) + var firstThursday = __safeCreateDate(thursday.getFullYear(), 0, 4); + + // Change date to Thursday same week + firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3); + + // Check if daylight-saving-time-switch occurred and correct for it + var ds = thursday.getTimezoneOffset() - firstThursday.getTimezoneOffset(); + thursday.setHours(thursday.getHours() - ds); + + // Number of weeks between target Thursday and first Thursday + var weekDiff = (thursday - firstThursday) / (MILLISECONDS_IN_DAY * 7); + return 1 + Math.floor(weekDiff) + } + + function getDayIdentifier (date) { + return date.getFullYear() * 10000 + date.getMonth() * 100 + date.getDate() + } + + function getDateIdentifier (date, onlyDate /* = false */) { + var d = new Date(date); + return onlyDate === true ? getDayIdentifier(d) : d.getTime() + } + + function isBetweenDates (date, from, to, opts) { + if ( opts === void 0 ) opts = {}; + + var + d1 = getDateIdentifier(from, opts.onlyDate), + d2 = getDateIdentifier(to, opts.onlyDate), + cur = getDateIdentifier(date, opts.onlyDate); + + return (cur > d1 || (opts.inclusiveFrom === true && cur === d1)) && + (cur < d2 || (opts.inclusiveTo === true && cur === d2)) + } + + function addToDate (date, mod) { + return getChange(date, mod, 1) + } + function subtractFromDate (date, mod) { + return getChange(date, mod, -1) + } + + function startOfDate (date, unit, utc) { + var + t = new Date(date), + prefix = "set" + (utc === true ? 'UTC' : ''); + + switch (unit) { + case 'year': + case 'years': + t[ (prefix + "Month") ](0); + case 'month': + case 'months': + t[ (prefix + "Date") ](1); + case 'day': + case 'days': + case 'date': + t[ (prefix + "Hours") ](0); + case 'hour': + case 'hours': + t[ (prefix + "Minutes") ](0); + case 'minute': + case 'minutes': + t[ (prefix + "Seconds") ](0); + case 'second': + case 'seconds': + t[ (prefix + "Milliseconds") ](0); + } + return t + } + + function endOfDate (date, unit, utc) { + var + t = new Date(date), + prefix = "set" + (utc === true ? 'UTC' : ''); + + switch (unit) { + case 'year': + case 'years': + t[ (prefix + "Month") ](11); + case 'month': + case 'months': + t[ (prefix + "Date") ](daysInMonth(t)); + case 'day': + case 'days': + case 'date': + t[ (prefix + "Hours") ](23); + case 'hour': + case 'hours': + t[ (prefix + "Minutes") ](59); + case 'minute': + case 'minutes': + t[ (prefix + "Seconds") ](59); + case 'second': + case 'seconds': + t[ (prefix + "Milliseconds") ](999); + } + return t + } + + function getMaxDate (date /* , ...args */) { + var t = new Date(date); + Array.prototype.slice.call(arguments, 1).forEach(function (d) { + t = Math.max(t, new Date(d)); + }); + return t + } + + function getMinDate (date /*, ...args */) { + var t = new Date(date); + Array.prototype.slice.call(arguments, 1).forEach(function (d) { + t = Math.min(t, new Date(d)); + }); + return t + } + + function getDiff (t, sub, interval) { + return Math.floor( + ( + (t.getTime() - t.getTimezoneOffset() * MILLISECONDS_IN_MINUTE) - + (sub.getTime() - sub.getTimezoneOffset() * MILLISECONDS_IN_MINUTE) + ) / interval + ) + } + + function getDateDiff (date, subtract, unit) { + if ( unit === void 0 ) unit = 'days'; + + var + t = new Date(date), + sub = new Date(subtract); + + switch (unit) { + case 'years': + case 'year': + return (t.getFullYear() - sub.getFullYear()) + + case 'months': + case 'month': + return (t.getFullYear() - sub.getFullYear()) * 12 + t.getMonth() - sub.getMonth() + + case 'days': + case 'day': + case 'date': + return getDiff(startOfDate(t, 'day'), startOfDate(sub, 'day'), MILLISECONDS_IN_DAY) + + case 'hours': + case 'hour': + return getDiff(startOfDate(t, 'hour'), startOfDate(sub, 'hour'), MILLISECONDS_IN_HOUR) + + case 'minutes': + case 'minute': + return getDiff(startOfDate(t, 'minute'), startOfDate(sub, 'minute'), MILLISECONDS_IN_MINUTE) + + case 'seconds': + case 'second': + return getDiff(startOfDate(t, 'second'), startOfDate(sub, 'second'), 1000) + } + } + + function getDayOfYear (date) { + return getDateDiff(date, startOfDate(date, 'year'), 'days') + 1 + } + + function inferDateFormat (date) { + return isDate(date) === true + ? 'date' + : (typeof date === 'number' ? 'number' : 'string') + } + + function getDateBetween (date, min, max) { + var t = new Date(date); + + if (min) { + var low = new Date(min); + if (t < low) { + return low + } + } + + if (max) { + var high = new Date(max); + if (t > high) { + return high + } + } + + return t + } + + function isSameDate (date, date2, unit) { + var + t = new Date(date), + d = new Date(date2); + + if (unit === void 0) { + return t.getTime() === d.getTime() + } + + switch (unit) { + case 'second': + case 'seconds': + if (t.getSeconds() !== d.getSeconds()) { + return false + } + case 'minute': // intentional fall-through + case 'minutes': + if (t.getMinutes() !== d.getMinutes()) { + return false + } + case 'hour': // intentional fall-through + case 'hours': + if (t.getHours() !== d.getHours()) { + return false + } + case 'day': // intentional fall-through + case 'days': + case 'date': + if (t.getDate() !== d.getDate()) { + return false + } + case 'month': // intentional fall-through + case 'months': + if (t.getMonth() !== d.getMonth()) { + return false + } + case 'year': // intentional fall-through + case 'years': + if (t.getFullYear() !== d.getFullYear()) { + return false + } + break + default: + throw new Error(("date isSameDate unknown unit " + unit)) + } + + return true + } + + function daysInMonth (date) { + return (__safeCreateDate(date.getFullYear(), date.getMonth() + 1, 0)).getDate() + } + + function getOrdinal (n) { + if (n >= 11 && n <= 13) { + return (n + "th") + } + switch (n % 10) { + case 1: return (n + "st") + case 2: return (n + "nd") + case 3: return (n + "rd") + } + return (n + "th") + } + + var formatter = { + // Year: 00, 01, ..., 99 + YY: function YY (date, _dateLocale, forcedYear) { + // workaround for < 1900 with new Date() + var y = this.YYYY(date, _dateLocale, forcedYear) % 100; + return y >= 0 + ? pad(y) + : '-' + pad(Math.abs(y)) + }, + + // Year: 1900, 1901, ..., 2099 + YYYY: function YYYY (date, _dateLocale, forcedYear) { + // workaround for < 1900 with new Date() + return forcedYear !== void 0 && forcedYear !== null + ? forcedYear + : date.getFullYear() + }, + + // Month: 1, 2, ..., 12 + M: function M (date) { + return date.getMonth() + 1 + }, + + // Month: 01, 02, ..., 12 + MM: function MM (date) { + return pad(date.getMonth() + 1) + }, + + // Month Short Name: Jan, Feb, ... + MMM: function MMM (date, dateLocale) { + return dateLocale.monthsShort[ date.getMonth() ] + }, + + // Month Name: January, February, ... + MMMM: function MMMM (date, dateLocale) { + return dateLocale.months[ date.getMonth() ] + }, + + // Quarter: 1, 2, 3, 4 + Q: function Q (date) { + return Math.ceil((date.getMonth() + 1) / 3) + }, + + // Quarter: 1st, 2nd, 3rd, 4th + Qo: function Qo (date) { + return getOrdinal(this.Q(date)) + }, + + // Day of month: 1, 2, ..., 31 + D: function D (date) { + return date.getDate() + }, + + // Day of month: 1st, 2nd, ..., 31st + Do: function Do (date) { + return getOrdinal(date.getDate()) + }, + + // Day of month: 01, 02, ..., 31 + DD: function DD (date) { + return pad(date.getDate()) + }, + + // Day of year: 1, 2, ..., 366 + DDD: function DDD (date) { + return getDayOfYear(date) + }, + + // Day of year: 001, 002, ..., 366 + DDDD: function DDDD (date) { + return pad(getDayOfYear(date), 3) + }, + + // Day of week: 0, 1, ..., 6 + d: function d (date) { + return date.getDay() + }, + + // Day of week: Su, Mo, ... + dd: function dd (date, dateLocale) { + return this.dddd(date, dateLocale).slice(0, 2) + }, + + // Day of week: Sun, Mon, ... + ddd: function ddd (date, dateLocale) { + return dateLocale.daysShort[ date.getDay() ] + }, + + // Day of week: Sunday, Monday, ... + dddd: function dddd (date, dateLocale) { + return dateLocale.days[ date.getDay() ] + }, + + // Day of ISO week: 1, 2, ..., 7 + E: function E (date) { + return date.getDay() || 7 + }, + + // Week of Year: 1 2 ... 52 53 + w: function w (date) { + return getWeekOfYear(date) + }, + + // Week of Year: 01 02 ... 52 53 + ww: function ww (date) { + return pad(getWeekOfYear(date)) + }, + + // Hour: 0, 1, ... 23 + H: function H (date) { + return date.getHours() + }, + + // Hour: 00, 01, ..., 23 + HH: function HH (date) { + return pad(date.getHours()) + }, + + // Hour: 1, 2, ..., 12 + h: function h (date) { + var hours = date.getHours(); + return hours === 0 + ? 12 + : (hours > 12 ? hours % 12 : hours) + }, + + // Hour: 01, 02, ..., 12 + hh: function hh (date) { + return pad(this.h(date)) + }, + + // Minute: 0, 1, ..., 59 + m: function m (date) { + return date.getMinutes() + }, + + // Minute: 00, 01, ..., 59 + mm: function mm (date) { + return pad(date.getMinutes()) + }, + + // Second: 0, 1, ..., 59 + s: function s (date) { + return date.getSeconds() + }, + + // Second: 00, 01, ..., 59 + ss: function ss (date) { + return pad(date.getSeconds()) + }, + + // 1/10 of second: 0, 1, ..., 9 + S: function S (date) { + return Math.floor(date.getMilliseconds() / 100) + }, + + // 1/100 of second: 00, 01, ..., 99 + SS: function SS (date) { + return pad(Math.floor(date.getMilliseconds() / 10)) + }, + + // Millisecond: 000, 001, ..., 999 + SSS: function SSS (date) { + return pad(date.getMilliseconds(), 3) + }, + + // Meridiem: AM, PM + A: function A (date) { + return this.H(date) < 12 ? 'AM' : 'PM' + }, + + // Meridiem: am, pm + a: function a (date) { + return this.H(date) < 12 ? 'am' : 'pm' + }, + + // Meridiem: a.m., p.m. + aa: function aa (date) { + return this.H(date) < 12 ? 'a.m.' : 'p.m.' + }, + + // Timezone: -01:00, +00:00, ... +12:00 + Z: function Z (date, _dateLocale, _forcedYear, forcedTimezoneOffset) { + var tzOffset = forcedTimezoneOffset === void 0 || forcedTimezoneOffset === null + ? date.getTimezoneOffset() + : forcedTimezoneOffset; + + return formatTimezone(tzOffset, ':') + }, + + // Timezone: -0100, +0000, ... +1200 + ZZ: function ZZ (date, _dateLocale, _forcedYear, forcedTimezoneOffset) { + var tzOffset = forcedTimezoneOffset === void 0 || forcedTimezoneOffset === null + ? date.getTimezoneOffset() + : forcedTimezoneOffset; + + return formatTimezone(tzOffset) + }, + + // Seconds timestamp: 512969520 + X: function X (date) { + return Math.floor(date.getTime() / 1000) + }, + + // Milliseconds timestamp: 512969520900 + x: function x (date) { + return date.getTime() + } + }; + + function formatDate (val, mask, dateLocale, __forcedYear, __forcedTimezoneOffset) { + if ( + (val !== 0 && !val) || + val === Infinity || + val === -Infinity + ) { + return + } + + var date = new Date(val); + + if (isNaN(date)) { + return + } + + if (mask === void 0) { + mask = defaultMask; + } + + var locale = getDateLocale(dateLocale, lang.props); + + return mask.replace( + token, + function (match, text) { return match in formatter + ? formatter[ match ](date, locale, __forcedYear, __forcedTimezoneOffset) + : (text === void 0 ? match : text.split('\\]').join(']')); } + ) + } + + function clone (date) { + return isDate(date) === true + ? new Date(date.getTime()) + : date + } + + var date = { + isValid: isValid, + extractDate: extractDate, + buildDate: buildDate, + getDayOfWeek: getDayOfWeek, + getWeekOfYear: getWeekOfYear, + isBetweenDates: isBetweenDates, + addToDate: addToDate, + subtractFromDate: subtractFromDate, + adjustDate: adjustDate, + startOfDate: startOfDate, + endOfDate: endOfDate, + getMaxDate: getMaxDate, + getMinDate: getMinDate, + getDateDiff: getDateDiff, + getDayOfYear: getDayOfYear, + inferDateFormat: inferDateFormat, + getDateBetween: getDateBetween, + isSameDate: isSameDate, + daysInMonth: daysInMonth, + formatDate: formatDate, + clone: clone + }; + + var yearsInterval = 20; + var views = [ 'Calendar', 'Years', 'Months' ]; + var viewIsValid = function (v) { return views.includes(v); }; + var yearMonthValidator = function (v) { return /^-?[\d]+\/[0-1]\d$/.test(v); }; + var modelNavigationValidator = function (v) { return [ 'from', 'to', false ].indexOf(v) > -1; }; + var hashToInt = function (s) { + if (typeof s !== 'string') { + return NaN + } + + var splits = s.split('/'); + + return parseInt(splits[0], 10) * 10000 + parseInt(splits.slice(1).join(''), 10) + }; + var lineStr = ' \u2014 '; + + function modelIsValid (date) { + return date.dateHash !== null && + date.day !== null && + date.month !== null && + date.year !== null + } + + var QDate = Vue__default["default"].extend({ + name: 'QDate', + + mixins: [ DateTimeMixin ], + + directives: { + KeyGroupNavigation: KeyGroupNavigation + }, + + props: { + multiple: Boolean, + range: Boolean, + + dayAsRange: Boolean, + + title: String, + subtitle: String, + + mask: { + // this mask is forced + // when using persian calendar + default: 'YYYY/MM/DD' + }, + + defaultYearMonth: { + type: String, + validator: yearMonthValidator + }, + + yearsInMonthView: Boolean, + + events: [ Array, Function ], + eventColor: [ String, Function ], + + emitImmediately: Boolean, + + options: [ Array, Function ], + + modelNavigation: { + type: [ String, Boolean ], + default: 'from', + validator: modelNavigationValidator + }, + + navigationMinYearMonth: { + type: String, + validator: yearMonthValidator + }, + + navigationMaxYearMonth: { + type: String, + validator: yearMonthValidator + }, + + noUnset: Boolean, + + firstDayOfWeek: [ String, Number ], + todayBtn: Boolean, + minimal: Boolean, + defaultView: { + type: String, + default: 'Calendar', + validator: viewIsValid + } + }, + + data: function data () { + var + innerMask = this.__getMask(), + innerLocale = this.__getLocale(), + viewModel = this.__getViewModel(innerMask, innerLocale), + year = viewModel.year, + direction = this.$q.lang.rtl === true ? 'right' : 'left'; + + return { + view: this.defaultView, + monthDirection: direction, + yearDirection: direction, + startYear: year - (year % yearsInterval) - (year < 0 ? yearsInterval : 0), + editRange: void 0, + innerMask: innerMask, + innerLocale: innerLocale, + viewModel: viewModel // model of current calendar view + } + }, + + watch: { + value: function value (v) { + if (this.lastEmitValue === v) { + this.lastEmitValue = 0; + } + else { + var ref = this.__getViewModel(this.innerMask, this.innerLocale); + var year = ref.year; + var month = ref.month; + this.__updateViewModel(year, month); + } + }, + + view: function view () { + var this$1$1 = this; + + this.$nextTick(function () { + this$1$1.$refs.viewTarget !== void 0 && this$1$1.$refs.viewTarget.$el.focus(); + }); + }, + + 'viewModel.year': function viewModel_year (year) { + this.$emit('navigation', { year: year, month: this.viewModel.month }); + }, + + 'viewModel.month': function viewModel_month (month) { + this.$emit('navigation', { year: this.viewModel.year, month: month }); + }, + + computedMask: function computedMask (val) { + this.__updateValue(val, this.innerLocale, 'mask'); + this.innerMask = val; + }, + + computedLocale: function computedLocale (val) { + this.__updateValue(this.innerMask, val, 'locale'); + this.innerLocale = val; + } + }, + + computed: { + classes: function classes () { + var type = this.landscape === true ? 'landscape' : 'portrait'; + return "q-date q-date--" + type + " q-date--" + type + "-" + (this.minimal === true ? 'minimal' : 'standard') + + " q-date--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + + (this.bordered === true ? ' q-date--bordered' : '') + + (this.square === true ? ' q-date--square no-border-radius' : '') + + (this.flat === true ? ' q-date--flat no-shadow' : '') + + (this.disable === true ? ' disabled' : (this.readonly === true ? ' q-date--readonly' : '')) + }, + + isImmediate: function isImmediate () { + return this.emitImmediately === true && + this.multiple !== true && + this.range !== true + }, + + normalizedModel: function normalizedModel () { + return Array.isArray(this.value) === true + ? this.value + : (this.value !== null && this.value !== void 0 ? [ this.value ] : []) + }, + + daysModel: function daysModel () { + var this$1$1 = this; + + return this.normalizedModel + .filter(function (date) { return typeof date === 'string'; }) + .map(function (date) { return this$1$1.__decodeString(date, this$1$1.innerMask, this$1$1.innerLocale); }) + .filter(modelIsValid) + }, + + rangeModel: function rangeModel () { + var this$1$1 = this; + + var fn = function (date) { return this$1$1.__decodeString(date, this$1$1.innerMask, this$1$1.innerLocale); }; + return this.normalizedModel + .filter(function (date) { return isObject(date) === true && date.from !== void 0 && date.to !== void 0; }) + .map(function (range) { + var from = fn(range.from); + var to = fn(range.to); + + return hashToInt(from.dateHash) <= hashToInt(to.dateHash) + ? { from: from, to: to } + : { from: to, to: from } + }) + .filter(function (range) { return modelIsValid(range.from) === true && modelIsValid(range.to) === true; }) + }, + + getNativeDateFn: function getNativeDateFn () { + return this.calendar !== 'persian' + ? function (model) { + var date = __safeCreateDate(model.year, model.month - 1, model.day); + date.setFullYear(model.year); + return date + } + : function (model) { + var gDate = toGregorian(model.year, model.month, model.day); + var date = __safeCreateDate(gDate.gy, gDate.gm - 1, gDate.gd); + date.setFullYear(model.year); + return date + } + }, + + encodeObjectFn: function encodeObjectFn () { + var this$1$1 = this; + + return this.calendar === 'persian' + ? this.__getDayHash + : function (date, mask, locale) { return formatDate( + __safeCreateDate( + date.year, + date.month - 1, + date.day, + date.hour, + date.minute, + date.second, + date.millisecond + ), + mask === void 0 ? this$1$1.innerMask : mask, + locale === void 0 ? this$1$1.innerLocale : locale, + date.year, + date.timezoneOffset + ); } + }, + + daysInModel: function daysInModel () { + var this$1$1 = this; + + return this.daysModel.length + this.rangeModel.reduce( + function (acc, range) { return acc + 1 + getDateDiff( + this$1$1.getNativeDateFn(range.to), + this$1$1.getNativeDateFn(range.from) + ); }, + 0 + ) + }, + + headerTitle: function headerTitle () { + if (this.title !== void 0 && this.title !== null && this.title.length > 0) { + return this.title + } + + if (this.editRange !== void 0) { + var model$1 = this.editRange.init; + var date$1 = this.getNativeDateFn(model$1); + + return this.innerLocale.daysShort[ date$1.getDay() ] + ', ' + + this.innerLocale.monthsShort[ model$1.month - 1 ] + ' ' + + model$1.day + lineStr + '?' + } + + if (this.daysInModel === 0) { + return lineStr + } + + if (this.daysInModel > 1) { + return ((this.daysInModel) + " " + (this.innerLocale.pluralDay)) + } + + var model = this.minSelectedModel; + var date = this.getNativeDateFn(model); + + if (isNaN(date.valueOf()) === true) { + return lineStr + } + + if (this.innerLocale.headerTitle !== void 0) { + return this.innerLocale.headerTitle(date, model) + } + + return this.innerLocale.daysShort[ date.getDay() ] + ', ' + + this.innerLocale.monthsShort[ model.month - 1 ] + ' ' + + model.day + }, + + headerSubtitle: function headerSubtitle () { + if (this.subtitle !== void 0 && this.subtitle !== null && this.subtitle.length > 0) { + return this.subtitle + } + + if (this.daysInModel === 0) { + return lineStr + } + + if (this.daysInModel > 1) { + var from = this.minSelectedModel; + var to = this.maxSelectedModel; + var month = this.innerLocale.monthsShort; + + return month[from.month - 1] + ( + from.year !== to.year + ? ' ' + from.year + lineStr + month[to.month - 1] + ' ' + : ( + from.month !== to.month + ? lineStr + month[to.month - 1] + : '' + ) + ) + ' ' + to.year + } + + return this.minSelectedModel.year + }, + + minSelectedModel: function minSelectedModel () { + var model = this.daysModel.concat(this.rangeModel.map(function (range) { return range.from; })) + .sort(function (a, b) { return a.year - b.year || a.month - b.month; }); + + return model[0] + }, + + maxSelectedModel: function maxSelectedModel () { + var model = this.daysModel.concat(this.rangeModel.map(function (range) { return range.to; })) + .sort(function (a, b) { return b.year - a.year || b.month - a.month; }); + + return model[0] + }, + + dateArrow: function dateArrow () { + var val = [ this.$q.iconSet.datetime.arrowLeft, this.$q.iconSet.datetime.arrowRight ]; + return this.$q.lang.rtl === true ? val.reverse() : val + }, + + computedFirstDayOfWeek: function computedFirstDayOfWeek () { + return this.firstDayOfWeek !== void 0 + ? Number(this.firstDayOfWeek) + : this.innerLocale.firstDayOfWeek + }, + + daysOfWeek: function daysOfWeek () { + var + days = this.innerLocale.daysShort, + first = this.computedFirstDayOfWeek; + + return first > 0 + ? days.slice(first, 7).concat(days.slice(0, first)) + : days + }, + + daysInMonth: function daysInMonth () { + var ref = this.viewModel; + var year = ref.year; + var month = ref.month; + + if (this.calendar !== 'persian') { + return { + prev: (__safeCreateDate(year, month - 1, 0)).getDate(), + cur: (__safeCreateDate(year, month, 0)).getDate(), + next: (__safeCreateDate(year, month + 1, 0)).getDate() + } + } + + return { + prev: jalaaliMonthLength(month === 1 ? year - 1 : year, month === 1 ? 12 : month - 1), + cur: jalaaliMonthLength(year, month), + next: jalaaliMonthLength(month === 12 ? year + 1 : year, month === 12 ? 1 : month + 1) + } + }, + + today: function today () { + return this.__getCurrentDate() + }, + + evtColor: function evtColor () { + var this$1$1 = this; + + return typeof this.eventColor === 'function' + ? this.eventColor + : function () { return this$1$1.eventColor; } + }, + + minNav: function minNav () { + if (this.navigationMinYearMonth !== void 0) { + var data = this.navigationMinYearMonth.split('/'); + return { year: parseInt(data[0], 10), month: parseInt(data[1], 10) } + } + }, + + maxNav: function maxNav () { + if (this.navigationMaxYearMonth !== void 0) { + var data = this.navigationMaxYearMonth.split('/'); + return { year: parseInt(data[0], 10), month: parseInt(data[1], 10) } + } + }, + + navBoundaries: function navBoundaries () { + var data = { + month: { prev: true, next: true }, + year: { prev: true, next: true } + }; + + if (this.minNav !== void 0 && this.minNav.year >= this.viewModel.year) { + data.year.prev = false; + if (this.minNav.year === this.viewModel.year && this.minNav.month >= this.viewModel.month) { + data.month.prev = false; + } + } + + if (this.maxNav !== void 0 && this.maxNav.year <= this.viewModel.year) { + data.year.next = false; + if (this.maxNav.year === this.viewModel.year && this.maxNav.month <= this.viewModel.month) { + data.month.next = false; + } + } + + return data + }, + + daysMap: function daysMap () { + var this$1$1 = this; + + var map = {}; + + this.daysModel.forEach(function (entry) { + var hash = this$1$1.__getMonthHash(entry); + + if (map[hash] === void 0) { + map[hash] = []; + } + + map[hash].push(entry.day); + }); + + return map + }, + + rangeMap: function rangeMap () { + var this$1$1 = this; + + var map = {}; + + this.rangeModel.forEach(function (entry) { + var fromHash = this$1$1.__getMonthHash(entry.from); + var toHash = this$1$1.__getMonthHash(entry.to); + var toHashInt = hashToInt(toHash); + + if (map[fromHash] === void 0) { + map[fromHash] = []; + } + + map[fromHash].push({ + from: entry.from.day, + to: fromHash === toHash ? entry.to.day : void 0, + range: entry + }); + + if (hashToInt(fromHash) < toHashInt) { + var ref = entry.from; + var year = ref.year; + var month = ref.month; + var cur = month < 12 + ? { year: year, month: month + 1 } + : { year: year + 1, month: 1 }; + var hash = this$1$1.__getMonthHash(cur); + + while (hashToInt(hash) <= toHashInt) { + if (map[hash] === void 0) { + map[hash] = []; + } + + map[hash].push({ + from: void 0, + to: hash === toHash ? entry.to.day : void 0, + range: entry + }); + + cur.month++; + if (cur.month > 12) { + cur.year++; + cur.month = 1; + } + + hash = this$1$1.__getMonthHash(cur); + } + } + }); + + return map + }, + + rangeViewMap: function rangeViewMap () { + var this$1$1 = this; + + if (this.editRange === void 0) { + return {} + } + var map = {}; + + var ref = this.editRange; + var init = ref.init; + var initHash = ref.initHash; + var final = ref.final; + var finalHash = ref.finalHash; + + var ref$1 = hashToInt(initHash) <= hashToInt(finalHash) + ? [ init, final ] + : [ final, init ]; + var from = ref$1[0]; + var to = ref$1[1]; + + var fromHashInt = hashToInt(this.__getMonthHash(from)); + var toHashInt = hashToInt(this.__getMonthHash(to)); + + var months = [ 'prev', 'cur', 'next' ]; + + months.forEach(function (month) { + var monthHashInt = hashToInt(this$1$1.viewMonthHash[month]); + + if (fromHashInt > monthHashInt || toHashInt < monthHashInt) { + return + } + + var view = { + includeFrom: fromHashInt === monthHashInt, + includeTo: toHashInt === monthHashInt + }; + + view.from = view.includeFrom ? from.day : 1; + view.to = view.includeTo ? to.day : this$1$1.daysInMonth[month]; + + map[this$1$1.viewMonthHash[month]] = view; + }); + + return map + }, + + viewMonthHash: function viewMonthHash () { + var ref = this.viewModel; + var year = ref.year; + var month = ref.month; + return { + prev: this.__getMonthHash({ + year: month === 1 ? year - 1 : year, + month: month === 1 ? 12 : month - 1 + }), + cur: this.__getMonthHash({ year: year, month: month }), + next: this.__getMonthHash({ + year: month === 12 ? year + 1 : year, + month: month === 12 ? 1 : month + 1 + }) + } + }, + + selectionDaysMap: function selectionDaysMap () { + var this$1$1 = this; + + var map = {}; + + if (this.options === void 0) { + for (var i = 1; i <= this.daysInMonth.cur; i++) { + map[i] = true; + } + + return map + } + + var fn = typeof this.options === 'function' + ? this.options + : function (date) { return this$1$1.options.includes(date); }; + + for (var i$1 = 1; i$1 <= this.daysInMonth.cur; i$1++) { + var dayHash = this.viewMonthHash.cur + '/' + pad(i$1); + map[i$1] = fn(dayHash); + } + + return map + }, + + eventDaysMap: function eventDaysMap () { + var this$1$1 = this; + + var map = {}; + + if (this.events === void 0) { + for (var i = 1; i <= this.daysInMonth.cur; i++) { + map[i] = false; + } + } + else { + var fn = typeof this.events === 'function' + ? this.events + : function (date) { return this$1$1.events.includes(date); }; + + for (var i$1 = 1; i$1 <= this.daysInMonth.cur; i$1++) { + var dayHash = this.viewMonthHash.cur + '/' + pad(i$1); + map[i$1] = fn(dayHash) === true && this.evtColor(dayHash); + } + } + + return map + }, + + startFillDays: function startFillDays () { + var date; + var ref = this.viewModel; + var year = ref.year; + var month = ref.month; + + if (this.calendar !== 'persian') { + date = __safeCreateDate(year, month - 1, 1); + } + else { + var gDate = toGregorian(year, month, 1); + date = __safeCreateDate(gDate.gy, gDate.gm - 1, gDate.gd); + } + + var days = date.getDay() - this.computedFirstDayOfWeek - 1; + + return { + days: days < 0 ? days + 7 : days, + endDay: this.daysInMonth.prev + } + }, + + days: function days () { + var res = []; + var ref = this.startFillDays; + var days = ref.days; + var endDay = ref.endDay; + + if (days < 6) { + for (var i = endDay - days; i <= endDay; i++) { + res.push({ i: i, day: this.viewMonthHash.prev + '/' + pad(i), fill: true }); + } + + this.__fillDaysMeta(res, this.viewMonthHash.prev, endDay, -endDay + days + 1, endDay - days, endDay); + } + + var index = res.length; + + for (var i$1 = 1; i$1 <= this.daysInMonth.cur; i$1++) { + var day = { i: i$1, day: this.viewMonthHash.cur + '/' + pad(i$1), event: this.eventDaysMap[i$1], classes: [] }; + + if (this.selectionDaysMap[i$1] === true) { + day.in = true; + day.flat = true; + } + + res.push(day); + } + + this.__fillDaysMeta(res, this.viewMonthHash.cur, this.daysInMonth.cur, index, 1, this.daysInMonth.cur); + + if (this.viewModel.year === this.today.year && this.viewModel.month === this.today.month) { + res[index + this.today.day - 1].today = true; + } + + var left = res.length % 7; + if (left > 0) { + var afterDays = 7 - left; + for (var i$2 = 1; i$2 <= afterDays; i$2++) { + res.push({ i: i$2, day: this.viewMonthHash.next + '/' + pad(i$2), fill: true }); + } + + this.__fillDaysMeta(res, this.viewMonthHash.next, this.daysInMonth.next, index + this.daysInMonth.cur, 1, afterDays); + } + + res.forEach(function (day) { + var cls = 'q-date__calendar-item '; + + cls += day.fill === true + ? 'q-date__calendar-item--fill' + : ("q-date__calendar-item--" + (day.in === true ? 'in' : 'out')); + + if (day.range !== void 0 || day.editRange === true) { + cls += " text-" + (day.color); + } + + if (day.range !== void 0 && (day.rangeTo !== true || day.rangeFrom !== true)) { + cls += " q-date__range" + (day.rangeFrom === true ? '-from' : (day.rangeTo === true ? '-to' : '')); + } + + if (day.editRange === true) { + cls += " q-date__edit-range" + (day.editRangeFrom === true ? '-from' : '') + (day.editRangeTo === true ? '-to' : ''); + } + + day.classes = cls; + }); + + return res + }, + + attrs: function attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + } + }, + + methods: { + setToday: function setToday () { + this.__toggleDate(this.today, this.__getMonthHash(this.today)); + this.setCalendarTo(this.today.year, this.today.month); + }, + + setView: function setView (view) { + if (viewIsValid(view) === true) { + this.view = view; + } + }, + + offsetCalendar: function offsetCalendar (type, descending) { + if (['month', 'year'].includes(type)) { + this[("__goTo" + (type === 'month' ? 'Month' : 'Year'))]( + descending === true ? -1 : 1 + ); + } + }, + + setCalendarTo: function setCalendarTo (year, month) { + this.view = 'Calendar'; + this.__updateViewModel(year, month); + }, + + setEditingRange: function setEditingRange (from, to, modelNavigation) { + var this$1$1 = this; + + if (modelNavigation === void 0) { + modelNavigation = this.modelNavigation; + } + + if (this.range === false || !from) { + this.editRange = void 0; + return + } + + var init = Object.assign(Object.assign({}, this.viewModel), from); + var final = to !== void 0 + ? Object.assign(Object.assign({}, this.viewModel), to) + : init; + + this.editRange = { + init: init, + initHash: this.__getDayHash(init), + final: final, + finalHash: this.__getDayHash(final) + }; + + if ([ 'from', 'to' ].indexOf(modelNavigation) > -1) { + this.$nextTick(function () { + this$1$1.setCalendarTo( + modelNavigation === 'from' ? init.year : final.year, + modelNavigation === 'from' ? init.month : final.month + ); + }); + } + }, + + __getMask: function __getMask () { + return this.calendar === 'persian' ? 'YYYY/MM/DD' : this.mask + }, + + __decodeString: function __decodeString (date, mask, locale) { + return __splitDate( + date, + mask, + locale, + this.calendar, + { + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + } + ) + }, + + __getViewModel: function __getViewModel (mask, locale) { + if (this.modelNavigation === false) { + return this.viewModel === void 0 + ? this.__getDefaultViewModel() + : this.viewModel + } + + var model = Array.isArray(this.value) === true + ? this.value + : (this.value ? [ this.value ] : []); + + if (model.length === 0) { + return this.__getDefaultViewModel() + } + + var target = model[this.modelNavigation === 'from' ? 0 : model.length - 1]; + + var decoded = this.__decodeString( + target.from !== void 0 ? target.from : target, + mask, + locale + ); + + return decoded.dateHash === null + ? this.__getDefaultViewModel() + : decoded + }, + + __getDefaultViewModel: function __getDefaultViewModel () { + var year, month; + + if (this.defaultYearMonth !== void 0) { + var d = this.defaultYearMonth.split('/'); + year = parseInt(d[0], 10); + month = parseInt(d[1], 10); + } + else { + // may come from data() where computed + // props are not yet available + var d$1 = this.today !== void 0 + ? this.today + : this.__getCurrentDate(); + + year = d$1.year; + month = d$1.month; + } + + return { + year: year, + month: month, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + dateHash: year + '/' + pad(month) + '/01' + } + }, + + __getHeader: function __getHeader (h) { + var this$1$1 = this; + + if (this.minimal === true) { return } + + return h('div', { + staticClass: 'q-date__header', + class: this.headerClass + }, [ + h('div', { + staticClass: 'relative-position' + }, [ + h('transition', { + props: { + name: 'q-transition--fade' + } + }, [ + h('div', { + key: 'h-yr-' + this.headerSubtitle, + staticClass: 'q-date__header-subtitle q-date__header-link', + class: this.view === 'Years' ? 'q-date__header-link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'vY', { + click: function () { this$1$1.view = 'Years'; }, + keyup: function (e) { e.keyCode === 13 && (this$1$1.view = 'Years'); } + }) + }, [ this.headerSubtitle ]) + ]) + ]), + + h('div', { + staticClass: 'q-date__header-title relative-position flex no-wrap' + }, [ + h('div', { + staticClass: 'relative-position col' + }, [ + h('transition', { + props: { + name: 'q-transition--fade' + } + }, [ + h('div', { + key: 'h-sub' + this.headerTitle, + staticClass: 'q-date__header-title-label q-date__header-link', + class: this.view === 'Calendar' ? 'q-date__header-link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'vC', { + click: function () { this$1$1.view = 'Calendar'; }, + keyup: function (e) { e.keyCode === 13 && (this$1$1.view = 'Calendar'); } + }) + }, [ this.headerTitle ]) + ]) + ]), + + this.todayBtn === true ? h(QBtn, { + key: 'today', + staticClass: 'q-date__header-today self-start', + props: { + icon: this.$q.iconSet.datetime.today, + flat: true, + size: 'sm', + round: true, + tabindex: this.computedTabindex + }, + on: cache(this, 'today', { click: this.setToday }) + }) : null + ]) + ]) + }, + + __getNavigation: function __getNavigation (h, ref) { + var this$1$1 = this; + var label = ref.label; + var view = ref.view; + var key = ref.key; + var dir = ref.dir; + var goTo = ref.goTo; + var boundaries = ref.boundaries; + var cls = ref.cls; + + return [ + h('div', { + staticClass: 'row items-center q-date__arrow' + }, [ + h(QBtn, { + key: 'go-#' + view, + props: { + round: true, + dense: true, + size: 'sm', + flat: true, + icon: this.dateArrow[0], + tabindex: this.computedTabindex, + disable: boundaries.prev === false + }, + on: cache(this, 'go-#' + view, { click: function click () { goTo(-1); } }) + }) + ]), + + h('div', { + staticClass: 'relative-position overflow-hidden flex flex-center' + cls + }, [ + h('transition', { + props: { + name: 'q-transition--jump-' + dir + } + }, [ + h('div', { key: key }, [ + h(QBtn, { + key: 'view#' + view, + props: { + flat: true, + dense: true, + noCaps: true, + label: label, + tabindex: this.computedTabindex + }, + on: cache(this, 'view#' + view, { click: function () { this$1$1.view = view; } }) + }) + ]) + ]) + ]), + + h('div', { + staticClass: 'row items-center q-date__arrow' + }, [ + h(QBtn, { + key: 'go+#' + view, + props: { + round: true, + dense: true, + size: 'sm', + flat: true, + icon: this.dateArrow[1], + tabindex: this.computedTabindex, + disable: boundaries.next === false + }, + on: cache(this, 'go+#' + view, { click: function click () { goTo(1); } }) + }) + ]) + ] + }, + + __getCalendarView: function __getCalendarView (h) { + var this$1$1 = this; + + var dayContentFn = this.$scopedSlots.day !== void 0 + ? this.$scopedSlots.day + : function (day) { return (day.event !== false ? [ + h('div', { staticClass: 'q-date__event bg-' + day.event }) + ] : null); }; + var dayFillContentFn = this.$scopedSlots.day !== void 0 + ? this.$scopedSlots.day + : function (day) { return h('div', [ day.i ]); }; + + var selectedDay = this.days.find(function (day) { return day.unelevated === true; }); + var viewDay = selectedDay === void 0 ? this.days.find(function (day) { return day.today === true; }) : selectedDay; + var viewTarget = viewDay === void 0 ? 1 : viewDay.i; + var calCachePrefix = this.calendar === 'persian' ? 'dayP#' : 'day#'; + + return [ + h('div', { + key: 'calendar-view', + staticClass: 'q-date__view q-date__calendar' + }, [ + h('div', { + staticClass: 'q-date__navigation row items-center no-wrap' + }, this.__getNavigation(h, { + label: this.innerLocale.months[ this.viewModel.month - 1 ], + view: 'Months', + key: this.viewModel.month, + dir: this.monthDirection, + goTo: this.__goToMonth, + boundaries: this.navBoundaries.month, + cls: ' col' + }).concat(this.__getNavigation(h, { + label: this.viewModel.year, + view: 'Years', + key: this.viewModel.year, + dir: this.yearDirection, + goTo: this.__goToYear, + boundaries: this.navBoundaries.year, + cls: '' + }))), + + h('div', { + staticClass: 'q-date__calendar-weekdays row items-center no-wrap' + }, this.daysOfWeek.map(function (day) { return h('div', { staticClass: 'q-date__calendar-item' }, [ h('div', [ day ]) ]); })), + + h('div', { + key: 'kNavC', + staticClass: 'q-date__calendar-days-container relative-position overflow-hidden', + directives: cache(this, 'kNavC', [{ + name: 'key-group-navigation', + arg: '7' + }]) + }, [ + h('transition', { + props: { + name: 'q-transition--slide-' + this.monthDirection + } + }, [ + h('div', { + key: this.viewMonthHash.cur, + staticClass: 'q-date__calendar-days fit' + }, this.days.map(function (day) { return h('div', { staticClass: day.classes }, [ + day.in === true + ? h(QBtn, { + key: calCachePrefix + day.i, + staticClass: day.today === true ? 'q-date__today' : null, + ref: viewTarget === day.i ? 'viewTarget' : void 0, + props: { + dense: true, + flat: day.flat, + unelevated: day.unelevated, + color: day.color, + textColor: day.textColor, + label: day.i, + tabindex: this$1$1.computedTabindex + }, + on: cache(this$1$1, calCachePrefix + day.i, { + click: function () { this$1$1.__onDayClick(day.i); }, + focusin: function () { this$1$1.__onDayMouseover(day.i); }, + mouseenter: function () { this$1$1.__onDayMouseover(day.i); } + }) + }, dayContentFn(day)) + : dayFillContentFn(day) + ]); })) + ]) + ]) + ]) + ] + }, + + __getMonthsView: function __getMonthsView (h) { + var this$1$1 = this; + + var currentYear = this.viewModel.year === this.today.year; + var isDisabled = function (month) { + return ( + (this$1$1.minNav !== void 0 && this$1$1.viewModel.year === this$1$1.minNav.year && this$1$1.minNav.month > month) || + (this$1$1.maxNav !== void 0 && this$1$1.viewModel.year === this$1$1.maxNav.year && this$1$1.maxNav.month < month) + ) + }; + var activeProps = { + unelevated: true, + color: this.computedColor, + textColor: this.computedTextColor + }; + var inactiveProps = { flat: true }; + + var content = this.innerLocale.monthsShort.map(function (month, i) { + return h('div', { + staticClass: 'q-date__months-item flex flex-center' + }, [ + h(QBtn, { + key: 'month#' + i, + staticClass: currentYear === true && this$1$1.today.month === i + 1 ? 'q-date__today' : null, + ref: this$1$1.viewModel.month === i + 1 ? 'viewTarget' : void 0, + props: Object.assign( + { + label: month, + tabindex: this$1$1.computedTabindex, + disable: isDisabled(i + 1) + }, + this$1$1.viewModel.month === i + 1 + ? activeProps + : inactiveProps + ), + on: cache(this$1$1, 'month#' + i, { click: function () { this$1$1.__setMonth(i + 1); } }) + }) + ]) + }); + + this.yearsInMonthView === true && content.unshift( + h('div', { staticClass: 'row no-wrap full-width' }, [ + this.__getNavigation(h, { + label: this.viewModel.year, + view: 'Years', + key: this.viewModel.year, + dir: this.yearDirection, + goTo: this.__goToYear, + boundaries: this.navBoundaries.year, + cls: ' col' + }) + ]) + ); + + return h('div', { + key: 'kNavYM', + staticClass: 'q-date__view q-date__months flex flex-center', + directives: cache(this, 'kNavYM', [{ + name: 'key-group-navigation', + arg: '3' + }]) + }, content) + }, + + __getYearsView: function __getYearsView (h) { + var this$1$1 = this; + + var + start = this.startYear, + stop = start + yearsInterval, + years = [], + viewTarget = this.viewModel.year >= start && this.viewModel.year <= stop + ? this.viewModel.year + : ( + this.today.year >= start && this.today.year <= stop + ? this.today.year + : start + ); + + var isDisabled = function (year) { + return ( + (this$1$1.minNav !== void 0 && this$1$1.minNav.year > year) || + (this$1$1.maxNav !== void 0 && this$1$1.maxNav.year < year) + ) + }; + + var loop = function ( i ) { + var active = this$1$1.viewModel.year === i; + + years.push( + h('div', { + staticClass: 'q-date__years-item flex flex-center' + }, [ + h(QBtn, { + key: 'yr#' + i, + staticClass: this$1$1.today.year === i ? 'q-date__today' : null, + ref: viewTarget === i ? 'viewTarget' : void 0, + props: { + flat: active !== true, + label: i, + dense: true, + unelevated: active, + color: active === true ? this$1$1.computedColor : null, + textColor: active === true ? this$1$1.computedTextColor : null, + tabindex: this$1$1.computedTabindex, + disable: isDisabled(i) + }, + on: cache(this$1$1, 'yr#' + i, { click: function () { this$1$1.__setYear(i); } }) + }) + ]) + ); + }; + + for (var i = start; i <= stop; i++) loop( i ); + + return h('div', { + staticClass: 'q-date__view q-date__years flex flex-center' + }, [ + h('div', { + staticClass: 'col-auto' + }, [ + h(QBtn, { + key: 'y-', + props: { + round: true, + dense: true, + flat: true, + icon: this.dateArrow[0], + tabindex: this.computedTabindex, + disable: isDisabled(start) + }, + on: cache(this, 'y-', { click: function () { this$1$1.startYear -= yearsInterval; } }) + }) + ]), + + h('div', { + key: 'kNavYM', + staticClass: 'q-date__years-content col self-stretch row items-center', + directives: cache(this, 'kNavYM', [{ + name: 'key-group-navigation', + arg: '3' + }]) + }, years), + + h('div', { + staticClass: 'col-auto' + }, [ + h(QBtn, { + key: 'y+', + props: { + round: true, + dense: true, + flat: true, + icon: this.dateArrow[1], + tabindex: this.computedTabindex, + disable: isDisabled(stop) + }, + on: cache(this, 'y+', { click: function () { this$1$1.startYear += yearsInterval; } }) + }) + ]) + ]) + }, + + __fillDaysMeta: function __fillDaysMeta (res, monthHash, daysInMonth, index, dayFrom, dayTo) { + var this$1$1 = this; + + // if current view has days in model + if (this.daysMap[monthHash] !== void 0) { + this.daysMap[monthHash] + .filter(function (day) { return day >= dayFrom && day <= dayTo; }) + .forEach(function (day) { + var i = index + day - 1; + Object.assign(res[i], { + selected: true, + unelevated: true, + flat: false, + color: this$1$1.computedColor, + textColor: this$1$1.computedTextColor + }); + }); + } + + // if current view has ranges in model + if (this.rangeMap[monthHash] !== void 0) { + this.rangeMap[monthHash].forEach(function (entry) { + var from = index + Math.max(dayFrom, entry.from === void 0 ? 1 : entry.from) - 1; + var to = index + Math.min(dayTo, entry.to === void 0 ? daysInMonth : entry.to) - 1; + + for (var day = from; day <= to; day++) { + Object.assign(res[day], { + range: entry.range, + unelevated: true, + color: this$1$1.computedColor, + textColor: this$1$1.computedTextColor + }); + } + + if (entry.from >= dayFrom && entry.from <= dayTo) { + Object.assign(res[from], { + rangeFrom: true, + flat: false + }); + } + + if (entry.to >= dayFrom && entry.to <= dayTo) { + Object.assign(res[to], { + rangeTo: true, + flat: false + }); + } + }); + } + + if (this.rangeViewMap[monthHash] !== void 0) { + var from = index + Math.max(dayFrom, this.rangeViewMap[monthHash].from) - 1; + var to = index + Math.min(dayTo, this.rangeViewMap[monthHash].to) - 1; + + for (var day = from; day <= to; day++) { + res[day].color = this.computedColor; + res[day].editRange = true; + } + + if ( + this.rangeViewMap[monthHash].includeFrom === true && + this.rangeViewMap[monthHash].from >= dayFrom && + this.rangeViewMap[monthHash].from <= dayTo + ) { + res[from].editRangeFrom = true; + } + + if ( + this.rangeViewMap[monthHash].includeTo === true && + this.rangeViewMap[monthHash].to >= dayFrom && + this.rangeViewMap[monthHash].to <= dayTo + ) { + res[to].editRangeTo = true; + } + } + }, + + __goToMonth: function __goToMonth (offset) { + var year = this.viewModel.year; + var month = Number(this.viewModel.month) + offset; + + if (month === 13) { + month = 1; + year++; + } + else if (month === 0) { + month = 12; + year--; + } + + this.__updateViewModel(year, month); + this.isImmediate === true && this.__emitImmediately('month'); + }, + + __goToYear: function __goToYear (offset) { + var year = Number(this.viewModel.year) + offset; + this.__updateViewModel(year, this.viewModel.month); + this.isImmediate === true && this.__emitImmediately('year'); + }, + + __setYear: function __setYear (year) { + this.__updateViewModel(year, this.viewModel.month); + this.view = this.defaultView === 'Years' ? 'Months' : 'Calendar'; + this.isImmediate === true && this.__emitImmediately('year'); + }, + + __setMonth: function __setMonth (month) { + this.__updateViewModel(this.viewModel.year, month); + this.view = 'Calendar'; + this.isImmediate === true && this.__emitImmediately('month'); + }, + + __getMonthHash: function __getMonthHash (date) { + return date.year + '/' + pad(date.month) + }, + + __toggleDate: function __toggleDate (date, monthHash) { + var month = this.daysMap[monthHash]; + var fn = month !== void 0 && month.includes(date.day) === true + ? this.__removeFromModel + : this.__addToModel; + + fn(date); + }, + + __getShortDate: function __getShortDate (date) { + return { year: date.year, month: date.month, day: date.day } + }, + + __onDayClick: function __onDayClick (dayIndex) { + var day = Object.assign({}, this.viewModel, {day: dayIndex}); + + if (this.range === false) { + this.__toggleDate(day, this.viewMonthHash.cur); + return + } + + if (this.editRange === void 0) { + var dayProps = this.days.find(function (day) { return day.fill !== true && day.i === dayIndex; }); + + if (this.noUnset !== true && dayProps.range !== void 0) { + this.__removeFromModel({ target: day, from: dayProps.range.from, to: dayProps.range.to }); + return + } + + if (dayProps.selected === true) { + this.__removeFromModel(day); + return + } + + var initHash = this.__getDayHash(day); + + this.editRange = { + init: day, + initHash: initHash, + final: day, + finalHash: initHash + }; + + this.$emit('range-start', this.__getShortDate(day)); + } + else { + var + initHash$1 = this.editRange.initHash, + finalHash = this.__getDayHash(day), + payload = hashToInt(initHash$1) <= hashToInt(finalHash) + ? { from: this.editRange.init, to: day } + : { from: day, to: this.editRange.init }; + + this.editRange = void 0; + this.__addToModel(initHash$1 === finalHash && this.dayAsRange !== true ? day : Object.assign({}, {target: day}, payload)); + + this.$emit('range-end', { + from: this.__getShortDate(payload.from), + to: this.__getShortDate(payload.to) + }); + } + }, + + __onDayMouseover: function __onDayMouseover (dayIndex) { + if (this.editRange !== void 0) { + var final = Object.assign({}, this.viewModel, {day: dayIndex}); + + Object.assign(this.editRange, { + final: final, + finalHash: this.__getDayHash(final) + }); + + this.$emit('range-change', { + from: this.__getShortDate(this.editRange.init), + to: this.__getShortDate(this.editRange.final) + }); + } + }, + + __updateViewModel: function __updateViewModel (year, month) { + var this$1$1 = this; + + year = parseInt(year, 10); + month = parseInt(month, 10); + + if (this.minNav !== void 0 && year <= this.minNav.year) { + year = this.minNav.year; + if (month < this.minNav.month) { + month = this.minNav.month; + } + } + + if (this.maxNav !== void 0 && year >= this.maxNav.year) { + year = this.maxNav.year; + if (month > this.maxNav.month) { + month = this.maxNav.month; + } + } + + var newHash = year + '/' + pad(month) + '/01'; + + if (newHash !== this.viewModel.dateHash) { + this.monthDirection = (hashToInt(this.viewModel.dateHash) < hashToInt(newHash)) === (this.$q.lang.rtl !== true) ? 'left' : 'right'; + if (year !== this.viewModel.year) { + this.yearDirection = this.monthDirection; + } + + this.$nextTick(function () { + this$1$1.startYear = year - year % yearsInterval - (year < 0 ? yearsInterval : 0); + Object.assign(this$1$1.viewModel, { + year: year, + month: month, + day: 1, + dateHash: newHash + }); + }); + } + }, + + __emitValue: function __emitValue (val, action, date) { + var value = val !== null && val.length === 1 && this.multiple === false + ? val[0] + : val; + + this.lastEmitValue = value; + + var ref = this.__getEmitParams(action, date); + var reason = ref.reason; + var details = ref.details; + this.$emit('input', value, reason, details); + }, + + __emitImmediately: function __emitImmediately (reason) { + var this$1$1 = this; + + var date = this.daysModel[0] !== void 0 && modelIsValid(this.daysModel[0]) === true + ? Object.assign({}, this.daysModel[0]) + : Object.assign({}, this.viewModel); // inherit day, hours, minutes, milliseconds... + + // nextTick required because of animation delay in viewModel + this.$nextTick(function () { + date.year = this$1$1.viewModel.year; + date.month = this$1$1.viewModel.month; + + var maxDay = this$1$1.calendar !== 'persian' + ? (__safeCreateDate(date.year, date.month, 0)).getDate() + : jalaaliMonthLength(date.year, date.month); + + date.day = Math.min(Math.max(1, date.day), maxDay); + + var value = this$1$1.__encodeEntry(date); + this$1$1.lastEmitValue = value; + + var ref = this$1$1.__getEmitParams('', date); + var details = ref.details; + this$1$1.$emit('input', value, reason, details); + }); + }, + + __getEmitParams: function __getEmitParams (action, date) { + return date.from !== void 0 + ? { + reason: (action + "-range"), + details: Object.assign({}, this.__getShortDate(date.target), + {from: this.__getShortDate(date.from), + to: this.__getShortDate(date.to), + changed: true}) + } + : { + reason: (action + "-day"), + details: Object.assign({}, this.__getShortDate(date), + {changed: true}) + } + }, + + __encodeEntry: function __encodeEntry (date, mask, locale) { + return date.from !== void 0 + ? { from: this.encodeObjectFn(date.from, mask, locale), to: this.encodeObjectFn(date.to, mask, locale) } + : this.encodeObjectFn(date, mask, locale) + }, + + __addToModel: function __addToModel (date) { + var this$1$1 = this; + + var value; + + if (this.multiple === true) { + if (date.from !== void 0) { + // we also need to filter out intersections + + var fromHashInt = hashToInt(this.__getDayHash(date.from)); + var toHashInt = hashToInt(this.__getDayHash(date.to)); + + var days = this.daysModel + .filter(function (day) { + var dayHashInt = hashToInt(day.dateHash); + + return dayHashInt < fromHashInt || dayHashInt > toHashInt + }); + + var ranges = this.rangeModel + .filter(function (ref) { + var from = ref.from; + var to = ref.to; + + return hashToInt(to.dateHash) < fromHashInt || hashToInt(from.dateHash) > toHashInt; + }); + + value = days.concat(ranges).concat(date).map(function (entry) { return this$1$1.__encodeEntry(entry); }); + } + else { + var model = this.normalizedModel.slice(); + model.push(this.__encodeEntry(date)); + value = model; + } + } + else { + value = this.__encodeEntry(date); + } + + this.__emitValue(value, 'add', date); + }, + + __removeFromModel: function __removeFromModel (date) { + if (this.noUnset === true) { + return + } + + var model = null; + + if (this.multiple === true && Array.isArray(this.value) === true) { + var val = this.__encodeEntry(date); + + if (date.from !== void 0) { + model = this.value.filter(function (date) { return date.from !== void 0 + ? (date.from !== val.from && date.to !== val.to) + : true; } + ); + } + else { + model = this.value.filter(function (date) { return date !== val; }); + } + + if (model.length === 0) { + model = null; + } + } + + this.__emitValue(model, 'remove', date); + }, + + __updateValue: function __updateValue (mask, locale, reason) { + var this$1$1 = this; + + var model = this.daysModel + .concat(this.rangeModel) + .map(function (entry) { return this$1$1.__encodeEntry(entry, mask, locale); }) + .filter(function (entry) { return entry.from !== void 0 + ? modelIsValid(entry.from) === true && modelIsValid(entry.to) === true + : modelIsValid(entry); } + ); + + this.$emit('input', (this.multiple === true ? model : model[0]) || null, reason); + } + }, + + render: function render (h) { + var content = [ + h('div', { + staticClass: 'q-date__content col relative-position' + }, [ + h('transition', { + props: { name: 'q-transition--fade' } + }, [ + this[("__get" + (this.view) + "View")](h) + ]) + ]) + ]; + + var def = slot(this, 'default'); + def !== void 0 && content.push( + h('div', { staticClass: 'q-date__actions' }, def) + ); + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(content, 'push'); + } + + return h('div', { + class: this.classes, + attrs: this.attrs, + directives: [ KeyGroupNavigation ], + on: Object.assign({}, this.qListeners) + }, [ + this.__getHeader(h), + + h('div', { staticClass: 'q-date__main col column' }, content) + ]) + } + }); + + var HistoryMixin = { + methods: { + __addHistory: function __addHistory () { + var this$1$1 = this; + + this.__historyEntry = { + condition: function () { return this$1$1.hideOnRouteChange === true }, + handler: this.hide + }; + History.add(this.__historyEntry); + }, + + __removeHistory: function __removeHistory () { + if (this.__historyEntry !== void 0) { + History.remove(this.__historyEntry); + this.__historyEntry = void 0; + } + } + }, + + beforeDestroy: function beforeDestroy () { + this.showing === true && this.__removeHistory(); + } + }; + + var passive$3 = listenOpts.passive; + + var + registered = 0, + state = {}, + iosScrollActive = false, + applyTimer, + orientationTimer, + closeTimer; + + function iosScroll () { + if (iosScrollActive === false) { + return + } + + var innerHeight = window.innerHeight; + var visualViewport = window.visualViewport; + var ref = document.documentElement; + var clientHeight = ref.clientHeight; + var diff = innerHeight - Math.ceil(visualViewport.height * visualViewport.scale); + + if ( + diff === 0 && + clientHeight > innerHeight + ) { + document.documentElement.scrollTop -= 3; + } + else { + if (diff > 1 && diff < 4) { + document.documentElement.scrollTop += diff - 1; + } + + iosScrollActive = false; + } + } + + function onIosScroll () { + iosScrollActive !== false && cancelAnimationFrame(iosScrollActive); + iosScrollActive = requestAnimationFrame(iosScroll); + } + + function onMobileRotate () { + clearTimeout(orientationTimer); + + orientationTimer = setTimeout(function () { + requestAnimationFrame(function () { + var documentElement = document.documentElement; + var body = document.body; + + documentElement.style.height = (window.innerHeight) + "px"; + + body.style.height = (documentElement.clientHeight + state.scrollTop) + "px"; + }); + }, 200); + } + + function apply$1 (action, rtl) { + var documentElement = document.documentElement; + var body = document.body; + var visualViewport = window.visualViewport; + + clearTimeout(applyTimer); + clearTimeout(orientationTimer); + + if (action === 'add') { + document.qScrollPrevented = true; + + var scrollbarSize = getScrollbarWidth(); + + requestAnimationFrame(function () { + var innerHeight = window.innerHeight; + var innerWidth = window.innerWidth; + var ref = window.getComputedStyle(body); + var overflowX = ref.overflowX; + var overflowY = ref.overflowY; + var backgroundColor = ref.backgroundColor; + + state = { + htmlStyleBefore: documentElement.style.cssText, + bodyStyleBefore: body.style.cssText, + htmlStyleAfter: '', + bodyStyleAfter: '', + scrollLeft: documentElement.scrollLeft, + scrollTop: documentElement.scrollTop + }; + + if (client.is.mobile === true) { + documentElement.style.height = innerHeight + "px"; + + body.style.width = "calc(100vw + " + (Math.abs(state.scrollLeft)) + "px)"; + body.style.height = (innerHeight + state.scrollTop) + "px"; + + window.addEventListener('orientationchange', onMobileRotate, passive$3); + if (visualViewport !== void 0 && client.is.ios === true) { + applyTimer = setTimeout(function () { + visualViewport.addEventListener('scroll', onIosScroll, passive$3); + }, 500); + } + } + else { + var scrollWidth = body.scrollWidth; + var scrollHeight = body.scrollHeight; + var scrollbarSizeHoriz = overflowX !== 'hidden' && (overflowX === 'scroll' || scrollWidth > innerWidth) + ? scrollbarSize + : 0, + scrollbarSizeVert = overflowY !== 'hidden' && (overflowY === 'scroll' || scrollHeight > innerHeight) + ? scrollbarSize + : 0; + + if (scrollbarSizeVert > 0 || scrollbarSizeHoriz > 0) { + if (scrollbarSizeVert > 0) { + documentElement.style.width = "calc(100vw - " + scrollbarSizeVert + "px)"; + + if (rtl === true) { + documentElement.style.marginRight = scrollbarSizeVert + "px"; + } + } + if (scrollbarSizeHoriz > 0) { + documentElement.style.height = "calc(100vh - " + scrollbarSizeHoriz + "px)"; + } + } + + body.style.width = "calc(100vw + " + (Math.abs(state.scrollLeft) - scrollbarSizeVert) + "px)"; + body.style.height = "calc(100vh + " + (state.scrollTop - scrollbarSizeHoriz) + "px)"; + } + + body.style.left = (-state.scrollLeft) + "px"; + body.style.top = (-state.scrollTop) + "px"; + body.style['padding' + (rtl === true ? 'Left' : 'Right')] = (Math.abs(state.scrollLeft)) + "px"; + + documentElement.style.backgroundColor = backgroundColor || 'rgba(128, 128, 128, 0.01)'; + documentElement.classList.add('q-body--prevent-scroll'); + + window.scrollTo(0, 0); + + requestAnimationFrame(function () { + if (body.scrollTop !== 0) { + body.scrollTop = 0; + } + }); + + documentElement.style.setProperty('--q-scroll-lock-left', ((-state.scrollLeft) + "px")); + var els = document.querySelectorAll('.q-menu__container, .q-tooltip__container'); + for (var i = els.length - 1; i >= 0; i--) { + els[i].style.position === 'absolute' && els[i].classList.add('q-body--scroll-locked'); + } + + state.htmlStyleAfter = documentElement.style.cssText.split(';').filter(function (s) { return s.trim().length > 0; }); + state.bodyStyleAfter = body.style.cssText.split(';').filter(function (s) { return s.trim().length > 0; }); + }); + } + else { + if (client.is.mobile === true) { + window.removeEventListener('orientationchange', onMobileRotate, passive$3); + if (visualViewport !== void 0 && client.is.ios === true) { + visualViewport.removeEventListener('scroll', onIosScroll, passive$3); + iosScrollActive = false; + } + } + + requestAnimationFrame(function () { + documentElement.classList.remove('q-body--prevent-scroll'); + + var + htmlStyleAfter = state.htmlStyleAfter.reduce(function (acc, s) { return acc.replace(s + ';', ''); }, documentElement.style.cssText), + bodyStyleAfter = state.bodyStyleAfter.reduce(function (acc, s) { return acc.replace(s + ';', ''); }, body.style.cssText); + + documentElement.style.cssText = state.htmlStyleBefore + htmlStyleAfter; + body.style.cssText = state.bodyStyleBefore + bodyStyleAfter; + + var els = document.querySelectorAll('.q-body--scroll-locked'); + for (var i = els.length - 1; i >= 0; i--) { + els[i].classList.remove('q-body--scroll-locked'); + } + + window.scrollTo(state.scrollLeft, state.scrollTop); + + applyTimer = setTimeout(function () { + document.qScrollPrevented = false; + triggerIsScrollable(); + }, 50); + }); + } + } + + function preventScroll (state, rtl) { + var action = 'add'; + + if (state === true) { + registered++; + + if (closeTimer !== void 0) { + clearTimeout(closeTimer); + closeTimer = void 0; + return + } + + if (registered > 1) { + return + } + } + else { + if (registered === 0) { + return + } + + registered--; + + if (registered > 0) { + return + } + + action = 'remove'; + + if (client.is.ios === true && client.is.nativeMobile === true) { + clearTimeout(closeTimer); + + closeTimer = setTimeout(function () { + apply$1(action, rtl); + closeTimer = void 0; + }, 100); + return + } + } + + apply$1(action, rtl); + } + + var PreventScrollMixin = { + methods: { + __preventScroll: function __preventScroll (state) { + if ( + state !== this.preventedScroll && + (this.preventedScroll !== void 0 || state === true) + ) { + this.preventedScroll = state; + preventScroll(state, this.$q.lang.rtl); + } + } + } + }; + + var positionClass$1 = { + standard: 'fixed-full flex-center', + top: 'fixed-top justify-center', + bottom: 'fixed-bottom justify-center', + right: 'fixed-right items-center', + left: 'fixed-left items-center' + }; + + var transitions = { + standard: ['scale', 'scale'], + top: ['slide-down', 'slide-up'], + bottom: ['slide-up', 'slide-down'], + right: ['slide-left', 'slide-right'], + left: ['slide-right', 'slide-left'] + }; + + var QDialog = Vue__default["default"].extend({ + name: 'QDialog', + + mixins: [ + AttrsMixin, + HistoryMixin, + ModelToggleMixin, + Portal, + PreventScrollMixin, + FocusWrapMixin + ], + + props: { + persistent: Boolean, + autoClose: Boolean, + + noEscDismiss: Boolean, + noBackdropDismiss: Boolean, + noRouteDismiss: Boolean, + noRefocus: Boolean, + noFocus: Boolean, + noShake: Boolean, + + seamless: Boolean, + + maximized: Boolean, + fullWidth: Boolean, + fullHeight: Boolean, + + square: Boolean, + + position: { + type: String, + default: 'standard', + validator: function (val) { return val === 'standard' || + ['top', 'bottom', 'left', 'right'].includes(val); } + }, + + transitionShow: String, + transitionHide: String + }, + + watch: { + seamless: function seamless (v) { + this.showing === true && this.__preventScroll(v !== true); + } + }, + + computed: { + classes: function classes () { + return "q-dialog__inner--" + (this.maximized === true ? 'maximized' : 'minimized') + " " + + "q-dialog__inner--" + (this.position) + " " + (positionClass$1[this.position]) + + (this.fullWidth === true ? ' q-dialog__inner--fullwidth' : '') + + (this.fullHeight === true ? ' q-dialog__inner--fullheight' : '') + + (this.square === true ? ' q-dialog__inner--square' : '') + }, + + transitionProps: function transitionProps () { + var show = "q-transition--" + (this.transitionShow === void 0 ? transitions[this.position][0] : this.transitionShow); + var hide = "q-transition--" + (this.transitionHide === void 0 ? transitions[this.position][1] : this.transitionHide); + return { + enterClass: (show + "-enter"), + leaveClass: (hide + "-leave"), + appearClass: (show + "-appear"), + enterToClass: (show + "-enter-to"), + leaveToClass: (hide + "-leave-to"), + appearToClass: (show + "-appear-to"), + enterActiveClass: (show + "-enter-active"), + leaveActiveClass: (hide + "-leave-active"), + appearActiveClass: (show + "-appear-active") + } + }, + + useBackdrop: function useBackdrop () { + return this.showing === true && this.seamless !== true + }, + + hideOnRouteChange: function hideOnRouteChange () { + return this.persistent !== true && + this.noRouteDismiss !== true && + this.seamless !== true + }, + + onBackdropEvents: function onBackdropEvents () { + return { + focusin: this.__onBackdropClick + } + }, + + onInnerEvents: function onInnerEvents () { + var on = Object.assign({}, this.qListeners, + // stop propagating these events from children + {input: stop, + 'popup-show': stop, + 'popup-hide': stop}); + + if (this.autoClose === true) { + on.click = this.__onAutoClose; + } + + return on + }, + + onTransitionEvents: function onTransitionEvents () { + return { + 'before-enter': this.__onTransitionBeforeEnter, + enter: this.__onTransitionEnter, + 'after-enter': this.__onTransitionAfterEnter, + 'enter-cancelled': this.__onTransitionEnterCancelled, + 'before-leave': this.__onTransitionBeforeLeave, + 'after-leave': this.__onTransitionAfterLeave + } + }, + + attrs: function attrs () { + return Object.assign({}, {role: 'dialog', + 'aria-modal': this.useBackdrop === true ? 'true' : 'false'}, + this.qAttrs) + } + }, + + methods: { + shake: function shake (refocusTarget) { + if (refocusTarget && typeof refocusTarget.focus === 'function') { + refocusTarget.focus(); + } + else { + this.__focusFirst(true); + } + this.$emit('shake'); + + var node = this.__getInnerNode(); + + if (node !== void 0) { + node.classList.remove('q-animate--scale'); + node.classList.add('q-animate--scale'); + clearTimeout(this.shakeTimeout); + this.shakeTimeout = setTimeout(function () { + node.classList.remove('q-animate--scale'); + }, 170); + } + }, + + __show: function __show () { + var this$1$1 = this; + + this.__addHistory(); + + // IE can have null document.activeElement + this.__refocusTarget = this.$q.platform.is.desktop === true && this.noRefocus === false && document.activeElement !== null + ? document.activeElement + : void 0; + + this.$el.dispatchEvent(create('popup-show', { bubbles: true })); + + EscapeKey.register(this, function () { + if (this$1$1.seamless !== true) { + // if it should not close then focus at start + if (this$1$1.persistent === true || this$1$1.noEscDismiss === true) { + if (this$1$1.maximized !== true && this$1$1.noShake !== true) { + this$1$1.shake(); + } + else { + this$1$1.__focusFirst(true); + } + } + else { + this$1$1.$emit('escape-key'); + this$1$1.hide(); + } + } + else { + this$1$1.__focusCyclePortal(); + } + }); + + this.__showPortal(); + }, + + __hide: function __hide () { + this.__removeHistory(); + this.__cleanup(true); + + this.$el.dispatchEvent(create('popup-hide', { bubbles: true })); + }, + + __onTransitionBeforeEnter: function __onTransitionBeforeEnter (target) { + // required in order to avoid the "double-tap needed" issue + this.$q.platform.is.ios === true && target.click(); + + this.seamless !== true && this.__preventScroll(true); + + target.setAttribute('data-q-portal-animating', true); + }, + + __onTransitionEnter: function __onTransitionEnter () { + this.noFocus !== true && this.focus(); + }, + + __onTransitionAfterEnter: function __onTransitionAfterEnter (target) { + target.removeAttribute('data-q-portal-animating'); + + this.$emit('show', { target: target }); + }, + + __onTransitionEnterCancelled: function __onTransitionEnterCancelled (target) { + target.removeAttribute('data-q-portal-animating'); + + this.seamless !== true && this.__preventScroll(false); + }, + + __onTransitionBeforeLeave: function __onTransitionBeforeLeave () { + if (this.showing !== true) { + this.__focusCyclePortal(true); + this.seamless !== true && (document.documentElement.scrollTop = 0); + } + }, + + __onTransitionAfterLeave: function __onTransitionAfterLeave (target) { + if (this.showing !== true) { + this.__hidePortal(); + + this.seamless !== true && this.__preventScroll(false); + + this.$emit('hide', { target: target }); + } + }, + + __onAutoClose: function __onAutoClose (e) { + this.hide(e); + this.qListeners.click !== void 0 && this.$emit('click', e); + }, + + __onBackdropClick: function __onBackdropClick (e) { + if (this.persistent !== true && this.noBackdropDismiss !== true) { + this.hide(e); + } + else if (this.noShake !== true) { + this.shake(e.relatedTarget); + } + }, + + __cleanup: function __cleanup (hiding) { + clearTimeout(this.shakeTimeout); + + if (hiding === true || this.showing === true) { + EscapeKey.pop(this); + } + }, + + __renderPortal: function __renderPortal (h) { + return h('div', { + staticClass: ("q-dialog fullscreen no-pointer-events q-dialog--" + (this.seamless === true ? 'seamless' : 'modal')), + class: this.contentClass, + style: this.contentStyle, + attrs: this.attrs + }, [ + h('transition', { + props: { name: 'q-transition--fade' } + }, this.useBackdrop === true ? [ + h('div', { + staticClass: 'q-dialog__backdrop fixed-full', + attrs: Object.assign({}, ariaHidden, {tabindex: -1}), + on: this.onBackdropEvents + }) + ] : null), + + h('transition', { + props: this.transitionProps, + on: this.onTransitionEvents + }, [ + this.showing === true ? h('div', { + ref: 'inner', + staticClass: 'q-dialog__inner flex no-pointer-events', + class: this.classes, + attrs: { tabindex: -1 }, + on: this.onInnerEvents + }, this.__getFocusWrappedContent('default')) : null + ]) + ]) + } + }, + + mounted: function mounted () { + this.__processModelChange(this.value); + }, + + beforeDestroy: function beforeDestroy () { + this.__cleanup(); + this.__preventScroll(false); + this.__refocusTarget = void 0; + } + }); + + var duration = 150; + + var mouseEvents = [ + 'mouseover', 'mouseout', 'mouseenter', 'mouseleave' + ]; + + var QDrawer = Vue__default["default"].extend({ + name: 'QDrawer', + + inject: { + layout: { + default: function default$1 () { + console.error('QDrawer needs to be child of QLayout'); + } + } + }, + + mixins: [ DarkMixin, HistoryMixin, TimeoutMixin, ModelToggleMixin, PreventScrollMixin ], + + directives: { + TouchPan: TouchPan + }, + + props: { + side: { + type: String, + default: 'left', + validator: function (v) { return ['left', 'right'].includes(v); } + }, + + width: { + type: Number, + default: 300 + }, + + mini: Boolean, + miniToOverlay: Boolean, + miniWidth: { + type: Number, + default: 57 + }, + + breakpoint: { + type: Number, + default: 1023 + }, + showIfAbove: Boolean, + + behavior: { + type: String, + validator: function (v) { return ['default', 'desktop', 'mobile'].includes(v); }, + default: 'default' + }, + + bordered: Boolean, + elevated: Boolean, + contentStyle: [String, Object, Array], + contentClass: [String, Object, Array], + + overlay: Boolean, + persistent: Boolean, + noSwipeOpen: Boolean, + noSwipeClose: Boolean, + noSwipeBackdrop: Boolean + }, + + data: function data () { + var belowBreakpoint = ( + this.behavior === 'mobile' || + (this.behavior !== 'desktop' && this.layout.totalWidth <= this.breakpoint) + ); + + return { + belowBreakpoint: belowBreakpoint, + showing: this.showIfAbove === true && belowBreakpoint === false + ? true + : this.value === true + } + }, + + watch: { + belowBreakpoint: function belowBreakpoint (val) { + if (val === true) { // from lg to xs + this.lastDesktopState = this.showing; + this.showing === true && this.hide(false); + } + else if ( + this.overlay === false && + this.behavior !== 'mobile' && + this.lastDesktopState !== false + ) { // from xs to lg + if (this.showing === true) { + this.__applyPosition(0); + this.__applyBackdrop(0); + this.__cleanup(); + } + else { + this.show(false); + } + } + }, + + 'layout.totalWidth': function layout_totalWidth () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable(); + + if (this.layout.container !== true) { + this.clearExecuteWhenScrollable = executeWhenScrollable(this.__updateBelowBreakpoint); + } + else { + this.__updateBelowBreakpoint(); + } + }, + + side: function side (newSide, oldSide) { + if (this.layout.instances[oldSide] === this) { + this.layout.instances[oldSide] = void 0; + this.layout[oldSide].space = false; + this.layout[oldSide].offset = 0; + } + + this.layout.instances[newSide] = this; + this.layout[newSide].size = this.size; + this.layout[newSide].space = this.onLayout; + this.layout[newSide].offset = this.offset; + }, + + behavior: function behavior () { + this.__updateBelowBreakpoint(); + }, + + breakpoint: function breakpoint () { + this.__updateBelowBreakpoint(); + }, + + 'layout.container': function layout_container (val) { + this.showing === true && this.__preventScroll(val !== true); + val === true && this.__updateBelowBreakpoint(); + }, + + 'layout.scrollbarWidth': function layout_scrollbarWidth () { + this.__applyPosition(this.showing === true ? 0 : void 0); + }, + + offset: function offset (val) { + this.__update('offset', val); + }, + + onLayout: function onLayout (val) { + this.$emit('on-layout', val); + this.__update('space', val); + }, + + rightSide: function rightSide () { + this.__applyPosition(); + }, + + size: function size (val) { + this.__applyPosition(); + this.__updateSizeOnLayout(this.miniToOverlay, val); + }, + + miniToOverlay: function miniToOverlay (val) { + this.__updateSizeOnLayout(val, this.size); + }, + + '$q.lang.rtl': function $q_lang_rtl () { + this.__applyPosition(); + }, + + mini: function mini () { + if (this.value === true) { + this.__animateMini(); + this.layout.__animate(); + } + }, + + isMini: function isMini (val) { + this.$emit('mini-state', val); + } + }, + + computed: { + rightSide: function rightSide () { + return this.side === 'right' + }, + + otherSide: function otherSide () { + return this.rightSide === true ? 'left' : 'right' + }, + + offset: function offset () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === false + ? (this.miniToOverlay === true ? this.miniWidth : this.size) + : 0 + }, + + size: function size () { + return this.isMini === true + ? this.miniWidth + : this.width + }, + + fixed: function fixed () { + return this.overlay === true || + this.miniToOverlay === true || + this.layout.view.indexOf(this.rightSide ? 'R' : 'L') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + onLayout: function onLayout () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === false + }, + + onScreenOverlay: function onScreenOverlay () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === true + }, + + backdropClass: function backdropClass () { + return this.showing === false ? 'no-pointer-events' : null + }, + + headerSlot: function headerSlot () { + return this.rightSide === true + ? this.layout.rows.top[2] === 'r' + : this.layout.rows.top[0] === 'l' + }, + + footerSlot: function footerSlot () { + return this.rightSide === true + ? this.layout.rows.bottom[2] === 'r' + : this.layout.rows.bottom[0] === 'l' + }, + + aboveStyle: function aboveStyle () { + var css = {}; + + if (this.layout.header.space === true && this.headerSlot === false) { + if (this.fixed === true) { + css.top = (this.layout.header.offset) + "px"; + } + else if (this.layout.header.space === true) { + css.top = (this.layout.header.size) + "px"; + } + } + + if (this.layout.footer.space === true && this.footerSlot === false) { + if (this.fixed === true) { + css.bottom = (this.layout.footer.offset) + "px"; + } + else if (this.layout.footer.space === true) { + css.bottom = (this.layout.footer.size) + "px"; + } + } + + return css + }, + + style: function style () { + var style = { width: ((this.size) + "px") }; + return this.belowBreakpoint === true + ? style + : Object.assign(style, this.aboveStyle) + }, + + classes: function classes () { + return "q-drawer--" + (this.side) + + (this.bordered === true ? ' q-drawer--bordered' : '') + + " q-drawer--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + + (this.showing !== true ? ' q-layout--prevent-focus' : '') + + ( + this.belowBreakpoint === true + ? ' fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding' + : " q-drawer--" + (this.isMini === true ? 'mini' : 'standard') + + (this.fixed === true || this.onLayout !== true ? ' fixed' : '') + + (this.overlay === true || this.miniToOverlay === true ? ' q-drawer--on-top' : '') + + (this.headerSlot === true ? ' q-drawer--top-padding' : '') + ) + }, + + stateDirection: function stateDirection () { + return (this.$q.lang.rtl === true ? -1 : 1) * (this.rightSide === true ? 1 : -1) + }, + + isMini: function isMini () { + return this.mini === true && this.belowBreakpoint !== true + }, + + onNativeEvents: function onNativeEvents () { + var this$1$1 = this; + + if (this.belowBreakpoint !== true) { + var evt = { + '!click': function (e) { this$1$1.$emit('click', e); } + }; + + mouseEvents.forEach(function (name) { + evt[name] = function (e) { + this$1$1.qListeners[name] !== void 0 && this$1$1.$emit(name, e); + }; + }); + + return evt + } + }, + + onBackdropEvents: function onBackdropEvents () { + return { + click: this.hide, + touchmove: stopAndPrevent + } + }, + + hideOnRouteChange: function hideOnRouteChange () { + return this.persistent !== true && + (this.belowBreakpoint === true || this.onScreenOverlay === true) + }, + + onOpenerEvents: function onOpenerEvents () { + return { + touchstart: stopAndPrevent + } + }, + + openDirective: function openDirective () { + var obj; + + var dir = this.$q.lang.rtl === true ? this.side : this.otherSide; + + return [{ + name: 'touch-pan', + value: this.__openByTouch, + modifiers: ( obj = {}, obj[ dir ] = true, obj.mouse = true, obj.prevent = true, obj ) + }] + }, + + contentCloseDirective: function contentCloseDirective () { + var obj; + + if (this.noSwipeClose !== true) { + var dir = this.$q.lang.rtl === true ? this.otherSide : this.side; + + return [{ + name: 'touch-pan', + value: this.__closeByTouch, + modifiers: ( obj = {}, obj[ dir ] = true, obj.mouse = true, obj ) + }] + } + }, + + backdropCloseDirective: function backdropCloseDirective () { + var obj; + + if (this.noSwipeBackdrop !== true) { + var dir = this.$q.lang.rtl === true ? this.otherSide : this.side; + + return [{ + name: 'touch-pan', + value: this.__closeByTouch, + modifiers: ( obj = {}, obj[ dir ] = true, obj.mouse = true, obj.mouseAllDir = true, obj ) + }] + } + } + }, + + methods: { + __applyPosition: function __applyPosition (position) { + var this$1$1 = this; + + if (position === void 0) { + this.$nextTick(function () { + position = this$1$1.showing === true ? 0 : this$1$1.size; + this$1$1.__applyPosition(this$1$1.stateDirection * position); + }); + } + else if (this.$refs.content !== void 0) { + if ( + this.layout.container === true && + this.rightSide === true && + (this.belowBreakpoint === true || Math.abs(position) === this.size) + ) { + position += this.stateDirection * this.layout.scrollbarWidth; + } + else if ( + this.layout.container !== true && + this.rightSide === true && + this.belowBreakpoint === true + ) { + position += (this.$q.lang.rtl === true ? -1 : 1) * this.layout.scrollbarWidth; + } + + if (this.__lastPosition !== position) { + this.$refs.content.style.transform = "translateX(" + position + "px)"; + this.__lastPosition = position; + } + } + }, + + __applyBackdrop: function __applyBackdrop (x, retry) { + var this$1$1 = this; + + if (this.$refs.backdrop !== void 0) { + this.$refs.backdrop.style.opacity = + this.lastBackdropOpacity = x * 0.4; + } + else { + // rendered nodes might not have + // picked up this.showing change yet, + // so we need one retry + retry !== true && this.$nextTick(function () { + this$1$1.__applyBackdrop(x, true); + }); + } + }, + + __setBackdropVisible: function __setBackdropVisible (v) { + if (this.$refs.backdrop !== void 0) { + this.$refs.backdrop.classList[v === true ? 'remove' : 'add']('no-pointer-events'); + } + }, + + __setScrollable: function __setScrollable (v) { + var action = v === true + ? 'remove' + : (this.layout.container !== true ? 'add' : ''); + + action !== '' && document.body.classList[action]('q-body--drawer-toggle'); + }, + + __animateMini: function __animateMini () { + var this$1$1 = this; + + if (this.timerMini !== void 0) { + clearTimeout(this.timerMini); + } + else if (this.$el !== void 0) { + this.$el.classList.add('q-drawer--mini-animate'); + } + this.timerMini = setTimeout(function () { + this$1$1.$el !== void 0 && this$1$1.$el.classList.remove('q-drawer--mini-animate'); + this$1$1.timerMini = void 0; + }, 150); + }, + + __openByTouch: function __openByTouch (evt) { + if (this.showing !== false) { + // some browsers might capture and trigger this + // even if Drawer has just been opened (but animation is still pending) + return + } + + var + width = this.size, + position = between(evt.distance.x, 0, width); + + if (evt.isFinal === true) { + var + el = this.$refs.content, + opened = position >= Math.min(75, width); + + el.classList.remove('no-transition'); + + if (opened === true) { + this.show(); + } + else { + this.layout.__animate(); + this.__applyBackdrop(0); + this.__applyPosition(this.stateDirection * width); + el.classList.remove('q-drawer--delimiter'); + el.classList.add('q-layout--prevent-focus'); + this.__setBackdropVisible(false); + } + + return + } + + this.__applyPosition( + (this.$q.lang.rtl === true ? this.rightSide !== true : this.rightSide) + ? Math.max(width - position, 0) + : Math.min(0, position - width) + ); + this.__applyBackdrop( + between(position / width, 0, 1) + ); + + if (evt.isFirst === true) { + var el$1 = this.$refs.content; + el$1.classList.add('no-transition'); + el$1.classList.add('q-drawer--delimiter'); + el$1.classList.remove('q-layout--prevent-focus'); + this.__setBackdropVisible(true); + } + }, + + __closeByTouch: function __closeByTouch (evt) { + if (this.showing !== true) { + // some browsers might capture and trigger this + // even if Drawer has just been closed (but animation is still pending) + return + } + + var + width = this.size, + dir = evt.direction === this.side, + position = (this.$q.lang.rtl === true ? dir !== true : dir) + ? between(evt.distance.x, 0, width) + : 0; + + if (evt.isFinal === true) { + var opened = Math.abs(position) < Math.min(75, width); + this.$refs.content.classList.remove('no-transition'); + + if (opened === true) { + this.layout.__animate(); + this.__applyBackdrop(1); + this.__applyPosition(0); + } + else { + this.hide(); + } + + return + } + + this.__applyPosition(this.stateDirection * position); + this.__applyBackdrop(between(1 - position / width, 0, 1)); + + if (evt.isFirst === true) { + this.$refs.content.classList.add('no-transition'); + } + }, + + __show: function __show (evt, noEvent) { + var this$1$1 = this; + + this.__addHistory(); + + this.__setBackdropVisible(true); + evt !== false && this.layout.__animate(); + this.__applyPosition(0); + + if (this.belowBreakpoint === true) { + var otherSide = this.layout.instances[this.otherSide]; + if (otherSide !== void 0 && otherSide.belowBreakpoint === true) { + otherSide.hide(false); + } + + this.__applyBackdrop(1); + this.layout.container !== true && this.__preventScroll(true); + } + else { + this.__applyBackdrop(0); + evt !== false && this.__setScrollable(false); + } + + this.__registerTimeout(function () { + evt !== false && this$1$1.__setScrollable(true); + noEvent !== true && this$1$1.$emit('show', evt); + }, duration); + }, + + __hide: function __hide (evt, noEvent) { + var this$1$1 = this; + + this.__removeHistory(); + + evt !== false && this.layout.__animate(); + + this.__applyBackdrop(0); + this.__applyPosition(this.stateDirection * this.size); + this.__setBackdropVisible(false); + + this.__cleanup(); + + if (noEvent !== true) { + this.__registerTimeout(function () { this$1$1.$emit('hide', evt); }, duration); + } + else { + this.__removeTimeout(); + } + }, + + __cleanup: function __cleanup () { + this.__preventScroll(false); + this.__setScrollable(true); + }, + + __update: function __update (prop, val) { + if (this.layout[this.side][prop] !== val) { + this.layout[this.side][prop] = val; + } + }, + + __updateLocal: function __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val; + } + }, + + __updateSizeOnLayout: function __updateSizeOnLayout (miniToOverlay, size) { + this.__update('size', miniToOverlay === true ? this.miniWidth : size); + }, + + __updateBelowBreakpoint: function __updateBelowBreakpoint () { + this.__updateLocal('belowBreakpoint', ( + this.behavior === 'mobile' || + (this.behavior !== 'desktop' && this.layout.totalWidth <= this.breakpoint) + )); + } + }, + + created: function created () { + this.__useTimeout('__registerTimeout', '__removeTimeout'); + + this.layout.instances[this.side] = this; + this.__updateSizeOnLayout(this.miniToOverlay, this.size); + this.__update('space', this.onLayout); + this.__update('offset', this.offset); + + if ( + this.showIfAbove === true && + this.value !== true && + this.showing === true && + this.qListeners.input !== void 0 + ) { + this.$emit('input', true); + } + }, + + mounted: function mounted () { + var this$1$1 = this; + + this.$emit('on-layout', this.onLayout); + this.$emit('mini-state', this.isMini); + + this.lastDesktopState = this.showIfAbove === true; + + var fn = function () { + var action = this$1$1.showing === true ? 'show' : 'hide'; + this$1$1[("__" + action)](false, true); + }; + + if (this.layout.totalWidth !== 0) { + // make sure that all computed properties + // have been updated before calling __show/__hide() + this.$nextTick(fn); + return + } + + this.watcher = this.$watch('layout.totalWidth', function () { + this$1$1.watcher(); + this$1$1.watcher = void 0; + + if (this$1$1.showing === false && this$1$1.showIfAbove === true && this$1$1.belowBreakpoint === false) { + this$1$1.show(false); + } + else { + fn(); + } + }); + }, + + beforeDestroy: function beforeDestroy () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable(); + this.watcher !== void 0 && this.watcher(); + clearTimeout(this.timerMini); + + this.showing === true && this.__cleanup(); + + if (this.layout.instances[this.side] === this) { + this.layout.instances[this.side] = void 0; + this.__update('size', 0); + this.__update('offset', 0); + this.__update('space', false); + } + }, + + render: function render (h) { + var child = []; + + if (this.belowBreakpoint === true) { + this.noSwipeOpen !== true && child.push( + h('div', { + staticClass: ("q-drawer__opener fixed-" + (this.side)), + attrs: ariaHidden, + directives: this.openDirective, + on: this.onOpenerEvents + }) + ); + + child.push( + h('div', { + ref: 'backdrop', + staticClass: 'fullscreen q-drawer__backdrop', + class: this.backdropClass, + attrs: ariaHidden, + style: this.lastBackdropOpacity !== void 0 + ? { opacity: this.lastBackdropOpacity } + : null, + on: this.onBackdropEvents, + directives: this.showing === false + ? void 0 + : this.backdropCloseDirective + }) + ); + } + + var content = [ + h('div', { + staticClass: 'q-drawer__content fit ' + (this.layout.container === true ? 'overflow-auto' : 'scroll'), + class: this.contentClass, + style: this.contentStyle + }, this.isMini === true && this.$scopedSlots.mini !== void 0 + ? this.$scopedSlots.mini() + : slot(this, 'default') + ) + ]; + + if (this.elevated === true && this.showing === true) { + content.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ); + } + + child.push( + h('aside', { + ref: 'content', + staticClass: 'q-drawer', + class: this.classes, + style: this.style, + on: this.onNativeEvents, + directives: this.belowBreakpoint === true + ? this.contentCloseDirective + : void 0 + }, content) + ); + + return h('div', { staticClass: 'q-drawer-container' }, child) + } + }); + + var attrs$3 = { role: 'tooltip' }; + + var QTooltip = Vue__default["default"].extend({ + name: 'QTooltip', + + mixins: [ AnchorMixin, TimeoutMixin, ModelToggleMixin, Portal, TransitionMixin ], + + props: { + minHeight: { + type: String, + default: null + }, + minWidth: { + type: String, + default: null + }, + + maxHeight: { + type: String, + default: null + }, + maxWidth: { + type: String, + default: null + }, + + transitionShow: { + default: 'jump-down' + }, + transitionHide: { + default: 'jump-up' + }, + + anchor: { + type: String, + default: 'bottom middle', + validator: validatePosition + }, + self: { + type: String, + default: 'top middle', + validator: validatePosition + }, + offset: { + type: Array, + default: function () { return [14, 14]; }, + validator: validateOffset + }, + + scrollTarget: { + default: void 0 + }, + + delay: { + type: Number, + default: 0 + }, + + hideDelay: { + type: Number, + default: 0 + } + }, + + computed: { + anchorOrigin: function anchorOrigin () { + return parsePosition(this.anchor, this.$q.lang.rtl) + }, + + selfOrigin: function selfOrigin () { + return parsePosition(this.self, this.$q.lang.rtl) + }, + + hideOnRouteChange: function hideOnRouteChange () { + return this.persistent !== true + } + }, + + methods: { + __show: function __show (evt) { + var this$1$1 = this; + + this.__showPortal(); + + this.__registerTick(function () { + this$1$1.updatePosition(); + this$1$1.__configureScrollTarget(); + }); + + if (this.unwatch === void 0) { + this.unwatch = this.$watch( + function () { return this$1$1.$q.screen.width + '|' + this$1$1.$q.screen.height + '|' + this$1$1.self + '|' + this$1$1.anchor + '|' + this$1$1.$q.lang.rtl; }, + this.updatePosition + ); + } + + // should __removeTimeout() if this gets removed + this.__registerTimeout(function () { + this$1$1.$emit('show', evt); + }, 300); + }, + + __hide: function __hide (evt) { + var this$1$1 = this; + + this.__removeTick(); + this.__anchorCleanup(); + + // should __removeTimeout() if this gets removed + this.__registerTimeout(function () { + if (this$1$1.showing !== true) { + this$1$1.__hidePortal(); + this$1$1.$emit('hide', evt); + } + }, 300); + }, + + __anchorCleanup: function __anchorCleanup () { + if (this.unwatch !== void 0) { + this.unwatch(); + this.unwatch = void 0; + } + + this.__unconfigureScrollTarget(); + cleanEvt(this, 'tooltipTemp'); + cleanEvt(this, 'tooltipPreventMenu'); + cleanEvt(this, 'anchorTemp'); + }, + + updatePosition: function updatePosition () { + var this$1$1 = this; + + if (this.anchorEl === void 0 || this.__portal === void 0) { + return + } + + var el = this.__portal.$el; + + if (el.nodeType === 8) { // IE replaces the comment with delay + setTimeout(this.updatePosition, 25); + return + } + + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition); + this.settingPosition = requestAnimationFrame(function () { + setPosition({ + el: el, + offset: this$1$1.offset, + anchorEl: this$1$1.anchorEl, + anchorOrigin: this$1$1.anchorOrigin, + selfOrigin: this$1$1.selfOrigin, + minHeight: this$1$1.minHeight, + minWidth: this$1$1.minWidth, + maxHeight: this$1$1.maxHeight, + maxWidth: this$1$1.maxWidth, + rtl: this$1$1.$q.lang.rtl + }); + this$1$1.settingPosition = void 0; + }); + }, + + __delayShow: function __delayShow (evt) { + var this$1$1 = this; + + if (this.$q.platform.is.mobile === true) { + if (this.showing) { + return + } + + clearSelection(); + document.body.classList.add('non-selectable'); + + var target = this.anchorEl; + var evts = [ 'touchcancel', 'touchend', 'click' ] + .map(function (e) { return ([ target, e, '__clearPreventContextMenu', 'passiveCapture' ]); }) + .concat([ + [ document, 'touchstart', '__delayHide', 'passiveCapture' ] + ]); + + addEvt(this, 'tooltipTemp', evts); + addEvt(this, 'tooltipPreventMenu', [ + [ document, 'contextmenu', 'prevent', 'capture' ] + ]); + } + + this.__registerTimeout(function () { this$1$1.show(evt); }, this.delay); + }, + + __delayHide: function __delayHide (evt) { + var this$1$1 = this; + + var innerNode = this.__getInnerNode(); + + if (innerNode !== void 0 && evt) { + if (evt.type === 'mouseleave') { + if (innerNode.contains(evt.relatedTarget) === true) { + cleanEvt(this, 'anchorTemp'); + + addEvt(this, 'anchorTemp', [ + [ innerNode, 'mouseleave', '__delayHide', 'passive' ] + ]); + + return + } + } + else if (innerNode.contains(evt.target) === true) { + return + } + } + + if (this.$q.platform.is.mobile === true) { + cleanEvt(this, 'tooltipTemp'); + cleanEvt(this, 'tooltipPreventMenu'); + clearSelection(); + // delay needed otherwise selection still occurs + setTimeout(function () { + document.body.classList.remove('non-selectable'); + }, 10); + } + else { + cleanEvt(this, 'anchorTemp'); + } + + // should __removeTimeout() if this gets removed + this.__registerTimeout(function () { this$1$1.hide(evt); }, this.hideDelay); + }, + + __clearPreventContextMenu: function __clearPreventContextMenu () { + cleanEvt(this, 'tooltipPreventMenu'); + }, + + __configureAnchorEl: function __configureAnchorEl () { + if (this.noParentEvent === true || this.anchorEl === void 0) { return } + + var evts = this.$q.platform.is.mobile === true + ? [ + [ this.anchorEl, 'touchstart', '__delayShow', 'passive' ] + ] + : [ + [ this.anchorEl, 'mouseenter', '__delayShow', 'passive' ], + [ this.anchorEl, 'mouseleave', '__delayHide', 'passive' ] + ]; + + addEvt(this, 'anchor', evts); + }, + + __unconfigureScrollTarget: function __unconfigureScrollTarget () { + this.__changeScrollEvent(); + }, + + __configureScrollTarget: function __configureScrollTarget () { + if (this.showing === true && (this.anchorEl !== void 0 || this.scrollTarget !== void 0)) { + var fn = this.noParentEvent === true + ? this.updatePosition + : this.hide; + + this.__changeScrollEvent(fn, getScrollTarget(this.anchorEl, this.scrollTarget)); + } + }, + + __renderPortal: function __renderPortal (h) { + return h('transition', { + props: this.transitionProps + }, [ + this.showing === true ? h('div', { + staticClass: 'q-tooltip__container column no-pointer-events' + }, [ + h('div', { + ref: 'inner', + staticClass: 'q-tooltip q-tooltip--style scroll all-pointer-events', + class: this.contentClass, + style: this.contentStyle, + attrs: attrs$3 + }, slot(this, 'default')) + ]) : null + ]) + } + }, + + created: function created () { + this.__useTick('__registerTick', '__removeTick'); + this.__useTimeout('__registerTimeout'); + }, + + mounted: function mounted () { + this.__processModelChange(this.value); + }, + + beforeDestroy: function beforeDestroy () { + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition); + } + }); + + var attrs$2 = { role: 'list' }; + + var QList = Vue__default["default"].extend({ + name: 'QList', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + bordered: Boolean, + dense: Boolean, + separator: Boolean, + padding: Boolean + }, + + computed: { + classes: function classes () { + return 'q-list' + + (this.bordered === true ? ' q-list--bordered' : '') + + (this.dense === true ? ' q-list--dense' : '') + + (this.separator === true ? ' q-list--separator' : '') + + " q-list--" + (this.darkSuffix) + + (this.padding === true ? ' q-list--padding' : '') + } + }, + + render: function render (h) { + return h('div', { + class: this.classes, + attrs: attrs$2, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QItem = Vue__default["default"].extend({ + name: 'QItem', + + mixins: [ DarkMixin, RouterLinkMixin, TagMixin, ListenersMixin ], + + props: { + active: { + type: Boolean, + default: null + }, + + clickable: Boolean, + dense: Boolean, + insetLevel: Number, + + tabindex: [ String, Number ], + + focused: Boolean, + manualFocus: Boolean + }, + + computed: { + isActionable: function isActionable () { + return this.clickable === true || + this.hasLink === true || + this.tag === 'label' + }, + + isClickable: function isClickable () { + return this.disable !== true && this.isActionable === true + }, + + classes: function classes () { + return 'q-item q-item-type row no-wrap' + + (this.dense === true ? ' q-item--dense' : '') + + "q-item--" + (this.darkSuffix) + + ( + this.hasLink === true && this.active === null + ? this.linkClass + : ( + this.active === true + ? (" q-item--active" + (this.activeClass !== void 0 ? (" " + (this.activeClass)) : '') + " ") + : '' + ) + ) + + (this.disable === true ? ' disabled' : '') + + ( + this.isClickable === true + ? ' q-item--clickable q-link cursor-pointer ' + + (this.manualFocus === true ? 'q-manual-focusable' : 'q-focusable q-hoverable') + + (this.focused === true ? ' q-manual-focusable--focused' : '') + : '' + ) + }, + + style: function style () { + var obj; + + if (this.insetLevel !== void 0) { + var dir = this.$q.lang.rtl === true ? 'Right' : 'Left'; + return ( obj = {}, obj['padding' + dir] = (16 + this.insetLevel * 56) + 'px', obj ) + } + }, + + onEvents: function onEvents () { + return Object.assign({}, this.qListeners, + {focus: this.__onFocus, + click: this.__onClick, + keyup: this.__onKeyup}) + } + }, + + methods: { + __onClick: function __onClick (e) { + if (this.isClickable === true) { + this.__refocus(); + this.__navigateOnClick(e); + } + }, + + __onFocus: function __onFocus (e) { + this.isClickable === true && this.__refocus(); + this.qListeners.focus !== void 0 && this.$emit('focus', e); + }, + + __onKeyup: function __onKeyup (e) { + if (this.isClickable === true && isKeyCode(e, 13) === true) { + stopAndPrevent(e); + + // for click trigger + var evt = new MouseEvent('click', e); + this.$el.dispatchEvent(evt); + } + + this.$emit('keyup', e); + }, + + __getContent: function __getContent (h) { + var child = uniqueSlot(this, 'default', []); + + this.isClickable === true && child.unshift( + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: 'blurTarget' }) + ); + + return child + }, + + __refocus: function __refocus () { + if ( + this.$q.interaction.isPointer === true && + this.$refs.blurTarget !== void 0 && + document.activeElement === this.$el + ) { + this.$refs.blurTarget.focus(); + } + else if ( + this.$q.interaction.isKeyboard === true && + document.activeElement === this.$refs.blurTarget + ) { + this.$el.focus(); + } + } + }, + + render: function render (h) { + var data = { + class: this.classes, + style: this.style, + attrs: { role: 'listitem' }, + on: this.onEvents + }; + + if (this.isClickable === true) { + data.attrs.tabindex = this.tabindex || '0'; + Object.assign(data.attrs, this.linkAttrs); + } + else if (this.isActionable === true) { + data.attrs['aria-disabled'] = 'true'; + } + + return h( + this.linkTag, + data, + this.__getContent(h) + ) + } + }); + + var QItemSection = Vue__default["default"].extend({ + name: 'QItemSection', + + mixins: [ ListenersMixin ], + + props: { + avatar: Boolean, + thumbnail: Boolean, + side: Boolean, + top: Boolean, + noWrap: Boolean + }, + + computed: { + classes: function classes () { + var obj; + + var side = this.avatar || this.side || this.thumbnail; + + return ( obj = { + 'q-item__section--top': this.top, + 'q-item__section--avatar': this.avatar, + 'q-item__section--thumbnail': this.thumbnail, + 'q-item__section--side': side, + 'q-item__section--nowrap': this.noWrap, + 'q-item__section--main': !side + }, obj[("justify-" + (this.top ? 'start' : 'center'))] = true, obj ) + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-item__section column', + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + function run (e, btn, vm) { + if (btn.handler) { + btn.handler(e, vm, vm.caret); + } + else { + vm.runCmd(btn.cmd, btn.param); + } + } + + function __getGroup (h, children) { + return h('div', { + staticClass: 'q-editor__toolbar-group' + }, children) + } + + function getBtn (h, vm, btn, clickHandler, active) { + if ( active === void 0 ) active = false; + + var + toggled = active || (btn.type === 'toggle' + ? (btn.toggled ? btn.toggled(vm) : btn.cmd && vm.caret.is(btn.cmd, btn.param)) + : false), + child = [], + events = { + click: function click (e) { + clickHandler && clickHandler(); + run(e, btn, vm); + } + }; + + if (btn.tip && vm.$q.platform.is.desktop) { + var Key = btn.key + ? h('div', [h('small', ("(CTRL + " + (String.fromCharCode(btn.key)) + ")"))]) + : null; + child.push( + h(QTooltip, { props: { delay: 1000 } }, [ + h('div', { domProps: { innerHTML: btn.tip } }), + Key + ]) + ); + } + + return h(QBtn, { + props: Object.assign({}, vm.buttonProps, + {icon: btn.icon !== null ? btn.icon : void 0, + color: toggled ? btn.toggleColor || vm.toolbarToggleColor : btn.color || vm.toolbarColor, + textColor: toggled && !vm.toolbarPush ? null : btn.textColor || vm.toolbarTextColor, + label: btn.label, + disable: btn.disable ? (typeof btn.disable === 'function' ? btn.disable(vm) : true) : false, + size: 'sm'}), + on: events + }, child) + } + + function getDropdown (h, vm, btn) { + var onlyIcons = btn.list === 'only-icons'; + var + label = btn.label, + icon = btn.icon !== null ? btn.icon : void 0, + contentClass, + Items; + + function closeDropdown () { + Dropdown.componentInstance.hide(); + } + + if (onlyIcons) { + Items = btn.options.map(function (btn) { + var active = btn.type === void 0 + ? vm.caret.is(btn.cmd, btn.param) + : false; + + if (active) { + label = btn.tip; + icon = btn.icon !== null ? btn.icon : void 0; + } + return getBtn(h, vm, btn, closeDropdown, active) + }); + contentClass = vm.toolbarBackgroundClass; + Items = [ + __getGroup(h, Items) + ]; + } + else { + var activeClass = vm.toolbarToggleColor !== void 0 + ? ("text-" + (vm.toolbarToggleColor)) + : null; + var inactiveClass = vm.toolbarTextColor !== void 0 + ? ("text-" + (vm.toolbarTextColor)) + : null; + + var noIcons = btn.list === 'no-icons'; + + Items = btn.options.map(function (btn) { + var disable = btn.disable ? btn.disable(vm) : false; + var active = btn.type === void 0 + ? vm.caret.is(btn.cmd, btn.param) + : false; + + if (active) { + label = btn.tip; + icon = btn.icon !== null ? btn.icon : void 0; + } + + var htmlTip = btn.htmlTip; + + return h( + QItem, + { + props: { active: active, activeClass: activeClass, clickable: true, disable: disable, dense: true }, + on: { + click: function click (e) { + closeDropdown(); + vm.$refs.content && vm.$refs.content.focus(); + vm.caret.restore(); + run(e, btn, vm); + } + } + }, + [ + noIcons === true + ? null + : h(QItemSection, { + class: active ? activeClass : inactiveClass, + props: { side: true } + }, [ + h(QIcon, { props: { name: btn.icon !== null ? btn.icon : void 0 } }) + ]), + + h(QItemSection, [ + htmlTip + ? h('div', { + staticClass: 'text-no-wrap', + domProps: { innerHTML: btn.htmlTip } + }) + : ( + btn.tip + ? h('div', { staticClass: 'text-no-wrap' }, [ btn.tip ]) + : null + ) + ]) + ] + ) + }); + contentClass = [vm.toolbarBackgroundClass, inactiveClass]; + Items = [ + h(QList, [ Items ]) + ]; + } + + var highlight = btn.highlight && label !== btn.label; + var Dropdown = h( + QBtnDropdown, + { + props: Object.assign({}, vm.buttonProps, + {noCaps: true, + noWrap: true, + color: highlight ? vm.toolbarToggleColor : vm.toolbarColor, + textColor: highlight && !vm.toolbarPush ? null : vm.toolbarTextColor, + label: btn.fixedLabel ? btn.label : label, + icon: btn.fixedIcon ? (btn.icon !== null ? btn.icon : void 0) : icon, + contentClass: contentClass}) + }, + Items + ); + return Dropdown + } + + function getToolbar (h, vm) { + if (vm.caret) { + return vm.buttons + .filter(function (f) { + return !vm.isViewingSource || f.find(function (fb) { return fb.cmd === 'viewsource'; }) + }) + .map(function (group) { return __getGroup( + h, + group.map(function (btn) { + if (vm.isViewingSource && btn.cmd !== 'viewsource') { + return false + } + + if (btn.type === 'slot') { + return slot(vm, btn.slot) + } + + if (btn.type === 'dropdown') { + return getDropdown(h, vm, btn) + } + + return getBtn(h, vm, btn) + }) + ); }) + } + } + + function getFonts (defaultFont, defaultFontLabel, defaultFontIcon, fonts) { + if ( fonts === void 0 ) fonts = {}; + + var aliases = Object.keys(fonts); + if (aliases.length === 0) { + return {} + } + + var def = { + default_font: { + cmd: 'fontName', + param: defaultFont, + icon: defaultFontIcon, + tip: defaultFontLabel + } + }; + + aliases.forEach(function (alias) { + var name = fonts[alias]; + def[alias] = { + cmd: 'fontName', + param: name, + icon: defaultFontIcon, + tip: name, + htmlTip: ("" + name + "") + }; + }); + + return def + } + + function getLinkEditor (h, vm, ie11) { + if (vm.caret) { + var color = vm.toolbarColor || vm.toolbarTextColor; + var link = vm.editLinkUrl; + var updateLink = function () { + vm.caret.restore(); + + if (link !== vm.editLinkUrl) { + document.execCommand('createLink', false, link === '' ? ' ' : link); + } + + vm.editLinkUrl = null; + + ie11 === true && vm.$nextTick(vm.__onInput); + }; + + return [ + h('div', { staticClass: 'q-mx-xs', 'class': ("text-" + color) }, [((vm.$q.lang.editor.url) + ": ")]), + h('input', { + key: 'qedt_btm_input', + staticClass: 'col q-editor__link-input', + domProps: { + value: link + }, + on: { + input: function (e) { + stop(e); + link = e.target.value; + }, + keydown: function (event) { + if (shouldIgnoreKey(event) === true) { + return + } + + switch (event.keyCode) { + case 13: // ENTER key + prevent(event); + return updateLink() + case 27: // ESCAPE key + prevent(event); + vm.caret.restore(); + if (!vm.editLinkUrl || vm.editLinkUrl === 'https://') { + document.execCommand('unlink'); + } + vm.editLinkUrl = null; + break + } + } + } + }), + __getGroup(h, [ + h(QBtn, { + key: 'qedt_btm_rem', + attrs: { tabindex: -1 }, + props: Object.assign({}, vm.buttonProps, + {label: vm.$q.lang.label.remove, + noCaps: true}), + on: { + click: function () { + vm.caret.restore(); + document.execCommand('unlink'); + vm.editLinkUrl = null; + + ie11 === true && vm.$nextTick(vm.__onInput); + } + } + }), + h(QBtn, { + key: 'qedt_btm_upd', + props: Object.assign({}, vm.buttonProps, + {label: vm.$q.lang.label.update, + noCaps: true}), + on: { + click: updateLink + } + }) + ]) + ] + } + } + + function getBlockElement (el, parent) { + if (parent && el === parent) { + return null + } + + var nodeName = el.nodeName.toLowerCase(); + + if (['div', 'li', 'ul', 'ol', 'blockquote'].includes(nodeName) === true) { + return el + } + + var + style = window.getComputedStyle + ? window.getComputedStyle(el) + : el.currentStyle, + display = style.display; + + if (display === 'block' || display === 'table') { + return el + } + + return getBlockElement(el.parentNode) + } + + function isChildOf (el, parent, orSame) { + return !el || el === document.body + ? false + : (orSame === true && el === parent) || (parent === document ? document.body : parent).contains(el.parentNode) + } + + function createRange (node, chars, range) { + if (!range) { + range = document.createRange(); + range.selectNode(node); + range.setStart(node, 0); + } + + if (chars.count === 0) { + range.setEnd(node, chars.count); + } + else if (chars.count > 0) { + if (node.nodeType === Node.TEXT_NODE) { + if (node.textContent.length < chars.count) { + chars.count -= node.textContent.length; + } + else { + range.setEnd(node, chars.count); + chars.count = 0; + } + } + else { + for (var lp = 0; chars.count !== 0 && lp < node.childNodes.length; lp++) { + range = createRange(node.childNodes[lp], chars, range); + } + } + } + + return range + } + + var urlRegex = /^https?:\/\//; + + var Caret = function Caret (el, vm) { + this.el = el; + this.vm = vm; + this._range = null; + }; + + var prototypeAccessors = { selection: { configurable: true },hasSelection: { configurable: true },range: { configurable: true },parent: { configurable: true },blockParent: { configurable: true } }; + + prototypeAccessors.selection.get = function () { + if (this.el) { + var sel = document.getSelection(); + + // only when the selection in element + if (isChildOf(sel.anchorNode, this.el, true) && isChildOf(sel.focusNode, this.el, true)) { + return sel + } + } + + return null + }; + + prototypeAccessors.hasSelection.get = function () { + return this.selection !== null + ? this.selection.toString().length > 0 + : false + }; + + prototypeAccessors.range.get = function () { + var sel = this.selection; + + if (sel !== null && sel.rangeCount) { + return sel.getRangeAt(0) + } + + return this._range + }; + + prototypeAccessors.parent.get = function () { + var range = this.range; + + if (range !== null) { + var node = range.startContainer; + + return node.nodeType === document.ELEMENT_NODE + ? node + : node.parentNode + } + + return null + }; + + prototypeAccessors.blockParent.get = function () { + var parent = this.parent; + + if (parent !== null) { + return getBlockElement(parent, this.el) + } + + return null + }; + + Caret.prototype.save = function save (range) { + if ( range === void 0 ) range = this.range; + + if (range !== null) { + this._range = range; + } + }; + + Caret.prototype.restore = function restore (range) { + if ( range === void 0 ) range = this._range; + + var + r = document.createRange(), + sel = document.getSelection(); + + if (range !== null) { + r.setStart(range.startContainer, range.startOffset); + r.setEnd(range.endContainer, range.endOffset); + sel.removeAllRanges(); + sel.addRange(r); + } + else { + sel.selectAllChildren(this.el); + sel.collapseToEnd(); + } + }; + + Caret.prototype.savePosition = function savePosition () { + var charCount = -1, node; + var + selection = document.getSelection(), + parentEl = this.el.parentNode; + + if (selection.focusNode && isChildOf(selection.focusNode, parentEl)) { + node = selection.focusNode; + charCount = selection.focusOffset; + + while (node && node !== parentEl) { + if (node !== this.el && node.previousSibling) { + node = node.previousSibling; + charCount += node.textContent.length; + } + else { + node = node.parentNode; + } + } + } + + this.savedPos = charCount; + }; + + Caret.prototype.restorePosition = function restorePosition (length) { + if ( length === void 0 ) length = 0; + + if (this.savedPos > 0 && this.savedPos < length) { + var + selection = window.getSelection(), + range = createRange(this.el, { count: this.savedPos }); + + if (range) { + range.collapse(false); + selection.removeAllRanges(); + selection.addRange(range); + } + } + }; + + Caret.prototype.hasParent = function hasParent (name, spanLevel) { + var el = spanLevel + ? this.parent + : this.blockParent; + + return el !== null + ? el.nodeName.toLowerCase() === name.toLowerCase() + : false + }; + + Caret.prototype.hasParents = function hasParents (list, recursive, el) { + if ( el === void 0 ) el = this.parent; + + if (el === null) { + return false + } + + if (list.includes(el.nodeName.toLowerCase()) === true) { + return true + } + + return recursive === true + ? this.hasParents(list, recursive, el.parentNode) + : false + }; + + Caret.prototype.is = function is (cmd, param) { + if (this.selection === null) { + return false + } + + switch (cmd) { + case 'formatBlock': + if (param === 'DIV' && this.parent === this.el) { + return true + } + return this.hasParent(param, param === 'PRE') + case 'link': + return this.hasParent('A', true) + case 'fontSize': + return document.queryCommandValue(cmd) === param + case 'fontName': + var res = document.queryCommandValue(cmd); + return res === ("\"" + param + "\"") || res === param + case 'fullscreen': + return this.vm.inFullscreen + case 'viewsource': + return this.vm.isViewingSource + case void 0: + return false + default: + var state = document.queryCommandState(cmd); + return param !== void 0 ? state === param : state + } + }; + + Caret.prototype.getParentAttribute = function getParentAttribute (attrib) { + if (this.parent !== null) { + return this.parent.getAttribute(attrib) + } + + return null + }; + + Caret.prototype.can = function can (name) { + if (name === 'outdent') { + return this.hasParents(['blockquote', 'li'], true) + } + + if (name === 'indent') { + return this.hasParents(['li'], true) + } + + if (name === 'link') { + return this.selection !== null || this.is('link') + } + }; + + Caret.prototype.apply = function apply (cmd, param, done) { + if ( done === void 0 ) done = noop; + + if (cmd === 'formatBlock') { + if (['BLOCKQUOTE', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(param) && this.is(cmd, param)) { + cmd = 'outdent'; + param = null; + } + + if (param === 'PRE' && this.is(cmd, 'PRE')) { + param = 'P'; + } + } + else if (cmd === 'print') { + done(); + + var win = window.open(); + + win.document.write(("\n \n \n \n Print - " + (document.title) + "\n \n \n
" + (this.el.innerHTML) + "
\n \n \n ")); + win.print(); + win.close(); + + return + } + else if (cmd === 'link') { + var link = this.getParentAttribute('href'); + + if (link === null) { + var selection = this.selectWord(this.selection); + var url = selection ? selection.toString() : ''; + + if (!url.length) { + if (!this.range || !this.range.cloneContents().querySelector('img')) { + return + } + } + + this.vm.editLinkUrl = urlRegex.test(url) ? url : 'https://'; + document.execCommand('createLink', false, this.vm.editLinkUrl); + + this.save(selection.getRangeAt(0)); + } + else { + this.vm.editLinkUrl = link; + + this.range.selectNodeContents(this.parent); + this.save(); + } + + return + } + else if (cmd === 'fullscreen') { + this.vm.toggleFullscreen(); + done(); + + return + } + else if (cmd === 'viewsource') { + this.vm.isViewingSource = this.vm.isViewingSource === false; + this.vm.__setContent(this.vm.value); + done(); + + return + } + + document.execCommand(cmd, false, param); + + done(); + }; + + Caret.prototype.selectWord = function selectWord (sel) { + if (sel === null || sel.isCollapsed !== true || /* IE 11 */ sel.modify === void 0) { + return sel + } + + // Detect if selection is backwards + var range = document.createRange(); + range.setStart(sel.anchorNode, sel.anchorOffset); + range.setEnd(sel.focusNode, sel.focusOffset); + var direction = range.collapsed ? ['backward', 'forward'] : ['forward', 'backward']; + range.detach(); + + // modify() works on the focus of the selection + var + endNode = sel.focusNode, + endOffset = sel.focusOffset; + sel.collapse(sel.anchorNode, sel.anchorOffset); + sel.modify('move', direction[0], 'character'); + sel.modify('move', direction[1], 'word'); + sel.extend(endNode, endOffset); + sel.modify('extend', direction[1], 'character'); + sel.modify('extend', direction[0], 'word'); + + return sel + }; + + Object.defineProperties( Caret.prototype, prototypeAccessors ); + + var + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + notPlainObject = new Set( + ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp'] + .map(function (name) { return '[object ' + name + ']'; }) + ); + + function isPlainObject (obj) { + if (obj !== Object(obj) || notPlainObject.has(toString.call(obj)) === true) { + return false + } + + if ( + obj.constructor && + hasOwn.call(obj, 'constructor') === false && + hasOwn.call(obj.constructor.prototype, 'isPrototypeOf') === false + ) { + return false + } + + var key; + for (key in obj) {} + + return key === void 0 || hasOwn.call(obj, key) + } + + function extend () { + var arguments$1 = arguments; + + var + options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + deep = false; + var length = arguments.length; + + if (typeof target === 'boolean') { + deep = target; + target = arguments[1] || {}; + i = 2; + } + + if (Object(target) !== target && typeof target !== 'function') { + target = {}; + } + + if (length === i) { + target = this; + i--; + } + + for (; i < length; i++) { + if ((options = arguments$1[i]) !== null) { + for (name in options) { + src = target[name]; + copy = options[name]; + + if (target === copy) { + continue + } + + if (deep === true && copy && ((copyIsArray = Array.isArray(copy)) || isPlainObject(copy) === true)) { + if (copyIsArray === true) { + clone = Array.isArray(src) === true ? src : []; + } + else { + clone = isPlainObject(src) === true ? src : {}; + } + + target[name] = extend(deep, clone, copy); + } + else if (copy !== void 0) { + target[name] = copy; + } + } + } + } + + return target + } + + var QEditor = Vue__default["default"].extend({ + name: 'QEditor', + + mixins: [ ListenersMixin, FullscreenMixin, DarkMixin ], + + directives: { + KeyGroupNavigation: KeyGroupNavigation + }, + + props: { + value: { + type: String, + required: true + }, + readonly: Boolean, + disable: Boolean, + minHeight: { + type: String, + default: '10rem' + }, + maxHeight: String, + height: String, + definitions: Object, + fonts: Object, + placeholder: String, + + toolbar: { + type: Array, + validator: function (v) { return v.length === 0 || v.every(function (group) { return group.length; }); }, + default: function default$1 () { + return [ + ['left', 'center', 'right', 'justify'], + ['bold', 'italic', 'underline', 'strike'], + ['undo', 'redo'] + ] + } + }, + toolbarColor: String, + toolbarBg: String, + toolbarTextColor: String, + toolbarToggleColor: { + type: String, + default: 'primary' + }, + toolbarOutline: Boolean, + toolbarPush: Boolean, + toolbarRounded: Boolean, + + paragraphTag: { + type: String, + validator: function (v) { return ['div', 'p'].includes(v); }, + default: 'div' + }, + + contentStyle: Object, + contentClass: [Object, Array, String], + + square: Boolean, + flat: Boolean, + dense: Boolean + }, + + computed: { + editable: function editable () { + return !this.readonly && !this.disable + }, + + hasToolbar: function hasToolbar () { + return this.toolbar && this.toolbar.length > 0 + }, + + toolbarBackgroundClass: function toolbarBackgroundClass () { + if (this.toolbarBg) { + return ("bg-" + (this.toolbarBg)) + } + }, + + buttonProps: function buttonProps () { + var flat = this.toolbarOutline !== true && + this.toolbarPush !== true; + + return { + type: 'a', + flat: flat, + noWrap: true, + outline: this.toolbarOutline, + push: this.toolbarPush, + rounded: this.toolbarRounded, + dense: true, + color: this.toolbarColor, + disable: !this.editable, + size: 'sm' + } + }, + + buttonDef: function buttonDef () { + var + e = this.$q.lang.editor, + i = this.$q.iconSet.editor; + + return { + bold: { cmd: 'bold', icon: i.bold, tip: e.bold, key: 66 }, + italic: { cmd: 'italic', icon: i.italic, tip: e.italic, key: 73 }, + strike: { cmd: 'strikeThrough', icon: i.strikethrough, tip: e.strikethrough, key: 83 }, + underline: { cmd: 'underline', icon: i.underline, tip: e.underline, key: 85 }, + unordered: { cmd: 'insertUnorderedList', icon: i.unorderedList, tip: e.unorderedList }, + ordered: { cmd: 'insertOrderedList', icon: i.orderedList, tip: e.orderedList }, + subscript: { cmd: 'subscript', icon: i.subscript, tip: e.subscript, htmlTip: 'x2' }, + superscript: { cmd: 'superscript', icon: i.superscript, tip: e.superscript, htmlTip: 'x2' }, + link: { cmd: 'link', disable: function (vm) { return vm.caret && !vm.caret.can('link'); }, icon: i.hyperlink, tip: e.hyperlink, key: 76 }, + fullscreen: { cmd: 'fullscreen', icon: i.toggleFullscreen, tip: e.toggleFullscreen, key: 70 }, + viewsource: { cmd: 'viewsource', icon: i.viewSource, tip: e.viewSource }, + + quote: { cmd: 'formatBlock', param: 'BLOCKQUOTE', icon: i.quote, tip: e.quote, key: 81 }, + left: { cmd: 'justifyLeft', icon: i.left, tip: e.left }, + center: { cmd: 'justifyCenter', icon: i.center, tip: e.center }, + right: { cmd: 'justifyRight', icon: i.right, tip: e.right }, + justify: { cmd: 'justifyFull', icon: i.justify, tip: e.justify }, + + print: { type: 'no-state', cmd: 'print', icon: i.print, tip: e.print, key: 80 }, + outdent: { type: 'no-state', disable: function (vm) { return vm.caret && !vm.caret.can('outdent'); }, cmd: 'outdent', icon: i.outdent, tip: e.outdent }, + indent: { type: 'no-state', disable: function (vm) { return vm.caret && !vm.caret.can('indent'); }, cmd: 'indent', icon: i.indent, tip: e.indent }, + removeFormat: { type: 'no-state', cmd: 'removeFormat', icon: i.removeFormat, tip: e.removeFormat }, + hr: { type: 'no-state', cmd: 'insertHorizontalRule', icon: i.hr, tip: e.hr }, + undo: { type: 'no-state', cmd: 'undo', icon: i.undo, tip: e.undo, key: 90 }, + redo: { type: 'no-state', cmd: 'redo', icon: i.redo, tip: e.redo, key: 89 }, + + h1: { cmd: 'formatBlock', param: 'H1', icon: i.heading1 || i.heading, tip: e.heading1, htmlTip: ("

" + (e.heading1) + "

") }, + h2: { cmd: 'formatBlock', param: 'H2', icon: i.heading2 || i.heading, tip: e.heading2, htmlTip: ("

" + (e.heading2) + "

") }, + h3: { cmd: 'formatBlock', param: 'H3', icon: i.heading3 || i.heading, tip: e.heading3, htmlTip: ("

" + (e.heading3) + "

") }, + h4: { cmd: 'formatBlock', param: 'H4', icon: i.heading4 || i.heading, tip: e.heading4, htmlTip: ("

" + (e.heading4) + "

") }, + h5: { cmd: 'formatBlock', param: 'H5', icon: i.heading5 || i.heading, tip: e.heading5, htmlTip: ("
" + (e.heading5) + "
") }, + h6: { cmd: 'formatBlock', param: 'H6', icon: i.heading6 || i.heading, tip: e.heading6, htmlTip: ("
" + (e.heading6) + "
") }, + p: { cmd: 'formatBlock', param: this.paragraphTag.toUpperCase(), icon: i.heading, tip: e.paragraph }, + code: { cmd: 'formatBlock', param: 'PRE', icon: i.code, htmlTip: ("" + (e.code) + "") }, + + 'size-1': { cmd: 'fontSize', param: '1', icon: i.size1 || i.size, tip: e.size1, htmlTip: ("" + (e.size1) + "") }, + 'size-2': { cmd: 'fontSize', param: '2', icon: i.size2 || i.size, tip: e.size2, htmlTip: ("" + (e.size2) + "") }, + 'size-3': { cmd: 'fontSize', param: '3', icon: i.size3 || i.size, tip: e.size3, htmlTip: ("" + (e.size3) + "") }, + 'size-4': { cmd: 'fontSize', param: '4', icon: i.size4 || i.size, tip: e.size4, htmlTip: ("" + (e.size4) + "") }, + 'size-5': { cmd: 'fontSize', param: '5', icon: i.size5 || i.size, tip: e.size5, htmlTip: ("" + (e.size5) + "") }, + 'size-6': { cmd: 'fontSize', param: '6', icon: i.size6 || i.size, tip: e.size6, htmlTip: ("" + (e.size6) + "") }, + 'size-7': { cmd: 'fontSize', param: '7', icon: i.size7 || i.size, tip: e.size7, htmlTip: ("" + (e.size7) + "") } + } + }, + + buttons: function buttons () { + var this$1$1 = this; + + var userDef = this.definitions || {}; + var def = this.definitions || this.fonts + ? extend( + true, + {}, + this.buttonDef, + userDef, + getFonts( + this.defaultFont, + this.$q.lang.editor.defaultFont, + this.$q.iconSet.editor.font, + this.fonts + ) + ) + : this.buttonDef; + + return this.toolbar.map( + function (group) { return group.map(function (token) { + if (token.options) { + return { + type: 'dropdown', + icon: token.icon, + label: token.label, + size: 'sm', + dense: true, + fixedLabel: token.fixedLabel, + fixedIcon: token.fixedIcon, + highlight: token.highlight, + list: token.list, + options: token.options.map(function (item) { return def[item]; }) + } + } + + var obj = def[token]; + + if (obj) { + return obj.type === 'no-state' || (userDef[token] && ( + obj.cmd === void 0 || (this$1$1.buttonDef[obj.cmd] && this$1$1.buttonDef[obj.cmd].type === 'no-state') + )) + ? obj + : Object.assign({ type: 'toggle' }, obj) + } + else { + return { + type: 'slot', + slot: token + } + } + }); } + ) + }, + + keys: function keys () { + var + k = {}, + add = function (btn) { + if (btn.key) { + k[btn.key] = { + cmd: btn.cmd, + param: btn.param + }; + } + }; + + this.buttons.forEach(function (group) { + group.forEach(function (token) { + if (token.options) { + token.options.forEach(add); + } + else { + add(token); + } + }); + }); + return k + }, + + innerStyle: function innerStyle () { + return this.inFullscreen + ? this.contentStyle + : [ + { + minHeight: this.minHeight, + height: this.height, + maxHeight: this.maxHeight + }, + this.contentStyle + ] + }, + + classes: function classes () { + return "q-editor q-editor--" + (this.isViewingSource === true ? 'source' : 'default') + + (this.disable === true ? ' disabled' : '') + + (this.inFullscreen === true ? ' fullscreen column' : '') + + (this.square === true ? ' q-editor--square no-border-radius' : '') + + (this.flat === true ? ' q-editor--flat' : '') + + (this.dense === true ? ' q-editor--dense' : '') + + " q-editor--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + }, + + innerClass: function innerClass () { + return [ + this.contentClass, + { col: this.inFullscreen, 'overflow-auto': this.inFullscreen || this.maxHeight } + ] + }, + + attrs: function attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + }, + + onEditor: function onEditor () { + return { + focusin: this.__onFocusin, + focusout: this.__onFocusout + } + } + }, + + data: function data () { + return { + lastEmit: this.value, + editLinkUrl: null, + isViewingSource: false + } + }, + + watch: { + value: function value (v) { + if (this.lastEmit !== v) { + this.lastEmit = v; + this.__setContent(v, true); + } + } + }, + + methods: { + __onInput: function __onInput () { + if (this.$refs.content !== void 0) { + var val = this.isViewingSource === true + ? this.$refs.content.innerText + : this.$refs.content.innerHTML; + + if (val !== this.value) { + this.lastEmit = val; + this.$emit('input', val); + } + } + }, + + __onKeydown: function __onKeydown (e) { + this.$emit('keydown', e); + + if (e.ctrlKey !== true || shouldIgnoreKey(e) === true) { + this.refreshToolbar(); + this.$q.platform.is.ie && this.$nextTick(this.__onInput); + return + } + + var key = e.keyCode; + var target = this.keys[key]; + if (target !== void 0) { + var cmd = target.cmd; + var param = target.param; + stopAndPrevent(e); + this.runCmd(cmd, param, false); + } + }, + + __onClick: function __onClick (e) { + this.refreshToolbar(); + this.$emit('click', e); + }, + + __onBlur: function __onBlur (e) { + if (this.$refs.content !== void 0) { + var ref = this.$refs.content; + var scrollTop = ref.scrollTop; + var scrollHeight = ref.scrollHeight; + this.__offsetBottom = scrollHeight - scrollTop; + } + this.$q.platform.is.ie !== true && this.caret.save(); + this.$emit('blur', e); + }, + + __onFocus: function __onFocus (e) { + var this$1$1 = this; + + this.$nextTick(function () { + if (this$1$1.$refs.content !== void 0 && this$1$1.__offsetBottom !== void 0) { + this$1$1.$refs.content.scrollTop = this$1$1.$refs.content.scrollHeight - this$1$1.__offsetBottom; + } + }); + this.$emit('focus', e); + }, + + __onFocusin: function __onFocusin (e) { + if ( + this.$el.contains(e.target) === true && + ( + e.relatedTarget === null || + this.$el.contains(e.relatedTarget) !== true + ) + ) { + var prop = "inner" + (this.isViewingSource === true ? 'Text' : 'HTML'); + this.caret.restorePosition(this.$refs.content[prop].length); + this.refreshToolbar(); + } + }, + + __onFocusout: function __onFocusout (e) { + if ( + this.$el.contains(e.target) === true && + ( + e.relatedTarget === null || + this.$el.contains(e.relatedTarget) !== true + ) + ) { + this.caret.savePosition(); + this.refreshToolbar(); + } + }, + + // mousedown, touchstart + __onPointerStart: function __onPointerStart (e) { + this.__offsetBottom = void 0; + this.qListeners[e.type] !== void 0 && this.$emit(e.type, e); + }, + + __onSelectionchange: function __onSelectionchange () { + this.caret.save(); + }, + + runCmd: function runCmd (cmd, param, update) { + var this$1$1 = this; + if ( update === void 0 ) update = true; + + this.focus(); + this.caret.restore(); + this.caret.apply(cmd, param, function () { + this$1$1.focus(); + this$1$1.caret.save(); + if (this$1$1.$q.platform.is.ie === true || this$1$1.$q.platform.is.edge === true) { + this$1$1.$nextTick(this$1$1.__onInput); + } + if (update) { + this$1$1.refreshToolbar(); + } + }); + }, + + refreshToolbar: function refreshToolbar () { + var this$1$1 = this; + + setTimeout(function () { + this$1$1.editLinkUrl = null; + this$1$1.$forceUpdate(); + }, 1); + }, + + focus: function focus () { + this.$refs.content !== void 0 && this.$refs.content.focus({ preventScroll: true }); + }, + + getContentEl: function getContentEl () { + return this.$refs.content + }, + + __setContent: function __setContent (v, restorePosition) { + if (this.$refs.content !== void 0) { + if (restorePosition === true) { + this.caret.savePosition(); + } + + var prop = "inner" + (this.isViewingSource === true ? 'Text' : 'HTML'); + this.$refs.content[prop] = v; + + if (restorePosition === true) { + this.caret.restorePosition(this.$refs.content[prop].length); + this.refreshToolbar(); + } + } + } + }, + + created: function created () { + if (isSSR === false) { + document.execCommand('defaultParagraphSeparator', false, this.paragraphTag); + this.defaultFont = window.getComputedStyle(document.body).fontFamily; + } + }, + + mounted: function mounted () { + this.caret = new Caret(this.$refs.content, this); + this.__setContent(this.value); + this.refreshToolbar(); + + document.addEventListener('selectionchange', this.__onSelectionchange); + }, + + beforeDestroy: function beforeDestroy () { + document.removeEventListener('selectionchange', this.__onSelectionchange); + }, + + render: function render (h) { + var toolbars; + + if (this.hasToolbar) { + var bars = [ + h('div', { + key: 'qedt_top', + staticClass: 'q-editor__toolbar row no-wrap scroll-x', + class: this.toolbarBackgroundClass + }, getToolbar(h, this)) + ]; + + this.editLinkUrl !== null && bars.push( + h('div', { + key: 'qedt_btm', + staticClass: 'q-editor__toolbar row no-wrap items-center scroll-x', + class: this.toolbarBackgroundClass + }, getLinkEditor(h, this, this.$q.platform.is.ie)) + ); + + toolbars = h('div', { + key: 'toolbar_ctainer', + staticClass: 'q-editor__toolbars-container relative-position', + directives: [ KeyGroupNavigation ] + }, bars); + } + + var on = Object.assign({}, this.qListeners, + {input: this.__onInput, + keydown: this.__onKeydown, + click: this.__onClick, + blur: this.__onBlur, + focus: this.__onFocus, + + // clean saved scroll position + mousedown: this.__onPointerStart, + touchstart: this.__onPointerStart}); + + return h('div', { + style: { + height: this.inFullscreen === true ? '100%' : null + }, + class: this.classes, + attrs: this.attrs, + on: this.onEditor + }, [ + toolbars, + + h( + 'div', + { + ref: 'content', + staticClass: 'q-editor__content', + style: this.innerStyle, + class: this.innerClass, + attrs: { + contenteditable: this.editable, + placeholder: this.placeholder + }, + domProps: isSSR + ? { innerHTML: this.value } + : void 0, + on: on + } + ) + ]) + } + }); + + var QItemLabel = Vue__default["default"].extend({ + name: 'QItemLabel', + + mixins: [ ListenersMixin ], + + props: { + overline: Boolean, + caption: Boolean, + header: Boolean, + lines: [ Number, String ] + }, + + computed: { + classes: function classes () { + return { + 'q-item__label--overline text-overline': this.overline, + 'q-item__label--caption text-caption': this.caption, + 'q-item__label--header': this.header, + 'ellipsis': parseInt(this.lines, 10) === 1 + } + }, + + style: function style () { + if (this.lines !== void 0 && parseInt(this.lines, 10) > 1) { + return { + overflow: 'hidden', + display: '-webkit-box', + '-webkit-box-orient': 'vertical', + '-webkit-line-clamp': this.lines + } + } + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-item__label', + style: this.style, + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QSlideTransition = Vue__default["default"].extend({ + name: 'QSlideTransition', + + props: { + appear: Boolean, + duration: { + type: Number, + default: 300 + } + }, + + methods: { + __begin: function __begin (el, height, done) { + el.style.overflowY = 'hidden'; + if (height !== void 0) { + el.style.height = height + "px"; + } + el.style.transition = "height " + (this.duration) + "ms cubic-bezier(.25, .8, .50, 1)"; + + this.animating = true; + this.done = done; + }, + + __end: function __end (el, event) { + el.style.overflowY = null; + el.style.height = null; + el.style.transition = null; + this.__cleanup(); + event !== this.lastEvent && this.$emit(event); + }, + + __cleanup: function __cleanup () { + this.done && this.done(); + this.done = null; + this.animating = false; + + clearTimeout(this.timer); + clearTimeout(this.timerFallback); + this.el !== void 0 && this.el.removeEventListener('transitionend', this.animListener); + this.animListener = null; + } + }, + + beforeDestroy: function beforeDestroy () { + this.animating && this.__cleanup(); + }, + + render: function render (h) { + var this$1$1 = this; + + return h('transition', { + key: 'tr', + props: { + css: false, + appear: this.appear + }, + on: cache(this, 'tr', { + enter: function (el, done) { + var pos = 0; + this$1$1.el = el; + + if (this$1$1.animating === true) { + this$1$1.__cleanup(); + pos = el.offsetHeight === el.scrollHeight ? 0 : void 0; + } + else { + this$1$1.lastEvent = 'hide'; + } + + this$1$1.__begin(el, pos, done); + + this$1$1.timer = setTimeout(function () { + el.style.height = (el.scrollHeight) + "px"; + this$1$1.animListener = function (evt) { + if (Object(evt) !== evt || evt.target === el) { + this$1$1.__end(el, 'show'); + } + }; + el.addEventListener('transitionend', this$1$1.animListener); + this$1$1.timerFallback = setTimeout(this$1$1.animListener, this$1$1.duration * 1.1); + }, 100); + }, + + leave: function (el, done) { + var pos; + this$1$1.el = el; + + if (this$1$1.animating === true) { + this$1$1.__cleanup(); + } + else { + this$1$1.lastEvent = 'show'; + pos = el.scrollHeight; + } + + this$1$1.__begin(el, pos, done); + + this$1$1.timer = setTimeout(function () { + el.style.height = 0; + this$1$1.animListener = function (evt) { + if (Object(evt) !== evt || evt.target === el) { + this$1$1.__end(el, 'hide'); + } + }; + el.addEventListener('transitionend', this$1$1.animListener); + this$1$1.timerFallback = setTimeout(this$1$1.animListener, this$1$1.duration * 1.1); + }, 100); + } + }) + }, slot(this, 'default')) + } + }); + + var insetMap = { + true: 'inset', + item: 'item-inset', + 'item-thumbnail': 'item-thumbnail-inset' + }; + + var margins = { + xs: 2, + sm: 4, + md: 8, + lg: 16, + xl: 24 + }; + + var QSeparator = Vue__default["default"].extend({ + name: 'QSeparator', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + spaced: [ Boolean, String ], + inset: [ Boolean, String ], + vertical: Boolean, + color: String, + size: String + }, + + computed: { + orientation: function orientation () { + return this.vertical === true + ? 'vertical' + : 'horizontal' + }, + + classPrefix: function classPrefix () { + return (" q-separator--" + (this.orientation)) + }, + + insetClass: function insetClass () { + return this.inset !== false + ? ((this.classPrefix) + "-" + (insetMap[this.inset])) + : '' + }, + + classes: function classes () { + return "q-separator" + (this.classPrefix) + (this.insetClass) + + (this.color !== void 0 ? (" bg-" + (this.color)) : '') + + " q-separator--" + (this.darkSuffix) + }, + + style: function style () { + var style = {}; + + if (this.size !== void 0) { + style[ this.vertical === true ? 'width' : 'height' ] = this.size; + } + + if (this.spaced !== false) { + var size = this.spaced === true + ? ((margins.md) + "px") + : this.spaced in margins ? ((margins[this.spaced]) + "px") : this.spaced; + + var props = this.vertical === true + ? [ 'Left', 'Right' ] + : [ 'Top', 'Bottom' ]; + + style[("margin" + (props[0]))] = style[("margin" + (props[1]))] = size; + } + + return style + }, + + attrs: function attrs () { + return { + 'aria-orientation': this.orientation + } + } + }, + + render: function render (h) { + return h('hr', { + staticClass: 'q-separator', + class: this.classes, + style: this.style, + attrs: this.attrs, + on: Object.assign({}, this.qListeners) + }) + } + }); + + var eventName = 'q:expansion-item:close'; + var LINK_PROPS = Object.keys(routerLinkProps); + + var QExpansionItem = Vue__default["default"].extend({ + name: 'QExpansionItem', + + mixins: [ DarkMixin, TimeoutMixin, ModelToggleMixin ], + + props: Object.assign({}, routerLinkProps, + + {icon: String, + + label: String, + labelLines: [ Number, String ], + + caption: String, + captionLines: [ Number, String ], + + dense: Boolean, + + toggleAriaLabel: String, + expandIcon: String, + expandedIcon: String, + expandIconClass: [ Array, String, Object ], + duration: Number, + + headerInsetLevel: Number, + contentInsetLevel: Number, + + expandSeparator: Boolean, + defaultOpened: Boolean, + hideExpandIcon: Boolean, + expandIconToggle: Boolean, + switchToggleSide: Boolean, + denseToggle: Boolean, + group: String, + popup: Boolean, + + headerStyle: [Array, String, Object], + headerClass: [Array, String, Object]}), + + data: function data () { + return { + showing: this.value !== void 0 + ? this.value + : this.defaultOpened + } + }, + + watch: { + showing: function showing (val) { + if (val === true) { + this.shouldRenderContent !== true && (this.shouldRenderContent = true); + this.group !== void 0 && this.$root.$emit(eventName, this); + } + }, + + group: function group (newVal, oldVal) { + if (newVal !== void 0 && oldVal === void 0) { + this.$root.$on(eventName, this.__eventHandler); + } + else if (newVal === void 0 && oldVal !== void 0) { + this.$root.$off(eventName, this.__eventHandler); + } + } + }, + + computed: { + classes: function classes () { + return "q-expansion-item--" + (this.showing === true ? 'expanded' : 'collapsed') + + " q-expansion-item--" + (this.popup === true ? 'popup' : 'standard') + }, + + contentStyle: function contentStyle () { + var obj; + + if (this.contentInsetLevel !== void 0) { + var dir = this.$q.lang.rtl === true ? 'Right' : 'Left'; + return ( obj = {}, obj['padding' + dir] = (this.contentInsetLevel * 56) + 'px', obj ) + } + }, + + hasLink: function hasLink () { + return this.disable !== true && ( + this.href !== void 0 || + (this.to !== void 0 && this.to !== null && this.to !== '') + ) + }, + + linkProps: function linkProps () { + var this$1$1 = this; + + var acc = {}; + LINK_PROPS.forEach(function (key) { + acc[ key ] = this$1$1[ key ]; + }); + return acc + }, + + isClickable: function isClickable () { + return this.hasLink === true || this.expandIconToggle !== true + }, + + expansionIcon: function expansionIcon () { + return this.expandedIcon !== void 0 && this.showing === true + ? this.expandedIcon + : this.expandIcon || this.$q.iconSet.expansionItem[this.denseToggle === true ? 'denseIcon' : 'icon'] + }, + + activeToggleIcon: function activeToggleIcon () { + return this.disable !== true && (this.hasLink === true || this.expandIconToggle === true) + }, + + headerSlotScope: function headerSlotScope () { + return { + expanded: this.showing === true, + detailsId: this.targetUid, + toggle: this.toggle, + show: this.show, + hide: this.hide + } + }, + + toggleAriaAttrs: function toggleAriaAttrs () { + var toggleAriaLabel = this.toggleAriaLabel !== void 0 + ? this.toggleAriaLabel + : this.$q.lang.label[ this.showing === true ? 'collapse' : 'expand' ](this.label); + + return { + role: 'button', + 'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-owns': this.targetUid, + 'aria-controls': this.targetUid, + 'aria-label': toggleAriaLabel + } + } + }, + + methods: { + __onHeaderClick: function __onHeaderClick (e) { + this.hasLink !== true && this.toggle(e); + this.$emit('click', e); + }, + + __toggleIconKeyboard: function __toggleIconKeyboard (e) { + e.keyCode === 13 && this.__toggleIcon(e); + }, + + __toggleIcon: function __toggleIcon (e) { + if ( + this.$q.interaction.isPointer === true && + this.$refs.blurTarget !== void 0 && + document.activeElement !== this.$refs.blurTarget + ) { + this.$refs.blurTarget.focus(); + } + else if ( + this.$q.interaction.isKeyboard === true && + document.activeElement === this.$refs.blurTarget + ) { + this.$refs.blurTarget.parentNode.focus(); + } + this.toggle(e); + stopAndPrevent(e); + }, + + __eventHandler: function __eventHandler (comp) { + this !== comp && this.group === comp.group && this.hide(); + }, + + __getToggleIcon: function __getToggleIcon (h) { + var data = { + staticClass: ("q-focusable relative-position cursor-pointer" + (this.denseToggle === true && this.switchToggleSide === true ? ' items-end' : '')), + class: this.expandIconClass, + props: { + side: this.switchToggleSide !== true, + avatar: this.switchToggleSide + } + }; + + var child = [ + h(QIcon, { + staticClass: 'q-expansion-item__toggle-icon', + class: this.expandedIcon === void 0 && this.showing === true + ? 'q-expansion-item__toggle-icon--rotated' + : void 0, + props: { name: this.expansionIcon } + }) + ]; + + if (this.activeToggleIcon === true) { + Object.assign(data, { + key: 'inpExt', + attrs: Object.assign({}, {tabindex: 0}, + this.toggleAriaAttrs), + on: cache(this, 'inpExt', { + click: this.__toggleIcon, + keyup: this.__toggleIconKeyboard + }) + }); + + child.unshift( + h('div', { + ref: 'blurTarget', + staticClass: 'q-expansion-item__toggle-focus q-icon q-focus-helper q-focus-helper--rounded', + attrs: { tabindex: -1 } + }) + ); + } + + return h(QItemSection, data, child) + }, + + __getHeader: function __getHeader (h) { + var child; + + if (this.$scopedSlots.header !== void 0) { + child = [].concat(this.$scopedSlots.header(this.headerSlotScope)); + } + else { + child = [ + h(QItemSection, [ + h(QItemLabel, { + props: { lines: this.labelLines } + }, [ this.label || '' ]), + + this.caption + ? h(QItemLabel, { + props: { lines: this.captionLines, caption: true } + }, [ this.caption ]) + : null + ]) + ]; + + this.icon && child[this.switchToggleSide === true ? 'push' : 'unshift']( + h(QItemSection, { + props: { + side: this.switchToggleSide === true, + avatar: this.switchToggleSide !== true + } + }, [ + h(QIcon, { + props: { name: this.icon } + }) + ]) + ); + } + + this.disable !== true && this.hideExpandIcon !== true && child[this.switchToggleSide === true ? 'unshift' : 'push']( + this.__getToggleIcon(h) + ); + + var data = { + ref: 'item', + style: this.headerStyle, + class: this.headerClass, + props: { + dark: this.dark, + disable: this.disable, + dense: this.dense, + insetLevel: this.headerInsetLevel + } + }; + + if (this.isClickable === true) { + data.props.clickable = true; + + if (this.hasLink === true) { + Object.assign(data.props, this.linkProps); + } + else { + data.attrs = this.toggleAriaAttrs; + } + + data.on = Object.assign({}, this.qListeners, + {click: this.__onHeaderClick}); + } + + return h(QItem, data, child) + }, + + __getContent: function __getContent (h) { + var this$1$1 = this; + + var node = [ + this.__getHeader(h), + + h(QSlideTransition, { + key: 'slide', + props: { duration: this.duration }, + on: cache(this, 'slide', { + show: function () { this$1$1.$emit('after-show'); }, + hide: function () { this$1$1.$emit('after-hide'); } + }) + }, [ + h('div', { + staticClass: 'q-expansion-item__content relative-position', + style: this.contentStyle, + attrs: { id: this.targetUid }, + directives: [{ name: 'show', value: this.showing }] + }, this.shouldRenderContent === true ? slot(this, 'default') : void 0) + ]) + ]; + + if (this.expandSeparator) { + node.push( + h(QSeparator, { + staticClass: 'q-expansion-item__border q-expansion-item__border--top absolute-top', + props: { dark: this.dark } + }), + h(QSeparator, { + staticClass: 'q-expansion-item__border q-expansion-item__border--bottom absolute-bottom', + props: { dark: this.dark } + }) + ); + } + + return node + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-expansion-item q-item-type', + class: this.classes + }, [ + h( + 'div', + { staticClass: 'q-expansion-item__container relative-position' }, + this.__getContent(h) + ) + ]) + }, + + created: function created () { + this.shouldRenderContent = this.showing === true; + this.group !== void 0 && this.$root.$on(eventName, this.__eventHandler); + this.targetUid = "e_" + (uid$3()); + }, + + beforeDestroy: function beforeDestroy () { + this.group !== void 0 && this.$root.$off(eventName, this.__eventHandler); + } + }); + + var labelPositions = ['top', 'right', 'bottom', 'left']; + + var FabMixin = { + mixins: [ ListenersMixin ], + + props: { + type: { + type: String, + default: 'a' + }, + + outline: Boolean, + push: Boolean, + flat: Boolean, + unelevated: Boolean, + + color: String, + textColor: String, + glossy: Boolean, + + square: Boolean, + padding: String, + + label: { + type: [ String, Number ], + default: '' + }, + labelPosition: { + type: String, + default: 'right', + validator: function (v) { return labelPositions.includes(v); } + }, + externalLabel: Boolean, + hideLabel: { + type: Boolean + }, + labelClass: [ Array, String, Object ], + labelStyle: [ Array, String, Object ], + + disable: Boolean, + + tabindex: [ Number, String ] + }, + + computed: { + formClass: function formClass () { + return ("q-fab--form-" + (this.square === true ? 'square' : 'rounded')) + }, + + stacked: function stacked () { + return this.externalLabel === false && ['top', 'bottom'].includes(this.labelPosition) + }, + + labelProps: function labelProps () { + if (this.externalLabel === true) { + var hideLabel = this.hideLabel === null + ? this.showing === false + : this.hideLabel; + + return { + action: 'push', + data: { + staticClass: 'q-fab__label q-tooltip--style q-fab__label--external' + + " q-fab__label--external-" + (this.labelPosition) + + (hideLabel === true ? ' q-fab__label--external-hidden' : ''), + style: this.labelStyle, + class: this.labelClass + } + } + } + + return { + action: [ 'left', 'top' ].includes(this.labelPosition) + ? 'unshift' + : 'push', + data: { + staticClass: "q-fab__label q-fab__label--internal q-fab__label--internal-" + (this.labelPosition) + + (this.hideLabel === true ? ' q-fab__label--internal-hidden' : ''), + style: this.labelStyle, + class: this.labelClass + } + } + } + } + }; + + var directions = ['up', 'right', 'down', 'left']; + var alignValues = [ 'left', 'center', 'right' ]; + + var QFab = Vue__default["default"].extend({ + name: 'QFab', + + inheritAttrs: false, + + mixins: [ FabMixin, AttrsMixin, ModelToggleMixin ], + + provide: function provide () { + return { + __qFab: this + } + }, + + props: { + icon: String, + activeIcon: String, + + hideIcon: Boolean, + hideLabel: { + default: null + }, + + direction: { + type: String, + default: 'right', + validator: function (v) { return directions.includes(v); } + }, + + persistent: Boolean, + + verticalActionsAlign: { + type: String, + default: 'center', + validator: function (v) { return alignValues.includes(v); } + } + }, + + data: function data () { + return { + showing: this.value === true + } + }, + + computed: { + hideOnRouteChange: function hideOnRouteChange () { + return this.persistent !== true + }, + + classes: function classes () { + return "q-fab--align-" + (this.verticalActionsAlign) + " " + (this.formClass) + + (this.showing === true ? ' q-fab--opened' : '') + }, + + actionsClasses: function actionsClasses () { + return "q-fab__actions--" + (this.direction) + (this.showing === true ? ' q-fab__actions--opened' : '') + }, + + actionsAttrs: function actionsAttrs () { + var attrs = { + id: this.targetUid + }; + + if (this.showing === true) { + attrs.role = 'menu'; + } + else { + attrs['aria-hidden'] = 'true'; + } + + return attrs + }, + + iconHolderClasses: function iconHolderClasses () { + return this.showing === true ? 'q-fab__icon-holder--opened' : '' + }, + + attrs: function attrs () { + return Object.assign({}, {'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-haspopup': 'true', + 'aria-controls': this.targetUid, + 'aria-owns': this.targetUid}, + this.qAttrs) + }, + + slotScope: function slotScope () { + return { opened: this.showing } + } + }, + + methods: { + __onChildClick: function __onChildClick (evt) { + this.hide(evt); + + if (this.$refs.trigger && this.$refs.trigger.$el) { + this.$refs.trigger.$el.focus(); + } + }, + + __getIcon: function __getIcon (h, kebab, camel) { + var slotFn = this.$scopedSlots[kebab]; + var staticClass = "q-fab__" + kebab + " absolute-full"; + + return slotFn === void 0 + ? h(QIcon, { staticClass: staticClass, props: { name: this[camel] || this.$q.iconSet.fab[camel] } }) + : h('div', { staticClass: staticClass }, slotFn(this.slotScope)) + } + }, + + render: function render (h) { + var child = []; + + this.hideIcon !== true && child.push( + h('div', { staticClass: 'q-fab__icon-holder', class: this.iconHolderClasses }, [ + this.__getIcon(h, 'icon', 'icon'), + this.__getIcon(h, 'active-icon', 'activeIcon') + ]) + ); + + if (this.label !== '' || this.$scopedSlots.label !== void 0) { + child[this.labelProps.action]( + h('div', this.labelProps.data, this.$scopedSlots.label !== void 0 ? this.$scopedSlots.label(this.slotScope) : [ this.label ]) + ); + } + + return h('div', { + staticClass: 'q-fab z-fab row inline justify-center', + class: this.classes, + on: Object.assign({}, this.qListeners) + }, [ + h(QBtn, { + key: 'tog', + ref: 'trigger', + class: this.formClass, + props: Object.assign({}, this.$props, + {noWrap: true, + stack: this.stacked, + align: void 0, + icon: void 0, + label: void 0, + noCaps: true, + fab: true}), + attrs: this.attrs, + on: cache(this, 'tog', { + click: this.toggle + }) + }, mergeSlot(child, this, 'tooltip')), + + h('div', { + staticClass: 'q-fab__actions flex no-wrap inline', + class: this.actionsClasses, + attrs: this.actionsAttrs + }, slot(this, 'default')) + ]) + }, + + created: function created () { + this.targetUid = "fb_" + (uid$3()); + } + }); + + var anchorMap = { + start: 'self-end', + center: 'self-center', + end: 'self-start' + }; + + var anchorValues = Object.keys(anchorMap); + + var QFabAction = Vue__default["default"].extend({ + name: 'QFabAction', + + mixins: [ FabMixin ], + + props: { + icon: { + type: String, + default: '' + }, + + anchor: { + type: String, + validator: function (v) { return anchorValues.includes(v); } + }, + + to: [ String, Object ], + replace: Boolean + }, + + inject: { + __qFab: { + default: function default$1 () { + return { + showing: true, + __onChildClick: noop + } + } + } + }, + + computed: { + classes: function classes () { + var align = anchorMap[this.anchor]; + return this.formClass + (align !== void 0 ? (" " + align) : '') + }, + + onEvents: function onEvents () { + return Object.assign({}, this.qListeners, + {click: this.click}) + }, + + isDisabled: function isDisabled () { + return this.__qFab.showing !== true || this.disable === true + } + }, + + methods: { + click: function click (e) { + this.__qFab.__onChildClick(e); + this.$emit('click', e); + } + }, + + render: function render (h) { + var child = []; + + if (this.$scopedSlots.icon !== void 0) { + child.push(this.$scopedSlots.icon()); + } + else if (this.icon !== '') { + child.push( + h(QIcon, { + props: { name: this.icon } + }) + ); + } + + if (this.label !== '' || this.$scopedSlots.label !== void 0) { + child[this.labelProps.action]( + h('div', this.labelProps.data, this.$scopedSlots.label !== void 0 ? this.$scopedSlots.label() : [ this.label ]) + ); + } + + return h(QBtn, { + class: this.classes, + props: Object.assign({}, this.$props, + {noWrap: true, + stack: this.stacked, + icon: void 0, + label: void 0, + noCaps: true, + fabMini: true, + disable: this.isDisabled}), + on: this.onEvents + }, mergeSlot(child, this, 'default')) + } + }); + + var lazyRulesValues = [ true, false, 'ondemand' ]; + + var ValidateMixin = { + props: { + value: {}, + + error: { + type: Boolean, + default: null + }, + errorMessage: String, + noErrorIcon: Boolean, + + rules: Array, + reactiveRules: Boolean, + lazyRules: { + type: [ Boolean, String ], + validator: function (v) { return lazyRulesValues.includes(v); } + } + }, + + data: function data () { + return { + isDirty: null, + innerError: false, + innerErrorMessage: void 0 + } + }, + + watch: { + value: function value () { + this.__validateIfNeeded(); + }, + + disable: function disable (val) { + if (val === true) { + this.__resetValidation(); + } + else { + this.__validateIfNeeded(true); + } + }, + + reactiveRules: { + handler: function handler (val) { + var this$1$1 = this; + + if (val === true) { + if (this.unwatchRules === void 0) { + this.unwatchRules = this.$watch('rules', function () { + this$1$1.__validateIfNeeded(true); + }); + } + } + else if (this.unwatchRules !== void 0) { + this.unwatchRules(); + this.unwatchRules = void 0; + } + }, + immediate: true + }, + + focused: function focused (focused$1) { + if (focused$1 === true) { + if (this.isDirty === null) { + this.isDirty = false; + } + } + else if (this.isDirty === false) { + this.isDirty = true; + + if ( + this.hasActiveRules === true && + this.lazyRules !== 'ondemand' && + // Don't re-trigger if it's already in progress; + // It might mean that focus switched to submit btn and + // QForm's submit() has been called already (ENTER key) + this.innerLoading === false + ) { + this.debouncedValidate(); + } + } + }, + + hasError: function hasError (invalid) { + var targetEl = document.getElementById(this.targetUid); + targetEl !== null && targetEl.setAttribute('aria-invalid', invalid === true); + } + }, + + computed: { + hasRules: function hasRules () { + return this.rules !== void 0 && + this.rules !== null && + this.rules.length > 0 + }, + + hasActiveRules: function hasActiveRules () { + return this.disable !== true && this.hasRules === true + }, + + hasError: function hasError () { + return this.error === true || this.innerError === true + }, + + computedErrorMessage: function computedErrorMessage () { + return typeof this.errorMessage === 'string' && this.errorMessage.length > 0 + ? this.errorMessage + : this.innerErrorMessage + } + }, + + created: function created () { + this.debouncedValidate = debounce(this.validate, 0); + }, + + mounted: function mounted () { + this.validateIndex = 0; + }, + + beforeDestroy: function beforeDestroy () { + this.unwatchRules !== void 0 && this.unwatchRules(); + this.debouncedValidate.cancel(); + }, + + methods: { + resetValidation: function resetValidation () { + this.isDirty = null; + this.__resetValidation(); + }, + + /* + * Return value + * - true (validation succeeded) + * - false (validation failed) + * - Promise (pending async validation) + */ + validate: function validate (val) { + var this$1$1 = this; + if ( val === void 0 ) val = this.value; + + if (this.hasActiveRules !== true) { + return true + } + + var index = ++this.validateIndex; + + var setDirty = this.innerLoading !== true + ? function () { return this$1$1.isDirty !== true && (this$1$1.isDirty = true); } + : function () {}; + + var update = function (err, msg) { + err === true && setDirty(); + + if (this$1$1.innerError !== err) { + this$1$1.innerError = err; + } + + var m = msg || void 0; + + if (this$1$1.innerErrorMessage !== m) { + this$1$1.innerErrorMessage = m; + } + + if (this$1$1.innerLoading !== false) { + this$1$1.innerLoading = false; + } + }; + + var promises = []; + + for (var i = 0; i < this.rules.length; i++) { + var rule = this.rules[i]; + var res = (void 0); + + if (typeof rule === 'function') { + res = rule(val, testPattern); + } + else if (typeof rule === 'string' && testPattern[rule] !== void 0) { + res = testPattern[rule](val); + } + + if (res === false || typeof res === 'string') { + update(true, res); + return false + } + else if (res !== true && res !== void 0) { + promises.push(res); + } + } + + if (promises.length === 0) { + update(false); + return true + } + + if (this.innerLoading !== true) { + this.innerLoading = true; + } + + return Promise.all(promises).then( + function (res) { + if (res === void 0 || Array.isArray(res) === false || res.length === 0) { + index === this$1$1.validateIndex && update(false); + return true + } + + var msg = res.find(function (r) { return r === false || typeof r === 'string'; }); + index === this$1$1.validateIndex && update(msg !== void 0, msg); + return msg === void 0 + }, + function (e) { + if (index === this$1$1.validateIndex) { + console.error(e); + update(true); + } + + return false + } + ) + }, + + __resetValidation: function __resetValidation () { + this.debouncedValidate.cancel(); + this.validateIndex++; + this.innerLoading = false; + this.innerError = false; + this.innerErrorMessage = void 0; + }, + + __validateIfNeeded: function __validateIfNeeded (changedRules) { + if ( + this.hasActiveRules === true && + this.lazyRules !== 'ondemand' && + (this.isDirty === true || (this.lazyRules !== true && changedRules !== true)) + ) { + this.debouncedValidate(); + } + } + } + }; + + function getTargetUid (val) { + return val === void 0 ? ("f_" + (uid$3())) : val + } + + var parentStyles = new WeakMap(); + + var QField = Vue__default["default"].extend({ + name: 'QField', + + mixins: [ DarkMixin, ValidateMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + label: String, + stackLabel: Boolean, + hint: String, + hideHint: Boolean, + prefix: String, + suffix: String, + + labelColor: String, + color: String, + bgColor: String, + + filled: Boolean, + outlined: Boolean, + outlinedMd: Boolean, + borderless: Boolean, + standout: [Boolean, String], + + square: Boolean, + + loading: Boolean, + + labelSlot: Boolean, + + bottomSlots: Boolean, + hideBottomSpace: Boolean, + + rounded: Boolean, + dense: Boolean, + itemAligned: Boolean, + + counter: Boolean, + + clearable: Boolean, + clearIcon: String, + + disable: Boolean, + readonly: Boolean, + + autofocus: Boolean, + + for: String, + + maxlength: [Number, String], + maxValues: [Number, String] // private, do not add to JSON; internally needed by QSelect + }, + + data: function data () { + return { + focused: false, + targetUid: getTargetUid(this.for), + + // used internally by validation for QInput + // or menu handling for QSelect + innerLoading: false + } + }, + + watch: { + for: function for$1 (val) { + // don't transform targetUid into a computed + // prop as it will break SSR + this.targetUid = getTargetUid(val); + } + }, + + computed: { + editable: function editable () { + return this.disable !== true && this.readonly !== true + }, + + hasValue: function hasValue () { + var value = this.__getControl === void 0 ? this.value : this.innerValue; + + return value !== void 0 && + value !== null && + ('' + value).length > 0 + }, + + computedCounter: function computedCounter () { + if (this.counter !== false) { + var len = typeof this.value === 'string' || typeof this.value === 'number' + ? ('' + this.value).length + : (Array.isArray(this.value) === true ? this.value.length : 0); + + var max = this.maxlength !== void 0 + ? this.maxlength + : this.maxValues; + + return len + (max !== void 0 ? ' / ' + max : '') + } + }, + + floatingLabel: function floatingLabel () { + return this.stackLabel === true || + this.focused === true || + typeof this.inputValue === 'number' || + (typeof this.inputValue === 'string' && this.inputValue.length > 0) || + (this.hideSelected !== true && this.hasValue === true) || + ( + this.displayValue !== void 0 && + this.displayValue !== null && + ('' + this.displayValue).length > 0 + ) + }, + + shouldRenderBottom: function shouldRenderBottom () { + return this.bottomSlots === true || + this.hint !== void 0 || + this.hasRules === true || + this.counter === true || + this.error !== null + }, + + classes: function classes () { + var obj; + + var outlineSuffix = this.styleType === 'outlined' && this.outlinedMd === true ? 'md' : 'std'; + + return ( obj = {}, obj[this.fieldClass] = this.fieldClass !== void 0, obj[("q-field--" + (this.styleType))] = true, obj[("q-field--outlined--" + outlineSuffix)] = this.styleType === 'outlined', obj['q-field--rounded'] = this.rounded, obj['q-field--square'] = this.square, obj['q-field--focused'] = this.focused === true, obj['q-field--highlighted'] = this.focused === true || this.hasError === true, obj['q-field--float'] = this.floatingLabel, obj['q-field--labeled'] = this.hasLabel, obj[("q-field--labeled--" + outlineSuffix)] = this.hasLabel, obj['q-field--dense'] = this.dense, obj['q-field--item-aligned q-item-type'] = this.itemAligned, obj[("q-field--" + (this.darkSuffix))] = true, obj['q-field--auto-height'] = this.__getControl === void 0, obj['q-field--with-bottom'] = this.hideBottomSpace !== true && this.shouldRenderBottom === true, obj['q-field--error'] = this.hasError, obj['q-field--readonly'] = this.readonly === true && this.disable !== true, obj['q-field--disabled'] = this.disable === true, obj ) + }, + + styleType: function styleType () { + if (this.filled === true) { return 'filled' } + if (this.outlined === true || this.outlinedMd === true) { return 'outlined' } + if (this.borderless === true) { return 'borderless' } + if (this.standout) { return 'standout' } + return 'standard' + }, + + contentClass: function contentClass () { + var cls = []; + + if (this.hasError === true) { + cls.push('text-negative'); + } + else if (typeof this.standout === 'string' && this.standout.length > 0 && this.focused === true) { + return this.standout + } + else if (this.color !== void 0) { + cls.push('text-' + this.color); + } + + if (this.bgColor !== void 0) { + cls.push(("bg-" + (this.bgColor))); + } + + return cls + }, + + hasLabel: function hasLabel () { + return this.labelSlot === true || this.label !== void 0 + }, + + labelClass: function labelClass () { + if ( + this.labelColor !== void 0 && + this.hasError !== true + ) { + return 'text-' + this.labelColor + } + }, + + controlSlotScope: function controlSlotScope () { + return { + id: this.targetUid, + field: this.$el, + editable: this.editable, + focused: this.focused, + floatingLabel: this.floatingLabel, + value: this.value, + emitValue: this.__emitValue + } + }, + + bottomSlotScope: function bottomSlotScope () { + return { + id: this.targetUid, + field: this.$el, + editable: this.editable, + focused: this.focused, + value: this.value, + errorMessage: this.computedErrorMessage + } + }, + + attrs: function attrs () { + var attrs = { + for: this.targetUid + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + else if (this.readonly === true) { + attrs['aria-readonly'] = 'true'; + } + + return attrs + } + }, + + methods: { + focus: function focus () { + this.__focus(); + }, + + blur: function blur () { + var el = document.activeElement; + // IE can have null document.activeElement + if (el !== null && this.$el.contains(el)) { + el.blur(); + } + }, + + __focus: function __focus () { + var el = document.activeElement; + var target = this.$refs.target; + // IE can have null document.activeElement + if (target !== void 0 && (el === null || el.id !== this.targetUid)) { + target.hasAttribute('tabindex') === true || (target = target.querySelector('[tabindex]')); + target !== null && managedFocus(target); + } + }, + + __getContent: function __getContent (h) { + var node = []; + + this.$scopedSlots.prepend !== void 0 && node.push( + h('div', { + staticClass: 'q-field__prepend q-field__marginal row no-wrap items-center', + key: 'prepend', + on: this.slotsEvents + }, this.$scopedSlots.prepend()) + ); + + node.push( + h('div', { + staticClass: 'q-field__control-container col relative-position row no-wrap q-anchor--skip' + }, this.__getControlContainer(h)) + ); + + this.hasError === true && this.noErrorIcon === false && node.push( + this.__getInnerAppendNode(h, 'error', [ + h(QIcon, { props: { name: this.$q.iconSet.field.error, color: 'negative' } }) + ]) + ); + + if (this.loading === true || this.innerLoading === true) { + node.push( + this.__getInnerAppendNode( + h, + 'inner-loading-append', + this.$scopedSlots.loading !== void 0 + ? this.$scopedSlots.loading() + : [ h(QSpinner, { props: { color: this.color } }) ] + ) + ); + } + else if (this.clearable === true && this.hasValue === true && this.editable === true) { + node.push( + this.__getInnerAppendNode(h, 'inner-clearable-append', [ + h(QIcon, { + staticClass: 'q-field__focusable-action', + props: { tag: 'button', name: this.clearIcon || this.$q.iconSet.field.clear }, + attrs: iconAsButton, + on: this.clearableEvents + }) + ]) + ); + } + + this.$scopedSlots.append !== void 0 && node.push( + h('div', { + staticClass: 'q-field__append q-field__marginal row no-wrap items-center', + key: 'append', + on: this.slotsEvents + }, this.$scopedSlots.append()) + ); + + this.__getInnerAppend !== void 0 && node.push( + this.__getInnerAppendNode(h, 'inner-append', this.__getInnerAppend(h)) + ); + + this.__getControlChild !== void 0 && node.push( + this.__getControlChild(h) + ); + + return node + }, + + __getControlContainer: function __getControlContainer (h) { + var node = []; + + this.prefix !== void 0 && this.prefix !== null && node.push( + h('div', { + staticClass: 'q-field__prefix no-pointer-events row items-center' + }, [ this.prefix ]) + ); + + if (this.hasShadow === true && this.__getShadowControl !== void 0) { + node.push( + this.__getShadowControl(h) + ); + } + + if (this.__getControl !== void 0) { + node.push(this.__getControl(h)); + } + // internal usage only: + else if (this.$scopedSlots.rawControl !== void 0) { + node.push(this.$scopedSlots.rawControl()); + } + else if (this.$scopedSlots.control !== void 0) { + node.push( + h('div', { + ref: 'target', + staticClass: 'q-field__native row', + attrs: Object.assign({}, {tabindex: -1}, + this.qAttrs, + {'data-autofocus': this.autofocus || void 0}) + }, this.$scopedSlots.control(this.controlSlotScope)) + ); + } + + var labelNodes = [ slot(this, 'label', this.label) ]; + + if (this.outlinedMd === true) { + labelNodes.unshift(h('div', { staticClass: 'q-field__label-back', style: { backgroundColor: this.__getBgColor() } })); + } + + this.hasLabel === true && node.push( + h('div', { + staticClass: 'q-field__label no-pointer-events absolute ellipsis', + class: this.labelClass + }, labelNodes) + ); + + this.suffix !== void 0 && this.suffix !== null && node.push( + h('div', { + staticClass: 'q-field__suffix no-pointer-events row items-center' + }, [ this.suffix ]) + ); + + return node.concat( + this.__getDefaultSlot !== void 0 + ? this.__getDefaultSlot(h) + : slot(this, 'default') + ) + }, + + __getBottom: function __getBottom (h) { + var msg, key; + + if (this.hasError === true) { + key = 'q--slot-error'; + + if (this.$scopedSlots.error !== void 0) { + msg = this.$scopedSlots.error(this.bottomSlotScope); + } + else if (this.computedErrorMessage !== void 0) { + msg = [ h('div', { attrs: { role: 'alert' } }, [ this.computedErrorMessage ]) ]; + key = this.computedErrorMessage; + } + } + else if (this.hideHint !== true || this.focused === true) { + key = 'q--slot-hint'; + + if (this.$scopedSlots.hint !== void 0) { + msg = this.$scopedSlots.hint(this.bottomSlotScope); + } + else if (this.hint !== void 0) { + msg = [ h('div', [ this.hint ]) ]; + key = this.hint; + } + } + + var hasCounter = this.counter === true || this.$scopedSlots.counter !== void 0; + + if (this.hideBottomSpace === true && hasCounter === false && msg === void 0) { + return + } + + var main = h('div', { + key: key, + staticClass: 'q-field__messages col' + }, msg); + + return h('div', { + staticClass: 'q-field__bottom row items-start q-field__bottom--' + + (this.hideBottomSpace !== true ? 'animated' : 'stale'), + on: { click: prevent } + }, [ + this.hideBottomSpace === true + ? main + : h('transition', { props: { name: 'q-transition--field-message' } }, [ + main + ]), + + hasCounter === true + ? h('div', { + staticClass: 'q-field__counter' + }, this.$scopedSlots.counter !== void 0 ? this.$scopedSlots.counter() : [ this.computedCounter ]) + : null + ]) + }, + + __getInnerAppendNode: function __getInnerAppendNode (h, key, content) { + return content === null ? null : h('div', { + staticClass: 'q-field__append q-field__marginal row no-wrap items-center q-anchor--skip', + key: key + }, content) + }, + + __onControlPopupShow: function __onControlPopupShow (e) { + e !== void 0 && stop(e); + this.$emit('popup-show', e); + this.hasPopupOpen = true; + this.__onControlFocusin(e); + }, + + __onControlPopupHide: function __onControlPopupHide (e) { + e !== void 0 && stop(e); + this.$emit('popup-hide', e); + this.hasPopupOpen = false; + this.__onControlFocusout(e); + }, + + __onControlFocusin: function __onControlFocusin (e) { + clearTimeout(this.focusoutTimer); + if (this.editable === true && this.focused === false) { + this.focused = true; + this.$emit('focus', e); + } + }, + + __onControlFocusout: function __onControlFocusout (e, then) { + var this$1$1 = this; + + clearTimeout(this.focusoutTimer); + this.focusoutTimer = setTimeout(function () { + if ( + document.hasFocus() === true && ( + this$1$1.hasPopupOpen === true || + this$1$1.$refs === void 0 || + this$1$1.$refs.control === void 0 || + this$1$1.$refs.control.contains(document.activeElement) !== false + ) + ) { + return + } + + if (this$1$1.focused === true) { + this$1$1.focused = false; + this$1$1.$emit('blur', e); + } + + then !== void 0 && then(); + }); + }, + + __clearValue: function __clearValue (e) { + var this$1$1 = this; + + // prevent activating the field but keep focus on desktop + stopAndPrevent(e); + + if (this.$q.platform.is.mobile !== true) { + var el = this.$refs.target || this.$el; + el.focus(); + } + else if (this.$el.contains(document.activeElement) === true) { + document.activeElement.blur(); + } + + if (this.type === 'file') { + // do not let focus be triggered + // as it will make the native file dialog + // appear for another selection + this.$refs.input.value = null; + } + + this.$emit('input', null); + this.$emit('clear', this.value); + + this.$nextTick(function () { + this$1$1.resetValidation(); + + if (this$1$1.$q.platform.is.mobile !== true) { + this$1$1.isDirty = false; + } + }); + }, + + __emitValue: function __emitValue (value) { + this.$emit('input', value); + }, + + __getBgColor: function __getBgColor () { + var el, bgColor; + for (var i = this.parents.length - 1; i >= 0; i--) { + el = this.parents[i]; + if (parentStyles.has(el)) { + bgColor = parentStyles.get(el).backgroundColor; + if (bgColor !== 'rgba(0, 0, 0, 0)' && bgColor !== 'transparent') { + return bgColor + } + } + } + } + }, + + render: function render (h) { + this.__onPreRender !== void 0 && this.__onPreRender(); + + var attrs = this.__getControl === void 0 && this.$scopedSlots.control === void 0 + ? Object.assign({}, this.qAttrs, + {'data-autofocus': this.autofocus || void 0}, + this.attrs) + : this.attrs; + + return h('label', { + staticClass: 'q-field q-validation-component row no-wrap items-start q-key-group-navigation--ignore-key', + class: this.classes, + attrs: attrs + }, [ + this.$scopedSlots.before !== void 0 ? h('div', { + staticClass: 'q-field__before q-field__marginal row no-wrap items-center', + on: this.slotsEvents + }, this.$scopedSlots.before()) : null, + + h('div', { + staticClass: 'q-field__inner relative-position col self-stretch' + }, [ + h('div', { + ref: 'control', + staticClass: 'q-field__control relative-position row no-wrap', + class: this.contentClass, + attrs: { tabindex: -1 }, + on: this.controlEvents + }, this.__getContent(h)), + + this.shouldRenderBottom === true + ? this.__getBottom(h) + : null + ]), + + this.$scopedSlots.after !== void 0 ? h('div', { + staticClass: 'q-field__after q-field__marginal row no-wrap items-center', + on: this.slotsEvents + }, this.$scopedSlots.after()) : null + ]) + }, + + created: function created () { + this.__onPreRender !== void 0 && this.__onPreRender(); + + this.slotsEvents = { click: prevent }; + + this.clearableEvents = { click: this.__clearValue }; + + this.controlEvents = this.__getControlEvents !== void 0 + ? this.__getControlEvents() + : { + focusin: this.__onControlFocusin, + focusout: this.__onControlFocusout, + 'popup-show': this.__onControlPopupShow, + 'popup-hide': this.__onControlPopupHide + }; + + this.parents = []; + }, + + mounted: function mounted () { + var this$1$1 = this; + + if (fromSSR === true && this.for === void 0) { + this.targetUid = getTargetUid(); + } + + this.autofocus === true && this.focus(); + + this.$nextTick(function () { + var el = this$1$1.$refs.control; + while (el) { + if (parentStyles.has(el) !== true) { + parentStyles.set(el, window.getComputedStyle(el)); + } + this$1$1.parents.unshift(el); + el = el.parentElement; + } + + if (this$1$1.outlinedMd === true && this$1$1.parents.length > 0) { + this$1$1.$forceUpdate(); + } + }); + }, + + activated: function activated () { + if (this.shouldActivate !== true) { return } + this.autofocus === true && this.focus(); + }, + + deactivated: function deactivated () { + this.shouldActivate = true; + }, + + beforeDestroy: function beforeDestroy () { + clearTimeout(this.focusoutTimer); + this.parents = []; + } + }); + + function filterFiles (files, rejectedFiles, failedPropValidation, filterFn) { + var acceptedFiles = []; + + files.forEach(function (file) { + if (filterFn(file) === true) { + acceptedFiles.push(file); + } + else { + rejectedFiles.push({ failedPropValidation: failedPropValidation, file: file }); + } + }); + + return acceptedFiles + } + + function stopAndPreventDrag (e) { + e && e.dataTransfer && (e.dataTransfer.dropEffect = 'copy'); + stopAndPrevent(e); + } + + var FileMixin = { + props: { + multiple: Boolean, + accept: String, + capture: String, + maxFileSize: [ Number, String ], + maxTotalSize: [ Number, String ], + maxFiles: [ Number, String ], + filter: Function + }, + + computed: { + extensions: function extensions () { + if (this.accept !== void 0) { + return this.accept.split(',').map(function (ext) { + ext = ext.trim(); + if (ext === '*') { // support "*" + return '*/' + } + else if (ext.endsWith('/*')) { // support "image/*" or "*/*" + ext = ext.slice(0, ext.length - 1); + } + return ext.toUpperCase() + }) + } + }, + + maxFilesNumber: function maxFilesNumber () { + return parseInt(this.maxFiles, 10) + }, + + maxTotalSizeNumber: function maxTotalSizeNumber () { + return parseInt(this.maxTotalSize, 10) + } + }, + + methods: { + pickFiles: function pickFiles (ev) { + if (this.editable === true) { + if (ev !== Object(ev)) { + ev = { target: null }; + } + + if (ev.target !== null && ev.target.matches('input[type="file"]') === true) { + // stop propagation if it's not a real pointer event + ev.clientX === 0 && ev.clientY === 0 && stop(ev); + } + else { + var input = this.__getFileInput(); + input && input !== ev.target && input.click(ev); + } + } + }, + + addFiles: function addFiles (files) { + if (this.editable && files) { + this.__addFiles(null, files); + } + }, + + __processFiles: function __processFiles (e, filesToProcess, currentFileList, append) { + var this$1$1 = this; + + var files = Array.from(filesToProcess || e.target.files); + var rejectedFiles = []; + + var done = function () { + if (rejectedFiles.length > 0) { + this$1$1.$emit('rejected', rejectedFiles); + } + }; + + // filter file types + if (this.accept !== void 0 && this.extensions.indexOf('*/') === -1) { + files = filterFiles(files, rejectedFiles, 'accept', function (file) { + return this$1$1.extensions.some(function (ext) { return ( + file.type.toUpperCase().startsWith(ext) || + file.name.toUpperCase().endsWith(ext) + ); }) + }); + + if (files.length === 0) { return done() } + } + + // filter max file size + if (this.maxFileSize !== void 0) { + var maxFileSize = parseInt(this.maxFileSize, 10); + files = filterFiles(files, rejectedFiles, 'max-file-size', function (file) { + return file.size <= maxFileSize + }); + + if (files.length === 0) { return done() } + } + + // Cordova/iOS allows selecting multiple files even when the + // multiple attribute is not specified. We also normalize drag'n'dropped + // files here: + if (this.multiple !== true && files.length > 0) { + files = [ files[0] ]; + } + + files.forEach(function (file) { + file.__key = file.webkitRelativePath + file.lastModified + file.name + file.size; + }); + + if (append === true) { + // Avoid duplicate files + var filenameMap = currentFileList.map(function (entry) { return entry.__key; }); + files = filterFiles(files, rejectedFiles, 'duplicate', function (file) { + return filenameMap.includes(file.__key) === false + }); + } + + if (files.length === 0) { return done() } + + if (this.maxTotalSize !== void 0) { + var size = append === true + ? currentFileList.reduce(function (total, file) { return total + file.size; }, 0) + : 0; + + files = filterFiles(files, rejectedFiles, 'max-total-size', function (file) { + size += file.size; + return size <= this$1$1.maxTotalSizeNumber + }); + + if (files.length === 0) { return done() } + } + + // do we have custom filter function? + if (typeof this.filter === 'function') { + var filteredFiles = this.filter(files); + files = filterFiles(files, rejectedFiles, 'filter', function (file) { + return filteredFiles.includes(file) + }); + } + + if (this.maxFiles !== void 0) { + var filesNumber = append === true + ? currentFileList.length + : 0; + + files = filterFiles(files, rejectedFiles, 'max-files', function () { + filesNumber++; + return filesNumber <= this$1$1.maxFilesNumber + }); + + if (files.length === 0) { return done() } + } + + done(); + + if (files.length > 0) { + return files + } + }, + + __onDragOver: function __onDragOver (e) { + stopAndPreventDrag(e); + this.dnd !== true && (this.dnd = true); + }, + + __onDragLeave: function __onDragLeave (e) { + stopAndPrevent(e); + + // Safari bug: relatedTarget is null for over 10 years + // https://bugs.webkit.org/show_bug.cgi?id=66547 + var gone = e.relatedTarget !== null || Platform.is.safari !== true + ? e.relatedTarget !== this.$refs.dnd + : document.elementsFromPoint(e.clientX, e.clientY).includes(this.$refs.dnd) === false; + + gone === true && (this.dnd = false); + }, + + __onDrop: function __onDrop (e) { + stopAndPreventDrag(e); + var files = e.dataTransfer.files; + + if (files.length > 0) { + this.__addFiles(null, files); + } + + this.dnd = false; + }, + + __getDnd: function __getDnd (h, type) { + if (this.dnd === true) { + return h('div', { + key: 'dnd', + staticClass: ("q-" + type + "__dnd absolute-full"), + ref: 'dnd', + on: cache(this, 'dnd', { + dragenter: stopAndPreventDrag, + dragover: stopAndPreventDrag, + dragleave: this.__onDragLeave, + drop: this.__onDrop + }) + }) + } + } + } + }; + + var FileValueMixin = { + computed: { + formDomProps: function formDomProps () { + if (this.type !== 'file') { + return + } + + try { + var dt = 'DataTransfer' in window + ? new DataTransfer() + : ('ClipboardEvent' in window + ? new ClipboardEvent('').clipboardData + : void 0 + ); + + if (Object(this.value) === this.value) { + ('length' in this.value + ? Array.from(this.value) + : [ this.value ] + ).forEach(function (file) { + dt.items.add(file); + }); + } + + return { + files: dt.files + } + } + catch (e) { + return { + files: void 0 + } + } + } + } + }; + + var QFile = Vue__default["default"].extend({ + name: 'QFile', + + mixins: [ QField, FileMixin, FormFieldMixin, FileValueMixin ], + + props: { + /* SSR does not know about File & FileList */ + value: isSSR === true + ? {} + : [ File, FileList, Array ], + + append: Boolean, + useChips: Boolean, + displayValue: [ String, Number ], + + tabindex: { + type: [ String, Number ], + default: 0 + }, + + counterLabel: Function, + + inputClass: [ Array, String, Object ], + inputStyle: [ Array, String, Object ] + }, + + data: function data () { + return { + dnd: false + } + }, + + computed: { + innerValue: function innerValue () { + return Object(this.value) === this.value + ? ('length' in this.value ? Array.from(this.value) : [ this.value ]) + : [] + }, + + selectedString: function selectedString () { + return this.innerValue + .map(function (file) { return file.name; }) + .join(', ') + }, + + totalSize: function totalSize () { + return humanStorageSize( + this.innerValue.reduce(function (acc, file) { return acc + file.size; }, 0) + ) + }, + + counterProps: function counterProps () { + return { + totalSize: this.totalSize, + filesNumber: this.innerValue.length, + maxFiles: this.maxFiles + } + }, + + computedCounter: function computedCounter () { + if (this.counterLabel !== void 0) { + return this.counterLabel(this.counterProps) + } + + var max = this.maxFiles; + return ("" + (this.innerValue.length) + (max !== void 0 ? ' / ' + max : '') + " (" + (this.totalSize) + ")") + }, + + inputAttrs: function inputAttrs () { + return Object.assign({}, {tabindex: -1, + type: 'file', + title: '', // try to remove default tooltip, + accept: this.accept, + capture: this.capture, + name: this.nameProp}, + this.qAttrs, + {id: this.targetUid, + disabled: this.editable !== true}) + }, + + isAppending: function isAppending () { + return this.multiple === true && this.append === true + }, + + fieldClass: function fieldClass () { + return 'q-file q-field--auto-height' + (this.dnd === true ? ' q-file--dnd' : '') + } + }, + + methods: { + removeAtIndex: function removeAtIndex (index) { + var files = this.innerValue.slice(); + files.splice(index, 1); + this.__emitValue(files); + }, + + removeFile: function removeFile (file) { + var index = this.innerValue.findIndex(file); + if (index > -1) { + this.removeAtIndex(index); + } + }, + + __emitValue: function __emitValue (files) { + this.$emit('input', this.multiple === true ? files : files[0]); + }, + + __onKeydown: function __onKeydown (e) { + // prevent form submit if ENTER is pressed + e.keyCode === 13 && prevent(e); + }, + + __onKeyup: function __onKeyup (e) { + // only on ENTER and SPACE to match native input field + if (e.keyCode === 13 || e.keyCode === 32) { + this.pickFiles(e); + } + }, + + __getFileInput: function __getFileInput () { + return this.$refs.input + }, + + __addFiles: function __addFiles (e, fileList) { + var this$1$1 = this; + + var files = this.__processFiles(e, fileList, this.innerValue, this.isAppending); + var fileInput = this.__getFileInput(); + + if (fileInput !== void 0) { + fileInput.value = ''; + } + + // if nothing to do... + if (files === void 0) { return } + + // protect against input @change being called in a loop + // like it happens on Safari, so don't emit same thing: + if ( + this.multiple === true + ? this.value && files.every(function (f) { return this$1$1.innerValue.includes(f); }) + : this.value === files[ 0 ] + ) { + return + } + + this.__emitValue( + this.isAppending === true + ? this.innerValue.concat(files) + : files + ); + }, + + __getControl: function __getControl (h) { + var data = { + key: 'target', + ref: 'target', + staticClass: 'q-field__native row items-center cursor-pointer', + attrs: { + tabindex: this.tabindex + } + }; + + if (this.editable === true) { + data.on = cache(this, 'native', { + dragover: this.__onDragOver, + dragleave: this.__onDragLeave, + keydown: this.__onKeydown, + keyup: this.__onKeyup + }); + } + + return h('div', data, [ this.__getInput(h) ].concat(this.__getSelection(h))) + }, + + __getControlChild: function __getControlChild (h) { + return this.__getDnd(h, 'file') + }, + + __getFiller: function __getFiller (h) { + return [ + h('input', { + class: [ this.inputClass, 'q-file__filler' ], + style: this.inputStyle + }) + ] + }, + + __getSelection: function __getSelection (h) { + var this$1$1 = this; + + if (this.$scopedSlots.file !== void 0) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.innerValue.map(function (file, index) { return this$1$1.$scopedSlots.file({ index: index, file: file, ref: this$1$1 }); }) + } + + if (this.$scopedSlots.selected !== void 0) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.$scopedSlots.selected({ files: this.innerValue, ref: this }) + } + + if (this.useChips === true) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.innerValue.map(function (file, i) { return h(QChip, { + key: 'rem#' + i, + props: { + removable: this$1$1.editable, + dense: true, + textColor: this$1$1.color, + tabindex: this$1$1.tabindex + }, + on: cache(this$1$1, 'rem#' + i, { + remove: function () { this$1$1.removeAtIndex(i); } + }) + }, [ + h('span', { + staticClass: 'ellipsis', + domProps: { + textContent: file.name + } + }) + ]); }) + } + + var textContent = this.displayValue !== void 0 + ? this.displayValue + : this.selectedString; + + return textContent.length > 0 + ? [ + h('div', { + style: this.inputStyle, + class: this.inputClass, + domProps: { textContent: textContent } + }) + ] + : this.__getFiller(h) + }, + + __getInput: function __getInput (h) { + var data = { + key: 'input', + ref: 'input', + staticClass: 'q-field__input fit absolute-full cursor-pointer', + attrs: this.inputAttrs, + domProps: this.formDomProps, + on: cache(this, 'input', { + change: this.__addFiles + }) + }; + + if (this.multiple === true) { + data.attrs.multiple = true; + } + + return h('input', data) + } + }, + + created: function created () { + // necessary for QField's clearable + // and FileValueMixin + this.type = 'file'; + } + }); + + var QFooter = Vue__default["default"].extend({ + name: 'QFooter', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default: function default$1 () { + console.error('QFooter needs to be child of QLayout'); + } + } + }, + + props: { + value: { + type: Boolean, + default: true + }, + reveal: Boolean, + bordered: Boolean, + elevated: Boolean, + + heightHint: { + type: [String, Number], + default: 50 + } + }, + + data: function data () { + return { + size: parseInt(this.heightHint, 10), + revealed: true, + windowHeight: onSSR || this.layout.container ? 0 : window.innerHeight + } + }, + + watch: { + value: function value (val) { + this.__update('space', val); + this.__updateLocal('revealed', true); + this.layout.__animate(); + }, + + offset: function offset (val) { + this.__update('offset', val); + }, + + reveal: function reveal (val) { + val === false && this.__updateLocal('revealed', this.value); + }, + + revealed: function revealed (val) { + this.layout.__animate(); + this.$emit('reveal', val); + }, + + 'layout.scroll': function layout_scroll () { + this.__updateRevealed(); + }, + + 'layout.height': function layout_height () { + this.__updateRevealed(); + }, + + size: function size () { + this.__updateRevealed(); + }, + + '$q.screen.height': function $q_screen_height (val) { + this.layout.container !== true && this.__updateLocal('windowHeight', val); + } + }, + + computed: { + fixed: function fixed () { + return this.reveal === true || + this.layout.view.indexOf('F') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + containerHeight: function containerHeight () { + return this.layout.container === true + ? this.layout.containerHeight + : this.windowHeight + }, + + offset: function offset () { + if (this.value !== true) { + return 0 + } + if (this.fixed === true) { + return this.revealed === true ? this.size : 0 + } + var offset = this.layout.scroll.position + this.containerHeight + this.size - this.layout.height; + return offset > 0 ? offset : 0 + }, + + hidden: function hidden () { + return this.value !== true || (this.fixed === true && this.revealed !== true) + }, + + revealOnFocus: function revealOnFocus () { + return this.value === true && this.hidden === true && this.reveal === true + }, + + classes: function classes () { + return (this.fixed === true ? 'fixed' : 'absolute') + '-bottom' + + (this.bordered === true ? ' q-footer--bordered' : '') + + (this.hidden === true ? ' q-footer--hidden' : '') + + (this.value !== true ? ' q-layout--prevent-focus' : '') + + (this.value !== true && this.fixed !== true ? ' hidden' : '') + }, + + style: function style () { + var + view = this.layout.rows.bottom, + css = {}; + + if (view[0] === 'l' && this.layout.left.space === true) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = (this.layout.left.size) + "px"; + } + if (view[2] === 'r' && this.layout.right.space === true) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = (this.layout.right.size) + "px"; + } + + return css + }, + + onEvents: function onEvents () { + return Object.assign({}, this.qListeners, + {focusin: this.__onFocusin, + input: stop}) + } + }, + + render: function render (h) { + var child = mergeSlot([ + h(QResizeObserver, { + key: 'resize', + props: { debounce: 0 }, + on: cache(this, 'resize', { resize: this.__onResize }) + }) + ], this, 'default'); + + this.elevated === true && child.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ); + + return h('footer', { + staticClass: 'q-footer q-layout__section--marginal', + class: this.classes, + style: this.style, + on: this.onEvents + }, child) + }, + + created: function created () { + this.layout.instances.footer = this; + this.value === true && this.__update('size', this.size); + this.__update('space', this.value); + this.__update('offset', this.offset); + }, + + beforeDestroy: function beforeDestroy () { + if (this.layout.instances.footer === this) { + this.layout.instances.footer = void 0; + this.__update('size', 0); + this.__update('offset', 0); + this.__update('space', false); + } + }, + + methods: { + __onResize: function __onResize (ref) { + var height = ref.height; + + this.__updateLocal('size', height); + this.__update('size', height); + }, + + __update: function __update (prop, val) { + if (this.layout.footer[prop] !== val) { + this.layout.footer[prop] = val; + } + }, + + __updateLocal: function __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val; + } + }, + + __updateRevealed: function __updateRevealed () { + if (this.reveal !== true) { return } + + var ref = this.layout.scroll; + var direction = ref.direction; + var position = ref.position; + var inflectionPoint = ref.inflectionPoint; + + this.__updateLocal('revealed', ( + direction === 'up' || + position - inflectionPoint < 100 || + this.layout.height - this.containerHeight - position - this.size < 300 + )); + }, + + __onFocusin: function __onFocusin (evt) { + if (this.revealOnFocus === true) { + this.__updateLocal('revealed', true); + } + + this.$emit('focusin', evt); + } + } + }); + + var QForm = Vue__default["default"].extend({ + name: 'QForm', + + mixins: [ ListenersMixin ], + + props: { + autofocus: Boolean, + noErrorFocus: Boolean, + noResetFocus: Boolean, + greedy: Boolean + }, + + computed: { + onEvents: function onEvents () { + return Object.assign({}, this.qListeners, + {submit: this.submit, + reset: this.reset}) + } + }, + + mounted: function mounted () { + this.validateIndex = 0; + this.autofocus === true && this.focus(); + }, + + activated: function activated () { + if (this.shouldActivate !== true) { return } + this.autofocus === true && this.focus(); + }, + + deactivated: function deactivated () { + this.shouldActivate = true; + }, + + methods: { + validate: function validate (shouldFocus) { + var this$1$1 = this; + + var focus = typeof shouldFocus === 'boolean' + ? shouldFocus + : this.noErrorFocus !== true; + + var index = ++this.validateIndex; + + var registeredComponents = this.getValidationComponents().filter(function (c) { return c.disable !== true; }); + + var emit = function (res, ref) { + this$1$1.$emit('validation-' + (res === true ? 'success' : 'error'), ref); + }; + + var validateComponent = function (comp) { + var valid = comp.validate(); + + return typeof valid.then === 'function' + ? valid.then( + function (valid) { return ({ valid: valid, comp: comp }); }, + function (err) { return ({ valid: false, comp: comp, err: err }); } + ) + : Promise.resolve({ valid: valid, comp: comp }) + }; + + var errorsPromise = this.greedy === true + ? Promise + .all(registeredComponents.map(validateComponent)) + .then(function (res) { return res.filter(function (r) { return r.valid !== true; }); }) + : registeredComponents + .reduce( + function (acc, comp) { return acc.then(function () { + return validateComponent(comp).then(function (r) { + if (r.valid === false) { return Promise.reject(r) } + }) + }); }, + Promise.resolve() + ) + .catch(function (error) { return [ error ]; }); + + return errorsPromise.then(function (errors) { + if (errors === void 0 || errors.length === 0) { + index === this$1$1.validateIndex && emit(true); + return true + } + + if (index === this$1$1.validateIndex) { + var ref = errors[0]; + var comp = ref.comp; + var err = ref.err; + + err !== void 0 && console.error(err); + emit(false, comp); + + if (focus === true) { + // Try to focus first mounted and active component + var activeError = errors.find(function (ref) { + var comp = ref.comp; + + return ( + typeof comp.focus === 'function' && + comp._isBeingDestroyed !== true && + comp._isDestroyed !== true && + comp._inactive !== true + ); + }); + + if (activeError !== void 0) { + activeError.comp.focus(); + } + } + } + + return false + }) + }, + + resetValidation: function resetValidation () { + this.validateIndex++; + + this.getValidationComponents().forEach(function (comp) { + typeof comp.resetValidation === 'function' && comp.resetValidation(); + }); + }, + + submit: function submit (evt) { + var this$1$1 = this; + + evt !== void 0 && stopAndPrevent(evt); + + var index = this.validateIndex + 1; + + this.validate().then(function (val) { + // if not outdated && validation succeeded + if (index === this$1$1.validateIndex && val === true) { + if (this$1$1.qListeners.submit !== void 0) { + this$1$1.$emit('submit', evt); + } + else if (evt !== void 0 && evt.target !== void 0 && typeof evt.target.submit === 'function') { + evt.target.submit(); + } + } + }); + }, + + reset: function reset (evt) { + var this$1$1 = this; + + evt !== void 0 && stopAndPrevent(evt); + + this.$emit('reset'); + + this.$nextTick(function () { // allow userland to reset values before + this$1$1.resetValidation(); + if (this$1$1.autofocus === true && this$1$1.noResetFocus !== true) { + this$1$1.focus(); + } + }); + }, + + focus: function focus () { + if (!this.$el) { return } + + var target = this.$el.querySelector('[autofocus][tabindex], [data-autofocus][tabindex]') || + this.$el.querySelector('[autofocus] [tabindex], [data-autofocus] [tabindex]') || + this.$el.querySelector('[autofocus], [data-autofocus]') || + Array.prototype.find.call(this.$el.querySelectorAll('[tabindex]'), function (el) { return el.tabIndex > -1; }); + + target !== null && target !== void 0 && managedFocus(target); + }, + + getValidationComponents: function getValidationComponents () { + return Array.prototype.map.call( + this.$el.getElementsByClassName('q-validation-component'), + function (field) { return field.__vue__; } + ).filter(function (c) { return c !== void 0 && typeof c.validate === 'function'; }) + } + }, + + render: function render (h) { + return h('form', { + staticClass: 'q-form', + on: this.onEvents + }, slot(this, 'default')) + } + }); + + var QHeader = Vue__default["default"].extend({ + name: 'QHeader', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default: function default$1 () { + console.error('QHeader needs to be child of QLayout'); + } + } + }, + + props: { + value: { + type: Boolean, + default: true + }, + reveal: Boolean, + revealOffset: { + type: Number, + default: 250 + }, + bordered: Boolean, + elevated: Boolean, + + heightHint: { + type: [String, Number], + default: 50 + } + }, + + data: function data () { + return { + size: parseInt(this.heightHint, 10), + revealed: true + } + }, + + watch: { + value: function value (val) { + this.__update('space', val); + this.__updateLocal('revealed', true); + this.layout.__animate(); + }, + + offset: function offset (val) { + this.__update('offset', val); + }, + + reveal: function reveal (val) { + val === false && this.__updateLocal('revealed', this.value); + }, + + revealed: function revealed (val) { + this.layout.__animate(); + this.$emit('reveal', val); + }, + + 'layout.scroll': function layout_scroll (scroll) { + this.reveal === true && this.__updateLocal('revealed', + scroll.direction === 'up' || + scroll.position <= this.revealOffset || + scroll.position - scroll.inflectionPoint < 100 + ); + } + }, + + computed: { + fixed: function fixed () { + return this.reveal === true || + this.layout.view.indexOf('H') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + offset: function offset () { + if (this.value !== true) { + return 0 + } + if (this.fixed === true) { + return this.revealed === true ? this.size : 0 + } + var offset = this.size - this.layout.scroll.position; + return offset > 0 ? offset : 0 + }, + + hidden: function hidden () { + return this.value !== true || (this.fixed === true && this.revealed !== true) + }, + + revealOnFocus: function revealOnFocus () { + return this.value === true && this.hidden === true && this.reveal === true + }, + + classes: function classes () { + return (this.fixed === true ? 'fixed' : 'absolute') + '-top' + + (this.bordered === true ? ' q-header--bordered' : '') + + (this.hidden === true ? ' q-header--hidden' : '') + + (this.value !== true ? ' q-layout--prevent-focus' : '') + }, + + style: function style () { + var + view = this.layout.rows.top, + css = {}; + + if (view[0] === 'l' && this.layout.left.space === true) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = (this.layout.left.size) + "px"; + } + if (view[2] === 'r' && this.layout.right.space === true) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = (this.layout.right.size) + "px"; + } + + return css + }, + + onEvents: function onEvents () { + return Object.assign({}, this.qListeners, + {focusin: this.__onFocusin, + input: stop}) + } + }, + + render: function render (h) { + var child = uniqueSlot(this, 'default', []); + + this.elevated === true && child.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ); + + child.push( + h(QResizeObserver, { + key: 'resize', + props: { debounce: 0 }, + on: cache(this, 'resize', { resize: this.__onResize }) + }) + ); + + return h('header', { + staticClass: 'q-header q-layout__section--marginal', + class: this.classes, + style: this.style, + on: this.onEvents + }, child) + }, + + created: function created () { + this.layout.instances.header = this; + this.value === true && this.__update('size', this.size); + this.__update('space', this.value); + this.__update('offset', this.offset); + }, + + beforeDestroy: function beforeDestroy () { + if (this.layout.instances.header === this) { + this.layout.instances.header = void 0; + this.__update('size', 0); + this.__update('offset', 0); + this.__update('space', false); + } + }, + + methods: { + __onResize: function __onResize (ref) { + var height = ref.height; + + this.__updateLocal('size', height); + this.__update('size', height); + }, + + __update: function __update (prop, val) { + if (this.layout.header[prop] !== val) { + this.layout.header[prop] = val; + } + }, + + __updateLocal: function __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val; + } + }, + + __onFocusin: function __onFocusin (evt) { + if (this.revealOnFocus === true) { + this.__updateLocal('revealed', true); + } + + this.$emit('focusin', evt); + } + } + }); + + var RatioMixin = { + props: { + ratio: [ String, Number ] + }, + + computed: { + ratioStyle: function ratioStyle () { + var ratio = this.ratio || this.naturalRatio; + + if (ratio !== void 0) { + return { paddingBottom: ((100 / ratio) + "%") } + } + } + } + }; + + var QImg = Vue__default["default"].extend({ + name: 'QImg', + + mixins: [ ListenersMixin, RatioMixin ], + + props: { + src: String, + srcset: String, + sizes: String, + alt: String, + width: String, + height: String, + + placeholderSrc: String, + + basic: Boolean, + contain: Boolean, + position: { + type: String, + default: '50% 50%' + }, + + transition: { + type: String, + default: 'fade' + }, + + imgClass: [ Array, String, Object ], + imgStyle: Object, + + nativeContextMenu: Boolean, + + noDefaultSpinner: Boolean, + spinnerColor: String, + spinnerSize: String + }, + + data: function data () { + return { + currentSrc: '', + image: null, + isLoading: !!this.src, + hasError: false, + naturalRatio: void 0 + } + }, + + watch: { + src: function src () { + this.__load(); + }, + + srcset: function srcset (val) { + this.__updateWatcher(val); + } + }, + + computed: { + url: function url () { + return this.currentSrc || this.placeholderSrc || void 0 + }, + + attrs: function attrs () { + var att = { role: 'img' }; + if (this.alt !== void 0) { + att['aria-label'] = this.alt; + } + return att + }, + + imgContainerStyle: function imgContainerStyle () { + return Object.assign( + { + backgroundSize: this.contain === true ? 'contain' : 'cover', + backgroundPosition: this.position + }, + this.imgStyle, + { backgroundImage: ("url(\"" + (this.url) + "\")") }) + }, + + style: function style () { + return { + width: this.width, + height: this.height + } + }, + + classes: function classes () { + return 'q-img overflow-hidden' + + (this.nativeContextMenu === true ? ' q-img--menu' : '') + } + }, + + methods: { + __onLoad: function __onLoad (img) { + this.isLoading = false; + this.hasError = false; + this.__computeRatio(img); + this.__updateSrc(); + this.__updateWatcher(this.srcset); + this.$emit('load', this.currentSrc); + }, + + __onError: function __onError (err) { + clearTimeout(this.ratioTimer); + this.isLoading = false; + this.hasError = true; + this.currentSrc = ''; + this.$emit('error', err); + }, + + __updateSrc: function __updateSrc () { + if (this.image !== void 0 && this.isLoading === false) { + var src = this.image.currentSrc || this.image.src; + if (this.currentSrc !== src) { + this.currentSrc = src; + } + } + }, + + __updateWatcher: function __updateWatcher (srcset) { + if (srcset) { + if (this.unwatch === void 0) { + this.unwatch = this.$watch('$q.screen.width', this.__updateSrc); + } + } + else if (this.unwatch !== void 0) { + this.unwatch(); + this.unwatch = void 0; + } + }, + + __load: function __load () { + var this$1$1 = this; + + clearTimeout(this.ratioTimer); + this.hasError = false; + + if (!this.src) { + this.isLoading = false; + this.image = void 0; + this.currentSrc = ''; + return + } + + this.isLoading = true; + + var img = new Image(); + this.image = img; + + img.onerror = function (err) { + // if we are still rendering same image + if (this$1$1.image === img && this$1$1.destroyed !== true) { + this$1$1.__onError(err); + } + }; + + img.onload = function () { + if (this$1$1.destroyed === true) { + return + } + + // if we are still rendering same image + if (this$1$1.image === img) { + if (img.decode !== void 0) { + img + .decode() + .catch(function (err) { + if (this$1$1.image === img && this$1$1.destroyed !== true) { + this$1$1.__onError(err); + } + }) + .then(function () { + if (this$1$1.image === img && this$1$1.destroyed !== true) { + this$1$1.__onLoad(img); + } + }); + } + else { + this$1$1.__onLoad(img); + } + } + }; + + img.src = this.src; + + if (this.srcset) { + img.srcset = this.srcset; + } + + if (this.sizes !== void 0) { + img.sizes = this.sizes; + } + else { + Object.assign(img, { + height: this.height, + width: this.width + }); + } + }, + + __computeRatio: function __computeRatio (img) { + var this$1$1 = this; + + var naturalHeight = img.naturalHeight; + var naturalWidth = img.naturalWidth; + + if (naturalHeight || naturalWidth) { + this.naturalRatio = naturalHeight === 0 + ? 1 + : naturalWidth / naturalHeight; + } + else { + this.ratioTimer = setTimeout(function () { + if (this$1$1.image === img && this$1$1.destroyed !== true) { + this$1$1.__computeRatio(img); + } + }, 100); + } + }, + + __getImage: function __getImage (h) { + var nativeImg = this.nativeContextMenu === true + ? [ + h('img', { + staticClass: 'absolute-full fit', + attrs: { src: this.url, 'aria-hidden': 'true' } + }) + ] + : void 0; + + var content = this.url !== void 0 + ? h('div', { + key: this.url, + staticClass: 'q-img__image absolute-full', + class: this.imgClass, + style: this.imgContainerStyle + }, nativeImg) + : null; + + return this.basic === true + ? content + : h('transition', { + props: { name: 'q-transition--' + this.transition } + }, [ content ]) + }, + + __getContent: function __getContent (h) { + var slotVm = slot(this, this.hasError === true ? 'error' : 'default'); + + if (this.basic === true) { + return h('div', { + key: 'content', + staticClass: 'q-img__content absolute-full' + }, slotVm) + } + + var content = this.isLoading === true + ? h('div', { + key: 'placeholder', + staticClass: 'q-img__loading absolute-full flex flex-center' + }, this.$scopedSlots.loading !== void 0 + ? this.$scopedSlots.loading() + : ( + this.noDefaultSpinner === false + ? [ + h(QSpinner, { + props: { + color: this.spinnerColor, + size: this.spinnerSize + } + }) + ] + : void 0 + ) + ) + : h('div', { + key: 'content', + staticClass: 'q-img__content absolute-full' + }, slotVm); + + return h('transition', { + props: { name: 'q-transition--fade' } + }, [ content ]) + } + }, + + render: function render (h) { + return h('div', { + class: this.classes, + style: this.style, + attrs: this.attrs, + on: Object.assign({}, this.qListeners) + }, [ + h('div', { style: this.ratioStyle }), + this.__getImage(h), + this.__getContent(h) + ]) + }, + + beforeMount: function beforeMount () { + if (this.placeholderSrc !== void 0 && this.ratio === void 0) { + var img = new Image(); + img.src = this.placeholderSrc; + this.__computeRatio(img); + } + this.isLoading === true && this.__load(); + }, + + beforeDestroy: function beforeDestroy () { + this.destroyed = true; + clearTimeout(this.ratioTimer); + this.unwatch !== void 0 && this.unwatch(); + } + }); + + var passive$2 = listenOpts.passive; + + var QInfiniteScroll = Vue__default["default"].extend({ + name: 'QInfiniteScroll', + + mixins: [ ListenersMixin ], + + props: { + offset: { + type: Number, + default: 500 + }, + + debounce: { + type: [ String, Number ], + default: 100 + }, + + scrollTarget: { + default: void 0 + }, + + initialIndex: Number, + + disable: Boolean, + reverse: Boolean + }, + + data: function data () { + return { + index: this.initialIndex || 0, + isFetching: false, + isWorking: true + } + }, + + watch: { + disable: function disable (val) { + if (val === true) { this.stop(); } + else { this.resume(); } + }, + + reverse: function reverse () { + if (this.isFetching === false && this.isWorking === true) { + this.immediatePoll(); + } + }, + + scrollTarget: function scrollTarget () { + this.updateScrollTarget(); + }, + + debounce: function debounce (val) { + this.__setDebounce(val); + } + }, + + methods: { + poll: function poll () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable(); + + if (this.disable === true || this.isFetching === true || this.isWorking === false) { + return + } + + if (this.__scrollTarget === window && document.qScrollPrevented === true) { + this.clearExecuteWhenScrollable = executeWhenScrollable(this.poll); + + return + } + + var + scrollHeight = getScrollHeight(this.__scrollTarget), + scrollPosition = getScrollPosition(this.__scrollTarget), + containerHeight = height(this.__scrollTarget); + + if (this.reverse === false) { + if (Math.round(scrollPosition + containerHeight + this.offset) >= Math.round(scrollHeight)) { + this.trigger(); + } + } + else if (Math.round(scrollPosition) < this.offset) { + this.trigger(); + } + }, + + trigger: function trigger () { + var this$1$1 = this; + + if (this.disable === true || this.isFetching === true || this.isWorking === false) { + return + } + + this.index++; + this.isFetching = true; + + var heightBefore = getScrollHeight(this.__scrollTarget); + + this.$emit('load', this.index, function (stop) { + if (this$1$1.isWorking === true) { + this$1$1.isFetching = false; + this$1$1.$nextTick(function () { + if (this$1$1.reverse === true) { + var + heightAfter = getScrollHeight(this$1$1.__scrollTarget), + scrollPosition = getScrollPosition(this$1$1.__scrollTarget), + heightDifference = heightAfter - heightBefore; + + setScrollPosition(this$1$1.__scrollTarget, scrollPosition + heightDifference); + } + + if (stop === true) { + this$1$1.stop(); + } + else { + this$1$1.$el.closest('body') && this$1$1.poll(); + } + }); + } + }); + }, + + reset: function reset () { + this.index = 0; + }, + + resume: function resume () { + if (this.isWorking === false) { + this.isWorking = true; + this.__scrollTarget.addEventListener('scroll', this.poll, passive$2); + } + this.immediatePoll(); + }, + + stop: function stop () { + if (this.isWorking === true) { + this.isWorking = false; + this.isFetching = false; + this.__scrollTarget.removeEventListener('scroll', this.poll, passive$2); + typeof this.poll.cancel === 'function' && this.poll.cancel(); + } + }, + + updateScrollTarget: function updateScrollTarget () { + if (this.__scrollTarget && this.isWorking === true) { + this.__scrollTarget.removeEventListener('scroll', this.poll, passive$2); + } + + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget); + + if (this.isWorking === true) { + this.__scrollTarget.addEventListener('scroll', this.poll, passive$2); + + if (this.reverse === true) { + var + scrollHeight = getScrollHeight(this.__scrollTarget), + containerHeight = height(this.__scrollTarget); + + setScrollPosition(this.__scrollTarget, scrollHeight - containerHeight); + } + + this.immediatePoll(); + } + }, + + setIndex: function setIndex (index) { + this.index = index; + }, + + __setDebounce: function __setDebounce (val) { + val = parseInt(val, 10); + + var oldPoll = this.poll; + + this.poll = val <= 0 + ? this.immediatePoll + : debounce(this.immediatePoll, isNaN(val) === true ? 100 : val); + + if (this.__scrollTarget && this.isWorking === true) { + if (oldPoll !== void 0) { + this.__scrollTarget.removeEventListener('scroll', oldPoll, passive$2); + } + + this.__scrollTarget.addEventListener('scroll', this.poll, passive$2); + } + } + }, + + mounted: function mounted () { + this.immediatePoll = this.poll; + this.__setDebounce(this.debounce); + + this.updateScrollTarget(); + }, + + activated: function activated () { + if (this.__scrollPosition !== void 0 && this.__scrollTarget) { + setScrollPosition(this.__scrollTarget, this.__scrollPosition); + } + }, + + deactivated: function deactivated () { + this.__scrollPosition = this.__scrollTarget + ? getScrollPosition(this.__scrollTarget) + : void 0; + }, + + beforeDestroy: function beforeDestroy () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable(); + this.stop(); + }, + + render: function render (h) { + var child = uniqueSlot(this, 'default', []); + + if (this.disable !== true && this.isWorking === true) { + child[this.reverse === false ? 'push' : 'unshift']( + h('div', { + staticClass: 'q-infinite-scroll__loading', + class: this.isFetching === true ? '' : 'invisible' + }, slot(this, 'loading')) + ); + } + + return h('div', { + staticClass: 'q-infinite-scroll', + on: Object.assign({}, this.qListeners) + }, child) + } + }); + + var QInnerLoading = Vue__default["default"].extend({ + name: 'QInnerLoading', + + mixins: [ ListenersMixin, DarkMixin, TransitionMixin ], + + props: { + showing: Boolean, + color: String, + + size: { + type: [String, Number], + default: 42 + }, + + label: String, + labelClass: String, + labelStyle: [ String, Array, Object ] + }, + + computed: { + classes: function classes () { + return 'q-inner-loading absolute-full column flex-center' + + " q-inner-loading--" + (this.darkSuffix) + }, + + labelClasses: function labelClasses () { + return 'q-inner-loading__label' + + (this.labelClass !== void 0 ? (" " + (this.labelClass)) : '') + } + }, + + methods: { + __getInner: function __getInner (h) { + var child = [ + h(QSpinner, { + props: { + size: this.size, + color: this.color + } + }) + ]; + + if (this.label !== void 0) { + child.push( + h('div', { + class: this.labelClasses, + style: this.labelStyle + }, [ this.label ]) + ); + } + + return child + }, + + __getContent: function __getContent (h) { + return this.showing === true + ? [ + h('div', + { + staticClass: this.classes, + on: Object.assign({}, this.qListeners) + }, + this.$scopedSlots.default !== void 0 + ? this.$scopedSlots.default() + : this.__getInner(h) + ) + ] + : void 0 + } + }, + + render: function render (h) { + return h('transition', { + props: Object.assign({}, this.transitionProps, + {appear: true}) + }, this.__getContent(h)) + } + }); + + // leave NAMED_MASKS at top of file (code referenced from docs) + var NAMED_MASKS = { + date: '####/##/##', + datetime: '####/##/## ##:##', + time: '##:##', + fulltime: '##:##:##', + phone: '(###) ### - ####', + card: '#### #### #### ####' + }; + + var TOKENS = { + '#': { pattern: '[\\d]', negate: '[^\\d]' }, + + S: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]' }, + N: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]' }, + + A: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]', transform: function (v) { return v.toLocaleUpperCase(); } }, + a: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]', transform: function (v) { return v.toLocaleLowerCase(); } }, + + X: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]', transform: function (v) { return v.toLocaleUpperCase(); } }, + x: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]', transform: function (v) { return v.toLocaleLowerCase(); } } + }; + + var KEYS = Object.keys(TOKENS); + KEYS.forEach(function (key) { + TOKENS[key].regex = new RegExp(TOKENS[key].pattern); + }); + + var + tokenRegexMask = new RegExp('\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|([' + KEYS.join('') + '])|(.)', 'g'), + escRegex = /[.*+?^${}()|[\]\\]/g; + + var MARKER = String.fromCharCode(1); + + var MaskMixin = { + props: { + mask: String, + reverseFillMask: Boolean, + fillMask: [Boolean, String], + unmaskedValue: Boolean + }, + + watch: { + type: function type () { + this.__updateMaskInternals(); + }, + + autogrow: function autogrow () { + this.__updateMaskInternals(); + }, + + mask: function mask (v) { + if (v !== void 0) { + this.__updateMaskValue(this.innerValue, true); + } + else { + var val = this.__unmask(this.innerValue); + this.__updateMaskInternals(); + this.value !== val && this.$emit('input', val); + } + }, + + fillMask: function fillMask () { + this.hasMask === true && this.__updateMaskValue(this.innerValue, true); + }, + + reverseFillMask: function reverseFillMask () { + this.hasMask === true && this.__updateMaskValue(this.innerValue, true); + }, + + unmaskedValue: function unmaskedValue () { + this.hasMask === true && this.__updateMaskValue(this.innerValue); + } + }, + + methods: { + __getInitialMaskedValue: function __getInitialMaskedValue () { + this.__updateMaskInternals(); + + if (this.hasMask === true) { + var masked = this.__mask(this.__unmask(this.value)); + + return this.fillMask !== false + ? this.__fillWithMask(masked) + : masked + } + + return this.value + }, + + __getPaddedMaskMarked: function __getPaddedMaskMarked (size) { + if (size < this.maskMarked.length) { + return this.maskMarked.slice(-size) + } + + var + maskMarked = this.maskMarked, + pad = ''; + var + padPos = maskMarked.indexOf(MARKER); + + if (padPos > -1) { + for (var i = size - maskMarked.length; i > 0; i--) { + pad += MARKER; + } + + maskMarked = maskMarked.slice(0, padPos) + pad + maskMarked.slice(padPos); + } + + return maskMarked + }, + + __updateMaskInternals: function __updateMaskInternals () { + var this$1$1 = this; + + this.hasMask = this.mask !== void 0 && + this.mask.length > 0 && + (this.autogrow === true || ['textarea', 'text', 'search', 'url', 'tel', 'password'].includes(this.type)); + + if (this.hasMask === false) { + this.computedUnmask = void 0; + this.maskMarked = ''; + this.maskReplaced = ''; + return + } + + var + computedMask = NAMED_MASKS[this.mask] === void 0 + ? this.mask + : NAMED_MASKS[this.mask], + fillChar = typeof this.fillMask === 'string' && this.fillMask.length > 0 + ? this.fillMask.slice(0, 1) + : '_', + fillCharEscaped = fillChar.replace(escRegex, '\\$&'), + unmask = [], + extract = [], + mask = []; + + var + firstMatch = this.reverseFillMask === true, + unmaskChar = '', + negateChar = ''; + + computedMask.replace(tokenRegexMask, function (_, char1, esc, token, char2) { + if (token !== void 0) { + var c = TOKENS[token]; + mask.push(c); + negateChar = c.negate; + if (firstMatch === true) { + extract.push('(?:' + negateChar + '+)?(' + c.pattern + '+)?(?:' + negateChar + '+)?(' + c.pattern + '+)?'); + firstMatch = false; + } + extract.push('(?:' + negateChar + '+)?(' + c.pattern + ')?'); + } + else if (esc !== void 0) { + unmaskChar = '\\' + (esc === '\\' ? '' : esc); + mask.push(esc); + unmask.push('([^' + unmaskChar + ']+)?' + unmaskChar + '?'); + } + else { + var c$1 = char1 !== void 0 ? char1 : char2; + unmaskChar = c$1 === '\\' ? '\\\\\\\\' : c$1.replace(escRegex, '\\\\$&'); + mask.push(c$1); + unmask.push('([^' + unmaskChar + ']+)?' + unmaskChar + '?'); + } + }); + + var + unmaskMatcher = new RegExp( + '^' + + unmask.join('') + + '(' + (unmaskChar === '' ? '.' : '[^' + unmaskChar + ']') + '+)?' + + (unmaskChar === '' ? '' : '[' + unmaskChar + ']*') + '$' + ), + extractLast = extract.length - 1, + extractMatcher = extract.map(function (re, index) { + if (index === 0 && this$1$1.reverseFillMask === true) { + return new RegExp('^' + fillCharEscaped + '*' + re) + } + else if (index === extractLast) { + return new RegExp( + '^' + re + + '(' + (negateChar === '' ? '.' : negateChar) + '+)?' + + (this$1$1.reverseFillMask === true ? '$' : fillCharEscaped + '*') + ) + } + + return new RegExp('^' + re) + }); + + this.computedMask = mask; + this.computedUnmask = function (val) { + var unmaskMatch = unmaskMatcher.exec(val); + if (unmaskMatch !== null) { + val = unmaskMatch.slice(1).join(''); + } + + var + extractMatch = [], + extractMatcherLength = extractMatcher.length; + + for (var i = 0, str = val; i < extractMatcherLength; i++) { + var m = extractMatcher[i].exec(str); + + if (m === null) { + break + } + + str = str.slice(m.shift().length); + extractMatch.push.apply(extractMatch, m); + } + if (extractMatch.length > 0) { + return extractMatch.join('') + } + + return val + }; + this.maskMarked = mask.map(function (v) { return typeof v === 'string' ? v : MARKER; }).join(''); + this.maskReplaced = this.maskMarked.split(MARKER).join(fillChar); + }, + + __updateMaskValue: function __updateMaskValue (rawVal, updateMaskInternals, inputType) { + var this$1$1 = this; + + var + inp = this.$refs.input, + end = inp.selectionEnd, + endReverse = inp.value.length - end, + unmasked = this.__unmask(rawVal); + + // Update here so unmask uses the original fillChar + updateMaskInternals === true && this.__updateMaskInternals(); + + var + preMasked = this.__mask(unmasked), + masked = this.fillMask !== false + ? this.__fillWithMask(preMasked) + : preMasked, + changed = this.innerValue !== masked; + + // We want to avoid "flickering" so we set value immediately + inp.value !== masked && (inp.value = masked); + + changed === true && (this.innerValue = masked); + + document.activeElement === inp && this.$nextTick(function () { + if (masked === this$1$1.maskReplaced) { + var cursor = this$1$1.reverseFillMask === true ? this$1$1.maskReplaced.length : 0; + inp.setSelectionRange(cursor, cursor, 'forward'); + + return + } + + if (inputType === 'insertFromPaste' && this$1$1.reverseFillMask !== true) { + var cursor$1 = end - 1; + this$1$1.__moveCursorRight(inp, cursor$1, cursor$1); + + return + } + + if (['deleteContentBackward', 'deleteContentForward'].indexOf(inputType) > -1) { + var cursor$2 = this$1$1.reverseFillMask === true + ? ( + end === 0 + ? (masked.length > preMasked.length ? 1 : 0) + : Math.max(0, masked.length - (masked === this$1$1.maskReplaced ? 0 : Math.min(preMasked.length, endReverse) + 1)) + 1 + ) + : end; + inp.setSelectionRange(cursor$2, cursor$2, 'forward'); + + return + } + + if (this$1$1.reverseFillMask === true) { + if (changed === true) { + var cursor$3 = Math.max(0, masked.length - (masked === this$1$1.maskReplaced ? 0 : Math.min(preMasked.length, endReverse + 1))); + + if (cursor$3 === 1 && end === 1) { + inp.setSelectionRange(cursor$3, cursor$3, 'forward'); + } + else { + this$1$1.__moveCursorRightReverse(inp, cursor$3, cursor$3); + } + } + else { + var cursor$4 = masked.length - endReverse; + inp.setSelectionRange(cursor$4, cursor$4, 'backward'); + } + } + else { + if (changed === true) { + var cursor$5 = Math.max(0, this$1$1.maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1); + this$1$1.__moveCursorRight(inp, cursor$5, cursor$5); + } + else { + var cursor$6 = end - 1; + this$1$1.__moveCursorRight(inp, cursor$6, cursor$6); + } + } + }); + + var val = this.unmaskedValue === true + ? this.__unmask(masked) + : masked; + + String(this.value) !== val && this.__emitValue(val, true); + }, + + __moveCursorForPaste: function __moveCursorForPaste (inp, start, end) { + var preMasked = this.__mask(this.__unmask(inp.value)); + + start = Math.max(0, this.maskMarked.indexOf(MARKER), Math.min(preMasked.length, start)); + + inp.setSelectionRange(start, end, 'forward'); + }, + + __moveCursorLeft: function __moveCursorLeft (inp, start, end, selection) { + var noMarkBefore = this.maskMarked.slice(start - 1).indexOf(MARKER) === -1; + var i = Math.max(0, start - 1); + + for (; i >= 0; i--) { + if (this.maskMarked[i] === MARKER) { + start = i; + noMarkBefore === true && start++; + break + } + } + + if ( + i < 0 && + this.maskMarked[start] !== void 0 && + this.maskMarked[start] !== MARKER + ) { + return this.__moveCursorRight(inp, 0, 0) + } + + start >= 0 && inp.setSelectionRange( + start, + selection === true ? end : start, 'backward' + ); + }, + + __moveCursorRight: function __moveCursorRight (inp, start, end, selection) { + var limit = inp.value.length; + var i = Math.min(limit, end + 1); + + for (; i <= limit; i++) { + if (this.maskMarked[i] === MARKER) { + end = i; + break + } + else if (this.maskMarked[i - 1] === MARKER) { + end = i; + } + } + + if ( + i > limit && + this.maskMarked[end - 1] !== void 0 && + this.maskMarked[end - 1] !== MARKER + ) { + return this.__moveCursorLeft(inp, limit, limit) + } + + inp.setSelectionRange(selection ? start : end, end, 'forward'); + }, + + __moveCursorLeftReverse: function __moveCursorLeftReverse (inp, start, end, selection) { + var + maskMarked = this.__getPaddedMaskMarked(inp.value.length); + var i = Math.max(0, start - 1); + + for (; i >= 0; i--) { + if (maskMarked[i - 1] === MARKER) { + start = i; + break + } + else if (maskMarked[i] === MARKER) { + start = i; + if (i === 0) { + break + } + } + } + + if ( + i < 0 && + maskMarked[start] !== void 0 && + maskMarked[start] !== MARKER + ) { + return this.__moveCursorRightReverse(inp, 0, 0) + } + + start >= 0 && inp.setSelectionRange( + start, + selection === true ? end : start, 'backward' + ); + }, + + __moveCursorRightReverse: function __moveCursorRightReverse (inp, start, end, selection) { + var + limit = inp.value.length, + maskMarked = this.__getPaddedMaskMarked(limit), + noMarkBefore = maskMarked.slice(0, end + 1).indexOf(MARKER) === -1; + var i = Math.min(limit, end + 1); + + for (; i <= limit; i++) { + if (maskMarked[i - 1] === MARKER) { + end = i; + end > 0 && noMarkBefore === true && end--; + break + } + } + + if ( + i > limit && + maskMarked[end - 1] !== void 0 && + maskMarked[end - 1] !== MARKER + ) { + return this.__moveCursorLeftReverse(inp, limit, limit) + } + + inp.setSelectionRange(selection === true ? start : end, end, 'forward'); + }, + + __onMaskedKeydown: function __onMaskedKeydown (e) { + if (shouldIgnoreKey(e) === true) { + return + } + + var + inp = this.$refs.input, + start = inp.selectionStart, + end = inp.selectionEnd; + + if (e.keyCode === 37 || e.keyCode === 39) { // Left / Right + var fn = this['__moveCursor' + (e.keyCode === 39 ? 'Right' : 'Left') + (this.reverseFillMask === true ? 'Reverse' : '')]; + + e.preventDefault(); + fn(inp, start, end, e.shiftKey); + } + else if ( + e.keyCode === 8 && // Backspace + this.reverseFillMask !== true && + start === end + ) { + this.__moveCursorLeft(inp, start, end, true); + } + else if ( + e.keyCode === 46 && // Delete + this.reverseFillMask === true && + start === end + ) { + this.__moveCursorRightReverse(inp, start, end, true); + } + + this.$emit('keydown', e); + }, + + __mask: function __mask (val) { + if (val === void 0 || val === null || val === '') { return '' } + + if (this.reverseFillMask === true) { + return this.__maskReverse(val) + } + + var mask = this.computedMask; + + var valIndex = 0, output = ''; + + for (var maskIndex = 0; maskIndex < mask.length; maskIndex++) { + var + valChar = val[valIndex], + maskDef = mask[maskIndex]; + + if (typeof maskDef === 'string') { + output += maskDef; + valChar === maskDef && valIndex++; + } + else if (valChar !== void 0 && maskDef.regex.test(valChar)) { + output += maskDef.transform !== void 0 + ? maskDef.transform(valChar) + : valChar; + valIndex++; + } + else { + return output + } + } + + return output + }, + + __maskReverse: function __maskReverse (val) { + var + mask = this.computedMask, + firstTokenIndex = this.maskMarked.indexOf(MARKER); + + var valIndex = val.length - 1, output = ''; + + for (var maskIndex = mask.length - 1; maskIndex >= 0 && valIndex > -1; maskIndex--) { + var maskDef = mask[maskIndex]; + + var valChar = val[valIndex]; + + if (typeof maskDef === 'string') { + output = maskDef + output; + valChar === maskDef && valIndex--; + } + else if (valChar !== void 0 && maskDef.regex.test(valChar)) { + do { + output = (maskDef.transform !== void 0 ? maskDef.transform(valChar) : valChar) + output; + valIndex--; + valChar = val[valIndex]; + // eslint-disable-next-line no-unmodified-loop-condition + } while (firstTokenIndex === maskIndex && valChar !== void 0 && maskDef.regex.test(valChar)) + } + else { + return output + } + } + + return output + }, + + __unmask: function __unmask (val) { + return typeof val !== 'string' || this.computedUnmask === void 0 + ? (typeof val === 'number' ? this.computedUnmask('' + val) : val) + : this.computedUnmask(val) + }, + + __fillWithMask: function __fillWithMask (val) { + if (this.maskReplaced.length - val.length <= 0) { + return val + } + + return this.reverseFillMask === true && val.length > 0 + ? this.maskReplaced.slice(0, -val.length) + val + : val + this.maskReplaced.slice(val.length) + } + } + }; + + var QInput = Vue__default["default"].extend({ + name: 'QInput', + + mixins: [ + QField, + MaskMixin, + FormFieldMixin, + FileValueMixin, + ListenersMixin + ], + + props: { + value: { required: false }, + + shadowText: String, + + type: { + type: String, + default: 'text' + }, + + debounce: [String, Number], + + autogrow: Boolean, // makes a textarea + + inputClass: [Array, String, Object], + inputStyle: [Array, String, Object] + }, + + watch: { + value: function value (v) { + if (this.hasMask === true) { + if (this.stopValueWatcher === true) { + this.stopValueWatcher = false; + + if (String(v) === this.emitCachedValue) { + return + } + } + + this.__updateMaskValue(v); + } + else if (this.innerValue !== v) { + this.innerValue = v; + + if ( + this.type === 'number' && + this.hasOwnProperty('tempValue') === true + ) { + if (this.typedNumber === true) { + this.typedNumber = false; + } + else { + delete this.tempValue; + } + } + } + + // textarea only + this.autogrow === true && this.$nextTick(this.__adjustHeight); + }, + + // some browsers lose the native input value + // so we need to reattach it dynamically + // (like type="password" <-> type="text"; see #12078) + type: function type () { + if (this.$refs.input) { + this.$refs.input.value = this.value; + } + }, + + autogrow: function autogrow (autogrow$1) { + // textarea only + if (autogrow$1 === true) { + this.$nextTick(this.__adjustHeight); + } + // if it has a number of rows set respect it + else if (this.qAttrs.rows > 0 && this.$refs.input !== void 0) { + var inp = this.$refs.input; + inp.style.height = 'auto'; + } + }, + + dense: function dense () { + this.autogrow === true && this.$nextTick(this.__adjustHeight); + } + }, + + data: function data () { + return { innerValue: this.__getInitialMaskedValue() } + }, + + computed: { + isTextarea: function isTextarea () { + return this.type === 'textarea' || this.autogrow === true + }, + + isTypeText: function isTypeText () { + return this.isTextarea === true || ['text', 'search', 'url', 'tel', 'password'].includes(this.type) + }, + + fieldClass: function fieldClass () { + return "q-" + (this.isTextarea === true ? 'textarea' : 'input') + + (this.autogrow === true ? ' q-textarea--autogrow' : '') + }, + + hasShadow: function hasShadow () { + return this.type !== 'file' && + typeof this.shadowText === 'string' && + this.shadowText.length > 0 + }, + + onEvents: function onEvents () { + var on = Object.assign({}, this.qListeners, + {input: this.__onInput, + compositionend: this.__onCompositionend, + paste: this.__onPaste, + // Safari < 10.2 & UIWebView doesn't fire compositionend when + // switching focus before confirming composition choice + // this also fixes the issue where some browsers e.g. iOS Chrome + // fires "change" instead of "input" on autocomplete. + change: this.__onChange, + blur: this.__onFinishEditing, + focus: this.__onFocus}); + + if (this.hasMask === true) { + on.keydown = this.__onMaskedKeydown; + } + + if (this.autogrow === true) { + on.animationend = this.__onAnimationend; + } + + return on + }, + + inputAttrs: function inputAttrs () { + var attrs = Object.assign({}, {tabindex: 0, + 'data-autofocus': this.autofocus || void 0, + rows: this.type === 'textarea' ? 6 : void 0, + 'aria-label': this.label, + name: this.nameProp}, + this.qAttrs, + {id: this.targetUid, + type: this.type, + maxlength: this.maxlength, + disabled: this.disable === true, + readonly: this.readonly === true}); + + if (this.autogrow === true) { + attrs.rows = 1; + } + + return attrs + } + }, + + methods: { + focus: function focus () { + var el = document.activeElement; + if ( + this.$refs.input !== void 0 && + this.$refs.input !== el && + // IE can have null document.activeElement + (el === null || el.id !== this.targetUid) + ) { + managedFocus(this.$refs.input); + } + }, + + select: function select () { + this.$refs.input !== void 0 && this.$refs.input.select(); + }, + + getNativeElement: function getNativeElement () { + return this.$refs.input + }, + + __onPaste: function __onPaste (e) { + if (this.hasMask === true && this.reverseFillMask !== true) { + var inp = e.target; + this.__moveCursorForPaste(inp, inp.selectionStart, inp.selectionEnd); + } + + this.$emit('paste', e); + }, + + __onInput: function __onInput (e) { + if (!e || !e.target || e.target.qComposing === true) { + return + } + + if (this.type === 'file') { + this.$emit('input', e.target.files); + return + } + + var val = e.target.value; + + if (this.hasMask === true) { + this.__updateMaskValue(val, false, e.inputType); + } + else { + this.__emitValue(val); + + if (this.isTypeText === true && e.target === document.activeElement) { + var ref = e.target; + var selectionStart = ref.selectionStart; + var selectionEnd = ref.selectionEnd; + + if (selectionStart !== void 0 && selectionEnd !== void 0) { + this.$nextTick(function () { + if (e.target === document.activeElement && val.indexOf(e.target.value) === 0) { + e.target.setSelectionRange(selectionStart, selectionEnd); + } + }); + } + } + } + + // we need to trigger it immediately too, + // to avoid "flickering" + this.autogrow === true && this.__adjustHeight(); + }, + + __onChange: function __onChange (e) { + if (e.target.qComposing === true) { + e.target.qComposing = false; + this.__onInput(e); + } + + clearTimeout(this.emitTimer); + this.emitValueFn !== void 0 && this.emitValueFn(); + + this.$emit('change', e); + }, + + __onFinishEditing: function __onFinishEditing (e) { + var this$1$1 = this; + + e !== void 0 && stop(e); + + clearTimeout(this.emitTimer); + this.emitValueFn !== void 0 && this.emitValueFn(); + + this.typedNumber = false; + this.stopValueWatcher = false; + delete this.tempValue; + + // we need to use setTimeout instead of this.$nextTick + // to avoid a bug where focusout is not emitted for type date/time/week/... + this.type !== 'file' && setTimeout(function () { + if (this$1$1.$refs.input !== void 0) { + this$1$1.$refs.input.value = this$1$1.innerValue !== void 0 ? this$1$1.innerValue : ''; + } + }); + }, + + __onFocus: function __onFocus (e) { + stop(e); + managedFocus(e.target); + }, + + __onCompositionend: function __onCompositionend (e) { + this.qListeners.compositionend !== void 0 && this.$emit('compositionend', e); + this.__onInput(e); + }, + + __onAnimationend: function __onAnimationend (e) { + this.qListeners.animationend !== void 0 && this.$emit('animationend', e); + this.__adjustHeight(); + }, + + __emitValue: function __emitValue (val, stopWatcher) { + var this$1$1 = this; + + this.emitValueFn = function () { + if ( + this$1$1.type !== 'number' && + this$1$1.hasOwnProperty('tempValue') === true + ) { + delete this$1$1.tempValue; + } + + if (this$1$1.value !== val && this$1$1.emitCachedValue !== val) { + this$1$1.emitCachedValue = val; + + stopWatcher === true && (this$1$1.stopValueWatcher = true); + this$1$1.$emit('input', val); + + this$1$1.$nextTick(function () { + this$1$1.emitCachedValue === val && (this$1$1.emitCachedValue = NaN); + }); + } + + this$1$1.emitValueFn = void 0; + }; + + if (this.type === 'number') { + this.typedNumber = true; + this.tempValue = val; + } + + if (this.debounce !== void 0) { + clearTimeout(this.emitTimer); + this.tempValue = val; + this.emitTimer = setTimeout(this.emitValueFn, this.debounce); + } + else { + this.emitValueFn(); + } + }, + + // textarea only + __adjustHeight: function __adjustHeight () { + var this$1$1 = this; + + requestAnimationFrame(function () { + var inp = this$1$1.$refs.input; + if (inp !== void 0) { + var parentStyle = inp.parentNode.style; + var ref = inp.style; + var overflow = ref.overflow; + + // reset height of textarea to a small size to detect the real height + // but keep the total control size the same + // Firefox rulez #14263, #14344 + this$1$1.$q.platform.is.firefox !== true && (inp.style.overflow = 'hidden'); + inp.style.height = '1px'; + parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px'; + + inp.style.height = inp.scrollHeight + 'px'; + inp.style.overflow = overflow; + parentStyle.marginBottom = ''; + } + }); + }, + + __getCurValue: function __getCurValue () { + return this.hasOwnProperty('tempValue') === true + ? this.tempValue + : (this.innerValue !== void 0 ? this.innerValue : '') + }, + + __getShadowControl: function __getShadowControl (h) { + return h('div', { + staticClass: 'q-field__native q-field__shadow absolute-bottom no-pointer-events' + + (this.isTextarea === true ? '' : ' text-no-wrap') + }, [ + h('span', { staticClass: 'invisible' }, this.__getCurValue()), + h('span', this.shadowText) + ]) + }, + + __getControl: function __getControl (h) { + return h(this.isTextarea === true ? 'textarea' : 'input', { + ref: 'input', + staticClass: 'q-field__native q-placeholder', + style: this.inputStyle, + class: this.inputClass, + attrs: this.inputAttrs, + on: this.onEvents, + domProps: this.type !== 'file' + ? { value: this.__getCurValue() } + : this.formDomProps + }) + } + }, + + created: function created () { + this.emitCachedValue = NaN; + }, + + mounted: function mounted () { + // textarea only + this.autogrow === true && this.__adjustHeight(); + }, + + beforeDestroy: function beforeDestroy () { + this.__onFinishEditing(); + } + }); + + var defaultCfg$1 = { + threshold: 0, + root: null, + rootMargin: '0px' + }; + + function update$3 (el, ctx, value, modifiers) { + var handler, cfg, changed; + + if (typeof value === 'function') { + handler = value; + cfg = defaultCfg$1; + changed = ctx.cfg === void 0; + } + else { + handler = value.handler; + cfg = Object.assign({}, defaultCfg$1, value.cfg); + changed = ctx.cfg === void 0 || isDeepEqual(ctx.cfg, cfg) === false; + } + + if (ctx.handler !== handler) { + ctx.handler = handler; + } + + var once = modifiers.once === true; + if (ctx.once !== once) { + ctx.once = once; + } + + if (changed === true) { + ctx.cfg = cfg; + ctx.observer !== void 0 && ctx.observer.unobserve(el); + + ctx.observer = new IntersectionObserver(function (ref) { + var entry = ref[0]; + + if (typeof ctx.handler === 'function') { + // if observed element is part of a vue transition + // then we need to be careful... + if ( + entry.rootBounds === null && + (el.__vue__ !== void 0 ? el.__vue__._inactive !== true : document.body.contains(el) === true) + ) { + ctx.observer.unobserve(el); + ctx.observer.observe(el); + return + } + + var res = ctx.handler(entry, ctx.observer); + + if ( + res === false || + (ctx.once === true && entry.isIntersecting === true) + ) { + destroy$8(el); + } + } + }, cfg); + + ctx.observer.observe(el); + } + } + + function destroy$8 (el) { + var ctx = el.__qvisible; + + if (ctx !== void 0) { + ctx.observer !== void 0 && ctx.observer.unobserve(el); + delete el.__qvisible; + } + } + + var Intersection = { + name: 'intersection', + + inserted: function inserted (el, ref) { + var modifiers = ref.modifiers; + var value = ref.value; + + if (el.__qvisible !== void 0) { + destroy$8(el); + el.__qvisible_destroyed = true; + } + + var ctx = {}; + + update$3(el, ctx, value, modifiers); + + el.__qvisible = ctx; + }, + + update: function update$1 (el, ref) { + var value = ref.value; + var modifiers = ref.modifiers; + + var ctx = el.__qvisible; + ctx !== void 0 && update$3(el, ctx, value, modifiers); + }, + + unbind: function unbind (el) { + if (el.__qvisible_destroyed === void 0) { + destroy$8(el); + } + else { + delete el.__qvisible_destroyed; + } + } + }; + + var QIntersection = Vue__default["default"].extend({ + name: 'QIntersection', + + mixins: [ TagMixin, ListenersMixin ], + + directives: { + Intersection: Intersection + }, + + props: { + once: Boolean, + transition: String, + + ssrPrerender: Boolean, + + margin: String, + threshold: [ Number, Array ], + root: { + default: null + }, + + disable: Boolean + }, + + data: function data () { + return { + showing: onSSR === true ? this.ssrPrerender : false + } + }, + + computed: { + value: function value () { + return this.root !== void 0 || this.margin !== void 0 || this.threshold !== void 0 + ? { + handler: this.__trigger, + cfg: { + root: this.root, + rootMargin: this.margin, + threshold: this.threshold + } + } + : this.__trigger + }, + + directives: function directives () { + if (this.disable !== true && (onSSR !== true || this.once !== true || this.ssrPrerender !== true)) { + return [{ + name: 'intersection', + value: this.value, + modifiers: { + once: this.once + } + }] + } + } + }, + + methods: { + __trigger: function __trigger (entry) { + if (this.showing !== entry.isIntersecting) { + this.showing = entry.isIntersecting; + + if (this.qListeners.visibility !== void 0) { + this.$emit('visibility', this.showing); + } + } + } + }, + + render: function render (h) { + var content = this.showing === true + ? slot(this, 'default') + : void 0; + + return h(this.tag, { + staticClass: 'q-intersection', + on: Object.assign({}, this.qListeners), + directives: this.directives + }, this.transition + ? [ + h('transition', { + props: { name: 'q-transition--' + this.transition } + }, content) + ] + : content + ) + } + }); + + // PGDOWN, LEFT, DOWN, PGUP, RIGHT, UP + var keyCodes$1 = [34, 37, 40, 33, 39, 38]; + + var QKnob = Vue__default["default"].extend({ + name: 'QKnob', + + mixins: [ + { props: QCircularProgress.options.props }, + FormMixin + ], + + directives: { + TouchPan: TouchPan + }, + + props: { + innerMin: Number, + innerMax: Number, + + step: { + type: Number, + default: 1, + validator: function (v) { return v >= 0; } + }, + + tabindex: { + type: [Number, String], + default: 0 + }, + + disable: Boolean, + readonly: Boolean + }, + + data: function data () { + var innerMin = this.__getInnerMin(this.innerMin); + var innerMax = this.__getInnerMax(this.innerMax); + + return { + model: this.value === null ? innerMin : between(this.value, innerMin, innerMax), + dragging: false + } + }, + + watch: { + modelUpdate: function modelUpdate () { + this.model = this.value === null + ? this.computedInnerMin + : between(this.value, this.computedInnerMin, this.computedInnerMax); + + this.__updateValue(true); + } + }, + + computed: { + classes: function classes () { + return 'q-knob non-selectable q-key-group-navigation--ignore-key' + ( + this.editable === true + ? ' q-knob--editable' + : (this.disable === true ? ' disabled' : '') + ) + }, + + computedInnerMin: function computedInnerMin () { + return this.__getInnerMin(this.innerMin) + }, + + computedInnerMax: function computedInnerMax () { + return this.__getInnerMax(this.innerMax) + }, + + modelUpdate: function modelUpdate () { + return ((this.value) + "|" + (this.computedInnerMin) + "|" + (this.computedInnerMax)) + }, + + editable: function editable () { + return this.disable === false && this.readonly === false + }, + + decimals: function decimals () { + return (String(this.step).trim('0').split('.')[1] || '').length + }, + + computedStep: function computedStep () { + return this.step === 0 ? 1 : this.step + }, + + computedInstantFeedback: function computedInstantFeedback () { + return this.instantFeedback === true || + this.dragging === true + }, + + onEvents: function onEvents () { + return this.$q.platform.is.mobile === true + ? { click: this.__click } + : { + mousedown: this.__activate, + click: this.__click, + keydown: this.__keydown, + keyup: this.__keyup + } + }, + + attrs: function attrs () { + var attrs = { + role: 'slider', + 'aria-valuemin': this.computedInnerMin, + 'aria-valuemax': this.computedInnerMax, + 'aria-valuenow': this.value + }; + + if (this.editable === true) { + attrs.tabindex = this.tabindex; + } + else { + attrs[("aria-" + (this.disable === true ? 'disabled' : 'readonly'))] = ''; + } + + return attrs + } + }, + + methods: { + __getInnerMin: function __getInnerMin (val) { + return isNaN(val) === true || this.innerMin < this.min + ? this.min + : this.innerMin + }, + + __getInnerMax: function __getInnerMax (val) { + return isNaN(val) === true || val > this.max + ? this.max + : this.innerMax + }, + + __updateCenterPosition: function __updateCenterPosition () { + var ref = this.$el.getBoundingClientRect(); + var top = ref.top; + var left = ref.left; + var width = ref.width; + var height = ref.height; + this.centerPosition = { + top: top + height / 2, + left: left + width / 2 + }; + }, + + __pan: function __pan (event) { + if (event.isFinal) { + this.__updatePosition(event.evt, true); + this.dragging = false; + } + else if (event.isFirst) { + this.__updateCenterPosition(); + this.dragging = true; + this.__updatePosition(event.evt); + } + else { + this.__updatePosition(event.evt); + } + }, + + __click: function __click (evt) { + this.__updateCenterPosition(); + this.__updatePosition(evt, true); + }, + + __keydown: function __keydown (evt) { + if (!keyCodes$1.includes(evt.keyCode)) { + return + } + + stopAndPrevent(evt); + + var + step = ([34, 33].includes(evt.keyCode) ? 10 : 1) * this.computedStep, + offset = [34, 37, 40].includes(evt.keyCode) ? -step : step; + + this.model = between( + parseFloat((this.model + offset).toFixed(this.decimals)), + this.computedInnerMin, + this.computedInnerMax + ); + + this.__updateValue(); + }, + + __keyup: function __keyup (evt) { + if (keyCodes$1.includes(evt.keyCode)) { + this.__updateValue(true); + } + }, + + __activate: function __activate (evt) { + this.__updateCenterPosition(); + this.__updatePosition(evt); + }, + + __updatePosition: function __updatePosition (evt, change) { + var + center = this.centerPosition, + pos = position(evt), + height = Math.abs(pos.top - center.top), + distance = Math.sqrt( + Math.pow( height, 2 ) + + Math.pow( Math.abs(pos.left - center.left), 2 ) + ); + + var angle = Math.asin(height / distance) * (180 / Math.PI); + + if (pos.top < center.top) { + angle = center.left < pos.left ? 90 - angle : 270 + angle; + } + else { + angle = center.left < pos.left ? angle + 90 : 270 - angle; + } + + if (this.$q.lang.rtl === true) { + angle = normalizeToInterval(-angle - this.angle, 0, 360); + } + else if (this.angle) { + angle = normalizeToInterval(angle - this.angle, 0, 360); + } + + if (this.reverse === true) { + angle = 360 - angle; + } + + var model = this.min + (angle / 360) * (this.max - this.min); + + if (this.step !== 0) { + var + step = this.computedStep, + modulo = model % step; + + model = model - modulo + + (Math.abs(modulo) >= step / 2 ? (modulo < 0 ? -1 : 1) * step : 0); + + model = parseFloat(model.toFixed(this.decimals)); + } + + model = between(model, this.computedInnerMin, this.computedInnerMax); + + this.$emit('drag-value', model); + + if (this.model !== model) { + this.model = model; + } + + this.__updateValue(change); + }, + + __updateValue: function __updateValue (change) { + this.value !== this.model && this.$emit('input', this.model); + change === true && this.$emit('change', this.model); + }, + + __getNameInput: function __getNameInput () { + return this.$createElement('input', { attrs: this.formAttrs }) + } + }, + + render: function render (h) { + var data = { + class: this.classes, + attrs: this.attrs, + props: Object.assign({}, this.$props, + {value: this.model, + instantFeedback: this.computedInstantFeedback}) + }; + + if (this.editable === true) { + data.key = 'dir'; + data.on = this.onEvents; + data.directives = cache(this, 'dir', [{ + name: 'touch-pan', + value: this.__pan, + modifiers: { + prevent: true, + stop: true, + mouse: true + } + }]); + + if (this.name !== void 0) { + data.scopedSlots = { + internal: this.__getNameInput + }; + } + } + + return h(QCircularProgress, data, slot(this, 'default')) + } + }); + + var passive$1 = listenOpts.passive; + var axisValues = [ 'both', 'horizontal', 'vertical' ]; + + var QScrollObserver = Vue__default["default"].extend({ + name: 'QScrollObserver', + + props: { + axis: { + type: String, + validator: function (v) { return axisValues.includes(v); }, + default: 'vertical' + }, + + debounce: [ String, Number ], + + scrollTarget: { + default: void 0 + } + }, + + render: noop, // eslint-disable-line + + data: function data () { + return { + scroll: { + position: { + top: 0, + left: 0 + }, + + direction: 'none', + directionChanged: false, + + delta: { + top: 0, + left: 0 + }, + + inflectionPoint: { + top: 0, + left: 0 + } + } + } + }, + + watch: { + scrollTarget: function scrollTarget () { + this.__unconfigureScrollTarget(); + this.__configureScrollTarget(); + } + }, + + methods: { + getPosition: function getPosition () { + return JSON.parse(JSON.stringify(this.scroll)) + }, + + trigger: function trigger (immediately) { + var this$1$1 = this; + + if (immediately === true || this.debounce === 0 || this.debounce === '0') { + this.__emit(); + } + else if (this.clearTimer === void 0) { + var ref = this.debounce + ? [ setTimeout(this.__emit, this.debounce), clearTimeout ] + : [ requestAnimationFrame(this.__emit), cancelAnimationFrame ]; + var timer = ref[0]; + var fn = ref[1]; + + this.clearTimer = function () { + fn(timer); + this$1$1.clearTimer = void 0; + }; + } + }, + + __emit: function __emit () { + this.clearTimer !== void 0 && this.clearTimer(); + + var top = Math.max(0, getVerticalScrollPosition(this.__scrollTarget)); + var left = getHorizontalScrollPosition(this.__scrollTarget); + + var delta = { + top: top - this.scroll.position.top, + left: left - this.scroll.position.left + }; + + if ( + (this.axis === 'vertical' && delta.top === 0) || + (this.axis === 'horizontal' && delta.left === 0) + ) { + return + } + + var curDir = Math.abs(delta.top) >= Math.abs(delta.left) + ? (delta.top < 0 ? 'up' : 'down') + : (delta.left < 0 ? 'left' : 'right'); + + this.scroll.position = { top: top, left: left }; + this.scroll.directionChanged = this.scroll.direction !== curDir; + this.scroll.delta = delta; + + if (this.scroll.directionChanged === true) { + this.scroll.direction = curDir; + this.scroll.inflectionPoint = this.scroll.position; + } + + this.$emit('scroll', this.getPosition()); + }, + + __configureScrollTarget: function __configureScrollTarget () { + this.__scrollTarget = getScrollTarget(this.$el.parentNode, this.scrollTarget); + this.__scrollTarget.addEventListener('scroll', this.trigger, passive$1); + this.trigger(true); + }, + + __unconfigureScrollTarget: function __unconfigureScrollTarget () { + if (this.__scrollTarget !== void 0) { + this.__scrollTarget.removeEventListener('scroll', this.trigger, passive$1); + this.__scrollTarget = void 0; + } + } + }, + + mounted: function mounted () { + this.__configureScrollTarget(); + }, + + beforeDestroy: function beforeDestroy () { + this.clearTimer !== void 0 && this.clearTimer(); + this.__unconfigureScrollTarget(); + } + }); + + var QLayout = Vue__default["default"].extend({ + name: 'QLayout', + + mixins: [ ListenersMixin ], + + provide: function provide () { + return { + layout: this + } + }, + + props: { + container: Boolean, + view: { + type: String, + default: 'hhh lpr fff', + validator: function (v) { return /^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(v.toLowerCase()); } + } + }, + + data: function data () { + return { + // page related + height: this.$q.screen.height, + width: this.container === true ? 0 : this.$q.screen.width, + + // container only prop + containerHeight: 0, + scrollbarWidth: onSSR === true ? 0 : getScrollbarWidth(), + + header: { + size: 0, + offset: 0, + space: false + }, + right: { + size: 300, + offset: 0, + space: false + }, + footer: { + size: 0, + offset: 0, + space: false + }, + left: { + size: 300, + offset: 0, + space: false + }, + + scroll: { + position: 0, + direction: 'down' + } + } + }, + + computed: { + rows: function rows () { + var rows = this.view.toLowerCase().split(' '); + return { + top: rows[0].split(''), + middle: rows[1].split(''), + bottom: rows[2].split('') + } + }, + + style: function style () { + return this.container === true + ? null + : { minHeight: this.$q.screen.height + 'px' } + }, + + // used by container only + targetStyle: function targetStyle () { + var obj; + + if (this.scrollbarWidth !== 0) { + return ( obj = {}, obj[this.$q.lang.rtl === true ? 'left' : 'right'] = ((this.scrollbarWidth) + "px"), obj ) + } + }, + + targetChildStyle: function targetChildStyle () { + var obj; + + if (this.scrollbarWidth !== 0) { + return ( obj = {}, obj[this.$q.lang.rtl === true ? 'right' : 'left'] = 0, obj[this.$q.lang.rtl === true ? 'left' : 'right'] = ("-" + (this.scrollbarWidth) + "px"), obj.width = ("calc(100% + " + (this.scrollbarWidth) + "px)"), obj ) + } + }, + + totalWidth: function totalWidth () { + return this.width + this.scrollbarWidth + }, + + classes: function classes () { + return 'q-layout q-layout--' + + (this.container === true ? 'containerized' : 'standard') + }, + + scrollbarEvtAction: function scrollbarEvtAction () { + return this.container !== true && this.scrollbarWidth > 0 + ? 'add' : 'remove' + } + }, + + watch: { + scrollbarEvtAction: '__updateScrollEvent' + }, + + created: function created () { + this.instances = {}; + }, + + mounted: function mounted () { + this.scrollbarEvtAction === 'add' && this.__updateScrollEvent('add'); + }, + + beforeDestroy: function beforeDestroy () { + this.scrollbarEvtAction === 'add' && this.__updateScrollEvent('remove'); + }, + + render: function render (h) { + var layout = h('div', { + class: this.classes, + style: this.style, + attrs: { tabindex: -1 }, + on: Object.assign({}, this.qListeners) + }, mergeSlot([ + h(QScrollObserver, { + key: 'scroll', + on: cache(this, 'scroll', { scroll: this.__onPageScroll }) + }), + + h(QResizeObserver, { + key: 'resizeOut', + on: cache(this, 'resizeOut', { resize: this.__onPageResize }) + }) + ], this, 'default')); + + return this.container === true + ? h('div', { + staticClass: 'q-layout-container overflow-hidden' + }, [ + h(QResizeObserver, { + key: 'resizeIn', + on: cache(this, 'resizeIn', { resize: this.__onContainerResize }) + }), + h('div', { + staticClass: 'absolute-full', + style: this.targetStyle + }, [ + h('div', { + staticClass: 'scroll', + style: this.targetChildStyle + }, [ layout ]) + ]) + ]) + : layout + }, + + methods: { + __animate: function __animate () { + var this$1$1 = this; + + if (this.timer !== void 0) { + clearTimeout(this.timer); + } + else { + document.body.classList.add('q-body--layout-animate'); + } + this.timer = setTimeout(function () { + document.body.classList.remove('q-body--layout-animate'); + this$1$1.timer = void 0; + }, 150); + }, + + __onPageScroll: function __onPageScroll (data) { + if (this.container === true || document.qScrollPrevented !== true) { + this.scroll = { + position: data.position.top, + direction: data.direction, + directionChanged: data.directionChanged, + inflectionPoint: data.inflectionPoint.top, + delta: data.delta.top + }; + + this.qListeners.scroll !== void 0 && this.$emit('scroll', Object.assign({}, this.scroll)); + } + }, + + __onPageResize: function __onPageResize (ref) { + var height = ref.height; + var width = ref.width; + + var resized = false; + + if (this.height !== height) { + resized = true; + this.height = height; + if (this.qListeners['scroll-height'] !== void 0) { + this.$emit('scroll-height', height); + } + this.__updateScrollbarWidth(); + } + if (this.width !== width) { + resized = true; + this.width = width; + } + + if (resized === true && this.qListeners.resize !== void 0) { + this.$emit('resize', { height: height, width: width }); + } + }, + + __onContainerResize: function __onContainerResize (ref) { + var height = ref.height; + + if (this.containerHeight !== height) { + this.containerHeight = height; + this.__updateScrollbarWidth(); + } + }, + + __updateScrollbarWidth: function __updateScrollbarWidth () { + if (this.container === true) { + var width = this.height > this.containerHeight + ? getScrollbarWidth() + : 0; + + if (this.scrollbarWidth !== width) { + this.scrollbarWidth = width; + } + } + }, + + __updateScrollEvent: function __updateScrollEvent (action) { + if (this.timerScrollbar !== void 0 && action === 'remove') { + clearTimeout(this.timerScrollbar); + this.__restoreScrollbar(); + } + + window[(action + "EventListener")]('resize', this.__hideScrollbar); + }, + + __hideScrollbar: function __hideScrollbar () { + if (this.timerScrollbar === void 0) { + var ref = document.body; + var offsetHeight = ref.offsetHeight; + var classList = ref.classList; + + // if it has no scrollbar then there's nothing to do + if (offsetHeight > this.$q.screen.height) { + return + } + + classList.add('hide-scrollbar'); + } + else { + clearTimeout(this.timerScrollbar); + } + + this.timerScrollbar = setTimeout(this.__restoreScrollbar, 200); + }, + + __restoreScrollbar: function __restoreScrollbar () { + this.timerScrollbar = void 0; + document.body.classList.remove('hide-scrollbar'); + } + } + }); + + var QMarkupTable = Vue__default["default"].extend({ + name: 'QMarkupTable', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + dense: Boolean, + flat: Boolean, + bordered: Boolean, + square: Boolean, + separator: { + type: String, + default: 'horizontal', + validator: function (v) { return ['horizontal', 'vertical', 'cell', 'none'].includes(v); } + }, + wrapCells: Boolean + }, + + computed: { + classes: function classes () { + return "q-table--" + (this.separator) + "-separator" + + " q-table--" + (this.darkSuffix) + " q-table__card--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + + (this.dense === true ? ' q-table--dense' : '') + + (this.flat === true ? ' q-table--flat' : '') + + (this.bordered === true ? ' q-table--bordered' : '') + + (this.square === true ? ' q-table--square' : '') + + (this.wrapCells === false ? ' q-table--no-wrap' : '') + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-markup-table q-table__container q-table__card', + class: this.classes, + on: Object.assign({}, this.qListeners) + }, [ + h('table', { staticClass: 'q-table' }, slot(this, 'default')) + ]) + } + }); + + var QNoSsr = Vue__default["default"].extend({ + name: 'QNoSsr', + + mixins: [ CanRenderMixin, TagMixin, ListenersMixin ], + + props: { + placeholder: String + }, + + render: function render (h) { + var data = { + on: Object.assign({}, this.qListeners) + }; + + if (this.canRender === true) { + var node$1 = slot(this, 'default'); + return node$1 === void 0 + ? node$1 + : (node$1.length > 1 ? h(this.tag, data, node$1) : node$1[0]) + } + + data.staticClass = 'q-no-ssr-placeholder'; + + var node = slot(this, 'placeholder'); + if (node !== void 0) { + return node.length > 1 + ? h(this.tag, data, node) + : node[0] + } + + if (this.placeholder !== void 0) { + return h(this.tag, data, [ + this.placeholder + ]) + } + } + }); + + var QRadio = Vue__default["default"].extend({ + name: 'QRadio', + + mixins: [ DarkMixin, OptionSizeMixin, FormMixin, RefocusTargetMixin ], + + props: { + value: { + required: true + }, + val: { + required: true + }, + + label: String, + leftLabel: Boolean, + + checkedIcon: String, + uncheckedIcon: String, + + color: String, + keepColor: Boolean, + dense: Boolean, + + disable: Boolean, + tabindex: [String, Number] + }, + + computed: { + isTrue: function isTrue () { + return this.value === this.val + }, + + classes: function classes () { + return 'q-radio cursor-pointer no-outline row inline no-wrap items-center' + + (this.disable === true ? ' disabled' : '') + + " q-radio--" + (this.darkSuffix) + + (this.dense === true ? ' q-radio--dense' : '') + + (this.leftLabel === true ? ' reverse' : '') + }, + + innerClass: function innerClass () { + var color = this.color !== void 0 && ( + this.keepColor === true || + this.isTrue === true + ) + ? (" text-" + (this.color)) + : ''; + + return ("q-radio__inner--" + (this.isTrue === true ? 'truthy' : 'falsy') + color) + }, + + computedIcon: function computedIcon () { + return this.isTrue === true + ? this.checkedIcon + : this.uncheckedIcon + }, + + computedTabindex: function computedTabindex () { + return this.disable === true ? -1 : this.tabindex || 0 + }, + + formAttrs: function formAttrs () { + var prop = { type: 'radio' }; + + this.name !== void 0 && Object.assign(prop, { + name: this.name, + value: this.val + }); + + return prop + }, + + formDomProps: function formDomProps () { + if (this.name !== void 0 && this.isTrue === true) { + return { checked: true } + } + }, + + attrs: function attrs () { + var attrs = { + tabindex: this.computedTabindex, + role: 'radio', + 'aria-label': this.label, + 'aria-checked': this.isTrue === true ? 'true' : 'false' + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + + return attrs + } + }, + + methods: { + set: function set (e) { + if (e !== void 0) { + stopAndPrevent(e); + this.__refocusTarget(e); + } + + if (this.disable !== true && this.isTrue !== true) { + this.$emit('input', this.val, e); + } + } + }, + + render: function render (h) { + var this$1$1 = this; + + var content = this.computedIcon !== void 0 + ? [ + h('div', { + key: 'icon', + staticClass: 'q-radio__icon-container absolute-full flex flex-center no-wrap' + }, [ + h(QIcon, { + staticClass: 'q-radio__icon', + props: { name: this.computedIcon } + }) + ]) + ] + : [ + h('svg', { + key: 'svg', + staticClass: 'q-radio__bg absolute non-selectable', + attrs: { focusable: 'false' /* needed for IE11 */, viewBox: '0 0 24 24' } + }, [ + h('path', { + attrs: { + d: 'M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12' + } + }), + + h('path', { + staticClass: 'q-radio__check', + attrs: { + d: 'M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6' + } + }) + ]) + ]; + + this.disable !== true && this.__injectFormInput( + content, + 'unshift', + 'q-radio__native q-ma-none q-pa-none' + ); + + var child = [ + h('div', { + staticClass: 'q-radio__inner relative-position', + class: this.innerClass, + style: this.sizeStyle, + attrs: { 'aria-hidden': 'true' } + }, content) + ]; + + if (this.__refocusTargetEl !== void 0) { + child.push(this.__refocusTargetEl); + } + + var label = this.label !== void 0 + ? mergeSlot([ this.label ], this, 'default') + : slot(this, 'default'); + + label !== void 0 && child.push( + h('div', { + staticClass: 'q-radio__label q-anchor--skip' + }, label) + ); + + return h('div', { + key: 'inpExt', + class: this.classes, + attrs: this.attrs, + on: cache(this, 'inpExt', { + click: this.set, + keydown: function (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + stopAndPrevent(e); + } + }, + keyup: function (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + this$1$1.set(e); + } + } + }) + }, child) + } + }); + + var QToggle = Vue__default["default"].extend({ + name: 'QToggle', + + mixins: [ CheckboxMixin ], + + props: { + icon: String, + + iconColor: String + }, + + computed: { + computedIcon: function computedIcon () { + return ( + this.isTrue === true + ? this.checkedIcon + : (this.isIndeterminate === true ? this.indeterminateIcon : this.uncheckedIcon) + ) || this.icon + }, + + computedIconColor: function computedIconColor () { + if (this.isTrue === true) { + return this.iconColor + } + } + }, + + methods: { + __getInner: function __getInner (h) { + return [ + h('div', { staticClass: 'q-toggle__track' }), + + h('div', { + staticClass: 'q-toggle__thumb absolute flex flex-center no-wrap' + }, this.computedIcon !== void 0 + ? [ + h(QIcon, { + props: { + name: this.computedIcon, + color: this.computedIconColor + } + }) + ] + : void 0 + ) + ] + } + }, + + created: function created () { + this.type = 'toggle'; + } + }); + + var components$1 = { + radio: QRadio, + checkbox: QCheckbox, + toggle: QToggle + }; + + var typeValues = Object.keys(components$1); + + var QOptionGroup = Vue__default["default"].extend({ + name: 'QOptionGroup', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + value: { + required: true + }, + options: { + type: Array, + validator: function validator (opts) { + return opts.every(function (opt) { return 'value' in opt && 'label' in opt; }) + } + }, + + name: String, + + type: { + default: 'radio', + validator: function (v) { return typeValues.includes(v); } + }, + + color: String, + keepColor: Boolean, + dense: Boolean, + + size: String, + + leftLabel: Boolean, + inline: Boolean, + disable: Boolean + }, + + computed: { + component: function component () { + return components$1[this.type] + }, + + model: function model () { + return Array.isArray(this.value) + ? this.value.slice() + : this.value + }, + + classes: function classes () { + return 'q-option-group q-gutter-x-sm' + + (this.inline === true ? ' q-option-group--inline' : '') + }, + + attrs: function attrs () { + if (this.type === 'radio') { + var attrs = { + role: 'radiogroup' + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + + return attrs + } + + return { role: 'group' } + } + }, + + methods: { + __update: function __update (value) { + this.$emit('input', value); + } + }, + + created: function created () { + var isArray = Array.isArray(this.value); + + if (this.type === 'radio') { + if (isArray) { + console.error('q-option-group: model should not be array'); + } + } + else if (isArray === false) { + console.error('q-option-group: model should be array in your case'); + } + }, + + render: function render (h) { + var this$1$1 = this; + + return h('div', { + class: this.classes, + attrs: this.attrs, + on: Object.assign({}, this.qListeners) + }, this.options.map(function (opt, i) { + var child = this$1$1.$scopedSlots[ 'label-' + i ] !== void 0 + ? this$1$1.$scopedSlots[ 'label-' + i ](opt) + : ( + this$1$1.$scopedSlots.label !== void 0 + ? this$1$1.$scopedSlots.label(opt) + : void 0 + ); + + return h('div', [ + h(this$1$1.component, { + key: 'inp', + props: { + value: this$1$1.value, + val: opt.value, + name: opt.name === void 0 ? this$1$1.name : opt.name, + disable: this$1$1.disable || opt.disable, + label: child === void 0 ? opt.label : void 0, + leftLabel: opt.leftLabel === void 0 ? this$1$1.leftLabel : opt.leftLabel, + color: opt.color === void 0 ? this$1$1.color : opt.color, + checkedIcon: opt.checkedIcon, + uncheckedIcon: opt.uncheckedIcon, + dark: opt.dark === void 0 ? this$1$1.dark : opt.dark, + size: opt.size === void 0 ? this$1$1.size : opt.size, + dense: this$1$1.dense, + keepColor: opt.keepColor === void 0 ? this$1$1.keepColor : opt.keepColor + }, + on: cache(this$1$1, 'inp', { + input: this$1$1.__update + }) + }, child) + ]) + })) + } + }); + + var QPage = Vue__default["default"].extend({ + name: 'QPage', + + mixins: [ ListenersMixin ], + + inject: { + pageContainer: { + default: function default$1 () { + console.error('QPage needs to be child of QPageContainer'); + } + }, + layout: {} + }, + + props: { + padding: Boolean, + styleFn: Function + }, + + computed: { + style: function style () { + var offset = + (this.layout.header.space === true ? this.layout.header.size : 0) + + (this.layout.footer.space === true ? this.layout.footer.size : 0); + + if (typeof this.styleFn === 'function') { + var height = this.layout.container === true + ? this.layout.containerHeight + : this.$q.screen.height; + + return this.styleFn(offset, height) + } + + return { + minHeight: this.layout.container === true + ? (this.layout.containerHeight - offset) + 'px' + : ( + this.$q.screen.height === 0 + ? ("calc(100vh - " + offset + "px)") + : (this.$q.screen.height - offset) + 'px' + ) + } + }, + + classes: function classes () { + if (this.padding === true) { + return 'q-layout-padding' + } + } + }, + + render: function render (h) { + return h('main', { + staticClass: 'q-page', + style: this.style, + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QPageContainer = Vue__default["default"].extend({ + name: 'QPageContainer', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default: function default$1 () { + console.error('QPageContainer needs to be child of QLayout'); + } + } + }, + + provide: { + pageContainer: true + }, + + computed: { + style: function style () { + var css = {}; + + if (this.layout.header.space === true) { + css.paddingTop = (this.layout.header.size) + "px"; + } + if (this.layout.right.space === true) { + css[("padding" + (this.$q.lang.rtl === true ? 'Left' : 'Right'))] = (this.layout.right.size) + "px"; + } + if (this.layout.footer.space === true) { + css.paddingBottom = (this.layout.footer.size) + "px"; + } + if (this.layout.left.space === true) { + css[("padding" + (this.$q.lang.rtl === true ? 'Right' : 'Left'))] = (this.layout.left.size) + "px"; + } + + return css + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-page-container', + style: this.style, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QPageSticky = Vue__default["default"].extend({ + name: 'QPageSticky', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default: function default$1 () { + console.error('QPageSticky needs to be child of QLayout'); + } + } + }, + + props: { + position: { + type: String, + default: 'bottom-right', + validator: function (v) { return [ + 'top-right', 'top-left', + 'bottom-right', 'bottom-left', + 'top', 'right', 'bottom', 'left' + ].includes(v); } + }, + offset: { + type: Array, + validator: function (v) { return v.length === 2; } + }, + expand: Boolean + }, + + computed: { + attach: function attach () { + var pos = this.position; + + return { + top: pos.indexOf('top') > -1, + right: pos.indexOf('right') > -1, + bottom: pos.indexOf('bottom') > -1, + left: pos.indexOf('left') > -1, + vertical: pos === 'top' || pos === 'bottom', + horizontal: pos === 'left' || pos === 'right' + } + }, + + top: function top () { + return this.layout.header.offset + }, + + right: function right () { + return this.layout.right.offset + }, + + bottom: function bottom () { + return this.layout.footer.offset + }, + + left: function left () { + return this.layout.left.offset + }, + + style: function style () { + var + posX = 0, + posY = 0; + + var + attach = this.attach, + dir = this.$q.lang.rtl === true ? -1 : 1; + + if (attach.top === true && this.top !== 0) { + posY = (this.top) + "px"; + } + else if (attach.bottom === true && this.bottom !== 0) { + posY = (-this.bottom) + "px"; + } + + if (attach.left === true && this.left !== 0) { + posX = (dir * this.left) + "px"; + } + else if (attach.right === true && this.right !== 0) { + posX = (-dir * this.right) + "px"; + } + + var css = { transform: ("translate(" + posX + ", " + posY + ")") }; + + if (this.offset) { + css.margin = (this.offset[1]) + "px " + (this.offset[0]) + "px"; + } + + if (attach.vertical === true) { + if (this.left !== 0) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = (this.left) + "px"; + } + if (this.right !== 0) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = (this.right) + "px"; + } + } + else if (attach.horizontal === true) { + if (this.top !== 0) { + css.top = (this.top) + "px"; + } + if (this.bottom !== 0) { + css.bottom = (this.bottom) + "px"; + } + } + + return css + }, + + classes: function classes () { + return ("fixed-" + (this.position) + " q-page-sticky--" + (this.expand === true ? 'expand' : 'shrink')) + } + }, + + render: function render (h) { + var content = slot(this, 'default'); + + return h('div', { + staticClass: 'q-page-sticky row flex-center', + class: this.classes, + style: this.style, + on: Object.assign({}, this.qListeners) + }, + this.expand === true + ? content + : [ h('div', content) ] + ) + } + }); + + var QPageScroller = Vue__default["default"].extend({ + name: 'QPageScroller', + + mixins: [ QPageSticky ], + + props: { + scrollOffset: { + type: Number, + default: 1000 + }, + + reverse: Boolean, + + duration: { + type: Number, + default: 300 + }, + + offset: { + default: function () { return [18, 18]; } + } + }, + + inject: { + layout: { + default: function default$1 () { + console.error('QPageScroller needs to be used within a QLayout'); + } + } + }, + + data: function data () { + return { + showing: this.__isVisible() + } + }, + + computed: { + scrollHeight: function scrollHeight () { + return this.layout.height - ( + this.layout.container === true + ? this.layout.containerHeight + : this.$q.screen.height + ) + }, + + onEvents: function onEvents () { + return Object.assign({}, this.qListeners, + {click: this.__onClick}) + } + }, + + watch: { + 'layout.scroll.position': function layout_scroll_position () { + this.__updateVisibility(); + }, + + reverse: { + handler: function handler (val) { + if (val === true) { + if (this.heightWatcher === void 0) { + this.heightWatcher = this.$watch('scrollHeight', this.__updateVisibility); + } + } + else if (this.heightWatcher !== void 0) { + this.__cleanup(); + } + }, + immediate: true + } + }, + + methods: { + __isVisible: function __isVisible () { + return this.reverse === true + ? this.scrollHeight - this.layout.scroll.position > this.scrollOffset + : this.layout.scroll.position > this.scrollOffset + }, + + __onClick: function __onClick (e) { + var target = getScrollTarget(this.layout.container === true ? this.$el : this.layout.$el); + setScrollPosition(target, this.reverse === true ? this.layout.height : 0, this.duration); + this.$emit('click', e); + }, + + __updateVisibility: function __updateVisibility () { + var newVal = this.__isVisible(); + if (this.showing !== newVal) { + this.showing = newVal; + } + }, + + __cleanup: function __cleanup () { + this.heightWatcher(); + this.heightWatcher = void 0; + } + }, + + render: function render (h) { + return h('transition', { + props: { name: 'q-transition--fade' } + }, + this.showing === true + ? [ + h('div', { + staticClass: 'q-page-scroller', + on: this.onEvents + }, [ + QPageSticky.options.render.call(this, h) + ]) + ] + : null + ) + }, + + beforeDestroy: function beforeDestroy () { + this.heightWatcher !== void 0 && this.__cleanup(); + } + }); + + function getBool (val, otherwise) { + return [ true, false ].includes(val) + ? val + : otherwise + } + + var QPagination = Vue__default["default"].extend({ + name: 'QPagination', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + value: { + type: Number, + required: true + }, + min: { + type: [ Number, String ], + default: 1 + }, + max: { + type: [ Number, String ], + required: true + }, + maxPages: { + type: [ Number, String ], + default: 0, + validator: function (v) { return ( + (typeof v === 'string' ? parseInt(v, 10) : v) >= 0 + ); } + }, + + inputStyle: [Array, String, Object], + inputClass: [Array, String, Object], + + size: String, + + disable: Boolean, + + input: Boolean, + + iconPrev: String, + iconNext: String, + iconFirst: String, + iconLast: String, + + toFn: Function, + + boundaryLinks: { + type: Boolean, + default: null + }, + boundaryNumbers: { + type: Boolean, + default: null + }, + directionLinks: { + type: Boolean, + default: null + }, + ellipses: { + type: Boolean, + default: null + }, + + ripple: { + type: [Boolean, Object], + default: null + }, + + round: Boolean, + rounded: Boolean, + + flat: Boolean, + outline: Boolean, + unelevated: Boolean, + push: Boolean, + glossy: Boolean, + + color: { + type: String, + default: 'primary' + }, + textColor: String, + + activeDesign: { + type: String, + default: '', + values: function (v) { return v === '' || btnDesignOptions.includes(v); } + }, + activeColor: String, + activeTextColor: String, + + gutter: String, + padding: { + type: String, + default: '3px 2px' + } + }, + + data: function data () { + return { + newPage: null + } + }, + + watch: { + min: function min () { + this.model = this.value; + }, + + max: function max () { + this.model = this.value; + } + }, + + computed: { + model: { + get: function get () { + return this.value + }, + set: function set (val) { + val = parseInt(val, 10); + if (this.disable || isNaN(val)) { + return + } + var value = between(val, this.__min, this.__max); + this.$emit('input', value); + } + }, + + inputPlaceholder: function inputPlaceholder () { + return this.model + ' / ' + this.__max + }, + + __min: function __min () { + return parseInt(this.min, 10) + }, + + __max: function __max () { + return parseInt(this.max, 10) + }, + + __maxPages: function __maxPages () { + return parseInt(this.maxPages, 10) + }, + + __boundaryLinks: function __boundaryLinks () { + return getBool(this.boundaryLinks, this.input) + }, + + __boundaryNumbers: function __boundaryNumbers () { + return getBool(this.boundaryNumbers, !this.input) + }, + + __directionLinks: function __directionLinks () { + return getBool(this.directionLinks, this.input) + }, + + __ellipses: function __ellipses () { + return getBool(this.ellipses, !this.input) + }, + + __gutter: function __gutter () { + return this.gutter in btnPadding + ? ((btnPadding[ this.gutter ]) + "px") + : this.gutter || null + }, + __gutterStyle: function __gutterStyle () { + return this.__gutter !== null + ? ("--q-pagination-gutter-parent:-" + (this.__gutter) + ";--q-pagination-gutter-child:" + (this.__gutter)) + : null + }, + + __btnDesign: function __btnDesign () { + return getBtnDesign(this, 'flat') + }, + + __btnActiveDesign: function __btnActiveDesign () { + // we also reset non-active design + var acc = {}; + acc[ this.__btnDesign ] = false; + if (this.activeDesign !== '') { + acc[ this.activeDesign ] = true; + } + return acc + }, + + icons: function icons () { + var ico = [ + this.iconFirst || this.$q.iconSet.pagination.first, + this.iconPrev || this.$q.iconSet.pagination.prev, + this.iconNext || this.$q.iconSet.pagination.next, + this.iconLast || this.$q.iconSet.pagination.last + ]; + return this.$q.lang.rtl === true ? ico.reverse() : ico + }, + + attrs: function attrs () { + var attrs = { role: 'navigation' }; + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + return attrs + }, + + btnProps: function btnProps () { + var obj; + + return ( obj = {}, obj[ this.__btnDesign ] = true, obj.round = this.round, obj.rounded = this.rounded, obj.padding = this.padding, obj.color = this.color, obj.textColor = this.textColor, obj.size = this.size, obj.ripple = this.ripple !== null + ? this.ripple + : true, obj ) + }, + + activeBtnProps: function activeBtnProps () { + return Object.assign({}, this.__btnActiveDesign, + {color: this.activeColor || this.color, + textColor: this.activeTextColor || this.textColor}) + }, + + btnConfig: function btnConfig () { + var maxPages = Math.max( + this.__maxPages, + 1 + (this.__ellipses ? 2 : 0) + (this.__boundaryNumbers ? 2 : 0) + ); + + var acc = { + pgFrom: this.__min, + pgTo: this.__max, + ellipsesStart: false, + ellipsesEnd: false, + boundaryStart: false, + boundaryEnd: false, + marginalStyle: { + minWidth: ((Math.max(2, String(this.__max).length)) + "em") + } + }; + + if (this.__maxPages && maxPages < (this.__max - this.__min + 1)) { + maxPages = 1 + Math.floor(maxPages / 2) * 2; + acc.pgFrom = Math.max(this.__min, Math.min(this.__max - maxPages + 1, this.value - Math.floor(maxPages / 2))); + acc.pgTo = Math.min(this.__max, acc.pgFrom + maxPages - 1); + + if (this.__boundaryNumbers) { + acc.boundaryStart = true; + acc.pgFrom++; + } + + if (this.__ellipses && acc.pgFrom > (this.__min + (this.__boundaryNumbers ? 1 : 0))) { + acc.ellipsesStart = true; + acc.pgFrom++; + } + + if (this.__boundaryNumbers) { + acc.boundaryEnd = true; + acc.pgTo--; + } + + if (this.__ellipses && acc.pgTo < (this.__max - (this.__boundaryNumbers ? 1 : 0))) { + acc.ellipsesEnd = true; + acc.pgTo--; + } + } + + return acc + }, + + inputEvents: function inputEvents () { + var this$1$1 = this; + + var updateModel = function () { + this$1$1.model = this$1$1.newPage; + this$1$1.newPage = null; + }; + + return { + input: function (val) { this$1$1.newPage = val; }, + keyup: function (e) { isKeyCode(e, 13) === true && updateModel(); }, + blur: updateModel + } + } + }, + + methods: { + set: function set (value) { + this.model = value; + }, + + setByOffset: function setByOffset (offset) { + this.model = this.model + offset; + }, + + __getBtn: function __getBtn (h, data, props, page, active) { + var this$1$1 = this; + + data.props = Object.assign({}, this.btnProps, + props); + data.attrs = Object.assign({}, {'aria-label': page, + 'aria-current': 'false'}, + data.attrs); + + if (active === true) { + Object.assign(data.props, this.activeBtnProps); + data.attrs[ 'aria-current' ] = 'true'; + } + + if (page !== void 0) { + if (this.toFn !== void 0) { + data.props.to = this.toFn(page); + } + else { + data.on = { click: function () { this$1$1.set(page); } }; + } + } + + return h(QBtn, data) + } + }, + + render: function render (h) { + var contentStart = []; + var contentEnd = []; + var contentMiddle; + + if (this.__boundaryLinks === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bls' + }, { + disable: this.disable || this.value <= this.__min, + icon: this.icons[ 0 ] + }, this.__min) + ); + contentEnd.unshift( + this.__getBtn(h, { + key: 'ble' + }, { + disable: this.disable || this.value >= this.__max, + icon: this.icons[ 3 ] + }, this.__max) + ); + } + + if (this.__directionLinks === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bdp' + }, { + disable: this.disable || this.value <= this.__min, + icon: this.icons[ 1 ] + }, this.value - 1) + ); + contentEnd.unshift( + this.__getBtn(h, { + key: 'bdn' + }, { + disable: this.disable || this.value >= this.__max, + icon: this.icons[ 2 ] + }, this.value + 1) + ); + } + + if (this.input !== true) { // has buttons instead of inputbox + contentMiddle = []; + var ref = this.btnConfig; + var pgFrom = ref.pgFrom; + var pgTo = ref.pgTo; + var style = ref.marginalStyle; + + if (this.btnConfig.boundaryStart === true) { + var active = this.__min === this.value; + contentStart.push( + this.__getBtn(h, { + key: 'bns', + style: style + }, { + disable: this.disable, + label: this.__min + }, this.__min, active) + ); + } + + if (this.btnConfig.boundaryEnd === true) { + var active$1 = this.__max === this.value; + contentEnd.unshift( + this.__getBtn(h, { + key: 'bne', + style: style + }, { + disable: this.disable, + label: this.__max + }, this.__max, active$1) + ); + } + + if (this.btnConfig.ellipsesStart === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bes', + style: style + }, { + disable: this.disable, + label: '…', + ripple: false + }, pgFrom - 1) + ); + } + + if (this.btnConfig.ellipsesEnd === true) { + contentEnd.unshift( + this.__getBtn(h, { + key: 'bee', + style: style + }, { + disable: this.disable, + label: '…', + ripple: false + }, pgTo + 1) + ); + } + + for (var i = pgFrom; i <= pgTo; i++) { + contentMiddle.push( + this.__getBtn(h, { + key: ("bpg" + i), + style: style + }, { + disable: this.disable, + label: i + }, i, i === this.value) + ); + } + } + + return h('div', { + staticClass: 'q-pagination row no-wrap items-center', + class: { disabled: this.disable }, + attrs: this.attrs, + on: Object.assign({}, this.qListeners) + }, [ + h('div', { + staticClass: 'q-pagination__content row no-wrap items-center', + style: this.__gutterStyle + }, contentStart.concat( [h('div', { + key: 'stop', + staticClass: 'q-pagination__middle row justify-center', + on: this.input === true + ? cache(this, 'stop', { input: stop }) + : null + }, this.input === true + ? [ + h(QInput, { + key: 'inp', + staticClass: 'inline', + style: { width: ((this.inputPlaceholder.length / 1.5) + "em") }, + props: { + type: 'number', + dense: true, + value: this.newPage, + disable: this.disable, + dark: this.dark, + borderless: true, + inputClass: this.inputClass, + inputStyle: this.inputStyle + }, + attrs: { + placeholder: this.inputPlaceholder, + min: this.__min, + max: this.__max + }, + on: Object.assign({}, this.inputEvents) + }) + ] + : contentMiddle + )], + + contentEnd + )) + ]) + } + }); + + function frameDebounce (fn) { + var wait = false, frame, callArgs; + + function debounced (/* ...args */) { + var this$1$1 = this; + + callArgs = arguments; + if (wait === true) { return } + + wait = true; + frame = requestAnimationFrame(function () { + fn.apply(this$1$1, callArgs); + callArgs = void 0; + wait = false; + }); + } + + debounced.cancel = function () { + window.cancelAnimationFrame(frame); + wait = false; + }; + + return debounced + } + + var passive = listenOpts.passive; + + var QParallax = Vue__default["default"].extend({ + name: 'QParallax', + + mixins: [ ListenersMixin ], + + props: { + src: String, + height: { + type: Number, + default: 500 + }, + speed: { + type: Number, + default: 1, + validator: function (v) { return v >= 0 && v <= 1; } + }, + + scrollTarget: { + default: void 0 + } + }, + + data: function data () { + return { + scrolling: false, + percentScrolled: 0 + } + }, + + watch: { + height: function height () { + this.working === true && this.__updatePos(); + }, + + scrollTarget: function scrollTarget () { + if (this.working === true) { + this.__stop(); + this.__start(); + } + } + }, + + methods: { + __update: function __update (percentage) { + this.percentScrolled = percentage; + this.qListeners.scroll !== void 0 && this.$emit('scroll', percentage); + }, + + __updatePos: function __updatePos () { + var containerTop, containerHeight, containerBottom; + + if (this.__scrollTarget === window) { + containerTop = 0; + containerHeight = window.innerHeight; + containerBottom = containerHeight; + } + else { + containerTop = offset(this.__scrollTarget).top; + containerHeight = height(this.__scrollTarget); + containerBottom = containerTop + containerHeight; + } + + var top = offset(this.$el).top; + var bottom = top + this.height; + + if (this.observer !== void 0 || (bottom > containerTop && top < containerBottom)) { + var percent = (containerBottom - top) / (this.height + containerHeight); + this.__setPos((this.mediaHeight - this.height) * percent * this.speed); + this.__update(percent); + } + }, + + __setPos: function __setPos (offset) { + // apply it immediately without any delay + this.media.style.transform = "translate3d(-50%," + (Math.round(offset)) + "px,0)"; + }, + + __onResize: function __onResize () { + this.mediaHeight = this.media.naturalHeight || this.media.videoHeight || height(this.media); + this.working === true && this.__updatePos(); + }, + + __start: function __start () { + this.working = true; + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget); + this.__scrollTarget.addEventListener('scroll', this.__updatePos, passive); + window.addEventListener('resize', this.__resizeHandler, passive); + this.__updatePos(); + }, + + __stop: function __stop () { + if (this.working === true) { + this.working = false; + this.__setPos.cancel(); + this.__update.cancel(); + this.__resizeHandler.cancel(); + this.__scrollTarget.removeEventListener('scroll', this.__updatePos, passive); + window.removeEventListener('resize', this.__resizeHandler, passive); + this.__scrollTarget = void 0; + } + } + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-parallax', + style: { height: ((this.height) + "px") }, + on: Object.assign({}, this.qListeners) + }, [ + h('div', { + ref: 'mediaParent', + staticClass: 'q-parallax__media absolute-full' + }, this.$scopedSlots.media !== void 0 ? this.$scopedSlots.media() : [ + h('img', { + ref: 'media', + attrs: { + src: this.src + } + }) + ]), + + h( + 'div', + { staticClass: 'q-parallax__content absolute-full column flex-center' }, + this.$scopedSlots.content !== void 0 + ? this.$scopedSlots.content({ percentScrolled: this.percentScrolled }) + : slot(this, 'default') + ) + ]) + }, + + mounted: function mounted () { + var this$1$1 = this; + + this.__setPos = frameDebounce(this.__setPos); + this.__update = frameDebounce(this.__update); + this.__resizeHandler = frameDebounce(this.__onResize); + + this.media = this.$scopedSlots.media !== void 0 + ? this.$refs.mediaParent.children[0] + : this.$refs.media; + + this.media.onload = this.media.onloadstart = this.media.loadedmetadata = this.__onResize; + this.__onResize(); + this.media.style.display = 'initial'; + + if (window.IntersectionObserver !== void 0) { + this.observer = new IntersectionObserver(function (entries) { + this$1$1[entries[0].isIntersecting === true ? '__start' : '__stop'](); + }); + + this.observer.observe(this.$el); + } + else { + this.__start(); + } + }, + + beforeDestroy: function beforeDestroy () { + this.__stop(); + this.observer !== void 0 && this.observer.disconnect(); + this.media.onload = this.media.onloadstart = this.media.loadedmetadata = null; + } + }); + + // adapted from https://stackoverflow.com/a/40294058 + + function cloneDeep (data, hash) { + if ( hash === void 0 ) hash = new WeakMap(); + + if (Object(data) !== data) { return data } + if (hash.has(data)) { return hash.get(data) } + + var result = data instanceof Date + ? new Date(data) + : (data instanceof RegExp + ? new RegExp(data.source, data.flags) + : (data instanceof Set + ? new Set() + : (data instanceof Map + ? new Map() + : (typeof data.constructor !== 'function' + ? Object.create(null) + : (data.prototype !== void 0 && typeof data.prototype.constructor === 'function' + ? data + : new data.constructor() + ) + ) + ) + ) + ); + + if (typeof data.constructor === 'function' && typeof data.valueOf === 'function') { + var val = data.valueOf(); + + if (Object(val) !== val) { + var result$1 = new data.constructor(val); + + hash.set(data, result$1); + + return result$1 + } + } + + hash.set(data, result); + + if (data instanceof Set) { + data.forEach(function (val) { + result.add(cloneDeep(val, hash)); + }); + } + else if (data instanceof Map) { + data.forEach(function (val, key) { + result.set(key, cloneDeep(val, hash)); + }); + } + + return Object.assign.apply( + Object, [ result ].concat( Object.keys(data).map(function (key) { + var obj; + + return (( obj = {}, obj[key] = cloneDeep(data[key], hash), obj )); + }) ) + ) + } + + var QPopupEdit = Vue__default["default"].extend({ + name: 'QPopupEdit', + + mixins: [ AttrsMixin ], + + props: { + value: { + required: true + }, + title: String, + buttons: Boolean, + labelSet: String, + labelCancel: String, + + color: { + type: String, + default: 'primary' + }, + validate: { + type: Function, + default: function () { return true; } + }, + + autoSave: Boolean, + + /* menu props overrides */ + cover: { + type: Boolean, + default: true + }, + contentClass: String, + /* end of menu props */ + + disable: Boolean + }, + + data: function data () { + return { + modelChanged: false, + model: null + } + }, + + computed: { + classes: function classes () { + return 'q-popup-edit' + + (this.contentClass !== void 0 ? (" " + (this.contentClass)) : '') + }, + + modelValue: function modelValue () { + return this.modelChanged === true ? this.model : this.value + }, + + initialValue: function initialValue () { + return this.modelChanged !== true ? this.model : this.value + }, + + defaultSlotScope: function defaultSlotScope () { + var this$1$1 = this; + + return injectProp({ + initialValue: this.initialValue, + updatePosition: this.__reposition, + emitValue: this.__changeModel, + validate: this.validate, + set: this.set, + cancel: this.cancel + }, 'value', function () { return this$1$1.modelValue; }, this.__changeModel) + }, + + menuProps: function menuProps () { + return Object.assign({}, this.qAttrs, + {cover: this.cover, + contentClass: this.classes}) + } + }, + + methods: { + set: function set () { + if (this.validate(this.modelValue) !== true) { + return + } + if (this.__hasChanged() === true) { + this.$emit('save', this.modelValue, this.initialValue); + this.modelChanged === true && this.$emit('input', this.modelValue); + } + this.__close(); + }, + + cancel: function cancel () { + if (this.__hasChanged() === true) { + this.$emit('cancel', this.modelValue, this.initialValue); + this.modelChanged !== true && this.$emit('input', this.initialValue); + } + this.__close(); + }, + + show: function show (e) { + this.$refs.menu !== void 0 && this.$refs.menu.show(e); + }, + + hide: function hide (e) { + this.$refs.menu !== void 0 && this.$refs.menu.hide(e); + }, + + __hasChanged: function __hasChanged () { + return isDeepEqual(this.modelValue, this.initialValue) === false + }, + + __changeModel: function __changeModel (val) { + if (this.disable !== true) { + this.model = val; + this.modelChanged = true; + } + }, + + __close: function __close () { + this.validated = true; + this.$refs.menu.showing === true && this.$refs.menu.hide(); + }, + + __reposition: function __reposition () { + var this$1$1 = this; + + this.$nextTick(function () { + this$1$1.$refs.menu.updatePosition(); + }); + }, + + __getContent: function __getContent (h) { + var + title = slot(this, 'title', this.title), + child = this.$scopedSlots.default === void 0 + ? [] + : [].concat(this.$scopedSlots.default(this.defaultSlotScope)); + + title && child.unshift( + h('div', { staticClass: 'q-dialog__title q-mt-sm q-mb-sm' }, [ title ]) + ); + + this.buttons === true && child.push( + h('div', { staticClass: 'q-popup-edit__buttons row justify-center no-wrap' }, [ + h(QBtn, { + key: 'cancel', + props: { + flat: true, + color: this.color, + label: this.labelCancel || this.$q.lang.label.cancel + }, + on: cache(this, 'cancel', { click: this.cancel }) + }), + h(QBtn, { + key: 'ok', + props: { + flat: true, + color: this.color, + label: this.labelSet || this.$q.lang.label.set + }, + on: cache(this, 'ok', { click: this.set }) + }) + ]) + ); + + return child + } + }, + + render: function render (h) { + var this$1$1 = this; + + if (this.disable === true) { return } + + return h(QMenu, { + key: 'menu', + ref: 'menu', + props: this.menuProps, + on: cache(this, 'menu', { + 'before-show': function () { + this$1$1.validated = false; + this$1$1.modelChanged = false; + this$1$1.model = cloneDeep(this$1$1.value); + this$1$1.watcher = this$1$1.$watch('value', this$1$1.__reposition); + this$1$1.$emit('before-show'); + }, + + show: function () { + this$1$1.$emit('show'); + }, + + 'escape-key': this.cancel, + + 'before-hide': function () { + this$1$1.watcher(); + + if (this$1$1.validated === false && this$1$1.__hasChanged() === true) { + if (this$1$1.autoSave === true && this$1$1.validate(this$1$1.model) === true) { + this$1$1.$emit('save', this$1$1.modelValue, this$1$1.initialValue); + this$1$1.modelChanged === true && this$1$1.$emit('input', this$1$1.modelValue); + } + else { + this$1$1.$emit('cancel', this$1$1.modelValue, this$1$1.initialValue); + this$1$1.modelChanged !== true && this$1$1.$emit('input', this$1$1.initialValue); + } + } + + this$1$1.$emit('before-hide'); + }, + + hide: function () { + this$1$1.$emit('hide'); + }, + + keyup: function (e) { + isKeyCode(e, 13) === true && this$1$1.set(); + } + }) + }, this.__getContent(h)) + } + }); + + var QPopupProxy = Vue__default["default"].extend({ + name: 'QPopupProxy', + + mixins: [ AttrsMixin, ListenersMixin, AnchorMixin ], + + props: { + breakpoint: { + type: [String, Number], + default: 450 + } + }, + + data: function data () { + var breakpoint = parseInt(this.breakpoint, 10); + return { + type: this.$q.screen.width < breakpoint || this.$q.screen.height < breakpoint + ? 'dialog' + : 'menu' + } + }, + + computed: { + parsedBreakpoint: function parsedBreakpoint () { + return parseInt(this.breakpoint, 10) + }, + + onEvents: function onEvents () { + return Object.assign({}, this.qListeners, + {hide: this.__onHide}) + } + }, + + watch: { + '$q.screen.width': function $q_screen_width (width) { + if (this.$refs.popup.showing !== true) { + this.__updateType(width, this.$q.screen.height, this.parsedBreakpoint); + } + }, + + '$q.screen.height': function $q_screen_height (height) { + if (this.$refs.popup.showing !== true) { + this.__updateType(this.$q.screen.width, height, this.parsedBreakpoint); + } + }, + + breakpoint: function breakpoint (breakpoint$1) { + if (this.$refs.popup.showing !== true) { + this.__updateType(this.$q.screen.width, this.$q.screen.height, parseInt(breakpoint$1, 10)); + } + } + }, + + methods: { + toggle: function toggle (evt) { + this.$refs.popup.toggle(evt); + }, + + show: function show (evt) { + this.$refs.popup.show(evt); + }, + + hide: function hide (evt) { + this.$refs.popup.hide(evt); + }, + + __onHide: function __onHide (evt) { + this.__updateType(this.$q.screen.width, this.$q.screen.height, this.parsedBreakpoint); + this.$emit('hide', evt); + }, + + __updateType: function __updateType (width, height, breakpoint) { + var type = width < breakpoint || height < breakpoint + ? 'dialog' + : 'menu'; + + if (this.type !== type) { + this.type = type; + } + } + }, + + render: function render (h) { + var def = slot(this, 'default'); + + var props = ( + this.type === 'menu' && + def !== void 0 && + def[0] !== void 0 && + def[0].componentOptions !== void 0 && + def[0].componentOptions.Ctor !== void 0 && + def[0].componentOptions.Ctor.sealedOptions !== void 0 && + ['QDate', 'QTime', 'QCarousel', 'QColor'].includes( + def[0].componentOptions.Ctor.sealedOptions.name + ) + ) ? { cover: true, maxHeight: '99vh' } : {}; + + var data = { + ref: 'popup', + props: Object.assign({}, props, this.qAttrs), + on: this.onEvents + }; + + var component; + + if (this.type === 'dialog') { + component = QDialog; + } + else { + component = QMenu; + data.props.target = this.target; + data.props.contextMenu = this.contextMenu; + data.props.noParentEvent = true; + data.props.separateClosePopup = true; + } + + return h(component, data, def) + } + }); + + function width (val, reverse, $q) { + return { + transform: reverse === true + ? ("translateX(" + ($q.lang.rtl === true ? '-' : '') + "100%) scale3d(" + (-val) + ",1,1)") + : ("scale3d(" + val + ",1,1)") + } + } + + var QLinearProgress = Vue__default["default"].extend({ + name: 'QLinearProgress', + + mixins: [ + ListenersMixin, + DarkMixin, + getSizeMixin({ + xs: 2, + sm: 4, + md: 6, + lg: 10, + xl: 14 + }) + ], + + props: { + value: { + type: Number, + default: 0 + }, + buffer: Number, + + color: String, + trackColor: String, + + reverse: Boolean, + stripe: Boolean, + indeterminate: Boolean, + query: Boolean, + rounded: Boolean, + + instantFeedback: Boolean + }, + + computed: { + motion: function motion () { + return this.indeterminate === true || this.query === true + }, + + widthReverse: function widthReverse () { + return this.reverse !== this.query + }, + + classes: function classes () { + return 'q-linear-progress' + + (this.color !== void 0 ? (" text-" + (this.color)) : '') + + (this.reverse === true || this.query === true ? ' q-linear-progress--reverse' : '') + + (this.rounded === true ? ' rounded-borders' : '') + }, + + trackStyle: function trackStyle () { + return width(this.buffer !== void 0 ? this.buffer : 1, this.widthReverse, this.$q) + }, + + trackClass: function trackClass () { + return "q-linear-progress__track--with" + (this.instantFeedback === true ? 'out' : '') + "-transition" + + " q-linear-progress__track--" + (this.darkSuffix) + + (this.trackColor !== void 0 ? (" bg-" + (this.trackColor)) : '') + }, + + modelStyle: function modelStyle () { + return width(this.motion === true ? 1 : this.value, this.widthReverse, this.$q) + }, + + modelClasses: function modelClasses () { + return "q-linear-progress__model--with" + (this.instantFeedback === true ? 'out' : '') + "-transition" + + " q-linear-progress__model--" + (this.motion === true ? 'in' : '') + "determinate" + }, + + stripeStyle: function stripeStyle () { + return { width: (this.value * 100) + '%' } + }, + + stripeClass: function stripeClass () { + return this.reverse === true ? 'absolute-right' : 'absolute-left' + }, + + attrs: function attrs () { + return { + role: 'progressbar', + 'aria-valuemin': 0, + 'aria-valuemax': 1, + 'aria-valuenow': this.indeterminate === true ? void 0 : this.value + } + } + }, + + render: function render (h) { + var child = [ + h('div', { + staticClass: 'q-linear-progress__track absolute-full', + style: this.trackStyle, + class: this.trackClass + }), + + h('div', { + staticClass: 'q-linear-progress__model absolute-full', + style: this.modelStyle, + class: this.modelClasses + }) + ]; + + this.stripe === true && this.motion === false && child.push( + h('div', { + staticClass: 'q-linear-progress__stripe', + style: this.stripeStyle, + class: this.stripeClass + }) + ); + + return h('div', { + style: this.sizeStyle, + class: this.classes, + attrs: this.attrs, + on: Object.assign({}, this.qListeners) + }, mergeSlot(child, this, 'default')) + } + }); + + var + PULLER_HEIGHT = 40, + OFFSET_TOP = 20; + + var QPullToRefresh = Vue__default["default"].extend({ + name: 'QPullToRefresh', + + mixins: [ ListenersMixin ], + + directives: { + TouchPan: TouchPan + }, + + props: { + color: String, + bgColor: String, + icon: String, + noMouse: Boolean, + disable: Boolean, + + scrollTarget: { + default: void 0 + } + }, + + data: function data () { + return { + state: 'pull', + pullRatio: 0, + pulling: false, + pullPosition: -PULLER_HEIGHT, + animating: false, + positionCSS: {} + } + }, + + computed: { + style: function style () { + return { + opacity: this.pullRatio, + transform: ("translateY(" + (this.pullPosition) + "px) rotate(" + (this.pullRatio * 360) + "deg)") + } + }, + + classes: function classes () { + return 'q-pull-to-refresh__puller row flex-center' + + (this.animating === true ? ' q-pull-to-refresh__puller--animating' : '') + + (this.bgColor !== void 0 ? (" bg-" + (this.bgColor)) : '') + }, + + directives: function directives () { + if (this.disable !== true) { + var modifiers = { + down: true + }; + + if (this.noMouse !== true) { + modifiers.mouse = true; + } + + return [{ + name: 'touch-pan', + modifiers: modifiers, + value: this.__pull + }] + } + }, + + contentClass: function contentClass () { + return ("q-pull-to-refresh__content" + (this.pulling === true ? ' no-pointer-events' : '')) + } + }, + + watch: { + scrollTarget: function scrollTarget () { + this.updateScrollTarget(); + } + }, + + methods: { + trigger: function trigger () { + var this$1$1 = this; + + this.$emit('refresh', function () { + this$1$1.__animateTo({ pos: -PULLER_HEIGHT, ratio: 0 }, function () { + this$1$1.state = 'pull'; + }); + }); + }, + + updateScrollTarget: function updateScrollTarget () { + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget); + }, + + __pull: function __pull (event) { + if (event.isFinal === true) { + if (this.pulling === true) { + this.pulling = false; + + if (this.state === 'pulled') { + this.state = 'refreshing'; + this.__animateTo({ pos: OFFSET_TOP }); + this.trigger(); + } + else if (this.state === 'pull') { + this.__animateTo({ pos: -PULLER_HEIGHT, ratio: 0 }); + } + } + + return + } + + if (this.animating === true || this.state === 'refreshing') { + return false + } + + if (event.isFirst === true) { + if (getScrollPosition(this.__scrollTarget) !== 0 || event.direction !== 'down') { + if (this.pulling === true) { + this.pulling = false; + this.state = 'pull'; + this.__animateTo({ pos: -PULLER_HEIGHT, ratio: 0 }); + } + + return false + } + + this.pulling = true; + + var ref = this.$el.getBoundingClientRect(); + var top = ref.top; + var left = ref.left; + this.positionCSS = { + top: top + 'px', + left: left + 'px', + width: window.getComputedStyle(this.$el).getPropertyValue('width') + }; + } + + prevent(event.evt); + + var distance = Math.min(140, Math.max(0, event.distance.y)); + this.pullPosition = distance - PULLER_HEIGHT; + this.pullRatio = between(distance / (OFFSET_TOP + PULLER_HEIGHT), 0, 1); + + var state = this.pullPosition > OFFSET_TOP ? 'pulled' : 'pull'; + + if (this.state !== state) { + this.state = state; + } + }, + + __animateTo: function __animateTo (ref, done) { + var this$1$1 = this; + var pos = ref.pos; + var ratio = ref.ratio; + + this.animating = true; + this.pullPosition = pos; + + if (ratio !== void 0) { + this.pullRatio = ratio; + } + + clearTimeout(this.timer); + this.timer = setTimeout(function () { + this$1$1.animating = false; + done && done(); + }, 300); + } + }, + + mounted: function mounted () { + this.updateScrollTarget(); + }, + + beforeDestroy: function beforeDestroy () { + clearTimeout(this.timer); + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-pull-to-refresh', + on: Object.assign({}, this.qListeners), + directives: this.directives + }, [ + h('div', { + class: this.contentClass + }, slot(this, 'default')), + + h('div', { + staticClass: 'q-pull-to-refresh__puller-container fixed row flex-center no-pointer-events z-top', + style: this.positionCSS + }, [ + h('div', { + style: this.style, + class: this.classes + }, [ + this.state !== 'refreshing' + ? h(QIcon, { + props: { + name: this.icon || this.$q.iconSet.pullToRefresh.icon, + color: this.color, + size: '32px' + } + }) + : h(QSpinner, { + props: { + size: '24px', + color: this.color + } + }) + ]) + ]) + ]) + } + }); + + var dragType = { + MIN: 0, + RANGE: 1, + MAX: 2 + }; + + var QRange = Vue__default["default"].extend({ + name: 'QRange', + + mixins: [ SliderMixin ], + + props: { + value: { + type: Object, + default: function () { return ({ min: null, max: null }); }, + validator: function (v) { return 'min' in v && 'max' in v; } + }, + + dragRange: Boolean, + dragOnlyRange: Boolean, + + leftLabelColor: String, + leftLabelTextColor: String, + rightLabelColor: String, + rightLabelTextColor: String, + + leftLabelValue: [ String, Number ], + rightLabelValue: [ String, Number ], + + leftThumbColor: String, + rightThumbColor: String + }, + + data: function data () { + return { + model: { + min: this.value.min === null ? this.__getInnerMin() : between(this.value.min, this.min, this.max), + max: this.value.max === null ? this.__getInnerMax() : between(this.value.max, this.min, this.max) + }, + curMinRatio: 0, + curMaxRatio: 0 + } + }, + + computed: { + canDragRange: function canDragRange () { + return this.dragRange === true || this.dragOnlyRange === true + }, + + modelMinRatio: function modelMinRatio () { + return this.__convertModelToRatio(this.model.min) + }, + modelMaxRatio: function modelMaxRatio () { + return this.__convertModelToRatio(this.model.max) + }, + + ratioMin: function ratioMin () { + return this.active === true ? this.curMinRatio : this.modelMinRatio + }, + ratioMax: function ratioMax () { + return this.active === true ? this.curMaxRatio : this.modelMaxRatio + }, + + selectionBarStyle: function selectionBarStyle () { + var minRatio = Math.max(this.ratioMin, this.innerMinRatio); + var acc = {}; + acc[ this.positionProp ] = ((100 * minRatio) + "%"); + acc[ this.sizeProp ] = ((100 * (between(this.ratioMax, minRatio, this.innerMaxRatio) - minRatio)) + "%"); + if (this.selectionImg !== void 0) { + acc.backgroundImage = "url(" + (this.selectionImg) + ") !important"; + } + return acc + }, + + trackContainerAttrs: function trackContainerAttrs () { + return this.$q.platform.is.mobile !== true + ? { tabindex: this.canDragRange !== false ? this.computedTabindex : -1 } + : void 0 + }, + + trackContainerEvents: function trackContainerEvents () { + var this$1$1 = this; + + if (this.editable !== true) { + return {} + } + + if (this.$q.platform.is.mobile === true) { + return { click: this.__onMobileClick } + } + + return { + mousedown: this.__onActivate, + focus: function () { this$1$1.focus = 'both'; }, + blur: this.__onBlur, + keydown: this.__onKeydown, + keyup: this.__onKeyup + } + }, + + thumbAttrs: function thumbAttrs () { + return { + tabindex: this.dragOnlyRange !== true ? this.computedTabindex : null + } + }, + + thumbMinEvents: function thumbMinEvents () { + return this.__getEvents('min') + }, + thumbMaxEvents: function thumbMaxEvents () { + return this.__getEvents('max') + }, + + thumbMinLabel: function thumbMinLabel () { + return this.leftLabelValue !== void 0 + ? this.leftLabelValue + : (this.value.min < this.min || this.value.min > this.max ? this.value.min : this.model.min) + }, + thumbMaxLabel: function thumbMaxLabel () { + return this.rightLabelValue !== void 0 + ? this.rightLabelValue + : (this.value.max < this.min || this.value.max > this.max ? this.value.max : this.model.max) + }, + + thumbMinClasses: function thumbMinClasses () { + var color = this.leftThumbColor || this.thumbColor || this.color; + return "q-slider__thumb q-slider__thumb" + (this.axis) + " q-slider__thumb" + (this.axis) + "-" + (this.isReversed === true ? 'rtl' : 'ltr') + " absolute non-selectable" + + (this.value.min < this.min || this.value.min > this.max ? ' q-slider__thumb--wrong-value' : '') + + ( + this.preventFocus === false && (this.focus === 'min' || this.focus === 'both') + ? ' q-slider--focus' + : '' + ) + + (color !== void 0 ? (" text-" + color) : '') + }, + thumbMaxClasses: function thumbMaxClasses () { + var color = this.rightThumbColor || this.thumbColor || this.color; + return "q-slider__thumb q-slider__thumb" + (this.axis) + " q-slider__thumb" + (this.axis) + "-" + (this.isReversed === true ? 'rtl' : 'ltr') + " absolute non-selectable" + + (this.value.max < this.min || this.value.max > this.max ? ' q-slider__thumb--hidden' : '') + + ( + this.preventFocus === false && (this.focus === 'max' || this.focus === 'both') + ? ' q-slider--focus' + : '' + ) + + (color !== void 0 ? (" text-" + color) : '') + }, + + thumbMinStyle: function thumbMinStyle () { + var obj; + + return ( obj = { + width: this.thumbSize, + height: this.thumbSize + }, obj[ this.positionProp ] = ((100 * this.ratioMin) + "%"), obj.zIndex = this.focus === 'min' ? 2 : void 0, obj ) + }, + thumbMaxStyle: function thumbMaxStyle () { + var obj; + + return ( obj = { + width: this.thumbSize, + height: this.thumbSize + }, obj[ this.positionProp ] = ((100 * this.ratioMax) + "%"), obj.zIndex = this.focus === 'max' ? 2 : void 0, obj ) + }, + + thumbMinPinColor: function thumbMinPinColor () { + var color = this.leftLabelColor || this.labelColor; + return color !== void 0 + ? (" text-" + color) + : '' + }, + thumbMaxPinColor: function thumbMaxPinColor () { + var color = this.rightLabelColor || this.labelColor; + return color !== void 0 + ? (" text-" + color) + : '' + }, + + thumbMinTextContainerStyle: function thumbMinTextContainerStyle () { + return this.__getTextContainerStyle(this.ratioMin) + }, + thumbMaxTextContainerStyle: function thumbMaxTextContainerStyle () { + return this.__getTextContainerStyle(this.ratioMax) + }, + + thumbMinTextClass: function thumbMinTextClass () { + var color = this.leftLabelTextColor || this.labelTextColor; + return 'q-slider__text' + + (color !== void 0 ? (" text-" + color) : '') + }, + thumbMaxTextClass: function thumbMaxTextClass () { + var color = this.rightLabelTextColor || this.labelTextColor; + return 'q-slider__text' + + (color !== void 0 ? (" text-" + color) : '') + }, + + formAttrs: function formAttrs () { + return { + type: 'hidden', + name: this.name, + value: ((this.value.min) + "|" + (this.value.max)) + } + }, + + modelUpdate: function modelUpdate () { + return [ + this.value.min, + this.value.max, + this.min, + this.max, + this.innerMin, + this.innerMax + ].join('#') + } + }, + + watch: { + modelUpdate: function modelUpdate () { + this.model.min = this.value.min === null + ? this.computedInnerMin + : between(this.value.min, this.min, this.max); + + this.model.max = this.value.max === null + ? this.computedInnerMax + : between(this.value.max, this.min, this.max); + }, + + focus: function focus (focus$1) { + if (focus$1 === 'both' && this.canDragRange !== true) { + if (this.$q.platform.is.mobile !== true) { + var thumb = this.$refs[((this.nextFocus) + "Thumb")]; + thumb !== void 0 && thumb.focus(); + } + } + else if (focus$1 !== false && focus$1 !== this.nextFocus) { + this.nextFocus = focus$1; + } + } + }, + + methods: { + __updateValue: function __updateValue (change) { + if (this.model.min !== this.value.min || this.model.max !== this.value.max) { + this.$emit('input', Object.assign({}, this.model)); + } + change === true && this.$emit('change', Object.assign({}, this.model)); + }, + + __getDragging: function __getDragging (event) { + var ref = this.$el.getBoundingClientRect(); + var left = ref.left; + var top = ref.top; + var width = ref.width; + var height = ref.height; + var sensitivity = this.dragOnlyRange === true + ? 0 + : ( + this.vertical === true + ? this.$refs.minThumb.offsetHeight / (2 * height) + : this.$refs.minThumb.offsetWidth / (2 * width) + ) + (this.modelMaxRatio - this.modelMinRatio) / 20; + + var dragging = { + left: left, + top: top, + width: width, + height: height, + valueMin: this.model.min, + valueMax: this.model.max, + ratioMin: this.modelMinRatio, + ratioMax: this.modelMaxRatio + }; + + var ratio = this.__getDraggingRatio(event, dragging); + + if (this.dragOnlyRange !== true && ratio < dragging.ratioMin + sensitivity) { + dragging.type = dragType.MIN; + } + else if (this.dragOnlyRange === true || ratio < dragging.ratioMax - sensitivity) { + if (this.canDragRange === true) { + dragging.type = dragType.RANGE; + Object.assign(dragging, { + offsetRatio: ratio, + offsetModel: this.__convertRatioToModel(ratio), + rangeValue: dragging.valueMax - dragging.valueMin, + rangeRatio: dragging.ratioMax - dragging.ratioMin + }); + } + else { + dragging.type = dragging.ratioMax - ratio < ratio - dragging.ratioMin + ? dragType.MAX + : dragType.MIN; + } + } + else { + dragging.type = dragType.MAX; + } + + return dragging + }, + + __updatePosition: function __updatePosition (event, dragging) { + if ( dragging === void 0 ) dragging = this.dragging; + + var pos; + var ratio = this.__getDraggingRatio(event, dragging); + var localModel = this.__convertRatioToModel(ratio); + + switch (dragging.type) { + case dragType.MIN: + if (ratio <= dragging.ratioMax) { + pos = { + minR: ratio, + maxR: dragging.ratioMax, + min: localModel, + max: dragging.valueMax + }; + this.focus = 'min'; + } + else { + pos = { + minR: dragging.ratioMax, + maxR: ratio, + min: dragging.valueMax, + max: localModel + }; + this.focus = 'max'; + } + break + + case dragType.MAX: + if (ratio >= dragging.ratioMin) { + pos = { + minR: dragging.ratioMin, + maxR: ratio, + min: dragging.valueMin, + max: localModel + }; + this.focus = 'max'; + } + else { + pos = { + minR: ratio, + maxR: dragging.ratioMin, + min: localModel, + max: dragging.valueMin + }; + this.focus = 'min'; + } + break + + case dragType.RANGE: + var + ratioDelta = ratio - dragging.offsetRatio, + minR = between(dragging.ratioMin + ratioDelta, this.innerMinRatio, this.innerMaxRatio - dragging.rangeRatio), + modelDelta = localModel - dragging.offsetModel, + min = between(dragging.valueMin + modelDelta, this.computedInnerMin, this.computedInnerMax - dragging.rangeValue); + + pos = { + minR: minR, + maxR: minR + dragging.rangeRatio, + min: parseFloat(min.toFixed(this.computedDecimals)), + max: parseFloat((min + dragging.rangeValue).toFixed(this.computedDecimals)) + }; + + this.focus = 'both'; + break + } + + var changedEnd = (this.focus === 'min' && pos.max >= this.computedInnerMin && pos.max <= this.computedInnerMax) || + (this.focus === 'max' && pos.min >= this.computedInnerMin && pos.min <= this.computedInnerMax) + ? this.focus + : null; + + this.model = { + min: changedEnd !== 'max' + ? between(pos.min, this.computedInnerMin, this.computedInnerMax) + : pos.min, + max: changedEnd !== 'min' + ? between(pos.max, this.computedInnerMin, this.computedInnerMax) + : pos.max + }; + + // If either of the values to be emitted are null, set them to the defaults the user has entered. + if (this.model.min === null || this.model.max === null) { + this.model.min = pos.min || this.computedInnerMin; + this.model.max = pos.max || this.computedInnerMax; + } + + if (this.snap !== true || this.step === 0) { + this.curMinRatio = changedEnd !== 'max' + ? between(pos.minR, this.innerMinRatio, this.innerMaxRatio) + : pos.minR; + this.curMaxRatio = changedEnd !== 'min' + ? between(pos.maxR, this.innerMinRatio, this.innerMaxRatio) + : pos.maxR; + } + else { + this.curMinRatio = this.__convertModelToRatio(this.model.min); + this.curMaxRatio = this.__convertModelToRatio(this.model.max); + } + }, + + __getEvents: function __getEvents (side) { + var this$1$1 = this; + + return this.$q.platform.is.mobile !== true && this.editable === true && this.dragOnlyRange !== true + ? { + focus: function () { this$1$1.focus = side; }, + blur: this.__onBlur, + keydown: this.__onKeydown, + keyup: this.__onKeyup + } + : {} + }, + + __onKeydown: function __onKeydown (evt) { + var obj; + + if (!keyCodes$3.includes(evt.keyCode)) { + return + } + + var wrongFocus = this.focus === 'both' && this.canDragRange !== true; + if (this.focus === false || wrongFocus === true) { + this.focus = this.nextFocus; + } + + stopAndPrevent(evt); + + if (this.dragOnlyRange === true || (this.dragRange === true && this.focus === 'both')) { + var interval = this.model.max - this.model.min; + var min = between( + parseFloat((this.model.min + this.getKeyOffset(evt.keyCode)).toFixed(this.computedDecimals)), + this.computedInnerMin, + this.computedInnerMax - interval + ); + + this.model = { + min: min, + max: parseFloat((min + interval).toFixed(this.computedDecimals)) + }; + } + else if (this.focus !== 'min' && this.focus !== 'max') { + return + } + else { + var which = this.focus; + + this.model = Object.assign({}, this.model, + ( obj = {}, obj[ which ] = between( + parseFloat((this.model[ which ] + this.getKeyOffset(evt.keyCode)).toFixed(this.computedDecimals)), + which === 'min' ? this.computedInnerMin : this.model.min, + which === 'max' ? this.computedInnerMax : this.model.max + ), obj )); + } + + this.__updateValue(); + } + }, + + created: function created () { + this.nextFocus = 'min'; + }, + + render: function render (h) { + var this$1$1 = this; + + var content = this.__getContent(h, function (node) { + var minThumb = this$1$1.__getThumb(h, { + pinColor: this$1$1.thumbMinPinColor, + textContainerStyle: this$1$1.thumbMinTextContainerStyle, + textClass: this$1$1.thumbMinTextClass, + label: this$1$1.thumbMinLabel, + classes: this$1$1.thumbMinClasses, + style: this$1$1.thumbMinStyle, + nodeData: { + ref: 'minThumb', + key: 'tmin', + on: this$1$1.thumbMinEvents, + attrs: this$1$1.thumbAttrs + } + }); + + var maxThumb = this$1$1.__getThumb(h, { + pinColor: this$1$1.thumbMaxPinColor, + textContainerStyle: this$1$1.thumbMaxTextContainerStyle, + textClass: this$1$1.thumbMaxTextClass, + label: this$1$1.thumbMaxLabel, + classes: this$1$1.thumbMaxClasses, + style: this$1$1.thumbMaxStyle, + nodeData: { + ref: 'maxThumb', + key: 'tmax', + on: this$1$1.thumbMaxEvents, + attrs: this$1$1.thumbAttrs + } + }); + + if (this$1$1.reverse === true) { + node.push(maxThumb, minThumb); + } + else { + node.push(minThumb, maxThumb); + } + }); + + return h('div', { + class: 'q-range ' + this.classes + ( + this.value.min === null || this.value.max === null + ? ' q-slider--no-value' + : '' + ), + attrs: Object.assign({}, this.attributes, + {'aria-valuenow': this.value.min + '|' + this.value.max}) + }, content) + } + }); + + var QRating = Vue__default["default"].extend({ + name: 'QRating', + + mixins: [ SizeMixin, FormMixin, ListenersMixin ], + + directives: { + KeyGroupNavigation: KeyGroupNavigation + }, + + props: { + value: { + type: Number, + required: true + }, + + max: { + type: [String, Number], + default: 5 + }, + + icon: [String, Array], + iconHalf: [String, Array], + iconSelected: [String, Array], + + iconAriaLabel: [String, Array], + + color: [String, Array], + colorHalf: [String, Array], + colorSelected: [String, Array], + + vertical: Boolean, + + noReset: Boolean, + noDimming: Boolean, + + readonly: Boolean, + disable: Boolean + }, + + data: function data () { + return { + mouseModel: 0 + } + }, + + computed: { + editable: function editable () { + return this.readonly !== true && this.disable !== true + }, + + classes: function classes () { + return "q-rating--" + (this.editable === true ? '' : 'non-') + "editable" + + (this.vertical === true ? ' column justify-center' : ' row items-center') + + (this.noDimming === true ? ' q-rating--no-dimming' : '') + + (this.disable === true ? ' disabled' : '') + + (this.color !== void 0 && Array.isArray(this.color) === false ? (" text-" + (this.color)) : '') + }, + + iconData: function iconData () { + var + iconLen = Array.isArray(this.icon) === true ? this.icon.length : 0, + selIconLen = Array.isArray(this.iconSelected) === true ? this.iconSelected.length : 0, + halfIconLen = Array.isArray(this.iconHalf) === true ? this.iconHalf.length : 0, + colorLen = Array.isArray(this.color) === true ? this.color.length : 0, + selColorLen = Array.isArray(this.colorSelected) === true ? this.colorSelected.length : 0, + halfColorLen = Array.isArray(this.colorHalf) === true ? this.colorHalf.length : 0; + + return { + iconLen: iconLen, + icon: iconLen > 0 ? this.icon[iconLen - 1] : this.icon, + selIconLen: selIconLen, + selIcon: selIconLen > 0 ? this.iconSelected[selIconLen - 1] : this.iconSelected, + halfIconLen: halfIconLen, + halfIcon: halfIconLen > 0 ? this.iconHalf[selIconLen - 1] : this.iconHalf, + colorLen: colorLen, + color: colorLen > 0 ? this.color[colorLen - 1] : this.color, + selColorLen: selColorLen, + selColor: selColorLen > 0 ? this.colorSelected[selColorLen - 1] : this.colorSelected, + halfColorLen: halfColorLen, + halfColor: halfColorLen > 0 ? this.colorHalf[halfColorLen - 1] : this.colorHalf + } + }, + + iconLabel: function iconLabel () { + var this$1$1 = this; + + if (typeof this.iconAriaLabel === 'string') { + var label = this.iconAriaLabel.length > 0 ? ((this.iconAriaLabel) + " ") : ''; + + return function (i) { return ("" + label + i); } + } + + if (Array.isArray(this.iconAriaLabel) === true) { + var iMax = this.iconAriaLabel.length; + + if (iMax > 0) { + return function (i) { return this$1$1.iconAriaLabel[Math.min(i, iMax) - 1]; } + } + } + + return function (i, label) { return (label + " " + i); } + }, + + stars: function stars () { + var + acc = [], + icons = this.iconData, + ceil = Math.ceil(this.value), + tabindex = this.editable === true ? 0 : null; + + var halfIndex = this.iconHalf === void 0 || ceil === this.value + ? -1 + : ceil; + + for (var i = 1; i <= this.max; i++) { + var + active = this.mouseModel >= i || (this.mouseModel === 0 && this.value >= i), + half = halfIndex === i && this.mouseModel < i, + exSelected = this.mouseModel > 0 && (half === true ? ceil : this.value) >= i && this.mouseModel < i, + color = half === true + ? (i <= icons.halfColorLen ? this.colorHalf[i - 1] : icons.halfColor) + : ( + icons.selColor !== void 0 && active === true + ? (i <= icons.selColorLen ? this.colorSelected[i - 1] : icons.selColor) + : (i <= icons.colorLen ? this.color[i - 1] : icons.color) + ), + name = ( + half === true + ? (i <= icons.halfIconLen ? this.iconHalf[i - 1] : icons.halfIcon) + : ( + icons.selIcon !== void 0 && (active === true || exSelected === true) + ? (i <= icons.selIconLen ? this.iconSelected[i - 1] : icons.selIcon) + : (i <= icons.iconLen ? this.icon[i - 1] : icons.icon) + ) + ) || this.$q.iconSet.rating.icon; + + acc.push({ + name: name, + + attrs: { + tabindex: tabindex, + role: 'radio', + 'aria-checked': this.value === i ? 'true' : 'false', + 'aria-label': this.iconLabel(i, name) + }, + + classes: 'q-rating__icon' + + (active === true || half === true ? ' q-rating__icon--active' : '') + + (exSelected === true ? ' q-rating__icon--exselected' : '') + + (this.mouseModel === i ? ' q-rating__icon--hovered' : '') + + (ceil === i ? ' q-key-group-navigation__refocus' : '') + + (color !== void 0 ? (" text-" + color) : '') + }); + } + + return acc + }, + + attrs: function attrs () { + var attrs = { + role: 'radiogroup' + }; + if (this.disable === true) { + attrs[ 'aria-disabled' ] = 'true'; + } + if (this.readonly === true) { + attrs[ 'aria-readonly' ] = 'true'; + } + return attrs + }, + + directives: function directives () { + var obj; + + return [{ + name: 'key-group-navigation', + modifiers: ( obj = {}, obj[this.vertical === true ? 'vertical' : 'horizontal'] = true, obj ) + }] + } + }, + + methods: { + __set: function __set (value) { + if (this.editable === true) { + var + model = between(parseInt(value, 10), 1, parseInt(this.max, 10)), + newVal = this.noReset !== true && this.value === model ? 0 : model; + + newVal !== this.value && this.$emit('input', newVal); + this.mouseModel = 0; + } + }, + + __setHoverValue: function __setHoverValue (value) { + if (this.editable === true) { + this.mouseModel = value; + } + }, + + __keyup: function __keyup (e, i) { + if ([13, 32].indexOf(e.keyCode) > -1) { + this.__set(i); + stopAndPrevent(e); + } + } + }, + + render: function render (h) { + var this$1$1 = this; + + var child = []; + + this.stars.forEach(function (ref, index) { + var classes = ref.classes; + var name = ref.name; + var attrs = ref.attrs; + + var i = index + 1; + + child.push( + h('div', { + key: 'i#' + i, + ref: ("rt" + i), + staticClass: 'q-rating__icon-container flex flex-center', + attrs: attrs, + on: cache(this$1$1, 'i#' + i, { + click: function () { this$1$1.__set(i); }, + mouseover: function () { this$1$1.__setHoverValue(i); }, + mouseout: function () { this$1$1.mouseModel = 0; }, + focus: function () { this$1$1.__setHoverValue(i); }, + blur: function () { this$1$1.mouseModel = 0; }, + keyup: function (e) { this$1$1.__keyup(e, i); } + }) + }, mergeSlot( + [h(QIcon, { class: classes, props: { name: name } })], + this$1$1, ("tip-" + i) + )) + ); + }); + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(child, 'push'); + } + + return h('div', { + staticClass: 'q-rating inline', + class: this.classes, + style: this.sizeStyle, + attrs: this.attrs, + directives: this.directives, + on: Object.assign({}, this.qListeners) + }, child) + } + }); + + var QResponsive = Vue__default["default"].extend({ + name: 'QResponsive', + + mixins: [ RatioMixin, ListenersMixin ], + + render: function render (h) { + return h('div', { + staticClass: 'q-responsive', + on: Object.assign({}, this.qListeners) + }, [ + h('div', { + staticClass: 'q-responsive__filler overflow-hidden' + }, [ + h('div', { style: this.ratioStyle }) + ]), + + h('div', { + staticClass: 'q-responsive__content absolute-full fit' + }, slot(this, 'default')) + ]) + } + }); + + var getMinThumbSize = function (size) { return (size >= 250 ? 50 : Math.ceil(size / 5)); }; + + var axisList = [ 'vertical', 'horizontal' ]; + var dirProps = { + vertical: { offset: 'offsetY', scroll: 'scrollTop', dir: 'down', dist: 'y' }, + horizontal: { offset: 'offsetX', scroll: 'scrollLeft', dir: 'right', dist: 'x' } + }; + + var QScrollArea = Vue__default["default"].extend({ + name: 'QScrollArea', + + mixins: [ DarkMixin ], + + directives: { + TouchPan: TouchPan + }, + + props: { + thumbStyle: Object, + verticalThumbStyle: Object, + horizontalThumbStyle: Object, + + barStyle: [ Array, String, Object ], + verticalBarStyle: [ Array, String, Object ], + horizontalBarStyle: [ Array, String, Object ], + + contentStyle: [ Array, String, Object ], + contentActiveStyle: [ Array, String, Object ], + + delay: { + type: [ String, Number ], + default: 1000 + }, + + visible: { + type: Boolean, + default: null + }, + + horizontal: Boolean, + + tabindex: [ String, Number ] + }, + + data: function data () { + return { + // state management + tempShowing: false, + panning: false, + hover: false, + + // other... + container: { + vertical: 0, + horizontal: 0 + }, + + scroll: { + vertical: { + position: 0, + size: 0 + }, + + horizontal: { + position: 0, + size: 0 + } + } + } + }, + + computed: { + classes: function classes () { + return 'q-scrollarea' + + " q-scrollarea--" + (this.darkSuffix) + }, + + verticalScrollPercentage: function verticalScrollPercentage () { + var diff = this.scroll.vertical.size - this.container.vertical; + if (diff <= 0) { return 0 } + var p = between(this.scroll.vertical.position / diff, 0, 1); + return Math.round(p * 10000) / 10000 + }, + + horizontalScrollPercentage: function horizontalScrollPercentage () { + var diff = this.scroll.horizontal.size - this.container.horizontal; + if (diff <= 0) { return 0 } + var p = between(this.scroll.horizontal.position / diff, 0, 1); + return Math.round(p * 10000) / 10000 + }, + + verticalThumbHidden: function verticalThumbHidden () { + return ( + (this.visible === null ? this.hover : this.visible) !== true && + this.tempShowing === false && + this.panning === false + ) || this.scroll.vertical.size <= this.container.vertical + 1 + }, + + horizontalThumbHidden: function horizontalThumbHidden () { + return ( + (this.visible === null ? this.hover : this.visible) !== true && + this.tempShowing === false && + this.panning === false + ) || this.scroll.horizontal.size <= this.container.horizontal + 1 + }, + + verticalThumbStart: function verticalThumbStart () { + return this.verticalScrollPercentage * (this.container.vertical - this.verticalThumbSize) + }, + + horizontalThumbStart: function horizontalThumbStart () { + return this.horizontalScrollPercentage * (this.container.horizontal - this.horizontalThumbSize) + }, + + verticalThumbSize: function verticalThumbSize () { + return Math.round( + between( + this.container.vertical * this.container.vertical / this.scroll.vertical.size, + getMinThumbSize(this.container.vertical), + this.container.vertical + ) + ) + }, + + horizontalThumbSize: function horizontalThumbSize () { + return Math.round( + between( + this.container.horizontal * this.container.horizontal / this.scroll.horizontal.size, + getMinThumbSize(this.container.horizontal), + this.container.horizontal + ) + ) + }, + + verticalStyle: function verticalStyle () { + return Object.assign({}, this.thumbStyle, + this.verticalThumbStyle, + {top: ((this.verticalThumbStart) + "px"), + height: ((this.verticalThumbSize) + "px")}) + }, + + horizontalStyle: function horizontalStyle () { + return Object.assign({}, this.thumbStyle, + this.horizontalThumbStyle, + {left: ((this.horizontalThumbStart) + "px"), + width: ((this.horizontalThumbSize) + "px")}) + }, + + verticalThumbClass: function verticalThumbClass () { + return 'q-scrollarea__thumb q-scrollarea__thumb--v absolute-right' + + (this.verticalThumbHidden === true ? ' q-scrollarea__thumb--invisible' : '') + }, + + horizontalThumbClass: function horizontalThumbClass () { + return 'q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom' + + (this.horizontalThumbHidden === true ? ' q-scrollarea__thumb--invisible' : '') + }, + + verticalBarClass: function verticalBarClass () { + return 'q-scrollarea__bar q-scrollarea__bar--v absolute-right' + + (this.verticalThumbHidden === true ? ' q-scrollarea__bar--invisible' : '') + }, + + horizontalBarClass: function horizontalBarClass () { + return 'q-scrollarea__bar q-scrollarea__bar--h absolute-bottom' + + (this.horizontalThumbHidden === true ? ' q-scrollarea__bar--invisible' : '') + }, + + scrollComputed: function scrollComputed () { + return { + vertical: Object.assign({}, this.scroll.vertical, + {percentage: this.verticalScrollPercentage, + thumbHidden: this.verticalThumbHidden, + thumbStart: this.verticalThumbStart, + thumbSize: this.verticalThumbSize, + style: this.verticalStyle, + thumbClass: this.verticalThumbClass, + barClass: this.verticalBarClass}), + horizontal: Object.assign({}, this.scroll.horizontal, + {percentage: this.horizontalScrollPercentage, + thumbHidden: this.horizontalThumbHidden, + thumbStart: this.horizontalThumbStart, + thumbSize: this.horizontalThumbSize, + style: this.horizontalStyle, + thumbClass: this.horizontalThumbClass, + barClass: this.horizontalBarClass}) + } + }, + + mainStyle: function mainStyle () { + return this.verticalThumbHidden === true && this.horizontalThumbHidden === true + ? this.contentStyle + : this.contentActiveStyle + }, + + verticalThumbDirectives: function verticalThumbDirectives () { + var this$1$1 = this; + + return [{ + name: 'touch-pan', + modifiers: { + vertical: true, + prevent: true, + mouse: true, + mouseAllDir: true + }, + value: function (e) { this$1$1.__panThumb(e, 'vertical'); } + }] + }, + + horizontalThumbDirectives: function horizontalThumbDirectives () { + var this$1$1 = this; + + return [{ + name: 'touch-pan', + modifiers: { + horizontal: true, + prevent: true, + mouse: true, + mouseAllDir: true + }, + value: function (e) { this$1$1.__panThumb(e, 'horizontal'); } + }] + }, + + scrollAttrs: function scrollAttrs () { + if (this.tabindex !== void 0) { + return { tabindex: this.tabindex } + } + } + }, + + methods: { + getScrollTarget: function getScrollTarget () { + return this.$refs.target + }, + + getScroll: function getScroll () { + var this$1$1 = this; + + var info = {}; + + axisList.forEach(function (axis) { + var data = this$1$1.scrollComputed[ axis ]; + + info[ axis + 'Position' ] = data.position; + info[ axis + 'Percentage' ] = data.percentage; + info[ axis + 'Size' ] = data.size; + info[ axis + 'ContainerSize' ] = this$1$1.container[ axis ]; + }); + + return info + }, + + getScrollPosition: function getScrollPosition (axis) { + if (axis === 'both') { + return { + top: this.scroll.vertical.position, + left: this.scroll.horizontal.position + } + } + + if (axisList.includes(axis) !== true) { + axis = this.horizontal === true ? 'horizontal' : 'vertical'; + } + + return this.scroll[axis].position + }, + + getScrollPercentage: function getScrollPercentage (axis) { + if (axis === 'both') { + return { + top: this.verticalScrollPercentage, + left: this.horizontalScrollPercentage + } + } + + if (axisList.includes(axis) !== true) { + axis = this.horizontal === true ? 'horizontal' : 'vertical'; + } + + return this[(axis + "ScrollPercentage")] + }, + + setScrollPosition: function setScrollPosition (axis, offset, duration) { + var assign; + + if (axisList.includes(axis) === false) { + if (isNaN(axis) === true) { + console.error('[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)'); + return + } + + (assign = [this.horizontal === true ? 'horizontal' : 'vertical', axis, offset], axis = assign[0], offset = assign[1], duration = assign[2]); + } + + var fn = axis === 'vertical' + ? setVerticalScrollPosition + : setHorizontalScrollPosition; + + fn(this.$refs.target, offset, duration); + }, + + setScrollPercentage: function setScrollPercentage (axis, percentage, duration) { + var assign; + + if (axisList.includes(axis) === false) { + if (isNaN(axis) === true) { + console.error('[QScrollArea]: wrong first param of setScrollPercentage (vertical/horizontal)'); + return + } + + (assign = [this.horizontal === true ? 'horizontal' : 'vertical', axis, percentage], axis = assign[0], percentage = assign[1], duration = assign[2]); + } + + this.setScrollPosition( + axis, + percentage * (this.scroll[axis].size - this.container[axis]), + duration + ); + }, + + __updateContainer: function __updateContainer (ref) { + var height = ref.height; + var width = ref.width; + + var change = false; + + if (this.container.vertical !== height) { + this.container.vertical = height; + change = true; + } + + if (this.container.horizontal !== width) { + this.container.horizontal = width; + change = true; + } + + change === true && this.__startTimer(); + }, + + __updateScroll: function __updateScroll (ref) { + var position = ref.position; + + var change = false; + + if (this.scroll.vertical.position !== position.top) { + this.scroll.vertical.position = position.top; + change = true; + } + + if (this.scroll.horizontal.position !== position.left) { + this.scroll.horizontal.position = position.left; + change = true; + } + + change === true && this.__startTimer(); + }, + + __updateScrollSize: function __updateScrollSize (ref) { + var height = ref.height; + var width = ref.width; + + var change = false; + + if (this.scroll.horizontal.size !== width) { + this.scroll.horizontal.size = width; + change = true; + } + + if (this.scroll.vertical.size !== height) { + this.scroll.vertical.size = height; + change = true; + } + + change === true && this.__startTimer(); + }, + + __panThumb: function __panThumb (e, axis) { + var data = this.scrollComputed[ axis ]; + + if (e.isFinal === true) { + if (this.panning !== true) { + return + } + + this.panning = false; + } + else if (e.isFirst === true) { + if (data.thumbHidden === true) { + return + } + + this.refPos = data.position; + this.panning = true; + } + else if (this.panning !== true) { + return + } + + var dProp = dirProps[ axis ]; + var containerSize = this.container[axis]; + + var multiplier = (data.size - containerSize) / (containerSize - data.thumbSize); + var distance = e.distance[dProp.dist]; + var pos = this.refPos + (e.direction === dProp.dir ? 1 : -1) * distance * multiplier; + + this.__setScroll(pos, axis); + }, + + __mouseDown: function __mouseDown (evt, axis) { + var data = this.scrollComputed[ axis ]; + + if (data.thumbHidden !== true) { + var offset = evt[ dirProps[ axis ].offset ]; + if (offset < data.thumbStart || offset > data.thumbStart + data.thumbSize) { + var pos = offset - data.thumbSize / 2; + this.__setScroll(pos / this.container[ axis ] * data.size, axis); + } + + var ref = axis === 'vertical' ? this.$refs.verticalThumb : this.$refs.horizontalThumb; + // activate thumb pan + if (ref !== void 0) { + ref.dispatchEvent(new MouseEvent(evt.type, evt)); + } + } + }, + + __verticalMouseDown: function __verticalMouseDown (evt) { + this.__mouseDown(evt, 'vertical'); + }, + + __horizontalMouseDown: function __horizontalMouseDown (evt) { + this.__mouseDown(evt, 'horizontal'); + }, + + __startTimer: function __startTimer () { + var this$1$1 = this; + + if (this.tempShowing === true) { + clearTimeout(this.timer); + } + else { + this.tempShowing = true; + } + + this.timer = setTimeout(function () { this$1$1.tempShowing = false; }, this.delay); + this.$listeners.scroll !== void 0 && this.__emitScroll(); + }, + + __setScroll: function __setScroll (offset, axis) { + this.$refs.target[ dirProps[ axis ].scroll ] = offset; + }, + + __mouseEnter: function __mouseEnter () { + this.hover = true; + }, + + __mouseLeave: function __mouseLeave () { + this.hover = false; + } + }, + + render: function render (h) { + return h('div', { + key: 'desk', + class: this.classes, + on: cache(this, 'desk', { + mouseenter: this.__mouseEnter, + mouseleave: this.__mouseLeave + }) + }, [ + h('div', { + ref: 'target', + staticClass: 'q-scrollarea__container scroll relative-position fit hide-scrollbar', + attrs: this.scrollAttrs + }, [ + h('div', { + staticClass: 'q-scrollarea__content absolute', + style: this.mainStyle + }, mergeSlot([ + h(QResizeObserver, { + key: 'resizeIn', + props: { debounce: 0 }, + on: cache(this, 'resizeIn', { resize: this.__updateScrollSize }) + }) + ], this, 'default')), + + h(QScrollObserver, { + key: 'scroll', + props: { axis: 'both' }, + on: cache(this, 'scroll', { scroll: this.__updateScroll }) + }) + ]), + + h(QResizeObserver, { + key: 'resizeOut', + props: { debounce: 0 }, + on: cache(this, 'resizeOut', { resize: this.__updateContainer }) + }), + + h('div', { + key: 'barV', + class: this.verticalBarClass, + style: [ this.barStyle, this.verticalBarStyle ], + attrs: ariaHidden, + on: cache(this, 'barV', { + mousedown: this.__verticalMouseDown + }) + }), + + h('div', { + key: 'barH', + class: this.horizontalBarClass, + style: [ this.barStyle, this.horizontalBarStyle ], + attrs: ariaHidden, + on: cache(this, 'barH', { + mousedown: this.__horizontalMouseDown + }) + }), + + h('div', { + ref: 'verticalThumb', + class: this.verticalThumbClass, + style: this.verticalStyle, + attrs: ariaHidden, + directives: this.verticalThumbDirectives + }), + + h('div', { + ref: 'horizontalThumb', + class: this.horizontalThumbClass, + style: this.horizontalStyle, + attrs: ariaHidden, + directives: this.horizontalThumbDirectives + }) + ]) + }, + + created: function created () { + var this$1$1 = this; + + // we have lots of listeners, so + // ensure we're not emitting same info + // multiple times + this.__emitScroll = debounce(function () { + var info = this$1$1.getScroll(); + info.ref = this$1$1; + this$1$1.$emit('scroll', info); + }, 0); + }, + + activated: function activated () { + if (this.__scrollPosition === void 0) { return } + + var scrollTarget = this.getScrollTarget(); + + if (scrollTarget !== void 0) { + setHorizontalScrollPosition(scrollTarget, this.__scrollPosition.left); + setVerticalScrollPosition(scrollTarget, this.__scrollPosition.top); + } + }, + + deactivated: function deactivated () { + this.__scrollPosition = this.getScrollPosition('both'); + }, + + beforeDestroy: function beforeDestroy () { + this.__emitScroll.cancel(); + clearTimeout(this.timer); + } + }); + + function scrollDebounce (fn) { + var timeoutWait; + var throttleCounter = 0; + + var fnDebounced = function () { + timeoutWait = void 0; + throttleCounter = 0; + fn(); + }; + + function debounced () { + throttleCounter++; + clearTimeout(timeoutWait); + timeoutWait = setTimeout(fnDebounced, 200); + + if (throttleCounter > 50) { + throttleCounter = 0; + fn(true); + } + } + + debounced.cancel = function () { + clearTimeout(timeoutWait); + timeoutWait = void 0; + throttleCounter = 0; + }; + + return debounced + } + + var aggBucketSize = 1000; + + var scrollToEdges = [ + 'start', + 'center', + 'end', + 'start-force', + 'center-force', + 'end-force' + ]; + + var filterProto = Array.prototype.filter; + + function sumFn (acc, h) { + return acc + h + } + + function getScrollDetails ( + parent, + child, + beforeRef, + afterRef, + horizontal, + rtl, + stickyStart, + stickyEnd + ) { + var + parentCalc = parent === window ? document.scrollingElement || document.documentElement : parent, + propElSize = horizontal === true ? 'offsetWidth' : 'offsetHeight', + details = { + scrollStart: 0, + scrollViewSize: -stickyStart - stickyEnd, + scrollMaxSize: 0, + offsetStart: -stickyStart, + offsetEnd: -stickyEnd + }; + + if (horizontal === true) { + if (parent === window) { + details.scrollStart = window.pageXOffset || window.scrollX || document.body.scrollLeft || 0; + details.scrollViewSize += document.documentElement.clientWidth; + } + else { + details.scrollStart = parentCalc.scrollLeft; + details.scrollViewSize += parentCalc.clientWidth; + } + details.scrollMaxSize = parentCalc.scrollWidth; + + if (rtl === true) { + details.scrollStart = (rtlHasScrollBug() === true ? details.scrollMaxSize - details.scrollViewSize : 0) - details.scrollStart; + } + } + else { + if (parent === window) { + details.scrollStart = window.pageYOffset || window.scrollY || document.body.scrollTop || 0; + details.scrollViewSize += document.documentElement.clientHeight; + } + else { + details.scrollStart = parentCalc.scrollTop; + details.scrollViewSize += parentCalc.clientHeight; + } + details.scrollMaxSize = parentCalc.scrollHeight; + } + + if (beforeRef !== void 0) { + for (var el = beforeRef.previousElementSibling; el !== null; el = el.previousElementSibling) { + if (el.classList.contains('q-virtual-scroll--skip') === false) { + details.offsetStart += el[propElSize]; + } + } + } + if (afterRef !== void 0) { + for (var el$1 = afterRef.nextElementSibling; el$1 !== null; el$1 = el$1.nextElementSibling) { + if (el$1.classList.contains('q-virtual-scroll--skip') === false) { + details.offsetEnd += el$1[propElSize]; + } + } + } + + if (child !== parent) { + var + parentRect = parentCalc.getBoundingClientRect(), + childRect = child.getBoundingClientRect(); + + if (horizontal === true) { + details.offsetStart += childRect.left - parentRect.left; + details.offsetEnd -= childRect.width; + } + else { + details.offsetStart += childRect.top - parentRect.top; + details.offsetEnd -= childRect.height; + } + + if (parent !== window) { + details.offsetStart += details.scrollStart; + } + details.offsetEnd += details.scrollMaxSize - details.offsetStart; + } + + return details + } + + function setScroll (parent, scroll, horizontal, rtl) { + if (scroll === 'end') { + scroll = (parent === window ? document.body : parent)[horizontal === true ? 'scrollWidth' : 'scrollHeight']; + } + + if (parent === window) { + if (horizontal === true) { + if (rtl === true) { + scroll = (rtlHasScrollBug() === true ? document.body.scrollWidth - document.documentElement.clientWidth : 0) - scroll; + } + window.scrollTo(scroll, window.pageYOffset || window.scrollY || document.body.scrollTop || 0); + } + else { + window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, scroll); + } + } + else if (horizontal === true) { + if (rtl === true) { + scroll = (rtlHasScrollBug() === true ? parent.scrollWidth - parent.offsetWidth : 0) - scroll; + } + parent.scrollLeft = scroll; + } + else { + parent.scrollTop = scroll; + } + } + + function sumSize (sizeAgg, size, from, to) { + if (from >= to) { return 0 } + + var + lastTo = size.length, + fromAgg = Math.floor(from / aggBucketSize), + toAgg = Math.floor((to - 1) / aggBucketSize) + 1; + + var total = sizeAgg.slice(fromAgg, toAgg).reduce(sumFn, 0); + + if (from % aggBucketSize !== 0) { + total -= size.slice(fromAgg * aggBucketSize, from).reduce(sumFn, 0); + } + if (to % aggBucketSize !== 0 && to !== lastTo) { + total -= size.slice(to, toAgg * aggBucketSize).reduce(sumFn, 0); + } + + return total + } + + var commonVirtScrollProps = { + virtualScrollSliceSize: { + type: [ Number, String ], + default: null + }, + + virtualScrollSliceRatioBefore: { + type: [ Number, String ], + default: 1 + }, + + virtualScrollSliceRatioAfter: { + type: [ Number, String ], + default: 1 + }, + + virtualScrollItemSize: { + type: [ Number, String ], + default: 24 + }, + + virtualScrollStickySizeStart: { + type: [ Number, String ], + default: 0 + }, + + virtualScrollStickySizeEnd: { + type: [ Number, String ], + default: 0 + }, + + tableColspan: [ Number, String ] + }; + + function setOverflowAnchor (contentEl, index) { + if (setOverflowAnchor.isSupported === void 0) { + setOverflowAnchor.isSupported = window.getComputedStyle(document.body).overflowAnchor !== void 0; + } + + if (setOverflowAnchor.isSupported === false || contentEl === void 0) { + return + } + + cancelAnimationFrame(contentEl._qOverflowAnimationFrame); + contentEl._qOverflowAnimationFrame = requestAnimationFrame(function () { + if (contentEl === void 0) { + return + } + + var children = contentEl.children || []; + + filterProto + .call(children, function (el) { return el.dataset && el.dataset.qVsAnchor !== void 0; }) + .forEach(function (el) { + delete el.dataset.qVsAnchor; + }); + + var el = children[index]; + + if (el && el.dataset) { + el.dataset.qVsAnchor = ''; + } + }); + } + + var commonVirtPropsList = Object.keys(commonVirtScrollProps); + + var VirtualScroll = { + props: Object.assign({}, {virtualScrollHorizontal: Boolean}, + commonVirtScrollProps), + + data: function data () { + return { + virtualScrollSliceRange: { from: 0, to: 0 } + } + }, + + watch: { + needsSliceRecalc: function needsSliceRecalc () { + this.__setVirtualScrollSize(); + }, + + needsReset: function needsReset () { + this.reset(); + } + }, + + computed: { + needsReset: function needsReset () { + var this$1$1 = this; + + return ['virtualScrollItemSizeComputed', 'virtualScrollHorizontal'] + .map(function (p) { return this$1$1[p]; }).join(';') + }, + + needsSliceRecalc: function needsSliceRecalc () { + var this$1$1 = this; + + return this.needsReset + ';' + ['virtualScrollSliceRatioBefore', 'virtualScrollSliceRatioAfter'] + .map(function (p) { return this$1$1[p]; }).join(';') + }, + + colspanAttr: function colspanAttr () { + return this.tableColspan !== void 0 + ? { colspan: this.tableColspan } + : { colspan: 100 } + }, + + virtualScrollItemSizeComputed: function virtualScrollItemSizeComputed () { + return this.virtualScrollItemSize + } + }, + + methods: { + reset: function reset () { + this.__resetVirtualScroll(this.prevToIndex, true); + }, + + refresh: function refresh (toIndex) { + this.__resetVirtualScroll(toIndex === void 0 ? this.prevToIndex : toIndex); + }, + + scrollTo: function scrollTo (toIndex, edge) { + var scrollEl = this.__getVirtualScrollTarget(); + + if (scrollEl === void 0 || scrollEl === null || scrollEl.nodeType === 8) { + return + } + + var scrollDetails = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ); + + this.__scrollViewSize !== scrollDetails.scrollViewSize && this.__setVirtualScrollSize(scrollDetails.scrollViewSize); + + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + Math.min(this.virtualScrollLength - 1, Math.max(0, parseInt(toIndex, 10) || 0)), + 0, + scrollToEdges.indexOf(edge) > -1 ? edge : (this.prevToIndex > -1 && toIndex > this.prevToIndex ? 'end' : 'start') + ); + }, + + __onVirtualScrollEvt: function __onVirtualScrollEvt (throttled) { + var scrollEl = this.__getVirtualScrollTarget(); + + if (scrollEl === void 0 || scrollEl === null || scrollEl.nodeType === 8) { + return + } + + if (this.$q.interaction.isKeyboard === true && this.$q.interaction.event !== null && typeof this.$q.interaction.event.key === 'string') { + var key = this.$q.interaction.event.key.toLowerCase(); + + if (key === 'home' || key === 'end') { + setScroll( + scrollEl, + key === 'home' ? 0 : 'end', + this.virtualScrollHorizontal, + this.$q.lang.rtl + ); + } + } + + var + scrollDetails = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ), + listLastIndex = this.virtualScrollLength - 1, + listEndOffset = scrollDetails.scrollMaxSize - scrollDetails.offsetStart - scrollDetails.offsetEnd - this.virtualScrollPaddingAfter; + + if (this.prevScrollStart === scrollDetails.scrollStart) { + return + } + + if (scrollDetails.scrollMaxSize <= 0) { + this.__setVirtualScrollSliceRange(scrollEl, scrollDetails, 0, 0); + + return + } + + this.__scrollViewSize !== scrollDetails.scrollViewSize && this.__setVirtualScrollSize(scrollDetails.scrollViewSize); + + this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from); + + var scrollMaxStart = Math.floor(scrollDetails.scrollMaxSize - + Math.max(scrollDetails.scrollViewSize, scrollDetails.offsetEnd) - + Math.min(this.virtualScrollSizes[listLastIndex], scrollDetails.scrollViewSize / 2)); + + if (scrollMaxStart > 0 && Math.ceil(scrollDetails.scrollStart) >= scrollMaxStart) { + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + listLastIndex, + scrollDetails.scrollMaxSize - scrollDetails.offsetEnd - this.virtualScrollSizesAgg.reduce(sumFn, 0) + ); + + return + } + + var + toIndex = 0, + listOffset = scrollDetails.scrollStart - scrollDetails.offsetStart, + offset = listOffset; + + if (listOffset <= listEndOffset && listOffset + scrollDetails.scrollViewSize >= this.virtualScrollPaddingBefore) { + listOffset -= this.virtualScrollPaddingBefore; + toIndex = this.virtualScrollSliceRange.from; + offset = listOffset; + } + else { + for (var j = 0; listOffset >= this.virtualScrollSizesAgg[j] && toIndex < listLastIndex; j++) { + listOffset -= this.virtualScrollSizesAgg[j]; + toIndex += aggBucketSize; + } + } + + while (listOffset > 0 && toIndex < listLastIndex) { + listOffset -= this.virtualScrollSizes[toIndex]; + if (listOffset > -scrollDetails.scrollViewSize) { + toIndex++; + offset = listOffset; + } + else { + offset = this.virtualScrollSizes[toIndex] + listOffset; + } + } + + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + toIndex, + offset, + void 0, + throttled + ); + }, + + __setVirtualScrollSliceRange: function __setVirtualScrollSliceRange (scrollEl, scrollDetails, toIndex, offset, align, throttled) { + var this$1$1 = this; + + var alignForce = typeof align === 'string' && align.indexOf('-force') > -1; + var alignEnd = alignForce === true ? align.replace('-force', '') : align; + var alignRange = alignEnd !== void 0 ? alignEnd : 'start'; + + var + from = Math.max(0, toIndex - this.virtualScrollSliceSizeComputed[alignRange]), + to = from + this.virtualScrollSliceSizeComputed.total; + + if (to > this.virtualScrollLength) { + to = this.virtualScrollLength; + from = Math.max(0, to - this.virtualScrollSliceSizeComputed.total); + } + + this.prevScrollStart = scrollDetails.scrollStart; + + var rangeChanged = from !== this.virtualScrollSliceRange.from || to !== this.virtualScrollSliceRange.to; + + if (rangeChanged === false && alignEnd === void 0) { + this.__emitScroll(toIndex); + + return + } + + var activeElement = document.activeElement; + var contentEl = this.$refs.content; + if ( + rangeChanged === true && + contentEl !== void 0 && + contentEl !== activeElement && + contentEl.contains(activeElement) === true && + contentEl.qVsFocusout !== true + ) { + contentEl.qVsFocusout = true; + contentEl.addEventListener('focusout', this.__onBlurRefocusFn); + + setTimeout(function () { + if (contentEl !== void 0) { + contentEl.removeEventListener('focusout', this$1$1.__onBlurRefocusFn); + contentEl.qVsFocusout = false; + } + }, 500); + } + + setOverflowAnchor(contentEl, toIndex - from); + + var sizeBefore = alignEnd !== void 0 ? this.virtualScrollSizes.slice(from, toIndex).reduce(sumFn, 0) : 0; + + if (rangeChanged === true) { + // vue key matching algorithm works only if + // the array of VNodes changes on only one of the ends + // so we first change one end and then the other + + var tempTo = to >= this.virtualScrollSliceRange.from && from <= this.virtualScrollSliceRange.to + ? this.virtualScrollSliceRange.to + : to; + this.virtualScrollSliceRange = { from: from, to: tempTo }; + this.virtualScrollPaddingBefore = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, 0, from); + this.virtualScrollPaddingAfter = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, this.virtualScrollSliceRange.to, this.virtualScrollLength); + + cancelAnimationFrame(this.vsRangeToAnimationFrame); + this.vsRangeToAnimationFrame = requestAnimationFrame(function () { + if (this$1$1.virtualScrollSliceRange.to !== to && this$1$1.prevScrollStart === scrollDetails.scrollStart) { + this$1$1.virtualScrollSliceRange = { from: this$1$1.virtualScrollSliceRange.from, to: to }; + this$1$1.virtualScrollPaddingAfter = sumSize(this$1$1.virtualScrollSizesAgg, this$1$1.virtualScrollSizes, to, this$1$1.virtualScrollLength); + } + }); + } + + cancelAnimationFrame(this.vsScrollAnimationFrame); + this.vsScrollAnimationFrame = requestAnimationFrame(function () { + // if the scroll was changed give up + // (another call to __setVirtualScrollSliceRange before animation frame) + if (this$1$1.prevScrollStart !== scrollDetails.scrollStart) { + return + } + + if (rangeChanged === true) { + this$1$1.__updateVirtualScrollSizes(from); + } + + var + sizeAfter = this$1$1.virtualScrollSizes.slice(from, toIndex).reduce(sumFn, 0), + posStart = sizeAfter + scrollDetails.offsetStart + this$1$1.virtualScrollPaddingBefore, + posEnd = posStart + this$1$1.virtualScrollSizes[toIndex]; + + var scrollPosition = posStart + offset; + + if (alignEnd !== void 0) { + var sizeDiff = sizeAfter - sizeBefore; + var scrollStart = scrollDetails.scrollStart + sizeDiff; + + scrollPosition = alignForce !== true && scrollStart < posStart && posEnd < scrollStart + scrollDetails.scrollViewSize + ? scrollStart + : ( + alignEnd === 'end' + ? posEnd - scrollDetails.scrollViewSize + : posStart - (alignEnd === 'start' ? 0 : Math.round((scrollDetails.scrollViewSize - this$1$1.virtualScrollSizes[toIndex]) / 2)) + ); + } + + this$1$1.prevScrollStart = scrollPosition; + + if (throttled !== true || (scrollEl === window && this$1$1.$q.platform.is.ios !== true)) { + setScroll( + scrollEl, + scrollPosition, + this$1$1.virtualScrollHorizontal, + this$1$1.$q.lang.rtl + ); + } + + this$1$1.__emitScroll(toIndex); + }); + }, + + __updateVirtualScrollSizes: function __updateVirtualScrollSizes (from) { + var contentEl = this.$refs.content; + + if (contentEl !== void 0) { + var + children = filterProto.call(contentEl.children || [], function (el) { return el.classList && el.classList.contains('q-virtual-scroll--skip') === false; }), // fallback [] for IE + childrenLength = children.length, + sizeFn = this.virtualScrollHorizontal === true + ? function (el) { return el.getBoundingClientRect().width; } + : function (el) { return el.offsetHeight; }; + + var + index = from, + size, diff; + + for (var i = 0; i < childrenLength;) { + size = sizeFn(children[i]); + i++; + + while (i < childrenLength && children[i].classList.contains('q-virtual-scroll--with-prev') === true) { + size += sizeFn(children[i]); + i++; + } + + diff = size - this.virtualScrollSizes[index]; + + if (diff !== 0) { + this.virtualScrollSizes[index] += diff; + this.virtualScrollSizesAgg[Math.floor(index / aggBucketSize)] += diff; + } + + index++; + } + } + }, + + __resetVirtualScroll: function __resetVirtualScroll (toIndex, fullReset) { + var this$1$1 = this; + + var defaultSize = 1 * this.virtualScrollItemSizeComputed; + + if (fullReset === true || Array.isArray(this.virtualScrollSizes) === false) { + this.virtualScrollSizes = []; + } + + var oldVirtualScrollSizesLength = this.virtualScrollSizes.length; + + this.virtualScrollSizes.length = this.virtualScrollLength; + + for (var i = this.virtualScrollLength - 1; i >= oldVirtualScrollSizesLength; i--) { + this.virtualScrollSizes[i] = defaultSize; + } + + var jMax = Math.floor((this.virtualScrollLength - 1) / aggBucketSize); + this.virtualScrollSizesAgg = []; + for (var j = 0; j <= jMax; j++) { + var size = 0; + var iMax = Math.min((j + 1) * aggBucketSize, this.virtualScrollLength); + for (var i$1 = j * aggBucketSize; i$1 < iMax; i$1++) { + size += this.virtualScrollSizes[i$1]; + } + this.virtualScrollSizesAgg.push(size); + } + + this.prevToIndex = -1; + this.prevScrollStart = void 0; + + this.virtualScrollPaddingBefore = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, 0, this.virtualScrollSliceRange.from); + this.virtualScrollPaddingAfter = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, this.virtualScrollSliceRange.to, this.virtualScrollLength); + + if (toIndex >= 0) { + this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from); + + this.$nextTick(function () { + this$1$1.scrollTo(toIndex); + }); + } + else { + this.__onVirtualScrollEvt(); + } + }, + + __setVirtualScrollSize: function __setVirtualScrollSize (scrollViewSize) { + if (scrollViewSize === void 0 && typeof window !== 'undefined') { + var scrollEl = this.__getVirtualScrollTarget(); + + if (scrollEl !== void 0 && scrollEl !== null && scrollEl.nodeType !== 8) { + scrollViewSize = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ).scrollViewSize; + } + } + + this.__scrollViewSize = scrollViewSize; + + var virtualScrollSliceRatioBefore = parseFloat(this.virtualScrollSliceRatioBefore) || 0; + var virtualScrollSliceRatioAfter = parseFloat(this.virtualScrollSliceRatioAfter) || 0; + var multiplier = 1 + virtualScrollSliceRatioBefore + virtualScrollSliceRatioAfter; + var view = scrollViewSize === void 0 || scrollViewSize <= 0 + ? 1 + : Math.ceil(scrollViewSize / this.virtualScrollItemSizeComputed); + var baseSize = Math.max( + 1, + view, + Math.ceil((this.virtualScrollSliceSize > 0 ? this.virtualScrollSliceSize : 10) / multiplier) + ); + + this.virtualScrollSliceSizeComputed = { + total: Math.ceil(baseSize * multiplier), + start: Math.ceil(baseSize * virtualScrollSliceRatioBefore), + center: Math.ceil(baseSize * (0.5 + virtualScrollSliceRatioBefore)), + end: Math.ceil(baseSize * (1 + virtualScrollSliceRatioBefore)), + view: view + }; + }, + + __padVirtualScroll: function __padVirtualScroll (h, tag, content) { + var obj, obj$1, obj$2, obj$3; + + var paddingSize = this.virtualScrollHorizontal === true ? 'width' : 'height'; + var style = {}; + style['--q-virtual-scroll-item-' + paddingSize] = this.virtualScrollItemSizeComputed + 'px'; + + return [ + tag === 'tbody' + ? h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'before', + ref: 'before' + }, [ + h('tr', [ + h('td', { + style: Object.assign(( obj = {}, obj[paddingSize] = ((this.virtualScrollPaddingBefore) + "px"), obj ), style), + attrs: this.colspanAttr + }) + ]) + ]) + : h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'before', + ref: 'before', + style: Object.assign(( obj$1 = {}, obj$1[paddingSize] = ((this.virtualScrollPaddingBefore) + "px"), obj$1 ), style) + }), + + h(tag, { + staticClass: 'q-virtual-scroll__content', + key: 'content', + ref: 'content', + attrs: { tabindex: -1 } + }, content), + + tag === 'tbody' + ? h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'after', + ref: 'after' + }, [ + h('tr', [ + h('td', { + style: Object.assign(( obj$2 = {}, obj$2[paddingSize] = ((this.virtualScrollPaddingAfter) + "px"), obj$2 ), style), + attrs: this.colspanAttr + }) + ]) + ]) + : h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'after', + ref: 'after', + style: Object.assign(( obj$3 = {}, obj$3[paddingSize] = ((this.virtualScrollPaddingAfter) + "px"), obj$3 ), style) + }) + ] + }, + + __emitScroll: function __emitScroll (index) { + if (this.prevToIndex !== index) { + this.qListeners['virtual-scroll'] !== void 0 && this.$emit('virtual-scroll', { + index: index, + from: this.virtualScrollSliceRange.from, + to: this.virtualScrollSliceRange.to - 1, + direction: index < this.prevToIndex ? 'decrease' : 'increase', + ref: this + }); + + this.prevToIndex = index; + } + }, + + __onBlurRefocusFn: function __onBlurRefocusFn () { + this.$refs.content !== void 0 && this.$refs.content.focus(); + } + }, + + created: function created () { + this.__setVirtualScrollSize(); + }, + + activated: function activated () { + if (this.shouldActivate !== true) { return } + + var scrollEl = this.__getVirtualScrollTarget(); + + if (this.prevScrollStart !== void 0 && scrollEl !== void 0 && scrollEl !== null && scrollEl.nodeType !== 8) { + setScroll( + scrollEl, + this.prevScrollStart, + this.virtualScrollHorizontal, + this.$q.lang.rtl + ); + } + else { + this.scrollTo(this.prevToIndex); + } + }, + + deactivated: function deactivated () { + this.shouldActivate = true; + }, + + beforeMount: function beforeMount () { + this.__onVirtualScrollEvt = scrollDebounce(this.__onVirtualScrollEvt); + this.__setVirtualScrollSize(); + }, + + beforeDestroy: function beforeDestroy () { + this.__onVirtualScrollEvt.cancel(); + } + }; + + var validateNewValueMode = function (v) { return ['add', 'add-unique', 'toggle'].includes(v); }; + var reEscapeList = '.*+?^${}()|[]\\'; + + var QSelect = Vue__default["default"].extend({ + name: 'QSelect', + + mixins: [ + QField, + VirtualScroll, + FormFieldMixin, + ListenersMixin + ], + + props: { + value: { + required: true + }, + + multiple: Boolean, + + displayValue: [String, Number], + displayValueSanitize: Boolean, + dropdownIcon: String, + + options: { + type: Array, + default: function () { return []; } + }, + + optionValue: [Function, String], + optionLabel: [Function, String], + optionDisable: [Function, String], + + hideSelected: Boolean, + hideDropdownIcon: Boolean, + fillInput: Boolean, + + maxValues: [Number, String], + + optionsDense: Boolean, + optionsDark: { + type: Boolean, + default: null + }, + optionsSelectedClass: String, + optionsSanitize: Boolean, + + optionsCover: Boolean, + + menuShrink: Boolean, + menuAnchor: String, + menuSelf: String, + menuOffset: Array, + + popupContentClass: String, + popupContentStyle: [String, Array, Object], + + dialogContentClass: [String, Array, Object], + dialogContentStyle: [String, Array, Object], + + dialogCloseIcon: [Boolean, String], + + useInput: Boolean, + useChips: Boolean, + + newValueMode: { + type: String, + validator: validateNewValueMode + }, + + mapOptions: Boolean, + emitValue: Boolean, + + inputDebounce: { + type: [Number, String], + default: 500 + }, + + inputClass: [Array, String, Object], + inputStyle: [Array, String, Object], + + tabindex: { + type: [String, Number], + default: 0 + }, + + autocomplete: String, + + transitionShow: String, + transitionHide: String, + + behavior: { + type: String, + validator: function (v) { return ['default', 'menu', 'dialog'].includes(v); }, + default: 'default' + }, + + virtualScrollItemSize: { + type: [ Number, String ], + default: void 0 + } + }, + + data: function data () { + return { + menu: false, + dialog: false, + optionIndex: -1, + inputValue: '', + dialogFieldFocused: false + } + }, + + watch: { + innerValue: { + handler: function handler (val) { + this.innerValueCache = val; + + if ( + this.useInput === true && + this.fillInput === true && + this.multiple !== true && + // Prevent re-entering in filter while filtering + // Also prevent clearing inputValue while filtering + this.innerLoading !== true && + ((this.dialog !== true && this.menu !== true) || this.hasValue !== true) + ) { + this.userInputValue !== true && this.__resetInputValue(); + if (this.dialog === true || this.menu === true) { + this.filter(''); + } + } + }, + immediate: true + }, + + fillInput: function fillInput () { + this.__resetInputValue(); + }, + + menu: function menu (show) { + this.__updateMenu(show); + }, + + virtualScrollLength: function virtualScrollLength (newLength, oldLength) { + var this$1$1 = this; + + if (this.menu === true && this.innerLoading === false) { + this.__resetVirtualScroll(-1, true); + + this.$nextTick(function () { + if (this$1$1.menu === true && this$1$1.innerLoading === false) { + if (newLength > oldLength) { + this$1$1.__resetVirtualScroll(); + } + else { + this$1$1.__updateMenu(true); + } + } + }); + } + } + }, + + computed: { + isOptionsDark: function isOptionsDark () { + return this.optionsDark === null + ? (this.dark === null ? this.$q.dark.isActive : this.dark) + : this.optionsDark + }, + + optionsDarkSuffix: function optionsDarkSuffix () { + return this.isOptionsDark === null + ? 'dark-auto' + : (this.isOptionsDark === true ? 'dark' : 'light') + }, + + virtualScrollLength: function virtualScrollLength () { + return Array.isArray(this.options) + ? this.options.length + : 0 + }, + + fieldClass: function fieldClass () { + return "q-select q-field--auto-height q-select--with" + (this.useInput !== true ? 'out' : '') + "-input" + + " q-select--with" + (this.useChips !== true ? 'out' : '') + "-chips" + + " q-select--" + (this.multiple === true ? 'multiple' : 'single') + }, + + computedInputClass: function computedInputClass () { + if (this.hideSelected === true || this.innerValue.length === 0) { + return this.inputClass + } + + return this.inputClass === void 0 + ? 'q-field__input--padding' + : [this.inputClass, 'q-field__input--padding'] + }, + + menuContentClass: function menuContentClass () { + return (this.virtualScrollHorizontal === true ? 'q-virtual-scroll--horizontal' : '') + + (this.popupContentClass ? ' ' + this.popupContentClass : '') + }, + + innerValue: function innerValue () { + var this$1$1 = this; + + var + mapNull = this.mapOptions === true && this.multiple !== true, + val = this.value !== void 0 && (this.value !== null || mapNull === true) + ? (this.multiple === true && Array.isArray(this.value) ? this.value : [ this.value ]) + : []; + + if (this.mapOptions === true && Array.isArray(this.options) === true) { + var cache = this.mapOptions === true && this.innerValueCache !== void 0 + ? this.innerValueCache + : []; + var values = val.map(function (v) { return this$1$1.__getOption(v, cache); }); + + return this.value === null && mapNull === true + ? values.filter(function (v) { return v !== null; }) + : values + } + + return val + }, + + noOptions: function noOptions () { + return this.virtualScrollLength === 0 + }, + + selectedString: function selectedString () { + var this$1$1 = this; + + return this.innerValue + .map(function (opt) { return this$1$1.getOptionLabel(opt); }) + .join(', ') + }, + + sanitizeFn: function sanitizeFn () { + return this.optionsSanitize === true + ? function () { return true; } + : function (opt) { return opt !== void 0 && opt !== null && opt.sanitize === true; } + }, + + displayAsText: function displayAsText () { + return this.displayValueSanitize === true || ( + this.displayValue === void 0 && ( + this.optionsSanitize === true || + this.innerValue.some(this.sanitizeFn) + ) + ) + }, + + computedTabindex: function computedTabindex () { + return this.focused === true ? this.tabindex : -1 + }, + + selectedScope: function selectedScope () { + var this$1$1 = this; + + return this.innerValue.map(function (opt, i) { return ({ + index: i, + opt: opt, + sanitize: this$1$1.sanitizeFn(opt), + selected: true, + removeAtIndex: this$1$1.__removeAtIndexAndFocus, + toggleOption: this$1$1.toggleOption, + tabindex: this$1$1.computedTabindex + }); }) + }, + + optionScope: function optionScope () { + var this$1$1 = this; + + if (this.virtualScrollLength === 0) { + return [] + } + + var ref = this.virtualScrollSliceRange; + var from = ref.from; + var to = ref.to; + var ref$1 = this.__optionScopeCache; + var options = ref$1.options; + var optionEls = ref$1.optionEls; + + return this.options.slice(from, to).map(function (opt, i) { + var disable = this$1$1.isOptionDisabled(opt); + var index = from + i; + + var itemProps = { + clickable: true, + active: false, + activeClass: this$1$1.computedOptionsSelectedClass, + manualFocus: true, + focused: false, + disable: disable, + tabindex: -1, + dense: this$1$1.optionsDense, + dark: this$1$1.isOptionsDark + }; + + var itemAttrs = { + role: 'option', + id: ((this$1$1.targetUid) + "_" + index) + }; + + if (disable !== true) { + this$1$1.isOptionSelected(opt) === true && (itemProps.active = true); + itemAttrs['aria-selected'] = itemProps.active === true ? 'true' : 'false'; + + this$1$1.optionIndex === index && (itemProps.focused = true); + } + + var itemEvents = { + click: function () { this$1$1.toggleOption(opt); } + }; + + if (this$1$1.$q.platform.is.desktop === true) { + itemEvents.mousemove = function () { this$1$1.menu === true && this$1$1.setOptionIndex(index); }; + } + + var option = { + index: index, + opt: opt, + sanitize: this$1$1.sanitizeFn(opt), + selected: itemProps.active, + focused: itemProps.focused, + toggleOption: this$1$1.toggleOption, + setOptionIndex: this$1$1.setOptionIndex, + itemProps: itemProps, + itemAttrs: itemAttrs + }; + + if (options[i] === void 0 || isDeepEqual(option, options[i]) !== true) { + options[i] = option; + optionEls[i] = void 0; + } + + return Object.assign({}, option, + {itemEvents: itemEvents}) + }) + }, + + dropdownArrowIcon: function dropdownArrowIcon () { + return this.dropdownIcon !== void 0 + ? this.dropdownIcon + : this.$q.iconSet.arrow.dropdown + }, + + computedDialogCloseIcon: function computedDialogCloseIcon () { + if (this.dialogCloseIcon === true) { + return this.$q.lang.rtl === true + ? this.$q.iconSet.chevron.right + : this.$q.iconSet.chevron.left + } + + return typeof this.dialogCloseIcon === 'string' && this.dialogCloseIcon.length > 0 + ? this.dialogCloseIcon + : false + }, + + squaredMenu: function squaredMenu () { + return this.optionsCover === false && + this.outlined !== true && + this.standout !== true && + this.borderless !== true && + this.rounded !== true + }, + + computedOptionsSelectedClass: function computedOptionsSelectedClass () { + return this.optionsSelectedClass !== void 0 + ? this.optionsSelectedClass + : (this.color !== void 0 ? ("text-" + (this.color)) : '') + }, + + innerOptionsValue: function innerOptionsValue () { + var this$1$1 = this; + + return this.innerValue.map(function (opt) { return this$1$1.getOptionValue(opt); }) + }, + + // returns method to get value of an option; + // takes into account 'option-value' prop + getOptionValue: function getOptionValue () { + return this.__getPropValueFn('optionValue', 'value') + }, + + // returns method to get label of an option; + // takes into account 'option-label' prop + getOptionLabel: function getOptionLabel () { + return this.__getPropValueFn('optionLabel', 'label') + }, + + // returns method to tell if an option is disabled; + // takes into account 'option-disable' prop + isOptionDisabled: function isOptionDisabled () { + var fn = this.__getPropValueFn('optionDisable', 'disable'); + return function () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + return fn.apply(null, args) === true; + } + }, + + inputControlEvents: function inputControlEvents () { + return { + input: this.__onInput, + compositionend: this.__onInput, + // Safari < 10.2 & UIWebView doesn't fire compositionend when + // switching focus before confirming composition choice + // this also fixes the issue where some browsers e.g. iOS Chrome + // fires "change" instead of "input" on autocomplete. + change: this.__onChange, + keydown: this.__onTargetKeydown, + keyup: this.__onTargetAutocomplete, + keypress: this.__onTargetKeypress, + focus: this.__onTargetFocus, + click: this.__onTargetClick + } + }, + + closeButtonEvents: function closeButtonEvents () { + var this$1$1 = this; + + return { + click: function (e) { + stopAndPrevent(e); + this$1$1.hidePopup(); + } + } + }, + + virtualScrollItemSizeComputed: function virtualScrollItemSizeComputed () { + return this.virtualScrollItemSize === void 0 + ? (this.optionsDense === true ? 24 : 48) + : this.virtualScrollItemSize + }, + + comboboxAttrs: function comboboxAttrs () { + var attrs = { + tabindex: this.tabindex, + role: 'combobox', + 'aria-label': this.label, + 'aria-readonly': this.readonly === true ? 'true' : 'false', + 'aria-autocomplete': this.useInput === true ? 'list' : 'none', + 'aria-expanded': this.menu === true ? 'true' : 'false', + 'aria-owns': ((this.targetUid) + "_lb"), + 'aria-controls': ((this.targetUid) + "_lb") + }; + + if (this.optionIndex >= 0) { + attrs['aria-activedescendant'] = (this.targetUid) + "_" + (this.optionIndex); + } + + return attrs + }, + + listboxAttrs: function listboxAttrs () { + var attrs = { + id: ((this.targetUid) + "_lb"), + role: 'listbox', + 'aria-multiselectable': this.multiple === true ? 'true' : 'false' + }; + + return attrs + } + }, + + methods: { + getEmittingOptionValue: function getEmittingOptionValue (opt) { + return this.emitValue === true + ? this.getOptionValue(opt) + : opt + }, + + removeAtIndex: function removeAtIndex (index) { + if (index > -1 && index < this.innerValue.length) { + if (this.multiple === true) { + var model = this.value.slice(); + this.$emit('remove', { index: index, value: model.splice(index, 1)[0] }); + this.$emit('input', model); + } + else { + this.$emit('input', null); + } + } + }, + + __removeAtIndexAndFocus: function __removeAtIndexAndFocus (index) { + this.removeAtIndex(index); + this.__focus(); + }, + + add: function add (opt, unique) { + var val = this.getEmittingOptionValue(opt); + + if (this.multiple !== true) { + this.fillInput === true && this.updateInputValue( + this.getOptionLabel(opt), + true, + true + ); + + this.$emit('input', val); + return + } + + if (this.innerValue.length === 0) { + this.$emit('add', { index: 0, value: val }); + this.$emit('input', this.multiple === true ? [ val ] : val); + return + } + + if (unique === true && this.isOptionSelected(opt) === true) { + return + } + + if (this.maxValues !== void 0 && this.value.length >= this.maxValues) { + return + } + + var model = this.value.slice(); + + this.$emit('add', { index: model.length, value: val }); + model.push(val); + this.$emit('input', model); + }, + + toggleOption: function toggleOption (opt, keepOpen) { + if (this.editable !== true || opt === void 0 || this.isOptionDisabled(opt) === true) { + return + } + + var optValue = this.getOptionValue(opt); + + if (this.multiple !== true) { + if (keepOpen !== true) { + this.updateInputValue( + this.fillInput === true ? this.getOptionLabel(opt) : '', + true, + true + ); + + this.dialogFieldFocused = false; + document.activeElement.blur(); + + this.hidePopup(); + } + + this.$refs.target !== void 0 && this.$refs.target.focus(); + + if ( + this.innerValue.length === 0 || + isDeepEqual(this.getOptionValue(this.innerValue[0]), optValue) !== true + ) { + this.$emit('input', this.emitValue === true ? optValue : opt); + } + return + } + + (this.hasDialog !== true || this.dialogFieldFocused === true) && this.__focus(); + + this.__selectInputText(); + + if (this.innerValue.length === 0) { + var val = this.emitValue === true ? optValue : opt; + this.$emit('add', { index: 0, value: val }); + this.$emit('input', this.multiple === true ? [ val ] : val); + return + } + + var + model = this.value.slice(), + index = this.innerOptionsValue.findIndex(function (v) { return isDeepEqual(v, optValue); }); + + if (index > -1) { + this.$emit('remove', { index: index, value: model.splice(index, 1)[0] }); + } + else { + if (this.maxValues !== void 0 && model.length >= this.maxValues) { + return + } + + var val$1 = this.emitValue === true ? optValue : opt; + + this.$emit('add', { index: model.length, value: val$1 }); + model.push(val$1); + } + + this.$emit('input', model); + }, + + setOptionIndex: function setOptionIndex (index) { + if (this.$q.platform.is.desktop !== true) { return } + + var val = index > -1 && index < this.virtualScrollLength + ? index + : -1; + + if (this.optionIndex !== val) { + this.optionIndex = val; + } + }, + + moveOptionSelection: function moveOptionSelection (offset, skipInputValue) { + var this$1$1 = this; + if ( offset === void 0 ) offset = 1; + + if (this.menu === true) { + var index = this.optionIndex; + do { + index = normalizeToInterval( + index + offset, + -1, + this.virtualScrollLength - 1 + ); + } + while (index !== -1 && index !== this.optionIndex && this.isOptionDisabled(this.options[index]) === true) + + if (this.optionIndex !== index) { + cancelAnimationFrame(this.moveAnimationFrame); + this.moveAnimationFrame = requestAnimationFrame(function () { + this$1$1.setOptionIndex(index); + this$1$1.scrollTo(index); + + if (skipInputValue !== true && this$1$1.useInput === true && this$1$1.fillInput === true) { + this$1$1.__setInputValue(index >= 0 + ? this$1$1.getOptionLabel(this$1$1.options[index]) + : this$1$1.defaultInputValue + ); + } + }); + } + } + }, + + __getOption: function __getOption (value, innerValueCache) { + var this$1$1 = this; + + var fn = function (opt) { return isDeepEqual(this$1$1.getOptionValue(opt), value); }; + return this.options.find(fn) || innerValueCache.find(fn) || value + }, + + __getPropValueFn: function __getPropValueFn (propName, defaultVal) { + var val = this[propName] !== void 0 + ? this[propName] + : defaultVal; + + return typeof val === 'function' + ? val + : function (opt) { return (opt !== null && typeof opt === 'object' && val in opt ? opt[ val ] : opt); } + }, + + isOptionSelected: function isOptionSelected (opt) { + var val = this.getOptionValue(opt); + return this.innerOptionsValue.find(function (v) { return isDeepEqual(v, val); }) !== void 0 + }, + + __selectInputText: function __selectInputText (e) { + if ( + this.useInput === true && + this.$refs.target !== void 0 && + (e === void 0 || (this.$refs.target === e.target && e.target.value === this.selectedString)) + ) { + this.$refs.target.select(); + } + }, + + __onTargetKeyup: function __onTargetKeyup (e) { + // if ESC and we have an opened menu + // then stop propagation (might be caught by a QDialog + // and so it will also close the QDialog, which is wrong) + if (isKeyCode(e, 27) === true && this.menu === true) { + stop(e); + // on ESC we need to close the dialog also + this.hidePopup(); + this.__resetInputValue(); + } + + this.$emit('keyup', e); + }, + + __onTargetAutocomplete: function __onTargetAutocomplete (e) { + var this$1$1 = this; + + var ref = e.target; + var value = ref.value; + + if (e.keyCode !== void 0) { + this.__onTargetKeyup(e); + return + } + + e.target.value = ''; + clearTimeout(this.inputTimer); + this.__resetInputValue(); + + if (typeof value === 'string' && value.length > 0) { + var needle = value.toLocaleLowerCase(); + var findFn = function (extractFn) { + var option = this$1$1.options.find(function (opt) { return extractFn(opt).toLocaleLowerCase() === needle; }); + + if (option === void 0) { + return false + } + + if (this$1$1.innerValue.indexOf(option) === -1) { + this$1$1.toggleOption(option); + } + else { + this$1$1.hidePopup(); + } + + return true + }; + var fillFn = function (afterFilter) { + if (findFn(this$1$1.getOptionValue) === true) { + return + } + if (findFn(this$1$1.getOptionLabel) === true || afterFilter === true) { + return + } + + this$1$1.filter(value, true, function () { return fillFn(true); }); + }; + + fillFn(); + } + else { + this.__clearValue(e); + } + }, + + __onTargetKeypress: function __onTargetKeypress (e) { + this.$emit('keypress', e); + }, + + __onTargetKeydown: function __onTargetKeydown (e) { + var this$1$1 = this; + + this.$emit('keydown', e); + + if (shouldIgnoreKey(e) === true) { + return + } + + var newValueModeValid = this.inputValue.length > 0 && + (this.newValueMode !== void 0 || this.qListeners['new-value'] !== void 0); + var tabShouldSelect = e.shiftKey !== true && + this.multiple !== true && + (this.optionIndex > -1 || newValueModeValid === true); + + // escape + if (e.keyCode === 27) { + prevent(e); // prevent clearing the inputValue + return + } + + // tab + if (e.keyCode === 9 && tabShouldSelect === false) { + this.__closeMenu(); + return + } + + if (e.target === void 0 || e.target.id !== this.targetUid) { return } + + // down + if ( + e.keyCode === 40 && + this.innerLoading !== true && + this.menu === false + ) { + stopAndPrevent(e); + this.showPopup(); + return + } + + // backspace + if ( + e.keyCode === 8 && + this.hideSelected !== true && + this.inputValue.length === 0 + ) { + if (this.multiple === true && Array.isArray(this.value)) { + this.removeAtIndex(this.value.length - 1); + } + else if (this.multiple !== true && this.value !== null) { + this.$emit('input', null); + } + return + } + + // home, end - 36, 35 + if ( + (e.keyCode === 35 || e.keyCode === 36) && + (typeof this.inputValue !== 'string' || this.inputValue.length === 0) + ) { + stopAndPrevent(e); + this.optionIndex = -1; + this.moveOptionSelection(e.keyCode === 36 ? 1 : -1, this.multiple); + } + + // pg up, pg down - 33, 34 + if ( + (e.keyCode === 33 || e.keyCode === 34) && + this.virtualScrollSliceSizeComputed !== void 0 + ) { + stopAndPrevent(e); + this.optionIndex = Math.max( + -1, + Math.min( + this.virtualScrollLength, + this.optionIndex + (e.keyCode === 33 ? -1 : 1) * this.virtualScrollSliceSizeComputed.view + ) + ); + this.moveOptionSelection(e.keyCode === 33 ? 1 : -1, this.multiple); + } + + // up, down + if (e.keyCode === 38 || e.keyCode === 40) { + stopAndPrevent(e); + this.moveOptionSelection(e.keyCode === 38 ? -1 : 1, this.multiple); + } + + var optionsLength = this.virtualScrollLength; + + // clear search buffer if expired + if (this.searchBuffer === void 0 || this.searchBufferExp < Date.now()) { + this.searchBuffer = ''; + } + + // keyboard search when not having use-input + if ( + optionsLength > 0 && + this.useInput !== true && + e.key !== void 0 && + e.key.length === 1 && // printable char + e.altKey === e.ctrlKey && // not kbd shortcut + (e.keyCode !== 32 || this.searchBuffer.length > 0) // space in middle of search + ) { + this.menu !== true && this.showPopup(e); + + var + char = e.key.toLocaleLowerCase(), + keyRepeat = this.searchBuffer.length === 1 && this.searchBuffer[0] === char; + + this.searchBufferExp = Date.now() + 1500; + if (keyRepeat === false) { + stopAndPrevent(e); + this.searchBuffer += char; + } + + var searchRe = new RegExp('^' + this.searchBuffer.split('').map(function (l) { return reEscapeList.indexOf(l) > -1 ? '\\' + l : l; }).join('.*'), 'i'); + + var index = this.optionIndex; + + if (keyRepeat === true || index < 0 || searchRe.test(this.getOptionLabel(this.options[index])) !== true) { + do { + index = normalizeToInterval(index + 1, -1, optionsLength - 1); + } + while (index !== this.optionIndex && ( + this.isOptionDisabled(this.options[index]) === true || + searchRe.test(this.getOptionLabel(this.options[index])) !== true + )) + } + + if (this.optionIndex !== index) { + this.$nextTick(function () { + this$1$1.setOptionIndex(index); + this$1$1.scrollTo(index); + + if (index >= 0 && this$1$1.useInput === true && this$1$1.fillInput === true) { + this$1$1.__setInputValue(this$1$1.getOptionLabel(this$1$1.options[index])); + } + }); + } + + return + } + + // enter, space (when not using use-input and not in search), or tab (when not using multiple and option selected) + // same target is checked above + if ( + e.keyCode !== 13 && + (e.keyCode !== 32 || this.useInput === true || this.searchBuffer !== '') && + (e.keyCode !== 9 || tabShouldSelect === false) + ) { return } + + e.keyCode !== 9 && stopAndPrevent(e); + + if (this.optionIndex > -1 && this.optionIndex < optionsLength) { + this.toggleOption(this.options[this.optionIndex]); + return + } + + if (newValueModeValid === true) { + var done = function (val, mode) { + if (mode) { + if (validateNewValueMode(mode) !== true) { + return + } + } + else { + mode = this$1$1.newValueMode; + } + + if (val === void 0 || val === null) { + return + } + + this$1$1.updateInputValue('', this$1$1.multiple !== true, true); + + this$1$1[mode === 'toggle' ? 'toggleOption' : 'add']( + val, + mode === 'add-unique' + ); + + if (this$1$1.multiple !== true) { + this$1$1.$refs.target !== void 0 && this$1$1.$refs.target.focus(); + this$1$1.hidePopup(); + } + }; + + if (this.qListeners['new-value'] !== void 0) { + this.$emit('new-value', this.inputValue, done); + } + else { + done(this.inputValue); + } + + if (this.multiple !== true) { + return + } + } + + if (this.menu === true) { + this.__closeMenu(); + } + else if (this.innerLoading !== true) { + this.showPopup(); + } + }, + + __onTargetFocus: function __onTargetFocus (e) { + managedFocus(e.target); + this.__selectInputText(e); + }, + + __onTargetClick: function __onTargetClick (e) { + this.hasDialog === true && stop(e); + }, + + __getVirtualScrollEl: function __getVirtualScrollEl () { + return this.hasDialog === true + ? this.$refs.menuContent + : ( + this.$refs.menu !== void 0 && this.$refs.menu.__portal !== void 0 + ? (this.$refs.menu.__portal.$el.children || [])[0] // fallback [] for IE + : void 0 + ) + }, + + __getVirtualScrollTarget: function __getVirtualScrollTarget () { + return this.__getVirtualScrollEl() + }, + + __getSelection: function __getSelection (h) { + var this$1$1 = this; + var obj; + + if (this.hideSelected === true) { + return [] + } + + if (this.$scopedSlots['selected-item'] !== void 0) { + return this.selectedScope.map(function (scope) { return this$1$1.$scopedSlots['selected-item'](scope); }).slice() + } + + if (this.$scopedSlots.selected !== void 0) { + return [].concat(this.$scopedSlots.selected()) + } + + if (this.useChips === true) { + return this.selectedScope.map(function (scope, i) { + var obj; + + return h(QChip, { + key: 'rem#' + i, + props: { + removable: this$1$1.editable === true && this$1$1.isOptionDisabled(scope.opt) !== true, + dense: true, + textColor: this$1$1.color, + tabindex: this$1$1.computedTabindex + }, + on: cache(this$1$1, 'rem#' + i, { + remove: function remove () { scope.removeAtIndex(i); } + }) + }, [ + h('span', { + staticClass: 'ellipsis', + domProps: ( obj = {}, obj[scope.sanitize === true ? 'textContent' : 'innerHTML'] = this$1$1.getOptionLabel(scope.opt), obj ) + }) + ]); + }) + } + + return [ + h('span', { + domProps: ( obj = {}, obj[this.displayAsText ? 'textContent' : 'innerHTML'] = this.displayValue !== void 0 + ? this.displayValue + : this.selectedString, obj ) + }) + ] + }, + + __getControl: function __getControl (h, fromDialog) { + var child = this.__getSelection(h); + var isTarget = fromDialog === true || this.dialog !== true || this.hasDialog !== true; + + if (this.useInput === true) { + child.push(this.__getInput(h, fromDialog, isTarget)); + } + // there can be only one (when dialog is opened the control in dialog should be target) + else if (this.editable === true) { + var attrs$1 = isTarget === true ? this.comboboxAttrs : void 0; + + child.push( + h('input', { + ref: isTarget === true ? 'target' : void 0, + key: 'd_t', + staticClass: 'q-select__focus-target', + attrs: Object.assign({}, {id: isTarget === true ? this.targetUid : void 0, + readonly: true, + 'data-autofocus': (fromDialog === true ? isTarget === true : this.autofocus) || void 0}, + attrs$1), + on: cache(this, 'f-tget', { + keydown: this.__onTargetKeydown, + keyup: this.__onTargetKeyup, + keypress: this.__onTargetKeypress + }) + }) + ); + + if (isTarget === true && typeof this.autocomplete === 'string' && this.autocomplete.length > 0) { + child.push( + h('input', { + key: 'autoinp', + staticClass: 'q-select__autocomplete-input', + attrs: { autocomplete: this.autocomplete, tabindex: -1 }, + on: cache(this, 'autoinp', { + keyup: this.__onTargetAutocomplete + }) + }) + ); + } + } + + if (this.nameProp !== void 0 && this.disable !== true && this.innerOptionsValue.length > 0) { + var opts = this.innerOptionsValue.map(function (value) { return h('option', { + attrs: { value: value, selected: true } + }); }); + + child.push( + h('select', { + staticClass: 'hidden', + attrs: { + name: this.nameProp, + multiple: this.multiple + } + }, opts) + ); + } + + var attrs = this.useInput === true || isTarget !== true ? void 0 : this.qAttrs; + + return h('div', { staticClass: 'q-field__native row items-center', attrs: attrs }, child) + }, + + __getOptions: function __getOptions (h) { + var this$1$1 = this; + + if (this.menu !== true) { + return void 0 + } + + if (this.noOptions === true) { + return this.$scopedSlots['no-option'] !== void 0 + ? this.$scopedSlots['no-option']({ inputValue: this.inputValue }) + : void 0 + } + + if ( + this.$scopedSlots.option !== void 0 && + this.__optionScopeCache.optionSlot !== this.$scopedSlots.option + ) { + this.__optionScopeCache.optionSlot = this.$scopedSlots.option; + this.__optionScopeCache.optionEls = []; + } + + var fn = this.$scopedSlots.option !== void 0 + ? this.$scopedSlots.option + : function (scope) { + var obj; + + return h(QItem, { + key: scope.index, + props: scope.itemProps, + attrs: scope.itemAttrs, + on: scope.itemEvents + }, [ + h(QItemSection, [ + h(QItemLabel, { + domProps: ( obj = {}, obj[scope.sanitize === true ? 'textContent' : 'innerHTML'] = this$1$1.getOptionLabel(scope.opt), obj ) + }) + ]) + ]); + }; + + var ref = this.__optionScopeCache; + var optionEls = ref.optionEls; + + var options = this.__padVirtualScroll(h, 'div', this.optionScope.map(function (scope, i) { + if (optionEls[i] === void 0) { + optionEls[i] = fn(scope); + } + + return optionEls[i] + })); + + if (this.$scopedSlots['before-options'] !== void 0) { + options = this.$scopedSlots['before-options']().concat(options); + } + + return mergeSlot(options, this, 'after-options') + }, + + __prependDialogCloseIcon: function __prependDialogCloseIcon (h) { + if ( + this.computedDialogCloseIcon === false || + this.hasDialog !== true || + this.dialog !== true + ) { + return slot(this, 'prepend') + } + + return mergeSlot([ + h(QIcon, { + staticClass: 'q-select__close-icon q-field__focusable-action', + props: { tag: 'button', name: this.computedDialogCloseIcon }, + attrs: iconAsButton, + on: this.closeButtonEvents + }) + ], this, 'prepend') + }, + + __getInnerAppend: function __getInnerAppend (h) { + return this.loading !== true && this.innerLoadingIndicator !== true && this.hideDropdownIcon !== true + ? [ + h(QIcon, { + staticClass: 'q-select__dropdown-icon' + (this.menu === true ? ' rotate-180' : ''), + props: { name: this.dropdownArrowIcon } + }) + ] + : null + }, + + __getInput: function __getInput (h, fromDialog, isTarget) { + var attrs = isTarget === true ? Object.assign({}, this.comboboxAttrs, this.qAttrs) : void 0; + + var options = { + ref: isTarget === true ? 'target' : void 0, + key: 'i_t', + staticClass: 'q-field__input q-placeholder col', + style: this.inputStyle, + class: this.computedInputClass, + domProps: { value: this.inputValue !== void 0 ? this.inputValue : '' }, + attrs: Object.assign({}, {type: 'search'}, + attrs, + {id: isTarget === true ? this.targetUid : void 0, + maxlength: this.maxlength, // this is converted to prop by QField + autocomplete: this.autocomplete, + 'data-autofocus': (fromDialog === true ? isTarget === true : this.autofocus) || void 0, + disabled: this.disable === true, + readonly: this.readonly === true}), + on: this.inputControlEvents + }; + + if (fromDialog !== true && this.hasDialog === true) { + options.staticClass += ' no-pointer-events'; + } + + return h('input', options) + }, + + __onChange: function __onChange (e) { + if (e.target.qComposing === true) { + e.target.qComposing = false; + this.__onInput(e); + } + }, + + __onInput: function __onInput (e) { + var this$1$1 = this; + + if (!e || !e.target || e.target.qComposing === true) { + return + } + + var val = typeof e.data === 'string' && e.isComposing === true && e.data.length + 1 === e.target.value.length + ? e.data + : e.target.value; + + if (this.inputValue === val) { + return + } + + clearTimeout(this.inputTimer); + + this.__setInputValue(val); + // mark it here as user input so that if updateInputValue is called + // before filter is called the indicator is reset + this.userInputValue = true; + this.defaultInputValue = this.inputValue; + + if ( + this.focused !== true && + (this.hasDialog !== true || this.dialogFieldFocused === true) + ) { + this.__focus(); + } + + if (this.qListeners.filter !== void 0) { + this.inputTimer = setTimeout(function () { + this$1$1.filter(this$1$1.inputValue); + }, this.inputDebounce); + } + }, + + __setInputValue: function __setInputValue (inputValue) { + if (this.inputValue !== inputValue) { + this.inputValue = inputValue; + this.$emit('input-value', inputValue); + } + }, + + updateInputValue: function updateInputValue (val, noFiltering, internal) { + this.userInputValue = internal !== true; + + if (this.useInput === true) { + this.__setInputValue(val); + + if (noFiltering === true || internal !== true) { + this.defaultInputValue = val; + } + + noFiltering !== true && this.filter(val); + } + }, + + filter: function filter (val, keepClosed, afterUpdateFn) { + var this$1$1 = this; + + if (this.qListeners.filter === void 0 || (keepClosed !== true && this.focused !== true)) { + return + } + + if (this.innerLoading === true) { + this.$emit('filter-abort'); + } + else { + this.innerLoading = true; + this.innerLoadingIndicator = true; + } + + if ( + val !== '' && + this.multiple !== true && + this.innerValue.length > 0 && + this.userInputValue !== true && + val === this.getOptionLabel(this.innerValue[0]) + ) { + val = ''; + } + + var filterId = setTimeout(function () { + this$1$1.menu === true && (this$1$1.menu = false); + }, 10); + clearTimeout(this.filterId); + this.filterId = filterId; + + this.$emit( + 'filter', + val, + function (fn, afterFn) { + if ((keepClosed === true || this$1$1.focused === true) && this$1$1.filterId === filterId) { + clearTimeout(this$1$1.filterId); + + typeof fn === 'function' && fn(); + + // hide indicator to allow arrow to animate + this$1$1.innerLoadingIndicator = false; + + this$1$1.$nextTick(function () { + this$1$1.innerLoading = false; + + if (this$1$1.editable === true) { + if (keepClosed === true) { + this$1$1.menu === true && this$1$1.hidePopup(); + } + else if (this$1$1.menu === true) { + this$1$1.__updateMenu(true); + } + else { + this$1$1.menu = true; + this$1$1.hasDialog === true && (this$1$1.dialog = true); + } + } + + typeof afterFn === 'function' && this$1$1.$nextTick(function () { afterFn(this$1$1); }); + typeof afterUpdateFn === 'function' && this$1$1.$nextTick(function () { afterUpdateFn(this$1$1); }); + }); + } + }, + function () { + if (this$1$1.focused === true && this$1$1.filterId === filterId) { + clearTimeout(this$1$1.filterId); + this$1$1.innerLoading = false; + this$1$1.innerLoadingIndicator = false; + } + this$1$1.menu === true && (this$1$1.menu = false); + } + ); + }, + + __getControlEvents: function __getControlEvents () { + var this$1$1 = this; + + var focusout = function (e) { + this$1$1.__onControlFocusout(e, function () { + this$1$1.__resetInputValue(); + this$1$1.__closeMenu(); + }); + }; + + return { + focusin: this.__onControlFocusin, + focusout: focusout, + 'popup-show': this.__onControlPopupShow, + 'popup-hide': function (e) { + e !== void 0 && stop(e); + this$1$1.$emit('popup-hide', e); + this$1$1.hasPopupOpen = false; + focusout(e); + }, + click: function (e) { + // label from QField will propagate click on the input (except IE) + prevent(e); + + if (this$1$1.hasDialog !== true && this$1$1.menu === true) { + this$1$1.__closeMenu(); + this$1$1.$refs.target !== void 0 && this$1$1.$refs.target.focus(); + return + } + + this$1$1.showPopup(e); + } + } + }, + + __getControlChild: function __getControlChild (h) { + if ( + this.editable !== false && ( + this.dialog === true || // dialog always has menu displayed, so need to render it + this.noOptions !== true || + this.$scopedSlots['no-option'] !== void 0 + ) + ) { + return this[("__get" + (this.hasDialog === true ? 'Dialog' : 'Menu'))](h) + } + }, + + __getMenu: function __getMenu (h) { + return h(QMenu, { + key: 'menu', + ref: 'menu', + props: { + value: this.menu, + fit: this.menuShrink !== true, + cover: this.optionsCover === true && this.noOptions !== true && this.useInput !== true, + anchor: this.menuAnchor, + self: this.menuSelf, + offset: this.menuOffset, + contentClass: this.menuContentClass, + contentStyle: this.popupContentStyle, + dark: this.isOptionsDark, + noParentEvent: true, + noRefocus: true, + noFocus: true, + square: this.squaredMenu, + transitionShow: this.transitionShow, + transitionHide: this.transitionHide, + separateClosePopup: true + }, + attrs: this.listboxAttrs, + on: cache(this, 'menu', { + '&scroll': this.__onVirtualScrollEvt, + 'before-hide': this.__closeMenu, + show: this.__onMenuShow + }) + }, this.__getOptions(h)) + }, + + __onMenuShow: function __onMenuShow () { + this.__setVirtualScrollSize(); + }, + + __onDialogFieldFocus: function __onDialogFieldFocus (e) { + stop(e); + this.$refs.target !== void 0 && this.$refs.target.focus(); + this.dialogFieldFocused = true; + }, + + __onDialogFieldBlur: function __onDialogFieldBlur (e) { + var this$1$1 = this; + + stop(e); + this.$nextTick(function () { + this$1$1.dialogFieldFocused = false; + }); + }, + + __getDialog: function __getDialog (h) { + var this$1$1 = this; + + var content = [ + h(QField, { + staticClass: ("col-auto " + (this.fieldClass)), + props: Object.assign({}, this.$props, + {for: this.targetUid, + dark: this.isOptionsDark, + square: true, + filled: true, + itemAligned: false, + loading: this.innerLoadingIndicator, + stackLabel: this.inputValue.length > 0}), + on: Object.assign({}, this.qListeners, + {focus: this.__onDialogFieldFocus, + blur: this.__onDialogFieldBlur}), + scopedSlots: Object.assign({}, this.$scopedSlots, + {rawControl: function () { return this$1$1.__getControl(h, true); }, + prepend: function () { return this$1$1.__prependDialogCloseIcon(h); }, + before: void 0, + after: void 0}) + }) + ]; + + this.menu === true && content.push( + h('div', { + key: 'virtMenu', + ref: 'menuContent', + staticClass: 'col scroll', + class: this.menuContentClass, + style: this.popupContentStyle, + attrs: this.listboxAttrs, + on: cache(this, 'virtMenu', { + click: prevent, + '&scroll': this.__onVirtualScrollEvt + }) + }, this.__getOptions(h)) + ); + + return h(QDialog, { + key: 'dialog', + ref: 'dialog', + props: { + value: this.dialog, + position: this.useInput === true ? 'top' : void 0, + contentClass: this.dialogContentClass, + contentStyle: this.dialogContentStyle, + transitionShow: this.transitionShow, + transitionHide: this.transitionHide + }, + on: cache(this, 'dialog', { + 'before-hide': this.__onDialogBeforeHide, + hide: this.__onDialogHide, + show: this.__onDialogShow + }) + }, [ + h('div', { + staticClass: 'q-select__dialog' + + " q-select__dialog--" + (this.optionsDarkSuffix) + " q-" + (this.optionsDarkSuffix) + + (this.dialogFieldFocused === true ? ' q-select__dialog--focused' : '') + }, content) + ]) + }, + + __onDialogBeforeHide: function __onDialogBeforeHide () { + if (this.useInput !== true || this.$q.platform.is.desktop === true) { + this.$refs.dialog.__refocusTarget = this.$el.querySelector('.q-field__native > [tabindex]:last-child'); + } + this.focused = false; + this.dialogFieldFocused = false; + }, + + __onDialogHide: function __onDialogHide (e) { + if (this.$q.platform.is.desktop !== true) { + document.activeElement.blur(); + } + this.hidePopup(); + this.focused === false && this.$emit('blur', e); + this.__resetInputValue(); + }, + + __onDialogShow: function __onDialogShow () { + var el = document.activeElement; + // IE can have null document.activeElement + if ( + (el === null || el.id !== this.targetUid) && + this.$refs.target !== el && + this.$refs.target !== void 0 + ) { + this.$refs.target.focus(); + } + + this.__setVirtualScrollSize(); + }, + + __closeMenu: function __closeMenu () { + if (this.__optionScopeCache !== void 0) { + this.__optionScopeCache.optionEls = []; + } + + if (this.dialog === true) { + return + } + + this.optionIndex = -1; + + if (this.menu === true) { + this.menu = false; + } + + if (this.focused === false) { + clearTimeout(this.filterId); + this.filterId = void 0; + + if (this.innerLoading === true) { + this.$emit('filter-abort'); + this.innerLoading = false; + this.innerLoadingIndicator = false; + } + } + }, + + showPopup: function showPopup (e) { + var this$1$1 = this; + + if (this.editable !== true) { + return + } + + if (this.hasDialog === true) { + this.__onControlFocusin(e); + this.dialog = true; + this.$nextTick(function () { + this$1$1.__focus(); + }); + } + else { + this.__focus(); + } + + if (this.qListeners.filter !== void 0) { + this.filter(this.inputValue); + } + else if (this.noOptions !== true || this.$scopedSlots['no-option'] !== void 0) { + this.menu = true; + } + }, + + hidePopup: function hidePopup () { + this.dialog = false; + this.__closeMenu(); + }, + + __resetInputValue: function __resetInputValue () { + this.useInput === true && this.updateInputValue( + this.multiple !== true && this.fillInput === true && this.innerValue.length > 0 + ? this.getOptionLabel(this.innerValue[0]) || '' + : '', + true, + true + ); + }, + + __updateMenu: function __updateMenu (show) { + var this$1$1 = this; + + var optionIndex = -1; + + if (show === true) { + if (this.innerValue.length > 0) { + var val = this.getOptionValue(this.innerValue[0]); + optionIndex = this.options.findIndex(function (v) { return isDeepEqual(this$1$1.getOptionValue(v), val); }); + } + + this.__resetVirtualScroll(optionIndex); + } + + this.setOptionIndex(optionIndex); + }, + + __onPreRender: function __onPreRender () { + this.hasDialog = this.$q.platform.is.mobile !== true && this.behavior !== 'dialog' + ? false + : this.behavior !== 'menu' && ( + this.useInput === true + ? this.$scopedSlots['no-option'] !== void 0 || this.qListeners.filter !== void 0 || this.noOptions === false + : true + ); + }, + + updateMenuPosition: function updateMenuPosition () { + if (this.dialog === false && this.$refs.menu !== void 0) { + this.$refs.menu.updatePosition(); + } + } + }, + + beforeMount: function beforeMount () { + this.__optionScopeCache = { + optionSlot: this.$scopedSlots.option, + options: [], + optionEls: [] + }; + }, + + beforeDestroy: function beforeDestroy () { + this.__optionScopeCache = void 0; + clearTimeout(this.inputTimer); + } + }); + + var skeletonTypes = [ + 'text', 'rect', 'circle', + 'QBtn', 'QBadge', 'QChip', 'QToolbar', + 'QCheckbox', 'QRadio', 'QToggle', + 'QSlider', 'QRange', 'QInput', + 'QAvatar' + ]; + + var skeletonAnimations = [ + 'wave', 'pulse', 'pulse-x', 'pulse-y', 'fade', 'blink', 'none' + ]; + + var QSkeleton = Vue__default["default"].extend({ + name: 'QSkeleton', + + mixins: [ DarkMixin, TagMixin, ListenersMixin ], + + props: { + type: { + type: String, + validator: function (v) { return skeletonTypes.includes(v); }, + default: 'rect' + }, + + animation: { + type: String, + validator: function (v) { return skeletonAnimations.includes(v); }, + default: 'wave' + }, + + square: Boolean, + bordered: Boolean, + + size: String, + width: String, + height: String + }, + + computed: { + style: function style () { + return this.size !== void 0 + ? { width: this.size, height: this.size } + : { width: this.width, height: this.height } + }, + + classes: function classes () { + return "q-skeleton--" + (this.darkSuffix) + " q-skeleton--type-" + (this.type) + + (this.animation !== 'none' ? (" q-skeleton--anim q-skeleton--anim-" + (this.animation)) : '') + + (this.square === true ? ' q-skeleton--square' : '') + + (this.bordered === true ? ' q-skeleton--bordered' : '') + } + }, + + render: function render (h) { + return h(this.tag, { + staticClass: 'q-skeleton', + class: this.classes, + style: this.style, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var slotsDef = [ + ['left', 'center', 'start', 'width'], + ['right', 'center', 'end', 'width'], + ['top', 'start', 'center', 'height'], + ['bottom', 'end', 'center', 'height'] + ]; + + var QSlideItem = Vue__default["default"].extend({ + name: 'QSlideItem', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + leftColor: String, + rightColor: String, + topColor: String, + bottomColor: String + }, + + directives: { + TouchPan: TouchPan + }, + + computed: { + langDir: function langDir () { + return this.$q.lang.rtl === true + ? { left: 'right', right: 'left' } + : { left: 'left', right: 'right' } + } + }, + + methods: { + reset: function reset () { + this.$refs.content.style.transform = 'translate(0,0)'; + this.__emitSlide(this.__showing, 0, true); + }, + + __emitSlide: function __emitSlide (side, ratio, isReset) { + this.qListeners.slide !== void 0 && this.$emit('slide', { side: side, ratio: ratio, isReset: isReset }); + }, + + __pan: function __pan (evt) { + var this$1$1 = this; + + var node = this.$refs.content; + + if (evt.isFinal) { + node.classList.remove('no-transition'); + + if (this.__scale === 1) { + node.style.transform = "translate" + (this.__axis) + "(" + (this.__dir * 100) + "%)"; + + this.timer = setTimeout(function () { + this$1$1.$emit(this$1$1.__showing, { reset: this$1$1.reset }); + this$1$1.$emit('action', { side: this$1$1.__showing, reset: this$1$1.reset }); + }, 230); + } + else { + node.style.transform = 'translate(0,0)'; + this.__emitSlide(this.__showing, 0, true); + } + + return + } + + if (evt.isFirst) { + this.__dir = null; + this.__size = { left: 0, right: 0, top: 0, bottom: 0 }; + this.__scale = 0; + + node.classList.add('no-transition'); + + slotsDef.forEach(function (slot) { + if (this$1$1.$scopedSlots[slot[0]] !== void 0) { + var node = this$1$1.$refs[slot[0] + 'Content']; + node.style.transform = 'scale(1)'; + this$1$1.__size[slot[0]] = node.getBoundingClientRect()[slot[3]]; + } + }); + + this.__axis = (evt.direction === 'up' || evt.direction === 'down') + ? 'Y' + : 'X'; + } + else { + evt.direction = this.__axis === 'X' + ? evt.offset.x < 0 ? 'left' : 'right' + : evt.offset.y < 0 ? 'up' : 'down'; + } + + if ( + (this.$scopedSlots.left === void 0 && evt.direction === this.langDir.right) || + (this.$scopedSlots.right === void 0 && evt.direction === this.langDir.left) || + (this.$scopedSlots.top === void 0 && evt.direction === 'down') || + (this.$scopedSlots.bottom === void 0 && evt.direction === 'up') + ) { + node.style.transform = 'translate(0,0)'; + return + } + + var showing, dir, dist; + + if (this.__axis === 'X') { + dir = evt.direction === 'left' ? -1 : 1; + showing = dir === 1 ? this.langDir.left : this.langDir.right; + dist = evt.distance.x; + } + else { + dir = evt.direction === 'up' ? -2 : 2; + showing = dir === 2 ? 'top' : 'bottom'; + dist = evt.distance.y; + } + + if (this.__dir !== null && Math.abs(dir) !== Math.abs(this.__dir)) { + return + } + + if (this.__dir !== dir) { + ['left', 'right', 'top', 'bottom'].forEach(function (d) { + if (this$1$1.$refs[d] !== void 0) { + this$1$1.$refs[d].style.visibility = showing === d + ? 'visible' + : 'hidden'; + } + }); + this.__showing = showing; + this.__dir = dir; + } + + this.__scale = Math.max(0, Math.min(1, (dist - 40) / this.__size[showing])); + + node.style.transform = "translate" + (this.__axis) + "(" + (dist * dir / Math.abs(dir)) + "px)"; + this.$refs[(showing + "Content")].style.transform = "scale(" + (this.__scale) + ")"; + + this.__emitSlide(showing, this.__scale, false); + } + }, + + render: function render (h) { + var this$1$1 = this; + + var + content = [], + slots = { + left: this.$scopedSlots[this.langDir.right] !== void 0, + right: this.$scopedSlots[this.langDir.left] !== void 0, + up: this.$scopedSlots.bottom !== void 0, + down: this.$scopedSlots.top !== void 0 + }, + dirs = Object.keys(slots).filter(function (key) { return slots[key] === true; }); + + slotsDef.forEach(function (slot) { + var dir = slot[0]; + + if (this$1$1.$scopedSlots[dir] !== void 0) { + content.push( + h('div', { + ref: dir, + class: "q-slide-item__" + dir + " absolute-full row no-wrap items-" + (slot[1]) + " justify-" + (slot[2]) + + (this$1$1[dir + 'Color'] !== void 0 ? (" bg-" + (this$1$1[dir + 'Color'])) : '') + }, [ + h('div', { ref: dir + 'Content' }, this$1$1.$scopedSlots[dir]()) + ]) + ); + } + }); + + content.push( + h('div', { + ref: 'content', + key: 'content', + staticClass: 'q-slide-item__content', + directives: dirs.length > 0 + ? cacheWithFn(this, 'dir#' + dirs.join(''), function () { + var modifiers = { + prevent: true, + stop: true, + mouse: true + }; + + dirs.forEach(function (dir) { + modifiers[dir] = true; + }); + + return [{ + name: 'touch-pan', + value: this$1$1.__pan, + modifiers: modifiers + }] + }) + : null + }, slot(this, 'default')) + ); + + return h('div', { + staticClass: 'q-slide-item q-item-type overflow-hidden' + + " q-slide-item--" + (this.darkSuffix) + " q-" + (this.darkSuffix), + on: Object.assign({}, this.qListeners) + }, content) + }, + + beforeDestroy: function beforeDestroy () { + clearTimeout(this.timer); + } + }); + + var QSpace = Vue__default["default"].extend({ + name: 'QSpace', + + mixins: [ ListenersMixin ], + + render: function render (h) { + return h('div', { + staticClass: 'q-space', + on: Object.assign({}, this.qListeners) + }) + } + }); + + var QSpinnerAudio = Vue__default["default"].extend({ + name: 'QSpinnerAudio', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 55 80', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'matrix(1 0 0 -1 0 80)' + } + }, [ + h('rect', { + attrs: { + 'width': '10', + 'height': '20', + 'rx': '3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '4.3s', + 'values': '20;45;57;80;64;32;66;45;64;23;66;13;64;56;34;34;2;23;76;79;20', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '15', + 'width': '10', + 'height': '80', + 'rx': '3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '2s', + 'values': '80;55;33;5;75;23;73;33;12;14;60;80', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '30', + 'width': '10', + 'height': '50', + 'rx': '3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '1.4s', + 'values': '50;34;78;23;56;23;34;76;80;54;21;50', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '45', + 'width': '10', + 'height': '30', + 'rx': '3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '2s', + 'values': '30;45;13;80;56;72;45;76;34;23;67;30', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerBall = Vue__default["default"].extend({ + name: 'QSpinnerBall', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'stroke': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 57 57', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'translate(1 1)', + 'stroke-width': '2', + 'fill': 'none', + 'fill-rule': 'evenodd' + } + }, [ + h('circle', { + attrs: { + 'cx': '5', + 'cy': '50', + 'r': '5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'cy', + 'begin': '0s', + 'dur': '2.2s', + 'values': '50;5;50;50', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'cx', + 'begin': '0s', + 'dur': '2.2s', + 'values': '5;27;49;5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '27', + 'cy': '5', + 'r': '5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'cy', + 'begin': '0s', + 'dur': '2.2s', + 'from': '5', + 'to': '5', + 'values': '5;50;50;5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'cx', + 'begin': '0s', + 'dur': '2.2s', + 'from': '27', + 'to': '27', + 'values': '27;49;5;27', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '49', + 'cy': '50', + 'r': '5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'cy', + 'begin': '0s', + 'dur': '2.2s', + 'values': '50;50;5;50', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'cx', + 'from': '49', + 'to': '49', + 'begin': '0s', + 'dur': '2.2s', + 'values': '49;5;27;49', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerBars = Vue__default["default"].extend({ + name: 'QSpinnerBars', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 135 140', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('rect', { + attrs: { + 'y': '10', + 'width': '15', + 'height': '120', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0.5s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0.5s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '30', + 'y': '10', + 'width': '15', + 'height': '120', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0.25s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0.25s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '60', + 'width': '15', + 'height': '140', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '90', + 'y': '10', + 'width': '15', + 'height': '120', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0.25s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0.25s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '120', + 'y': '10', + 'width': '15', + 'height': '120', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0.5s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0.5s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerBox = Vue__default["default"].extend({ + name: 'QSpinnerBox', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('rect', { + attrs: { + 'x': '25', + 'y': '25', + 'width': '50', + 'height': '50', + 'fill': 'none', + 'stroke-width': '4', + 'stroke': 'currentColor' + } + }, [ + h('animateTransform', { + attrs: { + 'id': 'spinnerBox', + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '180 50 50', + 'dur': '0.5s', + 'begin': 'rectBox.end' + } + }) + ]), + h('rect', { + attrs: { + 'x': '27', + 'y': '27', + 'width': '46', + 'height': '50', + 'fill': 'currentColor' + } + }, [ + h('animate', { + attrs: { + 'id': 'rectBox', + 'attributeName': 'height', + 'begin': '0s;spinnerBox.end', + 'dur': '1.3s', + 'from': '50', + 'to': '0', + 'fill': 'freeze' + } + }) + ]) + ]) + } + }); + + var QSpinnerClock = Vue__default["default"].extend({ + name: 'QSpinnerClock', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('circle', { + attrs: { + 'cx': '50', + 'cy': '50', + 'r': '48', + 'fill': 'none', + 'stroke-width': '4', + 'stroke-miterlimit': '10', + 'stroke': 'currentColor' + } + }), + h('line', { + attrs: { + 'stroke-linecap': 'round', + 'stroke-width': '4', + 'stroke-miterlimit': '10', + 'stroke': 'currentColor', + 'x1': '50', + 'y1': '50', + 'x2': '85', + 'y2': '50.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '2s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'stroke-linecap': 'round', + 'stroke-width': '4', + 'stroke-miterlimit': '10', + 'stroke': 'currentColor', + 'x1': '50', + 'y1': '50', + 'x2': '49.5', + 'y2': '74' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '15s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerComment = Vue__default["default"].extend({ + name: 'QSpinnerComment', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('rect', { + attrs: { + 'x': '0', + 'y': '0', + 'width': '100', + 'height': '100', + 'fill': 'none' + } + }), + h('path', { + attrs: { + 'd': 'M78,19H22c-6.6,0-12,5.4-12,12v31c0,6.6,5.4,12,12,12h37.2c0.4,3,1.8,5.6,3.7,7.6c2.4,2.5,5.1,4.1,9.1,4 c-1.4-2.1-2-7.2-2-10.3c0-0.4,0-0.8,0-1.3h8c6.6,0,12-5.4,12-12V31C90,24.4,84.6,19,78,19z', + 'fill': 'currentColor' + } + }), + h('circle', { + attrs: { + 'cx': '30', + 'cy': '47', + 'r': '5', + 'fill': '#fff' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'values': '0;1;1', + 'keyTimes': '0;0.2;1', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '50', + 'cy': '47', + 'r': '5', + 'fill': '#fff' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'values': '0;0;1;1', + 'keyTimes': '0;0.2;0.4;1', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '70', + 'cy': '47', + 'r': '5', + 'fill': '#fff' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'values': '0;0;1;1', + 'keyTimes': '0;0.4;0.6;1', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerCube = Vue__default["default"].extend({ + name: 'QSpinnerCube', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('rect', { + attrs: { + 'x': '0', + 'y': '0', + 'width': '100', + 'height': '100', + 'fill': 'none' + } + }), + h('g', { + attrs: { + 'transform': 'translate(25 25)' + } + }, [ + h('rect', { + attrs: { + 'x': '-20', + 'y': '-20', + 'width': '40', + 'height': '40', + 'fill': 'currentColor', + 'opacity': '0.9' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '1.5', + 'to': '1', + 'repeatCount': 'indefinite', + 'begin': '0s', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.2 0.8 0.2 0.8', + 'keyTimes': '0;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(75 25)' + } + }, [ + h('rect', { + attrs: { + 'x': '-20', + 'y': '-20', + 'width': '40', + 'height': '40', + 'fill': 'currentColor', + 'opacity': '0.8' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '1.5', + 'to': '1', + 'repeatCount': 'indefinite', + 'begin': '0.1s', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.2 0.8 0.2 0.8', + 'keyTimes': '0;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(25 75)' + } + }, [ + h('rect', { + staticClass: 'cube', + attrs: { + 'x': '-20', + 'y': '-20', + 'width': '40', + 'height': '40', + 'fill': 'currentColor', + 'opacity': '0.7' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '1.5', + 'to': '1', + 'repeatCount': 'indefinite', + 'begin': '0.3s', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.2 0.8 0.2 0.8', + 'keyTimes': '0;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(75 75)' + } + }, [ + h('rect', { + staticClass: 'cube', + attrs: { + 'x': '-20', + 'y': '-20', + 'width': '40', + 'height': '40', + 'fill': 'currentColor', + 'opacity': '0.6' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '1.5', + 'to': '1', + 'repeatCount': 'indefinite', + 'begin': '0.2s', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.2 0.8 0.2 0.8', + 'keyTimes': '0;1' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerDots = Vue__default["default"].extend({ + name: 'QSpinnerDots', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 120 30', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('circle', { + attrs: { + 'cx': '15', + 'cy': '15', + 'r': '15' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'from': '15', + 'to': '15', + 'begin': '0s', + 'dur': '0.8s', + 'values': '15;9;15', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'from': '1', + 'to': '1', + 'begin': '0s', + 'dur': '0.8s', + 'values': '1;.5;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '60', + 'cy': '15', + 'r': '9', + 'fill-opacity': '.3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'from': '9', + 'to': '9', + 'begin': '0s', + 'dur': '0.8s', + 'values': '9;15;9', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'from': '.5', + 'to': '.5', + 'begin': '0s', + 'dur': '0.8s', + 'values': '.5;1;.5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '105', + 'cy': '15', + 'r': '15' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'from': '15', + 'to': '15', + 'begin': '0s', + 'dur': '0.8s', + 'values': '15;9;15', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'from': '1', + 'to': '1', + 'begin': '0s', + 'dur': '0.8s', + 'values': '1;.5;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerFacebook = Vue__default["default"].extend({ + name: 'QSpinnerFacebook', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'xmlns': 'http://www.w3.org/2000/svg', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('g', { + attrs: { + 'transform': 'translate(20 50)' + } + }, [ + h('rect', { + attrs: { + 'x': '-10', + 'y': '-30', + 'width': '20', + 'height': '60', + 'fill': 'currentColor', + 'opacity': '0.6' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '2', + 'to': '1', + 'begin': '0s', + 'repeatCount': 'indefinite', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.1 0.9 0.4 1', + 'keyTimes': '0;1', + 'values': '2;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(50 50)' + } + }, [ + h('rect', { + attrs: { + 'x': '-10', + 'y': '-30', + 'width': '20', + 'height': '60', + 'fill': 'currentColor', + 'opacity': '0.8' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '2', + 'to': '1', + 'begin': '0.1s', + 'repeatCount': 'indefinite', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.1 0.9 0.4 1', + 'keyTimes': '0;1', + 'values': '2;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(80 50)' + } + }, [ + h('rect', { + attrs: { + 'x': '-10', + 'y': '-30', + 'width': '20', + 'height': '60', + 'fill': 'currentColor', + 'opacity': '0.9' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '2', + 'to': '1', + 'begin': '0.2s', + 'repeatCount': 'indefinite', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.1 0.9 0.4 1', + 'keyTimes': '0;1', + 'values': '2;1' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerGears = Vue__default["default"].extend({ + name: 'QSpinnerGears', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'translate(-20,-20)' + } + }, [ + h('path', { + attrs: { + 'd': 'M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z', + 'fill': 'currentColor' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '90 50 50', + 'to': '0 50 50', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(20,20) rotate(15 50 50)' + } + }, [ + h('path', { + attrs: { + 'd': 'M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z', + 'fill': 'currentColor' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '90 50 50', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerGrid = Vue__default["default"].extend({ + name: 'QSpinnerGrid', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 105 105', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('circle', { + attrs: { + 'cx': '12.5', + 'cy': '12.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '0s', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '12.5', + 'cy': '52.5', + 'r': '12.5', + 'fill-opacity': '.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '100ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '52.5', + 'cy': '12.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '300ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '52.5', + 'cy': '52.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '600ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '92.5', + 'cy': '12.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '800ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '92.5', + 'cy': '52.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '400ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '12.5', + 'cy': '92.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '700ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '52.5', + 'cy': '92.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '500ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '92.5', + 'cy': '92.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '200ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerHearts = Vue__default["default"].extend({ + name: 'QSpinnerHearts', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 140 64', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('path', { + attrs: { + 'd': 'M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.716-6.002 11.47-7.65 17.304-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z', + 'fill-opacity': '.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '0s', + 'dur': '1.4s', + 'values': '0.5;1;0.5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.593-2.32 17.308 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z', + 'fill-opacity': '.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '0.7s', + 'dur': '1.4s', + 'values': '0.5;1;0.5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z' + } + }) + ]) + } + }); + + var QSpinnerHourglass = Vue__default["default"].extend({ + name: 'QSpinnerHourglass', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', [ + h('path', { + staticClass: 'glass', + attrs: { + 'fill': 'none', + 'stroke': 'currentColor', + 'stroke-width': '5', + 'stroke-miterlimit': '10', + 'd': 'M58.4,51.7c-0.9-0.9-1.4-2-1.4-2.3s0.5-0.4,1.4-1.4 C70.8,43.8,79.8,30.5,80,15.5H70H30H20c0.2,15,9.2,28.1,21.6,32.3c0.9,0.9,1.4,1.2,1.4,1.5s-0.5,1.6-1.4,2.5 C29.2,56.1,20.2,69.5,20,85.5h10h40h10C79.8,69.5,70.8,55.9,58.4,51.7z' + } + }), + h('clipPath', { + attrs: { + 'id': 'uil-hourglass-clip1' + } + }, [ + h('rect', { + staticClass: 'clip', + attrs: { + 'x': '15', + 'y': '20', + 'width': '70', + 'height': '25' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'from': '25', + 'to': '0', + 'dur': '1s', + 'repeatCount': 'indefinite', + 'values': '25;0;0', + 'keyTimes': '0;0.5;1' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'from': '20', + 'to': '45', + 'dur': '1s', + 'repeatCount': 'indefinite', + 'values': '20;45;45', + 'keyTimes': '0;0.5;1' + } + }) + ]) + ]), + h('clipPath', { + attrs: { + 'id': 'uil-hourglass-clip2' + } + }, [ + h('rect', { + staticClass: 'clip', + attrs: { + 'x': '15', + 'y': '55', + 'width': '70', + 'height': '25' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'from': '0', + 'to': '25', + 'dur': '1s', + 'repeatCount': 'indefinite', + 'values': '0;25;25', + 'keyTimes': '0;0.5;1' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'from': '80', + 'to': '55', + 'dur': '1s', + 'repeatCount': 'indefinite', + 'values': '80;55;55', + 'keyTimes': '0;0.5;1' + } + }) + ]) + ]), + h('path', { + staticClass: 'sand', + attrs: { + 'd': 'M29,23c3.1,11.4,11.3,19.5,21,19.5S67.9,34.4,71,23H29z', + 'clip-path': 'url(#uil-hourglass-clip1)', + 'fill': 'currentColor' + } + }), + h('path', { + staticClass: 'sand', + attrs: { + 'd': 'M71.6,78c-3-11.6-11.5-20-21.5-20s-18.5,8.4-21.5,20H71.6z', + 'clip-path': 'url(#uil-hourglass-clip2)', + 'fill': 'currentColor' + } + }), + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '180 50 50', + 'repeatCount': 'indefinite', + 'dur': '1s', + 'values': '0 50 50;0 50 50;180 50 50', + 'keyTimes': '0;0.7;1' + } + }) + ]) + ]) + } + }); + + var QSpinnerInfinity = Vue__default["default"].extend({ + name: 'QSpinnerInfinity', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('path', { + attrs: { + 'd': 'M24.3,30C11.4,30,5,43.3,5,50s6.4,20,19.3,20c19.3,0,32.1-40,51.4-40C88.6,30,95,43.3,95,50s-6.4,20-19.3,20C56.4,70,43.6,30,24.3,30z', + 'fill': 'none', + 'stroke': 'currentColor', + 'stroke-width': '8', + 'stroke-dasharray': '10.691205342610678 10.691205342610678', + 'stroke-dashoffset': '0' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-dashoffset', + 'from': '0', + 'to': '21.382410685221355', + 'begin': '0', + 'dur': '2s', + 'repeatCount': 'indefinite', + 'fill': 'freeze' + } + }) + ]) + ]) + } + }); + + var QSpinnerIos = Vue__default["default"].extend({ + name: 'QSpinnerIos', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'stroke': 'currentColor', + 'fill': 'currentColor', + 'viewBox': '0 0 64 64' + } + }, [ + h('g', { + attrs: { + 'stroke-width': '4', + 'stroke-linecap': 'round' + } + }, [ + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(180)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(210)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(240)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(270)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(300)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(330)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(0)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(30)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(60)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(90)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(120)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(150)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerOrbit = Vue__default["default"].extend({ + name: 'QSpinnerOrbit', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('circle', { + attrs: { + 'cx': '50', + 'cy': '50', + 'r': '44', + 'fill': 'none', + 'stroke-width': '4', + 'stroke-opacity': '.5', + 'stroke': 'currentColor' + } + }), + h('circle', { + attrs: { + 'cx': '8', + 'cy': '54', + 'r': '6', + 'fill': 'currentColor', + 'stroke-width': '3', + 'stroke': 'currentColor' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 48', + 'to': '360 50 52', + 'dur': '2s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerOval = Vue__default["default"].extend({ + name: 'QSpinnerOval', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'stroke': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 38 38', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'translate(1 1)', + 'stroke-width': '2', + 'fill': 'none', + 'fill-rule': 'evenodd' + } + }, [ + h('circle', { + attrs: { + 'stroke-opacity': '.5', + 'cx': '18', + 'cy': '18', + 'r': '18' + } + }), + h('path', { + attrs: { + 'd': 'M36 18c0-9.94-8.06-18-18-18' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 18 18', + 'to': '360 18 18', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerPie = Vue__default["default"].extend({ + name: 'QSpinnerPie', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('path', { + attrs: { + 'd': 'M0 50A50 50 0 0 1 50 0L50 50L0 50', + 'fill': 'currentColor', + 'opacity': '0.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '0.8s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M50 0A50 50 0 0 1 100 50L50 50L50 0', + 'fill': 'currentColor', + 'opacity': '0.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '1.6s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M100 50A50 50 0 0 1 50 100L50 50L100 50', + 'fill': 'currentColor', + 'opacity': '0.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '2.4s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M50 100A50 50 0 0 1 0 50L50 50L50 100', + 'fill': 'currentColor', + 'opacity': '0.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '3.2s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerPuff = Vue__default["default"].extend({ + name: 'QSpinnerPuff', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'stroke': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 44 44', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'fill': 'none', + 'fill-rule': 'evenodd', + 'stroke-width': '2' + } + }, [ + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '1' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '0s', + 'dur': '1.8s', + 'values': '1; 20', + 'calcMode': 'spline', + 'keyTimes': '0; 1', + 'keySplines': '0.165, 0.84, 0.44, 1', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'begin': '0s', + 'dur': '1.8s', + 'values': '1; 0', + 'calcMode': 'spline', + 'keyTimes': '0; 1', + 'keySplines': '0.3, 0.61, 0.355, 1', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '1' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '-0.9s', + 'dur': '1.8s', + 'values': '1; 20', + 'calcMode': 'spline', + 'keyTimes': '0; 1', + 'keySplines': '0.165, 0.84, 0.44, 1', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'begin': '-0.9s', + 'dur': '1.8s', + 'values': '1; 0', + 'calcMode': 'spline', + 'keyTimes': '0; 1', + 'keySplines': '0.3, 0.61, 0.355, 1', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerRadio = Vue__default["default"].extend({ + name: 'QSpinnerRadio', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'scale(0.55)' + } + }, [ + h('circle', { + attrs: { + 'cx': '30', + 'cy': '150', + 'r': '30', + 'fill': 'currentColor' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'dur': '1s', + 'begin': '0', + 'repeatCount': 'indefinite', + 'keyTimes': '0;0.5;1', + 'values': '0;1;1' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z', + 'fill': 'currentColor' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'dur': '1s', + 'begin': '0.1', + 'repeatCount': 'indefinite', + 'keyTimes': '0;0.5;1', + 'values': '0;1;1' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z', + 'fill': 'currentColor' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'dur': '1s', + 'begin': '0.2', + 'repeatCount': 'indefinite', + 'keyTimes': '0;0.5;1', + 'values': '0;1;1' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerRings = Vue__default["default"].extend({ + name: 'QSpinnerRings', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'stroke': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 45 45', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'fill': 'none', + 'fill-rule': 'evenodd', + 'transform': 'translate(1 1)', + 'stroke-width': '2' + } + }, [ + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '1.5s', + 'dur': '3s', + 'values': '6;22', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'begin': '1.5s', + 'dur': '3s', + 'values': '1;0', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-width', + 'begin': '1.5s', + 'dur': '3s', + 'values': '2;0', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '3s', + 'dur': '3s', + 'values': '6;22', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'begin': '3s', + 'dur': '3s', + 'values': '1;0', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-width', + 'begin': '3s', + 'dur': '3s', + 'values': '2;0', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '8' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '0s', + 'dur': '1.5s', + 'values': '6;1;2;3;4;5;6', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerTail = Vue__default["default"].extend({ + name: 'QSpinnerTail', + + mixins: [mixin], + + render: function render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 38 38', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('defs', [ + h('linearGradient', { + attrs: { + 'x1': '8.042%', + 'y1': '0%', + 'x2': '65.682%', + 'y2': '23.865%', + 'id': 'a' + } + }, [ + h('stop', { + attrs: { + 'stop-color': 'currentColor', + 'stop-opacity': '0', + 'offset': '0%' + } + }), + h('stop', { + attrs: { + 'stop-color': 'currentColor', + 'stop-opacity': '.631', + 'offset': '63.146%' + } + }), + h('stop', { + attrs: { + 'stop-color': 'currentColor', + 'offset': '100%' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(1 1)', + 'fill': 'none', + 'fill-rule': 'evenodd' + } + }, [ + h('path', { + attrs: { + 'd': 'M36 18c0-9.94-8.06-18-18-18', + 'stroke': 'url(#a)', + 'stroke-width': '2' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 18 18', + 'to': '360 18 18', + 'dur': '0.9s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'fill': 'currentColor', + 'cx': '36', + 'cy': '18', + 'r': '1' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 18 18', + 'to': '360 18 18', + 'dur': '0.9s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var keyDirections = { + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down' + }; + + var QSplitter = Vue__default["default"].extend({ + name: 'QSplitter', + + mixins: [ DarkMixin, ListenersMixin ], + + directives: { + TouchPan: TouchPan + }, + + props: { + value: { + type: Number, + required: true + }, + reverse: Boolean, + unit: { + type: String, + default: '%', + validator: function (v) { return [ '%', 'px' ].includes(v); } + }, + + limits: { + type: Array, + validator: function (v) { + if (v.length !== 2) { return false } + if (typeof v[0] !== 'number' || typeof v[1] !== 'number') { return false } + return v[0] >= 0 && v[0] <= v[1] + } + }, + + emitImmediately: Boolean, + + horizontal: Boolean, + disable: Boolean, + + tabindex: [String, Number], + + beforeClass: [Array, String, Object], + afterClass: [Array, String, Object], + + separatorClass: [Array, String, Object], + separatorStyle: [Array, String, Object] + }, + + watch: { + value: { + immediate: true, + handler: function handler (v) { + this.__normalize(v, this.computedLimits); + } + }, + + limits: { + deep: true, + handler: function handler () { + var this$1$1 = this; + + this.$nextTick(function () { + this$1$1.__normalize(this$1$1.value, this$1$1.computedLimits); + }); + } + } + }, + + computed: { + classes: function classes () { + return (this.horizontal === true ? 'column' : 'row') + + " q-splitter--" + (this.horizontal === true ? 'horizontal' : 'vertical') + + " q-splitter--" + (this.disable === true ? 'disabled' : 'workable') + + " q-splitter--" + (this.darkSuffix) + }, + + prop: function prop () { + return this.horizontal === true ? 'height' : 'width' + }, + + side: function side () { + return this.reverse !== true ? 'before' : 'after' + }, + + computedLimits: function computedLimits () { + return this.limits !== void 0 + ? this.limits + : (this.unit === '%' ? [ 10, 90 ] : [ 50, Infinity ]) + }, + + styles: function styles () { + var obj, obj$1; + + return ( obj$1 = {}, obj$1[this.side] = ( obj = {}, obj[this.prop] = this.__getCSSValue(this.value), obj ), obj$1 ) + }, + + separatorDirectives: function separatorDirectives () { + var obj; + + if (this.disable !== true) { + return [{ + name: 'touch-pan', + value: this.__pan, + modifiers: ( obj = {}, obj[ this.horizontal === true ? 'vertical' : 'horizontal' ] = true, obj.prevent = true, obj.stop = true, obj.mouse = true, obj.mouseAllDir = true, obj ) + }] + } + }, + + separatorAttrs: function separatorAttrs () { + var attrs = this.disable === true + ? { tabindex: -1, 'aria-disabled': 'true' } + : { tabindex: this.tabindex || 0 }; + var ariaValue = this.__getAriaValue(this.value); + + return Object.assign({}, {role: 'separator', + 'aria-orientation': this.horizontal === true ? 'horizontal' : 'vertical', + 'aria-controls': this.targetUid, + 'aria-valuemin': this.computedLimits[0], + 'aria-valuemax': this.computedLimits[1], + 'aria-valuenow': ariaValue.now, + 'aria-valuetext': ariaValue.text}, + attrs) + }, + + separatorEvents: function separatorEvents () { + return this.disable === true + ? void 0 + : { keydown: this.__panKeydown } + } + }, + + methods: { + __panStart: function __panStart () { + var size = this.$el.getBoundingClientRect()[this.prop]; + + this.__dir = this.horizontal === true ? 'up' : 'left'; + this.__maxValue = this.unit === '%' ? 100 : size; + this.__value = Math.min(this.__maxValue, this.computedLimits[1], Math.max(this.computedLimits[0], this.value)); + this.__multiplier = (this.reverse !== true ? 1 : -1) * + (this.horizontal === true ? 1 : (this.$q.lang.rtl === true ? -1 : 1)) * + (this.unit === '%' ? (size === 0 ? 0 : 100 / size) : 1); + + this.$el.classList.add('q-splitter--active'); + }, + + __panProgress: function __panProgress (val) { + this.__normalized = Math.min(this.__maxValue, this.computedLimits[1], Math.max(this.computedLimits[0], val)); + + this.$refs[this.side].style[this.prop] = this.__getCSSValue(this.__normalized); + + var ariaValue = this.__getAriaValue(this.__normalized); + this.$refs.separator.setAttribute('aria-valuenow', ariaValue.now); + this.$refs.separator.setAttribute('aria-valuetext', ariaValue.text); + + if (this.emitImmediately === true && this.value !== this.__normalized) { + this.$emit('input', this.__normalized); + } + }, + + __panEnd: function __panEnd () { + this.__panCleanup !== void 0 && this.__panCleanup(); + + if (this.__normalized !== this.value) { + this.$emit('input', this.__normalized); + } + + this.$el.classList.remove('q-splitter--active'); + }, + + __pan: function __pan (evt) { + if (evt.isFinal === true) { + this.__panEnd(); + return + } + + if (evt.isFirst === true) { + this.__panStart(); + return + } + + var val = this.__value + + this.__multiplier * + (evt.direction === this.__dir ? -1 : 1) * + evt.distance[this.horizontal === true ? 'y' : 'x']; + + this.__panProgress(val); + }, + + __panKeydown: function __panKeydown (evt) { + var this$1$1 = this; + + this.qListeners.keydown !== void 0 && this.$emit('keydown', evt); + + if ( + this.disable === true || + evt.defaultPrevented === true || + (this.horizontal !== true && [ 37, 39 ].indexOf(evt.keyCode) === -1) || + (this.horizontal === true && [ 38, 40 ].indexOf(evt.keyCode) === -1) + ) { + return + } + + stopAndPrevent(evt); + + if (this.__panCleanup === void 0) { + document.addEventListener('keyup', this.__panEnd); + document.addEventListener('focusout', this.__panEnd); + + this.__panCleanup = function () { + this$1$1.__panCleanup = void 0; + document.removeEventListener('keyup', this$1$1.__panEnd); + document.removeEventListener('focusout', this$1$1.__panEnd); + + this$1$1.__panEnd(); + }; + + this.__panStart(); + this.__normalized = this.__value; + } + + var direction = keyDirections[evt.keyCode]; + + var val = this.__normalized + + this.__multiplier * + (direction === this.__dir ? -1 : 1) * + (evt.shiftKey === true ? 1 : 10); + + this.__panProgress(val); + }, + + __normalize: function __normalize (val, limits) { + if (val < limits[0]) { + this.$emit('input', limits[0]); + } + else if (val > limits[1]) { + this.$emit('input', limits[1]); + } + }, + + __getAriaValue: function __getAriaValue (value) { + var now = this.unit === '%' ? value : Math.round(value); + + return { + now: now, + text: (Math.round(now * 100) / 100) + this.unit + } + }, + + __getCSSValue: function __getCSSValue (value) { + return (this.unit === '%' ? value : Math.round(value)) + this.unit + } + }, + + created: function created () { + this.targetUid = "sp_" + (uid$3()); + }, + + beforeDestroy: function beforeDestroy () { + this.__panCleanup !== void 0 && this.__panCleanup(); + }, + + render: function render (h) { + var attrs = {}; + attrs[this.side] = { id: this.targetUid }; + + var child = [ + h('div', { + key: 'before', + ref: 'before', + staticClass: 'q-splitter__panel q-splitter__before' + (this.reverse === true ? ' col' : ''), + style: this.styles.before, + class: this.beforeClass, + attrs: attrs.before, + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'before')), + + h('div', { + staticClass: 'q-splitter__separator', + ref: 'separator', + style: this.separatorStyle, + class: this.separatorClass, + attrs: this.separatorAttrs, + on: this.separatorEvents + }, [ + h('div', { + staticClass: 'absolute-full q-splitter__separator-area', + directives: this.separatorDirectives + }, slot(this, 'separator')) + ]), + + h('div', { + key: 'after', + ref: 'after', + staticClass: 'q-splitter__panel q-splitter__after' + (this.reverse === true ? '' : ' col'), + style: this.styles.after, + class: this.afterClass, + attrs: attrs.after, + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'after')) + ]; + + return h('div', { + staticClass: 'q-splitter no-wrap', + class: this.classes, + on: Object.assign({}, this.qListeners) + }, mergeSlot(child, this, 'default')) + } + }); + + var StepHeader = Vue__default["default"].extend({ + name: 'StepHeader', + + mixins: [ AttrsMixin ], + + directives: { + Ripple: Ripple + }, + + props: { + stepper: {}, + step: {} + }, + + computed: { + isDisable: function isDisable () { + var opt = this.step.disable; + return opt === true || opt === '' + }, + + isActive: function isActive () { + return this.isDisable !== true && this.stepper.value === this.step.name + }, + + isError: function isError () { + var opt = this.step.error; + return opt === true || opt === '' + }, + + isDone: function isDone () { + var opt = this.step.done; + return opt === true || opt === '' + }, + + headerNav: function headerNav () { + var + opt = this.step.headerNav, + nav = opt === true || opt === '' || opt === void 0; + + return this.isDisable === false && + this.stepper.headerNav && + nav + }, + + hasPrefix: function hasPrefix () { + return this.step.prefix && this.icon === void 0 + }, + + icon: function icon () { + var icon; + + if (this.isActive === true) { + icon = this.__getProp('activeIcon', this.$q.iconSet.stepper.active); + } + else if (this.isError === true) { + icon = this.__getProp('errorIcon', this.$q.iconSet.stepper.error); + } + else if (this.isDone === true) { + icon = this.__getProp('doneIcon', this.$q.iconSet.stepper.done); + } + else { + icon = this.step.icon || this.stepper.inactiveIcon; + } + + return icon === 'none' ? void 0 : icon + }, + + color: function color () { + if (this.isError === true) { + return this.__getProp('errorColor') + } + + if (this.isActive === true) { + return this.__getProp('activeColor') + } + + return this.isDisable === false && this.isDone === true + ? this.__getProp('doneColor') + : this.step.color || this.stepper.inactiveColor + }, + + classes: function classes () { + return 'q-stepper__tab col-grow flex items-center no-wrap relative-position' + + (this.color !== void 0 ? (" text-" + (this.color)) : '') + + (this.isError === true + ? ' q-stepper__tab--error q-stepper__tab--error-with-' + (this.hasPrefix === true ? 'prefix' : 'icon') + : '') + + (this.isActive === true ? ' q-stepper__tab--active' : '') + + (this.isDone === true ? ' q-stepper__tab--done' : '') + + (this.headerNav === true ? ' q-stepper__tab--navigation q-focusable q-hoverable' : '') + + (this.isDisable === true ? ' q-stepper__tab--disabled' : '') + } + }, + + methods: { + activate: function activate () { + this.$refs.blurTarget !== void 0 && this.$refs.blurTarget.focus(); + this.isActive === false && this.stepper.goTo(this.step.name); + }, + + keyup: function keyup (e) { + if (e.keyCode === 13 && this.isActive === false) { + this.stepper.goTo(this.step.name); + } + }, + + __getProp: function __getProp (prop, fallback) { + return this.step[prop] || this.stepper[prop] || fallback + } + }, + + render: function render (h) { + var data = { class: this.classes }; + + if (this.stepper.headerNav === true) { + data.directives = [{ + name: 'ripple', + value: this.headerNav + }]; + } + + this.headerNav === true && Object.assign(data, { + key: 'headnavon', + on: cache(this, 'headnavon', { + click: this.activate, + keyup: this.keyup + }), + attrs: this.isDisable === true + ? { tabindex: -1, 'aria-disabled': 'true' } + : { tabindex: this.qAttrs.tabindex || 0 } + }); + + var child = [ + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: 'blurTarget' }), + + h('div', { staticClass: 'q-stepper__dot row flex-center q-stepper__line relative-position' }, [ + h('span', { staticClass: 'row flex-center' }, [ + this.hasPrefix === true + ? this.step.prefix + : h(QIcon, { props: { name: this.icon } }) + ]) + ]) + ]; + + if (this.step.title !== void 0 && this.step.title !== null) { + var content = [ + h('div', { staticClass: 'q-stepper__title' }, [ this.step.title ]) + ]; + + if (this.step.caption !== void 0 && this.step.caption !== null) { + content.push( + h('div', { staticClass: 'q-stepper__caption' }, [ this.step.caption ]) + ); + } + + child.push( + h('div', { + staticClass: 'q-stepper__label q-stepper__line relative-position' + }, content) + ); + } + + return h('div', data, child) + } + }); + + var attrs$1 = { role: 'tabpanel' }; + + var StepWrapper = Vue__default["default"].extend({ + name: 'QStepWrapper', + + render: function render (h) { + return h('div', { + staticClass: 'q-stepper__step-content' + }, [ + h('div', { + staticClass: 'q-stepper__step-inner' + }, slot(this, 'default')) + ]) + } + }); + + var QStep = Vue__default["default"].extend({ + name: 'QStep', + + inject: { + stepper: { + default: function default$1 () { + console.error('QStep needs to be child of QStepper'); + } + } + }, + + mixins: [ PanelChildMixin ], + + props: { + icon: String, + color: String, + title: { + type: String, + required: true + }, + caption: String, + prefix: [ String, Number ], + + doneIcon: String, + doneColor: String, + activeIcon: String, + activeColor: String, + errorIcon: String, + errorColor: String, + + headerNav: { + type: Boolean, + default: true + }, + done: Boolean, + error: Boolean + }, + + computed: { + isActive: function isActive () { + return this.stepper.value === this.name + }, + + onEvents: function onEvents () { + return this.isActive !== true || + this.stepper.vertical !== true || + (this.$q.platform.is.ios !== true && this.$q.platform.is.chrome === true) + ? Object.assign({}, this.qListeners) + : Object.assign({}, this.qListeners, {scroll: this.__keepScroll}) + } + }, + + methods: { + __keepScroll: function __keepScroll (ev) { + var target = ev.target; + if (target.scrollTop > 0) { + target.scrollTop = 0; + } + this.qListeners.scroll !== void 0 && this.$emit('scroll', ev); + } + }, + + render: function render (h) { + var vertical = this.stepper.vertical; + var content = vertical === true && this.stepper.keepAlive === true + ? h( + 'keep-alive', + this.isActive === true + ? [ h(StepWrapper, { key: this.name }, slot(this, 'default')) ] + : void 0 + ) + : ( + vertical !== true || this.isActive === true + ? StepWrapper.options.render.call(this, h) + : void 0 + ); + + return h( + 'div', + { + staticClass: 'q-stepper__step', + attrs: attrs$1, + on: this.onEvents + }, + vertical === true + ? [ + h(StepHeader, { + props: { + stepper: this.stepper, + step: this + } + }), + + this.stepper.animated === true + ? h(QSlideTransition, [ content ]) + : content + ] + : [ content ] + ) + } + }); + + var QStepper = Vue__default["default"].extend({ + name: 'QStepper', + + provide: function provide () { + return { + stepper: this + } + }, + + mixins: [ DarkMixin, PanelParentMixin ], + + props: { + flat: Boolean, + bordered: Boolean, + alternativeLabels: Boolean, + headerNav: Boolean, + contracted: Boolean, + headerClass: String, + + inactiveColor: String, + inactiveIcon: String, + doneIcon: String, + doneColor: String, + activeIcon: String, + activeColor: String, + errorIcon: String, + errorColor: String + }, + + computed: { + classes: function classes () { + var isDark = this.dark === true || (this.dark === null && this.$q.dark.isActive !== false); + + return "q-stepper q-stepper--" + (this.vertical === true ? 'vertical' : 'horizontal') + + (this.flat === true || isDark === true ? ' q-stepper--flat no-shadow' : '') + + (this.bordered === true || (isDark === true && this.flat === false) ? ' q-stepper--bordered' : '') + + " q-stepper--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + }, + + headerClasses: function headerClasses () { + return 'q-stepper__header row items-stretch justify-between' + + " q-stepper__header--" + (this.alternativeLabels === true ? 'alternative' : 'standard') + "-labels" + + (this.flat === false || this.bordered === true ? ' q-stepper__header--border' : '') + + (this.contracted === true ? ' q-stepper__header--contracted' : '') + + (this.headerClass !== void 0 ? (" " + (this.headerClass)) : '') + } + }, + + methods: { + __getContent: function __getContent (h) { + var this$1$1 = this; + + var top = slot(this, 'message', []); + + if (this.vertical === true) { + this.__isValidPanelName(this.value) && this.__updatePanelIndex(); + + var content = h('div', { + key: 'stop', + staticClass: 'q-stepper__content', + // stop propagation of content emitted @input + // which would tamper with Panel's model + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'default')); + + return top === void 0 + ? [ content ] + : top.concat(content) + } + + return [ + h('div', { class: this.headerClasses }, this.panels.map(function (panel) { + var step = panel.componentOptions.propsData; + + return h(StepHeader, { + key: step.name, + props: { + stepper: this$1$1, + step: step + } + }) + })) + ].concat( + top, + + h('div', { + staticClass: 'q-stepper__content q-panel-parent', + directives: this.panelDirectives + }, this.__getPanelContent(h)) + ) + }, + + __renderPanels: function __renderPanels (h) { + return h('div', { + class: this.classes, + on: Object.assign({}, this.qListeners) + }, mergeSlot(this.__getContent(h), this, 'navigation')) + } + } + }); + + var QStepperNavigation = Vue__default["default"].extend({ + name: 'QStepperNavigation', + + mixins: [ ListenersMixin ], + + render: function render (h) { + return h('div', { + staticClass: 'q-stepper__nav', + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var Top = { + computed: { + marginalsScope: function marginalsScope () { + return { + pagination: this.computedPagination, + pagesNumber: this.pagesNumber, + isFirstPage: this.isFirstPage, + isLastPage: this.isLastPage, + firstPage: this.firstPage, + prevPage: this.prevPage, + nextPage: this.nextPage, + lastPage: this.lastPage, + + inFullscreen: this.inFullscreen, + toggleFullscreen: this.toggleFullscreen + } + } + }, + + methods: { + __getTopDiv: function __getTopDiv (h) { + var + top = this.$scopedSlots.top, + topLeft = this.$scopedSlots['top-left'], + topRight = this.$scopedSlots['top-right'], + topSelection = this.$scopedSlots['top-selection'], + hasSelection = this.hasSelectionMode === true && + topSelection !== void 0 && + this.rowsSelectedNumber > 0, + staticClass = 'q-table__top relative-position row items-center'; + + if (top !== void 0) { + return h('div', { staticClass: staticClass }, [ top(this.marginalsScope) ]) + } + + var child; + + if (hasSelection === true) { + child = topSelection(this.marginalsScope).slice(); + } + else { + child = []; + + if (topLeft !== void 0) { + child.push( + h('div', { staticClass: 'q-table-control' }, [ + topLeft(this.marginalsScope) + ]) + ); + } + else if (this.title) { + child.push( + h('div', { staticClass: 'q-table__control' }, [ + h('div', { staticClass: 'q-table__title', class: this.titleClass }, this.title) + ]) + ); + } + } + + if (topRight !== void 0) { + child.push(h('div', { staticClass: 'q-table__separator col' })); + child.push( + h('div', { staticClass: 'q-table__control' }, [ + topRight(this.marginalsScope) + ]) + ); + } + + if (child.length === 0) { + return + } + + return h('div', { staticClass: staticClass }, child) + } + } + }; + + var QTh = Vue__default["default"].extend({ + name: 'QTh', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + autoWidth: Boolean + }, + + render: function render (h) { + var this$1$1 = this; + + var on = Object.assign({}, this.qListeners); + + if (this.props === void 0) { + return h('th', { + on: on, + class: this.autoWidth === true ? 'q-table--col-auto-width' : null + }, slot(this, 'default')) + } + + var col, child; + var name = this.$vnode.key; + + if (name) { + col = this.props.colsMap[name]; + if (col === void 0) { return } + } + else { + col = this.props.col; + } + + if (col.sortable === true) { + var action = col.align === 'right' + ? 'unshift' + : 'push'; + + child = uniqueSlot(this, 'default', []); + child[action]( + h(QIcon, { + props: { name: this.$q.iconSet.table.arrowUp }, + staticClass: col.__iconClass + }) + ); + } + else { + child = slot(this, 'default'); + } + + var evt = col.sortable === true + ? { + click: function (evt) { + this$1$1.props.sort(col); + this$1$1.$emit('click', evt); + } + } + : {}; + + return h('th', { + on: Object.assign({}, on, evt), + style: col.headerStyle, + class: col.__thClass + + (this.autoWidth === true ? ' q-table--col-auto-width' : '') + }, child) + } + }); + + var TableHeader = { + computed: { + headerSelectedValue: function headerSelectedValue () { + return this.someRowsSelected === true + ? null + : this.allRowsSelected + } + }, + + methods: { + __getTHead: function __getTHead (h) { + var child = this.__getTHeadTR(h); + + if (this.loading === true && this.$scopedSlots.loading === void 0) { + child.push( + h('tr', { staticClass: 'q-table__progress' }, [ + h('th', { + staticClass: 'relative-position', + attrs: { colspan: this.computedColspan } + }, this.__getProgress(h)) + ]) + ); + } + + return h('thead', child) + }, + + __getTHeadTR: function __getTHeadTR (h) { + var this$1$1 = this; + + var + header = this.$scopedSlots.header, + headerCell = this.$scopedSlots['header-cell']; + + if (header !== void 0) { + return header( + this.__getHeaderScope({ header: true }) + ).slice() + } + + var child = this.computedCols.map(function (col) { + var + headerCellCol = this$1$1.$scopedSlots[("header-cell-" + (col.name))], + slot = headerCellCol !== void 0 ? headerCellCol : headerCell, + props = this$1$1.__getHeaderScope({ col: col }); + + return slot !== void 0 + ? slot(props) + : h(QTh, { + key: col.name, + props: { props: props } + }, col.label) + }); + + if (this.singleSelection === true && this.grid !== true) { + child.unshift(h('th', { staticClass: 'q-table--col-auto-width' }, [' '])); + } + else if (this.multipleSelection === true) { + var slot = this.$scopedSlots['header-selection']; + var content = slot !== void 0 + ? slot(this.__getHeaderScope({})) + : [ + h(QCheckbox, { + key: 'inp', + props: { + color: this.color, + value: this.headerSelectedValue, + dark: this.dark, + dense: this.dense + }, + on: cache(this, 'inp', { + input: this.__onMultipleSelectionSet + }) + }) + ]; + + child.unshift( + h('th', { staticClass: 'q-table--col-auto-width' }, content) + ); + } + + return [ + h('tr', { + style: this.tableHeaderStyle, + class: this.tableHeaderClass + }, child) + ] + }, + + __getHeaderScope: function __getHeaderScope (data) { + var this$1$1 = this; + + Object.assign(data, { + cols: this.computedCols, + sort: this.sort, + colsMap: this.computedColsMap, + color: this.color, + dark: this.dark, + dense: this.dense + }); + + if (this.multipleSelection === true) { + injectProp( + data, + 'selected', + function () { return this$1$1.headerSelectedValue; }, + this.__onMultipleSelectionSet + ); + + data.partialSelected = this.someRowsSelected; + data.multipleSelect = true; + } + + return data + }, + + __onMultipleSelectionSet: function __onMultipleSelectionSet (val) { + if (this.someRowsSelected === true) { + val = false; + } + this.__updateSelection( + this.computedRows.map(this.getRowKey), + this.computedRows, + val + ); + } + } + }; + + var TableBody = { + methods: { + __getTBodyTR: function __getTBodyTR (h, row, bodySlot, pageIndex) { + var this$1$1 = this; + + var + key = this.getRowKey(row), + selected = this.isRowSelected(key); + + if (bodySlot !== void 0) { + return bodySlot( + this.__getBodyScope({ + key: key, + row: row, + pageIndex: pageIndex, + __trClass: selected ? 'selected' : '' + }) + ) + } + + var + bodyCell = this.$scopedSlots['body-cell'], + child = this.computedCols.map(function (col) { + var + bodyCellCol = this$1$1.$scopedSlots[("body-cell-" + (col.name))], + slot = bodyCellCol !== void 0 ? bodyCellCol : bodyCell; + + return slot !== void 0 + ? slot(this$1$1.__getBodyCellScope({ key: key, row: row, pageIndex: pageIndex, col: col })) + : h('td', { + class: col.__tdClass(row), + style: col.__tdStyle(row) + }, this$1$1.getCellValue(col, row)) + }); + + if (this.hasSelectionMode === true) { + var slot = this.$scopedSlots['body-selection']; + var content = slot !== void 0 + ? slot(this.__getBodySelectionScope({ key: key, row: row, pageIndex: pageIndex })) + : [ + h(QCheckbox, { + props: { + value: selected, + color: this.color, + dark: this.dark, + dense: this.dense + }, + on: { + input: function (adding, evt) { + this$1$1.__updateSelection([ key ], [ row ], adding, evt); + } + } + }) + ]; + + child.unshift( + h('td', { staticClass: 'q-table--col-auto-width' }, content) + ); + } + + var data = { key: key, class: { selected: selected }, on: {} }; + + if (this.qListeners['row-click'] !== void 0) { + data.class['cursor-pointer'] = true; + data.on.click = function (evt) { + this$1$1.$emit('row-click', evt, row, pageIndex); + }; + } + + if (this.qListeners['row-dblclick'] !== void 0) { + data.class['cursor-pointer'] = true; + data.on.dblclick = function (evt) { + this$1$1.$emit('row-dblclick', evt, row, pageIndex); + }; + } + + if (this.qListeners['row-contextmenu'] !== void 0) { + data.class['cursor-pointer'] = true; + data.on.contextmenu = function (evt) { + this$1$1.$emit('row-contextmenu', evt, row, pageIndex); + }; + } + + return h('tr', data, child) + }, + + __getTBody: function __getTBody (h) { + var this$1$1 = this; + + var + body = this.$scopedSlots.body, + topRow = this.$scopedSlots['top-row'], + bottomRow = this.$scopedSlots['bottom-row']; + + var child = this.computedRows.map( + function (row, pageIndex) { return this$1$1.__getTBodyTR(h, row, body, pageIndex); } + ); + + if (topRow !== void 0) { + child = topRow({ cols: this.computedCols }).concat(child); + } + if (bottomRow !== void 0) { + child = child.concat(bottomRow({ cols: this.computedCols })); + } + + return h('tbody', child) + }, + + __getVirtualTBodyTR: function __getVirtualTBodyTR (h) { + var this$1$1 = this; + + var body = this.$scopedSlots.body; + return function (props) { return this$1$1.__getTBodyTR(h, props.item, body, props.index); } + }, + + __getBodyScope: function __getBodyScope (data) { + var this$1$1 = this; + + this.__injectBodyCommonScope(data); + + data.cols = data.cols.map(function (col) { return injectProp( + Object.assign({}, col), + 'value', + function () { return this$1$1.getCellValue(col, data.row); } + ); }); + + return data + }, + + __getBodyCellScope: function __getBodyCellScope (data) { + var this$1$1 = this; + + this.__injectBodyCommonScope(data); + return injectProp(data, 'value', function () { return this$1$1.getCellValue(data.col, data.row); }) + }, + + __getBodySelectionScope: function __getBodySelectionScope (data) { + this.__injectBodyCommonScope(data); + return data + }, + + __injectBodyCommonScope: function __injectBodyCommonScope (data) { + var this$1$1 = this; + + Object.assign(data, { + cols: this.computedCols, + colsMap: this.computedColsMap, + sort: this.sort, + rowIndex: this.firstRowIndex + data.pageIndex, + color: this.color, + dark: this.dark, + dense: this.dense + }); + + this.hasSelectionMode === true && injectProp( + data, + 'selected', + function () { return this$1$1.isRowSelected(data.key); }, + function (adding, evt) { + this$1$1.__updateSelection([ data.key ], [ data.row ], adding, evt); + } + ); + + injectProp( + data, + 'expand', + function () { return this$1$1.isRowExpanded(data.key); }, + function (adding) { this$1$1.__updateExpanded(data.key, adding); } + ); + }, + + getCellValue: function getCellValue (col, row) { + var val = typeof col.field === 'function' ? col.field(row) : row[col.field]; + return col.format !== void 0 ? col.format(val, row) : val + } + } + }; + + var staticClass = 'q-table__bottom row items-center'; + + var Bottom = { + props: { + hideBottom: Boolean, + hideSelectedBanner: Boolean, + hideNoData: Boolean, + hidePagination: Boolean + }, + + computed: { + navIcon: function navIcon () { + var ico = [ + this.iconFirstPage || this.$q.iconSet.table.firstPage, + this.iconPrevPage || this.$q.iconSet.table.prevPage, + this.iconNextPage || this.$q.iconSet.table.nextPage, + this.iconLastPage || this.$q.iconSet.table.lastPage + ]; + return this.$q.lang.rtl === true ? ico.reverse() : ico + } + }, + + methods: { + __getBottomDiv: function __getBottomDiv (h) { + if (this.hideBottom === true) { + return + } + + if (this.nothingToDisplay === true) { + if (this.hideNoData === true) { + return + } + + var message = this.loading === true + ? this.loadingLabel || this.$q.lang.table.loading + : (this.filter ? this.noResultsLabel || this.$q.lang.table.noResults : this.noDataLabel || this.$q.lang.table.noData); + + var noData = this.$scopedSlots['no-data']; + var children = noData !== void 0 + ? [ noData({ message: message, icon: this.$q.iconSet.table.warning, filter: this.filter }) ] + : [ + h(QIcon, { + staticClass: 'q-table__bottom-nodata-icon', + props: { name: this.$q.iconSet.table.warning } + }), + message + ]; + + return h('div', { + staticClass: staticClass + ' q-table__bottom--nodata' + }, children) + } + + var bottom = this.$scopedSlots.bottom; + + if (bottom !== void 0) { + return h('div', { staticClass: staticClass }, [ bottom(this.marginalsScope) ]) + } + + var child = this.hideSelectedBanner !== true && this.hasSelectionMode === true && this.rowsSelectedNumber > 0 + ? [ + h('div', { staticClass: 'q-table__control' }, [ + h('div', [ + (this.selectedRowsLabel || this.$q.lang.table.selectedRecords)(this.rowsSelectedNumber) + ]) + ]) + ] + : []; + + if (this.hidePagination !== true) { + return h('div', { + staticClass: staticClass + ' justify-end' + }, this.__getPaginationDiv(h, child)) + } + + if (child.length > 0) { + return h('div', { staticClass: staticClass }, child) + } + }, + + __getPaginationDiv: function __getPaginationDiv (h, child) { + var this$1$1 = this; + + var control; + var ref = this.computedPagination; + var rowsPerPage = ref.rowsPerPage; + var paginationLabel = this.paginationLabel || this.$q.lang.table.pagination, + paginationSlot = this.$scopedSlots.pagination, + hasOpts = this.rowsPerPageOptions.length > 1; + + child.push( + h('div', { staticClass: 'q-table__separator col' }) + ); + + if (hasOpts === true) { + child.push( + h('div', { staticClass: 'q-table__control' }, [ + h('span', { staticClass: 'q-table__bottom-item' }, [ + this.rowsPerPageLabel || this.$q.lang.table.recordsPerPage + ]), + h(QSelect, { + key: 'pgSize', + staticClass: 'q-table__select inline q-table__bottom-item', + props: { + color: this.color, + value: rowsPerPage, + options: this.computedRowsPerPageOptions, + displayValue: rowsPerPage === 0 + ? this.$q.lang.table.allRows + : rowsPerPage, + dark: this.dark, + borderless: true, + dense: true, + optionsDense: true, + optionsCover: true + }, + on: cache(this, 'pgSize', { + input: function (pag) { + this$1$1.setPagination({ + page: 1, + rowsPerPage: pag.value + }); + } + }) + }) + ]) + ); + } + + if (paginationSlot !== void 0) { + control = paginationSlot(this.marginalsScope); + } + else { + control = [ + h('span', rowsPerPage !== 0 ? { staticClass: 'q-table__bottom-item' } : {}, [ + rowsPerPage + ? paginationLabel(this.firstRowIndex + 1, Math.min(this.lastRowIndex, this.computedRowsNumber), this.computedRowsNumber) + : paginationLabel(1, this.filteredSortedRowsNumber, this.computedRowsNumber) + ]) + ]; + + if (rowsPerPage !== 0 && this.pagesNumber > 1) { + var btnProps = { + color: this.color, + round: true, + dense: true, + flat: true + }; + + if (this.dense === true) { + btnProps.size = 'sm'; + } + + this.pagesNumber > 2 && control.push( + h(QBtn, { + key: 'pgFirst', + props: Object.assign({}, btnProps, + {icon: this.navIcon[0], + disable: this.isFirstPage}), + on: cache(this, 'pgFirst', { click: this.firstPage }) + }) + ); + + control.push( + h(QBtn, { + key: 'pgPrev', + props: Object.assign({}, btnProps, + {icon: this.navIcon[1], + disable: this.isFirstPage}), + on: cache(this, 'pgPrev', { click: this.prevPage }) + }), + + h(QBtn, { + key: 'pgNext', + props: Object.assign({}, btnProps, + {icon: this.navIcon[2], + disable: this.isLastPage}), + on: cache(this, 'pgNext', { click: this.nextPage }) + }) + ); + + this.pagesNumber > 2 && control.push( + h(QBtn, { + key: 'pgLast', + props: Object.assign({}, btnProps, + {icon: this.navIcon[3], + disable: this.isLastPage}), + on: cache(this, 'pgLast', { click: this.lastPage }) + }) + ); + } + } + + child.push( + h('div', { staticClass: 'q-table__control' }, control) + ); + + return child + } + } + }; + + var TableGrid = { + methods: { + __getGridHeader: function __getGridHeader (h) { + var child = this.gridHeader === true + ? [ + h('table', { staticClass: 'q-table' }, [ + this.__getTHead(h) + ]) + ] + : ( + this.loading === true && this.$scopedSlots.loading === void 0 + ? this.__getProgress(h) + : void 0 + ); + + return h('div', { staticClass: 'q-table__middle' }, child) + }, + + __getGridBody: function __getGridBody (h) { + var this$1$1 = this; + + var item = this.$scopedSlots.item !== void 0 + ? this.$scopedSlots.item + : function (scope) { + var child = scope.cols.map( + function (col) { return h('div', { staticClass: 'q-table__grid-item-row' }, [ + h('div', { staticClass: 'q-table__grid-item-title' }, [ col.label ]), + h('div', { staticClass: 'q-table__grid-item-value' }, [ col.value ]) + ]); } + ); + + if (this$1$1.hasSelectionMode === true) { + var slot = this$1$1.$scopedSlots['body-selection']; + var content = slot !== void 0 + ? slot(scope) + : [ + h(QCheckbox, { + props: { + value: scope.selected, + color: this$1$1.color, + dark: this$1$1.dark, + dense: this$1$1.dense + }, + on: { + input: function (adding, evt) { + this$1$1.__updateSelection([ scope.key ], [ scope.row ], adding, evt); + } + } + }) + ]; + + child.unshift( + h('div', { staticClass: 'q-table__grid-item-row' }, content), + h(QSeparator, { props: { dark: this$1$1.dark } }) + ); + } + + var data = { + staticClass: 'q-table__grid-item-card' + this$1$1.cardDefaultClass, + class: this$1$1.cardClass, + style: this$1$1.cardStyle, + on: {} + }; + + if (this$1$1.qListeners['row-click'] !== void 0 || this$1$1.qListeners['row-dblclick'] !== void 0) { + data.staticClass += ' cursor-pointer'; + } + + if (this$1$1.qListeners['row-click'] !== void 0) { + data.on.click = function (evt) { + this$1$1.$emit('row-click', evt, scope.row, scope.pageIndex); + }; + } + + if (this$1$1.qListeners['row-dblclick'] !== void 0) { + data.on.dblclick = function (evt) { + this$1$1.$emit('row-dblclick', evt, scope.row, scope.pageIndex); + }; + } + + return h('div', { + staticClass: 'q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3', + class: scope.selected === true ? 'q-table__grid-item--selected' : '' + }, [ + h('div', data, child) + ]) + }; + + return h('div', { + staticClass: 'q-table__grid-content row', + class: this.cardContainerClass, + style: this.cardContainerStyle + }, this.computedRows.map(function (row, pageIndex) { + return item(this$1$1.__getBodyScope({ + key: this$1$1.getRowKey(row), + row: row, + pageIndex: pageIndex + })) + })) + } + } + }; + + function getTableMiddle (h, conf, content) { + return h('div', Object.assign({}, conf, + {staticClass: 'q-table__middle' + (conf.staticClass !== void 0 ? ' ' + conf.staticClass : '')}), [ + h('table', { staticClass: 'q-table' }, content) + ]) + } + + var comps = { + list: QList, + table: QMarkupTable + }; + + var QVirtualScroll = Vue__default["default"].extend({ + name: 'QVirtualScroll', + + mixins: [ AttrsMixin, ListenersMixin, VirtualScroll ], + + props: { + type: { + type: String, + default: 'list', + validator: function (v) { return ['list', 'table', '__qtable'].includes(v); } + }, + + items: { + type: Array, + default: function () { return []; } + }, + + itemsFn: Function, + itemsSize: Number, + + scrollTarget: { + default: void 0 + } + }, + + computed: { + virtualScrollLength: function virtualScrollLength () { + return this.itemsSize >= 0 && this.itemsFn !== void 0 + ? parseInt(this.itemsSize, 10) + : (Array.isArray(this.items) ? this.items.length : 0) + }, + + virtualScrollScope: function virtualScrollScope () { + var this$1$1 = this; + + if (this.virtualScrollLength === 0) { + return [] + } + + var mapFn = function (item, i) { return ({ + index: this$1$1.virtualScrollSliceRange.from + i, + item: item + }); }; + + if (this.itemsFn === void 0) { + return this.items.slice(this.virtualScrollSliceRange.from, this.virtualScrollSliceRange.to).map(mapFn) + } + + return this.itemsFn(this.virtualScrollSliceRange.from, this.virtualScrollSliceRange.to - this.virtualScrollSliceRange.from).map(mapFn) + }, + + classes: function classes () { + return 'q-virtual-scroll q-virtual-scroll' + (this.virtualScrollHorizontal === true ? '--horizontal' : '--vertical') + + (this.scrollTarget !== void 0 ? '' : ' scroll') + }, + + attrs: function attrs () { + return this.scrollTarget !== void 0 ? void 0 : { tabindex: 0 } + } + }, + + watch: { + virtualScrollLength: function virtualScrollLength () { + this.__resetVirtualScroll(); + }, + + scrollTarget: function scrollTarget () { + this.__unconfigureScrollTarget(); + this.__configureScrollTarget(); + } + }, + + methods: { + __getVirtualScrollEl: function __getVirtualScrollEl () { + return this.$el + }, + + __getVirtualScrollTarget: function __getVirtualScrollTarget () { + return this.__scrollTarget + }, + + __configureScrollTarget: function __configureScrollTarget () { + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget); + this.__scrollTarget.addEventListener('scroll', this.__onVirtualScrollEvt, listenOpts.passive); + }, + + __unconfigureScrollTarget: function __unconfigureScrollTarget () { + if (this.__scrollTarget !== void 0) { + this.__scrollTarget.removeEventListener('scroll', this.__onVirtualScrollEvt, listenOpts.passive); + this.__scrollTarget = void 0; + } + } + }, + + beforeMount: function beforeMount () { + this.__resetVirtualScroll(); + }, + + mounted: function mounted () { + this.__configureScrollTarget(); + }, + + activated: function activated () { + this.__configureScrollTarget(); + }, + + deactivated: function deactivated () { + this.__unconfigureScrollTarget(); + }, + + beforeDestroy: function beforeDestroy () { + this.__unconfigureScrollTarget(); + }, + + render: function render (h) { + if (this.$scopedSlots.default === void 0) { + console.error('QVirtualScroll: default scoped slot is required for rendering', this); + return + } + + var child = this.__padVirtualScroll( + h, + this.type === 'list' ? 'div' : 'tbody', + this.virtualScrollScope.map(this.$scopedSlots.default) + ); + + if (this.$scopedSlots.before !== void 0) { + child = this.$scopedSlots.before().concat(child); + } + + child = mergeSlot(child, this, 'after'); + + return this.type === '__qtable' + ? getTableMiddle(h, { staticClass: this.classes }, child) + : h(comps[this.type], { + class: this.classes, + attrs: this.attrs, + props: this.qAttrs, + on: Object.assign({}, this.qListeners) + }, child) + } + }); + + function sortDate (a, b) { + return (new Date(a)) - (new Date(b)) + } + + var Sort = { + props: { + sortMethod: { + type: Function, + default: function default$1 (data, sortBy, descending) { + var col = this.colList.find(function (def) { return def.name === sortBy; }); + if (col === void 0 || col.field === void 0) { + return data + } + + var + dir = descending === true ? -1 : 1, + val = typeof col.field === 'function' + ? function (v) { return col.field(v); } + : function (v) { return v[col.field]; }; + + return data.sort(function (a, b) { + var assign; + + var + A = val(a), + B = val(b); + + if (A === null || A === void 0) { + return -1 * dir + } + if (B === null || B === void 0) { + return 1 * dir + } + if (col.sort !== void 0) { + return col.sort(A, B, a, b) * dir + } + if (isNumber(A) === true && isNumber(B) === true) { + return (A - B) * dir + } + if (isDate(A) === true && isDate(B) === true) { + return sortDate(A, B) * dir + } + if (typeof A === 'boolean' && typeof B === 'boolean') { + return (A - B) * dir + } + + (assign = [A, B].map(function (s) { return (s + '').toLocaleString().toLowerCase(); }), A = assign[0], B = assign[1]); + + return A < B + ? -1 * dir + : (A === B ? 0 : dir) + }) + } + }, + + columnSortOrder: { + type: String, + validator: function (v) { return v === 'ad' || v === 'da'; }, + default: 'ad' + } + }, + + computed: { + columnToSort: function columnToSort () { + var ref = this.computedPagination; + var sortBy = ref.sortBy; + + if (sortBy) { + return this.colList.find(function (def) { return def.name === sortBy; }) || null + } + } + }, + + methods: { + sort: function sort (col /* String(col name) or Object(col definition) */) { + var sortOrder = this.columnSortOrder; + + if (isObject(col) === true) { + if (col.sortOrder) { + sortOrder = col.sortOrder; + } + + col = col.name; + } + else { + var def = this.colList.find(function (def) { return def.name === col; }); + if (def !== void 0 && def.sortOrder) { + sortOrder = def.sortOrder; + } + } + + var ref = this.computedPagination; + var sortBy = ref.sortBy; + var descending = ref.descending; + + if (sortBy !== col) { + sortBy = col; + descending = sortOrder === 'da'; + } + else if (this.binaryStateSort === true) { + descending = !descending; + } + else if (descending === true) { + if (sortOrder === 'ad') { + sortBy = null; + } + else { + descending = false; + } + } + else { // ascending + if (sortOrder === 'ad') { + descending = true; + } + else { + sortBy = null; + } + } + + this.setPagination({ sortBy: sortBy, descending: descending, page: 1 }); + } + } + }; + + var Filter = { + props: { + filter: [String, Object], + filterMethod: { + type: Function, + default: function default$1 (rows, terms, cols, cellValue) { + if ( cols === void 0 ) cols = this.computedCols; + if ( cellValue === void 0 ) cellValue = this.getCellValue; + + var lowerTerms = terms ? terms.toLowerCase() : ''; + return rows.filter( + function (row) { return cols.some(function (col) { + var val = cellValue(col, row) + ''; + var haystack = (val === 'undefined' || val === 'null') ? '' : val.toLowerCase(); + return haystack.indexOf(lowerTerms) !== -1 + }); } + ) + } + } + }, + + watch: { + filter: { + handler: function handler () { + var this$1$1 = this; + + this.$nextTick(function () { + this$1$1.setPagination({ page: 1 }, true); + }); + }, + deep: true + } + } + }; + + function samePagination (oldPag, newPag) { + for (var prop in newPag) { + if (newPag[prop] !== oldPag[prop]) { + return false + } + } + return true + } + + function fixPagination (p) { + if (p.page < 1) { + p.page = 1; + } + if (p.rowsPerPage !== void 0 && p.rowsPerPage < 1) { + p.rowsPerPage = 0; + } + return p + } + + var Pagination = { + props: { + pagination: Object, + rowsPerPageOptions: { + type: Array, + default: function () { return [ 5, 7, 10, 15, 20, 25, 50, 0 ]; } + } + }, + + computed: { + computedPagination: function computedPagination () { + var pag = this.qListeners['update:pagination'] !== void 0 + ? Object.assign({}, this.innerPagination, this.pagination) + : this.innerPagination; + + return fixPagination(pag) + }, + + firstRowIndex: function firstRowIndex () { + var ref = this.computedPagination; + var page = ref.page; + var rowsPerPage = ref.rowsPerPage; + return (page - 1) * rowsPerPage + }, + + lastRowIndex: function lastRowIndex () { + var ref = this.computedPagination; + var page = ref.page; + var rowsPerPage = ref.rowsPerPage; + return page * rowsPerPage + }, + + isFirstPage: function isFirstPage () { + return this.computedPagination.page === 1 + }, + + pagesNumber: function pagesNumber () { + return this.computedPagination.rowsPerPage === 0 + ? 1 + : Math.max( + 1, + Math.ceil(this.computedRowsNumber / this.computedPagination.rowsPerPage) + ) + }, + + isLastPage: function isLastPage () { + return this.lastRowIndex === 0 + ? true + : this.computedPagination.page >= this.pagesNumber + }, + + computedRowsPerPageOptions: function computedRowsPerPageOptions () { + var this$1$1 = this; + + var opts = this.rowsPerPageOptions.includes(this.innerPagination.rowsPerPage) + ? this.rowsPerPageOptions + : [ this.innerPagination.rowsPerPage ].concat(this.rowsPerPageOptions); + + return opts.map(function (count) { return ({ + label: count === 0 ? this$1$1.$q.lang.table.allRows : '' + count, + value: count + }); }) + } + }, + + watch: { + pagesNumber: function pagesNumber (lastPage, oldLastPage) { + if (lastPage === oldLastPage) { + return + } + + var currentPage = this.computedPagination.page; + if (lastPage && !currentPage) { + this.setPagination({ page: 1 }); + } + else if (lastPage < currentPage) { + this.setPagination({ page: lastPage }); + } + } + }, + + methods: { + __sendServerRequest: function __sendServerRequest (pagination) { + this.requestServerInteraction({ + pagination: pagination, + filter: this.filter + }); + }, + + setPagination: function setPagination (val, forceServerRequest) { + var newPagination = fixPagination(Object.assign({}, this.computedPagination, + val)); + + if (samePagination(this.computedPagination, newPagination) === true) { + if (this.isServerSide === true && forceServerRequest === true) { + this.__sendServerRequest(newPagination); + } + return + } + + if (this.isServerSide === true) { + this.__sendServerRequest(newPagination); + return + } + + if (this.pagination !== void 0 && this.qListeners['update:pagination'] !== void 0) { + this.$emit('update:pagination', newPagination); + } + else { + this.innerPagination = newPagination; + } + }, + + firstPage: function firstPage () { + this.setPagination({ page: 1 }); + }, + + prevPage: function prevPage () { + var ref = this.computedPagination; + var page = ref.page; + if (page > 1) { + this.setPagination({ page: page - 1 }); + } + }, + + nextPage: function nextPage () { + var ref = this.computedPagination; + var page = ref.page; + var rowsPerPage = ref.rowsPerPage; + if (this.lastRowIndex > 0 && page * rowsPerPage < this.computedRowsNumber) { + this.setPagination({ page: page + 1 }); + } + }, + + lastPage: function lastPage () { + this.setPagination({ page: this.pagesNumber }); + } + }, + + created: function created () { + if (this.qListeners['update:pagination'] !== void 0) { + this.$emit('update:pagination', Object.assign({}, this.computedPagination)); + } + } + }; + + var RowSelection = { + props: { + selection: { + type: String, + default: 'none', + validator: function (v) { return ['single', 'multiple', 'none'].includes(v); } + }, + selected: { + type: Array, + default: function () { return []; } + } + }, + + computed: { + selectedKeys: function selectedKeys () { + var keys = {}; + this.selected.map(this.getRowKey).forEach(function (key) { + keys[key] = true; + }); + return keys + }, + + hasSelectionMode: function hasSelectionMode () { + return this.selection !== 'none' + }, + + singleSelection: function singleSelection () { + return this.selection === 'single' + }, + + multipleSelection: function multipleSelection () { + return this.selection === 'multiple' + }, + + allRowsSelected: function allRowsSelected () { + var this$1$1 = this; + + return this.computedRows.length > 0 && this.computedRows.every( + function (row) { return this$1$1.selectedKeys[ this$1$1.getRowKey(row) ] === true; } + ) + }, + + someRowsSelected: function someRowsSelected () { + var this$1$1 = this; + + return this.allRowsSelected !== true && + this.computedRows.some(function (row) { return this$1$1.selectedKeys[ this$1$1.getRowKey(row) ] === true; }) + }, + + rowsSelectedNumber: function rowsSelectedNumber () { + return this.selected.length + } + }, + + methods: { + isRowSelected: function isRowSelected (key) { + return this.selectedKeys[key] === true + }, + + clearSelection: function clearSelection () { + this.$emit('update:selected', []); + }, + + __updateSelection: function __updateSelection (keys, rows, added, evt) { + var this$1$1 = this; + + this.$emit('selection', { rows: rows, added: added, keys: keys, evt: evt }); + + var payload = this.singleSelection === true + ? (added === true ? rows : []) + : ( + added === true + ? this.selected.concat(rows) + : this.selected.filter( + function (row) { return keys.includes(this$1$1.getRowKey(row)) === false; } + ) + ); + + this.$emit('update:selected', payload); + } + } + }; + + function getVal (val) { + return Array.isArray(val) + ? val.slice() + : [] + } + + var RowExpand = { + props: { + expanded: Array // sync + }, + + data: function data () { + return { + innerExpanded: getVal(this.expanded) + } + }, + + watch: { + expanded: function expanded (val) { + this.innerExpanded = getVal(val); + } + }, + + methods: { + isRowExpanded: function isRowExpanded (key) { + return this.innerExpanded.includes(key) + }, + + setExpanded: function setExpanded (val) { + if (this.expanded !== void 0) { + this.$emit('update:expanded', val); + } + else { + this.innerExpanded = val; + } + }, + + __updateExpanded: function __updateExpanded (key, add) { + var target = this.innerExpanded.slice(); + var index = target.indexOf(key); + + if (add === true) { + if (index === -1) { + target.push(key); + this.setExpanded(target); + } + } + else if (index !== -1) { + target.splice(index, 1); + this.setExpanded(target); + } + } + } + }; + + var ColumnSelection = { + props: { + visibleColumns: Array + }, + + computed: { + colList: function colList () { + if (this.columns !== void 0) { + return this.columns + } + + // we infer columns from first row + var row = this.data[0]; + + return row !== void 0 + ? Object.keys(row).map(function (name) { return ({ + name: name, + label: name.toUpperCase(), + field: name, + align: isNumber(row[name]) ? 'right' : 'left', + sortable: true + }); }) + : [] + }, + + computedCols: function computedCols () { + var this$1$1 = this; + + var ref = this.computedPagination; + var sortBy = ref.sortBy; + var descending = ref.descending; + + var cols = this.visibleColumns !== void 0 + ? this.colList.filter(function (col) { return col.required === true || this$1$1.visibleColumns.includes(col.name) === true; }) + : this.colList; + + return cols.map(function (col) { + var align = col.align || 'right'; + var alignClass = "text-" + align; + + return Object.assign({}, col, + {align: align, + __iconClass: ("q-table__sort-icon q-table__sort-icon--" + align), + __thClass: alignClass + + (col.headerClasses !== void 0 ? ' ' + col.headerClasses : '') + + (col.sortable === true ? ' sortable' : '') + + (col.name === sortBy ? (" sorted " + (descending === true ? 'sort-desc' : '')) : ''), + + __tdStyle: col.style !== void 0 + ? ( + typeof col.style !== 'function' + ? function () { return col.style; } + : col.style + ) + : function () { return null; }, + + __tdClass: col.classes !== void 0 + ? ( + typeof col.classes !== 'function' + ? function () { return alignClass + ' ' + col.classes; } + : function (row) { return alignClass + ' ' + col.classes(row); } + ) + : function () { return alignClass; }}) + }) + }, + + computedColsMap: function computedColsMap () { + var names = {}; + this.computedCols.forEach(function (col) { + names[col.name] = col; + }); + return names + }, + + computedColspan: function computedColspan () { + return this.tableColspan !== void 0 + ? this.tableColspan + : this.computedCols.length + (this.hasSelectionMode === true ? 1 : 0) + } + } + }; + + var commonVirtPropsObj = {}; + commonVirtPropsList.forEach(function (p) { commonVirtPropsObj[p] = {}; }); + + var QTable = Vue__default["default"].extend({ + name: 'QTable', + + mixins: [ + DarkMixin, + ListenersMixin, + + FullscreenMixin, + Top, + TableHeader, + TableBody, + Bottom, + TableGrid, + Sort, + Filter, + Pagination, + RowSelection, + RowExpand, + ColumnSelection + ], + + props: Object.assign({}, {data: { + type: Array, + default: function () { return []; } + }, + rowKey: { + type: [ String, Function ], + default: 'id' + }, + + columns: Array, + loading: Boolean, + binaryStateSort: Boolean, + + iconFirstPage: String, + iconPrevPage: String, + iconNextPage: String, + iconLastPage: String, + + title: String, + + hideHeader: Boolean, + + grid: Boolean, + gridHeader: Boolean, + + dense: Boolean, + flat: Boolean, + bordered: Boolean, + square: Boolean, + separator: { + type: String, + default: 'horizontal', + validator: function (v) { return ['horizontal', 'vertical', 'cell', 'none'].includes(v); } + }, + wrapCells: Boolean, + + virtualScroll: Boolean}, + commonVirtPropsObj, + + {noDataLabel: String, + noResultsLabel: String, + loadingLabel: String, + selectedRowsLabel: Function, + rowsPerPageLabel: String, + paginationLabel: Function, + + color: { + type: String, + default: 'grey-8' + }, + + titleClass: [String, Array, Object], + tableStyle: [String, Array, Object], + tableClass: [String, Array, Object], + tableHeaderStyle: [String, Array, Object], + tableHeaderClass: [String, Array, Object], + cardContainerClass: [String, Array, Object], + cardContainerStyle: [String, Array, Object], + cardStyle: [String, Array, Object], + cardClass: [String, Array, Object]}), + + data: function data () { + return { + innerPagination: Object.assign({ + sortBy: null, + descending: false, + page: 1, + rowsPerPage: this.rowsPerPageOptions.length > 0 + ? this.rowsPerPageOptions[0] + : 5 + }, this.pagination) + } + }, + + watch: { + needsReset: function needsReset () { + this.hasVirtScroll === true && this.$refs.virtScroll !== void 0 && this.$refs.virtScroll.reset(); + } + }, + + computed: { + getRowKey: function getRowKey () { + var this$1$1 = this; + + return typeof this.rowKey === 'function' + ? this.rowKey + : function (row) { return row[this$1$1.rowKey]; } + }, + + hasVirtScroll: function hasVirtScroll () { + return this.grid !== true && this.virtualScroll === true + }, + + needsReset: function needsReset () { + var this$1$1 = this; + + return ['tableStyle', 'tableClass', 'tableHeaderStyle', 'tableHeaderClass', '__containerClass'] + .map(function (p) { return this$1$1[p]; }).join(';') + }, + + filteredSortedRows: function filteredSortedRows () { + var rows = this.data; + + if (this.isServerSide === true || rows.length === 0) { + return rows + } + + var ref = this.computedPagination; + var sortBy = ref.sortBy; + var descending = ref.descending; + + if (this.filter) { + rows = this.filterMethod(rows, this.filter, this.computedCols, this.getCellValue); + } + + if (this.columnToSort !== void 0) { + rows = this.sortMethod( + this.data === rows ? rows.slice() : rows, + sortBy, + descending + ); + } + + return rows + }, + + filteredSortedRowsNumber: function filteredSortedRowsNumber () { + return this.filteredSortedRows.length + }, + + computedRows: function computedRows () { + var rows = this.filteredSortedRows; + + if (this.isServerSide === true) { + return rows + } + + var ref = this.computedPagination; + var rowsPerPage = ref.rowsPerPage; + + if (rowsPerPage !== 0) { + if (this.firstRowIndex === 0 && this.data !== rows) { + if (rows.length > this.lastRowIndex) { + rows = rows.slice(0, this.lastRowIndex); + } + } + else { + rows = rows.slice(this.firstRowIndex, this.lastRowIndex); + } + } + + return rows + }, + + computedRowsNumber: function computedRowsNumber () { + return this.isServerSide === true + ? this.computedPagination.rowsNumber || 0 + : this.filteredSortedRowsNumber + }, + + nothingToDisplay: function nothingToDisplay () { + return this.computedRows.length === 0 + }, + + isServerSide: function isServerSide () { + return this.computedPagination.rowsNumber !== void 0 + }, + + cardDefaultClass: function cardDefaultClass () { + return ' q-table__card' + + " q-table__card--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + + (this.square === true ? ' q-table--square' : '') + + (this.flat === true ? ' q-table--flat' : '') + + (this.bordered === true ? ' q-table--bordered' : '') + }, + + __containerClass: function __containerClass () { + return "q-table__container q-table--" + (this.separator) + "-separator column no-wrap" + + (this.grid === true ? ' q-table--grid' : this.cardDefaultClass) + + " q-table--" + (this.darkSuffix) + + (this.dense === true ? ' q-table--dense' : '') + + (this.wrapCells === false ? ' q-table--no-wrap' : '') + + (this.inFullscreen === true ? ' fullscreen scroll' : '') + }, + + containerClass: function containerClass () { + // do not trigger a refresh of the table when the loading status is changed + return this.__containerClass + + (this.loading === true ? ' q-table--loading' : '') + }, + + virtProps: function virtProps () { + var this$1$1 = this; + + var props = {}; + + commonVirtPropsList + .forEach(function (p) { props[p] = this$1$1[p]; }); + + if (props.virtualScrollItemSize === void 0) { + props.virtualScrollItemSize = this.dense === true ? 28 : 48; + } + + return props + } + }, + + render: function render (h) { + var child = [ this.__getTopDiv(h) ]; + var data = { staticClass: this.containerClass }; + + if (this.grid === true) { + child.push(this.__getGridHeader(h)); + } + else { + Object.assign(data, { + class: this.cardClass, + style: this.cardStyle + }); + } + + child.push( + this.__getBody(h), + this.__getBottomDiv(h) + ); + + if (this.loading === true && this.$scopedSlots.loading !== void 0) { + child.push( + this.$scopedSlots.loading() + ); + } + + return h('div', data, child) + }, + + methods: { + requestServerInteraction: function requestServerInteraction (prop) { + var this$1$1 = this; + if ( prop === void 0 ) prop = {}; + + this.$nextTick(function () { + this$1$1.$emit('request', { + pagination: prop.pagination || this$1$1.computedPagination, + filter: prop.filter || this$1$1.filter, + getCellValue: this$1$1.getCellValue + }); + }); + }, + + resetVirtualScroll: function resetVirtualScroll () { + this.hasVirtScroll === true && this.$refs.virtScroll.reset(); + }, + + __getBody: function __getBody (h) { + var this$1$1 = this; + + if (this.grid === true) { + return this.__getGridBody(h) + } + + var header = this.hideHeader !== true ? this.__getTHead(h) : null; + + if (this.hasVirtScroll === true) { + var topRow = this.$scopedSlots['top-row']; + var bottomRow = this.$scopedSlots['bottom-row']; + + var virtSlots = { + default: this.__getVirtualTBodyTR(h) + }; + + if (topRow !== void 0) { + var topContent = h('tbody', topRow({ cols: this.computedCols })); + + virtSlots.before = header === null + ? function () { return [topContent]; } + : function () { return [header].concat(topContent); }; + } + else if (header !== null) { + virtSlots.before = function () { return header; }; + } + + if (bottomRow !== void 0) { + virtSlots.after = function () { return h('tbody', bottomRow({ cols: this$1$1.computedCols })); }; + } + + return h(QVirtualScroll, { + key: 'vs', + ref: 'virtScroll', + props: Object.assign({}, this.virtProps, + {items: this.computedRows, + type: '__qtable', + tableColspan: this.computedColspan}), + on: cache(this, 'vs', { + 'virtual-scroll': this.__onVScroll + }), + class: this.tableClass, + style: this.tableStyle, + scopedSlots: virtSlots + }) + } + + return getTableMiddle(h, { + staticClass: 'scroll', + class: this.tableClass, + style: this.tableStyle + }, [ + header, + this.__getTBody(h) + ]) + }, + + scrollTo: function scrollTo (toIndex, edge) { + if (this.$refs.virtScroll !== void 0) { + this.$refs.virtScroll.scrollTo(toIndex, edge); + return + } + + toIndex = parseInt(toIndex, 10); + var rowEl = this.$el.querySelector(("tbody tr:nth-of-type(" + (toIndex + 1) + ")")); + + if (rowEl !== null) { + var scrollTarget = this.$el.querySelector('.q-table__middle.scroll'); + var offsetTop = rowEl.offsetTop - this.virtualScrollStickySizeStart; + var direction = offsetTop < scrollTarget.scrollTop ? 'decrease' : 'increase'; + + scrollTarget.scrollTop = offsetTop; + + this.$emit('virtual-scroll', { + index: toIndex, + from: 0, + to: this.pagination.rowsPerPage - 1, + direction: direction + }); + } + }, + + __onVScroll: function __onVScroll (info) { + this.$emit('virtual-scroll', info); + }, + + __getProgress: function __getProgress (h) { + return [ + h(QLinearProgress, { + staticClass: 'q-table__linear-progress', + props: { + color: this.color, + dark: this.dark, + indeterminate: true, + trackColor: 'transparent' + } + }) + ] + } + } + }); + + var QTr = Vue__default["default"].extend({ + name: 'QTr', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + noHover: Boolean + }, + + computed: { + classes: function classes () { + return 'q-tr' + (this.props === void 0 || this.props.header === true ? '' : ' ' + this.props.__trClass) + + (this.noHover === true ? ' q-tr--no-hover' : '') + } + }, + + render: function render (h) { + return h('tr', { + on: Object.assign({}, this.qListeners), + class: this.classes + }, slot(this, 'default')) + } + }); + + var QTd = Vue__default["default"].extend({ + name: 'QTd', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + autoWidth: Boolean, + noHover: Boolean + }, + + computed: { + classes: function classes () { + return 'q-td' + (this.autoWidth === true ? ' q-table--col-auto-width' : '') + + (this.noHover === true ? ' q-td--no-hover' : '') + ' ' + } + }, + + render: function render (h) { + var on = this.qListeners; + + if (this.props === void 0) { + return h('td', { + on: on, + class: this.classes + }, slot(this, 'default')) + } + + var name = this.$vnode.key; + + var col = this.props.colsMap !== void 0 && name + ? this.props.colsMap[name] + : this.props.col; + + if (col === void 0) { return } + + var row = this.props.row; + + return h('td', { + on: on, + style: col.__tdStyle(row), + class: this.classes + col.__tdClass(row) + }, slot(this, 'default')) + } + }); + + var QRouteTab = Vue__default["default"].extend({ + name: 'QRouteTab', + + mixins: [ QTab, RouterLinkMixin ], + + watch: { + routeModel: function routeModel () { + this.$tabs.__verifyRouteModel(); + } + }, + + computed: { + routeModel: function routeModel () { + return ((this.name) + " | " + (this.exact) + " | " + ((this.resolvedLink || {}).href)) + }, + + // overwritten from RouterLinkMixin + // because we want to discard the "disable" state + hasRouterLinkProps: function hasRouterLinkProps () { + return this.$router !== void 0 && + this.hasHrefLink !== true && + this.to !== void 0 && this.to !== null && this.to !== '' + } + }, + + render: function render (h) { + return this.__renderTab(h, this.linkTag) + } + }); + + function preventKbdArrows (ev) { + [ 37, 38, 39, 40 ].includes(ev.keyCode) === true && prevent(ev); + } + + var QTime = Vue__default["default"].extend({ + name: 'QTime', + + mixins: [ DateTimeMixin ], + + directives: { + TouchPan: TouchPan + }, + + props: { + mask: { + default: null + }, + + format24h: { + type: Boolean, + default: null + }, + + defaultDate: { + type: String, + validator: function (v) { return /^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(v); } + }, + + options: Function, + hourOptions: Array, + minuteOptions: Array, + secondOptions: Array, + + withSeconds: Boolean, + nowBtn: Boolean + }, + + data: function data () { + var model = __splitDate( + this.value, + this.__getMask(), + this.__getLocale(), + this.calendar, + this.__getDefaultDateModel() + ); + + var view = 'Hour'; + + if (model.hour !== null) { + if (model.minute === null) { + view = 'Minute'; + } + else if (this.withSeconds === true && model.second === null) { + view = 'Second'; + } + } + + return { + view: view, + isAM: model.hour === null || model.hour < 12, + innerModel: model + } + }, + + watch: { + value: function value (v) { + var model = __splitDate( + v, + this.computedMask, + this.computedLocale, + this.calendar, + this.defaultDateModel + ); + + if ( + model.dateHash !== this.innerModel.dateHash || + model.timeHash !== this.innerModel.timeHash + ) { + this.innerModel = model; + + if (model.hour === null) { + this.__goToView('Hour'); + } + else { + this.isAM = model.hour < 12; + + if (model.minute === null && this.view === 'Second') { + this.__goToView('Minute'); + } + } + } + }, + + computedMask: function computedMask () { + var this$1$1 = this; + + this.$nextTick(function () { + this$1$1.__updateValue(); + }); + }, + + computedLocale: function computedLocale () { + var this$1$1 = this; + + this.$nextTick(function () { + this$1$1.__updateValue(); + }); + } + }, + + computed: { + classes: function classes () { + return "q-time q-time--" + (this.landscape === true ? 'landscape' : 'portrait') + + " q-time--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + + (this.disable === true ? ' disabled' : (this.readonly === true ? ' q-time--readonly' : '')) + + (this.bordered === true ? ' q-time--bordered' : '') + + (this.square === true ? ' q-time--square no-border-radius' : '') + + (this.flat === true ? ' q-time--flat no-shadow' : '') + + ' q-key-group-navigation--ignore-key' + }, + + stringModel: function stringModel () { + var time = this.innerModel; + + return { + hour: time.hour === null + ? '--' + : ( + this.computedFormat24h === true + ? pad(time.hour) + : String( + this.isAM === true + ? (time.hour === 0 ? 12 : time.hour) + : (time.hour > 12 ? time.hour - 12 : time.hour) + ) + ), + minute: time.minute === null + ? '--' + : pad(time.minute), + second: time.second === null + ? '--' + : pad(time.second) + } + }, + + defaultDateModel: function defaultDateModel () { + return this.__getDefaultDateModel() + }, + + computedFormat24h: function computedFormat24h () { + return this.format24h !== null + ? this.format24h + : this.$q.lang.date.format24h + }, + + pointerStyle: function pointerStyle () { + var + forHour = this.view === 'Hour', + divider = forHour === true ? 12 : 60, + amount = this.innerModel[this.view.toLowerCase()], + degrees = Math.round(amount * (360 / divider)) - 180; + + var transform = "rotate(" + degrees + "deg) translateX(-50%)"; + + if ( + forHour === true && + this.computedFormat24h === true && + this.innerModel.hour >= 12 + ) { + transform += ' scale(.7)'; + } + + return { transform: transform } + }, + + minLink: function minLink () { + return this.innerModel.hour !== null + }, + + secLink: function secLink () { + return this.minLink === true && this.innerModel.minute !== null + }, + + hourInSelection: function hourInSelection () { + var this$1$1 = this; + + return this.hourOptions !== void 0 + ? function (val) { return this$1$1.hourOptions.includes(val); } + : ( + this.options !== void 0 + ? function (val) { return this$1$1.options(val, null, null); } + : void 0 + ) + }, + + minuteInSelection: function minuteInSelection () { + var this$1$1 = this; + + return this.minuteOptions !== void 0 + ? function (val) { return this$1$1.minuteOptions.includes(val); } + : ( + this.options !== void 0 + ? function (val) { return this$1$1.options(this$1$1.innerModel.hour, val, null); } + : void 0 + ) + }, + + secondInSelection: function secondInSelection () { + var this$1$1 = this; + + return this.secondOptions !== void 0 + ? function (val) { return this$1$1.secondOptions.includes(val); } + : ( + this.options !== void 0 + ? function (val) { return this$1$1.options(this$1$1.innerModel.hour, this$1$1.innerModel.minute, val); } + : void 0 + ) + }, + + validHours: function validHours () { + if (this.hourInSelection !== void 0) { + var am = this.__getValidValues(0, 11, this.hourInSelection); + var pm = this.__getValidValues(12, 11, this.hourInSelection); + return { am: am, pm: pm, values: am.values.concat(pm.values) } + } + }, + + validMinutes: function validMinutes () { + if (this.minuteInSelection !== void 0) { + return this.__getValidValues(0, 59, this.minuteInSelection) + } + }, + + validSeconds: function validSeconds () { + if (this.secondInSelection !== void 0) { + return this.__getValidValues(0, 59, this.secondInSelection) + } + }, + + viewValidOptions: function viewValidOptions () { + switch (this.view) { + case 'Hour': + return this.validHours + case 'Minute': + return this.validMinutes + case 'Second': + return this.validSeconds + } + }, + + positions: function positions () { + var start, end, offset = 0, step = 1; + var values = this.viewValidOptions !== void 0 + ? this.viewValidOptions.values + : void 0; + + if (this.view === 'Hour') { + if (this.computedFormat24h === true) { + start = 0; + end = 23; + } + else { + start = 0; + end = 11; + + if (this.isAM === false) { + offset = 12; + } + } + } + else { + start = 0; + end = 55; + step = 5; + } + + var pos = []; + + for (var val = start, index = start; val <= end; val += step, index++) { + var + actualVal = val + offset, + disable = values !== void 0 && values.includes(actualVal) === false, + label = this.view === 'Hour' && val === 0 + ? (this.computedFormat24h === true ? '00' : '12') + : val; + + pos.push({ val: actualVal, index: index, disable: disable, label: label }); + } + + return pos + } + }, + + methods: { + setNow: function setNow () { + var nowStr = this.__updateValue(Object.assign({}, this.__getCurrentDate(), + this.__getCurrentTime())); + + var model = __splitDate( + nowStr, + this.computedMask, + this.computedLocale, + this.calendar, + this.defaultDateModel + ); + + this.innerModel = model; + this.isAM = model.hour < 12; + + this.__goToView('Hour'); + }, + + __getValidValues: function __getValidValues (start, count, testFn) { + var values = Array.apply(null, { length: count + 1 }) + .map(function (_, index) { + var i = index + start; + return { + index: i, + val: testFn(i) === true // force boolean + } + }) + .filter(function (v) { return v.val === true; }) + .map(function (v) { return v.index; }); + + return { + min: values[0], + max: values[values.length - 1], + values: values, + threshold: count + 1 + } + }, + + __getWheelDist: function __getWheelDist (a, b, threshold) { + var diff = Math.abs(a - b); + return Math.min(diff, threshold - diff) + }, + + __getNormalizedClockValue: function __getNormalizedClockValue (val, ref) { + var min = ref.min; + var max = ref.max; + var values = ref.values; + var threshold = ref.threshold; + + if (val === min) { + return min + } + + if (val < min || val > max) { + return this.__getWheelDist(val, min, threshold) <= this.__getWheelDist(val, max, threshold) + ? min + : max + } + + var + index = values.findIndex(function (v) { return val <= v; }), + before = values[index - 1], + after = values[index]; + + return val - before <= after - val + ? before + : after + }, + + __getMask: function __getMask () { + return this.calendar !== 'persian' && this.mask !== null + ? this.mask + : ("HH:mm" + (this.withSeconds === true ? ':ss' : '')) + }, + + __getDefaultDateModel: function __getDefaultDateModel () { + if (typeof this.defaultDate !== 'string') { + var date = this.__getCurrentDate(true); + date.dateHash = this.__getDayHash(date); + return date + } + + return __splitDate(this.defaultDate, 'YYYY/MM/DD', void 0, this.calendar) + }, + + __click: function __click (evt) { + if (this.__shouldAbortInteraction() !== true) { + // __activate() has already updated the offset + // (on desktop only, through mousedown event) + if (this.$q.platform.is.desktop !== true) { + this.__updateClock(evt, this.__getClockRect()); + } + + this.__goToNextView(); + } + }, + + __activate: function __activate (evt) { + if (this.__shouldAbortInteraction() !== true) { + this.__updateClock(evt, this.__getClockRect()); + } + }, + + __shouldAbortInteraction: function __shouldAbortInteraction () { + return this._isBeingDestroyed === true || + this._isDestroyed === true || + // if we have limited options, can we actually set any? + ( + this.viewValidOptions !== void 0 && + ( + this.viewValidOptions.values.length === 0 || + ( + this.view === 'Hour' && this.computedFormat24h !== true && + this.validHours[this.isAM === true ? 'am' : 'pm'].values.length === 0 + ) + ) + ) + }, + + __getClockRect: function __getClockRect () { + var + clock = this.$refs.clock; + var ref = clock.getBoundingClientRect(); + var top = ref.top; + var left = ref.left; + var width = ref.width; + var dist = width / 2; + + return { + top: top + dist, + left: left + dist, + dist: dist * 0.7 + } + }, + + __goToView: function __goToView (view) { + if (this.view !== view) { + this.view = view; + } + if (this.$refs[view] !== void 0 && this.$refs[view] !== document.activeElement) { + this.$refs[view].focus(); + } + }, + + __goToNextView: function __goToNextView () { + if (this.view === 'Hour') { + this.__goToView('Minute'); + } + else if (this.withSeconds && this.view === 'Minute') { + this.__goToView('Second'); + } + else { + this.__updateValue(void 0, true); + } + }, + + __drag: function __drag (event) { + if (this.__shouldAbortInteraction() === true) { + return + } + + if (event.isFinal === true) { + this.draggingClockRect = false; + this.dragCache = null; + this.__goToNextView(); + } + else if (event.isFirst === true) { + this.draggingClockRect = this.__getClockRect(); + this.dragCache = this.__updateClock(event.evt, this.draggingClockRect); + } + else { + this.dragCache = this.__updateClock(event.evt, this.draggingClockRect, this.dragCache); + } + }, + + __updateClock: function __updateClock (evt, clockRect, cacheVal) { + var + pos = position(evt), + height = Math.abs(pos.top - clockRect.top), + distance = Math.sqrt( + Math.pow(Math.abs(pos.top - clockRect.top), 2) + + Math.pow(Math.abs(pos.left - clockRect.left), 2) + ); + + var + val, + angle = Math.asin(height / distance) * (180 / Math.PI); + + if (pos.top < clockRect.top) { + angle = clockRect.left < pos.left ? 90 - angle : 270 + angle; + } + else { + angle = clockRect.left < pos.left ? angle + 90 : 270 - angle; + } + + if (this.view === 'Hour') { + val = angle / 30; + + if (this.validHours !== void 0) { + var am = this.computedFormat24h !== true + ? this.isAM === true + : ( + this.validHours.am.values.length > 0 && this.validHours.pm.values.length > 0 + ? distance >= clockRect.dist + : this.validHours.am.values.length > 0 + ); + + val = this.__getNormalizedClockValue( + val + (am === true ? 0 : 12), + this.validHours[am === true ? 'am' : 'pm'] + ); + } + else { + val = Math.round(val); + + if (this.computedFormat24h === true) { + if (distance < clockRect.dist) { + if (val < 12) { + val += 12; + } + } + else if (val === 12) { + val = 0; + } + } + else if (this.isAM === true && val === 12) { + val = 0; + } + else if (this.isAM === false && val !== 12) { + val += 12; + } + } + + if (this.computedFormat24h === true) { + this.isAM = val < 12; + } + } + else { + val = Math.round(angle / 6) % 60; + + if (this.view === 'Minute' && this.validMinutes !== void 0) { + val = this.__getNormalizedClockValue(val, this.validMinutes); + } + else if (this.view === 'Second' && this.validSeconds !== void 0) { + val = this.__getNormalizedClockValue(val, this.validSeconds); + } + } + + if (cacheVal !== val) { + this[("__set" + (this.view))](val); + } + + return val + }, + + __onKeyupHour: function __onKeyupHour (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Hour' && this.__goToNextView(); + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + var payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1; + + if (this.validHours !== void 0) { + var values = this.computedFormat24h === true + ? this.validHours.values + : this.validHours[this.isAM === true ? 'am' : 'pm'].values; + + if (values.length === 0) { return } + + if (this.innerModel.hour === null) { + this.__setHour(values[0]); + } + else { + var index = ( + values.length + + values.indexOf(this.innerModel.hour) + + payload + ) % values.length; + + this.__setHour(values[index]); + } + } + else { + var + wrap = this.computedFormat24h === true ? 24 : 12, + offset = this.computedFormat24h !== true && this.isAM === false ? 12 : 0, + val = this.innerModel.hour === null ? -payload : this.innerModel.hour; + + this.__setHour(offset + (24 + val + payload) % wrap); + } + } + }, + + __onKeyupMinute: function __onKeyupMinute (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Minute' && this.__goToNextView(); + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + var payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1; + + if (this.validMinutes !== void 0) { + var values = this.validMinutes.values; + + if (values.length === 0) { return } + + if (this.innerModel.minute === null) { + this.__setMinute(values[0]); + } + else { + var index = ( + values.length + + values.indexOf(this.innerModel.minute) + + payload + ) % values.length; + + this.__setMinute(values[index]); + } + } + else { + var val = this.innerModel.minute === null ? -payload : this.innerModel.minute; + this.__setMinute((60 + val + payload) % 60); + } + } + }, + + __onKeyupSecond: function __onKeyupSecond (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Second' && this.__goToNextView(); + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + var payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1; + + if (this.validSeconds !== void 0) { + var values = this.validSeconds.values; + + if (values.length === 0) { return } + + if (this.innerModel.seconds === null) { + this.__setSecond(values[0]); + } + else { + var index = ( + values.length + + values.indexOf(this.innerModel.second) + + payload + ) % values.length; + + this.__setSecond(values[index]); + } + } + else { + var val = this.innerModel.second === null ? -payload : this.innerModel.second; + this.__setSecond((60 + val + payload) % 60); + } + } + }, + + __getHeader: function __getHeader (h) { + var this$1$1 = this; + + var label = [ + h('div', { + key: 'vH', + staticClass: 'q-time__link', + class: this.view === 'Hour' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Hour' }, + on: cache(this, 'vH', { + focus: function () { this$1$1.view = 'Hour'; }, + keydown: preventKbdArrows, + keyup: this.__onKeyupHour + }) + }, [ this.stringModel.hour ]), + + h('div', [ ':' ]), + + h( + 'div', + this.minLink === true + ? { + key: 'vM', + ref: 'Minute', + staticClass: 'q-time__link', + class: this.view === 'Minute' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Minute' }, + on: cache(this, 'vM', { + focus: function () { this$1$1.view = 'Minute'; }, + keydown: preventKbdArrows, + keyup: this.__onKeyupMinute + }) + } + : { staticClass: 'q-time__link' }, + [ this.stringModel.minute ] + ) + ]; + + if (this.withSeconds === true) { + label.push( + h('div', [ ':' ]), + + h( + 'div', + this.secLink === true + ? { + key: 'vS', + ref: 'Second', + staticClass: 'q-time__link', + class: this.view === 'Second' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Second' }, + on: cache(this, 'vS', { + focus: function () { this$1$1.view = 'Second'; }, + keydown: preventKbdArrows, + keyup: this.__onKeyupSecond + }) + } + : { staticClass: 'q-time__link' }, + [ this.stringModel.second ] + ) + ); + } + + return h('div', { + staticClass: 'q-time__header flex flex-center no-wrap', + class: this.headerClass + }, [ + h('div', { + staticClass: 'q-time__header-label row items-center no-wrap', + attrs: { dir: 'ltr' } + }, label), + + this.computedFormat24h === false ? h('div', { + staticClass: 'q-time__header-ampm column items-between no-wrap' + }, [ + h('div', { + key: 'AM', + staticClass: 'q-time__link', + class: this.isAM === true ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'AM', { + click: this.__setAm, + keyup: function (e) { e.keyCode === 13 && this$1$1.__setAm(); } + }) + }, [ 'AM' ]), + + h('div', { + key: 'PM', + staticClass: 'q-time__link', + class: this.isAM !== true ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'PM', { + click: this.__setPm, + keyup: function (e) { e.keyCode === 13 && this$1$1.__setPm(); } + }) + }, [ 'PM' ]) + ]) : null + ]) + }, + + __getClock: function __getClock (h) { + var this$1$1 = this; + + var + view = this.view.toLowerCase(), + current = this.innerModel[view]; + + return h('div', { + staticClass: 'q-time__content col relative-position' + }, [ + h('transition', { + props: { name: 'q-transition--scale' } + }, [ + h('div', { + key: 'clock' + this.view, + staticClass: 'q-time__container-parent absolute-full' + }, [ + h('div', { + ref: 'clock', + staticClass: 'q-time__container-child fit overflow-hidden' + }, [ + h('div', { + key: 'click', + staticClass: 'q-time__clock cursor-pointer non-selectable', + on: cache(this, 'click', { + click: this.__click, + mousedown: this.__activate + }), + directives: cache(this, 'touch', [{ + name: 'touch-pan', + value: this.__drag, + modifiers: { + stop: true, + prevent: true, + mouse: true + } + }]) + }, [ + h('div', { staticClass: 'q-time__clock-circle fit' }, [ + h('div', { + staticClass: 'q-time__clock-pointer', + style: this.pointerStyle, + class: this.innerModel[view] === null ? 'hidden' : (this.color !== void 0 ? ("text-" + (this.color)) : '') + }), + + this.positions.map(function (pos) { return h('div', { + staticClass: ("q-time__clock-position row flex-center q-time__clock-pos-" + (pos.index)), + class: pos.val === current + ? this$1$1.headerClass.concat(' q-time__clock-position--active') + : (pos.disable === true ? 'q-time__clock-position--disabled' : null) + }, [ h('span', [ pos.label ]) ]); }) + ]) + ]) + ]) + ]) + ]), + + this.nowBtn === true ? h(QBtn, { + key: 'now', + staticClass: 'q-time__now-button absolute', + props: { + icon: this.$q.iconSet.datetime.now, + unelevated: true, + size: 'sm', + round: true, + color: this.color, + textColor: this.textColor, + tabindex: this.computedTabindex + }, + on: cache(this, 'now', { + click: this.setNow + }) + }) : null + ]) + }, + + __setHour: function __setHour (hour) { + if (this.innerModel.hour !== hour) { + this.innerModel.hour = hour; + this.__verifyAndUpdate(); + } + }, + + __setMinute: function __setMinute (minute) { + if (this.innerModel.minute !== minute) { + this.innerModel.minute = minute; + this.__verifyAndUpdate(); + } + }, + + __setSecond: function __setSecond (second) { + if (this.innerModel.second !== second) { + this.innerModel.second = second; + this.__verifyAndUpdate(); + } + }, + + __setAm: function __setAm () { + if (this.isAM === false) { + this.isAM = true; + + if (this.innerModel.hour !== null) { + this.innerModel.hour -= 12; + this.__verifyAndUpdate(); + } + } + }, + + __setPm: function __setPm () { + if (this.isAM === true) { + this.isAM = false; + + if (this.innerModel.hour !== null) { + this.innerModel.hour += 12; + this.__verifyAndUpdate(); + } + } + }, + + __verifyAndUpdate: function __verifyAndUpdate () { + if (this.hourInSelection !== void 0 && this.hourInSelection(this.innerModel.hour) !== true) { + this.innerModel = __splitDate(); + this.__goToView('Hour'); + return + } + + if (this.minuteInSelection !== void 0 && this.minuteInSelection(this.innerModel.minute) !== true) { + this.innerModel.minute = null; + this.innerModel.second = null; + this.__goToView('Minute'); + return + } + + if (this.withSeconds === true && this.secondInSelection !== void 0 && this.secondInSelection(this.innerModel.second) !== true) { + this.innerModel.second = null; + this.__goToView('Second'); + return + } + + if (this.innerModel.hour === null || this.innerModel.minute === null || (this.withSeconds === true && this.innerModel.second === null)) { + return + } + + this.__updateValue(); + }, + + __updateValue: function __updateValue (obj, final) { + var date = Object.assign(Object.assign({}, this.innerModel), obj); + + var val = this.calendar === 'persian' + ? pad(date.hour) + ':' + + pad(date.minute) + + (this.withSeconds === true ? ':' + pad(date.second) : '') + : formatDate( + __safeCreateDate( + date.year, + date.month === null ? null : date.month - 1, + date.day, + date.hour, + date.minute, + date.second, + date.millisecond + ), + this.computedMask, + this.computedLocale, + date.year, + date.timezoneOffset + ); + + date.changed = val !== this.value; + + if (final !== true || date.changed === true) { + this.$emit('input', val, date); + } + final === true && this.$emit('change', val, date); + + return val + } + }, + + render: function render (h) { + var child = [ + this.__getClock(h) + ]; + + var def = slot(this, 'default'); + def !== void 0 && child.push( + h('div', { staticClass: 'q-time__actions' }, def) + ); + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(child, 'push'); + } + + return h('div', { + class: this.classes, + on: Object.assign({}, this.qListeners), + attrs: { tabindex: -1 } + }, [ + this.__getHeader(h), + h('div', { staticClass: 'q-time__main col overflow-auto' }, child) + ]) + } + }); + + var QTimeline = Vue__default["default"].extend({ + name: 'QTimeline', + + mixins: [ DarkMixin, ListenersMixin ], + + provide: function provide () { + return { + __timeline: this + } + }, + + props: { + color: { + type: String, + default: 'primary' + }, + side: { + type: String, + default: 'right', + validator: function (v) { return ['left', 'right'].includes(v); } + }, + layout: { + type: String, + default: 'dense', + validator: function (v) { return ['dense', 'comfortable', 'loose'].includes(v); } + } + }, + + computed: { + classes: function classes () { + return "q-timeline--" + (this.layout) + " q-timeline--" + (this.layout) + "--" + (this.side) + + " q-timeline--" + (this.darkSuffix) + } + }, + + render: function render (h) { + return h('ul', { + staticClass: 'q-timeline', + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QTimelineEntry = Vue__default["default"].extend({ + name: 'QTimelineEntry', + + inject: { + __timeline: { + default: function default$1 () { + console.error('QTimelineEntry needs to be child of QTimeline'); + } + } + }, + + mixins: [ ListenersMixin ], + + props: { + heading: Boolean, + tag: { + type: String, + default: 'h3' + }, + side: { + type: String, + default: 'right', + validator: function (v) { return ['left', 'right'].includes(v); } + }, + + icon: String, + avatar: String, + + color: String, + + title: String, + subtitle: String, + body: String + }, + + computed: { + colorClass: function colorClass () { + return ("text-" + (this.color || this.__timeline.color)) + }, + + classes: function classes () { + return "q-timeline__entry--" + (this.side) + + (this.icon !== void 0 || this.avatar !== void 0 ? ' q-timeline__entry--icon' : '') + }, + + reverse: function reverse () { + return this.__timeline.layout === 'comfortable' && this.__timeline.side === 'left' + } + }, + + render: function render (h) { + var child = uniqueSlot(this, 'default', []); + + if (this.body !== void 0) { + child.unshift(this.body); + } + + if (this.heading === true) { + var content$1 = [ + h('div'), + h('div'), + h( + this.tag, + { staticClass: 'q-timeline__heading-title' }, + child + ) + ]; + + return h('div', { + staticClass: 'q-timeline__heading', + on: Object.assign({}, this.qListeners) + }, this.reverse === true ? content$1.reverse() : content$1) + } + + var dot; + + if (this.icon !== void 0) { + dot = [ + h(QIcon, { + staticClass: 'row items-center justify-center', + props: { name: this.icon } + }) + ]; + } + else if (this.avatar !== void 0) { + dot = [ + h('img', { + staticClass: 'q-timeline__dot-img', + domProps: { src: this.avatar } + }) + ]; + } + + var content = [ + h('div', { staticClass: 'q-timeline__subtitle' }, [ + h('span', slot(this, 'subtitle', [ this.subtitle ])) + ]), + + h('div', { + staticClass: 'q-timeline__dot', + class: this.colorClass + }, dot), + + h('div', { staticClass: 'q-timeline__content' }, [ + h('h6', { staticClass: 'q-timeline__title' }, slot(this, 'title', [ this.title ])) + ].concat(child)) + ]; + + return h('li', { + staticClass: 'q-timeline__entry', + class: this.classes, + on: Object.assign({}, this.qListeners) + }, this.reverse === true ? content.reverse() : content) + } + }); + + var attrs = { role: 'toolbar' }; + + var QToolbar = Vue__default["default"].extend({ + name: 'QToolbar', + + mixins: [ ListenersMixin ], + + props: { + inset: Boolean + }, + + render: function render (h) { + return h('div', { + staticClass: 'q-toolbar row no-wrap items-center', + class: this.inset ? 'q-toolbar--inset' : null, + attrs: attrs, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var QToolbarTitle = Vue__default["default"].extend({ + name: 'QToolbarTitle', + + mixins: [ ListenersMixin ], + + props: { + shrink: Boolean + }, + + computed: { + classes: function classes () { + return 'q-toolbar__title ellipsis' + + (this.shrink === true ? ' col-shrink' : '') + } + }, + + render: function render (h) { + return h('div', { + class: this.classes, + on: Object.assign({}, this.qListeners) + }, slot(this, 'default')) + } + }); + + var tickStrategyOptions = [ 'none', 'strict', 'leaf', 'leaf-filtered' ]; + + var QTree = Vue__default["default"].extend({ + name: 'QTree', + + mixins: [ DarkMixin ], + + props: { + nodes: { + type: Array, + required: true + }, + nodeKey: { + type: String, + required: true + }, + labelKey: { + type: String, + default: 'label' + }, + childrenKey: { + type: String, + default: 'children' + }, + + dense: Boolean, + + color: String, + controlColor: String, + textColor: String, + selectedColor: String, + + icon: String, + + tickStrategy: { + type: String, + default: 'none', + validator: function (v) { return tickStrategyOptions.includes(v); } + }, + ticked: Array, // sync + expanded: Array, // sync + selected: {}, // sync + + noSelectionUnset: Boolean, + + defaultExpandAll: Boolean, + accordion: Boolean, + + filter: String, + filterMethod: { + type: Function, + default: function default$1 (node, filter) { + var filt = filter.toLowerCase(); + return node[this.labelKey] && + node[this.labelKey].toLowerCase().indexOf(filt) > -1 + } + }, + + duration: Number, + noConnectors: Boolean, + noTransition: Boolean, + + noNodesLabel: String, + noResultsLabel: String + }, + + computed: { + classes: function classes () { + return "q-tree q-tree--" + (this.dense === true ? 'dense' : 'standard') + + (this.noConnectors === true ? ' q-tree--no-connectors' : '') + + " q-tree--" + (this.darkSuffix) + + (this.color !== void 0 ? (" text-" + (this.color)) : '') + }, + + hasSelection: function hasSelection () { + return this.selected !== void 0 + }, + + computedIcon: function computedIcon () { + return this.icon || this.$q.iconSet.tree.icon + }, + + computedControlColor: function computedControlColor () { + return this.controlColor || this.color + }, + + textColorClass: function textColorClass () { + if (this.textColor !== void 0) { + return ("text-" + (this.textColor)) + } + }, + + selectedColorClass: function selectedColorClass () { + var color = this.selectedColor || this.color; + if (color) { + return ("text-" + color) + } + }, + + meta: function meta () { + var this$1$1 = this; + + var meta = this.metaMap; + meta.clear(); + + var travel = function (node, parent) { + var tickStrategy = node.tickStrategy || (parent ? parent.tickStrategy : this$1$1.tickStrategy); + var + key = node[this$1$1.nodeKey], + isParent = node[this$1$1.childrenKey] && node[this$1$1.childrenKey].length > 0, + selectable = node.disabled !== true && this$1$1.hasSelection === true && node.selectable !== false, + expandable = node.disabled !== true && node.expandable !== false, + hasTicking = tickStrategy !== 'none', + strictTicking = tickStrategy === 'strict', + leafFilteredTicking = tickStrategy === 'leaf-filtered', + leafTicking = tickStrategy === 'leaf' || tickStrategy === 'leaf-filtered'; + + var tickable = node.disabled !== true && node.tickable !== false; + if (leafTicking === true && tickable === true && parent && parent.tickable !== true) { + tickable = false; + } + + var lazy = node.lazy; + if ( + lazy === true && + this$1$1.lazy[key] !== void 0 && + Array.isArray(node[this$1$1.childrenKey]) === true + ) { + lazy = this$1$1.lazy[key]; + } + + var m = { + key: key, + parent: parent, + isParent: isParent, + lazy: lazy, + disabled: node.disabled, + link: node.disabled !== true && (selectable === true || (expandable === true && (isParent === true || lazy === true))), + children: [], + matchesFilter: this$1$1.filter ? this$1$1.filterMethod(node, this$1$1.filter) : true, + + selected: key === this$1$1.selected && selectable === true, + selectable: selectable, + expanded: isParent === true ? this$1$1.innerExpanded.includes(key) : false, + expandable: expandable, + noTick: node.noTick === true || (strictTicking !== true && lazy && lazy !== 'loaded'), + tickable: tickable, + tickStrategy: tickStrategy, + hasTicking: hasTicking, + strictTicking: strictTicking, + leafFilteredTicking: leafFilteredTicking, + leafTicking: leafTicking, + ticked: strictTicking === true + ? this$1$1.innerTicked.includes(key) + : (isParent === true ? false : this$1$1.innerTicked.includes(key)) + }; + + if (m.expanded === true && this$1$1.renderedMap.has(key) !== true) { + this$1$1.renderedMap.set(key, true); + } + + meta.set(key, m); + + if (isParent === true) { + m.children = node[this$1$1.childrenKey].map(function (n) { return travel(n, m); }); + + if (this$1$1.filter) { + if (m.matchesFilter !== true) { + m.matchesFilter = m.children.some(function (n) { return n.matchesFilter; }); + } + else if ( + m.noTick !== true && + m.disabled !== true && + m.tickable === true && + leafFilteredTicking === true && + m.children.every(function (n) { return n.matchesFilter !== true || n.noTick === true || n.tickable !== true; }) === true + ) { + m.tickable = false; + } + } + + if (m.matchesFilter === true) { + if (m.noTick !== true && strictTicking !== true && m.children.every(function (n) { return n.noTick; }) === true) { + m.noTick = true; + } + + if (leafTicking) { + m.ticked = false; + m.indeterminate = m.children.some(function (node) { return node.indeterminate === true; }); + m.tickable = m.tickable === true && m.children.some(function (node) { return node.tickable; }); + + if (m.indeterminate !== true) { + var sel = m.children + .reduce(function (acc, meta) { return meta.ticked === true ? acc + 1 : acc; }, 0); + + if (sel === m.children.length) { + m.ticked = true; + } + else if (sel > 0) { + m.indeterminate = true; + } + } + + if (m.indeterminate === true) { + m.indeterminateNextState = m.children + .every(function (meta) { return meta.tickable !== true || meta.ticked !== true; }); + } + } + } + } + + return m + }; + + this.nodes.forEach(function (node) { return travel(node, null); }); + return meta + } + }, + + data: function data () { + return { + lazy: {}, + innerTicked: this.ticked || [], + innerExpanded: this.expanded || [] + } + }, + + watch: { + ticked: function ticked (val) { + this.innerTicked = val; + }, + + expanded: function expanded (val) { + this.innerExpanded = val; + } + }, + + methods: { + getNodeByKey: function getNodeByKey (key) { + var this$1$1 = this; + + var reduce = [].reduce; + + var find = function (result, node) { + if (result || !node) { + return result + } + if (Array.isArray(node) === true) { + return reduce.call(Object(node), find, result) + } + if (node[this$1$1.nodeKey] === key) { + return node + } + if (node[this$1$1.childrenKey]) { + return find(null, node[this$1$1.childrenKey]) + } + }; + + return find(null, this.nodes) + }, + + getTickedNodes: function getTickedNodes () { + var this$1$1 = this; + + return this.innerTicked.map(function (key) { return this$1$1.getNodeByKey(key); }) + }, + + getExpandedNodes: function getExpandedNodes () { + var this$1$1 = this; + + return this.innerExpanded.map(function (key) { return this$1$1.getNodeByKey(key); }) + }, + + isExpanded: function isExpanded (key) { + var m = this.meta.get(key); + return m !== void 0 + ? m.expanded + : false + }, + + collapseAll: function collapseAll () { + if (this.expanded !== void 0) { + this.$emit('update:expanded', []); + } + else { + this.innerExpanded = []; + } + }, + + expandAll: function expandAll () { + var this$1$1 = this; + + var + expanded = this.innerExpanded, + travel = function (node) { + if (node[this$1$1.childrenKey] && node[this$1$1.childrenKey].length > 0) { + if (node.expandable !== false && node.disabled !== true) { + expanded.push(node[this$1$1.nodeKey]); + node[this$1$1.childrenKey].forEach(travel); + } + } + }; + + this.nodes.forEach(travel); + + if (this.expanded !== void 0) { + this.$emit('update:expanded', expanded); + } + else { + this.innerExpanded = expanded; + } + }, + + setExpanded: function setExpanded (key, state, node, meta) { + var this$1$1 = this; + if ( node === void 0 ) node = this.getNodeByKey(key); + if ( meta === void 0 ) meta = this.meta.get(key); + + if (meta.lazy && meta.lazy !== 'loaded') { + if (meta.lazy === 'loading') { + return + } + + this.$set(this.lazy, key, 'loading'); + if (Array.isArray(node[this.childrenKey]) !== true) { + this.$set(node, this.childrenKey, []); + } + this.$emit('lazy-load', { + node: node, + key: key, + done: function (children) { + this$1$1.lazy[key] = 'loaded'; + this$1$1.$set(node, this$1$1.childrenKey, Array.isArray(children) === true ? children : []); + this$1$1.$nextTick(function () { + var m = this$1$1.meta.get(key); + if (m !== void 0 && m.isParent === true) { + this$1$1.__setExpanded(key, true); + } + }); + }, + fail: function () { + this$1$1.$delete(this$1$1.lazy, key); + if (node[this$1$1.childrenKey].length === 0) { + this$1$1.$delete(node, this$1$1.childrenKey); + } + } + }); + } + else if (meta.isParent === true && meta.expandable === true) { + this.__setExpanded(key, state); + } + }, + + __setExpanded: function __setExpanded (key, state) { + var this$1$1 = this; + + var target = this.innerExpanded; + var emit = this.expanded !== void 0; + + if (emit === true) { + target = target.slice(); + } + + if (state) { + if (this.accordion) { + var m = this.meta.get(key); + if (m !== void 0) { + var collapse = []; + if (m.parent) { + m.parent.children.forEach(function (m) { + if (m.key !== key && m.expandable === true) { + collapse.push(m.key); + } + }); + } + else { + this.nodes.forEach(function (node) { + var k = node[this$1$1.nodeKey]; + if (k !== key) { + collapse.push(k); + } + }); + } + if (collapse.length > 0) { + target = target.filter(function (k) { return collapse.includes(k) === false; }); + } + } + } + + target = target.concat([ key ]) + .filter(function (key, index, self) { return self.indexOf(key) === index; }); + } + else { + target = target.filter(function (k) { return k !== key; }); + } + + if (emit === true) { + this.$emit('update:expanded', target); + } + else { + this.innerExpanded = target; + } + }, + + isTicked: function isTicked (key) { + var m = this.meta.get(key); + return m !== void 0 + ? m.ticked + : false + }, + + setTicked: function setTicked (keys, state) { + var target = this.innerTicked; + var emit = this.ticked !== void 0; + + if (emit === true) { + target = target.slice(); + } + + if (state) { + target = target.concat(keys) + .filter(function (key, index, self) { return self.indexOf(key) === index; }); + } + else { + target = target.filter(function (k) { return keys.includes(k) === false; }); + } + + if (emit === true) { + this.$emit('update:ticked', target); + } + }, + + __getSlotScope: function __getSlotScope (node, meta, key) { + var this$1$1 = this; + + var scope = { tree: this, node: node, key: key, color: this.color, dark: this.dark }; + + injectProp( + scope, + 'expanded', + function () { return meta.expanded }, + function (val) { val !== meta.expanded && this$1$1.setExpanded(key, val); } + ); + + injectProp( + scope, + 'ticked', + function () { return meta.ticked }, + function (val) { val !== meta.ticked && this$1$1.setTicked([ key ], val); } + ); + + return scope + }, + + __getChildren: function __getChildren (h, nodes) { + var this$1$1 = this; + + return ( + this.filter + ? nodes.filter(function (n) { return this$1$1.meta.get(n[this$1$1.nodeKey]).matchesFilter; }) + : nodes + ).map(function (child) { return this$1$1.__getNode(h, child); }) + }, + + __getNodeMedia: function __getNodeMedia (h, node) { + if (node.icon !== void 0) { + return h(QIcon, { + staticClass: 'q-tree__icon q-mr-sm', + props: { name: node.icon, color: node.iconColor } + }) + } + var src = node.img || node.avatar; + if (src) { + return h('img', { + staticClass: ("q-tree__" + (node.img ? 'img' : 'avatar') + " q-mr-sm"), + attrs: { src: src } + }) + } + }, + + __getNode: function __getNode (h, node) { + var this$1$1 = this; + + var + key = node[this.nodeKey], + meta = this.meta.get(key), + header = node.header + ? this.$scopedSlots[("header-" + (node.header))] || this.$scopedSlots['default-header'] + : this.$scopedSlots['default-header']; + + var children = meta.isParent === true + ? this.__getChildren(h, node[this.childrenKey]) + : []; + + var isParent = children.length > 0 || (meta.lazy && meta.lazy !== 'loaded'); + + var body = node.body + ? this.$scopedSlots[("body-" + (node.body))] || this.$scopedSlots['default-body'] + : this.$scopedSlots['default-body']; + var slotScope = header !== void 0 || body !== void 0 + ? this.__getSlotScope(node, meta, key) + : null; + + if (body !== void 0) { + body = h('div', { staticClass: 'q-tree__node-body relative-position' }, [ + h('div', { class: this.textColorClass }, [ + body(slotScope) + ]) + ]); + } + + var getChildren = function () { return h( + 'div', + { + staticClass: 'q-tree__node-collapsible', + class: this$1$1.textColorClass, + directives: [{ name: 'show', value: meta.expanded }] + }, + this$1$1.renderedMap.has(key) === true + ? [ + body, + + h('div', { + staticClass: 'q-tree__children', + class: { 'q-tree__node--disabled': meta.disabled } + }, children) + ] + : void 0 + ); }; + + return h('div', { + key: key, + staticClass: 'q-tree__node relative-position', + class: { 'q-tree__node--parent': isParent, 'q-tree__node--child': isParent !== true } + }, [ + h('div', { + staticClass: 'q-tree__node-header relative-position row no-wrap items-center', + class: { + 'q-tree__node--link q-hoverable q-focusable': meta.link, + 'q-tree__node--selected': meta.selected, + 'q-tree__node--disabled': meta.disabled + }, + attrs: { tabindex: meta.link ? 0 : -1 }, + on: { + click: function (e) { + this$1$1.__onClick(node, meta, e); + }, + keypress: function (e) { + if (shouldIgnoreKey(e) !== true) { + if (e.keyCode === 13) { this$1$1.__onClick(node, meta, e, true); } + else if (e.keyCode === 32) { this$1$1.__onExpandClick(node, meta, e, true); } + } + } + } + }, [ + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: ("blurTarget_" + (meta.key)) }), + + meta.lazy === 'loading' + ? h(QSpinner, { + staticClass: 'q-tree__spinner', + props: { color: this.computedControlColor } + }) + : ( + isParent === true + ? h(QIcon, { + staticClass: 'q-tree__arrow', + class: { 'q-tree__arrow--rotate': meta.expanded }, + props: { name: this.computedIcon }, + on: { + click: function (e) { + this$1$1.__onExpandClick(node, meta, e); + } + } + }) + : null + ), + + meta.hasTicking === true && meta.noTick !== true + ? h(QCheckbox, { + staticClass: 'q-tree__tickbox', + props: { + value: meta.indeterminate === true ? null : meta.ticked, + color: this.computedControlColor, + dark: this.dark, + dense: true, + keepColor: true, + disable: meta.tickable !== true + }, + on: { + keydown: stopAndPrevent, + input: function (v) { + this$1$1.__onTickedClick(meta, v); + } + } + }) + : null, + + h('div', { + 'staticClass': 'q-tree__node-header-content col row no-wrap items-center', + class: meta.selected ? this.selectedColorClass : this.textColorClass + }, [ + header + ? header(slotScope) + : [ + this.__getNodeMedia(h, node), + h('div', node[this.labelKey]) + ] + ]) + ]), + + isParent === true + ? ( + this.noTransition === true + ? getChildren() + : h(QSlideTransition, { + key: 'slide', + props: { duration: this.duration }, + on: cache(this, 'slide', { + show: function () { this$1$1.$emit('after-show'); }, + hide: function () { this$1$1.$emit('after-hide'); } + }) + }, [ getChildren() ]) + ) + : ( + this.renderedMap.has(key) === true + ? body + : void 0 + ) + ]) + }, + + __blur: function __blur (key) { + var blurTarget = this.$refs[("blurTarget_" + key)]; + blurTarget !== void 0 && blurTarget.focus(); + }, + + __onClick: function __onClick (node, meta, e, keyboard) { + keyboard !== true && this.__blur(meta.key); + + if (this.hasSelection && meta.selectable) { + if (this.noSelectionUnset === false) { + this.$emit('update:selected', meta.key !== this.selected ? meta.key : null); + } + else if (meta.key !== this.selected) { + this.$emit('update:selected', meta.key === void 0 ? null : meta.key); + } + } + else { + this.__onExpandClick(node, meta, e, keyboard); + } + + if (typeof node.handler === 'function') { + node.handler(node); + } + }, + + __onExpandClick: function __onExpandClick (node, meta, e, keyboard) { + if (e !== void 0) { + stopAndPrevent(e); + } + keyboard !== true && this.__blur(meta.key); + this.setExpanded(meta.key, meta.expanded !== true, node, meta); + }, + + __onTickedClick: function __onTickedClick (meta, state) { + if (meta.indeterminate === true) { + state = meta.indeterminateNextState; + } + if (meta.strictTicking) { + this.setTicked([ meta.key ], state); + } + else if (meta.leafTicking) { + var keys = []; + var travel = function (meta) { + if (meta.isParent) { + if (state !== true && meta.noTick !== true && meta.tickable === true) { + keys.push(meta.key); + } + if (meta.leafTicking === true) { + meta.children.forEach(travel); + } + } + else if ( + meta.noTick !== true && + meta.tickable === true && + (meta.leafFilteredTicking !== true || meta.matchesFilter === true) + ) { + keys.push(meta.key); + } + }; + travel(meta); + this.setTicked(keys, state); + } + } + }, + + render: function render (h) { + var children = this.__getChildren(h, this.nodes); + + return h( + 'div', { + class: this.classes + }, + children.length === 0 + ? ( + this.filter + ? this.noResultsLabel || this.$q.lang.tree.noResults + : this.noNodesLabel || this.$q.lang.tree.noNodes + ) + : children + ) + }, + + created: function created () { + this.renderedMap = new Map(); + this.metaMap = new Map(); + this.defaultExpandAll === true && this.expandAll(); + }, + + beforeDestroy: function beforeDestroy () { + this.renderedMap.clear(); + this.renderedMap = void 0; + this.metaMap.clear(); + this.metaMap = void 0; + } + }); + + var QUploaderBase = Vue__default["default"].extend({ + name: 'QUploaderBase', + + mixins: [ DarkMixin, FileMixin ], + + props: { + label: String, + + color: String, + textColor: String, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + noThumbnails: Boolean, + autoUpload: Boolean, + hideUploadBtn: Boolean, + + disable: Boolean, + readonly: Boolean + }, + + provide: function provide () { + return { + __qUploaderGetInput: this.__getInputControl + } + }, + + data: function data () { + return { + files: [], + queuedFiles: [], + uploadedFiles: [], + dnd: false, + expanded: false, + + uploadSize: 0, + uploadedSize: 0 + } + }, + + watch: { + isUploading: function isUploading (newVal, oldVal) { + if (oldVal === false && newVal === true) { + this.$emit('start'); + } + else if (oldVal === true && newVal === false) { + this.$emit('finish'); + } + } + }, + + computed: { + /* + * When extending: + * Required : isUploading + * Optional: isBusy + */ + + canUpload: function canUpload () { + return this.editable === true && + this.isBusy !== true && + this.isUploading !== true && + this.queuedFiles.length > 0 + }, + + canAddFiles: function canAddFiles () { + return ( + this.editable === true && + this.isUploading !== true && + // if single selection and no files are queued: + (this.multiple === true || this.queuedFiles.length === 0) && + // if max-files is set and current number of files does not exceeds it: + (this.maxFiles === void 0 || this.files.length < this.maxFilesNumber) && + // if max-total-size is set and current upload size does not exceeds it: + (this.maxTotalSize === void 0 || this.uploadSize < this.maxTotalSizeNumber) + ) + }, + + uploadProgress: function uploadProgress () { + return this.uploadSize === 0 + ? 0 + : this.uploadedSize / this.uploadSize + }, + + uploadProgressLabel: function uploadProgressLabel () { + return this.__getProgressLabel(this.uploadProgress) + }, + + uploadedSizeLabel: function uploadedSizeLabel () { + return humanStorageSize(this.uploadedSize) + }, + + uploadSizeLabel: function uploadSizeLabel () { + return humanStorageSize(this.uploadSize) + }, + + colorClass: function colorClass () { + var cls = []; + this.color !== void 0 && cls.push(("bg-" + (this.color))); + this.textColor !== void 0 && cls.push(("text-" + (this.textColor))); + return cls.join(' ') + }, + + editable: function editable () { + return this.disable !== true && this.readonly !== true + } + }, + + methods: { + reset: function reset () { + if (!this.disable) { + this.abort(); + this.uploadedSize = 0; + this.uploadSize = 0; + this.__revokeImgURLs(); + this.files = []; + this.queuedFiles = []; + this.uploadedFiles = []; + } + }, + + removeUploadedFiles: function removeUploadedFiles () { + var this$1$1 = this; + + this.__removeFiles([ 'uploaded' ], function () { + this$1$1.uploadedFiles = []; + }); + }, + + removeQueuedFiles: function removeQueuedFiles () { + var this$1$1 = this; + + this.__removeFiles([ 'idle', 'failed' ], function (ref) { + var size = ref.size; + + this$1$1.uploadSize -= size; + this$1$1.queuedFiles = []; + }); + }, + + __removeFiles: function __removeFiles (statusList, cb) { + if (this.disable === true) { + return + } + + var removed = { + files: [], + size: 0 + }; + + var files = this.files.filter(function (f) { + if (statusList.indexOf(f.__status) === -1) { + return true + } + + removed.size += f.size; + removed.files.push(f); + + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src); + + return false + }); + + if (removed.files.length > 0) { + this.files = files; + cb !== void 0 && cb(removed); + this.$emit('removed', removed.files); + } + }, + + removeFile: function removeFile (file) { + if (this.disable) { return } + + if (file.__status === 'uploaded') { + this.uploadedFiles = this.uploadedFiles.filter(function (f) { return f.__key !== file.__key; }); + } + else if (file.__status === 'uploading') { + file.__abort(); + } + else { + this.uploadSize -= file.size; + } + + this.files = this.files.filter(function (f) { + if (f.__key !== file.__key) { + return true + } + + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src); + + return false + }); + this.queuedFiles = this.queuedFiles.filter(function (f) { return f.__key !== file.__key; }); + this.$emit('removed', [ file ]); + }, + + __revokeImgURLs: function __revokeImgURLs () { + this.files.forEach(function (f) { + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src); + }); + }, + + __getFileInput: function __getFileInput () { + return this.$refs.input || + this.$el.getElementsByClassName('q-uploader__input')[0] + }, + + __getProgressLabel: function __getProgressLabel (p) { + return (p * 100).toFixed(2) + '%' + }, + + __updateFile: function __updateFile (file, status, uploadedSize) { + file.__status = status; + + if (status === 'idle') { + file.__uploaded = 0; + file.__progress = 0; + file.__sizeLabel = humanStorageSize(file.size); + file.__progressLabel = '0.00%'; + return + } + if (status === 'failed') { + this.$forceUpdate(); + return + } + + file.__uploaded = status === 'uploaded' + ? file.size + : uploadedSize; + + file.__progress = status === 'uploaded' + ? 1 + : Math.min(0.9999, file.__uploaded / file.size); + + file.__progressLabel = this.__getProgressLabel(file.__progress); + this.$forceUpdate(); + }, + + __addFiles: function __addFiles (e, fileList) { + var this$1$1 = this; + + var localFiles = this.__processFiles(e, fileList, this.files, true); + var fileInput = this.__getFileInput(); + + if (fileInput !== void 0) { + fileInput.value = ''; + } + + if (localFiles === void 0) { return } + + localFiles.forEach(function (file) { + this$1$1.__updateFile(file, 'idle'); + this$1$1.uploadSize += file.size; + + if (this$1$1.noThumbnails !== true && file.type.toUpperCase().startsWith('IMAGE')) { + var img = new Image(); + img.src = window.URL.createObjectURL(file); + file.__img = img; + } + }); + + this.files = this.files.concat(localFiles); + this.queuedFiles = this.queuedFiles.concat(localFiles); + this.$emit('added', localFiles); + this.autoUpload === true && this.upload(); + }, + + __getBtn: function __getBtn (h, show, icon, fn) { + if (show === true) { + return h(QBtn, { + props: { + type: 'a', + icon: this.$q.iconSet.uploader[icon], + flat: true, + dense: true + }, + on: { click: icon === 'add' ? this.pickFiles : fn } + }, icon === 'add' ? this.__getInputControl(h) : null) + } + }, + + __getInputControl: function __getInputControl (h) { + return [ + h('input', { + key: 'input', + ref: 'input', + staticClass: 'q-uploader__input overflow-hidden absolute-full', + attrs: Object.assign({}, {tabindex: -1, + type: 'file', + title: '', // try to remove default tooltip + accept: this.accept, + capture: this.capture}, + (this.multiple === true ? { multiple: true } : {})), + on: cache(this, 'input', { + mousedown: stop, // need to stop refocus from QBtn + click: this.pickFiles, + change: this.__addFiles + }) + }) + ] + }, + + __getHeader: function __getHeader (h) { + if (this.$scopedSlots.header !== void 0) { + return this.$scopedSlots.header(this) + } + + return [ + h('div', { + staticClass: 'q-uploader__header-content column' + }, [ + h('div', { + staticClass: 'flex flex-center no-wrap q-gutter-xs' + }, [ + this.__getBtn(h, this.queuedFiles.length > 0, 'removeQueue', this.removeQueuedFiles), + this.__getBtn(h, this.uploadedFiles.length > 0, 'removeUploaded', this.removeUploadedFiles), + + this.isUploading === true + ? h(QSpinner, { staticClass: 'q-uploader__spinner' }) + : null, + + h('div', { staticClass: 'col column justify-center' }, [ + this.label !== void 0 + ? h('div', { staticClass: 'q-uploader__title' }, [ this.label ]) + : null, + + h('div', { staticClass: 'q-uploader__subtitle' }, [ + this.uploadSizeLabel + ' / ' + this.uploadProgressLabel + ]) + ]), + + this.__getBtn(h, this.canAddFiles, 'add', this.pickFiles), + this.__getBtn(h, this.hideUploadBtn === false && this.canUpload === true, 'upload', this.upload), + this.__getBtn(h, this.isUploading, 'clear', this.abort) + ]) + ]) + ] + }, + + __getList: function __getList (h) { + var this$1$1 = this; + + if (this.$scopedSlots.list !== void 0) { + return this.$scopedSlots.list(this) + } + + return this.files.map(function (file) { return h('div', { + key: file.__key, + staticClass: 'q-uploader__file relative-position', + class: { + 'q-uploader__file--img': this$1$1.noThumbnails !== true && file.__img !== void 0, + 'q-uploader__file--failed': file.__status === 'failed', + 'q-uploader__file--uploaded': file.__status === 'uploaded' + }, + style: this$1$1.noThumbnails !== true && file.__img !== void 0 ? { + backgroundImage: 'url("' + file.__img.src + '")' + } : null + }, [ + h('div', { + staticClass: 'q-uploader__file-header row flex-center no-wrap' + }, [ + file.__status === 'failed' + ? h(QIcon, { + staticClass: 'q-uploader__file-status', + props: { + name: this$1$1.$q.iconSet.type.negative, + color: 'negative' + } + }) + : null, + + h('div', { staticClass: 'q-uploader__file-header-content col' }, [ + h('div', { staticClass: 'q-uploader__title' }, [ file.name ]), + h('div', { + staticClass: 'q-uploader__subtitle row items-center no-wrap' + }, [ + file.__sizeLabel + ' / ' + file.__progressLabel + ]) + ]), + + file.__status === 'uploading' + ? h(QCircularProgress, { + props: { + value: file.__progress, + min: 0, + max: 1, + indeterminate: file.__progress === 0 + } + }) + : h(QBtn, { + props: { + round: true, + dense: true, + flat: true, + icon: this$1$1.$q.iconSet.uploader[file.__status === 'uploaded' ? 'done' : 'clear'] + }, + on: { + click: function () { this$1$1.removeFile(file); } + } + }) + ]) + ]); }) + } + }, + + beforeDestroy: function beforeDestroy () { + this.isUploading === true && this.abort(); + this.files.length > 0 && this.__revokeImgURLs(); + }, + + render: function render (h) { + var obj; + + var children = [ + h('div', { + staticClass: 'q-uploader__header', + class: this.colorClass + }, this.__getHeader(h)), + + h('div', { + staticClass: 'q-uploader__list scroll' + }, this.__getList(h)), + + this.__getDnd(h, 'uploader') + ]; + + this.isBusy === true && children.push( + h('div', { + staticClass: 'q-uploader__overlay absolute-full flex flex-center' + }, [ h(QSpinner) ]) + ); + + return h('div', { + key: 'drag', + staticClass: 'q-uploader column no-wrap', + class: ( obj = {}, obj[("q-uploader--" + (this.darkSuffix) + " q-" + (this.darkSuffix))] = true, obj['q-uploader--bordered'] = this.bordered, obj['q-uploader--square no-border-radius'] = this.square, obj['q-uploader--flat no-shadow'] = this.flat, obj['disabled q-uploader--disabled'] = this.disable, obj['q-uploader--dnd'] = this.dnd, obj ), + on: this.canAddFiles === true + ? cache(this, 'drag', { + dragover: this.__onDragOver, + dragleave: this.__onDragLeave + }) + : null + }, children) + } + }); + + function getFn (prop) { + return typeof prop === 'function' + ? prop + : function () { return prop; } + } + + var UploaderXHRMixin = { + props: { + url: [ Function, String ], + method: { + type: [ Function, String ], + default: 'POST' + }, + fieldName: { + type: [ Function, String ], + default: function (file) { return file.name; } + }, + headers: [ Function, Array ], + formFields: [ Function, Array ], + withCredentials: [ Function, Boolean ], + sendRaw: [ Function, Boolean ], + + batch: [ Function, Boolean ], + factory: Function + }, + + data: function data () { + return { + xhrs: [], + promises: [], + workingThreads: 0 + } + }, + + computed: { + xhrProps: function xhrProps () { + return { + url: getFn(this.url), + method: getFn(this.method), + headers: getFn(this.headers), + formFields: getFn(this.formFields), + fieldName: getFn(this.fieldName), + withCredentials: getFn(this.withCredentials), + sendRaw: getFn(this.sendRaw), + batch: getFn(this.batch) + } + }, + + isUploading: function isUploading () { + return this.workingThreads > 0 + }, + + isBusy: function isBusy () { + return this.promises.length > 0 + } + }, + + methods: { + abort: function abort () { + this.xhrs.forEach(function (x) { x.abort(); }); + + if (this.promises.length > 0) { + this.abortPromises = true; + } + }, + + upload: function upload () { + var this$1$1 = this; + + if (this.canUpload === false) { + return + } + + var queue = this.queuedFiles.slice(0); + this.queuedFiles = []; + + if (this.xhrProps.batch(queue)) { + this.__runFactory(queue); + } + else { + queue.forEach(function (file) { + this$1$1.__runFactory([ file ]); + }); + } + }, + + __runFactory: function __runFactory (files) { + var this$1$1 = this; + + this.workingThreads++; + + if (typeof this.factory !== 'function') { + this.__uploadFiles(files, {}); + return + } + + var res = this.factory(files); + + if (!res) { + this.$emit( + 'factory-failed', + new Error('QUploader: factory() does not return properly'), + files + ); + this.workingThreads--; + } + else if (typeof res.catch === 'function' && typeof res.then === 'function') { + this.promises.push(res); + + var failed = function (err) { + if (this$1$1._isBeingDestroyed !== true && this$1$1._isDestroyed !== true) { + this$1$1.promises = this$1$1.promises.filter(function (p) { return p !== res; }); + + if (this$1$1.promises.length === 0) { + this$1$1.abortPromises = false; + } + + this$1$1.queuedFiles = this$1$1.queuedFiles.concat(files); + files.forEach(function (f) { this$1$1.__updateFile(f, 'failed'); }); + + this$1$1.$emit('factory-failed', err, files); + this$1$1.workingThreads--; + } + }; + + res.then(function (factory) { + if (this$1$1.abortPromises === true) { + failed(new Error('Aborted')); + } + else if (this$1$1._isBeingDestroyed !== true && this$1$1._isDestroyed !== true) { + this$1$1.promises = this$1$1.promises.filter(function (p) { return p !== res; }); + this$1$1.__uploadFiles(files, factory); + } + }).catch(failed); + } + else { + this.__uploadFiles(files, res || {}); + } + }, + + __uploadFiles: function __uploadFiles (files, factory) { + var this$1$1 = this; + + var + form = new FormData(), + xhr = new XMLHttpRequest(); + + var getProp = function (name, arg) { + return factory[name] !== void 0 + ? getFn(factory[name])(arg) + : this$1$1.xhrProps[name](arg) + }; + + var url = getProp('url', files); + + if (!url) { + console.error('q-uploader: invalid or no URL specified'); + this.workingThreads--; + return + } + + var fields = getProp('formFields', files); + fields !== void 0 && fields.forEach(function (field) { + form.append(field.name, field.value); + }); + + var + uploadIndex = 0, + uploadIndexSize = 0, + uploadedSize = 0, + maxUploadSize = 0, + aborted; + + xhr.upload.addEventListener('progress', function (e) { + if (aborted === true) { return } + + var loaded = Math.min(maxUploadSize, e.loaded); + + this$1$1.uploadedSize += loaded - uploadedSize; + uploadedSize = loaded; + + var size = uploadedSize - uploadIndexSize; + for (var i = uploadIndex; size > 0 && i < files.length; i++) { + var + file = files[i], + uploaded = size > file.size; + + if (uploaded) { + size -= file.size; + uploadIndex++; + uploadIndexSize += file.size; + this$1$1.__updateFile(file, 'uploading', file.size); + } + else { + this$1$1.__updateFile(file, 'uploading', size); + return + } + } + }, false); + + xhr.onreadystatechange = function () { + if (xhr.readyState < 4) { + return + } + + if (xhr.status && xhr.status < 400) { + this$1$1.uploadedFiles = this$1$1.uploadedFiles.concat(files); + files.forEach(function (f) { this$1$1.__updateFile(f, 'uploaded'); }); + this$1$1.$emit('uploaded', { files: files, xhr: xhr }); + } + else { + aborted = true; + this$1$1.uploadedSize -= uploadedSize; + this$1$1.queuedFiles = this$1$1.queuedFiles.concat(files); + files.forEach(function (f) { this$1$1.__updateFile(f, 'failed'); }); + this$1$1.$emit('failed', { files: files, xhr: xhr }); + } + + this$1$1.workingThreads--; + this$1$1.xhrs = this$1$1.xhrs.filter(function (x) { return x !== xhr; }); + }; + + xhr.open( + getProp('method', files), + url + ); + + if (getProp('withCredentials', files) === true) { + xhr.withCredentials = true; + } + + var headers = getProp('headers', files); + headers !== void 0 && headers.forEach(function (head) { + xhr.setRequestHeader(head.name, head.value); + }); + + var sendRaw = getProp('sendRaw', files); + + files.forEach(function (file) { + this$1$1.__updateFile(file, 'uploading', 0); + if (sendRaw !== true) { + form.append(getProp('fieldName', file), file, file.name); + } + file.xhr = xhr; + file.__abort = function () { xhr.abort(); }; + maxUploadSize += file.size; + }); + + this.$emit('uploading', { files: files, xhr: xhr }); + this.xhrs.push(xhr); + + if (sendRaw === true) { + xhr.send(new Blob(files)); + } + else { + xhr.send(form); + } + } + } + }; + + var QUploader = Vue__default["default"].extend({ + name: 'QUploader', + mixins: [ QUploaderBase, UploaderXHRMixin ] + }); + + var QUploaderAddTrigger = Vue__default["default"].extend({ + name: 'QUploaderAddTrigger', + + inject: { + __qUploaderGetInput: { + default: function default$1 () { + console.error('QUploaderAddTrigger needs to be child of QUploader'); + } + } + }, + + render: function render (h) { + return this.__qUploaderGetInput(h) + } + }); + + var QVideo = Vue__default["default"].extend({ + name: 'QVideo', + + mixins: [ RatioMixin, ListenersMixin ], + + props: { + src: { + type: String, + required: true + }, + + title: String, + + fetchpriority: { + type: String, + default: 'auto' + }, + loading: { + type: String, + default: 'eager' + }, + referrerpolicy: { + type: String, + default: 'strict-origin-when-cross-origin' + } + }, + + computed: { + iframeData: function iframeData () { + return { + attrs: { + src: this.src, + frameborder: '0', + title: this.title, + allowfullscreen: true, + fetchpriority: this.fetchpriority, + loading: this.loading, + referrerpolicy: this.referrerpolicy + } + } + }, + + classes: function classes () { + return 'q-video' + + (this.ratio !== void 0 ? ' q-video--responsive' : '') + } + }, + + render: function render (h) { + return h('div', { + class: this.classes, + style: this.ratioStyle, + on: Object.assign({}, this.qListeners) + }, [ + h('iframe', this.iframeData) + ]) + } + }); + + var components = /*#__PURE__*/Object.freeze({ + __proto__: null, + QAjaxBar: QAjaxBar, + QAvatar: QAvatar, + QBadge: QBadge, + QBanner: QBanner, + QBar: QBar, + QBreadcrumbs: QBreadcrumbs, + QBreadcrumbsEl: QBreadcrumbsEl, + QBtn: QBtn, + QBtnDropdown: QBtnDropdown, + QBtnGroup: QBtnGroup, + QBtnToggle: QBtnToggle, + QCard: QCard, + QCardSection: QCardSection, + QCardActions: QCardActions, + QCarousel: QCarousel, + QCarouselSlide: QCarouselSlide, + QCarouselControl: QCarouselControl, + QChatMessage: QChatMessage, + QCheckbox: QCheckbox, + QChip: QChip, + QCircularProgress: QCircularProgress, + QColor: QColor, + QDate: QDate, + QDialog: QDialog, + QDrawer: QDrawer, + QEditor: QEditor, + QExpansionItem: QExpansionItem, + QFab: QFab, + QFabAction: QFabAction, + QField: QField, + QFile: QFile, + QFooter: QFooter, + QForm: QForm, + QHeader: QHeader, + QIcon: QIcon, + QImg: QImg, + QInfiniteScroll: QInfiniteScroll, + QInnerLoading: QInnerLoading, + QInput: QInput, + QIntersection: QIntersection, + QList: QList, + QItem: QItem, + QItemSection: QItemSection, + QItemLabel: QItemLabel, + QKnob: QKnob, + QLayout: QLayout, + QMarkupTable: QMarkupTable, + QMenu: QMenu, + QNoSsr: QNoSsr, + QOptionGroup: QOptionGroup, + QPage: QPage, + QPageContainer: QPageContainer, + QPageScroller: QPageScroller, + QPageSticky: QPageSticky, + QPagination: QPagination, + QParallax: QParallax, + QPopupEdit: QPopupEdit, + QPopupProxy: QPopupProxy, + QLinearProgress: QLinearProgress, + QPullToRefresh: QPullToRefresh, + QRadio: QRadio, + QRange: QRange, + QRating: QRating, + QResizeObserver: QResizeObserver, + QResponsive: QResponsive, + QScrollArea: QScrollArea, + QScrollObserver: QScrollObserver, + QSelect: QSelect, + QSeparator: QSeparator, + QSkeleton: QSkeleton, + QSlideItem: QSlideItem, + QSlideTransition: QSlideTransition, + QSlider: QSlider, + QSpace: QSpace, + QSpinner: QSpinner, + QSpinnerAudio: QSpinnerAudio, + QSpinnerBall: QSpinnerBall, + QSpinnerBars: QSpinnerBars, + QSpinnerBox: QSpinnerBox, + QSpinnerClock: QSpinnerClock, + QSpinnerComment: QSpinnerComment, + QSpinnerCube: QSpinnerCube, + QSpinnerDots: QSpinnerDots, + QSpinnerFacebook: QSpinnerFacebook, + QSpinnerGears: QSpinnerGears, + QSpinnerGrid: QSpinnerGrid, + QSpinnerHearts: QSpinnerHearts, + QSpinnerHourglass: QSpinnerHourglass, + QSpinnerInfinity: QSpinnerInfinity, + QSpinnerIos: QSpinnerIos, + QSpinnerOrbit: QSpinnerOrbit, + QSpinnerOval: QSpinnerOval, + QSpinnerPie: QSpinnerPie, + QSpinnerPuff: QSpinnerPuff, + QSpinnerRadio: QSpinnerRadio, + QSpinnerRings: QSpinnerRings, + QSpinnerTail: QSpinnerTail, + QSplitter: QSplitter, + QStep: QStep, + QStepper: QStepper, + QStepperNavigation: QStepperNavigation, + QTabPanels: QTabPanels, + QTabPanel: QTabPanel, + QTable: QTable, + QTh: QTh, + QTr: QTr, + QTd: QTd, + QTabs: QTabs, + QTab: QTab, + QRouteTab: QRouteTab, + QTime: QTime, + QTimeline: QTimeline, + QTimelineEntry: QTimelineEntry, + QToggle: QToggle, + QToolbar: QToolbar, + QToolbarTitle: QToolbarTitle, + QTooltip: QTooltip, + QTree: QTree, + QUploader: QUploader, + QUploaderBase: QUploaderBase, + QUploaderAddTrigger: QUploaderAddTrigger, + QVideo: QVideo, + QVirtualScroll: QVirtualScroll + }); + + /* + * depth + * < 0 --> close all chain + * 0 --> disabled + * > 0 --> close chain up to N parent + */ + + function getDepth (value) { + if (value === false) { + return 0 + } + if (value === true || value === void 0) { + return 1 + } + + var depth = parseInt(value, 10); + return isNaN(depth) ? 0 : depth + } + + function destroy$7 (el) { + var ctx = el.__qclosepopup; + if (ctx !== void 0) { + el.removeEventListener('click', ctx.handler); + el.removeEventListener('keyup', ctx.handlerKey); + delete el.__qclosepopup; + } + } + + var ClosePopup = { + name: 'close-popup', + + bind: function bind (el, ref, vnode) { + var value = ref.value; + + if (el.__qclosepopup !== void 0) { + destroy$7(el); + el.__qclosepopup_destroyed = true; + } + + var ctx = { + depth: getDepth(value), + + handler: function handler (evt) { + // allow @click to be emitted + ctx.depth !== 0 && setTimeout(function () { + closePortals(vnode.componentInstance || vnode.context, evt, ctx.depth); + }); + }, + + handlerKey: function handlerKey (evt) { + isKeyCode(evt, 13) === true && ctx.handler(evt); + } + }; + + el.__qclosepopup = ctx; + + el.addEventListener('click', ctx.handler); + el.addEventListener('keyup', ctx.handlerKey); + }, + + update: function update (el, ref) { + var value = ref.value; + var oldValue = ref.oldValue; + + if (el.__qclosepopup !== void 0 && oldValue !== value) { + el.__qclosepopup.depth = getDepth(value); + } + }, + + unbind: function unbind (el) { + if (el.__qclosepopup_destroyed === void 0) { + destroy$7(el); + } + else { + delete el.__qclosepopup_destroyed; + } + } + }; + + function destroy$6 (el) { + var ctx = el.__qgoback; + if (ctx !== void 0) { + el.removeEventListener('click', ctx.goBack); + el.removeEventListener('keyup', ctx.goBackKey); + delete el.__qgoback; + } + } + + var GoBack = { + name: 'go-back', + + bind: function bind (el, ref, vnode) { + var modifiers = ref.modifiers; + var value = ref.value; + + if (el.__qgoback !== void 0) { + destroy$6(el); + el.__qgoback_destroyed = true; + } + + var ctx = { + value: value, + + position: window.history.length - 1, + single: modifiers.single, + + goBack: function goBack () { + var router = vnode.context.$router; + + if (ctx.single === true) { + router.go(-1); + } + else if (client.is.nativeMobile === true) { + router.go(ctx.position - window.history.length); + } + else { + router.replace(ctx.value); + } + }, + + goBackKey: function goBackKey (e) { + // if ENTER key + isKeyCode(e, 13) === true && ctx.goBack(); + } + }; + + el.__qgoback = ctx; + + el.addEventListener('click', ctx.goBack); + el.addEventListener('keyup', ctx.goBackKey); + }, + + update: function update (el, ref) { + var modifiers = ref.modifiers; + var value = ref.value; + var oldValue = ref.oldValue; + + var ctx = el.__qgoback; + + if (ctx !== void 0) { + if (ctx.single !== modifiers.single) { + ctx.single = modifiers.single; + } + if (oldValue !== value) { + ctx.value = value; + } + } + }, + + unbind: function unbind (el) { + if (el.__qgoback_destroyed === void 0) { + destroy$6(el); + } + else { + delete el.__qgoback_destroyed; + } + } + }; + + var id = 0; + var offsetBase = void 0; + + function getAbsolutePosition (el, resize) { + if (offsetBase === void 0) { + offsetBase = document.createElement('div'); + offsetBase.style.cssText = 'position: absolute; left: 0; top: 0'; + document.body.appendChild(offsetBase); + } + + var boundingRect = el.getBoundingClientRect(); + var baseRect = offsetBase.getBoundingClientRect(); + var ref = window.getComputedStyle(el); + var marginLeft = ref.marginLeft; + var marginRight = ref.marginRight; + var marginTop = ref.marginTop; + var marginBottom = ref.marginBottom; + var marginH = parseInt(marginLeft, 10) + parseInt(marginRight, 10); + var marginV = parseInt(marginTop, 10) + parseInt(marginBottom, 10); + + return { + left: boundingRect.left - baseRect.left, + top: boundingRect.top - baseRect.top, + width: boundingRect.right - boundingRect.left, + height: boundingRect.bottom - boundingRect.top, + widthM: boundingRect.right - boundingRect.left + (resize === true ? 0 : marginH), + heightM: boundingRect.bottom - boundingRect.top + (resize === true ? 0 : marginV), + marginH: resize === true ? marginH : 0, + marginV: resize === true ? marginV : 0 + } + } + + function getAbsoluteSize (el) { + return { + width: el.scrollWidth, + height: el.scrollHeight + } + } + + // firefox rulez + var styleEdges = [ 'Top', 'Right', 'Bottom', 'Left' ]; + var styleBorderRadiuses = [ 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius' ]; + var reStyleSkipKey = /-block|-inline|block-|inline-/; + var reStyleSkipRule = /(-block|-inline|block-|inline-).*:/; + + function getComputedStyle$1 (el, props) { + var style = window.getComputedStyle(el); + var fixed = {}; + for (var i = 0; i < props.length; i++) { + var prop = props[i]; + + if (style[prop] === '') { + if (prop === 'cssText') { + var styleLen = style.length; + var val = ''; + + for (var i$1 = 0; i$1 < styleLen; i$1++) { + if (reStyleSkipKey.test(style[i$1]) !== true) { + val += style[i$1] + ': ' + style[style[i$1]] + '; '; + } + } + + fixed[prop] = val; + } + else if ([ 'borderWidth', 'borderStyle', 'borderColor' ].indexOf(prop) > -1) { + var suffix = prop.replace('border', ''); + var val$1 = ''; + for (var j = 0; j < styleEdges.length; j++) { + var subProp = 'border' + styleEdges[j] + suffix; + val$1 += style[subProp] + ' '; + } + fixed[prop] = val$1; + } + else if (prop === 'borderRadius') { + var val1 = ''; + var val2 = ''; + for (var j$1 = 0; j$1 < styleBorderRadiuses.length; j$1++) { + var val$2 = style[styleBorderRadiuses[j$1]].split(' '); + val1 += val$2[0] + ' '; + val2 += (val$2[1] === void 0 ? val$2[0] : val$2[1]) + ' '; + } + fixed[prop] = val1 + '/ ' + val2; + } + else { + fixed[prop] = style[prop]; + } + } + else { + if (prop === 'cssText') { + fixed[prop] = style[prop] + .split(';') + .filter(function (val) { return reStyleSkipRule.test(val) !== true; }) + .join(';'); + } + else { + fixed[prop] = style[prop]; + } + } + } + + return fixed + } + + var zIndexPositions = ['absolute', 'fixed', 'relative', 'sticky']; + + function getMaxZIndex (elStart) { + var el = elStart; + var maxIndex = 0; + + while (el !== null && el !== document) { + var ref = window.getComputedStyle(el); + var position = ref.position; + var zIndex = ref.zIndex; + var zIndexNum = Number(zIndex); + + if ( + zIndexNum > maxIndex && + (el === elStart || zIndexPositions.includes(position) === true) + ) { + maxIndex = zIndexNum; + } + + el = el.parentNode; + } + + return maxIndex + } + + function normalizeElements (opts) { + return { + from: opts.from, + to: opts.to !== void 0 + ? opts.to + : opts.from + } + } + + function normalizeOptions (options) { + if (typeof options === 'number') { + options = { + duration: options + }; + } + else if (typeof options === 'function') { + options = { + onEnd: options + }; + } + + return Object.assign({}, options, + + {waitFor: options.waitFor === void 0 ? 0 : options.waitFor, + + duration: isNaN(options.duration) === true ? 300 : parseInt(options.duration, 10), + easing: typeof options.easing === 'string' && options.easing.length > 0 ? options.easing : 'ease-in-out', + delay: isNaN(options.delay) === true ? 0 : parseInt(options.delay, 10), + fill: typeof options.fill === 'string' && options.fill.length > 0 ? options.fill : 'none', + + resize: options.resize === true, + useCSS: options.useCSS === true || options.usecss === true, + hideFromClone: options.hideFromClone === true || options.hidefromclone === true, + keepToClone: options.keepToClone === true || options.keeptoclone === true, + + tween: options.tween === true, + tweenFromOpacity: isNaN(options.tweenFromOpacity) === true ? 0.6 : parseFloat(options.tweenFromOpacity), + tweenToOpacity: isNaN(options.tweenToOpacity) === true ? 0.5 : parseFloat(options.tweenToOpacity)}) + } + + function isValidElement (element) { + return element && + element.ownerDocument === document && + element.parentNode !== null + } + + function morph (_options) { + var cancel = function () { return false; }; + var cancelStatus = false; + var endElementTo = true; + + var elements = normalizeElements(_options); + var options = normalizeOptions(_options); + + var elFrom = getElement(elements.from); + if (isValidElement(elFrom) !== true) { + // we return a cancel function that return false, meaning the cancel function failed + return cancel + } + // we clean other morphs running on this element + typeof elFrom.qMorphCancel === 'function' && elFrom.qMorphCancel(); + + var animationFromClone = void 0; + var animationFromTween = void 0; + var animationToClone = void 0; + var animationTo = void 0; + + var elFromParent = elFrom.parentNode; + var elFromNext = elFrom.nextElementSibling; + + // we get the dimensions and characteristics + // of the parent of the initial element before changes + var elFromPosition = getAbsolutePosition(elFrom, options.resize); + var ref = getAbsoluteSize(elFromParent); + var elFromParentWidthBefore = ref.width; + var elFromParentHeightBefore = ref.height; + var ref$1 = getComputedStyle$1(elFrom, [ 'borderWidth', 'borderStyle', 'borderColor', 'borderRadius', 'backgroundColor', 'transform', 'position', 'cssText' ]); + var elFromBorderWidth = ref$1.borderWidth; + var elFromBorderStyle = ref$1.borderStyle; + var elFromBorderColor = ref$1.borderColor; + var elFromBorderRadius = ref$1.borderRadius; + var elFromBackground = ref$1.backgroundColor; + var elFromTransform = ref$1.transform; + var elFromPositioningType = ref$1.position; + var elFromCssText = ref$1.cssText; + var elFromClassSaved = elFrom.classList.toString(); + var elFromStyleSaved = elFrom.style.cssText; + + // we make a clone of the initial element and + // use it to display until the final element is ready + // and to change the occupied space during animation + var elFromClone = elFrom.cloneNode(true); + var elFromTween = options.tween === true ? elFrom.cloneNode(true) : void 0; + + if (elFromTween !== void 0) { + elFromTween.className = elFromTween.classList.toString().split(' ').filter(function (c) { return /^bg-/.test(c) === false; }).join(' '); + } + + // if the initial element is not going to be removed do not show the placeholder + options.hideFromClone === true && elFromClone.classList.add('q-morph--internal'); + + // prevent interaction with placeholder + elFromClone.setAttribute('aria-hidden', 'true'); + elFromClone.style.transition = 'none'; + elFromClone.style.animation = 'none'; + elFromClone.style.pointerEvents = 'none'; + elFromParent.insertBefore(elFromClone, elFromNext); + + // we mark the element with its cleanup function + elFrom.qMorphCancel = function () { + cancelStatus = true; + + // we clean the clone of the initial element + elFromClone.remove(); + elFromTween !== void 0 && elFromTween.remove(); + + options.hideFromClone === true && elFromClone.classList.remove('q-morph--internal'); + + // we remove the cleanup function from the element + elFrom.qMorphCancel = void 0; + }; + + // will be called after Vue catches up with the changes done by _options.onToggle() function + var calculateFinalState = function () { + var elTo = getElement(elements.to); + if (cancelStatus === true || isValidElement(elTo) !== true) { + typeof elFrom.qMorphCancel === 'function' && elFrom.qMorphCancel(); + + return + } + // we clean other morphs running on this element + elFrom !== elTo && typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel(); + + // we hide the final element and the clone of the initial element + // we don't hide the final element if we want both it and the animated one visible + options.keepToClone !== true && elTo.classList.add('q-morph--internal'); + elFromClone.classList.add('q-morph--internal'); + + // we get the dimensions of the parent of the initial element after changes + // the difference is how much we should animate the clone + var ref = getAbsoluteSize(elFromParent); + var elFromParentWidthAfter = ref.width; + var elFromParentHeightAfter = ref.height; + + // we get the dimensions of the parent of the final element before changes + var ref$1 = getAbsoluteSize(elTo.parentNode); + var elToParentWidthBefore = ref$1.width; + var elToParentHeightBefore = ref$1.height; + + // then we show the clone of the initial element if we don't want it hidden + options.hideFromClone !== true && elFromClone.classList.remove('q-morph--internal'); + + // we mark the element with its cleanup function + elTo.qMorphCancel = function () { + cancelStatus = true; + + // we clean the clone of the initial element + elFromClone.remove(); + elFromTween !== void 0 && elFromTween.remove(); + + options.hideFromClone === true && elFromClone.classList.remove('q-morph--internal'); + + // we show the final element + options.keepToClone !== true && elTo.classList.remove('q-morph--internal'); + + // we remove the cleanup function from the elements + elFrom.qMorphCancel = void 0; + elTo.qMorphCancel = void 0; + }; + + // will be called after waitFor (give time to render the final element) + var animate = function () { + if (cancelStatus === true) { + typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel(); + + return + } + + // now the animation starts, so we only need the clone + // of the initial element as a spacer + // we also hide it to calculate the dimensions of the + // parent of the final element after the changes + if (options.hideFromClone !== true) { + elFromClone.classList.add('q-morph--internal'); + elFromClone.innerHTML = ''; + elFromClone.style.left = 0; + elFromClone.style.right = 'unset'; + elFromClone.style.top = 0; + elFromClone.style.bottom = 'unset'; + elFromClone.style.transform = 'none'; + } + + // we show the final element + if (options.keepToClone !== true) { + elTo.classList.remove('q-morph--internal'); + } + + // we get the dimensions of the parent of the final element after changes + // the difference is how much we should animate the clone + var elToParent = elTo.parentNode; + var ref = getAbsoluteSize(elToParent); + var elToParentWidthAfter = ref.width; + var elToParentHeightAfter = ref.height; + + var elToClone = elTo.cloneNode(options.keepToClone); + elToClone.setAttribute('aria-hidden', 'true'); + if (options.keepToClone !== true) { + elToClone.style.left = 0; + elToClone.style.right = 'unset'; + elToClone.style.top = 0; + elToClone.style.bottom = 'unset'; + elToClone.style.transform = 'none'; + elToClone.style.pointerEvents = 'none'; + } + elToClone.classList.add('q-morph--internal'); + + // if elFrom is the same as elTo the next element is elFromClone + var elToNext = elTo === elFrom && elFromParent === elToParent ? elFromClone : elTo.nextElementSibling; + elToParent.insertBefore(elToClone, elToNext); + + var ref$1 = getComputedStyle$1(elTo, [ 'borderWidth', 'borderStyle', 'borderColor', 'borderRadius', 'backgroundColor', 'transform', 'position', 'cssText' ]); + var elToBorderWidth = ref$1.borderWidth; + var elToBorderStyle = ref$1.borderStyle; + var elToBorderColor = ref$1.borderColor; + var elToBorderRadius = ref$1.borderRadius; + var elToBackground = ref$1.backgroundColor; + var elToTransform = ref$1.transform; + var elToPositioningType = ref$1.position; + var elToCssText = ref$1.cssText; + var elToClassSaved = elTo.classList.toString(); + var elToStyleSaved = elTo.style.cssText; + + // we set the computed styles on the element (to be able to remove classes) + elTo.style.cssText = elToCssText; + elTo.style.transform = 'none'; + elTo.style.animation = 'none'; + elTo.style.transition = 'none'; + // we strip the background classes (background color can no longer be animated if !important is used) + elTo.className = elToClassSaved.split(' ').filter(function (c) { return /^bg-/.test(c) === false; }).join(' '); + + var elToPosition = getAbsolutePosition(elTo, options.resize); + + var deltaX = elFromPosition.left - elToPosition.left; + var deltaY = elFromPosition.top - elToPosition.top; + var scaleX = elFromPosition.width / (elToPosition.width > 0 ? elToPosition.width : 10); + var scaleY = elFromPosition.height / (elToPosition.height > 0 ? elToPosition.height : 100); + + var elFromParentWidthDiff = elFromParentWidthBefore - elFromParentWidthAfter; + var elFromParentHeightDiff = elFromParentHeightBefore - elFromParentHeightAfter; + var elToParentWidthDiff = elToParentWidthAfter - elToParentWidthBefore; + var elToParentHeightDiff = elToParentHeightAfter - elToParentHeightBefore; + + var elFromCloneWidth = Math.max(elFromPosition.widthM, elFromParentWidthDiff); + var elFromCloneHeight = Math.max(elFromPosition.heightM, elFromParentHeightDiff); + var elToCloneWidth = Math.max(elToPosition.widthM, elToParentWidthDiff); + var elToCloneHeight = Math.max(elToPosition.heightM, elToParentHeightDiff); + + var elSharedSize = elFrom === elTo && + [ 'absolute', 'fixed' ].includes(elToPositioningType) === false && + [ 'absolute', 'fixed' ].includes(elFromPositioningType) === false; + + // if the final element has fixed position or if a parent + // has fixed position we need to animate it as fixed + var elToNeedsFixedPosition = elToPositioningType === 'fixed'; + var parent = elToParent; + while (elToNeedsFixedPosition !== true && parent !== document) { + elToNeedsFixedPosition = window.getComputedStyle(parent).position === 'fixed'; + parent = parent.parentNode; + } + + // we show the spacer for the initial element + if (options.hideFromClone !== true) { + elFromClone.style.display = 'block'; + elFromClone.style.flex = '0 0 auto'; + elFromClone.style.opacity = 0; + elFromClone.style.minWidth = 'unset'; + elFromClone.style.maxWidth = 'unset'; + elFromClone.style.minHeight = 'unset'; + elFromClone.style.maxHeight = 'unset'; + elFromClone.classList.remove('q-morph--internal'); + } + + // we show the spacer for the final element + if (options.keepToClone !== true) { + elToClone.style.display = 'block'; + elToClone.style.flex = '0 0 auto'; + elToClone.style.opacity = 0; + elToClone.style.minWidth = 'unset'; + elToClone.style.maxWidth = 'unset'; + elToClone.style.minHeight = 'unset'; + elToClone.style.maxHeight = 'unset'; + } + elToClone.classList.remove('q-morph--internal'); + + // we apply classes specified by user + if (typeof options.classes === 'string') { + elTo.className += ' ' + options.classes; + } + + // we apply styles specified by user + if (typeof options.style === 'string') { + elTo.style.cssText += ' ' + options.style; + } + else if (isObject(options.style) === true) { + for (var prop in options.style) { + elTo.style[prop] = options.style[prop]; + } + } + + var elFromZIndex = getMaxZIndex(elFromClone); + var elToZIndex = getMaxZIndex(elTo); + + // we position the morphing element + // if we use fixed position for the final element we need to adjust for scroll + var documentScroll = elToNeedsFixedPosition === true + ? document.documentElement + : { scrollLeft: 0, scrollTop: 0 }; + elTo.style.position = elToNeedsFixedPosition === true ? 'fixed' : 'absolute'; + elTo.style.left = (elToPosition.left - documentScroll.scrollLeft) + "px"; + elTo.style.right = 'unset'; + elTo.style.top = (elToPosition.top - documentScroll.scrollTop) + "px"; + elTo.style.margin = 0; + + if (options.resize === true) { + elTo.style.minWidth = 'unset'; + elTo.style.maxWidth = 'unset'; + elTo.style.minHeight = 'unset'; + elTo.style.maxHeight = 'unset'; + elTo.style.overflow = 'hidden'; + elTo.style.overflowX = 'hidden'; + elTo.style.overflowY = 'hidden'; + } + + document.body.appendChild(elTo); + + if (elFromTween !== void 0) { + elFromTween.style.cssText = elFromCssText; + elFromTween.style.transform = 'none'; + elFromTween.style.animation = 'none'; + elFromTween.style.transition = 'none'; + + elFromTween.style.position = elTo.style.position; + elFromTween.style.left = (elFromPosition.left - documentScroll.scrollLeft) + "px"; + elFromTween.style.right = 'unset'; + elFromTween.style.top = (elFromPosition.top - documentScroll.scrollTop) + "px"; + elFromTween.style.margin = 0; + elFromTween.style.pointerEvents = 'none'; + + if (options.resize === true) { + elFromTween.style.minWidth = 'unset'; + elFromTween.style.maxWidth = 'unset'; + elFromTween.style.minHeight = 'unset'; + elFromTween.style.maxHeight = 'unset'; + elFromTween.style.overflow = 'hidden'; + elFromTween.style.overflowX = 'hidden'; + elFromTween.style.overflowY = 'hidden'; + } + + document.body.appendChild(elFromTween); + } + + var commonCleanup = function (aborted) { + // we put the element back in it's place + // and restore the styles and classes + if (elFrom === elTo && endElementTo !== true) { + elTo.style.cssText = elFromStyleSaved; + elTo.className = elFromClassSaved; + } + else { + elTo.style.cssText = elToStyleSaved; + elTo.className = elToClassSaved; + } + elToClone.parentNode === elToParent && elToParent.insertBefore(elTo, elToClone); + + // we clean the spacers + elFromClone.remove(); + elToClone.remove(); + elFromTween !== void 0 && elFromTween.remove(); + + // cancel will be no longer available + cancel = function () { return false; }; + + elFrom.qMorphCancel = void 0; + elTo.qMorphCancel = void 0; + + // we are ready + if (typeof options.onEnd === 'function') { + options.onEnd(endElementTo === true ? 'to' : 'from', aborted === true); + } + }; + + if (options.useCSS !== true && typeof elTo.animate === 'function') { + var resizeFrom = options.resize === true + ? { + transform: ("translate(" + deltaX + "px, " + deltaY + "px)"), + width: (elFromCloneWidth + "px"), + height: (elFromCloneHeight + "px") + } + : { + transform: ("translate(" + deltaX + "px, " + deltaY + "px) scale(" + scaleX + ", " + scaleY + ")") + }; + var resizeTo = options.resize === true + ? { + width: (elToCloneWidth + "px"), + height: (elToCloneHeight + "px") + } + : {}; + var resizeFromTween = options.resize === true + ? { + width: (elFromCloneWidth + "px"), + height: (elFromCloneHeight + "px") + } + : {}; + var resizeToTween = options.resize === true + ? { + transform: ("translate(" + (-1 * deltaX) + "px, " + (-1 * deltaY) + "px)"), + width: (elToCloneWidth + "px"), + height: (elToCloneHeight + "px") + } + : { + transform: ("translate(" + (-1 * deltaX) + "px, " + (-1 * deltaY) + "px) scale(" + (1 / scaleX) + ", " + (1 / scaleY) + ")") + }; + var tweenFrom = elFromTween !== void 0 + ? { opacity: options.tweenToOpacity } + : { backgroundColor: elFromBackground }; + var tweenTo = elFromTween !== void 0 + ? { opacity: 1 } + : { backgroundColor: elToBackground }; + animationTo = elTo.animate([ + Object.assign({}, {margin: 0, + borderWidth: elFromBorderWidth, + borderStyle: elFromBorderStyle, + borderColor: elFromBorderColor, + borderRadius: elFromBorderRadius, + zIndex: elFromZIndex, + transformOrigin: '0 0'}, + resizeFrom, + tweenFrom), + Object.assign({}, {margin: 0, + borderWidth: elToBorderWidth, + borderStyle: elToBorderStyle, + borderColor: elToBorderColor, + borderRadius: elToBorderRadius, + zIndex: elToZIndex, + transformOrigin: '0 0', + transform: elToTransform}, + resizeTo, + tweenTo) + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }); + + animationFromTween = elFromTween === void 0 ? void 0 : elFromTween.animate([ + Object.assign({}, {opacity: options.tweenFromOpacity, + margin: 0, + borderWidth: elFromBorderWidth, + borderStyle: elFromBorderStyle, + borderColor: elFromBorderColor, + borderRadius: elFromBorderRadius, + zIndex: elFromZIndex, + transformOrigin: '0 0', + transform: elFromTransform}, + resizeFromTween), + Object.assign({}, {opacity: 0, + margin: 0, + borderWidth: elToBorderWidth, + borderStyle: elToBorderStyle, + borderColor: elToBorderColor, + borderRadius: elToBorderRadius, + zIndex: elToZIndex, + transformOrigin: '0 0'}, + resizeToTween) + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }); + + animationFromClone = options.hideFromClone === true || elSharedSize === true ? void 0 : elFromClone.animate([ + { + margin: ((elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0) + "px " + (elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0) + "px"), + width: ((elFromCloneWidth + elFromPosition.marginH) + "px"), + height: ((elFromCloneHeight + elFromPosition.marginV) + "px") + }, + { + margin: 0, + width: 0, + height: 0 + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }); + + animationToClone = options.keepToClone === true ? void 0 : elToClone.animate([ + elSharedSize === true + ? { + margin: ((elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0) + "px " + (elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0) + "px"), + width: ((elFromCloneWidth + elFromPosition.marginH) + "px"), + height: ((elFromCloneHeight + elFromPosition.marginV) + "px") + } + : { + margin: 0, + width: 0, + height: 0 + }, + { + margin: ((elToParentHeightDiff < 0 ? elToParentHeightDiff / 2 : 0) + "px " + (elToParentWidthDiff < 0 ? elToParentWidthDiff / 2 : 0) + "px"), + width: ((elToCloneWidth + elToPosition.marginH) + "px"), + height: ((elToCloneHeight + elToPosition.marginV) + "px") + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }); + + var cleanup = function (abort) { + animationFromClone !== void 0 && animationFromClone.cancel(); + animationFromTween !== void 0 && animationFromTween.cancel(); + animationToClone !== void 0 && animationToClone.cancel(); + animationTo.cancel(); + + animationTo.removeEventListener('finish', cleanup); + animationTo.removeEventListener('cancel', cleanup); + + commonCleanup(abort); + + // we clean the animations + animationFromClone = void 0; + animationFromTween = void 0; + animationToClone = void 0; + animationTo = void 0; + }; + + elFrom.qMorphCancel = function () { + elFrom.qMorphCancel = void 0; + cancelStatus = true; + cleanup(); + }; + elTo.qMorphCancel = function () { + elTo.qMorphCancel = void 0; + cancelStatus = true; + cleanup(); + }; + + animationTo.addEventListener('finish', cleanup); + animationTo.addEventListener('cancel', cleanup); + + cancel = function (abort) { + // we are not in a morph that we can cancel + if (cancelStatus === true || animationTo === void 0) { + return false + } + + if (abort === true) { + cleanup(true); + return true + } + + endElementTo = endElementTo !== true; + + animationFromClone !== void 0 && animationFromClone.reverse(); + animationFromTween !== void 0 && animationFromTween.reverse(); + animationToClone !== void 0 && animationToClone.reverse(); + animationTo.reverse(); + + return true + }; + } + else { + var qAnimId = "q-morph-anim-" + (++id); + var style = document.createElement('style'); + var resizeFrom$1 = options.resize === true + ? ("\n transform: translate(" + deltaX + "px, " + deltaY + "px);\n width: " + elFromCloneWidth + "px;\n height: " + elFromCloneHeight + "px;\n ") + : ("transform: translate(" + deltaX + "px, " + deltaY + "px) scale(" + scaleX + ", " + scaleY + ");"); + var resizeTo$1 = options.resize === true + ? ("\n width: " + elToCloneWidth + "px;\n height: " + elToCloneHeight + "px;\n ") + : ''; + var resizeFromTween$1 = options.resize === true + ? ("\n width: " + elFromCloneWidth + "px;\n height: " + elFromCloneHeight + "px;\n ") + : ''; + var resizeToTween$1 = options.resize === true + ? ("\n transform: translate(" + (-1 * deltaX) + "px, " + (-1 * deltaY) + "px);\n width: " + elToCloneWidth + "px;\n height: " + elToCloneHeight + "px;\n ") + : ("transform: translate(" + (-1 * deltaX) + "px, " + (-1 * deltaY) + "px) scale(" + (1 / scaleX) + ", " + (1 / scaleY) + ");"); + var tweenFrom$1 = elFromTween !== void 0 + ? ("opacity: " + (options.tweenToOpacity) + ";") + : ("background-color: " + elFromBackground + ";"); + var tweenTo$1 = elFromTween !== void 0 + ? 'opacity: 1;' + : ("background-color: " + elToBackground + ";"); + var keyframesFromTween = elFromTween === void 0 + ? '' + : ("\n @keyframes " + qAnimId + "-from-tween {\n 0% {\n opacity: " + (options.tweenFromOpacity) + ";\n margin: 0;\n border-width: " + elFromBorderWidth + ";\n border-style: " + elFromBorderStyle + ";\n border-color: " + elFromBorderColor + ";\n border-radius: " + elFromBorderRadius + ";\n z-index: " + elFromZIndex + ";\n transform-origin: 0 0;\n transform: " + elFromTransform + ";\n " + resizeFromTween$1 + "\n }\n\n 100% {\n opacity: 0;\n margin: 0;\n border-width: " + elToBorderWidth + ";\n border-style: " + elToBorderStyle + ";\n border-color: " + elToBorderColor + ";\n border-radius: " + elToBorderRadius + ";\n z-index: " + elToZIndex + ";\n transform-origin: 0 0;\n " + resizeToTween$1 + "\n }\n }\n "); + var keyframesFrom = options.hideFromClone === true || elSharedSize === true + ? '' + : ("\n @keyframes " + qAnimId + "-from {\n 0% {\n margin: " + (elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0) + "px " + (elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0) + "px;\n width: " + (elFromCloneWidth + elFromPosition.marginH) + "px;\n height: " + (elFromCloneHeight + elFromPosition.marginV) + "px;\n }\n\n 100% {\n margin: 0;\n width: 0;\n height: 0;\n }\n }\n "); + var keyframeToStart = elSharedSize === true + ? ("\n margin: " + (elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0) + "px " + (elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0) + "px;\n width: " + (elFromCloneWidth + elFromPosition.marginH) + "px;\n height: " + (elFromCloneHeight + elFromPosition.marginV) + "px;\n ") + : "\n margin: 0;\n width: 0;\n height: 0;\n "; + var keyframesTo = options.keepToClone === true + ? '' + : ("\n @keyframes " + qAnimId + "-to {\n 0% {\n " + keyframeToStart + "\n }\n\n 100% {\n margin: " + (elToParentHeightDiff < 0 ? elToParentHeightDiff / 2 : 0) + "px " + (elToParentWidthDiff < 0 ? elToParentWidthDiff / 2 : 0) + "px;\n width: " + (elToCloneWidth + elToPosition.marginH) + "px;\n height: " + (elToCloneHeight + elToPosition.marginV) + "px;\n }\n }\n "); + style.innerHTML = "\n @keyframes " + qAnimId + " {\n 0% {\n margin: 0;\n border-width: " + elFromBorderWidth + ";\n border-style: " + elFromBorderStyle + ";\n border-color: " + elFromBorderColor + ";\n border-radius: " + elFromBorderRadius + ";\n background-color: " + elFromBackground + ";\n z-index: " + elFromZIndex + ";\n transform-origin: 0 0;\n " + resizeFrom$1 + "\n " + tweenFrom$1 + "\n }\n\n 100% {\n margin: 0;\n border-width: " + elToBorderWidth + ";\n border-style: " + elToBorderStyle + ";\n border-color: " + elToBorderColor + ";\n border-radius: " + elToBorderRadius + ";\n background-color: " + elToBackground + ";\n z-index: " + elToZIndex + ";\n transform-origin: 0 0;\n transform: " + elToTransform + ";\n " + resizeTo$1 + "\n " + tweenTo$1 + "\n }\n }\n\n " + keyframesFrom + "\n\n " + keyframesFromTween + "\n\n " + keyframesTo + "\n "; + document.head.appendChild(style); + + var animationDirection = 'normal'; + + elFromClone.style.animation = (options.duration) + "ms " + (options.easing) + " " + (options.delay) + "ms " + animationDirection + " " + (options.fill) + " " + qAnimId + "-from"; + if (elFromTween !== void 0) { + elFromTween.style.animation = (options.duration) + "ms " + (options.easing) + " " + (options.delay) + "ms " + animationDirection + " " + (options.fill) + " " + qAnimId + "-from-tween"; + } + elToClone.style.animation = (options.duration) + "ms " + (options.easing) + " " + (options.delay) + "ms " + animationDirection + " " + (options.fill) + " " + qAnimId + "-to"; + elTo.style.animation = (options.duration) + "ms " + (options.easing) + " " + (options.delay) + "ms " + animationDirection + " " + (options.fill) + " " + qAnimId; + + var cleanup$1 = function (evt) { + if (evt === Object(evt) && evt.animationName !== qAnimId) { + return + } + + elTo.removeEventListener('animationend', cleanup$1); + elTo.removeEventListener('animationcancel', cleanup$1); + + commonCleanup(); + + // we clean the animations + style.remove(); + }; + + elFrom.qMorphCancel = function () { + elFrom.qMorphCancel = void 0; + cancelStatus = true; + cleanup$1(); + }; + elTo.qMorphCancel = function () { + elTo.qMorphCancel = void 0; + cancelStatus = true; + cleanup$1(); + }; + + elTo.addEventListener('animationend', cleanup$1); + elTo.addEventListener('animationcancel', cleanup$1); + + cancel = function (abort) { + // we are not in a morph that we can cancel + if (cancelStatus === true || !elTo || !elFromClone || !elToClone) { + return false + } + + if (abort === true) { + cleanup$1(); + + return true + } + + endElementTo = endElementTo !== true; + + animationDirection = animationDirection === 'normal' ? 'reverse' : 'normal'; + + elFromClone.style.animationDirection = animationDirection; + elFromTween.style.animationDirection = animationDirection; + elToClone.style.animationDirection = animationDirection; + elTo.style.animationDirection = animationDirection; + + return true + }; + } + }; + + if ( + options.waitFor > 0 || + options.waitFor === 'transitionend' || + (options.waitFor === Object(options.waitFor) && typeof options.waitFor.then === 'function') + ) { + var delayPromise = options.waitFor > 0 + ? new Promise(function (resolve) { return setTimeout(resolve, options.waitFor); }) + : ( + options.waitFor === 'transitionend' + ? new Promise(function (resolve) { + var timer = setTimeout(function () { + endFn(); + }, 400); + + var endFn = function (ev) { + clearTimeout(timer); + + if (elTo) { + elTo.removeEventListener('transitionend', endFn); + elTo.removeEventListener('transitioncancel', endFn); + } + + resolve(); + }; + + elTo.addEventListener('transitionend', endFn); + elTo.addEventListener('transitioncancel', endFn); + }) + : options.waitFor + ); + + delayPromise + .then(animate) + .catch(function () { + typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel(); + }); + } + else { + animate(); + } + }; + + typeof _options.onToggle === 'function' && _options.onToggle(); + requestAnimationFrame(calculateFinalState); + + // we return the cancel function + // returns: + // false if the cancel cannot be performed (the morph ended already or has not started) + // true else + return function (abort) { return cancel(abort); } + } + + var morphGroups = {}; + var mods = [ + 'resize', 'useCSS', 'hideFromClone', 'keepToClone', 'tween' + ]; + var props$1 = [ + 'duration', 'delay', 'easing', 'fill', + 'classes', 'style', 'duration', + 'tweenFromOpacity', 'tweenToOpacity', + 'waitFor', 'onEnd' + ]; + + function changeClass (ctx, action) { + if (ctx.clsAction !== action) { + ctx.clsAction = action; + ctx.el.classList[action]('q-morph--invisible'); + } + } + + function trigger (group) { + if (group.animating === true || group.queue.length < 2) { + return + } + + var ref = group.queue; + var from = ref[0]; + var to = ref[1]; + + group.animating = true; + from.animating = true; + to.animating = true; + + changeClass(from, 'remove'); + changeClass(to, 'remove'); + + var cancelFn = morph(Object.assign({}, {from: from.el, + to: to.el, + onToggle: function onToggle () { + changeClass(from, 'add'); + changeClass(to, 'remove'); + }}, + to.opts, + {onEnd: function onEnd (dir, aborted) { + to.opts.onEnd !== void 0 && to.opts.onEnd(dir, aborted); + + if (aborted === true) { + return + } + + from.animating = false; + to.animating = false; + + group.animating = false; + group.cancel = void 0; + group.queue.shift(); + + trigger(group); + }})); + + group.cancel = function () { + cancelFn(true); // abort + group.cancel = void 0; + }; + } + + function changeModel (ctx, name) { + if (ctx.name === name) { + var group = morphGroups[ctx.group]; + + // if group is not registered + if (group === void 0) { + morphGroups[ctx.group] = { + name: ctx.group, + model: name, + queue: [ ctx ], + animating: false + }; + + changeClass(ctx, 'remove'); + } + // if model changed + else if (group.model !== name) { + group.model = name; + group.queue.push(ctx); + + if (group.animating === false && group.queue.length === 2) { + trigger(group); + } + } + + return + } + + if (ctx.animating === false) { + changeClass(ctx, 'add'); + } + } + + function setOptsFromValue (ctx, value) { + if (value.group !== void 0) { + ctx.group = value.group; + } + if (value.name !== void 0) { + ctx.name = value.name; + } + + var opts = ctx.opts; + + props$1.forEach(function (name) { + if (value[name] !== void 0) { + opts[name] = value[name]; + } + }); + } + + function updateArg (ctx, arg) { + var opts = typeof arg === 'string' && arg.length > 0 + ? arg.split(':') : []; + + ctx.name = opts[0]; + ctx.group = opts[1]; + + Object.assign(ctx.opts, { + duration: isNaN(opts[2]) === true + ? 300 + : parseFloat(opts[2]), + waitFor: opts[3] + }); + } + + function updateModifiers (ctx, modifiers) { + var opts = ctx.opts; + + mods.forEach(function (name) { + opts[name] = modifiers[name] === true; + }); + } + + function updateValue (ctx, value) { + var model; + + if (Object(value) === value) { + model = '' + value.model; + setOptsFromValue(ctx, value); + updateModifiers(ctx, value); + } + else { + model = '' + value; + } + + if (model !== ctx.model) { + ctx.model = model; + changeModel(ctx, model); + } + else if (ctx.animating === false && ctx.clsAction !== void 0) { + // ensure HMR + ctx.el.classList[ctx.clsAction]('q-morph--invisible'); + } + } + + function destroy$5 (el) { + var ctx = el.__qmorph; + + if (ctx !== void 0) { + var group = morphGroups[ctx.group]; + + if (group !== void 0) { + var index = group.queue.indexOf(ctx); + + if (index !== -1) { + group.queue = group.queue.filter(function (item) { return item !== ctx; }); + + if (group.queue.length === 0) { + group.cancel !== void 0 && group.cancel(); + delete morphGroups[ctx.group]; + } + } + } + + if (ctx.clsAction === 'add') { + el.classList.remove('q-morph--invisible'); + } + + delete el.__qmorph; + } + } + + var Morph = { + name: 'morph', + + inserted: function inserted (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + + if (el.__qmorph !== void 0) { + destroy$5(el); + el.__qmorph_destroyed = true; + } + + var ctx = { + el: el, + + arg: arg, + + animating: false, + opts: {} + }; + + updateModifiers(ctx, modifiers); + updateArg(ctx, arg); + updateValue(ctx, value); + + el.__qmorph = ctx; + }, + + update: function update (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + + var ctx = el.__qmorph; + if (ctx !== void 0) { + updateModifiers(ctx, modifiers); + if (ctx.arg !== arg) { + updateArg(ctx, arg); + } + updateValue(ctx, value); + } + }, + + unbind: function unbind (el) { + if (el.__qmorph_destroyed === void 0) { + destroy$5(el); + } + else { + delete el.__qmorph_destroyed; + } + } + }; + + function objectWithoutProperties$2 (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; } + + var defaultCfg = { + childList: true, + subtree: true, + attributes: true, + characterData: true, + attributeOldValue: true, + characterDataOldValue: true + }; + + function update$2 (el, ctx, value) { + ctx.handler = value; + ctx.observer !== void 0 && ctx.observer.disconnect(); + + ctx.observer = new MutationObserver(function (list) { + if (typeof ctx.handler === 'function') { + var res = ctx.handler(list); + if (res === false || ctx.once === true) { + destroy$4(el); + } + } + }); + + ctx.observer.observe(el, ctx.opts); + } + + function destroy$4 (el) { + var ctx = el.__qmutation; + + if (ctx !== void 0) { + ctx.observer !== void 0 && ctx.observer.disconnect(); + delete el.__qmutation; + } + } + + var Mutation = { + name: 'mutation', + + inserted: function inserted (el, ref) { + var ref_modifiers = ref.modifiers; + var once = ref_modifiers.once; + var rest = objectWithoutProperties$2( ref_modifiers, ["once"] ); + var opts = rest; + var value = ref.value; + + if (el.__qmutation !== void 0) { + destroy$4(el); + el.__qmutation_destroyed = true; + } + + var ctx = { + once: once + }; + + ctx.opts = Object.keys(opts).length === 0 + ? defaultCfg + : opts; + update$2(el, ctx, value); + + el.__qmutation = ctx; + }, + + update: function update$1 (el, ref) { + var ref_modifiers = ref.modifiers; + ref_modifiers.once; + var rest = objectWithoutProperties$2( ref_modifiers, ["once"] ); + var opts = rest; + var value = ref.value; + var oldValue = ref.oldValue; + + var ctx = el.__qmutation; + if (ctx !== void 0) { + var newOpts = Object.keys(opts).length === 0 + ? defaultCfg + : opts; + if ( + oldValue !== value || + isDeepEqual(ctx.opts, newOpts) !== true + ) { + ctx.opts = newOpts; + update$2(el, ctx, value); + } + } + }, + + unbind: function unbind (el) { + if (el.__qmutation_destroyed === void 0) { + destroy$4(el); + } + else { + delete el.__qmutation_destroyed; + } + } + }; + + function update$1 (ctx, ref) { + var value = ref.value; + var oldValue = ref.oldValue; + + if (typeof value !== 'function') { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + return + } + + ctx.handler = value; + if (typeof oldValue !== 'function') { + ctx.scrollTarget.addEventListener('scroll', ctx.scroll, listenOpts.passive); + ctx.scroll(); + } + } + + function destroy$3 (el) { + var ctx = el.__qscrollfire; + if (ctx !== void 0) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + ctx.scroll.cancel(); + delete el.__qscrollfire; + } + } + + var ScrollFire = { + name: 'scroll-fire', + + inserted: function inserted (el, binding) { + if (el.__qscrollfire !== void 0) { + destroy$3(el); + el.__qscrollfire_destroyed = true; + } + + var ctx = { + scrollTarget: getScrollTarget(el), + scroll: debounce(function () { + var containerBottom, elBottom; + + if (ctx.scrollTarget === window) { + elBottom = el.getBoundingClientRect().bottom; + containerBottom = window.innerHeight; + } + else { + elBottom = offset(el).top + height(el); + containerBottom = offset(ctx.scrollTarget).top + height(ctx.scrollTarget); + } + + if (elBottom > 0 && elBottom < containerBottom) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + ctx.handler(el); + } + }, 25) + }; + + update$1(ctx, binding); + + el.__qscrollfire = ctx; + }, + + update: function update$1$1 (el, binding) { + if (el.__qscrollfire !== void 0 && binding.value !== binding.oldValue) { + update$1(el.__qscrollfire, binding); + } + }, + + unbind: function unbind (el) { + if (el.__qscrollfire_destroyed === void 0) { + destroy$3(el); + } + else { + delete el.__qscrollfire_destroyed; + } + } + }; + + function update (ctx, ref) { + var value = ref.value; + var oldValue = ref.oldValue; + + if (typeof value !== 'function') { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + return + } + + ctx.handler = value; + if (typeof oldValue !== 'function') { + ctx.scrollTarget.addEventListener('scroll', ctx.scroll, listenOpts.passive); + } + } + + function destroy$2 (el) { + var ctx = el.__qscroll; + if (ctx !== void 0) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + delete el.__qscroll; + } + } + + var Scroll = { + name: 'scroll', + + inserted: function inserted (el, binding) { + if (el.__qscroll !== void 0) { + destroy$2(el); + el.__qscroll_destroyed = true; + } + + var ctx = { + scrollTarget: getScrollTarget(el), + scroll: function scroll () { + ctx.handler( + getVerticalScrollPosition(ctx.scrollTarget), + getHorizontalScrollPosition(ctx.scrollTarget) + ); + } + }; + + update(ctx, binding); + + el.__qscroll = ctx; + }, + + update: function update$1 (el, binding) { + if (el.__qscroll !== void 0 && binding.oldValue !== binding.value) { + update(el.__qscroll, binding); + } + }, + + unbind: function unbind (el) { + if (el.__qscroll_destroyed === void 0) { + destroy$2(el); + } + else { + delete el.__qscroll_destroyed; + } + } + }; + + function parseArg$1 (arg) { + // duration in ms, touch in pixels, mouse in pixels + var data = [600, 5, 7]; + + if (typeof arg === 'string' && arg.length > 0) { + arg.split(':').forEach(function (val, index) { + var v = parseInt(val, 10); + v && (data[index] = v); + }); + } + + return { + duration: data[0], + touchSensitivity: data[1], + mouseSensitivity: data[2] + } + } + + function destroy$1 (el) { + var ctx = el.__qtouchhold; + if (ctx !== void 0) { + cleanEvt(ctx, 'main'); + cleanEvt(ctx, 'temp'); + + clearTimeout(ctx.timer); + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + delete el.__qtouchhold; + } + } + + function configureEvents$1 (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse'); + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', ("passive" + (modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : '')) ] + ]); + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch'); + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', ("passive" + (modifiers.capture === true ? 'Capture' : '')) ], + [ el, 'touchmove', 'noop', 'passiveCapture' ] + ]); + } + + ctx.modifiers = modifiers; + } + + var TouchHold = { + name: 'touch-hold', + + bind: function bind (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + + if (el.__qtouchhold !== void 0) { + destroy$1(el); + el.__qtouchhold_destroyed = true; + } + + var ctx = Object.assign({}, {handler: value, + arg: arg, + modifiers: { capture: null }}, // make sure touch listeners are initiated + + parseArg$1(arg), + + {noop: noop, + + mouseStart: function mouseStart (evt) { + if (typeof ctx.handler === 'function' && leftClick(evt) === true) { + addEvt(ctx, 'temp', [ + [document, 'mousemove', 'move', 'passiveCapture'], + [document, 'click', 'end', 'notPassiveCapture'] + ]); + ctx.start(evt, true); + } + }, + + touchStart: function touchStart (evt) { + if (evt.target !== void 0 && typeof ctx.handler === 'function') { + var target = evt.target; + addEvt(ctx, 'temp', [ + [target, 'touchmove', 'move', 'passiveCapture'], + [target, 'touchcancel', 'end', 'notPassiveCapture'], + [target, 'touchend', 'end', 'notPassiveCapture'] + ]); + ctx.start(evt); + } + }, + + start: function start (evt, mouseEvent) { + ctx.origin = position(evt); + + var startTime = Date.now(); + + if (client.is.mobile === true) { + document.body.classList.add('non-selectable'); + clearSelection(); + + ctx.styleCleanup = function (withDelay) { + ctx.styleCleanup = void 0; + + var remove = function () { + document.body.classList.remove('non-selectable'); + }; + + if (withDelay === true) { + clearSelection(); + setTimeout(remove, 10); + } + else { remove(); } + }; + } + + ctx.triggered = false; + ctx.sensitivity = mouseEvent === true + ? ctx.mouseSensitivity + : ctx.touchSensitivity; + + ctx.timer = setTimeout(function () { + clearSelection(); + ctx.triggered = true; + + ctx.handler({ + evt: evt, + touch: mouseEvent !== true, + mouse: mouseEvent === true, + position: ctx.origin, + duration: Date.now() - startTime + }); + }, ctx.duration); + }, + + move: function move (evt) { + var ref = position(evt); + var top = ref.top; + var left = ref.left; + if ( + Math.abs(left - ctx.origin.left) >= ctx.sensitivity || + Math.abs(top - ctx.origin.top) >= ctx.sensitivity + ) { + clearTimeout(ctx.timer); + } + }, + + end: function end (evt) { + cleanEvt(ctx, 'temp'); + + // delay needed otherwise selection still occurs + ctx.styleCleanup !== void 0 && ctx.styleCleanup(ctx.triggered); + + if (ctx.triggered === true) { + evt !== void 0 && stopAndPrevent(evt); + } + else { + clearTimeout(ctx.timer); + } + }}); + + el.__qtouchhold = ctx; + + configureEvents$1(el, ctx, modifiers); + }, + + update: function update (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + var oldValue = ref.oldValue; + + var ctx = el.__qtouchhold; + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end(); + ctx.handler = value; + } + + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg$1(arg)); + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents$1(el, ctx, modifiers); + } + } + }, + + unbind: function unbind (el) { + if (el.__qtouchhold_destroyed === void 0) { + destroy$1(el); + } + else { + delete el.__qtouchhold_destroyed; + } + } + }; + + var + keyCodes = { + esc: 27, + tab: 9, + enter: 13, + space: 32, + up: 38, + left: 37, + right: 39, + down: 40, + 'delete': [8, 46] + }, + keyRegex = new RegExp(("^([\\d+]+|" + (Object.keys(keyCodes).join('|')) + ")$"), 'i'); + + function shouldEnd (evt, origin) { + var ref = position(evt); + var top = ref.top; + var left = ref.left; + + return Math.abs(left - origin.left) >= 7 || + Math.abs(top - origin.top) >= 7 + } + + function parseArg (arg) { + var durations = typeof arg === 'string' && arg.length > 0 + ? arg.split(':').map(function (val) { return parseInt(val, 10); }) + : [0, 600, 300]; + + return { + durations: durations, + durationsLast: durations.length - 1 + } + } + + function destroy (el) { + var ctx = el.__qtouchrepeat; + if (ctx !== void 0) { + clearTimeout(ctx.timer); + + cleanEvt(ctx, 'main_mouse'); + cleanEvt(ctx, 'main_touch'); + cleanEvt(ctx, 'main_kbd'); + cleanEvt(ctx, 'temp'); + + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + delete el.__qtouchrepeat; + } + } + + function configureEvents (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse'); + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', ("passive" + (modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : '')) ] + ]); + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch'); + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', ("passive" + (modifiers.capture === true ? 'Capture' : '')) ], + [ el, 'touchmove', 'noop', 'passiveCapture' ] + ]); + } + + var keyboard = Object.keys(modifiers).reduce(function (acc, key) { + if (keyRegex.test(key) === true) { + var keyCode = isNaN(parseInt(key, 10)) ? keyCodes[key.toLowerCase()] : parseInt(key, 10); + keyCode >= 0 && acc.push(keyCode); + } + return acc + }, []); + + if ((ctx.keyboard.length > 0) !== (keyboard.length > 0) || ctx.modifiers.keyCapture !== modifiers.keyCapture || ctx.modifiers.keycapture !== modifiers.keycapture) { + ctx.keyboard.length > 0 && cleanEvt(ctx, 'main_kbd'); + + keyboard.length > 0 && addEvt(ctx, 'main_kbd', [ + [ el, 'keydown', 'keyboardStart', ("notPassive" + (modifiers.keyCapture === true || modifiers.keycapture === true ? 'Capture' : '')) ] + ]); + } + + ctx.modifiers = modifiers; + ctx.keyboard = keyboard; + } + + var TouchRepeat = { + name: 'touch-repeat', + + bind: function bind (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + + if (el.__qtouchrepeat !== void 0) { + destroy(el); + el.__qtouchrepeat_destroyed = true; + } + + var ctx = Object.assign({}, {keyboard: [], + handler: value, + arg: arg, + modifiers: { capture: null }}, // make sure touch listeners are initiated + + parseArg(arg), + + {noop: noop, + + mouseStart: function mouseStart (evt) { + if (ctx.event === void 0 && typeof ctx.handler === 'function' && leftClick(evt) === true) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', 'passiveCapture' ], + [ document, 'click', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt, true); + } + }, + + keyboardStart: function keyboardStart (evt) { + if (typeof ctx.handler === 'function' && isKeyCode(evt, ctx.keyboard) === true) { + if (ctx.durations[0] === 0 || ctx.event !== void 0) { + stopAndPrevent(evt); + el.focus(); + if (ctx.event !== void 0) { + return + } + } + + addEvt(ctx, 'temp', [ + [ document, 'keyup', 'end', 'notPassiveCapture' ], + [ document, 'click', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt, false, true); + } + }, + + touchStart: function touchStart (evt) { + if (evt.target !== void 0 && typeof ctx.handler === 'function') { + var target = evt.target; + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'passiveCapture' ], + [ target, 'touchcancel', 'end', 'notPassiveCapture' ], + [ target, 'touchend', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt); + } + }, + + start: function start (evt, mouseEvent, keyboardEvent) { + if (keyboardEvent !== true) { + ctx.origin = position(evt); + } + + function styleCleanup (withDelay) { + ctx.styleCleanup = void 0; + + document.documentElement.style.cursor = ''; + + var remove = function () { + document.body.classList.remove('non-selectable'); + }; + + if (withDelay === true) { + clearSelection(); + setTimeout(remove, 10); + } + else { remove(); } + } + + if (client.is.mobile === true) { + document.body.classList.add('non-selectable'); + clearSelection(); + ctx.styleCleanup = styleCleanup; + } + + ctx.event = { + touch: mouseEvent !== true && keyboardEvent !== true, + mouse: mouseEvent === true, + keyboard: keyboardEvent === true, + startTime: Date.now(), + repeatCount: 0 + }; + + var fn = function () { + if (ctx.event === void 0) { + return + } + + if (ctx.event.repeatCount === 0) { + ctx.event.evt = evt; + + if (keyboardEvent === true) { + ctx.event.keyCode = evt.keyCode; + } + else { + ctx.event.position = position(evt); + } + + if (client.is.mobile !== true) { + document.documentElement.style.cursor = 'pointer'; + document.body.classList.add('non-selectable'); + clearSelection(); + ctx.styleCleanup = styleCleanup; + } + } + + ctx.event.duration = Date.now() - ctx.event.startTime; + ctx.event.repeatCount += 1; + + ctx.handler(ctx.event); + + var index = ctx.durationsLast < ctx.event.repeatCount + ? ctx.durationsLast + : ctx.event.repeatCount; + + ctx.timer = setTimeout(fn, ctx.durations[index]); + }; + + if (ctx.durations[0] === 0) { + fn(); + } + else { + ctx.timer = setTimeout(fn, ctx.durations[0]); + } + }, + + move: function move (evt) { + if (ctx.event !== void 0 && shouldEnd(evt, ctx.origin) === true) { + clearTimeout(ctx.timer); + } + }, + + end: function end (evt) { + if (ctx.event === void 0) { + return + } + + ctx.styleCleanup !== void 0 && ctx.styleCleanup(true); + evt !== void 0 && ctx.event.repeatCount > 0 && stopAndPrevent(evt); + + cleanEvt(ctx, 'temp'); + clearTimeout(ctx.timer); + + ctx.event = void 0; + }}); + + el.__qtouchrepeat = ctx; + + configureEvents(el, ctx, modifiers); + }, + + update: function update (el, ref) { + var modifiers = ref.modifiers; + var arg = ref.arg; + var value = ref.value; + var oldValue = ref.oldValue; + + var ctx = el.__qtouchrepeat; + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end(); + ctx.handler = value; + } + + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg(arg)); + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents(el, ctx, modifiers); + } + } + }, + + unbind: function unbind (el) { + if (el.__qtouchrepeat_destroyed === void 0) { + destroy(el); + } + else { + delete el.__qtouchrepeat_destroyed; + } + } + }; + + var directives = /*#__PURE__*/Object.freeze({ + __proto__: null, + ClosePopup: ClosePopup, + GoBack: GoBack, + Intersection: Intersection, + KeyGroupNavigation: KeyGroupNavigation, + Morph: Morph, + Mutation: Mutation, + Ripple: Ripple, + ScrollFire: ScrollFire, + Scroll: Scroll, + TouchHold: TouchHold, + TouchPan: TouchPan, + TouchRepeat: TouchRepeat, + TouchSwipe: TouchSwipe + }); + + var metaValue; + + function getProp () { + if (Platform.is.winphone) { + return 'msapplication-navbutton-color' + } + if (Platform.is.safari) { + return 'apple-mobile-web-app-status-bar-style' + } + // Chrome, Firefox OS, Opera, Vivaldi + return 'theme-color' + } + + function getMetaTag (v) { + var els = document.getElementsByTagName('META'); + for (var i in els) { + if (els[i].name === v) { + return els[i] + } + } + } + + function setColor (hexColor) { + if (metaValue === void 0) { + // cache it + metaValue = getProp(); + } + + var metaTag = getMetaTag(metaValue); + var newTag = metaTag === void 0; + + if (newTag) { + metaTag = document.createElement('meta'); + metaTag.setAttribute('name', metaValue); + } + + metaTag.setAttribute('content', hexColor); + + if (newTag) { + document.head.appendChild(metaTag); + } + } + + var AddressbarColor = { + install: function install (ref) { + var $q = ref.$q; + var cfg = ref.cfg; + + this.set = isSSR === false && Platform.is.mobile === true && ( + Platform.is.nativeMobile === true || + Platform.is.winphone === true || Platform.is.safari === true || + Platform.is.webkit === true || Platform.is.vivaldi === true + ) + ? function (hexColor) { + var val = hexColor || getBrand('primary'); + + if (Platform.is.nativeMobile === true && window.StatusBar) { + window.StatusBar.backgroundColorByHexString(val); + } + else { + setColor(val); + } + } + : noop; + + $q.addressbarColor = this; + + cfg.addressbarColor && this.set(cfg.addressbarColor); + } + }; + + var prefixes = {}; + + // needed for consistency across browsers, + // including IE11 which does not return anything + function promisify (target, fn) { + try { + var res = target[fn](); + return res === void 0 + ? Promise.resolve() + : res + } + catch (err) { + return Promise.reject(err) + } + } + + function checkActive (plugin) { + plugin.activeEl = document.fullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement || + document.msFullscreenElement || + null; + + plugin.isActive = plugin.activeEl !== null; + } + + var AppFullscreen = { + isCapable: false, + isActive: false, + activeEl: null, + + request: function request (target) { + var this$1$1 = this; + + if (this.isCapable === true) { + var el = target || document.documentElement; + + if (el !== this.activeEl) { + var q = client.is.ie === true && this.activeEl !== null && el.contains(this.activeEl) + ? this.exit() + : Promise.resolve(); + + return q + .then(function () { return promisify(el, prefixes.request); }) + .catch(function (error) { return ( + this$1$1.activeEl !== null + ? this$1$1.exit().then(function () { return promisify(el, prefixes.request); }) + : Promise.reject(error) + ); }) + .then(function (res) { + checkActive(this$1$1); + return res + }) + } + } + + return this.__getErr() + }, + + exit: function exit () { + var this$1$1 = this; + + return this.isCapable === true && this.isActive === true + ? promisify(document, prefixes.exit).then(function (res) { + checkActive(this$1$1); + return this$1$1.isActive ? this$1$1.exit() : res + }) + : this.__getErr() + }, + + toggle: function toggle (target) { + var el = target || document.documentElement; + + return this.activeEl === el + ? this.exit() + : this.request(el) + }, + + install: function install (ref) { + var this$1$1 = this; + var $q = ref.$q; + + $q.fullscreen = this; + + this.__getErr = function () { return Promise.resolve(); }; + + if (isSSR === true) { return } + + prefixes.request = [ + 'requestFullscreen', + 'msRequestFullscreen', 'mozRequestFullScreen', 'webkitRequestFullscreen' + ].find(function (request) { return document.documentElement[request] !== void 0; }); + + this.isCapable = prefixes.request !== void 0; + + if (this.isCapable === false) { + // it means the browser does NOT support it + this.__getErr = function () { return Promise.reject('Not capable'); }; + return + } + + prefixes.exit = [ + 'exitFullscreen', + 'msExitFullscreen', 'mozCancelFullScreen', 'webkitExitFullscreen' + ].find(function (exit) { return document[exit]; }); + + checkActive(this) + + ;[ + 'onfullscreenchange', + 'onmsfullscreenchange', 'onwebkitfullscreenchange' + ].forEach(function (evt) { + document[evt] = function () { + checkActive(this$1$1); + }; + }); + + Vue__default["default"].util.defineReactive(this, 'isActive', this.isActive); + Vue__default["default"].util.defineReactive(this, 'activeEl', this.activeEl); + } + }; + + var AppVisibility = { + appVisible: false, + + install: function install (ref) { + var this$1$1 = this; + var $q = ref.$q; + + if (isSSR === true) { + this.appVisible = $q.appVisible = true; + return + } + + var prop, evt; + + if (typeof document.hidden !== 'undefined') { // Opera 12.10 and Firefox 18 and later support + prop = 'hidden'; + evt = 'visibilitychange'; + } + else if (typeof document.msHidden !== 'undefined') { + prop = 'msHidden'; + evt = 'msvisibilitychange'; + } + else if (typeof document.webkitHidden !== 'undefined') { + prop = 'webkitHidden'; + evt = 'webkitvisibilitychange'; + } + + var update = function () { + this$1$1.appVisible = $q.appVisible = !document[prop]; + }; + + update(); + + if (evt && typeof document[prop] !== 'undefined') { + Vue__default["default"].util.defineReactive($q, 'appVisible', this.appVisible); + document.addEventListener(evt, update, false); + } + } + }; + + var optsGrid = { + staticClass: 'row items-stretch justify-start', + attrs: { role: 'list' } + }; + var optsList = { attrs: { role: 'list' } }; + var attrsGridItem = { tabindex: 0, role: 'listitem' }; + + var BottomSheet$1 = Vue__default["default"].extend({ + name: 'BottomSheetPlugin', + + mixins: [ DarkMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + title: String, + message: String, + actions: Array, + + grid: Boolean, + + cardClass: [String, Array, Object], + cardStyle: [String, Array, Object] + }, + + computed: { + dialogProps: function dialogProps () { + return Object.assign({}, this.qAttrs, + {position: 'bottom'}) + } + }, + + methods: { + show: function show () { + this.$refs.dialog.show(); + }, + + hide: function hide () { + this.$refs.dialog.hide(); + }, + + onOk: function onOk (action) { + this.$emit('ok', action); + this.hide(); + }, + + __getGrid: function __getGrid (h) { + var this$1$1 = this; + + return this.actions.map(function (action) { + var img = action.avatar || action.img; + + return action.label === void 0 + ? h(QSeparator, { + staticClass: 'col-all', + props: { dark: this$1$1.dark } + }) + : h('div', { + staticClass: 'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position', + class: action.classes, + attrs: attrsGridItem, + on: { + click: function () { return this$1$1.onOk(action); }, + keyup: function (e) { + e.keyCode === 13 && this$1$1.onOk(action); + } + } + }, [ + h('div', { staticClass: 'q-focus-helper' }), + + action.icon + ? h(QIcon, { props: { name: action.icon, color: action.color } }) + : ( + img + ? h('img', { + attrs: { src: img }, + staticClass: action.avatar ? 'q-bottom-sheet__avatar' : null + }) + : h('div', { staticClass: 'q-bottom-sheet__empty-icon' }) + ), + + h('div', [ action.label ]) + ]) + }) + }, + + __getList: function __getList (h) { + var this$1$1 = this; + + return this.actions.map(function (action) { + var img = action.avatar || action.img; + + return action.label === void 0 + ? h(QSeparator, { props: { spaced: true, dark: this$1$1.dark } }) + : h(QItem, { + staticClass: 'q-bottom-sheet__item', + class: action.classes, + props: { + tabindex: 0, + clickable: true, + dark: this$1$1.dark + }, + on: { + click: function () { return this$1$1.onOk(action); }, + keyup: function (e) { + e.keyCode === 13 && this$1$1.onOk(action); + } + } + }, [ + h(QItemSection, { props: { avatar: true } }, [ + action.icon + ? h(QIcon, { props: { name: action.icon, color: action.color } }) + : ( + img + ? h('img', { + attrs: { src: img }, + staticClass: action.avatar ? 'q-bottom-sheet__avatar' : null + }) + : null + ) + ]), + h(QItemSection, [ action.label ]) + ]) + }) + } + }, + + render: function render (h) { + var this$1$1 = this; + + var child = []; + + this.title && child.push( + h(QCardSection, { + staticClass: 'q-dialog__title' + }, [ this.title ]) + ); + + this.message && child.push( + h(QCardSection, { + staticClass: 'q-dialog__message' + }, [ this.message ]) + ); + + child.push( + this.grid === true + ? h('div', optsGrid, this.__getGrid(h)) + : h('div', optsList, this.__getList(h)) + ); + + return h(QDialog, { + key: 'dialog', + ref: 'dialog', + props: this.dialogProps, + on: cache(this, 'hide', { + hide: function () { + this$1$1.$emit('hide'); + } + }) + }, [ + h(QCard, { + staticClass: "q-bottom-sheet q-bottom-sheet--" + (this.grid === true ? 'grid' : 'list') + + " q-bottom-sheet--" + (this.darkSuffix) + " q-" + (this.darkSuffix), + style: this.cardStyle, + class: this.cardClass + }, child) + ]) + } + }); + + function objectWithoutProperties$1 (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; } + + var ssrAPI = { + onOk: function () { return ssrAPI; }, + okCancel: function () { return ssrAPI; }, + hide: function () { return ssrAPI; }, + update: function () { return ssrAPI; } + }; + + function merge (target, source) { + for (var key in source) { + if (key !== 'spinner' && Object(source[key]) === source[key]) { + target[key] = Object(target[key]) !== target[key] + ? {} + : Object.assign({}, target[key]); + + merge(target[key], source[key]); + } + else { + target[key] = source[key]; + } + } + } + + var appRoot; + + function getDialogParent (parent, root) { + if (parent !== void 0) { return parent } + if (root !== void 0) { return root } + + if (appRoot === void 0) { + var elRoot = document.getElementById('q-app'); + + if (elRoot && elRoot.__vue__) { + appRoot = elRoot.__vue__.$root; + } + } + + return appRoot + } + + function globalDialog (DefaultComponent) { + return function (ref) { + ref.className; + var klass = ref.class; + var style = ref.style; + var component = ref.component; + var root = ref.root; + var parent = ref.parent; + var rest = objectWithoutProperties$1( ref, ["className", "class", "style", "component", "root", "parent"] ); + var props = rest; + + if (isSSR === true) { return ssrAPI } + + klass !== void 0 && (props.cardClass = klass); + style !== void 0 && (props.cardStyle = style); + + var isCustom = component !== void 0; + var DialogComponent, attrs; + + if (isCustom === true) { + DialogComponent = component; + } + else { + DialogComponent = DefaultComponent; + attrs = props; + } + + var + okFns = [], + cancelFns = [], + API = { + onOk: function onOk (fn) { + okFns.push(fn); + return API + }, + onCancel: function onCancel (fn) { + cancelFns.push(fn); + return API + }, + onDismiss: function onDismiss (fn) { + okFns.push(fn); + cancelFns.push(fn); + return API + }, + hide: function hide () { + vm.$refs.dialog.hide(); + return API + }, + update: function update (ref) { + ref.className; + var klass = ref.class; + var style = ref.style; + ref.component; + ref.root; + ref.parent; + var rest = objectWithoutProperties$1( ref, ["className", "class", "style", "component", "root", "parent"] ); + var cfg = rest; + + if (vm !== null) { + klass !== void 0 && (cfg.cardClass = klass); + style !== void 0 && (cfg.cardStyle = style); + + if (isCustom === true) { + Object.assign(props, cfg); + } + else { + merge(props, cfg); + + // need to change "attrs" reference to + // actually reflect it in underlying component + // when we force update it + attrs = Object.assign({}, props); + } + + vm.$forceUpdate(); + } + + return API + } + }; + + var node = document.createElement('div'); + getPortalsContainer(document.body).appendChild(node); + + var emittedOK = false; + + var on = { + ok: function (data) { + emittedOK = true; + okFns.forEach(function (fn) { fn(data); }); + }, + + hide: function () { + vm.$destroy(); + vm.$el.remove(); + vm = null; + + if (emittedOK !== true) { + cancelFns.forEach(function (fn) { fn(); }); + } + } + }; + + var vm = new Vue__default["default"]({ + name: 'QGlobalDialog', + + el: node, + parent: getDialogParent(parent, root), + + render: function render (h) { + return h(DialogComponent, { + ref: 'dialog', + props: props, + attrs: attrs, + on: on + }) + }, + + mounted: function mounted () { + var this$1$1 = this; + + if (this.$refs.dialog !== void 0) { + this.$refs.dialog.show(); + } + else { + on['hook:mounted'] = function () { + this$1$1.$refs.dialog !== void 0 && this$1$1.$refs.dialog.show(); + }; + } + } + }); + + return API + } + } + + var BottomSheet = { + install: function install (ref) { + var $q = ref.$q; + + this.create = $q.bottomSheet = globalDialog(BottomSheet$1); + } + }; + + function encode$1 (string) { + return encodeURIComponent(string) + } + + function decode$1 (string) { + return decodeURIComponent(string) + } + + function stringifyCookieValue (value) { + return encode$1( + typeof value === 'string' && value.slice(0, 2) !== 'j:' + ? value + : 'j:' + JSON.stringify(value) + ) + } + + function read (string, reviverFn) { + if (string === '') { + return string + } + + if (string.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + string = string.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + } + + // Replace server-side written pluses with spaces. + // If we can't decode the cookie, ignore it, it's unusable. + // If we can't parse the cookie, ignore it, it's unusable. + string = decode$1(string.replace(/\+/g, ' ')); + + if (string.slice(0, 2) === 'j:') { + try { + return JSON.parse(string.slice(2), reviverFn) + } + catch (e) {} + } + + try { + var parsed = JSON.parse(string, reviverFn); + + return reviverFn !== void 0 || parsed === Object(parsed) || Array.isArray(parsed) === true + ? parsed + : string + } + catch (e$1) { + return string + } + } + + function getString (msOffset) { + var time = new Date(); + time.setMilliseconds(time.getMilliseconds() + msOffset); + return time.toUTCString() + } + + function parseExpireString (str) { + var timestamp = 0; + + var days = str.match(/(\d+)d/); + var hours = str.match(/(\d+)h/); + var minutes = str.match(/(\d+)m/); + var seconds = str.match(/(\d+)s/); + + if (days) { timestamp += days[1] * 864e+5; } + if (hours) { timestamp += hours[1] * 36e+5; } + if (minutes) { timestamp += minutes[1] * 6e+4; } + if (seconds) { timestamp += seconds[1] * 1000; } + + return timestamp === 0 + ? str + : getString(timestamp) + } + + function set (key, val, opts, ssr) { + if ( opts === void 0 ) opts = {}; + + var expire, expireValue; + + if (opts.expires !== void 0) { + // if it's a Date Object + if (Object.prototype.toString.call(opts.expires) === '[object Date]') { + expire = opts.expires.toUTCString(); + } + // if it's a String (eg. "15m", "1h", "13d", "1d 15m", "31s") + // possible units: d (days), h (hours), m (minutes), s (seconds) + else if (typeof opts.expires === 'string') { + expire = parseExpireString(opts.expires); + } + // otherwise it must be a Number (defined in days) + else { + expireValue = parseFloat(opts.expires); + expire = isNaN(expireValue) === false + ? getString(expireValue * 864e+5) + : opts.expires; + } + } + + var keyValue = (encode$1(key)) + "=" + (stringifyCookieValue(val)); + + var cookie = [ + keyValue, + expire !== void 0 ? '; Expires=' + expire : '', // use expires attribute, max-age is not supported by IE + opts.path ? '; Path=' + opts.path : '', + opts.domain ? '; Domain=' + opts.domain : '', + opts.sameSite ? '; SameSite=' + opts.sameSite : '', + opts.httpOnly ? '; HttpOnly' : '', + opts.secure ? '; Secure' : '', + opts.other ? '; ' + opts.other : '' + ].join(''); + + if (ssr) { + if (ssr.req.qCookies) { + ssr.req.qCookies.push(cookie); + } + else { + ssr.req.qCookies = [ cookie ]; + } + + ssr.res.setHeader('Set-Cookie', ssr.req.qCookies); + + // make temporary update so future get() + // within same SSR timeframe would return the set value + + var all = ssr.req.headers.cookie || ''; + + if (expire !== void 0 && expireValue < 0) { + var oldVal = get(key, ssr, void 0, true); + if (oldVal !== void 0) { + var replaceKeyValue = (encode$1(key)) + "=" + (stringifyCookieValue(oldVal)); + all = all + .replace((replaceKeyValue + "; "), '') + .replace(("; " + replaceKeyValue), '') + .replace(("" + replaceKeyValue), ''); + } + } + else { + all = all + ? (keyValue + "; " + all) + : cookie; + } + + ssr.req.headers.cookie = all; + } + else { + document.cookie = cookie; + } + } + + function get (key, ssr, reviverFn, raw) { + var + cookieSource = ssr ? ssr.req.headers : document, + cookies = cookieSource.cookie ? cookieSource.cookie.split('; ') : [], + l = cookies.length; + var + result = key ? null : {}, + i = 0, + parts, + name, + cookie; + + for (; i < l; i++) { + parts = cookies[i].split('='); + name = decode$1(parts.shift()); + cookie = parts.join('='); + + if (!key) { + result[name] = read(cookie, reviverFn); + } + else if (key === name) { + result = raw === true ? cookie : read(cookie, reviverFn); + break + } + } + + return result + } + + function remove (key, options, ssr) { + set( + key, + '', + Object.assign({}, {expires: -1}, options), + ssr + ); + } + + function has (key, ssr, reviverFn) { + return get(key, ssr, reviverFn) !== null + } + + function getObject (ssr) { + return { + get: function (key, reviverFn) { return get(key, ssr, reviverFn); }, + set: function (key, val, opts) { return set(key, val, opts, ssr); }, + has: function (key, reviverFn) { return has(key, ssr, reviverFn); }, + remove: function (key, options) { return remove(key, options, ssr); }, + getAll: function (reviverFn) { return get(null, ssr, reviverFn); } + } + } + + var Cookies = { + parseSSR: function parseSSR (ssrContext) { + return ssrContext !== void 0 + ? getObject(ssrContext) + : this + }, + + install: function install (ref) { + var $q = ref.$q; + var queues = ref.queues; + + if (isSSR === true) { + queues.server.push(function (q, ctx) { + q.cookies = getObject(ctx.ssr); + }); + } + else { + Object.assign(this, getObject()); + $q.cookies = this; + } + } + }; + + var DialogPlugin = Vue__default["default"].extend({ + name: 'DialogPlugin', + + mixins: [ DarkMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + title: String, + message: String, + prompt: Object, + options: Object, + progress: [ Boolean, Object ], + + html: Boolean, + + ok: { + type: [ String, Object, Boolean ], + default: true + }, + cancel: [ String, Object, Boolean ], + focus: { + type: String, + default: 'ok', + validator: function (v) { return ['ok', 'cancel', 'none'].includes(v); } + }, + + stackButtons: Boolean, + color: String, + + cardClass: [ String, Array, Object ], + cardStyle: [ String, Array, Object ] + }, + + computed: { + classes: function classes () { + return 'q-dialog-plugin' + + " q-dialog-plugin--" + (this.darkSuffix) + " q-" + (this.darkSuffix) + + (this.progress !== false ? ' q-dialog-plugin--progress' : '') + }, + + spinner: function spinner () { + if (this.progress !== false) { + return isObject(this.progress) === true + ? { + component: this.progress.spinner || QSpinner, + props: { color: this.progress.color || this.vmColor } + } + : { + component: QSpinner, + props: { color: this.vmColor } + } + } + }, + + hasForm: function hasForm () { + return this.prompt !== void 0 || this.options !== void 0 + }, + + okLabel: function okLabel () { + return isObject(this.ok) === true + ? this.$q.lang.label.ok + : ( + this.ok === true + ? this.$q.lang.label.ok + : this.ok + ) + }, + + cancelLabel: function cancelLabel () { + return isObject(this.cancel) === true + ? this.$q.lang.label.cancel + : ( + this.cancel === true + ? this.$q.lang.label.cancel + : this.cancel + ) + }, + + vmColor: function vmColor () { + return this.color || ("dialog-plugin-" + (this.darkSuffix)) + }, + + okDisabled: function okDisabled () { + if (this.prompt !== void 0) { + return this.prompt.isValid !== void 0 && + this.prompt.isValid(this.prompt.model) !== true + } + if (this.options !== void 0) { + return this.options.isValid !== void 0 && + this.options.isValid(this.options.model) !== true + } + }, + + okProps: function okProps () { + return Object.assign({}, {color: this.vmColor, + label: this.okLabel, + ripple: false, + disable: this.okDisabled}, + (isObject(this.ok) === true ? this.ok : { flat: true })) + }, + + cancelProps: function cancelProps () { + return Object.assign({}, {color: this.vmColor, + label: this.cancelLabel, + ripple: false}, + (isObject(this.cancel) === true ? this.cancel : { flat: true })) + } + }, + + methods: { + show: function show () { + this.$refs.dialog.show(); + }, + + hide: function hide () { + this.$refs.dialog.hide(); + }, + + getPrompt: function getPrompt (h) { + var this$1$1 = this; + + return [ + h(QInput, { + key: 'prompt', + props: { + value: this.prompt.model, + type: this.prompt.type, + + label: this.prompt.label, + stackLabel: this.prompt.stackLabel, + + outlined: this.prompt.outlined, + filled: this.prompt.filled, + standout: this.prompt.standout, + rounded: this.prompt.rounded, + square: this.prompt.square, + + counter: this.prompt.counter, + maxlength: this.prompt.maxlength, + prefix: this.prompt.prefix, + suffix: this.prompt.suffix, + + color: this.vmColor, + dense: true, + autofocus: true, + dark: this.dark + }, + attrs: this.prompt.attrs, + on: cache(this, 'prompt', { + input: function (v) { this$1$1.prompt.model = v; }, + keyup: function (evt) { + // if ENTER key + if ( + this$1$1.okDisabled !== true && + this$1$1.prompt.type !== 'textarea' && + isKeyCode(evt, 13) === true + ) { + this$1$1.onOk(); + } + } + }) + }) + ] + }, + + getOptions: function getOptions (h) { + var this$1$1 = this; + + return [ + h(QOptionGroup, { + key: 'opts', + props: { + value: this.options.model, + type: this.options.type, + color: this.vmColor, + inline: this.options.inline, + options: this.options.items, + dark: this.dark + }, + on: cache(this, 'opts', { + input: function (v) { this$1$1.options.model = v; } + }) + }) + ] + }, + + getButtons: function getButtons (h) { + var child = []; + + this.cancel && child.push(h(QBtn, { + key: 'cancel', + props: this.cancelProps, + attrs: { 'data-autofocus': this.focus === 'cancel' && this.hasForm !== true }, + on: cache(this, 'cancel', { click: this.onCancel }) + })); + + this.ok && child.push(h(QBtn, { + key: 'ok', + props: this.okProps, + attrs: { 'data-autofocus': this.focus === 'ok' && this.hasForm !== true }, + on: cache(this, 'ok', { click: this.onOk }) + })); + + if (child.length > 0) { + return h(QCardActions, { + staticClass: this.stackButtons === true ? 'items-end' : null, + props: { + vertical: this.stackButtons, + align: 'right' + } + }, child) + } + }, + + onOk: function onOk () { + this.$emit('ok', cloneDeep(this.getData())); + this.hide(); + }, + + onCancel: function onCancel () { + this.hide(); + }, + + getData: function getData () { + return this.prompt !== void 0 + ? this.prompt.model + : (this.options !== void 0 ? this.options.model : void 0) + }, + + getSection: function getSection (h, staticClass, text) { + return this.html === true + ? h(QCardSection, { + staticClass: staticClass, + domProps: { innerHTML: text } + }) + : h(QCardSection, { staticClass: staticClass }, [ text ]) + } + }, + + render: function render (h) { + var this$1$1 = this; + + var child = []; + + this.title && child.push( + this.getSection(h, 'q-dialog__title', this.title) + ); + + this.progress !== false && child.push( + h(QCardSection, { staticClass: 'q-dialog__progress' }, [ + h(this.spinner.component, { + props: this.spinner.props + }) + ]) + ); + + this.message && child.push( + this.getSection(h, 'q-dialog__message', this.message) + ); + + if (this.prompt !== void 0) { + child.push( + h( + QCardSection, + { staticClass: 'scroll q-dialog-plugin__form' }, + this.getPrompt(h) + ) + ); + } + else if (this.options !== void 0) { + child.push( + h(QSeparator, { props: { dark: this.dark } }), + h( + QCardSection, + { staticClass: 'scroll q-dialog-plugin__form' }, + this.getOptions(h) + ), + h(QSeparator, { props: { dark: this.dark } }) + ); + } + + if (this.ok || this.cancel) { + child.push(this.getButtons(h)); + } + + return h(QDialog, { + key: 'dialog', + ref: 'dialog', + + props: Object.assign({}, this.qAttrs, + {value: this.value}), + + on: cache(this, 'hide', { + hide: function () { + this$1$1.$emit('hide'); + } + }) + }, [ + h(QCard, { + staticClass: this.classes, + style: this.cardStyle, + class: this.cardClass, + props: { dark: this.dark } + }, child) + ]) + } + }); + + var Dialog = { + install: function install (ref) { + var $q = ref.$q; + + this.create = $q.dialog = globalDialog(DialogPlugin); + } + }; + + var LoadingBar = { + isActive: false, + start: noop, + stop: noop, + increment: noop, + setDefaults: noop, + + install: function install (ref) { + var this$1$1 = this; + var $q = ref.$q; + var cfg = ref.cfg; + + $q.loadingBar = this; + + if (isSSR === true) { + return + } + + var props = cfg.loadingBar !== void 0 + ? Object.assign({}, cfg.loadingBar) + : {}; + var on = { + start: function () { + this$1$1.isActive = true; + }, + + stop: function () { + this$1$1.isActive = false; + } + }; + + var bar = new Vue__default["default"]({ + name: 'LoadingBar', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate: function beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}); + }, + + render: function (h) { return h(QAjaxBar, { + ref: 'bar', + props: props, + on: on + }); } + }).$mount().$refs.bar; + + Object.assign(this, { + start: bar.start, + stop: bar.stop, + increment: bar.increment, + setDefaults: function (opts) { + isObject(opts) === true && Object.assign(props, opts); + bar.$parent.$forceUpdate(); + } + }); + + Vue__default["default"].util.defineReactive(this, 'isActive', this.isActive); + Vue__default["default"].util.defineReactive(bar, 'isActive', this.isActive); + bar.setDefaults = this.setDefaults; + + document.body.appendChild(bar.$parent.$el); + } + }; + + var + vm$1, + uid$1 = 0, + timeout, + props = {}, + activeGroups = {}; + + var originalDefaults = { + group: '__default_quasar_group__', + delay: 0, + message: false, + spinnerSize: 80, + spinnerColor: 'white', + messageColor: 'white', + backgroundColor: 'black', + spinner: QSpinner, + customClass: '' + }; + + var defaults$1 = Object.assign({}, originalDefaults); + + function registerProps (opts) { + if (opts && opts.group !== void 0 && activeGroups[ opts.group ] !== void 0) { + return Object.assign(activeGroups[ opts.group ], opts) + } + + var newProps = isObject(opts) === true && opts.ignoreDefaults === true + ? Object.assign({}, originalDefaults, opts) + : Object.assign({}, defaults$1, opts); + + activeGroups[ newProps.group ] = newProps; + return newProps + } + + var Loading = { + isActive: false, + + show: function show (opts) { + var this$1$1 = this; + + if (isSSR === true) { return } + + props = registerProps(opts); + var group = props.group; + + props.customClass += " text-" + (props.backgroundColor); + + this.isActive = true; + + if (vm$1 !== void 0) { + props.uid = uid$1; + vm$1.$forceUpdate(); + } + else { + props.uid = ++uid$1; + clearTimeout(timeout); + + timeout = setTimeout(function () { + timeout = void 0; + + var node = document.createElement('div'); + document.body.appendChild(node); + + vm$1 = new Vue__default["default"]({ + name: 'QLoading', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate: function beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}); + }, + + el: node, + + mounted: function mounted () { + preventScroll(true); + }, + + render: function (h) { + var obj; + + return h('transition', { + key: 'tr', + props: { + name: 'q-transition--fade', + appear: true + }, + on: cache(this$1$1, 'tr', { + 'after-leave': function () { + // might be called to finalize + // previous leave, even if it was cancelled + if (this$1$1.isActive !== true && vm$1 !== void 0) { + preventScroll(false); + vm$1.$destroy(); + vm$1.$el.remove(); + vm$1 = void 0; + } + } + }) + }, [ + this$1$1.isActive === true ? h('div', { + staticClass: 'q-loading fullscreen column flex-center z-max', + key: props.uid, + class: props.customClass.trim() + }, [ + h(props.spinner, { + props: { + color: props.spinnerColor, + size: props.spinnerSize + } + }), + + (props.message && h('div', { + class: ("text-" + (props.messageColor)), + domProps: ( obj = {}, obj[props.sanitize === true ? 'textContent' : 'innerHTML'] = props.message, obj ) + })) || void 0 + ]) : null + ]) + } + }); + }, props.delay); + } + + return function (paramProps) { + // if we don't have params (or not an Object param) then we need to hide this group + if (paramProps === void 0 || Object(paramProps) !== paramProps) { + this$1$1.hide(group); + return + } + + // else we have params so we need to update this group + this$1$1.show(Object.assign({}, paramProps, {group: group})); + } + }, + + hide: function hide (group) { + if (this.isActive === true) { + if (group === void 0) { + // clear out any active groups + activeGroups = {}; + } + else if (activeGroups[ group ] === void 0) { + // we've already hidden it so nothing to do + return + } + else { + // remove active group + delete activeGroups[ group ]; + + var keys = Object.keys(activeGroups); + + // if there are other groups registered then + // show last registered one since that one is still active + if (keys.length !== 0) { + // get last registered group + var lastGroup = keys[ keys.length - 1 ]; + this.show({ group: lastGroup }); + return + } + } + + if (timeout !== void 0) { + clearTimeout(timeout); + timeout = void 0; + } + + this.isActive = false; + } + }, + + setDefaults: function setDefaults (opts) { + isObject(opts) === true && Object.assign(defaults$1, opts); + }, + + install: function install (ref) { + var $q = ref.$q; + var loading = ref.cfg.loading; + + this.setDefaults(loading); + $q.loading = this; + } + }; + + if (isSSR === false) { + Vue__default["default"].util.defineReactive(Loading, 'isActive', Loading.isActive); + } + + var updateId, ssrTakeover; + + function normalize (meta) { + if (meta.title) { + meta.title = meta.titleTemplate + ? meta.titleTemplate(meta.title) + : meta.title; + delete meta.titleTemplate; + } + [['meta', 'content'], ['link', 'href']].forEach(function (type) { + var + metaType = meta[type[0]], + metaProp = type[1]; + + for (var name in metaType) { + var metaLink = metaType[name]; + + if (metaLink.template) { + if (Object.keys(metaLink).length === 1) { + delete metaType[name]; + } + else { + metaLink[metaProp] = metaLink.template(metaLink[metaProp] || ''); + delete metaLink.template; + } + } + } + }); + } + + function changed (old, def) { + if (Object.keys(old).length !== Object.keys(def).length) { + return true + } + for (var key in old) { + if (old[key] !== def[key]) { + return true + } + } + } + + function bodyFilter (name) { + return ['class', 'style'].includes(name) === false + } + + function htmlFilter (name) { + return ['lang', 'dir'].includes(name) === false + } + + function diff (meta, other) { + var add = {}, remove = {}; + + if (meta === void 0) { + return { add: other, remove: remove } + } + + if (meta.title !== other.title) { + add.title = other.title; + } + ['meta', 'link', 'script', 'htmlAttr', 'bodyAttr'].forEach(function (type) { + var old = meta[type], cur = other[type]; + remove[type] = []; + + if (old === void 0 || old === null) { + add[type] = cur; + return + } + + add[type] = {}; + + for (var key in old) { + if (cur.hasOwnProperty(key) === false) { + remove[type].push(key); + } + } + for (var key$1 in cur) { + if (old.hasOwnProperty(key$1) === false) { + add[type][key$1] = cur[key$1]; + } + else if (changed(old[key$1], cur[key$1]) === true) { + remove[type].push(key$1); + add[type][key$1] = cur[key$1]; + } + } + }); + + return { add: add, remove: remove } + } + + function apply (ref) { + var add = ref.add; + var remove = ref.remove; + + if (add.title) { + document.title = add.title; + } + + if (Object.keys(remove).length > 0) { + ['meta', 'link', 'script'].forEach(function (type) { + remove[type].forEach(function (name) { + document.head.querySelector((type + "[data-qmeta=\"" + name + "\"]")).remove(); + }); + }); + remove.htmlAttr.filter(htmlFilter).forEach(function (name) { + document.documentElement.removeAttribute(name); + }); + remove.bodyAttr.filter(bodyFilter).forEach(function (name) { + document.body.removeAttribute(name); + }); + } + ['meta', 'link', 'script'].forEach(function (type) { + var metaType = add[type]; + + for (var name in metaType) { + var tag = document.createElement(type); + for (var att in metaType[name]) { + if (att !== 'innerHTML') { + tag.setAttribute(att, metaType[name][att]); + } + } + tag.setAttribute('data-qmeta', name); + if (type === 'script') { + tag.innerHTML = metaType[name].innerHTML || ''; + } + document.head.appendChild(tag); + } + }); + Object.keys(add.htmlAttr).filter(htmlFilter).forEach(function (name) { + document.documentElement.setAttribute(name, add.htmlAttr[name] || ''); + }); + Object.keys(add.bodyAttr).filter(bodyFilter).forEach(function (name) { + document.body.setAttribute(name, add.bodyAttr[name] || ''); + }); + } + + function parseMeta (component, meta) { + if (component._inactive === true) { return } + + // if it has meta + if (hasMeta(component) === true) { + extend(true, meta, component.__qMeta); + + if (component.$options.meta.stopPropagation === true) { + return + } + } + + component.$children.forEach(function (child) { + parseMeta(child, meta); + }); + } + + function updateClient () { + if (ssrTakeover === true) { + ssrTakeover = false; + this.$root.__currentMeta = window.__Q_META__; + } + + var meta = { + title: '', + titleTemplate: null, + meta: {}, + link: {}, + script: {}, + htmlAttr: {}, + bodyAttr: {} + }; + parseMeta(this.$root, meta); + normalize(meta); + + apply(diff(this.$root.__currentMeta, meta)); + this.$root.__currentMeta = meta; + } + + function getAttr (seed) { + return function (att) { + var val = seed[att]; + return att + (val !== true && val !== void 0 ? ("=\"" + val + "\"") : '') + } + } + + function getHead (meta) { + var output = ''; + if (meta.title) { + output += "" + (meta.title) + ""; + } + ['meta', 'link', 'script'].forEach(function (type) { + var metaType = meta[type]; + + for (var att in metaType) { + var attrs = Object.keys(metaType[att]) + .filter(function (att) { return att !== 'innerHTML'; }) + .map(getAttr(metaType[att])); + + output += "<" + type + " " + (attrs.join(' ')) + " data-qmeta=\"" + att + "\">"; + if (type === 'script') { + output += (metaType[att].innerHTML || '') + ""; + } + } + }); + return output + } + + function getServerMeta (app, html, ctx) { + var meta = { + title: '', + titleTemplate: null, + meta: {}, + link: {}, + htmlAttr: {}, + bodyAttr: {}, + noscript: {} + }; + + parseMeta(app, meta); + normalize(meta); + + var nonce = ctx !== void 0 && ctx.nonce !== void 0 + ? (" nonce=\"" + (ctx.nonce) + "\"") + : ''; + + var tokens = { + '%%Q_HTML_ATTRS%%': Object.keys(meta.htmlAttr) + .filter(htmlFilter) + .map(getAttr(meta.htmlAttr)) + .join(' '), + '%%Q_HEAD_TAGS%%': getHead(meta), + '%%Q_BODY_ATTRS%%': Object.keys(meta.bodyAttr) + .filter(bodyFilter) + .map(getAttr(meta.bodyAttr)) + .join(' '), + '%%Q_BODY_TAGS%%': Object.keys(meta.noscript) + .map(function (name) { return (""); }) + .join('') + + "window.__Q_META__=" + (delete meta.noscript && JSON.stringify(meta)) + "" + }; + + Object.keys(tokens).forEach(function (key) { + html = html.replace(key, tokens[key]); + }); + + return html + } + + function beforeCreate () { + if (typeof this.$options.meta === 'function') { + if (this.$options.computed === void 0) { + this.$options.computed = {}; + } + this.$options.computed.__qMeta = this.$options.meta; + } + else if (hasMeta(this) === true) { + this.__qMeta = this.$options.meta; + } + } + + // needs to be really fast + function hasMeta (vm) { + return vm.$options.meta !== void 0 && + vm.$options.meta !== null + } + + function triggerMeta () { + hasMeta(this) === true && this.__qMetaUpdate(); + } + + var Meta = { + install: function install (ref) { + var queues = ref.queues; + + if (isSSR === true) { + Vue__default["default"].prototype.$getMetaHTML = function (app) { + return function (html, ctx) { return getServerMeta(app, html, ctx); } + }; + + Vue__default["default"].mixin({ beforeCreate: beforeCreate }); + + queues.server.push(function (_, ctx) { + ctx.ssr.Q_HTML_ATTRS += ' %%Q_HTML_ATTRS%%'; + Object.assign(ctx.ssr, { + Q_HEAD_TAGS: '%%Q_HEAD_TAGS%%', + Q_BODY_ATTRS: '%%Q_BODY_ATTRS%%', + Q_BODY_TAGS: '%%Q_BODY_TAGS%%' + }); + }); + } + else { + ssrTakeover = fromSSR; + + Vue__default["default"].mixin({ + beforeCreate: beforeCreate, + created: function created () { + if (hasMeta(this) === true) { + this.__qMetaUnwatch = this.$watch('__qMeta', this.__qMetaUpdate); + } + }, + activated: triggerMeta, + deactivated: triggerMeta, + beforeMount: triggerMeta, + destroyed: function destroyed () { + if (hasMeta(this) === true) { + this.__qMetaUnwatch(); + this.__qMetaUpdate(); + } + }, + methods: { + __qMetaUpdate: function __qMetaUpdate () { + clearTimeout(updateId); + updateId = setTimeout(updateClient.bind(this), 50); + } + } + }); + } + } + }; + + function objectWithoutProperties (obj, exclude) { var target = {}; for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k]; return target; } + + var uid = 0, vm; + + var defaults = {}; + var groups = {}; + var notificationsList = {}; + var positionClass = {}; + var emptyRE = /^\s*$/; + + var positionList = [ + 'top-left', 'top-right', + 'bottom-left', 'bottom-right', + 'top', 'bottom', 'left', 'right', 'center' + ]; + + var badgePositions = [ + 'top-left', 'top-right', + 'bottom-left', 'bottom-right' + ]; + + var notifTypes = { + positive: { + icon: function ($q) { return $q.iconSet.type.positive; }, + color: 'positive' + }, + + negative: { + icon: function ($q) { return $q.iconSet.type.negative; }, + color: 'negative' + }, + + warning: { + icon: function ($q) { return $q.iconSet.type.warning; }, + color: 'warning', + textColor: 'dark' + }, + + info: { + icon: function ($q) { return $q.iconSet.type.info; }, + color: 'info' + }, + + ongoing: { + group: false, + timeout: 0, + spinner: true, + color: 'grey-8' + } + }; + + function addNotification (config, vm, originalApi) { + if (!config) { + return logError('parameter required') + } + + var Api; + var notif = { textColor: 'white' }; + + if (config.ignoreDefaults !== true) { + Object.assign(notif, defaults); + } + + if (isObject(config) === false) { + if (notif.type) { + Object.assign(notif, notifTypes[notif.type]); + } + + config = { message: config }; + } + + Object.assign(notif, notifTypes[config.type || notif.type], config); + + if (typeof notif.icon === 'function') { + notif.icon = notif.icon(vm.$q); + } + + if (!notif.spinner) { + notif.spinner = false; + } + else if (notif.spinner === true) { + notif.spinner = QSpinner; + } + + notif.meta = { + hasMedia: Boolean(notif.spinner !== false || notif.icon || notif.avatar), + hasText: hasContent(notif.message) || hasContent(notif.caption) + }; + + if (notif.position) { + if (positionList.includes(notif.position) === false) { + return logError('wrong position', config) + } + } + else { + notif.position = 'bottom'; + } + + if (notif.timeout === void 0) { + notif.timeout = 5000; + } + else { + var t = parseInt(notif.timeout, 10); + if (isNaN(t) || t < 0) { + return logError('wrong timeout', config) + } + notif.timeout = t; + } + + if (notif.timeout === 0) { + notif.progress = false; + } + else if (notif.progress === true) { + notif.meta.progressClass = 'q-notification__progress' + ( + notif.progressClass + ? (" " + (notif.progressClass)) + : '' + ); + + notif.meta.progressStyle = { + animationDuration: ((notif.timeout + 1000) + "ms") + }; + } + + var actions = ( + Array.isArray(config.actions) === true + ? config.actions + : [] + ).concat( + config.ignoreDefaults !== true && Array.isArray(defaults.actions) === true + ? defaults.actions + : [] + ).concat( + notifTypes[config.type] !== void 0 && Array.isArray(notifTypes[config.type].actions) === true + ? notifTypes[config.type].actions + : [] + ); + + var closeBtn = notif.closeBtn; + closeBtn && actions.push({ + label: typeof closeBtn === 'string' + ? closeBtn + : vm.$q.lang.label.close + }); + + notif.actions = actions.map(function (ref) { + var handler = ref.handler; + var noDismiss = ref.noDismiss; + var style = ref.style; + var klass = ref.class; + var attrs = ref.attrs; + var rest = objectWithoutProperties( ref, ["handler", "noDismiss", "style", "class", "attrs"] ); + var props = rest; + + return ({ + staticClass: klass, + style: style, + props: Object.assign({}, {flat: true}, props), + attrs: attrs, + on: { + click: typeof handler === 'function' + ? function () { + handler(); + noDismiss !== true && dismiss(); + } + : function () { dismiss(); } + } + }); + }); + + if (notif.multiLine === void 0) { + notif.multiLine = notif.actions.length > 1; + } + + Object.assign(notif.meta, { + staticClass: 'q-notification row items-stretch' + + " q-notification--" + (notif.multiLine === true ? 'multi-line' : 'standard') + + (notif.color !== void 0 ? (" bg-" + (notif.color)) : '') + + (notif.textColor !== void 0 ? (" text-" + (notif.textColor)) : '') + + (notif.classes !== void 0 ? (" " + (notif.classes)) : ''), + + wrapperClass: 'q-notification__wrapper col relative-position border-radius-inherit ' + + (notif.multiLine === true ? 'column no-wrap justify-center' : 'row items-center'), + + contentClass: 'q-notification__content row items-center' + + (notif.multiLine === true ? '' : ' col'), + + leftClass: notif.meta.hasText === true ? 'additional' : 'single', + + attrs: Object.assign({}, {role: 'alert'}, + notif.attrs) + }); + + if (notif.group === false) { + notif.group = void 0; + notif.meta.group = void 0; + } + else { + if (notif.group === void 0 || notif.group === true) { + // do not replace notifications with different buttons + notif.group = [ + notif.message, + notif.caption, + notif.multiline + ].concat( + notif.actions.map(function (ref) { + var props = ref.props; + + return ((props.label) + "*" + (props.icon)); + }) + ).join('|'); + } + + notif.meta.group = notif.group + '|' + notif.position; + } + + if (notif.actions.length === 0) { + notif.actions = void 0; + } + else { + notif.meta.actionsClass = 'q-notification__actions row items-center ' + + (notif.multiLine === true ? 'justify-end' : 'col-auto') + + (notif.meta.hasMedia === true ? ' q-notification__actions--with-media' : ''); + } + + if (originalApi !== void 0) { + // reset timeout if any + clearTimeout(originalApi.notif.meta.timer); + + // retain uid + notif.meta.uid = originalApi.notif.meta.uid; + + // replace notif + var index = notificationsList[notif.position].indexOf(originalApi.notif); + notificationsList[notif.position][index] = notif; + } + else { + var original = groups[notif.meta.group]; + + // woohoo, it's a new notification + if (original === void 0) { + notif.meta.uid = uid++; + notif.meta.badge = 1; + + if (['left', 'right', 'center'].indexOf(notif.position) !== -1) { + notificationsList[notif.position].splice( + Math.floor(notificationsList[notif.position].length / 2), + 0, + notif + ); + } + else { + var action = notif.position.indexOf('top') > -1 ? 'unshift' : 'push'; + notificationsList[notif.position][action](notif); + } + + if (notif.group !== void 0) { + groups[notif.meta.group] = notif; + } + } + // ok, so it's NOT a new one + else { + // reset timeout if any + clearTimeout(original.meta.timer); + + if (notif.badgePosition !== void 0) { + if (badgePositions.includes(notif.badgePosition) === false) { + return logError('wrong badgePosition', config) + } + } + else { + notif.badgePosition = "top-" + (notif.position.indexOf('left') > -1 ? 'right' : 'left'); + } + + notif.meta.uid = original.meta.uid; + notif.meta.badge = original.meta.badge + 1; + notif.meta.badgeClass = "q-notification__badge q-notification__badge--" + (notif.badgePosition) + + (notif.badgeColor !== void 0 ? (" bg-" + (notif.badgeColor)) : '') + + (notif.badgeTextColor !== void 0 ? (" text-" + (notif.badgeTextColor)) : '') + + (notif.badgeClass ? (" " + (notif.badgeClass)) : ''); + + var index$1 = notificationsList[notif.position].indexOf(original); + notificationsList[notif.position][index$1] = groups[notif.meta.group] = notif; + } + } + + var dismiss = function () { + removeNotification(notif, vm); + Api = void 0; + }; + + vm.$forceUpdate(); + + if (notif.timeout > 0) { + notif.meta.timer = setTimeout(function () { + dismiss(); + }, notif.timeout + /* show duration */ 1000); + } + + // only non-groupable can be updated + if (notif.group !== void 0) { + return function (props) { + if (props !== void 0) { + logError('trying to update a grouped one which is forbidden', config); + } + else { + dismiss(); + } + } + } + + Api = { + dismiss: dismiss, + config: config, + notif: notif + }; + + if (originalApi !== void 0) { + Object.assign(originalApi, Api); + return + } + + return function (props) { + // if notification wasn't previously dismissed + if (Api !== void 0) { + // if no params, then we must dismiss the notification + if (props === void 0) { + Api.dismiss(); + } + // otherwise we're updating it + else { + var newNotif = Object.assign({}, Api.config, props, { + group: false, + position: notif.position + }); + + addNotification(newNotif, vm, Api); + } + } + } + } + + function removeNotification (notif, vm) { + clearTimeout(notif.meta.timer); + + var index = notificationsList[notif.position].indexOf(notif); + if (index !== -1) { + if (notif.group !== void 0) { + delete groups[notif.meta.group]; + } + + var el = vm.$refs['' + notif.meta.uid]; + + if (el) { + var ref = getComputedStyle(el); + var width = ref.width; + var height = ref.height; + + el.style.left = (el.offsetLeft) + "px"; + el.style.width = width; + el.style.height = height; + } + + notificationsList[notif.position].splice(index, 1); + + vm.$forceUpdate(); + + if (typeof notif.onDismiss === 'function') { + notif.onDismiss(); + } + } + } + + function hasContent (str) { + return str !== void 0 && + str !== null && + emptyRE.test(str) !== true + } + + function logError (error, config) { + console.error(("Notify: " + error), config); + return false + } + + var Notifications = { + name: 'QNotifications', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate: function beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}); + }, + + render: function render (h) { + return h('div', { staticClass: 'q-notifications' }, positionList.map(function (pos) { + return h('transition-group', { + key: pos, + staticClass: positionClass[pos], + tag: 'div', + props: { + name: ("q-notification--" + pos), + mode: 'out-in' + } + }, notificationsList[pos].map(function (notif) { + var meta = notif.meta; + var mainChild = []; + + if (meta.hasMedia === true) { + if (notif.spinner !== false) { + mainChild.push( + h(notif.spinner, { + staticClass: 'q-notification__spinner q-notification__spinner--' + meta.leftClass, + props: { color: notif.spinnerColor, size: notif.spinnerSize } + }) + ); + } + else if (notif.icon) { + mainChild.push( + h(QIcon, { + staticClass: 'q-notification__icon q-notification__icon--' + meta.leftClass, + attrs: { role: 'img' }, + props: { name: notif.icon, color: notif.iconColor, size: notif.iconSize } + }) + ); + } + else if (notif.avatar) { + mainChild.push( + h(QAvatar, { staticClass: 'q-notification__avatar q-notification__avatar--' + meta.leftClass }, [ + h('img', { attrs: { src: notif.avatar, 'aria-hidden': 'true' } }) + ]) + ); + } + } + + if (meta.hasText === true) { + var msgChild; + var msgData = { staticClass: 'q-notification__message col' }; + + if (notif.html === true) { + msgData.domProps = { + innerHTML: notif.caption + ? ("
" + (notif.message) + "
" + (notif.caption) + "
") + : notif.message + }; + } + else { + var msgNode = [ notif.message ]; + msgChild = notif.caption + ? [ + h('div', msgNode), + h('div', { staticClass: 'q-notification__caption' }, [notif.caption]) + ] + : msgNode; + } + + mainChild.push( + h('div', msgData, msgChild) + ); + } + + var child = [ + h('div', { staticClass: meta.contentClass }, mainChild) + ]; + + notif.progress === true && child.push( + h('div', { + key: ((meta.uid) + "|p|" + (meta.badge)), + staticClass: meta.progressClass, + style: meta.progressStyle + }) + ); + + notif.actions !== void 0 && child.push( + h('div', { + staticClass: meta.actionsClass + }, notif.actions.map(function (action) { return h(QBtn, Object.assign({}, action)); })) + ); + + meta.badge > 1 && child.push( + h('div', { + key: ((meta.uid) + "|" + (meta.badge)), + staticClass: meta.badgeClass, + style: notif.badgeStyle + }, [ meta.badge ]) + ); + + return h('div', { + ref: '' + meta.uid, + key: meta.uid, + staticClass: meta.staticClass, + attrs: meta.attrs + }, [ + h('div', { staticClass: meta.wrapperClass }, child) + ]) + })) + })) + }, + + mounted: function mounted () { + var this$1$1 = this; + + if (this.$q.fullscreen !== void 0 && this.$q.fullscreen.isCapable === true) { + var append = function () { + var newParent = getBodyFullscreenElement(this$1$1.$q.fullscreen.activeEl); + + if (this$1$1.$el.parentElement !== newParent) { + newParent.appendChild(this$1$1.$el); + } + }; + + this.unwatchFullscreen = this.$watch('$q.fullscreen.activeEl', debounce(append, 50)); + + if (this.$q.fullscreen.isActive === true) { + append(); + } + } + }, + + beforeDestroy: function beforeDestroy () { + this.unwatchFullscreen !== void 0 && this.unwatchFullscreen(); + } + }; + + var Notify = { + setDefaults: function setDefaults (opts) { + if (isSSR !== true && isObject(opts) === true) { + Object.assign(defaults, opts); + } + }, + + registerType: function registerType (typeName, typeOpts) { + if (isSSR !== true && isObject(typeOpts) === true) { + notifTypes[typeName] = typeOpts; + } + }, + + install: function install (ref) { + var $q = ref.$q; + + $q.notify = this.create = isSSR === true + ? noop + : function (opts) { return addNotification(opts, vm); }; + + $q.notify.setDefaults = this.setDefaults; + $q.notify.registerType = this.registerType; + + if ($q.config.notify !== void 0) { + this.setDefaults($q.config.notify); + } + + if (isSSR !== true) { + positionList.forEach(function (pos) { + notificationsList[pos] = []; + + var + vert = ['left', 'center', 'right'].includes(pos) === true ? 'center' : (pos.indexOf('top') > -1 ? 'top' : 'bottom'), + align = pos.indexOf('left') > -1 ? 'start' : (pos.indexOf('right') > -1 ? 'end' : 'center'), + classes = ['left', 'right'].includes(pos) ? ("items-" + (pos === 'left' ? 'start' : 'end') + " justify-center") : (pos === 'center' ? 'flex-center' : ("items-" + align)); + + positionClass[pos] = "q-notifications__list q-notifications__list--" + vert + " fixed column no-wrap " + classes; + }); + + var node = document.createElement('div'); + document.body.appendChild(node); + + vm = new Vue__default["default"](Notifications); + vm.$mount(node); + } + } + }; + + function encode (value) { + if (isDate(value) === true) { + return '__q_date|' + value.toUTCString() + } + if (isRegexp(value) === true) { + return '__q_expr|' + value.source + } + if (typeof value === 'number') { + return '__q_numb|' + value + } + if (typeof value === 'boolean') { + return '__q_bool|' + (value ? '1' : '0') + } + if (typeof value === 'string') { + return '__q_strn|' + value + } + if (typeof value === 'function') { + return '__q_strn|' + value.toString() + } + if (value === Object(value)) { + return '__q_objt|' + JSON.stringify(value) + } + + // hmm, we don't know what to do with it, + // so just return it as is + return value + } + + function decode (value, reviverFn) { + var length = value.length; + + if (length < 9) { + // then it wasn't encoded by us + return value + } + + var type = value.substr(0, 8); + var source = value.substring(9); + + switch (type) { + case '__q_date': + return new Date(source) + + case '__q_expr': + return new RegExp(source) + + case '__q_numb': + return Number(source) + + case '__q_bool': + return Boolean(source === '1') + + case '__q_strn': + return '' + source + + case '__q_objt': + return JSON.parse(source, reviverFn) + + default: + // hmm, we reached here, we don't know the type, + // then it means it wasn't encoded by us, so just + // return whatever value it is + return value + } + } + + function getEmptyStorage () { + var getVal = function () { return null; }; + + return { + has: function () { return false; }, + getLength: function () { return 0; }, + getItem: getVal, + getIndex: getVal, + getKey: getVal, + getAll: function () {}, + getAllKeys: function () { return []; }, + set: noop, + remove: noop, + clear: noop, + isEmpty: function () { return true; } + } + } + + function getStorage (type) { + var + webStorage = window[type + 'Storage'], + get = function (key, reviverFn) { + var item = webStorage.getItem(key); + return item + ? decode(item, reviverFn) + : null + }; + + return { + has: function (key, reviverFn) { return webStorage.getItem(key, reviverFn) !== null; }, + getLength: function () { return webStorage.length; }, + getItem: get, + getIndex: function (index, reviverFn) { + return index < webStorage.length + ? get(webStorage.key(index), reviverFn) + : null + }, + getKey: function (index) { + return index < webStorage.length + ? webStorage.key(index) + : null + }, + getAll: function (reviverFn) { + var key; + var result = {}, len = webStorage.length; + + for (var i = 0; i < len; i++) { + key = webStorage.key(i); + result[key] = get(key, reviverFn); + } + + return result + }, + getAllKeys: function () { + var result = [], len = webStorage.length; + + for (var i = 0; i < len; i++) { + result.push(webStorage.key(i)); + } + + return result + }, + set: function (key, value) { webStorage.setItem(key, encode(value)); }, + remove: function (key) { webStorage.removeItem(key); }, + clear: function () { webStorage.clear(); }, + isEmpty: function () { return webStorage.length === 0; } + } + } + + var LocalStorage = { + install: function install (ref) { + var $q = ref.$q; + + var storage = isSSR === true || client.has.webStorage === false + ? getEmptyStorage() + : getStorage('local'); + + $q.localStorage = storage; + Object.assign(this, storage); + } + }; + + var SessionStorage = { + install: function install (ref) { + var $q = ref.$q; + + var storage = isSSR === true || client.has.webStorage === false + ? getEmptyStorage() + : getStorage('session'); + + $q.sessionStorage = storage; + Object.assign(this, storage); + } + }; + + var plugins = /*#__PURE__*/Object.freeze({ + __proto__: null, + AddressbarColor: AddressbarColor, + AppFullscreen: AppFullscreen, + AppVisibility: AppVisibility, + BottomSheet: BottomSheet, + Cookies: Cookies, + Dark: Dark, + Dialog: Dialog, + Interaction: Interaction, + LoadingBar: LoadingBar, + Loading: Loading, + Meta: Meta, + Notify: Notify, + Platform: Platform, + Screen: Screen, + LocalStorage: LocalStorage, + SessionStorage: SessionStorage + }); + + function fallback (text) { + var area = document.createElement('textarea'); + area.value = text; + area.contentEditable = true; + area.style.position = 'fixed'; // avoid scrolling to bottom + + document.body.appendChild(area); + area.focus(); + area.select(); + + var res = document.execCommand('copy'); + + area.remove(); + return res + } + + function copyToClipboard (text) { + return navigator.clipboard !== void 0 + ? navigator.clipboard.writeText(text) + : new Promise(function (resolve, reject) { + var res = fallback(text); + if (res) { + resolve(true); + } + else { + reject(res); + } + }) + } + + function debouncedRef (vm, prop, wait) { + if ( wait === void 0 ) wait = 250; + + var debounced = { + get value () { + var value = vm[prop]; + + if (value !== debounced.propValue) { + debounced.propValue = value; + debounced.internalValue = value; + + debounced.timer !== void 0 && clearTimeout(debounced.timer); + debounced.timer = void 0; + } + + return debounced.internalValue + }, + + set value (value) { + if (debounced.internalValue === value) { + return + } + + debounced.internalValue = value; + + debounced.timer !== void 0 && clearTimeout(debounced.timer); + debounced.timer = setTimeout(function () { + vm[prop] = value; + + debounced.timer = void 0; + }, wait); + }, + + destroy: function destroy () { + if (debounced.timer !== void 0) { + clearTimeout(debounced.timer); + debounced.timer = void 0; + + vm[prop] = debounced.internalValue; + } + } + }; + + vm.$once('hook:beforeDestroy', debounced.destroy); + + debounced.propValue = NaN; + debounced.internalValue = NaN; + + return debounced + } + + function clean (link) { + // allow time for iOS + setTimeout(function () { + window.URL.revokeObjectURL(link.href); + }, 10000); + link.remove(); + } + + function exportFile (fileName, rawData, mimeType) { + var blob = new Blob([ rawData ], { type: mimeType || 'text/plain' }); + + // IE11 has its own stuff... + if (window.navigator.msSaveOrOpenBlob) { + return window.navigator.msSaveOrOpenBlob(blob, fileName) + } + + var link = document.createElement('a'); + + link.download = fileName; + link.href = window.URL.createObjectURL(blob); + + link.classList.add('hidden'); + link.style.position = 'fixed'; // avoid scrolling to bottom + document.body.appendChild(link); + + try { + link.click(); + clean(link); + return true + } + catch (err) { + clean(link); + return err + } + } + + function parseFeatures (winFeatures) { + var cfg = Object.assign({ noopener: true }, winFeatures); + var feat = []; + Object.keys(cfg).forEach(function (key) { + if (cfg[key] === true) { + feat.push(key); + } + }); + return feat.join(',') + } + + function openWindow (url, reject, windowFeatures) { + var open = window.open; + + if (Platform.is.cordova === true) { + if (cordova !== void 0 && cordova.InAppBrowser !== void 0 && cordova.InAppBrowser.open !== void 0) { + open = cordova.InAppBrowser.open; + } + else if (navigator !== void 0 && navigator.app !== void 0) { + return navigator.app.loadUrl(url, { + openExternal: true + }) + } + } + else if (Vue__default["default"].prototype.$q.electron !== void 0) { + return Vue__default["default"].prototype.$q.electron.shell.openExternal(url) + } + + var win = open(url, '_blank', parseFeatures(windowFeatures)); + + if (win) { + Platform.is.desktop && win.focus(); + return win + } + else { + reject && reject(); + } + } + + function openUrl (url, reject, windowFeatures) { + if ( + Platform.is.ios === true && + window.SafariViewController !== void 0 + ) { + window.SafariViewController.isAvailable(function (available) { + if (available) { + window.SafariViewController.show( + { url: url }, + noop, + reject + ); + } + else { + openWindow(url, reject, windowFeatures); + } + }); + return + } + + return openWindow(url, reject, windowFeatures) + } + + function parsePromises (sequentialPromises) { + var isList = Array.isArray(sequentialPromises); + + if (isList === true) { + var totalJobs = sequentialPromises.length; + return { + isList: isList, + totalJobs: totalJobs, + resultAggregator: Array(totalJobs).fill(null) + } + } + + var resultKeys = Object.keys(sequentialPromises); + var resultAggregator = {}; + resultKeys.forEach(function (keyName) { resultAggregator[ keyName ] = null; }); + + return { + isList: isList, + totalJobs: resultKeys.length, + resultAggregator: resultAggregator, + resultKeys: resultKeys + } + } + + /** + * Run a list of Promises sequentially, optionally on multiple threads. + * + * @param {*} sequentialPromises - Array of Functions or Object with Functions as values + * Array of Function form: [ (resultAggregator: Array) => Promise, ... ] + * Object form: { [key: string]: (resultAggregator: object) => Promise, ... } + * @param {*} opts - Optional options Object + * Object form: { threadsNumber?: number, abortOnFail?: boolean } + * Default: { threadsNumber: 1, abortOnFail: true } + * When configuring threadsNumber AND using http requests, be + * aware of the maximum threads that the hosting browser + * supports (usually 5); any number of threads above that + * won't add any real benefits + * @returns Promise | Object> + * With opts.abortOnFail set to true (which is default): + * When sequentialPromises param is Array: + * The Promise resolves with an Array of Objects of the following form: + * [ { key: number, status: 'fulfilled', value: any }, ... ] + * The Promise rejects with an Object of the following form: + * { key: number, status: 'rejected', reason: Error, resultAggregator: array } + * When sequentialPromises param is Object: + * The Promise resolves with an Object of the following form: + * { [key: string]: { key: string, status: 'fulfilled', value: any }, ... } + * The Promise rejects with an Object of the following form: + * { key: string, status: 'rejected', reason: Error, resultAggregator: object } + * With opts.abortOnFail set to false: + * The Promise is never rejected (no catch() needed) + * The Promise resolves with: + * An Array of Objects (when sequentialPromises param is also an Array) of the following form: + * [ { key: number, status: 'fulfilled', value: any } | { status: 'rejected', reason: Error }, ... ] + * An Object (when sequentialPromises param is also an Object) of the following form: + * { [key: string]: { key: string, status: 'fulfilled', value: any } | { key: string, status: 'rejected', reason: Error }, ... } + */ + function runSequentialPromises ( + sequentialPromises, + ref + ) { + if ( ref === void 0 ) ref = {}; + var threadsNumber = ref.threadsNumber; if ( threadsNumber === void 0 ) threadsNumber = 1; + var abortOnFail = ref.abortOnFail; if ( abortOnFail === void 0 ) abortOnFail = true; + + var jobIndex = -1, hasAborted = false; + + var ref$1 = parsePromises(sequentialPromises); + var isList = ref$1.isList; + var totalJobs = ref$1.totalJobs; + var resultAggregator = ref$1.resultAggregator; + var resultKeys = ref$1.resultKeys; + + var getPromiseThread = function () { return new Promise(function (resolve, reject) { + function runNextPromise () { + var currentJobIndex = ++jobIndex; + + if (hasAborted === true || currentJobIndex >= totalJobs) { + resolve(); + return + } + + var key = isList === true ? currentJobIndex : resultKeys[ currentJobIndex ]; + + sequentialPromises[ key ](resultAggregator) + .then(function (value) { + if (hasAborted === true) { + resolve(); + return // early exit + } + + resultAggregator[ key ] = { key: key, status: 'fulfilled', value: value }; + + // timeout so it doesn't interfere with the .catch() below + setTimeout(runNextPromise); + }) + .catch(function (reason) { + if (hasAborted === true) { + resolve(); + return // early exit + } + + var result = { key: key, status: 'rejected', reason: reason }; + resultAggregator[ key ] = result; + + if (abortOnFail === true) { + hasAborted = true; + reject(Object.assign({}, result, {resultAggregator: resultAggregator})); + return // early exit + } + + // timeout so no interference + setTimeout(runNextPromise); + }); + } + + runNextPromise(); + }); }; + + var threads = Array(threadsNumber).fill(getPromiseThread()); + return Promise.all(threads).then(function () { return resultAggregator; }) + } + + var utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + clone: cloneDeep, + colors: colors, + copyToClipboard: copyToClipboard, + date: date, + debounce: debounce, + debouncedRef: debouncedRef, + dom: dom, + event: event, + noop: noop, + exportFile: exportFile, + extend: extend, + format: format, + frameDebounce: frameDebounce, + is: is, + morph: morph, + openURL: openUrl, + patterns: patterns, + runSequentialPromises: runSequentialPromises, + scroll: scroll, + throttle: throttle, + uid: uid$3 + }); + + Vue__default["default"].use({ install: install }, { + components: components, + directives: directives, + plugins: plugins, + config: window.quasarConfig || {} + }); + + var index_umd = Object.assign({}, {version: version, + lang: lang, + iconSet: iconSet, + components: components, + directives: directives, + plugins: plugins, + utils: utils}, + components, + directives, + plugins, + utils); + + return index_umd; + +})); diff --git a/dist/quasar.umd.min.js b/dist/quasar.umd.min.js new file mode 100644 index 00000000000..56f7604d3b4 --- /dev/null +++ b/dist/quasar.umd.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("vue")):"function"==typeof define&&define.amd?define(["vue"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).Quasar=e(t.Vue)}(this,function(t){"use strict";var e,i=function(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}(t),n="undefined"==typeof window,s=!1,o=n;var r=!1===n&&("ontouchstart"in window||window.navigator.maxTouchPoints>0);function a(t){var i=t.toLowerCase(),a=function(t,e){var i=/(edge|edga|edgios)\/([\w.]+)/.exec(t)||/(opr)[\/]([\w.]+)/.exec(t)||/(vivaldi)[\/]([\w.]+)/.exec(t)||/(chrome|crios)[\/]([\w.]+)/.exec(t)||/(iemobile)[\/]([\w.]+)/.exec(t)||/(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(t)||/(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(t)||/(firefox|fxios)[\/]([\w.]+)/.exec(t)||/(webkit)[\/]([\w.]+)/.exec(t)||/(opera)(?:.*version|)[\/]([\w.]+)/.exec(t)||/(msie) ([\w.]+)/.exec(t)||t.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(t)||t.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(t)||[];return{browser:i[5]||i[3]||i[1]||"",version:i[2]||i[4]||"0",versionNumber:i[4]||i[2]||"0",platform:e[0]||""}}(i,function(t){return/(ipad)/.exec(t)||/(ipod)/.exec(t)||/(windows phone)/.exec(t)||/(iphone)/.exec(t)||/(kindle)/.exec(t)||/(silk)/.exec(t)||/(android)/.exec(t)||/(win)/.exec(t)||/(mac)/.exec(t)||/(linux)/.exec(t)||/(cros)/.exec(t)||/(playbook)/.exec(t)||/(bb)/.exec(t)||/(blackberry)/.exec(t)||[]}(i)),l={};a.browser&&(l[a.browser]=!0,l.version=a.version,l.versionNumber=parseInt(a.versionNumber,10)),a.platform&&(l[a.platform]=!0);var c=l.android||l.ios||l.bb||l.blackberry||l.ipad||l.iphone||l.ipod||l.kindle||l.playbook||l.silk||l["windows phone"];return!0===c||i.indexOf("mobile")>-1?(l.mobile=!0,l.edga||l.edgios?(l.edge=!0,a.browser="edge"):l.crios?(l.chrome=!0,a.browser="chrome"):l.fxios&&(l.firefox=!0,a.browser="firefox")):l.desktop=!0,(l.ipod||l.ipad||l.iphone)&&(l.ios=!0),l["windows phone"]&&(l.winphone=!0,delete l["windows phone"]),(l.chrome||l.opr||l.safari||l.vivaldi||!0===l.mobile&&!0!==l.ios&&!0!==c)&&(l.webkit=!0),(l.rv||l.iemobile)&&(a.browser="ie",l.ie=!0),(l.safari&&l.blackberry||l.bb)&&(a.browser="blackberry",l.blackberry=!0),l.safari&&l.playbook&&(a.browser="playbook",l.playbook=!0),l.opr&&(a.browser="opera",l.opera=!0),l.safari&&l.android&&(a.browser="android",l.android=!0),l.safari&&l.kindle&&(a.browser="kindle",l.kindle=!0),l.safari&&l.silk&&(a.browser="silk",l.silk=!0),l.vivaldi&&(a.browser="vivaldi",l.vivaldi=!0),l.name=a.browser,l.platform=a.platform,!1===n&&(i.indexOf("electron")>-1?l.electron=!0:document.location.href.indexOf("-extension://")>-1?l.bex=!0:(void 0!==window.Capacitor?(l.capacitor=!0,l.nativeMobile=!0,l.nativeMobileWrapper="capacitor"):void 0!==window._cordovaNative||void 0!==window.cordova?(l.cordova=!0,l.nativeMobile=!0,l.nativeMobileWrapper="cordova"):!0===window.matchMedia("(display-mode: standalone)").matches&&(l.standalone=!0),!0===r&&!0===l.mac&&(!0===l.desktop&&!0===l.safari||!0===l.nativeMobile&&!0!==l.android&&!0!==l.ios&&!0!==l.ipad)&&function(t){var i;e={is:Object.assign({},t)},delete t.mac,delete t.desktop;var n=Math.min(window.innerHeight,window.innerWidth)>414?"ipad":"iphone";Object.assign(t,((i={mobile:!0,ios:!0,platform:n})[n]=!0,i))}(l)),!0===(s=void 0===l.nativeMobile&&void 0===l.electron&&null!==document.querySelector("[data-server-rendered]"))&&(o=!0)),l}var l=!0!==n?navigator.userAgent||navigator.vendor||window.opera:"",c={has:{touch:!1,webStorage:!1},within:{iframe:!1}},u=!1===n?{userAgent:l,is:a(l),has:{touch:r,webStorage:function(){try{if(window.localStorage)return!0}catch(t){}return!1}()},within:{iframe:window.self!==window.top}}:c,h={install:function(t,r){var a=this;!0===n?r.server.push(function(t,e){t.platform=a.parseSSR(e.ssr)}):!0===s?(Object.assign(this,u,e,c),r.takeover.push(function(t){o=s=!1,Object.assign(t.platform,u),e=void 0}),i.default.util.defineReactive(t,"platform",this)):(Object.assign(this,u),t.platform=this)}};!0===n?h.parseSSR=function(t){var e=t.req.headers["user-agent"]||t.req.headers["User-Agent"]||"";return Object.assign({},u,{userAgent:e,is:a(e)})}:!0===u.is.ios&&window.navigator.vendor.toLowerCase().indexOf("apple");var d={hasPassive:!1,passiveCapture:!0,notPassiveCapture:!0};try{var f=Object.defineProperty({},"passive",{get:function(){Object.assign(d,{hasPassive:!0,passive:{passive:!0},notPassive:{passive:!1},passiveCapture:{passive:!0,capture:!0},notPassiveCapture:{passive:!1,capture:!0}})}});window.addEventListener("qtest",null,f),window.removeEventListener("qtest",null,f)}catch(t){}function p(){}function m(t){return 0===t.button}function v(t){return t.touches&&t.touches[0]?t=t.touches[0]:t.changedTouches&&t.changedTouches[0]?t=t.changedTouches[0]:t.targetTouches&&t.targetTouches[0]&&(t=t.targetTouches[0]),{top:t.clientY,left:t.clientX}}function g(t){if(t.path)return t.path;if(t.composedPath)return t.composedPath();for(var e=[],i=t.target;i;){if(e.push(i),"HTML"===i.tagName)return e.push(document),e.push(window),e;i=i.parentElement}}function _(t,e){for(var i=t.target;null!==e&&void 0!==e;){if(e===i)return!0;e=e.parentNode}return!1}var b=40,y=800;function S(t){t.stopPropagation()}function x(t){!1!==t.cancelable&&t.preventDefault()}function w(t){!1!==t.cancelable&&t.preventDefault(),t.stopPropagation()}function C(t,e){if(void 0!==t&&(!0!==e||!0!==t.__dragPrevented)){var i=!0===e?function(t){t.__dragPrevented=!0,t.addEventListener("dragstart",x,d.notPassiveCapture)}:function(t){delete t.__dragPrevented,t.removeEventListener("dragstart",x,d.notPassiveCapture)};t.querySelectorAll("a, img").forEach(i)}}function k(t,e){void 0===e&&(e={});var i=e.bubbles;void 0===i&&(i=!1);var n=e.cancelable;void 0===n&&(n=!1);try{return new CustomEvent(t,{bubbles:i,cancelable:n})}catch(e){var s=document.createEvent("Event");return s.initEvent(t,i,n),s}}function q(t,e,i){var n="__q_"+e+"_evt";t[n]=void 0!==t[n]?t[n].concat(i):i,i.forEach(function(e){e[0].addEventListener(e[1],t[e[2]],d[e[3]])})}function T(t,e){var i="__q_"+e+"_evt";void 0!==t[i]&&(t[i].forEach(function(e){e[0].removeEventListener(e[1],t[e[2]],d[e[3]])}),t[i]=void 0)}var M={listenOpts:d,leftClick:m,middleClick:function(t){return 1===t.button},rightClick:function(t){return 2===t.button},position:v,getEventPath:g,eventOnAncestors:_,getMouseWheelDistance:function(t){var e,i=t.deltaX,n=t.deltaY;if((i||n)&&t.deltaMode){var s=1===t.deltaMode?b:y;i*=s,n*=s}return t.shiftKey&&!i&&(n=(e=[i,n])[0],i=e[1]),{x:i,y:n}},stop:S,prevent:x,stopAndPrevent:w,preventDraggable:C,create:k},$=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/,L=/(?:[\u3300-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\uFE30-\uFE4F]|[\uD840-\uD868\uD86A-\uD872][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD873[\uDC00-\uDEAF]|\uD87E[\uDC00-\uDE1F])/,E=/[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/,O=/[a-z0-9_ -]$/i,A=["isKeyboard","isComposing","isPointer","isMouse","isTouch","isDrag","isContext","isPending","event"];function B(){return A.reduce(function(t,e){return t[e]="event"===e&&null,t},{})}var P=B();P.isComposing=void 0;var z=[["touchstart",Object.assign({},P,{isTouch:!0,isPointer:!0,isPending:!0}),!0],["touchend",Object.assign({},P,{isTouch:!0,isPointer:!0,isPending:!1})],["touchcancel",Object.assign({},P,{isTouch:!0,isPointer:!0,isPending:!1})]],I=["mousestart","touchstart","dragstart"],R=z.slice(1),F=d.passiveCapture,D=d.notPassiveCapture,j=[];function V(){var t=document.documentElement,e=j.slice();j.length=0,e.forEach(function(e){t.removeEventListener("click",e,D)})}var N={install:function(t,e){var s=this;if(!0!==n){Object.assign(this,B());var o=this;A.forEach(function(t){i.default.util.defineReactive(o,t,o[t])}),i.default.util.defineReactive(t,"interaction",this);var r=function(t,e,i){var n=Object.keys(e).filter(function(t){return void 0!==e[t]}).map(function(t){var i=e[t];return"function"==typeof i?function(e){o[t]=i(e)}:function(){o[t]=i}}),s="function"==typeof i?i:!0===i?function(t){R.forEach(function(e){var i=r(e[0],e[1],function(){R.forEach(function(e){t.target.removeEventListener(e[0],i,F)})});t.target.addEventListener(P[0],i,F)})}:p,a=!0===I.includes(t)?V:p;return function(t){n.forEach(function(e){e(t)}),o.event=t,s(t),a()}},a=document.documentElement,l=!0===u.is.firefox?function(t){return!1===O.test(t)}:function(t){return!0===$.test(t)||!0===L.test(t)||!0===E.test(t)};[["keydown",Object.assign({},P,{isKeyboard:!0,isPending:!0})],["keypress",Object.assign({},P,{isKeyboard:!0,isPending:!0})],["keyup",Object.assign({},P,{isKeyboard:!0,isPending:!1})],!0===u.is.ios?["compositionstart",{isComposing:function(t){return t.target.qComposing=!0,!0}}]:["compositionupdate",{isComposing:function(t){return!0!==t.target.qComposing&&"string"==typeof t.data&&!0===l(t.data)&&(t.target.qComposing=!0),!0}}],["compositionend",{isComposing:function(t){return!0===t.target.qComposing&&(t.target.qComposing=!1),!1}}],["mousedown",Object.assign({},P,{isMouse:!0,isPointer:!0,isPending:!0})],["mouseup",Object.assign({},P,{isMouse:!0,isPointer:!0,isPending:!1})],["dragstart",{isKeyboard:!1,isDrag:!0,isPending:!0}],["dragend",{isKeyboard:!1,isDrag:!0,isPending:!1}],["dragcancel",{isKeyboard:!1,isDrag:!0,isPending:!1}],["drop",{isKeyboard:!1,isDrag:!0,isPending:!1}],["contextmenu",{isContext:!0,isPending:!1}]].forEach(function(t){a.addEventListener(t[0],r.apply(s,t),F)}),!0===u.has.touch&&z.forEach(function(t){a.addEventListener(t[0],r.apply(s,t),F)})}else e.server.push(function(t){t.interaction=B(),t.interaction.preventClick=p})},preventClick:function(t,e){var i=function(i){t===i.target&&(!0===e?w(i):x(i)),V()};document.documentElement.addEventListener("click",i,D),j.push(i)}};function H(t,e,i){var n;function s(){var s=this,o=arguments;clearTimeout(n),!0===i&&void 0===n&&t.apply(this,o),n=setTimeout(function(){n=void 0,!0!==i&&t.apply(s,o)},e)}return void 0===e&&(e=250),s.cancel=function(){clearTimeout(n)},s}var Q=["sm","md","lg","xl"],W=d.passive,U={width:0,height:0,name:"xs",sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1,setSizes:p,setDebounce:p,install:function(t,e,o){var r=this;if(!0!==n){var a,l=window.visualViewport,c=l||window,h=document.scrollingElement||document.documentElement,d=void 0===l||!0===u.is.mobile?function(){return[Math.max(window.innerWidth,h.clientWidth),Math.max(window.innerHeight,h.clientHeight)]}:function(){return[l.width*l.scale+window.innerWidth-h.clientWidth,l.height*l.scale+window.innerHeight-h.clientHeight]},f=void 0!==o.screen&&!0===o.screen.bodyClasses,p=function(t){var e=d(),i=e[0],n=e[1];if(n!==r.height&&(r.height=n),i!==r.width)r.width=i;else if(!0!==t)return;var s=r.sizes;r.gt.xs=i>=s.sm,r.gt.sm=i>=s.md,r.gt.md=i>=s.lg,r.gt.lg=i>=s.xl,r.lt.sm=i0?H(p,t):p,c.addEventListener("resize",a,W)},r.setDebounce(v),Object.keys(m).length>0?(r.setSizes(m),m=void 0):p(),!0===f&&"xs"===r.name&&document.body.classList.add("screen--xs")};!0===s?e.takeover.push(g):g(),i.default.util.defineReactive(t,"screen",this)}else t.screen=this}},Y={isActive:null,mode:!1,install:function(t,e,o){var r=this,a=o.dark;if(this.isActive="auto"===a?null:!0===a,!0===n)return e.server.push(function(t,e){t.dark={isActive:null,mode:!1,set:function(i){e.ssr.Q_BODY_CLASSES=e.ssr.Q_BODY_CLASSES.replace(" body--light","").replace(" body--dark-auto","").replace(" body--dark","")+" body--"+(!0===i?"dark":"auto"===i?"dark-auto":"light"),t.dark.isActive="auto"===i?null:!0===i,t.dark.mode=i},toggle:function(){t.dark.set(!1===t.dark.isActive)}},t.dark.set(a)}),void(this.set=p);var l=void 0!==a&&a;if(!0===s){var c=function(t){r.__fromSSR=t},u=this.set;this.set=c,c(l),e.takeover.push(function(){document.body.classList.remove("body--dark-auto"),r.set=u,r.set(r.__fromSSR)})}else this.set(l);i.default.util.defineReactive(this,"isActive",this.isActive),i.default.util.defineReactive(t,"dark",this)},set:function(t){var e=this;this.mode=t,"auto"===t?(void 0===this.__media&&(this.__media=window.matchMedia("(prefers-color-scheme: dark)"),this.__updateMedia=function(){e.set("auto")},this.__media.addListener(this.__updateMedia)),t=this.__media.matches):void 0!==this.__media&&(this.__media.removeListener(this.__updateMedia),this.__media=void 0),this.isActive=!0===t,document.body.classList.remove("body--"+(!0===t?"light":"dark")),document.body.classList.add("body--"+(!0===t?"dark":"light"))},toggle:function(){Y.set(!1===Y.isActive)},__media:void 0},K=function(){return!0};function G(t){return"string"==typeof t&&""!==t&&"/"!==t&&"#/"!==t}function X(t){return!0===t.startsWith("#")&&(t=t.substr(1)),!1===t.startsWith("/")&&(t="/"+t),!0===t.endsWith("/")&&(t=t.substr(0,t.length-1)),"#"+t}var Z={__history:[],add:p,remove:p,install:function(t){var e=this;if(!0!==n){var i=u.is,s=i.cordova,o=i.capacitor;if(!0===s||!0===o){var r=t[!0===s?"cordova":"capacitor"];if((void 0===r||!1!==r.backButton)&&(!0!==o||void 0!==window.Capacitor&&void 0!==window.Capacitor.Plugins.App)){this.add=function(t){void 0===t.condition&&(t.condition=K),e.__history.push(t)},this.remove=function(t){var i=e.__history.indexOf(t);i>=0&&e.__history.splice(i,1)};var a=function(t){if(!1===t.backButtonExit)return function(){return!1};if("*"===t.backButtonExit)return K;var e=["#/"];return!0===Array.isArray(t.backButtonExit)&&e.push.apply(e,t.backButtonExit.filter(G).map(X)),function(){return e.includes(window.location.hash)}}(Object.assign({backButtonExit:!0},r)),l=function(){if(e.__history.length){var t=e.__history[e.__history.length-1];!0===t.condition()&&(e.__history.pop(),t.handler())}else!0===a()?navigator.app.exitApp():window.history.back()};!0===s?document.addEventListener("deviceready",function(){document.addEventListener("backbutton",l,!1)}):window.Capacitor.Plugins.App.addListener("backButton",l)}}}}},J={isoName:"en-us",nativeName:"English (US)",label:{clear:"Clear",ok:"OK",cancel:"Cancel",close:"Close",set:"Set",select:"Select",reset:"Reset",remove:"Remove",update:"Update",create:"Create",search:"Search",filter:"Filter",refresh:"Refresh",expand:function(t){return t?'Expand "'+t+'"':"Expand"},collapse:function(t){return t?'Collapse "'+t+'"':"Collapse"}},date:{days:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),daysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"days"},table:{noData:"No data available",noResults:"No matching records found",loading:"Loading...",selectedRecords:function(t){return 1===t?"1 record selected.":(0===t?"No":t)+" records selected."},recordsPerPage:"Records per page:",allRows:"All",pagination:function(t,e,i){return t+"-"+e+" of "+i},columns:"Columns"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}};function tt(){if(!0!==n){var t=navigator.language||navigator.languages[0]||navigator.browserLanguage||navigator.userLanguage||navigator.systemLanguage;return t?t.toLowerCase():void 0}}var et={getLocale:tt,install:function(t,e,o){var r=this;this.set=function(e,i){void 0===e&&(e=J);var o=Object.assign({},e,{rtl:!0===e.rtl,getLocale:tt});if(!0===n){if(void 0===i)return void console.error("SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)");var a=!0===o.rtl?"rtl":"ltr",l="lang="+o.isoName+" dir="+a;o.set=i.$q.lang.set,i.Q_HTML_ATTRS=void 0!==i.Q_PREV_LANG?i.Q_HTML_ATTRS.replace(i.Q_PREV_LANG,l):l,i.Q_PREV_LANG=l,i.$q.lang=o}else{if(!1===s){var c=document.documentElement;c.setAttribute("dir",!0===o.rtl?"rtl":"ltr"),c.setAttribute("lang",o.isoName)}o.set=r.set,t.lang=r.props=o,r.isoName=o.isoName,r.nativeName=o.nativeName}};var a=o||J;!0===n?(e.server.push(function(t,e){t.lang={},t.lang.set=function(t){r.set(t,e.ssr)},t.lang.set(a)}),this.isoName!==a.isoName&&(this.isoName=a.isoName,this.nativeName=a.nativeName,this.props=a)):(i.default.util.defineReactive(t,"lang",{}),this.set(a))}},it=/^rgb(a)?\((\d{1,3}),(\d{1,3}),(\d{1,3}),?([01]?\.?\d*?)?\)$/;function nt(t){var e=t.r,i=t.g,n=t.b,s=t.a,o=void 0!==s;if(e=Math.round(e),i=Math.round(i),n=Math.round(n),e>255||i>255||n>255||o&&s>100)throw new TypeError("Expected 3 numbers below 256 (and optionally one below 100)");return s=o?(256|Math.round(255*s/100)).toString(16).slice(1):"","#"+(n|i<<8|e<<16|1<<24).toString(16).slice(1)+s}function st(t){var e=t.r,i=t.g,n=t.b,s=t.a;return"rgb"+(void 0!==s?"a":"")+"("+e+","+i+","+n+(void 0!==s?","+s/100:"")+")"}function ot(t){if("string"!=typeof t)throw new TypeError("Expected a string");3===(t=t.replace(/^#/,"")).length?t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:4===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);var e=parseInt(t,16);return t.length>6?{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:Math.round((255&e)/2.55)}:{r:e>>16,g:e>>8&255,b:255&e}}function rt(t){var e,i,n,s=t.h,o=t.s,r=t.v,a=t.a;o/=100,r/=100,s/=360;var l=Math.floor(6*s),c=6*s-l,u=r*(1-o),h=r*(1-c*o),d=r*(1-(1-c)*o);switch(l%6){case 0:e=r,i=d,n=u;break;case 1:e=h,i=r,n=u;break;case 2:e=u,i=r,n=d;break;case 3:e=u,i=h,n=r;break;case 4:e=d,i=u,n=r;break;case 5:e=r,i=u,n=h}return{r:Math.round(255*e),g:Math.round(255*i),b:Math.round(255*n),a:a}}function at(t){var e,i=t.r,n=t.g,s=t.b,o=t.a,r=Math.max(i,n,s),a=Math.min(i,n,s),l=r-a,c=0===r?0:l/r,u=r/255;switch(r){case a:e=0;break;case i:e=n-s+l*(n1)throw new TypeError("Expected offset to be between -1 and 1");var i=lt(t),n=i.r,s=i.g,o=i.b,r=i.a,a=void 0!==r?r/100:0;return nt({r:n,g:s,b:o,a:Math.round(100*Math.min(1,Math.max(0,a+e)))})},setBrand:ut,getBrand:ht,getPaletteColor:function(t){if("string"!=typeof t)throw new TypeError("Expected a string as color");var e=document.createElement("div");e.className="text-"+t+" invisible fixed no-pointer-events",document.body.appendChild(e);var i=getComputedStyle(e).getPropertyValue("color");return e.remove(),nt(lt(i))}};function ft(t,e){var i=t.is,n=t.has,s=t.within,o=[!0===i.desktop?"desktop":"mobile",(!1===n.touch?"no-":"")+"touch"];if(!0===i.mobile){var r=function(t){return!0===t.ios?"ios":!0===t.android?"android":void 0}(i);void 0!==r&&o.push("platform-"+r)}if(!0===i.nativeMobile){var a=i.nativeMobileWrapper;o.push(a),o.push("native-mobile"),!0!==i.ios||void 0!==e[a]&&!1===e[a].iosStatusBarPadding||o.push("q-ios-padding")}else!0===i.electron?o.push("electron"):!0===i.bex&&o.push("bex");return!0===s.iframe&&o.push("within-iframe"),o}var pt={install:function(t,i){if(!0!==n){if(!0===s)r=document.body.className,a=r,void 0!==e&&(a=a.replace("desktop","platform-ios mobile")),!0===u.has.touch&&(a=a.replace("no-touch","touch")),!0===u.within.iframe&&(a+=" within-iframe"),r!==a&&(document.body.className=a);else{var o=ft(u,i);!0===u.is.ie&&11===u.is.versionNumber?o.forEach(function(t){return document.body.classList.add(t)}):document.body.classList.add.apply(document.body.classList,o)}var r,a;void 0!==i.brand&&function(t){for(var e in t)ut(e,t[e])}(i.brand)}else t.server.push(function(t,e){var n=ft(t.platform,i),s=e.ssr.setBodyClasses;void 0!==i.screen&&!0===i.screen.bodyClass&&n.push("screen--xs"),"function"==typeof s?s(n):e.ssr.Q_BODY_CLASSES=n.join(" ")})}},mt={name:"material-icons",type:{positive:"check_circle",negative:"warning",info:"info",warning:"priority_high"},arrow:{up:"arrow_upward",right:"arrow_forward",down:"arrow_downward",left:"arrow_back",dropdown:"arrow_drop_down"},chevron:{left:"chevron_left",right:"chevron_right"},colorPicker:{spectrum:"gradient",tune:"tune",palette:"style"},pullToRefresh:{icon:"refresh"},carousel:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down",navigationIcon:"lens"},chip:{remove:"cancel",selected:"check"},datetime:{arrowLeft:"chevron_left",arrowRight:"chevron_right",now:"access_time",today:"today"},editor:{bold:"format_bold",italic:"format_italic",strikethrough:"strikethrough_s",underline:"format_underlined",unorderedList:"format_list_bulleted",orderedList:"format_list_numbered",subscript:"vertical_align_bottom",superscript:"vertical_align_top",hyperlink:"link",toggleFullscreen:"fullscreen",quote:"format_quote",left:"format_align_left",center:"format_align_center",right:"format_align_right",justify:"format_align_justify",print:"print",outdent:"format_indent_decrease",indent:"format_indent_increase",removeFormat:"format_clear",formatting:"text_format",fontSize:"format_size",align:"format_align_left",hr:"remove",undo:"undo",redo:"redo",heading:"format_size",code:"code",size:"format_size",font:"font_download",viewSource:"code"},expansionItem:{icon:"keyboard_arrow_down",denseIcon:"arrow_drop_down"},fab:{icon:"add",activeIcon:"close"},field:{clear:"cancel",error:"error"},pagination:{first:"first_page",prev:"keyboard_arrow_left",next:"keyboard_arrow_right",last:"last_page"},rating:{icon:"grade"},stepper:{done:"check",active:"edit",error:"warning"},tabs:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down"},table:{arrowUp:"arrow_upward",warning:"warning",firstPage:"first_page",prevPage:"chevron_left",nextPage:"chevron_right",lastPage:"last_page"},tree:{icon:"play_arrow"},uploader:{done:"done",clear:"clear",add:"add_box",upload:"cloud_upload",removeQueue:"clear_all",removeUploaded:"done_all"}},vt={install:function(t,e,s){var o=this,r=s||mt;this.set=function(e,i){var s=Object.assign({},e);if(!0===n){if(void 0===i)return void console.error("SSR ERROR: second param required: Quasar.iconSet.set(iconSet, ssrContext)");s.set=i.$q.iconSet.set,i.$q.iconSet=s}else s.set=o.set,t.iconSet=s},!0===n?e.server.push(function(t,e){t.iconSet={},t.iconSet.set=function(t){o.set(t,e.ssr)},t.iconSet.set(r)}):(i.default.util.defineReactive(t,"iconMapFn",void 0),i.default.util.defineReactive(t,"iconSet",{}),this.set(r))}},gt=[h,U,Y,N],_t={server:[],takeover:[]},bt={version:"1.22.0-beta.3",config:{}};var yt=["B","KB","MB","GB","TB","PB"];function St(t){for(var e=0;parseInt(t,10)>=1024&&e=e?n:new Array(e-n.length+1).join(i)+n}var qt={humanStorageSize:St,capitalize:xt,between:wt,normalizeToInterval:Ct,pad:kt};function Tt(t,e,i){if(!0===n)return i;var s="__qcache_"+e;return void 0===t[s]?t[s]=i:t[s]}function Mt(t,e,i){if(!0===n)return i();var s="__qcache_"+e;return void 0===t[s]?t[s]=i():t[s]}function $t(t,e){var i;return{data:function(){var i,n={},s=this[t];for(var o in s)n[o]=s[o];return(i={})[e]=n,i},watch:(i={},i[t]=function(t,i){var n=this[e];if(void 0!==i)for(var s in i)void 0===t[s]&&this.$delete(n,s);for(var o in t)n[o]!==t[o]&&this.$set(n,o,t[o])},i)}}var Lt={"aria-hidden":"true"},Et={tabindex:0,type:"button","aria-hidden":!1,role:null},Ot=$t("$attrs","qAttrs"),At=n?null:XMLHttpRequest,Bt=n?null:At.prototype.open,Pt=["top","right","bottom","left"],zt=[],It=0;var Rt=i.default.extend({name:"QAjaxBar",props:{position:{type:String,default:"top",validator:function(t){return Pt.includes(t)}},size:{type:String,default:"2px"},color:String,reverse:Boolean,skipHijack:Boolean,hijackFilter:Function},data:function(){return{calls:0,progress:0,onScreen:!1,animate:!0}},computed:{classes:function(){return"q-loading-bar q-loading-bar--"+this.position+(void 0!==this.color?" bg-"+this.color:"")+(!0===this.animate?"":" no-transition")},style:function(){var t=this.onScreen,e=function(t){var e=t.p,i=t.pos,n=t.active,s=t.horiz,o=t.reverse,r=t.dir,a=1,l=1;return!0===s?(!0===o&&(a=-1),"bottom"===i&&(l=-1),{transform:"translate3d("+a*(e-100)+"%,"+(n?0:-200*l)+"%,0)"}):(!0===o&&(l=-1),"right"===i&&(a=-1),{transform:"translate3d("+(n?0:r*a*-200)+"%,"+l*(e-100)+"%,0)"})}({p:this.progress,pos:this.position,active:t,horiz:this.horizontal,reverse:!0===this.$q.lang.rtl&&["top","bottom"].includes(this.position)?!1===this.reverse:this.reverse,dir:!0===this.$q.lang.rtl?-1:1});return e[this.sizeProp]=this.size,e.opacity=t?1:0,e},horizontal:function(){return"top"===this.position||"bottom"===this.position},sizeProp:function(){return this.horizontal?"height":"width"},attrs:function(){return!0===this.onScreen?{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":this.progress}:Lt}},methods:{start:function(t){var e=this;void 0===t&&(t=300);var i=this.speed,n=this.speed=Math.max(0,t)||0;return this.calls++,this.calls>1?(0===i&&n>0?this.__work():i>0&&n<=0&&clearTimeout(this.timer),this.calls):(clearTimeout(this.timer),this.$emit("start"),this.progress=0,this.timer=setTimeout(function(){e.animate=!0,n>0&&e.__work()},!0===this.onScreen?500:1),!0!==this.onScreen&&(this.onScreen=!0,this.animate=!1),this.calls)},increment:function(t){return this.calls>0&&(this.progress=function(t,e){return"number"!=typeof e&&(e=t<25?3*Math.random()+3:t<65?3*Math.random():t<85?2*Math.random():t<99?.6:0),wt(t+e,0,100)}(this.progress,t)),this.calls},stop:function(){var t=this;if(this.calls=Math.max(0,this.calls-1),this.calls>0)return this.calls;clearTimeout(this.timer),this.$emit("stop");var e=function(){t.animate=!0,t.progress=100,t.timer=setTimeout(function(){t.onScreen=!1},1e3)};return 0===this.progress?this.timer=setTimeout(e,1):e(),this.calls},__work:function(){var t=this;this.progress<100&&(this.timer=setTimeout(function(){t.increment(),t.__work()},this.speed))}},mounted:function(){var t,e=this;!0!==this.skipHijack&&(this.hijacked=!0,t={start:this.start,stop:this.stop,getHijackFilter:function(){return e.hijackFilter||null}},It++,zt.push(t),It>1||(At.prototype.open=function(t,e){var i=[];this.addEventListener("loadstart",function(){zt.forEach(function(t){var n=t.getHijackFilter();null!==n&&!0!==n(e)||(t.start(),i.push(t.stop))})},{once:!0}),this.addEventListener("loadend",function(){i.forEach(function(t){t()})},{once:!0}),Bt.apply(this,arguments)}))},beforeDestroy:function(){var t;clearTimeout(this.timer),!0===this.hijacked&&(t=this.start,zt=zt.filter(function(e){return e.start!==t}),(It=Math.max(0,It-1))||(At.prototype.open=Bt))},render:function(t){return t("div",{class:this.classes,style:this.style,attrs:this.attrs})}}),Ft={xs:18,sm:24,md:32,lg:38,xl:46};function Dt(t){return{props:{size:String},computed:{sizeStyle:function(){if(void 0!==this.size)return{fontSize:this.size in t?t[this.size]+"px":this.size}}}}}var jt=Dt(Ft),Vt={props:{tag:{type:String,default:"div"}}},Nt=$t("$listeners","qListeners");function Ht(t,e,i){return void 0!==t.$scopedSlots[e]?t.$scopedSlots[e]():i}function Qt(t,e,i){return void 0!==t.$scopedSlots[e]?[].concat(t.$scopedSlots[e]()):i}function Wt(t,e,i){return void 0!==e.$scopedSlots[i]?t.concat(e.$scopedSlots[i]()):t}function Ut(t,e,i){if(void 0===e.$scopedSlots[i])return t;var n=e.$scopedSlots[i]();return void 0!==t?t.concat(n):n}var Yt=function(t){return t},Kt=function(t){return"ionicons "+t},Gt={"mdi-":function(t){return"mdi "+t},"icon-":Yt,"bt-":function(t){return"bt "+t},"eva-":function(t){return"eva "+t},"ion-md":Kt,"ion-ios":Kt,"ion-logo":Kt,"iconfont ":Yt,"ti-":function(t){return"themify-icon "+t},"bi-":function(t){return"bootstrap-icons "+t}},Xt={o_:"-outlined",r_:"-round",s_:"-sharp"},Zt={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},Jt=new RegExp("^("+Object.keys(Gt).join("|")+")"),te=new RegExp("^("+Object.keys(Xt).join("|")+")"),ee=new RegExp("^("+Object.keys(Zt).join("|")+")"),ie=/^[Mm]\s?[-+]?\.?\d/,ne=/^img:/,se=/^svguse:/,oe=/^ion-/,re=/^(fa-(solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /,ae=i.default.extend({name:"QIcon",mixins:[Nt,jt,Vt],props:{tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean},computed:{classes:function(){return"q-icon"+(!0===this.left?" on-left":"")+(!0===this.right?" on-right":"")+(void 0!==this.color?" text-"+this.color:"")},type:function(){var t,e=this,i=this.name;if("none"===i||!i)return{none:!0};if(void 0!==this.$q.iconMapFn){var n=this.$q.iconMapFn(i);if(void 0!==n){if(void 0===n.icon)return{cls:n.cls,content:void 0!==n.content?n.content:" "};if("none"===(i=n.icon)||!i)return{none:!0}}}if(!0===ie.test(i)){var s=i.split("|"),o=s[0],r=s[1];return void 0===r&&(r="0 0 24 24"),{svg:!0,viewBox:r,nodes:o.split("&&").map(function(t){var i=t.split("@@"),n=i[0],s=i[1],o=i[2];return e.$createElement("path",{attrs:{d:n,transform:o},style:s})})}}if(!0===ne.test(i))return{img:!0,src:i.substring(4)};if(!0===se.test(i)){var a=i.split("|"),l=a[0],c=a[1];return void 0===c&&(c="0 0 24 24"),{svguse:!0,src:l.substring(7),viewBox:c}}var u=" ",h=i.match(Jt);if(null!==h)t=Gt[h[1]](i);else if(!0===re.test(i))t=i;else if(!0===oe.test(i))t="ionicons ion-"+(!0===this.$q.platform.is.ios?"ios":"md")+i.substr(3);else if(!0===ee.test(i)){t="notranslate material-symbols";var d=i.match(ee);null!==d&&(i=i.substring(6),t+=Zt[d[1]]),u=i}else{t="notranslate material-icons";var f=i.match(te);null!==f&&(i=i.substring(2),t+=Xt[f[1]]),u=i}return{cls:t,content:u}}},render:function(t){var e={class:this.classes,style:this.sizeStyle,on:Object.assign({},this.qListeners),attrs:{"aria-hidden":"true",role:"presentation"}};return!0===this.type.none?t(this.tag,e,Ht(this,"default")):!0===this.type.img?t("span",e,Wt([t("img",{attrs:{src:this.type.src}})],this,"default")):!0===this.type.svg?t("span",e,Wt([t("svg",{attrs:{viewBox:this.type.viewBox||"0 0 24 24",focusable:"false"}},this.type.nodes)],this,"default")):!0===this.type.svguse?t("span",e,Wt([t("svg",{attrs:{viewBox:this.type.viewBox,focusable:"false"}},[t("use",{attrs:{"xlink:href":this.type.src}})])],this,"default")):(void 0!==this.type.cls&&(e.class+=" "+this.type.cls),t(this.tag,e,Wt([this.type.content],this,"default")))}}),le=i.default.extend({name:"QAvatar",mixins:[Nt,jt],props:{fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},computed:{classes:function(){var t;return(t={})["bg-"+this.color]=this.color,t["text-"+this.textColor+" q-chip--colored"]=this.textColor,t["q-avatar--square"]=this.square,t["rounded-borders"]=this.rounded,t},contentStyle:function(){if(this.fontSize)return{fontSize:this.fontSize}}},render:function(t){var e=void 0!==this.icon?[t(ae,{props:{name:this.icon}})]:void 0;return t("div",{staticClass:"q-avatar",style:this.sizeStyle,class:this.classes,on:Object.assign({},this.qListeners)},[t("div",{staticClass:"q-avatar__content row flex-center overflow-hidden",style:this.contentStyle},Ut(e,this,"default"))])}}),ce=i.default.extend({name:"QBadge",mixins:[Nt],props:{color:String,textColor:String,floating:Boolean,transparent:Boolean,multiLine:Boolean,outline:Boolean,rounded:Boolean,label:[Number,String],align:{type:String,validator:function(t){return["top","middle","bottom"].includes(t)}}},computed:{style:function(){if(void 0!==this.align)return{verticalAlign:this.align}},classes:function(){var t=!0===this.outline&&this.color||this.textColor;return"q-badge flex inline items-center no-wrap q-badge--"+(!0===this.multiLine?"multi":"single")+"-line"+(!0===this.outline?" q-badge--outline":void 0!==this.color?" bg-"+this.color:"")+(void 0!==t?" text-"+t:"")+(!0===this.floating?" q-badge--floating":"")+(!0===this.rounded?" q-badge--rounded":"")+(!0===this.transparent?" q-badge--transparent":"")},attrs:function(){return{role:"status","aria-label":this.label}}},render:function(t){return t("div",{style:this.style,class:this.classes,attrs:this.attrs,on:Object.assign({},this.qListeners)},void 0!==this.label?[this.label]:Ht(this,"default"))}}),ue={props:{dark:{type:Boolean,default:null}},computed:{darkSuffix:function(){return null===this.dark&&null===this.$q.dark.isActive?"dark-auto":!0===this.dark||null===this.dark&&!0===this.$q.dark.isActive?"dark":"light"}}},he={role:"alert"},de=i.default.extend({name:"QBanner",mixins:[Nt,ue],props:{inlineActions:Boolean,dense:Boolean,rounded:Boolean},render:function(t){var e,i=Ht(this,"action"),n=[t("div",{staticClass:"q-banner__avatar col-auto row items-center self-start"},Ht(this,"avatar")),t("div",{staticClass:"q-banner__content col text-body2"},Ht(this,"default"))];return void 0!==i&&n.push(t("div",{staticClass:"q-banner__actions row items-center justify-end",class:"col-"+(!0===this.inlineActions?"auto":"all")},i)),t("div",{staticClass:"q-banner row items-center",class:(e={"q-banner--top-padding":void 0!==i&&!this.inlineActions,"q-banner--dense":this.dense},e["q-banner--"+this.darkSuffix+" q-"+this.darkSuffix]=!0,e["rounded-borders"]=this.rounded,e),attrs:he,on:Object.assign({},this.qListeners)},n)}}),fe={role:"toolbar"},pe=i.default.extend({name:"QBar",mixins:[Nt,ue],props:{dense:Boolean},computed:{classes:function(){return"q-bar--"+(!0===this.dense?"dense":"standard")+" q-bar--"+this.darkSuffix}},render:function(t){return t("div",{staticClass:"q-bar row no-wrap items-center",class:this.classes,attrs:fe,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),me={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},ve=Object.keys(me),ge={props:{align:{type:String,validator:function(t){return ve.includes(t)}}},computed:{alignClass:function(){var t=void 0===this.align?!0===this.vertical?"stretch":"left":this.align;return(!0===this.vertical?"items":"justify")+"-"+me[t]}}},_e=[!0,""],be=i.default.extend({name:"QBreadcrumbs",mixins:[Nt,ge],props:{separator:{type:String,default:"/"},separatorColor:String,activeColor:{type:String,default:"primary"},gutter:{type:String,validator:function(t){return["none","xs","sm","md","lg","xl"].includes(t)},default:"sm"}},computed:{classes:function(){return this.alignClass+("none"===this.gutter?"":" q-gutter-"+this.gutter)},sepClass:function(){return this.separatorColor?" text-"+this.separatorColor:""},activeClass:function(){return" text-"+this.activeColor}},render:function(t){var e=this,i=Ht(this,"default");if(void 0!==i){var n=1,s=[],o=i.filter(function(t){return void 0!==t.tag&&t.tag.endsWith("-QBreadcrumbsEl")}).length,r=void 0!==this.$scopedSlots.separator?this.$scopedSlots.separator:function(){return e.separator};return i.forEach(function(i){if(void 0!==i.tag&&i.tag.endsWith("-QBreadcrumbsEl")){var a=n-1)switch(i.abort.splice(t,1),f.remove(),r){case"mouse":document.removeEventListener("mouseup",o,Pe),e.removeEventListener("mouseout",o,Pe);break;case"keyboard":document.removeEventListener("keyup",o,Pe);break;case"touch":a.removeEventListener("touchmove",L,Pe),a.removeEventListener("touchmove",o,Pe),a.removeEventListener("touchend",o,Pe),a.removeEventListener("touchcancel",o,Pe),i.preventMouse--}};i.abort.push(L);var E=function(){!0!==l&&(p.classList.remove("q-ripple__inner--enter"),p.classList.add("q-ripple__inner--leave"),p.style.opacity=0,s=setTimeout(L,275))};!0===h&&(0===t.type.indexOf("mouse")?(r="mouse",o=function(t){"mouseout"===t.type&&!0===e.contains(t.toElement)||(s=setTimeout(E,$-Date.now()))},document.addEventListener("mouseup",o,Pe),e.addEventListener("mouseout",o,Pe)):0===t.type.indexOf("key")?(r="keyboard",i.preventKeyboard=!0,o=function(){i.preventKeyboard=!1,s=setTimeout(E,$-Date.now())},document.addEventListener("keyup",o,Pe)):(r="touch",l=!0,a=t.target,i.preventMouse++,o=function(t){"touchmove"===t.type&&0!==t.changedTouches.length&&!0===e.contains(document.elementFromPoint(t.changedTouches[0].clientX,t.changedTouches[0].clientY))||(s=setTimeout(E,$-Date.now()))},a.addEventListener("touchmove",L,Pe),a.addEventListener("touchmove",o,Pe),a.addEventListener("touchend",o,Pe),a.addEventListener("touchcancel",o,Pe))),s=setTimeout(function(){!0===l&&(l=void 0,a.removeEventListener("touchmove",L,Pe)),p.classList.add("q-ripple__inner--enter"),p.style.transform="translate3d("+k+","+T+",0) scale3d(1,1,1)",p.style.opacity=.2,!0!==h&&(s=setTimeout(E,$-Date.now()))},!0===l?70:50)}function Ie(t,e,i){var n=i.modifiers,s=i.arg,o=i.value;if(t.enabled=!1!==o,!0===t.enabled){var r=Object.assign({},bt.config.ripple,n,o),a=void 0===t.modifiers.early||t.modifiers.early!==r.early;t.modifiers={early:!0===r.early,stop:!0===r.stop,center:!0===r.center,color:r.color||s,keyCodes:[].concat(r.keyCodes||13)},!0===a&&(T(t,"main"),!0===r.early?q(t,"main",[[e,"mousedown","start","passive"],[e,"touchstart","start","passive"],[e,"keydown","keystart","passive"]]):q(t,"main",[[e,"click","start","passive"],[e,"keyup","keystart","passive"]]))}else t.abort.slice().forEach(function(t){t()}),T(t,"main"),t.preventMouse=0,t.preventKeyboard=!1}var Re={name:"ripple",inserted:function(t,e){var i={modifiers:{},abort:[],preventMouse:0,preventKeyboard:!1,start:function(e){!0!==i.enabled||!0===e.qSkipRipple||"mousedown"===e.type&&0!==i.preventMouse||!(!0!==u.is.ie||e.clientX>=0)||ze(e,t,i,bt.interaction.isKeyboard)},keystart:function(e){!0!==i.preventKeyboard&&!0===i.enabled&&!0!==e.qSkipRipple&&!0===Be(e,i.modifiers.keyCodes)&&ze(e,t,i,!0)}};Ie(i,t,e),t.__qripple&&(t.__qripple_old=t.__qripple),t.__qripple=i},update:function(t,e){void 0!==t.__qripple&&Ie(t.__qripple,t,e)},unbind:function(t){var e=t.__qripple_old||t.__qripple;void 0!==e&&(e.abort.slice().forEach(function(t){t()}),T(e,"main"),delete t[t.__qripple_old?"__qripple_old":"__qripple"])}},Fe={directives:{Ripple:Re},props:{ripple:{type:[Boolean,Object],default:!0}}},De={none:0,xs:4,sm:8,md:16,lg:24,xl:32},je=["button","submit","reset"],Ve=/[^\s]\/[^\s]/,Ne=["flat","outline","push","unelevated"],He=function(t,e){return!0===t.flat?"flat":!0===t.outline?"outline":!0===t.push?"push":!0===t.unelevated?"unelevated":e},Qe={mixins:[Nt,Fe,we,ge,Dt({xs:8,sm:10,md:14,lg:20,xl:24})],props:Object.assign({},{type:{type:String,default:"button"},to:[Object,String],replace:Boolean,append:Boolean,label:[Number,String],icon:String,iconRight:String},Ne.reduce(function(t,e){return(t[e]=Boolean)&&t},{}),{square:Boolean,round:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],align:{default:"center"},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean}),computed:{style:function(){if(!1===this.fab&&!1===this.fabMini)return this.sizeStyle},isRounded:function(){return!0===this.rounded||!0===this.fab||!0===this.fabMini},isActionable:function(){return!0!==this.disable&&!0!==this.loading},computedTabIndex:function(){return!0===this.isActionable?this.tabindex||0:-1},design:function(){return He(this,"standard")},attrs:function(){var t={tabindex:this.computedTabIndex};return!0===this.hasLink?Object.assign(t,this.linkAttrs):!0===je.includes(this.type)&&(t.type=this.type),"a"===this.linkTag?(!0===this.disable?t["aria-disabled"]="true":void 0===t.href&&(t.role="button"),!0!==this.hasRouterLink&&!0===Ve.test(this.type)&&(t.type=this.type)):!0===this.disable&&(t.disabled="",t["aria-disabled"]="true"),!0===this.loading&&void 0!==this.percentage&&(t.role="progressbar",t["aria-valuemin"]=0,t["aria-valuemax"]=100,t["aria-valuenow"]=this.percentage),t},classes:function(){var t;void 0!==this.color?t=!0===this.flat||!0===this.outline?"text-"+(this.textColor||this.color):"bg-"+this.color+" text-"+(this.textColor||"white"):this.textColor&&(t="text-"+this.textColor);var e=!0===this.round?"round":"rectangle"+(!0===this.isRounded?" q-btn--rounded":!0===this.square?" q-btn--square":"");return"q-btn--"+this.design+" q-btn--"+e+(void 0!==t?" "+t:"")+(!0===this.isActionable?" q-btn--actionable q-focusable q-hoverable":!0===this.disable?" disabled":"")+(!0===this.fab?" q-btn--fab":!0===this.fabMini?" q-btn--fab-mini":"")+(!0===this.noCaps?" q-btn--no-uppercase":"")+(!0===this.noWrap?"":" q-btn--wrap")+(!0===this.dense?" q-btn--dense":"")+(!0===this.stretch?" no-border-radius self-stretch":"")+(!0===this.glossy?" glossy":"")},innerClasses:function(){return this.alignClass+(!0===this.stack?" column":" row")+(!0===this.noWrap?" no-wrap text-no-wrap":"")+(!0===this.loading?" q-btn__content--hidden":"")},wrapperStyle:function(){if(void 0!==this.padding)return{padding:this.padding.split(/\s+/).map(function(t){return t in De?De[t]+"px":t}).join(" "),minWidth:"0",minHeight:"0"}}}},We=d.passiveCapture,Ue=void 0,Ye=void 0,Ke=void 0,Ge={role:"img","aria-hidden":"true"},Xe=i.default.extend({name:"QBtn",mixins:[Qe],props:{percentage:Number,darkPercentage:Boolean},computed:{hasLabel:function(){return void 0!==this.label&&null!==this.label&&""!==this.label},computedRipple:function(){return!1!==this.ripple&&Object.assign({},{keyCodes:!0===this.hasLink?[13,32]:[13]},!0===this.ripple?{}:this.ripple)},percentageStyle:function(){var t=Math.max(0,Math.min(100,this.percentage));if(t>0)return{transition:"transform 0.6s",transform:"translateX("+(t-100)+"%)"}},onEvents:function(){if(!0===this.loading)return{mousedown:this.__onLoadingEvt,touchstart:this.__onLoadingEvt,click:this.__onLoadingEvt,keydown:this.__onLoadingEvt,keyup:this.__onLoadingEvt};if(!0===this.isActionable){var t=Object.assign({},this.qListeners,{click:this.click,keydown:this.__onKeydown,mousedown:this.__onMousedown});return!0===this.$q.platform.has.touch&&(t[(void 0===t.touchstart?"&":"")+"touchstart"]=this.__onTouchstart),t}return{click:w}},directives:function(){if(!0!==this.disable&&!1!==this.ripple)return[{name:"ripple",value:this.computedRipple,modifiers:{center:this.round}}]}},methods:{click:function(t){var e=this;if(void 0!==t){if(!0===t.defaultPrevented)return;var i=document.activeElement;if("submit"===this.type&&(!0===this.$q.platform.is.ie&&(t.clientX<0||t.clientY<0)||i!==document.body&&!1===this.$el.contains(i)&&!1===i.contains(this.$el))){this.$el.focus();var n=function(){document.removeEventListener("keydown",w,!0),document.removeEventListener("keyup",n,We),void 0!==e.$el&&e.$el.removeEventListener("blur",n,We)};document.addEventListener("keydown",w,!0),document.addEventListener("keyup",n,We),this.$el.addEventListener("blur",n,We)}}this.__navigateOnClick(t)},__onKeydown:function(t){this.$emit("keydown",t),!0===Be(t,[13,32])&&(Ye!==this.$el&&(void 0!==Ye&&this.__cleanup(),!0!==t.defaultPrevented&&(this.$el.focus(),Ye=this.$el,this.$el.classList.add("q-btn--active"),document.addEventListener("keyup",this.__onPressEnd,!0),this.$el.addEventListener("blur",this.__onPressEnd,We))),w(t))},__onTouchstart:function(t){if(this.$emit("touchstart",t),Ue!==this.$el&&(void 0!==Ue&&this.__cleanup(),!0!==t.defaultPrevented)){Ue=this.$el;var e=this.touchTargetEl=t.target;e.addEventListener("touchcancel",this.__onPressEnd,We),e.addEventListener("touchend",this.__onPressEnd,We)}},__onMousedown:function(t){this.$emit("mousedown",t),Ke!==this.$el&&(void 0!==Ke&&this.__cleanup(),!0!==t.defaultPrevented&&(Ke=this.$el,this.$el.classList.add("q-btn--active"),document.addEventListener("mouseup",this.__onPressEnd,We)))},__onPressEnd:function(t){if(void 0===t||"blur"!==t.type||document.activeElement!==this.$el){if(void 0!==t&&"keyup"===t.type){if(Ye===this.$el&&!0===Be(t,[13,32])){var e=new MouseEvent("click",t);!0===t.defaultPrevented&&x(e),!0===t.cancelBubble&&S(e),this.$el.dispatchEvent(e),w(t)}this.$emit("keyup",t)}this.__cleanup()}},__cleanup:function(t){var e=this.$refs.blurTarget;if(!0===t||Ue!==this.$el&&Ke!==this.$el||void 0===e||e===document.activeElement||!0!==this.$el.contains(document.activeElement)||(e.setAttribute("tabindex",-1),e.focus()),Ue===this.$el){var i=this.touchTargetEl;i.removeEventListener("touchcancel",this.__onPressEnd,We),i.removeEventListener("touchend",this.__onPressEnd,We),Ue=this.touchTargetEl=void 0}Ke===this.$el&&(document.removeEventListener("mouseup",this.__onPressEnd,We),Ke=void 0),Ye===this.$el&&(document.removeEventListener("keyup",this.__onPressEnd,!0),void 0!==this.$el&&this.$el.removeEventListener("blur",this.__onPressEnd,We),Ye=void 0),void 0!==this.$el&&this.$el.classList.remove("q-btn--active")},__onLoadingEvt:function(t){w(t),t.qSkipRipple=!0}},beforeDestroy:function(){this.__cleanup(!0)},render:function(t){var e=[];void 0!==this.icon&&e.push(t(ae,{attrs:Ge,props:{name:this.icon,left:!1===this.stack&&!0===this.hasLabel}})),!0===this.hasLabel&&e.push(t("span",{staticClass:"block"},[this.label])),e=Wt(e,this,"default"),void 0!==this.iconRight&&!1===this.round&&e.push(t(ae,{attrs:Ge,props:{name:this.iconRight,right:!1===this.stack&&!0===this.hasLabel}}));var i=[t("span",{staticClass:"q-focus-helper",ref:"blurTarget"})];return!0===this.loading&&void 0!==this.percentage&&i.push(t("span",{staticClass:"q-btn__progress absolute-full overflow-hidden",class:!0===this.darkPercentage?"q-btn__progress--dark":""},[t("span",{staticClass:"q-btn__progress-indicator fit block",style:this.percentageStyle})])),i.push(t("span",{staticClass:"q-btn__wrapper col row q-anchor--skip",style:this.wrapperStyle},[t("span",{staticClass:"q-btn__content text-center col items-center q-anchor--skip",class:this.innerClasses},e)])),null!==this.loading&&i.push(t("transition",{props:{name:"q-transition--fade"}},!0===this.loading?[t("span",{key:"loading",staticClass:"absolute-full flex flex-center"},void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():[t(qe)])]:void 0)),t(!0===this.hasLink||"a"===this.type?"a":"button",{staticClass:"q-btn q-btn-item non-selectable no-outline",class:this.classes,style:this.style,attrs:this.attrs,on:this.onEvents,directives:this.directives},i)}}),Ze=new WeakMap;function Je(t){if(null!==t&&void 0!==t){var e=Ze.get(t)||t.closest(".q-panel-parent");null!==e&&e.classList.remove("q-transition--hide-scroll")}}var ti={"before-leave":function(t){if(null!==t&&void 0!==t){var e=t.closest(".q-panel-parent");Ze.set(t,e),null!==e&&e.classList.add("q-transition--hide-scroll")}},"after-leave":Je,"leave-cancelled":Je},ei={props:{transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"}},computed:{transitionProps:function(){var t="q-transition--"+this.transitionShow,e="q-transition--"+this.transitionHide;return{enterClass:t+"-enter",leaveClass:e+"-leave",appearClass:t+"-appear",enterToClass:t+"-enter-to",leaveToClass:e+"-leave-to",appearToClass:t+"-appear-to",enterActiveClass:t+"-enter-active",leaveActiveClass:e+"-leave-active",appearActiveClass:t+"-appear-active"}}}},ii=i.default.extend({name:"QBtnGroup",mixin:[Nt],props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},computed:{classes:function(){var t=this;return["unelevated","outline","flat","rounded","square","push","stretch","glossy"].filter(function(e){return!0===t[e]}).map(function(t){return"q-btn-group--"+t}).join(" ")}},render:function(t){return t("div",{staticClass:"q-btn-group row no-wrap "+(!0===this.spread?"q-btn-group--spread":"inline"),class:this.classes,on:Object.assign({},this.qListeners)},Ht(this,"default"))}});function ni(){if(void 0!==window.getSelection){var t=window.getSelection();void 0!==t.empty?t.empty():void 0!==t.removeAllRanges&&(t.removeAllRanges(),!0!==h.is.mobile&&t.addRange(document.createRange()))}else void 0!==document.selection&&document.selection.empty()}var si=[];function oi(t){si.slice().forEach(function(e){t&&t.target&&!0===t.target.qScrollPrevented||!0===_(t,e.scrollTarget)&&e(t)})}var ri={props:{target:{default:!0},noParentEvent:Boolean,contextMenu:Boolean},watch:{contextMenu:function(t){void 0!==this.anchorEl&&(this.__unconfigureAnchorEl(),this.__configureAnchorEl(t))},target:function(){void 0!==this.anchorEl&&this.__unconfigureAnchorEl(),this.__pickAnchorEl()},noParentEvent:function(t){void 0!==this.anchorEl&&(!0===t?this.__unconfigureAnchorEl():this.__configureAnchorEl())}},methods:{__showCondition:function(t){return void 0!==this.anchorEl&&(void 0===t||(void 0===t.touches||t.touches.length<=1))},__contextClick:function(t){var e=this;this.hide(t),x(t),this.$nextTick(function(){e.show(t),t===Object(t)&&(t.qAnchorHandled=!0)})},__toggleKey:function(t){!0===Be(t,13)&&this.toggle(t)},__mobileCleanup:function(t){this.anchorEl.classList.remove("non-selectable"),clearTimeout(this.touchTimer),!0===this.showing&&void 0!==t&&ni()},prevent:x,__mobileTouch:function(t){var e=this;if(this.__mobileCleanup(t),!0===this.__showCondition(t)){this.hide(t),this.anchorEl.classList.add("non-selectable");var i=t.target;q(this,"anchor",[[i,"touchmove","__mobileCleanup","passive"],[i,"touchend","__mobileCleanup","passive"],[i,"touchcancel","__mobileCleanup","passive"],[this.anchorEl,"contextmenu","prevent","notPassive"]]),this.touchTimer=setTimeout(function(){e.show(t),t===Object(t)&&(t.qAnchorHandled=!0)},300)}},__unconfigureAnchorEl:function(){T(this,"anchor")},__configureAnchorEl:function(t){(void 0===t&&(t=this.contextMenu),!0!==this.noParentEvent&&void 0!==this.anchorEl)&&q(this,"anchor",!0===t?!0===this.$q.platform.is.mobile?[[this.anchorEl,"touchstart","__mobileTouch","passive"]]:[[this.anchorEl,"mousedown","hide","passive"],[this.anchorEl,"contextmenu","__contextClick","notPassive"]]:[[this.anchorEl,"click","toggle","passive"],[this.anchorEl,"keyup","__toggleKey","passive"]])},__setAnchorEl:function(t){for(this.anchorEl=t;this.anchorEl.classList.contains("q-anchor--skip");)this.anchorEl=this.anchorEl.parentNode;this.__configureAnchorEl()},__pickAnchorEl:function(){!1===this.target||""===this.target||null===this.parentEl?this.anchorEl=void 0:!0===this.target?this.__setAnchorEl(this.parentEl):(this.anchorEl=Le(this.target)||void 0,void 0!==this.anchorEl?this.__configureAnchorEl():console.error('Anchor: target "'+this.target+'" not found',this))},__changeScrollEvent:function(t,e){var i=si.length>0;if(void 0!==this.__scrollFn){var n=si.indexOf(this.__scrollFn);n>-1&&si.splice(n,1),this.__scrollFn=void 0}void 0!==t&&null!==e&&void 0!==e&&(t.scrollTarget=e===window?document:e,si.push(t),this.__scrollFn=t),!0===i&&0===si.length?window.removeEventListener("scroll",oi,d.passiveCapture):!1===i&&si.length>0&&window.addEventListener("scroll",oi,d.passiveCapture)}},created:function(){var t=this;"function"==typeof this.__configureScrollTarget&&"function"==typeof this.__unconfigureScrollTarget&&(this.noParentEventWatcher=this.$watch("noParentEvent",function(){t.__unconfigureScrollTarget(),t.__configureScrollTarget()}))},mounted:function(){this.parentEl=this.$el.parentNode,this.__pickAnchorEl(),!0===this.value&&void 0===this.anchorEl&&this.$emit("input",!1)},beforeDestroy:function(){clearTimeout(this.touchTimer),void 0!==this.noParentEventWatcher&&this.noParentEventWatcher(),void 0!==this.__anchorCleanup&&this.__anchorCleanup(),this.__unconfigureAnchorEl()}},ai={created:function(){this.__tickFnList=[],this.__timeoutFnList=[]},deactivated:function(){this.__tickFnList.forEach(function(t){t.removeTick()}),this.__timeoutFnList.forEach(function(t){t.removeTimeout()})},beforeDestroy:function(){this.__tickFnList.forEach(function(t){t.removeTick()}),this.__tickFnList=void 0,this.__timeoutFnList.forEach(function(t){t.removeTimeout()}),this.__timeoutFnList=void 0},methods:{__useTick:function(t,e){var i=this,n={removeTick:function(){n.fn=void 0},registerTick:function(t){n.fn=t,i.$nextTick(function(){n.fn===t&&(!1===i._isDestroyed&&n.fn(),n.fn=void 0)})}};this.__tickFnList.push(n),this[t]=n.registerTick,void 0!==e&&(this[e]=n.removeTick)},__useTimeout:function(t,e){var i=this,n={removeTimeout:function(){clearTimeout(n.timer)},registerTimeout:function(t,e){clearTimeout(n.timer),!1===i._isDestroyed&&(n.timer=setTimeout(t,e))}};this.__timeoutFnList.push(n),this[t]=n.registerTimeout,void 0!==e&&(this[e]=n.removeTimeout)}}},li={timeStamp:null,label:null,show:null};function ci(t,e){if("click"!==t.type)return!1;var i=li.timeStamp,n=li.label,s=li.show,o=t.target;return li.show=e,li.timeStamp=t.timeStamp,li.label=o?"string"==typeof o.id&&""!==o.id&&null!==n&&n.htmlFor===o.id?n:"function"==typeof o.closest?o.closest("label"):null:null,i===li.timeStamp&&n===li.label&&s!==e}var ui,hi={mixins:[Nt],props:{value:{type:Boolean,default:void 0}},data:function(){return{showing:!1}},watch:{value:function(t){this.__processModelChange(t)},$route:function(){!0===this.hideOnRouteChange&&!0===this.showing&&this.hide()}},methods:{toggle:function(t){this[!0===this.showing?"hide":"show"](t),t===Object(t)&&(t.qAnchorHandled=!0)},show:function(t){var e=this;!0===this.disable||t===Object(t)&&(!0===t.qAnchorHandled||!0===ci(t,"show"))||void 0!==this.__showCondition&&!0!==this.__showCondition(t)||(void 0!==this.qListeners.input&&!1===n&&(this.$emit("input",!0),this.payload=t,this.$nextTick(function(){e.payload===t&&(e.payload=void 0)})),void 0!==this.value&&void 0!==this.qListeners.input&&!0!==n||this.__processShow(t))},__processShow:function(t){!0!==this.showing&&(void 0!==this.__preparePortal&&this.__preparePortal(),this.showing=!0,this.$emit("before-show",t),void 0!==this.__show?this.__show(t):this.$emit("show",t))},hide:function(t){var e=this;!0!==this.disable&&(t!==Object(t)||!0!==t.qAnchorHandled&&!0!==ci(t,"hide"))&&(void 0!==this.qListeners.input&&!1===n&&(this.$emit("input",!1),this.payload=t,this.$nextTick(function(){e.payload===t&&(e.payload=void 0)})),void 0!==this.value&&void 0!==this.qListeners.input&&!0!==n||this.__processHide(t))},__processHide:function(t){!1!==this.showing&&(this.showing=!1,this.$emit("before-hide",t),void 0!==this.__hide?this.__hide(t):this.$emit("hide",t))},__processModelChange:function(t){!0===this.disable&&!0===t?void 0!==this.qListeners.input&&this.$emit("input",!1):!0===t!==this.showing&&this["__process"+(!0===t?"Show":"Hide")](this.payload)}}},di=[":focus",'a[href]:not([tabindex="-1"]):not(.q-focus__clone)','area[href]:not([tabindex="-1"]):not(.q-focus__clone)','input:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','select:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','textarea:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','button:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','iframe:not([tabindex="-1"]):not(.q-focus__clone)','[tabindex]:not([tabindex="-1"]):not(.q-focus__clone)','[contenteditable]:not([tabindex="-1"]):not(.q-focus__clone):not([contenteditable="false"])',".q-tab.q-focusable:not(.q-focus__clone)"].join(","),fi=["input:not([disabled])","select:not([disabled])","select:not([disabled]) *","textarea:not([disabled])",'[contenteditable]:not([contenteditable="false"])','[contenteditable]:not([contenteditable="false"]) *',".q-key-group-navigation--ignore-key",".q-key-group-navigation--ignore-key *",".q-focus__clone"].join(","),pi=['input:not(.q-focus__clone):not([disabled]):not([readonly]):not([type="button"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="radio"]):not([type="range"]):not([type="reset"]):not([type="submit"])',"textarea:not(.q-focus__clone):not([disabled]):not([readonly])",'[contenteditable]:not(.q-focus__clone):not([contenteditable="false"])','[contenteditable]:not(.q-focus__clone):not([contenteditable="false"]) *'].join(","),mi=0;function vi(t){return t.matches(".q-dialog *, .q-menu *, .q-tooltip *, .q-stepper__step-content *")}function gi(t){return t.matches(pi)}function _i(t){if(void 0===ui){var e="function"==typeof t.scrollIntoViewIfNeeded?function(t){t.scrollIntoViewIfNeeded(!1)}:function(t){t.scrollIntoView()};ui=!0===u.is.ios||!0===u.is.nativeMobile||!0===u.is.standalone?function(t){var i=gi(t);if(t===document.body||!0!==i&&t.tabIndex<0)t!==document.activeElement&&t.focus({preventScroll:!0});else{var n=vi(t),s=t.cloneNode(!0),o=t.parentNode,r=document.scrollingElement||document.documentElement,a=r.scrollTop;s.setAttribute("tabindex",-1),s.removeAttribute("id"),s.removeAttribute("autofocus"),s.removeAttribute("data-autofocus"),s.classList.add("q-focus__clone"),o.insertBefore(s,t),t!==document.activeElement&&t.focus({preventScroll:!0}),setTimeout(function(){if(s.remove(),t&&t===document.activeElement&&!0===i){!0===n&&e(t);var o=t.getBoundingClientRect(),l=o.top,c=o.bottom,u=void 0!==window.visualViewport?window.visualViewport.height:window.innerHeight,h=r.scrollTop;if(l<0?h+=l-32:l>0&&c>u&&(h+=c-u+64),requestAnimationFrame(function(){r.scrollTop=h}),!0!==t.qRestoreScrollSet&&!0!==n){mi+=h-a;var d=function(){t&&(t.qRestoreScrollSet=void 0,t.removeEventListener("blur",d)),r.scrollTop!==h?mi=0:0!==mi&&requestAnimationFrame(function(){var t=document.activeElement;(!t||!0!==gi(t)&&t.tabIndex<0)&&(r.scrollTop-=mi,mi=0)})};t.qRestoreScrollSet=!0,t.addEventListener("blur",d)}}},200)}}:function(t){t!==document.activeElement&&t.focus({preventScroll:!0}),!0===vi(t)&&!0===gi(t)&&setTimeout(function(){t&&t===document.activeElement&&e(t)},200)}}ui(t)}function bi(t,e,i,n,s,o){void 0===i&&(i=1);var r=t.length-1;if(!0!==s||!(e>r||e<0)){var a=Ct(e,0,r);if(!(a===o||a>r)){var l=document.activeElement,c=!0===n?function(){_i(t[a])}:function(){t[a].focus()};null!==l?(l._qKeyNavIgnore=!0,c(),l._qKeyNavIgnore=!1):c(),document.activeElement!==t[a]&&bi(t,a+i,i,n,s,void 0===o?a:o)}}}var yi=Array.prototype.find,Si=Array.prototype.findIndex,xi=Array.prototype.map;function wi(t,e){do{if("QMenu"===t.$options.name){if(t.hide(e),!0===t.separateClosePopup)return t.$parent}else if(void 0!==t.__renderPortal)return void 0!==t.$parent&&"QPopupProxy"===t.$parent.$options.name?(t.hide(e),t.$parent):t;t=t.$parent}while(void 0!==t&&(void 0===t.$el.contains||!0!==t.$el.contains(e.target)))}function Ci(t){var e=yi.call(t.children,function(t){return t.matches&&t.matches(".q-portal__container")});return void 0===e&&(e=document.createElement("div")).classList.add("q-portal__container"),e.parentElement===t&&null===e.nextElementSibling||t.appendChild(e),e}var ki=new WeakMap,qi={inheritAttrs:!1,props:{contentClass:[Array,String,Object],contentStyle:[Array,String,Object]},methods:{focus:function(t){var e=this.__getInnerNode();if(void 0!==e&&!0!==e.contains(document.activeElement)){var i=null;if(""!==t&&(i=e.querySelector("string"==typeof t?t:"[autofocus][tabindex], [data-autofocus][tabindex]")||e.querySelector("string"==typeof t?t:"[autofocus] [tabindex], [data-autofocus] [tabindex]")||e.querySelector("string"==typeof t?t:"[autofocus], [data-autofocus]")),null!==i&&"function"==typeof i.focus)_i(i);else{var n=Array.prototype.slice.call(e.querySelectorAll(di));n.length>0&&bi(n,!0===n[0].classList.contains("q-key-group-navigation--ignore-focus")?1:0,1,!0)}}},__showPortal:function(){var t=this;if(void 0!==this.$q.fullscreen&&!0===this.$q.fullscreen.isCapable){var e=function(){if(void 0!==t.__portal){var e=Ee(t.$q.fullscreen.activeEl),i=t.__portal.$el.parentElement,n=Ci(e);i===n||!0!==t.__onGlobalDialog&&!0!==e.contains(t.$el)||(n.appendChild(t.__portal.$el),i&&i.parentElement!==document.body&&0===i.children.length&&i.remove())}};this.unwatchFullscreen=this.$watch("$q.fullscreen.activeEl",H(e,50)),!1!==this.__onGlobalDialog&&!0!==this.$q.fullscreen.isActive||e()}else void 0!==this.__portal&&!1===this.__onGlobalDialog&&Ci(document.body).appendChild(this.__portal.$el)},__hidePortal:function(){if(void 0!==this.__portal){void 0!==this.unwatchFullscreen&&(this.unwatchFullscreen(),this.unwatchFullscreen=void 0),!1===this.__onGlobalDialog&&(this.__portal.$destroy(),this.__portal.$el.remove());var t=this.__portal.$el.parentElement;t&&t.parentElement!==document.body&&0===t.children.length&&t.remove(),this.__portal=void 0}},__preparePortal:function(){var t=this;void 0===this.__portal&&(!0===this.__onGlobalDialog&&ki.set(this.$el,this),this.__portal=!0===this.__onGlobalDialog?{$el:this.$el,$refs:this.$refs}:new i.default({name:"QPortal",parent:this,inheritAttrs:!1,render:function(e){return t.$nextTick(function(){ki.set(t.__portal.$el,t)}),t.__renderPortal(e)},components:this.$options.components,directives:this.$options.directives}).$mount())},__getInnerNode:function(){return void 0!==this.__portal&&void 0!==this.__portal.$refs?this.__portal.$refs.inner:void 0},__focusCyclePortal:function(t){var e=this;if(void 0!==this.__portal&&!0===document.body.contains(this.__portal.$el)){var i=this.__portal.$el.parentElement.children,n=document.activeElement,s=n?Si.call(i,function(t){return"function"==typeof t.contains&&t.contains(n)}):-1;if(s<0){if(!0!==t){if(n){var o=ki.get(i[0]);o&&(o.__refocusTarget=n)}this.focus()}}else{var r=ki.get(i[s]);if(!0===t){var a=xi.call(i,function(t){return ki.get(t)}).filter(function(t){return t&&!0===e.__portal.$el.contains(t.__refocusTarget)});if(a.length>0&&a.forEach(function(t){t.__refocusTarget=e.__refocusTarget}),a.indexOf(r)>-1)return}var l=!0===t?this:r||this,c=l.__refocusTarget;if(l!==this||!0!==t||!1!==l.seamless){if(!1===l.seamless)return void this.focus();if(s>0){var u=i[s-1],h=ki.get(u);if(h&&(!0!==t||!1===h.seamless)&&(-1!==[null,void 0,document.body].indexOf(c)||!1===u.contains(c)))return void h.focus()}}if(-1===[null,void 0,document.body].indexOf(c)&&!0===document.body.contains(c))_i(c);else if(!0!==t){var d=document.body,f=d.hasAttribute("tabindex");!1===f&&d.setAttribute("tabindex",-1),d.focus(),!1===f&&this.$nextTick(function(){d&&d.removeAttribute("tabindex")})}}}}},render:function(t){if(!0===this.__onGlobalDialog)return this.__renderPortal(t);void 0!==this.__portal&&this.__portal.$forceUpdate()},beforeDestroy:function(){this.__hidePortal()}};!1===n&&(qi.created=function(){this.__onGlobalDialog=function(t){for(;void 0!==t;){if("QGlobalDialog"===t.$options.name)return!0;if("QDialog"===t.$options.name)return!1;t=t.$parent}return!1}(this.$parent)});var Ti,Mi={computed:{focusGuardElements:function(){return{firstGuard:this.$createElement("span",{staticClass:"no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus",attrs:{tabindex:0},on:{focus:this.__focusLast}}),lastGuard:this.$createElement("span",{staticClass:"no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus",attrs:{tabindex:0},on:{focus:this.__focusFirst}})}}},methods:{__focusFirst:function(t){var e=this.__getInnerNode();void 0===e||!0===t&&!0===e.contains(document.activeElement)||bi(Array.prototype.slice.call(e.querySelectorAll(di),1,-1),0,1)},__focusLast:function(){var t=this.__getInnerNode();if(void 0!==t){var e=Array.prototype.slice.call(t.querySelectorAll(di),1,-1);bi(e,e.length-1,-1)}},__getFocusWrappedContent:function(t){return Wt([this.focusGuardElements.firstGuard],this,t).concat(this.focusGuardElements.lastGuard)}}};var $i=d.notPassiveCapture,Li=d.passiveCapture,Ei={click:[],focus:[]};function Oi(t,e){for(var i=t.length-1;i>=0;i--)if(void 0===t[i](e))return}function Ai(t){clearTimeout(Ti),"focusin"===t.type&&(!0===u.is.ie&&t.target===document.body||!0===t.target.hasAttribute("tabindex"))?Ti=setTimeout(function(){Oi(Ei.focus,t)},!0===u.is.ie?500:200):Oi(Ei.click,t)}var Bi,Pi={name:"click-outside",bind:function(t,e,i){var n=e.arg,s=e.value,o=i.componentInstance||i.context,r={trigger:s,toggleEl:n,handler:function(e){var i=e.target;if(!(!0===e.qClickOutside||!0!==document.body.contains(i)||8===i.nodeType||i===document.documentElement||!1!==i.classList.contains("no-pointer-events")||!0===function(t){for(;null!==(t=t.nextElementSibling);)if(t.classList.contains("q-dialog--modal"))return!0;return!1}(t)||void 0!==r.toggleEl&&!1!==r.toggleEl.contains(i)||i!==document.body&&!1!==function(t,e){if(null===t||null===e)return null;for(var i=t;void 0!==i;i=i.$parent)if(i===e)return!0;return!1}(function(t){for(var e=t;null!==e;e=e.parentNode)if(void 0!==e.__vue__)return e.__vue__}(i),o)))return e.qClickOutside=!0,r.trigger(e)}};t.__qclickoutside&&(t.__qclickoutside_old=t.__qclickoutside),t.__qclickoutside=r,0===Ei.click.length&&(document.addEventListener("mousedown",Ai,$i),document.addEventListener("touchstart",Ai,$i),document.addEventListener("focusin",Ai,Li)),Ei.click.push(r.handler),r.timerFocusin=setTimeout(function(){Ei.focus.push(r.handler)},500)},update:function(t,e){var i=e.arg,n=e.value,s=e.oldValue,o=t.__qclickoutside;void 0!==o&&(o.toggleEl!==i&&(o.toggleEl=i),s!==n&&(o.trigger=n))},unbind:function(t){var e=t.__qclickoutside_old||t.__qclickoutside;if(void 0!==e){clearTimeout(e.timerFocusin);var i=Ei.click.findIndex(function(t){return t===e.handler}),n=Ei.focus.findIndex(function(t){return t===e.handler});i>-1&&Ei.click.splice(i,1),n>-1&&Ei.focus.splice(n,1),0===Ei.click.length&&(clearTimeout(Ti),document.removeEventListener("mousedown",Ai,$i),document.removeEventListener("touchstart",Ai,$i),document.removeEventListener("focusin",Ai,Li)),delete t[t.__qclickoutside_old?"__qclickoutside_old":"__qclickoutside"]}}},zi=!0===n?[]:[null,document,document.body,document.scrollingElement,document.documentElement];function Ii(){if(!0===n)return!1;if(void 0===Bi){var t=document.createElement("div"),e=document.createElement("div");Object.assign(t.style,{direction:"rtl",width:"1px",height:"1px",overflow:"auto"}),Object.assign(e.style,{width:"1000px",height:"1px"}),t.appendChild(e),document.body.appendChild(t),t.scrollLeft=-1e3,Bi=t.scrollLeft>=0,t.remove()}return Bi}function Ri(t,e){var i=Le(e);if(null===i){if(t!==Object(t)||"function"!=typeof t.closest)return window;i=t.closest(".scroll,.scroll-y,.overflow-auto,.q-dialog__inner > div")}return zi.includes(i)?window:i}function Fi(t){return(t===window?document.body:t).scrollHeight}function Di(t){return t===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:t.scrollTop}var ji=Di;function Vi(t){return t===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:t.scrollLeft}function Ni(t,e,i){void 0===i&&(i=0);var n=void 0===arguments[3]?performance.now():arguments[3],s=Di(t);i<=0?s!==e&&Qi(t,e):requestAnimationFrame(function(o){var r=o-n,a=s+(e-s)/Math.max(r,i)*r;Qi(t,a),a!==e&&Ni(t,e,i-r,o)})}function Hi(t,e,i){void 0===i&&(i=0);var n=void 0===arguments[3]?performance.now():arguments[3],s=Vi(t);i<=0?s!==e&&Wi(t,e):requestAnimationFrame(function(o){var r=o-n,a=s+(e-s)/Math.max(r,i)*r;Wi(t,a),a!==e&&Hi(t,e,i-r,o)})}function Qi(t,e){t!==window?t.scrollTop=e:window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e)}function Wi(t,e){t!==window?t.scrollLeft=e:window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)}function Ui(t,e,i){i?Ni(t,e,i):Qi(t,e)}var Yi,Ki=Ui;function Gi(t,e,i){i?Hi(t,e,i):Wi(t,e)}function Xi(){if(void 0!==Yi)return Yi;var t=document.createElement("p"),e=document.createElement("div");$e(t,{width:"100%",height:"200px"}),$e(e,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var n=t.offsetWidth;return i===n&&(n=e.clientWidth),e.remove(),Yi=i-n}var Zi=[];function Ji(t){return!0!==document.qScrollPrevented?(t(),p):(-1===Zi.indexOf(t)&&Zi.push(t),function(){var e=Zi.indexOf(t);e>-1&&(Zi=Zi.splice(e,1))})}var tn={getScrollTarget:Ri,getScrollHeight:Fi,getScrollWidth:function(t){return(t===window?document.body:t).scrollWidth},getScrollPosition:ji,getVerticalScrollPosition:Di,getHorizontalScrollPosition:Vi,rtlHasScrollBug:Ii,animScrollTo:Ni,animVerticalScrollTo:Ni,animHorizontalScrollTo:Hi,setScrollPosition:Ki,setVerticalScrollPosition:Ui,setHorizontalScrollPosition:Gi,executeWhenScrollable:Ji,getScrollbarWidth:Xi,hasScrollbar:function(t,e){return void 0===e&&(e=!0),!(!t||t.nodeType!==Node.ELEMENT_NODE)&&(e?t.scrollHeight>t.clientHeight&&(t.classList.contains("scroll")||t.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(t)["overflow-y"])):t.scrollWidth>t.clientWidth&&(t.classList.contains("scroll")||t.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(t)["overflow-x"])))}},en=[],nn=!1,sn={__install:function(){this.__installed=!0,window.addEventListener("keydown",function(t){nn=27===t.keyCode}),window.addEventListener("blur",function(){!0===nn&&(nn=!1)}),window.addEventListener("keyup",function(t){!0===nn&&(nn=!1,0!==en.length&&!0===Be(t,27)&&en[en.length-1].fn(t))})},register:function(t,e){!0===t.$q.platform.is.desktop&&(!0!==this.__installed&&this.__install(),en.push({comp:t,fn:e}))},pop:function(t){if(!0===t.$q.platform.is.desktop){var e=en.findIndex(function(e){return e.comp===t});e>-1&&en.splice(e,1)}}},on=4,rn={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};function an(t){var e=t.split(" ");return 2===e.length&&(!0!==["top","center","bottom"].includes(e[0])?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):!0===["left","middle","right","start","end"].includes(e[1])||(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1))}function ln(t){return!0!==t||2===t.length&&("number"==typeof t[0]&&"number"==typeof t[1])}function cn(t,e){var i=t.split(" ");return{vertical:i[0],horizontal:rn[i[1]+"#"+(!0===e?"rtl":"ltr")]}}function un(t){var e=t.getBoundingClientRect(),i=e.width,n=e.height;return 0===i&&(i=t.offsetWidth),0===n&&(n=t.offsetHeight),{width:i,height:n}}function hn(t){var e=t.el;if(!0!==e.classList.contains("q-body--scroll-locked")){var i,n,s=document.documentElement,o=document.body,r=document.qScrollPrevented,a=e.children[0],l="1"!==a.style.opacity,c=function(t){for(;t&&t!==document;){if("fixed"===window.getComputedStyle(t).position)return!0;t=t.parentNode}return!1}(t.anchorEl),h=Object.assign({},t.anchorOrigin),d=Object.assign({},t.selfOrigin),f=!0===c&&!0===u.is.ios&&void 0!==window.visualViewport?window.visualViewport:{offsetLeft:0,offsetTop:!0===r?s.scrollTop:0},p=function(t,e,i){if(!0===t)return{vpLeft:e.offsetLeft,apLeft:e.offsetLeft};var n=window.pageXOffset||window.scrollX||document.body.scrollLeft||0;if(!0!==i)return{vpLeft:n,apLeft:n};var s=(!0===Ii()?0:document.documentElement.scrollWidth-document.documentElement.clientWidth)+n;return{vpLeft:s,apLeft:s+document.documentElement.scrollWidth-document.documentElement.clientWidth}}(c,f,t.rtl),m=p.vpLeft,v=p.apLeft,g=!0===c?f.offsetTop:window.pageYOffset||window.scrollY||o.scrollTop||0,_=!0===r?"offsetWidth":!0===c||!0!=("hidden"!==window.getComputedStyle(document.documentElement).overflowX&&"hidden"!==window.getComputedStyle(document.body).overflowX)?"clientWidth":"scrollWidth",b=!0===r?"offsetHeight":!0===c||!0!=("hidden"!==window.getComputedStyle(document.documentElement).overflowY&&"hidden"!==window.getComputedStyle(document.body).overflowY)?"clientHeight":"scrollHeight",y=s[_],S=s[b];if(void 0===t.absoluteOffset)i=function(t,e,i){var n=t.getBoundingClientRect(),s=n.top,o=n.left,r=n.right,a=n.bottom,l=n.width,c=n.height;if(0===l&&(l=t.offsetWidth),0===c&&(c=t.offsetHeight),void 0!==e&&(o-=e[0],r+=e[0],s-=e[1],a+=e[1]),!0===i){var u=document.documentElement.scrollWidth-document.documentElement.clientWidth;o-=u,r-=u}return{left:o,middle:o+(r-o)/2,right:r,top:s,center:s+(a-s)/2,bottom:a,leftRev:r,middleRev:o+(r-o)/2,rightRev:o,topRev:a,centerRev:s+(a-s)/2,bottomRev:s,width:l,height:c}}(t.anchorEl,!0===t.cover?[0,0]:t.offset,!0===t.rtl&&!0!==c);else{var x=!0===t.rtl&&!0!==c?s.scrollWidth-s.clientWidth:0,w=t.anchorEl.getBoundingClientRect(),C=w.top,k=w.left,q=C+(!0===t.cover?0:t.absoluteOffset.top),T=k+(!0===t.cover||!0===t.fit?0:t.absoluteOffset.left)-x;i={left:T,middle:T,right:T,top:q,center:q,bottom:q,leftRev:T,middleRev:T,rightRev:T,topRev:q,centerRev:q,bottomRev:q,width:0,height:0}}var M={minWidth:t.minWidth||null,minHeight:t.minHeight||null,maxWidth:t.maxWidth||null,maxHeight:t.maxHeight||null};if(!0!==t.fit&&!0!==t.cover||(null===t.minWidth&&(M.minWidth=i.width+"px"),!0===t.cover&&null===t.minHeight&&(M.minHeight=i.height+"px")),Object.assign(a.style,M),!0===l){var $=a.cloneNode(!0);$.classList.add("q-portal__clone"),o.appendChild($),n=un($),$.remove()}else n=un(a);null!==M.minWidth&&i.width>n.width&&(M.minWidth=n.width+"px"),null!==M.minHeight&&i.height>n.height&&(M.minHeight=n.height+"px");var L={position:!0===c?"fixed":"absolute",left:null,right:null,marginLeft:null,marginRight:null,maxWidth:null,top:null,bottom:null,marginTop:null,marginBottom:null,maxHeight:null},E=Math.min(m+i[t.anchorOrigin.horizontal],y-v-i[t.anchorOrigin.horizontal])-on,O=Math.min(g+i[t.anchorOrigin.vertical],S-g-i[t.anchorOrigin.vertical])-on;"left"===d.horizontal&&n.width+on>y-v-i[h.horizontal]&&m+i[h.horizontal+"Rev"]>y-v-i[h.horizontal]?(d.horizontal="right",h.horizontal=h.horizontal+"Rev"):"right"===d.horizontal&&n.width+on>m+i[h.horizontal]&&y-v-i[h.horizontal+"Rev"]>m+i[h.horizontal]?(d.horizontal="left",h.horizontal=h.horizontal+"Rev"):"middle"===d.horizontal&&n.width/2>E&&(d.horizontal=m+i[h.horizontal]S-g-i[h.vertical]&&g+i[h.vertical+"Rev"]>S-g-i[h.vertical]?(d.vertical="bottom",h.vertical=h.vertical+"Rev"):"bottom"===d.vertical&&n.height+on>g+i[h.vertical]&&S-g-i[h.vertical+"Rev"]>g+i[h.vertical]?(d.vertical="top",h.vertical=h.vertical+"Rev"):"center"===d.vertical&&n.height/2>O&&(d.vertical=g+i[h.vertical]0;i--)e.push(Math.floor(256*Math.random()));return e}}(),_n=4096;function bn(){(void 0===dn||pn+16>_n)&&(pn=0,dn=gn(_n));var t=Array.prototype.slice.call(dn,pn,pn+=16);return t[6]=15&t[6]|64,t[8]=63&t[8]|128,mn[t[0]]+mn[t[1]]+mn[t[2]]+mn[t[3]]+"-"+mn[t[4]]+mn[t[5]]+"-"+mn[t[6]]+mn[t[7]]+"-"+mn[t[8]]+mn[t[9]]+"-"+mn[t[10]]+mn[t[11]]+mn[t[12]]+mn[t[13]]+mn[t[14]]+mn[t[15]]}var yn=Object.keys(ei.props).reduce(function(t,e){return(t[e]={})&&t},{}),Sn=i.default.extend({name:"QBtnDropdown",mixins:[Qe,Ot],inheritAttrs:!1,props:Object.assign({},{value:Boolean,split:Boolean,dropdownIcon:String,contentClass:[Array,String,Object],contentStyle:[Array,String,Object],cover:Boolean,persistent:Boolean,noRouteDismiss:Boolean,autoClose:Boolean,menuAnchor:{type:String,default:"bottom end"},menuSelf:{type:String,default:"top end"},menuOffset:Array},yn,{disableMainBtn:Boolean,disableDropdown:Boolean,noIconAnimation:Boolean,toggleAriaLabel:String}),data:function(){return{showing:this.value}},watch:{value:function(t){void 0!==this.$refs.menu&&this.$refs.menu[t?"show":"hide"]()},split:function(){this.hide()}},render:function(t){var e=this,i=Ht(this,"label",[]),n={"aria-expanded":!0===this.showing?"true":"false","aria-haspopup":"true","aria-controls":this.targetUid,"aria-owns":this.targetUid,"aria-label":this.toggleAriaLabel||this.$q.lang.label[!0===this.showing?"collapse":"expand"](this.label)};(!0===this.disable||!1===this.split&&!0===this.disableMainBtn||!0===this.disableDropdown)&&(n["aria-disabled"]="true");var s=[t(ae,{props:{name:this.dropdownIcon||this.$q.iconSet.arrow.dropdown},class:"q-btn-dropdown__arrow"+(!0===this.showing&&!1===this.noIconAnimation?" rotate-180":"")+(!1===this.split?" q-btn-dropdown__arrow-container":"")})];if(!0!==this.disableDropdown&&s.push(t(fn,{key:"menu",ref:"menu",attrs:{id:this.targetUid},props:{cover:this.cover,fit:!0,persistent:this.persistent,noRouteDismiss:this.noRouteDismiss,autoClose:this.autoClose,anchor:this.menuAnchor,self:this.menuSelf,offset:this.menuOffset,contentClass:this.contentClass,contentStyle:this.contentStyle,separateClosePopup:!0,transitionShow:this.transitionShow,transitionHide:this.transitionHide},on:Tt(this,"menu",{"before-show":function(t){e.showing=!0,e.$emit("before-show",t)},show:function(t){e.$emit("show",t),e.$emit("input",!0)},"before-hide":function(t){e.showing=!1,e.$emit("before-hide",t)},hide:function(t){e.$emit("hide",t),e.$emit("input",!1)}})},Ht(this,"default"))),!1===this.split)return t(Xe,{key:"nonSpl",class:"q-btn-dropdown q-btn-dropdown--simple",props:Object.assign({},this.$props,{disable:!0===this.disable||!0===this.disableMainBtn,noWrap:!0,round:!1}),attrs:Object.assign({},n,this.qAttrs),on:Tt(this,"nonSpl",{click:function(t){e.$emit("click",t)}}),scopedSlots:{loading:this.$scopedSlots.loading}},i.concat(s));var o=t(Xe,{key:"spl",class:"q-btn-dropdown--current",props:Object.assign({},this.$props,{disable:!0===this.disable||!0===this.disableMainBtn,noWrap:!0,iconRight:this.iconRight,round:!1}),attrs:this.qAttrs,on:Tt(this,"spl",{click:function(t){S(t),e.hide(),e.$emit("click",t)}}),scopedSlots:{loading:this.$scopedSlots.loading}},i);return t(ii,{props:{outline:this.outline,flat:this.flat,rounded:this.rounded,square:this.square,push:this.push,unelevated:this.unelevated,glossy:this.glossy,stretch:this.stretch},staticClass:"q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item"},[o,t(Xe,{staticClass:"q-btn-dropdown__arrow-container q-anchor--skip",attrs:n,props:{disable:!0===this.disable||!0===this.disableDropdown,outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,size:this.size,color:this.color,textColor:this.textColor,dense:this.dense,ripple:this.ripple}},s)])},methods:{toggle:function(t){this.$refs.menu&&this.$refs.menu.toggle(t)},show:function(t){this.$refs.menu&&this.$refs.menu.show(t)},hide:function(t){this.$refs.menu&&this.$refs.menu.hide(t)}},created:function(){this.targetUid="d_"+bn()},mounted:function(){!0===this.value&&this.show()}}),xn={props:{name:String},computed:{formAttrs:function(){return{type:"hidden",name:this.name,value:this.value}}},methods:{__injectFormInput:function(t,e,i){t[e](this.$createElement("input",{staticClass:"hidden",class:i,attrs:this.formAttrs,domProps:this.formDomProps}))}}},wn={props:{name:String},computed:{nameProp:function(){return this.name||this.for}}},Cn=i.default.extend({name:"QBtnToggle",mixins:[Nt,Fe,xn],props:{value:{required:!0},options:{type:Array,required:!0,validator:function(t){return t.every(function(t){return("label"in t||"icon"in t||"slot"in t)&&"value"in t})}},color:String,textColor:String,toggleColor:{type:String,default:"primary"},toggleTextColor:String,outline:Boolean,flat:Boolean,unelevated:Boolean,rounded:Boolean,push:Boolean,glossy:Boolean,size:String,padding:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,readonly:Boolean,disable:Boolean,stack:Boolean,stretch:Boolean,spread:Boolean,clearable:Boolean},computed:{hasActiveValue:function(){var t=this;return void 0!==this.options.find(function(e){return e.value===t.value})},formAttrs:function(){return{type:"hidden",name:this.name,value:this.value}},btnOptions:function(){var t=this,e=function(e,i){return void 0===e[i]?t[i]:e[i]};return this.options.map(function(i,n){return{slot:i.slot,options:{key:n,class:i.class,style:i.style,on:Object.assign({},t.qListeners,{click:function(e){return t.__set(i.value,i,e)}}),attrs:Object.assign({},{"aria-pressed":i.value===t.value?"true":"false"},i.attrs),props:Object.assign({},i,{slot:void 0,class:void 0,style:void 0,value:void 0,attrs:void 0,outline:t.outline,flat:t.flat,rounded:t.rounded,push:t.push,unelevated:t.unelevated,dense:t.dense,disable:!0===t.disable||!0===i.disable,color:i.value===t.value?e(i,"toggleColor"):e(i,"color"),textColor:i.value===t.value?e(i,"toggleTextColor"):e(i,"textColor"),noCaps:!0===e(i,"noCaps"),noWrap:!0===e(i,"noWrap"),size:e(i,"size"),padding:e(i,"padding"),ripple:e(i,"ripple"),stack:!0===e(i,"stack"),stretch:!0===e(i,"stretch")})}}})}},methods:{__set:function(t,e,i){!0!==this.readonly&&(this.value===t?!0===this.clearable&&(this.$emit("input",null,null),this.$emit("clear")):this.$emit("input",t,e),this.$emit("click",i))}},render:function(t){var e=this,i=this.btnOptions.map(function(i){return t(Xe,Object.assign({},i.options),void 0!==i.slot?Ht(e,i.slot):void 0)});return void 0!==this.name&&!0!==this.disable&&!0===this.hasActiveValue&&this.__injectFormInput(i,"push"),t(ii,{staticClass:"q-btn-toggle",props:{outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,stretch:this.stretch,unelevated:this.unelevated,glossy:this.glossy,spread:this.spread}},Wt(i,this,"default"))}}),kn=i.default.extend({name:"QCard",mixins:[Nt,ue,Vt],props:{square:Boolean,flat:Boolean,bordered:Boolean},computed:{classes:function(){return"q-card q-card--"+this.darkSuffix+" q-"+this.darkSuffix+(!0===this.bordered?" q-card--bordered":"")+(!0===this.square?" q-card--square no-border-radius":"")+(!0===this.flat?" q-card--flat no-shadow":"")}},render:function(t){return t(this.tag,{class:this.classes,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),qn=i.default.extend({name:"QCardSection",mixins:[Nt,Vt],props:{horizontal:Boolean},computed:{classes:function(){return"q-card__section q-card__section--"+(!0===this.horizontal?"horiz row no-wrap":"vert")}},render:function(t){return t(this.tag,{class:this.classes,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),Tn=i.default.extend({name:"QCardActions",mixins:[Nt,ge],props:{vertical:Boolean},computed:{classes:function(){return"q-card__actions--"+(!0===this.vertical?"vert column":"horiz row")+" "+this.alignClass}},render:function(t){return t("div",{staticClass:"q-card__actions",class:this.classes,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),Mn="function"==typeof Map,$n="function"==typeof Set,Ln="function"==typeof ArrayBuffer;function En(t,e){if(t===e)return!0;if(null!==t&&null!==e&&"object"==typeof t&&"object"==typeof e){if(t.constructor!==e.constructor)return!1;var i,n;if(t.constructor===Array){if((i=t.length)!==e.length)return!1;for(n=i;0!=n--;)if(!0!==En(t[n],e[n]))return!1;return!0}if(!0===Mn&&t.constructor===Map){if(t.size!==e.size)return!1;for(n=t.entries().next();!0!==n.done;){if(!0!==e.has(n.value[0]))return!1;n=n.next()}for(n=t.entries().next();!0!==n.done;){if(!0!==En(n.value[1],e.get(n.value[0])))return!1;n=n.next()}return!0}if(!0===$n&&t.constructor===Set){if(t.size!==e.size)return!1;for(n=t.entries().next();!0!==n.done;){if(!0!==e.has(n.value[0]))return!1;n=n.next()}return!0}if(!0===Ln&&null!=t.buffer&&t.buffer.constructor===ArrayBuffer){if((i=t.length)!==e.length)return!1;for(n=i;0!=n--;)if(t[n]!==e[n])return!1;return!0}if(t.constructor===RegExp)return t.source===e.source&&t.flags===e.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===e.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===e.toString();var s=Object.keys(t).filter(function(e){return void 0!==t[e]});if((i=s.length)!==Object.keys(e).filter(function(t){return void 0!==e[t]}).length)return!1;for(n=i;0!=n--;){var o=s[n];if(!0!==En(t[o],e[o]))return!1}return!0}return t!=t&&e!=e}function On(t){return null!==t&&"object"==typeof t&&!0!==Array.isArray(t)}function An(t){return"[object Date]"===Object.prototype.toString.call(t)}function Bn(t){return"[object RegExp]"===Object.prototype.toString.call(t)}function Pn(t){return"number"==typeof t&&isFinite(t)}var zn={deepEqual:En,object:On,date:An,regexp:Bn,number:Pn},In=["left","right","up","down","horizontal","vertical"],Rn={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0,all:!0};function Fn(t){var e={};return In.forEach(function(i){t[i]&&(e[i]=!0)}),0===Object.keys(e).length?Rn:(!0===e.horizontal&&(e.left=e.right=!0),!0===e.vertical&&(e.up=e.down=!0),!0===e.left&&!0===e.right&&(e.horizontal=!0),!0===e.up&&!0===e.down&&(e.vertical=!0),!0===e.horizontal&&!0===e.vertical&&(e.all=!0),e)}function Dn(t,e){return void 0===e.event&&void 0!==t.target&&!0!==t.target.draggable&&"function"==typeof e.handler&&"INPUT"!==t.target.nodeName.toUpperCase()&&(void 0===t.qClonedBy||-1===t.qClonedBy.indexOf(e.uid))}function jn(t){var e=[.06,6,50];return"string"==typeof t&&t.length&&t.split(":").forEach(function(t,i){var n=parseFloat(t);n&&(e[i]=n)}),e}function Vn(t){var e=t.__qtouchswipe;void 0!==e&&(T(e,"main_mouse"),T(e,"main_touch"),T(e,"temp"),!0===u.is.firefox&&C(t,!1),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchswipe)}function Nn(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&T(e,"main_mouse"),!0===i.mouse&&q(e,"main_mouse",[[t,"mousedown","mouseStart","passive"+(!0===i.mouseCapture||!0===i.mousecapture?"Capture":"")]])),!0===u.has.touch&&e.modifiers.capture!==i.capture&&(T(e,"main_touch"),q(e,"main_touch",[[t,"touchstart","touchStart","passive"+(!0===i.capture?"Capture":"")],[t,"touchmove","noop","notPassiveCapture"]])),e.modifiers=i}var Hn={name:"touch-swipe",bind:function(t,e){var i=e.modifiers,n=e.arg,s=e.value;void 0!==t.__qtouchswipe&&(Vn(t),t.__qtouchswipe_destroyed=!0);var o={handler:s,sensitivity:jn(n),arg:n,modifiers:{capture:null},direction:Fn(i),noop:p,mouseStart:function(t){Dn(t,o)&&m(t)&&(q(o,"temp",[[document,"mousemove","move","notPassive"+(!0===o.modifiers.mouseCapture?"Capture":"")],[document,"mouseup","end","notPassiveCapture"]]),o.start(t,!0))},touchStart:function(t){if(Dn(t,o)){var e=t.target;q(o,"temp",[[e,"touchmove","move","notPassiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start:function(e,i){!0===u.is.firefox&&C(t,!0);var n=v(e);o.event={x:n.left,y:n.top,time:Date.now(),mouse:!0===i,dir:!1}},move:function(t){if(void 0!==o.event)if(!1===o.event.dir){var e=Date.now()-o.event.time;if(0!==e){var i=v(t),n=i.left-o.event.x,s=Math.abs(n),r=i.top-o.event.y,a=Math.abs(r);if(!0!==o.event.mouse){if(so.sensitivity[0]&&(o.event.dir=r<0?"up":"down"),!0===o.direction.horizontal&&s>a&&a<100&&l>o.sensitivity[0]&&(o.event.dir=n<0?"left":"right"),!0===o.direction.up&&so.sensitivity[0]&&(o.event.dir="up"),!0===o.direction.down&&s0&&s<100&&c>o.sensitivity[0]&&(o.event.dir="down"),!0===o.direction.left&&s>a&&n<0&&a<100&&l>o.sensitivity[0]&&(o.event.dir="left"),!0===o.direction.right&&s>a&&n>0&&a<100&&l>o.sensitivity[0]&&(o.event.dir="right"),!1!==o.event.dir?(w(t),!0===o.event.mouse&&(document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),ni(),o.styleCleanup=function(t){o.styleCleanup=void 0,document.body.classList.remove("non-selectable");var e=function(){document.body.classList.remove("no-pointer-events--children")};!0===t?setTimeout(e,50):e()}),o.handler({evt:t,touch:!0!==o.event.mouse,mouse:o.event.mouse,direction:o.event.dir,duration:e,distance:{x:s,y:a}})):o.end(t)}}else w(t)},end:function(e){void 0!==o.event&&(T(o,"temp"),!0===u.is.firefox&&C(t,!1),void 0!==o.styleCleanup&&o.styleCleanup(!0),void 0!==e&&!1!==o.event.dir&&w(e),o.event=void 0)}};t.__qtouchswipe=o,Nn(t,o,i)},update:function(t,e){var i=e.modifiers,n=e.arg,s=e.value,o=e.oldValue,r=t.__qtouchswipe;void 0!==r&&(o!==s&&("function"!=typeof s&&r.end(),r.handler=s),r.arg!==n&&(r.sensitivity=jn(n)),!0!==En(r.modifiers,i)&&(Nn(t,r,i),r.direction=Fn(i)))},unbind:function(t){void 0===t.__qtouchswipe_destroyed?Vn(t):delete t.__qtouchswipe_destroyed}};function Qn(t){return t("div",{key:"stop",staticClass:"q-panel scroll",on:Tt(this,"stop",{input:S})},Ht(this,"default"))}var Wn=i.default.extend({render:Qn}),Un={mixins:[Nt],directives:{TouchSwipe:Hn},props:{value:{required:!0},animated:Boolean,infinite:Boolean,swipeable:Boolean,vertical:Boolean,transitionPrev:String,transitionNext:String,keepAlive:Boolean,keepAliveInclude:[String,Array,RegExp],keepAliveExclude:[String,Array,RegExp],keepAliveMax:Number},data:function(){return{panelIndex:null,panelTransition:null}},computed:{panelDirectives:function(){if(!0===this.swipeable)return[{name:"touch-swipe",value:this.__swipe,modifiers:{horizontal:!0!==this.vertical,vertical:this.vertical,mouse:!0}}]},contentKey:function(){return"string"==typeof this.value||"number"==typeof this.value?this.value:String(this.value)},transitionPrevComputed:function(){return this.transitionPrev||"slide-"+(!0===this.vertical?"down":"right")},transitionNextComputed:function(){return this.transitionNext||"slide-"+(!0===this.vertical?"up":"left")},keepAliveProps:function(){return{include:this.keepAliveInclude,exclude:this.keepAliveExclude,max:this.keepAliveMax}},needsUniqueWrapper:function(){return void 0!==this.keepAliveInclude||void 0!==this.keepAliveExclude}},watch:{value:function(t,e){var i=this,n=!0===this.__isValidPanelName(t)?this.__getPanelIndex(t):-1;!0!==this.__forcedPanelTransition&&this.__updatePanelTransition(-1===n?0:n-1&&n0&&-1!==e&&e!==s.length&&this.__go(t,-1===t?s.length:-1)},__swipe:function(t){var e=!0===this.vertical?"up":"left";this.__go((!0===this.$q.lang.rtl?-1:1)*(t.direction===e?1:-1))},__updatePanelIndex:function(){var t=this.__getPanelIndex(this.value);return this.panelIndex!==t&&(this.panelIndex=t),!0},__getPanelContent:function(t){var e=this;if(0!==this.panels.length){var n=this.__isValidPanelName(this.value)&&this.__updatePanelIndex()&&this.panels[this.panelIndex],s=!0===this.keepAlive?[t("keep-alive",{props:this.keepAliveProps},[t(!0===this.needsUniqueWrapper?Mt(this,this.contentKey,function(){return i.default.extend({name:e.contentKey,render:Qn})}):Wn,{key:this.contentKey},[n])])]:[t("div",{staticClass:"q-panel scroll",key:this.contentKey,on:Tt(this,"stop",{input:S})},[n])];return!0===this.animated?[t("transition",{props:{name:this.panelTransition},on:ti},s)]:s}}},render:function(t){var e=this;return this.panels=Ht(this,"default",[]).filter(function(t){return void 0!==t&&void 0!==t.componentOptions&&void 0!==t.componentOptions.propsData&&e.__isValidPanelName(t.componentOptions.propsData.name)}),this.__renderPanels(t)}},Yn={mixins:[Nt],props:{name:{required:!0},disable:Boolean}},Kn=0,Gn={props:{fullscreen:Boolean,noRouteFullscreenExit:Boolean},data:function(){return{inFullscreen:!1}},watch:{$route:function(){!0!==this.noRouteFullscreenExit&&this.exitFullscreen()},fullscreen:function(t){this.inFullscreen!==t&&this.toggleFullscreen()},inFullscreen:function(t){this.$emit("update:fullscreen",t),this.$emit("fullscreen",t)}},methods:{toggleFullscreen:function(){!0===this.inFullscreen?this.exitFullscreen():this.setFullscreen()},setFullscreen:function(){!0!==this.inFullscreen&&(this.inFullscreen=!0,this.container=this.$el.parentNode,this.container.replaceChild(this.fullscreenFillerNode,this.$el),document.body.appendChild(this.$el),1===++Kn&&document.body.classList.add("q-body--fullscreen-mixin"),this.__historyFullscreen={handler:this.exitFullscreen},Z.add(this.__historyFullscreen))},exitFullscreen:function(){var t=this;!0===this.inFullscreen&&(void 0!==this.__historyFullscreen&&(Z.remove(this.__historyFullscreen),this.__historyFullscreen=void 0),this.container.replaceChild(this.$el,this.fullscreenFillerNode),this.inFullscreen=!1,0===(Kn=Math.max(0,Kn-1))&&(document.body.classList.remove("q-body--fullscreen-mixin"),void 0!==this.$el.scrollIntoView&&setTimeout(function(){t.$el.scrollIntoView()})))}},beforeMount:function(){this.fullscreenFillerNode=document.createElement("span")},mounted:function(){!0===this.fullscreen&&this.setFullscreen()},beforeDestroy:function(){this.exitFullscreen()}},Xn=i.default.extend({name:"QCarousel",mixins:[ue,Un,Gn],props:{height:String,padding:Boolean,controlType:{type:String,validator:function(t){return["regular","flat","outline","push","unelevated"].includes(t)},default:"flat"},controlColor:String,controlTextColor:String,autoplay:[Number,Boolean],arrows:Boolean,prevIcon:String,nextIcon:String,navigation:Boolean,navigationPosition:{type:String,validator:function(t){return["top","right","bottom","left"].includes(t)}},navigationIcon:String,navigationActiveIcon:String,thumbnails:Boolean},computed:{style:function(){if(!0!==this.inFullscreen&&void 0!==this.height)return{height:this.height}},direction:function(){return!0===this.vertical?"vertical":"horizontal"},classes:function(){return"q-carousel q-panel-parent q-carousel--with"+(!0===this.padding?"":"out")+"-padding"+(!0===this.inFullscreen?" fullscreen":"")+" q-carousel--"+this.darkSuffix+" q-"+this.darkSuffix+(!0===this.arrows?" q-carousel--arrows-"+this.direction:"")+(!0===this.navigation?" q-carousel--navigation-"+this.navigationPositionComputed:"")},arrowIcons:function(){var t=[this.prevIcon||this.$q.iconSet.carousel[!0===this.vertical?"up":"left"],this.nextIcon||this.$q.iconSet.carousel[!0===this.vertical?"down":"right"]];return!1===this.vertical&&!0===this.$q.lang.rtl?t.reverse():t},navIcon:function(){return this.navigationIcon||this.$q.iconSet.carousel.navigationIcon},navActiveIcon:function(){return this.navigationActiveIcon||this.navIcon},navigationPositionComputed:function(){return this.navigationPosition||(!0===this.vertical?"right":"bottom")},controlProps:function(){var t;return(t={color:this.controlColor,textColor:this.controlTextColor,round:!0})[this.controlType]=!0,t.dense=!0,t},transitionPrevComputed:function(){return this.transitionPrev||"fade"},transitionNextComputed:function(){return this.transitionNext||"fade"}},watch:{value:function(){this.autoplay&&(clearInterval(this.timer),this.__startTimer())},autoplay:function(t){t?this.__startTimer():clearInterval(this.timer)}},methods:{__startTimer:function(){var t=!0===Pn(this.autoplay)?this.autoplay:5e3;this.timer=setTimeout(t>=0?this.next:this.previous,Math.abs(t))},__getNavigationContainer:function(t,e,i){return t("div",{class:"q-carousel__control q-carousel__navigation no-wrap absolute flex q-carousel__navigation--"+e+" q-carousel__navigation--"+this.navigationPositionComputed+(void 0!==this.controlColor?" text-"+this.controlColor:"")},[t("div",{staticClass:"q-carousel__navigation-inner flex flex-center no-wrap"},this.__getEnabledPanels().map(i))])},__getContent:function(t){var e=this,i=[];if(!0===this.navigation){var n=void 0!==this.$scopedSlots["navigation-icon"]?this.$scopedSlots["navigation-icon"]:function(i){return t(Xe,{key:"nav#"+i.name,class:"q-carousel__navigation-icon q-carousel__navigation-icon--"+(!0===i.active?"":"in")+"active",props:i.btnProps,on:Tt(e,"nav#"+i.name,{click:i.onClick})})},s=this.panels.length-1;i.push(this.__getNavigationContainer(t,"buttons",function(t,i){var o=t.componentOptions.propsData.name,r=e.panelIndex===i;return n({index:i,maxIndex:s,name:o,active:r,btnProps:Object.assign({},{icon:!0===r?e.navActiveIcon:e.navIcon,size:"sm"},e.controlProps),onClick:function(){e.goTo(o)}})}))}else if(!0===this.thumbnails){var o=void 0!==this.controlColor?" text-"+this.controlColor:"";i.push(this.__getNavigationContainer(t,"thumbnails",function(i){var n=i.componentOptions.propsData;return t("img",{class:"q-carousel__thumbnail q-carousel__thumbnail--"+(n.name===e.value?"":"in")+"active"+o,attrs:{src:n.imgSrc},key:"tmb#"+n.name,on:Tt(e,"tmb#"+n.name,{click:function(){e.goTo(n.name)}})})}))}return!0===this.arrows&&this.panelIndex>=0&&((!0===this.infinite||this.panelIndex>0)&&i.push(t("div",{staticClass:"q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--"+this.direction+" absolute flex flex-center"},[t(Xe,{key:"prev",props:Object.assign({},{icon:this.arrowIcons[0]},this.controlProps),on:Tt(this,"prev",{click:this.previous})})])),(!0===this.infinite||this.panelIndex1?function(t){return t}:function(e){return t("div",[e])};return e.map(function(e,i){return t("div",{key:i,class:n.messageClass},[t("div",{class:n.textClass},n.__wrapStamp(t,o(e)))])})}},render:function(t){var e,i,n=[];void 0!==this.$scopedSlots.avatar?n.push(this.$scopedSlots.avatar()):void 0!==this.avatar&&n.push(t("img",{class:"q-message-avatar q-message-avatar--"+this.op,attrs:{src:this.avatar,"aria-hidden":"true"}}));var s=[];void 0!==this.$scopedSlots.name?s.push(t("div",{class:"q-message-name q-message-name--"+this.op},this.$scopedSlots.name())):void 0!==this.name&&s.push(t("div",{class:"q-message-name q-message-name--"+this.op,domProps:(e={},e[!0===this.nameSanitize?"textContent":"innerHTML"]=this.name,e)})),void 0!==this.text&&s.push(this.__getText(t,this.text)),void 0!==this.$scopedSlots.default&&s.push(this.__getText(t,this.$scopedSlots.default(),!0)),n.push(t("div",{class:this.sizeClass},s));var o=[];return void 0!==this.$scopedSlots.label?o.push(t("div",{staticClass:"q-message-label"},this.$scopedSlots.label())):void 0!==this.label&&o.push(t("div",{staticClass:"q-message-label",domProps:(i={},i[!0===this.labelSanitize?"textContent":"innerHTML"]=this.label,i)})),o.push(t("div",{class:this.containerClass},n)),t("div",{class:"q-message q-message-"+this.op,on:Object.assign({},this.qListeners)},o)}}),es=Dt({xs:30,sm:35,md:40,lg:50,xl:60}),is={computed:{__refocusTargetEl:function(){if(!0!==this.disable)return this.$createElement("span",{ref:"refocusTarget",staticClass:"no-outline",attrs:{tabindex:-1}})}},methods:{__refocusTarget:function(t){if(!0===this.$el.contains(document.activeElement)){var e=!0===this.$q.interaction.isPointer?this.$refs.refocusTarget:this.$el;void 0!==e&&document.activeElement!==e&&e.focus()}}}},ns={mixins:[ue,es,xn,is],props:{value:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:function(t){return"tf"===t||"ft"===t}},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},computed:{isTrue:function(){return!0===this.modelIsArray?this.index>-1:this.value===this.trueValue},isFalse:function(){return!0===this.modelIsArray?-1===this.index:this.value===this.falseValue},isIndeterminate:function(){return!1===this.isTrue&&!1===this.isFalse},index:function(){if(!0===this.modelIsArray)return this.value.indexOf(this.val)},modelIsArray:function(){return void 0!==this.val&&Array.isArray(this.value)},computedTabindex:function(){return!0===this.disable?-1:this.tabindex||0},classes:function(){return"q-"+this.type+" cursor-pointer no-outline row inline no-wrap items-center"+(!0===this.disable?" disabled":"")+" q-"+this.type+"--"+this.darkSuffix+(!0===this.dense?" q-"+this.type+"--dense":"")+(!0===this.leftLabel?" reverse":"")},innerClass:function(){var t=!0===this.isTrue?"truthy":!0===this.isFalse?"falsy":"indet",e=void 0===this.color||!0!==this.keepColor&&("toggle"===this.type?!0!==this.isTrue:!0===this.isFalse)?"":" text-"+this.color;return"q-"+this.type+"__inner--"+t+e},formAttrs:function(){var t={type:"checkbox"};return void 0!==this.name&&Object.assign(t,{checked:this.isTrue,name:this.name,value:!0===this.modelIsArray?this.val:this.trueValue}),t},attrs:function(){var t={tabindex:this.computedTabindex,role:"toggle"===this.type?"switch":"checkbox","aria-label":this.label,"aria-checked":!0===this.isIndeterminate?"mixed":!0===this.isTrue?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{toggle:function(t){void 0!==t&&(w(t),this.__refocusTarget(t)),!0!==this.disable&&this.$emit("input",this.__getNextValue(),t)},__getNextValue:function(){if(!0===this.modelIsArray){if(!0===this.isTrue){var t=this.value.slice();return t.splice(this.index,1),t}return this.value.concat([this.val])}if(!0===this.isTrue){if("ft"!==this.toggleOrder||!1===this.toggleIndeterminate)return this.falseValue}else{if(!0!==this.isFalse)return"ft"!==this.toggleOrder?this.trueValue:this.falseValue;if("ft"===this.toggleOrder||!1===this.toggleIndeterminate)return this.trueValue}return this.indeterminateValue},__onKeydown:function(t){13!==t.keyCode&&32!==t.keyCode||w(t)},__onKeyup:function(t){13!==t.keyCode&&32!==t.keyCode||this.toggle(t)}},render:function(t){var e=this.__getInner(t);!0!==this.disable&&this.__injectFormInput(e,"unshift","q-"+this.type+"__native absolute q-ma-none q-pa-none");var i=[t("div",{staticClass:"q-"+this.type+"__inner relative-position non-selectable",class:this.innerClass,style:this.sizeStyle,attrs:{"aria-hidden":"true"}},e)];void 0!==this.__refocusTargetEl&&i.push(this.__refocusTargetEl);var n=void 0!==this.label?Wt([this.label],this,"default"):Ht(this,"default");return void 0!==n&&i.push(t("div",{staticClass:"q-"+this.type+"__label q-anchor--skip"},n)),t("div",{key:"inpExt",class:this.classes,attrs:this.attrs,on:Tt(this,"inpExt",{click:this.toggle,keydown:this.__onKeydown,keyup:this.__onKeyup})},i)}},ss=i.default.extend({name:"QCheckbox",mixins:[ns],computed:{computedIcon:function(){return!0===this.isTrue?this.checkedIcon:!0===this.isIndeterminate?this.indeterminateIcon:this.uncheckedIcon}},methods:{__getInner:function(t){return void 0!==this.computedIcon?[t("div",{key:"icon",staticClass:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[t(ae,{staticClass:"q-checkbox__icon",props:{name:this.computedIcon}})])]:[t("div",{key:"svg",staticClass:"q-checkbox__bg absolute"},[t("svg",{staticClass:"q-checkbox__svg fit absolute-full",attrs:{focusable:"false",viewBox:"0 0 24 24"}},[t("path",{staticClass:"q-checkbox__truthy",attrs:{fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}}),t("path",{staticClass:"q-checkbox__indet",attrs:{d:"M4,14H20V10H4"}})])])]}},created:function(){this.type="checkbox"}}),os=i.default.extend({name:"QChip",mixins:[Fe,ue,Dt({xs:8,sm:10,md:14,lg:20,xl:24})],model:{event:"remove"},props:{dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,value:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean},computed:{classes:function(){var t,e=!0===this.outline&&this.color||this.textColor;return(t={})["bg-"+this.color]=!1===this.outline&&void 0!==this.color,t["text-"+e+" q-chip--colored"]=e,t.disabled=this.disable,t["q-chip--dense"]=this.dense,t["q-chip--outline"]=this.outline,t["q-chip--selected"]=this.selected,t["q-chip--clickable cursor-pointer non-selectable q-hoverable"]=this.isClickable,t["q-chip--square"]=this.square,t["q-chip--"+this.localDarkSuffix]=!0,t},localDarkSuffix:function(){return"string"==typeof this.color&&this.color.trim().length>0?!0===this.dark?"dark":"light":this.darkSuffix},hasLeftIcon:function(){return!0===this.selected||void 0!==this.icon},leftIcon:function(){return!0===this.selected?this.iconSelected||this.$q.iconSet.chip.selected:this.icon},removeIcon:function(){return this.iconRemove||this.$q.iconSet.chip.remove},isClickable:function(){return!1===this.disable&&(!0===this.clickable||null!==this.selected)},attrs:function(){var t=!0===this.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.tabindex||0};return{chip:t,remove:Object.assign({},t,{role:"button","aria-hidden":"false","aria-label":this.removeAriaLabel||this.$q.lang.label.remove})}}},methods:{__onKeyup:function(t){13===t.keyCode&&this.__onClick(t)},__onClick:function(t){this.disable||(this.$emit("update:selected",!this.selected),this.$emit("click",t))},__onRemove:function(t){void 0!==t.keyCode&&13!==t.keyCode||(w(t),!this.disable&&this.$emit("remove",!1))},__getContent:function(t){var e=[];!0===this.isClickable&&e.push(t("div",{staticClass:"q-focus-helper"})),!0===this.hasLeftIcon&&e.push(t(ae,{staticClass:"q-chip__icon q-chip__icon--left",props:{name:this.leftIcon}}));var i=void 0!==this.label?[t("div",{staticClass:"ellipsis"},[this.label])]:void 0;return e.push(t("div",{staticClass:"q-chip__content col row no-wrap items-center q-anchor--skip"},Ut(i,this,"default"))),this.iconRight&&e.push(t(ae,{staticClass:"q-chip__icon q-chip__icon--right",props:{name:this.iconRight}})),!0===this.removable&&e.push(t(ae,{key:"non",staticClass:"q-chip__icon q-chip__icon--remove cursor-pointer",props:{name:this.removeIcon},attrs:this.attrs.remove,on:Tt(this,"non",{click:this.__onRemove,keyup:this.__onRemove})})),e}},render:function(t){if(!1!==this.value){var e={staticClass:"q-chip row inline no-wrap items-center",class:this.classes,style:this.sizeStyle};return!0===this.isClickable&&Object.assign(e,{key:"click",attrs:this.attrs.chip,on:Tt(this,"click",{click:this.__onClick,keyup:this.__onKeyup}),directives:Tt(this,"dir#"+this.ripple,[{name:"ripple",value:this.ripple}])}),t("div",e,this.__getContent(t))}}}),rs=100*Math.PI,as=Math.round(1e3*rs)/1e3,ls=i.default.extend({name:"QCircularProgress",mixins:[Nt,jt],props:{value:{type:Number,default:0},min:{type:Number,default:0},max:{type:Number,default:100},color:String,centerColor:String,trackColor:String,fontSize:String,rounded:Boolean,thickness:{type:Number,default:.2,validator:function(t){return t>=0&&t<=1}},angle:{type:Number,default:0},indeterminate:Boolean,showValue:Boolean,reverse:Boolean,instantFeedback:Boolean},computed:{normalizedValue:function(){return wt(this.value,this.min,this.max)},svgStyle:function(){var t=!0===this.$q.lang.rtl?-this.angle:this.angle;return{transform:this.reverse!==(!0===this.$q.lang.rtl)?"scale3d(-1, 1, 1) rotate3d(0, 0, 1, "+(-90-t)+"deg)":"rotate3d(0, 0, 1, "+(t-90)+"deg)"}},circleStyle:function(){if(!0!==this.instantFeedback&&!0!==this.indeterminate)return{transition:"stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease"}},viewBox:function(){return 100/(1-this.thickness/2)},viewBoxAttr:function(){return this.viewBox/2+" "+this.viewBox/2+" "+this.viewBox+" "+this.viewBox},strokeDashOffset:function(){return(1-(this.normalizedValue-this.min)/(this.max-this.min))*rs},strokeWidth:function(){return this.thickness/2*this.viewBox},attrs:function(){return{role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":!0===this.indeterminate?void 0:this.normalizedValue}}},methods:{__getCircle:function(t,e){var i=e.thickness,n=e.offset,s=e.color,o=e.cls,r=e.rounded;return t("circle",{staticClass:"q-circular-progress__"+o,class:void 0!==s?"text-"+s:null,style:this.circleStyle,attrs:{fill:"transparent",stroke:"currentColor","stroke-width":i,"stroke-dasharray":as,"stroke-dashoffset":n,"stroke-linecap":r,cx:this.viewBox,cy:this.viewBox,r:50}})}},render:function(t){var e=[];void 0!==this.centerColor&&"transparent"!==this.centerColor&&e.push(t("circle",{staticClass:"q-circular-progress__center",class:"text-"+this.centerColor,attrs:{fill:"currentColor",r:50-this.strokeWidth/2,cx:this.viewBox,cy:this.viewBox}})),void 0!==this.trackColor&&"transparent"!==this.trackColor&&e.push(this.__getCircle(t,{cls:"track",thickness:this.strokeWidth,offset:0,color:this.trackColor})),e.push(this.__getCircle(t,{cls:"circle",thickness:this.strokeWidth,offset:this.strokeDashOffset,color:this.color,rounded:!0===this.rounded?"round":void 0}));var i=[t("svg",{staticClass:"q-circular-progress__svg",style:this.svgStyle,attrs:{focusable:"false",viewBox:this.viewBoxAttr,"aria-hidden":"true"}},e)];return!0===this.showValue&&i.push(t("div",{staticClass:"q-circular-progress__text absolute-full row flex-center content-center",style:{fontSize:this.fontSize}},void 0!==this.$scopedSlots.default?this.$scopedSlots.default():[t("div",[this.normalizedValue])])),t("div",{staticClass:"q-circular-progress",class:"q-circular-progress--"+(!0===this.indeterminate?"in":"")+"determinate",style:this.sizeStyle,on:Object.assign({},this.qListeners),attrs:this.attrs},Ut(i,this,"internal"))}}),cs=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,us=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,hs=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,ds=/^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])\)$/,fs=/^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)\)$/,ps={date:function(t){return/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t)},time:function(t){return/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(t)},fulltime:function(t){return/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(t)},timeOrFulltime:function(t){return/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(t)},email:function(t){return/^(([^<>()[\]\\.,;:\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(t)},hexColor:function(t){return cs.test(t)},hexaColor:function(t){return us.test(t)},hexOrHexaColor:function(t){return hs.test(t)},rgbColor:function(t){return ds.test(t)},rgbaColor:function(t){return fs.test(t)},rgbOrRgbaColor:function(t){return ds.test(t)||fs.test(t)},hexOrRgbColor:function(t){return cs.test(t)||ds.test(t)},hexaOrRgbaColor:function(t){return us.test(t)||fs.test(t)},anyColor:function(t){return hs.test(t)||ds.test(t)||fs.test(t)}},ms={testPattern:ps};function vs(t,e){void 0===e&&(e=250);var i,n=!1;return function(){return!1===n&&(n=!0,setTimeout(function(){n=!1},e),i=t.apply(this,arguments)),i}}function gs(t,e,i){var n,s=v(t),o=s.left-e.event.x,r=s.top-e.event.y,a=Math.abs(o),l=Math.abs(r),c=e.direction;!0===c.horizontal&&!0!==c.vertical?n=o<0?"left":"right":!0!==c.horizontal&&!0===c.vertical?n=r<0?"up":"down":!0===c.up&&r<0?(n="up",a>l&&(!0===c.left&&o<0?n="left":!0===c.right&&o>0&&(n="right"))):!0===c.down&&r>0?(n="down",a>l&&(!0===c.left&&o<0?n="left":!0===c.right&&o>0&&(n="right"))):!0===c.left&&o<0?(n="left",a0&&(n="down"))):!0===c.right&&o>0&&(n="right",a0&&(n="down")));var u=!1;if(void 0===n&&!1===i){if(!0===e.event.isFirst||void 0===e.event.lastDir)return{};u=!0,"left"===(n=e.event.lastDir)||"right"===n?(s.left-=o,a=0,o=0):(s.top-=r,l=0,r=0)}return{synthetic:u,payload:{evt:t,touch:!0!==e.event.mouse,mouse:!0===e.event.mouse,position:s,direction:n,isFirst:e.event.isFirst,isFinal:!0===i,duration:Date.now()-e.event.time,distance:{x:a,y:l},offset:{x:o,y:r},delta:{x:s.left-e.event.lastX,y:s.top-e.event.lastY}}}}function _s(t){var e=t.__qtouchpan;void 0!==e&&(void 0!==e.event&&e.end(),T(e,"main_mouse"),T(e,"main_touch"),T(e,"temp"),!0===u.is.firefox&&C(t,!1),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchpan)}function bs(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&T(e,"main_mouse"),!0===i.mouse&&q(e,"main_mouse",[[t,"mousedown","mouseStart","passive"+(!0===i.mouseCapture||!0===i.mousecapture?"Capture":"")]])),!0===u.has.touch&&e.modifiers.capture!==i.capture&&(T(e,"main_touch"),q(e,"main_touch",[[t,"touchstart","touchStart","passive"+(!0===i.capture?"Capture":"")],[t,"touchmove","noop","notPassiveCapture"]])),e.modifiers=i}function ys(t,e,i){!0===t.modifiers.mouse&&!0===i?w(e):(!0===t.modifiers.stop&&S(e),!0===t.modifiers.prevent&&x(e))}var Ss=0,xs={name:"touch-pan",bind:function(t,e){var i=e.modifiers,n=e.value;void 0!==t.__qtouchpan&&(_s(t),t.__qtouchpan_destroyed=!0);var s={uid:"qvtp_"+Ss++,handler:n,modifiers:{capture:null},direction:Fn(i),noop:p,mouseStart:function(t){Dn(t,s)&&m(t)&&(q(s,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),s.start(t,!0))},touchStart:function(t){if(Dn(t,s)){var e=t.target;q(s,"temp",[[e,"touchmove","move","notPassiveCapture"],[e,"touchcancel","end","passiveCapture"],[e,"touchend","end","passiveCapture"]]),s.start(t)}},start:function(e,i){if(!0===u.is.firefox&&C(t,!0),s.lastEvt=e,!0===i||!0===s.modifiers.stop){if(!0!==s.direction.all&&(!0!==i||!0!==s.modifiers.mouseAllDir&&!0!==s.modifiers.mousealldir)){var n=e.type.indexOf("mouse")>-1?new MouseEvent(e.type,e):new TouchEvent(e.type,e);!0===e.defaultPrevented&&x(n),!0===e.cancelBubble&&S(n),Object.assign(n,{qClickOutside:e.qClickOutside,qAnchorHandled:e.qAnchorHandled,qClonedBy:void 0===e.qClonedBy?[s.uid]:e.qClonedBy.concat(s.uid)}),s.initialEvent={target:e.target,event:n}}S(e)}var o=v(e),r=o.left,a=o.top;s.event={x:r,y:a,time:Date.now(),mouse:!0===i,detected:!1,isFirst:!0,isFinal:!1,lastX:r,lastY:a}},move:function(t){if(void 0!==s.event){s.lastEvt=t;var e=!0===s.event.mouse,i=function(){var i;ys(s,t,e),!0!==s.modifiers.preserveCursor&&!0!==s.modifiers.preservecursor&&(i=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),!0===e&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),ni(),s.styleCleanup=function(t){if(s.styleCleanup=void 0,void 0!==i&&(document.documentElement.style.cursor=i),document.body.classList.remove("non-selectable"),!0===e){var n=function(){document.body.classList.remove("no-pointer-events--children")};void 0!==t?setTimeout(function(){n(),t()},50):n()}else void 0!==t&&t()}};if(!0!==s.event.detected){if(!0===s.direction.all||!0===e&&(!0===s.modifiers.mouseAllDir||!0===s.modifiers.mousealldir))return i(),s.event.detected=!0,void s.move(t);var n=v(t),o=n.left-s.event.x,r=n.top-s.event.y,a=Math.abs(o),l=Math.abs(r);a!==l&&(!0===s.direction.horizontal&&a>l||!0===s.direction.vertical&&a0||!0===s.direction.left&&a>l&&o<0||!0===s.direction.right&&a>l&&o>0?(s.event.detected=!0,s.move(t)):s.end(t,!0))}else{!0!==s.event.isFirst&&ys(s,t,s.event.mouse);var c=gs(t,s,!1),u=c.payload,h=c.synthetic;void 0!==u&&(!1===s.handler(u)?s.end(t):(void 0===s.styleCleanup&&!0===s.event.isFirst&&i(),s.event.lastX=u.position.left,s.event.lastY=u.position.top,s.event.lastDir=!0===h?void 0:u.direction,s.event.isFirst=!1))}}},end:function(e,i){if(void 0!==s.event){if(T(s,"temp"),!0===u.is.firefox&&C(t,!1),!0===i)void 0!==s.styleCleanup&&s.styleCleanup(),!0!==s.event.detected&&void 0!==s.initialEvent&&s.initialEvent.target.dispatchEvent(s.initialEvent.event);else if(!0===s.event.detected){!0===s.event.isFirst&&s.handler(gs(void 0===e?s.lastEvt:e,s).payload);var n=gs(void 0===e?s.lastEvt:e,s,!0).payload,o=function(){s.handler(n)};void 0!==s.styleCleanup?s.styleCleanup(o):o()}s.event=void 0,s.initialEvent=void 0,s.lastEvt=void 0}}};t.__qtouchpan=s,bs(t,s,i)},update:function(t,e){var i=e.modifiers,n=e.value,s=e.oldValue,o=t.__qtouchpan;void 0!==o&&(s!==n&&("function"!=typeof n&&o.end(),o.handler=n),!0!==En(o.modifiers,i)&&(bs(t,o,i),o.direction=Fn(i)))},unbind:function(t){void 0===t.__qtouchpan_destroyed?_s(t):delete t.__qtouchpan_destroyed}},ws=function(t){return{value:t}},Cs=[34,37,40,33,39,38],ks={mixins:[ue,xn],directives:{TouchPan:xs},props:{min:{type:Number,default:0},max:{type:Number,default:100},innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:function(t){return t>=0}},snap:Boolean,vertical:Boolean,reverse:Boolean,hideSelection:Boolean,color:String,markerLabelsClass:String,label:Boolean,labelColor:String,labelTextColor:String,labelAlways:Boolean,switchLabelSide:Boolean,markers:[Boolean,Number],markerLabels:[Boolean,Array,Object,Function],switchMarkerLabelsSide:Boolean,trackImg:String,trackColor:String,innerTrackImg:String,innerTrackColor:String,selectionColor:String,selectionImg:String,thumbSize:{type:String,default:"20px"},trackSize:{type:String,default:"4px"},disable:Boolean,readonly:Boolean,dense:Boolean,tabindex:[String,Number],thumbColor:String,thumbPath:{type:String,default:"M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"}},data:function(){return{active:!1,preventFocus:!1,focus:!1,dragging:void 0}},computed:{axis:function(){return!0===this.vertical?"--v":"--h"},labelSide:function(){return"-"+(!0===this.switchLabelSide?"switched":"standard")},isReversed:function(){return!0===this.vertical?!0===this.reverse:this.reverse!==(!0===this.$q.lang.rtl)},computedInnerMin:function(){return this.__getInnerMin()},computedInnerMax:function(){return this.__getInnerMax()},editable:function(){return!0!==this.disable&&!0!==this.readonly&&this.computedInnerMin<=this.computedInnerMax},computedDecimals:function(){return(String(this.step).trim("0").split(".")[1]||"").length},computedStep:function(){return 0===this.step?1:this.step},computedTabindex:function(){return!0===this.editable?this.tabindex||0:-1},trackLen:function(){return this.max-this.min},innerBarLen:function(){return this.computedInnerMax-this.computedInnerMin},innerMinRatio:function(){return this.__convertModelToRatio(this.computedInnerMin)},innerMaxRatio:function(){return this.__convertModelToRatio(this.computedInnerMax)},positionProp:function(){return!0===this.vertical?!0===this.isReversed?"bottom":"top":!0===this.isReversed?"right":"left"},sizeProp:function(){return!0===this.vertical?"height":"width"},thicknessProp:function(){return!0===this.vertical?"width":"height"},orientation:function(){return!0===this.vertical?"vertical":"horizontal"},attributes:function(){var t={role:"slider","aria-valuemin":this.computedInnerMin,"aria-valuemax":this.computedInnerMax,"aria-orientation":this.orientation,"data-step":this.step};return!0===this.disable?t["aria-disabled"]="true":!0===this.readonly&&(t["aria-readonly"]="true"),t},classes:function(){return"q-slider q-slider"+this.axis+" q-slider--"+(!0===this.active?"":"in")+"active inline no-wrap "+(!0===this.vertical?"row":"column")+(!0===this.disable?" disabled":" q-slider--enabled"+(!0===this.editable?" q-slider--editable":""))+("both"===this.focus?" q-slider--focus":"")+(this.label||!0===this.labelAlways?" q-slider--label":"")+(!0===this.labelAlways?" q-slider--label-always":"")+" q-slider--"+this.darkSuffix+(!0===this.dense?" q-slider--dense q-slider--dense"+this.axis:"")+" q-key-group-navigation--ignore-key"},selectionBarClass:function(){var t=this.selectionColor||this.color;return"q-slider__selection absolute"+(void 0!==t?" text-"+t:"")},markerClass:function(){return this.__getAxisClass("markers")+" absolute overflow-hidden"},trackContainerClass:function(){return this.__getAxisClass("track-container")},pinClass:function(){return this.__getPositionClass("pin")},labelClass:function(){return this.__getPositionClass("label")},textContainerClass:function(){return this.__getPositionClass("text-container")},markerLabelsContainerClass:function(){return this.__getPositionClass("marker-labels-container")+(void 0!==this.markerLabelsClass?" "+this.markerLabelsClass:"")},trackClass:function(){return"q-slider__track relative-position no-outline"+(void 0!==this.trackColor?" bg-"+this.trackColor:"")},trackStyle:function(){var t={};return t[this.thicknessProp]=this.trackSize,void 0!==this.trackImg&&(t.backgroundImage="url("+this.trackImg+") !important"),t},innerBarClass:function(){return"q-slider__inner absolute"+(void 0!==this.innerTrackColor?" bg-"+this.innerTrackColor:"")},innerBarStyle:function(){var t={};return t[this.positionProp]=100*this.innerMinRatio+"%",t[this.sizeProp]=100*(this.innerMaxRatio-this.innerMinRatio)+"%",void 0!==this.innerTrackImg&&(t.backgroundImage="url("+this.innerTrackImg+") !important"),t},markerStep:function(){return!0===Pn(this.markers)?this.markers:this.computedStep},markerTicks:function(){var t=[],e=this.markerStep,i=this.min;do{t.push(i),i+=e}while(ithis.max?this.max:this.innerMax},__getPositionClass:function(t){var e="q-slider__"+t;return e+" "+e+this.axis+" "+e+this.axis+this.labelSide},__getAxisClass:function(t){var e="q-slider__"+t;return e+" "+e+this.axis},__convertRatioToModel:function(t){var e=this.min+t*(this.max-this.min);if(this.step>0){var i=(e-this.min)%this.step;e+=(Math.abs(i)>=this.step/2?(i<0?-1:1)*this.step:0)-i}return this.computedDecimals>0&&(e=parseFloat(e.toFixed(this.computedDecimals))),wt(e,this.computedInnerMin,this.computedInnerMax)},__convertModelToRatio:function(t){return 0===this.trackLen?0:wt((t-this.min)/this.trackLen,0,1)},__getDraggingRatio:function(t,e){var i=v(t),n=!0===this.vertical?wt((i.top-e.top)/e.height,0,1):wt((i.left-e.left)/e.width,0,1);return wt(!0===this.isReversed?1-n:n,this.innerMinRatio,this.innerMaxRatio)},__getMarkerList:function(t){var e=this;if(!1===t)return null;if(!0===t)return this.markerTicks.map(ws);if("function"==typeof t)return this.markerTicks.map(function(e){var i=t(e);return!0===On(i)?Object.assign({},i,{value:e}):{value:e,label:i}});var i=function(t){var i=t.value;return i>=e.min&&i<=e.max};return!0===Array.isArray(t)?t.map(function(t){return!0===On(t)?t:{value:t}}).filter(i):Object.keys(t).map(function(e){var i=t[e],n=Number(e);return!0===On(i)?Object.assign({},i,{value:n}):{value:n,label:i}}).filter(i)},__getMarkerLabelStyle:function(t){var e;return(e={})[this.positionProp]=100*(t-this.min)/this.trackLen+"%",e},__getMarkerLabelsContent:function(t){var e=this;if(void 0!==this.$scopedSlots["marker-label-group"])return this.$scopedSlots["marker-label-group"](this.markerScope);var i=this.$scopedSlots["marker-label"];return void 0!==i?this.markerLabelsList.map(function(t){return i(Object.assign({},{marker:t},e.markerScope))}):this.markerLabelsList.map(function(e){return t("div",{key:e.value,style:e.style,class:e.classes},e.label)})},__onPan:function(t){!0===t.isFinal?(void 0!==this.dragging&&(this.__updatePosition(t.evt),!0===t.touch&&this.__updateValue(!0),this.dragging=void 0,this.$emit("pan","end")),this.active=!1,this.focus=!1):!0===t.isFirst?(this.dragging=this.__getDragging(t.evt),this.__updatePosition(t.evt),this.__updateValue(),this.active=!0,this.$emit("pan","start")):(this.__updatePosition(t.evt),this.__updateValue())},__onBlur:function(){this.focus=!1},__onActivate:function(t){this.__updatePosition(t,this.__getDragging(t)),this.__updateValue(),this.preventFocus=!0,this.active=!0,document.addEventListener("mouseup",this.__onDeactivate,!0)},__onDeactivate:function(){this.preventFocus=!1,this.active=!1,this.__updateValue(!0),this.__onBlur(),document.removeEventListener("mouseup",this.__onDeactivate,!0)},__onMobileClick:function(t){this.__updatePosition(t,this.__getDragging(t)),this.__updateValue(!0)},__onKeyup:function(t){Cs.includes(t.keyCode)&&this.__updateValue(!0)},__getTextContainerStyle:function(t){if(!0===this.vertical)return null;var e=this.$q.lang.rtl!==this.reverse?1-t:t;return{transform:"translateX(calc("+(2*e-1)+" * "+this.thumbSize+" / 2 + "+(50-100*e)+"%))"}},__getThumb:function(t,e){var i=[t("svg",{class:"q-slider__thumb-shape absolute-full",attrs:{viewBox:"0 0 20 20","aria-hidden":"true"}},[t("path",{attrs:{d:this.thumbPath}})]),t("div",{class:"q-slider__focus-ring fit"})];return!0!==this.label&&!0!==this.labelAlways||(i.push(t("div",{class:this.pinClass+" absolute fit no-pointer-events"+e.pinColor},[t("div",{class:this.labelClass,style:{minWidth:this.thumbSize}},[t("div",{class:this.textContainerClass,style:e.textContainerStyle},[t("span",{class:e.textClass},e.label)])])])),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(i,"push")),t("div",Object.assign({},{class:e.classes,style:e.style},e.nodeData),i)},__getContent:function(t,e){var i=[];"transparent"!==this.innerTrackColor&&i.push(t("div",{key:"inner",class:this.innerBarClass,style:this.innerBarStyle})),"transparent"!==this.selectionColor&&i.push(t("div",{key:"selection",class:this.selectionBarClass,style:this.selectionBarStyle})),!1!==this.markers&&i.push(t("div",{key:"marker",class:this.markerClass,style:this.markerStyle})),e(i);var n=[t("div",{key:"trackC",class:this.trackContainerClass,attrs:this.trackContainerAttrs,on:this.trackContainerEvents,directives:this.panDirectives},[t("div",{class:this.trackClass,style:this.trackStyle},i)])];!1!==this.markerLabels&&n[!0===this.switchMarkerLabelsSide?"unshift":"push"](t("div",{key:"markerL",class:this.markerLabelsContainerClass},this.__getMarkerLabelsContent(t)));return n}},beforeDestroy:function(){document.removeEventListener("mouseup",this.__onDeactivate,!0)}},qs=i.default.extend({name:"QSlider",mixins:[ks],props:{value:{required:!0,default:null,validator:function(t){return"number"==typeof t||null===t}},labelValue:[String,Number]},data:function(){return{model:null===this.value?this.__getInnerMin():wt(this.value,this.min,this.max),curRatio:0}},computed:{modelRatio:function(){return this.__convertModelToRatio(this.model)},ratio:function(){return!0===this.active?this.curRatio:this.modelRatio},selectionBarStyle:function(){var t=this.innerMinRatio,e={};return e[this.positionProp]=100*t+"%",e[this.sizeProp]=100*(wt(this.ratio,t,this.innerMaxRatio)-t)+"%",void 0!==this.selectionImg&&(e.backgroundImage="url("+this.selectionImg+") !important"),e},thumbLabel:function(){return void 0!==this.labelValue?this.labelValue:this.valuethis.max?this.value:this.model},thumbClasses:function(){var t=this.thumbColor||this.color;return"q-slider__thumb q-slider__thumb"+this.axis+" q-slider__thumb"+this.axis+"-"+(!0===this.isReversed?"rtl":"ltr")+" absolute non-selectable"+(this.valuethis.max?" q-slider__thumb--wrong-value":"")+(!1===this.preventFocus&&!0===this.focus?" q-slider--focus":"")+(void 0!==t?" text-"+t:"")},thumbStyle:function(){var t;return(t={width:this.thumbSize,height:this.thumbSize})[this.positionProp]=100*this.ratio+"%",t},thumbPinColor:function(){return void 0!==this.labelColor?" text-"+this.labelColor:""},thumbTextContainerStyle:function(){return this.__getTextContainerStyle(this.ratio)},thumbTextClass:function(){return"q-slider__text"+(void 0!==this.labelTextColor?" text-"+this.labelTextColor:"")},trackContainerAttrs:function(){return!0!==this.$q.platform.is.mobile?{tabindex:this.computedTabindex}:void 0},trackContainerEvents:function(){return!0!==this.editable?{}:!0===this.$q.platform.is.mobile?{click:this.__onMobileClick}:{mousedown:this.__onActivate,focus:this.__onFocus,blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}},modelUpdate:function(){return[this.value,this.min,this.max,this.innerMin,this.innerMax].join("#")}},watch:{modelUpdate:function(){this.model=null===this.value?this.computedInnerMin:wt(this.value,this.min,this.max)}},methods:{__updateValue:function(t){this.model!==this.value&&this.$emit("input",this.model),!0===t&&this.$emit("change",this.model)},__getDragging:function(){return this.$el.getBoundingClientRect()},__updatePosition:function(t,e){void 0===e&&(e=this.dragging);var i=this.__getDraggingRatio(t,e);this.model=this.__convertRatioToModel(i),this.curRatio=!0!==this.snap||0===this.computedStep?wt(i,this.innerMinRatio,this.innerMaxRatio):this.__convertModelToRatio(this.model)},__onFocus:function(){this.focus=!0},__onKeydown:function(t){Cs.includes(t.keyCode)&&(this.focus=!0,w(t),this.model=wt(parseFloat((this.model+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),this.computedInnerMin,this.computedInnerMax),this.__updateValue())}},render:function(t){var e=this,i=this.__getContent(t,function(i){i.push(e.__getThumb(t,{pinColor:e.thumbPinColor,textContainerStyle:e.thumbTextContainerStyle,textClass:e.thumbTextClass,label:e.thumbLabel,classes:e.thumbClasses,style:e.thumbStyle,nodeData:{}}))});return t("div",{class:this.classes+(null===this.value?" q-slider--no-value":""),attrs:Object.assign({},this.attributes,{"aria-valuenow":this.value})},i)}}),Ts={data:function(){return{canRender:!o}},mounted:function(){!1===this.canRender&&(this.canRender=!0)}},Ms=i.default.extend({name:"QResizeObserver",mixins:[Ts],props:{debounce:{type:[String,Number],default:100}},data:function(){return!0===this.hasObserver?{}:{url:!0===this.$q.platform.is.ie?null:"about:blank"}},methods:{trigger:function(t){!0===t||0===this.debounce||"0"===this.debounce?this.__emit():null===this.timer&&(this.timer=setTimeout(this.__emit,this.debounce))},__emit:function(){if(null!==this.timer&&(clearTimeout(this.timer),this.timer=null),this.$el&&this.$el.parentNode){var t=this.$el.parentNode,e={width:t.offsetWidth,height:t.offsetHeight};e.width===this.size.width&&e.height===this.size.height||(this.size=e,this.$emit("resize",this.size))}},__cleanup:function(){void 0!==this.curDocView&&(void 0!==this.curDocView.removeEventListener&&this.curDocView.removeEventListener("resize",this.trigger,d.passive),this.curDocView=void 0)},__onObjLoad:function(){this.__cleanup(),this.$el.contentDocument&&(this.curDocView=this.$el.contentDocument.defaultView,this.curDocView.addEventListener("resize",this.trigger,d.passive)),this.__emit()}},render:function(t){if(!1!==this.canRender&&!0!==this.hasObserver)return t("object",{key:"load",style:this.style,attrs:{tabindex:-1,type:"text/html",data:this.url,"aria-hidden":"true"},on:Tt(this,"load",{load:this.__onObjLoad})})},beforeCreate:function(){this.size={width:-1,height:-1},!0!==n&&(this.hasObserver="undefined"!=typeof ResizeObserver,!0!==this.hasObserver&&(this.style=(this.$q.platform.is.ie?"visibility:hidden;":"")+"display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;"))},mounted:function(){if(this.timer=null,!0===this.hasObserver)return this.observer=new ResizeObserver(this.trigger),this.observer.observe(this.$el.parentNode),void this.__emit();!0===this.$q.platform.is.ie?(this.url="about:blank",this.__emit()):this.__onObjLoad()},beforeDestroy:function(){clearTimeout(this.timer),!0!==this.hasObserver?this.__cleanup():void 0!==this.observer&&this.$el.parentNode&&this.observer.unobserve(this.$el.parentNode)}});function $s(t,e,i,n){return Object.defineProperty(t,e,{get:i,set:n,enumerable:!0}),t}var Ls=["left","center","right","justify"];function Es(t,e){for(var i in t)if(t[i]!==e[i])return!1;return!0}var Os=i.default.extend({name:"QTabs",mixins:[ai,Nt],provide:function(){return{$tabs:this}},props:{value:[Number,String],align:{type:String,default:"center",validator:function(t){return Ls.includes(t)}},breakpoint:{type:[String,Number],default:600},vertical:Boolean,shrink:Boolean,stretch:Boolean,activeClass:String,activeColor:String,activeBgColor:String,indicatorColor:String,leftIcon:String,rightIcon:String,outsideArrows:Boolean,mobileArrows:Boolean,switchIndicator:Boolean,narrowIndicator:Boolean,inlineLabel:Boolean,noCaps:Boolean,dense:Boolean,contentClass:String},data:function(){return{scrollable:!1,leftArrow:!0,rightArrow:!1,justify:!1,tabNameList:[],currentModel:this.value,hasFocus:!1,avoidRouteWatcher:!1}},watch:{isRTL:function(){this.__localUpdateArrows()},value:function(t){this.__updateModel({name:t,setCurrent:!0,skipEmit:!0})},outsideArrows:function(){this.__recalculateScroll()},arrowsEnabled:function(t){this.__localUpdateArrows=!0===t?this.__updateArrowsFn:p,this.__recalculateScroll()}},computed:{tabProps:function(){return{activeClass:this.activeClass,activeColor:this.activeColor,activeBgColor:this.activeBgColor,indicatorClass:(t=this.indicatorColor,e=this.switchIndicator,i=this.vertical,n=!0===i?["left","right"]:["top","bottom"],"absolute-"+(!0===e?n[0]:n[1])+(t?" text-"+t:"")),narrowIndicator:this.narrowIndicator,inlineLabel:this.inlineLabel,noCaps:this.noCaps};var t,e,i,n},hasActiveTab:function(){var t=this;return this.tabNameList.some(function(e){return e.name===t.currentModel})},arrowsEnabled:function(){return!0===this.$q.platform.is.desktop||!0===this.mobileArrows},alignClass:function(){return"q-tabs__content--align-"+(!0===this.scrollable?"left":!0===this.justify?"justify":this.align)},classes:function(){return"q-tabs row no-wrap items-center q-tabs--"+(!0===this.scrollable?"":"not-")+"scrollable q-tabs--"+(!0===this.vertical?"vertical":"horizontal")+" q-tabs__arrows--"+(!0===this.arrowsEnabled&&!0===this.outsideArrows?"outside":"inside")+(!0===this.dense?" q-tabs--dense":"")+(!0===this.shrink?" col-shrink":"")+(!0===this.stretch?" self-stretch":"")},innerClass:function(){return"q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position "+this.alignClass+(void 0!==this.contentClass?" "+this.contentClass:"")+(!0===this.$q.platform.is.mobile?" scroll":"")},domProps:function(){return!0===this.vertical?{container:"height",content:"offsetHeight",scroll:"scrollHeight"}:{container:"width",content:"offsetWidth",scroll:"scrollWidth"}},isRTL:function(){return!0!==this.vertical&&!0===this.$q.lang.rtl},rtlPosCorrection:function(){return!1===Ii()&&!0===this.isRTL},posFn:function(){return!0===this.rtlPosCorrection?{get:function(t){return Math.abs(t.scrollLeft)},set:function(t,e){t.scrollLeft=-e}}:!0===this.vertical?{get:function(t){return t.scrollTop},set:function(t,e){t.scrollTop=e}}:{get:function(t){return t.scrollLeft},set:function(t,e){t.scrollLeft=e}}},onEvents:function(){return Object.assign({},{input:S},this.qListeners,{focusin:this.__onFocusin,focusout:this.__onFocusout})}},methods:{__updateModel:function(t){var e=t.name,i=t.setCurrent,n=t.skipEmit;this.currentModel!==e&&(!0!==n&&void 0!==this.qListeners.input&&this.$emit("input",e),!0!==i&&void 0!==this.qListeners.input||(this.__animate(this.currentModel,e),this.currentModel=e))},__recalculateScroll:function(){var t=this;this.__registerScrollTick(function(){t.__updateContainer({width:t.$el.offsetWidth,height:t.$el.offsetHeight})})},__updateContainer:function(t){var e=this;if(void 0!==this.domProps&&this.$refs.content){var i=t[this.domProps.container],n=Math.min(this.$refs.content[this.domProps.scroll],Array.prototype.reduce.call(this.$refs.content.children,function(t,i){return t+(i[e.domProps.content]||0)},0)),s=i>0&&n>i;this.scrollable!==s&&(this.scrollable=s),!0===s&&this.__registerUpdateArrowsTick(this.__localUpdateArrows);var o=i0&&(e[!0===this.vertical?"scrollTop":"scrollLeft"]+=Math.ceil(l),this.__localUpdateArrows())},__updateArrowsFn:function(){var t=this.$refs.content;if(null!==t){var e=t.getBoundingClientRect(),i=!0===this.vertical?t.scrollTop:Math.abs(t.scrollLeft);!0===this.isRTL?(this.leftArrow=Math.ceil(i+e.width)0):(this.leftArrow=i>0,this.rightArrow=!0===this.vertical?Math.ceil(i+e.height)=n||!0===i[l].contains(document.activeElement))&&(this.__scrollToTabEl(i[l]),i[l].focus({preventScroll:!0}),!0)}}},__scrollTowards:function(t){var e=this.$refs.content,i=this.posFn,n=i.get,s=i.set,o=!1,r=n(e),a=t=t)&&(o=!0,r=t),s(e,r),this.__localUpdateArrows(),o},__updateActiveRoute:function(){for(var t=this,e=null,i={matchedLen:0,queryDiff:9999,hrefLen:0,exact:!1,redirected:!0},n=this.tabVmList.filter(function(t){return!0===t.hasRouterLink}),s=n.length,o=this.$route.query,r=Object.keys(o).length,a=0;ai.matchedLen?(e=l.name,i=_):_.matchedLen===i.matchedLen&&(_.queryDiffi.hrefLen&&(e=l.name,i=_))}}}}null===e&&!0===this.tabVmList.some(function(e){return void 0===e.hasRouterLink&&e.name===t.currentModel})||this.__updateModel({name:e,setCurrent:!0})},__onFocusin:function(t){if(this.__removeFocusTimeout(),!0!==this.hasFocus&&this.$el&&t.target&&"function"==typeof t.target.closest){var e=t.target.closest(".q-tab");e&&!0===this.$el.contains(e)&&(this.hasFocus=!0,!0===this.scrollable&&this.__scrollToTabEl(e))}void 0!==this.qListeners.focusin&&this.$emit("focusin",t)},__onFocusout:function(t){var e=this;this.__registerFocusTimeout(function(){e.hasFocus=!1},30),void 0!==this.qListeners.focusout&&this.$emit("focusout",t)},__verifyRouteModel:function(){!1===this.avoidRouteWatcher?this.__registerScrollToTabTimeout(this.__updateActiveRoute):this.__removeScrollToTabTimeout()},__watchRoute:function(){var t=this;if(void 0===this.unwatchRoute){var e=this.$watch(function(){return t.$route.fullPath},this.__verifyRouteModel);this.unwatchRoute=function(){e(),t.unwatchRoute=void 0}}},__registerTab:function(t){var e=this;this.tabVmList.push(t),this.tabNameList.push($s({},"name",function(){return t.name})),this.__recalculateScroll(),void 0===t.hasRouterLink||void 0===this.$route?this.__registerScrollToTabTimeout(function(){if(!0===e.scrollable){var t=e.currentModel,i=void 0!==t&&null!==t&&""!==t?e.tabVmList.find(function(e){return e.name===t}):null;i&&e.__scrollToTabEl(i.$el)}}):(this.__watchRoute(),!0===t.hasRouterLink&&this.__verifyRouteModel())},__unregisterTab:function(t){var e=this.tabVmList.indexOf(t);this.tabVmList.splice(e,1),this.tabNameList.splice(e,1),this.__recalculateScroll(),void 0!==this.unwatchRoute&&void 0!==t.hasRouterLink&&(!0===this.tabVmList.every(function(t){return void 0===t.hasRouterLink})&&this.unwatchRoute(),this.__verifyRouteModel())},__cleanup:function(){clearTimeout(this.animateTimer),this.__stopAnimScroll(),void 0!==this.unwatchRoute&&this.unwatchRoute()}},created:function(){this.__useTick("__registerScrollTick"),this.__useTick("__registerUpdateArrowsTick"),this.__useTick("__registerAnimateTick"),this.__useTimeout("__registerFocusTimeout","__removeFocusTimeout"),this.__useTimeout("__registerScrollToTabTimeout","__removeScrollToTabTimeout"),Object.assign(this,{tabVmList:[],__localUpdateArrows:!0===this.arrowsEnabled?this.__updateArrowsFn:p})},activated:function(){!0===this.hadRouteWatcher&&this.__watchRoute(),this.__recalculateScroll()},deactivated:function(){this.hadRouteWatcher=void 0!==this.unwatchRoute,this.__cleanup()},beforeDestroy:function(){this.__cleanup()},render:function(t){var e=[t(Ms,{key:"resize",on:Tt(this,"resize",{resize:this.__updateContainer})}),t("div",{key:"scroll",ref:"content",class:this.innerClass,on:!0===this.arrowsEnabled?Tt(this,"scroll",{scroll:this.__updateArrowsFn}):void 0},Ht(this,"default"))];return!0===this.arrowsEnabled&&e.push(t(ae,{key:"onS",class:"q-tabs__arrow q-tabs__arrow--start absolute q-tab__icon"+(!0===this.leftArrow?"":" q-tabs__arrow--faded"),props:{name:this.leftIcon||this.$q.iconSet.tabs[!0===this.vertical?"up":"left"]},on:Tt(this,"onS",{"&mousedown":this.__scrollToStart,"&touchstart":this.__scrollToStart,"&mouseup":this.__stopAnimScroll,"&mouseleave":this.__stopAnimScroll,"&touchend":this.__stopAnimScroll})}),t(ae,{key:"onE",class:"q-tabs__arrow q-tabs__arrow--end absolute q-tab__icon"+(!0===this.rightArrow?"":" q-tabs__arrow--faded"),props:{name:this.rightIcon||this.$q.iconSet.tabs[!0===this.vertical?"down":"right"]},on:Tt(this,"onE",{"&mousedown":this.__scrollToEnd,"&touchstart":this.__scrollToEnd,"&mouseup":this.__stopAnimScroll,"&mouseleave":this.__stopAnimScroll,"&touchend":this.__stopAnimScroll})})),t("div",{class:this.classes,on:this.onEvents,attrs:{role:"tablist"}},e)}}),As=0,Bs=i.default.extend({name:"QTab",mixins:[Fe,Nt],inject:{$tabs:{default:function(){console.error("QTab/QRouteTab components need to be child of QTabs")}}},props:{icon:String,label:[Number,String],alert:[Boolean,String],alertIcon:String,name:{type:[Number,String],default:function(){return"t_"+As++}},noCaps:Boolean,tabindex:[String,Number],disable:Boolean,contentClass:String},computed:{isActive:function(){return this.$tabs.currentModel===this.name},classes:function(){return"q-tab relative-position self-stretch flex flex-center text-center"+(!0===this.isActive?" q-tab--active"+(this.$tabs.tabProps.activeClass?" "+this.$tabs.tabProps.activeClass:"")+(this.$tabs.tabProps.activeColor?" text-"+this.$tabs.tabProps.activeColor:"")+(this.$tabs.tabProps.activeBgColor?" bg-"+this.$tabs.tabProps.activeBgColor:""):" q-tab--inactive")+(this.icon&&this.label&&!1===this.$tabs.tabProps.inlineLabel?" q-tab--full":"")+(!0===this.noCaps||!0===this.$tabs.tabProps.noCaps?" q-tab--no-caps":"")+(!0===this.disable?" disabled":" q-focusable q-hoverable cursor-pointer")+(void 0!==this.hasRouterLinkProps?this.linkClass:"")},innerClass:function(){return"q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable q-key-group-navigation--ignore-key "+(!0===this.$tabs.tabProps.inlineLabel?"row no-wrap q-tab__content--inline":"column")+(void 0!==this.contentClass?" "+this.contentClass:"")},computedTabIndex:function(){return!0===this.disable||!0===this.$tabs.hasFocus||!1===this.isActive&&!0===this.$tabs.hasActiveTab?-1:this.tabindex||0},computedRipple:function(){return!1!==this.ripple&&Object.assign({keyCodes:[13,32],early:!0},!0===this.ripple?{}:this.ripple)},onEvents:function(){return Object.assign({},{input:S},this.qListeners,{click:this.__onClick,keydown:this.__onKeydown})},attrs:function(){var t=Object.assign({},this.linkAttrs,{tabindex:this.computedTabIndex,role:"tab","aria-selected":!0===this.isActive?"true":"false"});return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{__onClick:function(t,e){var i=this;if(!0!==e&&void 0!==this.$refs.blurTarget&&this.$refs.blurTarget.focus({preventScroll:!0}),!0!==this.disable){if(void 0===this.hasRouterLinkProps)return this.$tabs.__updateModel({name:this.name}),void(void 0!==this.qListeners.click&&this.$emit("click",t));if(!0===this.hasRouterLink){var n=function(e,n,s){var o,r=!1===t.navigate?{to:e,replace:n,append:s}:e||{},a=r.to,l=r.replace,c=r.append,u=r.returnRouterError,h=void 0===a||c===i.append&&!0===En(a,i.to)?i.$tabs.avoidRouteWatcher=bn():null;return i.__navigateToRouterLink(t,{to:a,replace:l,append:c,returnRouterError:!0}).catch(function(t){o=t}).then(function(t){return h===i.$tabs.avoidRouteWatcher&&(i.$tabs.avoidRouteWatcher=!1,void 0!==o&&!0!==o.message.startsWith("Avoided redundant navigation")||i.$tabs.__updateModel({name:i.name})),void 0!==o&&!0===u?Promise.reject(o):t})};return void 0!==this.qListeners.click&&this.$emit("click",t,n),!1===t.navigate&&t.preventDefault(),void(!0!==t.defaultPrevented&&n())}void 0!==this.qListeners.click&&this.$emit("click",t)}else!0===this.hasRouterLink&&w(t)},__onKeydown:function(t){Be(t,[13,32])?this.__onClick(t,!0):!0!==Ae(t)&&t.keyCode>=35&&t.keyCode<=40&&!0!==t.altKey&&!0!==t.metaKey&&!0===this.$tabs.__onKbdNavigate(t.keyCode,this.$el)&&w(t),void 0!==this.qListeners.keydown&&this.$emit("keydown",t)},__getContent:function(t){var e=this.$tabs.tabProps.narrowIndicator,i=[],n=t("div",{ref:"tabIndicator",staticClass:"q-tab__indicator",class:this.$tabs.tabProps.indicatorClass});void 0!==this.icon&&i.push(t(ae,{staticClass:"q-tab__icon",props:{name:this.icon}})),void 0!==this.label&&i.push(t("div",{staticClass:"q-tab__label"},[this.label])),!1!==this.alert&&i.push(void 0!==this.alertIcon?t(ae,{staticClass:"q-tab__alert-icon",props:{color:!0!==this.alert?this.alert:void 0,name:this.alertIcon}}):t("div",{staticClass:"q-tab__alert",class:!0!==this.alert?"text-"+this.alert:null})),!0===e&&i.push(n);var s=[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"}),t("div",{class:this.innerClass},Wt(i,this,"default"))];return!1===e&&s.push(n),s},__renderTab:function(t,e){return t(e,{class:this.classes,attrs:this.attrs,on:this.onEvents,directives:!1===this.ripple||!0===this.disable?null:[{name:"ripple",value:this.computedRipple}]},this.__getContent(t))}},mounted:function(){this.$tabs.__registerTab(this)},beforeDestroy:function(){this.$tabs.__unregisterTab(this)},render:function(t){return this.__renderTab(t,"div")}}),Ps=i.default.extend({name:"QTabPanels",mixins:[ue,Un],computed:{classes:function(){return"q-tab-panels q-panel-parent q-tab-panels--"+this.darkSuffix+" q-"+this.darkSuffix}},methods:{__renderPanels:function(t){return t("div",{class:this.classes,directives:this.panelDirectives,on:Object.assign({},this.qListeners)},this.__getPanelContent(t))}}}),zs={role:"tabpanel"},Is=i.default.extend({name:"QTabPanel",mixins:[Yn],render:function(t){return t("div",{staticClass:"q-tab-panel",attrs:zs,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),Rs=["rgb(255,204,204)","rgb(255,230,204)","rgb(255,255,204)","rgb(204,255,204)","rgb(204,255,230)","rgb(204,255,255)","rgb(204,230,255)","rgb(204,204,255)","rgb(230,204,255)","rgb(255,204,255)","rgb(255,153,153)","rgb(255,204,153)","rgb(255,255,153)","rgb(153,255,153)","rgb(153,255,204)","rgb(153,255,255)","rgb(153,204,255)","rgb(153,153,255)","rgb(204,153,255)","rgb(255,153,255)","rgb(255,102,102)","rgb(255,179,102)","rgb(255,255,102)","rgb(102,255,102)","rgb(102,255,179)","rgb(102,255,255)","rgb(102,179,255)","rgb(102,102,255)","rgb(179,102,255)","rgb(255,102,255)","rgb(255,51,51)","rgb(255,153,51)","rgb(255,255,51)","rgb(51,255,51)","rgb(51,255,153)","rgb(51,255,255)","rgb(51,153,255)","rgb(51,51,255)","rgb(153,51,255)","rgb(255,51,255)","rgb(255,0,0)","rgb(255,128,0)","rgb(255,255,0)","rgb(0,255,0)","rgb(0,255,128)","rgb(0,255,255)","rgb(0,128,255)","rgb(0,0,255)","rgb(128,0,255)","rgb(255,0,255)","rgb(245,0,0)","rgb(245,123,0)","rgb(245,245,0)","rgb(0,245,0)","rgb(0,245,123)","rgb(0,245,245)","rgb(0,123,245)","rgb(0,0,245)","rgb(123,0,245)","rgb(245,0,245)","rgb(214,0,0)","rgb(214,108,0)","rgb(214,214,0)","rgb(0,214,0)","rgb(0,214,108)","rgb(0,214,214)","rgb(0,108,214)","rgb(0,0,214)","rgb(108,0,214)","rgb(214,0,214)","rgb(163,0,0)","rgb(163,82,0)","rgb(163,163,0)","rgb(0,163,0)","rgb(0,163,82)","rgb(0,163,163)","rgb(0,82,163)","rgb(0,0,163)","rgb(82,0,163)","rgb(163,0,163)","rgb(92,0,0)","rgb(92,46,0)","rgb(92,92,0)","rgb(0,92,0)","rgb(0,92,46)","rgb(0,92,92)","rgb(0,46,92)","rgb(0,0,92)","rgb(46,0,92)","rgb(92,0,92)","rgb(255,255,255)","rgb(205,205,205)","rgb(178,178,178)","rgb(153,153,153)","rgb(127,127,127)","rgb(102,102,102)","rgb(76,76,76)","rgb(51,51,51)","rgb(25,25,25)","rgb(0,0,0)"],Fs=i.default.extend({name:"QColor",mixins:[Nt,ue,xn],directives:{TouchPan:xs},props:{value:String,defaultValue:String,defaultView:{type:String,default:"spectrum",validator:function(t){return["spectrum","tune","palette"].includes(t)}},formatModel:{type:String,default:"auto",validator:function(t){return["auto","hex","rgb","hexa","rgba"].includes(t)}},palette:Array,noHeader:Boolean,noHeaderTabs:Boolean,noFooter:Boolean,square:Boolean,flat:Boolean,bordered:Boolean,disable:Boolean,readonly:Boolean},data:function(){return{topView:"auto"===this.formatModel?void 0===this.value||null===this.value||""===this.value||this.value.startsWith("#")?"hex":"rgb":this.formatModel.startsWith("hex")?"hex":"rgb",view:this.defaultView,model:this.__parseModel(this.value||this.defaultValue)}},watch:{value:function(t){var e=this.__parseModel(t||this.defaultValue);e.hex!==this.model.hex&&(this.model=e)},defaultValue:function(t){if(!this.value&&t){var e=this.__parseModel(t);e.hex!==this.model.hex&&(this.model=e)}}},computed:{editable:function(){return!0!==this.disable&&!0!==this.readonly},forceHex:function(){return"auto"===this.formatModel?null:this.formatModel.indexOf("hex")>-1},forceAlpha:function(){return"auto"===this.formatModel?null:this.formatModel.indexOf("a")>-1},isHex:function(){return void 0===this.value||null===this.value||""===this.value||this.value.startsWith("#")},isOutputHex:function(){return null!==this.forceHex?this.forceHex:this.isHex},formAttrs:function(){return{type:"hidden",name:this.name,value:this.model[!0===this.isOutputHex?"hex":"rgb"]}},hasAlpha:function(){return null!==this.forceAlpha?this.forceAlpha:void 0!==this.model.a},currentBgColor:function(){return{backgroundColor:this.model.rgb||"#000"}},headerClass:function(){return"q-color-picker__header-content--"+(void 0!==this.model.a&&this.model.a<65||ct(this.model)>.4?"light":"dark")},spectrumStyle:function(){return{background:"hsl("+this.model.h+",100%,50%)"}},spectrumPointerStyle:function(){var t;return(t={top:100-this.model.v+"%"})[!0===this.$q.lang.rtl?"right":"left"]=this.model.s+"%",t},computedPalette:function(){return void 0!==this.palette&&this.palette.length>0?this.palette:Rs},classes:function(){return"q-color-picker"+(!0===this.bordered?" q-color-picker--bordered":"")+(!0===this.square?" q-color-picker--square no-border-radius":"")+(!0===this.flat?" q-color-picker--flat no-shadow":"")+(!0===this.disable?" disabled":"")+" q-color-picker--"+this.darkSuffix+" q-"+this.darkSuffix},attrs:function(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0}},created:function(){this.__spectrumChange=vs(this.__spectrumChange,20)},render:function(t){var e=[this.__getContent(t)];return void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),!0!==this.noHeader&&e.unshift(this.__getHeader(t)),!0!==this.noFooter&&e.push(this.__getFooter(t)),t("div",{class:this.classes,attrs:this.attrs,on:Object.assign({},this.qListeners)},e)},methods:{__getHeader:function(t){var e=this,i=[];return!0!==this.noHeaderTabs&&i.push(t(Os,{key:"topVTab",class:"q-color-picker__header-tabs",props:{value:this.topView,dense:!0,align:"justify"},on:Tt(this,"topVTab",{input:function(t){e.topView=t}})},[t(Bs,{props:{label:"HEX"+(!0===this.hasAlpha?"A":""),name:"hex",ripple:!1}}),t(Bs,{props:{label:"RGB"+(!0===this.hasAlpha?"A":""),name:"rgb",ripple:!1}})])),i.push(t("div",{staticClass:"q-color-picker__header-banner row flex-center no-wrap"},[t("input",{key:"topIn",staticClass:"fit",domProps:{value:this.model[this.topView]},attrs:!0!==this.editable?{readonly:!0}:null,on:Tt(this,"topIn",{input:function(t){e.__updateErrorIcon(!0===e.__onEditorChange(t))},change:S,blur:function(t){!0===e.__onEditorChange(t,!0)&&e.$forceUpdate(),e.__updateErrorIcon(!1)}})}),t(ae,{ref:"errorIcon",staticClass:"q-color-picker__error-icon absolute no-pointer-events",props:{name:this.$q.iconSet.type.negative}})])),t("div",{staticClass:"q-color-picker__header relative-position overflow-hidden"},[t("div",{staticClass:"q-color-picker__header-bg absolute-full"}),t("div",{staticClass:"q-color-picker__header-content",class:this.headerClass,style:this.currentBgColor},i)])},__getContent:function(t){return t(Ps,{props:{value:this.view,animated:!0}},[t(Is,{staticClass:"q-color-picker__spectrum-tab overflow-hidden",props:{name:"spectrum"}},this.__getSpectrumTab(t)),t(Is,{staticClass:"q-pa-md q-color-picker__tune-tab",props:{name:"tune"}},this.__getTuneTab(t)),t(Is,{staticClass:"q-color-picker__palette-tab",props:{name:"palette"}},this.__getPaletteTab(t))])},__getFooter:function(t){var e=this;return t("div",{staticClass:"q-color-picker__footer relative-position overflow-hidden"},[t(Os,{key:"ftIn",staticClass:"absolute-full",props:{value:this.view,dense:!0,align:"justify"},on:Tt(this,"ftIn",{input:function(t){e.view=t}})},[t(Bs,{props:{icon:this.$q.iconSet.colorPicker.spectrum,name:"spectrum",ripple:!1}}),t(Bs,{props:{icon:this.$q.iconSet.colorPicker.tune,name:"tune",ripple:!1}}),t(Bs,{props:{icon:this.$q.iconSet.colorPicker.palette,name:"palette",ripple:!1}})])])},__getSpectrumTab:function(t){var e=this;return[t("div",{key:"spectrT",ref:"spectrum",staticClass:"q-color-picker__spectrum non-selectable relative-position cursor-pointer",style:this.spectrumStyle,class:{readonly:!0!==this.editable},on:!0===this.editable?Tt(this,"spectrT",{click:this.__spectrumClick,mousedown:this.__activate}):null,directives:!0===this.editable?Tt(this,"spectrDir",[{name:"touch-pan",modifiers:{prevent:!0,stop:!0,mouse:!0},value:this.__spectrumPan}]):null},[t("div",{style:{paddingBottom:"100%"}}),t("div",{staticClass:"q-color-picker__spectrum-white absolute-full"}),t("div",{staticClass:"q-color-picker__spectrum-black absolute-full"}),t("div",{staticClass:"absolute",style:this.spectrumPointerStyle},[void 0!==this.model.hex?t("div",{staticClass:"q-color-picker__spectrum-circle"}):null])]),t("div",{staticClass:"q-color-picker__sliders"},[t(qs,{key:"hueSlide",staticClass:"q-color-picker__hue non-selectable",props:{value:this.model.h,min:0,max:360,trackSize:"8px",innerTrackColor:"transparent",selectionColor:"transparent",readonly:!0!==this.editable,thumbPath:"M5 5 h10 v10 h-10 v-10 z"},on:Tt(this,"hueSlide",{input:this.__onHueChange,change:function(t){return e.__onHueChange(t,!0)}})}),!0===this.hasAlpha?t(qs,{key:"alphaSlide",staticClass:"q-color-picker__alpha non-selectable",props:{value:this.model.a,min:0,max:100,trackSize:"8px",trackColor:"white",innerTrackColor:"transparent",selectionColor:"transparent",trackImg:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==",readonly:!0!==this.editable,hideSelection:!0,thumbPath:"M5 5 h10 v10 h-10 v-10 z"},on:Tt(this,"alphaSlide",{input:function(t){return e.__onNumericChange(t,"a",100)},change:function(t){return e.__onNumericChange(t,"a",100,void 0,!0)}})}):null])]},__getTuneTab:function(t){var e=this,i={inputmode:"numeric",maxlength:3,readonly:!0!==this.editable};return[t("div",{staticClass:"row items-center no-wrap"},[t("div",["R"]),t(qs,{key:"rSlide",props:{value:this.model.r,min:0,max:255,color:"red",dark:this.dark,readonly:!0!==this.editable},on:Tt(this,"rSlide",{input:function(t){return e.__onNumericChange(t,"r",255)},change:function(t){return e.__onNumericChange(t,"r",255,void 0,!0)}})}),t("input",{key:"rIn",domProps:{value:this.model.r},attrs:i,on:Tt(this,"rIn",{input:function(t){return e.__onNumericChange(t.target.value,"r",255,t)},change:S,blur:function(t){return e.__onNumericChange(t.target.value,"r",255,t,!0)}})})]),t("div",{staticClass:"row items-center no-wrap"},[t("div",["G"]),t(qs,{key:"gSlide",props:{value:this.model.g,min:0,max:255,color:"green",dark:this.dark,readonly:!0!==this.editable},on:Tt(this,"gSlide",{input:function(t){return e.__onNumericChange(t,"g",255)},change:function(t){return e.__onNumericChange(t,"g",255,void 0,!0)}})}),t("input",{key:"gIn",domProps:{value:this.model.g},attrs:i,on:Tt(this,"gIn",{input:function(t){return e.__onNumericChange(t.target.value,"g",255,t)},change:S,blur:function(t){return e.__onNumericChange(t.target.value,"g",255,t,!0)}})})]),t("div",{staticClass:"row items-center no-wrap"},[t("div",["B"]),t(qs,{key:"bSlide",props:{value:this.model.b,min:0,max:255,color:"blue",readonly:!0!==this.editable,dark:this.dark},on:Tt(this,"bSlide",{input:function(t){return e.__onNumericChange(t,"b",255)},change:function(t){return e.__onNumericChange(t,"b",255,void 0,!0)}})}),t("input",{key:"bIn",domProps:{value:this.model.b},attrs:i,on:Tt(this,"bIn",{input:function(t){return e.__onNumericChange(t.target.value,"b",255,t)},change:S,blur:function(t){return e.__onNumericChange(t.target.value,"b",255,t,!0)}})})]),!0===this.hasAlpha?t("div",{staticClass:"row items-center no-wrap"},[t("div",["A"]),t(qs,{key:"aSlide",props:{value:this.model.a,color:"grey",readonly:!0!==this.editable,dark:this.dark},on:Tt(this,"aSlide",{input:function(t){return e.__onNumericChange(t,"a",100)},change:function(t){return e.__onNumericChange(t,"a",100,void 0,!0)}})}),t("input",{key:"aIn",domProps:{value:this.model.a},attrs:i,on:Tt(this,"aIn",{input:function(t){return e.__onNumericChange(t.target.value,"a",100,t)},change:S,blur:function(t){return e.__onNumericChange(t.target.value,"a",100,t,!0)}})})]):null]},__getPaletteTab:function(t){var e=this;return[t("div",{staticClass:"row items-center q-color-picker__palette-rows",class:!0===this.editable?"q-color-picker__palette-rows--editable":""},this.computedPalette.map(function(i){return t("div",{key:"palette#"+i,staticClass:"q-color-picker__cube col-auto",style:{backgroundColor:i},on:!0===e.editable?Tt(e,"palette#"+i,{click:function(){e.__onPalettePick(i)}}):null})}))]},__onSpectrumChange:function(t,e,i){var n=this.$refs.spectrum;if(void 0!==n){var s=n.clientWidth,o=n.clientHeight,r=n.getBoundingClientRect(),a=Math.min(s,Math.max(0,t-r.left));!0===this.$q.lang.rtl&&(a=s-a);var l=Math.min(o,Math.max(0,e-r.top)),c=Math.round(100*a/s),u=Math.round(100*Math.max(0,Math.min(1,-l/o+1))),h=rt({h:this.model.h,s:c,v:u,a:!0===this.hasAlpha?this.model.a:void 0});this.model.s=c,this.model.v=u,this.__update(h,i)}},__onHueChange:function(t,e){var i=rt({h:t=Math.round(t),s:this.model.s,v:this.model.v,a:!0===this.hasAlpha?this.model.a:void 0});this.model.h=t,this.__update(i,e)},__onNumericChange:function(t,e,i,n,s){if(void 0!==n&&S(n),/^[0-9]+$/.test(t)){var o=Math.floor(Number(t));if(o<0||o>i)!0===s&&this.$forceUpdate();else{var r={r:"r"===e?o:this.model.r,g:"g"===e?o:this.model.g,b:"b"===e?o:this.model.b,a:!0===this.hasAlpha?"a"===e?o:this.model.a:void 0};if("a"!==e){var a=at(r);this.model.h=a.h,this.model.s=a.s,this.model.v=a.v}if(this.__update(r,s),void 0!==n&&!0!==s&&void 0!==n.target.selectionEnd){var l=n.target.selectionEnd;this.$nextTick(function(){n.target.setSelectionRange(l,l)})}}}else!0===s&&this.$forceUpdate()},__onEditorChange:function(t,e){var i,n=t.target.value;if(S(t),"hex"===this.topView){if(n.length!==(!0===this.hasAlpha?9:7)||!/^#[0-9A-Fa-f]+$/.test(n))return!0;i=ot(n)}else{var s;if(!n.endsWith(")"))return!0;if(!0!==this.hasAlpha&&n.startsWith("rgb(")){if(3!==(s=n.substring(4,n.length-1).split(",").map(function(t){return parseInt(t,10)})).length||!/^rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)$/.test(n))return!0}else{if(!0!==this.hasAlpha||!n.startsWith("rgba("))return!0;if(4!==(s=n.substring(5,n.length-1).split(",")).length||!/^rgba\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/.test(n))return!0;for(var o=0;o<3;o++){var r=parseInt(s[o],10);if(r<0||r>255)return!0;s[o]=r}var a=parseFloat(s[3]);if(a<0||a>1)return!0;s[3]=a}if(s[0]<0||s[0]>255||s[1]<0||s[1]>255||s[2]<0||s[2]>255||!0===this.hasAlpha&&(s[3]<0||s[3]>1))return!0;i={r:s[0],g:s[1],b:s[2],a:!0===this.hasAlpha?100*s[3]:void 0}}var l=at(i);if(this.model.h=l.h,this.model.s=l.s,this.model.v=l.v,this.__update(i,e),!0!==e){var c=t.target.selectionEnd;this.$nextTick(function(){t.target.setSelectionRange(c,c)})}},__onPalettePick:function(t){var e=this.__parseModel(t),i={r:e.r,g:e.g,b:e.b,a:e.a};void 0===i.a&&(i.a=this.model.a),this.model.h=e.h,this.model.s=e.s,this.model.v=e.v,this.__update(i,!0)},__update:function(t,e){this.model.hex=nt(t),this.model.rgb=st(t),this.model.r=t.r,this.model.g=t.g,this.model.b=t.b,this.model.a=t.a;var i=this.model[!0===this.isOutputHex?"hex":"rgb"];this.$emit("input",i),!0===e&&this.$emit("change",i)},__updateErrorIcon:function(t){void 0!==this.$refs.errorIcon&&(this.$refs.errorIcon.$el.style.opacity=t?1:0)},__parseModel:function(t){var e=void 0!==this.forceAlpha?this.forceAlpha:"auto"===this.formatModel?null:this.formatModel.indexOf("a")>-1;if("string"!=typeof t||0===t.length||!0!==ps.anyColor(t.replace(/ /g,"")))return{h:0,s:0,v:0,r:0,g:0,b:0,a:!0===e?100:void 0,hex:void 0,rgb:void 0};var i=lt(t);return!0===e&&void 0===i.a&&(i.a=100),i.hex=nt(i),i.rgb=st(i),Object.assign(i,at(i))},__spectrumPan:function(t){t.isFinal?this.__onSpectrumChange(t.position.left,t.position.top,!0):this.__spectrumChange(t)},__spectrumChange:function(t){this.__onSpectrumChange(t.position.left,t.position.top)},__spectrumClick:function(t){this.__onSpectrumChange(t.pageX-window.pageXOffset,t.pageY-window.pageYOffset,!0)},__activate:function(t){this.__onSpectrumChange(t.pageX-window.pageXOffset,t.pageY-window.pageYOffset)}}}),Ds={horizontal:{first:[36],prev:[37],next:[39],last:[35]},vertical:{first:[33],prev:[38],next:[40],last:[34]}};function js(t){return!0===t.classList.contains("q-key-group-navigation--ignore-key")}function Vs(t){void 0!==t.firstTarget&&t.firstTarget.remove(),void 0!==t.lastTarget&&t.lastTarget.remove()}function Ns(t){var e=[1,1,"q-key-group-navigation--active"];if("string"==typeof t&&t.length>0)for(var i=t.split(":"),n=0;n<2;n++){var s=parseInt(i[n],10);s&&(e[n]=s)}return{offsetY:e[0],offsetX:e[1],activeClass:e[2]}}function Hs(t,e,i,n){!0===i.vertical?e.keyCodes=Ds.vertical:e.keyCodes=!0===i.horizontal?Ds.horizontal:Ds.all;var s=-1===[!1,0,"0"].indexOf(n);e.enabled!==s&&(!0===e.enabled&&T(e,"main"),!0===s&&q(e,"main",[[t,"keydown","keyDown","capture"],[t,"focusin","focusIn","passiveCapture"],[t,"focusout","focusOut","passiveCapture"],[t,"mousedown","setRestoreEl","passiveCapture"],[t,"touchstart","setRestoreEl","passiveCapture"]]),e.enabled=s)}Ds.all=Object.keys(Ds.horizontal).reduce(function(t,e){var i;return Object.assign({},t,((i={})[e]=Ds.horizontal[e].concat(Ds.vertical[e]),i))},{}),Ds.horizontal.list=Object.keys(Ds.horizontal).reduce(function(t,e){return t.concat(Ds.horizontal[e])},[9]),Ds.horizontal.listH=Ds.horizontal.list,Ds.vertical.list=Object.keys(Ds.vertical).reduce(function(t,e){return t.concat(Ds.vertical[e])},[9]),Ds.vertical.listH=[],Ds.all.list=Object.keys(Ds.all).reduce(function(t,e){return t.concat(Ds.all[e])},[9]),Ds.all.listH=Ds.horizontal.list;var Qs={name:"key-group-navigation",bind:function(t,e){var i=e.modifiers,n=e.arg,s=e.value,o=Object.assign({},{keyCodes:Ds.all,arg:n,modifiers:{}},Ns(n),{focusRestoreEl:null,keyDown:function(e){var i=e.keyCode,n=e.shiftKey,s=e.target;if(-1!==o.keyCodes.list.indexOf(i)&&!0!==s.matches(fi)){if(S(e),9===i)return function(t,e){e.appendChild(t.lastTarget),e.childElementCount>0?e.insertBefore(t.firstTarget,e.childNodes[0]):e.appendChild(t.firstTarget)}(o,t),!0===n?void 0!==o.firstTarget?o.firstTarget.focus():x(e):void 0!==o.lastTarget?o.lastTarget.focus():x(e),void requestAnimationFrame(function(){Vs(o)});var r=document.activeElement,a=r?r.closest(".q-key-group-navigation"):null,l=null!==a&&a!==t?Array.prototype.filter.call(a.querySelectorAll(di),function(t){return t!==r}):[],c=Array.prototype.filter.call(t.querySelectorAll(di),function(t){return!0!==l.includes(t)}),u=c.length-1;if(!(u<0)){if(o.keyCodes.first.indexOf(i)>-1)bi(c,0,1);else if(o.keyCodes.last.indexOf(i)>-1)bi(c,u,-1);else{var h=null===r?-1:c.indexOf(r.closest(di)),d=-1===o.keyCodes.listH.indexOf(i)?o.offsetY:o.offsetX;o.keyCodes.prev.indexOf(i)>-1&&bi(c,Math.max(-1,h-d),-1,1!==d),o.keyCodes.next.indexOf(i)>-1&&bi(c,h+d,1,1!==d)}document.activeElement&&(o.focusRestoreEl=document.activeElement),x(e)}}},setRestoreEl:function(t){t.target&&(o.focusRestoreEl=t.target)},setActive:function(){o.active=!0,t.classList.add(o.activeClass)},setInactive:function(){o.active=!1,t.classList.remove(o.activeClass)},focusIn:function(e){if(!0===N.isKeyboard){var i=g(e),n=void 0!==i.slice(0,i.indexOf(t)).find(js);if(!0!==o.active?!0!==n&&o.setActive():!0===n&&o.setInactive(),!(e.target===o.firstTarget||e.target===o.lastTarget||null!==e.relatedTarget&&(void 0!==e.relatedTarget.classList&&!0===e.relatedTarget.classList.contains("q-key-group-navigation--ignore-focus")||!0===e.relatedTarget._qKeyNavIgnore&&!0===t.contains(e.relatedTarget)))){var s=t.querySelector(".q-key-group-navigation__refocus"),r=null!==s&&s.closest(".q-key-group-navigation")===t?s:o.focusRestoreEl;if(null===r||!0===t.contains(e.relatedTarget))document.activeElement&&(o.focusRestoreEl=document.activeElement);else{var a=r.closest(di),l=a&&"function"==typeof a.focus?a:"function"===r.focus?r:null;requestAnimationFrame(function(){null!==l&&(l._qKeyNavIgnore=!0,l.focus(),requestAnimationFrame(function(){l&&(l._qKeyNavIgnore=!1)}))})}}}else!0===o.active&&o.setInactive()},focusOut:function(e){!0!==o.active||null!==e.relatedTarget&&!1!==t.contains(e.relatedTarget)||o.setInactive()}});t.__qkeygrpnav&&(t.__qkeygrpnav_old=t.__qkeygrpnav),t.__qkeygrpnav=o,t.classList.add("q-key-group-navigation"),function(t){var e=document.createElement("span");e.setAttribute("tabindex",-1),e.classList.add("no-outline"),e.classList.add("absolute"),e.classList.add("no-pointer-events"),t.firstTarget=e,t.lastTarget=e.cloneNode()}(o),Hs(t,o,i,s)},update:function(t,e){var i=e.modifiers,n=e.arg,s=e.value,o=t.__qkeygrpnav;void 0!==o&&(o.arg!==n&&Object.assign(o,Ns(n)),Hs(t,o,i,s))},unbind:function(t){var e=t.__qkeygrpnav_old||t.__qkeygrpnav;void 0!==e&&(t.classList.remove("q-key-group-navigation"),Vs(e),T(e,"main"),!0===e.active&&e.setInactive(),delete t[t.__qkeygrpnav_old?"__qkeygrpnav_old":"__qkeygrpnav"])}},Ws=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178];function Us(t,e,i){return"[object Date]"===Object.prototype.toString.call(t)&&(i=t.getDate(),e=t.getMonth()+1,t=t.getFullYear()),function(t){var e,i,n,s=Js(t).gy,o=s-621,r=Xs(o,!1),a=Zs(s,3,r.march);if((n=t-a)>=0){if(n<=185)return i=1+to(n,31),e=eo(n,31)+1,{jy:o,jm:i,jd:e};n-=186}else o-=1,n+=179,1===r.leap&&(n+=1);return i=7+to(n,30),e=eo(n,30)+1,{jy:o,jm:i,jd:e}}(Zs(t,e,i))}function Ys(t,e,i){return Js(function(t,e,i){var n=Xs(t,!0);return Zs(n.gy,3,n.march)+31*(e-1)-to(e,7)*(e-7)+i-1}(t,e,i))}function Ks(t){return 0===function(t){var e,i,n,s,o,r=Ws.length,a=Ws[0];if(t=Ws[r-1])throw new Error("Invalid Jalaali year "+t);for(o=1;o=Ws[a-1])throw new Error("Invalid Jalaali year "+t);for(r=1;r0?"-":"+",n=Math.abs(t),s=n%60;return i+kt(Math.floor(n/60))+e+kt(s)}function mo(t){var e=Object.assign({},t);return void 0!==t.years&&(e.year=t.years,delete e.years),void 0!==t.months&&(e.month=t.months,delete e.months),void 0!==t.days&&(e.date=t.days,delete e.days),void 0!==t.day&&(e.date=t.day,delete e.day),void 0!==t.hour&&(e.hours=t.hour,delete e.hour),void 0!==t.minute&&(e.minutes=t.minute,delete e.minute),void 0!==t.second&&(e.seconds=t.second,delete e.second),void 0!==t.millisecond&&(e.milliseconds=t.millisecond,delete e.millisecond),e}var vo=new Date;function go(t,e,i){return"persian"===i?Gs(t,e):(vo.setFullYear(t),vo.setMonth(e),vo.setDate(0),vo.getDate())}function _o(t,e,i){var n=void 0!==e.year?e.year:t["get"+i+"FullYear"](),s=void 0!==e.month?e.month-1:t["get"+i+"Month"](),o=go(n,s+1),r=Math.max(1,Math.min(o,void 0!==e.date?e.date:t["get"+i+"Date"]()));return t["set"+i+"Date"](1),t["set"+i+"Month"](2),t["set"+i+"FullYear"](n),t["set"+i+"Month"](s),t["set"+i+"Date"](r),delete e.year,delete e.month,delete e.date,t}function bo(t,e,i){var n=mo(e),s=new Date(t),o=void 0!==n.year||void 0!==n.month||void 0!==n.date?function(t,e,i){var n=t.getFullYear(),s=t.getMonth()+1;return void 0!==e.year&&(n+=i*e.year,delete e.year),void 0!==e.month&&(s+=i*e.month,delete e.month),_o(t,{year:n,month:s},""),void 0!==e.date&&(t.setDate(t.getDate()+i*e.date),delete e.date),t}(s,n,i):s;for(var r in n){var a=xt(r);o["set"+a](o["get"+a]()+i*n[r])}return o}function yo(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return t.length>1&&t[0]>=0&&t[0]<=99?wo(ao.reduce(function(e,i,n){return void 0!==t[n]&&(e[i]=t[n]),e},{})):new(Function.prototype.bind.apply(Date,[null].concat(t)))}function So(t,e,i){var n=mo(e),s=!0===i?"UTC":"",o=null===t||void 0===t?new Date:new Date(t),r=void 0!==n.year||void 0!==n.month||void 0!==n.date?_o(o,n,s):o;for(var a in n){r["set"+s+(a.charAt(0).toUpperCase()+a.slice(1))](n[a])}return r}function xo(t,e,i,n,s){var o={year:null,month:null,day:null,hour:null,minute:null,second:null,millisecond:null,timezoneOffset:null,dateHash:null,timeHash:null};if(void 0!==s&&Object.assign(o,s),void 0===t||null===t||""===t||"string"!=typeof t)return o;void 0===e&&(e=lo);var r=fo(i,et.props),a=r.months,l=r.monthsShort,c=function(t,e){var i="("+e.days.join("|")+"|)",n=t+i;if(!0===ho.has(n))return ho.get(n);var s="("+e.daysShort.join("|")+"|)",o="("+e.months.join("|")+"|)",r="("+e.monthsShort.join("|")+"|)",a={},l=0,c=t.replace(uo,function(t){switch(l++,t){case"YY":return a.YY=l,"(-?\\d{1,2}|)";case"YYYY":return a.YYYY=l,"(-?\\d{1,4}|)";case"M":return a.M=l,"(\\d{1,2}|)";case"MM":return a.M=l,"(\\d{2}|)";case"MMM":return a.MMM=l,r;case"MMMM":return a.MMMM=l,o;case"D":return a.D=l,"(\\d{1,2}|)";case"Do":return a.D=l,"(\\d{1,2}(?:st|nd|rd|th)|)";case"DD":return a.D=l,"(\\d{2}|)";case"H":return a.H=l,"(\\d{1,2}|)";case"HH":return a.H=l,"(\\d{2}|)";case"h":return a.h=l,"(\\d{1,2}|)";case"hh":return a.h=l,"(\\d{2}|)";case"m":return a.m=l,"(\\d{1,2}|)";case"mm":return a.m=l,"(\\d{2}|)";case"s":return a.s=l,"(\\d{1,2}|)";case"ss":return a.s=l,"(\\d{2}|)";case"S":return a.S=l,"(\\d{1}|)";case"SS":return a.S=l,"(\\d{2}|)";case"SSS":return a.S=l,"(\\d{3}|)";case"A":return a.A=l,"(AM|PM|)";case"a":return a.a=l,"(am|pm|)";case"aa":return a.aa=l,"(a\\.m\\.|p\\.m\\.|)";case"ddd":return s;case"dddd":return i;case"Q":case"d":case"E":return"(\\d{1}|)";case"Qo":return"(1st|2nd|3rd|4th|)";case"DDD":case"DDDD":return"(\\d{1,3}|)";case"w":return"(\\d{1,2}|)";case"ww":return"(\\d{2}|)";case"Z":return a.Z=l,"(Z|[+-]\\d{2}:\\d{2}|)";case"ZZ":return a.ZZ=l,"(Z|[+-]\\d{2}\\d{2}|)";case"X":return a.X=l,"(-?\\d+|)";case"x":return a.x=l,"(-?\\d{4,}|)";default:return l--,"["===t[0]&&(t=t.substring(1,t.length-1)),t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}),u={map:a,regex:new RegExp("^"+c)};return ho.set(n,u),u}(e,r),u=c.regex,h=c.map,d=t.match(u);if(null===d)return o;var f=Object.assign({},h);Object.keys(f).forEach(function(t){""===d[f[t]]&&(f[t]=void 0)});var p="";if(void 0!==f.X||void 0!==f.x){var m=parseInt(d[void 0!==f.X?f.X:f.x],10);if(!0===isNaN(m)||m<0)return o;var v=new Date(m*(void 0!==f.X?1e3:1));o.year=v.getFullYear(),o.month=v.getMonth()+1,o.day=v.getDate(),o.hour=v.getHours(),o.minute=v.getMinutes(),o.second=v.getSeconds(),o.millisecond=v.getMilliseconds()}else{if(void 0!==f.YYYY)o.year=parseInt(d[f.YYYY],10);else if(void 0!==f.YY){var g=parseInt(d[f.YY],10);o.year=g<0?g:2e3+g}if(void 0!==f.M){if(o.month=parseInt(d[f.M],10),o.month<1||o.month>12)return o}else void 0!==f.MMM?o.month=l.indexOf(d[f.MMM])+1:void 0!==f.MMMM&&(o.month=a.indexOf(d[f.MMMM])+1);if(void 0!==f.D){if(o.day=parseInt(d[f.D],10),null===o.year||null===o.month||o.day<1)return o;if(o.day>go(o.year,o.month,n))return o}void 0!==f.H?o.hour=parseInt(d[f.H],10)%24:void 0!==f.h&&(o.hour=parseInt(d[f.h],10)%12,(f.A&&"PM"===d[f.A]||f.a&&"pm"===d[f.a]||f.aa&&"p.m."===d[f.aa])&&(o.hour+=12),o.hour=o.hour%24),void 0!==f.m&&(o.minute=parseInt(d[f.m],10)%60),void 0!==f.s&&(o.second=parseInt(d[f.s],10)%60),void 0!==f.S&&(o.millisecond=parseInt(d[f.S],10)*Math.pow(10,3-d[f.S].length)),void 0===f.Z&&void 0===f.ZZ||(p=void 0!==f.Z?d[f.Z].replace(":",""):d[f.ZZ],o.timezoneOffset=("+"===p[0]?-1:1)*(60*p.slice(1,3)+1*p.slice(3,5)))}return o.dateHash=o.year+"/"+kt(o.month)+"/"+kt(o.day),o.timeHash=kt(o.hour)+":"+kt(o.minute)+":"+kt(o.second)+p,o}function wo(t,e){return So(null,t,e)}function Co(t){var e=yo(t.getFullYear(),t.getMonth(),t.getDate());e.setDate(e.getDate()-(e.getDay()+6)%7+3);var i=yo(e.getFullYear(),0,4);i.setDate(i.getDate()-(i.getDay()+6)%7+3);var n=e.getTimezoneOffset()-i.getTimezoneOffset();e.setHours(e.getHours()-n);var s=(e-i)/(7*so);return 1+Math.floor(s)}function ko(t,e){var i=new Date(t);return!0===e?function(t){return 1e4*t.getFullYear()+100*t.getMonth()+t.getDate()}(i):i.getTime()}function qo(t,e,i){var n=new Date(t),s="set"+(!0===i?"UTC":"");switch(e){case"year":case"years":n[s+"Month"](0);case"month":case"months":n[s+"Date"](1);case"day":case"days":case"date":n[s+"Hours"](0);case"hour":case"hours":n[s+"Minutes"](0);case"minute":case"minutes":n[s+"Seconds"](0);case"second":case"seconds":n[s+"Milliseconds"](0)}return n}function To(t,e,i){return Math.floor((t.getTime()-t.getTimezoneOffset()*ro-(e.getTime()-e.getTimezoneOffset()*ro))/i)}function Mo(t,e,i){void 0===i&&(i="days");var n=new Date(t),s=new Date(e);switch(i){case"years":case"year":return n.getFullYear()-s.getFullYear();case"months":case"month":return 12*(n.getFullYear()-s.getFullYear())+n.getMonth()-s.getMonth();case"days":case"day":case"date":return To(qo(n,"day"),qo(s,"day"),so);case"hours":case"hour":return To(qo(n,"hour"),qo(s,"hour"),oo);case"minutes":case"minute":return To(qo(n,"minute"),qo(s,"minute"),ro);case"seconds":case"second":return To(qo(n,"second"),qo(s,"second"),1e3)}}function $o(t){return Mo(t,qo(t,"year"),"days")+1}function Lo(t){return yo(t.getFullYear(),t.getMonth()+1,0).getDate()}function Eo(t){if(t>=11&&t<=13)return t+"th";switch(t%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"}var Oo={YY:function(t,e,i){var n=this.YYYY(t,e,i)%100;return n>=0?kt(n):"-"+kt(Math.abs(n))},YYYY:function(t,e,i){return void 0!==i&&null!==i?i:t.getFullYear()},M:function(t){return t.getMonth()+1},MM:function(t){return kt(t.getMonth()+1)},MMM:function(t,e){return e.monthsShort[t.getMonth()]},MMMM:function(t,e){return e.months[t.getMonth()]},Q:function(t){return Math.ceil((t.getMonth()+1)/3)},Qo:function(t){return Eo(this.Q(t))},D:function(t){return t.getDate()},Do:function(t){return Eo(t.getDate())},DD:function(t){return kt(t.getDate())},DDD:function(t){return $o(t)},DDDD:function(t){return kt($o(t),3)},d:function(t){return t.getDay()},dd:function(t,e){return this.dddd(t,e).slice(0,2)},ddd:function(t,e){return e.daysShort[t.getDay()]},dddd:function(t,e){return e.days[t.getDay()]},E:function(t){return t.getDay()||7},w:function(t){return Co(t)},ww:function(t){return kt(Co(t))},H:function(t){return t.getHours()},HH:function(t){return kt(t.getHours())},h:function(t){var e=t.getHours();return 0===e?12:e>12?e%12:e},hh:function(t){return kt(this.h(t))},m:function(t){return t.getMinutes()},mm:function(t){return kt(t.getMinutes())},s:function(t){return t.getSeconds()},ss:function(t){return kt(t.getSeconds())},S:function(t){return Math.floor(t.getMilliseconds()/100)},SS:function(t){return kt(Math.floor(t.getMilliseconds()/10))},SSS:function(t){return kt(t.getMilliseconds(),3)},A:function(t){return this.H(t)<12?"AM":"PM"},a:function(t){return this.H(t)<12?"am":"pm"},aa:function(t){return this.H(t)<12?"a.m.":"p.m."},Z:function(t,e,i,n){return po(void 0===n||null===n?t.getTimezoneOffset():n,":")},ZZ:function(t,e,i,n){return po(void 0===n||null===n?t.getTimezoneOffset():n)},X:function(t){return Math.floor(t.getTime()/1e3)},x:function(t){return t.getTime()}};function Ao(t,e,i,n,s){if((0===t||t)&&t!==1/0&&t!==-1/0){var o=new Date(t);if(!isNaN(o)){void 0===e&&(e=lo);var r=fo(i,et.props);return e.replace(co,function(t,e){return t in Oo?Oo[t](o,r,n,s):void 0===e?t:e.split("\\]").join("]")})}}}var Bo={isValid:function(t){return"number"==typeof t||!1===isNaN(Date.parse(t))},extractDate:function(t,e,i){var n=xo(t,e,i),s=yo(n.year,null===n.month?null:n.month-1,null===n.day?1:n.day,n.hour,n.minute,n.second,n.millisecond),o=s.getTimezoneOffset();return null===n.timezoneOffset||n.timezoneOffset===o?s:bo(s,{minutes:n.timezoneOffset-o},1)},buildDate:wo,getDayOfWeek:function(t,e){var i=fo(e,et.props);return 1+(7+new Date(t).getDay()-(i.firstDayOfWeek||0))%7},getWeekOfYear:Co,isBetweenDates:function(t,e,i,n){void 0===n&&(n={});var s=ko(e,n.onlyDate),o=ko(i,n.onlyDate),r=ko(t,n.onlyDate);return(r>s||!0===n.inclusiveFrom&&r===s)&&(ro)return o}return n},isSameDate:function(t,e,i){var n=new Date(t),s=new Date(e);if(void 0===i)return n.getTime()===s.getTime();switch(i){case"second":case"seconds":if(n.getSeconds()!==s.getSeconds())return!1;case"minute":case"minutes":if(n.getMinutes()!==s.getMinutes())return!1;case"hour":case"hours":if(n.getHours()!==s.getHours())return!1;case"day":case"days":case"date":if(n.getDate()!==s.getDate())return!1;case"month":case"months":if(n.getMonth()!==s.getMonth())return!1;case"year":case"years":if(n.getFullYear()!==s.getFullYear())return!1;break;default:throw new Error("date isSameDate unknown unit "+i)}return!0},daysInMonth:Lo,formatDate:Ao,clone:function(t){return!0===An(t)?new Date(t.getTime()):t}},Po=["Calendar","Years","Months"],zo=function(t){return Po.includes(t)},Io=function(t){return/^-?[\d]+\/[0-1]\d$/.test(t)},Ro=function(t){if("string"!=typeof t)return NaN;var e=t.split("/");return 1e4*parseInt(e[0],10)+parseInt(e.slice(1).join(""),10)};function Fo(t){return null!==t.dateHash&&null!==t.day&&null!==t.month&&null!==t.year}var Do,jo,Vo,No=i.default.extend({name:"QDate",mixins:[no],directives:{KeyGroupNavigation:Qs},props:{multiple:Boolean,range:Boolean,dayAsRange:Boolean,title:String,subtitle:String,mask:{default:"YYYY/MM/DD"},defaultYearMonth:{type:String,validator:Io},yearsInMonthView:Boolean,events:[Array,Function],eventColor:[String,Function],emitImmediately:Boolean,options:[Array,Function],modelNavigation:{type:[String,Boolean],default:"from",validator:function(t){return["from","to",!1].indexOf(t)>-1}},navigationMinYearMonth:{type:String,validator:Io},navigationMaxYearMonth:{type:String,validator:Io},noUnset:Boolean,firstDayOfWeek:[String,Number],todayBtn:Boolean,minimal:Boolean,defaultView:{type:String,default:"Calendar",validator:zo}},data:function(){var t=this.__getMask(),e=this.__getLocale(),i=this.__getViewModel(t,e),n=i.year,s=!0===this.$q.lang.rtl?"right":"left";return{view:this.defaultView,monthDirection:s,yearDirection:s,startYear:n-n%20-(n<0?20:0),editRange:void 0,innerMask:t,innerLocale:e,viewModel:i}},watch:{value:function(t){if(this.lastEmitValue===t)this.lastEmitValue=0;else{var e=this.__getViewModel(this.innerMask,this.innerLocale),i=e.year,n=e.month;this.__updateViewModel(i,n)}},view:function(){var t=this;this.$nextTick(function(){void 0!==t.$refs.viewTarget&&t.$refs.viewTarget.$el.focus()})},"viewModel.year":function(t){this.$emit("navigation",{year:t,month:this.viewModel.month})},"viewModel.month":function(t){this.$emit("navigation",{year:this.viewModel.year,month:t})},computedMask:function(t){this.__updateValue(t,this.innerLocale,"mask"),this.innerMask=t},computedLocale:function(t){this.__updateValue(this.innerMask,t,"locale"),this.innerLocale=t}},computed:{classes:function(){var t=!0===this.landscape?"landscape":"portrait";return"q-date q-date--"+t+" q-date--"+t+"-"+(!0===this.minimal?"minimal":"standard")+" q-date--"+this.darkSuffix+" q-"+this.darkSuffix+(!0===this.bordered?" q-date--bordered":"")+(!0===this.square?" q-date--square no-border-radius":"")+(!0===this.flat?" q-date--flat no-shadow":"")+(!0===this.disable?" disabled":!0===this.readonly?" q-date--readonly":"")},isImmediate:function(){return!0===this.emitImmediately&&!0!==this.multiple&&!0!==this.range},normalizedModel:function(){return!0===Array.isArray(this.value)?this.value:null!==this.value&&void 0!==this.value?[this.value]:[]},daysModel:function(){var t=this;return this.normalizedModel.filter(function(t){return"string"==typeof t}).map(function(e){return t.__decodeString(e,t.innerMask,t.innerLocale)}).filter(Fo)},rangeModel:function(){var t=this,e=function(e){return t.__decodeString(e,t.innerMask,t.innerLocale)};return this.normalizedModel.filter(function(t){return!0===On(t)&&void 0!==t.from&&void 0!==t.to}).map(function(t){var i=e(t.from),n=e(t.to);return Ro(i.dateHash)<=Ro(n.dateHash)?{from:i,to:n}:{from:n,to:i}}).filter(function(t){return!0===Fo(t.from)&&!0===Fo(t.to)})},getNativeDateFn:function(){return"persian"!==this.calendar?function(t){var e=yo(t.year,t.month-1,t.day);return e.setFullYear(t.year),e}:function(t){var e=Ys(t.year,t.month,t.day),i=yo(e.gy,e.gm-1,e.gd);return i.setFullYear(t.year),i}},encodeObjectFn:function(){var t=this;return"persian"===this.calendar?this.__getDayHash:function(e,i,n){return Ao(yo(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond),void 0===i?t.innerMask:i,void 0===n?t.innerLocale:n,e.year,e.timezoneOffset)}},daysInModel:function(){var t=this;return this.daysModel.length+this.rangeModel.reduce(function(e,i){return e+1+Mo(t.getNativeDateFn(i.to),t.getNativeDateFn(i.from))},0)},headerTitle:function(){if(void 0!==this.title&&null!==this.title&&this.title.length>0)return this.title;if(void 0!==this.editRange){var t=this.editRange.init,e=this.getNativeDateFn(t);return this.innerLocale.daysShort[e.getDay()]+", "+this.innerLocale.monthsShort[t.month-1]+" "+t.day+" — ?"}if(0===this.daysInModel)return" — ";if(this.daysInModel>1)return this.daysInModel+" "+this.innerLocale.pluralDay;var i=this.minSelectedModel,n=this.getNativeDateFn(i);return!0===isNaN(n.valueOf())?" — ":void 0!==this.innerLocale.headerTitle?this.innerLocale.headerTitle(n,i):this.innerLocale.daysShort[n.getDay()]+", "+this.innerLocale.monthsShort[i.month-1]+" "+i.day},headerSubtitle:function(){if(void 0!==this.subtitle&&null!==this.subtitle&&this.subtitle.length>0)return this.subtitle;if(0===this.daysInModel)return" — ";if(this.daysInModel>1){var t=this.minSelectedModel,e=this.maxSelectedModel,i=this.innerLocale.monthsShort;return i[t.month-1]+(t.year!==e.year?" "+t.year+" — "+i[e.month-1]+" ":t.month!==e.month?" — "+i[e.month-1]:"")+" "+e.year}return this.minSelectedModel.year},minSelectedModel:function(){return this.daysModel.concat(this.rangeModel.map(function(t){return t.from})).sort(function(t,e){return t.year-e.year||t.month-e.month})[0]},maxSelectedModel:function(){return this.daysModel.concat(this.rangeModel.map(function(t){return t.to})).sort(function(t,e){return e.year-t.year||e.month-t.month})[0]},dateArrow:function(){var t=[this.$q.iconSet.datetime.arrowLeft,this.$q.iconSet.datetime.arrowRight];return!0===this.$q.lang.rtl?t.reverse():t},computedFirstDayOfWeek:function(){return void 0!==this.firstDayOfWeek?Number(this.firstDayOfWeek):this.innerLocale.firstDayOfWeek},daysOfWeek:function(){var t=this.innerLocale.daysShort,e=this.computedFirstDayOfWeek;return e>0?t.slice(e,7).concat(t.slice(0,e)):t},daysInMonth:function(){var t=this.viewModel,e=t.year,i=t.month;return"persian"!==this.calendar?{prev:yo(e,i-1,0).getDate(),cur:yo(e,i,0).getDate(),next:yo(e,i+1,0).getDate()}:{prev:Gs(1===i?e-1:e,1===i?12:i-1),cur:Gs(e,i),next:Gs(12===i?e+1:e,12===i?1:i+1)}},today:function(){return this.__getCurrentDate()},evtColor:function(){var t=this;return"function"==typeof this.eventColor?this.eventColor:function(){return t.eventColor}},minNav:function(){if(void 0!==this.navigationMinYearMonth){var t=this.navigationMinYearMonth.split("/");return{year:parseInt(t[0],10),month:parseInt(t[1],10)}}},maxNav:function(){if(void 0!==this.navigationMaxYearMonth){var t=this.navigationMaxYearMonth.split("/");return{year:parseInt(t[0],10),month:parseInt(t[1],10)}}},navBoundaries:function(){var t={month:{prev:!0,next:!0},year:{prev:!0,next:!0}};return void 0!==this.minNav&&this.minNav.year>=this.viewModel.year&&(t.year.prev=!1,this.minNav.year===this.viewModel.year&&this.minNav.month>=this.viewModel.month&&(t.month.prev=!1)),void 0!==this.maxNav&&this.maxNav.year<=this.viewModel.year&&(t.year.next=!1,this.maxNav.year===this.viewModel.year&&this.maxNav.month<=this.viewModel.month&&(t.month.next=!1)),t},daysMap:function(){var t=this,e={};return this.daysModel.forEach(function(i){var n=t.__getMonthHash(i);void 0===e[n]&&(e[n]=[]),e[n].push(i.day)}),e},rangeMap:function(){var t=this,e={};return this.rangeModel.forEach(function(i){var n=t.__getMonthHash(i.from),s=t.__getMonthHash(i.to),o=Ro(s);if(void 0===e[n]&&(e[n]=[]),e[n].push({from:i.from.day,to:n===s?i.to.day:void 0,range:i}),Ro(n)12&&(c.year++,c.month=1),u=t.__getMonthHash(c)}),e},rangeViewMap:function(){var t=this;if(void 0===this.editRange)return{};var e={},i=this.editRange,n=i.init,s=i.initHash,o=i.final,r=i.finalHash,a=Ro(s)<=Ro(r)?[n,o]:[o,n],l=a[0],c=a[1],u=Ro(this.__getMonthHash(l)),h=Ro(this.__getMonthHash(c));return["prev","cur","next"].forEach(function(i){var n=Ro(t.viewMonthHash[i]);if(!(u>n||h0){for(var c=7-l,u=1;u<=c;u++)t.push({i:u,day:this.viewMonthHash.next+"/"+kt(u),fill:!0});this.__fillDaysMeta(t,this.viewMonthHash.next,this.daysInMonth.next,o+this.daysInMonth.cur,1,c)}return t.forEach(function(t){var e="q-date__calendar-item ";e+=!0===t.fill?"q-date__calendar-item--fill":"q-date__calendar-item--"+(!0===t.in?"in":"out"),void 0===t.range&&!0!==t.editRange||(e+=" text-"+t.color),void 0===t.range||!0===t.rangeTo&&!0===t.rangeFrom||(e+=" q-date__range"+(!0===t.rangeFrom?"-from":!0===t.rangeTo?"-to":"")),!0===t.editRange&&(e+=" q-date__edit-range"+(!0===t.editRangeFrom?"-from":"")+(!0===t.editRangeTo?"-to":"")),t.classes=e}),t},attrs:function(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0}},methods:{setToday:function(){this.__toggleDate(this.today,this.__getMonthHash(this.today)),this.setCalendarTo(this.today.year,this.today.month)},setView:function(t){!0===zo(t)&&(this.view=t)},offsetCalendar:function(t,e){["month","year"].includes(t)&&this["__goTo"+("month"===t?"Month":"Year")](!0===e?-1:1)},setCalendarTo:function(t,e){this.view="Calendar",this.__updateViewModel(t,e)},setEditingRange:function(t,e,i){var n=this;if(void 0===i&&(i=this.modelNavigation),!1!==this.range&&t){var s=Object.assign(Object.assign({},this.viewModel),t),o=void 0!==e?Object.assign(Object.assign({},this.viewModel),e):s;this.editRange={init:s,initHash:this.__getDayHash(s),final:o,finalHash:this.__getDayHash(o)},["from","to"].indexOf(i)>-1&&this.$nextTick(function(){n.setCalendarTo("from"===i?s.year:o.year,"from"===i?s.month:o.month)})}else this.editRange=void 0},__getMask:function(){return"persian"===this.calendar?"YYYY/MM/DD":this.mask},__decodeString:function(t,e,i){return xo(t,e,i,this.calendar,{hour:0,minute:0,second:0,millisecond:0})},__getViewModel:function(t,e){if(!1===this.modelNavigation)return void 0===this.viewModel?this.__getDefaultViewModel():this.viewModel;var i=!0===Array.isArray(this.value)?this.value:this.value?[this.value]:[];if(0===i.length)return this.__getDefaultViewModel();var n=i["from"===this.modelNavigation?0:i.length-1],s=this.__decodeString(void 0!==n.from?n.from:n,t,e);return null===s.dateHash?this.__getDefaultViewModel():s},__getDefaultViewModel:function(){var t,e;if(void 0!==this.defaultYearMonth){var i=this.defaultYearMonth.split("/");t=parseInt(i[0],10),e=parseInt(i[1],10)}else{var n=void 0!==this.today?this.today:this.__getCurrentDate();t=n.year,e=n.month}return{year:t,month:e,day:1,hour:0,minute:0,second:0,millisecond:0,dateHash:t+"/"+kt(e)+"/01"}},__getHeader:function(t){var e=this;if(!0!==this.minimal)return t("div",{staticClass:"q-date__header",class:this.headerClass},[t("div",{staticClass:"relative-position"},[t("transition",{props:{name:"q-transition--fade"}},[t("div",{key:"h-yr-"+this.headerSubtitle,staticClass:"q-date__header-subtitle q-date__header-link",class:"Years"===this.view?"q-date__header-link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:Tt(this,"vY",{click:function(){e.view="Years"},keyup:function(t){13===t.keyCode&&(e.view="Years")}})},[this.headerSubtitle])])]),t("div",{staticClass:"q-date__header-title relative-position flex no-wrap"},[t("div",{staticClass:"relative-position col"},[t("transition",{props:{name:"q-transition--fade"}},[t("div",{key:"h-sub"+this.headerTitle,staticClass:"q-date__header-title-label q-date__header-link",class:"Calendar"===this.view?"q-date__header-link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:Tt(this,"vC",{click:function(){e.view="Calendar"},keyup:function(t){13===t.keyCode&&(e.view="Calendar")}})},[this.headerTitle])])]),!0===this.todayBtn?t(Xe,{key:"today",staticClass:"q-date__header-today self-start",props:{icon:this.$q.iconSet.datetime.today,flat:!0,size:"sm",round:!0,tabindex:this.computedTabindex},on:Tt(this,"today",{click:this.setToday})}):null])])},__getNavigation:function(t,e){var i=this,n=e.label,s=e.view,o=e.key,r=e.dir,a=e.goTo,l=e.boundaries,c=e.cls;return[t("div",{staticClass:"row items-center q-date__arrow"},[t(Xe,{key:"go-#"+s,props:{round:!0,dense:!0,size:"sm",flat:!0,icon:this.dateArrow[0],tabindex:this.computedTabindex,disable:!1===l.prev},on:Tt(this,"go-#"+s,{click:function(){a(-1)}})})]),t("div",{staticClass:"relative-position overflow-hidden flex flex-center"+c},[t("transition",{props:{name:"q-transition--jump-"+r}},[t("div",{key:o},[t(Xe,{key:"view#"+s,props:{flat:!0,dense:!0,noCaps:!0,label:n,tabindex:this.computedTabindex},on:Tt(this,"view#"+s,{click:function(){i.view=s}})})])])]),t("div",{staticClass:"row items-center q-date__arrow"},[t(Xe,{key:"go+#"+s,props:{round:!0,dense:!0,size:"sm",flat:!0,icon:this.dateArrow[1],tabindex:this.computedTabindex,disable:!1===l.next},on:Tt(this,"go+#"+s,{click:function(){a(1)}})})])]},__getCalendarView:function(t){var e=this,i=void 0!==this.$scopedSlots.day?this.$scopedSlots.day:function(e){return!1!==e.event?[t("div",{staticClass:"q-date__event bg-"+e.event})]:null},n=void 0!==this.$scopedSlots.day?this.$scopedSlots.day:function(e){return t("div",[e.i])},s=this.days.find(function(t){return!0===t.unelevated}),o=void 0===s?this.days.find(function(t){return!0===t.today}):s,r=void 0===o?1:o.i,a="persian"===this.calendar?"dayP#":"day#";return[t("div",{key:"calendar-view",staticClass:"q-date__view q-date__calendar"},[t("div",{staticClass:"q-date__navigation row items-center no-wrap"},this.__getNavigation(t,{label:this.innerLocale.months[this.viewModel.month-1],view:"Months",key:this.viewModel.month,dir:this.monthDirection,goTo:this.__goToMonth,boundaries:this.navBoundaries.month,cls:" col"}).concat(this.__getNavigation(t,{label:this.viewModel.year,view:"Years",key:this.viewModel.year,dir:this.yearDirection,goTo:this.__goToYear,boundaries:this.navBoundaries.year,cls:""}))),t("div",{staticClass:"q-date__calendar-weekdays row items-center no-wrap"},this.daysOfWeek.map(function(e){return t("div",{staticClass:"q-date__calendar-item"},[t("div",[e])])})),t("div",{key:"kNavC",staticClass:"q-date__calendar-days-container relative-position overflow-hidden",directives:Tt(this,"kNavC",[{name:"key-group-navigation",arg:"7"}])},[t("transition",{props:{name:"q-transition--slide-"+this.monthDirection}},[t("div",{key:this.viewMonthHash.cur,staticClass:"q-date__calendar-days fit"},this.days.map(function(s){return t("div",{staticClass:s.classes},[!0===s.in?t(Xe,{key:a+s.i,staticClass:!0===s.today?"q-date__today":null,ref:r===s.i?"viewTarget":void 0,props:{dense:!0,flat:s.flat,unelevated:s.unelevated,color:s.color,textColor:s.textColor,label:s.i,tabindex:e.computedTabindex},on:Tt(e,a+s.i,{click:function(){e.__onDayClick(s.i)},focusin:function(){e.__onDayMouseover(s.i)},mouseenter:function(){e.__onDayMouseover(s.i)}})},i(s)):n(s)])}))])])])]},__getMonthsView:function(t){var e=this,i=this.viewModel.year===this.today.year,n={unelevated:!0,color:this.computedColor,textColor:this.computedTextColor},s={flat:!0},o=this.innerLocale.monthsShort.map(function(o,r){return t("div",{staticClass:"q-date__months-item flex flex-center"},[t(Xe,{key:"month#"+r,staticClass:!0===i&&e.today.month===r+1?"q-date__today":null,ref:e.viewModel.month===r+1?"viewTarget":void 0,props:Object.assign({label:o,tabindex:e.computedTabindex,disable:function(t){return void 0!==e.minNav&&e.viewModel.year===e.minNav.year&&e.minNav.month>t||void 0!==e.maxNav&&e.viewModel.year===e.maxNav.year&&e.maxNav.month=i&&this.viewModel.year<=n?this.viewModel.year:this.today.year>=i&&this.today.year<=n?this.today.year:i,r=function(t){return void 0!==e.minNav&&e.minNav.year>t||void 0!==e.maxNav&&e.maxNav.year=s&&t<=o}).forEach(function(e){var i=n+e-1;Object.assign(t[i],{selected:!0,unelevated:!0,flat:!1,color:r.computedColor,textColor:r.computedTextColor})}),void 0!==this.rangeMap[e]&&this.rangeMap[e].forEach(function(e){for(var a=n+Math.max(s,void 0===e.from?1:e.from)-1,l=n+Math.min(o,void 0===e.to?i:e.to)-1,c=a;c<=l;c++)Object.assign(t[c],{range:e.range,unelevated:!0,color:r.computedColor,textColor:r.computedTextColor});e.from>=s&&e.from<=o&&Object.assign(t[a],{rangeFrom:!0,flat:!1}),e.to>=s&&e.to<=o&&Object.assign(t[l],{rangeTo:!0,flat:!1})}),void 0!==this.rangeViewMap[e]){for(var a=n+Math.max(s,this.rangeViewMap[e].from)-1,l=n+Math.min(o,this.rangeViewMap[e].to)-1,c=a;c<=l;c++)t[c].color=this.computedColor,t[c].editRange=!0;!0===this.rangeViewMap[e].includeFrom&&this.rangeViewMap[e].from>=s&&this.rangeViewMap[e].from<=o&&(t[a].editRangeFrom=!0),!0===this.rangeViewMap[e].includeTo&&this.rangeViewMap[e].to>=s&&this.rangeViewMap[e].to<=o&&(t[l].editRangeTo=!0)}},__goToMonth:function(t){var e=this.viewModel.year,i=Number(this.viewModel.month)+t;13===i?(i=1,e++):0===i&&(i=12,e--),this.__updateViewModel(e,i),!0===this.isImmediate&&this.__emitImmediately("month")},__goToYear:function(t){var e=Number(this.viewModel.year)+t;this.__updateViewModel(e,this.viewModel.month),!0===this.isImmediate&&this.__emitImmediately("year")},__setYear:function(t){this.__updateViewModel(t,this.viewModel.month),this.view="Years"===this.defaultView?"Months":"Calendar",!0===this.isImmediate&&this.__emitImmediately("year")},__setMonth:function(t){this.__updateViewModel(this.viewModel.year,t),this.view="Calendar",!0===this.isImmediate&&this.__emitImmediately("month")},__getMonthHash:function(t){return t.year+"/"+kt(t.month)},__toggleDate:function(t,e){var i=this.daysMap[e];(void 0!==i&&!0===i.includes(t.day)?this.__removeFromModel:this.__addToModel)(t)},__getShortDate:function(t){return{year:t.year,month:t.month,day:t.day}},__onDayClick:function(t){var e=Object.assign({},this.viewModel,{day:t});if(!1!==this.range)if(void 0===this.editRange){var i=this.days.find(function(e){return!0!==e.fill&&e.i===t});if(!0!==this.noUnset&&void 0!==i.range)return void this.__removeFromModel({target:e,from:i.range.from,to:i.range.to});if(!0===i.selected)return void this.__removeFromModel(e);var n=this.__getDayHash(e);this.editRange={init:e,initHash:n,final:e,finalHash:n},this.$emit("range-start",this.__getShortDate(e))}else{var s=this.editRange.initHash,o=this.__getDayHash(e),r=Ro(s)<=Ro(o)?{from:this.editRange.init,to:e}:{from:e,to:this.editRange.init};this.editRange=void 0,this.__addToModel(s===o&&!0!==this.dayAsRange?e:Object.assign({},{target:e},r)),this.$emit("range-end",{from:this.__getShortDate(r.from),to:this.__getShortDate(r.to)})}else this.__toggleDate(e,this.viewMonthHash.cur)},__onDayMouseover:function(t){if(void 0!==this.editRange){var e=Object.assign({},this.viewModel,{day:t});Object.assign(this.editRange,{final:e,finalHash:this.__getDayHash(e)}),this.$emit("range-change",{from:this.__getShortDate(this.editRange.init),to:this.__getShortDate(this.editRange.final)})}},__updateViewModel:function(t,e){var i=this;t=parseInt(t,10),e=parseInt(e,10),void 0!==this.minNav&&t<=this.minNav.year&&(t=this.minNav.year,e=this.maxNav.year&&(t=this.maxNav.year,e>this.maxNav.month&&(e=this.maxNav.month));var n=t+"/"+kt(e)+"/01";n!==this.viewModel.dateHash&&(this.monthDirection=Ro(this.viewModel.dateHash)s}),r=this.rangeModel.filter(function(t){var e=t.from,i=t.to;return Ro(i.dateHash)s});e=o.concat(r).concat(t).map(function(t){return i.__encodeEntry(t)})}else{var a=this.normalizedModel.slice();a.push(this.__encodeEntry(t)),e=a}else e=this.__encodeEntry(t);this.__emitValue(e,"add",t)},__removeFromModel:function(t){if(!0!==this.noUnset){var e=null;if(!0===this.multiple&&!0===Array.isArray(this.value)){var i=this.__encodeEntry(t);0===(e=void 0!==t.from?this.value.filter(function(t){return void 0===t.from||t.from!==i.from&&t.to!==i.to}):this.value.filter(function(t){return t!==i})).length&&(e=null)}this.__emitValue(e,"remove",t)}},__updateValue:function(t,e,i){var n=this,s=this.daysModel.concat(this.rangeModel).map(function(i){return n.__encodeEntry(i,t,e)}).filter(function(t){return void 0!==t.from?!0===Fo(t.from)&&!0===Fo(t.to):Fo(t)});this.$emit("input",(!0===this.multiple?s:s[0])||null,i)}},render:function(t){var e=[t("div",{staticClass:"q-date__content col relative-position"},[t("transition",{props:{name:"q-transition--fade"}},[this["__get"+this.view+"View"](t)])])],i=Ht(this,"default");return void 0!==i&&e.push(t("div",{staticClass:"q-date__actions"},i)),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{class:this.classes,attrs:this.attrs,directives:[Qs],on:Object.assign({},this.qListeners)},[this.__getHeader(t),t("div",{staticClass:"q-date__main col column"},e)])}}),Ho={methods:{__addHistory:function(){var t=this;this.__historyEntry={condition:function(){return!0===t.hideOnRouteChange},handler:this.hide},Z.add(this.__historyEntry)},__removeHistory:function(){void 0!==this.__historyEntry&&(Z.remove(this.__historyEntry),this.__historyEntry=void 0)}},beforeDestroy:function(){!0===this.showing&&this.__removeHistory()}},Qo=d.passive,Wo=0,Uo={},Yo=!1;function Ko(){if(!1!==Yo){var t=window.innerHeight,e=window.visualViewport,i=document.documentElement.clientHeight,n=t-Math.ceil(e.height*e.scale);0===n&&i>t?document.documentElement.scrollTop-=3:(n>1&&n<4&&(document.documentElement.scrollTop+=n-1),Yo=!1)}}function Go(){!1!==Yo&&cancelAnimationFrame(Yo),Yo=requestAnimationFrame(Ko)}function Xo(){clearTimeout(jo),jo=setTimeout(function(){requestAnimationFrame(function(){var t=document.documentElement,e=document.body;t.style.height=window.innerHeight+"px",e.style.height=t.clientHeight+Uo.scrollTop+"px"})},200)}function Zo(t,e){var i=document.documentElement,n=document.body,s=window.visualViewport;if(clearTimeout(Do),clearTimeout(jo),"add"===t){document.qScrollPrevented=!0;var o=Xi();requestAnimationFrame(function(){var t=window.innerHeight,r=window.innerWidth,a=window.getComputedStyle(n),l=a.overflowX,c=a.overflowY,h=a.backgroundColor;if(Uo={htmlStyleBefore:i.style.cssText,bodyStyleBefore:n.style.cssText,htmlStyleAfter:"",bodyStyleAfter:"",scrollLeft:i.scrollLeft,scrollTop:i.scrollTop},!0===u.is.mobile)i.style.height=t+"px",n.style.width="calc(100vw + "+Math.abs(Uo.scrollLeft)+"px)",n.style.height=t+Uo.scrollTop+"px",window.addEventListener("orientationchange",Xo,Qo),void 0!==s&&!0===u.is.ios&&(Do=setTimeout(function(){s.addEventListener("scroll",Go,Qo)},500));else{var d=n.scrollWidth,f=n.scrollHeight,p="hidden"!==l&&("scroll"===l||d>r)?o:0,m="hidden"!==c&&("scroll"===c||f>t)?o:0;(m>0||p>0)&&(m>0&&(i.style.width="calc(100vw - "+m+"px)",!0===e&&(i.style.marginRight=m+"px")),p>0&&(i.style.height="calc(100vh - "+p+"px)")),n.style.width="calc(100vw + "+(Math.abs(Uo.scrollLeft)-m)+"px)",n.style.height="calc(100vh + "+(Uo.scrollTop-p)+"px)"}n.style.left=-Uo.scrollLeft+"px",n.style.top=-Uo.scrollTop+"px",n.style["padding"+(!0===e?"Left":"Right")]=Math.abs(Uo.scrollLeft)+"px",i.style.backgroundColor=h||"rgba(128, 128, 128, 0.01)",i.classList.add("q-body--prevent-scroll"),window.scrollTo(0,0),requestAnimationFrame(function(){0!==n.scrollTop&&(n.scrollTop=0)}),i.style.setProperty("--q-scroll-lock-left",-Uo.scrollLeft+"px");for(var v=document.querySelectorAll(".q-menu__container, .q-tooltip__container"),g=v.length-1;g>=0;g--)"absolute"===v[g].style.position&&v[g].classList.add("q-body--scroll-locked");Uo.htmlStyleAfter=i.style.cssText.split(";").filter(function(t){return t.trim().length>0}),Uo.bodyStyleAfter=n.style.cssText.split(";").filter(function(t){return t.trim().length>0})})}else!0===u.is.mobile&&(window.removeEventListener("orientationchange",Xo,Qo),void 0!==s&&!0===u.is.ios&&(s.removeEventListener("scroll",Go,Qo),Yo=!1)),requestAnimationFrame(function(){i.classList.remove("q-body--prevent-scroll");var t=Uo.htmlStyleAfter.reduce(function(t,e){return t.replace(e+";","")},i.style.cssText),e=Uo.bodyStyleAfter.reduce(function(t,e){return t.replace(e+";","")},n.style.cssText);i.style.cssText=Uo.htmlStyleBefore+t,n.style.cssText=Uo.bodyStyleBefore+e;for(var s=document.querySelectorAll(".q-body--scroll-locked"),o=s.length-1;o>=0;o--)s[o].classList.remove("q-body--scroll-locked");window.scrollTo(Uo.scrollLeft,Uo.scrollTop),Do=setTimeout(function(){var t;document.qScrollPrevented=!1,t=Zi.slice(),Zi=[],t.forEach(function(t){t()})},50)})}function Jo(t,e){var i="add";if(!0===t){if(Wo++,void 0!==Vo)return clearTimeout(Vo),void(Vo=void 0);if(Wo>1)return}else{if(0===Wo)return;if(--Wo>0)return;if(i="remove",!0===u.is.ios&&!0===u.is.nativeMobile)return clearTimeout(Vo),void(Vo=setTimeout(function(){Zo(i,e),Vo=void 0},100))}Zo(i,e)}var tr={methods:{__preventScroll:function(t){t===this.preventedScroll||void 0===this.preventedScroll&&!0!==t||(this.preventedScroll=t,Jo(t,this.$q.lang.rtl))}}},er={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},ir={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]},nr=i.default.extend({name:"QDialog",mixins:[Ot,Ho,hi,qi,tr,Mi],props:{persistent:Boolean,autoClose:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,position:{type:String,default:"standard",validator:function(t){return"standard"===t||["top","bottom","left","right"].includes(t)}},transitionShow:String,transitionHide:String},watch:{seamless:function(t){!0===this.showing&&this.__preventScroll(!0!==t)}},computed:{classes:function(){return"q-dialog__inner--"+(!0===this.maximized?"maximized":"minimized")+" q-dialog__inner--"+this.position+" "+er[this.position]+(!0===this.fullWidth?" q-dialog__inner--fullwidth":"")+(!0===this.fullHeight?" q-dialog__inner--fullheight":"")+(!0===this.square?" q-dialog__inner--square":"")},transitionProps:function(){var t="q-transition--"+(void 0===this.transitionShow?ir[this.position][0]:this.transitionShow),e="q-transition--"+(void 0===this.transitionHide?ir[this.position][1]:this.transitionHide);return{enterClass:t+"-enter",leaveClass:e+"-leave",appearClass:t+"-appear",enterToClass:t+"-enter-to",leaveToClass:e+"-leave-to",appearToClass:t+"-appear-to",enterActiveClass:t+"-enter-active",leaveActiveClass:e+"-leave-active",appearActiveClass:t+"-appear-active"}},useBackdrop:function(){return!0===this.showing&&!0!==this.seamless},hideOnRouteChange:function(){return!0!==this.persistent&&!0!==this.noRouteDismiss&&!0!==this.seamless},onBackdropEvents:function(){return{focusin:this.__onBackdropClick}},onInnerEvents:function(){var t=Object.assign({},this.qListeners,{input:S,"popup-show":S,"popup-hide":S});return!0===this.autoClose&&(t.click=this.__onAutoClose),t},onTransitionEvents:function(){return{"before-enter":this.__onTransitionBeforeEnter,enter:this.__onTransitionEnter,"after-enter":this.__onTransitionAfterEnter,"enter-cancelled":this.__onTransitionEnterCancelled,"before-leave":this.__onTransitionBeforeLeave,"after-leave":this.__onTransitionAfterLeave}},attrs:function(){return Object.assign({},{role:"dialog","aria-modal":!0===this.useBackdrop?"true":"false"},this.qAttrs)}},methods:{shake:function(t){t&&"function"==typeof t.focus?t.focus():this.__focusFirst(!0),this.$emit("shake");var e=this.__getInnerNode();void 0!==e&&(e.classList.remove("q-animate--scale"),e.classList.add("q-animate--scale"),clearTimeout(this.shakeTimeout),this.shakeTimeout=setTimeout(function(){e.classList.remove("q-animate--scale")},170))},__show:function(){var t=this;this.__addHistory(),this.__refocusTarget=!0===this.$q.platform.is.desktop&&!1===this.noRefocus&&null!==document.activeElement?document.activeElement:void 0,this.$el.dispatchEvent(k("popup-show",{bubbles:!0})),sn.register(this,function(){!0!==t.seamless?!0===t.persistent||!0===t.noEscDismiss?!0!==t.maximized&&!0!==t.noShake?t.shake():t.__focusFirst(!0):(t.$emit("escape-key"),t.hide()):t.__focusCyclePortal()}),this.__showPortal()},__hide:function(){this.__removeHistory(),this.__cleanup(!0),this.$el.dispatchEvent(k("popup-hide",{bubbles:!0}))},__onTransitionBeforeEnter:function(t){!0===this.$q.platform.is.ios&&t.click(),!0!==this.seamless&&this.__preventScroll(!0),t.setAttribute("data-q-portal-animating",!0)},__onTransitionEnter:function(){!0!==this.noFocus&&this.focus()},__onTransitionAfterEnter:function(t){t.removeAttribute("data-q-portal-animating"),this.$emit("show",{target:t})},__onTransitionEnterCancelled:function(t){t.removeAttribute("data-q-portal-animating"),!0!==this.seamless&&this.__preventScroll(!1)},__onTransitionBeforeLeave:function(){!0!==this.showing&&(this.__focusCyclePortal(!0),!0!==this.seamless&&(document.documentElement.scrollTop=0))},__onTransitionAfterLeave:function(t){!0!==this.showing&&(this.__hidePortal(),!0!==this.seamless&&this.__preventScroll(!1),this.$emit("hide",{target:t}))},__onAutoClose:function(t){this.hide(t),void 0!==this.qListeners.click&&this.$emit("click",t)},__onBackdropClick:function(t){!0!==this.persistent&&!0!==this.noBackdropDismiss?this.hide(t):!0!==this.noShake&&this.shake(t.relatedTarget)},__cleanup:function(t){clearTimeout(this.shakeTimeout),!0!==t&&!0!==this.showing||sn.pop(this)},__renderPortal:function(t){return t("div",{staticClass:"q-dialog fullscreen no-pointer-events q-dialog--"+(!0===this.seamless?"seamless":"modal"),class:this.contentClass,style:this.contentStyle,attrs:this.attrs},[t("transition",{props:{name:"q-transition--fade"}},!0===this.useBackdrop?[t("div",{staticClass:"q-dialog__backdrop fixed-full",attrs:Object.assign({},Lt,{tabindex:-1}),on:this.onBackdropEvents})]:null),t("transition",{props:this.transitionProps,on:this.onTransitionEvents},[!0===this.showing?t("div",{ref:"inner",staticClass:"q-dialog__inner flex no-pointer-events",class:this.classes,attrs:{tabindex:-1},on:this.onInnerEvents},this.__getFocusWrappedContent("default")):null])])}},mounted:function(){this.__processModelChange(this.value)},beforeDestroy:function(){this.__cleanup(),this.__preventScroll(!1),this.__refocusTarget=void 0}}),sr=["mouseover","mouseout","mouseenter","mouseleave"],or=i.default.extend({name:"QDrawer",inject:{layout:{default:function(){console.error("QDrawer needs to be child of QLayout")}}},mixins:[ue,Ho,ai,hi,tr],directives:{TouchPan:xs},props:{side:{type:String,default:"left",validator:function(t){return["left","right"].includes(t)}},width:{type:Number,default:300},mini:Boolean,miniToOverlay:Boolean,miniWidth:{type:Number,default:57},breakpoint:{type:Number,default:1023},showIfAbove:Boolean,behavior:{type:String,validator:function(t){return["default","desktop","mobile"].includes(t)},default:"default"},bordered:Boolean,elevated:Boolean,contentStyle:[String,Object,Array],contentClass:[String,Object,Array],overlay:Boolean,persistent:Boolean,noSwipeOpen:Boolean,noSwipeClose:Boolean,noSwipeBackdrop:Boolean},data:function(){var t="mobile"===this.behavior||"desktop"!==this.behavior&&this.layout.totalWidth<=this.breakpoint;return{belowBreakpoint:t,showing:!0===this.showIfAbove&&!1===t||!0===this.value}},watch:{belowBreakpoint:function(t){!0===t?(this.lastDesktopState=this.showing,!0===this.showing&&this.hide(!1)):!1===this.overlay&&"mobile"!==this.behavior&&!1!==this.lastDesktopState&&(!0===this.showing?(this.__applyPosition(0),this.__applyBackdrop(0),this.__cleanup()):this.show(!1))},"layout.totalWidth":function(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),!0!==this.layout.container?this.clearExecuteWhenScrollable=Ji(this.__updateBelowBreakpoint):this.__updateBelowBreakpoint()},side:function(t,e){this.layout.instances[e]===this&&(this.layout.instances[e]=void 0,this.layout[e].space=!1,this.layout[e].offset=0),this.layout.instances[t]=this,this.layout[t].size=this.size,this.layout[t].space=this.onLayout,this.layout[t].offset=this.offset},behavior:function(){this.__updateBelowBreakpoint()},breakpoint:function(){this.__updateBelowBreakpoint()},"layout.container":function(t){!0===this.showing&&this.__preventScroll(!0!==t),!0===t&&this.__updateBelowBreakpoint()},"layout.scrollbarWidth":function(){this.__applyPosition(!0===this.showing?0:void 0)},offset:function(t){this.__update("offset",t)},onLayout:function(t){this.$emit("on-layout",t),this.__update("space",t)},rightSide:function(){this.__applyPosition()},size:function(t){this.__applyPosition(),this.__updateSizeOnLayout(this.miniToOverlay,t)},miniToOverlay:function(t){this.__updateSizeOnLayout(t,this.size)},"$q.lang.rtl":function(){this.__applyPosition()},mini:function(){!0===this.value&&(this.__animateMini(),this.layout.__animate())},isMini:function(t){this.$emit("mini-state",t)}},computed:{rightSide:function(){return"right"===this.side},otherSide:function(){return!0===this.rightSide?"left":"right"},offset:function(){return!0===this.showing&&!1===this.belowBreakpoint&&!1===this.overlay?!0===this.miniToOverlay?this.miniWidth:this.size:0},size:function(){return!0===this.isMini?this.miniWidth:this.width},fixed:function(){return!0===this.overlay||!0===this.miniToOverlay||this.layout.view.indexOf(this.rightSide?"R":"L")>-1||this.$q.platform.is.ios&&!0===this.layout.container},onLayout:function(){return!0===this.showing&&!1===this.belowBreakpoint&&!1===this.overlay},onScreenOverlay:function(){return!0===this.showing&&!1===this.belowBreakpoint&&!0===this.overlay},backdropClass:function(){return!1===this.showing?"no-pointer-events":null},headerSlot:function(){return!0===this.rightSide?"r"===this.layout.rows.top[2]:"l"===this.layout.rows.top[0]},footerSlot:function(){return!0===this.rightSide?"r"===this.layout.rows.bottom[2]:"l"===this.layout.rows.bottom[0]},aboveStyle:function(){var t={};return!0===this.layout.header.space&&!1===this.headerSlot&&(!0===this.fixed?t.top=this.layout.header.offset+"px":!0===this.layout.header.space&&(t.top=this.layout.header.size+"px")),!0===this.layout.footer.space&&!1===this.footerSlot&&(!0===this.fixed?t.bottom=this.layout.footer.offset+"px":!0===this.layout.footer.space&&(t.bottom=this.layout.footer.size+"px")),t},style:function(){var t={width:this.size+"px"};return!0===this.belowBreakpoint?t:Object.assign(t,this.aboveStyle)},classes:function(){return"q-drawer--"+this.side+(!0===this.bordered?" q-drawer--bordered":"")+" q-drawer--"+this.darkSuffix+" q-"+this.darkSuffix+(!0!==this.showing?" q-layout--prevent-focus":"")+(!0===this.belowBreakpoint?" fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding":" q-drawer--"+(!0===this.isMini?"mini":"standard")+(!0===this.fixed||!0!==this.onLayout?" fixed":"")+(!0===this.overlay||!0===this.miniToOverlay?" q-drawer--on-top":"")+(!0===this.headerSlot?" q-drawer--top-padding":""))},stateDirection:function(){return(!0===this.$q.lang.rtl?-1:1)*(!0===this.rightSide?1:-1)},isMini:function(){return!0===this.mini&&!0!==this.belowBreakpoint},onNativeEvents:function(){var t=this;if(!0!==this.belowBreakpoint){var e={"!click":function(e){t.$emit("click",e)}};return sr.forEach(function(i){e[i]=function(e){void 0!==t.qListeners[i]&&t.$emit(i,e)}}),e}},onBackdropEvents:function(){return{click:this.hide,touchmove:w}},hideOnRouteChange:function(){return!0!==this.persistent&&(!0===this.belowBreakpoint||!0===this.onScreenOverlay)},onOpenerEvents:function(){return{touchstart:w}},openDirective:function(){var t,e=!0===this.$q.lang.rtl?this.side:this.otherSide;return[{name:"touch-pan",value:this.__openByTouch,modifiers:(t={},t[e]=!0,t.mouse=!0,t.prevent=!0,t)}]},contentCloseDirective:function(){var t;if(!0!==this.noSwipeClose){var e=!0===this.$q.lang.rtl?this.otherSide:this.side;return[{name:"touch-pan",value:this.__closeByTouch,modifiers:(t={},t[e]=!0,t.mouse=!0,t)}]}},backdropCloseDirective:function(){var t;if(!0!==this.noSwipeBackdrop){var e=!0===this.$q.lang.rtl?this.otherSide:this.side;return[{name:"touch-pan",value:this.__closeByTouch,modifiers:(t={},t[e]=!0,t.mouse=!0,t.mouseAllDir=!0,t)}]}}},methods:{__applyPosition:function(t){var e=this;void 0===t?this.$nextTick(function(){t=!0===e.showing?0:e.size,e.__applyPosition(e.stateDirection*t)}):void 0!==this.$refs.content&&(!0!==this.layout.container||!0!==this.rightSide||!0!==this.belowBreakpoint&&Math.abs(t)!==this.size?!0!==this.layout.container&&!0===this.rightSide&&!0===this.belowBreakpoint&&(t+=(!0===this.$q.lang.rtl?-1:1)*this.layout.scrollbarWidth):t+=this.stateDirection*this.layout.scrollbarWidth,this.__lastPosition!==t&&(this.$refs.content.style.transform="translateX("+t+"px)",this.__lastPosition=t))},__applyBackdrop:function(t,e){var i=this;void 0!==this.$refs.backdrop?this.$refs.backdrop.style.opacity=this.lastBackdropOpacity=.4*t:!0!==e&&this.$nextTick(function(){i.__applyBackdrop(t,!0)})},__setBackdropVisible:function(t){void 0!==this.$refs.backdrop&&this.$refs.backdrop.classList[!0===t?"remove":"add"]("no-pointer-events")},__setScrollable:function(t){var e=!0===t?"remove":!0!==this.layout.container?"add":"";""!==e&&document.body.classList[e]("q-body--drawer-toggle")},__animateMini:function(){var t=this;void 0!==this.timerMini?clearTimeout(this.timerMini):void 0!==this.$el&&this.$el.classList.add("q-drawer--mini-animate"),this.timerMini=setTimeout(function(){void 0!==t.$el&&t.$el.classList.remove("q-drawer--mini-animate"),t.timerMini=void 0},150)},__openByTouch:function(t){if(!1===this.showing){var e=this.size,i=wt(t.distance.x,0,e);if(!0===t.isFinal){var n=this.$refs.content,s=i>=Math.min(75,e);return n.classList.remove("no-transition"),void(!0===s?this.show():(this.layout.__animate(),this.__applyBackdrop(0),this.__applyPosition(this.stateDirection*e),n.classList.remove("q-drawer--delimiter"),n.classList.add("q-layout--prevent-focus"),this.__setBackdropVisible(!1)))}if(this.__applyPosition((!0===this.$q.lang.rtl?!0!==this.rightSide:this.rightSide)?Math.max(e-i,0):Math.min(0,i-e)),this.__applyBackdrop(wt(i/e,0,1)),!0===t.isFirst){var o=this.$refs.content;o.classList.add("no-transition"),o.classList.add("q-drawer--delimiter"),o.classList.remove("q-layout--prevent-focus"),this.__setBackdropVisible(!0)}}},__closeByTouch:function(t){if(!0===this.showing){var e=this.size,i=t.direction===this.side,n=(!0===this.$q.lang.rtl?!0!==i:i)?wt(t.distance.x,0,e):0;if(!0===t.isFinal){var s=Math.abs(n)0},br.range.get=function(){var t=this.selection;return null!==t&&t.rangeCount?t.getRangeAt(0):this._range},br.parent.get=function(){var t=this.range;if(null!==t){var e=t.startContainer;return e.nodeType===document.ELEMENT_NODE?e:e.parentNode}return null},br.blockParent.get=function(){var t=this.parent;return null!==t?function t(e,i){if(i&&e===i)return null;var n=e.nodeName.toLowerCase();if(!0===["div","li","ul","ol","blockquote"].includes(n))return e;var s=(window.getComputedStyle?window.getComputedStyle(e):e.currentStyle).display;return"block"===s||"table"===s?e:t(e.parentNode)}(t,this.el):null},_r.prototype.save=function(t){void 0===t&&(t=this.range),null!==t&&(this._range=t)},_r.prototype.restore=function(t){void 0===t&&(t=this._range);var e=document.createRange(),i=document.getSelection();null!==t?(e.setStart(t.startContainer,t.startOffset),e.setEnd(t.endContainer,t.endOffset),i.removeAllRanges(),i.addRange(e)):(i.selectAllChildren(this.el),i.collapseToEnd())},_r.prototype.savePosition=function(){var t,e=-1,i=document.getSelection(),n=this.el.parentNode;if(i.focusNode&&vr(i.focusNode,n))for(t=i.focusNode,e=i.focusOffset;t&&t!==n;)t!==this.el&&t.previousSibling?e+=(t=t.previousSibling).textContent.length:t=t.parentNode;this.savedPos=e},_r.prototype.restorePosition=function(t){if(void 0===t&&(t=0),this.savedPos>0&&this.savedPos0)if(e.nodeType===Node.TEXT_NODE)e.textContent.length\n \n \n Print - "+document.title+"\n \n \n
"+this.el.innerHTML+"
\n \n \n "),n.print(),void n.close()}if("link"===t){var s=this.getParentAttribute("href");if(null===s){var o=this.selectWord(this.selection),r=o?o.toString():"";if(!(r.length||this.range&&this.range.cloneContents().querySelector("img")))return;this.vm.editLinkUrl=gr.test(r)?r:"https://",document.execCommand("createLink",!1,this.vm.editLinkUrl),this.save(o.getRangeAt(0))}else this.vm.editLinkUrl=s,this.range.selectNodeContents(this.parent),this.save();return}if("fullscreen"===t)return this.vm.toggleFullscreen(),void i();if("viewsource"===t)return this.vm.isViewingSource=!1===this.vm.isViewingSource,this.vm.__setContent(this.vm.value),void i()}document.execCommand(t,!1,e),i()},_r.prototype.selectWord=function(t){if(null===t||!0!==t.isCollapsed||void 0===t.modify)return t;var e=document.createRange();e.setStart(t.anchorNode,t.anchorOffset),e.setEnd(t.focusNode,t.focusOffset);var i=e.collapsed?["backward","forward"]:["forward","backward"];e.detach();var n=t.focusNode,s=t.focusOffset;return t.collapse(t.anchorNode,t.anchorOffset),t.modify("move",i[0],"character"),t.modify("move",i[1],"word"),t.extend(n,s),t.modify("extend",i[1],"character"),t.modify("extend",i[0],"word"),t},Object.defineProperties(_r.prototype,br);var yr=Object.prototype.toString,Sr=Object.prototype.hasOwnProperty,xr=new Set(["Boolean","Number","String","Function","Array","Date","RegExp"].map(function(t){return"[object "+t+"]"}));function wr(t){if(t!==Object(t)||!0===xr.has(yr.call(t)))return!1;if(t.constructor&&!1===Sr.call(t,"constructor")&&!1===Sr.call(t.constructor.prototype,"isPrototypeOf"))return!1;var e;for(e in t);return void 0===e||Sr.call(t,e)}function Cr(){var t,e,i,n,s,o,r=arguments,a=arguments[0]||{},l=1,c=!1,u=arguments.length;for("boolean"==typeof a&&(c=a,a=arguments[1]||{},l=2),Object(a)!==a&&"function"!=typeof a&&(a={}),u===l&&(a=this,l--);l0},toolbarBackgroundClass:function(){if(this.toolbarBg)return"bg-"+this.toolbarBg},buttonProps:function(){return{type:"a",flat:!0!==this.toolbarOutline&&!0!==this.toolbarPush,noWrap:!0,outline:this.toolbarOutline,push:this.toolbarPush,rounded:this.toolbarRounded,dense:!0,color:this.toolbarColor,disable:!this.editable,size:"sm"}},buttonDef:function(){var t=this.$q.lang.editor,e=this.$q.iconSet.editor;return{bold:{cmd:"bold",icon:e.bold,tip:t.bold,key:66},italic:{cmd:"italic",icon:e.italic,tip:t.italic,key:73},strike:{cmd:"strikeThrough",icon:e.strikethrough,tip:t.strikethrough,key:83},underline:{cmd:"underline",icon:e.underline,tip:t.underline,key:85},unordered:{cmd:"insertUnorderedList",icon:e.unorderedList,tip:t.unorderedList},ordered:{cmd:"insertOrderedList",icon:e.orderedList,tip:t.orderedList},subscript:{cmd:"subscript",icon:e.subscript,tip:t.subscript,htmlTip:"x2"},superscript:{cmd:"superscript",icon:e.superscript,tip:t.superscript,htmlTip:"x2"},link:{cmd:"link",disable:function(t){return t.caret&&!t.caret.can("link")},icon:e.hyperlink,tip:t.hyperlink,key:76},fullscreen:{cmd:"fullscreen",icon:e.toggleFullscreen,tip:t.toggleFullscreen,key:70},viewsource:{cmd:"viewsource",icon:e.viewSource,tip:t.viewSource},quote:{cmd:"formatBlock",param:"BLOCKQUOTE",icon:e.quote,tip:t.quote,key:81},left:{cmd:"justifyLeft",icon:e.left,tip:t.left},center:{cmd:"justifyCenter",icon:e.center,tip:t.center},right:{cmd:"justifyRight",icon:e.right,tip:t.right},justify:{cmd:"justifyFull",icon:e.justify,tip:t.justify},print:{type:"no-state",cmd:"print",icon:e.print,tip:t.print,key:80},outdent:{type:"no-state",disable:function(t){return t.caret&&!t.caret.can("outdent")},cmd:"outdent",icon:e.outdent,tip:t.outdent},indent:{type:"no-state",disable:function(t){return t.caret&&!t.caret.can("indent")},cmd:"indent",icon:e.indent,tip:t.indent},removeFormat:{type:"no-state",cmd:"removeFormat",icon:e.removeFormat,tip:t.removeFormat},hr:{type:"no-state",cmd:"insertHorizontalRule",icon:e.hr,tip:t.hr},undo:{type:"no-state",cmd:"undo",icon:e.undo,tip:t.undo,key:90},redo:{type:"no-state",cmd:"redo",icon:e.redo,tip:t.redo,key:89},h1:{cmd:"formatBlock",param:"H1",icon:e.heading1||e.heading,tip:t.heading1,htmlTip:'

'+t.heading1+"

"},h2:{cmd:"formatBlock",param:"H2",icon:e.heading2||e.heading,tip:t.heading2,htmlTip:'

'+t.heading2+"

"},h3:{cmd:"formatBlock",param:"H3",icon:e.heading3||e.heading,tip:t.heading3,htmlTip:'

'+t.heading3+"

"},h4:{cmd:"formatBlock",param:"H4",icon:e.heading4||e.heading,tip:t.heading4,htmlTip:'

'+t.heading4+"

"},h5:{cmd:"formatBlock",param:"H5",icon:e.heading5||e.heading,tip:t.heading5,htmlTip:'
'+t.heading5+"
"},h6:{cmd:"formatBlock",param:"H6",icon:e.heading6||e.heading,tip:t.heading6,htmlTip:'
'+t.heading6+"
"},p:{cmd:"formatBlock",param:this.paragraphTag.toUpperCase(),icon:e.heading,tip:t.paragraph},code:{cmd:"formatBlock",param:"PRE",icon:e.code,htmlTip:""+t.code+""},"size-1":{cmd:"fontSize",param:"1",icon:e.size1||e.size,tip:t.size1,htmlTip:''+t.size1+""},"size-2":{cmd:"fontSize",param:"2",icon:e.size2||e.size,tip:t.size2,htmlTip:''+t.size2+""},"size-3":{cmd:"fontSize",param:"3",icon:e.size3||e.size,tip:t.size3,htmlTip:''+t.size3+""},"size-4":{cmd:"fontSize",param:"4",icon:e.size4||e.size,tip:t.size4,htmlTip:''+t.size4+""},"size-5":{cmd:"fontSize",param:"5",icon:e.size5||e.size,tip:t.size5,htmlTip:''+t.size5+""},"size-6":{cmd:"fontSize",param:"6",icon:e.size6||e.size,tip:t.size6,htmlTip:''+t.size6+""},"size-7":{cmd:"fontSize",param:"7",icon:e.size7||e.size,tip:t.size7,htmlTip:''+t.size7+""}}},buttons:function(){var t=this,e=this.definitions||{},i=this.definitions||this.fonts?Cr(!0,{},this.buttonDef,e,function(t,e,i,n){void 0===n&&(n={});var s=Object.keys(n);if(0===s.length)return{};var o={default_font:{cmd:"fontName",param:t,icon:i,tip:e}};return s.forEach(function(t){var e=n[t];o[t]={cmd:"fontName",param:e,icon:i,tip:e,htmlTip:''+e+""}}),o}(this.defaultFont,this.$q.lang.editor.defaultFont,this.$q.iconSet.editor.font,this.fonts)):this.buttonDef;return this.toolbar.map(function(n){return n.map(function(n){if(n.options)return{type:"dropdown",icon:n.icon,label:n.label,size:"sm",dense:!0,fixedLabel:n.fixedLabel,fixedIcon:n.fixedIcon,highlight:n.highlight,list:n.list,options:n.options.map(function(t){return i[t]})};var s=i[n];return s?"no-state"===s.type||e[n]&&(void 0===s.cmd||t.buttonDef[s.cmd]&&"no-state"===t.buttonDef[s.cmd].type)?s:Object.assign({type:"toggle"},s):{type:"slot",slot:n}})})},keys:function(){var t={},e=function(e){e.key&&(t[e.key]={cmd:e.cmd,param:e.param})};return this.buttons.forEach(function(t){t.forEach(function(t){t.options?t.options.forEach(e):e(t)})}),t},innerStyle:function(){return this.inFullscreen?this.contentStyle:[{minHeight:this.minHeight,height:this.height,maxHeight:this.maxHeight},this.contentStyle]},classes:function(){return"q-editor q-editor--"+(!0===this.isViewingSource?"source":"default")+(!0===this.disable?" disabled":"")+(!0===this.inFullscreen?" fullscreen column":"")+(!0===this.square?" q-editor--square no-border-radius":"")+(!0===this.flat?" q-editor--flat":"")+(!0===this.dense?" q-editor--dense":"")+" q-editor--"+this.darkSuffix+" q-"+this.darkSuffix},innerClass:function(){return[this.contentClass,{col:this.inFullscreen,"overflow-auto":this.inFullscreen||this.maxHeight}]},attrs:function(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0},onEditor:function(){return{focusin:this.__onFocusin,focusout:this.__onFocusout}}},data:function(){return{lastEmit:this.value,editLinkUrl:null,isViewingSource:!1}},watch:{value:function(t){this.lastEmit!==t&&(this.lastEmit=t,this.__setContent(t,!0))}},methods:{__onInput:function(){if(void 0!==this.$refs.content){var t=!0===this.isViewingSource?this.$refs.content.innerText:this.$refs.content.innerHTML;t!==this.value&&(this.lastEmit=t,this.$emit("input",t))}},__onKeydown:function(t){if(this.$emit("keydown",t),!0!==t.ctrlKey||!0===Ae(t))return this.refreshToolbar(),void(this.$q.platform.is.ie&&this.$nextTick(this.__onInput));var e=t.keyCode,i=this.keys[e];if(void 0!==i){var n=i.cmd,s=i.param;w(t),this.runCmd(n,s,!1)}},__onClick:function(t){this.refreshToolbar(),this.$emit("click",t)},__onBlur:function(t){if(void 0!==this.$refs.content){var e=this.$refs.content,i=e.scrollTop,n=e.scrollHeight;this.__offsetBottom=n-i}!0!==this.$q.platform.is.ie&&this.caret.save(),this.$emit("blur",t)},__onFocus:function(t){var e=this;this.$nextTick(function(){void 0!==e.$refs.content&&void 0!==e.__offsetBottom&&(e.$refs.content.scrollTop=e.$refs.content.scrollHeight-e.__offsetBottom)}),this.$emit("focus",t)},__onFocusin:function(t){if(!0===this.$el.contains(t.target)&&(null===t.relatedTarget||!0!==this.$el.contains(t.relatedTarget))){var e="inner"+(!0===this.isViewingSource?"Text":"HTML");this.caret.restorePosition(this.$refs.content[e].length),this.refreshToolbar()}},__onFocusout:function(t){!0!==this.$el.contains(t.target)||null!==t.relatedTarget&&!0===this.$el.contains(t.relatedTarget)||(this.caret.savePosition(),this.refreshToolbar())},__onPointerStart:function(t){this.__offsetBottom=void 0,void 0!==this.qListeners[t.type]&&this.$emit(t.type,t)},__onSelectionchange:function(){this.caret.save()},runCmd:function(t,e,i){var n=this;void 0===i&&(i=!0),this.focus(),this.caret.restore(),this.caret.apply(t,e,function(){n.focus(),n.caret.save(),!0!==n.$q.platform.is.ie&&!0!==n.$q.platform.is.edge||n.$nextTick(n.__onInput),i&&n.refreshToolbar()})},refreshToolbar:function(){var t=this;setTimeout(function(){t.editLinkUrl=null,t.$forceUpdate()},1)},focus:function(){void 0!==this.$refs.content&&this.$refs.content.focus({preventScroll:!0})},getContentEl:function(){return this.$refs.content},__setContent:function(t,e){if(void 0!==this.$refs.content){!0===e&&this.caret.savePosition();var i="inner"+(!0===this.isViewingSource?"Text":"HTML");this.$refs.content[i]=t,!0===e&&(this.caret.restorePosition(this.$refs.content[i].length),this.refreshToolbar())}}},created:function(){!1===n&&(document.execCommand("defaultParagraphSeparator",!1,this.paragraphTag),this.defaultFont=window.getComputedStyle(document.body).fontFamily)},mounted:function(){this.caret=new _r(this.$refs.content,this),this.__setContent(this.value),this.refreshToolbar(),document.addEventListener("selectionchange",this.__onSelectionchange)},beforeDestroy:function(){document.removeEventListener("selectionchange",this.__onSelectionchange)},render:function(t){var e;if(this.hasToolbar){var i=[t("div",{key:"qedt_top",staticClass:"q-editor__toolbar row no-wrap scroll-x",class:this.toolbarBackgroundClass},mr(t,this))];null!==this.editLinkUrl&&i.push(t("div",{key:"qedt_btm",staticClass:"q-editor__toolbar row no-wrap items-center scroll-x",class:this.toolbarBackgroundClass},function(t,e,i){if(e.caret){var n=e.toolbarColor||e.toolbarTextColor,s=e.editLinkUrl,o=function(){e.caret.restore(),s!==e.editLinkUrl&&document.execCommand("createLink",!1,""===s?" ":s),e.editLinkUrl=null,!0===i&&e.$nextTick(e.__onInput)};return[t("div",{staticClass:"q-mx-xs",class:"text-"+n},[e.$q.lang.editor.url+": "]),t("input",{key:"qedt_btm_input",staticClass:"col q-editor__link-input",domProps:{value:s},on:{input:function(t){S(t),s=t.target.value},keydown:function(t){if(!0!==Ae(t))switch(t.keyCode){case 13:return x(t),o();case 27:x(t),e.caret.restore(),e.editLinkUrl&&"https://"!==e.editLinkUrl||document.execCommand("unlink"),e.editLinkUrl=null}}}}),fr(t,[t(Xe,{key:"qedt_btm_rem",attrs:{tabindex:-1},props:Object.assign({},e.buttonProps,{label:e.$q.lang.label.remove,noCaps:!0}),on:{click:function(){e.caret.restore(),document.execCommand("unlink"),e.editLinkUrl=null,!0===i&&e.$nextTick(e.__onInput)}}}),t(Xe,{key:"qedt_btm_upd",props:Object.assign({},e.buttonProps,{label:e.$q.lang.label.update,noCaps:!0}),on:{click:o}})])]}}(t,this,this.$q.platform.is.ie))),e=t("div",{key:"toolbar_ctainer",staticClass:"q-editor__toolbars-container relative-position",directives:[Qs]},i)}var s=Object.assign({},this.qListeners,{input:this.__onInput,keydown:this.__onKeydown,click:this.__onClick,blur:this.__onBlur,focus:this.__onFocus,mousedown:this.__onPointerStart,touchstart:this.__onPointerStart});return t("div",{style:{height:!0===this.inFullscreen?"100%":null},class:this.classes,attrs:this.attrs,on:this.onEditor},[e,t("div",{ref:"content",staticClass:"q-editor__content",style:this.innerStyle,class:this.innerClass,attrs:{contenteditable:this.editable,placeholder:this.placeholder},domProps:n?{innerHTML:this.value}:void 0,on:s})])}}),qr=i.default.extend({name:"QItemLabel",mixins:[Nt],props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},computed:{classes:function(){return{"q-item__label--overline text-overline":this.overline,"q-item__label--caption text-caption":this.caption,"q-item__label--header":this.header,ellipsis:1===parseInt(this.lines,10)}},style:function(){if(void 0!==this.lines&&parseInt(this.lines,10)>1)return{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":this.lines}}},render:function(t){return t("div",{staticClass:"q-item__label",style:this.style,class:this.classes,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),Tr=i.default.extend({name:"QSlideTransition",props:{appear:Boolean,duration:{type:Number,default:300}},methods:{__begin:function(t,e,i){t.style.overflowY="hidden",void 0!==e&&(t.style.height=e+"px"),t.style.transition="height "+this.duration+"ms cubic-bezier(.25, .8, .50, 1)",this.animating=!0,this.done=i},__end:function(t,e){t.style.overflowY=null,t.style.height=null,t.style.transition=null,this.__cleanup(),e!==this.lastEvent&&this.$emit(e)},__cleanup:function(){this.done&&this.done(),this.done=null,this.animating=!1,clearTimeout(this.timer),clearTimeout(this.timerFallback),void 0!==this.el&&this.el.removeEventListener("transitionend",this.animListener),this.animListener=null}},beforeDestroy:function(){this.animating&&this.__cleanup()},render:function(t){var e=this;return t("transition",{key:"tr",props:{css:!1,appear:this.appear},on:Tt(this,"tr",{enter:function(t,i){var n=0;e.el=t,!0===e.animating?(e.__cleanup(),n=t.offsetHeight===t.scrollHeight?0:void 0):e.lastEvent="hide",e.__begin(t,n,i),e.timer=setTimeout(function(){t.style.height=t.scrollHeight+"px",e.animListener=function(i){Object(i)===i&&i.target!==t||e.__end(t,"show")},t.addEventListener("transitionend",e.animListener),e.timerFallback=setTimeout(e.animListener,1.1*e.duration)},100)},leave:function(t,i){var n;e.el=t,!0===e.animating?e.__cleanup():(e.lastEvent="show",n=t.scrollHeight),e.__begin(t,n,i),e.timer=setTimeout(function(){t.style.height=0,e.animListener=function(i){Object(i)===i&&i.target!==t||e.__end(t,"hide")},t.addEventListener("transitionend",e.animListener),e.timerFallback=setTimeout(e.animListener,1.1*e.duration)},100)}})},Ht(this,"default"))}}),Mr={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},$r={xs:2,sm:4,md:8,lg:16,xl:24},Lr=i.default.extend({name:"QSeparator",mixins:[ue,Nt],props:{spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},computed:{orientation:function(){return!0===this.vertical?"vertical":"horizontal"},classPrefix:function(){return" q-separator--"+this.orientation},insetClass:function(){return!1!==this.inset?this.classPrefix+"-"+Mr[this.inset]:""},classes:function(){return"q-separator"+this.classPrefix+this.insetClass+(void 0!==this.color?" bg-"+this.color:"")+" q-separator--"+this.darkSuffix},style:function(){var t={};if(void 0!==this.size&&(t[!0===this.vertical?"width":"height"]=this.size),!1!==this.spaced){var e=!0===this.spaced?$r.md+"px":this.spaced in $r?$r[this.spaced]+"px":this.spaced,i=!0===this.vertical?["Left","Right"]:["Top","Bottom"];t["margin"+i[0]]=t["margin"+i[1]]=e}return t},attrs:function(){return{"aria-orientation":this.orientation}}},render:function(t){return t("hr",{staticClass:"q-separator",class:this.classes,style:this.style,attrs:this.attrs,on:Object.assign({},this.qListeners)})}}),Er="q:expansion-item:close",Or=Object.keys(xe),Ar=i.default.extend({name:"QExpansionItem",mixins:[ue,ai,hi],props:Object.assign({},xe,{icon:String,label:String,labelLines:[Number,String],caption:String,captionLines:[Number,String],dense:Boolean,toggleAriaLabel:String,expandIcon:String,expandedIcon:String,expandIconClass:[Array,String,Object],duration:Number,headerInsetLevel:Number,contentInsetLevel:Number,expandSeparator:Boolean,defaultOpened:Boolean,hideExpandIcon:Boolean,expandIconToggle:Boolean,switchToggleSide:Boolean,denseToggle:Boolean,group:String,popup:Boolean,headerStyle:[Array,String,Object],headerClass:[Array,String,Object]}),data:function(){return{showing:void 0!==this.value?this.value:this.defaultOpened}},watch:{showing:function(t){!0===t&&(!0!==this.shouldRenderContent&&(this.shouldRenderContent=!0),void 0!==this.group&&this.$root.$emit(Er,this))},group:function(t,e){void 0!==t&&void 0===e?this.$root.$on(Er,this.__eventHandler):void 0===t&&void 0!==e&&this.$root.$off(Er,this.__eventHandler)}},computed:{classes:function(){return"q-expansion-item--"+(!0===this.showing?"expanded":"collapsed")+" q-expansion-item--"+(!0===this.popup?"popup":"standard")},contentStyle:function(){var t;if(void 0!==this.contentInsetLevel)return(t={})["padding"+(!0===this.$q.lang.rtl?"Right":"Left")]=56*this.contentInsetLevel+"px",t},hasLink:function(){return!0!==this.disable&&(void 0!==this.href||void 0!==this.to&&null!==this.to&&""!==this.to)},linkProps:function(){var t=this,e={};return Or.forEach(function(i){e[i]=t[i]}),e},isClickable:function(){return!0===this.hasLink||!0!==this.expandIconToggle},expansionIcon:function(){return void 0!==this.expandedIcon&&!0===this.showing?this.expandedIcon:this.expandIcon||this.$q.iconSet.expansionItem[!0===this.denseToggle?"denseIcon":"icon"]},activeToggleIcon:function(){return!0!==this.disable&&(!0===this.hasLink||!0===this.expandIconToggle)},headerSlotScope:function(){return{expanded:!0===this.showing,detailsId:this.targetUid,toggle:this.toggle,show:this.show,hide:this.hide}},toggleAriaAttrs:function(){var t=void 0!==this.toggleAriaLabel?this.toggleAriaLabel:this.$q.lang.label[!0===this.showing?"collapse":"expand"](this.label);return{role:"button","aria-expanded":!0===this.showing?"true":"false","aria-owns":this.targetUid,"aria-controls":this.targetUid,"aria-label":t}}},methods:{__onHeaderClick:function(t){!0!==this.hasLink&&this.toggle(t),this.$emit("click",t)},__toggleIconKeyboard:function(t){13===t.keyCode&&this.__toggleIcon(t)},__toggleIcon:function(t){!0===this.$q.interaction.isPointer&&void 0!==this.$refs.blurTarget&&document.activeElement!==this.$refs.blurTarget?this.$refs.blurTarget.focus():!0===this.$q.interaction.isKeyboard&&document.activeElement===this.$refs.blurTarget&&this.$refs.blurTarget.parentNode.focus(),this.toggle(t),w(t)},__eventHandler:function(t){this!==t&&this.group===t.group&&this.hide()},__getToggleIcon:function(t){var e={staticClass:"q-focusable relative-position cursor-pointer"+(!0===this.denseToggle&&!0===this.switchToggleSide?" items-end":""),class:this.expandIconClass,props:{side:!0!==this.switchToggleSide,avatar:this.switchToggleSide}},i=[t(ae,{staticClass:"q-expansion-item__toggle-icon",class:void 0===this.expandedIcon&&!0===this.showing?"q-expansion-item__toggle-icon--rotated":void 0,props:{name:this.expansionIcon}})];return!0===this.activeToggleIcon&&(Object.assign(e,{key:"inpExt",attrs:Object.assign({},{tabindex:0},this.toggleAriaAttrs),on:Tt(this,"inpExt",{click:this.__toggleIcon,keyup:this.__toggleIconKeyboard})}),i.unshift(t("div",{ref:"blurTarget",staticClass:"q-expansion-item__toggle-focus q-icon q-focus-helper q-focus-helper--rounded",attrs:{tabindex:-1}}))),t(hr,e,i)},__getHeader:function(t){var e;void 0!==this.$scopedSlots.header?e=[].concat(this.$scopedSlots.header(this.headerSlotScope)):(e=[t(hr,[t(qr,{props:{lines:this.labelLines}},[this.label||""]),this.caption?t(qr,{props:{lines:this.captionLines,caption:!0}},[this.caption]):null])],this.icon&&e[!0===this.switchToggleSide?"push":"unshift"](t(hr,{props:{side:!0===this.switchToggleSide,avatar:!0!==this.switchToggleSide}},[t(ae,{props:{name:this.icon}})]))),!0!==this.disable&&!0!==this.hideExpandIcon&&e[!0===this.switchToggleSide?"unshift":"push"](this.__getToggleIcon(t));var i={ref:"item",style:this.headerStyle,class:this.headerClass,props:{dark:this.dark,disable:this.disable,dense:this.dense,insetLevel:this.headerInsetLevel}};return!0===this.isClickable&&(i.props.clickable=!0,!0===this.hasLink?Object.assign(i.props,this.linkProps):i.attrs=this.toggleAriaAttrs,i.on=Object.assign({},this.qListeners,{click:this.__onHeaderClick})),t(ur,i,e)},__getContent:function(t){var e=this,i=[this.__getHeader(t),t(Tr,{key:"slide",props:{duration:this.duration},on:Tt(this,"slide",{show:function(){e.$emit("after-show")},hide:function(){e.$emit("after-hide")}})},[t("div",{staticClass:"q-expansion-item__content relative-position",style:this.contentStyle,attrs:{id:this.targetUid},directives:[{name:"show",value:this.showing}]},!0===this.shouldRenderContent?Ht(this,"default"):void 0)])];return this.expandSeparator&&i.push(t(Lr,{staticClass:"q-expansion-item__border q-expansion-item__border--top absolute-top",props:{dark:this.dark}}),t(Lr,{staticClass:"q-expansion-item__border q-expansion-item__border--bottom absolute-bottom",props:{dark:this.dark}})),i}},render:function(t){return t("div",{staticClass:"q-expansion-item q-item-type",class:this.classes},[t("div",{staticClass:"q-expansion-item__container relative-position"},this.__getContent(t))])},created:function(){this.shouldRenderContent=!0===this.showing,void 0!==this.group&&this.$root.$on(Er,this.__eventHandler),this.targetUid="e_"+bn()},beforeDestroy:function(){void 0!==this.group&&this.$root.$off(Er,this.__eventHandler)}}),Br=["top","right","bottom","left"],Pr={mixins:[Nt],props:{type:{type:String,default:"a"},outline:Boolean,push:Boolean,flat:Boolean,unelevated:Boolean,color:String,textColor:String,glossy:Boolean,square:Boolean,padding:String,label:{type:[String,Number],default:""},labelPosition:{type:String,default:"right",validator:function(t){return Br.includes(t)}},externalLabel:Boolean,hideLabel:{type:Boolean},labelClass:[Array,String,Object],labelStyle:[Array,String,Object],disable:Boolean,tabindex:[Number,String]},computed:{formClass:function(){return"q-fab--form-"+(!0===this.square?"square":"rounded")},stacked:function(){return!1===this.externalLabel&&["top","bottom"].includes(this.labelPosition)},labelProps:function(){if(!0===this.externalLabel){var t=null===this.hideLabel?!1===this.showing:this.hideLabel;return{action:"push",data:{staticClass:"q-fab__label q-tooltip--style q-fab__label--external q-fab__label--external-"+this.labelPosition+(!0===t?" q-fab__label--external-hidden":""),style:this.labelStyle,class:this.labelClass}}}return{action:["left","top"].includes(this.labelPosition)?"unshift":"push",data:{staticClass:"q-fab__label q-fab__label--internal q-fab__label--internal-"+this.labelPosition+(!0===this.hideLabel?" q-fab__label--internal-hidden":""),style:this.labelStyle,class:this.labelClass}}}}},zr=["up","right","down","left"],Ir=["left","center","right"],Rr=i.default.extend({name:"QFab",inheritAttrs:!1,mixins:[Pr,Ot,hi],provide:function(){return{__qFab:this}},props:{icon:String,activeIcon:String,hideIcon:Boolean,hideLabel:{default:null},direction:{type:String,default:"right",validator:function(t){return zr.includes(t)}},persistent:Boolean,verticalActionsAlign:{type:String,default:"center",validator:function(t){return Ir.includes(t)}}},data:function(){return{showing:!0===this.value}},computed:{hideOnRouteChange:function(){return!0!==this.persistent},classes:function(){return"q-fab--align-"+this.verticalActionsAlign+" "+this.formClass+(!0===this.showing?" q-fab--opened":"")},actionsClasses:function(){return"q-fab__actions--"+this.direction+(!0===this.showing?" q-fab__actions--opened":"")},actionsAttrs:function(){var t={id:this.targetUid};return!0===this.showing?t.role="menu":t["aria-hidden"]="true",t},iconHolderClasses:function(){return!0===this.showing?"q-fab__icon-holder--opened":""},attrs:function(){return Object.assign({},{"aria-expanded":!0===this.showing?"true":"false","aria-haspopup":"true","aria-controls":this.targetUid,"aria-owns":this.targetUid},this.qAttrs)},slotScope:function(){return{opened:this.showing}}},methods:{__onChildClick:function(t){this.hide(t),this.$refs.trigger&&this.$refs.trigger.$el&&this.$refs.trigger.$el.focus()},__getIcon:function(t,e,i){var n=this.$scopedSlots[e],s="q-fab__"+e+" absolute-full";return void 0===n?t(ae,{staticClass:s,props:{name:this[i]||this.$q.iconSet.fab[i]}}):t("div",{staticClass:s},n(this.slotScope))}},render:function(t){var e=[];return!0!==this.hideIcon&&e.push(t("div",{staticClass:"q-fab__icon-holder",class:this.iconHolderClasses},[this.__getIcon(t,"icon","icon"),this.__getIcon(t,"active-icon","activeIcon")])),""===this.label&&void 0===this.$scopedSlots.label||e[this.labelProps.action](t("div",this.labelProps.data,void 0!==this.$scopedSlots.label?this.$scopedSlots.label(this.slotScope):[this.label])),t("div",{staticClass:"q-fab z-fab row inline justify-center",class:this.classes,on:Object.assign({},this.qListeners)},[t(Xe,{key:"tog",ref:"trigger",class:this.formClass,props:Object.assign({},this.$props,{noWrap:!0,stack:this.stacked,align:void 0,icon:void 0,label:void 0,noCaps:!0,fab:!0}),attrs:this.attrs,on:Tt(this,"tog",{click:this.toggle})},Wt(e,this,"tooltip")),t("div",{staticClass:"q-fab__actions flex no-wrap inline",class:this.actionsClasses,attrs:this.actionsAttrs},Ht(this,"default"))])},created:function(){this.targetUid="fb_"+bn()}}),Fr={start:"self-end",center:"self-center",end:"self-start"},Dr=Object.keys(Fr),jr=i.default.extend({name:"QFabAction",mixins:[Pr],props:{icon:{type:String,default:""},anchor:{type:String,validator:function(t){return Dr.includes(t)}},to:[String,Object],replace:Boolean},inject:{__qFab:{default:function(){return{showing:!0,__onChildClick:p}}}},computed:{classes:function(){var t=Fr[this.anchor];return this.formClass+(void 0!==t?" "+t:"")},onEvents:function(){return Object.assign({},this.qListeners,{click:this.click})},isDisabled:function(){return!0!==this.__qFab.showing||!0===this.disable}},methods:{click:function(t){this.__qFab.__onChildClick(t),this.$emit("click",t)}},render:function(t){var e=[];return void 0!==this.$scopedSlots.icon?e.push(this.$scopedSlots.icon()):""!==this.icon&&e.push(t(ae,{props:{name:this.icon}})),""===this.label&&void 0===this.$scopedSlots.label||e[this.labelProps.action](t("div",this.labelProps.data,void 0!==this.$scopedSlots.label?this.$scopedSlots.label():[this.label])),t(Xe,{class:this.classes,props:Object.assign({},this.$props,{noWrap:!0,stack:this.stacked,icon:void 0,label:void 0,noCaps:!0,fabMini:!0,disable:this.isDisabled}),on:this.onEvents},Wt(e,this,"default"))}}),Vr=[!0,!1,"ondemand"],Nr={props:{value:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],validator:function(t){return Vr.includes(t)}}},data:function(){return{isDirty:null,innerError:!1,innerErrorMessage:void 0}},watch:{value:function(){this.__validateIfNeeded()},disable:function(t){!0===t?this.__resetValidation():this.__validateIfNeeded(!0)},reactiveRules:{handler:function(t){var e=this;!0===t?void 0===this.unwatchRules&&(this.unwatchRules=this.$watch("rules",function(){e.__validateIfNeeded(!0)})):void 0!==this.unwatchRules&&(this.unwatchRules(),this.unwatchRules=void 0)},immediate:!0},focused:function(t){!0===t?null===this.isDirty&&(this.isDirty=!1):!1===this.isDirty&&(this.isDirty=!0,!0===this.hasActiveRules&&"ondemand"!==this.lazyRules&&!1===this.innerLoading&&this.debouncedValidate())},hasError:function(t){var e=document.getElementById(this.targetUid);null!==e&&e.setAttribute("aria-invalid",!0===t)}},computed:{hasRules:function(){return void 0!==this.rules&&null!==this.rules&&this.rules.length>0},hasActiveRules:function(){return!0!==this.disable&&!0===this.hasRules},hasError:function(){return!0===this.error||!0===this.innerError},computedErrorMessage:function(){return"string"==typeof this.errorMessage&&this.errorMessage.length>0?this.errorMessage:this.innerErrorMessage}},created:function(){this.debouncedValidate=H(this.validate,0)},mounted:function(){this.validateIndex=0},beforeDestroy:function(){void 0!==this.unwatchRules&&this.unwatchRules(),this.debouncedValidate.cancel()},methods:{resetValidation:function(){this.isDirty=null,this.__resetValidation()},validate:function(t){var e=this;if(void 0===t&&(t=this.value),!0!==this.hasActiveRules)return!0;for(var i=++this.validateIndex,n=!0!==this.innerLoading?function(){return!0!==e.isDirty&&(e.isDirty=!0)}:function(){},s=function(t,i){!0===t&&n(),e.innerError!==t&&(e.innerError=t);var s=i||void 0;e.innerErrorMessage!==s&&(e.innerErrorMessage=s),!1!==e.innerLoading&&(e.innerLoading=!1)},o=[],r=0;r0},computedCounter:function(){if(!1!==this.counter){var t="string"==typeof this.value||"number"==typeof this.value?(""+this.value).length:!0===Array.isArray(this.value)?this.value.length:0,e=void 0!==this.maxlength?this.maxlength:this.maxValues;return t+(void 0!==e?" / "+e:"")}},floatingLabel:function(){return!0===this.stackLabel||!0===this.focused||"number"==typeof this.inputValue||"string"==typeof this.inputValue&&this.inputValue.length>0||!0!==this.hideSelected&&!0===this.hasValue||void 0!==this.displayValue&&null!==this.displayValue&&(""+this.displayValue).length>0},shouldRenderBottom:function(){return!0===this.bottomSlots||void 0!==this.hint||!0===this.hasRules||!0===this.counter||null!==this.error},classes:function(){var t,e="outlined"===this.styleType&&!0===this.outlinedMd?"md":"std";return(t={})[this.fieldClass]=void 0!==this.fieldClass,t["q-field--"+this.styleType]=!0,t["q-field--outlined--"+e]="outlined"===this.styleType,t["q-field--rounded"]=this.rounded,t["q-field--square"]=this.square,t["q-field--focused"]=!0===this.focused,t["q-field--highlighted"]=!0===this.focused||!0===this.hasError,t["q-field--float"]=this.floatingLabel,t["q-field--labeled"]=this.hasLabel,t["q-field--labeled--"+e]=this.hasLabel,t["q-field--dense"]=this.dense,t["q-field--item-aligned q-item-type"]=this.itemAligned,t["q-field--"+this.darkSuffix]=!0,t["q-field--auto-height"]=void 0===this.__getControl,t["q-field--with-bottom"]=!0!==this.hideBottomSpace&&!0===this.shouldRenderBottom,t["q-field--error"]=this.hasError,t["q-field--readonly"]=!0===this.readonly&&!0!==this.disable,t["q-field--disabled"]=!0===this.disable,t},styleType:function(){return!0===this.filled?"filled":!0===this.outlined||!0===this.outlinedMd?"outlined":!0===this.borderless?"borderless":this.standout?"standout":"standard"},contentClass:function(){var t=[];if(!0===this.hasError)t.push("text-negative");else{if("string"==typeof this.standout&&this.standout.length>0&&!0===this.focused)return this.standout;void 0!==this.color&&t.push("text-"+this.color)}return void 0!==this.bgColor&&t.push("bg-"+this.bgColor),t},hasLabel:function(){return!0===this.labelSlot||void 0!==this.label},labelClass:function(){if(void 0!==this.labelColor&&!0!==this.hasError)return"text-"+this.labelColor},controlSlotScope:function(){return{id:this.targetUid,field:this.$el,editable:this.editable,focused:this.focused,floatingLabel:this.floatingLabel,value:this.value,emitValue:this.__emitValue}},bottomSlotScope:function(){return{id:this.targetUid,field:this.$el,editable:this.editable,focused:this.focused,value:this.value,errorMessage:this.computedErrorMessage}},attrs:function(){var t={for:this.targetUid};return!0===this.disable?t["aria-disabled"]="true":!0===this.readonly&&(t["aria-readonly"]="true"),t}},methods:{focus:function(){this.__focus()},blur:function(){var t=document.activeElement;null!==t&&this.$el.contains(t)&&t.blur()},__focus:function(){var t=document.activeElement,e=this.$refs.target;void 0===e||null!==t&&t.id===this.targetUid||(!0===e.hasAttribute("tabindex")||(e=e.querySelector("[tabindex]")),null!==e&&_i(e))},__getContent:function(t){var e=[];return void 0!==this.$scopedSlots.prepend&&e.push(t("div",{staticClass:"q-field__prepend q-field__marginal row no-wrap items-center",key:"prepend",on:this.slotsEvents},this.$scopedSlots.prepend())),e.push(t("div",{staticClass:"q-field__control-container col relative-position row no-wrap q-anchor--skip"},this.__getControlContainer(t))),!0===this.hasError&&!1===this.noErrorIcon&&e.push(this.__getInnerAppendNode(t,"error",[t(ae,{props:{name:this.$q.iconSet.field.error,color:"negative"}})])),!0===this.loading||!0===this.innerLoading?e.push(this.__getInnerAppendNode(t,"inner-loading-append",void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():[t(qe,{props:{color:this.color}})])):!0===this.clearable&&!0===this.hasValue&&!0===this.editable&&e.push(this.__getInnerAppendNode(t,"inner-clearable-append",[t(ae,{staticClass:"q-field__focusable-action",props:{tag:"button",name:this.clearIcon||this.$q.iconSet.field.clear},attrs:Et,on:this.clearableEvents})])),void 0!==this.$scopedSlots.append&&e.push(t("div",{staticClass:"q-field__append q-field__marginal row no-wrap items-center",key:"append",on:this.slotsEvents},this.$scopedSlots.append())),void 0!==this.__getInnerAppend&&e.push(this.__getInnerAppendNode(t,"inner-append",this.__getInnerAppend(t))),void 0!==this.__getControlChild&&e.push(this.__getControlChild(t)),e},__getControlContainer:function(t){var e=[];void 0!==this.prefix&&null!==this.prefix&&e.push(t("div",{staticClass:"q-field__prefix no-pointer-events row items-center"},[this.prefix])),!0===this.hasShadow&&void 0!==this.__getShadowControl&&e.push(this.__getShadowControl(t)),void 0!==this.__getControl?e.push(this.__getControl(t)):void 0!==this.$scopedSlots.rawControl?e.push(this.$scopedSlots.rawControl()):void 0!==this.$scopedSlots.control&&e.push(t("div",{ref:"target",staticClass:"q-field__native row",attrs:Object.assign({},{tabindex:-1},this.qAttrs,{"data-autofocus":this.autofocus||void 0})},this.$scopedSlots.control(this.controlSlotScope)));var i=[Ht(this,"label",this.label)];return!0===this.outlinedMd&&i.unshift(t("div",{staticClass:"q-field__label-back",style:{backgroundColor:this.__getBgColor()}})),!0===this.hasLabel&&e.push(t("div",{staticClass:"q-field__label no-pointer-events absolute ellipsis",class:this.labelClass},i)),void 0!==this.suffix&&null!==this.suffix&&e.push(t("div",{staticClass:"q-field__suffix no-pointer-events row items-center"},[this.suffix])),e.concat(void 0!==this.__getDefaultSlot?this.__getDefaultSlot(t):Ht(this,"default"))},__getBottom:function(t){var e,i;!0===this.hasError?(i="q--slot-error",void 0!==this.$scopedSlots.error?e=this.$scopedSlots.error(this.bottomSlotScope):void 0!==this.computedErrorMessage&&(e=[t("div",{attrs:{role:"alert"}},[this.computedErrorMessage])],i=this.computedErrorMessage)):!0===this.hideHint&&!0!==this.focused||(i="q--slot-hint",void 0!==this.$scopedSlots.hint?e=this.$scopedSlots.hint(this.bottomSlotScope):void 0!==this.hint&&(e=[t("div",[this.hint])],i=this.hint));var n=!0===this.counter||void 0!==this.$scopedSlots.counter;if(!0!==this.hideBottomSpace||!1!==n||void 0!==e){var s=t("div",{key:i,staticClass:"q-field__messages col"},e);return t("div",{staticClass:"q-field__bottom row items-start q-field__bottom--"+(!0!==this.hideBottomSpace?"animated":"stale"),on:{click:x}},[!0===this.hideBottomSpace?s:t("transition",{props:{name:"q-transition--field-message"}},[s]),!0===n?t("div",{staticClass:"q-field__counter"},void 0!==this.$scopedSlots.counter?this.$scopedSlots.counter():[this.computedCounter]):null])}},__getInnerAppendNode:function(t,e,i){return null===i?null:t("div",{staticClass:"q-field__append q-field__marginal row no-wrap items-center q-anchor--skip",key:e},i)},__onControlPopupShow:function(t){void 0!==t&&S(t),this.$emit("popup-show",t),this.hasPopupOpen=!0,this.__onControlFocusin(t)},__onControlPopupHide:function(t){void 0!==t&&S(t),this.$emit("popup-hide",t),this.hasPopupOpen=!1,this.__onControlFocusout(t)},__onControlFocusin:function(t){clearTimeout(this.focusoutTimer),!0===this.editable&&!1===this.focused&&(this.focused=!0,this.$emit("focus",t))},__onControlFocusout:function(t,e){var i=this;clearTimeout(this.focusoutTimer),this.focusoutTimer=setTimeout(function(){(!0!==document.hasFocus()||!0!==i.hasPopupOpen&&void 0!==i.$refs&&void 0!==i.$refs.control&&!1===i.$refs.control.contains(document.activeElement))&&(!0===i.focused&&(i.focused=!1,i.$emit("blur",t)),void 0!==e&&e())})},__clearValue:function(t){var e=this;(w(t),!0!==this.$q.platform.is.mobile)?(this.$refs.target||this.$el).focus():!0===this.$el.contains(document.activeElement)&&document.activeElement.blur();"file"===this.type&&(this.$refs.input.value=null),this.$emit("input",null),this.$emit("clear",this.value),this.$nextTick(function(){e.resetValidation(),!0!==e.$q.platform.is.mobile&&(e.isDirty=!1)})},__emitValue:function(t){this.$emit("input",t)},__getBgColor:function(){for(var t,e,i=this.parents.length-1;i>=0;i--)if(t=this.parents[i],Qr.has(t)&&"rgba(0, 0, 0, 0)"!==(e=Qr.get(t).backgroundColor)&&"transparent"!==e)return e}},render:function(t){void 0!==this.__onPreRender&&this.__onPreRender();var e=void 0===this.__getControl&&void 0===this.$scopedSlots.control?Object.assign({},this.qAttrs,{"data-autofocus":this.autofocus||void 0},this.attrs):this.attrs;return t("label",{staticClass:"q-field q-validation-component row no-wrap items-start q-key-group-navigation--ignore-key",class:this.classes,attrs:e},[void 0!==this.$scopedSlots.before?t("div",{staticClass:"q-field__before q-field__marginal row no-wrap items-center",on:this.slotsEvents},this.$scopedSlots.before()):null,t("div",{staticClass:"q-field__inner relative-position col self-stretch"},[t("div",{ref:"control",staticClass:"q-field__control relative-position row no-wrap",class:this.contentClass,attrs:{tabindex:-1},on:this.controlEvents},this.__getContent(t)),!0===this.shouldRenderBottom?this.__getBottom(t):null]),void 0!==this.$scopedSlots.after?t("div",{staticClass:"q-field__after q-field__marginal row no-wrap items-center",on:this.slotsEvents},this.$scopedSlots.after()):null])},created:function(){void 0!==this.__onPreRender&&this.__onPreRender(),this.slotsEvents={click:x},this.clearableEvents={click:this.__clearValue},this.controlEvents=void 0!==this.__getControlEvents?this.__getControlEvents():{focusin:this.__onControlFocusin,focusout:this.__onControlFocusout,"popup-show":this.__onControlPopupShow,"popup-hide":this.__onControlPopupHide},this.parents=[]},mounted:function(){var t=this;!0===s&&void 0===this.for&&(this.targetUid=Hr()),!0===this.autofocus&&this.focus(),this.$nextTick(function(){for(var e=t.$refs.control;e;)!0!==Qr.has(e)&&Qr.set(e,window.getComputedStyle(e)),t.parents.unshift(e),e=e.parentElement;!0===t.outlinedMd&&t.parents.length>0&&t.$forceUpdate()})},activated:function(){!0===this.shouldActivate&&!0===this.autofocus&&this.focus()},deactivated:function(){this.shouldActivate=!0},beforeDestroy:function(){clearTimeout(this.focusoutTimer),this.parents=[]}});function Ur(t,e,i,n){var s=[];return t.forEach(function(t){!0===n(t)?s.push(t):e.push({failedPropValidation:i,file:t})}),s}function Yr(t){t&&t.dataTransfer&&(t.dataTransfer.dropEffect="copy"),w(t)}var Kr={props:{multiple:Boolean,accept:String,capture:String,maxFileSize:[Number,String],maxTotalSize:[Number,String],maxFiles:[Number,String],filter:Function},computed:{extensions:function(){if(void 0!==this.accept)return this.accept.split(",").map(function(t){return"*"===(t=t.trim())?"*/":(t.endsWith("/*")&&(t=t.slice(0,t.length-1)),t.toUpperCase())})},maxFilesNumber:function(){return parseInt(this.maxFiles,10)},maxTotalSizeNumber:function(){return parseInt(this.maxTotalSize,10)}},methods:{pickFiles:function(t){if(!0===this.editable)if(t!==Object(t)&&(t={target:null}),null!==t.target&&!0===t.target.matches('input[type="file"]'))0===t.clientX&&0===t.clientY&&S(t);else{var e=this.__getFileInput();e&&e!==t.target&&e.click(t)}},addFiles:function(t){this.editable&&t&&this.__addFiles(null,t)},__processFiles:function(t,e,i,n){var s=this,o=Array.from(e||t.target.files),r=[],a=function(){r.length>0&&s.$emit("rejected",r)};if(void 0!==this.accept&&-1===this.extensions.indexOf("*/")&&0===(o=Ur(o,r,"accept",function(t){return s.extensions.some(function(e){return t.type.toUpperCase().startsWith(e)||t.name.toUpperCase().endsWith(e)})})).length)return a();if(void 0!==this.maxFileSize){var l=parseInt(this.maxFileSize,10);if(0===(o=Ur(o,r,"max-file-size",function(t){return t.size<=l})).length)return a()}if(!0!==this.multiple&&o.length>0&&(o=[o[0]]),o.forEach(function(t){t.__key=t.webkitRelativePath+t.lastModified+t.name+t.size}),!0===n){var c=i.map(function(t){return t.__key});o=Ur(o,r,"duplicate",function(t){return!1===c.includes(t.__key)})}if(0===o.length)return a();if(void 0!==this.maxTotalSize){var u=!0===n?i.reduce(function(t,e){return t+e.size},0):0;if(0===(o=Ur(o,r,"max-total-size",function(t){return(u+=t.size)<=s.maxTotalSizeNumber})).length)return a()}if("function"==typeof this.filter){var h=this.filter(o);o=Ur(o,r,"filter",function(t){return h.includes(t)})}if(void 0!==this.maxFiles){var d=!0===n?i.length:0;if(0===(o=Ur(o,r,"max-files",function(){return++d<=s.maxFilesNumber})).length)return a()}return a(),o.length>0?o:void 0},__onDragOver:function(t){Yr(t),!0!==this.dnd&&(this.dnd=!0)},__onDragLeave:function(t){w(t),!0===(null!==t.relatedTarget||!0!==h.is.safari?t.relatedTarget!==this.$refs.dnd:!1===document.elementsFromPoint(t.clientX,t.clientY).includes(this.$refs.dnd))&&(this.dnd=!1)},__onDrop:function(t){Yr(t);var e=t.dataTransfer.files;e.length>0&&this.__addFiles(null,e),this.dnd=!1},__getDnd:function(t,e){if(!0===this.dnd)return t("div",{key:"dnd",staticClass:"q-"+e+"__dnd absolute-full",ref:"dnd",on:Tt(this,"dnd",{dragenter:Yr,dragover:Yr,dragleave:this.__onDragLeave,drop:this.__onDrop})})}}},Gr={computed:{formDomProps:function(){if("file"===this.type)try{var t="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(this.value)===this.value&&("length"in this.value?Array.from(this.value):[this.value]).forEach(function(e){t.items.add(e)}),{files:t.files}}catch(t){return{files:void 0}}}}},Xr=i.default.extend({name:"QFile",mixins:[Wr,Kr,wn,Gr],props:{value:!0===n?{}:[File,FileList,Array],append:Boolean,useChips:Boolean,displayValue:[String,Number],tabindex:{type:[String,Number],default:0},counterLabel:Function,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},data:function(){return{dnd:!1}},computed:{innerValue:function(){return Object(this.value)===this.value?"length"in this.value?Array.from(this.value):[this.value]:[]},selectedString:function(){return this.innerValue.map(function(t){return t.name}).join(", ")},totalSize:function(){return St(this.innerValue.reduce(function(t,e){return t+e.size},0))},counterProps:function(){return{totalSize:this.totalSize,filesNumber:this.innerValue.length,maxFiles:this.maxFiles}},computedCounter:function(){if(void 0!==this.counterLabel)return this.counterLabel(this.counterProps);var t=this.maxFiles;return this.innerValue.length+(void 0!==t?" / "+t:"")+" ("+this.totalSize+")"},inputAttrs:function(){return Object.assign({},{tabindex:-1,type:"file",title:"",accept:this.accept,capture:this.capture,name:this.nameProp},this.qAttrs,{id:this.targetUid,disabled:!0!==this.editable})},isAppending:function(){return!0===this.multiple&&!0===this.append},fieldClass:function(){return"q-file q-field--auto-height"+(!0===this.dnd?" q-file--dnd":"")}},methods:{removeAtIndex:function(t){var e=this.innerValue.slice();e.splice(t,1),this.__emitValue(e)},removeFile:function(t){var e=this.innerValue.findIndex(t);e>-1&&this.removeAtIndex(e)},__emitValue:function(t){this.$emit("input",!0===this.multiple?t:t[0])},__onKeydown:function(t){13===t.keyCode&&x(t)},__onKeyup:function(t){13!==t.keyCode&&32!==t.keyCode||this.pickFiles(t)},__getFileInput:function(){return this.$refs.input},__addFiles:function(t,e){var i=this,n=this.__processFiles(t,e,this.innerValue,this.isAppending),s=this.__getFileInput();void 0!==s&&(s.value=""),void 0!==n&&((!0===this.multiple?this.value&&n.every(function(t){return i.innerValue.includes(t)}):this.value===n[0])||this.__emitValue(!0===this.isAppending?this.innerValue.concat(n):n))},__getControl:function(t){var e={key:"target",ref:"target",staticClass:"q-field__native row items-center cursor-pointer",attrs:{tabindex:this.tabindex}};return!0===this.editable&&(e.on=Tt(this,"native",{dragover:this.__onDragOver,dragleave:this.__onDragLeave,keydown:this.__onKeydown,keyup:this.__onKeyup})),t("div",e,[this.__getInput(t)].concat(this.__getSelection(t)))},__getControlChild:function(t){return this.__getDnd(t,"file")},__getFiller:function(t){return[t("input",{class:[this.inputClass,"q-file__filler"],style:this.inputStyle})]},__getSelection:function(t){var e=this;if(void 0!==this.$scopedSlots.file)return 0===this.innerValue.length?this.__getFiller(t):this.innerValue.map(function(t,i){return e.$scopedSlots.file({index:i,file:t,ref:e})});if(void 0!==this.$scopedSlots.selected)return 0===this.innerValue.length?this.__getFiller(t):this.$scopedSlots.selected({files:this.innerValue,ref:this});if(!0===this.useChips)return 0===this.innerValue.length?this.__getFiller(t):this.innerValue.map(function(i,n){return t(os,{key:"rem#"+n,props:{removable:e.editable,dense:!0,textColor:e.color,tabindex:e.tabindex},on:Tt(e,"rem#"+n,{remove:function(){e.removeAtIndex(n)}})},[t("span",{staticClass:"ellipsis",domProps:{textContent:i.name}})])});var i=void 0!==this.displayValue?this.displayValue:this.selectedString;return i.length>0?[t("div",{style:this.inputStyle,class:this.inputClass,domProps:{textContent:i}})]:this.__getFiller(t)},__getInput:function(t){var e={key:"input",ref:"input",staticClass:"q-field__input fit absolute-full cursor-pointer",attrs:this.inputAttrs,domProps:this.formDomProps,on:Tt(this,"input",{change:this.__addFiles})};return!0===this.multiple&&(e.attrs.multiple=!0),t("input",e)}},created:function(){this.type="file"}}),Zr=i.default.extend({name:"QFooter",mixins:[Nt],inject:{layout:{default:function(){console.error("QFooter needs to be child of QLayout")}}},props:{value:{type:Boolean,default:!0},reveal:Boolean,bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},data:function(){return{size:parseInt(this.heightHint,10),revealed:!0,windowHeight:o||this.layout.container?0:window.innerHeight}},watch:{value:function(t){this.__update("space",t),this.__updateLocal("revealed",!0),this.layout.__animate()},offset:function(t){this.__update("offset",t)},reveal:function(t){!1===t&&this.__updateLocal("revealed",this.value)},revealed:function(t){this.layout.__animate(),this.$emit("reveal",t)},"layout.scroll":function(){this.__updateRevealed()},"layout.height":function(){this.__updateRevealed()},size:function(){this.__updateRevealed()},"$q.screen.height":function(t){!0!==this.layout.container&&this.__updateLocal("windowHeight",t)}},computed:{fixed:function(){return!0===this.reveal||this.layout.view.indexOf("F")>-1||this.$q.platform.is.ios&&!0===this.layout.container},containerHeight:function(){return!0===this.layout.container?this.layout.containerHeight:this.windowHeight},offset:function(){if(!0!==this.value)return 0;if(!0===this.fixed)return!0===this.revealed?this.size:0;var t=this.layout.scroll.position+this.containerHeight+this.size-this.layout.height;return t>0?t:0},hidden:function(){return!0!==this.value||!0===this.fixed&&!0!==this.revealed},revealOnFocus:function(){return!0===this.value&&!0===this.hidden&&!0===this.reveal},classes:function(){return(!0===this.fixed?"fixed":"absolute")+"-bottom"+(!0===this.bordered?" q-footer--bordered":"")+(!0===this.hidden?" q-footer--hidden":"")+(!0!==this.value?" q-layout--prevent-focus":"")+(!0!==this.value&&!0!==this.fixed?" hidden":"")},style:function(){var t=this.layout.rows.bottom,e={};return"l"===t[0]&&!0===this.layout.left.space&&(e[!0===this.$q.lang.rtl?"right":"left"]=this.layout.left.size+"px"),"r"===t[2]&&!0===this.layout.right.space&&(e[!0===this.$q.lang.rtl?"left":"right"]=this.layout.right.size+"px"),e},onEvents:function(){return Object.assign({},this.qListeners,{focusin:this.__onFocusin,input:S})}},render:function(t){var e=Wt([t(Ms,{key:"resize",props:{debounce:0},on:Tt(this,"resize",{resize:this.__onResize})})],this,"default");return!0===this.elevated&&e.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),t("footer",{staticClass:"q-footer q-layout__section--marginal",class:this.classes,style:this.style,on:this.onEvents},e)},created:function(){this.layout.instances.footer=this,!0===this.value&&this.__update("size",this.size),this.__update("space",this.value),this.__update("offset",this.offset)},beforeDestroy:function(){this.layout.instances.footer===this&&(this.layout.instances.footer=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},methods:{__onResize:function(t){var e=t.height;this.__updateLocal("size",e),this.__update("size",e)},__update:function(t,e){this.layout.footer[t]!==e&&(this.layout.footer[t]=e)},__updateLocal:function(t,e){this[t]!==e&&(this[t]=e)},__updateRevealed:function(){if(!0===this.reveal){var t=this.layout.scroll,e=t.direction,i=t.position,n=t.inflectionPoint;this.__updateLocal("revealed","up"===e||i-n<100||this.layout.height-this.containerHeight-i-this.size<300)}},__onFocusin:function(t){!0===this.revealOnFocus&&this.__updateLocal("revealed",!0),this.$emit("focusin",t)}}}),Jr=i.default.extend({name:"QForm",mixins:[Nt],props:{autofocus:Boolean,noErrorFocus:Boolean,noResetFocus:Boolean,greedy:Boolean},computed:{onEvents:function(){return Object.assign({},this.qListeners,{submit:this.submit,reset:this.reset})}},mounted:function(){this.validateIndex=0,!0===this.autofocus&&this.focus()},activated:function(){!0===this.shouldActivate&&!0===this.autofocus&&this.focus()},deactivated:function(){this.shouldActivate=!0},methods:{validate:function(t){var e=this,i="boolean"==typeof t?t:!0!==this.noErrorFocus,n=++this.validateIndex,s=this.getValidationComponents().filter(function(t){return!0!==t.disable}),o=function(t,i){e.$emit("validation-"+(!0===t?"success":"error"),i)},r=function(t){var e=t.validate();return"function"==typeof e.then?e.then(function(e){return{valid:e,comp:t}},function(e){return{valid:!1,comp:t,err:e}}):Promise.resolve({valid:e,comp:t})};return(!0===this.greedy?Promise.all(s.map(r)).then(function(t){return t.filter(function(t){return!0!==t.valid})}):s.reduce(function(t,e){return t.then(function(){return r(e).then(function(t){if(!1===t.valid)return Promise.reject(t)})})},Promise.resolve()).catch(function(t){return[t]})).then(function(t){if(void 0===t||0===t.length)return n===e.validateIndex&&o(!0),!0;if(n===e.validateIndex){var s=t[0],r=s.comp,a=s.err;if(void 0!==a&&console.error(a),o(!1,r),!0===i){var l=t.find(function(t){var e=t.comp;return"function"==typeof e.focus&&!0!==e._isBeingDestroyed&&!0!==e._isDestroyed&&!0!==e._inactive});void 0!==l&&l.comp.focus()}}return!1})},resetValidation:function(){this.validateIndex++,this.getValidationComponents().forEach(function(t){"function"==typeof t.resetValidation&&t.resetValidation()})},submit:function(t){var e=this;void 0!==t&&w(t);var i=this.validateIndex+1;this.validate().then(function(n){i===e.validateIndex&&!0===n&&(void 0!==e.qListeners.submit?e.$emit("submit",t):void 0!==t&&void 0!==t.target&&"function"==typeof t.target.submit&&t.target.submit())})},reset:function(t){var e=this;void 0!==t&&w(t),this.$emit("reset"),this.$nextTick(function(){e.resetValidation(),!0===e.autofocus&&!0!==e.noResetFocus&&e.focus()})},focus:function(){if(this.$el){var t=this.$el.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||this.$el.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||this.$el.querySelector("[autofocus], [data-autofocus]")||Array.prototype.find.call(this.$el.querySelectorAll("[tabindex]"),function(t){return t.tabIndex>-1});null!==t&&void 0!==t&&_i(t)}},getValidationComponents:function(){return Array.prototype.map.call(this.$el.getElementsByClassName("q-validation-component"),function(t){return t.__vue__}).filter(function(t){return void 0!==t&&"function"==typeof t.validate})}},render:function(t){return t("form",{staticClass:"q-form",on:this.onEvents},Ht(this,"default"))}}),ta=i.default.extend({name:"QHeader",mixins:[Nt],inject:{layout:{default:function(){console.error("QHeader needs to be child of QLayout")}}},props:{value:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},data:function(){return{size:parseInt(this.heightHint,10),revealed:!0}},watch:{value:function(t){this.__update("space",t),this.__updateLocal("revealed",!0),this.layout.__animate()},offset:function(t){this.__update("offset",t)},reveal:function(t){!1===t&&this.__updateLocal("revealed",this.value)},revealed:function(t){this.layout.__animate(),this.$emit("reveal",t)},"layout.scroll":function(t){!0===this.reveal&&this.__updateLocal("revealed","up"===t.direction||t.position<=this.revealOffset||t.position-t.inflectionPoint<100)}},computed:{fixed:function(){return!0===this.reveal||this.layout.view.indexOf("H")>-1||this.$q.platform.is.ios&&!0===this.layout.container},offset:function(){if(!0!==this.value)return 0;if(!0===this.fixed)return!0===this.revealed?this.size:0;var t=this.size-this.layout.scroll.position;return t>0?t:0},hidden:function(){return!0!==this.value||!0===this.fixed&&!0!==this.revealed},revealOnFocus:function(){return!0===this.value&&!0===this.hidden&&!0===this.reveal},classes:function(){return(!0===this.fixed?"fixed":"absolute")+"-top"+(!0===this.bordered?" q-header--bordered":"")+(!0===this.hidden?" q-header--hidden":"")+(!0!==this.value?" q-layout--prevent-focus":"")},style:function(){var t=this.layout.rows.top,e={};return"l"===t[0]&&!0===this.layout.left.space&&(e[!0===this.$q.lang.rtl?"right":"left"]=this.layout.left.size+"px"),"r"===t[2]&&!0===this.layout.right.space&&(e[!0===this.$q.lang.rtl?"left":"right"]=this.layout.right.size+"px"),e},onEvents:function(){return Object.assign({},this.qListeners,{focusin:this.__onFocusin,input:S})}},render:function(t){var e=Qt(this,"default",[]);return!0===this.elevated&&e.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(t(Ms,{key:"resize",props:{debounce:0},on:Tt(this,"resize",{resize:this.__onResize})})),t("header",{staticClass:"q-header q-layout__section--marginal",class:this.classes,style:this.style,on:this.onEvents},e)},created:function(){this.layout.instances.header=this,!0===this.value&&this.__update("size",this.size),this.__update("space",this.value),this.__update("offset",this.offset)},beforeDestroy:function(){this.layout.instances.header===this&&(this.layout.instances.header=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},methods:{__onResize:function(t){var e=t.height;this.__updateLocal("size",e),this.__update("size",e)},__update:function(t,e){this.layout.header[t]!==e&&(this.layout.header[t]=e)},__updateLocal:function(t,e){this[t]!==e&&(this[t]=e)},__onFocusin:function(t){!0===this.revealOnFocus&&this.__updateLocal("revealed",!0),this.$emit("focusin",t)}}}),ea={props:{ratio:[String,Number]},computed:{ratioStyle:function(){var t=this.ratio||this.naturalRatio;if(void 0!==t)return{paddingBottom:100/t+"%"}}}},ia=i.default.extend({name:"QImg",mixins:[Nt,ea],props:{src:String,srcset:String,sizes:String,alt:String,width:String,height:String,placeholderSrc:String,basic:Boolean,contain:Boolean,position:{type:String,default:"50% 50%"},transition:{type:String,default:"fade"},imgClass:[Array,String,Object],imgStyle:Object,nativeContextMenu:Boolean,noDefaultSpinner:Boolean,spinnerColor:String,spinnerSize:String},data:function(){return{currentSrc:"",image:null,isLoading:!!this.src,hasError:!1,naturalRatio:void 0}},watch:{src:function(){this.__load()},srcset:function(t){this.__updateWatcher(t)}},computed:{url:function(){return this.currentSrc||this.placeholderSrc||void 0},attrs:function(){var t={role:"img"};return void 0!==this.alt&&(t["aria-label"]=this.alt),t},imgContainerStyle:function(){return Object.assign({backgroundSize:!0===this.contain?"contain":"cover",backgroundPosition:this.position},this.imgStyle,{backgroundImage:'url("'+this.url+'")'})},style:function(){return{width:this.width,height:this.height}},classes:function(){return"q-img overflow-hidden"+(!0===this.nativeContextMenu?" q-img--menu":"")}},methods:{__onLoad:function(t){this.isLoading=!1,this.hasError=!1,this.__computeRatio(t),this.__updateSrc(),this.__updateWatcher(this.srcset),this.$emit("load",this.currentSrc)},__onError:function(t){clearTimeout(this.ratioTimer),this.isLoading=!1,this.hasError=!0,this.currentSrc="",this.$emit("error",t)},__updateSrc:function(){if(void 0!==this.image&&!1===this.isLoading){var t=this.image.currentSrc||this.image.src;this.currentSrc!==t&&(this.currentSrc=t)}},__updateWatcher:function(t){t?void 0===this.unwatch&&(this.unwatch=this.$watch("$q.screen.width",this.__updateSrc)):void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0)},__load:function(){var t=this;if(clearTimeout(this.ratioTimer),this.hasError=!1,!this.src)return this.isLoading=!1,this.image=void 0,void(this.currentSrc="");this.isLoading=!0;var e=new Image;this.image=e,e.onerror=function(i){t.image===e&&!0!==t.destroyed&&t.__onError(i)},e.onload=function(){!0!==t.destroyed&&t.image===e&&(void 0!==e.decode?e.decode().catch(function(i){t.image===e&&!0!==t.destroyed&&t.__onError(i)}).then(function(){t.image===e&&!0!==t.destroyed&&t.__onLoad(e)}):t.__onLoad(e))},e.src=this.src,this.srcset&&(e.srcset=this.srcset),void 0!==this.sizes?e.sizes=this.sizes:Object.assign(e,{height:this.height,width:this.width})},__computeRatio:function(t){var e=this,i=t.naturalHeight,n=t.naturalWidth;i||n?this.naturalRatio=0===i?1:n/i:this.ratioTimer=setTimeout(function(){e.image===t&&!0!==e.destroyed&&e.__computeRatio(t)},100)},__getImage:function(t){var e=!0===this.nativeContextMenu?[t("img",{staticClass:"absolute-full fit",attrs:{src:this.url,"aria-hidden":"true"}})]:void 0,i=void 0!==this.url?t("div",{key:this.url,staticClass:"q-img__image absolute-full",class:this.imgClass,style:this.imgContainerStyle},e):null;return!0===this.basic?i:t("transition",{props:{name:"q-transition--"+this.transition}},[i])},__getContent:function(t){var e=Ht(this,!0===this.hasError?"error":"default");return!0===this.basic?t("div",{key:"content",staticClass:"q-img__content absolute-full"},e):t("transition",{props:{name:"q-transition--fade"}},[!0===this.isLoading?t("div",{key:"placeholder",staticClass:"q-img__loading absolute-full flex flex-center"},void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():!1===this.noDefaultSpinner?[t(qe,{props:{color:this.spinnerColor,size:this.spinnerSize}})]:void 0):t("div",{key:"content",staticClass:"q-img__content absolute-full"},e)])}},render:function(t){return t("div",{class:this.classes,style:this.style,attrs:this.attrs,on:Object.assign({},this.qListeners)},[t("div",{style:this.ratioStyle}),this.__getImage(t),this.__getContent(t)])},beforeMount:function(){if(void 0!==this.placeholderSrc&&void 0===this.ratio){var t=new Image;t.src=this.placeholderSrc,this.__computeRatio(t)}!0===this.isLoading&&this.__load()},beforeDestroy:function(){this.destroyed=!0,clearTimeout(this.ratioTimer),void 0!==this.unwatch&&this.unwatch()}}),na=d.passive,sa=i.default.extend({name:"QInfiniteScroll",mixins:[Nt],props:{offset:{type:Number,default:500},debounce:{type:[String,Number],default:100},scrollTarget:{default:void 0},initialIndex:Number,disable:Boolean,reverse:Boolean},data:function(){return{index:this.initialIndex||0,isFetching:!1,isWorking:!0}},watch:{disable:function(t){!0===t?this.stop():this.resume()},reverse:function(){!1===this.isFetching&&!0===this.isWorking&&this.immediatePoll()},scrollTarget:function(){this.updateScrollTarget()},debounce:function(t){this.__setDebounce(t)}},methods:{poll:function(){if(void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),!0!==this.disable&&!0!==this.isFetching&&!1!==this.isWorking)if(this.__scrollTarget!==window||!0!==document.qScrollPrevented){var t=Fi(this.__scrollTarget),e=ji(this.__scrollTarget),i=Me(this.__scrollTarget);!1===this.reverse?Math.round(e+i+this.offset)>=Math.round(t)&&this.trigger():Math.round(e)-1){for(var s=t-e.length;s>0;s--)i+=ha;e=e.slice(0,n)+i+e.slice(n)}return e},__updateMaskInternals:function(){var t=this;if(this.hasMask=void 0!==this.mask&&this.mask.length>0&&(!0===this.autogrow||["textarea","text","search","url","tel","password"].includes(this.type)),!1===this.hasMask)return this.computedUnmask=void 0,this.maskMarked="",void(this.maskReplaced="");var e=void 0===ra[this.mask]?this.mask:ra[this.mask],i="string"==typeof this.fillMask&&this.fillMask.length>0?this.fillMask.slice(0,1):"_",n=i.replace(ua,"\\$&"),s=[],o=[],r=[],a=!0===this.reverseFillMask,l="",c="";e.replace(ca,function(t,e,i,n,u){if(void 0!==n){var h=aa[n];r.push(h),c=h.negate,!0===a&&(o.push("(?:"+c+"+)?("+h.pattern+"+)?(?:"+c+"+)?("+h.pattern+"+)?"),a=!1),o.push("(?:"+c+"+)?("+h.pattern+")?")}else if(void 0!==i)l="\\"+("\\"===i?"":i),r.push(i),s.push("([^"+l+"]+)?"+l+"?");else{var d=void 0!==e?e:u;l="\\"===d?"\\\\\\\\":d.replace(ua,"\\\\$&"),r.push(d),s.push("([^"+l+"]+)?"+l+"?")}});var u=new RegExp("^"+s.join("")+"("+(""===l?".":"[^"+l+"]")+"+)?"+(""===l?"":"["+l+"]*")+"$"),h=o.length-1,d=o.map(function(e,i){return 0===i&&!0===t.reverseFillMask?new RegExp("^"+n+"*"+e):i===h?new RegExp("^"+e+"("+(""===c?".":c)+"+)?"+(!0===t.reverseFillMask?"$":n+"*")):new RegExp("^"+e)});this.computedMask=r,this.computedUnmask=function(t){var e=u.exec(t);null!==e&&(t=e.slice(1).join(""));for(var i=[],n=d.length,s=0,o=t;s0?i.join(""):t},this.maskMarked=r.map(function(t){return"string"==typeof t?t:ha}).join(""),this.maskReplaced=this.maskMarked.split(ha).join(i)},__updateMaskValue:function(t,e,i){var n=this,s=this.$refs.input,o=s.selectionEnd,r=s.value.length-o,a=this.__unmask(t);!0===e&&this.__updateMaskInternals();var l=this.__mask(a),c=!1!==this.fillMask?this.__fillWithMask(l):l,u=this.innerValue!==c;s.value!==c&&(s.value=c),!0===u&&(this.innerValue=c),document.activeElement===s&&this.$nextTick(function(){if(c!==n.maskReplaced)if("insertFromPaste"!==i||!0===n.reverseFillMask)if(["deleteContentBackward","deleteContentForward"].indexOf(i)>-1){var t=!0===n.reverseFillMask?0===o?c.length>l.length?1:0:Math.max(0,c.length-(c===n.maskReplaced?0:Math.min(l.length,r)+1))+1:o;s.setSelectionRange(t,t,"forward")}else if(!0===n.reverseFillMask)if(!0===u){var e=Math.max(0,c.length-(c===n.maskReplaced?0:Math.min(l.length,r+1)));1===e&&1===o?s.setSelectionRange(e,e,"forward"):n.__moveCursorRightReverse(s,e,e)}else{var a=c.length-r;s.setSelectionRange(a,a,"backward")}else if(!0===u){var h=Math.max(0,n.maskMarked.indexOf(ha),Math.min(l.length,o)-1);n.__moveCursorRight(s,h,h)}else{var d=o-1;n.__moveCursorRight(s,d,d)}else{var f=o-1;n.__moveCursorRight(s,f,f)}else{var p=!0===n.reverseFillMask?n.maskReplaced.length:0;s.setSelectionRange(p,p,"forward")}});var h=!0===this.unmaskedValue?this.__unmask(c):c;String(this.value)!==h&&this.__emitValue(h,!0)},__moveCursorForPaste:function(t,e,i){var n=this.__mask(this.__unmask(t.value));e=Math.max(0,this.maskMarked.indexOf(ha),Math.min(n.length,e)),t.setSelectionRange(e,i,"forward")},__moveCursorLeft:function(t,e,i,n){for(var s=-1===this.maskMarked.slice(e-1).indexOf(ha),o=Math.max(0,e-1);o>=0;o--)if(this.maskMarked[o]===ha){e=o,!0===s&&e++;break}if(o<0&&void 0!==this.maskMarked[e]&&this.maskMarked[e]!==ha)return this.__moveCursorRight(t,0,0);e>=0&&t.setSelectionRange(e,!0===n?i:e,"backward")},__moveCursorRight:function(t,e,i,n){for(var s=t.value.length,o=Math.min(s,i+1);o<=s;o++){if(this.maskMarked[o]===ha){i=o;break}this.maskMarked[o-1]===ha&&(i=o)}if(o>s&&void 0!==this.maskMarked[i-1]&&this.maskMarked[i-1]!==ha)return this.__moveCursorLeft(t,s,s);t.setSelectionRange(n?e:i,i,"forward")},__moveCursorLeftReverse:function(t,e,i,n){for(var s=this.__getPaddedMaskMarked(t.value.length),o=Math.max(0,e-1);o>=0;o--){if(s[o-1]===ha){e=o;break}if(s[o]===ha&&(e=o,0===o))break}if(o<0&&void 0!==s[e]&&s[e]!==ha)return this.__moveCursorRightReverse(t,0,0);e>=0&&t.setSelectionRange(e,!0===n?i:e,"backward")},__moveCursorRightReverse:function(t,e,i,n){for(var s=t.value.length,o=this.__getPaddedMaskMarked(s),r=-1===o.slice(0,i+1).indexOf(ha),a=Math.min(s,i+1);a<=s;a++)if(o[a-1]===ha){(i=a)>0&&!0===r&&i--;break}if(a>s&&void 0!==o[i-1]&&o[i-1]!==ha)return this.__moveCursorLeftReverse(t,s,s);t.setSelectionRange(!0===n?e:i,i,"forward")},__onMaskedKeydown:function(t){if(!0!==Ae(t)){var e=this.$refs.input,i=e.selectionStart,n=e.selectionEnd;if(37===t.keyCode||39===t.keyCode){var s=this["__moveCursor"+(39===t.keyCode?"Right":"Left")+(!0===this.reverseFillMask?"Reverse":"")];t.preventDefault(),s(e,i,n,t.shiftKey)}else 8===t.keyCode&&!0!==this.reverseFillMask&&i===n?this.__moveCursorLeft(e,i,n,!0):46===t.keyCode&&!0===this.reverseFillMask&&i===n&&this.__moveCursorRightReverse(e,i,n,!0);this.$emit("keydown",t)}},__mask:function(t){if(void 0===t||null===t||""===t)return"";if(!0===this.reverseFillMask)return this.__maskReverse(t);for(var e=this.computedMask,i=0,n="",s=0;s=0&&n>-1;o--){var r=e[o],a=t[n];if("string"==typeof r)s=r+s,a===r&&n--;else{if(void 0===a||!r.regex.test(a))return s;do{s=(void 0!==r.transform?r.transform(a):a)+s,a=t[--n]}while(i===o&&void 0!==a&&r.regex.test(a))}}return s},__unmask:function(t){return"string"!=typeof t||void 0===this.computedUnmask?"number"==typeof t?this.computedUnmask(""+t):t:this.computedUnmask(t)},__fillWithMask:function(t){return this.maskReplaced.length-t.length<=0?t:!0===this.reverseFillMask&&t.length>0?this.maskReplaced.slice(0,-t.length)+t:t+this.maskReplaced.slice(t.length)}}},fa=i.default.extend({name:"QInput",mixins:[Wr,da,wn,Gr,Nt],props:{value:{required:!1},shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},watch:{value:function(t){if(!0===this.hasMask){if(!0===this.stopValueWatcher&&(this.stopValueWatcher=!1,String(t)===this.emitCachedValue))return;this.__updateMaskValue(t)}else this.innerValue!==t&&(this.innerValue=t,"number"===this.type&&!0===this.hasOwnProperty("tempValue")&&(!0===this.typedNumber?this.typedNumber=!1:delete this.tempValue));!0===this.autogrow&&this.$nextTick(this.__adjustHeight)},type:function(){this.$refs.input&&(this.$refs.input.value=this.value)},autogrow:function(t){if(!0===t)this.$nextTick(this.__adjustHeight);else if(this.qAttrs.rows>0&&void 0!==this.$refs.input){this.$refs.input.style.height="auto"}},dense:function(){!0===this.autogrow&&this.$nextTick(this.__adjustHeight)}},data:function(){return{innerValue:this.__getInitialMaskedValue()}},computed:{isTextarea:function(){return"textarea"===this.type||!0===this.autogrow},isTypeText:function(){return!0===this.isTextarea||["text","search","url","tel","password"].includes(this.type)},fieldClass:function(){return"q-"+(!0===this.isTextarea?"textarea":"input")+(!0===this.autogrow?" q-textarea--autogrow":"")},hasShadow:function(){return"file"!==this.type&&"string"==typeof this.shadowText&&this.shadowText.length>0},onEvents:function(){var t=Object.assign({},this.qListeners,{input:this.__onInput,compositionend:this.__onCompositionend,paste:this.__onPaste,change:this.__onChange,blur:this.__onFinishEditing,focus:this.__onFocus});return!0===this.hasMask&&(t.keydown=this.__onMaskedKeydown),!0===this.autogrow&&(t.animationend=this.__onAnimationend),t},inputAttrs:function(){var t=Object.assign({},{tabindex:0,"data-autofocus":this.autofocus||void 0,rows:"textarea"===this.type?6:void 0,"aria-label":this.label,name:this.nameProp},this.qAttrs,{id:this.targetUid,type:this.type,maxlength:this.maxlength,disabled:!0===this.disable,readonly:!0===this.readonly});return!0===this.autogrow&&(t.rows=1),t}},methods:{focus:function(){var t=document.activeElement;void 0===this.$refs.input||this.$refs.input===t||null!==t&&t.id===this.targetUid||_i(this.$refs.input)},select:function(){void 0!==this.$refs.input&&this.$refs.input.select()},getNativeElement:function(){return this.$refs.input},__onPaste:function(t){if(!0===this.hasMask&&!0!==this.reverseFillMask){var e=t.target;this.__moveCursorForPaste(e,e.selectionStart,e.selectionEnd)}this.$emit("paste",t)},__onInput:function(t){if(t&&t.target&&!0!==t.target.qComposing)if("file"!==this.type){var e=t.target.value;if(!0===this.hasMask)this.__updateMaskValue(e,!1,t.inputType);else if(this.__emitValue(e),!0===this.isTypeText&&t.target===document.activeElement){var i=t.target,n=i.selectionStart,s=i.selectionEnd;void 0!==n&&void 0!==s&&this.$nextTick(function(){t.target===document.activeElement&&0===e.indexOf(t.target.value)&&t.target.setSelectionRange(n,s)})}!0===this.autogrow&&this.__adjustHeight()}else this.$emit("input",t.target.files)},__onChange:function(t){!0===t.target.qComposing&&(t.target.qComposing=!1,this.__onInput(t)),clearTimeout(this.emitTimer),void 0!==this.emitValueFn&&this.emitValueFn(),this.$emit("change",t)},__onFinishEditing:function(t){var e=this;void 0!==t&&S(t),clearTimeout(this.emitTimer),void 0!==this.emitValueFn&&this.emitValueFn(),this.typedNumber=!1,this.stopValueWatcher=!1,delete this.tempValue,"file"!==this.type&&setTimeout(function(){void 0!==e.$refs.input&&(e.$refs.input.value=void 0!==e.innerValue?e.innerValue:"")})},__onFocus:function(t){S(t),_i(t.target)},__onCompositionend:function(t){void 0!==this.qListeners.compositionend&&this.$emit("compositionend",t),this.__onInput(t)},__onAnimationend:function(t){void 0!==this.qListeners.animationend&&this.$emit("animationend",t),this.__adjustHeight()},__emitValue:function(t,e){var i=this;this.emitValueFn=function(){"number"!==i.type&&!0===i.hasOwnProperty("tempValue")&&delete i.tempValue,i.value!==t&&i.emitCachedValue!==t&&(i.emitCachedValue=t,!0===e&&(i.stopValueWatcher=!0),i.$emit("input",t),i.$nextTick(function(){i.emitCachedValue===t&&(i.emitCachedValue=NaN)})),i.emitValueFn=void 0},"number"===this.type&&(this.typedNumber=!0,this.tempValue=t),void 0!==this.debounce?(clearTimeout(this.emitTimer),this.tempValue=t,this.emitTimer=setTimeout(this.emitValueFn,this.debounce)):this.emitValueFn()},__adjustHeight:function(){var t=this;requestAnimationFrame(function(){var e=t.$refs.input;if(void 0!==e){var i=e.parentNode.style,n=e.style.overflow;!0!==t.$q.platform.is.firefox&&(e.style.overflow="hidden"),e.style.height="1px",i.marginBottom=e.scrollHeight-1+"px",e.style.height=e.scrollHeight+"px",e.style.overflow=n,i.marginBottom=""}})},__getCurValue:function(){return!0===this.hasOwnProperty("tempValue")?this.tempValue:void 0!==this.innerValue?this.innerValue:""},__getShadowControl:function(t){return t("div",{staticClass:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(!0===this.isTextarea?"":" text-no-wrap")},[t("span",{staticClass:"invisible"},this.__getCurValue()),t("span",this.shadowText)])},__getControl:function(t){return t(!0===this.isTextarea?"textarea":"input",{ref:"input",staticClass:"q-field__native q-placeholder",style:this.inputStyle,class:this.inputClass,attrs:this.inputAttrs,on:this.onEvents,domProps:"file"!==this.type?{value:this.__getCurValue()}:this.formDomProps})}},created:function(){this.emitCachedValue=NaN},mounted:function(){!0===this.autogrow&&this.__adjustHeight()},beforeDestroy:function(){this.__onFinishEditing()}}),pa={threshold:0,root:null,rootMargin:"0px"};function ma(t,e,i,n){var s,o,r;"function"==typeof i?(s=i,o=pa,r=void 0===e.cfg):(s=i.handler,o=Object.assign({},pa,i.cfg),r=void 0===e.cfg||!1===En(e.cfg,o)),e.handler!==s&&(e.handler=s);var a=!0===n.once;e.once!==a&&(e.once=a),!0===r&&(e.cfg=o,void 0!==e.observer&&e.observer.unobserve(t),e.observer=new IntersectionObserver(function(i){var n=i[0];if("function"==typeof e.handler){if(null===n.rootBounds&&(void 0!==t.__vue__?!0!==t.__vue__._inactive:!0===document.body.contains(t)))return e.observer.unobserve(t),void e.observer.observe(t);(!1===e.handler(n,e.observer)||!0===e.once&&!0===n.isIntersecting)&&va(t)}},o),e.observer.observe(t))}function va(t){var e=t.__qvisible;void 0!==e&&(void 0!==e.observer&&e.observer.unobserve(t),delete t.__qvisible)}var ga={name:"intersection",inserted:function(t,e){var i=e.modifiers,n=e.value;void 0!==t.__qvisible&&(va(t),t.__qvisible_destroyed=!0);var s={};ma(t,s,n,i),t.__qvisible=s},update:function(t,e){var i=e.value,n=e.modifiers,s=t.__qvisible;void 0!==s&&ma(t,s,i,n)},unbind:function(t){void 0===t.__qvisible_destroyed?va(t):delete t.__qvisible_destroyed}},_a=i.default.extend({name:"QIntersection",mixins:[Vt,Nt],directives:{Intersection:ga},props:{once:Boolean,transition:String,ssrPrerender:Boolean,margin:String,threshold:[Number,Array],root:{default:null},disable:Boolean},data:function(){return{showing:!0===o&&this.ssrPrerender}},computed:{value:function(){return void 0!==this.root||void 0!==this.margin||void 0!==this.threshold?{handler:this.__trigger,cfg:{root:this.root,rootMargin:this.margin,threshold:this.threshold}}:this.__trigger},directives:function(){if(!0!==this.disable&&(!0!==o||!0!==this.once||!0!==this.ssrPrerender))return[{name:"intersection",value:this.value,modifiers:{once:this.once}}]}},methods:{__trigger:function(t){this.showing!==t.isIntersecting&&(this.showing=t.isIntersecting,void 0!==this.qListeners.visibility&&this.$emit("visibility",this.showing))}},render:function(t){var e=!0===this.showing?Ht(this,"default"):void 0;return t(this.tag,{staticClass:"q-intersection",on:Object.assign({},this.qListeners),directives:this.directives},this.transition?[t("transition",{props:{name:"q-transition--"+this.transition}},e)]:e)}}),ba=[34,37,40,33,39,38],ya=i.default.extend({name:"QKnob",mixins:[{props:ls.options.props},xn],directives:{TouchPan:xs},props:{innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:function(t){return t>=0}},tabindex:{type:[Number,String],default:0},disable:Boolean,readonly:Boolean},data:function(){var t=this.__getInnerMin(this.innerMin),e=this.__getInnerMax(this.innerMax);return{model:null===this.value?t:wt(this.value,t,e),dragging:!1}},watch:{modelUpdate:function(){this.model=null===this.value?this.computedInnerMin:wt(this.value,this.computedInnerMin,this.computedInnerMax),this.__updateValue(!0)}},computed:{classes:function(){return"q-knob non-selectable q-key-group-navigation--ignore-key"+(!0===this.editable?" q-knob--editable":!0===this.disable?" disabled":"")},computedInnerMin:function(){return this.__getInnerMin(this.innerMin)},computedInnerMax:function(){return this.__getInnerMax(this.innerMax)},modelUpdate:function(){return this.value+"|"+this.computedInnerMin+"|"+this.computedInnerMax},editable:function(){return!1===this.disable&&!1===this.readonly},decimals:function(){return(String(this.step).trim("0").split(".")[1]||"").length},computedStep:function(){return 0===this.step?1:this.step},computedInstantFeedback:function(){return!0===this.instantFeedback||!0===this.dragging},onEvents:function(){return!0===this.$q.platform.is.mobile?{click:this.__click}:{mousedown:this.__activate,click:this.__click,keydown:this.__keydown,keyup:this.__keyup}},attrs:function(){var t={role:"slider","aria-valuemin":this.computedInnerMin,"aria-valuemax":this.computedInnerMax,"aria-valuenow":this.value};return!0===this.editable?t.tabindex=this.tabindex:t["aria-"+(!0===this.disable?"disabled":"readonly")]="",t}},methods:{__getInnerMin:function(t){return!0===isNaN(t)||this.innerMinthis.max?this.max:this.innerMax},__updateCenterPosition:function(){var t=this.$el.getBoundingClientRect(),e=t.top,i=t.left,n=t.width,s=t.height;this.centerPosition={top:e+s/2,left:i+n/2}},__pan:function(t){t.isFinal?(this.__updatePosition(t.evt,!0),this.dragging=!1):t.isFirst?(this.__updateCenterPosition(),this.dragging=!0,this.__updatePosition(t.evt)):this.__updatePosition(t.evt)},__click:function(t){this.__updateCenterPosition(),this.__updatePosition(t,!0)},__keydown:function(t){if(ba.includes(t.keyCode)){w(t);var e=([34,33].includes(t.keyCode)?10:1)*this.computedStep,i=[34,37,40].includes(t.keyCode)?-e:e;this.model=wt(parseFloat((this.model+i).toFixed(this.decimals)),this.computedInnerMin,this.computedInnerMax),this.__updateValue()}},__keyup:function(t){ba.includes(t.keyCode)&&this.__updateValue(!0)},__activate:function(t){this.__updateCenterPosition(),this.__updatePosition(t)},__updatePosition:function(t,e){var i=this.centerPosition,n=v(t),s=Math.abs(n.top-i.top),o=Math.sqrt(Math.pow(s,2)+Math.pow(Math.abs(n.left-i.left),2)),r=Math.asin(s/o)*(180/Math.PI);r=n.top=l/2?(c<0?-1:1)*l:0),a=parseFloat(a.toFixed(this.decimals))}a=wt(a,this.computedInnerMin,this.computedInnerMax),this.$emit("drag-value",a),this.model!==a&&(this.model=a),this.__updateValue(e)},__updateValue:function(t){this.value!==this.model&&this.$emit("input",this.model),!0===t&&this.$emit("change",this.model)},__getNameInput:function(){return this.$createElement("input",{attrs:this.formAttrs})}},render:function(t){var e={class:this.classes,attrs:this.attrs,props:Object.assign({},this.$props,{value:this.model,instantFeedback:this.computedInstantFeedback})};return!0===this.editable&&(e.key="dir",e.on=this.onEvents,e.directives=Tt(this,"dir",[{name:"touch-pan",value:this.__pan,modifiers:{prevent:!0,stop:!0,mouse:!0}}]),void 0!==this.name&&(e.scopedSlots={internal:this.__getNameInput})),t(ls,e,Ht(this,"default"))}}),Sa=d.passive,xa=["both","horizontal","vertical"],wa=i.default.extend({name:"QScrollObserver",props:{axis:{type:String,validator:function(t){return xa.includes(t)},default:"vertical"},debounce:[String,Number],scrollTarget:{default:void 0}},render:p,data:function(){return{scroll:{position:{top:0,left:0},direction:"none",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}}}},watch:{scrollTarget:function(){this.__unconfigureScrollTarget(),this.__configureScrollTarget()}},methods:{getPosition:function(){return JSON.parse(JSON.stringify(this.scroll))},trigger:function(t){var e=this;if(!0===t||0===this.debounce||"0"===this.debounce)this.__emit();else if(void 0===this.clearTimer){var i=this.debounce?[setTimeout(this.__emit,this.debounce),clearTimeout]:[requestAnimationFrame(this.__emit),cancelAnimationFrame],n=i[0],s=i[1];this.clearTimer=function(){s(n),e.clearTimer=void 0}}},__emit:function(){void 0!==this.clearTimer&&this.clearTimer();var t=Math.max(0,Di(this.__scrollTarget)),e=Vi(this.__scrollTarget),i={top:t-this.scroll.position.top,left:e-this.scroll.position.left};if(!("vertical"===this.axis&&0===i.top||"horizontal"===this.axis&&0===i.left)){var n=Math.abs(i.top)>=Math.abs(i.left)?i.top<0?"up":"down":i.left<0?"left":"right";this.scroll.position={top:t,left:e},this.scroll.directionChanged=this.scroll.direction!==n,this.scroll.delta=i,!0===this.scroll.directionChanged&&(this.scroll.direction=n,this.scroll.inflectionPoint=this.scroll.position),this.$emit("scroll",this.getPosition())}},__configureScrollTarget:function(){this.__scrollTarget=Ri(this.$el.parentNode,this.scrollTarget),this.__scrollTarget.addEventListener("scroll",this.trigger,Sa),this.trigger(!0)},__unconfigureScrollTarget:function(){void 0!==this.__scrollTarget&&(this.__scrollTarget.removeEventListener("scroll",this.trigger,Sa),this.__scrollTarget=void 0)}},mounted:function(){this.__configureScrollTarget()},beforeDestroy:function(){void 0!==this.clearTimer&&this.clearTimer(),this.__unconfigureScrollTarget()}}),Ca=i.default.extend({name:"QLayout",mixins:[Nt],provide:function(){return{layout:this}},props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:function(t){return/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(t.toLowerCase())}}},data:function(){return{height:this.$q.screen.height,width:!0===this.container?0:this.$q.screen.width,containerHeight:0,scrollbarWidth:!0===o?0:Xi(),header:{size:0,offset:0,space:!1},right:{size:300,offset:0,space:!1},footer:{size:0,offset:0,space:!1},left:{size:300,offset:0,space:!1},scroll:{position:0,direction:"down"}}},computed:{rows:function(){var t=this.view.toLowerCase().split(" ");return{top:t[0].split(""),middle:t[1].split(""),bottom:t[2].split("")}},style:function(){return!0===this.container?null:{minHeight:this.$q.screen.height+"px"}},targetStyle:function(){var t;if(0!==this.scrollbarWidth)return(t={})[!0===this.$q.lang.rtl?"left":"right"]=this.scrollbarWidth+"px",t},targetChildStyle:function(){var t;if(0!==this.scrollbarWidth)return(t={})[!0===this.$q.lang.rtl?"right":"left"]=0,t[!0===this.$q.lang.rtl?"left":"right"]="-"+this.scrollbarWidth+"px",t.width="calc(100% + "+this.scrollbarWidth+"px)",t},totalWidth:function(){return this.width+this.scrollbarWidth},classes:function(){return"q-layout q-layout--"+(!0===this.container?"containerized":"standard")},scrollbarEvtAction:function(){return!0!==this.container&&this.scrollbarWidth>0?"add":"remove"}},watch:{scrollbarEvtAction:"__updateScrollEvent"},created:function(){this.instances={}},mounted:function(){"add"===this.scrollbarEvtAction&&this.__updateScrollEvent("add")},beforeDestroy:function(){"add"===this.scrollbarEvtAction&&this.__updateScrollEvent("remove")},render:function(t){var e=t("div",{class:this.classes,style:this.style,attrs:{tabindex:-1},on:Object.assign({},this.qListeners)},Wt([t(wa,{key:"scroll",on:Tt(this,"scroll",{scroll:this.__onPageScroll})}),t(Ms,{key:"resizeOut",on:Tt(this,"resizeOut",{resize:this.__onPageResize})})],this,"default"));return!0===this.container?t("div",{staticClass:"q-layout-container overflow-hidden"},[t(Ms,{key:"resizeIn",on:Tt(this,"resizeIn",{resize:this.__onContainerResize})}),t("div",{staticClass:"absolute-full",style:this.targetStyle},[t("div",{staticClass:"scroll",style:this.targetChildStyle},[e])])]):e},methods:{__animate:function(){var t=this;void 0!==this.timer?clearTimeout(this.timer):document.body.classList.add("q-body--layout-animate"),this.timer=setTimeout(function(){document.body.classList.remove("q-body--layout-animate"),t.timer=void 0},150)},__onPageScroll:function(t){!0!==this.container&&!0===document.qScrollPrevented||(this.scroll={position:t.position.top,direction:t.direction,directionChanged:t.directionChanged,inflectionPoint:t.inflectionPoint.top,delta:t.delta.top},void 0!==this.qListeners.scroll&&this.$emit("scroll",Object.assign({},this.scroll)))},__onPageResize:function(t){var e=t.height,i=t.width,n=!1;this.height!==e&&(n=!0,this.height=e,void 0!==this.qListeners["scroll-height"]&&this.$emit("scroll-height",e),this.__updateScrollbarWidth()),this.width!==i&&(n=!0,this.width=i),!0===n&&void 0!==this.qListeners.resize&&this.$emit("resize",{height:e,width:i})},__onContainerResize:function(t){var e=t.height;this.containerHeight!==e&&(this.containerHeight=e,this.__updateScrollbarWidth())},__updateScrollbarWidth:function(){if(!0===this.container){var t=this.height>this.containerHeight?Xi():0;this.scrollbarWidth!==t&&(this.scrollbarWidth=t)}},__updateScrollEvent:function(t){void 0!==this.timerScrollbar&&"remove"===t&&(clearTimeout(this.timerScrollbar),this.__restoreScrollbar()),window[t+"EventListener"]("resize",this.__hideScrollbar)},__hideScrollbar:function(){if(void 0===this.timerScrollbar){var t=document.body,e=t.offsetHeight,i=t.classList;if(e>this.$q.screen.height)return;i.add("hide-scrollbar")}else clearTimeout(this.timerScrollbar);this.timerScrollbar=setTimeout(this.__restoreScrollbar,200)},__restoreScrollbar:function(){this.timerScrollbar=void 0,document.body.classList.remove("hide-scrollbar")}}}),ka=i.default.extend({name:"QMarkupTable",mixins:[ue,Nt],props:{dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:function(t){return["horizontal","vertical","cell","none"].includes(t)}},wrapCells:Boolean},computed:{classes:function(){return"q-table--"+this.separator+"-separator q-table--"+this.darkSuffix+" q-table__card--"+this.darkSuffix+" q-"+this.darkSuffix+(!0===this.dense?" q-table--dense":"")+(!0===this.flat?" q-table--flat":"")+(!0===this.bordered?" q-table--bordered":"")+(!0===this.square?" q-table--square":"")+(!1===this.wrapCells?" q-table--no-wrap":"")}},render:function(t){return t("div",{staticClass:"q-markup-table q-table__container q-table__card",class:this.classes,on:Object.assign({},this.qListeners)},[t("table",{staticClass:"q-table"},Ht(this,"default"))])}}),qa=i.default.extend({name:"QNoSsr",mixins:[Ts,Vt,Nt],props:{placeholder:String},render:function(t){var e={on:Object.assign({},this.qListeners)};if(!0===this.canRender){var i=Ht(this,"default");return void 0===i?i:i.length>1?t(this.tag,e,i):i[0]}e.staticClass="q-no-ssr-placeholder";var n=Ht(this,"placeholder");return void 0!==n?n.length>1?t(this.tag,e,n):n[0]:void 0!==this.placeholder?t(this.tag,e,[this.placeholder]):void 0}}),Ta=i.default.extend({name:"QRadio",mixins:[ue,es,xn,is],props:{value:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},computed:{isTrue:function(){return this.value===this.val},classes:function(){return"q-radio cursor-pointer no-outline row inline no-wrap items-center"+(!0===this.disable?" disabled":"")+" q-radio--"+this.darkSuffix+(!0===this.dense?" q-radio--dense":"")+(!0===this.leftLabel?" reverse":"")},innerClass:function(){var t=void 0===this.color||!0!==this.keepColor&&!0!==this.isTrue?"":" text-"+this.color;return"q-radio__inner--"+(!0===this.isTrue?"truthy":"falsy")+t},computedIcon:function(){return!0===this.isTrue?this.checkedIcon:this.uncheckedIcon},computedTabindex:function(){return!0===this.disable?-1:this.tabindex||0},formAttrs:function(){var t={type:"radio"};return void 0!==this.name&&Object.assign(t,{name:this.name,value:this.val}),t},formDomProps:function(){if(void 0!==this.name&&!0===this.isTrue)return{checked:!0}},attrs:function(){var t={tabindex:this.computedTabindex,role:"radio","aria-label":this.label,"aria-checked":!0===this.isTrue?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{set:function(t){void 0!==t&&(w(t),this.__refocusTarget(t)),!0!==this.disable&&!0!==this.isTrue&&this.$emit("input",this.val,t)}},render:function(t){var e=this,i=void 0!==this.computedIcon?[t("div",{key:"icon",staticClass:"q-radio__icon-container absolute-full flex flex-center no-wrap"},[t(ae,{staticClass:"q-radio__icon",props:{name:this.computedIcon}})])]:[t("svg",{key:"svg",staticClass:"q-radio__bg absolute non-selectable",attrs:{focusable:"false",viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12"}}),t("path",{staticClass:"q-radio__check",attrs:{d:"M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6"}})])];!0!==this.disable&&this.__injectFormInput(i,"unshift","q-radio__native q-ma-none q-pa-none");var n=[t("div",{staticClass:"q-radio__inner relative-position",class:this.innerClass,style:this.sizeStyle,attrs:{"aria-hidden":"true"}},i)];void 0!==this.__refocusTargetEl&&n.push(this.__refocusTargetEl);var s=void 0!==this.label?Wt([this.label],this,"default"):Ht(this,"default");return void 0!==s&&n.push(t("div",{staticClass:"q-radio__label q-anchor--skip"},s)),t("div",{key:"inpExt",class:this.classes,attrs:this.attrs,on:Tt(this,"inpExt",{click:this.set,keydown:function(t){13!==t.keyCode&&32!==t.keyCode||w(t)},keyup:function(t){13!==t.keyCode&&32!==t.keyCode||e.set(t)}})},n)}}),Ma=i.default.extend({name:"QToggle",mixins:[ns],props:{icon:String,iconColor:String},computed:{computedIcon:function(){return(!0===this.isTrue?this.checkedIcon:!0===this.isIndeterminate?this.indeterminateIcon:this.uncheckedIcon)||this.icon},computedIconColor:function(){if(!0===this.isTrue)return this.iconColor}},methods:{__getInner:function(t){return[t("div",{staticClass:"q-toggle__track"}),t("div",{staticClass:"q-toggle__thumb absolute flex flex-center no-wrap"},void 0!==this.computedIcon?[t(ae,{props:{name:this.computedIcon,color:this.computedIconColor}})]:void 0)]}},created:function(){this.type="toggle"}}),$a={radio:Ta,checkbox:ss,toggle:Ma},La=Object.keys($a),Ea=i.default.extend({name:"QOptionGroup",mixins:[ue,Nt],props:{value:{required:!0},options:{type:Array,validator:function(t){return t.every(function(t){return"value"in t&&"label"in t})}},name:String,type:{default:"radio",validator:function(t){return La.includes(t)}},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean},computed:{component:function(){return $a[this.type]},model:function(){return Array.isArray(this.value)?this.value.slice():this.value},classes:function(){return"q-option-group q-gutter-x-sm"+(!0===this.inline?" q-option-group--inline":"")},attrs:function(){if("radio"===this.type){var t={role:"radiogroup"};return!0===this.disable&&(t["aria-disabled"]="true"),t}return{role:"group"}}},methods:{__update:function(t){this.$emit("input",t)}},created:function(){var t=Array.isArray(this.value);"radio"===this.type?t&&console.error("q-option-group: model should not be array"):!1===t&&console.error("q-option-group: model should be array in your case")},render:function(t){var e=this;return t("div",{class:this.classes,attrs:this.attrs,on:Object.assign({},this.qListeners)},this.options.map(function(i,n){var s=void 0!==e.$scopedSlots["label-"+n]?e.$scopedSlots["label-"+n](i):void 0!==e.$scopedSlots.label?e.$scopedSlots.label(i):void 0;return t("div",[t(e.component,{key:"inp",props:{value:e.value,val:i.value,name:void 0===i.name?e.name:i.name,disable:e.disable||i.disable,label:void 0===s?i.label:void 0,leftLabel:void 0===i.leftLabel?e.leftLabel:i.leftLabel,color:void 0===i.color?e.color:i.color,checkedIcon:i.checkedIcon,uncheckedIcon:i.uncheckedIcon,dark:void 0===i.dark?e.dark:i.dark,size:void 0===i.size?e.size:i.size,dense:e.dense,keepColor:void 0===i.keepColor?e.keepColor:i.keepColor},on:Tt(e,"inp",{input:e.__update})},s)])}))}}),Oa=i.default.extend({name:"QPage",mixins:[Nt],inject:{pageContainer:{default:function(){console.error("QPage needs to be child of QPageContainer")}},layout:{}},props:{padding:Boolean,styleFn:Function},computed:{style:function(){var t=(!0===this.layout.header.space?this.layout.header.size:0)+(!0===this.layout.footer.space?this.layout.footer.size:0);if("function"==typeof this.styleFn){var e=!0===this.layout.container?this.layout.containerHeight:this.$q.screen.height;return this.styleFn(t,e)}return{minHeight:!0===this.layout.container?this.layout.containerHeight-t+"px":0===this.$q.screen.height?"calc(100vh - "+t+"px)":this.$q.screen.height-t+"px"}},classes:function(){if(!0===this.padding)return"q-layout-padding"}},render:function(t){return t("main",{staticClass:"q-page",style:this.style,class:this.classes,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),Aa=i.default.extend({name:"QPageContainer",mixins:[Nt],inject:{layout:{default:function(){console.error("QPageContainer needs to be child of QLayout")}}},provide:{pageContainer:!0},computed:{style:function(){var t={};return!0===this.layout.header.space&&(t.paddingTop=this.layout.header.size+"px"),!0===this.layout.right.space&&(t["padding"+(!0===this.$q.lang.rtl?"Left":"Right")]=this.layout.right.size+"px"),!0===this.layout.footer.space&&(t.paddingBottom=this.layout.footer.size+"px"),!0===this.layout.left.space&&(t["padding"+(!0===this.$q.lang.rtl?"Right":"Left")]=this.layout.left.size+"px"),t}},render:function(t){return t("div",{staticClass:"q-page-container",style:this.style,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),Ba=i.default.extend({name:"QPageSticky",mixins:[Nt],inject:{layout:{default:function(){console.error("QPageSticky needs to be child of QLayout")}}},props:{position:{type:String,default:"bottom-right",validator:function(t){return["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)}},offset:{type:Array,validator:function(t){return 2===t.length}},expand:Boolean},computed:{attach:function(){var t=this.position;return{top:t.indexOf("top")>-1,right:t.indexOf("right")>-1,bottom:t.indexOf("bottom")>-1,left:t.indexOf("left")>-1,vertical:"top"===t||"bottom"===t,horizontal:"left"===t||"right"===t}},top:function(){return this.layout.header.offset},right:function(){return this.layout.right.offset},bottom:function(){return this.layout.footer.offset},left:function(){return this.layout.left.offset},style:function(){var t=0,e=0,i=this.attach,n=!0===this.$q.lang.rtl?-1:1;!0===i.top&&0!==this.top?e=this.top+"px":!0===i.bottom&&0!==this.bottom&&(e=-this.bottom+"px"),!0===i.left&&0!==this.left?t=n*this.left+"px":!0===i.right&&0!==this.right&&(t=-n*this.right+"px");var s={transform:"translate("+t+", "+e+")"};return this.offset&&(s.margin=this.offset[1]+"px "+this.offset[0]+"px"),!0===i.vertical?(0!==this.left&&(s[!0===this.$q.lang.rtl?"right":"left"]=this.left+"px"),0!==this.right&&(s[!0===this.$q.lang.rtl?"left":"right"]=this.right+"px")):!0===i.horizontal&&(0!==this.top&&(s.top=this.top+"px"),0!==this.bottom&&(s.bottom=this.bottom+"px")),s},classes:function(){return"fixed-"+this.position+" q-page-sticky--"+(!0===this.expand?"expand":"shrink")}},render:function(t){var e=Ht(this,"default");return t("div",{staticClass:"q-page-sticky row flex-center",class:this.classes,style:this.style,on:Object.assign({},this.qListeners)},!0===this.expand?e:[t("div",e)])}}),Pa=i.default.extend({name:"QPageScroller",mixins:[Ba],props:{scrollOffset:{type:Number,default:1e3},reverse:Boolean,duration:{type:Number,default:300},offset:{default:function(){return[18,18]}}},inject:{layout:{default:function(){console.error("QPageScroller needs to be used within a QLayout")}}},data:function(){return{showing:this.__isVisible()}},computed:{scrollHeight:function(){return this.layout.height-(!0===this.layout.container?this.layout.containerHeight:this.$q.screen.height)},onEvents:function(){return Object.assign({},this.qListeners,{click:this.__onClick})}},watch:{"layout.scroll.position":function(){this.__updateVisibility()},reverse:{handler:function(t){!0===t?void 0===this.heightWatcher&&(this.heightWatcher=this.$watch("scrollHeight",this.__updateVisibility)):void 0!==this.heightWatcher&&this.__cleanup()},immediate:!0}},methods:{__isVisible:function(){return!0===this.reverse?this.scrollHeight-this.layout.scroll.position>this.scrollOffset:this.layout.scroll.position>this.scrollOffset},__onClick:function(t){var e=Ri(!0===this.layout.container?this.$el:this.layout.$el);Ki(e,!0===this.reverse?this.layout.height:0,this.duration),this.$emit("click",t)},__updateVisibility:function(){var t=this.__isVisible();this.showing!==t&&(this.showing=t)},__cleanup:function(){this.heightWatcher(),this.heightWatcher=void 0}},render:function(t){return t("transition",{props:{name:"q-transition--fade"}},!0===this.showing?[t("div",{staticClass:"q-page-scroller",on:this.onEvents},[Ba.options.render.call(this,t)])]:null)},beforeDestroy:function(){void 0!==this.heightWatcher&&this.__cleanup()}});function za(t,e){return[!0,!1].includes(t)?t:e}var Ia=i.default.extend({name:"QPagination",mixins:[ue,Nt],props:{value:{type:Number,required:!0},min:{type:[Number,String],default:1},max:{type:[Number,String],required:!0},maxPages:{type:[Number,String],default:0,validator:function(t){return("string"==typeof t?parseInt(t,10):t)>=0}},inputStyle:[Array,String,Object],inputClass:[Array,String,Object],size:String,disable:Boolean,input:Boolean,iconPrev:String,iconNext:String,iconFirst:String,iconLast:String,toFn:Function,boundaryLinks:{type:Boolean,default:null},boundaryNumbers:{type:Boolean,default:null},directionLinks:{type:Boolean,default:null},ellipses:{type:Boolean,default:null},ripple:{type:[Boolean,Object],default:null},round:Boolean,rounded:Boolean,flat:Boolean,outline:Boolean,unelevated:Boolean,push:Boolean,glossy:Boolean,color:{type:String,default:"primary"},textColor:String,activeDesign:{type:String,default:"",values:function(t){return""===t||Ne.includes(t)}},activeColor:String,activeTextColor:String,gutter:String,padding:{type:String,default:"3px 2px"}},data:function(){return{newPage:null}},watch:{min:function(){this.model=this.value},max:function(){this.model=this.value}},computed:{model:{get:function(){return this.value},set:function(t){if(t=parseInt(t,10),!this.disable&&!isNaN(t)){var e=wt(t,this.__min,this.__max);this.$emit("input",e)}}},inputPlaceholder:function(){return this.model+" / "+this.__max},__min:function(){return parseInt(this.min,10)},__max:function(){return parseInt(this.max,10)},__maxPages:function(){return parseInt(this.maxPages,10)},__boundaryLinks:function(){return za(this.boundaryLinks,this.input)},__boundaryNumbers:function(){return za(this.boundaryNumbers,!this.input)},__directionLinks:function(){return za(this.directionLinks,this.input)},__ellipses:function(){return za(this.ellipses,!this.input)},__gutter:function(){return this.gutter in De?De[this.gutter]+"px":this.gutter||null},__gutterStyle:function(){return null!==this.__gutter?"--q-pagination-gutter-parent:-"+this.__gutter+";--q-pagination-gutter-child:"+this.__gutter:null},__btnDesign:function(){return He(this,"flat")},__btnActiveDesign:function(){var t={};return t[this.__btnDesign]=!1,""!==this.activeDesign&&(t[this.activeDesign]=!0),t},icons:function(){var t=[this.iconFirst||this.$q.iconSet.pagination.first,this.iconPrev||this.$q.iconSet.pagination.prev,this.iconNext||this.$q.iconSet.pagination.next,this.iconLast||this.$q.iconSet.pagination.last];return!0===this.$q.lang.rtl?t.reverse():t},attrs:function(){var t={role:"navigation"};return!0===this.disable&&(t["aria-disabled"]="true"),t},btnProps:function(){var t;return(t={})[this.__btnDesign]=!0,t.round=this.round,t.rounded=this.rounded,t.padding=this.padding,t.color=this.color,t.textColor=this.textColor,t.size=this.size,t.ripple=null===this.ripple||this.ripple,t},activeBtnProps:function(){return Object.assign({},this.__btnActiveDesign,{color:this.activeColor||this.color,textColor:this.activeTextColor||this.textColor})},btnConfig:function(){var t=Math.max(this.__maxPages,1+(this.__ellipses?2:0)+(this.__boundaryNumbers?2:0)),e={pgFrom:this.__min,pgTo:this.__max,ellipsesStart:!1,ellipsesEnd:!1,boundaryStart:!1,boundaryEnd:!1,marginalStyle:{minWidth:Math.max(2,String(this.__max).length)+"em"}};return this.__maxPages&&tthis.__min+(this.__boundaryNumbers?1:0)&&(e.ellipsesStart=!0,e.pgFrom++),this.__boundaryNumbers&&(e.boundaryEnd=!0,e.pgTo--),this.__ellipses&&e.pgTo=this.__max,icon:this.icons[3]},this.__max))),!0===this.__directionLinks&&(i.push(this.__getBtn(t,{key:"bdp"},{disable:this.disable||this.value<=this.__min,icon:this.icons[1]},this.value-1)),n.unshift(this.__getBtn(t,{key:"bdn"},{disable:this.disable||this.value>=this.__max,icon:this.icons[2]},this.value+1))),!0!==this.input){e=[];var s=this.btnConfig,o=s.pgFrom,r=s.pgTo,a=s.marginalStyle;if(!0===this.btnConfig.boundaryStart){var l=this.__min===this.value;i.push(this.__getBtn(t,{key:"bns",style:a},{disable:this.disable,label:this.__min},this.__min,l))}if(!0===this.btnConfig.boundaryEnd){var c=this.__max===this.value;n.unshift(this.__getBtn(t,{key:"bne",style:a},{disable:this.disable,label:this.__max},this.__max,c))}!0===this.btnConfig.ellipsesStart&&i.push(this.__getBtn(t,{key:"bes",style:a},{disable:this.disable,label:"…",ripple:!1},o-1)),!0===this.btnConfig.ellipsesEnd&&n.unshift(this.__getBtn(t,{key:"bee",style:a},{disable:this.disable,label:"…",ripple:!1},r+1));for(var u=o;u<=r;u++)e.push(this.__getBtn(t,{key:"bpg"+u,style:a},{disable:this.disable,label:u},u,u===this.value))}return t("div",{staticClass:"q-pagination row no-wrap items-center",class:{disabled:this.disable},attrs:this.attrs,on:Object.assign({},this.qListeners)},[t("div",{staticClass:"q-pagination__content row no-wrap items-center",style:this.__gutterStyle},i.concat([t("div",{key:"stop",staticClass:"q-pagination__middle row justify-center",on:!0===this.input?Tt(this,"stop",{input:S}):null},!0===this.input?[t(fa,{key:"inp",staticClass:"inline",style:{width:this.inputPlaceholder.length/1.5+"em"},props:{type:"number",dense:!0,value:this.newPage,disable:this.disable,dark:this.dark,borderless:!0,inputClass:this.inputClass,inputStyle:this.inputStyle},attrs:{placeholder:this.inputPlaceholder,min:this.__min,max:this.__max},on:Object.assign({},this.inputEvents)})]:e)],n))])}});function Ra(t){var e,i,n=!1;function s(){var s=this;i=arguments,!0!==n&&(n=!0,e=requestAnimationFrame(function(){t.apply(s,i),i=void 0,n=!1}))}return s.cancel=function(){window.cancelAnimationFrame(e),n=!1},s}var Fa=d.passive,Da=i.default.extend({name:"QParallax",mixins:[Nt],props:{src:String,height:{type:Number,default:500},speed:{type:Number,default:1,validator:function(t){return t>=0&&t<=1}},scrollTarget:{default:void 0}},data:function(){return{scrolling:!1,percentScrolled:0}},watch:{height:function(){!0===this.working&&this.__updatePos()},scrollTarget:function(){!0===this.working&&(this.__stop(),this.__start())}},methods:{__update:function(t){this.percentScrolled=t,void 0!==this.qListeners.scroll&&this.$emit("scroll",t)},__updatePos:function(){var t,e,i;this.__scrollTarget===window?(t=0,i=e=window.innerHeight):i=(t=Te(this.__scrollTarget).top)+(e=Me(this.__scrollTarget));var n=Te(this.$el).top,s=n+this.height;if(void 0!==this.observer||s>t&&n20?"pulled":"pull";this.state!==o&&(this.state=o)}else!0===this.pulling&&(this.pulling=!1,"pulled"===this.state?(this.state="refreshing",this.__animateTo({pos:20}),this.trigger()):"pull"===this.state&&this.__animateTo({pos:-40,ratio:0}))},__animateTo:function(t,e){var i=this,n=t.pos,s=t.ratio;this.animating=!0,this.pullPosition=n,void 0!==s&&(this.pullRatio=s),clearTimeout(this.timer),this.timer=setTimeout(function(){i.animating=!1,e&&e()},300)}},mounted:function(){this.updateScrollTarget()},beforeDestroy:function(){clearTimeout(this.timer)},render:function(t){return t("div",{staticClass:"q-pull-to-refresh",on:Object.assign({},this.qListeners),directives:this.directives},[t("div",{class:this.contentClass},Ht(this,"default")),t("div",{staticClass:"q-pull-to-refresh__puller-container fixed row flex-center no-pointer-events z-top",style:this.positionCSS},[t("div",{style:this.style,class:this.classes},["refreshing"!==this.state?t(ae,{props:{name:this.icon||this.$q.iconSet.pullToRefresh.icon,color:this.color,size:"32px"}}):t(qe,{props:{size:"24px",color:this.color}})])])])}}),Ua=0,Ya=1,Ka=2,Ga=i.default.extend({name:"QRange",mixins:[ks],props:{value:{type:Object,default:function(){return{min:null,max:null}},validator:function(t){return"min"in t&&"max"in t}},dragRange:Boolean,dragOnlyRange:Boolean,leftLabelColor:String,leftLabelTextColor:String,rightLabelColor:String,rightLabelTextColor:String,leftLabelValue:[String,Number],rightLabelValue:[String,Number],leftThumbColor:String,rightThumbColor:String},data:function(){return{model:{min:null===this.value.min?this.__getInnerMin():wt(this.value.min,this.min,this.max),max:null===this.value.max?this.__getInnerMax():wt(this.value.max,this.min,this.max)},curMinRatio:0,curMaxRatio:0}},computed:{canDragRange:function(){return!0===this.dragRange||!0===this.dragOnlyRange},modelMinRatio:function(){return this.__convertModelToRatio(this.model.min)},modelMaxRatio:function(){return this.__convertModelToRatio(this.model.max)},ratioMin:function(){return!0===this.active?this.curMinRatio:this.modelMinRatio},ratioMax:function(){return!0===this.active?this.curMaxRatio:this.modelMaxRatio},selectionBarStyle:function(){var t=Math.max(this.ratioMin,this.innerMinRatio),e={};return e[this.positionProp]=100*t+"%",e[this.sizeProp]=100*(wt(this.ratioMax,t,this.innerMaxRatio)-t)+"%",void 0!==this.selectionImg&&(e.backgroundImage="url("+this.selectionImg+") !important"),e},trackContainerAttrs:function(){return!0!==this.$q.platform.is.mobile?{tabindex:!1!==this.canDragRange?this.computedTabindex:-1}:void 0},trackContainerEvents:function(){var t=this;return!0!==this.editable?{}:!0===this.$q.platform.is.mobile?{click:this.__onMobileClick}:{mousedown:this.__onActivate,focus:function(){t.focus="both"},blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}},thumbAttrs:function(){return{tabindex:!0!==this.dragOnlyRange?this.computedTabindex:null}},thumbMinEvents:function(){return this.__getEvents("min")},thumbMaxEvents:function(){return this.__getEvents("max")},thumbMinLabel:function(){return void 0!==this.leftLabelValue?this.leftLabelValue:this.value.minthis.max?this.value.min:this.model.min},thumbMaxLabel:function(){return void 0!==this.rightLabelValue?this.rightLabelValue:this.value.maxthis.max?this.value.max:this.model.max},thumbMinClasses:function(){var t=this.leftThumbColor||this.thumbColor||this.color;return"q-slider__thumb q-slider__thumb"+this.axis+" q-slider__thumb"+this.axis+"-"+(!0===this.isReversed?"rtl":"ltr")+" absolute non-selectable"+(this.value.minthis.max?" q-slider__thumb--wrong-value":"")+(!1!==this.preventFocus||"min"!==this.focus&&"both"!==this.focus?"":" q-slider--focus")+(void 0!==t?" text-"+t:"")},thumbMaxClasses:function(){var t=this.rightThumbColor||this.thumbColor||this.color;return"q-slider__thumb q-slider__thumb"+this.axis+" q-slider__thumb"+this.axis+"-"+(!0===this.isReversed?"rtl":"ltr")+" absolute non-selectable"+(this.value.maxthis.max?" q-slider__thumb--hidden":"")+(!1!==this.preventFocus||"max"!==this.focus&&"both"!==this.focus?"":" q-slider--focus")+(void 0!==t?" text-"+t:"")},thumbMinStyle:function(){var t;return(t={width:this.thumbSize,height:this.thumbSize})[this.positionProp]=100*this.ratioMin+"%",t.zIndex="min"===this.focus?2:void 0,t},thumbMaxStyle:function(){var t;return(t={width:this.thumbSize,height:this.thumbSize})[this.positionProp]=100*this.ratioMax+"%",t.zIndex="max"===this.focus?2:void 0,t},thumbMinPinColor:function(){var t=this.leftLabelColor||this.labelColor;return void 0!==t?" text-"+t:""},thumbMaxPinColor:function(){var t=this.rightLabelColor||this.labelColor;return void 0!==t?" text-"+t:""},thumbMinTextContainerStyle:function(){return this.__getTextContainerStyle(this.ratioMin)},thumbMaxTextContainerStyle:function(){return this.__getTextContainerStyle(this.ratioMax)},thumbMinTextClass:function(){var t=this.leftLabelTextColor||this.labelTextColor;return"q-slider__text"+(void 0!==t?" text-"+t:"")},thumbMaxTextClass:function(){var t=this.rightLabelTextColor||this.labelTextColor;return"q-slider__text"+(void 0!==t?" text-"+t:"")},formAttrs:function(){return{type:"hidden",name:this.name,value:this.value.min+"|"+this.value.max}},modelUpdate:function(){return[this.value.min,this.value.max,this.min,this.max,this.innerMin,this.innerMax].join("#")}},watch:{modelUpdate:function(){this.model.min=null===this.value.min?this.computedInnerMin:wt(this.value.min,this.min,this.max),this.model.max=null===this.value.max?this.computedInnerMax:wt(this.value.max,this.min,this.max)},focus:function(t){if("both"===t&&!0!==this.canDragRange){if(!0!==this.$q.platform.is.mobile){var e=this.$refs[this.nextFocus+"Thumb"];void 0!==e&&e.focus()}}else!1!==t&&t!==this.nextFocus&&(this.nextFocus=t)}},methods:{__updateValue:function(t){this.model.min===this.value.min&&this.model.max===this.value.max||this.$emit("input",Object.assign({},this.model)),!0===t&&this.$emit("change",Object.assign({},this.model))},__getDragging:function(t){var e=this.$el.getBoundingClientRect(),i=e.left,n=e.top,s=e.width,o=e.height,r=!0===this.dragOnlyRange?0:(!0===this.vertical?this.$refs.minThumb.offsetHeight/(2*o):this.$refs.minThumb.offsetWidth/(2*s))+(this.modelMaxRatio-this.modelMinRatio)/20,a={left:i,top:n,width:s,height:o,valueMin:this.model.min,valueMax:this.model.max,ratioMin:this.modelMinRatio,ratioMax:this.modelMaxRatio},l=this.__getDraggingRatio(t,a);return!0!==this.dragOnlyRange&&l=e.ratioMin?(i={minR:e.ratioMin,maxR:n,min:e.valueMin,max:s},this.focus="max"):(i={minR:n,maxR:e.ratioMin,min:s,max:e.valueMin},this.focus="min");break;case Ya:var o=n-e.offsetRatio,r=wt(e.ratioMin+o,this.innerMinRatio,this.innerMaxRatio-e.rangeRatio),a=s-e.offsetModel,l=wt(e.valueMin+a,this.computedInnerMin,this.computedInnerMax-e.rangeValue);i={minR:r,maxR:r+e.rangeRatio,min:parseFloat(l.toFixed(this.computedDecimals)),max:parseFloat((l+e.rangeValue).toFixed(this.computedDecimals))},this.focus="both"}var c="min"===this.focus&&i.max>=this.computedInnerMin&&i.max<=this.computedInnerMax||"max"===this.focus&&i.min>=this.computedInnerMin&&i.min<=this.computedInnerMax?this.focus:null;this.model={min:"max"!==c?wt(i.min,this.computedInnerMin,this.computedInnerMax):i.min,max:"min"!==c?wt(i.max,this.computedInnerMin,this.computedInnerMax):i.max},null!==this.model.min&&null!==this.model.max||(this.model.min=i.min||this.computedInnerMin,this.model.max=i.max||this.computedInnerMax),!0!==this.snap||0===this.step?(this.curMinRatio="max"!==c?wt(i.minR,this.innerMinRatio,this.innerMaxRatio):i.minR,this.curMaxRatio="min"!==c?wt(i.maxR,this.innerMinRatio,this.innerMaxRatio):i.maxR):(this.curMinRatio=this.__convertModelToRatio(this.model.min),this.curMaxRatio=this.__convertModelToRatio(this.model.max))},__getEvents:function(t){var e=this;return!0!==this.$q.platform.is.mobile&&!0===this.editable&&!0!==this.dragOnlyRange?{focus:function(){e.focus=t},blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}:{}},__onKeydown:function(t){var e;if(Cs.includes(t.keyCode)){var i="both"===this.focus&&!0!==this.canDragRange;if(!1!==this.focus&&!0!==i||(this.focus=this.nextFocus),w(t),!0===this.dragOnlyRange||!0===this.dragRange&&"both"===this.focus){var n=this.model.max-this.model.min,s=wt(parseFloat((this.model.min+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),this.computedInnerMin,this.computedInnerMax-n);this.model={min:s,max:parseFloat((s+n).toFixed(this.computedDecimals))}}else{if("min"!==this.focus&&"max"!==this.focus)return;var o=this.focus;this.model=Object.assign({},this.model,((e={})[o]=wt(parseFloat((this.model[o]+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),"min"===o?this.computedInnerMin:this.model.min,"max"===o?this.computedInnerMax:this.model.max),e))}this.__updateValue()}}},created:function(){this.nextFocus="min"},render:function(t){var e=this,i=this.__getContent(t,function(i){var n=e.__getThumb(t,{pinColor:e.thumbMinPinColor,textContainerStyle:e.thumbMinTextContainerStyle,textClass:e.thumbMinTextClass,label:e.thumbMinLabel,classes:e.thumbMinClasses,style:e.thumbMinStyle,nodeData:{ref:"minThumb",key:"tmin",on:e.thumbMinEvents,attrs:e.thumbAttrs}}),s=e.__getThumb(t,{pinColor:e.thumbMaxPinColor,textContainerStyle:e.thumbMaxTextContainerStyle,textClass:e.thumbMaxTextClass,label:e.thumbMaxLabel,classes:e.thumbMaxClasses,style:e.thumbMaxStyle,nodeData:{ref:"maxThumb",key:"tmax",on:e.thumbMaxEvents,attrs:e.thumbAttrs}});!0===e.reverse?i.push(s,n):i.push(n,s)});return t("div",{class:"q-range "+this.classes+(null===this.value.min||null===this.value.max?" q-slider--no-value":""),attrs:Object.assign({},this.attributes,{"aria-valuenow":this.value.min+"|"+this.value.max})},i)}}),Xa=i.default.extend({name:"QRating",mixins:[jt,xn,Nt],directives:{KeyGroupNavigation:Qs},props:{value:{type:Number,required:!0},max:{type:[String,Number],default:5},icon:[String,Array],iconHalf:[String,Array],iconSelected:[String,Array],iconAriaLabel:[String,Array],color:[String,Array],colorHalf:[String,Array],colorSelected:[String,Array],vertical:Boolean,noReset:Boolean,noDimming:Boolean,readonly:Boolean,disable:Boolean},data:function(){return{mouseModel:0}},computed:{editable:function(){return!0!==this.readonly&&!0!==this.disable},classes:function(){return"q-rating--"+(!0===this.editable?"":"non-")+"editable"+(!0===this.vertical?" column justify-center":" row items-center")+(!0===this.noDimming?" q-rating--no-dimming":"")+(!0===this.disable?" disabled":"")+(void 0!==this.color&&!1===Array.isArray(this.color)?" text-"+this.color:"")},iconData:function(){var t=!0===Array.isArray(this.icon)?this.icon.length:0,e=!0===Array.isArray(this.iconSelected)?this.iconSelected.length:0,i=!0===Array.isArray(this.iconHalf)?this.iconHalf.length:0,n=!0===Array.isArray(this.color)?this.color.length:0,s=!0===Array.isArray(this.colorSelected)?this.colorSelected.length:0,o=!0===Array.isArray(this.colorHalf)?this.colorHalf.length:0;return{iconLen:t,icon:t>0?this.icon[t-1]:this.icon,selIconLen:e,selIcon:e>0?this.iconSelected[e-1]:this.iconSelected,halfIconLen:i,halfIcon:i>0?this.iconHalf[e-1]:this.iconHalf,colorLen:n,color:n>0?this.color[n-1]:this.color,selColorLen:s,selColor:s>0?this.colorSelected[s-1]:this.colorSelected,halfColorLen:o,halfColor:o>0?this.colorHalf[o-1]:this.colorHalf}},iconLabel:function(){var t=this;if("string"==typeof this.iconAriaLabel){var e=this.iconAriaLabel.length>0?this.iconAriaLabel+" ":"";return function(t){return""+e+t}}if(!0===Array.isArray(this.iconAriaLabel)){var i=this.iconAriaLabel.length;if(i>0)return function(e){return t.iconAriaLabel[Math.min(e,i)-1]}}return function(t,e){return e+" "+t}},stars:function(){for(var t=[],e=this.iconData,i=Math.ceil(this.value),n=!0===this.editable?0:null,s=void 0===this.iconHalf||i===this.value?-1:i,o=1;o<=this.max;o++){var r=this.mouseModel>=o||0===this.mouseModel&&this.value>=o,a=s===o&&this.mouseModel0&&(!0===a?i:this.value)>=o&&this.mouseModel-1&&(this.__set(e),w(t))}},render:function(t){var e=this,i=[];return this.stars.forEach(function(n,s){var o=n.classes,r=n.name,a=n.attrs,l=s+1;i.push(t("div",{key:"i#"+l,ref:"rt"+l,staticClass:"q-rating__icon-container flex flex-center",attrs:a,on:Tt(e,"i#"+l,{click:function(){e.__set(l)},mouseover:function(){e.__setHoverValue(l)},mouseout:function(){e.mouseModel=0},focus:function(){e.__setHoverValue(l)},blur:function(){e.mouseModel=0},keyup:function(t){e.__keyup(t,l)}})},Wt([t(ae,{class:o,props:{name:r}})],e,"tip-"+l)))}),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(i,"push"),t("div",{staticClass:"q-rating inline",class:this.classes,style:this.sizeStyle,attrs:this.attrs,directives:this.directives,on:Object.assign({},this.qListeners)},i)}}),Za=i.default.extend({name:"QResponsive",mixins:[ea,Nt],render:function(t){return t("div",{staticClass:"q-responsive",on:Object.assign({},this.qListeners)},[t("div",{staticClass:"q-responsive__filler overflow-hidden"},[t("div",{style:this.ratioStyle})]),t("div",{staticClass:"q-responsive__content absolute-full fit"},Ht(this,"default"))])}}),Ja=function(t){return t>=250?50:Math.ceil(t/5)},tl=["vertical","horizontal"],el={vertical:{offset:"offsetY",scroll:"scrollTop",dir:"down",dist:"y"},horizontal:{offset:"offsetX",scroll:"scrollLeft",dir:"right",dist:"x"}},il=i.default.extend({name:"QScrollArea",mixins:[ue],directives:{TouchPan:xs},props:{thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},horizontal:Boolean,tabindex:[String,Number]},data:function(){return{tempShowing:!1,panning:!1,hover:!1,container:{vertical:0,horizontal:0},scroll:{vertical:{position:0,size:0},horizontal:{position:0,size:0}}}},computed:{classes:function(){return"q-scrollarea q-scrollarea--"+this.darkSuffix},verticalScrollPercentage:function(){var t=this.scroll.vertical.size-this.container.vertical;if(t<=0)return 0;var e=wt(this.scroll.vertical.position/t,0,1);return Math.round(1e4*e)/1e4},horizontalScrollPercentage:function(){var t=this.scroll.horizontal.size-this.container.horizontal;if(t<=0)return 0;var e=wt(this.scroll.horizontal.position/t,0,1);return Math.round(1e4*e)/1e4},verticalThumbHidden:function(){return!0!==(null===this.visible?this.hover:this.visible)&&!1===this.tempShowing&&!1===this.panning||this.scroll.vertical.size<=this.container.vertical+1},horizontalThumbHidden:function(){return!0!==(null===this.visible?this.hover:this.visible)&&!1===this.tempShowing&&!1===this.panning||this.scroll.horizontal.size<=this.container.horizontal+1},verticalThumbStart:function(){return this.verticalScrollPercentage*(this.container.vertical-this.verticalThumbSize)},horizontalThumbStart:function(){return this.horizontalScrollPercentage*(this.container.horizontal-this.horizontalThumbSize)},verticalThumbSize:function(){return Math.round(wt(this.container.vertical*this.container.vertical/this.scroll.vertical.size,Ja(this.container.vertical),this.container.vertical))},horizontalThumbSize:function(){return Math.round(wt(this.container.horizontal*this.container.horizontal/this.scroll.horizontal.size,Ja(this.container.horizontal),this.container.horizontal))},verticalStyle:function(){return Object.assign({},this.thumbStyle,this.verticalThumbStyle,{top:this.verticalThumbStart+"px",height:this.verticalThumbSize+"px"})},horizontalStyle:function(){return Object.assign({},this.thumbStyle,this.horizontalThumbStyle,{left:this.horizontalThumbStart+"px",width:this.horizontalThumbSize+"px"})},verticalThumbClass:function(){return"q-scrollarea__thumb q-scrollarea__thumb--v absolute-right"+(!0===this.verticalThumbHidden?" q-scrollarea__thumb--invisible":"")},horizontalThumbClass:function(){return"q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom"+(!0===this.horizontalThumbHidden?" q-scrollarea__thumb--invisible":"")},verticalBarClass:function(){return"q-scrollarea__bar q-scrollarea__bar--v absolute-right"+(!0===this.verticalThumbHidden?" q-scrollarea__bar--invisible":"")},horizontalBarClass:function(){return"q-scrollarea__bar q-scrollarea__bar--h absolute-bottom"+(!0===this.horizontalThumbHidden?" q-scrollarea__bar--invisible":"")},scrollComputed:function(){return{vertical:Object.assign({},this.scroll.vertical,{percentage:this.verticalScrollPercentage,thumbHidden:this.verticalThumbHidden,thumbStart:this.verticalThumbStart,thumbSize:this.verticalThumbSize,style:this.verticalStyle,thumbClass:this.verticalThumbClass,barClass:this.verticalBarClass}),horizontal:Object.assign({},this.scroll.horizontal,{percentage:this.horizontalScrollPercentage,thumbHidden:this.horizontalThumbHidden,thumbStart:this.horizontalThumbStart,thumbSize:this.horizontalThumbSize,style:this.horizontalStyle,thumbClass:this.horizontalThumbClass,barClass:this.horizontalBarClass})}},mainStyle:function(){return!0===this.verticalThumbHidden&&!0===this.horizontalThumbHidden?this.contentStyle:this.contentActiveStyle},verticalThumbDirectives:function(){var t=this;return[{name:"touch-pan",modifiers:{vertical:!0,prevent:!0,mouse:!0,mouseAllDir:!0},value:function(e){t.__panThumb(e,"vertical")}}]},horizontalThumbDirectives:function(){var t=this;return[{name:"touch-pan",modifiers:{horizontal:!0,prevent:!0,mouse:!0,mouseAllDir:!0},value:function(e){t.__panThumb(e,"horizontal")}}]},scrollAttrs:function(){if(void 0!==this.tabindex)return{tabindex:this.tabindex}}},methods:{getScrollTarget:function(){return this.$refs.target},getScroll:function(){var t=this,e={};return tl.forEach(function(i){var n=t.scrollComputed[i];e[i+"Position"]=n.position,e[i+"Percentage"]=n.percentage,e[i+"Size"]=n.size,e[i+"ContainerSize"]=t.container[i]}),e},getScrollPosition:function(t){return"both"===t?{top:this.scroll.vertical.position,left:this.scroll.horizontal.position}:(!0!==tl.includes(t)&&(t=!0===this.horizontal?"horizontal":"vertical"),this.scroll[t].position)},getScrollPercentage:function(t){return"both"===t?{top:this.verticalScrollPercentage,left:this.horizontalScrollPercentage}:(!0!==tl.includes(t)&&(t=!0===this.horizontal?"horizontal":"vertical"),this[t+"ScrollPercentage"])},setScrollPosition:function(t,e,i){var n;if(!1===tl.includes(t)){if(!0===isNaN(t))return void console.error("[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)");t=(n=[!0===this.horizontal?"horizontal":"vertical",t,e])[0],e=n[1],i=n[2]}("vertical"===t?Ui:Gi)(this.$refs.target,e,i)},setScrollPercentage:function(t,e,i){var n;if(!1===tl.includes(t)){if(!0===isNaN(t))return void console.error("[QScrollArea]: wrong first param of setScrollPercentage (vertical/horizontal)");t=(n=[!0===this.horizontal?"horizontal":"vertical",t,e])[0],e=n[1],i=n[2]}this.setScrollPosition(t,e*(this.scroll[t].size-this.container[t]),i)},__updateContainer:function(t){var e=t.height,i=t.width,n=!1;this.container.vertical!==e&&(this.container.vertical=e,n=!0),this.container.horizontal!==i&&(this.container.horizontal=i,n=!0),!0===n&&this.__startTimer()},__updateScroll:function(t){var e=t.position,i=!1;this.scroll.vertical.position!==e.top&&(this.scroll.vertical.position=e.top,i=!0),this.scroll.horizontal.position!==e.left&&(this.scroll.horizontal.position=e.left,i=!0),!0===i&&this.__startTimer()},__updateScrollSize:function(t){var e=t.height,i=t.width,n=!1;this.scroll.horizontal.size!==i&&(this.scroll.horizontal.size=i,n=!0),this.scroll.vertical.size!==e&&(this.scroll.vertical.size=e,n=!0),!0===n&&this.__startTimer()},__panThumb:function(t,e){var i=this.scrollComputed[e];if(!0===t.isFinal){if(!0!==this.panning)return;this.panning=!1}else if(!0===t.isFirst){if(!0===i.thumbHidden)return;this.refPos=i.position,this.panning=!0}else if(!0!==this.panning)return;var n=el[e],s=this.container[e],o=(i.size-s)/(s-i.thumbSize),r=t.distance[n.dist],a=this.refPos+(t.direction===n.dir?1:-1)*r*o;this.__setScroll(a,e)},__mouseDown:function(t,e){var i=this.scrollComputed[e];if(!0!==i.thumbHidden){var n=t[el[e].offset];if(ni.thumbStart+i.thumbSize){var s=n-i.thumbSize/2;this.__setScroll(s/this.container[e]*i.size,e)}var o="vertical"===e?this.$refs.verticalThumb:this.$refs.horizontalThumb;void 0!==o&&o.dispatchEvent(new MouseEvent(t.type,t))}},__verticalMouseDown:function(t){this.__mouseDown(t,"vertical")},__horizontalMouseDown:function(t){this.__mouseDown(t,"horizontal")},__startTimer:function(){var t=this;!0===this.tempShowing?clearTimeout(this.timer):this.tempShowing=!0,this.timer=setTimeout(function(){t.tempShowing=!1},this.delay),void 0!==this.$listeners.scroll&&this.__emitScroll()},__setScroll:function(t,e){this.$refs.target[el[e].scroll]=t},__mouseEnter:function(){this.hover=!0},__mouseLeave:function(){this.hover=!1}},render:function(t){return t("div",{key:"desk",class:this.classes,on:Tt(this,"desk",{mouseenter:this.__mouseEnter,mouseleave:this.__mouseLeave})},[t("div",{ref:"target",staticClass:"q-scrollarea__container scroll relative-position fit hide-scrollbar",attrs:this.scrollAttrs},[t("div",{staticClass:"q-scrollarea__content absolute",style:this.mainStyle},Wt([t(Ms,{key:"resizeIn",props:{debounce:0},on:Tt(this,"resizeIn",{resize:this.__updateScrollSize})})],this,"default")),t(wa,{key:"scroll",props:{axis:"both"},on:Tt(this,"scroll",{scroll:this.__updateScroll})})]),t(Ms,{key:"resizeOut",props:{debounce:0},on:Tt(this,"resizeOut",{resize:this.__updateContainer})}),t("div",{key:"barV",class:this.verticalBarClass,style:[this.barStyle,this.verticalBarStyle],attrs:Lt,on:Tt(this,"barV",{mousedown:this.__verticalMouseDown})}),t("div",{key:"barH",class:this.horizontalBarClass,style:[this.barStyle,this.horizontalBarStyle],attrs:Lt,on:Tt(this,"barH",{mousedown:this.__horizontalMouseDown})}),t("div",{ref:"verticalThumb",class:this.verticalThumbClass,style:this.verticalStyle,attrs:Lt,directives:this.verticalThumbDirectives}),t("div",{ref:"horizontalThumb",class:this.horizontalThumbClass,style:this.horizontalStyle,attrs:Lt,directives:this.horizontalThumbDirectives})])},created:function(){var t=this;this.__emitScroll=H(function(){var e=t.getScroll();e.ref=t,t.$emit("scroll",e)},0)},activated:function(){if(void 0!==this.__scrollPosition){var t=this.getScrollTarget();void 0!==t&&(Gi(t,this.__scrollPosition.left),Ui(t,this.__scrollPosition.top))}},deactivated:function(){this.__scrollPosition=this.getScrollPosition("both")},beforeDestroy:function(){this.__emitScroll.cancel(),clearTimeout(this.timer)}});var nl=1e3,sl=["start","center","end","start-force","center-force","end-force"],ol=Array.prototype.filter;function rl(t,e){return t+e}function al(t,e,i,n,s,o,r,a){var l=t===window?document.scrollingElement||document.documentElement:t,c=!0===s?"offsetWidth":"offsetHeight",u={scrollStart:0,scrollViewSize:-r-a,scrollMaxSize:0,offsetStart:-r,offsetEnd:-a};if(!0===s?(t===window?(u.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,u.scrollViewSize+=document.documentElement.clientWidth):(u.scrollStart=l.scrollLeft,u.scrollViewSize+=l.clientWidth),u.scrollMaxSize=l.scrollWidth,!0===o&&(u.scrollStart=(!0===Ii()?u.scrollMaxSize-u.scrollViewSize:0)-u.scrollStart)):(t===window?(u.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,u.scrollViewSize+=document.documentElement.clientHeight):(u.scrollStart=l.scrollTop,u.scrollViewSize+=l.clientHeight),u.scrollMaxSize=l.scrollHeight),void 0!==i)for(var h=i.previousElementSibling;null!==h;h=h.previousElementSibling)!1===h.classList.contains("q-virtual-scroll--skip")&&(u.offsetStart+=h[c]);if(void 0!==n)for(var d=n.nextElementSibling;null!==d;d=d.nextElementSibling)!1===d.classList.contains("q-virtual-scroll--skip")&&(u.offsetEnd+=d[c]);if(e!==t){var f=l.getBoundingClientRect(),p=e.getBoundingClientRect();!0===s?(u.offsetStart+=p.left-f.left,u.offsetEnd-=p.width):(u.offsetStart+=p.top-f.top,u.offsetEnd-=p.height),t!==window&&(u.offsetStart+=u.scrollStart),u.offsetEnd+=u.scrollMaxSize-u.offsetStart}return u}function ll(t,e,i,n){"end"===e&&(e=(t===window?document.body:t)[!0===i?"scrollWidth":"scrollHeight"]),t===window?!0===i?(!0===n&&(e=(!0===Ii()?document.body.scrollWidth-document.documentElement.clientWidth:0)-e),window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e):!0===i?(!0===n&&(e=(!0===Ii()?t.scrollWidth-t.offsetWidth:0)-e),t.scrollLeft=e):t.scrollTop=e}function cl(t,e,i,n){if(i>=n)return 0;var s=e.length,o=Math.floor(i/nl),r=Math.floor((n-1)/nl)+1,a=t.slice(o,r).reduce(rl,0);return i%nl!=0&&(a-=e.slice(o*nl,i).reduce(rl,0)),n%nl!=0&&n!==s&&(a-=e.slice(n,r*nl).reduce(rl,0)),a}var ul={virtualScrollSliceSize:{type:[Number,String],default:null},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]};var hl=Object.keys(ul),dl={props:Object.assign({},{virtualScrollHorizontal:Boolean},ul),data:function(){return{virtualScrollSliceRange:{from:0,to:0}}},watch:{needsSliceRecalc:function(){this.__setVirtualScrollSize()},needsReset:function(){this.reset()}},computed:{needsReset:function(){var t=this;return["virtualScrollItemSizeComputed","virtualScrollHorizontal"].map(function(e){return t[e]}).join(";")},needsSliceRecalc:function(){var t=this;return this.needsReset+";"+["virtualScrollSliceRatioBefore","virtualScrollSliceRatioAfter"].map(function(e){return t[e]}).join(";")},colspanAttr:function(){return void 0!==this.tableColspan?{colspan:this.tableColspan}:{colspan:100}},virtualScrollItemSizeComputed:function(){return this.virtualScrollItemSize}},methods:{reset:function(){this.__resetVirtualScroll(this.prevToIndex,!0)},refresh:function(t){this.__resetVirtualScroll(void 0===t?this.prevToIndex:t)},scrollTo:function(t,e){var i=this.__getVirtualScrollTarget();if(void 0!==i&&null!==i&&8!==i.nodeType){var n=al(i,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd);this.__scrollViewSize!==n.scrollViewSize&&this.__setVirtualScrollSize(n.scrollViewSize),this.__setVirtualScrollSliceRange(i,n,Math.min(this.virtualScrollLength-1,Math.max(0,parseInt(t,10)||0)),0,sl.indexOf(e)>-1?e:this.prevToIndex>-1&&t>this.prevToIndex?"end":"start")}},__onVirtualScrollEvt:function(t){var e=this.__getVirtualScrollTarget();if(void 0!==e&&null!==e&&8!==e.nodeType){if(!0===this.$q.interaction.isKeyboard&&null!==this.$q.interaction.event&&"string"==typeof this.$q.interaction.event.key){var i=this.$q.interaction.event.key.toLowerCase();"home"!==i&&"end"!==i||ll(e,"home"===i?0:"end",this.virtualScrollHorizontal,this.$q.lang.rtl)}var n=al(e,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd),s=this.virtualScrollLength-1,o=n.scrollMaxSize-n.offsetStart-n.offsetEnd-this.virtualScrollPaddingAfter;if(this.prevScrollStart!==n.scrollStart)if(n.scrollMaxSize<=0)this.__setVirtualScrollSliceRange(e,n,0,0);else{this.__scrollViewSize!==n.scrollViewSize&&this.__setVirtualScrollSize(n.scrollViewSize),this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from);var r=Math.floor(n.scrollMaxSize-Math.max(n.scrollViewSize,n.offsetEnd)-Math.min(this.virtualScrollSizes[s],n.scrollViewSize/2));if(r>0&&Math.ceil(n.scrollStart)>=r)this.__setVirtualScrollSliceRange(e,n,s,n.scrollMaxSize-n.offsetEnd-this.virtualScrollSizesAgg.reduce(rl,0));else{var a=0,l=n.scrollStart-n.offsetStart,c=l;if(l<=o&&l+n.scrollViewSize>=this.virtualScrollPaddingBefore)l-=this.virtualScrollPaddingBefore,a=this.virtualScrollSliceRange.from,c=l;else for(var u=0;l>=this.virtualScrollSizesAgg[u]&&a0&&a-n.scrollViewSize?(a++,c=l):c=this.virtualScrollSizes[a]+l;this.__setVirtualScrollSliceRange(e,n,a,c,void 0,t)}}}},__setVirtualScrollSliceRange:function(t,e,i,n,s,o){var r=this,a="string"==typeof s&&s.indexOf("-force")>-1,l=!0===a?s.replace("-force",""):s,c=void 0!==l?l:"start",u=Math.max(0,i-this.virtualScrollSliceSizeComputed[c]),h=u+this.virtualScrollSliceSizeComputed.total;h>this.virtualScrollLength&&(h=this.virtualScrollLength,u=Math.max(0,h-this.virtualScrollSliceSizeComputed.total)),this.prevScrollStart=e.scrollStart;var d=u!==this.virtualScrollSliceRange.from||h!==this.virtualScrollSliceRange.to;if(!1!==d||void 0!==l){var f=document.activeElement,p=this.$refs.content;!0===d&&void 0!==p&&p!==f&&!0===p.contains(f)&&!0!==p.qVsFocusout&&(p.qVsFocusout=!0,p.addEventListener("focusout",this.__onBlurRefocusFn),setTimeout(function(){void 0!==p&&(p.removeEventListener("focusout",r.__onBlurRefocusFn),p.qVsFocusout=!1)},500)),function t(e,i){void 0===t.isSupported&&(t.isSupported=void 0!==window.getComputedStyle(document.body).overflowAnchor),!1!==t.isSupported&&void 0!==e&&(cancelAnimationFrame(e._qOverflowAnimationFrame),e._qOverflowAnimationFrame=requestAnimationFrame(function(){if(void 0!==e){var t=e.children||[];ol.call(t,function(t){return t.dataset&&void 0!==t.dataset.qVsAnchor}).forEach(function(t){delete t.dataset.qVsAnchor});var n=t[i];n&&n.dataset&&(n.dataset.qVsAnchor="")}}))}(p,i-u);var m=void 0!==l?this.virtualScrollSizes.slice(u,i).reduce(rl,0):0;if(!0===d){var v=h>=this.virtualScrollSliceRange.from&&u<=this.virtualScrollSliceRange.to?this.virtualScrollSliceRange.to:h;this.virtualScrollSliceRange={from:u,to:v},this.virtualScrollPaddingBefore=cl(this.virtualScrollSizesAgg,this.virtualScrollSizes,0,u),this.virtualScrollPaddingAfter=cl(this.virtualScrollSizesAgg,this.virtualScrollSizes,this.virtualScrollSliceRange.to,this.virtualScrollLength),cancelAnimationFrame(this.vsRangeToAnimationFrame),this.vsRangeToAnimationFrame=requestAnimationFrame(function(){r.virtualScrollSliceRange.to!==h&&r.prevScrollStart===e.scrollStart&&(r.virtualScrollSliceRange={from:r.virtualScrollSliceRange.from,to:h},r.virtualScrollPaddingAfter=cl(r.virtualScrollSizesAgg,r.virtualScrollSizes,h,r.virtualScrollLength))})}cancelAnimationFrame(this.vsScrollAnimationFrame),this.vsScrollAnimationFrame=requestAnimationFrame(function(){if(r.prevScrollStart===e.scrollStart){!0===d&&r.__updateVirtualScrollSizes(u);var s=r.virtualScrollSizes.slice(u,i).reduce(rl,0),c=s+e.offsetStart+r.virtualScrollPaddingBefore,h=c+r.virtualScrollSizes[i],f=c+n;if(void 0!==l){var p=s-m,v=e.scrollStart+p;f=!0!==a&&v=s;o--)this.virtualScrollSizes[o]=n;var r=Math.floor((this.virtualScrollLength-1)/nl);this.virtualScrollSizesAgg=[];for(var a=0;a<=r;a++){for(var l=0,c=Math.min((a+1)*nl,this.virtualScrollLength),u=a*nl;u=0?(this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from),this.$nextTick(function(){i.scrollTo(t)})):this.__onVirtualScrollEvt()},__setVirtualScrollSize:function(t){if(void 0===t&&"undefined"!=typeof window){var e=this.__getVirtualScrollTarget();void 0!==e&&null!==e&&8!==e.nodeType&&(t=al(e,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd).scrollViewSize)}this.__scrollViewSize=t;var i=parseFloat(this.virtualScrollSliceRatioBefore)||0,n=1+i+(parseFloat(this.virtualScrollSliceRatioAfter)||0),s=void 0===t||t<=0?1:Math.ceil(t/this.virtualScrollItemSizeComputed),o=Math.max(1,s,Math.ceil((this.virtualScrollSliceSize>0?this.virtualScrollSliceSize:10)/n));this.virtualScrollSliceSizeComputed={total:Math.ceil(o*n),start:Math.ceil(o*i),center:Math.ceil(o*(.5+i)),end:Math.ceil(o*(1+i)),view:s}},__padVirtualScroll:function(t,e,i){var n,s,o,r,a=!0===this.virtualScrollHorizontal?"width":"height",l={};return l["--q-virtual-scroll-item-"+a]=this.virtualScrollItemSizeComputed+"px",["tbody"===e?t(e,{staticClass:"q-virtual-scroll__padding",key:"before",ref:"before"},[t("tr",[t("td",{style:Object.assign((n={},n[a]=this.virtualScrollPaddingBefore+"px",n),l),attrs:this.colspanAttr})])]):t(e,{staticClass:"q-virtual-scroll__padding",key:"before",ref:"before",style:Object.assign((s={},s[a]=this.virtualScrollPaddingBefore+"px",s),l)}),t(e,{staticClass:"q-virtual-scroll__content",key:"content",ref:"content",attrs:{tabindex:-1}},i),"tbody"===e?t(e,{staticClass:"q-virtual-scroll__padding",key:"after",ref:"after"},[t("tr",[t("td",{style:Object.assign((o={},o[a]=this.virtualScrollPaddingAfter+"px",o),l),attrs:this.colspanAttr})])]):t(e,{staticClass:"q-virtual-scroll__padding",key:"after",ref:"after",style:Object.assign((r={},r[a]=this.virtualScrollPaddingAfter+"px",r),l)})]},__emitScroll:function(t){this.prevToIndex!==t&&(void 0!==this.qListeners["virtual-scroll"]&&this.$emit("virtual-scroll",{index:t,from:this.virtualScrollSliceRange.from,to:this.virtualScrollSliceRange.to-1,direction:t50&&(i=0,t(!0))}return s.cancel=function(){clearTimeout(e),e=void 0,i=0},s}(this.__onVirtualScrollEvt),this.__setVirtualScrollSize()},beforeDestroy:function(){this.__onVirtualScrollEvt.cancel()}},fl=function(t){return["add","add-unique","toggle"].includes(t)},pl=i.default.extend({name:"QSelect",mixins:[Wr,dl,wn,Nt],props:{value:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueSanitize:Boolean,dropdownIcon:String,options:{type:Array,default:function(){return[]}},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsSanitize:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],dialogContentClass:[String,Array,Object],dialogContentStyle:[String,Array,Object],dialogCloseIcon:[Boolean,String],useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:fl},mapOptions:Boolean,emitValue:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:String,transitionHide:String,behavior:{type:String,validator:function(t){return["default","menu","dialog"].includes(t)},default:"default"},virtualScrollItemSize:{type:[Number,String],default:void 0}},data:function(){return{menu:!1,dialog:!1,optionIndex:-1,inputValue:"",dialogFieldFocused:!1}},watch:{innerValue:{handler:function(t){this.innerValueCache=t,!0===this.useInput&&!0===this.fillInput&&!0!==this.multiple&&!0!==this.innerLoading&&(!0!==this.dialog&&!0!==this.menu||!0!==this.hasValue)&&(!0!==this.userInputValue&&this.__resetInputValue(),!0!==this.dialog&&!0!==this.menu||this.filter(""))},immediate:!0},fillInput:function(){this.__resetInputValue()},menu:function(t){this.__updateMenu(t)},virtualScrollLength:function(t,e){var i=this;!0===this.menu&&!1===this.innerLoading&&(this.__resetVirtualScroll(-1,!0),this.$nextTick(function(){!0===i.menu&&!1===i.innerLoading&&(t>e?i.__resetVirtualScroll():i.__updateMenu(!0))}))}},computed:{isOptionsDark:function(){return null===this.optionsDark?null===this.dark?this.$q.dark.isActive:this.dark:this.optionsDark},optionsDarkSuffix:function(){return null===this.isOptionsDark?"dark-auto":!0===this.isOptionsDark?"dark":"light"},virtualScrollLength:function(){return Array.isArray(this.options)?this.options.length:0},fieldClass:function(){return"q-select q-field--auto-height q-select--with"+(!0!==this.useInput?"out":"")+"-input q-select--with"+(!0!==this.useChips?"out":"")+"-chips q-select--"+(!0===this.multiple?"multiple":"single")},computedInputClass:function(){return!0===this.hideSelected||0===this.innerValue.length?this.inputClass:void 0===this.inputClass?"q-field__input--padding":[this.inputClass,"q-field__input--padding"]},menuContentClass:function(){return(!0===this.virtualScrollHorizontal?"q-virtual-scroll--horizontal":"")+(this.popupContentClass?" "+this.popupContentClass:"")},innerValue:function(){var t=this,e=!0===this.mapOptions&&!0!==this.multiple,i=void 0===this.value||null===this.value&&!0!==e?[]:!0===this.multiple&&Array.isArray(this.value)?this.value:[this.value];if(!0===this.mapOptions&&!0===Array.isArray(this.options)){var n=!0===this.mapOptions&&void 0!==this.innerValueCache?this.innerValueCache:[],s=i.map(function(e){return t.__getOption(e,n)});return null===this.value&&!0===e?s.filter(function(t){return null!==t}):s}return i},noOptions:function(){return 0===this.virtualScrollLength},selectedString:function(){var t=this;return this.innerValue.map(function(e){return t.getOptionLabel(e)}).join(", ")},sanitizeFn:function(){return!0===this.optionsSanitize?function(){return!0}:function(t){return void 0!==t&&null!==t&&!0===t.sanitize}},displayAsText:function(){return!0===this.displayValueSanitize||void 0===this.displayValue&&(!0===this.optionsSanitize||this.innerValue.some(this.sanitizeFn))},computedTabindex:function(){return!0===this.focused?this.tabindex:-1},selectedScope:function(){var t=this;return this.innerValue.map(function(e,i){return{index:i,opt:e,sanitize:t.sanitizeFn(e),selected:!0,removeAtIndex:t.__removeAtIndexAndFocus,toggleOption:t.toggleOption,tabindex:t.computedTabindex}})},optionScope:function(){var t=this;if(0===this.virtualScrollLength)return[];var e=this.virtualScrollSliceRange,i=e.from,n=e.to,s=this.__optionScopeCache,o=s.options,r=s.optionEls;return this.options.slice(i,n).map(function(e,n){var s=t.isOptionDisabled(e),a=i+n,l={clickable:!0,active:!1,activeClass:t.computedOptionsSelectedClass,manualFocus:!0,focused:!1,disable:s,tabindex:-1,dense:t.optionsDense,dark:t.isOptionsDark},c={role:"option",id:t.targetUid+"_"+a};!0!==s&&(!0===t.isOptionSelected(e)&&(l.active=!0),c["aria-selected"]=!0===l.active?"true":"false",t.optionIndex===a&&(l.focused=!0));var u={click:function(){t.toggleOption(e)}};!0===t.$q.platform.is.desktop&&(u.mousemove=function(){!0===t.menu&&t.setOptionIndex(a)});var h={index:a,opt:e,sanitize:t.sanitizeFn(e),selected:l.active,focused:l.focused,toggleOption:t.toggleOption,setOptionIndex:t.setOptionIndex,itemProps:l,itemAttrs:c};return void 0!==o[n]&&!0===En(h,o[n])||(o[n]=h,r[n]=void 0),Object.assign({},h,{itemEvents:u})})},dropdownArrowIcon:function(){return void 0!==this.dropdownIcon?this.dropdownIcon:this.$q.iconSet.arrow.dropdown},computedDialogCloseIcon:function(){return!0===this.dialogCloseIcon?!0===this.$q.lang.rtl?this.$q.iconSet.chevron.right:this.$q.iconSet.chevron.left:"string"==typeof this.dialogCloseIcon&&this.dialogCloseIcon.length>0&&this.dialogCloseIcon},squaredMenu:function(){return!1===this.optionsCover&&!0!==this.outlined&&!0!==this.standout&&!0!==this.borderless&&!0!==this.rounded},computedOptionsSelectedClass:function(){return void 0!==this.optionsSelectedClass?this.optionsSelectedClass:void 0!==this.color?"text-"+this.color:""},innerOptionsValue:function(){var t=this;return this.innerValue.map(function(e){return t.getOptionValue(e)})},getOptionValue:function(){return this.__getPropValueFn("optionValue","value")},getOptionLabel:function(){return this.__getPropValueFn("optionLabel","label")},isOptionDisabled:function(){var t=this.__getPropValueFn("optionDisable","disable");return function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];return!0===t.apply(null,e)}},inputControlEvents:function(){return{input:this.__onInput,compositionend:this.__onInput,change:this.__onChange,keydown:this.__onTargetKeydown,keyup:this.__onTargetAutocomplete,keypress:this.__onTargetKeypress,focus:this.__onTargetFocus,click:this.__onTargetClick}},closeButtonEvents:function(){var t=this;return{click:function(e){w(e),t.hidePopup()}}},virtualScrollItemSizeComputed:function(){return void 0===this.virtualScrollItemSize?!0===this.optionsDense?24:48:this.virtualScrollItemSize},comboboxAttrs:function(){var t={tabindex:this.tabindex,role:"combobox","aria-label":this.label,"aria-readonly":!0===this.readonly?"true":"false","aria-autocomplete":!0===this.useInput?"list":"none","aria-expanded":!0===this.menu?"true":"false","aria-owns":this.targetUid+"_lb","aria-controls":this.targetUid+"_lb"};return this.optionIndex>=0&&(t["aria-activedescendant"]=this.targetUid+"_"+this.optionIndex),t},listboxAttrs:function(){return{id:this.targetUid+"_lb",role:"listbox","aria-multiselectable":!0===this.multiple?"true":"false"}}},methods:{getEmittingOptionValue:function(t){return!0===this.emitValue?this.getOptionValue(t):t},removeAtIndex:function(t){if(t>-1&&t=this.maxValues)){var n=this.value.slice();this.$emit("add",{index:n.length,value:i}),n.push(i),this.$emit("input",n)}},toggleOption:function(t,e){if(!0===this.editable&&void 0!==t&&!0!==this.isOptionDisabled(t)){var i=this.getOptionValue(t);if(!0!==this.multiple)return!0!==e&&(this.updateInputValue(!0===this.fillInput?this.getOptionLabel(t):"",!0,!0),this.dialogFieldFocused=!1,document.activeElement.blur(),this.hidePopup()),void 0!==this.$refs.target&&this.$refs.target.focus(),void(0!==this.innerValue.length&&!0===En(this.getOptionValue(this.innerValue[0]),i)||this.$emit("input",!0===this.emitValue?i:t));if((!0!==this.hasDialog||!0===this.dialogFieldFocused)&&this.__focus(),this.__selectInputText(),0===this.innerValue.length){var n=!0===this.emitValue?i:t;return this.$emit("add",{index:0,value:n}),void this.$emit("input",!0===this.multiple?[n]:n)}var s=this.value.slice(),o=this.innerOptionsValue.findIndex(function(t){return En(t,i)});if(o>-1)this.$emit("remove",{index:o,value:s.splice(o,1)[0]});else{if(void 0!==this.maxValues&&s.length>=this.maxValues)return;var r=!0===this.emitValue?i:t;this.$emit("add",{index:s.length,value:r}),s.push(r)}this.$emit("input",s)}},setOptionIndex:function(t){if(!0===this.$q.platform.is.desktop){var e=t>-1&&t=0?i.getOptionLabel(i.options[n]):i.defaultInputValue)}))}},__getOption:function(t,e){var i=this,n=function(e){return En(i.getOptionValue(e),t)};return this.options.find(n)||e.find(n)||t},__getPropValueFn:function(t,e){var i=void 0!==this[t]?this[t]:e;return"function"==typeof i?i:function(t){return null!==t&&"object"==typeof t&&i in t?t[i]:t}},isOptionSelected:function(t){var e=this.getOptionValue(t);return void 0!==this.innerOptionsValue.find(function(t){return En(t,e)})},__selectInputText:function(t){!0===this.useInput&&void 0!==this.$refs.target&&(void 0===t||this.$refs.target===t.target&&t.target.value===this.selectedString)&&this.$refs.target.select()},__onTargetKeyup:function(t){!0===Be(t,27)&&!0===this.menu&&(S(t),this.hidePopup(),this.__resetInputValue()),this.$emit("keyup",t)},__onTargetAutocomplete:function(t){var e=this,i=t.target.value;if(void 0===t.keyCode)if(t.target.value="",clearTimeout(this.inputTimer),this.__resetInputValue(),"string"==typeof i&&i.length>0){var n=i.toLocaleLowerCase(),s=function(t){var i=e.options.find(function(e){return t(e).toLocaleLowerCase()===n});return void 0!==i&&(-1===e.innerValue.indexOf(i)?e.toggleOption(i):e.hidePopup(),!0)},o=function(t){!0!==s(e.getOptionValue)&&!0!==s(e.getOptionLabel)&&!0!==t&&e.filter(i,!0,function(){return o(!0)})};o()}else this.__clearValue(t);else this.__onTargetKeyup(t)},__onTargetKeypress:function(t){this.$emit("keypress",t)},__onTargetKeydown:function(t){var e=this;if(this.$emit("keydown",t),!0!==Ae(t)){var i=this.inputValue.length>0&&(void 0!==this.newValueMode||void 0!==this.qListeners["new-value"]),n=!0!==t.shiftKey&&!0!==this.multiple&&(this.optionIndex>-1||!0===i);if(27!==t.keyCode)if(9!==t.keyCode||!1!==n){if(void 0!==t.target&&t.target.id===this.targetUid){if(40===t.keyCode&&!0!==this.innerLoading&&!1===this.menu)return w(t),void this.showPopup();if(8!==t.keyCode||!0===this.hideSelected||0!==this.inputValue.length){35!==t.keyCode&&36!==t.keyCode||"string"==typeof this.inputValue&&0!==this.inputValue.length||(w(t),this.optionIndex=-1,this.moveOptionSelection(36===t.keyCode?1:-1,this.multiple)),33!==t.keyCode&&34!==t.keyCode||void 0===this.virtualScrollSliceSizeComputed||(w(t),this.optionIndex=Math.max(-1,Math.min(this.virtualScrollLength,this.optionIndex+(33===t.keyCode?-1:1)*this.virtualScrollSliceSizeComputed.view)),this.moveOptionSelection(33===t.keyCode?1:-1,this.multiple)),38!==t.keyCode&&40!==t.keyCode||(w(t),this.moveOptionSelection(38===t.keyCode?-1:1,this.multiple));var s=this.virtualScrollLength;if((void 0===this.searchBuffer||this.searchBufferExp0&&!0!==this.useInput&&void 0!==t.key&&1===t.key.length&&t.altKey===t.ctrlKey&&(32!==t.keyCode||this.searchBuffer.length>0)){!0!==this.menu&&this.showPopup(t);var o=t.key.toLocaleLowerCase(),r=1===this.searchBuffer.length&&this.searchBuffer[0]===o;this.searchBufferExp=Date.now()+1500,!1===r&&(w(t),this.searchBuffer+=o);var a=new RegExp("^"+this.searchBuffer.split("").map(function(t){return".*+?^${}()|[]\\".indexOf(t)>-1?"\\"+t:t}).join(".*"),"i"),l=this.optionIndex;if(!0===r||l<0||!0!==a.test(this.getOptionLabel(this.options[l])))do{l=Ct(l+1,-1,s-1)}while(l!==this.optionIndex&&(!0===this.isOptionDisabled(this.options[l])||!0!==a.test(this.getOptionLabel(this.options[l]))));this.optionIndex!==l&&this.$nextTick(function(){e.setOptionIndex(l),e.scrollTo(l),l>=0&&!0===e.useInput&&!0===e.fillInput&&e.__setInputValue(e.getOptionLabel(e.options[l]))})}else if(13===t.keyCode||32===t.keyCode&&!0!==this.useInput&&""===this.searchBuffer||9===t.keyCode&&!1!==n)if(9!==t.keyCode&&w(t),this.optionIndex>-1&&this.optionIndex0&&i.push(t("input",{key:"autoinp",staticClass:"q-select__autocomplete-input",attrs:{autocomplete:this.autocomplete,tabindex:-1},on:Tt(this,"autoinp",{keyup:this.__onTargetAutocomplete})}))}if(void 0!==this.nameProp&&!0!==this.disable&&this.innerOptionsValue.length>0){var o=this.innerOptionsValue.map(function(e){return t("option",{attrs:{value:e,selected:!0}})});i.push(t("select",{staticClass:"hidden",attrs:{name:this.nameProp,multiple:this.multiple}},o))}var r=!0===this.useInput||!0!==n?void 0:this.qAttrs;return t("div",{staticClass:"q-field__native row items-center",attrs:r},i)},__getOptions:function(t){var e=this;if(!0===this.menu){if(!0===this.noOptions)return void 0!==this.$scopedSlots["no-option"]?this.$scopedSlots["no-option"]({inputValue:this.inputValue}):void 0;void 0!==this.$scopedSlots.option&&this.__optionScopeCache.optionSlot!==this.$scopedSlots.option&&(this.__optionScopeCache.optionSlot=this.$scopedSlots.option,this.__optionScopeCache.optionEls=[]);var i=void 0!==this.$scopedSlots.option?this.$scopedSlots.option:function(i){var n;return t(ur,{key:i.index,props:i.itemProps,attrs:i.itemAttrs,on:i.itemEvents},[t(hr,[t(qr,{domProps:(n={},n[!0===i.sanitize?"textContent":"innerHTML"]=e.getOptionLabel(i.opt),n)})])])},n=this.__optionScopeCache.optionEls,s=this.__padVirtualScroll(t,"div",this.optionScope.map(function(t,e){return void 0===n[e]&&(n[e]=i(t)),n[e]}));return void 0!==this.$scopedSlots["before-options"]&&(s=this.$scopedSlots["before-options"]().concat(s)),Wt(s,this,"after-options")}},__prependDialogCloseIcon:function(t){return!1===this.computedDialogCloseIcon||!0!==this.hasDialog||!0!==this.dialog?Ht(this,"prepend"):Wt([t(ae,{staticClass:"q-select__close-icon q-field__focusable-action",props:{tag:"button",name:this.computedDialogCloseIcon},attrs:Et,on:this.closeButtonEvents})],this,"prepend")},__getInnerAppend:function(t){return!0!==this.loading&&!0!==this.innerLoadingIndicator&&!0!==this.hideDropdownIcon?[t(ae,{staticClass:"q-select__dropdown-icon"+(!0===this.menu?" rotate-180":""),props:{name:this.dropdownArrowIcon}})]:null},__getInput:function(t,e,i){var n=!0===i?Object.assign({},this.comboboxAttrs,this.qAttrs):void 0,s={ref:!0===i?"target":void 0,key:"i_t",staticClass:"q-field__input q-placeholder col",style:this.inputStyle,class:this.computedInputClass,domProps:{value:void 0!==this.inputValue?this.inputValue:""},attrs:Object.assign({},{type:"search"},n,{id:!0===i?this.targetUid:void 0,maxlength:this.maxlength,autocomplete:this.autocomplete,"data-autofocus":(!0===e?!0===i:this.autofocus)||void 0,disabled:!0===this.disable,readonly:!0===this.readonly}),on:this.inputControlEvents};return!0!==e&&!0===this.hasDialog&&(s.staticClass+=" no-pointer-events"),t("input",s)},__onChange:function(t){!0===t.target.qComposing&&(t.target.qComposing=!1,this.__onInput(t))},__onInput:function(t){var e=this;if(t&&t.target&&!0!==t.target.qComposing){var i="string"==typeof t.data&&!0===t.isComposing&&t.data.length+1===t.target.value.length?t.data:t.target.value;this.inputValue!==i&&(clearTimeout(this.inputTimer),this.__setInputValue(i),this.userInputValue=!0,this.defaultInputValue=this.inputValue,!0===this.focused||!0===this.hasDialog&&!0!==this.dialogFieldFocused||this.__focus(),void 0!==this.qListeners.filter&&(this.inputTimer=setTimeout(function(){e.filter(e.inputValue)},this.inputDebounce)))}},__setInputValue:function(t){this.inputValue!==t&&(this.inputValue=t,this.$emit("input-value",t))},updateInputValue:function(t,e,i){this.userInputValue=!0!==i,!0===this.useInput&&(this.__setInputValue(t),!0!==e&&!0===i||(this.defaultInputValue=t),!0!==e&&this.filter(t))},filter:function(t,e,i){var n=this;if(void 0!==this.qListeners.filter&&(!0===e||!0===this.focused)){!0===this.innerLoading?this.$emit("filter-abort"):(this.innerLoading=!0,this.innerLoadingIndicator=!0),""!==t&&!0!==this.multiple&&this.innerValue.length>0&&!0!==this.userInputValue&&t===this.getOptionLabel(this.innerValue[0])&&(t="");var s=setTimeout(function(){!0===n.menu&&(n.menu=!1)},10);clearTimeout(this.filterId),this.filterId=s,this.$emit("filter",t,function(t,o){!0!==e&&!0!==n.focused||n.filterId!==s||(clearTimeout(n.filterId),"function"==typeof t&&t(),n.innerLoadingIndicator=!1,n.$nextTick(function(){n.innerLoading=!1,!0===n.editable&&(!0===e?!0===n.menu&&n.hidePopup():!0===n.menu?n.__updateMenu(!0):(n.menu=!0,!0===n.hasDialog&&(n.dialog=!0))),"function"==typeof o&&n.$nextTick(function(){o(n)}),"function"==typeof i&&n.$nextTick(function(){i(n)})}))},function(){!0===n.focused&&n.filterId===s&&(clearTimeout(n.filterId),n.innerLoading=!1,n.innerLoadingIndicator=!1),!0===n.menu&&(n.menu=!1)})}},__getControlEvents:function(){var t=this,e=function(e){t.__onControlFocusout(e,function(){t.__resetInputValue(),t.__closeMenu()})};return{focusin:this.__onControlFocusin,focusout:e,"popup-show":this.__onControlPopupShow,"popup-hide":function(i){void 0!==i&&S(i),t.$emit("popup-hide",i),t.hasPopupOpen=!1,e(i)},click:function(e){if(x(e),!0!==t.hasDialog&&!0===t.menu)return t.__closeMenu(),void(void 0!==t.$refs.target&&t.$refs.target.focus());t.showPopup(e)}}},__getControlChild:function(t){if(!1!==this.editable&&(!0===this.dialog||!0!==this.noOptions||void 0!==this.$scopedSlots["no-option"]))return this["__get"+(!0===this.hasDialog?"Dialog":"Menu")](t)},__getMenu:function(t){return t(fn,{key:"menu",ref:"menu",props:{value:this.menu,fit:!0!==this.menuShrink,cover:!0===this.optionsCover&&!0!==this.noOptions&&!0!==this.useInput,anchor:this.menuAnchor,self:this.menuSelf,offset:this.menuOffset,contentClass:this.menuContentClass,contentStyle:this.popupContentStyle,dark:this.isOptionsDark,noParentEvent:!0,noRefocus:!0,noFocus:!0,square:this.squaredMenu,transitionShow:this.transitionShow,transitionHide:this.transitionHide,separateClosePopup:!0},attrs:this.listboxAttrs,on:Tt(this,"menu",{"&scroll":this.__onVirtualScrollEvt,"before-hide":this.__closeMenu,show:this.__onMenuShow})},this.__getOptions(t))},__onMenuShow:function(){this.__setVirtualScrollSize()},__onDialogFieldFocus:function(t){S(t),void 0!==this.$refs.target&&this.$refs.target.focus(),this.dialogFieldFocused=!0},__onDialogFieldBlur:function(t){var e=this;S(t),this.$nextTick(function(){e.dialogFieldFocused=!1})},__getDialog:function(t){var e=this,i=[t(Wr,{staticClass:"col-auto "+this.fieldClass,props:Object.assign({},this.$props,{for:this.targetUid,dark:this.isOptionsDark,square:!0,filled:!0,itemAligned:!1,loading:this.innerLoadingIndicator,stackLabel:this.inputValue.length>0}),on:Object.assign({},this.qListeners,{focus:this.__onDialogFieldFocus,blur:this.__onDialogFieldBlur}),scopedSlots:Object.assign({},this.$scopedSlots,{rawControl:function(){return e.__getControl(t,!0)},prepend:function(){return e.__prependDialogCloseIcon(t)},before:void 0,after:void 0})})];return!0===this.menu&&i.push(t("div",{key:"virtMenu",ref:"menuContent",staticClass:"col scroll",class:this.menuContentClass,style:this.popupContentStyle,attrs:this.listboxAttrs,on:Tt(this,"virtMenu",{click:x,"&scroll":this.__onVirtualScrollEvt})},this.__getOptions(t))),t(nr,{key:"dialog",ref:"dialog",props:{value:this.dialog,position:!0===this.useInput?"top":void 0,contentClass:this.dialogContentClass,contentStyle:this.dialogContentStyle,transitionShow:this.transitionShow,transitionHide:this.transitionHide},on:Tt(this,"dialog",{"before-hide":this.__onDialogBeforeHide,hide:this.__onDialogHide,show:this.__onDialogShow})},[t("div",{staticClass:"q-select__dialog q-select__dialog--"+this.optionsDarkSuffix+" q-"+this.optionsDarkSuffix+(!0===this.dialogFieldFocused?" q-select__dialog--focused":"")},i)])},__onDialogBeforeHide:function(){!0===this.useInput&&!0!==this.$q.platform.is.desktop||(this.$refs.dialog.__refocusTarget=this.$el.querySelector(".q-field__native > [tabindex]:last-child")),this.focused=!1,this.dialogFieldFocused=!1},__onDialogHide:function(t){!0!==this.$q.platform.is.desktop&&document.activeElement.blur(),this.hidePopup(),!1===this.focused&&this.$emit("blur",t),this.__resetInputValue()},__onDialogShow:function(){var t=document.activeElement;null!==t&&t.id===this.targetUid||this.$refs.target===t||void 0===this.$refs.target||this.$refs.target.focus(),this.__setVirtualScrollSize()},__closeMenu:function(){void 0!==this.__optionScopeCache&&(this.__optionScopeCache.optionEls=[]),!0!==this.dialog&&(this.optionIndex=-1,!0===this.menu&&(this.menu=!1),!1===this.focused&&(clearTimeout(this.filterId),this.filterId=void 0,!0===this.innerLoading&&(this.$emit("filter-abort"),this.innerLoading=!1,this.innerLoadingIndicator=!1)))},showPopup:function(t){var e=this;!0===this.editable&&(!0===this.hasDialog?(this.__onControlFocusin(t),this.dialog=!0,this.$nextTick(function(){e.__focus()})):this.__focus(),void 0!==this.qListeners.filter?this.filter(this.inputValue):!0===this.noOptions&&void 0===this.$scopedSlots["no-option"]||(this.menu=!0))},hidePopup:function(){this.dialog=!1,this.__closeMenu()},__resetInputValue:function(){!0===this.useInput&&this.updateInputValue(!0!==this.multiple&&!0===this.fillInput&&this.innerValue.length>0&&this.getOptionLabel(this.innerValue[0])||"",!0,!0)},__updateMenu:function(t){var e=this,i=-1;if(!0===t){if(this.innerValue.length>0){var n=this.getOptionValue(this.innerValue[0]);i=this.options.findIndex(function(t){return En(e.getOptionValue(t),n)})}this.__resetVirtualScroll(i)}this.setOptionIndex(i)},__onPreRender:function(){this.hasDialog=(!0===this.$q.platform.is.mobile||"dialog"===this.behavior)&&("menu"!==this.behavior&&(!0!==this.useInput||(void 0!==this.$scopedSlots["no-option"]||void 0!==this.qListeners.filter||!1===this.noOptions)))},updateMenuPosition:function(){!1===this.dialog&&void 0!==this.$refs.menu&&this.$refs.menu.updatePosition()}},beforeMount:function(){this.__optionScopeCache={optionSlot:this.$scopedSlots.option,options:[],optionEls:[]}},beforeDestroy:function(){this.__optionScopeCache=void 0,clearTimeout(this.inputTimer)}}),ml=["text","rect","circle","QBtn","QBadge","QChip","QToolbar","QCheckbox","QRadio","QToggle","QSlider","QRange","QInput","QAvatar"],vl=["wave","pulse","pulse-x","pulse-y","fade","blink","none"],gl=i.default.extend({name:"QSkeleton",mixins:[ue,Vt,Nt],props:{type:{type:String,validator:function(t){return ml.includes(t)},default:"rect"},animation:{type:String,validator:function(t){return vl.includes(t)},default:"wave"},square:Boolean,bordered:Boolean,size:String,width:String,height:String},computed:{style:function(){return void 0!==this.size?{width:this.size,height:this.size}:{width:this.width,height:this.height}},classes:function(){return"q-skeleton--"+this.darkSuffix+" q-skeleton--type-"+this.type+("none"!==this.animation?" q-skeleton--anim q-skeleton--anim-"+this.animation:"")+(!0===this.square?" q-skeleton--square":"")+(!0===this.bordered?" q-skeleton--bordered":"")}},render:function(t){return t(this.tag,{staticClass:"q-skeleton",class:this.classes,style:this.style,on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),_l=[["left","center","start","width"],["right","center","end","width"],["top","start","center","height"],["bottom","end","center","height"]],bl=i.default.extend({name:"QSlideItem",mixins:[ue,Nt],props:{leftColor:String,rightColor:String,topColor:String,bottomColor:String},directives:{TouchPan:xs},computed:{langDir:function(){return!0===this.$q.lang.rtl?{left:"right",right:"left"}:{left:"left",right:"right"}}},methods:{reset:function(){this.$refs.content.style.transform="translate(0,0)",this.__emitSlide(this.__showing,0,!0)},__emitSlide:function(t,e,i){void 0!==this.qListeners.slide&&this.$emit("slide",{side:t,ratio:e,isReset:i})},__pan:function(t){var e,i,n,s=this,o=this.$refs.content;if(t.isFinal)return o.classList.remove("no-transition"),void(1===this.__scale?(o.style.transform="translate"+this.__axis+"("+100*this.__dir+"%)",this.timer=setTimeout(function(){s.$emit(s.__showing,{reset:s.reset}),s.$emit("action",{side:s.__showing,reset:s.reset})},230)):(o.style.transform="translate(0,0)",this.__emitSlide(this.__showing,0,!0)));(t.isFirst?(this.__dir=null,this.__size={left:0,right:0,top:0,bottom:0},this.__scale=0,o.classList.add("no-transition"),_l.forEach(function(t){if(void 0!==s.$scopedSlots[t[0]]){var e=s.$refs[t[0]+"Content"];e.style.transform="scale(1)",s.__size[t[0]]=e.getBoundingClientRect()[t[3]]}}),this.__axis="up"===t.direction||"down"===t.direction?"Y":"X"):t.direction="X"===this.__axis?t.offset.x<0?"left":"right":t.offset.y<0?"up":"down",void 0===this.$scopedSlots.left&&t.direction===this.langDir.right||void 0===this.$scopedSlots.right&&t.direction===this.langDir.left||void 0===this.$scopedSlots.top&&"down"===t.direction||void 0===this.$scopedSlots.bottom&&"up"===t.direction)?o.style.transform="translate(0,0)":("X"===this.__axis?(i="left"===t.direction?-1:1,e=1===i?this.langDir.left:this.langDir.right,n=t.distance.x):(i="up"===t.direction?-2:2,e=2===i?"top":"bottom",n=t.distance.y),null!==this.__dir&&Math.abs(i)!==Math.abs(this.__dir)||(this.__dir!==i&&(["left","right","top","bottom"].forEach(function(t){void 0!==s.$refs[t]&&(s.$refs[t].style.visibility=e===t?"visible":"hidden")}),this.__showing=e,this.__dir=i),this.__scale=Math.max(0,Math.min(1,(n-40)/this.__size[e])),o.style.transform="translate"+this.__axis+"("+n*i/Math.abs(i)+"px)",this.$refs[e+"Content"].style.transform="scale("+this.__scale+")",this.__emitSlide(e,this.__scale,!1)))}},render:function(t){var e=this,i=[],n={left:void 0!==this.$scopedSlots[this.langDir.right],right:void 0!==this.$scopedSlots[this.langDir.left],up:void 0!==this.$scopedSlots.bottom,down:void 0!==this.$scopedSlots.top},s=Object.keys(n).filter(function(t){return!0===n[t]});return _l.forEach(function(n){var s=n[0];void 0!==e.$scopedSlots[s]&&i.push(t("div",{ref:s,class:"q-slide-item__"+s+" absolute-full row no-wrap items-"+n[1]+" justify-"+n[2]+(void 0!==e[s+"Color"]?" bg-"+e[s+"Color"]:"")},[t("div",{ref:s+"Content"},e.$scopedSlots[s]())]))}),i.push(t("div",{ref:"content",key:"content",staticClass:"q-slide-item__content",directives:s.length>0?Mt(this,"dir#"+s.join(""),function(){var t={prevent:!0,stop:!0,mouse:!0};return s.forEach(function(e){t[e]=!0}),[{name:"touch-pan",value:e.__pan,modifiers:t}]}):null},Ht(this,"default"))),t("div",{staticClass:"q-slide-item q-item-type overflow-hidden q-slide-item--"+this.darkSuffix+" q-"+this.darkSuffix,on:Object.assign({},this.qListeners)},i)},beforeDestroy:function(){clearTimeout(this.timer)}}),yl=i.default.extend({name:"QSpace",mixins:[Nt],render:function(t){return t("div",{staticClass:"q-space",on:Object.assign({},this.qListeners)})}}),Sl=i.default.extend({name:"QSpinnerAudio",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 55 80",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"matrix(1 0 0 -1 0 80)"}},[t("rect",{attrs:{width:"10",height:"20",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"4.3s",values:"20;45;57;80;64;32;66;45;64;23;66;13;64;56;34;34;2;23;76;79;20",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"15",width:"10",height:"80",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"2s",values:"80;55;33;5;75;23;73;33;12;14;60;80",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"30",width:"10",height:"50",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"1.4s",values:"50;34;78;23;56;23;34;76;80;54;21;50",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"45",width:"10",height:"30",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"2s",values:"30;45;13;80;56;72;45;76;34;23;67;30",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),xl=i.default.extend({name:"QSpinnerBall",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 57 57",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(1 1)","stroke-width":"2",fill:"none","fill-rule":"evenodd"}},[t("circle",{attrs:{cx:"5",cy:"50",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",values:"50;5;50;50",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",begin:"0s",dur:"2.2s",values:"5;27;49;5",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"27",cy:"5",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",from:"5",to:"5",values:"5;50;50;5",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",begin:"0s",dur:"2.2s",from:"27",to:"27",values:"27;49;5;27",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"49",cy:"50",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",values:"50;50;5;50",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",from:"49",to:"49",begin:"0s",dur:"2.2s",values:"49;5;27;49",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),wl=i.default.extend({name:"QSpinnerBars",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg"}},[t("rect",{attrs:{y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"30",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"60",width:"15",height:"140",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"90",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"120",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})])])}}),Cl=i.default.extend({name:"QSpinnerBox",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"25",y:"25",width:"50",height:"50",fill:"none","stroke-width":"4",stroke:"currentColor"}},[t("animateTransform",{attrs:{id:"spinnerBox",attributeName:"transform",type:"rotate",from:"0 50 50",to:"180 50 50",dur:"0.5s",begin:"rectBox.end"}})]),t("rect",{attrs:{x:"27",y:"27",width:"46",height:"50",fill:"currentColor"}},[t("animate",{attrs:{id:"rectBox",attributeName:"height",begin:"0s;spinnerBox.end",dur:"1.3s",from:"50",to:"0",fill:"freeze"}})])])}}),kl=i.default.extend({name:"QSpinnerClock",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("circle",{attrs:{cx:"50",cy:"50",r:"48",fill:"none","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor"}}),t("line",{attrs:{"stroke-linecap":"round","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor",x1:"50",y1:"50",x2:"85",y2:"50.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"2s",repeatCount:"indefinite"}})]),t("line",{attrs:{"stroke-linecap":"round","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor",x1:"50",y1:"50",x2:"49.5",y2:"74"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"15s",repeatCount:"indefinite"}})])])}}),ql=i.default.extend({name:"QSpinnerComment",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"0",y:"0",width:"100",height:"100",fill:"none"}}),t("path",{attrs:{d:"M78,19H22c-6.6,0-12,5.4-12,12v31c0,6.6,5.4,12,12,12h37.2c0.4,3,1.8,5.6,3.7,7.6c2.4,2.5,5.1,4.1,9.1,4 c-1.4-2.1-2-7.2-2-10.3c0-0.4,0-0.8,0-1.3h8c6.6,0,12-5.4,12-12V31C90,24.4,84.6,19,78,19z",fill:"currentColor"}}),t("circle",{attrs:{cx:"30",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;1;1",keyTimes:"0;0.2;1",dur:"1s",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"50",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;0;1;1",keyTimes:"0;0.2;0.4;1",dur:"1s",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"70",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;0;1;1",keyTimes:"0;0.4;0.6;1",dur:"1s",repeatCount:"indefinite"}})])])}}),Tl=i.default.extend({name:"QSpinnerCube",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"0",y:"0",width:"100",height:"100",fill:"none"}}),t("g",{attrs:{transform:"translate(25 25)"}},[t("rect",{attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.9"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(75 25)"}},[t("rect",{attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.8"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.1s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(25 75)"}},[t("rect",{staticClass:"cube",attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.7"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.3s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(75 75)"}},[t("rect",{staticClass:"cube",attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.6"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.2s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])])])}}),Ml=i.default.extend({name:"QSpinnerDots",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg"}},[t("circle",{attrs:{cx:"15",cy:"15",r:"15"}},[t("animate",{attrs:{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"60",cy:"15",r:"9","fill-opacity":".3"}},[t("animate",{attrs:{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:".5",to:".5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"105",cy:"15",r:"15"}},[t("animate",{attrs:{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"}})])])}}),$l=i.default.extend({name:"QSpinnerFacebook",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid"}},[t("g",{attrs:{transform:"translate(20 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.6"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])]),t("g",{attrs:{transform:"translate(50 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.8"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0.1s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])]),t("g",{attrs:{transform:"translate(80 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.9"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0.2s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])])])}}),Ll=i.default.extend({name:"QSpinnerGears",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(-20,-20)"}},[t("path",{attrs:{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"90 50 50",to:"0 50 50",dur:"1s",repeatCount:"indefinite"}})])]),t("g",{attrs:{transform:"translate(20,20) rotate(15 50 50)"}},[t("path",{attrs:{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"90 50 50",dur:"1s",repeatCount:"indefinite"}})])])])}}),El=i.default.extend({name:"QSpinnerGrid",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 105 105",xmlns:"http://www.w3.org/2000/svg"}},[t("circle",{attrs:{cx:"12.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0s",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"12.5",cy:"52.5",r:"12.5","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"100ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"300ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"52.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"600ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"800ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"52.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"400ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"12.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"700ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"500ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"200ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})])])}}),Ol=i.default.extend({name:"QSpinnerHearts",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 140 64",xmlns:"http://www.w3.org/2000/svg"}},[t("path",{attrs:{d:"M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.716-6.002 11.47-7.65 17.304-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0s",dur:"1.4s",values:"0.5;1;0.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.593-2.32 17.308 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0.7s",dur:"1.4s",values:"0.5;1;0.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z"}})])}}),Al=i.default.extend({name:"QSpinnerHourglass",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",[t("path",{staticClass:"glass",attrs:{fill:"none",stroke:"currentColor","stroke-width":"5","stroke-miterlimit":"10",d:"M58.4,51.7c-0.9-0.9-1.4-2-1.4-2.3s0.5-0.4,1.4-1.4 C70.8,43.8,79.8,30.5,80,15.5H70H30H20c0.2,15,9.2,28.1,21.6,32.3c0.9,0.9,1.4,1.2,1.4,1.5s-0.5,1.6-1.4,2.5 C29.2,56.1,20.2,69.5,20,85.5h10h40h10C79.8,69.5,70.8,55.9,58.4,51.7z"}}),t("clipPath",{attrs:{id:"uil-hourglass-clip1"}},[t("rect",{staticClass:"clip",attrs:{x:"15",y:"20",width:"70",height:"25"}},[t("animate",{attrs:{attributeName:"height",from:"25",to:"0",dur:"1s",repeatCount:"indefinite",values:"25;0;0",keyTimes:"0;0.5;1"}}),t("animate",{attrs:{attributeName:"y",from:"20",to:"45",dur:"1s",repeatCount:"indefinite",values:"20;45;45",keyTimes:"0;0.5;1"}})])]),t("clipPath",{attrs:{id:"uil-hourglass-clip2"}},[t("rect",{staticClass:"clip",attrs:{x:"15",y:"55",width:"70",height:"25"}},[t("animate",{attrs:{attributeName:"height",from:"0",to:"25",dur:"1s",repeatCount:"indefinite",values:"0;25;25",keyTimes:"0;0.5;1"}}),t("animate",{attrs:{attributeName:"y",from:"80",to:"55",dur:"1s",repeatCount:"indefinite",values:"80;55;55",keyTimes:"0;0.5;1"}})])]),t("path",{staticClass:"sand",attrs:{d:"M29,23c3.1,11.4,11.3,19.5,21,19.5S67.9,34.4,71,23H29z","clip-path":"url(#uil-hourglass-clip1)",fill:"currentColor"}}),t("path",{staticClass:"sand",attrs:{d:"M71.6,78c-3-11.6-11.5-20-21.5-20s-18.5,8.4-21.5,20H71.6z","clip-path":"url(#uil-hourglass-clip2)",fill:"currentColor"}}),t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"180 50 50",repeatCount:"indefinite",dur:"1s",values:"0 50 50;0 50 50;180 50 50",keyTimes:"0;0.7;1"}})])])}}),Bl=i.default.extend({name:"QSpinnerInfinity",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("path",{attrs:{d:"M24.3,30C11.4,30,5,43.3,5,50s6.4,20,19.3,20c19.3,0,32.1-40,51.4-40C88.6,30,95,43.3,95,50s-6.4,20-19.3,20C56.4,70,43.6,30,24.3,30z",fill:"none",stroke:"currentColor","stroke-width":"8","stroke-dasharray":"10.691205342610678 10.691205342610678","stroke-dashoffset":"0"}},[t("animate",{attrs:{attributeName:"stroke-dashoffset",from:"0",to:"21.382410685221355",begin:"0",dur:"2s",repeatCount:"indefinite",fill:"freeze"}})])])}}),Pl=i.default.extend({name:"QSpinnerIos",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,stroke:"currentColor",fill:"currentColor",viewBox:"0 0 64 64"}},[t("g",{attrs:{"stroke-width":"4","stroke-linecap":"round"}},[t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(180)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(210)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(240)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".1;0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(270)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".15;.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(300)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".25;.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(330)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".35;.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(0)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".45;.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(30)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".55;.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(60)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".65;.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(90)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".7;.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(120)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".85;.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(150)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"}})])])])}}),zl=i.default.extend({name:"QSpinnerOrbit",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("circle",{attrs:{cx:"50",cy:"50",r:"44",fill:"none","stroke-width":"4","stroke-opacity":".5",stroke:"currentColor"}}),t("circle",{attrs:{cx:"8",cy:"54",r:"6",fill:"currentColor","stroke-width":"3",stroke:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 48",to:"360 50 52",dur:"2s",repeatCount:"indefinite"}})])])}}),Il=i.default.extend({name:"QSpinnerOval",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(1 1)","stroke-width":"2",fill:"none","fill-rule":"evenodd"}},[t("circle",{attrs:{"stroke-opacity":".5",cx:"18",cy:"18",r:"18"}}),t("path",{attrs:{d:"M36 18c0-9.94-8.06-18-18-18"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"}})])])])}}),Rl=i.default.extend({name:"QSpinnerPie",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("path",{attrs:{d:"M0 50A50 50 0 0 1 50 0L50 50L0 50",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"0.8s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M50 0A50 50 0 0 1 100 50L50 50L50 0",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"1.6s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M100 50A50 50 0 0 1 50 100L50 50L100 50",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"2.4s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M50 100A50 50 0 0 1 0 50L50 50L50 100",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"3.2s",repeatCount:"indefinite"}})])])}}),Fl=i.default.extend({name:"QSpinnerPuff",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 44 44",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{fill:"none","fill-rule":"evenodd","stroke-width":"2"}},[t("circle",{attrs:{cx:"22",cy:"22",r:"1"}},[t("animate",{attrs:{attributeName:"r",begin:"0s",dur:"1.8s",values:"1; 20",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.165, 0.84, 0.44, 1",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"0s",dur:"1.8s",values:"1; 0",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.3, 0.61, 0.355, 1",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"1"}},[t("animate",{attrs:{attributeName:"r",begin:"-0.9s",dur:"1.8s",values:"1; 20",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.165, 0.84, 0.44, 1",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"-0.9s",dur:"1.8s",values:"1; 0",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.3, 0.61, 0.355, 1",repeatCount:"indefinite"}})])])])}}),Dl=i.default.extend({name:"QSpinnerRadio",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"scale(0.55)"}},[t("circle",{attrs:{cx:"30",cy:"150",r:"30",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})]),t("path",{attrs:{d:"M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0.1",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})]),t("path",{attrs:{d:"M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0.2",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})])])])}}),jl=i.default.extend({name:"QSpinnerRings",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{fill:"none","fill-rule":"evenodd",transform:"translate(1 1)","stroke-width":"2"}},[t("circle",{attrs:{cx:"22",cy:"22",r:"6"}},[t("animate",{attrs:{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"6"}},[t("animate",{attrs:{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"8"}},[t("animate",{attrs:{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),Vl=i.default.extend({name:"QSpinnerTail",mixins:[ke],render:function(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:Object.assign({},this.qListeners),attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg"}},[t("defs",[t("linearGradient",{attrs:{x1:"8.042%",y1:"0%",x2:"65.682%",y2:"23.865%",id:"a"}},[t("stop",{attrs:{"stop-color":"currentColor","stop-opacity":"0",offset:"0%"}}),t("stop",{attrs:{"stop-color":"currentColor","stop-opacity":".631",offset:"63.146%"}}),t("stop",{attrs:{"stop-color":"currentColor",offset:"100%"}})])]),t("g",{attrs:{transform:"translate(1 1)",fill:"none","fill-rule":"evenodd"}},[t("path",{attrs:{d:"M36 18c0-9.94-8.06-18-18-18",stroke:"url(#a)","stroke-width":"2"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"0.9s",repeatCount:"indefinite"}})]),t("circle",{attrs:{fill:"currentColor",cx:"36",cy:"18",r:"1"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"0.9s",repeatCount:"indefinite"}})])])])}}),Nl={37:"left",38:"up",39:"right",40:"down"},Hl=i.default.extend({name:"QSplitter",mixins:[ue,Nt],directives:{TouchPan:xs},props:{value:{type:Number,required:!0},reverse:Boolean,unit:{type:String,default:"%",validator:function(t){return["%","px"].includes(t)}},limits:{type:Array,validator:function(t){return 2===t.length&&("number"==typeof t[0]&&"number"==typeof t[1]&&(t[0]>=0&&t[0]<=t[1]))}},emitImmediately:Boolean,horizontal:Boolean,disable:Boolean,tabindex:[String,Number],beforeClass:[Array,String,Object],afterClass:[Array,String,Object],separatorClass:[Array,String,Object],separatorStyle:[Array,String,Object]},watch:{value:{immediate:!0,handler:function(t){this.__normalize(t,this.computedLimits)}},limits:{deep:!0,handler:function(){var t=this;this.$nextTick(function(){t.__normalize(t.value,t.computedLimits)})}}},computed:{classes:function(){return(!0===this.horizontal?"column":"row")+" q-splitter--"+(!0===this.horizontal?"horizontal":"vertical")+" q-splitter--"+(!0===this.disable?"disabled":"workable")+" q-splitter--"+this.darkSuffix},prop:function(){return!0===this.horizontal?"height":"width"},side:function(){return!0!==this.reverse?"before":"after"},computedLimits:function(){return void 0!==this.limits?this.limits:"%"===this.unit?[10,90]:[50,1/0]},styles:function(){var t,e;return(e={})[this.side]=((t={})[this.prop]=this.__getCSSValue(this.value),t),e},separatorDirectives:function(){var t;if(!0!==this.disable)return[{name:"touch-pan",value:this.__pan,modifiers:(t={},t[!0===this.horizontal?"vertical":"horizontal"]=!0,t.prevent=!0,t.stop=!0,t.mouse=!0,t.mouseAllDir=!0,t)}]},separatorAttrs:function(){var t=!0===this.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.tabindex||0},e=this.__getAriaValue(this.value);return Object.assign({},{role:"separator","aria-orientation":!0===this.horizontal?"horizontal":"vertical","aria-controls":this.targetUid,"aria-valuemin":this.computedLimits[0],"aria-valuemax":this.computedLimits[1],"aria-valuenow":e.now,"aria-valuetext":e.text},t)},separatorEvents:function(){return!0===this.disable?void 0:{keydown:this.__panKeydown}}},methods:{__panStart:function(){var t=this.$el.getBoundingClientRect()[this.prop];this.__dir=!0===this.horizontal?"up":"left",this.__maxValue="%"===this.unit?100:t,this.__value=Math.min(this.__maxValue,this.computedLimits[1],Math.max(this.computedLimits[0],this.value)),this.__multiplier=(!0!==this.reverse?1:-1)*(!0===this.horizontal?1:!0===this.$q.lang.rtl?-1:1)*("%"===this.unit?0===t?0:100/t:1),this.$el.classList.add("q-splitter--active")},__panProgress:function(t){this.__normalized=Math.min(this.__maxValue,this.computedLimits[1],Math.max(this.computedLimits[0],t)),this.$refs[this.side].style[this.prop]=this.__getCSSValue(this.__normalized);var e=this.__getAriaValue(this.__normalized);this.$refs.separator.setAttribute("aria-valuenow",e.now),this.$refs.separator.setAttribute("aria-valuetext",e.text),!0===this.emitImmediately&&this.value!==this.__normalized&&this.$emit("input",this.__normalized)},__panEnd:function(){void 0!==this.__panCleanup&&this.__panCleanup(),this.__normalized!==this.value&&this.$emit("input",this.__normalized),this.$el.classList.remove("q-splitter--active")},__pan:function(t){if(!0!==t.isFinal)if(!0!==t.isFirst){var e=this.__value+this.__multiplier*(t.direction===this.__dir?-1:1)*t.distance[!0===this.horizontal?"y":"x"];this.__panProgress(e)}else this.__panStart();else this.__panEnd()},__panKeydown:function(t){var e=this;if(void 0!==this.qListeners.keydown&&this.$emit("keydown",t),!(!0===this.disable||!0===t.defaultPrevented||!0!==this.horizontal&&-1===[37,39].indexOf(t.keyCode)||!0===this.horizontal&&-1===[38,40].indexOf(t.keyCode))){w(t),void 0===this.__panCleanup&&(document.addEventListener("keyup",this.__panEnd),document.addEventListener("focusout",this.__panEnd),this.__panCleanup=function(){e.__panCleanup=void 0,document.removeEventListener("keyup",e.__panEnd),document.removeEventListener("focusout",e.__panEnd),e.__panEnd()},this.__panStart(),this.__normalized=this.__value);var i=Nl[t.keyCode],n=this.__normalized+this.__multiplier*(i===this.__dir?-1:1)*(!0===t.shiftKey?1:10);this.__panProgress(n)}},__normalize:function(t,e){te[1]&&this.$emit("input",e[1])},__getAriaValue:function(t){var e="%"===this.unit?t:Math.round(t);return{now:e,text:Math.round(100*e)/100+this.unit}},__getCSSValue:function(t){return("%"===this.unit?t:Math.round(t))+this.unit}},created:function(){this.targetUid="sp_"+bn()},beforeDestroy:function(){void 0!==this.__panCleanup&&this.__panCleanup()},render:function(t){var e={};e[this.side]={id:this.targetUid};var i=[t("div",{key:"before",ref:"before",staticClass:"q-splitter__panel q-splitter__before"+(!0===this.reverse?" col":""),style:this.styles.before,class:this.beforeClass,attrs:e.before,on:Tt(this,"stop",{input:S})},Ht(this,"before")),t("div",{staticClass:"q-splitter__separator",ref:"separator",style:this.separatorStyle,class:this.separatorClass,attrs:this.separatorAttrs,on:this.separatorEvents},[t("div",{staticClass:"absolute-full q-splitter__separator-area",directives:this.separatorDirectives},Ht(this,"separator"))]),t("div",{key:"after",ref:"after",staticClass:"q-splitter__panel q-splitter__after"+(!0===this.reverse?"":" col"),style:this.styles.after,class:this.afterClass,attrs:e.after,on:Tt(this,"stop",{input:S})},Ht(this,"after"))];return t("div",{staticClass:"q-splitter no-wrap",class:this.classes,on:Object.assign({},this.qListeners)},Wt(i,this,"default"))}}),Ql=i.default.extend({name:"StepHeader",mixins:[Ot],directives:{Ripple:Re},props:{stepper:{},step:{}},computed:{isDisable:function(){var t=this.step.disable;return!0===t||""===t},isActive:function(){return!0!==this.isDisable&&this.stepper.value===this.step.name},isError:function(){var t=this.step.error;return!0===t||""===t},isDone:function(){var t=this.step.done;return!0===t||""===t},headerNav:function(){var t=this.step.headerNav,e=!0===t||""===t||void 0===t;return!1===this.isDisable&&this.stepper.headerNav&&e},hasPrefix:function(){return this.step.prefix&&void 0===this.icon},icon:function(){var t;return t=!0===this.isActive?this.__getProp("activeIcon",this.$q.iconSet.stepper.active):!0===this.isError?this.__getProp("errorIcon",this.$q.iconSet.stepper.error):!0===this.isDone?this.__getProp("doneIcon",this.$q.iconSet.stepper.done):this.step.icon||this.stepper.inactiveIcon,"none"===t?void 0:t},color:function(){return!0===this.isError?this.__getProp("errorColor"):!0===this.isActive?this.__getProp("activeColor"):!1===this.isDisable&&!0===this.isDone?this.__getProp("doneColor"):this.step.color||this.stepper.inactiveColor},classes:function(){return"q-stepper__tab col-grow flex items-center no-wrap relative-position"+(void 0!==this.color?" text-"+this.color:"")+(!0===this.isError?" q-stepper__tab--error q-stepper__tab--error-with-"+(!0===this.hasPrefix?"prefix":"icon"):"")+(!0===this.isActive?" q-stepper__tab--active":"")+(!0===this.isDone?" q-stepper__tab--done":"")+(!0===this.headerNav?" q-stepper__tab--navigation q-focusable q-hoverable":"")+(!0===this.isDisable?" q-stepper__tab--disabled":"")}},methods:{activate:function(){void 0!==this.$refs.blurTarget&&this.$refs.blurTarget.focus(),!1===this.isActive&&this.stepper.goTo(this.step.name)},keyup:function(t){13===t.keyCode&&!1===this.isActive&&this.stepper.goTo(this.step.name)},__getProp:function(t,e){return this.step[t]||this.stepper[t]||e}},render:function(t){var e={class:this.classes};!0===this.stepper.headerNav&&(e.directives=[{name:"ripple",value:this.headerNav}]),!0===this.headerNav&&Object.assign(e,{key:"headnavon",on:Tt(this,"headnavon",{click:this.activate,keyup:this.keyup}),attrs:!0===this.isDisable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.qAttrs.tabindex||0}});var i=[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"}),t("div",{staticClass:"q-stepper__dot row flex-center q-stepper__line relative-position"},[t("span",{staticClass:"row flex-center"},[!0===this.hasPrefix?this.step.prefix:t(ae,{props:{name:this.icon}})])])];if(void 0!==this.step.title&&null!==this.step.title){var n=[t("div",{staticClass:"q-stepper__title"},[this.step.title])];void 0!==this.step.caption&&null!==this.step.caption&&n.push(t("div",{staticClass:"q-stepper__caption"},[this.step.caption])),i.push(t("div",{staticClass:"q-stepper__label q-stepper__line relative-position"},n))}return t("div",e,i)}}),Wl={role:"tabpanel"},Ul=i.default.extend({name:"QStepWrapper",render:function(t){return t("div",{staticClass:"q-stepper__step-content"},[t("div",{staticClass:"q-stepper__step-inner"},Ht(this,"default"))])}}),Yl=i.default.extend({name:"QStep",inject:{stepper:{default:function(){console.error("QStep needs to be child of QStepper")}}},mixins:[Yn],props:{icon:String,color:String,title:{type:String,required:!0},caption:String,prefix:[String,Number],doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String,headerNav:{type:Boolean,default:!0},done:Boolean,error:Boolean},computed:{isActive:function(){return this.stepper.value===this.name},onEvents:function(){return!0!==this.isActive||!0!==this.stepper.vertical||!0!==this.$q.platform.is.ios&&!0===this.$q.platform.is.chrome?Object.assign({},this.qListeners):Object.assign({},this.qListeners,{scroll:this.__keepScroll})}},methods:{__keepScroll:function(t){var e=t.target;e.scrollTop>0&&(e.scrollTop=0),void 0!==this.qListeners.scroll&&this.$emit("scroll",t)}},render:function(t){var e=this.stepper.vertical,i=!0===e&&!0===this.stepper.keepAlive?t("keep-alive",!0===this.isActive?[t(Ul,{key:this.name},Ht(this,"default"))]:void 0):!0!==e||!0===this.isActive?Ul.options.render.call(this,t):void 0;return t("div",{staticClass:"q-stepper__step",attrs:Wl,on:this.onEvents},!0===e?[t(Ql,{props:{stepper:this.stepper,step:this}}),!0===this.stepper.animated?t(Tr,[i]):i]:[i])}}),Kl=i.default.extend({name:"QStepper",provide:function(){return{stepper:this}},mixins:[ue,Un],props:{flat:Boolean,bordered:Boolean,alternativeLabels:Boolean,headerNav:Boolean,contracted:Boolean,headerClass:String,inactiveColor:String,inactiveIcon:String,doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String},computed:{classes:function(){var t=!0===this.dark||null===this.dark&&!1!==this.$q.dark.isActive;return"q-stepper q-stepper--"+(!0===this.vertical?"vertical":"horizontal")+(!0===this.flat||!0===t?" q-stepper--flat no-shadow":"")+(!0===this.bordered||!0===t&&!1===this.flat?" q-stepper--bordered":"")+" q-stepper--"+this.darkSuffix+" q-"+this.darkSuffix},headerClasses:function(){return"q-stepper__header row items-stretch justify-between q-stepper__header--"+(!0===this.alternativeLabels?"alternative":"standard")+"-labels"+(!1===this.flat||!0===this.bordered?" q-stepper__header--border":"")+(!0===this.contracted?" q-stepper__header--contracted":"")+(void 0!==this.headerClass?" "+this.headerClass:"")}},methods:{__getContent:function(t){var e=this,i=Ht(this,"message",[]);if(!0===this.vertical){this.__isValidPanelName(this.value)&&this.__updatePanelIndex();var n=t("div",{key:"stop",staticClass:"q-stepper__content",on:Tt(this,"stop",{input:S})},Ht(this,"default"));return void 0===i?[n]:i.concat(n)}return[t("div",{class:this.headerClasses},this.panels.map(function(i){var n=i.componentOptions.propsData;return t(Ql,{key:n.name,props:{stepper:e,step:n}})}))].concat(i,t("div",{staticClass:"q-stepper__content q-panel-parent",directives:this.panelDirectives},this.__getPanelContent(t)))},__renderPanels:function(t){return t("div",{class:this.classes,on:Object.assign({},this.qListeners)},Wt(this.__getContent(t),this,"navigation"))}}}),Gl=i.default.extend({name:"QStepperNavigation",mixins:[Nt],render:function(t){return t("div",{staticClass:"q-stepper__nav",on:Object.assign({},this.qListeners)},Ht(this,"default"))}}),Xl=i.default.extend({name:"QTh",mixins:[Nt],props:{props:Object,autoWidth:Boolean},render:function(t){var e,i,n=this,s=Object.assign({},this.qListeners);if(void 0===this.props)return t("th",{on:s,class:!0===this.autoWidth?"q-table--col-auto-width":null},Ht(this,"default"));var o=this.$vnode.key;if(o){if(void 0===(e=this.props.colsMap[o]))return}else e=this.props.col;if(!0===e.sortable){var r="right"===e.align?"unshift":"push";(i=Qt(this,"default",[]))[r](t(ae,{props:{name:this.$q.iconSet.table.arrowUp},staticClass:e.__iconClass}))}else i=Ht(this,"default");var a=!0===e.sortable?{click:function(t){n.props.sort(e),n.$emit("click",t)}}:{};return t("th",{on:Object.assign({},s,a),style:e.headerStyle,class:e.__thClass+(!0===this.autoWidth?" q-table--col-auto-width":"")},i)}}),Zl={computed:{headerSelectedValue:function(){return!0===this.someRowsSelected?null:this.allRowsSelected}},methods:{__getTHead:function(t){var e=this.__getTHeadTR(t);return!0===this.loading&&void 0===this.$scopedSlots.loading&&e.push(t("tr",{staticClass:"q-table__progress"},[t("th",{staticClass:"relative-position",attrs:{colspan:this.computedColspan}},this.__getProgress(t))])),t("thead",e)},__getTHeadTR:function(t){var e=this,i=this.$scopedSlots.header,n=this.$scopedSlots["header-cell"];if(void 0!==i)return i(this.__getHeaderScope({header:!0})).slice();var s=this.computedCols.map(function(i){var s=e.$scopedSlots["header-cell-"+i.name],o=void 0!==s?s:n,r=e.__getHeaderScope({col:i});return void 0!==o?o(r):t(Xl,{key:i.name,props:{props:r}},i.label)});if(!0===this.singleSelection&&!0!==this.grid)s.unshift(t("th",{staticClass:"q-table--col-auto-width"},[" "]));else if(!0===this.multipleSelection){var o=this.$scopedSlots["header-selection"],r=void 0!==o?o(this.__getHeaderScope({})):[t(ss,{key:"inp",props:{color:this.color,value:this.headerSelectedValue,dark:this.dark,dense:this.dense},on:Tt(this,"inp",{input:this.__onMultipleSelectionSet})})];s.unshift(t("th",{staticClass:"q-table--col-auto-width"},r))}return[t("tr",{style:this.tableHeaderStyle,class:this.tableHeaderClass},s)]},__getHeaderScope:function(t){var e=this;return Object.assign(t,{cols:this.computedCols,sort:this.sort,colsMap:this.computedColsMap,color:this.color,dark:this.dark,dense:this.dense}),!0===this.multipleSelection&&($s(t,"selected",function(){return e.headerSelectedValue},this.__onMultipleSelectionSet),t.partialSelected=this.someRowsSelected,t.multipleSelect=!0),t},__onMultipleSelectionSet:function(t){!0===this.someRowsSelected&&(t=!1),this.__updateSelection(this.computedRows.map(this.getRowKey),this.computedRows,t)}}},Jl={methods:{__getTBodyTR:function(t,e,i,n){var s=this,o=this.getRowKey(e),r=this.isRowSelected(o);if(void 0!==i)return i(this.__getBodyScope({key:o,row:e,pageIndex:n,__trClass:r?"selected":""}));var a=this.$scopedSlots["body-cell"],l=this.computedCols.map(function(i){var r=s.$scopedSlots["body-cell-"+i.name],l=void 0!==r?r:a;return void 0!==l?l(s.__getBodyCellScope({key:o,row:e,pageIndex:n,col:i})):t("td",{class:i.__tdClass(e),style:i.__tdStyle(e)},s.getCellValue(i,e))});if(!0===this.hasSelectionMode){var c=this.$scopedSlots["body-selection"],u=void 0!==c?c(this.__getBodySelectionScope({key:o,row:e,pageIndex:n})):[t(ss,{props:{value:r,color:this.color,dark:this.dark,dense:this.dense},on:{input:function(t,i){s.__updateSelection([o],[e],t,i)}}})];l.unshift(t("td",{staticClass:"q-table--col-auto-width"},u))}var h={key:o,class:{selected:r},on:{}};return void 0!==this.qListeners["row-click"]&&(h.class["cursor-pointer"]=!0,h.on.click=function(t){s.$emit("row-click",t,e,n)}),void 0!==this.qListeners["row-dblclick"]&&(h.class["cursor-pointer"]=!0,h.on.dblclick=function(t){s.$emit("row-dblclick",t,e,n)}),void 0!==this.qListeners["row-contextmenu"]&&(h.class["cursor-pointer"]=!0,h.on.contextmenu=function(t){s.$emit("row-contextmenu",t,e,n)}),t("tr",h,l)},__getTBody:function(t){var e=this,i=this.$scopedSlots.body,n=this.$scopedSlots["top-row"],s=this.$scopedSlots["bottom-row"],o=this.computedRows.map(function(n,s){return e.__getTBodyTR(t,n,i,s)});return void 0!==n&&(o=n({cols:this.computedCols}).concat(o)),void 0!==s&&(o=o.concat(s({cols:this.computedCols}))),t("tbody",o)},__getVirtualTBodyTR:function(t){var e=this,i=this.$scopedSlots.body;return function(n){return e.__getTBodyTR(t,n.item,i,n.index)}},__getBodyScope:function(t){var e=this;return this.__injectBodyCommonScope(t),t.cols=t.cols.map(function(i){return $s(Object.assign({},i),"value",function(){return e.getCellValue(i,t.row)})}),t},__getBodyCellScope:function(t){var e=this;return this.__injectBodyCommonScope(t),$s(t,"value",function(){return e.getCellValue(t.col,t.row)})},__getBodySelectionScope:function(t){return this.__injectBodyCommonScope(t),t},__injectBodyCommonScope:function(t){var e=this;Object.assign(t,{cols:this.computedCols,colsMap:this.computedColsMap,sort:this.sort,rowIndex:this.firstRowIndex+t.pageIndex,color:this.color,dark:this.dark,dense:this.dense}),!0===this.hasSelectionMode&&$s(t,"selected",function(){return e.isRowSelected(t.key)},function(i,n){e.__updateSelection([t.key],[t.row],i,n)}),$s(t,"expand",function(){return e.isRowExpanded(t.key)},function(i){e.__updateExpanded(t.key,i)})},getCellValue:function(t,e){var i="function"==typeof t.field?t.field(e):e[t.field];return void 0!==t.format?t.format(i,e):i}}},tc="q-table__bottom row items-center",ec={props:{hideBottom:Boolean,hideSelectedBanner:Boolean,hideNoData:Boolean,hidePagination:Boolean},computed:{navIcon:function(){var t=[this.iconFirstPage||this.$q.iconSet.table.firstPage,this.iconPrevPage||this.$q.iconSet.table.prevPage,this.iconNextPage||this.$q.iconSet.table.nextPage,this.iconLastPage||this.$q.iconSet.table.lastPage];return!0===this.$q.lang.rtl?t.reverse():t}},methods:{__getBottomDiv:function(t){if(!0!==this.hideBottom){if(!0===this.nothingToDisplay){if(!0===this.hideNoData)return;var e=!0===this.loading?this.loadingLabel||this.$q.lang.table.loading:this.filter?this.noResultsLabel||this.$q.lang.table.noResults:this.noDataLabel||this.$q.lang.table.noData,i=this.$scopedSlots["no-data"],n=void 0!==i?[i({message:e,icon:this.$q.iconSet.table.warning,filter:this.filter})]:[t(ae,{staticClass:"q-table__bottom-nodata-icon",props:{name:this.$q.iconSet.table.warning}}),e];return t("div",{staticClass:tc+" q-table__bottom--nodata"},n)}var s=this.$scopedSlots.bottom;if(void 0!==s)return t("div",{staticClass:tc},[s(this.marginalsScope)]);var o=!0!==this.hideSelectedBanner&&!0===this.hasSelectionMode&&this.rowsSelectedNumber>0?[t("div",{staticClass:"q-table__control"},[t("div",[(this.selectedRowsLabel||this.$q.lang.table.selectedRecords)(this.rowsSelectedNumber)])])]:[];return!0!==this.hidePagination?t("div",{staticClass:tc+" justify-end"},this.__getPaginationDiv(t,o)):o.length>0?t("div",{staticClass:tc},o):void 0}},__getPaginationDiv:function(t,e){var i,n=this,s=this.computedPagination.rowsPerPage,o=this.paginationLabel||this.$q.lang.table.pagination,r=this.$scopedSlots.pagination,a=this.rowsPerPageOptions.length>1;if(e.push(t("div",{staticClass:"q-table__separator col"})),!0===a&&e.push(t("div",{staticClass:"q-table__control"},[t("span",{staticClass:"q-table__bottom-item"},[this.rowsPerPageLabel||this.$q.lang.table.recordsPerPage]),t(pl,{key:"pgSize",staticClass:"q-table__select inline q-table__bottom-item",props:{color:this.color,value:s,options:this.computedRowsPerPageOptions,displayValue:0===s?this.$q.lang.table.allRows:s,dark:this.dark,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0},on:Tt(this,"pgSize",{input:function(t){n.setPagination({page:1,rowsPerPage:t.value})}})})])),void 0!==r)i=r(this.marginalsScope);else if(i=[t("span",0!==s?{staticClass:"q-table__bottom-item"}:{},[s?o(this.firstRowIndex+1,Math.min(this.lastRowIndex,this.computedRowsNumber),this.computedRowsNumber):o(1,this.filteredSortedRowsNumber,this.computedRowsNumber)])],0!==s&&this.pagesNumber>1){var l={color:this.color,round:!0,dense:!0,flat:!0};!0===this.dense&&(l.size="sm"),this.pagesNumber>2&&i.push(t(Xe,{key:"pgFirst",props:Object.assign({},l,{icon:this.navIcon[0],disable:this.isFirstPage}),on:Tt(this,"pgFirst",{click:this.firstPage})})),i.push(t(Xe,{key:"pgPrev",props:Object.assign({},l,{icon:this.navIcon[1],disable:this.isFirstPage}),on:Tt(this,"pgPrev",{click:this.prevPage})}),t(Xe,{key:"pgNext",props:Object.assign({},l,{icon:this.navIcon[2],disable:this.isLastPage}),on:Tt(this,"pgNext",{click:this.nextPage})})),this.pagesNumber>2&&i.push(t(Xe,{key:"pgLast",props:Object.assign({},l,{icon:this.navIcon[3],disable:this.isLastPage}),on:Tt(this,"pgLast",{click:this.lastPage})}))}return e.push(t("div",{staticClass:"q-table__control"},i)),e}}},ic={methods:{__getGridHeader:function(t){return t("div",{staticClass:"q-table__middle"},!0===this.gridHeader?[t("table",{staticClass:"q-table"},[this.__getTHead(t)])]:!0===this.loading&&void 0===this.$scopedSlots.loading?this.__getProgress(t):void 0)},__getGridBody:function(t){var e=this,i=void 0!==this.$scopedSlots.item?this.$scopedSlots.item:function(i){var n=i.cols.map(function(e){return t("div",{staticClass:"q-table__grid-item-row"},[t("div",{staticClass:"q-table__grid-item-title"},[e.label]),t("div",{staticClass:"q-table__grid-item-value"},[e.value])])});if(!0===e.hasSelectionMode){var s=e.$scopedSlots["body-selection"],o=void 0!==s?s(i):[t(ss,{props:{value:i.selected,color:e.color,dark:e.dark,dense:e.dense},on:{input:function(t,n){e.__updateSelection([i.key],[i.row],t,n)}}})];n.unshift(t("div",{staticClass:"q-table__grid-item-row"},o),t(Lr,{props:{dark:e.dark}}))}var r={staticClass:"q-table__grid-item-card"+e.cardDefaultClass,class:e.cardClass,style:e.cardStyle,on:{}};return void 0===e.qListeners["row-click"]&&void 0===e.qListeners["row-dblclick"]||(r.staticClass+=" cursor-pointer"),void 0!==e.qListeners["row-click"]&&(r.on.click=function(t){e.$emit("row-click",t,i.row,i.pageIndex)}),void 0!==e.qListeners["row-dblclick"]&&(r.on.dblclick=function(t){e.$emit("row-dblclick",t,i.row,i.pageIndex)}),t("div",{staticClass:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3",class:!0===i.selected?"q-table__grid-item--selected":""},[t("div",r,n)])};return t("div",{staticClass:"q-table__grid-content row",class:this.cardContainerClass,style:this.cardContainerStyle},this.computedRows.map(function(t,n){return i(e.__getBodyScope({key:e.getRowKey(t),row:t,pageIndex:n}))}))}}};function nc(t,e,i){return t("div",Object.assign({},e,{staticClass:"q-table__middle"+(void 0!==e.staticClass?" "+e.staticClass:"")}),[t("table",{staticClass:"q-table"},i)])}var sc={list:cr,table:ka},oc=i.default.extend({name:"QVirtualScroll",mixins:[Ot,Nt,dl],props:{type:{type:String,default:"list",validator:function(t){return["list","table","__qtable"].includes(t)}},items:{type:Array,default:function(){return[]}},itemsFn:Function,itemsSize:Number,scrollTarget:{default:void 0}},computed:{virtualScrollLength:function(){return this.itemsSize>=0&&void 0!==this.itemsFn?parseInt(this.itemsSize,10):Array.isArray(this.items)?this.items.length:0},virtualScrollScope:function(){var t=this;if(0===this.virtualScrollLength)return[];var e=function(e,i){return{index:t.virtualScrollSliceRange.from+i,item:e}};return void 0===this.itemsFn?this.items.slice(this.virtualScrollSliceRange.from,this.virtualScrollSliceRange.to).map(e):this.itemsFn(this.virtualScrollSliceRange.from,this.virtualScrollSliceRange.to-this.virtualScrollSliceRange.from).map(e)},classes:function(){return"q-virtual-scroll q-virtual-scroll"+(!0===this.virtualScrollHorizontal?"--horizontal":"--vertical")+(void 0!==this.scrollTarget?"":" scroll")},attrs:function(){return void 0!==this.scrollTarget?void 0:{tabindex:0}}},watch:{virtualScrollLength:function(){this.__resetVirtualScroll()},scrollTarget:function(){this.__unconfigureScrollTarget(),this.__configureScrollTarget()}},methods:{__getVirtualScrollEl:function(){return this.$el},__getVirtualScrollTarget:function(){return this.__scrollTarget},__configureScrollTarget:function(){this.__scrollTarget=Ri(this.$el,this.scrollTarget),this.__scrollTarget.addEventListener("scroll",this.__onVirtualScrollEvt,d.passive)},__unconfigureScrollTarget:function(){void 0!==this.__scrollTarget&&(this.__scrollTarget.removeEventListener("scroll",this.__onVirtualScrollEvt,d.passive),this.__scrollTarget=void 0)}},beforeMount:function(){this.__resetVirtualScroll()},mounted:function(){this.__configureScrollTarget()},activated:function(){this.__configureScrollTarget()},deactivated:function(){this.__unconfigureScrollTarget()},beforeDestroy:function(){this.__unconfigureScrollTarget()},render:function(t){if(void 0!==this.$scopedSlots.default){var e=this.__padVirtualScroll(t,"list"===this.type?"div":"tbody",this.virtualScrollScope.map(this.$scopedSlots.default));return void 0!==this.$scopedSlots.before&&(e=this.$scopedSlots.before().concat(e)),e=Wt(e,this,"after"),"__qtable"===this.type?nc(t,{staticClass:this.classes},e):t(sc[this.type],{class:this.classes,attrs:this.attrs,props:this.qAttrs,on:Object.assign({},this.qListeners)},e)}console.error("QVirtualScroll: default scoped slot is required for rendering",this)}});var rc={props:{sortMethod:{type:Function,default:function(t,e,i){var n=this.colList.find(function(t){return t.name===e});if(void 0===n||void 0===n.field)return t;var s=!0===i?-1:1,o="function"==typeof n.field?function(t){return n.field(t)}:function(t){return t[n.field]};return t.sort(function(t,e){var i,r=o(t),a=o(e);return null===r||void 0===r?-1*s:null===a||void 0===a?1*s:void 0!==n.sort?n.sort(r,a,t,e)*s:!0===Pn(r)&&!0===Pn(a)?(r-a)*s:!0===An(r)&&!0===An(a)?function(t,e){return new Date(t)-new Date(e)}(r,a)*s:"boolean"==typeof r&&"boolean"==typeof a?(r-a)*s:(r=(i=[r,a].map(function(t){return(t+"").toLocaleString().toLowerCase()}))[0])<(a=i[1])?-1*s:r===a?0:s})}},columnSortOrder:{type:String,validator:function(t){return"ad"===t||"da"===t},default:"ad"}},computed:{columnToSort:function(){var t=this.computedPagination.sortBy;if(t)return this.colList.find(function(e){return e.name===t})||null}},methods:{sort:function(t){var e=this.columnSortOrder;if(!0===On(t))t.sortOrder&&(e=t.sortOrder),t=t.name;else{var i=this.colList.find(function(e){return e.name===t});void 0!==i&&i.sortOrder&&(e=i.sortOrder)}var n=this.computedPagination,s=n.sortBy,o=n.descending;s!==t?(s=t,o="da"===e):!0===this.binaryStateSort?o=!o:!0===o?"ad"===e?s=null:o=!1:"ad"===e?o=!0:s=null,this.setPagination({sortBy:s,descending:o,page:1})}}},ac={props:{filter:[String,Object],filterMethod:{type:Function,default:function(t,e,i,n){void 0===i&&(i=this.computedCols),void 0===n&&(n=this.getCellValue);var s=e?e.toLowerCase():"";return t.filter(function(t){return i.some(function(e){var i=n(e,t)+"";return-1!==("undefined"===i||"null"===i?"":i.toLowerCase()).indexOf(s)})})}}},watch:{filter:{handler:function(){var t=this;this.$nextTick(function(){t.setPagination({page:1},!0)})},deep:!0}}};function lc(t){return t.page<1&&(t.page=1),void 0!==t.rowsPerPage&&t.rowsPerPage<1&&(t.rowsPerPage=0),t}var cc={props:{pagination:Object,rowsPerPageOptions:{type:Array,default:function(){return[5,7,10,15,20,25,50,0]}}},computed:{computedPagination:function(){return lc(void 0!==this.qListeners["update:pagination"]?Object.assign({},this.innerPagination,this.pagination):this.innerPagination)},firstRowIndex:function(){var t=this.computedPagination;return(t.page-1)*t.rowsPerPage},lastRowIndex:function(){var t=this.computedPagination;return t.page*t.rowsPerPage},isFirstPage:function(){return 1===this.computedPagination.page},pagesNumber:function(){return 0===this.computedPagination.rowsPerPage?1:Math.max(1,Math.ceil(this.computedRowsNumber/this.computedPagination.rowsPerPage))},isLastPage:function(){return 0===this.lastRowIndex||this.computedPagination.page>=this.pagesNumber},computedRowsPerPageOptions:function(){var t=this;return(this.rowsPerPageOptions.includes(this.innerPagination.rowsPerPage)?this.rowsPerPageOptions:[this.innerPagination.rowsPerPage].concat(this.rowsPerPageOptions)).map(function(e){return{label:0===e?t.$q.lang.table.allRows:""+e,value:e}})}},watch:{pagesNumber:function(t,e){if(t!==e){var i=this.computedPagination.page;t&&!i?this.setPagination({page:1}):t1&&this.setPagination({page:t-1})},nextPage:function(){var t=this.computedPagination,e=t.page,i=t.rowsPerPage;this.lastRowIndex>0&&e*i0&&this.computedRows.every(function(e){return!0===t.selectedKeys[t.getRowKey(e)]})},someRowsSelected:function(){var t=this;return!0!==this.allRowsSelected&&this.computedRows.some(function(e){return!0===t.selectedKeys[t.getRowKey(e)]})},rowsSelectedNumber:function(){return this.selected.length}},methods:{isRowSelected:function(t){return!0===this.selectedKeys[t]},clearSelection:function(){this.$emit("update:selected",[])},__updateSelection:function(t,e,i,n){var s=this;this.$emit("selection",{rows:e,added:i,keys:t,evt:n});var o=!0===this.singleSelection?!0===i?e:[]:!0===i?this.selected.concat(e):this.selected.filter(function(e){return!1===t.includes(s.getRowKey(e))});this.$emit("update:selected",o)}}};function hc(t){return Array.isArray(t)?t.slice():[]}var dc={props:{expanded:Array},data:function(){return{innerExpanded:hc(this.expanded)}},watch:{expanded:function(t){this.innerExpanded=hc(t)}},methods:{isRowExpanded:function(t){return this.innerExpanded.includes(t)},setExpanded:function(t){void 0!==this.expanded?this.$emit("update:expanded",t):this.innerExpanded=t},__updateExpanded:function(t,e){var i=this.innerExpanded.slice(),n=i.indexOf(t);!0===e?-1===n&&(i.push(t),this.setExpanded(i)):-1!==n&&(i.splice(n,1),this.setExpanded(i))}}},fc={props:{visibleColumns:Array},computed:{colList:function(){if(void 0!==this.columns)return this.columns;var t=this.data[0];return void 0!==t?Object.keys(t).map(function(e){return{name:e,label:e.toUpperCase(),field:e,align:Pn(t[e])?"right":"left",sortable:!0}}):[]},computedCols:function(){var t=this,e=this.computedPagination,i=e.sortBy,n=e.descending;return(void 0!==this.visibleColumns?this.colList.filter(function(e){return!0===e.required||!0===t.visibleColumns.includes(e.name)}):this.colList).map(function(t){var e=t.align||"right",s="text-"+e;return Object.assign({},t,{align:e,__iconClass:"q-table__sort-icon q-table__sort-icon--"+e,__thClass:s+(void 0!==t.headerClasses?" "+t.headerClasses:"")+(!0===t.sortable?" sortable":"")+(t.name===i?" sorted "+(!0===n?"sort-desc":""):""),__tdStyle:void 0!==t.style?"function"!=typeof t.style?function(){return t.style}:t.style:function(){return null},__tdClass:void 0!==t.classes?"function"!=typeof t.classes?function(){return s+" "+t.classes}:function(e){return s+" "+t.classes(e)}:function(){return s}})})},computedColsMap:function(){var t={};return this.computedCols.forEach(function(e){t[e.name]=e}),t},computedColspan:function(){return void 0!==this.tableColspan?this.tableColspan:this.computedCols.length+(!0===this.hasSelectionMode?1:0)}}},pc={};hl.forEach(function(t){pc[t]={}});var mc=i.default.extend({name:"QTable",mixins:[ue,Nt,Gn,{computed:{marginalsScope:function(){return{pagination:this.computedPagination,pagesNumber:this.pagesNumber,isFirstPage:this.isFirstPage,isLastPage:this.isLastPage,firstPage:this.firstPage,prevPage:this.prevPage,nextPage:this.nextPage,lastPage:this.lastPage,inFullscreen:this.inFullscreen,toggleFullscreen:this.toggleFullscreen}}},methods:{__getTopDiv:function(t){var e,i=this.$scopedSlots.top,n=this.$scopedSlots["top-left"],s=this.$scopedSlots["top-right"],o=this.$scopedSlots["top-selection"],r=!0===this.hasSelectionMode&&void 0!==o&&this.rowsSelectedNumber>0,a="q-table__top relative-position row items-center";return void 0!==i?t("div",{staticClass:a},[i(this.marginalsScope)]):(!0===r?e=o(this.marginalsScope).slice():(e=[],void 0!==n?e.push(t("div",{staticClass:"q-table-control"},[n(this.marginalsScope)])):this.title&&e.push(t("div",{staticClass:"q-table__control"},[t("div",{staticClass:"q-table__title",class:this.titleClass},this.title)]))),void 0!==s&&(e.push(t("div",{staticClass:"q-table__separator col"})),e.push(t("div",{staticClass:"q-table__control"},[s(this.marginalsScope)]))),0!==e.length?t("div",{staticClass:a},e):void 0)}}},Zl,Jl,ec,ic,rc,ac,cc,uc,dc,fc],props:Object.assign({},{data:{type:Array,default:function(){return[]}},rowKey:{type:[String,Function],default:"id"},columns:Array,loading:Boolean,binaryStateSort:Boolean,iconFirstPage:String,iconPrevPage:String,iconNextPage:String,iconLastPage:String,title:String,hideHeader:Boolean,grid:Boolean,gridHeader:Boolean,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:function(t){return["horizontal","vertical","cell","none"].includes(t)}},wrapCells:Boolean,virtualScroll:Boolean},pc,{noDataLabel:String,noResultsLabel:String,loadingLabel:String,selectedRowsLabel:Function,rowsPerPageLabel:String,paginationLabel:Function,color:{type:String,default:"grey-8"},titleClass:[String,Array,Object],tableStyle:[String,Array,Object],tableClass:[String,Array,Object],tableHeaderStyle:[String,Array,Object],tableHeaderClass:[String,Array,Object],cardContainerClass:[String,Array,Object],cardContainerStyle:[String,Array,Object],cardStyle:[String,Array,Object],cardClass:[String,Array,Object]}),data:function(){return{innerPagination:Object.assign({sortBy:null,descending:!1,page:1,rowsPerPage:this.rowsPerPageOptions.length>0?this.rowsPerPageOptions[0]:5},this.pagination)}},watch:{needsReset:function(){!0===this.hasVirtScroll&&void 0!==this.$refs.virtScroll&&this.$refs.virtScroll.reset()}},computed:{getRowKey:function(){var t=this;return"function"==typeof this.rowKey?this.rowKey:function(e){return e[t.rowKey]}},hasVirtScroll:function(){return!0!==this.grid&&!0===this.virtualScroll},needsReset:function(){var t=this;return["tableStyle","tableClass","tableHeaderStyle","tableHeaderClass","__containerClass"].map(function(e){return t[e]}).join(";")},filteredSortedRows:function(){var t=this.data;if(!0===this.isServerSide||0===t.length)return t;var e=this.computedPagination,i=e.sortBy,n=e.descending;return this.filter&&(t=this.filterMethod(t,this.filter,this.computedCols,this.getCellValue)),void 0!==this.columnToSort&&(t=this.sortMethod(this.data===t?t.slice():t,i,n)),t},filteredSortedRowsNumber:function(){return this.filteredSortedRows.length},computedRows:function(){var t=this.filteredSortedRows;return!0===this.isServerSide?t:(0!==this.computedPagination.rowsPerPage&&(0===this.firstRowIndex&&this.data!==t?t.length>this.lastRowIndex&&(t=t.slice(0,this.lastRowIndex)):t=t.slice(this.firstRowIndex,this.lastRowIndex)),t)},computedRowsNumber:function(){return!0===this.isServerSide?this.computedPagination.rowsNumber||0:this.filteredSortedRowsNumber},nothingToDisplay:function(){return 0===this.computedRows.length},isServerSide:function(){return void 0!==this.computedPagination.rowsNumber},cardDefaultClass:function(){return" q-table__card q-table__card--"+this.darkSuffix+" q-"+this.darkSuffix+(!0===this.square?" q-table--square":"")+(!0===this.flat?" q-table--flat":"")+(!0===this.bordered?" q-table--bordered":"")},__containerClass:function(){return"q-table__container q-table--"+this.separator+"-separator column no-wrap"+(!0===this.grid?" q-table--grid":this.cardDefaultClass)+" q-table--"+this.darkSuffix+(!0===this.dense?" q-table--dense":"")+(!1===this.wrapCells?" q-table--no-wrap":"")+(!0===this.inFullscreen?" fullscreen scroll":"")},containerClass:function(){return this.__containerClass+(!0===this.loading?" q-table--loading":"")},virtProps:function(){var t=this,e={};return hl.forEach(function(i){e[i]=t[i]}),void 0===e.virtualScrollItemSize&&(e.virtualScrollItemSize=!0===this.dense?28:48),e}},render:function(t){var e=[this.__getTopDiv(t)],i={staticClass:this.containerClass};return!0===this.grid?e.push(this.__getGridHeader(t)):Object.assign(i,{class:this.cardClass,style:this.cardStyle}),e.push(this.__getBody(t),this.__getBottomDiv(t)),!0===this.loading&&void 0!==this.$scopedSlots.loading&&e.push(this.$scopedSlots.loading()),t("div",i,e)},methods:{requestServerInteraction:function(t){var e=this;void 0===t&&(t={}),this.$nextTick(function(){e.$emit("request",{pagination:t.pagination||e.computedPagination,filter:t.filter||e.filter,getCellValue:e.getCellValue})})},resetVirtualScroll:function(){!0===this.hasVirtScroll&&this.$refs.virtScroll.reset()},__getBody:function(t){var e=this;if(!0===this.grid)return this.__getGridBody(t);var i=!0!==this.hideHeader?this.__getTHead(t):null;if(!0===this.hasVirtScroll){var n=this.$scopedSlots["top-row"],s=this.$scopedSlots["bottom-row"],o={default:this.__getVirtualTBodyTR(t)};if(void 0!==n){var r=t("tbody",n({cols:this.computedCols}));o.before=null===i?function(){return[r]}:function(){return[i].concat(r)}}else null!==i&&(o.before=function(){return i});return void 0!==s&&(o.after=function(){return t("tbody",s({cols:e.computedCols}))}),t(oc,{key:"vs",ref:"virtScroll",props:Object.assign({},this.virtProps,{items:this.computedRows,type:"__qtable",tableColspan:this.computedColspan}),on:Tt(this,"vs",{"virtual-scroll":this.__onVScroll}),class:this.tableClass,style:this.tableStyle,scopedSlots:o})}return nc(t,{staticClass:"scroll",class:this.tableClass,style:this.tableStyle},[i,this.__getTBody(t)])},scrollTo:function(t,e){if(void 0===this.$refs.virtScroll){t=parseInt(t,10);var i=this.$el.querySelector("tbody tr:nth-of-type("+(t+1)+")");if(null!==i){var n=this.$el.querySelector(".q-table__middle.scroll"),s=i.offsetTop-this.virtualScrollStickySizeStart,o=s12?t.hour-12:t.hour),minute:null===t.minute?"--":kt(t.minute),second:null===t.second?"--":kt(t.second)}},defaultDateModel:function(){return this.__getDefaultDateModel()},computedFormat24h:function(){return null!==this.format24h?this.format24h:this.$q.lang.date.format24h},pointerStyle:function(){var t="Hour"===this.view,e=!0===t?12:60,i=this.innerModel[this.view.toLowerCase()],n="rotate("+(Math.round(i*(360/e))-180)+"deg) translateX(-50%)";return!0===t&&!0===this.computedFormat24h&&this.innerModel.hour>=12&&(n+=" scale(.7)"),{transform:n}},minLink:function(){return null!==this.innerModel.hour},secLink:function(){return!0===this.minLink&&null!==this.innerModel.minute},hourInSelection:function(){var t=this;return void 0!==this.hourOptions?function(e){return t.hourOptions.includes(e)}:void 0!==this.options?function(e){return t.options(e,null,null)}:void 0},minuteInSelection:function(){var t=this;return void 0!==this.minuteOptions?function(e){return t.minuteOptions.includes(e)}:void 0!==this.options?function(e){return t.options(t.innerModel.hour,e,null)}:void 0},secondInSelection:function(){var t=this;return void 0!==this.secondOptions?function(e){return t.secondOptions.includes(e)}:void 0!==this.options?function(e){return t.options(t.innerModel.hour,t.innerModel.minute,e)}:void 0},validHours:function(){if(void 0!==this.hourInSelection){var t=this.__getValidValues(0,11,this.hourInSelection),e=this.__getValidValues(12,11,this.hourInSelection);return{am:t,pm:e,values:t.values.concat(e.values)}}},validMinutes:function(){if(void 0!==this.minuteInSelection)return this.__getValidValues(0,59,this.minuteInSelection)},validSeconds:function(){if(void 0!==this.secondInSelection)return this.__getValidValues(0,59,this.secondInSelection)},viewValidOptions:function(){switch(this.view){case"Hour":return this.validHours;case"Minute":return this.validMinutes;case"Second":return this.validSeconds}},positions:function(){var t,e,i=0,n=1,s=void 0!==this.viewValidOptions?this.viewValidOptions.values:void 0;"Hour"===this.view?!0===this.computedFormat24h?(t=0,e=23):(t=0,e=11,!1===this.isAM&&(i=12)):(t=0,e=55,n=5);for(var o=[],r=t,a=t;r<=e;r+=n,a++){var l=r+i,c=void 0!==s&&!1===s.includes(l),u="Hour"===this.view&&0===r?!0===this.computedFormat24h?"00":"12":r;o.push({val:l,index:a,disable:c,label:u})}return o}},methods:{setNow:function(){var t=xo(this.__updateValue(Object.assign({},this.__getCurrentDate(),this.__getCurrentTime())),this.computedMask,this.computedLocale,this.calendar,this.defaultDateModel);this.innerModel=t,this.isAM=t.hour<12,this.__goToView("Hour")},__getValidValues:function(t,e,i){var n=Array.apply(null,{length:e+1}).map(function(e,n){var s=n+t;return{index:s,val:!0===i(s)}}).filter(function(t){return!0===t.val}).map(function(t){return t.index});return{min:n[0],max:n[n.length-1],values:n,threshold:e+1}},__getWheelDist:function(t,e,i){var n=Math.abs(t-e);return Math.min(n,i-n)},__getNormalizedClockValue:function(t,e){var i=e.min,n=e.max,s=e.values,o=e.threshold;if(t===i)return i;if(tn)return this.__getWheelDist(t,i,o)<=this.__getWheelDist(t,n,o)?i:n;var r=s.findIndex(function(e){return t<=e}),a=s[r-1],l=s[r];return t-a<=l-t?a:l},__getMask:function(){return"persian"!==this.calendar&&null!==this.mask?this.mask:"HH:mm"+(!0===this.withSeconds?":ss":"")},__getDefaultDateModel:function(){if("string"!=typeof this.defaultDate){var t=this.__getCurrentDate(!0);return t.dateHash=this.__getDayHash(t),t}return xo(this.defaultDate,"YYYY/MM/DD",void 0,this.calendar)},__click:function(t){!0!==this.__shouldAbortInteraction()&&(!0!==this.$q.platform.is.desktop&&this.__updateClock(t,this.__getClockRect()),this.__goToNextView())},__activate:function(t){!0!==this.__shouldAbortInteraction()&&this.__updateClock(t,this.__getClockRect())},__shouldAbortInteraction:function(){return!0===this._isBeingDestroyed||!0===this._isDestroyed||void 0!==this.viewValidOptions&&(0===this.viewValidOptions.values.length||"Hour"===this.view&&!0!==this.computedFormat24h&&0===this.validHours[!0===this.isAM?"am":"pm"].values.length)},__getClockRect:function(){var t=this.$refs.clock.getBoundingClientRect(),e=t.top,i=t.left,n=t.width/2;return{top:e+n,left:i+n,dist:.7*n}},__goToView:function(t){this.view!==t&&(this.view=t),void 0!==this.$refs[t]&&this.$refs[t]!==document.activeElement&&this.$refs[t].focus()},__goToNextView:function(){"Hour"===this.view?this.__goToView("Minute"):this.withSeconds&&"Minute"===this.view?this.__goToView("Second"):this.__updateValue(void 0,!0)},__drag:function(t){!0!==this.__shouldAbortInteraction()&&(!0===t.isFinal?(this.draggingClockRect=!1,this.dragCache=null,this.__goToNextView()):!0===t.isFirst?(this.draggingClockRect=this.__getClockRect(),this.dragCache=this.__updateClock(t.evt,this.draggingClockRect)):this.dragCache=this.__updateClock(t.evt,this.draggingClockRect,this.dragCache))},__updateClock:function(t,e,i){var n,s=v(t),o=Math.abs(s.top-e.top),r=Math.sqrt(Math.pow(Math.abs(s.top-e.top),2)+Math.pow(Math.abs(s.left-e.left),2)),a=Math.asin(o/r)*(180/Math.PI);if(a=s.top0&&this.validHours.pm.values.length>0?r>=e.dist:this.validHours.am.values.length>0;n=this.__getNormalizedClockValue(n+(!0===l?0:12),this.validHours[!0===l?"am":"pm"])}else n=Math.round(n),!0===this.computedFormat24h?r-1}},duration:Number,noConnectors:Boolean,noTransition:Boolean,noNodesLabel:String,noResultsLabel:String},computed:{classes:function(){return"q-tree q-tree--"+(!0===this.dense?"dense":"standard")+(!0===this.noConnectors?" q-tree--no-connectors":"")+" q-tree--"+this.darkSuffix+(void 0!==this.color?" text-"+this.color:"")},hasSelection:function(){return void 0!==this.selected},computedIcon:function(){return this.icon||this.$q.iconSet.tree.icon},computedControlColor:function(){return this.controlColor||this.color},textColorClass:function(){if(void 0!==this.textColor)return"text-"+this.textColor},selectedColorClass:function(){var t=this.selectedColor||this.color;if(t)return"text-"+t},meta:function(){var t=this,e=this.metaMap;e.clear();var i=function(n,s){var o=n.tickStrategy||(s?s.tickStrategy:t.tickStrategy),r=n[t.nodeKey],a=n[t.childrenKey]&&n[t.childrenKey].length>0,l=!0!==n.disabled&&!0===t.hasSelection&&!1!==n.selectable,c=!0!==n.disabled&&!1!==n.expandable,u="none"!==o,h="strict"===o,d="leaf-filtered"===o,f="leaf"===o||"leaf-filtered"===o,p=!0!==n.disabled&&!1!==n.tickable;!0===f&&!0===p&&s&&!0!==s.tickable&&(p=!1);var m=n.lazy;!0===m&&void 0!==t.lazy[r]&&!0===Array.isArray(n[t.childrenKey])&&(m=t.lazy[r]);var v={key:r,parent:s,isParent:a,lazy:m,disabled:n.disabled,link:!0!==n.disabled&&(!0===l||!0===c&&(!0===a||!0===m)),children:[],matchesFilter:!t.filter||t.filterMethod(n,t.filter),selected:r===t.selected&&!0===l,selectable:l,expanded:!0===a&&t.innerExpanded.includes(r),expandable:c,noTick:!0===n.noTick||!0!==h&&m&&"loaded"!==m,tickable:p,tickStrategy:o,hasTicking:u,strictTicking:h,leafFilteredTicking:d,leafTicking:f,ticked:!0===h?t.innerTicked.includes(r):!0!==a&&t.innerTicked.includes(r)};if(!0===v.expanded&&!0!==t.renderedMap.has(r)&&t.renderedMap.set(r,!0),e.set(r,v),!0===a&&(v.children=n[t.childrenKey].map(function(t){return i(t,v)}),t.filter&&(!0!==v.matchesFilter?v.matchesFilter=v.children.some(function(t){return t.matchesFilter}):!0!==v.noTick&&!0!==v.disabled&&!0===v.tickable&&!0===d&&!0===v.children.every(function(t){return!0!==t.matchesFilter||!0===t.noTick||!0!==t.tickable})&&(v.tickable=!1)),!0===v.matchesFilter&&(!0!==v.noTick&&!0!==h&&!0===v.children.every(function(t){return t.noTick})&&(v.noTick=!0),f))){if(v.ticked=!1,v.indeterminate=v.children.some(function(t){return!0===t.indeterminate}),v.tickable=!0===v.tickable&&v.children.some(function(t){return t.tickable}),!0!==v.indeterminate){var g=v.children.reduce(function(t,e){return!0===e.ticked?t+1:t},0);g===v.children.length?v.ticked=!0:g>0&&(v.indeterminate=!0)}!0===v.indeterminate&&(v.indeterminateNextState=v.children.every(function(t){return!0!==t.tickable||!0!==t.ticked}))}return v};return this.nodes.forEach(function(t){return i(t,null)}),e}},data:function(){return{lazy:{},innerTicked:this.ticked||[],innerExpanded:this.expanded||[]}},watch:{ticked:function(t){this.innerTicked=t},expanded:function(t){this.innerExpanded=t}},methods:{getNodeByKey:function(t){var e=this,i=[].reduce,n=function(s,o){return s||!o?s:!0===Array.isArray(o)?i.call(Object(o),n,s):o[e.nodeKey]===t?o:o[e.childrenKey]?n(null,o[e.childrenKey]):void 0};return n(null,this.nodes)},getTickedNodes:function(){var t=this;return this.innerTicked.map(function(e){return t.getNodeByKey(e)})},getExpandedNodes:function(){var t=this;return this.innerExpanded.map(function(e){return t.getNodeByKey(e)})},isExpanded:function(t){var e=this.meta.get(t);return void 0!==e&&e.expanded},collapseAll:function(){void 0!==this.expanded?this.$emit("update:expanded",[]):this.innerExpanded=[]},expandAll:function(){var t=this,e=this.innerExpanded,i=function(n){n[t.childrenKey]&&n[t.childrenKey].length>0&&!1!==n.expandable&&!0!==n.disabled&&(e.push(n[t.nodeKey]),n[t.childrenKey].forEach(i))};this.nodes.forEach(i),void 0!==this.expanded?this.$emit("update:expanded",e):this.innerExpanded=e},setExpanded:function(t,e,i,n){var s=this;if(void 0===i&&(i=this.getNodeByKey(t)),void 0===n&&(n=this.meta.get(t)),n.lazy&&"loaded"!==n.lazy){if("loading"===n.lazy)return;this.$set(this.lazy,t,"loading"),!0!==Array.isArray(i[this.childrenKey])&&this.$set(i,this.childrenKey,[]),this.$emit("lazy-load",{node:i,key:t,done:function(e){s.lazy[t]="loaded",s.$set(i,s.childrenKey,!0===Array.isArray(e)?e:[]),s.$nextTick(function(){var e=s.meta.get(t);void 0!==e&&!0===e.isParent&&s.__setExpanded(t,!0)})},fail:function(){s.$delete(s.lazy,t),0===i[s.childrenKey].length&&s.$delete(i,s.childrenKey)}})}else!0===n.isParent&&!0===n.expandable&&this.__setExpanded(t,e)},__setExpanded:function(t,e){var i=this,n=this.innerExpanded,s=void 0!==this.expanded;if(!0===s&&(n=n.slice()),e){if(this.accordion){var o=this.meta.get(t);if(void 0!==o){var r=[];o.parent?o.parent.children.forEach(function(e){e.key!==t&&!0===e.expandable&&r.push(e.key)}):this.nodes.forEach(function(e){var n=e[i.nodeKey];n!==t&&r.push(n)}),r.length>0&&(n=n.filter(function(t){return!1===r.includes(t)}))}}n=n.concat([t]).filter(function(t,e,i){return i.indexOf(t)===e})}else n=n.filter(function(e){return e!==t});!0===s?this.$emit("update:expanded",n):this.innerExpanded=n},isTicked:function(t){var e=this.meta.get(t);return void 0!==e&&e.ticked},setTicked:function(t,e){var i=this.innerTicked,n=void 0!==this.ticked;!0===n&&(i=i.slice()),i=e?i.concat(t).filter(function(t,e,i){return i.indexOf(t)===e}):i.filter(function(e){return!1===t.includes(e)}),!0===n&&this.$emit("update:ticked",i)},__getSlotScope:function(t,e,i){var n=this,s={tree:this,node:t,key:i,color:this.color,dark:this.dark};return $s(s,"expanded",function(){return e.expanded},function(t){t!==e.expanded&&n.setExpanded(i,t)}),$s(s,"ticked",function(){return e.ticked},function(t){t!==e.ticked&&n.setTicked([i],t)}),s},__getChildren:function(t,e){var i=this;return(this.filter?e.filter(function(t){return i.meta.get(t[i.nodeKey]).matchesFilter}):e).map(function(e){return i.__getNode(t,e)})},__getNodeMedia:function(t,e){if(void 0!==e.icon)return t(ae,{staticClass:"q-tree__icon q-mr-sm",props:{name:e.icon,color:e.iconColor}});var i=e.img||e.avatar;return i?t("img",{staticClass:"q-tree__"+(e.img?"img":"avatar")+" q-mr-sm",attrs:{src:i}}):void 0},__getNode:function(t,e){var i=this,n=e[this.nodeKey],s=this.meta.get(n),o=e.header&&this.$scopedSlots["header-"+e.header]||this.$scopedSlots["default-header"],r=!0===s.isParent?this.__getChildren(t,e[this.childrenKey]):[],a=r.length>0||s.lazy&&"loaded"!==s.lazy,l=e.body&&this.$scopedSlots["body-"+e.body]||this.$scopedSlots["default-body"],c=void 0!==o||void 0!==l?this.__getSlotScope(e,s,n):null;void 0!==l&&(l=t("div",{staticClass:"q-tree__node-body relative-position"},[t("div",{class:this.textColorClass},[l(c)])]));var u=function(){return t("div",{staticClass:"q-tree__node-collapsible",class:i.textColorClass,directives:[{name:"show",value:s.expanded}]},!0===i.renderedMap.has(n)?[l,t("div",{staticClass:"q-tree__children",class:{"q-tree__node--disabled":s.disabled}},r)]:void 0)};return t("div",{key:n,staticClass:"q-tree__node relative-position",class:{"q-tree__node--parent":a,"q-tree__node--child":!0!==a}},[t("div",{staticClass:"q-tree__node-header relative-position row no-wrap items-center",class:{"q-tree__node--link q-hoverable q-focusable":s.link,"q-tree__node--selected":s.selected,"q-tree__node--disabled":s.disabled},attrs:{tabindex:s.link?0:-1},on:{click:function(t){i.__onClick(e,s,t)},keypress:function(t){!0!==Ae(t)&&(13===t.keyCode?i.__onClick(e,s,t,!0):32===t.keyCode&&i.__onExpandClick(e,s,t,!0))}}},[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget_"+s.key}),"loading"===s.lazy?t(qe,{staticClass:"q-tree__spinner",props:{color:this.computedControlColor}}):!0===a?t(ae,{staticClass:"q-tree__arrow",class:{"q-tree__arrow--rotate":s.expanded},props:{name:this.computedIcon},on:{click:function(t){i.__onExpandClick(e,s,t)}}}):null,!0===s.hasTicking&&!0!==s.noTick?t(ss,{staticClass:"q-tree__tickbox",props:{value:!0===s.indeterminate?null:s.ticked,color:this.computedControlColor,dark:this.dark,dense:!0,keepColor:!0,disable:!0!==s.tickable},on:{keydown:w,input:function(t){i.__onTickedClick(s,t)}}}):null,t("div",{staticClass:"q-tree__node-header-content col row no-wrap items-center",class:s.selected?this.selectedColorClass:this.textColorClass},[o?o(c):[this.__getNodeMedia(t,e),t("div",e[this.labelKey])]])]),!0===a?!0===this.noTransition?u():t(Tr,{key:"slide",props:{duration:this.duration},on:Tt(this,"slide",{show:function(){i.$emit("after-show")},hide:function(){i.$emit("after-hide")}})},[u()]):!0===this.renderedMap.has(n)?l:void 0])},__blur:function(t){var e=this.$refs["blurTarget_"+t];void 0!==e&&e.focus()},__onClick:function(t,e,i,n){!0!==n&&this.__blur(e.key),this.hasSelection&&e.selectable?!1===this.noSelectionUnset?this.$emit("update:selected",e.key!==this.selected?e.key:null):e.key!==this.selected&&this.$emit("update:selected",void 0===e.key?null:e.key):this.__onExpandClick(t,e,i,n),"function"==typeof t.handler&&t.handler(t)},__onExpandClick:function(t,e,i,n){void 0!==i&&w(i),!0!==n&&this.__blur(e.key),this.setExpanded(e.key,!0!==e.expanded,t,e)},__onTickedClick:function(t,e){if(!0===t.indeterminate&&(e=t.indeterminateNextState),t.strictTicking)this.setTicked([t.key],e);else if(t.leafTicking){var i=[],n=function(t){t.isParent?(!0!==e&&!0!==t.noTick&&!0===t.tickable&&i.push(t.key),!0===t.leafTicking&&t.children.forEach(n)):!0===t.noTick||!0!==t.tickable||!0===t.leafFilteredTicking&&!0!==t.matchesFilter||i.push(t.key)};n(t),this.setTicked(i,e)}}},render:function(t){var e=this.__getChildren(t,this.nodes);return t("div",{class:this.classes},0===e.length?this.filter?this.noResultsLabel||this.$q.lang.tree.noResults:this.noNodesLabel||this.$q.lang.tree.noNodes:e)},created:function(){this.renderedMap=new Map,this.metaMap=new Map,!0===this.defaultExpandAll&&this.expandAll()},beforeDestroy:function(){this.renderedMap.clear(),this.renderedMap=void 0,this.metaMap.clear(),this.metaMap=void 0}}),Mc=i.default.extend({name:"QUploaderBase",mixins:[ue,Kr],props:{label:String,color:String,textColor:String,square:Boolean,flat:Boolean,bordered:Boolean,noThumbnails:Boolean,autoUpload:Boolean,hideUploadBtn:Boolean,disable:Boolean,readonly:Boolean},provide:function(){return{__qUploaderGetInput:this.__getInputControl}},data:function(){return{files:[],queuedFiles:[],uploadedFiles:[],dnd:!1,expanded:!1,uploadSize:0,uploadedSize:0}},watch:{isUploading:function(t,e){!1===e&&!0===t?this.$emit("start"):!0===e&&!1===t&&this.$emit("finish")}},computed:{canUpload:function(){return!0===this.editable&&!0!==this.isBusy&&!0!==this.isUploading&&this.queuedFiles.length>0},canAddFiles:function(){return!0===this.editable&&!0!==this.isUploading&&(!0===this.multiple||0===this.queuedFiles.length)&&(void 0===this.maxFiles||this.files.length0&&(this.files=n,void 0!==e&&e(i),this.$emit("removed",i.files))}},removeFile:function(t){this.disable||("uploaded"===t.__status?this.uploadedFiles=this.uploadedFiles.filter(function(e){return e.__key!==t.__key}):"uploading"===t.__status?t.__abort():this.uploadSize-=t.size,this.files=this.files.filter(function(e){return e.__key!==t.__key||(void 0!==e.__img&&window.URL.revokeObjectURL(e.__img.src),!1)}),this.queuedFiles=this.queuedFiles.filter(function(e){return e.__key!==t.__key}),this.$emit("removed",[t]))},__revokeImgURLs:function(){this.files.forEach(function(t){void 0!==t.__img&&window.URL.revokeObjectURL(t.__img.src)})},__getFileInput:function(){return this.$refs.input||this.$el.getElementsByClassName("q-uploader__input")[0]},__getProgressLabel:function(t){return(100*t).toFixed(2)+"%"},__updateFile:function(t,e,i){if(t.__status=e,"idle"===e)return t.__uploaded=0,t.__progress=0,t.__sizeLabel=St(t.size),void(t.__progressLabel="0.00%");"failed"!==e?(t.__uploaded="uploaded"===e?t.size:i,t.__progress="uploaded"===e?1:Math.min(.9999,t.__uploaded/t.size),t.__progressLabel=this.__getProgressLabel(t.__progress),this.$forceUpdate()):this.$forceUpdate()},__addFiles:function(t,e){var i=this,n=this.__processFiles(t,e,this.files,!0),s=this.__getFileInput();void 0!==s&&(s.value=""),void 0!==n&&(n.forEach(function(t){if(i.__updateFile(t,"idle"),i.uploadSize+=t.size,!0!==i.noThumbnails&&t.type.toUpperCase().startsWith("IMAGE")){var e=new Image;e.src=window.URL.createObjectURL(t),t.__img=e}}),this.files=this.files.concat(n),this.queuedFiles=this.queuedFiles.concat(n),this.$emit("added",n),!0===this.autoUpload&&this.upload())},__getBtn:function(t,e,i,n){if(!0===e)return t(Xe,{props:{type:"a",icon:this.$q.iconSet.uploader[i],flat:!0,dense:!0},on:{click:"add"===i?this.pickFiles:n}},"add"===i?this.__getInputControl(t):null)},__getInputControl:function(t){return[t("input",{key:"input",ref:"input",staticClass:"q-uploader__input overflow-hidden absolute-full",attrs:Object.assign({},{tabindex:-1,type:"file",title:"",accept:this.accept,capture:this.capture},!0===this.multiple?{multiple:!0}:{}),on:Tt(this,"input",{mousedown:S,click:this.pickFiles,change:this.__addFiles})})]},__getHeader:function(t){return void 0!==this.$scopedSlots.header?this.$scopedSlots.header(this):[t("div",{staticClass:"q-uploader__header-content column"},[t("div",{staticClass:"flex flex-center no-wrap q-gutter-xs"},[this.__getBtn(t,this.queuedFiles.length>0,"removeQueue",this.removeQueuedFiles),this.__getBtn(t,this.uploadedFiles.length>0,"removeUploaded",this.removeUploadedFiles),!0===this.isUploading?t(qe,{staticClass:"q-uploader__spinner"}):null,t("div",{staticClass:"col column justify-center"},[void 0!==this.label?t("div",{staticClass:"q-uploader__title"},[this.label]):null,t("div",{staticClass:"q-uploader__subtitle"},[this.uploadSizeLabel+" / "+this.uploadProgressLabel])]),this.__getBtn(t,this.canAddFiles,"add",this.pickFiles),this.__getBtn(t,!1===this.hideUploadBtn&&!0===this.canUpload,"upload",this.upload),this.__getBtn(t,this.isUploading,"clear",this.abort)])])]},__getList:function(t){var e=this;return void 0!==this.$scopedSlots.list?this.$scopedSlots.list(this):this.files.map(function(i){return t("div",{key:i.__key,staticClass:"q-uploader__file relative-position",class:{"q-uploader__file--img":!0!==e.noThumbnails&&void 0!==i.__img,"q-uploader__file--failed":"failed"===i.__status,"q-uploader__file--uploaded":"uploaded"===i.__status},style:!0!==e.noThumbnails&&void 0!==i.__img?{backgroundImage:'url("'+i.__img.src+'")'}:null},[t("div",{staticClass:"q-uploader__file-header row flex-center no-wrap"},["failed"===i.__status?t(ae,{staticClass:"q-uploader__file-status",props:{name:e.$q.iconSet.type.negative,color:"negative"}}):null,t("div",{staticClass:"q-uploader__file-header-content col"},[t("div",{staticClass:"q-uploader__title"},[i.name]),t("div",{staticClass:"q-uploader__subtitle row items-center no-wrap"},[i.__sizeLabel+" / "+i.__progressLabel])]),"uploading"===i.__status?t(ls,{props:{value:i.__progress,min:0,max:1,indeterminate:0===i.__progress}}):t(Xe,{props:{round:!0,dense:!0,flat:!0,icon:e.$q.iconSet.uploader["uploaded"===i.__status?"done":"clear"]},on:{click:function(){e.removeFile(i)}}})])])})}},beforeDestroy:function(){!0===this.isUploading&&this.abort(),this.files.length>0&&this.__revokeImgURLs()},render:function(t){var e,i=[t("div",{staticClass:"q-uploader__header",class:this.colorClass},this.__getHeader(t)),t("div",{staticClass:"q-uploader__list scroll"},this.__getList(t)),this.__getDnd(t,"uploader")];return!0===this.isBusy&&i.push(t("div",{staticClass:"q-uploader__overlay absolute-full flex flex-center"},[t(qe)])),t("div",{key:"drag",staticClass:"q-uploader column no-wrap",class:(e={},e["q-uploader--"+this.darkSuffix+" q-"+this.darkSuffix]=!0,e["q-uploader--bordered"]=this.bordered,e["q-uploader--square no-border-radius"]=this.square,e["q-uploader--flat no-shadow"]=this.flat,e["disabled q-uploader--disabled"]=this.disable,e["q-uploader--dnd"]=this.dnd,e),on:!0===this.canAddFiles?Tt(this,"drag",{dragover:this.__onDragOver,dragleave:this.__onDragLeave}):null},i)}});function $c(t){return"function"==typeof t?t:function(){return t}}var Lc={props:{url:[Function,String],method:{type:[Function,String],default:"POST"},fieldName:{type:[Function,String],default:function(t){return t.name}},headers:[Function,Array],formFields:[Function,Array],withCredentials:[Function,Boolean],sendRaw:[Function,Boolean],batch:[Function,Boolean],factory:Function},data:function(){return{xhrs:[],promises:[],workingThreads:0}},computed:{xhrProps:function(){return{url:$c(this.url),method:$c(this.method),headers:$c(this.headers),formFields:$c(this.formFields),fieldName:$c(this.fieldName),withCredentials:$c(this.withCredentials),sendRaw:$c(this.sendRaw),batch:$c(this.batch)}},isUploading:function(){return this.workingThreads>0},isBusy:function(){return this.promises.length>0}},methods:{abort:function(){this.xhrs.forEach(function(t){t.abort()}),this.promises.length>0&&(this.abortPromises=!0)},upload:function(){var t=this;if(!1!==this.canUpload){var e=this.queuedFiles.slice(0);this.queuedFiles=[],this.xhrProps.batch(e)?this.__runFactory(e):e.forEach(function(e){t.__runFactory([e])})}},__runFactory:function(t){var e=this;if(this.workingThreads++,"function"==typeof this.factory){var i=this.factory(t);if(i)if("function"==typeof i.catch&&"function"==typeof i.then){this.promises.push(i);var n=function(n){!0!==e._isBeingDestroyed&&!0!==e._isDestroyed&&(e.promises=e.promises.filter(function(t){return t!==i}),0===e.promises.length&&(e.abortPromises=!1),e.queuedFiles=e.queuedFiles.concat(t),t.forEach(function(t){e.__updateFile(t,"failed")}),e.$emit("factory-failed",n,t),e.workingThreads--)};i.then(function(s){!0===e.abortPromises?n(new Error("Aborted")):!0!==e._isBeingDestroyed&&!0!==e._isDestroyed&&(e.promises=e.promises.filter(function(t){return t!==i}),e.__uploadFiles(t,s))}).catch(n)}else this.__uploadFiles(t,i||{});else this.$emit("factory-failed",new Error("QUploader: factory() does not return properly"),t),this.workingThreads--}else this.__uploadFiles(t,{})},__uploadFiles:function(t,e){var i=this,n=new FormData,s=new XMLHttpRequest,o=function(t,n){return void 0!==e[t]?$c(e[t])(n):i.xhrProps[t](n)},r=o("url",t);if(!r)return console.error("q-uploader: invalid or no URL specified"),void this.workingThreads--;var a=o("formFields",t);void 0!==a&&a.forEach(function(t){n.append(t.name,t.value)});var l,c=0,u=0,h=0,d=0;s.upload.addEventListener("progress",function(e){if(!0!==l){var n=Math.min(d,e.loaded);i.uploadedSize+=n-h;for(var s=(h=n)-u,o=c;s>0&&or.size))return void i.__updateFile(r,"uploading",s);s-=r.size,c++,u+=r.size,i.__updateFile(r,"uploading",r.size)}}},!1),s.onreadystatechange=function(){s.readyState<4||(s.status&&s.status<400?(i.uploadedFiles=i.uploadedFiles.concat(t),t.forEach(function(t){i.__updateFile(t,"uploaded")}),i.$emit("uploaded",{files:t,xhr:s})):(l=!0,i.uploadedSize-=h,i.queuedFiles=i.queuedFiles.concat(t),t.forEach(function(t){i.__updateFile(t,"failed")}),i.$emit("failed",{files:t,xhr:s})),i.workingThreads--,i.xhrs=i.xhrs.filter(function(t){return t!==s}))},s.open(o("method",t),r),!0===o("withCredentials",t)&&(s.withCredentials=!0);var f=o("headers",t);void 0!==f&&f.forEach(function(t){s.setRequestHeader(t.name,t.value)});var p=o("sendRaw",t);t.forEach(function(t){i.__updateFile(t,"uploading",0),!0!==p&&n.append(o("fieldName",t),t,t.name),t.xhr=s,t.__abort=function(){s.abort()},d+=t.size}),this.$emit("uploading",{files:t,xhr:s}),this.xhrs.push(s),!0===p?s.send(new Blob(t)):s.send(n)}}},Ec=i.default.extend({name:"QUploader",mixins:[Mc,Lc]}),Oc=i.default.extend({name:"QUploaderAddTrigger",inject:{__qUploaderGetInput:{default:function(){console.error("QUploaderAddTrigger needs to be child of QUploader")}}},render:function(t){return this.__qUploaderGetInput(t)}}),Ac=i.default.extend({name:"QVideo",mixins:[ea,Nt],props:{src:{type:String,required:!0},title:String,fetchpriority:{type:String,default:"auto"},loading:{type:String,default:"eager"},referrerpolicy:{type:String,default:"strict-origin-when-cross-origin"}},computed:{iframeData:function(){return{attrs:{src:this.src,frameborder:"0",title:this.title,allowfullscreen:!0,fetchpriority:this.fetchpriority,loading:this.loading,referrerpolicy:this.referrerpolicy}}},classes:function(){return"q-video"+(void 0!==this.ratio?" q-video--responsive":"")}},render:function(t){return t("div",{class:this.classes,style:this.ratioStyle,on:Object.assign({},this.qListeners)},[t("iframe",this.iframeData)])}}),Bc=Object.freeze({__proto__:null,QAjaxBar:Rt,QAvatar:le,QBadge:ce,QBanner:de,QBar:pe,QBreadcrumbs:be,QBreadcrumbsEl:Ce,QBtn:Xe,QBtnDropdown:Sn,QBtnGroup:ii,QBtnToggle:Cn,QCard:kn,QCardSection:qn,QCardActions:Tn,QCarousel:Xn,QCarouselSlide:Zn,QCarouselControl:Jn,QChatMessage:ts,QCheckbox:ss,QChip:os,QCircularProgress:ls,QColor:Fs,QDate:No,QDialog:nr,QDrawer:or,QEditor:kr,QExpansionItem:Ar,QFab:Rr,QFabAction:jr,QField:Wr,QFile:Xr,QFooter:Zr,QForm:Jr,QHeader:ta,QIcon:ae,QImg:ia,QInfiniteScroll:sa,QInnerLoading:oa,QInput:fa,QIntersection:_a,QList:cr,QItem:ur,QItemSection:hr,QItemLabel:qr,QKnob:ya,QLayout:Ca,QMarkupTable:ka,QMenu:fn,QNoSsr:qa,QOptionGroup:Ea,QPage:Oa,QPageContainer:Aa,QPageScroller:Pa,QPageSticky:Ba,QPagination:Ia,QParallax:Da,QPopupEdit:Va,QPopupProxy:Na,QLinearProgress:Qa,QPullToRefresh:Wa,QRadio:Ta,QRange:Ga,QRating:Xa,QResizeObserver:Ms,QResponsive:Za,QScrollArea:il,QScrollObserver:wa,QSelect:pl,QSeparator:Lr,QSkeleton:gl,QSlideItem:bl,QSlideTransition:Tr,QSlider:qs,QSpace:yl,QSpinner:qe,QSpinnerAudio:Sl,QSpinnerBall:xl,QSpinnerBars:wl,QSpinnerBox:Cl,QSpinnerClock:kl,QSpinnerComment:ql,QSpinnerCube:Tl,QSpinnerDots:Ml,QSpinnerFacebook:$l,QSpinnerGears:Ll,QSpinnerGrid:El,QSpinnerHearts:Ol,QSpinnerHourglass:Al,QSpinnerInfinity:Bl,QSpinnerIos:Pl,QSpinnerOrbit:zl,QSpinnerOval:Il,QSpinnerPie:Rl,QSpinnerPuff:Fl,QSpinnerRadio:Dl,QSpinnerRings:jl,QSpinnerTail:Vl,QSplitter:Hl,QStep:Yl,QStepper:Kl,QStepperNavigation:Gl,QTabPanels:Ps,QTabPanel:Is,QTable:mc,QTh:Xl,QTr:vc,QTd:gc,QTabs:Os,QTab:Bs,QRouteTab:_c,QTime:yc,QTimeline:Sc,QTimelineEntry:xc,QToggle:Ma,QToolbar:Cc,QToolbarTitle:kc,QTooltip:ar,QTree:Tc,QUploader:Ec,QUploaderBase:Mc,QUploaderAddTrigger:Oc,QVideo:Ac,QVirtualScroll:oc});function Pc(t){if(!1===t)return 0;if(!0===t||void 0===t)return 1;var e=parseInt(t,10);return isNaN(e)?0:e}function zc(t){var e=t.__qclosepopup;void 0!==e&&(t.removeEventListener("click",e.handler),t.removeEventListener("keyup",e.handlerKey),delete t.__qclosepopup)}var Ic={name:"close-popup",bind:function(t,e,i){var n=e.value;void 0!==t.__qclosepopup&&(zc(t),t.__qclosepopup_destroyed=!0);var s={depth:Pc(n),handler:function(t){0!==s.depth&&setTimeout(function(){!function(t,e,i){for(;0!==i&&void 0!==t;){if(void 0!==t.__renderPortal){if(i--,"QMenu"===t.$options.name){t=wi(t,e);continue}t.hide(e)}t=t.$parent}}(i.componentInstance||i.context,t,s.depth)})},handlerKey:function(t){!0===Be(t,13)&&s.handler(t)}};t.__qclosepopup=s,t.addEventListener("click",s.handler),t.addEventListener("keyup",s.handlerKey)},update:function(t,e){var i=e.value,n=e.oldValue;void 0!==t.__qclosepopup&&n!==i&&(t.__qclosepopup.depth=Pc(i))},unbind:function(t){void 0===t.__qclosepopup_destroyed?zc(t):delete t.__qclosepopup_destroyed}};function Rc(t){var e=t.__qgoback;void 0!==e&&(t.removeEventListener("click",e.goBack),t.removeEventListener("keyup",e.goBackKey),delete t.__qgoback)}var Fc={name:"go-back",bind:function(t,e,i){var n=e.modifiers,s=e.value;void 0!==t.__qgoback&&(Rc(t),t.__qgoback_destroyed=!0);var o={value:s,position:window.history.length-1,single:n.single,goBack:function(){var t=i.context.$router;!0===o.single?t.go(-1):!0===u.is.nativeMobile?t.go(o.position-window.history.length):t.replace(o.value)},goBackKey:function(t){!0===Be(t,13)&&o.goBack()}};t.__qgoback=o,t.addEventListener("click",o.goBack),t.addEventListener("keyup",o.goBackKey)},update:function(t,e){var i=e.modifiers,n=e.value,s=e.oldValue,o=t.__qgoback;void 0!==o&&(o.single!==i.single&&(o.single=i.single),s!==n&&(o.value=n))},unbind:function(t){void 0===t.__qgoback_destroyed?Rc(t):delete t.__qgoback_destroyed}},Dc=0,jc=void 0;function Vc(t,e){void 0===jc&&((jc=document.createElement("div")).style.cssText="position: absolute; left: 0; top: 0",document.body.appendChild(jc));var i=t.getBoundingClientRect(),n=jc.getBoundingClientRect(),s=window.getComputedStyle(t),o=s.marginLeft,r=s.marginRight,a=s.marginTop,l=s.marginBottom,c=parseInt(o,10)+parseInt(r,10),u=parseInt(a,10)+parseInt(l,10);return{left:i.left-n.left,top:i.top-n.top,width:i.right-i.left,height:i.bottom-i.top,widthM:i.right-i.left+(!0===e?0:c),heightM:i.bottom-i.top+(!0===e?0:u),marginH:!0===e?c:0,marginV:!0===e?u:0}}function Nc(t){return{width:t.scrollWidth,height:t.scrollHeight}}var Hc=["Top","Right","Bottom","Left"],Qc=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],Wc=/-block|-inline|block-|inline-/,Uc=/(-block|-inline|block-|inline-).*:/;function Yc(t,e){for(var i=window.getComputedStyle(t),n={},s=0;s-1){for(var c=o.replace("border",""),u="",h=0;hi&&(e===t||!0===Kc.includes(s))&&(i=r),e=e.parentNode}return i}function Xc(t){return t&&t.ownerDocument===document&&null!==t.parentNode}function Zc(t){var e,i=function(){return!1},n=!1,s=!0,o={from:(e=t).from,to:void 0!==e.to?e.to:e.from},r=function(t){return"number"==typeof t?t={duration:t}:"function"==typeof t&&(t={onEnd:t}),Object.assign({},t,{waitFor:void 0===t.waitFor?0:t.waitFor,duration:!0===isNaN(t.duration)?300:parseInt(t.duration,10),easing:"string"==typeof t.easing&&t.easing.length>0?t.easing:"ease-in-out",delay:!0===isNaN(t.delay)?0:parseInt(t.delay,10),fill:"string"==typeof t.fill&&t.fill.length>0?t.fill:"none",resize:!0===t.resize,useCSS:!0===t.useCSS||!0===t.usecss,hideFromClone:!0===t.hideFromClone||!0===t.hidefromclone,keepToClone:!0===t.keepToClone||!0===t.keeptoclone,tween:!0===t.tween,tweenFromOpacity:!0===isNaN(t.tweenFromOpacity)?.6:parseFloat(t.tweenFromOpacity),tweenToOpacity:!0===isNaN(t.tweenToOpacity)?.5:parseFloat(t.tweenToOpacity)})}(t),a=Le(o.from);if(!0!==Xc(a))return i;"function"==typeof a.qMorphCancel&&a.qMorphCancel();var l=void 0,c=void 0,u=void 0,h=void 0,d=a.parentNode,f=a.nextElementSibling,p=Vc(a,r.resize),m=Nc(d),v=m.width,g=m.height,_=Yc(a,["borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","transform","position","cssText"]),b=_.borderWidth,y=_.borderStyle,S=_.borderColor,x=_.borderRadius,w=_.backgroundColor,C=_.transform,k=_.position,q=_.cssText,T=a.classList.toString(),M=a.style.cssText,$=a.cloneNode(!0),L=!0===r.tween?a.cloneNode(!0):void 0;void 0!==L&&(L.className=L.classList.toString().split(" ").filter(function(t){return!1===/^bg-/.test(t)}).join(" ")),!0===r.hideFromClone&&$.classList.add("q-morph--internal"),$.setAttribute("aria-hidden","true"),$.style.transition="none",$.style.animation="none",$.style.pointerEvents="none",d.insertBefore($,f),a.qMorphCancel=function(){n=!0,$.remove(),void 0!==L&&L.remove(),!0===r.hideFromClone&&$.classList.remove("q-morph--internal"),a.qMorphCancel=void 0};return"function"==typeof t.onToggle&&t.onToggle(),requestAnimationFrame(function(){var t=Le(o.to);if(!0!==n&&!0===Xc(t)){a!==t&&"function"==typeof t.qMorphCancel&&t.qMorphCancel(),!0!==r.keepToClone&&t.classList.add("q-morph--internal"),$.classList.add("q-morph--internal");var e=Nc(d),f=e.width,m=e.height,_=Nc(t.parentNode),E=_.width,O=_.height;!0!==r.hideFromClone&&$.classList.remove("q-morph--internal"),t.qMorphCancel=function(){n=!0,$.remove(),void 0!==L&&L.remove(),!0===r.hideFromClone&&$.classList.remove("q-morph--internal"),!0!==r.keepToClone&&t.classList.remove("q-morph--internal"),a.qMorphCancel=void 0,t.qMorphCancel=void 0};var A=function(){if(!0!==n){!0!==r.hideFromClone&&($.classList.add("q-morph--internal"),$.innerHTML="",$.style.left=0,$.style.right="unset",$.style.top=0,$.style.bottom="unset",$.style.transform="none"),!0!==r.keepToClone&&t.classList.remove("q-morph--internal");var e=t.parentNode,o=Nc(e),_=o.width,A=o.height,B=t.cloneNode(r.keepToClone);B.setAttribute("aria-hidden","true"),!0!==r.keepToClone&&(B.style.left=0,B.style.right="unset",B.style.top=0,B.style.bottom="unset",B.style.transform="none",B.style.pointerEvents="none"),B.classList.add("q-morph--internal");var P=t===a&&d===e?$:t.nextElementSibling;e.insertBefore(B,P);var z=Yc(t,["borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","transform","position","cssText"]),I=z.borderWidth,R=z.borderStyle,F=z.borderColor,D=z.borderRadius,j=z.backgroundColor,V=z.transform,N=z.position,H=z.cssText,Q=t.classList.toString(),W=t.style.cssText;t.style.cssText=H,t.style.transform="none",t.style.animation="none",t.style.transition="none",t.className=Q.split(" ").filter(function(t){return!1===/^bg-/.test(t)}).join(" ");for(var U=Vc(t,r.resize),Y=p.left-U.left,K=p.top-U.top,G=p.width/(U.width>0?U.width:10),X=p.height/(U.height>0?U.height:100),Z=v-f,J=g-m,tt=_-E,et=A-O,it=Math.max(p.widthM,Z),nt=Math.max(p.heightM,J),st=Math.max(U.widthM,tt),ot=Math.max(U.heightM,et),rt=a===t&&!1===["absolute","fixed"].includes(N)&&!1===["absolute","fixed"].includes(k),at="fixed"===N,lt=e;!0!==at&<!==document;)at="fixed"===window.getComputedStyle(lt).position,lt=lt.parentNode;if(!0!==r.hideFromClone&&($.style.display="block",$.style.flex="0 0 auto",$.style.opacity=0,$.style.minWidth="unset",$.style.maxWidth="unset",$.style.minHeight="unset",$.style.maxHeight="unset",$.classList.remove("q-morph--internal")),!0!==r.keepToClone&&(B.style.display="block",B.style.flex="0 0 auto",B.style.opacity=0,B.style.minWidth="unset",B.style.maxWidth="unset",B.style.minHeight="unset",B.style.maxHeight="unset"),B.classList.remove("q-morph--internal"),"string"==typeof r.classes&&(t.className+=" "+r.classes),"string"==typeof r.style)t.style.cssText+=" "+r.style;else if(!0===On(r.style))for(var ct in r.style)t.style[ct]=r.style[ct];var ut=Gc($),ht=Gc(t),dt=!0===at?document.documentElement:{scrollLeft:0,scrollTop:0};t.style.position=!0===at?"fixed":"absolute",t.style.left=U.left-dt.scrollLeft+"px",t.style.right="unset",t.style.top=U.top-dt.scrollTop+"px",t.style.margin=0,!0===r.resize&&(t.style.minWidth="unset",t.style.maxWidth="unset",t.style.minHeight="unset",t.style.maxHeight="unset",t.style.overflow="hidden",t.style.overflowX="hidden",t.style.overflowY="hidden"),document.body.appendChild(t),void 0!==L&&(L.style.cssText=q,L.style.transform="none",L.style.animation="none",L.style.transition="none",L.style.position=t.style.position,L.style.left=p.left-dt.scrollLeft+"px",L.style.right="unset",L.style.top=p.top-dt.scrollTop+"px",L.style.margin=0,L.style.pointerEvents="none",!0===r.resize&&(L.style.minWidth="unset",L.style.maxWidth="unset",L.style.minHeight="unset",L.style.maxHeight="unset",L.style.overflow="hidden",L.style.overflowX="hidden",L.style.overflowY="hidden"),document.body.appendChild(L));var ft=function(n){a===t&&!0!==s?(t.style.cssText=M,t.className=T):(t.style.cssText=W,t.className=Q),B.parentNode===e&&e.insertBefore(t,B),$.remove(),B.remove(),void 0!==L&&L.remove(),i=function(){return!1},a.qMorphCancel=void 0,t.qMorphCancel=void 0,"function"==typeof r.onEnd&&r.onEnd(!0===s?"to":"from",!0===n)};if(!0!==r.useCSS&&"function"==typeof t.animate){var pt=!0===r.resize?{transform:"translate("+Y+"px, "+K+"px)",width:it+"px",height:nt+"px"}:{transform:"translate("+Y+"px, "+K+"px) scale("+G+", "+X+")"},mt=!0===r.resize?{width:st+"px",height:ot+"px"}:{},vt=!0===r.resize?{width:it+"px",height:nt+"px"}:{},gt=!0===r.resize?{transform:"translate("+-1*Y+"px, "+-1*K+"px)",width:st+"px",height:ot+"px"}:{transform:"translate("+-1*Y+"px, "+-1*K+"px) scale("+1/G+", "+1/X+")"},_t=void 0!==L?{opacity:r.tweenToOpacity}:{backgroundColor:w},bt=void 0!==L?{opacity:1}:{backgroundColor:j};h=t.animate([Object.assign({},{margin:0,borderWidth:b,borderStyle:y,borderColor:S,borderRadius:x,zIndex:ut,transformOrigin:"0 0"},pt,_t),Object.assign({},{margin:0,borderWidth:I,borderStyle:R,borderColor:F,borderRadius:D,zIndex:ht,transformOrigin:"0 0",transform:V},mt,bt)],{duration:r.duration,easing:r.easing,fill:r.fill,delay:r.delay}),c=void 0===L?void 0:L.animate([Object.assign({},{opacity:r.tweenFromOpacity,margin:0,borderWidth:b,borderStyle:y,borderColor:S,borderRadius:x,zIndex:ut,transformOrigin:"0 0",transform:C},vt),Object.assign({},{opacity:0,margin:0,borderWidth:I,borderStyle:R,borderColor:F,borderRadius:D,zIndex:ht,transformOrigin:"0 0"},gt)],{duration:r.duration,easing:r.easing,fill:r.fill,delay:r.delay}),l=!0===r.hideFromClone||!0===rt?void 0:$.animate([{margin:(J<0?J/2:0)+"px "+(Z<0?Z/2:0)+"px",width:it+p.marginH+"px",height:nt+p.marginV+"px"},{margin:0,width:0,height:0}],{duration:r.duration,easing:r.easing,fill:r.fill,delay:r.delay}),u=!0===r.keepToClone?void 0:B.animate([!0===rt?{margin:(J<0?J/2:0)+"px "+(Z<0?Z/2:0)+"px",width:it+p.marginH+"px",height:nt+p.marginV+"px"}:{margin:0,width:0,height:0},{margin:(et<0?et/2:0)+"px "+(tt<0?tt/2:0)+"px",width:st+U.marginH+"px",height:ot+U.marginV+"px"}],{duration:r.duration,easing:r.easing,fill:r.fill,delay:r.delay});var yt=function(t){void 0!==l&&l.cancel(),void 0!==c&&c.cancel(),void 0!==u&&u.cancel(),h.cancel(),h.removeEventListener("finish",yt),h.removeEventListener("cancel",yt),ft(t),l=void 0,c=void 0,u=void 0,h=void 0};a.qMorphCancel=function(){a.qMorphCancel=void 0,n=!0,yt()},t.qMorphCancel=function(){t.qMorphCancel=void 0,n=!0,yt()},h.addEventListener("finish",yt),h.addEventListener("cancel",yt),i=function(t){return!0!==n&&void 0!==h&&(!0===t?(yt(!0),!0):(s=!0!==s,void 0!==l&&l.reverse(),void 0!==c&&c.reverse(),void 0!==u&&u.reverse(),h.reverse(),!0))}}else{var St="q-morph-anim-"+ ++Dc,xt=document.createElement("style"),wt=!0===r.resize?"\n transform: translate("+Y+"px, "+K+"px);\n width: "+it+"px;\n height: "+nt+"px;\n ":"transform: translate("+Y+"px, "+K+"px) scale("+G+", "+X+");",Ct=!0===r.resize?"\n width: "+st+"px;\n height: "+ot+"px;\n ":"",kt=!0===r.resize?"\n width: "+it+"px;\n height: "+nt+"px;\n ":"",qt=!0===r.resize?"\n transform: translate("+-1*Y+"px, "+-1*K+"px);\n width: "+st+"px;\n height: "+ot+"px;\n ":"transform: translate("+-1*Y+"px, "+-1*K+"px) scale("+1/G+", "+1/X+");",Tt=void 0!==L?"opacity: "+r.tweenToOpacity+";":"background-color: "+w+";",Mt=void 0!==L?"opacity: 1;":"background-color: "+j+";",$t=void 0===L?"":"\n @keyframes "+St+"-from-tween {\n 0% {\n opacity: "+r.tweenFromOpacity+";\n margin: 0;\n border-width: "+b+";\n border-style: "+y+";\n border-color: "+S+";\n border-radius: "+x+";\n z-index: "+ut+";\n transform-origin: 0 0;\n transform: "+C+";\n "+kt+"\n }\n\n 100% {\n opacity: 0;\n margin: 0;\n border-width: "+I+";\n border-style: "+R+";\n border-color: "+F+";\n border-radius: "+D+";\n z-index: "+ht+";\n transform-origin: 0 0;\n "+qt+"\n }\n }\n ",Lt=!0===r.hideFromClone||!0===rt?"":"\n @keyframes "+St+"-from {\n 0% {\n margin: "+(J<0?J/2:0)+"px "+(Z<0?Z/2:0)+"px;\n width: "+(it+p.marginH)+"px;\n height: "+(nt+p.marginV)+"px;\n }\n\n 100% {\n margin: 0;\n width: 0;\n height: 0;\n }\n }\n ",Et=!0===rt?"\n margin: "+(J<0?J/2:0)+"px "+(Z<0?Z/2:0)+"px;\n width: "+(it+p.marginH)+"px;\n height: "+(nt+p.marginV)+"px;\n ":"\n margin: 0;\n width: 0;\n height: 0;\n ",Ot=!0===r.keepToClone?"":"\n @keyframes "+St+"-to {\n 0% {\n "+Et+"\n }\n\n 100% {\n margin: "+(et<0?et/2:0)+"px "+(tt<0?tt/2:0)+"px;\n width: "+(st+U.marginH)+"px;\n height: "+(ot+U.marginV)+"px;\n }\n }\n ";xt.innerHTML="\n @keyframes "+St+" {\n 0% {\n margin: 0;\n border-width: "+b+";\n border-style: "+y+";\n border-color: "+S+";\n border-radius: "+x+";\n background-color: "+w+";\n z-index: "+ut+";\n transform-origin: 0 0;\n "+wt+"\n "+Tt+"\n }\n\n 100% {\n margin: 0;\n border-width: "+I+";\n border-style: "+R+";\n border-color: "+F+";\n border-radius: "+D+";\n background-color: "+j+";\n z-index: "+ht+";\n transform-origin: 0 0;\n transform: "+V+";\n "+Ct+"\n "+Mt+"\n }\n }\n\n "+Lt+"\n\n "+$t+"\n\n "+Ot+"\n ",document.head.appendChild(xt);var At="normal";$.style.animation=r.duration+"ms "+r.easing+" "+r.delay+"ms "+At+" "+r.fill+" "+St+"-from",void 0!==L&&(L.style.animation=r.duration+"ms "+r.easing+" "+r.delay+"ms "+At+" "+r.fill+" "+St+"-from-tween"),B.style.animation=r.duration+"ms "+r.easing+" "+r.delay+"ms "+At+" "+r.fill+" "+St+"-to",t.style.animation=r.duration+"ms "+r.easing+" "+r.delay+"ms "+At+" "+r.fill+" "+St;var Bt=function(e){e===Object(e)&&e.animationName!==St||(t.removeEventListener("animationend",Bt),t.removeEventListener("animationcancel",Bt),ft(),xt.remove())};a.qMorphCancel=function(){a.qMorphCancel=void 0,n=!0,Bt()},t.qMorphCancel=function(){t.qMorphCancel=void 0,n=!0,Bt()},t.addEventListener("animationend",Bt),t.addEventListener("animationcancel",Bt),i=function(e){return!!(!0!==n&&t&&$&&B)&&(!0===e?(Bt(),!0):(s=!0!==s,At="normal"===At?"reverse":"normal",$.style.animationDirection=At,L.style.animationDirection=At,B.style.animationDirection=At,t.style.animationDirection=At,!0))}}}else"function"==typeof t.qMorphCancel&&t.qMorphCancel()};r.waitFor>0||"transitionend"===r.waitFor||r.waitFor===Object(r.waitFor)&&"function"==typeof r.waitFor.then?(r.waitFor>0?new Promise(function(t){return setTimeout(t,r.waitFor)}):"transitionend"===r.waitFor?new Promise(function(e){var i=setTimeout(function(){n()},400),n=function(s){clearTimeout(i),t&&(t.removeEventListener("transitionend",n),t.removeEventListener("transitioncancel",n)),e()};t.addEventListener("transitionend",n),t.addEventListener("transitioncancel",n)}):r.waitFor).then(A).catch(function(){"function"==typeof t.qMorphCancel&&t.qMorphCancel()}):A()}else"function"==typeof a.qMorphCancel&&a.qMorphCancel()}),function(t){return i(t)}}var Jc={},tu=["resize","useCSS","hideFromClone","keepToClone","tween"],eu=["duration","delay","easing","fill","classes","style","duration","tweenFromOpacity","tweenToOpacity","waitFor","onEnd"];function iu(t,e){t.clsAction!==e&&(t.clsAction=e,t.el.classList[e]("q-morph--invisible"))}function nu(t,e){if(t.name!==e)!1===t.animating&&iu(t,"add");else{var i=Jc[t.group];void 0===i?(Jc[t.group]={name:t.group,model:e,queue:[t],animating:!1},iu(t,"remove")):i.model!==e&&(i.model=e,i.queue.push(t),!1===i.animating&&2===i.queue.length&&function t(e){if(!(!0===e.animating||e.queue.length<2)){var i=e.queue,n=i[0],s=i[1];e.animating=!0,n.animating=!0,s.animating=!0,iu(n,"remove"),iu(s,"remove");var o=Zc(Object.assign({},{from:n.el,to:s.el,onToggle:function(){iu(n,"add"),iu(s,"remove")}},s.opts,{onEnd:function(i,o){void 0!==s.opts.onEnd&&s.opts.onEnd(i,o),!0!==o&&(n.animating=!1,s.animating=!1,e.animating=!1,e.cancel=void 0,e.queue.shift(),t(e))}}));e.cancel=function(){o(!0),e.cancel=void 0}}}(i))}}function su(t,e){var i="string"==typeof e&&e.length>0?e.split(":"):[];t.name=i[0],t.group=i[1],Object.assign(t.opts,{duration:!0===isNaN(i[2])?300:parseFloat(i[2]),waitFor:i[3]})}function ou(t,e){var i=t.opts;tu.forEach(function(t){i[t]=!0===e[t]})}function ru(t,e){var i;Object(e)===e?(i=""+e.model,function(t,e){void 0!==e.group&&(t.group=e.group),void 0!==e.name&&(t.name=e.name);var i=t.opts;eu.forEach(function(t){void 0!==e[t]&&(i[t]=e[t])})}(t,e),ou(t,e)):i=""+e,i!==t.model?(t.model=i,nu(t,i)):!1===t.animating&&void 0!==t.clsAction&&t.el.classList[t.clsAction]("q-morph--invisible")}function au(t){var e=t.__qmorph;if(void 0!==e){var i=Jc[e.group];if(void 0!==i)-1!==i.queue.indexOf(e)&&(i.queue=i.queue.filter(function(t){return t!==e}),0===i.queue.length&&(void 0!==i.cancel&&i.cancel(),delete Jc[e.group]));"add"===e.clsAction&&t.classList.remove("q-morph--invisible"),delete t.__qmorph}}var lu={name:"morph",inserted:function(t,e){var i=e.modifiers,n=e.arg,s=e.value;void 0!==t.__qmorph&&(au(t),t.__qmorph_destroyed=!0);var o={el:t,arg:n,animating:!1,opts:{}};ou(o,i),su(o,n),ru(o,s),t.__qmorph=o},update:function(t,e){var i=e.modifiers,n=e.arg,s=e.value,o=t.__qmorph;void 0!==o&&(ou(o,i),o.arg!==n&&su(o,n),ru(o,s))},unbind:function(t){void 0===t.__qmorph_destroyed?au(t):delete t.__qmorph_destroyed}};function cu(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&-1===e.indexOf(n)&&(i[n]=t[n]);return i}var uu={childList:!0,subtree:!0,attributes:!0,characterData:!0,attributeOldValue:!0,characterDataOldValue:!0};function hu(t,e,i){e.handler=i,void 0!==e.observer&&e.observer.disconnect(),e.observer=new MutationObserver(function(i){"function"==typeof e.handler&&(!1!==e.handler(i)&&!0!==e.once||du(t))}),e.observer.observe(t,e.opts)}function du(t){var e=t.__qmutation;void 0!==e&&(void 0!==e.observer&&e.observer.disconnect(),delete t.__qmutation)}var fu={name:"mutation",inserted:function(t,e){var i=e.modifiers,n=i.once,s=cu(i,["once"]),o=e.value;void 0!==t.__qmutation&&(du(t),t.__qmutation_destroyed=!0);var r={once:n};r.opts=0===Object.keys(s).length?uu:s,hu(t,r,o),t.__qmutation=r},update:function(t,e){var i=e.modifiers;i.once;var n=cu(i,["once"]),s=e.value,o=e.oldValue,r=t.__qmutation;if(void 0!==r){var a=0===Object.keys(n).length?uu:n;o===s&&!0===En(r.opts,a)||(r.opts=a,hu(t,r,s))}},unbind:function(t){void 0===t.__qmutation_destroyed?du(t):delete t.__qmutation_destroyed}};function pu(t,e){var i=e.value,n=e.oldValue;"function"==typeof i?(t.handler=i,"function"!=typeof n&&(t.scrollTarget.addEventListener("scroll",t.scroll,d.passive),t.scroll())):t.scrollTarget.removeEventListener("scroll",t.scroll,d.passive)}function mu(t){var e=t.__qscrollfire;void 0!==e&&(e.scrollTarget.removeEventListener("scroll",e.scroll,d.passive),e.scroll.cancel(),delete t.__qscrollfire)}var vu={name:"scroll-fire",inserted:function(t,e){void 0!==t.__qscrollfire&&(mu(t),t.__qscrollfire_destroyed=!0);var i={scrollTarget:Ri(t),scroll:H(function(){var e,n;i.scrollTarget===window?(n=t.getBoundingClientRect().bottom,e=window.innerHeight):(n=Te(t).top+Me(t),e=Te(i.scrollTarget).top+Me(i.scrollTarget)),n>0&&n0&&t.split(":").forEach(function(t,i){var n=parseInt(t,10);n&&(e[i]=n)}),{duration:e[0],touchSensitivity:e[1],mouseSensitivity:e[2]}}function Su(t){var e=t.__qtouchhold;void 0!==e&&(T(e,"main"),T(e,"temp"),clearTimeout(e.timer),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchhold)}function xu(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&T(e,"main_mouse"),!0===i.mouse&&q(e,"main_mouse",[[t,"mousedown","mouseStart","passive"+(!0===i.mouseCapture||!0===i.mousecapture?"Capture":"")]])),!0===u.has.touch&&e.modifiers.capture!==i.capture&&(T(e,"main_touch"),q(e,"main_touch",[[t,"touchstart","touchStart","passive"+(!0===i.capture?"Capture":"")],[t,"touchmove","noop","passiveCapture"]])),e.modifiers=i}var wu={name:"touch-hold",bind:function(t,e){var i=e.modifiers,n=e.arg,s=e.value;void 0!==t.__qtouchhold&&(Su(t),t.__qtouchhold_destroyed=!0);var o=Object.assign({},{handler:s,arg:n,modifiers:{capture:null}},yu(n),{noop:p,mouseStart:function(t){"function"==typeof o.handler&&!0===m(t)&&(q(o,"temp",[[document,"mousemove","move","passiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(t,!0))},touchStart:function(t){if(void 0!==t.target&&"function"==typeof o.handler){var e=t.target;q(o,"temp",[[e,"touchmove","move","passiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start:function(t,e){o.origin=v(t);var i=Date.now();!0===u.is.mobile&&(document.body.classList.add("non-selectable"),ni(),o.styleCleanup=function(t){o.styleCleanup=void 0;var e=function(){document.body.classList.remove("non-selectable")};!0===t?(ni(),setTimeout(e,10)):e()}),o.triggered=!1,o.sensitivity=!0===e?o.mouseSensitivity:o.touchSensitivity,o.timer=setTimeout(function(){ni(),o.triggered=!0,o.handler({evt:t,touch:!0!==e,mouse:!0===e,position:o.origin,duration:Date.now()-i})},o.duration)},move:function(t){var e=v(t),i=e.top,n=e.left;(Math.abs(n-o.origin.left)>=o.sensitivity||Math.abs(i-o.origin.top)>=o.sensitivity)&&clearTimeout(o.timer)},end:function(t){T(o,"temp"),void 0!==o.styleCleanup&&o.styleCleanup(o.triggered),!0===o.triggered?void 0!==t&&w(t):clearTimeout(o.timer)}});t.__qtouchhold=o,xu(t,o,i)},update:function(t,e){var i=e.modifiers,n=e.arg,s=e.value,o=e.oldValue,r=t.__qtouchhold;void 0!==r&&(o!==s&&("function"!=typeof s&&r.end(),r.handler=s),r.arg!==n&&Object.assign(r,yu(n)),!0!==En(r.modifiers,i)&&xu(t,r,i))},unbind:function(t){void 0===t.__qtouchhold_destroyed?Su(t):delete t.__qtouchhold_destroyed}},Cu={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ku=new RegExp("^([\\d+]+|"+Object.keys(Cu).join("|")+")$","i");function qu(t){var e="string"==typeof t&&t.length>0?t.split(":").map(function(t){return parseInt(t,10)}):[0,600,300];return{durations:e,durationsLast:e.length-1}}function Tu(t){var e=t.__qtouchrepeat;void 0!==e&&(clearTimeout(e.timer),T(e,"main_mouse"),T(e,"main_touch"),T(e,"main_kbd"),T(e,"temp"),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchrepeat)}function Mu(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&T(e,"main_mouse"),!0===i.mouse&&q(e,"main_mouse",[[t,"mousedown","mouseStart","passive"+(!0===i.mouseCapture||!0===i.mousecapture?"Capture":"")]])),!0===u.has.touch&&e.modifiers.capture!==i.capture&&(T(e,"main_touch"),q(e,"main_touch",[[t,"touchstart","touchStart","passive"+(!0===i.capture?"Capture":"")],[t,"touchmove","noop","passiveCapture"]]));var n=Object.keys(i).reduce(function(t,e){if(!0===ku.test(e)){var i=isNaN(parseInt(e,10))?Cu[e.toLowerCase()]:parseInt(e,10);i>=0&&t.push(i)}return t},[]);e.keyboard.length>0==n.length>0&&e.modifiers.keyCapture===i.keyCapture&&e.modifiers.keycapture===i.keycapture||(e.keyboard.length>0&&T(e,"main_kbd"),n.length>0&&q(e,"main_kbd",[[t,"keydown","keyboardStart","notPassive"+(!0===i.keyCapture||!0===i.keycapture?"Capture":"")]])),e.modifiers=i,e.keyboard=n}var $u,Lu={name:"touch-repeat",bind:function(t,e){var i=e.modifiers,n=e.arg,s=e.value;void 0!==t.__qtouchrepeat&&(Tu(t),t.__qtouchrepeat_destroyed=!0);var o=Object.assign({},{keyboard:[],handler:s,arg:n,modifiers:{capture:null}},qu(n),{noop:p,mouseStart:function(t){void 0===o.event&&"function"==typeof o.handler&&!0===m(t)&&(q(o,"temp",[[document,"mousemove","move","passiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(t,!0))},keyboardStart:function(e){if("function"==typeof o.handler&&!0===Be(e,o.keyboard)){if((0===o.durations[0]||void 0!==o.event)&&(w(e),t.focus(),void 0!==o.event))return;q(o,"temp",[[document,"keyup","end","notPassiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(e,!1,!0)}},touchStart:function(t){if(void 0!==t.target&&"function"==typeof o.handler){var e=t.target;q(o,"temp",[[e,"touchmove","move","passiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start:function(t,e,i){function n(t){o.styleCleanup=void 0,document.documentElement.style.cursor="";var e=function(){document.body.classList.remove("non-selectable")};!0===t?(ni(),setTimeout(e,10)):e()}!0!==i&&(o.origin=v(t)),!0===u.is.mobile&&(document.body.classList.add("non-selectable"),ni(),o.styleCleanup=n),o.event={touch:!0!==e&&!0!==i,mouse:!0===e,keyboard:!0===i,startTime:Date.now(),repeatCount:0};var s=function(){if(void 0!==o.event){0===o.event.repeatCount&&(o.event.evt=t,!0===i?o.event.keyCode=t.keyCode:o.event.position=v(t),!0!==u.is.mobile&&(document.documentElement.style.cursor="pointer",document.body.classList.add("non-selectable"),ni(),o.styleCleanup=n)),o.event.duration=Date.now()-o.event.startTime,o.event.repeatCount+=1,o.handler(o.event);var e=o.durationsLast=7||Math.abs(n-e.top)>=7}(t,o.origin)&&clearTimeout(o.timer)},end:function(t){void 0!==o.event&&(void 0!==o.styleCleanup&&o.styleCleanup(!0),void 0!==t&&o.event.repeatCount>0&&w(t),T(o,"temp"),clearTimeout(o.timer),o.event=void 0)}});t.__qtouchrepeat=o,Mu(t,o,i)},update:function(t,e){var i=e.modifiers,n=e.arg,s=e.value,o=e.oldValue,r=t.__qtouchrepeat;void 0!==r&&(o!==s&&("function"!=typeof s&&r.end(),r.handler=s),r.arg!==n&&Object.assign(r,qu(n)),!0!==En(r.modifiers,i)&&Mu(t,r,i))},unbind:function(t){void 0===t.__qtouchrepeat_destroyed?Tu(t):delete t.__qtouchrepeat_destroyed}},Eu=Object.freeze({__proto__:null,ClosePopup:Ic,GoBack:Fc,Intersection:ga,KeyGroupNavigation:Qs,Morph:lu,Mutation:fu,Ripple:Re,ScrollFire:vu,Scroll:bu,TouchHold:wu,TouchPan:xs,TouchRepeat:Lu,TouchSwipe:Hn});function Ou(t){void 0===$u&&($u=h.is.winphone?"msapplication-navbutton-color":h.is.safari?"apple-mobile-web-app-status-bar-style":"theme-color");var e=function(t){var e=document.getElementsByTagName("META");for(var i in e)if(e[i].name===t)return e[i]}($u),i=void 0===e;i&&(e=document.createElement("meta")).setAttribute("name",$u),e.setAttribute("content",t),i&&document.head.appendChild(e)}var Au={install:function(t){var e=t.$q,i=t.cfg;this.set=!1!==n||!0!==h.is.mobile||!0!==h.is.nativeMobile&&!0!==h.is.winphone&&!0!==h.is.safari&&!0!==h.is.webkit&&!0!==h.is.vivaldi?p:function(t){var e=t||ht("primary");!0===h.is.nativeMobile&&window.StatusBar?window.StatusBar.backgroundColorByHexString(e):Ou(e)},e.addressbarColor=this,i.addressbarColor&&this.set(i.addressbarColor)}},Bu={};function Pu(t,e){try{var i=t[e]();return void 0===i?Promise.resolve():i}catch(t){return Promise.reject(t)}}function zu(t){t.activeEl=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement||null,t.isActive=null!==t.activeEl}var Iu={isCapable:!1,isActive:!1,activeEl:null,request:function(t){var e=this;if(!0===this.isCapable){var i=t||document.documentElement;if(i!==this.activeEl)return(!0===u.is.ie&&null!==this.activeEl&&i.contains(this.activeEl)?this.exit():Promise.resolve()).then(function(){return Pu(i,Bu.request)}).catch(function(t){return null!==e.activeEl?e.exit().then(function(){return Pu(i,Bu.request)}):Promise.reject(t)}).then(function(t){return zu(e),t})}return this.__getErr()},exit:function(){var t=this;return!0===this.isCapable&&!0===this.isActive?Pu(document,Bu.exit).then(function(e){return zu(t),t.isActive?t.exit():e}):this.__getErr()},toggle:function(t){var e=t||document.documentElement;return this.activeEl===e?this.exit():this.request(e)},install:function(t){var e=this;t.$q.fullscreen=this,this.__getErr=function(){return Promise.resolve()},!0!==n&&(Bu.request=["requestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitRequestFullscreen"].find(function(t){return void 0!==document.documentElement[t]}),this.isCapable=void 0!==Bu.request,!1!==this.isCapable?(Bu.exit=["exitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen"].find(function(t){return document[t]}),zu(this),["onfullscreenchange","onmsfullscreenchange","onwebkitfullscreenchange"].forEach(function(t){document[t]=function(){zu(e)}}),i.default.util.defineReactive(this,"isActive",this.isActive),i.default.util.defineReactive(this,"activeEl",this.activeEl)):this.__getErr=function(){return Promise.reject("Not capable")})}},Ru={appVisible:!1,install:function(t){var e=this,s=t.$q;if(!0!==n){var o,r;void 0!==document.hidden?(o="hidden",r="visibilitychange"):void 0!==document.msHidden?(o="msHidden",r="msvisibilitychange"):void 0!==document.webkitHidden&&(o="webkitHidden",r="webkitvisibilitychange");var a=function(){e.appVisible=s.appVisible=!document[o]};a(),r&&void 0!==document[o]&&(i.default.util.defineReactive(s,"appVisible",this.appVisible),document.addEventListener(r,a,!1))}else this.appVisible=s.appVisible=!0}},Fu={staticClass:"row items-stretch justify-start",attrs:{role:"list"}},Du={attrs:{role:"list"}},ju={tabindex:0,role:"listitem"},Vu=i.default.extend({name:"BottomSheetPlugin",mixins:[ue,Ot],inheritAttrs:!1,props:{title:String,message:String,actions:Array,grid:Boolean,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},computed:{dialogProps:function(){return Object.assign({},this.qAttrs,{position:"bottom"})}},methods:{show:function(){this.$refs.dialog.show()},hide:function(){this.$refs.dialog.hide()},onOk:function(t){this.$emit("ok",t),this.hide()},__getGrid:function(t){var e=this;return this.actions.map(function(i){var n=i.avatar||i.img;return void 0===i.label?t(Lr,{staticClass:"col-all",props:{dark:e.dark}}):t("div",{staticClass:"q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position",class:i.classes,attrs:ju,on:{click:function(){return e.onOk(i)},keyup:function(t){13===t.keyCode&&e.onOk(i)}}},[t("div",{staticClass:"q-focus-helper"}),i.icon?t(ae,{props:{name:i.icon,color:i.color}}):n?t("img",{attrs:{src:n},staticClass:i.avatar?"q-bottom-sheet__avatar":null}):t("div",{staticClass:"q-bottom-sheet__empty-icon"}),t("div",[i.label])])})},__getList:function(t){var e=this;return this.actions.map(function(i){var n=i.avatar||i.img;return void 0===i.label?t(Lr,{props:{spaced:!0,dark:e.dark}}):t(ur,{staticClass:"q-bottom-sheet__item",class:i.classes,props:{tabindex:0,clickable:!0,dark:e.dark},on:{click:function(){return e.onOk(i)},keyup:function(t){13===t.keyCode&&e.onOk(i)}}},[t(hr,{props:{avatar:!0}},[i.icon?t(ae,{props:{name:i.icon,color:i.color}}):n?t("img",{attrs:{src:n},staticClass:i.avatar?"q-bottom-sheet__avatar":null}):null]),t(hr,[i.label])])})}},render:function(t){var e=this,i=[];return this.title&&i.push(t(qn,{staticClass:"q-dialog__title"},[this.title])),this.message&&i.push(t(qn,{staticClass:"q-dialog__message"},[this.message])),i.push(!0===this.grid?t("div",Fu,this.__getGrid(t)):t("div",Du,this.__getList(t))),t(nr,{key:"dialog",ref:"dialog",props:this.dialogProps,on:Tt(this,"hide",{hide:function(){e.$emit("hide")}})},[t(kn,{staticClass:"q-bottom-sheet q-bottom-sheet--"+(!0===this.grid?"grid":"list")+" q-bottom-sheet--"+this.darkSuffix+" q-"+this.darkSuffix,style:this.cardStyle,class:this.cardClass},i)])}});function Nu(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&-1===e.indexOf(n)&&(i[n]=t[n]);return i}var Hu,Qu={onOk:function(){return Qu},okCancel:function(){return Qu},hide:function(){return Qu},update:function(){return Qu}};function Wu(t){return function(e){e.className;var s=e.class,o=e.style,r=e.component,a=e.root,l=e.parent,c=Nu(e,["className","class","style","component","root","parent"]);if(!0===n)return Qu;void 0!==s&&(c.cardClass=s),void 0!==o&&(c.cardStyle=o);var u,h,d=void 0!==r;!0===d?u=r:(u=t,h=c);var f=[],p=[],m={onOk:function(t){return f.push(t),m},onCancel:function(t){return p.push(t),m},onDismiss:function(t){return f.push(t),p.push(t),m},hide:function(){return b.$refs.dialog.hide(),m},update:function(t){t.className;var e=t.class,i=t.style;t.component,t.root,t.parent;var n=Nu(t,["className","class","style","component","root","parent"]);return null!==b&&(void 0!==e&&(n.cardClass=e),void 0!==i&&(n.cardStyle=i),!0===d?Object.assign(c,n):(!function t(e,i){for(var n in i)"spinner"!==n&&Object(i[n])===i[n]?(e[n]=Object(e[n])!==e[n]?{}:Object.assign({},e[n]),t(e[n],i[n])):e[n]=i[n]}(c,n),h=Object.assign({},c)),b.$forceUpdate()),m}},v=document.createElement("div");Ci(document.body).appendChild(v);var g=!1,_={ok:function(t){g=!0,f.forEach(function(e){e(t)})},hide:function(){b.$destroy(),b.$el.remove(),b=null,!0!==g&&p.forEach(function(t){t()})}},b=new i.default({name:"QGlobalDialog",el:v,parent:function(t,e){if(void 0!==t)return t;if(void 0!==e)return e;if(void 0===Hu){var i=document.getElementById("q-app");i&&i.__vue__&&(Hu=i.__vue__.$root)}return Hu}(l,a),render:function(t){return t(u,{ref:"dialog",props:c,attrs:h,on:_})},mounted:function(){var t=this;void 0!==this.$refs.dialog?this.$refs.dialog.show():_["hook:mounted"]=function(){void 0!==t.$refs.dialog&&t.$refs.dialog.show()}}});return m}}var Uu={install:function(t){var e=t.$q;this.create=e.bottomSheet=Wu(Vu)}};function Yu(t){return encodeURIComponent(t)}function Ku(t){return decodeURIComponent(t)}function Gu(t){return Yu("string"==typeof t&&"j:"!==t.slice(0,2)?t:"j:"+JSON.stringify(t))}function Xu(t,e){if(""===t)return t;if(0===t.indexOf('"')&&(t=t.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")),"j:"===(t=Ku(t.replace(/\+/g," "))).slice(0,2))try{return JSON.parse(t.slice(2),e)}catch(t){}try{var i=JSON.parse(t,e);return void 0!==e||i===Object(i)||!0===Array.isArray(i)?i:t}catch(e){return t}}function Zu(t){var e=new Date;return e.setMilliseconds(e.getMilliseconds()+t),e.toUTCString()}function Ju(t,e,i,n){var s,o,r,a,l,c,u,h;void 0===i&&(i={}),void 0!==i.expires&&("[object Date]"===Object.prototype.toString.call(i.expires)?s=i.expires.toUTCString():"string"==typeof i.expires?(r=i.expires,a=0,l=r.match(/(\d+)d/),c=r.match(/(\d+)h/),u=r.match(/(\d+)m/),h=r.match(/(\d+)s/),l&&(a+=864e5*l[1]),c&&(a+=36e5*c[1]),u&&(a+=6e4*u[1]),h&&(a+=1e3*h[1]),s=0===a?r:Zu(a)):(o=parseFloat(i.expires),s=!1===isNaN(o)?Zu(864e5*o):i.expires));var d=Yu(t)+"="+Gu(e),f=[d,void 0!==s?"; Expires="+s:"",i.path?"; Path="+i.path:"",i.domain?"; Domain="+i.domain:"",i.sameSite?"; SameSite="+i.sameSite:"",i.httpOnly?"; HttpOnly":"",i.secure?"; Secure":"",i.other?"; "+i.other:""].join("");if(n){n.req.qCookies?n.req.qCookies.push(f):n.req.qCookies=[f],n.res.setHeader("Set-Cookie",n.req.qCookies);var p=n.req.headers.cookie||"";if(void 0!==s&&o<0){var m=th(t,n,void 0,!0);if(void 0!==m){var v=Yu(t)+"="+Gu(m);p=p.replace(v+"; ","").replace("; "+v,"").replace(""+v,"")}}else p=p?d+"; "+p:f;n.req.headers.cookie=p}else document.cookie=f}function th(t,e,i,n){for(var s,o,r,a=e?e.req.headers:document,l=a.cookie?a.cookie.split("; "):[],c=l.length,u=t?null:{},h=0;h0)return t(Tn,{staticClass:!0===this.stackButtons?"items-end":null,props:{vertical:this.stackButtons,align:"right"}},e)},onOk:function(){this.$emit("ok",ja(this.getData())),this.hide()},onCancel:function(){this.hide()},getData:function(){return void 0!==this.prompt?this.prompt.model:void 0!==this.options?this.options.model:void 0},getSection:function(t,e,i){return!0===this.html?t(qn,{staticClass:e,domProps:{innerHTML:i}}):t(qn,{staticClass:e},[i])}},render:function(t){var e=this,i=[];return this.title&&i.push(this.getSection(t,"q-dialog__title",this.title)),!1!==this.progress&&i.push(t(qn,{staticClass:"q-dialog__progress"},[t(this.spinner.component,{props:this.spinner.props})])),this.message&&i.push(this.getSection(t,"q-dialog__message",this.message)),void 0!==this.prompt?i.push(t(qn,{staticClass:"scroll q-dialog-plugin__form"},this.getPrompt(t))):void 0!==this.options&&i.push(t(Lr,{props:{dark:this.dark}}),t(qn,{staticClass:"scroll q-dialog-plugin__form"},this.getOptions(t)),t(Lr,{props:{dark:this.dark}})),(this.ok||this.cancel)&&i.push(this.getButtons(t)),t(nr,{key:"dialog",ref:"dialog",props:Object.assign({},this.qAttrs,{value:this.value}),on:Tt(this,"hide",{hide:function(){e.$emit("hide")}})},[t(kn,{staticClass:this.classes,style:this.cardStyle,class:this.cardClass,props:{dark:this.dark}},i)])}}),rh={install:function(t){var e=t.$q;this.create=e.dialog=Wu(oh)}},ah={isActive:!1,start:p,stop:p,increment:p,setDefaults:p,install:function(t){var e=this,s=t.$q,o=t.cfg;if(s.loadingBar=this,!0!==n){var r=void 0!==o.loadingBar?Object.assign({},o.loadingBar):{},a={start:function(){e.isActive=!0},stop:function(){e.isActive=!1}},l=new i.default({name:"LoadingBar",devtools:{hide:!0},beforeCreate:function(){void 0===this._routerRoot&&(this._routerRoot={})},render:function(t){return t(Rt,{ref:"bar",props:r,on:a})}}).$mount().$refs.bar;Object.assign(this,{start:l.start,stop:l.stop,increment:l.increment,setDefaults:function(t){!0===On(t)&&Object.assign(r,t),l.$parent.$forceUpdate()}}),i.default.util.defineReactive(this,"isActive",this.isActive),i.default.util.defineReactive(l,"isActive",this.isActive),l.setDefaults=this.setDefaults,document.body.appendChild(l.$parent.$el)}}},lh=0,ch={},uh={},hh={group:"__default_quasar_group__",delay:0,message:!1,spinnerSize:80,spinnerColor:"white",messageColor:"white",backgroundColor:"black",spinner:qe,customClass:""},dh=Object.assign({},hh);var fh,ph,mh={isActive:!1,show:function(t){var e=this;if(!0!==n){var s=(ch=function(t){if(t&&void 0!==t.group&&void 0!==uh[t.group])return Object.assign(uh[t.group],t);var e=!0===On(t)&&!0===t.ignoreDefaults?Object.assign({},hh,t):Object.assign({},dh,t);return uh[e.group]=e,e}(t)).group;return ch.customClass+=" text-"+ch.backgroundColor,this.isActive=!0,void 0!==ih?(ch.uid=lh,ih.$forceUpdate()):(ch.uid=++lh,clearTimeout(nh),nh=setTimeout(function(){nh=void 0;var t=document.createElement("div");document.body.appendChild(t),ih=new i.default({name:"QLoading",devtools:{hide:!0},beforeCreate:function(){void 0===this._routerRoot&&(this._routerRoot={})},el:t,mounted:function(){Jo(!0)},render:function(t){var i;return t("transition",{key:"tr",props:{name:"q-transition--fade",appear:!0},on:Tt(e,"tr",{"after-leave":function(){!0!==e.isActive&&void 0!==ih&&(Jo(!1),ih.$destroy(),ih.$el.remove(),ih=void 0)}})},[!0===e.isActive?t("div",{staticClass:"q-loading fullscreen column flex-center z-max",key:ch.uid,class:ch.customClass.trim()},[t(ch.spinner,{props:{color:ch.spinnerColor,size:ch.spinnerSize}}),ch.message&&t("div",{class:"text-"+ch.messageColor,domProps:(i={},i[!0===ch.sanitize?"textContent":"innerHTML"]=ch.message,i)})||void 0]):null])}})},ch.delay)),function(t){void 0!==t&&Object(t)===t?e.show(Object.assign({},t,{group:s})):e.hide(s)}}},hide:function(t){if(!0===this.isActive){if(void 0===t)uh={};else{if(void 0===uh[t])return;delete uh[t];var e=Object.keys(uh);if(0!==e.length){var i=e[e.length-1];return void this.show({group:i})}}void 0!==nh&&(clearTimeout(nh),nh=void 0),this.isActive=!1}},setDefaults:function(t){!0===On(t)&&Object.assign(dh,t)},install:function(t){var e=t.$q,i=t.cfg.loading;this.setDefaults(i),e.loading=this}};function vh(t){t.title&&(t.title=t.titleTemplate?t.titleTemplate(t.title):t.title,delete t.titleTemplate),[["meta","content"],["link","href"]].forEach(function(e){var i=t[e[0]],n=e[1];for(var s in i){var o=i[s];o.template&&(1===Object.keys(o).length?delete i[s]:(o[n]=o.template(o[n]||""),delete o.template))}})}function gh(t,e){if(Object.keys(t).length!==Object.keys(e).length)return!0;for(var i in t)if(t[i]!==e[i])return!0}function _h(t){return!1===["class","style"].includes(t)}function bh(t){return!1===["lang","dir"].includes(t)}function yh(t,e){!0!==t._inactive&&(!0===kh(t)&&(Cr(!0,e,t.__qMeta),!0===t.$options.meta.stopPropagation)||t.$children.forEach(function(t){yh(t,e)}))}function Sh(){!0===ph&&(ph=!1,this.$root.__currentMeta=window.__Q_META__);var t,e,i,n={title:"",titleTemplate:null,meta:{},link:{},script:{},htmlAttr:{},bodyAttr:{}};yh(this.$root,n),vh(n),t=function(t,e){var i={},n={};return void 0===t?{add:e,remove:n}:(t.title!==e.title&&(i.title=e.title),["meta","link","script","htmlAttr","bodyAttr"].forEach(function(s){var o=t[s],r=e[s];if(n[s]=[],void 0!==o&&null!==o){for(var a in i[s]={},o)!1===r.hasOwnProperty(a)&&n[s].push(a);for(var l in r)!1===o.hasOwnProperty(l)?i[s][l]=r[l]:!0===gh(o[l],r[l])&&(n[s].push(l),i[s][l]=r[l])}else i[s]=r}),{add:i,remove:n})}(this.$root.__currentMeta,n),e=t.add,i=t.remove,e.title&&(document.title=e.title),Object.keys(i).length>0&&(["meta","link","script"].forEach(function(t){i[t].forEach(function(e){document.head.querySelector(t+'[data-qmeta="'+e+'"]').remove()})}),i.htmlAttr.filter(bh).forEach(function(t){document.documentElement.removeAttribute(t)}),i.bodyAttr.filter(_h).forEach(function(t){document.body.removeAttribute(t)})),["meta","link","script"].forEach(function(t){var i=e[t];for(var n in i){var s=document.createElement(t);for(var o in i[n])"innerHTML"!==o&&s.setAttribute(o,i[n][o]);s.setAttribute("data-qmeta",n),"script"===t&&(s.innerHTML=i[n].innerHTML||""),document.head.appendChild(s)}}),Object.keys(e.htmlAttr).filter(bh).forEach(function(t){document.documentElement.setAttribute(t,e.htmlAttr[t]||"")}),Object.keys(e.bodyAttr).filter(_h).forEach(function(t){document.body.setAttribute(t,e.bodyAttr[t]||"")}),this.$root.__currentMeta=n}function xh(t){return function(e){var i=t[e];return e+(!0!==i&&void 0!==i?'="'+i+'"':"")}}function wh(t,e,i){var n={title:"",titleTemplate:null,meta:{},link:{},htmlAttr:{},bodyAttr:{},noscript:{}};yh(t,n),vh(n);var s=void 0!==i&&void 0!==i.nonce?' nonce="'+i.nonce+'"':"",o={"%%Q_HTML_ATTRS%%":Object.keys(n.htmlAttr).filter(bh).map(xh(n.htmlAttr)).join(" "),"%%Q_HEAD_TAGS%%":function(t){var e="";return t.title&&(e+=""+t.title+""),["meta","link","script"].forEach(function(i){var n=t[i];for(var s in n){var o=Object.keys(n[s]).filter(function(t){return"innerHTML"!==t}).map(xh(n[s]));e+="<"+i+" "+o.join(" ")+' data-qmeta="'+s+'">',"script"===i&&(e+=(n[s].innerHTML||"")+"<\/script>")}}),e}(n),"%%Q_BODY_ATTRS%%":Object.keys(n.bodyAttr).filter(_h).map(xh(n.bodyAttr)).join(" "),"%%Q_BODY_TAGS%%":Object.keys(n.noscript).map(function(t){return'"}).join("")+"window.__Q_META__="+(delete n.noscript&&JSON.stringify(n))+"<\/script>"};return Object.keys(o).forEach(function(t){e=e.replace(t,o[t])}),e}function Ch(){"function"==typeof this.$options.meta?(void 0===this.$options.computed&&(this.$options.computed={}),this.$options.computed.__qMeta=this.$options.meta):!0===kh(this)&&(this.__qMeta=this.$options.meta)}function kh(t){return void 0!==t.$options.meta&&null!==t.$options.meta}function qh(){!0===kh(this)&&this.__qMetaUpdate()}!1===n&&i.default.util.defineReactive(mh,"isActive",mh.isActive);var Th={install:function(t){var e=t.queues;!0===n?(i.default.prototype.$getMetaHTML=function(t){return function(e,i){return wh(t,e,i)}},i.default.mixin({beforeCreate:Ch}),e.server.push(function(t,e){e.ssr.Q_HTML_ATTRS+=" %%Q_HTML_ATTRS%%",Object.assign(e.ssr,{Q_HEAD_TAGS:"%%Q_HEAD_TAGS%%",Q_BODY_ATTRS:"%%Q_BODY_ATTRS%%",Q_BODY_TAGS:"%%Q_BODY_TAGS%%"})})):(ph=s,i.default.mixin({beforeCreate:Ch,created:function(){!0===kh(this)&&(this.__qMetaUnwatch=this.$watch("__qMeta",this.__qMetaUpdate))},activated:qh,deactivated:qh,beforeMount:qh,destroyed:function(){!0===kh(this)&&(this.__qMetaUnwatch(),this.__qMetaUpdate())},methods:{__qMetaUpdate:function(){clearTimeout(fh),fh=setTimeout(Sh.bind(this),50)}}}))}};var Mh,$h=0,Lh={},Eh={},Oh={},Ah={},Bh=/^\s*$/,Ph=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],zh=["top-left","top-right","bottom-left","bottom-right"],Ih={positive:{icon:function(t){return t.iconSet.type.positive},color:"positive"},negative:{icon:function(t){return t.iconSet.type.negative},color:"negative"},warning:{icon:function(t){return t.iconSet.type.warning},color:"warning",textColor:"dark"},info:{icon:function(t){return t.iconSet.type.info},color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function Rh(t,e,i){if(!t)return Dh("parameter required");var n,s={textColor:"white"};if(!0!==t.ignoreDefaults&&Object.assign(s,Lh),!1===On(t)&&(s.type&&Object.assign(s,Ih[s.type]),t={message:t}),Object.assign(s,Ih[t.type||s.type],t),"function"==typeof s.icon&&(s.icon=s.icon(e.$q)),s.spinner?!0===s.spinner&&(s.spinner=qe):s.spinner=!1,s.meta={hasMedia:Boolean(!1!==s.spinner||s.icon||s.avatar),hasText:Fh(s.message)||Fh(s.caption)},s.position){if(!1===Ph.includes(s.position))return Dh("wrong position",t)}else s.position="bottom";if(void 0===s.timeout)s.timeout=5e3;else{var o=parseInt(s.timeout,10);if(isNaN(o)||o<0)return Dh("wrong timeout",t);s.timeout=o}0===s.timeout?s.progress=!1:!0===s.progress&&(s.meta.progressClass="q-notification__progress"+(s.progressClass?" "+s.progressClass:""),s.meta.progressStyle={animationDuration:s.timeout+1e3+"ms"});var r=(!0===Array.isArray(t.actions)?t.actions:[]).concat(!0!==t.ignoreDefaults&&!0===Array.isArray(Lh.actions)?Lh.actions:[]).concat(void 0!==Ih[t.type]&&!0===Array.isArray(Ih[t.type].actions)?Ih[t.type].actions:[]),a=s.closeBtn;if(a&&r.push({label:"string"==typeof a?a:e.$q.lang.label.close}),s.actions=r.map(function(t){var e=t.handler,i=t.noDismiss,n=t.style,s=t.class,o=t.attrs,r=function(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&-1===e.indexOf(n)&&(i[n]=t[n]);return i}(t,["handler","noDismiss","style","class","attrs"]);return{staticClass:s,style:n,props:Object.assign({},{flat:!0},r),attrs:o,on:{click:"function"==typeof e?function(){e(),!0!==i&&d()}:function(){d()}}}}),void 0===s.multiLine&&(s.multiLine=s.actions.length>1),Object.assign(s.meta,{staticClass:"q-notification row items-stretch q-notification--"+(!0===s.multiLine?"multi-line":"standard")+(void 0!==s.color?" bg-"+s.color:"")+(void 0!==s.textColor?" text-"+s.textColor:"")+(void 0!==s.classes?" "+s.classes:""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(!0===s.multiLine?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(!0===s.multiLine?"":" col"),leftClass:!0===s.meta.hasText?"additional":"single",attrs:Object.assign({},{role:"alert"},s.attrs)}),!1===s.group?(s.group=void 0,s.meta.group=void 0):(void 0!==s.group&&!0!==s.group||(s.group=[s.message,s.caption,s.multiline].concat(s.actions.map(function(t){var e=t.props;return e.label+"*"+e.icon})).join("|")),s.meta.group=s.group+"|"+s.position),0===s.actions.length?s.actions=void 0:s.meta.actionsClass="q-notification__actions row items-center "+(!0===s.multiLine?"justify-end":"col-auto")+(!0===s.meta.hasMedia?" q-notification__actions--with-media":""),void 0!==i){clearTimeout(i.notif.meta.timer),s.meta.uid=i.notif.meta.uid;var l=Oh[s.position].indexOf(i.notif);Oh[s.position][l]=s}else{var c=Eh[s.meta.group];if(void 0===c){if(s.meta.uid=$h++,s.meta.badge=1,-1!==["left","right","center"].indexOf(s.position))Oh[s.position].splice(Math.floor(Oh[s.position].length/2),0,s);else{var u=s.position.indexOf("top")>-1?"unshift":"push";Oh[s.position][u](s)}void 0!==s.group&&(Eh[s.meta.group]=s)}else{if(clearTimeout(c.meta.timer),void 0!==s.badgePosition){if(!1===zh.includes(s.badgePosition))return Dh("wrong badgePosition",t)}else s.badgePosition="top-"+(s.position.indexOf("left")>-1?"right":"left");s.meta.uid=c.meta.uid,s.meta.badge=c.meta.badge+1,s.meta.badgeClass="q-notification__badge q-notification__badge--"+s.badgePosition+(void 0!==s.badgeColor?" bg-"+s.badgeColor:"")+(void 0!==s.badgeTextColor?" text-"+s.badgeTextColor:"")+(s.badgeClass?" "+s.badgeClass:"");var h=Oh[s.position].indexOf(c);Oh[s.position][h]=Eh[s.meta.group]=s}}var d=function(){!function(t,e){clearTimeout(t.meta.timer);var i=Oh[t.position].indexOf(t);if(-1!==i){void 0!==t.group&&delete Eh[t.meta.group];var n=e.$refs[""+t.meta.uid];if(n){var s=getComputedStyle(n),o=s.width,r=s.height;n.style.left=n.offsetLeft+"px",n.style.width=o,n.style.height=r}Oh[t.position].splice(i,1),e.$forceUpdate(),"function"==typeof t.onDismiss&&t.onDismiss()}}(s,e),n=void 0};return e.$forceUpdate(),s.timeout>0&&(s.meta.timer=setTimeout(function(){d()},s.timeout+1e3)),void 0!==s.group?function(e){void 0!==e?Dh("trying to update a grouped one which is forbidden",t):d()}:(n={dismiss:d,config:t,notif:s},void 0===i?function(t){void 0!==n&&(void 0===t?n.dismiss():Rh(Object.assign({},n.config,t,{group:!1,position:s.position}),e,n))}:void Object.assign(i,n))}function Fh(t){return void 0!==t&&null!==t&&!0!==Bh.test(t)}function Dh(t,e){return console.error("Notify: "+t,e),!1}var jh={name:"QNotifications",devtools:{hide:!0},beforeCreate:function(){void 0===this._routerRoot&&(this._routerRoot={})},render:function(t){return t("div",{staticClass:"q-notifications"},Ph.map(function(e){return t("transition-group",{key:e,staticClass:Ah[e],tag:"div",props:{name:"q-notification--"+e,mode:"out-in"}},Oh[e].map(function(e){var i=e.meta,n=[];if(!0===i.hasMedia&&(!1!==e.spinner?n.push(t(e.spinner,{staticClass:"q-notification__spinner q-notification__spinner--"+i.leftClass,props:{color:e.spinnerColor,size:e.spinnerSize}})):e.icon?n.push(t(ae,{staticClass:"q-notification__icon q-notification__icon--"+i.leftClass,attrs:{role:"img"},props:{name:e.icon,color:e.iconColor,size:e.iconSize}})):e.avatar&&n.push(t(le,{staticClass:"q-notification__avatar q-notification__avatar--"+i.leftClass},[t("img",{attrs:{src:e.avatar,"aria-hidden":"true"}})]))),!0===i.hasText){var s,o={staticClass:"q-notification__message col"};if(!0===e.html)o.domProps={innerHTML:e.caption?"
"+e.message+'
'+e.caption+"
":e.message};else{var r=[e.message];s=e.caption?[t("div",r),t("div",{staticClass:"q-notification__caption"},[e.caption])]:r}n.push(t("div",o,s))}var a=[t("div",{staticClass:i.contentClass},n)];return!0===e.progress&&a.push(t("div",{key:i.uid+"|p|"+i.badge,staticClass:i.progressClass,style:i.progressStyle})),void 0!==e.actions&&a.push(t("div",{staticClass:i.actionsClass},e.actions.map(function(e){return t(Xe,Object.assign({},e))}))),i.badge>1&&a.push(t("div",{key:i.uid+"|"+i.badge,staticClass:i.badgeClass,style:e.badgeStyle},[i.badge])),t("div",{ref:""+i.uid,key:i.uid,staticClass:i.staticClass,attrs:i.attrs},[t("div",{staticClass:i.wrapperClass},a)])}))}))},mounted:function(){var t=this;if(void 0!==this.$q.fullscreen&&!0===this.$q.fullscreen.isCapable){var e=function(){var e=Ee(t.$q.fullscreen.activeEl);t.$el.parentElement!==e&&e.appendChild(t.$el)};this.unwatchFullscreen=this.$watch("$q.fullscreen.activeEl",H(e,50)),!0===this.$q.fullscreen.isActive&&e()}},beforeDestroy:function(){void 0!==this.unwatchFullscreen&&this.unwatchFullscreen()}},Vh={setDefaults:function(t){!0!==n&&!0===On(t)&&Object.assign(Lh,t)},registerType:function(t,e){!0!==n&&!0===On(e)&&(Ih[t]=e)},install:function(t){var e=t.$q;if(e.notify=this.create=!0===n?p:function(t){return Rh(t,Mh)},e.notify.setDefaults=this.setDefaults,e.notify.registerType=this.registerType,void 0!==e.config.notify&&this.setDefaults(e.config.notify),!0!==n){Ph.forEach(function(t){Oh[t]=[];var e=!0===["left","center","right"].includes(t)?"center":t.indexOf("top")>-1?"top":"bottom",i=t.indexOf("left")>-1?"start":t.indexOf("right")>-1?"end":"center",n=["left","right"].includes(t)?"items-"+("left"===t?"start":"end")+" justify-center":"center"===t?"flex-center":"items-"+i;Ah[t]="q-notifications__list q-notifications__list--"+e+" fixed column no-wrap "+n});var s=document.createElement("div");document.body.appendChild(s),(Mh=new i.default(jh)).$mount(s)}}};function Nh(){var t=function(){return null};return{has:function(){return!1},getLength:function(){return 0},getItem:t,getIndex:t,getKey:t,getAll:function(){},getAllKeys:function(){return[]},set:p,remove:p,clear:p,isEmpty:function(){return!0}}}function Hh(t){var e=window[t+"Storage"],i=function(t,i){var n=e.getItem(t);return n?function(t,e){if(t.length<9)return t;var i=t.substr(0,8),n=t.substring(9);switch(i){case"__q_date":return new Date(n);case"__q_expr":return new RegExp(n);case"__q_numb":return Number(n);case"__q_bool":return Boolean("1"===n);case"__q_strn":return""+n;case"__q_objt":return JSON.parse(n,e);default:return t}}(n,i):null};return{has:function(t,i){return null!==e.getItem(t,i)},getLength:function(){return e.length},getItem:i,getIndex:function(t,n){return t=l)e();else{var d=!0===a?h:u[h];t[d](c).then(function(t){!0!==o?(c[d]={key:d,status:"fulfilled",value:t},setTimeout(r)):e()}).catch(function(t){if(!0!==o){var s={key:d,status:"rejected",reason:t};if(c[d]=s,!0===n)return o=!0,void i(Object.assign({},s,{resultAggregator:c}));setTimeout(r)}else e()})}}()}));return Promise.all(h).then(function(){return c})},scroll:tn,throttle:vs,uid:bn});return i.default.use({install:function(t,e){if(void 0===e&&(e={}),!0!==this.__qInstalled){this.__qInstalled=!0;var i=bt.config=Object.freeze(e.config||{});if(h.install(bt,_t),pt.install(_t,i),Y.install(bt,_t,i),N.install(bt,_t),U.install(bt,_t,i),Z.install(i),et.install(bt,_t,e.lang),vt.install(bt,_t,e.iconSet),!0===n?t.mixin({beforeCreate:function(){this.$q=this.$root.$options.$q}}):t.prototype.$q=bt,e.components&&Object.keys(e.components).forEach(function(i){var n=e.components[i];"function"==typeof n&&t.component(n.options.name,n)}),e.directives&&Object.keys(e.directives).forEach(function(i){var n=e.directives[i];void 0!==n.name&&void 0!==n.unbind&&t.directive(n.name,n)}),e.plugins){var s={$q:bt,queues:_t,cfg:i};Object.keys(e.plugins).forEach(function(t){var i=e.plugins[t];"function"==typeof i.install&&!1===gt.includes(i)&&i.install(s)})}}}},{components:Bc,directives:Eu,plugins:Uh,config:window.quasarConfig||{}}),Object.assign({},{version:"1.22.0-beta.3",lang:et,iconSet:vt,components:Bc,directives:Eu,plugins:Uh,utils:Gh},Bc,Eu,Uh,Gh)}); \ No newline at end of file diff --git a/dist/quasar.umd.modern.js b/dist/quasar.umd.modern.js new file mode 100644 index 00000000000..537fb684971 --- /dev/null +++ b/dist/quasar.umd.modern.js @@ -0,0 +1,43189 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('vue')) : + typeof define === 'function' && define.amd ? define(['vue'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Quasar = factory(global.Vue)); +})(this, (function (Vue) { 'use strict'; + + function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + + var Vue__default = /*#__PURE__*/_interopDefaultLegacy(Vue); + + var version = "1.22.0-beta.3"; + + /* eslint-disable no-useless-escape */ + + const isSSR = typeof window === 'undefined'; + let fromSSR = false; + let onSSR = isSSR; + let iosCorrection; + + function getMatch (userAgent, platformMatch) { + const match = /(edge|edga|edgios)\/([\w.]+)/.exec(userAgent) || + /(opr)[\/]([\w.]+)/.exec(userAgent) || + /(vivaldi)[\/]([\w.]+)/.exec(userAgent) || + /(chrome|crios)[\/]([\w.]+)/.exec(userAgent) || + /(iemobile)[\/]([\w.]+)/.exec(userAgent) || + /(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(userAgent) || + /(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(userAgent) || + /(firefox|fxios)[\/]([\w.]+)/.exec(userAgent) || + /(webkit)[\/]([\w.]+)/.exec(userAgent) || + /(opera)(?:.*version|)[\/]([\w.]+)/.exec(userAgent) || + /(msie) ([\w.]+)/.exec(userAgent) || + (userAgent.indexOf('trident') >= 0 && /(rv)(?::| )([\w.]+)/.exec(userAgent)) || + (userAgent.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(userAgent)) || + []; + + return { + browser: match[5] || match[3] || match[1] || '', + version: match[2] || match[4] || '0', + versionNumber: match[4] || match[2] || '0', + platform: platformMatch[0] || '' + } + } + + function getPlatformMatch (userAgent) { + return /(ipad)/.exec(userAgent) || + /(ipod)/.exec(userAgent) || + /(windows phone)/.exec(userAgent) || + /(iphone)/.exec(userAgent) || + /(kindle)/.exec(userAgent) || + /(silk)/.exec(userAgent) || + /(android)/.exec(userAgent) || + /(win)/.exec(userAgent) || + /(mac)/.exec(userAgent) || + /(linux)/.exec(userAgent) || + /(cros)/.exec(userAgent) || + /(playbook)/.exec(userAgent) || + /(bb)/.exec(userAgent) || + /(blackberry)/.exec(userAgent) || + [] + } + + const hasTouch = isSSR === false + ? 'ontouchstart' in window || window.navigator.maxTouchPoints > 0 + : false; + + function applyIosCorrection (is) { + iosCorrection = { is: { ...is } }; + + delete is.mac; + delete is.desktop; + + const platform = Math.min(window.innerHeight, window.innerWidth) > 414 + ? 'ipad' + : 'iphone'; + + Object.assign(is, { + mobile: true, + ios: true, + platform, + [ platform ]: true + }); + } + + function getPlatform (UA) { + const + userAgent = UA.toLowerCase(), + platformMatch = getPlatformMatch(userAgent), + matched = getMatch(userAgent, platformMatch), + browser = {}; + + if (matched.browser) { + browser[matched.browser] = true; + browser.version = matched.version; + browser.versionNumber = parseInt(matched.versionNumber, 10); + } + + if (matched.platform) { + browser[matched.platform] = true; + } + + const knownMobiles = browser.android || + browser.ios || + browser.bb || + browser.blackberry || + browser.ipad || + browser.iphone || + browser.ipod || + browser.kindle || + browser.playbook || + browser.silk || + browser['windows phone']; + + // These are all considered mobile platforms, meaning they run a mobile browser + if (knownMobiles === true || userAgent.indexOf('mobile') > -1) { + browser.mobile = true; + + if (browser.edga || browser.edgios) { + browser.edge = true; + matched.browser = 'edge'; + } + else if (browser.crios) { + browser.chrome = true; + matched.browser = 'chrome'; + } + else if (browser.fxios) { + browser.firefox = true; + matched.browser = 'firefox'; + } + } + // If it's not mobile we should consider it's desktop platform, meaning it runs a desktop browser + // It's a workaround for anonymized user agents + // (browser.cros || browser.mac || browser.linux || browser.win) + else { + browser.desktop = true; + } + + // Set iOS if on iPod, iPad or iPhone + if (browser.ipod || browser.ipad || browser.iphone) { + browser.ios = true; + } + + if (browser['windows phone']) { + browser.winphone = true; + delete browser['windows phone']; + } + + // Chrome, Opera 15+, Vivaldi and Safari are webkit based browsers + if ( + browser.chrome || + browser.opr || + browser.safari || + browser.vivaldi || + // we expect unknown, non iOS mobile browsers to be webkit based + ( + browser.mobile === true && + browser.ios !== true && + knownMobiles !== true + ) + ) { + browser.webkit = true; + } + + // IE11 has a new token so we will assign it msie to avoid breaking changes + if (browser.rv || browser.iemobile) { + matched.browser = 'ie'; + browser.ie = true; + } + + // Blackberry browsers are marked as Safari on BlackBerry + if (browser.safari && browser.blackberry || browser.bb) { + matched.browser = 'blackberry'; + browser.blackberry = true; + } + + // Playbook browsers are marked as Safari on Playbook + if (browser.safari && browser.playbook) { + matched.browser = 'playbook'; + browser.playbook = true; + } + + // Opera 15+ are identified as opr + if (browser.opr) { + matched.browser = 'opera'; + browser.opera = true; + } + + // Stock Android browsers are marked as Safari on Android. + if (browser.safari && browser.android) { + matched.browser = 'android'; + browser.android = true; + } + + // Kindle browsers are marked as Safari on Kindle + if (browser.safari && browser.kindle) { + matched.browser = 'kindle'; + browser.kindle = true; + } + + // Kindle Silk browsers are marked as Safari on Kindle + if (browser.safari && browser.silk) { + matched.browser = 'silk'; + browser.silk = true; + } + + if (browser.vivaldi) { + matched.browser = 'vivaldi'; + browser.vivaldi = true; + } + + // Assign the name and platform variable + browser.name = matched.browser; + browser.platform = matched.platform; + + if (isSSR === false) { + if (userAgent.indexOf('electron') > -1) { + browser.electron = true; + } + else if (document.location.href.indexOf('-extension://') > -1) { + browser.bex = true; + } + else { + if (window.Capacitor !== void 0) { + browser.capacitor = true; + browser.nativeMobile = true; + browser.nativeMobileWrapper = 'capacitor'; + } + else if (window._cordovaNative !== void 0 || window.cordova !== void 0) { + browser.cordova = true; + browser.nativeMobile = true; + browser.nativeMobileWrapper = 'cordova'; + } + else if (window.matchMedia('(display-mode: standalone)').matches === true) { + browser.standalone = true; + } + + if ( + hasTouch === true && + browser.mac === true && + ( + (browser.desktop === true && browser.safari === true) || + ( + browser.nativeMobile === true && + browser.android !== true && + browser.ios !== true && + browser.ipad !== true + ) + ) + ) { + /* + * Correction needed for iOS since the default + * setting on iPad is to request desktop view; if we have + * touch support and the user agent says it's a + * desktop, we infer that it's an iPhone/iPad with desktop view + * so we must fix the false positives + */ + applyIosCorrection(browser); + } + } + + fromSSR = browser.nativeMobile === void 0 && + browser.electron === void 0 && + document.querySelector('[data-server-rendered]') !== null; + + if (fromSSR === true) { + onSSR = true; + } + } + + return browser + } + + const userAgent = isSSR !== true + ? navigator.userAgent || navigator.vendor || window.opera + : ''; + + const ssrClient = { + has: { + touch: false, + webStorage: false + }, + within: { iframe: false } + }; + + // We export "client" for hydration error-free parts, + // like touch directives who do not (and must NOT) wait + // for the client takeover; + // Do NOT import this directly in your app, unless you really know + // what you are doing. + const client = isSSR === false + ? { + userAgent, + is: getPlatform(userAgent), + has: { + touch: hasTouch, + webStorage: (() => { + try { + if (window.localStorage) { + return true + } + } + catch (e) {} + return false + })() + }, + within: { + iframe: window.self !== window.top + } + } + : ssrClient; + + const Platform = { + install ($q, queues) { + if (isSSR === true) { + // we're on server-side, so we push + // to the server queue instead of + // applying directly + queues.server.push((q, ctx) => { + q.platform = this.parseSSR(ctx.ssr); + }); + } + else if (fromSSR === true) { + // must match with server-side before + // client taking over in order to prevent + // hydration errors + Object.assign(this, client, iosCorrection, ssrClient); + + // takeover should increase accuracy for + // the rest of the props; we also avoid + // hydration errors + queues.takeover.push(q => { + onSSR = fromSSR = false; + Object.assign(q.platform, client); + iosCorrection = void 0; + }); + + // we need to make platform reactive + // for the takeover phase + Vue__default["default"].util.defineReactive($q, 'platform', this); + } + else { + // we don't have any business with SSR, so + // directly applying... + Object.assign(this, client); + $q.platform = this; + } + } + }; + + if (isSSR === true) { + Platform.parseSSR = (/* ssrContext */ ssr) => { + const userAgent = ssr.req.headers['user-agent'] || ssr.req.headers['User-Agent'] || ''; + return { + ...client, + userAgent, + is: getPlatform(userAgent) + } + }; + } + else { + client.is.ios === true && + window.navigator.vendor.toLowerCase().indexOf('apple') === -1; + } + + const listenOpts = { + hasPassive: false, + passiveCapture: true, + notPassiveCapture: true + }; + + try { + var opts = Object.defineProperty({}, 'passive', { + get () { + Object.assign(listenOpts, { + hasPassive: true, + passive: { passive: true }, + notPassive: { passive: false }, + passiveCapture: { passive: true, capture: true }, + notPassiveCapture: { passive: false, capture: true } + }); + } + }); + window.addEventListener('qtest', null, opts); + window.removeEventListener('qtest', null, opts); + } + catch (e) {} + + function noop () {} + + function leftClick (e) { + return e.button === 0 + } + + function middleClick (e) { + return e.button === 1 + } + + function rightClick (e) { + return e.button === 2 + } + + function position (e) { + if (e.touches && e.touches[0]) { + e = e.touches[0]; + } + else if (e.changedTouches && e.changedTouches[0]) { + e = e.changedTouches[0]; + } + else if (e.targetTouches && e.targetTouches[0]) { + e = e.targetTouches[0]; + } + + return { + top: e.clientY, + left: e.clientX + } + } + + function getEventPath (e) { + if (e.path) { + return e.path + } + if (e.composedPath) { + return e.composedPath() + } + + const path = []; + let el = e.target; + + while (el) { + path.push(el); + + if (el.tagName === 'HTML') { + path.push(document); + path.push(window); + return path + } + + el = el.parentElement; + } + } + + function eventOnAncestors (e, el) { + const { target } = e; + + while (el !== null && el !== void 0) { + if (el === target) { + return true + } + el = el.parentNode; + } + + return false + } + + // Reasonable defaults + const + LINE_HEIGHT = 40, + PAGE_HEIGHT = 800; + + function getMouseWheelDistance (e) { + let x = e.deltaX, y = e.deltaY; + + if ((x || y) && e.deltaMode) { + const multiplier = e.deltaMode === 1 ? LINE_HEIGHT : PAGE_HEIGHT; + x *= multiplier; + y *= multiplier; + } + + if (e.shiftKey && !x) { + [y, x] = [x, y]; + } + + return { x, y } + } + + function stop (e) { + e.stopPropagation(); + } + + function prevent (e) { + e.cancelable !== false && e.preventDefault(); + } + + function stopAndPrevent (e) { + e.cancelable !== false && e.preventDefault(); + e.stopPropagation(); + } + + function preventDraggable (el, status) { + if (el === void 0 || (status === true && el.__dragPrevented === true)) { + return + } + + const fn = status === true + ? el => { + el.__dragPrevented = true; + el.addEventListener('dragstart', prevent, listenOpts.notPassiveCapture); + } + : el => { + delete el.__dragPrevented; + el.removeEventListener('dragstart', prevent, listenOpts.notPassiveCapture); + }; + + el.querySelectorAll('a, img').forEach(fn); + } + + function create (name, { bubbles = false, cancelable = false } = {}) { + try { + return new CustomEvent(name, { bubbles, cancelable }) + } + catch (e) { + // IE doesn't support `new Event()`, so... + const evt = document.createEvent('Event'); + evt.initEvent(name, bubbles, cancelable); + return evt + } + } + + function addEvt (ctx, targetName, events) { + const name = `__q_${targetName}_evt`; + + ctx[name] = ctx[name] !== void 0 + ? ctx[name].concat(events) + : events; + + events.forEach(evt => { + evt[0].addEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]]); + }); + } + + function cleanEvt (ctx, targetName) { + const name = `__q_${targetName}_evt`; + + if (ctx[name] !== void 0) { + ctx[name].forEach(evt => { + evt[0].removeEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]]); + }); + ctx[name] = void 0; + } + } + + /* + * also update /types/utils/event.d.ts + */ + + var event = { + listenOpts, + leftClick, + middleClick, + rightClick, + position, + getEventPath, + eventOnAncestors, + getMouseWheelDistance, + stop, + prevent, + stopAndPrevent, + preventDraggable, + create + }; + + const isJapanese = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/; + const isChinese = /[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u; + const isKorean = /[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/; + const isPlainText = /[a-z0-9_ -]$/i; + + const props$2 = [ + 'isKeyboard', + 'isComposing', + + 'isPointer', + 'isMouse', + 'isTouch', + 'isDrag', + + 'isContext', + + 'isPending', + + 'event' + ]; + + function getObject$1 () { + return props$2.reduce((acc, type) => { + acc[type] = type === 'event' ? null : false; + return acc + }, {}) + } + + const config = getObject$1(); + config.isComposing = void 0; + + const eventsTouch = [ + ['touchstart', { ...config, isTouch: true, isPointer: true, isPending: true }, true], + ['touchend', { ...config, isTouch: true, isPointer: true, isPending: false }], + ['touchcancel', { ...config, isTouch: true, isPointer: true, isPending: false }] + ]; + + const eventsCleanClick = ['mousestart', 'touchstart', 'dragstart']; + + const eventsTouchEnd = eventsTouch.slice(1); + + const { passiveCapture: passiveCapture$3, notPassiveCapture: notPassiveCapture$1 } = listenOpts; + + const preventClickCleanupHandlers = []; + + function clickCleanup () { + const { documentElement } = document; + const fns = preventClickCleanupHandlers.slice(); + + preventClickCleanupHandlers.length = 0; + + fns.forEach(fn => { + documentElement.removeEventListener('click', fn, notPassiveCapture$1); + }); + } + + const Interaction = { + install ($q, queues) { + if (isSSR === true) { + queues.server.push((q) => { + q.interaction = getObject$1(); + q.interaction.preventClick = noop; + }); + return + } + + Object.assign(this, getObject$1()); + + const self = this; + + props$2.forEach(prop => { + Vue__default["default"].util.defineReactive(self, prop, self[prop]); + }); + Vue__default["default"].util.defineReactive($q, 'interaction', this); + + const fnFactory = (eventType, props, touchLocal) => { + const setStateFns = Object.keys(props) + .filter(key => props[key] !== void 0) + .map(key => { + const value = props[key]; + + if (typeof value === 'function') { + return event => { + self[key] = value(event); + } + } + + return () => { + self[key] = value; + } + }); + + const touchLocalFn = typeof touchLocal === 'function' + ? touchLocal + : ( + touchLocal === true + ? event => { + eventsTouchEnd.forEach(setConfig => { + const fn = fnFactory(setConfig[0], setConfig[1], () => { + eventsTouchEnd.forEach(clearConfig => { + event.target.removeEventListener(clearConfig[0], fn, passiveCapture$3); + }); + }); + event.target.addEventListener(config[0], fn, passiveCapture$3); + }); + } + : noop + ); + + const clickCleanupFn = eventsCleanClick.includes(eventType) === true + ? clickCleanup + : noop; + + return event => { + setStateFns.forEach(fn => { + fn(event); + }); + + self.event = event; + + touchLocalFn(event); + + clickCleanupFn(); + } + }; + + const { documentElement } = document; + const checkComposition = client.is.firefox === true + ? text => isPlainText.test(text) === false + : text => (isJapanese.test(text) === true || isChinese.test(text) === true || isKorean.test(text) === true); + const events = [ + ['keydown', { ...config, isKeyboard: true, isPending: true }], + ['keypress', { ...config, isKeyboard: true, isPending: true }], + ['keyup', { ...config, isKeyboard: true, isPending: false }], + + client.is.ios === true + ? ['compositionstart', { + isComposing: ev => { + ev.target.qComposing = true; + return true + } + }] + : ['compositionupdate', { + isComposing: ev => { + if ( + ev.target.qComposing !== true && + typeof ev.data === 'string' && + checkComposition(ev.data) === true + ) { + ev.target.qComposing = true; + } + return true + } + }], + ['compositionend', { + isComposing: ev => { + if (ev.target.qComposing === true) { + ev.target.qComposing = false; + } + return false + } + }], + + ['mousedown', { ...config, isMouse: true, isPointer: true, isPending: true }], + ['mouseup', { ...config, isMouse: true, isPointer: true, isPending: false }], + + ['dragstart', { isKeyboard: false, isDrag: true, isPending: true }], + ['dragend', { isKeyboard: false, isDrag: true, isPending: false }], + ['dragcancel', { isKeyboard: false, isDrag: true, isPending: false }], + ['drop', { isKeyboard: false, isDrag: true, isPending: false }], + + ['contextmenu', { isContext: true, isPending: false }] + ]; + + events.forEach(config => { + documentElement.addEventListener(config[0], fnFactory.apply(this, config), passiveCapture$3); + }); + + if (client.has.touch === true) { + eventsTouch.forEach(config => { + documentElement.addEventListener(config[0], fnFactory.apply(this, config), passiveCapture$3); + }); + } + }, + + preventClick (target, stop) { + const { documentElement } = document; + const fn = evt => { + if (target === evt.target) { + if (stop === true) { + stopAndPrevent(evt); + } + else { + prevent(evt); + } + } + clickCleanup(); + }; + + documentElement.addEventListener('click', fn, notPassiveCapture$1); + + preventClickCleanupHandlers.push(fn); + } + }; + + function debounce (fn, wait = 250, immediate) { + let timeout; + + function debounced (/* ...args */) { + const args = arguments; + + const later = () => { + timeout = void 0; + if (immediate !== true) { + fn.apply(this, args); + } + }; + + clearTimeout(timeout); + if (immediate === true && timeout === void 0) { + fn.apply(this, args); + } + timeout = setTimeout(later, wait); + } + + debounced.cancel = () => { + clearTimeout(timeout); + }; + + return debounced + } + + const SIZE_LIST = ['sm', 'md', 'lg', 'xl']; + const { passive: passive$4 } = listenOpts; + + var Screen = { + width: 0, + height: 0, + + name: 'xs', + + sizes: { + sm: 600, + md: 1024, + lg: 1440, + xl: 1920 + }, + + lt: { + sm: true, + md: true, + lg: true, + xl: true + }, + gt: { + xs: false, + sm: false, + md: false, + lg: false + }, + xs: true, + sm: false, + md: false, + lg: false, + xl: false, + + setSizes: noop, + setDebounce: noop, + + install ($q, queues, cfg) { + if (isSSR === true) { + $q.screen = this; + return + } + + const { visualViewport } = window; + const target = visualViewport || window; + const scrollingElement = document.scrollingElement || document.documentElement; + const getSize = visualViewport === void 0 || client.is.mobile === true + ? () => [ + Math.max(window.innerWidth, scrollingElement.clientWidth), + Math.max(window.innerHeight, scrollingElement.clientHeight) + ] + : () => [ + visualViewport.width * visualViewport.scale + window.innerWidth - scrollingElement.clientWidth, + visualViewport.height * visualViewport.scale + window.innerHeight - scrollingElement.clientHeight + ]; + + const classes = cfg.screen !== void 0 && cfg.screen.bodyClasses === true; + + const update = force => { + const [ w, h ] = getSize(); + + if (h !== this.height) { + this.height = h; + } + + if (w !== this.width) { + this.width = w; + } + else if (force !== true) { + return + } + + let s = this.sizes; + + this.gt.xs = w >= s.sm; + this.gt.sm = w >= s.md; + this.gt.md = w >= s.lg; + this.gt.lg = w >= s.xl; + this.lt.sm = w < s.sm; + this.lt.md = w < s.md; + this.lt.lg = w < s.lg; + this.lt.xl = w < s.xl; + this.xs = this.lt.sm; + this.sm = this.gt.xs === true && this.lt.md === true; + this.md = this.gt.sm === true && this.lt.lg === true; + this.lg = this.gt.md === true && this.lt.xl === true; + this.xl = this.gt.lg; + + s = (this.xs === true && 'xs') || + (this.sm === true && 'sm') || + (this.md === true && 'md') || + (this.lg === true && 'lg') || + 'xl'; + + if (s !== this.name) { + if (classes === true) { + document.body.classList.remove(`screen--${this.name}`); + document.body.classList.add(`screen--${s}`); + } + this.name = s; + } + }; + + let updateEvt, updateSizes = {}, updateDebounce = 16; + + this.setSizes = sizes => { + SIZE_LIST.forEach(name => { + if (sizes[name] !== void 0) { + updateSizes[name] = sizes[name]; + } + }); + }; + this.setDebounce = deb => { + updateDebounce = deb; + }; + + const start = () => { + const style = getComputedStyle(document.body); + + // if css props available + if (style.getPropertyValue('--q-size-sm')) { + SIZE_LIST.forEach(name => { + this.sizes[name] = parseInt(style.getPropertyValue(`--q-size-${name}`), 10); + }); + } + + this.setSizes = sizes => { + SIZE_LIST.forEach(name => { + if (sizes[name]) { + this.sizes[name] = sizes[name]; + } + }); + update(true); + }; + + this.setDebounce = delay => { + updateEvt !== void 0 && target.removeEventListener('resize', updateEvt, passive$4); + updateEvt = delay > 0 + ? debounce(update, delay) + : update; + target.addEventListener('resize', updateEvt, passive$4); + }; + + this.setDebounce(updateDebounce); + + if (Object.keys(updateSizes).length > 0) { + this.setSizes(updateSizes); + updateSizes = void 0; // free up memory + } + else { + update(); + } + + // due to optimizations, this would be left out otherwise + classes === true && this.name === 'xs' && + document.body.classList.add('screen--xs'); + }; + + if (fromSSR === true) { + queues.takeover.push(start); + } + else { + start(); + } + + Vue__default["default"].util.defineReactive($q, 'screen', this); + } + }; + + const Dark = { + isActive: null, + mode: false, + + install ($q, queues, { dark }) { + this.isActive = dark === 'auto' ? null : dark === true; + + if (isSSR === true) { + queues.server.push((q, ctx) => { + q.dark = { + isActive: null, + mode: false, + set: val => { + ctx.ssr.Q_BODY_CLASSES = ctx.ssr.Q_BODY_CLASSES + .replace(' body--light', '') + .replace(' body--dark-auto', '') + .replace(' body--dark', '') + + ` body--${val === true ? 'dark' : (val === 'auto' ? 'dark-auto' : 'light')}`; + + q.dark.isActive = val === 'auto' ? null : val === true; + q.dark.mode = val; + }, + toggle: () => { + q.dark.set(q.dark.isActive === false); + } + }; + + q.dark.set(dark); + }); + + this.set = noop; + return + } + + const initialVal = dark !== void 0 + ? dark + : false; + + if (fromSSR === true) { + const ssrSet = val => { + this.__fromSSR = val; + }; + + const originalSet = this.set; + + this.set = ssrSet; + ssrSet(initialVal); + + queues.takeover.push(() => { + document.body.classList.remove('body--dark-auto'); + this.set = originalSet; + this.set(this.__fromSSR); + }); + } + else { + this.set(initialVal); + } + + Vue__default["default"].util.defineReactive(this, 'isActive', this.isActive); + Vue__default["default"].util.defineReactive($q, 'dark', this); + }, + + set (val) { + this.mode = val; + + if (val === 'auto') { + if (this.__media === void 0) { + this.__media = window.matchMedia('(prefers-color-scheme: dark)'); + this.__updateMedia = () => { this.set('auto'); }; + this.__media.addListener(this.__updateMedia); + } + + val = this.__media.matches; + } + else if (this.__media !== void 0) { + this.__media.removeListener(this.__updateMedia); + this.__media = void 0; + } + + this.isActive = val === true; + + document.body.classList.remove(`body--${val === true ? 'light' : 'dark'}`); + document.body.classList.add(`body--${val === true ? 'dark' : 'light'}`); + }, + + toggle () { + Dark.set(Dark.isActive === false); + }, + + __media: void 0 + }; + + const getTrue = () => true; + + function filterInvalidPath (path) { + return typeof path === 'string' && + path !== '' && + path !== '/' && + path !== '#/' + } + + function normalizeExitPath (path) { + path.startsWith('#') === true && (path = path.substr(1)); + path.startsWith('/') === false && (path = '/' + path); + path.endsWith('/') === true && (path = path.substr(0, path.length - 1)); + return '#' + path + } + + function getShouldExitFn (cfg) { + if (cfg.backButtonExit === false) { + return () => false + } + + if (cfg.backButtonExit === '*') { + return getTrue + } + + // Add default root path + const exitPaths = [ '#/' ]; + + // Add custom exit paths + Array.isArray(cfg.backButtonExit) === true && exitPaths.push( + ...cfg.backButtonExit.filter(filterInvalidPath).map(normalizeExitPath) + ); + + return () => exitPaths.includes(window.location.hash) + } + + var History = { + __history: [], + add: noop, + remove: noop, + + install (cfg) { + if (isSSR === true) { + return + } + + const { cordova, capacitor } = client.is; + + if (cordova !== true && capacitor !== true) { + return + } + + const qConf = cfg[cordova === true ? 'cordova' : 'capacitor']; + + if (qConf !== void 0 && qConf.backButton === false) { + return + } + + // if the '@capacitor/app' plugin is not installed + // then we got nothing to do + if ( + // if we're on Capacitor mode + capacitor === true && + // and it's also not in Capacitor's main instance + (window.Capacitor === void 0 || window.Capacitor.Plugins.App === void 0) + ) { + return + } + + this.add = entry => { + if (entry.condition === void 0) { + entry.condition = getTrue; + } + this.__history.push(entry); + }; + + this.remove = entry => { + const index = this.__history.indexOf(entry); + if (index >= 0) { + this.__history.splice(index, 1); + } + }; + + const shouldExit = getShouldExitFn( + Object.assign( + { backButtonExit: true }, + qConf + ) + ); + + const backHandler = () => { + if (this.__history.length) { + const entry = this.__history[this.__history.length - 1]; + + if (entry.condition() === true) { + this.__history.pop(); + entry.handler(); + } + } + else if (shouldExit() === true) { + navigator.app.exitApp(); + } + else { + window.history.back(); + } + }; + + if (cordova === true) { + document.addEventListener('deviceready', () => { + document.addEventListener('backbutton', backHandler, false); + }); + } + else { + window.Capacitor.Plugins.App.addListener('backButton', backHandler); + } + } + }; + + var defaultLang = { + isoName: 'en-us', + nativeName: 'English (US)', + label: { + clear: 'Clear', + ok: 'OK', + cancel: 'Cancel', + close: 'Close', + set: 'Set', + select: 'Select', + reset: 'Reset', + remove: 'Remove', + update: 'Update', + create: 'Create', + search: 'Search', + filter: 'Filter', + refresh: 'Refresh', + expand: function (label) { return label ? `Expand "${label}"` : 'Expand' }, + collapse: function (label) { return label ? `Collapse "${label}"` : 'Collapse' } + }, + date: { + days: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + daysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'days' + }, + table: { + noData: 'No data available', + noResults: 'No matching records found', + loading: 'Loading...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 record selected.' + : (rows === 0 ? 'No' : rows) + ' records selected.' + }, + recordsPerPage: 'Records per page:', + allRows: 'All', + pagination: function (start, end, total) { + return start + '-' + end + ' of ' + total + }, + columns: 'Columns' + }, + editor: { + url: 'URL', + bold: 'Bold', + italic: 'Italic', + strikethrough: 'Strikethrough', + underline: 'Underline', + unorderedList: 'Unordered List', + orderedList: 'Ordered List', + subscript: 'Subscript', + superscript: 'Superscript', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Toggle Fullscreen', + quote: 'Quote', + left: 'Left align', + center: 'Center align', + right: 'Right align', + justify: 'Justify align', + print: 'Print', + outdent: 'Decrease indentation', + indent: 'Increase indentation', + removeFormat: 'Remove formatting', + formatting: 'Formatting', + fontSize: 'Font Size', + align: 'Align', + hr: 'Insert Horizontal Rule', + undo: 'Undo', + redo: 'Redo', + heading1: 'Heading 1', + heading2: 'Heading 2', + heading3: 'Heading 3', + heading4: 'Heading 4', + heading5: 'Heading 5', + heading6: 'Heading 6', + paragraph: 'Paragraph', + code: 'Code', + size1: 'Very small', + size2: 'A bit small', + size3: 'Normal', + size4: 'Medium-large', + size5: 'Big', + size6: 'Very big', + size7: 'Maximum', + defaultFont: 'Default Font', + viewSource: 'View Source' + }, + tree: { + noNodes: 'No nodes available', + noResults: 'No matching nodes found' + } + }; + + function getLocale () { + if (isSSR === true) { return } + + const val = + navigator.language || + navigator.languages[0] || + navigator.browserLanguage || + navigator.userLanguage || + navigator.systemLanguage; + + if (val) { + return val.toLowerCase() + } + } + + var lang = { + getLocale, + + install ($q, queues, lang) { + this.set = (langObject = defaultLang, ssrContext) => { + const lang = { + ...langObject, + rtl: langObject.rtl === true, + getLocale + }; + + if (isSSR === true) { + if (ssrContext === void 0) { + console.error('SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)'); + return + } + + const dir = lang.rtl === true ? 'rtl' : 'ltr'; + const attrs = `lang=${lang.isoName} dir=${dir}`; + + lang.set = ssrContext.$q.lang.set; + + ssrContext.Q_HTML_ATTRS = ssrContext.Q_PREV_LANG !== void 0 + ? ssrContext.Q_HTML_ATTRS.replace(ssrContext.Q_PREV_LANG, attrs) + : attrs; + + ssrContext.Q_PREV_LANG = attrs; + ssrContext.$q.lang = lang; + } + else { + if (fromSSR === false) { + const el = document.documentElement; + el.setAttribute('dir', lang.rtl === true ? 'rtl' : 'ltr'); + el.setAttribute('lang', lang.isoName); + } + + lang.set = this.set; + $q.lang = this.props = lang; + this.isoName = lang.isoName; + this.nativeName = lang.nativeName; + } + }; + + const initialLang = lang || defaultLang; + + if (isSSR === true) { + queues.server.push((q, ctx) => { + q.lang = {}; + q.lang.set = langObject => { + this.set(langObject, ctx.ssr); + }; + + q.lang.set(initialLang); + }); + + // one-time SSR server operation + if (this.isoName !== initialLang.isoName) { + this.isoName = initialLang.isoName; + this.nativeName = initialLang.nativeName; + this.props = initialLang; + } + } + else { + Vue__default["default"].util.defineReactive($q, 'lang', {}); + this.set(initialLang); + } + } + }; + + const reRGBA = /^rgb(a)?\((\d{1,3}),(\d{1,3}),(\d{1,3}),?([01]?\.?\d*?)?\)$/; + + function rgbToHex ({ r, g, b, a }) { + const alpha = a !== void 0; + + r = Math.round(r); + g = Math.round(g); + b = Math.round(b); + + if ( + r > 255 || + g > 255 || + b > 255 || + (alpha && a > 100) + ) { + throw new TypeError('Expected 3 numbers below 256 (and optionally one below 100)') + } + + a = alpha + ? (Math.round(255 * a / 100) | 1 << 8).toString(16).slice(1) + : ''; + + return '#' + ((b | g << 8 | r << 16) | 1 << 24).toString(16).slice(1) + a + } + + function rgbToString ({ r, g, b, a }) { + return `rgb${a !== void 0 ? 'a' : ''}(${r},${g},${b}${a !== void 0 ? ',' + (a / 100) : ''})` + } + + function hexToRgb (hex) { + if (typeof hex !== 'string') { + throw new TypeError('Expected a string') + } + + hex = hex.replace(/^#/, ''); + + if (hex.length === 3) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2]; + } + else if (hex.length === 4) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3]; + } + + const num = parseInt(hex, 16); + + return hex.length > 6 + ? { r: num >> 24 & 255, g: num >> 16 & 255, b: num >> 8 & 255, a: Math.round((num & 255) / 2.55) } + : { r: num >> 16, g: num >> 8 & 255, b: num & 255 } + } + + function hsvToRgb ({ h, s, v, a }) { + let r, g, b; + s = s / 100; + v = v / 100; + + h = h / 360; + const + i = Math.floor(h * 6), + f = h * 6 - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s); + + switch (i % 6) { + case 0: + r = v; + g = t; + b = p; + break + case 1: + r = q; + g = v; + b = p; + break + case 2: + r = p; + g = v; + b = t; + break + case 3: + r = p; + g = q; + b = v; + break + case 4: + r = t; + g = p; + b = v; + break + case 5: + r = v; + g = p; + b = q; + break + } + + return { + r: Math.round(r * 255), + g: Math.round(g * 255), + b: Math.round(b * 255), + a + } + } + + function rgbToHsv ({ r, g, b, a }) { + const + max = Math.max(r, g, b), + min = Math.min(r, g, b), + d = max - min, + s = (max === 0 ? 0 : d / max), + v = max / 255; + let h; + + switch (max) { + case min: + h = 0; + break + case r: + h = (g - b) + d * (g < b ? 6 : 0); + h /= 6 * d; + break + case g: + h = (b - r) + d * 2; + h /= 6 * d; + break + case b: + h = (r - g) + d * 4; + h /= 6 * d; + break + } + + return { + h: Math.round(h * 360), + s: Math.round(s * 100), + v: Math.round(v * 100), + a + } + } + + function textToRgb (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string') + } + + const color = str.replace(/ /g, ''); + + const m = reRGBA.exec(color); + + if (m === null) { + return hexToRgb(color) + } + + const rgb = { + r: Math.min(255, parseInt(m[2], 10)), + g: Math.min(255, parseInt(m[3], 10)), + b: Math.min(255, parseInt(m[4], 10)) + }; + + if (m[1]) { + const alpha = parseFloat(m[5]); + rgb.a = Math.min(1, isNaN(alpha) === true ? 1 : alpha) * 100; + } + + return rgb + } + + /* works as darken if percent < 0 */ + function lighten (color, percent) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (typeof percent !== 'number') { + throw new TypeError('Expected a numeric percent') + } + + const rgb = textToRgb(color), + t = percent < 0 ? 0 : 255, + p = Math.abs(percent) / 100, + R = rgb.r, + G = rgb.g, + B = rgb.b; + + return '#' + ( + 0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + + (Math.round((t - G) * p) + G) * 0x100 + + (Math.round((t - B) * p) + B) + ).toString(16).slice(1) + } + + function luminosity (color) { + if (typeof color !== 'string' && (!color || color.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b} object as color') + } + + const + rgb = typeof color === 'string' ? textToRgb(color) : color, + r = rgb.r / 255, + g = rgb.g / 255, + b = rgb.b / 255, + R = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4), + G = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4), + B = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4); + return 0.2126 * R + 0.7152 * G + 0.0722 * B + } + + function brightness (color) { + if (typeof color !== 'string' && (!color || color.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b} object as color') + } + + const rgb = typeof color === 'string' + ? textToRgb(color) + : color; + + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000 + } + + function blend (fgColor, bgColor) { + if (typeof fgColor !== 'string' && (!fgColor || fgColor.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b[, a]} object as fgColor') + } + + if (typeof bgColor !== 'string' && (!bgColor || bgColor.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b[, a]} object as bgColor') + } + + const + rgb1 = typeof fgColor === 'string' ? textToRgb(fgColor) : fgColor, + r1 = rgb1.r / 255, + g1 = rgb1.g / 255, + b1 = rgb1.b / 255, + a1 = rgb1.a !== void 0 ? rgb1.a / 100 : 1, + rgb2 = typeof bgColor === 'string' ? textToRgb(bgColor) : bgColor, + r2 = rgb2.r / 255, + g2 = rgb2.g / 255, + b2 = rgb2.b / 255, + a2 = rgb2.a !== void 0 ? rgb2.a / 100 : 1, + a = a1 + a2 * (1 - a1), + r = Math.round(((r1 * a1 + r2 * a2 * (1 - a1)) / a) * 255), + g = Math.round(((g1 * a1 + g2 * a2 * (1 - a1)) / a) * 255), + b = Math.round(((b1 * a1 + b2 * a2 * (1 - a1)) / a) * 255); + + const ret = { r, g, b, a: Math.round(a * 100) }; + return typeof fgColor === 'string' + ? rgbToHex(ret) + : ret + } + + function changeAlpha (color, offset) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + + if (offset === void 0 || offset < -1 || offset > 1) { + throw new TypeError('Expected offset to be between -1 and 1') + } + + const { r, g, b, a } = textToRgb(color); + const alpha = a !== void 0 ? a / 100 : 0; + + return rgbToHex({ + r, g, b, a: Math.round(Math.min(1, Math.max(0, alpha + offset)) * 100) + }) + } + + function setBrand (color, value, element = document.body) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (typeof value !== 'string') { + throw new TypeError('Expected a string as value') + } + if (!(element instanceof Element)) { + throw new TypeError('Expected a DOM element') + } + + element.style.setProperty(`--q-color-${color}`, value); + } + + function getBrand (color, element = document.body) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (!(element instanceof Element)) { + throw new TypeError('Expected a DOM element') + } + + return getComputedStyle(element).getPropertyValue(`--q-color-${color}`).trim() || null + } + + function getPaletteColor (colorName) { + if (typeof colorName !== 'string') { + throw new TypeError('Expected a string as color') + } + + const el = document.createElement('div'); + + el.className = `text-${colorName} invisible fixed no-pointer-events`; + document.body.appendChild(el); + + const result = getComputedStyle(el).getPropertyValue('color'); + + el.remove(); + + return rgbToHex(textToRgb(result)) + } + + var colors = { + rgbToHex, + hexToRgb, + hsvToRgb, + rgbToHsv, + textToRgb, + lighten, + luminosity, + brightness, + blend, + changeAlpha, + setBrand, + getBrand, + getPaletteColor + }; + + function getMobilePlatform (is) { + if (is.ios === true) return 'ios' + if (is.android === true) return 'android' + } + + function getBodyClasses ({ is, has, within }, cfg) { + const cls = [ + is.desktop === true ? 'desktop' : 'mobile', + `${has.touch === false ? 'no-' : ''}touch` + ]; + + if (is.mobile === true) { + const mobile = getMobilePlatform(is); + mobile !== void 0 && cls.push('platform-' + mobile); + } + + if (is.nativeMobile === true) { + const type = is.nativeMobileWrapper; + + cls.push(type); + cls.push('native-mobile'); + + if ( + is.ios === true && + (cfg[type] === void 0 || cfg[type].iosStatusBarPadding !== false) + ) { + cls.push('q-ios-padding'); + } + } + else if (is.electron === true) { + cls.push('electron'); + } + else if (is.bex === true) { + cls.push('bex'); + } + + within.iframe === true && cls.push('within-iframe'); + + return cls + } + + // SSR takeover corrections + function clientUpdate () { + const classes = document.body.className; + let newCls = classes; + + if (iosCorrection !== void 0) { + newCls = newCls.replace('desktop', 'platform-ios mobile'); + } + + if (client.has.touch === true) { + newCls = newCls.replace('no-touch', 'touch'); + } + + if (client.within.iframe === true) { + newCls += ' within-iframe'; + } + + if (classes !== newCls) { + document.body.className = newCls; + } + } + + function setColors (brand) { + for (const color in brand) { + setBrand(color, brand[color]); + } + } + + var Body = { + install (queues, cfg) { + if (isSSR === true) { + queues.server.push((q, ctx) => { + const + cls = getBodyClasses(q.platform, cfg), + fn = ctx.ssr.setBodyClasses; + + if (cfg.screen !== void 0 && cfg.screen.bodyClass === true) { + cls.push('screen--xs'); + } + + if (typeof fn === 'function') { + fn(cls); + } + else { + ctx.ssr.Q_BODY_CLASSES = cls.join(' '); + } + }); + + return + } + + if (fromSSR === true) { + clientUpdate(); + } + else { + const cls = getBodyClasses(client, cfg); + + if (client.is.ie === true && client.is.versionNumber === 11) { + cls.forEach(c => document.body.classList.add(c)); + } + else { + document.body.classList.add.apply(document.body.classList, cls); + } + } + + cfg.brand !== void 0 && setColors(cfg.brand); + } + }; + + var materialIcons = { + name: 'material-icons', + type: { + positive: 'check_circle', + negative: 'warning', + info: 'info', + warning: 'priority_high' + }, + arrow: { + up: 'arrow_upward', + right: 'arrow_forward', + down: 'arrow_downward', + left: 'arrow_back', + dropdown: 'arrow_drop_down' + }, + chevron: { + left: 'chevron_left', + right: 'chevron_right' + }, + colorPicker: { + spectrum: 'gradient', + tune: 'tune', + palette: 'style' + }, + pullToRefresh: { + icon: 'refresh' + }, + carousel: { + left: 'chevron_left', + right: 'chevron_right', + up: 'keyboard_arrow_up', + down: 'keyboard_arrow_down', + navigationIcon: 'lens' + }, + chip: { + remove: 'cancel', + selected: 'check' + }, + datetime: { + arrowLeft: 'chevron_left', + arrowRight: 'chevron_right', + now: 'access_time', + today: 'today' + }, + editor: { + bold: 'format_bold', + italic: 'format_italic', + strikethrough: 'strikethrough_s', + underline: 'format_underlined', + unorderedList: 'format_list_bulleted', + orderedList: 'format_list_numbered', + subscript: 'vertical_align_bottom', + superscript: 'vertical_align_top', + hyperlink: 'link', + toggleFullscreen: 'fullscreen', + quote: 'format_quote', + left: 'format_align_left', + center: 'format_align_center', + right: 'format_align_right', + justify: 'format_align_justify', + print: 'print', + outdent: 'format_indent_decrease', + indent: 'format_indent_increase', + removeFormat: 'format_clear', + formatting: 'text_format', + fontSize: 'format_size', + align: 'format_align_left', + hr: 'remove', + undo: 'undo', + redo: 'redo', + heading: 'format_size', + code: 'code', + size: 'format_size', + font: 'font_download', + viewSource: 'code' + }, + expansionItem: { + icon: 'keyboard_arrow_down', + denseIcon: 'arrow_drop_down' + }, + fab: { + icon: 'add', + activeIcon: 'close' + }, + field: { + clear: 'cancel', + error: 'error' + }, + pagination: { + first: 'first_page', + prev: 'keyboard_arrow_left', + next: 'keyboard_arrow_right', + last: 'last_page' + }, + rating: { + icon: 'grade' + }, + stepper: { + done: 'check', + active: 'edit', + error: 'warning' + }, + tabs: { + left: 'chevron_left', + right: 'chevron_right', + up: 'keyboard_arrow_up', + down: 'keyboard_arrow_down' + }, + table: { + arrowUp: 'arrow_upward', + warning: 'warning', + firstPage: 'first_page', + prevPage: 'chevron_left', + nextPage: 'chevron_right', + lastPage: 'last_page' + }, + tree: { + icon: 'play_arrow' + }, + uploader: { + done: 'done', + clear: 'clear', + add: 'add_box', + upload: 'cloud_upload', + removeQueue: 'clear_all', + removeUploaded: 'done_all' + } + }; + + var iconSet = { + install ($q, queues, iconSet) { + const initialSet = iconSet || materialIcons; + + this.set = (setObject, ssrContext) => { + const def = { ...setObject }; + + if (isSSR === true) { + if (ssrContext === void 0) { + console.error('SSR ERROR: second param required: Quasar.iconSet.set(iconSet, ssrContext)'); + return + } + + def.set = ssrContext.$q.iconSet.set; + ssrContext.$q.iconSet = def; + } + else { + def.set = this.set; + $q.iconSet = def; + } + }; + + if (isSSR === true) { + queues.server.push((q, ctx) => { + q.iconSet = {}; + q.iconSet.set = setObject => { + this.set(setObject, ctx.ssr); + }; + + q.iconSet.set(initialSet); + }); + } + else { + Vue__default["default"].util.defineReactive($q, 'iconMapFn', void 0); + Vue__default["default"].util.defineReactive($q, 'iconSet', {}); + + this.set(initialSet); + } + } + }; + + const autoInstalled = [ + Platform, Screen, Dark, Interaction + ]; + + const queues = { + server: [], // on SSR update + takeover: [] // on client takeover + }; + + const $q = { + version, + config: {} + }; + + function install (Vue, opts = {}) { + if (this.__qInstalled === true) { return } + this.__qInstalled = true; + + const cfg = $q.config = Object.freeze(opts.config || {}); + + // required plugins + Platform.install($q, queues); + Body.install(queues, cfg); + Dark.install($q, queues, cfg); + Interaction.install($q, queues); + Screen.install($q, queues, cfg); + History.install(cfg); + lang.install($q, queues, opts.lang); + iconSet.install($q, queues, opts.iconSet); + + if (isSSR === true) { + Vue.mixin({ + beforeCreate () { + this.$q = this.$root.$options.$q; + } + }); + } + else { + Vue.prototype.$q = $q; + } + + opts.components && Object.keys(opts.components).forEach(key => { + const c = opts.components[key]; + if (typeof c === 'function') { + Vue.component(c.options.name, c); + } + }); + + opts.directives && Object.keys(opts.directives).forEach(key => { + const d = opts.directives[key]; + if (d.name !== void 0 && d.unbind !== void 0) { + Vue.directive(d.name, d); + } + }); + + if (opts.plugins) { + const param = { $q, queues, cfg }; + Object.keys(opts.plugins).forEach(key => { + const p = opts.plugins[key]; + if (typeof p.install === 'function' && autoInstalled.includes(p) === false) { + p.install(param); + } + }); + } + } + + const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']; + + function humanStorageSize (bytes) { + let u = 0; + + while (parseInt(bytes, 10) >= 1024 && u < units.length - 1) { + bytes /= 1024; + ++u; + } + + return `${bytes.toFixed(1)}${units[u]}` + } + + function capitalize (str) { + return str.charAt(0).toUpperCase() + str.slice(1) + } + + function between (v, min, max) { + return max <= min + ? min + : Math.min(max, Math.max(min, v)) + } + + function normalizeToInterval (v, min, max) { + if (max <= min) { + return min + } + + const size = (max - min + 1); + + let index = min + (v - min) % size; + if (index < min) { + index = size + index; + } + + return index === 0 ? 0 : index // fix for (-a % a) => -0 + } + + function pad (v, length = 2, char = '0') { + if (v === void 0 || v === null) { + return v + } + + const val = '' + v; + return val.length >= length + ? val + : new Array(length - val.length + 1).join(char) + val + } + + var format = { + humanStorageSize, + capitalize, + between, + normalizeToInterval, + pad + }; + + function cache (vm, key, obj) { + if (isSSR === true) return obj + + const k = `__qcache_${key}`; + return vm[k] === void 0 + ? (vm[k] = obj) + : vm[k] + } + + function cacheWithFn (vm, key, fn) { + if (isSSR === true) return fn() + + const k = `__qcache_${key}`; + return vm[k] === void 0 + ? (vm[k] = fn()) + : vm[k] + } + + function getPropCacheMixin (propName, proxyPropName) { + return { + data () { + const target = {}; + const source = this[propName]; + + for (const prop in source) { + target[prop] = source[prop]; + } + + return { [proxyPropName]: target } + }, + + watch: { + [propName] (newObj, oldObj) { + const target = this[proxyPropName]; + + if (oldObj !== void 0) { + // we first delete obsolete events + for (const prop in oldObj) { + if (newObj[prop] === void 0) { + this.$delete(target, prop); + } + } + } + + for (const prop in newObj) { + // we then update changed events + if (target[prop] !== newObj[prop]) { + this.$set(target, prop, newObj[prop]); + } + } + } + } + } + } + + const ariaHidden = { 'aria-hidden': 'true' }; + + const iconAsButton = { tabindex: 0, type: 'button', 'aria-hidden': false, role: null }; + + var AttrsMixin = getPropCacheMixin('$attrs', 'qAttrs'); + + const + xhr = isSSR ? null : XMLHttpRequest, + open = isSSR ? null : xhr.prototype.open, + positionValues = [ 'top', 'right', 'bottom', 'left' ]; + + let stack = []; + let highjackCount = 0; + + function translate ({ p, pos, active, horiz, reverse, dir }) { + let x = 1, y = 1; + + if (horiz === true) { + if (reverse === true) { x = -1; } + if (pos === 'bottom') { y = -1; } + return { transform: `translate3d(${x * (p - 100)}%,${active ? 0 : y * -200}%,0)` } + } + + if (reverse === true) { y = -1; } + if (pos === 'right') { x = -1; } + return { transform: `translate3d(${active ? 0 : dir * x * -200}%,${y * (p - 100)}%,0)` } + } + + function inc (p, amount) { + if (typeof amount !== 'number') { + if (p < 25) { + amount = Math.random() * 3 + 3; + } + else if (p < 65) { + amount = Math.random() * 3; + } + else if (p < 85) { + amount = Math.random() * 2; + } + else if (p < 99) { + amount = 0.6; + } + else { + amount = 0; + } + } + return between(p + amount, 0, 100) + } + + function highjackAjax (stackEntry) { + highjackCount++; + + stack.push(stackEntry); + + if (highjackCount > 1) { return } + + xhr.prototype.open = function (_, url) { + const stopStack = []; + + const loadStart = () => { + stack.forEach(entry => { + const hijackFilter = entry.getHijackFilter(); + if ( + hijackFilter === null || + hijackFilter(url) === true + ) { + entry.start(); + stopStack.push(entry.stop); + } + }); + }; + + const loadEnd = () => { + stopStack.forEach(stop => { stop(); }); + }; + + this.addEventListener('loadstart', loadStart, { once: true }); + this.addEventListener('loadend', loadEnd, { once: true }); + + open.apply(this, arguments); + }; + } + + function restoreAjax (start) { + stack = stack.filter(entry => entry.start !== start); + + highjackCount = Math.max(0, highjackCount - 1); + if (!highjackCount) { + xhr.prototype.open = open; + } + } + + var QAjaxBar = Vue__default["default"].extend({ + name: 'QAjaxBar', + + props: { + position: { + type: String, + default: 'top', + validator: val => positionValues.includes(val) + }, + + size: { + type: String, + default: '2px' + }, + + color: String, + reverse: Boolean, + + skipHijack: Boolean, + hijackFilter: Function + }, + + data () { + return { + calls: 0, + progress: 0, + onScreen: false, + animate: true + } + }, + + computed: { + classes () { + return `q-loading-bar q-loading-bar--${this.position}` + + (this.color !== void 0 ? ` bg-${this.color}` : '') + + (this.animate === true ? '' : ' no-transition') + }, + + style () { + const active = this.onScreen; + + const o = translate({ + p: this.progress, + pos: this.position, + active, + horiz: this.horizontal, + reverse: this.$q.lang.rtl === true && ['top', 'bottom'].includes(this.position) + ? this.reverse === false + : this.reverse, + dir: this.$q.lang.rtl === true ? -1 : 1 + }); + + o[this.sizeProp] = this.size; + o.opacity = active ? 1 : 0; + + return o + }, + + horizontal () { + return this.position === 'top' || this.position === 'bottom' + }, + + sizeProp () { + return this.horizontal ? 'height' : 'width' + }, + + attrs () { + return this.onScreen === true + ? { + role: 'progressbar', + 'aria-valuemin': 0, + 'aria-valuemax': 100, + 'aria-valuenow': this.progress + } + : ariaHidden + } + }, + + methods: { + start (speed = 300) { + const oldSpeed = this.speed; + const newSpeed = this.speed = Math.max(0, speed) || 0; + + this.calls++; + + if (this.calls > 1) { + if (oldSpeed === 0 && newSpeed > 0) { + this.__work(); + } + else if (oldSpeed > 0 && newSpeed <= 0) { + clearTimeout(this.timer); + } + + return this.calls + } + + clearTimeout(this.timer); + this.$emit('start'); + + this.progress = 0; + + this.timer = setTimeout(() => { + this.animate = true; + newSpeed > 0 && this.__work(); + }, this.onScreen === true ? 500 : 1); + + if (this.onScreen !== true) { + this.onScreen = true; + this.animate = false; + } + + return this.calls + }, + + increment (amount) { + if (this.calls > 0) { + this.progress = inc(this.progress, amount); + } + + return this.calls + }, + + stop () { + this.calls = Math.max(0, this.calls - 1); + + if (this.calls > 0) { + return this.calls + } + + clearTimeout(this.timer); + this.$emit('stop'); + + const end = () => { + this.animate = true; + this.progress = 100; + this.timer = setTimeout(() => { + this.onScreen = false; + }, 1000); + }; + + if (this.progress === 0) { + this.timer = setTimeout(end, 1); + } + else { + end(); + } + + return this.calls + }, + + __work () { + if (this.progress < 100) { + this.timer = setTimeout(() => { + this.increment(); + this.__work(); + }, this.speed); + } + } + }, + + mounted () { + if (this.skipHijack !== true) { + this.hijacked = true; + highjackAjax({ + start: this.start, + stop: this.stop, + getHijackFilter: () => this.hijackFilter || null + }); + } + }, + + beforeDestroy () { + clearTimeout(this.timer); + this.hijacked === true && restoreAjax(this.start); + }, + + render (h) { + return h('div', { + class: this.classes, + style: this.style, + attrs: this.attrs + }) + } + }); + + const sizes = { + xs: 18, + sm: 24, + md: 32, + lg: 38, + xl: 46 + }; + + function getSizeMixin (sizes) { + return { + props: { + size: String + }, + + computed: { + sizeStyle () { + if (this.size !== void 0) { + return { fontSize: this.size in sizes ? `${sizes[this.size]}px` : this.size } + } + } + } + } + } + + var SizeMixin = getSizeMixin(sizes); + + var TagMixin = { + props: { + tag: { + type: String, + default: 'div' + } + } + }; + + var ListenersMixin = getPropCacheMixin('$listeners', 'qListeners'); + + function slot (vm, slotName, otherwise) { + return vm.$scopedSlots[slotName] !== void 0 + ? vm.$scopedSlots[slotName]() + : otherwise + } + + function uniqueSlot (vm, slotName, otherwise) { + return vm.$scopedSlots[slotName] !== void 0 + ? [].concat(vm.$scopedSlots[slotName]()) + : otherwise + } + + /** + * Source definitely exists, + * so it's merged with the possible slot + */ + function mergeSlot (source, vm, slotName) { + return vm.$scopedSlots[slotName] !== void 0 + ? source.concat(vm.$scopedSlots[slotName]()) + : source + } + + /** + * Merge with possible slot, + * even if source might not exist + */ + function mergeSlotSafely (source, vm, slotName) { + if (vm.$scopedSlots[slotName] === void 0) { + return source + } + + const slot = vm.$scopedSlots[slotName](); + return source !== void 0 + ? source.concat(slot) + : slot + } + + const defaultViewBox = '0 0 24 24'; + + const sameFn = i => i; + const ionFn = i => `ionicons ${i}`; + + const libMap = { + 'mdi-': i => `mdi ${i}`, + 'icon-': sameFn, // fontawesome equiv + 'bt-': i => `bt ${i}`, + 'eva-': i => `eva ${i}`, + 'ion-md': ionFn, + 'ion-ios': ionFn, + 'ion-logo': ionFn, + 'iconfont ': sameFn, + 'ti-': i => `themify-icon ${i}`, + 'bi-': i => `bootstrap-icons ${i}` + }; + + const matMap = { + o_: '-outlined', + r_: '-round', + s_: '-sharp' + }; + + const symMap = { + sym_o_: '-outlined', + sym_r_: '-rounded', + sym_s_: '-sharp' + }; + + const libRE = new RegExp('^(' + Object.keys(libMap).join('|') + ')'); + const matRE = new RegExp('^(' + Object.keys(matMap).join('|') + ')'); + const symRE = new RegExp('^(' + Object.keys(symMap).join('|') + ')'); + const mRE = /^[Mm]\s?[-+]?\.?\d/; + const imgRE = /^img:/; + const svgUseRE = /^svguse:/; + const ionRE = /^ion-/; + const faRE = /^(fa-(solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /; + + var QIcon = Vue__default["default"].extend({ + name: 'QIcon', + + mixins: [ ListenersMixin, SizeMixin, TagMixin ], + + props: { + tag: { + type: String, + default: 'i' + }, + + name: String, + color: String, + left: Boolean, + right: Boolean + }, + + computed: { + classes () { + return 'q-icon' + + (this.left === true ? ' on-left' : '') + + (this.right === true ? ' on-right' : '') + + (this.color !== void 0 ? ` text-${this.color}` : '') + }, + + type () { + let cls; + let icon = this.name; + + if (icon === 'none' || !icon) { + return { none: true } + } + + if (this.$q.iconMapFn !== void 0) { + const res = this.$q.iconMapFn(icon); + if (res !== void 0) { + if (res.icon !== void 0) { + icon = res.icon; + if (icon === 'none' || !icon) { + return { none: true } + } + } + else { + return { + cls: res.cls, + content: res.content !== void 0 + ? res.content + : ' ' + } + } + } + } + + if (mRE.test(icon) === true) { + const [ def, viewBox = defaultViewBox ] = icon.split('|'); + + return { + svg: true, + viewBox, + nodes: def.split('&&').map(path => { + const [ d, style, transform ] = path.split('@@'); + return this.$createElement('path', { + attrs: { d, transform }, + style + }) + }) + } + } + + if (imgRE.test(icon) === true) { + return { + img: true, + src: icon.substring(4) + } + } + + if (svgUseRE.test(icon) === true) { + const [ def, viewBox = defaultViewBox ] = icon.split('|'); + + return { + svguse: true, + src: def.substring(7), + viewBox + } + } + + let content = ' '; + const matches = icon.match(libRE); + + if (matches !== null) { + cls = libMap[ matches[ 1 ] ](icon); + } + else if (faRE.test(icon) === true) { + cls = icon; + } + else if (ionRE.test(icon) === true) { + cls = `ionicons ion-${this.$q.platform.is.ios === true ? 'ios' : 'md'}${icon.substr(3)}`; + } + else if (symRE.test(icon) === true) { + // "notranslate" class is for Google Translate + // to avoid tampering with Material Symbols ligature font + // + // Caution: To be able to add suffix to the class name, + // keep the 'material-symbols' at the end of the string. + cls = 'notranslate material-symbols'; + + const matches = icon.match(symRE); + if (matches !== null) { + icon = icon.substring(6); + cls += symMap[ matches[ 1 ] ]; + } + + content = icon; + } + else { + // "notranslate" class is for Google Translate + // to avoid tampering with Material Icons ligature font + // + // Caution: To be able to add suffix to the class name, + // keep the 'material-icons' at the end of the string. + cls = 'notranslate material-icons'; + + const matches = icon.match(matRE); + if (matches !== null) { + icon = icon.substring(2); + cls += matMap[ matches[ 1 ] ]; + } + + content = icon; + } + + return { + cls, + content + } + } + }, + + render (h) { + const data = { + class: this.classes, + style: this.sizeStyle, + on: { ...this.qListeners }, + attrs: { + 'aria-hidden': 'true', + role: 'presentation' + } + }; + + if (this.type.none === true) { + return h(this.tag, data, slot(this, 'default')) + } + + if (this.type.img === true) { + return h('span', data, mergeSlot([ + h('img', { + attrs: { src: this.type.src } + }) + ], this, 'default')) + } + + if (this.type.svg === true) { + return h('span', data, mergeSlot([ + h('svg', { + attrs: { + viewBox: this.type.viewBox || '0 0 24 24', + focusable: 'false' /* needed for IE11 */ + } + }, this.type.nodes) + ], this, 'default')) + } + + if (this.type.svguse === true) { + return h('span', data, mergeSlot([ + h('svg', { + attrs: { + viewBox: this.type.viewBox, + focusable: 'false' /* needed for IE11 */ + } + }, [ + h('use', { attrs: { 'xlink:href': this.type.src } }) + ]) + ], this, 'default')) + } + + if (this.type.cls !== void 0) { + data.class += ' ' + this.type.cls; + } + + return h(this.tag, data, mergeSlot([ + this.type.content + ], this, 'default')) + } + }); + + var QAvatar = Vue__default["default"].extend({ + name: 'QAvatar', + + mixins: [ ListenersMixin, SizeMixin ], + + props: { + fontSize: String, + + color: String, + textColor: String, + + icon: String, + square: Boolean, + rounded: Boolean + }, + + computed: { + classes () { + return { + [`bg-${this.color}`]: this.color, + [`text-${this.textColor} q-chip--colored`]: this.textColor, + 'q-avatar--square': this.square, + 'rounded-borders': this.rounded + } + }, + + contentStyle () { + if (this.fontSize) { + return { fontSize: this.fontSize } + } + } + }, + + render (h) { + const icon = this.icon !== void 0 + ? [ h(QIcon, { props: { name: this.icon } }) ] + : void 0; + + return h('div', { + staticClass: 'q-avatar', + style: this.sizeStyle, + class: this.classes, + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'q-avatar__content row flex-center overflow-hidden', + style: this.contentStyle + }, mergeSlotSafely(icon, this, 'default')) + ]) + } + }); + + var QBadge = Vue__default["default"].extend({ + name: 'QBadge', + + mixins: [ ListenersMixin ], + + props: { + color: String, + textColor: String, + + floating: Boolean, + transparent: Boolean, + multiLine: Boolean, + outline: Boolean, + rounded: Boolean, + + label: [Number, String], + + align: { + type: String, + validator: v => ['top', 'middle', 'bottom'].includes(v) + } + }, + + computed: { + style () { + if (this.align !== void 0) { + return { verticalAlign: this.align } + } + }, + + classes () { + const text = this.outline === true + ? this.color || this.textColor + : this.textColor; + + return 'q-badge flex inline items-center no-wrap' + + ` q-badge--${this.multiLine === true ? 'multi' : 'single'}-line` + + (this.outline === true + ? ' q-badge--outline' + : (this.color !== void 0 ? ` bg-${this.color}` : '') + ) + + (text !== void 0 ? ` text-${text}` : '') + + (this.floating === true ? ' q-badge--floating' : '') + + (this.rounded === true ? ' q-badge--rounded' : '') + + (this.transparent === true ? ' q-badge--transparent' : '') + }, + + attrs () { + return { + role: 'status', + 'aria-label': this.label + } + } + }, + + render (h) { + return h('div', { + style: this.style, + class: this.classes, + attrs: this.attrs, + on: { ...this.qListeners } + }, this.label !== void 0 ? [ this.label ] : slot(this, 'default')) + } + }); + + var DarkMixin = { + props: { + dark: { + type: Boolean, + default: null + } + }, + + computed: { + darkSuffix () { + if (this.dark === null && this.$q.dark.isActive === null) { + return 'dark-auto' + } + + return this.dark === true || (this.dark === null && this.$q.dark.isActive === true) + ? 'dark' + : 'light' + } + } + }; + + const attrs$6 = { role: 'alert' }; + + var QBanner = Vue__default["default"].extend({ + name: 'QBanner', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + inlineActions: Boolean, + dense: Boolean, + rounded: Boolean + }, + + render (h) { + const actions = slot(this, 'action'); + const child = [ + h('div', { + staticClass: 'q-banner__avatar col-auto row items-center self-start' + }, slot(this, 'avatar')), + + h('div', { + staticClass: 'q-banner__content col text-body2' + }, slot(this, 'default')) + ]; + + actions !== void 0 && child.push( + h('div', { + staticClass: 'q-banner__actions row items-center justify-end', + class: `col-${this.inlineActions === true ? 'auto' : 'all'}` + }, actions) + ); + + return h('div', { + staticClass: 'q-banner row items-center', + class: { + 'q-banner--top-padding': actions !== void 0 && !this.inlineActions, + 'q-banner--dense': this.dense, + [`q-banner--${this.darkSuffix} q-${this.darkSuffix}`]: true, + 'rounded-borders': this.rounded + }, + attrs: attrs$6, + on: { ...this.qListeners } + }, child) + } + }); + + const attrs$5 = { role: 'toolbar' }; + + var QBar = Vue__default["default"].extend({ + name: 'QBar', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + dense: Boolean + }, + + computed: { + classes () { + return `q-bar--${this.dense === true ? 'dense' : 'standard'}` + + ` q-bar--${this.darkSuffix}` + } + }, + + render (h) { + return h('div', { + staticClass: 'q-bar row no-wrap items-center', + class: this.classes, + attrs: attrs$5, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + const + alignMap = { + left: 'start', + center: 'center', + right: 'end', + between: 'between', + around: 'around', + evenly: 'evenly', + stretch: 'stretch' + }, + alignValues$2 = Object.keys(alignMap); + + var AlignMixin = { + props: { + align: { + type: String, + validator: v => alignValues$2.includes(v) + } + }, + + computed: { + alignClass () { + const align = this.align === void 0 + ? (this.vertical === true ? 'stretch' : 'left') + : this.align; + + return `${this.vertical === true ? 'items' : 'justify'}-${alignMap[align]}` + } + } + }; + + const disabledValues = [ true, '' ]; + + var QBreadcrumbs = Vue__default["default"].extend({ + name: 'QBreadcrumbs', + + mixins: [ ListenersMixin, AlignMixin ], + + props: { + separator: { + type: String, + default: '/' + }, + separatorColor: String, + + activeColor: { + type: String, + default: 'primary' + }, + + gutter: { + type: String, + validator: v => ['none', 'xs', 'sm', 'md', 'lg', 'xl'].includes(v), + default: 'sm' + } + }, + + computed: { + classes () { + return `${this.alignClass}${this.gutter === 'none' ? '' : ` q-gutter-${this.gutter}`}` + }, + + sepClass () { + return this.separatorColor + ? ` text-${this.separatorColor}` + : '' + }, + + activeClass () { + return ` text-${this.activeColor}` + } + }, + + render (h) { + const nodes = slot(this, 'default'); + if (nodes === void 0) { return } + + let els = 1; + + const + child = [], + len = nodes.filter(c => c.tag !== void 0 && c.tag.endsWith('-QBreadcrumbsEl')).length, + separator = this.$scopedSlots.separator !== void 0 + ? this.$scopedSlots.separator + : () => this.separator; + + nodes.forEach(comp => { + if (comp.tag !== void 0 && comp.tag.endsWith('-QBreadcrumbsEl')) { + const middle = els < len; + const disabled = disabledValues.includes(comp.componentOptions.propsData.disable); + const cls = middle === true + ? (disabled !== true ? this.activeClass : '') + : ' q-breadcrumbs--last'; + + els++; + + child.push(h('div', { + staticClass: 'flex items-center' + cls + }, [ comp ])); + + middle === true && child.push(h('div', { + staticClass: 'q-breadcrumbs__separator' + this.sepClass + }, separator())); + } + else { + child.push(comp); + } + }); + + return h('div', { + staticClass: 'q-breadcrumbs', + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'flex items-center', + class: this.classes + }, child) + ]) + } + }); + + const trailingSlashRE = /\/?$/; + + function equals (current, target) { + if (Object.keys(current).length !== Object.keys(target).length) { + return false + } + + // route query and params are strings when read from URL + for (const key in target) { + if (!(key in current) || String(current[key]) !== String(target[key])) { + return false + } + } + return true + } + + function includes (current, target) { + for (const key in target) { + if (!(key in current)) { + return false + } + } + return true + } + + function isSameRoute (current, target) { + if (!target) { + return false + } + + if (current.path && target.path) { + return ( + current.path.replace(trailingSlashRE, '') === target.path.replace(trailingSlashRE, '') && + current.hash === target.hash && + equals(current.query, target.query) + ) + } + + return typeof current.name === 'string' && + current.name === target.name && + current.hash === target.hash && + equals(current.query, target.query) === true && + equals(current.params, target.params) === true + } + + function isIncludedRoute (current, target) { + return current.path.replace(trailingSlashRE, '/').indexOf(target.path.replace(trailingSlashRE, '/')) === 0 && + (typeof target.hash !== 'string' || target.hash.length < 2 || current.hash === target.hash) && + includes(current.query, target.query) === true + } + + const routerLinkProps = { + // router-link + to: [String, Object], + exact: Boolean, + append: Boolean, + replace: Boolean, + activeClass: { + type: String, + default: 'q-router-link--active' + }, + exactActiveClass: { + type: String, + default: 'q-router-link--exact-active' + }, + + // regular
link + href: String, + target: String, + + // state + disable: Boolean + }; + + // external props: type, tag + // external: fallbackTag + + var RouterLinkMixin = { + props: routerLinkProps, + + computed: { + hasHrefLink () { + return this.disable !== true && this.href !== void 0 + }, + + // beware, it gets overwritten in QRouteTab + hasRouterLinkProps () { + return this.$router !== void 0 && + this.disable !== true && + this.hasHrefLink !== true && + this.to !== void 0 && this.to !== null && this.to !== '' + }, + + resolvedLink () { + return this.hasRouterLinkProps === true + ? this.__getLink(this.to, this.append) + : null + }, + + hasRouterLink () { + return this.resolvedLink !== null + }, + + hasLink () { + return this.hasHrefLink === true || this.hasRouterLink === true + }, + + linkTag () { + return this.type === 'a' || this.hasLink === true + ? 'a' + : (this.tag || this.fallbackTag || 'div') + }, + + linkAttrs () { + return this.hasHrefLink === true + ? { + href: this.href, + target: this.target + } + : ( + this.hasRouterLink === true + ? { + href: this.resolvedLink.href, + target: this.target + } + : {} + ) + }, + + linkIsActive () { + return this.hasRouterLink === true && + isIncludedRoute(this.$route, this.resolvedLink.route) + }, + + linkIsExactActive () { + return this.hasRouterLink === true && + isSameRoute(this.$route, this.resolvedLink.route) + }, + + linkClass () { + return this.hasRouterLink === true + ? ( + this.linkIsExactActive === true + ? ` ${this.exactActiveClass} ${this.activeClass}` + : ( + this.exact === true + ? '' + : (this.linkIsActive === true ? ` ${this.activeClass}` : '') + ) + ) + : '' + } + }, + + methods: { + __getLink (to, append) { + // we protect from accessing this.$route without + // actually needing it so that we won't trigger + // unnecessary updates in computed props using this method + try { + return append === true + ? this.$router.resolve(to, this.$route, true) + : this.$router.resolve(to) + } + catch (_) {} + + return null + }, + + /** + * @returns Promise | Promise + */ + __navigateToRouterLink ( + e, + { returnRouterError, to, replace = this.replace, append } = {} + ) { + if (this.disable === true) { + // ensure native navigation is prevented in all cases, + // like in QRouteTab where hasRouterLinkProps does not care about disable state + e.preventDefault(); + return Promise.resolve(false) + } + + if ( + // don't redirect with control keys; + // should match RouterLink from Vue Router + e.metaKey || e.altKey || e.ctrlKey || e.shiftKey || + + // don't redirect on right click + (e.button !== void 0 && e.button !== 0) || + + // don't redirect if it should open in a new window + this.target === '_blank' + ) { + return Promise.resolve(false) + } + + e.preventDefault(); + + const resolvedLink = to === void 0 + ? this.resolvedLink + : this.__getLink(to, append); + + if (resolvedLink === null) { + return Promise[returnRouterError === true ? 'reject' : 'resolve'](false) + } + + const promise = this.$router[replace === true ? 'replace' : 'push'](resolvedLink.location); + + return returnRouterError === true + ? promise + : promise.catch(() => {}) + }, + + __navigateOnClick (e) { + if (this.hasRouterLink === true) { + const go = opts => this.__navigateToRouterLink(e, opts); + + this.$emit('click', e, go); + + // for backward compatibility + e.navigate === false && e.preventDefault(); + + e.defaultPrevented !== true && go(); + } + else { + this.$emit('click', e); + } + } + } + }; + + var QBreadcrumbsEl = Vue__default["default"].extend({ + name: 'QBreadcrumbsEl', + + mixins: [ ListenersMixin, RouterLinkMixin ], + + props: { + label: String, + icon: String + }, + + computed: { + iconClass () { + return 'q-breadcrumbs__el-icon' + + (this.label !== void 0 ? ' q-breadcrumbs__el-icon--with-label' : '') + }, + + renderData () { + return { + staticClass: 'q-breadcrumbs__el q-link ' + + 'flex inline items-center relative-position ' + + (this.disable !== true ? 'q-link--focusable' + this.linkClass : 'q-breadcrumbs__el--disabled'), + attrs: this.linkAttrs, + on: { + ...this.qListeners, + click: this.__navigateOnClick + } + } + } + }, + + beforeCreate () { + this.fallbackTag = 'span'; + }, + + render (h) { + const child = []; + + this.icon !== void 0 && child.push( + h(QIcon, { + class: this.iconClass, + props: { name: this.icon } + }) + ); + + this.label !== void 0 && child.push(this.label); + + return h(this.linkTag, this.renderData, mergeSlot(child, this, 'default')) + } + }); + + var mixin = { + mixins: [ ListenersMixin ], + + props: { + color: String, + size: { + type: [Number, String], + default: '1em' + } + }, + + computed: { + cSize () { + return this.size in sizes + ? `${sizes[this.size]}px` + : this.size + }, + + classes () { + if (this.color) { + return `text-${this.color}` + } + } + } + }; + + var QSpinner = Vue__default["default"].extend({ + name: 'QSpinner', + + mixins: [ mixin ], + + props: { + thickness: { + type: Number, + default: 5 + } + }, + + render (h) { + return h('svg', { + staticClass: 'q-spinner q-spinner-mat', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '25 25 50 50' + } + }, [ + h('circle', { + staticClass: 'path', + attrs: { + 'cx': '50', + 'cy': '50', + 'r': '20', + 'fill': 'none', + 'stroke': 'currentColor', + 'stroke-width': this.thickness, + 'stroke-miterlimit': '10' + } + }) + ]) + } + }); + + function offset (el) { + if (el === window) { + return { top: 0, left: 0 } + } + const { top, left } = el.getBoundingClientRect(); + return { top, left } + } + + function style (el, property) { + return window.getComputedStyle(el).getPropertyValue(property) + } + + function height (el) { + return el === window + ? window.innerHeight + : el.getBoundingClientRect().height + } + + function width$1 (el) { + return el === window + ? window.innerWidth + : el.getBoundingClientRect().width + } + + function css (element, css) { + const style = element.style; + + Object.keys(css).forEach(prop => { + style[prop] = css[prop]; + }); + } + + function cssBatch (elements, style) { + elements.forEach(el => css(el, style)); + } + + function ready (fn) { + if (typeof fn !== 'function') { + return + } + + if (document.readyState !== 'loading') { + return fn() + } + + document.addEventListener('DOMContentLoaded', fn, false); + } + + // internal + function getElement (el) { + const type = typeof el; + + if (type === 'function') { + el = el(); + } + + if (type === 'string') { + try { + el = document.querySelector(el); + } + catch (err) {} + } + + if (el !== Object(el)) { + return null + } + + return el._isVue === true && el.$el !== void 0 + ? el.$el + : el + } + + // internal + function getBodyFullscreenElement (activeEl) { + return activeEl === document.documentElement || activeEl === null + ? document.body + : activeEl + } + + var dom = { + offset, + style, + height, + width: width$1, + css, + cssBatch, + ready + }; + + function shouldIgnoreKey (evt) { + return evt !== Object(evt) || + evt.type.indexOf('key') !== 0 || + evt.target !== document.activeElement || + evt.target.qComposing === true + } + + function isKeyCode (evt, keyCodes) { + return shouldIgnoreKey(evt) === true + ? false + : [].concat(keyCodes).includes(evt.keyCode) + } + + const { passiveCapture: passiveCapture$2 } = listenOpts; + + function startPhase1 (evtStart, el, ctx, forceCenter) { + ctx.modifiers.stop === true && stop(evtStart); + + const + { color, early } = ctx.modifiers, + center = ctx.modifiers.center === true || forceCenter === true, + node = document.createElement('span'), + innerNode = document.createElement('span'), + pos = position(evtStart), + { left, top, width, height } = el.getBoundingClientRect(), + diameter = Math.sqrt(width * width + height * height), + radius = diameter / 2, + centerX = `${(width - diameter) / 2}px`, + x = center ? centerX : `${pos.left - left - radius}px`, + centerY = `${(height - diameter) / 2}px`, + y = center ? centerY : `${pos.top - top - radius}px`, + delay = Date.now() + 300; + + innerNode.className = 'q-ripple__inner'; + css(innerNode, { + height: `${diameter}px`, + width: `${diameter}px`, + transform: `translate3d(${x},${y},0) scale3d(.2,.2,1)`, + opacity: 0 + }); + + node.className = `q-ripple${color ? ' text-' + color : ''}`; + node.setAttribute('dir', 'ltr'); + node.appendChild(innerNode); + el.appendChild(node); + + let timer, startPhase2, eventSource, target, waitForScroll; + + const abort = () => { + clearTimeout(timer); + + const index = ctx.abort.indexOf(abort); + if (index > -1) { + ctx.abort.splice(index, 1); + node.remove(); + + switch (eventSource) { + case 'mouse': + document.removeEventListener('mouseup', startPhase2, passiveCapture$2); + el.removeEventListener('mouseout', startPhase2, passiveCapture$2); + break + case 'keyboard': + document.removeEventListener('keyup', startPhase2, passiveCapture$2); + break + case 'touch': + target.removeEventListener('touchmove', abort, passiveCapture$2); + target.removeEventListener('touchmove', startPhase2, passiveCapture$2); + target.removeEventListener('touchend', startPhase2, passiveCapture$2); + target.removeEventListener('touchcancel', startPhase2, passiveCapture$2); + ctx.preventMouse--; + break + } + } + }; + ctx.abort.push(abort); + + const phase2 = () => { + if (waitForScroll !== true) { + innerNode.classList.remove('q-ripple__inner--enter'); + innerNode.classList.add('q-ripple__inner--leave'); + innerNode.style.opacity = 0; + + timer = setTimeout(abort, 275); + } + }; + + if (early === true) { + if (evtStart.type.indexOf('mouse') === 0) { + eventSource = 'mouse'; + + startPhase2 = evtEnd => { + if ( + evtEnd.type !== 'mouseout' || + el.contains(evtEnd.toElement) !== true + ) { + timer = setTimeout(phase2, delay - Date.now()); + } + }; + + document.addEventListener('mouseup', startPhase2, passiveCapture$2); + el.addEventListener('mouseout', startPhase2, passiveCapture$2); + } + else if (evtStart.type.indexOf('key') === 0) { + eventSource = 'keyboard'; + ctx.preventKeyboard = true; + + startPhase2 = () => { + ctx.preventKeyboard = false; + timer = setTimeout(phase2, delay - Date.now()); + }; + + document.addEventListener('keyup', startPhase2, passiveCapture$2); + } + else { + eventSource = 'touch'; + waitForScroll = true; + target = evtStart.target; + ctx.preventMouse++; + + startPhase2 = evtEnd => { + if ( + evtEnd.type !== 'touchmove' || + evtEnd.changedTouches.length === 0 || + el.contains(document.elementFromPoint(evtEnd.changedTouches[0].clientX, evtEnd.changedTouches[0].clientY)) !== true + ) { + timer = setTimeout(phase2, delay - Date.now()); + } + }; + + target.addEventListener('touchmove', abort, passiveCapture$2); + target.addEventListener('touchmove', startPhase2, passiveCapture$2); + target.addEventListener('touchend', startPhase2, passiveCapture$2); + target.addEventListener('touchcancel', startPhase2, passiveCapture$2); + } + } + + timer = setTimeout(() => { + if (waitForScroll === true) { + waitForScroll = void 0; + target.removeEventListener('touchmove', abort, passiveCapture$2); + } + + innerNode.classList.add('q-ripple__inner--enter'); + innerNode.style.transform = `translate3d(${centerX},${centerY},0) scale3d(1,1,1)`; + innerNode.style.opacity = 0.2; + + if (early !== true) { + timer = setTimeout(phase2, delay - Date.now()); + } + }, waitForScroll === true ? 70 : 50); // allow a longer delay to catch scroll + } + + function updateCtx (ctx, el, { modifiers, arg, value }) { + ctx.enabled = value !== false; + + if (ctx.enabled === true) { + const cfg = Object.assign({}, $q.config.ripple, modifiers, value); + const earlyChanged = ctx.modifiers.early === void 0 || ctx.modifiers.early !== cfg.early; + + ctx.modifiers = { + early: cfg.early === true, + stop: cfg.stop === true, + center: cfg.center === true, + color: cfg.color || arg, + keyCodes: [].concat(cfg.keyCodes || 13) + }; + + if (earlyChanged === true) { + cleanEvt(ctx, 'main'); + + if (cfg.early === true) { + addEvt(ctx, 'main', [ + [ el, 'mousedown', 'start', 'passive' ], + [ el, 'touchstart', 'start', 'passive' ], + [ el, 'keydown', 'keystart', 'passive' ] + ]); + } + else { + addEvt(ctx, 'main', [ + [ el, 'click', 'start', 'passive' ], + [ el, 'keyup', 'keystart', 'passive' ] + ]); + } + } + } + else { + ctx.abort.slice().forEach(fn => { fn(); }); + cleanEvt(ctx, 'main'); + ctx.preventMouse = 0; + ctx.preventKeyboard = false; + } + } + + var Ripple = { + name: 'ripple', + + inserted (el, binding) { + const ctx = { + modifiers: {}, + abort: [], + preventMouse: 0, + preventKeyboard: false, + + start (evt) { + if ( + ctx.enabled === true && + evt.qSkipRipple !== true && + (evt.type !== 'mousedown' || ctx.preventMouse === 0) && + // on ENTER in form IE emits a PointerEvent with negative client cordinates + (client.is.ie !== true || evt.clientX >= 0) + ) { + startPhase1(evt, el, ctx, $q.interaction.isKeyboard); + } + }, + + keystart (evt) { + if ( + ctx.preventKeyboard !== true && + ctx.enabled === true && + evt.qSkipRipple !== true && + isKeyCode(evt, ctx.modifiers.keyCodes) === true + ) { + startPhase1(evt, el, ctx, true); + } + } + }; + + updateCtx(ctx, el, binding); + + if (el.__qripple) { + el.__qripple_old = el.__qripple; + } + + el.__qripple = ctx; + }, + + update (el, binding) { + el.__qripple !== void 0 && updateCtx(el.__qripple, el, binding); + }, + + unbind (el) { + const ctx = el.__qripple_old || el.__qripple; + if (ctx !== void 0) { + ctx.abort.slice().forEach(fn => { fn(); }); + cleanEvt(ctx, 'main'); + delete el[el.__qripple_old ? '__qripple_old' : '__qripple']; + } + } + }; + + var RippleMixin = { + directives: { + Ripple + }, + + props: { + ripple: { + type: [Boolean, Object], + default: true + } + } + }; + + const btnPadding = { + none: 0, + xs: 4, + sm: 8, + md: 16, + lg: 24, + xl: 32 + }; + + const formTypes = [ 'button', 'submit', 'reset' ]; + const mediaTypeRe = /[^\s]\/[^\s]/; + + const btnDesignOptions = [ 'flat', 'outline', 'push', 'unelevated' ]; + const getBtnDesign = (vm, defaultValue) => { + if (vm.flat === true) return 'flat' + if (vm.outline === true) return 'outline' + if (vm.push === true) return 'push' + if (vm.unelevated === true) return 'unelevated' + return defaultValue + }; + + var BtnMixin = { + mixins: [ + ListenersMixin, + RippleMixin, + RouterLinkMixin, + AlignMixin, + getSizeMixin({ + xs: 8, + sm: 10, + md: 14, + lg: 20, + xl: 24 + }) + ], + + props: { + type: { + type: String, + default: 'button' + }, + + to: [ Object, String ], + replace: Boolean, + append: Boolean, + + label: [ Number, String ], + icon: String, + iconRight: String, + + ...btnDesignOptions.reduce( + (acc, val) => (acc[ val ] = Boolean) && acc, + {} + ), + + square: Boolean, + round: Boolean, + rounded: Boolean, + glossy: Boolean, + + size: String, + fab: Boolean, + fabMini: Boolean, + padding: String, + + color: String, + textColor: String, + noCaps: Boolean, + noWrap: Boolean, + dense: Boolean, + + tabindex: [ Number, String ], + + align: { default: 'center' }, + stack: Boolean, + stretch: Boolean, + loading: { + type: Boolean, + default: null + }, + disable: Boolean + }, + + computed: { + style () { + if (this.fab === false && this.fabMini === false) { + return this.sizeStyle + } + }, + + isRounded () { + return this.rounded === true || this.fab === true || this.fabMini === true + }, + + isActionable () { + return this.disable !== true && this.loading !== true + }, + + computedTabIndex () { + return this.isActionable === true ? this.tabindex || 0 : -1 + }, + + design () { + return getBtnDesign(this, 'standard') + }, + + attrs () { + const acc = { tabindex: this.computedTabIndex }; + + if (this.hasLink === true) { + Object.assign(acc, this.linkAttrs); + } + else if (formTypes.includes(this.type) === true) { + acc.type = this.type; + } + + if (this.linkTag === 'a') { + if (this.disable === true) { + acc['aria-disabled'] = 'true'; + } + else if (acc.href === void 0) { + acc.role = 'button'; + } + + if (this.hasRouterLink !== true && mediaTypeRe.test(this.type) === true) { + acc.type = this.type; + } + } + else if (this.disable === true) { + acc.disabled = ''; + acc['aria-disabled'] = 'true'; + } + + if (this.loading === true && this.percentage !== void 0) { + acc.role = 'progressbar'; + acc['aria-valuemin'] = 0; + acc['aria-valuemax'] = 100; + acc['aria-valuenow'] = this.percentage; + } + + return acc + }, + + classes () { + let colors; + + if (this.color !== void 0) { + if (this.flat === true || this.outline === true) { + colors = `text-${this.textColor || this.color}`; + } + else { + colors = `bg-${this.color} text-${this.textColor || 'white'}`; + } + } + else if (this.textColor) { + colors = `text-${this.textColor}`; + } + + const shape = this.round === true + ? 'round' + : `rectangle${this.isRounded === true ? ' q-btn--rounded' : (this.square === true ? ' q-btn--square' : '')}`; + + return `q-btn--${this.design} q-btn--${shape}` + + (colors !== void 0 ? ' ' + colors : '') + + (this.isActionable === true ? ' q-btn--actionable q-focusable q-hoverable' : (this.disable === true ? ' disabled' : '')) + + (this.fab === true ? ' q-btn--fab' : (this.fabMini === true ? ' q-btn--fab-mini' : '')) + + (this.noCaps === true ? ' q-btn--no-uppercase' : '') + + (this.noWrap === true ? '' : ' q-btn--wrap') + // this is for IE11 + (this.dense === true ? ' q-btn--dense' : '') + + (this.stretch === true ? ' no-border-radius self-stretch' : '') + + (this.glossy === true ? ' glossy' : '') + }, + + innerClasses () { + return this.alignClass + (this.stack === true ? ' column' : ' row') + + (this.noWrap === true ? ' no-wrap text-no-wrap' : '') + + (this.loading === true ? ' q-btn__content--hidden' : '') + }, + + wrapperStyle () { + if (this.padding !== void 0) { + return { + padding: this.padding + .split(/\s+/) + .map(v => v in btnPadding ? btnPadding[v] + 'px' : v) + .join(' '), + minWidth: '0', + minHeight: '0' + } + } + } + } + }; + + const { passiveCapture: passiveCapture$1 } = listenOpts; + + let + touchTarget = void 0, + keyboardTarget = void 0, + mouseTarget = void 0; + + const iconAttrs = { role: 'img', 'aria-hidden': 'true' }; + + var QBtn = Vue__default["default"].extend({ + name: 'QBtn', + + mixins: [ BtnMixin ], + + props: { + percentage: Number, + darkPercentage: Boolean + }, + + computed: { + hasLabel () { + return this.label !== void 0 && this.label !== null && this.label !== '' + }, + + computedRipple () { + return this.ripple === false + ? false + : { + keyCodes: this.hasLink === true ? [ 13, 32 ] : [ 13 ], + ...(this.ripple === true ? {} : this.ripple) + } + }, + + percentageStyle () { + const val = Math.max(0, Math.min(100, this.percentage)); + if (val > 0) { + return { transition: 'transform 0.6s', transform: `translateX(${val - 100}%)` } + } + }, + + onEvents () { + if (this.loading === true) { + return { + mousedown: this.__onLoadingEvt, + touchstart: this.__onLoadingEvt, + click: this.__onLoadingEvt, + keydown: this.__onLoadingEvt, + keyup: this.__onLoadingEvt + } + } + + if (this.isActionable === true) { + const on = { + ...this.qListeners, + click: this.click, + keydown: this.__onKeydown, + mousedown: this.__onMousedown + }; + + if (this.$q.platform.has.touch === true) { + on[ `${on.touchstart === void 0 ? '&' : ''}touchstart` ] = this.__onTouchstart; + } + + return on + } + + return { + // needed; especially for disabled tags + click: stopAndPrevent + } + }, + + directives () { + if (this.disable !== true && this.ripple !== false) { + return [{ + name: 'ripple', + value: this.computedRipple, + modifiers: { center: this.round } + }] + } + } + }, + + methods: { + click (e) { + if (e !== void 0) { + if (e.defaultPrevented === true) { + return + } + + const el = document.activeElement; + // focus button if it came from ENTER on form + // prevent the new submit (already done) + if ( + this.type === 'submit' && + ( + (this.$q.platform.is.ie === true && (e.clientX < 0 || e.clientY < 0)) || + ( + el !== document.body && + this.$el.contains(el) === false && + // required for iOS and desktop Safari + el.contains(this.$el) === false + ) + ) + ) { + this.$el.focus(); + + const onClickCleanup = () => { + document.removeEventListener('keydown', stopAndPrevent, true); + document.removeEventListener('keyup', onClickCleanup, passiveCapture$1); + this.$el !== void 0 && this.$el.removeEventListener('blur', onClickCleanup, passiveCapture$1); + }; + + document.addEventListener('keydown', stopAndPrevent, true); + document.addEventListener('keyup', onClickCleanup, passiveCapture$1); + this.$el.addEventListener('blur', onClickCleanup, passiveCapture$1); + } + } + + this.__navigateOnClick(e); + }, + + __onKeydown (e) { + this.$emit('keydown', e); + + if (isKeyCode(e, [ 13, 32 ]) === true) { + if (keyboardTarget !== this.$el) { + keyboardTarget !== void 0 && this.__cleanup(); + + if (e.defaultPrevented !== true) { + // focus external button if the focus helper was focused before + this.$el.focus(); + + keyboardTarget = this.$el; + this.$el.classList.add('q-btn--active'); + document.addEventListener('keyup', this.__onPressEnd, true); + this.$el.addEventListener('blur', this.__onPressEnd, passiveCapture$1); + } + } + + stopAndPrevent(e); + } + }, + + __onTouchstart (e) { + this.$emit('touchstart', e); + + if (touchTarget !== this.$el) { + touchTarget !== void 0 && this.__cleanup(); + + if (e.defaultPrevented !== true) { + touchTarget = this.$el; + const target = this.touchTargetEl = e.target; + target.addEventListener('touchcancel', this.__onPressEnd, passiveCapture$1); + target.addEventListener('touchend', this.__onPressEnd, passiveCapture$1); + } + } + }, + + __onMousedown (e) { + this.$emit('mousedown', e); + + if (mouseTarget !== this.$el) { + mouseTarget !== void 0 && this.__cleanup(); + + if (e.defaultPrevented !== true) { + mouseTarget = this.$el; + this.$el.classList.add('q-btn--active'); + document.addEventListener('mouseup', this.__onPressEnd, passiveCapture$1); + } + } + }, + + __onPressEnd (e) { + // needed for IE (because it emits blur when focusing button from focus helper) + if (e !== void 0 && e.type === 'blur' && document.activeElement === this.$el) { + return + } + + if (e !== void 0 && e.type === 'keyup') { + if (keyboardTarget === this.$el && isKeyCode(e, [ 13, 32 ]) === true) { + // for click trigger + const evt = new MouseEvent('click', e); + e.defaultPrevented === true && prevent(evt); + e.cancelBubble === true && stop(evt); + this.$el.dispatchEvent(evt); + + stopAndPrevent(e); + } + + this.$emit('keyup', e); + } + + this.__cleanup(); + }, + + __cleanup (destroying) { + const blurTarget = this.$refs.blurTarget; + + if ( + destroying !== true && + (touchTarget === this.$el || mouseTarget === this.$el) && + blurTarget !== void 0 && + blurTarget !== document.activeElement && + this.$el.contains(document.activeElement) === true + ) { + blurTarget.setAttribute('tabindex', -1); + blurTarget.focus(); + } + + if (touchTarget === this.$el) { + const target = this.touchTargetEl; + target.removeEventListener('touchcancel', this.__onPressEnd, passiveCapture$1); + target.removeEventListener('touchend', this.__onPressEnd, passiveCapture$1); + touchTarget = this.touchTargetEl = void 0; + } + + if (mouseTarget === this.$el) { + document.removeEventListener('mouseup', this.__onPressEnd, passiveCapture$1); + mouseTarget = void 0; + } + + if (keyboardTarget === this.$el) { + document.removeEventListener('keyup', this.__onPressEnd, true); + this.$el !== void 0 && this.$el.removeEventListener('blur', this.__onPressEnd, passiveCapture$1); + keyboardTarget = void 0; + } + + this.$el !== void 0 && this.$el.classList.remove('q-btn--active'); + }, + + __onLoadingEvt (evt) { + stopAndPrevent(evt); + evt.qSkipRipple = true; + } + }, + + beforeDestroy () { + this.__cleanup(true); + }, + + render (h) { + let inner = []; + + this.icon !== void 0 && inner.push( + h(QIcon, { + attrs: iconAttrs, + props: { name: this.icon, left: this.stack === false && this.hasLabel === true } + }) + ); + + this.hasLabel === true && inner.push( + h('span', { staticClass: 'block' }, [ this.label ]) + ); + + inner = mergeSlot(inner, this, 'default'); + + if (this.iconRight !== void 0 && this.round === false) { + inner.push( + h(QIcon, { + attrs: iconAttrs, + props: { name: this.iconRight, right: this.stack === false && this.hasLabel === true } + }) + ); + } + + const child = [ + h('span', { + staticClass: 'q-focus-helper', + ref: 'blurTarget' + }) + ]; + + if (this.loading === true && this.percentage !== void 0) { + child.push( + h('span', { + staticClass: 'q-btn__progress absolute-full overflow-hidden', + class: this.darkPercentage === true ? 'q-btn__progress--dark' : '' + }, [ + h('span', { + staticClass: 'q-btn__progress-indicator fit block', + style: this.percentageStyle + }) + ]) + ); + } + + child.push( + h('span', { + staticClass: 'q-btn__wrapper col row q-anchor--skip', + style: this.wrapperStyle + }, [ + h('span', { + staticClass: 'q-btn__content text-center col items-center q-anchor--skip', + class: this.innerClasses + }, inner) + ]) + ); + + this.loading !== null && child.push( + h('transition', { + props: { name: 'q-transition--fade' } + }, this.loading === true ? [ + h('span', { + key: 'loading', + staticClass: 'absolute-full flex flex-center' + }, this.$scopedSlots.loading !== void 0 ? this.$scopedSlots.loading() : [ h(QSpinner) ]) + ] : void 0) + ); + + return h(this.hasLink === true || this.type === 'a' ? 'a' : 'button', { + staticClass: 'q-btn q-btn-item non-selectable no-outline', + class: this.classes, + style: this.style, + attrs: this.attrs, + on: this.onEvents, + directives: this.directives + }, child) + } + }); + + const panelParents = new WeakMap(); + + function hideScroll (el) { + if (el !== null && el !== void 0) { + const parent = el.closest('.q-panel-parent'); + panelParents.set(el, parent); + parent !== null && parent.classList.add('q-transition--hide-scroll'); + } + } + + function restoreScroll (el) { + if (el !== null && el !== void 0) { + const parent = panelParents.get(el) || el.closest('.q-panel-parent'); + parent !== null && parent.classList.remove('q-transition--hide-scroll'); + } + } + + const onTransitionHideScroll = { + 'before-leave': hideScroll, + 'after-leave': restoreScroll, + 'leave-cancelled': restoreScroll + }; + + var TransitionMixin = { + props: { + transitionShow: { + type: String, + default: 'fade' + }, + + transitionHide: { + type: String, + default: 'fade' + } + }, + + computed: { + transitionProps () { + const show = `q-transition--${this.transitionShow}`; + const hide = `q-transition--${this.transitionHide}`; + return { + enterClass: `${show}-enter`, + leaveClass: `${hide}-leave`, + appearClass: `${show}-appear`, + enterToClass: `${show}-enter-to`, + leaveToClass: `${hide}-leave-to`, + appearToClass: `${show}-appear-to`, + enterActiveClass: `${show}-enter-active`, + leaveActiveClass: `${hide}-leave-active`, + appearActiveClass: `${show}-appear-active` + } + } + } + }; + + var QBtnGroup = Vue__default["default"].extend({ + name: 'QBtnGroup', + + mixin: [ ListenersMixin ], + + props: { + unelevated: Boolean, + outline: Boolean, + flat: Boolean, + rounded: Boolean, + square: Boolean, + push: Boolean, + stretch: Boolean, + glossy: Boolean, + spread: Boolean + }, + + computed: { + classes () { + return ['unelevated', 'outline', 'flat', 'rounded', 'square', 'push', 'stretch', 'glossy'] + .filter(t => this[t] === true) + .map(t => `q-btn-group--${t}`).join(' ') + } + }, + + render (h) { + return h('div', { + staticClass: 'q-btn-group row no-wrap ' + + (this.spread === true ? 'q-btn-group--spread' : 'inline'), + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + function clearSelection () { + if (window.getSelection !== void 0) { + const selection = window.getSelection(); + if (selection.empty !== void 0) { + selection.empty(); + } + else if (selection.removeAllRanges !== void 0) { + selection.removeAllRanges(); + Platform.is.mobile !== true && selection.addRange(document.createRange()); + } + } + else if (document.selection !== void 0) { + document.selection.empty(); + } + } + + const scrollListenerHandlers = []; + + function scrollEventDispatcher (e) { + scrollListenerHandlers + .slice() + .forEach(fn => { + if (e && e.target && e.target.qScrollPrevented === true) { + return + } + + eventOnAncestors(e, fn.scrollTarget) === true && fn(e); + }); + } + + var AnchorMixin = { + props: { + target: { + default: true + }, + noParentEvent: Boolean, + contextMenu: Boolean + }, + + watch: { + contextMenu (val) { + if (this.anchorEl !== void 0) { + this.__unconfigureAnchorEl(); + this.__configureAnchorEl(val); + } + }, + + target () { + if (this.anchorEl !== void 0) { + this.__unconfigureAnchorEl(); + } + + this.__pickAnchorEl(); + }, + + noParentEvent (val) { + if (this.anchorEl !== void 0) { + if (val === true) { + this.__unconfigureAnchorEl(); + } + else { + this.__configureAnchorEl(); + } + } + } + }, + + methods: { + __showCondition (evt) { + // abort with no parent configured or on multi-touch + if (this.anchorEl === void 0) { + return false + } + if (evt === void 0) { + return true + } + return evt.touches === void 0 || evt.touches.length <= 1 + }, + + __contextClick (evt) { + this.hide(evt); + prevent(evt); + this.$nextTick(() => { + this.show(evt); + + if (evt === Object(evt)) { + evt.qAnchorHandled = true; + } + }); + }, + + __toggleKey (evt) { + isKeyCode(evt, 13) === true && this.toggle(evt); + }, + + __mobileCleanup (evt) { + this.anchorEl.classList.remove('non-selectable'); + clearTimeout(this.touchTimer); + + if (this.showing === true && evt !== void 0) { + clearSelection(); + } + }, + + prevent, + + __mobileTouch (evt) { + this.__mobileCleanup(evt); + + if (this.__showCondition(evt) !== true) { + return + } + + this.hide(evt); + this.anchorEl.classList.add('non-selectable'); + + const target = evt.target; + addEvt(this, 'anchor', [ + [ target, 'touchmove', '__mobileCleanup', 'passive' ], + [ target, 'touchend', '__mobileCleanup', 'passive' ], + [ target, 'touchcancel', '__mobileCleanup', 'passive' ], + [ this.anchorEl, 'contextmenu', 'prevent', 'notPassive' ] + ]); + + this.touchTimer = setTimeout(() => { + this.show(evt); + + if (evt === Object(evt)) { + evt.qAnchorHandled = true; + } + }, 300); + }, + + __unconfigureAnchorEl () { + cleanEvt(this, 'anchor'); + }, + + __configureAnchorEl (context = this.contextMenu) { + if (this.noParentEvent === true || this.anchorEl === void 0) { return } + + let evts; + + if (context === true) { + if (this.$q.platform.is.mobile === true) { + evts = [ + [ this.anchorEl, 'touchstart', '__mobileTouch', 'passive' ] + ]; + } + else { + evts = [ + [ this.anchorEl, 'mousedown', 'hide', 'passive' ], + [ this.anchorEl, 'contextmenu', '__contextClick', 'notPassive' ] + ]; + } + } + else { + evts = [ + [ this.anchorEl, 'click', 'toggle', 'passive' ], + [ this.anchorEl, 'keyup', '__toggleKey', 'passive' ] + ]; + } + + addEvt(this, 'anchor', evts); + }, + + __setAnchorEl (el) { + this.anchorEl = el; + while (this.anchorEl.classList.contains('q-anchor--skip')) { + this.anchorEl = this.anchorEl.parentNode; + } + this.__configureAnchorEl(); + }, + + __pickAnchorEl () { + if (this.target === false || this.target === '' || this.parentEl === null) { + this.anchorEl = void 0; + } + else if (this.target === true) { + this.__setAnchorEl(this.parentEl); + } + else { + this.anchorEl = getElement(this.target) || void 0; + + if (this.anchorEl !== void 0) { + this.__configureAnchorEl(); + } + else { + console.error(`Anchor: target "${this.target}" not found`, this); + } + } + }, + + __changeScrollEvent (fn, scrollTarget) { + const hadHandlers = scrollListenerHandlers.length > 0; + + if (this.__scrollFn !== void 0) { + const index = scrollListenerHandlers.indexOf(this.__scrollFn); + + if (index > -1) { + scrollListenerHandlers.splice(index, 1); + } + + this.__scrollFn = void 0; + } + + if (fn !== void 0 && scrollTarget !== null && scrollTarget !== void 0) { + fn.scrollTarget = scrollTarget === window ? document : scrollTarget; + scrollListenerHandlers.push(fn); + + this.__scrollFn = fn; + } + + if (hadHandlers === true && scrollListenerHandlers.length === 0) { + window.removeEventListener('scroll', scrollEventDispatcher, listenOpts.passiveCapture); + } + else if (hadHandlers === false && scrollListenerHandlers.length > 0) { + window.addEventListener('scroll', scrollEventDispatcher, listenOpts.passiveCapture); + } + } + }, + + created () { + if ( + typeof this.__configureScrollTarget === 'function' && + typeof this.__unconfigureScrollTarget === 'function' + ) { + this.noParentEventWatcher = this.$watch('noParentEvent', () => { + this.__unconfigureScrollTarget(); + this.__configureScrollTarget(); + }); + } + }, + + mounted () { + this.parentEl = this.$el.parentNode; + this.__pickAnchorEl(); + + if (this.value === true && this.anchorEl === void 0) { + this.$emit('input', false); + } + }, + + beforeDestroy () { + clearTimeout(this.touchTimer); + this.noParentEventWatcher !== void 0 && this.noParentEventWatcher(); + this.__anchorCleanup !== void 0 && this.__anchorCleanup(); + this.__unconfigureAnchorEl(); + } + }; + + var TimeoutMixin = { + created () { + this.__tickFnList = []; + this.__timeoutFnList = []; + }, + + deactivated () { + this.__tickFnList.forEach(tick => { tick.removeTick(); }); + this.__timeoutFnList.forEach(tick => { tick.removeTimeout(); }); + }, + + beforeDestroy () { + this.__tickFnList.forEach(tick => { tick.removeTick(); }); + this.__tickFnList = void 0; + + this.__timeoutFnList.forEach(tick => { tick.removeTimeout(); }); + this.__timeoutFnList = void 0; + }, + + methods: { + __useTick (registerFnName, removeFnName) { + const tick = { + removeTick () { + tick.fn = void 0; + }, + + registerTick: fn => { + tick.fn = fn; + + this.$nextTick(() => { + if (tick.fn === fn) { + // we also check if VM is destroyed, since if it + // got to trigger one nextTick() we cannot stop it + this._isDestroyed === false && tick.fn(); + tick.fn = void 0; + } + }); + } + }; + + this.__tickFnList.push(tick); + + this[registerFnName] = tick.registerTick; + removeFnName !== void 0 && (this[removeFnName] = tick.removeTick); + }, + + __useTimeout (registerFnName, removeFnName) { + const timeout = { + removeTimeout () { + clearTimeout(timeout.timer); + }, + + registerTimeout: (fn, delay) => { + clearTimeout(timeout.timer); + + if (this._isDestroyed === false) { + timeout.timer = setTimeout(fn, delay); + } + } + }; + + this.__timeoutFnList.push(timeout); + + this[registerFnName] = timeout.registerTimeout; + removeFnName !== void 0 && (this[removeFnName] = timeout.removeTimeout); + } + } + }; + + const labelClick = { timeStamp: null, label: null, show: null }; + + function isDuplicateLabelClick (evt, fromShow) { + if (evt.type !== 'click') { + return false + } + + const { timeStamp, label, show } = labelClick; + const { target } = evt; + + labelClick.show = fromShow; + labelClick.timeStamp = evt.timeStamp; + labelClick.label = target + ? ( + typeof target.id === 'string' && target.id !== '' && label !== null && label.htmlFor === target.id + ? label + : typeof target.closest === 'function' ? target.closest('label') : null + ) + : null; + + return timeStamp === labelClick.timeStamp && label === labelClick.label && show !== fromShow + } + + var ModelToggleMixin = { + mixins: [ ListenersMixin ], + + props: { + value: { + type: Boolean, + default: void 0 + } + }, + + data () { + return { + showing: false + } + }, + + watch: { + value (val) { + this.__processModelChange(val); + }, + + $route () { + this.hideOnRouteChange === true && this.showing === true && this.hide(); + } + }, + + methods: { + toggle (evt) { + this[this.showing === true ? 'hide' : 'show'](evt); + + if (evt === Object(evt)) { + evt.qAnchorHandled = true; + } + }, + + show (evt) { + if ( + this.disable === true || + ( + evt === Object(evt) && + (evt.qAnchorHandled === true || isDuplicateLabelClick(evt, 'show') === true) + ) || + (this.__showCondition !== void 0 && this.__showCondition(evt) !== true) + ) { + return + } + + if (this.qListeners.input !== void 0 && isSSR === false) { + this.$emit('input', true); + this.payload = evt; + this.$nextTick(() => { + if (this.payload === evt) { + this.payload = void 0; + } + }); + } + + if (this.value === void 0 || this.qListeners.input === void 0 || isSSR === true) { + this.__processShow(evt); + } + }, + + __processShow (evt) { + if (this.showing === true) { + return + } + + // need to call it before setting showing to true + // in order to not ruin the animation + this.__preparePortal !== void 0 && this.__preparePortal(); + + this.showing = true; + + this.$emit('before-show', evt); + + if (this.__show !== void 0) { + this.__show(evt); + } + else { + this.$emit('show', evt); + } + }, + + hide (evt) { + if ( + this.disable === true || + ( + evt === Object(evt) && + (evt.qAnchorHandled === true || isDuplicateLabelClick(evt, 'hide') === true) + ) + ) { + return + } + + if (this.qListeners.input !== void 0 && isSSR === false) { + this.$emit('input', false); + this.payload = evt; + this.$nextTick(() => { + if (this.payload === evt) { + this.payload = void 0; + } + }); + } + if (this.value === void 0 || this.qListeners.input === void 0 || isSSR === true) { + this.__processHide(evt); + } + }, + + __processHide (evt) { + if (this.showing === false) { + return + } + + this.showing = false; + + this.$emit('before-hide', evt); + + if (this.__hide !== void 0) { + this.__hide(evt); + } + else { + this.$emit('hide', evt); + } + }, + + __processModelChange (val) { + if (this.disable === true && val === true) { + this.qListeners.input !== void 0 && this.$emit('input', false); + } + else if ((val === true) !== this.showing) { + this[`__process${val === true ? 'Show' : 'Hide'}`](this.payload); + } + } + } + }; + + const FOCUSABLE_SELECTOR = [ + ':focus', + 'a[href]:not([tabindex="-1"]):not(.q-focus__clone)', + 'area[href]:not([tabindex="-1"]):not(.q-focus__clone)', + 'input:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'select:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'textarea:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'button:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'iframe:not([tabindex="-1"]):not(.q-focus__clone)', + '[tabindex]:not([tabindex="-1"]):not(.q-focus__clone)', + '[contenteditable]:not([tabindex="-1"]):not(.q-focus__clone):not([contenteditable="false"])', + '.q-tab.q-focusable:not(.q-focus__clone)' + ].join(','); + + const KEY_SKIP_SELECTOR = [ + 'input:not([disabled])', + 'select:not([disabled])', + 'select:not([disabled]) *', + 'textarea:not([disabled])', + '[contenteditable]:not([contenteditable="false"])', + '[contenteditable]:not([contenteditable="false"]) *', + '.q-key-group-navigation--ignore-key', + '.q-key-group-navigation--ignore-key *', + '.q-focus__clone' + ].join(','); + + const EDITABLE_SELECTOR = [ + 'input:not(.q-focus__clone):not([disabled]):not([readonly]):not([type="button"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="radio"]):not([type="range"]):not([type="reset"]):not([type="submit"])', + 'textarea:not(.q-focus__clone):not([disabled]):not([readonly])', + '[contenteditable]:not(.q-focus__clone):not([contenteditable="false"])', + '[contenteditable]:not(.q-focus__clone):not([contenteditable="false"]) *' + ].join(','); + + let scrollOffset = 0; + let managedFocusFn; + + function isInPortal (el) { + return el.matches('.q-dialog *, .q-menu *, .q-tooltip *, .q-stepper__step-content *') + } + + function isEditable (el) { + return el.matches(EDITABLE_SELECTOR) + } + + function managedFocus (el) { + if (managedFocusFn === void 0) { + const scrollIntoView = typeof el.scrollIntoViewIfNeeded === 'function' + ? target => { target.scrollIntoViewIfNeeded(false); } + : target => { target.scrollIntoView(); }; + + managedFocusFn = client.is.ios === true || client.is.nativeMobile === true || client.is.standalone === true + ? el => { + const elEditable = isEditable(el); + + if ( + el === document.body || + (elEditable !== true && el.tabIndex < 0) + ) { + el !== document.activeElement && el.focus({ preventScroll: true }); + + return + } + + const elInPortal = isInPortal(el); + + const clone = el.cloneNode(true); + const parent = el.parentNode; + const scrollingElement = document.scrollingElement || document.documentElement; + const initialScrollTop = scrollingElement.scrollTop; + + clone.setAttribute('tabindex', -1); + clone.removeAttribute('id'); + clone.removeAttribute('autofocus'); + clone.removeAttribute('data-autofocus'); + clone.classList.add('q-focus__clone'); + + parent.insertBefore(clone, el); + + el !== document.activeElement && el.focus({ preventScroll: true }); + + setTimeout(() => { + clone.remove(); + + if (el && el === document.activeElement && elEditable === true) { + elInPortal === true && scrollIntoView(el); + + const + { top, bottom } = el.getBoundingClientRect(), + height = window.visualViewport !== void 0 + ? window.visualViewport.height + : window.innerHeight; + + let finalScrollTop = scrollingElement.scrollTop; + + if (top < 0) { + finalScrollTop += top - 32; + } + else if (top > 0 && bottom > height) { + finalScrollTop += bottom - height + 64; + } + + requestAnimationFrame(() => { + scrollingElement.scrollTop = finalScrollTop; + }); + + if (el.qRestoreScrollSet !== true && elInPortal !== true) { + scrollOffset += finalScrollTop - initialScrollTop; + + const restoreScrollFn = () => { + if (el) { + el.qRestoreScrollSet = void 0; + el.removeEventListener('blur', restoreScrollFn); + } + + if (scrollingElement.scrollTop !== finalScrollTop) { + scrollOffset = 0; + } + else if (scrollOffset !== 0) { + requestAnimationFrame(() => { + const { activeElement } = document; + if ( + !activeElement || + (isEditable(activeElement) !== true && activeElement.tabIndex < 0) + ) { + scrollingElement.scrollTop -= scrollOffset; + scrollOffset = 0; + } + }); + } + }; + + el.qRestoreScrollSet = true; + el.addEventListener('blur', restoreScrollFn); + } + } + }, 200); + } + : el => { + el !== document.activeElement && el.focus({ preventScroll: true }); + + if (isInPortal(el) === true && isEditable(el) === true) { + setTimeout(() => { + el && el === document.activeElement && scrollIntoView(el); + }, 200); + } + }; + } + + managedFocusFn(el); + } + + function changeFocusedElement (list, to, direction = 1, managed, noWrap, start) { + const lastIndex = list.length - 1; + + if (noWrap === true && (to > lastIndex || to < 0)) { + return + } + + const index = normalizeToInterval(to, 0, lastIndex); + + if (index === start || index > lastIndex) { + return + } + + const initialEl = document.activeElement; + const focusFn = managed === true + ? () => { managedFocus(list[index]); } + : () => { list[index].focus(); }; + + if (initialEl !== null) { + initialEl._qKeyNavIgnore = true; + focusFn(); + initialEl._qKeyNavIgnore = false; + } + else { + focusFn(); + } + + if (document.activeElement !== list[index]) { + changeFocusedElement(list, index + direction, direction, managed, noWrap, start === void 0 ? index : start); + } + } + + const findProto = Array.prototype.find; + const findIndexProto = Array.prototype.findIndex; + const mapProto = Array.prototype.map; + + function closePortalMenus (vm, evt) { + do { + if (vm.$options.name === 'QMenu') { + vm.hide(evt); + + // is this a point of separation? + if (vm.separateClosePopup === true) { + return vm.$parent + } + } + else if (vm.__renderPortal !== void 0) { + // treat it as point of separation if parent is QPopupProxy + // (so mobile matches desktop behavior) + // and hide it too + if (vm.$parent !== void 0 && vm.$parent.$options.name === 'QPopupProxy') { + vm.hide(evt); + return vm.$parent + } + else { + return vm + } + } + vm = vm.$parent; + } while ( + vm !== void 0 && ( + vm.$el.contains === void 0 || // IE polyfill does not work on comments + vm.$el.contains(evt.target) !== true + ) + ) + } + + function closePortals (vm, evt, depth) { + while (depth !== 0 && vm !== void 0) { + if (vm.__renderPortal !== void 0) { + depth--; + + if (vm.$options.name === 'QMenu') { + vm = closePortalMenus(vm, evt); + continue + } + + vm.hide(evt); + } + + vm = vm.$parent; + } + } + + function isOnGlobalDialog (vm) { + while (vm !== void 0) { + if (vm.$options.name === 'QGlobalDialog') { + return true + } + if (vm.$options.name === 'QDialog') { + return false + } + + vm = vm.$parent; + } + return false + } + + function getPortalsContainer (fullscreenElement) { + let container = findProto.call(fullscreenElement.children, el => el.matches && el.matches('.q-portal__container')); + + if (container === void 0) { + container = document.createElement('div'); + container.classList.add('q-portal__container'); + } + + if (container.parentElement !== fullscreenElement || container.nextElementSibling !== null) { + fullscreenElement.appendChild(container); + } + + return container + } + + const portalVms = new WeakMap(); + + const Portal = { + inheritAttrs: false, + + props: { + contentClass: [ Array, String, Object ], + contentStyle: [ Array, String, Object ] + }, + + methods: { + focus (selector) { + const node = this.__getInnerNode(); + + if (node !== void 0 && node.contains(document.activeElement) !== true) { + let autofocusNode = null; + + if (selector !== '') { + autofocusNode = node.querySelector(typeof selector === 'string' ? selector : '[autofocus][tabindex], [data-autofocus][tabindex]') || + node.querySelector(typeof selector === 'string' ? selector : '[autofocus] [tabindex], [data-autofocus] [tabindex]') || + node.querySelector(typeof selector === 'string' ? selector : '[autofocus], [data-autofocus]'); + } + + if (autofocusNode !== null && typeof autofocusNode.focus === 'function') { + managedFocus(autofocusNode); + } + else { + const focusableElements = Array.prototype.slice.call(node.querySelectorAll(FOCUSABLE_SELECTOR)); + focusableElements.length > 0 && changeFocusedElement( + focusableElements, + focusableElements[0].classList.contains('q-key-group-navigation--ignore-focus') === true ? 1 : 0, + 1, + true + ); + } + } + }, + + __showPortal () { + if (this.$q.fullscreen !== void 0 && this.$q.fullscreen.isCapable === true) { + const append = () => { + if (this.__portal === void 0) { + return + } + + const + newParent = getBodyFullscreenElement(this.$q.fullscreen.activeEl), + oldContainer = this.__portal.$el.parentElement, + newContainer = getPortalsContainer(newParent); + + if ( + oldContainer !== newContainer && + (this.__onGlobalDialog === true || newParent.contains(this.$el) === true) + ) { + newContainer.appendChild(this.__portal.$el); + + if (oldContainer && oldContainer.parentElement !== document.body && oldContainer.children.length === 0) { + oldContainer.remove(); + } + } + }; + + this.unwatchFullscreen = this.$watch('$q.fullscreen.activeEl', debounce(append, 50)); + + if (this.__onGlobalDialog === false || this.$q.fullscreen.isActive === true) { + append(); + } + } + else if (this.__portal !== void 0 && this.__onGlobalDialog === false) { + getPortalsContainer(document.body).appendChild(this.__portal.$el); + } + }, + + __hidePortal () { + if (this.__portal !== void 0) { + if (this.unwatchFullscreen !== void 0) { + this.unwatchFullscreen(); + this.unwatchFullscreen = void 0; + } + + if (this.__onGlobalDialog === false) { + this.__portal.$destroy(); + this.__portal.$el.remove(); + } + + const container = this.__portal.$el.parentElement; + if (container && container.parentElement !== document.body && container.children.length === 0) { + container.remove(); + } + + this.__portal = void 0; + } + }, + + __preparePortal () { + if (this.__portal === void 0) { + if (this.__onGlobalDialog === true) { + portalVms.set(this.$el, this); + } + + this.__portal = this.__onGlobalDialog === true + ? { + $el: this.$el, + $refs: this.$refs + } + : new Vue__default["default"]({ + name: 'QPortal', + parent: this, + + inheritAttrs: false, + + render: h => { + this.$nextTick(() => { + portalVms.set(this.__portal.$el, this); + }); + + return this.__renderPortal(h) + }, + + components: this.$options.components, + directives: this.$options.directives + }).$mount(); + } + }, + + __getInnerNode () { + return this.__portal !== void 0 && this.__portal.$refs !== void 0 + ? this.__portal.$refs.inner + : void 0 + }, + + __focusCyclePortal (hiding) { + if (this.__portal === void 0 || document.body.contains(this.__portal.$el) !== true) { + return + } + + const portals = this.__portal.$el.parentElement.children; + const { activeElement } = document; + const activePortalIndex = activeElement + ? findIndexProto.call(portals, el => typeof el.contains === 'function' && el.contains(activeElement)) + : -1; + + // current focus is not in a portal + if (activePortalIndex < 0) { + // we are not refocusing because portal is hiding + if (hiding !== true) { + // we change the element that should receive focus when the bottom-most portal is closed + if (activeElement) { + const firstVm = portalVms.get(portals[0]); + firstVm && (firstVm.__refocusTarget = activeElement); + } + + // we focus the top-most portal (we are here from ESC so this is top-most) + this.focus(); + } + return + } + + const focusedVm = portalVms.get(portals[activePortalIndex]); + + // we are hiding and the focus is in a portal that has refocusTarget in our portal + if (hiding === true) { + const childVms = mapProto + .call(portals, el => portalVms.get(el)) + .filter(vm => vm && this.__portal.$el.contains(vm.__refocusTarget) === true); + + if (childVms.length > 0) { + childVms.forEach(vm => { + vm.__refocusTarget = this.__refocusTarget; + }); + } + + if (childVms.indexOf(focusedVm) > -1) { + return + } + } + + const activeVm = hiding === true + ? this + : focusedVm || this; + const refocusTarget = activeVm.__refocusTarget; + + // we are focusing another portal if our portal + // is not top-most or it is not hiding or it is not modal + if (activeVm !== this || hiding !== true || activeVm.seamless !== false) { + // if active portal is modal we focus the top-most portal + if (activeVm.seamless === false) { + this.focus(); + return + } + + if (activePortalIndex > 0) { + const prevEl = portals[activePortalIndex - 1]; + const prevVm = portalVms.get(prevEl); + + // if we have a portal below the active one + // and we are not hiding or we are modal + // and the refocusTarget is not in the portal below + // we focus the portal below (if refocusTarget is in that portal it will be focused below) + if ( + prevVm && + (hiding !== true || prevVm.seamless === false) && + ( + [ null, void 0, document.body ].indexOf(refocusTarget) !== -1 || + prevEl.contains(refocusTarget) === false + ) + ) { + prevVm.focus(); + return + } + } + } + + if ([ null, void 0, document.body ].indexOf(refocusTarget) === -1 && document.body.contains(refocusTarget) === true) { + managedFocus(refocusTarget); + } + else if (hiding !== true) { + const { body } = document; + const hasTabindex = body.hasAttribute('tabindex'); + hasTabindex === false && body.setAttribute('tabindex', -1); + body.focus(); + hasTabindex === false && this.$nextTick(() => { + body && body.removeAttribute('tabindex'); + }); + } + } + }, + + render (h) { + if (this.__onGlobalDialog === true) { + return this.__renderPortal(h) + } + + if (this.__portal !== void 0) { + this.__portal.$forceUpdate(); + } + }, + + beforeDestroy () { + this.__hidePortal(); + } + }; + + if (isSSR === false) { + Portal.created = function () { + this.__onGlobalDialog = isOnGlobalDialog(this.$parent); + }; + } + + var FocusWrapMixin = { + computed: { + focusGuardElements () { + return { + firstGuard: this.$createElement('span', { + staticClass: 'no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus', + attrs: { tabindex: 0 }, + on: { focus: this.__focusLast } + }), + lastGuard: this.$createElement('span', { + staticClass: 'no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus', + attrs: { tabindex: 0 }, + on: { focus: this.__focusFirst } + }) + } + } + }, + + methods: { + __focusFirst (keepInsideFocus) { + const innerNode = this.__getInnerNode(); + if (innerNode !== void 0 && (keepInsideFocus !== true || innerNode.contains(document.activeElement) !== true)) { + const focusableElements = Array.prototype.slice.call(innerNode.querySelectorAll(FOCUSABLE_SELECTOR), 1, -1); + changeFocusedElement(focusableElements, 0, 1); + } + }, + + __focusLast () { + const innerNode = this.__getInnerNode(); + if (innerNode !== void 0) { + const focusableElements = Array.prototype.slice.call(innerNode.querySelectorAll(FOCUSABLE_SELECTOR), 1, -1); + changeFocusedElement(focusableElements, focusableElements.length - 1, -1); + } + }, + + __getFocusWrappedContent (slotName) { + return mergeSlot([ + this.focusGuardElements.firstGuard + ], this, slotName).concat( + this.focusGuardElements.lastGuard + ) + } + } + }; + + function getVmOfNode (el) { + for (let node = el; node !== null; node = node.parentNode) { + // node.__vue__ can be null if the instance was destroyed + if (node.__vue__ !== void 0) { + return node.__vue__ + } + } + } + + function isVmChildOf (childVm, parentVm) { + // node.__vue__ can be null if the instance was destroyed + if (childVm === null || parentVm === null) { + return null + } + + for (let vm = childVm; vm !== void 0; vm = vm.$parent) { + if (vm === parentVm) { + return true + } + } + return false + } + + let timer; + + const + { notPassiveCapture, passiveCapture } = listenOpts, + handlers$1 = { + click: [], + focus: [] + }; + + function hasModalsAbove (node) { + while ((node = node.nextElementSibling) !== null) { + if (node.classList.contains('q-dialog--modal')) { + return true + } + } + + return false + } + + function execHandlers (list, evt) { + for (let i = list.length - 1; i >= 0; i--) { + if (list[i](evt) === void 0) { + return + } + } + } + + function globalHandler (evt) { + clearTimeout(timer); + + // prevent autofocus on body resulting from blur + if ( + evt.type === 'focusin' && ( + (client.is.ie === true && evt.target === document.body) || + evt.target.hasAttribute('tabindex') === true + ) + ) { + timer = setTimeout(() => { + execHandlers(handlers$1.focus, evt); + }, client.is.ie === true ? 500 : 200); + } + else { + execHandlers(handlers$1.click, evt); + } + } + + var ClickOutside = { + name: 'click-outside', + + bind (el, { arg, value }, vnode) { + const vmEl = vnode.componentInstance || vnode.context; + + const ctx = { + trigger: value, + toggleEl: arg, + + handler (evt) { + const target = evt.target; + + if ( + evt.qClickOutside !== true && + document.body.contains(target) === true && + target.nodeType !== 8 && + // directives that prevent click by using pointer-events none generate click on html element + target !== document.documentElement && + target.classList.contains('no-pointer-events') === false && + hasModalsAbove(el) !== true && + ( + ctx.toggleEl === void 0 || + ctx.toggleEl.contains(target) === false + ) && + ( + target === document.body || + isVmChildOf(getVmOfNode(target), vmEl) === false + ) + ) { + // mark the event as being processed by clickOutside + // used to prevent refocus after menu close + evt.qClickOutside = true; + + return ctx.trigger(evt) + } + } + }; + + if (el.__qclickoutside) { + el.__qclickoutside_old = el.__qclickoutside; + } + + el.__qclickoutside = ctx; + + if (handlers$1.click.length === 0) { + document.addEventListener('mousedown', globalHandler, notPassiveCapture); + document.addEventListener('touchstart', globalHandler, notPassiveCapture); + document.addEventListener('focusin', globalHandler, passiveCapture); + } + + handlers$1.click.push(ctx.handler); + + ctx.timerFocusin = setTimeout(() => { + handlers$1.focus.push(ctx.handler); + }, 500); + }, + + update (el, { arg, value, oldValue }) { + const ctx = el.__qclickoutside; + + if (ctx !== void 0) { + if (ctx.toggleEl !== arg) { + ctx.toggleEl = arg; + } + if (oldValue !== value) { + ctx.trigger = value; + } + } + }, + + unbind (el) { + const ctx = el.__qclickoutside_old || el.__qclickoutside; + if (ctx !== void 0) { + clearTimeout(ctx.timerFocusin); + + const + indexClick = handlers$1.click.findIndex(h => h === ctx.handler), + indexFocus = handlers$1.focus.findIndex(h => h === ctx.handler); + + indexClick > -1 && handlers$1.click.splice(indexClick, 1); + indexFocus > -1 && handlers$1.focus.splice(indexFocus, 1); + + if (handlers$1.click.length === 0) { + clearTimeout(timer); + document.removeEventListener('mousedown', globalHandler, notPassiveCapture); + document.removeEventListener('touchstart', globalHandler, notPassiveCapture); + document.removeEventListener('focusin', globalHandler, passiveCapture); + } + + delete el[el.__qclickoutside_old ? '__qclickoutside_old' : '__qclickoutside']; + } + } + }; + + const scrollTargets = isSSR === true + ? [] + : [ null, document, document.body, document.scrollingElement, document.documentElement ]; + + let rtlHasScrollBugStatus; + function rtlHasScrollBug () { + if (isSSR === true) { + return false + } + + if (rtlHasScrollBugStatus === void 0) { + const scroller = document.createElement('div'); + const spacer = document.createElement('div'); + + Object.assign(scroller.style, { + direction: 'rtl', + width: '1px', + height: '1px', + overflow: 'auto' + }); + + Object.assign(spacer.style, { + width: '1000px', + height: '1px' + }); + + scroller.appendChild(spacer); + document.body.appendChild(scroller); + scroller.scrollLeft = -1000; + + rtlHasScrollBugStatus = scroller.scrollLeft >= 0; + + scroller.remove(); + } + + return rtlHasScrollBugStatus + } + + function getScrollTarget (el, targetEl) { + let target = getElement(targetEl); + + if (target === null) { + if (el !== Object(el) || typeof el.closest !== 'function') { + return window + } + + target = el.closest('.scroll,.scroll-y,.overflow-auto,.q-dialog__inner > div'); + } + + return scrollTargets.includes(target) + ? window + : target + } + + function getScrollHeight (el) { + return (el === window ? document.body : el).scrollHeight + } + + function getScrollWidth (el) { + return (el === window ? document.body : el).scrollWidth + } + + function getVerticalScrollPosition (scrollTarget) { + return scrollTarget === window + ? window.pageYOffset || window.scrollY || document.body.scrollTop || 0 + : scrollTarget.scrollTop + } + + const getScrollPosition = getVerticalScrollPosition; + + function getHorizontalScrollPosition (scrollTarget) { + return scrollTarget === window + ? window.pageXOffset || window.scrollX || document.body.scrollLeft || 0 + : scrollTarget.scrollLeft + } + + function animVerticalScrollTo (el, to, duration = 0 /* , prevTime */) { + const prevTime = arguments[ 3 ] === void 0 ? performance.now() : arguments[ 3 ]; + const pos = getVerticalScrollPosition(el); + + if (duration <= 0) { + if (pos !== to) { + setScroll$1(el, to); + } + return + } + + requestAnimationFrame(nowTime => { + const frameTime = nowTime - prevTime; + const newPos = pos + (to - pos) / Math.max(frameTime, duration) * frameTime; + setScroll$1(el, newPos); + if (newPos !== to) { + animVerticalScrollTo(el, to, duration - frameTime, nowTime); + } + }); + } + + const animScrollTo = animVerticalScrollTo; + + function animHorizontalScrollTo (el, to, duration = 0 /* , prevTime */) { + const prevTime = arguments[ 3 ] === void 0 ? performance.now() : arguments[ 3 ]; + const pos = getHorizontalScrollPosition(el); + + if (duration <= 0) { + if (pos !== to) { + setHorizontalScroll(el, to); + } + return + } + + requestAnimationFrame(nowTime => { + const frameTime = nowTime - prevTime; + const newPos = pos + (to - pos) / Math.max(frameTime, duration) * frameTime; + setHorizontalScroll(el, newPos); + if (newPos !== to) { + animHorizontalScrollTo(el, to, duration - frameTime, nowTime); + } + }); + } + + function setScroll$1 (scrollTarget, offset) { + if (scrollTarget === window) { + window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, offset); + return + } + scrollTarget.scrollTop = offset; + } + + function setHorizontalScroll (scrollTarget, offset) { + if (scrollTarget === window) { + window.scrollTo(offset, window.pageYOffset || window.scrollY || document.body.scrollTop || 0); + return + } + scrollTarget.scrollLeft = offset; + } + + function setVerticalScrollPosition (scrollTarget, offset, duration) { + if (duration) { + animVerticalScrollTo(scrollTarget, offset, duration); + return + } + setScroll$1(scrollTarget, offset); + } + + const setScrollPosition = setVerticalScrollPosition; + + function setHorizontalScrollPosition (scrollTarget, offset, duration) { + if (duration) { + animHorizontalScrollTo(scrollTarget, offset, duration); + return + } + setHorizontalScroll(scrollTarget, offset); + } + + let size; + function getScrollbarWidth () { + if (size !== void 0) { + return size + } + + const + inner = document.createElement('p'), + outer = document.createElement('div'); + + css(inner, { + width: '100%', + height: '200px' + }); + css(outer, { + position: 'absolute', + top: '0px', + left: '0px', + visibility: 'hidden', + width: '200px', + height: '150px', + overflow: 'hidden' + }); + + outer.appendChild(inner); + + document.body.appendChild(outer); + + const w1 = inner.offsetWidth; + outer.style.overflow = 'scroll'; + let w2 = inner.offsetWidth; + + if (w1 === w2) { + w2 = outer.clientWidth; + } + + outer.remove(); + size = w1 - w2; + + return size + } + + function hasScrollbar (el, onY = true) { + if (!el || el.nodeType !== Node.ELEMENT_NODE) { + return false + } + + return onY + ? ( + el.scrollHeight > el.clientHeight && ( + el.classList.contains('scroll') || + el.classList.contains('overflow-auto') || + [ 'auto', 'scroll' ].includes(window.getComputedStyle(el)['overflow-y']) + ) + ) + : ( + el.scrollWidth > el.clientWidth && ( + el.classList.contains('scroll') || + el.classList.contains('overflow-auto') || + [ 'auto', 'scroll' ].includes(window.getComputedStyle(el)['overflow-x']) + ) + ) + } + + let executeWhenScrollableList = []; + + function executeWhenScrollable (fn) { + if (document.qScrollPrevented !== true) { + fn(); + + return noop + } + + if (executeWhenScrollableList.indexOf(fn) === -1) { + executeWhenScrollableList.push(fn); + } + + return () => { + const index = executeWhenScrollableList.indexOf(fn); + if (index > -1) { + executeWhenScrollableList = executeWhenScrollableList.splice(index, 1); + } + } + } + + function triggerIsScrollable () { + const list = executeWhenScrollableList.slice(); + executeWhenScrollableList = []; + list.forEach(fn => { fn(); }); + } + + var scroll = { + getScrollTarget, + + getScrollHeight, + getScrollWidth, + + getScrollPosition, + getVerticalScrollPosition, + getHorizontalScrollPosition, + rtlHasScrollBug, + + animScrollTo, + animVerticalScrollTo, + animHorizontalScrollTo, + + setScrollPosition, + setVerticalScrollPosition, + setHorizontalScrollPosition, + + executeWhenScrollable, + + getScrollbarWidth, + hasScrollbar + }; + + const handlers = []; + let escDown = false; + + var EscapeKey = { + __install () { + this.__installed = true; + window.addEventListener('keydown', evt => { + escDown = evt.keyCode === 27; + }); + window.addEventListener('blur', () => { + escDown === true && (escDown = false); + }); + window.addEventListener('keyup', evt => { + if (escDown === true) { + escDown = false; + + if (handlers.length !== 0 && isKeyCode(evt, 27) === true) { + handlers[handlers.length - 1].fn(evt); + } + } + }); + }, + + register (comp, fn) { + if (comp.$q.platform.is.desktop === true) { + this.__installed !== true && this.__install(); + handlers.push({ comp, fn }); + } + }, + + pop (comp) { + if (comp.$q.platform.is.desktop === true) { + const index = handlers.findIndex(h => h.comp === comp); + if (index > -1) { + handlers.splice(index, 1); + } + } + } + }; + + const SIDE_SPACE = 4; // how many pixels to reserve on the edge + + const horizontalPos = { + 'start#ltr': 'left', + 'start#rtl': 'right', + 'end#ltr': 'right', + 'end#rtl': 'left' + } + + ;['left', 'middle', 'right'].forEach(pos => { + horizontalPos[`${pos}#ltr`] = pos; + horizontalPos[`${pos}#rtl`] = pos; + }); + + function isFixedPositioned (el) { + while (el && el !== document) { + if (window.getComputedStyle(el).position === 'fixed') { + return true + } + el = el.parentNode; + } + + return false + } + + function isDocumentScrollableX () { + return window.getComputedStyle(document.documentElement).overflowX !== 'hidden' && + window.getComputedStyle(document.body).overflowX !== 'hidden' + } + + function isDocumentScrollableY () { + return window.getComputedStyle(document.documentElement).overflowY !== 'hidden' && + window.getComputedStyle(document.body).overflowY !== 'hidden' + } + + function computeScrollLeft (fixedPositioned, viewport, rtl) { + if (fixedPositioned === true) { + return { vpLeft: viewport.offsetLeft, apLeft: viewport.offsetLeft } + } + + const scrollLeft = window.pageXOffset || window.scrollX || document.body.scrollLeft || 0; + + if (rtl !== true) { + return { vpLeft: scrollLeft, apLeft: scrollLeft } + } + + // TODO: check if the correction is needed also if rtlHasScrollBug + const vpLeft = (rtlHasScrollBug() === true ? 0 : document.documentElement.scrollWidth - document.documentElement.clientWidth) + scrollLeft; + return { + vpLeft, + apLeft: vpLeft + document.documentElement.scrollWidth - document.documentElement.clientWidth + } + } + + function validatePosition (pos) { + const parts = pos.split(' '); + if (parts.length !== 2) { + return false + } + if ([ 'top', 'center', 'bottom' ].includes(parts[0]) !== true) { + console.error('Anchor/Self position must start with one of top/center/bottom'); + return false + } + if ([ 'left', 'middle', 'right', 'start', 'end' ].includes(parts[1]) !== true) { + console.error('Anchor/Self position must end with one of left/middle/right/start/end'); + return false + } + return true + } + + function validateOffset (val) { + if (val !== true) { return true } + if (val.length !== 2) { return false } + if (typeof val[0] !== 'number' || typeof val[1] !== 'number') { + return false + } + return true + } + + function parsePosition (pos, rtl) { + const parts = pos.split(' '); + return { + vertical: parts[0], + horizontal: horizontalPos[`${parts[1]}#${rtl === true ? 'rtl' : 'ltr'}`] + } + } + + function getAnchorProps (el, offset, rtlCorrection) { + let { top, left, right, bottom, width, height } = el.getBoundingClientRect(); + + if (width === 0) { + width = el.offsetWidth; + } + if (height === 0) { + height = el.offsetHeight; + } + + if (offset !== void 0) { + left -= offset[0]; + right += offset[0]; + top -= offset[1]; + bottom += offset[1]; + } + + // TODO: check if the correction is needed also if rtlHasScrollBug + if (rtlCorrection === true) { + const diff = document.documentElement.scrollWidth - document.documentElement.clientWidth; + left -= diff; + right -= diff; + } + + return { + left, + middle: left + (right - left) / 2, + right, + + top, + center: top + (bottom - top) / 2, + bottom, + + leftRev: right, + middleRev: left + (right - left) / 2, + rightRev: left, + + topRev: bottom, + centerRev: top + (bottom - top) / 2, + bottomRev: top, + + width, + height + } + } + + function getTargetProps (el) { + let { width, height } = el.getBoundingClientRect(); + + if (width === 0) { + width = el.offsetWidth; + } + if (height === 0) { + height = el.offsetHeight; + } + + return { + width, + height + } + } + + // cfg: { el, anchorEl, anchorOrigin, selfOrigin, offset, absoluteOffset, cover, fit, minHeight, minWidth, maxHeight, maxWidth, rtl } + function setPosition (cfg) { + const extEl = cfg.el; + + if (extEl.classList.contains('q-body--scroll-locked') === true) { + return + } + + let anchorProps, targetProps; + + const + { documentElement, body, qScrollPrevented } = document, + intEl = extEl.children[0], + firstRender = intEl.style.opacity !== '1', + fixedPositioned = isFixedPositioned(cfg.anchorEl), + anchorOrigin = { ...cfg.anchorOrigin }, + selfOrigin = { ...cfg.selfOrigin }, + viewport = fixedPositioned === true && client.is.ios === true && window.visualViewport !== void 0 + ? window.visualViewport + : { offsetLeft: 0, offsetTop: qScrollPrevented === true ? documentElement.scrollTop : 0 }, + { vpLeft, apLeft } = computeScrollLeft(fixedPositioned, viewport, cfg.rtl), + vpTop = fixedPositioned === true + ? viewport.offsetTop + : (window.pageYOffset || window.scrollY || body.scrollTop || 0), + vpWidthProp = qScrollPrevented === true + ? 'offsetWidth' + : (fixedPositioned === true || isDocumentScrollableX() !== true ? 'clientWidth' : 'scrollWidth'), + vpHeightProp = qScrollPrevented === true + ? 'offsetHeight' + : (fixedPositioned === true || isDocumentScrollableY() !== true ? 'clientHeight' : 'scrollHeight'), + vpWidth = documentElement[vpWidthProp], + vpHeight = documentElement[vpHeightProp]; + + if (cfg.absoluteOffset === void 0) { + anchorProps = getAnchorProps(cfg.anchorEl, cfg.cover === true ? [0, 0] : cfg.offset, cfg.rtl === true && fixedPositioned !== true); + } + else { + const + leftOffset = cfg.rtl === true && fixedPositioned !== true + ? documentElement.scrollWidth - documentElement.clientWidth + : 0, + { top: anchorTop, left: anchorLeft } = cfg.anchorEl.getBoundingClientRect(), + top = anchorTop + (cfg.cover === true ? 0 : cfg.absoluteOffset.top), + left = anchorLeft + (cfg.cover === true || cfg.fit === true ? 0 : cfg.absoluteOffset.left) - leftOffset; + + anchorProps = { + left, + middle: left, + right: left, + + top, + center: top, + bottom: top, + + leftRev: left, + middleRev: left, + rightRev: left, + + topRev: top, + centerRev: top, + bottomRev: top, + + width: 0, + height: 0 + }; + } + + const intElStyle = { + minWidth: cfg.minWidth || null, + minHeight: cfg.minHeight || null, + maxWidth: cfg.maxWidth || null, + maxHeight: cfg.maxHeight || null + }; + + if (cfg.fit === true || cfg.cover === true) { + if (cfg.minWidth === null) { + intElStyle.minWidth = anchorProps.width + 'px'; + } + if (cfg.cover === true && cfg.minHeight === null) { + intElStyle.minHeight = anchorProps.height + 'px'; + } + } + + Object.assign(intEl.style, intElStyle); + + if (firstRender === true) { + const clone = intEl.cloneNode(true); + clone.classList.add('q-portal__clone'); + body.appendChild(clone); + targetProps = getTargetProps(clone); + clone.remove(); + } + else { + targetProps = getTargetProps(intEl); + } + + if (intElStyle.minWidth !== null && anchorProps.width > targetProps.width) { + intElStyle.minWidth = targetProps.width + 'px'; + } + if (intElStyle.minHeight !== null && anchorProps.height > targetProps.height) { + intElStyle.minHeight = targetProps.height + 'px'; + } + + const extElStyle = { + position: fixedPositioned === true ? 'fixed' : 'absolute', + + left: null, + right: null, + marginLeft: null, + marginRight: null, + maxWidth: null, + + top: null, + bottom: null, + marginTop: null, + marginBottom: null, + maxHeight: null + }; + + const + halfWidth = Math.min(vpLeft + anchorProps[cfg.anchorOrigin.horizontal], vpWidth - apLeft - anchorProps[cfg.anchorOrigin.horizontal]) - SIDE_SPACE, + halfHeight = Math.min(vpTop + anchorProps[cfg.anchorOrigin.vertical], vpHeight - vpTop - anchorProps[cfg.anchorOrigin.vertical]) - SIDE_SPACE; + + // horizontal repositioning + if ( + selfOrigin.horizontal === 'left' && + targetProps.width + SIDE_SPACE > vpWidth - apLeft - anchorProps[anchorOrigin.horizontal] && + vpLeft + anchorProps[anchorOrigin.horizontal + 'Rev'] > vpWidth - apLeft - anchorProps[anchorOrigin.horizontal] + ) { + selfOrigin.horizontal = 'right'; + anchorOrigin.horizontal = anchorOrigin.horizontal + 'Rev'; + } + else if ( + selfOrigin.horizontal === 'right' && + targetProps.width + SIDE_SPACE > vpLeft + anchorProps[anchorOrigin.horizontal] && + vpWidth - apLeft - anchorProps[anchorOrigin.horizontal + 'Rev'] > vpLeft + anchorProps[anchorOrigin.horizontal] + ) { + selfOrigin.horizontal = 'left'; + anchorOrigin.horizontal = anchorOrigin.horizontal + 'Rev'; + } + else if ( + selfOrigin.horizontal === 'middle' && + targetProps.width / 2 > halfWidth + ) { + selfOrigin.horizontal = vpLeft + anchorProps[anchorOrigin.horizontal] < vpWidth / 2 + ? 'left' + : 'right'; + anchorOrigin.horizontal = selfOrigin.horizontal; + } + + // horizontal styles + if (selfOrigin.horizontal === 'left') { + extElStyle.left = 0; + extElStyle.marginLeft = `${vpLeft + anchorProps[anchorOrigin.horizontal]}px`; + extElStyle.maxWidth = `${vpWidth - vpLeft - anchorProps[anchorOrigin.horizontal] - SIDE_SPACE}px`; + } + else if (selfOrigin.horizontal === 'right') { + extElStyle.right = '100%'; + extElStyle.marginRight = `-${vpLeft + anchorProps[anchorOrigin.horizontal]}px`; + extElStyle.maxWidth = `${vpLeft + anchorProps[anchorOrigin.horizontal] - SIDE_SPACE}px`; + } + else { + extElStyle.right = '100%'; + extElStyle.marginRight = `-${vpLeft + anchorProps[anchorOrigin.horizontal]}px`; + } + + // vertical repositioning + if ( + selfOrigin.vertical === 'top' && + targetProps.height + SIDE_SPACE > vpHeight - vpTop - anchorProps[anchorOrigin.vertical] && + vpTop + anchorProps[anchorOrigin.vertical + 'Rev'] > vpHeight - vpTop - anchorProps[anchorOrigin.vertical] + ) { + selfOrigin.vertical = 'bottom'; + anchorOrigin.vertical = anchorOrigin.vertical + 'Rev'; + } + else if ( + selfOrigin.vertical === 'bottom' && + targetProps.height + SIDE_SPACE > vpTop + anchorProps[anchorOrigin.vertical] && + vpHeight - vpTop - anchorProps[anchorOrigin.vertical + 'Rev'] > vpTop + anchorProps[anchorOrigin.vertical] + ) { + selfOrigin.vertical = 'top'; + anchorOrigin.vertical = anchorOrigin.vertical + 'Rev'; + } + else if ( + selfOrigin.vertical === 'center' && + targetProps.height / 2 > halfHeight + ) { + selfOrigin.vertical = vpTop + anchorProps[anchorOrigin.vertical] < vpHeight / 2 + ? 'top' + : 'bottom'; + anchorOrigin.vertical = selfOrigin.vertical; + } + + // vertical styles + if (selfOrigin.vertical === 'top') { + extElStyle.top = 0; + extElStyle.marginTop = `${vpTop + anchorProps[anchorOrigin.vertical]}px`; + extElStyle.maxHeight = `${vpHeight - vpTop - anchorProps[anchorOrigin.vertical] - SIDE_SPACE}px`; + } + else if (selfOrigin.vertical === 'bottom') { + extElStyle.bottom = '100%'; + extElStyle.marginBottom = `-${vpTop + anchorProps[anchorOrigin.vertical]}px`; + extElStyle.maxHeight = `${vpTop + anchorProps[anchorOrigin.vertical] - SIDE_SPACE}px`; + } + else { + extElStyle.bottom = '100%'; + extElStyle.marginBottom = `-${vpTop + anchorProps[anchorOrigin.vertical]}px`; + } + + if (selfOrigin.horizontal === 'middle' && selfOrigin.vertical === 'center') { + intElStyle.transform = 'translate(50%, 50%)'; + extElStyle.transformOrigin = '100% 100%'; + } + else if (selfOrigin.horizontal === 'middle') { + intElStyle.transform = 'translateX(50%)'; + extElStyle.transformOrigin = '100% 50%'; + } + else if (selfOrigin.vertical === 'center') { + intElStyle.transform = 'translateY(50%)'; + extElStyle.transformOrigin = '50% 100%'; + } + else { + intElStyle.transform = null; + extElStyle.transformOrigin = '50% 50%'; + } + + Object.assign(extEl.style, extElStyle); + Object.assign(intEl.style, intElStyle); + + if (firstRender === true) { + requestAnimationFrame(() => { + intEl.style.opacity = 1; + }); + } + } + + var QMenu = Vue__default["default"].extend({ + name: 'QMenu', + + mixins: [ + AttrsMixin, + DarkMixin, + AnchorMixin, + TimeoutMixin, + ModelToggleMixin, + Portal, + TransitionMixin, + FocusWrapMixin + ], + + directives: { + ClickOutside + }, + + props: { + persistent: Boolean, + autoClose: Boolean, + separateClosePopup: Boolean, + + noRouteDismiss: Boolean, + noRefocus: Boolean, + noFocus: Boolean, + + fit: Boolean, + cover: Boolean, + + square: Boolean, + + anchor: { + type: String, + validator: validatePosition + }, + self: { + type: String, + validator: validatePosition + }, + offset: { + type: Array, + validator: validateOffset + }, + + scrollTarget: { + default: void 0 + }, + + touchPosition: { + type: Boolean, + default: null + }, + + minHeight: { + type: String, + default: null + }, + minWidth: { + type: String, + default: null + }, + + maxHeight: { + type: String, + default: null + }, + maxWidth: { + type: String, + default: null + } + }, + + computed: { + anchorOrigin () { + return parsePosition( + this.anchor || ( + this.cover === true ? 'center middle' : 'bottom start' + ), + this.$q.lang.rtl + ) + }, + + selfOrigin () { + return this.cover === true + ? this.anchorOrigin + : parsePosition(this.self || 'top start', this.$q.lang.rtl) + }, + + menuClass () { + return (this.square === true ? ' q-menu--square' : '') + + ` q-menu--${this.darkSuffix} q-${this.darkSuffix}` + }, + + hideOnRouteChange () { + return this.persistent !== true && + this.noRouteDismiss !== true + }, + + onEvents () { + const on = { + ...this.qListeners, + // stop propagating these events from children + input: stop, + 'popup-show': stop, + 'popup-hide': stop + }; + + if (this.autoClose === true) { + on.click = this.__onAutoClose; + } + + return on + }, + + attrs () { + return { + tabindex: -1, + role: 'menu', + ...this.qAttrs + } + } + }, + + methods: { + __show (evt) { + // IE can have null document.activeElement + this.__refocusTarget = this.$q.platform.is.desktop === true && this.noRefocus === false && document.activeElement !== null + ? document.activeElement + : void 0; + + EscapeKey.register(this, () => { + if (this.persistent === true) { + this.__focusCyclePortal(); + } + else { + this.$emit('escape-key'); + this.hide(); + } + }); + + this.__showPortal(); + this.__configureScrollTarget(); + + this.absoluteOffset = void 0; + + if (evt !== void 0 && (this.touchPosition === true || (this.touchPosition !== false && this.contextMenu))) { + const pos = position(evt); + + if (pos.left !== void 0) { + const { top, left } = this.anchorEl.getBoundingClientRect(); + this.absoluteOffset = { left: pos.left - left, top: pos.top - top }; + } + } + + if (this.unwatch === void 0) { + this.unwatch = this.$watch( + () => this.$q.screen.width + '|' + this.$q.screen.height + '|' + this.self + '|' + this.anchor + '|' + this.$q.lang.rtl, + this.updatePosition + ); + } + + this.$el.dispatchEvent(create('popup-show', { bubbles: true })); + + if (this.noFocus !== true) { + // IE can have null document.activeElement + document.activeElement !== null && document.activeElement.blur(); + + this.__registerTick(() => { + this.focus(); + this.updatePosition(); + }); + } + else { + this.__registerTick(() => { + this.updatePosition(); + }); + } + + this.__registerTimeout(() => { + // required in order to avoid the "double-tap needed" issue + if (this.$q.platform.is.ios === true) { + // if auto-close, then this click should + // not close the menu + this.__avoidAutoClose = this.autoClose; + this.__portal.$el.click(); + } + + this.$emit('show', evt); + }, 300); + }, + + __hide (evt) { + this.__removeTick(); + this.__anchorCleanup(true); + + // check null for IE + if ( + // menu was hidden from code or ESC plugin + evt === void 0 || + // menu was not closed from a mouse or touch clickOutside + evt.qClickOutside !== true + ) { + this.__focusCyclePortal(true); + } + + this.$el.dispatchEvent(create('popup-hide', { bubbles: true })); + + // should __removeTimeout() if this gets removed + this.__registerTimeout(() => { + if (this.showing !== true) { + this.__hidePortal(); + this.$emit('hide', evt); + } + }, 300); + }, + + __anchorCleanup (hiding) { + this.absoluteOffset = void 0; + + if (this.unwatch !== void 0) { + this.unwatch(); + this.unwatch = void 0; + } + + if (hiding === true || this.showing === true) { + EscapeKey.pop(this); + this.__unconfigureScrollTarget(); + } + }, + + __unconfigureScrollTarget () { + this.__changeScrollEvent(); + }, + + __configureScrollTarget () { + if (this.showing && (this.anchorEl !== void 0 || this.scrollTarget !== void 0)) { + this.__changeScrollEvent(this.updatePosition, getScrollTarget(this.anchorEl, this.scrollTarget)); + } + }, + + __onAutoClose (e) { + // if auto-close, then the ios double-tap fix which + // issues a click should not close the menu + if (this.__avoidAutoClose !== true) { + closePortalMenus(this, e); + this.qListeners.click !== void 0 && this.$emit('click', e); + } + else { + this.__avoidAutoClose = false; + } + }, + + updatePosition () { + if (this.anchorEl === void 0 || this.__portal === void 0) { + return + } + + const el = this.__portal.$el; + + if (el.nodeType === 8) { // IE replaces the comment with delay + setTimeout(this.updatePosition, 25); + return + } + + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition); + this.settingPosition = requestAnimationFrame(() => { + const touchPosition = this.touchPosition === true || (this.touchPosition !== false && this.contextMenu); + + setPosition({ + el, + offset: this.offset, + anchorEl: this.anchorEl, + anchorOrigin: this.anchorOrigin, + selfOrigin: this.selfOrigin, + absoluteOffset: this.absoluteOffset, + fit: touchPosition !== true && this.fit === true, + cover: touchPosition !== true && this.cover === true, + minHeight: this.minHeight, + minWidth: this.minWidth, + maxHeight: this.maxHeight, + maxWidth: this.maxWidth, + rtl: this.$q.lang.rtl + }); + this.settingPosition = void 0; + }); + }, + + __onClickOutside (e) { + if (this.persistent !== true && this.showing === true) { + const targetClassList = e.target.classList; + + closePortalMenus(this, e); + if ( + // always prevent touch event + e.type === 'touchstart' || + // prevent click if it's on a dialog backdrop + targetClassList.contains('q-dialog__backdrop') === true + ) { + stopAndPrevent(e); + this.$q.interaction.preventClick(e.target, true); + } + return true + } + }, + + __renderPortal (h) { + return h('transition', { + props: this.transitionProps + }, [ + this.showing === true ? h('div', { + class: 'q-menu__container column no-pointer-events', + directives: [{ + name: 'click-outside', + value: this.__onClickOutside, + arg: this.anchorEl + }] + }, [ + h('div', { + ref: 'inner', + staticClass: 'q-menu scroll all-pointer-events' + this.menuClass, + class: this.contentClass, + style: this.contentStyle, + attrs: this.attrs, + on: this.onEvents + }, this.__getFocusWrappedContent('default')) + ]) : null + ]) + } + }, + + created () { + this.__useTick('__registerTick', '__removeTick'); + this.__useTimeout('__registerTimeout'); + }, + + mounted () { + this.__processModelChange(this.value); + }, + + beforeDestroy () { + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition); + + // When the menu is destroyed while open we can only emit the event on anchorEl + if (this.showing === true && this.anchorEl !== void 0) { + this.anchorEl.dispatchEvent( + create('popup-hide', { bubbles: true }) + ); + } + this.__refocusTarget = void 0; + } + }); + + /** + * Based on the work of https://github.com/jchook/uuid-random + */ + + let + buf, + bufIdx = 0; + const hexBytes = new Array(256); + + // Pre-calculate toString(16) for speed + for (let i = 0; i < 256; i++) { + hexBytes[i] = (i + 0x100).toString(16).substr(1); + } + + // Use best available PRNG + const randomBytes = (() => { + // Node & Browser support + const lib = typeof crypto !== 'undefined' + ? crypto + : ( + typeof window !== 'undefined' + ? window.msCrypto // IE11 + : void 0 + ); + + if (lib !== void 0) { + if (lib.randomBytes !== void 0) { + return lib.randomBytes + } + if (lib.getRandomValues !== void 0) { + return n => { + var bytes = new Uint8Array(n); + lib.getRandomValues(bytes); + return bytes + } + } + } + + return n => { + const r = []; + for (let i = n; i > 0; i--) { + r.push(Math.floor(Math.random() * 256)); + } + return r + } + })(); + + // Buffer random numbers for speed + // Reduce memory usage by decreasing this number (min 16) + // or improve speed by increasing this number (try 16384) + const BUFFER_SIZE = 4096; + + function uid$3 () { + // Buffer some random bytes for speed + if (buf === void 0 || (bufIdx + 16 > BUFFER_SIZE)) { + bufIdx = 0; + buf = randomBytes(BUFFER_SIZE); + } + + const b = Array.prototype.slice.call(buf, bufIdx, (bufIdx += 16)); + b[6] = (b[6] & 0x0f) | 0x40; + b[8] = (b[8] & 0x3f) | 0x80; + + return hexBytes[b[0]] + hexBytes[b[1]] + + hexBytes[b[2]] + hexBytes[b[3]] + '-' + + hexBytes[b[4]] + hexBytes[b[5]] + '-' + + hexBytes[b[6]] + hexBytes[b[7]] + '-' + + hexBytes[b[8]] + hexBytes[b[9]] + '-' + + hexBytes[b[10]] + hexBytes[b[11]] + + hexBytes[b[12]] + hexBytes[b[13]] + + hexBytes[b[14]] + hexBytes[b[15]] + } + + // let's not duplicate type checking and prop validations + // so just specify the props here with no type description + const menuTransitionProps = Object.keys(TransitionMixin.props).reduce( + (acc, key) => (acc[ key ] = {}) && acc, + {} + ); + + var QBtnDropdown = Vue__default["default"].extend({ + name: 'QBtnDropdown', + + mixins: [ BtnMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + value: Boolean, + split: Boolean, + dropdownIcon: String, + + contentClass: [ Array, String, Object ], + contentStyle: [ Array, String, Object ], + + cover: Boolean, + persistent: Boolean, + noRouteDismiss: Boolean, + autoClose: Boolean, + + menuAnchor: { + type: String, + default: 'bottom end' + }, + menuSelf: { + type: String, + default: 'top end' + }, + menuOffset: Array, + ...menuTransitionProps, + + disableMainBtn: Boolean, + disableDropdown: Boolean, + + noIconAnimation: Boolean, + + toggleAriaLabel: String + }, + + data () { + return { + showing: this.value + } + }, + + watch: { + value (val) { + this.$refs.menu !== void 0 && this.$refs.menu[val ? 'show' : 'hide'](); + }, + + split () { + this.hide(); + } + }, + + render (h) { + const label = slot(this, 'label', []); + const attrs = { + 'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-haspopup': 'true', + 'aria-controls': this.targetUid, + 'aria-owns': this.targetUid, + 'aria-label': this.toggleAriaLabel || this.$q.lang.label[ this.showing === true ? 'collapse' : 'expand' ](this.label) + }; + + if ( + this.disable === true || + ( + (this.split === false && this.disableMainBtn === true) || + this.disableDropdown === true + ) + ) { + attrs['aria-disabled'] = 'true'; + } + + const Arrow = [ + h(QIcon, { + props: { name: this.dropdownIcon || this.$q.iconSet.arrow.dropdown }, + class: 'q-btn-dropdown__arrow' + + (this.showing === true && this.noIconAnimation === false ? ' rotate-180' : '') + + (this.split === false ? ' q-btn-dropdown__arrow-container' : '') + }) + ]; + + this.disableDropdown !== true && Arrow.push( + h(QMenu, { + key: 'menu', + ref: 'menu', + attrs: { + id: this.targetUid + }, + props: { + cover: this.cover, + fit: true, + persistent: this.persistent, + noRouteDismiss: this.noRouteDismiss, + autoClose: this.autoClose, + anchor: this.menuAnchor, + self: this.menuSelf, + offset: this.menuOffset, + contentClass: this.contentClass, + contentStyle: this.contentStyle, + separateClosePopup: true, + transitionShow: this.transitionShow, + transitionHide: this.transitionHide + }, + on: cache(this, 'menu', { + 'before-show': e => { + this.showing = true; + this.$emit('before-show', e); + }, + show: e => { + this.$emit('show', e); + this.$emit('input', true); + }, + 'before-hide': e => { + this.showing = false; + this.$emit('before-hide', e); + }, + hide: e => { + this.$emit('hide', e); + this.$emit('input', false); + } + }) + }, slot(this, 'default')) + ); + + if (this.split === false) { + return h(QBtn, { + key: 'nonSpl', + class: 'q-btn-dropdown q-btn-dropdown--simple', + props: { + ...this.$props, + disable: this.disable === true || this.disableMainBtn === true, + noWrap: true, + round: false + }, + attrs: { + ...attrs, + ...this.qAttrs + }, + on: cache(this, 'nonSpl', { + click: e => { + this.$emit('click', e); + } + }), + scopedSlots: { + loading: this.$scopedSlots.loading + } + }, label.concat(Arrow)) + } + + const Btn = h(QBtn, { + key: 'spl', + class: 'q-btn-dropdown--current', + props: { + ...this.$props, + disable: this.disable === true || this.disableMainBtn === true, + noWrap: true, + iconRight: this.iconRight, + round: false + }, + attrs: this.qAttrs, + on: cache(this, 'spl', { + click: e => { + stop(e); // prevent showing the menu on click + this.hide(); + this.$emit('click', e); + } + }), + scopedSlots: { + loading: this.$scopedSlots.loading + } + }, label); + + return h(QBtnGroup, { + props: { + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + square: this.square, + push: this.push, + unelevated: this.unelevated, + glossy: this.glossy, + stretch: this.stretch + }, + staticClass: 'q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item' + }, [ + Btn, + + h(QBtn, { + staticClass: 'q-btn-dropdown__arrow-container q-anchor--skip', + attrs, + props: { + disable: this.disable === true || this.disableDropdown === true, + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + push: this.push, + size: this.size, + color: this.color, + textColor: this.textColor, + dense: this.dense, + ripple: this.ripple + } + }, Arrow) + ]) + }, + + methods: { + toggle (evt) { + this.$refs.menu && this.$refs.menu.toggle(evt); + }, + + show (evt) { + this.$refs.menu && this.$refs.menu.show(evt); + }, + + hide (evt) { + this.$refs.menu && this.$refs.menu.hide(evt); + } + }, + + created () { + this.targetUid = `d_${uid$3()}`; + }, + + mounted () { + this.value === true && this.show(); + } + }); + + var FormMixin = { + props: { + name: String + }, + + computed: { + formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.value + } + } + }, + + methods: { + __injectFormInput (child, action, className) { + child[action]( + this.$createElement('input', { + staticClass: 'hidden', + class: className, + attrs: this.formAttrs, + domProps: this.formDomProps + }) + ); + } + } + }; + + const FormFieldMixin = { + props: { + name: String + }, + + computed: { + nameProp () { + return this.name || this.for + } + } + }; + + var QBtnToggle = Vue__default["default"].extend({ + name: 'QBtnToggle', + + mixins: [ ListenersMixin, RippleMixin, FormMixin ], + + props: { + value: { + required: true + }, + + options: { + type: Array, + required: true, + validator: v => v.every( + opt => ('label' in opt || 'icon' in opt || 'slot' in opt) && 'value' in opt + ) + }, + + // To avoid seeing the active raise shadow through the transparent button, give it a color (even white). + color: String, + textColor: String, + toggleColor: { + type: String, + default: 'primary' + }, + toggleTextColor: String, + + outline: Boolean, + flat: Boolean, + unelevated: Boolean, + rounded: Boolean, + push: Boolean, + glossy: Boolean, + + size: String, + padding: String, + + noCaps: Boolean, + noWrap: Boolean, + dense: Boolean, + readonly: Boolean, + disable: Boolean, + + stack: Boolean, + stretch: Boolean, + + spread: Boolean, + + clearable: Boolean + }, + + computed: { + hasActiveValue () { + return this.options.find(opt => opt.value === this.value) !== void 0 + }, + + formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.value + } + }, + + btnOptions () { + const mergeOption = (opt, key) => opt[key] === void 0 ? this[key] : opt[key]; + + return this.options.map((opt, i) => ({ + slot: opt.slot, + + options: { + key: i, + class: opt.class, + style: opt.style, + on: { + ...this.qListeners, + click: e => this.__set(opt.value, opt, e) + }, + attrs: { + 'aria-pressed': opt.value === this.value ? 'true' : 'false', + ...opt.attrs + }, + props: { + ...opt, + slot: void 0, + class: void 0, + style: void 0, + value: void 0, + attrs: void 0, + + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + push: this.push, + unelevated: this.unelevated, + dense: this.dense, + + disable: this.disable === true || opt.disable === true, + + // Options that come from the button specific options first, then from general props + color: opt.value === this.value ? mergeOption(opt, 'toggleColor') : mergeOption(opt, 'color'), + textColor: opt.value === this.value ? mergeOption(opt, 'toggleTextColor') : mergeOption(opt, 'textColor'), + noCaps: mergeOption(opt, 'noCaps') === true, + noWrap: mergeOption(opt, 'noWrap') === true, + + size: mergeOption(opt, 'size'), + padding: mergeOption(opt, 'padding'), + ripple: mergeOption(opt, 'ripple'), + stack: mergeOption(opt, 'stack') === true, + stretch: mergeOption(opt, 'stretch') === true + } + } + })) + } + }, + + methods: { + __set (value, opt, e) { + if (this.readonly !== true) { + if (this.value === value) { + if (this.clearable === true) { + this.$emit('input', null, null); + this.$emit('clear'); + } + } + else { + this.$emit('input', value, opt); + } + + this.$emit('click', e); + } + } + }, + + render (h) { + const child = this.btnOptions.map(opt => { + return h(QBtn, { ...opt.options }, opt.slot !== void 0 ? slot(this, opt.slot) : void 0) + }); + + if (this.name !== void 0 && this.disable !== true && this.hasActiveValue === true) { + this.__injectFormInput(child, 'push'); + } + + return h(QBtnGroup, { + staticClass: 'q-btn-toggle', + props: { + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + push: this.push, + stretch: this.stretch, + unelevated: this.unelevated, + glossy: this.glossy, + spread: this.spread + } + }, mergeSlot(child, this, 'default')) + } + }); + + var QCard = Vue__default["default"].extend({ + name: 'QCard', + + mixins: [ ListenersMixin, DarkMixin, TagMixin ], + + props: { + square: Boolean, + flat: Boolean, + bordered: Boolean + }, + + computed: { + classes () { + return 'q-card' + + ` q-card--${this.darkSuffix} q-${this.darkSuffix}` + + (this.bordered === true ? ' q-card--bordered' : '') + + (this.square === true ? ' q-card--square no-border-radius' : '') + + (this.flat === true ? ' q-card--flat no-shadow' : '') + } + }, + + render (h) { + return h(this.tag, { + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QCardSection = Vue__default["default"].extend({ + name: 'QCardSection', + + mixins: [ ListenersMixin, TagMixin ], + + props: { + horizontal: Boolean + }, + + computed: { + classes () { + return 'q-card__section ' + + `q-card__section--${this.horizontal === true ? 'horiz row no-wrap' : 'vert'}` + } + }, + + render (h) { + return h(this.tag, { + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QCardActions = Vue__default["default"].extend({ + name: 'QCardActions', + + mixins: [ ListenersMixin, AlignMixin ], + + props: { + vertical: Boolean + }, + + computed: { + classes () { + return `q-card__actions--${this.vertical === true ? 'vert column' : 'horiz row'} ${this.alignClass}` + } + }, + + render (h) { + return h('div', { + staticClass: 'q-card__actions', + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + const + hasMap = typeof Map === 'function', + hasSet = typeof Set === 'function', + hasArrayBuffer = typeof ArrayBuffer === 'function'; + + function isDeepEqual (a, b) { + if (a === b) { + return true + } + + if (a !== null && b !== null && typeof a === 'object' && typeof b === 'object') { + if (a.constructor !== b.constructor) { + return false + } + + let length, i; + + if (a.constructor === Array) { + length = a.length; + + if (length !== b.length) { + return false + } + + for (i = length; i-- !== 0;) { + if (isDeepEqual(a[i], b[i]) !== true) { + return false + } + } + + return true + } + + if (hasMap === true && a.constructor === Map) { + if (a.size !== b.size) { + return false + } + + i = a.entries().next(); + while (i.done !== true) { + if (b.has(i.value[0]) !== true) { + return false + } + i = i.next(); + } + + i = a.entries().next(); + while (i.done !== true) { + if (isDeepEqual(i.value[1], b.get(i.value[0])) !== true) { + return false + } + i = i.next(); + } + + return true + } + + if (hasSet === true && a.constructor === Set) { + if (a.size !== b.size) { + return false + } + + i = a.entries().next(); + while (i.done !== true) { + if (b.has(i.value[0]) !== true) { + return false + } + i = i.next(); + } + + return true + } + + if (hasArrayBuffer === true && a.buffer != null && a.buffer.constructor === ArrayBuffer) { + length = a.length; + + if (length !== b.length) { + return false + } + + for (i = length; i-- !== 0;) { + if (a[i] !== b[i]) { + return false + } + } + + return true + } + + if (a.constructor === RegExp) { + return a.source === b.source && a.flags === b.flags + } + + if (a.valueOf !== Object.prototype.valueOf) { + return a.valueOf() === b.valueOf() + } + + if (a.toString !== Object.prototype.toString) { + return a.toString() === b.toString() + } + + const keys = Object.keys(a).filter(key => a[key] !== void 0); + length = keys.length; + + if (length !== Object.keys(b).filter(key => b[key] !== void 0).length) { + return false + } + + for (i = length; i-- !== 0;) { + const key = keys[i]; + if (isDeepEqual(a[key], b[key]) !== true) { + return false + } + } + + return true + } + + // true if both NaN, false otherwise + return a !== a && b !== b // eslint-disable-line no-self-compare + } + + // not perfect, but what we ARE interested is for Arrays not to slip in + // as spread operator will mess things up in various areas + // see https://jsbench.me/tbl0iliyax/1 + function isObject (v) { + return v !== null && typeof v === 'object' && Array.isArray(v) !== true + } + + function isDate (v) { + return Object.prototype.toString.call(v) === '[object Date]' + } + + function isRegexp (v) { + return Object.prototype.toString.call(v) === '[object RegExp]' + } + + function isNumber (v) { + return typeof v === 'number' && isFinite(v) + } + + var is = { + deepEqual: isDeepEqual, + object: isObject, + date: isDate, + regexp: isRegexp, + number: isNumber + }; + + const directions$1 = [ 'left', 'right', 'up', 'down', 'horizontal', 'vertical' ]; + + const modifiersAll = { + left: true, + right: true, + up: true, + down: true, + horizontal: true, + vertical: true, + all: true + }; + + function getModifierDirections (mod) { + const dir = {}; + + directions$1.forEach(direction => { + if (mod[direction]) { + dir[direction] = true; + } + }); + + if (Object.keys(dir).length === 0) { + return modifiersAll + } + + if (dir.horizontal === true) { + dir.left = dir.right = true; + } + if (dir.vertical === true) { + dir.up = dir.down = true; + } + if (dir.left === true && dir.right === true) { + dir.horizontal = true; + } + if (dir.up === true && dir.down === true) { + dir.vertical = true; + } + if (dir.horizontal === true && dir.vertical === true) { + dir.all = true; + } + + return dir + } + + function shouldStart (evt, ctx) { + return ctx.event === void 0 && + evt.target !== void 0 && + evt.target.draggable !== true && + typeof ctx.handler === 'function' && + evt.target.nodeName.toUpperCase() !== 'INPUT' && + (evt.qClonedBy === void 0 || evt.qClonedBy.indexOf(ctx.uid) === -1) + } + + function parseArg$3 (arg) { + // delta (min velocity -- dist / time) + // mobile min distance on first move + // desktop min distance until deciding if it's a swipe or not + const data = [0.06, 6, 50]; + + if (typeof arg === 'string' && arg.length) { + arg.split(':').forEach((val, index) => { + const v = parseFloat(val); + v && (data[index] = v); + }); + } + + return data + } + + function destroy$a (el) { + const ctx = el.__qtouchswipe; + + if (ctx !== void 0) { + cleanEvt(ctx, 'main_mouse'); + cleanEvt(ctx, 'main_touch'); + cleanEvt(ctx, 'temp'); + + client.is.firefox === true && preventDraggable(el, false); + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + delete el.__qtouchswipe; + } + } + + function configureEvents$4 (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse'); + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', `passive${modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : ''}` ] + ]); + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch'); + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', `passive${modifiers.capture === true ? 'Capture' : ''}` ], + [ el, 'touchmove', 'noop', 'notPassiveCapture' ] // cannot be passive (ex: iOS scroll) + ]); + } + + ctx.modifiers = modifiers; + } + + var TouchSwipe = { + name: 'touch-swipe', + + bind (el, { modifiers, arg, value }) { + if (el.__qtouchswipe !== void 0) { + destroy$a(el); + el.__qtouchswipe_destroyed = true; + } + + const ctx = { + handler: value, + sensitivity: parseArg$3(arg), + arg, + modifiers: { capture: null }, // make sure touch listeners are initiated + direction: getModifierDirections(modifiers), + + noop, + + mouseStart (evt) { + if (shouldStart(evt, ctx) && leftClick(evt)) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', `notPassive${ctx.modifiers.mouseCapture === true ? 'Capture' : ''}` ], + [ document, 'mouseup', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt, true); + } + }, + + touchStart (evt) { + if (shouldStart(evt, ctx)) { + const target = evt.target; + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'notPassiveCapture' ], + [ target, 'touchcancel', 'end', 'notPassiveCapture' ], + [ target, 'touchend', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt); + } + }, + + start (evt, mouseEvent) { + client.is.firefox === true && preventDraggable(el, true); + + const pos = position(evt); + + ctx.event = { + x: pos.left, + y: pos.top, + time: Date.now(), + mouse: mouseEvent === true, + dir: false + }; + }, + + move (evt) { + if (ctx.event === void 0) { + return + } + + if (ctx.event.dir !== false) { + stopAndPrevent(evt); + return + } + + const time = Date.now() - ctx.event.time; + + if (time === 0) { + return + } + + const + pos = position(evt), + distX = pos.left - ctx.event.x, + absX = Math.abs(distX), + distY = pos.top - ctx.event.y, + absY = Math.abs(distY); + + if (ctx.event.mouse !== true) { + if (absX < ctx.sensitivity[1] && absY < ctx.sensitivity[1]) { + ctx.end(evt); + return + } + } + else if (absX < ctx.sensitivity[2] && absY < ctx.sensitivity[2]) { + return + } + + const + velX = absX / time, + velY = absY / time; + + if ( + ctx.direction.vertical === true && + absX < absY && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = distY < 0 ? 'up' : 'down'; + } + + if ( + ctx.direction.horizontal === true && + absX > absY && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = distX < 0 ? 'left' : 'right'; + } + + if ( + ctx.direction.up === true && + absX < absY && + distY < 0 && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = 'up'; + } + + if ( + ctx.direction.down === true && + absX < absY && + distY > 0 && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = 'down'; + } + + if ( + ctx.direction.left === true && + absX > absY && + distX < 0 && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = 'left'; + } + + if ( + ctx.direction.right === true && + absX > absY && + distX > 0 && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = 'right'; + } + + if (ctx.event.dir !== false) { + stopAndPrevent(evt); + + if (ctx.event.mouse === true) { + document.body.classList.add('no-pointer-events--children'); + document.body.classList.add('non-selectable'); + clearSelection(); + + ctx.styleCleanup = withDelay => { + ctx.styleCleanup = void 0; + + document.body.classList.remove('non-selectable'); + + const remove = () => { + document.body.classList.remove('no-pointer-events--children'); + }; + + if (withDelay === true) { setTimeout(remove, 50); } + else { remove(); } + }; + } + + ctx.handler({ + evt, + touch: ctx.event.mouse !== true, + mouse: ctx.event.mouse, + direction: ctx.event.dir, + duration: time, + distance: { + x: absX, + y: absY + } + }); + } + else { + ctx.end(evt); + } + }, + + end (evt) { + if (ctx.event === void 0) { + return + } + + cleanEvt(ctx, 'temp'); + client.is.firefox === true && preventDraggable(el, false); + ctx.styleCleanup !== void 0 && ctx.styleCleanup(true); + evt !== void 0 && ctx.event.dir !== false && stopAndPrevent(evt); + + ctx.event = void 0; + } + }; + + el.__qtouchswipe = ctx; + + configureEvents$4(el, ctx, modifiers); + }, + + update (el, { modifiers, arg, value, oldValue }) { + const ctx = el.__qtouchswipe; + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end(); + ctx.handler = value; + } + + if (ctx.arg !== arg) { + ctx.sensitivity = parseArg$3(arg); + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents$4(el, ctx, modifiers); + + ctx.direction = getModifierDirections(modifiers); + } + } + }, + + unbind (el) { + if (el.__qtouchswipe_destroyed === void 0) { + destroy$a(el); + } + else { + delete el.__qtouchswipe_destroyed; + } + } + }; + + function getPanelWrapper (h) { + return h('div', { + key: 'stop', + staticClass: 'q-panel scroll', + // stop propagation of content emitted @input + // which would tamper with Panel's model + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'default')) + } + + const PanelWrapper = Vue__default["default"].extend({ + render: getPanelWrapper + }); + + const PanelParentMixin = { + mixins: [ ListenersMixin ], + + directives: { + TouchSwipe + }, + + props: { + value: { + required: true + }, + + animated: Boolean, + infinite: Boolean, + swipeable: Boolean, + vertical: Boolean, + + transitionPrev: String, + transitionNext: String, + + keepAlive: Boolean, + keepAliveInclude: [ String, Array, RegExp ], + keepAliveExclude: [ String, Array, RegExp ], + keepAliveMax: Number + }, + + data () { + return { + panelIndex: null, + panelTransition: null + } + }, + + computed: { + panelDirectives () { + if (this.swipeable === true) { + return [{ + name: 'touch-swipe', + value: this.__swipe, + modifiers: { + horizontal: this.vertical !== true, + vertical: this.vertical, + mouse: true + } + }] + } + }, + + contentKey () { + return typeof this.value === 'string' || typeof this.value === 'number' + ? this.value + : String(this.value) + }, + + transitionPrevComputed () { + return this.transitionPrev || `slide-${this.vertical === true ? 'down' : 'right'}` + }, + + transitionNextComputed () { + return this.transitionNext || `slide-${this.vertical === true ? 'up' : 'left'}` + }, + + keepAliveProps () { + return { + include: this.keepAliveInclude, + exclude: this.keepAliveExclude, + max: this.keepAliveMax + } + }, + + needsUniqueWrapper () { + return this.keepAliveInclude !== void 0 || + this.keepAliveExclude !== void 0 + } + }, + + watch: { + value (newVal, oldVal) { + const index = this.__isValidPanelName(newVal) === true + ? this.__getPanelIndex(newVal) + : -1; + + if (this.__forcedPanelTransition !== true) { + this.__updatePanelTransition( + index === -1 ? 0 : (index < this.__getPanelIndex(oldVal) ? -1 : 1) + ); + } + + if (this.panelIndex !== index) { + this.panelIndex = index; + this.$emit('before-transition', newVal, oldVal); + this.$nextTick(() => { + this.$emit('transition', newVal, oldVal); + }); + } + } + }, + + methods: { + next () { + this.__go(1); + }, + + previous () { + this.__go(-1); + }, + + goTo (name) { + this.$emit('input', name); + }, + + __isValidPanelName (name) { + return name !== void 0 && name !== null && name !== '' + }, + + __getPanelIndex (name) { + return this.panels.findIndex(panel => { + const opt = panel.componentOptions.propsData; + return opt.name === name && + opt.disable !== '' && + opt.disable !== true + }) + }, + + __getEnabledPanels () { + return this.panels.filter(panel => { + const opt = panel.componentOptions.propsData; + return opt.disable !== '' && opt.disable !== true + }) + }, + + __updatePanelTransition (direction) { + const val = direction !== 0 && this.animated === true && this.panelIndex !== -1 + ? 'q-transition--' + (direction === -1 ? this.transitionPrevComputed : this.transitionNextComputed) + : null; + + if (this.panelTransition !== val) { + this.panelTransition = val; + } + }, + + __go (direction, startIndex = this.panelIndex) { + let index = startIndex + direction; + const slots = this.panels; + + while (index > -1 && index < slots.length) { + const opt = slots[index].componentOptions; + + if ( + opt !== void 0 && + opt.propsData.disable !== '' && + opt.propsData.disable !== true + ) { + this.__updatePanelTransition(direction); + this.__forcedPanelTransition = true; + this.$emit('input', slots[index].componentOptions.propsData.name); + setTimeout(() => { + this.__forcedPanelTransition = false; + }); + return + } + + index += direction; + } + + if (this.infinite === true && slots.length > 0 && startIndex !== -1 && startIndex !== slots.length) { + this.__go(direction, direction === -1 ? slots.length : -1); + } + }, + + __swipe (evt) { + const dir = this.vertical === true ? 'up' : 'left'; + this.__go((this.$q.lang.rtl === true ? -1 : 1) * (evt.direction === dir ? 1 : -1)); + }, + + __updatePanelIndex () { + const index = this.__getPanelIndex(this.value); + + if (this.panelIndex !== index) { + this.panelIndex = index; + } + + return true + }, + + __getPanelContent (h) { + if (this.panels.length === 0) { + return + } + + const panel = this.__isValidPanelName(this.value) && + this.__updatePanelIndex() && + this.panels[this.panelIndex]; + + const content = this.keepAlive === true + ? [ + h('keep-alive', { props: this.keepAliveProps }, [ + h( + this.needsUniqueWrapper === true + ? cacheWithFn(this, this.contentKey, () => Vue__default["default"].extend({ + name: this.contentKey, + render: getPanelWrapper + })) + : PanelWrapper, + { key: this.contentKey }, + [ panel ] + ) + ]) + ] + : [ + h('div', { + staticClass: 'q-panel scroll', + key: this.contentKey, + // stop propagation of content emitted @input + // which would tamper with Panel's model + on: cache(this, 'stop', { input: stop }) + }, [ panel ]) + ]; + + return this.animated === true + ? [ + h('transition', { + props: { name: this.panelTransition }, + on: onTransitionHideScroll + }, content) + ] + : content + } + }, + + render (h) { + this.panels = slot(this, 'default', []).filter( + panel => panel !== void 0 && + panel.componentOptions !== void 0 && + panel.componentOptions.propsData !== void 0 && + this.__isValidPanelName(panel.componentOptions.propsData.name) + ); + + return this.__renderPanels(h) + } + }; + + const PanelChildMixin = { + mixins: [ ListenersMixin ], + + props: { + name: { + required: true + }, + disable: Boolean + } + }; + + let fullscreenCounter = 0; + + var FullscreenMixin = { + props: { + fullscreen: Boolean, + noRouteFullscreenExit: Boolean + }, + + data () { + return { + inFullscreen: false + } + }, + + watch: { + $route () { + this.noRouteFullscreenExit !== true && this.exitFullscreen(); + }, + + fullscreen (v) { + if (this.inFullscreen !== v) { + this.toggleFullscreen(); + } + }, + + inFullscreen (v) { + this.$emit('update:fullscreen', v); + this.$emit('fullscreen', v); + } + }, + + methods: { + toggleFullscreen () { + if (this.inFullscreen === true) { + this.exitFullscreen(); + } + else { + this.setFullscreen(); + } + }, + + setFullscreen () { + if (this.inFullscreen === true) { + return + } + + this.inFullscreen = true; + this.container = this.$el.parentNode; + this.container.replaceChild(this.fullscreenFillerNode, this.$el); + document.body.appendChild(this.$el); + + fullscreenCounter++; + + if (fullscreenCounter === 1) { + document.body.classList.add('q-body--fullscreen-mixin'); + } + + this.__historyFullscreen = { + handler: this.exitFullscreen + }; + History.add(this.__historyFullscreen); + }, + + exitFullscreen () { + if (this.inFullscreen !== true) { + return + } + + if (this.__historyFullscreen !== void 0) { + History.remove(this.__historyFullscreen); + this.__historyFullscreen = void 0; + } + this.container.replaceChild(this.$el, this.fullscreenFillerNode); + this.inFullscreen = false; + + fullscreenCounter = Math.max(0, fullscreenCounter - 1); + + if (fullscreenCounter === 0) { + document.body.classList.remove('q-body--fullscreen-mixin'); + + if (this.$el.scrollIntoView !== void 0) { + setTimeout(() => { this.$el.scrollIntoView(); }); + } + } + } + }, + + beforeMount () { + this.fullscreenFillerNode = document.createElement('span'); + }, + + mounted () { + this.fullscreen === true && this.setFullscreen(); + }, + + beforeDestroy () { + this.exitFullscreen(); + } + }; + + var QCarousel = Vue__default["default"].extend({ + name: 'QCarousel', + + mixins: [ DarkMixin, PanelParentMixin, FullscreenMixin ], + + props: { + height: String, + padding: Boolean, + + controlType: { + type: String, + validator: v => [ 'regular', 'flat', 'outline', 'push', 'unelevated' ].includes(v), + default: 'flat' + }, + controlColor: String, + controlTextColor: String, + + autoplay: [ Number, Boolean ], + + arrows: Boolean, + prevIcon: String, + nextIcon: String, + + navigation: Boolean, + navigationPosition: { + type: String, + validator: v => [ 'top', 'right', 'bottom', 'left' ].includes(v) + }, + navigationIcon: String, + navigationActiveIcon: String, + + thumbnails: Boolean + }, + + computed: { + style () { + if (this.inFullscreen !== true && this.height !== void 0) { + return { + height: this.height + } + } + }, + + direction () { + return this.vertical === true ? 'vertical' : 'horizontal' + }, + + classes () { + return `q-carousel q-panel-parent q-carousel--with${this.padding === true ? '' : 'out'}-padding` + + (this.inFullscreen === true ? ' fullscreen' : '') + + ` q-carousel--${this.darkSuffix} q-${this.darkSuffix}` + + (this.arrows === true ? ` q-carousel--arrows-${this.direction}` : '') + + (this.navigation === true ? ` q-carousel--navigation-${this.navigationPositionComputed}` : '') + }, + + arrowIcons () { + const ico = [ + this.prevIcon || this.$q.iconSet.carousel[this.vertical === true ? 'up' : 'left'], + this.nextIcon || this.$q.iconSet.carousel[this.vertical === true ? 'down' : 'right'] + ]; + + return this.vertical === false && this.$q.lang.rtl === true + ? ico.reverse() + : ico + }, + + navIcon () { + return this.navigationIcon || this.$q.iconSet.carousel.navigationIcon + }, + + navActiveIcon () { + return this.navigationActiveIcon || this.navIcon + }, + + navigationPositionComputed () { + return this.navigationPosition || (this.vertical === true ? 'right' : 'bottom') + }, + + controlProps () { + return { + color: this.controlColor, + textColor: this.controlTextColor, + round: true, + [ this.controlType ]: true, + dense: true + } + }, + + transitionPrevComputed () { + return this.transitionPrev || 'fade' + }, + + transitionNextComputed () { + return this.transitionNext || 'fade' + } + }, + + watch: { + value () { + if (this.autoplay) { + clearInterval(this.timer); + this.__startTimer(); + } + }, + + autoplay (val) { + if (val) { + this.__startTimer(); + } + else { + clearInterval(this.timer); + } + } + }, + + methods: { + __startTimer () { + const duration = isNumber(this.autoplay) === true + ? this.autoplay + : 5000; + + this.timer = setTimeout( + duration >= 0 ? this.next : this.previous, + Math.abs(duration) + ); + }, + + __getNavigationContainer (h, type, mapping) { + return h('div', { + class: 'q-carousel__control q-carousel__navigation no-wrap absolute flex' + + ` q-carousel__navigation--${type} q-carousel__navigation--${this.navigationPositionComputed}` + + (this.controlColor !== void 0 ? ` text-${this.controlColor}` : '') + }, [ + h('div', { + staticClass: 'q-carousel__navigation-inner flex flex-center no-wrap' + }, this.__getEnabledPanels().map(mapping)) + ]) + }, + + __getContent (h) { + const node = []; + + if (this.navigation === true) { + const fn = this.$scopedSlots['navigation-icon'] !== void 0 + ? this.$scopedSlots['navigation-icon'] + : opts => h(QBtn, { + key: 'nav#' + opts.name, + class: `q-carousel__navigation-icon q-carousel__navigation-icon--${opts.active === true ? '' : 'in'}active`, + props: opts.btnProps, + on: cache(this, 'nav#' + opts.name, { click: opts.onClick }) + }); + + const maxIndex = this.panels.length - 1; + node.push( + this.__getNavigationContainer(h, 'buttons', (panel, index) => { + const name = panel.componentOptions.propsData.name; + const active = this.panelIndex === index; + + return fn({ + index, + maxIndex, + name, + active, + btnProps: { + icon: active === true ? this.navActiveIcon : this.navIcon, + size: 'sm', + ...this.controlProps + }, + onClick: () => { this.goTo(name); } + }) + }) + ); + } + else if (this.thumbnails === true) { + const color = this.controlColor !== void 0 + ? ` text-${this.controlColor}` + : ''; + + node.push(this.__getNavigationContainer(h, 'thumbnails', panel => { + const slide = panel.componentOptions.propsData; + + return h('img', { + class: `q-carousel__thumbnail q-carousel__thumbnail--${slide.name === this.value ? '' : 'in'}active` + color, + attrs: { + src: slide.imgSrc + }, + key: 'tmb#' + slide.name, + on: cache(this, 'tmb#' + slide.name, { click: () => { this.goTo(slide.name); } }) + }) + })); + } + + if (this.arrows === true && this.panelIndex >= 0) { + if (this.infinite === true || this.panelIndex > 0) { + node.push( + h('div', { + staticClass: `q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--${this.direction} absolute flex flex-center` + }, [ + h(QBtn, { + key: 'prev', + props: { icon: this.arrowIcons[0], ...this.controlProps }, + on: cache(this, 'prev', { click: this.previous }) + }) + ]) + ); + } + + if (this.infinite === true || this.panelIndex < this.panels.length - 1) { + node.push( + h('div', { + staticClass: `q-carousel__control q-carousel__arrow q-carousel__next-arrow q-carousel__next-arrow--${this.direction} absolute flex flex-center` + }, [ + h(QBtn, { + key: 'next', + props: { icon: this.arrowIcons[1], ...this.controlProps }, + on: cache(this, 'next', { click: this.next }) + }) + ]) + ); + } + } + + return mergeSlot(node, this, 'control') + }, + + __renderPanels (h) { + return h('div', { + style: this.style, + class: this.classes, + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'q-carousel__slides-container', + directives: this.panelDirectives + }, this.__getPanelContent(h)) + ].concat(this.__getContent(h))) + } + }, + + mounted () { + this.autoplay && this.__startTimer(); + }, + + beforeDestroy () { + clearInterval(this.timer); + } + }); + + var QCarouselSlide = Vue__default["default"].extend({ + name: 'QCarouselSlide', + + mixins: [ PanelChildMixin ], + + props: { + imgSrc: String + }, + + computed: { + style () { + if (this.imgSrc) { + return { + backgroundImage: `url("${this.imgSrc}")` + } + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-carousel__slide', + style: this.style, + attrs: { role: 'tabpanel' }, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QCarouselControl = Vue__default["default"].extend({ + name: 'QCarouselControl', + + mixins: [ ListenersMixin ], + + props: { + position: { + type: String, + default: 'bottom-right', + validator: v => [ + 'top-right', 'top-left', + 'bottom-right', 'bottom-left', + 'top', 'right', 'bottom', 'left' + ].includes(v) + }, + offset: { + type: Array, + default: () => [18, 18], + validator: v => v.length === 2 + } + }, + + computed: { + classes () { + return `absolute-${this.position}` + }, + + style () { + return { + margin: `${this.offset[1]}px ${this.offset[0]}px` + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-carousel__control absolute', + style: this.style, + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QChatMessage = Vue__default["default"].extend({ + name: 'QChatMessage', + + mixins: [ ListenersMixin ], + + props: { + sent: Boolean, + label: String, + bgColor: String, + textColor: String, + name: String, + avatar: String, + text: Array, + stamp: String, + size: String, + labelSanitize: Boolean, + nameSanitize: Boolean, + textSanitize: Boolean, + stampSanitize: Boolean + }, + + computed: { + textClass () { + return `q-message-text-content q-message-text-content--${this.op}` + + (this.textColor !== void 0 ? ` text-${this.textColor}` : '') + }, + + messageClass () { + return `q-message-text q-message-text--${this.op}` + + (this.bgColor !== void 0 ? ` text-${this.bgColor}` : '') + }, + + containerClass () { + return 'q-message-container row items-end no-wrap' + + (this.sent === true ? ' reverse' : '') + }, + + sizeClass () { + if (this.size !== void 0) { + return `col-${this.size}` + } + }, + + op () { + return this.sent === true ? 'sent' : 'received' + } + }, + + methods: { + __wrapStamp (h, node) { + if (this.$scopedSlots.stamp !== void 0) { + return [ node, h('div', { staticClass: 'q-message-stamp' }, this.$scopedSlots.stamp()) ] + } + + if (this.stamp) { + const domPropStamp = this.stampSanitize === true ? 'textContent' : 'innerHTML'; + + return [ + node, + h('div', { + staticClass: 'q-message-stamp', + domProps: { [domPropStamp]: this.stamp } + }) + ] + } + + return [ node ] + }, + + __getText (h, contentList, withSlots) { + const domPropText = this.textSanitize === true ? 'textContent' : 'innerHTML'; + + if ( + withSlots === true && + contentList.some(entry => entry.tag === void 0 && entry.text !== void 0) === true + ) { + return [ + h('div', { class: this.messageClass }, [ + h('div', { class: this.textClass }, this.__wrapStamp(h, h('div', contentList))) + ]) + ] + } + + const content = withSlots !== true + ? text => h('div', { domProps: { [domPropText]: text } }) + : (contentList.length > 1 ? text => text : text => h('div', [text])); + + return contentList.map((msg, index) => h('div', { + key: index, + class: this.messageClass + }, [ + h('div', { class: this.textClass }, this.__wrapStamp(h, content(msg))) + ])) + } + }, + + render (h) { + const container = []; + + if (this.$scopedSlots.avatar !== void 0) { + container.push(this.$scopedSlots.avatar()); + } + else if (this.avatar !== void 0) { + container.push( + h('img', { + class: `q-message-avatar q-message-avatar--${this.op}`, + attrs: { src: this.avatar, 'aria-hidden': 'true' } + }) + ); + } + + const msg = []; + + if (this.$scopedSlots.name !== void 0) { + msg.push( + h('div', { + class: `q-message-name q-message-name--${this.op}` + }, this.$scopedSlots.name()) + ); + } + else if (this.name !== void 0) { + msg.push( + h('div', { + class: `q-message-name q-message-name--${this.op}`, + domProps: { [this.nameSanitize === true ? 'textContent' : 'innerHTML']: this.name } + }) + ); + } + + this.text !== void 0 && msg.push( + this.__getText(h, this.text) + ); + + this.$scopedSlots.default !== void 0 && msg.push( + this.__getText(h, this.$scopedSlots.default(), true) + ); + + container.push( + h('div', { class: this.sizeClass }, msg) + ); + + const child = []; + + if (this.$scopedSlots.label !== void 0) { + child.push( + h('div', { staticClass: 'q-message-label' }, this.$scopedSlots.label()) + ); + } + else if (this.label !== void 0) { + child.push( + h('div', { + staticClass: 'q-message-label', + domProps: { [this.labelSanitize === true ? 'textContent' : 'innerHTML']: this.label } + }) + ); + } + + child.push( + h('div', { class: this.containerClass }, container) + ); + + return h('div', { + class: `q-message q-message-${this.op}`, + on: { ...this.qListeners } + }, child) + } + }); + + var OptionSizeMixin = getSizeMixin({ + xs: 30, + sm: 35, + md: 40, + lg: 50, + xl: 60 + }); + + var RefocusTargetMixin = { + computed: { + __refocusTargetEl () { + if (this.disable !== true) { + return this.$createElement('span', { + ref: 'refocusTarget', + staticClass: 'no-outline', + attrs: { tabindex: -1 } + }) + } + } + }, + + methods: { + __refocusTarget (e) { + if (this.$el.contains(document.activeElement) === true) { + const el = this.$q.interaction.isPointer === true + ? this.$refs.refocusTarget + : this.$el; + + el !== void 0 && document.activeElement !== el && el.focus(); + } + } + } + }; + + var CheckboxMixin = { + mixins: [ DarkMixin, OptionSizeMixin, FormMixin, RefocusTargetMixin ], + + props: { + value: { + required: true, + default: null + }, + val: {}, + + trueValue: { default: true }, + falseValue: { default: false }, + indeterminateValue: { default: null }, + + checkedIcon: String, + uncheckedIcon: String, + indeterminateIcon: String, + + toggleOrder: { + type: String, + validator: v => v === 'tf' || v === 'ft' + }, + toggleIndeterminate: Boolean, + + label: String, + leftLabel: Boolean, + + color: String, + keepColor: Boolean, + dense: Boolean, + + disable: Boolean, + tabindex: [String, Number] + }, + + computed: { + isTrue () { + return this.modelIsArray === true + ? this.index > -1 + : this.value === this.trueValue + }, + + isFalse () { + return this.modelIsArray === true + ? this.index === -1 + : this.value === this.falseValue + }, + + isIndeterminate () { + return this.isTrue === false && this.isFalse === false + }, + + index () { + if (this.modelIsArray === true) { + return this.value.indexOf(this.val) + } + }, + + modelIsArray () { + return this.val !== void 0 && Array.isArray(this.value) + }, + + computedTabindex () { + return this.disable === true ? -1 : this.tabindex || 0 + }, + + classes () { + return `q-${this.type} cursor-pointer no-outline row inline no-wrap items-center` + + (this.disable === true ? ' disabled' : '') + + ` q-${this.type}--${this.darkSuffix}` + + (this.dense === true ? ` q-${this.type}--dense` : '') + + (this.leftLabel === true ? ' reverse' : '') + }, + + innerClass () { + const state = this.isTrue === true ? 'truthy' : (this.isFalse === true ? 'falsy' : 'indet'); + const color = this.color !== void 0 && ( + this.keepColor === true || + (this.type === 'toggle' ? this.isTrue === true : this.isFalse !== true) + ) + ? ` text-${this.color}` + : ''; + + return `q-${this.type}__inner--${state}${color}` + }, + + formAttrs () { + const prop = { type: 'checkbox' }; + + this.name !== void 0 && Object.assign(prop, { + checked: this.isTrue, + name: this.name, + value: this.modelIsArray === true + ? this.val + : this.trueValue + }); + + return prop + }, + + attrs () { + const attrs = { + tabindex: this.computedTabindex, + role: this.type === 'toggle' ? 'switch' : 'checkbox', + 'aria-label': this.label, + 'aria-checked': this.isIndeterminate === true + ? 'mixed' + : (this.isTrue === true ? 'true' : 'false') + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + + return attrs + } + }, + + methods: { + toggle (e) { + if (e !== void 0) { + stopAndPrevent(e); + this.__refocusTarget(e); + } + + if (this.disable !== true) { + this.$emit('input', this.__getNextValue(), e); + } + }, + + __getNextValue () { + if (this.modelIsArray === true) { + if (this.isTrue === true) { + const val = this.value.slice(); + val.splice(this.index, 1); + return val + } + + return this.value.concat([ this.val ]) + } + + if (this.isTrue === true) { + if (this.toggleOrder !== 'ft' || this.toggleIndeterminate === false) { + return this.falseValue + } + } + else if (this.isFalse === true) { + if (this.toggleOrder === 'ft' || this.toggleIndeterminate === false) { + return this.trueValue + } + } + else { + return this.toggleOrder !== 'ft' + ? this.trueValue + : this.falseValue + } + + return this.indeterminateValue + }, + + __onKeydown (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + stopAndPrevent(e); + } + }, + + __onKeyup (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + this.toggle(e); + } + } + }, + + render (h) { + const inner = this.__getInner(h); + + this.disable !== true && this.__injectFormInput( + inner, + 'unshift', + `q-${this.type}__native absolute q-ma-none q-pa-none` + ); + + const child = [ + h('div', { + staticClass: `q-${this.type}__inner relative-position non-selectable`, + class: this.innerClass, + style: this.sizeStyle, + attrs: { 'aria-hidden': 'true' } + }, inner) + ]; + + if (this.__refocusTargetEl !== void 0) { + child.push(this.__refocusTargetEl); + } + + const label = this.label !== void 0 + ? mergeSlot([ this.label ], this, 'default') + : slot(this, 'default'); + + label !== void 0 && child.push( + h('div', { + staticClass: `q-${this.type}__label q-anchor--skip` + }, label) + ); + + return h('div', { + key: 'inpExt', + class: this.classes, + attrs: this.attrs, + on: cache(this, 'inpExt', { + click: this.toggle, + keydown: this.__onKeydown, + keyup: this.__onKeyup + }) + }, child) + } + }; + + var QCheckbox = Vue__default["default"].extend({ + name: 'QCheckbox', + + mixins: [ CheckboxMixin ], + + computed: { + computedIcon () { + return this.isTrue === true + ? this.checkedIcon + : (this.isIndeterminate === true + ? this.indeterminateIcon + : this.uncheckedIcon + ) + } + }, + + methods: { + __getInner (h) { + return this.computedIcon !== void 0 + ? [ + h('div', { + key: 'icon', + staticClass: 'q-checkbox__icon-container absolute-full flex flex-center no-wrap' + }, [ + h(QIcon, { + staticClass: 'q-checkbox__icon', + props: { name: this.computedIcon } + }) + ]) + ] + : [ + h('div', { + key: 'svg', + staticClass: 'q-checkbox__bg absolute' + }, [ + h('svg', { + staticClass: 'q-checkbox__svg fit absolute-full', + attrs: { focusable: 'false' /* needed for IE11 */, viewBox: '0 0 24 24' } + }, [ + h('path', { + staticClass: 'q-checkbox__truthy', + attrs: { + fill: 'none', + d: 'M1.73,12.91 8.1,19.28 22.79,4.59' + } + }), + + h('path', { + staticClass: 'q-checkbox__indet', + attrs: { + d: 'M4,14H20V10H4' + } + }) + ]) + ]) + ] + } + }, + + created () { + this.type = 'checkbox'; + } + }); + + var QChip = Vue__default["default"].extend({ + name: 'QChip', + + mixins: [ + RippleMixin, + DarkMixin, + getSizeMixin({ + xs: 8, + sm: 10, + md: 14, + lg: 20, + xl: 24 + }) + ], + + model: { + event: 'remove' + }, + + props: { + dense: Boolean, + + icon: String, + iconRight: String, + iconRemove: String, + iconSelected: String, + label: [String, Number], + + color: String, + textColor: String, + + value: { + type: Boolean, + default: true + }, + selected: { + type: Boolean, + default: null + }, + + square: Boolean, + outline: Boolean, + clickable: Boolean, + removable: Boolean, + + removeAriaLabel: String, + + tabindex: [String, Number], + disable: Boolean + }, + + computed: { + classes () { + const text = this.outline === true + ? this.color || this.textColor + : this.textColor; + + return { + [`bg-${this.color}`]: this.outline === false && this.color !== void 0, + [`text-${text} q-chip--colored`]: text, + disabled: this.disable, + 'q-chip--dense': this.dense, + 'q-chip--outline': this.outline, + 'q-chip--selected': this.selected, + 'q-chip--clickable cursor-pointer non-selectable q-hoverable': this.isClickable, + 'q-chip--square': this.square, + [`q-chip--${this.localDarkSuffix}`]: true + } + }, + + localDarkSuffix () { + if (typeof this.color === 'string' && this.color.trim().length > 0) { + return this.dark === true ? 'dark' : 'light' + } + + return this.darkSuffix + }, + + hasLeftIcon () { + return this.selected === true || this.icon !== void 0 + }, + + leftIcon () { + return this.selected === true + ? this.iconSelected || this.$q.iconSet.chip.selected + : this.icon + }, + + removeIcon () { + return this.iconRemove || this.$q.iconSet.chip.remove + }, + + isClickable () { + return this.disable === false && (this.clickable === true || this.selected !== null) + }, + + attrs () { + const chip = this.disable === true + ? { tabindex: -1, 'aria-disabled': 'true' } + : { tabindex: this.tabindex || 0 }; + const remove = { + ...chip, + role: 'button', + 'aria-hidden': 'false', + 'aria-label': this.removeAriaLabel || this.$q.lang.label.remove + }; + + return { chip, remove } + } + }, + + methods: { + __onKeyup (e) { + e.keyCode === 13 /* ENTER */ && this.__onClick(e); + }, + + __onClick (e) { + if (!this.disable) { + this.$emit('update:selected', !this.selected); + this.$emit('click', e); + } + }, + + __onRemove (e) { + if (e.keyCode === void 0 || e.keyCode === 13) { + stopAndPrevent(e); + !this.disable && this.$emit('remove', false); + } + }, + + __getContent (h) { + const child = []; + + this.isClickable === true && child.push( + h('div', { staticClass: 'q-focus-helper' }) + ); + + this.hasLeftIcon === true && child.push( + h(QIcon, { + staticClass: 'q-chip__icon q-chip__icon--left', + props: { name: this.leftIcon } + }) + ); + + const label = this.label !== void 0 + ? [ h('div', { staticClass: 'ellipsis' }, [ this.label ]) ] + : void 0; + + child.push( + h('div', { + staticClass: 'q-chip__content col row no-wrap items-center q-anchor--skip' + }, mergeSlotSafely(label, this, 'default')) + ); + + this.iconRight && child.push( + h(QIcon, { + staticClass: 'q-chip__icon q-chip__icon--right', + props: { name: this.iconRight } + }) + ); + + this.removable === true && child.push( + h(QIcon, { + key: 'non', + staticClass: 'q-chip__icon q-chip__icon--remove cursor-pointer', + props: { name: this.removeIcon }, + attrs: this.attrs.remove, + on: cache(this, 'non', { + click: this.__onRemove, + keyup: this.__onRemove + }) + }) + ); + + return child + } + }, + + render (h) { + if (this.value === false) { return } + + const data = { + staticClass: 'q-chip row inline no-wrap items-center', + class: this.classes, + style: this.sizeStyle + }; + + this.isClickable === true && Object.assign(data, { + key: 'click', + attrs: this.attrs.chip, + on: cache(this, 'click', { + click: this.__onClick, + keyup: this.__onKeyup + }), + directives: cache(this, 'dir#' + this.ripple, [ + { name: 'ripple', value: this.ripple } + ]) + }); + + return h('div', data, this.__getContent(h)) + } + }); + + const + radius = 50, + diameter = 2 * radius, + circumference = diameter * Math.PI, + strokeDashArray = Math.round(circumference * 1000) / 1000; + + var QCircularProgress = Vue__default["default"].extend({ + name: 'QCircularProgress', + + mixins: [ ListenersMixin, SizeMixin ], + + props: { + value: { + type: Number, + default: 0 + }, + + min: { + type: Number, + default: 0 + }, + max: { + type: Number, + default: 100 + }, + + color: String, + centerColor: String, + trackColor: String, + + fontSize: String, + rounded: Boolean, + + // ratio + thickness: { + type: Number, + default: 0.2, + validator: v => v >= 0 && v <= 1 + }, + + angle: { + type: Number, + default: 0 + }, + + indeterminate: Boolean, + showValue: Boolean, + reverse: Boolean, + + instantFeedback: Boolean + }, + + computed: { + normalizedValue () { + return between(this.value, this.min, this.max) + }, + + svgStyle () { + const angle = this.$q.lang.rtl === true ? -this.angle : this.angle; + + return { + transform: this.reverse !== (this.$q.lang.rtl === true) + ? `scale3d(-1, 1, 1) rotate3d(0, 0, 1, ${-90 - angle}deg)` + : `rotate3d(0, 0, 1, ${angle - 90}deg)` + } + }, + + circleStyle () { + if (this.instantFeedback !== true && this.indeterminate !== true) { + return { transition: 'stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease' } + } + }, + + viewBox () { + return diameter / (1 - this.thickness / 2) + }, + + viewBoxAttr () { + return `${this.viewBox / 2} ${this.viewBox / 2} ${this.viewBox} ${this.viewBox}` + }, + + strokeDashOffset () { + const progress = 1 - (this.normalizedValue - this.min) / (this.max - this.min); + return progress * circumference + }, + + strokeWidth () { + return this.thickness / 2 * this.viewBox + }, + + attrs () { + return { + role: 'progressbar', + 'aria-valuemin': this.min, + 'aria-valuemax': this.max, + 'aria-valuenow': this.indeterminate === true ? void 0 : this.normalizedValue + } + } + }, + + methods: { + __getCircle (h, { thickness, offset, color, cls, rounded }) { + return h('circle', { + staticClass: 'q-circular-progress__' + cls, + class: color !== void 0 ? `text-${color}` : null, + style: this.circleStyle, + attrs: { + fill: 'transparent', + stroke: 'currentColor', + 'stroke-width': thickness, + 'stroke-dasharray': strokeDashArray, + 'stroke-dashoffset': offset, + 'stroke-linecap': rounded, + cx: this.viewBox, + cy: this.viewBox, + r: radius + } + }) + } + }, + + render (h) { + const svgChild = []; + + this.centerColor !== void 0 && this.centerColor !== 'transparent' && svgChild.push( + h('circle', { + staticClass: 'q-circular-progress__center', + class: `text-${this.centerColor}`, + attrs: { + fill: 'currentColor', + r: radius - this.strokeWidth / 2, + cx: this.viewBox, + cy: this.viewBox + } + }) + ); + + this.trackColor !== void 0 && this.trackColor !== 'transparent' && svgChild.push( + this.__getCircle(h, { + cls: 'track', + thickness: this.strokeWidth, + offset: 0, + color: this.trackColor + }) + ); + + svgChild.push( + this.__getCircle(h, { + cls: 'circle', + thickness: this.strokeWidth, + offset: this.strokeDashOffset, + color: this.color, + rounded: this.rounded === true ? 'round' : void 0 + }) + ); + + const child = [ + h('svg', { + staticClass: 'q-circular-progress__svg', + style: this.svgStyle, + attrs: { + focusable: 'false' /* needed for IE11 */, + viewBox: this.viewBoxAttr, + 'aria-hidden': 'true' + } + }, svgChild) + ]; + + this.showValue === true && child.push( + h('div', { + staticClass: 'q-circular-progress__text absolute-full row flex-center content-center', + style: { fontSize: this.fontSize } + }, this.$scopedSlots.default !== void 0 ? this.$scopedSlots.default() : [ h('div', [ this.normalizedValue ]) ]) + ); + + return h('div', { + staticClass: 'q-circular-progress', + class: `q-circular-progress--${this.indeterminate === true ? 'in' : ''}determinate`, + style: this.sizeStyle, + on: { ...this.qListeners }, + attrs: this.attrs + }, mergeSlotSafely(child, this, 'internal')) + } + }); + + // file referenced from docs + + const + hex = /^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/, + hexa = /^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/, + hexOrHexa = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/, + rgb = /^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])\)$/, + rgba = /^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)\)$/; + + const testPattern = { + date: v => /^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(v), + time: v => /^([0-1]?\d|2[0-3]):[0-5]\d$/.test(v), + fulltime: v => /^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(v), + timeOrFulltime: v => /^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(v), + + // -- RFC 5322 -- + // -- Added in v1.18.10 -- + // This is a basic helper validation. + // For something more complex (like RFC 822) you should write and use your own rule. + // We won't be accepting PRs to enhance the one below because of the reason above. + email: v => /^(([^<>()[\]\\.,;:\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(v), + + hexColor: v => hex.test(v), + hexaColor: v => hexa.test(v), + hexOrHexaColor: v => hexOrHexa.test(v), + + rgbColor: v => rgb.test(v), + rgbaColor: v => rgba.test(v), + rgbOrRgbaColor: v => rgb.test(v) || rgba.test(v), + + hexOrRgbColor: v => hex.test(v) || rgb.test(v), + hexaOrRgbaColor: v => hexa.test(v) || rgba.test(v), + anyColor: v => hexOrHexa.test(v) || rgb.test(v) || rgba.test(v) + }; + + var patterns = { + testPattern + }; + + function throttle (fn, limit = 250) { + let wait = false, result; + + return function (/* ...args */) { + if (wait === false) { + wait = true; + setTimeout(() => { wait = false; }, limit); + result = fn.apply(this, arguments); + } + + return result + } + } + + function getChanges (evt, ctx, isFinal) { + const pos = position(evt); + let + dir, + distX = pos.left - ctx.event.x, + distY = pos.top - ctx.event.y, + absX = Math.abs(distX), + absY = Math.abs(distY); + + const direction = ctx.direction; + + if (direction.horizontal === true && direction.vertical !== true) { + dir = distX < 0 ? 'left' : 'right'; + } + else if (direction.horizontal !== true && direction.vertical === true) { + dir = distY < 0 ? 'up' : 'down'; + } + else if (direction.up === true && distY < 0) { + dir = 'up'; + if (absX > absY) { + if (direction.left === true && distX < 0) { + dir = 'left'; + } + else if (direction.right === true && distX > 0) { + dir = 'right'; + } + } + } + else if (direction.down === true && distY > 0) { + dir = 'down'; + if (absX > absY) { + if (direction.left === true && distX < 0) { + dir = 'left'; + } + else if (direction.right === true && distX > 0) { + dir = 'right'; + } + } + } + else if (direction.left === true && distX < 0) { + dir = 'left'; + if (absX < absY) { + if (direction.up === true && distY < 0) { + dir = 'up'; + } + else if (direction.down === true && distY > 0) { + dir = 'down'; + } + } + } + else if (direction.right === true && distX > 0) { + dir = 'right'; + if (absX < absY) { + if (direction.up === true && distY < 0) { + dir = 'up'; + } + else if (direction.down === true && distY > 0) { + dir = 'down'; + } + } + } + + let synthetic = false; + + if (dir === void 0 && isFinal === false) { + if (ctx.event.isFirst === true || ctx.event.lastDir === void 0) { + return {} + } + + dir = ctx.event.lastDir; + synthetic = true; + + if (dir === 'left' || dir === 'right') { + pos.left -= distX; + absX = 0; + distX = 0; + } + else { + pos.top -= distY; + absY = 0; + distY = 0; + } + } + + return { + synthetic, + payload: { + evt, + touch: ctx.event.mouse !== true, + mouse: ctx.event.mouse === true, + position: pos, + direction: dir, + isFirst: ctx.event.isFirst, + isFinal: isFinal === true, + duration: Date.now() - ctx.event.time, + distance: { + x: absX, + y: absY + }, + offset: { + x: distX, + y: distY + }, + delta: { + x: pos.left - ctx.event.lastX, + y: pos.top - ctx.event.lastY + } + } + } + } + + function destroy$9 (el) { + const ctx = el.__qtouchpan; + if (ctx !== void 0) { + // emit the end event when the directive is destroyed while active + // this is only needed in TouchPan because the rest of the touch directives do not emit an end event + // the condition is also checked in the start of function but we avoid the call + ctx.event !== void 0 && ctx.end(); + + cleanEvt(ctx, 'main_mouse'); + cleanEvt(ctx, 'main_touch'); + cleanEvt(ctx, 'temp'); + + client.is.firefox === true && preventDraggable(el, false); + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + delete el.__qtouchpan; + } + } + + function configureEvents$3 (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse'); + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', `passive${modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : ''}` ] + ]); + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch'); + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', `passive${modifiers.capture === true ? 'Capture' : ''}` ], + [ el, 'touchmove', 'noop', 'notPassiveCapture' ] // cannot be passive (ex: iOS scroll) + ]); + } + + ctx.modifiers = modifiers; + } + + function handleEvent (ctx, evt, mouseEvent) { + if (ctx.modifiers.mouse === true && mouseEvent === true) { + stopAndPrevent(evt); + } + else { + ctx.modifiers.stop === true && stop(evt); + ctx.modifiers.prevent === true && prevent(evt); + } + } + + let uid$2 = 0; + + var TouchPan = { + name: 'touch-pan', + + bind (el, { modifiers, value }) { + if (el.__qtouchpan !== void 0) { + destroy$9(el); + el.__qtouchpan_destroyed = true; + } + + const ctx = { + uid: 'qvtp_' + (uid$2++), + handler: value, + modifiers: { capture: null }, // make sure touch listeners are initiated + direction: getModifierDirections(modifiers), + + noop, + + mouseStart (evt) { + if (shouldStart(evt, ctx) && leftClick(evt)) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', 'notPassiveCapture' ], + [ document, 'mouseup', 'end', 'passiveCapture' ] + ]); + + ctx.start(evt, true); + } + }, + + touchStart (evt) { + if (shouldStart(evt, ctx)) { + const target = evt.target; + + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'notPassiveCapture' ], + [ target, 'touchcancel', 'end', 'passiveCapture' ], + [ target, 'touchend', 'end', 'passiveCapture' ] + ]); + + ctx.start(evt); + } + }, + + start (evt, mouseEvent) { + client.is.firefox === true && preventDraggable(el, true); + ctx.lastEvt = evt; + + /* + * Stop propagation so possible upper v-touch-pan don't catch this as well; + * If we're not the target (based on modifiers), we'll re-emit the event later + */ + if (mouseEvent === true || ctx.modifiers.stop === true) { + /* + * are we directly switching to detected state? + * clone event only otherwise + */ + if ( + ctx.direction.all !== true && + (mouseEvent !== true || (ctx.modifiers.mouseAllDir !== true && ctx.modifiers.mousealldir !== true)) + ) { + const clone = evt.type.indexOf('mouse') > -1 + ? new MouseEvent(evt.type, evt) + : new TouchEvent(evt.type, evt); + + evt.defaultPrevented === true && prevent(clone); + evt.cancelBubble === true && stop(clone); + + Object.assign(clone, { + qClickOutside: evt.qClickOutside, + qAnchorHandled: evt.qAnchorHandled, + qClonedBy: evt.qClonedBy === void 0 + ? [ ctx.uid ] + : evt.qClonedBy.concat(ctx.uid) + }); + + ctx.initialEvent = { + target: evt.target, + event: clone + }; + } + + stop(evt); + } + + const { left, top } = position(evt); + + ctx.event = { + x: left, + y: top, + time: Date.now(), + mouse: mouseEvent === true, + detected: false, + isFirst: true, + isFinal: false, + lastX: left, + lastY: top + }; + }, + + move (evt) { + if (ctx.event === void 0) { + return + } + + ctx.lastEvt = evt; + + const isMouseEvt = ctx.event.mouse === true; + const start = () => { + handleEvent(ctx, evt, isMouseEvt); + + let cursor; + if (ctx.modifiers.preserveCursor !== true && ctx.modifiers.preservecursor !== true) { + cursor = document.documentElement.style.cursor || ''; + document.documentElement.style.cursor = 'grabbing'; + } + isMouseEvt === true && document.body.classList.add('no-pointer-events--children'); + document.body.classList.add('non-selectable'); + clearSelection(); + + ctx.styleCleanup = withDelayedFn => { + ctx.styleCleanup = void 0; + + if (cursor !== void 0) { + document.documentElement.style.cursor = cursor; + } + document.body.classList.remove('non-selectable'); + + if (isMouseEvt === true) { + const remove = () => { + document.body.classList.remove('no-pointer-events--children'); + }; + + if (withDelayedFn !== void 0) { + setTimeout(() => { + remove(); + withDelayedFn(); + }, 50); + } + else { remove(); } + } + else if (withDelayedFn !== void 0) { + withDelayedFn(); + } + }; + }; + + if (ctx.event.detected === true) { + ctx.event.isFirst !== true && handleEvent(ctx, evt, ctx.event.mouse); + + const { payload, synthetic } = getChanges(evt, ctx, false); + + if (payload !== void 0) { + if (ctx.handler(payload) === false) { + ctx.end(evt); + } + else { + if (ctx.styleCleanup === void 0 && ctx.event.isFirst === true) { + start(); + } + + ctx.event.lastX = payload.position.left; + ctx.event.lastY = payload.position.top; + ctx.event.lastDir = synthetic === true ? void 0 : payload.direction; + ctx.event.isFirst = false; + } + } + + return + } + + if ( + ctx.direction.all === true || + (isMouseEvt === true && (ctx.modifiers.mouseAllDir === true || ctx.modifiers.mousealldir === true)) + ) { + start(); + ctx.event.detected = true; + ctx.move(evt); + return + } + + const + pos = position(evt), + distX = pos.left - ctx.event.x, + distY = pos.top - ctx.event.y, + absX = Math.abs(distX), + absY = Math.abs(distY); + + if (absX !== absY) { + if ( + (ctx.direction.horizontal === true && absX > absY) || + (ctx.direction.vertical === true && absX < absY) || + (ctx.direction.up === true && absX < absY && distY < 0) || + (ctx.direction.down === true && absX < absY && distY > 0) || + (ctx.direction.left === true && absX > absY && distX < 0) || + (ctx.direction.right === true && absX > absY && distX > 0) + ) { + ctx.event.detected = true; + ctx.move(evt); + } + else { + ctx.end(evt, true); + } + } + }, + + end (evt, abort) { + if (ctx.event === void 0) { + return + } + + cleanEvt(ctx, 'temp'); + client.is.firefox === true && preventDraggable(el, false); + + if (abort === true) { + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + if (ctx.event.detected !== true && ctx.initialEvent !== void 0) { + ctx.initialEvent.target.dispatchEvent(ctx.initialEvent.event); + } + } + else if (ctx.event.detected === true) { + ctx.event.isFirst === true && ctx.handler(getChanges(evt === void 0 ? ctx.lastEvt : evt, ctx).payload); + + const { payload } = getChanges(evt === void 0 ? ctx.lastEvt : evt, ctx, true); + const fn = () => { ctx.handler(payload); }; + + if (ctx.styleCleanup !== void 0) { + ctx.styleCleanup(fn); + } + else { + fn(); + } + } + + ctx.event = void 0; + ctx.initialEvent = void 0; + ctx.lastEvt = void 0; + } + }; + + el.__qtouchpan = ctx; + + configureEvents$3(el, ctx, modifiers); + }, + + update (el, { modifiers, value, oldValue }) { + const ctx = el.__qtouchpan; + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end(); + ctx.handler = value; + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents$3(el, ctx, modifiers); + + ctx.direction = getModifierDirections(modifiers); + } + } + }, + + unbind (el) { + if (el.__qtouchpan_destroyed === void 0) { + destroy$9(el); + } + else { + delete el.__qtouchpan_destroyed; + } + } + }; + + const markerPrefixClass = 'q-slider__marker-labels'; + const defaultMarkerConvertFn = v => ({ value: v }); + + // PGDOWN, LEFT, DOWN, PGUP, RIGHT, UP + const keyCodes$3 = [ 34, 37, 40, 33, 39, 38 ]; + + const SliderMixin = { + mixins: [ DarkMixin, FormMixin ], + + directives: { + TouchPan + }, + + props: { + min: { + type: Number, + default: 0 + }, + max: { + type: Number, + default: 100 + }, + innerMin: Number, + innerMax: Number, + + step: { + type: Number, + default: 1, + validator: v => v >= 0 + }, + + snap: Boolean, + + vertical: Boolean, + reverse: Boolean, + + hideSelection: Boolean, + + color: String, + markerLabelsClass: String, + + label: Boolean, + labelColor: String, + labelTextColor: String, + labelAlways: Boolean, + switchLabelSide: Boolean, + + markers: [ Boolean, Number ], + markerLabels: [ Boolean, Array, Object, Function ], + switchMarkerLabelsSide: Boolean, + + trackImg: String, + trackColor: String, + innerTrackImg: String, + innerTrackColor: String, + selectionColor: String, + selectionImg: String, + + thumbSize: { + type: String, + default: '20px' + }, + trackSize: { + type: String, + default: '4px' + }, + + disable: Boolean, + readonly: Boolean, + dense: Boolean, + + tabindex: [ String, Number ], + + thumbColor: String, + thumbPath: { + type: String, + default: 'M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0' + } + }, + + data () { + return { + active: false, + preventFocus: false, + focus: false, + dragging: void 0 + } + }, + + computed: { + axis () { + return this.vertical === true ? '--v' : '--h' + }, + + labelSide () { + return '-' + (this.switchLabelSide === true ? 'switched' : 'standard') + }, + + isReversed () { + return this.vertical === true + ? this.reverse === true + : this.reverse !== (this.$q.lang.rtl === true) + }, + + computedInnerMin () { + return this.__getInnerMin() + }, + + computedInnerMax () { + return this.__getInnerMax() + }, + + editable () { + return this.disable !== true && this.readonly !== true && + this.computedInnerMin <= this.computedInnerMax + }, + + computedDecimals () { + return (String(this.step).trim('0').split('.')[ 1 ] || '').length + }, + + computedStep () { + return this.step === 0 ? 1 : this.step + }, + + computedTabindex () { + return this.editable === true ? this.tabindex || 0 : -1 + }, + + trackLen () { + return this.max - this.min + }, + + innerBarLen () { + return this.computedInnerMax - this.computedInnerMin + }, + + innerMinRatio () { + return this.__convertModelToRatio(this.computedInnerMin) + }, + + innerMaxRatio () { + return this.__convertModelToRatio(this.computedInnerMax) + }, + + positionProp () { + return this.vertical === true + ? (this.isReversed === true ? 'bottom' : 'top') + : (this.isReversed === true ? 'right' : 'left') + }, + + sizeProp () { + return this.vertical === true ? 'height' : 'width' + }, + + thicknessProp () { + return this.vertical === true ? 'width' : 'height' + }, + + orientation () { + return this.vertical === true ? 'vertical' : 'horizontal' + }, + + attributes () { + const acc = { + role: 'slider', + 'aria-valuemin': this.computedInnerMin, + 'aria-valuemax': this.computedInnerMax, + 'aria-orientation': this.orientation, + 'data-step': this.step + }; + + if (this.disable === true) { + acc[ 'aria-disabled' ] = 'true'; + } + else if (this.readonly === true) { + acc[ 'aria-readonly' ] = 'true'; + } + + return acc + }, + + classes () { + return `q-slider q-slider${this.axis} q-slider--${this.active === true ? '' : 'in'}active inline no-wrap ` + + (this.vertical === true ? 'row' : 'column') + + (this.disable === true ? ' disabled' : ' q-slider--enabled' + (this.editable === true ? ' q-slider--editable' : '')) + + (this.focus === 'both' ? ' q-slider--focus' : '') + + (this.label || this.labelAlways === true ? ' q-slider--label' : '') + + (this.labelAlways === true ? ' q-slider--label-always' : '') + + ` q-slider--${this.darkSuffix}` + + (this.dense === true ? ' q-slider--dense q-slider--dense' + this.axis : '') + + ' q-key-group-navigation--ignore-key' + }, + + selectionBarClass () { + const color = this.selectionColor || this.color; + return 'q-slider__selection absolute' + + (color !== void 0 ? ` text-${color}` : '') + }, + + markerClass () { + return this.__getAxisClass('markers') + ' absolute overflow-hidden' + }, + trackContainerClass () { + return this.__getAxisClass('track-container') + }, + pinClass () { + return this.__getPositionClass('pin') + }, + labelClass () { + return this.__getPositionClass('label') + }, + textContainerClass () { + return this.__getPositionClass('text-container') + }, + markerLabelsContainerClass () { + return this.__getPositionClass('marker-labels-container') + + (this.markerLabelsClass !== void 0 ? ` ${this.markerLabelsClass}` : '') + }, + + trackClass () { + return 'q-slider__track relative-position no-outline' + + (this.trackColor !== void 0 ? ` bg-${this.trackColor}` : '') + }, + trackStyle () { + const acc = { [ this.thicknessProp ]: this.trackSize }; + if (this.trackImg !== void 0) { + acc.backgroundImage = `url(${this.trackImg}) !important`; + } + return acc + }, + + innerBarClass () { + return 'q-slider__inner absolute' + + (this.innerTrackColor !== void 0 ? ` bg-${this.innerTrackColor}` : '') + }, + + innerBarStyle () { + const acc = { + [ this.positionProp ]: `${100 * this.innerMinRatio}%`, + [ this.sizeProp ]: `${100 * (this.innerMaxRatio - this.innerMinRatio)}%` + }; + if (this.innerTrackImg !== void 0) { + acc.backgroundImage = `url(${this.innerTrackImg}) !important`; + } + return acc + }, + + markerStep () { + return isNumber(this.markers) === true ? this.markers : this.computedStep + }, + + markerTicks () { + const acc = []; + const step = this.markerStep; + + let value = this.min; + do { + acc.push(value); + value += step; + } while (value < this.max) + + acc.push(this.max); + return acc + }, + + markerLabelClass () { + const prefix = ` ${markerPrefixClass}${this.axis}-`; + return markerPrefixClass + + `${prefix}${this.switchMarkerLabelsSide === true ? 'switched' : 'standard'}` + + `${prefix}${this.isReversed === true ? 'rtl' : 'ltr'}` + }, + + markerLabelsList () { + if (this.markerLabels === false) { return null } + + return this.__getMarkerList(this.markerLabels).map((entry, index) => ({ + index, + value: entry.value, + label: entry.label || entry.value, + classes: this.markerLabelClass + + (entry.classes !== void 0 ? ' ' + entry.classes : ''), + style: { + ...this.__getMarkerLabelStyle(entry.value), + ...(entry.style || {}) + } + })) + }, + + markerScope () { + return { + markerList: this.markerLabelsList, + markerMap: this.markerLabelsMap, + classes: this.markerLabelClass, + getStyle: this.__getMarkerLabelStyle + } + }, + + markerStyle () { + if (this.innerBarLen !== 0) { + const size = 100 * this.markerStep / this.innerBarLen; + + return { + ...this.innerBarStyle, + backgroundSize: this.vertical === true + ? `2px ${size}%` + : `${size}% 2px` + } + } + + return null + }, + + markerLabelsMap () { + if (this.markerLabels === false) { return null } + + const acc = {}; + this.markerLabelsList.forEach(entry => { + acc[ entry.value ] = entry; + }); + return acc + }, + + panDirectives () { + return this.editable === true + ? [{ + name: 'touch-pan', + value: this.__onPan, + modifiers: { + [ this.orientation ]: true, + prevent: true, + stop: true, + mouse: true, + mouseAllDir: true + } + }] + : null + }, + + getKeyOffset () { + const bigStepKeyCodes = [ 33, 34 ]; + const computedStep = this.vertical === true && this.reverse === true + ? -this.computedStep + : this.computedStep; + const negativeKeyCodes = this.vertical === true + ? [ 33, 38, this.$q.lang.rtl === this.reverse ? 37 : 39 ] + : [ 34, 40, this.$q.lang.rtl === this.reverse ? 37 : 39 ]; + + return keyCode => ( + computedStep * + (bigStepKeyCodes.includes(keyCode) ? 10 : 1) * + (negativeKeyCodes.includes(keyCode) ? -1 : 1) + ) + } + }, + + methods: { + __getInnerMin () { + return isNaN(this.innerMin) === true || this.innerMin < this.min + ? this.min + : this.innerMin + }, + + __getInnerMax () { + return isNaN(this.innerMax) === true || this.innerMax > this.max + ? this.max + : this.innerMax + }, + + __getPositionClass (name) { + const cls = 'q-slider__' + name; + return `${cls} ${cls}${this.axis} ${cls}${this.axis}${this.labelSide}` + }, + + __getAxisClass (name) { + const cls = 'q-slider__' + name; + return `${cls} ${cls}${this.axis}` + }, + + __convertRatioToModel (ratio) { + let model = this.min + ratio * (this.max - this.min); + + if (this.step > 0) { + const modulo = (model - this.min) % this.step; + model += (Math.abs(modulo) >= this.step / 2 ? (modulo < 0 ? -1 : 1) * this.step : 0) - modulo; + } + + if (this.computedDecimals > 0) { + model = parseFloat(model.toFixed(this.computedDecimals)); + } + + return between(model, this.computedInnerMin, this.computedInnerMax) + }, + + __convertModelToRatio (model) { + return this.trackLen === 0 + ? 0 + : between((model - this.min) / this.trackLen, 0, 1) + }, + + __getDraggingRatio (evt, dragging) { + const + pos = position(evt), + val = this.vertical === true + ? between((pos.top - dragging.top) / dragging.height, 0, 1) + : between((pos.left - dragging.left) / dragging.width, 0, 1); + + return between( + this.isReversed === true ? 1.0 - val : val, + this.innerMinRatio, + this.innerMaxRatio + ) + }, + + __getMarkerList (def) { + if (def === false) { return null } + + if (def === true) { + return this.markerTicks.map(defaultMarkerConvertFn) + } + + if (typeof def === 'function') { + return this.markerTicks.map(value => { + const item = def(value); + return isObject(item) === true ? { ...item, value } : { value, label: item } + }) + } + + const filterFn = ({ value }) => value >= this.min && value <= this.max; + + if (Array.isArray(def) === true) { + return def + .map(item => (isObject(item) === true ? item : { value: item })) + .filter(filterFn) + } + + return Object.keys(def).map(key => { + const item = def[ key ]; + const value = Number(key); + return isObject(item) === true ? { ...item, value } : { value, label: item } + }).filter(filterFn) + }, + + __getMarkerLabelStyle (val) { + return { [ this.positionProp ]: `${100 * (val - this.min) / this.trackLen}%` } + }, + + __getMarkerLabelsContent (h) { + if (this.$scopedSlots[ 'marker-label-group' ] !== void 0) { + return this.$scopedSlots[ 'marker-label-group' ](this.markerScope) + } + + const fn = this.$scopedSlots[ 'marker-label' ]; + if (fn !== void 0) { + return this.markerLabelsList.map(marker => fn({ + marker, + ...this.markerScope + })) + } + + return this.markerLabelsList.map(marker => h('div', { + key: marker.value, + style: marker.style, + class: marker.classes + }, marker.label)) + }, + + __onPan (event) { + if (event.isFinal === true) { + if (this.dragging !== void 0) { + this.__updatePosition(event.evt); + // only if touch, because we also have mousedown/up: + event.touch === true && this.__updateValue(true); + this.dragging = void 0; + this.$emit('pan', 'end'); + } + this.active = false; + this.focus = false; + } + else if (event.isFirst === true) { + this.dragging = this.__getDragging(event.evt); + this.__updatePosition(event.evt); + this.__updateValue(); + this.active = true; + this.$emit('pan', 'start'); + } + else { + this.__updatePosition(event.evt); + this.__updateValue(); + } + }, + + __onBlur () { + this.focus = false; + }, + + __onActivate (evt) { + this.__updatePosition(evt, this.__getDragging(evt)); + this.__updateValue(); + + this.preventFocus = true; + this.active = true; + + document.addEventListener('mouseup', this.__onDeactivate, true); + }, + + __onDeactivate () { + this.preventFocus = false; + this.active = false; + + this.__updateValue(true); + this.__onBlur(); + + document.removeEventListener('mouseup', this.__onDeactivate, true); + }, + + __onMobileClick (evt) { + this.__updatePosition(evt, this.__getDragging(evt)); + this.__updateValue(true); + }, + + __onKeyup (evt) { + if (keyCodes$3.includes(evt.keyCode)) { + this.__updateValue(true); + } + }, + + __getTextContainerStyle (ratio) { + if (this.vertical === true) { return null } + + const p = this.$q.lang.rtl !== this.reverse ? 1 - ratio : ratio; + return { + transform: `translateX(calc(${2 * p - 1} * ${this.thumbSize} / 2 + ${50 - 100 * p}%))` + } + }, + + __getThumb (h, thumb) { + const thumbContent = [ + h('svg', { + class: 'q-slider__thumb-shape absolute-full', + attrs: { + viewBox: '0 0 20 20', + 'aria-hidden': 'true' + } + }, [ + h('path', { + attrs: { d: this.thumbPath } + }) + ]), + + h('div', { class: 'q-slider__focus-ring fit' }) + ]; + + if (this.label === true || this.labelAlways === true) { + thumbContent.push( + h('div', { + class: this.pinClass + ' absolute fit no-pointer-events' + thumb.pinColor + }, [ + h('div', { + class: this.labelClass, + style: { minWidth: this.thumbSize } + }, [ + h('div', { + class: this.textContainerClass, + style: thumb.textContainerStyle + }, [ + h('span', { class: thumb.textClass }, thumb.label) + ]) + ]) + ]) + ); + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(thumbContent, 'push'); + } + } + + return h('div', { + class: thumb.classes, + style: thumb.style, + ...thumb.nodeData + }, thumbContent) + }, + + __getContent (h, injectThumb) { + const trackContent = []; + + this.innerTrackColor !== 'transparent' && trackContent.push( + h('div', { + key: 'inner', + class: this.innerBarClass, + style: this.innerBarStyle + }) + ); + + this.selectionColor !== 'transparent' && trackContent.push( + h('div', { + key: 'selection', + class: this.selectionBarClass, + style: this.selectionBarStyle + }) + ); + + this.markers !== false && trackContent.push( + h('div', { + key: 'marker', + class: this.markerClass, + style: this.markerStyle + }) + ); + + injectThumb(trackContent); + + const content = [ + h( + 'div', + { + key: 'trackC', + class: this.trackContainerClass, + attrs: this.trackContainerAttrs, + on: this.trackContainerEvents, + directives: this.panDirectives + }, + [ + h('div', { + class: this.trackClass, + style: this.trackStyle + }, trackContent) + ] + ) + ]; + + if (this.markerLabels !== false) { + const action = this.switchMarkerLabelsSide === true + ? 'unshift' + : 'push'; + + content[ action ]( + h('div', { + key: 'markerL', + class: this.markerLabelsContainerClass + }, this.__getMarkerLabelsContent(h)) + ); + } + + return content + } + }, + + beforeDestroy () { + document.removeEventListener('mouseup', this.__onDeactivate, true); + } + }; + + var QSlider = Vue__default["default"].extend({ + name: 'QSlider', + + mixins: [ SliderMixin ], + + props: { + value: { + required: true, + default: null, + validator: v => typeof v === 'number' || v === null + }, + + labelValue: [ String, Number ] + }, + + data () { + return { + model: this.value === null ? this.__getInnerMin() : between(this.value, this.min, this.max), + curRatio: 0 + } + }, + + computed: { + modelRatio () { + return this.__convertModelToRatio(this.model) + }, + + ratio () { + return this.active === true ? this.curRatio : this.modelRatio + }, + + selectionBarStyle () { + const minRatio = this.innerMinRatio; + const acc = { + [ this.positionProp ]: `${100 * minRatio}%`, + [ this.sizeProp ]: `${100 * (between(this.ratio, minRatio, this.innerMaxRatio) - minRatio)}%` + }; + if (this.selectionImg !== void 0) { + acc.backgroundImage = `url(${this.selectionImg}) !important`; + } + return acc + }, + + thumbLabel () { + return this.labelValue !== void 0 + ? this.labelValue + : (this.value < this.min || this.value > this.max ? this.value : this.model) + }, + + thumbClasses () { + const color = this.thumbColor || this.color; + return `q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${this.isReversed === true ? 'rtl' : 'ltr'} absolute non-selectable` + + (this.value < this.min || this.value > this.max ? ' q-slider__thumb--wrong-value' : '') + + ( + this.preventFocus === false && this.focus === true + ? ' q-slider--focus' + : '' + ) + + (color !== void 0 ? ` text-${color}` : '') + }, + + thumbStyle () { + return { + width: this.thumbSize, + height: this.thumbSize, + [ this.positionProp ]: `${100 * this.ratio}%` + } + }, + + thumbPinColor () { + return this.labelColor !== void 0 + ? ` text-${this.labelColor}` + : '' + }, + + thumbTextContainerStyle () { + return this.__getTextContainerStyle(this.ratio) + }, + + thumbTextClass () { + return 'q-slider__text' + + (this.labelTextColor !== void 0 ? ` text-${this.labelTextColor}` : '') + }, + + trackContainerAttrs () { + return this.$q.platform.is.mobile !== true + ? { tabindex: this.computedTabindex } + : void 0 + }, + + trackContainerEvents () { + if (this.editable !== true) { + return {} + } + + return this.$q.platform.is.mobile === true + ? { click: this.__onMobileClick } + : { + mousedown: this.__onActivate, + focus: this.__onFocus, + blur: this.__onBlur, + keydown: this.__onKeydown, + keyup: this.__onKeyup + } + }, + + modelUpdate () { + return [ + this.value, + this.min, + this.max, + this.innerMin, + this.innerMax + ].join('#') + } + }, + + watch: { + modelUpdate () { + this.model = this.value === null + ? this.computedInnerMin + : between(this.value, this.min, this.max); + } + }, + + methods: { + __updateValue (change) { + if (this.model !== this.value) { + this.$emit('input', this.model); + } + change === true && this.$emit('change', this.model); + }, + + __getDragging () { + return this.$el.getBoundingClientRect() + }, + + __updatePosition (event, dragging = this.dragging) { + const ratio = this.__getDraggingRatio(event, dragging); + + this.model = this.__convertRatioToModel(ratio); + this.curRatio = this.snap !== true || this.computedStep === 0 + ? between(ratio, this.innerMinRatio, this.innerMaxRatio) + : this.__convertModelToRatio(this.model); + }, + + __onFocus () { + this.focus = true; + }, + + __onKeydown (evt) { + if (!keyCodes$3.includes(evt.keyCode)) { + return + } + + this.focus = true; + + stopAndPrevent(evt); + + this.model = between( + parseFloat((this.model + this.getKeyOffset(evt.keyCode)).toFixed(this.computedDecimals)), + this.computedInnerMin, + this.computedInnerMax + ); + + this.__updateValue(); + } + }, + + render (h) { + const content = this.__getContent(h, node => { + node.push( + this.__getThumb(h, { + pinColor: this.thumbPinColor, + textContainerStyle: this.thumbTextContainerStyle, + textClass: this.thumbTextClass, + label: this.thumbLabel, + classes: this.thumbClasses, + style: this.thumbStyle, + nodeData: {} + }) + ); + }); + + return h('div', { + class: this.classes + (this.value === null ? ' q-slider--no-value' : ''), + attrs: { + ...this.attributes, + 'aria-valuenow': this.value + } + }, content) + } + }); + + // using it to manage SSR rendering with best performance + + var CanRenderMixin = { + data () { + return { + canRender: !onSSR + } + }, + + mounted () { + this.canRender === false && (this.canRender = true); + } + }; + + var QResizeObserver = Vue__default["default"].extend({ + name: 'QResizeObserver', + + mixins: [ CanRenderMixin ], + + props: { + debounce: { + type: [ String, Number ], + default: 100 + } + }, + + data () { + return this.hasObserver === true + ? {} + : { url: this.$q.platform.is.ie === true ? null : 'about:blank' } + }, + + methods: { + trigger (immediately) { + if (immediately === true || this.debounce === 0 || this.debounce === '0') { + this.__emit(); + } + else if (this.timer === null) { + this.timer = setTimeout(this.__emit, this.debounce); + } + }, + + __emit () { + if (this.timer !== null) { + clearTimeout(this.timer); + this.timer = null; + } + + if (!this.$el || !this.$el.parentNode) { + return + } + + const + parent = this.$el.parentNode, + size = { + width: parent.offsetWidth, + height: parent.offsetHeight + }; + + if (size.width === this.size.width && size.height === this.size.height) { + return + } + + this.size = size; + this.$emit('resize', this.size); + }, + + __cleanup () { + if (this.curDocView !== void 0) { + // iOS is fuzzy, need to check it first + if (this.curDocView.removeEventListener !== void 0) { + this.curDocView.removeEventListener('resize', this.trigger, listenOpts.passive); + } + this.curDocView = void 0; + } + }, + + __onObjLoad () { + this.__cleanup(); + + if (this.$el.contentDocument) { + this.curDocView = this.$el.contentDocument.defaultView; + this.curDocView.addEventListener('resize', this.trigger, listenOpts.passive); + } + + this.__emit(); + } + }, + + render (h) { + if (this.canRender === false || this.hasObserver === true) { + return + } + + return h('object', { + key: 'load', + style: this.style, + attrs: { + tabindex: -1, // fix for Firefox + type: 'text/html', + data: this.url, + 'aria-hidden': 'true' + }, + on: cache(this, 'load', { + load: this.__onObjLoad + }) + }) + }, + + beforeCreate () { + this.size = { width: -1, height: -1 }; + if (isSSR === true) { return } + + this.hasObserver = typeof ResizeObserver !== 'undefined'; + + if (this.hasObserver !== true) { + this.style = `${this.$q.platform.is.ie ? 'visibility:hidden;' : ''}display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;`; + } + }, + + mounted () { + this.timer = null; + + if (this.hasObserver === true) { + this.observer = new ResizeObserver(this.trigger); + this.observer.observe(this.$el.parentNode); + this.__emit(); + return + } + + if (this.$q.platform.is.ie === true) { + this.url = 'about:blank'; + this.__emit(); + } + else { + this.__onObjLoad(); + } + }, + + beforeDestroy () { + clearTimeout(this.timer); + + if (this.hasObserver === true) { + if (this.observer !== void 0 && this.$el.parentNode) { + this.observer.unobserve(this.$el.parentNode); + } + return + } + + this.__cleanup(); + } + }); + + function injectProp (target, propName, get, set) { + Object.defineProperty(target, propName, { + get, + set, + enumerable: true + }); + return target + } + + function getIndicatorClass (color, top, vertical) { + const pos = vertical === true + ? ['left', 'right'] + : ['top', 'bottom']; + + return `absolute-${top === true ? pos[0] : pos[1]}${color ? ` text-${color}` : ''}` + } + + const alignValues$1 = [ 'left', 'center', 'right', 'justify' ]; + const getDefaultBestScore = () => ({ matchedLen: 0, queryDiff: 9999, hrefLen: 0, exact: false, redirected: true }); + + function hasQueryIncluded (targetQuery, matchingQuery) { + for (const key in targetQuery) { + if (targetQuery[ key ] !== matchingQuery[ key ]) { + return false + } + } + + return true + } + + var QTabs = Vue__default["default"].extend({ + name: 'QTabs', + + mixins: [ TimeoutMixin, ListenersMixin ], + + provide () { + return { $tabs: this } + }, + + props: { + value: [Number, String], + + align: { + type: String, + default: 'center', + validator: v => alignValues$1.includes(v) + }, + breakpoint: { + type: [String, Number], + default: 600 + }, + + vertical: Boolean, + shrink: Boolean, + stretch: Boolean, + + activeClass: String, + activeColor: String, + activeBgColor: String, + indicatorColor: String, + leftIcon: String, + rightIcon: String, + + outsideArrows: Boolean, + mobileArrows: Boolean, + + switchIndicator: Boolean, + + narrowIndicator: Boolean, + inlineLabel: Boolean, + noCaps: Boolean, + + dense: Boolean, + + contentClass: String + }, + + data () { + return { + scrollable: false, + leftArrow: true, + rightArrow: false, + justify: false, + + tabNameList: [], + + // used by children + currentModel: this.value, + hasFocus: false, + avoidRouteWatcher: false // false | string (uid) + } + }, + + watch: { + isRTL () { + this.__localUpdateArrows(); + }, + + value (name) { + this.__updateModel({ name, setCurrent: true, skipEmit: true }); + }, + + outsideArrows () { + this.__recalculateScroll(); + }, + + arrowsEnabled (v) { + this.__localUpdateArrows = v === true + ? this.__updateArrowsFn + : noop; + + this.__recalculateScroll(); + } + }, + + computed: { + // used by children + tabProps () { + return { + activeClass: this.activeClass, + activeColor: this.activeColor, + activeBgColor: this.activeBgColor, + indicatorClass: getIndicatorClass( + this.indicatorColor, + this.switchIndicator, + this.vertical + ), + narrowIndicator: this.narrowIndicator, + inlineLabel: this.inlineLabel, + noCaps: this.noCaps + } + }, + + // used by children + hasActiveTab () { + return this.tabNameList.some(entry => entry.name === this.currentModel) + }, + + arrowsEnabled () { + return this.$q.platform.is.desktop === true || this.mobileArrows === true + }, + + alignClass () { + const align = this.scrollable === true + ? 'left' + : (this.justify === true ? 'justify' : this.align); + + return `q-tabs__content--align-${align}` + }, + + classes () { + return 'q-tabs row no-wrap items-center' + + ` q-tabs--${this.scrollable === true ? '' : 'not-'}scrollable` + + ` q-tabs--${this.vertical === true ? 'vertical' : 'horizontal'}` + + ` q-tabs__arrows--${this.arrowsEnabled === true && this.outsideArrows === true ? 'outside' : 'inside'}` + + (this.dense === true ? ' q-tabs--dense' : '') + + (this.shrink === true ? ' col-shrink' : '') + + (this.stretch === true ? ' self-stretch' : '') + }, + + innerClass () { + return 'q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position ' + + this.alignClass + + (this.contentClass !== void 0 ? ` ${this.contentClass}` : '') + + (this.$q.platform.is.mobile === true ? ' scroll' : '') + }, + + domProps () { + return this.vertical === true + ? { container: 'height', content: 'offsetHeight', scroll: 'scrollHeight' } + : { container: 'width', content: 'offsetWidth', scroll: 'scrollWidth' } + }, + + isRTL () { + return this.vertical !== true && this.$q.lang.rtl === true + }, + + rtlPosCorrection () { + return rtlHasScrollBug() === false && this.isRTL === true + }, + + // let's speed up execution of time-sensitive scrollTowards() + // with a computed variable by directly applying the minimal + // number of instructions on get/set functions + posFn () { + return this.rtlPosCorrection === true + ? { get: content => Math.abs(content.scrollLeft), set: (content, pos) => { content.scrollLeft = -pos; } } + : ( + this.vertical === true + ? { get: content => content.scrollTop, set: (content, pos) => { content.scrollTop = pos; } } + : { get: content => content.scrollLeft, set: (content, pos) => { content.scrollLeft = pos; } } + ) + }, + + onEvents () { + return { + input: stop, + ...this.qListeners, + focusin: this.__onFocusin, + focusout: this.__onFocusout + } + } + }, + + methods: { + // used by children too + __updateModel ({ name, setCurrent, skipEmit }) { + if (this.currentModel !== name) { + if (skipEmit !== true && this.qListeners.input !== void 0) { + this.$emit('input', name); + } + + if (setCurrent === true || this.qListeners.input === void 0) { + this.__animate(this.currentModel, name); + this.currentModel = name; + } + } + }, + + __recalculateScroll () { + this.__registerScrollTick(() => { + this.__updateContainer({ + width: this.$el.offsetWidth, + height: this.$el.offsetHeight + }); + }); + }, + + __updateContainer (domSize) { + // it can be called faster than component being initialized + // so we need to protect against that case + // (one example of such case is the docs release notes page) + if (this.domProps === void 0 || !this.$refs.content) { return } + + const + size = domSize[ this.domProps.container ], + scrollSize = Math.min( + this.$refs.content[this.domProps.scroll], + Array.prototype.reduce.call( + this.$refs.content.children, + (acc, el) => acc + (el[ this.domProps.content ] || 0), + 0 + ) + ), + scroll = size > 0 && scrollSize > size; // when there is no tab, in Chrome, size === 0 and scrollSize === 1 + + if (this.scrollable !== scroll) { + this.scrollable = scroll; + } + + // Arrows need to be updated even if the scroll status was already true + scroll === true && this.__registerUpdateArrowsTick(this.__localUpdateArrows); + + const localJustify = size < parseInt(this.breakpoint, 10); + + if (this.justify !== localJustify) { + this.justify = localJustify; + } + }, + + __animate (oldName, newName) { + const + oldTab = oldName !== void 0 && oldName !== null && oldName !== '' + ? this.tabVmList.find(tab => tab.name === oldName) + : null, + newTab = newName !== void 0 && newName !== null && newName !== '' + ? this.tabVmList.find(tab => tab.name === newName) + : null; + + if (oldTab && newTab) { + const + oldEl = oldTab.$refs.tabIndicator, + newEl = newTab.$refs.tabIndicator; + + clearTimeout(this.animateTimer); + + oldEl.style.transition = 'none'; + oldEl.style.transform = 'none'; + newEl.style.transition = 'none'; + newEl.style.transform = 'none'; + + const + oldPos = oldEl.getBoundingClientRect(), + newPos = newEl.getBoundingClientRect(); + + newEl.style.transform = this.vertical === true + ? `translate3d(0,${oldPos.top - newPos.top}px,0) scale3d(1,${newPos.height ? oldPos.height / newPos.height : 1},1)` + : `translate3d(${oldPos.left - newPos.left}px,0,0) scale3d(${newPos.width ? oldPos.width / newPos.width : 1},1,1)`; + + // allow scope updates to kick in (QRouteTab needs more time) + this.__registerAnimateTick(() => { + this.animateTimer = setTimeout(() => { + newEl.style.transition = 'transform .25s cubic-bezier(.4, 0, .2, 1)'; + newEl.style.transform = 'none'; + }, 70); + }); + } + + if (newTab && this.scrollable === true) { + this.__scrollToTabEl(newTab.$el); + } + }, + + __scrollToTabEl (el) { + const + contentRef = this.$refs.content, + { left, width, top, height } = contentRef.getBoundingClientRect(), + newPos = el.getBoundingClientRect(); + + let offset = this.vertical === true ? newPos.top - top : newPos.left - left; + + if (offset < 0) { + contentRef[ this.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.floor(offset); + this.__localUpdateArrows(); + return + } + + offset += this.vertical === true ? newPos.height - height : newPos.width - width; + if (offset > 0) { + contentRef[ this.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.ceil(offset); + this.__localUpdateArrows(); + } + }, + + __updateArrowsFn () { + const content = this.$refs.content; + if (content !== null) { + const + rect = content.getBoundingClientRect(), + pos = this.vertical === true ? content.scrollTop : Math.abs(content.scrollLeft); + + if (this.isRTL === true) { + this.leftArrow = Math.ceil(pos + rect.width) < content.scrollWidth - 1; + this.rightArrow = pos > 0; + } + else { + this.leftArrow = pos > 0; + this.rightArrow = this.vertical === true + ? Math.ceil(pos + rect.height) < content.scrollHeight + : Math.ceil(pos + rect.width) < content.scrollWidth; + } + } + }, + + __animScrollTo (value) { + this.__stopAnimScroll(); + this.scrollTimer = setInterval(() => { + if (this.__scrollTowards(value) === true) { + this.__stopAnimScroll(); + } + }, 5); + }, + + __scrollToStart () { + this.__animScrollTo(this.rtlPosCorrection === true ? Number.MAX_SAFE_INTEGER : 0); + }, + + __scrollToEnd () { + this.__animScrollTo(this.rtlPosCorrection === true ? 0 : Number.MAX_SAFE_INTEGER); + }, + + __stopAnimScroll () { + clearInterval(this.scrollTimer); + }, + + // used by children + __onKbdNavigate (keyCode, fromEl) { + const tabs = Array.prototype.filter.call( + this.$refs.content.children, + el => el === fromEl || (el.matches && el.matches('.q-tab.q-focusable') === true) + ); + + const len = tabs.length; + if (len === 0) { return } + + if (keyCode === 36) { // Home + if (tabs[ 0 ].contains(document.activeElement) === true) { + return false + } + + this.__scrollToTabEl(tabs[ 0 ]); + tabs[ 0 ].focus(); + return true + } + if (keyCode === 35) { // End + if (tabs[ len - 1 ].contains(document.activeElement) === true) { + return false + } + + this.__scrollToTabEl(tabs[ len - 1 ]); + tabs[ len - 1 ].focus(); + return true + } + + const dirPrev = keyCode === (this.vertical === true ? 38 /* ArrowUp */ : 37 /* ArrowLeft */); + const dirNext = keyCode === (this.vertical === true ? 40 /* ArrowDown */ : 39 /* ArrowRight */); + + const dir = dirPrev === true ? -1 : (dirNext === true ? 1 : void 0); + + if (dir !== void 0) { + const rtlDir = this.isRTL === true ? -1 : 1; + const index = tabs.indexOf(fromEl) + dir * rtlDir; + + if ( + index < 0 || + index >= len || + tabs[ index ].contains(document.activeElement) === true + ) { + return false + } + + this.__scrollToTabEl(tabs[ index ]); + tabs[ index ].focus({ preventScroll: true }); + + return true + } + }, + + __scrollTowards (value) { + const + content = this.$refs.content, + { get, set } = this.posFn; + + let + done = false, + pos = get(content); + + const direction = value < pos ? -1 : 1; + + pos += direction * 5; + + if (pos < 0) { + done = true; + pos = 0; + } + else if ( + (direction === -1 && pos <= value) || + (direction === 1 && pos >= value) + ) { + done = true; + pos = value; + } + + set(content, pos); + this.__localUpdateArrows(); + + return done + }, + + // do not use directly; use __verifyRouteModel() instead + __updateActiveRoute () { + let name = null, bestScore = getDefaultBestScore(); + + const vmList = this.tabVmList.filter(tab => tab.hasRouterLink === true); + const vmLen = vmList.length; + + const { query: currentQuery } = this.$route; + const currentQueryLen = Object.keys(currentQuery).length; + + for (let tabIndex = 0; tabIndex < vmLen; tabIndex++) { + const tab = vmList[tabIndex]; + const exact = tab.exact === true; + + // if a) it doesn't respect the active/exact active status + // or b) we already found an exact match and this one isn't set as exact + // then we don't deal with it + if ( + tab[ exact === true ? 'linkIsExactActive' : 'linkIsActive' ] !== true || + (bestScore.exact === true && exact !== true) + ) { + continue + } + + const { route, href } = tab.resolvedLink; + const { matched, query, hash } = route; + const redirected = route.redirectedFrom !== void 0; + + if (exact === true) { + // hey, we found the perfect match; no more searching! + if (redirected === false) { + name = tab.name; + break + } + + if (bestScore.exact === false) { + // we reset values so we can discard previous non-exact matches + // and so we can register this exact one below + bestScore = getDefaultBestScore(); + } + } + + // if best is non-redirected and this one is redirected + // then this one is inferior so we don't care about it + if (bestScore.redirected === false && redirected === true) { + continue + } + + const queryLen = Object.keys(query).length; + + if ( + // if it's exact it already perfectly includes current query + // so no point in computing it + exact === false && + queryLen !== 0 && + hasQueryIncluded(query, currentQuery) === false + ) { + // it has query and it doesn't includes the current one + continue + } + + const newScore = { + exact, + redirected, + matchedLen: matched.length, + queryDiff: exact === true + ? 0 // avoid computing as it's 0 anyway + : currentQueryLen - queryLen, + hrefLen: href.length - hash.length + }; + + if (newScore.matchedLen > bestScore.matchedLen) { + // it matches more routes so it's more specific so we set it as current champion + name = tab.name; + bestScore = newScore; + continue + } + else if (newScore.matchedLen !== bestScore.matchedLen) { + // it matches less routes than the current champion so we discard it + continue + } + + if (newScore.queryDiff < bestScore.queryDiff) { + // query is closer to the current one so we set it as current champion + name = tab.name; + bestScore = newScore; + continue + } + else if (newScore.queryDiff !== bestScore.queryDiff) { + continue + } + + if (newScore.hrefLen > bestScore.hrefLen) { + // href is lengthier so it's more specific so we set it as current champion + name = tab.name; + bestScore = newScore; + } + } + + if ( + name === null && + this.tabVmList.some(tab => tab.hasRouterLink === void 0 && tab.name === this.currentModel) === true + ) { + // we shouldn't interfere if non-route tab is active + return + } + + this.__updateModel({ name, setCurrent: true }); + }, + + __onFocusin (e) { + this.__removeFocusTimeout(); + + if ( + this.hasFocus !== true && + this.$el && + e.target && + typeof e.target.closest === 'function' + ) { + const tab = e.target.closest('.q-tab'); + + // if the target is contained by a QTab/QRouteTab + // (it might be other elements focused, like additional QBtn) + if (tab && this.$el.contains(tab) === true) { + this.hasFocus = true; + + if (this.scrollable === true) { + this.__scrollToTabEl(tab); + } + } + } + + this.qListeners.focusin !== void 0 && this.$emit('focusin', e); + }, + + __onFocusout (e) { + this.__registerFocusTimeout(() => { this.hasFocus = false; }, 30); + this.qListeners.focusout !== void 0 && this.$emit('focusout', e); + }, + + // used by children + __verifyRouteModel () { + if (this.avoidRouteWatcher === false) { + this.__registerScrollToTabTimeout(this.__updateActiveRoute); + } + else { + this.__removeScrollToTabTimeout(); + } + }, + + __watchRoute () { + if (this.unwatchRoute === void 0) { + const unwatch = this.$watch(() => this.$route.fullPath, this.__verifyRouteModel); + this.unwatchRoute = () => { + unwatch(); + this.unwatchRoute = void 0; + }; + } + }, + + // used by children + __registerTab (tabVm) { + // we avoid setting tabVmList in data() as this would + // make the whole vm reactive + this.tabVmList.push(tabVm); + // ...so we extract only the needed stuff out of it + // into data() defined tabNameList + this.tabNameList.push( + injectProp({}, 'name', () => tabVm.name) + ); + + this.__recalculateScroll(); + + // if it's a QTab + if (tabVm.hasRouterLink === void 0 || this.$route === void 0) { + // we should position to the currently active tab (if any) + this.__registerScrollToTabTimeout(() => { + if (this.scrollable === true) { + const value = this.currentModel; + const newTab = value !== void 0 && value !== null && value !== '' + ? this.tabVmList.find(tab => tab.name === value) + : null; + + newTab && this.__scrollToTabEl(newTab.$el); + } + }); + } + // else if it's a QRouteTab with a valid link + else { + this.__watchRoute(); + + if (tabVm.hasRouterLink === true) { + this.__verifyRouteModel(); + } + } + }, + + // used by children + __unregisterTab (tabVm) { + const index = this.tabVmList.indexOf(tabVm); + + this.tabVmList.splice(index, 1); + this.tabNameList.splice(index, 1); + + this.__recalculateScroll(); + + // if we're watching route and this tab is a QRouteTab + if (this.unwatchRoute !== void 0 && tabVm.hasRouterLink !== void 0) { + // unwatch route if we don't have any QRouteTabs left + if (this.tabVmList.every(tab => tab.hasRouterLink === void 0) === true) { + this.unwatchRoute(); + } + + // then update model + this.__verifyRouteModel(); + } + }, + + __cleanup () { + clearTimeout(this.animateTimer); + this.__stopAnimScroll(); + this.unwatchRoute !== void 0 && this.unwatchRoute(); + } + }, + + created () { + this.__useTick('__registerScrollTick'); + this.__useTick('__registerUpdateArrowsTick'); + this.__useTick('__registerAnimateTick'); + + this.__useTimeout('__registerFocusTimeout', '__removeFocusTimeout'); + this.__useTimeout('__registerScrollToTabTimeout', '__removeScrollToTabTimeout'); + + Object.assign(this, { + tabVmList: [], + __localUpdateArrows: this.arrowsEnabled === true + ? this.__updateArrowsFn + : noop + }); + }, + + activated () { + this.hadRouteWatcher === true && this.__watchRoute(); + this.__recalculateScroll(); + }, + + deactivated () { + this.hadRouteWatcher = this.unwatchRoute !== void 0; + this.__cleanup(); + }, + + beforeDestroy () { + this.__cleanup(); + }, + + render (h) { + const child = [ + h(QResizeObserver, { + key: 'resize', + on: cache(this, 'resize', { resize: this.__updateContainer }) + }), + + h('div', { + key: 'scroll', + ref: 'content', + class: this.innerClass, + on: this.arrowsEnabled === true ? cache(this, 'scroll', { scroll: this.__updateArrowsFn }) : void 0 + }, slot(this, 'default')) + ]; + + this.arrowsEnabled === true && child.push( + h(QIcon, { + key: 'onS', + class: 'q-tabs__arrow q-tabs__arrow--start absolute q-tab__icon' + + (this.leftArrow === true ? '' : ' q-tabs__arrow--faded'), + props: { name: this.leftIcon || this.$q.iconSet.tabs[ this.vertical === true ? 'up' : 'left' ] }, + on: cache(this, 'onS', { + '&mousedown': this.__scrollToStart, + '&touchstart': this.__scrollToStart, + '&mouseup': this.__stopAnimScroll, + '&mouseleave': this.__stopAnimScroll, + '&touchend': this.__stopAnimScroll + }) + }), + + h(QIcon, { + key: 'onE', + class: 'q-tabs__arrow q-tabs__arrow--end absolute q-tab__icon' + + (this.rightArrow === true ? '' : ' q-tabs__arrow--faded'), + props: { name: this.rightIcon || this.$q.iconSet.tabs[ this.vertical === true ? 'down' : 'right' ] }, + on: cache(this, 'onE', { + '&mousedown': this.__scrollToEnd, + '&touchstart': this.__scrollToEnd, + '&mouseup': this.__stopAnimScroll, + '&mouseleave': this.__stopAnimScroll, + '&touchend': this.__stopAnimScroll + }) + }) + ); + + return h('div', { + class: this.classes, + on: this.onEvents, + attrs: { role: 'tablist' } + }, child) + } + }); + + let id$1 = 0; + + var QTab = Vue__default["default"].extend({ + name: 'QTab', + + mixins: [ RippleMixin, ListenersMixin ], + + inject: { + $tabs: { + default () { + console.error('QTab/QRouteTab components need to be child of QTabs'); + } + } + }, + + props: { + icon: String, + label: [Number, String], + + alert: [Boolean, String], + alertIcon: String, + + name: { + type: [Number, String], + default: () => `t_${id$1++}` + }, + + noCaps: Boolean, + + tabindex: [String, Number], + disable: Boolean, + + contentClass: String + }, + + computed: { + isActive () { + return this.$tabs.currentModel === this.name + }, + + classes () { + return 'q-tab relative-position self-stretch flex flex-center text-center' + + ( + this.isActive === true + ? ( + ' q-tab--active' + + (this.$tabs.tabProps.activeClass ? ' ' + this.$tabs.tabProps.activeClass : '') + + (this.$tabs.tabProps.activeColor ? ` text-${this.$tabs.tabProps.activeColor}` : '') + + (this.$tabs.tabProps.activeBgColor ? ` bg-${this.$tabs.tabProps.activeBgColor}` : '') + ) + : ' q-tab--inactive' + ) + + (this.icon && this.label && this.$tabs.tabProps.inlineLabel === false ? ' q-tab--full' : '') + + (this.noCaps === true || this.$tabs.tabProps.noCaps === true ? ' q-tab--no-caps' : '') + + (this.disable === true ? ' disabled' : ' q-focusable q-hoverable cursor-pointer') + + (this.hasRouterLinkProps !== void 0 ? this.linkClass : '') + }, + + innerClass () { + return 'q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable q-key-group-navigation--ignore-key ' + + (this.$tabs.tabProps.inlineLabel === true ? 'row no-wrap q-tab__content--inline' : 'column') + + (this.contentClass !== void 0 ? ` ${this.contentClass}` : '') + }, + + computedTabIndex () { + return ( + this.disable === true || + this.$tabs.hasFocus === true || + (this.isActive === false && this.$tabs.hasActiveTab === true) + ) + ? -1 + : this.tabindex || 0 + }, + + computedRipple () { + return this.ripple === false + ? false + : Object.assign( + { keyCodes: [13, 32], early: true }, + this.ripple === true ? {} : this.ripple + ) + }, + + onEvents () { + return { + input: stop, + ...this.qListeners, + click: this.__onClick, + keydown: this.__onKeydown + } + }, + + attrs () { + const attrs = { + ...this.linkAttrs, + tabindex: this.computedTabIndex, + role: 'tab', + 'aria-selected': this.isActive === true ? 'true' : 'false' + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + + return attrs + } + }, + + methods: { + __onClick (e, keyboard) { + if (keyboard !== true && this.$refs.blurTarget !== void 0) { + this.$refs.blurTarget.focus({ preventScroll: true }); + } + + if (this.disable === true) { + // we should hinder native navigation though + this.hasRouterLink === true && stopAndPrevent(e); + return + } + + // do we have a QTab? + if (this.hasRouterLinkProps === void 0) { + this.$tabs.__updateModel({ name: this.name }); + this.qListeners.click !== void 0 && this.$emit('click', e); + return + } + + if (this.hasRouterLink === true) { + const go = (first, second, third) => { + // for backwards compatibility + const { to, replace, append, returnRouterError } = e.navigate === false + ? { to: first, replace: second, append: third } + : (first || {}); + + // if requiring to go to another route, then we + // let the QTabs route watcher do its job, + // otherwise directly select this + let hardError; + const reqId = to === void 0 || (append === this.append && isDeepEqual(to, this.to) === true) + ? (this.$tabs.avoidRouteWatcher = uid$3()) + : null; + + return this.__navigateToRouterLink(e, { to, replace, append, returnRouterError: true }) + .catch(err => { hardError = err; }) + .then(result => { + if (reqId === this.$tabs.avoidRouteWatcher) { + this.$tabs.avoidRouteWatcher = false; + + // if we don't have any hard errors, except for + // when navigating to the same route (on all other errors, + // like when navigation was aborted in a nav guard, we don't activate this tab) + if ( + hardError === void 0 || + hardError.message.startsWith('Avoided redundant navigation') === true + ) { + this.$tabs.__updateModel({ name: this.name }); + } + } + + return hardError !== void 0 && returnRouterError === true + ? Promise.reject(hardError) + : result + }) + }; + + this.qListeners.click !== void 0 && this.$emit('click', e, go); + + // for backwards compatibility + e.navigate === false && e.preventDefault(); + + e.defaultPrevented !== true && go(); + + return + } + + this.qListeners.click !== void 0 && this.$emit('click', e); + }, + + __onKeydown (e) { + if (isKeyCode(e, [ 13, 32 ])) { + this.__onClick(e, true); + } + else if ( + shouldIgnoreKey(e) !== true && + e.keyCode >= 35 && + e.keyCode <= 40 && + e.altKey !== true && + e.metaKey !== true + ) { + this.$tabs.__onKbdNavigate(e.keyCode, this.$el) === true && stopAndPrevent(e); + } + + this.qListeners.keydown !== void 0 && this.$emit('keydown', e); + }, + + __getContent (h) { + const + narrow = this.$tabs.tabProps.narrowIndicator, + content = [], + indicator = h('div', { + ref: 'tabIndicator', + staticClass: 'q-tab__indicator', + class: this.$tabs.tabProps.indicatorClass + }); + + this.icon !== void 0 && content.push( + h(QIcon, { + staticClass: 'q-tab__icon', + props: { name: this.icon } + }) + ); + + this.label !== void 0 && content.push( + h('div', { + staticClass: 'q-tab__label' + }, [ this.label ]) + ); + + this.alert !== false && content.push( + this.alertIcon !== void 0 + ? h(QIcon, { + staticClass: 'q-tab__alert-icon', + props: { + color: this.alert !== true + ? this.alert + : void 0, + name: this.alertIcon + } + }) + : h('div', { + staticClass: 'q-tab__alert', + class: this.alert !== true + ? `text-${this.alert}` + : null + }) + ); + + narrow === true && content.push(indicator); + + const node = [ + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: 'blurTarget' }), + h('div', { class: this.innerClass }, mergeSlot(content, this, 'default')) + ]; + + narrow === false && node.push(indicator); + + return node + }, + + __renderTab (h, tag) { + const data = { + class: this.classes, + attrs: this.attrs, + on: this.onEvents, + directives: this.ripple === false || this.disable === true ? null : [ + { name: 'ripple', value: this.computedRipple } + ] + }; + + return h(tag, data, this.__getContent(h)) + } + }, + + mounted () { + this.$tabs.__registerTab(this); + }, + + beforeDestroy () { + this.$tabs.__unregisterTab(this); + }, + + render (h) { + return this.__renderTab(h, 'div') + } + }); + + var QTabPanels = Vue__default["default"].extend({ + name: 'QTabPanels', + + mixins: [ DarkMixin, PanelParentMixin ], + + computed: { + classes () { + return 'q-tab-panels q-panel-parent' + + ` q-tab-panels--${this.darkSuffix} q-${this.darkSuffix}` + } + }, + + methods: { + __renderPanels (h) { + return h('div', { + class: this.classes, + directives: this.panelDirectives, + on: { ...this.qListeners } + }, this.__getPanelContent(h)) + } + } + }); + + const attrs$4 = { role: 'tabpanel' }; + + var QTabPanel = Vue__default["default"].extend({ + name: 'QTabPanel', + + mixins: [ PanelChildMixin ], + + render (h) { + return h('div', { + staticClass: 'q-tab-panel', + attrs: attrs$4, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + const palette = [ + 'rgb(255,204,204)', 'rgb(255,230,204)', 'rgb(255,255,204)', 'rgb(204,255,204)', 'rgb(204,255,230)', 'rgb(204,255,255)', 'rgb(204,230,255)', 'rgb(204,204,255)', 'rgb(230,204,255)', 'rgb(255,204,255)', + 'rgb(255,153,153)', 'rgb(255,204,153)', 'rgb(255,255,153)', 'rgb(153,255,153)', 'rgb(153,255,204)', 'rgb(153,255,255)', 'rgb(153,204,255)', 'rgb(153,153,255)', 'rgb(204,153,255)', 'rgb(255,153,255)', + 'rgb(255,102,102)', 'rgb(255,179,102)', 'rgb(255,255,102)', 'rgb(102,255,102)', 'rgb(102,255,179)', 'rgb(102,255,255)', 'rgb(102,179,255)', 'rgb(102,102,255)', 'rgb(179,102,255)', 'rgb(255,102,255)', + 'rgb(255,51,51)', 'rgb(255,153,51)', 'rgb(255,255,51)', 'rgb(51,255,51)', 'rgb(51,255,153)', 'rgb(51,255,255)', 'rgb(51,153,255)', 'rgb(51,51,255)', 'rgb(153,51,255)', 'rgb(255,51,255)', + 'rgb(255,0,0)', 'rgb(255,128,0)', 'rgb(255,255,0)', 'rgb(0,255,0)', 'rgb(0,255,128)', 'rgb(0,255,255)', 'rgb(0,128,255)', 'rgb(0,0,255)', 'rgb(128,0,255)', 'rgb(255,0,255)', + 'rgb(245,0,0)', 'rgb(245,123,0)', 'rgb(245,245,0)', 'rgb(0,245,0)', 'rgb(0,245,123)', 'rgb(0,245,245)', 'rgb(0,123,245)', 'rgb(0,0,245)', 'rgb(123,0,245)', 'rgb(245,0,245)', + 'rgb(214,0,0)', 'rgb(214,108,0)', 'rgb(214,214,0)', 'rgb(0,214,0)', 'rgb(0,214,108)', 'rgb(0,214,214)', 'rgb(0,108,214)', 'rgb(0,0,214)', 'rgb(108,0,214)', 'rgb(214,0,214)', + 'rgb(163,0,0)', 'rgb(163,82,0)', 'rgb(163,163,0)', 'rgb(0,163,0)', 'rgb(0,163,82)', 'rgb(0,163,163)', 'rgb(0,82,163)', 'rgb(0,0,163)', 'rgb(82,0,163)', 'rgb(163,0,163)', + 'rgb(92,0,0)', 'rgb(92,46,0)', 'rgb(92,92,0)', 'rgb(0,92,0)', 'rgb(0,92,46)', 'rgb(0,92,92)', 'rgb(0,46,92)', 'rgb(0,0,92)', 'rgb(46,0,92)', 'rgb(92,0,92)', + 'rgb(255,255,255)', 'rgb(205,205,205)', 'rgb(178,178,178)', 'rgb(153,153,153)', 'rgb(127,127,127)', 'rgb(102,102,102)', 'rgb(76,76,76)', 'rgb(51,51,51)', 'rgb(25,25,25)', 'rgb(0,0,0)' + ]; + + const thumbPath = 'M5 5 h10 v10 h-10 v-10 z'; + const alphaTrackImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg=='; + + var QColor = Vue__default["default"].extend({ + name: 'QColor', + + mixins: [ ListenersMixin, DarkMixin, FormMixin ], + + directives: { + TouchPan + }, + + props: { + value: String, + + defaultValue: String, + defaultView: { + type: String, + default: 'spectrum', + validator: v => ['spectrum', 'tune', 'palette'].includes(v) + }, + + formatModel: { + type: String, + default: 'auto', + validator: v => ['auto', 'hex', 'rgb', 'hexa', 'rgba'].includes(v) + }, + + palette: Array, + + noHeader: Boolean, + noHeaderTabs: Boolean, + noFooter: Boolean, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + disable: Boolean, + readonly: Boolean + }, + + data () { + return { + topView: this.formatModel === 'auto' + ? ( + (this.value === void 0 || this.value === null || this.value === '' || this.value.startsWith('#')) + ? 'hex' + : 'rgb' + ) + : (this.formatModel.startsWith('hex') ? 'hex' : 'rgb'), + view: this.defaultView, + model: this.__parseModel(this.value || this.defaultValue) + } + }, + + watch: { + value (v) { + const model = this.__parseModel(v || this.defaultValue); + if (model.hex !== this.model.hex) { + this.model = model; + } + }, + + defaultValue (v) { + if (!this.value && v) { + const model = this.__parseModel(v); + if (model.hex !== this.model.hex) { + this.model = model; + } + } + } + }, + + computed: { + editable () { + return this.disable !== true && this.readonly !== true + }, + + forceHex () { + return this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('hex') > -1 + }, + + forceAlpha () { + return this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('a') > -1 + }, + + isHex () { + return this.value === void 0 || + this.value === null || + this.value === '' || + this.value.startsWith('#') + }, + + isOutputHex () { + return this.forceHex !== null + ? this.forceHex + : this.isHex + }, + + formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.model[ this.isOutputHex === true ? 'hex' : 'rgb' ] + } + }, + + hasAlpha () { + if (this.forceAlpha !== null) { + return this.forceAlpha + } + return this.model.a !== void 0 + }, + + currentBgColor () { + return { + backgroundColor: this.model.rgb || '#000' + } + }, + + headerClass () { + const light = this.model.a !== void 0 && this.model.a < 65 + ? true + : luminosity(this.model) > 0.4; + + return `q-color-picker__header-content--${light ? 'light' : 'dark'}` + }, + + spectrumStyle () { + return { + background: `hsl(${this.model.h},100%,50%)` + } + }, + + spectrumPointerStyle () { + return { + top: `${100 - this.model.v}%`, + [this.$q.lang.rtl === true ? 'right' : 'left']: `${this.model.s}%` + } + }, + + computedPalette () { + return this.palette !== void 0 && this.palette.length > 0 + ? this.palette + : palette + }, + + classes () { + return 'q-color-picker' + + (this.bordered === true ? ' q-color-picker--bordered' : '') + + (this.square === true ? ' q-color-picker--square no-border-radius' : '') + + (this.flat === true ? ' q-color-picker--flat no-shadow' : '') + + (this.disable === true ? ' disabled' : '') + + ` q-color-picker--${this.darkSuffix} q-${this.darkSuffix}` + }, + + attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + } + }, + + created () { + this.__spectrumChange = throttle(this.__spectrumChange, 20); + }, + + render (h) { + const child = [ this.__getContent(h) ]; + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(child, 'push'); + } + + this.noHeader !== true && child.unshift( + this.__getHeader(h) + ); + + this.noFooter !== true && child.push( + this.__getFooter(h) + ); + + return h('div', { + class: this.classes, + attrs: this.attrs, + on: { ...this.qListeners } + }, child) + }, + + methods: { + __getHeader (h) { + const child = []; + + this.noHeaderTabs !== true && child.push( + h(QTabs, { + key: 'topVTab', + class: 'q-color-picker__header-tabs', + props: { + value: this.topView, + dense: true, + align: 'justify' + }, + on: cache(this, 'topVTab', { + input: val => { this.topView = val; } + }) + }, [ + h(QTab, { + props: { + label: 'HEX' + (this.hasAlpha === true ? 'A' : ''), + name: 'hex', + ripple: false + } + }), + + h(QTab, { + props: { + label: 'RGB' + (this.hasAlpha === true ? 'A' : ''), + name: 'rgb', + ripple: false + } + }) + ]) + ); + + child.push( + h('div', { + staticClass: 'q-color-picker__header-banner row flex-center no-wrap' + }, [ + h('input', { + key: 'topIn', + staticClass: 'fit', + domProps: { value: this.model[this.topView] }, + attrs: this.editable !== true ? { + readonly: true + } : null, + on: cache(this, 'topIn', { + input: evt => { + this.__updateErrorIcon(this.__onEditorChange(evt) === true); + }, + change: stop, + blur: evt => { + this.__onEditorChange(evt, true) === true && this.$forceUpdate(); + this.__updateErrorIcon(false); + } + }) + }), + + h(QIcon, { + ref: 'errorIcon', + staticClass: 'q-color-picker__error-icon absolute no-pointer-events', + props: { name: this.$q.iconSet.type.negative } + }) + ]) + ); + + return h('div', { + staticClass: 'q-color-picker__header relative-position overflow-hidden' + }, [ + h('div', { staticClass: 'q-color-picker__header-bg absolute-full' }), + + h('div', { + staticClass: 'q-color-picker__header-content', + class: this.headerClass, + style: this.currentBgColor + }, child) + ]) + }, + + __getContent (h) { + return h(QTabPanels, { + props: { + value: this.view, + animated: true + } + }, [ + h(QTabPanel, { + staticClass: 'q-color-picker__spectrum-tab overflow-hidden', + props: { name: 'spectrum' } + }, this.__getSpectrumTab(h)), + + h(QTabPanel, { + staticClass: 'q-pa-md q-color-picker__tune-tab', + props: { name: 'tune' } + }, this.__getTuneTab(h)), + + h(QTabPanel, { + staticClass: 'q-color-picker__palette-tab', + props: { name: 'palette' } + }, this.__getPaletteTab(h)) + ]) + }, + + __getFooter (h) { + return h('div', { + staticClass: 'q-color-picker__footer relative-position overflow-hidden' + }, [ + h(QTabs, { + key: 'ftIn', + staticClass: 'absolute-full', + props: { + value: this.view, + dense: true, + align: 'justify' + }, + on: cache(this, 'ftIn', { + input: val => { this.view = val; } + }) + }, [ + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.spectrum, + name: 'spectrum', + ripple: false + } + }), + + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.tune, + name: 'tune', + ripple: false + } + }), + + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.palette, + name: 'palette', + ripple: false + } + }) + ]) + ]) + }, + + __getSpectrumTab (h) { + return [ + h('div', { + key: 'spectrT', + ref: 'spectrum', + staticClass: 'q-color-picker__spectrum non-selectable relative-position cursor-pointer', + style: this.spectrumStyle, + class: { readonly: this.editable !== true }, + on: this.editable === true + ? cache(this, 'spectrT', { + click: this.__spectrumClick, + mousedown: this.__activate + }) + : null, + directives: this.editable === true + ? cache(this, 'spectrDir', [{ + name: 'touch-pan', + modifiers: { + prevent: true, + stop: true, + mouse: true + }, + value: this.__spectrumPan + }]) + : null + }, [ + h('div', { style: { paddingBottom: '100%' } }), + h('div', { staticClass: 'q-color-picker__spectrum-white absolute-full' }), + h('div', { staticClass: 'q-color-picker__spectrum-black absolute-full' }), + h('div', { + staticClass: 'absolute', + style: this.spectrumPointerStyle + }, [ + this.model.hex !== void 0 ? h('div', { staticClass: 'q-color-picker__spectrum-circle' }) : null + ]) + ]), + + h('div', { + staticClass: 'q-color-picker__sliders' + }, [ + h(QSlider, { + key: 'hueSlide', + staticClass: 'q-color-picker__hue non-selectable', + props: { + value: this.model.h, + min: 0, + max: 360, + trackSize: '8px', + innerTrackColor: 'transparent', + selectionColor: 'transparent', + readonly: this.editable !== true, + thumbPath + }, + on: cache(this, 'hueSlide', { + input: this.__onHueChange, + change: val => this.__onHueChange(val, true) + }) + }), + + this.hasAlpha === true + ? h(QSlider, { + key: 'alphaSlide', + staticClass: 'q-color-picker__alpha non-selectable', + props: { + value: this.model.a, + min: 0, + max: 100, + trackSize: '8px', + trackColor: 'white', + innerTrackColor: 'transparent', + selectionColor: 'transparent', + trackImg: alphaTrackImg, + readonly: this.editable !== true, + hideSelection: true, + thumbPath + }, + on: cache(this, 'alphaSlide', { + input: value => this.__onNumericChange(value, 'a', 100), + change: value => this.__onNumericChange(value, 'a', 100, void 0, true) + }) + }) + : null + ]) + ] + }, + + __getTuneTab (h) { + const attrs = { + inputmode: 'numeric', + maxlength: 3, + readonly: this.editable !== true + }; + + return [ + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['R']), + h(QSlider, { + key: 'rSlide', + props: { + value: this.model.r, + min: 0, + max: 255, + color: 'red', + dark: this.dark, + readonly: this.editable !== true + }, + on: cache(this, 'rSlide', { + input: value => this.__onNumericChange(value, 'r', 255), + change: value => this.__onNumericChange(value, 'r', 255, void 0, true) + }) + }), + h('input', { + key: 'rIn', + domProps: { value: this.model.r }, + attrs, + on: cache(this, 'rIn', { + input: evt => this.__onNumericChange(evt.target.value, 'r', 255, evt), + change: stop, + blur: evt => this.__onNumericChange(evt.target.value, 'r', 255, evt, true) + }) + }) + ]), + + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['G']), + h(QSlider, { + key: 'gSlide', + props: { + value: this.model.g, + min: 0, + max: 255, + color: 'green', + dark: this.dark, + readonly: this.editable !== true + }, + on: cache(this, 'gSlide', { + input: value => this.__onNumericChange(value, 'g', 255), + change: value => this.__onNumericChange(value, 'g', 255, void 0, true) + }) + }), + h('input', { + key: 'gIn', + domProps: { value: this.model.g }, + attrs, + on: cache(this, 'gIn', { + input: evt => this.__onNumericChange(evt.target.value, 'g', 255, evt), + change: stop, + blur: evt => this.__onNumericChange(evt.target.value, 'g', 255, evt, true) + }) + }) + ]), + + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['B']), + h(QSlider, { + key: 'bSlide', + props: { + value: this.model.b, + min: 0, + max: 255, + color: 'blue', + readonly: this.editable !== true, + dark: this.dark + }, + on: cache(this, 'bSlide', { + input: value => this.__onNumericChange(value, 'b', 255), + change: value => this.__onNumericChange(value, 'b', 255, void 0, true) + }) + }), + h('input', { + key: 'bIn', + domProps: { value: this.model.b }, + attrs, + on: cache(this, 'bIn', { + input: evt => this.__onNumericChange(evt.target.value, 'b', 255, evt), + change: stop, + blur: evt => this.__onNumericChange(evt.target.value, 'b', 255, evt, true) + }) + }) + ]), + + this.hasAlpha === true ? h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['A']), + h(QSlider, { + key: 'aSlide', + props: { + value: this.model.a, + color: 'grey', + readonly: this.editable !== true, + dark: this.dark + }, + on: cache(this, 'aSlide', { + input: value => this.__onNumericChange(value, 'a', 100), + change: value => this.__onNumericChange(value, 'a', 100, void 0, true) + }) + }), + h('input', { + key: 'aIn', + domProps: { value: this.model.a }, + attrs, + on: cache(this, 'aIn', { + input: evt => this.__onNumericChange(evt.target.value, 'a', 100, evt), + change: stop, + blur: evt => this.__onNumericChange(evt.target.value, 'a', 100, evt, true) + }) + }) + ]) : null + ] + }, + + __getPaletteTab (h) { + return [ + h('div', { + staticClass: 'row items-center q-color-picker__palette-rows', + class: this.editable === true + ? 'q-color-picker__palette-rows--editable' + : '' + }, this.computedPalette.map(color => h('div', { + key: 'palette#' + color, + staticClass: 'q-color-picker__cube col-auto', + style: { backgroundColor: color }, + on: this.editable === true ? cache(this, 'palette#' + color, { + click: () => { + this.__onPalettePick(color); + } + }) : null + }))) + ] + }, + + __onSpectrumChange (left, top, change) { + const panel = this.$refs.spectrum; + if (panel === void 0) { return } + + const + width = panel.clientWidth, + height = panel.clientHeight, + rect = panel.getBoundingClientRect(); + + let x = Math.min(width, Math.max(0, left - rect.left)); + + if (this.$q.lang.rtl === true) { + x = width - x; + } + + const + y = Math.min(height, Math.max(0, top - rect.top)), + s = Math.round(100 * x / width), + v = Math.round(100 * Math.max(0, Math.min(1, -(y / height) + 1))), + rgb = hsvToRgb({ + h: this.model.h, + s, + v, + a: this.hasAlpha === true ? this.model.a : void 0 + }); + + this.model.s = s; + this.model.v = v; + this.__update(rgb, change); + }, + + __onHueChange (h, change) { + h = Math.round(h); + const rgb = hsvToRgb({ + h, + s: this.model.s, + v: this.model.v, + a: this.hasAlpha === true ? this.model.a : void 0 + }); + + this.model.h = h; + this.__update(rgb, change); + }, + + __onNumericChange (value, formatModel, max, evt, change) { + evt !== void 0 && stop(evt); + + if (!/^[0-9]+$/.test(value)) { + change === true && this.$forceUpdate(); + return + } + + const val = Math.floor(Number(value)); + + if (val < 0 || val > max) { + change === true && this.$forceUpdate(); + return + } + + const rgb = { + r: formatModel === 'r' ? val : this.model.r, + g: formatModel === 'g' ? val : this.model.g, + b: formatModel === 'b' ? val : this.model.b, + a: this.hasAlpha === true + ? (formatModel === 'a' ? val : this.model.a) + : void 0 + }; + + if (formatModel !== 'a') { + const hsv = rgbToHsv(rgb); + this.model.h = hsv.h; + this.model.s = hsv.s; + this.model.v = hsv.v; + } + + this.__update(rgb, change); + + if (evt !== void 0 && change !== true && evt.target.selectionEnd !== void 0) { + const index = evt.target.selectionEnd; + this.$nextTick(() => { + evt.target.setSelectionRange(index, index); + }); + } + }, + + __onEditorChange (evt, change) { + let rgb; + const inp = evt.target.value; + + stop(evt); + + if (this.topView === 'hex') { + if ( + inp.length !== (this.hasAlpha === true ? 9 : 7) || + !/^#[0-9A-Fa-f]+$/.test(inp) + ) { + return true + } + + rgb = hexToRgb(inp); + } + else { + let model; + + if (!inp.endsWith(')')) { + return true + } + else if (this.hasAlpha !== true && inp.startsWith('rgb(')) { + model = inp.substring(4, inp.length - 1).split(',').map(n => parseInt(n, 10)); + + if ( + model.length !== 3 || + !/^rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)$/.test(inp) + ) { + return true + } + } + else if (this.hasAlpha === true && inp.startsWith('rgba(')) { + model = inp.substring(5, inp.length - 1).split(','); + + if ( + model.length !== 4 || + !/^rgba\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/.test(inp) + ) { + return true + } + + for (let i = 0; i < 3; i++) { + const v = parseInt(model[i], 10); + if (v < 0 || v > 255) { + return true + } + model[i] = v; + } + + const v = parseFloat(model[3]); + if (v < 0 || v > 1) { + return true + } + model[3] = v; + } + else { + return true + } + + if ( + model[0] < 0 || model[0] > 255 || + model[1] < 0 || model[1] > 255 || + model[2] < 0 || model[2] > 255 || + (this.hasAlpha === true && (model[3] < 0 || model[3] > 1)) + ) { + return true + } + + rgb = { + r: model[0], + g: model[1], + b: model[2], + a: this.hasAlpha === true + ? model[3] * 100 + : void 0 + }; + } + + const hsv = rgbToHsv(rgb); + this.model.h = hsv.h; + this.model.s = hsv.s; + this.model.v = hsv.v; + + this.__update(rgb, change); + + if (change !== true) { + const index = evt.target.selectionEnd; + this.$nextTick(() => { + evt.target.setSelectionRange(index, index); + }); + } + }, + + __onPalettePick (color) { + const def = this.__parseModel(color); + const rgb = { r: def.r, g: def.g, b: def.b, a: def.a }; + + if (rgb.a === void 0) { + rgb.a = this.model.a; + } + + this.model.h = def.h; + this.model.s = def.s; + this.model.v = def.v; + + this.__update(rgb, true); + }, + + __update (rgb, change) { + // update internally + this.model.hex = rgbToHex(rgb); + this.model.rgb = rgbToString(rgb); + this.model.r = rgb.r; + this.model.g = rgb.g; + this.model.b = rgb.b; + this.model.a = rgb.a; + + const value = this.model[this.isOutputHex === true ? 'hex' : 'rgb']; + + // emit new value + this.$emit('input', value); + change === true && this.$emit('change', value); + }, + + __updateErrorIcon (val) { + // we MUST avoid vue triggering a render, + // so manually changing this + if (this.$refs.errorIcon !== void 0) { + this.$refs.errorIcon.$el.style.opacity = val ? 1 : 0; + } + }, + + __parseModel (v) { + const forceAlpha = this.forceAlpha !== void 0 + ? this.forceAlpha + : ( + this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('a') > -1 + ); + + if (typeof v !== 'string' || v.length === 0 || testPattern.anyColor(v.replace(/ /g, '')) !== true) { + return { + h: 0, + s: 0, + v: 0, + r: 0, + g: 0, + b: 0, + a: forceAlpha === true ? 100 : void 0, + hex: void 0, + rgb: void 0 + } + } + + const model = textToRgb(v); + + if (forceAlpha === true && model.a === void 0) { + model.a = 100; + } + + model.hex = rgbToHex(model); + model.rgb = rgbToString(model); + + return Object.assign(model, rgbToHsv(model)) + }, + + __spectrumPan (evt) { + if (evt.isFinal) { + this.__onSpectrumChange( + evt.position.left, + evt.position.top, + true + ); + } + else { + this.__spectrumChange(evt); + } + }, + + // throttled in created() + __spectrumChange (evt) { + this.__onSpectrumChange( + evt.position.left, + evt.position.top + ); + }, + + __spectrumClick (evt) { + this.__onSpectrumChange( + evt.pageX - window.pageXOffset, + evt.pageY - window.pageYOffset, + true + ); + }, + + __activate (evt) { + this.__onSpectrumChange( + evt.pageX - window.pageXOffset, + evt.pageY - window.pageYOffset + ); + } + } + }); + + const keyCodes$2 = { + horizontal: { + first: [ 36 ], // HOME + prev: [ 37 ], // ARROW_LEFT + next: [ 39 ], // ARROW_RIGHT + last: [ 35 ] // END + }, + vertical: { + first: [ 33 ], // PG_UP + prev: [ 38 ], // ARROW_UP + next: [ 40 ], // ARROW_DOWN + last: [ 34 ] // PG_DOWN + } + }; + + keyCodes$2.all = Object.keys(keyCodes$2.horizontal).reduce((acc, key) => ({ + ...acc, + [key]: keyCodes$2.horizontal[key].concat(keyCodes$2.vertical[key]) + }), {}); + + keyCodes$2.horizontal.list = Object.keys(keyCodes$2.horizontal).reduce((acc, k) => acc.concat(keyCodes$2.horizontal[k]), [9]); + keyCodes$2.horizontal.listH = keyCodes$2.horizontal.list; + keyCodes$2.vertical.list = Object.keys(keyCodes$2.vertical).reduce((acc, k) => acc.concat(keyCodes$2.vertical[k]), [9]); + keyCodes$2.vertical.listH = []; + keyCodes$2.all.list = Object.keys(keyCodes$2.all).reduce((acc, k) => acc.concat(keyCodes$2.all[k]), [9]); + keyCodes$2.all.listH = keyCodes$2.horizontal.list; + + function matchNavigationKeyIgnoreEl (el) { + return el.classList.contains('q-key-group-navigation--ignore-key') === true + } + + function createFocusTargets (ctx) { + const target = document.createElement('span'); + target.setAttribute('tabindex', -1); + target.classList.add('no-outline'); + target.classList.add('absolute'); + target.classList.add('no-pointer-events'); + + ctx.firstTarget = target; + ctx.lastTarget = target.cloneNode(); + } + + function addFocusTargets (ctx, el) { + el.appendChild(ctx.lastTarget); + + if (el.childElementCount > 0) { + el.insertBefore(ctx.firstTarget, el.childNodes[0]); + } + else { + el.appendChild(ctx.firstTarget); + } + } + + function removeFocusTargets (ctx) { + ctx.firstTarget !== void 0 && ctx.firstTarget.remove(); + ctx.lastTarget !== void 0 && ctx.lastTarget.remove(); + } + + function parseArg$2 (arg) { + const data = [ 1, 1, 'q-key-group-navigation--active' ]; + + if (typeof arg === 'string' && arg.length > 0) { + const splits = arg.split(':'); + + for (let i = 0; i < 2; i++) { + const v = parseInt(splits[i], 10); + v && (data[i] = v); + } + } + + return { + offsetY: data[0], + offsetX: data[1], + activeClass: data[2] + } + } + + function configureEvents$2 (el, ctx, modifiers, value) { + if (modifiers.vertical === true) { + ctx.keyCodes = keyCodes$2.vertical; + } + else { + ctx.keyCodes = modifiers.horizontal === true + ? keyCodes$2.horizontal + : keyCodes$2.all; + } + + const enabled = [false, 0, '0'].indexOf(value) === -1; + + if (ctx.enabled !== enabled) { + ctx.enabled === true && cleanEvt(ctx, 'main'); + + enabled === true && addEvt(ctx, 'main', [ + [ el, 'keydown', 'keyDown', 'capture' ], + [ el, 'focusin', 'focusIn', 'passiveCapture' ], + [ el, 'focusout', 'focusOut', 'passiveCapture' ], + [ el, 'mousedown', 'setRestoreEl', 'passiveCapture' ], + [ el, 'touchstart', 'setRestoreEl', 'passiveCapture' ] + ]); + + ctx.enabled = enabled; + } + } + + var KeyGroupNavigation = { + name: 'key-group-navigation', + + bind (el, { modifiers, arg, value }) { + const ctx = { + keyCodes: keyCodes$2.all, + arg, + modifiers: {}, + + ...parseArg$2(arg), + + focusRestoreEl: null, + + keyDown (evt) { + const { keyCode, shiftKey, target } = evt; + + if ( + ctx.keyCodes.list.indexOf(keyCode) === -1 || + target.matches(KEY_SKIP_SELECTOR) === true + ) { + return + } + + stop(evt); + + if (keyCode === 9) { // TAB + addFocusTargets(ctx, el); + + if (shiftKey === true) { + if (ctx.firstTarget !== void 0) { + ctx.firstTarget.focus(); + } + else { + prevent(evt); + } + } + else { + if (ctx.lastTarget !== void 0) { + ctx.lastTarget.focus(); + } + else { + prevent(evt); + } + } + + // required for IE11 + requestAnimationFrame(() => { + removeFocusTargets(ctx); + }); + + return + } + + const initialEl = document.activeElement; + const keyNavGroup = initialEl + ? initialEl.closest('.q-key-group-navigation') + : null; + const ignoredFocusableElements = keyNavGroup !== null && keyNavGroup !== el + ? Array.prototype.filter.call( + keyNavGroup.querySelectorAll(FOCUSABLE_SELECTOR), + elm => elm !== initialEl + ) + : []; + const focusableElements = Array.prototype.filter.call( + el.querySelectorAll(FOCUSABLE_SELECTOR), + elm => ignoredFocusableElements.includes(elm) !== true + ); + const lastElementIndex = focusableElements.length - 1; + + if (lastElementIndex < 0) { + return + } + + if (ctx.keyCodes.first.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, 0, 1); + } + else if (ctx.keyCodes.last.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, lastElementIndex, -1); + } + else { + const currentIndex = initialEl === null + ? -1 + : focusableElements.indexOf(initialEl.closest(FOCUSABLE_SELECTOR)); + + const offset = ctx.keyCodes.listH.indexOf(keyCode) === -1 + ? ctx.offsetY + : ctx.offsetX; + + if (ctx.keyCodes.prev.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, Math.max(-1, currentIndex - offset), -1, offset !== 1); + } + if (ctx.keyCodes.next.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, currentIndex + offset, 1, offset !== 1); + } + } + + if (document.activeElement) { + ctx.focusRestoreEl = document.activeElement; + } + + prevent(evt); + }, + + setRestoreEl (evt) { + if (evt.target) { + ctx.focusRestoreEl = evt.target; + } + }, + + setActive () { + ctx.active = true; + el.classList.add(ctx.activeClass); + }, + + setInactive () { + ctx.active = false; + el.classList.remove(ctx.activeClass); + }, + + focusIn (evt) { + if (Interaction.isKeyboard !== true) { + ctx.active === true && ctx.setInactive(); + + return + } + + const path = getEventPath(evt); // required for IE11 + const ignored = path.slice(0, path.indexOf(el)).find(matchNavigationKeyIgnoreEl) !== void 0; + + if (ctx.active !== true) { + ignored !== true && ctx.setActive(); + } + else if (ignored === true) { + ctx.setInactive(); + } + + if ( + evt.target === ctx.firstTarget || + evt.target === ctx.lastTarget || + ( + evt.relatedTarget !== null && + ( + ( + evt.relatedTarget.classList !== void 0 && // required for IE11 + evt.relatedTarget.classList.contains('q-key-group-navigation--ignore-focus') === true + ) || + ( + evt.relatedTarget._qKeyNavIgnore === true && + el.contains(evt.relatedTarget) === true + ) + ) + ) + ) { + return + } + + const refocusEl = el.querySelector('.q-key-group-navigation__refocus'); + const focusRestoreEl = refocusEl !== null && refocusEl.closest('.q-key-group-navigation') === el + ? refocusEl + : ctx.focusRestoreEl; + + if ( + focusRestoreEl === null || + el.contains(evt.relatedTarget) === true + ) { + if (document.activeElement) { + ctx.focusRestoreEl = document.activeElement; + } + } + else { + const focusableEl = focusRestoreEl.closest(FOCUSABLE_SELECTOR); + const focusedEl = focusableEl && typeof focusableEl.focus === 'function' + ? focusableEl + : ( + focusRestoreEl.focus === 'function' + ? focusRestoreEl + : null + ); + + requestAnimationFrame(() => { + if (focusedEl !== null) { + focusedEl._qKeyNavIgnore = true; + + focusedEl.focus(); + + requestAnimationFrame(() => { + focusedEl && (focusedEl._qKeyNavIgnore = false); + }); + } + }); + } + }, + + focusOut (evt) { + if ( + ctx.active === true && + (evt.relatedTarget === null || el.contains(evt.relatedTarget) === false) + ) { + ctx.setInactive(); + } + } + }; + + if (el.__qkeygrpnav) { + el.__qkeygrpnav_old = el.__qkeygrpnav; + } + + el.__qkeygrpnav = ctx; + + el.classList.add('q-key-group-navigation'); + createFocusTargets(ctx); + configureEvents$2(el, ctx, modifiers, value); + }, + + update (el, { modifiers, arg, value }) { + const ctx = el.__qkeygrpnav; + if (ctx !== void 0) { + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg$2(arg)); + } + + configureEvents$2(el, ctx, modifiers, value); + } + }, + + unbind (el) { + const ctx = el.__qkeygrpnav_old || el.__qkeygrpnav; + if (ctx !== void 0) { + el.classList.remove('q-key-group-navigation'); + removeFocusTargets(ctx); + cleanEvt(ctx, 'main'); + ctx.active === true && ctx.setInactive(); + + delete el[el.__qkeygrpnav_old ? '__qkeygrpnav_old' : '__qkeygrpnav']; + } + } + }; + + // taken from https://github.com/jalaali/jalaali-js + + /* + Jalaali years starting the 33-year rule. + */ + const breaks = [ -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, + 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178 + ]; + + /* + Converts a Gregorian date to Jalaali. + */ + function toJalaali (gy, gm, gd) { + if (Object.prototype.toString.call(gy) === '[object Date]') { + gd = gy.getDate(); + gm = gy.getMonth() + 1; + gy = gy.getFullYear(); + } + return d2j(g2d(gy, gm, gd)) + } + + /* + Converts a Jalaali date to Gregorian. + */ + function toGregorian (jy, jm, jd) { + return d2g(j2d(jy, jm, jd)) + } + + /* + Is this a leap year or not? + */ + function isLeapJalaaliYear (jy) { + return jalCalLeap(jy) === 0 + } + + /* + Number of days in a given month in a Jalaali year. + */ + function jalaaliMonthLength (jy, jm) { + if (jm <= 6) return 31 + if (jm <= 11) return 30 + if (isLeapJalaaliYear(jy)) return 30 + return 29 + } + + /* + This function determines if the Jalaali (Persian) year is + leap (366-day long) or is the common year (365 days) + + @param jy Jalaali calendar year (-61 to 3177) + @returns number of years since the last leap year (0 to 4) + */ + function jalCalLeap (jy) { + const bl = breaks.length; + let + jp = breaks[0], + jm, + jump, + leap, + n, + i; + + if (jy < jp || jy >= breaks[bl - 1]) { throw new Error('Invalid Jalaali year ' + jy) } + + for (i = 1; i < bl; i += 1) { + jm = breaks[i]; + jump = jm - jp; + if (jy < jm) { break } + jp = jm; + } + n = jy - jp; + + if (jump - n < 6) { n = n - jump + div(jump + 4, 33) * 33; } + leap = mod(mod(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + + return leap + } + + /* + This function determines if the Jalaali (Persian) year is + leap (366-day long) or is the common year (365 days), and + finds the day in March (Gregorian calendar) of the first + day of the Jalaali year (jy). + + @param jy Jalaali calendar year (-61 to 3177) + @param withoutLeap when don't need leap (true or false) default is false + @return + leap: number of years since the last leap year (0 to 4) + gy: Gregorian year of the beginning of Jalaali year + march: the March day of Farvardin the 1st (1st day of jy) + @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm + @see: http://www.fourmilab.ch/documents/calendar/ + */ + function jalCal (jy, withoutLeap) { + const + bl = breaks.length, + gy = jy + 621; + let + leapJ = -14, + jp = breaks[0], + jm, + jump, + leap, + n, + i; + + if (jy < jp || jy >= breaks[bl - 1]) { throw new Error('Invalid Jalaali year ' + jy) } + + // Find the limiting years for the Jalaali year jy. + for (i = 1; i < bl; i += 1) { + jm = breaks[i]; + jump = jm - jp; + if (jy < jm) { break } + leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4); + jp = jm; + } + n = jy - jp; + + // Find the number of leap years from AD 621 to the beginning + // of the current Jalaali year in the Persian calendar. + leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4); + if (mod(jump, 33) === 4 && jump - n === 4) { leapJ += 1; } + + // And the same in the Gregorian calendar (until the year gy). + const leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150; + + // Determine the Gregorian date of Farvardin the 1st. + const march = 20 + leapJ - leapG; + + // Find how many years have passed since the last leap year. + if (!withoutLeap) { + if (jump - n < 6) { n = n - jump + div(jump + 4, 33) * 33; } + leap = mod(mod(n + 1, 33) - 1, 4); + if (leap === -1) { + leap = 4; + } + } + + return { + leap: leap, + gy: gy, + march: march + } + } + + /* + Converts a date of the Jalaali calendar to the Julian Day number. + + @param jy Jalaali year (1 to 3100) + @param jm Jalaali month (1 to 12) + @param jd Jalaali day (1 to 29/31) + @return Julian Day number + */ + function j2d (jy, jm, jd) { + const r = jalCal(jy, true); + return g2d(r.gy, 3, r.march) + (jm - 1) * 31 - div(jm, 7) * (jm - 7) + jd - 1 + } + + /* + Converts the Julian Day number to a date in the Jalaali calendar. + + @param jdn Julian Day number + @return + jy: Jalaali year (1 to 3100) + jm: Jalaali month (1 to 12) + jd: Jalaali day (1 to 29/31) + */ + function d2j (jdn) { + const gy = d2g(jdn).gy; // Calculate Gregorian year (gy). + let + jy = gy - 621, + jd, + jm, + k; + const + r = jalCal(jy, false), + jdn1f = g2d(gy, 3, r.march); + + // Find number of days that passed since 1 Farvardin. + k = jdn - jdn1f; + if (k >= 0) { + if (k <= 185) { + // The first 6 months. + jm = 1 + div(k, 31); + jd = mod(k, 31) + 1; + return { jy: jy, + jm: jm, + jd: jd + } + } + else { + // The remaining months. + k -= 186; + } + } + else { + // Previous Jalaali year. + jy -= 1; + k += 179; + if (r.leap === 1) { k += 1; } + } + jm = 7 + div(k, 30); + jd = mod(k, 30) + 1; + return { jy: jy, + jm: jm, + jd: jd + } + } + + /* + Calculates the Julian Day number from Gregorian or Julian + calendar dates. This integer number corresponds to the noon of + the date (i.e. 12 hours of Universal Time). + The procedure was tested to be good since 1 March, -100100 (of both + calendars) up to a few million years into the future. + + @param gy Calendar year (years BC numbered 0, -1, -2, ...) + @param gm Calendar month (1 to 12) + @param gd Calendar day of the month (1 to 28/29/30/31) + @return Julian Day number + */ + function g2d (gy, gm, gd) { + let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + + div(153 * mod(gm + 9, 12) + 2, 5) + + gd - 34840408; + d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752; + return d + } + + /* + Calculates Gregorian and Julian calendar dates from the Julian Day number + (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both + calendars) to some millions years ahead of the present. + + @param jdn Julian Day number + @return + gy: Calendar year (years BC numbered 0, -1, -2, ...) + gm: Calendar month (1 to 12) + gd: Calendar day of the month M (1 to 28/29/30/31) + */ + function d2g (jdn) { + let j = 4 * jdn + 139361631; + j = j + div(div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908; + const + i = div(mod(j, 1461), 4) * 5 + 308, + gd = div(mod(i, 153), 5) + 1, + gm = mod(div(i, 153), 12) + 1, + gy = div(j, 1461) - 100100 + div(8 - gm, 6); + return { + gy: gy, + gm: gm, + gd: gd + } + } + + /* + Utility helper functions. + */ + + function div (a, b) { + return ~~(a / b) + } + + function mod (a, b) { + return a - ~~(a / b) * b + } + + const calendars = [ 'gregorian', 'persian' ]; + + var DateTimeMixin = { + mixins: [ DarkMixin, FormMixin, ListenersMixin ], + + props: { + value: { + required: true + }, + + mask: { + type: String + }, + locale: Object, + + calendar: { + type: String, + validator: v => calendars.includes(v), + default: 'gregorian' + }, + + landscape: Boolean, + + color: String, + textColor: String, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + readonly: Boolean, + disable: Boolean + }, + + computed: { + computedMask () { + return this.__getMask() + }, + + computedLocale () { + return this.__getLocale() + }, + + editable () { + return this.disable !== true && this.readonly !== true + }, + + computedColor () { + return this.color || 'primary' + }, + + computedTextColor () { + return this.textColor || 'white' + }, + + computedTabindex () { + return this.editable === true ? 0 : -1 + }, + + headerClass () { + const cls = []; + this.color !== void 0 && cls.push(`bg-${this.color}`); + this.textColor !== void 0 && cls.push(`text-${this.textColor}`); + return cls.join(' ') + } + }, + + methods: { + __getLocale () { + return this.locale !== void 0 + ? { ...this.$q.lang.date, ...this.locale } + : this.$q.lang.date + }, + + __getCurrentDate (dateOnly) { + const d = new Date(); + const timeFill = dateOnly === true ? null : 0; + + if (this.calendar === 'persian') { + const jDate = toJalaali(d); + return { + year: jDate.jy, + month: jDate.jm, + day: jDate.jd + } + } + + return { + year: d.getFullYear(), + month: d.getMonth() + 1, + day: d.getDate(), + hour: timeFill, + minute: timeFill, + second: timeFill, + millisecond: timeFill + } + }, + + __getCurrentTime () { + const d = new Date(); + + return { + hour: d.getHours(), + minute: d.getMinutes(), + second: d.getSeconds(), + millisecond: d.getMilliseconds() + } + }, + + __getDayHash (date) { + return date.year + '/' + pad(date.month) + '/' + pad(date.day) + } + } + }; + + /* eslint no-fallthrough: 0 */ + + const + MILLISECONDS_IN_DAY = 86400000, + MILLISECONDS_IN_HOUR = 3600000, + MILLISECONDS_IN_MINUTE = 60000, + dateConstructorArgs = [ 'year', 'month', 'date', 'hours', 'minutes', 'seconds', 'milliseconds' ], + defaultMask = 'YYYY-MM-DDTHH:mm:ss.SSSZ', + token = /\[((?:[^\]\\]|\\]|\\)*)\]|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]/g, + reverseToken = /(\[[^\]]*\])|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]|([.*+:?^,\s${}()|\\]+)/g, + regexStore = new Map(); + + function getRegexData (mask, dateLocale) { + const + days = '(' + dateLocale.days.join('|') + '|)', + key = mask + days; + + if (regexStore.has(key) === true) { + return regexStore.get(key) + } + + const + daysShort = '(' + dateLocale.daysShort.join('|') + '|)', + months = '(' + dateLocale.months.join('|') + '|)', + monthsShort = '(' + dateLocale.monthsShort.join('|') + '|)'; + + const map = {}; + let index = 0; + + const regexText = mask.replace(reverseToken, match => { + index++; + switch (match) { + case 'YY': + map.YY = index; + return '(-?\\d{1,2}|)' + case 'YYYY': + map.YYYY = index; + return '(-?\\d{1,4}|)' + case 'M': + map.M = index; + return '(\\d{1,2}|)' + case 'MM': + map.M = index; // bumping to M + return '(\\d{2}|)' + case 'MMM': + map.MMM = index; + return monthsShort + case 'MMMM': + map.MMMM = index; + return months + case 'D': + map.D = index; + return '(\\d{1,2}|)' + case 'Do': + map.D = index; // bumping to D + return '(\\d{1,2}(?:st|nd|rd|th)|)' + case 'DD': + map.D = index; // bumping to D + return '(\\d{2}|)' + case 'H': + map.H = index; + return '(\\d{1,2}|)' + case 'HH': + map.H = index; // bumping to H + return '(\\d{2}|)' + case 'h': + map.h = index; + return '(\\d{1,2}|)' + case 'hh': + map.h = index; // bumping to h + return '(\\d{2}|)' + case 'm': + map.m = index; + return '(\\d{1,2}|)' + case 'mm': + map.m = index; // bumping to m + return '(\\d{2}|)' + case 's': + map.s = index; + return '(\\d{1,2}|)' + case 'ss': + map.s = index; // bumping to s + return '(\\d{2}|)' + case 'S': + map.S = index; + return '(\\d{1}|)' + case 'SS': + map.S = index; // bump to S + return '(\\d{2}|)' + case 'SSS': + map.S = index; // bump to S + return '(\\d{3}|)' + case 'A': + map.A = index; + return '(AM|PM|)' + case 'a': + map.a = index; + return '(am|pm|)' + case 'aa': + map.aa = index; + return '(a\\.m\\.|p\\.m\\.|)' + + case 'ddd': + return daysShort + case 'dddd': + return days + case 'Q': + case 'd': + case 'E': + return '(\\d{1}|)' + case 'Qo': + return '(1st|2nd|3rd|4th|)' + case 'DDD': + case 'DDDD': + return '(\\d{1,3}|)' + case 'w': + return '(\\d{1,2}|)' + case 'ww': + return '(\\d{2}|)' + + case 'Z': // to split: (?:(Z)()()|([+-])?(\\d{2}):?(\\d{2})) + map.Z = index; + return '(Z|[+-]\\d{2}:\\d{2}|)' + case 'ZZ': + map.ZZ = index; + return '(Z|[+-]\\d{2}\\d{2}|)' + + case 'X': + map.X = index; + return '(-?\\d+|)' + case 'x': + map.x = index; + return '(-?\\d{4,}|)' + + default: + index--; + if (match[ 0 ] === '[') { + match = match.substring(1, match.length - 1); + } + return match.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + } + }); + + const res = { map, regex: new RegExp('^' + regexText) }; + regexStore.set(key, res); + + return res + } + + function getDateLocale (paramDateLocale, langProps) { + return paramDateLocale !== void 0 + ? paramDateLocale + : ( + langProps !== void 0 + ? langProps.date + : defaultLang.date + ) + } + + function formatTimezone (offset, delimeter = '') { + const + sign = offset > 0 ? '-' : '+', + absOffset = Math.abs(offset), + hours = Math.floor(absOffset / 60), + minutes = absOffset % 60; + + return sign + pad(hours) + delimeter + pad(minutes) + } + + function normalizeMod (mod) { + const acc = { ...mod }; + + if (mod.years !== void 0) { + acc.year = mod.years; + delete acc.years; + } + + if (mod.months !== void 0) { + acc.month = mod.months; + delete acc.months; + } + + if (mod.days !== void 0) { + acc.date = mod.days; + delete acc.days; + } + if (mod.day !== void 0) { + acc.date = mod.day; + delete acc.day; + } + + if (mod.hour !== void 0) { + acc.hours = mod.hour; + delete acc.hour; + } + + if (mod.minute !== void 0) { + acc.minutes = mod.minute; + delete acc.minute; + } + + if (mod.second !== void 0) { + acc.seconds = mod.second; + delete acc.second; + } + + if (mod.millisecond !== void 0) { + acc.milliseconds = mod.millisecond; + delete acc.millisecond; + } + + return acc + } + + const maxDayDate = new Date(); + function getMaxDay (year, month, calendar) { + if (calendar === 'persian') { + return jalaaliMonthLength(year, month) + } + + maxDayDate.setFullYear(year); + maxDayDate.setMonth(month); + maxDayDate.setDate(0); + return maxDayDate.getDate() + } + + function applyYearMonthDay (date, mod, type) { + const + year = mod.year !== void 0 ? mod.year : date[ `get${type}FullYear` ](), + month = mod.month !== void 0 ? mod.month - 1 : date[ `get${type}Month` ](), + maxDay = getMaxDay(year, month + 1), + day = Math.max(1, Math.min(maxDay, mod.date !== void 0 ? mod.date : date[ `get${type}Date` ]())); + + date[ `set${type}Date` ](1); + date[ `set${type}Month` ](2); + + date[ `set${type}FullYear` ](year); + date[ `set${type}Month` ](month); + date[ `set${type}Date` ](day); + + delete mod.year; + delete mod.month; + delete mod.date; + + return date + } + + function applyYearMonthDayChange (date, mod, sign) { + let + year = date.getFullYear(), + month = date.getMonth() + 1; + + if (mod.year !== void 0) { + year += sign * mod.year; + delete mod.year; + } + + if (mod.month !== void 0) { + month += sign * mod.month; + delete mod.month; + } + + applyYearMonthDay(date, { year, month }, ''); + + if (mod.date !== void 0) { + date.setDate(date.getDate() + sign * mod.date); + delete mod.date; + } + + return date + } + + function getChange (date, rawMod, sign) { + const + mod = normalizeMod(rawMod), + d = new Date(date), + t = mod.year !== void 0 || mod.month !== void 0 || mod.date !== void 0 + ? applyYearMonthDayChange(d, mod, sign) // removes year/month/day + : d; + + for (const key in mod) { + const op = capitalize(key); + t[ `set${op}` ](t[ `get${op}` ]() + sign * mod[ key ]); + } + + return t + } + + function __safeCreateDate (...args) { + if (args.length > 1 && args[0] >= 0 && args[0] <= 99) { + return buildDate(dateConstructorArgs.reduce((mod, key, index) => { + if (args[index] !== void 0) { + mod[key] = args[index]; + } + + return mod + }, {})) + } + + return new Date(...args) + } + + function adjustDate (date, rawMod, utc) { + const + mod = normalizeMod(rawMod), + type = utc === true ? 'UTC' : '', + d = date === null || date === void 0 ? new Date() : new Date(date), + t = mod.year !== void 0 || mod.month !== void 0 || mod.date !== void 0 + ? applyYearMonthDay(d, mod, type) // removes year/month/day + : d; + + for (const key in mod) { + const op = key.charAt(0).toUpperCase() + key.slice(1); + t[ `set${type}${op}` ](mod[ key ]); + } + + return t + } + + function extractDate (str, mask, dateLocale) { + const d = __splitDate(str, mask, dateLocale); + + const date = __safeCreateDate( + d.year, + d.month === null ? null : d.month - 1, + d.day === null ? 1 : d.day, + d.hour, + d.minute, + d.second, + d.millisecond + ); + + const tzOffset = date.getTimezoneOffset(); + + return d.timezoneOffset === null || d.timezoneOffset === tzOffset + ? date + : getChange(date, { minutes: d.timezoneOffset - tzOffset }, 1) + } + + function __splitDate (str, mask, dateLocale, calendar, defaultModel) { + const date = { + year: null, + month: null, + day: null, + hour: null, + minute: null, + second: null, + millisecond: null, + timezoneOffset: null, + dateHash: null, + timeHash: null + }; + + defaultModel !== void 0 && Object.assign(date, defaultModel); + + if ( + str === void 0 || + str === null || + str === '' || + typeof str !== 'string' + ) { + return date + } + + if (mask === void 0) { + mask = defaultMask; + } + + const + langOpts = getDateLocale(dateLocale, lang.props), + months = langOpts.months, + monthsShort = langOpts.monthsShort; + + const { regex, map } = getRegexData(mask, langOpts); + + const match = str.match(regex); + + if (match === null) { + return date + } + + const idx = { ...map }; + Object.keys(idx).forEach(key => { + if (match[idx[key]] === '') { + idx[key] = void 0; + } + }); + + let tzString = ''; + + if (idx.X !== void 0 || idx.x !== void 0) { + const stamp = parseInt(match[ idx.X !== void 0 ? idx.X : idx.x ], 10); + + if (isNaN(stamp) === true || stamp < 0) { + return date + } + + const d = new Date(stamp * (idx.X !== void 0 ? 1000 : 1)); + + date.year = d.getFullYear(); + date.month = d.getMonth() + 1; + date.day = d.getDate(); + date.hour = d.getHours(); + date.minute = d.getMinutes(); + date.second = d.getSeconds(); + date.millisecond = d.getMilliseconds(); + } + else { + if (idx.YYYY !== void 0) { + date.year = parseInt(match[ idx.YYYY ], 10); + } + else if (idx.YY !== void 0) { + const y = parseInt(match[ idx.YY ], 10); + date.year = y < 0 ? y : 2000 + y; + } + + if (idx.M !== void 0) { + date.month = parseInt(match[ idx.M ], 10); + if (date.month < 1 || date.month > 12) { + return date + } + } + else if (idx.MMM !== void 0) { + date.month = monthsShort.indexOf(match[ idx.MMM ]) + 1; + } + else if (idx.MMMM !== void 0) { + date.month = months.indexOf(match[ idx.MMMM ]) + 1; + } + + if (idx.D !== void 0) { + date.day = parseInt(match[ idx.D ], 10); + + if (date.year === null || date.month === null || date.day < 1) { + return date + } + + if (date.day > getMaxDay(date.year, date.month, calendar)) { + return date + } + } + + if (idx.H !== void 0) { + date.hour = parseInt(match[ idx.H ], 10) % 24; + } + else if (idx.h !== void 0) { + date.hour = parseInt(match[ idx.h ], 10) % 12; + if ( + (idx.A && match[ idx.A ] === 'PM') || + (idx.a && match[ idx.a ] === 'pm') || + (idx.aa && match[ idx.aa ] === 'p.m.') + ) { + date.hour += 12; + } + date.hour = date.hour % 24; + } + + if (idx.m !== void 0) { + date.minute = parseInt(match[ idx.m ], 10) % 60; + } + + if (idx.s !== void 0) { + date.second = parseInt(match[ idx.s ], 10) % 60; + } + + if (idx.S !== void 0) { + date.millisecond = parseInt(match[ idx.S ], 10) * 10 ** (3 - match[ idx.S ].length); + } + + if (idx.Z !== void 0 || idx.ZZ !== void 0) { + tzString = (idx.Z !== void 0 ? match[ idx.Z ].replace(':', '') : match[ idx.ZZ ]); + date.timezoneOffset = (tzString[ 0 ] === '+' ? -1 : 1) * (60 * tzString.slice(1, 3) + 1 * tzString.slice(3, 5)); + } + } + + date.dateHash = date.year + '/' + pad(date.month) + '/' + pad(date.day); + date.timeHash = pad(date.hour) + ':' + pad(date.minute) + ':' + pad(date.second) + tzString; + + return date + } + + function isValid (date) { + return typeof date === 'number' + ? true + : isNaN(Date.parse(date)) === false + } + + function buildDate (mod, utc) { + return adjustDate(null, mod, utc) + } + + function getDayOfWeek (date, dateLocale) { + const langOpts = getDateLocale(dateLocale, lang.props); + const dow = new Date(date).getDay(); + return 1 + (7 + dow - (langOpts.firstDayOfWeek || 0)) % 7 + } + + function getWeekOfYear (date) { + // Remove time components of date + const thursday = __safeCreateDate(date.getFullYear(), date.getMonth(), date.getDate()); + + // Change date to Thursday same week + thursday.setDate(thursday.getDate() - ((thursday.getDay() + 6) % 7) + 3); + + // Take January 4th as it is always in week 1 (see ISO 8601) + const firstThursday = __safeCreateDate(thursday.getFullYear(), 0, 4); + + // Change date to Thursday same week + firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3); + + // Check if daylight-saving-time-switch occurred and correct for it + const ds = thursday.getTimezoneOffset() - firstThursday.getTimezoneOffset(); + thursday.setHours(thursday.getHours() - ds); + + // Number of weeks between target Thursday and first Thursday + const weekDiff = (thursday - firstThursday) / (MILLISECONDS_IN_DAY * 7); + return 1 + Math.floor(weekDiff) + } + + function getDayIdentifier (date) { + return date.getFullYear() * 10000 + date.getMonth() * 100 + date.getDate() + } + + function getDateIdentifier (date, onlyDate /* = false */) { + const d = new Date(date); + return onlyDate === true ? getDayIdentifier(d) : d.getTime() + } + + function isBetweenDates (date, from, to, opts = {}) { + const + d1 = getDateIdentifier(from, opts.onlyDate), + d2 = getDateIdentifier(to, opts.onlyDate), + cur = getDateIdentifier(date, opts.onlyDate); + + return (cur > d1 || (opts.inclusiveFrom === true && cur === d1)) && + (cur < d2 || (opts.inclusiveTo === true && cur === d2)) + } + + function addToDate (date, mod) { + return getChange(date, mod, 1) + } + function subtractFromDate (date, mod) { + return getChange(date, mod, -1) + } + + function startOfDate (date, unit, utc) { + const + t = new Date(date), + prefix = `set${utc === true ? 'UTC' : ''}`; + + switch (unit) { + case 'year': + case 'years': + t[ `${prefix}Month` ](0); + case 'month': + case 'months': + t[ `${prefix}Date` ](1); + case 'day': + case 'days': + case 'date': + t[ `${prefix}Hours` ](0); + case 'hour': + case 'hours': + t[ `${prefix}Minutes` ](0); + case 'minute': + case 'minutes': + t[ `${prefix}Seconds` ](0); + case 'second': + case 'seconds': + t[ `${prefix}Milliseconds` ](0); + } + return t + } + + function endOfDate (date, unit, utc) { + const + t = new Date(date), + prefix = `set${utc === true ? 'UTC' : ''}`; + + switch (unit) { + case 'year': + case 'years': + t[ `${prefix}Month` ](11); + case 'month': + case 'months': + t[ `${prefix}Date` ](daysInMonth(t)); + case 'day': + case 'days': + case 'date': + t[ `${prefix}Hours` ](23); + case 'hour': + case 'hours': + t[ `${prefix}Minutes` ](59); + case 'minute': + case 'minutes': + t[ `${prefix}Seconds` ](59); + case 'second': + case 'seconds': + t[ `${prefix}Milliseconds` ](999); + } + return t + } + + function getMaxDate (date /* , ...args */) { + let t = new Date(date); + Array.prototype.slice.call(arguments, 1).forEach(d => { + t = Math.max(t, new Date(d)); + }); + return t + } + + function getMinDate (date /*, ...args */) { + let t = new Date(date); + Array.prototype.slice.call(arguments, 1).forEach(d => { + t = Math.min(t, new Date(d)); + }); + return t + } + + function getDiff (t, sub, interval) { + return Math.floor( + ( + (t.getTime() - t.getTimezoneOffset() * MILLISECONDS_IN_MINUTE) - + (sub.getTime() - sub.getTimezoneOffset() * MILLISECONDS_IN_MINUTE) + ) / interval + ) + } + + function getDateDiff (date, subtract, unit = 'days') { + const + t = new Date(date), + sub = new Date(subtract); + + switch (unit) { + case 'years': + case 'year': + return (t.getFullYear() - sub.getFullYear()) + + case 'months': + case 'month': + return (t.getFullYear() - sub.getFullYear()) * 12 + t.getMonth() - sub.getMonth() + + case 'days': + case 'day': + case 'date': + return getDiff(startOfDate(t, 'day'), startOfDate(sub, 'day'), MILLISECONDS_IN_DAY) + + case 'hours': + case 'hour': + return getDiff(startOfDate(t, 'hour'), startOfDate(sub, 'hour'), MILLISECONDS_IN_HOUR) + + case 'minutes': + case 'minute': + return getDiff(startOfDate(t, 'minute'), startOfDate(sub, 'minute'), MILLISECONDS_IN_MINUTE) + + case 'seconds': + case 'second': + return getDiff(startOfDate(t, 'second'), startOfDate(sub, 'second'), 1000) + } + } + + function getDayOfYear (date) { + return getDateDiff(date, startOfDate(date, 'year'), 'days') + 1 + } + + function inferDateFormat (date) { + return isDate(date) === true + ? 'date' + : (typeof date === 'number' ? 'number' : 'string') + } + + function getDateBetween (date, min, max) { + const t = new Date(date); + + if (min) { + const low = new Date(min); + if (t < low) { + return low + } + } + + if (max) { + const high = new Date(max); + if (t > high) { + return high + } + } + + return t + } + + function isSameDate (date, date2, unit) { + const + t = new Date(date), + d = new Date(date2); + + if (unit === void 0) { + return t.getTime() === d.getTime() + } + + switch (unit) { + case 'second': + case 'seconds': + if (t.getSeconds() !== d.getSeconds()) { + return false + } + case 'minute': // intentional fall-through + case 'minutes': + if (t.getMinutes() !== d.getMinutes()) { + return false + } + case 'hour': // intentional fall-through + case 'hours': + if (t.getHours() !== d.getHours()) { + return false + } + case 'day': // intentional fall-through + case 'days': + case 'date': + if (t.getDate() !== d.getDate()) { + return false + } + case 'month': // intentional fall-through + case 'months': + if (t.getMonth() !== d.getMonth()) { + return false + } + case 'year': // intentional fall-through + case 'years': + if (t.getFullYear() !== d.getFullYear()) { + return false + } + break + default: + throw new Error(`date isSameDate unknown unit ${unit}`) + } + + return true + } + + function daysInMonth (date) { + return (__safeCreateDate(date.getFullYear(), date.getMonth() + 1, 0)).getDate() + } + + function getOrdinal (n) { + if (n >= 11 && n <= 13) { + return `${n}th` + } + switch (n % 10) { + case 1: return `${n}st` + case 2: return `${n}nd` + case 3: return `${n}rd` + } + return `${n}th` + } + + const formatter = { + // Year: 00, 01, ..., 99 + YY (date, _dateLocale, forcedYear) { + // workaround for < 1900 with new Date() + const y = this.YYYY(date, _dateLocale, forcedYear) % 100; + return y >= 0 + ? pad(y) + : '-' + pad(Math.abs(y)) + }, + + // Year: 1900, 1901, ..., 2099 + YYYY (date, _dateLocale, forcedYear) { + // workaround for < 1900 with new Date() + return forcedYear !== void 0 && forcedYear !== null + ? forcedYear + : date.getFullYear() + }, + + // Month: 1, 2, ..., 12 + M (date) { + return date.getMonth() + 1 + }, + + // Month: 01, 02, ..., 12 + MM (date) { + return pad(date.getMonth() + 1) + }, + + // Month Short Name: Jan, Feb, ... + MMM (date, dateLocale) { + return dateLocale.monthsShort[ date.getMonth() ] + }, + + // Month Name: January, February, ... + MMMM (date, dateLocale) { + return dateLocale.months[ date.getMonth() ] + }, + + // Quarter: 1, 2, 3, 4 + Q (date) { + return Math.ceil((date.getMonth() + 1) / 3) + }, + + // Quarter: 1st, 2nd, 3rd, 4th + Qo (date) { + return getOrdinal(this.Q(date)) + }, + + // Day of month: 1, 2, ..., 31 + D (date) { + return date.getDate() + }, + + // Day of month: 1st, 2nd, ..., 31st + Do (date) { + return getOrdinal(date.getDate()) + }, + + // Day of month: 01, 02, ..., 31 + DD (date) { + return pad(date.getDate()) + }, + + // Day of year: 1, 2, ..., 366 + DDD (date) { + return getDayOfYear(date) + }, + + // Day of year: 001, 002, ..., 366 + DDDD (date) { + return pad(getDayOfYear(date), 3) + }, + + // Day of week: 0, 1, ..., 6 + d (date) { + return date.getDay() + }, + + // Day of week: Su, Mo, ... + dd (date, dateLocale) { + return this.dddd(date, dateLocale).slice(0, 2) + }, + + // Day of week: Sun, Mon, ... + ddd (date, dateLocale) { + return dateLocale.daysShort[ date.getDay() ] + }, + + // Day of week: Sunday, Monday, ... + dddd (date, dateLocale) { + return dateLocale.days[ date.getDay() ] + }, + + // Day of ISO week: 1, 2, ..., 7 + E (date) { + return date.getDay() || 7 + }, + + // Week of Year: 1 2 ... 52 53 + w (date) { + return getWeekOfYear(date) + }, + + // Week of Year: 01 02 ... 52 53 + ww (date) { + return pad(getWeekOfYear(date)) + }, + + // Hour: 0, 1, ... 23 + H (date) { + return date.getHours() + }, + + // Hour: 00, 01, ..., 23 + HH (date) { + return pad(date.getHours()) + }, + + // Hour: 1, 2, ..., 12 + h (date) { + const hours = date.getHours(); + return hours === 0 + ? 12 + : (hours > 12 ? hours % 12 : hours) + }, + + // Hour: 01, 02, ..., 12 + hh (date) { + return pad(this.h(date)) + }, + + // Minute: 0, 1, ..., 59 + m (date) { + return date.getMinutes() + }, + + // Minute: 00, 01, ..., 59 + mm (date) { + return pad(date.getMinutes()) + }, + + // Second: 0, 1, ..., 59 + s (date) { + return date.getSeconds() + }, + + // Second: 00, 01, ..., 59 + ss (date) { + return pad(date.getSeconds()) + }, + + // 1/10 of second: 0, 1, ..., 9 + S (date) { + return Math.floor(date.getMilliseconds() / 100) + }, + + // 1/100 of second: 00, 01, ..., 99 + SS (date) { + return pad(Math.floor(date.getMilliseconds() / 10)) + }, + + // Millisecond: 000, 001, ..., 999 + SSS (date) { + return pad(date.getMilliseconds(), 3) + }, + + // Meridiem: AM, PM + A (date) { + return this.H(date) < 12 ? 'AM' : 'PM' + }, + + // Meridiem: am, pm + a (date) { + return this.H(date) < 12 ? 'am' : 'pm' + }, + + // Meridiem: a.m., p.m. + aa (date) { + return this.H(date) < 12 ? 'a.m.' : 'p.m.' + }, + + // Timezone: -01:00, +00:00, ... +12:00 + Z (date, _dateLocale, _forcedYear, forcedTimezoneOffset) { + const tzOffset = forcedTimezoneOffset === void 0 || forcedTimezoneOffset === null + ? date.getTimezoneOffset() + : forcedTimezoneOffset; + + return formatTimezone(tzOffset, ':') + }, + + // Timezone: -0100, +0000, ... +1200 + ZZ (date, _dateLocale, _forcedYear, forcedTimezoneOffset) { + const tzOffset = forcedTimezoneOffset === void 0 || forcedTimezoneOffset === null + ? date.getTimezoneOffset() + : forcedTimezoneOffset; + + return formatTimezone(tzOffset) + }, + + // Seconds timestamp: 512969520 + X (date) { + return Math.floor(date.getTime() / 1000) + }, + + // Milliseconds timestamp: 512969520900 + x (date) { + return date.getTime() + } + }; + + function formatDate (val, mask, dateLocale, __forcedYear, __forcedTimezoneOffset) { + if ( + (val !== 0 && !val) || + val === Infinity || + val === -Infinity + ) { + return + } + + const date = new Date(val); + + if (isNaN(date)) { + return + } + + if (mask === void 0) { + mask = defaultMask; + } + + const locale = getDateLocale(dateLocale, lang.props); + + return mask.replace( + token, + (match, text) => match in formatter + ? formatter[ match ](date, locale, __forcedYear, __forcedTimezoneOffset) + : (text === void 0 ? match : text.split('\\]').join(']')) + ) + } + + function clone (date) { + return isDate(date) === true + ? new Date(date.getTime()) + : date + } + + var date = { + isValid, + extractDate, + buildDate, + getDayOfWeek, + getWeekOfYear, + isBetweenDates, + addToDate, + subtractFromDate, + adjustDate, + startOfDate, + endOfDate, + getMaxDate, + getMinDate, + getDateDiff, + getDayOfYear, + inferDateFormat, + getDateBetween, + isSameDate, + daysInMonth, + formatDate, + clone + }; + + const yearsInterval = 20; + const views = [ 'Calendar', 'Years', 'Months' ]; + const viewIsValid = v => views.includes(v); + const yearMonthValidator = v => /^-?[\d]+\/[0-1]\d$/.test(v); + const modelNavigationValidator = v => [ 'from', 'to', false ].indexOf(v) > -1; + const hashToInt = s => { + if (typeof s !== 'string') { + return NaN + } + + const splits = s.split('/'); + + return parseInt(splits[0], 10) * 10000 + parseInt(splits.slice(1).join(''), 10) + }; + const lineStr = ' \u2014 '; + + function modelIsValid (date) { + return date.dateHash !== null && + date.day !== null && + date.month !== null && + date.year !== null + } + + var QDate = Vue__default["default"].extend({ + name: 'QDate', + + mixins: [ DateTimeMixin ], + + directives: { + KeyGroupNavigation + }, + + props: { + multiple: Boolean, + range: Boolean, + + dayAsRange: Boolean, + + title: String, + subtitle: String, + + mask: { + // this mask is forced + // when using persian calendar + default: 'YYYY/MM/DD' + }, + + defaultYearMonth: { + type: String, + validator: yearMonthValidator + }, + + yearsInMonthView: Boolean, + + events: [ Array, Function ], + eventColor: [ String, Function ], + + emitImmediately: Boolean, + + options: [ Array, Function ], + + modelNavigation: { + type: [ String, Boolean ], + default: 'from', + validator: modelNavigationValidator + }, + + navigationMinYearMonth: { + type: String, + validator: yearMonthValidator + }, + + navigationMaxYearMonth: { + type: String, + validator: yearMonthValidator + }, + + noUnset: Boolean, + + firstDayOfWeek: [ String, Number ], + todayBtn: Boolean, + minimal: Boolean, + defaultView: { + type: String, + default: 'Calendar', + validator: viewIsValid + } + }, + + data () { + const + innerMask = this.__getMask(), + innerLocale = this.__getLocale(), + viewModel = this.__getViewModel(innerMask, innerLocale), + year = viewModel.year, + direction = this.$q.lang.rtl === true ? 'right' : 'left'; + + return { + view: this.defaultView, + monthDirection: direction, + yearDirection: direction, + startYear: year - (year % yearsInterval) - (year < 0 ? yearsInterval : 0), + editRange: void 0, + innerMask, + innerLocale, + viewModel // model of current calendar view + } + }, + + watch: { + value (v) { + if (this.lastEmitValue === v) { + this.lastEmitValue = 0; + } + else { + const { year, month } = this.__getViewModel(this.innerMask, this.innerLocale); + this.__updateViewModel(year, month); + } + }, + + view () { + this.$nextTick(() => { + this.$refs.viewTarget !== void 0 && this.$refs.viewTarget.$el.focus(); + }); + }, + + 'viewModel.year' (year) { + this.$emit('navigation', { year, month: this.viewModel.month }); + }, + + 'viewModel.month' (month) { + this.$emit('navigation', { year: this.viewModel.year, month }); + }, + + computedMask (val) { + this.__updateValue(val, this.innerLocale, 'mask'); + this.innerMask = val; + }, + + computedLocale (val) { + this.__updateValue(this.innerMask, val, 'locale'); + this.innerLocale = val; + } + }, + + computed: { + classes () { + const type = this.landscape === true ? 'landscape' : 'portrait'; + return `q-date q-date--${type} q-date--${type}-${this.minimal === true ? 'minimal' : 'standard'}` + + ` q-date--${this.darkSuffix} q-${this.darkSuffix}` + + (this.bordered === true ? ' q-date--bordered' : '') + + (this.square === true ? ' q-date--square no-border-radius' : '') + + (this.flat === true ? ' q-date--flat no-shadow' : '') + + (this.disable === true ? ' disabled' : (this.readonly === true ? ' q-date--readonly' : '')) + }, + + isImmediate () { + return this.emitImmediately === true && + this.multiple !== true && + this.range !== true + }, + + normalizedModel () { + return Array.isArray(this.value) === true + ? this.value + : (this.value !== null && this.value !== void 0 ? [ this.value ] : []) + }, + + daysModel () { + return this.normalizedModel + .filter(date => typeof date === 'string') + .map(date => this.__decodeString(date, this.innerMask, this.innerLocale)) + .filter(modelIsValid) + }, + + rangeModel () { + const fn = date => this.__decodeString(date, this.innerMask, this.innerLocale); + return this.normalizedModel + .filter(date => isObject(date) === true && date.from !== void 0 && date.to !== void 0) + .map(range => { + const from = fn(range.from); + const to = fn(range.to); + + return hashToInt(from.dateHash) <= hashToInt(to.dateHash) + ? { from, to } + : { from: to, to: from } + }) + .filter(range => modelIsValid(range.from) === true && modelIsValid(range.to) === true) + }, + + getNativeDateFn () { + return this.calendar !== 'persian' + ? model => { + const date = __safeCreateDate(model.year, model.month - 1, model.day); + date.setFullYear(model.year); + return date + } + : model => { + const gDate = toGregorian(model.year, model.month, model.day); + const date = __safeCreateDate(gDate.gy, gDate.gm - 1, gDate.gd); + date.setFullYear(model.year); + return date + } + }, + + encodeObjectFn () { + return this.calendar === 'persian' + ? this.__getDayHash + : (date, mask, locale) => formatDate( + __safeCreateDate( + date.year, + date.month - 1, + date.day, + date.hour, + date.minute, + date.second, + date.millisecond + ), + mask === void 0 ? this.innerMask : mask, + locale === void 0 ? this.innerLocale : locale, + date.year, + date.timezoneOffset + ) + }, + + daysInModel () { + return this.daysModel.length + this.rangeModel.reduce( + (acc, range) => acc + 1 + getDateDiff( + this.getNativeDateFn(range.to), + this.getNativeDateFn(range.from) + ), + 0 + ) + }, + + headerTitle () { + if (this.title !== void 0 && this.title !== null && this.title.length > 0) { + return this.title + } + + if (this.editRange !== void 0) { + const model = this.editRange.init; + const date = this.getNativeDateFn(model); + + return this.innerLocale.daysShort[ date.getDay() ] + ', ' + + this.innerLocale.monthsShort[ model.month - 1 ] + ' ' + + model.day + lineStr + '?' + } + + if (this.daysInModel === 0) { + return lineStr + } + + if (this.daysInModel > 1) { + return `${this.daysInModel} ${this.innerLocale.pluralDay}` + } + + const model = this.minSelectedModel; + const date = this.getNativeDateFn(model); + + if (isNaN(date.valueOf()) === true) { + return lineStr + } + + if (this.innerLocale.headerTitle !== void 0) { + return this.innerLocale.headerTitle(date, model) + } + + return this.innerLocale.daysShort[ date.getDay() ] + ', ' + + this.innerLocale.monthsShort[ model.month - 1 ] + ' ' + + model.day + }, + + headerSubtitle () { + if (this.subtitle !== void 0 && this.subtitle !== null && this.subtitle.length > 0) { + return this.subtitle + } + + if (this.daysInModel === 0) { + return lineStr + } + + if (this.daysInModel > 1) { + const from = this.minSelectedModel; + const to = this.maxSelectedModel; + const month = this.innerLocale.monthsShort; + + return month[from.month - 1] + ( + from.year !== to.year + ? ' ' + from.year + lineStr + month[to.month - 1] + ' ' + : ( + from.month !== to.month + ? lineStr + month[to.month - 1] + : '' + ) + ) + ' ' + to.year + } + + return this.minSelectedModel.year + }, + + minSelectedModel () { + const model = this.daysModel.concat(this.rangeModel.map(range => range.from)) + .sort((a, b) => a.year - b.year || a.month - b.month); + + return model[0] + }, + + maxSelectedModel () { + const model = this.daysModel.concat(this.rangeModel.map(range => range.to)) + .sort((a, b) => b.year - a.year || b.month - a.month); + + return model[0] + }, + + dateArrow () { + const val = [ this.$q.iconSet.datetime.arrowLeft, this.$q.iconSet.datetime.arrowRight ]; + return this.$q.lang.rtl === true ? val.reverse() : val + }, + + computedFirstDayOfWeek () { + return this.firstDayOfWeek !== void 0 + ? Number(this.firstDayOfWeek) + : this.innerLocale.firstDayOfWeek + }, + + daysOfWeek () { + const + days = this.innerLocale.daysShort, + first = this.computedFirstDayOfWeek; + + return first > 0 + ? days.slice(first, 7).concat(days.slice(0, first)) + : days + }, + + daysInMonth () { + const { year, month } = this.viewModel; + + if (this.calendar !== 'persian') { + return { + prev: (__safeCreateDate(year, month - 1, 0)).getDate(), + cur: (__safeCreateDate(year, month, 0)).getDate(), + next: (__safeCreateDate(year, month + 1, 0)).getDate() + } + } + + return { + prev: jalaaliMonthLength(month === 1 ? year - 1 : year, month === 1 ? 12 : month - 1), + cur: jalaaliMonthLength(year, month), + next: jalaaliMonthLength(month === 12 ? year + 1 : year, month === 12 ? 1 : month + 1) + } + }, + + today () { + return this.__getCurrentDate() + }, + + evtColor () { + return typeof this.eventColor === 'function' + ? this.eventColor + : () => this.eventColor + }, + + minNav () { + if (this.navigationMinYearMonth !== void 0) { + const data = this.navigationMinYearMonth.split('/'); + return { year: parseInt(data[0], 10), month: parseInt(data[1], 10) } + } + }, + + maxNav () { + if (this.navigationMaxYearMonth !== void 0) { + const data = this.navigationMaxYearMonth.split('/'); + return { year: parseInt(data[0], 10), month: parseInt(data[1], 10) } + } + }, + + navBoundaries () { + const data = { + month: { prev: true, next: true }, + year: { prev: true, next: true } + }; + + if (this.minNav !== void 0 && this.minNav.year >= this.viewModel.year) { + data.year.prev = false; + if (this.minNav.year === this.viewModel.year && this.minNav.month >= this.viewModel.month) { + data.month.prev = false; + } + } + + if (this.maxNav !== void 0 && this.maxNav.year <= this.viewModel.year) { + data.year.next = false; + if (this.maxNav.year === this.viewModel.year && this.maxNav.month <= this.viewModel.month) { + data.month.next = false; + } + } + + return data + }, + + daysMap () { + const map = {}; + + this.daysModel.forEach(entry => { + const hash = this.__getMonthHash(entry); + + if (map[hash] === void 0) { + map[hash] = []; + } + + map[hash].push(entry.day); + }); + + return map + }, + + rangeMap () { + const map = {}; + + this.rangeModel.forEach(entry => { + const fromHash = this.__getMonthHash(entry.from); + const toHash = this.__getMonthHash(entry.to); + const toHashInt = hashToInt(toHash); + + if (map[fromHash] === void 0) { + map[fromHash] = []; + } + + map[fromHash].push({ + from: entry.from.day, + to: fromHash === toHash ? entry.to.day : void 0, + range: entry + }); + + if (hashToInt(fromHash) < toHashInt) { + const { year, month } = entry.from; + const cur = month < 12 + ? { year, month: month + 1 } + : { year: year + 1, month: 1 }; + let hash = this.__getMonthHash(cur); + + while (hashToInt(hash) <= toHashInt) { + if (map[hash] === void 0) { + map[hash] = []; + } + + map[hash].push({ + from: void 0, + to: hash === toHash ? entry.to.day : void 0, + range: entry + }); + + cur.month++; + if (cur.month > 12) { + cur.year++; + cur.month = 1; + } + + hash = this.__getMonthHash(cur); + } + } + }); + + return map + }, + + rangeViewMap () { + if (this.editRange === void 0) { + return {} + } + const map = {}; + + const { init, initHash, final, finalHash } = this.editRange; + + const [ from, to ] = hashToInt(initHash) <= hashToInt(finalHash) + ? [ init, final ] + : [ final, init ]; + + const fromHashInt = hashToInt(this.__getMonthHash(from)); + const toHashInt = hashToInt(this.__getMonthHash(to)); + + const months = [ 'prev', 'cur', 'next' ]; + + months.forEach(month => { + const monthHashInt = hashToInt(this.viewMonthHash[month]); + + if (fromHashInt > monthHashInt || toHashInt < monthHashInt) { + return + } + + const view = { + includeFrom: fromHashInt === monthHashInt, + includeTo: toHashInt === monthHashInt + }; + + view.from = view.includeFrom ? from.day : 1; + view.to = view.includeTo ? to.day : this.daysInMonth[month]; + + map[this.viewMonthHash[month]] = view; + }); + + return map + }, + + viewMonthHash () { + const { year, month } = this.viewModel; + return { + prev: this.__getMonthHash({ + year: month === 1 ? year - 1 : year, + month: month === 1 ? 12 : month - 1 + }), + cur: this.__getMonthHash({ year, month }), + next: this.__getMonthHash({ + year: month === 12 ? year + 1 : year, + month: month === 12 ? 1 : month + 1 + }) + } + }, + + selectionDaysMap () { + const map = {}; + + if (this.options === void 0) { + for (let i = 1; i <= this.daysInMonth.cur; i++) { + map[i] = true; + } + + return map + } + + const fn = typeof this.options === 'function' + ? this.options + : date => this.options.includes(date); + + for (let i = 1; i <= this.daysInMonth.cur; i++) { + const dayHash = this.viewMonthHash.cur + '/' + pad(i); + map[i] = fn(dayHash); + } + + return map + }, + + eventDaysMap () { + const map = {}; + + if (this.events === void 0) { + for (let i = 1; i <= this.daysInMonth.cur; i++) { + map[i] = false; + } + } + else { + const fn = typeof this.events === 'function' + ? this.events + : date => this.events.includes(date); + + for (let i = 1; i <= this.daysInMonth.cur; i++) { + const dayHash = this.viewMonthHash.cur + '/' + pad(i); + map[i] = fn(dayHash) === true && this.evtColor(dayHash); + } + } + + return map + }, + + startFillDays () { + let date; + const { year, month } = this.viewModel; + + if (this.calendar !== 'persian') { + date = __safeCreateDate(year, month - 1, 1); + } + else { + const gDate = toGregorian(year, month, 1); + date = __safeCreateDate(gDate.gy, gDate.gm - 1, gDate.gd); + } + + const days = date.getDay() - this.computedFirstDayOfWeek - 1; + + return { + days: days < 0 ? days + 7 : days, + endDay: this.daysInMonth.prev + } + }, + + days () { + const res = []; + const { days, endDay } = this.startFillDays; + + if (days < 6) { + for (let i = endDay - days; i <= endDay; i++) { + res.push({ i, day: this.viewMonthHash.prev + '/' + pad(i), fill: true }); + } + + this.__fillDaysMeta(res, this.viewMonthHash.prev, endDay, -endDay + days + 1, endDay - days, endDay); + } + + const index = res.length; + + for (let i = 1; i <= this.daysInMonth.cur; i++) { + const day = { i, day: this.viewMonthHash.cur + '/' + pad(i), event: this.eventDaysMap[i], classes: [] }; + + if (this.selectionDaysMap[i] === true) { + day.in = true; + day.flat = true; + } + + res.push(day); + } + + this.__fillDaysMeta(res, this.viewMonthHash.cur, this.daysInMonth.cur, index, 1, this.daysInMonth.cur); + + if (this.viewModel.year === this.today.year && this.viewModel.month === this.today.month) { + res[index + this.today.day - 1].today = true; + } + + const left = res.length % 7; + if (left > 0) { + const afterDays = 7 - left; + for (let i = 1; i <= afterDays; i++) { + res.push({ i, day: this.viewMonthHash.next + '/' + pad(i), fill: true }); + } + + this.__fillDaysMeta(res, this.viewMonthHash.next, this.daysInMonth.next, index + this.daysInMonth.cur, 1, afterDays); + } + + res.forEach(day => { + let cls = 'q-date__calendar-item '; + + cls += day.fill === true + ? 'q-date__calendar-item--fill' + : `q-date__calendar-item--${day.in === true ? 'in' : 'out'}`; + + if (day.range !== void 0 || day.editRange === true) { + cls += ` text-${day.color}`; + } + + if (day.range !== void 0 && (day.rangeTo !== true || day.rangeFrom !== true)) { + cls += ` q-date__range${day.rangeFrom === true ? '-from' : (day.rangeTo === true ? '-to' : '')}`; + } + + if (day.editRange === true) { + cls += ` q-date__edit-range${day.editRangeFrom === true ? '-from' : ''}${day.editRangeTo === true ? '-to' : ''}`; + } + + day.classes = cls; + }); + + return res + }, + + attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + } + }, + + methods: { + setToday () { + this.__toggleDate(this.today, this.__getMonthHash(this.today)); + this.setCalendarTo(this.today.year, this.today.month); + }, + + setView (view) { + if (viewIsValid(view) === true) { + this.view = view; + } + }, + + offsetCalendar (type, descending) { + if (['month', 'year'].includes(type)) { + this[`__goTo${type === 'month' ? 'Month' : 'Year'}`]( + descending === true ? -1 : 1 + ); + } + }, + + setCalendarTo (year, month) { + this.view = 'Calendar'; + this.__updateViewModel(year, month); + }, + + setEditingRange (from, to, modelNavigation) { + if (modelNavigation === void 0) { + modelNavigation = this.modelNavigation; + } + + if (this.range === false || !from) { + this.editRange = void 0; + return + } + + const init = Object.assign({ ...this.viewModel }, from); + const final = to !== void 0 + ? Object.assign({ ...this.viewModel }, to) + : init; + + this.editRange = { + init, + initHash: this.__getDayHash(init), + final, + finalHash: this.__getDayHash(final) + }; + + if ([ 'from', 'to' ].indexOf(modelNavigation) > -1) { + this.$nextTick(() => { + this.setCalendarTo( + modelNavigation === 'from' ? init.year : final.year, + modelNavigation === 'from' ? init.month : final.month + ); + }); + } + }, + + __getMask () { + return this.calendar === 'persian' ? 'YYYY/MM/DD' : this.mask + }, + + __decodeString (date, mask, locale) { + return __splitDate( + date, + mask, + locale, + this.calendar, + { + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + } + ) + }, + + __getViewModel (mask, locale) { + if (this.modelNavigation === false) { + return this.viewModel === void 0 + ? this.__getDefaultViewModel() + : this.viewModel + } + + const model = Array.isArray(this.value) === true + ? this.value + : (this.value ? [ this.value ] : []); + + if (model.length === 0) { + return this.__getDefaultViewModel() + } + + const target = model[this.modelNavigation === 'from' ? 0 : model.length - 1]; + + const decoded = this.__decodeString( + target.from !== void 0 ? target.from : target, + mask, + locale + ); + + return decoded.dateHash === null + ? this.__getDefaultViewModel() + : decoded + }, + + __getDefaultViewModel () { + let year, month; + + if (this.defaultYearMonth !== void 0) { + const d = this.defaultYearMonth.split('/'); + year = parseInt(d[0], 10); + month = parseInt(d[1], 10); + } + else { + // may come from data() where computed + // props are not yet available + const d = this.today !== void 0 + ? this.today + : this.__getCurrentDate(); + + year = d.year; + month = d.month; + } + + return { + year, + month, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + dateHash: year + '/' + pad(month) + '/01' + } + }, + + __getHeader (h) { + if (this.minimal === true) { return } + + return h('div', { + staticClass: 'q-date__header', + class: this.headerClass + }, [ + h('div', { + staticClass: 'relative-position' + }, [ + h('transition', { + props: { + name: 'q-transition--fade' + } + }, [ + h('div', { + key: 'h-yr-' + this.headerSubtitle, + staticClass: 'q-date__header-subtitle q-date__header-link', + class: this.view === 'Years' ? 'q-date__header-link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'vY', { + click: () => { this.view = 'Years'; }, + keyup: e => { e.keyCode === 13 && (this.view = 'Years'); } + }) + }, [ this.headerSubtitle ]) + ]) + ]), + + h('div', { + staticClass: 'q-date__header-title relative-position flex no-wrap' + }, [ + h('div', { + staticClass: 'relative-position col' + }, [ + h('transition', { + props: { + name: 'q-transition--fade' + } + }, [ + h('div', { + key: 'h-sub' + this.headerTitle, + staticClass: 'q-date__header-title-label q-date__header-link', + class: this.view === 'Calendar' ? 'q-date__header-link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'vC', { + click: () => { this.view = 'Calendar'; }, + keyup: e => { e.keyCode === 13 && (this.view = 'Calendar'); } + }) + }, [ this.headerTitle ]) + ]) + ]), + + this.todayBtn === true ? h(QBtn, { + key: 'today', + staticClass: 'q-date__header-today self-start', + props: { + icon: this.$q.iconSet.datetime.today, + flat: true, + size: 'sm', + round: true, + tabindex: this.computedTabindex + }, + on: cache(this, 'today', { click: this.setToday }) + }) : null + ]) + ]) + }, + + __getNavigation (h, { label, view, key, dir, goTo, boundaries, cls }) { + return [ + h('div', { + staticClass: 'row items-center q-date__arrow' + }, [ + h(QBtn, { + key: 'go-#' + view, + props: { + round: true, + dense: true, + size: 'sm', + flat: true, + icon: this.dateArrow[0], + tabindex: this.computedTabindex, + disable: boundaries.prev === false + }, + on: cache(this, 'go-#' + view, { click () { goTo(-1); } }) + }) + ]), + + h('div', { + staticClass: 'relative-position overflow-hidden flex flex-center' + cls + }, [ + h('transition', { + props: { + name: 'q-transition--jump-' + dir + } + }, [ + h('div', { key }, [ + h(QBtn, { + key: 'view#' + view, + props: { + flat: true, + dense: true, + noCaps: true, + label, + tabindex: this.computedTabindex + }, + on: cache(this, 'view#' + view, { click: () => { this.view = view; } }) + }) + ]) + ]) + ]), + + h('div', { + staticClass: 'row items-center q-date__arrow' + }, [ + h(QBtn, { + key: 'go+#' + view, + props: { + round: true, + dense: true, + size: 'sm', + flat: true, + icon: this.dateArrow[1], + tabindex: this.computedTabindex, + disable: boundaries.next === false + }, + on: cache(this, 'go+#' + view, { click () { goTo(1); } }) + }) + ]) + ] + }, + + __getCalendarView (h) { + const dayContentFn = this.$scopedSlots.day !== void 0 + ? this.$scopedSlots.day + : day => (day.event !== false ? [ + h('div', { staticClass: 'q-date__event bg-' + day.event }) + ] : null); + const dayFillContentFn = this.$scopedSlots.day !== void 0 + ? this.$scopedSlots.day + : day => h('div', [ day.i ]); + + const selectedDay = this.days.find(day => day.unelevated === true); + const viewDay = selectedDay === void 0 ? this.days.find(day => day.today === true) : selectedDay; + const viewTarget = viewDay === void 0 ? 1 : viewDay.i; + const calCachePrefix = this.calendar === 'persian' ? 'dayP#' : 'day#'; + + return [ + h('div', { + key: 'calendar-view', + staticClass: 'q-date__view q-date__calendar' + }, [ + h('div', { + staticClass: 'q-date__navigation row items-center no-wrap' + }, this.__getNavigation(h, { + label: this.innerLocale.months[ this.viewModel.month - 1 ], + view: 'Months', + key: this.viewModel.month, + dir: this.monthDirection, + goTo: this.__goToMonth, + boundaries: this.navBoundaries.month, + cls: ' col' + }).concat(this.__getNavigation(h, { + label: this.viewModel.year, + view: 'Years', + key: this.viewModel.year, + dir: this.yearDirection, + goTo: this.__goToYear, + boundaries: this.navBoundaries.year, + cls: '' + }))), + + h('div', { + staticClass: 'q-date__calendar-weekdays row items-center no-wrap' + }, this.daysOfWeek.map(day => h('div', { staticClass: 'q-date__calendar-item' }, [ h('div', [ day ]) ]))), + + h('div', { + key: 'kNavC', + staticClass: 'q-date__calendar-days-container relative-position overflow-hidden', + directives: cache(this, 'kNavC', [{ + name: 'key-group-navigation', + arg: '7' + }]) + }, [ + h('transition', { + props: { + name: 'q-transition--slide-' + this.monthDirection + } + }, [ + h('div', { + key: this.viewMonthHash.cur, + staticClass: 'q-date__calendar-days fit' + }, this.days.map(day => h('div', { staticClass: day.classes }, [ + day.in === true + ? h(QBtn, { + key: calCachePrefix + day.i, + staticClass: day.today === true ? 'q-date__today' : null, + ref: viewTarget === day.i ? 'viewTarget' : void 0, + props: { + dense: true, + flat: day.flat, + unelevated: day.unelevated, + color: day.color, + textColor: day.textColor, + label: day.i, + tabindex: this.computedTabindex + }, + on: cache(this, calCachePrefix + day.i, { + click: () => { this.__onDayClick(day.i); }, + focusin: () => { this.__onDayMouseover(day.i); }, + mouseenter: () => { this.__onDayMouseover(day.i); } + }) + }, dayContentFn(day)) + : dayFillContentFn(day) + ]))) + ]) + ]) + ]) + ] + }, + + __getMonthsView (h) { + const currentYear = this.viewModel.year === this.today.year; + const isDisabled = month => { + return ( + (this.minNav !== void 0 && this.viewModel.year === this.minNav.year && this.minNav.month > month) || + (this.maxNav !== void 0 && this.viewModel.year === this.maxNav.year && this.maxNav.month < month) + ) + }; + const activeProps = { + unelevated: true, + color: this.computedColor, + textColor: this.computedTextColor + }; + const inactiveProps = { flat: true }; + + const content = this.innerLocale.monthsShort.map((month, i) => { + return h('div', { + staticClass: 'q-date__months-item flex flex-center' + }, [ + h(QBtn, { + key: 'month#' + i, + staticClass: currentYear === true && this.today.month === i + 1 ? 'q-date__today' : null, + ref: this.viewModel.month === i + 1 ? 'viewTarget' : void 0, + props: Object.assign( + { + label: month, + tabindex: this.computedTabindex, + disable: isDisabled(i + 1) + }, + this.viewModel.month === i + 1 + ? activeProps + : inactiveProps + ), + on: cache(this, 'month#' + i, { click: () => { this.__setMonth(i + 1); } }) + }) + ]) + }); + + this.yearsInMonthView === true && content.unshift( + h('div', { staticClass: 'row no-wrap full-width' }, [ + this.__getNavigation(h, { + label: this.viewModel.year, + view: 'Years', + key: this.viewModel.year, + dir: this.yearDirection, + goTo: this.__goToYear, + boundaries: this.navBoundaries.year, + cls: ' col' + }) + ]) + ); + + return h('div', { + key: 'kNavYM', + staticClass: 'q-date__view q-date__months flex flex-center', + directives: cache(this, 'kNavYM', [{ + name: 'key-group-navigation', + arg: '3' + }]) + }, content) + }, + + __getYearsView (h) { + const + start = this.startYear, + stop = start + yearsInterval, + years = [], + viewTarget = this.viewModel.year >= start && this.viewModel.year <= stop + ? this.viewModel.year + : ( + this.today.year >= start && this.today.year <= stop + ? this.today.year + : start + ); + + const isDisabled = year => { + return ( + (this.minNav !== void 0 && this.minNav.year > year) || + (this.maxNav !== void 0 && this.maxNav.year < year) + ) + }; + + for (let i = start; i <= stop; i++) { + const active = this.viewModel.year === i; + + years.push( + h('div', { + staticClass: 'q-date__years-item flex flex-center' + }, [ + h(QBtn, { + key: 'yr#' + i, + staticClass: this.today.year === i ? 'q-date__today' : null, + ref: viewTarget === i ? 'viewTarget' : void 0, + props: { + flat: active !== true, + label: i, + dense: true, + unelevated: active, + color: active === true ? this.computedColor : null, + textColor: active === true ? this.computedTextColor : null, + tabindex: this.computedTabindex, + disable: isDisabled(i) + }, + on: cache(this, 'yr#' + i, { click: () => { this.__setYear(i); } }) + }) + ]) + ); + } + + return h('div', { + staticClass: 'q-date__view q-date__years flex flex-center' + }, [ + h('div', { + staticClass: 'col-auto' + }, [ + h(QBtn, { + key: 'y-', + props: { + round: true, + dense: true, + flat: true, + icon: this.dateArrow[0], + tabindex: this.computedTabindex, + disable: isDisabled(start) + }, + on: cache(this, 'y-', { click: () => { this.startYear -= yearsInterval; } }) + }) + ]), + + h('div', { + key: 'kNavYM', + staticClass: 'q-date__years-content col self-stretch row items-center', + directives: cache(this, 'kNavYM', [{ + name: 'key-group-navigation', + arg: '3' + }]) + }, years), + + h('div', { + staticClass: 'col-auto' + }, [ + h(QBtn, { + key: 'y+', + props: { + round: true, + dense: true, + flat: true, + icon: this.dateArrow[1], + tabindex: this.computedTabindex, + disable: isDisabled(stop) + }, + on: cache(this, 'y+', { click: () => { this.startYear += yearsInterval; } }) + }) + ]) + ]) + }, + + __fillDaysMeta (res, monthHash, daysInMonth, index, dayFrom, dayTo) { + // if current view has days in model + if (this.daysMap[monthHash] !== void 0) { + this.daysMap[monthHash] + .filter(day => day >= dayFrom && day <= dayTo) + .forEach(day => { + const i = index + day - 1; + Object.assign(res[i], { + selected: true, + unelevated: true, + flat: false, + color: this.computedColor, + textColor: this.computedTextColor + }); + }); + } + + // if current view has ranges in model + if (this.rangeMap[monthHash] !== void 0) { + this.rangeMap[monthHash].forEach(entry => { + const from = index + Math.max(dayFrom, entry.from === void 0 ? 1 : entry.from) - 1; + const to = index + Math.min(dayTo, entry.to === void 0 ? daysInMonth : entry.to) - 1; + + for (let day = from; day <= to; day++) { + Object.assign(res[day], { + range: entry.range, + unelevated: true, + color: this.computedColor, + textColor: this.computedTextColor + }); + } + + if (entry.from >= dayFrom && entry.from <= dayTo) { + Object.assign(res[from], { + rangeFrom: true, + flat: false + }); + } + + if (entry.to >= dayFrom && entry.to <= dayTo) { + Object.assign(res[to], { + rangeTo: true, + flat: false + }); + } + }); + } + + if (this.rangeViewMap[monthHash] !== void 0) { + const from = index + Math.max(dayFrom, this.rangeViewMap[monthHash].from) - 1; + const to = index + Math.min(dayTo, this.rangeViewMap[monthHash].to) - 1; + + for (let day = from; day <= to; day++) { + res[day].color = this.computedColor; + res[day].editRange = true; + } + + if ( + this.rangeViewMap[monthHash].includeFrom === true && + this.rangeViewMap[monthHash].from >= dayFrom && + this.rangeViewMap[monthHash].from <= dayTo + ) { + res[from].editRangeFrom = true; + } + + if ( + this.rangeViewMap[monthHash].includeTo === true && + this.rangeViewMap[monthHash].to >= dayFrom && + this.rangeViewMap[monthHash].to <= dayTo + ) { + res[to].editRangeTo = true; + } + } + }, + + __goToMonth (offset) { + let year = this.viewModel.year; + let month = Number(this.viewModel.month) + offset; + + if (month === 13) { + month = 1; + year++; + } + else if (month === 0) { + month = 12; + year--; + } + + this.__updateViewModel(year, month); + this.isImmediate === true && this.__emitImmediately('month'); + }, + + __goToYear (offset) { + const year = Number(this.viewModel.year) + offset; + this.__updateViewModel(year, this.viewModel.month); + this.isImmediate === true && this.__emitImmediately('year'); + }, + + __setYear (year) { + this.__updateViewModel(year, this.viewModel.month); + this.view = this.defaultView === 'Years' ? 'Months' : 'Calendar'; + this.isImmediate === true && this.__emitImmediately('year'); + }, + + __setMonth (month) { + this.__updateViewModel(this.viewModel.year, month); + this.view = 'Calendar'; + this.isImmediate === true && this.__emitImmediately('month'); + }, + + __getMonthHash (date) { + return date.year + '/' + pad(date.month) + }, + + __toggleDate (date, monthHash) { + const month = this.daysMap[monthHash]; + const fn = month !== void 0 && month.includes(date.day) === true + ? this.__removeFromModel + : this.__addToModel; + + fn(date); + }, + + __getShortDate (date) { + return { year: date.year, month: date.month, day: date.day } + }, + + __onDayClick (dayIndex) { + const day = { ...this.viewModel, day: dayIndex }; + + if (this.range === false) { + this.__toggleDate(day, this.viewMonthHash.cur); + return + } + + if (this.editRange === void 0) { + const dayProps = this.days.find(day => day.fill !== true && day.i === dayIndex); + + if (this.noUnset !== true && dayProps.range !== void 0) { + this.__removeFromModel({ target: day, from: dayProps.range.from, to: dayProps.range.to }); + return + } + + if (dayProps.selected === true) { + this.__removeFromModel(day); + return + } + + const initHash = this.__getDayHash(day); + + this.editRange = { + init: day, + initHash, + final: day, + finalHash: initHash + }; + + this.$emit('range-start', this.__getShortDate(day)); + } + else { + const + initHash = this.editRange.initHash, + finalHash = this.__getDayHash(day), + payload = hashToInt(initHash) <= hashToInt(finalHash) + ? { from: this.editRange.init, to: day } + : { from: day, to: this.editRange.init }; + + this.editRange = void 0; + this.__addToModel(initHash === finalHash && this.dayAsRange !== true ? day : { target: day, ...payload }); + + this.$emit('range-end', { + from: this.__getShortDate(payload.from), + to: this.__getShortDate(payload.to) + }); + } + }, + + __onDayMouseover (dayIndex) { + if (this.editRange !== void 0) { + const final = { ...this.viewModel, day: dayIndex }; + + Object.assign(this.editRange, { + final, + finalHash: this.__getDayHash(final) + }); + + this.$emit('range-change', { + from: this.__getShortDate(this.editRange.init), + to: this.__getShortDate(this.editRange.final) + }); + } + }, + + __updateViewModel (year, month) { + year = parseInt(year, 10); + month = parseInt(month, 10); + + if (this.minNav !== void 0 && year <= this.minNav.year) { + year = this.minNav.year; + if (month < this.minNav.month) { + month = this.minNav.month; + } + } + + if (this.maxNav !== void 0 && year >= this.maxNav.year) { + year = this.maxNav.year; + if (month > this.maxNav.month) { + month = this.maxNav.month; + } + } + + const newHash = year + '/' + pad(month) + '/01'; + + if (newHash !== this.viewModel.dateHash) { + this.monthDirection = (hashToInt(this.viewModel.dateHash) < hashToInt(newHash)) === (this.$q.lang.rtl !== true) ? 'left' : 'right'; + if (year !== this.viewModel.year) { + this.yearDirection = this.monthDirection; + } + + this.$nextTick(() => { + this.startYear = year - year % yearsInterval - (year < 0 ? yearsInterval : 0); + Object.assign(this.viewModel, { + year, + month, + day: 1, + dateHash: newHash + }); + }); + } + }, + + __emitValue (val, action, date) { + const value = val !== null && val.length === 1 && this.multiple === false + ? val[0] + : val; + + this.lastEmitValue = value; + + const { reason, details } = this.__getEmitParams(action, date); + this.$emit('input', value, reason, details); + }, + + __emitImmediately (reason) { + const date = this.daysModel[0] !== void 0 && modelIsValid(this.daysModel[0]) === true + ? { ...this.daysModel[0] } + : { ...this.viewModel }; // inherit day, hours, minutes, milliseconds... + + // nextTick required because of animation delay in viewModel + this.$nextTick(() => { + date.year = this.viewModel.year; + date.month = this.viewModel.month; + + const maxDay = this.calendar !== 'persian' + ? (__safeCreateDate(date.year, date.month, 0)).getDate() + : jalaaliMonthLength(date.year, date.month); + + date.day = Math.min(Math.max(1, date.day), maxDay); + + const value = this.__encodeEntry(date); + this.lastEmitValue = value; + + const { details } = this.__getEmitParams('', date); + this.$emit('input', value, reason, details); + }); + }, + + __getEmitParams (action, date) { + return date.from !== void 0 + ? { + reason: `${action}-range`, + details: { + ...this.__getShortDate(date.target), + from: this.__getShortDate(date.from), + to: this.__getShortDate(date.to), + changed: true // TODO remove in v2; legacy purposes + } + } + : { + reason: `${action}-day`, + details: { + ...this.__getShortDate(date), + changed: true // TODO remove in v2; legacy purposes + } + } + }, + + __encodeEntry (date, mask, locale) { + return date.from !== void 0 + ? { from: this.encodeObjectFn(date.from, mask, locale), to: this.encodeObjectFn(date.to, mask, locale) } + : this.encodeObjectFn(date, mask, locale) + }, + + __addToModel (date) { + let value; + + if (this.multiple === true) { + if (date.from !== void 0) { + // we also need to filter out intersections + + const fromHashInt = hashToInt(this.__getDayHash(date.from)); + const toHashInt = hashToInt(this.__getDayHash(date.to)); + + const days = this.daysModel + .filter(day => { + const dayHashInt = hashToInt(day.dateHash); + + return dayHashInt < fromHashInt || dayHashInt > toHashInt + }); + + const ranges = this.rangeModel + .filter(({ from, to }) => hashToInt(to.dateHash) < fromHashInt || hashToInt(from.dateHash) > toHashInt); + + value = days.concat(ranges).concat(date).map(entry => this.__encodeEntry(entry)); + } + else { + const model = this.normalizedModel.slice(); + model.push(this.__encodeEntry(date)); + value = model; + } + } + else { + value = this.__encodeEntry(date); + } + + this.__emitValue(value, 'add', date); + }, + + __removeFromModel (date) { + if (this.noUnset === true) { + return + } + + let model = null; + + if (this.multiple === true && Array.isArray(this.value) === true) { + const val = this.__encodeEntry(date); + + if (date.from !== void 0) { + model = this.value.filter(date => date.from !== void 0 + ? (date.from !== val.from && date.to !== val.to) + : true + ); + } + else { + model = this.value.filter(date => date !== val); + } + + if (model.length === 0) { + model = null; + } + } + + this.__emitValue(model, 'remove', date); + }, + + __updateValue (mask, locale, reason) { + const model = this.daysModel + .concat(this.rangeModel) + .map(entry => this.__encodeEntry(entry, mask, locale)) + .filter(entry => entry.from !== void 0 + ? modelIsValid(entry.from) === true && modelIsValid(entry.to) === true + : modelIsValid(entry) + ); + + this.$emit('input', (this.multiple === true ? model : model[0]) || null, reason); + } + }, + + render (h) { + const content = [ + h('div', { + staticClass: 'q-date__content col relative-position' + }, [ + h('transition', { + props: { name: 'q-transition--fade' } + }, [ + this[`__get${this.view}View`](h) + ]) + ]) + ]; + + const def = slot(this, 'default'); + def !== void 0 && content.push( + h('div', { staticClass: 'q-date__actions' }, def) + ); + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(content, 'push'); + } + + return h('div', { + class: this.classes, + attrs: this.attrs, + directives: [ KeyGroupNavigation ], + on: { ...this.qListeners } + }, [ + this.__getHeader(h), + + h('div', { staticClass: 'q-date__main col column' }, content) + ]) + } + }); + + var HistoryMixin = { + methods: { + __addHistory () { + this.__historyEntry = { + condition: () => { return this.hideOnRouteChange === true }, + handler: this.hide + }; + History.add(this.__historyEntry); + }, + + __removeHistory () { + if (this.__historyEntry !== void 0) { + History.remove(this.__historyEntry); + this.__historyEntry = void 0; + } + } + }, + + beforeDestroy () { + this.showing === true && this.__removeHistory(); + } + }; + + const { passive: passive$3 } = listenOpts; + + let + registered = 0, + state = {}, + iosScrollActive = false, + applyTimer, + orientationTimer, + closeTimer; + + function iosScroll () { + if (iosScrollActive === false) { + return + } + + const { innerHeight, visualViewport } = window; + const { clientHeight } = document.documentElement; + const diff = innerHeight - Math.ceil(visualViewport.height * visualViewport.scale); + + if ( + diff === 0 && + clientHeight > innerHeight + ) { + document.documentElement.scrollTop -= 3; + } + else { + if (diff > 1 && diff < 4) { + document.documentElement.scrollTop += diff - 1; + } + + iosScrollActive = false; + } + } + + function onIosScroll () { + iosScrollActive !== false && cancelAnimationFrame(iosScrollActive); + iosScrollActive = requestAnimationFrame(iosScroll); + } + + function onMobileRotate () { + clearTimeout(orientationTimer); + + orientationTimer = setTimeout(() => { + requestAnimationFrame(() => { + const { documentElement, body } = document; + + documentElement.style.height = `${window.innerHeight}px`; + + body.style.height = `${documentElement.clientHeight + state.scrollTop}px`; + }); + }, 200); + } + + function apply$1 (action, rtl) { + const + { documentElement, body } = document, + { visualViewport } = window; + + clearTimeout(applyTimer); + clearTimeout(orientationTimer); + + if (action === 'add') { + document.qScrollPrevented = true; + + const scrollbarSize = getScrollbarWidth(); + + requestAnimationFrame(() => { + const { innerHeight, innerWidth } = window; + const { overflowX, overflowY, backgroundColor } = window.getComputedStyle(body); + + state = { + htmlStyleBefore: documentElement.style.cssText, + bodyStyleBefore: body.style.cssText, + htmlStyleAfter: '', + bodyStyleAfter: '', + scrollLeft: documentElement.scrollLeft, + scrollTop: documentElement.scrollTop + }; + + if (client.is.mobile === true) { + documentElement.style.height = `${innerHeight}px`; + + body.style.width = `calc(100vw + ${Math.abs(state.scrollLeft)}px)`; + body.style.height = `${innerHeight + state.scrollTop}px`; + + window.addEventListener('orientationchange', onMobileRotate, passive$3); + if (visualViewport !== void 0 && client.is.ios === true) { + applyTimer = setTimeout(() => { + visualViewport.addEventListener('scroll', onIosScroll, passive$3); + }, 500); + } + } + else { + const + { scrollWidth, scrollHeight } = body, + scrollbarSizeHoriz = overflowX !== 'hidden' && (overflowX === 'scroll' || scrollWidth > innerWidth) + ? scrollbarSize + : 0, + scrollbarSizeVert = overflowY !== 'hidden' && (overflowY === 'scroll' || scrollHeight > innerHeight) + ? scrollbarSize + : 0; + + if (scrollbarSizeVert > 0 || scrollbarSizeHoriz > 0) { + if (scrollbarSizeVert > 0) { + documentElement.style.width = `calc(100vw - ${scrollbarSizeVert}px)`; + + if (rtl === true) { + documentElement.style.marginRight = `${scrollbarSizeVert}px`; + } + } + if (scrollbarSizeHoriz > 0) { + documentElement.style.height = `calc(100vh - ${scrollbarSizeHoriz}px)`; + } + } + + body.style.width = `calc(100vw + ${Math.abs(state.scrollLeft) - scrollbarSizeVert}px)`; + body.style.height = `calc(100vh + ${state.scrollTop - scrollbarSizeHoriz}px)`; + } + + body.style.left = `${-state.scrollLeft}px`; + body.style.top = `${-state.scrollTop}px`; + body.style['padding' + (rtl === true ? 'Left' : 'Right')] = `${Math.abs(state.scrollLeft)}px`; + + documentElement.style.backgroundColor = backgroundColor || 'rgba(128, 128, 128, 0.01)'; + documentElement.classList.add('q-body--prevent-scroll'); + + window.scrollTo(0, 0); + + requestAnimationFrame(() => { + if (body.scrollTop !== 0) { + body.scrollTop = 0; + } + }); + + documentElement.style.setProperty('--q-scroll-lock-left', `${-state.scrollLeft}px`); + const els = document.querySelectorAll('.q-menu__container, .q-tooltip__container'); + for (let i = els.length - 1; i >= 0; i--) { + els[i].style.position === 'absolute' && els[i].classList.add('q-body--scroll-locked'); + } + + state.htmlStyleAfter = documentElement.style.cssText.split(';').filter(s => s.trim().length > 0); + state.bodyStyleAfter = body.style.cssText.split(';').filter(s => s.trim().length > 0); + }); + } + else { + if (client.is.mobile === true) { + window.removeEventListener('orientationchange', onMobileRotate, passive$3); + if (visualViewport !== void 0 && client.is.ios === true) { + visualViewport.removeEventListener('scroll', onIosScroll, passive$3); + iosScrollActive = false; + } + } + + requestAnimationFrame(() => { + documentElement.classList.remove('q-body--prevent-scroll'); + + const + htmlStyleAfter = state.htmlStyleAfter.reduce((acc, s) => acc.replace(s + ';', ''), documentElement.style.cssText), + bodyStyleAfter = state.bodyStyleAfter.reduce((acc, s) => acc.replace(s + ';', ''), body.style.cssText); + + documentElement.style.cssText = state.htmlStyleBefore + htmlStyleAfter; + body.style.cssText = state.bodyStyleBefore + bodyStyleAfter; + + const els = document.querySelectorAll('.q-body--scroll-locked'); + for (let i = els.length - 1; i >= 0; i--) { + els[i].classList.remove('q-body--scroll-locked'); + } + + window.scrollTo(state.scrollLeft, state.scrollTop); + + applyTimer = setTimeout(() => { + document.qScrollPrevented = false; + triggerIsScrollable(); + }, 50); + }); + } + } + + function preventScroll (state, rtl) { + let action = 'add'; + + if (state === true) { + registered++; + + if (closeTimer !== void 0) { + clearTimeout(closeTimer); + closeTimer = void 0; + return + } + + if (registered > 1) { + return + } + } + else { + if (registered === 0) { + return + } + + registered--; + + if (registered > 0) { + return + } + + action = 'remove'; + + if (client.is.ios === true && client.is.nativeMobile === true) { + clearTimeout(closeTimer); + + closeTimer = setTimeout(() => { + apply$1(action, rtl); + closeTimer = void 0; + }, 100); + return + } + } + + apply$1(action, rtl); + } + + var PreventScrollMixin = { + methods: { + __preventScroll (state) { + if ( + state !== this.preventedScroll && + (this.preventedScroll !== void 0 || state === true) + ) { + this.preventedScroll = state; + preventScroll(state, this.$q.lang.rtl); + } + } + } + }; + + const positionClass$1 = { + standard: 'fixed-full flex-center', + top: 'fixed-top justify-center', + bottom: 'fixed-bottom justify-center', + right: 'fixed-right items-center', + left: 'fixed-left items-center' + }; + + const transitions = { + standard: ['scale', 'scale'], + top: ['slide-down', 'slide-up'], + bottom: ['slide-up', 'slide-down'], + right: ['slide-left', 'slide-right'], + left: ['slide-right', 'slide-left'] + }; + + var QDialog = Vue__default["default"].extend({ + name: 'QDialog', + + mixins: [ + AttrsMixin, + HistoryMixin, + ModelToggleMixin, + Portal, + PreventScrollMixin, + FocusWrapMixin + ], + + props: { + persistent: Boolean, + autoClose: Boolean, + + noEscDismiss: Boolean, + noBackdropDismiss: Boolean, + noRouteDismiss: Boolean, + noRefocus: Boolean, + noFocus: Boolean, + noShake: Boolean, + + seamless: Boolean, + + maximized: Boolean, + fullWidth: Boolean, + fullHeight: Boolean, + + square: Boolean, + + position: { + type: String, + default: 'standard', + validator: val => val === 'standard' || + ['top', 'bottom', 'left', 'right'].includes(val) + }, + + transitionShow: String, + transitionHide: String + }, + + watch: { + seamless (v) { + this.showing === true && this.__preventScroll(v !== true); + } + }, + + computed: { + classes () { + return `q-dialog__inner--${this.maximized === true ? 'maximized' : 'minimized'} ` + + `q-dialog__inner--${this.position} ${positionClass$1[this.position]}` + + (this.fullWidth === true ? ' q-dialog__inner--fullwidth' : '') + + (this.fullHeight === true ? ' q-dialog__inner--fullheight' : '') + + (this.square === true ? ' q-dialog__inner--square' : '') + }, + + transitionProps () { + const show = `q-transition--${this.transitionShow === void 0 ? transitions[this.position][0] : this.transitionShow}`; + const hide = `q-transition--${this.transitionHide === void 0 ? transitions[this.position][1] : this.transitionHide}`; + return { + enterClass: `${show}-enter`, + leaveClass: `${hide}-leave`, + appearClass: `${show}-appear`, + enterToClass: `${show}-enter-to`, + leaveToClass: `${hide}-leave-to`, + appearToClass: `${show}-appear-to`, + enterActiveClass: `${show}-enter-active`, + leaveActiveClass: `${hide}-leave-active`, + appearActiveClass: `${show}-appear-active` + } + }, + + useBackdrop () { + return this.showing === true && this.seamless !== true + }, + + hideOnRouteChange () { + return this.persistent !== true && + this.noRouteDismiss !== true && + this.seamless !== true + }, + + onBackdropEvents () { + return { + focusin: this.__onBackdropClick + } + }, + + onInnerEvents () { + const on = { + ...this.qListeners, + // stop propagating these events from children + input: stop, + 'popup-show': stop, + 'popup-hide': stop + }; + + if (this.autoClose === true) { + on.click = this.__onAutoClose; + } + + return on + }, + + onTransitionEvents () { + return { + 'before-enter': this.__onTransitionBeforeEnter, + enter: this.__onTransitionEnter, + 'after-enter': this.__onTransitionAfterEnter, + 'enter-cancelled': this.__onTransitionEnterCancelled, + 'before-leave': this.__onTransitionBeforeLeave, + 'after-leave': this.__onTransitionAfterLeave + } + }, + + attrs () { + return { + role: 'dialog', + 'aria-modal': this.useBackdrop === true ? 'true' : 'false', + ...this.qAttrs + } + } + }, + + methods: { + shake (refocusTarget) { + if (refocusTarget && typeof refocusTarget.focus === 'function') { + refocusTarget.focus(); + } + else { + this.__focusFirst(true); + } + this.$emit('shake'); + + const node = this.__getInnerNode(); + + if (node !== void 0) { + node.classList.remove('q-animate--scale'); + node.classList.add('q-animate--scale'); + clearTimeout(this.shakeTimeout); + this.shakeTimeout = setTimeout(() => { + node.classList.remove('q-animate--scale'); + }, 170); + } + }, + + __show () { + this.__addHistory(); + + // IE can have null document.activeElement + this.__refocusTarget = this.$q.platform.is.desktop === true && this.noRefocus === false && document.activeElement !== null + ? document.activeElement + : void 0; + + this.$el.dispatchEvent(create('popup-show', { bubbles: true })); + + EscapeKey.register(this, () => { + if (this.seamless !== true) { + // if it should not close then focus at start + if (this.persistent === true || this.noEscDismiss === true) { + if (this.maximized !== true && this.noShake !== true) { + this.shake(); + } + else { + this.__focusFirst(true); + } + } + else { + this.$emit('escape-key'); + this.hide(); + } + } + else { + this.__focusCyclePortal(); + } + }); + + this.__showPortal(); + }, + + __hide () { + this.__removeHistory(); + this.__cleanup(true); + + this.$el.dispatchEvent(create('popup-hide', { bubbles: true })); + }, + + __onTransitionBeforeEnter (target) { + // required in order to avoid the "double-tap needed" issue + this.$q.platform.is.ios === true && target.click(); + + this.seamless !== true && this.__preventScroll(true); + + target.setAttribute('data-q-portal-animating', true); + }, + + __onTransitionEnter () { + this.noFocus !== true && this.focus(); + }, + + __onTransitionAfterEnter (target) { + target.removeAttribute('data-q-portal-animating'); + + this.$emit('show', { target }); + }, + + __onTransitionEnterCancelled (target) { + target.removeAttribute('data-q-portal-animating'); + + this.seamless !== true && this.__preventScroll(false); + }, + + __onTransitionBeforeLeave () { + if (this.showing !== true) { + this.__focusCyclePortal(true); + this.seamless !== true && (document.documentElement.scrollTop = 0); + } + }, + + __onTransitionAfterLeave (target) { + if (this.showing !== true) { + this.__hidePortal(); + + this.seamless !== true && this.__preventScroll(false); + + this.$emit('hide', { target }); + } + }, + + __onAutoClose (e) { + this.hide(e); + this.qListeners.click !== void 0 && this.$emit('click', e); + }, + + __onBackdropClick (e) { + if (this.persistent !== true && this.noBackdropDismiss !== true) { + this.hide(e); + } + else if (this.noShake !== true) { + this.shake(e.relatedTarget); + } + }, + + __cleanup (hiding) { + clearTimeout(this.shakeTimeout); + + if (hiding === true || this.showing === true) { + EscapeKey.pop(this); + } + }, + + __renderPortal (h) { + return h('div', { + staticClass: `q-dialog fullscreen no-pointer-events q-dialog--${this.seamless === true ? 'seamless' : 'modal'}`, + class: this.contentClass, + style: this.contentStyle, + attrs: this.attrs + }, [ + h('transition', { + props: { name: 'q-transition--fade' } + }, this.useBackdrop === true ? [ + h('div', { + staticClass: 'q-dialog__backdrop fixed-full', + attrs: { ...ariaHidden, tabindex: -1 }, + on: this.onBackdropEvents + }) + ] : null), + + h('transition', { + props: this.transitionProps, + on: this.onTransitionEvents + }, [ + this.showing === true ? h('div', { + ref: 'inner', + staticClass: 'q-dialog__inner flex no-pointer-events', + class: this.classes, + attrs: { tabindex: -1 }, + on: this.onInnerEvents + }, this.__getFocusWrappedContent('default')) : null + ]) + ]) + } + }, + + mounted () { + this.__processModelChange(this.value); + }, + + beforeDestroy () { + this.__cleanup(); + this.__preventScroll(false); + this.__refocusTarget = void 0; + } + }); + + const duration = 150; + + const mouseEvents = [ + 'mouseover', 'mouseout', 'mouseenter', 'mouseleave' + ]; + + var QDrawer = Vue__default["default"].extend({ + name: 'QDrawer', + + inject: { + layout: { + default () { + console.error('QDrawer needs to be child of QLayout'); + } + } + }, + + mixins: [ DarkMixin, HistoryMixin, TimeoutMixin, ModelToggleMixin, PreventScrollMixin ], + + directives: { + TouchPan + }, + + props: { + side: { + type: String, + default: 'left', + validator: v => ['left', 'right'].includes(v) + }, + + width: { + type: Number, + default: 300 + }, + + mini: Boolean, + miniToOverlay: Boolean, + miniWidth: { + type: Number, + default: 57 + }, + + breakpoint: { + type: Number, + default: 1023 + }, + showIfAbove: Boolean, + + behavior: { + type: String, + validator: v => ['default', 'desktop', 'mobile'].includes(v), + default: 'default' + }, + + bordered: Boolean, + elevated: Boolean, + contentStyle: [String, Object, Array], + contentClass: [String, Object, Array], + + overlay: Boolean, + persistent: Boolean, + noSwipeOpen: Boolean, + noSwipeClose: Boolean, + noSwipeBackdrop: Boolean + }, + + data () { + const belowBreakpoint = ( + this.behavior === 'mobile' || + (this.behavior !== 'desktop' && this.layout.totalWidth <= this.breakpoint) + ); + + return { + belowBreakpoint, + showing: this.showIfAbove === true && belowBreakpoint === false + ? true + : this.value === true + } + }, + + watch: { + belowBreakpoint (val) { + if (val === true) { // from lg to xs + this.lastDesktopState = this.showing; + this.showing === true && this.hide(false); + } + else if ( + this.overlay === false && + this.behavior !== 'mobile' && + this.lastDesktopState !== false + ) { // from xs to lg + if (this.showing === true) { + this.__applyPosition(0); + this.__applyBackdrop(0); + this.__cleanup(); + } + else { + this.show(false); + } + } + }, + + 'layout.totalWidth' () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable(); + + if (this.layout.container !== true) { + this.clearExecuteWhenScrollable = executeWhenScrollable(this.__updateBelowBreakpoint); + } + else { + this.__updateBelowBreakpoint(); + } + }, + + side (newSide, oldSide) { + if (this.layout.instances[oldSide] === this) { + this.layout.instances[oldSide] = void 0; + this.layout[oldSide].space = false; + this.layout[oldSide].offset = 0; + } + + this.layout.instances[newSide] = this; + this.layout[newSide].size = this.size; + this.layout[newSide].space = this.onLayout; + this.layout[newSide].offset = this.offset; + }, + + behavior () { + this.__updateBelowBreakpoint(); + }, + + breakpoint () { + this.__updateBelowBreakpoint(); + }, + + 'layout.container' (val) { + this.showing === true && this.__preventScroll(val !== true); + val === true && this.__updateBelowBreakpoint(); + }, + + 'layout.scrollbarWidth' () { + this.__applyPosition(this.showing === true ? 0 : void 0); + }, + + offset (val) { + this.__update('offset', val); + }, + + onLayout (val) { + this.$emit('on-layout', val); + this.__update('space', val); + }, + + rightSide () { + this.__applyPosition(); + }, + + size (val) { + this.__applyPosition(); + this.__updateSizeOnLayout(this.miniToOverlay, val); + }, + + miniToOverlay (val) { + this.__updateSizeOnLayout(val, this.size); + }, + + '$q.lang.rtl' () { + this.__applyPosition(); + }, + + mini () { + if (this.value === true) { + this.__animateMini(); + this.layout.__animate(); + } + }, + + isMini (val) { + this.$emit('mini-state', val); + } + }, + + computed: { + rightSide () { + return this.side === 'right' + }, + + otherSide () { + return this.rightSide === true ? 'left' : 'right' + }, + + offset () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === false + ? (this.miniToOverlay === true ? this.miniWidth : this.size) + : 0 + }, + + size () { + return this.isMini === true + ? this.miniWidth + : this.width + }, + + fixed () { + return this.overlay === true || + this.miniToOverlay === true || + this.layout.view.indexOf(this.rightSide ? 'R' : 'L') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + onLayout () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === false + }, + + onScreenOverlay () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === true + }, + + backdropClass () { + return this.showing === false ? 'no-pointer-events' : null + }, + + headerSlot () { + return this.rightSide === true + ? this.layout.rows.top[2] === 'r' + : this.layout.rows.top[0] === 'l' + }, + + footerSlot () { + return this.rightSide === true + ? this.layout.rows.bottom[2] === 'r' + : this.layout.rows.bottom[0] === 'l' + }, + + aboveStyle () { + const css = {}; + + if (this.layout.header.space === true && this.headerSlot === false) { + if (this.fixed === true) { + css.top = `${this.layout.header.offset}px`; + } + else if (this.layout.header.space === true) { + css.top = `${this.layout.header.size}px`; + } + } + + if (this.layout.footer.space === true && this.footerSlot === false) { + if (this.fixed === true) { + css.bottom = `${this.layout.footer.offset}px`; + } + else if (this.layout.footer.space === true) { + css.bottom = `${this.layout.footer.size}px`; + } + } + + return css + }, + + style () { + const style = { width: `${this.size}px` }; + return this.belowBreakpoint === true + ? style + : Object.assign(style, this.aboveStyle) + }, + + classes () { + return `q-drawer--${this.side}` + + (this.bordered === true ? ' q-drawer--bordered' : '') + + ` q-drawer--${this.darkSuffix} q-${this.darkSuffix}` + + (this.showing !== true ? ' q-layout--prevent-focus' : '') + + ( + this.belowBreakpoint === true + ? ' fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding' + : ` q-drawer--${this.isMini === true ? 'mini' : 'standard'}` + + (this.fixed === true || this.onLayout !== true ? ' fixed' : '') + + (this.overlay === true || this.miniToOverlay === true ? ' q-drawer--on-top' : '') + + (this.headerSlot === true ? ' q-drawer--top-padding' : '') + ) + }, + + stateDirection () { + return (this.$q.lang.rtl === true ? -1 : 1) * (this.rightSide === true ? 1 : -1) + }, + + isMini () { + return this.mini === true && this.belowBreakpoint !== true + }, + + onNativeEvents () { + if (this.belowBreakpoint !== true) { + const evt = { + '!click': e => { this.$emit('click', e); } + }; + + mouseEvents.forEach(name => { + evt[name] = e => { + this.qListeners[name] !== void 0 && this.$emit(name, e); + }; + }); + + return evt + } + }, + + onBackdropEvents () { + return { + click: this.hide, + touchmove: stopAndPrevent + } + }, + + hideOnRouteChange () { + return this.persistent !== true && + (this.belowBreakpoint === true || this.onScreenOverlay === true) + }, + + onOpenerEvents () { + return { + touchstart: stopAndPrevent + } + }, + + openDirective () { + const dir = this.$q.lang.rtl === true ? this.side : this.otherSide; + + return [{ + name: 'touch-pan', + value: this.__openByTouch, + modifiers: { + [ dir ]: true, + mouse: true, + prevent: true + } + }] + }, + + contentCloseDirective () { + if (this.noSwipeClose !== true) { + const dir = this.$q.lang.rtl === true ? this.otherSide : this.side; + + return [{ + name: 'touch-pan', + value: this.__closeByTouch, + modifiers: { + [ dir ]: true, + mouse: true + } + }] + } + }, + + backdropCloseDirective () { + if (this.noSwipeBackdrop !== true) { + const dir = this.$q.lang.rtl === true ? this.otherSide : this.side; + + return [{ + name: 'touch-pan', + value: this.__closeByTouch, + modifiers: { + [ dir ]: true, + mouse: true, + mouseAllDir: true + } + }] + } + } + }, + + methods: { + __applyPosition (position) { + if (position === void 0) { + this.$nextTick(() => { + position = this.showing === true ? 0 : this.size; + this.__applyPosition(this.stateDirection * position); + }); + } + else if (this.$refs.content !== void 0) { + if ( + this.layout.container === true && + this.rightSide === true && + (this.belowBreakpoint === true || Math.abs(position) === this.size) + ) { + position += this.stateDirection * this.layout.scrollbarWidth; + } + else if ( + this.layout.container !== true && + this.rightSide === true && + this.belowBreakpoint === true + ) { + position += (this.$q.lang.rtl === true ? -1 : 1) * this.layout.scrollbarWidth; + } + + if (this.__lastPosition !== position) { + this.$refs.content.style.transform = `translateX(${position}px)`; + this.__lastPosition = position; + } + } + }, + + __applyBackdrop (x, retry) { + if (this.$refs.backdrop !== void 0) { + this.$refs.backdrop.style.opacity = + this.lastBackdropOpacity = x * 0.4; + } + else { + // rendered nodes might not have + // picked up this.showing change yet, + // so we need one retry + retry !== true && this.$nextTick(() => { + this.__applyBackdrop(x, true); + }); + } + }, + + __setBackdropVisible (v) { + if (this.$refs.backdrop !== void 0) { + this.$refs.backdrop.classList[v === true ? 'remove' : 'add']('no-pointer-events'); + } + }, + + __setScrollable (v) { + const action = v === true + ? 'remove' + : (this.layout.container !== true ? 'add' : ''); + + action !== '' && document.body.classList[action]('q-body--drawer-toggle'); + }, + + __animateMini () { + if (this.timerMini !== void 0) { + clearTimeout(this.timerMini); + } + else if (this.$el !== void 0) { + this.$el.classList.add('q-drawer--mini-animate'); + } + this.timerMini = setTimeout(() => { + this.$el !== void 0 && this.$el.classList.remove('q-drawer--mini-animate'); + this.timerMini = void 0; + }, 150); + }, + + __openByTouch (evt) { + if (this.showing !== false) { + // some browsers might capture and trigger this + // even if Drawer has just been opened (but animation is still pending) + return + } + + const + width = this.size, + position = between(evt.distance.x, 0, width); + + if (evt.isFinal === true) { + const + el = this.$refs.content, + opened = position >= Math.min(75, width); + + el.classList.remove('no-transition'); + + if (opened === true) { + this.show(); + } + else { + this.layout.__animate(); + this.__applyBackdrop(0); + this.__applyPosition(this.stateDirection * width); + el.classList.remove('q-drawer--delimiter'); + el.classList.add('q-layout--prevent-focus'); + this.__setBackdropVisible(false); + } + + return + } + + this.__applyPosition( + (this.$q.lang.rtl === true ? this.rightSide !== true : this.rightSide) + ? Math.max(width - position, 0) + : Math.min(0, position - width) + ); + this.__applyBackdrop( + between(position / width, 0, 1) + ); + + if (evt.isFirst === true) { + const el = this.$refs.content; + el.classList.add('no-transition'); + el.classList.add('q-drawer--delimiter'); + el.classList.remove('q-layout--prevent-focus'); + this.__setBackdropVisible(true); + } + }, + + __closeByTouch (evt) { + if (this.showing !== true) { + // some browsers might capture and trigger this + // even if Drawer has just been closed (but animation is still pending) + return + } + + const + width = this.size, + dir = evt.direction === this.side, + position = (this.$q.lang.rtl === true ? dir !== true : dir) + ? between(evt.distance.x, 0, width) + : 0; + + if (evt.isFinal === true) { + const opened = Math.abs(position) < Math.min(75, width); + this.$refs.content.classList.remove('no-transition'); + + if (opened === true) { + this.layout.__animate(); + this.__applyBackdrop(1); + this.__applyPosition(0); + } + else { + this.hide(); + } + + return + } + + this.__applyPosition(this.stateDirection * position); + this.__applyBackdrop(between(1 - position / width, 0, 1)); + + if (evt.isFirst === true) { + this.$refs.content.classList.add('no-transition'); + } + }, + + __show (evt, noEvent) { + this.__addHistory(); + + this.__setBackdropVisible(true); + evt !== false && this.layout.__animate(); + this.__applyPosition(0); + + if (this.belowBreakpoint === true) { + const otherSide = this.layout.instances[this.otherSide]; + if (otherSide !== void 0 && otherSide.belowBreakpoint === true) { + otherSide.hide(false); + } + + this.__applyBackdrop(1); + this.layout.container !== true && this.__preventScroll(true); + } + else { + this.__applyBackdrop(0); + evt !== false && this.__setScrollable(false); + } + + this.__registerTimeout(() => { + evt !== false && this.__setScrollable(true); + noEvent !== true && this.$emit('show', evt); + }, duration); + }, + + __hide (evt, noEvent) { + this.__removeHistory(); + + evt !== false && this.layout.__animate(); + + this.__applyBackdrop(0); + this.__applyPosition(this.stateDirection * this.size); + this.__setBackdropVisible(false); + + this.__cleanup(); + + if (noEvent !== true) { + this.__registerTimeout(() => { this.$emit('hide', evt); }, duration); + } + else { + this.__removeTimeout(); + } + }, + + __cleanup () { + this.__preventScroll(false); + this.__setScrollable(true); + }, + + __update (prop, val) { + if (this.layout[this.side][prop] !== val) { + this.layout[this.side][prop] = val; + } + }, + + __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val; + } + }, + + __updateSizeOnLayout (miniToOverlay, size) { + this.__update('size', miniToOverlay === true ? this.miniWidth : size); + }, + + __updateBelowBreakpoint () { + this.__updateLocal('belowBreakpoint', ( + this.behavior === 'mobile' || + (this.behavior !== 'desktop' && this.layout.totalWidth <= this.breakpoint) + )); + } + }, + + created () { + this.__useTimeout('__registerTimeout', '__removeTimeout'); + + this.layout.instances[this.side] = this; + this.__updateSizeOnLayout(this.miniToOverlay, this.size); + this.__update('space', this.onLayout); + this.__update('offset', this.offset); + + if ( + this.showIfAbove === true && + this.value !== true && + this.showing === true && + this.qListeners.input !== void 0 + ) { + this.$emit('input', true); + } + }, + + mounted () { + this.$emit('on-layout', this.onLayout); + this.$emit('mini-state', this.isMini); + + this.lastDesktopState = this.showIfAbove === true; + + const fn = () => { + const action = this.showing === true ? 'show' : 'hide'; + this[`__${action}`](false, true); + }; + + if (this.layout.totalWidth !== 0) { + // make sure that all computed properties + // have been updated before calling __show/__hide() + this.$nextTick(fn); + return + } + + this.watcher = this.$watch('layout.totalWidth', () => { + this.watcher(); + this.watcher = void 0; + + if (this.showing === false && this.showIfAbove === true && this.belowBreakpoint === false) { + this.show(false); + } + else { + fn(); + } + }); + }, + + beforeDestroy () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable(); + this.watcher !== void 0 && this.watcher(); + clearTimeout(this.timerMini); + + this.showing === true && this.__cleanup(); + + if (this.layout.instances[this.side] === this) { + this.layout.instances[this.side] = void 0; + this.__update('size', 0); + this.__update('offset', 0); + this.__update('space', false); + } + }, + + render (h) { + const child = []; + + if (this.belowBreakpoint === true) { + this.noSwipeOpen !== true && child.push( + h('div', { + staticClass: `q-drawer__opener fixed-${this.side}`, + attrs: ariaHidden, + directives: this.openDirective, + on: this.onOpenerEvents + }) + ); + + child.push( + h('div', { + ref: 'backdrop', + staticClass: 'fullscreen q-drawer__backdrop', + class: this.backdropClass, + attrs: ariaHidden, + style: this.lastBackdropOpacity !== void 0 + ? { opacity: this.lastBackdropOpacity } + : null, + on: this.onBackdropEvents, + directives: this.showing === false + ? void 0 + : this.backdropCloseDirective + }) + ); + } + + const content = [ + h('div', { + staticClass: 'q-drawer__content fit ' + (this.layout.container === true ? 'overflow-auto' : 'scroll'), + class: this.contentClass, + style: this.contentStyle + }, this.isMini === true && this.$scopedSlots.mini !== void 0 + ? this.$scopedSlots.mini() + : slot(this, 'default') + ) + ]; + + if (this.elevated === true && this.showing === true) { + content.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ); + } + + child.push( + h('aside', { + ref: 'content', + staticClass: 'q-drawer', + class: this.classes, + style: this.style, + on: this.onNativeEvents, + directives: this.belowBreakpoint === true + ? this.contentCloseDirective + : void 0 + }, content) + ); + + return h('div', { staticClass: 'q-drawer-container' }, child) + } + }); + + const attrs$3 = { role: 'tooltip' }; + + var QTooltip = Vue__default["default"].extend({ + name: 'QTooltip', + + mixins: [ AnchorMixin, TimeoutMixin, ModelToggleMixin, Portal, TransitionMixin ], + + props: { + minHeight: { + type: String, + default: null + }, + minWidth: { + type: String, + default: null + }, + + maxHeight: { + type: String, + default: null + }, + maxWidth: { + type: String, + default: null + }, + + transitionShow: { + default: 'jump-down' + }, + transitionHide: { + default: 'jump-up' + }, + + anchor: { + type: String, + default: 'bottom middle', + validator: validatePosition + }, + self: { + type: String, + default: 'top middle', + validator: validatePosition + }, + offset: { + type: Array, + default: () => [14, 14], + validator: validateOffset + }, + + scrollTarget: { + default: void 0 + }, + + delay: { + type: Number, + default: 0 + }, + + hideDelay: { + type: Number, + default: 0 + } + }, + + computed: { + anchorOrigin () { + return parsePosition(this.anchor, this.$q.lang.rtl) + }, + + selfOrigin () { + return parsePosition(this.self, this.$q.lang.rtl) + }, + + hideOnRouteChange () { + return this.persistent !== true + } + }, + + methods: { + __show (evt) { + this.__showPortal(); + + this.__registerTick(() => { + this.updatePosition(); + this.__configureScrollTarget(); + }); + + if (this.unwatch === void 0) { + this.unwatch = this.$watch( + () => this.$q.screen.width + '|' + this.$q.screen.height + '|' + this.self + '|' + this.anchor + '|' + this.$q.lang.rtl, + this.updatePosition + ); + } + + // should __removeTimeout() if this gets removed + this.__registerTimeout(() => { + this.$emit('show', evt); + }, 300); + }, + + __hide (evt) { + this.__removeTick(); + this.__anchorCleanup(); + + // should __removeTimeout() if this gets removed + this.__registerTimeout(() => { + if (this.showing !== true) { + this.__hidePortal(); + this.$emit('hide', evt); + } + }, 300); + }, + + __anchorCleanup () { + if (this.unwatch !== void 0) { + this.unwatch(); + this.unwatch = void 0; + } + + this.__unconfigureScrollTarget(); + cleanEvt(this, 'tooltipTemp'); + cleanEvt(this, 'tooltipPreventMenu'); + cleanEvt(this, 'anchorTemp'); + }, + + updatePosition () { + if (this.anchorEl === void 0 || this.__portal === void 0) { + return + } + + const el = this.__portal.$el; + + if (el.nodeType === 8) { // IE replaces the comment with delay + setTimeout(this.updatePosition, 25); + return + } + + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition); + this.settingPosition = requestAnimationFrame(() => { + setPosition({ + el, + offset: this.offset, + anchorEl: this.anchorEl, + anchorOrigin: this.anchorOrigin, + selfOrigin: this.selfOrigin, + minHeight: this.minHeight, + minWidth: this.minWidth, + maxHeight: this.maxHeight, + maxWidth: this.maxWidth, + rtl: this.$q.lang.rtl + }); + this.settingPosition = void 0; + }); + }, + + __delayShow (evt) { + if (this.$q.platform.is.mobile === true) { + if (this.showing) { + return + } + + clearSelection(); + document.body.classList.add('non-selectable'); + + const target = this.anchorEl; + const evts = [ 'touchcancel', 'touchend', 'click' ] + .map(e => ([ target, e, '__clearPreventContextMenu', 'passiveCapture' ])) + .concat([ + [ document, 'touchstart', '__delayHide', 'passiveCapture' ] + ]); + + addEvt(this, 'tooltipTemp', evts); + addEvt(this, 'tooltipPreventMenu', [ + [ document, 'contextmenu', 'prevent', 'capture' ] + ]); + } + + this.__registerTimeout(() => { this.show(evt); }, this.delay); + }, + + __delayHide (evt) { + const innerNode = this.__getInnerNode(); + + if (innerNode !== void 0 && evt) { + if (evt.type === 'mouseleave') { + if (innerNode.contains(evt.relatedTarget) === true) { + cleanEvt(this, 'anchorTemp'); + + addEvt(this, 'anchorTemp', [ + [ innerNode, 'mouseleave', '__delayHide', 'passive' ] + ]); + + return + } + } + else if (innerNode.contains(evt.target) === true) { + return + } + } + + if (this.$q.platform.is.mobile === true) { + cleanEvt(this, 'tooltipTemp'); + cleanEvt(this, 'tooltipPreventMenu'); + clearSelection(); + // delay needed otherwise selection still occurs + setTimeout(() => { + document.body.classList.remove('non-selectable'); + }, 10); + } + else { + cleanEvt(this, 'anchorTemp'); + } + + // should __removeTimeout() if this gets removed + this.__registerTimeout(() => { this.hide(evt); }, this.hideDelay); + }, + + __clearPreventContextMenu () { + cleanEvt(this, 'tooltipPreventMenu'); + }, + + __configureAnchorEl () { + if (this.noParentEvent === true || this.anchorEl === void 0) { return } + + const evts = this.$q.platform.is.mobile === true + ? [ + [ this.anchorEl, 'touchstart', '__delayShow', 'passive' ] + ] + : [ + [ this.anchorEl, 'mouseenter', '__delayShow', 'passive' ], + [ this.anchorEl, 'mouseleave', '__delayHide', 'passive' ] + ]; + + addEvt(this, 'anchor', evts); + }, + + __unconfigureScrollTarget () { + this.__changeScrollEvent(); + }, + + __configureScrollTarget () { + if (this.showing === true && (this.anchorEl !== void 0 || this.scrollTarget !== void 0)) { + const fn = this.noParentEvent === true + ? this.updatePosition + : this.hide; + + this.__changeScrollEvent(fn, getScrollTarget(this.anchorEl, this.scrollTarget)); + } + }, + + __renderPortal (h) { + return h('transition', { + props: this.transitionProps + }, [ + this.showing === true ? h('div', { + staticClass: 'q-tooltip__container column no-pointer-events' + }, [ + h('div', { + ref: 'inner', + staticClass: 'q-tooltip q-tooltip--style scroll all-pointer-events', + class: this.contentClass, + style: this.contentStyle, + attrs: attrs$3 + }, slot(this, 'default')) + ]) : null + ]) + } + }, + + created () { + this.__useTick('__registerTick', '__removeTick'); + this.__useTimeout('__registerTimeout'); + }, + + mounted () { + this.__processModelChange(this.value); + }, + + beforeDestroy () { + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition); + } + }); + + const attrs$2 = { role: 'list' }; + + var QList = Vue__default["default"].extend({ + name: 'QList', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + bordered: Boolean, + dense: Boolean, + separator: Boolean, + padding: Boolean + }, + + computed: { + classes () { + return 'q-list' + + (this.bordered === true ? ' q-list--bordered' : '') + + (this.dense === true ? ' q-list--dense' : '') + + (this.separator === true ? ' q-list--separator' : '') + + ` q-list--${this.darkSuffix}` + + (this.padding === true ? ' q-list--padding' : '') + } + }, + + render (h) { + return h('div', { + class: this.classes, + attrs: attrs$2, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QItem = Vue__default["default"].extend({ + name: 'QItem', + + mixins: [ DarkMixin, RouterLinkMixin, TagMixin, ListenersMixin ], + + props: { + active: { + type: Boolean, + default: null + }, + + clickable: Boolean, + dense: Boolean, + insetLevel: Number, + + tabindex: [ String, Number ], + + focused: Boolean, + manualFocus: Boolean + }, + + computed: { + isActionable () { + return this.clickable === true || + this.hasLink === true || + this.tag === 'label' + }, + + isClickable () { + return this.disable !== true && this.isActionable === true + }, + + classes () { + return 'q-item q-item-type row no-wrap' + + (this.dense === true ? ' q-item--dense' : '') + + `q-item--${this.darkSuffix}` + + ( + this.hasLink === true && this.active === null + ? this.linkClass + : ( + this.active === true + ? ` q-item--active${this.activeClass !== void 0 ? ` ${this.activeClass}` : ''} ` + : '' + ) + ) + + (this.disable === true ? ' disabled' : '') + + ( + this.isClickable === true + ? ' q-item--clickable q-link cursor-pointer ' + + (this.manualFocus === true ? 'q-manual-focusable' : 'q-focusable q-hoverable') + + (this.focused === true ? ' q-manual-focusable--focused' : '') + : '' + ) + }, + + style () { + if (this.insetLevel !== void 0) { + const dir = this.$q.lang.rtl === true ? 'Right' : 'Left'; + return { + ['padding' + dir]: (16 + this.insetLevel * 56) + 'px' + } + } + }, + + onEvents () { + return { + ...this.qListeners, + focus: this.__onFocus, + click: this.__onClick, + keyup: this.__onKeyup + } + } + }, + + methods: { + __onClick (e) { + if (this.isClickable === true) { + this.__refocus(); + this.__navigateOnClick(e); + } + }, + + __onFocus (e) { + this.isClickable === true && this.__refocus(); + this.qListeners.focus !== void 0 && this.$emit('focus', e); + }, + + __onKeyup (e) { + if (this.isClickable === true && isKeyCode(e, 13) === true) { + stopAndPrevent(e); + + // for click trigger + const evt = new MouseEvent('click', e); + this.$el.dispatchEvent(evt); + } + + this.$emit('keyup', e); + }, + + __getContent (h) { + const child = uniqueSlot(this, 'default', []); + + this.isClickable === true && child.unshift( + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: 'blurTarget' }) + ); + + return child + }, + + __refocus () { + if ( + this.$q.interaction.isPointer === true && + this.$refs.blurTarget !== void 0 && + document.activeElement === this.$el + ) { + this.$refs.blurTarget.focus(); + } + else if ( + this.$q.interaction.isKeyboard === true && + document.activeElement === this.$refs.blurTarget + ) { + this.$el.focus(); + } + } + }, + + render (h) { + const data = { + class: this.classes, + style: this.style, + attrs: { role: 'listitem' }, + on: this.onEvents + }; + + if (this.isClickable === true) { + data.attrs.tabindex = this.tabindex || '0'; + Object.assign(data.attrs, this.linkAttrs); + } + else if (this.isActionable === true) { + data.attrs['aria-disabled'] = 'true'; + } + + return h( + this.linkTag, + data, + this.__getContent(h) + ) + } + }); + + var QItemSection = Vue__default["default"].extend({ + name: 'QItemSection', + + mixins: [ ListenersMixin ], + + props: { + avatar: Boolean, + thumbnail: Boolean, + side: Boolean, + top: Boolean, + noWrap: Boolean + }, + + computed: { + classes () { + const side = this.avatar || this.side || this.thumbnail; + + return { + 'q-item__section--top': this.top, + 'q-item__section--avatar': this.avatar, + 'q-item__section--thumbnail': this.thumbnail, + 'q-item__section--side': side, + 'q-item__section--nowrap': this.noWrap, + 'q-item__section--main': !side, + [`justify-${this.top ? 'start' : 'center'}`]: true + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-item__section column', + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + function run (e, btn, vm) { + if (btn.handler) { + btn.handler(e, vm, vm.caret); + } + else { + vm.runCmd(btn.cmd, btn.param); + } + } + + function __getGroup (h, children) { + return h('div', { + staticClass: 'q-editor__toolbar-group' + }, children) + } + + function getBtn (h, vm, btn, clickHandler, active = false) { + const + toggled = active || (btn.type === 'toggle' + ? (btn.toggled ? btn.toggled(vm) : btn.cmd && vm.caret.is(btn.cmd, btn.param)) + : false), + child = [], + events = { + click (e) { + clickHandler && clickHandler(); + run(e, btn, vm); + } + }; + + if (btn.tip && vm.$q.platform.is.desktop) { + const Key = btn.key + ? h('div', [h('small', `(CTRL + ${String.fromCharCode(btn.key)})`)]) + : null; + child.push( + h(QTooltip, { props: { delay: 1000 } }, [ + h('div', { domProps: { innerHTML: btn.tip } }), + Key + ]) + ); + } + + return h(QBtn, { + props: { + ...vm.buttonProps, + icon: btn.icon !== null ? btn.icon : void 0, + color: toggled ? btn.toggleColor || vm.toolbarToggleColor : btn.color || vm.toolbarColor, + textColor: toggled && !vm.toolbarPush ? null : btn.textColor || vm.toolbarTextColor, + label: btn.label, + disable: btn.disable ? (typeof btn.disable === 'function' ? btn.disable(vm) : true) : false, + size: 'sm' + }, + on: events + }, child) + } + + function getDropdown (h, vm, btn) { + const onlyIcons = btn.list === 'only-icons'; + let + label = btn.label, + icon = btn.icon !== null ? btn.icon : void 0, + contentClass, + Items; + + function closeDropdown () { + Dropdown.componentInstance.hide(); + } + + if (onlyIcons) { + Items = btn.options.map(btn => { + const active = btn.type === void 0 + ? vm.caret.is(btn.cmd, btn.param) + : false; + + if (active) { + label = btn.tip; + icon = btn.icon !== null ? btn.icon : void 0; + } + return getBtn(h, vm, btn, closeDropdown, active) + }); + contentClass = vm.toolbarBackgroundClass; + Items = [ + __getGroup(h, Items) + ]; + } + else { + const activeClass = vm.toolbarToggleColor !== void 0 + ? `text-${vm.toolbarToggleColor}` + : null; + const inactiveClass = vm.toolbarTextColor !== void 0 + ? `text-${vm.toolbarTextColor}` + : null; + + const noIcons = btn.list === 'no-icons'; + + Items = btn.options.map(btn => { + const disable = btn.disable ? btn.disable(vm) : false; + const active = btn.type === void 0 + ? vm.caret.is(btn.cmd, btn.param) + : false; + + if (active) { + label = btn.tip; + icon = btn.icon !== null ? btn.icon : void 0; + } + + const htmlTip = btn.htmlTip; + + return h( + QItem, + { + props: { active, activeClass, clickable: true, disable: disable, dense: true }, + on: { + click (e) { + closeDropdown(); + vm.$refs.content && vm.$refs.content.focus(); + vm.caret.restore(); + run(e, btn, vm); + } + } + }, + [ + noIcons === true + ? null + : h(QItemSection, { + class: active ? activeClass : inactiveClass, + props: { side: true } + }, [ + h(QIcon, { props: { name: btn.icon !== null ? btn.icon : void 0 } }) + ]), + + h(QItemSection, [ + htmlTip + ? h('div', { + staticClass: 'text-no-wrap', + domProps: { innerHTML: btn.htmlTip } + }) + : ( + btn.tip + ? h('div', { staticClass: 'text-no-wrap' }, [ btn.tip ]) + : null + ) + ]) + ] + ) + }); + contentClass = [vm.toolbarBackgroundClass, inactiveClass]; + Items = [ + h(QList, [ Items ]) + ]; + } + + const highlight = btn.highlight && label !== btn.label; + const Dropdown = h( + QBtnDropdown, + { + props: { + ...vm.buttonProps, + noCaps: true, + noWrap: true, + color: highlight ? vm.toolbarToggleColor : vm.toolbarColor, + textColor: highlight && !vm.toolbarPush ? null : vm.toolbarTextColor, + label: btn.fixedLabel ? btn.label : label, + icon: btn.fixedIcon ? (btn.icon !== null ? btn.icon : void 0) : icon, + contentClass + } + }, + Items + ); + return Dropdown + } + + function getToolbar (h, vm) { + if (vm.caret) { + return vm.buttons + .filter(f => { + return !vm.isViewingSource || f.find(fb => fb.cmd === 'viewsource') + }) + .map(group => __getGroup( + h, + group.map(btn => { + if (vm.isViewingSource && btn.cmd !== 'viewsource') { + return false + } + + if (btn.type === 'slot') { + return slot(vm, btn.slot) + } + + if (btn.type === 'dropdown') { + return getDropdown(h, vm, btn) + } + + return getBtn(h, vm, btn) + }) + )) + } + } + + function getFonts (defaultFont, defaultFontLabel, defaultFontIcon, fonts = {}) { + const aliases = Object.keys(fonts); + if (aliases.length === 0) { + return {} + } + + const def = { + default_font: { + cmd: 'fontName', + param: defaultFont, + icon: defaultFontIcon, + tip: defaultFontLabel + } + }; + + aliases.forEach(alias => { + const name = fonts[alias]; + def[alias] = { + cmd: 'fontName', + param: name, + icon: defaultFontIcon, + tip: name, + htmlTip: `${name}` + }; + }); + + return def + } + + function getLinkEditor (h, vm, ie11) { + if (vm.caret) { + const color = vm.toolbarColor || vm.toolbarTextColor; + let link = vm.editLinkUrl; + const updateLink = () => { + vm.caret.restore(); + + if (link !== vm.editLinkUrl) { + document.execCommand('createLink', false, link === '' ? ' ' : link); + } + + vm.editLinkUrl = null; + + ie11 === true && vm.$nextTick(vm.__onInput); + }; + + return [ + h('div', { staticClass: 'q-mx-xs', 'class': `text-${color}` }, [`${vm.$q.lang.editor.url}: `]), + h('input', { + key: 'qedt_btm_input', + staticClass: 'col q-editor__link-input', + domProps: { + value: link + }, + on: { + input: e => { + stop(e); + link = e.target.value; + }, + keydown: event => { + if (shouldIgnoreKey(event) === true) { + return + } + + switch (event.keyCode) { + case 13: // ENTER key + prevent(event); + return updateLink() + case 27: // ESCAPE key + prevent(event); + vm.caret.restore(); + if (!vm.editLinkUrl || vm.editLinkUrl === 'https://') { + document.execCommand('unlink'); + } + vm.editLinkUrl = null; + break + } + } + } + }), + __getGroup(h, [ + h(QBtn, { + key: 'qedt_btm_rem', + attrs: { tabindex: -1 }, + props: { + ...vm.buttonProps, + label: vm.$q.lang.label.remove, + noCaps: true + }, + on: { + click: () => { + vm.caret.restore(); + document.execCommand('unlink'); + vm.editLinkUrl = null; + + ie11 === true && vm.$nextTick(vm.__onInput); + } + } + }), + h(QBtn, { + key: 'qedt_btm_upd', + props: { + ...vm.buttonProps, + label: vm.$q.lang.label.update, + noCaps: true + }, + on: { + click: updateLink + } + }) + ]) + ] + } + } + + function getBlockElement (el, parent) { + if (parent && el === parent) { + return null + } + + const nodeName = el.nodeName.toLowerCase(); + + if (['div', 'li', 'ul', 'ol', 'blockquote'].includes(nodeName) === true) { + return el + } + + const + style = window.getComputedStyle + ? window.getComputedStyle(el) + : el.currentStyle, + display = style.display; + + if (display === 'block' || display === 'table') { + return el + } + + return getBlockElement(el.parentNode) + } + + function isChildOf (el, parent, orSame) { + return !el || el === document.body + ? false + : (orSame === true && el === parent) || (parent === document ? document.body : parent).contains(el.parentNode) + } + + function createRange (node, chars, range) { + if (!range) { + range = document.createRange(); + range.selectNode(node); + range.setStart(node, 0); + } + + if (chars.count === 0) { + range.setEnd(node, chars.count); + } + else if (chars.count > 0) { + if (node.nodeType === Node.TEXT_NODE) { + if (node.textContent.length < chars.count) { + chars.count -= node.textContent.length; + } + else { + range.setEnd(node, chars.count); + chars.count = 0; + } + } + else { + for (let lp = 0; chars.count !== 0 && lp < node.childNodes.length; lp++) { + range = createRange(node.childNodes[lp], chars, range); + } + } + } + + return range + } + + const urlRegex = /^https?:\/\//; + + class Caret { + constructor (el, vm) { + this.el = el; + this.vm = vm; + this._range = null; + } + + get selection () { + if (this.el) { + const sel = document.getSelection(); + + // only when the selection in element + if (isChildOf(sel.anchorNode, this.el, true) && isChildOf(sel.focusNode, this.el, true)) { + return sel + } + } + + return null + } + + get hasSelection () { + return this.selection !== null + ? this.selection.toString().length > 0 + : false + } + + get range () { + const sel = this.selection; + + if (sel !== null && sel.rangeCount) { + return sel.getRangeAt(0) + } + + return this._range + } + + get parent () { + const range = this.range; + + if (range !== null) { + const node = range.startContainer; + + return node.nodeType === document.ELEMENT_NODE + ? node + : node.parentNode + } + + return null + } + + get blockParent () { + const parent = this.parent; + + if (parent !== null) { + return getBlockElement(parent, this.el) + } + + return null + } + + save (range = this.range) { + if (range !== null) { + this._range = range; + } + } + + restore (range = this._range) { + const + r = document.createRange(), + sel = document.getSelection(); + + if (range !== null) { + r.setStart(range.startContainer, range.startOffset); + r.setEnd(range.endContainer, range.endOffset); + sel.removeAllRanges(); + sel.addRange(r); + } + else { + sel.selectAllChildren(this.el); + sel.collapseToEnd(); + } + } + + savePosition () { + let charCount = -1, node; + const + selection = document.getSelection(), + parentEl = this.el.parentNode; + + if (selection.focusNode && isChildOf(selection.focusNode, parentEl)) { + node = selection.focusNode; + charCount = selection.focusOffset; + + while (node && node !== parentEl) { + if (node !== this.el && node.previousSibling) { + node = node.previousSibling; + charCount += node.textContent.length; + } + else { + node = node.parentNode; + } + } + } + + this.savedPos = charCount; + } + + restorePosition (length = 0) { + if (this.savedPos > 0 && this.savedPos < length) { + const + selection = window.getSelection(), + range = createRange(this.el, { count: this.savedPos }); + + if (range) { + range.collapse(false); + selection.removeAllRanges(); + selection.addRange(range); + } + } + } + + hasParent (name, spanLevel) { + const el = spanLevel + ? this.parent + : this.blockParent; + + return el !== null + ? el.nodeName.toLowerCase() === name.toLowerCase() + : false + } + + hasParents (list, recursive, el = this.parent) { + if (el === null) { + return false + } + + if (list.includes(el.nodeName.toLowerCase()) === true) { + return true + } + + return recursive === true + ? this.hasParents(list, recursive, el.parentNode) + : false + } + + is (cmd, param) { + if (this.selection === null) { + return false + } + + switch (cmd) { + case 'formatBlock': + if (param === 'DIV' && this.parent === this.el) { + return true + } + return this.hasParent(param, param === 'PRE') + case 'link': + return this.hasParent('A', true) + case 'fontSize': + return document.queryCommandValue(cmd) === param + case 'fontName': + const res = document.queryCommandValue(cmd); + return res === `"${param}"` || res === param + case 'fullscreen': + return this.vm.inFullscreen + case 'viewsource': + return this.vm.isViewingSource + case void 0: + return false + default: + const state = document.queryCommandState(cmd); + return param !== void 0 ? state === param : state + } + } + + getParentAttribute (attrib) { + if (this.parent !== null) { + return this.parent.getAttribute(attrib) + } + + return null + } + + can (name) { + if (name === 'outdent') { + return this.hasParents(['blockquote', 'li'], true) + } + + if (name === 'indent') { + return this.hasParents(['li'], true) + } + + if (name === 'link') { + return this.selection !== null || this.is('link') + } + } + + apply (cmd, param, done = noop) { + if (cmd === 'formatBlock') { + if (['BLOCKQUOTE', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(param) && this.is(cmd, param)) { + cmd = 'outdent'; + param = null; + } + + if (param === 'PRE' && this.is(cmd, 'PRE')) { + param = 'P'; + } + } + else if (cmd === 'print') { + done(); + + const win = window.open(); + + win.document.write(` + + + + Print - ${document.title} + + +
${this.el.innerHTML}
+ + + `); + win.print(); + win.close(); + + return + } + else if (cmd === 'link') { + const link = this.getParentAttribute('href'); + + if (link === null) { + const selection = this.selectWord(this.selection); + const url = selection ? selection.toString() : ''; + + if (!url.length) { + if (!this.range || !this.range.cloneContents().querySelector('img')) { + return + } + } + + this.vm.editLinkUrl = urlRegex.test(url) ? url : 'https://'; + document.execCommand('createLink', false, this.vm.editLinkUrl); + + this.save(selection.getRangeAt(0)); + } + else { + this.vm.editLinkUrl = link; + + this.range.selectNodeContents(this.parent); + this.save(); + } + + return + } + else if (cmd === 'fullscreen') { + this.vm.toggleFullscreen(); + done(); + + return + } + else if (cmd === 'viewsource') { + this.vm.isViewingSource = this.vm.isViewingSource === false; + this.vm.__setContent(this.vm.value); + done(); + + return + } + + document.execCommand(cmd, false, param); + + done(); + } + + selectWord (sel) { + if (sel === null || sel.isCollapsed !== true || /* IE 11 */ sel.modify === void 0) { + return sel + } + + // Detect if selection is backwards + const range = document.createRange(); + range.setStart(sel.anchorNode, sel.anchorOffset); + range.setEnd(sel.focusNode, sel.focusOffset); + const direction = range.collapsed ? ['backward', 'forward'] : ['forward', 'backward']; + range.detach(); + + // modify() works on the focus of the selection + const + endNode = sel.focusNode, + endOffset = sel.focusOffset; + sel.collapse(sel.anchorNode, sel.anchorOffset); + sel.modify('move', direction[0], 'character'); + sel.modify('move', direction[1], 'word'); + sel.extend(endNode, endOffset); + sel.modify('extend', direction[1], 'character'); + sel.modify('extend', direction[0], 'word'); + + return sel + } + } + + const + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + notPlainObject = new Set( + ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp'] + .map(name => '[object ' + name + ']') + ); + + function isPlainObject (obj) { + if (obj !== Object(obj) || notPlainObject.has(toString.call(obj)) === true) { + return false + } + + if ( + obj.constructor && + hasOwn.call(obj, 'constructor') === false && + hasOwn.call(obj.constructor.prototype, 'isPrototypeOf') === false + ) { + return false + } + + let key; + for (key in obj) {} + + return key === void 0 || hasOwn.call(obj, key) + } + + function extend () { + let + options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + deep = false; + const length = arguments.length; + + if (typeof target === 'boolean') { + deep = target; + target = arguments[1] || {}; + i = 2; + } + + if (Object(target) !== target && typeof target !== 'function') { + target = {}; + } + + if (length === i) { + target = this; + i--; + } + + for (; i < length; i++) { + if ((options = arguments[i]) !== null) { + for (name in options) { + src = target[name]; + copy = options[name]; + + if (target === copy) { + continue + } + + if (deep === true && copy && ((copyIsArray = Array.isArray(copy)) || isPlainObject(copy) === true)) { + if (copyIsArray === true) { + clone = Array.isArray(src) === true ? src : []; + } + else { + clone = isPlainObject(src) === true ? src : {}; + } + + target[name] = extend(deep, clone, copy); + } + else if (copy !== void 0) { + target[name] = copy; + } + } + } + } + + return target + } + + var QEditor = Vue__default["default"].extend({ + name: 'QEditor', + + mixins: [ ListenersMixin, FullscreenMixin, DarkMixin ], + + directives: { + KeyGroupNavigation + }, + + props: { + value: { + type: String, + required: true + }, + readonly: Boolean, + disable: Boolean, + minHeight: { + type: String, + default: '10rem' + }, + maxHeight: String, + height: String, + definitions: Object, + fonts: Object, + placeholder: String, + + toolbar: { + type: Array, + validator: v => v.length === 0 || v.every(group => group.length), + default () { + return [ + ['left', 'center', 'right', 'justify'], + ['bold', 'italic', 'underline', 'strike'], + ['undo', 'redo'] + ] + } + }, + toolbarColor: String, + toolbarBg: String, + toolbarTextColor: String, + toolbarToggleColor: { + type: String, + default: 'primary' + }, + toolbarOutline: Boolean, + toolbarPush: Boolean, + toolbarRounded: Boolean, + + paragraphTag: { + type: String, + validator: v => ['div', 'p'].includes(v), + default: 'div' + }, + + contentStyle: Object, + contentClass: [Object, Array, String], + + square: Boolean, + flat: Boolean, + dense: Boolean + }, + + computed: { + editable () { + return !this.readonly && !this.disable + }, + + hasToolbar () { + return this.toolbar && this.toolbar.length > 0 + }, + + toolbarBackgroundClass () { + if (this.toolbarBg) { + return `bg-${this.toolbarBg}` + } + }, + + buttonProps () { + const flat = this.toolbarOutline !== true && + this.toolbarPush !== true; + + return { + type: 'a', + flat, + noWrap: true, + outline: this.toolbarOutline, + push: this.toolbarPush, + rounded: this.toolbarRounded, + dense: true, + color: this.toolbarColor, + disable: !this.editable, + size: 'sm' + } + }, + + buttonDef () { + const + e = this.$q.lang.editor, + i = this.$q.iconSet.editor; + + return { + bold: { cmd: 'bold', icon: i.bold, tip: e.bold, key: 66 }, + italic: { cmd: 'italic', icon: i.italic, tip: e.italic, key: 73 }, + strike: { cmd: 'strikeThrough', icon: i.strikethrough, tip: e.strikethrough, key: 83 }, + underline: { cmd: 'underline', icon: i.underline, tip: e.underline, key: 85 }, + unordered: { cmd: 'insertUnorderedList', icon: i.unorderedList, tip: e.unorderedList }, + ordered: { cmd: 'insertOrderedList', icon: i.orderedList, tip: e.orderedList }, + subscript: { cmd: 'subscript', icon: i.subscript, tip: e.subscript, htmlTip: 'x2' }, + superscript: { cmd: 'superscript', icon: i.superscript, tip: e.superscript, htmlTip: 'x2' }, + link: { cmd: 'link', disable: vm => vm.caret && !vm.caret.can('link'), icon: i.hyperlink, tip: e.hyperlink, key: 76 }, + fullscreen: { cmd: 'fullscreen', icon: i.toggleFullscreen, tip: e.toggleFullscreen, key: 70 }, + viewsource: { cmd: 'viewsource', icon: i.viewSource, tip: e.viewSource }, + + quote: { cmd: 'formatBlock', param: 'BLOCKQUOTE', icon: i.quote, tip: e.quote, key: 81 }, + left: { cmd: 'justifyLeft', icon: i.left, tip: e.left }, + center: { cmd: 'justifyCenter', icon: i.center, tip: e.center }, + right: { cmd: 'justifyRight', icon: i.right, tip: e.right }, + justify: { cmd: 'justifyFull', icon: i.justify, tip: e.justify }, + + print: { type: 'no-state', cmd: 'print', icon: i.print, tip: e.print, key: 80 }, + outdent: { type: 'no-state', disable: vm => vm.caret && !vm.caret.can('outdent'), cmd: 'outdent', icon: i.outdent, tip: e.outdent }, + indent: { type: 'no-state', disable: vm => vm.caret && !vm.caret.can('indent'), cmd: 'indent', icon: i.indent, tip: e.indent }, + removeFormat: { type: 'no-state', cmd: 'removeFormat', icon: i.removeFormat, tip: e.removeFormat }, + hr: { type: 'no-state', cmd: 'insertHorizontalRule', icon: i.hr, tip: e.hr }, + undo: { type: 'no-state', cmd: 'undo', icon: i.undo, tip: e.undo, key: 90 }, + redo: { type: 'no-state', cmd: 'redo', icon: i.redo, tip: e.redo, key: 89 }, + + h1: { cmd: 'formatBlock', param: 'H1', icon: i.heading1 || i.heading, tip: e.heading1, htmlTip: `

${e.heading1}

` }, + h2: { cmd: 'formatBlock', param: 'H2', icon: i.heading2 || i.heading, tip: e.heading2, htmlTip: `

${e.heading2}

` }, + h3: { cmd: 'formatBlock', param: 'H3', icon: i.heading3 || i.heading, tip: e.heading3, htmlTip: `

${e.heading3}

` }, + h4: { cmd: 'formatBlock', param: 'H4', icon: i.heading4 || i.heading, tip: e.heading4, htmlTip: `

${e.heading4}

` }, + h5: { cmd: 'formatBlock', param: 'H5', icon: i.heading5 || i.heading, tip: e.heading5, htmlTip: `
${e.heading5}
` }, + h6: { cmd: 'formatBlock', param: 'H6', icon: i.heading6 || i.heading, tip: e.heading6, htmlTip: `
${e.heading6}
` }, + p: { cmd: 'formatBlock', param: this.paragraphTag.toUpperCase(), icon: i.heading, tip: e.paragraph }, + code: { cmd: 'formatBlock', param: 'PRE', icon: i.code, htmlTip: `${e.code}` }, + + 'size-1': { cmd: 'fontSize', param: '1', icon: i.size1 || i.size, tip: e.size1, htmlTip: `${e.size1}` }, + 'size-2': { cmd: 'fontSize', param: '2', icon: i.size2 || i.size, tip: e.size2, htmlTip: `${e.size2}` }, + 'size-3': { cmd: 'fontSize', param: '3', icon: i.size3 || i.size, tip: e.size3, htmlTip: `${e.size3}` }, + 'size-4': { cmd: 'fontSize', param: '4', icon: i.size4 || i.size, tip: e.size4, htmlTip: `${e.size4}` }, + 'size-5': { cmd: 'fontSize', param: '5', icon: i.size5 || i.size, tip: e.size5, htmlTip: `${e.size5}` }, + 'size-6': { cmd: 'fontSize', param: '6', icon: i.size6 || i.size, tip: e.size6, htmlTip: `${e.size6}` }, + 'size-7': { cmd: 'fontSize', param: '7', icon: i.size7 || i.size, tip: e.size7, htmlTip: `${e.size7}` } + } + }, + + buttons () { + const userDef = this.definitions || {}; + const def = this.definitions || this.fonts + ? extend( + true, + {}, + this.buttonDef, + userDef, + getFonts( + this.defaultFont, + this.$q.lang.editor.defaultFont, + this.$q.iconSet.editor.font, + this.fonts + ) + ) + : this.buttonDef; + + return this.toolbar.map( + group => group.map(token => { + if (token.options) { + return { + type: 'dropdown', + icon: token.icon, + label: token.label, + size: 'sm', + dense: true, + fixedLabel: token.fixedLabel, + fixedIcon: token.fixedIcon, + highlight: token.highlight, + list: token.list, + options: token.options.map(item => def[item]) + } + } + + const obj = def[token]; + + if (obj) { + return obj.type === 'no-state' || (userDef[token] && ( + obj.cmd === void 0 || (this.buttonDef[obj.cmd] && this.buttonDef[obj.cmd].type === 'no-state') + )) + ? obj + : Object.assign({ type: 'toggle' }, obj) + } + else { + return { + type: 'slot', + slot: token + } + } + }) + ) + }, + + keys () { + const + k = {}, + add = btn => { + if (btn.key) { + k[btn.key] = { + cmd: btn.cmd, + param: btn.param + }; + } + }; + + this.buttons.forEach(group => { + group.forEach(token => { + if (token.options) { + token.options.forEach(add); + } + else { + add(token); + } + }); + }); + return k + }, + + innerStyle () { + return this.inFullscreen + ? this.contentStyle + : [ + { + minHeight: this.minHeight, + height: this.height, + maxHeight: this.maxHeight + }, + this.contentStyle + ] + }, + + classes () { + return `q-editor q-editor--${this.isViewingSource === true ? 'source' : 'default'}` + + (this.disable === true ? ' disabled' : '') + + (this.inFullscreen === true ? ' fullscreen column' : '') + + (this.square === true ? ' q-editor--square no-border-radius' : '') + + (this.flat === true ? ' q-editor--flat' : '') + + (this.dense === true ? ' q-editor--dense' : '') + + ` q-editor--${this.darkSuffix} q-${this.darkSuffix}` + }, + + innerClass () { + return [ + this.contentClass, + { col: this.inFullscreen, 'overflow-auto': this.inFullscreen || this.maxHeight } + ] + }, + + attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + }, + + onEditor () { + return { + focusin: this.__onFocusin, + focusout: this.__onFocusout + } + } + }, + + data () { + return { + lastEmit: this.value, + editLinkUrl: null, + isViewingSource: false + } + }, + + watch: { + value (v) { + if (this.lastEmit !== v) { + this.lastEmit = v; + this.__setContent(v, true); + } + } + }, + + methods: { + __onInput () { + if (this.$refs.content !== void 0) { + const val = this.isViewingSource === true + ? this.$refs.content.innerText + : this.$refs.content.innerHTML; + + if (val !== this.value) { + this.lastEmit = val; + this.$emit('input', val); + } + } + }, + + __onKeydown (e) { + this.$emit('keydown', e); + + if (e.ctrlKey !== true || shouldIgnoreKey(e) === true) { + this.refreshToolbar(); + this.$q.platform.is.ie && this.$nextTick(this.__onInput); + return + } + + const key = e.keyCode; + const target = this.keys[key]; + if (target !== void 0) { + const { cmd, param } = target; + stopAndPrevent(e); + this.runCmd(cmd, param, false); + } + }, + + __onClick (e) { + this.refreshToolbar(); + this.$emit('click', e); + }, + + __onBlur (e) { + if (this.$refs.content !== void 0) { + const { scrollTop, scrollHeight } = this.$refs.content; + this.__offsetBottom = scrollHeight - scrollTop; + } + this.$q.platform.is.ie !== true && this.caret.save(); + this.$emit('blur', e); + }, + + __onFocus (e) { + this.$nextTick(() => { + if (this.$refs.content !== void 0 && this.__offsetBottom !== void 0) { + this.$refs.content.scrollTop = this.$refs.content.scrollHeight - this.__offsetBottom; + } + }); + this.$emit('focus', e); + }, + + __onFocusin (e) { + if ( + this.$el.contains(e.target) === true && + ( + e.relatedTarget === null || + this.$el.contains(e.relatedTarget) !== true + ) + ) { + const prop = `inner${this.isViewingSource === true ? 'Text' : 'HTML'}`; + this.caret.restorePosition(this.$refs.content[prop].length); + this.refreshToolbar(); + } + }, + + __onFocusout (e) { + if ( + this.$el.contains(e.target) === true && + ( + e.relatedTarget === null || + this.$el.contains(e.relatedTarget) !== true + ) + ) { + this.caret.savePosition(); + this.refreshToolbar(); + } + }, + + // mousedown, touchstart + __onPointerStart (e) { + this.__offsetBottom = void 0; + this.qListeners[e.type] !== void 0 && this.$emit(e.type, e); + }, + + __onSelectionchange () { + this.caret.save(); + }, + + runCmd (cmd, param, update = true) { + this.focus(); + this.caret.restore(); + this.caret.apply(cmd, param, () => { + this.focus(); + this.caret.save(); + if (this.$q.platform.is.ie === true || this.$q.platform.is.edge === true) { + this.$nextTick(this.__onInput); + } + if (update) { + this.refreshToolbar(); + } + }); + }, + + refreshToolbar () { + setTimeout(() => { + this.editLinkUrl = null; + this.$forceUpdate(); + }, 1); + }, + + focus () { + this.$refs.content !== void 0 && this.$refs.content.focus({ preventScroll: true }); + }, + + getContentEl () { + return this.$refs.content + }, + + __setContent (v, restorePosition) { + if (this.$refs.content !== void 0) { + if (restorePosition === true) { + this.caret.savePosition(); + } + + const prop = `inner${this.isViewingSource === true ? 'Text' : 'HTML'}`; + this.$refs.content[prop] = v; + + if (restorePosition === true) { + this.caret.restorePosition(this.$refs.content[prop].length); + this.refreshToolbar(); + } + } + } + }, + + created () { + if (isSSR === false) { + document.execCommand('defaultParagraphSeparator', false, this.paragraphTag); + this.defaultFont = window.getComputedStyle(document.body).fontFamily; + } + }, + + mounted () { + this.caret = new Caret(this.$refs.content, this); + this.__setContent(this.value); + this.refreshToolbar(); + + document.addEventListener('selectionchange', this.__onSelectionchange); + }, + + beforeDestroy () { + document.removeEventListener('selectionchange', this.__onSelectionchange); + }, + + render (h) { + let toolbars; + + if (this.hasToolbar) { + const bars = [ + h('div', { + key: 'qedt_top', + staticClass: 'q-editor__toolbar row no-wrap scroll-x', + class: this.toolbarBackgroundClass + }, getToolbar(h, this)) + ]; + + this.editLinkUrl !== null && bars.push( + h('div', { + key: 'qedt_btm', + staticClass: 'q-editor__toolbar row no-wrap items-center scroll-x', + class: this.toolbarBackgroundClass + }, getLinkEditor(h, this, this.$q.platform.is.ie)) + ); + + toolbars = h('div', { + key: 'toolbar_ctainer', + staticClass: 'q-editor__toolbars-container relative-position', + directives: [ KeyGroupNavigation ] + }, bars); + } + + const on = { + ...this.qListeners, + input: this.__onInput, + keydown: this.__onKeydown, + click: this.__onClick, + blur: this.__onBlur, + focus: this.__onFocus, + + // clean saved scroll position + mousedown: this.__onPointerStart, + touchstart: this.__onPointerStart + }; + + return h('div', { + style: { + height: this.inFullscreen === true ? '100%' : null + }, + class: this.classes, + attrs: this.attrs, + on: this.onEditor + }, [ + toolbars, + + h( + 'div', + { + ref: 'content', + staticClass: 'q-editor__content', + style: this.innerStyle, + class: this.innerClass, + attrs: { + contenteditable: this.editable, + placeholder: this.placeholder + }, + domProps: isSSR + ? { innerHTML: this.value } + : void 0, + on + } + ) + ]) + } + }); + + var QItemLabel = Vue__default["default"].extend({ + name: 'QItemLabel', + + mixins: [ ListenersMixin ], + + props: { + overline: Boolean, + caption: Boolean, + header: Boolean, + lines: [ Number, String ] + }, + + computed: { + classes () { + return { + 'q-item__label--overline text-overline': this.overline, + 'q-item__label--caption text-caption': this.caption, + 'q-item__label--header': this.header, + 'ellipsis': parseInt(this.lines, 10) === 1 + } + }, + + style () { + if (this.lines !== void 0 && parseInt(this.lines, 10) > 1) { + return { + overflow: 'hidden', + display: '-webkit-box', + '-webkit-box-orient': 'vertical', + '-webkit-line-clamp': this.lines + } + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-item__label', + style: this.style, + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QSlideTransition = Vue__default["default"].extend({ + name: 'QSlideTransition', + + props: { + appear: Boolean, + duration: { + type: Number, + default: 300 + } + }, + + methods: { + __begin (el, height, done) { + el.style.overflowY = 'hidden'; + if (height !== void 0) { + el.style.height = `${height}px`; + } + el.style.transition = `height ${this.duration}ms cubic-bezier(.25, .8, .50, 1)`; + + this.animating = true; + this.done = done; + }, + + __end (el, event) { + el.style.overflowY = null; + el.style.height = null; + el.style.transition = null; + this.__cleanup(); + event !== this.lastEvent && this.$emit(event); + }, + + __cleanup () { + this.done && this.done(); + this.done = null; + this.animating = false; + + clearTimeout(this.timer); + clearTimeout(this.timerFallback); + this.el !== void 0 && this.el.removeEventListener('transitionend', this.animListener); + this.animListener = null; + } + }, + + beforeDestroy () { + this.animating && this.__cleanup(); + }, + + render (h) { + return h('transition', { + key: 'tr', + props: { + css: false, + appear: this.appear + }, + on: cache(this, 'tr', { + enter: (el, done) => { + let pos = 0; + this.el = el; + + if (this.animating === true) { + this.__cleanup(); + pos = el.offsetHeight === el.scrollHeight ? 0 : void 0; + } + else { + this.lastEvent = 'hide'; + } + + this.__begin(el, pos, done); + + this.timer = setTimeout(() => { + el.style.height = `${el.scrollHeight}px`; + this.animListener = evt => { + if (Object(evt) !== evt || evt.target === el) { + this.__end(el, 'show'); + } + }; + el.addEventListener('transitionend', this.animListener); + this.timerFallback = setTimeout(this.animListener, this.duration * 1.1); + }, 100); + }, + + leave: (el, done) => { + let pos; + this.el = el; + + if (this.animating === true) { + this.__cleanup(); + } + else { + this.lastEvent = 'show'; + pos = el.scrollHeight; + } + + this.__begin(el, pos, done); + + this.timer = setTimeout(() => { + el.style.height = 0; + this.animListener = evt => { + if (Object(evt) !== evt || evt.target === el) { + this.__end(el, 'hide'); + } + }; + el.addEventListener('transitionend', this.animListener); + this.timerFallback = setTimeout(this.animListener, this.duration * 1.1); + }, 100); + } + }) + }, slot(this, 'default')) + } + }); + + const insetMap = { + true: 'inset', + item: 'item-inset', + 'item-thumbnail': 'item-thumbnail-inset' + }; + + const margins = { + xs: 2, + sm: 4, + md: 8, + lg: 16, + xl: 24 + }; + + var QSeparator = Vue__default["default"].extend({ + name: 'QSeparator', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + spaced: [ Boolean, String ], + inset: [ Boolean, String ], + vertical: Boolean, + color: String, + size: String + }, + + computed: { + orientation () { + return this.vertical === true + ? 'vertical' + : 'horizontal' + }, + + classPrefix () { + return ` q-separator--${this.orientation}` + }, + + insetClass () { + return this.inset !== false + ? `${this.classPrefix}-${insetMap[this.inset]}` + : '' + }, + + classes () { + return `q-separator${this.classPrefix}${this.insetClass}` + + (this.color !== void 0 ? ` bg-${this.color}` : '') + + ` q-separator--${this.darkSuffix}` + }, + + style () { + const style = {}; + + if (this.size !== void 0) { + style[ this.vertical === true ? 'width' : 'height' ] = this.size; + } + + if (this.spaced !== false) { + const size = this.spaced === true + ? `${margins.md}px` + : this.spaced in margins ? `${margins[this.spaced]}px` : this.spaced; + + const props = this.vertical === true + ? [ 'Left', 'Right' ] + : [ 'Top', 'Bottom' ]; + + style[`margin${props[0]}`] = style[`margin${props[1]}`] = size; + } + + return style + }, + + attrs () { + return { + 'aria-orientation': this.orientation + } + } + }, + + render (h) { + return h('hr', { + staticClass: 'q-separator', + class: this.classes, + style: this.style, + attrs: this.attrs, + on: { ...this.qListeners } + }) + } + }); + + const eventName = 'q:expansion-item:close'; + const LINK_PROPS = Object.keys(routerLinkProps); + + var QExpansionItem = Vue__default["default"].extend({ + name: 'QExpansionItem', + + mixins: [ DarkMixin, TimeoutMixin, ModelToggleMixin ], + + props: { + ...routerLinkProps, + + icon: String, + + label: String, + labelLines: [ Number, String ], + + caption: String, + captionLines: [ Number, String ], + + dense: Boolean, + + toggleAriaLabel: String, + expandIcon: String, + expandedIcon: String, + expandIconClass: [ Array, String, Object ], + duration: Number, + + headerInsetLevel: Number, + contentInsetLevel: Number, + + expandSeparator: Boolean, + defaultOpened: Boolean, + hideExpandIcon: Boolean, + expandIconToggle: Boolean, + switchToggleSide: Boolean, + denseToggle: Boolean, + group: String, + popup: Boolean, + + headerStyle: [Array, String, Object], + headerClass: [Array, String, Object] + }, + + data () { + return { + showing: this.value !== void 0 + ? this.value + : this.defaultOpened + } + }, + + watch: { + showing (val) { + if (val === true) { + this.shouldRenderContent !== true && (this.shouldRenderContent = true); + this.group !== void 0 && this.$root.$emit(eventName, this); + } + }, + + group (newVal, oldVal) { + if (newVal !== void 0 && oldVal === void 0) { + this.$root.$on(eventName, this.__eventHandler); + } + else if (newVal === void 0 && oldVal !== void 0) { + this.$root.$off(eventName, this.__eventHandler); + } + } + }, + + computed: { + classes () { + return `q-expansion-item--${this.showing === true ? 'expanded' : 'collapsed'}` + + ` q-expansion-item--${this.popup === true ? 'popup' : 'standard'}` + }, + + contentStyle () { + if (this.contentInsetLevel !== void 0) { + const dir = this.$q.lang.rtl === true ? 'Right' : 'Left'; + return { + ['padding' + dir]: (this.contentInsetLevel * 56) + 'px' + } + } + }, + + hasLink () { + return this.disable !== true && ( + this.href !== void 0 || + (this.to !== void 0 && this.to !== null && this.to !== '') + ) + }, + + linkProps () { + const acc = {}; + LINK_PROPS.forEach(key => { + acc[ key ] = this[ key ]; + }); + return acc + }, + + isClickable () { + return this.hasLink === true || this.expandIconToggle !== true + }, + + expansionIcon () { + return this.expandedIcon !== void 0 && this.showing === true + ? this.expandedIcon + : this.expandIcon || this.$q.iconSet.expansionItem[this.denseToggle === true ? 'denseIcon' : 'icon'] + }, + + activeToggleIcon () { + return this.disable !== true && (this.hasLink === true || this.expandIconToggle === true) + }, + + headerSlotScope () { + return { + expanded: this.showing === true, + detailsId: this.targetUid, + toggle: this.toggle, + show: this.show, + hide: this.hide + } + }, + + toggleAriaAttrs () { + const toggleAriaLabel = this.toggleAriaLabel !== void 0 + ? this.toggleAriaLabel + : this.$q.lang.label[ this.showing === true ? 'collapse' : 'expand' ](this.label); + + return { + role: 'button', + 'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-owns': this.targetUid, + 'aria-controls': this.targetUid, + 'aria-label': toggleAriaLabel + } + } + }, + + methods: { + __onHeaderClick (e) { + this.hasLink !== true && this.toggle(e); + this.$emit('click', e); + }, + + __toggleIconKeyboard (e) { + e.keyCode === 13 && this.__toggleIcon(e); + }, + + __toggleIcon (e) { + if ( + this.$q.interaction.isPointer === true && + this.$refs.blurTarget !== void 0 && + document.activeElement !== this.$refs.blurTarget + ) { + this.$refs.blurTarget.focus(); + } + else if ( + this.$q.interaction.isKeyboard === true && + document.activeElement === this.$refs.blurTarget + ) { + this.$refs.blurTarget.parentNode.focus(); + } + this.toggle(e); + stopAndPrevent(e); + }, + + __eventHandler (comp) { + this !== comp && this.group === comp.group && this.hide(); + }, + + __getToggleIcon (h) { + const data = { + staticClass: `q-focusable relative-position cursor-pointer${this.denseToggle === true && this.switchToggleSide === true ? ' items-end' : ''}`, + class: this.expandIconClass, + props: { + side: this.switchToggleSide !== true, + avatar: this.switchToggleSide + } + }; + + const child = [ + h(QIcon, { + staticClass: 'q-expansion-item__toggle-icon', + class: this.expandedIcon === void 0 && this.showing === true + ? 'q-expansion-item__toggle-icon--rotated' + : void 0, + props: { name: this.expansionIcon } + }) + ]; + + if (this.activeToggleIcon === true) { + Object.assign(data, { + key: 'inpExt', + attrs: { + tabindex: 0, + ...this.toggleAriaAttrs + }, + on: cache(this, 'inpExt', { + click: this.__toggleIcon, + keyup: this.__toggleIconKeyboard + }) + }); + + child.unshift( + h('div', { + ref: 'blurTarget', + staticClass: 'q-expansion-item__toggle-focus q-icon q-focus-helper q-focus-helper--rounded', + attrs: { tabindex: -1 } + }) + ); + } + + return h(QItemSection, data, child) + }, + + __getHeader (h) { + let child; + + if (this.$scopedSlots.header !== void 0) { + child = [].concat(this.$scopedSlots.header(this.headerSlotScope)); + } + else { + child = [ + h(QItemSection, [ + h(QItemLabel, { + props: { lines: this.labelLines } + }, [ this.label || '' ]), + + this.caption + ? h(QItemLabel, { + props: { lines: this.captionLines, caption: true } + }, [ this.caption ]) + : null + ]) + ]; + + this.icon && child[this.switchToggleSide === true ? 'push' : 'unshift']( + h(QItemSection, { + props: { + side: this.switchToggleSide === true, + avatar: this.switchToggleSide !== true + } + }, [ + h(QIcon, { + props: { name: this.icon } + }) + ]) + ); + } + + this.disable !== true && this.hideExpandIcon !== true && child[this.switchToggleSide === true ? 'unshift' : 'push']( + this.__getToggleIcon(h) + ); + + const data = { + ref: 'item', + style: this.headerStyle, + class: this.headerClass, + props: { + dark: this.dark, + disable: this.disable, + dense: this.dense, + insetLevel: this.headerInsetLevel + } + }; + + if (this.isClickable === true) { + data.props.clickable = true; + + if (this.hasLink === true) { + Object.assign(data.props, this.linkProps); + } + else { + data.attrs = this.toggleAriaAttrs; + } + + data.on = { + ...this.qListeners, + click: this.__onHeaderClick + }; + } + + return h(QItem, data, child) + }, + + __getContent (h) { + const node = [ + this.__getHeader(h), + + h(QSlideTransition, { + key: 'slide', + props: { duration: this.duration }, + on: cache(this, 'slide', { + show: () => { this.$emit('after-show'); }, + hide: () => { this.$emit('after-hide'); } + }) + }, [ + h('div', { + staticClass: 'q-expansion-item__content relative-position', + style: this.contentStyle, + attrs: { id: this.targetUid }, + directives: [{ name: 'show', value: this.showing }] + }, this.shouldRenderContent === true ? slot(this, 'default') : void 0) + ]) + ]; + + if (this.expandSeparator) { + node.push( + h(QSeparator, { + staticClass: 'q-expansion-item__border q-expansion-item__border--top absolute-top', + props: { dark: this.dark } + }), + h(QSeparator, { + staticClass: 'q-expansion-item__border q-expansion-item__border--bottom absolute-bottom', + props: { dark: this.dark } + }) + ); + } + + return node + } + }, + + render (h) { + return h('div', { + staticClass: 'q-expansion-item q-item-type', + class: this.classes + }, [ + h( + 'div', + { staticClass: 'q-expansion-item__container relative-position' }, + this.__getContent(h) + ) + ]) + }, + + created () { + this.shouldRenderContent = this.showing === true; + this.group !== void 0 && this.$root.$on(eventName, this.__eventHandler); + this.targetUid = `e_${uid$3()}`; + }, + + beforeDestroy () { + this.group !== void 0 && this.$root.$off(eventName, this.__eventHandler); + } + }); + + const labelPositions = ['top', 'right', 'bottom', 'left']; + + var FabMixin = { + mixins: [ ListenersMixin ], + + props: { + type: { + type: String, + default: 'a' + }, + + outline: Boolean, + push: Boolean, + flat: Boolean, + unelevated: Boolean, + + color: String, + textColor: String, + glossy: Boolean, + + square: Boolean, + padding: String, + + label: { + type: [ String, Number ], + default: '' + }, + labelPosition: { + type: String, + default: 'right', + validator: v => labelPositions.includes(v) + }, + externalLabel: Boolean, + hideLabel: { + type: Boolean + }, + labelClass: [ Array, String, Object ], + labelStyle: [ Array, String, Object ], + + disable: Boolean, + + tabindex: [ Number, String ] + }, + + computed: { + formClass () { + return `q-fab--form-${this.square === true ? 'square' : 'rounded'}` + }, + + stacked () { + return this.externalLabel === false && ['top', 'bottom'].includes(this.labelPosition) + }, + + labelProps () { + if (this.externalLabel === true) { + const hideLabel = this.hideLabel === null + ? this.showing === false + : this.hideLabel; + + return { + action: 'push', + data: { + staticClass: 'q-fab__label q-tooltip--style q-fab__label--external' + + ` q-fab__label--external-${this.labelPosition}` + + (hideLabel === true ? ' q-fab__label--external-hidden' : ''), + style: this.labelStyle, + class: this.labelClass + } + } + } + + return { + action: [ 'left', 'top' ].includes(this.labelPosition) + ? 'unshift' + : 'push', + data: { + staticClass: `q-fab__label q-fab__label--internal q-fab__label--internal-${this.labelPosition}` + + (this.hideLabel === true ? ' q-fab__label--internal-hidden' : ''), + style: this.labelStyle, + class: this.labelClass + } + } + } + } + }; + + const directions = ['up', 'right', 'down', 'left']; + const alignValues = [ 'left', 'center', 'right' ]; + + var QFab = Vue__default["default"].extend({ + name: 'QFab', + + inheritAttrs: false, + + mixins: [ FabMixin, AttrsMixin, ModelToggleMixin ], + + provide () { + return { + __qFab: this + } + }, + + props: { + icon: String, + activeIcon: String, + + hideIcon: Boolean, + hideLabel: { + default: null + }, + + direction: { + type: String, + default: 'right', + validator: v => directions.includes(v) + }, + + persistent: Boolean, + + verticalActionsAlign: { + type: String, + default: 'center', + validator: v => alignValues.includes(v) + } + }, + + data () { + return { + showing: this.value === true + } + }, + + computed: { + hideOnRouteChange () { + return this.persistent !== true + }, + + classes () { + return `q-fab--align-${this.verticalActionsAlign} ${this.formClass}` + + (this.showing === true ? ' q-fab--opened' : '') + }, + + actionsClasses () { + return `q-fab__actions--${this.direction}` + (this.showing === true ? ' q-fab__actions--opened' : '') + }, + + actionsAttrs () { + const attrs = { + id: this.targetUid + }; + + if (this.showing === true) { + attrs.role = 'menu'; + } + else { + attrs['aria-hidden'] = 'true'; + } + + return attrs + }, + + iconHolderClasses () { + return this.showing === true ? 'q-fab__icon-holder--opened' : '' + }, + + attrs () { + return { + 'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-haspopup': 'true', + 'aria-controls': this.targetUid, + 'aria-owns': this.targetUid, + ...this.qAttrs + } + }, + + slotScope () { + return { opened: this.showing } + } + }, + + methods: { + __onChildClick (evt) { + this.hide(evt); + + if (this.$refs.trigger && this.$refs.trigger.$el) { + this.$refs.trigger.$el.focus(); + } + }, + + __getIcon (h, kebab, camel) { + const slotFn = this.$scopedSlots[kebab]; + const staticClass = `q-fab__${kebab} absolute-full`; + + return slotFn === void 0 + ? h(QIcon, { staticClass, props: { name: this[camel] || this.$q.iconSet.fab[camel] } }) + : h('div', { staticClass }, slotFn(this.slotScope)) + } + }, + + render (h) { + const child = []; + + this.hideIcon !== true && child.push( + h('div', { staticClass: 'q-fab__icon-holder', class: this.iconHolderClasses }, [ + this.__getIcon(h, 'icon', 'icon'), + this.__getIcon(h, 'active-icon', 'activeIcon') + ]) + ); + + if (this.label !== '' || this.$scopedSlots.label !== void 0) { + child[this.labelProps.action]( + h('div', this.labelProps.data, this.$scopedSlots.label !== void 0 ? this.$scopedSlots.label(this.slotScope) : [ this.label ]) + ); + } + + return h('div', { + staticClass: 'q-fab z-fab row inline justify-center', + class: this.classes, + on: { ...this.qListeners } + }, [ + h(QBtn, { + key: 'tog', + ref: 'trigger', + class: this.formClass, + props: { + ...this.$props, + noWrap: true, + stack: this.stacked, + align: void 0, + icon: void 0, + label: void 0, + noCaps: true, + fab: true + }, + attrs: this.attrs, + on: cache(this, 'tog', { + click: this.toggle + }) + }, mergeSlot(child, this, 'tooltip')), + + h('div', { + staticClass: 'q-fab__actions flex no-wrap inline', + class: this.actionsClasses, + attrs: this.actionsAttrs + }, slot(this, 'default')) + ]) + }, + + created () { + this.targetUid = `fb_${uid$3()}`; + } + }); + + const anchorMap = { + start: 'self-end', + center: 'self-center', + end: 'self-start' + }; + + const anchorValues = Object.keys(anchorMap); + + var QFabAction = Vue__default["default"].extend({ + name: 'QFabAction', + + mixins: [ FabMixin ], + + props: { + icon: { + type: String, + default: '' + }, + + anchor: { + type: String, + validator: v => anchorValues.includes(v) + }, + + to: [ String, Object ], + replace: Boolean + }, + + inject: { + __qFab: { + default () { + return { + showing: true, + __onChildClick: noop + } + } + } + }, + + computed: { + classes () { + const align = anchorMap[this.anchor]; + return this.formClass + (align !== void 0 ? ` ${align}` : '') + }, + + onEvents () { + return { + ...this.qListeners, + click: this.click + } + }, + + isDisabled () { + return this.__qFab.showing !== true || this.disable === true + } + }, + + methods: { + click (e) { + this.__qFab.__onChildClick(e); + this.$emit('click', e); + } + }, + + render (h) { + const child = []; + + if (this.$scopedSlots.icon !== void 0) { + child.push(this.$scopedSlots.icon()); + } + else if (this.icon !== '') { + child.push( + h(QIcon, { + props: { name: this.icon } + }) + ); + } + + if (this.label !== '' || this.$scopedSlots.label !== void 0) { + child[this.labelProps.action]( + h('div', this.labelProps.data, this.$scopedSlots.label !== void 0 ? this.$scopedSlots.label() : [ this.label ]) + ); + } + + return h(QBtn, { + class: this.classes, + props: { + ...this.$props, + noWrap: true, + stack: this.stacked, + icon: void 0, + label: void 0, + noCaps: true, + fabMini: true, + disable: this.isDisabled + }, + on: this.onEvents + }, mergeSlot(child, this, 'default')) + } + }); + + const lazyRulesValues = [ true, false, 'ondemand' ]; + + var ValidateMixin = { + props: { + value: {}, + + error: { + type: Boolean, + default: null + }, + errorMessage: String, + noErrorIcon: Boolean, + + rules: Array, + reactiveRules: Boolean, + lazyRules: { + type: [ Boolean, String ], + validator: v => lazyRulesValues.includes(v) + } + }, + + data () { + return { + isDirty: null, + innerError: false, + innerErrorMessage: void 0 + } + }, + + watch: { + value () { + this.__validateIfNeeded(); + }, + + disable (val) { + if (val === true) { + this.__resetValidation(); + } + else { + this.__validateIfNeeded(true); + } + }, + + reactiveRules: { + handler (val) { + if (val === true) { + if (this.unwatchRules === void 0) { + this.unwatchRules = this.$watch('rules', () => { + this.__validateIfNeeded(true); + }); + } + } + else if (this.unwatchRules !== void 0) { + this.unwatchRules(); + this.unwatchRules = void 0; + } + }, + immediate: true + }, + + focused (focused) { + if (focused === true) { + if (this.isDirty === null) { + this.isDirty = false; + } + } + else if (this.isDirty === false) { + this.isDirty = true; + + if ( + this.hasActiveRules === true && + this.lazyRules !== 'ondemand' && + // Don't re-trigger if it's already in progress; + // It might mean that focus switched to submit btn and + // QForm's submit() has been called already (ENTER key) + this.innerLoading === false + ) { + this.debouncedValidate(); + } + } + }, + + hasError (invalid) { + const targetEl = document.getElementById(this.targetUid); + targetEl !== null && targetEl.setAttribute('aria-invalid', invalid === true); + } + }, + + computed: { + hasRules () { + return this.rules !== void 0 && + this.rules !== null && + this.rules.length > 0 + }, + + hasActiveRules () { + return this.disable !== true && this.hasRules === true + }, + + hasError () { + return this.error === true || this.innerError === true + }, + + computedErrorMessage () { + return typeof this.errorMessage === 'string' && this.errorMessage.length > 0 + ? this.errorMessage + : this.innerErrorMessage + } + }, + + created () { + this.debouncedValidate = debounce(this.validate, 0); + }, + + mounted () { + this.validateIndex = 0; + }, + + beforeDestroy () { + this.unwatchRules !== void 0 && this.unwatchRules(); + this.debouncedValidate.cancel(); + }, + + methods: { + resetValidation () { + this.isDirty = null; + this.__resetValidation(); + }, + + /* + * Return value + * - true (validation succeeded) + * - false (validation failed) + * - Promise (pending async validation) + */ + validate (val = this.value) { + if (this.hasActiveRules !== true) { + return true + } + + const index = ++this.validateIndex; + + const setDirty = this.innerLoading !== true + ? () => this.isDirty !== true && (this.isDirty = true) + : () => {}; + + const update = (err, msg) => { + err === true && setDirty(); + + if (this.innerError !== err) { + this.innerError = err; + } + + const m = msg || void 0; + + if (this.innerErrorMessage !== m) { + this.innerErrorMessage = m; + } + + if (this.innerLoading !== false) { + this.innerLoading = false; + } + }; + + const promises = []; + + for (let i = 0; i < this.rules.length; i++) { + const rule = this.rules[i]; + let res; + + if (typeof rule === 'function') { + res = rule(val, testPattern); + } + else if (typeof rule === 'string' && testPattern[rule] !== void 0) { + res = testPattern[rule](val); + } + + if (res === false || typeof res === 'string') { + update(true, res); + return false + } + else if (res !== true && res !== void 0) { + promises.push(res); + } + } + + if (promises.length === 0) { + update(false); + return true + } + + if (this.innerLoading !== true) { + this.innerLoading = true; + } + + return Promise.all(promises).then( + res => { + if (res === void 0 || Array.isArray(res) === false || res.length === 0) { + index === this.validateIndex && update(false); + return true + } + + const msg = res.find(r => r === false || typeof r === 'string'); + index === this.validateIndex && update(msg !== void 0, msg); + return msg === void 0 + }, + e => { + if (index === this.validateIndex) { + console.error(e); + update(true); + } + + return false + } + ) + }, + + __resetValidation () { + this.debouncedValidate.cancel(); + this.validateIndex++; + this.innerLoading = false; + this.innerError = false; + this.innerErrorMessage = void 0; + }, + + __validateIfNeeded (changedRules) { + if ( + this.hasActiveRules === true && + this.lazyRules !== 'ondemand' && + (this.isDirty === true || (this.lazyRules !== true && changedRules !== true)) + ) { + this.debouncedValidate(); + } + } + } + }; + + function getTargetUid (val) { + return val === void 0 ? `f_${uid$3()}` : val + } + + const parentStyles = new WeakMap(); + + var QField = Vue__default["default"].extend({ + name: 'QField', + + mixins: [ DarkMixin, ValidateMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + label: String, + stackLabel: Boolean, + hint: String, + hideHint: Boolean, + prefix: String, + suffix: String, + + labelColor: String, + color: String, + bgColor: String, + + filled: Boolean, + outlined: Boolean, + outlinedMd: Boolean, + borderless: Boolean, + standout: [Boolean, String], + + square: Boolean, + + loading: Boolean, + + labelSlot: Boolean, + + bottomSlots: Boolean, + hideBottomSpace: Boolean, + + rounded: Boolean, + dense: Boolean, + itemAligned: Boolean, + + counter: Boolean, + + clearable: Boolean, + clearIcon: String, + + disable: Boolean, + readonly: Boolean, + + autofocus: Boolean, + + for: String, + + maxlength: [Number, String], + maxValues: [Number, String] // private, do not add to JSON; internally needed by QSelect + }, + + data () { + return { + focused: false, + targetUid: getTargetUid(this.for), + + // used internally by validation for QInput + // or menu handling for QSelect + innerLoading: false + } + }, + + watch: { + for (val) { + // don't transform targetUid into a computed + // prop as it will break SSR + this.targetUid = getTargetUid(val); + } + }, + + computed: { + editable () { + return this.disable !== true && this.readonly !== true + }, + + hasValue () { + const value = this.__getControl === void 0 ? this.value : this.innerValue; + + return value !== void 0 && + value !== null && + ('' + value).length > 0 + }, + + computedCounter () { + if (this.counter !== false) { + const len = typeof this.value === 'string' || typeof this.value === 'number' + ? ('' + this.value).length + : (Array.isArray(this.value) === true ? this.value.length : 0); + + const max = this.maxlength !== void 0 + ? this.maxlength + : this.maxValues; + + return len + (max !== void 0 ? ' / ' + max : '') + } + }, + + floatingLabel () { + return this.stackLabel === true || + this.focused === true || + typeof this.inputValue === 'number' || + (typeof this.inputValue === 'string' && this.inputValue.length > 0) || + (this.hideSelected !== true && this.hasValue === true) || + ( + this.displayValue !== void 0 && + this.displayValue !== null && + ('' + this.displayValue).length > 0 + ) + }, + + shouldRenderBottom () { + return this.bottomSlots === true || + this.hint !== void 0 || + this.hasRules === true || + this.counter === true || + this.error !== null + }, + + classes () { + const outlineSuffix = this.styleType === 'outlined' && this.outlinedMd === true ? 'md' : 'std'; + + return { + [this.fieldClass]: this.fieldClass !== void 0, + + [`q-field--${this.styleType}`]: true, + [`q-field--outlined--${outlineSuffix}`]: this.styleType === 'outlined', + 'q-field--rounded': this.rounded, + 'q-field--square': this.square, + + 'q-field--focused': this.focused === true, + 'q-field--highlighted': this.focused === true || this.hasError === true, + 'q-field--float': this.floatingLabel, + 'q-field--labeled': this.hasLabel, + [`q-field--labeled--${outlineSuffix}`]: this.hasLabel, + + 'q-field--dense': this.dense, + 'q-field--item-aligned q-item-type': this.itemAligned, + [`q-field--${this.darkSuffix}`]: true, + + 'q-field--auto-height': this.__getControl === void 0, + + 'q-field--with-bottom': this.hideBottomSpace !== true && this.shouldRenderBottom === true, + 'q-field--error': this.hasError, + + 'q-field--readonly': this.readonly === true && this.disable !== true, + 'q-field--disabled': this.disable === true + } + }, + + styleType () { + if (this.filled === true) { return 'filled' } + if (this.outlined === true || this.outlinedMd === true) { return 'outlined' } + if (this.borderless === true) { return 'borderless' } + if (this.standout) { return 'standout' } + return 'standard' + }, + + contentClass () { + const cls = []; + + if (this.hasError === true) { + cls.push('text-negative'); + } + else if (typeof this.standout === 'string' && this.standout.length > 0 && this.focused === true) { + return this.standout + } + else if (this.color !== void 0) { + cls.push('text-' + this.color); + } + + if (this.bgColor !== void 0) { + cls.push(`bg-${this.bgColor}`); + } + + return cls + }, + + hasLabel () { + return this.labelSlot === true || this.label !== void 0 + }, + + labelClass () { + if ( + this.labelColor !== void 0 && + this.hasError !== true + ) { + return 'text-' + this.labelColor + } + }, + + controlSlotScope () { + return { + id: this.targetUid, + field: this.$el, + editable: this.editable, + focused: this.focused, + floatingLabel: this.floatingLabel, + value: this.value, + emitValue: this.__emitValue + } + }, + + bottomSlotScope () { + return { + id: this.targetUid, + field: this.$el, + editable: this.editable, + focused: this.focused, + value: this.value, + errorMessage: this.computedErrorMessage + } + }, + + attrs () { + const attrs = { + for: this.targetUid + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + else if (this.readonly === true) { + attrs['aria-readonly'] = 'true'; + } + + return attrs + } + }, + + methods: { + focus () { + this.__focus(); + }, + + blur () { + const el = document.activeElement; + // IE can have null document.activeElement + if (el !== null && this.$el.contains(el)) { + el.blur(); + } + }, + + __focus () { + const el = document.activeElement; + let target = this.$refs.target; + // IE can have null document.activeElement + if (target !== void 0 && (el === null || el.id !== this.targetUid)) { + target.hasAttribute('tabindex') === true || (target = target.querySelector('[tabindex]')); + target !== null && managedFocus(target); + } + }, + + __getContent (h) { + const node = []; + + this.$scopedSlots.prepend !== void 0 && node.push( + h('div', { + staticClass: 'q-field__prepend q-field__marginal row no-wrap items-center', + key: 'prepend', + on: this.slotsEvents + }, this.$scopedSlots.prepend()) + ); + + node.push( + h('div', { + staticClass: 'q-field__control-container col relative-position row no-wrap q-anchor--skip' + }, this.__getControlContainer(h)) + ); + + this.hasError === true && this.noErrorIcon === false && node.push( + this.__getInnerAppendNode(h, 'error', [ + h(QIcon, { props: { name: this.$q.iconSet.field.error, color: 'negative' } }) + ]) + ); + + if (this.loading === true || this.innerLoading === true) { + node.push( + this.__getInnerAppendNode( + h, + 'inner-loading-append', + this.$scopedSlots.loading !== void 0 + ? this.$scopedSlots.loading() + : [ h(QSpinner, { props: { color: this.color } }) ] + ) + ); + } + else if (this.clearable === true && this.hasValue === true && this.editable === true) { + node.push( + this.__getInnerAppendNode(h, 'inner-clearable-append', [ + h(QIcon, { + staticClass: 'q-field__focusable-action', + props: { tag: 'button', name: this.clearIcon || this.$q.iconSet.field.clear }, + attrs: iconAsButton, + on: this.clearableEvents + }) + ]) + ); + } + + this.$scopedSlots.append !== void 0 && node.push( + h('div', { + staticClass: 'q-field__append q-field__marginal row no-wrap items-center', + key: 'append', + on: this.slotsEvents + }, this.$scopedSlots.append()) + ); + + this.__getInnerAppend !== void 0 && node.push( + this.__getInnerAppendNode(h, 'inner-append', this.__getInnerAppend(h)) + ); + + this.__getControlChild !== void 0 && node.push( + this.__getControlChild(h) + ); + + return node + }, + + __getControlContainer (h) { + const node = []; + + this.prefix !== void 0 && this.prefix !== null && node.push( + h('div', { + staticClass: 'q-field__prefix no-pointer-events row items-center' + }, [ this.prefix ]) + ); + + if (this.hasShadow === true && this.__getShadowControl !== void 0) { + node.push( + this.__getShadowControl(h) + ); + } + + if (this.__getControl !== void 0) { + node.push(this.__getControl(h)); + } + // internal usage only: + else if (this.$scopedSlots.rawControl !== void 0) { + node.push(this.$scopedSlots.rawControl()); + } + else if (this.$scopedSlots.control !== void 0) { + node.push( + h('div', { + ref: 'target', + staticClass: 'q-field__native row', + attrs: { + tabindex: -1, + ...this.qAttrs, + 'data-autofocus': this.autofocus || void 0 + } + }, this.$scopedSlots.control(this.controlSlotScope)) + ); + } + + const labelNodes = [ slot(this, 'label', this.label) ]; + + if (this.outlinedMd === true) { + labelNodes.unshift(h('div', { staticClass: 'q-field__label-back', style: { backgroundColor: this.__getBgColor() } })); + } + + this.hasLabel === true && node.push( + h('div', { + staticClass: 'q-field__label no-pointer-events absolute ellipsis', + class: this.labelClass + }, labelNodes) + ); + + this.suffix !== void 0 && this.suffix !== null && node.push( + h('div', { + staticClass: 'q-field__suffix no-pointer-events row items-center' + }, [ this.suffix ]) + ); + + return node.concat( + this.__getDefaultSlot !== void 0 + ? this.__getDefaultSlot(h) + : slot(this, 'default') + ) + }, + + __getBottom (h) { + let msg, key; + + if (this.hasError === true) { + key = 'q--slot-error'; + + if (this.$scopedSlots.error !== void 0) { + msg = this.$scopedSlots.error(this.bottomSlotScope); + } + else if (this.computedErrorMessage !== void 0) { + msg = [ h('div', { attrs: { role: 'alert' } }, [ this.computedErrorMessage ]) ]; + key = this.computedErrorMessage; + } + } + else if (this.hideHint !== true || this.focused === true) { + key = 'q--slot-hint'; + + if (this.$scopedSlots.hint !== void 0) { + msg = this.$scopedSlots.hint(this.bottomSlotScope); + } + else if (this.hint !== void 0) { + msg = [ h('div', [ this.hint ]) ]; + key = this.hint; + } + } + + const hasCounter = this.counter === true || this.$scopedSlots.counter !== void 0; + + if (this.hideBottomSpace === true && hasCounter === false && msg === void 0) { + return + } + + const main = h('div', { + key, + staticClass: 'q-field__messages col' + }, msg); + + return h('div', { + staticClass: 'q-field__bottom row items-start q-field__bottom--' + + (this.hideBottomSpace !== true ? 'animated' : 'stale'), + on: { click: prevent } + }, [ + this.hideBottomSpace === true + ? main + : h('transition', { props: { name: 'q-transition--field-message' } }, [ + main + ]), + + hasCounter === true + ? h('div', { + staticClass: 'q-field__counter' + }, this.$scopedSlots.counter !== void 0 ? this.$scopedSlots.counter() : [ this.computedCounter ]) + : null + ]) + }, + + __getInnerAppendNode (h, key, content) { + return content === null ? null : h('div', { + staticClass: 'q-field__append q-field__marginal row no-wrap items-center q-anchor--skip', + key + }, content) + }, + + __onControlPopupShow (e) { + e !== void 0 && stop(e); + this.$emit('popup-show', e); + this.hasPopupOpen = true; + this.__onControlFocusin(e); + }, + + __onControlPopupHide (e) { + e !== void 0 && stop(e); + this.$emit('popup-hide', e); + this.hasPopupOpen = false; + this.__onControlFocusout(e); + }, + + __onControlFocusin (e) { + clearTimeout(this.focusoutTimer); + if (this.editable === true && this.focused === false) { + this.focused = true; + this.$emit('focus', e); + } + }, + + __onControlFocusout (e, then) { + clearTimeout(this.focusoutTimer); + this.focusoutTimer = setTimeout(() => { + if ( + document.hasFocus() === true && ( + this.hasPopupOpen === true || + this.$refs === void 0 || + this.$refs.control === void 0 || + this.$refs.control.contains(document.activeElement) !== false + ) + ) { + return + } + + if (this.focused === true) { + this.focused = false; + this.$emit('blur', e); + } + + then !== void 0 && then(); + }); + }, + + __clearValue (e) { + // prevent activating the field but keep focus on desktop + stopAndPrevent(e); + + if (this.$q.platform.is.mobile !== true) { + const el = this.$refs.target || this.$el; + el.focus(); + } + else if (this.$el.contains(document.activeElement) === true) { + document.activeElement.blur(); + } + + if (this.type === 'file') { + // do not let focus be triggered + // as it will make the native file dialog + // appear for another selection + this.$refs.input.value = null; + } + + this.$emit('input', null); + this.$emit('clear', this.value); + + this.$nextTick(() => { + this.resetValidation(); + + if (this.$q.platform.is.mobile !== true) { + this.isDirty = false; + } + }); + }, + + __emitValue (value) { + this.$emit('input', value); + }, + + __getBgColor () { + let el, bgColor; + for (let i = this.parents.length - 1; i >= 0; i--) { + el = this.parents[i]; + if (parentStyles.has(el)) { + bgColor = parentStyles.get(el).backgroundColor; + if (bgColor !== 'rgba(0, 0, 0, 0)' && bgColor !== 'transparent') { + return bgColor + } + } + } + } + }, + + render (h) { + this.__onPreRender !== void 0 && this.__onPreRender(); + + const attrs = this.__getControl === void 0 && this.$scopedSlots.control === void 0 + ? { + ...this.qAttrs, + 'data-autofocus': this.autofocus || void 0, + ...this.attrs + } + : this.attrs; + + return h('label', { + staticClass: 'q-field q-validation-component row no-wrap items-start q-key-group-navigation--ignore-key', + class: this.classes, + attrs + }, [ + this.$scopedSlots.before !== void 0 ? h('div', { + staticClass: 'q-field__before q-field__marginal row no-wrap items-center', + on: this.slotsEvents + }, this.$scopedSlots.before()) : null, + + h('div', { + staticClass: 'q-field__inner relative-position col self-stretch' + }, [ + h('div', { + ref: 'control', + staticClass: 'q-field__control relative-position row no-wrap', + class: this.contentClass, + attrs: { tabindex: -1 }, + on: this.controlEvents + }, this.__getContent(h)), + + this.shouldRenderBottom === true + ? this.__getBottom(h) + : null + ]), + + this.$scopedSlots.after !== void 0 ? h('div', { + staticClass: 'q-field__after q-field__marginal row no-wrap items-center', + on: this.slotsEvents + }, this.$scopedSlots.after()) : null + ]) + }, + + created () { + this.__onPreRender !== void 0 && this.__onPreRender(); + + this.slotsEvents = { click: prevent }; + + this.clearableEvents = { click: this.__clearValue }; + + this.controlEvents = this.__getControlEvents !== void 0 + ? this.__getControlEvents() + : { + focusin: this.__onControlFocusin, + focusout: this.__onControlFocusout, + 'popup-show': this.__onControlPopupShow, + 'popup-hide': this.__onControlPopupHide + }; + + this.parents = []; + }, + + mounted () { + if (fromSSR === true && this.for === void 0) { + this.targetUid = getTargetUid(); + } + + this.autofocus === true && this.focus(); + + this.$nextTick(() => { + let el = this.$refs.control; + while (el) { + if (parentStyles.has(el) !== true) { + parentStyles.set(el, window.getComputedStyle(el)); + } + this.parents.unshift(el); + el = el.parentElement; + } + + if (this.outlinedMd === true && this.parents.length > 0) { + this.$forceUpdate(); + } + }); + }, + + activated () { + if (this.shouldActivate !== true) { return } + this.autofocus === true && this.focus(); + }, + + deactivated () { + this.shouldActivate = true; + }, + + beforeDestroy () { + clearTimeout(this.focusoutTimer); + this.parents = []; + } + }); + + function filterFiles (files, rejectedFiles, failedPropValidation, filterFn) { + const acceptedFiles = []; + + files.forEach(file => { + if (filterFn(file) === true) { + acceptedFiles.push(file); + } + else { + rejectedFiles.push({ failedPropValidation, file }); + } + }); + + return acceptedFiles + } + + function stopAndPreventDrag (e) { + e && e.dataTransfer && (e.dataTransfer.dropEffect = 'copy'); + stopAndPrevent(e); + } + + var FileMixin = { + props: { + multiple: Boolean, + accept: String, + capture: String, + maxFileSize: [ Number, String ], + maxTotalSize: [ Number, String ], + maxFiles: [ Number, String ], + filter: Function + }, + + computed: { + extensions () { + if (this.accept !== void 0) { + return this.accept.split(',').map(ext => { + ext = ext.trim(); + if (ext === '*') { // support "*" + return '*/' + } + else if (ext.endsWith('/*')) { // support "image/*" or "*/*" + ext = ext.slice(0, ext.length - 1); + } + return ext.toUpperCase() + }) + } + }, + + maxFilesNumber () { + return parseInt(this.maxFiles, 10) + }, + + maxTotalSizeNumber () { + return parseInt(this.maxTotalSize, 10) + } + }, + + methods: { + pickFiles (ev) { + if (this.editable === true) { + if (ev !== Object(ev)) { + ev = { target: null }; + } + + if (ev.target !== null && ev.target.matches('input[type="file"]') === true) { + // stop propagation if it's not a real pointer event + ev.clientX === 0 && ev.clientY === 0 && stop(ev); + } + else { + const input = this.__getFileInput(); + input && input !== ev.target && input.click(ev); + } + } + }, + + addFiles (files) { + if (this.editable && files) { + this.__addFiles(null, files); + } + }, + + __processFiles (e, filesToProcess, currentFileList, append) { + let files = Array.from(filesToProcess || e.target.files); + const rejectedFiles = []; + + const done = () => { + if (rejectedFiles.length > 0) { + this.$emit('rejected', rejectedFiles); + } + }; + + // filter file types + if (this.accept !== void 0 && this.extensions.indexOf('*/') === -1) { + files = filterFiles(files, rejectedFiles, 'accept', file => { + return this.extensions.some(ext => ( + file.type.toUpperCase().startsWith(ext) || + file.name.toUpperCase().endsWith(ext) + )) + }); + + if (files.length === 0) { return done() } + } + + // filter max file size + if (this.maxFileSize !== void 0) { + const maxFileSize = parseInt(this.maxFileSize, 10); + files = filterFiles(files, rejectedFiles, 'max-file-size', file => { + return file.size <= maxFileSize + }); + + if (files.length === 0) { return done() } + } + + // Cordova/iOS allows selecting multiple files even when the + // multiple attribute is not specified. We also normalize drag'n'dropped + // files here: + if (this.multiple !== true && files.length > 0) { + files = [ files[0] ]; + } + + files.forEach(file => { + file.__key = file.webkitRelativePath + file.lastModified + file.name + file.size; + }); + + if (append === true) { + // Avoid duplicate files + const filenameMap = currentFileList.map(entry => entry.__key); + files = filterFiles(files, rejectedFiles, 'duplicate', file => { + return filenameMap.includes(file.__key) === false + }); + } + + if (files.length === 0) { return done() } + + if (this.maxTotalSize !== void 0) { + let size = append === true + ? currentFileList.reduce((total, file) => total + file.size, 0) + : 0; + + files = filterFiles(files, rejectedFiles, 'max-total-size', file => { + size += file.size; + return size <= this.maxTotalSizeNumber + }); + + if (files.length === 0) { return done() } + } + + // do we have custom filter function? + if (typeof this.filter === 'function') { + const filteredFiles = this.filter(files); + files = filterFiles(files, rejectedFiles, 'filter', file => { + return filteredFiles.includes(file) + }); + } + + if (this.maxFiles !== void 0) { + let filesNumber = append === true + ? currentFileList.length + : 0; + + files = filterFiles(files, rejectedFiles, 'max-files', () => { + filesNumber++; + return filesNumber <= this.maxFilesNumber + }); + + if (files.length === 0) { return done() } + } + + done(); + + if (files.length > 0) { + return files + } + }, + + __onDragOver (e) { + stopAndPreventDrag(e); + this.dnd !== true && (this.dnd = true); + }, + + __onDragLeave (e) { + stopAndPrevent(e); + + // Safari bug: relatedTarget is null for over 10 years + // https://bugs.webkit.org/show_bug.cgi?id=66547 + const gone = e.relatedTarget !== null || Platform.is.safari !== true + ? e.relatedTarget !== this.$refs.dnd + : document.elementsFromPoint(e.clientX, e.clientY).includes(this.$refs.dnd) === false; + + gone === true && (this.dnd = false); + }, + + __onDrop (e) { + stopAndPreventDrag(e); + const files = e.dataTransfer.files; + + if (files.length > 0) { + this.__addFiles(null, files); + } + + this.dnd = false; + }, + + __getDnd (h, type) { + if (this.dnd === true) { + return h('div', { + key: 'dnd', + staticClass: `q-${type}__dnd absolute-full`, + ref: 'dnd', + on: cache(this, 'dnd', { + dragenter: stopAndPreventDrag, + dragover: stopAndPreventDrag, + dragleave: this.__onDragLeave, + drop: this.__onDrop + }) + }) + } + } + } + }; + + const FileValueMixin = { + computed: { + formDomProps () { + if (this.type !== 'file') { + return + } + + try { + const dt = 'DataTransfer' in window + ? new DataTransfer() + : ('ClipboardEvent' in window + ? new ClipboardEvent('').clipboardData + : void 0 + ); + + if (Object(this.value) === this.value) { + ('length' in this.value + ? Array.from(this.value) + : [ this.value ] + ).forEach(file => { + dt.items.add(file); + }); + } + + return { + files: dt.files + } + } + catch (e) { + return { + files: void 0 + } + } + } + } + }; + + var QFile = Vue__default["default"].extend({ + name: 'QFile', + + mixins: [ QField, FileMixin, FormFieldMixin, FileValueMixin ], + + props: { + /* SSR does not know about File & FileList */ + value: isSSR === true + ? {} + : [ File, FileList, Array ], + + append: Boolean, + useChips: Boolean, + displayValue: [ String, Number ], + + tabindex: { + type: [ String, Number ], + default: 0 + }, + + counterLabel: Function, + + inputClass: [ Array, String, Object ], + inputStyle: [ Array, String, Object ] + }, + + data () { + return { + dnd: false + } + }, + + computed: { + innerValue () { + return Object(this.value) === this.value + ? ('length' in this.value ? Array.from(this.value) : [ this.value ]) + : [] + }, + + selectedString () { + return this.innerValue + .map(file => file.name) + .join(', ') + }, + + totalSize () { + return humanStorageSize( + this.innerValue.reduce((acc, file) => acc + file.size, 0) + ) + }, + + counterProps () { + return { + totalSize: this.totalSize, + filesNumber: this.innerValue.length, + maxFiles: this.maxFiles + } + }, + + computedCounter () { + if (this.counterLabel !== void 0) { + return this.counterLabel(this.counterProps) + } + + const max = this.maxFiles; + return `${this.innerValue.length}${max !== void 0 ? ' / ' + max : ''} (${this.totalSize})` + }, + + inputAttrs () { + return { + tabindex: -1, + type: 'file', + title: '', // try to remove default tooltip, + accept: this.accept, + capture: this.capture, + name: this.nameProp, + ...this.qAttrs, + id: this.targetUid, + disabled: this.editable !== true + } + }, + + isAppending () { + return this.multiple === true && this.append === true + }, + + fieldClass () { + return 'q-file q-field--auto-height' + (this.dnd === true ? ' q-file--dnd' : '') + } + }, + + methods: { + removeAtIndex (index) { + const files = this.innerValue.slice(); + files.splice(index, 1); + this.__emitValue(files); + }, + + removeFile (file) { + const index = this.innerValue.findIndex(file); + if (index > -1) { + this.removeAtIndex(index); + } + }, + + __emitValue (files) { + this.$emit('input', this.multiple === true ? files : files[0]); + }, + + __onKeydown (e) { + // prevent form submit if ENTER is pressed + e.keyCode === 13 && prevent(e); + }, + + __onKeyup (e) { + // only on ENTER and SPACE to match native input field + if (e.keyCode === 13 || e.keyCode === 32) { + this.pickFiles(e); + } + }, + + __getFileInput () { + return this.$refs.input + }, + + __addFiles (e, fileList) { + const files = this.__processFiles(e, fileList, this.innerValue, this.isAppending); + const fileInput = this.__getFileInput(); + + if (fileInput !== void 0) { + fileInput.value = ''; + } + + // if nothing to do... + if (files === void 0) { return } + + // protect against input @change being called in a loop + // like it happens on Safari, so don't emit same thing: + if ( + this.multiple === true + ? this.value && files.every(f => this.innerValue.includes(f)) + : this.value === files[ 0 ] + ) { + return + } + + this.__emitValue( + this.isAppending === true + ? this.innerValue.concat(files) + : files + ); + }, + + __getControl (h) { + const data = { + key: 'target', + ref: 'target', + staticClass: 'q-field__native row items-center cursor-pointer', + attrs: { + tabindex: this.tabindex + } + }; + + if (this.editable === true) { + data.on = cache(this, 'native', { + dragover: this.__onDragOver, + dragleave: this.__onDragLeave, + keydown: this.__onKeydown, + keyup: this.__onKeyup + }); + } + + return h('div', data, [ this.__getInput(h) ].concat(this.__getSelection(h))) + }, + + __getControlChild (h) { + return this.__getDnd(h, 'file') + }, + + __getFiller (h) { + return [ + h('input', { + class: [ this.inputClass, 'q-file__filler' ], + style: this.inputStyle + }) + ] + }, + + __getSelection (h) { + if (this.$scopedSlots.file !== void 0) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.innerValue.map((file, index) => this.$scopedSlots.file({ index, file, ref: this })) + } + + if (this.$scopedSlots.selected !== void 0) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.$scopedSlots.selected({ files: this.innerValue, ref: this }) + } + + if (this.useChips === true) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.innerValue.map((file, i) => h(QChip, { + key: 'rem#' + i, + props: { + removable: this.editable, + dense: true, + textColor: this.color, + tabindex: this.tabindex + }, + on: cache(this, 'rem#' + i, { + remove: () => { this.removeAtIndex(i); } + }) + }, [ + h('span', { + staticClass: 'ellipsis', + domProps: { + textContent: file.name + } + }) + ])) + } + + const textContent = this.displayValue !== void 0 + ? this.displayValue + : this.selectedString; + + return textContent.length > 0 + ? [ + h('div', { + style: this.inputStyle, + class: this.inputClass, + domProps: { textContent } + }) + ] + : this.__getFiller(h) + }, + + __getInput (h) { + const data = { + key: 'input', + ref: 'input', + staticClass: 'q-field__input fit absolute-full cursor-pointer', + attrs: this.inputAttrs, + domProps: this.formDomProps, + on: cache(this, 'input', { + change: this.__addFiles + }) + }; + + if (this.multiple === true) { + data.attrs.multiple = true; + } + + return h('input', data) + } + }, + + created () { + // necessary for QField's clearable + // and FileValueMixin + this.type = 'file'; + } + }); + + var QFooter = Vue__default["default"].extend({ + name: 'QFooter', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default () { + console.error('QFooter needs to be child of QLayout'); + } + } + }, + + props: { + value: { + type: Boolean, + default: true + }, + reveal: Boolean, + bordered: Boolean, + elevated: Boolean, + + heightHint: { + type: [String, Number], + default: 50 + } + }, + + data () { + return { + size: parseInt(this.heightHint, 10), + revealed: true, + windowHeight: onSSR || this.layout.container ? 0 : window.innerHeight + } + }, + + watch: { + value (val) { + this.__update('space', val); + this.__updateLocal('revealed', true); + this.layout.__animate(); + }, + + offset (val) { + this.__update('offset', val); + }, + + reveal (val) { + val === false && this.__updateLocal('revealed', this.value); + }, + + revealed (val) { + this.layout.__animate(); + this.$emit('reveal', val); + }, + + 'layout.scroll' () { + this.__updateRevealed(); + }, + + 'layout.height' () { + this.__updateRevealed(); + }, + + size () { + this.__updateRevealed(); + }, + + '$q.screen.height' (val) { + this.layout.container !== true && this.__updateLocal('windowHeight', val); + } + }, + + computed: { + fixed () { + return this.reveal === true || + this.layout.view.indexOf('F') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + containerHeight () { + return this.layout.container === true + ? this.layout.containerHeight + : this.windowHeight + }, + + offset () { + if (this.value !== true) { + return 0 + } + if (this.fixed === true) { + return this.revealed === true ? this.size : 0 + } + const offset = this.layout.scroll.position + this.containerHeight + this.size - this.layout.height; + return offset > 0 ? offset : 0 + }, + + hidden () { + return this.value !== true || (this.fixed === true && this.revealed !== true) + }, + + revealOnFocus () { + return this.value === true && this.hidden === true && this.reveal === true + }, + + classes () { + return (this.fixed === true ? 'fixed' : 'absolute') + '-bottom' + + (this.bordered === true ? ' q-footer--bordered' : '') + + (this.hidden === true ? ' q-footer--hidden' : '') + + (this.value !== true ? ' q-layout--prevent-focus' : '') + + (this.value !== true && this.fixed !== true ? ' hidden' : '') + }, + + style () { + const + view = this.layout.rows.bottom, + css = {}; + + if (view[0] === 'l' && this.layout.left.space === true) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = `${this.layout.left.size}px`; + } + if (view[2] === 'r' && this.layout.right.space === true) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = `${this.layout.right.size}px`; + } + + return css + }, + + onEvents () { + return { + ...this.qListeners, + focusin: this.__onFocusin, + input: stop + } + } + }, + + render (h) { + const child = mergeSlot([ + h(QResizeObserver, { + key: 'resize', + props: { debounce: 0 }, + on: cache(this, 'resize', { resize: this.__onResize }) + }) + ], this, 'default'); + + this.elevated === true && child.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ); + + return h('footer', { + staticClass: 'q-footer q-layout__section--marginal', + class: this.classes, + style: this.style, + on: this.onEvents + }, child) + }, + + created () { + this.layout.instances.footer = this; + this.value === true && this.__update('size', this.size); + this.__update('space', this.value); + this.__update('offset', this.offset); + }, + + beforeDestroy () { + if (this.layout.instances.footer === this) { + this.layout.instances.footer = void 0; + this.__update('size', 0); + this.__update('offset', 0); + this.__update('space', false); + } + }, + + methods: { + __onResize ({ height }) { + this.__updateLocal('size', height); + this.__update('size', height); + }, + + __update (prop, val) { + if (this.layout.footer[prop] !== val) { + this.layout.footer[prop] = val; + } + }, + + __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val; + } + }, + + __updateRevealed () { + if (this.reveal !== true) { return } + + const { direction, position, inflectionPoint } = this.layout.scroll; + + this.__updateLocal('revealed', ( + direction === 'up' || + position - inflectionPoint < 100 || + this.layout.height - this.containerHeight - position - this.size < 300 + )); + }, + + __onFocusin (evt) { + if (this.revealOnFocus === true) { + this.__updateLocal('revealed', true); + } + + this.$emit('focusin', evt); + } + } + }); + + var QForm = Vue__default["default"].extend({ + name: 'QForm', + + mixins: [ ListenersMixin ], + + props: { + autofocus: Boolean, + noErrorFocus: Boolean, + noResetFocus: Boolean, + greedy: Boolean + }, + + computed: { + onEvents () { + return { + ...this.qListeners, + submit: this.submit, + reset: this.reset + } + } + }, + + mounted () { + this.validateIndex = 0; + this.autofocus === true && this.focus(); + }, + + activated () { + if (this.shouldActivate !== true) { return } + this.autofocus === true && this.focus(); + }, + + deactivated () { + this.shouldActivate = true; + }, + + methods: { + validate (shouldFocus) { + const focus = typeof shouldFocus === 'boolean' + ? shouldFocus + : this.noErrorFocus !== true; + + const index = ++this.validateIndex; + + const registeredComponents = this.getValidationComponents().filter(c => c.disable !== true); + + const emit = (res, ref) => { + this.$emit('validation-' + (res === true ? 'success' : 'error'), ref); + }; + + const validateComponent = comp => { + const valid = comp.validate(); + + return typeof valid.then === 'function' + ? valid.then( + valid => ({ valid, comp }), + err => ({ valid: false, comp, err }) + ) + : Promise.resolve({ valid, comp }) + }; + + const errorsPromise = this.greedy === true + ? Promise + .all(registeredComponents.map(validateComponent)) + .then(res => res.filter(r => r.valid !== true)) + : registeredComponents + .reduce( + (acc, comp) => acc.then(() => { + return validateComponent(comp).then(r => { + if (r.valid === false) { return Promise.reject(r) } + }) + }), + Promise.resolve() + ) + .catch(error => [ error ]); + + return errorsPromise.then(errors => { + if (errors === void 0 || errors.length === 0) { + index === this.validateIndex && emit(true); + return true + } + + if (index === this.validateIndex) { + const { comp, err } = errors[0]; + + err !== void 0 && console.error(err); + emit(false, comp); + + if (focus === true) { + // Try to focus first mounted and active component + const activeError = errors.find(({ comp }) => ( + typeof comp.focus === 'function' && + comp._isBeingDestroyed !== true && + comp._isDestroyed !== true && + comp._inactive !== true + )); + + if (activeError !== void 0) { + activeError.comp.focus(); + } + } + } + + return false + }) + }, + + resetValidation () { + this.validateIndex++; + + this.getValidationComponents().forEach(comp => { + typeof comp.resetValidation === 'function' && comp.resetValidation(); + }); + }, + + submit (evt) { + evt !== void 0 && stopAndPrevent(evt); + + const index = this.validateIndex + 1; + + this.validate().then(val => { + // if not outdated && validation succeeded + if (index === this.validateIndex && val === true) { + if (this.qListeners.submit !== void 0) { + this.$emit('submit', evt); + } + else if (evt !== void 0 && evt.target !== void 0 && typeof evt.target.submit === 'function') { + evt.target.submit(); + } + } + }); + }, + + reset (evt) { + evt !== void 0 && stopAndPrevent(evt); + + this.$emit('reset'); + + this.$nextTick(() => { // allow userland to reset values before + this.resetValidation(); + if (this.autofocus === true && this.noResetFocus !== true) { + this.focus(); + } + }); + }, + + focus () { + if (!this.$el) { return } + + const target = this.$el.querySelector('[autofocus][tabindex], [data-autofocus][tabindex]') || + this.$el.querySelector('[autofocus] [tabindex], [data-autofocus] [tabindex]') || + this.$el.querySelector('[autofocus], [data-autofocus]') || + Array.prototype.find.call(this.$el.querySelectorAll('[tabindex]'), el => el.tabIndex > -1); + + target !== null && target !== void 0 && managedFocus(target); + }, + + getValidationComponents () { + return Array.prototype.map.call( + this.$el.getElementsByClassName('q-validation-component'), + field => field.__vue__ + ).filter(c => c !== void 0 && typeof c.validate === 'function') + } + }, + + render (h) { + return h('form', { + staticClass: 'q-form', + on: this.onEvents + }, slot(this, 'default')) + } + }); + + var QHeader = Vue__default["default"].extend({ + name: 'QHeader', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default () { + console.error('QHeader needs to be child of QLayout'); + } + } + }, + + props: { + value: { + type: Boolean, + default: true + }, + reveal: Boolean, + revealOffset: { + type: Number, + default: 250 + }, + bordered: Boolean, + elevated: Boolean, + + heightHint: { + type: [String, Number], + default: 50 + } + }, + + data () { + return { + size: parseInt(this.heightHint, 10), + revealed: true + } + }, + + watch: { + value (val) { + this.__update('space', val); + this.__updateLocal('revealed', true); + this.layout.__animate(); + }, + + offset (val) { + this.__update('offset', val); + }, + + reveal (val) { + val === false && this.__updateLocal('revealed', this.value); + }, + + revealed (val) { + this.layout.__animate(); + this.$emit('reveal', val); + }, + + 'layout.scroll' (scroll) { + this.reveal === true && this.__updateLocal('revealed', + scroll.direction === 'up' || + scroll.position <= this.revealOffset || + scroll.position - scroll.inflectionPoint < 100 + ); + } + }, + + computed: { + fixed () { + return this.reveal === true || + this.layout.view.indexOf('H') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + offset () { + if (this.value !== true) { + return 0 + } + if (this.fixed === true) { + return this.revealed === true ? this.size : 0 + } + const offset = this.size - this.layout.scroll.position; + return offset > 0 ? offset : 0 + }, + + hidden () { + return this.value !== true || (this.fixed === true && this.revealed !== true) + }, + + revealOnFocus () { + return this.value === true && this.hidden === true && this.reveal === true + }, + + classes () { + return (this.fixed === true ? 'fixed' : 'absolute') + '-top' + + (this.bordered === true ? ' q-header--bordered' : '') + + (this.hidden === true ? ' q-header--hidden' : '') + + (this.value !== true ? ' q-layout--prevent-focus' : '') + }, + + style () { + const + view = this.layout.rows.top, + css = {}; + + if (view[0] === 'l' && this.layout.left.space === true) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = `${this.layout.left.size}px`; + } + if (view[2] === 'r' && this.layout.right.space === true) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = `${this.layout.right.size}px`; + } + + return css + }, + + onEvents () { + return { + ...this.qListeners, + focusin: this.__onFocusin, + input: stop + } + } + }, + + render (h) { + const child = uniqueSlot(this, 'default', []); + + this.elevated === true && child.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ); + + child.push( + h(QResizeObserver, { + key: 'resize', + props: { debounce: 0 }, + on: cache(this, 'resize', { resize: this.__onResize }) + }) + ); + + return h('header', { + staticClass: 'q-header q-layout__section--marginal', + class: this.classes, + style: this.style, + on: this.onEvents + }, child) + }, + + created () { + this.layout.instances.header = this; + this.value === true && this.__update('size', this.size); + this.__update('space', this.value); + this.__update('offset', this.offset); + }, + + beforeDestroy () { + if (this.layout.instances.header === this) { + this.layout.instances.header = void 0; + this.__update('size', 0); + this.__update('offset', 0); + this.__update('space', false); + } + }, + + methods: { + __onResize ({ height }) { + this.__updateLocal('size', height); + this.__update('size', height); + }, + + __update (prop, val) { + if (this.layout.header[prop] !== val) { + this.layout.header[prop] = val; + } + }, + + __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val; + } + }, + + __onFocusin (evt) { + if (this.revealOnFocus === true) { + this.__updateLocal('revealed', true); + } + + this.$emit('focusin', evt); + } + } + }); + + var RatioMixin = { + props: { + ratio: [ String, Number ] + }, + + computed: { + ratioStyle () { + const ratio = this.ratio || this.naturalRatio; + + if (ratio !== void 0) { + return { paddingBottom: `${100 / ratio}%` } + } + } + } + }; + + var QImg = Vue__default["default"].extend({ + name: 'QImg', + + mixins: [ ListenersMixin, RatioMixin ], + + props: { + src: String, + srcset: String, + sizes: String, + alt: String, + width: String, + height: String, + + placeholderSrc: String, + + basic: Boolean, + contain: Boolean, + position: { + type: String, + default: '50% 50%' + }, + + transition: { + type: String, + default: 'fade' + }, + + imgClass: [ Array, String, Object ], + imgStyle: Object, + + nativeContextMenu: Boolean, + + noDefaultSpinner: Boolean, + spinnerColor: String, + spinnerSize: String + }, + + data () { + return { + currentSrc: '', + image: null, + isLoading: !!this.src, + hasError: false, + naturalRatio: void 0 + } + }, + + watch: { + src () { + this.__load(); + }, + + srcset (val) { + this.__updateWatcher(val); + } + }, + + computed: { + url () { + return this.currentSrc || this.placeholderSrc || void 0 + }, + + attrs () { + const att = { role: 'img' }; + if (this.alt !== void 0) { + att['aria-label'] = this.alt; + } + return att + }, + + imgContainerStyle () { + return Object.assign( + { + backgroundSize: this.contain === true ? 'contain' : 'cover', + backgroundPosition: this.position + }, + this.imgStyle, + { backgroundImage: `url("${this.url}")` }) + }, + + style () { + return { + width: this.width, + height: this.height + } + }, + + classes () { + return 'q-img overflow-hidden' + + (this.nativeContextMenu === true ? ' q-img--menu' : '') + } + }, + + methods: { + __onLoad (img) { + this.isLoading = false; + this.hasError = false; + this.__computeRatio(img); + this.__updateSrc(); + this.__updateWatcher(this.srcset); + this.$emit('load', this.currentSrc); + }, + + __onError (err) { + clearTimeout(this.ratioTimer); + this.isLoading = false; + this.hasError = true; + this.currentSrc = ''; + this.$emit('error', err); + }, + + __updateSrc () { + if (this.image !== void 0 && this.isLoading === false) { + const src = this.image.currentSrc || this.image.src; + if (this.currentSrc !== src) { + this.currentSrc = src; + } + } + }, + + __updateWatcher (srcset) { + if (srcset) { + if (this.unwatch === void 0) { + this.unwatch = this.$watch('$q.screen.width', this.__updateSrc); + } + } + else if (this.unwatch !== void 0) { + this.unwatch(); + this.unwatch = void 0; + } + }, + + __load () { + clearTimeout(this.ratioTimer); + this.hasError = false; + + if (!this.src) { + this.isLoading = false; + this.image = void 0; + this.currentSrc = ''; + return + } + + this.isLoading = true; + + const img = new Image(); + this.image = img; + + img.onerror = err => { + // if we are still rendering same image + if (this.image === img && this.destroyed !== true) { + this.__onError(err); + } + }; + + img.onload = () => { + if (this.destroyed === true) { + return + } + + // if we are still rendering same image + if (this.image === img) { + if (img.decode !== void 0) { + img + .decode() + .catch(err => { + if (this.image === img && this.destroyed !== true) { + this.__onError(err); + } + }) + .then(() => { + if (this.image === img && this.destroyed !== true) { + this.__onLoad(img); + } + }); + } + else { + this.__onLoad(img); + } + } + }; + + img.src = this.src; + + if (this.srcset) { + img.srcset = this.srcset; + } + + if (this.sizes !== void 0) { + img.sizes = this.sizes; + } + else { + Object.assign(img, { + height: this.height, + width: this.width + }); + } + }, + + __computeRatio (img) { + const { naturalHeight, naturalWidth } = img; + + if (naturalHeight || naturalWidth) { + this.naturalRatio = naturalHeight === 0 + ? 1 + : naturalWidth / naturalHeight; + } + else { + this.ratioTimer = setTimeout(() => { + if (this.image === img && this.destroyed !== true) { + this.__computeRatio(img); + } + }, 100); + } + }, + + __getImage (h) { + const nativeImg = this.nativeContextMenu === true + ? [ + h('img', { + staticClass: 'absolute-full fit', + attrs: { src: this.url, 'aria-hidden': 'true' } + }) + ] + : void 0; + + const content = this.url !== void 0 + ? h('div', { + key: this.url, + staticClass: 'q-img__image absolute-full', + class: this.imgClass, + style: this.imgContainerStyle + }, nativeImg) + : null; + + return this.basic === true + ? content + : h('transition', { + props: { name: 'q-transition--' + this.transition } + }, [ content ]) + }, + + __getContent (h) { + const slotVm = slot(this, this.hasError === true ? 'error' : 'default'); + + if (this.basic === true) { + return h('div', { + key: 'content', + staticClass: 'q-img__content absolute-full' + }, slotVm) + } + + const content = this.isLoading === true + ? h('div', { + key: 'placeholder', + staticClass: 'q-img__loading absolute-full flex flex-center' + }, this.$scopedSlots.loading !== void 0 + ? this.$scopedSlots.loading() + : ( + this.noDefaultSpinner === false + ? [ + h(QSpinner, { + props: { + color: this.spinnerColor, + size: this.spinnerSize + } + }) + ] + : void 0 + ) + ) + : h('div', { + key: 'content', + staticClass: 'q-img__content absolute-full' + }, slotVm); + + return h('transition', { + props: { name: 'q-transition--fade' } + }, [ content ]) + } + }, + + render (h) { + return h('div', { + class: this.classes, + style: this.style, + attrs: this.attrs, + on: { ...this.qListeners } + }, [ + h('div', { style: this.ratioStyle }), + this.__getImage(h), + this.__getContent(h) + ]) + }, + + beforeMount () { + if (this.placeholderSrc !== void 0 && this.ratio === void 0) { + const img = new Image(); + img.src = this.placeholderSrc; + this.__computeRatio(img); + } + this.isLoading === true && this.__load(); + }, + + beforeDestroy () { + this.destroyed = true; + clearTimeout(this.ratioTimer); + this.unwatch !== void 0 && this.unwatch(); + } + }); + + const { passive: passive$2 } = listenOpts; + + var QInfiniteScroll = Vue__default["default"].extend({ + name: 'QInfiniteScroll', + + mixins: [ ListenersMixin ], + + props: { + offset: { + type: Number, + default: 500 + }, + + debounce: { + type: [ String, Number ], + default: 100 + }, + + scrollTarget: { + default: void 0 + }, + + initialIndex: Number, + + disable: Boolean, + reverse: Boolean + }, + + data () { + return { + index: this.initialIndex || 0, + isFetching: false, + isWorking: true + } + }, + + watch: { + disable (val) { + if (val === true) { this.stop(); } + else { this.resume(); } + }, + + reverse () { + if (this.isFetching === false && this.isWorking === true) { + this.immediatePoll(); + } + }, + + scrollTarget () { + this.updateScrollTarget(); + }, + + debounce (val) { + this.__setDebounce(val); + } + }, + + methods: { + poll () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable(); + + if (this.disable === true || this.isFetching === true || this.isWorking === false) { + return + } + + if (this.__scrollTarget === window && document.qScrollPrevented === true) { + this.clearExecuteWhenScrollable = executeWhenScrollable(this.poll); + + return + } + + const + scrollHeight = getScrollHeight(this.__scrollTarget), + scrollPosition = getScrollPosition(this.__scrollTarget), + containerHeight = height(this.__scrollTarget); + + if (this.reverse === false) { + if (Math.round(scrollPosition + containerHeight + this.offset) >= Math.round(scrollHeight)) { + this.trigger(); + } + } + else if (Math.round(scrollPosition) < this.offset) { + this.trigger(); + } + }, + + trigger () { + if (this.disable === true || this.isFetching === true || this.isWorking === false) { + return + } + + this.index++; + this.isFetching = true; + + const heightBefore = getScrollHeight(this.__scrollTarget); + + this.$emit('load', this.index, stop => { + if (this.isWorking === true) { + this.isFetching = false; + this.$nextTick(() => { + if (this.reverse === true) { + const + heightAfter = getScrollHeight(this.__scrollTarget), + scrollPosition = getScrollPosition(this.__scrollTarget), + heightDifference = heightAfter - heightBefore; + + setScrollPosition(this.__scrollTarget, scrollPosition + heightDifference); + } + + if (stop === true) { + this.stop(); + } + else { + this.$el.closest('body') && this.poll(); + } + }); + } + }); + }, + + reset () { + this.index = 0; + }, + + resume () { + if (this.isWorking === false) { + this.isWorking = true; + this.__scrollTarget.addEventListener('scroll', this.poll, passive$2); + } + this.immediatePoll(); + }, + + stop () { + if (this.isWorking === true) { + this.isWorking = false; + this.isFetching = false; + this.__scrollTarget.removeEventListener('scroll', this.poll, passive$2); + typeof this.poll.cancel === 'function' && this.poll.cancel(); + } + }, + + updateScrollTarget () { + if (this.__scrollTarget && this.isWorking === true) { + this.__scrollTarget.removeEventListener('scroll', this.poll, passive$2); + } + + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget); + + if (this.isWorking === true) { + this.__scrollTarget.addEventListener('scroll', this.poll, passive$2); + + if (this.reverse === true) { + const + scrollHeight = getScrollHeight(this.__scrollTarget), + containerHeight = height(this.__scrollTarget); + + setScrollPosition(this.__scrollTarget, scrollHeight - containerHeight); + } + + this.immediatePoll(); + } + }, + + setIndex (index) { + this.index = index; + }, + + __setDebounce (val) { + val = parseInt(val, 10); + + const oldPoll = this.poll; + + this.poll = val <= 0 + ? this.immediatePoll + : debounce(this.immediatePoll, isNaN(val) === true ? 100 : val); + + if (this.__scrollTarget && this.isWorking === true) { + if (oldPoll !== void 0) { + this.__scrollTarget.removeEventListener('scroll', oldPoll, passive$2); + } + + this.__scrollTarget.addEventListener('scroll', this.poll, passive$2); + } + } + }, + + mounted () { + this.immediatePoll = this.poll; + this.__setDebounce(this.debounce); + + this.updateScrollTarget(); + }, + + activated () { + if (this.__scrollPosition !== void 0 && this.__scrollTarget) { + setScrollPosition(this.__scrollTarget, this.__scrollPosition); + } + }, + + deactivated () { + this.__scrollPosition = this.__scrollTarget + ? getScrollPosition(this.__scrollTarget) + : void 0; + }, + + beforeDestroy () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable(); + this.stop(); + }, + + render (h) { + const child = uniqueSlot(this, 'default', []); + + if (this.disable !== true && this.isWorking === true) { + child[this.reverse === false ? 'push' : 'unshift']( + h('div', { + staticClass: 'q-infinite-scroll__loading', + class: this.isFetching === true ? '' : 'invisible' + }, slot(this, 'loading')) + ); + } + + return h('div', { + staticClass: 'q-infinite-scroll', + on: { ...this.qListeners } + }, child) + } + }); + + var QInnerLoading = Vue__default["default"].extend({ + name: 'QInnerLoading', + + mixins: [ ListenersMixin, DarkMixin, TransitionMixin ], + + props: { + showing: Boolean, + color: String, + + size: { + type: [String, Number], + default: 42 + }, + + label: String, + labelClass: String, + labelStyle: [ String, Array, Object ] + }, + + computed: { + classes () { + return 'q-inner-loading absolute-full column flex-center' + + ` q-inner-loading--${this.darkSuffix}` + }, + + labelClasses () { + return 'q-inner-loading__label' + + (this.labelClass !== void 0 ? ` ${this.labelClass}` : '') + } + }, + + methods: { + __getInner (h) { + const child = [ + h(QSpinner, { + props: { + size: this.size, + color: this.color + } + }) + ]; + + if (this.label !== void 0) { + child.push( + h('div', { + class: this.labelClasses, + style: this.labelStyle + }, [ this.label ]) + ); + } + + return child + }, + + __getContent (h) { + return this.showing === true + ? [ + h('div', + { + staticClass: this.classes, + on: { ...this.qListeners } + }, + this.$scopedSlots.default !== void 0 + ? this.$scopedSlots.default() + : this.__getInner(h) + ) + ] + : void 0 + } + }, + + render (h) { + return h('transition', { + props: { + ...this.transitionProps, + appear: true + } + }, this.__getContent(h)) + } + }); + + // leave NAMED_MASKS at top of file (code referenced from docs) + const NAMED_MASKS = { + date: '####/##/##', + datetime: '####/##/## ##:##', + time: '##:##', + fulltime: '##:##:##', + phone: '(###) ### - ####', + card: '#### #### #### ####' + }; + + const TOKENS = { + '#': { pattern: '[\\d]', negate: '[^\\d]' }, + + S: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]' }, + N: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]' }, + + A: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]', transform: v => v.toLocaleUpperCase() }, + a: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]', transform: v => v.toLocaleLowerCase() }, + + X: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]', transform: v => v.toLocaleUpperCase() }, + x: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]', transform: v => v.toLocaleLowerCase() } + }; + + const KEYS = Object.keys(TOKENS); + KEYS.forEach(key => { + TOKENS[key].regex = new RegExp(TOKENS[key].pattern); + }); + + const + tokenRegexMask = new RegExp('\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|([' + KEYS.join('') + '])|(.)', 'g'), + escRegex = /[.*+?^${}()|[\]\\]/g; + + const MARKER = String.fromCharCode(1); + + var MaskMixin = { + props: { + mask: String, + reverseFillMask: Boolean, + fillMask: [Boolean, String], + unmaskedValue: Boolean + }, + + watch: { + type () { + this.__updateMaskInternals(); + }, + + autogrow () { + this.__updateMaskInternals(); + }, + + mask (v) { + if (v !== void 0) { + this.__updateMaskValue(this.innerValue, true); + } + else { + const val = this.__unmask(this.innerValue); + this.__updateMaskInternals(); + this.value !== val && this.$emit('input', val); + } + }, + + fillMask () { + this.hasMask === true && this.__updateMaskValue(this.innerValue, true); + }, + + reverseFillMask () { + this.hasMask === true && this.__updateMaskValue(this.innerValue, true); + }, + + unmaskedValue () { + this.hasMask === true && this.__updateMaskValue(this.innerValue); + } + }, + + methods: { + __getInitialMaskedValue () { + this.__updateMaskInternals(); + + if (this.hasMask === true) { + const masked = this.__mask(this.__unmask(this.value)); + + return this.fillMask !== false + ? this.__fillWithMask(masked) + : masked + } + + return this.value + }, + + __getPaddedMaskMarked (size) { + if (size < this.maskMarked.length) { + return this.maskMarked.slice(-size) + } + + let + maskMarked = this.maskMarked, + pad = ''; + const + padPos = maskMarked.indexOf(MARKER); + + if (padPos > -1) { + for (let i = size - maskMarked.length; i > 0; i--) { + pad += MARKER; + } + + maskMarked = maskMarked.slice(0, padPos) + pad + maskMarked.slice(padPos); + } + + return maskMarked + }, + + __updateMaskInternals () { + this.hasMask = this.mask !== void 0 && + this.mask.length > 0 && + (this.autogrow === true || ['textarea', 'text', 'search', 'url', 'tel', 'password'].includes(this.type)); + + if (this.hasMask === false) { + this.computedUnmask = void 0; + this.maskMarked = ''; + this.maskReplaced = ''; + return + } + + const + computedMask = NAMED_MASKS[this.mask] === void 0 + ? this.mask + : NAMED_MASKS[this.mask], + fillChar = typeof this.fillMask === 'string' && this.fillMask.length > 0 + ? this.fillMask.slice(0, 1) + : '_', + fillCharEscaped = fillChar.replace(escRegex, '\\$&'), + unmask = [], + extract = [], + mask = []; + + let + firstMatch = this.reverseFillMask === true, + unmaskChar = '', + negateChar = ''; + + computedMask.replace(tokenRegexMask, (_, char1, esc, token, char2) => { + if (token !== void 0) { + const c = TOKENS[token]; + mask.push(c); + negateChar = c.negate; + if (firstMatch === true) { + extract.push('(?:' + negateChar + '+)?(' + c.pattern + '+)?(?:' + negateChar + '+)?(' + c.pattern + '+)?'); + firstMatch = false; + } + extract.push('(?:' + negateChar + '+)?(' + c.pattern + ')?'); + } + else if (esc !== void 0) { + unmaskChar = '\\' + (esc === '\\' ? '' : esc); + mask.push(esc); + unmask.push('([^' + unmaskChar + ']+)?' + unmaskChar + '?'); + } + else { + const c = char1 !== void 0 ? char1 : char2; + unmaskChar = c === '\\' ? '\\\\\\\\' : c.replace(escRegex, '\\\\$&'); + mask.push(c); + unmask.push('([^' + unmaskChar + ']+)?' + unmaskChar + '?'); + } + }); + + const + unmaskMatcher = new RegExp( + '^' + + unmask.join('') + + '(' + (unmaskChar === '' ? '.' : '[^' + unmaskChar + ']') + '+)?' + + (unmaskChar === '' ? '' : '[' + unmaskChar + ']*') + '$' + ), + extractLast = extract.length - 1, + extractMatcher = extract.map((re, index) => { + if (index === 0 && this.reverseFillMask === true) { + return new RegExp('^' + fillCharEscaped + '*' + re) + } + else if (index === extractLast) { + return new RegExp( + '^' + re + + '(' + (negateChar === '' ? '.' : negateChar) + '+)?' + + (this.reverseFillMask === true ? '$' : fillCharEscaped + '*') + ) + } + + return new RegExp('^' + re) + }); + + this.computedMask = mask; + this.computedUnmask = val => { + const unmaskMatch = unmaskMatcher.exec(val); + if (unmaskMatch !== null) { + val = unmaskMatch.slice(1).join(''); + } + + const + extractMatch = [], + extractMatcherLength = extractMatcher.length; + + for (let i = 0, str = val; i < extractMatcherLength; i++) { + const m = extractMatcher[i].exec(str); + + if (m === null) { + break + } + + str = str.slice(m.shift().length); + extractMatch.push(...m); + } + if (extractMatch.length > 0) { + return extractMatch.join('') + } + + return val + }; + this.maskMarked = mask.map(v => typeof v === 'string' ? v : MARKER).join(''); + this.maskReplaced = this.maskMarked.split(MARKER).join(fillChar); + }, + + __updateMaskValue (rawVal, updateMaskInternals, inputType) { + const + inp = this.$refs.input, + end = inp.selectionEnd, + endReverse = inp.value.length - end, + unmasked = this.__unmask(rawVal); + + // Update here so unmask uses the original fillChar + updateMaskInternals === true && this.__updateMaskInternals(); + + const + preMasked = this.__mask(unmasked), + masked = this.fillMask !== false + ? this.__fillWithMask(preMasked) + : preMasked, + changed = this.innerValue !== masked; + + // We want to avoid "flickering" so we set value immediately + inp.value !== masked && (inp.value = masked); + + changed === true && (this.innerValue = masked); + + document.activeElement === inp && this.$nextTick(() => { + if (masked === this.maskReplaced) { + const cursor = this.reverseFillMask === true ? this.maskReplaced.length : 0; + inp.setSelectionRange(cursor, cursor, 'forward'); + + return + } + + if (inputType === 'insertFromPaste' && this.reverseFillMask !== true) { + const cursor = end - 1; + this.__moveCursorRight(inp, cursor, cursor); + + return + } + + if (['deleteContentBackward', 'deleteContentForward'].indexOf(inputType) > -1) { + const cursor = this.reverseFillMask === true + ? ( + end === 0 + ? (masked.length > preMasked.length ? 1 : 0) + : Math.max(0, masked.length - (masked === this.maskReplaced ? 0 : Math.min(preMasked.length, endReverse) + 1)) + 1 + ) + : end; + inp.setSelectionRange(cursor, cursor, 'forward'); + + return + } + + if (this.reverseFillMask === true) { + if (changed === true) { + const cursor = Math.max(0, masked.length - (masked === this.maskReplaced ? 0 : Math.min(preMasked.length, endReverse + 1))); + + if (cursor === 1 && end === 1) { + inp.setSelectionRange(cursor, cursor, 'forward'); + } + else { + this.__moveCursorRightReverse(inp, cursor, cursor); + } + } + else { + const cursor = masked.length - endReverse; + inp.setSelectionRange(cursor, cursor, 'backward'); + } + } + else { + if (changed === true) { + const cursor = Math.max(0, this.maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1); + this.__moveCursorRight(inp, cursor, cursor); + } + else { + const cursor = end - 1; + this.__moveCursorRight(inp, cursor, cursor); + } + } + }); + + const val = this.unmaskedValue === true + ? this.__unmask(masked) + : masked; + + String(this.value) !== val && this.__emitValue(val, true); + }, + + __moveCursorForPaste (inp, start, end) { + const preMasked = this.__mask(this.__unmask(inp.value)); + + start = Math.max(0, this.maskMarked.indexOf(MARKER), Math.min(preMasked.length, start)); + + inp.setSelectionRange(start, end, 'forward'); + }, + + __moveCursorLeft (inp, start, end, selection) { + const noMarkBefore = this.maskMarked.slice(start - 1).indexOf(MARKER) === -1; + let i = Math.max(0, start - 1); + + for (; i >= 0; i--) { + if (this.maskMarked[i] === MARKER) { + start = i; + noMarkBefore === true && start++; + break + } + } + + if ( + i < 0 && + this.maskMarked[start] !== void 0 && + this.maskMarked[start] !== MARKER + ) { + return this.__moveCursorRight(inp, 0, 0) + } + + start >= 0 && inp.setSelectionRange( + start, + selection === true ? end : start, 'backward' + ); + }, + + __moveCursorRight (inp, start, end, selection) { + const limit = inp.value.length; + let i = Math.min(limit, end + 1); + + for (; i <= limit; i++) { + if (this.maskMarked[i] === MARKER) { + end = i; + break + } + else if (this.maskMarked[i - 1] === MARKER) { + end = i; + } + } + + if ( + i > limit && + this.maskMarked[end - 1] !== void 0 && + this.maskMarked[end - 1] !== MARKER + ) { + return this.__moveCursorLeft(inp, limit, limit) + } + + inp.setSelectionRange(selection ? start : end, end, 'forward'); + }, + + __moveCursorLeftReverse (inp, start, end, selection) { + const + maskMarked = this.__getPaddedMaskMarked(inp.value.length); + let i = Math.max(0, start - 1); + + for (; i >= 0; i--) { + if (maskMarked[i - 1] === MARKER) { + start = i; + break + } + else if (maskMarked[i] === MARKER) { + start = i; + if (i === 0) { + break + } + } + } + + if ( + i < 0 && + maskMarked[start] !== void 0 && + maskMarked[start] !== MARKER + ) { + return this.__moveCursorRightReverse(inp, 0, 0) + } + + start >= 0 && inp.setSelectionRange( + start, + selection === true ? end : start, 'backward' + ); + }, + + __moveCursorRightReverse (inp, start, end, selection) { + const + limit = inp.value.length, + maskMarked = this.__getPaddedMaskMarked(limit), + noMarkBefore = maskMarked.slice(0, end + 1).indexOf(MARKER) === -1; + let i = Math.min(limit, end + 1); + + for (; i <= limit; i++) { + if (maskMarked[i - 1] === MARKER) { + end = i; + end > 0 && noMarkBefore === true && end--; + break + } + } + + if ( + i > limit && + maskMarked[end - 1] !== void 0 && + maskMarked[end - 1] !== MARKER + ) { + return this.__moveCursorLeftReverse(inp, limit, limit) + } + + inp.setSelectionRange(selection === true ? start : end, end, 'forward'); + }, + + __onMaskedKeydown (e) { + if (shouldIgnoreKey(e) === true) { + return + } + + const + inp = this.$refs.input, + start = inp.selectionStart, + end = inp.selectionEnd; + + if (e.keyCode === 37 || e.keyCode === 39) { // Left / Right + const fn = this['__moveCursor' + (e.keyCode === 39 ? 'Right' : 'Left') + (this.reverseFillMask === true ? 'Reverse' : '')]; + + e.preventDefault(); + fn(inp, start, end, e.shiftKey); + } + else if ( + e.keyCode === 8 && // Backspace + this.reverseFillMask !== true && + start === end + ) { + this.__moveCursorLeft(inp, start, end, true); + } + else if ( + e.keyCode === 46 && // Delete + this.reverseFillMask === true && + start === end + ) { + this.__moveCursorRightReverse(inp, start, end, true); + } + + this.$emit('keydown', e); + }, + + __mask (val) { + if (val === void 0 || val === null || val === '') { return '' } + + if (this.reverseFillMask === true) { + return this.__maskReverse(val) + } + + const mask = this.computedMask; + + let valIndex = 0, output = ''; + + for (let maskIndex = 0; maskIndex < mask.length; maskIndex++) { + const + valChar = val[valIndex], + maskDef = mask[maskIndex]; + + if (typeof maskDef === 'string') { + output += maskDef; + valChar === maskDef && valIndex++; + } + else if (valChar !== void 0 && maskDef.regex.test(valChar)) { + output += maskDef.transform !== void 0 + ? maskDef.transform(valChar) + : valChar; + valIndex++; + } + else { + return output + } + } + + return output + }, + + __maskReverse (val) { + const + mask = this.computedMask, + firstTokenIndex = this.maskMarked.indexOf(MARKER); + + let valIndex = val.length - 1, output = ''; + + for (let maskIndex = mask.length - 1; maskIndex >= 0 && valIndex > -1; maskIndex--) { + const maskDef = mask[maskIndex]; + + let valChar = val[valIndex]; + + if (typeof maskDef === 'string') { + output = maskDef + output; + valChar === maskDef && valIndex--; + } + else if (valChar !== void 0 && maskDef.regex.test(valChar)) { + do { + output = (maskDef.transform !== void 0 ? maskDef.transform(valChar) : valChar) + output; + valIndex--; + valChar = val[valIndex]; + // eslint-disable-next-line no-unmodified-loop-condition + } while (firstTokenIndex === maskIndex && valChar !== void 0 && maskDef.regex.test(valChar)) + } + else { + return output + } + } + + return output + }, + + __unmask (val) { + return typeof val !== 'string' || this.computedUnmask === void 0 + ? (typeof val === 'number' ? this.computedUnmask('' + val) : val) + : this.computedUnmask(val) + }, + + __fillWithMask (val) { + if (this.maskReplaced.length - val.length <= 0) { + return val + } + + return this.reverseFillMask === true && val.length > 0 + ? this.maskReplaced.slice(0, -val.length) + val + : val + this.maskReplaced.slice(val.length) + } + } + }; + + var QInput = Vue__default["default"].extend({ + name: 'QInput', + + mixins: [ + QField, + MaskMixin, + FormFieldMixin, + FileValueMixin, + ListenersMixin + ], + + props: { + value: { required: false }, + + shadowText: String, + + type: { + type: String, + default: 'text' + }, + + debounce: [String, Number], + + autogrow: Boolean, // makes a textarea + + inputClass: [Array, String, Object], + inputStyle: [Array, String, Object] + }, + + watch: { + value (v) { + if (this.hasMask === true) { + if (this.stopValueWatcher === true) { + this.stopValueWatcher = false; + + if (String(v) === this.emitCachedValue) { + return + } + } + + this.__updateMaskValue(v); + } + else if (this.innerValue !== v) { + this.innerValue = v; + + if ( + this.type === 'number' && + this.hasOwnProperty('tempValue') === true + ) { + if (this.typedNumber === true) { + this.typedNumber = false; + } + else { + delete this.tempValue; + } + } + } + + // textarea only + this.autogrow === true && this.$nextTick(this.__adjustHeight); + }, + + // some browsers lose the native input value + // so we need to reattach it dynamically + // (like type="password" <-> type="text"; see #12078) + type () { + if (this.$refs.input) { + this.$refs.input.value = this.value; + } + }, + + autogrow (autogrow) { + // textarea only + if (autogrow === true) { + this.$nextTick(this.__adjustHeight); + } + // if it has a number of rows set respect it + else if (this.qAttrs.rows > 0 && this.$refs.input !== void 0) { + const inp = this.$refs.input; + inp.style.height = 'auto'; + } + }, + + dense () { + this.autogrow === true && this.$nextTick(this.__adjustHeight); + } + }, + + data () { + return { innerValue: this.__getInitialMaskedValue() } + }, + + computed: { + isTextarea () { + return this.type === 'textarea' || this.autogrow === true + }, + + isTypeText () { + return this.isTextarea === true || ['text', 'search', 'url', 'tel', 'password'].includes(this.type) + }, + + fieldClass () { + return `q-${this.isTextarea === true ? 'textarea' : 'input'}` + + (this.autogrow === true ? ' q-textarea--autogrow' : '') + }, + + hasShadow () { + return this.type !== 'file' && + typeof this.shadowText === 'string' && + this.shadowText.length > 0 + }, + + onEvents () { + const on = { + ...this.qListeners, + input: this.__onInput, + compositionend: this.__onCompositionend, + paste: this.__onPaste, + // Safari < 10.2 & UIWebView doesn't fire compositionend when + // switching focus before confirming composition choice + // this also fixes the issue where some browsers e.g. iOS Chrome + // fires "change" instead of "input" on autocomplete. + change: this.__onChange, + blur: this.__onFinishEditing, + focus: this.__onFocus + }; + + if (this.hasMask === true) { + on.keydown = this.__onMaskedKeydown; + } + + if (this.autogrow === true) { + on.animationend = this.__onAnimationend; + } + + return on + }, + + inputAttrs () { + const attrs = { + tabindex: 0, + 'data-autofocus': this.autofocus || void 0, + rows: this.type === 'textarea' ? 6 : void 0, + 'aria-label': this.label, + name: this.nameProp, + ...this.qAttrs, + id: this.targetUid, + type: this.type, + maxlength: this.maxlength, + disabled: this.disable === true, + readonly: this.readonly === true + }; + + if (this.autogrow === true) { + attrs.rows = 1; + } + + return attrs + } + }, + + methods: { + focus () { + const el = document.activeElement; + if ( + this.$refs.input !== void 0 && + this.$refs.input !== el && + // IE can have null document.activeElement + (el === null || el.id !== this.targetUid) + ) { + managedFocus(this.$refs.input); + } + }, + + select () { + this.$refs.input !== void 0 && this.$refs.input.select(); + }, + + getNativeElement () { + return this.$refs.input + }, + + __onPaste (e) { + if (this.hasMask === true && this.reverseFillMask !== true) { + const inp = e.target; + this.__moveCursorForPaste(inp, inp.selectionStart, inp.selectionEnd); + } + + this.$emit('paste', e); + }, + + __onInput (e) { + if (!e || !e.target || e.target.qComposing === true) { + return + } + + if (this.type === 'file') { + this.$emit('input', e.target.files); + return + } + + const val = e.target.value; + + if (this.hasMask === true) { + this.__updateMaskValue(val, false, e.inputType); + } + else { + this.__emitValue(val); + + if (this.isTypeText === true && e.target === document.activeElement) { + const { selectionStart, selectionEnd } = e.target; + + if (selectionStart !== void 0 && selectionEnd !== void 0) { + this.$nextTick(() => { + if (e.target === document.activeElement && val.indexOf(e.target.value) === 0) { + e.target.setSelectionRange(selectionStart, selectionEnd); + } + }); + } + } + } + + // we need to trigger it immediately too, + // to avoid "flickering" + this.autogrow === true && this.__adjustHeight(); + }, + + __onChange (e) { + if (e.target.qComposing === true) { + e.target.qComposing = false; + this.__onInput(e); + } + + clearTimeout(this.emitTimer); + this.emitValueFn !== void 0 && this.emitValueFn(); + + this.$emit('change', e); + }, + + __onFinishEditing (e) { + e !== void 0 && stop(e); + + clearTimeout(this.emitTimer); + this.emitValueFn !== void 0 && this.emitValueFn(); + + this.typedNumber = false; + this.stopValueWatcher = false; + delete this.tempValue; + + // we need to use setTimeout instead of this.$nextTick + // to avoid a bug where focusout is not emitted for type date/time/week/... + this.type !== 'file' && setTimeout(() => { + if (this.$refs.input !== void 0) { + this.$refs.input.value = this.innerValue !== void 0 ? this.innerValue : ''; + } + }); + }, + + __onFocus (e) { + stop(e); + managedFocus(e.target); + }, + + __onCompositionend (e) { + this.qListeners.compositionend !== void 0 && this.$emit('compositionend', e); + this.__onInput(e); + }, + + __onAnimationend (e) { + this.qListeners.animationend !== void 0 && this.$emit('animationend', e); + this.__adjustHeight(); + }, + + __emitValue (val, stopWatcher) { + this.emitValueFn = () => { + if ( + this.type !== 'number' && + this.hasOwnProperty('tempValue') === true + ) { + delete this.tempValue; + } + + if (this.value !== val && this.emitCachedValue !== val) { + this.emitCachedValue = val; + + stopWatcher === true && (this.stopValueWatcher = true); + this.$emit('input', val); + + this.$nextTick(() => { + this.emitCachedValue === val && (this.emitCachedValue = NaN); + }); + } + + this.emitValueFn = void 0; + }; + + if (this.type === 'number') { + this.typedNumber = true; + this.tempValue = val; + } + + if (this.debounce !== void 0) { + clearTimeout(this.emitTimer); + this.tempValue = val; + this.emitTimer = setTimeout(this.emitValueFn, this.debounce); + } + else { + this.emitValueFn(); + } + }, + + // textarea only + __adjustHeight () { + requestAnimationFrame(() => { + const inp = this.$refs.input; + if (inp !== void 0) { + const parentStyle = inp.parentNode.style; + const { overflow } = inp.style; + + // reset height of textarea to a small size to detect the real height + // but keep the total control size the same + // Firefox rulez #14263, #14344 + this.$q.platform.is.firefox !== true && (inp.style.overflow = 'hidden'); + inp.style.height = '1px'; + parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px'; + + inp.style.height = inp.scrollHeight + 'px'; + inp.style.overflow = overflow; + parentStyle.marginBottom = ''; + } + }); + }, + + __getCurValue () { + return this.hasOwnProperty('tempValue') === true + ? this.tempValue + : (this.innerValue !== void 0 ? this.innerValue : '') + }, + + __getShadowControl (h) { + return h('div', { + staticClass: 'q-field__native q-field__shadow absolute-bottom no-pointer-events' + + (this.isTextarea === true ? '' : ' text-no-wrap') + }, [ + h('span', { staticClass: 'invisible' }, this.__getCurValue()), + h('span', this.shadowText) + ]) + }, + + __getControl (h) { + return h(this.isTextarea === true ? 'textarea' : 'input', { + ref: 'input', + staticClass: 'q-field__native q-placeholder', + style: this.inputStyle, + class: this.inputClass, + attrs: this.inputAttrs, + on: this.onEvents, + domProps: this.type !== 'file' + ? { value: this.__getCurValue() } + : this.formDomProps + }) + } + }, + + created () { + this.emitCachedValue = NaN; + }, + + mounted () { + // textarea only + this.autogrow === true && this.__adjustHeight(); + }, + + beforeDestroy () { + this.__onFinishEditing(); + } + }); + + const defaultCfg$1 = { + threshold: 0, + root: null, + rootMargin: '0px' + }; + + function update$3 (el, ctx, value, modifiers) { + let handler, cfg, changed; + + if (typeof value === 'function') { + handler = value; + cfg = defaultCfg$1; + changed = ctx.cfg === void 0; + } + else { + handler = value.handler; + cfg = Object.assign({}, defaultCfg$1, value.cfg); + changed = ctx.cfg === void 0 || isDeepEqual(ctx.cfg, cfg) === false; + } + + if (ctx.handler !== handler) { + ctx.handler = handler; + } + + const once = modifiers.once === true; + if (ctx.once !== once) { + ctx.once = once; + } + + if (changed === true) { + ctx.cfg = cfg; + ctx.observer !== void 0 && ctx.observer.unobserve(el); + + ctx.observer = new IntersectionObserver(([ entry ]) => { + if (typeof ctx.handler === 'function') { + // if observed element is part of a vue transition + // then we need to be careful... + if ( + entry.rootBounds === null && + (el.__vue__ !== void 0 ? el.__vue__._inactive !== true : document.body.contains(el) === true) + ) { + ctx.observer.unobserve(el); + ctx.observer.observe(el); + return + } + + const res = ctx.handler(entry, ctx.observer); + + if ( + res === false || + (ctx.once === true && entry.isIntersecting === true) + ) { + destroy$8(el); + } + } + }, cfg); + + ctx.observer.observe(el); + } + } + + function destroy$8 (el) { + const ctx = el.__qvisible; + + if (ctx !== void 0) { + ctx.observer !== void 0 && ctx.observer.unobserve(el); + delete el.__qvisible; + } + } + + var Intersection = { + name: 'intersection', + + inserted (el, { modifiers, value }) { + if (el.__qvisible !== void 0) { + destroy$8(el); + el.__qvisible_destroyed = true; + } + + const ctx = {}; + + update$3(el, ctx, value, modifiers); + + el.__qvisible = ctx; + }, + + update (el, { value, modifiers }) { + const ctx = el.__qvisible; + ctx !== void 0 && update$3(el, ctx, value, modifiers); + }, + + unbind (el) { + if (el.__qvisible_destroyed === void 0) { + destroy$8(el); + } + else { + delete el.__qvisible_destroyed; + } + } + }; + + var QIntersection = Vue__default["default"].extend({ + name: 'QIntersection', + + mixins: [ TagMixin, ListenersMixin ], + + directives: { + Intersection + }, + + props: { + once: Boolean, + transition: String, + + ssrPrerender: Boolean, + + margin: String, + threshold: [ Number, Array ], + root: { + default: null + }, + + disable: Boolean + }, + + data () { + return { + showing: onSSR === true ? this.ssrPrerender : false + } + }, + + computed: { + value () { + return this.root !== void 0 || this.margin !== void 0 || this.threshold !== void 0 + ? { + handler: this.__trigger, + cfg: { + root: this.root, + rootMargin: this.margin, + threshold: this.threshold + } + } + : this.__trigger + }, + + directives () { + if (this.disable !== true && (onSSR !== true || this.once !== true || this.ssrPrerender !== true)) { + return [{ + name: 'intersection', + value: this.value, + modifiers: { + once: this.once + } + }] + } + } + }, + + methods: { + __trigger (entry) { + if (this.showing !== entry.isIntersecting) { + this.showing = entry.isIntersecting; + + if (this.qListeners.visibility !== void 0) { + this.$emit('visibility', this.showing); + } + } + } + }, + + render (h) { + const content = this.showing === true + ? slot(this, 'default') + : void 0; + + return h(this.tag, { + staticClass: 'q-intersection', + on: { ...this.qListeners }, + directives: this.directives + }, this.transition + ? [ + h('transition', { + props: { name: 'q-transition--' + this.transition } + }, content) + ] + : content + ) + } + }); + + // PGDOWN, LEFT, DOWN, PGUP, RIGHT, UP + const keyCodes$1 = [34, 37, 40, 33, 39, 38]; + + var QKnob = Vue__default["default"].extend({ + name: 'QKnob', + + mixins: [ + { props: QCircularProgress.options.props }, + FormMixin + ], + + directives: { + TouchPan + }, + + props: { + innerMin: Number, + innerMax: Number, + + step: { + type: Number, + default: 1, + validator: v => v >= 0 + }, + + tabindex: { + type: [Number, String], + default: 0 + }, + + disable: Boolean, + readonly: Boolean + }, + + data () { + const innerMin = this.__getInnerMin(this.innerMin); + const innerMax = this.__getInnerMax(this.innerMax); + + return { + model: this.value === null ? innerMin : between(this.value, innerMin, innerMax), + dragging: false + } + }, + + watch: { + modelUpdate () { + this.model = this.value === null + ? this.computedInnerMin + : between(this.value, this.computedInnerMin, this.computedInnerMax); + + this.__updateValue(true); + } + }, + + computed: { + classes () { + return 'q-knob non-selectable q-key-group-navigation--ignore-key' + ( + this.editable === true + ? ' q-knob--editable' + : (this.disable === true ? ' disabled' : '') + ) + }, + + computedInnerMin () { + return this.__getInnerMin(this.innerMin) + }, + + computedInnerMax () { + return this.__getInnerMax(this.innerMax) + }, + + modelUpdate () { + return `${this.value}|${this.computedInnerMin}|${this.computedInnerMax}` + }, + + editable () { + return this.disable === false && this.readonly === false + }, + + decimals () { + return (String(this.step).trim('0').split('.')[1] || '').length + }, + + computedStep () { + return this.step === 0 ? 1 : this.step + }, + + computedInstantFeedback () { + return this.instantFeedback === true || + this.dragging === true + }, + + onEvents () { + return this.$q.platform.is.mobile === true + ? { click: this.__click } + : { + mousedown: this.__activate, + click: this.__click, + keydown: this.__keydown, + keyup: this.__keyup + } + }, + + attrs () { + const attrs = { + role: 'slider', + 'aria-valuemin': this.computedInnerMin, + 'aria-valuemax': this.computedInnerMax, + 'aria-valuenow': this.value + }; + + if (this.editable === true) { + attrs.tabindex = this.tabindex; + } + else { + attrs[`aria-${this.disable === true ? 'disabled' : 'readonly'}`] = ''; + } + + return attrs + } + }, + + methods: { + __getInnerMin (val) { + return isNaN(val) === true || this.innerMin < this.min + ? this.min + : this.innerMin + }, + + __getInnerMax (val) { + return isNaN(val) === true || val > this.max + ? this.max + : this.innerMax + }, + + __updateCenterPosition () { + const { top, left, width, height } = this.$el.getBoundingClientRect(); + this.centerPosition = { + top: top + height / 2, + left: left + width / 2 + }; + }, + + __pan (event) { + if (event.isFinal) { + this.__updatePosition(event.evt, true); + this.dragging = false; + } + else if (event.isFirst) { + this.__updateCenterPosition(); + this.dragging = true; + this.__updatePosition(event.evt); + } + else { + this.__updatePosition(event.evt); + } + }, + + __click (evt) { + this.__updateCenterPosition(); + this.__updatePosition(evt, true); + }, + + __keydown (evt) { + if (!keyCodes$1.includes(evt.keyCode)) { + return + } + + stopAndPrevent(evt); + + const + step = ([34, 33].includes(evt.keyCode) ? 10 : 1) * this.computedStep, + offset = [34, 37, 40].includes(evt.keyCode) ? -step : step; + + this.model = between( + parseFloat((this.model + offset).toFixed(this.decimals)), + this.computedInnerMin, + this.computedInnerMax + ); + + this.__updateValue(); + }, + + __keyup (evt) { + if (keyCodes$1.includes(evt.keyCode)) { + this.__updateValue(true); + } + }, + + __activate (evt) { + this.__updateCenterPosition(); + this.__updatePosition(evt); + }, + + __updatePosition (evt, change) { + const + center = this.centerPosition, + pos = position(evt), + height = Math.abs(pos.top - center.top), + distance = Math.sqrt( + height ** 2 + + Math.abs(pos.left - center.left) ** 2 + ); + + let angle = Math.asin(height / distance) * (180 / Math.PI); + + if (pos.top < center.top) { + angle = center.left < pos.left ? 90 - angle : 270 + angle; + } + else { + angle = center.left < pos.left ? angle + 90 : 270 - angle; + } + + if (this.$q.lang.rtl === true) { + angle = normalizeToInterval(-angle - this.angle, 0, 360); + } + else if (this.angle) { + angle = normalizeToInterval(angle - this.angle, 0, 360); + } + + if (this.reverse === true) { + angle = 360 - angle; + } + + let model = this.min + (angle / 360) * (this.max - this.min); + + if (this.step !== 0) { + const + step = this.computedStep, + modulo = model % step; + + model = model - modulo + + (Math.abs(modulo) >= step / 2 ? (modulo < 0 ? -1 : 1) * step : 0); + + model = parseFloat(model.toFixed(this.decimals)); + } + + model = between(model, this.computedInnerMin, this.computedInnerMax); + + this.$emit('drag-value', model); + + if (this.model !== model) { + this.model = model; + } + + this.__updateValue(change); + }, + + __updateValue (change) { + this.value !== this.model && this.$emit('input', this.model); + change === true && this.$emit('change', this.model); + }, + + __getNameInput () { + return this.$createElement('input', { attrs: this.formAttrs }) + } + }, + + render (h) { + const data = { + class: this.classes, + attrs: this.attrs, + props: { + ...this.$props, + value: this.model, + instantFeedback: this.computedInstantFeedback + } + }; + + if (this.editable === true) { + data.key = 'dir'; + data.on = this.onEvents; + data.directives = cache(this, 'dir', [{ + name: 'touch-pan', + value: this.__pan, + modifiers: { + prevent: true, + stop: true, + mouse: true + } + }]); + + if (this.name !== void 0) { + data.scopedSlots = { + internal: this.__getNameInput + }; + } + } + + return h(QCircularProgress, data, slot(this, 'default')) + } + }); + + const { passive: passive$1 } = listenOpts; + const axisValues = [ 'both', 'horizontal', 'vertical' ]; + + var QScrollObserver = Vue__default["default"].extend({ + name: 'QScrollObserver', + + props: { + axis: { + type: String, + validator: v => axisValues.includes(v), + default: 'vertical' + }, + + debounce: [ String, Number ], + + scrollTarget: { + default: void 0 + } + }, + + render: noop, // eslint-disable-line + + data () { + return { + scroll: { + position: { + top: 0, + left: 0 + }, + + direction: 'none', + directionChanged: false, + + delta: { + top: 0, + left: 0 + }, + + inflectionPoint: { + top: 0, + left: 0 + } + } + } + }, + + watch: { + scrollTarget () { + this.__unconfigureScrollTarget(); + this.__configureScrollTarget(); + } + }, + + methods: { + getPosition () { + return JSON.parse(JSON.stringify(this.scroll)) + }, + + trigger (immediately) { + if (immediately === true || this.debounce === 0 || this.debounce === '0') { + this.__emit(); + } + else if (this.clearTimer === void 0) { + const [ timer, fn ] = this.debounce + ? [ setTimeout(this.__emit, this.debounce), clearTimeout ] + : [ requestAnimationFrame(this.__emit), cancelAnimationFrame ]; + + this.clearTimer = () => { + fn(timer); + this.clearTimer = void 0; + }; + } + }, + + __emit () { + this.clearTimer !== void 0 && this.clearTimer(); + + const top = Math.max(0, getVerticalScrollPosition(this.__scrollTarget)); + const left = getHorizontalScrollPosition(this.__scrollTarget); + + const delta = { + top: top - this.scroll.position.top, + left: left - this.scroll.position.left + }; + + if ( + (this.axis === 'vertical' && delta.top === 0) || + (this.axis === 'horizontal' && delta.left === 0) + ) { + return + } + + const curDir = Math.abs(delta.top) >= Math.abs(delta.left) + ? (delta.top < 0 ? 'up' : 'down') + : (delta.left < 0 ? 'left' : 'right'); + + this.scroll.position = { top, left }; + this.scroll.directionChanged = this.scroll.direction !== curDir; + this.scroll.delta = delta; + + if (this.scroll.directionChanged === true) { + this.scroll.direction = curDir; + this.scroll.inflectionPoint = this.scroll.position; + } + + this.$emit('scroll', this.getPosition()); + }, + + __configureScrollTarget () { + this.__scrollTarget = getScrollTarget(this.$el.parentNode, this.scrollTarget); + this.__scrollTarget.addEventListener('scroll', this.trigger, passive$1); + this.trigger(true); + }, + + __unconfigureScrollTarget () { + if (this.__scrollTarget !== void 0) { + this.__scrollTarget.removeEventListener('scroll', this.trigger, passive$1); + this.__scrollTarget = void 0; + } + } + }, + + mounted () { + this.__configureScrollTarget(); + }, + + beforeDestroy () { + this.clearTimer !== void 0 && this.clearTimer(); + this.__unconfigureScrollTarget(); + } + }); + + var QLayout = Vue__default["default"].extend({ + name: 'QLayout', + + mixins: [ ListenersMixin ], + + provide () { + return { + layout: this + } + }, + + props: { + container: Boolean, + view: { + type: String, + default: 'hhh lpr fff', + validator: v => /^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(v.toLowerCase()) + } + }, + + data () { + return { + // page related + height: this.$q.screen.height, + width: this.container === true ? 0 : this.$q.screen.width, + + // container only prop + containerHeight: 0, + scrollbarWidth: onSSR === true ? 0 : getScrollbarWidth(), + + header: { + size: 0, + offset: 0, + space: false + }, + right: { + size: 300, + offset: 0, + space: false + }, + footer: { + size: 0, + offset: 0, + space: false + }, + left: { + size: 300, + offset: 0, + space: false + }, + + scroll: { + position: 0, + direction: 'down' + } + } + }, + + computed: { + rows () { + const rows = this.view.toLowerCase().split(' '); + return { + top: rows[0].split(''), + middle: rows[1].split(''), + bottom: rows[2].split('') + } + }, + + style () { + return this.container === true + ? null + : { minHeight: this.$q.screen.height + 'px' } + }, + + // used by container only + targetStyle () { + if (this.scrollbarWidth !== 0) { + return { [this.$q.lang.rtl === true ? 'left' : 'right']: `${this.scrollbarWidth}px` } + } + }, + + targetChildStyle () { + if (this.scrollbarWidth !== 0) { + return { + [this.$q.lang.rtl === true ? 'right' : 'left']: 0, + [this.$q.lang.rtl === true ? 'left' : 'right']: `-${this.scrollbarWidth}px`, + width: `calc(100% + ${this.scrollbarWidth}px)` + } + } + }, + + totalWidth () { + return this.width + this.scrollbarWidth + }, + + classes () { + return 'q-layout q-layout--' + + (this.container === true ? 'containerized' : 'standard') + }, + + scrollbarEvtAction () { + return this.container !== true && this.scrollbarWidth > 0 + ? 'add' : 'remove' + } + }, + + watch: { + scrollbarEvtAction: '__updateScrollEvent' + }, + + created () { + this.instances = {}; + }, + + mounted () { + this.scrollbarEvtAction === 'add' && this.__updateScrollEvent('add'); + }, + + beforeDestroy () { + this.scrollbarEvtAction === 'add' && this.__updateScrollEvent('remove'); + }, + + render (h) { + const layout = h('div', { + class: this.classes, + style: this.style, + attrs: { tabindex: -1 }, + on: { ...this.qListeners } + }, mergeSlot([ + h(QScrollObserver, { + key: 'scroll', + on: cache(this, 'scroll', { scroll: this.__onPageScroll }) + }), + + h(QResizeObserver, { + key: 'resizeOut', + on: cache(this, 'resizeOut', { resize: this.__onPageResize }) + }) + ], this, 'default')); + + return this.container === true + ? h('div', { + staticClass: 'q-layout-container overflow-hidden' + }, [ + h(QResizeObserver, { + key: 'resizeIn', + on: cache(this, 'resizeIn', { resize: this.__onContainerResize }) + }), + h('div', { + staticClass: 'absolute-full', + style: this.targetStyle + }, [ + h('div', { + staticClass: 'scroll', + style: this.targetChildStyle + }, [ layout ]) + ]) + ]) + : layout + }, + + methods: { + __animate () { + if (this.timer !== void 0) { + clearTimeout(this.timer); + } + else { + document.body.classList.add('q-body--layout-animate'); + } + this.timer = setTimeout(() => { + document.body.classList.remove('q-body--layout-animate'); + this.timer = void 0; + }, 150); + }, + + __onPageScroll (data) { + if (this.container === true || document.qScrollPrevented !== true) { + this.scroll = { + position: data.position.top, + direction: data.direction, + directionChanged: data.directionChanged, + inflectionPoint: data.inflectionPoint.top, + delta: data.delta.top + }; + + this.qListeners.scroll !== void 0 && this.$emit('scroll', { ...this.scroll }); + } + }, + + __onPageResize ({ height, width }) { + let resized = false; + + if (this.height !== height) { + resized = true; + this.height = height; + if (this.qListeners['scroll-height'] !== void 0) { + this.$emit('scroll-height', height); + } + this.__updateScrollbarWidth(); + } + if (this.width !== width) { + resized = true; + this.width = width; + } + + if (resized === true && this.qListeners.resize !== void 0) { + this.$emit('resize', { height, width }); + } + }, + + __onContainerResize ({ height }) { + if (this.containerHeight !== height) { + this.containerHeight = height; + this.__updateScrollbarWidth(); + } + }, + + __updateScrollbarWidth () { + if (this.container === true) { + const width = this.height > this.containerHeight + ? getScrollbarWidth() + : 0; + + if (this.scrollbarWidth !== width) { + this.scrollbarWidth = width; + } + } + }, + + __updateScrollEvent (action) { + if (this.timerScrollbar !== void 0 && action === 'remove') { + clearTimeout(this.timerScrollbar); + this.__restoreScrollbar(); + } + + window[`${action}EventListener`]('resize', this.__hideScrollbar); + }, + + __hideScrollbar () { + if (this.timerScrollbar === void 0) { + const { offsetHeight, classList } = document.body; + + // if it has no scrollbar then there's nothing to do + if (offsetHeight > this.$q.screen.height) { + return + } + + classList.add('hide-scrollbar'); + } + else { + clearTimeout(this.timerScrollbar); + } + + this.timerScrollbar = setTimeout(this.__restoreScrollbar, 200); + }, + + __restoreScrollbar () { + this.timerScrollbar = void 0; + document.body.classList.remove('hide-scrollbar'); + } + } + }); + + var QMarkupTable = Vue__default["default"].extend({ + name: 'QMarkupTable', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + dense: Boolean, + flat: Boolean, + bordered: Boolean, + square: Boolean, + separator: { + type: String, + default: 'horizontal', + validator: v => ['horizontal', 'vertical', 'cell', 'none'].includes(v) + }, + wrapCells: Boolean + }, + + computed: { + classes () { + return `q-table--${this.separator}-separator` + + ` q-table--${this.darkSuffix} q-table__card--${this.darkSuffix} q-${this.darkSuffix}` + + (this.dense === true ? ' q-table--dense' : '') + + (this.flat === true ? ' q-table--flat' : '') + + (this.bordered === true ? ' q-table--bordered' : '') + + (this.square === true ? ' q-table--square' : '') + + (this.wrapCells === false ? ' q-table--no-wrap' : '') + } + }, + + render (h) { + return h('div', { + staticClass: 'q-markup-table q-table__container q-table__card', + class: this.classes, + on: { ...this.qListeners } + }, [ + h('table', { staticClass: 'q-table' }, slot(this, 'default')) + ]) + } + }); + + var QNoSsr = Vue__default["default"].extend({ + name: 'QNoSsr', + + mixins: [ CanRenderMixin, TagMixin, ListenersMixin ], + + props: { + placeholder: String + }, + + render (h) { + const data = { + on: { ...this.qListeners } + }; + + if (this.canRender === true) { + const node = slot(this, 'default'); + return node === void 0 + ? node + : (node.length > 1 ? h(this.tag, data, node) : node[0]) + } + + data.staticClass = 'q-no-ssr-placeholder'; + + const node = slot(this, 'placeholder'); + if (node !== void 0) { + return node.length > 1 + ? h(this.tag, data, node) + : node[0] + } + + if (this.placeholder !== void 0) { + return h(this.tag, data, [ + this.placeholder + ]) + } + } + }); + + var QRadio = Vue__default["default"].extend({ + name: 'QRadio', + + mixins: [ DarkMixin, OptionSizeMixin, FormMixin, RefocusTargetMixin ], + + props: { + value: { + required: true + }, + val: { + required: true + }, + + label: String, + leftLabel: Boolean, + + checkedIcon: String, + uncheckedIcon: String, + + color: String, + keepColor: Boolean, + dense: Boolean, + + disable: Boolean, + tabindex: [String, Number] + }, + + computed: { + isTrue () { + return this.value === this.val + }, + + classes () { + return 'q-radio cursor-pointer no-outline row inline no-wrap items-center' + + (this.disable === true ? ' disabled' : '') + + ` q-radio--${this.darkSuffix}` + + (this.dense === true ? ' q-radio--dense' : '') + + (this.leftLabel === true ? ' reverse' : '') + }, + + innerClass () { + const color = this.color !== void 0 && ( + this.keepColor === true || + this.isTrue === true + ) + ? ` text-${this.color}` + : ''; + + return `q-radio__inner--${this.isTrue === true ? 'truthy' : 'falsy'}${color}` + }, + + computedIcon () { + return this.isTrue === true + ? this.checkedIcon + : this.uncheckedIcon + }, + + computedTabindex () { + return this.disable === true ? -1 : this.tabindex || 0 + }, + + formAttrs () { + const prop = { type: 'radio' }; + + this.name !== void 0 && Object.assign(prop, { + name: this.name, + value: this.val + }); + + return prop + }, + + formDomProps () { + if (this.name !== void 0 && this.isTrue === true) { + return { checked: true } + } + }, + + attrs () { + const attrs = { + tabindex: this.computedTabindex, + role: 'radio', + 'aria-label': this.label, + 'aria-checked': this.isTrue === true ? 'true' : 'false' + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + + return attrs + } + }, + + methods: { + set (e) { + if (e !== void 0) { + stopAndPrevent(e); + this.__refocusTarget(e); + } + + if (this.disable !== true && this.isTrue !== true) { + this.$emit('input', this.val, e); + } + } + }, + + render (h) { + const content = this.computedIcon !== void 0 + ? [ + h('div', { + key: 'icon', + staticClass: 'q-radio__icon-container absolute-full flex flex-center no-wrap' + }, [ + h(QIcon, { + staticClass: 'q-radio__icon', + props: { name: this.computedIcon } + }) + ]) + ] + : [ + h('svg', { + key: 'svg', + staticClass: 'q-radio__bg absolute non-selectable', + attrs: { focusable: 'false' /* needed for IE11 */, viewBox: '0 0 24 24' } + }, [ + h('path', { + attrs: { + d: 'M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12' + } + }), + + h('path', { + staticClass: 'q-radio__check', + attrs: { + d: 'M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6' + } + }) + ]) + ]; + + this.disable !== true && this.__injectFormInput( + content, + 'unshift', + 'q-radio__native q-ma-none q-pa-none' + ); + + const child = [ + h('div', { + staticClass: 'q-radio__inner relative-position', + class: this.innerClass, + style: this.sizeStyle, + attrs: { 'aria-hidden': 'true' } + }, content) + ]; + + if (this.__refocusTargetEl !== void 0) { + child.push(this.__refocusTargetEl); + } + + const label = this.label !== void 0 + ? mergeSlot([ this.label ], this, 'default') + : slot(this, 'default'); + + label !== void 0 && child.push( + h('div', { + staticClass: 'q-radio__label q-anchor--skip' + }, label) + ); + + return h('div', { + key: 'inpExt', + class: this.classes, + attrs: this.attrs, + on: cache(this, 'inpExt', { + click: this.set, + keydown: e => { + if (e.keyCode === 13 || e.keyCode === 32) { + stopAndPrevent(e); + } + }, + keyup: e => { + if (e.keyCode === 13 || e.keyCode === 32) { + this.set(e); + } + } + }) + }, child) + } + }); + + var QToggle = Vue__default["default"].extend({ + name: 'QToggle', + + mixins: [ CheckboxMixin ], + + props: { + icon: String, + + iconColor: String + }, + + computed: { + computedIcon () { + return ( + this.isTrue === true + ? this.checkedIcon + : (this.isIndeterminate === true ? this.indeterminateIcon : this.uncheckedIcon) + ) || this.icon + }, + + computedIconColor () { + if (this.isTrue === true) { + return this.iconColor + } + } + }, + + methods: { + __getInner (h) { + return [ + h('div', { staticClass: 'q-toggle__track' }), + + h('div', { + staticClass: 'q-toggle__thumb absolute flex flex-center no-wrap' + }, this.computedIcon !== void 0 + ? [ + h(QIcon, { + props: { + name: this.computedIcon, + color: this.computedIconColor + } + }) + ] + : void 0 + ) + ] + } + }, + + created () { + this.type = 'toggle'; + } + }); + + const components$1 = { + radio: QRadio, + checkbox: QCheckbox, + toggle: QToggle + }; + + const typeValues = Object.keys(components$1); + + var QOptionGroup = Vue__default["default"].extend({ + name: 'QOptionGroup', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + value: { + required: true + }, + options: { + type: Array, + validator (opts) { + return opts.every(opt => 'value' in opt && 'label' in opt) + } + }, + + name: String, + + type: { + default: 'radio', + validator: v => typeValues.includes(v) + }, + + color: String, + keepColor: Boolean, + dense: Boolean, + + size: String, + + leftLabel: Boolean, + inline: Boolean, + disable: Boolean + }, + + computed: { + component () { + return components$1[this.type] + }, + + model () { + return Array.isArray(this.value) + ? this.value.slice() + : this.value + }, + + classes () { + return 'q-option-group q-gutter-x-sm' + + (this.inline === true ? ' q-option-group--inline' : '') + }, + + attrs () { + if (this.type === 'radio') { + const attrs = { + role: 'radiogroup' + }; + + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + + return attrs + } + + return { role: 'group' } + } + }, + + methods: { + __update (value) { + this.$emit('input', value); + } + }, + + created () { + const isArray = Array.isArray(this.value); + + if (this.type === 'radio') { + if (isArray) { + console.error('q-option-group: model should not be array'); + } + } + else if (isArray === false) { + console.error('q-option-group: model should be array in your case'); + } + }, + + render (h) { + return h('div', { + class: this.classes, + attrs: this.attrs, + on: { ...this.qListeners } + }, this.options.map((opt, i) => { + const child = this.$scopedSlots[ 'label-' + i ] !== void 0 + ? this.$scopedSlots[ 'label-' + i ](opt) + : ( + this.$scopedSlots.label !== void 0 + ? this.$scopedSlots.label(opt) + : void 0 + ); + + return h('div', [ + h(this.component, { + key: 'inp', + props: { + value: this.value, + val: opt.value, + name: opt.name === void 0 ? this.name : opt.name, + disable: this.disable || opt.disable, + label: child === void 0 ? opt.label : void 0, + leftLabel: opt.leftLabel === void 0 ? this.leftLabel : opt.leftLabel, + color: opt.color === void 0 ? this.color : opt.color, + checkedIcon: opt.checkedIcon, + uncheckedIcon: opt.uncheckedIcon, + dark: opt.dark === void 0 ? this.dark : opt.dark, + size: opt.size === void 0 ? this.size : opt.size, + dense: this.dense, + keepColor: opt.keepColor === void 0 ? this.keepColor : opt.keepColor + }, + on: cache(this, 'inp', { + input: this.__update + }) + }, child) + ]) + })) + } + }); + + var QPage = Vue__default["default"].extend({ + name: 'QPage', + + mixins: [ ListenersMixin ], + + inject: { + pageContainer: { + default () { + console.error('QPage needs to be child of QPageContainer'); + } + }, + layout: {} + }, + + props: { + padding: Boolean, + styleFn: Function + }, + + computed: { + style () { + const offset = + (this.layout.header.space === true ? this.layout.header.size : 0) + + (this.layout.footer.space === true ? this.layout.footer.size : 0); + + if (typeof this.styleFn === 'function') { + const height = this.layout.container === true + ? this.layout.containerHeight + : this.$q.screen.height; + + return this.styleFn(offset, height) + } + + return { + minHeight: this.layout.container === true + ? (this.layout.containerHeight - offset) + 'px' + : ( + this.$q.screen.height === 0 + ? `calc(100vh - ${offset}px)` + : (this.$q.screen.height - offset) + 'px' + ) + } + }, + + classes () { + if (this.padding === true) { + return 'q-layout-padding' + } + } + }, + + render (h) { + return h('main', { + staticClass: 'q-page', + style: this.style, + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QPageContainer = Vue__default["default"].extend({ + name: 'QPageContainer', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default () { + console.error('QPageContainer needs to be child of QLayout'); + } + } + }, + + provide: { + pageContainer: true + }, + + computed: { + style () { + const css = {}; + + if (this.layout.header.space === true) { + css.paddingTop = `${this.layout.header.size}px`; + } + if (this.layout.right.space === true) { + css[`padding${this.$q.lang.rtl === true ? 'Left' : 'Right'}`] = `${this.layout.right.size}px`; + } + if (this.layout.footer.space === true) { + css.paddingBottom = `${this.layout.footer.size}px`; + } + if (this.layout.left.space === true) { + css[`padding${this.$q.lang.rtl === true ? 'Right' : 'Left'}`] = `${this.layout.left.size}px`; + } + + return css + } + }, + + render (h) { + return h('div', { + staticClass: 'q-page-container', + style: this.style, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QPageSticky = Vue__default["default"].extend({ + name: 'QPageSticky', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default () { + console.error('QPageSticky needs to be child of QLayout'); + } + } + }, + + props: { + position: { + type: String, + default: 'bottom-right', + validator: v => [ + 'top-right', 'top-left', + 'bottom-right', 'bottom-left', + 'top', 'right', 'bottom', 'left' + ].includes(v) + }, + offset: { + type: Array, + validator: v => v.length === 2 + }, + expand: Boolean + }, + + computed: { + attach () { + const pos = this.position; + + return { + top: pos.indexOf('top') > -1, + right: pos.indexOf('right') > -1, + bottom: pos.indexOf('bottom') > -1, + left: pos.indexOf('left') > -1, + vertical: pos === 'top' || pos === 'bottom', + horizontal: pos === 'left' || pos === 'right' + } + }, + + top () { + return this.layout.header.offset + }, + + right () { + return this.layout.right.offset + }, + + bottom () { + return this.layout.footer.offset + }, + + left () { + return this.layout.left.offset + }, + + style () { + let + posX = 0, + posY = 0; + + const + attach = this.attach, + dir = this.$q.lang.rtl === true ? -1 : 1; + + if (attach.top === true && this.top !== 0) { + posY = `${this.top}px`; + } + else if (attach.bottom === true && this.bottom !== 0) { + posY = `${-this.bottom}px`; + } + + if (attach.left === true && this.left !== 0) { + posX = `${dir * this.left}px`; + } + else if (attach.right === true && this.right !== 0) { + posX = `${-dir * this.right}px`; + } + + const css = { transform: `translate(${posX}, ${posY})` }; + + if (this.offset) { + css.margin = `${this.offset[1]}px ${this.offset[0]}px`; + } + + if (attach.vertical === true) { + if (this.left !== 0) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = `${this.left}px`; + } + if (this.right !== 0) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = `${this.right}px`; + } + } + else if (attach.horizontal === true) { + if (this.top !== 0) { + css.top = `${this.top}px`; + } + if (this.bottom !== 0) { + css.bottom = `${this.bottom}px`; + } + } + + return css + }, + + classes () { + return `fixed-${this.position} q-page-sticky--${this.expand === true ? 'expand' : 'shrink'}` + } + }, + + render (h) { + const content = slot(this, 'default'); + + return h('div', { + staticClass: 'q-page-sticky row flex-center', + class: this.classes, + style: this.style, + on: { ...this.qListeners } + }, + this.expand === true + ? content + : [ h('div', content) ] + ) + } + }); + + var QPageScroller = Vue__default["default"].extend({ + name: 'QPageScroller', + + mixins: [ QPageSticky ], + + props: { + scrollOffset: { + type: Number, + default: 1000 + }, + + reverse: Boolean, + + duration: { + type: Number, + default: 300 + }, + + offset: { + default: () => [18, 18] + } + }, + + inject: { + layout: { + default () { + console.error('QPageScroller needs to be used within a QLayout'); + } + } + }, + + data () { + return { + showing: this.__isVisible() + } + }, + + computed: { + scrollHeight () { + return this.layout.height - ( + this.layout.container === true + ? this.layout.containerHeight + : this.$q.screen.height + ) + }, + + onEvents () { + return { + ...this.qListeners, + click: this.__onClick + } + } + }, + + watch: { + 'layout.scroll.position' () { + this.__updateVisibility(); + }, + + reverse: { + handler (val) { + if (val === true) { + if (this.heightWatcher === void 0) { + this.heightWatcher = this.$watch('scrollHeight', this.__updateVisibility); + } + } + else if (this.heightWatcher !== void 0) { + this.__cleanup(); + } + }, + immediate: true + } + }, + + methods: { + __isVisible () { + return this.reverse === true + ? this.scrollHeight - this.layout.scroll.position > this.scrollOffset + : this.layout.scroll.position > this.scrollOffset + }, + + __onClick (e) { + const target = getScrollTarget(this.layout.container === true ? this.$el : this.layout.$el); + setScrollPosition(target, this.reverse === true ? this.layout.height : 0, this.duration); + this.$emit('click', e); + }, + + __updateVisibility () { + const newVal = this.__isVisible(); + if (this.showing !== newVal) { + this.showing = newVal; + } + }, + + __cleanup () { + this.heightWatcher(); + this.heightWatcher = void 0; + } + }, + + render (h) { + return h('transition', { + props: { name: 'q-transition--fade' } + }, + this.showing === true + ? [ + h('div', { + staticClass: 'q-page-scroller', + on: this.onEvents + }, [ + QPageSticky.options.render.call(this, h) + ]) + ] + : null + ) + }, + + beforeDestroy () { + this.heightWatcher !== void 0 && this.__cleanup(); + } + }); + + function getBool (val, otherwise) { + return [ true, false ].includes(val) + ? val + : otherwise + } + + var QPagination = Vue__default["default"].extend({ + name: 'QPagination', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + value: { + type: Number, + required: true + }, + min: { + type: [ Number, String ], + default: 1 + }, + max: { + type: [ Number, String ], + required: true + }, + maxPages: { + type: [ Number, String ], + default: 0, + validator: v => ( + (typeof v === 'string' ? parseInt(v, 10) : v) >= 0 + ) + }, + + inputStyle: [Array, String, Object], + inputClass: [Array, String, Object], + + size: String, + + disable: Boolean, + + input: Boolean, + + iconPrev: String, + iconNext: String, + iconFirst: String, + iconLast: String, + + toFn: Function, + + boundaryLinks: { + type: Boolean, + default: null + }, + boundaryNumbers: { + type: Boolean, + default: null + }, + directionLinks: { + type: Boolean, + default: null + }, + ellipses: { + type: Boolean, + default: null + }, + + ripple: { + type: [Boolean, Object], + default: null + }, + + round: Boolean, + rounded: Boolean, + + flat: Boolean, + outline: Boolean, + unelevated: Boolean, + push: Boolean, + glossy: Boolean, + + color: { + type: String, + default: 'primary' + }, + textColor: String, + + activeDesign: { + type: String, + default: '', + values: v => v === '' || btnDesignOptions.includes(v) + }, + activeColor: String, + activeTextColor: String, + + gutter: String, + padding: { + type: String, + default: '3px 2px' + } + }, + + data () { + return { + newPage: null + } + }, + + watch: { + min () { + this.model = this.value; + }, + + max () { + this.model = this.value; + } + }, + + computed: { + model: { + get () { + return this.value + }, + set (val) { + val = parseInt(val, 10); + if (this.disable || isNaN(val)) { + return + } + const value = between(val, this.__min, this.__max); + this.$emit('input', value); + } + }, + + inputPlaceholder () { + return this.model + ' / ' + this.__max + }, + + __min () { + return parseInt(this.min, 10) + }, + + __max () { + return parseInt(this.max, 10) + }, + + __maxPages () { + return parseInt(this.maxPages, 10) + }, + + __boundaryLinks () { + return getBool(this.boundaryLinks, this.input) + }, + + __boundaryNumbers () { + return getBool(this.boundaryNumbers, !this.input) + }, + + __directionLinks () { + return getBool(this.directionLinks, this.input) + }, + + __ellipses () { + return getBool(this.ellipses, !this.input) + }, + + __gutter () { + return this.gutter in btnPadding + ? `${btnPadding[ this.gutter ]}px` + : this.gutter || null + }, + __gutterStyle () { + return this.__gutter !== null + ? `--q-pagination-gutter-parent:-${this.__gutter};--q-pagination-gutter-child:${this.__gutter}` + : null + }, + + __btnDesign () { + return getBtnDesign(this, 'flat') + }, + + __btnActiveDesign () { + // we also reset non-active design + const acc = { [ this.__btnDesign ]: false }; + if (this.activeDesign !== '') { + acc[ this.activeDesign ] = true; + } + return acc + }, + + icons () { + const ico = [ + this.iconFirst || this.$q.iconSet.pagination.first, + this.iconPrev || this.$q.iconSet.pagination.prev, + this.iconNext || this.$q.iconSet.pagination.next, + this.iconLast || this.$q.iconSet.pagination.last + ]; + return this.$q.lang.rtl === true ? ico.reverse() : ico + }, + + attrs () { + const attrs = { role: 'navigation' }; + if (this.disable === true) { + attrs['aria-disabled'] = 'true'; + } + return attrs + }, + + btnProps () { + return { + [ this.__btnDesign ]: true, + + round: this.round, + rounded: this.rounded, + + padding: this.padding, + + color: this.color, + textColor: this.textColor, + + size: this.size, + ripple: this.ripple !== null + ? this.ripple + : true + } + }, + + activeBtnProps () { + return { + ...this.__btnActiveDesign, + color: this.activeColor || this.color, + textColor: this.activeTextColor || this.textColor + } + }, + + btnConfig () { + let maxPages = Math.max( + this.__maxPages, + 1 + (this.__ellipses ? 2 : 0) + (this.__boundaryNumbers ? 2 : 0) + ); + + const acc = { + pgFrom: this.__min, + pgTo: this.__max, + ellipsesStart: false, + ellipsesEnd: false, + boundaryStart: false, + boundaryEnd: false, + marginalStyle: { + minWidth: `${Math.max(2, String(this.__max).length)}em` + } + }; + + if (this.__maxPages && maxPages < (this.__max - this.__min + 1)) { + maxPages = 1 + Math.floor(maxPages / 2) * 2; + acc.pgFrom = Math.max(this.__min, Math.min(this.__max - maxPages + 1, this.value - Math.floor(maxPages / 2))); + acc.pgTo = Math.min(this.__max, acc.pgFrom + maxPages - 1); + + if (this.__boundaryNumbers) { + acc.boundaryStart = true; + acc.pgFrom++; + } + + if (this.__ellipses && acc.pgFrom > (this.__min + (this.__boundaryNumbers ? 1 : 0))) { + acc.ellipsesStart = true; + acc.pgFrom++; + } + + if (this.__boundaryNumbers) { + acc.boundaryEnd = true; + acc.pgTo--; + } + + if (this.__ellipses && acc.pgTo < (this.__max - (this.__boundaryNumbers ? 1 : 0))) { + acc.ellipsesEnd = true; + acc.pgTo--; + } + } + + return acc + }, + + inputEvents () { + const updateModel = () => { + this.model = this.newPage; + this.newPage = null; + }; + + return { + input: val => { this.newPage = val; }, + keyup: e => { isKeyCode(e, 13) === true && updateModel(); }, + blur: updateModel + } + } + }, + + methods: { + set (value) { + this.model = value; + }, + + setByOffset (offset) { + this.model = this.model + offset; + }, + + __getBtn (h, data, props, page, active) { + data.props = { + ...this.btnProps, + ...props + }; + data.attrs = { + 'aria-label': page, + 'aria-current': 'false', + ...data.attrs + }; + + if (active === true) { + Object.assign(data.props, this.activeBtnProps); + data.attrs[ 'aria-current' ] = 'true'; + } + + if (page !== void 0) { + if (this.toFn !== void 0) { + data.props.to = this.toFn(page); + } + else { + data.on = { click: () => { this.set(page); } }; + } + } + + return h(QBtn, data) + } + }, + + render (h) { + const contentStart = []; + const contentEnd = []; + let contentMiddle; + + if (this.__boundaryLinks === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bls' + }, { + disable: this.disable || this.value <= this.__min, + icon: this.icons[ 0 ] + }, this.__min) + ); + contentEnd.unshift( + this.__getBtn(h, { + key: 'ble' + }, { + disable: this.disable || this.value >= this.__max, + icon: this.icons[ 3 ] + }, this.__max) + ); + } + + if (this.__directionLinks === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bdp' + }, { + disable: this.disable || this.value <= this.__min, + icon: this.icons[ 1 ] + }, this.value - 1) + ); + contentEnd.unshift( + this.__getBtn(h, { + key: 'bdn' + }, { + disable: this.disable || this.value >= this.__max, + icon: this.icons[ 2 ] + }, this.value + 1) + ); + } + + if (this.input !== true) { // has buttons instead of inputbox + contentMiddle = []; + const { pgFrom, pgTo, marginalStyle: style } = this.btnConfig; + + if (this.btnConfig.boundaryStart === true) { + const active = this.__min === this.value; + contentStart.push( + this.__getBtn(h, { + key: 'bns', + style + }, { + disable: this.disable, + label: this.__min + }, this.__min, active) + ); + } + + if (this.btnConfig.boundaryEnd === true) { + const active = this.__max === this.value; + contentEnd.unshift( + this.__getBtn(h, { + key: 'bne', + style + }, { + disable: this.disable, + label: this.__max + }, this.__max, active) + ); + } + + if (this.btnConfig.ellipsesStart === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bes', + style + }, { + disable: this.disable, + label: '…', + ripple: false + }, pgFrom - 1) + ); + } + + if (this.btnConfig.ellipsesEnd === true) { + contentEnd.unshift( + this.__getBtn(h, { + key: 'bee', + style + }, { + disable: this.disable, + label: '…', + ripple: false + }, pgTo + 1) + ); + } + + for (let i = pgFrom; i <= pgTo; i++) { + contentMiddle.push( + this.__getBtn(h, { + key: `bpg${i}`, + style + }, { + disable: this.disable, + label: i + }, i, i === this.value) + ); + } + } + + return h('div', { + staticClass: 'q-pagination row no-wrap items-center', + class: { disabled: this.disable }, + attrs: this.attrs, + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'q-pagination__content row no-wrap items-center', + style: this.__gutterStyle + }, [ + ...contentStart, + + h('div', { + key: 'stop', + staticClass: 'q-pagination__middle row justify-center', + on: this.input === true + ? cache(this, 'stop', { input: stop }) + : null + }, this.input === true + ? [ + h(QInput, { + key: 'inp', + staticClass: 'inline', + style: { width: `${this.inputPlaceholder.length / 1.5}em` }, + props: { + type: 'number', + dense: true, + value: this.newPage, + disable: this.disable, + dark: this.dark, + borderless: true, + inputClass: this.inputClass, + inputStyle: this.inputStyle + }, + attrs: { + placeholder: this.inputPlaceholder, + min: this.__min, + max: this.__max + }, + on: { ...this.inputEvents } + }) + ] + : contentMiddle + ), + + ...contentEnd + ]) + ]) + } + }); + + function frameDebounce (fn) { + let wait = false, frame, callArgs; + + function debounced (/* ...args */) { + callArgs = arguments; + if (wait === true) { return } + + wait = true; + frame = requestAnimationFrame(() => { + fn.apply(this, callArgs); + callArgs = void 0; + wait = false; + }); + } + + debounced.cancel = () => { + window.cancelAnimationFrame(frame); + wait = false; + }; + + return debounced + } + + const { passive } = listenOpts; + + var QParallax = Vue__default["default"].extend({ + name: 'QParallax', + + mixins: [ ListenersMixin ], + + props: { + src: String, + height: { + type: Number, + default: 500 + }, + speed: { + type: Number, + default: 1, + validator: v => v >= 0 && v <= 1 + }, + + scrollTarget: { + default: void 0 + } + }, + + data () { + return { + scrolling: false, + percentScrolled: 0 + } + }, + + watch: { + height () { + this.working === true && this.__updatePos(); + }, + + scrollTarget () { + if (this.working === true) { + this.__stop(); + this.__start(); + } + } + }, + + methods: { + __update (percentage) { + this.percentScrolled = percentage; + this.qListeners.scroll !== void 0 && this.$emit('scroll', percentage); + }, + + __updatePos () { + let containerTop, containerHeight, containerBottom; + + if (this.__scrollTarget === window) { + containerTop = 0; + containerHeight = window.innerHeight; + containerBottom = containerHeight; + } + else { + containerTop = offset(this.__scrollTarget).top; + containerHeight = height(this.__scrollTarget); + containerBottom = containerTop + containerHeight; + } + + const top = offset(this.$el).top; + const bottom = top + this.height; + + if (this.observer !== void 0 || (bottom > containerTop && top < containerBottom)) { + const percent = (containerBottom - top) / (this.height + containerHeight); + this.__setPos((this.mediaHeight - this.height) * percent * this.speed); + this.__update(percent); + } + }, + + __setPos (offset) { + // apply it immediately without any delay + this.media.style.transform = `translate3d(-50%,${Math.round(offset)}px,0)`; + }, + + __onResize () { + this.mediaHeight = this.media.naturalHeight || this.media.videoHeight || height(this.media); + this.working === true && this.__updatePos(); + }, + + __start () { + this.working = true; + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget); + this.__scrollTarget.addEventListener('scroll', this.__updatePos, passive); + window.addEventListener('resize', this.__resizeHandler, passive); + this.__updatePos(); + }, + + __stop () { + if (this.working === true) { + this.working = false; + this.__setPos.cancel(); + this.__update.cancel(); + this.__resizeHandler.cancel(); + this.__scrollTarget.removeEventListener('scroll', this.__updatePos, passive); + window.removeEventListener('resize', this.__resizeHandler, passive); + this.__scrollTarget = void 0; + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-parallax', + style: { height: `${this.height}px` }, + on: { ...this.qListeners } + }, [ + h('div', { + ref: 'mediaParent', + staticClass: 'q-parallax__media absolute-full' + }, this.$scopedSlots.media !== void 0 ? this.$scopedSlots.media() : [ + h('img', { + ref: 'media', + attrs: { + src: this.src + } + }) + ]), + + h( + 'div', + { staticClass: 'q-parallax__content absolute-full column flex-center' }, + this.$scopedSlots.content !== void 0 + ? this.$scopedSlots.content({ percentScrolled: this.percentScrolled }) + : slot(this, 'default') + ) + ]) + }, + + mounted () { + this.__setPos = frameDebounce(this.__setPos); + this.__update = frameDebounce(this.__update); + this.__resizeHandler = frameDebounce(this.__onResize); + + this.media = this.$scopedSlots.media !== void 0 + ? this.$refs.mediaParent.children[0] + : this.$refs.media; + + this.media.onload = this.media.onloadstart = this.media.loadedmetadata = this.__onResize; + this.__onResize(); + this.media.style.display = 'initial'; + + if (window.IntersectionObserver !== void 0) { + this.observer = new IntersectionObserver(entries => { + this[entries[0].isIntersecting === true ? '__start' : '__stop'](); + }); + + this.observer.observe(this.$el); + } + else { + this.__start(); + } + }, + + beforeDestroy () { + this.__stop(); + this.observer !== void 0 && this.observer.disconnect(); + this.media.onload = this.media.onloadstart = this.media.loadedmetadata = null; + } + }); + + // adapted from https://stackoverflow.com/a/40294058 + + function cloneDeep (data, hash = new WeakMap()) { + if (Object(data) !== data) return data + if (hash.has(data)) return hash.get(data) + + const result = data instanceof Date + ? new Date(data) + : (data instanceof RegExp + ? new RegExp(data.source, data.flags) + : (data instanceof Set + ? new Set() + : (data instanceof Map + ? new Map() + : (typeof data.constructor !== 'function' + ? Object.create(null) + : (data.prototype !== void 0 && typeof data.prototype.constructor === 'function' + ? data + : new data.constructor() + ) + ) + ) + ) + ); + + if (typeof data.constructor === 'function' && typeof data.valueOf === 'function') { + const val = data.valueOf(); + + if (Object(val) !== val) { + const result = new data.constructor(val); + + hash.set(data, result); + + return result + } + } + + hash.set(data, result); + + if (data instanceof Set) { + data.forEach(val => { + result.add(cloneDeep(val, hash)); + }); + } + else if (data instanceof Map) { + data.forEach((val, key) => { + result.set(key, cloneDeep(val, hash)); + }); + } + + return Object.assign( + result, + ...Object.keys(data).map(key => ({ [key]: cloneDeep(data[key], hash) })) + ) + } + + var QPopupEdit = Vue__default["default"].extend({ + name: 'QPopupEdit', + + mixins: [ AttrsMixin ], + + props: { + value: { + required: true + }, + title: String, + buttons: Boolean, + labelSet: String, + labelCancel: String, + + color: { + type: String, + default: 'primary' + }, + validate: { + type: Function, + default: () => true + }, + + autoSave: Boolean, + + /* menu props overrides */ + cover: { + type: Boolean, + default: true + }, + contentClass: String, + /* end of menu props */ + + disable: Boolean + }, + + data () { + return { + modelChanged: false, + model: null + } + }, + + computed: { + classes () { + return 'q-popup-edit' + + (this.contentClass !== void 0 ? ` ${this.contentClass}` : '') + }, + + modelValue () { + return this.modelChanged === true ? this.model : this.value + }, + + initialValue () { + return this.modelChanged !== true ? this.model : this.value + }, + + defaultSlotScope () { + return injectProp({ + initialValue: this.initialValue, + updatePosition: this.__reposition, + emitValue: this.__changeModel, + validate: this.validate, + set: this.set, + cancel: this.cancel + }, 'value', () => this.modelValue, this.__changeModel) + }, + + menuProps () { + return { + ...this.qAttrs, + cover: this.cover, + contentClass: this.classes + } + } + }, + + methods: { + set () { + if (this.validate(this.modelValue) !== true) { + return + } + if (this.__hasChanged() === true) { + this.$emit('save', this.modelValue, this.initialValue); + this.modelChanged === true && this.$emit('input', this.modelValue); + } + this.__close(); + }, + + cancel () { + if (this.__hasChanged() === true) { + this.$emit('cancel', this.modelValue, this.initialValue); + this.modelChanged !== true && this.$emit('input', this.initialValue); + } + this.__close(); + }, + + show (e) { + this.$refs.menu !== void 0 && this.$refs.menu.show(e); + }, + + hide (e) { + this.$refs.menu !== void 0 && this.$refs.menu.hide(e); + }, + + __hasChanged () { + return isDeepEqual(this.modelValue, this.initialValue) === false + }, + + __changeModel (val) { + if (this.disable !== true) { + this.model = val; + this.modelChanged = true; + } + }, + + __close () { + this.validated = true; + this.$refs.menu.showing === true && this.$refs.menu.hide(); + }, + + __reposition () { + this.$nextTick(() => { + this.$refs.menu.updatePosition(); + }); + }, + + __getContent (h) { + const + title = slot(this, 'title', this.title), + child = this.$scopedSlots.default === void 0 + ? [] + : [].concat(this.$scopedSlots.default(this.defaultSlotScope)); + + title && child.unshift( + h('div', { staticClass: 'q-dialog__title q-mt-sm q-mb-sm' }, [ title ]) + ); + + this.buttons === true && child.push( + h('div', { staticClass: 'q-popup-edit__buttons row justify-center no-wrap' }, [ + h(QBtn, { + key: 'cancel', + props: { + flat: true, + color: this.color, + label: this.labelCancel || this.$q.lang.label.cancel + }, + on: cache(this, 'cancel', { click: this.cancel }) + }), + h(QBtn, { + key: 'ok', + props: { + flat: true, + color: this.color, + label: this.labelSet || this.$q.lang.label.set + }, + on: cache(this, 'ok', { click: this.set }) + }) + ]) + ); + + return child + } + }, + + render (h) { + if (this.disable === true) { return } + + return h(QMenu, { + key: 'menu', + ref: 'menu', + props: this.menuProps, + on: cache(this, 'menu', { + 'before-show': () => { + this.validated = false; + this.modelChanged = false; + this.model = cloneDeep(this.value); + this.watcher = this.$watch('value', this.__reposition); + this.$emit('before-show'); + }, + + show: () => { + this.$emit('show'); + }, + + 'escape-key': this.cancel, + + 'before-hide': () => { + this.watcher(); + + if (this.validated === false && this.__hasChanged() === true) { + if (this.autoSave === true && this.validate(this.model) === true) { + this.$emit('save', this.modelValue, this.initialValue); + this.modelChanged === true && this.$emit('input', this.modelValue); + } + else { + this.$emit('cancel', this.modelValue, this.initialValue); + this.modelChanged !== true && this.$emit('input', this.initialValue); + } + } + + this.$emit('before-hide'); + }, + + hide: () => { + this.$emit('hide'); + }, + + keyup: e => { + isKeyCode(e, 13) === true && this.set(); + } + }) + }, this.__getContent(h)) + } + }); + + var QPopupProxy = Vue__default["default"].extend({ + name: 'QPopupProxy', + + mixins: [ AttrsMixin, ListenersMixin, AnchorMixin ], + + props: { + breakpoint: { + type: [String, Number], + default: 450 + } + }, + + data () { + const breakpoint = parseInt(this.breakpoint, 10); + return { + type: this.$q.screen.width < breakpoint || this.$q.screen.height < breakpoint + ? 'dialog' + : 'menu' + } + }, + + computed: { + parsedBreakpoint () { + return parseInt(this.breakpoint, 10) + }, + + onEvents () { + return { + ...this.qListeners, + hide: this.__onHide + } + } + }, + + watch: { + '$q.screen.width' (width) { + if (this.$refs.popup.showing !== true) { + this.__updateType(width, this.$q.screen.height, this.parsedBreakpoint); + } + }, + + '$q.screen.height' (height) { + if (this.$refs.popup.showing !== true) { + this.__updateType(this.$q.screen.width, height, this.parsedBreakpoint); + } + }, + + breakpoint (breakpoint) { + if (this.$refs.popup.showing !== true) { + this.__updateType(this.$q.screen.width, this.$q.screen.height, parseInt(breakpoint, 10)); + } + } + }, + + methods: { + toggle (evt) { + this.$refs.popup.toggle(evt); + }, + + show (evt) { + this.$refs.popup.show(evt); + }, + + hide (evt) { + this.$refs.popup.hide(evt); + }, + + __onHide (evt) { + this.__updateType(this.$q.screen.width, this.$q.screen.height, this.parsedBreakpoint); + this.$emit('hide', evt); + }, + + __updateType (width, height, breakpoint) { + const type = width < breakpoint || height < breakpoint + ? 'dialog' + : 'menu'; + + if (this.type !== type) { + this.type = type; + } + } + }, + + render (h) { + const def = slot(this, 'default'); + + const props = ( + this.type === 'menu' && + def !== void 0 && + def[0] !== void 0 && + def[0].componentOptions !== void 0 && + def[0].componentOptions.Ctor !== void 0 && + def[0].componentOptions.Ctor.sealedOptions !== void 0 && + ['QDate', 'QTime', 'QCarousel', 'QColor'].includes( + def[0].componentOptions.Ctor.sealedOptions.name + ) + ) ? { cover: true, maxHeight: '99vh' } : {}; + + const data = { + ref: 'popup', + props: { ...props, ...this.qAttrs }, + on: this.onEvents + }; + + let component; + + if (this.type === 'dialog') { + component = QDialog; + } + else { + component = QMenu; + data.props.target = this.target; + data.props.contextMenu = this.contextMenu; + data.props.noParentEvent = true; + data.props.separateClosePopup = true; + } + + return h(component, data, def) + } + }); + + function width (val, reverse, $q) { + return { + transform: reverse === true + ? `translateX(${$q.lang.rtl === true ? '-' : ''}100%) scale3d(${-val},1,1)` + : `scale3d(${val},1,1)` + } + } + + var QLinearProgress = Vue__default["default"].extend({ + name: 'QLinearProgress', + + mixins: [ + ListenersMixin, + DarkMixin, + getSizeMixin({ + xs: 2, + sm: 4, + md: 6, + lg: 10, + xl: 14 + }) + ], + + props: { + value: { + type: Number, + default: 0 + }, + buffer: Number, + + color: String, + trackColor: String, + + reverse: Boolean, + stripe: Boolean, + indeterminate: Boolean, + query: Boolean, + rounded: Boolean, + + instantFeedback: Boolean + }, + + computed: { + motion () { + return this.indeterminate === true || this.query === true + }, + + widthReverse () { + return this.reverse !== this.query + }, + + classes () { + return 'q-linear-progress' + + (this.color !== void 0 ? ` text-${this.color}` : '') + + (this.reverse === true || this.query === true ? ' q-linear-progress--reverse' : '') + + (this.rounded === true ? ' rounded-borders' : '') + }, + + trackStyle () { + return width(this.buffer !== void 0 ? this.buffer : 1, this.widthReverse, this.$q) + }, + + trackClass () { + return `q-linear-progress__track--with${this.instantFeedback === true ? 'out' : ''}-transition` + + ` q-linear-progress__track--${this.darkSuffix}` + + (this.trackColor !== void 0 ? ` bg-${this.trackColor}` : '') + }, + + modelStyle () { + return width(this.motion === true ? 1 : this.value, this.widthReverse, this.$q) + }, + + modelClasses () { + return `q-linear-progress__model--with${this.instantFeedback === true ? 'out' : ''}-transition` + + ` q-linear-progress__model--${this.motion === true ? 'in' : ''}determinate` + }, + + stripeStyle () { + return { width: (this.value * 100) + '%' } + }, + + stripeClass () { + return this.reverse === true ? 'absolute-right' : 'absolute-left' + }, + + attrs () { + return { + role: 'progressbar', + 'aria-valuemin': 0, + 'aria-valuemax': 1, + 'aria-valuenow': this.indeterminate === true ? void 0 : this.value + } + } + }, + + render (h) { + const child = [ + h('div', { + staticClass: 'q-linear-progress__track absolute-full', + style: this.trackStyle, + class: this.trackClass + }), + + h('div', { + staticClass: 'q-linear-progress__model absolute-full', + style: this.modelStyle, + class: this.modelClasses + }) + ]; + + this.stripe === true && this.motion === false && child.push( + h('div', { + staticClass: 'q-linear-progress__stripe', + style: this.stripeStyle, + class: this.stripeClass + }) + ); + + return h('div', { + style: this.sizeStyle, + class: this.classes, + attrs: this.attrs, + on: { ...this.qListeners } + }, mergeSlot(child, this, 'default')) + } + }); + + const + PULLER_HEIGHT = 40, + OFFSET_TOP = 20; + + var QPullToRefresh = Vue__default["default"].extend({ + name: 'QPullToRefresh', + + mixins: [ ListenersMixin ], + + directives: { + TouchPan + }, + + props: { + color: String, + bgColor: String, + icon: String, + noMouse: Boolean, + disable: Boolean, + + scrollTarget: { + default: void 0 + } + }, + + data () { + return { + state: 'pull', + pullRatio: 0, + pulling: false, + pullPosition: -PULLER_HEIGHT, + animating: false, + positionCSS: {} + } + }, + + computed: { + style () { + return { + opacity: this.pullRatio, + transform: `translateY(${this.pullPosition}px) rotate(${this.pullRatio * 360}deg)` + } + }, + + classes () { + return 'q-pull-to-refresh__puller row flex-center' + + (this.animating === true ? ' q-pull-to-refresh__puller--animating' : '') + + (this.bgColor !== void 0 ? ` bg-${this.bgColor}` : '') + }, + + directives () { + if (this.disable !== true) { + const modifiers = { + down: true + }; + + if (this.noMouse !== true) { + modifiers.mouse = true; + } + + return [{ + name: 'touch-pan', + modifiers, + value: this.__pull + }] + } + }, + + contentClass () { + return `q-pull-to-refresh__content${this.pulling === true ? ' no-pointer-events' : ''}` + } + }, + + watch: { + scrollTarget () { + this.updateScrollTarget(); + } + }, + + methods: { + trigger () { + this.$emit('refresh', () => { + this.__animateTo({ pos: -PULLER_HEIGHT, ratio: 0 }, () => { + this.state = 'pull'; + }); + }); + }, + + updateScrollTarget () { + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget); + }, + + __pull (event) { + if (event.isFinal === true) { + if (this.pulling === true) { + this.pulling = false; + + if (this.state === 'pulled') { + this.state = 'refreshing'; + this.__animateTo({ pos: OFFSET_TOP }); + this.trigger(); + } + else if (this.state === 'pull') { + this.__animateTo({ pos: -PULLER_HEIGHT, ratio: 0 }); + } + } + + return + } + + if (this.animating === true || this.state === 'refreshing') { + return false + } + + if (event.isFirst === true) { + if (getScrollPosition(this.__scrollTarget) !== 0 || event.direction !== 'down') { + if (this.pulling === true) { + this.pulling = false; + this.state = 'pull'; + this.__animateTo({ pos: -PULLER_HEIGHT, ratio: 0 }); + } + + return false + } + + this.pulling = true; + + const { top, left } = this.$el.getBoundingClientRect(); + this.positionCSS = { + top: top + 'px', + left: left + 'px', + width: window.getComputedStyle(this.$el).getPropertyValue('width') + }; + } + + prevent(event.evt); + + const distance = Math.min(140, Math.max(0, event.distance.y)); + this.pullPosition = distance - PULLER_HEIGHT; + this.pullRatio = between(distance / (OFFSET_TOP + PULLER_HEIGHT), 0, 1); + + const state = this.pullPosition > OFFSET_TOP ? 'pulled' : 'pull'; + + if (this.state !== state) { + this.state = state; + } + }, + + __animateTo ({ pos, ratio }, done) { + this.animating = true; + this.pullPosition = pos; + + if (ratio !== void 0) { + this.pullRatio = ratio; + } + + clearTimeout(this.timer); + this.timer = setTimeout(() => { + this.animating = false; + done && done(); + }, 300); + } + }, + + mounted () { + this.updateScrollTarget(); + }, + + beforeDestroy () { + clearTimeout(this.timer); + }, + + render (h) { + return h('div', { + staticClass: 'q-pull-to-refresh', + on: { ...this.qListeners }, + directives: this.directives + }, [ + h('div', { + class: this.contentClass + }, slot(this, 'default')), + + h('div', { + staticClass: 'q-pull-to-refresh__puller-container fixed row flex-center no-pointer-events z-top', + style: this.positionCSS + }, [ + h('div', { + style: this.style, + class: this.classes + }, [ + this.state !== 'refreshing' + ? h(QIcon, { + props: { + name: this.icon || this.$q.iconSet.pullToRefresh.icon, + color: this.color, + size: '32px' + } + }) + : h(QSpinner, { + props: { + size: '24px', + color: this.color + } + }) + ]) + ]) + ]) + } + }); + + const dragType = { + MIN: 0, + RANGE: 1, + MAX: 2 + }; + + var QRange = Vue__default["default"].extend({ + name: 'QRange', + + mixins: [ SliderMixin ], + + props: { + value: { + type: Object, + default: () => ({ min: null, max: null }), + validator: v => 'min' in v && 'max' in v + }, + + dragRange: Boolean, + dragOnlyRange: Boolean, + + leftLabelColor: String, + leftLabelTextColor: String, + rightLabelColor: String, + rightLabelTextColor: String, + + leftLabelValue: [ String, Number ], + rightLabelValue: [ String, Number ], + + leftThumbColor: String, + rightThumbColor: String + }, + + data () { + return { + model: { + min: this.value.min === null ? this.__getInnerMin() : between(this.value.min, this.min, this.max), + max: this.value.max === null ? this.__getInnerMax() : between(this.value.max, this.min, this.max) + }, + curMinRatio: 0, + curMaxRatio: 0 + } + }, + + computed: { + canDragRange () { + return this.dragRange === true || this.dragOnlyRange === true + }, + + modelMinRatio () { + return this.__convertModelToRatio(this.model.min) + }, + modelMaxRatio () { + return this.__convertModelToRatio(this.model.max) + }, + + ratioMin () { + return this.active === true ? this.curMinRatio : this.modelMinRatio + }, + ratioMax () { + return this.active === true ? this.curMaxRatio : this.modelMaxRatio + }, + + selectionBarStyle () { + const minRatio = Math.max(this.ratioMin, this.innerMinRatio); + const acc = { + [ this.positionProp ]: `${100 * minRatio}%`, + [ this.sizeProp ]: `${100 * (between(this.ratioMax, minRatio, this.innerMaxRatio) - minRatio)}%` + }; + if (this.selectionImg !== void 0) { + acc.backgroundImage = `url(${this.selectionImg}) !important`; + } + return acc + }, + + trackContainerAttrs () { + return this.$q.platform.is.mobile !== true + ? { tabindex: this.canDragRange !== false ? this.computedTabindex : -1 } + : void 0 + }, + + trackContainerEvents () { + if (this.editable !== true) { + return {} + } + + if (this.$q.platform.is.mobile === true) { + return { click: this.__onMobileClick } + } + + return { + mousedown: this.__onActivate, + focus: () => { this.focus = 'both'; }, + blur: this.__onBlur, + keydown: this.__onKeydown, + keyup: this.__onKeyup + } + }, + + thumbAttrs () { + return { + tabindex: this.dragOnlyRange !== true ? this.computedTabindex : null + } + }, + + thumbMinEvents () { + return this.__getEvents('min') + }, + thumbMaxEvents () { + return this.__getEvents('max') + }, + + thumbMinLabel () { + return this.leftLabelValue !== void 0 + ? this.leftLabelValue + : (this.value.min < this.min || this.value.min > this.max ? this.value.min : this.model.min) + }, + thumbMaxLabel () { + return this.rightLabelValue !== void 0 + ? this.rightLabelValue + : (this.value.max < this.min || this.value.max > this.max ? this.value.max : this.model.max) + }, + + thumbMinClasses () { + const color = this.leftThumbColor || this.thumbColor || this.color; + return `q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${this.isReversed === true ? 'rtl' : 'ltr'} absolute non-selectable` + + (this.value.min < this.min || this.value.min > this.max ? ' q-slider__thumb--wrong-value' : '') + + ( + this.preventFocus === false && (this.focus === 'min' || this.focus === 'both') + ? ' q-slider--focus' + : '' + ) + + (color !== void 0 ? ` text-${color}` : '') + }, + thumbMaxClasses () { + const color = this.rightThumbColor || this.thumbColor || this.color; + return `q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${this.isReversed === true ? 'rtl' : 'ltr'} absolute non-selectable` + + (this.value.max < this.min || this.value.max > this.max ? ' q-slider__thumb--hidden' : '') + + ( + this.preventFocus === false && (this.focus === 'max' || this.focus === 'both') + ? ' q-slider--focus' + : '' + ) + + (color !== void 0 ? ` text-${color}` : '') + }, + + thumbMinStyle () { + return { + width: this.thumbSize, + height: this.thumbSize, + [ this.positionProp ]: `${100 * this.ratioMin}%`, + zIndex: this.focus === 'min' ? 2 : void 0 + } + }, + thumbMaxStyle () { + return { + width: this.thumbSize, + height: this.thumbSize, + [ this.positionProp ]: `${100 * this.ratioMax}%`, + zIndex: this.focus === 'max' ? 2 : void 0 + } + }, + + thumbMinPinColor () { + const color = this.leftLabelColor || this.labelColor; + return color !== void 0 + ? ` text-${color}` + : '' + }, + thumbMaxPinColor () { + const color = this.rightLabelColor || this.labelColor; + return color !== void 0 + ? ` text-${color}` + : '' + }, + + thumbMinTextContainerStyle () { + return this.__getTextContainerStyle(this.ratioMin) + }, + thumbMaxTextContainerStyle () { + return this.__getTextContainerStyle(this.ratioMax) + }, + + thumbMinTextClass () { + const color = this.leftLabelTextColor || this.labelTextColor; + return 'q-slider__text' + + (color !== void 0 ? ` text-${color}` : '') + }, + thumbMaxTextClass () { + const color = this.rightLabelTextColor || this.labelTextColor; + return 'q-slider__text' + + (color !== void 0 ? ` text-${color}` : '') + }, + + formAttrs () { + return { + type: 'hidden', + name: this.name, + value: `${this.value.min}|${this.value.max}` + } + }, + + modelUpdate () { + return [ + this.value.min, + this.value.max, + this.min, + this.max, + this.innerMin, + this.innerMax + ].join('#') + } + }, + + watch: { + modelUpdate () { + this.model.min = this.value.min === null + ? this.computedInnerMin + : between(this.value.min, this.min, this.max); + + this.model.max = this.value.max === null + ? this.computedInnerMax + : between(this.value.max, this.min, this.max); + }, + + focus (focus) { + if (focus === 'both' && this.canDragRange !== true) { + if (this.$q.platform.is.mobile !== true) { + const thumb = this.$refs[`${this.nextFocus}Thumb`]; + thumb !== void 0 && thumb.focus(); + } + } + else if (focus !== false && focus !== this.nextFocus) { + this.nextFocus = focus; + } + } + }, + + methods: { + __updateValue (change) { + if (this.model.min !== this.value.min || this.model.max !== this.value.max) { + this.$emit('input', { ...this.model }); + } + change === true && this.$emit('change', { ...this.model }); + }, + + __getDragging (event) { + const + { left, top, width, height } = this.$el.getBoundingClientRect(), + sensitivity = this.dragOnlyRange === true + ? 0 + : ( + this.vertical === true + ? this.$refs.minThumb.offsetHeight / (2 * height) + : this.$refs.minThumb.offsetWidth / (2 * width) + ) + (this.modelMaxRatio - this.modelMinRatio) / 20; + + const dragging = { + left, + top, + width, + height, + valueMin: this.model.min, + valueMax: this.model.max, + ratioMin: this.modelMinRatio, + ratioMax: this.modelMaxRatio + }; + + const ratio = this.__getDraggingRatio(event, dragging); + + if (this.dragOnlyRange !== true && ratio < dragging.ratioMin + sensitivity) { + dragging.type = dragType.MIN; + } + else if (this.dragOnlyRange === true || ratio < dragging.ratioMax - sensitivity) { + if (this.canDragRange === true) { + dragging.type = dragType.RANGE; + Object.assign(dragging, { + offsetRatio: ratio, + offsetModel: this.__convertRatioToModel(ratio), + rangeValue: dragging.valueMax - dragging.valueMin, + rangeRatio: dragging.ratioMax - dragging.ratioMin + }); + } + else { + dragging.type = dragging.ratioMax - ratio < ratio - dragging.ratioMin + ? dragType.MAX + : dragType.MIN; + } + } + else { + dragging.type = dragType.MAX; + } + + return dragging + }, + + __updatePosition (event, dragging = this.dragging) { + let pos; + const ratio = this.__getDraggingRatio(event, dragging); + const localModel = this.__convertRatioToModel(ratio); + + switch (dragging.type) { + case dragType.MIN: + if (ratio <= dragging.ratioMax) { + pos = { + minR: ratio, + maxR: dragging.ratioMax, + min: localModel, + max: dragging.valueMax + }; + this.focus = 'min'; + } + else { + pos = { + minR: dragging.ratioMax, + maxR: ratio, + min: dragging.valueMax, + max: localModel + }; + this.focus = 'max'; + } + break + + case dragType.MAX: + if (ratio >= dragging.ratioMin) { + pos = { + minR: dragging.ratioMin, + maxR: ratio, + min: dragging.valueMin, + max: localModel + }; + this.focus = 'max'; + } + else { + pos = { + minR: ratio, + maxR: dragging.ratioMin, + min: localModel, + max: dragging.valueMin + }; + this.focus = 'min'; + } + break + + case dragType.RANGE: + const + ratioDelta = ratio - dragging.offsetRatio, + minR = between(dragging.ratioMin + ratioDelta, this.innerMinRatio, this.innerMaxRatio - dragging.rangeRatio), + modelDelta = localModel - dragging.offsetModel, + min = between(dragging.valueMin + modelDelta, this.computedInnerMin, this.computedInnerMax - dragging.rangeValue); + + pos = { + minR, + maxR: minR + dragging.rangeRatio, + min: parseFloat(min.toFixed(this.computedDecimals)), + max: parseFloat((min + dragging.rangeValue).toFixed(this.computedDecimals)) + }; + + this.focus = 'both'; + break + } + + const changedEnd = (this.focus === 'min' && pos.max >= this.computedInnerMin && pos.max <= this.computedInnerMax) || + (this.focus === 'max' && pos.min >= this.computedInnerMin && pos.min <= this.computedInnerMax) + ? this.focus + : null; + + this.model = { + min: changedEnd !== 'max' + ? between(pos.min, this.computedInnerMin, this.computedInnerMax) + : pos.min, + max: changedEnd !== 'min' + ? between(pos.max, this.computedInnerMin, this.computedInnerMax) + : pos.max + }; + + // If either of the values to be emitted are null, set them to the defaults the user has entered. + if (this.model.min === null || this.model.max === null) { + this.model.min = pos.min || this.computedInnerMin; + this.model.max = pos.max || this.computedInnerMax; + } + + if (this.snap !== true || this.step === 0) { + this.curMinRatio = changedEnd !== 'max' + ? between(pos.minR, this.innerMinRatio, this.innerMaxRatio) + : pos.minR; + this.curMaxRatio = changedEnd !== 'min' + ? between(pos.maxR, this.innerMinRatio, this.innerMaxRatio) + : pos.maxR; + } + else { + this.curMinRatio = this.__convertModelToRatio(this.model.min); + this.curMaxRatio = this.__convertModelToRatio(this.model.max); + } + }, + + __getEvents (side) { + return this.$q.platform.is.mobile !== true && this.editable === true && this.dragOnlyRange !== true + ? { + focus: () => { this.focus = side; }, + blur: this.__onBlur, + keydown: this.__onKeydown, + keyup: this.__onKeyup + } + : {} + }, + + __onKeydown (evt) { + if (!keyCodes$3.includes(evt.keyCode)) { + return + } + + const wrongFocus = this.focus === 'both' && this.canDragRange !== true; + if (this.focus === false || wrongFocus === true) { + this.focus = this.nextFocus; + } + + stopAndPrevent(evt); + + if (this.dragOnlyRange === true || (this.dragRange === true && this.focus === 'both')) { + const interval = this.model.max - this.model.min; + const min = between( + parseFloat((this.model.min + this.getKeyOffset(evt.keyCode)).toFixed(this.computedDecimals)), + this.computedInnerMin, + this.computedInnerMax - interval + ); + + this.model = { + min, + max: parseFloat((min + interval).toFixed(this.computedDecimals)) + }; + } + else if (this.focus !== 'min' && this.focus !== 'max') { + return + } + else { + const which = this.focus; + + this.model = { + ...this.model, + [ which ]: between( + parseFloat((this.model[ which ] + this.getKeyOffset(evt.keyCode)).toFixed(this.computedDecimals)), + which === 'min' ? this.computedInnerMin : this.model.min, + which === 'max' ? this.computedInnerMax : this.model.max + ) + }; + } + + this.__updateValue(); + } + }, + + created () { + this.nextFocus = 'min'; + }, + + render (h) { + const content = this.__getContent(h, node => { + const minThumb = this.__getThumb(h, { + pinColor: this.thumbMinPinColor, + textContainerStyle: this.thumbMinTextContainerStyle, + textClass: this.thumbMinTextClass, + label: this.thumbMinLabel, + classes: this.thumbMinClasses, + style: this.thumbMinStyle, + nodeData: { + ref: 'minThumb', + key: 'tmin', + on: this.thumbMinEvents, + attrs: this.thumbAttrs + } + }); + + const maxThumb = this.__getThumb(h, { + pinColor: this.thumbMaxPinColor, + textContainerStyle: this.thumbMaxTextContainerStyle, + textClass: this.thumbMaxTextClass, + label: this.thumbMaxLabel, + classes: this.thumbMaxClasses, + style: this.thumbMaxStyle, + nodeData: { + ref: 'maxThumb', + key: 'tmax', + on: this.thumbMaxEvents, + attrs: this.thumbAttrs + } + }); + + if (this.reverse === true) { + node.push(maxThumb, minThumb); + } + else { + node.push(minThumb, maxThumb); + } + }); + + return h('div', { + class: 'q-range ' + this.classes + ( + this.value.min === null || this.value.max === null + ? ' q-slider--no-value' + : '' + ), + attrs: { + ...this.attributes, + 'aria-valuenow': this.value.min + '|' + this.value.max + } + }, content) + } + }); + + var QRating = Vue__default["default"].extend({ + name: 'QRating', + + mixins: [ SizeMixin, FormMixin, ListenersMixin ], + + directives: { + KeyGroupNavigation + }, + + props: { + value: { + type: Number, + required: true + }, + + max: { + type: [String, Number], + default: 5 + }, + + icon: [String, Array], + iconHalf: [String, Array], + iconSelected: [String, Array], + + iconAriaLabel: [String, Array], + + color: [String, Array], + colorHalf: [String, Array], + colorSelected: [String, Array], + + vertical: Boolean, + + noReset: Boolean, + noDimming: Boolean, + + readonly: Boolean, + disable: Boolean + }, + + data () { + return { + mouseModel: 0 + } + }, + + computed: { + editable () { + return this.readonly !== true && this.disable !== true + }, + + classes () { + return `q-rating--${this.editable === true ? '' : 'non-'}editable` + + (this.vertical === true ? ' column justify-center' : ' row items-center') + + (this.noDimming === true ? ' q-rating--no-dimming' : '') + + (this.disable === true ? ' disabled' : '') + + (this.color !== void 0 && Array.isArray(this.color) === false ? ` text-${this.color}` : '') + }, + + iconData () { + const + iconLen = Array.isArray(this.icon) === true ? this.icon.length : 0, + selIconLen = Array.isArray(this.iconSelected) === true ? this.iconSelected.length : 0, + halfIconLen = Array.isArray(this.iconHalf) === true ? this.iconHalf.length : 0, + colorLen = Array.isArray(this.color) === true ? this.color.length : 0, + selColorLen = Array.isArray(this.colorSelected) === true ? this.colorSelected.length : 0, + halfColorLen = Array.isArray(this.colorHalf) === true ? this.colorHalf.length : 0; + + return { + iconLen, + icon: iconLen > 0 ? this.icon[iconLen - 1] : this.icon, + selIconLen, + selIcon: selIconLen > 0 ? this.iconSelected[selIconLen - 1] : this.iconSelected, + halfIconLen, + halfIcon: halfIconLen > 0 ? this.iconHalf[selIconLen - 1] : this.iconHalf, + colorLen, + color: colorLen > 0 ? this.color[colorLen - 1] : this.color, + selColorLen, + selColor: selColorLen > 0 ? this.colorSelected[selColorLen - 1] : this.colorSelected, + halfColorLen, + halfColor: halfColorLen > 0 ? this.colorHalf[halfColorLen - 1] : this.colorHalf + } + }, + + iconLabel () { + if (typeof this.iconAriaLabel === 'string') { + const label = this.iconAriaLabel.length > 0 ? `${this.iconAriaLabel} ` : ''; + + return i => `${label}${i}` + } + + if (Array.isArray(this.iconAriaLabel) === true) { + const iMax = this.iconAriaLabel.length; + + if (iMax > 0) { + return i => this.iconAriaLabel[Math.min(i, iMax) - 1] + } + } + + return (i, label) => `${label} ${i}` + }, + + stars () { + const + acc = [], + icons = this.iconData, + ceil = Math.ceil(this.value), + tabindex = this.editable === true ? 0 : null; + + const halfIndex = this.iconHalf === void 0 || ceil === this.value + ? -1 + : ceil; + + for (let i = 1; i <= this.max; i++) { + const + active = this.mouseModel >= i || (this.mouseModel === 0 && this.value >= i), + half = halfIndex === i && this.mouseModel < i, + exSelected = this.mouseModel > 0 && (half === true ? ceil : this.value) >= i && this.mouseModel < i, + color = half === true + ? (i <= icons.halfColorLen ? this.colorHalf[i - 1] : icons.halfColor) + : ( + icons.selColor !== void 0 && active === true + ? (i <= icons.selColorLen ? this.colorSelected[i - 1] : icons.selColor) + : (i <= icons.colorLen ? this.color[i - 1] : icons.color) + ), + name = ( + half === true + ? (i <= icons.halfIconLen ? this.iconHalf[i - 1] : icons.halfIcon) + : ( + icons.selIcon !== void 0 && (active === true || exSelected === true) + ? (i <= icons.selIconLen ? this.iconSelected[i - 1] : icons.selIcon) + : (i <= icons.iconLen ? this.icon[i - 1] : icons.icon) + ) + ) || this.$q.iconSet.rating.icon; + + acc.push({ + name, + + attrs: { + tabindex, + role: 'radio', + 'aria-checked': this.value === i ? 'true' : 'false', + 'aria-label': this.iconLabel(i, name) + }, + + classes: 'q-rating__icon' + + (active === true || half === true ? ' q-rating__icon--active' : '') + + (exSelected === true ? ' q-rating__icon--exselected' : '') + + (this.mouseModel === i ? ' q-rating__icon--hovered' : '') + + (ceil === i ? ' q-key-group-navigation__refocus' : '') + + (color !== void 0 ? ` text-${color}` : '') + }); + } + + return acc + }, + + attrs () { + const attrs = { + role: 'radiogroup' + }; + if (this.disable === true) { + attrs[ 'aria-disabled' ] = 'true'; + } + if (this.readonly === true) { + attrs[ 'aria-readonly' ] = 'true'; + } + return attrs + }, + + directives () { + return [{ + name: 'key-group-navigation', + modifiers: { + [this.vertical === true ? 'vertical' : 'horizontal']: true + } + }] + } + }, + + methods: { + __set (value) { + if (this.editable === true) { + const + model = between(parseInt(value, 10), 1, parseInt(this.max, 10)), + newVal = this.noReset !== true && this.value === model ? 0 : model; + + newVal !== this.value && this.$emit('input', newVal); + this.mouseModel = 0; + } + }, + + __setHoverValue (value) { + if (this.editable === true) { + this.mouseModel = value; + } + }, + + __keyup (e, i) { + if ([13, 32].indexOf(e.keyCode) > -1) { + this.__set(i); + stopAndPrevent(e); + } + } + }, + + render (h) { + const child = []; + + this.stars.forEach(({ classes, name, attrs }, index) => { + const i = index + 1; + + child.push( + h('div', { + key: 'i#' + i, + ref: `rt${i}`, + staticClass: 'q-rating__icon-container flex flex-center', + attrs, + on: cache(this, 'i#' + i, { + click: () => { this.__set(i); }, + mouseover: () => { this.__setHoverValue(i); }, + mouseout: () => { this.mouseModel = 0; }, + focus: () => { this.__setHoverValue(i); }, + blur: () => { this.mouseModel = 0; }, + keyup: e => { this.__keyup(e, i); } + }) + }, mergeSlot( + [h(QIcon, { class: classes, props: { name } })], + this, `tip-${i}` + )) + ); + }); + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(child, 'push'); + } + + return h('div', { + staticClass: 'q-rating inline', + class: this.classes, + style: this.sizeStyle, + attrs: this.attrs, + directives: this.directives, + on: { ...this.qListeners } + }, child) + } + }); + + var QResponsive = Vue__default["default"].extend({ + name: 'QResponsive', + + mixins: [ RatioMixin, ListenersMixin ], + + render (h) { + return h('div', { + staticClass: 'q-responsive', + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'q-responsive__filler overflow-hidden' + }, [ + h('div', { style: this.ratioStyle }) + ]), + + h('div', { + staticClass: 'q-responsive__content absolute-full fit' + }, slot(this, 'default')) + ]) + } + }); + + const getMinThumbSize = size => (size >= 250 ? 50 : Math.ceil(size / 5)); + + const axisList = [ 'vertical', 'horizontal' ]; + const dirProps = { + vertical: { offset: 'offsetY', scroll: 'scrollTop', dir: 'down', dist: 'y' }, + horizontal: { offset: 'offsetX', scroll: 'scrollLeft', dir: 'right', dist: 'x' } + }; + + var QScrollArea = Vue__default["default"].extend({ + name: 'QScrollArea', + + mixins: [ DarkMixin ], + + directives: { + TouchPan + }, + + props: { + thumbStyle: Object, + verticalThumbStyle: Object, + horizontalThumbStyle: Object, + + barStyle: [ Array, String, Object ], + verticalBarStyle: [ Array, String, Object ], + horizontalBarStyle: [ Array, String, Object ], + + contentStyle: [ Array, String, Object ], + contentActiveStyle: [ Array, String, Object ], + + delay: { + type: [ String, Number ], + default: 1000 + }, + + visible: { + type: Boolean, + default: null + }, + + horizontal: Boolean, + + tabindex: [ String, Number ] + }, + + data () { + return { + // state management + tempShowing: false, + panning: false, + hover: false, + + // other... + container: { + vertical: 0, + horizontal: 0 + }, + + scroll: { + vertical: { + position: 0, + size: 0 + }, + + horizontal: { + position: 0, + size: 0 + } + } + } + }, + + computed: { + classes () { + return 'q-scrollarea' + + ` q-scrollarea--${this.darkSuffix}` + }, + + verticalScrollPercentage () { + const diff = this.scroll.vertical.size - this.container.vertical; + if (diff <= 0) { return 0 } + const p = between(this.scroll.vertical.position / diff, 0, 1); + return Math.round(p * 10000) / 10000 + }, + + horizontalScrollPercentage () { + const diff = this.scroll.horizontal.size - this.container.horizontal; + if (diff <= 0) { return 0 } + const p = between(this.scroll.horizontal.position / diff, 0, 1); + return Math.round(p * 10000) / 10000 + }, + + verticalThumbHidden () { + return ( + (this.visible === null ? this.hover : this.visible) !== true && + this.tempShowing === false && + this.panning === false + ) || this.scroll.vertical.size <= this.container.vertical + 1 + }, + + horizontalThumbHidden () { + return ( + (this.visible === null ? this.hover : this.visible) !== true && + this.tempShowing === false && + this.panning === false + ) || this.scroll.horizontal.size <= this.container.horizontal + 1 + }, + + verticalThumbStart () { + return this.verticalScrollPercentage * (this.container.vertical - this.verticalThumbSize) + }, + + horizontalThumbStart () { + return this.horizontalScrollPercentage * (this.container.horizontal - this.horizontalThumbSize) + }, + + verticalThumbSize () { + return Math.round( + between( + this.container.vertical * this.container.vertical / this.scroll.vertical.size, + getMinThumbSize(this.container.vertical), + this.container.vertical + ) + ) + }, + + horizontalThumbSize () { + return Math.round( + between( + this.container.horizontal * this.container.horizontal / this.scroll.horizontal.size, + getMinThumbSize(this.container.horizontal), + this.container.horizontal + ) + ) + }, + + verticalStyle () { + return { + ...this.thumbStyle, + ...this.verticalThumbStyle, + top: `${this.verticalThumbStart}px`, + height: `${this.verticalThumbSize}px` + } + }, + + horizontalStyle () { + return { + ...this.thumbStyle, + ...this.horizontalThumbStyle, + left: `${this.horizontalThumbStart}px`, + width: `${this.horizontalThumbSize}px` + } + }, + + verticalThumbClass () { + return 'q-scrollarea__thumb q-scrollarea__thumb--v absolute-right' + + (this.verticalThumbHidden === true ? ' q-scrollarea__thumb--invisible' : '') + }, + + horizontalThumbClass () { + return 'q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom' + + (this.horizontalThumbHidden === true ? ' q-scrollarea__thumb--invisible' : '') + }, + + verticalBarClass () { + return 'q-scrollarea__bar q-scrollarea__bar--v absolute-right' + + (this.verticalThumbHidden === true ? ' q-scrollarea__bar--invisible' : '') + }, + + horizontalBarClass () { + return 'q-scrollarea__bar q-scrollarea__bar--h absolute-bottom' + + (this.horizontalThumbHidden === true ? ' q-scrollarea__bar--invisible' : '') + }, + + scrollComputed () { + return { + vertical: { + ...this.scroll.vertical, + percentage: this.verticalScrollPercentage, + thumbHidden: this.verticalThumbHidden, + thumbStart: this.verticalThumbStart, + thumbSize: this.verticalThumbSize, + style: this.verticalStyle, + thumbClass: this.verticalThumbClass, + barClass: this.verticalBarClass + }, + horizontal: { + ...this.scroll.horizontal, + percentage: this.horizontalScrollPercentage, + thumbHidden: this.horizontalThumbHidden, + thumbStart: this.horizontalThumbStart, + thumbSize: this.horizontalThumbSize, + style: this.horizontalStyle, + thumbClass: this.horizontalThumbClass, + barClass: this.horizontalBarClass + } + } + }, + + mainStyle () { + return this.verticalThumbHidden === true && this.horizontalThumbHidden === true + ? this.contentStyle + : this.contentActiveStyle + }, + + verticalThumbDirectives () { + return [{ + name: 'touch-pan', + modifiers: { + vertical: true, + prevent: true, + mouse: true, + mouseAllDir: true + }, + value: e => { this.__panThumb(e, 'vertical'); } + }] + }, + + horizontalThumbDirectives () { + return [{ + name: 'touch-pan', + modifiers: { + horizontal: true, + prevent: true, + mouse: true, + mouseAllDir: true + }, + value: e => { this.__panThumb(e, 'horizontal'); } + }] + }, + + scrollAttrs () { + if (this.tabindex !== void 0) { + return { tabindex: this.tabindex } + } + } + }, + + methods: { + getScrollTarget () { + return this.$refs.target + }, + + getScroll () { + const info = {}; + + axisList.forEach(axis => { + const data = this.scrollComputed[ axis ]; + + info[ axis + 'Position' ] = data.position; + info[ axis + 'Percentage' ] = data.percentage; + info[ axis + 'Size' ] = data.size; + info[ axis + 'ContainerSize' ] = this.container[ axis ]; + }); + + return info + }, + + getScrollPosition (axis) { + if (axis === 'both') { + return { + top: this.scroll.vertical.position, + left: this.scroll.horizontal.position + } + } + + if (axisList.includes(axis) !== true) { + axis = this.horizontal === true ? 'horizontal' : 'vertical'; + } + + return this.scroll[axis].position + }, + + getScrollPercentage (axis) { + if (axis === 'both') { + return { + top: this.verticalScrollPercentage, + left: this.horizontalScrollPercentage + } + } + + if (axisList.includes(axis) !== true) { + axis = this.horizontal === true ? 'horizontal' : 'vertical'; + } + + return this[`${axis}ScrollPercentage`] + }, + + setScrollPosition (axis, offset, duration) { + if (axisList.includes(axis) === false) { + if (isNaN(axis) === true) { + console.error('[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)'); + return + } + + [axis, offset, duration] = [this.horizontal === true ? 'horizontal' : 'vertical', axis, offset]; + } + + const fn = axis === 'vertical' + ? setVerticalScrollPosition + : setHorizontalScrollPosition; + + fn(this.$refs.target, offset, duration); + }, + + setScrollPercentage (axis, percentage, duration) { + if (axisList.includes(axis) === false) { + if (isNaN(axis) === true) { + console.error('[QScrollArea]: wrong first param of setScrollPercentage (vertical/horizontal)'); + return + } + + [axis, percentage, duration] = [this.horizontal === true ? 'horizontal' : 'vertical', axis, percentage]; + } + + this.setScrollPosition( + axis, + percentage * (this.scroll[axis].size - this.container[axis]), + duration + ); + }, + + __updateContainer ({ height, width }) { + let change = false; + + if (this.container.vertical !== height) { + this.container.vertical = height; + change = true; + } + + if (this.container.horizontal !== width) { + this.container.horizontal = width; + change = true; + } + + change === true && this.__startTimer(); + }, + + __updateScroll ({ position }) { + let change = false; + + if (this.scroll.vertical.position !== position.top) { + this.scroll.vertical.position = position.top; + change = true; + } + + if (this.scroll.horizontal.position !== position.left) { + this.scroll.horizontal.position = position.left; + change = true; + } + + change === true && this.__startTimer(); + }, + + __updateScrollSize ({ height, width }) { + let change = false; + + if (this.scroll.horizontal.size !== width) { + this.scroll.horizontal.size = width; + change = true; + } + + if (this.scroll.vertical.size !== height) { + this.scroll.vertical.size = height; + change = true; + } + + change === true && this.__startTimer(); + }, + + __panThumb (e, axis) { + const data = this.scrollComputed[ axis ]; + + if (e.isFinal === true) { + if (this.panning !== true) { + return + } + + this.panning = false; + } + else if (e.isFirst === true) { + if (data.thumbHidden === true) { + return + } + + this.refPos = data.position; + this.panning = true; + } + else if (this.panning !== true) { + return + } + + const dProp = dirProps[ axis ]; + const containerSize = this.container[axis]; + + const multiplier = (data.size - containerSize) / (containerSize - data.thumbSize); + const distance = e.distance[dProp.dist]; + const pos = this.refPos + (e.direction === dProp.dir ? 1 : -1) * distance * multiplier; + + this.__setScroll(pos, axis); + }, + + __mouseDown (evt, axis) { + const data = this.scrollComputed[ axis ]; + + if (data.thumbHidden !== true) { + const offset = evt[ dirProps[ axis ].offset ]; + if (offset < data.thumbStart || offset > data.thumbStart + data.thumbSize) { + const pos = offset - data.thumbSize / 2; + this.__setScroll(pos / this.container[ axis ] * data.size, axis); + } + + const ref = axis === 'vertical' ? this.$refs.verticalThumb : this.$refs.horizontalThumb; + // activate thumb pan + if (ref !== void 0) { + ref.dispatchEvent(new MouseEvent(evt.type, evt)); + } + } + }, + + __verticalMouseDown (evt) { + this.__mouseDown(evt, 'vertical'); + }, + + __horizontalMouseDown (evt) { + this.__mouseDown(evt, 'horizontal'); + }, + + __startTimer () { + if (this.tempShowing === true) { + clearTimeout(this.timer); + } + else { + this.tempShowing = true; + } + + this.timer = setTimeout(() => { this.tempShowing = false; }, this.delay); + this.$listeners.scroll !== void 0 && this.__emitScroll(); + }, + + __setScroll (offset, axis) { + this.$refs.target[ dirProps[ axis ].scroll ] = offset; + }, + + __mouseEnter () { + this.hover = true; + }, + + __mouseLeave () { + this.hover = false; + } + }, + + render (h) { + return h('div', { + key: 'desk', + class: this.classes, + on: cache(this, 'desk', { + mouseenter: this.__mouseEnter, + mouseleave: this.__mouseLeave + }) + }, [ + h('div', { + ref: 'target', + staticClass: 'q-scrollarea__container scroll relative-position fit hide-scrollbar', + attrs: this.scrollAttrs + }, [ + h('div', { + staticClass: 'q-scrollarea__content absolute', + style: this.mainStyle + }, mergeSlot([ + h(QResizeObserver, { + key: 'resizeIn', + props: { debounce: 0 }, + on: cache(this, 'resizeIn', { resize: this.__updateScrollSize }) + }) + ], this, 'default')), + + h(QScrollObserver, { + key: 'scroll', + props: { axis: 'both' }, + on: cache(this, 'scroll', { scroll: this.__updateScroll }) + }) + ]), + + h(QResizeObserver, { + key: 'resizeOut', + props: { debounce: 0 }, + on: cache(this, 'resizeOut', { resize: this.__updateContainer }) + }), + + h('div', { + key: 'barV', + class: this.verticalBarClass, + style: [ this.barStyle, this.verticalBarStyle ], + attrs: ariaHidden, + on: cache(this, 'barV', { + mousedown: this.__verticalMouseDown + }) + }), + + h('div', { + key: 'barH', + class: this.horizontalBarClass, + style: [ this.barStyle, this.horizontalBarStyle ], + attrs: ariaHidden, + on: cache(this, 'barH', { + mousedown: this.__horizontalMouseDown + }) + }), + + h('div', { + ref: 'verticalThumb', + class: this.verticalThumbClass, + style: this.verticalStyle, + attrs: ariaHidden, + directives: this.verticalThumbDirectives + }), + + h('div', { + ref: 'horizontalThumb', + class: this.horizontalThumbClass, + style: this.horizontalStyle, + attrs: ariaHidden, + directives: this.horizontalThumbDirectives + }) + ]) + }, + + created () { + // we have lots of listeners, so + // ensure we're not emitting same info + // multiple times + this.__emitScroll = debounce(() => { + const info = this.getScroll(); + info.ref = this; + this.$emit('scroll', info); + }, 0); + }, + + activated () { + if (this.__scrollPosition === void 0) { return } + + const scrollTarget = this.getScrollTarget(); + + if (scrollTarget !== void 0) { + setHorizontalScrollPosition(scrollTarget, this.__scrollPosition.left); + setVerticalScrollPosition(scrollTarget, this.__scrollPosition.top); + } + }, + + deactivated () { + this.__scrollPosition = this.getScrollPosition('both'); + }, + + beforeDestroy () { + this.__emitScroll.cancel(); + clearTimeout(this.timer); + } + }); + + function scrollDebounce (fn) { + let timeoutWait; + let throttleCounter = 0; + + const fnDebounced = () => { + timeoutWait = void 0; + throttleCounter = 0; + fn(); + }; + + function debounced () { + throttleCounter++; + clearTimeout(timeoutWait); + timeoutWait = setTimeout(fnDebounced, 200); + + if (throttleCounter > 50) { + throttleCounter = 0; + fn(true); + } + } + + debounced.cancel = () => { + clearTimeout(timeoutWait); + timeoutWait = void 0; + throttleCounter = 0; + }; + + return debounced + } + + const aggBucketSize = 1000; + + const scrollToEdges = [ + 'start', + 'center', + 'end', + 'start-force', + 'center-force', + 'end-force' + ]; + + const filterProto = Array.prototype.filter; + + function sumFn (acc, h) { + return acc + h + } + + function getScrollDetails ( + parent, + child, + beforeRef, + afterRef, + horizontal, + rtl, + stickyStart, + stickyEnd + ) { + const + parentCalc = parent === window ? document.scrollingElement || document.documentElement : parent, + propElSize = horizontal === true ? 'offsetWidth' : 'offsetHeight', + details = { + scrollStart: 0, + scrollViewSize: -stickyStart - stickyEnd, + scrollMaxSize: 0, + offsetStart: -stickyStart, + offsetEnd: -stickyEnd + }; + + if (horizontal === true) { + if (parent === window) { + details.scrollStart = window.pageXOffset || window.scrollX || document.body.scrollLeft || 0; + details.scrollViewSize += document.documentElement.clientWidth; + } + else { + details.scrollStart = parentCalc.scrollLeft; + details.scrollViewSize += parentCalc.clientWidth; + } + details.scrollMaxSize = parentCalc.scrollWidth; + + if (rtl === true) { + details.scrollStart = (rtlHasScrollBug() === true ? details.scrollMaxSize - details.scrollViewSize : 0) - details.scrollStart; + } + } + else { + if (parent === window) { + details.scrollStart = window.pageYOffset || window.scrollY || document.body.scrollTop || 0; + details.scrollViewSize += document.documentElement.clientHeight; + } + else { + details.scrollStart = parentCalc.scrollTop; + details.scrollViewSize += parentCalc.clientHeight; + } + details.scrollMaxSize = parentCalc.scrollHeight; + } + + if (beforeRef !== void 0) { + for (let el = beforeRef.previousElementSibling; el !== null; el = el.previousElementSibling) { + if (el.classList.contains('q-virtual-scroll--skip') === false) { + details.offsetStart += el[propElSize]; + } + } + } + if (afterRef !== void 0) { + for (let el = afterRef.nextElementSibling; el !== null; el = el.nextElementSibling) { + if (el.classList.contains('q-virtual-scroll--skip') === false) { + details.offsetEnd += el[propElSize]; + } + } + } + + if (child !== parent) { + const + parentRect = parentCalc.getBoundingClientRect(), + childRect = child.getBoundingClientRect(); + + if (horizontal === true) { + details.offsetStart += childRect.left - parentRect.left; + details.offsetEnd -= childRect.width; + } + else { + details.offsetStart += childRect.top - parentRect.top; + details.offsetEnd -= childRect.height; + } + + if (parent !== window) { + details.offsetStart += details.scrollStart; + } + details.offsetEnd += details.scrollMaxSize - details.offsetStart; + } + + return details + } + + function setScroll (parent, scroll, horizontal, rtl) { + if (scroll === 'end') { + scroll = (parent === window ? document.body : parent)[horizontal === true ? 'scrollWidth' : 'scrollHeight']; + } + + if (parent === window) { + if (horizontal === true) { + if (rtl === true) { + scroll = (rtlHasScrollBug() === true ? document.body.scrollWidth - document.documentElement.clientWidth : 0) - scroll; + } + window.scrollTo(scroll, window.pageYOffset || window.scrollY || document.body.scrollTop || 0); + } + else { + window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, scroll); + } + } + else if (horizontal === true) { + if (rtl === true) { + scroll = (rtlHasScrollBug() === true ? parent.scrollWidth - parent.offsetWidth : 0) - scroll; + } + parent.scrollLeft = scroll; + } + else { + parent.scrollTop = scroll; + } + } + + function sumSize (sizeAgg, size, from, to) { + if (from >= to) { return 0 } + + const + lastTo = size.length, + fromAgg = Math.floor(from / aggBucketSize), + toAgg = Math.floor((to - 1) / aggBucketSize) + 1; + + let total = sizeAgg.slice(fromAgg, toAgg).reduce(sumFn, 0); + + if (from % aggBucketSize !== 0) { + total -= size.slice(fromAgg * aggBucketSize, from).reduce(sumFn, 0); + } + if (to % aggBucketSize !== 0 && to !== lastTo) { + total -= size.slice(to, toAgg * aggBucketSize).reduce(sumFn, 0); + } + + return total + } + + const commonVirtScrollProps = { + virtualScrollSliceSize: { + type: [ Number, String ], + default: null + }, + + virtualScrollSliceRatioBefore: { + type: [ Number, String ], + default: 1 + }, + + virtualScrollSliceRatioAfter: { + type: [ Number, String ], + default: 1 + }, + + virtualScrollItemSize: { + type: [ Number, String ], + default: 24 + }, + + virtualScrollStickySizeStart: { + type: [ Number, String ], + default: 0 + }, + + virtualScrollStickySizeEnd: { + type: [ Number, String ], + default: 0 + }, + + tableColspan: [ Number, String ] + }; + + function setOverflowAnchor (contentEl, index) { + if (setOverflowAnchor.isSupported === void 0) { + setOverflowAnchor.isSupported = window.getComputedStyle(document.body).overflowAnchor !== void 0; + } + + if (setOverflowAnchor.isSupported === false || contentEl === void 0) { + return + } + + cancelAnimationFrame(contentEl._qOverflowAnimationFrame); + contentEl._qOverflowAnimationFrame = requestAnimationFrame(() => { + if (contentEl === void 0) { + return + } + + const children = contentEl.children || []; + + filterProto + .call(children, el => el.dataset && el.dataset.qVsAnchor !== void 0) + .forEach(el => { + delete el.dataset.qVsAnchor; + }); + + const el = children[index]; + + if (el && el.dataset) { + el.dataset.qVsAnchor = ''; + } + }); + } + + const commonVirtPropsList = Object.keys(commonVirtScrollProps); + + var VirtualScroll = { + props: { + virtualScrollHorizontal: Boolean, + ...commonVirtScrollProps + }, + + data () { + return { + virtualScrollSliceRange: { from: 0, to: 0 } + } + }, + + watch: { + needsSliceRecalc () { + this.__setVirtualScrollSize(); + }, + + needsReset () { + this.reset(); + } + }, + + computed: { + needsReset () { + return ['virtualScrollItemSizeComputed', 'virtualScrollHorizontal'] + .map(p => this[p]).join(';') + }, + + needsSliceRecalc () { + return this.needsReset + ';' + ['virtualScrollSliceRatioBefore', 'virtualScrollSliceRatioAfter'] + .map(p => this[p]).join(';') + }, + + colspanAttr () { + return this.tableColspan !== void 0 + ? { colspan: this.tableColspan } + : { colspan: 100 } + }, + + virtualScrollItemSizeComputed () { + return this.virtualScrollItemSize + } + }, + + methods: { + reset () { + this.__resetVirtualScroll(this.prevToIndex, true); + }, + + refresh (toIndex) { + this.__resetVirtualScroll(toIndex === void 0 ? this.prevToIndex : toIndex); + }, + + scrollTo (toIndex, edge) { + const scrollEl = this.__getVirtualScrollTarget(); + + if (scrollEl === void 0 || scrollEl === null || scrollEl.nodeType === 8) { + return + } + + const scrollDetails = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ); + + this.__scrollViewSize !== scrollDetails.scrollViewSize && this.__setVirtualScrollSize(scrollDetails.scrollViewSize); + + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + Math.min(this.virtualScrollLength - 1, Math.max(0, parseInt(toIndex, 10) || 0)), + 0, + scrollToEdges.indexOf(edge) > -1 ? edge : (this.prevToIndex > -1 && toIndex > this.prevToIndex ? 'end' : 'start') + ); + }, + + __onVirtualScrollEvt (throttled) { + const scrollEl = this.__getVirtualScrollTarget(); + + if (scrollEl === void 0 || scrollEl === null || scrollEl.nodeType === 8) { + return + } + + if (this.$q.interaction.isKeyboard === true && this.$q.interaction.event !== null && typeof this.$q.interaction.event.key === 'string') { + const key = this.$q.interaction.event.key.toLowerCase(); + + if (key === 'home' || key === 'end') { + setScroll( + scrollEl, + key === 'home' ? 0 : 'end', + this.virtualScrollHorizontal, + this.$q.lang.rtl + ); + } + } + + const + scrollDetails = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ), + listLastIndex = this.virtualScrollLength - 1, + listEndOffset = scrollDetails.scrollMaxSize - scrollDetails.offsetStart - scrollDetails.offsetEnd - this.virtualScrollPaddingAfter; + + if (this.prevScrollStart === scrollDetails.scrollStart) { + return + } + + if (scrollDetails.scrollMaxSize <= 0) { + this.__setVirtualScrollSliceRange(scrollEl, scrollDetails, 0, 0); + + return + } + + this.__scrollViewSize !== scrollDetails.scrollViewSize && this.__setVirtualScrollSize(scrollDetails.scrollViewSize); + + this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from); + + const scrollMaxStart = Math.floor(scrollDetails.scrollMaxSize - + Math.max(scrollDetails.scrollViewSize, scrollDetails.offsetEnd) - + Math.min(this.virtualScrollSizes[listLastIndex], scrollDetails.scrollViewSize / 2)); + + if (scrollMaxStart > 0 && Math.ceil(scrollDetails.scrollStart) >= scrollMaxStart) { + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + listLastIndex, + scrollDetails.scrollMaxSize - scrollDetails.offsetEnd - this.virtualScrollSizesAgg.reduce(sumFn, 0) + ); + + return + } + + let + toIndex = 0, + listOffset = scrollDetails.scrollStart - scrollDetails.offsetStart, + offset = listOffset; + + if (listOffset <= listEndOffset && listOffset + scrollDetails.scrollViewSize >= this.virtualScrollPaddingBefore) { + listOffset -= this.virtualScrollPaddingBefore; + toIndex = this.virtualScrollSliceRange.from; + offset = listOffset; + } + else { + for (let j = 0; listOffset >= this.virtualScrollSizesAgg[j] && toIndex < listLastIndex; j++) { + listOffset -= this.virtualScrollSizesAgg[j]; + toIndex += aggBucketSize; + } + } + + while (listOffset > 0 && toIndex < listLastIndex) { + listOffset -= this.virtualScrollSizes[toIndex]; + if (listOffset > -scrollDetails.scrollViewSize) { + toIndex++; + offset = listOffset; + } + else { + offset = this.virtualScrollSizes[toIndex] + listOffset; + } + } + + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + toIndex, + offset, + void 0, + throttled + ); + }, + + __setVirtualScrollSliceRange (scrollEl, scrollDetails, toIndex, offset, align, throttled) { + const alignForce = typeof align === 'string' && align.indexOf('-force') > -1; + const alignEnd = alignForce === true ? align.replace('-force', '') : align; + const alignRange = alignEnd !== void 0 ? alignEnd : 'start'; + + let + from = Math.max(0, toIndex - this.virtualScrollSliceSizeComputed[alignRange]), + to = from + this.virtualScrollSliceSizeComputed.total; + + if (to > this.virtualScrollLength) { + to = this.virtualScrollLength; + from = Math.max(0, to - this.virtualScrollSliceSizeComputed.total); + } + + this.prevScrollStart = scrollDetails.scrollStart; + + const rangeChanged = from !== this.virtualScrollSliceRange.from || to !== this.virtualScrollSliceRange.to; + + if (rangeChanged === false && alignEnd === void 0) { + this.__emitScroll(toIndex); + + return + } + + const { activeElement } = document; + const contentEl = this.$refs.content; + if ( + rangeChanged === true && + contentEl !== void 0 && + contentEl !== activeElement && + contentEl.contains(activeElement) === true && + contentEl.qVsFocusout !== true + ) { + contentEl.qVsFocusout = true; + contentEl.addEventListener('focusout', this.__onBlurRefocusFn); + + setTimeout(() => { + if (contentEl !== void 0) { + contentEl.removeEventListener('focusout', this.__onBlurRefocusFn); + contentEl.qVsFocusout = false; + } + }, 500); + } + + setOverflowAnchor(contentEl, toIndex - from); + + const sizeBefore = alignEnd !== void 0 ? this.virtualScrollSizes.slice(from, toIndex).reduce(sumFn, 0) : 0; + + if (rangeChanged === true) { + // vue key matching algorithm works only if + // the array of VNodes changes on only one of the ends + // so we first change one end and then the other + + const tempTo = to >= this.virtualScrollSliceRange.from && from <= this.virtualScrollSliceRange.to + ? this.virtualScrollSliceRange.to + : to; + this.virtualScrollSliceRange = { from, to: tempTo }; + this.virtualScrollPaddingBefore = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, 0, from); + this.virtualScrollPaddingAfter = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, this.virtualScrollSliceRange.to, this.virtualScrollLength); + + cancelAnimationFrame(this.vsRangeToAnimationFrame); + this.vsRangeToAnimationFrame = requestAnimationFrame(() => { + if (this.virtualScrollSliceRange.to !== to && this.prevScrollStart === scrollDetails.scrollStart) { + this.virtualScrollSliceRange = { from: this.virtualScrollSliceRange.from, to }; + this.virtualScrollPaddingAfter = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, to, this.virtualScrollLength); + } + }); + } + + cancelAnimationFrame(this.vsScrollAnimationFrame); + this.vsScrollAnimationFrame = requestAnimationFrame(() => { + // if the scroll was changed give up + // (another call to __setVirtualScrollSliceRange before animation frame) + if (this.prevScrollStart !== scrollDetails.scrollStart) { + return + } + + if (rangeChanged === true) { + this.__updateVirtualScrollSizes(from); + } + + const + sizeAfter = this.virtualScrollSizes.slice(from, toIndex).reduce(sumFn, 0), + posStart = sizeAfter + scrollDetails.offsetStart + this.virtualScrollPaddingBefore, + posEnd = posStart + this.virtualScrollSizes[toIndex]; + + let scrollPosition = posStart + offset; + + if (alignEnd !== void 0) { + const sizeDiff = sizeAfter - sizeBefore; + const scrollStart = scrollDetails.scrollStart + sizeDiff; + + scrollPosition = alignForce !== true && scrollStart < posStart && posEnd < scrollStart + scrollDetails.scrollViewSize + ? scrollStart + : ( + alignEnd === 'end' + ? posEnd - scrollDetails.scrollViewSize + : posStart - (alignEnd === 'start' ? 0 : Math.round((scrollDetails.scrollViewSize - this.virtualScrollSizes[toIndex]) / 2)) + ); + } + + this.prevScrollStart = scrollPosition; + + if (throttled !== true || (scrollEl === window && this.$q.platform.is.ios !== true)) { + setScroll( + scrollEl, + scrollPosition, + this.virtualScrollHorizontal, + this.$q.lang.rtl + ); + } + + this.__emitScroll(toIndex); + }); + }, + + __updateVirtualScrollSizes (from) { + const contentEl = this.$refs.content; + + if (contentEl !== void 0) { + const + children = filterProto.call(contentEl.children || [], el => el.classList && el.classList.contains('q-virtual-scroll--skip') === false), // fallback [] for IE + childrenLength = children.length, + sizeFn = this.virtualScrollHorizontal === true + ? el => el.getBoundingClientRect().width + : el => el.offsetHeight; + + let + index = from, + size, diff; + + for (let i = 0; i < childrenLength;) { + size = sizeFn(children[i]); + i++; + + while (i < childrenLength && children[i].classList.contains('q-virtual-scroll--with-prev') === true) { + size += sizeFn(children[i]); + i++; + } + + diff = size - this.virtualScrollSizes[index]; + + if (diff !== 0) { + this.virtualScrollSizes[index] += diff; + this.virtualScrollSizesAgg[Math.floor(index / aggBucketSize)] += diff; + } + + index++; + } + } + }, + + __resetVirtualScroll (toIndex, fullReset) { + const defaultSize = 1 * this.virtualScrollItemSizeComputed; + + if (fullReset === true || Array.isArray(this.virtualScrollSizes) === false) { + this.virtualScrollSizes = []; + } + + const oldVirtualScrollSizesLength = this.virtualScrollSizes.length; + + this.virtualScrollSizes.length = this.virtualScrollLength; + + for (let i = this.virtualScrollLength - 1; i >= oldVirtualScrollSizesLength; i--) { + this.virtualScrollSizes[i] = defaultSize; + } + + const jMax = Math.floor((this.virtualScrollLength - 1) / aggBucketSize); + this.virtualScrollSizesAgg = []; + for (let j = 0; j <= jMax; j++) { + let size = 0; + const iMax = Math.min((j + 1) * aggBucketSize, this.virtualScrollLength); + for (let i = j * aggBucketSize; i < iMax; i++) { + size += this.virtualScrollSizes[i]; + } + this.virtualScrollSizesAgg.push(size); + } + + this.prevToIndex = -1; + this.prevScrollStart = void 0; + + this.virtualScrollPaddingBefore = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, 0, this.virtualScrollSliceRange.from); + this.virtualScrollPaddingAfter = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, this.virtualScrollSliceRange.to, this.virtualScrollLength); + + if (toIndex >= 0) { + this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from); + + this.$nextTick(() => { + this.scrollTo(toIndex); + }); + } + else { + this.__onVirtualScrollEvt(); + } + }, + + __setVirtualScrollSize (scrollViewSize) { + if (scrollViewSize === void 0 && typeof window !== 'undefined') { + const scrollEl = this.__getVirtualScrollTarget(); + + if (scrollEl !== void 0 && scrollEl !== null && scrollEl.nodeType !== 8) { + scrollViewSize = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ).scrollViewSize; + } + } + + this.__scrollViewSize = scrollViewSize; + + const virtualScrollSliceRatioBefore = parseFloat(this.virtualScrollSliceRatioBefore) || 0; + const virtualScrollSliceRatioAfter = parseFloat(this.virtualScrollSliceRatioAfter) || 0; + const multiplier = 1 + virtualScrollSliceRatioBefore + virtualScrollSliceRatioAfter; + const view = scrollViewSize === void 0 || scrollViewSize <= 0 + ? 1 + : Math.ceil(scrollViewSize / this.virtualScrollItemSizeComputed); + const baseSize = Math.max( + 1, + view, + Math.ceil((this.virtualScrollSliceSize > 0 ? this.virtualScrollSliceSize : 10) / multiplier) + ); + + this.virtualScrollSliceSizeComputed = { + total: Math.ceil(baseSize * multiplier), + start: Math.ceil(baseSize * virtualScrollSliceRatioBefore), + center: Math.ceil(baseSize * (0.5 + virtualScrollSliceRatioBefore)), + end: Math.ceil(baseSize * (1 + virtualScrollSliceRatioBefore)), + view + }; + }, + + __padVirtualScroll (h, tag, content) { + const paddingSize = this.virtualScrollHorizontal === true ? 'width' : 'height'; + const style = { + ['--q-virtual-scroll-item-' + paddingSize]: this.virtualScrollItemSizeComputed + 'px' + }; + + return [ + tag === 'tbody' + ? h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'before', + ref: 'before' + }, [ + h('tr', [ + h('td', { + style: { [paddingSize]: `${this.virtualScrollPaddingBefore}px`, ...style }, + attrs: this.colspanAttr + }) + ]) + ]) + : h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'before', + ref: 'before', + style: { [paddingSize]: `${this.virtualScrollPaddingBefore}px`, ...style } + }), + + h(tag, { + staticClass: 'q-virtual-scroll__content', + key: 'content', + ref: 'content', + attrs: { tabindex: -1 } + }, content), + + tag === 'tbody' + ? h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'after', + ref: 'after' + }, [ + h('tr', [ + h('td', { + style: { [paddingSize]: `${this.virtualScrollPaddingAfter}px`, ...style }, + attrs: this.colspanAttr + }) + ]) + ]) + : h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'after', + ref: 'after', + style: { [paddingSize]: `${this.virtualScrollPaddingAfter}px`, ...style } + }) + ] + }, + + __emitScroll (index) { + if (this.prevToIndex !== index) { + this.qListeners['virtual-scroll'] !== void 0 && this.$emit('virtual-scroll', { + index, + from: this.virtualScrollSliceRange.from, + to: this.virtualScrollSliceRange.to - 1, + direction: index < this.prevToIndex ? 'decrease' : 'increase', + ref: this + }); + + this.prevToIndex = index; + } + }, + + __onBlurRefocusFn () { + this.$refs.content !== void 0 && this.$refs.content.focus(); + } + }, + + created () { + this.__setVirtualScrollSize(); + }, + + activated () { + if (this.shouldActivate !== true) { return } + + const scrollEl = this.__getVirtualScrollTarget(); + + if (this.prevScrollStart !== void 0 && scrollEl !== void 0 && scrollEl !== null && scrollEl.nodeType !== 8) { + setScroll( + scrollEl, + this.prevScrollStart, + this.virtualScrollHorizontal, + this.$q.lang.rtl + ); + } + else { + this.scrollTo(this.prevToIndex); + } + }, + + deactivated () { + this.shouldActivate = true; + }, + + beforeMount () { + this.__onVirtualScrollEvt = scrollDebounce(this.__onVirtualScrollEvt); + this.__setVirtualScrollSize(); + }, + + beforeDestroy () { + this.__onVirtualScrollEvt.cancel(); + } + }; + + const validateNewValueMode = v => ['add', 'add-unique', 'toggle'].includes(v); + const reEscapeList = '.*+?^${}()|[]\\'; + + var QSelect = Vue__default["default"].extend({ + name: 'QSelect', + + mixins: [ + QField, + VirtualScroll, + FormFieldMixin, + ListenersMixin + ], + + props: { + value: { + required: true + }, + + multiple: Boolean, + + displayValue: [String, Number], + displayValueSanitize: Boolean, + dropdownIcon: String, + + options: { + type: Array, + default: () => [] + }, + + optionValue: [Function, String], + optionLabel: [Function, String], + optionDisable: [Function, String], + + hideSelected: Boolean, + hideDropdownIcon: Boolean, + fillInput: Boolean, + + maxValues: [Number, String], + + optionsDense: Boolean, + optionsDark: { + type: Boolean, + default: null + }, + optionsSelectedClass: String, + optionsSanitize: Boolean, + + optionsCover: Boolean, + + menuShrink: Boolean, + menuAnchor: String, + menuSelf: String, + menuOffset: Array, + + popupContentClass: String, + popupContentStyle: [String, Array, Object], + + dialogContentClass: [String, Array, Object], + dialogContentStyle: [String, Array, Object], + + dialogCloseIcon: [Boolean, String], + + useInput: Boolean, + useChips: Boolean, + + newValueMode: { + type: String, + validator: validateNewValueMode + }, + + mapOptions: Boolean, + emitValue: Boolean, + + inputDebounce: { + type: [Number, String], + default: 500 + }, + + inputClass: [Array, String, Object], + inputStyle: [Array, String, Object], + + tabindex: { + type: [String, Number], + default: 0 + }, + + autocomplete: String, + + transitionShow: String, + transitionHide: String, + + behavior: { + type: String, + validator: v => ['default', 'menu', 'dialog'].includes(v), + default: 'default' + }, + + virtualScrollItemSize: { + type: [ Number, String ], + default: void 0 + } + }, + + data () { + return { + menu: false, + dialog: false, + optionIndex: -1, + inputValue: '', + dialogFieldFocused: false + } + }, + + watch: { + innerValue: { + handler (val) { + this.innerValueCache = val; + + if ( + this.useInput === true && + this.fillInput === true && + this.multiple !== true && + // Prevent re-entering in filter while filtering + // Also prevent clearing inputValue while filtering + this.innerLoading !== true && + ((this.dialog !== true && this.menu !== true) || this.hasValue !== true) + ) { + this.userInputValue !== true && this.__resetInputValue(); + if (this.dialog === true || this.menu === true) { + this.filter(''); + } + } + }, + immediate: true + }, + + fillInput () { + this.__resetInputValue(); + }, + + menu (show) { + this.__updateMenu(show); + }, + + virtualScrollLength (newLength, oldLength) { + if (this.menu === true && this.innerLoading === false) { + this.__resetVirtualScroll(-1, true); + + this.$nextTick(() => { + if (this.menu === true && this.innerLoading === false) { + if (newLength > oldLength) { + this.__resetVirtualScroll(); + } + else { + this.__updateMenu(true); + } + } + }); + } + } + }, + + computed: { + isOptionsDark () { + return this.optionsDark === null + ? (this.dark === null ? this.$q.dark.isActive : this.dark) + : this.optionsDark + }, + + optionsDarkSuffix () { + return this.isOptionsDark === null + ? 'dark-auto' + : (this.isOptionsDark === true ? 'dark' : 'light') + }, + + virtualScrollLength () { + return Array.isArray(this.options) + ? this.options.length + : 0 + }, + + fieldClass () { + return `q-select q-field--auto-height q-select--with${this.useInput !== true ? 'out' : ''}-input` + + ` q-select--with${this.useChips !== true ? 'out' : ''}-chips` + + ` q-select--${this.multiple === true ? 'multiple' : 'single'}` + }, + + computedInputClass () { + if (this.hideSelected === true || this.innerValue.length === 0) { + return this.inputClass + } + + return this.inputClass === void 0 + ? 'q-field__input--padding' + : [this.inputClass, 'q-field__input--padding'] + }, + + menuContentClass () { + return (this.virtualScrollHorizontal === true ? 'q-virtual-scroll--horizontal' : '') + + (this.popupContentClass ? ' ' + this.popupContentClass : '') + }, + + innerValue () { + const + mapNull = this.mapOptions === true && this.multiple !== true, + val = this.value !== void 0 && (this.value !== null || mapNull === true) + ? (this.multiple === true && Array.isArray(this.value) ? this.value : [ this.value ]) + : []; + + if (this.mapOptions === true && Array.isArray(this.options) === true) { + const cache = this.mapOptions === true && this.innerValueCache !== void 0 + ? this.innerValueCache + : []; + const values = val.map(v => this.__getOption(v, cache)); + + return this.value === null && mapNull === true + ? values.filter(v => v !== null) + : values + } + + return val + }, + + noOptions () { + return this.virtualScrollLength === 0 + }, + + selectedString () { + return this.innerValue + .map(opt => this.getOptionLabel(opt)) + .join(', ') + }, + + sanitizeFn () { + return this.optionsSanitize === true + ? () => true + : opt => opt !== void 0 && opt !== null && opt.sanitize === true + }, + + displayAsText () { + return this.displayValueSanitize === true || ( + this.displayValue === void 0 && ( + this.optionsSanitize === true || + this.innerValue.some(this.sanitizeFn) + ) + ) + }, + + computedTabindex () { + return this.focused === true ? this.tabindex : -1 + }, + + selectedScope () { + return this.innerValue.map((opt, i) => ({ + index: i, + opt, + sanitize: this.sanitizeFn(opt), + selected: true, + removeAtIndex: this.__removeAtIndexAndFocus, + toggleOption: this.toggleOption, + tabindex: this.computedTabindex + })) + }, + + optionScope () { + if (this.virtualScrollLength === 0) { + return [] + } + + const { from, to } = this.virtualScrollSliceRange; + const { options, optionEls } = this.__optionScopeCache; + + return this.options.slice(from, to).map((opt, i) => { + const disable = this.isOptionDisabled(opt); + const index = from + i; + + const itemProps = { + clickable: true, + active: false, + activeClass: this.computedOptionsSelectedClass, + manualFocus: true, + focused: false, + disable, + tabindex: -1, + dense: this.optionsDense, + dark: this.isOptionsDark + }; + + const itemAttrs = { + role: 'option', + id: `${this.targetUid}_${index}` + }; + + if (disable !== true) { + this.isOptionSelected(opt) === true && (itemProps.active = true); + itemAttrs['aria-selected'] = itemProps.active === true ? 'true' : 'false'; + + this.optionIndex === index && (itemProps.focused = true); + } + + const itemEvents = { + click: () => { this.toggleOption(opt); } + }; + + if (this.$q.platform.is.desktop === true) { + itemEvents.mousemove = () => { this.menu === true && this.setOptionIndex(index); }; + } + + const option = { + index, + opt, + sanitize: this.sanitizeFn(opt), + selected: itemProps.active, + focused: itemProps.focused, + toggleOption: this.toggleOption, + setOptionIndex: this.setOptionIndex, + itemProps, + itemAttrs + }; + + if (options[i] === void 0 || isDeepEqual(option, options[i]) !== true) { + options[i] = option; + optionEls[i] = void 0; + } + + return { + ...option, + itemEvents + } + }) + }, + + dropdownArrowIcon () { + return this.dropdownIcon !== void 0 + ? this.dropdownIcon + : this.$q.iconSet.arrow.dropdown + }, + + computedDialogCloseIcon () { + if (this.dialogCloseIcon === true) { + return this.$q.lang.rtl === true + ? this.$q.iconSet.chevron.right + : this.$q.iconSet.chevron.left + } + + return typeof this.dialogCloseIcon === 'string' && this.dialogCloseIcon.length > 0 + ? this.dialogCloseIcon + : false + }, + + squaredMenu () { + return this.optionsCover === false && + this.outlined !== true && + this.standout !== true && + this.borderless !== true && + this.rounded !== true + }, + + computedOptionsSelectedClass () { + return this.optionsSelectedClass !== void 0 + ? this.optionsSelectedClass + : (this.color !== void 0 ? `text-${this.color}` : '') + }, + + innerOptionsValue () { + return this.innerValue.map(opt => this.getOptionValue(opt)) + }, + + // returns method to get value of an option; + // takes into account 'option-value' prop + getOptionValue () { + return this.__getPropValueFn('optionValue', 'value') + }, + + // returns method to get label of an option; + // takes into account 'option-label' prop + getOptionLabel () { + return this.__getPropValueFn('optionLabel', 'label') + }, + + // returns method to tell if an option is disabled; + // takes into account 'option-disable' prop + isOptionDisabled () { + const fn = this.__getPropValueFn('optionDisable', 'disable'); + return (...args) => fn.apply(null, args) === true + }, + + inputControlEvents () { + return { + input: this.__onInput, + compositionend: this.__onInput, + // Safari < 10.2 & UIWebView doesn't fire compositionend when + // switching focus before confirming composition choice + // this also fixes the issue where some browsers e.g. iOS Chrome + // fires "change" instead of "input" on autocomplete. + change: this.__onChange, + keydown: this.__onTargetKeydown, + keyup: this.__onTargetAutocomplete, + keypress: this.__onTargetKeypress, + focus: this.__onTargetFocus, + click: this.__onTargetClick + } + }, + + closeButtonEvents () { + return { + click: e => { + stopAndPrevent(e); + this.hidePopup(); + } + } + }, + + virtualScrollItemSizeComputed () { + return this.virtualScrollItemSize === void 0 + ? (this.optionsDense === true ? 24 : 48) + : this.virtualScrollItemSize + }, + + comboboxAttrs () { + const attrs = { + tabindex: this.tabindex, + role: 'combobox', + 'aria-label': this.label, + 'aria-readonly': this.readonly === true ? 'true' : 'false', + 'aria-autocomplete': this.useInput === true ? 'list' : 'none', + 'aria-expanded': this.menu === true ? 'true' : 'false', + 'aria-owns': `${this.targetUid}_lb`, + 'aria-controls': `${this.targetUid}_lb` + }; + + if (this.optionIndex >= 0) { + attrs['aria-activedescendant'] = `${this.targetUid}_${this.optionIndex}`; + } + + return attrs + }, + + listboxAttrs () { + const attrs = { + id: `${this.targetUid}_lb`, + role: 'listbox', + 'aria-multiselectable': this.multiple === true ? 'true' : 'false' + }; + + return attrs + } + }, + + methods: { + getEmittingOptionValue (opt) { + return this.emitValue === true + ? this.getOptionValue(opt) + : opt + }, + + removeAtIndex (index) { + if (index > -1 && index < this.innerValue.length) { + if (this.multiple === true) { + const model = this.value.slice(); + this.$emit('remove', { index, value: model.splice(index, 1)[0] }); + this.$emit('input', model); + } + else { + this.$emit('input', null); + } + } + }, + + __removeAtIndexAndFocus (index) { + this.removeAtIndex(index); + this.__focus(); + }, + + add (opt, unique) { + const val = this.getEmittingOptionValue(opt); + + if (this.multiple !== true) { + this.fillInput === true && this.updateInputValue( + this.getOptionLabel(opt), + true, + true + ); + + this.$emit('input', val); + return + } + + if (this.innerValue.length === 0) { + this.$emit('add', { index: 0, value: val }); + this.$emit('input', this.multiple === true ? [ val ] : val); + return + } + + if (unique === true && this.isOptionSelected(opt) === true) { + return + } + + if (this.maxValues !== void 0 && this.value.length >= this.maxValues) { + return + } + + const model = this.value.slice(); + + this.$emit('add', { index: model.length, value: val }); + model.push(val); + this.$emit('input', model); + }, + + toggleOption (opt, keepOpen) { + if (this.editable !== true || opt === void 0 || this.isOptionDisabled(opt) === true) { + return + } + + const optValue = this.getOptionValue(opt); + + if (this.multiple !== true) { + if (keepOpen !== true) { + this.updateInputValue( + this.fillInput === true ? this.getOptionLabel(opt) : '', + true, + true + ); + + this.dialogFieldFocused = false; + document.activeElement.blur(); + + this.hidePopup(); + } + + this.$refs.target !== void 0 && this.$refs.target.focus(); + + if ( + this.innerValue.length === 0 || + isDeepEqual(this.getOptionValue(this.innerValue[0]), optValue) !== true + ) { + this.$emit('input', this.emitValue === true ? optValue : opt); + } + return + } + + (this.hasDialog !== true || this.dialogFieldFocused === true) && this.__focus(); + + this.__selectInputText(); + + if (this.innerValue.length === 0) { + const val = this.emitValue === true ? optValue : opt; + this.$emit('add', { index: 0, value: val }); + this.$emit('input', this.multiple === true ? [ val ] : val); + return + } + + const + model = this.value.slice(), + index = this.innerOptionsValue.findIndex(v => isDeepEqual(v, optValue)); + + if (index > -1) { + this.$emit('remove', { index, value: model.splice(index, 1)[0] }); + } + else { + if (this.maxValues !== void 0 && model.length >= this.maxValues) { + return + } + + const val = this.emitValue === true ? optValue : opt; + + this.$emit('add', { index: model.length, value: val }); + model.push(val); + } + + this.$emit('input', model); + }, + + setOptionIndex (index) { + if (this.$q.platform.is.desktop !== true) { return } + + const val = index > -1 && index < this.virtualScrollLength + ? index + : -1; + + if (this.optionIndex !== val) { + this.optionIndex = val; + } + }, + + moveOptionSelection (offset = 1, skipInputValue) { + if (this.menu === true) { + let index = this.optionIndex; + do { + index = normalizeToInterval( + index + offset, + -1, + this.virtualScrollLength - 1 + ); + } + while (index !== -1 && index !== this.optionIndex && this.isOptionDisabled(this.options[index]) === true) + + if (this.optionIndex !== index) { + cancelAnimationFrame(this.moveAnimationFrame); + this.moveAnimationFrame = requestAnimationFrame(() => { + this.setOptionIndex(index); + this.scrollTo(index); + + if (skipInputValue !== true && this.useInput === true && this.fillInput === true) { + this.__setInputValue(index >= 0 + ? this.getOptionLabel(this.options[index]) + : this.defaultInputValue + ); + } + }); + } + } + }, + + __getOption (value, innerValueCache) { + const fn = opt => isDeepEqual(this.getOptionValue(opt), value); + return this.options.find(fn) || innerValueCache.find(fn) || value + }, + + __getPropValueFn (propName, defaultVal) { + const val = this[propName] !== void 0 + ? this[propName] + : defaultVal; + + return typeof val === 'function' + ? val + : opt => (opt !== null && typeof opt === 'object' && val in opt ? opt[ val ] : opt) + }, + + isOptionSelected (opt) { + const val = this.getOptionValue(opt); + return this.innerOptionsValue.find(v => isDeepEqual(v, val)) !== void 0 + }, + + __selectInputText (e) { + if ( + this.useInput === true && + this.$refs.target !== void 0 && + (e === void 0 || (this.$refs.target === e.target && e.target.value === this.selectedString)) + ) { + this.$refs.target.select(); + } + }, + + __onTargetKeyup (e) { + // if ESC and we have an opened menu + // then stop propagation (might be caught by a QDialog + // and so it will also close the QDialog, which is wrong) + if (isKeyCode(e, 27) === true && this.menu === true) { + stop(e); + // on ESC we need to close the dialog also + this.hidePopup(); + this.__resetInputValue(); + } + + this.$emit('keyup', e); + }, + + __onTargetAutocomplete (e) { + const { value } = e.target; + + if (e.keyCode !== void 0) { + this.__onTargetKeyup(e); + return + } + + e.target.value = ''; + clearTimeout(this.inputTimer); + this.__resetInputValue(); + + if (typeof value === 'string' && value.length > 0) { + const needle = value.toLocaleLowerCase(); + const findFn = extractFn => { + const option = this.options.find(opt => extractFn(opt).toLocaleLowerCase() === needle); + + if (option === void 0) { + return false + } + + if (this.innerValue.indexOf(option) === -1) { + this.toggleOption(option); + } + else { + this.hidePopup(); + } + + return true + }; + const fillFn = afterFilter => { + if (findFn(this.getOptionValue) === true) { + return + } + if (findFn(this.getOptionLabel) === true || afterFilter === true) { + return + } + + this.filter(value, true, () => fillFn(true)); + }; + + fillFn(); + } + else { + this.__clearValue(e); + } + }, + + __onTargetKeypress (e) { + this.$emit('keypress', e); + }, + + __onTargetKeydown (e) { + this.$emit('keydown', e); + + if (shouldIgnoreKey(e) === true) { + return + } + + const newValueModeValid = this.inputValue.length > 0 && + (this.newValueMode !== void 0 || this.qListeners['new-value'] !== void 0); + const tabShouldSelect = e.shiftKey !== true && + this.multiple !== true && + (this.optionIndex > -1 || newValueModeValid === true); + + // escape + if (e.keyCode === 27) { + prevent(e); // prevent clearing the inputValue + return + } + + // tab + if (e.keyCode === 9 && tabShouldSelect === false) { + this.__closeMenu(); + return + } + + if (e.target === void 0 || e.target.id !== this.targetUid) { return } + + // down + if ( + e.keyCode === 40 && + this.innerLoading !== true && + this.menu === false + ) { + stopAndPrevent(e); + this.showPopup(); + return + } + + // backspace + if ( + e.keyCode === 8 && + this.hideSelected !== true && + this.inputValue.length === 0 + ) { + if (this.multiple === true && Array.isArray(this.value)) { + this.removeAtIndex(this.value.length - 1); + } + else if (this.multiple !== true && this.value !== null) { + this.$emit('input', null); + } + return + } + + // home, end - 36, 35 + if ( + (e.keyCode === 35 || e.keyCode === 36) && + (typeof this.inputValue !== 'string' || this.inputValue.length === 0) + ) { + stopAndPrevent(e); + this.optionIndex = -1; + this.moveOptionSelection(e.keyCode === 36 ? 1 : -1, this.multiple); + } + + // pg up, pg down - 33, 34 + if ( + (e.keyCode === 33 || e.keyCode === 34) && + this.virtualScrollSliceSizeComputed !== void 0 + ) { + stopAndPrevent(e); + this.optionIndex = Math.max( + -1, + Math.min( + this.virtualScrollLength, + this.optionIndex + (e.keyCode === 33 ? -1 : 1) * this.virtualScrollSliceSizeComputed.view + ) + ); + this.moveOptionSelection(e.keyCode === 33 ? 1 : -1, this.multiple); + } + + // up, down + if (e.keyCode === 38 || e.keyCode === 40) { + stopAndPrevent(e); + this.moveOptionSelection(e.keyCode === 38 ? -1 : 1, this.multiple); + } + + const optionsLength = this.virtualScrollLength; + + // clear search buffer if expired + if (this.searchBuffer === void 0 || this.searchBufferExp < Date.now()) { + this.searchBuffer = ''; + } + + // keyboard search when not having use-input + if ( + optionsLength > 0 && + this.useInput !== true && + e.key !== void 0 && + e.key.length === 1 && // printable char + e.altKey === e.ctrlKey && // not kbd shortcut + (e.keyCode !== 32 || this.searchBuffer.length > 0) // space in middle of search + ) { + this.menu !== true && this.showPopup(e); + + const + char = e.key.toLocaleLowerCase(), + keyRepeat = this.searchBuffer.length === 1 && this.searchBuffer[0] === char; + + this.searchBufferExp = Date.now() + 1500; + if (keyRepeat === false) { + stopAndPrevent(e); + this.searchBuffer += char; + } + + const searchRe = new RegExp('^' + this.searchBuffer.split('').map(l => reEscapeList.indexOf(l) > -1 ? '\\' + l : l).join('.*'), 'i'); + + let index = this.optionIndex; + + if (keyRepeat === true || index < 0 || searchRe.test(this.getOptionLabel(this.options[index])) !== true) { + do { + index = normalizeToInterval(index + 1, -1, optionsLength - 1); + } + while (index !== this.optionIndex && ( + this.isOptionDisabled(this.options[index]) === true || + searchRe.test(this.getOptionLabel(this.options[index])) !== true + )) + } + + if (this.optionIndex !== index) { + this.$nextTick(() => { + this.setOptionIndex(index); + this.scrollTo(index); + + if (index >= 0 && this.useInput === true && this.fillInput === true) { + this.__setInputValue(this.getOptionLabel(this.options[index])); + } + }); + } + + return + } + + // enter, space (when not using use-input and not in search), or tab (when not using multiple and option selected) + // same target is checked above + if ( + e.keyCode !== 13 && + (e.keyCode !== 32 || this.useInput === true || this.searchBuffer !== '') && + (e.keyCode !== 9 || tabShouldSelect === false) + ) { return } + + e.keyCode !== 9 && stopAndPrevent(e); + + if (this.optionIndex > -1 && this.optionIndex < optionsLength) { + this.toggleOption(this.options[this.optionIndex]); + return + } + + if (newValueModeValid === true) { + const done = (val, mode) => { + if (mode) { + if (validateNewValueMode(mode) !== true) { + return + } + } + else { + mode = this.newValueMode; + } + + if (val === void 0 || val === null) { + return + } + + this.updateInputValue('', this.multiple !== true, true); + + this[mode === 'toggle' ? 'toggleOption' : 'add']( + val, + mode === 'add-unique' + ); + + if (this.multiple !== true) { + this.$refs.target !== void 0 && this.$refs.target.focus(); + this.hidePopup(); + } + }; + + if (this.qListeners['new-value'] !== void 0) { + this.$emit('new-value', this.inputValue, done); + } + else { + done(this.inputValue); + } + + if (this.multiple !== true) { + return + } + } + + if (this.menu === true) { + this.__closeMenu(); + } + else if (this.innerLoading !== true) { + this.showPopup(); + } + }, + + __onTargetFocus (e) { + managedFocus(e.target); + this.__selectInputText(e); + }, + + __onTargetClick (e) { + this.hasDialog === true && stop(e); + }, + + __getVirtualScrollEl () { + return this.hasDialog === true + ? this.$refs.menuContent + : ( + this.$refs.menu !== void 0 && this.$refs.menu.__portal !== void 0 + ? (this.$refs.menu.__portal.$el.children || [])[0] // fallback [] for IE + : void 0 + ) + }, + + __getVirtualScrollTarget () { + return this.__getVirtualScrollEl() + }, + + __getSelection (h) { + if (this.hideSelected === true) { + return [] + } + + if (this.$scopedSlots['selected-item'] !== void 0) { + return this.selectedScope.map(scope => this.$scopedSlots['selected-item'](scope)).slice() + } + + if (this.$scopedSlots.selected !== void 0) { + return [].concat(this.$scopedSlots.selected()) + } + + if (this.useChips === true) { + return this.selectedScope.map((scope, i) => h(QChip, { + key: 'rem#' + i, + props: { + removable: this.editable === true && this.isOptionDisabled(scope.opt) !== true, + dense: true, + textColor: this.color, + tabindex: this.computedTabindex + }, + on: cache(this, 'rem#' + i, { + remove () { scope.removeAtIndex(i); } + }) + }, [ + h('span', { + staticClass: 'ellipsis', + domProps: { + [scope.sanitize === true ? 'textContent' : 'innerHTML']: this.getOptionLabel(scope.opt) + } + }) + ])) + } + + return [ + h('span', { + domProps: { + [this.displayAsText ? 'textContent' : 'innerHTML']: this.displayValue !== void 0 + ? this.displayValue + : this.selectedString + } + }) + ] + }, + + __getControl (h, fromDialog) { + const child = this.__getSelection(h); + const isTarget = fromDialog === true || this.dialog !== true || this.hasDialog !== true; + + if (this.useInput === true) { + child.push(this.__getInput(h, fromDialog, isTarget)); + } + // there can be only one (when dialog is opened the control in dialog should be target) + else if (this.editable === true) { + const attrs = isTarget === true ? this.comboboxAttrs : void 0; + + child.push( + h('input', { + ref: isTarget === true ? 'target' : void 0, + key: 'd_t', + staticClass: 'q-select__focus-target', + attrs: { + id: isTarget === true ? this.targetUid : void 0, + readonly: true, + 'data-autofocus': (fromDialog === true ? isTarget === true : this.autofocus) || void 0, + ...attrs + }, + on: cache(this, 'f-tget', { + keydown: this.__onTargetKeydown, + keyup: this.__onTargetKeyup, + keypress: this.__onTargetKeypress + }) + }) + ); + + if (isTarget === true && typeof this.autocomplete === 'string' && this.autocomplete.length > 0) { + child.push( + h('input', { + key: 'autoinp', + staticClass: 'q-select__autocomplete-input', + attrs: { autocomplete: this.autocomplete, tabindex: -1 }, + on: cache(this, 'autoinp', { + keyup: this.__onTargetAutocomplete + }) + }) + ); + } + } + + if (this.nameProp !== void 0 && this.disable !== true && this.innerOptionsValue.length > 0) { + const opts = this.innerOptionsValue.map(value => h('option', { + attrs: { value, selected: true } + })); + + child.push( + h('select', { + staticClass: 'hidden', + attrs: { + name: this.nameProp, + multiple: this.multiple + } + }, opts) + ); + } + + const attrs = this.useInput === true || isTarget !== true ? void 0 : this.qAttrs; + + return h('div', { staticClass: 'q-field__native row items-center', attrs }, child) + }, + + __getOptions (h) { + if (this.menu !== true) { + return void 0 + } + + if (this.noOptions === true) { + return this.$scopedSlots['no-option'] !== void 0 + ? this.$scopedSlots['no-option']({ inputValue: this.inputValue }) + : void 0 + } + + if ( + this.$scopedSlots.option !== void 0 && + this.__optionScopeCache.optionSlot !== this.$scopedSlots.option + ) { + this.__optionScopeCache.optionSlot = this.$scopedSlots.option; + this.__optionScopeCache.optionEls = []; + } + + const fn = this.$scopedSlots.option !== void 0 + ? this.$scopedSlots.option + : scope => h(QItem, { + key: scope.index, + props: scope.itemProps, + attrs: scope.itemAttrs, + on: scope.itemEvents + }, [ + h(QItemSection, [ + h(QItemLabel, { + domProps: { + [scope.sanitize === true ? 'textContent' : 'innerHTML']: this.getOptionLabel(scope.opt) + } + }) + ]) + ]); + + const { optionEls } = this.__optionScopeCache; + + let options = this.__padVirtualScroll(h, 'div', this.optionScope.map((scope, i) => { + if (optionEls[i] === void 0) { + optionEls[i] = fn(scope); + } + + return optionEls[i] + })); + + if (this.$scopedSlots['before-options'] !== void 0) { + options = this.$scopedSlots['before-options']().concat(options); + } + + return mergeSlot(options, this, 'after-options') + }, + + __prependDialogCloseIcon (h) { + if ( + this.computedDialogCloseIcon === false || + this.hasDialog !== true || + this.dialog !== true + ) { + return slot(this, 'prepend') + } + + return mergeSlot([ + h(QIcon, { + staticClass: 'q-select__close-icon q-field__focusable-action', + props: { tag: 'button', name: this.computedDialogCloseIcon }, + attrs: iconAsButton, + on: this.closeButtonEvents + }) + ], this, 'prepend') + }, + + __getInnerAppend (h) { + return this.loading !== true && this.innerLoadingIndicator !== true && this.hideDropdownIcon !== true + ? [ + h(QIcon, { + staticClass: 'q-select__dropdown-icon' + (this.menu === true ? ' rotate-180' : ''), + props: { name: this.dropdownArrowIcon } + }) + ] + : null + }, + + __getInput (h, fromDialog, isTarget) { + const attrs = isTarget === true ? { ...this.comboboxAttrs, ...this.qAttrs } : void 0; + + const options = { + ref: isTarget === true ? 'target' : void 0, + key: 'i_t', + staticClass: 'q-field__input q-placeholder col', + style: this.inputStyle, + class: this.computedInputClass, + domProps: { value: this.inputValue !== void 0 ? this.inputValue : '' }, + attrs: { + // required for Android in order to show ENTER key when in form + type: 'search', + ...attrs, + id: isTarget === true ? this.targetUid : void 0, + maxlength: this.maxlength, // this is converted to prop by QField + autocomplete: this.autocomplete, + 'data-autofocus': (fromDialog === true ? isTarget === true : this.autofocus) || void 0, + disabled: this.disable === true, + readonly: this.readonly === true + }, + on: this.inputControlEvents + }; + + if (fromDialog !== true && this.hasDialog === true) { + options.staticClass += ' no-pointer-events'; + } + + return h('input', options) + }, + + __onChange (e) { + if (e.target.qComposing === true) { + e.target.qComposing = false; + this.__onInput(e); + } + }, + + __onInput (e) { + if (!e || !e.target || e.target.qComposing === true) { + return + } + + const val = typeof e.data === 'string' && e.isComposing === true && e.data.length + 1 === e.target.value.length + ? e.data + : e.target.value; + + if (this.inputValue === val) { + return + } + + clearTimeout(this.inputTimer); + + this.__setInputValue(val); + // mark it here as user input so that if updateInputValue is called + // before filter is called the indicator is reset + this.userInputValue = true; + this.defaultInputValue = this.inputValue; + + if ( + this.focused !== true && + (this.hasDialog !== true || this.dialogFieldFocused === true) + ) { + this.__focus(); + } + + if (this.qListeners.filter !== void 0) { + this.inputTimer = setTimeout(() => { + this.filter(this.inputValue); + }, this.inputDebounce); + } + }, + + __setInputValue (inputValue) { + if (this.inputValue !== inputValue) { + this.inputValue = inputValue; + this.$emit('input-value', inputValue); + } + }, + + updateInputValue (val, noFiltering, internal) { + this.userInputValue = internal !== true; + + if (this.useInput === true) { + this.__setInputValue(val); + + if (noFiltering === true || internal !== true) { + this.defaultInputValue = val; + } + + noFiltering !== true && this.filter(val); + } + }, + + filter (val, keepClosed, afterUpdateFn) { + if (this.qListeners.filter === void 0 || (keepClosed !== true && this.focused !== true)) { + return + } + + if (this.innerLoading === true) { + this.$emit('filter-abort'); + } + else { + this.innerLoading = true; + this.innerLoadingIndicator = true; + } + + if ( + val !== '' && + this.multiple !== true && + this.innerValue.length > 0 && + this.userInputValue !== true && + val === this.getOptionLabel(this.innerValue[0]) + ) { + val = ''; + } + + const filterId = setTimeout(() => { + this.menu === true && (this.menu = false); + }, 10); + clearTimeout(this.filterId); + this.filterId = filterId; + + this.$emit( + 'filter', + val, + (fn, afterFn) => { + if ((keepClosed === true || this.focused === true) && this.filterId === filterId) { + clearTimeout(this.filterId); + + typeof fn === 'function' && fn(); + + // hide indicator to allow arrow to animate + this.innerLoadingIndicator = false; + + this.$nextTick(() => { + this.innerLoading = false; + + if (this.editable === true) { + if (keepClosed === true) { + this.menu === true && this.hidePopup(); + } + else if (this.menu === true) { + this.__updateMenu(true); + } + else { + this.menu = true; + this.hasDialog === true && (this.dialog = true); + } + } + + typeof afterFn === 'function' && this.$nextTick(() => { afterFn(this); }); + typeof afterUpdateFn === 'function' && this.$nextTick(() => { afterUpdateFn(this); }); + }); + } + }, + () => { + if (this.focused === true && this.filterId === filterId) { + clearTimeout(this.filterId); + this.innerLoading = false; + this.innerLoadingIndicator = false; + } + this.menu === true && (this.menu = false); + } + ); + }, + + __getControlEvents () { + const focusout = e => { + this.__onControlFocusout(e, () => { + this.__resetInputValue(); + this.__closeMenu(); + }); + }; + + return { + focusin: this.__onControlFocusin, + focusout, + 'popup-show': this.__onControlPopupShow, + 'popup-hide': e => { + e !== void 0 && stop(e); + this.$emit('popup-hide', e); + this.hasPopupOpen = false; + focusout(e); + }, + click: e => { + // label from QField will propagate click on the input (except IE) + prevent(e); + + if (this.hasDialog !== true && this.menu === true) { + this.__closeMenu(); + this.$refs.target !== void 0 && this.$refs.target.focus(); + return + } + + this.showPopup(e); + } + } + }, + + __getControlChild (h) { + if ( + this.editable !== false && ( + this.dialog === true || // dialog always has menu displayed, so need to render it + this.noOptions !== true || + this.$scopedSlots['no-option'] !== void 0 + ) + ) { + return this[`__get${this.hasDialog === true ? 'Dialog' : 'Menu'}`](h) + } + }, + + __getMenu (h) { + return h(QMenu, { + key: 'menu', + ref: 'menu', + props: { + value: this.menu, + fit: this.menuShrink !== true, + cover: this.optionsCover === true && this.noOptions !== true && this.useInput !== true, + anchor: this.menuAnchor, + self: this.menuSelf, + offset: this.menuOffset, + contentClass: this.menuContentClass, + contentStyle: this.popupContentStyle, + dark: this.isOptionsDark, + noParentEvent: true, + noRefocus: true, + noFocus: true, + square: this.squaredMenu, + transitionShow: this.transitionShow, + transitionHide: this.transitionHide, + separateClosePopup: true + }, + attrs: this.listboxAttrs, + on: cache(this, 'menu', { + '&scroll': this.__onVirtualScrollEvt, + 'before-hide': this.__closeMenu, + show: this.__onMenuShow + }) + }, this.__getOptions(h)) + }, + + __onMenuShow () { + this.__setVirtualScrollSize(); + }, + + __onDialogFieldFocus (e) { + stop(e); + this.$refs.target !== void 0 && this.$refs.target.focus(); + this.dialogFieldFocused = true; + }, + + __onDialogFieldBlur (e) { + stop(e); + this.$nextTick(() => { + this.dialogFieldFocused = false; + }); + }, + + __getDialog (h) { + const content = [ + h(QField, { + staticClass: `col-auto ${this.fieldClass}`, + props: { + ...this.$props, + for: this.targetUid, + dark: this.isOptionsDark, + square: true, + filled: true, + itemAligned: false, + loading: this.innerLoadingIndicator, + stackLabel: this.inputValue.length > 0 + }, + on: { + ...this.qListeners, + focus: this.__onDialogFieldFocus, + blur: this.__onDialogFieldBlur + }, + scopedSlots: { + ...this.$scopedSlots, + rawControl: () => this.__getControl(h, true), + prepend: () => this.__prependDialogCloseIcon(h), + before: void 0, + after: void 0 + } + }) + ]; + + this.menu === true && content.push( + h('div', { + key: 'virtMenu', + ref: 'menuContent', + staticClass: 'col scroll', + class: this.menuContentClass, + style: this.popupContentStyle, + attrs: this.listboxAttrs, + on: cache(this, 'virtMenu', { + click: prevent, + '&scroll': this.__onVirtualScrollEvt + }) + }, this.__getOptions(h)) + ); + + return h(QDialog, { + key: 'dialog', + ref: 'dialog', + props: { + value: this.dialog, + position: this.useInput === true ? 'top' : void 0, + contentClass: this.dialogContentClass, + contentStyle: this.dialogContentStyle, + transitionShow: this.transitionShow, + transitionHide: this.transitionHide + }, + on: cache(this, 'dialog', { + 'before-hide': this.__onDialogBeforeHide, + hide: this.__onDialogHide, + show: this.__onDialogShow + }) + }, [ + h('div', { + staticClass: 'q-select__dialog' + + ` q-select__dialog--${this.optionsDarkSuffix} q-${this.optionsDarkSuffix}` + + (this.dialogFieldFocused === true ? ' q-select__dialog--focused' : '') + }, content) + ]) + }, + + __onDialogBeforeHide () { + if (this.useInput !== true || this.$q.platform.is.desktop === true) { + this.$refs.dialog.__refocusTarget = this.$el.querySelector('.q-field__native > [tabindex]:last-child'); + } + this.focused = false; + this.dialogFieldFocused = false; + }, + + __onDialogHide (e) { + if (this.$q.platform.is.desktop !== true) { + document.activeElement.blur(); + } + this.hidePopup(); + this.focused === false && this.$emit('blur', e); + this.__resetInputValue(); + }, + + __onDialogShow () { + const el = document.activeElement; + // IE can have null document.activeElement + if ( + (el === null || el.id !== this.targetUid) && + this.$refs.target !== el && + this.$refs.target !== void 0 + ) { + this.$refs.target.focus(); + } + + this.__setVirtualScrollSize(); + }, + + __closeMenu () { + if (this.__optionScopeCache !== void 0) { + this.__optionScopeCache.optionEls = []; + } + + if (this.dialog === true) { + return + } + + this.optionIndex = -1; + + if (this.menu === true) { + this.menu = false; + } + + if (this.focused === false) { + clearTimeout(this.filterId); + this.filterId = void 0; + + if (this.innerLoading === true) { + this.$emit('filter-abort'); + this.innerLoading = false; + this.innerLoadingIndicator = false; + } + } + }, + + showPopup (e) { + if (this.editable !== true) { + return + } + + if (this.hasDialog === true) { + this.__onControlFocusin(e); + this.dialog = true; + this.$nextTick(() => { + this.__focus(); + }); + } + else { + this.__focus(); + } + + if (this.qListeners.filter !== void 0) { + this.filter(this.inputValue); + } + else if (this.noOptions !== true || this.$scopedSlots['no-option'] !== void 0) { + this.menu = true; + } + }, + + hidePopup () { + this.dialog = false; + this.__closeMenu(); + }, + + __resetInputValue () { + this.useInput === true && this.updateInputValue( + this.multiple !== true && this.fillInput === true && this.innerValue.length > 0 + ? this.getOptionLabel(this.innerValue[0]) || '' + : '', + true, + true + ); + }, + + __updateMenu (show) { + let optionIndex = -1; + + if (show === true) { + if (this.innerValue.length > 0) { + const val = this.getOptionValue(this.innerValue[0]); + optionIndex = this.options.findIndex(v => isDeepEqual(this.getOptionValue(v), val)); + } + + this.__resetVirtualScroll(optionIndex); + } + + this.setOptionIndex(optionIndex); + }, + + __onPreRender () { + this.hasDialog = this.$q.platform.is.mobile !== true && this.behavior !== 'dialog' + ? false + : this.behavior !== 'menu' && ( + this.useInput === true + ? this.$scopedSlots['no-option'] !== void 0 || this.qListeners.filter !== void 0 || this.noOptions === false + : true + ); + }, + + updateMenuPosition () { + if (this.dialog === false && this.$refs.menu !== void 0) { + this.$refs.menu.updatePosition(); + } + } + }, + + beforeMount () { + this.__optionScopeCache = { + optionSlot: this.$scopedSlots.option, + options: [], + optionEls: [] + }; + }, + + beforeDestroy () { + this.__optionScopeCache = void 0; + clearTimeout(this.inputTimer); + } + }); + + const skeletonTypes = [ + 'text', 'rect', 'circle', + 'QBtn', 'QBadge', 'QChip', 'QToolbar', + 'QCheckbox', 'QRadio', 'QToggle', + 'QSlider', 'QRange', 'QInput', + 'QAvatar' + ]; + + const skeletonAnimations = [ + 'wave', 'pulse', 'pulse-x', 'pulse-y', 'fade', 'blink', 'none' + ]; + + var QSkeleton = Vue__default["default"].extend({ + name: 'QSkeleton', + + mixins: [ DarkMixin, TagMixin, ListenersMixin ], + + props: { + type: { + type: String, + validator: v => skeletonTypes.includes(v), + default: 'rect' + }, + + animation: { + type: String, + validator: v => skeletonAnimations.includes(v), + default: 'wave' + }, + + square: Boolean, + bordered: Boolean, + + size: String, + width: String, + height: String + }, + + computed: { + style () { + return this.size !== void 0 + ? { width: this.size, height: this.size } + : { width: this.width, height: this.height } + }, + + classes () { + return `q-skeleton--${this.darkSuffix} q-skeleton--type-${this.type}` + + (this.animation !== 'none' ? ` q-skeleton--anim q-skeleton--anim-${this.animation}` : '') + + (this.square === true ? ' q-skeleton--square' : '') + + (this.bordered === true ? ' q-skeleton--bordered' : '') + } + }, + + render (h) { + return h(this.tag, { + staticClass: 'q-skeleton', + class: this.classes, + style: this.style, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + const slotsDef = [ + ['left', 'center', 'start', 'width'], + ['right', 'center', 'end', 'width'], + ['top', 'start', 'center', 'height'], + ['bottom', 'end', 'center', 'height'] + ]; + + var QSlideItem = Vue__default["default"].extend({ + name: 'QSlideItem', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + leftColor: String, + rightColor: String, + topColor: String, + bottomColor: String + }, + + directives: { + TouchPan + }, + + computed: { + langDir () { + return this.$q.lang.rtl === true + ? { left: 'right', right: 'left' } + : { left: 'left', right: 'right' } + } + }, + + methods: { + reset () { + this.$refs.content.style.transform = 'translate(0,0)'; + this.__emitSlide(this.__showing, 0, true); + }, + + __emitSlide (side, ratio, isReset) { + this.qListeners.slide !== void 0 && this.$emit('slide', { side, ratio, isReset }); + }, + + __pan (evt) { + const node = this.$refs.content; + + if (evt.isFinal) { + node.classList.remove('no-transition'); + + if (this.__scale === 1) { + node.style.transform = `translate${this.__axis}(${this.__dir * 100}%)`; + + this.timer = setTimeout(() => { + this.$emit(this.__showing, { reset: this.reset }); + this.$emit('action', { side: this.__showing, reset: this.reset }); + }, 230); + } + else { + node.style.transform = 'translate(0,0)'; + this.__emitSlide(this.__showing, 0, true); + } + + return + } + + if (evt.isFirst) { + this.__dir = null; + this.__size = { left: 0, right: 0, top: 0, bottom: 0 }; + this.__scale = 0; + + node.classList.add('no-transition'); + + slotsDef.forEach(slot => { + if (this.$scopedSlots[slot[0]] !== void 0) { + const node = this.$refs[slot[0] + 'Content']; + node.style.transform = 'scale(1)'; + this.__size[slot[0]] = node.getBoundingClientRect()[slot[3]]; + } + }); + + this.__axis = (evt.direction === 'up' || evt.direction === 'down') + ? 'Y' + : 'X'; + } + else { + evt.direction = this.__axis === 'X' + ? evt.offset.x < 0 ? 'left' : 'right' + : evt.offset.y < 0 ? 'up' : 'down'; + } + + if ( + (this.$scopedSlots.left === void 0 && evt.direction === this.langDir.right) || + (this.$scopedSlots.right === void 0 && evt.direction === this.langDir.left) || + (this.$scopedSlots.top === void 0 && evt.direction === 'down') || + (this.$scopedSlots.bottom === void 0 && evt.direction === 'up') + ) { + node.style.transform = 'translate(0,0)'; + return + } + + let showing, dir, dist; + + if (this.__axis === 'X') { + dir = evt.direction === 'left' ? -1 : 1; + showing = dir === 1 ? this.langDir.left : this.langDir.right; + dist = evt.distance.x; + } + else { + dir = evt.direction === 'up' ? -2 : 2; + showing = dir === 2 ? 'top' : 'bottom'; + dist = evt.distance.y; + } + + if (this.__dir !== null && Math.abs(dir) !== Math.abs(this.__dir)) { + return + } + + if (this.__dir !== dir) { + ['left', 'right', 'top', 'bottom'].forEach(d => { + if (this.$refs[d] !== void 0) { + this.$refs[d].style.visibility = showing === d + ? 'visible' + : 'hidden'; + } + }); + this.__showing = showing; + this.__dir = dir; + } + + this.__scale = Math.max(0, Math.min(1, (dist - 40) / this.__size[showing])); + + node.style.transform = `translate${this.__axis}(${dist * dir / Math.abs(dir)}px)`; + this.$refs[`${showing}Content`].style.transform = `scale(${this.__scale})`; + + this.__emitSlide(showing, this.__scale, false); + } + }, + + render (h) { + const + content = [], + slots = { + left: this.$scopedSlots[this.langDir.right] !== void 0, + right: this.$scopedSlots[this.langDir.left] !== void 0, + up: this.$scopedSlots.bottom !== void 0, + down: this.$scopedSlots.top !== void 0 + }, + dirs = Object.keys(slots).filter(key => slots[key] === true); + + slotsDef.forEach(slot => { + const dir = slot[0]; + + if (this.$scopedSlots[dir] !== void 0) { + content.push( + h('div', { + ref: dir, + class: `q-slide-item__${dir} absolute-full row no-wrap items-${slot[1]} justify-${slot[2]}` + + (this[dir + 'Color'] !== void 0 ? ` bg-${this[dir + 'Color']}` : '') + }, [ + h('div', { ref: dir + 'Content' }, this.$scopedSlots[dir]()) + ]) + ); + } + }); + + content.push( + h('div', { + ref: 'content', + key: 'content', + staticClass: 'q-slide-item__content', + directives: dirs.length > 0 + ? cacheWithFn(this, 'dir#' + dirs.join(''), () => { + const modifiers = { + prevent: true, + stop: true, + mouse: true + }; + + dirs.forEach(dir => { + modifiers[dir] = true; + }); + + return [{ + name: 'touch-pan', + value: this.__pan, + modifiers + }] + }) + : null + }, slot(this, 'default')) + ); + + return h('div', { + staticClass: 'q-slide-item q-item-type overflow-hidden' + + ` q-slide-item--${this.darkSuffix} q-${this.darkSuffix}`, + on: { ...this.qListeners } + }, content) + }, + + beforeDestroy () { + clearTimeout(this.timer); + } + }); + + var QSpace = Vue__default["default"].extend({ + name: 'QSpace', + + mixins: [ ListenersMixin ], + + render (h) { + return h('div', { + staticClass: 'q-space', + on: { ...this.qListeners } + }) + } + }); + + var QSpinnerAudio = Vue__default["default"].extend({ + name: 'QSpinnerAudio', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 55 80', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'matrix(1 0 0 -1 0 80)' + } + }, [ + h('rect', { + attrs: { + 'width': '10', + 'height': '20', + 'rx': '3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '4.3s', + 'values': '20;45;57;80;64;32;66;45;64;23;66;13;64;56;34;34;2;23;76;79;20', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '15', + 'width': '10', + 'height': '80', + 'rx': '3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '2s', + 'values': '80;55;33;5;75;23;73;33;12;14;60;80', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '30', + 'width': '10', + 'height': '50', + 'rx': '3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '1.4s', + 'values': '50;34;78;23;56;23;34;76;80;54;21;50', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '45', + 'width': '10', + 'height': '30', + 'rx': '3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '2s', + 'values': '30;45;13;80;56;72;45;76;34;23;67;30', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerBall = Vue__default["default"].extend({ + name: 'QSpinnerBall', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'stroke': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 57 57', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'translate(1 1)', + 'stroke-width': '2', + 'fill': 'none', + 'fill-rule': 'evenodd' + } + }, [ + h('circle', { + attrs: { + 'cx': '5', + 'cy': '50', + 'r': '5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'cy', + 'begin': '0s', + 'dur': '2.2s', + 'values': '50;5;50;50', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'cx', + 'begin': '0s', + 'dur': '2.2s', + 'values': '5;27;49;5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '27', + 'cy': '5', + 'r': '5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'cy', + 'begin': '0s', + 'dur': '2.2s', + 'from': '5', + 'to': '5', + 'values': '5;50;50;5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'cx', + 'begin': '0s', + 'dur': '2.2s', + 'from': '27', + 'to': '27', + 'values': '27;49;5;27', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '49', + 'cy': '50', + 'r': '5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'cy', + 'begin': '0s', + 'dur': '2.2s', + 'values': '50;50;5;50', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'cx', + 'from': '49', + 'to': '49', + 'begin': '0s', + 'dur': '2.2s', + 'values': '49;5;27;49', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerBars = Vue__default["default"].extend({ + name: 'QSpinnerBars', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 135 140', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('rect', { + attrs: { + 'y': '10', + 'width': '15', + 'height': '120', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0.5s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0.5s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '30', + 'y': '10', + 'width': '15', + 'height': '120', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0.25s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0.25s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '60', + 'width': '15', + 'height': '140', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '90', + 'y': '10', + 'width': '15', + 'height': '120', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0.25s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0.25s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('rect', { + attrs: { + 'x': '120', + 'y': '10', + 'width': '15', + 'height': '120', + 'rx': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'begin': '0.5s', + 'dur': '1s', + 'values': '120;110;100;90;80;70;60;50;40;140;120', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'begin': '0.5s', + 'dur': '1s', + 'values': '10;15;20;25;30;35;40;45;50;0;10', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerBox = Vue__default["default"].extend({ + name: 'QSpinnerBox', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('rect', { + attrs: { + 'x': '25', + 'y': '25', + 'width': '50', + 'height': '50', + 'fill': 'none', + 'stroke-width': '4', + 'stroke': 'currentColor' + } + }, [ + h('animateTransform', { + attrs: { + 'id': 'spinnerBox', + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '180 50 50', + 'dur': '0.5s', + 'begin': 'rectBox.end' + } + }) + ]), + h('rect', { + attrs: { + 'x': '27', + 'y': '27', + 'width': '46', + 'height': '50', + 'fill': 'currentColor' + } + }, [ + h('animate', { + attrs: { + 'id': 'rectBox', + 'attributeName': 'height', + 'begin': '0s;spinnerBox.end', + 'dur': '1.3s', + 'from': '50', + 'to': '0', + 'fill': 'freeze' + } + }) + ]) + ]) + } + }); + + var QSpinnerClock = Vue__default["default"].extend({ + name: 'QSpinnerClock', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('circle', { + attrs: { + 'cx': '50', + 'cy': '50', + 'r': '48', + 'fill': 'none', + 'stroke-width': '4', + 'stroke-miterlimit': '10', + 'stroke': 'currentColor' + } + }), + h('line', { + attrs: { + 'stroke-linecap': 'round', + 'stroke-width': '4', + 'stroke-miterlimit': '10', + 'stroke': 'currentColor', + 'x1': '50', + 'y1': '50', + 'x2': '85', + 'y2': '50.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '2s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'stroke-linecap': 'round', + 'stroke-width': '4', + 'stroke-miterlimit': '10', + 'stroke': 'currentColor', + 'x1': '50', + 'y1': '50', + 'x2': '49.5', + 'y2': '74' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '15s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerComment = Vue__default["default"].extend({ + name: 'QSpinnerComment', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('rect', { + attrs: { + 'x': '0', + 'y': '0', + 'width': '100', + 'height': '100', + 'fill': 'none' + } + }), + h('path', { + attrs: { + 'd': 'M78,19H22c-6.6,0-12,5.4-12,12v31c0,6.6,5.4,12,12,12h37.2c0.4,3,1.8,5.6,3.7,7.6c2.4,2.5,5.1,4.1,9.1,4 c-1.4-2.1-2-7.2-2-10.3c0-0.4,0-0.8,0-1.3h8c6.6,0,12-5.4,12-12V31C90,24.4,84.6,19,78,19z', + 'fill': 'currentColor' + } + }), + h('circle', { + attrs: { + 'cx': '30', + 'cy': '47', + 'r': '5', + 'fill': '#fff' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'values': '0;1;1', + 'keyTimes': '0;0.2;1', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '50', + 'cy': '47', + 'r': '5', + 'fill': '#fff' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'values': '0;0;1;1', + 'keyTimes': '0;0.2;0.4;1', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '70', + 'cy': '47', + 'r': '5', + 'fill': '#fff' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'values': '0;0;1;1', + 'keyTimes': '0;0.4;0.6;1', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerCube = Vue__default["default"].extend({ + name: 'QSpinnerCube', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('rect', { + attrs: { + 'x': '0', + 'y': '0', + 'width': '100', + 'height': '100', + 'fill': 'none' + } + }), + h('g', { + attrs: { + 'transform': 'translate(25 25)' + } + }, [ + h('rect', { + attrs: { + 'x': '-20', + 'y': '-20', + 'width': '40', + 'height': '40', + 'fill': 'currentColor', + 'opacity': '0.9' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '1.5', + 'to': '1', + 'repeatCount': 'indefinite', + 'begin': '0s', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.2 0.8 0.2 0.8', + 'keyTimes': '0;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(75 25)' + } + }, [ + h('rect', { + attrs: { + 'x': '-20', + 'y': '-20', + 'width': '40', + 'height': '40', + 'fill': 'currentColor', + 'opacity': '0.8' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '1.5', + 'to': '1', + 'repeatCount': 'indefinite', + 'begin': '0.1s', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.2 0.8 0.2 0.8', + 'keyTimes': '0;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(25 75)' + } + }, [ + h('rect', { + staticClass: 'cube', + attrs: { + 'x': '-20', + 'y': '-20', + 'width': '40', + 'height': '40', + 'fill': 'currentColor', + 'opacity': '0.7' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '1.5', + 'to': '1', + 'repeatCount': 'indefinite', + 'begin': '0.3s', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.2 0.8 0.2 0.8', + 'keyTimes': '0;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(75 75)' + } + }, [ + h('rect', { + staticClass: 'cube', + attrs: { + 'x': '-20', + 'y': '-20', + 'width': '40', + 'height': '40', + 'fill': 'currentColor', + 'opacity': '0.6' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '1.5', + 'to': '1', + 'repeatCount': 'indefinite', + 'begin': '0.2s', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.2 0.8 0.2 0.8', + 'keyTimes': '0;1' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerDots = Vue__default["default"].extend({ + name: 'QSpinnerDots', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 120 30', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('circle', { + attrs: { + 'cx': '15', + 'cy': '15', + 'r': '15' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'from': '15', + 'to': '15', + 'begin': '0s', + 'dur': '0.8s', + 'values': '15;9;15', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'from': '1', + 'to': '1', + 'begin': '0s', + 'dur': '0.8s', + 'values': '1;.5;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '60', + 'cy': '15', + 'r': '9', + 'fill-opacity': '.3' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'from': '9', + 'to': '9', + 'begin': '0s', + 'dur': '0.8s', + 'values': '9;15;9', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'from': '.5', + 'to': '.5', + 'begin': '0s', + 'dur': '0.8s', + 'values': '.5;1;.5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '105', + 'cy': '15', + 'r': '15' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'from': '15', + 'to': '15', + 'begin': '0s', + 'dur': '0.8s', + 'values': '15;9;15', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'from': '1', + 'to': '1', + 'begin': '0s', + 'dur': '0.8s', + 'values': '1;.5;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerFacebook = Vue__default["default"].extend({ + name: 'QSpinnerFacebook', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'xmlns': 'http://www.w3.org/2000/svg', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('g', { + attrs: { + 'transform': 'translate(20 50)' + } + }, [ + h('rect', { + attrs: { + 'x': '-10', + 'y': '-30', + 'width': '20', + 'height': '60', + 'fill': 'currentColor', + 'opacity': '0.6' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '2', + 'to': '1', + 'begin': '0s', + 'repeatCount': 'indefinite', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.1 0.9 0.4 1', + 'keyTimes': '0;1', + 'values': '2;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(50 50)' + } + }, [ + h('rect', { + attrs: { + 'x': '-10', + 'y': '-30', + 'width': '20', + 'height': '60', + 'fill': 'currentColor', + 'opacity': '0.8' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '2', + 'to': '1', + 'begin': '0.1s', + 'repeatCount': 'indefinite', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.1 0.9 0.4 1', + 'keyTimes': '0;1', + 'values': '2;1' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(80 50)' + } + }, [ + h('rect', { + attrs: { + 'x': '-10', + 'y': '-30', + 'width': '20', + 'height': '60', + 'fill': 'currentColor', + 'opacity': '0.9' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'scale', + 'from': '2', + 'to': '1', + 'begin': '0.2s', + 'repeatCount': 'indefinite', + 'dur': '1s', + 'calcMode': 'spline', + 'keySplines': '0.1 0.9 0.4 1', + 'keyTimes': '0;1', + 'values': '2;1' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerGears = Vue__default["default"].extend({ + name: 'QSpinnerGears', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'translate(-20,-20)' + } + }, [ + h('path', { + attrs: { + 'd': 'M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z', + 'fill': 'currentColor' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '90 50 50', + 'to': '0 50 50', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(20,20) rotate(15 50 50)' + } + }, [ + h('path', { + attrs: { + 'd': 'M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z', + 'fill': 'currentColor' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '90 50 50', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerGrid = Vue__default["default"].extend({ + name: 'QSpinnerGrid', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 105 105', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('circle', { + attrs: { + 'cx': '12.5', + 'cy': '12.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '0s', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '12.5', + 'cy': '52.5', + 'r': '12.5', + 'fill-opacity': '.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '100ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '52.5', + 'cy': '12.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '300ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '52.5', + 'cy': '52.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '600ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '92.5', + 'cy': '12.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '800ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '92.5', + 'cy': '52.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '400ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '12.5', + 'cy': '92.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '700ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '52.5', + 'cy': '92.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '500ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '92.5', + 'cy': '92.5', + 'r': '12.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '200ms', + 'dur': '1s', + 'values': '1;.2;1', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerHearts = Vue__default["default"].extend({ + name: 'QSpinnerHearts', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'fill': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 140 64', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('path', { + attrs: { + 'd': 'M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.716-6.002 11.47-7.65 17.304-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z', + 'fill-opacity': '.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '0s', + 'dur': '1.4s', + 'values': '0.5;1;0.5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.593-2.32 17.308 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z', + 'fill-opacity': '.5' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'fill-opacity', + 'begin': '0.7s', + 'dur': '1.4s', + 'values': '0.5;1;0.5', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z' + } + }) + ]) + } + }); + + var QSpinnerHourglass = Vue__default["default"].extend({ + name: 'QSpinnerHourglass', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', [ + h('path', { + staticClass: 'glass', + attrs: { + 'fill': 'none', + 'stroke': 'currentColor', + 'stroke-width': '5', + 'stroke-miterlimit': '10', + 'd': 'M58.4,51.7c-0.9-0.9-1.4-2-1.4-2.3s0.5-0.4,1.4-1.4 C70.8,43.8,79.8,30.5,80,15.5H70H30H20c0.2,15,9.2,28.1,21.6,32.3c0.9,0.9,1.4,1.2,1.4,1.5s-0.5,1.6-1.4,2.5 C29.2,56.1,20.2,69.5,20,85.5h10h40h10C79.8,69.5,70.8,55.9,58.4,51.7z' + } + }), + h('clipPath', { + attrs: { + 'id': 'uil-hourglass-clip1' + } + }, [ + h('rect', { + staticClass: 'clip', + attrs: { + 'x': '15', + 'y': '20', + 'width': '70', + 'height': '25' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'from': '25', + 'to': '0', + 'dur': '1s', + 'repeatCount': 'indefinite', + 'values': '25;0;0', + 'keyTimes': '0;0.5;1' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'from': '20', + 'to': '45', + 'dur': '1s', + 'repeatCount': 'indefinite', + 'values': '20;45;45', + 'keyTimes': '0;0.5;1' + } + }) + ]) + ]), + h('clipPath', { + attrs: { + 'id': 'uil-hourglass-clip2' + } + }, [ + h('rect', { + staticClass: 'clip', + attrs: { + 'x': '15', + 'y': '55', + 'width': '70', + 'height': '25' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'height', + 'from': '0', + 'to': '25', + 'dur': '1s', + 'repeatCount': 'indefinite', + 'values': '0;25;25', + 'keyTimes': '0;0.5;1' + } + }), + h('animate', { + attrs: { + 'attributeName': 'y', + 'from': '80', + 'to': '55', + 'dur': '1s', + 'repeatCount': 'indefinite', + 'values': '80;55;55', + 'keyTimes': '0;0.5;1' + } + }) + ]) + ]), + h('path', { + staticClass: 'sand', + attrs: { + 'd': 'M29,23c3.1,11.4,11.3,19.5,21,19.5S67.9,34.4,71,23H29z', + 'clip-path': 'url(#uil-hourglass-clip1)', + 'fill': 'currentColor' + } + }), + h('path', { + staticClass: 'sand', + attrs: { + 'd': 'M71.6,78c-3-11.6-11.5-20-21.5-20s-18.5,8.4-21.5,20H71.6z', + 'clip-path': 'url(#uil-hourglass-clip2)', + 'fill': 'currentColor' + } + }), + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '180 50 50', + 'repeatCount': 'indefinite', + 'dur': '1s', + 'values': '0 50 50;0 50 50;180 50 50', + 'keyTimes': '0;0.7;1' + } + }) + ]) + ]) + } + }); + + var QSpinnerInfinity = Vue__default["default"].extend({ + name: 'QSpinnerInfinity', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('path', { + attrs: { + 'd': 'M24.3,30C11.4,30,5,43.3,5,50s6.4,20,19.3,20c19.3,0,32.1-40,51.4-40C88.6,30,95,43.3,95,50s-6.4,20-19.3,20C56.4,70,43.6,30,24.3,30z', + 'fill': 'none', + 'stroke': 'currentColor', + 'stroke-width': '8', + 'stroke-dasharray': '10.691205342610678 10.691205342610678', + 'stroke-dashoffset': '0' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-dashoffset', + 'from': '0', + 'to': '21.382410685221355', + 'begin': '0', + 'dur': '2s', + 'repeatCount': 'indefinite', + 'fill': 'freeze' + } + }) + ]) + ]) + } + }); + + var QSpinnerIos = Vue__default["default"].extend({ + name: 'QSpinnerIos', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'stroke': 'currentColor', + 'fill': 'currentColor', + 'viewBox': '0 0 64 64' + } + }, [ + h('g', { + attrs: { + 'stroke-width': '4', + 'stroke-linecap': 'round' + } + }, [ + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(180)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(210)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(240)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(270)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(300)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(330)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(0)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(30)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(60)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(90)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(120)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85', + 'repeatCount': 'indefinite' + } + }) + ]), + h('line', { + attrs: { + 'y1': '17', + 'y2': '29', + 'transform': 'translate(32,32) rotate(150)' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'dur': '750ms', + 'values': '1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerOrbit = Vue__default["default"].extend({ + name: 'QSpinnerOrbit', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid' + } + }, [ + h('circle', { + attrs: { + 'cx': '50', + 'cy': '50', + 'r': '44', + 'fill': 'none', + 'stroke-width': '4', + 'stroke-opacity': '.5', + 'stroke': 'currentColor' + } + }), + h('circle', { + attrs: { + 'cx': '8', + 'cy': '54', + 'r': '6', + 'fill': 'currentColor', + 'stroke-width': '3', + 'stroke': 'currentColor' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 48', + 'to': '360 50 52', + 'dur': '2s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerOval = Vue__default["default"].extend({ + name: 'QSpinnerOval', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'stroke': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 38 38', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'translate(1 1)', + 'stroke-width': '2', + 'fill': 'none', + 'fill-rule': 'evenodd' + } + }, [ + h('circle', { + attrs: { + 'stroke-opacity': '.5', + 'cx': '18', + 'cy': '18', + 'r': '18' + } + }), + h('path', { + attrs: { + 'd': 'M36 18c0-9.94-8.06-18-18-18' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 18 18', + 'to': '360 18 18', + 'dur': '1s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerPie = Vue__default["default"].extend({ + name: 'QSpinnerPie', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('path', { + attrs: { + 'd': 'M0 50A50 50 0 0 1 50 0L50 50L0 50', + 'fill': 'currentColor', + 'opacity': '0.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '0.8s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M50 0A50 50 0 0 1 100 50L50 50L50 0', + 'fill': 'currentColor', + 'opacity': '0.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '1.6s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M100 50A50 50 0 0 1 50 100L50 50L100 50', + 'fill': 'currentColor', + 'opacity': '0.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '2.4s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M50 100A50 50 0 0 1 0 50L50 50L50 100', + 'fill': 'currentColor', + 'opacity': '0.5' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 50 50', + 'to': '360 50 50', + 'dur': '3.2s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + } + }); + + var QSpinnerPuff = Vue__default["default"].extend({ + name: 'QSpinnerPuff', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'stroke': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 44 44', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'fill': 'none', + 'fill-rule': 'evenodd', + 'stroke-width': '2' + } + }, [ + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '1' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '0s', + 'dur': '1.8s', + 'values': '1; 20', + 'calcMode': 'spline', + 'keyTimes': '0; 1', + 'keySplines': '0.165, 0.84, 0.44, 1', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'begin': '0s', + 'dur': '1.8s', + 'values': '1; 0', + 'calcMode': 'spline', + 'keyTimes': '0; 1', + 'keySplines': '0.3, 0.61, 0.355, 1', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '1' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '-0.9s', + 'dur': '1.8s', + 'values': '1; 20', + 'calcMode': 'spline', + 'keyTimes': '0; 1', + 'keySplines': '0.165, 0.84, 0.44, 1', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'begin': '-0.9s', + 'dur': '1.8s', + 'values': '1; 0', + 'calcMode': 'spline', + 'keyTimes': '0; 1', + 'keySplines': '0.3, 0.61, 0.355, 1', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerRadio = Vue__default["default"].extend({ + name: 'QSpinnerRadio', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 100 100', + 'preserveAspectRatio': 'xMidYMid', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'transform': 'scale(0.55)' + } + }, [ + h('circle', { + attrs: { + 'cx': '30', + 'cy': '150', + 'r': '30', + 'fill': 'currentColor' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'dur': '1s', + 'begin': '0', + 'repeatCount': 'indefinite', + 'keyTimes': '0;0.5;1', + 'values': '0;1;1' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z', + 'fill': 'currentColor' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'dur': '1s', + 'begin': '0.1', + 'repeatCount': 'indefinite', + 'keyTimes': '0;0.5;1', + 'values': '0;1;1' + } + }) + ]), + h('path', { + attrs: { + 'd': 'M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z', + 'fill': 'currentColor' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'opacity', + 'from': '0', + 'to': '1', + 'dur': '1s', + 'begin': '0.2', + 'repeatCount': 'indefinite', + 'keyTimes': '0;0.5;1', + 'values': '0;1;1' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerRings = Vue__default["default"].extend({ + name: 'QSpinnerRings', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'stroke': 'currentColor', + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 45 45', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('g', { + attrs: { + 'fill': 'none', + 'fill-rule': 'evenodd', + 'transform': 'translate(1 1)', + 'stroke-width': '2' + } + }, [ + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '1.5s', + 'dur': '3s', + 'values': '6;22', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'begin': '1.5s', + 'dur': '3s', + 'values': '1;0', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-width', + 'begin': '1.5s', + 'dur': '3s', + 'values': '2;0', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '6' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '3s', + 'dur': '3s', + 'values': '6;22', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-opacity', + 'begin': '3s', + 'dur': '3s', + 'values': '1;0', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }), + h('animate', { + attrs: { + 'attributeName': 'stroke-width', + 'begin': '3s', + 'dur': '3s', + 'values': '2;0', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'cx': '22', + 'cy': '22', + 'r': '8' + } + }, [ + h('animate', { + attrs: { + 'attributeName': 'r', + 'begin': '0s', + 'dur': '1.5s', + 'values': '6;1;2;3;4;5;6', + 'calcMode': 'linear', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + var QSpinnerTail = Vue__default["default"].extend({ + name: 'QSpinnerTail', + + mixins: [mixin], + + render (h) { + return h('svg', { + staticClass: 'q-spinner', + class: this.classes, + on: { ...this.qListeners }, + attrs: { + focusable: 'false' /* needed for IE11 */, + 'width': this.cSize, + 'height': this.cSize, + 'viewBox': '0 0 38 38', + 'xmlns': 'http://www.w3.org/2000/svg' + } + }, [ + h('defs', [ + h('linearGradient', { + attrs: { + 'x1': '8.042%', + 'y1': '0%', + 'x2': '65.682%', + 'y2': '23.865%', + 'id': 'a' + } + }, [ + h('stop', { + attrs: { + 'stop-color': 'currentColor', + 'stop-opacity': '0', + 'offset': '0%' + } + }), + h('stop', { + attrs: { + 'stop-color': 'currentColor', + 'stop-opacity': '.631', + 'offset': '63.146%' + } + }), + h('stop', { + attrs: { + 'stop-color': 'currentColor', + 'offset': '100%' + } + }) + ]) + ]), + h('g', { + attrs: { + 'transform': 'translate(1 1)', + 'fill': 'none', + 'fill-rule': 'evenodd' + } + }, [ + h('path', { + attrs: { + 'd': 'M36 18c0-9.94-8.06-18-18-18', + 'stroke': 'url(#a)', + 'stroke-width': '2' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 18 18', + 'to': '360 18 18', + 'dur': '0.9s', + 'repeatCount': 'indefinite' + } + }) + ]), + h('circle', { + attrs: { + 'fill': 'currentColor', + 'cx': '36', + 'cy': '18', + 'r': '1' + } + }, [ + h('animateTransform', { + attrs: { + 'attributeName': 'transform', + 'type': 'rotate', + 'from': '0 18 18', + 'to': '360 18 18', + 'dur': '0.9s', + 'repeatCount': 'indefinite' + } + }) + ]) + ]) + ]) + } + }); + + const keyDirections = { + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down' + }; + + var QSplitter = Vue__default["default"].extend({ + name: 'QSplitter', + + mixins: [ DarkMixin, ListenersMixin ], + + directives: { + TouchPan + }, + + props: { + value: { + type: Number, + required: true + }, + reverse: Boolean, + unit: { + type: String, + default: '%', + validator: v => [ '%', 'px' ].includes(v) + }, + + limits: { + type: Array, + validator: v => { + if (v.length !== 2) return false + if (typeof v[0] !== 'number' || typeof v[1] !== 'number') return false + return v[0] >= 0 && v[0] <= v[1] + } + }, + + emitImmediately: Boolean, + + horizontal: Boolean, + disable: Boolean, + + tabindex: [String, Number], + + beforeClass: [Array, String, Object], + afterClass: [Array, String, Object], + + separatorClass: [Array, String, Object], + separatorStyle: [Array, String, Object] + }, + + watch: { + value: { + immediate: true, + handler (v) { + this.__normalize(v, this.computedLimits); + } + }, + + limits: { + deep: true, + handler () { + this.$nextTick(() => { + this.__normalize(this.value, this.computedLimits); + }); + } + } + }, + + computed: { + classes () { + return (this.horizontal === true ? 'column' : 'row') + + ` q-splitter--${this.horizontal === true ? 'horizontal' : 'vertical'}` + + ` q-splitter--${this.disable === true ? 'disabled' : 'workable'}` + + ` q-splitter--${this.darkSuffix}` + }, + + prop () { + return this.horizontal === true ? 'height' : 'width' + }, + + side () { + return this.reverse !== true ? 'before' : 'after' + }, + + computedLimits () { + return this.limits !== void 0 + ? this.limits + : (this.unit === '%' ? [ 10, 90 ] : [ 50, Infinity ]) + }, + + styles () { + return { + [this.side]: { + [this.prop]: this.__getCSSValue(this.value) + } + } + }, + + separatorDirectives () { + if (this.disable !== true) { + return [{ + name: 'touch-pan', + value: this.__pan, + modifiers: { + [ this.horizontal === true ? 'vertical' : 'horizontal' ]: true, + prevent: true, + stop: true, + mouse: true, + mouseAllDir: true + } + }] + } + }, + + separatorAttrs () { + const attrs = this.disable === true + ? { tabindex: -1, 'aria-disabled': 'true' } + : { tabindex: this.tabindex || 0 }; + const ariaValue = this.__getAriaValue(this.value); + + return { + role: 'separator', + 'aria-orientation': this.horizontal === true ? 'horizontal' : 'vertical', + 'aria-controls': this.targetUid, + 'aria-valuemin': this.computedLimits[0], + 'aria-valuemax': this.computedLimits[1], + 'aria-valuenow': ariaValue.now, + 'aria-valuetext': ariaValue.text, + ...attrs + } + }, + + separatorEvents () { + return this.disable === true + ? void 0 + : { keydown: this.__panKeydown } + } + }, + + methods: { + __panStart () { + const size = this.$el.getBoundingClientRect()[this.prop]; + + this.__dir = this.horizontal === true ? 'up' : 'left'; + this.__maxValue = this.unit === '%' ? 100 : size; + this.__value = Math.min(this.__maxValue, this.computedLimits[1], Math.max(this.computedLimits[0], this.value)); + this.__multiplier = (this.reverse !== true ? 1 : -1) * + (this.horizontal === true ? 1 : (this.$q.lang.rtl === true ? -1 : 1)) * + (this.unit === '%' ? (size === 0 ? 0 : 100 / size) : 1); + + this.$el.classList.add('q-splitter--active'); + }, + + __panProgress (val) { + this.__normalized = Math.min(this.__maxValue, this.computedLimits[1], Math.max(this.computedLimits[0], val)); + + this.$refs[this.side].style[this.prop] = this.__getCSSValue(this.__normalized); + + const ariaValue = this.__getAriaValue(this.__normalized); + this.$refs.separator.setAttribute('aria-valuenow', ariaValue.now); + this.$refs.separator.setAttribute('aria-valuetext', ariaValue.text); + + if (this.emitImmediately === true && this.value !== this.__normalized) { + this.$emit('input', this.__normalized); + } + }, + + __panEnd () { + this.__panCleanup !== void 0 && this.__panCleanup(); + + if (this.__normalized !== this.value) { + this.$emit('input', this.__normalized); + } + + this.$el.classList.remove('q-splitter--active'); + }, + + __pan (evt) { + if (evt.isFinal === true) { + this.__panEnd(); + return + } + + if (evt.isFirst === true) { + this.__panStart(); + return + } + + const val = this.__value + + this.__multiplier * + (evt.direction === this.__dir ? -1 : 1) * + evt.distance[this.horizontal === true ? 'y' : 'x']; + + this.__panProgress(val); + }, + + __panKeydown (evt) { + this.qListeners.keydown !== void 0 && this.$emit('keydown', evt); + + if ( + this.disable === true || + evt.defaultPrevented === true || + (this.horizontal !== true && [ 37, 39 ].indexOf(evt.keyCode) === -1) || + (this.horizontal === true && [ 38, 40 ].indexOf(evt.keyCode) === -1) + ) { + return + } + + stopAndPrevent(evt); + + if (this.__panCleanup === void 0) { + document.addEventListener('keyup', this.__panEnd); + document.addEventListener('focusout', this.__panEnd); + + this.__panCleanup = () => { + this.__panCleanup = void 0; + document.removeEventListener('keyup', this.__panEnd); + document.removeEventListener('focusout', this.__panEnd); + + this.__panEnd(); + }; + + this.__panStart(); + this.__normalized = this.__value; + } + + const direction = keyDirections[evt.keyCode]; + + const val = this.__normalized + + this.__multiplier * + (direction === this.__dir ? -1 : 1) * + (evt.shiftKey === true ? 1 : 10); + + this.__panProgress(val); + }, + + __normalize (val, limits) { + if (val < limits[0]) { + this.$emit('input', limits[0]); + } + else if (val > limits[1]) { + this.$emit('input', limits[1]); + } + }, + + __getAriaValue (value) { + const now = this.unit === '%' ? value : Math.round(value); + + return { + now, + text: (Math.round(now * 100) / 100) + this.unit + } + }, + + __getCSSValue (value) { + return (this.unit === '%' ? value : Math.round(value)) + this.unit + } + }, + + created () { + this.targetUid = `sp_${uid$3()}`; + }, + + beforeDestroy () { + this.__panCleanup !== void 0 && this.__panCleanup(); + }, + + render (h) { + const attrs = { + [this.side]: { id: this.targetUid } + }; + + const child = [ + h('div', { + key: 'before', + ref: 'before', + staticClass: 'q-splitter__panel q-splitter__before' + (this.reverse === true ? ' col' : ''), + style: this.styles.before, + class: this.beforeClass, + attrs: attrs.before, + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'before')), + + h('div', { + staticClass: 'q-splitter__separator', + ref: 'separator', + style: this.separatorStyle, + class: this.separatorClass, + attrs: this.separatorAttrs, + on: this.separatorEvents + }, [ + h('div', { + staticClass: 'absolute-full q-splitter__separator-area', + directives: this.separatorDirectives + }, slot(this, 'separator')) + ]), + + h('div', { + key: 'after', + ref: 'after', + staticClass: 'q-splitter__panel q-splitter__after' + (this.reverse === true ? '' : ' col'), + style: this.styles.after, + class: this.afterClass, + attrs: attrs.after, + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'after')) + ]; + + return h('div', { + staticClass: 'q-splitter no-wrap', + class: this.classes, + on: { ...this.qListeners } + }, mergeSlot(child, this, 'default')) + } + }); + + var StepHeader = Vue__default["default"].extend({ + name: 'StepHeader', + + mixins: [ AttrsMixin ], + + directives: { + Ripple + }, + + props: { + stepper: {}, + step: {} + }, + + computed: { + isDisable () { + const opt = this.step.disable; + return opt === true || opt === '' + }, + + isActive () { + return this.isDisable !== true && this.stepper.value === this.step.name + }, + + isError () { + const opt = this.step.error; + return opt === true || opt === '' + }, + + isDone () { + const opt = this.step.done; + return opt === true || opt === '' + }, + + headerNav () { + const + opt = this.step.headerNav, + nav = opt === true || opt === '' || opt === void 0; + + return this.isDisable === false && + this.stepper.headerNav && + nav + }, + + hasPrefix () { + return this.step.prefix && this.icon === void 0 + }, + + icon () { + let icon; + + if (this.isActive === true) { + icon = this.__getProp('activeIcon', this.$q.iconSet.stepper.active); + } + else if (this.isError === true) { + icon = this.__getProp('errorIcon', this.$q.iconSet.stepper.error); + } + else if (this.isDone === true) { + icon = this.__getProp('doneIcon', this.$q.iconSet.stepper.done); + } + else { + icon = this.step.icon || this.stepper.inactiveIcon; + } + + return icon === 'none' ? void 0 : icon + }, + + color () { + if (this.isError === true) { + return this.__getProp('errorColor') + } + + if (this.isActive === true) { + return this.__getProp('activeColor') + } + + return this.isDisable === false && this.isDone === true + ? this.__getProp('doneColor') + : this.step.color || this.stepper.inactiveColor + }, + + classes () { + return 'q-stepper__tab col-grow flex items-center no-wrap relative-position' + + (this.color !== void 0 ? ` text-${this.color}` : '') + + (this.isError === true + ? ' q-stepper__tab--error q-stepper__tab--error-with-' + (this.hasPrefix === true ? 'prefix' : 'icon') + : '') + + (this.isActive === true ? ' q-stepper__tab--active' : '') + + (this.isDone === true ? ' q-stepper__tab--done' : '') + + (this.headerNav === true ? ' q-stepper__tab--navigation q-focusable q-hoverable' : '') + + (this.isDisable === true ? ' q-stepper__tab--disabled' : '') + } + }, + + methods: { + activate () { + this.$refs.blurTarget !== void 0 && this.$refs.blurTarget.focus(); + this.isActive === false && this.stepper.goTo(this.step.name); + }, + + keyup (e) { + if (e.keyCode === 13 && this.isActive === false) { + this.stepper.goTo(this.step.name); + } + }, + + __getProp (prop, fallback) { + return this.step[prop] || this.stepper[prop] || fallback + } + }, + + render (h) { + const data = { class: this.classes }; + + if (this.stepper.headerNav === true) { + data.directives = [{ + name: 'ripple', + value: this.headerNav + }]; + } + + this.headerNav === true && Object.assign(data, { + key: 'headnavon', + on: cache(this, 'headnavon', { + click: this.activate, + keyup: this.keyup + }), + attrs: this.isDisable === true + ? { tabindex: -1, 'aria-disabled': 'true' } + : { tabindex: this.qAttrs.tabindex || 0 } + }); + + const child = [ + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: 'blurTarget' }), + + h('div', { staticClass: 'q-stepper__dot row flex-center q-stepper__line relative-position' }, [ + h('span', { staticClass: 'row flex-center' }, [ + this.hasPrefix === true + ? this.step.prefix + : h(QIcon, { props: { name: this.icon } }) + ]) + ]) + ]; + + if (this.step.title !== void 0 && this.step.title !== null) { + const content = [ + h('div', { staticClass: 'q-stepper__title' }, [ this.step.title ]) + ]; + + if (this.step.caption !== void 0 && this.step.caption !== null) { + content.push( + h('div', { staticClass: 'q-stepper__caption' }, [ this.step.caption ]) + ); + } + + child.push( + h('div', { + staticClass: 'q-stepper__label q-stepper__line relative-position' + }, content) + ); + } + + return h('div', data, child) + } + }); + + const attrs$1 = { role: 'tabpanel' }; + + const StepWrapper = Vue__default["default"].extend({ + name: 'QStepWrapper', + + render (h) { + return h('div', { + staticClass: 'q-stepper__step-content' + }, [ + h('div', { + staticClass: 'q-stepper__step-inner' + }, slot(this, 'default')) + ]) + } + }); + + var QStep = Vue__default["default"].extend({ + name: 'QStep', + + inject: { + stepper: { + default () { + console.error('QStep needs to be child of QStepper'); + } + } + }, + + mixins: [ PanelChildMixin ], + + props: { + icon: String, + color: String, + title: { + type: String, + required: true + }, + caption: String, + prefix: [ String, Number ], + + doneIcon: String, + doneColor: String, + activeIcon: String, + activeColor: String, + errorIcon: String, + errorColor: String, + + headerNav: { + type: Boolean, + default: true + }, + done: Boolean, + error: Boolean + }, + + computed: { + isActive () { + return this.stepper.value === this.name + }, + + onEvents () { + return this.isActive !== true || + this.stepper.vertical !== true || + (this.$q.platform.is.ios !== true && this.$q.platform.is.chrome === true) + ? { ...this.qListeners } + : { ...this.qListeners, scroll: this.__keepScroll } + } + }, + + methods: { + __keepScroll (ev) { + const { target } = ev; + if (target.scrollTop > 0) { + target.scrollTop = 0; + } + this.qListeners.scroll !== void 0 && this.$emit('scroll', ev); + } + }, + + render (h) { + const vertical = this.stepper.vertical; + const content = vertical === true && this.stepper.keepAlive === true + ? h( + 'keep-alive', + this.isActive === true + ? [ h(StepWrapper, { key: this.name }, slot(this, 'default')) ] + : void 0 + ) + : ( + vertical !== true || this.isActive === true + ? StepWrapper.options.render.call(this, h) + : void 0 + ); + + return h( + 'div', + { + staticClass: 'q-stepper__step', + attrs: attrs$1, + on: this.onEvents + }, + vertical === true + ? [ + h(StepHeader, { + props: { + stepper: this.stepper, + step: this + } + }), + + this.stepper.animated === true + ? h(QSlideTransition, [ content ]) + : content + ] + : [ content ] + ) + } + }); + + var QStepper = Vue__default["default"].extend({ + name: 'QStepper', + + provide () { + return { + stepper: this + } + }, + + mixins: [ DarkMixin, PanelParentMixin ], + + props: { + flat: Boolean, + bordered: Boolean, + alternativeLabels: Boolean, + headerNav: Boolean, + contracted: Boolean, + headerClass: String, + + inactiveColor: String, + inactiveIcon: String, + doneIcon: String, + doneColor: String, + activeIcon: String, + activeColor: String, + errorIcon: String, + errorColor: String + }, + + computed: { + classes () { + const isDark = this.dark === true || (this.dark === null && this.$q.dark.isActive !== false); + + return `q-stepper q-stepper--${this.vertical === true ? 'vertical' : 'horizontal'}` + + (this.flat === true || isDark === true ? ' q-stepper--flat no-shadow' : '') + + (this.bordered === true || (isDark === true && this.flat === false) ? ' q-stepper--bordered' : '') + + ` q-stepper--${this.darkSuffix} q-${this.darkSuffix}` + }, + + headerClasses () { + return 'q-stepper__header row items-stretch justify-between' + + ` q-stepper__header--${this.alternativeLabels === true ? 'alternative' : 'standard'}-labels` + + (this.flat === false || this.bordered === true ? ' q-stepper__header--border' : '') + + (this.contracted === true ? ' q-stepper__header--contracted' : '') + + (this.headerClass !== void 0 ? ` ${this.headerClass}` : '') + } + }, + + methods: { + __getContent (h) { + const top = slot(this, 'message', []); + + if (this.vertical === true) { + this.__isValidPanelName(this.value) && this.__updatePanelIndex(); + + const content = h('div', { + key: 'stop', + staticClass: 'q-stepper__content', + // stop propagation of content emitted @input + // which would tamper with Panel's model + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'default')); + + return top === void 0 + ? [ content ] + : top.concat(content) + } + + return [ + h('div', { class: this.headerClasses }, this.panels.map(panel => { + const step = panel.componentOptions.propsData; + + return h(StepHeader, { + key: step.name, + props: { + stepper: this, + step + } + }) + })) + ].concat( + top, + + h('div', { + staticClass: 'q-stepper__content q-panel-parent', + directives: this.panelDirectives + }, this.__getPanelContent(h)) + ) + }, + + __renderPanels (h) { + return h('div', { + class: this.classes, + on: { ...this.qListeners } + }, mergeSlot(this.__getContent(h), this, 'navigation')) + } + } + }); + + var QStepperNavigation = Vue__default["default"].extend({ + name: 'QStepperNavigation', + + mixins: [ ListenersMixin ], + + render (h) { + return h('div', { + staticClass: 'q-stepper__nav', + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var Top = { + computed: { + marginalsScope () { + return { + pagination: this.computedPagination, + pagesNumber: this.pagesNumber, + isFirstPage: this.isFirstPage, + isLastPage: this.isLastPage, + firstPage: this.firstPage, + prevPage: this.prevPage, + nextPage: this.nextPage, + lastPage: this.lastPage, + + inFullscreen: this.inFullscreen, + toggleFullscreen: this.toggleFullscreen + } + } + }, + + methods: { + __getTopDiv (h) { + const + top = this.$scopedSlots.top, + topLeft = this.$scopedSlots['top-left'], + topRight = this.$scopedSlots['top-right'], + topSelection = this.$scopedSlots['top-selection'], + hasSelection = this.hasSelectionMode === true && + topSelection !== void 0 && + this.rowsSelectedNumber > 0, + staticClass = 'q-table__top relative-position row items-center'; + + if (top !== void 0) { + return h('div', { staticClass }, [ top(this.marginalsScope) ]) + } + + let child; + + if (hasSelection === true) { + child = topSelection(this.marginalsScope).slice(); + } + else { + child = []; + + if (topLeft !== void 0) { + child.push( + h('div', { staticClass: 'q-table-control' }, [ + topLeft(this.marginalsScope) + ]) + ); + } + else if (this.title) { + child.push( + h('div', { staticClass: 'q-table__control' }, [ + h('div', { staticClass: 'q-table__title', class: this.titleClass }, this.title) + ]) + ); + } + } + + if (topRight !== void 0) { + child.push(h('div', { staticClass: 'q-table__separator col' })); + child.push( + h('div', { staticClass: 'q-table__control' }, [ + topRight(this.marginalsScope) + ]) + ); + } + + if (child.length === 0) { + return + } + + return h('div', { staticClass }, child) + } + } + }; + + var QTh = Vue__default["default"].extend({ + name: 'QTh', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + autoWidth: Boolean + }, + + render (h) { + const on = { ...this.qListeners }; + + if (this.props === void 0) { + return h('th', { + on, + class: this.autoWidth === true ? 'q-table--col-auto-width' : null + }, slot(this, 'default')) + } + + let col, child; + const name = this.$vnode.key; + + if (name) { + col = this.props.colsMap[name]; + if (col === void 0) { return } + } + else { + col = this.props.col; + } + + if (col.sortable === true) { + const action = col.align === 'right' + ? 'unshift' + : 'push'; + + child = uniqueSlot(this, 'default', []); + child[action]( + h(QIcon, { + props: { name: this.$q.iconSet.table.arrowUp }, + staticClass: col.__iconClass + }) + ); + } + else { + child = slot(this, 'default'); + } + + const evt = col.sortable === true + ? { + click: evt => { + this.props.sort(col); + this.$emit('click', evt); + } + } + : {}; + + return h('th', { + on: { ...on, ...evt }, + style: col.headerStyle, + class: col.__thClass + + (this.autoWidth === true ? ' q-table--col-auto-width' : '') + }, child) + } + }); + + var TableHeader = { + computed: { + headerSelectedValue () { + return this.someRowsSelected === true + ? null + : this.allRowsSelected + } + }, + + methods: { + __getTHead (h) { + const child = this.__getTHeadTR(h); + + if (this.loading === true && this.$scopedSlots.loading === void 0) { + child.push( + h('tr', { staticClass: 'q-table__progress' }, [ + h('th', { + staticClass: 'relative-position', + attrs: { colspan: this.computedColspan } + }, this.__getProgress(h)) + ]) + ); + } + + return h('thead', child) + }, + + __getTHeadTR (h) { + const + header = this.$scopedSlots.header, + headerCell = this.$scopedSlots['header-cell']; + + if (header !== void 0) { + return header( + this.__getHeaderScope({ header: true }) + ).slice() + } + + const child = this.computedCols.map(col => { + const + headerCellCol = this.$scopedSlots[`header-cell-${col.name}`], + slot = headerCellCol !== void 0 ? headerCellCol : headerCell, + props = this.__getHeaderScope({ col }); + + return slot !== void 0 + ? slot(props) + : h(QTh, { + key: col.name, + props: { props } + }, col.label) + }); + + if (this.singleSelection === true && this.grid !== true) { + child.unshift(h('th', { staticClass: 'q-table--col-auto-width' }, [' '])); + } + else if (this.multipleSelection === true) { + const slot = this.$scopedSlots['header-selection']; + const content = slot !== void 0 + ? slot(this.__getHeaderScope({})) + : [ + h(QCheckbox, { + key: 'inp', + props: { + color: this.color, + value: this.headerSelectedValue, + dark: this.dark, + dense: this.dense + }, + on: cache(this, 'inp', { + input: this.__onMultipleSelectionSet + }) + }) + ]; + + child.unshift( + h('th', { staticClass: 'q-table--col-auto-width' }, content) + ); + } + + return [ + h('tr', { + style: this.tableHeaderStyle, + class: this.tableHeaderClass + }, child) + ] + }, + + __getHeaderScope (data) { + Object.assign(data, { + cols: this.computedCols, + sort: this.sort, + colsMap: this.computedColsMap, + color: this.color, + dark: this.dark, + dense: this.dense + }); + + if (this.multipleSelection === true) { + injectProp( + data, + 'selected', + () => this.headerSelectedValue, + this.__onMultipleSelectionSet + ); + + data.partialSelected = this.someRowsSelected; + data.multipleSelect = true; + } + + return data + }, + + __onMultipleSelectionSet (val) { + if (this.someRowsSelected === true) { + val = false; + } + this.__updateSelection( + this.computedRows.map(this.getRowKey), + this.computedRows, + val + ); + } + } + }; + + var TableBody = { + methods: { + __getTBodyTR (h, row, bodySlot, pageIndex) { + const + key = this.getRowKey(row), + selected = this.isRowSelected(key); + + if (bodySlot !== void 0) { + return bodySlot( + this.__getBodyScope({ + key, + row, + pageIndex, + __trClass: selected ? 'selected' : '' + }) + ) + } + + const + bodyCell = this.$scopedSlots['body-cell'], + child = this.computedCols.map(col => { + const + bodyCellCol = this.$scopedSlots[`body-cell-${col.name}`], + slot = bodyCellCol !== void 0 ? bodyCellCol : bodyCell; + + return slot !== void 0 + ? slot(this.__getBodyCellScope({ key, row, pageIndex, col })) + : h('td', { + class: col.__tdClass(row), + style: col.__tdStyle(row) + }, this.getCellValue(col, row)) + }); + + if (this.hasSelectionMode === true) { + const slot = this.$scopedSlots['body-selection']; + const content = slot !== void 0 + ? slot(this.__getBodySelectionScope({ key, row, pageIndex })) + : [ + h(QCheckbox, { + props: { + value: selected, + color: this.color, + dark: this.dark, + dense: this.dense + }, + on: { + input: (adding, evt) => { + this.__updateSelection([ key ], [ row ], adding, evt); + } + } + }) + ]; + + child.unshift( + h('td', { staticClass: 'q-table--col-auto-width' }, content) + ); + } + + const data = { key, class: { selected }, on: {} }; + + if (this.qListeners['row-click'] !== void 0) { + data.class['cursor-pointer'] = true; + data.on.click = evt => { + this.$emit('row-click', evt, row, pageIndex); + }; + } + + if (this.qListeners['row-dblclick'] !== void 0) { + data.class['cursor-pointer'] = true; + data.on.dblclick = evt => { + this.$emit('row-dblclick', evt, row, pageIndex); + }; + } + + if (this.qListeners['row-contextmenu'] !== void 0) { + data.class['cursor-pointer'] = true; + data.on.contextmenu = evt => { + this.$emit('row-contextmenu', evt, row, pageIndex); + }; + } + + return h('tr', data, child) + }, + + __getTBody (h) { + const + body = this.$scopedSlots.body, + topRow = this.$scopedSlots['top-row'], + bottomRow = this.$scopedSlots['bottom-row']; + + let child = this.computedRows.map( + (row, pageIndex) => this.__getTBodyTR(h, row, body, pageIndex) + ); + + if (topRow !== void 0) { + child = topRow({ cols: this.computedCols }).concat(child); + } + if (bottomRow !== void 0) { + child = child.concat(bottomRow({ cols: this.computedCols })); + } + + return h('tbody', child) + }, + + __getVirtualTBodyTR (h) { + const body = this.$scopedSlots.body; + return props => this.__getTBodyTR(h, props.item, body, props.index) + }, + + __getBodyScope (data) { + this.__injectBodyCommonScope(data); + + data.cols = data.cols.map(col => injectProp( + { ...col }, + 'value', + () => this.getCellValue(col, data.row) + )); + + return data + }, + + __getBodyCellScope (data) { + this.__injectBodyCommonScope(data); + return injectProp(data, 'value', () => this.getCellValue(data.col, data.row)) + }, + + __getBodySelectionScope (data) { + this.__injectBodyCommonScope(data); + return data + }, + + __injectBodyCommonScope (data) { + Object.assign(data, { + cols: this.computedCols, + colsMap: this.computedColsMap, + sort: this.sort, + rowIndex: this.firstRowIndex + data.pageIndex, + color: this.color, + dark: this.dark, + dense: this.dense + }); + + this.hasSelectionMode === true && injectProp( + data, + 'selected', + () => this.isRowSelected(data.key), + (adding, evt) => { + this.__updateSelection([ data.key ], [ data.row ], adding, evt); + } + ); + + injectProp( + data, + 'expand', + () => this.isRowExpanded(data.key), + adding => { this.__updateExpanded(data.key, adding); } + ); + }, + + getCellValue (col, row) { + const val = typeof col.field === 'function' ? col.field(row) : row[col.field]; + return col.format !== void 0 ? col.format(val, row) : val + } + } + }; + + const staticClass = 'q-table__bottom row items-center'; + + var Bottom = { + props: { + hideBottom: Boolean, + hideSelectedBanner: Boolean, + hideNoData: Boolean, + hidePagination: Boolean + }, + + computed: { + navIcon () { + const ico = [ + this.iconFirstPage || this.$q.iconSet.table.firstPage, + this.iconPrevPage || this.$q.iconSet.table.prevPage, + this.iconNextPage || this.$q.iconSet.table.nextPage, + this.iconLastPage || this.$q.iconSet.table.lastPage + ]; + return this.$q.lang.rtl === true ? ico.reverse() : ico + } + }, + + methods: { + __getBottomDiv (h) { + if (this.hideBottom === true) { + return + } + + if (this.nothingToDisplay === true) { + if (this.hideNoData === true) { + return + } + + const message = this.loading === true + ? this.loadingLabel || this.$q.lang.table.loading + : (this.filter ? this.noResultsLabel || this.$q.lang.table.noResults : this.noDataLabel || this.$q.lang.table.noData); + + const noData = this.$scopedSlots['no-data']; + const children = noData !== void 0 + ? [ noData({ message, icon: this.$q.iconSet.table.warning, filter: this.filter }) ] + : [ + h(QIcon, { + staticClass: 'q-table__bottom-nodata-icon', + props: { name: this.$q.iconSet.table.warning } + }), + message + ]; + + return h('div', { + staticClass: staticClass + ' q-table__bottom--nodata' + }, children) + } + + const bottom = this.$scopedSlots.bottom; + + if (bottom !== void 0) { + return h('div', { staticClass }, [ bottom(this.marginalsScope) ]) + } + + const child = this.hideSelectedBanner !== true && this.hasSelectionMode === true && this.rowsSelectedNumber > 0 + ? [ + h('div', { staticClass: 'q-table__control' }, [ + h('div', [ + (this.selectedRowsLabel || this.$q.lang.table.selectedRecords)(this.rowsSelectedNumber) + ]) + ]) + ] + : []; + + if (this.hidePagination !== true) { + return h('div', { + staticClass: staticClass + ' justify-end' + }, this.__getPaginationDiv(h, child)) + } + + if (child.length > 0) { + return h('div', { staticClass }, child) + } + }, + + __getPaginationDiv (h, child) { + let control; + const + { rowsPerPage } = this.computedPagination, + paginationLabel = this.paginationLabel || this.$q.lang.table.pagination, + paginationSlot = this.$scopedSlots.pagination, + hasOpts = this.rowsPerPageOptions.length > 1; + + child.push( + h('div', { staticClass: 'q-table__separator col' }) + ); + + if (hasOpts === true) { + child.push( + h('div', { staticClass: 'q-table__control' }, [ + h('span', { staticClass: 'q-table__bottom-item' }, [ + this.rowsPerPageLabel || this.$q.lang.table.recordsPerPage + ]), + h(QSelect, { + key: 'pgSize', + staticClass: 'q-table__select inline q-table__bottom-item', + props: { + color: this.color, + value: rowsPerPage, + options: this.computedRowsPerPageOptions, + displayValue: rowsPerPage === 0 + ? this.$q.lang.table.allRows + : rowsPerPage, + dark: this.dark, + borderless: true, + dense: true, + optionsDense: true, + optionsCover: true + }, + on: cache(this, 'pgSize', { + input: pag => { + this.setPagination({ + page: 1, + rowsPerPage: pag.value + }); + } + }) + }) + ]) + ); + } + + if (paginationSlot !== void 0) { + control = paginationSlot(this.marginalsScope); + } + else { + control = [ + h('span', rowsPerPage !== 0 ? { staticClass: 'q-table__bottom-item' } : {}, [ + rowsPerPage + ? paginationLabel(this.firstRowIndex + 1, Math.min(this.lastRowIndex, this.computedRowsNumber), this.computedRowsNumber) + : paginationLabel(1, this.filteredSortedRowsNumber, this.computedRowsNumber) + ]) + ]; + + if (rowsPerPage !== 0 && this.pagesNumber > 1) { + const btnProps = { + color: this.color, + round: true, + dense: true, + flat: true + }; + + if (this.dense === true) { + btnProps.size = 'sm'; + } + + this.pagesNumber > 2 && control.push( + h(QBtn, { + key: 'pgFirst', + props: { + ...btnProps, + icon: this.navIcon[0], + disable: this.isFirstPage + }, + on: cache(this, 'pgFirst', { click: this.firstPage }) + }) + ); + + control.push( + h(QBtn, { + key: 'pgPrev', + props: { + ...btnProps, + icon: this.navIcon[1], + disable: this.isFirstPage + }, + on: cache(this, 'pgPrev', { click: this.prevPage }) + }), + + h(QBtn, { + key: 'pgNext', + props: { + ...btnProps, + icon: this.navIcon[2], + disable: this.isLastPage + }, + on: cache(this, 'pgNext', { click: this.nextPage }) + }) + ); + + this.pagesNumber > 2 && control.push( + h(QBtn, { + key: 'pgLast', + props: { + ...btnProps, + icon: this.navIcon[3], + disable: this.isLastPage + }, + on: cache(this, 'pgLast', { click: this.lastPage }) + }) + ); + } + } + + child.push( + h('div', { staticClass: 'q-table__control' }, control) + ); + + return child + } + } + }; + + var TableGrid = { + methods: { + __getGridHeader (h) { + const child = this.gridHeader === true + ? [ + h('table', { staticClass: 'q-table' }, [ + this.__getTHead(h) + ]) + ] + : ( + this.loading === true && this.$scopedSlots.loading === void 0 + ? this.__getProgress(h) + : void 0 + ); + + return h('div', { staticClass: 'q-table__middle' }, child) + }, + + __getGridBody (h) { + const item = this.$scopedSlots.item !== void 0 + ? this.$scopedSlots.item + : scope => { + const child = scope.cols.map( + col => h('div', { staticClass: 'q-table__grid-item-row' }, [ + h('div', { staticClass: 'q-table__grid-item-title' }, [ col.label ]), + h('div', { staticClass: 'q-table__grid-item-value' }, [ col.value ]) + ]) + ); + + if (this.hasSelectionMode === true) { + const slot = this.$scopedSlots['body-selection']; + const content = slot !== void 0 + ? slot(scope) + : [ + h(QCheckbox, { + props: { + value: scope.selected, + color: this.color, + dark: this.dark, + dense: this.dense + }, + on: { + input: (adding, evt) => { + this.__updateSelection([ scope.key ], [ scope.row ], adding, evt); + } + } + }) + ]; + + child.unshift( + h('div', { staticClass: 'q-table__grid-item-row' }, content), + h(QSeparator, { props: { dark: this.dark } }) + ); + } + + const data = { + staticClass: 'q-table__grid-item-card' + this.cardDefaultClass, + class: this.cardClass, + style: this.cardStyle, + on: {} + }; + + if (this.qListeners['row-click'] !== void 0 || this.qListeners['row-dblclick'] !== void 0) { + data.staticClass += ' cursor-pointer'; + } + + if (this.qListeners['row-click'] !== void 0) { + data.on.click = evt => { + this.$emit('row-click', evt, scope.row, scope.pageIndex); + }; + } + + if (this.qListeners['row-dblclick'] !== void 0) { + data.on.dblclick = evt => { + this.$emit('row-dblclick', evt, scope.row, scope.pageIndex); + }; + } + + return h('div', { + staticClass: 'q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3', + class: scope.selected === true ? 'q-table__grid-item--selected' : '' + }, [ + h('div', data, child) + ]) + }; + + return h('div', { + staticClass: 'q-table__grid-content row', + class: this.cardContainerClass, + style: this.cardContainerStyle + }, this.computedRows.map((row, pageIndex) => { + return item(this.__getBodyScope({ + key: this.getRowKey(row), + row, + pageIndex + })) + })) + } + } + }; + + function getTableMiddle (h, conf, content) { + return h('div', { + ...conf, + staticClass: 'q-table__middle' + (conf.staticClass !== void 0 ? ' ' + conf.staticClass : '') + }, [ + h('table', { staticClass: 'q-table' }, content) + ]) + } + + const comps = { + list: QList, + table: QMarkupTable + }; + + var QVirtualScroll = Vue__default["default"].extend({ + name: 'QVirtualScroll', + + mixins: [ AttrsMixin, ListenersMixin, VirtualScroll ], + + props: { + type: { + type: String, + default: 'list', + validator: v => ['list', 'table', '__qtable'].includes(v) + }, + + items: { + type: Array, + default: () => [] + }, + + itemsFn: Function, + itemsSize: Number, + + scrollTarget: { + default: void 0 + } + }, + + computed: { + virtualScrollLength () { + return this.itemsSize >= 0 && this.itemsFn !== void 0 + ? parseInt(this.itemsSize, 10) + : (Array.isArray(this.items) ? this.items.length : 0) + }, + + virtualScrollScope () { + if (this.virtualScrollLength === 0) { + return [] + } + + const mapFn = (item, i) => ({ + index: this.virtualScrollSliceRange.from + i, + item + }); + + if (this.itemsFn === void 0) { + return this.items.slice(this.virtualScrollSliceRange.from, this.virtualScrollSliceRange.to).map(mapFn) + } + + return this.itemsFn(this.virtualScrollSliceRange.from, this.virtualScrollSliceRange.to - this.virtualScrollSliceRange.from).map(mapFn) + }, + + classes () { + return 'q-virtual-scroll q-virtual-scroll' + (this.virtualScrollHorizontal === true ? '--horizontal' : '--vertical') + + (this.scrollTarget !== void 0 ? '' : ' scroll') + }, + + attrs () { + return this.scrollTarget !== void 0 ? void 0 : { tabindex: 0 } + } + }, + + watch: { + virtualScrollLength () { + this.__resetVirtualScroll(); + }, + + scrollTarget () { + this.__unconfigureScrollTarget(); + this.__configureScrollTarget(); + } + }, + + methods: { + __getVirtualScrollEl () { + return this.$el + }, + + __getVirtualScrollTarget () { + return this.__scrollTarget + }, + + __configureScrollTarget () { + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget); + this.__scrollTarget.addEventListener('scroll', this.__onVirtualScrollEvt, listenOpts.passive); + }, + + __unconfigureScrollTarget () { + if (this.__scrollTarget !== void 0) { + this.__scrollTarget.removeEventListener('scroll', this.__onVirtualScrollEvt, listenOpts.passive); + this.__scrollTarget = void 0; + } + } + }, + + beforeMount () { + this.__resetVirtualScroll(); + }, + + mounted () { + this.__configureScrollTarget(); + }, + + activated () { + this.__configureScrollTarget(); + }, + + deactivated () { + this.__unconfigureScrollTarget(); + }, + + beforeDestroy () { + this.__unconfigureScrollTarget(); + }, + + render (h) { + if (this.$scopedSlots.default === void 0) { + console.error('QVirtualScroll: default scoped slot is required for rendering', this); + return + } + + let child = this.__padVirtualScroll( + h, + this.type === 'list' ? 'div' : 'tbody', + this.virtualScrollScope.map(this.$scopedSlots.default) + ); + + if (this.$scopedSlots.before !== void 0) { + child = this.$scopedSlots.before().concat(child); + } + + child = mergeSlot(child, this, 'after'); + + return this.type === '__qtable' + ? getTableMiddle(h, { staticClass: this.classes }, child) + : h(comps[this.type], { + class: this.classes, + attrs: this.attrs, + props: this.qAttrs, + on: { ...this.qListeners } + }, child) + } + }); + + function sortDate (a, b) { + return (new Date(a)) - (new Date(b)) + } + + var Sort = { + props: { + sortMethod: { + type: Function, + default (data, sortBy, descending) { + const col = this.colList.find(def => def.name === sortBy); + if (col === void 0 || col.field === void 0) { + return data + } + + const + dir = descending === true ? -1 : 1, + val = typeof col.field === 'function' + ? v => col.field(v) + : v => v[col.field]; + + return data.sort((a, b) => { + let + A = val(a), + B = val(b); + + if (A === null || A === void 0) { + return -1 * dir + } + if (B === null || B === void 0) { + return 1 * dir + } + if (col.sort !== void 0) { + return col.sort(A, B, a, b) * dir + } + if (isNumber(A) === true && isNumber(B) === true) { + return (A - B) * dir + } + if (isDate(A) === true && isDate(B) === true) { + return sortDate(A, B) * dir + } + if (typeof A === 'boolean' && typeof B === 'boolean') { + return (A - B) * dir + } + + [A, B] = [A, B].map(s => (s + '').toLocaleString().toLowerCase()); + + return A < B + ? -1 * dir + : (A === B ? 0 : dir) + }) + } + }, + + columnSortOrder: { + type: String, + validator: v => v === 'ad' || v === 'da', + default: 'ad' + } + }, + + computed: { + columnToSort () { + const { sortBy } = this.computedPagination; + + if (sortBy) { + return this.colList.find(def => def.name === sortBy) || null + } + } + }, + + methods: { + sort (col /* String(col name) or Object(col definition) */) { + let sortOrder = this.columnSortOrder; + + if (isObject(col) === true) { + if (col.sortOrder) { + sortOrder = col.sortOrder; + } + + col = col.name; + } + else { + const def = this.colList.find(def => def.name === col); + if (def !== void 0 && def.sortOrder) { + sortOrder = def.sortOrder; + } + } + + let { sortBy, descending } = this.computedPagination; + + if (sortBy !== col) { + sortBy = col; + descending = sortOrder === 'da'; + } + else if (this.binaryStateSort === true) { + descending = !descending; + } + else if (descending === true) { + if (sortOrder === 'ad') { + sortBy = null; + } + else { + descending = false; + } + } + else { // ascending + if (sortOrder === 'ad') { + descending = true; + } + else { + sortBy = null; + } + } + + this.setPagination({ sortBy, descending, page: 1 }); + } + } + }; + + var Filter = { + props: { + filter: [String, Object], + filterMethod: { + type: Function, + default (rows, terms, cols = this.computedCols, cellValue = this.getCellValue) { + const lowerTerms = terms ? terms.toLowerCase() : ''; + return rows.filter( + row => cols.some(col => { + const val = cellValue(col, row) + ''; + const haystack = (val === 'undefined' || val === 'null') ? '' : val.toLowerCase(); + return haystack.indexOf(lowerTerms) !== -1 + }) + ) + } + } + }, + + watch: { + filter: { + handler () { + this.$nextTick(() => { + this.setPagination({ page: 1 }, true); + }); + }, + deep: true + } + } + }; + + function samePagination (oldPag, newPag) { + for (const prop in newPag) { + if (newPag[prop] !== oldPag[prop]) { + return false + } + } + return true + } + + function fixPagination (p) { + if (p.page < 1) { + p.page = 1; + } + if (p.rowsPerPage !== void 0 && p.rowsPerPage < 1) { + p.rowsPerPage = 0; + } + return p + } + + var Pagination = { + props: { + pagination: Object, + rowsPerPageOptions: { + type: Array, + default: () => [ 5, 7, 10, 15, 20, 25, 50, 0 ] + } + }, + + computed: { + computedPagination () { + const pag = this.qListeners['update:pagination'] !== void 0 + ? { ...this.innerPagination, ...this.pagination } + : this.innerPagination; + + return fixPagination(pag) + }, + + firstRowIndex () { + const { page, rowsPerPage } = this.computedPagination; + return (page - 1) * rowsPerPage + }, + + lastRowIndex () { + const { page, rowsPerPage } = this.computedPagination; + return page * rowsPerPage + }, + + isFirstPage () { + return this.computedPagination.page === 1 + }, + + pagesNumber () { + return this.computedPagination.rowsPerPage === 0 + ? 1 + : Math.max( + 1, + Math.ceil(this.computedRowsNumber / this.computedPagination.rowsPerPage) + ) + }, + + isLastPage () { + return this.lastRowIndex === 0 + ? true + : this.computedPagination.page >= this.pagesNumber + }, + + computedRowsPerPageOptions () { + const opts = this.rowsPerPageOptions.includes(this.innerPagination.rowsPerPage) + ? this.rowsPerPageOptions + : [ this.innerPagination.rowsPerPage ].concat(this.rowsPerPageOptions); + + return opts.map(count => ({ + label: count === 0 ? this.$q.lang.table.allRows : '' + count, + value: count + })) + } + }, + + watch: { + pagesNumber (lastPage, oldLastPage) { + if (lastPage === oldLastPage) { + return + } + + const currentPage = this.computedPagination.page; + if (lastPage && !currentPage) { + this.setPagination({ page: 1 }); + } + else if (lastPage < currentPage) { + this.setPagination({ page: lastPage }); + } + } + }, + + methods: { + __sendServerRequest (pagination) { + this.requestServerInteraction({ + pagination, + filter: this.filter + }); + }, + + setPagination (val, forceServerRequest) { + const newPagination = fixPagination({ + ...this.computedPagination, + ...val + }); + + if (samePagination(this.computedPagination, newPagination) === true) { + if (this.isServerSide === true && forceServerRequest === true) { + this.__sendServerRequest(newPagination); + } + return + } + + if (this.isServerSide === true) { + this.__sendServerRequest(newPagination); + return + } + + if (this.pagination !== void 0 && this.qListeners['update:pagination'] !== void 0) { + this.$emit('update:pagination', newPagination); + } + else { + this.innerPagination = newPagination; + } + }, + + firstPage () { + this.setPagination({ page: 1 }); + }, + + prevPage () { + const { page } = this.computedPagination; + if (page > 1) { + this.setPagination({ page: page - 1 }); + } + }, + + nextPage () { + const { page, rowsPerPage } = this.computedPagination; + if (this.lastRowIndex > 0 && page * rowsPerPage < this.computedRowsNumber) { + this.setPagination({ page: page + 1 }); + } + }, + + lastPage () { + this.setPagination({ page: this.pagesNumber }); + } + }, + + created () { + if (this.qListeners['update:pagination'] !== void 0) { + this.$emit('update:pagination', { ...this.computedPagination }); + } + } + }; + + var RowSelection = { + props: { + selection: { + type: String, + default: 'none', + validator: v => ['single', 'multiple', 'none'].includes(v) + }, + selected: { + type: Array, + default: () => [] + } + }, + + computed: { + selectedKeys () { + const keys = {}; + this.selected.map(this.getRowKey).forEach(key => { + keys[key] = true; + }); + return keys + }, + + hasSelectionMode () { + return this.selection !== 'none' + }, + + singleSelection () { + return this.selection === 'single' + }, + + multipleSelection () { + return this.selection === 'multiple' + }, + + allRowsSelected () { + return this.computedRows.length > 0 && this.computedRows.every( + row => this.selectedKeys[ this.getRowKey(row) ] === true + ) + }, + + someRowsSelected () { + return this.allRowsSelected !== true && + this.computedRows.some(row => this.selectedKeys[ this.getRowKey(row) ] === true) + }, + + rowsSelectedNumber () { + return this.selected.length + } + }, + + methods: { + isRowSelected (key) { + return this.selectedKeys[key] === true + }, + + clearSelection () { + this.$emit('update:selected', []); + }, + + __updateSelection (keys, rows, added, evt) { + this.$emit('selection', { rows, added, keys, evt }); + + const payload = this.singleSelection === true + ? (added === true ? rows : []) + : ( + added === true + ? this.selected.concat(rows) + : this.selected.filter( + row => keys.includes(this.getRowKey(row)) === false + ) + ); + + this.$emit('update:selected', payload); + } + } + }; + + function getVal (val) { + return Array.isArray(val) + ? val.slice() + : [] + } + + var RowExpand = { + props: { + expanded: Array // sync + }, + + data () { + return { + innerExpanded: getVal(this.expanded) + } + }, + + watch: { + expanded (val) { + this.innerExpanded = getVal(val); + } + }, + + methods: { + isRowExpanded (key) { + return this.innerExpanded.includes(key) + }, + + setExpanded (val) { + if (this.expanded !== void 0) { + this.$emit('update:expanded', val); + } + else { + this.innerExpanded = val; + } + }, + + __updateExpanded (key, add) { + const target = this.innerExpanded.slice(); + const index = target.indexOf(key); + + if (add === true) { + if (index === -1) { + target.push(key); + this.setExpanded(target); + } + } + else if (index !== -1) { + target.splice(index, 1); + this.setExpanded(target); + } + } + } + }; + + var ColumnSelection = { + props: { + visibleColumns: Array + }, + + computed: { + colList () { + if (this.columns !== void 0) { + return this.columns + } + + // we infer columns from first row + const row = this.data[0]; + + return row !== void 0 + ? Object.keys(row).map(name => ({ + name, + label: name.toUpperCase(), + field: name, + align: isNumber(row[name]) ? 'right' : 'left', + sortable: true + })) + : [] + }, + + computedCols () { + const { sortBy, descending } = this.computedPagination; + + const cols = this.visibleColumns !== void 0 + ? this.colList.filter(col => col.required === true || this.visibleColumns.includes(col.name) === true) + : this.colList; + + return cols.map(col => { + const align = col.align || 'right'; + const alignClass = `text-${align}`; + + return { + ...col, + align, + __iconClass: `q-table__sort-icon q-table__sort-icon--${align}`, + __thClass: alignClass + + (col.headerClasses !== void 0 ? ' ' + col.headerClasses : '') + + (col.sortable === true ? ' sortable' : '') + + (col.name === sortBy ? ` sorted ${descending === true ? 'sort-desc' : ''}` : ''), + + __tdStyle: col.style !== void 0 + ? ( + typeof col.style !== 'function' + ? () => col.style + : col.style + ) + : () => null, + + __tdClass: col.classes !== void 0 + ? ( + typeof col.classes !== 'function' + ? () => alignClass + ' ' + col.classes + : row => alignClass + ' ' + col.classes(row) + ) + : () => alignClass + } + }) + }, + + computedColsMap () { + const names = {}; + this.computedCols.forEach(col => { + names[col.name] = col; + }); + return names + }, + + computedColspan () { + return this.tableColspan !== void 0 + ? this.tableColspan + : this.computedCols.length + (this.hasSelectionMode === true ? 1 : 0) + } + } + }; + + const commonVirtPropsObj = {}; + commonVirtPropsList.forEach(p => { commonVirtPropsObj[p] = {}; }); + + var QTable = Vue__default["default"].extend({ + name: 'QTable', + + mixins: [ + DarkMixin, + ListenersMixin, + + FullscreenMixin, + Top, + TableHeader, + TableBody, + Bottom, + TableGrid, + Sort, + Filter, + Pagination, + RowSelection, + RowExpand, + ColumnSelection + ], + + props: { + data: { + type: Array, + default: () => [] + }, + rowKey: { + type: [ String, Function ], + default: 'id' + }, + + columns: Array, + loading: Boolean, + binaryStateSort: Boolean, + + iconFirstPage: String, + iconPrevPage: String, + iconNextPage: String, + iconLastPage: String, + + title: String, + + hideHeader: Boolean, + + grid: Boolean, + gridHeader: Boolean, + + dense: Boolean, + flat: Boolean, + bordered: Boolean, + square: Boolean, + separator: { + type: String, + default: 'horizontal', + validator: v => ['horizontal', 'vertical', 'cell', 'none'].includes(v) + }, + wrapCells: Boolean, + + virtualScroll: Boolean, + ...commonVirtPropsObj, + + noDataLabel: String, + noResultsLabel: String, + loadingLabel: String, + selectedRowsLabel: Function, + rowsPerPageLabel: String, + paginationLabel: Function, + + color: { + type: String, + default: 'grey-8' + }, + + titleClass: [String, Array, Object], + tableStyle: [String, Array, Object], + tableClass: [String, Array, Object], + tableHeaderStyle: [String, Array, Object], + tableHeaderClass: [String, Array, Object], + cardContainerClass: [String, Array, Object], + cardContainerStyle: [String, Array, Object], + cardStyle: [String, Array, Object], + cardClass: [String, Array, Object] + }, + + data () { + return { + innerPagination: Object.assign({ + sortBy: null, + descending: false, + page: 1, + rowsPerPage: this.rowsPerPageOptions.length > 0 + ? this.rowsPerPageOptions[0] + : 5 + }, this.pagination) + } + }, + + watch: { + needsReset () { + this.hasVirtScroll === true && this.$refs.virtScroll !== void 0 && this.$refs.virtScroll.reset(); + } + }, + + computed: { + getRowKey () { + return typeof this.rowKey === 'function' + ? this.rowKey + : row => row[this.rowKey] + }, + + hasVirtScroll () { + return this.grid !== true && this.virtualScroll === true + }, + + needsReset () { + return ['tableStyle', 'tableClass', 'tableHeaderStyle', 'tableHeaderClass', '__containerClass'] + .map(p => this[p]).join(';') + }, + + filteredSortedRows () { + let rows = this.data; + + if (this.isServerSide === true || rows.length === 0) { + return rows + } + + const { sortBy, descending } = this.computedPagination; + + if (this.filter) { + rows = this.filterMethod(rows, this.filter, this.computedCols, this.getCellValue); + } + + if (this.columnToSort !== void 0) { + rows = this.sortMethod( + this.data === rows ? rows.slice() : rows, + sortBy, + descending + ); + } + + return rows + }, + + filteredSortedRowsNumber () { + return this.filteredSortedRows.length + }, + + computedRows () { + let rows = this.filteredSortedRows; + + if (this.isServerSide === true) { + return rows + } + + const { rowsPerPage } = this.computedPagination; + + if (rowsPerPage !== 0) { + if (this.firstRowIndex === 0 && this.data !== rows) { + if (rows.length > this.lastRowIndex) { + rows = rows.slice(0, this.lastRowIndex); + } + } + else { + rows = rows.slice(this.firstRowIndex, this.lastRowIndex); + } + } + + return rows + }, + + computedRowsNumber () { + return this.isServerSide === true + ? this.computedPagination.rowsNumber || 0 + : this.filteredSortedRowsNumber + }, + + nothingToDisplay () { + return this.computedRows.length === 0 + }, + + isServerSide () { + return this.computedPagination.rowsNumber !== void 0 + }, + + cardDefaultClass () { + return ' q-table__card' + + ` q-table__card--${this.darkSuffix} q-${this.darkSuffix}` + + (this.square === true ? ' q-table--square' : '') + + (this.flat === true ? ' q-table--flat' : '') + + (this.bordered === true ? ' q-table--bordered' : '') + }, + + __containerClass () { + return `q-table__container q-table--${this.separator}-separator column no-wrap` + + (this.grid === true ? ' q-table--grid' : this.cardDefaultClass) + + ` q-table--${this.darkSuffix}` + + (this.dense === true ? ' q-table--dense' : '') + + (this.wrapCells === false ? ' q-table--no-wrap' : '') + + (this.inFullscreen === true ? ' fullscreen scroll' : '') + }, + + containerClass () { + // do not trigger a refresh of the table when the loading status is changed + return this.__containerClass + + (this.loading === true ? ' q-table--loading' : '') + }, + + virtProps () { + const props = {}; + + commonVirtPropsList + .forEach(p => { props[p] = this[p]; }); + + if (props.virtualScrollItemSize === void 0) { + props.virtualScrollItemSize = this.dense === true ? 28 : 48; + } + + return props + } + }, + + render (h) { + const child = [ this.__getTopDiv(h) ]; + const data = { staticClass: this.containerClass }; + + if (this.grid === true) { + child.push(this.__getGridHeader(h)); + } + else { + Object.assign(data, { + class: this.cardClass, + style: this.cardStyle + }); + } + + child.push( + this.__getBody(h), + this.__getBottomDiv(h) + ); + + if (this.loading === true && this.$scopedSlots.loading !== void 0) { + child.push( + this.$scopedSlots.loading() + ); + } + + return h('div', data, child) + }, + + methods: { + requestServerInteraction (prop = {}) { + this.$nextTick(() => { + this.$emit('request', { + pagination: prop.pagination || this.computedPagination, + filter: prop.filter || this.filter, + getCellValue: this.getCellValue + }); + }); + }, + + resetVirtualScroll () { + this.hasVirtScroll === true && this.$refs.virtScroll.reset(); + }, + + __getBody (h) { + if (this.grid === true) { + return this.__getGridBody(h) + } + + const header = this.hideHeader !== true ? this.__getTHead(h) : null; + + if (this.hasVirtScroll === true) { + const topRow = this.$scopedSlots['top-row']; + const bottomRow = this.$scopedSlots['bottom-row']; + + const virtSlots = { + default: this.__getVirtualTBodyTR(h) + }; + + if (topRow !== void 0) { + const topContent = h('tbody', topRow({ cols: this.computedCols })); + + virtSlots.before = header === null + ? () => [topContent] + : () => [header].concat(topContent); + } + else if (header !== null) { + virtSlots.before = () => header; + } + + if (bottomRow !== void 0) { + virtSlots.after = () => h('tbody', bottomRow({ cols: this.computedCols })); + } + + return h(QVirtualScroll, { + key: 'vs', + ref: 'virtScroll', + props: { + ...this.virtProps, + items: this.computedRows, + type: '__qtable', + tableColspan: this.computedColspan + }, + on: cache(this, 'vs', { + 'virtual-scroll': this.__onVScroll + }), + class: this.tableClass, + style: this.tableStyle, + scopedSlots: virtSlots + }) + } + + return getTableMiddle(h, { + staticClass: 'scroll', + class: this.tableClass, + style: this.tableStyle + }, [ + header, + this.__getTBody(h) + ]) + }, + + scrollTo (toIndex, edge) { + if (this.$refs.virtScroll !== void 0) { + this.$refs.virtScroll.scrollTo(toIndex, edge); + return + } + + toIndex = parseInt(toIndex, 10); + const rowEl = this.$el.querySelector(`tbody tr:nth-of-type(${toIndex + 1})`); + + if (rowEl !== null) { + const scrollTarget = this.$el.querySelector('.q-table__middle.scroll'); + const offsetTop = rowEl.offsetTop - this.virtualScrollStickySizeStart; + const direction = offsetTop < scrollTarget.scrollTop ? 'decrease' : 'increase'; + + scrollTarget.scrollTop = offsetTop; + + this.$emit('virtual-scroll', { + index: toIndex, + from: 0, + to: this.pagination.rowsPerPage - 1, + direction + }); + } + }, + + __onVScroll (info) { + this.$emit('virtual-scroll', info); + }, + + __getProgress (h) { + return [ + h(QLinearProgress, { + staticClass: 'q-table__linear-progress', + props: { + color: this.color, + dark: this.dark, + indeterminate: true, + trackColor: 'transparent' + } + }) + ] + } + } + }); + + var QTr = Vue__default["default"].extend({ + name: 'QTr', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + noHover: Boolean + }, + + computed: { + classes () { + return 'q-tr' + (this.props === void 0 || this.props.header === true ? '' : ' ' + this.props.__trClass) + + (this.noHover === true ? ' q-tr--no-hover' : '') + } + }, + + render (h) { + return h('tr', { + on: { ...this.qListeners }, + class: this.classes + }, slot(this, 'default')) + } + }); + + var QTd = Vue__default["default"].extend({ + name: 'QTd', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + autoWidth: Boolean, + noHover: Boolean + }, + + computed: { + classes () { + return 'q-td' + (this.autoWidth === true ? ' q-table--col-auto-width' : '') + + (this.noHover === true ? ' q-td--no-hover' : '') + ' ' + } + }, + + render (h) { + const on = this.qListeners; + + if (this.props === void 0) { + return h('td', { + on, + class: this.classes + }, slot(this, 'default')) + } + + const name = this.$vnode.key; + + const col = this.props.colsMap !== void 0 && name + ? this.props.colsMap[name] + : this.props.col; + + if (col === void 0) { return } + + const row = this.props.row; + + return h('td', { + on, + style: col.__tdStyle(row), + class: this.classes + col.__tdClass(row) + }, slot(this, 'default')) + } + }); + + var QRouteTab = Vue__default["default"].extend({ + name: 'QRouteTab', + + mixins: [ QTab, RouterLinkMixin ], + + watch: { + routeModel () { + this.$tabs.__verifyRouteModel(); + } + }, + + computed: { + routeModel () { + return `${this.name} | ${this.exact} | ${(this.resolvedLink || {}).href}` + }, + + // overwritten from RouterLinkMixin + // because we want to discard the "disable" state + hasRouterLinkProps () { + return this.$router !== void 0 && + this.hasHrefLink !== true && + this.to !== void 0 && this.to !== null && this.to !== '' + } + }, + + render (h) { + return this.__renderTab(h, this.linkTag) + } + }); + + function preventKbdArrows (ev) { + [ 37, 38, 39, 40 ].includes(ev.keyCode) === true && prevent(ev); + } + + var QTime = Vue__default["default"].extend({ + name: 'QTime', + + mixins: [ DateTimeMixin ], + + directives: { + TouchPan + }, + + props: { + mask: { + default: null + }, + + format24h: { + type: Boolean, + default: null + }, + + defaultDate: { + type: String, + validator: v => /^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(v) + }, + + options: Function, + hourOptions: Array, + minuteOptions: Array, + secondOptions: Array, + + withSeconds: Boolean, + nowBtn: Boolean + }, + + data () { + const model = __splitDate( + this.value, + this.__getMask(), + this.__getLocale(), + this.calendar, + this.__getDefaultDateModel() + ); + + let view = 'Hour'; + + if (model.hour !== null) { + if (model.minute === null) { + view = 'Minute'; + } + else if (this.withSeconds === true && model.second === null) { + view = 'Second'; + } + } + + return { + view, + isAM: model.hour === null || model.hour < 12, + innerModel: model + } + }, + + watch: { + value (v) { + const model = __splitDate( + v, + this.computedMask, + this.computedLocale, + this.calendar, + this.defaultDateModel + ); + + if ( + model.dateHash !== this.innerModel.dateHash || + model.timeHash !== this.innerModel.timeHash + ) { + this.innerModel = model; + + if (model.hour === null) { + this.__goToView('Hour'); + } + else { + this.isAM = model.hour < 12; + + if (model.minute === null && this.view === 'Second') { + this.__goToView('Minute'); + } + } + } + }, + + computedMask () { + this.$nextTick(() => { + this.__updateValue(); + }); + }, + + computedLocale () { + this.$nextTick(() => { + this.__updateValue(); + }); + } + }, + + computed: { + classes () { + return `q-time q-time--${this.landscape === true ? 'landscape' : 'portrait'}` + + ` q-time--${this.darkSuffix} q-${this.darkSuffix}` + + (this.disable === true ? ' disabled' : (this.readonly === true ? ' q-time--readonly' : '')) + + (this.bordered === true ? ' q-time--bordered' : '') + + (this.square === true ? ' q-time--square no-border-radius' : '') + + (this.flat === true ? ' q-time--flat no-shadow' : '') + + ' q-key-group-navigation--ignore-key' + }, + + stringModel () { + const time = this.innerModel; + + return { + hour: time.hour === null + ? '--' + : ( + this.computedFormat24h === true + ? pad(time.hour) + : String( + this.isAM === true + ? (time.hour === 0 ? 12 : time.hour) + : (time.hour > 12 ? time.hour - 12 : time.hour) + ) + ), + minute: time.minute === null + ? '--' + : pad(time.minute), + second: time.second === null + ? '--' + : pad(time.second) + } + }, + + defaultDateModel () { + return this.__getDefaultDateModel() + }, + + computedFormat24h () { + return this.format24h !== null + ? this.format24h + : this.$q.lang.date.format24h + }, + + pointerStyle () { + const + forHour = this.view === 'Hour', + divider = forHour === true ? 12 : 60, + amount = this.innerModel[this.view.toLowerCase()], + degrees = Math.round(amount * (360 / divider)) - 180; + + let transform = `rotate(${degrees}deg) translateX(-50%)`; + + if ( + forHour === true && + this.computedFormat24h === true && + this.innerModel.hour >= 12 + ) { + transform += ' scale(.7)'; + } + + return { transform } + }, + + minLink () { + return this.innerModel.hour !== null + }, + + secLink () { + return this.minLink === true && this.innerModel.minute !== null + }, + + hourInSelection () { + return this.hourOptions !== void 0 + ? val => this.hourOptions.includes(val) + : ( + this.options !== void 0 + ? val => this.options(val, null, null) + : void 0 + ) + }, + + minuteInSelection () { + return this.minuteOptions !== void 0 + ? val => this.minuteOptions.includes(val) + : ( + this.options !== void 0 + ? val => this.options(this.innerModel.hour, val, null) + : void 0 + ) + }, + + secondInSelection () { + return this.secondOptions !== void 0 + ? val => this.secondOptions.includes(val) + : ( + this.options !== void 0 + ? val => this.options(this.innerModel.hour, this.innerModel.minute, val) + : void 0 + ) + }, + + validHours () { + if (this.hourInSelection !== void 0) { + const am = this.__getValidValues(0, 11, this.hourInSelection); + const pm = this.__getValidValues(12, 11, this.hourInSelection); + return { am, pm, values: am.values.concat(pm.values) } + } + }, + + validMinutes () { + if (this.minuteInSelection !== void 0) { + return this.__getValidValues(0, 59, this.minuteInSelection) + } + }, + + validSeconds () { + if (this.secondInSelection !== void 0) { + return this.__getValidValues(0, 59, this.secondInSelection) + } + }, + + viewValidOptions () { + switch (this.view) { + case 'Hour': + return this.validHours + case 'Minute': + return this.validMinutes + case 'Second': + return this.validSeconds + } + }, + + positions () { + let start, end, offset = 0, step = 1; + const values = this.viewValidOptions !== void 0 + ? this.viewValidOptions.values + : void 0; + + if (this.view === 'Hour') { + if (this.computedFormat24h === true) { + start = 0; + end = 23; + } + else { + start = 0; + end = 11; + + if (this.isAM === false) { + offset = 12; + } + } + } + else { + start = 0; + end = 55; + step = 5; + } + + const pos = []; + + for (let val = start, index = start; val <= end; val += step, index++) { + const + actualVal = val + offset, + disable = values !== void 0 && values.includes(actualVal) === false, + label = this.view === 'Hour' && val === 0 + ? (this.computedFormat24h === true ? '00' : '12') + : val; + + pos.push({ val: actualVal, index, disable, label }); + } + + return pos + } + }, + + methods: { + setNow () { + const nowStr = this.__updateValue({ + ...this.__getCurrentDate(), + ...this.__getCurrentTime() + }); + + const model = __splitDate( + nowStr, + this.computedMask, + this.computedLocale, + this.calendar, + this.defaultDateModel + ); + + this.innerModel = model; + this.isAM = model.hour < 12; + + this.__goToView('Hour'); + }, + + __getValidValues (start, count, testFn) { + const values = Array.apply(null, { length: count + 1 }) + .map((_, index) => { + const i = index + start; + return { + index: i, + val: testFn(i) === true // force boolean + } + }) + .filter(v => v.val === true) + .map(v => v.index); + + return { + min: values[0], + max: values[values.length - 1], + values, + threshold: count + 1 + } + }, + + __getWheelDist (a, b, threshold) { + const diff = Math.abs(a - b); + return Math.min(diff, threshold - diff) + }, + + __getNormalizedClockValue (val, { min, max, values, threshold }) { + if (val === min) { + return min + } + + if (val < min || val > max) { + return this.__getWheelDist(val, min, threshold) <= this.__getWheelDist(val, max, threshold) + ? min + : max + } + + const + index = values.findIndex(v => val <= v), + before = values[index - 1], + after = values[index]; + + return val - before <= after - val + ? before + : after + }, + + __getMask () { + return this.calendar !== 'persian' && this.mask !== null + ? this.mask + : `HH:mm${this.withSeconds === true ? ':ss' : ''}` + }, + + __getDefaultDateModel () { + if (typeof this.defaultDate !== 'string') { + const date = this.__getCurrentDate(true); + date.dateHash = this.__getDayHash(date); + return date + } + + return __splitDate(this.defaultDate, 'YYYY/MM/DD', void 0, this.calendar) + }, + + __click (evt) { + if (this.__shouldAbortInteraction() !== true) { + // __activate() has already updated the offset + // (on desktop only, through mousedown event) + if (this.$q.platform.is.desktop !== true) { + this.__updateClock(evt, this.__getClockRect()); + } + + this.__goToNextView(); + } + }, + + __activate (evt) { + if (this.__shouldAbortInteraction() !== true) { + this.__updateClock(evt, this.__getClockRect()); + } + }, + + __shouldAbortInteraction () { + return this._isBeingDestroyed === true || + this._isDestroyed === true || + // if we have limited options, can we actually set any? + ( + this.viewValidOptions !== void 0 && + ( + this.viewValidOptions.values.length === 0 || + ( + this.view === 'Hour' && this.computedFormat24h !== true && + this.validHours[this.isAM === true ? 'am' : 'pm'].values.length === 0 + ) + ) + ) + }, + + __getClockRect () { + const + clock = this.$refs.clock, + { top, left, width } = clock.getBoundingClientRect(), + dist = width / 2; + + return { + top: top + dist, + left: left + dist, + dist: dist * 0.7 + } + }, + + __goToView (view) { + if (this.view !== view) { + this.view = view; + } + if (this.$refs[view] !== void 0 && this.$refs[view] !== document.activeElement) { + this.$refs[view].focus(); + } + }, + + __goToNextView () { + if (this.view === 'Hour') { + this.__goToView('Minute'); + } + else if (this.withSeconds && this.view === 'Minute') { + this.__goToView('Second'); + } + else { + this.__updateValue(void 0, true); + } + }, + + __drag (event) { + if (this.__shouldAbortInteraction() === true) { + return + } + + if (event.isFinal === true) { + this.draggingClockRect = false; + this.dragCache = null; + this.__goToNextView(); + } + else if (event.isFirst === true) { + this.draggingClockRect = this.__getClockRect(); + this.dragCache = this.__updateClock(event.evt, this.draggingClockRect); + } + else { + this.dragCache = this.__updateClock(event.evt, this.draggingClockRect, this.dragCache); + } + }, + + __updateClock (evt, clockRect, cacheVal) { + const + pos = position(evt), + height = Math.abs(pos.top - clockRect.top), + distance = Math.sqrt( + Math.pow(Math.abs(pos.top - clockRect.top), 2) + + Math.pow(Math.abs(pos.left - clockRect.left), 2) + ); + + let + val, + angle = Math.asin(height / distance) * (180 / Math.PI); + + if (pos.top < clockRect.top) { + angle = clockRect.left < pos.left ? 90 - angle : 270 + angle; + } + else { + angle = clockRect.left < pos.left ? angle + 90 : 270 - angle; + } + + if (this.view === 'Hour') { + val = angle / 30; + + if (this.validHours !== void 0) { + const am = this.computedFormat24h !== true + ? this.isAM === true + : ( + this.validHours.am.values.length > 0 && this.validHours.pm.values.length > 0 + ? distance >= clockRect.dist + : this.validHours.am.values.length > 0 + ); + + val = this.__getNormalizedClockValue( + val + (am === true ? 0 : 12), + this.validHours[am === true ? 'am' : 'pm'] + ); + } + else { + val = Math.round(val); + + if (this.computedFormat24h === true) { + if (distance < clockRect.dist) { + if (val < 12) { + val += 12; + } + } + else if (val === 12) { + val = 0; + } + } + else if (this.isAM === true && val === 12) { + val = 0; + } + else if (this.isAM === false && val !== 12) { + val += 12; + } + } + + if (this.computedFormat24h === true) { + this.isAM = val < 12; + } + } + else { + val = Math.round(angle / 6) % 60; + + if (this.view === 'Minute' && this.validMinutes !== void 0) { + val = this.__getNormalizedClockValue(val, this.validMinutes); + } + else if (this.view === 'Second' && this.validSeconds !== void 0) { + val = this.__getNormalizedClockValue(val, this.validSeconds); + } + } + + if (cacheVal !== val) { + this[`__set${this.view}`](val); + } + + return val + }, + + __onKeyupHour (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Hour' && this.__goToNextView(); + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + const payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1; + + if (this.validHours !== void 0) { + const values = this.computedFormat24h === true + ? this.validHours.values + : this.validHours[this.isAM === true ? 'am' : 'pm'].values; + + if (values.length === 0) { return } + + if (this.innerModel.hour === null) { + this.__setHour(values[0]); + } + else { + const index = ( + values.length + + values.indexOf(this.innerModel.hour) + + payload + ) % values.length; + + this.__setHour(values[index]); + } + } + else { + const + wrap = this.computedFormat24h === true ? 24 : 12, + offset = this.computedFormat24h !== true && this.isAM === false ? 12 : 0, + val = this.innerModel.hour === null ? -payload : this.innerModel.hour; + + this.__setHour(offset + (24 + val + payload) % wrap); + } + } + }, + + __onKeyupMinute (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Minute' && this.__goToNextView(); + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + const payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1; + + if (this.validMinutes !== void 0) { + const values = this.validMinutes.values; + + if (values.length === 0) { return } + + if (this.innerModel.minute === null) { + this.__setMinute(values[0]); + } + else { + const index = ( + values.length + + values.indexOf(this.innerModel.minute) + + payload + ) % values.length; + + this.__setMinute(values[index]); + } + } + else { + const val = this.innerModel.minute === null ? -payload : this.innerModel.minute; + this.__setMinute((60 + val + payload) % 60); + } + } + }, + + __onKeyupSecond (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Second' && this.__goToNextView(); + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + const payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1; + + if (this.validSeconds !== void 0) { + const values = this.validSeconds.values; + + if (values.length === 0) { return } + + if (this.innerModel.seconds === null) { + this.__setSecond(values[0]); + } + else { + const index = ( + values.length + + values.indexOf(this.innerModel.second) + + payload + ) % values.length; + + this.__setSecond(values[index]); + } + } + else { + const val = this.innerModel.second === null ? -payload : this.innerModel.second; + this.__setSecond((60 + val + payload) % 60); + } + } + }, + + __getHeader (h) { + const label = [ + h('div', { + key: 'vH', + staticClass: 'q-time__link', + class: this.view === 'Hour' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Hour' }, + on: cache(this, 'vH', { + focus: () => { this.view = 'Hour'; }, + keydown: preventKbdArrows, + keyup: this.__onKeyupHour + }) + }, [ this.stringModel.hour ]), + + h('div', [ ':' ]), + + h( + 'div', + this.minLink === true + ? { + key: 'vM', + ref: 'Minute', + staticClass: 'q-time__link', + class: this.view === 'Minute' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Minute' }, + on: cache(this, 'vM', { + focus: () => { this.view = 'Minute'; }, + keydown: preventKbdArrows, + keyup: this.__onKeyupMinute + }) + } + : { staticClass: 'q-time__link' }, + [ this.stringModel.minute ] + ) + ]; + + if (this.withSeconds === true) { + label.push( + h('div', [ ':' ]), + + h( + 'div', + this.secLink === true + ? { + key: 'vS', + ref: 'Second', + staticClass: 'q-time__link', + class: this.view === 'Second' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Second' }, + on: cache(this, 'vS', { + focus: () => { this.view = 'Second'; }, + keydown: preventKbdArrows, + keyup: this.__onKeyupSecond + }) + } + : { staticClass: 'q-time__link' }, + [ this.stringModel.second ] + ) + ); + } + + return h('div', { + staticClass: 'q-time__header flex flex-center no-wrap', + class: this.headerClass + }, [ + h('div', { + staticClass: 'q-time__header-label row items-center no-wrap', + attrs: { dir: 'ltr' } + }, label), + + this.computedFormat24h === false ? h('div', { + staticClass: 'q-time__header-ampm column items-between no-wrap' + }, [ + h('div', { + key: 'AM', + staticClass: 'q-time__link', + class: this.isAM === true ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'AM', { + click: this.__setAm, + keyup: e => { e.keyCode === 13 && this.__setAm(); } + }) + }, [ 'AM' ]), + + h('div', { + key: 'PM', + staticClass: 'q-time__link', + class: this.isAM !== true ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'PM', { + click: this.__setPm, + keyup: e => { e.keyCode === 13 && this.__setPm(); } + }) + }, [ 'PM' ]) + ]) : null + ]) + }, + + __getClock (h) { + const + view = this.view.toLowerCase(), + current = this.innerModel[view]; + + return h('div', { + staticClass: 'q-time__content col relative-position' + }, [ + h('transition', { + props: { name: 'q-transition--scale' } + }, [ + h('div', { + key: 'clock' + this.view, + staticClass: 'q-time__container-parent absolute-full' + }, [ + h('div', { + ref: 'clock', + staticClass: 'q-time__container-child fit overflow-hidden' + }, [ + h('div', { + key: 'click', + staticClass: 'q-time__clock cursor-pointer non-selectable', + on: cache(this, 'click', { + click: this.__click, + mousedown: this.__activate + }), + directives: cache(this, 'touch', [{ + name: 'touch-pan', + value: this.__drag, + modifiers: { + stop: true, + prevent: true, + mouse: true + } + }]) + }, [ + h('div', { staticClass: 'q-time__clock-circle fit' }, [ + h('div', { + staticClass: 'q-time__clock-pointer', + style: this.pointerStyle, + class: this.innerModel[view] === null ? 'hidden' : (this.color !== void 0 ? `text-${this.color}` : '') + }), + + this.positions.map(pos => h('div', { + staticClass: `q-time__clock-position row flex-center q-time__clock-pos-${pos.index}`, + class: pos.val === current + ? this.headerClass.concat(' q-time__clock-position--active') + : (pos.disable === true ? 'q-time__clock-position--disabled' : null) + }, [ h('span', [ pos.label ]) ])) + ]) + ]) + ]) + ]) + ]), + + this.nowBtn === true ? h(QBtn, { + key: 'now', + staticClass: 'q-time__now-button absolute', + props: { + icon: this.$q.iconSet.datetime.now, + unelevated: true, + size: 'sm', + round: true, + color: this.color, + textColor: this.textColor, + tabindex: this.computedTabindex + }, + on: cache(this, 'now', { + click: this.setNow + }) + }) : null + ]) + }, + + __setHour (hour) { + if (this.innerModel.hour !== hour) { + this.innerModel.hour = hour; + this.__verifyAndUpdate(); + } + }, + + __setMinute (minute) { + if (this.innerModel.minute !== minute) { + this.innerModel.minute = minute; + this.__verifyAndUpdate(); + } + }, + + __setSecond (second) { + if (this.innerModel.second !== second) { + this.innerModel.second = second; + this.__verifyAndUpdate(); + } + }, + + __setAm () { + if (this.isAM === false) { + this.isAM = true; + + if (this.innerModel.hour !== null) { + this.innerModel.hour -= 12; + this.__verifyAndUpdate(); + } + } + }, + + __setPm () { + if (this.isAM === true) { + this.isAM = false; + + if (this.innerModel.hour !== null) { + this.innerModel.hour += 12; + this.__verifyAndUpdate(); + } + } + }, + + __verifyAndUpdate () { + if (this.hourInSelection !== void 0 && this.hourInSelection(this.innerModel.hour) !== true) { + this.innerModel = __splitDate(); + this.__goToView('Hour'); + return + } + + if (this.minuteInSelection !== void 0 && this.minuteInSelection(this.innerModel.minute) !== true) { + this.innerModel.minute = null; + this.innerModel.second = null; + this.__goToView('Minute'); + return + } + + if (this.withSeconds === true && this.secondInSelection !== void 0 && this.secondInSelection(this.innerModel.second) !== true) { + this.innerModel.second = null; + this.__goToView('Second'); + return + } + + if (this.innerModel.hour === null || this.innerModel.minute === null || (this.withSeconds === true && this.innerModel.second === null)) { + return + } + + this.__updateValue(); + }, + + __updateValue (obj, final) { + const date = Object.assign({ ...this.innerModel }, obj); + + const val = this.calendar === 'persian' + ? pad(date.hour) + ':' + + pad(date.minute) + + (this.withSeconds === true ? ':' + pad(date.second) : '') + : formatDate( + __safeCreateDate( + date.year, + date.month === null ? null : date.month - 1, + date.day, + date.hour, + date.minute, + date.second, + date.millisecond + ), + this.computedMask, + this.computedLocale, + date.year, + date.timezoneOffset + ); + + date.changed = val !== this.value; + + if (final !== true || date.changed === true) { + this.$emit('input', val, date); + } + final === true && this.$emit('change', val, date); + + return val + } + }, + + render (h) { + const child = [ + this.__getClock(h) + ]; + + const def = slot(this, 'default'); + def !== void 0 && child.push( + h('div', { staticClass: 'q-time__actions' }, def) + ); + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(child, 'push'); + } + + return h('div', { + class: this.classes, + on: { ...this.qListeners }, + attrs: { tabindex: -1 } + }, [ + this.__getHeader(h), + h('div', { staticClass: 'q-time__main col overflow-auto' }, child) + ]) + } + }); + + var QTimeline = Vue__default["default"].extend({ + name: 'QTimeline', + + mixins: [ DarkMixin, ListenersMixin ], + + provide () { + return { + __timeline: this + } + }, + + props: { + color: { + type: String, + default: 'primary' + }, + side: { + type: String, + default: 'right', + validator: v => ['left', 'right'].includes(v) + }, + layout: { + type: String, + default: 'dense', + validator: v => ['dense', 'comfortable', 'loose'].includes(v) + } + }, + + computed: { + classes () { + return `q-timeline--${this.layout} q-timeline--${this.layout}--${this.side}` + + ` q-timeline--${this.darkSuffix}` + } + }, + + render (h) { + return h('ul', { + staticClass: 'q-timeline', + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QTimelineEntry = Vue__default["default"].extend({ + name: 'QTimelineEntry', + + inject: { + __timeline: { + default () { + console.error('QTimelineEntry needs to be child of QTimeline'); + } + } + }, + + mixins: [ ListenersMixin ], + + props: { + heading: Boolean, + tag: { + type: String, + default: 'h3' + }, + side: { + type: String, + default: 'right', + validator: v => ['left', 'right'].includes(v) + }, + + icon: String, + avatar: String, + + color: String, + + title: String, + subtitle: String, + body: String + }, + + computed: { + colorClass () { + return `text-${this.color || this.__timeline.color}` + }, + + classes () { + return `q-timeline__entry--${this.side}` + + (this.icon !== void 0 || this.avatar !== void 0 ? ' q-timeline__entry--icon' : '') + }, + + reverse () { + return this.__timeline.layout === 'comfortable' && this.__timeline.side === 'left' + } + }, + + render (h) { + const child = uniqueSlot(this, 'default', []); + + if (this.body !== void 0) { + child.unshift(this.body); + } + + if (this.heading === true) { + const content = [ + h('div'), + h('div'), + h( + this.tag, + { staticClass: 'q-timeline__heading-title' }, + child + ) + ]; + + return h('div', { + staticClass: 'q-timeline__heading', + on: { ...this.qListeners } + }, this.reverse === true ? content.reverse() : content) + } + + let dot; + + if (this.icon !== void 0) { + dot = [ + h(QIcon, { + staticClass: 'row items-center justify-center', + props: { name: this.icon } + }) + ]; + } + else if (this.avatar !== void 0) { + dot = [ + h('img', { + staticClass: 'q-timeline__dot-img', + domProps: { src: this.avatar } + }) + ]; + } + + const content = [ + h('div', { staticClass: 'q-timeline__subtitle' }, [ + h('span', slot(this, 'subtitle', [ this.subtitle ])) + ]), + + h('div', { + staticClass: 'q-timeline__dot', + class: this.colorClass + }, dot), + + h('div', { staticClass: 'q-timeline__content' }, [ + h('h6', { staticClass: 'q-timeline__title' }, slot(this, 'title', [ this.title ])) + ].concat(child)) + ]; + + return h('li', { + staticClass: 'q-timeline__entry', + class: this.classes, + on: { ...this.qListeners } + }, this.reverse === true ? content.reverse() : content) + } + }); + + const attrs = { role: 'toolbar' }; + + var QToolbar = Vue__default["default"].extend({ + name: 'QToolbar', + + mixins: [ ListenersMixin ], + + props: { + inset: Boolean + }, + + render (h) { + return h('div', { + staticClass: 'q-toolbar row no-wrap items-center', + class: this.inset ? 'q-toolbar--inset' : null, + attrs, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + var QToolbarTitle = Vue__default["default"].extend({ + name: 'QToolbarTitle', + + mixins: [ ListenersMixin ], + + props: { + shrink: Boolean + }, + + computed: { + classes () { + return 'q-toolbar__title ellipsis' + + (this.shrink === true ? ' col-shrink' : '') + } + }, + + render (h) { + return h('div', { + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } + }); + + const tickStrategyOptions = [ 'none', 'strict', 'leaf', 'leaf-filtered' ]; + + var QTree = Vue__default["default"].extend({ + name: 'QTree', + + mixins: [ DarkMixin ], + + props: { + nodes: { + type: Array, + required: true + }, + nodeKey: { + type: String, + required: true + }, + labelKey: { + type: String, + default: 'label' + }, + childrenKey: { + type: String, + default: 'children' + }, + + dense: Boolean, + + color: String, + controlColor: String, + textColor: String, + selectedColor: String, + + icon: String, + + tickStrategy: { + type: String, + default: 'none', + validator: v => tickStrategyOptions.includes(v) + }, + ticked: Array, // sync + expanded: Array, // sync + selected: {}, // sync + + noSelectionUnset: Boolean, + + defaultExpandAll: Boolean, + accordion: Boolean, + + filter: String, + filterMethod: { + type: Function, + default (node, filter) { + const filt = filter.toLowerCase(); + return node[this.labelKey] && + node[this.labelKey].toLowerCase().indexOf(filt) > -1 + } + }, + + duration: Number, + noConnectors: Boolean, + noTransition: Boolean, + + noNodesLabel: String, + noResultsLabel: String + }, + + computed: { + classes () { + return `q-tree q-tree--${this.dense === true ? 'dense' : 'standard'}` + + (this.noConnectors === true ? ' q-tree--no-connectors' : '') + + ` q-tree--${this.darkSuffix}` + + (this.color !== void 0 ? ` text-${this.color}` : '') + }, + + hasSelection () { + return this.selected !== void 0 + }, + + computedIcon () { + return this.icon || this.$q.iconSet.tree.icon + }, + + computedControlColor () { + return this.controlColor || this.color + }, + + textColorClass () { + if (this.textColor !== void 0) { + return `text-${this.textColor}` + } + }, + + selectedColorClass () { + const color = this.selectedColor || this.color; + if (color) { + return `text-${color}` + } + }, + + meta () { + const meta = this.metaMap; + meta.clear(); + + const travel = (node, parent) => { + const tickStrategy = node.tickStrategy || (parent ? parent.tickStrategy : this.tickStrategy); + const + key = node[this.nodeKey], + isParent = node[this.childrenKey] && node[this.childrenKey].length > 0, + selectable = node.disabled !== true && this.hasSelection === true && node.selectable !== false, + expandable = node.disabled !== true && node.expandable !== false, + hasTicking = tickStrategy !== 'none', + strictTicking = tickStrategy === 'strict', + leafFilteredTicking = tickStrategy === 'leaf-filtered', + leafTicking = tickStrategy === 'leaf' || tickStrategy === 'leaf-filtered'; + + let tickable = node.disabled !== true && node.tickable !== false; + if (leafTicking === true && tickable === true && parent && parent.tickable !== true) { + tickable = false; + } + + let lazy = node.lazy; + if ( + lazy === true && + this.lazy[key] !== void 0 && + Array.isArray(node[this.childrenKey]) === true + ) { + lazy = this.lazy[key]; + } + + const m = { + key, + parent, + isParent, + lazy, + disabled: node.disabled, + link: node.disabled !== true && (selectable === true || (expandable === true && (isParent === true || lazy === true))), + children: [], + matchesFilter: this.filter ? this.filterMethod(node, this.filter) : true, + + selected: key === this.selected && selectable === true, + selectable, + expanded: isParent === true ? this.innerExpanded.includes(key) : false, + expandable, + noTick: node.noTick === true || (strictTicking !== true && lazy && lazy !== 'loaded'), + tickable, + tickStrategy, + hasTicking, + strictTicking, + leafFilteredTicking, + leafTicking, + ticked: strictTicking === true + ? this.innerTicked.includes(key) + : (isParent === true ? false : this.innerTicked.includes(key)) + }; + + if (m.expanded === true && this.renderedMap.has(key) !== true) { + this.renderedMap.set(key, true); + } + + meta.set(key, m); + + if (isParent === true) { + m.children = node[this.childrenKey].map(n => travel(n, m)); + + if (this.filter) { + if (m.matchesFilter !== true) { + m.matchesFilter = m.children.some(n => n.matchesFilter); + } + else if ( + m.noTick !== true && + m.disabled !== true && + m.tickable === true && + leafFilteredTicking === true && + m.children.every(n => n.matchesFilter !== true || n.noTick === true || n.tickable !== true) === true + ) { + m.tickable = false; + } + } + + if (m.matchesFilter === true) { + if (m.noTick !== true && strictTicking !== true && m.children.every(n => n.noTick) === true) { + m.noTick = true; + } + + if (leafTicking) { + m.ticked = false; + m.indeterminate = m.children.some(node => node.indeterminate === true); + m.tickable = m.tickable === true && m.children.some(node => node.tickable); + + if (m.indeterminate !== true) { + const sel = m.children + .reduce((acc, meta) => meta.ticked === true ? acc + 1 : acc, 0); + + if (sel === m.children.length) { + m.ticked = true; + } + else if (sel > 0) { + m.indeterminate = true; + } + } + + if (m.indeterminate === true) { + m.indeterminateNextState = m.children + .every(meta => meta.tickable !== true || meta.ticked !== true); + } + } + } + } + + return m + }; + + this.nodes.forEach(node => travel(node, null)); + return meta + } + }, + + data () { + return { + lazy: {}, + innerTicked: this.ticked || [], + innerExpanded: this.expanded || [] + } + }, + + watch: { + ticked (val) { + this.innerTicked = val; + }, + + expanded (val) { + this.innerExpanded = val; + } + }, + + methods: { + getNodeByKey (key) { + const reduce = [].reduce; + + const find = (result, node) => { + if (result || !node) { + return result + } + if (Array.isArray(node) === true) { + return reduce.call(Object(node), find, result) + } + if (node[this.nodeKey] === key) { + return node + } + if (node[this.childrenKey]) { + return find(null, node[this.childrenKey]) + } + }; + + return find(null, this.nodes) + }, + + getTickedNodes () { + return this.innerTicked.map(key => this.getNodeByKey(key)) + }, + + getExpandedNodes () { + return this.innerExpanded.map(key => this.getNodeByKey(key)) + }, + + isExpanded (key) { + const m = this.meta.get(key); + return m !== void 0 + ? m.expanded + : false + }, + + collapseAll () { + if (this.expanded !== void 0) { + this.$emit('update:expanded', []); + } + else { + this.innerExpanded = []; + } + }, + + expandAll () { + const + expanded = this.innerExpanded, + travel = node => { + if (node[this.childrenKey] && node[this.childrenKey].length > 0) { + if (node.expandable !== false && node.disabled !== true) { + expanded.push(node[this.nodeKey]); + node[this.childrenKey].forEach(travel); + } + } + }; + + this.nodes.forEach(travel); + + if (this.expanded !== void 0) { + this.$emit('update:expanded', expanded); + } + else { + this.innerExpanded = expanded; + } + }, + + setExpanded (key, state, node = this.getNodeByKey(key), meta = this.meta.get(key)) { + if (meta.lazy && meta.lazy !== 'loaded') { + if (meta.lazy === 'loading') { + return + } + + this.$set(this.lazy, key, 'loading'); + if (Array.isArray(node[this.childrenKey]) !== true) { + this.$set(node, this.childrenKey, []); + } + this.$emit('lazy-load', { + node, + key, + done: children => { + this.lazy[key] = 'loaded'; + this.$set(node, this.childrenKey, Array.isArray(children) === true ? children : []); + this.$nextTick(() => { + const m = this.meta.get(key); + if (m !== void 0 && m.isParent === true) { + this.__setExpanded(key, true); + } + }); + }, + fail: () => { + this.$delete(this.lazy, key); + if (node[this.childrenKey].length === 0) { + this.$delete(node, this.childrenKey); + } + } + }); + } + else if (meta.isParent === true && meta.expandable === true) { + this.__setExpanded(key, state); + } + }, + + __setExpanded (key, state) { + let target = this.innerExpanded; + const emit = this.expanded !== void 0; + + if (emit === true) { + target = target.slice(); + } + + if (state) { + if (this.accordion) { + const m = this.meta.get(key); + if (m !== void 0) { + const collapse = []; + if (m.parent) { + m.parent.children.forEach(m => { + if (m.key !== key && m.expandable === true) { + collapse.push(m.key); + } + }); + } + else { + this.nodes.forEach(node => { + const k = node[this.nodeKey]; + if (k !== key) { + collapse.push(k); + } + }); + } + if (collapse.length > 0) { + target = target.filter(k => collapse.includes(k) === false); + } + } + } + + target = target.concat([ key ]) + .filter((key, index, self) => self.indexOf(key) === index); + } + else { + target = target.filter(k => k !== key); + } + + if (emit === true) { + this.$emit('update:expanded', target); + } + else { + this.innerExpanded = target; + } + }, + + isTicked (key) { + const m = this.meta.get(key); + return m !== void 0 + ? m.ticked + : false + }, + + setTicked (keys, state) { + let target = this.innerTicked; + const emit = this.ticked !== void 0; + + if (emit === true) { + target = target.slice(); + } + + if (state) { + target = target.concat(keys) + .filter((key, index, self) => self.indexOf(key) === index); + } + else { + target = target.filter(k => keys.includes(k) === false); + } + + if (emit === true) { + this.$emit('update:ticked', target); + } + }, + + __getSlotScope (node, meta, key) { + const scope = { tree: this, node, key, color: this.color, dark: this.dark }; + + injectProp( + scope, + 'expanded', + () => { return meta.expanded }, + val => { val !== meta.expanded && this.setExpanded(key, val); } + ); + + injectProp( + scope, + 'ticked', + () => { return meta.ticked }, + val => { val !== meta.ticked && this.setTicked([ key ], val); } + ); + + return scope + }, + + __getChildren (h, nodes) { + return ( + this.filter + ? nodes.filter(n => this.meta.get(n[this.nodeKey]).matchesFilter) + : nodes + ).map(child => this.__getNode(h, child)) + }, + + __getNodeMedia (h, node) { + if (node.icon !== void 0) { + return h(QIcon, { + staticClass: 'q-tree__icon q-mr-sm', + props: { name: node.icon, color: node.iconColor } + }) + } + const src = node.img || node.avatar; + if (src) { + return h('img', { + staticClass: `q-tree__${node.img ? 'img' : 'avatar'} q-mr-sm`, + attrs: { src } + }) + } + }, + + __getNode (h, node) { + const + key = node[this.nodeKey], + meta = this.meta.get(key), + header = node.header + ? this.$scopedSlots[`header-${node.header}`] || this.$scopedSlots['default-header'] + : this.$scopedSlots['default-header']; + + const children = meta.isParent === true + ? this.__getChildren(h, node[this.childrenKey]) + : []; + + const isParent = children.length > 0 || (meta.lazy && meta.lazy !== 'loaded'); + + let body = node.body + ? this.$scopedSlots[`body-${node.body}`] || this.$scopedSlots['default-body'] + : this.$scopedSlots['default-body']; + const slotScope = header !== void 0 || body !== void 0 + ? this.__getSlotScope(node, meta, key) + : null; + + if (body !== void 0) { + body = h('div', { staticClass: 'q-tree__node-body relative-position' }, [ + h('div', { class: this.textColorClass }, [ + body(slotScope) + ]) + ]); + } + + const getChildren = () => h( + 'div', + { + staticClass: 'q-tree__node-collapsible', + class: this.textColorClass, + directives: [{ name: 'show', value: meta.expanded }] + }, + this.renderedMap.has(key) === true + ? [ + body, + + h('div', { + staticClass: 'q-tree__children', + class: { 'q-tree__node--disabled': meta.disabled } + }, children) + ] + : void 0 + ); + + return h('div', { + key, + staticClass: 'q-tree__node relative-position', + class: { 'q-tree__node--parent': isParent, 'q-tree__node--child': isParent !== true } + }, [ + h('div', { + staticClass: 'q-tree__node-header relative-position row no-wrap items-center', + class: { + 'q-tree__node--link q-hoverable q-focusable': meta.link, + 'q-tree__node--selected': meta.selected, + 'q-tree__node--disabled': meta.disabled + }, + attrs: { tabindex: meta.link ? 0 : -1 }, + on: { + click: (e) => { + this.__onClick(node, meta, e); + }, + keypress: e => { + if (shouldIgnoreKey(e) !== true) { + if (e.keyCode === 13) { this.__onClick(node, meta, e, true); } + else if (e.keyCode === 32) { this.__onExpandClick(node, meta, e, true); } + } + } + } + }, [ + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: `blurTarget_${meta.key}` }), + + meta.lazy === 'loading' + ? h(QSpinner, { + staticClass: 'q-tree__spinner', + props: { color: this.computedControlColor } + }) + : ( + isParent === true + ? h(QIcon, { + staticClass: 'q-tree__arrow', + class: { 'q-tree__arrow--rotate': meta.expanded }, + props: { name: this.computedIcon }, + on: { + click: e => { + this.__onExpandClick(node, meta, e); + } + } + }) + : null + ), + + meta.hasTicking === true && meta.noTick !== true + ? h(QCheckbox, { + staticClass: 'q-tree__tickbox', + props: { + value: meta.indeterminate === true ? null : meta.ticked, + color: this.computedControlColor, + dark: this.dark, + dense: true, + keepColor: true, + disable: meta.tickable !== true + }, + on: { + keydown: stopAndPrevent, + input: v => { + this.__onTickedClick(meta, v); + } + } + }) + : null, + + h('div', { + 'staticClass': 'q-tree__node-header-content col row no-wrap items-center', + class: meta.selected ? this.selectedColorClass : this.textColorClass + }, [ + header + ? header(slotScope) + : [ + this.__getNodeMedia(h, node), + h('div', node[this.labelKey]) + ] + ]) + ]), + + isParent === true + ? ( + this.noTransition === true + ? getChildren() + : h(QSlideTransition, { + key: 'slide', + props: { duration: this.duration }, + on: cache(this, 'slide', { + show: () => { this.$emit('after-show'); }, + hide: () => { this.$emit('after-hide'); } + }) + }, [ getChildren() ]) + ) + : ( + this.renderedMap.has(key) === true + ? body + : void 0 + ) + ]) + }, + + __blur (key) { + const blurTarget = this.$refs[`blurTarget_${key}`]; + blurTarget !== void 0 && blurTarget.focus(); + }, + + __onClick (node, meta, e, keyboard) { + keyboard !== true && this.__blur(meta.key); + + if (this.hasSelection && meta.selectable) { + if (this.noSelectionUnset === false) { + this.$emit('update:selected', meta.key !== this.selected ? meta.key : null); + } + else if (meta.key !== this.selected) { + this.$emit('update:selected', meta.key === void 0 ? null : meta.key); + } + } + else { + this.__onExpandClick(node, meta, e, keyboard); + } + + if (typeof node.handler === 'function') { + node.handler(node); + } + }, + + __onExpandClick (node, meta, e, keyboard) { + if (e !== void 0) { + stopAndPrevent(e); + } + keyboard !== true && this.__blur(meta.key); + this.setExpanded(meta.key, meta.expanded !== true, node, meta); + }, + + __onTickedClick (meta, state) { + if (meta.indeterminate === true) { + state = meta.indeterminateNextState; + } + if (meta.strictTicking) { + this.setTicked([ meta.key ], state); + } + else if (meta.leafTicking) { + const keys = []; + const travel = meta => { + if (meta.isParent) { + if (state !== true && meta.noTick !== true && meta.tickable === true) { + keys.push(meta.key); + } + if (meta.leafTicking === true) { + meta.children.forEach(travel); + } + } + else if ( + meta.noTick !== true && + meta.tickable === true && + (meta.leafFilteredTicking !== true || meta.matchesFilter === true) + ) { + keys.push(meta.key); + } + }; + travel(meta); + this.setTicked(keys, state); + } + } + }, + + render (h) { + const children = this.__getChildren(h, this.nodes); + + return h( + 'div', { + class: this.classes + }, + children.length === 0 + ? ( + this.filter + ? this.noResultsLabel || this.$q.lang.tree.noResults + : this.noNodesLabel || this.$q.lang.tree.noNodes + ) + : children + ) + }, + + created () { + this.renderedMap = new Map(); + this.metaMap = new Map(); + this.defaultExpandAll === true && this.expandAll(); + }, + + beforeDestroy () { + this.renderedMap.clear(); + this.renderedMap = void 0; + this.metaMap.clear(); + this.metaMap = void 0; + } + }); + + var QUploaderBase = Vue__default["default"].extend({ + name: 'QUploaderBase', + + mixins: [ DarkMixin, FileMixin ], + + props: { + label: String, + + color: String, + textColor: String, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + noThumbnails: Boolean, + autoUpload: Boolean, + hideUploadBtn: Boolean, + + disable: Boolean, + readonly: Boolean + }, + + provide () { + return { + __qUploaderGetInput: this.__getInputControl + } + }, + + data () { + return { + files: [], + queuedFiles: [], + uploadedFiles: [], + dnd: false, + expanded: false, + + uploadSize: 0, + uploadedSize: 0 + } + }, + + watch: { + isUploading (newVal, oldVal) { + if (oldVal === false && newVal === true) { + this.$emit('start'); + } + else if (oldVal === true && newVal === false) { + this.$emit('finish'); + } + } + }, + + computed: { + /* + * When extending: + * Required : isUploading + * Optional: isBusy + */ + + canUpload () { + return this.editable === true && + this.isBusy !== true && + this.isUploading !== true && + this.queuedFiles.length > 0 + }, + + canAddFiles () { + return ( + this.editable === true && + this.isUploading !== true && + // if single selection and no files are queued: + (this.multiple === true || this.queuedFiles.length === 0) && + // if max-files is set and current number of files does not exceeds it: + (this.maxFiles === void 0 || this.files.length < this.maxFilesNumber) && + // if max-total-size is set and current upload size does not exceeds it: + (this.maxTotalSize === void 0 || this.uploadSize < this.maxTotalSizeNumber) + ) + }, + + uploadProgress () { + return this.uploadSize === 0 + ? 0 + : this.uploadedSize / this.uploadSize + }, + + uploadProgressLabel () { + return this.__getProgressLabel(this.uploadProgress) + }, + + uploadedSizeLabel () { + return humanStorageSize(this.uploadedSize) + }, + + uploadSizeLabel () { + return humanStorageSize(this.uploadSize) + }, + + colorClass () { + const cls = []; + this.color !== void 0 && cls.push(`bg-${this.color}`); + this.textColor !== void 0 && cls.push(`text-${this.textColor}`); + return cls.join(' ') + }, + + editable () { + return this.disable !== true && this.readonly !== true + } + }, + + methods: { + reset () { + if (!this.disable) { + this.abort(); + this.uploadedSize = 0; + this.uploadSize = 0; + this.__revokeImgURLs(); + this.files = []; + this.queuedFiles = []; + this.uploadedFiles = []; + } + }, + + removeUploadedFiles () { + this.__removeFiles([ 'uploaded' ], () => { + this.uploadedFiles = []; + }); + }, + + removeQueuedFiles () { + this.__removeFiles([ 'idle', 'failed' ], ({ size }) => { + this.uploadSize -= size; + this.queuedFiles = []; + }); + }, + + __removeFiles (statusList, cb) { + if (this.disable === true) { + return + } + + const removed = { + files: [], + size: 0 + }; + + const files = this.files.filter(f => { + if (statusList.indexOf(f.__status) === -1) { + return true + } + + removed.size += f.size; + removed.files.push(f); + + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src); + + return false + }); + + if (removed.files.length > 0) { + this.files = files; + cb !== void 0 && cb(removed); + this.$emit('removed', removed.files); + } + }, + + removeFile (file) { + if (this.disable) { return } + + if (file.__status === 'uploaded') { + this.uploadedFiles = this.uploadedFiles.filter(f => f.__key !== file.__key); + } + else if (file.__status === 'uploading') { + file.__abort(); + } + else { + this.uploadSize -= file.size; + } + + this.files = this.files.filter(f => { + if (f.__key !== file.__key) { + return true + } + + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src); + + return false + }); + this.queuedFiles = this.queuedFiles.filter(f => f.__key !== file.__key); + this.$emit('removed', [ file ]); + }, + + __revokeImgURLs () { + this.files.forEach(f => { + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src); + }); + }, + + __getFileInput () { + return this.$refs.input || + this.$el.getElementsByClassName('q-uploader__input')[0] + }, + + __getProgressLabel (p) { + return (p * 100).toFixed(2) + '%' + }, + + __updateFile (file, status, uploadedSize) { + file.__status = status; + + if (status === 'idle') { + file.__uploaded = 0; + file.__progress = 0; + file.__sizeLabel = humanStorageSize(file.size); + file.__progressLabel = '0.00%'; + return + } + if (status === 'failed') { + this.$forceUpdate(); + return + } + + file.__uploaded = status === 'uploaded' + ? file.size + : uploadedSize; + + file.__progress = status === 'uploaded' + ? 1 + : Math.min(0.9999, file.__uploaded / file.size); + + file.__progressLabel = this.__getProgressLabel(file.__progress); + this.$forceUpdate(); + }, + + __addFiles (e, fileList) { + const localFiles = this.__processFiles(e, fileList, this.files, true); + const fileInput = this.__getFileInput(); + + if (fileInput !== void 0) { + fileInput.value = ''; + } + + if (localFiles === void 0) { return } + + localFiles.forEach(file => { + this.__updateFile(file, 'idle'); + this.uploadSize += file.size; + + if (this.noThumbnails !== true && file.type.toUpperCase().startsWith('IMAGE')) { + const img = new Image(); + img.src = window.URL.createObjectURL(file); + file.__img = img; + } + }); + + this.files = this.files.concat(localFiles); + this.queuedFiles = this.queuedFiles.concat(localFiles); + this.$emit('added', localFiles); + this.autoUpload === true && this.upload(); + }, + + __getBtn (h, show, icon, fn) { + if (show === true) { + return h(QBtn, { + props: { + type: 'a', + icon: this.$q.iconSet.uploader[icon], + flat: true, + dense: true + }, + on: { click: icon === 'add' ? this.pickFiles : fn } + }, icon === 'add' ? this.__getInputControl(h) : null) + } + }, + + __getInputControl (h) { + return [ + h('input', { + key: 'input', + ref: 'input', + staticClass: 'q-uploader__input overflow-hidden absolute-full', + attrs: { + tabindex: -1, + type: 'file', + title: '', // try to remove default tooltip + accept: this.accept, + capture: this.capture, + ...(this.multiple === true ? { multiple: true } : {}) + }, + on: cache(this, 'input', { + mousedown: stop, // need to stop refocus from QBtn + click: this.pickFiles, + change: this.__addFiles + }) + }) + ] + }, + + __getHeader (h) { + if (this.$scopedSlots.header !== void 0) { + return this.$scopedSlots.header(this) + } + + return [ + h('div', { + staticClass: 'q-uploader__header-content column' + }, [ + h('div', { + staticClass: 'flex flex-center no-wrap q-gutter-xs' + }, [ + this.__getBtn(h, this.queuedFiles.length > 0, 'removeQueue', this.removeQueuedFiles), + this.__getBtn(h, this.uploadedFiles.length > 0, 'removeUploaded', this.removeUploadedFiles), + + this.isUploading === true + ? h(QSpinner, { staticClass: 'q-uploader__spinner' }) + : null, + + h('div', { staticClass: 'col column justify-center' }, [ + this.label !== void 0 + ? h('div', { staticClass: 'q-uploader__title' }, [ this.label ]) + : null, + + h('div', { staticClass: 'q-uploader__subtitle' }, [ + this.uploadSizeLabel + ' / ' + this.uploadProgressLabel + ]) + ]), + + this.__getBtn(h, this.canAddFiles, 'add', this.pickFiles), + this.__getBtn(h, this.hideUploadBtn === false && this.canUpload === true, 'upload', this.upload), + this.__getBtn(h, this.isUploading, 'clear', this.abort) + ]) + ]) + ] + }, + + __getList (h) { + if (this.$scopedSlots.list !== void 0) { + return this.$scopedSlots.list(this) + } + + return this.files.map(file => h('div', { + key: file.__key, + staticClass: 'q-uploader__file relative-position', + class: { + 'q-uploader__file--img': this.noThumbnails !== true && file.__img !== void 0, + 'q-uploader__file--failed': file.__status === 'failed', + 'q-uploader__file--uploaded': file.__status === 'uploaded' + }, + style: this.noThumbnails !== true && file.__img !== void 0 ? { + backgroundImage: 'url("' + file.__img.src + '")' + } : null + }, [ + h('div', { + staticClass: 'q-uploader__file-header row flex-center no-wrap' + }, [ + file.__status === 'failed' + ? h(QIcon, { + staticClass: 'q-uploader__file-status', + props: { + name: this.$q.iconSet.type.negative, + color: 'negative' + } + }) + : null, + + h('div', { staticClass: 'q-uploader__file-header-content col' }, [ + h('div', { staticClass: 'q-uploader__title' }, [ file.name ]), + h('div', { + staticClass: 'q-uploader__subtitle row items-center no-wrap' + }, [ + file.__sizeLabel + ' / ' + file.__progressLabel + ]) + ]), + + file.__status === 'uploading' + ? h(QCircularProgress, { + props: { + value: file.__progress, + min: 0, + max: 1, + indeterminate: file.__progress === 0 + } + }) + : h(QBtn, { + props: { + round: true, + dense: true, + flat: true, + icon: this.$q.iconSet.uploader[file.__status === 'uploaded' ? 'done' : 'clear'] + }, + on: { + click: () => { this.removeFile(file); } + } + }) + ]) + ])) + } + }, + + beforeDestroy () { + this.isUploading === true && this.abort(); + this.files.length > 0 && this.__revokeImgURLs(); + }, + + render (h) { + const children = [ + h('div', { + staticClass: 'q-uploader__header', + class: this.colorClass + }, this.__getHeader(h)), + + h('div', { + staticClass: 'q-uploader__list scroll' + }, this.__getList(h)), + + this.__getDnd(h, 'uploader') + ]; + + this.isBusy === true && children.push( + h('div', { + staticClass: 'q-uploader__overlay absolute-full flex flex-center' + }, [ h(QSpinner) ]) + ); + + return h('div', { + key: 'drag', + staticClass: 'q-uploader column no-wrap', + class: { + [`q-uploader--${this.darkSuffix} q-${this.darkSuffix}`]: true, + 'q-uploader--bordered': this.bordered, + 'q-uploader--square no-border-radius': this.square, + 'q-uploader--flat no-shadow': this.flat, + 'disabled q-uploader--disabled': this.disable, + 'q-uploader--dnd': this.dnd + }, + on: this.canAddFiles === true + ? cache(this, 'drag', { + dragover: this.__onDragOver, + dragleave: this.__onDragLeave + }) + : null + }, children) + } + }); + + function getFn (prop) { + return typeof prop === 'function' + ? prop + : () => prop + } + + var UploaderXHRMixin = { + props: { + url: [ Function, String ], + method: { + type: [ Function, String ], + default: 'POST' + }, + fieldName: { + type: [ Function, String ], + default: file => file.name + }, + headers: [ Function, Array ], + formFields: [ Function, Array ], + withCredentials: [ Function, Boolean ], + sendRaw: [ Function, Boolean ], + + batch: [ Function, Boolean ], + factory: Function + }, + + data () { + return { + xhrs: [], + promises: [], + workingThreads: 0 + } + }, + + computed: { + xhrProps () { + return { + url: getFn(this.url), + method: getFn(this.method), + headers: getFn(this.headers), + formFields: getFn(this.formFields), + fieldName: getFn(this.fieldName), + withCredentials: getFn(this.withCredentials), + sendRaw: getFn(this.sendRaw), + batch: getFn(this.batch) + } + }, + + isUploading () { + return this.workingThreads > 0 + }, + + isBusy () { + return this.promises.length > 0 + } + }, + + methods: { + abort () { + this.xhrs.forEach(x => { x.abort(); }); + + if (this.promises.length > 0) { + this.abortPromises = true; + } + }, + + upload () { + if (this.canUpload === false) { + return + } + + const queue = this.queuedFiles.slice(0); + this.queuedFiles = []; + + if (this.xhrProps.batch(queue)) { + this.__runFactory(queue); + } + else { + queue.forEach(file => { + this.__runFactory([ file ]); + }); + } + }, + + __runFactory (files) { + this.workingThreads++; + + if (typeof this.factory !== 'function') { + this.__uploadFiles(files, {}); + return + } + + const res = this.factory(files); + + if (!res) { + this.$emit( + 'factory-failed', + new Error('QUploader: factory() does not return properly'), + files + ); + this.workingThreads--; + } + else if (typeof res.catch === 'function' && typeof res.then === 'function') { + this.promises.push(res); + + const failed = err => { + if (this._isBeingDestroyed !== true && this._isDestroyed !== true) { + this.promises = this.promises.filter(p => p !== res); + + if (this.promises.length === 0) { + this.abortPromises = false; + } + + this.queuedFiles = this.queuedFiles.concat(files); + files.forEach(f => { this.__updateFile(f, 'failed'); }); + + this.$emit('factory-failed', err, files); + this.workingThreads--; + } + }; + + res.then(factory => { + if (this.abortPromises === true) { + failed(new Error('Aborted')); + } + else if (this._isBeingDestroyed !== true && this._isDestroyed !== true) { + this.promises = this.promises.filter(p => p !== res); + this.__uploadFiles(files, factory); + } + }).catch(failed); + } + else { + this.__uploadFiles(files, res || {}); + } + }, + + __uploadFiles (files, factory) { + const + form = new FormData(), + xhr = new XMLHttpRequest(); + + const getProp = (name, arg) => { + return factory[name] !== void 0 + ? getFn(factory[name])(arg) + : this.xhrProps[name](arg) + }; + + const url = getProp('url', files); + + if (!url) { + console.error('q-uploader: invalid or no URL specified'); + this.workingThreads--; + return + } + + const fields = getProp('formFields', files); + fields !== void 0 && fields.forEach(field => { + form.append(field.name, field.value); + }); + + let + uploadIndex = 0, + uploadIndexSize = 0, + uploadedSize = 0, + maxUploadSize = 0, + aborted; + + xhr.upload.addEventListener('progress', e => { + if (aborted === true) { return } + + const loaded = Math.min(maxUploadSize, e.loaded); + + this.uploadedSize += loaded - uploadedSize; + uploadedSize = loaded; + + let size = uploadedSize - uploadIndexSize; + for (let i = uploadIndex; size > 0 && i < files.length; i++) { + const + file = files[i], + uploaded = size > file.size; + + if (uploaded) { + size -= file.size; + uploadIndex++; + uploadIndexSize += file.size; + this.__updateFile(file, 'uploading', file.size); + } + else { + this.__updateFile(file, 'uploading', size); + return + } + } + }, false); + + xhr.onreadystatechange = () => { + if (xhr.readyState < 4) { + return + } + + if (xhr.status && xhr.status < 400) { + this.uploadedFiles = this.uploadedFiles.concat(files); + files.forEach(f => { this.__updateFile(f, 'uploaded'); }); + this.$emit('uploaded', { files, xhr }); + } + else { + aborted = true; + this.uploadedSize -= uploadedSize; + this.queuedFiles = this.queuedFiles.concat(files); + files.forEach(f => { this.__updateFile(f, 'failed'); }); + this.$emit('failed', { files, xhr }); + } + + this.workingThreads--; + this.xhrs = this.xhrs.filter(x => x !== xhr); + }; + + xhr.open( + getProp('method', files), + url + ); + + if (getProp('withCredentials', files) === true) { + xhr.withCredentials = true; + } + + const headers = getProp('headers', files); + headers !== void 0 && headers.forEach(head => { + xhr.setRequestHeader(head.name, head.value); + }); + + const sendRaw = getProp('sendRaw', files); + + files.forEach(file => { + this.__updateFile(file, 'uploading', 0); + if (sendRaw !== true) { + form.append(getProp('fieldName', file), file, file.name); + } + file.xhr = xhr; + file.__abort = () => { xhr.abort(); }; + maxUploadSize += file.size; + }); + + this.$emit('uploading', { files, xhr }); + this.xhrs.push(xhr); + + if (sendRaw === true) { + xhr.send(new Blob(files)); + } + else { + xhr.send(form); + } + } + } + }; + + var QUploader = Vue__default["default"].extend({ + name: 'QUploader', + mixins: [ QUploaderBase, UploaderXHRMixin ] + }); + + var QUploaderAddTrigger = Vue__default["default"].extend({ + name: 'QUploaderAddTrigger', + + inject: { + __qUploaderGetInput: { + default () { + console.error('QUploaderAddTrigger needs to be child of QUploader'); + } + } + }, + + render (h) { + return this.__qUploaderGetInput(h) + } + }); + + var QVideo = Vue__default["default"].extend({ + name: 'QVideo', + + mixins: [ RatioMixin, ListenersMixin ], + + props: { + src: { + type: String, + required: true + }, + + title: String, + + fetchpriority: { + type: String, + default: 'auto' + }, + loading: { + type: String, + default: 'eager' + }, + referrerpolicy: { + type: String, + default: 'strict-origin-when-cross-origin' + } + }, + + computed: { + iframeData () { + return { + attrs: { + src: this.src, + frameborder: '0', + title: this.title, + allowfullscreen: true, + fetchpriority: this.fetchpriority, + loading: this.loading, + referrerpolicy: this.referrerpolicy + } + } + }, + + classes () { + return 'q-video' + + (this.ratio !== void 0 ? ' q-video--responsive' : '') + } + }, + + render (h) { + return h('div', { + class: this.classes, + style: this.ratioStyle, + on: { ...this.qListeners } + }, [ + h('iframe', this.iframeData) + ]) + } + }); + + var components = /*#__PURE__*/Object.freeze({ + __proto__: null, + QAjaxBar: QAjaxBar, + QAvatar: QAvatar, + QBadge: QBadge, + QBanner: QBanner, + QBar: QBar, + QBreadcrumbs: QBreadcrumbs, + QBreadcrumbsEl: QBreadcrumbsEl, + QBtn: QBtn, + QBtnDropdown: QBtnDropdown, + QBtnGroup: QBtnGroup, + QBtnToggle: QBtnToggle, + QCard: QCard, + QCardSection: QCardSection, + QCardActions: QCardActions, + QCarousel: QCarousel, + QCarouselSlide: QCarouselSlide, + QCarouselControl: QCarouselControl, + QChatMessage: QChatMessage, + QCheckbox: QCheckbox, + QChip: QChip, + QCircularProgress: QCircularProgress, + QColor: QColor, + QDate: QDate, + QDialog: QDialog, + QDrawer: QDrawer, + QEditor: QEditor, + QExpansionItem: QExpansionItem, + QFab: QFab, + QFabAction: QFabAction, + QField: QField, + QFile: QFile, + QFooter: QFooter, + QForm: QForm, + QHeader: QHeader, + QIcon: QIcon, + QImg: QImg, + QInfiniteScroll: QInfiniteScroll, + QInnerLoading: QInnerLoading, + QInput: QInput, + QIntersection: QIntersection, + QList: QList, + QItem: QItem, + QItemSection: QItemSection, + QItemLabel: QItemLabel, + QKnob: QKnob, + QLayout: QLayout, + QMarkupTable: QMarkupTable, + QMenu: QMenu, + QNoSsr: QNoSsr, + QOptionGroup: QOptionGroup, + QPage: QPage, + QPageContainer: QPageContainer, + QPageScroller: QPageScroller, + QPageSticky: QPageSticky, + QPagination: QPagination, + QParallax: QParallax, + QPopupEdit: QPopupEdit, + QPopupProxy: QPopupProxy, + QLinearProgress: QLinearProgress, + QPullToRefresh: QPullToRefresh, + QRadio: QRadio, + QRange: QRange, + QRating: QRating, + QResizeObserver: QResizeObserver, + QResponsive: QResponsive, + QScrollArea: QScrollArea, + QScrollObserver: QScrollObserver, + QSelect: QSelect, + QSeparator: QSeparator, + QSkeleton: QSkeleton, + QSlideItem: QSlideItem, + QSlideTransition: QSlideTransition, + QSlider: QSlider, + QSpace: QSpace, + QSpinner: QSpinner, + QSpinnerAudio: QSpinnerAudio, + QSpinnerBall: QSpinnerBall, + QSpinnerBars: QSpinnerBars, + QSpinnerBox: QSpinnerBox, + QSpinnerClock: QSpinnerClock, + QSpinnerComment: QSpinnerComment, + QSpinnerCube: QSpinnerCube, + QSpinnerDots: QSpinnerDots, + QSpinnerFacebook: QSpinnerFacebook, + QSpinnerGears: QSpinnerGears, + QSpinnerGrid: QSpinnerGrid, + QSpinnerHearts: QSpinnerHearts, + QSpinnerHourglass: QSpinnerHourglass, + QSpinnerInfinity: QSpinnerInfinity, + QSpinnerIos: QSpinnerIos, + QSpinnerOrbit: QSpinnerOrbit, + QSpinnerOval: QSpinnerOval, + QSpinnerPie: QSpinnerPie, + QSpinnerPuff: QSpinnerPuff, + QSpinnerRadio: QSpinnerRadio, + QSpinnerRings: QSpinnerRings, + QSpinnerTail: QSpinnerTail, + QSplitter: QSplitter, + QStep: QStep, + QStepper: QStepper, + QStepperNavigation: QStepperNavigation, + QTabPanels: QTabPanels, + QTabPanel: QTabPanel, + QTable: QTable, + QTh: QTh, + QTr: QTr, + QTd: QTd, + QTabs: QTabs, + QTab: QTab, + QRouteTab: QRouteTab, + QTime: QTime, + QTimeline: QTimeline, + QTimelineEntry: QTimelineEntry, + QToggle: QToggle, + QToolbar: QToolbar, + QToolbarTitle: QToolbarTitle, + QTooltip: QTooltip, + QTree: QTree, + QUploader: QUploader, + QUploaderBase: QUploaderBase, + QUploaderAddTrigger: QUploaderAddTrigger, + QVideo: QVideo, + QVirtualScroll: QVirtualScroll + }); + + /* + * depth + * < 0 --> close all chain + * 0 --> disabled + * > 0 --> close chain up to N parent + */ + + function getDepth (value) { + if (value === false) { + return 0 + } + if (value === true || value === void 0) { + return 1 + } + + const depth = parseInt(value, 10); + return isNaN(depth) ? 0 : depth + } + + function destroy$7 (el) { + const ctx = el.__qclosepopup; + if (ctx !== void 0) { + el.removeEventListener('click', ctx.handler); + el.removeEventListener('keyup', ctx.handlerKey); + delete el.__qclosepopup; + } + } + + var ClosePopup = { + name: 'close-popup', + + bind (el, { value }, vnode) { + if (el.__qclosepopup !== void 0) { + destroy$7(el); + el.__qclosepopup_destroyed = true; + } + + const ctx = { + depth: getDepth(value), + + handler (evt) { + // allow @click to be emitted + ctx.depth !== 0 && setTimeout(() => { + closePortals(vnode.componentInstance || vnode.context, evt, ctx.depth); + }); + }, + + handlerKey (evt) { + isKeyCode(evt, 13) === true && ctx.handler(evt); + } + }; + + el.__qclosepopup = ctx; + + el.addEventListener('click', ctx.handler); + el.addEventListener('keyup', ctx.handlerKey); + }, + + update (el, { value, oldValue }) { + if (el.__qclosepopup !== void 0 && oldValue !== value) { + el.__qclosepopup.depth = getDepth(value); + } + }, + + unbind (el) { + if (el.__qclosepopup_destroyed === void 0) { + destroy$7(el); + } + else { + delete el.__qclosepopup_destroyed; + } + } + }; + + function destroy$6 (el) { + const ctx = el.__qgoback; + if (ctx !== void 0) { + el.removeEventListener('click', ctx.goBack); + el.removeEventListener('keyup', ctx.goBackKey); + delete el.__qgoback; + } + } + + var GoBack = { + name: 'go-back', + + bind (el, { modifiers, value }, vnode) { + if (el.__qgoback !== void 0) { + destroy$6(el); + el.__qgoback_destroyed = true; + } + + const ctx = { + value, + + position: window.history.length - 1, + single: modifiers.single, + + goBack () { + const router = vnode.context.$router; + + if (ctx.single === true) { + router.go(-1); + } + else if (client.is.nativeMobile === true) { + router.go(ctx.position - window.history.length); + } + else { + router.replace(ctx.value); + } + }, + + goBackKey (e) { + // if ENTER key + isKeyCode(e, 13) === true && ctx.goBack(); + } + }; + + el.__qgoback = ctx; + + el.addEventListener('click', ctx.goBack); + el.addEventListener('keyup', ctx.goBackKey); + }, + + update (el, { modifiers, value, oldValue }) { + const ctx = el.__qgoback; + + if (ctx !== void 0) { + if (ctx.single !== modifiers.single) { + ctx.single = modifiers.single; + } + if (oldValue !== value) { + ctx.value = value; + } + } + }, + + unbind (el) { + if (el.__qgoback_destroyed === void 0) { + destroy$6(el); + } + else { + delete el.__qgoback_destroyed; + } + } + }; + + let id = 0; + let offsetBase = void 0; + + function getAbsolutePosition (el, resize) { + if (offsetBase === void 0) { + offsetBase = document.createElement('div'); + offsetBase.style.cssText = 'position: absolute; left: 0; top: 0'; + document.body.appendChild(offsetBase); + } + + const boundingRect = el.getBoundingClientRect(); + const baseRect = offsetBase.getBoundingClientRect(); + const { marginLeft, marginRight, marginTop, marginBottom } = window.getComputedStyle(el); + const marginH = parseInt(marginLeft, 10) + parseInt(marginRight, 10); + const marginV = parseInt(marginTop, 10) + parseInt(marginBottom, 10); + + return { + left: boundingRect.left - baseRect.left, + top: boundingRect.top - baseRect.top, + width: boundingRect.right - boundingRect.left, + height: boundingRect.bottom - boundingRect.top, + widthM: boundingRect.right - boundingRect.left + (resize === true ? 0 : marginH), + heightM: boundingRect.bottom - boundingRect.top + (resize === true ? 0 : marginV), + marginH: resize === true ? marginH : 0, + marginV: resize === true ? marginV : 0 + } + } + + function getAbsoluteSize (el) { + return { + width: el.scrollWidth, + height: el.scrollHeight + } + } + + // firefox rulez + const styleEdges = [ 'Top', 'Right', 'Bottom', 'Left' ]; + const styleBorderRadiuses = [ 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius' ]; + const reStyleSkipKey = /-block|-inline|block-|inline-/; + const reStyleSkipRule = /(-block|-inline|block-|inline-).*:/; + + function getComputedStyle$1 (el, props) { + const style = window.getComputedStyle(el); + const fixed = {}; + for (let i = 0; i < props.length; i++) { + const prop = props[i]; + + if (style[prop] === '') { + if (prop === 'cssText') { + const styleLen = style.length; + let val = ''; + + for (let i = 0; i < styleLen; i++) { + if (reStyleSkipKey.test(style[i]) !== true) { + val += style[i] + ': ' + style[style[i]] + '; '; + } + } + + fixed[prop] = val; + } + else if ([ 'borderWidth', 'borderStyle', 'borderColor' ].indexOf(prop) > -1) { + const suffix = prop.replace('border', ''); + let val = ''; + for (let j = 0; j < styleEdges.length; j++) { + const subProp = 'border' + styleEdges[j] + suffix; + val += style[subProp] + ' '; + } + fixed[prop] = val; + } + else if (prop === 'borderRadius') { + let val1 = ''; + let val2 = ''; + for (let j = 0; j < styleBorderRadiuses.length; j++) { + const val = style[styleBorderRadiuses[j]].split(' '); + val1 += val[0] + ' '; + val2 += (val[1] === void 0 ? val[0] : val[1]) + ' '; + } + fixed[prop] = val1 + '/ ' + val2; + } + else { + fixed[prop] = style[prop]; + } + } + else { + if (prop === 'cssText') { + fixed[prop] = style[prop] + .split(';') + .filter(val => reStyleSkipRule.test(val) !== true) + .join(';'); + } + else { + fixed[prop] = style[prop]; + } + } + } + + return fixed + } + + const zIndexPositions = ['absolute', 'fixed', 'relative', 'sticky']; + + function getMaxZIndex (elStart) { + let el = elStart; + let maxIndex = 0; + + while (el !== null && el !== document) { + const { position, zIndex } = window.getComputedStyle(el); + const zIndexNum = Number(zIndex); + + if ( + zIndexNum > maxIndex && + (el === elStart || zIndexPositions.includes(position) === true) + ) { + maxIndex = zIndexNum; + } + + el = el.parentNode; + } + + return maxIndex + } + + function normalizeElements (opts) { + return { + from: opts.from, + to: opts.to !== void 0 + ? opts.to + : opts.from + } + } + + function normalizeOptions (options) { + if (typeof options === 'number') { + options = { + duration: options + }; + } + else if (typeof options === 'function') { + options = { + onEnd: options + }; + } + + return { + ...options, + + waitFor: options.waitFor === void 0 ? 0 : options.waitFor, + + duration: isNaN(options.duration) === true ? 300 : parseInt(options.duration, 10), + easing: typeof options.easing === 'string' && options.easing.length > 0 ? options.easing : 'ease-in-out', + delay: isNaN(options.delay) === true ? 0 : parseInt(options.delay, 10), + fill: typeof options.fill === 'string' && options.fill.length > 0 ? options.fill : 'none', + + resize: options.resize === true, + useCSS: options.useCSS === true || options.usecss === true, + hideFromClone: options.hideFromClone === true || options.hidefromclone === true, + keepToClone: options.keepToClone === true || options.keeptoclone === true, + + tween: options.tween === true, + tweenFromOpacity: isNaN(options.tweenFromOpacity) === true ? 0.6 : parseFloat(options.tweenFromOpacity), + tweenToOpacity: isNaN(options.tweenToOpacity) === true ? 0.5 : parseFloat(options.tweenToOpacity) + } + } + + function isValidElement (element) { + return element && + element.ownerDocument === document && + element.parentNode !== null + } + + function morph (_options) { + let cancel = () => false; + let cancelStatus = false; + let endElementTo = true; + + const elements = normalizeElements(_options); + const options = normalizeOptions(_options); + + const elFrom = getElement(elements.from); + if (isValidElement(elFrom) !== true) { + // we return a cancel function that return false, meaning the cancel function failed + return cancel + } + // we clean other morphs running on this element + typeof elFrom.qMorphCancel === 'function' && elFrom.qMorphCancel(); + + let animationFromClone = void 0; + let animationFromTween = void 0; + let animationToClone = void 0; + let animationTo = void 0; + + const elFromParent = elFrom.parentNode; + const elFromNext = elFrom.nextElementSibling; + + // we get the dimensions and characteristics + // of the parent of the initial element before changes + const elFromPosition = getAbsolutePosition(elFrom, options.resize); + const { + width: elFromParentWidthBefore, + height: elFromParentHeightBefore + } = getAbsoluteSize(elFromParent); + const { + borderWidth: elFromBorderWidth, + borderStyle: elFromBorderStyle, + borderColor: elFromBorderColor, + borderRadius: elFromBorderRadius, + backgroundColor: elFromBackground, + transform: elFromTransform, + position: elFromPositioningType, + cssText: elFromCssText + } = getComputedStyle$1(elFrom, [ 'borderWidth', 'borderStyle', 'borderColor', 'borderRadius', 'backgroundColor', 'transform', 'position', 'cssText' ]); + const elFromClassSaved = elFrom.classList.toString(); + const elFromStyleSaved = elFrom.style.cssText; + + // we make a clone of the initial element and + // use it to display until the final element is ready + // and to change the occupied space during animation + const elFromClone = elFrom.cloneNode(true); + const elFromTween = options.tween === true ? elFrom.cloneNode(true) : void 0; + + if (elFromTween !== void 0) { + elFromTween.className = elFromTween.classList.toString().split(' ').filter(c => /^bg-/.test(c) === false).join(' '); + } + + // if the initial element is not going to be removed do not show the placeholder + options.hideFromClone === true && elFromClone.classList.add('q-morph--internal'); + + // prevent interaction with placeholder + elFromClone.setAttribute('aria-hidden', 'true'); + elFromClone.style.transition = 'none'; + elFromClone.style.animation = 'none'; + elFromClone.style.pointerEvents = 'none'; + elFromParent.insertBefore(elFromClone, elFromNext); + + // we mark the element with its cleanup function + elFrom.qMorphCancel = () => { + cancelStatus = true; + + // we clean the clone of the initial element + elFromClone.remove(); + elFromTween !== void 0 && elFromTween.remove(); + + options.hideFromClone === true && elFromClone.classList.remove('q-morph--internal'); + + // we remove the cleanup function from the element + elFrom.qMorphCancel = void 0; + }; + + // will be called after Vue catches up with the changes done by _options.onToggle() function + const calculateFinalState = () => { + const elTo = getElement(elements.to); + if (cancelStatus === true || isValidElement(elTo) !== true) { + typeof elFrom.qMorphCancel === 'function' && elFrom.qMorphCancel(); + + return + } + // we clean other morphs running on this element + elFrom !== elTo && typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel(); + + // we hide the final element and the clone of the initial element + // we don't hide the final element if we want both it and the animated one visible + options.keepToClone !== true && elTo.classList.add('q-morph--internal'); + elFromClone.classList.add('q-morph--internal'); + + // we get the dimensions of the parent of the initial element after changes + // the difference is how much we should animate the clone + const { + width: elFromParentWidthAfter, + height: elFromParentHeightAfter + } = getAbsoluteSize(elFromParent); + + // we get the dimensions of the parent of the final element before changes + const { + width: elToParentWidthBefore, + height: elToParentHeightBefore + } = getAbsoluteSize(elTo.parentNode); + + // then we show the clone of the initial element if we don't want it hidden + options.hideFromClone !== true && elFromClone.classList.remove('q-morph--internal'); + + // we mark the element with its cleanup function + elTo.qMorphCancel = () => { + cancelStatus = true; + + // we clean the clone of the initial element + elFromClone.remove(); + elFromTween !== void 0 && elFromTween.remove(); + + options.hideFromClone === true && elFromClone.classList.remove('q-morph--internal'); + + // we show the final element + options.keepToClone !== true && elTo.classList.remove('q-morph--internal'); + + // we remove the cleanup function from the elements + elFrom.qMorphCancel = void 0; + elTo.qMorphCancel = void 0; + }; + + // will be called after waitFor (give time to render the final element) + const animate = () => { + if (cancelStatus === true) { + typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel(); + + return + } + + // now the animation starts, so we only need the clone + // of the initial element as a spacer + // we also hide it to calculate the dimensions of the + // parent of the final element after the changes + if (options.hideFromClone !== true) { + elFromClone.classList.add('q-morph--internal'); + elFromClone.innerHTML = ''; + elFromClone.style.left = 0; + elFromClone.style.right = 'unset'; + elFromClone.style.top = 0; + elFromClone.style.bottom = 'unset'; + elFromClone.style.transform = 'none'; + } + + // we show the final element + if (options.keepToClone !== true) { + elTo.classList.remove('q-morph--internal'); + } + + // we get the dimensions of the parent of the final element after changes + // the difference is how much we should animate the clone + const elToParent = elTo.parentNode; + const { + width: elToParentWidthAfter, + height: elToParentHeightAfter + } = getAbsoluteSize(elToParent); + + const elToClone = elTo.cloneNode(options.keepToClone); + elToClone.setAttribute('aria-hidden', 'true'); + if (options.keepToClone !== true) { + elToClone.style.left = 0; + elToClone.style.right = 'unset'; + elToClone.style.top = 0; + elToClone.style.bottom = 'unset'; + elToClone.style.transform = 'none'; + elToClone.style.pointerEvents = 'none'; + } + elToClone.classList.add('q-morph--internal'); + + // if elFrom is the same as elTo the next element is elFromClone + const elToNext = elTo === elFrom && elFromParent === elToParent ? elFromClone : elTo.nextElementSibling; + elToParent.insertBefore(elToClone, elToNext); + + const { + borderWidth: elToBorderWidth, + borderStyle: elToBorderStyle, + borderColor: elToBorderColor, + borderRadius: elToBorderRadius, + backgroundColor: elToBackground, + transform: elToTransform, + position: elToPositioningType, + cssText: elToCssText + } = getComputedStyle$1(elTo, [ 'borderWidth', 'borderStyle', 'borderColor', 'borderRadius', 'backgroundColor', 'transform', 'position', 'cssText' ]); + const elToClassSaved = elTo.classList.toString(); + const elToStyleSaved = elTo.style.cssText; + + // we set the computed styles on the element (to be able to remove classes) + elTo.style.cssText = elToCssText; + elTo.style.transform = 'none'; + elTo.style.animation = 'none'; + elTo.style.transition = 'none'; + // we strip the background classes (background color can no longer be animated if !important is used) + elTo.className = elToClassSaved.split(' ').filter(c => /^bg-/.test(c) === false).join(' '); + + const elToPosition = getAbsolutePosition(elTo, options.resize); + + const deltaX = elFromPosition.left - elToPosition.left; + const deltaY = elFromPosition.top - elToPosition.top; + const scaleX = elFromPosition.width / (elToPosition.width > 0 ? elToPosition.width : 10); + const scaleY = elFromPosition.height / (elToPosition.height > 0 ? elToPosition.height : 100); + + const elFromParentWidthDiff = elFromParentWidthBefore - elFromParentWidthAfter; + const elFromParentHeightDiff = elFromParentHeightBefore - elFromParentHeightAfter; + const elToParentWidthDiff = elToParentWidthAfter - elToParentWidthBefore; + const elToParentHeightDiff = elToParentHeightAfter - elToParentHeightBefore; + + const elFromCloneWidth = Math.max(elFromPosition.widthM, elFromParentWidthDiff); + const elFromCloneHeight = Math.max(elFromPosition.heightM, elFromParentHeightDiff); + const elToCloneWidth = Math.max(elToPosition.widthM, elToParentWidthDiff); + const elToCloneHeight = Math.max(elToPosition.heightM, elToParentHeightDiff); + + const elSharedSize = elFrom === elTo && + [ 'absolute', 'fixed' ].includes(elToPositioningType) === false && + [ 'absolute', 'fixed' ].includes(elFromPositioningType) === false; + + // if the final element has fixed position or if a parent + // has fixed position we need to animate it as fixed + let elToNeedsFixedPosition = elToPositioningType === 'fixed'; + let parent = elToParent; + while (elToNeedsFixedPosition !== true && parent !== document) { + elToNeedsFixedPosition = window.getComputedStyle(parent).position === 'fixed'; + parent = parent.parentNode; + } + + // we show the spacer for the initial element + if (options.hideFromClone !== true) { + elFromClone.style.display = 'block'; + elFromClone.style.flex = '0 0 auto'; + elFromClone.style.opacity = 0; + elFromClone.style.minWidth = 'unset'; + elFromClone.style.maxWidth = 'unset'; + elFromClone.style.minHeight = 'unset'; + elFromClone.style.maxHeight = 'unset'; + elFromClone.classList.remove('q-morph--internal'); + } + + // we show the spacer for the final element + if (options.keepToClone !== true) { + elToClone.style.display = 'block'; + elToClone.style.flex = '0 0 auto'; + elToClone.style.opacity = 0; + elToClone.style.minWidth = 'unset'; + elToClone.style.maxWidth = 'unset'; + elToClone.style.minHeight = 'unset'; + elToClone.style.maxHeight = 'unset'; + } + elToClone.classList.remove('q-morph--internal'); + + // we apply classes specified by user + if (typeof options.classes === 'string') { + elTo.className += ' ' + options.classes; + } + + // we apply styles specified by user + if (typeof options.style === 'string') { + elTo.style.cssText += ' ' + options.style; + } + else if (isObject(options.style) === true) { + for (const prop in options.style) { + elTo.style[prop] = options.style[prop]; + } + } + + const elFromZIndex = getMaxZIndex(elFromClone); + const elToZIndex = getMaxZIndex(elTo); + + // we position the morphing element + // if we use fixed position for the final element we need to adjust for scroll + const documentScroll = elToNeedsFixedPosition === true + ? document.documentElement + : { scrollLeft: 0, scrollTop: 0 }; + elTo.style.position = elToNeedsFixedPosition === true ? 'fixed' : 'absolute'; + elTo.style.left = `${elToPosition.left - documentScroll.scrollLeft}px`; + elTo.style.right = 'unset'; + elTo.style.top = `${elToPosition.top - documentScroll.scrollTop}px`; + elTo.style.margin = 0; + + if (options.resize === true) { + elTo.style.minWidth = 'unset'; + elTo.style.maxWidth = 'unset'; + elTo.style.minHeight = 'unset'; + elTo.style.maxHeight = 'unset'; + elTo.style.overflow = 'hidden'; + elTo.style.overflowX = 'hidden'; + elTo.style.overflowY = 'hidden'; + } + + document.body.appendChild(elTo); + + if (elFromTween !== void 0) { + elFromTween.style.cssText = elFromCssText; + elFromTween.style.transform = 'none'; + elFromTween.style.animation = 'none'; + elFromTween.style.transition = 'none'; + + elFromTween.style.position = elTo.style.position; + elFromTween.style.left = `${elFromPosition.left - documentScroll.scrollLeft}px`; + elFromTween.style.right = 'unset'; + elFromTween.style.top = `${elFromPosition.top - documentScroll.scrollTop}px`; + elFromTween.style.margin = 0; + elFromTween.style.pointerEvents = 'none'; + + if (options.resize === true) { + elFromTween.style.minWidth = 'unset'; + elFromTween.style.maxWidth = 'unset'; + elFromTween.style.minHeight = 'unset'; + elFromTween.style.maxHeight = 'unset'; + elFromTween.style.overflow = 'hidden'; + elFromTween.style.overflowX = 'hidden'; + elFromTween.style.overflowY = 'hidden'; + } + + document.body.appendChild(elFromTween); + } + + const commonCleanup = aborted => { + // we put the element back in it's place + // and restore the styles and classes + if (elFrom === elTo && endElementTo !== true) { + elTo.style.cssText = elFromStyleSaved; + elTo.className = elFromClassSaved; + } + else { + elTo.style.cssText = elToStyleSaved; + elTo.className = elToClassSaved; + } + elToClone.parentNode === elToParent && elToParent.insertBefore(elTo, elToClone); + + // we clean the spacers + elFromClone.remove(); + elToClone.remove(); + elFromTween !== void 0 && elFromTween.remove(); + + // cancel will be no longer available + cancel = () => false; + + elFrom.qMorphCancel = void 0; + elTo.qMorphCancel = void 0; + + // we are ready + if (typeof options.onEnd === 'function') { + options.onEnd(endElementTo === true ? 'to' : 'from', aborted === true); + } + }; + + if (options.useCSS !== true && typeof elTo.animate === 'function') { + const resizeFrom = options.resize === true + ? { + transform: `translate(${deltaX}px, ${deltaY}px)`, + width: `${elFromCloneWidth}px`, + height: `${elFromCloneHeight}px` + } + : { + transform: `translate(${deltaX}px, ${deltaY}px) scale(${scaleX}, ${scaleY})` + }; + const resizeTo = options.resize === true + ? { + width: `${elToCloneWidth}px`, + height: `${elToCloneHeight}px` + } + : {}; + const resizeFromTween = options.resize === true + ? { + width: `${elFromCloneWidth}px`, + height: `${elFromCloneHeight}px` + } + : {}; + const resizeToTween = options.resize === true + ? { + transform: `translate(${-1 * deltaX}px, ${-1 * deltaY}px)`, + width: `${elToCloneWidth}px`, + height: `${elToCloneHeight}px` + } + : { + transform: `translate(${-1 * deltaX}px, ${-1 * deltaY}px) scale(${1 / scaleX}, ${1 / scaleY})` + }; + const tweenFrom = elFromTween !== void 0 + ? { opacity: options.tweenToOpacity } + : { backgroundColor: elFromBackground }; + const tweenTo = elFromTween !== void 0 + ? { opacity: 1 } + : { backgroundColor: elToBackground }; + animationTo = elTo.animate([ + { + margin: 0, + borderWidth: elFromBorderWidth, + borderStyle: elFromBorderStyle, + borderColor: elFromBorderColor, + borderRadius: elFromBorderRadius, + zIndex: elFromZIndex, + transformOrigin: '0 0', + ...resizeFrom, + ...tweenFrom + }, + { + margin: 0, + borderWidth: elToBorderWidth, + borderStyle: elToBorderStyle, + borderColor: elToBorderColor, + borderRadius: elToBorderRadius, + zIndex: elToZIndex, + transformOrigin: '0 0', + transform: elToTransform, + ...resizeTo, + ...tweenTo + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }); + + animationFromTween = elFromTween === void 0 ? void 0 : elFromTween.animate([ + { + opacity: options.tweenFromOpacity, + margin: 0, + borderWidth: elFromBorderWidth, + borderStyle: elFromBorderStyle, + borderColor: elFromBorderColor, + borderRadius: elFromBorderRadius, + zIndex: elFromZIndex, + transformOrigin: '0 0', + transform: elFromTransform, + ...resizeFromTween + }, + { + opacity: 0, + margin: 0, + borderWidth: elToBorderWidth, + borderStyle: elToBorderStyle, + borderColor: elToBorderColor, + borderRadius: elToBorderRadius, + zIndex: elToZIndex, + transformOrigin: '0 0', + ...resizeToTween + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }); + + animationFromClone = options.hideFromClone === true || elSharedSize === true ? void 0 : elFromClone.animate([ + { + margin: `${elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0}px ${elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0}px`, + width: `${elFromCloneWidth + elFromPosition.marginH}px`, + height: `${elFromCloneHeight + elFromPosition.marginV}px` + }, + { + margin: 0, + width: 0, + height: 0 + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }); + + animationToClone = options.keepToClone === true ? void 0 : elToClone.animate([ + elSharedSize === true + ? { + margin: `${elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0}px ${elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0}px`, + width: `${elFromCloneWidth + elFromPosition.marginH}px`, + height: `${elFromCloneHeight + elFromPosition.marginV}px` + } + : { + margin: 0, + width: 0, + height: 0 + }, + { + margin: `${elToParentHeightDiff < 0 ? elToParentHeightDiff / 2 : 0}px ${elToParentWidthDiff < 0 ? elToParentWidthDiff / 2 : 0}px`, + width: `${elToCloneWidth + elToPosition.marginH}px`, + height: `${elToCloneHeight + elToPosition.marginV}px` + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }); + + const cleanup = abort => { + animationFromClone !== void 0 && animationFromClone.cancel(); + animationFromTween !== void 0 && animationFromTween.cancel(); + animationToClone !== void 0 && animationToClone.cancel(); + animationTo.cancel(); + + animationTo.removeEventListener('finish', cleanup); + animationTo.removeEventListener('cancel', cleanup); + + commonCleanup(abort); + + // we clean the animations + animationFromClone = void 0; + animationFromTween = void 0; + animationToClone = void 0; + animationTo = void 0; + }; + + elFrom.qMorphCancel = () => { + elFrom.qMorphCancel = void 0; + cancelStatus = true; + cleanup(); + }; + elTo.qMorphCancel = () => { + elTo.qMorphCancel = void 0; + cancelStatus = true; + cleanup(); + }; + + animationTo.addEventListener('finish', cleanup); + animationTo.addEventListener('cancel', cleanup); + + cancel = abort => { + // we are not in a morph that we can cancel + if (cancelStatus === true || animationTo === void 0) { + return false + } + + if (abort === true) { + cleanup(true); + return true + } + + endElementTo = endElementTo !== true; + + animationFromClone !== void 0 && animationFromClone.reverse(); + animationFromTween !== void 0 && animationFromTween.reverse(); + animationToClone !== void 0 && animationToClone.reverse(); + animationTo.reverse(); + + return true + }; + } + else { + const qAnimId = `q-morph-anim-${++id}`; + const style = document.createElement('style'); + const resizeFrom = options.resize === true + ? ` + transform: translate(${deltaX}px, ${deltaY}px); + width: ${elFromCloneWidth}px; + height: ${elFromCloneHeight}px; + ` + : `transform: translate(${deltaX}px, ${deltaY}px) scale(${scaleX}, ${scaleY});`; + const resizeTo = options.resize === true + ? ` + width: ${elToCloneWidth}px; + height: ${elToCloneHeight}px; + ` + : ''; + const resizeFromTween = options.resize === true + ? ` + width: ${elFromCloneWidth}px; + height: ${elFromCloneHeight}px; + ` + : ''; + const resizeToTween = options.resize === true + ? ` + transform: translate(${-1 * deltaX}px, ${-1 * deltaY}px); + width: ${elToCloneWidth}px; + height: ${elToCloneHeight}px; + ` + : `transform: translate(${-1 * deltaX}px, ${-1 * deltaY}px) scale(${1 / scaleX}, ${1 / scaleY});`; + const tweenFrom = elFromTween !== void 0 + ? `opacity: ${options.tweenToOpacity};` + : `background-color: ${elFromBackground};`; + const tweenTo = elFromTween !== void 0 + ? 'opacity: 1;' + : `background-color: ${elToBackground};`; + const keyframesFromTween = elFromTween === void 0 + ? '' + : ` + @keyframes ${qAnimId}-from-tween { + 0% { + opacity: ${options.tweenFromOpacity}; + margin: 0; + border-width: ${elFromBorderWidth}; + border-style: ${elFromBorderStyle}; + border-color: ${elFromBorderColor}; + border-radius: ${elFromBorderRadius}; + z-index: ${elFromZIndex}; + transform-origin: 0 0; + transform: ${elFromTransform}; + ${resizeFromTween} + } + + 100% { + opacity: 0; + margin: 0; + border-width: ${elToBorderWidth}; + border-style: ${elToBorderStyle}; + border-color: ${elToBorderColor}; + border-radius: ${elToBorderRadius}; + z-index: ${elToZIndex}; + transform-origin: 0 0; + ${resizeToTween} + } + } + `; + const keyframesFrom = options.hideFromClone === true || elSharedSize === true + ? '' + : ` + @keyframes ${qAnimId}-from { + 0% { + margin: ${elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0}px ${elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0}px; + width: ${elFromCloneWidth + elFromPosition.marginH}px; + height: ${elFromCloneHeight + elFromPosition.marginV}px; + } + + 100% { + margin: 0; + width: 0; + height: 0; + } + } + `; + const keyframeToStart = elSharedSize === true + ? ` + margin: ${elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0}px ${elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0}px; + width: ${elFromCloneWidth + elFromPosition.marginH}px; + height: ${elFromCloneHeight + elFromPosition.marginV}px; + ` + : ` + margin: 0; + width: 0; + height: 0; + `; + const keyframesTo = options.keepToClone === true + ? '' + : ` + @keyframes ${qAnimId}-to { + 0% { + ${keyframeToStart} + } + + 100% { + margin: ${elToParentHeightDiff < 0 ? elToParentHeightDiff / 2 : 0}px ${elToParentWidthDiff < 0 ? elToParentWidthDiff / 2 : 0}px; + width: ${elToCloneWidth + elToPosition.marginH}px; + height: ${elToCloneHeight + elToPosition.marginV}px; + } + } + `; + style.innerHTML = ` + @keyframes ${qAnimId} { + 0% { + margin: 0; + border-width: ${elFromBorderWidth}; + border-style: ${elFromBorderStyle}; + border-color: ${elFromBorderColor}; + border-radius: ${elFromBorderRadius}; + background-color: ${elFromBackground}; + z-index: ${elFromZIndex}; + transform-origin: 0 0; + ${resizeFrom} + ${tweenFrom} + } + + 100% { + margin: 0; + border-width: ${elToBorderWidth}; + border-style: ${elToBorderStyle}; + border-color: ${elToBorderColor}; + border-radius: ${elToBorderRadius}; + background-color: ${elToBackground}; + z-index: ${elToZIndex}; + transform-origin: 0 0; + transform: ${elToTransform}; + ${resizeTo} + ${tweenTo} + } + } + + ${keyframesFrom} + + ${keyframesFromTween} + + ${keyframesTo} + `; + document.head.appendChild(style); + + let animationDirection = 'normal'; + + elFromClone.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}-from`; + if (elFromTween !== void 0) { + elFromTween.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}-from-tween`; + } + elToClone.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}-to`; + elTo.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}`; + + const cleanup = evt => { + if (evt === Object(evt) && evt.animationName !== qAnimId) { + return + } + + elTo.removeEventListener('animationend', cleanup); + elTo.removeEventListener('animationcancel', cleanup); + + commonCleanup(); + + // we clean the animations + style.remove(); + }; + + elFrom.qMorphCancel = () => { + elFrom.qMorphCancel = void 0; + cancelStatus = true; + cleanup(); + }; + elTo.qMorphCancel = () => { + elTo.qMorphCancel = void 0; + cancelStatus = true; + cleanup(); + }; + + elTo.addEventListener('animationend', cleanup); + elTo.addEventListener('animationcancel', cleanup); + + cancel = abort => { + // we are not in a morph that we can cancel + if (cancelStatus === true || !elTo || !elFromClone || !elToClone) { + return false + } + + if (abort === true) { + cleanup(); + + return true + } + + endElementTo = endElementTo !== true; + + animationDirection = animationDirection === 'normal' ? 'reverse' : 'normal'; + + elFromClone.style.animationDirection = animationDirection; + elFromTween.style.animationDirection = animationDirection; + elToClone.style.animationDirection = animationDirection; + elTo.style.animationDirection = animationDirection; + + return true + }; + } + }; + + if ( + options.waitFor > 0 || + options.waitFor === 'transitionend' || + (options.waitFor === Object(options.waitFor) && typeof options.waitFor.then === 'function') + ) { + const delayPromise = options.waitFor > 0 + ? new Promise(resolve => setTimeout(resolve, options.waitFor)) + : ( + options.waitFor === 'transitionend' + ? new Promise(resolve => { + const timer = setTimeout(() => { + endFn(); + }, 400); + + const endFn = ev => { + clearTimeout(timer); + + if (elTo) { + elTo.removeEventListener('transitionend', endFn); + elTo.removeEventListener('transitioncancel', endFn); + } + + resolve(); + }; + + elTo.addEventListener('transitionend', endFn); + elTo.addEventListener('transitioncancel', endFn); + }) + : options.waitFor + ); + + delayPromise + .then(animate) + .catch(() => { + typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel(); + }); + } + else { + animate(); + } + }; + + typeof _options.onToggle === 'function' && _options.onToggle(); + requestAnimationFrame(calculateFinalState); + + // we return the cancel function + // returns: + // false if the cancel cannot be performed (the morph ended already or has not started) + // true else + return abort => cancel(abort) + } + + const morphGroups = {}; + const mods = [ + 'resize', 'useCSS', 'hideFromClone', 'keepToClone', 'tween' + ]; + const props$1 = [ + 'duration', 'delay', 'easing', 'fill', + 'classes', 'style', 'duration', + 'tweenFromOpacity', 'tweenToOpacity', + 'waitFor', 'onEnd' + ]; + + function changeClass (ctx, action) { + if (ctx.clsAction !== action) { + ctx.clsAction = action; + ctx.el.classList[action]('q-morph--invisible'); + } + } + + function trigger (group) { + if (group.animating === true || group.queue.length < 2) { + return + } + + const [ from, to ] = group.queue; + + group.animating = true; + from.animating = true; + to.animating = true; + + changeClass(from, 'remove'); + changeClass(to, 'remove'); + + const cancelFn = morph({ + from: from.el, + to: to.el, + onToggle () { + changeClass(from, 'add'); + changeClass(to, 'remove'); + }, + ...to.opts, + onEnd (dir, aborted) { + to.opts.onEnd !== void 0 && to.opts.onEnd(dir, aborted); + + if (aborted === true) { + return + } + + from.animating = false; + to.animating = false; + + group.animating = false; + group.cancel = void 0; + group.queue.shift(); + + trigger(group); + } + }); + + group.cancel = () => { + cancelFn(true); // abort + group.cancel = void 0; + }; + } + + function changeModel (ctx, name) { + if (ctx.name === name) { + const group = morphGroups[ctx.group]; + + // if group is not registered + if (group === void 0) { + morphGroups[ctx.group] = { + name: ctx.group, + model: name, + queue: [ ctx ], + animating: false + }; + + changeClass(ctx, 'remove'); + } + // if model changed + else if (group.model !== name) { + group.model = name; + group.queue.push(ctx); + + if (group.animating === false && group.queue.length === 2) { + trigger(group); + } + } + + return + } + + if (ctx.animating === false) { + changeClass(ctx, 'add'); + } + } + + function setOptsFromValue (ctx, value) { + if (value.group !== void 0) { + ctx.group = value.group; + } + if (value.name !== void 0) { + ctx.name = value.name; + } + + const opts = ctx.opts; + + props$1.forEach(name => { + if (value[name] !== void 0) { + opts[name] = value[name]; + } + }); + } + + function updateArg (ctx, arg) { + const opts = typeof arg === 'string' && arg.length > 0 + ? arg.split(':') : []; + + ctx.name = opts[0]; + ctx.group = opts[1]; + + Object.assign(ctx.opts, { + duration: isNaN(opts[2]) === true + ? 300 + : parseFloat(opts[2]), + waitFor: opts[3] + }); + } + + function updateModifiers (ctx, modifiers) { + const opts = ctx.opts; + + mods.forEach(name => { + opts[name] = modifiers[name] === true; + }); + } + + function updateValue (ctx, value) { + let model; + + if (Object(value) === value) { + model = '' + value.model; + setOptsFromValue(ctx, value); + updateModifiers(ctx, value); + } + else { + model = '' + value; + } + + if (model !== ctx.model) { + ctx.model = model; + changeModel(ctx, model); + } + else if (ctx.animating === false && ctx.clsAction !== void 0) { + // ensure HMR + ctx.el.classList[ctx.clsAction]('q-morph--invisible'); + } + } + + function destroy$5 (el) { + const ctx = el.__qmorph; + + if (ctx !== void 0) { + const group = morphGroups[ctx.group]; + + if (group !== void 0) { + const index = group.queue.indexOf(ctx); + + if (index !== -1) { + group.queue = group.queue.filter(item => item !== ctx); + + if (group.queue.length === 0) { + group.cancel !== void 0 && group.cancel(); + delete morphGroups[ctx.group]; + } + } + } + + if (ctx.clsAction === 'add') { + el.classList.remove('q-morph--invisible'); + } + + delete el.__qmorph; + } + } + + var Morph = { + name: 'morph', + + inserted (el, { modifiers, arg, value }) { + if (el.__qmorph !== void 0) { + destroy$5(el); + el.__qmorph_destroyed = true; + } + + const ctx = { + el, + + arg, + + animating: false, + opts: {} + }; + + updateModifiers(ctx, modifiers); + updateArg(ctx, arg); + updateValue(ctx, value); + + el.__qmorph = ctx; + }, + + update (el, { modifiers, arg, value }) { + const ctx = el.__qmorph; + if (ctx !== void 0) { + updateModifiers(ctx, modifiers); + if (ctx.arg !== arg) { + updateArg(ctx, arg); + } + updateValue(ctx, value); + } + }, + + unbind (el) { + if (el.__qmorph_destroyed === void 0) { + destroy$5(el); + } + else { + delete el.__qmorph_destroyed; + } + } + }; + + const defaultCfg = { + childList: true, + subtree: true, + attributes: true, + characterData: true, + attributeOldValue: true, + characterDataOldValue: true + }; + + function update$2 (el, ctx, value) { + ctx.handler = value; + ctx.observer !== void 0 && ctx.observer.disconnect(); + + ctx.observer = new MutationObserver(list => { + if (typeof ctx.handler === 'function') { + const res = ctx.handler(list); + if (res === false || ctx.once === true) { + destroy$4(el); + } + } + }); + + ctx.observer.observe(el, ctx.opts); + } + + function destroy$4 (el) { + const ctx = el.__qmutation; + + if (ctx !== void 0) { + ctx.observer !== void 0 && ctx.observer.disconnect(); + delete el.__qmutation; + } + } + + var Mutation = { + name: 'mutation', + + inserted (el, { modifiers: { once, ...opts }, value }) { + if (el.__qmutation !== void 0) { + destroy$4(el); + el.__qmutation_destroyed = true; + } + + const ctx = { + once + }; + + ctx.opts = Object.keys(opts).length === 0 + ? defaultCfg + : opts; + update$2(el, ctx, value); + + el.__qmutation = ctx; + }, + + update (el, { modifiers: { once, ...opts }, value, oldValue }) { + const ctx = el.__qmutation; + if (ctx !== void 0) { + const newOpts = Object.keys(opts).length === 0 + ? defaultCfg + : opts; + if ( + oldValue !== value || + isDeepEqual(ctx.opts, newOpts) !== true + ) { + ctx.opts = newOpts; + update$2(el, ctx, value); + } + } + }, + + unbind (el) { + if (el.__qmutation_destroyed === void 0) { + destroy$4(el); + } + else { + delete el.__qmutation_destroyed; + } + } + }; + + function update$1 (ctx, { value, oldValue }) { + if (typeof value !== 'function') { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + return + } + + ctx.handler = value; + if (typeof oldValue !== 'function') { + ctx.scrollTarget.addEventListener('scroll', ctx.scroll, listenOpts.passive); + ctx.scroll(); + } + } + + function destroy$3 (el) { + const ctx = el.__qscrollfire; + if (ctx !== void 0) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + ctx.scroll.cancel(); + delete el.__qscrollfire; + } + } + + var ScrollFire = { + name: 'scroll-fire', + + inserted (el, binding) { + if (el.__qscrollfire !== void 0) { + destroy$3(el); + el.__qscrollfire_destroyed = true; + } + + const ctx = { + scrollTarget: getScrollTarget(el), + scroll: debounce(() => { + let containerBottom, elBottom; + + if (ctx.scrollTarget === window) { + elBottom = el.getBoundingClientRect().bottom; + containerBottom = window.innerHeight; + } + else { + elBottom = offset(el).top + height(el); + containerBottom = offset(ctx.scrollTarget).top + height(ctx.scrollTarget); + } + + if (elBottom > 0 && elBottom < containerBottom) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + ctx.handler(el); + } + }, 25) + }; + + update$1(ctx, binding); + + el.__qscrollfire = ctx; + }, + + update (el, binding) { + if (el.__qscrollfire !== void 0 && binding.value !== binding.oldValue) { + update$1(el.__qscrollfire, binding); + } + }, + + unbind (el) { + if (el.__qscrollfire_destroyed === void 0) { + destroy$3(el); + } + else { + delete el.__qscrollfire_destroyed; + } + } + }; + + function update (ctx, { value, oldValue }) { + if (typeof value !== 'function') { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + return + } + + ctx.handler = value; + if (typeof oldValue !== 'function') { + ctx.scrollTarget.addEventListener('scroll', ctx.scroll, listenOpts.passive); + } + } + + function destroy$2 (el) { + const ctx = el.__qscroll; + if (ctx !== void 0) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive); + delete el.__qscroll; + } + } + + var Scroll = { + name: 'scroll', + + inserted (el, binding) { + if (el.__qscroll !== void 0) { + destroy$2(el); + el.__qscroll_destroyed = true; + } + + const ctx = { + scrollTarget: getScrollTarget(el), + scroll () { + ctx.handler( + getVerticalScrollPosition(ctx.scrollTarget), + getHorizontalScrollPosition(ctx.scrollTarget) + ); + } + }; + + update(ctx, binding); + + el.__qscroll = ctx; + }, + + update (el, binding) { + if (el.__qscroll !== void 0 && binding.oldValue !== binding.value) { + update(el.__qscroll, binding); + } + }, + + unbind (el) { + if (el.__qscroll_destroyed === void 0) { + destroy$2(el); + } + else { + delete el.__qscroll_destroyed; + } + } + }; + + function parseArg$1 (arg) { + // duration in ms, touch in pixels, mouse in pixels + const data = [600, 5, 7]; + + if (typeof arg === 'string' && arg.length > 0) { + arg.split(':').forEach((val, index) => { + const v = parseInt(val, 10); + v && (data[index] = v); + }); + } + + return { + duration: data[0], + touchSensitivity: data[1], + mouseSensitivity: data[2] + } + } + + function destroy$1 (el) { + const ctx = el.__qtouchhold; + if (ctx !== void 0) { + cleanEvt(ctx, 'main'); + cleanEvt(ctx, 'temp'); + + clearTimeout(ctx.timer); + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + delete el.__qtouchhold; + } + } + + function configureEvents$1 (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse'); + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', `passive${modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : ''}` ] + ]); + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch'); + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', `passive${modifiers.capture === true ? 'Capture' : ''}` ], + [ el, 'touchmove', 'noop', 'passiveCapture' ] + ]); + } + + ctx.modifiers = modifiers; + } + + var TouchHold = { + name: 'touch-hold', + + bind (el, { modifiers, arg, value }) { + if (el.__qtouchhold !== void 0) { + destroy$1(el); + el.__qtouchhold_destroyed = true; + } + + const ctx = { + handler: value, + arg, + modifiers: { capture: null }, // make sure touch listeners are initiated + + ...parseArg$1(arg), + + noop, + + mouseStart (evt) { + if (typeof ctx.handler === 'function' && leftClick(evt) === true) { + addEvt(ctx, 'temp', [ + [document, 'mousemove', 'move', 'passiveCapture'], + [document, 'click', 'end', 'notPassiveCapture'] + ]); + ctx.start(evt, true); + } + }, + + touchStart (evt) { + if (evt.target !== void 0 && typeof ctx.handler === 'function') { + const target = evt.target; + addEvt(ctx, 'temp', [ + [target, 'touchmove', 'move', 'passiveCapture'], + [target, 'touchcancel', 'end', 'notPassiveCapture'], + [target, 'touchend', 'end', 'notPassiveCapture'] + ]); + ctx.start(evt); + } + }, + + start (evt, mouseEvent) { + ctx.origin = position(evt); + + const startTime = Date.now(); + + if (client.is.mobile === true) { + document.body.classList.add('non-selectable'); + clearSelection(); + + ctx.styleCleanup = withDelay => { + ctx.styleCleanup = void 0; + + const remove = () => { + document.body.classList.remove('non-selectable'); + }; + + if (withDelay === true) { + clearSelection(); + setTimeout(remove, 10); + } + else { remove(); } + }; + } + + ctx.triggered = false; + ctx.sensitivity = mouseEvent === true + ? ctx.mouseSensitivity + : ctx.touchSensitivity; + + ctx.timer = setTimeout(() => { + clearSelection(); + ctx.triggered = true; + + ctx.handler({ + evt, + touch: mouseEvent !== true, + mouse: mouseEvent === true, + position: ctx.origin, + duration: Date.now() - startTime + }); + }, ctx.duration); + }, + + move (evt) { + const { top, left } = position(evt); + if ( + Math.abs(left - ctx.origin.left) >= ctx.sensitivity || + Math.abs(top - ctx.origin.top) >= ctx.sensitivity + ) { + clearTimeout(ctx.timer); + } + }, + + end (evt) { + cleanEvt(ctx, 'temp'); + + // delay needed otherwise selection still occurs + ctx.styleCleanup !== void 0 && ctx.styleCleanup(ctx.triggered); + + if (ctx.triggered === true) { + evt !== void 0 && stopAndPrevent(evt); + } + else { + clearTimeout(ctx.timer); + } + } + }; + + el.__qtouchhold = ctx; + + configureEvents$1(el, ctx, modifiers); + }, + + update (el, { modifiers, arg, value, oldValue }) { + const ctx = el.__qtouchhold; + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end(); + ctx.handler = value; + } + + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg$1(arg)); + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents$1(el, ctx, modifiers); + } + } + }, + + unbind (el) { + if (el.__qtouchhold_destroyed === void 0) { + destroy$1(el); + } + else { + delete el.__qtouchhold_destroyed; + } + } + }; + + const + keyCodes = { + esc: 27, + tab: 9, + enter: 13, + space: 32, + up: 38, + left: 37, + right: 39, + down: 40, + 'delete': [8, 46] + }, + keyRegex = new RegExp(`^([\\d+]+|${Object.keys(keyCodes).join('|')})$`, 'i'); + + function shouldEnd (evt, origin) { + const { top, left } = position(evt); + + return Math.abs(left - origin.left) >= 7 || + Math.abs(top - origin.top) >= 7 + } + + function parseArg (arg) { + const durations = typeof arg === 'string' && arg.length > 0 + ? arg.split(':').map(val => parseInt(val, 10)) + : [0, 600, 300]; + + return { + durations, + durationsLast: durations.length - 1 + } + } + + function destroy (el) { + const ctx = el.__qtouchrepeat; + if (ctx !== void 0) { + clearTimeout(ctx.timer); + + cleanEvt(ctx, 'main_mouse'); + cleanEvt(ctx, 'main_touch'); + cleanEvt(ctx, 'main_kbd'); + cleanEvt(ctx, 'temp'); + + ctx.styleCleanup !== void 0 && ctx.styleCleanup(); + + delete el.__qtouchrepeat; + } + } + + function configureEvents (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse'); + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', `passive${modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : ''}` ] + ]); + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch'); + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', `passive${modifiers.capture === true ? 'Capture' : ''}` ], + [ el, 'touchmove', 'noop', 'passiveCapture' ] + ]); + } + + const keyboard = Object.keys(modifiers).reduce((acc, key) => { + if (keyRegex.test(key) === true) { + const keyCode = isNaN(parseInt(key, 10)) ? keyCodes[key.toLowerCase()] : parseInt(key, 10); + keyCode >= 0 && acc.push(keyCode); + } + return acc + }, []); + + if ((ctx.keyboard.length > 0) !== (keyboard.length > 0) || ctx.modifiers.keyCapture !== modifiers.keyCapture || ctx.modifiers.keycapture !== modifiers.keycapture) { + ctx.keyboard.length > 0 && cleanEvt(ctx, 'main_kbd'); + + keyboard.length > 0 && addEvt(ctx, 'main_kbd', [ + [ el, 'keydown', 'keyboardStart', `notPassive${modifiers.keyCapture === true || modifiers.keycapture === true ? 'Capture' : ''}` ] + ]); + } + + ctx.modifiers = modifiers; + ctx.keyboard = keyboard; + } + + var TouchRepeat = { + name: 'touch-repeat', + + bind (el, { modifiers, arg, value }) { + if (el.__qtouchrepeat !== void 0) { + destroy(el); + el.__qtouchrepeat_destroyed = true; + } + + const ctx = { + keyboard: [], + handler: value, + arg, + modifiers: { capture: null }, // make sure touch listeners are initiated + + ...parseArg(arg), + + noop, + + mouseStart (evt) { + if (ctx.event === void 0 && typeof ctx.handler === 'function' && leftClick(evt) === true) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', 'passiveCapture' ], + [ document, 'click', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt, true); + } + }, + + keyboardStart (evt) { + if (typeof ctx.handler === 'function' && isKeyCode(evt, ctx.keyboard) === true) { + if (ctx.durations[0] === 0 || ctx.event !== void 0) { + stopAndPrevent(evt); + el.focus(); + if (ctx.event !== void 0) { + return + } + } + + addEvt(ctx, 'temp', [ + [ document, 'keyup', 'end', 'notPassiveCapture' ], + [ document, 'click', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt, false, true); + } + }, + + touchStart (evt) { + if (evt.target !== void 0 && typeof ctx.handler === 'function') { + const target = evt.target; + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'passiveCapture' ], + [ target, 'touchcancel', 'end', 'notPassiveCapture' ], + [ target, 'touchend', 'end', 'notPassiveCapture' ] + ]); + ctx.start(evt); + } + }, + + start (evt, mouseEvent, keyboardEvent) { + if (keyboardEvent !== true) { + ctx.origin = position(evt); + } + + function styleCleanup (withDelay) { + ctx.styleCleanup = void 0; + + document.documentElement.style.cursor = ''; + + const remove = () => { + document.body.classList.remove('non-selectable'); + }; + + if (withDelay === true) { + clearSelection(); + setTimeout(remove, 10); + } + else { remove(); } + } + + if (client.is.mobile === true) { + document.body.classList.add('non-selectable'); + clearSelection(); + ctx.styleCleanup = styleCleanup; + } + + ctx.event = { + touch: mouseEvent !== true && keyboardEvent !== true, + mouse: mouseEvent === true, + keyboard: keyboardEvent === true, + startTime: Date.now(), + repeatCount: 0 + }; + + const fn = () => { + if (ctx.event === void 0) { + return + } + + if (ctx.event.repeatCount === 0) { + ctx.event.evt = evt; + + if (keyboardEvent === true) { + ctx.event.keyCode = evt.keyCode; + } + else { + ctx.event.position = position(evt); + } + + if (client.is.mobile !== true) { + document.documentElement.style.cursor = 'pointer'; + document.body.classList.add('non-selectable'); + clearSelection(); + ctx.styleCleanup = styleCleanup; + } + } + + ctx.event.duration = Date.now() - ctx.event.startTime; + ctx.event.repeatCount += 1; + + ctx.handler(ctx.event); + + const index = ctx.durationsLast < ctx.event.repeatCount + ? ctx.durationsLast + : ctx.event.repeatCount; + + ctx.timer = setTimeout(fn, ctx.durations[index]); + }; + + if (ctx.durations[0] === 0) { + fn(); + } + else { + ctx.timer = setTimeout(fn, ctx.durations[0]); + } + }, + + move (evt) { + if (ctx.event !== void 0 && shouldEnd(evt, ctx.origin) === true) { + clearTimeout(ctx.timer); + } + }, + + end (evt) { + if (ctx.event === void 0) { + return + } + + ctx.styleCleanup !== void 0 && ctx.styleCleanup(true); + evt !== void 0 && ctx.event.repeatCount > 0 && stopAndPrevent(evt); + + cleanEvt(ctx, 'temp'); + clearTimeout(ctx.timer); + + ctx.event = void 0; + } + }; + + el.__qtouchrepeat = ctx; + + configureEvents(el, ctx, modifiers); + }, + + update (el, { modifiers, arg, value, oldValue }) { + const ctx = el.__qtouchrepeat; + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end(); + ctx.handler = value; + } + + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg(arg)); + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents(el, ctx, modifiers); + } + } + }, + + unbind (el) { + if (el.__qtouchrepeat_destroyed === void 0) { + destroy(el); + } + else { + delete el.__qtouchrepeat_destroyed; + } + } + }; + + var directives = /*#__PURE__*/Object.freeze({ + __proto__: null, + ClosePopup: ClosePopup, + GoBack: GoBack, + Intersection: Intersection, + KeyGroupNavigation: KeyGroupNavigation, + Morph: Morph, + Mutation: Mutation, + Ripple: Ripple, + ScrollFire: ScrollFire, + Scroll: Scroll, + TouchHold: TouchHold, + TouchPan: TouchPan, + TouchRepeat: TouchRepeat, + TouchSwipe: TouchSwipe + }); + + let metaValue; + + function getProp () { + if (Platform.is.winphone) { + return 'msapplication-navbutton-color' + } + if (Platform.is.safari) { + return 'apple-mobile-web-app-status-bar-style' + } + // Chrome, Firefox OS, Opera, Vivaldi + return 'theme-color' + } + + function getMetaTag (v) { + const els = document.getElementsByTagName('META'); + for (const i in els) { + if (els[i].name === v) { + return els[i] + } + } + } + + function setColor (hexColor) { + if (metaValue === void 0) { + // cache it + metaValue = getProp(); + } + + let metaTag = getMetaTag(metaValue); + const newTag = metaTag === void 0; + + if (newTag) { + metaTag = document.createElement('meta'); + metaTag.setAttribute('name', metaValue); + } + + metaTag.setAttribute('content', hexColor); + + if (newTag) { + document.head.appendChild(metaTag); + } + } + + var AddressbarColor = { + install ({ $q, cfg }) { + this.set = isSSR === false && Platform.is.mobile === true && ( + Platform.is.nativeMobile === true || + Platform.is.winphone === true || Platform.is.safari === true || + Platform.is.webkit === true || Platform.is.vivaldi === true + ) + ? hexColor => { + const val = hexColor || getBrand('primary'); + + if (Platform.is.nativeMobile === true && window.StatusBar) { + window.StatusBar.backgroundColorByHexString(val); + } + else { + setColor(val); + } + } + : noop; + + $q.addressbarColor = this; + + cfg.addressbarColor && this.set(cfg.addressbarColor); + } + }; + + const prefixes = {}; + + // needed for consistency across browsers, + // including IE11 which does not return anything + function promisify (target, fn) { + try { + const res = target[fn](); + return res === void 0 + ? Promise.resolve() + : res + } + catch (err) { + return Promise.reject(err) + } + } + + function checkActive (plugin) { + plugin.activeEl = document.fullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement || + document.msFullscreenElement || + null; + + plugin.isActive = plugin.activeEl !== null; + } + + var AppFullscreen = { + isCapable: false, + isActive: false, + activeEl: null, + + request (target) { + if (this.isCapable === true) { + const el = target || document.documentElement; + + if (el !== this.activeEl) { + const q = client.is.ie === true && this.activeEl !== null && el.contains(this.activeEl) + ? this.exit() + : Promise.resolve(); + + return q + .then(() => promisify(el, prefixes.request)) + .catch(error => ( + this.activeEl !== null + ? this.exit().then(() => promisify(el, prefixes.request)) + : Promise.reject(error) + )) + .then(res => { + checkActive(this); + return res + }) + } + } + + return this.__getErr() + }, + + exit () { + return this.isCapable === true && this.isActive === true + ? promisify(document, prefixes.exit).then(res => { + checkActive(this); + return this.isActive ? this.exit() : res + }) + : this.__getErr() + }, + + toggle (target) { + const el = target || document.documentElement; + + return this.activeEl === el + ? this.exit() + : this.request(el) + }, + + install ({ $q }) { + $q.fullscreen = this; + + this.__getErr = () => Promise.resolve(); + + if (isSSR === true) { return } + + prefixes.request = [ + 'requestFullscreen', + 'msRequestFullscreen', 'mozRequestFullScreen', 'webkitRequestFullscreen' + ].find(request => document.documentElement[request] !== void 0); + + this.isCapable = prefixes.request !== void 0; + + if (this.isCapable === false) { + // it means the browser does NOT support it + this.__getErr = () => Promise.reject('Not capable'); + return + } + + prefixes.exit = [ + 'exitFullscreen', + 'msExitFullscreen', 'mozCancelFullScreen', 'webkitExitFullscreen' + ].find(exit => document[exit]); + + checkActive(this) + + ;[ + 'onfullscreenchange', + 'onmsfullscreenchange', 'onwebkitfullscreenchange' + ].forEach(evt => { + document[evt] = () => { + checkActive(this); + }; + }); + + Vue__default["default"].util.defineReactive(this, 'isActive', this.isActive); + Vue__default["default"].util.defineReactive(this, 'activeEl', this.activeEl); + } + }; + + var AppVisibility = { + appVisible: false, + + install ({ $q }) { + if (isSSR === true) { + this.appVisible = $q.appVisible = true; + return + } + + let prop, evt; + + if (typeof document.hidden !== 'undefined') { // Opera 12.10 and Firefox 18 and later support + prop = 'hidden'; + evt = 'visibilitychange'; + } + else if (typeof document.msHidden !== 'undefined') { + prop = 'msHidden'; + evt = 'msvisibilitychange'; + } + else if (typeof document.webkitHidden !== 'undefined') { + prop = 'webkitHidden'; + evt = 'webkitvisibilitychange'; + } + + const update = () => { + this.appVisible = $q.appVisible = !document[prop]; + }; + + update(); + + if (evt && typeof document[prop] !== 'undefined') { + Vue__default["default"].util.defineReactive($q, 'appVisible', this.appVisible); + document.addEventListener(evt, update, false); + } + } + }; + + const optsGrid = { + staticClass: 'row items-stretch justify-start', + attrs: { role: 'list' } + }; + const optsList = { attrs: { role: 'list' } }; + const attrsGridItem = { tabindex: 0, role: 'listitem' }; + + var BottomSheet$1 = Vue__default["default"].extend({ + name: 'BottomSheetPlugin', + + mixins: [ DarkMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + title: String, + message: String, + actions: Array, + + grid: Boolean, + + cardClass: [String, Array, Object], + cardStyle: [String, Array, Object] + }, + + computed: { + dialogProps () { + return { + ...this.qAttrs, + position: 'bottom' + } + } + }, + + methods: { + show () { + this.$refs.dialog.show(); + }, + + hide () { + this.$refs.dialog.hide(); + }, + + onOk (action) { + this.$emit('ok', action); + this.hide(); + }, + + __getGrid (h) { + return this.actions.map(action => { + const img = action.avatar || action.img; + + return action.label === void 0 + ? h(QSeparator, { + staticClass: 'col-all', + props: { dark: this.dark } + }) + : h('div', { + staticClass: 'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position', + class: action.classes, + attrs: attrsGridItem, + on: { + click: () => this.onOk(action), + keyup: e => { + e.keyCode === 13 && this.onOk(action); + } + } + }, [ + h('div', { staticClass: 'q-focus-helper' }), + + action.icon + ? h(QIcon, { props: { name: action.icon, color: action.color } }) + : ( + img + ? h('img', { + attrs: { src: img }, + staticClass: action.avatar ? 'q-bottom-sheet__avatar' : null + }) + : h('div', { staticClass: 'q-bottom-sheet__empty-icon' }) + ), + + h('div', [ action.label ]) + ]) + }) + }, + + __getList (h) { + return this.actions.map(action => { + const img = action.avatar || action.img; + + return action.label === void 0 + ? h(QSeparator, { props: { spaced: true, dark: this.dark } }) + : h(QItem, { + staticClass: 'q-bottom-sheet__item', + class: action.classes, + props: { + tabindex: 0, + clickable: true, + dark: this.dark + }, + on: { + click: () => this.onOk(action), + keyup: e => { + e.keyCode === 13 && this.onOk(action); + } + } + }, [ + h(QItemSection, { props: { avatar: true } }, [ + action.icon + ? h(QIcon, { props: { name: action.icon, color: action.color } }) + : ( + img + ? h('img', { + attrs: { src: img }, + staticClass: action.avatar ? 'q-bottom-sheet__avatar' : null + }) + : null + ) + ]), + h(QItemSection, [ action.label ]) + ]) + }) + } + }, + + render (h) { + const child = []; + + this.title && child.push( + h(QCardSection, { + staticClass: 'q-dialog__title' + }, [ this.title ]) + ); + + this.message && child.push( + h(QCardSection, { + staticClass: 'q-dialog__message' + }, [ this.message ]) + ); + + child.push( + this.grid === true + ? h('div', optsGrid, this.__getGrid(h)) + : h('div', optsList, this.__getList(h)) + ); + + return h(QDialog, { + key: 'dialog', + ref: 'dialog', + props: this.dialogProps, + on: cache(this, 'hide', { + hide: () => { + this.$emit('hide'); + } + }) + }, [ + h(QCard, { + staticClass: `q-bottom-sheet q-bottom-sheet--${this.grid === true ? 'grid' : 'list'}` + + ` q-bottom-sheet--${this.darkSuffix} q-${this.darkSuffix}`, + style: this.cardStyle, + class: this.cardClass + }, child) + ]) + } + }); + + const ssrAPI = { + onOk: () => ssrAPI, + okCancel: () => ssrAPI, + hide: () => ssrAPI, + update: () => ssrAPI + }; + + function merge (target, source) { + for (const key in source) { + if (key !== 'spinner' && Object(source[key]) === source[key]) { + target[key] = Object(target[key]) !== target[key] + ? {} + : { ...target[key] }; + + merge(target[key], source[key]); + } + else { + target[key] = source[key]; + } + } + } + + let appRoot; + + function getDialogParent (parent, root) { + if (parent !== void 0) { return parent } + if (root !== void 0) { return root } + + if (appRoot === void 0) { + const elRoot = document.getElementById('q-app'); + + if (elRoot && elRoot.__vue__) { + appRoot = elRoot.__vue__.$root; + } + } + + return appRoot + } + + function globalDialog (DefaultComponent) { + return ({ className, class: klass, style, component, root, parent, ...props }) => { + if (isSSR === true) { return ssrAPI } + + klass !== void 0 && (props.cardClass = klass); + style !== void 0 && (props.cardStyle = style); + + const isCustom = component !== void 0; + let DialogComponent, attrs; + + if (isCustom === true) { + DialogComponent = component; + } + else { + DialogComponent = DefaultComponent; + attrs = props; + } + + const + okFns = [], + cancelFns = [], + API = { + onOk (fn) { + okFns.push(fn); + return API + }, + onCancel (fn) { + cancelFns.push(fn); + return API + }, + onDismiss (fn) { + okFns.push(fn); + cancelFns.push(fn); + return API + }, + hide () { + vm.$refs.dialog.hide(); + return API + }, + update ({ className, class: klass, style, component, root, parent, ...cfg }) { + if (vm !== null) { + klass !== void 0 && (cfg.cardClass = klass); + style !== void 0 && (cfg.cardStyle = style); + + if (isCustom === true) { + Object.assign(props, cfg); + } + else { + merge(props, cfg); + + // need to change "attrs" reference to + // actually reflect it in underlying component + // when we force update it + attrs = { ...props }; + } + + vm.$forceUpdate(); + } + + return API + } + }; + + const node = document.createElement('div'); + getPortalsContainer(document.body).appendChild(node); + + let emittedOK = false; + + const on = { + ok: data => { + emittedOK = true; + okFns.forEach(fn => { fn(data); }); + }, + + hide: () => { + vm.$destroy(); + vm.$el.remove(); + vm = null; + + if (emittedOK !== true) { + cancelFns.forEach(fn => { fn(); }); + } + } + }; + + let vm = new Vue__default["default"]({ + name: 'QGlobalDialog', + + el: node, + parent: getDialogParent(parent, root), + + render (h) { + return h(DialogComponent, { + ref: 'dialog', + props, + attrs, + on + }) + }, + + mounted () { + if (this.$refs.dialog !== void 0) { + this.$refs.dialog.show(); + } + else { + on['hook:mounted'] = () => { + this.$refs.dialog !== void 0 && this.$refs.dialog.show(); + }; + } + } + }); + + return API + } + } + + var BottomSheet = { + install ({ $q }) { + this.create = $q.bottomSheet = globalDialog(BottomSheet$1); + } + }; + + function encode$1 (string) { + return encodeURIComponent(string) + } + + function decode$1 (string) { + return decodeURIComponent(string) + } + + function stringifyCookieValue (value) { + return encode$1( + typeof value === 'string' && value.slice(0, 2) !== 'j:' + ? value + : 'j:' + JSON.stringify(value) + ) + } + + function read (string, reviverFn) { + if (string === '') { + return string + } + + if (string.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + string = string.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + } + + // Replace server-side written pluses with spaces. + // If we can't decode the cookie, ignore it, it's unusable. + // If we can't parse the cookie, ignore it, it's unusable. + string = decode$1(string.replace(/\+/g, ' ')); + + if (string.slice(0, 2) === 'j:') { + try { + return JSON.parse(string.slice(2), reviverFn) + } + catch (e) {} + } + + try { + const parsed = JSON.parse(string, reviverFn); + + return reviverFn !== void 0 || parsed === Object(parsed) || Array.isArray(parsed) === true + ? parsed + : string + } + catch (e) { + return string + } + } + + function getString (msOffset) { + const time = new Date(); + time.setMilliseconds(time.getMilliseconds() + msOffset); + return time.toUTCString() + } + + function parseExpireString (str) { + let timestamp = 0; + + const days = str.match(/(\d+)d/); + const hours = str.match(/(\d+)h/); + const minutes = str.match(/(\d+)m/); + const seconds = str.match(/(\d+)s/); + + if (days) { timestamp += days[1] * 864e+5; } + if (hours) { timestamp += hours[1] * 36e+5; } + if (minutes) { timestamp += minutes[1] * 6e+4; } + if (seconds) { timestamp += seconds[1] * 1000; } + + return timestamp === 0 + ? str + : getString(timestamp) + } + + function set (key, val, opts = {}, ssr) { + let expire, expireValue; + + if (opts.expires !== void 0) { + // if it's a Date Object + if (Object.prototype.toString.call(opts.expires) === '[object Date]') { + expire = opts.expires.toUTCString(); + } + // if it's a String (eg. "15m", "1h", "13d", "1d 15m", "31s") + // possible units: d (days), h (hours), m (minutes), s (seconds) + else if (typeof opts.expires === 'string') { + expire = parseExpireString(opts.expires); + } + // otherwise it must be a Number (defined in days) + else { + expireValue = parseFloat(opts.expires); + expire = isNaN(expireValue) === false + ? getString(expireValue * 864e+5) + : opts.expires; + } + } + + const keyValue = `${encode$1(key)}=${stringifyCookieValue(val)}`; + + const cookie = [ + keyValue, + expire !== void 0 ? '; Expires=' + expire : '', // use expires attribute, max-age is not supported by IE + opts.path ? '; Path=' + opts.path : '', + opts.domain ? '; Domain=' + opts.domain : '', + opts.sameSite ? '; SameSite=' + opts.sameSite : '', + opts.httpOnly ? '; HttpOnly' : '', + opts.secure ? '; Secure' : '', + opts.other ? '; ' + opts.other : '' + ].join(''); + + if (ssr) { + if (ssr.req.qCookies) { + ssr.req.qCookies.push(cookie); + } + else { + ssr.req.qCookies = [ cookie ]; + } + + ssr.res.setHeader('Set-Cookie', ssr.req.qCookies); + + // make temporary update so future get() + // within same SSR timeframe would return the set value + + let all = ssr.req.headers.cookie || ''; + + if (expire !== void 0 && expireValue < 0) { + const oldVal = get(key, ssr, void 0, true); + if (oldVal !== void 0) { + const replaceKeyValue = `${encode$1(key)}=${stringifyCookieValue(oldVal)}`; + all = all + .replace(`${replaceKeyValue}; `, '') + .replace(`; ${replaceKeyValue}`, '') + .replace(`${replaceKeyValue}`, ''); + } + } + else { + all = all + ? `${keyValue}; ${all}` + : cookie; + } + + ssr.req.headers.cookie = all; + } + else { + document.cookie = cookie; + } + } + + function get (key, ssr, reviverFn, raw) { + const + cookieSource = ssr ? ssr.req.headers : document, + cookies = cookieSource.cookie ? cookieSource.cookie.split('; ') : [], + l = cookies.length; + let + result = key ? null : {}, + i = 0, + parts, + name, + cookie; + + for (; i < l; i++) { + parts = cookies[i].split('='); + name = decode$1(parts.shift()); + cookie = parts.join('='); + + if (!key) { + result[name] = read(cookie, reviverFn); + } + else if (key === name) { + result = raw === true ? cookie : read(cookie, reviverFn); + break + } + } + + return result + } + + function remove (key, options, ssr) { + set( + key, + '', + { expires: -1, ...options }, + ssr + ); + } + + function has (key, ssr, reviverFn) { + return get(key, ssr, reviverFn) !== null + } + + function getObject (ssr) { + return { + get: (key, reviverFn) => get(key, ssr, reviverFn), + set: (key, val, opts) => set(key, val, opts, ssr), + has: (key, reviverFn) => has(key, ssr, reviverFn), + remove: (key, options) => remove(key, options, ssr), + getAll: reviverFn => get(null, ssr, reviverFn) + } + } + + var Cookies = { + parseSSR (ssrContext) { + return ssrContext !== void 0 + ? getObject(ssrContext) + : this + }, + + install ({ $q, queues }) { + if (isSSR === true) { + queues.server.push((q, ctx) => { + q.cookies = getObject(ctx.ssr); + }); + } + else { + Object.assign(this, getObject()); + $q.cookies = this; + } + } + }; + + var DialogPlugin = Vue__default["default"].extend({ + name: 'DialogPlugin', + + mixins: [ DarkMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + title: String, + message: String, + prompt: Object, + options: Object, + progress: [ Boolean, Object ], + + html: Boolean, + + ok: { + type: [ String, Object, Boolean ], + default: true + }, + cancel: [ String, Object, Boolean ], + focus: { + type: String, + default: 'ok', + validator: v => ['ok', 'cancel', 'none'].includes(v) + }, + + stackButtons: Boolean, + color: String, + + cardClass: [ String, Array, Object ], + cardStyle: [ String, Array, Object ] + }, + + computed: { + classes () { + return 'q-dialog-plugin' + + ` q-dialog-plugin--${this.darkSuffix} q-${this.darkSuffix}` + + (this.progress !== false ? ' q-dialog-plugin--progress' : '') + }, + + spinner () { + if (this.progress !== false) { + return isObject(this.progress) === true + ? { + component: this.progress.spinner || QSpinner, + props: { color: this.progress.color || this.vmColor } + } + : { + component: QSpinner, + props: { color: this.vmColor } + } + } + }, + + hasForm () { + return this.prompt !== void 0 || this.options !== void 0 + }, + + okLabel () { + return isObject(this.ok) === true + ? this.$q.lang.label.ok + : ( + this.ok === true + ? this.$q.lang.label.ok + : this.ok + ) + }, + + cancelLabel () { + return isObject(this.cancel) === true + ? this.$q.lang.label.cancel + : ( + this.cancel === true + ? this.$q.lang.label.cancel + : this.cancel + ) + }, + + vmColor () { + return this.color || `dialog-plugin-${this.darkSuffix}` + }, + + okDisabled () { + if (this.prompt !== void 0) { + return this.prompt.isValid !== void 0 && + this.prompt.isValid(this.prompt.model) !== true + } + if (this.options !== void 0) { + return this.options.isValid !== void 0 && + this.options.isValid(this.options.model) !== true + } + }, + + okProps () { + return { + color: this.vmColor, + label: this.okLabel, + ripple: false, + disable: this.okDisabled, + ...(isObject(this.ok) === true ? this.ok : { flat: true }) + } + }, + + cancelProps () { + return { + color: this.vmColor, + label: this.cancelLabel, + ripple: false, + ...(isObject(this.cancel) === true ? this.cancel : { flat: true }) + } + } + }, + + methods: { + show () { + this.$refs.dialog.show(); + }, + + hide () { + this.$refs.dialog.hide(); + }, + + getPrompt (h) { + return [ + h(QInput, { + key: 'prompt', + props: { + value: this.prompt.model, + type: this.prompt.type, + + label: this.prompt.label, + stackLabel: this.prompt.stackLabel, + + outlined: this.prompt.outlined, + filled: this.prompt.filled, + standout: this.prompt.standout, + rounded: this.prompt.rounded, + square: this.prompt.square, + + counter: this.prompt.counter, + maxlength: this.prompt.maxlength, + prefix: this.prompt.prefix, + suffix: this.prompt.suffix, + + color: this.vmColor, + dense: true, + autofocus: true, + dark: this.dark + }, + attrs: this.prompt.attrs, + on: cache(this, 'prompt', { + input: v => { this.prompt.model = v; }, + keyup: evt => { + // if ENTER key + if ( + this.okDisabled !== true && + this.prompt.type !== 'textarea' && + isKeyCode(evt, 13) === true + ) { + this.onOk(); + } + } + }) + }) + ] + }, + + getOptions (h) { + return [ + h(QOptionGroup, { + key: 'opts', + props: { + value: this.options.model, + type: this.options.type, + color: this.vmColor, + inline: this.options.inline, + options: this.options.items, + dark: this.dark + }, + on: cache(this, 'opts', { + input: v => { this.options.model = v; } + }) + }) + ] + }, + + getButtons (h) { + const child = []; + + this.cancel && child.push(h(QBtn, { + key: 'cancel', + props: this.cancelProps, + attrs: { 'data-autofocus': this.focus === 'cancel' && this.hasForm !== true }, + on: cache(this, 'cancel', { click: this.onCancel }) + })); + + this.ok && child.push(h(QBtn, { + key: 'ok', + props: this.okProps, + attrs: { 'data-autofocus': this.focus === 'ok' && this.hasForm !== true }, + on: cache(this, 'ok', { click: this.onOk }) + })); + + if (child.length > 0) { + return h(QCardActions, { + staticClass: this.stackButtons === true ? 'items-end' : null, + props: { + vertical: this.stackButtons, + align: 'right' + } + }, child) + } + }, + + onOk () { + this.$emit('ok', cloneDeep(this.getData())); + this.hide(); + }, + + onCancel () { + this.hide(); + }, + + getData () { + return this.prompt !== void 0 + ? this.prompt.model + : (this.options !== void 0 ? this.options.model : void 0) + }, + + getSection (h, staticClass, text) { + return this.html === true + ? h(QCardSection, { + staticClass, + domProps: { innerHTML: text } + }) + : h(QCardSection, { staticClass }, [ text ]) + } + }, + + render (h) { + const child = []; + + this.title && child.push( + this.getSection(h, 'q-dialog__title', this.title) + ); + + this.progress !== false && child.push( + h(QCardSection, { staticClass: 'q-dialog__progress' }, [ + h(this.spinner.component, { + props: this.spinner.props + }) + ]) + ); + + this.message && child.push( + this.getSection(h, 'q-dialog__message', this.message) + ); + + if (this.prompt !== void 0) { + child.push( + h( + QCardSection, + { staticClass: 'scroll q-dialog-plugin__form' }, + this.getPrompt(h) + ) + ); + } + else if (this.options !== void 0) { + child.push( + h(QSeparator, { props: { dark: this.dark } }), + h( + QCardSection, + { staticClass: 'scroll q-dialog-plugin__form' }, + this.getOptions(h) + ), + h(QSeparator, { props: { dark: this.dark } }) + ); + } + + if (this.ok || this.cancel) { + child.push(this.getButtons(h)); + } + + return h(QDialog, { + key: 'dialog', + ref: 'dialog', + + props: { + ...this.qAttrs, + value: this.value + }, + + on: cache(this, 'hide', { + hide: () => { + this.$emit('hide'); + } + }) + }, [ + h(QCard, { + staticClass: this.classes, + style: this.cardStyle, + class: this.cardClass, + props: { dark: this.dark } + }, child) + ]) + } + }); + + var Dialog = { + install ({ $q }) { + this.create = $q.dialog = globalDialog(DialogPlugin); + } + }; + + var LoadingBar = { + isActive: false, + start: noop, + stop: noop, + increment: noop, + setDefaults: noop, + + install ({ $q, cfg }) { + $q.loadingBar = this; + + if (isSSR === true) { + return + } + + const props = cfg.loadingBar !== void 0 + ? { ...cfg.loadingBar } + : {}; + const on = { + start: () => { + this.isActive = true; + }, + + stop: () => { + this.isActive = false; + } + }; + + const bar = new Vue__default["default"]({ + name: 'LoadingBar', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}); + }, + + render: h => h(QAjaxBar, { + ref: 'bar', + props, + on + }) + }).$mount().$refs.bar; + + Object.assign(this, { + start: bar.start, + stop: bar.stop, + increment: bar.increment, + setDefaults: opts => { + isObject(opts) === true && Object.assign(props, opts); + bar.$parent.$forceUpdate(); + } + }); + + Vue__default["default"].util.defineReactive(this, 'isActive', this.isActive); + Vue__default["default"].util.defineReactive(bar, 'isActive', this.isActive); + bar.setDefaults = this.setDefaults; + + document.body.appendChild(bar.$parent.$el); + } + }; + + let + vm$1, + uid$1 = 0, + timeout, + props = {}, + activeGroups = {}; + + const originalDefaults = { + group: '__default_quasar_group__', + delay: 0, + message: false, + spinnerSize: 80, + spinnerColor: 'white', + messageColor: 'white', + backgroundColor: 'black', + spinner: QSpinner, + customClass: '' + }; + + const defaults$1 = { ...originalDefaults }; + + function registerProps (opts) { + if (opts && opts.group !== void 0 && activeGroups[ opts.group ] !== void 0) { + return Object.assign(activeGroups[ opts.group ], opts) + } + + const newProps = isObject(opts) === true && opts.ignoreDefaults === true + ? { ...originalDefaults, ...opts } + : { ...defaults$1, ...opts }; + + activeGroups[ newProps.group ] = newProps; + return newProps + } + + const Loading = { + isActive: false, + + show (opts) { + if (isSSR === true) { return } + + props = registerProps(opts); + const { group } = props; + + props.customClass += ` text-${props.backgroundColor}`; + + this.isActive = true; + + if (vm$1 !== void 0) { + props.uid = uid$1; + vm$1.$forceUpdate(); + } + else { + props.uid = ++uid$1; + clearTimeout(timeout); + + timeout = setTimeout(() => { + timeout = void 0; + + const node = document.createElement('div'); + document.body.appendChild(node); + + vm$1 = new Vue__default["default"]({ + name: 'QLoading', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}); + }, + + el: node, + + mounted () { + preventScroll(true); + }, + + render: (h) => { + return h('transition', { + key: 'tr', + props: { + name: 'q-transition--fade', + appear: true + }, + on: cache(this, 'tr', { + 'after-leave': () => { + // might be called to finalize + // previous leave, even if it was cancelled + if (this.isActive !== true && vm$1 !== void 0) { + preventScroll(false); + vm$1.$destroy(); + vm$1.$el.remove(); + vm$1 = void 0; + } + } + }) + }, [ + this.isActive === true ? h('div', { + staticClass: 'q-loading fullscreen column flex-center z-max', + key: props.uid, + class: props.customClass.trim() + }, [ + h(props.spinner, { + props: { + color: props.spinnerColor, + size: props.spinnerSize + } + }), + + (props.message && h('div', { + class: `text-${props.messageColor}`, + domProps: { + [props.sanitize === true ? 'textContent' : 'innerHTML']: props.message + } + })) || void 0 + ]) : null + ]) + } + }); + }, props.delay); + } + + return paramProps => { + // if we don't have params (or not an Object param) then we need to hide this group + if (paramProps === void 0 || Object(paramProps) !== paramProps) { + this.hide(group); + return + } + + // else we have params so we need to update this group + this.show({ ...paramProps, group }); + } + }, + + hide (group) { + if (this.isActive === true) { + if (group === void 0) { + // clear out any active groups + activeGroups = {}; + } + else if (activeGroups[ group ] === void 0) { + // we've already hidden it so nothing to do + return + } + else { + // remove active group + delete activeGroups[ group ]; + + const keys = Object.keys(activeGroups); + + // if there are other groups registered then + // show last registered one since that one is still active + if (keys.length !== 0) { + // get last registered group + const lastGroup = keys[ keys.length - 1 ]; + this.show({ group: lastGroup }); + return + } + } + + if (timeout !== void 0) { + clearTimeout(timeout); + timeout = void 0; + } + + this.isActive = false; + } + }, + + setDefaults (opts) { + isObject(opts) === true && Object.assign(defaults$1, opts); + }, + + install ({ $q, cfg: { loading } }) { + this.setDefaults(loading); + $q.loading = this; + } + }; + + if (isSSR === false) { + Vue__default["default"].util.defineReactive(Loading, 'isActive', Loading.isActive); + } + + let updateId, ssrTakeover; + + function normalize (meta) { + if (meta.title) { + meta.title = meta.titleTemplate + ? meta.titleTemplate(meta.title) + : meta.title; + delete meta.titleTemplate; + } + [['meta', 'content'], ['link', 'href']].forEach(type => { + const + metaType = meta[type[0]], + metaProp = type[1]; + + for (const name in metaType) { + const metaLink = metaType[name]; + + if (metaLink.template) { + if (Object.keys(metaLink).length === 1) { + delete metaType[name]; + } + else { + metaLink[metaProp] = metaLink.template(metaLink[metaProp] || ''); + delete metaLink.template; + } + } + } + }); + } + + function changed (old, def) { + if (Object.keys(old).length !== Object.keys(def).length) { + return true + } + for (const key in old) { + if (old[key] !== def[key]) { + return true + } + } + } + + function bodyFilter (name) { + return ['class', 'style'].includes(name) === false + } + + function htmlFilter (name) { + return ['lang', 'dir'].includes(name) === false + } + + function diff (meta, other) { + const add = {}, remove = {}; + + if (meta === void 0) { + return { add: other, remove } + } + + if (meta.title !== other.title) { + add.title = other.title; + } + ['meta', 'link', 'script', 'htmlAttr', 'bodyAttr'].forEach(type => { + const old = meta[type], cur = other[type]; + remove[type] = []; + + if (old === void 0 || old === null) { + add[type] = cur; + return + } + + add[type] = {}; + + for (const key in old) { + if (cur.hasOwnProperty(key) === false) { + remove[type].push(key); + } + } + for (const key in cur) { + if (old.hasOwnProperty(key) === false) { + add[type][key] = cur[key]; + } + else if (changed(old[key], cur[key]) === true) { + remove[type].push(key); + add[type][key] = cur[key]; + } + } + }); + + return { add, remove } + } + + function apply ({ add, remove }) { + if (add.title) { + document.title = add.title; + } + + if (Object.keys(remove).length > 0) { + ['meta', 'link', 'script'].forEach(type => { + remove[type].forEach(name => { + document.head.querySelector(`${type}[data-qmeta="${name}"]`).remove(); + }); + }); + remove.htmlAttr.filter(htmlFilter).forEach(name => { + document.documentElement.removeAttribute(name); + }); + remove.bodyAttr.filter(bodyFilter).forEach(name => { + document.body.removeAttribute(name); + }); + } + ['meta', 'link', 'script'].forEach(type => { + const metaType = add[type]; + + for (const name in metaType) { + const tag = document.createElement(type); + for (const att in metaType[name]) { + if (att !== 'innerHTML') { + tag.setAttribute(att, metaType[name][att]); + } + } + tag.setAttribute('data-qmeta', name); + if (type === 'script') { + tag.innerHTML = metaType[name].innerHTML || ''; + } + document.head.appendChild(tag); + } + }); + Object.keys(add.htmlAttr).filter(htmlFilter).forEach(name => { + document.documentElement.setAttribute(name, add.htmlAttr[name] || ''); + }); + Object.keys(add.bodyAttr).filter(bodyFilter).forEach(name => { + document.body.setAttribute(name, add.bodyAttr[name] || ''); + }); + } + + function parseMeta (component, meta) { + if (component._inactive === true) { return } + + // if it has meta + if (hasMeta(component) === true) { + extend(true, meta, component.__qMeta); + + if (component.$options.meta.stopPropagation === true) { + return + } + } + + component.$children.forEach(child => { + parseMeta(child, meta); + }); + } + + function updateClient () { + if (ssrTakeover === true) { + ssrTakeover = false; + this.$root.__currentMeta = window.__Q_META__; + } + + const meta = { + title: '', + titleTemplate: null, + meta: {}, + link: {}, + script: {}, + htmlAttr: {}, + bodyAttr: {} + }; + parseMeta(this.$root, meta); + normalize(meta); + + apply(diff(this.$root.__currentMeta, meta)); + this.$root.__currentMeta = meta; + } + + function getAttr (seed) { + return att => { + const val = seed[att]; + return att + (val !== true && val !== void 0 ? `="${val}"` : '') + } + } + + function getHead (meta) { + let output = ''; + if (meta.title) { + output += `${meta.title}`; + } + ['meta', 'link', 'script'].forEach(type => { + const metaType = meta[type]; + + for (const att in metaType) { + const attrs = Object.keys(metaType[att]) + .filter(att => att !== 'innerHTML') + .map(getAttr(metaType[att])); + + output += `<${type} ${attrs.join(' ')} data-qmeta="${att}">`; + if (type === 'script') { + output += `${metaType[att].innerHTML || ''}`; + } + } + }); + return output + } + + function getServerMeta (app, html, ctx) { + const meta = { + title: '', + titleTemplate: null, + meta: {}, + link: {}, + htmlAttr: {}, + bodyAttr: {}, + noscript: {} + }; + + parseMeta(app, meta); + normalize(meta); + + const nonce = ctx !== void 0 && ctx.nonce !== void 0 + ? ` nonce="${ctx.nonce}"` + : ''; + + const tokens = { + '%%Q_HTML_ATTRS%%': Object.keys(meta.htmlAttr) + .filter(htmlFilter) + .map(getAttr(meta.htmlAttr)) + .join(' '), + '%%Q_HEAD_TAGS%%': getHead(meta), + '%%Q_BODY_ATTRS%%': Object.keys(meta.bodyAttr) + .filter(bodyFilter) + .map(getAttr(meta.bodyAttr)) + .join(' '), + '%%Q_BODY_TAGS%%': Object.keys(meta.noscript) + .map(name => ``) + .join('') + + `window.__Q_META__=${delete meta.noscript && JSON.stringify(meta)}` + }; + + Object.keys(tokens).forEach(key => { + html = html.replace(key, tokens[key]); + }); + + return html + } + + function beforeCreate () { + if (typeof this.$options.meta === 'function') { + if (this.$options.computed === void 0) { + this.$options.computed = {}; + } + this.$options.computed.__qMeta = this.$options.meta; + } + else if (hasMeta(this) === true) { + this.__qMeta = this.$options.meta; + } + } + + // needs to be really fast + function hasMeta (vm) { + return vm.$options.meta !== void 0 && + vm.$options.meta !== null + } + + function triggerMeta () { + hasMeta(this) === true && this.__qMetaUpdate(); + } + + var Meta = { + install ({ queues }) { + if (isSSR === true) { + Vue__default["default"].prototype.$getMetaHTML = app => { + return (html, ctx) => getServerMeta(app, html, ctx) + }; + + Vue__default["default"].mixin({ beforeCreate }); + + queues.server.push((_, ctx) => { + ctx.ssr.Q_HTML_ATTRS += ' %%Q_HTML_ATTRS%%'; + Object.assign(ctx.ssr, { + Q_HEAD_TAGS: '%%Q_HEAD_TAGS%%', + Q_BODY_ATTRS: '%%Q_BODY_ATTRS%%', + Q_BODY_TAGS: '%%Q_BODY_TAGS%%' + }); + }); + } + else { + ssrTakeover = fromSSR; + + Vue__default["default"].mixin({ + beforeCreate, + created () { + if (hasMeta(this) === true) { + this.__qMetaUnwatch = this.$watch('__qMeta', this.__qMetaUpdate); + } + }, + activated: triggerMeta, + deactivated: triggerMeta, + beforeMount: triggerMeta, + destroyed () { + if (hasMeta(this) === true) { + this.__qMetaUnwatch(); + this.__qMetaUpdate(); + } + }, + methods: { + __qMetaUpdate () { + clearTimeout(updateId); + updateId = setTimeout(updateClient.bind(this), 50); + } + } + }); + } + } + }; + + let uid = 0, vm; + + const defaults = {}; + const groups = {}; + const notificationsList = {}; + const positionClass = {}; + const emptyRE = /^\s*$/; + + const positionList = [ + 'top-left', 'top-right', + 'bottom-left', 'bottom-right', + 'top', 'bottom', 'left', 'right', 'center' + ]; + + const badgePositions = [ + 'top-left', 'top-right', + 'bottom-left', 'bottom-right' + ]; + + const notifTypes = { + positive: { + icon: $q => $q.iconSet.type.positive, + color: 'positive' + }, + + negative: { + icon: $q => $q.iconSet.type.negative, + color: 'negative' + }, + + warning: { + icon: $q => $q.iconSet.type.warning, + color: 'warning', + textColor: 'dark' + }, + + info: { + icon: $q => $q.iconSet.type.info, + color: 'info' + }, + + ongoing: { + group: false, + timeout: 0, + spinner: true, + color: 'grey-8' + } + }; + + function addNotification (config, vm, originalApi) { + if (!config) { + return logError('parameter required') + } + + let Api; + const notif = { textColor: 'white' }; + + if (config.ignoreDefaults !== true) { + Object.assign(notif, defaults); + } + + if (isObject(config) === false) { + if (notif.type) { + Object.assign(notif, notifTypes[notif.type]); + } + + config = { message: config }; + } + + Object.assign(notif, notifTypes[config.type || notif.type], config); + + if (typeof notif.icon === 'function') { + notif.icon = notif.icon(vm.$q); + } + + if (!notif.spinner) { + notif.spinner = false; + } + else if (notif.spinner === true) { + notif.spinner = QSpinner; + } + + notif.meta = { + hasMedia: Boolean(notif.spinner !== false || notif.icon || notif.avatar), + hasText: hasContent(notif.message) || hasContent(notif.caption) + }; + + if (notif.position) { + if (positionList.includes(notif.position) === false) { + return logError('wrong position', config) + } + } + else { + notif.position = 'bottom'; + } + + if (notif.timeout === void 0) { + notif.timeout = 5000; + } + else { + const t = parseInt(notif.timeout, 10); + if (isNaN(t) || t < 0) { + return logError('wrong timeout', config) + } + notif.timeout = t; + } + + if (notif.timeout === 0) { + notif.progress = false; + } + else if (notif.progress === true) { + notif.meta.progressClass = 'q-notification__progress' + ( + notif.progressClass + ? ` ${notif.progressClass}` + : '' + ); + + notif.meta.progressStyle = { + animationDuration: `${notif.timeout + 1000}ms` + }; + } + + const actions = ( + Array.isArray(config.actions) === true + ? config.actions + : [] + ).concat( + config.ignoreDefaults !== true && Array.isArray(defaults.actions) === true + ? defaults.actions + : [] + ).concat( + notifTypes[config.type] !== void 0 && Array.isArray(notifTypes[config.type].actions) === true + ? notifTypes[config.type].actions + : [] + ); + + const { closeBtn } = notif; + closeBtn && actions.push({ + label: typeof closeBtn === 'string' + ? closeBtn + : vm.$q.lang.label.close + }); + + notif.actions = actions.map(({ handler, noDismiss, style, class: klass, attrs, ...props }) => ({ + staticClass: klass, + style, + props: { flat: true, ...props }, + attrs, + on: { + click: typeof handler === 'function' + ? () => { + handler(); + noDismiss !== true && dismiss(); + } + : () => { dismiss(); } + } + })); + + if (notif.multiLine === void 0) { + notif.multiLine = notif.actions.length > 1; + } + + Object.assign(notif.meta, { + staticClass: 'q-notification row items-stretch' + + ` q-notification--${notif.multiLine === true ? 'multi-line' : 'standard'}` + + (notif.color !== void 0 ? ` bg-${notif.color}` : '') + + (notif.textColor !== void 0 ? ` text-${notif.textColor}` : '') + + (notif.classes !== void 0 ? ` ${notif.classes}` : ''), + + wrapperClass: 'q-notification__wrapper col relative-position border-radius-inherit ' + + (notif.multiLine === true ? 'column no-wrap justify-center' : 'row items-center'), + + contentClass: 'q-notification__content row items-center' + + (notif.multiLine === true ? '' : ' col'), + + leftClass: notif.meta.hasText === true ? 'additional' : 'single', + + attrs: { + role: 'alert', + ...notif.attrs + } + }); + + if (notif.group === false) { + notif.group = void 0; + notif.meta.group = void 0; + } + else { + if (notif.group === void 0 || notif.group === true) { + // do not replace notifications with different buttons + notif.group = [ + notif.message, + notif.caption, + notif.multiline + ].concat( + notif.actions.map(({ props }) => `${props.label}*${props.icon}`) + ).join('|'); + } + + notif.meta.group = notif.group + '|' + notif.position; + } + + if (notif.actions.length === 0) { + notif.actions = void 0; + } + else { + notif.meta.actionsClass = 'q-notification__actions row items-center ' + + (notif.multiLine === true ? 'justify-end' : 'col-auto') + + (notif.meta.hasMedia === true ? ' q-notification__actions--with-media' : ''); + } + + if (originalApi !== void 0) { + // reset timeout if any + clearTimeout(originalApi.notif.meta.timer); + + // retain uid + notif.meta.uid = originalApi.notif.meta.uid; + + // replace notif + const index = notificationsList[notif.position].indexOf(originalApi.notif); + notificationsList[notif.position][index] = notif; + } + else { + const original = groups[notif.meta.group]; + + // woohoo, it's a new notification + if (original === void 0) { + notif.meta.uid = uid++; + notif.meta.badge = 1; + + if (['left', 'right', 'center'].indexOf(notif.position) !== -1) { + notificationsList[notif.position].splice( + Math.floor(notificationsList[notif.position].length / 2), + 0, + notif + ); + } + else { + const action = notif.position.indexOf('top') > -1 ? 'unshift' : 'push'; + notificationsList[notif.position][action](notif); + } + + if (notif.group !== void 0) { + groups[notif.meta.group] = notif; + } + } + // ok, so it's NOT a new one + else { + // reset timeout if any + clearTimeout(original.meta.timer); + + if (notif.badgePosition !== void 0) { + if (badgePositions.includes(notif.badgePosition) === false) { + return logError('wrong badgePosition', config) + } + } + else { + notif.badgePosition = `top-${notif.position.indexOf('left') > -1 ? 'right' : 'left'}`; + } + + notif.meta.uid = original.meta.uid; + notif.meta.badge = original.meta.badge + 1; + notif.meta.badgeClass = `q-notification__badge q-notification__badge--${notif.badgePosition}` + + (notif.badgeColor !== void 0 ? ` bg-${notif.badgeColor}` : '') + + (notif.badgeTextColor !== void 0 ? ` text-${notif.badgeTextColor}` : '') + + (notif.badgeClass ? ` ${notif.badgeClass}` : ''); + + const index = notificationsList[notif.position].indexOf(original); + notificationsList[notif.position][index] = groups[notif.meta.group] = notif; + } + } + + const dismiss = () => { + removeNotification(notif, vm); + Api = void 0; + }; + + vm.$forceUpdate(); + + if (notif.timeout > 0) { + notif.meta.timer = setTimeout(() => { + dismiss(); + }, notif.timeout + /* show duration */ 1000); + } + + // only non-groupable can be updated + if (notif.group !== void 0) { + return props => { + if (props !== void 0) { + logError('trying to update a grouped one which is forbidden', config); + } + else { + dismiss(); + } + } + } + + Api = { + dismiss, + config, + notif + }; + + if (originalApi !== void 0) { + Object.assign(originalApi, Api); + return + } + + return props => { + // if notification wasn't previously dismissed + if (Api !== void 0) { + // if no params, then we must dismiss the notification + if (props === void 0) { + Api.dismiss(); + } + // otherwise we're updating it + else { + const newNotif = Object.assign({}, Api.config, props, { + group: false, + position: notif.position + }); + + addNotification(newNotif, vm, Api); + } + } + } + } + + function removeNotification (notif, vm) { + clearTimeout(notif.meta.timer); + + const index = notificationsList[notif.position].indexOf(notif); + if (index !== -1) { + if (notif.group !== void 0) { + delete groups[notif.meta.group]; + } + + const el = vm.$refs['' + notif.meta.uid]; + + if (el) { + const { width, height } = getComputedStyle(el); + + el.style.left = `${el.offsetLeft}px`; + el.style.width = width; + el.style.height = height; + } + + notificationsList[notif.position].splice(index, 1); + + vm.$forceUpdate(); + + if (typeof notif.onDismiss === 'function') { + notif.onDismiss(); + } + } + } + + function hasContent (str) { + return str !== void 0 && + str !== null && + emptyRE.test(str) !== true + } + + function logError (error, config) { + console.error(`Notify: ${error}`, config); + return false + } + + const Notifications = { + name: 'QNotifications', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}); + }, + + render (h) { + return h('div', { staticClass: 'q-notifications' }, positionList.map(pos => { + return h('transition-group', { + key: pos, + staticClass: positionClass[pos], + tag: 'div', + props: { + name: `q-notification--${pos}`, + mode: 'out-in' + } + }, notificationsList[pos].map(notif => { + const { meta } = notif; + const mainChild = []; + + if (meta.hasMedia === true) { + if (notif.spinner !== false) { + mainChild.push( + h(notif.spinner, { + staticClass: 'q-notification__spinner q-notification__spinner--' + meta.leftClass, + props: { color: notif.spinnerColor, size: notif.spinnerSize } + }) + ); + } + else if (notif.icon) { + mainChild.push( + h(QIcon, { + staticClass: 'q-notification__icon q-notification__icon--' + meta.leftClass, + attrs: { role: 'img' }, + props: { name: notif.icon, color: notif.iconColor, size: notif.iconSize } + }) + ); + } + else if (notif.avatar) { + mainChild.push( + h(QAvatar, { staticClass: 'q-notification__avatar q-notification__avatar--' + meta.leftClass }, [ + h('img', { attrs: { src: notif.avatar, 'aria-hidden': 'true' } }) + ]) + ); + } + } + + if (meta.hasText === true) { + let msgChild; + const msgData = { staticClass: 'q-notification__message col' }; + + if (notif.html === true) { + msgData.domProps = { + innerHTML: notif.caption + ? `
${notif.message}
${notif.caption}
` + : notif.message + }; + } + else { + const msgNode = [ notif.message ]; + msgChild = notif.caption + ? [ + h('div', msgNode), + h('div', { staticClass: 'q-notification__caption' }, [notif.caption]) + ] + : msgNode; + } + + mainChild.push( + h('div', msgData, msgChild) + ); + } + + const child = [ + h('div', { staticClass: meta.contentClass }, mainChild) + ]; + + notif.progress === true && child.push( + h('div', { + key: `${meta.uid}|p|${meta.badge}`, + staticClass: meta.progressClass, + style: meta.progressStyle + }) + ); + + notif.actions !== void 0 && child.push( + h('div', { + staticClass: meta.actionsClass + }, notif.actions.map(action => h(QBtn, { ...action }))) + ); + + meta.badge > 1 && child.push( + h('div', { + key: `${meta.uid}|${meta.badge}`, + staticClass: meta.badgeClass, + style: notif.badgeStyle + }, [ meta.badge ]) + ); + + return h('div', { + ref: '' + meta.uid, + key: meta.uid, + staticClass: meta.staticClass, + attrs: meta.attrs + }, [ + h('div', { staticClass: meta.wrapperClass }, child) + ]) + })) + })) + }, + + mounted () { + if (this.$q.fullscreen !== void 0 && this.$q.fullscreen.isCapable === true) { + const append = () => { + const newParent = getBodyFullscreenElement(this.$q.fullscreen.activeEl); + + if (this.$el.parentElement !== newParent) { + newParent.appendChild(this.$el); + } + }; + + this.unwatchFullscreen = this.$watch('$q.fullscreen.activeEl', debounce(append, 50)); + + if (this.$q.fullscreen.isActive === true) { + append(); + } + } + }, + + beforeDestroy () { + this.unwatchFullscreen !== void 0 && this.unwatchFullscreen(); + } + }; + + var Notify = { + setDefaults (opts) { + if (isSSR !== true && isObject(opts) === true) { + Object.assign(defaults, opts); + } + }, + + registerType (typeName, typeOpts) { + if (isSSR !== true && isObject(typeOpts) === true) { + notifTypes[typeName] = typeOpts; + } + }, + + install ({ $q }) { + $q.notify = this.create = isSSR === true + ? noop + : opts => addNotification(opts, vm); + + $q.notify.setDefaults = this.setDefaults; + $q.notify.registerType = this.registerType; + + if ($q.config.notify !== void 0) { + this.setDefaults($q.config.notify); + } + + if (isSSR !== true) { + positionList.forEach(pos => { + notificationsList[pos] = []; + + const + vert = ['left', 'center', 'right'].includes(pos) === true ? 'center' : (pos.indexOf('top') > -1 ? 'top' : 'bottom'), + align = pos.indexOf('left') > -1 ? 'start' : (pos.indexOf('right') > -1 ? 'end' : 'center'), + classes = ['left', 'right'].includes(pos) ? `items-${pos === 'left' ? 'start' : 'end'} justify-center` : (pos === 'center' ? 'flex-center' : `items-${align}`); + + positionClass[pos] = `q-notifications__list q-notifications__list--${vert} fixed column no-wrap ${classes}`; + }); + + const node = document.createElement('div'); + document.body.appendChild(node); + + vm = new Vue__default["default"](Notifications); + vm.$mount(node); + } + } + }; + + function encode (value) { + if (isDate(value) === true) { + return '__q_date|' + value.toUTCString() + } + if (isRegexp(value) === true) { + return '__q_expr|' + value.source + } + if (typeof value === 'number') { + return '__q_numb|' + value + } + if (typeof value === 'boolean') { + return '__q_bool|' + (value ? '1' : '0') + } + if (typeof value === 'string') { + return '__q_strn|' + value + } + if (typeof value === 'function') { + return '__q_strn|' + value.toString() + } + if (value === Object(value)) { + return '__q_objt|' + JSON.stringify(value) + } + + // hmm, we don't know what to do with it, + // so just return it as is + return value + } + + function decode (value, reviverFn) { + const length = value.length; + + if (length < 9) { + // then it wasn't encoded by us + return value + } + + const type = value.substr(0, 8); + const source = value.substring(9); + + switch (type) { + case '__q_date': + return new Date(source) + + case '__q_expr': + return new RegExp(source) + + case '__q_numb': + return Number(source) + + case '__q_bool': + return Boolean(source === '1') + + case '__q_strn': + return '' + source + + case '__q_objt': + return JSON.parse(source, reviverFn) + + default: + // hmm, we reached here, we don't know the type, + // then it means it wasn't encoded by us, so just + // return whatever value it is + return value + } + } + + function getEmptyStorage () { + const getVal = () => null; + + return { + has: () => false, + getLength: () => 0, + getItem: getVal, + getIndex: getVal, + getKey: getVal, + getAll: () => {}, + getAllKeys: () => [], + set: noop, + remove: noop, + clear: noop, + isEmpty: () => true + } + } + + function getStorage (type) { + const + webStorage = window[type + 'Storage'], + get = (key, reviverFn) => { + const item = webStorage.getItem(key); + return item + ? decode(item, reviverFn) + : null + }; + + return { + has: (key, reviverFn) => webStorage.getItem(key, reviverFn) !== null, + getLength: () => webStorage.length, + getItem: get, + getIndex: (index, reviverFn) => { + return index < webStorage.length + ? get(webStorage.key(index), reviverFn) + : null + }, + getKey: index => { + return index < webStorage.length + ? webStorage.key(index) + : null + }, + getAll: reviverFn => { + let key; + const result = {}, len = webStorage.length; + + for (let i = 0; i < len; i++) { + key = webStorage.key(i); + result[key] = get(key, reviverFn); + } + + return result + }, + getAllKeys: () => { + const result = [], len = webStorage.length; + + for (let i = 0; i < len; i++) { + result.push(webStorage.key(i)); + } + + return result + }, + set: (key, value) => { webStorage.setItem(key, encode(value)); }, + remove: key => { webStorage.removeItem(key); }, + clear: () => { webStorage.clear(); }, + isEmpty: () => webStorage.length === 0 + } + } + + var LocalStorage = { + install ({ $q }) { + const storage = isSSR === true || client.has.webStorage === false + ? getEmptyStorage() + : getStorage('local'); + + $q.localStorage = storage; + Object.assign(this, storage); + } + }; + + var SessionStorage = { + install ({ $q }) { + const storage = isSSR === true || client.has.webStorage === false + ? getEmptyStorage() + : getStorage('session'); + + $q.sessionStorage = storage; + Object.assign(this, storage); + } + }; + + var plugins = /*#__PURE__*/Object.freeze({ + __proto__: null, + AddressbarColor: AddressbarColor, + AppFullscreen: AppFullscreen, + AppVisibility: AppVisibility, + BottomSheet: BottomSheet, + Cookies: Cookies, + Dark: Dark, + Dialog: Dialog, + Interaction: Interaction, + LoadingBar: LoadingBar, + Loading: Loading, + Meta: Meta, + Notify: Notify, + Platform: Platform, + Screen: Screen, + LocalStorage: LocalStorage, + SessionStorage: SessionStorage + }); + + function fallback (text) { + const area = document.createElement('textarea'); + area.value = text; + area.contentEditable = true; + area.style.position = 'fixed'; // avoid scrolling to bottom + + document.body.appendChild(area); + area.focus(); + area.select(); + + const res = document.execCommand('copy'); + + area.remove(); + return res + } + + function copyToClipboard (text) { + return navigator.clipboard !== void 0 + ? navigator.clipboard.writeText(text) + : new Promise((resolve, reject) => { + const res = fallback(text); + if (res) { + resolve(true); + } + else { + reject(res); + } + }) + } + + function debouncedRef (vm, prop, wait = 250) { + const debounced = { + get value () { + const value = vm[prop]; + + if (value !== debounced.propValue) { + debounced.propValue = value; + debounced.internalValue = value; + + debounced.timer !== void 0 && clearTimeout(debounced.timer); + debounced.timer = void 0; + } + + return debounced.internalValue + }, + + set value (value) { + if (debounced.internalValue === value) { + return + } + + debounced.internalValue = value; + + debounced.timer !== void 0 && clearTimeout(debounced.timer); + debounced.timer = setTimeout(() => { + vm[prop] = value; + + debounced.timer = void 0; + }, wait); + }, + + destroy () { + if (debounced.timer !== void 0) { + clearTimeout(debounced.timer); + debounced.timer = void 0; + + vm[prop] = debounced.internalValue; + } + } + }; + + vm.$once('hook:beforeDestroy', debounced.destroy); + + debounced.propValue = NaN; + debounced.internalValue = NaN; + + return debounced + } + + function clean (link) { + // allow time for iOS + setTimeout(() => { + window.URL.revokeObjectURL(link.href); + }, 10000); + link.remove(); + } + + function exportFile (fileName, rawData, mimeType) { + const blob = new Blob([ rawData ], { type: mimeType || 'text/plain' }); + + // IE11 has its own stuff... + if (window.navigator.msSaveOrOpenBlob) { + return window.navigator.msSaveOrOpenBlob(blob, fileName) + } + + const link = document.createElement('a'); + + link.download = fileName; + link.href = window.URL.createObjectURL(blob); + + link.classList.add('hidden'); + link.style.position = 'fixed'; // avoid scrolling to bottom + document.body.appendChild(link); + + try { + link.click(); + clean(link); + return true + } + catch (err) { + clean(link); + return err + } + } + + function parseFeatures (winFeatures) { + const cfg = Object.assign({ noopener: true }, winFeatures); + const feat = []; + Object.keys(cfg).forEach(key => { + if (cfg[key] === true) { + feat.push(key); + } + }); + return feat.join(',') + } + + function openWindow (url, reject, windowFeatures) { + let open = window.open; + + if (Platform.is.cordova === true) { + if (cordova !== void 0 && cordova.InAppBrowser !== void 0 && cordova.InAppBrowser.open !== void 0) { + open = cordova.InAppBrowser.open; + } + else if (navigator !== void 0 && navigator.app !== void 0) { + return navigator.app.loadUrl(url, { + openExternal: true + }) + } + } + else if (Vue__default["default"].prototype.$q.electron !== void 0) { + return Vue__default["default"].prototype.$q.electron.shell.openExternal(url) + } + + const win = open(url, '_blank', parseFeatures(windowFeatures)); + + if (win) { + Platform.is.desktop && win.focus(); + return win + } + else { + reject && reject(); + } + } + + var openUrl = (url, reject, windowFeatures) => { + if ( + Platform.is.ios === true && + window.SafariViewController !== void 0 + ) { + window.SafariViewController.isAvailable(available => { + if (available) { + window.SafariViewController.show( + { url }, + noop, + reject + ); + } + else { + openWindow(url, reject, windowFeatures); + } + }); + return + } + + return openWindow(url, reject, windowFeatures) + }; + + function parsePromises (sequentialPromises) { + const isList = Array.isArray(sequentialPromises); + + if (isList === true) { + const totalJobs = sequentialPromises.length; + return { + isList, + totalJobs, + resultAggregator: Array(totalJobs).fill(null) + } + } + + const resultKeys = Object.keys(sequentialPromises); + const resultAggregator = {}; + resultKeys.forEach(keyName => { resultAggregator[ keyName ] = null; }); + + return { + isList, + totalJobs: resultKeys.length, + resultAggregator, + resultKeys + } + } + + /** + * Run a list of Promises sequentially, optionally on multiple threads. + * + * @param {*} sequentialPromises - Array of Functions or Object with Functions as values + * Array of Function form: [ (resultAggregator: Array) => Promise, ... ] + * Object form: { [key: string]: (resultAggregator: object) => Promise, ... } + * @param {*} opts - Optional options Object + * Object form: { threadsNumber?: number, abortOnFail?: boolean } + * Default: { threadsNumber: 1, abortOnFail: true } + * When configuring threadsNumber AND using http requests, be + * aware of the maximum threads that the hosting browser + * supports (usually 5); any number of threads above that + * won't add any real benefits + * @returns Promise | Object> + * With opts.abortOnFail set to true (which is default): + * When sequentialPromises param is Array: + * The Promise resolves with an Array of Objects of the following form: + * [ { key: number, status: 'fulfilled', value: any }, ... ] + * The Promise rejects with an Object of the following form: + * { key: number, status: 'rejected', reason: Error, resultAggregator: array } + * When sequentialPromises param is Object: + * The Promise resolves with an Object of the following form: + * { [key: string]: { key: string, status: 'fulfilled', value: any }, ... } + * The Promise rejects with an Object of the following form: + * { key: string, status: 'rejected', reason: Error, resultAggregator: object } + * With opts.abortOnFail set to false: + * The Promise is never rejected (no catch() needed) + * The Promise resolves with: + * An Array of Objects (when sequentialPromises param is also an Array) of the following form: + * [ { key: number, status: 'fulfilled', value: any } | { status: 'rejected', reason: Error }, ... ] + * An Object (when sequentialPromises param is also an Object) of the following form: + * { [key: string]: { key: string, status: 'fulfilled', value: any } | { key: string, status: 'rejected', reason: Error }, ... } + */ + function runSequentialPromises ( + sequentialPromises, + { threadsNumber = 1, abortOnFail = true } = {} + ) { + let jobIndex = -1, hasAborted = false; + + const { isList, totalJobs, resultAggregator, resultKeys } = parsePromises(sequentialPromises); + + const getPromiseThread = () => new Promise((resolve, reject) => { + function runNextPromise () { + const currentJobIndex = ++jobIndex; + + if (hasAborted === true || currentJobIndex >= totalJobs) { + resolve(); + return + } + + const key = isList === true ? currentJobIndex : resultKeys[ currentJobIndex ]; + + sequentialPromises[ key ](resultAggregator) + .then(value => { + if (hasAborted === true) { + resolve(); + return // early exit + } + + resultAggregator[ key ] = { key, status: 'fulfilled', value }; + + // timeout so it doesn't interfere with the .catch() below + setTimeout(runNextPromise); + }) + .catch(reason => { + if (hasAborted === true) { + resolve(); + return // early exit + } + + const result = { key, status: 'rejected', reason }; + resultAggregator[ key ] = result; + + if (abortOnFail === true) { + hasAborted = true; + reject({ ...result, resultAggregator }); + return // early exit + } + + // timeout so no interference + setTimeout(runNextPromise); + }); + } + + runNextPromise(); + }); + + const threads = Array(threadsNumber).fill(getPromiseThread()); + return Promise.all(threads).then(() => resultAggregator) + } + + var utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + clone: cloneDeep, + colors: colors, + copyToClipboard: copyToClipboard, + date: date, + debounce: debounce, + debouncedRef: debouncedRef, + dom: dom, + event: event, + noop: noop, + exportFile: exportFile, + extend: extend, + format: format, + frameDebounce: frameDebounce, + is: is, + morph: morph, + openURL: openUrl, + patterns: patterns, + runSequentialPromises: runSequentialPromises, + scroll: scroll, + throttle: throttle, + uid: uid$3 + }); + + Vue__default["default"].use({ install }, { + components, + directives, + plugins, + config: window.quasarConfig || {} + }); + + var index_umd = { + version, + lang, + iconSet, + components, + directives, + plugins, + utils, + ...components, + ...directives, + ...plugins, + ...utils + }; + + return index_umd; + +})); diff --git a/dist/quasar.umd.modern.min.js b/dist/quasar.umd.modern.min.js new file mode 100644 index 00000000000..6d2fbbe7f91 --- /dev/null +++ b/dist/quasar.umd.modern.min.js @@ -0,0 +1,6 @@ +/*! + * Quasar Framework v1.22.0-beta.3 + * (c) 2015-present Razvan Stoenescu + * Released under the MIT License. + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("vue")):"function"==typeof define&&define.amd?define(["vue"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).Quasar=e(t.Vue)}(this,function(t){"use strict";var e=function(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}(t);const i="undefined"==typeof window;let s,o=!1,n=i;const r=!1===i&&("ontouchstart"in window||window.navigator.maxTouchPoints>0);function a(t){const e=t.toLowerCase(),a=function(t,e){const i=/(edge|edga|edgios)\/([\w.]+)/.exec(t)||/(opr)[\/]([\w.]+)/.exec(t)||/(vivaldi)[\/]([\w.]+)/.exec(t)||/(chrome|crios)[\/]([\w.]+)/.exec(t)||/(iemobile)[\/]([\w.]+)/.exec(t)||/(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(t)||/(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(t)||/(firefox|fxios)[\/]([\w.]+)/.exec(t)||/(webkit)[\/]([\w.]+)/.exec(t)||/(opera)(?:.*version|)[\/]([\w.]+)/.exec(t)||/(msie) ([\w.]+)/.exec(t)||t.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(t)||t.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(t)||[];return{browser:i[5]||i[3]||i[1]||"",version:i[2]||i[4]||"0",versionNumber:i[4]||i[2]||"0",platform:e[0]||""}}(e,function(t){return/(ipad)/.exec(t)||/(ipod)/.exec(t)||/(windows phone)/.exec(t)||/(iphone)/.exec(t)||/(kindle)/.exec(t)||/(silk)/.exec(t)||/(android)/.exec(t)||/(win)/.exec(t)||/(mac)/.exec(t)||/(linux)/.exec(t)||/(cros)/.exec(t)||/(playbook)/.exec(t)||/(bb)/.exec(t)||/(blackberry)/.exec(t)||[]}(e)),l={};a.browser&&(l[a.browser]=!0,l.version=a.version,l.versionNumber=parseInt(a.versionNumber,10)),a.platform&&(l[a.platform]=!0);const h=l.android||l.ios||l.bb||l.blackberry||l.ipad||l.iphone||l.ipod||l.kindle||l.playbook||l.silk||l["windows phone"];return!0===h||e.indexOf("mobile")>-1?(l.mobile=!0,l.edga||l.edgios?(l.edge=!0,a.browser="edge"):l.crios?(l.chrome=!0,a.browser="chrome"):l.fxios&&(l.firefox=!0,a.browser="firefox")):l.desktop=!0,(l.ipod||l.ipad||l.iphone)&&(l.ios=!0),l["windows phone"]&&(l.winphone=!0,delete l["windows phone"]),(l.chrome||l.opr||l.safari||l.vivaldi||!0===l.mobile&&!0!==l.ios&&!0!==h)&&(l.webkit=!0),(l.rv||l.iemobile)&&(a.browser="ie",l.ie=!0),(l.safari&&l.blackberry||l.bb)&&(a.browser="blackberry",l.blackberry=!0),l.safari&&l.playbook&&(a.browser="playbook",l.playbook=!0),l.opr&&(a.browser="opera",l.opera=!0),l.safari&&l.android&&(a.browser="android",l.android=!0),l.safari&&l.kindle&&(a.browser="kindle",l.kindle=!0),l.safari&&l.silk&&(a.browser="silk",l.silk=!0),l.vivaldi&&(a.browser="vivaldi",l.vivaldi=!0),l.name=a.browser,l.platform=a.platform,!1===i&&(e.indexOf("electron")>-1?l.electron=!0:document.location.href.indexOf("-extension://")>-1?l.bex=!0:(void 0!==window.Capacitor?(l.capacitor=!0,l.nativeMobile=!0,l.nativeMobileWrapper="capacitor"):void 0!==window._cordovaNative||void 0!==window.cordova?(l.cordova=!0,l.nativeMobile=!0,l.nativeMobileWrapper="cordova"):!0===window.matchMedia("(display-mode: standalone)").matches&&(l.standalone=!0),!0===r&&!0===l.mac&&(!0===l.desktop&&!0===l.safari||!0===l.nativeMobile&&!0!==l.android&&!0!==l.ios&&!0!==l.ipad)&&function(t){s={is:{...t}},delete t.mac,delete t.desktop;const e=Math.min(window.innerHeight,window.innerWidth)>414?"ipad":"iphone";Object.assign(t,{mobile:!0,ios:!0,platform:e,[e]:!0})}(l)),!0===(o=void 0===l.nativeMobile&&void 0===l.electron&&null!==document.querySelector("[data-server-rendered]"))&&(n=!0)),l}const l=!0!==i?navigator.userAgent||navigator.vendor||window.opera:"",h={has:{touch:!1,webStorage:!1},within:{iframe:!1}},d=!1===i?{userAgent:l,is:a(l),has:{touch:r,webStorage:(()=>{try{if(window.localStorage)return!0}catch(t){}return!1})()},within:{iframe:window.self!==window.top}}:h,c={install(t,r){!0===i?r.server.push((t,e)=>{t.platform=this.parseSSR(e.ssr)}):!0===o?(Object.assign(this,d,s,h),r.takeover.push(t=>{n=o=!1,Object.assign(t.platform,d),s=void 0}),e.default.util.defineReactive(t,"platform",this)):(Object.assign(this,d),t.platform=this)}};!0===i?c.parseSSR=(t=>{const e=t.req.headers["user-agent"]||t.req.headers["User-Agent"]||"";return{...d,userAgent:e,is:a(e)}}):!0===d.is.ios&&window.navigator.vendor.toLowerCase().indexOf("apple");const u={hasPassive:!1,passiveCapture:!0,notPassiveCapture:!0};try{var p=Object.defineProperty({},"passive",{get(){Object.assign(u,{hasPassive:!0,passive:{passive:!0},notPassive:{passive:!1},passiveCapture:{passive:!0,capture:!0},notPassiveCapture:{passive:!1,capture:!0}})}});window.addEventListener("qtest",null,p),window.removeEventListener("qtest",null,p)}catch(t){}function m(){}function g(t){return 0===t.button}function f(t){return t.touches&&t.touches[0]?t=t.touches[0]:t.changedTouches&&t.changedTouches[0]?t=t.changedTouches[0]:t.targetTouches&&t.targetTouches[0]&&(t=t.targetTouches[0]),{top:t.clientY,left:t.clientX}}function _(t){if(t.path)return t.path;if(t.composedPath)return t.composedPath();const e=[];let i=t.target;for(;i;){if(e.push(i),"HTML"===i.tagName)return e.push(document),e.push(window),e;i=i.parentElement}}function v(t,e){const{target:i}=t;for(;null!==e&&void 0!==e;){if(e===i)return!0;e=e.parentNode}return!1}const b=40,y=800;function S(t){t.stopPropagation()}function x(t){!1!==t.cancelable&&t.preventDefault()}function w(t){!1!==t.cancelable&&t.preventDefault(),t.stopPropagation()}function C(t,e){if(void 0===t||!0===e&&!0===t.__dragPrevented)return;const i=!0===e?t=>{t.__dragPrevented=!0,t.addEventListener("dragstart",x,u.notPassiveCapture)}:t=>{delete t.__dragPrevented,t.removeEventListener("dragstart",x,u.notPassiveCapture)};t.querySelectorAll("a, img").forEach(i)}function k(t,{bubbles:e=!1,cancelable:i=!1}={}){try{return new CustomEvent(t,{bubbles:e,cancelable:i})}catch(s){const o=document.createEvent("Event");return o.initEvent(t,e,i),o}}function q(t,e,i){const s=`__q_${e}_evt`;t[s]=void 0!==t[s]?t[s].concat(i):i,i.forEach(e=>{e[0].addEventListener(e[1],t[e[2]],u[e[3]])})}function $(t,e){const i=`__q_${e}_evt`;void 0!==t[i]&&(t[i].forEach(e=>{e[0].removeEventListener(e[1],t[e[2]],u[e[3]])}),t[i]=void 0)}var T={listenOpts:u,leftClick:g,middleClick:function(t){return 1===t.button},rightClick:function(t){return 2===t.button},position:f,getEventPath:_,eventOnAncestors:v,getMouseWheelDistance:function(t){let e=t.deltaX,i=t.deltaY;if((e||i)&&t.deltaMode){const s=1===t.deltaMode?b:y;e*=s,i*=s}return t.shiftKey&&!e&&([i,e]=[e,i]),{x:e,y:i}},stop:S,prevent:x,stopAndPrevent:w,preventDraggable:C,create:k};const M=/[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/,L=/[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u,E=/[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/,A=/[a-z0-9_ -]$/i,B=["isKeyboard","isComposing","isPointer","isMouse","isTouch","isDrag","isContext","isPending","event"];function P(){return B.reduce((t,e)=>(t[e]="event"===e&&null,t),{})}const z=P();z.isComposing=void 0;const I=[["touchstart",{...z,isTouch:!0,isPointer:!0,isPending:!0},!0],["touchend",{...z,isTouch:!0,isPointer:!0,isPending:!1}],["touchcancel",{...z,isTouch:!0,isPointer:!0,isPending:!1}]],O=["mousestart","touchstart","dragstart"],R=I.slice(1),{passiveCapture:F,notPassiveCapture:D}=u,V=[];function N(){const{documentElement:t}=document,e=V.slice();V.length=0,e.forEach(e=>{t.removeEventListener("click",e,D)})}const H={install(t,s){if(!0===i)return void s.server.push(t=>{t.interaction=P(),t.interaction.preventClick=m});Object.assign(this,P());const o=this;B.forEach(t=>{e.default.util.defineReactive(o,t,o[t])}),e.default.util.defineReactive(t,"interaction",this);const n=(t,e,i)=>{const s=Object.keys(e).filter(t=>void 0!==e[t]).map(t=>{const i=e[t];return"function"==typeof i?e=>{o[t]=i(e)}:()=>{o[t]=i}}),r="function"==typeof i?i:!0===i?t=>{R.forEach(e=>{const i=n(e[0],e[1],()=>{R.forEach(e=>{t.target.removeEventListener(e[0],i,F)})});t.target.addEventListener(z[0],i,F)})}:m,a=!0===O.includes(t)?N:m;return t=>{s.forEach(e=>{e(t)}),o.event=t,r(t),a()}},{documentElement:r}=document,a=!0===d.is.firefox?t=>!1===A.test(t):t=>!0===M.test(t)||!0===L.test(t)||!0===E.test(t);[["keydown",{...z,isKeyboard:!0,isPending:!0}],["keypress",{...z,isKeyboard:!0,isPending:!0}],["keyup",{...z,isKeyboard:!0,isPending:!1}],!0===d.is.ios?["compositionstart",{isComposing:t=>(t.target.qComposing=!0,!0)}]:["compositionupdate",{isComposing:t=>(!0!==t.target.qComposing&&"string"==typeof t.data&&!0===a(t.data)&&(t.target.qComposing=!0),!0)}],["compositionend",{isComposing:t=>(!0===t.target.qComposing&&(t.target.qComposing=!1),!1)}],["mousedown",{...z,isMouse:!0,isPointer:!0,isPending:!0}],["mouseup",{...z,isMouse:!0,isPointer:!0,isPending:!1}],["dragstart",{isKeyboard:!1,isDrag:!0,isPending:!0}],["dragend",{isKeyboard:!1,isDrag:!0,isPending:!1}],["dragcancel",{isKeyboard:!1,isDrag:!0,isPending:!1}],["drop",{isKeyboard:!1,isDrag:!0,isPending:!1}],["contextmenu",{isContext:!0,isPending:!1}]].forEach(t=>{r.addEventListener(t[0],n.apply(this,t),F)}),!0===d.has.touch&&I.forEach(t=>{r.addEventListener(t[0],n.apply(this,t),F)})},preventClick(t,e){const{documentElement:i}=document,s=i=>{t===i.target&&(!0===e?w(i):x(i)),N()};i.addEventListener("click",s,D),V.push(s)}};function j(t,e=250,i){let s;function o(){const o=arguments;clearTimeout(s),!0===i&&void 0===s&&t.apply(this,o),s=setTimeout(()=>{s=void 0,!0!==i&&t.apply(this,o)},e)}return o.cancel=(()=>{clearTimeout(s)}),o}const Q=["sm","md","lg","xl"],{passive:W}=u;var U={width:0,height:0,name:"xs",sizes:{sm:600,md:1024,lg:1440,xl:1920},lt:{sm:!0,md:!0,lg:!0,xl:!0},gt:{xs:!1,sm:!1,md:!1,lg:!1},xs:!0,sm:!1,md:!1,lg:!1,xl:!1,setSizes:m,setDebounce:m,install(t,s,n){if(!0===i)return void(t.screen=this);const{visualViewport:r}=window,a=r||window,l=document.scrollingElement||document.documentElement,h=void 0===r||!0===d.is.mobile?()=>[Math.max(window.innerWidth,l.clientWidth),Math.max(window.innerHeight,l.clientHeight)]:()=>[r.width*r.scale+window.innerWidth-l.clientWidth,r.height*r.scale+window.innerHeight-l.clientHeight],c=void 0!==n.screen&&!0===n.screen.bodyClasses,u=t=>{const[e,i]=h();if(i!==this.height&&(this.height=i),e!==this.width)this.width=e;else if(!0!==t)return;let s=this.sizes;this.gt.xs=e>=s.sm,this.gt.sm=e>=s.md,this.gt.md=e>=s.lg,this.gt.lg=e>=s.xl,this.lt.sm=e{Q.forEach(e=>{void 0!==t[e]&&(m[e]=t[e])})}),this.setDebounce=(t=>{g=t});const f=()=>{const t=getComputedStyle(document.body);t.getPropertyValue("--q-size-sm")&&Q.forEach(e=>{this.sizes[e]=parseInt(t.getPropertyValue(`--q-size-${e}`),10)}),this.setSizes=(t=>{Q.forEach(e=>{t[e]&&(this.sizes[e]=t[e])}),u(!0)}),this.setDebounce=(t=>{void 0!==p&&a.removeEventListener("resize",p,W),p=t>0?j(u,t):u,a.addEventListener("resize",p,W)}),this.setDebounce(g),Object.keys(m).length>0?(this.setSizes(m),m=void 0):u(),!0===c&&"xs"===this.name&&document.body.classList.add("screen--xs")};!0===o?s.takeover.push(f):f(),e.default.util.defineReactive(t,"screen",this)}};const Y={isActive:null,mode:!1,install(t,s,{dark:n}){if(this.isActive="auto"===n?null:!0===n,!0===i)return s.server.push((t,e)=>{t.dark={isActive:null,mode:!1,set:i=>{e.ssr.Q_BODY_CLASSES=e.ssr.Q_BODY_CLASSES.replace(" body--light","").replace(" body--dark-auto","").replace(" body--dark","")+` body--${!0===i?"dark":"auto"===i?"dark-auto":"light"}`,t.dark.isActive="auto"===i?null:!0===i,t.dark.mode=i},toggle:()=>{t.dark.set(!1===t.dark.isActive)}},t.dark.set(n)}),void(this.set=m);const r=void 0!==n&&n;if(!0===o){const t=t=>{this.__fromSSR=t},e=this.set;this.set=t,t(r),s.takeover.push(()=>{document.body.classList.remove("body--dark-auto"),this.set=e,this.set(this.__fromSSR)})}else this.set(r);e.default.util.defineReactive(this,"isActive",this.isActive),e.default.util.defineReactive(t,"dark",this)},set(t){this.mode=t,"auto"===t?(void 0===this.__media&&(this.__media=window.matchMedia("(prefers-color-scheme: dark)"),this.__updateMedia=(()=>{this.set("auto")}),this.__media.addListener(this.__updateMedia)),t=this.__media.matches):void 0!==this.__media&&(this.__media.removeListener(this.__updateMedia),this.__media=void 0),this.isActive=!0===t,document.body.classList.remove(`body--${!0===t?"light":"dark"}`),document.body.classList.add(`body--${!0===t?"dark":"light"}`)},toggle(){Y.set(!1===Y.isActive)},__media:void 0},K=()=>!0;function G(t){return"string"==typeof t&&""!==t&&"/"!==t&&"#/"!==t}function X(t){return!0===t.startsWith("#")&&(t=t.substr(1)),!1===t.startsWith("/")&&(t="/"+t),!0===t.endsWith("/")&&(t=t.substr(0,t.length-1)),"#"+t}var Z={__history:[],add:m,remove:m,install(t){if(!0===i)return;const{cordova:e,capacitor:s}=d.is;if(!0!==e&&!0!==s)return;const o=t[!0===e?"cordova":"capacitor"];if(void 0!==o&&!1===o.backButton)return;if(!0===s&&(void 0===window.Capacitor||void 0===window.Capacitor.Plugins.App))return;this.add=(t=>{void 0===t.condition&&(t.condition=K),this.__history.push(t)}),this.remove=(t=>{const e=this.__history.indexOf(t);e>=0&&this.__history.splice(e,1)});const n=function(t){if(!1===t.backButtonExit)return()=>!1;if("*"===t.backButtonExit)return K;const e=["#/"];return!0===Array.isArray(t.backButtonExit)&&e.push(...t.backButtonExit.filter(G).map(X)),()=>e.includes(window.location.hash)}(Object.assign({backButtonExit:!0},o)),r=()=>{if(this.__history.length){const t=this.__history[this.__history.length-1];!0===t.condition()&&(this.__history.pop(),t.handler())}else!0===n()?navigator.app.exitApp():window.history.back()};!0===e?document.addEventListener("deviceready",()=>{document.addEventListener("backbutton",r,!1)}):window.Capacitor.Plugins.App.addListener("backButton",r)}},J={isoName:"en-us",nativeName:"English (US)",label:{clear:"Clear",ok:"OK",cancel:"Cancel",close:"Close",set:"Set",select:"Select",reset:"Reset",remove:"Remove",update:"Update",create:"Create",search:"Search",filter:"Filter",refresh:"Refresh",expand:function(t){return t?`Expand "${t}"`:"Expand"},collapse:function(t){return t?`Collapse "${t}"`:"Collapse"}},date:{days:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),daysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),firstDayOfWeek:0,format24h:!1,pluralDay:"days"},table:{noData:"No data available",noResults:"No matching records found",loading:"Loading...",selectedRecords:function(t){return 1===t?"1 record selected.":(0===t?"No":t)+" records selected."},recordsPerPage:"Records per page:",allRows:"All",pagination:function(t,e,i){return t+"-"+e+" of "+i},columns:"Columns"},editor:{url:"URL",bold:"Bold",italic:"Italic",strikethrough:"Strikethrough",underline:"Underline",unorderedList:"Unordered List",orderedList:"Ordered List",subscript:"Subscript",superscript:"Superscript",hyperlink:"Hyperlink",toggleFullscreen:"Toggle Fullscreen",quote:"Quote",left:"Left align",center:"Center align",right:"Right align",justify:"Justify align",print:"Print",outdent:"Decrease indentation",indent:"Increase indentation",removeFormat:"Remove formatting",formatting:"Formatting",fontSize:"Font Size",align:"Align",hr:"Insert Horizontal Rule",undo:"Undo",redo:"Redo",heading1:"Heading 1",heading2:"Heading 2",heading3:"Heading 3",heading4:"Heading 4",heading5:"Heading 5",heading6:"Heading 6",paragraph:"Paragraph",code:"Code",size1:"Very small",size2:"A bit small",size3:"Normal",size4:"Medium-large",size5:"Big",size6:"Very big",size7:"Maximum",defaultFont:"Default Font",viewSource:"View Source"},tree:{noNodes:"No nodes available",noResults:"No matching nodes found"}};function tt(){if(!0===i)return;const t=navigator.language||navigator.languages[0]||navigator.browserLanguage||navigator.userLanguage||navigator.systemLanguage;return t?t.toLowerCase():void 0}var et={getLocale:tt,install(t,s,n){this.set=((e=J,s)=>{const n={...e,rtl:!0===e.rtl,getLocale:tt};if(!0===i){if(void 0===s)return void console.error("SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)");const t=!0===n.rtl?"rtl":"ltr",e=`lang=${n.isoName} dir=${t}`;n.set=s.$q.lang.set,s.Q_HTML_ATTRS=void 0!==s.Q_PREV_LANG?s.Q_HTML_ATTRS.replace(s.Q_PREV_LANG,e):e,s.Q_PREV_LANG=e,s.$q.lang=n}else{if(!1===o){const t=document.documentElement;t.setAttribute("dir",!0===n.rtl?"rtl":"ltr"),t.setAttribute("lang",n.isoName)}n.set=this.set,t.lang=this.props=n,this.isoName=n.isoName,this.nativeName=n.nativeName}});const r=n||J;!0===i?(s.server.push((t,e)=>{t.lang={},t.lang.set=(t=>{this.set(t,e.ssr)}),t.lang.set(r)}),this.isoName!==r.isoName&&(this.isoName=r.isoName,this.nativeName=r.nativeName,this.props=r)):(e.default.util.defineReactive(t,"lang",{}),this.set(r))}};const it=/^rgb(a)?\((\d{1,3}),(\d{1,3}),(\d{1,3}),?([01]?\.?\d*?)?\)$/;function st({r:t,g:e,b:i,a:s}){const o=void 0!==s;if(t=Math.round(t),e=Math.round(e),i=Math.round(i),t>255||e>255||i>255||o&&s>100)throw new TypeError("Expected 3 numbers below 256 (and optionally one below 100)");return s=o?(256|Math.round(255*s/100)).toString(16).slice(1):"","#"+(i|e<<8|t<<16|1<<24).toString(16).slice(1)+s}function ot({r:t,g:e,b:i,a:s}){return`rgb${void 0!==s?"a":""}(${t},${e},${i}${void 0!==s?","+s/100:""})`}function nt(t){if("string"!=typeof t)throw new TypeError("Expected a string");3===(t=t.replace(/^#/,"")).length?t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:4===t.length&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);const e=parseInt(t,16);return t.length>6?{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:Math.round((255&e)/2.55)}:{r:e>>16,g:e>>8&255,b:255&e}}function rt({h:t,s:e,v:i,a:s}){let o,n,r;e/=100,i/=100,t/=360;const a=Math.floor(6*t),l=6*t-a,h=i*(1-e),d=i*(1-l*e),c=i*(1-(1-l)*e);switch(a%6){case 0:o=i,n=c,r=h;break;case 1:o=d,n=i,r=h;break;case 2:o=h,n=i,r=c;break;case 3:o=h,n=d,r=i;break;case 4:o=c,n=h,r=i;break;case 5:o=i,n=h,r=d}return{r:Math.round(255*o),g:Math.round(255*n),b:Math.round(255*r),a:s}}function at({r:t,g:e,b:i,a:s}){const o=Math.max(t,e,i),n=Math.min(t,e,i),r=o-n,a=0===o?0:r/o,l=o/255;let h;switch(o){case n:h=0;break;case t:h=e-i+r*(e1)throw new TypeError("Expected offset to be between -1 and 1");const{r:i,g:s,b:o,a:n}=lt(t),r=void 0!==n?n/100:0;return st({r:i,g:s,b:o,a:Math.round(100*Math.min(1,Math.max(0,r+e)))})},setBrand:dt,getBrand:ct,getPaletteColor:function(t){if("string"!=typeof t)throw new TypeError("Expected a string as color");const e=document.createElement("div");e.className=`text-${t} invisible fixed no-pointer-events`,document.body.appendChild(e);const i=getComputedStyle(e).getPropertyValue("color");return e.remove(),st(lt(i))}};function pt({is:t,has:e,within:i},s){const o=[!0===t.desktop?"desktop":"mobile",`${!1===e.touch?"no-":""}touch`];if(!0===t.mobile){const e=function(t){return!0===t.ios?"ios":!0===t.android?"android":void 0}(t);void 0!==e&&o.push("platform-"+e)}if(!0===t.nativeMobile){const e=t.nativeMobileWrapper;o.push(e),o.push("native-mobile"),!0!==t.ios||void 0!==s[e]&&!1===s[e].iosStatusBarPadding||o.push("q-ios-padding")}else!0===t.electron?o.push("electron"):!0===t.bex&&o.push("bex");return!0===i.iframe&&o.push("within-iframe"),o}var mt={install(t,e){if(!0!==i){if(!0===o)!function(){const t=document.body.className;let e=t;void 0!==s&&(e=e.replace("desktop","platform-ios mobile")),!0===d.has.touch&&(e=e.replace("no-touch","touch")),!0===d.within.iframe&&(e+=" within-iframe"),t!==e&&(document.body.className=e)}();else{const t=pt(d,e);!0===d.is.ie&&11===d.is.versionNumber?t.forEach(t=>document.body.classList.add(t)):document.body.classList.add.apply(document.body.classList,t)}void 0!==e.brand&&function(t){for(const e in t)dt(e,t[e])}(e.brand)}else t.server.push((t,i)=>{const s=pt(t.platform,e),o=i.ssr.setBodyClasses;void 0!==e.screen&&!0===e.screen.bodyClass&&s.push("screen--xs"),"function"==typeof o?o(s):i.ssr.Q_BODY_CLASSES=s.join(" ")})}},gt={name:"material-icons",type:{positive:"check_circle",negative:"warning",info:"info",warning:"priority_high"},arrow:{up:"arrow_upward",right:"arrow_forward",down:"arrow_downward",left:"arrow_back",dropdown:"arrow_drop_down"},chevron:{left:"chevron_left",right:"chevron_right"},colorPicker:{spectrum:"gradient",tune:"tune",palette:"style"},pullToRefresh:{icon:"refresh"},carousel:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down",navigationIcon:"lens"},chip:{remove:"cancel",selected:"check"},datetime:{arrowLeft:"chevron_left",arrowRight:"chevron_right",now:"access_time",today:"today"},editor:{bold:"format_bold",italic:"format_italic",strikethrough:"strikethrough_s",underline:"format_underlined",unorderedList:"format_list_bulleted",orderedList:"format_list_numbered",subscript:"vertical_align_bottom",superscript:"vertical_align_top",hyperlink:"link",toggleFullscreen:"fullscreen",quote:"format_quote",left:"format_align_left",center:"format_align_center",right:"format_align_right",justify:"format_align_justify",print:"print",outdent:"format_indent_decrease",indent:"format_indent_increase",removeFormat:"format_clear",formatting:"text_format",fontSize:"format_size",align:"format_align_left",hr:"remove",undo:"undo",redo:"redo",heading:"format_size",code:"code",size:"format_size",font:"font_download",viewSource:"code"},expansionItem:{icon:"keyboard_arrow_down",denseIcon:"arrow_drop_down"},fab:{icon:"add",activeIcon:"close"},field:{clear:"cancel",error:"error"},pagination:{first:"first_page",prev:"keyboard_arrow_left",next:"keyboard_arrow_right",last:"last_page"},rating:{icon:"grade"},stepper:{done:"check",active:"edit",error:"warning"},tabs:{left:"chevron_left",right:"chevron_right",up:"keyboard_arrow_up",down:"keyboard_arrow_down"},table:{arrowUp:"arrow_upward",warning:"warning",firstPage:"first_page",prevPage:"chevron_left",nextPage:"chevron_right",lastPage:"last_page"},tree:{icon:"play_arrow"},uploader:{done:"done",clear:"clear",add:"add_box",upload:"cloud_upload",removeQueue:"clear_all",removeUploaded:"done_all"}},ft={install(t,s,o){const n=o||gt;this.set=((e,s)=>{const o={...e};if(!0===i){if(void 0===s)return void console.error("SSR ERROR: second param required: Quasar.iconSet.set(iconSet, ssrContext)");o.set=s.$q.iconSet.set,s.$q.iconSet=o}else o.set=this.set,t.iconSet=o}),!0===i?s.server.push((t,e)=>{t.iconSet={},t.iconSet.set=(t=>{this.set(t,e.ssr)}),t.iconSet.set(n)}):(e.default.util.defineReactive(t,"iconMapFn",void 0),e.default.util.defineReactive(t,"iconSet",{}),this.set(n))}};const _t=[c,U,Y,H],vt={server:[],takeover:[]},bt={version:"1.22.0-beta.3",config:{}};const yt=["B","KB","MB","GB","TB","PB"];function St(t){let e=0;for(;parseInt(t,10)>=1024&&e=e?s:new Array(e-s.length+1).join(i)+s}var qt={humanStorageSize:St,capitalize:xt,between:wt,normalizeToInterval:Ct,pad:kt};function $t(t,e,s){if(!0===i)return s;const o=`__qcache_${e}`;return void 0===t[o]?t[o]=s:t[o]}function Tt(t,e,s){if(!0===i)return s();const o=`__qcache_${e}`;return void 0===t[o]?t[o]=s():t[o]}function Mt(t,e){return{data(){const i={},s=this[t];for(const t in s)i[t]=s[t];return{[e]:i}},watch:{[t](t,i){const s=this[e];if(void 0!==i)for(const e in i)void 0===t[e]&&this.$delete(s,e);for(const e in t)s[e]!==t[e]&&this.$set(s,e,t[e])}}}}const Lt={"aria-hidden":"true"},Et={tabindex:0,type:"button","aria-hidden":!1,role:null};var At=Mt("$attrs","qAttrs");const Bt=i?null:XMLHttpRequest,Pt=i?null:Bt.prototype.open,zt=["top","right","bottom","left"];let It=[],Ot=0;var Rt=e.default.extend({name:"QAjaxBar",props:{position:{type:String,default:"top",validator:t=>zt.includes(t)},size:{type:String,default:"2px"},color:String,reverse:Boolean,skipHijack:Boolean,hijackFilter:Function},data:()=>({calls:0,progress:0,onScreen:!1,animate:!0}),computed:{classes(){return`q-loading-bar q-loading-bar--${this.position}`+(void 0!==this.color?` bg-${this.color}`:"")+(!0===this.animate?"":" no-transition")},style(){const t=this.onScreen,e=function({p:t,pos:e,active:i,horiz:s,reverse:o,dir:n}){let r=1,a=1;return!0===s?(!0===o&&(r=-1),"bottom"===e&&(a=-1),{transform:`translate3d(${r*(t-100)}%,${i?0:-200*a}%,0)`}):(!0===o&&(a=-1),"right"===e&&(r=-1),{transform:`translate3d(${i?0:n*r*-200}%,${a*(t-100)}%,0)`})}({p:this.progress,pos:this.position,active:t,horiz:this.horizontal,reverse:!0===this.$q.lang.rtl&&["top","bottom"].includes(this.position)?!1===this.reverse:this.reverse,dir:!0===this.$q.lang.rtl?-1:1});return e[this.sizeProp]=this.size,e.opacity=t?1:0,e},horizontal(){return"top"===this.position||"bottom"===this.position},sizeProp(){return this.horizontal?"height":"width"},attrs(){return!0===this.onScreen?{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":this.progress}:Lt}},methods:{start(t=300){const e=this.speed,i=this.speed=Math.max(0,t)||0;return this.calls++,this.calls>1?(0===e&&i>0?this.__work():e>0&&i<=0&&clearTimeout(this.timer),this.calls):(clearTimeout(this.timer),this.$emit("start"),this.progress=0,this.timer=setTimeout(()=>{this.animate=!0,i>0&&this.__work()},!0===this.onScreen?500:1),!0!==this.onScreen&&(this.onScreen=!0,this.animate=!1),this.calls)},increment(t){return this.calls>0&&(this.progress=function(t,e){return"number"!=typeof e&&(e=t<25?3*Math.random()+3:t<65?3*Math.random():t<85?2*Math.random():t<99?.6:0),wt(t+e,0,100)}(this.progress,t)),this.calls},stop(){if(this.calls=Math.max(0,this.calls-1),this.calls>0)return this.calls;clearTimeout(this.timer),this.$emit("stop");const t=()=>{this.animate=!0,this.progress=100,this.timer=setTimeout(()=>{this.onScreen=!1},1e3)};return 0===this.progress?this.timer=setTimeout(t,1):t(),this.calls},__work(){this.progress<100&&(this.timer=setTimeout(()=>{this.increment(),this.__work()},this.speed))}},mounted(){var t;!0!==this.skipHijack&&(this.hijacked=!0,t={start:this.start,stop:this.stop,getHijackFilter:()=>this.hijackFilter||null},Ot++,It.push(t),Ot>1||(Bt.prototype.open=function(t,e){const i=[];this.addEventListener("loadstart",()=>{It.forEach(t=>{const s=t.getHijackFilter();null!==s&&!0!==s(e)||(t.start(),i.push(t.stop))})},{once:!0}),this.addEventListener("loadend",()=>{i.forEach(t=>{t()})},{once:!0}),Pt.apply(this,arguments)}))},beforeDestroy(){var t;clearTimeout(this.timer),!0===this.hijacked&&(t=this.start,It=It.filter(e=>e.start!==t),(Ot=Math.max(0,Ot-1))||(Bt.prototype.open=Pt))},render(t){return t("div",{class:this.classes,style:this.style,attrs:this.attrs})}});const Ft={xs:18,sm:24,md:32,lg:38,xl:46};function Dt(t){return{props:{size:String},computed:{sizeStyle(){if(void 0!==this.size)return{fontSize:this.size in t?`${t[this.size]}px`:this.size}}}}}var Vt=Dt(Ft),Nt={props:{tag:{type:String,default:"div"}}},Ht=Mt("$listeners","qListeners");function jt(t,e,i){return void 0!==t.$scopedSlots[e]?t.$scopedSlots[e]():i}function Qt(t,e,i){return void 0!==t.$scopedSlots[e]?[].concat(t.$scopedSlots[e]()):i}function Wt(t,e,i){return void 0!==e.$scopedSlots[i]?t.concat(e.$scopedSlots[i]()):t}function Ut(t,e,i){if(void 0===e.$scopedSlots[i])return t;const s=e.$scopedSlots[i]();return void 0!==t?t.concat(s):s}const Yt="0 0 24 24",Kt=t=>t,Gt=t=>`ionicons ${t}`,Xt={"mdi-":t=>`mdi ${t}`,"icon-":Kt,"bt-":t=>`bt ${t}`,"eva-":t=>`eva ${t}`,"ion-md":Gt,"ion-ios":Gt,"ion-logo":Gt,"iconfont ":Kt,"ti-":t=>`themify-icon ${t}`,"bi-":t=>`bootstrap-icons ${t}`},Zt={o_:"-outlined",r_:"-round",s_:"-sharp"},Jt={sym_o_:"-outlined",sym_r_:"-rounded",sym_s_:"-sharp"},te=new RegExp("^("+Object.keys(Xt).join("|")+")"),ee=new RegExp("^("+Object.keys(Zt).join("|")+")"),ie=new RegExp("^("+Object.keys(Jt).join("|")+")"),se=/^[Mm]\s?[-+]?\.?\d/,oe=/^img:/,ne=/^svguse:/,re=/^ion-/,ae=/^(fa-(solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;var le=e.default.extend({name:"QIcon",mixins:[Ht,Vt,Nt],props:{tag:{type:String,default:"i"},name:String,color:String,left:Boolean,right:Boolean},computed:{classes(){return"q-icon"+(!0===this.left?" on-left":"")+(!0===this.right?" on-right":"")+(void 0!==this.color?` text-${this.color}`:"")},type(){let t,e=this.name;if("none"===e||!e)return{none:!0};if(void 0!==this.$q.iconMapFn){const t=this.$q.iconMapFn(e);if(void 0!==t){if(void 0===t.icon)return{cls:t.cls,content:void 0!==t.content?t.content:" "};if("none"===(e=t.icon)||!e)return{none:!0}}}if(!0===se.test(e)){const[t,i=Yt]=e.split("|");return{svg:!0,viewBox:i,nodes:t.split("&&").map(t=>{const[e,i,s]=t.split("@@");return this.$createElement("path",{attrs:{d:e,transform:s},style:i})})}}if(!0===oe.test(e))return{img:!0,src:e.substring(4)};if(!0===ne.test(e)){const[t,i=Yt]=e.split("|");return{svguse:!0,src:t.substring(7),viewBox:i}}let i=" ";const s=e.match(te);if(null!==s)t=Xt[s[1]](e);else if(!0===ae.test(e))t=e;else if(!0===re.test(e))t=`ionicons ion-${!0===this.$q.platform.is.ios?"ios":"md"}${e.substr(3)}`;else if(!0===ie.test(e)){t="notranslate material-symbols";const s=e.match(ie);null!==s&&(e=e.substring(6),t+=Jt[s[1]]),i=e}else{t="notranslate material-icons";const s=e.match(ee);null!==s&&(e=e.substring(2),t+=Zt[s[1]]),i=e}return{cls:t,content:i}}},render(t){const e={class:this.classes,style:this.sizeStyle,on:{...this.qListeners},attrs:{"aria-hidden":"true",role:"presentation"}};return!0===this.type.none?t(this.tag,e,jt(this,"default")):!0===this.type.img?t("span",e,Wt([t("img",{attrs:{src:this.type.src}})],this,"default")):!0===this.type.svg?t("span",e,Wt([t("svg",{attrs:{viewBox:this.type.viewBox||"0 0 24 24",focusable:"false"}},this.type.nodes)],this,"default")):!0===this.type.svguse?t("span",e,Wt([t("svg",{attrs:{viewBox:this.type.viewBox,focusable:"false"}},[t("use",{attrs:{"xlink:href":this.type.src}})])],this,"default")):(void 0!==this.type.cls&&(e.class+=" "+this.type.cls),t(this.tag,e,Wt([this.type.content],this,"default")))}}),he=e.default.extend({name:"QAvatar",mixins:[Ht,Vt],props:{fontSize:String,color:String,textColor:String,icon:String,square:Boolean,rounded:Boolean},computed:{classes(){return{[`bg-${this.color}`]:this.color,[`text-${this.textColor} q-chip--colored`]:this.textColor,"q-avatar--square":this.square,"rounded-borders":this.rounded}},contentStyle(){if(this.fontSize)return{fontSize:this.fontSize}}},render(t){const e=void 0!==this.icon?[t(le,{props:{name:this.icon}})]:void 0;return t("div",{staticClass:"q-avatar",style:this.sizeStyle,class:this.classes,on:{...this.qListeners}},[t("div",{staticClass:"q-avatar__content row flex-center overflow-hidden",style:this.contentStyle},Ut(e,this,"default"))])}}),de=e.default.extend({name:"QBadge",mixins:[Ht],props:{color:String,textColor:String,floating:Boolean,transparent:Boolean,multiLine:Boolean,outline:Boolean,rounded:Boolean,label:[Number,String],align:{type:String,validator:t=>["top","middle","bottom"].includes(t)}},computed:{style(){if(void 0!==this.align)return{verticalAlign:this.align}},classes(){const t=!0===this.outline&&this.color||this.textColor;return"q-badge flex inline items-center no-wrap"+` q-badge--${!0===this.multiLine?"multi":"single"}-line`+(!0===this.outline?" q-badge--outline":void 0!==this.color?` bg-${this.color}`:"")+(void 0!==t?` text-${t}`:"")+(!0===this.floating?" q-badge--floating":"")+(!0===this.rounded?" q-badge--rounded":"")+(!0===this.transparent?" q-badge--transparent":"")},attrs(){return{role:"status","aria-label":this.label}}},render(t){return t("div",{style:this.style,class:this.classes,attrs:this.attrs,on:{...this.qListeners}},void 0!==this.label?[this.label]:jt(this,"default"))}}),ce={props:{dark:{type:Boolean,default:null}},computed:{darkSuffix(){return null===this.dark&&null===this.$q.dark.isActive?"dark-auto":!0===this.dark||null===this.dark&&!0===this.$q.dark.isActive?"dark":"light"}}};const ue={role:"alert"};var pe=e.default.extend({name:"QBanner",mixins:[Ht,ce],props:{inlineActions:Boolean,dense:Boolean,rounded:Boolean},render(t){const e=jt(this,"action"),i=[t("div",{staticClass:"q-banner__avatar col-auto row items-center self-start"},jt(this,"avatar")),t("div",{staticClass:"q-banner__content col text-body2"},jt(this,"default"))];return void 0!==e&&i.push(t("div",{staticClass:"q-banner__actions row items-center justify-end",class:`col-${!0===this.inlineActions?"auto":"all"}`},e)),t("div",{staticClass:"q-banner row items-center",class:{"q-banner--top-padding":void 0!==e&&!this.inlineActions,"q-banner--dense":this.dense,[`q-banner--${this.darkSuffix} q-${this.darkSuffix}`]:!0,"rounded-borders":this.rounded},attrs:ue,on:{...this.qListeners}},i)}});const me={role:"toolbar"};var ge=e.default.extend({name:"QBar",mixins:[Ht,ce],props:{dense:Boolean},computed:{classes(){return`q-bar--${!0===this.dense?"dense":"standard"}`+` q-bar--${this.darkSuffix}`}},render(t){return t("div",{staticClass:"q-bar row no-wrap items-center",class:this.classes,attrs:me,on:{...this.qListeners}},jt(this,"default"))}});const fe={left:"start",center:"center",right:"end",between:"between",around:"around",evenly:"evenly",stretch:"stretch"},_e=Object.keys(fe);var ve={props:{align:{type:String,validator:t=>_e.includes(t)}},computed:{alignClass(){const t=void 0===this.align?!0===this.vertical?"stretch":"left":this.align;return`${!0===this.vertical?"items":"justify"}-${fe[t]}`}}};const be=[!0,""];var ye=e.default.extend({name:"QBreadcrumbs",mixins:[Ht,ve],props:{separator:{type:String,default:"/"},separatorColor:String,activeColor:{type:String,default:"primary"},gutter:{type:String,validator:t=>["none","xs","sm","md","lg","xl"].includes(t),default:"sm"}},computed:{classes(){return`${this.alignClass}${"none"===this.gutter?"":` q-gutter-${this.gutter}`}`},sepClass(){return this.separatorColor?` text-${this.separatorColor}`:""},activeClass(){return` text-${this.activeColor}`}},render(t){const e=jt(this,"default");if(void 0===e)return;let i=1;const s=[],o=e.filter(t=>void 0!==t.tag&&t.tag.endsWith("-QBreadcrumbsEl")).length,n=void 0!==this.$scopedSlots.separator?this.$scopedSlots.separator:()=>this.separator;return e.forEach(e=>{if(void 0!==e.tag&&e.tag.endsWith("-QBreadcrumbsEl")){const r=i{})},__navigateOnClick(t){if(!0===this.hasRouterLink){const e=e=>this.__navigateToRouterLink(t,e);this.$emit("click",t,e),!1===t.navigate&&t.preventDefault(),!0!==t.defaultPrevented&&e()}else this.$emit("click",t)}}},ke=e.default.extend({name:"QBreadcrumbsEl",mixins:[Ht,Ce],props:{label:String,icon:String},computed:{iconClass(){return"q-breadcrumbs__el-icon"+(void 0!==this.label?" q-breadcrumbs__el-icon--with-label":"")},renderData(){return{staticClass:"q-breadcrumbs__el q-link flex inline items-center relative-position "+(!0!==this.disable?"q-link--focusable"+this.linkClass:"q-breadcrumbs__el--disabled"),attrs:this.linkAttrs,on:{...this.qListeners,click:this.__navigateOnClick}}}},beforeCreate(){this.fallbackTag="span"},render(t){const e=[];return void 0!==this.icon&&e.push(t(le,{class:this.iconClass,props:{name:this.icon}})),void 0!==this.label&&e.push(this.label),t(this.linkTag,this.renderData,Wt(e,this,"default"))}}),qe={mixins:[Ht],props:{color:String,size:{type:[Number,String],default:"1em"}},computed:{cSize(){return this.size in Ft?`${Ft[this.size]}px`:this.size},classes(){if(this.color)return`text-${this.color}`}}},$e=e.default.extend({name:"QSpinner",mixins:[qe],props:{thickness:{type:Number,default:5}},render(t){return t("svg",{staticClass:"q-spinner q-spinner-mat",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"25 25 50 50"}},[t("circle",{staticClass:"path",attrs:{cx:"50",cy:"50",r:"20",fill:"none",stroke:"currentColor","stroke-width":this.thickness,"stroke-miterlimit":"10"}})])}});function Te(t){if(t===window)return{top:0,left:0};const{top:e,left:i}=t.getBoundingClientRect();return{top:e,left:i}}function Me(t){return t===window?window.innerHeight:t.getBoundingClientRect().height}function Le(t,e){const i=t.style;Object.keys(e).forEach(t=>{i[t]=e[t]})}function Ee(t){const e=typeof t;if("function"===e&&(t=t()),"string"===e)try{t=document.querySelector(t)}catch(t){}return t!==Object(t)?null:!0===t._isVue&&void 0!==t.$el?t.$el:t}function Ae(t){return t===document.documentElement||null===t?document.body:t}var Be={offset:Te,style:function(t,e){return window.getComputedStyle(t).getPropertyValue(e)},height:Me,width:function(t){return t===window?window.innerWidth:t.getBoundingClientRect().width},css:Le,cssBatch:function(t,e){t.forEach(t=>Le(t,e))},ready:function(t){if("function"==typeof t)return"loading"!==document.readyState?t():void document.addEventListener("DOMContentLoaded",t,!1)}};function Pe(t){return t!==Object(t)||0!==t.type.indexOf("key")||t.target!==document.activeElement||!0===t.target.qComposing}function ze(t,e){return!0!==Pe(t)&&[].concat(e).includes(t.keyCode)}const{passiveCapture:Ie}=u;function Oe(t,e,i,s){!0===i.modifiers.stop&&S(t);const{color:o,early:n}=i.modifiers,r=!0===i.modifiers.center||!0===s,a=document.createElement("span"),l=document.createElement("span"),h=f(t),{left:d,top:c,width:u,height:p}=e.getBoundingClientRect(),m=Math.sqrt(u*u+p*p),g=m/2,_=`${(u-m)/2}px`,v=r?_:`${h.left-d-g}px`,b=`${(p-m)/2}px`,y=r?b:`${h.top-c-g}px`,x=Date.now()+300;let w,C,k,q,$;l.className="q-ripple__inner",Le(l,{height:`${m}px`,width:`${m}px`,transform:`translate3d(${v},${y},0) scale3d(.2,.2,1)`,opacity:0}),a.className=`q-ripple${o?" text-"+o:""}`,a.setAttribute("dir","ltr"),a.appendChild(l),e.appendChild(a);const T=()=>{clearTimeout(w);const t=i.abort.indexOf(T);if(t>-1)switch(i.abort.splice(t,1),a.remove(),k){case"mouse":document.removeEventListener("mouseup",C,Ie),e.removeEventListener("mouseout",C,Ie);break;case"keyboard":document.removeEventListener("keyup",C,Ie);break;case"touch":q.removeEventListener("touchmove",T,Ie),q.removeEventListener("touchmove",C,Ie),q.removeEventListener("touchend",C,Ie),q.removeEventListener("touchcancel",C,Ie),i.preventMouse--}};i.abort.push(T);const M=()=>{!0!==$&&(l.classList.remove("q-ripple__inner--enter"),l.classList.add("q-ripple__inner--leave"),l.style.opacity=0,w=setTimeout(T,275))};!0===n&&(0===t.type.indexOf("mouse")?(k="mouse",C=(t=>{"mouseout"===t.type&&!0===e.contains(t.toElement)||(w=setTimeout(M,x-Date.now()))}),document.addEventListener("mouseup",C,Ie),e.addEventListener("mouseout",C,Ie)):0===t.type.indexOf("key")?(k="keyboard",i.preventKeyboard=!0,C=(()=>{i.preventKeyboard=!1,w=setTimeout(M,x-Date.now())}),document.addEventListener("keyup",C,Ie)):(k="touch",$=!0,q=t.target,i.preventMouse++,C=(t=>{"touchmove"===t.type&&0!==t.changedTouches.length&&!0===e.contains(document.elementFromPoint(t.changedTouches[0].clientX,t.changedTouches[0].clientY))||(w=setTimeout(M,x-Date.now()))}),q.addEventListener("touchmove",T,Ie),q.addEventListener("touchmove",C,Ie),q.addEventListener("touchend",C,Ie),q.addEventListener("touchcancel",C,Ie))),w=setTimeout(()=>{!0===$&&($=void 0,q.removeEventListener("touchmove",T,Ie)),l.classList.add("q-ripple__inner--enter"),l.style.transform=`translate3d(${_},${b},0) scale3d(1,1,1)`,l.style.opacity=.2,!0!==n&&(w=setTimeout(M,x-Date.now()))},!0===$?70:50)}function Re(t,e,{modifiers:i,arg:s,value:o}){if(t.enabled=!1!==o,!0===t.enabled){const n=Object.assign({},bt.config.ripple,i,o),r=void 0===t.modifiers.early||t.modifiers.early!==n.early;t.modifiers={early:!0===n.early,stop:!0===n.stop,center:!0===n.center,color:n.color||s,keyCodes:[].concat(n.keyCodes||13)},!0===r&&($(t,"main"),!0===n.early?q(t,"main",[[e,"mousedown","start","passive"],[e,"touchstart","start","passive"],[e,"keydown","keystart","passive"]]):q(t,"main",[[e,"click","start","passive"],[e,"keyup","keystart","passive"]]))}else t.abort.slice().forEach(t=>{t()}),$(t,"main"),t.preventMouse=0,t.preventKeyboard=!1}var Fe={name:"ripple",inserted(t,e){const i={modifiers:{},abort:[],preventMouse:0,preventKeyboard:!1,start(e){!0!==i.enabled||!0===e.qSkipRipple||"mousedown"===e.type&&0!==i.preventMouse||!(!0!==d.is.ie||e.clientX>=0)||Oe(e,t,i,bt.interaction.isKeyboard)},keystart(e){!0!==i.preventKeyboard&&!0===i.enabled&&!0!==e.qSkipRipple&&!0===ze(e,i.modifiers.keyCodes)&&Oe(e,t,i,!0)}};Re(i,t,e),t.__qripple&&(t.__qripple_old=t.__qripple),t.__qripple=i},update(t,e){void 0!==t.__qripple&&Re(t.__qripple,t,e)},unbind(t){const e=t.__qripple_old||t.__qripple;void 0!==e&&(e.abort.slice().forEach(t=>{t()}),$(e,"main"),delete t[t.__qripple_old?"__qripple_old":"__qripple"])}},De={directives:{Ripple:Fe},props:{ripple:{type:[Boolean,Object],default:!0}}};const Ve={none:0,xs:4,sm:8,md:16,lg:24,xl:32},Ne=["button","submit","reset"],He=/[^\s]\/[^\s]/,je=["flat","outline","push","unelevated"],Qe=(t,e)=>!0===t.flat?"flat":!0===t.outline?"outline":!0===t.push?"push":!0===t.unelevated?"unelevated":e;var We={mixins:[Ht,De,Ce,ve,Dt({xs:8,sm:10,md:14,lg:20,xl:24})],props:{type:{type:String,default:"button"},to:[Object,String],replace:Boolean,append:Boolean,label:[Number,String],icon:String,iconRight:String,...je.reduce((t,e)=>(t[e]=Boolean)&&t,{}),square:Boolean,round:Boolean,rounded:Boolean,glossy:Boolean,size:String,fab:Boolean,fabMini:Boolean,padding:String,color:String,textColor:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,tabindex:[Number,String],align:{default:"center"},stack:Boolean,stretch:Boolean,loading:{type:Boolean,default:null},disable:Boolean},computed:{style(){if(!1===this.fab&&!1===this.fabMini)return this.sizeStyle},isRounded(){return!0===this.rounded||!0===this.fab||!0===this.fabMini},isActionable(){return!0!==this.disable&&!0!==this.loading},computedTabIndex(){return!0===this.isActionable?this.tabindex||0:-1},design(){return Qe(this,"standard")},attrs(){const t={tabindex:this.computedTabIndex};return!0===this.hasLink?Object.assign(t,this.linkAttrs):!0===Ne.includes(this.type)&&(t.type=this.type),"a"===this.linkTag?(!0===this.disable?t["aria-disabled"]="true":void 0===t.href&&(t.role="button"),!0!==this.hasRouterLink&&!0===He.test(this.type)&&(t.type=this.type)):!0===this.disable&&(t.disabled="",t["aria-disabled"]="true"),!0===this.loading&&void 0!==this.percentage&&(t.role="progressbar",t["aria-valuemin"]=0,t["aria-valuemax"]=100,t["aria-valuenow"]=this.percentage),t},classes(){let t;void 0!==this.color?t=!0===this.flat||!0===this.outline?`text-${this.textColor||this.color}`:`bg-${this.color} text-${this.textColor||"white"}`:this.textColor&&(t=`text-${this.textColor}`);const e=!0===this.round?"round":`rectangle${!0===this.isRounded?" q-btn--rounded":!0===this.square?" q-btn--square":""}`;return`q-btn--${this.design} q-btn--${e}`+(void 0!==t?" "+t:"")+(!0===this.isActionable?" q-btn--actionable q-focusable q-hoverable":!0===this.disable?" disabled":"")+(!0===this.fab?" q-btn--fab":!0===this.fabMini?" q-btn--fab-mini":"")+(!0===this.noCaps?" q-btn--no-uppercase":"")+(!0===this.noWrap?"":" q-btn--wrap")+(!0===this.dense?" q-btn--dense":"")+(!0===this.stretch?" no-border-radius self-stretch":"")+(!0===this.glossy?" glossy":"")},innerClasses(){return this.alignClass+(!0===this.stack?" column":" row")+(!0===this.noWrap?" no-wrap text-no-wrap":"")+(!0===this.loading?" q-btn__content--hidden":"")},wrapperStyle(){if(void 0!==this.padding)return{padding:this.padding.split(/\s+/).map(t=>t in Ve?Ve[t]+"px":t).join(" "),minWidth:"0",minHeight:"0"}}}};const{passiveCapture:Ue}=u;let Ye=void 0,Ke=void 0,Ge=void 0;const Xe={role:"img","aria-hidden":"true"};var Ze=e.default.extend({name:"QBtn",mixins:[We],props:{percentage:Number,darkPercentage:Boolean},computed:{hasLabel(){return void 0!==this.label&&null!==this.label&&""!==this.label},computedRipple(){return!1!==this.ripple&&{keyCodes:!0===this.hasLink?[13,32]:[13],...!0===this.ripple?{}:this.ripple}},percentageStyle(){const t=Math.max(0,Math.min(100,this.percentage));if(t>0)return{transition:"transform 0.6s",transform:`translateX(${t-100}%)`}},onEvents(){if(!0===this.loading)return{mousedown:this.__onLoadingEvt,touchstart:this.__onLoadingEvt,click:this.__onLoadingEvt,keydown:this.__onLoadingEvt,keyup:this.__onLoadingEvt};if(!0===this.isActionable){const t={...this.qListeners,click:this.click,keydown:this.__onKeydown,mousedown:this.__onMousedown};return!0===this.$q.platform.has.touch&&(t[`${void 0===t.touchstart?"&":""}touchstart`]=this.__onTouchstart),t}return{click:w}},directives(){if(!0!==this.disable&&!1!==this.ripple)return[{name:"ripple",value:this.computedRipple,modifiers:{center:this.round}}]}},methods:{click(t){if(void 0!==t){if(!0===t.defaultPrevented)return;const e=document.activeElement;if("submit"===this.type&&(!0===this.$q.platform.is.ie&&(t.clientX<0||t.clientY<0)||e!==document.body&&!1===this.$el.contains(e)&&!1===e.contains(this.$el))){this.$el.focus();const t=()=>{document.removeEventListener("keydown",w,!0),document.removeEventListener("keyup",t,Ue),void 0!==this.$el&&this.$el.removeEventListener("blur",t,Ue)};document.addEventListener("keydown",w,!0),document.addEventListener("keyup",t,Ue),this.$el.addEventListener("blur",t,Ue)}}this.__navigateOnClick(t)},__onKeydown(t){this.$emit("keydown",t),!0===ze(t,[13,32])&&(Ke!==this.$el&&(void 0!==Ke&&this.__cleanup(),!0!==t.defaultPrevented&&(this.$el.focus(),Ke=this.$el,this.$el.classList.add("q-btn--active"),document.addEventListener("keyup",this.__onPressEnd,!0),this.$el.addEventListener("blur",this.__onPressEnd,Ue))),w(t))},__onTouchstart(t){if(this.$emit("touchstart",t),Ye!==this.$el&&(void 0!==Ye&&this.__cleanup(),!0!==t.defaultPrevented)){Ye=this.$el;const e=this.touchTargetEl=t.target;e.addEventListener("touchcancel",this.__onPressEnd,Ue),e.addEventListener("touchend",this.__onPressEnd,Ue)}},__onMousedown(t){this.$emit("mousedown",t),Ge!==this.$el&&(void 0!==Ge&&this.__cleanup(),!0!==t.defaultPrevented&&(Ge=this.$el,this.$el.classList.add("q-btn--active"),document.addEventListener("mouseup",this.__onPressEnd,Ue)))},__onPressEnd(t){if(void 0===t||"blur"!==t.type||document.activeElement!==this.$el){if(void 0!==t&&"keyup"===t.type){if(Ke===this.$el&&!0===ze(t,[13,32])){const e=new MouseEvent("click",t);!0===t.defaultPrevented&&x(e),!0===t.cancelBubble&&S(e),this.$el.dispatchEvent(e),w(t)}this.$emit("keyup",t)}this.__cleanup()}},__cleanup(t){const e=this.$refs.blurTarget;if(!0===t||Ye!==this.$el&&Ge!==this.$el||void 0===e||e===document.activeElement||!0!==this.$el.contains(document.activeElement)||(e.setAttribute("tabindex",-1),e.focus()),Ye===this.$el){const t=this.touchTargetEl;t.removeEventListener("touchcancel",this.__onPressEnd,Ue),t.removeEventListener("touchend",this.__onPressEnd,Ue),Ye=this.touchTargetEl=void 0}Ge===this.$el&&(document.removeEventListener("mouseup",this.__onPressEnd,Ue),Ge=void 0),Ke===this.$el&&(document.removeEventListener("keyup",this.__onPressEnd,!0),void 0!==this.$el&&this.$el.removeEventListener("blur",this.__onPressEnd,Ue),Ke=void 0),void 0!==this.$el&&this.$el.classList.remove("q-btn--active")},__onLoadingEvt(t){w(t),t.qSkipRipple=!0}},beforeDestroy(){this.__cleanup(!0)},render(t){let e=[];void 0!==this.icon&&e.push(t(le,{attrs:Xe,props:{name:this.icon,left:!1===this.stack&&!0===this.hasLabel}})),!0===this.hasLabel&&e.push(t("span",{staticClass:"block"},[this.label])),e=Wt(e,this,"default"),void 0!==this.iconRight&&!1===this.round&&e.push(t(le,{attrs:Xe,props:{name:this.iconRight,right:!1===this.stack&&!0===this.hasLabel}}));const i=[t("span",{staticClass:"q-focus-helper",ref:"blurTarget"})];return!0===this.loading&&void 0!==this.percentage&&i.push(t("span",{staticClass:"q-btn__progress absolute-full overflow-hidden",class:!0===this.darkPercentage?"q-btn__progress--dark":""},[t("span",{staticClass:"q-btn__progress-indicator fit block",style:this.percentageStyle})])),i.push(t("span",{staticClass:"q-btn__wrapper col row q-anchor--skip",style:this.wrapperStyle},[t("span",{staticClass:"q-btn__content text-center col items-center q-anchor--skip",class:this.innerClasses},e)])),null!==this.loading&&i.push(t("transition",{props:{name:"q-transition--fade"}},!0===this.loading?[t("span",{key:"loading",staticClass:"absolute-full flex flex-center"},void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():[t($e)])]:void 0)),t(!0===this.hasLink||"a"===this.type?"a":"button",{staticClass:"q-btn q-btn-item non-selectable no-outline",class:this.classes,style:this.style,attrs:this.attrs,on:this.onEvents,directives:this.directives},i)}});const Je=new WeakMap;function ti(t){if(null!==t&&void 0!==t){const e=Je.get(t)||t.closest(".q-panel-parent");null!==e&&e.classList.remove("q-transition--hide-scroll")}}const ei={"before-leave":function(t){if(null!==t&&void 0!==t){const e=t.closest(".q-panel-parent");Je.set(t,e),null!==e&&e.classList.add("q-transition--hide-scroll")}},"after-leave":ti,"leave-cancelled":ti};var ii={props:{transitionShow:{type:String,default:"fade"},transitionHide:{type:String,default:"fade"}},computed:{transitionProps(){const t=`q-transition--${this.transitionShow}`,e=`q-transition--${this.transitionHide}`;return{enterClass:`${t}-enter`,leaveClass:`${e}-leave`,appearClass:`${t}-appear`,enterToClass:`${t}-enter-to`,leaveToClass:`${e}-leave-to`,appearToClass:`${t}-appear-to`,enterActiveClass:`${t}-enter-active`,leaveActiveClass:`${e}-leave-active`,appearActiveClass:`${t}-appear-active`}}}},si=e.default.extend({name:"QBtnGroup",mixin:[Ht],props:{unelevated:Boolean,outline:Boolean,flat:Boolean,rounded:Boolean,square:Boolean,push:Boolean,stretch:Boolean,glossy:Boolean,spread:Boolean},computed:{classes(){return["unelevated","outline","flat","rounded","square","push","stretch","glossy"].filter(t=>!0===this[t]).map(t=>`q-btn-group--${t}`).join(" ")}},render(t){return t("div",{staticClass:"q-btn-group row no-wrap "+(!0===this.spread?"q-btn-group--spread":"inline"),class:this.classes,on:{...this.qListeners}},jt(this,"default"))}});function oi(){if(void 0!==window.getSelection){const t=window.getSelection();void 0!==t.empty?t.empty():void 0!==t.removeAllRanges&&(t.removeAllRanges(),!0!==c.is.mobile&&t.addRange(document.createRange()))}else void 0!==document.selection&&document.selection.empty()}const ni=[];function ri(t){ni.slice().forEach(e=>{t&&t.target&&!0===t.target.qScrollPrevented||!0===v(t,e.scrollTarget)&&e(t)})}var ai={props:{target:{default:!0},noParentEvent:Boolean,contextMenu:Boolean},watch:{contextMenu(t){void 0!==this.anchorEl&&(this.__unconfigureAnchorEl(),this.__configureAnchorEl(t))},target(){void 0!==this.anchorEl&&this.__unconfigureAnchorEl(),this.__pickAnchorEl()},noParentEvent(t){void 0!==this.anchorEl&&(!0===t?this.__unconfigureAnchorEl():this.__configureAnchorEl())}},methods:{__showCondition(t){return void 0!==this.anchorEl&&(void 0===t||(void 0===t.touches||t.touches.length<=1))},__contextClick(t){this.hide(t),x(t),this.$nextTick(()=>{this.show(t),t===Object(t)&&(t.qAnchorHandled=!0)})},__toggleKey(t){!0===ze(t,13)&&this.toggle(t)},__mobileCleanup(t){this.anchorEl.classList.remove("non-selectable"),clearTimeout(this.touchTimer),!0===this.showing&&void 0!==t&&oi()},prevent:x,__mobileTouch(t){if(this.__mobileCleanup(t),!0!==this.__showCondition(t))return;this.hide(t),this.anchorEl.classList.add("non-selectable");const e=t.target;q(this,"anchor",[[e,"touchmove","__mobileCleanup","passive"],[e,"touchend","__mobileCleanup","passive"],[e,"touchcancel","__mobileCleanup","passive"],[this.anchorEl,"contextmenu","prevent","notPassive"]]),this.touchTimer=setTimeout(()=>{this.show(t),t===Object(t)&&(t.qAnchorHandled=!0)},300)},__unconfigureAnchorEl(){$(this,"anchor")},__configureAnchorEl(t=this.contextMenu){if(!0===this.noParentEvent||void 0===this.anchorEl)return;let e;q(this,"anchor",e=!0===t?!0===this.$q.platform.is.mobile?[[this.anchorEl,"touchstart","__mobileTouch","passive"]]:[[this.anchorEl,"mousedown","hide","passive"],[this.anchorEl,"contextmenu","__contextClick","notPassive"]]:[[this.anchorEl,"click","toggle","passive"],[this.anchorEl,"keyup","__toggleKey","passive"]])},__setAnchorEl(t){for(this.anchorEl=t;this.anchorEl.classList.contains("q-anchor--skip");)this.anchorEl=this.anchorEl.parentNode;this.__configureAnchorEl()},__pickAnchorEl(){!1===this.target||""===this.target||null===this.parentEl?this.anchorEl=void 0:!0===this.target?this.__setAnchorEl(this.parentEl):(this.anchorEl=Ee(this.target)||void 0,void 0!==this.anchorEl?this.__configureAnchorEl():console.error(`Anchor: target "${this.target}" not found`,this))},__changeScrollEvent(t,e){const i=ni.length>0;if(void 0!==this.__scrollFn){const t=ni.indexOf(this.__scrollFn);t>-1&&ni.splice(t,1),this.__scrollFn=void 0}void 0!==t&&null!==e&&void 0!==e&&(t.scrollTarget=e===window?document:e,ni.push(t),this.__scrollFn=t),!0===i&&0===ni.length?window.removeEventListener("scroll",ri,u.passiveCapture):!1===i&&ni.length>0&&window.addEventListener("scroll",ri,u.passiveCapture)}},created(){"function"==typeof this.__configureScrollTarget&&"function"==typeof this.__unconfigureScrollTarget&&(this.noParentEventWatcher=this.$watch("noParentEvent",()=>{this.__unconfigureScrollTarget(),this.__configureScrollTarget()}))},mounted(){this.parentEl=this.$el.parentNode,this.__pickAnchorEl(),!0===this.value&&void 0===this.anchorEl&&this.$emit("input",!1)},beforeDestroy(){clearTimeout(this.touchTimer),void 0!==this.noParentEventWatcher&&this.noParentEventWatcher(),void 0!==this.__anchorCleanup&&this.__anchorCleanup(),this.__unconfigureAnchorEl()}},li={created(){this.__tickFnList=[],this.__timeoutFnList=[]},deactivated(){this.__tickFnList.forEach(t=>{t.removeTick()}),this.__timeoutFnList.forEach(t=>{t.removeTimeout()})},beforeDestroy(){this.__tickFnList.forEach(t=>{t.removeTick()}),this.__tickFnList=void 0,this.__timeoutFnList.forEach(t=>{t.removeTimeout()}),this.__timeoutFnList=void 0},methods:{__useTick(t,e){const i={removeTick(){i.fn=void 0},registerTick:t=>{i.fn=t,this.$nextTick(()=>{i.fn===t&&(!1===this._isDestroyed&&i.fn(),i.fn=void 0)})}};this.__tickFnList.push(i),this[t]=i.registerTick,void 0!==e&&(this[e]=i.removeTick)},__useTimeout(t,e){const i={removeTimeout(){clearTimeout(i.timer)},registerTimeout:(t,e)=>{clearTimeout(i.timer),!1===this._isDestroyed&&(i.timer=setTimeout(t,e))}};this.__timeoutFnList.push(i),this[t]=i.registerTimeout,void 0!==e&&(this[e]=i.removeTimeout)}}};const hi={timeStamp:null,label:null,show:null};function di(t,e){if("click"!==t.type)return!1;const{timeStamp:i,label:s,show:o}=hi,{target:n}=t;return hi.show=e,hi.timeStamp=t.timeStamp,hi.label=n?"string"==typeof n.id&&""!==n.id&&null!==s&&s.htmlFor===n.id?s:"function"==typeof n.closest?n.closest("label"):null:null,i===hi.timeStamp&&s===hi.label&&o!==e}var ci={mixins:[Ht],props:{value:{type:Boolean,default:void 0}},data:()=>({showing:!1}),watch:{value(t){this.__processModelChange(t)},$route(){!0===this.hideOnRouteChange&&!0===this.showing&&this.hide()}},methods:{toggle(t){this[!0===this.showing?"hide":"show"](t),t===Object(t)&&(t.qAnchorHandled=!0)},show(t){!0===this.disable||t===Object(t)&&(!0===t.qAnchorHandled||!0===di(t,"show"))||void 0!==this.__showCondition&&!0!==this.__showCondition(t)||(void 0!==this.qListeners.input&&!1===i&&(this.$emit("input",!0),this.payload=t,this.$nextTick(()=>{this.payload===t&&(this.payload=void 0)})),void 0!==this.value&&void 0!==this.qListeners.input&&!0!==i||this.__processShow(t))},__processShow(t){!0!==this.showing&&(void 0!==this.__preparePortal&&this.__preparePortal(),this.showing=!0,this.$emit("before-show",t),void 0!==this.__show?this.__show(t):this.$emit("show",t))},hide(t){!0!==this.disable&&(t!==Object(t)||!0!==t.qAnchorHandled&&!0!==di(t,"hide"))&&(void 0!==this.qListeners.input&&!1===i&&(this.$emit("input",!1),this.payload=t,this.$nextTick(()=>{this.payload===t&&(this.payload=void 0)})),void 0!==this.value&&void 0!==this.qListeners.input&&!0!==i||this.__processHide(t))},__processHide(t){!1!==this.showing&&(this.showing=!1,this.$emit("before-hide",t),void 0!==this.__hide?this.__hide(t):this.$emit("hide",t))},__processModelChange(t){!0===this.disable&&!0===t?void 0!==this.qListeners.input&&this.$emit("input",!1):!0===t!==this.showing&&this[`__process${!0===t?"Show":"Hide"}`](this.payload)}}};const ui=[":focus",'a[href]:not([tabindex="-1"]):not(.q-focus__clone)','area[href]:not([tabindex="-1"]):not(.q-focus__clone)','input:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','select:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','textarea:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','button:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)','iframe:not([tabindex="-1"]):not(.q-focus__clone)','[tabindex]:not([tabindex="-1"]):not(.q-focus__clone)','[contenteditable]:not([tabindex="-1"]):not(.q-focus__clone):not([contenteditable="false"])',".q-tab.q-focusable:not(.q-focus__clone)"].join(","),pi=["input:not([disabled])","select:not([disabled])","select:not([disabled]) *","textarea:not([disabled])",'[contenteditable]:not([contenteditable="false"])','[contenteditable]:not([contenteditable="false"]) *',".q-key-group-navigation--ignore-key",".q-key-group-navigation--ignore-key *",".q-focus__clone"].join(","),mi=['input:not(.q-focus__clone):not([disabled]):not([readonly]):not([type="button"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="radio"]):not([type="range"]):not([type="reset"]):not([type="submit"])',"textarea:not(.q-focus__clone):not([disabled]):not([readonly])",'[contenteditable]:not(.q-focus__clone):not([contenteditable="false"])','[contenteditable]:not(.q-focus__clone):not([contenteditable="false"]) *'].join(",");let gi,fi=0;function _i(t){return t.matches(".q-dialog *, .q-menu *, .q-tooltip *, .q-stepper__step-content *")}function vi(t){return t.matches(mi)}function bi(t){if(void 0===gi){const e="function"==typeof t.scrollIntoViewIfNeeded?t=>{t.scrollIntoViewIfNeeded(!1)}:t=>{t.scrollIntoView()};gi=!0===d.is.ios||!0===d.is.nativeMobile||!0===d.is.standalone?t=>{const i=vi(t);if(t===document.body||!0!==i&&t.tabIndex<0)return void(t!==document.activeElement&&t.focus({preventScroll:!0}));const s=_i(t),o=t.cloneNode(!0),n=t.parentNode,r=document.scrollingElement||document.documentElement,a=r.scrollTop;o.setAttribute("tabindex",-1),o.removeAttribute("id"),o.removeAttribute("autofocus"),o.removeAttribute("data-autofocus"),o.classList.add("q-focus__clone"),n.insertBefore(o,t),t!==document.activeElement&&t.focus({preventScroll:!0}),setTimeout(()=>{if(o.remove(),t&&t===document.activeElement&&!0===i){!0===s&&e(t);const{top:i,bottom:o}=t.getBoundingClientRect(),n=void 0!==window.visualViewport?window.visualViewport.height:window.innerHeight;let l=r.scrollTop;if(i<0?l+=i-32:i>0&&o>n&&(l+=o-n+64),requestAnimationFrame(()=>{r.scrollTop=l}),!0!==t.qRestoreScrollSet&&!0!==s){fi+=l-a;const e=()=>{t&&(t.qRestoreScrollSet=void 0,t.removeEventListener("blur",e)),r.scrollTop!==l?fi=0:0!==fi&&requestAnimationFrame(()=>{const{activeElement:t}=document;(!t||!0!==vi(t)&&t.tabIndex<0)&&(r.scrollTop-=fi,fi=0)})};t.qRestoreScrollSet=!0,t.addEventListener("blur",e)}}},200)}:t=>{t!==document.activeElement&&t.focus({preventScroll:!0}),!0===_i(t)&&!0===vi(t)&&setTimeout(()=>{t&&t===document.activeElement&&e(t)},200)}}gi(t)}function yi(t,e,i=1,s,o,n){const r=t.length-1;if(!0===o&&(e>r||e<0))return;const a=Ct(e,0,r);if(a===n||a>r)return;const l=document.activeElement,h=!0===s?()=>{bi(t[a])}:()=>{t[a].focus()};null!==l?(l._qKeyNavIgnore=!0,h(),l._qKeyNavIgnore=!1):h(),document.activeElement!==t[a]&&yi(t,a+i,i,s,o,void 0===n?a:n)}const Si=Array.prototype.find,xi=Array.prototype.findIndex,wi=Array.prototype.map;function Ci(t,e){do{if("QMenu"===t.$options.name){if(t.hide(e),!0===t.separateClosePopup)return t.$parent}else if(void 0!==t.__renderPortal)return void 0!==t.$parent&&"QPopupProxy"===t.$parent.$options.name?(t.hide(e),t.$parent):t;t=t.$parent}while(void 0!==t&&(void 0===t.$el.contains||!0!==t.$el.contains(e.target)))}function ki(t){let e=Si.call(t.children,t=>t.matches&&t.matches(".q-portal__container"));return void 0===e&&(e=document.createElement("div")).classList.add("q-portal__container"),e.parentElement===t&&null===e.nextElementSibling||t.appendChild(e),e}const qi=new WeakMap,$i={inheritAttrs:!1,props:{contentClass:[Array,String,Object],contentStyle:[Array,String,Object]},methods:{focus(t){const e=this.__getInnerNode();if(void 0!==e&&!0!==e.contains(document.activeElement)){let i=null;if(""!==t&&(i=e.querySelector("string"==typeof t?t:"[autofocus][tabindex], [data-autofocus][tabindex]")||e.querySelector("string"==typeof t?t:"[autofocus] [tabindex], [data-autofocus] [tabindex]")||e.querySelector("string"==typeof t?t:"[autofocus], [data-autofocus]")),null!==i&&"function"==typeof i.focus)bi(i);else{const t=Array.prototype.slice.call(e.querySelectorAll(ui));t.length>0&&yi(t,!0===t[0].classList.contains("q-key-group-navigation--ignore-focus")?1:0,1,!0)}}},__showPortal(){if(void 0!==this.$q.fullscreen&&!0===this.$q.fullscreen.isCapable){const t=()=>{if(void 0===this.__portal)return;const t=Ae(this.$q.fullscreen.activeEl),e=this.__portal.$el.parentElement,i=ki(t);e===i||!0!==this.__onGlobalDialog&&!0!==t.contains(this.$el)||(i.appendChild(this.__portal.$el),e&&e.parentElement!==document.body&&0===e.children.length&&e.remove())};this.unwatchFullscreen=this.$watch("$q.fullscreen.activeEl",j(t,50)),!1!==this.__onGlobalDialog&&!0!==this.$q.fullscreen.isActive||t()}else void 0!==this.__portal&&!1===this.__onGlobalDialog&&ki(document.body).appendChild(this.__portal.$el)},__hidePortal(){if(void 0!==this.__portal){void 0!==this.unwatchFullscreen&&(this.unwatchFullscreen(),this.unwatchFullscreen=void 0),!1===this.__onGlobalDialog&&(this.__portal.$destroy(),this.__portal.$el.remove());const t=this.__portal.$el.parentElement;t&&t.parentElement!==document.body&&0===t.children.length&&t.remove(),this.__portal=void 0}},__preparePortal(){void 0===this.__portal&&(!0===this.__onGlobalDialog&&qi.set(this.$el,this),this.__portal=!0===this.__onGlobalDialog?{$el:this.$el,$refs:this.$refs}:new e.default({name:"QPortal",parent:this,inheritAttrs:!1,render:t=>(this.$nextTick(()=>{qi.set(this.__portal.$el,this)}),this.__renderPortal(t)),components:this.$options.components,directives:this.$options.directives}).$mount())},__getInnerNode(){return void 0!==this.__portal&&void 0!==this.__portal.$refs?this.__portal.$refs.inner:void 0},__focusCyclePortal(t){if(void 0===this.__portal||!0!==document.body.contains(this.__portal.$el))return;const e=this.__portal.$el.parentElement.children,{activeElement:i}=document,s=i?xi.call(e,t=>"function"==typeof t.contains&&t.contains(i)):-1;if(s<0){if(!0!==t){if(i){const t=qi.get(e[0]);t&&(t.__refocusTarget=i)}this.focus()}return}const o=qi.get(e[s]);if(!0===t){const t=wi.call(e,t=>qi.get(t)).filter(t=>t&&!0===this.__portal.$el.contains(t.__refocusTarget));if(t.length>0&&t.forEach(t=>{t.__refocusTarget=this.__refocusTarget}),t.indexOf(o)>-1)return}const n=!0===t?this:o||this,r=n.__refocusTarget;if(n!==this||!0!==t||!1!==n.seamless){if(!1===n.seamless)return void this.focus();if(s>0){const i=e[s-1],o=qi.get(i);if(o&&(!0!==t||!1===o.seamless)&&(-1!==[null,void 0,document.body].indexOf(r)||!1===i.contains(r)))return void o.focus()}}if(-1===[null,void 0,document.body].indexOf(r)&&!0===document.body.contains(r))bi(r);else if(!0!==t){const{body:t}=document,e=t.hasAttribute("tabindex");!1===e&&t.setAttribute("tabindex",-1),t.focus(),!1===e&&this.$nextTick(()=>{t&&t.removeAttribute("tabindex")})}}},render(t){if(!0===this.__onGlobalDialog)return this.__renderPortal(t);void 0!==this.__portal&&this.__portal.$forceUpdate()},beforeDestroy(){this.__hidePortal()}};!1===i&&($i.created=function(){this.__onGlobalDialog=function(t){for(;void 0!==t;){if("QGlobalDialog"===t.$options.name)return!0;if("QDialog"===t.$options.name)return!1;t=t.$parent}return!1}(this.$parent)});var Ti={computed:{focusGuardElements(){return{firstGuard:this.$createElement("span",{staticClass:"no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus",attrs:{tabindex:0},on:{focus:this.__focusLast}}),lastGuard:this.$createElement("span",{staticClass:"no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus",attrs:{tabindex:0},on:{focus:this.__focusFirst}})}}},methods:{__focusFirst(t){const e=this.__getInnerNode();if(void 0!==e&&(!0!==t||!0!==e.contains(document.activeElement))){yi(Array.prototype.slice.call(e.querySelectorAll(ui),1,-1),0,1)}},__focusLast(){const t=this.__getInnerNode();if(void 0!==t){const e=Array.prototype.slice.call(t.querySelectorAll(ui),1,-1);yi(e,e.length-1,-1)}},__getFocusWrappedContent(t){return Wt([this.focusGuardElements.firstGuard],this,t).concat(this.focusGuardElements.lastGuard)}}};let Mi;const{notPassiveCapture:Li,passiveCapture:Ei}=u,Ai={click:[],focus:[]};function Bi(t,e){for(let i=t.length-1;i>=0;i--)if(void 0===t[i](e))return}function Pi(t){clearTimeout(Mi),"focusin"===t.type&&(!0===d.is.ie&&t.target===document.body||!0===t.target.hasAttribute("tabindex"))?Mi=setTimeout(()=>{Bi(Ai.focus,t)},!0===d.is.ie?500:200):Bi(Ai.click,t)}var zi={name:"click-outside",bind(t,{arg:e,value:i},s){const o=s.componentInstance||s.context,n={trigger:i,toggleEl:e,handler(e){const i=e.target;if(!(!0===e.qClickOutside||!0!==document.body.contains(i)||8===i.nodeType||i===document.documentElement||!1!==i.classList.contains("no-pointer-events")||!0===function(t){for(;null!==(t=t.nextElementSibling);)if(t.classList.contains("q-dialog--modal"))return!0;return!1}(t)||void 0!==n.toggleEl&&!1!==n.toggleEl.contains(i)||i!==document.body&&!1!==function(t,e){if(null===t||null===e)return null;for(let i=t;void 0!==i;i=i.$parent)if(i===e)return!0;return!1}(function(t){for(let e=t;null!==e;e=e.parentNode)if(void 0!==e.__vue__)return e.__vue__}(i),o)))return e.qClickOutside=!0,n.trigger(e)}};t.__qclickoutside&&(t.__qclickoutside_old=t.__qclickoutside),t.__qclickoutside=n,0===Ai.click.length&&(document.addEventListener("mousedown",Pi,Li),document.addEventListener("touchstart",Pi,Li),document.addEventListener("focusin",Pi,Ei)),Ai.click.push(n.handler),n.timerFocusin=setTimeout(()=>{Ai.focus.push(n.handler)},500)},update(t,{arg:e,value:i,oldValue:s}){const o=t.__qclickoutside;void 0!==o&&(o.toggleEl!==e&&(o.toggleEl=e),s!==i&&(o.trigger=i))},unbind(t){const e=t.__qclickoutside_old||t.__qclickoutside;if(void 0!==e){clearTimeout(e.timerFocusin);const i=Ai.click.findIndex(t=>t===e.handler),s=Ai.focus.findIndex(t=>t===e.handler);i>-1&&Ai.click.splice(i,1),s>-1&&Ai.focus.splice(s,1),0===Ai.click.length&&(clearTimeout(Mi),document.removeEventListener("mousedown",Pi,Li),document.removeEventListener("touchstart",Pi,Li),document.removeEventListener("focusin",Pi,Ei)),delete t[t.__qclickoutside_old?"__qclickoutside_old":"__qclickoutside"]}}};const Ii=!0===i?[]:[null,document,document.body,document.scrollingElement,document.documentElement];let Oi;function Ri(){if(!0===i)return!1;if(void 0===Oi){const t=document.createElement("div"),e=document.createElement("div");Object.assign(t.style,{direction:"rtl",width:"1px",height:"1px",overflow:"auto"}),Object.assign(e.style,{width:"1000px",height:"1px"}),t.appendChild(e),document.body.appendChild(t),t.scrollLeft=-1e3,Oi=t.scrollLeft>=0,t.remove()}return Oi}function Fi(t,e){let i=Ee(e);if(null===i){if(t!==Object(t)||"function"!=typeof t.closest)return window;i=t.closest(".scroll,.scroll-y,.overflow-auto,.q-dialog__inner > div")}return Ii.includes(i)?window:i}function Di(t){return(t===window?document.body:t).scrollHeight}function Vi(t){return t===window?window.pageYOffset||window.scrollY||document.body.scrollTop||0:t.scrollTop}const Ni=Vi;function Hi(t){return t===window?window.pageXOffset||window.scrollX||document.body.scrollLeft||0:t.scrollLeft}function ji(t,e,i=0){const s=void 0===arguments[3]?performance.now():arguments[3],o=Vi(t);i<=0?o!==e&&Wi(t,e):requestAnimationFrame(n=>{const r=n-s,a=o+(e-o)/Math.max(r,i)*r;Wi(t,a),a!==e&&ji(t,e,i-r,n)})}function Qi(t,e,i=0){const s=void 0===arguments[3]?performance.now():arguments[3],o=Hi(t);i<=0?o!==e&&Ui(t,e):requestAnimationFrame(n=>{const r=n-s,a=o+(e-o)/Math.max(r,i)*r;Ui(t,a),a!==e&&Qi(t,e,i-r,n)})}function Wi(t,e){t!==window?t.scrollTop=e:window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e)}function Ui(t,e){t!==window?t.scrollLeft=e:window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)}function Yi(t,e,i){i?ji(t,e,i):Wi(t,e)}const Ki=Yi;function Gi(t,e,i){i?Qi(t,e,i):Ui(t,e)}let Xi;function Zi(){if(void 0!==Xi)return Xi;const t=document.createElement("p"),e=document.createElement("div");Le(t,{width:"100%",height:"200px"}),Le(e,{position:"absolute",top:"0px",left:"0px",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),e.appendChild(t),document.body.appendChild(e);const i=t.offsetWidth;e.style.overflow="scroll";let s=t.offsetWidth;return i===s&&(s=e.clientWidth),e.remove(),Xi=i-s}let Ji=[];function ts(t){return!0!==document.qScrollPrevented?(t(),m):(-1===Ji.indexOf(t)&&Ji.push(t),()=>{const e=Ji.indexOf(t);e>-1&&(Ji=Ji.splice(e,1))})}var es={getScrollTarget:Fi,getScrollHeight:Di,getScrollWidth:function(t){return(t===window?document.body:t).scrollWidth},getScrollPosition:Ni,getVerticalScrollPosition:Vi,getHorizontalScrollPosition:Hi,rtlHasScrollBug:Ri,animScrollTo:ji,animVerticalScrollTo:ji,animHorizontalScrollTo:Qi,setScrollPosition:Ki,setVerticalScrollPosition:Yi,setHorizontalScrollPosition:Gi,executeWhenScrollable:ts,getScrollbarWidth:Zi,hasScrollbar:function(t,e=!0){return!(!t||t.nodeType!==Node.ELEMENT_NODE)&&(e?t.scrollHeight>t.clientHeight&&(t.classList.contains("scroll")||t.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(t)["overflow-y"])):t.scrollWidth>t.clientWidth&&(t.classList.contains("scroll")||t.classList.contains("overflow-auto")||["auto","scroll"].includes(window.getComputedStyle(t)["overflow-x"])))}};const is=[];let ss=!1;var os={__install(){this.__installed=!0,window.addEventListener("keydown",t=>{ss=27===t.keyCode}),window.addEventListener("blur",()=>{!0===ss&&(ss=!1)}),window.addEventListener("keyup",t=>{!0===ss&&(ss=!1,0!==is.length&&!0===ze(t,27)&&is[is.length-1].fn(t))})},register(t,e){!0===t.$q.platform.is.desktop&&(!0!==this.__installed&&this.__install(),is.push({comp:t,fn:e}))},pop(t){if(!0===t.$q.platform.is.desktop){const e=is.findIndex(e=>e.comp===t);e>-1&&is.splice(e,1)}}};const ns=4,rs={"start#ltr":"left","start#rtl":"right","end#ltr":"right","end#rtl":"left"};function as(t){const e=t.split(" ");return 2===e.length&&(!0!==["top","center","bottom"].includes(e[0])?(console.error("Anchor/Self position must start with one of top/center/bottom"),!1):!0===["left","middle","right","start","end"].includes(e[1])||(console.error("Anchor/Self position must end with one of left/middle/right/start/end"),!1))}function ls(t){return!0!==t||2===t.length&&("number"==typeof t[0]&&"number"==typeof t[1])}function hs(t,e){const i=t.split(" ");return{vertical:i[0],horizontal:rs[`${i[1]}#${!0===e?"rtl":"ltr"}`]}}function ds(t){let{width:e,height:i}=t.getBoundingClientRect();return 0===e&&(e=t.offsetWidth),0===i&&(i=t.offsetHeight),{width:e,height:i}}function cs(t){const e=t.el;if(!0===e.classList.contains("q-body--scroll-locked"))return;let i,s;const{documentElement:o,body:n,qScrollPrevented:r}=document,a=e.children[0],l="1"!==a.style.opacity,h=function(t){for(;t&&t!==document;){if("fixed"===window.getComputedStyle(t).position)return!0;t=t.parentNode}return!1}(t.anchorEl),c={...t.anchorOrigin},u={...t.selfOrigin},p=!0===h&&!0===d.is.ios&&void 0!==window.visualViewport?window.visualViewport:{offsetLeft:0,offsetTop:!0===r?o.scrollTop:0},{vpLeft:m,apLeft:g}=function(t,e,i){if(!0===t)return{vpLeft:e.offsetLeft,apLeft:e.offsetLeft};const s=window.pageXOffset||window.scrollX||document.body.scrollLeft||0;if(!0!==i)return{vpLeft:s,apLeft:s};const o=(!0===Ri()?0:document.documentElement.scrollWidth-document.documentElement.clientWidth)+s;return{vpLeft:o,apLeft:o+document.documentElement.scrollWidth-document.documentElement.clientWidth}}(h,p,t.rtl),f=!0===h?p.offsetTop:window.pageYOffset||window.scrollY||n.scrollTop||0,_=!0===r?"offsetWidth":!0===h||!0!=("hidden"!==window.getComputedStyle(document.documentElement).overflowX&&"hidden"!==window.getComputedStyle(document.body).overflowX)?"clientWidth":"scrollWidth",v=!0===r?"offsetHeight":!0===h||!0!=("hidden"!==window.getComputedStyle(document.documentElement).overflowY&&"hidden"!==window.getComputedStyle(document.body).overflowY)?"clientHeight":"scrollHeight",b=o[_],y=o[v];if(void 0===t.absoluteOffset)i=function(t,e,i){let{top:s,left:o,right:n,bottom:r,width:a,height:l}=t.getBoundingClientRect();if(0===a&&(a=t.offsetWidth),0===l&&(l=t.offsetHeight),void 0!==e&&(o-=e[0],n+=e[0],s-=e[1],r+=e[1]),!0===i){const t=document.documentElement.scrollWidth-document.documentElement.clientWidth;o-=t,n-=t}return{left:o,middle:o+(n-o)/2,right:n,top:s,center:s+(r-s)/2,bottom:r,leftRev:n,middleRev:o+(n-o)/2,rightRev:o,topRev:r,centerRev:s+(r-s)/2,bottomRev:s,width:a,height:l}}(t.anchorEl,!0===t.cover?[0,0]:t.offset,!0===t.rtl&&!0!==h);else{const e=!0===t.rtl&&!0!==h?o.scrollWidth-o.clientWidth:0,{top:s,left:n}=t.anchorEl.getBoundingClientRect(),r=s+(!0===t.cover?0:t.absoluteOffset.top),a=n+(!0===t.cover||!0===t.fit?0:t.absoluteOffset.left)-e;i={left:a,middle:a,right:a,top:r,center:r,bottom:r,leftRev:a,middleRev:a,rightRev:a,topRev:r,centerRev:r,bottomRev:r,width:0,height:0}}const S={minWidth:t.minWidth||null,minHeight:t.minHeight||null,maxWidth:t.maxWidth||null,maxHeight:t.maxHeight||null};if(!0!==t.fit&&!0!==t.cover||(null===t.minWidth&&(S.minWidth=i.width+"px"),!0===t.cover&&null===t.minHeight&&(S.minHeight=i.height+"px")),Object.assign(a.style,S),!0===l){const t=a.cloneNode(!0);t.classList.add("q-portal__clone"),n.appendChild(t),s=ds(t),t.remove()}else s=ds(a);null!==S.minWidth&&i.width>s.width&&(S.minWidth=s.width+"px"),null!==S.minHeight&&i.height>s.height&&(S.minHeight=s.height+"px");const x={position:!0===h?"fixed":"absolute",left:null,right:null,marginLeft:null,marginRight:null,maxWidth:null,top:null,bottom:null,marginTop:null,marginBottom:null,maxHeight:null},w=Math.min(m+i[t.anchorOrigin.horizontal],b-g-i[t.anchorOrigin.horizontal])-ns,C=Math.min(f+i[t.anchorOrigin.vertical],y-f-i[t.anchorOrigin.vertical])-ns;"left"===u.horizontal&&s.width+ns>b-g-i[c.horizontal]&&m+i[c.horizontal+"Rev"]>b-g-i[c.horizontal]?(u.horizontal="right",c.horizontal=c.horizontal+"Rev"):"right"===u.horizontal&&s.width+ns>m+i[c.horizontal]&&b-g-i[c.horizontal+"Rev"]>m+i[c.horizontal]?(u.horizontal="left",c.horizontal=c.horizontal+"Rev"):"middle"===u.horizontal&&s.width/2>w&&(u.horizontal=m+i[c.horizontal]y-f-i[c.vertical]&&f+i[c.vertical+"Rev"]>y-f-i[c.vertical]?(u.vertical="bottom",c.vertical=c.vertical+"Rev"):"bottom"===u.vertical&&s.height+ns>f+i[c.vertical]&&y-f-i[c.vertical+"Rev"]>f+i[c.vertical]?(u.vertical="top",c.vertical=c.vertical+"Rev"):"center"===u.vertical&&s.height/2>C&&(u.vertical=f+i[c.vertical]{a.style.opacity=1})}["left","middle","right"].forEach(t=>{rs[`${t}#ltr`]=t,rs[`${t}#rtl`]=t});var us=e.default.extend({name:"QMenu",mixins:[At,ce,ai,li,ci,$i,ii,Ti],directives:{ClickOutside:zi},props:{persistent:Boolean,autoClose:Boolean,separateClosePopup:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,fit:Boolean,cover:Boolean,square:Boolean,anchor:{type:String,validator:as},self:{type:String,validator:as},offset:{type:Array,validator:ls},scrollTarget:{default:void 0},touchPosition:{type:Boolean,default:null},minHeight:{type:String,default:null},minWidth:{type:String,default:null},maxHeight:{type:String,default:null},maxWidth:{type:String,default:null}},computed:{anchorOrigin(){return hs(this.anchor||(!0===this.cover?"center middle":"bottom start"),this.$q.lang.rtl)},selfOrigin(){return!0===this.cover?this.anchorOrigin:hs(this.self||"top start",this.$q.lang.rtl)},menuClass(){return(!0===this.square?" q-menu--square":"")+` q-menu--${this.darkSuffix} q-${this.darkSuffix}`},hideOnRouteChange(){return!0!==this.persistent&&!0!==this.noRouteDismiss},onEvents(){const t={...this.qListeners,input:S,"popup-show":S,"popup-hide":S};return!0===this.autoClose&&(t.click=this.__onAutoClose),t},attrs(){return{tabindex:-1,role:"menu",...this.qAttrs}}},methods:{__show(t){if(this.__refocusTarget=!0===this.$q.platform.is.desktop&&!1===this.noRefocus&&null!==document.activeElement?document.activeElement:void 0,os.register(this,()=>{!0===this.persistent?this.__focusCyclePortal():(this.$emit("escape-key"),this.hide())}),this.__showPortal(),this.__configureScrollTarget(),this.absoluteOffset=void 0,void 0!==t&&(!0===this.touchPosition||!1!==this.touchPosition&&this.contextMenu)){const e=f(t);if(void 0!==e.left){const{top:t,left:i}=this.anchorEl.getBoundingClientRect();this.absoluteOffset={left:e.left-i,top:e.top-t}}}void 0===this.unwatch&&(this.unwatch=this.$watch(()=>this.$q.screen.width+"|"+this.$q.screen.height+"|"+this.self+"|"+this.anchor+"|"+this.$q.lang.rtl,this.updatePosition)),this.$el.dispatchEvent(k("popup-show",{bubbles:!0})),!0!==this.noFocus?(null!==document.activeElement&&document.activeElement.blur(),this.__registerTick(()=>{this.focus(),this.updatePosition()})):this.__registerTick(()=>{this.updatePosition()}),this.__registerTimeout(()=>{!0===this.$q.platform.is.ios&&(this.__avoidAutoClose=this.autoClose,this.__portal.$el.click()),this.$emit("show",t)},300)},__hide(t){this.__removeTick(),this.__anchorCleanup(!0),void 0!==t&&!0===t.qClickOutside||this.__focusCyclePortal(!0),this.$el.dispatchEvent(k("popup-hide",{bubbles:!0})),this.__registerTimeout(()=>{!0!==this.showing&&(this.__hidePortal(),this.$emit("hide",t))},300)},__anchorCleanup(t){this.absoluteOffset=void 0,void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0),!0!==t&&!0!==this.showing||(os.pop(this),this.__unconfigureScrollTarget())},__unconfigureScrollTarget(){this.__changeScrollEvent()},__configureScrollTarget(){!this.showing||void 0===this.anchorEl&&void 0===this.scrollTarget||this.__changeScrollEvent(this.updatePosition,Fi(this.anchorEl,this.scrollTarget))},__onAutoClose(t){!0!==this.__avoidAutoClose?(Ci(this,t),void 0!==this.qListeners.click&&this.$emit("click",t)):this.__avoidAutoClose=!1},updatePosition(){if(void 0===this.anchorEl||void 0===this.__portal)return;const t=this.__portal.$el;8!==t.nodeType?(void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),this.settingPosition=requestAnimationFrame(()=>{const e=!0===this.touchPosition||!1!==this.touchPosition&&this.contextMenu;cs({el:t,offset:this.offset,anchorEl:this.anchorEl,anchorOrigin:this.anchorOrigin,selfOrigin:this.selfOrigin,absoluteOffset:this.absoluteOffset,fit:!0!==e&&!0===this.fit,cover:!0!==e&&!0===this.cover,minHeight:this.minHeight,minWidth:this.minWidth,maxHeight:this.maxHeight,maxWidth:this.maxWidth,rtl:this.$q.lang.rtl}),this.settingPosition=void 0})):setTimeout(this.updatePosition,25)},__onClickOutside(t){if(!0!==this.persistent&&!0===this.showing){const e=t.target.classList;return Ci(this,t),"touchstart"!==t.type&&!0!==e.contains("q-dialog__backdrop")||(w(t),this.$q.interaction.preventClick(t.target,!0)),!0}},__renderPortal(t){return t("transition",{props:this.transitionProps},[!0===this.showing?t("div",{class:"q-menu__container column no-pointer-events",directives:[{name:"click-outside",value:this.__onClickOutside,arg:this.anchorEl}]},[t("div",{ref:"inner",staticClass:"q-menu scroll all-pointer-events"+this.menuClass,class:this.contentClass,style:this.contentStyle,attrs:this.attrs,on:this.onEvents},this.__getFocusWrappedContent("default"))]):null])}},created(){this.__useTick("__registerTick","__removeTick"),this.__useTimeout("__registerTimeout")},mounted(){this.__processModelChange(this.value)},beforeDestroy(){void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),!0===this.showing&&void 0!==this.anchorEl&&this.anchorEl.dispatchEvent(k("popup-hide",{bubbles:!0})),this.__refocusTarget=void 0}});let ps,ms=0;const gs=new Array(256);for(let t=0;t<256;t++)gs[t]=(t+256).toString(16).substr(1);const fs=(()=>{const t="undefined"!=typeof crypto?crypto:"undefined"!=typeof window?window.msCrypto:void 0;if(void 0!==t){if(void 0!==t.randomBytes)return t.randomBytes;if(void 0!==t.getRandomValues)return e=>{var i=new Uint8Array(e);return t.getRandomValues(i),i}}return t=>{const e=[];for(let i=t;i>0;i--)e.push(Math.floor(256*Math.random()));return e}})(),_s=4096;function vs(){(void 0===ps||ms+16>_s)&&(ms=0,ps=fs(_s));const t=Array.prototype.slice.call(ps,ms,ms+=16);return t[6]=15&t[6]|64,t[8]=63&t[8]|128,gs[t[0]]+gs[t[1]]+gs[t[2]]+gs[t[3]]+"-"+gs[t[4]]+gs[t[5]]+"-"+gs[t[6]]+gs[t[7]]+"-"+gs[t[8]]+gs[t[9]]+"-"+gs[t[10]]+gs[t[11]]+gs[t[12]]+gs[t[13]]+gs[t[14]]+gs[t[15]]}const bs=Object.keys(ii.props).reduce((t,e)=>(t[e]={})&&t,{});var ys=e.default.extend({name:"QBtnDropdown",mixins:[We,At],inheritAttrs:!1,props:{value:Boolean,split:Boolean,dropdownIcon:String,contentClass:[Array,String,Object],contentStyle:[Array,String,Object],cover:Boolean,persistent:Boolean,noRouteDismiss:Boolean,autoClose:Boolean,menuAnchor:{type:String,default:"bottom end"},menuSelf:{type:String,default:"top end"},menuOffset:Array,...bs,disableMainBtn:Boolean,disableDropdown:Boolean,noIconAnimation:Boolean,toggleAriaLabel:String},data(){return{showing:this.value}},watch:{value(t){void 0!==this.$refs.menu&&this.$refs.menu[t?"show":"hide"]()},split(){this.hide()}},render(t){const e=jt(this,"label",[]),i={"aria-expanded":!0===this.showing?"true":"false","aria-haspopup":"true","aria-controls":this.targetUid,"aria-owns":this.targetUid,"aria-label":this.toggleAriaLabel||this.$q.lang.label[!0===this.showing?"collapse":"expand"](this.label)};(!0===this.disable||!1===this.split&&!0===this.disableMainBtn||!0===this.disableDropdown)&&(i["aria-disabled"]="true");const s=[t(le,{props:{name:this.dropdownIcon||this.$q.iconSet.arrow.dropdown},class:"q-btn-dropdown__arrow"+(!0===this.showing&&!1===this.noIconAnimation?" rotate-180":"")+(!1===this.split?" q-btn-dropdown__arrow-container":"")})];if(!0!==this.disableDropdown&&s.push(t(us,{key:"menu",ref:"menu",attrs:{id:this.targetUid},props:{cover:this.cover,fit:!0,persistent:this.persistent,noRouteDismiss:this.noRouteDismiss,autoClose:this.autoClose,anchor:this.menuAnchor,self:this.menuSelf,offset:this.menuOffset,contentClass:this.contentClass,contentStyle:this.contentStyle,separateClosePopup:!0,transitionShow:this.transitionShow,transitionHide:this.transitionHide},on:$t(this,"menu",{"before-show":t=>{this.showing=!0,this.$emit("before-show",t)},show:t=>{this.$emit("show",t),this.$emit("input",!0)},"before-hide":t=>{this.showing=!1,this.$emit("before-hide",t)},hide:t=>{this.$emit("hide",t),this.$emit("input",!1)}})},jt(this,"default"))),!1===this.split)return t(Ze,{key:"nonSpl",class:"q-btn-dropdown q-btn-dropdown--simple",props:{...this.$props,disable:!0===this.disable||!0===this.disableMainBtn,noWrap:!0,round:!1},attrs:{...i,...this.qAttrs},on:$t(this,"nonSpl",{click:t=>{this.$emit("click",t)}}),scopedSlots:{loading:this.$scopedSlots.loading}},e.concat(s));const o=t(Ze,{key:"spl",class:"q-btn-dropdown--current",props:{...this.$props,disable:!0===this.disable||!0===this.disableMainBtn,noWrap:!0,iconRight:this.iconRight,round:!1},attrs:this.qAttrs,on:$t(this,"spl",{click:t=>{S(t),this.hide(),this.$emit("click",t)}}),scopedSlots:{loading:this.$scopedSlots.loading}},e);return t(si,{props:{outline:this.outline,flat:this.flat,rounded:this.rounded,square:this.square,push:this.push,unelevated:this.unelevated,glossy:this.glossy,stretch:this.stretch},staticClass:"q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item"},[o,t(Ze,{staticClass:"q-btn-dropdown__arrow-container q-anchor--skip",attrs:i,props:{disable:!0===this.disable||!0===this.disableDropdown,outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,size:this.size,color:this.color,textColor:this.textColor,dense:this.dense,ripple:this.ripple}},s)])},methods:{toggle(t){this.$refs.menu&&this.$refs.menu.toggle(t)},show(t){this.$refs.menu&&this.$refs.menu.show(t)},hide(t){this.$refs.menu&&this.$refs.menu.hide(t)}},created(){this.targetUid=`d_${vs()}`},mounted(){!0===this.value&&this.show()}}),Ss={props:{name:String},computed:{formAttrs(){return{type:"hidden",name:this.name,value:this.value}}},methods:{__injectFormInput(t,e,i){t[e](this.$createElement("input",{staticClass:"hidden",class:i,attrs:this.formAttrs,domProps:this.formDomProps}))}}};const xs={props:{name:String},computed:{nameProp(){return this.name||this.for}}};var ws=e.default.extend({name:"QBtnToggle",mixins:[Ht,De,Ss],props:{value:{required:!0},options:{type:Array,required:!0,validator:t=>t.every(t=>("label"in t||"icon"in t||"slot"in t)&&"value"in t)},color:String,textColor:String,toggleColor:{type:String,default:"primary"},toggleTextColor:String,outline:Boolean,flat:Boolean,unelevated:Boolean,rounded:Boolean,push:Boolean,glossy:Boolean,size:String,padding:String,noCaps:Boolean,noWrap:Boolean,dense:Boolean,readonly:Boolean,disable:Boolean,stack:Boolean,stretch:Boolean,spread:Boolean,clearable:Boolean},computed:{hasActiveValue(){return void 0!==this.options.find(t=>t.value===this.value)},formAttrs(){return{type:"hidden",name:this.name,value:this.value}},btnOptions(){const t=(t,e)=>void 0===t[e]?this[e]:t[e];return this.options.map((e,i)=>({slot:e.slot,options:{key:i,class:e.class,style:e.style,on:{...this.qListeners,click:t=>this.__set(e.value,e,t)},attrs:{"aria-pressed":e.value===this.value?"true":"false",...e.attrs},props:{...e,slot:void 0,class:void 0,style:void 0,value:void 0,attrs:void 0,outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,unelevated:this.unelevated,dense:this.dense,disable:!0===this.disable||!0===e.disable,color:e.value===this.value?t(e,"toggleColor"):t(e,"color"),textColor:e.value===this.value?t(e,"toggleTextColor"):t(e,"textColor"),noCaps:!0===t(e,"noCaps"),noWrap:!0===t(e,"noWrap"),size:t(e,"size"),padding:t(e,"padding"),ripple:t(e,"ripple"),stack:!0===t(e,"stack"),stretch:!0===t(e,"stretch")}}}))}},methods:{__set(t,e,i){!0!==this.readonly&&(this.value===t?!0===this.clearable&&(this.$emit("input",null,null),this.$emit("clear")):this.$emit("input",t,e),this.$emit("click",i))}},render(t){const e=this.btnOptions.map(e=>t(Ze,{...e.options},void 0!==e.slot?jt(this,e.slot):void 0));return void 0!==this.name&&!0!==this.disable&&!0===this.hasActiveValue&&this.__injectFormInput(e,"push"),t(si,{staticClass:"q-btn-toggle",props:{outline:this.outline,flat:this.flat,rounded:this.rounded,push:this.push,stretch:this.stretch,unelevated:this.unelevated,glossy:this.glossy,spread:this.spread}},Wt(e,this,"default"))}}),Cs=e.default.extend({name:"QCard",mixins:[Ht,ce,Nt],props:{square:Boolean,flat:Boolean,bordered:Boolean},computed:{classes(){return"q-card"+` q-card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.bordered?" q-card--bordered":"")+(!0===this.square?" q-card--square no-border-radius":"")+(!0===this.flat?" q-card--flat no-shadow":"")}},render(t){return t(this.tag,{class:this.classes,on:{...this.qListeners}},jt(this,"default"))}}),ks=e.default.extend({name:"QCardSection",mixins:[Ht,Nt],props:{horizontal:Boolean},computed:{classes(){return"q-card__section "+`q-card__section--${!0===this.horizontal?"horiz row no-wrap":"vert"}`}},render(t){return t(this.tag,{class:this.classes,on:{...this.qListeners}},jt(this,"default"))}}),qs=e.default.extend({name:"QCardActions",mixins:[Ht,ve],props:{vertical:Boolean},computed:{classes(){return`q-card__actions--${!0===this.vertical?"vert column":"horiz row"} ${this.alignClass}`}},render(t){return t("div",{staticClass:"q-card__actions",class:this.classes,on:{...this.qListeners}},jt(this,"default"))}});const $s="function"==typeof Map,Ts="function"==typeof Set,Ms="function"==typeof ArrayBuffer;function Ls(t,e){if(t===e)return!0;if(null!==t&&null!==e&&"object"==typeof t&&"object"==typeof e){if(t.constructor!==e.constructor)return!1;let i,s;if(t.constructor===Array){if((i=t.length)!==e.length)return!1;for(s=i;0!=s--;)if(!0!==Ls(t[s],e[s]))return!1;return!0}if(!0===$s&&t.constructor===Map){if(t.size!==e.size)return!1;for(s=t.entries().next();!0!==s.done;){if(!0!==e.has(s.value[0]))return!1;s=s.next()}for(s=t.entries().next();!0!==s.done;){if(!0!==Ls(s.value[1],e.get(s.value[0])))return!1;s=s.next()}return!0}if(!0===Ts&&t.constructor===Set){if(t.size!==e.size)return!1;for(s=t.entries().next();!0!==s.done;){if(!0!==e.has(s.value[0]))return!1;s=s.next()}return!0}if(!0===Ms&&null!=t.buffer&&t.buffer.constructor===ArrayBuffer){if((i=t.length)!==e.length)return!1;for(s=i;0!=s--;)if(t[s]!==e[s])return!1;return!0}if(t.constructor===RegExp)return t.source===e.source&&t.flags===e.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===e.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===e.toString();const o=Object.keys(t).filter(e=>void 0!==t[e]);if((i=o.length)!==Object.keys(e).filter(t=>void 0!==e[t]).length)return!1;for(s=i;0!=s--;){const i=o[s];if(!0!==Ls(t[i],e[i]))return!1}return!0}return t!=t&&e!=e}function Es(t){return null!==t&&"object"==typeof t&&!0!==Array.isArray(t)}function As(t){return"[object Date]"===Object.prototype.toString.call(t)}function Bs(t){return"[object RegExp]"===Object.prototype.toString.call(t)}function Ps(t){return"number"==typeof t&&isFinite(t)}var zs={deepEqual:Ls,object:Es,date:As,regexp:Bs,number:Ps};const Is=["left","right","up","down","horizontal","vertical"],Os={left:!0,right:!0,up:!0,down:!0,horizontal:!0,vertical:!0,all:!0};function Rs(t){const e={};return Is.forEach(i=>{t[i]&&(e[i]=!0)}),0===Object.keys(e).length?Os:(!0===e.horizontal&&(e.left=e.right=!0),!0===e.vertical&&(e.up=e.down=!0),!0===e.left&&!0===e.right&&(e.horizontal=!0),!0===e.up&&!0===e.down&&(e.vertical=!0),!0===e.horizontal&&!0===e.vertical&&(e.all=!0),e)}function Fs(t,e){return void 0===e.event&&void 0!==t.target&&!0!==t.target.draggable&&"function"==typeof e.handler&&"INPUT"!==t.target.nodeName.toUpperCase()&&(void 0===t.qClonedBy||-1===t.qClonedBy.indexOf(e.uid))}function Ds(t){const e=[.06,6,50];return"string"==typeof t&&t.length&&t.split(":").forEach((t,i)=>{const s=parseFloat(t);s&&(e[i]=s)}),e}function Vs(t){const e=t.__qtouchswipe;void 0!==e&&($(e,"main_mouse"),$(e,"main_touch"),$(e,"temp"),!0===d.is.firefox&&C(t,!1),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchswipe)}function Ns(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&$(e,"main_mouse"),!0===i.mouse&&q(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===d.has.touch&&e.modifiers.capture!==i.capture&&($(e,"main_touch"),q(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","notPassiveCapture"]])),e.modifiers=i}var Hs={name:"touch-swipe",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchswipe&&(Vs(t),t.__qtouchswipe_destroyed=!0);const o={handler:s,sensitivity:Ds(i),arg:i,modifiers:{capture:null},direction:Rs(e),noop:m,mouseStart(t){Fs(t,o)&&g(t)&&(q(o,"temp",[[document,"mousemove","move",`notPassive${!0===o.modifiers.mouseCapture?"Capture":""}`],[document,"mouseup","end","notPassiveCapture"]]),o.start(t,!0))},touchStart(t){if(Fs(t,o)){const e=t.target;q(o,"temp",[[e,"touchmove","move","notPassiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(e,i){!0===d.is.firefox&&C(t,!0);const s=f(e);o.event={x:s.left,y:s.top,time:Date.now(),mouse:!0===i,dir:!1}},move(t){if(void 0===o.event)return;if(!1!==o.event.dir)return void w(t);const e=Date.now()-o.event.time;if(0===e)return;const i=f(t),s=i.left-o.event.x,n=Math.abs(s),r=i.top-o.event.y,a=Math.abs(r);if(!0!==o.event.mouse){if(no.sensitivity[0]&&(o.event.dir=r<0?"up":"down"),!0===o.direction.horizontal&&n>a&&a<100&&l>o.sensitivity[0]&&(o.event.dir=s<0?"left":"right"),!0===o.direction.up&&no.sensitivity[0]&&(o.event.dir="up"),!0===o.direction.down&&n0&&n<100&&h>o.sensitivity[0]&&(o.event.dir="down"),!0===o.direction.left&&n>a&&s<0&&a<100&&l>o.sensitivity[0]&&(o.event.dir="left"),!0===o.direction.right&&n>a&&s>0&&a<100&&l>o.sensitivity[0]&&(o.event.dir="right"),!1!==o.event.dir?(w(t),!0===o.event.mouse&&(document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),oi(),o.styleCleanup=(t=>{o.styleCleanup=void 0,document.body.classList.remove("non-selectable");const e=()=>{document.body.classList.remove("no-pointer-events--children")};!0===t?setTimeout(e,50):e()})),o.handler({evt:t,touch:!0!==o.event.mouse,mouse:o.event.mouse,direction:o.event.dir,duration:e,distance:{x:n,y:a}})):o.end(t)},end(e){void 0!==o.event&&($(o,"temp"),!0===d.is.firefox&&C(t,!1),void 0!==o.styleCleanup&&o.styleCleanup(!0),void 0!==e&&!1!==o.event.dir&&w(e),o.event=void 0)}};t.__qtouchswipe=o,Ns(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchswipe;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&(n.sensitivity=Ds(i)),!0!==Ls(n.modifiers,e)&&(Ns(t,n,e),n.direction=Rs(e)))},unbind(t){void 0===t.__qtouchswipe_destroyed?Vs(t):delete t.__qtouchswipe_destroyed}};function js(t){return t("div",{key:"stop",staticClass:"q-panel scroll",on:$t(this,"stop",{input:S})},jt(this,"default"))}const Qs=e.default.extend({render:js}),Ws={mixins:[Ht],directives:{TouchSwipe:Hs},props:{value:{required:!0},animated:Boolean,infinite:Boolean,swipeable:Boolean,vertical:Boolean,transitionPrev:String,transitionNext:String,keepAlive:Boolean,keepAliveInclude:[String,Array,RegExp],keepAliveExclude:[String,Array,RegExp],keepAliveMax:Number},data:()=>({panelIndex:null,panelTransition:null}),computed:{panelDirectives(){if(!0===this.swipeable)return[{name:"touch-swipe",value:this.__swipe,modifiers:{horizontal:!0!==this.vertical,vertical:this.vertical,mouse:!0}}]},contentKey(){return"string"==typeof this.value||"number"==typeof this.value?this.value:String(this.value)},transitionPrevComputed(){return this.transitionPrev||`slide-${!0===this.vertical?"down":"right"}`},transitionNextComputed(){return this.transitionNext||`slide-${!0===this.vertical?"up":"left"}`},keepAliveProps(){return{include:this.keepAliveInclude,exclude:this.keepAliveExclude,max:this.keepAliveMax}},needsUniqueWrapper(){return void 0!==this.keepAliveInclude||void 0!==this.keepAliveExclude}},watch:{value(t,e){const i=!0===this.__isValidPanelName(t)?this.__getPanelIndex(t):-1;!0!==this.__forcedPanelTransition&&this.__updatePanelTransition(-1===i?0:i{this.$emit("transition",t,e)}))}},methods:{next(){this.__go(1)},previous(){this.__go(-1)},goTo(t){this.$emit("input",t)},__isValidPanelName:t=>void 0!==t&&null!==t&&""!==t,__getPanelIndex(t){return this.panels.findIndex(e=>{const i=e.componentOptions.propsData;return i.name===t&&""!==i.disable&&!0!==i.disable})},__getEnabledPanels(){return this.panels.filter(t=>{const e=t.componentOptions.propsData;return""!==e.disable&&!0!==e.disable})},__updatePanelTransition(t){const e=0!==t&&!0===this.animated&&-1!==this.panelIndex?"q-transition--"+(-1===t?this.transitionPrevComputed:this.transitionNextComputed):null;this.panelTransition!==e&&(this.panelTransition=e)},__go(t,e=this.panelIndex){let i=e+t;const s=this.panels;for(;i>-1&&i{this.__forcedPanelTransition=!1});i+=t}!0===this.infinite&&s.length>0&&-1!==e&&e!==s.length&&this.__go(t,-1===t?s.length:-1)},__swipe(t){const e=!0===this.vertical?"up":"left";this.__go((!0===this.$q.lang.rtl?-1:1)*(t.direction===e?1:-1))},__updatePanelIndex(){const t=this.__getPanelIndex(this.value);return this.panelIndex!==t&&(this.panelIndex=t),!0},__getPanelContent(t){if(0===this.panels.length)return;const i=this.__isValidPanelName(this.value)&&this.__updatePanelIndex()&&this.panels[this.panelIndex],s=!0===this.keepAlive?[t("keep-alive",{props:this.keepAliveProps},[t(!0===this.needsUniqueWrapper?Tt(this,this.contentKey,()=>e.default.extend({name:this.contentKey,render:js})):Qs,{key:this.contentKey},[i])])]:[t("div",{staticClass:"q-panel scroll",key:this.contentKey,on:$t(this,"stop",{input:S})},[i])];return!0===this.animated?[t("transition",{props:{name:this.panelTransition},on:ei},s)]:s}},render(t){return this.panels=jt(this,"default",[]).filter(t=>void 0!==t&&void 0!==t.componentOptions&&void 0!==t.componentOptions.propsData&&this.__isValidPanelName(t.componentOptions.propsData.name)),this.__renderPanels(t)}},Us={mixins:[Ht],props:{name:{required:!0},disable:Boolean}};let Ys=0;var Ks={props:{fullscreen:Boolean,noRouteFullscreenExit:Boolean},data:()=>({inFullscreen:!1}),watch:{$route(){!0!==this.noRouteFullscreenExit&&this.exitFullscreen()},fullscreen(t){this.inFullscreen!==t&&this.toggleFullscreen()},inFullscreen(t){this.$emit("update:fullscreen",t),this.$emit("fullscreen",t)}},methods:{toggleFullscreen(){!0===this.inFullscreen?this.exitFullscreen():this.setFullscreen()},setFullscreen(){!0!==this.inFullscreen&&(this.inFullscreen=!0,this.container=this.$el.parentNode,this.container.replaceChild(this.fullscreenFillerNode,this.$el),document.body.appendChild(this.$el),1===++Ys&&document.body.classList.add("q-body--fullscreen-mixin"),this.__historyFullscreen={handler:this.exitFullscreen},Z.add(this.__historyFullscreen))},exitFullscreen(){!0===this.inFullscreen&&(void 0!==this.__historyFullscreen&&(Z.remove(this.__historyFullscreen),this.__historyFullscreen=void 0),this.container.replaceChild(this.$el,this.fullscreenFillerNode),this.inFullscreen=!1,0===(Ys=Math.max(0,Ys-1))&&(document.body.classList.remove("q-body--fullscreen-mixin"),void 0!==this.$el.scrollIntoView&&setTimeout(()=>{this.$el.scrollIntoView()})))}},beforeMount(){this.fullscreenFillerNode=document.createElement("span")},mounted(){!0===this.fullscreen&&this.setFullscreen()},beforeDestroy(){this.exitFullscreen()}},Gs=e.default.extend({name:"QCarousel",mixins:[ce,Ws,Ks],props:{height:String,padding:Boolean,controlType:{type:String,validator:t=>["regular","flat","outline","push","unelevated"].includes(t),default:"flat"},controlColor:String,controlTextColor:String,autoplay:[Number,Boolean],arrows:Boolean,prevIcon:String,nextIcon:String,navigation:Boolean,navigationPosition:{type:String,validator:t=>["top","right","bottom","left"].includes(t)},navigationIcon:String,navigationActiveIcon:String,thumbnails:Boolean},computed:{style(){if(!0!==this.inFullscreen&&void 0!==this.height)return{height:this.height}},direction(){return!0===this.vertical?"vertical":"horizontal"},classes(){return`q-carousel q-panel-parent q-carousel--with${!0===this.padding?"":"out"}-padding`+(!0===this.inFullscreen?" fullscreen":"")+` q-carousel--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.arrows?` q-carousel--arrows-${this.direction}`:"")+(!0===this.navigation?` q-carousel--navigation-${this.navigationPositionComputed}`:"")},arrowIcons(){const t=[this.prevIcon||this.$q.iconSet.carousel[!0===this.vertical?"up":"left"],this.nextIcon||this.$q.iconSet.carousel[!0===this.vertical?"down":"right"]];return!1===this.vertical&&!0===this.$q.lang.rtl?t.reverse():t},navIcon(){return this.navigationIcon||this.$q.iconSet.carousel.navigationIcon},navActiveIcon(){return this.navigationActiveIcon||this.navIcon},navigationPositionComputed(){return this.navigationPosition||(!0===this.vertical?"right":"bottom")},controlProps(){return{color:this.controlColor,textColor:this.controlTextColor,round:!0,[this.controlType]:!0,dense:!0}},transitionPrevComputed(){return this.transitionPrev||"fade"},transitionNextComputed(){return this.transitionNext||"fade"}},watch:{value(){this.autoplay&&(clearInterval(this.timer),this.__startTimer())},autoplay(t){t?this.__startTimer():clearInterval(this.timer)}},methods:{__startTimer(){const t=!0===Ps(this.autoplay)?this.autoplay:5e3;this.timer=setTimeout(t>=0?this.next:this.previous,Math.abs(t))},__getNavigationContainer(t,e,i){return t("div",{class:"q-carousel__control q-carousel__navigation no-wrap absolute flex"+` q-carousel__navigation--${e} q-carousel__navigation--${this.navigationPositionComputed}`+(void 0!==this.controlColor?` text-${this.controlColor}`:"")},[t("div",{staticClass:"q-carousel__navigation-inner flex flex-center no-wrap"},this.__getEnabledPanels().map(i))])},__getContent(t){const e=[];if(!0===this.navigation){const i=void 0!==this.$scopedSlots["navigation-icon"]?this.$scopedSlots["navigation-icon"]:e=>t(Ze,{key:"nav#"+e.name,class:`q-carousel__navigation-icon q-carousel__navigation-icon--${!0===e.active?"":"in"}active`,props:e.btnProps,on:$t(this,"nav#"+e.name,{click:e.onClick})}),s=this.panels.length-1;e.push(this.__getNavigationContainer(t,"buttons",(t,e)=>{const o=t.componentOptions.propsData.name,n=this.panelIndex===e;return i({index:e,maxIndex:s,name:o,active:n,btnProps:{icon:!0===n?this.navActiveIcon:this.navIcon,size:"sm",...this.controlProps},onClick:()=>{this.goTo(o)}})}))}else if(!0===this.thumbnails){const i=void 0!==this.controlColor?` text-${this.controlColor}`:"";e.push(this.__getNavigationContainer(t,"thumbnails",e=>{const s=e.componentOptions.propsData;return t("img",{class:`q-carousel__thumbnail q-carousel__thumbnail--${s.name===this.value?"":"in"}active`+i,attrs:{src:s.imgSrc},key:"tmb#"+s.name,on:$t(this,"tmb#"+s.name,{click:()=>{this.goTo(s.name)}})})}))}return!0===this.arrows&&this.panelIndex>=0&&((!0===this.infinite||this.panelIndex>0)&&e.push(t("div",{staticClass:`q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--${this.direction} absolute flex flex-center`},[t(Ze,{key:"prev",props:{icon:this.arrowIcons[0],...this.controlProps},on:$t(this,"prev",{click:this.previous})})])),(!0===this.infinite||this.panelIndex["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)},offset:{type:Array,default:()=>[18,18],validator:t=>2===t.length}},computed:{classes(){return`absolute-${this.position}`},style(){return{margin:`${this.offset[1]}px ${this.offset[0]}px`}}},render(t){return t("div",{staticClass:"q-carousel__control absolute",style:this.style,class:this.classes,on:{...this.qListeners}},jt(this,"default"))}}),Js=e.default.extend({name:"QChatMessage",mixins:[Ht],props:{sent:Boolean,label:String,bgColor:String,textColor:String,name:String,avatar:String,text:Array,stamp:String,size:String,labelSanitize:Boolean,nameSanitize:Boolean,textSanitize:Boolean,stampSanitize:Boolean},computed:{textClass(){return`q-message-text-content q-message-text-content--${this.op}`+(void 0!==this.textColor?` text-${this.textColor}`:"")},messageClass(){return`q-message-text q-message-text--${this.op}`+(void 0!==this.bgColor?` text-${this.bgColor}`:"")},containerClass(){return"q-message-container row items-end no-wrap"+(!0===this.sent?" reverse":"")},sizeClass(){if(void 0!==this.size)return`col-${this.size}`},op(){return!0===this.sent?"sent":"received"}},methods:{__wrapStamp(t,e){if(void 0!==this.$scopedSlots.stamp)return[e,t("div",{staticClass:"q-message-stamp"},this.$scopedSlots.stamp())];if(this.stamp){return[e,t("div",{staticClass:"q-message-stamp",domProps:{[!0===this.stampSanitize?"textContent":"innerHTML"]:this.stamp}})]}return[e]},__getText(t,e,i){const s=!0===this.textSanitize?"textContent":"innerHTML";if(!0===i&&!0===e.some(t=>void 0===t.tag&&void 0!==t.text))return[t("div",{class:this.messageClass},[t("div",{class:this.textClass},this.__wrapStamp(t,t("div",e)))])];const o=!0!==i?e=>t("div",{domProps:{[s]:e}}):e.length>1?t=>t:e=>t("div",[e]);return e.map((e,i)=>t("div",{key:i,class:this.messageClass},[t("div",{class:this.textClass},this.__wrapStamp(t,o(e)))]))}},render(t){const e=[];void 0!==this.$scopedSlots.avatar?e.push(this.$scopedSlots.avatar()):void 0!==this.avatar&&e.push(t("img",{class:`q-message-avatar q-message-avatar--${this.op}`,attrs:{src:this.avatar,"aria-hidden":"true"}}));const i=[];void 0!==this.$scopedSlots.name?i.push(t("div",{class:`q-message-name q-message-name--${this.op}`},this.$scopedSlots.name())):void 0!==this.name&&i.push(t("div",{class:`q-message-name q-message-name--${this.op}`,domProps:{[!0===this.nameSanitize?"textContent":"innerHTML"]:this.name}})),void 0!==this.text&&i.push(this.__getText(t,this.text)),void 0!==this.$scopedSlots.default&&i.push(this.__getText(t,this.$scopedSlots.default(),!0)),e.push(t("div",{class:this.sizeClass},i));const s=[];return void 0!==this.$scopedSlots.label?s.push(t("div",{staticClass:"q-message-label"},this.$scopedSlots.label())):void 0!==this.label&&s.push(t("div",{staticClass:"q-message-label",domProps:{[!0===this.labelSanitize?"textContent":"innerHTML"]:this.label}})),s.push(t("div",{class:this.containerClass},e)),t("div",{class:`q-message q-message-${this.op}`,on:{...this.qListeners}},s)}}),to=Dt({xs:30,sm:35,md:40,lg:50,xl:60}),eo={computed:{__refocusTargetEl(){if(!0!==this.disable)return this.$createElement("span",{ref:"refocusTarget",staticClass:"no-outline",attrs:{tabindex:-1}})}},methods:{__refocusTarget(t){if(!0===this.$el.contains(document.activeElement)){const t=!0===this.$q.interaction.isPointer?this.$refs.refocusTarget:this.$el;void 0!==t&&document.activeElement!==t&&t.focus()}}}},io={mixins:[ce,to,Ss,eo],props:{value:{required:!0,default:null},val:{},trueValue:{default:!0},falseValue:{default:!1},indeterminateValue:{default:null},checkedIcon:String,uncheckedIcon:String,indeterminateIcon:String,toggleOrder:{type:String,validator:t=>"tf"===t||"ft"===t},toggleIndeterminate:Boolean,label:String,leftLabel:Boolean,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},computed:{isTrue(){return!0===this.modelIsArray?this.index>-1:this.value===this.trueValue},isFalse(){return!0===this.modelIsArray?-1===this.index:this.value===this.falseValue},isIndeterminate(){return!1===this.isTrue&&!1===this.isFalse},index(){if(!0===this.modelIsArray)return this.value.indexOf(this.val)},modelIsArray(){return void 0!==this.val&&Array.isArray(this.value)},computedTabindex(){return!0===this.disable?-1:this.tabindex||0},classes(){return`q-${this.type} cursor-pointer no-outline row inline no-wrap items-center`+(!0===this.disable?" disabled":"")+` q-${this.type}--${this.darkSuffix}`+(!0===this.dense?` q-${this.type}--dense`:"")+(!0===this.leftLabel?" reverse":"")},innerClass(){const t=!0===this.isTrue?"truthy":!0===this.isFalse?"falsy":"indet",e=void 0===this.color||!0!==this.keepColor&&("toggle"===this.type?!0!==this.isTrue:!0===this.isFalse)?"":` text-${this.color}`;return`q-${this.type}__inner--${t}${e}`},formAttrs(){const t={type:"checkbox"};return void 0!==this.name&&Object.assign(t,{checked:this.isTrue,name:this.name,value:!0===this.modelIsArray?this.val:this.trueValue}),t},attrs(){const t={tabindex:this.computedTabindex,role:"toggle"===this.type?"switch":"checkbox","aria-label":this.label,"aria-checked":!0===this.isIndeterminate?"mixed":!0===this.isTrue?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{toggle(t){void 0!==t&&(w(t),this.__refocusTarget(t)),!0!==this.disable&&this.$emit("input",this.__getNextValue(),t)},__getNextValue(){if(!0===this.modelIsArray){if(!0===this.isTrue){const t=this.value.slice();return t.splice(this.index,1),t}return this.value.concat([this.val])}if(!0===this.isTrue){if("ft"!==this.toggleOrder||!1===this.toggleIndeterminate)return this.falseValue}else{if(!0!==this.isFalse)return"ft"!==this.toggleOrder?this.trueValue:this.falseValue;if("ft"===this.toggleOrder||!1===this.toggleIndeterminate)return this.trueValue}return this.indeterminateValue},__onKeydown(t){13!==t.keyCode&&32!==t.keyCode||w(t)},__onKeyup(t){13!==t.keyCode&&32!==t.keyCode||this.toggle(t)}},render(t){const e=this.__getInner(t);!0!==this.disable&&this.__injectFormInput(e,"unshift",`q-${this.type}__native absolute q-ma-none q-pa-none`);const i=[t("div",{staticClass:`q-${this.type}__inner relative-position non-selectable`,class:this.innerClass,style:this.sizeStyle,attrs:{"aria-hidden":"true"}},e)];void 0!==this.__refocusTargetEl&&i.push(this.__refocusTargetEl);const s=void 0!==this.label?Wt([this.label],this,"default"):jt(this,"default");return void 0!==s&&i.push(t("div",{staticClass:`q-${this.type}__label q-anchor--skip`},s)),t("div",{key:"inpExt",class:this.classes,attrs:this.attrs,on:$t(this,"inpExt",{click:this.toggle,keydown:this.__onKeydown,keyup:this.__onKeyup})},i)}},so=e.default.extend({name:"QCheckbox",mixins:[io],computed:{computedIcon(){return!0===this.isTrue?this.checkedIcon:!0===this.isIndeterminate?this.indeterminateIcon:this.uncheckedIcon}},methods:{__getInner(t){return void 0!==this.computedIcon?[t("div",{key:"icon",staticClass:"q-checkbox__icon-container absolute-full flex flex-center no-wrap"},[t(le,{staticClass:"q-checkbox__icon",props:{name:this.computedIcon}})])]:[t("div",{key:"svg",staticClass:"q-checkbox__bg absolute"},[t("svg",{staticClass:"q-checkbox__svg fit absolute-full",attrs:{focusable:"false",viewBox:"0 0 24 24"}},[t("path",{staticClass:"q-checkbox__truthy",attrs:{fill:"none",d:"M1.73,12.91 8.1,19.28 22.79,4.59"}}),t("path",{staticClass:"q-checkbox__indet",attrs:{d:"M4,14H20V10H4"}})])])]}},created(){this.type="checkbox"}}),oo=e.default.extend({name:"QChip",mixins:[De,ce,Dt({xs:8,sm:10,md:14,lg:20,xl:24})],model:{event:"remove"},props:{dense:Boolean,icon:String,iconRight:String,iconRemove:String,iconSelected:String,label:[String,Number],color:String,textColor:String,value:{type:Boolean,default:!0},selected:{type:Boolean,default:null},square:Boolean,outline:Boolean,clickable:Boolean,removable:Boolean,removeAriaLabel:String,tabindex:[String,Number],disable:Boolean},computed:{classes(){const t=!0===this.outline&&this.color||this.textColor;return{[`bg-${this.color}`]:!1===this.outline&&void 0!==this.color,[`text-${t} q-chip--colored`]:t,disabled:this.disable,"q-chip--dense":this.dense,"q-chip--outline":this.outline,"q-chip--selected":this.selected,"q-chip--clickable cursor-pointer non-selectable q-hoverable":this.isClickable,"q-chip--square":this.square,[`q-chip--${this.localDarkSuffix}`]:!0}},localDarkSuffix(){return"string"==typeof this.color&&this.color.trim().length>0?!0===this.dark?"dark":"light":this.darkSuffix},hasLeftIcon(){return!0===this.selected||void 0!==this.icon},leftIcon(){return!0===this.selected?this.iconSelected||this.$q.iconSet.chip.selected:this.icon},removeIcon(){return this.iconRemove||this.$q.iconSet.chip.remove},isClickable(){return!1===this.disable&&(!0===this.clickable||null!==this.selected)},attrs(){const t=!0===this.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.tabindex||0};return{chip:t,remove:{...t,role:"button","aria-hidden":"false","aria-label":this.removeAriaLabel||this.$q.lang.label.remove}}}},methods:{__onKeyup(t){13===t.keyCode&&this.__onClick(t)},__onClick(t){this.disable||(this.$emit("update:selected",!this.selected),this.$emit("click",t))},__onRemove(t){void 0!==t.keyCode&&13!==t.keyCode||(w(t),!this.disable&&this.$emit("remove",!1))},__getContent(t){const e=[];!0===this.isClickable&&e.push(t("div",{staticClass:"q-focus-helper"})),!0===this.hasLeftIcon&&e.push(t(le,{staticClass:"q-chip__icon q-chip__icon--left",props:{name:this.leftIcon}}));const i=void 0!==this.label?[t("div",{staticClass:"ellipsis"},[this.label])]:void 0;return e.push(t("div",{staticClass:"q-chip__content col row no-wrap items-center q-anchor--skip"},Ut(i,this,"default"))),this.iconRight&&e.push(t(le,{staticClass:"q-chip__icon q-chip__icon--right",props:{name:this.iconRight}})),!0===this.removable&&e.push(t(le,{key:"non",staticClass:"q-chip__icon q-chip__icon--remove cursor-pointer",props:{name:this.removeIcon},attrs:this.attrs.remove,on:$t(this,"non",{click:this.__onRemove,keyup:this.__onRemove})})),e}},render(t){if(!1===this.value)return;const e={staticClass:"q-chip row inline no-wrap items-center",class:this.classes,style:this.sizeStyle};return!0===this.isClickable&&Object.assign(e,{key:"click",attrs:this.attrs.chip,on:$t(this,"click",{click:this.__onClick,keyup:this.__onKeyup}),directives:$t(this,"dir#"+this.ripple,[{name:"ripple",value:this.ripple}])}),t("div",e,this.__getContent(t))}});const no=100*Math.PI,ro=Math.round(1e3*no)/1e3;var ao=e.default.extend({name:"QCircularProgress",mixins:[Ht,Vt],props:{value:{type:Number,default:0},min:{type:Number,default:0},max:{type:Number,default:100},color:String,centerColor:String,trackColor:String,fontSize:String,rounded:Boolean,thickness:{type:Number,default:.2,validator:t=>t>=0&&t<=1},angle:{type:Number,default:0},indeterminate:Boolean,showValue:Boolean,reverse:Boolean,instantFeedback:Boolean},computed:{normalizedValue(){return wt(this.value,this.min,this.max)},svgStyle(){const t=!0===this.$q.lang.rtl?-this.angle:this.angle;return{transform:this.reverse!==(!0===this.$q.lang.rtl)?`scale3d(-1, 1, 1) rotate3d(0, 0, 1, ${-90-t}deg)`:`rotate3d(0, 0, 1, ${t-90}deg)`}},circleStyle(){if(!0!==this.instantFeedback&&!0!==this.indeterminate)return{transition:"stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease"}},viewBox(){return 100/(1-this.thickness/2)},viewBoxAttr(){return`${this.viewBox/2} ${this.viewBox/2} ${this.viewBox} ${this.viewBox}`},strokeDashOffset(){return(1-(this.normalizedValue-this.min)/(this.max-this.min))*no},strokeWidth(){return this.thickness/2*this.viewBox},attrs(){return{role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":!0===this.indeterminate?void 0:this.normalizedValue}}},methods:{__getCircle(t,{thickness:e,offset:i,color:s,cls:o,rounded:n}){return t("circle",{staticClass:"q-circular-progress__"+o,class:void 0!==s?`text-${s}`:null,style:this.circleStyle,attrs:{fill:"transparent",stroke:"currentColor","stroke-width":e,"stroke-dasharray":ro,"stroke-dashoffset":i,"stroke-linecap":n,cx:this.viewBox,cy:this.viewBox,r:50}})}},render(t){const e=[];void 0!==this.centerColor&&"transparent"!==this.centerColor&&e.push(t("circle",{staticClass:"q-circular-progress__center",class:`text-${this.centerColor}`,attrs:{fill:"currentColor",r:50-this.strokeWidth/2,cx:this.viewBox,cy:this.viewBox}})),void 0!==this.trackColor&&"transparent"!==this.trackColor&&e.push(this.__getCircle(t,{cls:"track",thickness:this.strokeWidth,offset:0,color:this.trackColor})),e.push(this.__getCircle(t,{cls:"circle",thickness:this.strokeWidth,offset:this.strokeDashOffset,color:this.color,rounded:!0===this.rounded?"round":void 0}));const i=[t("svg",{staticClass:"q-circular-progress__svg",style:this.svgStyle,attrs:{focusable:"false",viewBox:this.viewBoxAttr,"aria-hidden":"true"}},e)];return!0===this.showValue&&i.push(t("div",{staticClass:"q-circular-progress__text absolute-full row flex-center content-center",style:{fontSize:this.fontSize}},void 0!==this.$scopedSlots.default?this.$scopedSlots.default():[t("div",[this.normalizedValue])])),t("div",{staticClass:"q-circular-progress",class:`q-circular-progress--${!0===this.indeterminate?"in":""}determinate`,style:this.sizeStyle,on:{...this.qListeners},attrs:this.attrs},Ut(i,this,"internal"))}});const lo=/^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/,ho=/^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/,co=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/,uo=/^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])\)$/,po=/^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)\)$/,mo={date:t=>/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t),time:t=>/^([0-1]?\d|2[0-3]):[0-5]\d$/.test(t),fulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(t),timeOrFulltime:t=>/^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(t),email:t=>/^(([^<>()[\]\\.,;:\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(t),hexColor:t=>lo.test(t),hexaColor:t=>ho.test(t),hexOrHexaColor:t=>co.test(t),rgbColor:t=>uo.test(t),rgbaColor:t=>po.test(t),rgbOrRgbaColor:t=>uo.test(t)||po.test(t),hexOrRgbColor:t=>lo.test(t)||uo.test(t),hexaOrRgbaColor:t=>ho.test(t)||po.test(t),anyColor:t=>co.test(t)||uo.test(t)||po.test(t)};var go={testPattern:mo};function fo(t,e=250){let i,s=!1;return function(){return!1===s&&(s=!0,setTimeout(()=>{s=!1},e),i=t.apply(this,arguments)),i}}function _o(t,e,i){const s=f(t);let o,n=s.left-e.event.x,r=s.top-e.event.y,a=Math.abs(n),l=Math.abs(r);const h=e.direction;!0===h.horizontal&&!0!==h.vertical?o=n<0?"left":"right":!0!==h.horizontal&&!0===h.vertical?o=r<0?"up":"down":!0===h.up&&r<0?(o="up",a>l&&(!0===h.left&&n<0?o="left":!0===h.right&&n>0&&(o="right"))):!0===h.down&&r>0?(o="down",a>l&&(!0===h.left&&n<0?o="left":!0===h.right&&n>0&&(o="right"))):!0===h.left&&n<0?(o="left",a0&&(o="down"))):!0===h.right&&n>0&&(o="right",a0&&(o="down")));let d=!1;if(void 0===o&&!1===i){if(!0===e.event.isFirst||void 0===e.event.lastDir)return{};d=!0,"left"===(o=e.event.lastDir)||"right"===o?(s.left-=n,a=0,n=0):(s.top-=r,l=0,r=0)}return{synthetic:d,payload:{evt:t,touch:!0!==e.event.mouse,mouse:!0===e.event.mouse,position:s,direction:o,isFirst:e.event.isFirst,isFinal:!0===i,duration:Date.now()-e.event.time,distance:{x:a,y:l},offset:{x:n,y:r},delta:{x:s.left-e.event.lastX,y:s.top-e.event.lastY}}}}function vo(t){const e=t.__qtouchpan;void 0!==e&&(void 0!==e.event&&e.end(),$(e,"main_mouse"),$(e,"main_touch"),$(e,"temp"),!0===d.is.firefox&&C(t,!1),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchpan)}function bo(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&$(e,"main_mouse"),!0===i.mouse&&q(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===d.has.touch&&e.modifiers.capture!==i.capture&&($(e,"main_touch"),q(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","notPassiveCapture"]])),e.modifiers=i}function yo(t,e,i){!0===t.modifiers.mouse&&!0===i?w(e):(!0===t.modifiers.stop&&S(e),!0===t.modifiers.prevent&&x(e))}let So=0;var xo={name:"touch-pan",bind(t,{modifiers:e,value:i}){void 0!==t.__qtouchpan&&(vo(t),t.__qtouchpan_destroyed=!0);const s={uid:"qvtp_"+So++,handler:i,modifiers:{capture:null},direction:Rs(e),noop:m,mouseStart(t){Fs(t,s)&&g(t)&&(q(s,"temp",[[document,"mousemove","move","notPassiveCapture"],[document,"mouseup","end","passiveCapture"]]),s.start(t,!0))},touchStart(t){if(Fs(t,s)){const e=t.target;q(s,"temp",[[e,"touchmove","move","notPassiveCapture"],[e,"touchcancel","end","passiveCapture"],[e,"touchend","end","passiveCapture"]]),s.start(t)}},start(e,i){if(!0===d.is.firefox&&C(t,!0),s.lastEvt=e,!0===i||!0===s.modifiers.stop){if(!0!==s.direction.all&&(!0!==i||!0!==s.modifiers.mouseAllDir&&!0!==s.modifiers.mousealldir)){const t=e.type.indexOf("mouse")>-1?new MouseEvent(e.type,e):new TouchEvent(e.type,e);!0===e.defaultPrevented&&x(t),!0===e.cancelBubble&&S(t),Object.assign(t,{qClickOutside:e.qClickOutside,qAnchorHandled:e.qAnchorHandled,qClonedBy:void 0===e.qClonedBy?[s.uid]:e.qClonedBy.concat(s.uid)}),s.initialEvent={target:e.target,event:t}}S(e)}const{left:o,top:n}=f(e);s.event={x:o,y:n,time:Date.now(),mouse:!0===i,detected:!1,isFirst:!0,isFinal:!1,lastX:o,lastY:n}},move(t){if(void 0===s.event)return;s.lastEvt=t;const e=!0===s.event.mouse,i=()=>{let i;yo(s,t,e),!0!==s.modifiers.preserveCursor&&!0!==s.modifiers.preservecursor&&(i=document.documentElement.style.cursor||"",document.documentElement.style.cursor="grabbing"),!0===e&&document.body.classList.add("no-pointer-events--children"),document.body.classList.add("non-selectable"),oi(),s.styleCleanup=(t=>{if(s.styleCleanup=void 0,void 0!==i&&(document.documentElement.style.cursor=i),document.body.classList.remove("non-selectable"),!0===e){const e=()=>{document.body.classList.remove("no-pointer-events--children")};void 0!==t?setTimeout(()=>{e(),t()},50):e()}else void 0!==t&&t()})};if(!0===s.event.detected){!0!==s.event.isFirst&&yo(s,t,s.event.mouse);const{payload:e,synthetic:o}=_o(t,s,!1);return void(void 0!==e&&(!1===s.handler(e)?s.end(t):(void 0===s.styleCleanup&&!0===s.event.isFirst&&i(),s.event.lastX=e.position.left,s.event.lastY=e.position.top,s.event.lastDir=!0===o?void 0:e.direction,s.event.isFirst=!1)))}if(!0===s.direction.all||!0===e&&(!0===s.modifiers.mouseAllDir||!0===s.modifiers.mousealldir))return i(),s.event.detected=!0,void s.move(t);const o=f(t),n=o.left-s.event.x,r=o.top-s.event.y,a=Math.abs(n),l=Math.abs(r);a!==l&&(!0===s.direction.horizontal&&a>l||!0===s.direction.vertical&&a0||!0===s.direction.left&&a>l&&n<0||!0===s.direction.right&&a>l&&n>0?(s.event.detected=!0,s.move(t)):s.end(t,!0))},end(e,i){if(void 0!==s.event){if($(s,"temp"),!0===d.is.firefox&&C(t,!1),!0===i)void 0!==s.styleCleanup&&s.styleCleanup(),!0!==s.event.detected&&void 0!==s.initialEvent&&s.initialEvent.target.dispatchEvent(s.initialEvent.event);else if(!0===s.event.detected){!0===s.event.isFirst&&s.handler(_o(void 0===e?s.lastEvt:e,s).payload);const{payload:t}=_o(void 0===e?s.lastEvt:e,s,!0),i=()=>{s.handler(t)};void 0!==s.styleCleanup?s.styleCleanup(i):i()}s.event=void 0,s.initialEvent=void 0,s.lastEvt=void 0}}};t.__qtouchpan=s,bo(t,s,e)},update(t,{modifiers:e,value:i,oldValue:s}){const o=t.__qtouchpan;void 0!==o&&(s!==i&&("function"!=typeof i&&o.end(),o.handler=i),!0!==Ls(o.modifiers,e)&&(bo(t,o,e),o.direction=Rs(e)))},unbind(t){void 0===t.__qtouchpan_destroyed?vo(t):delete t.__qtouchpan_destroyed}};const wo=t=>({value:t}),Co=[34,37,40,33,39,38],ko={mixins:[ce,Ss],directives:{TouchPan:xo},props:{min:{type:Number,default:0},max:{type:Number,default:100},innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:t=>t>=0},snap:Boolean,vertical:Boolean,reverse:Boolean,hideSelection:Boolean,color:String,markerLabelsClass:String,label:Boolean,labelColor:String,labelTextColor:String,labelAlways:Boolean,switchLabelSide:Boolean,markers:[Boolean,Number],markerLabels:[Boolean,Array,Object,Function],switchMarkerLabelsSide:Boolean,trackImg:String,trackColor:String,innerTrackImg:String,innerTrackColor:String,selectionColor:String,selectionImg:String,thumbSize:{type:String,default:"20px"},trackSize:{type:String,default:"4px"},disable:Boolean,readonly:Boolean,dense:Boolean,tabindex:[String,Number],thumbColor:String,thumbPath:{type:String,default:"M 4, 10 a 6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"}},data:()=>({active:!1,preventFocus:!1,focus:!1,dragging:void 0}),computed:{axis(){return!0===this.vertical?"--v":"--h"},labelSide(){return"-"+(!0===this.switchLabelSide?"switched":"standard")},isReversed(){return!0===this.vertical?!0===this.reverse:this.reverse!==(!0===this.$q.lang.rtl)},computedInnerMin(){return this.__getInnerMin()},computedInnerMax(){return this.__getInnerMax()},editable(){return!0!==this.disable&&!0!==this.readonly&&this.computedInnerMin<=this.computedInnerMax},computedDecimals(){return(String(this.step).trim("0").split(".")[1]||"").length},computedStep(){return 0===this.step?1:this.step},computedTabindex(){return!0===this.editable?this.tabindex||0:-1},trackLen(){return this.max-this.min},innerBarLen(){return this.computedInnerMax-this.computedInnerMin},innerMinRatio(){return this.__convertModelToRatio(this.computedInnerMin)},innerMaxRatio(){return this.__convertModelToRatio(this.computedInnerMax)},positionProp(){return!0===this.vertical?!0===this.isReversed?"bottom":"top":!0===this.isReversed?"right":"left"},sizeProp(){return!0===this.vertical?"height":"width"},thicknessProp(){return!0===this.vertical?"width":"height"},orientation(){return!0===this.vertical?"vertical":"horizontal"},attributes(){const t={role:"slider","aria-valuemin":this.computedInnerMin,"aria-valuemax":this.computedInnerMax,"aria-orientation":this.orientation,"data-step":this.step};return!0===this.disable?t["aria-disabled"]="true":!0===this.readonly&&(t["aria-readonly"]="true"),t},classes(){return`q-slider q-slider${this.axis} q-slider--${!0===this.active?"":"in"}active inline no-wrap `+(!0===this.vertical?"row":"column")+(!0===this.disable?" disabled":" q-slider--enabled"+(!0===this.editable?" q-slider--editable":""))+("both"===this.focus?" q-slider--focus":"")+(this.label||!0===this.labelAlways?" q-slider--label":"")+(!0===this.labelAlways?" q-slider--label-always":"")+` q-slider--${this.darkSuffix}`+(!0===this.dense?" q-slider--dense q-slider--dense"+this.axis:"")+" q-key-group-navigation--ignore-key"},selectionBarClass(){const t=this.selectionColor||this.color;return"q-slider__selection absolute"+(void 0!==t?` text-${t}`:"")},markerClass(){return this.__getAxisClass("markers")+" absolute overflow-hidden"},trackContainerClass(){return this.__getAxisClass("track-container")},pinClass(){return this.__getPositionClass("pin")},labelClass(){return this.__getPositionClass("label")},textContainerClass(){return this.__getPositionClass("text-container")},markerLabelsContainerClass(){return this.__getPositionClass("marker-labels-container")+(void 0!==this.markerLabelsClass?` ${this.markerLabelsClass}`:"")},trackClass(){return"q-slider__track relative-position no-outline"+(void 0!==this.trackColor?` bg-${this.trackColor}`:"")},trackStyle(){const t={[this.thicknessProp]:this.trackSize};return void 0!==this.trackImg&&(t.backgroundImage=`url(${this.trackImg}) !important`),t},innerBarClass(){return"q-slider__inner absolute"+(void 0!==this.innerTrackColor?` bg-${this.innerTrackColor}`:"")},innerBarStyle(){const t={[this.positionProp]:`${100*this.innerMinRatio}%`,[this.sizeProp]:`${100*(this.innerMaxRatio-this.innerMinRatio)}%`};return void 0!==this.innerTrackImg&&(t.backgroundImage=`url(${this.innerTrackImg}) !important`),t},markerStep(){return!0===Ps(this.markers)?this.markers:this.computedStep},markerTicks(){const t=[],e=this.markerStep;let i=this.min;do{t.push(i),i+=e}while(i({index:e,value:t.value,label:t.label||t.value,classes:this.markerLabelClass+(void 0!==t.classes?" "+t.classes:""),style:{...this.__getMarkerLabelStyle(t.value),...t.style||{}}}))},markerScope(){return{markerList:this.markerLabelsList,markerMap:this.markerLabelsMap,classes:this.markerLabelClass,getStyle:this.__getMarkerLabelStyle}},markerStyle(){if(0!==this.innerBarLen){const t=100*this.markerStep/this.innerBarLen;return{...this.innerBarStyle,backgroundSize:!0===this.vertical?`2px ${t}%`:`${t}% 2px`}}return null},markerLabelsMap(){if(!1===this.markerLabels)return null;const t={};return this.markerLabelsList.forEach(e=>{t[e.value]=e}),t},panDirectives(){return!0===this.editable?[{name:"touch-pan",value:this.__onPan,modifiers:{[this.orientation]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}}]:null},getKeyOffset(){const t=[33,34],e=!0===this.vertical&&!0===this.reverse?-this.computedStep:this.computedStep,i=!0===this.vertical?[33,38,this.$q.lang.rtl===this.reverse?37:39]:[34,40,this.$q.lang.rtl===this.reverse?37:39];return s=>e*(t.includes(s)?10:1)*(i.includes(s)?-1:1)}},methods:{__getInnerMin(){return!0===isNaN(this.innerMin)||this.innerMinthis.max?this.max:this.innerMax},__getPositionClass(t){const e="q-slider__"+t;return`${e} ${e}${this.axis} ${e}${this.axis}${this.labelSide}`},__getAxisClass(t){const e="q-slider__"+t;return`${e} ${e}${this.axis}`},__convertRatioToModel(t){let e=this.min+t*(this.max-this.min);if(this.step>0){const t=(e-this.min)%this.step;e+=(Math.abs(t)>=this.step/2?(t<0?-1:1)*this.step:0)-t}return this.computedDecimals>0&&(e=parseFloat(e.toFixed(this.computedDecimals))),wt(e,this.computedInnerMin,this.computedInnerMax)},__convertModelToRatio(t){return 0===this.trackLen?0:wt((t-this.min)/this.trackLen,0,1)},__getDraggingRatio(t,e){const i=f(t),s=!0===this.vertical?wt((i.top-e.top)/e.height,0,1):wt((i.left-e.left)/e.width,0,1);return wt(!0===this.isReversed?1-s:s,this.innerMinRatio,this.innerMaxRatio)},__getMarkerList(t){if(!1===t)return null;if(!0===t)return this.markerTicks.map(wo);if("function"==typeof t)return this.markerTicks.map(e=>{const i=t(e);return!0===Es(i)?{...i,value:e}:{value:e,label:i}});const e=({value:t})=>t>=this.min&&t<=this.max;return!0===Array.isArray(t)?t.map(t=>!0===Es(t)?t:{value:t}).filter(e):Object.keys(t).map(e=>{const i=t[e],s=Number(e);return!0===Es(i)?{...i,value:s}:{value:s,label:i}}).filter(e)},__getMarkerLabelStyle(t){return{[this.positionProp]:`${100*(t-this.min)/this.trackLen}%`}},__getMarkerLabelsContent(t){if(void 0!==this.$scopedSlots["marker-label-group"])return this.$scopedSlots["marker-label-group"](this.markerScope);const e=this.$scopedSlots["marker-label"];return void 0!==e?this.markerLabelsList.map(t=>e({marker:t,...this.markerScope})):this.markerLabelsList.map(e=>t("div",{key:e.value,style:e.style,class:e.classes},e.label))},__onPan(t){!0===t.isFinal?(void 0!==this.dragging&&(this.__updatePosition(t.evt),!0===t.touch&&this.__updateValue(!0),this.dragging=void 0,this.$emit("pan","end")),this.active=!1,this.focus=!1):!0===t.isFirst?(this.dragging=this.__getDragging(t.evt),this.__updatePosition(t.evt),this.__updateValue(),this.active=!0,this.$emit("pan","start")):(this.__updatePosition(t.evt),this.__updateValue())},__onBlur(){this.focus=!1},__onActivate(t){this.__updatePosition(t,this.__getDragging(t)),this.__updateValue(),this.preventFocus=!0,this.active=!0,document.addEventListener("mouseup",this.__onDeactivate,!0)},__onDeactivate(){this.preventFocus=!1,this.active=!1,this.__updateValue(!0),this.__onBlur(),document.removeEventListener("mouseup",this.__onDeactivate,!0)},__onMobileClick(t){this.__updatePosition(t,this.__getDragging(t)),this.__updateValue(!0)},__onKeyup(t){Co.includes(t.keyCode)&&this.__updateValue(!0)},__getTextContainerStyle(t){if(!0===this.vertical)return null;const e=this.$q.lang.rtl!==this.reverse?1-t:t;return{transform:`translateX(calc(${2*e-1} * ${this.thumbSize} / 2 + ${50-100*e}%))`}},__getThumb(t,e){const i=[t("svg",{class:"q-slider__thumb-shape absolute-full",attrs:{viewBox:"0 0 20 20","aria-hidden":"true"}},[t("path",{attrs:{d:this.thumbPath}})]),t("div",{class:"q-slider__focus-ring fit"})];return!0!==this.label&&!0!==this.labelAlways||(i.push(t("div",{class:this.pinClass+" absolute fit no-pointer-events"+e.pinColor},[t("div",{class:this.labelClass,style:{minWidth:this.thumbSize}},[t("div",{class:this.textContainerClass,style:e.textContainerStyle},[t("span",{class:e.textClass},e.label)])])])),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(i,"push")),t("div",{class:e.classes,style:e.style,...e.nodeData},i)},__getContent(t,e){const i=[];"transparent"!==this.innerTrackColor&&i.push(t("div",{key:"inner",class:this.innerBarClass,style:this.innerBarStyle})),"transparent"!==this.selectionColor&&i.push(t("div",{key:"selection",class:this.selectionBarClass,style:this.selectionBarStyle})),!1!==this.markers&&i.push(t("div",{key:"marker",class:this.markerClass,style:this.markerStyle})),e(i);const s=[t("div",{key:"trackC",class:this.trackContainerClass,attrs:this.trackContainerAttrs,on:this.trackContainerEvents,directives:this.panDirectives},[t("div",{class:this.trackClass,style:this.trackStyle},i)])];if(!1!==this.markerLabels){s[!0===this.switchMarkerLabelsSide?"unshift":"push"](t("div",{key:"markerL",class:this.markerLabelsContainerClass},this.__getMarkerLabelsContent(t)))}return s}},beforeDestroy(){document.removeEventListener("mouseup",this.__onDeactivate,!0)}};var qo=e.default.extend({name:"QSlider",mixins:[ko],props:{value:{required:!0,default:null,validator:t=>"number"==typeof t||null===t},labelValue:[String,Number]},data(){return{model:null===this.value?this.__getInnerMin():wt(this.value,this.min,this.max),curRatio:0}},computed:{modelRatio(){return this.__convertModelToRatio(this.model)},ratio(){return!0===this.active?this.curRatio:this.modelRatio},selectionBarStyle(){const t=this.innerMinRatio,e={[this.positionProp]:`${100*t}%`,[this.sizeProp]:`${100*(wt(this.ratio,t,this.innerMaxRatio)-t)}%`};return void 0!==this.selectionImg&&(e.backgroundImage=`url(${this.selectionImg}) !important`),e},thumbLabel(){return void 0!==this.labelValue?this.labelValue:this.valuethis.max?this.value:this.model},thumbClasses(){const t=this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.valuethis.max?" q-slider__thumb--wrong-value":"")+(!1===this.preventFocus&&!0===this.focus?" q-slider--focus":"")+(void 0!==t?` text-${t}`:"")},thumbStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratio}%`}},thumbPinColor(){return void 0!==this.labelColor?` text-${this.labelColor}`:""},thumbTextContainerStyle(){return this.__getTextContainerStyle(this.ratio)},thumbTextClass(){return"q-slider__text"+(void 0!==this.labelTextColor?` text-${this.labelTextColor}`:"")},trackContainerAttrs(){return!0!==this.$q.platform.is.mobile?{tabindex:this.computedTabindex}:void 0},trackContainerEvents(){return!0!==this.editable?{}:!0===this.$q.platform.is.mobile?{click:this.__onMobileClick}:{mousedown:this.__onActivate,focus:this.__onFocus,blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}},modelUpdate(){return[this.value,this.min,this.max,this.innerMin,this.innerMax].join("#")}},watch:{modelUpdate(){this.model=null===this.value?this.computedInnerMin:wt(this.value,this.min,this.max)}},methods:{__updateValue(t){this.model!==this.value&&this.$emit("input",this.model),!0===t&&this.$emit("change",this.model)},__getDragging(){return this.$el.getBoundingClientRect()},__updatePosition(t,e=this.dragging){const i=this.__getDraggingRatio(t,e);this.model=this.__convertRatioToModel(i),this.curRatio=!0!==this.snap||0===this.computedStep?wt(i,this.innerMinRatio,this.innerMaxRatio):this.__convertModelToRatio(this.model)},__onFocus(){this.focus=!0},__onKeydown(t){Co.includes(t.keyCode)&&(this.focus=!0,w(t),this.model=wt(parseFloat((this.model+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),this.computedInnerMin,this.computedInnerMax),this.__updateValue())}},render(t){const e=this.__getContent(t,e=>{e.push(this.__getThumb(t,{pinColor:this.thumbPinColor,textContainerStyle:this.thumbTextContainerStyle,textClass:this.thumbTextClass,label:this.thumbLabel,classes:this.thumbClasses,style:this.thumbStyle,nodeData:{}}))});return t("div",{class:this.classes+(null===this.value?" q-slider--no-value":""),attrs:{...this.attributes,"aria-valuenow":this.value}},e)}}),$o={data:()=>({canRender:!n}),mounted(){!1===this.canRender&&(this.canRender=!0)}},To=e.default.extend({name:"QResizeObserver",mixins:[$o],props:{debounce:{type:[String,Number],default:100}},data(){return!0===this.hasObserver?{}:{url:!0===this.$q.platform.is.ie?null:"about:blank"}},methods:{trigger(t){!0===t||0===this.debounce||"0"===this.debounce?this.__emit():null===this.timer&&(this.timer=setTimeout(this.__emit,this.debounce))},__emit(){if(null!==this.timer&&(clearTimeout(this.timer),this.timer=null),!this.$el||!this.$el.parentNode)return;const t=this.$el.parentNode,e={width:t.offsetWidth,height:t.offsetHeight};e.width===this.size.width&&e.height===this.size.height||(this.size=e,this.$emit("resize",this.size))},__cleanup(){void 0!==this.curDocView&&(void 0!==this.curDocView.removeEventListener&&this.curDocView.removeEventListener("resize",this.trigger,u.passive),this.curDocView=void 0)},__onObjLoad(){this.__cleanup(),this.$el.contentDocument&&(this.curDocView=this.$el.contentDocument.defaultView,this.curDocView.addEventListener("resize",this.trigger,u.passive)),this.__emit()}},render(t){if(!1!==this.canRender&&!0!==this.hasObserver)return t("object",{key:"load",style:this.style,attrs:{tabindex:-1,type:"text/html",data:this.url,"aria-hidden":"true"},on:$t(this,"load",{load:this.__onObjLoad})})},beforeCreate(){this.size={width:-1,height:-1},!0!==i&&(this.hasObserver="undefined"!=typeof ResizeObserver,!0!==this.hasObserver&&(this.style=`${this.$q.platform.is.ie?"visibility:hidden;":""}display:block;position:absolute;top:0;left:0;right:0;bottom:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1;`))},mounted(){if(this.timer=null,!0===this.hasObserver)return this.observer=new ResizeObserver(this.trigger),this.observer.observe(this.$el.parentNode),void this.__emit();!0===this.$q.platform.is.ie?(this.url="about:blank",this.__emit()):this.__onObjLoad()},beforeDestroy(){clearTimeout(this.timer),!0!==this.hasObserver?this.__cleanup():void 0!==this.observer&&this.$el.parentNode&&this.observer.unobserve(this.$el.parentNode)}});function Mo(t,e,i,s){return Object.defineProperty(t,e,{get:i,set:s,enumerable:!0}),t}const Lo=["left","center","right","justify"];function Eo(t,e){for(const i in t)if(t[i]!==e[i])return!1;return!0}var Ao=e.default.extend({name:"QTabs",mixins:[li,Ht],provide(){return{$tabs:this}},props:{value:[Number,String],align:{type:String,default:"center",validator:t=>Lo.includes(t)},breakpoint:{type:[String,Number],default:600},vertical:Boolean,shrink:Boolean,stretch:Boolean,activeClass:String,activeColor:String,activeBgColor:String,indicatorColor:String,leftIcon:String,rightIcon:String,outsideArrows:Boolean,mobileArrows:Boolean,switchIndicator:Boolean,narrowIndicator:Boolean,inlineLabel:Boolean,noCaps:Boolean,dense:Boolean,contentClass:String},data(){return{scrollable:!1,leftArrow:!0,rightArrow:!1,justify:!1,tabNameList:[],currentModel:this.value,hasFocus:!1,avoidRouteWatcher:!1}},watch:{isRTL(){this.__localUpdateArrows()},value(t){this.__updateModel({name:t,setCurrent:!0,skipEmit:!0})},outsideArrows(){this.__recalculateScroll()},arrowsEnabled(t){this.__localUpdateArrows=!0===t?this.__updateArrowsFn:m,this.__recalculateScroll()}},computed:{tabProps(){return{activeClass:this.activeClass,activeColor:this.activeColor,activeBgColor:this.activeBgColor,indicatorClass:function(t,e,i){const s=!0===i?["left","right"]:["top","bottom"];return`absolute-${!0===e?s[0]:s[1]}${t?` text-${t}`:""}`}(this.indicatorColor,this.switchIndicator,this.vertical),narrowIndicator:this.narrowIndicator,inlineLabel:this.inlineLabel,noCaps:this.noCaps}},hasActiveTab(){return this.tabNameList.some(t=>t.name===this.currentModel)},arrowsEnabled(){return!0===this.$q.platform.is.desktop||!0===this.mobileArrows},alignClass(){return`q-tabs__content--align-${!0===this.scrollable?"left":!0===this.justify?"justify":this.align}`},classes(){return"q-tabs row no-wrap items-center"+` q-tabs--${!0===this.scrollable?"":"not-"}scrollable`+` q-tabs--${!0===this.vertical?"vertical":"horizontal"}`+` q-tabs__arrows--${!0===this.arrowsEnabled&&!0===this.outsideArrows?"outside":"inside"}`+(!0===this.dense?" q-tabs--dense":"")+(!0===this.shrink?" col-shrink":"")+(!0===this.stretch?" self-stretch":"")},innerClass(){return"q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position "+this.alignClass+(void 0!==this.contentClass?` ${this.contentClass}`:"")+(!0===this.$q.platform.is.mobile?" scroll":"")},domProps(){return!0===this.vertical?{container:"height",content:"offsetHeight",scroll:"scrollHeight"}:{container:"width",content:"offsetWidth",scroll:"scrollWidth"}},isRTL(){return!0!==this.vertical&&!0===this.$q.lang.rtl},rtlPosCorrection(){return!1===Ri()&&!0===this.isRTL},posFn(){return!0===this.rtlPosCorrection?{get:t=>Math.abs(t.scrollLeft),set:(t,e)=>{t.scrollLeft=-e}}:!0===this.vertical?{get:t=>t.scrollTop,set:(t,e)=>{t.scrollTop=e}}:{get:t=>t.scrollLeft,set:(t,e)=>{t.scrollLeft=e}}},onEvents(){return{input:S,...this.qListeners,focusin:this.__onFocusin,focusout:this.__onFocusout}}},methods:{__updateModel({name:t,setCurrent:e,skipEmit:i}){this.currentModel!==t&&(!0!==i&&void 0!==this.qListeners.input&&this.$emit("input",t),!0!==e&&void 0!==this.qListeners.input||(this.__animate(this.currentModel,t),this.currentModel=t))},__recalculateScroll(){this.__registerScrollTick(()=>{this.__updateContainer({width:this.$el.offsetWidth,height:this.$el.offsetHeight})})},__updateContainer(t){if(void 0===this.domProps||!this.$refs.content)return;const e=t[this.domProps.container],i=Math.min(this.$refs.content[this.domProps.scroll],Array.prototype.reduce.call(this.$refs.content.children,(t,e)=>t+(e[this.domProps.content]||0),0)),s=e>0&&i>e;this.scrollable!==s&&(this.scrollable=s),!0===s&&this.__registerUpdateArrowsTick(this.__localUpdateArrows);const o=ee.name===t):null,s=void 0!==e&&null!==e&&""!==e?this.tabVmList.find(t=>t.name===e):null;if(i&&s){const t=i.$refs.tabIndicator,e=s.$refs.tabIndicator;clearTimeout(this.animateTimer),t.style.transition="none",t.style.transform="none",e.style.transition="none",e.style.transform="none";const o=t.getBoundingClientRect(),n=e.getBoundingClientRect();e.style.transform=!0===this.vertical?`translate3d(0,${o.top-n.top}px,0) scale3d(1,${n.height?o.height/n.height:1},1)`:`translate3d(${o.left-n.left}px,0,0) scale3d(${n.width?o.width/n.width:1},1,1)`,this.__registerAnimateTick(()=>{this.animateTimer=setTimeout(()=>{e.style.transition="transform .25s cubic-bezier(.4, 0, .2, 1)",e.style.transform="none"},70)})}s&&!0===this.scrollable&&this.__scrollToTabEl(s.$el)},__scrollToTabEl(t){const e=this.$refs.content,{left:i,width:s,top:o,height:n}=e.getBoundingClientRect(),r=t.getBoundingClientRect();let a=!0===this.vertical?r.top-o:r.left-i;if(a<0)return e[!0===this.vertical?"scrollTop":"scrollLeft"]+=Math.floor(a),void this.__localUpdateArrows();(a+=!0===this.vertical?r.height-n:r.width-s)>0&&(e[!0===this.vertical?"scrollTop":"scrollLeft"]+=Math.ceil(a),this.__localUpdateArrows())},__updateArrowsFn(){const t=this.$refs.content;if(null!==t){const e=t.getBoundingClientRect(),i=!0===this.vertical?t.scrollTop:Math.abs(t.scrollLeft);!0===this.isRTL?(this.leftArrow=Math.ceil(i+e.width)0):(this.leftArrow=i>0,this.rightArrow=!0===this.vertical?Math.ceil(i+e.height){!0===this.__scrollTowards(t)&&this.__stopAnimScroll()},5)},__scrollToStart(){this.__animScrollTo(!0===this.rtlPosCorrection?Number.MAX_SAFE_INTEGER:0)},__scrollToEnd(){this.__animScrollTo(!0===this.rtlPosCorrection?0:Number.MAX_SAFE_INTEGER)},__stopAnimScroll(){clearInterval(this.scrollTimer)},__onKbdNavigate(t,e){const i=Array.prototype.filter.call(this.$refs.content.children,t=>t===e||t.matches&&!0===t.matches(".q-tab.q-focusable")),s=i.length;if(0===s)return;if(36===t)return!0!==i[0].contains(document.activeElement)&&(this.__scrollToTabEl(i[0]),i[0].focus(),!0);if(35===t)return!0!==i[s-1].contains(document.activeElement)&&(this.__scrollToTabEl(i[s-1]),i[s-1].focus(),!0);const o=t===(!0===this.vertical?38:37),n=t===(!0===this.vertical?40:39),r=!0===o?-1:!0===n?1:void 0;if(void 0!==r){const t=!0===this.isRTL?-1:1,o=i.indexOf(e)+r*t;return!(o<0||o>=s||!0===i[o].contains(document.activeElement))&&(this.__scrollToTabEl(i[o]),i[o].focus({preventScroll:!0}),!0)}},__scrollTowards(t){const e=this.$refs.content,{get:i,set:s}=this.posFn;let o=!1,n=i(e);const r=t=t)&&(o=!0,n=t),s(e,n),this.__localUpdateArrows(),o},__updateActiveRoute(){let t=null,e={matchedLen:0,queryDiff:9999,hrefLen:0,exact:!1,redirected:!0};const i=this.tabVmList.filter(t=>!0===t.hasRouterLink),s=i.length,{query:o}=this.$route,n=Object.keys(o).length;for(let r=0;re.matchedLen?(t=s.name,e=g):g.matchedLen===e.matchedLen&&(g.queryDiffe.hrefLen&&(t=s.name,e=g))}null===t&&!0===this.tabVmList.some(t=>void 0===t.hasRouterLink&&t.name===this.currentModel)||this.__updateModel({name:t,setCurrent:!0})},__onFocusin(t){if(this.__removeFocusTimeout(),!0!==this.hasFocus&&this.$el&&t.target&&"function"==typeof t.target.closest){const e=t.target.closest(".q-tab");e&&!0===this.$el.contains(e)&&(this.hasFocus=!0,!0===this.scrollable&&this.__scrollToTabEl(e))}void 0!==this.qListeners.focusin&&this.$emit("focusin",t)},__onFocusout(t){this.__registerFocusTimeout(()=>{this.hasFocus=!1},30),void 0!==this.qListeners.focusout&&this.$emit("focusout",t)},__verifyRouteModel(){!1===this.avoidRouteWatcher?this.__registerScrollToTabTimeout(this.__updateActiveRoute):this.__removeScrollToTabTimeout()},__watchRoute(){if(void 0===this.unwatchRoute){const t=this.$watch(()=>this.$route.fullPath,this.__verifyRouteModel);this.unwatchRoute=(()=>{t(),this.unwatchRoute=void 0})}},__registerTab(t){this.tabVmList.push(t),this.tabNameList.push(Mo({},"name",()=>t.name)),this.__recalculateScroll(),void 0===t.hasRouterLink||void 0===this.$route?this.__registerScrollToTabTimeout(()=>{if(!0===this.scrollable){const t=this.currentModel,e=void 0!==t&&null!==t&&""!==t?this.tabVmList.find(e=>e.name===t):null;e&&this.__scrollToTabEl(e.$el)}}):(this.__watchRoute(),!0===t.hasRouterLink&&this.__verifyRouteModel())},__unregisterTab(t){const e=this.tabVmList.indexOf(t);this.tabVmList.splice(e,1),this.tabNameList.splice(e,1),this.__recalculateScroll(),void 0!==this.unwatchRoute&&void 0!==t.hasRouterLink&&(!0===this.tabVmList.every(t=>void 0===t.hasRouterLink)&&this.unwatchRoute(),this.__verifyRouteModel())},__cleanup(){clearTimeout(this.animateTimer),this.__stopAnimScroll(),void 0!==this.unwatchRoute&&this.unwatchRoute()}},created(){this.__useTick("__registerScrollTick"),this.__useTick("__registerUpdateArrowsTick"),this.__useTick("__registerAnimateTick"),this.__useTimeout("__registerFocusTimeout","__removeFocusTimeout"),this.__useTimeout("__registerScrollToTabTimeout","__removeScrollToTabTimeout"),Object.assign(this,{tabVmList:[],__localUpdateArrows:!0===this.arrowsEnabled?this.__updateArrowsFn:m})},activated(){!0===this.hadRouteWatcher&&this.__watchRoute(),this.__recalculateScroll()},deactivated(){this.hadRouteWatcher=void 0!==this.unwatchRoute,this.__cleanup()},beforeDestroy(){this.__cleanup()},render(t){const e=[t(To,{key:"resize",on:$t(this,"resize",{resize:this.__updateContainer})}),t("div",{key:"scroll",ref:"content",class:this.innerClass,on:!0===this.arrowsEnabled?$t(this,"scroll",{scroll:this.__updateArrowsFn}):void 0},jt(this,"default"))];return!0===this.arrowsEnabled&&e.push(t(le,{key:"onS",class:"q-tabs__arrow q-tabs__arrow--start absolute q-tab__icon"+(!0===this.leftArrow?"":" q-tabs__arrow--faded"),props:{name:this.leftIcon||this.$q.iconSet.tabs[!0===this.vertical?"up":"left"]},on:$t(this,"onS",{"&mousedown":this.__scrollToStart,"&touchstart":this.__scrollToStart,"&mouseup":this.__stopAnimScroll,"&mouseleave":this.__stopAnimScroll,"&touchend":this.__stopAnimScroll})}),t(le,{key:"onE",class:"q-tabs__arrow q-tabs__arrow--end absolute q-tab__icon"+(!0===this.rightArrow?"":" q-tabs__arrow--faded"),props:{name:this.rightIcon||this.$q.iconSet.tabs[!0===this.vertical?"down":"right"]},on:$t(this,"onE",{"&mousedown":this.__scrollToEnd,"&touchstart":this.__scrollToEnd,"&mouseup":this.__stopAnimScroll,"&mouseleave":this.__stopAnimScroll,"&touchend":this.__stopAnimScroll})})),t("div",{class:this.classes,on:this.onEvents,attrs:{role:"tablist"}},e)}});let Bo=0;var Po=e.default.extend({name:"QTab",mixins:[De,Ht],inject:{$tabs:{default(){console.error("QTab/QRouteTab components need to be child of QTabs")}}},props:{icon:String,label:[Number,String],alert:[Boolean,String],alertIcon:String,name:{type:[Number,String],default:()=>`t_${Bo++}`},noCaps:Boolean,tabindex:[String,Number],disable:Boolean,contentClass:String},computed:{isActive(){return this.$tabs.currentModel===this.name},classes(){return"q-tab relative-position self-stretch flex flex-center text-center"+(!0===this.isActive?" q-tab--active"+(this.$tabs.tabProps.activeClass?" "+this.$tabs.tabProps.activeClass:"")+(this.$tabs.tabProps.activeColor?` text-${this.$tabs.tabProps.activeColor}`:"")+(this.$tabs.tabProps.activeBgColor?` bg-${this.$tabs.tabProps.activeBgColor}`:""):" q-tab--inactive")+(this.icon&&this.label&&!1===this.$tabs.tabProps.inlineLabel?" q-tab--full":"")+(!0===this.noCaps||!0===this.$tabs.tabProps.noCaps?" q-tab--no-caps":"")+(!0===this.disable?" disabled":" q-focusable q-hoverable cursor-pointer")+(void 0!==this.hasRouterLinkProps?this.linkClass:"")},innerClass(){return"q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable q-key-group-navigation--ignore-key "+(!0===this.$tabs.tabProps.inlineLabel?"row no-wrap q-tab__content--inline":"column")+(void 0!==this.contentClass?` ${this.contentClass}`:"")},computedTabIndex(){return!0===this.disable||!0===this.$tabs.hasFocus||!1===this.isActive&&!0===this.$tabs.hasActiveTab?-1:this.tabindex||0},computedRipple(){return!1!==this.ripple&&Object.assign({keyCodes:[13,32],early:!0},!0===this.ripple?{}:this.ripple)},onEvents(){return{input:S,...this.qListeners,click:this.__onClick,keydown:this.__onKeydown}},attrs(){const t={...this.linkAttrs,tabindex:this.computedTabIndex,role:"tab","aria-selected":!0===this.isActive?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{__onClick(t,e){if(!0!==e&&void 0!==this.$refs.blurTarget&&this.$refs.blurTarget.focus({preventScroll:!0}),!0!==this.disable){if(void 0===this.hasRouterLinkProps)return this.$tabs.__updateModel({name:this.name}),void(void 0!==this.qListeners.click&&this.$emit("click",t));if(!0===this.hasRouterLink){const e=(e,i,s)=>{const{to:o,replace:n,append:r,returnRouterError:a}=!1===t.navigate?{to:e,replace:i,append:s}:e||{};let l;const h=void 0===o||r===this.append&&!0===Ls(o,this.to)?this.$tabs.avoidRouteWatcher=vs():null;return this.__navigateToRouterLink(t,{to:o,replace:n,append:r,returnRouterError:!0}).catch(t=>{l=t}).then(t=>(h===this.$tabs.avoidRouteWatcher&&(this.$tabs.avoidRouteWatcher=!1,void 0!==l&&!0!==l.message.startsWith("Avoided redundant navigation")||this.$tabs.__updateModel({name:this.name})),void 0!==l&&!0===a?Promise.reject(l):t))};return void 0!==this.qListeners.click&&this.$emit("click",t,e),!1===t.navigate&&t.preventDefault(),void(!0!==t.defaultPrevented&&e())}void 0!==this.qListeners.click&&this.$emit("click",t)}else!0===this.hasRouterLink&&w(t)},__onKeydown(t){ze(t,[13,32])?this.__onClick(t,!0):!0!==Pe(t)&&t.keyCode>=35&&t.keyCode<=40&&!0!==t.altKey&&!0!==t.metaKey&&!0===this.$tabs.__onKbdNavigate(t.keyCode,this.$el)&&w(t),void 0!==this.qListeners.keydown&&this.$emit("keydown",t)},__getContent(t){const e=this.$tabs.tabProps.narrowIndicator,i=[],s=t("div",{ref:"tabIndicator",staticClass:"q-tab__indicator",class:this.$tabs.tabProps.indicatorClass});void 0!==this.icon&&i.push(t(le,{staticClass:"q-tab__icon",props:{name:this.icon}})),void 0!==this.label&&i.push(t("div",{staticClass:"q-tab__label"},[this.label])),!1!==this.alert&&i.push(void 0!==this.alertIcon?t(le,{staticClass:"q-tab__alert-icon",props:{color:!0!==this.alert?this.alert:void 0,name:this.alertIcon}}):t("div",{staticClass:"q-tab__alert",class:!0!==this.alert?`text-${this.alert}`:null})),!0===e&&i.push(s);const o=[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"}),t("div",{class:this.innerClass},Wt(i,this,"default"))];return!1===e&&o.push(s),o},__renderTab(t,e){return t(e,{class:this.classes,attrs:this.attrs,on:this.onEvents,directives:!1===this.ripple||!0===this.disable?null:[{name:"ripple",value:this.computedRipple}]},this.__getContent(t))}},mounted(){this.$tabs.__registerTab(this)},beforeDestroy(){this.$tabs.__unregisterTab(this)},render(t){return this.__renderTab(t,"div")}}),zo=e.default.extend({name:"QTabPanels",mixins:[ce,Ws],computed:{classes(){return"q-tab-panels q-panel-parent"+` q-tab-panels--${this.darkSuffix} q-${this.darkSuffix}`}},methods:{__renderPanels(t){return t("div",{class:this.classes,directives:this.panelDirectives,on:{...this.qListeners}},this.__getPanelContent(t))}}});const Io={role:"tabpanel"};var Oo=e.default.extend({name:"QTabPanel",mixins:[Us],render(t){return t("div",{staticClass:"q-tab-panel",attrs:Io,on:{...this.qListeners}},jt(this,"default"))}});const Ro=["rgb(255,204,204)","rgb(255,230,204)","rgb(255,255,204)","rgb(204,255,204)","rgb(204,255,230)","rgb(204,255,255)","rgb(204,230,255)","rgb(204,204,255)","rgb(230,204,255)","rgb(255,204,255)","rgb(255,153,153)","rgb(255,204,153)","rgb(255,255,153)","rgb(153,255,153)","rgb(153,255,204)","rgb(153,255,255)","rgb(153,204,255)","rgb(153,153,255)","rgb(204,153,255)","rgb(255,153,255)","rgb(255,102,102)","rgb(255,179,102)","rgb(255,255,102)","rgb(102,255,102)","rgb(102,255,179)","rgb(102,255,255)","rgb(102,179,255)","rgb(102,102,255)","rgb(179,102,255)","rgb(255,102,255)","rgb(255,51,51)","rgb(255,153,51)","rgb(255,255,51)","rgb(51,255,51)","rgb(51,255,153)","rgb(51,255,255)","rgb(51,153,255)","rgb(51,51,255)","rgb(153,51,255)","rgb(255,51,255)","rgb(255,0,0)","rgb(255,128,0)","rgb(255,255,0)","rgb(0,255,0)","rgb(0,255,128)","rgb(0,255,255)","rgb(0,128,255)","rgb(0,0,255)","rgb(128,0,255)","rgb(255,0,255)","rgb(245,0,0)","rgb(245,123,0)","rgb(245,245,0)","rgb(0,245,0)","rgb(0,245,123)","rgb(0,245,245)","rgb(0,123,245)","rgb(0,0,245)","rgb(123,0,245)","rgb(245,0,245)","rgb(214,0,0)","rgb(214,108,0)","rgb(214,214,0)","rgb(0,214,0)","rgb(0,214,108)","rgb(0,214,214)","rgb(0,108,214)","rgb(0,0,214)","rgb(108,0,214)","rgb(214,0,214)","rgb(163,0,0)","rgb(163,82,0)","rgb(163,163,0)","rgb(0,163,0)","rgb(0,163,82)","rgb(0,163,163)","rgb(0,82,163)","rgb(0,0,163)","rgb(82,0,163)","rgb(163,0,163)","rgb(92,0,0)","rgb(92,46,0)","rgb(92,92,0)","rgb(0,92,0)","rgb(0,92,46)","rgb(0,92,92)","rgb(0,46,92)","rgb(0,0,92)","rgb(46,0,92)","rgb(92,0,92)","rgb(255,255,255)","rgb(205,205,205)","rgb(178,178,178)","rgb(153,153,153)","rgb(127,127,127)","rgb(102,102,102)","rgb(76,76,76)","rgb(51,51,51)","rgb(25,25,25)","rgb(0,0,0)"];var Fo=e.default.extend({name:"QColor",mixins:[Ht,ce,Ss],directives:{TouchPan:xo},props:{value:String,defaultValue:String,defaultView:{type:String,default:"spectrum",validator:t=>["spectrum","tune","palette"].includes(t)},formatModel:{type:String,default:"auto",validator:t=>["auto","hex","rgb","hexa","rgba"].includes(t)},palette:Array,noHeader:Boolean,noHeaderTabs:Boolean,noFooter:Boolean,square:Boolean,flat:Boolean,bordered:Boolean,disable:Boolean,readonly:Boolean},data(){return{topView:"auto"===this.formatModel?void 0===this.value||null===this.value||""===this.value||this.value.startsWith("#")?"hex":"rgb":this.formatModel.startsWith("hex")?"hex":"rgb",view:this.defaultView,model:this.__parseModel(this.value||this.defaultValue)}},watch:{value(t){const e=this.__parseModel(t||this.defaultValue);e.hex!==this.model.hex&&(this.model=e)},defaultValue(t){if(!this.value&&t){const e=this.__parseModel(t);e.hex!==this.model.hex&&(this.model=e)}}},computed:{editable(){return!0!==this.disable&&!0!==this.readonly},forceHex(){return"auto"===this.formatModel?null:this.formatModel.indexOf("hex")>-1},forceAlpha(){return"auto"===this.formatModel?null:this.formatModel.indexOf("a")>-1},isHex(){return void 0===this.value||null===this.value||""===this.value||this.value.startsWith("#")},isOutputHex(){return null!==this.forceHex?this.forceHex:this.isHex},formAttrs(){return{type:"hidden",name:this.name,value:this.model[!0===this.isOutputHex?"hex":"rgb"]}},hasAlpha(){return null!==this.forceAlpha?this.forceAlpha:void 0!==this.model.a},currentBgColor(){return{backgroundColor:this.model.rgb||"#000"}},headerClass(){return`q-color-picker__header-content--${void 0!==this.model.a&&this.model.a<65||ht(this.model)>.4?"light":"dark"}`},spectrumStyle(){return{background:`hsl(${this.model.h},100%,50%)`}},spectrumPointerStyle(){return{top:`${100-this.model.v}%`,[!0===this.$q.lang.rtl?"right":"left"]:`${this.model.s}%`}},computedPalette(){return void 0!==this.palette&&this.palette.length>0?this.palette:Ro},classes(){return"q-color-picker"+(!0===this.bordered?" q-color-picker--bordered":"")+(!0===this.square?" q-color-picker--square no-border-radius":"")+(!0===this.flat?" q-color-picker--flat no-shadow":"")+(!0===this.disable?" disabled":"")+` q-color-picker--${this.darkSuffix} q-${this.darkSuffix}`},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0}},created(){this.__spectrumChange=fo(this.__spectrumChange,20)},render(t){const e=[this.__getContent(t)];return void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),!0!==this.noHeader&&e.unshift(this.__getHeader(t)),!0!==this.noFooter&&e.push(this.__getFooter(t)),t("div",{class:this.classes,attrs:this.attrs,on:{...this.qListeners}},e)},methods:{__getHeader(t){const e=[];return!0!==this.noHeaderTabs&&e.push(t(Ao,{key:"topVTab",class:"q-color-picker__header-tabs",props:{value:this.topView,dense:!0,align:"justify"},on:$t(this,"topVTab",{input:t=>{this.topView=t}})},[t(Po,{props:{label:"HEX"+(!0===this.hasAlpha?"A":""),name:"hex",ripple:!1}}),t(Po,{props:{label:"RGB"+(!0===this.hasAlpha?"A":""),name:"rgb",ripple:!1}})])),e.push(t("div",{staticClass:"q-color-picker__header-banner row flex-center no-wrap"},[t("input",{key:"topIn",staticClass:"fit",domProps:{value:this.model[this.topView]},attrs:!0!==this.editable?{readonly:!0}:null,on:$t(this,"topIn",{input:t=>{this.__updateErrorIcon(!0===this.__onEditorChange(t))},change:S,blur:t=>{!0===this.__onEditorChange(t,!0)&&this.$forceUpdate(),this.__updateErrorIcon(!1)}})}),t(le,{ref:"errorIcon",staticClass:"q-color-picker__error-icon absolute no-pointer-events",props:{name:this.$q.iconSet.type.negative}})])),t("div",{staticClass:"q-color-picker__header relative-position overflow-hidden"},[t("div",{staticClass:"q-color-picker__header-bg absolute-full"}),t("div",{staticClass:"q-color-picker__header-content",class:this.headerClass,style:this.currentBgColor},e)])},__getContent(t){return t(zo,{props:{value:this.view,animated:!0}},[t(Oo,{staticClass:"q-color-picker__spectrum-tab overflow-hidden",props:{name:"spectrum"}},this.__getSpectrumTab(t)),t(Oo,{staticClass:"q-pa-md q-color-picker__tune-tab",props:{name:"tune"}},this.__getTuneTab(t)),t(Oo,{staticClass:"q-color-picker__palette-tab",props:{name:"palette"}},this.__getPaletteTab(t))])},__getFooter(t){return t("div",{staticClass:"q-color-picker__footer relative-position overflow-hidden"},[t(Ao,{key:"ftIn",staticClass:"absolute-full",props:{value:this.view,dense:!0,align:"justify"},on:$t(this,"ftIn",{input:t=>{this.view=t}})},[t(Po,{props:{icon:this.$q.iconSet.colorPicker.spectrum,name:"spectrum",ripple:!1}}),t(Po,{props:{icon:this.$q.iconSet.colorPicker.tune,name:"tune",ripple:!1}}),t(Po,{props:{icon:this.$q.iconSet.colorPicker.palette,name:"palette",ripple:!1}})])])},__getSpectrumTab(t){return[t("div",{key:"spectrT",ref:"spectrum",staticClass:"q-color-picker__spectrum non-selectable relative-position cursor-pointer",style:this.spectrumStyle,class:{readonly:!0!==this.editable},on:!0===this.editable?$t(this,"spectrT",{click:this.__spectrumClick,mousedown:this.__activate}):null,directives:!0===this.editable?$t(this,"spectrDir",[{name:"touch-pan",modifiers:{prevent:!0,stop:!0,mouse:!0},value:this.__spectrumPan}]):null},[t("div",{style:{paddingBottom:"100%"}}),t("div",{staticClass:"q-color-picker__spectrum-white absolute-full"}),t("div",{staticClass:"q-color-picker__spectrum-black absolute-full"}),t("div",{staticClass:"absolute",style:this.spectrumPointerStyle},[void 0!==this.model.hex?t("div",{staticClass:"q-color-picker__spectrum-circle"}):null])]),t("div",{staticClass:"q-color-picker__sliders"},[t(qo,{key:"hueSlide",staticClass:"q-color-picker__hue non-selectable",props:{value:this.model.h,min:0,max:360,trackSize:"8px",innerTrackColor:"transparent",selectionColor:"transparent",readonly:!0!==this.editable,thumbPath:"M5 5 h10 v10 h-10 v-10 z"},on:$t(this,"hueSlide",{input:this.__onHueChange,change:t=>this.__onHueChange(t,!0)})}),!0===this.hasAlpha?t(qo,{key:"alphaSlide",staticClass:"q-color-picker__alpha non-selectable",props:{value:this.model.a,min:0,max:100,trackSize:"8px",trackColor:"white",innerTrackColor:"transparent",selectionColor:"transparent",trackImg:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==",readonly:!0!==this.editable,hideSelection:!0,thumbPath:"M5 5 h10 v10 h-10 v-10 z"},on:$t(this,"alphaSlide",{input:t=>this.__onNumericChange(t,"a",100),change:t=>this.__onNumericChange(t,"a",100,void 0,!0)})}):null])]},__getTuneTab(t){const e={inputmode:"numeric",maxlength:3,readonly:!0!==this.editable};return[t("div",{staticClass:"row items-center no-wrap"},[t("div",["R"]),t(qo,{key:"rSlide",props:{value:this.model.r,min:0,max:255,color:"red",dark:this.dark,readonly:!0!==this.editable},on:$t(this,"rSlide",{input:t=>this.__onNumericChange(t,"r",255),change:t=>this.__onNumericChange(t,"r",255,void 0,!0)})}),t("input",{key:"rIn",domProps:{value:this.model.r},attrs:e,on:$t(this,"rIn",{input:t=>this.__onNumericChange(t.target.value,"r",255,t),change:S,blur:t=>this.__onNumericChange(t.target.value,"r",255,t,!0)})})]),t("div",{staticClass:"row items-center no-wrap"},[t("div",["G"]),t(qo,{key:"gSlide",props:{value:this.model.g,min:0,max:255,color:"green",dark:this.dark,readonly:!0!==this.editable},on:$t(this,"gSlide",{input:t=>this.__onNumericChange(t,"g",255),change:t=>this.__onNumericChange(t,"g",255,void 0,!0)})}),t("input",{key:"gIn",domProps:{value:this.model.g},attrs:e,on:$t(this,"gIn",{input:t=>this.__onNumericChange(t.target.value,"g",255,t),change:S,blur:t=>this.__onNumericChange(t.target.value,"g",255,t,!0)})})]),t("div",{staticClass:"row items-center no-wrap"},[t("div",["B"]),t(qo,{key:"bSlide",props:{value:this.model.b,min:0,max:255,color:"blue",readonly:!0!==this.editable,dark:this.dark},on:$t(this,"bSlide",{input:t=>this.__onNumericChange(t,"b",255),change:t=>this.__onNumericChange(t,"b",255,void 0,!0)})}),t("input",{key:"bIn",domProps:{value:this.model.b},attrs:e,on:$t(this,"bIn",{input:t=>this.__onNumericChange(t.target.value,"b",255,t),change:S,blur:t=>this.__onNumericChange(t.target.value,"b",255,t,!0)})})]),!0===this.hasAlpha?t("div",{staticClass:"row items-center no-wrap"},[t("div",["A"]),t(qo,{key:"aSlide",props:{value:this.model.a,color:"grey",readonly:!0!==this.editable,dark:this.dark},on:$t(this,"aSlide",{input:t=>this.__onNumericChange(t,"a",100),change:t=>this.__onNumericChange(t,"a",100,void 0,!0)})}),t("input",{key:"aIn",domProps:{value:this.model.a},attrs:e,on:$t(this,"aIn",{input:t=>this.__onNumericChange(t.target.value,"a",100,t),change:S,blur:t=>this.__onNumericChange(t.target.value,"a",100,t,!0)})})]):null]},__getPaletteTab(t){return[t("div",{staticClass:"row items-center q-color-picker__palette-rows",class:!0===this.editable?"q-color-picker__palette-rows--editable":""},this.computedPalette.map(e=>t("div",{key:"palette#"+e,staticClass:"q-color-picker__cube col-auto",style:{backgroundColor:e},on:!0===this.editable?$t(this,"palette#"+e,{click:()=>{this.__onPalettePick(e)}}):null})))]},__onSpectrumChange(t,e,i){const s=this.$refs.spectrum;if(void 0===s)return;const o=s.clientWidth,n=s.clientHeight,r=s.getBoundingClientRect();let a=Math.min(o,Math.max(0,t-r.left));!0===this.$q.lang.rtl&&(a=o-a);const l=Math.min(n,Math.max(0,e-r.top)),h=Math.round(100*a/o),d=Math.round(100*Math.max(0,Math.min(1,-l/n+1))),c=rt({h:this.model.h,s:h,v:d,a:!0===this.hasAlpha?this.model.a:void 0});this.model.s=h,this.model.v=d,this.__update(c,i)},__onHueChange(t,e){const i=rt({h:t=Math.round(t),s:this.model.s,v:this.model.v,a:!0===this.hasAlpha?this.model.a:void 0});this.model.h=t,this.__update(i,e)},__onNumericChange(t,e,i,s,o){if(void 0!==s&&S(s),!/^[0-9]+$/.test(t))return void(!0===o&&this.$forceUpdate());const n=Math.floor(Number(t));if(n<0||n>i)return void(!0===o&&this.$forceUpdate());const r={r:"r"===e?n:this.model.r,g:"g"===e?n:this.model.g,b:"b"===e?n:this.model.b,a:!0===this.hasAlpha?"a"===e?n:this.model.a:void 0};if("a"!==e){const t=at(r);this.model.h=t.h,this.model.s=t.s,this.model.v=t.v}if(this.__update(r,o),void 0!==s&&!0!==o&&void 0!==s.target.selectionEnd){const t=s.target.selectionEnd;this.$nextTick(()=>{s.target.setSelectionRange(t,t)})}},__onEditorChange(t,e){let i;const s=t.target.value;if(S(t),"hex"===this.topView){if(s.length!==(!0===this.hasAlpha?9:7)||!/^#[0-9A-Fa-f]+$/.test(s))return!0;i=nt(s)}else{let t;if(!s.endsWith(")"))return!0;if(!0!==this.hasAlpha&&s.startsWith("rgb(")){if(3!==(t=s.substring(4,s.length-1).split(",").map(t=>parseInt(t,10))).length||!/^rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)$/.test(s))return!0}else{if(!0!==this.hasAlpha||!s.startsWith("rgba("))return!0;{if(4!==(t=s.substring(5,s.length-1).split(",")).length||!/^rgba\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/.test(s))return!0;for(let e=0;e<3;e++){const i=parseInt(t[e],10);if(i<0||i>255)return!0;t[e]=i}const e=parseFloat(t[3]);if(e<0||e>1)return!0;t[3]=e}}if(t[0]<0||t[0]>255||t[1]<0||t[1]>255||t[2]<0||t[2]>255||!0===this.hasAlpha&&(t[3]<0||t[3]>1))return!0;i={r:t[0],g:t[1],b:t[2],a:!0===this.hasAlpha?100*t[3]:void 0}}const o=at(i);if(this.model.h=o.h,this.model.s=o.s,this.model.v=o.v,this.__update(i,e),!0!==e){const e=t.target.selectionEnd;this.$nextTick(()=>{t.target.setSelectionRange(e,e)})}},__onPalettePick(t){const e=this.__parseModel(t),i={r:e.r,g:e.g,b:e.b,a:e.a};void 0===i.a&&(i.a=this.model.a),this.model.h=e.h,this.model.s=e.s,this.model.v=e.v,this.__update(i,!0)},__update(t,e){this.model.hex=st(t),this.model.rgb=ot(t),this.model.r=t.r,this.model.g=t.g,this.model.b=t.b,this.model.a=t.a;const i=this.model[!0===this.isOutputHex?"hex":"rgb"];this.$emit("input",i),!0===e&&this.$emit("change",i)},__updateErrorIcon(t){void 0!==this.$refs.errorIcon&&(this.$refs.errorIcon.$el.style.opacity=t?1:0)},__parseModel(t){const e=void 0!==this.forceAlpha?this.forceAlpha:"auto"===this.formatModel?null:this.formatModel.indexOf("a")>-1;if("string"!=typeof t||0===t.length||!0!==mo.anyColor(t.replace(/ /g,"")))return{h:0,s:0,v:0,r:0,g:0,b:0,a:!0===e?100:void 0,hex:void 0,rgb:void 0};const i=lt(t);return!0===e&&void 0===i.a&&(i.a=100),i.hex=st(i),i.rgb=ot(i),Object.assign(i,at(i))},__spectrumPan(t){t.isFinal?this.__onSpectrumChange(t.position.left,t.position.top,!0):this.__spectrumChange(t)},__spectrumChange(t){this.__onSpectrumChange(t.position.left,t.position.top)},__spectrumClick(t){this.__onSpectrumChange(t.pageX-window.pageXOffset,t.pageY-window.pageYOffset,!0)},__activate(t){this.__onSpectrumChange(t.pageX-window.pageXOffset,t.pageY-window.pageYOffset)}}});const Do={horizontal:{first:[36],prev:[37],next:[39],last:[35]},vertical:{first:[33],prev:[38],next:[40],last:[34]}};function Vo(t){return!0===t.classList.contains("q-key-group-navigation--ignore-key")}function No(t){void 0!==t.firstTarget&&t.firstTarget.remove(),void 0!==t.lastTarget&&t.lastTarget.remove()}function Ho(t){const e=[1,1,"q-key-group-navigation--active"];if("string"==typeof t&&t.length>0){const i=t.split(":");for(let t=0;t<2;t++){const s=parseInt(i[t],10);s&&(e[t]=s)}}return{offsetY:e[0],offsetX:e[1],activeClass:e[2]}}function jo(t,e,i,s){!0===i.vertical?e.keyCodes=Do.vertical:e.keyCodes=!0===i.horizontal?Do.horizontal:Do.all;const o=-1===[!1,0,"0"].indexOf(s);e.enabled!==o&&(!0===e.enabled&&$(e,"main"),!0===o&&q(e,"main",[[t,"keydown","keyDown","capture"],[t,"focusin","focusIn","passiveCapture"],[t,"focusout","focusOut","passiveCapture"],[t,"mousedown","setRestoreEl","passiveCapture"],[t,"touchstart","setRestoreEl","passiveCapture"]]),e.enabled=o)}Do.all=Object.keys(Do.horizontal).reduce((t,e)=>({...t,[e]:Do.horizontal[e].concat(Do.vertical[e])}),{}),Do.horizontal.list=Object.keys(Do.horizontal).reduce((t,e)=>t.concat(Do.horizontal[e]),[9]),Do.horizontal.listH=Do.horizontal.list,Do.vertical.list=Object.keys(Do.vertical).reduce((t,e)=>t.concat(Do.vertical[e]),[9]),Do.vertical.listH=[],Do.all.list=Object.keys(Do.all).reduce((t,e)=>t.concat(Do.all[e]),[9]),Do.all.listH=Do.horizontal.list;var Qo={name:"key-group-navigation",bind(t,{modifiers:e,arg:i,value:s}){const o={keyCodes:Do.all,arg:i,modifiers:{},...Ho(i),focusRestoreEl:null,keyDown(e){const{keyCode:i,shiftKey:s,target:n}=e;if(-1===o.keyCodes.list.indexOf(i)||!0===n.matches(pi))return;if(S(e),9===i)return function(t,e){e.appendChild(t.lastTarget),e.childElementCount>0?e.insertBefore(t.firstTarget,e.childNodes[0]):e.appendChild(t.firstTarget)}(o,t),!0===s?void 0!==o.firstTarget?o.firstTarget.focus():x(e):void 0!==o.lastTarget?o.lastTarget.focus():x(e),void requestAnimationFrame(()=>{No(o)});const r=document.activeElement,a=r?r.closest(".q-key-group-navigation"):null,l=null!==a&&a!==t?Array.prototype.filter.call(a.querySelectorAll(ui),t=>t!==r):[],h=Array.prototype.filter.call(t.querySelectorAll(ui),t=>!0!==l.includes(t)),d=h.length-1;if(!(d<0)){if(o.keyCodes.first.indexOf(i)>-1)yi(h,0,1);else if(o.keyCodes.last.indexOf(i)>-1)yi(h,d,-1);else{const t=null===r?-1:h.indexOf(r.closest(ui)),e=-1===o.keyCodes.listH.indexOf(i)?o.offsetY:o.offsetX;o.keyCodes.prev.indexOf(i)>-1&&yi(h,Math.max(-1,t-e),-1,1!==e),o.keyCodes.next.indexOf(i)>-1&&yi(h,t+e,1,1!==e)}document.activeElement&&(o.focusRestoreEl=document.activeElement),x(e)}},setRestoreEl(t){t.target&&(o.focusRestoreEl=t.target)},setActive(){o.active=!0,t.classList.add(o.activeClass)},setInactive(){o.active=!1,t.classList.remove(o.activeClass)},focusIn(e){if(!0!==H.isKeyboard)return void(!0===o.active&&o.setInactive());const i=_(e),s=void 0!==i.slice(0,i.indexOf(t)).find(Vo);if(!0!==o.active?!0!==s&&o.setActive():!0===s&&o.setInactive(),e.target===o.firstTarget||e.target===o.lastTarget||null!==e.relatedTarget&&(void 0!==e.relatedTarget.classList&&!0===e.relatedTarget.classList.contains("q-key-group-navigation--ignore-focus")||!0===e.relatedTarget._qKeyNavIgnore&&!0===t.contains(e.relatedTarget)))return;const n=t.querySelector(".q-key-group-navigation__refocus"),r=null!==n&&n.closest(".q-key-group-navigation")===t?n:o.focusRestoreEl;if(null===r||!0===t.contains(e.relatedTarget))document.activeElement&&(o.focusRestoreEl=document.activeElement);else{const t=r.closest(ui),e=t&&"function"==typeof t.focus?t:"function"===r.focus?r:null;requestAnimationFrame(()=>{null!==e&&(e._qKeyNavIgnore=!0,e.focus(),requestAnimationFrame(()=>{e&&(e._qKeyNavIgnore=!1)}))})}},focusOut(e){!0!==o.active||null!==e.relatedTarget&&!1!==t.contains(e.relatedTarget)||o.setInactive()}};t.__qkeygrpnav&&(t.__qkeygrpnav_old=t.__qkeygrpnav),t.__qkeygrpnav=o,t.classList.add("q-key-group-navigation"),function(t){const e=document.createElement("span");e.setAttribute("tabindex",-1),e.classList.add("no-outline"),e.classList.add("absolute"),e.classList.add("no-pointer-events"),t.firstTarget=e,t.lastTarget=e.cloneNode()}(o),jo(t,o,e,s)},update(t,{modifiers:e,arg:i,value:s}){const o=t.__qkeygrpnav;void 0!==o&&(o.arg!==i&&Object.assign(o,Ho(i)),jo(t,o,e,s))},unbind(t){const e=t.__qkeygrpnav_old||t.__qkeygrpnav;void 0!==e&&(t.classList.remove("q-key-group-navigation"),No(e),$(e,"main"),!0===e.active&&e.setInactive(),delete t[t.__qkeygrpnav_old?"__qkeygrpnav_old":"__qkeygrpnav"])}};const Wo=[-61,9,38,199,426,686,756,818,1111,1181,1210,1635,2060,2097,2192,2262,2324,2394,2456,3178];function Uo(t,e,i){return"[object Date]"===Object.prototype.toString.call(t)&&(i=t.getDate(),e=t.getMonth()+1,t=t.getFullYear()),function(t){const e=Jo(t).gy;let i,s,o,n=e-621;const r=Xo(n,!1),a=Zo(e,3,r.march);if((o=t-a)>=0){if(o<=185)return s=1+tn(o,31),i=en(o,31)+1,{jy:n,jm:s,jd:i};o-=186}else n-=1,o+=179,1===r.leap&&(o+=1);return s=7+tn(o,30),i=en(o,30)+1,{jy:n,jm:s,jd:i}}(Zo(t,e,i))}function Yo(t,e,i){return Jo(function(t,e,i){const s=Xo(t,!0);return Zo(s.gy,3,s.march)+31*(e-1)-tn(e,7)*(e-7)+i-1}(t,e,i))}function Ko(t){return 0===function(t){const e=Wo.length;let i,s,o,n,r,a=Wo[0];if(t=Wo[e-1])throw new Error("Invalid Jalaali year "+t);for(r=1;r=Wo[i-1])throw new Error("Invalid Jalaali year "+t);for(l=1;lsn.includes(t),default:"gregorian"},landscape:Boolean,color:String,textColor:String,square:Boolean,flat:Boolean,bordered:Boolean,readonly:Boolean,disable:Boolean},computed:{computedMask(){return this.__getMask()},computedLocale(){return this.__getLocale()},editable(){return!0!==this.disable&&!0!==this.readonly},computedColor(){return this.color||"primary"},computedTextColor(){return this.textColor||"white"},computedTabindex(){return!0===this.editable?0:-1},headerClass(){const t=[];return void 0!==this.color&&t.push(`bg-${this.color}`),void 0!==this.textColor&&t.push(`text-${this.textColor}`),t.join(" ")}},methods:{__getLocale(){return void 0!==this.locale?{...this.$q.lang.date,...this.locale}:this.$q.lang.date},__getCurrentDate(t){const e=new Date,i=!0===t?null:0;if("persian"===this.calendar){const t=Uo(e);return{year:t.jy,month:t.jm,day:t.jd}}return{year:e.getFullYear(),month:e.getMonth()+1,day:e.getDate(),hour:i,minute:i,second:i,millisecond:i}},__getCurrentTime(){const t=new Date;return{hour:t.getHours(),minute:t.getMinutes(),second:t.getSeconds(),millisecond:t.getMilliseconds()}},__getDayHash:t=>t.year+"/"+kt(t.month)+"/"+kt(t.day)}};const nn=864e5,rn=36e5,an=6e4,ln=["year","month","date","hours","minutes","seconds","milliseconds"],hn="YYYY-MM-DDTHH:mm:ss.SSSZ",dn=/\[((?:[^\]\\]|\\]|\\)*)\]|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]/g,cn=/(\[[^\]]*\])|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]|([.*+:?^,\s${}()|\\]+)/g,un=new Map;function pn(t,e){return void 0!==t?t:void 0!==e?e.date:J.date}function mn(t,e=""){const i=t>0?"-":"+",s=Math.abs(t),o=s%60;return i+kt(Math.floor(s/60))+e+kt(o)}function gn(t){const e={...t};return void 0!==t.years&&(e.year=t.years,delete e.years),void 0!==t.months&&(e.month=t.months,delete e.months),void 0!==t.days&&(e.date=t.days,delete e.days),void 0!==t.day&&(e.date=t.day,delete e.day),void 0!==t.hour&&(e.hours=t.hour,delete e.hour),void 0!==t.minute&&(e.minutes=t.minute,delete e.minute),void 0!==t.second&&(e.seconds=t.second,delete e.second),void 0!==t.millisecond&&(e.milliseconds=t.millisecond,delete e.millisecond),e}const fn=new Date;function _n(t,e,i){return"persian"===i?Go(t,e):(fn.setFullYear(t),fn.setMonth(e),fn.setDate(0),fn.getDate())}function vn(t,e,i){const s=void 0!==e.year?e.year:t[`get${i}FullYear`](),o=void 0!==e.month?e.month-1:t[`get${i}Month`](),n=_n(s,o+1),r=Math.max(1,Math.min(n,void 0!==e.date?e.date:t[`get${i}Date`]()));return t[`set${i}Date`](1),t[`set${i}Month`](2),t[`set${i}FullYear`](s),t[`set${i}Month`](o),t[`set${i}Date`](r),delete e.year,delete e.month,delete e.date,t}function bn(t,e,i){const s=gn(e),o=new Date(t),n=void 0!==s.year||void 0!==s.month||void 0!==s.date?function(t,e,i){let s=t.getFullYear(),o=t.getMonth()+1;return void 0!==e.year&&(s+=i*e.year,delete e.year),void 0!==e.month&&(o+=i*e.month,delete e.month),vn(t,{year:s,month:o},""),void 0!==e.date&&(t.setDate(t.getDate()+i*e.date),delete e.date),t}(o,s,i):o;for(const t in s){const e=xt(t);n[`set${e}`](n[`get${e}`]()+i*s[t])}return n}function yn(...t){return t.length>1&&t[0]>=0&&t[0]<=99?wn(ln.reduce((e,i,s)=>(void 0!==t[s]&&(e[i]=t[s]),e),{})):new Date(...t)}function Sn(t,e,i){const s=gn(e),o=!0===i?"UTC":"",n=null===t||void 0===t?new Date:new Date(t),r=void 0!==s.year||void 0!==s.month||void 0!==s.date?vn(n,s,o):n;for(const t in s){r[`set${o}${t.charAt(0).toUpperCase()+t.slice(1)}`](s[t])}return r}function xn(t,e,i,s,o){const n={year:null,month:null,day:null,hour:null,minute:null,second:null,millisecond:null,timezoneOffset:null,dateHash:null,timeHash:null};if(void 0!==o&&Object.assign(n,o),void 0===t||null===t||""===t||"string"!=typeof t)return n;void 0===e&&(e=hn);const r=pn(i,et.props),a=r.months,l=r.monthsShort,{regex:h,map:d}=function(t,e){const i="("+e.days.join("|")+"|)",s=t+i;if(!0===un.has(s))return un.get(s);const o="("+e.daysShort.join("|")+"|)",n="("+e.months.join("|")+"|)",r="("+e.monthsShort.join("|")+"|)",a={};let l=0;const h=t.replace(cn,t=>{switch(l++,t){case"YY":return a.YY=l,"(-?\\d{1,2}|)";case"YYYY":return a.YYYY=l,"(-?\\d{1,4}|)";case"M":return a.M=l,"(\\d{1,2}|)";case"MM":return a.M=l,"(\\d{2}|)";case"MMM":return a.MMM=l,r;case"MMMM":return a.MMMM=l,n;case"D":return a.D=l,"(\\d{1,2}|)";case"Do":return a.D=l,"(\\d{1,2}(?:st|nd|rd|th)|)";case"DD":return a.D=l,"(\\d{2}|)";case"H":return a.H=l,"(\\d{1,2}|)";case"HH":return a.H=l,"(\\d{2}|)";case"h":return a.h=l,"(\\d{1,2}|)";case"hh":return a.h=l,"(\\d{2}|)";case"m":return a.m=l,"(\\d{1,2}|)";case"mm":return a.m=l,"(\\d{2}|)";case"s":return a.s=l,"(\\d{1,2}|)";case"ss":return a.s=l,"(\\d{2}|)";case"S":return a.S=l,"(\\d{1}|)";case"SS":return a.S=l,"(\\d{2}|)";case"SSS":return a.S=l,"(\\d{3}|)";case"A":return a.A=l,"(AM|PM|)";case"a":return a.a=l,"(am|pm|)";case"aa":return a.aa=l,"(a\\.m\\.|p\\.m\\.|)";case"ddd":return o;case"dddd":return i;case"Q":case"d":case"E":return"(\\d{1}|)";case"Qo":return"(1st|2nd|3rd|4th|)";case"DDD":case"DDDD":return"(\\d{1,3}|)";case"w":return"(\\d{1,2}|)";case"ww":return"(\\d{2}|)";case"Z":return a.Z=l,"(Z|[+-]\\d{2}:\\d{2}|)";case"ZZ":return a.ZZ=l,"(Z|[+-]\\d{2}\\d{2}|)";case"X":return a.X=l,"(-?\\d+|)";case"x":return a.x=l,"(-?\\d{4,}|)";default:return l--,"["===t[0]&&(t=t.substring(1,t.length-1)),t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}),d={map:a,regex:new RegExp("^"+h)};return un.set(s,d),d}(e,r),c=t.match(h);if(null===c)return n;const u={...d};Object.keys(u).forEach(t=>{""===c[u[t]]&&(u[t]=void 0)});let p="";if(void 0!==u.X||void 0!==u.x){const t=parseInt(c[void 0!==u.X?u.X:u.x],10);if(!0===isNaN(t)||t<0)return n;const e=new Date(t*(void 0!==u.X?1e3:1));n.year=e.getFullYear(),n.month=e.getMonth()+1,n.day=e.getDate(),n.hour=e.getHours(),n.minute=e.getMinutes(),n.second=e.getSeconds(),n.millisecond=e.getMilliseconds()}else{if(void 0!==u.YYYY)n.year=parseInt(c[u.YYYY],10);else if(void 0!==u.YY){const t=parseInt(c[u.YY],10);n.year=t<0?t:2e3+t}if(void 0!==u.M){if(n.month=parseInt(c[u.M],10),n.month<1||n.month>12)return n}else void 0!==u.MMM?n.month=l.indexOf(c[u.MMM])+1:void 0!==u.MMMM&&(n.month=a.indexOf(c[u.MMMM])+1);if(void 0!==u.D){if(n.day=parseInt(c[u.D],10),null===n.year||null===n.month||n.day<1)return n;if(n.day>_n(n.year,n.month,s))return n}void 0!==u.H?n.hour=parseInt(c[u.H],10)%24:void 0!==u.h&&(n.hour=parseInt(c[u.h],10)%12,(u.A&&"PM"===c[u.A]||u.a&&"pm"===c[u.a]||u.aa&&"p.m."===c[u.aa])&&(n.hour+=12),n.hour=n.hour%24),void 0!==u.m&&(n.minute=parseInt(c[u.m],10)%60),void 0!==u.s&&(n.second=parseInt(c[u.s],10)%60),void 0!==u.S&&(n.millisecond=parseInt(c[u.S],10)*10**(3-c[u.S].length)),void 0===u.Z&&void 0===u.ZZ||(p=void 0!==u.Z?c[u.Z].replace(":",""):c[u.ZZ],n.timezoneOffset=("+"===p[0]?-1:1)*(60*p.slice(1,3)+1*p.slice(3,5)))}return n.dateHash=n.year+"/"+kt(n.month)+"/"+kt(n.day),n.timeHash=kt(n.hour)+":"+kt(n.minute)+":"+kt(n.second)+p,n}function wn(t,e){return Sn(null,t,e)}function Cn(t){const e=yn(t.getFullYear(),t.getMonth(),t.getDate());e.setDate(e.getDate()-(e.getDay()+6)%7+3);const i=yn(e.getFullYear(),0,4);i.setDate(i.getDate()-(i.getDay()+6)%7+3);const s=e.getTimezoneOffset()-i.getTimezoneOffset();e.setHours(e.getHours()-s);const o=(e-i)/(7*nn);return 1+Math.floor(o)}function kn(t,e){const i=new Date(t);return!0===e?function(t){return 1e4*t.getFullYear()+100*t.getMonth()+t.getDate()}(i):i.getTime()}function qn(t,e,i){const s=new Date(t),o=`set${!0===i?"UTC":""}`;switch(e){case"year":case"years":s[`${o}Month`](0);case"month":case"months":s[`${o}Date`](1);case"day":case"days":case"date":s[`${o}Hours`](0);case"hour":case"hours":s[`${o}Minutes`](0);case"minute":case"minutes":s[`${o}Seconds`](0);case"second":case"seconds":s[`${o}Milliseconds`](0)}return s}function $n(t,e,i){return Math.floor((t.getTime()-t.getTimezoneOffset()*an-(e.getTime()-e.getTimezoneOffset()*an))/i)}function Tn(t,e,i="days"){const s=new Date(t),o=new Date(e);switch(i){case"years":case"year":return s.getFullYear()-o.getFullYear();case"months":case"month":return 12*(s.getFullYear()-o.getFullYear())+s.getMonth()-o.getMonth();case"days":case"day":case"date":return $n(qn(s,"day"),qn(o,"day"),nn);case"hours":case"hour":return $n(qn(s,"hour"),qn(o,"hour"),rn);case"minutes":case"minute":return $n(qn(s,"minute"),qn(o,"minute"),an);case"seconds":case"second":return $n(qn(s,"second"),qn(o,"second"),1e3)}}function Mn(t){return Tn(t,qn(t,"year"),"days")+1}function Ln(t){return yn(t.getFullYear(),t.getMonth()+1,0).getDate()}function En(t){if(t>=11&&t<=13)return`${t}th`;switch(t%10){case 1:return`${t}st`;case 2:return`${t}nd`;case 3:return`${t}rd`}return`${t}th`}const An={YY(t,e,i){const s=this.YYYY(t,e,i)%100;return s>=0?kt(s):"-"+kt(Math.abs(s))},YYYY:(t,e,i)=>void 0!==i&&null!==i?i:t.getFullYear(),M:t=>t.getMonth()+1,MM:t=>kt(t.getMonth()+1),MMM:(t,e)=>e.monthsShort[t.getMonth()],MMMM:(t,e)=>e.months[t.getMonth()],Q:t=>Math.ceil((t.getMonth()+1)/3),Qo(t){return En(this.Q(t))},D:t=>t.getDate(),Do:t=>En(t.getDate()),DD:t=>kt(t.getDate()),DDD:t=>Mn(t),DDDD:t=>kt(Mn(t),3),d:t=>t.getDay(),dd(t,e){return this.dddd(t,e).slice(0,2)},ddd:(t,e)=>e.daysShort[t.getDay()],dddd:(t,e)=>e.days[t.getDay()],E:t=>t.getDay()||7,w:t=>Cn(t),ww:t=>kt(Cn(t)),H:t=>t.getHours(),HH:t=>kt(t.getHours()),h(t){const e=t.getHours();return 0===e?12:e>12?e%12:e},hh(t){return kt(this.h(t))},m:t=>t.getMinutes(),mm:t=>kt(t.getMinutes()),s:t=>t.getSeconds(),ss:t=>kt(t.getSeconds()),S:t=>Math.floor(t.getMilliseconds()/100),SS:t=>kt(Math.floor(t.getMilliseconds()/10)),SSS:t=>kt(t.getMilliseconds(),3),A(t){return this.H(t)<12?"AM":"PM"},a(t){return this.H(t)<12?"am":"pm"},aa(t){return this.H(t)<12?"a.m.":"p.m."},Z:(t,e,i,s)=>mn(void 0===s||null===s?t.getTimezoneOffset():s,":"),ZZ:(t,e,i,s)=>mn(void 0===s||null===s?t.getTimezoneOffset():s),X:t=>Math.floor(t.getTime()/1e3),x:t=>t.getTime()};function Bn(t,e,i,s,o){if(0!==t&&!t||t===1/0||t===-1/0)return;const n=new Date(t);if(isNaN(n))return;void 0===e&&(e=hn);const r=pn(i,et.props);return e.replace(dn,(t,e)=>t in An?An[t](n,r,s,o):void 0===e?t:e.split("\\]").join("]"))}var Pn={isValid:function(t){return"number"==typeof t||!1===isNaN(Date.parse(t))},extractDate:function(t,e,i){const s=xn(t,e,i),o=yn(s.year,null===s.month?null:s.month-1,null===s.day?1:s.day,s.hour,s.minute,s.second,s.millisecond),n=o.getTimezoneOffset();return null===s.timezoneOffset||s.timezoneOffset===n?o:bn(o,{minutes:s.timezoneOffset-n},1)},buildDate:wn,getDayOfWeek:function(t,e){const i=pn(e,et.props);return 1+(7+new Date(t).getDay()-(i.firstDayOfWeek||0))%7},getWeekOfYear:Cn,isBetweenDates:function(t,e,i,s={}){const o=kn(e,s.onlyDate),n=kn(i,s.onlyDate),r=kn(t,s.onlyDate);return(r>o||!0===s.inclusiveFrom&&r===o)&&(r{e=Math.max(e,new Date(t))}),e},getMinDate:function(t){let e=new Date(t);return Array.prototype.slice.call(arguments,1).forEach(t=>{e=Math.min(e,new Date(t))}),e},getDateDiff:Tn,getDayOfYear:Mn,inferDateFormat:function(t){return!0===As(t)?"date":"number"==typeof t?"number":"string"},getDateBetween:function(t,e,i){const s=new Date(t);if(e){const t=new Date(e);if(st)return t}return s},isSameDate:function(t,e,i){const s=new Date(t),o=new Date(e);if(void 0===i)return s.getTime()===o.getTime();switch(i){case"second":case"seconds":if(s.getSeconds()!==o.getSeconds())return!1;case"minute":case"minutes":if(s.getMinutes()!==o.getMinutes())return!1;case"hour":case"hours":if(s.getHours()!==o.getHours())return!1;case"day":case"days":case"date":if(s.getDate()!==o.getDate())return!1;case"month":case"months":if(s.getMonth()!==o.getMonth())return!1;case"year":case"years":if(s.getFullYear()!==o.getFullYear())return!1;break;default:throw new Error(`date isSameDate unknown unit ${i}`)}return!0},daysInMonth:Ln,formatDate:Bn,clone:function(t){return!0===As(t)?new Date(t.getTime()):t}};const zn=["Calendar","Years","Months"],In=t=>zn.includes(t),On=t=>/^-?[\d]+\/[0-1]\d$/.test(t),Rn=t=>{if("string"!=typeof t)return NaN;const e=t.split("/");return 1e4*parseInt(e[0],10)+parseInt(e.slice(1).join(""),10)};function Fn(t){return null!==t.dateHash&&null!==t.day&&null!==t.month&&null!==t.year}var Dn=e.default.extend({name:"QDate",mixins:[on],directives:{KeyGroupNavigation:Qo},props:{multiple:Boolean,range:Boolean,dayAsRange:Boolean,title:String,subtitle:String,mask:{default:"YYYY/MM/DD"},defaultYearMonth:{type:String,validator:On},yearsInMonthView:Boolean,events:[Array,Function],eventColor:[String,Function],emitImmediately:Boolean,options:[Array,Function],modelNavigation:{type:[String,Boolean],default:"from",validator:t=>["from","to",!1].indexOf(t)>-1},navigationMinYearMonth:{type:String,validator:On},navigationMaxYearMonth:{type:String,validator:On},noUnset:Boolean,firstDayOfWeek:[String,Number],todayBtn:Boolean,minimal:Boolean,defaultView:{type:String,default:"Calendar",validator:In}},data(){const t=this.__getMask(),e=this.__getLocale(),i=this.__getViewModel(t,e),s=i.year,o=!0===this.$q.lang.rtl?"right":"left";return{view:this.defaultView,monthDirection:o,yearDirection:o,startYear:s-s%20-(s<0?20:0),editRange:void 0,innerMask:t,innerLocale:e,viewModel:i}},watch:{value(t){if(this.lastEmitValue===t)this.lastEmitValue=0;else{const{year:t,month:e}=this.__getViewModel(this.innerMask,this.innerLocale);this.__updateViewModel(t,e)}},view(){this.$nextTick(()=>{void 0!==this.$refs.viewTarget&&this.$refs.viewTarget.$el.focus()})},"viewModel.year"(t){this.$emit("navigation",{year:t,month:this.viewModel.month})},"viewModel.month"(t){this.$emit("navigation",{year:this.viewModel.year,month:t})},computedMask(t){this.__updateValue(t,this.innerLocale,"mask"),this.innerMask=t},computedLocale(t){this.__updateValue(this.innerMask,t,"locale"),this.innerLocale=t}},computed:{classes(){const t=!0===this.landscape?"landscape":"portrait";return`q-date q-date--${t} q-date--${t}-${!0===this.minimal?"minimal":"standard"}`+` q-date--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.bordered?" q-date--bordered":"")+(!0===this.square?" q-date--square no-border-radius":"")+(!0===this.flat?" q-date--flat no-shadow":"")+(!0===this.disable?" disabled":!0===this.readonly?" q-date--readonly":"")},isImmediate(){return!0===this.emitImmediately&&!0!==this.multiple&&!0!==this.range},normalizedModel(){return!0===Array.isArray(this.value)?this.value:null!==this.value&&void 0!==this.value?[this.value]:[]},daysModel(){return this.normalizedModel.filter(t=>"string"==typeof t).map(t=>this.__decodeString(t,this.innerMask,this.innerLocale)).filter(Fn)},rangeModel(){const t=t=>this.__decodeString(t,this.innerMask,this.innerLocale);return this.normalizedModel.filter(t=>!0===Es(t)&&void 0!==t.from&&void 0!==t.to).map(e=>{const i=t(e.from),s=t(e.to);return Rn(i.dateHash)<=Rn(s.dateHash)?{from:i,to:s}:{from:s,to:i}}).filter(t=>!0===Fn(t.from)&&!0===Fn(t.to))},getNativeDateFn(){return"persian"!==this.calendar?t=>{const e=yn(t.year,t.month-1,t.day);return e.setFullYear(t.year),e}:t=>{const e=Yo(t.year,t.month,t.day),i=yn(e.gy,e.gm-1,e.gd);return i.setFullYear(t.year),i}},encodeObjectFn(){return"persian"===this.calendar?this.__getDayHash:(t,e,i)=>Bn(yn(t.year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond),void 0===e?this.innerMask:e,void 0===i?this.innerLocale:i,t.year,t.timezoneOffset)},daysInModel(){return this.daysModel.length+this.rangeModel.reduce((t,e)=>t+1+Tn(this.getNativeDateFn(e.to),this.getNativeDateFn(e.from)),0)},headerTitle(){if(void 0!==this.title&&null!==this.title&&this.title.length>0)return this.title;if(void 0!==this.editRange){const t=this.editRange.init,e=this.getNativeDateFn(t);return this.innerLocale.daysShort[e.getDay()]+", "+this.innerLocale.monthsShort[t.month-1]+" "+t.day+" — ?"}if(0===this.daysInModel)return" — ";if(this.daysInModel>1)return`${this.daysInModel} ${this.innerLocale.pluralDay}`;const t=this.minSelectedModel,e=this.getNativeDateFn(t);return!0===isNaN(e.valueOf())?" — ":void 0!==this.innerLocale.headerTitle?this.innerLocale.headerTitle(e,t):this.innerLocale.daysShort[e.getDay()]+", "+this.innerLocale.monthsShort[t.month-1]+" "+t.day},headerSubtitle(){if(void 0!==this.subtitle&&null!==this.subtitle&&this.subtitle.length>0)return this.subtitle;if(0===this.daysInModel)return" — ";if(this.daysInModel>1){const t=this.minSelectedModel,e=this.maxSelectedModel,i=this.innerLocale.monthsShort;return i[t.month-1]+(t.year!==e.year?" "+t.year+" — "+i[e.month-1]+" ":t.month!==e.month?" — "+i[e.month-1]:"")+" "+e.year}return this.minSelectedModel.year},minSelectedModel(){return this.daysModel.concat(this.rangeModel.map(t=>t.from)).sort((t,e)=>t.year-e.year||t.month-e.month)[0]},maxSelectedModel(){return this.daysModel.concat(this.rangeModel.map(t=>t.to)).sort((t,e)=>e.year-t.year||e.month-t.month)[0]},dateArrow(){const t=[this.$q.iconSet.datetime.arrowLeft,this.$q.iconSet.datetime.arrowRight];return!0===this.$q.lang.rtl?t.reverse():t},computedFirstDayOfWeek(){return void 0!==this.firstDayOfWeek?Number(this.firstDayOfWeek):this.innerLocale.firstDayOfWeek},daysOfWeek(){const t=this.innerLocale.daysShort,e=this.computedFirstDayOfWeek;return e>0?t.slice(e,7).concat(t.slice(0,e)):t},daysInMonth(){const{year:t,month:e}=this.viewModel;return"persian"!==this.calendar?{prev:yn(t,e-1,0).getDate(),cur:yn(t,e,0).getDate(),next:yn(t,e+1,0).getDate()}:{prev:Go(1===e?t-1:t,1===e?12:e-1),cur:Go(t,e),next:Go(12===e?t+1:t,12===e?1:e+1)}},today(){return this.__getCurrentDate()},evtColor(){return"function"==typeof this.eventColor?this.eventColor:()=>this.eventColor},minNav(){if(void 0!==this.navigationMinYearMonth){const t=this.navigationMinYearMonth.split("/");return{year:parseInt(t[0],10),month:parseInt(t[1],10)}}},maxNav(){if(void 0!==this.navigationMaxYearMonth){const t=this.navigationMaxYearMonth.split("/");return{year:parseInt(t[0],10),month:parseInt(t[1],10)}}},navBoundaries(){const t={month:{prev:!0,next:!0},year:{prev:!0,next:!0}};return void 0!==this.minNav&&this.minNav.year>=this.viewModel.year&&(t.year.prev=!1,this.minNav.year===this.viewModel.year&&this.minNav.month>=this.viewModel.month&&(t.month.prev=!1)),void 0!==this.maxNav&&this.maxNav.year<=this.viewModel.year&&(t.year.next=!1,this.maxNav.year===this.viewModel.year&&this.maxNav.month<=this.viewModel.month&&(t.month.next=!1)),t},daysMap(){const t={};return this.daysModel.forEach(e=>{const i=this.__getMonthHash(e);void 0===t[i]&&(t[i]=[]),t[i].push(e.day)}),t},rangeMap(){const t={};return this.rangeModel.forEach(e=>{const i=this.__getMonthHash(e.from),s=this.__getMonthHash(e.to),o=Rn(s);if(void 0===t[i]&&(t[i]=[]),t[i].push({from:e.from.day,to:i===s?e.to.day:void 0,range:e}),Rn(i)12&&(r.year++,r.month=1),a=this.__getMonthHash(r)}}),t},rangeViewMap(){if(void 0===this.editRange)return{};const t={},{init:e,initHash:i,final:s,finalHash:o}=this.editRange,[n,r]=Rn(i)<=Rn(o)?[e,s]:[s,e],a=Rn(this.__getMonthHash(n)),l=Rn(this.__getMonthHash(r));return["prev","cur","next"].forEach(e=>{const i=Rn(this.viewMonthHash[e]);if(a>i||lthis.options.includes(t);for(let i=1;i<=this.daysInMonth.cur;i++){const s=this.viewMonthHash.cur+"/"+kt(i);t[i]=e(s)}return t},eventDaysMap(){const t={};if(void 0===this.events)for(let e=1;e<=this.daysInMonth.cur;e++)t[e]=!1;else{const e="function"==typeof this.events?this.events:t=>this.events.includes(t);for(let i=1;i<=this.daysInMonth.cur;i++){const s=this.viewMonthHash.cur+"/"+kt(i);t[i]=!0===e(s)&&this.evtColor(s)}}return t},startFillDays(){let t;const{year:e,month:i}=this.viewModel;if("persian"!==this.calendar)t=yn(e,i-1,1);else{const s=Yo(e,i,1);t=yn(s.gy,s.gm-1,s.gd)}const s=t.getDay()-this.computedFirstDayOfWeek-1;return{days:s<0?s+7:s,endDay:this.daysInMonth.prev}},days(){const t=[],{days:e,endDay:i}=this.startFillDays;if(e<6){for(let s=i-e;s<=i;s++)t.push({i:s,day:this.viewMonthHash.prev+"/"+kt(s),fill:!0});this.__fillDaysMeta(t,this.viewMonthHash.prev,i,-i+e+1,i-e,i)}const s=t.length;for(let e=1;e<=this.daysInMonth.cur;e++){const i={i:e,day:this.viewMonthHash.cur+"/"+kt(e),event:this.eventDaysMap[e],classes:[]};!0===this.selectionDaysMap[e]&&(i.in=!0,i.flat=!0),t.push(i)}this.__fillDaysMeta(t,this.viewMonthHash.cur,this.daysInMonth.cur,s,1,this.daysInMonth.cur),this.viewModel.year===this.today.year&&this.viewModel.month===this.today.month&&(t[s+this.today.day-1].today=!0);const o=t.length%7;if(o>0){const e=7-o;for(let i=1;i<=e;i++)t.push({i:i,day:this.viewMonthHash.next+"/"+kt(i),fill:!0});this.__fillDaysMeta(t,this.viewMonthHash.next,this.daysInMonth.next,s+this.daysInMonth.cur,1,e)}return t.forEach(t=>{let e="q-date__calendar-item ";e+=!0===t.fill?"q-date__calendar-item--fill":`q-date__calendar-item--${!0===t.in?"in":"out"}`,void 0===t.range&&!0!==t.editRange||(e+=` text-${t.color}`),void 0===t.range||!0===t.rangeTo&&!0===t.rangeFrom||(e+=` q-date__range${!0===t.rangeFrom?"-from":!0===t.rangeTo?"-to":""}`),!0===t.editRange&&(e+=` q-date__edit-range${!0===t.editRangeFrom?"-from":""}${!0===t.editRangeTo?"-to":""}`),t.classes=e}),t},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0}},methods:{setToday(){this.__toggleDate(this.today,this.__getMonthHash(this.today)),this.setCalendarTo(this.today.year,this.today.month)},setView(t){!0===In(t)&&(this.view=t)},offsetCalendar(t,e){["month","year"].includes(t)&&this[`__goTo${"month"===t?"Month":"Year"}`](!0===e?-1:1)},setCalendarTo(t,e){this.view="Calendar",this.__updateViewModel(t,e)},setEditingRange(t,e,i){if(void 0===i&&(i=this.modelNavigation),!1===this.range||!t)return void(this.editRange=void 0);const s=Object.assign({...this.viewModel},t),o=void 0!==e?Object.assign({...this.viewModel},e):s;this.editRange={init:s,initHash:this.__getDayHash(s),final:o,finalHash:this.__getDayHash(o)},["from","to"].indexOf(i)>-1&&this.$nextTick(()=>{this.setCalendarTo("from"===i?s.year:o.year,"from"===i?s.month:o.month)})},__getMask(){return"persian"===this.calendar?"YYYY/MM/DD":this.mask},__decodeString(t,e,i){return xn(t,e,i,this.calendar,{hour:0,minute:0,second:0,millisecond:0})},__getViewModel(t,e){if(!1===this.modelNavigation)return void 0===this.viewModel?this.__getDefaultViewModel():this.viewModel;const i=!0===Array.isArray(this.value)?this.value:this.value?[this.value]:[];if(0===i.length)return this.__getDefaultViewModel();const s=i["from"===this.modelNavigation?0:i.length-1],o=this.__decodeString(void 0!==s.from?s.from:s,t,e);return null===o.dateHash?this.__getDefaultViewModel():o},__getDefaultViewModel(){let t,e;if(void 0!==this.defaultYearMonth){const i=this.defaultYearMonth.split("/");t=parseInt(i[0],10),e=parseInt(i[1],10)}else{const i=void 0!==this.today?this.today:this.__getCurrentDate();t=i.year,e=i.month}return{year:t,month:e,day:1,hour:0,minute:0,second:0,millisecond:0,dateHash:t+"/"+kt(e)+"/01"}},__getHeader(t){if(!0!==this.minimal)return t("div",{staticClass:"q-date__header",class:this.headerClass},[t("div",{staticClass:"relative-position"},[t("transition",{props:{name:"q-transition--fade"}},[t("div",{key:"h-yr-"+this.headerSubtitle,staticClass:"q-date__header-subtitle q-date__header-link",class:"Years"===this.view?"q-date__header-link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:$t(this,"vY",{click:()=>{this.view="Years"},keyup:t=>{13===t.keyCode&&(this.view="Years")}})},[this.headerSubtitle])])]),t("div",{staticClass:"q-date__header-title relative-position flex no-wrap"},[t("div",{staticClass:"relative-position col"},[t("transition",{props:{name:"q-transition--fade"}},[t("div",{key:"h-sub"+this.headerTitle,staticClass:"q-date__header-title-label q-date__header-link",class:"Calendar"===this.view?"q-date__header-link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:$t(this,"vC",{click:()=>{this.view="Calendar"},keyup:t=>{13===t.keyCode&&(this.view="Calendar")}})},[this.headerTitle])])]),!0===this.todayBtn?t(Ze,{key:"today",staticClass:"q-date__header-today self-start",props:{icon:this.$q.iconSet.datetime.today,flat:!0,size:"sm",round:!0,tabindex:this.computedTabindex},on:$t(this,"today",{click:this.setToday})}):null])])},__getNavigation(t,{label:e,view:i,key:s,dir:o,goTo:n,boundaries:r,cls:a}){return[t("div",{staticClass:"row items-center q-date__arrow"},[t(Ze,{key:"go-#"+i,props:{round:!0,dense:!0,size:"sm",flat:!0,icon:this.dateArrow[0],tabindex:this.computedTabindex,disable:!1===r.prev},on:$t(this,"go-#"+i,{click(){n(-1)}})})]),t("div",{staticClass:"relative-position overflow-hidden flex flex-center"+a},[t("transition",{props:{name:"q-transition--jump-"+o}},[t("div",{key:s},[t(Ze,{key:"view#"+i,props:{flat:!0,dense:!0,noCaps:!0,label:e,tabindex:this.computedTabindex},on:$t(this,"view#"+i,{click:()=>{this.view=i}})})])])]),t("div",{staticClass:"row items-center q-date__arrow"},[t(Ze,{key:"go+#"+i,props:{round:!0,dense:!0,size:"sm",flat:!0,icon:this.dateArrow[1],tabindex:this.computedTabindex,disable:!1===r.next},on:$t(this,"go+#"+i,{click(){n(1)}})})])]},__getCalendarView(t){const e=void 0!==this.$scopedSlots.day?this.$scopedSlots.day:e=>!1!==e.event?[t("div",{staticClass:"q-date__event bg-"+e.event})]:null,i=void 0!==this.$scopedSlots.day?this.$scopedSlots.day:e=>t("div",[e.i]),s=this.days.find(t=>!0===t.unelevated),o=void 0===s?this.days.find(t=>!0===t.today):s,n=void 0===o?1:o.i,r="persian"===this.calendar?"dayP#":"day#";return[t("div",{key:"calendar-view",staticClass:"q-date__view q-date__calendar"},[t("div",{staticClass:"q-date__navigation row items-center no-wrap"},this.__getNavigation(t,{label:this.innerLocale.months[this.viewModel.month-1],view:"Months",key:this.viewModel.month,dir:this.monthDirection,goTo:this.__goToMonth,boundaries:this.navBoundaries.month,cls:" col"}).concat(this.__getNavigation(t,{label:this.viewModel.year,view:"Years",key:this.viewModel.year,dir:this.yearDirection,goTo:this.__goToYear,boundaries:this.navBoundaries.year,cls:""}))),t("div",{staticClass:"q-date__calendar-weekdays row items-center no-wrap"},this.daysOfWeek.map(e=>t("div",{staticClass:"q-date__calendar-item"},[t("div",[e])]))),t("div",{key:"kNavC",staticClass:"q-date__calendar-days-container relative-position overflow-hidden",directives:$t(this,"kNavC",[{name:"key-group-navigation",arg:"7"}])},[t("transition",{props:{name:"q-transition--slide-"+this.monthDirection}},[t("div",{key:this.viewMonthHash.cur,staticClass:"q-date__calendar-days fit"},this.days.map(s=>t("div",{staticClass:s.classes},[!0===s.in?t(Ze,{key:r+s.i,staticClass:!0===s.today?"q-date__today":null,ref:n===s.i?"viewTarget":void 0,props:{dense:!0,flat:s.flat,unelevated:s.unelevated,color:s.color,textColor:s.textColor,label:s.i,tabindex:this.computedTabindex},on:$t(this,r+s.i,{click:()=>{this.__onDayClick(s.i)},focusin:()=>{this.__onDayMouseover(s.i)},mouseenter:()=>{this.__onDayMouseover(s.i)}})},e(s)):i(s)])))])])])]},__getMonthsView(t){const e=this.viewModel.year===this.today.year,i=t=>void 0!==this.minNav&&this.viewModel.year===this.minNav.year&&this.minNav.month>t||void 0!==this.maxNav&&this.viewModel.year===this.maxNav.year&&this.maxNav.montht("div",{staticClass:"q-date__months-item flex flex-center"},[t(Ze,{key:"month#"+r,staticClass:!0===e&&this.today.month===r+1?"q-date__today":null,ref:this.viewModel.month===r+1?"viewTarget":void 0,props:Object.assign({label:n,tabindex:this.computedTabindex,disable:i(r+1)},this.viewModel.month===r+1?s:o),on:$t(this,"month#"+r,{click:()=>{this.__setMonth(r+1)}})})]));return!0===this.yearsInMonthView&&n.unshift(t("div",{staticClass:"row no-wrap full-width"},[this.__getNavigation(t,{label:this.viewModel.year,view:"Years",key:this.viewModel.year,dir:this.yearDirection,goTo:this.__goToYear,boundaries:this.navBoundaries.year,cls:" col"})])),t("div",{key:"kNavYM",staticClass:"q-date__view q-date__months flex flex-center",directives:$t(this,"kNavYM",[{name:"key-group-navigation",arg:"3"}])},n)},__getYearsView(t){const e=this.startYear,i=e+20,s=[],o=this.viewModel.year>=e&&this.viewModel.year<=i?this.viewModel.year:this.today.year>=e&&this.today.year<=i?this.today.year:e,n=t=>void 0!==this.minNav&&this.minNav.year>t||void 0!==this.maxNav&&this.maxNav.year{this.__setYear(r)}})})]))}return t("div",{staticClass:"q-date__view q-date__years flex flex-center"},[t("div",{staticClass:"col-auto"},[t(Ze,{key:"y-",props:{round:!0,dense:!0,flat:!0,icon:this.dateArrow[0],tabindex:this.computedTabindex,disable:n(e)},on:$t(this,"y-",{click:()=>{this.startYear-=20}})})]),t("div",{key:"kNavYM",staticClass:"q-date__years-content col self-stretch row items-center",directives:$t(this,"kNavYM",[{name:"key-group-navigation",arg:"3"}])},s),t("div",{staticClass:"col-auto"},[t(Ze,{key:"y+",props:{round:!0,dense:!0,flat:!0,icon:this.dateArrow[1],tabindex:this.computedTabindex,disable:n(i)},on:$t(this,"y+",{click:()=>{this.startYear+=20}})})])])},__fillDaysMeta(t,e,i,s,o,n){if(void 0!==this.daysMap[e]&&this.daysMap[e].filter(t=>t>=o&&t<=n).forEach(e=>{const i=s+e-1;Object.assign(t[i],{selected:!0,unelevated:!0,flat:!1,color:this.computedColor,textColor:this.computedTextColor})}),void 0!==this.rangeMap[e]&&this.rangeMap[e].forEach(e=>{const r=s+Math.max(o,void 0===e.from?1:e.from)-1,a=s+Math.min(n,void 0===e.to?i:e.to)-1;for(let i=r;i<=a;i++)Object.assign(t[i],{range:e.range,unelevated:!0,color:this.computedColor,textColor:this.computedTextColor});e.from>=o&&e.from<=n&&Object.assign(t[r],{rangeFrom:!0,flat:!1}),e.to>=o&&e.to<=n&&Object.assign(t[a],{rangeTo:!0,flat:!1})}),void 0!==this.rangeViewMap[e]){const i=s+Math.max(o,this.rangeViewMap[e].from)-1,r=s+Math.min(n,this.rangeViewMap[e].to)-1;for(let e=i;e<=r;e++)t[e].color=this.computedColor,t[e].editRange=!0;!0===this.rangeViewMap[e].includeFrom&&this.rangeViewMap[e].from>=o&&this.rangeViewMap[e].from<=n&&(t[i].editRangeFrom=!0),!0===this.rangeViewMap[e].includeTo&&this.rangeViewMap[e].to>=o&&this.rangeViewMap[e].to<=n&&(t[r].editRangeTo=!0)}},__goToMonth(t){let e=this.viewModel.year,i=Number(this.viewModel.month)+t;13===i?(i=1,e++):0===i&&(i=12,e--),this.__updateViewModel(e,i),!0===this.isImmediate&&this.__emitImmediately("month")},__goToYear(t){const e=Number(this.viewModel.year)+t;this.__updateViewModel(e,this.viewModel.month),!0===this.isImmediate&&this.__emitImmediately("year")},__setYear(t){this.__updateViewModel(t,this.viewModel.month),this.view="Years"===this.defaultView?"Months":"Calendar",!0===this.isImmediate&&this.__emitImmediately("year")},__setMonth(t){this.__updateViewModel(this.viewModel.year,t),this.view="Calendar",!0===this.isImmediate&&this.__emitImmediately("month")},__getMonthHash:t=>t.year+"/"+kt(t.month),__toggleDate(t,e){const i=this.daysMap[e];(void 0!==i&&!0===i.includes(t.day)?this.__removeFromModel:this.__addToModel)(t)},__getShortDate:t=>({year:t.year,month:t.month,day:t.day}),__onDayClick(t){const e={...this.viewModel,day:t};if(!1!==this.range)if(void 0===this.editRange){const i=this.days.find(e=>!0!==e.fill&&e.i===t);if(!0!==this.noUnset&&void 0!==i.range)return void this.__removeFromModel({target:e,from:i.range.from,to:i.range.to});if(!0===i.selected)return void this.__removeFromModel(e);const s=this.__getDayHash(e);this.editRange={init:e,initHash:s,final:e,finalHash:s},this.$emit("range-start",this.__getShortDate(e))}else{const t=this.editRange.initHash,i=this.__getDayHash(e),s=Rn(t)<=Rn(i)?{from:this.editRange.init,to:e}:{from:e,to:this.editRange.init};this.editRange=void 0,this.__addToModel(t===i&&!0!==this.dayAsRange?e:{target:e,...s}),this.$emit("range-end",{from:this.__getShortDate(s.from),to:this.__getShortDate(s.to)})}else this.__toggleDate(e,this.viewMonthHash.cur)},__onDayMouseover(t){if(void 0!==this.editRange){const e={...this.viewModel,day:t};Object.assign(this.editRange,{final:e,finalHash:this.__getDayHash(e)}),this.$emit("range-change",{from:this.__getShortDate(this.editRange.init),to:this.__getShortDate(this.editRange.final)})}},__updateViewModel(t,e){t=parseInt(t,10),e=parseInt(e,10),void 0!==this.minNav&&t<=this.minNav.year&&(t=this.minNav.year,e=this.maxNav.year&&(t=this.maxNav.year,e>this.maxNav.month&&(e=this.maxNav.month));const i=t+"/"+kt(e)+"/01";i!==this.viewModel.dateHash&&(this.monthDirection=Rn(this.viewModel.dateHash){this.startYear=t-t%20-(t<0?20:0),Object.assign(this.viewModel,{year:t,month:e,day:1,dateHash:i})}))},__emitValue(t,e,i){const s=null!==t&&1===t.length&&!1===this.multiple?t[0]:t;this.lastEmitValue=s;const{reason:o,details:n}=this.__getEmitParams(e,i);this.$emit("input",s,o,n)},__emitImmediately(t){const e=void 0!==this.daysModel[0]&&!0===Fn(this.daysModel[0])?{...this.daysModel[0]}:{...this.viewModel};this.$nextTick(()=>{e.year=this.viewModel.year,e.month=this.viewModel.month;const i="persian"!==this.calendar?yn(e.year,e.month,0).getDate():Go(e.year,e.month);e.day=Math.min(Math.max(1,e.day),i);const s=this.__encodeEntry(e);this.lastEmitValue=s;const{details:o}=this.__getEmitParams("",e);this.$emit("input",s,t,o)})},__getEmitParams(t,e){return void 0!==e.from?{reason:`${t}-range`,details:{...this.__getShortDate(e.target),from:this.__getShortDate(e.from),to:this.__getShortDate(e.to),changed:!0}}:{reason:`${t}-day`,details:{...this.__getShortDate(e),changed:!0}}},__encodeEntry(t,e,i){return void 0!==t.from?{from:this.encodeObjectFn(t.from,e,i),to:this.encodeObjectFn(t.to,e,i)}:this.encodeObjectFn(t,e,i)},__addToModel(t){let e;if(!0===this.multiple)if(void 0!==t.from){const i=Rn(this.__getDayHash(t.from)),s=Rn(this.__getDayHash(t.to)),o=this.daysModel.filter(t=>{const e=Rn(t.dateHash);return es}),n=this.rangeModel.filter(({from:t,to:e})=>Rn(e.dateHash)s);e=o.concat(n).concat(t).map(t=>this.__encodeEntry(t))}else{const i=this.normalizedModel.slice();i.push(this.__encodeEntry(t)),e=i}else e=this.__encodeEntry(t);this.__emitValue(e,"add",t)},__removeFromModel(t){if(!0===this.noUnset)return;let e=null;if(!0===this.multiple&&!0===Array.isArray(this.value)){const i=this.__encodeEntry(t);0===(e=void 0!==t.from?this.value.filter(t=>void 0===t.from||t.from!==i.from&&t.to!==i.to):this.value.filter(t=>t!==i)).length&&(e=null)}this.__emitValue(e,"remove",t)},__updateValue(t,e,i){const s=this.daysModel.concat(this.rangeModel).map(i=>this.__encodeEntry(i,t,e)).filter(t=>void 0!==t.from?!0===Fn(t.from)&&!0===Fn(t.to):Fn(t));this.$emit("input",(!0===this.multiple?s:s[0])||null,i)}},render(t){const e=[t("div",{staticClass:"q-date__content col relative-position"},[t("transition",{props:{name:"q-transition--fade"}},[this[`__get${this.view}View`](t)])])],i=jt(this,"default");return void 0!==i&&e.push(t("div",{staticClass:"q-date__actions"},i)),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{class:this.classes,attrs:this.attrs,directives:[Qo],on:{...this.qListeners}},[this.__getHeader(t),t("div",{staticClass:"q-date__main col column"},e)])}}),Vn={methods:{__addHistory(){this.__historyEntry={condition:()=>!0===this.hideOnRouteChange,handler:this.hide},Z.add(this.__historyEntry)},__removeHistory(){void 0!==this.__historyEntry&&(Z.remove(this.__historyEntry),this.__historyEntry=void 0)}},beforeDestroy(){!0===this.showing&&this.__removeHistory()}};const{passive:Nn}=u;let Hn,jn,Qn,Wn=0,Un={},Yn=!1;function Kn(){if(!1===Yn)return;const{innerHeight:t,visualViewport:e}=window,{clientHeight:i}=document.documentElement,s=t-Math.ceil(e.height*e.scale);0===s&&i>t?document.documentElement.scrollTop-=3:(s>1&&s<4&&(document.documentElement.scrollTop+=s-1),Yn=!1)}function Gn(){!1!==Yn&&cancelAnimationFrame(Yn),Yn=requestAnimationFrame(Kn)}function Xn(){clearTimeout(jn),jn=setTimeout(()=>{requestAnimationFrame(()=>{const{documentElement:t,body:e}=document;t.style.height=`${window.innerHeight}px`,e.style.height=`${t.clientHeight+Un.scrollTop}px`})},200)}function Zn(t,e){const{documentElement:i,body:s}=document,{visualViewport:o}=window;if(clearTimeout(Hn),clearTimeout(jn),"add"===t){document.qScrollPrevented=!0;const t=Zi();requestAnimationFrame(()=>{const{innerHeight:n,innerWidth:r}=window,{overflowX:a,overflowY:l,backgroundColor:h}=window.getComputedStyle(s);if(Un={htmlStyleBefore:i.style.cssText,bodyStyleBefore:s.style.cssText,htmlStyleAfter:"",bodyStyleAfter:"",scrollLeft:i.scrollLeft,scrollTop:i.scrollTop},!0===d.is.mobile)i.style.height=`${n}px`,s.style.width=`calc(100vw + ${Math.abs(Un.scrollLeft)}px)`,s.style.height=`${n+Un.scrollTop}px`,window.addEventListener("orientationchange",Xn,Nn),void 0!==o&&!0===d.is.ios&&(Hn=setTimeout(()=>{o.addEventListener("scroll",Gn,Nn)},500));else{const{scrollWidth:o,scrollHeight:h}=s,d="hidden"!==a&&("scroll"===a||o>r)?t:0,c="hidden"!==l&&("scroll"===l||h>n)?t:0;(c>0||d>0)&&(c>0&&(i.style.width=`calc(100vw - ${c}px)`,!0===e&&(i.style.marginRight=`${c}px`)),d>0&&(i.style.height=`calc(100vh - ${d}px)`)),s.style.width=`calc(100vw + ${Math.abs(Un.scrollLeft)-c}px)`,s.style.height=`calc(100vh + ${Un.scrollTop-d}px)`}s.style.left=`${-Un.scrollLeft}px`,s.style.top=`${-Un.scrollTop}px`,s.style["padding"+(!0===e?"Left":"Right")]=`${Math.abs(Un.scrollLeft)}px`,i.style.backgroundColor=h||"rgba(128, 128, 128, 0.01)",i.classList.add("q-body--prevent-scroll"),window.scrollTo(0,0),requestAnimationFrame(()=>{0!==s.scrollTop&&(s.scrollTop=0)}),i.style.setProperty("--q-scroll-lock-left",`${-Un.scrollLeft}px`);const c=document.querySelectorAll(".q-menu__container, .q-tooltip__container");for(let t=c.length-1;t>=0;t--)"absolute"===c[t].style.position&&c[t].classList.add("q-body--scroll-locked");Un.htmlStyleAfter=i.style.cssText.split(";").filter(t=>t.trim().length>0),Un.bodyStyleAfter=s.style.cssText.split(";").filter(t=>t.trim().length>0)})}else!0===d.is.mobile&&(window.removeEventListener("orientationchange",Xn,Nn),void 0!==o&&!0===d.is.ios&&(o.removeEventListener("scroll",Gn,Nn),Yn=!1)),requestAnimationFrame(()=>{i.classList.remove("q-body--prevent-scroll");const t=Un.htmlStyleAfter.reduce((t,e)=>t.replace(e+";",""),i.style.cssText),e=Un.bodyStyleAfter.reduce((t,e)=>t.replace(e+";",""),s.style.cssText);i.style.cssText=Un.htmlStyleBefore+t,s.style.cssText=Un.bodyStyleBefore+e;const o=document.querySelectorAll(".q-body--scroll-locked");for(let t=o.length-1;t>=0;t--)o[t].classList.remove("q-body--scroll-locked");window.scrollTo(Un.scrollLeft,Un.scrollTop),Hn=setTimeout(()=>{document.qScrollPrevented=!1,function(){const t=Ji.slice();Ji=[],t.forEach(t=>{t()})}()},50)})}function Jn(t,e){let i="add";if(!0===t){if(Wn++,void 0!==Qn)return clearTimeout(Qn),void(Qn=void 0);if(Wn>1)return}else{if(0===Wn)return;if(--Wn>0)return;if(i="remove",!0===d.is.ios&&!0===d.is.nativeMobile)return clearTimeout(Qn),void(Qn=setTimeout(()=>{Zn(i,e),Qn=void 0},100))}Zn(i,e)}var tr={methods:{__preventScroll(t){t===this.preventedScroll||void 0===this.preventedScroll&&!0!==t||(this.preventedScroll=t,Jn(t,this.$q.lang.rtl))}}};const er={standard:"fixed-full flex-center",top:"fixed-top justify-center",bottom:"fixed-bottom justify-center",right:"fixed-right items-center",left:"fixed-left items-center"},ir={standard:["scale","scale"],top:["slide-down","slide-up"],bottom:["slide-up","slide-down"],right:["slide-left","slide-right"],left:["slide-right","slide-left"]};var sr=e.default.extend({name:"QDialog",mixins:[At,Vn,ci,$i,tr,Ti],props:{persistent:Boolean,autoClose:Boolean,noEscDismiss:Boolean,noBackdropDismiss:Boolean,noRouteDismiss:Boolean,noRefocus:Boolean,noFocus:Boolean,noShake:Boolean,seamless:Boolean,maximized:Boolean,fullWidth:Boolean,fullHeight:Boolean,square:Boolean,position:{type:String,default:"standard",validator:t=>"standard"===t||["top","bottom","left","right"].includes(t)},transitionShow:String,transitionHide:String},watch:{seamless(t){!0===this.showing&&this.__preventScroll(!0!==t)}},computed:{classes(){return`q-dialog__inner--${!0===this.maximized?"maximized":"minimized"} `+`q-dialog__inner--${this.position} ${er[this.position]}`+(!0===this.fullWidth?" q-dialog__inner--fullwidth":"")+(!0===this.fullHeight?" q-dialog__inner--fullheight":"")+(!0===this.square?" q-dialog__inner--square":"")},transitionProps(){const t=`q-transition--${void 0===this.transitionShow?ir[this.position][0]:this.transitionShow}`,e=`q-transition--${void 0===this.transitionHide?ir[this.position][1]:this.transitionHide}`;return{enterClass:`${t}-enter`,leaveClass:`${e}-leave`,appearClass:`${t}-appear`,enterToClass:`${t}-enter-to`,leaveToClass:`${e}-leave-to`,appearToClass:`${t}-appear-to`,enterActiveClass:`${t}-enter-active`,leaveActiveClass:`${e}-leave-active`,appearActiveClass:`${t}-appear-active`}},useBackdrop(){return!0===this.showing&&!0!==this.seamless},hideOnRouteChange(){return!0!==this.persistent&&!0!==this.noRouteDismiss&&!0!==this.seamless},onBackdropEvents(){return{focusin:this.__onBackdropClick}},onInnerEvents(){const t={...this.qListeners,input:S,"popup-show":S,"popup-hide":S};return!0===this.autoClose&&(t.click=this.__onAutoClose),t},onTransitionEvents(){return{"before-enter":this.__onTransitionBeforeEnter,enter:this.__onTransitionEnter,"after-enter":this.__onTransitionAfterEnter,"enter-cancelled":this.__onTransitionEnterCancelled,"before-leave":this.__onTransitionBeforeLeave,"after-leave":this.__onTransitionAfterLeave}},attrs(){return{role:"dialog","aria-modal":!0===this.useBackdrop?"true":"false",...this.qAttrs}}},methods:{shake(t){t&&"function"==typeof t.focus?t.focus():this.__focusFirst(!0),this.$emit("shake");const e=this.__getInnerNode();void 0!==e&&(e.classList.remove("q-animate--scale"),e.classList.add("q-animate--scale"),clearTimeout(this.shakeTimeout),this.shakeTimeout=setTimeout(()=>{e.classList.remove("q-animate--scale")},170))},__show(){this.__addHistory(),this.__refocusTarget=!0===this.$q.platform.is.desktop&&!1===this.noRefocus&&null!==document.activeElement?document.activeElement:void 0,this.$el.dispatchEvent(k("popup-show",{bubbles:!0})),os.register(this,()=>{!0!==this.seamless?!0===this.persistent||!0===this.noEscDismiss?!0!==this.maximized&&!0!==this.noShake?this.shake():this.__focusFirst(!0):(this.$emit("escape-key"),this.hide()):this.__focusCyclePortal()}),this.__showPortal()},__hide(){this.__removeHistory(),this.__cleanup(!0),this.$el.dispatchEvent(k("popup-hide",{bubbles:!0}))},__onTransitionBeforeEnter(t){!0===this.$q.platform.is.ios&&t.click(),!0!==this.seamless&&this.__preventScroll(!0),t.setAttribute("data-q-portal-animating",!0)},__onTransitionEnter(){!0!==this.noFocus&&this.focus()},__onTransitionAfterEnter(t){t.removeAttribute("data-q-portal-animating"),this.$emit("show",{target:t})},__onTransitionEnterCancelled(t){t.removeAttribute("data-q-portal-animating"),!0!==this.seamless&&this.__preventScroll(!1)},__onTransitionBeforeLeave(){!0!==this.showing&&(this.__focusCyclePortal(!0),!0!==this.seamless&&(document.documentElement.scrollTop=0))},__onTransitionAfterLeave(t){!0!==this.showing&&(this.__hidePortal(),!0!==this.seamless&&this.__preventScroll(!1),this.$emit("hide",{target:t}))},__onAutoClose(t){this.hide(t),void 0!==this.qListeners.click&&this.$emit("click",t)},__onBackdropClick(t){!0!==this.persistent&&!0!==this.noBackdropDismiss?this.hide(t):!0!==this.noShake&&this.shake(t.relatedTarget)},__cleanup(t){clearTimeout(this.shakeTimeout),!0!==t&&!0!==this.showing||os.pop(this)},__renderPortal(t){return t("div",{staticClass:`q-dialog fullscreen no-pointer-events q-dialog--${!0===this.seamless?"seamless":"modal"}`,class:this.contentClass,style:this.contentStyle,attrs:this.attrs},[t("transition",{props:{name:"q-transition--fade"}},!0===this.useBackdrop?[t("div",{staticClass:"q-dialog__backdrop fixed-full",attrs:{...Lt,tabindex:-1},on:this.onBackdropEvents})]:null),t("transition",{props:this.transitionProps,on:this.onTransitionEvents},[!0===this.showing?t("div",{ref:"inner",staticClass:"q-dialog__inner flex no-pointer-events",class:this.classes,attrs:{tabindex:-1},on:this.onInnerEvents},this.__getFocusWrappedContent("default")):null])])}},mounted(){this.__processModelChange(this.value)},beforeDestroy(){this.__cleanup(),this.__preventScroll(!1),this.__refocusTarget=void 0}});const or=["mouseover","mouseout","mouseenter","mouseleave"];var nr=e.default.extend({name:"QDrawer",inject:{layout:{default(){console.error("QDrawer needs to be child of QLayout")}}},mixins:[ce,Vn,li,ci,tr],directives:{TouchPan:xo},props:{side:{type:String,default:"left",validator:t=>["left","right"].includes(t)},width:{type:Number,default:300},mini:Boolean,miniToOverlay:Boolean,miniWidth:{type:Number,default:57},breakpoint:{type:Number,default:1023},showIfAbove:Boolean,behavior:{type:String,validator:t=>["default","desktop","mobile"].includes(t),default:"default"},bordered:Boolean,elevated:Boolean,contentStyle:[String,Object,Array],contentClass:[String,Object,Array],overlay:Boolean,persistent:Boolean,noSwipeOpen:Boolean,noSwipeClose:Boolean,noSwipeBackdrop:Boolean},data(){const t="mobile"===this.behavior||"desktop"!==this.behavior&&this.layout.totalWidth<=this.breakpoint;return{belowBreakpoint:t,showing:!0===this.showIfAbove&&!1===t||!0===this.value}},watch:{belowBreakpoint(t){!0===t?(this.lastDesktopState=this.showing,!0===this.showing&&this.hide(!1)):!1===this.overlay&&"mobile"!==this.behavior&&!1!==this.lastDesktopState&&(!0===this.showing?(this.__applyPosition(0),this.__applyBackdrop(0),this.__cleanup()):this.show(!1))},"layout.totalWidth"(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),!0!==this.layout.container?this.clearExecuteWhenScrollable=ts(this.__updateBelowBreakpoint):this.__updateBelowBreakpoint()},side(t,e){this.layout.instances[e]===this&&(this.layout.instances[e]=void 0,this.layout[e].space=!1,this.layout[e].offset=0),this.layout.instances[t]=this,this.layout[t].size=this.size,this.layout[t].space=this.onLayout,this.layout[t].offset=this.offset},behavior(){this.__updateBelowBreakpoint()},breakpoint(){this.__updateBelowBreakpoint()},"layout.container"(t){!0===this.showing&&this.__preventScroll(!0!==t),!0===t&&this.__updateBelowBreakpoint()},"layout.scrollbarWidth"(){this.__applyPosition(!0===this.showing?0:void 0)},offset(t){this.__update("offset",t)},onLayout(t){this.$emit("on-layout",t),this.__update("space",t)},rightSide(){this.__applyPosition()},size(t){this.__applyPosition(),this.__updateSizeOnLayout(this.miniToOverlay,t)},miniToOverlay(t){this.__updateSizeOnLayout(t,this.size)},"$q.lang.rtl"(){this.__applyPosition()},mini(){!0===this.value&&(this.__animateMini(),this.layout.__animate())},isMini(t){this.$emit("mini-state",t)}},computed:{rightSide(){return"right"===this.side},otherSide(){return!0===this.rightSide?"left":"right"},offset(){return!0===this.showing&&!1===this.belowBreakpoint&&!1===this.overlay?!0===this.miniToOverlay?this.miniWidth:this.size:0},size(){return!0===this.isMini?this.miniWidth:this.width},fixed(){return!0===this.overlay||!0===this.miniToOverlay||this.layout.view.indexOf(this.rightSide?"R":"L")>-1||this.$q.platform.is.ios&&!0===this.layout.container},onLayout(){return!0===this.showing&&!1===this.belowBreakpoint&&!1===this.overlay},onScreenOverlay(){return!0===this.showing&&!1===this.belowBreakpoint&&!0===this.overlay},backdropClass(){return!1===this.showing?"no-pointer-events":null},headerSlot(){return!0===this.rightSide?"r"===this.layout.rows.top[2]:"l"===this.layout.rows.top[0]},footerSlot(){return!0===this.rightSide?"r"===this.layout.rows.bottom[2]:"l"===this.layout.rows.bottom[0]},aboveStyle(){const t={};return!0===this.layout.header.space&&!1===this.headerSlot&&(!0===this.fixed?t.top=`${this.layout.header.offset}px`:!0===this.layout.header.space&&(t.top=`${this.layout.header.size}px`)),!0===this.layout.footer.space&&!1===this.footerSlot&&(!0===this.fixed?t.bottom=`${this.layout.footer.offset}px`:!0===this.layout.footer.space&&(t.bottom=`${this.layout.footer.size}px`)),t},style(){const t={width:`${this.size}px`};return!0===this.belowBreakpoint?t:Object.assign(t,this.aboveStyle)},classes(){return`q-drawer--${this.side}`+(!0===this.bordered?" q-drawer--bordered":"")+` q-drawer--${this.darkSuffix} q-${this.darkSuffix}`+(!0!==this.showing?" q-layout--prevent-focus":"")+(!0===this.belowBreakpoint?" fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding":` q-drawer--${!0===this.isMini?"mini":"standard"}`+(!0===this.fixed||!0!==this.onLayout?" fixed":"")+(!0===this.overlay||!0===this.miniToOverlay?" q-drawer--on-top":"")+(!0===this.headerSlot?" q-drawer--top-padding":""))},stateDirection(){return(!0===this.$q.lang.rtl?-1:1)*(!0===this.rightSide?1:-1)},isMini(){return!0===this.mini&&!0!==this.belowBreakpoint},onNativeEvents(){if(!0!==this.belowBreakpoint){const t={"!click":t=>{this.$emit("click",t)}};return or.forEach(e=>{t[e]=(t=>{void 0!==this.qListeners[e]&&this.$emit(e,t)})}),t}},onBackdropEvents(){return{click:this.hide,touchmove:w}},hideOnRouteChange(){return!0!==this.persistent&&(!0===this.belowBreakpoint||!0===this.onScreenOverlay)},onOpenerEvents:()=>({touchstart:w}),openDirective(){const t=!0===this.$q.lang.rtl?this.side:this.otherSide;return[{name:"touch-pan",value:this.__openByTouch,modifiers:{[t]:!0,mouse:!0,prevent:!0}}]},contentCloseDirective(){if(!0!==this.noSwipeClose){const t=!0===this.$q.lang.rtl?this.otherSide:this.side;return[{name:"touch-pan",value:this.__closeByTouch,modifiers:{[t]:!0,mouse:!0}}]}},backdropCloseDirective(){if(!0!==this.noSwipeBackdrop){const t=!0===this.$q.lang.rtl?this.otherSide:this.side;return[{name:"touch-pan",value:this.__closeByTouch,modifiers:{[t]:!0,mouse:!0,mouseAllDir:!0}}]}}},methods:{__applyPosition(t){void 0===t?this.$nextTick(()=>{t=!0===this.showing?0:this.size,this.__applyPosition(this.stateDirection*t)}):void 0!==this.$refs.content&&(!0!==this.layout.container||!0!==this.rightSide||!0!==this.belowBreakpoint&&Math.abs(t)!==this.size?!0!==this.layout.container&&!0===this.rightSide&&!0===this.belowBreakpoint&&(t+=(!0===this.$q.lang.rtl?-1:1)*this.layout.scrollbarWidth):t+=this.stateDirection*this.layout.scrollbarWidth,this.__lastPosition!==t&&(this.$refs.content.style.transform=`translateX(${t}px)`,this.__lastPosition=t))},__applyBackdrop(t,e){void 0!==this.$refs.backdrop?this.$refs.backdrop.style.opacity=this.lastBackdropOpacity=.4*t:!0!==e&&this.$nextTick(()=>{this.__applyBackdrop(t,!0)})},__setBackdropVisible(t){void 0!==this.$refs.backdrop&&this.$refs.backdrop.classList[!0===t?"remove":"add"]("no-pointer-events")},__setScrollable(t){const e=!0===t?"remove":!0!==this.layout.container?"add":"";""!==e&&document.body.classList[e]("q-body--drawer-toggle")},__animateMini(){void 0!==this.timerMini?clearTimeout(this.timerMini):void 0!==this.$el&&this.$el.classList.add("q-drawer--mini-animate"),this.timerMini=setTimeout(()=>{void 0!==this.$el&&this.$el.classList.remove("q-drawer--mini-animate"),this.timerMini=void 0},150)},__openByTouch(t){if(!1!==this.showing)return;const e=this.size,i=wt(t.distance.x,0,e);if(!0===t.isFinal){const t=this.$refs.content,s=i>=Math.min(75,e);return t.classList.remove("no-transition"),void(!0===s?this.show():(this.layout.__animate(),this.__applyBackdrop(0),this.__applyPosition(this.stateDirection*e),t.classList.remove("q-drawer--delimiter"),t.classList.add("q-layout--prevent-focus"),this.__setBackdropVisible(!1)))}if(this.__applyPosition((!0===this.$q.lang.rtl?!0!==this.rightSide:this.rightSide)?Math.max(e-i,0):Math.min(0,i-e)),this.__applyBackdrop(wt(i/e,0,1)),!0===t.isFirst){const t=this.$refs.content;t.classList.add("no-transition"),t.classList.add("q-drawer--delimiter"),t.classList.remove("q-layout--prevent-focus"),this.__setBackdropVisible(!0)}},__closeByTouch(t){if(!0!==this.showing)return;const e=this.size,i=t.direction===this.side,s=(!0===this.$q.lang.rtl?!0!==i:i)?wt(t.distance.x,0,e):0;if(!0===t.isFinal){const t=Math.abs(s){!1!==t&&this.__setScrollable(!0),!0!==e&&this.$emit("show",t)},150)},__hide(t,e){this.__removeHistory(),!1!==t&&this.layout.__animate(),this.__applyBackdrop(0),this.__applyPosition(this.stateDirection*this.size),this.__setBackdropVisible(!1),this.__cleanup(),!0!==e?this.__registerTimeout(()=>{this.$emit("hide",t)},150):this.__removeTimeout()},__cleanup(){this.__preventScroll(!1),this.__setScrollable(!0)},__update(t,e){this.layout[this.side][t]!==e&&(this.layout[this.side][t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__updateSizeOnLayout(t,e){this.__update("size",!0===t?this.miniWidth:e)},__updateBelowBreakpoint(){this.__updateLocal("belowBreakpoint","mobile"===this.behavior||"desktop"!==this.behavior&&this.layout.totalWidth<=this.breakpoint)}},created(){this.__useTimeout("__registerTimeout","__removeTimeout"),this.layout.instances[this.side]=this,this.__updateSizeOnLayout(this.miniToOverlay,this.size),this.__update("space",this.onLayout),this.__update("offset",this.offset),!0===this.showIfAbove&&!0!==this.value&&!0===this.showing&&void 0!==this.qListeners.input&&this.$emit("input",!0)},mounted(){this.$emit("on-layout",this.onLayout),this.$emit("mini-state",this.isMini),this.lastDesktopState=!0===this.showIfAbove;const t=()=>{this[`__${!0===this.showing?"show":"hide"}`](!1,!0)};0===this.layout.totalWidth?this.watcher=this.$watch("layout.totalWidth",()=>{this.watcher(),this.watcher=void 0,!1===this.showing&&!0===this.showIfAbove&&!1===this.belowBreakpoint?this.show(!1):t()}):this.$nextTick(t)},beforeDestroy(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),void 0!==this.watcher&&this.watcher(),clearTimeout(this.timerMini),!0===this.showing&&this.__cleanup(),this.layout.instances[this.side]===this&&(this.layout.instances[this.side]=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},render(t){const e=[];!0===this.belowBreakpoint&&(!0!==this.noSwipeOpen&&e.push(t("div",{staticClass:`q-drawer__opener fixed-${this.side}`,attrs:Lt,directives:this.openDirective,on:this.onOpenerEvents})),e.push(t("div",{ref:"backdrop",staticClass:"fullscreen q-drawer__backdrop",class:this.backdropClass,attrs:Lt,style:void 0!==this.lastBackdropOpacity?{opacity:this.lastBackdropOpacity}:null,on:this.onBackdropEvents,directives:!1===this.showing?void 0:this.backdropCloseDirective})));const i=[t("div",{staticClass:"q-drawer__content fit "+(!0===this.layout.container?"overflow-auto":"scroll"),class:this.contentClass,style:this.contentStyle},!0===this.isMini&&void 0!==this.$scopedSlots.mini?this.$scopedSlots.mini():jt(this,"default"))];return!0===this.elevated&&!0===this.showing&&i.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(t("aside",{ref:"content",staticClass:"q-drawer",class:this.classes,style:this.style,on:this.onNativeEvents,directives:!0===this.belowBreakpoint?this.contentCloseDirective:void 0},i)),t("div",{staticClass:"q-drawer-container"},e)}});const rr={role:"tooltip"};var ar=e.default.extend({name:"QTooltip",mixins:[ai,li,ci,$i,ii],props:{minHeight:{type:String,default:null},minWidth:{type:String,default:null},maxHeight:{type:String,default:null},maxWidth:{type:String,default:null},transitionShow:{default:"jump-down"},transitionHide:{default:"jump-up"},anchor:{type:String,default:"bottom middle",validator:as},self:{type:String,default:"top middle",validator:as},offset:{type:Array,default:()=>[14,14],validator:ls},scrollTarget:{default:void 0},delay:{type:Number,default:0},hideDelay:{type:Number,default:0}},computed:{anchorOrigin(){return hs(this.anchor,this.$q.lang.rtl)},selfOrigin(){return hs(this.self,this.$q.lang.rtl)},hideOnRouteChange(){return!0!==this.persistent}},methods:{__show(t){this.__showPortal(),this.__registerTick(()=>{this.updatePosition(),this.__configureScrollTarget()}),void 0===this.unwatch&&(this.unwatch=this.$watch(()=>this.$q.screen.width+"|"+this.$q.screen.height+"|"+this.self+"|"+this.anchor+"|"+this.$q.lang.rtl,this.updatePosition)),this.__registerTimeout(()=>{this.$emit("show",t)},300)},__hide(t){this.__removeTick(),this.__anchorCleanup(),this.__registerTimeout(()=>{!0!==this.showing&&(this.__hidePortal(),this.$emit("hide",t))},300)},__anchorCleanup(){void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0),this.__unconfigureScrollTarget(),$(this,"tooltipTemp"),$(this,"tooltipPreventMenu"),$(this,"anchorTemp")},updatePosition(){if(void 0===this.anchorEl||void 0===this.__portal)return;const t=this.__portal.$el;8!==t.nodeType?(void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition),this.settingPosition=requestAnimationFrame(()=>{cs({el:t,offset:this.offset,anchorEl:this.anchorEl,anchorOrigin:this.anchorOrigin,selfOrigin:this.selfOrigin,minHeight:this.minHeight,minWidth:this.minWidth,maxHeight:this.maxHeight,maxWidth:this.maxWidth,rtl:this.$q.lang.rtl}),this.settingPosition=void 0})):setTimeout(this.updatePosition,25)},__delayShow(t){if(!0===this.$q.platform.is.mobile){if(this.showing)return;oi(),document.body.classList.add("non-selectable");const t=this.anchorEl;q(this,"tooltipTemp",["touchcancel","touchend","click"].map(e=>[t,e,"__clearPreventContextMenu","passiveCapture"]).concat([[document,"touchstart","__delayHide","passiveCapture"]])),q(this,"tooltipPreventMenu",[[document,"contextmenu","prevent","capture"]])}this.__registerTimeout(()=>{this.show(t)},this.delay)},__delayHide(t){const e=this.__getInnerNode();if(void 0!==e&&t)if("mouseleave"===t.type){if(!0===e.contains(t.relatedTarget))return $(this,"anchorTemp"),void q(this,"anchorTemp",[[e,"mouseleave","__delayHide","passive"]])}else if(!0===e.contains(t.target))return;!0===this.$q.platform.is.mobile?($(this,"tooltipTemp"),$(this,"tooltipPreventMenu"),oi(),setTimeout(()=>{document.body.classList.remove("non-selectable")},10)):$(this,"anchorTemp"),this.__registerTimeout(()=>{this.hide(t)},this.hideDelay)},__clearPreventContextMenu(){$(this,"tooltipPreventMenu")},__configureAnchorEl(){if(!0===this.noParentEvent||void 0===this.anchorEl)return;q(this,"anchor",!0===this.$q.platform.is.mobile?[[this.anchorEl,"touchstart","__delayShow","passive"]]:[[this.anchorEl,"mouseenter","__delayShow","passive"],[this.anchorEl,"mouseleave","__delayHide","passive"]])},__unconfigureScrollTarget(){this.__changeScrollEvent()},__configureScrollTarget(){if(!0===this.showing&&(void 0!==this.anchorEl||void 0!==this.scrollTarget)){const t=!0===this.noParentEvent?this.updatePosition:this.hide;this.__changeScrollEvent(t,Fi(this.anchorEl,this.scrollTarget))}},__renderPortal(t){return t("transition",{props:this.transitionProps},[!0===this.showing?t("div",{staticClass:"q-tooltip__container column no-pointer-events"},[t("div",{ref:"inner",staticClass:"q-tooltip q-tooltip--style scroll all-pointer-events",class:this.contentClass,style:this.contentStyle,attrs:rr},jt(this,"default"))]):null])}},created(){this.__useTick("__registerTick","__removeTick"),this.__useTimeout("__registerTimeout")},mounted(){this.__processModelChange(this.value)},beforeDestroy(){void 0!==this.settingPosition&&cancelAnimationFrame(this.settingPosition)}});const lr={role:"list"};var hr=e.default.extend({name:"QList",mixins:[Ht,ce],props:{bordered:Boolean,dense:Boolean,separator:Boolean,padding:Boolean},computed:{classes(){return"q-list"+(!0===this.bordered?" q-list--bordered":"")+(!0===this.dense?" q-list--dense":"")+(!0===this.separator?" q-list--separator":"")+` q-list--${this.darkSuffix}`+(!0===this.padding?" q-list--padding":"")}},render(t){return t("div",{class:this.classes,attrs:lr,on:{...this.qListeners}},jt(this,"default"))}}),dr=e.default.extend({name:"QItem",mixins:[ce,Ce,Nt,Ht],props:{active:{type:Boolean,default:null},clickable:Boolean,dense:Boolean,insetLevel:Number,tabindex:[String,Number],focused:Boolean,manualFocus:Boolean},computed:{isActionable(){return!0===this.clickable||!0===this.hasLink||"label"===this.tag},isClickable(){return!0!==this.disable&&!0===this.isActionable},classes(){return"q-item q-item-type row no-wrap"+(!0===this.dense?" q-item--dense":"")+`q-item--${this.darkSuffix}`+(!0===this.hasLink&&null===this.active?this.linkClass:!0===this.active?` q-item--active${void 0!==this.activeClass?` ${this.activeClass}`:""} `:"")+(!0===this.disable?" disabled":"")+(!0===this.isClickable?" q-item--clickable q-link cursor-pointer "+(!0===this.manualFocus?"q-manual-focusable":"q-focusable q-hoverable")+(!0===this.focused?" q-manual-focusable--focused":""):"")},style(){if(void 0!==this.insetLevel){return{["padding"+(!0===this.$q.lang.rtl?"Right":"Left")]:16+56*this.insetLevel+"px"}}},onEvents(){return{...this.qListeners,focus:this.__onFocus,click:this.__onClick,keyup:this.__onKeyup}}},methods:{__onClick(t){!0===this.isClickable&&(this.__refocus(),this.__navigateOnClick(t))},__onFocus(t){!0===this.isClickable&&this.__refocus(),void 0!==this.qListeners.focus&&this.$emit("focus",t)},__onKeyup(t){if(!0===this.isClickable&&!0===ze(t,13)){w(t);const e=new MouseEvent("click",t);this.$el.dispatchEvent(e)}this.$emit("keyup",t)},__getContent(t){const e=Qt(this,"default",[]);return!0===this.isClickable&&e.unshift(t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"})),e},__refocus(){!0===this.$q.interaction.isPointer&&void 0!==this.$refs.blurTarget&&document.activeElement===this.$el?this.$refs.blurTarget.focus():!0===this.$q.interaction.isKeyboard&&document.activeElement===this.$refs.blurTarget&&this.$el.focus()}},render(t){const e={class:this.classes,style:this.style,attrs:{role:"listitem"},on:this.onEvents};return!0===this.isClickable?(e.attrs.tabindex=this.tabindex||"0",Object.assign(e.attrs,this.linkAttrs)):!0===this.isActionable&&(e.attrs["aria-disabled"]="true"),t(this.linkTag,e,this.__getContent(t))}}),cr=e.default.extend({name:"QItemSection",mixins:[Ht],props:{avatar:Boolean,thumbnail:Boolean,side:Boolean,top:Boolean,noWrap:Boolean},computed:{classes(){const t=this.avatar||this.side||this.thumbnail;return{"q-item__section--top":this.top,"q-item__section--avatar":this.avatar,"q-item__section--thumbnail":this.thumbnail,"q-item__section--side":t,"q-item__section--nowrap":this.noWrap,"q-item__section--main":!t,[`justify-${this.top?"start":"center"}`]:!0}}},render(t){return t("div",{staticClass:"q-item__section column",class:this.classes,on:{...this.qListeners}},jt(this,"default"))}});function ur(t,e,i){e.handler?e.handler(t,i,i.caret):i.runCmd(e.cmd,e.param)}function pr(t,e){return t("div",{staticClass:"q-editor__toolbar-group"},e)}function mr(t,e,i,s,o=!1){const n=o||"toggle"===i.type&&(i.toggled?i.toggled(e):i.cmd&&e.caret.is(i.cmd,i.param)),r=[],a={click(t){s&&s(),ur(t,i,e)}};if(i.tip&&e.$q.platform.is.desktop){const e=i.key?t("div",[t("small",`(CTRL + ${String.fromCharCode(i.key)})`)]):null;r.push(t(ar,{props:{delay:1e3}},[t("div",{domProps:{innerHTML:i.tip}}),e]))}return t(Ze,{props:{...e.buttonProps,icon:null!==i.icon?i.icon:void 0,color:n?i.toggleColor||e.toolbarToggleColor:i.color||e.toolbarColor,textColor:n&&!e.toolbarPush?null:i.textColor||e.toolbarTextColor,label:i.label,disable:!!i.disable&&("function"!=typeof i.disable||i.disable(e)),size:"sm"},on:a},r)}function gr(t,e){if(e.caret)return e.buttons.filter(t=>!e.isViewingSource||t.find(t=>"viewsource"===t.cmd)).map(i=>pr(t,i.map(i=>(!e.isViewingSource||"viewsource"===i.cmd)&&("slot"===i.type?jt(e,i.slot):"dropdown"===i.type?function(t,e,i){const s="only-icons"===i.list;let o,n,r=i.label,a=null!==i.icon?i.icon:void 0;function l(){d.componentInstance.hide()}if(s)n=i.options.map(i=>{const s=void 0===i.type&&e.caret.is(i.cmd,i.param);return s&&(r=i.tip,a=null!==i.icon?i.icon:void 0),mr(t,e,i,l,s)}),o=e.toolbarBackgroundClass,n=[pr(t,n)];else{const s=void 0!==e.toolbarToggleColor?`text-${e.toolbarToggleColor}`:null,h=void 0!==e.toolbarTextColor?`text-${e.toolbarTextColor}`:null,d="no-icons"===i.list;n=i.options.map(i=>{const o=!!i.disable&&i.disable(e),n=void 0===i.type&&e.caret.is(i.cmd,i.param);n&&(r=i.tip,a=null!==i.icon?i.icon:void 0);const c=i.htmlTip;return t(dr,{props:{active:n,activeClass:s,clickable:!0,disable:o,dense:!0},on:{click(t){l(),e.$refs.content&&e.$refs.content.focus(),e.caret.restore(),ur(t,i,e)}}},[!0===d?null:t(cr,{class:n?s:h,props:{side:!0}},[t(le,{props:{name:null!==i.icon?i.icon:void 0}})]),t(cr,[c?t("div",{staticClass:"text-no-wrap",domProps:{innerHTML:i.htmlTip}}):i.tip?t("div",{staticClass:"text-no-wrap"},[i.tip]):null])])}),o=[e.toolbarBackgroundClass,h],n=[t(hr,[n])]}const h=i.highlight&&r!==i.label,d=t(ys,{props:{...e.buttonProps,noCaps:!0,noWrap:!0,color:h?e.toolbarToggleColor:e.toolbarColor,textColor:h&&!e.toolbarPush?null:e.toolbarTextColor,label:i.fixedLabel?i.label:r,icon:i.fixedIcon?null!==i.icon?i.icon:void 0:a,contentClass:o}},n);return d}(t,e,i):mr(t,e,i)))))}function fr(t,e,i){return!(!t||t===document.body)&&(!0===i&&t===e||(e===document?document.body:e).contains(t.parentNode))}const _r=/^https?:\/\//;const vr=Object.prototype.toString,br=Object.prototype.hasOwnProperty,yr=new Set(["Boolean","Number","String","Function","Array","Date","RegExp"].map(t=>"[object "+t+"]"));function Sr(t){if(t!==Object(t)||!0===yr.has(vr.call(t)))return!1;if(t.constructor&&!1===br.call(t,"constructor")&&!1===br.call(t.constructor.prototype,"isPrototypeOf"))return!1;let e;for(e in t);return void 0===e||br.call(t,e)}function xr(){let t,e,i,s,o,n,r=arguments[0]||{},a=1,l=!1;const h=arguments.length;for("boolean"==typeof r&&(l=r,r=arguments[1]||{},a=2),Object(r)!==r&&"function"!=typeof r&&(r={}),h===a&&(r=this,a--);a0===t.length||t.every(t=>t.length),default:()=>[["left","center","right","justify"],["bold","italic","underline","strike"],["undo","redo"]]},toolbarColor:String,toolbarBg:String,toolbarTextColor:String,toolbarToggleColor:{type:String,default:"primary"},toolbarOutline:Boolean,toolbarPush:Boolean,toolbarRounded:Boolean,paragraphTag:{type:String,validator:t=>["div","p"].includes(t),default:"div"},contentStyle:Object,contentClass:[Object,Array,String],square:Boolean,flat:Boolean,dense:Boolean},computed:{editable(){return!this.readonly&&!this.disable},hasToolbar(){return this.toolbar&&this.toolbar.length>0},toolbarBackgroundClass(){if(this.toolbarBg)return`bg-${this.toolbarBg}`},buttonProps(){return{type:"a",flat:!0!==this.toolbarOutline&&!0!==this.toolbarPush,noWrap:!0,outline:this.toolbarOutline,push:this.toolbarPush,rounded:this.toolbarRounded,dense:!0,color:this.toolbarColor,disable:!this.editable,size:"sm"}},buttonDef(){const t=this.$q.lang.editor,e=this.$q.iconSet.editor;return{bold:{cmd:"bold",icon:e.bold,tip:t.bold,key:66},italic:{cmd:"italic",icon:e.italic,tip:t.italic,key:73},strike:{cmd:"strikeThrough",icon:e.strikethrough,tip:t.strikethrough,key:83},underline:{cmd:"underline",icon:e.underline,tip:t.underline,key:85},unordered:{cmd:"insertUnorderedList",icon:e.unorderedList,tip:t.unorderedList},ordered:{cmd:"insertOrderedList",icon:e.orderedList,tip:t.orderedList},subscript:{cmd:"subscript",icon:e.subscript,tip:t.subscript,htmlTip:"x2"},superscript:{cmd:"superscript",icon:e.superscript,tip:t.superscript,htmlTip:"x2"},link:{cmd:"link",disable:t=>t.caret&&!t.caret.can("link"),icon:e.hyperlink,tip:t.hyperlink,key:76},fullscreen:{cmd:"fullscreen",icon:e.toggleFullscreen,tip:t.toggleFullscreen,key:70},viewsource:{cmd:"viewsource",icon:e.viewSource,tip:t.viewSource},quote:{cmd:"formatBlock",param:"BLOCKQUOTE",icon:e.quote,tip:t.quote,key:81},left:{cmd:"justifyLeft",icon:e.left,tip:t.left},center:{cmd:"justifyCenter",icon:e.center,tip:t.center},right:{cmd:"justifyRight",icon:e.right,tip:t.right},justify:{cmd:"justifyFull",icon:e.justify,tip:t.justify},print:{type:"no-state",cmd:"print",icon:e.print,tip:t.print,key:80},outdent:{type:"no-state",disable:t=>t.caret&&!t.caret.can("outdent"),cmd:"outdent",icon:e.outdent,tip:t.outdent},indent:{type:"no-state",disable:t=>t.caret&&!t.caret.can("indent"),cmd:"indent",icon:e.indent,tip:t.indent},removeFormat:{type:"no-state",cmd:"removeFormat",icon:e.removeFormat,tip:t.removeFormat},hr:{type:"no-state",cmd:"insertHorizontalRule",icon:e.hr,tip:t.hr},undo:{type:"no-state",cmd:"undo",icon:e.undo,tip:t.undo,key:90},redo:{type:"no-state",cmd:"redo",icon:e.redo,tip:t.redo,key:89},h1:{cmd:"formatBlock",param:"H1",icon:e.heading1||e.heading,tip:t.heading1,htmlTip:`

${t.heading1}

`},h2:{cmd:"formatBlock",param:"H2",icon:e.heading2||e.heading,tip:t.heading2,htmlTip:`

${t.heading2}

`},h3:{cmd:"formatBlock",param:"H3",icon:e.heading3||e.heading,tip:t.heading3,htmlTip:`

${t.heading3}

`},h4:{cmd:"formatBlock",param:"H4",icon:e.heading4||e.heading,tip:t.heading4,htmlTip:`

${t.heading4}

`},h5:{cmd:"formatBlock",param:"H5",icon:e.heading5||e.heading,tip:t.heading5,htmlTip:`
${t.heading5}
`},h6:{cmd:"formatBlock",param:"H6",icon:e.heading6||e.heading,tip:t.heading6,htmlTip:`
${t.heading6}
`},p:{cmd:"formatBlock",param:this.paragraphTag.toUpperCase(),icon:e.heading,tip:t.paragraph},code:{cmd:"formatBlock",param:"PRE",icon:e.code,htmlTip:`${t.code}`},"size-1":{cmd:"fontSize",param:"1",icon:e.size1||e.size,tip:t.size1,htmlTip:`${t.size1}`},"size-2":{cmd:"fontSize",param:"2",icon:e.size2||e.size,tip:t.size2,htmlTip:`${t.size2}`},"size-3":{cmd:"fontSize",param:"3",icon:e.size3||e.size,tip:t.size3,htmlTip:`${t.size3}`},"size-4":{cmd:"fontSize",param:"4",icon:e.size4||e.size,tip:t.size4,htmlTip:`${t.size4}`},"size-5":{cmd:"fontSize",param:"5",icon:e.size5||e.size,tip:t.size5,htmlTip:`${t.size5}`},"size-6":{cmd:"fontSize",param:"6",icon:e.size6||e.size,tip:t.size6,htmlTip:`${t.size6}`},"size-7":{cmd:"fontSize",param:"7",icon:e.size7||e.size,tip:t.size7,htmlTip:`${t.size7}`}}},buttons(){const t=this.definitions||{},e=this.definitions||this.fonts?xr(!0,{},this.buttonDef,t,function(t,e,i,s={}){const o=Object.keys(s);if(0===o.length)return{};const n={default_font:{cmd:"fontName",param:t,icon:i,tip:e}};return o.forEach(t=>{const e=s[t];n[t]={cmd:"fontName",param:e,icon:i,tip:e,htmlTip:`${e}`}}),n}(this.defaultFont,this.$q.lang.editor.defaultFont,this.$q.iconSet.editor.font,this.fonts)):this.buttonDef;return this.toolbar.map(i=>i.map(i=>{if(i.options)return{type:"dropdown",icon:i.icon,label:i.label,size:"sm",dense:!0,fixedLabel:i.fixedLabel,fixedIcon:i.fixedIcon,highlight:i.highlight,list:i.list,options:i.options.map(t=>e[t])};const s=e[i];return s?"no-state"===s.type||t[i]&&(void 0===s.cmd||this.buttonDef[s.cmd]&&"no-state"===this.buttonDef[s.cmd].type)?s:Object.assign({type:"toggle"},s):{type:"slot",slot:i}}))},keys(){const t={},e=e=>{e.key&&(t[e.key]={cmd:e.cmd,param:e.param})};return this.buttons.forEach(t=>{t.forEach(t=>{t.options?t.options.forEach(e):e(t)})}),t},innerStyle(){return this.inFullscreen?this.contentStyle:[{minHeight:this.minHeight,height:this.height,maxHeight:this.maxHeight},this.contentStyle]},classes(){return`q-editor q-editor--${!0===this.isViewingSource?"source":"default"}`+(!0===this.disable?" disabled":"")+(!0===this.inFullscreen?" fullscreen column":"")+(!0===this.square?" q-editor--square no-border-radius":"")+(!0===this.flat?" q-editor--flat":"")+(!0===this.dense?" q-editor--dense":"")+` q-editor--${this.darkSuffix} q-${this.darkSuffix}`},innerClass(){return[this.contentClass,{col:this.inFullscreen,"overflow-auto":this.inFullscreen||this.maxHeight}]},attrs(){return!0===this.disable?{"aria-disabled":"true"}:!0===this.readonly?{"aria-readonly":"true"}:void 0},onEditor(){return{focusin:this.__onFocusin,focusout:this.__onFocusout}}},data(){return{lastEmit:this.value,editLinkUrl:null,isViewingSource:!1}},watch:{value(t){this.lastEmit!==t&&(this.lastEmit=t,this.__setContent(t,!0))}},methods:{__onInput(){if(void 0!==this.$refs.content){const t=!0===this.isViewingSource?this.$refs.content.innerText:this.$refs.content.innerHTML;t!==this.value&&(this.lastEmit=t,this.$emit("input",t))}},__onKeydown(t){if(this.$emit("keydown",t),!0!==t.ctrlKey||!0===Pe(t))return this.refreshToolbar(),void(this.$q.platform.is.ie&&this.$nextTick(this.__onInput));const e=t.keyCode,i=this.keys[e];if(void 0!==i){const{cmd:e,param:s}=i;w(t),this.runCmd(e,s,!1)}},__onClick(t){this.refreshToolbar(),this.$emit("click",t)},__onBlur(t){if(void 0!==this.$refs.content){const{scrollTop:t,scrollHeight:e}=this.$refs.content;this.__offsetBottom=e-t}!0!==this.$q.platform.is.ie&&this.caret.save(),this.$emit("blur",t)},__onFocus(t){this.$nextTick(()=>{void 0!==this.$refs.content&&void 0!==this.__offsetBottom&&(this.$refs.content.scrollTop=this.$refs.content.scrollHeight-this.__offsetBottom)}),this.$emit("focus",t)},__onFocusin(t){if(!0===this.$el.contains(t.target)&&(null===t.relatedTarget||!0!==this.$el.contains(t.relatedTarget))){const t=`inner${!0===this.isViewingSource?"Text":"HTML"}`;this.caret.restorePosition(this.$refs.content[t].length),this.refreshToolbar()}},__onFocusout(t){!0!==this.$el.contains(t.target)||null!==t.relatedTarget&&!0===this.$el.contains(t.relatedTarget)||(this.caret.savePosition(),this.refreshToolbar())},__onPointerStart(t){this.__offsetBottom=void 0,void 0!==this.qListeners[t.type]&&this.$emit(t.type,t)},__onSelectionchange(){this.caret.save()},runCmd(t,e,i=!0){this.focus(),this.caret.restore(),this.caret.apply(t,e,()=>{this.focus(),this.caret.save(),!0!==this.$q.platform.is.ie&&!0!==this.$q.platform.is.edge||this.$nextTick(this.__onInput),i&&this.refreshToolbar()})},refreshToolbar(){setTimeout(()=>{this.editLinkUrl=null,this.$forceUpdate()},1)},focus(){void 0!==this.$refs.content&&this.$refs.content.focus({preventScroll:!0})},getContentEl(){return this.$refs.content},__setContent(t,e){if(void 0!==this.$refs.content){!0===e&&this.caret.savePosition();const i=`inner${!0===this.isViewingSource?"Text":"HTML"}`;this.$refs.content[i]=t,!0===e&&(this.caret.restorePosition(this.$refs.content[i].length),this.refreshToolbar())}}},created(){!1===i&&(document.execCommand("defaultParagraphSeparator",!1,this.paragraphTag),this.defaultFont=window.getComputedStyle(document.body).fontFamily)},mounted(){this.caret=new class{constructor(t,e){this.el=t,this.vm=e,this._range=null}get selection(){if(this.el){const t=document.getSelection();if(fr(t.anchorNode,this.el,!0)&&fr(t.focusNode,this.el,!0))return t}return null}get hasSelection(){return null!==this.selection&&this.selection.toString().length>0}get range(){const t=this.selection;return null!==t&&t.rangeCount?t.getRangeAt(0):this._range}get parent(){const t=this.range;if(null!==t){const e=t.startContainer;return e.nodeType===document.ELEMENT_NODE?e:e.parentNode}return null}get blockParent(){const t=this.parent;return null!==t?function t(e,i){if(i&&e===i)return null;const s=e.nodeName.toLowerCase();if(!0===["div","li","ul","ol","blockquote"].includes(s))return e;const o=(window.getComputedStyle?window.getComputedStyle(e):e.currentStyle).display;return"block"===o||"table"===o?e:t(e.parentNode)}(t,this.el):null}save(t=this.range){null!==t&&(this._range=t)}restore(t=this._range){const e=document.createRange(),i=document.getSelection();null!==t?(e.setStart(t.startContainer,t.startOffset),e.setEnd(t.endContainer,t.endOffset),i.removeAllRanges(),i.addRange(e)):(i.selectAllChildren(this.el),i.collapseToEnd())}savePosition(){let t,e=-1;const i=document.getSelection(),s=this.el.parentNode;if(i.focusNode&&fr(i.focusNode,s))for(t=i.focusNode,e=i.focusOffset;t&&t!==s;)t!==this.el&&t.previousSibling?e+=(t=t.previousSibling).textContent.length:t=t.parentNode;this.savedPos=e}restorePosition(t=0){if(this.savedPos>0&&this.savedPos0)if(e.nodeType===Node.TEXT_NODE)e.textContent.length\n \n \n Print - ${document.title}\n \n \n
${this.el.innerHTML}
\n \n \n `),t.print(),void t.close()}if("link"===t){const t=this.getParentAttribute("href");if(null===t){const t=this.selectWord(this.selection),e=t?t.toString():"";if(!(e.length||this.range&&this.range.cloneContents().querySelector("img")))return;this.vm.editLinkUrl=_r.test(e)?e:"https://",document.execCommand("createLink",!1,this.vm.editLinkUrl),this.save(t.getRangeAt(0))}else this.vm.editLinkUrl=t,this.range.selectNodeContents(this.parent),this.save();return}if("fullscreen"===t)return this.vm.toggleFullscreen(),void i();if("viewsource"===t)return this.vm.isViewingSource=!1===this.vm.isViewingSource,this.vm.__setContent(this.vm.value),void i()}document.execCommand(t,!1,e),i()}selectWord(t){if(null===t||!0!==t.isCollapsed||void 0===t.modify)return t;const e=document.createRange();e.setStart(t.anchorNode,t.anchorOffset),e.setEnd(t.focusNode,t.focusOffset);const i=e.collapsed?["backward","forward"]:["forward","backward"];e.detach();const s=t.focusNode,o=t.focusOffset;return t.collapse(t.anchorNode,t.anchorOffset),t.modify("move",i[0],"character"),t.modify("move",i[1],"word"),t.extend(s,o),t.modify("extend",i[1],"character"),t.modify("extend",i[0],"word"),t}}(this.$refs.content,this),this.__setContent(this.value),this.refreshToolbar(),document.addEventListener("selectionchange",this.__onSelectionchange)},beforeDestroy(){document.removeEventListener("selectionchange",this.__onSelectionchange)},render(t){let e;if(this.hasToolbar){const i=[t("div",{key:"qedt_top",staticClass:"q-editor__toolbar row no-wrap scroll-x",class:this.toolbarBackgroundClass},gr(t,this))];null!==this.editLinkUrl&&i.push(t("div",{key:"qedt_btm",staticClass:"q-editor__toolbar row no-wrap items-center scroll-x",class:this.toolbarBackgroundClass},function(t,e,i){if(e.caret){const s=e.toolbarColor||e.toolbarTextColor;let o=e.editLinkUrl;const n=()=>{e.caret.restore(),o!==e.editLinkUrl&&document.execCommand("createLink",!1,""===o?" ":o),e.editLinkUrl=null,!0===i&&e.$nextTick(e.__onInput)};return[t("div",{staticClass:"q-mx-xs",class:`text-${s}`},[`${e.$q.lang.editor.url}: `]),t("input",{key:"qedt_btm_input",staticClass:"col q-editor__link-input",domProps:{value:o},on:{input:t=>{S(t),o=t.target.value},keydown:t=>{if(!0!==Pe(t))switch(t.keyCode){case 13:return x(t),n();case 27:x(t),e.caret.restore(),e.editLinkUrl&&"https://"!==e.editLinkUrl||document.execCommand("unlink"),e.editLinkUrl=null}}}}),pr(t,[t(Ze,{key:"qedt_btm_rem",attrs:{tabindex:-1},props:{...e.buttonProps,label:e.$q.lang.label.remove,noCaps:!0},on:{click:()=>{e.caret.restore(),document.execCommand("unlink"),e.editLinkUrl=null,!0===i&&e.$nextTick(e.__onInput)}}}),t(Ze,{key:"qedt_btm_upd",props:{...e.buttonProps,label:e.$q.lang.label.update,noCaps:!0},on:{click:n}})])]}}(t,this,this.$q.platform.is.ie))),e=t("div",{key:"toolbar_ctainer",staticClass:"q-editor__toolbars-container relative-position",directives:[Qo]},i)}const s={...this.qListeners,input:this.__onInput,keydown:this.__onKeydown,click:this.__onClick,blur:this.__onBlur,focus:this.__onFocus,mousedown:this.__onPointerStart,touchstart:this.__onPointerStart};return t("div",{style:{height:!0===this.inFullscreen?"100%":null},class:this.classes,attrs:this.attrs,on:this.onEditor},[e,t("div",{ref:"content",staticClass:"q-editor__content",style:this.innerStyle,class:this.innerClass,attrs:{contenteditable:this.editable,placeholder:this.placeholder},domProps:i?{innerHTML:this.value}:void 0,on:s})])}}),Cr=e.default.extend({name:"QItemLabel",mixins:[Ht],props:{overline:Boolean,caption:Boolean,header:Boolean,lines:[Number,String]},computed:{classes(){return{"q-item__label--overline text-overline":this.overline,"q-item__label--caption text-caption":this.caption,"q-item__label--header":this.header,ellipsis:1===parseInt(this.lines,10)}},style(){if(void 0!==this.lines&&parseInt(this.lines,10)>1)return{overflow:"hidden",display:"-webkit-box","-webkit-box-orient":"vertical","-webkit-line-clamp":this.lines}}},render(t){return t("div",{staticClass:"q-item__label",style:this.style,class:this.classes,on:{...this.qListeners}},jt(this,"default"))}}),kr=e.default.extend({name:"QSlideTransition",props:{appear:Boolean,duration:{type:Number,default:300}},methods:{__begin(t,e,i){t.style.overflowY="hidden",void 0!==e&&(t.style.height=`${e}px`),t.style.transition=`height ${this.duration}ms cubic-bezier(.25, .8, .50, 1)`,this.animating=!0,this.done=i},__end(t,e){t.style.overflowY=null,t.style.height=null,t.style.transition=null,this.__cleanup(),e!==this.lastEvent&&this.$emit(e)},__cleanup(){this.done&&this.done(),this.done=null,this.animating=!1,clearTimeout(this.timer),clearTimeout(this.timerFallback),void 0!==this.el&&this.el.removeEventListener("transitionend",this.animListener),this.animListener=null}},beforeDestroy(){this.animating&&this.__cleanup()},render(t){return t("transition",{key:"tr",props:{css:!1,appear:this.appear},on:$t(this,"tr",{enter:(t,e)=>{let i=0;this.el=t,!0===this.animating?(this.__cleanup(),i=t.offsetHeight===t.scrollHeight?0:void 0):this.lastEvent="hide",this.__begin(t,i,e),this.timer=setTimeout(()=>{t.style.height=`${t.scrollHeight}px`,this.animListener=(e=>{Object(e)===e&&e.target!==t||this.__end(t,"show")}),t.addEventListener("transitionend",this.animListener),this.timerFallback=setTimeout(this.animListener,1.1*this.duration)},100)},leave:(t,e)=>{let i;this.el=t,!0===this.animating?this.__cleanup():(this.lastEvent="show",i=t.scrollHeight),this.__begin(t,i,e),this.timer=setTimeout(()=>{t.style.height=0,this.animListener=(e=>{Object(e)===e&&e.target!==t||this.__end(t,"hide")}),t.addEventListener("transitionend",this.animListener),this.timerFallback=setTimeout(this.animListener,1.1*this.duration)},100)}})},jt(this,"default"))}});const qr={true:"inset",item:"item-inset","item-thumbnail":"item-thumbnail-inset"},$r={xs:2,sm:4,md:8,lg:16,xl:24};var Tr=e.default.extend({name:"QSeparator",mixins:[ce,Ht],props:{spaced:[Boolean,String],inset:[Boolean,String],vertical:Boolean,color:String,size:String},computed:{orientation(){return!0===this.vertical?"vertical":"horizontal"},classPrefix(){return` q-separator--${this.orientation}`},insetClass(){return!1!==this.inset?`${this.classPrefix}-${qr[this.inset]}`:""},classes(){return`q-separator${this.classPrefix}${this.insetClass}`+(void 0!==this.color?` bg-${this.color}`:"")+` q-separator--${this.darkSuffix}`},style(){const t={};if(void 0!==this.size&&(t[!0===this.vertical?"width":"height"]=this.size),!1!==this.spaced){const e=!0===this.spaced?`${$r.md}px`:this.spaced in $r?`${$r[this.spaced]}px`:this.spaced,i=!0===this.vertical?["Left","Right"]:["Top","Bottom"];t[`margin${i[0]}`]=t[`margin${i[1]}`]=e}return t},attrs(){return{"aria-orientation":this.orientation}}},render(t){return t("hr",{staticClass:"q-separator",class:this.classes,style:this.style,attrs:this.attrs,on:{...this.qListeners}})}});const Mr="q:expansion-item:close",Lr=Object.keys(we);var Er=e.default.extend({name:"QExpansionItem",mixins:[ce,li,ci],props:{...we,icon:String,label:String,labelLines:[Number,String],caption:String,captionLines:[Number,String],dense:Boolean,toggleAriaLabel:String,expandIcon:String,expandedIcon:String,expandIconClass:[Array,String,Object],duration:Number,headerInsetLevel:Number,contentInsetLevel:Number,expandSeparator:Boolean,defaultOpened:Boolean,hideExpandIcon:Boolean,expandIconToggle:Boolean,switchToggleSide:Boolean,denseToggle:Boolean,group:String,popup:Boolean,headerStyle:[Array,String,Object],headerClass:[Array,String,Object]},data(){return{showing:void 0!==this.value?this.value:this.defaultOpened}},watch:{showing(t){!0===t&&(!0!==this.shouldRenderContent&&(this.shouldRenderContent=!0),void 0!==this.group&&this.$root.$emit(Mr,this))},group(t,e){void 0!==t&&void 0===e?this.$root.$on(Mr,this.__eventHandler):void 0===t&&void 0!==e&&this.$root.$off(Mr,this.__eventHandler)}},computed:{classes(){return`q-expansion-item--${!0===this.showing?"expanded":"collapsed"}`+` q-expansion-item--${!0===this.popup?"popup":"standard"}`},contentStyle(){if(void 0!==this.contentInsetLevel){return{["padding"+(!0===this.$q.lang.rtl?"Right":"Left")]:56*this.contentInsetLevel+"px"}}},hasLink(){return!0!==this.disable&&(void 0!==this.href||void 0!==this.to&&null!==this.to&&""!==this.to)},linkProps(){const t={};return Lr.forEach(e=>{t[e]=this[e]}),t},isClickable(){return!0===this.hasLink||!0!==this.expandIconToggle},expansionIcon(){return void 0!==this.expandedIcon&&!0===this.showing?this.expandedIcon:this.expandIcon||this.$q.iconSet.expansionItem[!0===this.denseToggle?"denseIcon":"icon"]},activeToggleIcon(){return!0!==this.disable&&(!0===this.hasLink||!0===this.expandIconToggle)},headerSlotScope(){return{expanded:!0===this.showing,detailsId:this.targetUid,toggle:this.toggle,show:this.show,hide:this.hide}},toggleAriaAttrs(){const t=void 0!==this.toggleAriaLabel?this.toggleAriaLabel:this.$q.lang.label[!0===this.showing?"collapse":"expand"](this.label);return{role:"button","aria-expanded":!0===this.showing?"true":"false","aria-owns":this.targetUid,"aria-controls":this.targetUid,"aria-label":t}}},methods:{__onHeaderClick(t){!0!==this.hasLink&&this.toggle(t),this.$emit("click",t)},__toggleIconKeyboard(t){13===t.keyCode&&this.__toggleIcon(t)},__toggleIcon(t){!0===this.$q.interaction.isPointer&&void 0!==this.$refs.blurTarget&&document.activeElement!==this.$refs.blurTarget?this.$refs.blurTarget.focus():!0===this.$q.interaction.isKeyboard&&document.activeElement===this.$refs.blurTarget&&this.$refs.blurTarget.parentNode.focus(),this.toggle(t),w(t)},__eventHandler(t){this!==t&&this.group===t.group&&this.hide()},__getToggleIcon(t){const e={staticClass:`q-focusable relative-position cursor-pointer${!0===this.denseToggle&&!0===this.switchToggleSide?" items-end":""}`,class:this.expandIconClass,props:{side:!0!==this.switchToggleSide,avatar:this.switchToggleSide}},i=[t(le,{staticClass:"q-expansion-item__toggle-icon",class:void 0===this.expandedIcon&&!0===this.showing?"q-expansion-item__toggle-icon--rotated":void 0,props:{name:this.expansionIcon}})];return!0===this.activeToggleIcon&&(Object.assign(e,{key:"inpExt",attrs:{tabindex:0,...this.toggleAriaAttrs},on:$t(this,"inpExt",{click:this.__toggleIcon,keyup:this.__toggleIconKeyboard})}),i.unshift(t("div",{ref:"blurTarget",staticClass:"q-expansion-item__toggle-focus q-icon q-focus-helper q-focus-helper--rounded",attrs:{tabindex:-1}}))),t(cr,e,i)},__getHeader(t){let e;void 0!==this.$scopedSlots.header?e=[].concat(this.$scopedSlots.header(this.headerSlotScope)):(e=[t(cr,[t(Cr,{props:{lines:this.labelLines}},[this.label||""]),this.caption?t(Cr,{props:{lines:this.captionLines,caption:!0}},[this.caption]):null])],this.icon&&e[!0===this.switchToggleSide?"push":"unshift"](t(cr,{props:{side:!0===this.switchToggleSide,avatar:!0!==this.switchToggleSide}},[t(le,{props:{name:this.icon}})]))),!0!==this.disable&&!0!==this.hideExpandIcon&&e[!0===this.switchToggleSide?"unshift":"push"](this.__getToggleIcon(t));const i={ref:"item",style:this.headerStyle,class:this.headerClass,props:{dark:this.dark,disable:this.disable,dense:this.dense,insetLevel:this.headerInsetLevel}};return!0===this.isClickable&&(i.props.clickable=!0,!0===this.hasLink?Object.assign(i.props,this.linkProps):i.attrs=this.toggleAriaAttrs,i.on={...this.qListeners,click:this.__onHeaderClick}),t(dr,i,e)},__getContent(t){const e=[this.__getHeader(t),t(kr,{key:"slide",props:{duration:this.duration},on:$t(this,"slide",{show:()=>{this.$emit("after-show")},hide:()=>{this.$emit("after-hide")}})},[t("div",{staticClass:"q-expansion-item__content relative-position",style:this.contentStyle,attrs:{id:this.targetUid},directives:[{name:"show",value:this.showing}]},!0===this.shouldRenderContent?jt(this,"default"):void 0)])];return this.expandSeparator&&e.push(t(Tr,{staticClass:"q-expansion-item__border q-expansion-item__border--top absolute-top",props:{dark:this.dark}}),t(Tr,{staticClass:"q-expansion-item__border q-expansion-item__border--bottom absolute-bottom",props:{dark:this.dark}})),e}},render(t){return t("div",{staticClass:"q-expansion-item q-item-type",class:this.classes},[t("div",{staticClass:"q-expansion-item__container relative-position"},this.__getContent(t))])},created(){this.shouldRenderContent=!0===this.showing,void 0!==this.group&&this.$root.$on(Mr,this.__eventHandler),this.targetUid=`e_${vs()}`},beforeDestroy(){void 0!==this.group&&this.$root.$off(Mr,this.__eventHandler)}});const Ar=["top","right","bottom","left"];var Br={mixins:[Ht],props:{type:{type:String,default:"a"},outline:Boolean,push:Boolean,flat:Boolean,unelevated:Boolean,color:String,textColor:String,glossy:Boolean,square:Boolean,padding:String,label:{type:[String,Number],default:""},labelPosition:{type:String,default:"right",validator:t=>Ar.includes(t)},externalLabel:Boolean,hideLabel:{type:Boolean},labelClass:[Array,String,Object],labelStyle:[Array,String,Object],disable:Boolean,tabindex:[Number,String]},computed:{formClass(){return`q-fab--form-${!0===this.square?"square":"rounded"}`},stacked(){return!1===this.externalLabel&&["top","bottom"].includes(this.labelPosition)},labelProps(){if(!0===this.externalLabel){const t=null===this.hideLabel?!1===this.showing:this.hideLabel;return{action:"push",data:{staticClass:"q-fab__label q-tooltip--style q-fab__label--external"+` q-fab__label--external-${this.labelPosition}`+(!0===t?" q-fab__label--external-hidden":""),style:this.labelStyle,class:this.labelClass}}}return{action:["left","top"].includes(this.labelPosition)?"unshift":"push",data:{staticClass:`q-fab__label q-fab__label--internal q-fab__label--internal-${this.labelPosition}`+(!0===this.hideLabel?" q-fab__label--internal-hidden":""),style:this.labelStyle,class:this.labelClass}}}}};const Pr=["up","right","down","left"],zr=["left","center","right"];var Ir=e.default.extend({name:"QFab",inheritAttrs:!1,mixins:[Br,At,ci],provide(){return{__qFab:this}},props:{icon:String,activeIcon:String,hideIcon:Boolean,hideLabel:{default:null},direction:{type:String,default:"right",validator:t=>Pr.includes(t)},persistent:Boolean,verticalActionsAlign:{type:String,default:"center",validator:t=>zr.includes(t)}},data(){return{showing:!0===this.value}},computed:{hideOnRouteChange(){return!0!==this.persistent},classes(){return`q-fab--align-${this.verticalActionsAlign} ${this.formClass}`+(!0===this.showing?" q-fab--opened":"")},actionsClasses(){return`q-fab__actions--${this.direction}`+(!0===this.showing?" q-fab__actions--opened":"")},actionsAttrs(){const t={id:this.targetUid};return!0===this.showing?t.role="menu":t["aria-hidden"]="true",t},iconHolderClasses(){return!0===this.showing?"q-fab__icon-holder--opened":""},attrs(){return{"aria-expanded":!0===this.showing?"true":"false","aria-haspopup":"true","aria-controls":this.targetUid,"aria-owns":this.targetUid,...this.qAttrs}},slotScope(){return{opened:this.showing}}},methods:{__onChildClick(t){this.hide(t),this.$refs.trigger&&this.$refs.trigger.$el&&this.$refs.trigger.$el.focus()},__getIcon(t,e,i){const s=this.$scopedSlots[e],o=`q-fab__${e} absolute-full`;return void 0===s?t(le,{staticClass:o,props:{name:this[i]||this.$q.iconSet.fab[i]}}):t("div",{staticClass:o},s(this.slotScope))}},render(t){const e=[];return!0!==this.hideIcon&&e.push(t("div",{staticClass:"q-fab__icon-holder",class:this.iconHolderClasses},[this.__getIcon(t,"icon","icon"),this.__getIcon(t,"active-icon","activeIcon")])),""===this.label&&void 0===this.$scopedSlots.label||e[this.labelProps.action](t("div",this.labelProps.data,void 0!==this.$scopedSlots.label?this.$scopedSlots.label(this.slotScope):[this.label])),t("div",{staticClass:"q-fab z-fab row inline justify-center",class:this.classes,on:{...this.qListeners}},[t(Ze,{key:"tog",ref:"trigger",class:this.formClass,props:{...this.$props,noWrap:!0,stack:this.stacked,align:void 0,icon:void 0,label:void 0,noCaps:!0,fab:!0},attrs:this.attrs,on:$t(this,"tog",{click:this.toggle})},Wt(e,this,"tooltip")),t("div",{staticClass:"q-fab__actions flex no-wrap inline",class:this.actionsClasses,attrs:this.actionsAttrs},jt(this,"default"))])},created(){this.targetUid=`fb_${vs()}`}});const Or={start:"self-end",center:"self-center",end:"self-start"},Rr=Object.keys(Or);var Fr=e.default.extend({name:"QFabAction",mixins:[Br],props:{icon:{type:String,default:""},anchor:{type:String,validator:t=>Rr.includes(t)},to:[String,Object],replace:Boolean},inject:{__qFab:{default:()=>({showing:!0,__onChildClick:m})}},computed:{classes(){const t=Or[this.anchor];return this.formClass+(void 0!==t?` ${t}`:"")},onEvents(){return{...this.qListeners,click:this.click}},isDisabled(){return!0!==this.__qFab.showing||!0===this.disable}},methods:{click(t){this.__qFab.__onChildClick(t),this.$emit("click",t)}},render(t){const e=[];return void 0!==this.$scopedSlots.icon?e.push(this.$scopedSlots.icon()):""!==this.icon&&e.push(t(le,{props:{name:this.icon}})),""===this.label&&void 0===this.$scopedSlots.label||e[this.labelProps.action](t("div",this.labelProps.data,void 0!==this.$scopedSlots.label?this.$scopedSlots.label():[this.label])),t(Ze,{class:this.classes,props:{...this.$props,noWrap:!0,stack:this.stacked,icon:void 0,label:void 0,noCaps:!0,fabMini:!0,disable:this.isDisabled},on:this.onEvents},Wt(e,this,"default"))}});const Dr=[!0,!1,"ondemand"];var Vr={props:{value:{},error:{type:Boolean,default:null},errorMessage:String,noErrorIcon:Boolean,rules:Array,reactiveRules:Boolean,lazyRules:{type:[Boolean,String],validator:t=>Dr.includes(t)}},data:()=>({isDirty:null,innerError:!1,innerErrorMessage:void 0}),watch:{value(){this.__validateIfNeeded()},disable(t){!0===t?this.__resetValidation():this.__validateIfNeeded(!0)},reactiveRules:{handler(t){!0===t?void 0===this.unwatchRules&&(this.unwatchRules=this.$watch("rules",()=>{this.__validateIfNeeded(!0)})):void 0!==this.unwatchRules&&(this.unwatchRules(),this.unwatchRules=void 0)},immediate:!0},focused(t){!0===t?null===this.isDirty&&(this.isDirty=!1):!1===this.isDirty&&(this.isDirty=!0,!0===this.hasActiveRules&&"ondemand"!==this.lazyRules&&!1===this.innerLoading&&this.debouncedValidate())},hasError(t){const e=document.getElementById(this.targetUid);null!==e&&e.setAttribute("aria-invalid",!0===t)}},computed:{hasRules(){return void 0!==this.rules&&null!==this.rules&&this.rules.length>0},hasActiveRules(){return!0!==this.disable&&!0===this.hasRules},hasError(){return!0===this.error||!0===this.innerError},computedErrorMessage(){return"string"==typeof this.errorMessage&&this.errorMessage.length>0?this.errorMessage:this.innerErrorMessage}},created(){this.debouncedValidate=j(this.validate,0)},mounted(){this.validateIndex=0},beforeDestroy(){void 0!==this.unwatchRules&&this.unwatchRules(),this.debouncedValidate.cancel()},methods:{resetValidation(){this.isDirty=null,this.__resetValidation()},validate(t=this.value){if(!0!==this.hasActiveRules)return!0;const e=++this.validateIndex,i=!0!==this.innerLoading?()=>!0!==this.isDirty&&(this.isDirty=!0):()=>{},s=(t,e)=>{!0===t&&i(),this.innerError!==t&&(this.innerError=t);const s=e||void 0;this.innerErrorMessage!==s&&(this.innerErrorMessage=s),!1!==this.innerLoading&&(this.innerLoading=!1)},o=[];for(let e=0;e{if(void 0===t||!1===Array.isArray(t)||0===t.length)return e===this.validateIndex&&s(!1),!0;const i=t.find(t=>!1===t||"string"==typeof t);return e===this.validateIndex&&s(void 0!==i,i),void 0===i},t=>(e===this.validateIndex&&(console.error(t),s(!0)),!1)))},__resetValidation(){this.debouncedValidate.cancel(),this.validateIndex++,this.innerLoading=!1,this.innerError=!1,this.innerErrorMessage=void 0},__validateIfNeeded(t){!0===this.hasActiveRules&&"ondemand"!==this.lazyRules&&(!0===this.isDirty||!0!==this.lazyRules&&!0!==t)&&this.debouncedValidate()}}};function Nr(t){return void 0===t?`f_${vs()}`:t}const Hr=new WeakMap;var jr=e.default.extend({name:"QField",mixins:[ce,Vr,At],inheritAttrs:!1,props:{label:String,stackLabel:Boolean,hint:String,hideHint:Boolean,prefix:String,suffix:String,labelColor:String,color:String,bgColor:String,filled:Boolean,outlined:Boolean,outlinedMd:Boolean,borderless:Boolean,standout:[Boolean,String],square:Boolean,loading:Boolean,labelSlot:Boolean,bottomSlots:Boolean,hideBottomSpace:Boolean,rounded:Boolean,dense:Boolean,itemAligned:Boolean,counter:Boolean,clearable:Boolean,clearIcon:String,disable:Boolean,readonly:Boolean,autofocus:Boolean,for:String,maxlength:[Number,String],maxValues:[Number,String]},data(){return{focused:!1,targetUid:Nr(this.for),innerLoading:!1}},watch:{for(t){this.targetUid=Nr(t)}},computed:{editable(){return!0!==this.disable&&!0!==this.readonly},hasValue(){const t=void 0===this.__getControl?this.value:this.innerValue;return void 0!==t&&null!==t&&(""+t).length>0},computedCounter(){if(!1!==this.counter){const t="string"==typeof this.value||"number"==typeof this.value?(""+this.value).length:!0===Array.isArray(this.value)?this.value.length:0,e=void 0!==this.maxlength?this.maxlength:this.maxValues;return t+(void 0!==e?" / "+e:"")}},floatingLabel(){return!0===this.stackLabel||!0===this.focused||"number"==typeof this.inputValue||"string"==typeof this.inputValue&&this.inputValue.length>0||!0!==this.hideSelected&&!0===this.hasValue||void 0!==this.displayValue&&null!==this.displayValue&&(""+this.displayValue).length>0},shouldRenderBottom(){return!0===this.bottomSlots||void 0!==this.hint||!0===this.hasRules||!0===this.counter||null!==this.error},classes(){const t="outlined"===this.styleType&&!0===this.outlinedMd?"md":"std";return{[this.fieldClass]:void 0!==this.fieldClass,[`q-field--${this.styleType}`]:!0,[`q-field--outlined--${t}`]:"outlined"===this.styleType,"q-field--rounded":this.rounded,"q-field--square":this.square,"q-field--focused":!0===this.focused,"q-field--highlighted":!0===this.focused||!0===this.hasError,"q-field--float":this.floatingLabel,"q-field--labeled":this.hasLabel,[`q-field--labeled--${t}`]:this.hasLabel,"q-field--dense":this.dense,"q-field--item-aligned q-item-type":this.itemAligned,[`q-field--${this.darkSuffix}`]:!0,"q-field--auto-height":void 0===this.__getControl,"q-field--with-bottom":!0!==this.hideBottomSpace&&!0===this.shouldRenderBottom,"q-field--error":this.hasError,"q-field--readonly":!0===this.readonly&&!0!==this.disable,"q-field--disabled":!0===this.disable}},styleType(){return!0===this.filled?"filled":!0===this.outlined||!0===this.outlinedMd?"outlined":!0===this.borderless?"borderless":this.standout?"standout":"standard"},contentClass(){const t=[];if(!0===this.hasError)t.push("text-negative");else{if("string"==typeof this.standout&&this.standout.length>0&&!0===this.focused)return this.standout;void 0!==this.color&&t.push("text-"+this.color)}return void 0!==this.bgColor&&t.push(`bg-${this.bgColor}`),t},hasLabel(){return!0===this.labelSlot||void 0!==this.label},labelClass(){if(void 0!==this.labelColor&&!0!==this.hasError)return"text-"+this.labelColor},controlSlotScope(){return{id:this.targetUid,field:this.$el,editable:this.editable,focused:this.focused,floatingLabel:this.floatingLabel,value:this.value,emitValue:this.__emitValue}},bottomSlotScope(){return{id:this.targetUid,field:this.$el,editable:this.editable,focused:this.focused,value:this.value,errorMessage:this.computedErrorMessage}},attrs(){const t={for:this.targetUid};return!0===this.disable?t["aria-disabled"]="true":!0===this.readonly&&(t["aria-readonly"]="true"),t}},methods:{focus(){this.__focus()},blur(){const t=document.activeElement;null!==t&&this.$el.contains(t)&&t.blur()},__focus(){const t=document.activeElement;let e=this.$refs.target;void 0===e||null!==t&&t.id===this.targetUid||(!0===e.hasAttribute("tabindex")||(e=e.querySelector("[tabindex]")),null!==e&&bi(e))},__getContent(t){const e=[];return void 0!==this.$scopedSlots.prepend&&e.push(t("div",{staticClass:"q-field__prepend q-field__marginal row no-wrap items-center",key:"prepend",on:this.slotsEvents},this.$scopedSlots.prepend())),e.push(t("div",{staticClass:"q-field__control-container col relative-position row no-wrap q-anchor--skip"},this.__getControlContainer(t))),!0===this.hasError&&!1===this.noErrorIcon&&e.push(this.__getInnerAppendNode(t,"error",[t(le,{props:{name:this.$q.iconSet.field.error,color:"negative"}})])),!0===this.loading||!0===this.innerLoading?e.push(this.__getInnerAppendNode(t,"inner-loading-append",void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():[t($e,{props:{color:this.color}})])):!0===this.clearable&&!0===this.hasValue&&!0===this.editable&&e.push(this.__getInnerAppendNode(t,"inner-clearable-append",[t(le,{staticClass:"q-field__focusable-action",props:{tag:"button",name:this.clearIcon||this.$q.iconSet.field.clear},attrs:Et,on:this.clearableEvents})])),void 0!==this.$scopedSlots.append&&e.push(t("div",{staticClass:"q-field__append q-field__marginal row no-wrap items-center",key:"append",on:this.slotsEvents},this.$scopedSlots.append())),void 0!==this.__getInnerAppend&&e.push(this.__getInnerAppendNode(t,"inner-append",this.__getInnerAppend(t))),void 0!==this.__getControlChild&&e.push(this.__getControlChild(t)),e},__getControlContainer(t){const e=[];void 0!==this.prefix&&null!==this.prefix&&e.push(t("div",{staticClass:"q-field__prefix no-pointer-events row items-center"},[this.prefix])),!0===this.hasShadow&&void 0!==this.__getShadowControl&&e.push(this.__getShadowControl(t)),void 0!==this.__getControl?e.push(this.__getControl(t)):void 0!==this.$scopedSlots.rawControl?e.push(this.$scopedSlots.rawControl()):void 0!==this.$scopedSlots.control&&e.push(t("div",{ref:"target",staticClass:"q-field__native row",attrs:{tabindex:-1,...this.qAttrs,"data-autofocus":this.autofocus||void 0}},this.$scopedSlots.control(this.controlSlotScope)));const i=[jt(this,"label",this.label)];return!0===this.outlinedMd&&i.unshift(t("div",{staticClass:"q-field__label-back",style:{backgroundColor:this.__getBgColor()}})),!0===this.hasLabel&&e.push(t("div",{staticClass:"q-field__label no-pointer-events absolute ellipsis",class:this.labelClass},i)),void 0!==this.suffix&&null!==this.suffix&&e.push(t("div",{staticClass:"q-field__suffix no-pointer-events row items-center"},[this.suffix])),e.concat(void 0!==this.__getDefaultSlot?this.__getDefaultSlot(t):jt(this,"default"))},__getBottom(t){let e,i;!0===this.hasError?(i="q--slot-error",void 0!==this.$scopedSlots.error?e=this.$scopedSlots.error(this.bottomSlotScope):void 0!==this.computedErrorMessage&&(e=[t("div",{attrs:{role:"alert"}},[this.computedErrorMessage])],i=this.computedErrorMessage)):!0===this.hideHint&&!0!==this.focused||(i="q--slot-hint",void 0!==this.$scopedSlots.hint?e=this.$scopedSlots.hint(this.bottomSlotScope):void 0!==this.hint&&(e=[t("div",[this.hint])],i=this.hint));const s=!0===this.counter||void 0!==this.$scopedSlots.counter;if(!0===this.hideBottomSpace&&!1===s&&void 0===e)return;const o=t("div",{key:i,staticClass:"q-field__messages col"},e);return t("div",{staticClass:"q-field__bottom row items-start q-field__bottom--"+(!0!==this.hideBottomSpace?"animated":"stale"),on:{click:x}},[!0===this.hideBottomSpace?o:t("transition",{props:{name:"q-transition--field-message"}},[o]),!0===s?t("div",{staticClass:"q-field__counter"},void 0!==this.$scopedSlots.counter?this.$scopedSlots.counter():[this.computedCounter]):null])},__getInnerAppendNode:(t,e,i)=>null===i?null:t("div",{staticClass:"q-field__append q-field__marginal row no-wrap items-center q-anchor--skip",key:e},i),__onControlPopupShow(t){void 0!==t&&S(t),this.$emit("popup-show",t),this.hasPopupOpen=!0,this.__onControlFocusin(t)},__onControlPopupHide(t){void 0!==t&&S(t),this.$emit("popup-hide",t),this.hasPopupOpen=!1,this.__onControlFocusout(t)},__onControlFocusin(t){clearTimeout(this.focusoutTimer),!0===this.editable&&!1===this.focused&&(this.focused=!0,this.$emit("focus",t))},__onControlFocusout(t,e){clearTimeout(this.focusoutTimer),this.focusoutTimer=setTimeout(()=>{(!0!==document.hasFocus()||!0!==this.hasPopupOpen&&void 0!==this.$refs&&void 0!==this.$refs.control&&!1===this.$refs.control.contains(document.activeElement))&&(!0===this.focused&&(this.focused=!1,this.$emit("blur",t)),void 0!==e&&e())})},__clearValue(t){if(w(t),!0!==this.$q.platform.is.mobile){(this.$refs.target||this.$el).focus()}else!0===this.$el.contains(document.activeElement)&&document.activeElement.blur();"file"===this.type&&(this.$refs.input.value=null),this.$emit("input",null),this.$emit("clear",this.value),this.$nextTick(()=>{this.resetValidation(),!0!==this.$q.platform.is.mobile&&(this.isDirty=!1)})},__emitValue(t){this.$emit("input",t)},__getBgColor(){let t,e;for(let i=this.parents.length-1;i>=0;i--)if(t=this.parents[i],Hr.has(t)&&"rgba(0, 0, 0, 0)"!==(e=Hr.get(t).backgroundColor)&&"transparent"!==e)return e}},render(t){void 0!==this.__onPreRender&&this.__onPreRender();const e=void 0===this.__getControl&&void 0===this.$scopedSlots.control?{...this.qAttrs,"data-autofocus":this.autofocus||void 0,...this.attrs}:this.attrs;return t("label",{staticClass:"q-field q-validation-component row no-wrap items-start q-key-group-navigation--ignore-key",class:this.classes,attrs:e},[void 0!==this.$scopedSlots.before?t("div",{staticClass:"q-field__before q-field__marginal row no-wrap items-center",on:this.slotsEvents},this.$scopedSlots.before()):null,t("div",{staticClass:"q-field__inner relative-position col self-stretch"},[t("div",{ref:"control",staticClass:"q-field__control relative-position row no-wrap",class:this.contentClass,attrs:{tabindex:-1},on:this.controlEvents},this.__getContent(t)),!0===this.shouldRenderBottom?this.__getBottom(t):null]),void 0!==this.$scopedSlots.after?t("div",{staticClass:"q-field__after q-field__marginal row no-wrap items-center",on:this.slotsEvents},this.$scopedSlots.after()):null])},created(){void 0!==this.__onPreRender&&this.__onPreRender(),this.slotsEvents={click:x},this.clearableEvents={click:this.__clearValue},this.controlEvents=void 0!==this.__getControlEvents?this.__getControlEvents():{focusin:this.__onControlFocusin,focusout:this.__onControlFocusout,"popup-show":this.__onControlPopupShow,"popup-hide":this.__onControlPopupHide},this.parents=[]},mounted(){!0===o&&void 0===this.for&&(this.targetUid=Nr()),!0===this.autofocus&&this.focus(),this.$nextTick(()=>{let t=this.$refs.control;for(;t;)!0!==Hr.has(t)&&Hr.set(t,window.getComputedStyle(t)),this.parents.unshift(t),t=t.parentElement;!0===this.outlinedMd&&this.parents.length>0&&this.$forceUpdate()})},activated(){!0===this.shouldActivate&&!0===this.autofocus&&this.focus()},deactivated(){this.shouldActivate=!0},beforeDestroy(){clearTimeout(this.focusoutTimer),this.parents=[]}});function Qr(t,e,i,s){const o=[];return t.forEach(t=>{!0===s(t)?o.push(t):e.push({failedPropValidation:i,file:t})}),o}function Wr(t){t&&t.dataTransfer&&(t.dataTransfer.dropEffect="copy"),w(t)}var Ur={props:{multiple:Boolean,accept:String,capture:String,maxFileSize:[Number,String],maxTotalSize:[Number,String],maxFiles:[Number,String],filter:Function},computed:{extensions(){if(void 0!==this.accept)return this.accept.split(",").map(t=>"*"===(t=t.trim())?"*/":(t.endsWith("/*")&&(t=t.slice(0,t.length-1)),t.toUpperCase()))},maxFilesNumber(){return parseInt(this.maxFiles,10)},maxTotalSizeNumber(){return parseInt(this.maxTotalSize,10)}},methods:{pickFiles(t){if(!0===this.editable)if(t!==Object(t)&&(t={target:null}),null!==t.target&&!0===t.target.matches('input[type="file"]'))0===t.clientX&&0===t.clientY&&S(t);else{const e=this.__getFileInput();e&&e!==t.target&&e.click(t)}},addFiles(t){this.editable&&t&&this.__addFiles(null,t)},__processFiles(t,e,i,s){let o=Array.from(e||t.target.files);const n=[],r=()=>{n.length>0&&this.$emit("rejected",n)};if(void 0!==this.accept&&-1===this.extensions.indexOf("*/")&&0===(o=Qr(o,n,"accept",t=>this.extensions.some(e=>t.type.toUpperCase().startsWith(e)||t.name.toUpperCase().endsWith(e)))).length)return r();if(void 0!==this.maxFileSize){const t=parseInt(this.maxFileSize,10);if(0===(o=Qr(o,n,"max-file-size",e=>e.size<=t)).length)return r()}if(!0!==this.multiple&&o.length>0&&(o=[o[0]]),o.forEach(t=>{t.__key=t.webkitRelativePath+t.lastModified+t.name+t.size}),!0===s){const t=i.map(t=>t.__key);o=Qr(o,n,"duplicate",e=>!1===t.includes(e.__key))}if(0===o.length)return r();if(void 0!==this.maxTotalSize){let t=!0===s?i.reduce((t,e)=>t+e.size,0):0;if(0===(o=Qr(o,n,"max-total-size",e=>(t+=e.size)<=this.maxTotalSizeNumber)).length)return r()}if("function"==typeof this.filter){const t=this.filter(o);o=Qr(o,n,"filter",e=>t.includes(e))}if(void 0!==this.maxFiles){let t=!0===s?i.length:0;if(0===(o=Qr(o,n,"max-files",()=>++t<=this.maxFilesNumber)).length)return r()}return r(),o.length>0?o:void 0},__onDragOver(t){Wr(t),!0!==this.dnd&&(this.dnd=!0)},__onDragLeave(t){w(t),!0===(null!==t.relatedTarget||!0!==c.is.safari?t.relatedTarget!==this.$refs.dnd:!1===document.elementsFromPoint(t.clientX,t.clientY).includes(this.$refs.dnd))&&(this.dnd=!1)},__onDrop(t){Wr(t);const e=t.dataTransfer.files;e.length>0&&this.__addFiles(null,e),this.dnd=!1},__getDnd(t,e){if(!0===this.dnd)return t("div",{key:"dnd",staticClass:`q-${e}__dnd absolute-full`,ref:"dnd",on:$t(this,"dnd",{dragenter:Wr,dragover:Wr,dragleave:this.__onDragLeave,drop:this.__onDrop})})}}};const Yr={computed:{formDomProps(){if("file"===this.type)try{const t="DataTransfer"in window?new DataTransfer:"ClipboardEvent"in window?new ClipboardEvent("").clipboardData:void 0;return Object(this.value)===this.value&&("length"in this.value?Array.from(this.value):[this.value]).forEach(e=>{t.items.add(e)}),{files:t.files}}catch(t){return{files:void 0}}}}};var Kr=e.default.extend({name:"QFile",mixins:[jr,Ur,xs,Yr],props:{value:!0===i?{}:[File,FileList,Array],append:Boolean,useChips:Boolean,displayValue:[String,Number],tabindex:{type:[String,Number],default:0},counterLabel:Function,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},data:()=>({dnd:!1}),computed:{innerValue(){return Object(this.value)===this.value?"length"in this.value?Array.from(this.value):[this.value]:[]},selectedString(){return this.innerValue.map(t=>t.name).join(", ")},totalSize(){return St(this.innerValue.reduce((t,e)=>t+e.size,0))},counterProps(){return{totalSize:this.totalSize,filesNumber:this.innerValue.length,maxFiles:this.maxFiles}},computedCounter(){if(void 0!==this.counterLabel)return this.counterLabel(this.counterProps);const t=this.maxFiles;return`${this.innerValue.length}${void 0!==t?" / "+t:""} (${this.totalSize})`},inputAttrs(){return{tabindex:-1,type:"file",title:"",accept:this.accept,capture:this.capture,name:this.nameProp,...this.qAttrs,id:this.targetUid,disabled:!0!==this.editable}},isAppending(){return!0===this.multiple&&!0===this.append},fieldClass(){return"q-file q-field--auto-height"+(!0===this.dnd?" q-file--dnd":"")}},methods:{removeAtIndex(t){const e=this.innerValue.slice();e.splice(t,1),this.__emitValue(e)},removeFile(t){const e=this.innerValue.findIndex(t);e>-1&&this.removeAtIndex(e)},__emitValue(t){this.$emit("input",!0===this.multiple?t:t[0])},__onKeydown(t){13===t.keyCode&&x(t)},__onKeyup(t){13!==t.keyCode&&32!==t.keyCode||this.pickFiles(t)},__getFileInput(){return this.$refs.input},__addFiles(t,e){const i=this.__processFiles(t,e,this.innerValue,this.isAppending),s=this.__getFileInput();void 0!==s&&(s.value=""),void 0!==i&&((!0===this.multiple?this.value&&i.every(t=>this.innerValue.includes(t)):this.value===i[0])||this.__emitValue(!0===this.isAppending?this.innerValue.concat(i):i))},__getControl(t){const e={key:"target",ref:"target",staticClass:"q-field__native row items-center cursor-pointer",attrs:{tabindex:this.tabindex}};return!0===this.editable&&(e.on=$t(this,"native",{dragover:this.__onDragOver,dragleave:this.__onDragLeave,keydown:this.__onKeydown,keyup:this.__onKeyup})),t("div",e,[this.__getInput(t)].concat(this.__getSelection(t)))},__getControlChild(t){return this.__getDnd(t,"file")},__getFiller(t){return[t("input",{class:[this.inputClass,"q-file__filler"],style:this.inputStyle})]},__getSelection(t){if(void 0!==this.$scopedSlots.file)return 0===this.innerValue.length?this.__getFiller(t):this.innerValue.map((t,e)=>this.$scopedSlots.file({index:e,file:t,ref:this}));if(void 0!==this.$scopedSlots.selected)return 0===this.innerValue.length?this.__getFiller(t):this.$scopedSlots.selected({files:this.innerValue,ref:this});if(!0===this.useChips)return 0===this.innerValue.length?this.__getFiller(t):this.innerValue.map((e,i)=>t(oo,{key:"rem#"+i,props:{removable:this.editable,dense:!0,textColor:this.color,tabindex:this.tabindex},on:$t(this,"rem#"+i,{remove:()=>{this.removeAtIndex(i)}})},[t("span",{staticClass:"ellipsis",domProps:{textContent:e.name}})]));const e=void 0!==this.displayValue?this.displayValue:this.selectedString;return e.length>0?[t("div",{style:this.inputStyle,class:this.inputClass,domProps:{textContent:e}})]:this.__getFiller(t)},__getInput(t){const e={key:"input",ref:"input",staticClass:"q-field__input fit absolute-full cursor-pointer",attrs:this.inputAttrs,domProps:this.formDomProps,on:$t(this,"input",{change:this.__addFiles})};return!0===this.multiple&&(e.attrs.multiple=!0),t("input",e)}},created(){this.type="file"}}),Gr=e.default.extend({name:"QFooter",mixins:[Ht],inject:{layout:{default(){console.error("QFooter needs to be child of QLayout")}}},props:{value:{type:Boolean,default:!0},reveal:Boolean,bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},data(){return{size:parseInt(this.heightHint,10),revealed:!0,windowHeight:n||this.layout.container?0:window.innerHeight}},watch:{value(t){this.__update("space",t),this.__updateLocal("revealed",!0),this.layout.__animate()},offset(t){this.__update("offset",t)},reveal(t){!1===t&&this.__updateLocal("revealed",this.value)},revealed(t){this.layout.__animate(),this.$emit("reveal",t)},"layout.scroll"(){this.__updateRevealed()},"layout.height"(){this.__updateRevealed()},size(){this.__updateRevealed()},"$q.screen.height"(t){!0!==this.layout.container&&this.__updateLocal("windowHeight",t)}},computed:{fixed(){return!0===this.reveal||this.layout.view.indexOf("F")>-1||this.$q.platform.is.ios&&!0===this.layout.container},containerHeight(){return!0===this.layout.container?this.layout.containerHeight:this.windowHeight},offset(){if(!0!==this.value)return 0;if(!0===this.fixed)return!0===this.revealed?this.size:0;const t=this.layout.scroll.position+this.containerHeight+this.size-this.layout.height;return t>0?t:0},hidden(){return!0!==this.value||!0===this.fixed&&!0!==this.revealed},revealOnFocus(){return!0===this.value&&!0===this.hidden&&!0===this.reveal},classes(){return(!0===this.fixed?"fixed":"absolute")+"-bottom"+(!0===this.bordered?" q-footer--bordered":"")+(!0===this.hidden?" q-footer--hidden":"")+(!0!==this.value?" q-layout--prevent-focus":"")+(!0!==this.value&&!0!==this.fixed?" hidden":"")},style(){const t=this.layout.rows.bottom,e={};return"l"===t[0]&&!0===this.layout.left.space&&(e[!0===this.$q.lang.rtl?"right":"left"]=`${this.layout.left.size}px`),"r"===t[2]&&!0===this.layout.right.space&&(e[!0===this.$q.lang.rtl?"left":"right"]=`${this.layout.right.size}px`),e},onEvents(){return{...this.qListeners,focusin:this.__onFocusin,input:S}}},render(t){const e=Wt([t(To,{key:"resize",props:{debounce:0},on:$t(this,"resize",{resize:this.__onResize})})],this,"default");return!0===this.elevated&&e.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),t("footer",{staticClass:"q-footer q-layout__section--marginal",class:this.classes,style:this.style,on:this.onEvents},e)},created(){this.layout.instances.footer=this,!0===this.value&&this.__update("size",this.size),this.__update("space",this.value),this.__update("offset",this.offset)},beforeDestroy(){this.layout.instances.footer===this&&(this.layout.instances.footer=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},methods:{__onResize({height:t}){this.__updateLocal("size",t),this.__update("size",t)},__update(t,e){this.layout.footer[t]!==e&&(this.layout.footer[t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__updateRevealed(){if(!0!==this.reveal)return;const{direction:t,position:e,inflectionPoint:i}=this.layout.scroll;this.__updateLocal("revealed","up"===t||e-i<100||this.layout.height-this.containerHeight-e-this.size<300)},__onFocusin(t){!0===this.revealOnFocus&&this.__updateLocal("revealed",!0),this.$emit("focusin",t)}}}),Xr=e.default.extend({name:"QForm",mixins:[Ht],props:{autofocus:Boolean,noErrorFocus:Boolean,noResetFocus:Boolean,greedy:Boolean},computed:{onEvents(){return{...this.qListeners,submit:this.submit,reset:this.reset}}},mounted(){this.validateIndex=0,!0===this.autofocus&&this.focus()},activated(){!0===this.shouldActivate&&!0===this.autofocus&&this.focus()},deactivated(){this.shouldActivate=!0},methods:{validate(t){const e="boolean"==typeof t?t:!0!==this.noErrorFocus,i=++this.validateIndex,s=this.getValidationComponents().filter(t=>!0!==t.disable),o=(t,e)=>{this.$emit("validation-"+(!0===t?"success":"error"),e)},n=t=>{const e=t.validate();return"function"==typeof e.then?e.then(e=>({valid:e,comp:t}),e=>({valid:!1,comp:t,err:e})):Promise.resolve({valid:e,comp:t})};return(!0===this.greedy?Promise.all(s.map(n)).then(t=>t.filter(t=>!0!==t.valid)):s.reduce((t,e)=>t.then(()=>n(e).then(t=>{if(!1===t.valid)return Promise.reject(t)})),Promise.resolve()).catch(t=>[t])).then(t=>{if(void 0===t||0===t.length)return i===this.validateIndex&&o(!0),!0;if(i===this.validateIndex){const{comp:i,err:s}=t[0];if(void 0!==s&&console.error(s),o(!1,i),!0===e){const e=t.find(({comp:t})=>"function"==typeof t.focus&&!0!==t._isBeingDestroyed&&!0!==t._isDestroyed&&!0!==t._inactive);void 0!==e&&e.comp.focus()}}return!1})},resetValidation(){this.validateIndex++,this.getValidationComponents().forEach(t=>{"function"==typeof t.resetValidation&&t.resetValidation()})},submit(t){void 0!==t&&w(t);const e=this.validateIndex+1;this.validate().then(i=>{e===this.validateIndex&&!0===i&&(void 0!==this.qListeners.submit?this.$emit("submit",t):void 0!==t&&void 0!==t.target&&"function"==typeof t.target.submit&&t.target.submit())})},reset(t){void 0!==t&&w(t),this.$emit("reset"),this.$nextTick(()=>{this.resetValidation(),!0===this.autofocus&&!0!==this.noResetFocus&&this.focus()})},focus(){if(!this.$el)return;const t=this.$el.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]")||this.$el.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]")||this.$el.querySelector("[autofocus], [data-autofocus]")||Array.prototype.find.call(this.$el.querySelectorAll("[tabindex]"),t=>t.tabIndex>-1);null!==t&&void 0!==t&&bi(t)},getValidationComponents(){return Array.prototype.map.call(this.$el.getElementsByClassName("q-validation-component"),t=>t.__vue__).filter(t=>void 0!==t&&"function"==typeof t.validate)}},render(t){return t("form",{staticClass:"q-form",on:this.onEvents},jt(this,"default"))}}),Zr=e.default.extend({name:"QHeader",mixins:[Ht],inject:{layout:{default(){console.error("QHeader needs to be child of QLayout")}}},props:{value:{type:Boolean,default:!0},reveal:Boolean,revealOffset:{type:Number,default:250},bordered:Boolean,elevated:Boolean,heightHint:{type:[String,Number],default:50}},data(){return{size:parseInt(this.heightHint,10),revealed:!0}},watch:{value(t){this.__update("space",t),this.__updateLocal("revealed",!0),this.layout.__animate()},offset(t){this.__update("offset",t)},reveal(t){!1===t&&this.__updateLocal("revealed",this.value)},revealed(t){this.layout.__animate(),this.$emit("reveal",t)},"layout.scroll"(t){!0===this.reveal&&this.__updateLocal("revealed","up"===t.direction||t.position<=this.revealOffset||t.position-t.inflectionPoint<100)}},computed:{fixed(){return!0===this.reveal||this.layout.view.indexOf("H")>-1||this.$q.platform.is.ios&&!0===this.layout.container},offset(){if(!0!==this.value)return 0;if(!0===this.fixed)return!0===this.revealed?this.size:0;const t=this.size-this.layout.scroll.position;return t>0?t:0},hidden(){return!0!==this.value||!0===this.fixed&&!0!==this.revealed},revealOnFocus(){return!0===this.value&&!0===this.hidden&&!0===this.reveal},classes(){return(!0===this.fixed?"fixed":"absolute")+"-top"+(!0===this.bordered?" q-header--bordered":"")+(!0===this.hidden?" q-header--hidden":"")+(!0!==this.value?" q-layout--prevent-focus":"")},style(){const t=this.layout.rows.top,e={};return"l"===t[0]&&!0===this.layout.left.space&&(e[!0===this.$q.lang.rtl?"right":"left"]=`${this.layout.left.size}px`),"r"===t[2]&&!0===this.layout.right.space&&(e[!0===this.$q.lang.rtl?"left":"right"]=`${this.layout.right.size}px`),e},onEvents(){return{...this.qListeners,focusin:this.__onFocusin,input:S}}},render(t){const e=Qt(this,"default",[]);return!0===this.elevated&&e.push(t("div",{staticClass:"q-layout__shadow absolute-full overflow-hidden no-pointer-events"})),e.push(t(To,{key:"resize",props:{debounce:0},on:$t(this,"resize",{resize:this.__onResize})})),t("header",{staticClass:"q-header q-layout__section--marginal",class:this.classes,style:this.style,on:this.onEvents},e)},created(){this.layout.instances.header=this,!0===this.value&&this.__update("size",this.size),this.__update("space",this.value),this.__update("offset",this.offset)},beforeDestroy(){this.layout.instances.header===this&&(this.layout.instances.header=void 0,this.__update("size",0),this.__update("offset",0),this.__update("space",!1))},methods:{__onResize({height:t}){this.__updateLocal("size",t),this.__update("size",t)},__update(t,e){this.layout.header[t]!==e&&(this.layout.header[t]=e)},__updateLocal(t,e){this[t]!==e&&(this[t]=e)},__onFocusin(t){!0===this.revealOnFocus&&this.__updateLocal("revealed",!0),this.$emit("focusin",t)}}}),Jr={props:{ratio:[String,Number]},computed:{ratioStyle(){const t=this.ratio||this.naturalRatio;if(void 0!==t)return{paddingBottom:`${100/t}%`}}}},ta=e.default.extend({name:"QImg",mixins:[Ht,Jr],props:{src:String,srcset:String,sizes:String,alt:String,width:String,height:String,placeholderSrc:String,basic:Boolean,contain:Boolean,position:{type:String,default:"50% 50%"},transition:{type:String,default:"fade"},imgClass:[Array,String,Object],imgStyle:Object,nativeContextMenu:Boolean,noDefaultSpinner:Boolean,spinnerColor:String,spinnerSize:String},data(){return{currentSrc:"",image:null,isLoading:!!this.src,hasError:!1,naturalRatio:void 0}},watch:{src(){this.__load()},srcset(t){this.__updateWatcher(t)}},computed:{url(){return this.currentSrc||this.placeholderSrc||void 0},attrs(){const t={role:"img"};return void 0!==this.alt&&(t["aria-label"]=this.alt),t},imgContainerStyle(){return Object.assign({backgroundSize:!0===this.contain?"contain":"cover",backgroundPosition:this.position},this.imgStyle,{backgroundImage:`url("${this.url}")`})},style(){return{width:this.width,height:this.height}},classes(){return"q-img overflow-hidden"+(!0===this.nativeContextMenu?" q-img--menu":"")}},methods:{__onLoad(t){this.isLoading=!1,this.hasError=!1,this.__computeRatio(t),this.__updateSrc(),this.__updateWatcher(this.srcset),this.$emit("load",this.currentSrc)},__onError(t){clearTimeout(this.ratioTimer),this.isLoading=!1,this.hasError=!0,this.currentSrc="",this.$emit("error",t)},__updateSrc(){if(void 0!==this.image&&!1===this.isLoading){const t=this.image.currentSrc||this.image.src;this.currentSrc!==t&&(this.currentSrc=t)}},__updateWatcher(t){t?void 0===this.unwatch&&(this.unwatch=this.$watch("$q.screen.width",this.__updateSrc)):void 0!==this.unwatch&&(this.unwatch(),this.unwatch=void 0)},__load(){if(clearTimeout(this.ratioTimer),this.hasError=!1,!this.src)return this.isLoading=!1,this.image=void 0,void(this.currentSrc="");this.isLoading=!0;const t=new Image;this.image=t,t.onerror=(e=>{this.image===t&&!0!==this.destroyed&&this.__onError(e)}),t.onload=(()=>{!0!==this.destroyed&&this.image===t&&(void 0!==t.decode?t.decode().catch(e=>{this.image===t&&!0!==this.destroyed&&this.__onError(e)}).then(()=>{this.image===t&&!0!==this.destroyed&&this.__onLoad(t)}):this.__onLoad(t))}),t.src=this.src,this.srcset&&(t.srcset=this.srcset),void 0!==this.sizes?t.sizes=this.sizes:Object.assign(t,{height:this.height,width:this.width})},__computeRatio(t){const{naturalHeight:e,naturalWidth:i}=t;e||i?this.naturalRatio=0===e?1:i/e:this.ratioTimer=setTimeout(()=>{this.image===t&&!0!==this.destroyed&&this.__computeRatio(t)},100)},__getImage(t){const e=!0===this.nativeContextMenu?[t("img",{staticClass:"absolute-full fit",attrs:{src:this.url,"aria-hidden":"true"}})]:void 0,i=void 0!==this.url?t("div",{key:this.url,staticClass:"q-img__image absolute-full",class:this.imgClass,style:this.imgContainerStyle},e):null;return!0===this.basic?i:t("transition",{props:{name:"q-transition--"+this.transition}},[i])},__getContent(t){const e=jt(this,!0===this.hasError?"error":"default");return!0===this.basic?t("div",{key:"content",staticClass:"q-img__content absolute-full"},e):t("transition",{props:{name:"q-transition--fade"}},[!0===this.isLoading?t("div",{key:"placeholder",staticClass:"q-img__loading absolute-full flex flex-center"},void 0!==this.$scopedSlots.loading?this.$scopedSlots.loading():!1===this.noDefaultSpinner?[t($e,{props:{color:this.spinnerColor,size:this.spinnerSize}})]:void 0):t("div",{key:"content",staticClass:"q-img__content absolute-full"},e)])}},render(t){return t("div",{class:this.classes,style:this.style,attrs:this.attrs,on:{...this.qListeners}},[t("div",{style:this.ratioStyle}),this.__getImage(t),this.__getContent(t)])},beforeMount(){if(void 0!==this.placeholderSrc&&void 0===this.ratio){const t=new Image;t.src=this.placeholderSrc,this.__computeRatio(t)}!0===this.isLoading&&this.__load()},beforeDestroy(){this.destroyed=!0,clearTimeout(this.ratioTimer),void 0!==this.unwatch&&this.unwatch()}});const{passive:ea}=u;var ia=e.default.extend({name:"QInfiniteScroll",mixins:[Ht],props:{offset:{type:Number,default:500},debounce:{type:[String,Number],default:100},scrollTarget:{default:void 0},initialIndex:Number,disable:Boolean,reverse:Boolean},data(){return{index:this.initialIndex||0,isFetching:!1,isWorking:!0}},watch:{disable(t){!0===t?this.stop():this.resume()},reverse(){!1===this.isFetching&&!0===this.isWorking&&this.immediatePoll()},scrollTarget(){this.updateScrollTarget()},debounce(t){this.__setDebounce(t)}},methods:{poll(){if(void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),!0===this.disable||!0===this.isFetching||!1===this.isWorking)return;if(this.__scrollTarget===window&&!0===document.qScrollPrevented)return void(this.clearExecuteWhenScrollable=ts(this.poll));const t=Di(this.__scrollTarget),e=Ni(this.__scrollTarget),i=Me(this.__scrollTarget);!1===this.reverse?Math.round(e+i+this.offset)>=Math.round(t)&&this.trigger():Math.round(e){!0===this.isWorking&&(this.isFetching=!1,this.$nextTick(()=>{if(!0===this.reverse){const e=Di(this.__scrollTarget),i=Ni(this.__scrollTarget),s=e-t;Ki(this.__scrollTarget,i+s)}!0===e?this.stop():this.$el.closest("body")&&this.poll()}))})},reset(){this.index=0},resume(){!1===this.isWorking&&(this.isWorking=!0,this.__scrollTarget.addEventListener("scroll",this.poll,ea)),this.immediatePoll()},stop(){!0===this.isWorking&&(this.isWorking=!1,this.isFetching=!1,this.__scrollTarget.removeEventListener("scroll",this.poll,ea),"function"==typeof this.poll.cancel&&this.poll.cancel())},updateScrollTarget(){if(this.__scrollTarget&&!0===this.isWorking&&this.__scrollTarget.removeEventListener("scroll",this.poll,ea),this.__scrollTarget=Fi(this.$el,this.scrollTarget),!0===this.isWorking){if(this.__scrollTarget.addEventListener("scroll",this.poll,ea),!0===this.reverse){const t=Di(this.__scrollTarget),e=Me(this.__scrollTarget);Ki(this.__scrollTarget,t-e)}this.immediatePoll()}},setIndex(t){this.index=t},__setDebounce(t){t=parseInt(t,10);const e=this.poll;this.poll=t<=0?this.immediatePoll:j(this.immediatePoll,!0===isNaN(t)?100:t),this.__scrollTarget&&!0===this.isWorking&&(void 0!==e&&this.__scrollTarget.removeEventListener("scroll",e,ea),this.__scrollTarget.addEventListener("scroll",this.poll,ea))}},mounted(){this.immediatePoll=this.poll,this.__setDebounce(this.debounce),this.updateScrollTarget()},activated(){void 0!==this.__scrollPosition&&this.__scrollTarget&&Ki(this.__scrollTarget,this.__scrollPosition)},deactivated(){this.__scrollPosition=this.__scrollTarget?Ni(this.__scrollTarget):void 0},beforeDestroy(){void 0!==this.clearExecuteWhenScrollable&&this.clearExecuteWhenScrollable(),this.stop()},render(t){const e=Qt(this,"default",[]);return!0!==this.disable&&!0===this.isWorking&&e[!1===this.reverse?"push":"unshift"](t("div",{staticClass:"q-infinite-scroll__loading",class:!0===this.isFetching?"":"invisible"},jt(this,"loading"))),t("div",{staticClass:"q-infinite-scroll",on:{...this.qListeners}},e)}}),sa=e.default.extend({name:"QInnerLoading",mixins:[Ht,ce,ii],props:{showing:Boolean,color:String,size:{type:[String,Number],default:42},label:String,labelClass:String,labelStyle:[String,Array,Object]},computed:{classes(){return"q-inner-loading absolute-full column flex-center"+` q-inner-loading--${this.darkSuffix}`},labelClasses(){return"q-inner-loading__label"+(void 0!==this.labelClass?` ${this.labelClass}`:"")}},methods:{__getInner(t){const e=[t($e,{props:{size:this.size,color:this.color}})];return void 0!==this.label&&e.push(t("div",{class:this.labelClasses,style:this.labelStyle},[this.label])),e},__getContent(t){return!0===this.showing?[t("div",{staticClass:this.classes,on:{...this.qListeners}},void 0!==this.$scopedSlots.default?this.$scopedSlots.default():this.__getInner(t))]:void 0}},render(t){return t("transition",{props:{...this.transitionProps,appear:!0}},this.__getContent(t))}});const oa={date:"####/##/##",datetime:"####/##/## ##:##",time:"##:##",fulltime:"##:##:##",phone:"(###) ### - ####",card:"#### #### #### ####"},na={"#":{pattern:"[\\d]",negate:"[^\\d]"},S:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]"},N:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]"},A:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleUpperCase()},a:{pattern:"[a-zA-Z]",negate:"[^a-zA-Z]",transform:t=>t.toLocaleLowerCase()},X:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleUpperCase()},x:{pattern:"[0-9a-zA-Z]",negate:"[^0-9a-zA-Z]",transform:t=>t.toLocaleLowerCase()}},ra=Object.keys(na);ra.forEach(t=>{na[t].regex=new RegExp(na[t].pattern)});const aa=new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|(["+ra.join("")+"])|(.)","g"),la=/[.*+?^${}()|[\]\\]/g,ha=String.fromCharCode(1);var da={props:{mask:String,reverseFillMask:Boolean,fillMask:[Boolean,String],unmaskedValue:Boolean},watch:{type(){this.__updateMaskInternals()},autogrow(){this.__updateMaskInternals()},mask(t){if(void 0!==t)this.__updateMaskValue(this.innerValue,!0);else{const t=this.__unmask(this.innerValue);this.__updateMaskInternals(),this.value!==t&&this.$emit("input",t)}},fillMask(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue,!0)},reverseFillMask(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue,!0)},unmaskedValue(){!0===this.hasMask&&this.__updateMaskValue(this.innerValue)}},methods:{__getInitialMaskedValue(){if(this.__updateMaskInternals(),!0===this.hasMask){const t=this.__mask(this.__unmask(this.value));return!1!==this.fillMask?this.__fillWithMask(t):t}return this.value},__getPaddedMaskMarked(t){if(t-1){for(let s=t-e.length;s>0;s--)i+=ha;e=e.slice(0,s)+i+e.slice(s)}return e},__updateMaskInternals(){if(this.hasMask=void 0!==this.mask&&this.mask.length>0&&(!0===this.autogrow||["textarea","text","search","url","tel","password"].includes(this.type)),!1===this.hasMask)return this.computedUnmask=void 0,this.maskMarked="",void(this.maskReplaced="");const t=void 0===oa[this.mask]?this.mask:oa[this.mask],e="string"==typeof this.fillMask&&this.fillMask.length>0?this.fillMask.slice(0,1):"_",i=e.replace(la,"\\$&"),s=[],o=[],n=[];let r=!0===this.reverseFillMask,a="",l="";t.replace(aa,(t,e,i,h,d)=>{if(void 0!==h){const t=na[h];n.push(t),l=t.negate,!0===r&&(o.push("(?:"+l+"+)?("+t.pattern+"+)?(?:"+l+"+)?("+t.pattern+"+)?"),r=!1),o.push("(?:"+l+"+)?("+t.pattern+")?")}else if(void 0!==i)a="\\"+("\\"===i?"":i),n.push(i),s.push("([^"+a+"]+)?"+a+"?");else{const t=void 0!==e?e:d;a="\\"===t?"\\\\\\\\":t.replace(la,"\\\\$&"),n.push(t),s.push("([^"+a+"]+)?"+a+"?")}});const h=new RegExp("^"+s.join("")+"("+(""===a?".":"[^"+a+"]")+"+)?"+(""===a?"":"["+a+"]*")+"$"),d=o.length-1,c=o.map((t,e)=>0===e&&!0===this.reverseFillMask?new RegExp("^"+i+"*"+t):e===d?new RegExp("^"+t+"("+(""===l?".":l)+"+)?"+(!0===this.reverseFillMask?"$":i+"*")):new RegExp("^"+t));this.computedMask=n,this.computedUnmask=(t=>{const e=h.exec(t);null!==e&&(t=e.slice(1).join(""));const i=[],s=c.length;for(let e=0,o=t;e0?i.join(""):t}),this.maskMarked=n.map(t=>"string"==typeof t?t:ha).join(""),this.maskReplaced=this.maskMarked.split(ha).join(e)},__updateMaskValue(t,e,i){const s=this.$refs.input,o=s.selectionEnd,n=s.value.length-o,r=this.__unmask(t);!0===e&&this.__updateMaskInternals();const a=this.__mask(r),l=!1!==this.fillMask?this.__fillWithMask(a):a,h=this.innerValue!==l;s.value!==l&&(s.value=l),!0===h&&(this.innerValue=l),document.activeElement===s&&this.$nextTick(()=>{if(l!==this.maskReplaced)if("insertFromPaste"!==i||!0===this.reverseFillMask)if(["deleteContentBackward","deleteContentForward"].indexOf(i)>-1){const t=!0===this.reverseFillMask?0===o?l.length>a.length?1:0:Math.max(0,l.length-(l===this.maskReplaced?0:Math.min(a.length,n)+1))+1:o;s.setSelectionRange(t,t,"forward")}else if(!0===this.reverseFillMask)if(!0===h){const t=Math.max(0,l.length-(l===this.maskReplaced?0:Math.min(a.length,n+1)));1===t&&1===o?s.setSelectionRange(t,t,"forward"):this.__moveCursorRightReverse(s,t,t)}else{const t=l.length-n;s.setSelectionRange(t,t,"backward")}else if(!0===h){const t=Math.max(0,this.maskMarked.indexOf(ha),Math.min(a.length,o)-1);this.__moveCursorRight(s,t,t)}else{const t=o-1;this.__moveCursorRight(s,t,t)}else{const t=o-1;this.__moveCursorRight(s,t,t)}else{const t=!0===this.reverseFillMask?this.maskReplaced.length:0;s.setSelectionRange(t,t,"forward")}});const d=!0===this.unmaskedValue?this.__unmask(l):l;String(this.value)!==d&&this.__emitValue(d,!0)},__moveCursorForPaste(t,e,i){const s=this.__mask(this.__unmask(t.value));e=Math.max(0,this.maskMarked.indexOf(ha),Math.min(s.length,e)),t.setSelectionRange(e,i,"forward")},__moveCursorLeft(t,e,i,s){const o=-1===this.maskMarked.slice(e-1).indexOf(ha);let n=Math.max(0,e-1);for(;n>=0;n--)if(this.maskMarked[n]===ha){e=n,!0===o&&e++;break}if(n<0&&void 0!==this.maskMarked[e]&&this.maskMarked[e]!==ha)return this.__moveCursorRight(t,0,0);e>=0&&t.setSelectionRange(e,!0===s?i:e,"backward")},__moveCursorRight(t,e,i,s){const o=t.value.length;let n=Math.min(o,i+1);for(;n<=o;n++){if(this.maskMarked[n]===ha){i=n;break}this.maskMarked[n-1]===ha&&(i=n)}if(n>o&&void 0!==this.maskMarked[i-1]&&this.maskMarked[i-1]!==ha)return this.__moveCursorLeft(t,o,o);t.setSelectionRange(s?e:i,i,"forward")},__moveCursorLeftReverse(t,e,i,s){const o=this.__getPaddedMaskMarked(t.value.length);let n=Math.max(0,e-1);for(;n>=0;n--){if(o[n-1]===ha){e=n;break}if(o[n]===ha&&(e=n,0===n))break}if(n<0&&void 0!==o[e]&&o[e]!==ha)return this.__moveCursorRightReverse(t,0,0);e>=0&&t.setSelectionRange(e,!0===s?i:e,"backward")},__moveCursorRightReverse(t,e,i,s){const o=t.value.length,n=this.__getPaddedMaskMarked(o),r=-1===n.slice(0,i+1).indexOf(ha);let a=Math.min(o,i+1);for(;a<=o;a++)if(n[a-1]===ha){(i=a)>0&&!0===r&&i--;break}if(a>o&&void 0!==n[i-1]&&n[i-1]!==ha)return this.__moveCursorLeftReverse(t,o,o);t.setSelectionRange(!0===s?e:i,i,"forward")},__onMaskedKeydown(t){if(!0===Pe(t))return;const e=this.$refs.input,i=e.selectionStart,s=e.selectionEnd;if(37===t.keyCode||39===t.keyCode){const o=this["__moveCursor"+(39===t.keyCode?"Right":"Left")+(!0===this.reverseFillMask?"Reverse":"")];t.preventDefault(),o(e,i,s,t.shiftKey)}else 8===t.keyCode&&!0!==this.reverseFillMask&&i===s?this.__moveCursorLeft(e,i,s,!0):46===t.keyCode&&!0===this.reverseFillMask&&i===s&&this.__moveCursorRightReverse(e,i,s,!0);this.$emit("keydown",t)},__mask(t){if(void 0===t||null===t||""===t)return"";if(!0===this.reverseFillMask)return this.__maskReverse(t);const e=this.computedMask;let i=0,s="";for(let o=0;o=0&&s>-1;n--){const r=e[n];let a=t[s];if("string"==typeof r)o=r+o,a===r&&s--;else{if(void 0===a||!r.regex.test(a))return o;do{o=(void 0!==r.transform?r.transform(a):a)+o,a=t[--s]}while(i===n&&void 0!==a&&r.regex.test(a))}}return o},__unmask(t){return"string"!=typeof t||void 0===this.computedUnmask?"number"==typeof t?this.computedUnmask(""+t):t:this.computedUnmask(t)},__fillWithMask(t){return this.maskReplaced.length-t.length<=0?t:!0===this.reverseFillMask&&t.length>0?this.maskReplaced.slice(0,-t.length)+t:t+this.maskReplaced.slice(t.length)}}},ca=e.default.extend({name:"QInput",mixins:[jr,da,xs,Yr,Ht],props:{value:{required:!1},shadowText:String,type:{type:String,default:"text"},debounce:[String,Number],autogrow:Boolean,inputClass:[Array,String,Object],inputStyle:[Array,String,Object]},watch:{value(t){if(!0===this.hasMask){if(!0===this.stopValueWatcher&&(this.stopValueWatcher=!1,String(t)===this.emitCachedValue))return;this.__updateMaskValue(t)}else this.innerValue!==t&&(this.innerValue=t,"number"===this.type&&!0===this.hasOwnProperty("tempValue")&&(!0===this.typedNumber?this.typedNumber=!1:delete this.tempValue));!0===this.autogrow&&this.$nextTick(this.__adjustHeight)},type(){this.$refs.input&&(this.$refs.input.value=this.value)},autogrow(t){if(!0===t)this.$nextTick(this.__adjustHeight);else if(this.qAttrs.rows>0&&void 0!==this.$refs.input){this.$refs.input.style.height="auto"}},dense(){!0===this.autogrow&&this.$nextTick(this.__adjustHeight)}},data(){return{innerValue:this.__getInitialMaskedValue()}},computed:{isTextarea(){return"textarea"===this.type||!0===this.autogrow},isTypeText(){return!0===this.isTextarea||["text","search","url","tel","password"].includes(this.type)},fieldClass(){return`q-${!0===this.isTextarea?"textarea":"input"}`+(!0===this.autogrow?" q-textarea--autogrow":"")},hasShadow(){return"file"!==this.type&&"string"==typeof this.shadowText&&this.shadowText.length>0},onEvents(){const t={...this.qListeners,input:this.__onInput,compositionend:this.__onCompositionend,paste:this.__onPaste,change:this.__onChange,blur:this.__onFinishEditing,focus:this.__onFocus};return!0===this.hasMask&&(t.keydown=this.__onMaskedKeydown),!0===this.autogrow&&(t.animationend=this.__onAnimationend),t},inputAttrs(){const t={tabindex:0,"data-autofocus":this.autofocus||void 0,rows:"textarea"===this.type?6:void 0,"aria-label":this.label,name:this.nameProp,...this.qAttrs,id:this.targetUid,type:this.type,maxlength:this.maxlength,disabled:!0===this.disable,readonly:!0===this.readonly};return!0===this.autogrow&&(t.rows=1),t}},methods:{focus(){const t=document.activeElement;void 0===this.$refs.input||this.$refs.input===t||null!==t&&t.id===this.targetUid||bi(this.$refs.input)},select(){void 0!==this.$refs.input&&this.$refs.input.select()},getNativeElement(){return this.$refs.input},__onPaste(t){if(!0===this.hasMask&&!0!==this.reverseFillMask){const e=t.target;this.__moveCursorForPaste(e,e.selectionStart,e.selectionEnd)}this.$emit("paste",t)},__onInput(t){if(!t||!t.target||!0===t.target.qComposing)return;if("file"===this.type)return void this.$emit("input",t.target.files);const e=t.target.value;if(!0===this.hasMask)this.__updateMaskValue(e,!1,t.inputType);else if(this.__emitValue(e),!0===this.isTypeText&&t.target===document.activeElement){const{selectionStart:i,selectionEnd:s}=t.target;void 0!==i&&void 0!==s&&this.$nextTick(()=>{t.target===document.activeElement&&0===e.indexOf(t.target.value)&&t.target.setSelectionRange(i,s)})}!0===this.autogrow&&this.__adjustHeight()},__onChange(t){!0===t.target.qComposing&&(t.target.qComposing=!1,this.__onInput(t)),clearTimeout(this.emitTimer),void 0!==this.emitValueFn&&this.emitValueFn(),this.$emit("change",t)},__onFinishEditing(t){void 0!==t&&S(t),clearTimeout(this.emitTimer),void 0!==this.emitValueFn&&this.emitValueFn(),this.typedNumber=!1,this.stopValueWatcher=!1,delete this.tempValue,"file"!==this.type&&setTimeout(()=>{void 0!==this.$refs.input&&(this.$refs.input.value=void 0!==this.innerValue?this.innerValue:"")})},__onFocus(t){S(t),bi(t.target)},__onCompositionend(t){void 0!==this.qListeners.compositionend&&this.$emit("compositionend",t),this.__onInput(t)},__onAnimationend(t){void 0!==this.qListeners.animationend&&this.$emit("animationend",t),this.__adjustHeight()},__emitValue(t,e){this.emitValueFn=(()=>{"number"!==this.type&&!0===this.hasOwnProperty("tempValue")&&delete this.tempValue,this.value!==t&&this.emitCachedValue!==t&&(this.emitCachedValue=t,!0===e&&(this.stopValueWatcher=!0),this.$emit("input",t),this.$nextTick(()=>{this.emitCachedValue===t&&(this.emitCachedValue=NaN)})),this.emitValueFn=void 0}),"number"===this.type&&(this.typedNumber=!0,this.tempValue=t),void 0!==this.debounce?(clearTimeout(this.emitTimer),this.tempValue=t,this.emitTimer=setTimeout(this.emitValueFn,this.debounce)):this.emitValueFn()},__adjustHeight(){requestAnimationFrame(()=>{const t=this.$refs.input;if(void 0!==t){const e=t.parentNode.style,{overflow:i}=t.style;!0!==this.$q.platform.is.firefox&&(t.style.overflow="hidden"),t.style.height="1px",e.marginBottom=t.scrollHeight-1+"px",t.style.height=t.scrollHeight+"px",t.style.overflow=i,e.marginBottom=""}})},__getCurValue(){return!0===this.hasOwnProperty("tempValue")?this.tempValue:void 0!==this.innerValue?this.innerValue:""},__getShadowControl(t){return t("div",{staticClass:"q-field__native q-field__shadow absolute-bottom no-pointer-events"+(!0===this.isTextarea?"":" text-no-wrap")},[t("span",{staticClass:"invisible"},this.__getCurValue()),t("span",this.shadowText)])},__getControl(t){return t(!0===this.isTextarea?"textarea":"input",{ref:"input",staticClass:"q-field__native q-placeholder",style:this.inputStyle,class:this.inputClass,attrs:this.inputAttrs,on:this.onEvents,domProps:"file"!==this.type?{value:this.__getCurValue()}:this.formDomProps})}},created(){this.emitCachedValue=NaN},mounted(){!0===this.autogrow&&this.__adjustHeight()},beforeDestroy(){this.__onFinishEditing()}});const ua={threshold:0,root:null,rootMargin:"0px"};function pa(t,e,i,s){let o,n,r;"function"==typeof i?(o=i,n=ua,r=void 0===e.cfg):(o=i.handler,n=Object.assign({},ua,i.cfg),r=void 0===e.cfg||!1===Ls(e.cfg,n)),e.handler!==o&&(e.handler=o);const a=!0===s.once;e.once!==a&&(e.once=a),!0===r&&(e.cfg=n,void 0!==e.observer&&e.observer.unobserve(t),e.observer=new IntersectionObserver(([i])=>{if("function"==typeof e.handler){if(null===i.rootBounds&&(void 0!==t.__vue__?!0!==t.__vue__._inactive:!0===document.body.contains(t)))return e.observer.unobserve(t),void e.observer.observe(t);(!1===e.handler(i,e.observer)||!0===e.once&&!0===i.isIntersecting)&&ma(t)}},n),e.observer.observe(t))}function ma(t){const e=t.__qvisible;void 0!==e&&(void 0!==e.observer&&e.observer.unobserve(t),delete t.__qvisible)}var ga={name:"intersection",inserted(t,{modifiers:e,value:i}){void 0!==t.__qvisible&&(ma(t),t.__qvisible_destroyed=!0);const s={};pa(t,s,i,e),t.__qvisible=s},update(t,{value:e,modifiers:i}){const s=t.__qvisible;void 0!==s&&pa(t,s,e,i)},unbind(t){void 0===t.__qvisible_destroyed?ma(t):delete t.__qvisible_destroyed}},fa=e.default.extend({name:"QIntersection",mixins:[Nt,Ht],directives:{Intersection:ga},props:{once:Boolean,transition:String,ssrPrerender:Boolean,margin:String,threshold:[Number,Array],root:{default:null},disable:Boolean},data(){return{showing:!0===n&&this.ssrPrerender}},computed:{value(){return void 0!==this.root||void 0!==this.margin||void 0!==this.threshold?{handler:this.__trigger,cfg:{root:this.root,rootMargin:this.margin,threshold:this.threshold}}:this.__trigger},directives(){if(!0!==this.disable&&(!0!==n||!0!==this.once||!0!==this.ssrPrerender))return[{name:"intersection",value:this.value,modifiers:{once:this.once}}]}},methods:{__trigger(t){this.showing!==t.isIntersecting&&(this.showing=t.isIntersecting,void 0!==this.qListeners.visibility&&this.$emit("visibility",this.showing))}},render(t){const e=!0===this.showing?jt(this,"default"):void 0;return t(this.tag,{staticClass:"q-intersection",on:{...this.qListeners},directives:this.directives},this.transition?[t("transition",{props:{name:"q-transition--"+this.transition}},e)]:e)}});const _a=[34,37,40,33,39,38];var va=e.default.extend({name:"QKnob",mixins:[{props:ao.options.props},Ss],directives:{TouchPan:xo},props:{innerMin:Number,innerMax:Number,step:{type:Number,default:1,validator:t=>t>=0},tabindex:{type:[Number,String],default:0},disable:Boolean,readonly:Boolean},data(){const t=this.__getInnerMin(this.innerMin),e=this.__getInnerMax(this.innerMax);return{model:null===this.value?t:wt(this.value,t,e),dragging:!1}},watch:{modelUpdate(){this.model=null===this.value?this.computedInnerMin:wt(this.value,this.computedInnerMin,this.computedInnerMax),this.__updateValue(!0)}},computed:{classes(){return"q-knob non-selectable q-key-group-navigation--ignore-key"+(!0===this.editable?" q-knob--editable":!0===this.disable?" disabled":"")},computedInnerMin(){return this.__getInnerMin(this.innerMin)},computedInnerMax(){return this.__getInnerMax(this.innerMax)},modelUpdate(){return`${this.value}|${this.computedInnerMin}|${this.computedInnerMax}`},editable(){return!1===this.disable&&!1===this.readonly},decimals(){return(String(this.step).trim("0").split(".")[1]||"").length},computedStep(){return 0===this.step?1:this.step},computedInstantFeedback(){return!0===this.instantFeedback||!0===this.dragging},onEvents(){return!0===this.$q.platform.is.mobile?{click:this.__click}:{mousedown:this.__activate,click:this.__click,keydown:this.__keydown,keyup:this.__keyup}},attrs(){const t={role:"slider","aria-valuemin":this.computedInnerMin,"aria-valuemax":this.computedInnerMax,"aria-valuenow":this.value};return!0===this.editable?t.tabindex=this.tabindex:t[`aria-${!0===this.disable?"disabled":"readonly"}`]="",t}},methods:{__getInnerMin(t){return!0===isNaN(t)||this.innerMinthis.max?this.max:this.innerMax},__updateCenterPosition(){const{top:t,left:e,width:i,height:s}=this.$el.getBoundingClientRect();this.centerPosition={top:t+s/2,left:e+i/2}},__pan(t){t.isFinal?(this.__updatePosition(t.evt,!0),this.dragging=!1):t.isFirst?(this.__updateCenterPosition(),this.dragging=!0,this.__updatePosition(t.evt)):this.__updatePosition(t.evt)},__click(t){this.__updateCenterPosition(),this.__updatePosition(t,!0)},__keydown(t){if(!_a.includes(t.keyCode))return;w(t);const e=([34,33].includes(t.keyCode)?10:1)*this.computedStep,i=[34,37,40].includes(t.keyCode)?-e:e;this.model=wt(parseFloat((this.model+i).toFixed(this.decimals)),this.computedInnerMin,this.computedInnerMax),this.__updateValue()},__keyup(t){_a.includes(t.keyCode)&&this.__updateValue(!0)},__activate(t){this.__updateCenterPosition(),this.__updatePosition(t)},__updatePosition(t,e){const i=this.centerPosition,s=f(t),o=Math.abs(s.top-i.top),n=Math.sqrt(o**2+Math.abs(s.left-i.left)**2);let r=Math.asin(o/n)*(180/Math.PI);r=s.top=t/2?(e<0?-1:1)*t:0),a=parseFloat(a.toFixed(this.decimals))}a=wt(a,this.computedInnerMin,this.computedInnerMax),this.$emit("drag-value",a),this.model!==a&&(this.model=a),this.__updateValue(e)},__updateValue(t){this.value!==this.model&&this.$emit("input",this.model),!0===t&&this.$emit("change",this.model)},__getNameInput(){return this.$createElement("input",{attrs:this.formAttrs})}},render(t){const e={class:this.classes,attrs:this.attrs,props:{...this.$props,value:this.model,instantFeedback:this.computedInstantFeedback}};return!0===this.editable&&(e.key="dir",e.on=this.onEvents,e.directives=$t(this,"dir",[{name:"touch-pan",value:this.__pan,modifiers:{prevent:!0,stop:!0,mouse:!0}}]),void 0!==this.name&&(e.scopedSlots={internal:this.__getNameInput})),t(ao,e,jt(this,"default"))}});const{passive:ba}=u,ya=["both","horizontal","vertical"];var Sa=e.default.extend({name:"QScrollObserver",props:{axis:{type:String,validator:t=>ya.includes(t),default:"vertical"},debounce:[String,Number],scrollTarget:{default:void 0}},render:m,data:()=>({scroll:{position:{top:0,left:0},direction:"none",directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}}}),watch:{scrollTarget(){this.__unconfigureScrollTarget(),this.__configureScrollTarget()}},methods:{getPosition(){return JSON.parse(JSON.stringify(this.scroll))},trigger(t){if(!0===t||0===this.debounce||"0"===this.debounce)this.__emit();else if(void 0===this.clearTimer){const[t,e]=this.debounce?[setTimeout(this.__emit,this.debounce),clearTimeout]:[requestAnimationFrame(this.__emit),cancelAnimationFrame];this.clearTimer=(()=>{e(t),this.clearTimer=void 0})}},__emit(){void 0!==this.clearTimer&&this.clearTimer();const t=Math.max(0,Vi(this.__scrollTarget)),e=Hi(this.__scrollTarget),i={top:t-this.scroll.position.top,left:e-this.scroll.position.left};if("vertical"===this.axis&&0===i.top||"horizontal"===this.axis&&0===i.left)return;const s=Math.abs(i.top)>=Math.abs(i.left)?i.top<0?"up":"down":i.left<0?"left":"right";this.scroll.position={top:t,left:e},this.scroll.directionChanged=this.scroll.direction!==s,this.scroll.delta=i,!0===this.scroll.directionChanged&&(this.scroll.direction=s,this.scroll.inflectionPoint=this.scroll.position),this.$emit("scroll",this.getPosition())},__configureScrollTarget(){this.__scrollTarget=Fi(this.$el.parentNode,this.scrollTarget),this.__scrollTarget.addEventListener("scroll",this.trigger,ba),this.trigger(!0)},__unconfigureScrollTarget(){void 0!==this.__scrollTarget&&(this.__scrollTarget.removeEventListener("scroll",this.trigger,ba),this.__scrollTarget=void 0)}},mounted(){this.__configureScrollTarget()},beforeDestroy(){void 0!==this.clearTimer&&this.clearTimer(),this.__unconfigureScrollTarget()}}),xa=e.default.extend({name:"QLayout",mixins:[Ht],provide(){return{layout:this}},props:{container:Boolean,view:{type:String,default:"hhh lpr fff",validator:t=>/^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(t.toLowerCase())}},data(){return{height:this.$q.screen.height,width:!0===this.container?0:this.$q.screen.width,containerHeight:0,scrollbarWidth:!0===n?0:Zi(),header:{size:0,offset:0,space:!1},right:{size:300,offset:0,space:!1},footer:{size:0,offset:0,space:!1},left:{size:300,offset:0,space:!1},scroll:{position:0,direction:"down"}}},computed:{rows(){const t=this.view.toLowerCase().split(" ");return{top:t[0].split(""),middle:t[1].split(""),bottom:t[2].split("")}},style(){return!0===this.container?null:{minHeight:this.$q.screen.height+"px"}},targetStyle(){if(0!==this.scrollbarWidth)return{[!0===this.$q.lang.rtl?"left":"right"]:`${this.scrollbarWidth}px`}},targetChildStyle(){if(0!==this.scrollbarWidth)return{[!0===this.$q.lang.rtl?"right":"left"]:0,[!0===this.$q.lang.rtl?"left":"right"]:`-${this.scrollbarWidth}px`,width:`calc(100% + ${this.scrollbarWidth}px)`}},totalWidth(){return this.width+this.scrollbarWidth},classes(){return"q-layout q-layout--"+(!0===this.container?"containerized":"standard")},scrollbarEvtAction(){return!0!==this.container&&this.scrollbarWidth>0?"add":"remove"}},watch:{scrollbarEvtAction:"__updateScrollEvent"},created(){this.instances={}},mounted(){"add"===this.scrollbarEvtAction&&this.__updateScrollEvent("add")},beforeDestroy(){"add"===this.scrollbarEvtAction&&this.__updateScrollEvent("remove")},render(t){const e=t("div",{class:this.classes,style:this.style,attrs:{tabindex:-1},on:{...this.qListeners}},Wt([t(Sa,{key:"scroll",on:$t(this,"scroll",{scroll:this.__onPageScroll})}),t(To,{key:"resizeOut",on:$t(this,"resizeOut",{resize:this.__onPageResize})})],this,"default"));return!0===this.container?t("div",{staticClass:"q-layout-container overflow-hidden"},[t(To,{key:"resizeIn",on:$t(this,"resizeIn",{resize:this.__onContainerResize})}),t("div",{staticClass:"absolute-full",style:this.targetStyle},[t("div",{staticClass:"scroll",style:this.targetChildStyle},[e])])]):e},methods:{__animate(){void 0!==this.timer?clearTimeout(this.timer):document.body.classList.add("q-body--layout-animate"),this.timer=setTimeout(()=>{document.body.classList.remove("q-body--layout-animate"),this.timer=void 0},150)},__onPageScroll(t){!0!==this.container&&!0===document.qScrollPrevented||(this.scroll={position:t.position.top,direction:t.direction,directionChanged:t.directionChanged,inflectionPoint:t.inflectionPoint.top,delta:t.delta.top},void 0!==this.qListeners.scroll&&this.$emit("scroll",{...this.scroll}))},__onPageResize({height:t,width:e}){let i=!1;this.height!==t&&(i=!0,this.height=t,void 0!==this.qListeners["scroll-height"]&&this.$emit("scroll-height",t),this.__updateScrollbarWidth()),this.width!==e&&(i=!0,this.width=e),!0===i&&void 0!==this.qListeners.resize&&this.$emit("resize",{height:t,width:e})},__onContainerResize({height:t}){this.containerHeight!==t&&(this.containerHeight=t,this.__updateScrollbarWidth())},__updateScrollbarWidth(){if(!0===this.container){const t=this.height>this.containerHeight?Zi():0;this.scrollbarWidth!==t&&(this.scrollbarWidth=t)}},__updateScrollEvent(t){void 0!==this.timerScrollbar&&"remove"===t&&(clearTimeout(this.timerScrollbar),this.__restoreScrollbar()),window[`${t}EventListener`]("resize",this.__hideScrollbar)},__hideScrollbar(){if(void 0===this.timerScrollbar){const{offsetHeight:t,classList:e}=document.body;if(t>this.$q.screen.height)return;e.add("hide-scrollbar")}else clearTimeout(this.timerScrollbar);this.timerScrollbar=setTimeout(this.__restoreScrollbar,200)},__restoreScrollbar(){this.timerScrollbar=void 0,document.body.classList.remove("hide-scrollbar")}}}),wa=e.default.extend({name:"QMarkupTable",mixins:[ce,Ht],props:{dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:t=>["horizontal","vertical","cell","none"].includes(t)},wrapCells:Boolean},computed:{classes(){return`q-table--${this.separator}-separator`+` q-table--${this.darkSuffix} q-table__card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.dense?" q-table--dense":"")+(!0===this.flat?" q-table--flat":"")+(!0===this.bordered?" q-table--bordered":"")+(!0===this.square?" q-table--square":"")+(!1===this.wrapCells?" q-table--no-wrap":"")}},render(t){return t("div",{staticClass:"q-markup-table q-table__container q-table__card",class:this.classes,on:{...this.qListeners}},[t("table",{staticClass:"q-table"},jt(this,"default"))])}}),Ca=e.default.extend({name:"QNoSsr",mixins:[$o,Nt,Ht],props:{placeholder:String},render(t){const e={on:{...this.qListeners}};if(!0===this.canRender){const i=jt(this,"default");return void 0===i?i:i.length>1?t(this.tag,e,i):i[0]}e.staticClass="q-no-ssr-placeholder";const i=jt(this,"placeholder");return void 0!==i?i.length>1?t(this.tag,e,i):i[0]:void 0!==this.placeholder?t(this.tag,e,[this.placeholder]):void 0}}),ka=e.default.extend({name:"QRadio",mixins:[ce,to,Ss,eo],props:{value:{required:!0},val:{required:!0},label:String,leftLabel:Boolean,checkedIcon:String,uncheckedIcon:String,color:String,keepColor:Boolean,dense:Boolean,disable:Boolean,tabindex:[String,Number]},computed:{isTrue(){return this.value===this.val},classes(){return"q-radio cursor-pointer no-outline row inline no-wrap items-center"+(!0===this.disable?" disabled":"")+` q-radio--${this.darkSuffix}`+(!0===this.dense?" q-radio--dense":"")+(!0===this.leftLabel?" reverse":"")},innerClass(){const t=void 0===this.color||!0!==this.keepColor&&!0!==this.isTrue?"":` text-${this.color}`;return`q-radio__inner--${!0===this.isTrue?"truthy":"falsy"}${t}`},computedIcon(){return!0===this.isTrue?this.checkedIcon:this.uncheckedIcon},computedTabindex(){return!0===this.disable?-1:this.tabindex||0},formAttrs(){const t={type:"radio"};return void 0!==this.name&&Object.assign(t,{name:this.name,value:this.val}),t},formDomProps(){if(void 0!==this.name&&!0===this.isTrue)return{checked:!0}},attrs(){const t={tabindex:this.computedTabindex,role:"radio","aria-label":this.label,"aria-checked":!0===this.isTrue?"true":"false"};return!0===this.disable&&(t["aria-disabled"]="true"),t}},methods:{set(t){void 0!==t&&(w(t),this.__refocusTarget(t)),!0!==this.disable&&!0!==this.isTrue&&this.$emit("input",this.val,t)}},render(t){const e=void 0!==this.computedIcon?[t("div",{key:"icon",staticClass:"q-radio__icon-container absolute-full flex flex-center no-wrap"},[t(le,{staticClass:"q-radio__icon",props:{name:this.computedIcon}})])]:[t("svg",{key:"svg",staticClass:"q-radio__bg absolute non-selectable",attrs:{focusable:"false",viewBox:"0 0 24 24"}},[t("path",{attrs:{d:"M12,22a10,10 0 0 1 -10,-10a10,10 0 0 1 10,-10a10,10 0 0 1 10,10a10,10 0 0 1 -10,10m0,-22a12,12 0 0 0 -12,12a12,12 0 0 0 12,12a12,12 0 0 0 12,-12a12,12 0 0 0 -12,-12"}}),t("path",{staticClass:"q-radio__check",attrs:{d:"M12,6a6,6 0 0 0 -6,6a6,6 0 0 0 6,6a6,6 0 0 0 6,-6a6,6 0 0 0 -6,-6"}})])];!0!==this.disable&&this.__injectFormInput(e,"unshift","q-radio__native q-ma-none q-pa-none");const i=[t("div",{staticClass:"q-radio__inner relative-position",class:this.innerClass,style:this.sizeStyle,attrs:{"aria-hidden":"true"}},e)];void 0!==this.__refocusTargetEl&&i.push(this.__refocusTargetEl);const s=void 0!==this.label?Wt([this.label],this,"default"):jt(this,"default");return void 0!==s&&i.push(t("div",{staticClass:"q-radio__label q-anchor--skip"},s)),t("div",{key:"inpExt",class:this.classes,attrs:this.attrs,on:$t(this,"inpExt",{click:this.set,keydown:t=>{13!==t.keyCode&&32!==t.keyCode||w(t)},keyup:t=>{13!==t.keyCode&&32!==t.keyCode||this.set(t)}})},i)}}),qa=e.default.extend({name:"QToggle",mixins:[io],props:{icon:String,iconColor:String},computed:{computedIcon(){return(!0===this.isTrue?this.checkedIcon:!0===this.isIndeterminate?this.indeterminateIcon:this.uncheckedIcon)||this.icon},computedIconColor(){if(!0===this.isTrue)return this.iconColor}},methods:{__getInner(t){return[t("div",{staticClass:"q-toggle__track"}),t("div",{staticClass:"q-toggle__thumb absolute flex flex-center no-wrap"},void 0!==this.computedIcon?[t(le,{props:{name:this.computedIcon,color:this.computedIconColor}})]:void 0)]}},created(){this.type="toggle"}});const $a={radio:ka,checkbox:so,toggle:qa},Ta=Object.keys($a);var Ma=e.default.extend({name:"QOptionGroup",mixins:[ce,Ht],props:{value:{required:!0},options:{type:Array,validator:t=>t.every(t=>"value"in t&&"label"in t)},name:String,type:{default:"radio",validator:t=>Ta.includes(t)},color:String,keepColor:Boolean,dense:Boolean,size:String,leftLabel:Boolean,inline:Boolean,disable:Boolean},computed:{component(){return $a[this.type]},model(){return Array.isArray(this.value)?this.value.slice():this.value},classes(){return"q-option-group q-gutter-x-sm"+(!0===this.inline?" q-option-group--inline":"")},attrs(){if("radio"===this.type){const t={role:"radiogroup"};return!0===this.disable&&(t["aria-disabled"]="true"),t}return{role:"group"}}},methods:{__update(t){this.$emit("input",t)}},created(){const t=Array.isArray(this.value);"radio"===this.type?t&&console.error("q-option-group: model should not be array"):!1===t&&console.error("q-option-group: model should be array in your case")},render(t){return t("div",{class:this.classes,attrs:this.attrs,on:{...this.qListeners}},this.options.map((e,i)=>{const s=void 0!==this.$scopedSlots["label-"+i]?this.$scopedSlots["label-"+i](e):void 0!==this.$scopedSlots.label?this.$scopedSlots.label(e):void 0;return t("div",[t(this.component,{key:"inp",props:{value:this.value,val:e.value,name:void 0===e.name?this.name:e.name,disable:this.disable||e.disable,label:void 0===s?e.label:void 0,leftLabel:void 0===e.leftLabel?this.leftLabel:e.leftLabel,color:void 0===e.color?this.color:e.color,checkedIcon:e.checkedIcon,uncheckedIcon:e.uncheckedIcon,dark:void 0===e.dark?this.dark:e.dark,size:void 0===e.size?this.size:e.size,dense:this.dense,keepColor:void 0===e.keepColor?this.keepColor:e.keepColor},on:$t(this,"inp",{input:this.__update})},s)])}))}}),La=e.default.extend({name:"QPage",mixins:[Ht],inject:{pageContainer:{default(){console.error("QPage needs to be child of QPageContainer")}},layout:{}},props:{padding:Boolean,styleFn:Function},computed:{style(){const t=(!0===this.layout.header.space?this.layout.header.size:0)+(!0===this.layout.footer.space?this.layout.footer.size:0);if("function"==typeof this.styleFn){const e=!0===this.layout.container?this.layout.containerHeight:this.$q.screen.height;return this.styleFn(t,e)}return{minHeight:!0===this.layout.container?this.layout.containerHeight-t+"px":0===this.$q.screen.height?`calc(100vh - ${t}px)`:this.$q.screen.height-t+"px"}},classes(){if(!0===this.padding)return"q-layout-padding"}},render(t){return t("main",{staticClass:"q-page",style:this.style,class:this.classes,on:{...this.qListeners}},jt(this,"default"))}}),Ea=e.default.extend({name:"QPageContainer",mixins:[Ht],inject:{layout:{default(){console.error("QPageContainer needs to be child of QLayout")}}},provide:{pageContainer:!0},computed:{style(){const t={};return!0===this.layout.header.space&&(t.paddingTop=`${this.layout.header.size}px`),!0===this.layout.right.space&&(t[`padding${!0===this.$q.lang.rtl?"Left":"Right"}`]=`${this.layout.right.size}px`),!0===this.layout.footer.space&&(t.paddingBottom=`${this.layout.footer.size}px`),!0===this.layout.left.space&&(t[`padding${!0===this.$q.lang.rtl?"Right":"Left"}`]=`${this.layout.left.size}px`),t}},render(t){return t("div",{staticClass:"q-page-container",style:this.style,on:{...this.qListeners}},jt(this,"default"))}}),Aa=e.default.extend({name:"QPageSticky",mixins:[Ht],inject:{layout:{default(){console.error("QPageSticky needs to be child of QLayout")}}},props:{position:{type:String,default:"bottom-right",validator:t=>["top-right","top-left","bottom-right","bottom-left","top","right","bottom","left"].includes(t)},offset:{type:Array,validator:t=>2===t.length},expand:Boolean},computed:{attach(){const t=this.position;return{top:t.indexOf("top")>-1,right:t.indexOf("right")>-1,bottom:t.indexOf("bottom")>-1,left:t.indexOf("left")>-1,vertical:"top"===t||"bottom"===t,horizontal:"left"===t||"right"===t}},top(){return this.layout.header.offset},right(){return this.layout.right.offset},bottom(){return this.layout.footer.offset},left(){return this.layout.left.offset},style(){let t=0,e=0;const i=this.attach,s=!0===this.$q.lang.rtl?-1:1;!0===i.top&&0!==this.top?e=`${this.top}px`:!0===i.bottom&&0!==this.bottom&&(e=`${-this.bottom}px`),!0===i.left&&0!==this.left?t=`${s*this.left}px`:!0===i.right&&0!==this.right&&(t=`${-s*this.right}px`);const o={transform:`translate(${t}, ${e})`};return this.offset&&(o.margin=`${this.offset[1]}px ${this.offset[0]}px`),!0===i.vertical?(0!==this.left&&(o[!0===this.$q.lang.rtl?"right":"left"]=`${this.left}px`),0!==this.right&&(o[!0===this.$q.lang.rtl?"left":"right"]=`${this.right}px`)):!0===i.horizontal&&(0!==this.top&&(o.top=`${this.top}px`),0!==this.bottom&&(o.bottom=`${this.bottom}px`)),o},classes(){return`fixed-${this.position} q-page-sticky--${!0===this.expand?"expand":"shrink"}`}},render(t){const e=jt(this,"default");return t("div",{staticClass:"q-page-sticky row flex-center",class:this.classes,style:this.style,on:{...this.qListeners}},!0===this.expand?e:[t("div",e)])}}),Ba=e.default.extend({name:"QPageScroller",mixins:[Aa],props:{scrollOffset:{type:Number,default:1e3},reverse:Boolean,duration:{type:Number,default:300},offset:{default:()=>[18,18]}},inject:{layout:{default(){console.error("QPageScroller needs to be used within a QLayout")}}},data(){return{showing:this.__isVisible()}},computed:{scrollHeight(){return this.layout.height-(!0===this.layout.container?this.layout.containerHeight:this.$q.screen.height)},onEvents(){return{...this.qListeners,click:this.__onClick}}},watch:{"layout.scroll.position"(){this.__updateVisibility()},reverse:{handler(t){!0===t?void 0===this.heightWatcher&&(this.heightWatcher=this.$watch("scrollHeight",this.__updateVisibility)):void 0!==this.heightWatcher&&this.__cleanup()},immediate:!0}},methods:{__isVisible(){return!0===this.reverse?this.scrollHeight-this.layout.scroll.position>this.scrollOffset:this.layout.scroll.position>this.scrollOffset},__onClick(t){const e=Fi(!0===this.layout.container?this.$el:this.layout.$el);Ki(e,!0===this.reverse?this.layout.height:0,this.duration),this.$emit("click",t)},__updateVisibility(){const t=this.__isVisible();this.showing!==t&&(this.showing=t)},__cleanup(){this.heightWatcher(),this.heightWatcher=void 0}},render(t){return t("transition",{props:{name:"q-transition--fade"}},!0===this.showing?[t("div",{staticClass:"q-page-scroller",on:this.onEvents},[Aa.options.render.call(this,t)])]:null)},beforeDestroy(){void 0!==this.heightWatcher&&this.__cleanup()}});function Pa(t,e){return[!0,!1].includes(t)?t:e}var za=e.default.extend({name:"QPagination",mixins:[ce,Ht],props:{value:{type:Number,required:!0},min:{type:[Number,String],default:1},max:{type:[Number,String],required:!0},maxPages:{type:[Number,String],default:0,validator:t=>("string"==typeof t?parseInt(t,10):t)>=0},inputStyle:[Array,String,Object],inputClass:[Array,String,Object],size:String,disable:Boolean,input:Boolean,iconPrev:String,iconNext:String,iconFirst:String,iconLast:String,toFn:Function,boundaryLinks:{type:Boolean,default:null},boundaryNumbers:{type:Boolean,default:null},directionLinks:{type:Boolean,default:null},ellipses:{type:Boolean,default:null},ripple:{type:[Boolean,Object],default:null},round:Boolean,rounded:Boolean,flat:Boolean,outline:Boolean,unelevated:Boolean,push:Boolean,glossy:Boolean,color:{type:String,default:"primary"},textColor:String,activeDesign:{type:String,default:"",values:t=>""===t||je.includes(t)},activeColor:String,activeTextColor:String,gutter:String,padding:{type:String,default:"3px 2px"}},data:()=>({newPage:null}),watch:{min(){this.model=this.value},max(){this.model=this.value}},computed:{model:{get(){return this.value},set(t){if(t=parseInt(t,10),this.disable||isNaN(t))return;const e=wt(t,this.__min,this.__max);this.$emit("input",e)}},inputPlaceholder(){return this.model+" / "+this.__max},__min(){return parseInt(this.min,10)},__max(){return parseInt(this.max,10)},__maxPages(){return parseInt(this.maxPages,10)},__boundaryLinks(){return Pa(this.boundaryLinks,this.input)},__boundaryNumbers(){return Pa(this.boundaryNumbers,!this.input)},__directionLinks(){return Pa(this.directionLinks,this.input)},__ellipses(){return Pa(this.ellipses,!this.input)},__gutter(){return this.gutter in Ve?`${Ve[this.gutter]}px`:this.gutter||null},__gutterStyle(){return null!==this.__gutter?`--q-pagination-gutter-parent:-${this.__gutter};--q-pagination-gutter-child:${this.__gutter}`:null},__btnDesign(){return Qe(this,"flat")},__btnActiveDesign(){const t={[this.__btnDesign]:!1};return""!==this.activeDesign&&(t[this.activeDesign]=!0),t},icons(){const t=[this.iconFirst||this.$q.iconSet.pagination.first,this.iconPrev||this.$q.iconSet.pagination.prev,this.iconNext||this.$q.iconSet.pagination.next,this.iconLast||this.$q.iconSet.pagination.last];return!0===this.$q.lang.rtl?t.reverse():t},attrs(){const t={role:"navigation"};return!0===this.disable&&(t["aria-disabled"]="true"),t},btnProps(){return{[this.__btnDesign]:!0,round:this.round,rounded:this.rounded,padding:this.padding,color:this.color,textColor:this.textColor,size:this.size,ripple:null===this.ripple||this.ripple}},activeBtnProps(){return{...this.__btnActiveDesign,color:this.activeColor||this.color,textColor:this.activeTextColor||this.textColor}},btnConfig(){let t=Math.max(this.__maxPages,1+(this.__ellipses?2:0)+(this.__boundaryNumbers?2:0));const e={pgFrom:this.__min,pgTo:this.__max,ellipsesStart:!1,ellipsesEnd:!1,boundaryStart:!1,boundaryEnd:!1,marginalStyle:{minWidth:`${Math.max(2,String(this.__max).length)}em`}};return this.__maxPages&&tthis.__min+(this.__boundaryNumbers?1:0)&&(e.ellipsesStart=!0,e.pgFrom++),this.__boundaryNumbers&&(e.boundaryEnd=!0,e.pgTo--),this.__ellipses&&e.pgTo{this.model=this.newPage,this.newPage=null};return{input:t=>{this.newPage=t},keyup:e=>{!0===ze(e,13)&&t()},blur:t}}},methods:{set(t){this.model=t},setByOffset(t){this.model=this.model+t},__getBtn(t,e,i,s,o){return e.props={...this.btnProps,...i},e.attrs={"aria-label":s,"aria-current":"false",...e.attrs},!0===o&&(Object.assign(e.props,this.activeBtnProps),e.attrs["aria-current"]="true"),void 0!==s&&(void 0!==this.toFn?e.props.to=this.toFn(s):e.on={click:()=>{this.set(s)}}),t(Ze,e)}},render(t){const e=[],i=[];let s;if(!0===this.__boundaryLinks&&(e.push(this.__getBtn(t,{key:"bls"},{disable:this.disable||this.value<=this.__min,icon:this.icons[0]},this.__min)),i.unshift(this.__getBtn(t,{key:"ble"},{disable:this.disable||this.value>=this.__max,icon:this.icons[3]},this.__max))),!0===this.__directionLinks&&(e.push(this.__getBtn(t,{key:"bdp"},{disable:this.disable||this.value<=this.__min,icon:this.icons[1]},this.value-1)),i.unshift(this.__getBtn(t,{key:"bdn"},{disable:this.disable||this.value>=this.__max,icon:this.icons[2]},this.value+1))),!0!==this.input){s=[];const{pgFrom:o,pgTo:n,marginalStyle:r}=this.btnConfig;if(!0===this.btnConfig.boundaryStart){const i=this.__min===this.value;e.push(this.__getBtn(t,{key:"bns",style:r},{disable:this.disable,label:this.__min},this.__min,i))}if(!0===this.btnConfig.boundaryEnd){const e=this.__max===this.value;i.unshift(this.__getBtn(t,{key:"bne",style:r},{disable:this.disable,label:this.__max},this.__max,e))}!0===this.btnConfig.ellipsesStart&&e.push(this.__getBtn(t,{key:"bes",style:r},{disable:this.disable,label:"…",ripple:!1},o-1)),!0===this.btnConfig.ellipsesEnd&&i.unshift(this.__getBtn(t,{key:"bee",style:r},{disable:this.disable,label:"…",ripple:!1},n+1));for(let e=o;e<=n;e++)s.push(this.__getBtn(t,{key:`bpg${e}`,style:r},{disable:this.disable,label:e},e,e===this.value))}return t("div",{staticClass:"q-pagination row no-wrap items-center",class:{disabled:this.disable},attrs:this.attrs,on:{...this.qListeners}},[t("div",{staticClass:"q-pagination__content row no-wrap items-center",style:this.__gutterStyle},[...e,t("div",{key:"stop",staticClass:"q-pagination__middle row justify-center",on:!0===this.input?$t(this,"stop",{input:S}):null},!0===this.input?[t(ca,{key:"inp",staticClass:"inline",style:{width:`${this.inputPlaceholder.length/1.5}em`},props:{type:"number",dense:!0,value:this.newPage,disable:this.disable,dark:this.dark,borderless:!0,inputClass:this.inputClass,inputStyle:this.inputStyle},attrs:{placeholder:this.inputPlaceholder,min:this.__min,max:this.__max},on:{...this.inputEvents}})]:s),...i])])}});function Ia(t){let e,i,s=!1;function o(){i=arguments,!0!==s&&(s=!0,e=requestAnimationFrame(()=>{t.apply(this,i),i=void 0,s=!1}))}return o.cancel=(()=>{window.cancelAnimationFrame(e),s=!1}),o}const{passive:Oa}=u;var Ra=e.default.extend({name:"QParallax",mixins:[Ht],props:{src:String,height:{type:Number,default:500},speed:{type:Number,default:1,validator:t=>t>=0&&t<=1},scrollTarget:{default:void 0}},data:()=>({scrolling:!1,percentScrolled:0}),watch:{height(){!0===this.working&&this.__updatePos()},scrollTarget(){!0===this.working&&(this.__stop(),this.__start())}},methods:{__update(t){this.percentScrolled=t,void 0!==this.qListeners.scroll&&this.$emit("scroll",t)},__updatePos(){let t,e,i;this.__scrollTarget===window?(t=0,i=e=window.innerHeight):i=(t=Te(this.__scrollTarget).top)+(e=Me(this.__scrollTarget));const s=Te(this.$el).top,o=s+this.height;if(void 0!==this.observer||o>t&&s{this[!0===t[0].isIntersecting?"__start":"__stop"]()}),this.observer.observe(this.$el)):this.__start()},beforeDestroy(){this.__stop(),void 0!==this.observer&&this.observer.disconnect(),this.media.onload=this.media.onloadstart=this.media.loadedmetadata=null}});function Fa(t,e=new WeakMap){if(Object(t)!==t)return t;if(e.has(t))return e.get(t);const i=t instanceof Date?new Date(t):t instanceof RegExp?new RegExp(t.source,t.flags):t instanceof Set?new Set:t instanceof Map?new Map:"function"!=typeof t.constructor?Object.create(null):void 0!==t.prototype&&"function"==typeof t.prototype.constructor?t:new t.constructor;if("function"==typeof t.constructor&&"function"==typeof t.valueOf){const i=t.valueOf();if(Object(i)!==i){const s=new t.constructor(i);return e.set(t,s),s}}return e.set(t,i),t instanceof Set?t.forEach(t=>{i.add(Fa(t,e))}):t instanceof Map&&t.forEach((t,s)=>{i.set(s,Fa(t,e))}),Object.assign(i,...Object.keys(t).map(i=>({[i]:Fa(t[i],e)})))}var Da=e.default.extend({name:"QPopupEdit",mixins:[At],props:{value:{required:!0},title:String,buttons:Boolean,labelSet:String,labelCancel:String,color:{type:String,default:"primary"},validate:{type:Function,default:()=>!0},autoSave:Boolean,cover:{type:Boolean,default:!0},contentClass:String,disable:Boolean},data:()=>({modelChanged:!1,model:null}),computed:{classes(){return"q-popup-edit"+(void 0!==this.contentClass?` ${this.contentClass}`:"")},modelValue(){return!0===this.modelChanged?this.model:this.value},initialValue(){return!0!==this.modelChanged?this.model:this.value},defaultSlotScope(){return Mo({initialValue:this.initialValue,updatePosition:this.__reposition,emitValue:this.__changeModel,validate:this.validate,set:this.set,cancel:this.cancel},"value",()=>this.modelValue,this.__changeModel)},menuProps(){return{...this.qAttrs,cover:this.cover,contentClass:this.classes}}},methods:{set(){!0===this.validate(this.modelValue)&&(!0===this.__hasChanged()&&(this.$emit("save",this.modelValue,this.initialValue),!0===this.modelChanged&&this.$emit("input",this.modelValue)),this.__close())},cancel(){!0===this.__hasChanged()&&(this.$emit("cancel",this.modelValue,this.initialValue),!0!==this.modelChanged&&this.$emit("input",this.initialValue)),this.__close()},show(t){void 0!==this.$refs.menu&&this.$refs.menu.show(t)},hide(t){void 0!==this.$refs.menu&&this.$refs.menu.hide(t)},__hasChanged(){return!1===Ls(this.modelValue,this.initialValue)},__changeModel(t){!0!==this.disable&&(this.model=t,this.modelChanged=!0)},__close(){this.validated=!0,!0===this.$refs.menu.showing&&this.$refs.menu.hide()},__reposition(){this.$nextTick(()=>{this.$refs.menu.updatePosition()})},__getContent(t){const e=jt(this,"title",this.title),i=void 0===this.$scopedSlots.default?[]:[].concat(this.$scopedSlots.default(this.defaultSlotScope));return e&&i.unshift(t("div",{staticClass:"q-dialog__title q-mt-sm q-mb-sm"},[e])),!0===this.buttons&&i.push(t("div",{staticClass:"q-popup-edit__buttons row justify-center no-wrap"},[t(Ze,{key:"cancel",props:{flat:!0,color:this.color,label:this.labelCancel||this.$q.lang.label.cancel},on:$t(this,"cancel",{click:this.cancel})}),t(Ze,{key:"ok",props:{flat:!0,color:this.color,label:this.labelSet||this.$q.lang.label.set},on:$t(this,"ok",{click:this.set})})])),i}},render(t){if(!0!==this.disable)return t(us,{key:"menu",ref:"menu",props:this.menuProps,on:$t(this,"menu",{"before-show":()=>{this.validated=!1,this.modelChanged=!1,this.model=Fa(this.value),this.watcher=this.$watch("value",this.__reposition),this.$emit("before-show")},show:()=>{this.$emit("show")},"escape-key":this.cancel,"before-hide":()=>{this.watcher(),!1===this.validated&&!0===this.__hasChanged()&&(!0===this.autoSave&&!0===this.validate(this.model)?(this.$emit("save",this.modelValue,this.initialValue),!0===this.modelChanged&&this.$emit("input",this.modelValue)):(this.$emit("cancel",this.modelValue,this.initialValue),!0!==this.modelChanged&&this.$emit("input",this.initialValue))),this.$emit("before-hide")},hide:()=>{this.$emit("hide")},keyup:t=>{!0===ze(t,13)&&this.set()}})},this.__getContent(t))}}),Va=e.default.extend({name:"QPopupProxy",mixins:[At,Ht,ai],props:{breakpoint:{type:[String,Number],default:450}},data(){const t=parseInt(this.breakpoint,10);return{type:this.$q.screen.width({state:"pull",pullRatio:0,pulling:!1,pullPosition:-40,animating:!1,positionCSS:{}}),computed:{style(){return{opacity:this.pullRatio,transform:`translateY(${this.pullPosition}px) rotate(${360*this.pullRatio}deg)`}},classes(){return"q-pull-to-refresh__puller row flex-center"+(!0===this.animating?" q-pull-to-refresh__puller--animating":"")+(void 0!==this.bgColor?` bg-${this.bgColor}`:"")},directives(){if(!0!==this.disable){const t={down:!0};return!0!==this.noMouse&&(t.mouse=!0),[{name:"touch-pan",modifiers:t,value:this.__pull}]}},contentClass(){return`q-pull-to-refresh__content${!0===this.pulling?" no-pointer-events":""}`}},watch:{scrollTarget(){this.updateScrollTarget()}},methods:{trigger(){this.$emit("refresh",()=>{this.__animateTo({pos:-40,ratio:0},()=>{this.state="pull"})})},updateScrollTarget(){this.__scrollTarget=Fi(this.$el,this.scrollTarget)},__pull(t){if(!0===t.isFinal)return void(!0===this.pulling&&(this.pulling=!1,"pulled"===this.state?(this.state="refreshing",this.__animateTo({pos:20}),this.trigger()):"pull"===this.state&&this.__animateTo({pos:-40,ratio:0})));if(!0===this.animating||"refreshing"===this.state)return!1;if(!0===t.isFirst){if(0!==Ni(this.__scrollTarget)||"down"!==t.direction)return!0===this.pulling&&(this.pulling=!1,this.state="pull",this.__animateTo({pos:-40,ratio:0})),!1;this.pulling=!0;const{top:e,left:i}=this.$el.getBoundingClientRect();this.positionCSS={top:e+"px",left:i+"px",width:window.getComputedStyle(this.$el).getPropertyValue("width")}}x(t.evt);const e=Math.min(140,Math.max(0,t.distance.y));this.pullPosition=e-40,this.pullRatio=wt(e/60,0,1);const i=this.pullPosition>20?"pulled":"pull";this.state!==i&&(this.state=i)},__animateTo({pos:t,ratio:e},i){this.animating=!0,this.pullPosition=t,void 0!==e&&(this.pullRatio=e),clearTimeout(this.timer),this.timer=setTimeout(()=>{this.animating=!1,i&&i()},300)}},mounted(){this.updateScrollTarget()},beforeDestroy(){clearTimeout(this.timer)},render(t){return t("div",{staticClass:"q-pull-to-refresh",on:{...this.qListeners},directives:this.directives},[t("div",{class:this.contentClass},jt(this,"default")),t("div",{staticClass:"q-pull-to-refresh__puller-container fixed row flex-center no-pointer-events z-top",style:this.positionCSS},[t("div",{style:this.style,class:this.classes},["refreshing"!==this.state?t(le,{props:{name:this.icon||this.$q.iconSet.pullToRefresh.icon,color:this.color,size:"32px"}}):t($e,{props:{size:"24px",color:this.color}})])])])}});const Qa=0,Wa=1,Ua=2;var Ya=e.default.extend({name:"QRange",mixins:[ko],props:{value:{type:Object,default:()=>({min:null,max:null}),validator:t=>"min"in t&&"max"in t},dragRange:Boolean,dragOnlyRange:Boolean,leftLabelColor:String,leftLabelTextColor:String,rightLabelColor:String,rightLabelTextColor:String,leftLabelValue:[String,Number],rightLabelValue:[String,Number],leftThumbColor:String,rightThumbColor:String},data(){return{model:{min:null===this.value.min?this.__getInnerMin():wt(this.value.min,this.min,this.max),max:null===this.value.max?this.__getInnerMax():wt(this.value.max,this.min,this.max)},curMinRatio:0,curMaxRatio:0}},computed:{canDragRange(){return!0===this.dragRange||!0===this.dragOnlyRange},modelMinRatio(){return this.__convertModelToRatio(this.model.min)},modelMaxRatio(){return this.__convertModelToRatio(this.model.max)},ratioMin(){return!0===this.active?this.curMinRatio:this.modelMinRatio},ratioMax(){return!0===this.active?this.curMaxRatio:this.modelMaxRatio},selectionBarStyle(){const t=Math.max(this.ratioMin,this.innerMinRatio),e={[this.positionProp]:`${100*t}%`,[this.sizeProp]:`${100*(wt(this.ratioMax,t,this.innerMaxRatio)-t)}%`};return void 0!==this.selectionImg&&(e.backgroundImage=`url(${this.selectionImg}) !important`),e},trackContainerAttrs(){return!0!==this.$q.platform.is.mobile?{tabindex:!1!==this.canDragRange?this.computedTabindex:-1}:void 0},trackContainerEvents(){return!0!==this.editable?{}:!0===this.$q.platform.is.mobile?{click:this.__onMobileClick}:{mousedown:this.__onActivate,focus:()=>{this.focus="both"},blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}},thumbAttrs(){return{tabindex:!0!==this.dragOnlyRange?this.computedTabindex:null}},thumbMinEvents(){return this.__getEvents("min")},thumbMaxEvents(){return this.__getEvents("max")},thumbMinLabel(){return void 0!==this.leftLabelValue?this.leftLabelValue:this.value.minthis.max?this.value.min:this.model.min},thumbMaxLabel(){return void 0!==this.rightLabelValue?this.rightLabelValue:this.value.maxthis.max?this.value.max:this.model.max},thumbMinClasses(){const t=this.leftThumbColor||this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.value.minthis.max?" q-slider__thumb--wrong-value":"")+(!1!==this.preventFocus||"min"!==this.focus&&"both"!==this.focus?"":" q-slider--focus")+(void 0!==t?` text-${t}`:"")},thumbMaxClasses(){const t=this.rightThumbColor||this.thumbColor||this.color;return`q-slider__thumb q-slider__thumb${this.axis} q-slider__thumb${this.axis}-${!0===this.isReversed?"rtl":"ltr"} absolute non-selectable`+(this.value.maxthis.max?" q-slider__thumb--hidden":"")+(!1!==this.preventFocus||"max"!==this.focus&&"both"!==this.focus?"":" q-slider--focus")+(void 0!==t?` text-${t}`:"")},thumbMinStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratioMin}%`,zIndex:"min"===this.focus?2:void 0}},thumbMaxStyle(){return{width:this.thumbSize,height:this.thumbSize,[this.positionProp]:`${100*this.ratioMax}%`,zIndex:"max"===this.focus?2:void 0}},thumbMinPinColor(){const t=this.leftLabelColor||this.labelColor;return void 0!==t?` text-${t}`:""},thumbMaxPinColor(){const t=this.rightLabelColor||this.labelColor;return void 0!==t?` text-${t}`:""},thumbMinTextContainerStyle(){return this.__getTextContainerStyle(this.ratioMin)},thumbMaxTextContainerStyle(){return this.__getTextContainerStyle(this.ratioMax)},thumbMinTextClass(){const t=this.leftLabelTextColor||this.labelTextColor;return"q-slider__text"+(void 0!==t?` text-${t}`:"")},thumbMaxTextClass(){const t=this.rightLabelTextColor||this.labelTextColor;return"q-slider__text"+(void 0!==t?` text-${t}`:"")},formAttrs(){return{type:"hidden",name:this.name,value:`${this.value.min}|${this.value.max}`}},modelUpdate(){return[this.value.min,this.value.max,this.min,this.max,this.innerMin,this.innerMax].join("#")}},watch:{modelUpdate(){this.model.min=null===this.value.min?this.computedInnerMin:wt(this.value.min,this.min,this.max),this.model.max=null===this.value.max?this.computedInnerMax:wt(this.value.max,this.min,this.max)},focus(t){if("both"===t&&!0!==this.canDragRange){if(!0!==this.$q.platform.is.mobile){const t=this.$refs[`${this.nextFocus}Thumb`];void 0!==t&&t.focus()}}else!1!==t&&t!==this.nextFocus&&(this.nextFocus=t)}},methods:{__updateValue(t){this.model.min===this.value.min&&this.model.max===this.value.max||this.$emit("input",{...this.model}),!0===t&&this.$emit("change",{...this.model})},__getDragging(t){const{left:e,top:i,width:s,height:o}=this.$el.getBoundingClientRect(),n=!0===this.dragOnlyRange?0:(!0===this.vertical?this.$refs.minThumb.offsetHeight/(2*o):this.$refs.minThumb.offsetWidth/(2*s))+(this.modelMaxRatio-this.modelMinRatio)/20,r={left:e,top:i,width:s,height:o,valueMin:this.model.min,valueMax:this.model.max,ratioMin:this.modelMinRatio,ratioMax:this.modelMaxRatio},a=this.__getDraggingRatio(t,r);return!0!==this.dragOnlyRange&&a=e.ratioMin?(i={minR:e.ratioMin,maxR:s,min:e.valueMin,max:o},this.focus="max"):(i={minR:s,maxR:e.ratioMin,min:o,max:e.valueMin},this.focus="min");break;case Wa:const t=s-e.offsetRatio,n=wt(e.ratioMin+t,this.innerMinRatio,this.innerMaxRatio-e.rangeRatio),r=o-e.offsetModel,a=wt(e.valueMin+r,this.computedInnerMin,this.computedInnerMax-e.rangeValue);i={minR:n,maxR:n+e.rangeRatio,min:parseFloat(a.toFixed(this.computedDecimals)),max:parseFloat((a+e.rangeValue).toFixed(this.computedDecimals))},this.focus="both"}const n="min"===this.focus&&i.max>=this.computedInnerMin&&i.max<=this.computedInnerMax||"max"===this.focus&&i.min>=this.computedInnerMin&&i.min<=this.computedInnerMax?this.focus:null;this.model={min:"max"!==n?wt(i.min,this.computedInnerMin,this.computedInnerMax):i.min,max:"min"!==n?wt(i.max,this.computedInnerMin,this.computedInnerMax):i.max},null!==this.model.min&&null!==this.model.max||(this.model.min=i.min||this.computedInnerMin,this.model.max=i.max||this.computedInnerMax),!0!==this.snap||0===this.step?(this.curMinRatio="max"!==n?wt(i.minR,this.innerMinRatio,this.innerMaxRatio):i.minR,this.curMaxRatio="min"!==n?wt(i.maxR,this.innerMinRatio,this.innerMaxRatio):i.maxR):(this.curMinRatio=this.__convertModelToRatio(this.model.min),this.curMaxRatio=this.__convertModelToRatio(this.model.max))},__getEvents(t){return!0!==this.$q.platform.is.mobile&&!0===this.editable&&!0!==this.dragOnlyRange?{focus:()=>{this.focus=t},blur:this.__onBlur,keydown:this.__onKeydown,keyup:this.__onKeyup}:{}},__onKeydown(t){if(!Co.includes(t.keyCode))return;const e="both"===this.focus&&!0!==this.canDragRange;if(!1!==this.focus&&!0!==e||(this.focus=this.nextFocus),w(t),!0===this.dragOnlyRange||!0===this.dragRange&&"both"===this.focus){const e=this.model.max-this.model.min,i=wt(parseFloat((this.model.min+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),this.computedInnerMin,this.computedInnerMax-e);this.model={min:i,max:parseFloat((i+e).toFixed(this.computedDecimals))}}else{if("min"!==this.focus&&"max"!==this.focus)return;{const e=this.focus;this.model={...this.model,[e]:wt(parseFloat((this.model[e]+this.getKeyOffset(t.keyCode)).toFixed(this.computedDecimals)),"min"===e?this.computedInnerMin:this.model.min,"max"===e?this.computedInnerMax:this.model.max)}}}this.__updateValue()}},created(){this.nextFocus="min"},render(t){const e=this.__getContent(t,e=>{const i=this.__getThumb(t,{pinColor:this.thumbMinPinColor,textContainerStyle:this.thumbMinTextContainerStyle,textClass:this.thumbMinTextClass,label:this.thumbMinLabel,classes:this.thumbMinClasses,style:this.thumbMinStyle,nodeData:{ref:"minThumb",key:"tmin",on:this.thumbMinEvents,attrs:this.thumbAttrs}}),s=this.__getThumb(t,{pinColor:this.thumbMaxPinColor,textContainerStyle:this.thumbMaxTextContainerStyle,textClass:this.thumbMaxTextClass,label:this.thumbMaxLabel,classes:this.thumbMaxClasses,style:this.thumbMaxStyle,nodeData:{ref:"maxThumb",key:"tmax",on:this.thumbMaxEvents,attrs:this.thumbAttrs}});!0===this.reverse?e.push(s,i):e.push(i,s)});return t("div",{class:"q-range "+this.classes+(null===this.value.min||null===this.value.max?" q-slider--no-value":""),attrs:{...this.attributes,"aria-valuenow":this.value.min+"|"+this.value.max}},e)}}),Ka=e.default.extend({name:"QRating",mixins:[Vt,Ss,Ht],directives:{KeyGroupNavigation:Qo},props:{value:{type:Number,required:!0},max:{type:[String,Number],default:5},icon:[String,Array],iconHalf:[String,Array],iconSelected:[String,Array],iconAriaLabel:[String,Array],color:[String,Array],colorHalf:[String,Array],colorSelected:[String,Array],vertical:Boolean,noReset:Boolean,noDimming:Boolean,readonly:Boolean,disable:Boolean},data:()=>({mouseModel:0}),computed:{editable(){return!0!==this.readonly&&!0!==this.disable},classes(){return`q-rating--${!0===this.editable?"":"non-"}editable`+(!0===this.vertical?" column justify-center":" row items-center")+(!0===this.noDimming?" q-rating--no-dimming":"")+(!0===this.disable?" disabled":"")+(void 0!==this.color&&!1===Array.isArray(this.color)?` text-${this.color}`:"")},iconData(){const t=!0===Array.isArray(this.icon)?this.icon.length:0,e=!0===Array.isArray(this.iconSelected)?this.iconSelected.length:0,i=!0===Array.isArray(this.iconHalf)?this.iconHalf.length:0,s=!0===Array.isArray(this.color)?this.color.length:0,o=!0===Array.isArray(this.colorSelected)?this.colorSelected.length:0,n=!0===Array.isArray(this.colorHalf)?this.colorHalf.length:0;return{iconLen:t,icon:t>0?this.icon[t-1]:this.icon,selIconLen:e,selIcon:e>0?this.iconSelected[e-1]:this.iconSelected,halfIconLen:i,halfIcon:i>0?this.iconHalf[e-1]:this.iconHalf,colorLen:s,color:s>0?this.color[s-1]:this.color,selColorLen:o,selColor:o>0?this.colorSelected[o-1]:this.colorSelected,halfColorLen:n,halfColor:n>0?this.colorHalf[n-1]:this.colorHalf}},iconLabel(){if("string"==typeof this.iconAriaLabel){const t=this.iconAriaLabel.length>0?`${this.iconAriaLabel} `:"";return e=>`${t}${e}`}if(!0===Array.isArray(this.iconAriaLabel)){const t=this.iconAriaLabel.length;if(t>0)return e=>this.iconAriaLabel[Math.min(e,t)-1]}return(t,e)=>`${e} ${t}`},stars(){const t=[],e=this.iconData,i=Math.ceil(this.value),s=!0===this.editable?0:null,o=void 0===this.iconHalf||i===this.value?-1:i;for(let n=1;n<=this.max;n++){const r=this.mouseModel>=n||0===this.mouseModel&&this.value>=n,a=o===n&&this.mouseModel0&&(!0===a?i:this.value)>=n&&this.mouseModel-1&&(this.__set(e),w(t))}},render(t){const e=[];return this.stars.forEach(({classes:i,name:s,attrs:o},n)=>{const r=n+1;e.push(t("div",{key:"i#"+r,ref:`rt${r}`,staticClass:"q-rating__icon-container flex flex-center",attrs:o,on:$t(this,"i#"+r,{click:()=>{this.__set(r)},mouseover:()=>{this.__setHoverValue(r)},mouseout:()=>{this.mouseModel=0},focus:()=>{this.__setHoverValue(r)},blur:()=>{this.mouseModel=0},keyup:t=>{this.__keyup(t,r)}})},Wt([t(le,{class:i,props:{name:s}})],this,`tip-${r}`)))}),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{staticClass:"q-rating inline",class:this.classes,style:this.sizeStyle,attrs:this.attrs,directives:this.directives,on:{...this.qListeners}},e)}}),Ga=e.default.extend({name:"QResponsive",mixins:[Jr,Ht],render(t){return t("div",{staticClass:"q-responsive",on:{...this.qListeners}},[t("div",{staticClass:"q-responsive__filler overflow-hidden"},[t("div",{style:this.ratioStyle})]),t("div",{staticClass:"q-responsive__content absolute-full fit"},jt(this,"default"))])}});const Xa=t=>t>=250?50:Math.ceil(t/5),Za=["vertical","horizontal"],Ja={vertical:{offset:"offsetY",scroll:"scrollTop",dir:"down",dist:"y"},horizontal:{offset:"offsetX",scroll:"scrollLeft",dir:"right",dist:"x"}};var tl=e.default.extend({name:"QScrollArea",mixins:[ce],directives:{TouchPan:xo},props:{thumbStyle:Object,verticalThumbStyle:Object,horizontalThumbStyle:Object,barStyle:[Array,String,Object],verticalBarStyle:[Array,String,Object],horizontalBarStyle:[Array,String,Object],contentStyle:[Array,String,Object],contentActiveStyle:[Array,String,Object],delay:{type:[String,Number],default:1e3},visible:{type:Boolean,default:null},horizontal:Boolean,tabindex:[String,Number]},data:()=>({tempShowing:!1,panning:!1,hover:!1,container:{vertical:0,horizontal:0},scroll:{vertical:{position:0,size:0},horizontal:{position:0,size:0}}}),computed:{classes(){return"q-scrollarea"+` q-scrollarea--${this.darkSuffix}`},verticalScrollPercentage(){const t=this.scroll.vertical.size-this.container.vertical;if(t<=0)return 0;const e=wt(this.scroll.vertical.position/t,0,1);return Math.round(1e4*e)/1e4},horizontalScrollPercentage(){const t=this.scroll.horizontal.size-this.container.horizontal;if(t<=0)return 0;const e=wt(this.scroll.horizontal.position/t,0,1);return Math.round(1e4*e)/1e4},verticalThumbHidden(){return!0!==(null===this.visible?this.hover:this.visible)&&!1===this.tempShowing&&!1===this.panning||this.scroll.vertical.size<=this.container.vertical+1},horizontalThumbHidden(){return!0!==(null===this.visible?this.hover:this.visible)&&!1===this.tempShowing&&!1===this.panning||this.scroll.horizontal.size<=this.container.horizontal+1},verticalThumbStart(){return this.verticalScrollPercentage*(this.container.vertical-this.verticalThumbSize)},horizontalThumbStart(){return this.horizontalScrollPercentage*(this.container.horizontal-this.horizontalThumbSize)},verticalThumbSize(){return Math.round(wt(this.container.vertical*this.container.vertical/this.scroll.vertical.size,Xa(this.container.vertical),this.container.vertical))},horizontalThumbSize(){return Math.round(wt(this.container.horizontal*this.container.horizontal/this.scroll.horizontal.size,Xa(this.container.horizontal),this.container.horizontal))},verticalStyle(){return{...this.thumbStyle,...this.verticalThumbStyle,top:`${this.verticalThumbStart}px`,height:`${this.verticalThumbSize}px`}},horizontalStyle(){return{...this.thumbStyle,...this.horizontalThumbStyle,left:`${this.horizontalThumbStart}px`,width:`${this.horizontalThumbSize}px`}},verticalThumbClass(){return"q-scrollarea__thumb q-scrollarea__thumb--v absolute-right"+(!0===this.verticalThumbHidden?" q-scrollarea__thumb--invisible":"")},horizontalThumbClass(){return"q-scrollarea__thumb q-scrollarea__thumb--h absolute-bottom"+(!0===this.horizontalThumbHidden?" q-scrollarea__thumb--invisible":"")},verticalBarClass(){return"q-scrollarea__bar q-scrollarea__bar--v absolute-right"+(!0===this.verticalThumbHidden?" q-scrollarea__bar--invisible":"")},horizontalBarClass(){return"q-scrollarea__bar q-scrollarea__bar--h absolute-bottom"+(!0===this.horizontalThumbHidden?" q-scrollarea__bar--invisible":"")},scrollComputed(){return{vertical:{...this.scroll.vertical,percentage:this.verticalScrollPercentage,thumbHidden:this.verticalThumbHidden,thumbStart:this.verticalThumbStart,thumbSize:this.verticalThumbSize,style:this.verticalStyle,thumbClass:this.verticalThumbClass,barClass:this.verticalBarClass},horizontal:{...this.scroll.horizontal,percentage:this.horizontalScrollPercentage,thumbHidden:this.horizontalThumbHidden,thumbStart:this.horizontalThumbStart,thumbSize:this.horizontalThumbSize,style:this.horizontalStyle,thumbClass:this.horizontalThumbClass,barClass:this.horizontalBarClass}}},mainStyle(){return!0===this.verticalThumbHidden&&!0===this.horizontalThumbHidden?this.contentStyle:this.contentActiveStyle},verticalThumbDirectives(){return[{name:"touch-pan",modifiers:{vertical:!0,prevent:!0,mouse:!0,mouseAllDir:!0},value:t=>{this.__panThumb(t,"vertical")}}]},horizontalThumbDirectives(){return[{name:"touch-pan",modifiers:{horizontal:!0,prevent:!0,mouse:!0,mouseAllDir:!0},value:t=>{this.__panThumb(t,"horizontal")}}]},scrollAttrs(){if(void 0!==this.tabindex)return{tabindex:this.tabindex}}},methods:{getScrollTarget(){return this.$refs.target},getScroll(){const t={};return Za.forEach(e=>{const i=this.scrollComputed[e];t[e+"Position"]=i.position,t[e+"Percentage"]=i.percentage,t[e+"Size"]=i.size,t[e+"ContainerSize"]=this.container[e]}),t},getScrollPosition(t){return"both"===t?{top:this.scroll.vertical.position,left:this.scroll.horizontal.position}:(!0!==Za.includes(t)&&(t=!0===this.horizontal?"horizontal":"vertical"),this.scroll[t].position)},getScrollPercentage(t){return"both"===t?{top:this.verticalScrollPercentage,left:this.horizontalScrollPercentage}:(!0!==Za.includes(t)&&(t=!0===this.horizontal?"horizontal":"vertical"),this[`${t}ScrollPercentage`])},setScrollPosition(t,e,i){if(!1===Za.includes(t)){if(!0===isNaN(t))return void console.error("[QScrollArea]: wrong first param of setScrollPosition (vertical/horizontal)");[t,e,i]=[!0===this.horizontal?"horizontal":"vertical",t,e]}("vertical"===t?Yi:Gi)(this.$refs.target,e,i)},setScrollPercentage(t,e,i){if(!1===Za.includes(t)){if(!0===isNaN(t))return void console.error("[QScrollArea]: wrong first param of setScrollPercentage (vertical/horizontal)");[t,e,i]=[!0===this.horizontal?"horizontal":"vertical",t,e]}this.setScrollPosition(t,e*(this.scroll[t].size-this.container[t]),i)},__updateContainer({height:t,width:e}){let i=!1;this.container.vertical!==t&&(this.container.vertical=t,i=!0),this.container.horizontal!==e&&(this.container.horizontal=e,i=!0),!0===i&&this.__startTimer()},__updateScroll({position:t}){let e=!1;this.scroll.vertical.position!==t.top&&(this.scroll.vertical.position=t.top,e=!0),this.scroll.horizontal.position!==t.left&&(this.scroll.horizontal.position=t.left,e=!0),!0===e&&this.__startTimer()},__updateScrollSize({height:t,width:e}){let i=!1;this.scroll.horizontal.size!==e&&(this.scroll.horizontal.size=e,i=!0),this.scroll.vertical.size!==t&&(this.scroll.vertical.size=t,i=!0),!0===i&&this.__startTimer()},__panThumb(t,e){const i=this.scrollComputed[e];if(!0===t.isFinal){if(!0!==this.panning)return;this.panning=!1}else if(!0===t.isFirst){if(!0===i.thumbHidden)return;this.refPos=i.position,this.panning=!0}else if(!0!==this.panning)return;const s=Ja[e],o=this.container[e],n=(i.size-o)/(o-i.thumbSize),r=t.distance[s.dist],a=this.refPos+(t.direction===s.dir?1:-1)*r*n;this.__setScroll(a,e)},__mouseDown(t,e){const i=this.scrollComputed[e];if(!0!==i.thumbHidden){const s=t[Ja[e].offset];if(si.thumbStart+i.thumbSize){const t=s-i.thumbSize/2;this.__setScroll(t/this.container[e]*i.size,e)}const o="vertical"===e?this.$refs.verticalThumb:this.$refs.horizontalThumb;void 0!==o&&o.dispatchEvent(new MouseEvent(t.type,t))}},__verticalMouseDown(t){this.__mouseDown(t,"vertical")},__horizontalMouseDown(t){this.__mouseDown(t,"horizontal")},__startTimer(){!0===this.tempShowing?clearTimeout(this.timer):this.tempShowing=!0,this.timer=setTimeout(()=>{this.tempShowing=!1},this.delay),void 0!==this.$listeners.scroll&&this.__emitScroll()},__setScroll(t,e){this.$refs.target[Ja[e].scroll]=t},__mouseEnter(){this.hover=!0},__mouseLeave(){this.hover=!1}},render(t){return t("div",{key:"desk",class:this.classes,on:$t(this,"desk",{mouseenter:this.__mouseEnter,mouseleave:this.__mouseLeave})},[t("div",{ref:"target",staticClass:"q-scrollarea__container scroll relative-position fit hide-scrollbar",attrs:this.scrollAttrs},[t("div",{staticClass:"q-scrollarea__content absolute",style:this.mainStyle},Wt([t(To,{key:"resizeIn",props:{debounce:0},on:$t(this,"resizeIn",{resize:this.__updateScrollSize})})],this,"default")),t(Sa,{key:"scroll",props:{axis:"both"},on:$t(this,"scroll",{scroll:this.__updateScroll})})]),t(To,{key:"resizeOut",props:{debounce:0},on:$t(this,"resizeOut",{resize:this.__updateContainer})}),t("div",{key:"barV",class:this.verticalBarClass,style:[this.barStyle,this.verticalBarStyle],attrs:Lt,on:$t(this,"barV",{mousedown:this.__verticalMouseDown})}),t("div",{key:"barH",class:this.horizontalBarClass,style:[this.barStyle,this.horizontalBarStyle],attrs:Lt,on:$t(this,"barH",{mousedown:this.__horizontalMouseDown})}),t("div",{ref:"verticalThumb",class:this.verticalThumbClass,style:this.verticalStyle,attrs:Lt,directives:this.verticalThumbDirectives}),t("div",{ref:"horizontalThumb",class:this.horizontalThumbClass,style:this.horizontalStyle,attrs:Lt,directives:this.horizontalThumbDirectives})])},created(){this.__emitScroll=j(()=>{const t=this.getScroll();t.ref=this,this.$emit("scroll",t)},0)},activated(){if(void 0===this.__scrollPosition)return;const t=this.getScrollTarget();void 0!==t&&(Gi(t,this.__scrollPosition.left),Yi(t,this.__scrollPosition.top))},deactivated(){this.__scrollPosition=this.getScrollPosition("both")},beforeDestroy(){this.__emitScroll.cancel(),clearTimeout(this.timer)}});const el=1e3,il=["start","center","end","start-force","center-force","end-force"],sl=Array.prototype.filter;function ol(t,e){return t+e}function nl(t,e,i,s,o,n,r,a){const l=t===window?document.scrollingElement||document.documentElement:t,h=!0===o?"offsetWidth":"offsetHeight",d={scrollStart:0,scrollViewSize:-r-a,scrollMaxSize:0,offsetStart:-r,offsetEnd:-a};if(!0===o?(t===window?(d.scrollStart=window.pageXOffset||window.scrollX||document.body.scrollLeft||0,d.scrollViewSize+=document.documentElement.clientWidth):(d.scrollStart=l.scrollLeft,d.scrollViewSize+=l.clientWidth),d.scrollMaxSize=l.scrollWidth,!0===n&&(d.scrollStart=(!0===Ri()?d.scrollMaxSize-d.scrollViewSize:0)-d.scrollStart)):(t===window?(d.scrollStart=window.pageYOffset||window.scrollY||document.body.scrollTop||0,d.scrollViewSize+=document.documentElement.clientHeight):(d.scrollStart=l.scrollTop,d.scrollViewSize+=l.clientHeight),d.scrollMaxSize=l.scrollHeight),void 0!==i)for(let t=i.previousElementSibling;null!==t;t=t.previousElementSibling)!1===t.classList.contains("q-virtual-scroll--skip")&&(d.offsetStart+=t[h]);if(void 0!==s)for(let t=s.nextElementSibling;null!==t;t=t.nextElementSibling)!1===t.classList.contains("q-virtual-scroll--skip")&&(d.offsetEnd+=t[h]);if(e!==t){const i=l.getBoundingClientRect(),s=e.getBoundingClientRect();!0===o?(d.offsetStart+=s.left-i.left,d.offsetEnd-=s.width):(d.offsetStart+=s.top-i.top,d.offsetEnd-=s.height),t!==window&&(d.offsetStart+=d.scrollStart),d.offsetEnd+=d.scrollMaxSize-d.offsetStart}return d}function rl(t,e,i,s){"end"===e&&(e=(t===window?document.body:t)[!0===i?"scrollWidth":"scrollHeight"]),t===window?!0===i?(!0===s&&(e=(!0===Ri()?document.body.scrollWidth-document.documentElement.clientWidth:0)-e),window.scrollTo(e,window.pageYOffset||window.scrollY||document.body.scrollTop||0)):window.scrollTo(window.pageXOffset||window.scrollX||document.body.scrollLeft||0,e):!0===i?(!0===s&&(e=(!0===Ri()?t.scrollWidth-t.offsetWidth:0)-e),t.scrollLeft=e):t.scrollTop=e}function al(t,e,i,s){if(i>=s)return 0;const o=e.length,n=Math.floor(i/el),r=Math.floor((s-1)/el)+1;let a=t.slice(n,r).reduce(ol,0);return i%el!=0&&(a-=e.slice(n*el,i).reduce(ol,0)),s%el!=0&&s!==o&&(a-=e.slice(s,r*el).reduce(ol,0)),a}const ll={virtualScrollSliceSize:{type:[Number,String],default:null},virtualScrollSliceRatioBefore:{type:[Number,String],default:1},virtualScrollSliceRatioAfter:{type:[Number,String],default:1},virtualScrollItemSize:{type:[Number,String],default:24},virtualScrollStickySizeStart:{type:[Number,String],default:0},virtualScrollStickySizeEnd:{type:[Number,String],default:0},tableColspan:[Number,String]};const hl=Object.keys(ll);var dl={props:{virtualScrollHorizontal:Boolean,...ll},data:()=>({virtualScrollSliceRange:{from:0,to:0}}),watch:{needsSliceRecalc(){this.__setVirtualScrollSize()},needsReset(){this.reset()}},computed:{needsReset(){return["virtualScrollItemSizeComputed","virtualScrollHorizontal"].map(t=>this[t]).join(";")},needsSliceRecalc(){return this.needsReset+";"+["virtualScrollSliceRatioBefore","virtualScrollSliceRatioAfter"].map(t=>this[t]).join(";")},colspanAttr(){return void 0!==this.tableColspan?{colspan:this.tableColspan}:{colspan:100}},virtualScrollItemSizeComputed(){return this.virtualScrollItemSize}},methods:{reset(){this.__resetVirtualScroll(this.prevToIndex,!0)},refresh(t){this.__resetVirtualScroll(void 0===t?this.prevToIndex:t)},scrollTo(t,e){const i=this.__getVirtualScrollTarget();if(void 0===i||null===i||8===i.nodeType)return;const s=nl(i,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd);this.__scrollViewSize!==s.scrollViewSize&&this.__setVirtualScrollSize(s.scrollViewSize),this.__setVirtualScrollSliceRange(i,s,Math.min(this.virtualScrollLength-1,Math.max(0,parseInt(t,10)||0)),0,il.indexOf(e)>-1?e:this.prevToIndex>-1&&t>this.prevToIndex?"end":"start")},__onVirtualScrollEvt(t){const e=this.__getVirtualScrollTarget();if(void 0===e||null===e||8===e.nodeType)return;if(!0===this.$q.interaction.isKeyboard&&null!==this.$q.interaction.event&&"string"==typeof this.$q.interaction.event.key){const t=this.$q.interaction.event.key.toLowerCase();"home"!==t&&"end"!==t||rl(e,"home"===t?0:"end",this.virtualScrollHorizontal,this.$q.lang.rtl)}const i=nl(e,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd),s=this.virtualScrollLength-1,o=i.scrollMaxSize-i.offsetStart-i.offsetEnd-this.virtualScrollPaddingAfter;if(this.prevScrollStart===i.scrollStart)return;if(i.scrollMaxSize<=0)return void this.__setVirtualScrollSliceRange(e,i,0,0);this.__scrollViewSize!==i.scrollViewSize&&this.__setVirtualScrollSize(i.scrollViewSize),this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from);const n=Math.floor(i.scrollMaxSize-Math.max(i.scrollViewSize,i.offsetEnd)-Math.min(this.virtualScrollSizes[s],i.scrollViewSize/2));if(n>0&&Math.ceil(i.scrollStart)>=n)return void this.__setVirtualScrollSliceRange(e,i,s,i.scrollMaxSize-i.offsetEnd-this.virtualScrollSizesAgg.reduce(ol,0));let r=0,a=i.scrollStart-i.offsetStart,l=a;if(a<=o&&a+i.scrollViewSize>=this.virtualScrollPaddingBefore)a-=this.virtualScrollPaddingBefore,r=this.virtualScrollSliceRange.from,l=a;else for(let t=0;a>=this.virtualScrollSizesAgg[t]&&r0&&r-i.scrollViewSize?(r++,l=a):l=this.virtualScrollSizes[r]+a;this.__setVirtualScrollSliceRange(e,i,r,l,void 0,t)},__setVirtualScrollSliceRange(t,e,i,s,o,n){const r="string"==typeof o&&o.indexOf("-force")>-1,a=!0===r?o.replace("-force",""):o,l=void 0!==a?a:"start";let h=Math.max(0,i-this.virtualScrollSliceSizeComputed[l]),d=h+this.virtualScrollSliceSizeComputed.total;d>this.virtualScrollLength&&(d=this.virtualScrollLength,h=Math.max(0,d-this.virtualScrollSliceSizeComputed.total)),this.prevScrollStart=e.scrollStart;const c=h!==this.virtualScrollSliceRange.from||d!==this.virtualScrollSliceRange.to;if(!1===c&&void 0===a)return void this.__emitScroll(i);const{activeElement:u}=document,p=this.$refs.content;!0===c&&void 0!==p&&p!==u&&!0===p.contains(u)&&!0!==p.qVsFocusout&&(p.qVsFocusout=!0,p.addEventListener("focusout",this.__onBlurRefocusFn),setTimeout(()=>{void 0!==p&&(p.removeEventListener("focusout",this.__onBlurRefocusFn),p.qVsFocusout=!1)},500)),function t(e,i){void 0===t.isSupported&&(t.isSupported=void 0!==window.getComputedStyle(document.body).overflowAnchor),!1!==t.isSupported&&void 0!==e&&(cancelAnimationFrame(e._qOverflowAnimationFrame),e._qOverflowAnimationFrame=requestAnimationFrame(()=>{if(void 0===e)return;const t=e.children||[];sl.call(t,t=>t.dataset&&void 0!==t.dataset.qVsAnchor).forEach(t=>{delete t.dataset.qVsAnchor});const s=t[i];s&&s.dataset&&(s.dataset.qVsAnchor="")}))}(p,i-h);const m=void 0!==a?this.virtualScrollSizes.slice(h,i).reduce(ol,0):0;if(!0===c){const t=d>=this.virtualScrollSliceRange.from&&h<=this.virtualScrollSliceRange.to?this.virtualScrollSliceRange.to:d;this.virtualScrollSliceRange={from:h,to:t},this.virtualScrollPaddingBefore=al(this.virtualScrollSizesAgg,this.virtualScrollSizes,0,h),this.virtualScrollPaddingAfter=al(this.virtualScrollSizesAgg,this.virtualScrollSizes,this.virtualScrollSliceRange.to,this.virtualScrollLength),cancelAnimationFrame(this.vsRangeToAnimationFrame),this.vsRangeToAnimationFrame=requestAnimationFrame(()=>{this.virtualScrollSliceRange.to!==d&&this.prevScrollStart===e.scrollStart&&(this.virtualScrollSliceRange={from:this.virtualScrollSliceRange.from,to:d},this.virtualScrollPaddingAfter=al(this.virtualScrollSizesAgg,this.virtualScrollSizes,d,this.virtualScrollLength))})}cancelAnimationFrame(this.vsScrollAnimationFrame),this.vsScrollAnimationFrame=requestAnimationFrame(()=>{if(this.prevScrollStart!==e.scrollStart)return;!0===c&&this.__updateVirtualScrollSizes(h);const o=this.virtualScrollSizes.slice(h,i).reduce(ol,0),l=o+e.offsetStart+this.virtualScrollPaddingBefore,d=l+this.virtualScrollSizes[i];let u=l+s;if(void 0!==a){const t=o-m,s=e.scrollStart+t;u=!0!==r&&st.classList&&!1===t.classList.contains("q-virtual-scroll--skip")),s=i.length,o=!0===this.virtualScrollHorizontal?t=>t.getBoundingClientRect().width:t=>t.offsetHeight;let n,r,a=t;for(let t=0;t=s;t--)this.virtualScrollSizes[t]=i;const o=Math.floor((this.virtualScrollLength-1)/el);this.virtualScrollSizesAgg=[];for(let t=0;t<=o;t++){let e=0;const i=Math.min((t+1)*el,this.virtualScrollLength);for(let s=t*el;s=0?(this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from),this.$nextTick(()=>{this.scrollTo(t)})):this.__onVirtualScrollEvt()},__setVirtualScrollSize(t){if(void 0===t&&"undefined"!=typeof window){const e=this.__getVirtualScrollTarget();void 0!==e&&null!==e&&8!==e.nodeType&&(t=nl(e,this.__getVirtualScrollEl(),this.$refs.before,this.$refs.after,this.virtualScrollHorizontal,this.$q.lang.rtl,this.virtualScrollStickySizeStart,this.virtualScrollStickySizeEnd).scrollViewSize)}this.__scrollViewSize=t;const e=parseFloat(this.virtualScrollSliceRatioBefore)||0,i=1+e+(parseFloat(this.virtualScrollSliceRatioAfter)||0),s=void 0===t||t<=0?1:Math.ceil(t/this.virtualScrollItemSizeComputed),o=Math.max(1,s,Math.ceil((this.virtualScrollSliceSize>0?this.virtualScrollSliceSize:10)/i));this.virtualScrollSliceSizeComputed={total:Math.ceil(o*i),start:Math.ceil(o*e),center:Math.ceil(o*(.5+e)),end:Math.ceil(o*(1+e)),view:s}},__padVirtualScroll(t,e,i){const s=!0===this.virtualScrollHorizontal?"width":"height",o={["--q-virtual-scroll-item-"+s]:this.virtualScrollItemSizeComputed+"px"};return["tbody"===e?t(e,{staticClass:"q-virtual-scroll__padding",key:"before",ref:"before"},[t("tr",[t("td",{style:{[s]:`${this.virtualScrollPaddingBefore}px`,...o},attrs:this.colspanAttr})])]):t(e,{staticClass:"q-virtual-scroll__padding",key:"before",ref:"before",style:{[s]:`${this.virtualScrollPaddingBefore}px`,...o}}),t(e,{staticClass:"q-virtual-scroll__content",key:"content",ref:"content",attrs:{tabindex:-1}},i),"tbody"===e?t(e,{staticClass:"q-virtual-scroll__padding",key:"after",ref:"after"},[t("tr",[t("td",{style:{[s]:`${this.virtualScrollPaddingAfter}px`,...o},attrs:this.colspanAttr})])]):t(e,{staticClass:"q-virtual-scroll__padding",key:"after",ref:"after",style:{[s]:`${this.virtualScrollPaddingAfter}px`,...o}})]},__emitScroll(t){this.prevToIndex!==t&&(void 0!==this.qListeners["virtual-scroll"]&&this.$emit("virtual-scroll",{index:t,from:this.virtualScrollSliceRange.from,to:this.virtualScrollSliceRange.to-1,direction:t{e=void 0,i=0,t()};function o(){i++,clearTimeout(e),e=setTimeout(s,200),i>50&&(i=0,t(!0))}return o.cancel=(()=>{clearTimeout(e),e=void 0,i=0}),o}(this.__onVirtualScrollEvt),this.__setVirtualScrollSize()},beforeDestroy(){this.__onVirtualScrollEvt.cancel()}};const cl=t=>["add","add-unique","toggle"].includes(t);var ul=e.default.extend({name:"QSelect",mixins:[jr,dl,xs,Ht],props:{value:{required:!0},multiple:Boolean,displayValue:[String,Number],displayValueSanitize:Boolean,dropdownIcon:String,options:{type:Array,default:()=>[]},optionValue:[Function,String],optionLabel:[Function,String],optionDisable:[Function,String],hideSelected:Boolean,hideDropdownIcon:Boolean,fillInput:Boolean,maxValues:[Number,String],optionsDense:Boolean,optionsDark:{type:Boolean,default:null},optionsSelectedClass:String,optionsSanitize:Boolean,optionsCover:Boolean,menuShrink:Boolean,menuAnchor:String,menuSelf:String,menuOffset:Array,popupContentClass:String,popupContentStyle:[String,Array,Object],dialogContentClass:[String,Array,Object],dialogContentStyle:[String,Array,Object],dialogCloseIcon:[Boolean,String],useInput:Boolean,useChips:Boolean,newValueMode:{type:String,validator:cl},mapOptions:Boolean,emitValue:Boolean,inputDebounce:{type:[Number,String],default:500},inputClass:[Array,String,Object],inputStyle:[Array,String,Object],tabindex:{type:[String,Number],default:0},autocomplete:String,transitionShow:String,transitionHide:String,behavior:{type:String,validator:t=>["default","menu","dialog"].includes(t),default:"default"},virtualScrollItemSize:{type:[Number,String],default:void 0}},data:()=>({menu:!1,dialog:!1,optionIndex:-1,inputValue:"",dialogFieldFocused:!1}),watch:{innerValue:{handler(t){this.innerValueCache=t,!0===this.useInput&&!0===this.fillInput&&!0!==this.multiple&&!0!==this.innerLoading&&(!0!==this.dialog&&!0!==this.menu||!0!==this.hasValue)&&(!0!==this.userInputValue&&this.__resetInputValue(),!0!==this.dialog&&!0!==this.menu||this.filter(""))},immediate:!0},fillInput(){this.__resetInputValue()},menu(t){this.__updateMenu(t)},virtualScrollLength(t,e){!0===this.menu&&!1===this.innerLoading&&(this.__resetVirtualScroll(-1,!0),this.$nextTick(()=>{!0===this.menu&&!1===this.innerLoading&&(t>e?this.__resetVirtualScroll():this.__updateMenu(!0))}))}},computed:{isOptionsDark(){return null===this.optionsDark?null===this.dark?this.$q.dark.isActive:this.dark:this.optionsDark},optionsDarkSuffix(){return null===this.isOptionsDark?"dark-auto":!0===this.isOptionsDark?"dark":"light"},virtualScrollLength(){return Array.isArray(this.options)?this.options.length:0},fieldClass(){return`q-select q-field--auto-height q-select--with${!0!==this.useInput?"out":""}-input`+` q-select--with${!0!==this.useChips?"out":""}-chips`+` q-select--${!0===this.multiple?"multiple":"single"}`},computedInputClass(){return!0===this.hideSelected||0===this.innerValue.length?this.inputClass:void 0===this.inputClass?"q-field__input--padding":[this.inputClass,"q-field__input--padding"]},menuContentClass(){return(!0===this.virtualScrollHorizontal?"q-virtual-scroll--horizontal":"")+(this.popupContentClass?" "+this.popupContentClass:"")},innerValue(){const t=!0===this.mapOptions&&!0!==this.multiple,e=void 0===this.value||null===this.value&&!0!==t?[]:!0===this.multiple&&Array.isArray(this.value)?this.value:[this.value];if(!0===this.mapOptions&&!0===Array.isArray(this.options)){const i=!0===this.mapOptions&&void 0!==this.innerValueCache?this.innerValueCache:[],s=e.map(t=>this.__getOption(t,i));return null===this.value&&!0===t?s.filter(t=>null!==t):s}return e},noOptions(){return 0===this.virtualScrollLength},selectedString(){return this.innerValue.map(t=>this.getOptionLabel(t)).join(", ")},sanitizeFn(){return!0===this.optionsSanitize?()=>!0:t=>void 0!==t&&null!==t&&!0===t.sanitize},displayAsText(){return!0===this.displayValueSanitize||void 0===this.displayValue&&(!0===this.optionsSanitize||this.innerValue.some(this.sanitizeFn))},computedTabindex(){return!0===this.focused?this.tabindex:-1},selectedScope(){return this.innerValue.map((t,e)=>({index:e,opt:t,sanitize:this.sanitizeFn(t),selected:!0,removeAtIndex:this.__removeAtIndexAndFocus,toggleOption:this.toggleOption,tabindex:this.computedTabindex}))},optionScope(){if(0===this.virtualScrollLength)return[];const{from:t,to:e}=this.virtualScrollSliceRange,{options:i,optionEls:s}=this.__optionScopeCache;return this.options.slice(t,e).map((e,o)=>{const n=this.isOptionDisabled(e),r=t+o,a={clickable:!0,active:!1,activeClass:this.computedOptionsSelectedClass,manualFocus:!0,focused:!1,disable:n,tabindex:-1,dense:this.optionsDense,dark:this.isOptionsDark},l={role:"option",id:`${this.targetUid}_${r}`};!0!==n&&(!0===this.isOptionSelected(e)&&(a.active=!0),l["aria-selected"]=!0===a.active?"true":"false",this.optionIndex===r&&(a.focused=!0));const h={click:()=>{this.toggleOption(e)}};!0===this.$q.platform.is.desktop&&(h.mousemove=(()=>{!0===this.menu&&this.setOptionIndex(r)}));const d={index:r,opt:e,sanitize:this.sanitizeFn(e),selected:a.active,focused:a.focused,toggleOption:this.toggleOption,setOptionIndex:this.setOptionIndex,itemProps:a,itemAttrs:l};return void 0!==i[o]&&!0===Ls(d,i[o])||(i[o]=d,s[o]=void 0),{...d,itemEvents:h}})},dropdownArrowIcon(){return void 0!==this.dropdownIcon?this.dropdownIcon:this.$q.iconSet.arrow.dropdown},computedDialogCloseIcon(){return!0===this.dialogCloseIcon?!0===this.$q.lang.rtl?this.$q.iconSet.chevron.right:this.$q.iconSet.chevron.left:"string"==typeof this.dialogCloseIcon&&this.dialogCloseIcon.length>0&&this.dialogCloseIcon},squaredMenu(){return!1===this.optionsCover&&!0!==this.outlined&&!0!==this.standout&&!0!==this.borderless&&!0!==this.rounded},computedOptionsSelectedClass(){return void 0!==this.optionsSelectedClass?this.optionsSelectedClass:void 0!==this.color?`text-${this.color}`:""},innerOptionsValue(){return this.innerValue.map(t=>this.getOptionValue(t))},getOptionValue(){return this.__getPropValueFn("optionValue","value")},getOptionLabel(){return this.__getPropValueFn("optionLabel","label")},isOptionDisabled(){const t=this.__getPropValueFn("optionDisable","disable");return(...e)=>!0===t.apply(null,e)},inputControlEvents(){return{input:this.__onInput,compositionend:this.__onInput,change:this.__onChange,keydown:this.__onTargetKeydown,keyup:this.__onTargetAutocomplete,keypress:this.__onTargetKeypress,focus:this.__onTargetFocus,click:this.__onTargetClick}},closeButtonEvents(){return{click:t=>{w(t),this.hidePopup()}}},virtualScrollItemSizeComputed(){return void 0===this.virtualScrollItemSize?!0===this.optionsDense?24:48:this.virtualScrollItemSize},comboboxAttrs(){const t={tabindex:this.tabindex,role:"combobox","aria-label":this.label,"aria-readonly":!0===this.readonly?"true":"false","aria-autocomplete":!0===this.useInput?"list":"none","aria-expanded":!0===this.menu?"true":"false","aria-owns":`${this.targetUid}_lb`,"aria-controls":`${this.targetUid}_lb`};return this.optionIndex>=0&&(t["aria-activedescendant"]=`${this.targetUid}_${this.optionIndex}`),t},listboxAttrs(){return{id:`${this.targetUid}_lb`,role:"listbox","aria-multiselectable":!0===this.multiple?"true":"false"}}},methods:{getEmittingOptionValue(t){return!0===this.emitValue?this.getOptionValue(t):t},removeAtIndex(t){if(t>-1&&t=this.maxValues)return;const s=this.value.slice();this.$emit("add",{index:s.length,value:i}),s.push(i),this.$emit("input",s)},toggleOption(t,e){if(!0!==this.editable||void 0===t||!0===this.isOptionDisabled(t))return;const i=this.getOptionValue(t);if(!0!==this.multiple)return!0!==e&&(this.updateInputValue(!0===this.fillInput?this.getOptionLabel(t):"",!0,!0),this.dialogFieldFocused=!1,document.activeElement.blur(),this.hidePopup()),void 0!==this.$refs.target&&this.$refs.target.focus(),void(0!==this.innerValue.length&&!0===Ls(this.getOptionValue(this.innerValue[0]),i)||this.$emit("input",!0===this.emitValue?i:t));if((!0!==this.hasDialog||!0===this.dialogFieldFocused)&&this.__focus(),this.__selectInputText(),0===this.innerValue.length){const e=!0===this.emitValue?i:t;return this.$emit("add",{index:0,value:e}),void this.$emit("input",!0===this.multiple?[e]:e)}const s=this.value.slice(),o=this.innerOptionsValue.findIndex(t=>Ls(t,i));if(o>-1)this.$emit("remove",{index:o,value:s.splice(o,1)[0]});else{if(void 0!==this.maxValues&&s.length>=this.maxValues)return;const e=!0===this.emitValue?i:t;this.$emit("add",{index:s.length,value:e}),s.push(e)}this.$emit("input",s)},setOptionIndex(t){if(!0!==this.$q.platform.is.desktop)return;const e=t>-1&&t{this.setOptionIndex(i),this.scrollTo(i),!0!==e&&!0===this.useInput&&!0===this.fillInput&&this.__setInputValue(i>=0?this.getOptionLabel(this.options[i]):this.defaultInputValue)}))}},__getOption(t,e){const i=e=>Ls(this.getOptionValue(e),t);return this.options.find(i)||e.find(i)||t},__getPropValueFn(t,e){const i=void 0!==this[t]?this[t]:e;return"function"==typeof i?i:t=>null!==t&&"object"==typeof t&&i in t?t[i]:t},isOptionSelected(t){const e=this.getOptionValue(t);return void 0!==this.innerOptionsValue.find(t=>Ls(t,e))},__selectInputText(t){!0===this.useInput&&void 0!==this.$refs.target&&(void 0===t||this.$refs.target===t.target&&t.target.value===this.selectedString)&&this.$refs.target.select()},__onTargetKeyup(t){!0===ze(t,27)&&!0===this.menu&&(S(t),this.hidePopup(),this.__resetInputValue()),this.$emit("keyup",t)},__onTargetAutocomplete(t){const{value:e}=t.target;if(void 0===t.keyCode)if(t.target.value="",clearTimeout(this.inputTimer),this.__resetInputValue(),"string"==typeof e&&e.length>0){const t=e.toLocaleLowerCase(),i=e=>{const i=this.options.find(i=>e(i).toLocaleLowerCase()===t);return void 0!==i&&(-1===this.innerValue.indexOf(i)?this.toggleOption(i):this.hidePopup(),!0)},s=t=>{!0!==i(this.getOptionValue)&&!0!==i(this.getOptionLabel)&&!0!==t&&this.filter(e,!0,()=>s(!0))};s()}else this.__clearValue(t);else this.__onTargetKeyup(t)},__onTargetKeypress(t){this.$emit("keypress",t)},__onTargetKeydown(t){if(this.$emit("keydown",t),!0===Pe(t))return;const e=this.inputValue.length>0&&(void 0!==this.newValueMode||void 0!==this.qListeners["new-value"]),i=!0!==t.shiftKey&&!0!==this.multiple&&(this.optionIndex>-1||!0===e);if(27===t.keyCode)return void x(t);if(9===t.keyCode&&!1===i)return void this.__closeMenu();if(void 0===t.target||t.target.id!==this.targetUid)return;if(40===t.keyCode&&!0!==this.innerLoading&&!1===this.menu)return w(t),void this.showPopup();if(8===t.keyCode&&!0!==this.hideSelected&&0===this.inputValue.length)return void(!0===this.multiple&&Array.isArray(this.value)?this.removeAtIndex(this.value.length-1):!0!==this.multiple&&null!==this.value&&this.$emit("input",null));35!==t.keyCode&&36!==t.keyCode||"string"==typeof this.inputValue&&0!==this.inputValue.length||(w(t),this.optionIndex=-1,this.moveOptionSelection(36===t.keyCode?1:-1,this.multiple)),33!==t.keyCode&&34!==t.keyCode||void 0===this.virtualScrollSliceSizeComputed||(w(t),this.optionIndex=Math.max(-1,Math.min(this.virtualScrollLength,this.optionIndex+(33===t.keyCode?-1:1)*this.virtualScrollSliceSizeComputed.view)),this.moveOptionSelection(33===t.keyCode?1:-1,this.multiple)),38!==t.keyCode&&40!==t.keyCode||(w(t),this.moveOptionSelection(38===t.keyCode?-1:1,this.multiple));const s=this.virtualScrollLength;if((void 0===this.searchBuffer||this.searchBufferExp0&&!0!==this.useInput&&void 0!==t.key&&1===t.key.length&&t.altKey===t.ctrlKey&&(32!==t.keyCode||this.searchBuffer.length>0)){!0!==this.menu&&this.showPopup(t);const e=t.key.toLocaleLowerCase(),i=1===this.searchBuffer.length&&this.searchBuffer[0]===e;this.searchBufferExp=Date.now()+1500,!1===i&&(w(t),this.searchBuffer+=e);const o=new RegExp("^"+this.searchBuffer.split("").map(t=>".*+?^${}()|[]\\".indexOf(t)>-1?"\\"+t:t).join(".*"),"i");let n=this.optionIndex;if(!0===i||n<0||!0!==o.test(this.getOptionLabel(this.options[n])))do{n=Ct(n+1,-1,s-1)}while(n!==this.optionIndex&&(!0===this.isOptionDisabled(this.options[n])||!0!==o.test(this.getOptionLabel(this.options[n]))));this.optionIndex!==n&&this.$nextTick(()=>{this.setOptionIndex(n),this.scrollTo(n),n>=0&&!0===this.useInput&&!0===this.fillInput&&this.__setInputValue(this.getOptionLabel(this.options[n]))})}else if(13===t.keyCode||32===t.keyCode&&!0!==this.useInput&&""===this.searchBuffer||9===t.keyCode&&!1!==i)if(9!==t.keyCode&&w(t),this.optionIndex>-1&&this.optionIndex{if(e){if(!0!==cl(e))return}else e=this.newValueMode;void 0!==t&&null!==t&&(this.updateInputValue("",!0!==this.multiple,!0),this["toggle"===e?"toggleOption":"add"](t,"add-unique"===e),!0!==this.multiple&&(void 0!==this.$refs.target&&this.$refs.target.focus(),this.hidePopup()))};if(void 0!==this.qListeners["new-value"]?this.$emit("new-value",this.inputValue,t):t(this.inputValue),!0!==this.multiple)return}!0===this.menu?this.__closeMenu():!0!==this.innerLoading&&this.showPopup()}},__onTargetFocus(t){bi(t.target),this.__selectInputText(t)},__onTargetClick(t){!0===this.hasDialog&&S(t)},__getVirtualScrollEl(){return!0===this.hasDialog?this.$refs.menuContent:void 0!==this.$refs.menu&&void 0!==this.$refs.menu.__portal?(this.$refs.menu.__portal.$el.children||[])[0]:void 0},__getVirtualScrollTarget(){return this.__getVirtualScrollEl()},__getSelection(t){return!0===this.hideSelected?[]:void 0!==this.$scopedSlots["selected-item"]?this.selectedScope.map(t=>this.$scopedSlots["selected-item"](t)).slice():void 0!==this.$scopedSlots.selected?[].concat(this.$scopedSlots.selected()):!0===this.useChips?this.selectedScope.map((e,i)=>t(oo,{key:"rem#"+i,props:{removable:!0===this.editable&&!0!==this.isOptionDisabled(e.opt),dense:!0,textColor:this.color,tabindex:this.computedTabindex},on:$t(this,"rem#"+i,{remove(){e.removeAtIndex(i)}})},[t("span",{staticClass:"ellipsis",domProps:{[!0===e.sanitize?"textContent":"innerHTML"]:this.getOptionLabel(e.opt)}})])):[t("span",{domProps:{[this.displayAsText?"textContent":"innerHTML"]:void 0!==this.displayValue?this.displayValue:this.selectedString}})]},__getControl(t,e){const i=this.__getSelection(t),s=!0===e||!0!==this.dialog||!0!==this.hasDialog;if(!0===this.useInput)i.push(this.__getInput(t,e,s));else if(!0===this.editable){const o=!0===s?this.comboboxAttrs:void 0;i.push(t("input",{ref:!0===s?"target":void 0,key:"d_t",staticClass:"q-select__focus-target",attrs:{id:!0===s?this.targetUid:void 0,readonly:!0,"data-autofocus":(!0===e?!0===s:this.autofocus)||void 0,...o},on:$t(this,"f-tget",{keydown:this.__onTargetKeydown,keyup:this.__onTargetKeyup,keypress:this.__onTargetKeypress})})),!0===s&&"string"==typeof this.autocomplete&&this.autocomplete.length>0&&i.push(t("input",{key:"autoinp",staticClass:"q-select__autocomplete-input",attrs:{autocomplete:this.autocomplete,tabindex:-1},on:$t(this,"autoinp",{keyup:this.__onTargetAutocomplete})}))}if(void 0!==this.nameProp&&!0!==this.disable&&this.innerOptionsValue.length>0){const e=this.innerOptionsValue.map(e=>t("option",{attrs:{value:e,selected:!0}}));i.push(t("select",{staticClass:"hidden",attrs:{name:this.nameProp,multiple:this.multiple}},e))}const o=!0===this.useInput||!0!==s?void 0:this.qAttrs;return t("div",{staticClass:"q-field__native row items-center",attrs:o},i)},__getOptions(t){if(!0!==this.menu)return;if(!0===this.noOptions)return void 0!==this.$scopedSlots["no-option"]?this.$scopedSlots["no-option"]({inputValue:this.inputValue}):void 0;void 0!==this.$scopedSlots.option&&this.__optionScopeCache.optionSlot!==this.$scopedSlots.option&&(this.__optionScopeCache.optionSlot=this.$scopedSlots.option,this.__optionScopeCache.optionEls=[]);const e=void 0!==this.$scopedSlots.option?this.$scopedSlots.option:e=>t(dr,{key:e.index,props:e.itemProps,attrs:e.itemAttrs,on:e.itemEvents},[t(cr,[t(Cr,{domProps:{[!0===e.sanitize?"textContent":"innerHTML"]:this.getOptionLabel(e.opt)}})])]),{optionEls:i}=this.__optionScopeCache;let s=this.__padVirtualScroll(t,"div",this.optionScope.map((t,s)=>(void 0===i[s]&&(i[s]=e(t)),i[s])));return void 0!==this.$scopedSlots["before-options"]&&(s=this.$scopedSlots["before-options"]().concat(s)),Wt(s,this,"after-options")},__prependDialogCloseIcon(t){return!1===this.computedDialogCloseIcon||!0!==this.hasDialog||!0!==this.dialog?jt(this,"prepend"):Wt([t(le,{staticClass:"q-select__close-icon q-field__focusable-action",props:{tag:"button",name:this.computedDialogCloseIcon},attrs:Et,on:this.closeButtonEvents})],this,"prepend")},__getInnerAppend(t){return!0!==this.loading&&!0!==this.innerLoadingIndicator&&!0!==this.hideDropdownIcon?[t(le,{staticClass:"q-select__dropdown-icon"+(!0===this.menu?" rotate-180":""),props:{name:this.dropdownArrowIcon}})]:null},__getInput(t,e,i){const s=!0===i?{...this.comboboxAttrs,...this.qAttrs}:void 0,o={ref:!0===i?"target":void 0,key:"i_t",staticClass:"q-field__input q-placeholder col",style:this.inputStyle,class:this.computedInputClass,domProps:{value:void 0!==this.inputValue?this.inputValue:""},attrs:{type:"search",...s,id:!0===i?this.targetUid:void 0,maxlength:this.maxlength,autocomplete:this.autocomplete,"data-autofocus":(!0===e?!0===i:this.autofocus)||void 0,disabled:!0===this.disable,readonly:!0===this.readonly},on:this.inputControlEvents};return!0!==e&&!0===this.hasDialog&&(o.staticClass+=" no-pointer-events"),t("input",o)},__onChange(t){!0===t.target.qComposing&&(t.target.qComposing=!1,this.__onInput(t))},__onInput(t){if(!t||!t.target||!0===t.target.qComposing)return;const e="string"==typeof t.data&&!0===t.isComposing&&t.data.length+1===t.target.value.length?t.data:t.target.value;this.inputValue!==e&&(clearTimeout(this.inputTimer),this.__setInputValue(e),this.userInputValue=!0,this.defaultInputValue=this.inputValue,!0===this.focused||!0===this.hasDialog&&!0!==this.dialogFieldFocused||this.__focus(),void 0!==this.qListeners.filter&&(this.inputTimer=setTimeout(()=>{this.filter(this.inputValue)},this.inputDebounce)))},__setInputValue(t){this.inputValue!==t&&(this.inputValue=t,this.$emit("input-value",t))},updateInputValue(t,e,i){this.userInputValue=!0!==i,!0===this.useInput&&(this.__setInputValue(t),!0!==e&&!0===i||(this.defaultInputValue=t),!0!==e&&this.filter(t))},filter(t,e,i){if(void 0===this.qListeners.filter||!0!==e&&!0!==this.focused)return;!0===this.innerLoading?this.$emit("filter-abort"):(this.innerLoading=!0,this.innerLoadingIndicator=!0),""!==t&&!0!==this.multiple&&this.innerValue.length>0&&!0!==this.userInputValue&&t===this.getOptionLabel(this.innerValue[0])&&(t="");const s=setTimeout(()=>{!0===this.menu&&(this.menu=!1)},10);clearTimeout(this.filterId),this.filterId=s,this.$emit("filter",t,(t,o)=>{!0!==e&&!0!==this.focused||this.filterId!==s||(clearTimeout(this.filterId),"function"==typeof t&&t(),this.innerLoadingIndicator=!1,this.$nextTick(()=>{this.innerLoading=!1,!0===this.editable&&(!0===e?!0===this.menu&&this.hidePopup():!0===this.menu?this.__updateMenu(!0):(this.menu=!0,!0===this.hasDialog&&(this.dialog=!0))),"function"==typeof o&&this.$nextTick(()=>{o(this)}),"function"==typeof i&&this.$nextTick(()=>{i(this)})}))},()=>{!0===this.focused&&this.filterId===s&&(clearTimeout(this.filterId),this.innerLoading=!1,this.innerLoadingIndicator=!1),!0===this.menu&&(this.menu=!1)})},__getControlEvents(){const t=t=>{this.__onControlFocusout(t,()=>{this.__resetInputValue(),this.__closeMenu()})};return{focusin:this.__onControlFocusin,focusout:t,"popup-show":this.__onControlPopupShow,"popup-hide":e=>{void 0!==e&&S(e),this.$emit("popup-hide",e),this.hasPopupOpen=!1,t(e)},click:t=>{if(x(t),!0!==this.hasDialog&&!0===this.menu)return this.__closeMenu(),void(void 0!==this.$refs.target&&this.$refs.target.focus());this.showPopup(t)}}},__getControlChild(t){if(!1!==this.editable&&(!0===this.dialog||!0!==this.noOptions||void 0!==this.$scopedSlots["no-option"]))return this[`__get${!0===this.hasDialog?"Dialog":"Menu"}`](t)},__getMenu(t){return t(us,{key:"menu",ref:"menu",props:{value:this.menu,fit:!0!==this.menuShrink,cover:!0===this.optionsCover&&!0!==this.noOptions&&!0!==this.useInput,anchor:this.menuAnchor,self:this.menuSelf,offset:this.menuOffset,contentClass:this.menuContentClass,contentStyle:this.popupContentStyle,dark:this.isOptionsDark,noParentEvent:!0,noRefocus:!0,noFocus:!0,square:this.squaredMenu,transitionShow:this.transitionShow,transitionHide:this.transitionHide,separateClosePopup:!0},attrs:this.listboxAttrs,on:$t(this,"menu",{"&scroll":this.__onVirtualScrollEvt,"before-hide":this.__closeMenu,show:this.__onMenuShow})},this.__getOptions(t))},__onMenuShow(){this.__setVirtualScrollSize()},__onDialogFieldFocus(t){S(t),void 0!==this.$refs.target&&this.$refs.target.focus(),this.dialogFieldFocused=!0},__onDialogFieldBlur(t){S(t),this.$nextTick(()=>{this.dialogFieldFocused=!1})},__getDialog(t){const e=[t(jr,{staticClass:`col-auto ${this.fieldClass}`,props:{...this.$props,for:this.targetUid,dark:this.isOptionsDark,square:!0,filled:!0,itemAligned:!1,loading:this.innerLoadingIndicator,stackLabel:this.inputValue.length>0},on:{...this.qListeners,focus:this.__onDialogFieldFocus,blur:this.__onDialogFieldBlur},scopedSlots:{...this.$scopedSlots,rawControl:()=>this.__getControl(t,!0),prepend:()=>this.__prependDialogCloseIcon(t),before:void 0,after:void 0}})];return!0===this.menu&&e.push(t("div",{key:"virtMenu",ref:"menuContent",staticClass:"col scroll",class:this.menuContentClass,style:this.popupContentStyle,attrs:this.listboxAttrs,on:$t(this,"virtMenu",{click:x,"&scroll":this.__onVirtualScrollEvt})},this.__getOptions(t))),t(sr,{key:"dialog",ref:"dialog",props:{value:this.dialog,position:!0===this.useInput?"top":void 0,contentClass:this.dialogContentClass,contentStyle:this.dialogContentStyle,transitionShow:this.transitionShow,transitionHide:this.transitionHide},on:$t(this,"dialog",{"before-hide":this.__onDialogBeforeHide,hide:this.__onDialogHide,show:this.__onDialogShow})},[t("div",{staticClass:"q-select__dialog"+` q-select__dialog--${this.optionsDarkSuffix} q-${this.optionsDarkSuffix}`+(!0===this.dialogFieldFocused?" q-select__dialog--focused":"")},e)])},__onDialogBeforeHide(){!0===this.useInput&&!0!==this.$q.platform.is.desktop||(this.$refs.dialog.__refocusTarget=this.$el.querySelector(".q-field__native > [tabindex]:last-child")),this.focused=!1,this.dialogFieldFocused=!1},__onDialogHide(t){!0!==this.$q.platform.is.desktop&&document.activeElement.blur(),this.hidePopup(),!1===this.focused&&this.$emit("blur",t),this.__resetInputValue()},__onDialogShow(){const t=document.activeElement;null!==t&&t.id===this.targetUid||this.$refs.target===t||void 0===this.$refs.target||this.$refs.target.focus(),this.__setVirtualScrollSize()},__closeMenu(){void 0!==this.__optionScopeCache&&(this.__optionScopeCache.optionEls=[]),!0!==this.dialog&&(this.optionIndex=-1,!0===this.menu&&(this.menu=!1),!1===this.focused&&(clearTimeout(this.filterId),this.filterId=void 0,!0===this.innerLoading&&(this.$emit("filter-abort"),this.innerLoading=!1,this.innerLoadingIndicator=!1)))},showPopup(t){!0===this.editable&&(!0===this.hasDialog?(this.__onControlFocusin(t),this.dialog=!0,this.$nextTick(()=>{this.__focus()})):this.__focus(),void 0!==this.qListeners.filter?this.filter(this.inputValue):!0===this.noOptions&&void 0===this.$scopedSlots["no-option"]||(this.menu=!0))},hidePopup(){this.dialog=!1,this.__closeMenu()},__resetInputValue(){!0===this.useInput&&this.updateInputValue(!0!==this.multiple&&!0===this.fillInput&&this.innerValue.length>0&&this.getOptionLabel(this.innerValue[0])||"",!0,!0)},__updateMenu(t){let e=-1;if(!0===t){if(this.innerValue.length>0){const t=this.getOptionValue(this.innerValue[0]);e=this.options.findIndex(e=>Ls(this.getOptionValue(e),t))}this.__resetVirtualScroll(e)}this.setOptionIndex(e)},__onPreRender(){this.hasDialog=(!0===this.$q.platform.is.mobile||"dialog"===this.behavior)&&("menu"!==this.behavior&&(!0!==this.useInput||(void 0!==this.$scopedSlots["no-option"]||void 0!==this.qListeners.filter||!1===this.noOptions)))},updateMenuPosition(){!1===this.dialog&&void 0!==this.$refs.menu&&this.$refs.menu.updatePosition()}},beforeMount(){this.__optionScopeCache={optionSlot:this.$scopedSlots.option,options:[],optionEls:[]}},beforeDestroy(){this.__optionScopeCache=void 0,clearTimeout(this.inputTimer)}});const pl=["text","rect","circle","QBtn","QBadge","QChip","QToolbar","QCheckbox","QRadio","QToggle","QSlider","QRange","QInput","QAvatar"],ml=["wave","pulse","pulse-x","pulse-y","fade","blink","none"];var gl=e.default.extend({name:"QSkeleton",mixins:[ce,Nt,Ht],props:{type:{type:String,validator:t=>pl.includes(t),default:"rect"},animation:{type:String,validator:t=>ml.includes(t),default:"wave"},square:Boolean,bordered:Boolean,size:String,width:String,height:String},computed:{style(){return void 0!==this.size?{width:this.size,height:this.size}:{width:this.width,height:this.height}},classes(){return`q-skeleton--${this.darkSuffix} q-skeleton--type-${this.type}`+("none"!==this.animation?` q-skeleton--anim q-skeleton--anim-${this.animation}`:"")+(!0===this.square?" q-skeleton--square":"")+(!0===this.bordered?" q-skeleton--bordered":"")}},render(t){return t(this.tag,{staticClass:"q-skeleton",class:this.classes,style:this.style,on:{...this.qListeners}},jt(this,"default"))}});const fl=[["left","center","start","width"],["right","center","end","width"],["top","start","center","height"],["bottom","end","center","height"]];var _l=e.default.extend({name:"QSlideItem",mixins:[ce,Ht],props:{leftColor:String,rightColor:String,topColor:String,bottomColor:String},directives:{TouchPan:xo},computed:{langDir(){return!0===this.$q.lang.rtl?{left:"right",right:"left"}:{left:"left",right:"right"}}},methods:{reset(){this.$refs.content.style.transform="translate(0,0)",this.__emitSlide(this.__showing,0,!0)},__emitSlide(t,e,i){void 0!==this.qListeners.slide&&this.$emit("slide",{side:t,ratio:e,isReset:i})},__pan(t){const e=this.$refs.content;if(t.isFinal)return e.classList.remove("no-transition"),void(1===this.__scale?(e.style.transform=`translate${this.__axis}(${100*this.__dir}%)`,this.timer=setTimeout(()=>{this.$emit(this.__showing,{reset:this.reset}),this.$emit("action",{side:this.__showing,reset:this.reset})},230)):(e.style.transform="translate(0,0)",this.__emitSlide(this.__showing,0,!0)));if(t.isFirst?(this.__dir=null,this.__size={left:0,right:0,top:0,bottom:0},this.__scale=0,e.classList.add("no-transition"),fl.forEach(t=>{if(void 0!==this.$scopedSlots[t[0]]){const e=this.$refs[t[0]+"Content"];e.style.transform="scale(1)",this.__size[t[0]]=e.getBoundingClientRect()[t[3]]}}),this.__axis="up"===t.direction||"down"===t.direction?"Y":"X"):t.direction="X"===this.__axis?t.offset.x<0?"left":"right":t.offset.y<0?"up":"down",void 0===this.$scopedSlots.left&&t.direction===this.langDir.right||void 0===this.$scopedSlots.right&&t.direction===this.langDir.left||void 0===this.$scopedSlots.top&&"down"===t.direction||void 0===this.$scopedSlots.bottom&&"up"===t.direction)return void(e.style.transform="translate(0,0)");let i,s,o;"X"===this.__axis?(s="left"===t.direction?-1:1,i=1===s?this.langDir.left:this.langDir.right,o=t.distance.x):(s="up"===t.direction?-2:2,i=2===s?"top":"bottom",o=t.distance.y),null!==this.__dir&&Math.abs(s)!==Math.abs(this.__dir)||(this.__dir!==s&&(["left","right","top","bottom"].forEach(t=>{void 0!==this.$refs[t]&&(this.$refs[t].style.visibility=i===t?"visible":"hidden")}),this.__showing=i,this.__dir=s),this.__scale=Math.max(0,Math.min(1,(o-40)/this.__size[i])),e.style.transform=`translate${this.__axis}(${o*s/Math.abs(s)}px)`,this.$refs[`${i}Content`].style.transform=`scale(${this.__scale})`,this.__emitSlide(i,this.__scale,!1))}},render(t){const e=[],i={left:void 0!==this.$scopedSlots[this.langDir.right],right:void 0!==this.$scopedSlots[this.langDir.left],up:void 0!==this.$scopedSlots.bottom,down:void 0!==this.$scopedSlots.top},s=Object.keys(i).filter(t=>!0===i[t]);return fl.forEach(i=>{const s=i[0];void 0!==this.$scopedSlots[s]&&e.push(t("div",{ref:s,class:`q-slide-item__${s} absolute-full row no-wrap items-${i[1]} justify-${i[2]}`+(void 0!==this[s+"Color"]?` bg-${this[s+"Color"]}`:"")},[t("div",{ref:s+"Content"},this.$scopedSlots[s]())]))}),e.push(t("div",{ref:"content",key:"content",staticClass:"q-slide-item__content",directives:s.length>0?Tt(this,"dir#"+s.join(""),()=>{const t={prevent:!0,stop:!0,mouse:!0};return s.forEach(e=>{t[e]=!0}),[{name:"touch-pan",value:this.__pan,modifiers:t}]}):null},jt(this,"default"))),t("div",{staticClass:"q-slide-item q-item-type overflow-hidden"+` q-slide-item--${this.darkSuffix} q-${this.darkSuffix}`,on:{...this.qListeners}},e)},beforeDestroy(){clearTimeout(this.timer)}}),vl=e.default.extend({name:"QSpace",mixins:[Ht],render(t){return t("div",{staticClass:"q-space",on:{...this.qListeners}})}}),bl=e.default.extend({name:"QSpinnerAudio",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 55 80",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"matrix(1 0 0 -1 0 80)"}},[t("rect",{attrs:{width:"10",height:"20",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"4.3s",values:"20;45;57;80;64;32;66;45;64;23;66;13;64;56;34;34;2;23;76;79;20",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"15",width:"10",height:"80",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"2s",values:"80;55;33;5;75;23;73;33;12;14;60;80",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"30",width:"10",height:"50",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"1.4s",values:"50;34;78;23;56;23;34;76;80;54;21;50",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"45",width:"10",height:"30",rx:"3"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"2s",values:"30;45;13;80;56;72;45;76;34;23;67;30",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),yl=e.default.extend({name:"QSpinnerBall",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 57 57",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(1 1)","stroke-width":"2",fill:"none","fill-rule":"evenodd"}},[t("circle",{attrs:{cx:"5",cy:"50",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",values:"50;5;50;50",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",begin:"0s",dur:"2.2s",values:"5;27;49;5",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"27",cy:"5",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",from:"5",to:"5",values:"5;50;50;5",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",begin:"0s",dur:"2.2s",from:"27",to:"27",values:"27;49;5;27",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"49",cy:"50",r:"5"}},[t("animate",{attrs:{attributeName:"cy",begin:"0s",dur:"2.2s",values:"50;50;5;50",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"cx",from:"49",to:"49",begin:"0s",dur:"2.2s",values:"49;5;27;49",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),Sl=e.default.extend({name:"QSpinnerBars",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 135 140",xmlns:"http://www.w3.org/2000/svg"}},[t("rect",{attrs:{y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"30",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"60",width:"15",height:"140",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"90",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.25s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.25s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})]),t("rect",{attrs:{x:"120",y:"10",width:"15",height:"120",rx:"6"}},[t("animate",{attrs:{attributeName:"height",begin:"0.5s",dur:"1s",values:"120;110;100;90;80;70;60;50;40;140;120",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"y",begin:"0.5s",dur:"1s",values:"10;15;20;25;30;35;40;45;50;0;10",calcMode:"linear",repeatCount:"indefinite"}})])])}}),xl=e.default.extend({name:"QSpinnerBox",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"25",y:"25",width:"50",height:"50",fill:"none","stroke-width":"4",stroke:"currentColor"}},[t("animateTransform",{attrs:{id:"spinnerBox",attributeName:"transform",type:"rotate",from:"0 50 50",to:"180 50 50",dur:"0.5s",begin:"rectBox.end"}})]),t("rect",{attrs:{x:"27",y:"27",width:"46",height:"50",fill:"currentColor"}},[t("animate",{attrs:{id:"rectBox",attributeName:"height",begin:"0s;spinnerBox.end",dur:"1.3s",from:"50",to:"0",fill:"freeze"}})])])}}),wl=e.default.extend({name:"QSpinnerClock",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("circle",{attrs:{cx:"50",cy:"50",r:"48",fill:"none","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor"}}),t("line",{attrs:{"stroke-linecap":"round","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor",x1:"50",y1:"50",x2:"85",y2:"50.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"2s",repeatCount:"indefinite"}})]),t("line",{attrs:{"stroke-linecap":"round","stroke-width":"4","stroke-miterlimit":"10",stroke:"currentColor",x1:"50",y1:"50",x2:"49.5",y2:"74"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"15s",repeatCount:"indefinite"}})])])}}),Cl=e.default.extend({name:"QSpinnerComment",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"0",y:"0",width:"100",height:"100",fill:"none"}}),t("path",{attrs:{d:"M78,19H22c-6.6,0-12,5.4-12,12v31c0,6.6,5.4,12,12,12h37.2c0.4,3,1.8,5.6,3.7,7.6c2.4,2.5,5.1,4.1,9.1,4 c-1.4-2.1-2-7.2-2-10.3c0-0.4,0-0.8,0-1.3h8c6.6,0,12-5.4,12-12V31C90,24.4,84.6,19,78,19z",fill:"currentColor"}}),t("circle",{attrs:{cx:"30",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;1;1",keyTimes:"0;0.2;1",dur:"1s",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"50",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;0;1;1",keyTimes:"0;0.2;0.4;1",dur:"1s",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"70",cy:"47",r:"5",fill:"#fff"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",values:"0;0;1;1",keyTimes:"0;0.4;0.6;1",dur:"1s",repeatCount:"indefinite"}})])])}}),kl=e.default.extend({name:"QSpinnerCube",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("rect",{attrs:{x:"0",y:"0",width:"100",height:"100",fill:"none"}}),t("g",{attrs:{transform:"translate(25 25)"}},[t("rect",{attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.9"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(75 25)"}},[t("rect",{attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.8"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.1s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(25 75)"}},[t("rect",{staticClass:"cube",attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.7"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.3s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])]),t("g",{attrs:{transform:"translate(75 75)"}},[t("rect",{staticClass:"cube",attrs:{x:"-20",y:"-20",width:"40",height:"40",fill:"currentColor",opacity:"0.6"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"1.5",to:"1",repeatCount:"indefinite",begin:"0.2s",dur:"1s",calcMode:"spline",keySplines:"0.2 0.8 0.2 0.8",keyTimes:"0;1"}})])])])}}),ql=e.default.extend({name:"QSpinnerDots",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 120 30",xmlns:"http://www.w3.org/2000/svg"}},[t("circle",{attrs:{cx:"15",cy:"15",r:"15"}},[t("animate",{attrs:{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"60",cy:"15",r:"9","fill-opacity":".3"}},[t("animate",{attrs:{attributeName:"r",from:"9",to:"9",begin:"0s",dur:"0.8s",values:"9;15;9",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:".5",to:".5",begin:"0s",dur:"0.8s",values:".5;1;.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"105",cy:"15",r:"15"}},[t("animate",{attrs:{attributeName:"r",from:"15",to:"15",begin:"0s",dur:"0.8s",values:"15;9;15",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"fill-opacity",from:"1",to:"1",begin:"0s",dur:"0.8s",values:"1;.5;1",calcMode:"linear",repeatCount:"indefinite"}})])])}}),$l=e.default.extend({name:"QSpinnerFacebook",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"xMidYMid"}},[t("g",{attrs:{transform:"translate(20 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.6"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])]),t("g",{attrs:{transform:"translate(50 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.8"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0.1s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])]),t("g",{attrs:{transform:"translate(80 50)"}},[t("rect",{attrs:{x:"-10",y:"-30",width:"20",height:"60",fill:"currentColor",opacity:"0.9"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"scale",from:"2",to:"1",begin:"0.2s",repeatCount:"indefinite",dur:"1s",calcMode:"spline",keySplines:"0.1 0.9 0.4 1",keyTimes:"0;1",values:"2;1"}})])])])}}),Tl=e.default.extend({name:"QSpinnerGears",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(-20,-20)"}},[t("path",{attrs:{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"90 50 50",to:"0 50 50",dur:"1s",repeatCount:"indefinite"}})])]),t("g",{attrs:{transform:"translate(20,20) rotate(15 50 50)"}},[t("path",{attrs:{d:"M79.9,52.6C80,51.8,80,50.9,80,50s0-1.8-0.1-2.6l-5.1-0.4c-0.3-2.4-0.9-4.6-1.8-6.7l4.2-2.9c-0.7-1.6-1.6-3.1-2.6-4.5 L70,35c-1.4-1.9-3.1-3.5-4.9-4.9l2.2-4.6c-1.4-1-2.9-1.9-4.5-2.6L59.8,27c-2.1-0.9-4.4-1.5-6.7-1.8l-0.4-5.1C51.8,20,50.9,20,50,20 s-1.8,0-2.6,0.1l-0.4,5.1c-2.4,0.3-4.6,0.9-6.7,1.8l-2.9-4.1c-1.6,0.7-3.1,1.6-4.5,2.6l2.1,4.6c-1.9,1.4-3.5,3.1-5,4.9l-4.5-2.1 c-1,1.4-1.9,2.9-2.6,4.5l4.1,2.9c-0.9,2.1-1.5,4.4-1.8,6.8l-5,0.4C20,48.2,20,49.1,20,50s0,1.8,0.1,2.6l5,0.4 c0.3,2.4,0.9,4.7,1.8,6.8l-4.1,2.9c0.7,1.6,1.6,3.1,2.6,4.5l4.5-2.1c1.4,1.9,3.1,3.5,5,4.9l-2.1,4.6c1.4,1,2.9,1.9,4.5,2.6l2.9-4.1 c2.1,0.9,4.4,1.5,6.7,1.8l0.4,5.1C48.2,80,49.1,80,50,80s1.8,0,2.6-0.1l0.4-5.1c2.3-0.3,4.6-0.9,6.7-1.8l2.9,4.2 c1.6-0.7,3.1-1.6,4.5-2.6L65,69.9c1.9-1.4,3.5-3,4.9-4.9l4.6,2.2c1-1.4,1.9-2.9,2.6-4.5L73,59.8c0.9-2.1,1.5-4.4,1.8-6.7L79.9,52.6 z M50,65c-8.3,0-15-6.7-15-15c0-8.3,6.7-15,15-15s15,6.7,15,15C65,58.3,58.3,65,50,65z",fill:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"90 50 50",dur:"1s",repeatCount:"indefinite"}})])])])}}),Ml=e.default.extend({name:"QSpinnerGrid",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 105 105",xmlns:"http://www.w3.org/2000/svg"}},[t("circle",{attrs:{cx:"12.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0s",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"12.5",cy:"52.5",r:"12.5","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"100ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"300ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"52.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"600ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"12.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"800ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"52.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"400ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"12.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"700ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"52.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"500ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"92.5",cy:"92.5",r:"12.5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"200ms",dur:"1s",values:"1;.2;1",calcMode:"linear",repeatCount:"indefinite"}})])])}}),Ll=e.default.extend({name:"QSpinnerHearts",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",fill:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 140 64",xmlns:"http://www.w3.org/2000/svg"}},[t("path",{attrs:{d:"M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.716-6.002 11.47-7.65 17.304-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0s",dur:"1.4s",values:"0.5;1;0.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.593-2.32 17.308 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z","fill-opacity":".5"}},[t("animate",{attrs:{attributeName:"fill-opacity",begin:"0.7s",dur:"1.4s",values:"0.5;1;0.5",calcMode:"linear",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z"}})])}}),El=e.default.extend({name:"QSpinnerHourglass",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",[t("path",{staticClass:"glass",attrs:{fill:"none",stroke:"currentColor","stroke-width":"5","stroke-miterlimit":"10",d:"M58.4,51.7c-0.9-0.9-1.4-2-1.4-2.3s0.5-0.4,1.4-1.4 C70.8,43.8,79.8,30.5,80,15.5H70H30H20c0.2,15,9.2,28.1,21.6,32.3c0.9,0.9,1.4,1.2,1.4,1.5s-0.5,1.6-1.4,2.5 C29.2,56.1,20.2,69.5,20,85.5h10h40h10C79.8,69.5,70.8,55.9,58.4,51.7z"}}),t("clipPath",{attrs:{id:"uil-hourglass-clip1"}},[t("rect",{staticClass:"clip",attrs:{x:"15",y:"20",width:"70",height:"25"}},[t("animate",{attrs:{attributeName:"height",from:"25",to:"0",dur:"1s",repeatCount:"indefinite",values:"25;0;0",keyTimes:"0;0.5;1"}}),t("animate",{attrs:{attributeName:"y",from:"20",to:"45",dur:"1s",repeatCount:"indefinite",values:"20;45;45",keyTimes:"0;0.5;1"}})])]),t("clipPath",{attrs:{id:"uil-hourglass-clip2"}},[t("rect",{staticClass:"clip",attrs:{x:"15",y:"55",width:"70",height:"25"}},[t("animate",{attrs:{attributeName:"height",from:"0",to:"25",dur:"1s",repeatCount:"indefinite",values:"0;25;25",keyTimes:"0;0.5;1"}}),t("animate",{attrs:{attributeName:"y",from:"80",to:"55",dur:"1s",repeatCount:"indefinite",values:"80;55;55",keyTimes:"0;0.5;1"}})])]),t("path",{staticClass:"sand",attrs:{d:"M29,23c3.1,11.4,11.3,19.5,21,19.5S67.9,34.4,71,23H29z","clip-path":"url(#uil-hourglass-clip1)",fill:"currentColor"}}),t("path",{staticClass:"sand",attrs:{d:"M71.6,78c-3-11.6-11.5-20-21.5-20s-18.5,8.4-21.5,20H71.6z","clip-path":"url(#uil-hourglass-clip2)",fill:"currentColor"}}),t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"180 50 50",repeatCount:"indefinite",dur:"1s",values:"0 50 50;0 50 50;180 50 50",keyTimes:"0;0.7;1"}})])])}}),Al=e.default.extend({name:"QSpinnerInfinity",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("path",{attrs:{d:"M24.3,30C11.4,30,5,43.3,5,50s6.4,20,19.3,20c19.3,0,32.1-40,51.4-40C88.6,30,95,43.3,95,50s-6.4,20-19.3,20C56.4,70,43.6,30,24.3,30z",fill:"none",stroke:"currentColor","stroke-width":"8","stroke-dasharray":"10.691205342610678 10.691205342610678","stroke-dashoffset":"0"}},[t("animate",{attrs:{attributeName:"stroke-dashoffset",from:"0",to:"21.382410685221355",begin:"0",dur:"2s",repeatCount:"indefinite",fill:"freeze"}})])])}}),Bl=e.default.extend({name:"QSpinnerIos",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,stroke:"currentColor",fill:"currentColor",viewBox:"0 0 64 64"}},[t("g",{attrs:{"stroke-width":"4","stroke-linecap":"round"}},[t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(180)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(210)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(240)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".1;0;1;.85;.7;.65;.55;.45;.35;.25;.15;.1",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(270)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".15;.1;0;1;.85;.7;.65;.55;.45;.35;.25;.15",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(300)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".25;.15;.1;0;1;.85;.7;.65;.55;.45;.35;.25",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(330)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".35;.25;.15;.1;0;1;.85;.7;.65;.55;.45;.35",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(0)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".45;.35;.25;.15;.1;0;1;.85;.7;.65;.55;.45",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(30)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".55;.45;.35;.25;.15;.1;0;1;.85;.7;.65;.55",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(60)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".65;.55;.45;.35;.25;.15;.1;0;1;.85;.7;.65",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(90)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".7;.65;.55;.45;.35;.25;.15;.1;0;1;.85;.7",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(120)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:".85;.7;.65;.55;.45;.35;.25;.15;.1;0;1;.85",repeatCount:"indefinite"}})]),t("line",{attrs:{y1:"17",y2:"29",transform:"translate(32,32) rotate(150)"}},[t("animate",{attrs:{attributeName:"stroke-opacity",dur:"750ms",values:"1;.85;.7;.65;.55;.45;.35;.25;.15;.1;0;1",repeatCount:"indefinite"}})])])])}}),Pl=e.default.extend({name:"QSpinnerOrbit",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"}},[t("circle",{attrs:{cx:"50",cy:"50",r:"44",fill:"none","stroke-width":"4","stroke-opacity":".5",stroke:"currentColor"}}),t("circle",{attrs:{cx:"8",cy:"54",r:"6",fill:"currentColor","stroke-width":"3",stroke:"currentColor"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 48",to:"360 50 52",dur:"2s",repeatCount:"indefinite"}})])])}}),zl=e.default.extend({name:"QSpinnerOval",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"translate(1 1)","stroke-width":"2",fill:"none","fill-rule":"evenodd"}},[t("circle",{attrs:{"stroke-opacity":".5",cx:"18",cy:"18",r:"18"}}),t("path",{attrs:{d:"M36 18c0-9.94-8.06-18-18-18"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"1s",repeatCount:"indefinite"}})])])])}}),Il=e.default.extend({name:"QSpinnerPie",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("path",{attrs:{d:"M0 50A50 50 0 0 1 50 0L50 50L0 50",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"0.8s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M50 0A50 50 0 0 1 100 50L50 50L50 0",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"1.6s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M100 50A50 50 0 0 1 50 100L50 50L100 50",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"2.4s",repeatCount:"indefinite"}})]),t("path",{attrs:{d:"M50 100A50 50 0 0 1 0 50L50 50L50 100",fill:"currentColor",opacity:"0.5"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 50 50",to:"360 50 50",dur:"3.2s",repeatCount:"indefinite"}})])])}}),Ol=e.default.extend({name:"QSpinnerPuff",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 44 44",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{fill:"none","fill-rule":"evenodd","stroke-width":"2"}},[t("circle",{attrs:{cx:"22",cy:"22",r:"1"}},[t("animate",{attrs:{attributeName:"r",begin:"0s",dur:"1.8s",values:"1; 20",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.165, 0.84, 0.44, 1",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"0s",dur:"1.8s",values:"1; 0",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.3, 0.61, 0.355, 1",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"1"}},[t("animate",{attrs:{attributeName:"r",begin:"-0.9s",dur:"1.8s",values:"1; 20",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.165, 0.84, 0.44, 1",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"-0.9s",dur:"1.8s",values:"1; 0",calcMode:"spline",keyTimes:"0; 1",keySplines:"0.3, 0.61, 0.355, 1",repeatCount:"indefinite"}})])])])}}),Rl=e.default.extend({name:"QSpinnerRadio",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{transform:"scale(0.55)"}},[t("circle",{attrs:{cx:"30",cy:"150",r:"30",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})]),t("path",{attrs:{d:"M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0.1",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})]),t("path",{attrs:{d:"M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z",fill:"currentColor"}},[t("animate",{attrs:{attributeName:"opacity",from:"0",to:"1",dur:"1s",begin:"0.2",repeatCount:"indefinite",keyTimes:"0;0.5;1",values:"0;1;1"}})])])])}}),Fl=e.default.extend({name:"QSpinnerRings",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",stroke:"currentColor",width:this.cSize,height:this.cSize,viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg"}},[t("g",{attrs:{fill:"none","fill-rule":"evenodd",transform:"translate(1 1)","stroke-width":"2"}},[t("circle",{attrs:{cx:"22",cy:"22",r:"6"}},[t("animate",{attrs:{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"6"}},[t("animate",{attrs:{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}}),t("animate",{attrs:{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"}})]),t("circle",{attrs:{cx:"22",cy:"22",r:"8"}},[t("animate",{attrs:{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}})])])])}}),Dl=e.default.extend({name:"QSpinnerTail",mixins:[qe],render(t){return t("svg",{staticClass:"q-spinner",class:this.classes,on:{...this.qListeners},attrs:{focusable:"false",width:this.cSize,height:this.cSize,viewBox:"0 0 38 38",xmlns:"http://www.w3.org/2000/svg"}},[t("defs",[t("linearGradient",{attrs:{x1:"8.042%",y1:"0%",x2:"65.682%",y2:"23.865%",id:"a"}},[t("stop",{attrs:{"stop-color":"currentColor","stop-opacity":"0",offset:"0%"}}),t("stop",{attrs:{"stop-color":"currentColor","stop-opacity":".631",offset:"63.146%"}}),t("stop",{attrs:{"stop-color":"currentColor",offset:"100%"}})])]),t("g",{attrs:{transform:"translate(1 1)",fill:"none","fill-rule":"evenodd"}},[t("path",{attrs:{d:"M36 18c0-9.94-8.06-18-18-18",stroke:"url(#a)","stroke-width":"2"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"0.9s",repeatCount:"indefinite"}})]),t("circle",{attrs:{fill:"currentColor",cx:"36",cy:"18",r:"1"}},[t("animateTransform",{attrs:{attributeName:"transform",type:"rotate",from:"0 18 18",to:"360 18 18",dur:"0.9s",repeatCount:"indefinite"}})])])])}});const Vl={37:"left",38:"up",39:"right",40:"down"};var Nl=e.default.extend({name:"QSplitter",mixins:[ce,Ht],directives:{TouchPan:xo},props:{value:{type:Number,required:!0},reverse:Boolean,unit:{type:String,default:"%",validator:t=>["%","px"].includes(t)},limits:{type:Array,validator:t=>2===t.length&&("number"==typeof t[0]&&"number"==typeof t[1]&&(t[0]>=0&&t[0]<=t[1]))},emitImmediately:Boolean,horizontal:Boolean,disable:Boolean,tabindex:[String,Number],beforeClass:[Array,String,Object],afterClass:[Array,String,Object],separatorClass:[Array,String,Object],separatorStyle:[Array,String,Object]},watch:{value:{immediate:!0,handler(t){this.__normalize(t,this.computedLimits)}},limits:{deep:!0,handler(){this.$nextTick(()=>{this.__normalize(this.value,this.computedLimits)})}}},computed:{classes(){return(!0===this.horizontal?"column":"row")+` q-splitter--${!0===this.horizontal?"horizontal":"vertical"}`+` q-splitter--${!0===this.disable?"disabled":"workable"}`+` q-splitter--${this.darkSuffix}`},prop(){return!0===this.horizontal?"height":"width"},side(){return!0!==this.reverse?"before":"after"},computedLimits(){return void 0!==this.limits?this.limits:"%"===this.unit?[10,90]:[50,1/0]},styles(){return{[this.side]:{[this.prop]:this.__getCSSValue(this.value)}}},separatorDirectives(){if(!0!==this.disable)return[{name:"touch-pan",value:this.__pan,modifiers:{[!0===this.horizontal?"vertical":"horizontal"]:!0,prevent:!0,stop:!0,mouse:!0,mouseAllDir:!0}}]},separatorAttrs(){const t=!0===this.disable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.tabindex||0},e=this.__getAriaValue(this.value);return{role:"separator","aria-orientation":!0===this.horizontal?"horizontal":"vertical","aria-controls":this.targetUid,"aria-valuemin":this.computedLimits[0],"aria-valuemax":this.computedLimits[1],"aria-valuenow":e.now,"aria-valuetext":e.text,...t}},separatorEvents(){return!0===this.disable?void 0:{keydown:this.__panKeydown}}},methods:{__panStart(){const t=this.$el.getBoundingClientRect()[this.prop];this.__dir=!0===this.horizontal?"up":"left",this.__maxValue="%"===this.unit?100:t,this.__value=Math.min(this.__maxValue,this.computedLimits[1],Math.max(this.computedLimits[0],this.value)),this.__multiplier=(!0!==this.reverse?1:-1)*(!0===this.horizontal?1:!0===this.$q.lang.rtl?-1:1)*("%"===this.unit?0===t?0:100/t:1),this.$el.classList.add("q-splitter--active")},__panProgress(t){this.__normalized=Math.min(this.__maxValue,this.computedLimits[1],Math.max(this.computedLimits[0],t)),this.$refs[this.side].style[this.prop]=this.__getCSSValue(this.__normalized);const e=this.__getAriaValue(this.__normalized);this.$refs.separator.setAttribute("aria-valuenow",e.now),this.$refs.separator.setAttribute("aria-valuetext",e.text),!0===this.emitImmediately&&this.value!==this.__normalized&&this.$emit("input",this.__normalized)},__panEnd(){void 0!==this.__panCleanup&&this.__panCleanup(),this.__normalized!==this.value&&this.$emit("input",this.__normalized),this.$el.classList.remove("q-splitter--active")},__pan(t){if(!0===t.isFinal)return void this.__panEnd();if(!0===t.isFirst)return void this.__panStart();const e=this.__value+this.__multiplier*(t.direction===this.__dir?-1:1)*t.distance[!0===this.horizontal?"y":"x"];this.__panProgress(e)},__panKeydown(t){if(void 0!==this.qListeners.keydown&&this.$emit("keydown",t),!0===this.disable||!0===t.defaultPrevented||!0!==this.horizontal&&-1===[37,39].indexOf(t.keyCode)||!0===this.horizontal&&-1===[38,40].indexOf(t.keyCode))return;w(t),void 0===this.__panCleanup&&(document.addEventListener("keyup",this.__panEnd),document.addEventListener("focusout",this.__panEnd),this.__panCleanup=(()=>{this.__panCleanup=void 0,document.removeEventListener("keyup",this.__panEnd),document.removeEventListener("focusout",this.__panEnd),this.__panEnd()}),this.__panStart(),this.__normalized=this.__value);const e=Vl[t.keyCode],i=this.__normalized+this.__multiplier*(e===this.__dir?-1:1)*(!0===t.shiftKey?1:10);this.__panProgress(i)},__normalize(t,e){te[1]&&this.$emit("input",e[1])},__getAriaValue(t){const e="%"===this.unit?t:Math.round(t);return{now:e,text:Math.round(100*e)/100+this.unit}},__getCSSValue(t){return("%"===this.unit?t:Math.round(t))+this.unit}},created(){this.targetUid=`sp_${vs()}`},beforeDestroy(){void 0!==this.__panCleanup&&this.__panCleanup()},render(t){const e={[this.side]:{id:this.targetUid}},i=[t("div",{key:"before",ref:"before",staticClass:"q-splitter__panel q-splitter__before"+(!0===this.reverse?" col":""),style:this.styles.before,class:this.beforeClass,attrs:e.before,on:$t(this,"stop",{input:S})},jt(this,"before")),t("div",{staticClass:"q-splitter__separator",ref:"separator",style:this.separatorStyle,class:this.separatorClass,attrs:this.separatorAttrs,on:this.separatorEvents},[t("div",{staticClass:"absolute-full q-splitter__separator-area",directives:this.separatorDirectives},jt(this,"separator"))]),t("div",{key:"after",ref:"after",staticClass:"q-splitter__panel q-splitter__after"+(!0===this.reverse?"":" col"),style:this.styles.after,class:this.afterClass,attrs:e.after,on:$t(this,"stop",{input:S})},jt(this,"after"))];return t("div",{staticClass:"q-splitter no-wrap",class:this.classes,on:{...this.qListeners}},Wt(i,this,"default"))}}),Hl=e.default.extend({name:"StepHeader",mixins:[At],directives:{Ripple:Fe},props:{stepper:{},step:{}},computed:{isDisable(){const t=this.step.disable;return!0===t||""===t},isActive(){return!0!==this.isDisable&&this.stepper.value===this.step.name},isError(){const t=this.step.error;return!0===t||""===t},isDone(){const t=this.step.done;return!0===t||""===t},headerNav(){const t=this.step.headerNav,e=!0===t||""===t||void 0===t;return!1===this.isDisable&&this.stepper.headerNav&&e},hasPrefix(){return this.step.prefix&&void 0===this.icon},icon(){let t;return"none"===(t=!0===this.isActive?this.__getProp("activeIcon",this.$q.iconSet.stepper.active):!0===this.isError?this.__getProp("errorIcon",this.$q.iconSet.stepper.error):!0===this.isDone?this.__getProp("doneIcon",this.$q.iconSet.stepper.done):this.step.icon||this.stepper.inactiveIcon)?void 0:t},color(){return!0===this.isError?this.__getProp("errorColor"):!0===this.isActive?this.__getProp("activeColor"):!1===this.isDisable&&!0===this.isDone?this.__getProp("doneColor"):this.step.color||this.stepper.inactiveColor},classes(){return"q-stepper__tab col-grow flex items-center no-wrap relative-position"+(void 0!==this.color?` text-${this.color}`:"")+(!0===this.isError?" q-stepper__tab--error q-stepper__tab--error-with-"+(!0===this.hasPrefix?"prefix":"icon"):"")+(!0===this.isActive?" q-stepper__tab--active":"")+(!0===this.isDone?" q-stepper__tab--done":"")+(!0===this.headerNav?" q-stepper__tab--navigation q-focusable q-hoverable":"")+(!0===this.isDisable?" q-stepper__tab--disabled":"")}},methods:{activate(){void 0!==this.$refs.blurTarget&&this.$refs.blurTarget.focus(),!1===this.isActive&&this.stepper.goTo(this.step.name)},keyup(t){13===t.keyCode&&!1===this.isActive&&this.stepper.goTo(this.step.name)},__getProp(t,e){return this.step[t]||this.stepper[t]||e}},render(t){const e={class:this.classes};!0===this.stepper.headerNav&&(e.directives=[{name:"ripple",value:this.headerNav}]),!0===this.headerNav&&Object.assign(e,{key:"headnavon",on:$t(this,"headnavon",{click:this.activate,keyup:this.keyup}),attrs:!0===this.isDisable?{tabindex:-1,"aria-disabled":"true"}:{tabindex:this.qAttrs.tabindex||0}});const i=[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:"blurTarget"}),t("div",{staticClass:"q-stepper__dot row flex-center q-stepper__line relative-position"},[t("span",{staticClass:"row flex-center"},[!0===this.hasPrefix?this.step.prefix:t(le,{props:{name:this.icon}})])])];if(void 0!==this.step.title&&null!==this.step.title){const e=[t("div",{staticClass:"q-stepper__title"},[this.step.title])];void 0!==this.step.caption&&null!==this.step.caption&&e.push(t("div",{staticClass:"q-stepper__caption"},[this.step.caption])),i.push(t("div",{staticClass:"q-stepper__label q-stepper__line relative-position"},e))}return t("div",e,i)}});const jl={role:"tabpanel"},Ql=e.default.extend({name:"QStepWrapper",render(t){return t("div",{staticClass:"q-stepper__step-content"},[t("div",{staticClass:"q-stepper__step-inner"},jt(this,"default"))])}});var Wl=e.default.extend({name:"QStep",inject:{stepper:{default(){console.error("QStep needs to be child of QStepper")}}},mixins:[Us],props:{icon:String,color:String,title:{type:String,required:!0},caption:String,prefix:[String,Number],doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String,headerNav:{type:Boolean,default:!0},done:Boolean,error:Boolean},computed:{isActive(){return this.stepper.value===this.name},onEvents(){return!0!==this.isActive||!0!==this.stepper.vertical||!0!==this.$q.platform.is.ios&&!0===this.$q.platform.is.chrome?{...this.qListeners}:{...this.qListeners,scroll:this.__keepScroll}}},methods:{__keepScroll(t){const{target:e}=t;e.scrollTop>0&&(e.scrollTop=0),void 0!==this.qListeners.scroll&&this.$emit("scroll",t)}},render(t){const e=this.stepper.vertical,i=!0===e&&!0===this.stepper.keepAlive?t("keep-alive",!0===this.isActive?[t(Ql,{key:this.name},jt(this,"default"))]:void 0):!0!==e||!0===this.isActive?Ql.options.render.call(this,t):void 0;return t("div",{staticClass:"q-stepper__step",attrs:jl,on:this.onEvents},!0===e?[t(Hl,{props:{stepper:this.stepper,step:this}}),!0===this.stepper.animated?t(kr,[i]):i]:[i])}}),Ul=e.default.extend({name:"QStepper",provide(){return{stepper:this}},mixins:[ce,Ws],props:{flat:Boolean,bordered:Boolean,alternativeLabels:Boolean,headerNav:Boolean,contracted:Boolean,headerClass:String,inactiveColor:String,inactiveIcon:String,doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String},computed:{classes(){const t=!0===this.dark||null===this.dark&&!1!==this.$q.dark.isActive;return`q-stepper q-stepper--${!0===this.vertical?"vertical":"horizontal"}`+(!0===this.flat||!0===t?" q-stepper--flat no-shadow":"")+(!0===this.bordered||!0===t&&!1===this.flat?" q-stepper--bordered":"")+` q-stepper--${this.darkSuffix} q-${this.darkSuffix}`},headerClasses(){return"q-stepper__header row items-stretch justify-between"+` q-stepper__header--${!0===this.alternativeLabels?"alternative":"standard"}-labels`+(!1===this.flat||!0===this.bordered?" q-stepper__header--border":"")+(!0===this.contracted?" q-stepper__header--contracted":"")+(void 0!==this.headerClass?` ${this.headerClass}`:"")}},methods:{__getContent(t){const e=jt(this,"message",[]);if(!0===this.vertical){this.__isValidPanelName(this.value)&&this.__updatePanelIndex();const i=t("div",{key:"stop",staticClass:"q-stepper__content",on:$t(this,"stop",{input:S})},jt(this,"default"));return void 0===e?[i]:e.concat(i)}return[t("div",{class:this.headerClasses},this.panels.map(e=>{const i=e.componentOptions.propsData;return t(Hl,{key:i.name,props:{stepper:this,step:i}})}))].concat(e,t("div",{staticClass:"q-stepper__content q-panel-parent",directives:this.panelDirectives},this.__getPanelContent(t)))},__renderPanels(t){return t("div",{class:this.classes,on:{...this.qListeners}},Wt(this.__getContent(t),this,"navigation"))}}}),Yl=e.default.extend({name:"QStepperNavigation",mixins:[Ht],render(t){return t("div",{staticClass:"q-stepper__nav",on:{...this.qListeners}},jt(this,"default"))}}),Kl={computed:{marginalsScope(){return{pagination:this.computedPagination,pagesNumber:this.pagesNumber,isFirstPage:this.isFirstPage,isLastPage:this.isLastPage,firstPage:this.firstPage,prevPage:this.prevPage,nextPage:this.nextPage,lastPage:this.lastPage,inFullscreen:this.inFullscreen,toggleFullscreen:this.toggleFullscreen}}},methods:{__getTopDiv(t){const e=this.$scopedSlots.top,i=this.$scopedSlots["top-left"],s=this.$scopedSlots["top-right"],o=this.$scopedSlots["top-selection"],n=!0===this.hasSelectionMode&&void 0!==o&&this.rowsSelectedNumber>0,r="q-table__top relative-position row items-center";if(void 0!==e)return t("div",{staticClass:r},[e(this.marginalsScope)]);let a;return!0===n?a=o(this.marginalsScope).slice():(a=[],void 0!==i?a.push(t("div",{staticClass:"q-table-control"},[i(this.marginalsScope)])):this.title&&a.push(t("div",{staticClass:"q-table__control"},[t("div",{staticClass:"q-table__title",class:this.titleClass},this.title)]))),void 0!==s&&(a.push(t("div",{staticClass:"q-table__separator col"})),a.push(t("div",{staticClass:"q-table__control"},[s(this.marginalsScope)]))),0!==a.length?t("div",{staticClass:r},a):void 0}}},Gl=e.default.extend({name:"QTh",mixins:[Ht],props:{props:Object,autoWidth:Boolean},render(t){const e={...this.qListeners};if(void 0===this.props)return t("th",{on:e,class:!0===this.autoWidth?"q-table--col-auto-width":null},jt(this,"default"));let i,s;const o=this.$vnode.key;if(o){if(void 0===(i=this.props.colsMap[o]))return}else i=this.props.col;if(!0===i.sortable){const e="right"===i.align?"unshift":"push";(s=Qt(this,"default",[]))[e](t(le,{props:{name:this.$q.iconSet.table.arrowUp},staticClass:i.__iconClass}))}else s=jt(this,"default");const n=!0===i.sortable?{click:t=>{this.props.sort(i),this.$emit("click",t)}}:{};return t("th",{on:{...e,...n},style:i.headerStyle,class:i.__thClass+(!0===this.autoWidth?" q-table--col-auto-width":"")},s)}}),Xl={computed:{headerSelectedValue(){return!0===this.someRowsSelected?null:this.allRowsSelected}},methods:{__getTHead(t){const e=this.__getTHeadTR(t);return!0===this.loading&&void 0===this.$scopedSlots.loading&&e.push(t("tr",{staticClass:"q-table__progress"},[t("th",{staticClass:"relative-position",attrs:{colspan:this.computedColspan}},this.__getProgress(t))])),t("thead",e)},__getTHeadTR(t){const e=this.$scopedSlots.header,i=this.$scopedSlots["header-cell"];if(void 0!==e)return e(this.__getHeaderScope({header:!0})).slice();const s=this.computedCols.map(e=>{const s=this.$scopedSlots[`header-cell-${e.name}`],o=void 0!==s?s:i,n=this.__getHeaderScope({col:e});return void 0!==o?o(n):t(Gl,{key:e.name,props:{props:n}},e.label)});if(!0===this.singleSelection&&!0!==this.grid)s.unshift(t("th",{staticClass:"q-table--col-auto-width"},[" "]));else if(!0===this.multipleSelection){const e=this.$scopedSlots["header-selection"],i=void 0!==e?e(this.__getHeaderScope({})):[t(so,{key:"inp",props:{color:this.color,value:this.headerSelectedValue,dark:this.dark,dense:this.dense},on:$t(this,"inp",{input:this.__onMultipleSelectionSet})})];s.unshift(t("th",{staticClass:"q-table--col-auto-width"},i))}return[t("tr",{style:this.tableHeaderStyle,class:this.tableHeaderClass},s)]},__getHeaderScope(t){return Object.assign(t,{cols:this.computedCols,sort:this.sort,colsMap:this.computedColsMap,color:this.color,dark:this.dark,dense:this.dense}),!0===this.multipleSelection&&(Mo(t,"selected",()=>this.headerSelectedValue,this.__onMultipleSelectionSet),t.partialSelected=this.someRowsSelected,t.multipleSelect=!0),t},__onMultipleSelectionSet(t){!0===this.someRowsSelected&&(t=!1),this.__updateSelection(this.computedRows.map(this.getRowKey),this.computedRows,t)}}},Zl={methods:{__getTBodyTR(t,e,i,s){const o=this.getRowKey(e),n=this.isRowSelected(o);if(void 0!==i)return i(this.__getBodyScope({key:o,row:e,pageIndex:s,__trClass:n?"selected":""}));const r=this.$scopedSlots["body-cell"],a=this.computedCols.map(i=>{const n=this.$scopedSlots[`body-cell-${i.name}`],a=void 0!==n?n:r;return void 0!==a?a(this.__getBodyCellScope({key:o,row:e,pageIndex:s,col:i})):t("td",{class:i.__tdClass(e),style:i.__tdStyle(e)},this.getCellValue(i,e))});if(!0===this.hasSelectionMode){const i=this.$scopedSlots["body-selection"],r=void 0!==i?i(this.__getBodySelectionScope({key:o,row:e,pageIndex:s})):[t(so,{props:{value:n,color:this.color,dark:this.dark,dense:this.dense},on:{input:(t,i)=>{this.__updateSelection([o],[e],t,i)}}})];a.unshift(t("td",{staticClass:"q-table--col-auto-width"},r))}const l={key:o,class:{selected:n},on:{}};return void 0!==this.qListeners["row-click"]&&(l.class["cursor-pointer"]=!0,l.on.click=(t=>{this.$emit("row-click",t,e,s)})),void 0!==this.qListeners["row-dblclick"]&&(l.class["cursor-pointer"]=!0,l.on.dblclick=(t=>{this.$emit("row-dblclick",t,e,s)})),void 0!==this.qListeners["row-contextmenu"]&&(l.class["cursor-pointer"]=!0,l.on.contextmenu=(t=>{this.$emit("row-contextmenu",t,e,s)})),t("tr",l,a)},__getTBody(t){const e=this.$scopedSlots.body,i=this.$scopedSlots["top-row"],s=this.$scopedSlots["bottom-row"];let o=this.computedRows.map((i,s)=>this.__getTBodyTR(t,i,e,s));return void 0!==i&&(o=i({cols:this.computedCols}).concat(o)),void 0!==s&&(o=o.concat(s({cols:this.computedCols}))),t("tbody",o)},__getVirtualTBodyTR(t){const e=this.$scopedSlots.body;return i=>this.__getTBodyTR(t,i.item,e,i.index)},__getBodyScope(t){return this.__injectBodyCommonScope(t),t.cols=t.cols.map(e=>Mo({...e},"value",()=>this.getCellValue(e,t.row))),t},__getBodyCellScope(t){return this.__injectBodyCommonScope(t),Mo(t,"value",()=>this.getCellValue(t.col,t.row))},__getBodySelectionScope(t){return this.__injectBodyCommonScope(t),t},__injectBodyCommonScope(t){Object.assign(t,{cols:this.computedCols,colsMap:this.computedColsMap,sort:this.sort,rowIndex:this.firstRowIndex+t.pageIndex,color:this.color,dark:this.dark,dense:this.dense}),!0===this.hasSelectionMode&&Mo(t,"selected",()=>this.isRowSelected(t.key),(e,i)=>{this.__updateSelection([t.key],[t.row],e,i)}),Mo(t,"expand",()=>this.isRowExpanded(t.key),e=>{this.__updateExpanded(t.key,e)})},getCellValue(t,e){const i="function"==typeof t.field?t.field(e):e[t.field];return void 0!==t.format?t.format(i,e):i}}};const Jl="q-table__bottom row items-center";var th={props:{hideBottom:Boolean,hideSelectedBanner:Boolean,hideNoData:Boolean,hidePagination:Boolean},computed:{navIcon(){const t=[this.iconFirstPage||this.$q.iconSet.table.firstPage,this.iconPrevPage||this.$q.iconSet.table.prevPage,this.iconNextPage||this.$q.iconSet.table.nextPage,this.iconLastPage||this.$q.iconSet.table.lastPage];return!0===this.$q.lang.rtl?t.reverse():t}},methods:{__getBottomDiv(t){if(!0===this.hideBottom)return;if(!0===this.nothingToDisplay){if(!0===this.hideNoData)return;const e=!0===this.loading?this.loadingLabel||this.$q.lang.table.loading:this.filter?this.noResultsLabel||this.$q.lang.table.noResults:this.noDataLabel||this.$q.lang.table.noData,i=this.$scopedSlots["no-data"],s=void 0!==i?[i({message:e,icon:this.$q.iconSet.table.warning,filter:this.filter})]:[t(le,{staticClass:"q-table__bottom-nodata-icon",props:{name:this.$q.iconSet.table.warning}}),e];return t("div",{staticClass:Jl+" q-table__bottom--nodata"},s)}const e=this.$scopedSlots.bottom;if(void 0!==e)return t("div",{staticClass:Jl},[e(this.marginalsScope)]);const i=!0!==this.hideSelectedBanner&&!0===this.hasSelectionMode&&this.rowsSelectedNumber>0?[t("div",{staticClass:"q-table__control"},[t("div",[(this.selectedRowsLabel||this.$q.lang.table.selectedRecords)(this.rowsSelectedNumber)])])]:[];return!0!==this.hidePagination?t("div",{staticClass:Jl+" justify-end"},this.__getPaginationDiv(t,i)):i.length>0?t("div",{staticClass:Jl},i):void 0},__getPaginationDiv(t,e){let i;const{rowsPerPage:s}=this.computedPagination,o=this.paginationLabel||this.$q.lang.table.pagination,n=this.$scopedSlots.pagination,r=this.rowsPerPageOptions.length>1;if(e.push(t("div",{staticClass:"q-table__separator col"})),!0===r&&e.push(t("div",{staticClass:"q-table__control"},[t("span",{staticClass:"q-table__bottom-item"},[this.rowsPerPageLabel||this.$q.lang.table.recordsPerPage]),t(ul,{key:"pgSize",staticClass:"q-table__select inline q-table__bottom-item",props:{color:this.color,value:s,options:this.computedRowsPerPageOptions,displayValue:0===s?this.$q.lang.table.allRows:s,dark:this.dark,borderless:!0,dense:!0,optionsDense:!0,optionsCover:!0},on:$t(this,"pgSize",{input:t=>{this.setPagination({page:1,rowsPerPage:t.value})}})})])),void 0!==n)i=n(this.marginalsScope);else if(i=[t("span",0!==s?{staticClass:"q-table__bottom-item"}:{},[s?o(this.firstRowIndex+1,Math.min(this.lastRowIndex,this.computedRowsNumber),this.computedRowsNumber):o(1,this.filteredSortedRowsNumber,this.computedRowsNumber)])],0!==s&&this.pagesNumber>1){const e={color:this.color,round:!0,dense:!0,flat:!0};!0===this.dense&&(e.size="sm"),this.pagesNumber>2&&i.push(t(Ze,{key:"pgFirst",props:{...e,icon:this.navIcon[0],disable:this.isFirstPage},on:$t(this,"pgFirst",{click:this.firstPage})})),i.push(t(Ze,{key:"pgPrev",props:{...e,icon:this.navIcon[1],disable:this.isFirstPage},on:$t(this,"pgPrev",{click:this.prevPage})}),t(Ze,{key:"pgNext",props:{...e,icon:this.navIcon[2],disable:this.isLastPage},on:$t(this,"pgNext",{click:this.nextPage})})),this.pagesNumber>2&&i.push(t(Ze,{key:"pgLast",props:{...e,icon:this.navIcon[3],disable:this.isLastPage},on:$t(this,"pgLast",{click:this.lastPage})}))}return e.push(t("div",{staticClass:"q-table__control"},i)),e}}},eh={methods:{__getGridHeader(t){return t("div",{staticClass:"q-table__middle"},!0===this.gridHeader?[t("table",{staticClass:"q-table"},[this.__getTHead(t)])]:!0===this.loading&&void 0===this.$scopedSlots.loading?this.__getProgress(t):void 0)},__getGridBody(t){const e=void 0!==this.$scopedSlots.item?this.$scopedSlots.item:e=>{const i=e.cols.map(e=>t("div",{staticClass:"q-table__grid-item-row"},[t("div",{staticClass:"q-table__grid-item-title"},[e.label]),t("div",{staticClass:"q-table__grid-item-value"},[e.value])]));if(!0===this.hasSelectionMode){const s=this.$scopedSlots["body-selection"],o=void 0!==s?s(e):[t(so,{props:{value:e.selected,color:this.color,dark:this.dark,dense:this.dense},on:{input:(t,i)=>{this.__updateSelection([e.key],[e.row],t,i)}}})];i.unshift(t("div",{staticClass:"q-table__grid-item-row"},o),t(Tr,{props:{dark:this.dark}}))}const s={staticClass:"q-table__grid-item-card"+this.cardDefaultClass,class:this.cardClass,style:this.cardStyle,on:{}};return void 0===this.qListeners["row-click"]&&void 0===this.qListeners["row-dblclick"]||(s.staticClass+=" cursor-pointer"),void 0!==this.qListeners["row-click"]&&(s.on.click=(t=>{this.$emit("row-click",t,e.row,e.pageIndex)})),void 0!==this.qListeners["row-dblclick"]&&(s.on.dblclick=(t=>{this.$emit("row-dblclick",t,e.row,e.pageIndex)})),t("div",{staticClass:"q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3",class:!0===e.selected?"q-table__grid-item--selected":""},[t("div",s,i)])};return t("div",{staticClass:"q-table__grid-content row",class:this.cardContainerClass,style:this.cardContainerStyle},this.computedRows.map((t,i)=>e(this.__getBodyScope({key:this.getRowKey(t),row:t,pageIndex:i}))))}}};function ih(t,e,i){return t("div",{...e,staticClass:"q-table__middle"+(void 0!==e.staticClass?" "+e.staticClass:"")},[t("table",{staticClass:"q-table"},i)])}const sh={list:hr,table:wa};var oh=e.default.extend({name:"QVirtualScroll",mixins:[At,Ht,dl],props:{type:{type:String,default:"list",validator:t=>["list","table","__qtable"].includes(t)},items:{type:Array,default:()=>[]},itemsFn:Function,itemsSize:Number,scrollTarget:{default:void 0}},computed:{virtualScrollLength(){return this.itemsSize>=0&&void 0!==this.itemsFn?parseInt(this.itemsSize,10):Array.isArray(this.items)?this.items.length:0},virtualScrollScope(){if(0===this.virtualScrollLength)return[];const t=(t,e)=>({index:this.virtualScrollSliceRange.from+e,item:t});return void 0===this.itemsFn?this.items.slice(this.virtualScrollSliceRange.from,this.virtualScrollSliceRange.to).map(t):this.itemsFn(this.virtualScrollSliceRange.from,this.virtualScrollSliceRange.to-this.virtualScrollSliceRange.from).map(t)},classes(){return"q-virtual-scroll q-virtual-scroll"+(!0===this.virtualScrollHorizontal?"--horizontal":"--vertical")+(void 0!==this.scrollTarget?"":" scroll")},attrs(){return void 0!==this.scrollTarget?void 0:{tabindex:0}}},watch:{virtualScrollLength(){this.__resetVirtualScroll()},scrollTarget(){this.__unconfigureScrollTarget(),this.__configureScrollTarget()}},methods:{__getVirtualScrollEl(){return this.$el},__getVirtualScrollTarget(){return this.__scrollTarget},__configureScrollTarget(){this.__scrollTarget=Fi(this.$el,this.scrollTarget),this.__scrollTarget.addEventListener("scroll",this.__onVirtualScrollEvt,u.passive)},__unconfigureScrollTarget(){void 0!==this.__scrollTarget&&(this.__scrollTarget.removeEventListener("scroll",this.__onVirtualScrollEvt,u.passive),this.__scrollTarget=void 0)}},beforeMount(){this.__resetVirtualScroll()},mounted(){this.__configureScrollTarget()},activated(){this.__configureScrollTarget()},deactivated(){this.__unconfigureScrollTarget()},beforeDestroy(){this.__unconfigureScrollTarget()},render(t){if(void 0===this.$scopedSlots.default)return void console.error("QVirtualScroll: default scoped slot is required for rendering",this);let e=this.__padVirtualScroll(t,"list"===this.type?"div":"tbody",this.virtualScrollScope.map(this.$scopedSlots.default));return void 0!==this.$scopedSlots.before&&(e=this.$scopedSlots.before().concat(e)),e=Wt(e,this,"after"),"__qtable"===this.type?ih(t,{staticClass:this.classes},e):t(sh[this.type],{class:this.classes,attrs:this.attrs,props:this.qAttrs,on:{...this.qListeners}},e)}});var nh={props:{sortMethod:{type:Function,default(t,e,i){const s=this.colList.find(t=>t.name===e);if(void 0===s||void 0===s.field)return t;const o=!0===i?-1:1,n="function"==typeof s.field?t=>s.field(t):t=>t[s.field];return t.sort((t,e)=>{let i=n(t),r=n(e);return null===i||void 0===i?-1*o:null===r||void 0===r?1*o:void 0!==s.sort?s.sort(i,r,t,e)*o:!0===Ps(i)&&!0===Ps(r)?(i-r)*o:!0===As(i)&&!0===As(r)?(e=r,(new Date(i)-new Date(e))*o):"boolean"==typeof i&&"boolean"==typeof r?(i-r)*o:([i,r]=[i,r].map(t=>(t+"").toLocaleString().toLowerCase()),i"ad"===t||"da"===t,default:"ad"}},computed:{columnToSort(){const{sortBy:t}=this.computedPagination;if(t)return this.colList.find(e=>e.name===t)||null}},methods:{sort(t){let e=this.columnSortOrder;if(!0===Es(t))t.sortOrder&&(e=t.sortOrder),t=t.name;else{const i=this.colList.find(e=>e.name===t);void 0!==i&&i.sortOrder&&(e=i.sortOrder)}let{sortBy:i,descending:s}=this.computedPagination;i!==t?(i=t,s="da"===e):!0===this.binaryStateSort?s=!s:!0===s?"ad"===e?i=null:s=!1:"ad"===e?s=!0:i=null,this.setPagination({sortBy:i,descending:s,page:1})}}},rh={props:{filter:[String,Object],filterMethod:{type:Function,default(t,e,i=this.computedCols,s=this.getCellValue){const o=e?e.toLowerCase():"";return t.filter(t=>i.some(e=>{const i=s(e,t)+"";return-1!==("undefined"===i||"null"===i?"":i.toLowerCase()).indexOf(o)}))}}},watch:{filter:{handler(){this.$nextTick(()=>{this.setPagination({page:1},!0)})},deep:!0}}};function ah(t){return t.page<1&&(t.page=1),void 0!==t.rowsPerPage&&t.rowsPerPage<1&&(t.rowsPerPage=0),t}var lh={props:{pagination:Object,rowsPerPageOptions:{type:Array,default:()=>[5,7,10,15,20,25,50,0]}},computed:{computedPagination(){return ah(void 0!==this.qListeners["update:pagination"]?{...this.innerPagination,...this.pagination}:this.innerPagination)},firstRowIndex(){const{page:t,rowsPerPage:e}=this.computedPagination;return(t-1)*e},lastRowIndex(){const{page:t,rowsPerPage:e}=this.computedPagination;return t*e},isFirstPage(){return 1===this.computedPagination.page},pagesNumber(){return 0===this.computedPagination.rowsPerPage?1:Math.max(1,Math.ceil(this.computedRowsNumber/this.computedPagination.rowsPerPage))},isLastPage(){return 0===this.lastRowIndex||this.computedPagination.page>=this.pagesNumber},computedRowsPerPageOptions(){return(this.rowsPerPageOptions.includes(this.innerPagination.rowsPerPage)?this.rowsPerPageOptions:[this.innerPagination.rowsPerPage].concat(this.rowsPerPageOptions)).map(t=>({label:0===t?this.$q.lang.table.allRows:""+t,value:t}))}},watch:{pagesNumber(t,e){if(t===e)return;const i=this.computedPagination.page;t&&!i?this.setPagination({page:1}):t1&&this.setPagination({page:t-1})},nextPage(){const{page:t,rowsPerPage:e}=this.computedPagination;this.lastRowIndex>0&&t*e["single","multiple","none"].includes(t)},selected:{type:Array,default:()=>[]}},computed:{selectedKeys(){const t={};return this.selected.map(this.getRowKey).forEach(e=>{t[e]=!0}),t},hasSelectionMode(){return"none"!==this.selection},singleSelection(){return"single"===this.selection},multipleSelection(){return"multiple"===this.selection},allRowsSelected(){return this.computedRows.length>0&&this.computedRows.every(t=>!0===this.selectedKeys[this.getRowKey(t)])},someRowsSelected(){return!0!==this.allRowsSelected&&this.computedRows.some(t=>!0===this.selectedKeys[this.getRowKey(t)])},rowsSelectedNumber(){return this.selected.length}},methods:{isRowSelected(t){return!0===this.selectedKeys[t]},clearSelection(){this.$emit("update:selected",[])},__updateSelection(t,e,i,s){this.$emit("selection",{rows:e,added:i,keys:t,evt:s});const o=!0===this.singleSelection?!0===i?e:[]:!0===i?this.selected.concat(e):this.selected.filter(e=>!1===t.includes(this.getRowKey(e)));this.$emit("update:selected",o)}}};function dh(t){return Array.isArray(t)?t.slice():[]}var ch={props:{expanded:Array},data(){return{innerExpanded:dh(this.expanded)}},watch:{expanded(t){this.innerExpanded=dh(t)}},methods:{isRowExpanded(t){return this.innerExpanded.includes(t)},setExpanded(t){void 0!==this.expanded?this.$emit("update:expanded",t):this.innerExpanded=t},__updateExpanded(t,e){const i=this.innerExpanded.slice(),s=i.indexOf(t);!0===e?-1===s&&(i.push(t),this.setExpanded(i)):-1!==s&&(i.splice(s,1),this.setExpanded(i))}}},uh={props:{visibleColumns:Array},computed:{colList(){if(void 0!==this.columns)return this.columns;const t=this.data[0];return void 0!==t?Object.keys(t).map(e=>({name:e,label:e.toUpperCase(),field:e,align:Ps(t[e])?"right":"left",sortable:!0})):[]},computedCols(){const{sortBy:t,descending:e}=this.computedPagination;return(void 0!==this.visibleColumns?this.colList.filter(t=>!0===t.required||!0===this.visibleColumns.includes(t.name)):this.colList).map(i=>{const s=i.align||"right",o=`text-${s}`;return{...i,align:s,__iconClass:`q-table__sort-icon q-table__sort-icon--${s}`,__thClass:o+(void 0!==i.headerClasses?" "+i.headerClasses:"")+(!0===i.sortable?" sortable":"")+(i.name===t?` sorted ${!0===e?"sort-desc":""}`:""),__tdStyle:void 0!==i.style?"function"!=typeof i.style?()=>i.style:i.style:()=>null,__tdClass:void 0!==i.classes?"function"!=typeof i.classes?()=>o+" "+i.classes:t=>o+" "+i.classes(t):()=>o}})},computedColsMap(){const t={};return this.computedCols.forEach(e=>{t[e.name]=e}),t},computedColspan(){return void 0!==this.tableColspan?this.tableColspan:this.computedCols.length+(!0===this.hasSelectionMode?1:0)}}};const ph={};hl.forEach(t=>{ph[t]={}});var mh=e.default.extend({name:"QTable",mixins:[ce,Ht,Ks,Kl,Xl,Zl,th,eh,nh,rh,lh,hh,ch,uh],props:{data:{type:Array,default:()=>[]},rowKey:{type:[String,Function],default:"id"},columns:Array,loading:Boolean,binaryStateSort:Boolean,iconFirstPage:String,iconPrevPage:String,iconNextPage:String,iconLastPage:String,title:String,hideHeader:Boolean,grid:Boolean,gridHeader:Boolean,dense:Boolean,flat:Boolean,bordered:Boolean,square:Boolean,separator:{type:String,default:"horizontal",validator:t=>["horizontal","vertical","cell","none"].includes(t)},wrapCells:Boolean,virtualScroll:Boolean,...ph,noDataLabel:String,noResultsLabel:String,loadingLabel:String,selectedRowsLabel:Function,rowsPerPageLabel:String,paginationLabel:Function,color:{type:String,default:"grey-8"},titleClass:[String,Array,Object],tableStyle:[String,Array,Object],tableClass:[String,Array,Object],tableHeaderStyle:[String,Array,Object],tableHeaderClass:[String,Array,Object],cardContainerClass:[String,Array,Object],cardContainerStyle:[String,Array,Object],cardStyle:[String,Array,Object],cardClass:[String,Array,Object]},data(){return{innerPagination:Object.assign({sortBy:null,descending:!1,page:1,rowsPerPage:this.rowsPerPageOptions.length>0?this.rowsPerPageOptions[0]:5},this.pagination)}},watch:{needsReset(){!0===this.hasVirtScroll&&void 0!==this.$refs.virtScroll&&this.$refs.virtScroll.reset()}},computed:{getRowKey(){return"function"==typeof this.rowKey?this.rowKey:t=>t[this.rowKey]},hasVirtScroll(){return!0!==this.grid&&!0===this.virtualScroll},needsReset(){return["tableStyle","tableClass","tableHeaderStyle","tableHeaderClass","__containerClass"].map(t=>this[t]).join(";")},filteredSortedRows(){let t=this.data;if(!0===this.isServerSide||0===t.length)return t;const{sortBy:e,descending:i}=this.computedPagination;return this.filter&&(t=this.filterMethod(t,this.filter,this.computedCols,this.getCellValue)),void 0!==this.columnToSort&&(t=this.sortMethod(this.data===t?t.slice():t,e,i)),t},filteredSortedRowsNumber(){return this.filteredSortedRows.length},computedRows(){let t=this.filteredSortedRows;if(!0===this.isServerSide)return t;const{rowsPerPage:e}=this.computedPagination;return 0!==e&&(0===this.firstRowIndex&&this.data!==t?t.length>this.lastRowIndex&&(t=t.slice(0,this.lastRowIndex)):t=t.slice(this.firstRowIndex,this.lastRowIndex)),t},computedRowsNumber(){return!0===this.isServerSide?this.computedPagination.rowsNumber||0:this.filteredSortedRowsNumber},nothingToDisplay(){return 0===this.computedRows.length},isServerSide(){return void 0!==this.computedPagination.rowsNumber},cardDefaultClass(){return" q-table__card"+` q-table__card--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.square?" q-table--square":"")+(!0===this.flat?" q-table--flat":"")+(!0===this.bordered?" q-table--bordered":"")},__containerClass(){return`q-table__container q-table--${this.separator}-separator column no-wrap`+(!0===this.grid?" q-table--grid":this.cardDefaultClass)+` q-table--${this.darkSuffix}`+(!0===this.dense?" q-table--dense":"")+(!1===this.wrapCells?" q-table--no-wrap":"")+(!0===this.inFullscreen?" fullscreen scroll":"")},containerClass(){return this.__containerClass+(!0===this.loading?" q-table--loading":"")},virtProps(){const t={};return hl.forEach(e=>{t[e]=this[e]}),void 0===t.virtualScrollItemSize&&(t.virtualScrollItemSize=!0===this.dense?28:48),t}},render(t){const e=[this.__getTopDiv(t)],i={staticClass:this.containerClass};return!0===this.grid?e.push(this.__getGridHeader(t)):Object.assign(i,{class:this.cardClass,style:this.cardStyle}),e.push(this.__getBody(t),this.__getBottomDiv(t)),!0===this.loading&&void 0!==this.$scopedSlots.loading&&e.push(this.$scopedSlots.loading()),t("div",i,e)},methods:{requestServerInteraction(t={}){this.$nextTick(()=>{this.$emit("request",{pagination:t.pagination||this.computedPagination,filter:t.filter||this.filter,getCellValue:this.getCellValue})})},resetVirtualScroll(){!0===this.hasVirtScroll&&this.$refs.virtScroll.reset()},__getBody(t){if(!0===this.grid)return this.__getGridBody(t);const e=!0!==this.hideHeader?this.__getTHead(t):null;if(!0===this.hasVirtScroll){const i=this.$scopedSlots["top-row"],s=this.$scopedSlots["bottom-row"],o={default:this.__getVirtualTBodyTR(t)};if(void 0!==i){const s=t("tbody",i({cols:this.computedCols}));o.before=null===e?()=>[s]:()=>[e].concat(s)}else null!==e&&(o.before=(()=>e));return void 0!==s&&(o.after=(()=>t("tbody",s({cols:this.computedCols})))),t(oh,{key:"vs",ref:"virtScroll",props:{...this.virtProps,items:this.computedRows,type:"__qtable",tableColspan:this.computedColspan},on:$t(this,"vs",{"virtual-scroll":this.__onVScroll}),class:this.tableClass,style:this.tableStyle,scopedSlots:o})}return ih(t,{staticClass:"scroll",class:this.tableClass,style:this.tableStyle},[e,this.__getTBody(t)])},scrollTo(t,e){if(void 0!==this.$refs.virtScroll)return void this.$refs.virtScroll.scrollTo(t,e);t=parseInt(t,10);const i=this.$el.querySelector(`tbody tr:nth-of-type(${t+1})`);if(null!==i){const e=this.$el.querySelector(".q-table__middle.scroll"),s=i.offsetTop-this.virtualScrollStickySizeStart,o=s/^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(t)},options:Function,hourOptions:Array,minuteOptions:Array,secondOptions:Array,withSeconds:Boolean,nowBtn:Boolean},data(){const t=xn(this.value,this.__getMask(),this.__getLocale(),this.calendar,this.__getDefaultDateModel());let e="Hour";return null!==t.hour&&(null===t.minute?e="Minute":!0===this.withSeconds&&null===t.second&&(e="Second")),{view:e,isAM:null===t.hour||t.hour<12,innerModel:t}},watch:{value(t){const e=xn(t,this.computedMask,this.computedLocale,this.calendar,this.defaultDateModel);e.dateHash===this.innerModel.dateHash&&e.timeHash===this.innerModel.timeHash||(this.innerModel=e,null===e.hour?this.__goToView("Hour"):(this.isAM=e.hour<12,null===e.minute&&"Second"===this.view&&this.__goToView("Minute")))},computedMask(){this.$nextTick(()=>{this.__updateValue()})},computedLocale(){this.$nextTick(()=>{this.__updateValue()})}},computed:{classes(){return`q-time q-time--${!0===this.landscape?"landscape":"portrait"}`+` q-time--${this.darkSuffix} q-${this.darkSuffix}`+(!0===this.disable?" disabled":!0===this.readonly?" q-time--readonly":"")+(!0===this.bordered?" q-time--bordered":"")+(!0===this.square?" q-time--square no-border-radius":"")+(!0===this.flat?" q-time--flat no-shadow":"")+" q-key-group-navigation--ignore-key"},stringModel(){const t=this.innerModel;return{hour:null===t.hour?"--":!0===this.computedFormat24h?kt(t.hour):String(!0===this.isAM?0===t.hour?12:t.hour:t.hour>12?t.hour-12:t.hour),minute:null===t.minute?"--":kt(t.minute),second:null===t.second?"--":kt(t.second)}},defaultDateModel(){return this.__getDefaultDateModel()},computedFormat24h(){return null!==this.format24h?this.format24h:this.$q.lang.date.format24h},pointerStyle(){const t="Hour"===this.view,e=!0===t?12:60,i=this.innerModel[this.view.toLowerCase()];let s=`rotate(${Math.round(i*(360/e))-180}deg) translateX(-50%)`;return!0===t&&!0===this.computedFormat24h&&this.innerModel.hour>=12&&(s+=" scale(.7)"),{transform:s}},minLink(){return null!==this.innerModel.hour},secLink(){return!0===this.minLink&&null!==this.innerModel.minute},hourInSelection(){return void 0!==this.hourOptions?t=>this.hourOptions.includes(t):void 0!==this.options?t=>this.options(t,null,null):void 0},minuteInSelection(){return void 0!==this.minuteOptions?t=>this.minuteOptions.includes(t):void 0!==this.options?t=>this.options(this.innerModel.hour,t,null):void 0},secondInSelection(){return void 0!==this.secondOptions?t=>this.secondOptions.includes(t):void 0!==this.options?t=>this.options(this.innerModel.hour,this.innerModel.minute,t):void 0},validHours(){if(void 0!==this.hourInSelection){const t=this.__getValidValues(0,11,this.hourInSelection),e=this.__getValidValues(12,11,this.hourInSelection);return{am:t,pm:e,values:t.values.concat(e.values)}}},validMinutes(){if(void 0!==this.minuteInSelection)return this.__getValidValues(0,59,this.minuteInSelection)},validSeconds(){if(void 0!==this.secondInSelection)return this.__getValidValues(0,59,this.secondInSelection)},viewValidOptions(){switch(this.view){case"Hour":return this.validHours;case"Minute":return this.validMinutes;case"Second":return this.validSeconds}},positions(){let t,e,i=0,s=1;const o=void 0!==this.viewValidOptions?this.viewValidOptions.values:void 0;"Hour"===this.view?!0===this.computedFormat24h?(t=0,e=23):(t=0,e=11,!1===this.isAM&&(i=12)):(t=0,e=55,s=5);const n=[];for(let r=t,a=t;r<=e;r+=s,a++){const t=r+i,e=void 0!==o&&!1===o.includes(t),s="Hour"===this.view&&0===r?!0===this.computedFormat24h?"00":"12":r;n.push({val:t,index:a,disable:e,label:s})}return n}},methods:{setNow(){const t=xn(this.__updateValue({...this.__getCurrentDate(),...this.__getCurrentTime()}),this.computedMask,this.computedLocale,this.calendar,this.defaultDateModel);this.innerModel=t,this.isAM=t.hour<12,this.__goToView("Hour")},__getValidValues(t,e,i){const s=Array.apply(null,{length:e+1}).map((e,s)=>{const o=s+t;return{index:o,val:!0===i(o)}}).filter(t=>!0===t.val).map(t=>t.index);return{min:s[0],max:s[s.length-1],values:s,threshold:e+1}},__getWheelDist(t,e,i){const s=Math.abs(t-e);return Math.min(s,i-s)},__getNormalizedClockValue(t,{min:e,max:i,values:s,threshold:o}){if(t===e)return e;if(ti)return this.__getWheelDist(t,e,o)<=this.__getWheelDist(t,i,o)?e:i;const n=s.findIndex(e=>t<=e),r=s[n-1],a=s[n];return t-r<=a-t?r:a},__getMask(){return"persian"!==this.calendar&&null!==this.mask?this.mask:`HH:mm${!0===this.withSeconds?":ss":""}`},__getDefaultDateModel(){if("string"!=typeof this.defaultDate){const t=this.__getCurrentDate(!0);return t.dateHash=this.__getDayHash(t),t}return xn(this.defaultDate,"YYYY/MM/DD",void 0,this.calendar)},__click(t){!0!==this.__shouldAbortInteraction()&&(!0!==this.$q.platform.is.desktop&&this.__updateClock(t,this.__getClockRect()),this.__goToNextView())},__activate(t){!0!==this.__shouldAbortInteraction()&&this.__updateClock(t,this.__getClockRect())},__shouldAbortInteraction(){return!0===this._isBeingDestroyed||!0===this._isDestroyed||void 0!==this.viewValidOptions&&(0===this.viewValidOptions.values.length||"Hour"===this.view&&!0!==this.computedFormat24h&&0===this.validHours[!0===this.isAM?"am":"pm"].values.length)},__getClockRect(){const t=this.$refs.clock,{top:e,left:i,width:s}=t.getBoundingClientRect(),o=s/2;return{top:e+o,left:i+o,dist:.7*o}},__goToView(t){this.view!==t&&(this.view=t),void 0!==this.$refs[t]&&this.$refs[t]!==document.activeElement&&this.$refs[t].focus()},__goToNextView(){"Hour"===this.view?this.__goToView("Minute"):this.withSeconds&&"Minute"===this.view?this.__goToView("Second"):this.__updateValue(void 0,!0)},__drag(t){!0!==this.__shouldAbortInteraction()&&(!0===t.isFinal?(this.draggingClockRect=!1,this.dragCache=null,this.__goToNextView()):!0===t.isFirst?(this.draggingClockRect=this.__getClockRect(),this.dragCache=this.__updateClock(t.evt,this.draggingClockRect)):this.dragCache=this.__updateClock(t.evt,this.draggingClockRect,this.dragCache))},__updateClock(t,e,i){const s=f(t),o=Math.abs(s.top-e.top),n=Math.sqrt(Math.pow(Math.abs(s.top-e.top),2)+Math.pow(Math.abs(s.left-e.left),2));let r,a=Math.asin(o/n)*(180/Math.PI);if(a=s.top0&&this.validHours.pm.values.length>0?n>=e.dist:this.validHours.am.values.length>0;r=this.__getNormalizedClockValue(r+(!0===t?0:12),this.validHours[!0===t?"am":"pm"])}else r=Math.round(r),!0===this.computedFormat24h?n{this.view="Hour"},keydown:vh,keyup:this.__onKeyupHour})},[this.stringModel.hour]),t("div",[":"]),t("div",!0===this.minLink?{key:"vM",ref:"Minute",staticClass:"q-time__link",class:"Minute"===this.view?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex,"data-autofocus":"Minute"===this.view},on:$t(this,"vM",{focus:()=>{this.view="Minute"},keydown:vh,keyup:this.__onKeyupMinute})}:{staticClass:"q-time__link"},[this.stringModel.minute])];return!0===this.withSeconds&&e.push(t("div",[":"]),t("div",!0===this.secLink?{key:"vS",ref:"Second",staticClass:"q-time__link",class:"Second"===this.view?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex,"data-autofocus":"Second"===this.view},on:$t(this,"vS",{focus:()=>{this.view="Second"},keydown:vh,keyup:this.__onKeyupSecond})}:{staticClass:"q-time__link"},[this.stringModel.second])),t("div",{staticClass:"q-time__header flex flex-center no-wrap",class:this.headerClass},[t("div",{staticClass:"q-time__header-label row items-center no-wrap",attrs:{dir:"ltr"}},e),!1===this.computedFormat24h?t("div",{staticClass:"q-time__header-ampm column items-between no-wrap"},[t("div",{key:"AM",staticClass:"q-time__link",class:!0===this.isAM?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:$t(this,"AM",{click:this.__setAm,keyup:t=>{13===t.keyCode&&this.__setAm()}})},["AM"]),t("div",{key:"PM",staticClass:"q-time__link",class:!0!==this.isAM?"q-time__link--active":"cursor-pointer",attrs:{tabindex:this.computedTabindex},on:$t(this,"PM",{click:this.__setPm,keyup:t=>{13===t.keyCode&&this.__setPm()}})},["PM"])]):null])},__getClock(t){const e=this.view.toLowerCase(),i=this.innerModel[e];return t("div",{staticClass:"q-time__content col relative-position"},[t("transition",{props:{name:"q-transition--scale"}},[t("div",{key:"clock"+this.view,staticClass:"q-time__container-parent absolute-full"},[t("div",{ref:"clock",staticClass:"q-time__container-child fit overflow-hidden"},[t("div",{key:"click",staticClass:"q-time__clock cursor-pointer non-selectable",on:$t(this,"click",{click:this.__click,mousedown:this.__activate}),directives:$t(this,"touch",[{name:"touch-pan",value:this.__drag,modifiers:{stop:!0,prevent:!0,mouse:!0}}])},[t("div",{staticClass:"q-time__clock-circle fit"},[t("div",{staticClass:"q-time__clock-pointer",style:this.pointerStyle,class:null===this.innerModel[e]?"hidden":void 0!==this.color?`text-${this.color}`:""}),this.positions.map(e=>t("div",{staticClass:`q-time__clock-position row flex-center q-time__clock-pos-${e.index}`,class:e.val===i?this.headerClass.concat(" q-time__clock-position--active"):!0===e.disable?"q-time__clock-position--disabled":null},[t("span",[e.label])]))])])])])]),!0===this.nowBtn?t(Ze,{key:"now",staticClass:"q-time__now-button absolute",props:{icon:this.$q.iconSet.datetime.now,unelevated:!0,size:"sm",round:!0,color:this.color,textColor:this.textColor,tabindex:this.computedTabindex},on:$t(this,"now",{click:this.setNow})}):null])},__setHour(t){this.innerModel.hour!==t&&(this.innerModel.hour=t,this.__verifyAndUpdate())},__setMinute(t){this.innerModel.minute!==t&&(this.innerModel.minute=t,this.__verifyAndUpdate())},__setSecond(t){this.innerModel.second!==t&&(this.innerModel.second=t,this.__verifyAndUpdate())},__setAm(){!1===this.isAM&&(this.isAM=!0,null!==this.innerModel.hour&&(this.innerModel.hour-=12,this.__verifyAndUpdate()))},__setPm(){!0===this.isAM&&(this.isAM=!1,null!==this.innerModel.hour&&(this.innerModel.hour+=12,this.__verifyAndUpdate()))},__verifyAndUpdate(){return void 0!==this.hourInSelection&&!0!==this.hourInSelection(this.innerModel.hour)?(this.innerModel=xn(),void this.__goToView("Hour")):void 0!==this.minuteInSelection&&!0!==this.minuteInSelection(this.innerModel.minute)?(this.innerModel.minute=null,this.innerModel.second=null,void this.__goToView("Minute")):!0===this.withSeconds&&void 0!==this.secondInSelection&&!0!==this.secondInSelection(this.innerModel.second)?(this.innerModel.second=null,void this.__goToView("Second")):void(null===this.innerModel.hour||null===this.innerModel.minute||!0===this.withSeconds&&null===this.innerModel.second||this.__updateValue())},__updateValue(t,e){const i=Object.assign({...this.innerModel},t),s="persian"===this.calendar?kt(i.hour)+":"+kt(i.minute)+(!0===this.withSeconds?":"+kt(i.second):""):Bn(yn(i.year,null===i.month?null:i.month-1,i.day,i.hour,i.minute,i.second,i.millisecond),this.computedMask,this.computedLocale,i.year,i.timezoneOffset);return i.changed=s!==this.value,!0===e&&!0!==i.changed||this.$emit("input",s,i),!0===e&&this.$emit("change",s,i),s}},render(t){const e=[this.__getClock(t)],i=jt(this,"default");return void 0!==i&&e.push(t("div",{staticClass:"q-time__actions"},i)),void 0!==this.name&&!0!==this.disable&&this.__injectFormInput(e,"push"),t("div",{class:this.classes,on:{...this.qListeners},attrs:{tabindex:-1}},[this.__getHeader(t),t("div",{staticClass:"q-time__main col overflow-auto"},e)])}}),yh=e.default.extend({name:"QTimeline",mixins:[ce,Ht],provide(){return{__timeline:this}},props:{color:{type:String,default:"primary"},side:{type:String,default:"right",validator:t=>["left","right"].includes(t)},layout:{type:String,default:"dense",validator:t=>["dense","comfortable","loose"].includes(t)}},computed:{classes(){return`q-timeline--${this.layout} q-timeline--${this.layout}--${this.side}`+` q-timeline--${this.darkSuffix}`}},render(t){return t("ul",{staticClass:"q-timeline",class:this.classes,on:{...this.qListeners}},jt(this,"default"))}}),Sh=e.default.extend({name:"QTimelineEntry",inject:{__timeline:{default(){console.error("QTimelineEntry needs to be child of QTimeline")}}},mixins:[Ht],props:{heading:Boolean,tag:{type:String,default:"h3"},side:{type:String,default:"right",validator:t=>["left","right"].includes(t)},icon:String,avatar:String,color:String,title:String,subtitle:String,body:String},computed:{colorClass(){return`text-${this.color||this.__timeline.color}`},classes(){return`q-timeline__entry--${this.side}`+(void 0!==this.icon||void 0!==this.avatar?" q-timeline__entry--icon":"")},reverse(){return"comfortable"===this.__timeline.layout&&"left"===this.__timeline.side}},render(t){const e=Qt(this,"default",[]);if(void 0!==this.body&&e.unshift(this.body),!0===this.heading){const i=[t("div"),t("div"),t(this.tag,{staticClass:"q-timeline__heading-title"},e)];return t("div",{staticClass:"q-timeline__heading",on:{...this.qListeners}},!0===this.reverse?i.reverse():i)}let i;void 0!==this.icon?i=[t(le,{staticClass:"row items-center justify-center",props:{name:this.icon}})]:void 0!==this.avatar&&(i=[t("img",{staticClass:"q-timeline__dot-img",domProps:{src:this.avatar}})]);const s=[t("div",{staticClass:"q-timeline__subtitle"},[t("span",jt(this,"subtitle",[this.subtitle]))]),t("div",{staticClass:"q-timeline__dot",class:this.colorClass},i),t("div",{staticClass:"q-timeline__content"},[t("h6",{staticClass:"q-timeline__title"},jt(this,"title",[this.title]))].concat(e))];return t("li",{staticClass:"q-timeline__entry",class:this.classes,on:{...this.qListeners}},!0===this.reverse?s.reverse():s)}});const xh={role:"toolbar"};var wh=e.default.extend({name:"QToolbar",mixins:[Ht],props:{inset:Boolean},render(t){return t("div",{staticClass:"q-toolbar row no-wrap items-center",class:this.inset?"q-toolbar--inset":null,attrs:xh,on:{...this.qListeners}},jt(this,"default"))}}),Ch=e.default.extend({name:"QToolbarTitle",mixins:[Ht],props:{shrink:Boolean},computed:{classes(){return"q-toolbar__title ellipsis"+(!0===this.shrink?" col-shrink":"")}},render(t){return t("div",{class:this.classes,on:{...this.qListeners}},jt(this,"default"))}});const kh=["none","strict","leaf","leaf-filtered"];var qh=e.default.extend({name:"QTree",mixins:[ce],props:{nodes:{type:Array,required:!0},nodeKey:{type:String,required:!0},labelKey:{type:String,default:"label"},childrenKey:{type:String,default:"children"},dense:Boolean,color:String,controlColor:String,textColor:String,selectedColor:String,icon:String,tickStrategy:{type:String,default:"none",validator:t=>kh.includes(t)},ticked:Array,expanded:Array,selected:{},noSelectionUnset:Boolean,defaultExpandAll:Boolean,accordion:Boolean,filter:String,filterMethod:{type:Function,default(t,e){const i=e.toLowerCase();return t[this.labelKey]&&t[this.labelKey].toLowerCase().indexOf(i)>-1}},duration:Number,noConnectors:Boolean,noTransition:Boolean,noNodesLabel:String,noResultsLabel:String},computed:{classes(){return`q-tree q-tree--${!0===this.dense?"dense":"standard"}`+(!0===this.noConnectors?" q-tree--no-connectors":"")+` q-tree--${this.darkSuffix}`+(void 0!==this.color?` text-${this.color}`:"")},hasSelection(){return void 0!==this.selected},computedIcon(){return this.icon||this.$q.iconSet.tree.icon},computedControlColor(){return this.controlColor||this.color},textColorClass(){if(void 0!==this.textColor)return`text-${this.textColor}`},selectedColorClass(){const t=this.selectedColor||this.color;if(t)return`text-${t}`},meta(){const t=this.metaMap;t.clear();const e=(i,s)=>{const o=i.tickStrategy||(s?s.tickStrategy:this.tickStrategy),n=i[this.nodeKey],r=i[this.childrenKey]&&i[this.childrenKey].length>0,a=!0!==i.disabled&&!0===this.hasSelection&&!1!==i.selectable,l=!0!==i.disabled&&!1!==i.expandable,h="none"!==o,d="strict"===o,c="leaf-filtered"===o,u="leaf"===o||"leaf-filtered"===o;let p=!0!==i.disabled&&!1!==i.tickable;!0===u&&!0===p&&s&&!0!==s.tickable&&(p=!1);let m=i.lazy;!0===m&&void 0!==this.lazy[n]&&!0===Array.isArray(i[this.childrenKey])&&(m=this.lazy[n]);const g={key:n,parent:s,isParent:r,lazy:m,disabled:i.disabled,link:!0!==i.disabled&&(!0===a||!0===l&&(!0===r||!0===m)),children:[],matchesFilter:!this.filter||this.filterMethod(i,this.filter),selected:n===this.selected&&!0===a,selectable:a,expanded:!0===r&&this.innerExpanded.includes(n),expandable:l,noTick:!0===i.noTick||!0!==d&&m&&"loaded"!==m,tickable:p,tickStrategy:o,hasTicking:h,strictTicking:d,leafFilteredTicking:c,leafTicking:u,ticked:!0===d?this.innerTicked.includes(n):!0!==r&&this.innerTicked.includes(n)};if(!0===g.expanded&&!0!==this.renderedMap.has(n)&&this.renderedMap.set(n,!0),t.set(n,g),!0===r&&(g.children=i[this.childrenKey].map(t=>e(t,g)),this.filter&&(!0!==g.matchesFilter?g.matchesFilter=g.children.some(t=>t.matchesFilter):!0!==g.noTick&&!0!==g.disabled&&!0===g.tickable&&!0===c&&!0===g.children.every(t=>!0!==t.matchesFilter||!0===t.noTick||!0!==t.tickable)&&(g.tickable=!1)),!0===g.matchesFilter&&(!0!==g.noTick&&!0!==d&&!0===g.children.every(t=>t.noTick)&&(g.noTick=!0),u))){if(g.ticked=!1,g.indeterminate=g.children.some(t=>!0===t.indeterminate),g.tickable=!0===g.tickable&&g.children.some(t=>t.tickable),!0!==g.indeterminate){const t=g.children.reduce((t,e)=>!0===e.ticked?t+1:t,0);t===g.children.length?g.ticked=!0:t>0&&(g.indeterminate=!0)}!0===g.indeterminate&&(g.indeterminateNextState=g.children.every(t=>!0!==t.tickable||!0!==t.ticked))}return g};return this.nodes.forEach(t=>e(t,null)),t}},data(){return{lazy:{},innerTicked:this.ticked||[],innerExpanded:this.expanded||[]}},watch:{ticked(t){this.innerTicked=t},expanded(t){this.innerExpanded=t}},methods:{getNodeByKey(t){const e=[].reduce,i=(s,o)=>s||!o?s:!0===Array.isArray(o)?e.call(Object(o),i,s):o[this.nodeKey]===t?o:o[this.childrenKey]?i(null,o[this.childrenKey]):void 0;return i(null,this.nodes)},getTickedNodes(){return this.innerTicked.map(t=>this.getNodeByKey(t))},getExpandedNodes(){return this.innerExpanded.map(t=>this.getNodeByKey(t))},isExpanded(t){const e=this.meta.get(t);return void 0!==e&&e.expanded},collapseAll(){void 0!==this.expanded?this.$emit("update:expanded",[]):this.innerExpanded=[]},expandAll(){const t=this.innerExpanded,e=i=>{i[this.childrenKey]&&i[this.childrenKey].length>0&&!1!==i.expandable&&!0!==i.disabled&&(t.push(i[this.nodeKey]),i[this.childrenKey].forEach(e))};this.nodes.forEach(e),void 0!==this.expanded?this.$emit("update:expanded",t):this.innerExpanded=t},setExpanded(t,e,i=this.getNodeByKey(t),s=this.meta.get(t)){if(s.lazy&&"loaded"!==s.lazy){if("loading"===s.lazy)return;this.$set(this.lazy,t,"loading"),!0!==Array.isArray(i[this.childrenKey])&&this.$set(i,this.childrenKey,[]),this.$emit("lazy-load",{node:i,key:t,done:e=>{this.lazy[t]="loaded",this.$set(i,this.childrenKey,!0===Array.isArray(e)?e:[]),this.$nextTick(()=>{const e=this.meta.get(t);void 0!==e&&!0===e.isParent&&this.__setExpanded(t,!0)})},fail:()=>{this.$delete(this.lazy,t),0===i[this.childrenKey].length&&this.$delete(i,this.childrenKey)}})}else!0===s.isParent&&!0===s.expandable&&this.__setExpanded(t,e)},__setExpanded(t,e){let i=this.innerExpanded;const s=void 0!==this.expanded;if(!0===s&&(i=i.slice()),e){if(this.accordion){const e=this.meta.get(t);if(void 0!==e){const s=[];e.parent?e.parent.children.forEach(e=>{e.key!==t&&!0===e.expandable&&s.push(e.key)}):this.nodes.forEach(e=>{const i=e[this.nodeKey];i!==t&&s.push(i)}),s.length>0&&(i=i.filter(t=>!1===s.includes(t)))}}i=i.concat([t]).filter((t,e,i)=>i.indexOf(t)===e)}else i=i.filter(e=>e!==t);!0===s?this.$emit("update:expanded",i):this.innerExpanded=i},isTicked(t){const e=this.meta.get(t);return void 0!==e&&e.ticked},setTicked(t,e){let i=this.innerTicked;const s=void 0!==this.ticked;!0===s&&(i=i.slice()),i=e?i.concat(t).filter((t,e,i)=>i.indexOf(t)===e):i.filter(e=>!1===t.includes(e)),!0===s&&this.$emit("update:ticked",i)},__getSlotScope(t,e,i){const s={tree:this,node:t,key:i,color:this.color,dark:this.dark};return Mo(s,"expanded",()=>e.expanded,t=>{t!==e.expanded&&this.setExpanded(i,t)}),Mo(s,"ticked",()=>e.ticked,t=>{t!==e.ticked&&this.setTicked([i],t)}),s},__getChildren(t,e){return(this.filter?e.filter(t=>this.meta.get(t[this.nodeKey]).matchesFilter):e).map(e=>this.__getNode(t,e))},__getNodeMedia(t,e){if(void 0!==e.icon)return t(le,{staticClass:"q-tree__icon q-mr-sm",props:{name:e.icon,color:e.iconColor}});const i=e.img||e.avatar;return i?t("img",{staticClass:`q-tree__${e.img?"img":"avatar"} q-mr-sm`,attrs:{src:i}}):void 0},__getNode(t,e){const i=e[this.nodeKey],s=this.meta.get(i),o=e.header&&this.$scopedSlots[`header-${e.header}`]||this.$scopedSlots["default-header"],n=!0===s.isParent?this.__getChildren(t,e[this.childrenKey]):[],r=n.length>0||s.lazy&&"loaded"!==s.lazy;let a=e.body&&this.$scopedSlots[`body-${e.body}`]||this.$scopedSlots["default-body"];const l=void 0!==o||void 0!==a?this.__getSlotScope(e,s,i):null;void 0!==a&&(a=t("div",{staticClass:"q-tree__node-body relative-position"},[t("div",{class:this.textColorClass},[a(l)])]));const h=()=>t("div",{staticClass:"q-tree__node-collapsible",class:this.textColorClass,directives:[{name:"show",value:s.expanded}]},!0===this.renderedMap.has(i)?[a,t("div",{staticClass:"q-tree__children",class:{"q-tree__node--disabled":s.disabled}},n)]:void 0);return t("div",{key:i,staticClass:"q-tree__node relative-position",class:{"q-tree__node--parent":r,"q-tree__node--child":!0!==r}},[t("div",{staticClass:"q-tree__node-header relative-position row no-wrap items-center",class:{"q-tree__node--link q-hoverable q-focusable":s.link,"q-tree__node--selected":s.selected,"q-tree__node--disabled":s.disabled},attrs:{tabindex:s.link?0:-1},on:{click:t=>{this.__onClick(e,s,t)},keypress:t=>{!0!==Pe(t)&&(13===t.keyCode?this.__onClick(e,s,t,!0):32===t.keyCode&&this.__onExpandClick(e,s,t,!0))}}},[t("div",{staticClass:"q-focus-helper",attrs:{tabindex:-1},ref:`blurTarget_${s.key}`}),"loading"===s.lazy?t($e,{staticClass:"q-tree__spinner",props:{color:this.computedControlColor}}):!0===r?t(le,{staticClass:"q-tree__arrow",class:{"q-tree__arrow--rotate":s.expanded},props:{name:this.computedIcon},on:{click:t=>{this.__onExpandClick(e,s,t)}}}):null,!0===s.hasTicking&&!0!==s.noTick?t(so,{staticClass:"q-tree__tickbox",props:{value:!0===s.indeterminate?null:s.ticked,color:this.computedControlColor,dark:this.dark,dense:!0,keepColor:!0,disable:!0!==s.tickable},on:{keydown:w,input:t=>{this.__onTickedClick(s,t)}}}):null,t("div",{staticClass:"q-tree__node-header-content col row no-wrap items-center",class:s.selected?this.selectedColorClass:this.textColorClass},[o?o(l):[this.__getNodeMedia(t,e),t("div",e[this.labelKey])]])]),!0===r?!0===this.noTransition?h():t(kr,{key:"slide",props:{duration:this.duration},on:$t(this,"slide",{show:()=>{this.$emit("after-show")},hide:()=>{this.$emit("after-hide")}})},[h()]):!0===this.renderedMap.has(i)?a:void 0])},__blur(t){const e=this.$refs[`blurTarget_${t}`];void 0!==e&&e.focus()},__onClick(t,e,i,s){!0!==s&&this.__blur(e.key),this.hasSelection&&e.selectable?!1===this.noSelectionUnset?this.$emit("update:selected",e.key!==this.selected?e.key:null):e.key!==this.selected&&this.$emit("update:selected",void 0===e.key?null:e.key):this.__onExpandClick(t,e,i,s),"function"==typeof t.handler&&t.handler(t)},__onExpandClick(t,e,i,s){void 0!==i&&w(i),!0!==s&&this.__blur(e.key),this.setExpanded(e.key,!0!==e.expanded,t,e)},__onTickedClick(t,e){if(!0===t.indeterminate&&(e=t.indeterminateNextState),t.strictTicking)this.setTicked([t.key],e);else if(t.leafTicking){const i=[],s=t=>{t.isParent?(!0!==e&&!0!==t.noTick&&!0===t.tickable&&i.push(t.key),!0===t.leafTicking&&t.children.forEach(s)):!0===t.noTick||!0!==t.tickable||!0===t.leafFilteredTicking&&!0!==t.matchesFilter||i.push(t.key)};s(t),this.setTicked(i,e)}}},render(t){const e=this.__getChildren(t,this.nodes);return t("div",{class:this.classes},0===e.length?this.filter?this.noResultsLabel||this.$q.lang.tree.noResults:this.noNodesLabel||this.$q.lang.tree.noNodes:e)},created(){this.renderedMap=new Map,this.metaMap=new Map,!0===this.defaultExpandAll&&this.expandAll()},beforeDestroy(){this.renderedMap.clear(),this.renderedMap=void 0,this.metaMap.clear(),this.metaMap=void 0}}),$h=e.default.extend({name:"QUploaderBase",mixins:[ce,Ur],props:{label:String,color:String,textColor:String,square:Boolean,flat:Boolean,bordered:Boolean,noThumbnails:Boolean,autoUpload:Boolean,hideUploadBtn:Boolean,disable:Boolean,readonly:Boolean},provide(){return{__qUploaderGetInput:this.__getInputControl}},data:()=>({files:[],queuedFiles:[],uploadedFiles:[],dnd:!1,expanded:!1,uploadSize:0,uploadedSize:0}),watch:{isUploading(t,e){!1===e&&!0===t?this.$emit("start"):!0===e&&!1===t&&this.$emit("finish")}},computed:{canUpload(){return!0===this.editable&&!0!==this.isBusy&&!0!==this.isUploading&&this.queuedFiles.length>0},canAddFiles(){return!0===this.editable&&!0!==this.isUploading&&(!0===this.multiple||0===this.queuedFiles.length)&&(void 0===this.maxFiles||this.files.length{this.uploadedFiles=[]})},removeQueuedFiles(){this.__removeFiles(["idle","failed"],({size:t})=>{this.uploadSize-=t,this.queuedFiles=[]})},__removeFiles(t,e){if(!0===this.disable)return;const i={files:[],size:0},s=this.files.filter(e=>-1===t.indexOf(e.__status)||(i.size+=e.size,i.files.push(e),void 0!==e.__img&&window.URL.revokeObjectURL(e.__img.src),!1));i.files.length>0&&(this.files=s,void 0!==e&&e(i),this.$emit("removed",i.files))},removeFile(t){this.disable||("uploaded"===t.__status?this.uploadedFiles=this.uploadedFiles.filter(e=>e.__key!==t.__key):"uploading"===t.__status?t.__abort():this.uploadSize-=t.size,this.files=this.files.filter(e=>e.__key!==t.__key||(void 0!==e.__img&&window.URL.revokeObjectURL(e.__img.src),!1)),this.queuedFiles=this.queuedFiles.filter(e=>e.__key!==t.__key),this.$emit("removed",[t]))},__revokeImgURLs(){this.files.forEach(t=>{void 0!==t.__img&&window.URL.revokeObjectURL(t.__img.src)})},__getFileInput(){return this.$refs.input||this.$el.getElementsByClassName("q-uploader__input")[0]},__getProgressLabel:t=>(100*t).toFixed(2)+"%",__updateFile(t,e,i){if(t.__status=e,"idle"===e)return t.__uploaded=0,t.__progress=0,t.__sizeLabel=St(t.size),void(t.__progressLabel="0.00%");"failed"!==e?(t.__uploaded="uploaded"===e?t.size:i,t.__progress="uploaded"===e?1:Math.min(.9999,t.__uploaded/t.size),t.__progressLabel=this.__getProgressLabel(t.__progress),this.$forceUpdate()):this.$forceUpdate()},__addFiles(t,e){const i=this.__processFiles(t,e,this.files,!0),s=this.__getFileInput();void 0!==s&&(s.value=""),void 0!==i&&(i.forEach(t=>{if(this.__updateFile(t,"idle"),this.uploadSize+=t.size,!0!==this.noThumbnails&&t.type.toUpperCase().startsWith("IMAGE")){const e=new Image;e.src=window.URL.createObjectURL(t),t.__img=e}}),this.files=this.files.concat(i),this.queuedFiles=this.queuedFiles.concat(i),this.$emit("added",i),!0===this.autoUpload&&this.upload())},__getBtn(t,e,i,s){if(!0===e)return t(Ze,{props:{type:"a",icon:this.$q.iconSet.uploader[i],flat:!0,dense:!0},on:{click:"add"===i?this.pickFiles:s}},"add"===i?this.__getInputControl(t):null)},__getInputControl(t){return[t("input",{key:"input",ref:"input",staticClass:"q-uploader__input overflow-hidden absolute-full",attrs:{tabindex:-1,type:"file",title:"",accept:this.accept,capture:this.capture,...!0===this.multiple?{multiple:!0}:{}},on:$t(this,"input",{mousedown:S,click:this.pickFiles,change:this.__addFiles})})]},__getHeader(t){return void 0!==this.$scopedSlots.header?this.$scopedSlots.header(this):[t("div",{staticClass:"q-uploader__header-content column"},[t("div",{staticClass:"flex flex-center no-wrap q-gutter-xs"},[this.__getBtn(t,this.queuedFiles.length>0,"removeQueue",this.removeQueuedFiles),this.__getBtn(t,this.uploadedFiles.length>0,"removeUploaded",this.removeUploadedFiles),!0===this.isUploading?t($e,{staticClass:"q-uploader__spinner"}):null,t("div",{staticClass:"col column justify-center"},[void 0!==this.label?t("div",{staticClass:"q-uploader__title"},[this.label]):null,t("div",{staticClass:"q-uploader__subtitle"},[this.uploadSizeLabel+" / "+this.uploadProgressLabel])]),this.__getBtn(t,this.canAddFiles,"add",this.pickFiles),this.__getBtn(t,!1===this.hideUploadBtn&&!0===this.canUpload,"upload",this.upload),this.__getBtn(t,this.isUploading,"clear",this.abort)])])]},__getList(t){return void 0!==this.$scopedSlots.list?this.$scopedSlots.list(this):this.files.map(e=>t("div",{key:e.__key,staticClass:"q-uploader__file relative-position",class:{"q-uploader__file--img":!0!==this.noThumbnails&&void 0!==e.__img,"q-uploader__file--failed":"failed"===e.__status,"q-uploader__file--uploaded":"uploaded"===e.__status},style:!0!==this.noThumbnails&&void 0!==e.__img?{backgroundImage:'url("'+e.__img.src+'")'}:null},[t("div",{staticClass:"q-uploader__file-header row flex-center no-wrap"},["failed"===e.__status?t(le,{staticClass:"q-uploader__file-status",props:{name:this.$q.iconSet.type.negative,color:"negative"}}):null,t("div",{staticClass:"q-uploader__file-header-content col"},[t("div",{staticClass:"q-uploader__title"},[e.name]),t("div",{staticClass:"q-uploader__subtitle row items-center no-wrap"},[e.__sizeLabel+" / "+e.__progressLabel])]),"uploading"===e.__status?t(ao,{props:{value:e.__progress,min:0,max:1,indeterminate:0===e.__progress}}):t(Ze,{props:{round:!0,dense:!0,flat:!0,icon:this.$q.iconSet.uploader["uploaded"===e.__status?"done":"clear"]},on:{click:()=>{this.removeFile(e)}}})])]))}},beforeDestroy(){!0===this.isUploading&&this.abort(),this.files.length>0&&this.__revokeImgURLs()},render(t){const e=[t("div",{staticClass:"q-uploader__header",class:this.colorClass},this.__getHeader(t)),t("div",{staticClass:"q-uploader__list scroll"},this.__getList(t)),this.__getDnd(t,"uploader")];return!0===this.isBusy&&e.push(t("div",{staticClass:"q-uploader__overlay absolute-full flex flex-center"},[t($e)])),t("div",{key:"drag",staticClass:"q-uploader column no-wrap",class:{[`q-uploader--${this.darkSuffix} q-${this.darkSuffix}`]:!0,"q-uploader--bordered":this.bordered,"q-uploader--square no-border-radius":this.square,"q-uploader--flat no-shadow":this.flat,"disabled q-uploader--disabled":this.disable,"q-uploader--dnd":this.dnd},on:!0===this.canAddFiles?$t(this,"drag",{dragover:this.__onDragOver,dragleave:this.__onDragLeave}):null},e)}});function Th(t){return"function"==typeof t?t:()=>t}var Mh={props:{url:[Function,String],method:{type:[Function,String],default:"POST"},fieldName:{type:[Function,String],default:t=>t.name},headers:[Function,Array],formFields:[Function,Array],withCredentials:[Function,Boolean],sendRaw:[Function,Boolean],batch:[Function,Boolean],factory:Function},data:()=>({xhrs:[],promises:[],workingThreads:0}),computed:{xhrProps(){return{url:Th(this.url),method:Th(this.method),headers:Th(this.headers),formFields:Th(this.formFields),fieldName:Th(this.fieldName),withCredentials:Th(this.withCredentials),sendRaw:Th(this.sendRaw),batch:Th(this.batch)}},isUploading(){return this.workingThreads>0},isBusy(){return this.promises.length>0}},methods:{abort(){this.xhrs.forEach(t=>{t.abort()}),this.promises.length>0&&(this.abortPromises=!0)},upload(){if(!1===this.canUpload)return;const t=this.queuedFiles.slice(0);this.queuedFiles=[],this.xhrProps.batch(t)?this.__runFactory(t):t.forEach(t=>{this.__runFactory([t])})},__runFactory(t){if(this.workingThreads++,"function"!=typeof this.factory)return void this.__uploadFiles(t,{});const e=this.factory(t);if(e)if("function"==typeof e.catch&&"function"==typeof e.then){this.promises.push(e);const i=i=>{!0!==this._isBeingDestroyed&&!0!==this._isDestroyed&&(this.promises=this.promises.filter(t=>t!==e),0===this.promises.length&&(this.abortPromises=!1),this.queuedFiles=this.queuedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"failed")}),this.$emit("factory-failed",i,t),this.workingThreads--)};e.then(s=>{!0===this.abortPromises?i(new Error("Aborted")):!0!==this._isBeingDestroyed&&!0!==this._isDestroyed&&(this.promises=this.promises.filter(t=>t!==e),this.__uploadFiles(t,s))}).catch(i)}else this.__uploadFiles(t,e||{});else this.$emit("factory-failed",new Error("QUploader: factory() does not return properly"),t),this.workingThreads--},__uploadFiles(t,e){const i=new FormData,s=new XMLHttpRequest,o=(t,i)=>void 0!==e[t]?Th(e[t])(i):this.xhrProps[t](i),n=o("url",t);if(!n)return console.error("q-uploader: invalid or no URL specified"),void this.workingThreads--;const r=o("formFields",t);void 0!==r&&r.forEach(t=>{i.append(t.name,t.value)});let a,l=0,h=0,d=0,c=0;s.upload.addEventListener("progress",e=>{if(!0===a)return;const i=Math.min(c,e.loaded);this.uploadedSize+=i-d;let s=(d=i)-h;for(let e=l;s>0&&ei.size))return void this.__updateFile(i,"uploading",s);s-=i.size,l++,h+=i.size,this.__updateFile(i,"uploading",i.size)}},!1),s.onreadystatechange=(()=>{s.readyState<4||(s.status&&s.status<400?(this.uploadedFiles=this.uploadedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"uploaded")}),this.$emit("uploaded",{files:t,xhr:s})):(a=!0,this.uploadedSize-=d,this.queuedFiles=this.queuedFiles.concat(t),t.forEach(t=>{this.__updateFile(t,"failed")}),this.$emit("failed",{files:t,xhr:s})),this.workingThreads--,this.xhrs=this.xhrs.filter(t=>t!==s))}),s.open(o("method",t),n),!0===o("withCredentials",t)&&(s.withCredentials=!0);const u=o("headers",t);void 0!==u&&u.forEach(t=>{s.setRequestHeader(t.name,t.value)});const p=o("sendRaw",t);t.forEach(t=>{this.__updateFile(t,"uploading",0),!0!==p&&i.append(o("fieldName",t),t,t.name),t.xhr=s,t.__abort=(()=>{s.abort()}),c+=t.size}),this.$emit("uploading",{files:t,xhr:s}),this.xhrs.push(s),!0===p?s.send(new Blob(t)):s.send(i)}}},Lh=e.default.extend({name:"QUploader",mixins:[$h,Mh]}),Eh=e.default.extend({name:"QUploaderAddTrigger",inject:{__qUploaderGetInput:{default(){console.error("QUploaderAddTrigger needs to be child of QUploader")}}},render(t){return this.__qUploaderGetInput(t)}}),Ah=e.default.extend({name:"QVideo",mixins:[Jr,Ht],props:{src:{type:String,required:!0},title:String,fetchpriority:{type:String,default:"auto"},loading:{type:String,default:"eager"},referrerpolicy:{type:String,default:"strict-origin-when-cross-origin"}},computed:{iframeData(){return{attrs:{src:this.src,frameborder:"0",title:this.title,allowfullscreen:!0,fetchpriority:this.fetchpriority,loading:this.loading,referrerpolicy:this.referrerpolicy}}},classes(){return"q-video"+(void 0!==this.ratio?" q-video--responsive":"")}},render(t){return t("div",{class:this.classes,style:this.ratioStyle,on:{...this.qListeners}},[t("iframe",this.iframeData)])}}),Bh=Object.freeze({__proto__:null,QAjaxBar:Rt,QAvatar:he,QBadge:de,QBanner:pe,QBar:ge,QBreadcrumbs:ye,QBreadcrumbsEl:ke,QBtn:Ze,QBtnDropdown:ys,QBtnGroup:si,QBtnToggle:ws,QCard:Cs,QCardSection:ks,QCardActions:qs,QCarousel:Gs,QCarouselSlide:Xs,QCarouselControl:Zs,QChatMessage:Js,QCheckbox:so,QChip:oo,QCircularProgress:ao,QColor:Fo,QDate:Dn,QDialog:sr,QDrawer:nr,QEditor:wr,QExpansionItem:Er,QFab:Ir,QFabAction:Fr,QField:jr,QFile:Kr,QFooter:Gr,QForm:Xr,QHeader:Zr,QIcon:le,QImg:ta,QInfiniteScroll:ia,QInnerLoading:sa,QInput:ca,QIntersection:fa,QList:hr,QItem:dr,QItemSection:cr,QItemLabel:Cr,QKnob:va,QLayout:xa,QMarkupTable:wa,QMenu:us,QNoSsr:Ca,QOptionGroup:Ma,QPage:La,QPageContainer:Ea,QPageScroller:Ba,QPageSticky:Aa,QPagination:za,QParallax:Ra,QPopupEdit:Da,QPopupProxy:Va,QLinearProgress:Ha,QPullToRefresh:ja,QRadio:ka,QRange:Ya,QRating:Ka,QResizeObserver:To,QResponsive:Ga,QScrollArea:tl,QScrollObserver:Sa,QSelect:ul,QSeparator:Tr,QSkeleton:gl,QSlideItem:_l,QSlideTransition:kr,QSlider:qo,QSpace:vl,QSpinner:$e,QSpinnerAudio:bl,QSpinnerBall:yl,QSpinnerBars:Sl,QSpinnerBox:xl,QSpinnerClock:wl,QSpinnerComment:Cl,QSpinnerCube:kl,QSpinnerDots:ql,QSpinnerFacebook:$l,QSpinnerGears:Tl,QSpinnerGrid:Ml,QSpinnerHearts:Ll,QSpinnerHourglass:El,QSpinnerInfinity:Al,QSpinnerIos:Bl,QSpinnerOrbit:Pl,QSpinnerOval:zl,QSpinnerPie:Il,QSpinnerPuff:Ol,QSpinnerRadio:Rl,QSpinnerRings:Fl,QSpinnerTail:Dl,QSplitter:Nl,QStep:Wl,QStepper:Ul,QStepperNavigation:Yl,QTabPanels:zo,QTabPanel:Oo,QTable:mh,QTh:Gl,QTr:gh,QTd:fh,QTabs:Ao,QTab:Po,QRouteTab:_h,QTime:bh,QTimeline:yh,QTimelineEntry:Sh,QToggle:qa,QToolbar:wh,QToolbarTitle:Ch,QTooltip:ar,QTree:qh,QUploader:Lh,QUploaderBase:$h,QUploaderAddTrigger:Eh,QVideo:Ah,QVirtualScroll:oh});function Ph(t){if(!1===t)return 0;if(!0===t||void 0===t)return 1;const e=parseInt(t,10);return isNaN(e)?0:e}function zh(t){const e=t.__qclosepopup;void 0!==e&&(t.removeEventListener("click",e.handler),t.removeEventListener("keyup",e.handlerKey),delete t.__qclosepopup)}var Ih={name:"close-popup",bind(t,{value:e},i){void 0!==t.__qclosepopup&&(zh(t),t.__qclosepopup_destroyed=!0);const s={depth:Ph(e),handler(t){0!==s.depth&&setTimeout(()=>{!function(t,e,i){for(;0!==i&&void 0!==t;){if(void 0!==t.__renderPortal){if(i--,"QMenu"===t.$options.name){t=Ci(t,e);continue}t.hide(e)}t=t.$parent}}(i.componentInstance||i.context,t,s.depth)})},handlerKey(t){!0===ze(t,13)&&s.handler(t)}};t.__qclosepopup=s,t.addEventListener("click",s.handler),t.addEventListener("keyup",s.handlerKey)},update(t,{value:e,oldValue:i}){void 0!==t.__qclosepopup&&i!==e&&(t.__qclosepopup.depth=Ph(e))},unbind(t){void 0===t.__qclosepopup_destroyed?zh(t):delete t.__qclosepopup_destroyed}};function Oh(t){const e=t.__qgoback;void 0!==e&&(t.removeEventListener("click",e.goBack),t.removeEventListener("keyup",e.goBackKey),delete t.__qgoback)}var Rh={name:"go-back",bind(t,{modifiers:e,value:i},s){void 0!==t.__qgoback&&(Oh(t),t.__qgoback_destroyed=!0);const o={value:i,position:window.history.length-1,single:e.single,goBack(){const t=s.context.$router;!0===o.single?t.go(-1):!0===d.is.nativeMobile?t.go(o.position-window.history.length):t.replace(o.value)},goBackKey(t){!0===ze(t,13)&&o.goBack()}};t.__qgoback=o,t.addEventListener("click",o.goBack),t.addEventListener("keyup",o.goBackKey)},update(t,{modifiers:e,value:i,oldValue:s}){const o=t.__qgoback;void 0!==o&&(o.single!==e.single&&(o.single=e.single),s!==i&&(o.value=i))},unbind(t){void 0===t.__qgoback_destroyed?Oh(t):delete t.__qgoback_destroyed}};let Fh=0,Dh=void 0;function Vh(t,e){void 0===Dh&&((Dh=document.createElement("div")).style.cssText="position: absolute; left: 0; top: 0",document.body.appendChild(Dh));const i=t.getBoundingClientRect(),s=Dh.getBoundingClientRect(),{marginLeft:o,marginRight:n,marginTop:r,marginBottom:a}=window.getComputedStyle(t),l=parseInt(o,10)+parseInt(n,10),h=parseInt(r,10)+parseInt(a,10);return{left:i.left-s.left,top:i.top-s.top,width:i.right-i.left,height:i.bottom-i.top,widthM:i.right-i.left+(!0===e?0:l),heightM:i.bottom-i.top+(!0===e?0:h),marginH:!0===e?l:0,marginV:!0===e?h:0}}function Nh(t){return{width:t.scrollWidth,height:t.scrollHeight}}const Hh=["Top","Right","Bottom","Left"],jh=["borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius"],Qh=/-block|-inline|block-|inline-/,Wh=/(-block|-inline|block-|inline-).*:/;function Uh(t,e){const i=window.getComputedStyle(t),s={};for(let t=0;t-1){const t=o.replace("border","");let e="";for(let s=0;s!0!==Wh.test(t)).join(";"):i[o]}return s}const Yh=["absolute","fixed","relative","sticky"];function Kh(t){let e=t,i=0;for(;null!==e&&e!==document;){const{position:s,zIndex:o}=window.getComputedStyle(e),n=Number(o);n>i&&(e===t||!0===Yh.includes(s))&&(i=n),e=e.parentNode}return i}function Gh(t){return t&&t.ownerDocument===document&&null!==t.parentNode}function Xh(t){let e=()=>!1,i=!1,s=!0;const o={from:(n=t).from,to:void 0!==n.to?n.to:n.from};var n;const r=function(t){return"number"==typeof t?t={duration:t}:"function"==typeof t&&(t={onEnd:t}),{...t,waitFor:void 0===t.waitFor?0:t.waitFor,duration:!0===isNaN(t.duration)?300:parseInt(t.duration,10),easing:"string"==typeof t.easing&&t.easing.length>0?t.easing:"ease-in-out",delay:!0===isNaN(t.delay)?0:parseInt(t.delay,10),fill:"string"==typeof t.fill&&t.fill.length>0?t.fill:"none",resize:!0===t.resize,useCSS:!0===t.useCSS||!0===t.usecss,hideFromClone:!0===t.hideFromClone||!0===t.hidefromclone,keepToClone:!0===t.keepToClone||!0===t.keeptoclone,tween:!0===t.tween,tweenFromOpacity:!0===isNaN(t.tweenFromOpacity)?.6:parseFloat(t.tweenFromOpacity),tweenToOpacity:!0===isNaN(t.tweenToOpacity)?.5:parseFloat(t.tweenToOpacity)}}(t),a=Ee(o.from);if(!0!==Gh(a))return e;"function"==typeof a.qMorphCancel&&a.qMorphCancel();let l=void 0,h=void 0,d=void 0,c=void 0;const u=a.parentNode,p=a.nextElementSibling,m=Vh(a,r.resize),{width:g,height:f}=Nh(u),{borderWidth:_,borderStyle:v,borderColor:b,borderRadius:y,backgroundColor:S,transform:x,position:w,cssText:C}=Uh(a,["borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","transform","position","cssText"]),k=a.classList.toString(),q=a.style.cssText,$=a.cloneNode(!0),T=!0===r.tween?a.cloneNode(!0):void 0;void 0!==T&&(T.className=T.classList.toString().split(" ").filter(t=>!1===/^bg-/.test(t)).join(" ")),!0===r.hideFromClone&&$.classList.add("q-morph--internal"),$.setAttribute("aria-hidden","true"),$.style.transition="none",$.style.animation="none",$.style.pointerEvents="none",u.insertBefore($,p),a.qMorphCancel=(()=>{i=!0,$.remove(),void 0!==T&&T.remove(),!0===r.hideFromClone&&$.classList.remove("q-morph--internal"),a.qMorphCancel=void 0});return"function"==typeof t.onToggle&&t.onToggle(),requestAnimationFrame(()=>{const t=Ee(o.to);if(!0===i||!0!==Gh(t))return void("function"==typeof a.qMorphCancel&&a.qMorphCancel());a!==t&&"function"==typeof t.qMorphCancel&&t.qMorphCancel(),!0!==r.keepToClone&&t.classList.add("q-morph--internal"),$.classList.add("q-morph--internal");const{width:n,height:p}=Nh(u),{width:M,height:L}=Nh(t.parentNode);!0!==r.hideFromClone&&$.classList.remove("q-morph--internal"),t.qMorphCancel=(()=>{i=!0,$.remove(),void 0!==T&&T.remove(),!0===r.hideFromClone&&$.classList.remove("q-morph--internal"),!0!==r.keepToClone&&t.classList.remove("q-morph--internal"),a.qMorphCancel=void 0,t.qMorphCancel=void 0});const E=()=>{if(!0===i)return void("function"==typeof t.qMorphCancel&&t.qMorphCancel());!0!==r.hideFromClone&&($.classList.add("q-morph--internal"),$.innerHTML="",$.style.left=0,$.style.right="unset",$.style.top=0,$.style.bottom="unset",$.style.transform="none"),!0!==r.keepToClone&&t.classList.remove("q-morph--internal");const o=t.parentNode,{width:E,height:A}=Nh(o),B=t.cloneNode(r.keepToClone);B.setAttribute("aria-hidden","true"),!0!==r.keepToClone&&(B.style.left=0,B.style.right="unset",B.style.top=0,B.style.bottom="unset",B.style.transform="none",B.style.pointerEvents="none"),B.classList.add("q-morph--internal");const P=t===a&&u===o?$:t.nextElementSibling;o.insertBefore(B,P);const{borderWidth:z,borderStyle:I,borderColor:O,borderRadius:R,backgroundColor:F,transform:D,position:V,cssText:N}=Uh(t,["borderWidth","borderStyle","borderColor","borderRadius","backgroundColor","transform","position","cssText"]),H=t.classList.toString(),j=t.style.cssText;t.style.cssText=N,t.style.transform="none",t.style.animation="none",t.style.transition="none",t.className=H.split(" ").filter(t=>!1===/^bg-/.test(t)).join(" ");const Q=Vh(t,r.resize),W=m.left-Q.left,U=m.top-Q.top,Y=m.width/(Q.width>0?Q.width:10),K=m.height/(Q.height>0?Q.height:100),G=g-n,X=f-p,Z=E-M,J=A-L,tt=Math.max(m.widthM,G),et=Math.max(m.heightM,X),it=Math.max(Q.widthM,Z),st=Math.max(Q.heightM,J),ot=a===t&&!1===["absolute","fixed"].includes(V)&&!1===["absolute","fixed"].includes(w);let nt="fixed"===V,rt=o;for(;!0!==nt&&rt!==document;)nt="fixed"===window.getComputedStyle(rt).position,rt=rt.parentNode;if(!0!==r.hideFromClone&&($.style.display="block",$.style.flex="0 0 auto",$.style.opacity=0,$.style.minWidth="unset",$.style.maxWidth="unset",$.style.minHeight="unset",$.style.maxHeight="unset",$.classList.remove("q-morph--internal")),!0!==r.keepToClone&&(B.style.display="block",B.style.flex="0 0 auto",B.style.opacity=0,B.style.minWidth="unset",B.style.maxWidth="unset",B.style.minHeight="unset",B.style.maxHeight="unset"),B.classList.remove("q-morph--internal"),"string"==typeof r.classes&&(t.className+=" "+r.classes),"string"==typeof r.style)t.style.cssText+=" "+r.style;else if(!0===Es(r.style))for(const e in r.style)t.style[e]=r.style[e];const at=Kh($),lt=Kh(t),ht=!0===nt?document.documentElement:{scrollLeft:0,scrollTop:0};t.style.position=!0===nt?"fixed":"absolute",t.style.left=`${Q.left-ht.scrollLeft}px`,t.style.right="unset",t.style.top=`${Q.top-ht.scrollTop}px`,t.style.margin=0,!0===r.resize&&(t.style.minWidth="unset",t.style.maxWidth="unset",t.style.minHeight="unset",t.style.maxHeight="unset",t.style.overflow="hidden",t.style.overflowX="hidden",t.style.overflowY="hidden"),document.body.appendChild(t),void 0!==T&&(T.style.cssText=C,T.style.transform="none",T.style.animation="none",T.style.transition="none",T.style.position=t.style.position,T.style.left=`${m.left-ht.scrollLeft}px`,T.style.right="unset",T.style.top=`${m.top-ht.scrollTop}px`,T.style.margin=0,T.style.pointerEvents="none",!0===r.resize&&(T.style.minWidth="unset",T.style.maxWidth="unset",T.style.minHeight="unset",T.style.maxHeight="unset",T.style.overflow="hidden",T.style.overflowX="hidden",T.style.overflowY="hidden"),document.body.appendChild(T));const dt=i=>{a===t&&!0!==s?(t.style.cssText=q,t.className=k):(t.style.cssText=j,t.className=H),B.parentNode===o&&o.insertBefore(t,B),$.remove(),B.remove(),void 0!==T&&T.remove(),e=(()=>!1),a.qMorphCancel=void 0,t.qMorphCancel=void 0,"function"==typeof r.onEnd&&r.onEnd(!0===s?"to":"from",!0===i)};if(!0!==r.useCSS&&"function"==typeof t.animate){const o=!0===r.resize?{transform:`translate(${W}px, ${U}px)`,width:`${tt}px`,height:`${et}px`}:{transform:`translate(${W}px, ${U}px) scale(${Y}, ${K})`},n=!0===r.resize?{width:`${it}px`,height:`${st}px`}:{},u=!0===r.resize?{width:`${tt}px`,height:`${et}px`}:{},p=!0===r.resize?{transform:`translate(${-1*W}px, ${-1*U}px)`,width:`${it}px`,height:`${st}px`}:{transform:`translate(${-1*W}px, ${-1*U}px) scale(${1/Y}, ${1/K})`},g=void 0!==T?{opacity:r.tweenToOpacity}:{backgroundColor:S},f=void 0!==T?{opacity:1}:{backgroundColor:F};c=t.animate([{margin:0,borderWidth:_,borderStyle:v,borderColor:b,borderRadius:y,zIndex:at,transformOrigin:"0 0",...o,...g},{margin:0,borderWidth:z,borderStyle:I,borderColor:O,borderRadius:R,zIndex:lt,transformOrigin:"0 0",transform:D,...n,...f}],{duration:r.duration,easing:r.easing,fill:r.fill,delay:r.delay}),h=void 0===T?void 0:T.animate([{opacity:r.tweenFromOpacity,margin:0,borderWidth:_,borderStyle:v,borderColor:b,borderRadius:y,zIndex:at,transformOrigin:"0 0",transform:x,...u},{opacity:0,margin:0,borderWidth:z,borderStyle:I,borderColor:O,borderRadius:R,zIndex:lt,transformOrigin:"0 0",...p}],{duration:r.duration,easing:r.easing,fill:r.fill,delay:r.delay}),l=!0===r.hideFromClone||!0===ot?void 0:$.animate([{margin:`${X<0?X/2:0}px ${G<0?G/2:0}px`,width:`${tt+m.marginH}px`,height:`${et+m.marginV}px`},{margin:0,width:0,height:0}],{duration:r.duration,easing:r.easing,fill:r.fill,delay:r.delay}),d=!0===r.keepToClone?void 0:B.animate([!0===ot?{margin:`${X<0?X/2:0}px ${G<0?G/2:0}px`,width:`${tt+m.marginH}px`,height:`${et+m.marginV}px`}:{margin:0,width:0,height:0},{margin:`${J<0?J/2:0}px ${Z<0?Z/2:0}px`,width:`${it+Q.marginH}px`,height:`${st+Q.marginV}px`}],{duration:r.duration,easing:r.easing,fill:r.fill,delay:r.delay});const w=t=>{void 0!==l&&l.cancel(),void 0!==h&&h.cancel(),void 0!==d&&d.cancel(),c.cancel(),c.removeEventListener("finish",w),c.removeEventListener("cancel",w),dt(t),l=void 0,h=void 0,d=void 0,c=void 0};a.qMorphCancel=(()=>{a.qMorphCancel=void 0,i=!0,w()}),t.qMorphCancel=(()=>{t.qMorphCancel=void 0,i=!0,w()}),c.addEventListener("finish",w),c.addEventListener("cancel",w),e=(t=>!0!==i&&void 0!==c&&(!0===t?(w(!0),!0):(s=!0!==s,void 0!==l&&l.reverse(),void 0!==h&&h.reverse(),void 0!==d&&d.reverse(),c.reverse(),!0)))}else{const o=`q-morph-anim-${++Fh}`,n=document.createElement("style"),l=!0===r.resize?`\n transform: translate(${W}px, ${U}px);\n width: ${tt}px;\n height: ${et}px;\n `:`transform: translate(${W}px, ${U}px) scale(${Y}, ${K});`,h=!0===r.resize?`\n width: ${it}px;\n height: ${st}px;\n `:"",d=!0===r.resize?`\n width: ${tt}px;\n height: ${et}px;\n `:"",c=!0===r.resize?`\n transform: translate(${-1*W}px, ${-1*U}px);\n width: ${it}px;\n height: ${st}px;\n `:`transform: translate(${-1*W}px, ${-1*U}px) scale(${1/Y}, ${1/K});`,u=void 0!==T?`opacity: ${r.tweenToOpacity};`:`background-color: ${S};`,p=void 0!==T?"opacity: 1;":`background-color: ${F};`,g=void 0===T?"":`\n @keyframes ${o}-from-tween {\n 0% {\n opacity: ${r.tweenFromOpacity};\n margin: 0;\n border-width: ${_};\n border-style: ${v};\n border-color: ${b};\n border-radius: ${y};\n z-index: ${at};\n transform-origin: 0 0;\n transform: ${x};\n ${d}\n }\n\n 100% {\n opacity: 0;\n margin: 0;\n border-width: ${z};\n border-style: ${I};\n border-color: ${O};\n border-radius: ${R};\n z-index: ${lt};\n transform-origin: 0 0;\n ${c}\n }\n }\n `,f=!0===r.hideFromClone||!0===ot?"":`\n @keyframes ${o}-from {\n 0% {\n margin: ${X<0?X/2:0}px ${G<0?G/2:0}px;\n width: ${tt+m.marginH}px;\n height: ${et+m.marginV}px;\n }\n\n 100% {\n margin: 0;\n width: 0;\n height: 0;\n }\n }\n `,w=!0===ot?`\n margin: ${X<0?X/2:0}px ${G<0?G/2:0}px;\n width: ${tt+m.marginH}px;\n height: ${et+m.marginV}px;\n `:"\n margin: 0;\n width: 0;\n height: 0;\n ",C=!0===r.keepToClone?"":`\n @keyframes ${o}-to {\n 0% {\n ${w}\n }\n\n 100% {\n margin: ${J<0?J/2:0}px ${Z<0?Z/2:0}px;\n width: ${it+Q.marginH}px;\n height: ${st+Q.marginV}px;\n }\n }\n `;n.innerHTML=`\n @keyframes ${o} {\n 0% {\n margin: 0;\n border-width: ${_};\n border-style: ${v};\n border-color: ${b};\n border-radius: ${y};\n background-color: ${S};\n z-index: ${at};\n transform-origin: 0 0;\n ${l}\n ${u}\n }\n\n 100% {\n margin: 0;\n border-width: ${z};\n border-style: ${I};\n border-color: ${O};\n border-radius: ${R};\n background-color: ${F};\n z-index: ${lt};\n transform-origin: 0 0;\n transform: ${D};\n ${h}\n ${p}\n }\n }\n\n ${f}\n\n ${g}\n\n ${C}\n `,document.head.appendChild(n);let k="normal";$.style.animation=`${r.duration}ms ${r.easing} ${r.delay}ms ${k} ${r.fill} ${o}-from`,void 0!==T&&(T.style.animation=`${r.duration}ms ${r.easing} ${r.delay}ms ${k} ${r.fill} ${o}-from-tween`),B.style.animation=`${r.duration}ms ${r.easing} ${r.delay}ms ${k} ${r.fill} ${o}-to`,t.style.animation=`${r.duration}ms ${r.easing} ${r.delay}ms ${k} ${r.fill} ${o}`;const q=e=>{e===Object(e)&&e.animationName!==o||(t.removeEventListener("animationend",q),t.removeEventListener("animationcancel",q),dt(),n.remove())};a.qMorphCancel=(()=>{a.qMorphCancel=void 0,i=!0,q()}),t.qMorphCancel=(()=>{t.qMorphCancel=void 0,i=!0,q()}),t.addEventListener("animationend",q),t.addEventListener("animationcancel",q),e=(e=>!!(!0!==i&&t&&$&&B)&&(!0===e?(q(),!0):(s=!0!==s,k="normal"===k?"reverse":"normal",$.style.animationDirection=k,T.style.animationDirection=k,B.style.animationDirection=k,t.style.animationDirection=k,!0)))}};r.waitFor>0||"transitionend"===r.waitFor||r.waitFor===Object(r.waitFor)&&"function"==typeof r.waitFor.then?(r.waitFor>0?new Promise(t=>setTimeout(t,r.waitFor)):"transitionend"===r.waitFor?new Promise(e=>{const i=setTimeout(()=>{s()},400),s=o=>{clearTimeout(i),t&&(t.removeEventListener("transitionend",s),t.removeEventListener("transitioncancel",s)),e()};t.addEventListener("transitionend",s),t.addEventListener("transitioncancel",s)}):r.waitFor).then(E).catch(()=>{"function"==typeof t.qMorphCancel&&t.qMorphCancel()}):E()}),t=>e(t)}const Zh={},Jh=["resize","useCSS","hideFromClone","keepToClone","tween"],td=["duration","delay","easing","fill","classes","style","duration","tweenFromOpacity","tweenToOpacity","waitFor","onEnd"];function ed(t,e){t.clsAction!==e&&(t.clsAction=e,t.el.classList[e]("q-morph--invisible"))}function id(t,e){if(t.name!==e)!1===t.animating&&ed(t,"add");else{const i=Zh[t.group];void 0===i?(Zh[t.group]={name:t.group,model:e,queue:[t],animating:!1},ed(t,"remove")):i.model!==e&&(i.model=e,i.queue.push(t),!1===i.animating&&2===i.queue.length&&function t(e){if(!0===e.animating||e.queue.length<2)return;const[i,s]=e.queue;e.animating=!0,i.animating=!0,s.animating=!0,ed(i,"remove"),ed(s,"remove");const o=Xh({from:i.el,to:s.el,onToggle(){ed(i,"add"),ed(s,"remove")},...s.opts,onEnd(o,n){void 0!==s.opts.onEnd&&s.opts.onEnd(o,n),!0!==n&&(i.animating=!1,s.animating=!1,e.animating=!1,e.cancel=void 0,e.queue.shift(),t(e))}});e.cancel=(()=>{o(!0),e.cancel=void 0})}(i))}}function sd(t,e){const i="string"==typeof e&&e.length>0?e.split(":"):[];t.name=i[0],t.group=i[1],Object.assign(t.opts,{duration:!0===isNaN(i[2])?300:parseFloat(i[2]),waitFor:i[3]})}function od(t,e){const i=t.opts;Jh.forEach(t=>{i[t]=!0===e[t]})}function nd(t,e){let i;Object(e)===e?(i=""+e.model,function(t,e){void 0!==e.group&&(t.group=e.group),void 0!==e.name&&(t.name=e.name);const i=t.opts;td.forEach(t=>{void 0!==e[t]&&(i[t]=e[t])})}(t,e),od(t,e)):i=""+e,i!==t.model?(t.model=i,id(t,i)):!1===t.animating&&void 0!==t.clsAction&&t.el.classList[t.clsAction]("q-morph--invisible")}function rd(t){const e=t.__qmorph;if(void 0!==e){const i=Zh[e.group];if(void 0!==i){-1!==i.queue.indexOf(e)&&(i.queue=i.queue.filter(t=>t!==e),0===i.queue.length&&(void 0!==i.cancel&&i.cancel(),delete Zh[e.group]))}"add"===e.clsAction&&t.classList.remove("q-morph--invisible"),delete t.__qmorph}}var ad={name:"morph",inserted(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qmorph&&(rd(t),t.__qmorph_destroyed=!0);const o={el:t,arg:i,animating:!1,opts:{}};od(o,e),sd(o,i),nd(o,s),t.__qmorph=o},update(t,{modifiers:e,arg:i,value:s}){const o=t.__qmorph;void 0!==o&&(od(o,e),o.arg!==i&&sd(o,i),nd(o,s))},unbind(t){void 0===t.__qmorph_destroyed?rd(t):delete t.__qmorph_destroyed}};const ld={childList:!0,subtree:!0,attributes:!0,characterData:!0,attributeOldValue:!0,characterDataOldValue:!0};function hd(t,e,i){e.handler=i,void 0!==e.observer&&e.observer.disconnect(),e.observer=new MutationObserver(i=>{if("function"==typeof e.handler){!1!==e.handler(i)&&!0!==e.once||dd(t)}}),e.observer.observe(t,e.opts)}function dd(t){const e=t.__qmutation;void 0!==e&&(void 0!==e.observer&&e.observer.disconnect(),delete t.__qmutation)}var cd={name:"mutation",inserted(t,{modifiers:{once:e,...i},value:s}){void 0!==t.__qmutation&&(dd(t),t.__qmutation_destroyed=!0);const o={once:e};o.opts=0===Object.keys(i).length?ld:i,hd(t,o,s),t.__qmutation=o},update(t,{modifiers:{once:e,...i},value:s,oldValue:o}){const n=t.__qmutation;if(void 0!==n){const e=0===Object.keys(i).length?ld:i;o===s&&!0===Ls(n.opts,e)||(n.opts=e,hd(t,n,s))}},unbind(t){void 0===t.__qmutation_destroyed?dd(t):delete t.__qmutation_destroyed}};function ud(t,{value:e,oldValue:i}){"function"==typeof e?(t.handler=e,"function"!=typeof i&&(t.scrollTarget.addEventListener("scroll",t.scroll,u.passive),t.scroll())):t.scrollTarget.removeEventListener("scroll",t.scroll,u.passive)}function pd(t){const e=t.__qscrollfire;void 0!==e&&(e.scrollTarget.removeEventListener("scroll",e.scroll,u.passive),e.scroll.cancel(),delete t.__qscrollfire)}var md={name:"scroll-fire",inserted(t,e){void 0!==t.__qscrollfire&&(pd(t),t.__qscrollfire_destroyed=!0);const i={scrollTarget:Fi(t),scroll:j(()=>{let e,s;i.scrollTarget===window?(s=t.getBoundingClientRect().bottom,e=window.innerHeight):(s=Te(t).top+Me(t),e=Te(i.scrollTarget).top+Me(i.scrollTarget)),s>0&&s0&&t.split(":").forEach((t,i)=>{const s=parseInt(t,10);s&&(e[i]=s)}),{duration:e[0],touchSensitivity:e[1],mouseSensitivity:e[2]}}function bd(t){const e=t.__qtouchhold;void 0!==e&&($(e,"main"),$(e,"temp"),clearTimeout(e.timer),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchhold)}function yd(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&$(e,"main_mouse"),!0===i.mouse&&q(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===d.has.touch&&e.modifiers.capture!==i.capture&&($(e,"main_touch"),q(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","passiveCapture"]])),e.modifiers=i}var Sd={name:"touch-hold",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchhold&&(bd(t),t.__qtouchhold_destroyed=!0);const o={handler:s,arg:i,modifiers:{capture:null},...vd(i),noop:m,mouseStart(t){"function"==typeof o.handler&&!0===g(t)&&(q(o,"temp",[[document,"mousemove","move","passiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(t,!0))},touchStart(t){if(void 0!==t.target&&"function"==typeof o.handler){const e=t.target;q(o,"temp",[[e,"touchmove","move","passiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(t,e){o.origin=f(t);const i=Date.now();!0===d.is.mobile&&(document.body.classList.add("non-selectable"),oi(),o.styleCleanup=(t=>{o.styleCleanup=void 0;const e=()=>{document.body.classList.remove("non-selectable")};!0===t?(oi(),setTimeout(e,10)):e()})),o.triggered=!1,o.sensitivity=!0===e?o.mouseSensitivity:o.touchSensitivity,o.timer=setTimeout(()=>{oi(),o.triggered=!0,o.handler({evt:t,touch:!0!==e,mouse:!0===e,position:o.origin,duration:Date.now()-i})},o.duration)},move(t){const{top:e,left:i}=f(t);(Math.abs(i-o.origin.left)>=o.sensitivity||Math.abs(e-o.origin.top)>=o.sensitivity)&&clearTimeout(o.timer)},end(t){$(o,"temp"),void 0!==o.styleCleanup&&o.styleCleanup(o.triggered),!0===o.triggered?void 0!==t&&w(t):clearTimeout(o.timer)}};t.__qtouchhold=o,yd(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchhold;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&Object.assign(n,vd(i)),!0!==Ls(n.modifiers,e)&&yd(t,n,e))},unbind(t){void 0===t.__qtouchhold_destroyed?bd(t):delete t.__qtouchhold_destroyed}};const xd={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},wd=new RegExp(`^([\\d+]+|${Object.keys(xd).join("|")})$`,"i");function Cd(t){const e="string"==typeof t&&t.length>0?t.split(":").map(t=>parseInt(t,10)):[0,600,300];return{durations:e,durationsLast:e.length-1}}function kd(t){const e=t.__qtouchrepeat;void 0!==e&&(clearTimeout(e.timer),$(e,"main_mouse"),$(e,"main_touch"),$(e,"main_kbd"),$(e,"temp"),void 0!==e.styleCleanup&&e.styleCleanup(),delete t.__qtouchrepeat)}function qd(t,e,i){e.modifiers.mouse===i.mouse&&e.modifiers.mouseCapture===i.mouseCapture&&e.modifiers.mousecapture===i.mousecapture||(!0===e.modifiers.mouse&&$(e,"main_mouse"),!0===i.mouse&&q(e,"main_mouse",[[t,"mousedown","mouseStart",`passive${!0===i.mouseCapture||!0===i.mousecapture?"Capture":""}`]])),!0===d.has.touch&&e.modifiers.capture!==i.capture&&($(e,"main_touch"),q(e,"main_touch",[[t,"touchstart","touchStart",`passive${!0===i.capture?"Capture":""}`],[t,"touchmove","noop","passiveCapture"]]));const s=Object.keys(i).reduce((t,e)=>{if(!0===wd.test(e)){const i=isNaN(parseInt(e,10))?xd[e.toLowerCase()]:parseInt(e,10);i>=0&&t.push(i)}return t},[]);e.keyboard.length>0==s.length>0&&e.modifiers.keyCapture===i.keyCapture&&e.modifiers.keycapture===i.keycapture||(e.keyboard.length>0&&$(e,"main_kbd"),s.length>0&&q(e,"main_kbd",[[t,"keydown","keyboardStart",`notPassive${!0===i.keyCapture||!0===i.keycapture?"Capture":""}`]])),e.modifiers=i,e.keyboard=s}var $d={name:"touch-repeat",bind(t,{modifiers:e,arg:i,value:s}){void 0!==t.__qtouchrepeat&&(kd(t),t.__qtouchrepeat_destroyed=!0);const o={keyboard:[],handler:s,arg:i,modifiers:{capture:null},...Cd(i),noop:m,mouseStart(t){void 0===o.event&&"function"==typeof o.handler&&!0===g(t)&&(q(o,"temp",[[document,"mousemove","move","passiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(t,!0))},keyboardStart(e){if("function"==typeof o.handler&&!0===ze(e,o.keyboard)){if((0===o.durations[0]||void 0!==o.event)&&(w(e),t.focus(),void 0!==o.event))return;q(o,"temp",[[document,"keyup","end","notPassiveCapture"],[document,"click","end","notPassiveCapture"]]),o.start(e,!1,!0)}},touchStart(t){if(void 0!==t.target&&"function"==typeof o.handler){const e=t.target;q(o,"temp",[[e,"touchmove","move","passiveCapture"],[e,"touchcancel","end","notPassiveCapture"],[e,"touchend","end","notPassiveCapture"]]),o.start(t)}},start(t,e,i){function s(t){o.styleCleanup=void 0,document.documentElement.style.cursor="";const e=()=>{document.body.classList.remove("non-selectable")};!0===t?(oi(),setTimeout(e,10)):e()}!0!==i&&(o.origin=f(t)),!0===d.is.mobile&&(document.body.classList.add("non-selectable"),oi(),o.styleCleanup=s),o.event={touch:!0!==e&&!0!==i,mouse:!0===e,keyboard:!0===i,startTime:Date.now(),repeatCount:0};const n=()=>{if(void 0===o.event)return;0===o.event.repeatCount&&(o.event.evt=t,!0===i?o.event.keyCode=t.keyCode:o.event.position=f(t),!0!==d.is.mobile&&(document.documentElement.style.cursor="pointer",document.body.classList.add("non-selectable"),oi(),o.styleCleanup=s)),o.event.duration=Date.now()-o.event.startTime,o.event.repeatCount+=1,o.handler(o.event);const e=o.durationsLast=7||Math.abs(i-e.top)>=7}(t,o.origin)&&clearTimeout(o.timer)},end(t){void 0!==o.event&&(void 0!==o.styleCleanup&&o.styleCleanup(!0),void 0!==t&&o.event.repeatCount>0&&w(t),$(o,"temp"),clearTimeout(o.timer),o.event=void 0)}};t.__qtouchrepeat=o,qd(t,o,e)},update(t,{modifiers:e,arg:i,value:s,oldValue:o}){const n=t.__qtouchrepeat;void 0!==n&&(o!==s&&("function"!=typeof s&&n.end(),n.handler=s),n.arg!==i&&Object.assign(n,Cd(i)),!0!==Ls(n.modifiers,e)&&qd(t,n,e))},unbind(t){void 0===t.__qtouchrepeat_destroyed?kd(t):delete t.__qtouchrepeat_destroyed}},Td=Object.freeze({__proto__:null,ClosePopup:Ih,GoBack:Rh,Intersection:ga,KeyGroupNavigation:Qo,Morph:ad,Mutation:cd,Ripple:Fe,ScrollFire:md,Scroll:_d,TouchHold:Sd,TouchPan:xo,TouchRepeat:$d,TouchSwipe:Hs});let Md;function Ld(t){void 0===Md&&(Md=c.is.winphone?"msapplication-navbutton-color":c.is.safari?"apple-mobile-web-app-status-bar-style":"theme-color");let e=function(t){const e=document.getElementsByTagName("META");for(const i in e)if(e[i].name===t)return e[i]}(Md);const i=void 0===e;i&&(e=document.createElement("meta")).setAttribute("name",Md),e.setAttribute("content",t),i&&document.head.appendChild(e)}var Ed={install({$q:t,cfg:e}){this.set=!1!==i||!0!==c.is.mobile||!0!==c.is.nativeMobile&&!0!==c.is.winphone&&!0!==c.is.safari&&!0!==c.is.webkit&&!0!==c.is.vivaldi?m:t=>{const e=t||ct("primary");!0===c.is.nativeMobile&&window.StatusBar?window.StatusBar.backgroundColorByHexString(e):Ld(e)},t.addressbarColor=this,e.addressbarColor&&this.set(e.addressbarColor)}};const Ad={};function Bd(t,e){try{const i=t[e]();return void 0===i?Promise.resolve():i}catch(t){return Promise.reject(t)}}function Pd(t){t.activeEl=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement||null,t.isActive=null!==t.activeEl}var zd={isCapable:!1,isActive:!1,activeEl:null,request(t){if(!0===this.isCapable){const e=t||document.documentElement;if(e!==this.activeEl){return(!0===d.is.ie&&null!==this.activeEl&&e.contains(this.activeEl)?this.exit():Promise.resolve()).then(()=>Bd(e,Ad.request)).catch(t=>null!==this.activeEl?this.exit().then(()=>Bd(e,Ad.request)):Promise.reject(t)).then(t=>(Pd(this),t))}}return this.__getErr()},exit(){return!0===this.isCapable&&!0===this.isActive?Bd(document,Ad.exit).then(t=>(Pd(this),this.isActive?this.exit():t)):this.__getErr()},toggle(t){const e=t||document.documentElement;return this.activeEl===e?this.exit():this.request(e)},install({$q:t}){t.fullscreen=this,this.__getErr=(()=>Promise.resolve()),!0!==i&&(Ad.request=["requestFullscreen","msRequestFullscreen","mozRequestFullScreen","webkitRequestFullscreen"].find(t=>void 0!==document.documentElement[t]),this.isCapable=void 0!==Ad.request,!1!==this.isCapable?(Ad.exit=["exitFullscreen","msExitFullscreen","mozCancelFullScreen","webkitExitFullscreen"].find(t=>document[t]),Pd(this),["onfullscreenchange","onmsfullscreenchange","onwebkitfullscreenchange"].forEach(t=>{document[t]=(()=>{Pd(this)})}),e.default.util.defineReactive(this,"isActive",this.isActive),e.default.util.defineReactive(this,"activeEl",this.activeEl)):this.__getErr=(()=>Promise.reject("Not capable")))}},Id={appVisible:!1,install({$q:t}){if(!0===i)return void(this.appVisible=t.appVisible=!0);let s,o;void 0!==document.hidden?(s="hidden",o="visibilitychange"):void 0!==document.msHidden?(s="msHidden",o="msvisibilitychange"):void 0!==document.webkitHidden&&(s="webkitHidden",o="webkitvisibilitychange");const n=()=>{this.appVisible=t.appVisible=!document[s]};n(),o&&void 0!==document[s]&&(e.default.util.defineReactive(t,"appVisible",this.appVisible),document.addEventListener(o,n,!1))}};const Od={staticClass:"row items-stretch justify-start",attrs:{role:"list"}},Rd={attrs:{role:"list"}},Fd={tabindex:0,role:"listitem"};var Dd=e.default.extend({name:"BottomSheetPlugin",mixins:[ce,At],inheritAttrs:!1,props:{title:String,message:String,actions:Array,grid:Boolean,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},computed:{dialogProps(){return{...this.qAttrs,position:"bottom"}}},methods:{show(){this.$refs.dialog.show()},hide(){this.$refs.dialog.hide()},onOk(t){this.$emit("ok",t),this.hide()},__getGrid(t){return this.actions.map(e=>{const i=e.avatar||e.img;return void 0===e.label?t(Tr,{staticClass:"col-all",props:{dark:this.dark}}):t("div",{staticClass:"q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position",class:e.classes,attrs:Fd,on:{click:()=>this.onOk(e),keyup:t=>{13===t.keyCode&&this.onOk(e)}}},[t("div",{staticClass:"q-focus-helper"}),e.icon?t(le,{props:{name:e.icon,color:e.color}}):i?t("img",{attrs:{src:i},staticClass:e.avatar?"q-bottom-sheet__avatar":null}):t("div",{staticClass:"q-bottom-sheet__empty-icon"}),t("div",[e.label])])})},__getList(t){return this.actions.map(e=>{const i=e.avatar||e.img;return void 0===e.label?t(Tr,{props:{spaced:!0,dark:this.dark}}):t(dr,{staticClass:"q-bottom-sheet__item",class:e.classes,props:{tabindex:0,clickable:!0,dark:this.dark},on:{click:()=>this.onOk(e),keyup:t=>{13===t.keyCode&&this.onOk(e)}}},[t(cr,{props:{avatar:!0}},[e.icon?t(le,{props:{name:e.icon,color:e.color}}):i?t("img",{attrs:{src:i},staticClass:e.avatar?"q-bottom-sheet__avatar":null}):null]),t(cr,[e.label])])})}},render(t){const e=[];return this.title&&e.push(t(ks,{staticClass:"q-dialog__title"},[this.title])),this.message&&e.push(t(ks,{staticClass:"q-dialog__message"},[this.message])),e.push(!0===this.grid?t("div",Od,this.__getGrid(t)):t("div",Rd,this.__getList(t))),t(sr,{key:"dialog",ref:"dialog",props:this.dialogProps,on:$t(this,"hide",{hide:()=>{this.$emit("hide")}})},[t(Cs,{staticClass:`q-bottom-sheet q-bottom-sheet--${!0===this.grid?"grid":"list"}`+` q-bottom-sheet--${this.darkSuffix} q-${this.darkSuffix}`,style:this.cardStyle,class:this.cardClass},e)])}});const Vd={onOk:()=>Vd,okCancel:()=>Vd,hide:()=>Vd,update:()=>Vd};let Nd;function Hd(t){return({className:s,class:o,style:n,component:r,root:a,parent:l,...h})=>{if(!0===i)return Vd;void 0!==o&&(h.cardClass=o),void 0!==n&&(h.cardStyle=n);const d=void 0!==r;let c,u;!0===d?c=r:(c=t,u=h);const p=[],m=[],g={onOk:t=>(p.push(t),g),onCancel:t=>(m.push(t),g),onDismiss:t=>(p.push(t),m.push(t),g),hide:()=>(b.$refs.dialog.hide(),g),update:({className:t,class:e,style:i,component:s,root:o,parent:n,...r})=>(null!==b&&(void 0!==e&&(r.cardClass=e),void 0!==i&&(r.cardStyle=i),!0===d?Object.assign(h,r):(!function t(e,i){for(const s in i)"spinner"!==s&&Object(i[s])===i[s]?(e[s]=Object(e[s])!==e[s]?{}:{...e[s]},t(e[s],i[s])):e[s]=i[s]}(h,r),u={...h}),b.$forceUpdate()),g)},f=document.createElement("div");ki(document.body).appendChild(f);let _=!1;const v={ok:t=>{_=!0,p.forEach(e=>{e(t)})},hide:()=>{b.$destroy(),b.$el.remove(),b=null,!0!==_&&m.forEach(t=>{t()})}};let b=new e.default({name:"QGlobalDialog",el:f,parent:function(t,e){if(void 0!==t)return t;if(void 0!==e)return e;if(void 0===Nd){const t=document.getElementById("q-app");t&&t.__vue__&&(Nd=t.__vue__.$root)}return Nd}(l,a),render:t=>t(c,{ref:"dialog",props:h,attrs:u,on:v}),mounted(){void 0!==this.$refs.dialog?this.$refs.dialog.show():v["hook:mounted"]=(()=>{void 0!==this.$refs.dialog&&this.$refs.dialog.show()})}});return g}}var jd={install({$q:t}){this.create=t.bottomSheet=Hd(Dd)}};function Qd(t){return encodeURIComponent(t)}function Wd(t){return decodeURIComponent(t)}function Ud(t){return Qd("string"==typeof t&&"j:"!==t.slice(0,2)?t:"j:"+JSON.stringify(t))}function Yd(t,e){if(""===t)return t;if(0===t.indexOf('"')&&(t=t.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")),"j:"===(t=Wd(t.replace(/\+/g," "))).slice(0,2))try{return JSON.parse(t.slice(2),e)}catch(t){}try{const i=JSON.parse(t,e);return void 0!==e||i===Object(i)||!0===Array.isArray(i)?i:t}catch(e){return t}}function Kd(t){const e=new Date;return e.setMilliseconds(e.getMilliseconds()+t),e.toUTCString()}function Gd(t,e,i={},s){let o,n;void 0!==i.expires&&("[object Date]"===Object.prototype.toString.call(i.expires)?o=i.expires.toUTCString():"string"==typeof i.expires?o=function(t){let e=0;const i=t.match(/(\d+)d/),s=t.match(/(\d+)h/),o=t.match(/(\d+)m/),n=t.match(/(\d+)s/);return i&&(e+=864e5*i[1]),s&&(e+=36e5*s[1]),o&&(e+=6e4*o[1]),n&&(e+=1e3*n[1]),0===e?t:Kd(e)}(i.expires):(n=parseFloat(i.expires),o=!1===isNaN(n)?Kd(864e5*n):i.expires));const r=`${Qd(t)}=${Ud(e)}`,a=[r,void 0!==o?"; Expires="+o:"",i.path?"; Path="+i.path:"",i.domain?"; Domain="+i.domain:"",i.sameSite?"; SameSite="+i.sameSite:"",i.httpOnly?"; HttpOnly":"",i.secure?"; Secure":"",i.other?"; "+i.other:""].join("");if(s){s.req.qCookies?s.req.qCookies.push(a):s.req.qCookies=[a],s.res.setHeader("Set-Cookie",s.req.qCookies);let e=s.req.headers.cookie||"";if(void 0!==o&&n<0){const i=Xd(t,s,void 0,!0);if(void 0!==i){const s=`${Qd(t)}=${Ud(i)}`;e=e.replace(`${s}; `,"").replace(`; ${s}`,"").replace(`${s}`,"")}}else e=e?`${r}; ${e}`:a;s.req.headers.cookie=e}else document.cookie=a}function Xd(t,e,i,s){const o=e?e.req.headers:document,n=o.cookie?o.cookie.split("; "):[],r=n.length;let a,l,h,d=t?null:{},c=0;for(;cXd(e,t,i),set:(e,i,s)=>Gd(e,i,s,t),has:(e,i)=>(function(t,e,i){return null!==Xd(t,e,i)})(e,t,i),remove:(e,i)=>(function(t,e,i){Gd(t,"",{expires:-1,...e},i)})(e,i,t),getAll:e=>Xd(null,t,e)}}var Jd={parseSSR(t){return void 0!==t?Zd(t):this},install({$q:t,queues:e}){!0===i?e.server.push((t,e)=>{t.cookies=Zd(e.ssr)}):(Object.assign(this,Zd()),t.cookies=this)}},tc=e.default.extend({name:"DialogPlugin",mixins:[ce,At],inheritAttrs:!1,props:{title:String,message:String,prompt:Object,options:Object,progress:[Boolean,Object],html:Boolean,ok:{type:[String,Object,Boolean],default:!0},cancel:[String,Object,Boolean],focus:{type:String,default:"ok",validator:t=>["ok","cancel","none"].includes(t)},stackButtons:Boolean,color:String,cardClass:[String,Array,Object],cardStyle:[String,Array,Object]},computed:{classes(){return"q-dialog-plugin"+` q-dialog-plugin--${this.darkSuffix} q-${this.darkSuffix}`+(!1!==this.progress?" q-dialog-plugin--progress":"")},spinner(){if(!1!==this.progress)return!0===Es(this.progress)?{component:this.progress.spinner||$e,props:{color:this.progress.color||this.vmColor}}:{component:$e,props:{color:this.vmColor}}},hasForm(){return void 0!==this.prompt||void 0!==this.options},okLabel(){return!0===Es(this.ok)?this.$q.lang.label.ok:!0===this.ok?this.$q.lang.label.ok:this.ok},cancelLabel(){return!0===Es(this.cancel)?this.$q.lang.label.cancel:!0===this.cancel?this.$q.lang.label.cancel:this.cancel},vmColor(){return this.color||`dialog-plugin-${this.darkSuffix}`},okDisabled(){return void 0!==this.prompt?void 0!==this.prompt.isValid&&!0!==this.prompt.isValid(this.prompt.model):void 0!==this.options?void 0!==this.options.isValid&&!0!==this.options.isValid(this.options.model):void 0},okProps(){return{color:this.vmColor,label:this.okLabel,ripple:!1,disable:this.okDisabled,...!0===Es(this.ok)?this.ok:{flat:!0}}},cancelProps(){return{color:this.vmColor,label:this.cancelLabel,ripple:!1,...!0===Es(this.cancel)?this.cancel:{flat:!0}}}},methods:{show(){this.$refs.dialog.show()},hide(){this.$refs.dialog.hide()},getPrompt(t){return[t(ca,{key:"prompt",props:{value:this.prompt.model,type:this.prompt.type,label:this.prompt.label,stackLabel:this.prompt.stackLabel,outlined:this.prompt.outlined,filled:this.prompt.filled,standout:this.prompt.standout,rounded:this.prompt.rounded,square:this.prompt.square,counter:this.prompt.counter,maxlength:this.prompt.maxlength,prefix:this.prompt.prefix,suffix:this.prompt.suffix,color:this.vmColor,dense:!0,autofocus:!0,dark:this.dark},attrs:this.prompt.attrs,on:$t(this,"prompt",{input:t=>{this.prompt.model=t},keyup:t=>{!0!==this.okDisabled&&"textarea"!==this.prompt.type&&!0===ze(t,13)&&this.onOk()}})})]},getOptions(t){return[t(Ma,{key:"opts",props:{value:this.options.model,type:this.options.type,color:this.vmColor,inline:this.options.inline,options:this.options.items,dark:this.dark},on:$t(this,"opts",{input:t=>{this.options.model=t}})})]},getButtons(t){const e=[];if(this.cancel&&e.push(t(Ze,{key:"cancel",props:this.cancelProps,attrs:{"data-autofocus":"cancel"===this.focus&&!0!==this.hasForm},on:$t(this,"cancel",{click:this.onCancel})})),this.ok&&e.push(t(Ze,{key:"ok",props:this.okProps,attrs:{"data-autofocus":"ok"===this.focus&&!0!==this.hasForm},on:$t(this,"ok",{click:this.onOk})})),e.length>0)return t(qs,{staticClass:!0===this.stackButtons?"items-end":null,props:{vertical:this.stackButtons,align:"right"}},e)},onOk(){this.$emit("ok",Fa(this.getData())),this.hide()},onCancel(){this.hide()},getData(){return void 0!==this.prompt?this.prompt.model:void 0!==this.options?this.options.model:void 0},getSection(t,e,i){return!0===this.html?t(ks,{staticClass:e,domProps:{innerHTML:i}}):t(ks,{staticClass:e},[i])}},render(t){const e=[];return this.title&&e.push(this.getSection(t,"q-dialog__title",this.title)),!1!==this.progress&&e.push(t(ks,{staticClass:"q-dialog__progress"},[t(this.spinner.component,{props:this.spinner.props})])),this.message&&e.push(this.getSection(t,"q-dialog__message",this.message)),void 0!==this.prompt?e.push(t(ks,{staticClass:"scroll q-dialog-plugin__form"},this.getPrompt(t))):void 0!==this.options&&e.push(t(Tr,{props:{dark:this.dark}}),t(ks,{staticClass:"scroll q-dialog-plugin__form"},this.getOptions(t)),t(Tr,{props:{dark:this.dark}})),(this.ok||this.cancel)&&e.push(this.getButtons(t)),t(sr,{key:"dialog",ref:"dialog",props:{...this.qAttrs,value:this.value},on:$t(this,"hide",{hide:()=>{this.$emit("hide")}})},[t(Cs,{staticClass:this.classes,style:this.cardStyle,class:this.cardClass,props:{dark:this.dark}},e)])}}),ec={install({$q:t}){this.create=t.dialog=Hd(tc)}},ic={isActive:!1,start:m,stop:m,increment:m,setDefaults:m,install({$q:t,cfg:s}){if(t.loadingBar=this,!0===i)return;const o=void 0!==s.loadingBar?{...s.loadingBar}:{},n={start:()=>{this.isActive=!0},stop:()=>{this.isActive=!1}},r=new e.default({name:"LoadingBar",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},render:t=>t(Rt,{ref:"bar",props:o,on:n})}).$mount().$refs.bar;Object.assign(this,{start:r.start,stop:r.stop,increment:r.increment,setDefaults:t=>{!0===Es(t)&&Object.assign(o,t),r.$parent.$forceUpdate()}}),e.default.util.defineReactive(this,"isActive",this.isActive),e.default.util.defineReactive(r,"isActive",this.isActive),r.setDefaults=this.setDefaults,document.body.appendChild(r.$parent.$el)}};let sc,oc,nc=0,rc={},ac={};const lc={group:"__default_quasar_group__",delay:0,message:!1,spinnerSize:80,spinnerColor:"white",messageColor:"white",backgroundColor:"black",spinner:$e,customClass:""},hc={...lc};const dc={isActive:!1,show(t){if(!0===i)return;rc=function(t){if(t&&void 0!==t.group&&void 0!==ac[t.group])return Object.assign(ac[t.group],t);const e=!0===Es(t)&&!0===t.ignoreDefaults?{...lc,...t}:{...hc,...t};return ac[e.group]=e,e}(t);const{group:s}=rc;return rc.customClass+=` text-${rc.backgroundColor}`,this.isActive=!0,void 0!==sc?(rc.uid=nc,sc.$forceUpdate()):(rc.uid=++nc,clearTimeout(oc),oc=setTimeout(()=>{oc=void 0;const t=document.createElement("div");document.body.appendChild(t),sc=new e.default({name:"QLoading",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},el:t,mounted(){Jn(!0)},render:t=>t("transition",{key:"tr",props:{name:"q-transition--fade",appear:!0},on:$t(this,"tr",{"after-leave":()=>{!0!==this.isActive&&void 0!==sc&&(Jn(!1),sc.$destroy(),sc.$el.remove(),sc=void 0)}})},[!0===this.isActive?t("div",{staticClass:"q-loading fullscreen column flex-center z-max",key:rc.uid,class:rc.customClass.trim()},[t(rc.spinner,{props:{color:rc.spinnerColor,size:rc.spinnerSize}}),rc.message&&t("div",{class:`text-${rc.messageColor}`,domProps:{[!0===rc.sanitize?"textContent":"innerHTML"]:rc.message}})||void 0]):null])})},rc.delay)),t=>{void 0!==t&&Object(t)===t?this.show({...t,group:s}):this.hide(s)}},hide(t){if(!0===this.isActive){if(void 0===t)ac={};else{if(void 0===ac[t])return;{delete ac[t];const e=Object.keys(ac);if(0!==e.length){const t=e[e.length-1];return void this.show({group:t})}}}void 0!==oc&&(clearTimeout(oc),oc=void 0),this.isActive=!1}},setDefaults(t){!0===Es(t)&&Object.assign(hc,t)},install({$q:t,cfg:{loading:e}}){this.setDefaults(e),t.loading=this}};let cc,uc;function pc(t){t.title&&(t.title=t.titleTemplate?t.titleTemplate(t.title):t.title,delete t.titleTemplate),[["meta","content"],["link","href"]].forEach(e=>{const i=t[e[0]],s=e[1];for(const t in i){const e=i[t];e.template&&(1===Object.keys(e).length?delete i[t]:(e[s]=e.template(e[s]||""),delete e.template))}})}function mc(t,e){if(Object.keys(t).length!==Object.keys(e).length)return!0;for(const i in t)if(t[i]!==e[i])return!0}function gc(t){return!1===["class","style"].includes(t)}function fc(t){return!1===["lang","dir"].includes(t)}function _c(t,e){!0!==t._inactive&&(!0===xc(t)&&(xr(!0,e,t.__qMeta),!0===t.$options.meta.stopPropagation)||t.$children.forEach(t=>{_c(t,e)}))}function vc(){!0===uc&&(uc=!1,this.$root.__currentMeta=window.__Q_META__);const t={title:"",titleTemplate:null,meta:{},link:{},script:{},htmlAttr:{},bodyAttr:{}};_c(this.$root,t),pc(t),function({add:t,remove:e}){t.title&&(document.title=t.title),Object.keys(e).length>0&&(["meta","link","script"].forEach(t=>{e[t].forEach(e=>{document.head.querySelector(`${t}[data-qmeta="${e}"]`).remove()})}),e.htmlAttr.filter(fc).forEach(t=>{document.documentElement.removeAttribute(t)}),e.bodyAttr.filter(gc).forEach(t=>{document.body.removeAttribute(t)})),["meta","link","script"].forEach(e=>{const i=t[e];for(const t in i){const s=document.createElement(e);for(const e in i[t])"innerHTML"!==e&&s.setAttribute(e,i[t][e]);s.setAttribute("data-qmeta",t),"script"===e&&(s.innerHTML=i[t].innerHTML||""),document.head.appendChild(s)}}),Object.keys(t.htmlAttr).filter(fc).forEach(e=>{document.documentElement.setAttribute(e,t.htmlAttr[e]||"")}),Object.keys(t.bodyAttr).filter(gc).forEach(e=>{document.body.setAttribute(e,t.bodyAttr[e]||"")})}(function(t,e){const i={},s={};return void 0===t?{add:e,remove:s}:(t.title!==e.title&&(i.title=e.title),["meta","link","script","htmlAttr","bodyAttr"].forEach(o=>{const n=t[o],r=e[o];if(s[o]=[],void 0!==n&&null!==n){i[o]={};for(const t in n)!1===r.hasOwnProperty(t)&&s[o].push(t);for(const t in r)!1===n.hasOwnProperty(t)?i[o][t]=r[t]:!0===mc(n[t],r[t])&&(s[o].push(t),i[o][t]=r[t])}else i[o]=r}),{add:i,remove:s})}(this.$root.__currentMeta,t)),this.$root.__currentMeta=t}function bc(t){return e=>{const i=t[e];return e+(!0!==i&&void 0!==i?`="${i}"`:"")}}function yc(t,e,i){const s={title:"",titleTemplate:null,meta:{},link:{},htmlAttr:{},bodyAttr:{},noscript:{}};_c(t,s),pc(s);const o=void 0!==i&&void 0!==i.nonce?` nonce="${i.nonce}"`:"",n={"%%Q_HTML_ATTRS%%":Object.keys(s.htmlAttr).filter(fc).map(bc(s.htmlAttr)).join(" "),"%%Q_HEAD_TAGS%%":function(t){let e="";return t.title&&(e+=`${t.title}`),["meta","link","script"].forEach(i=>{const s=t[i];for(const t in s){const o=Object.keys(s[t]).filter(t=>"innerHTML"!==t).map(bc(s[t]));e+=`<${i} ${o.join(" ")} data-qmeta="${t}">`,"script"===i&&(e+=`${s[t].innerHTML||""}<\/script>`)}}),e}(s),"%%Q_BODY_ATTRS%%":Object.keys(s.bodyAttr).filter(gc).map(bc(s.bodyAttr)).join(" "),"%%Q_BODY_TAGS%%":Object.keys(s.noscript).map(t=>``).join("")+`window.__Q_META__=${delete s.noscript&&JSON.stringify(s)}<\/script>`};return Object.keys(n).forEach(t=>{e=e.replace(t,n[t])}),e}function Sc(){"function"==typeof this.$options.meta?(void 0===this.$options.computed&&(this.$options.computed={}),this.$options.computed.__qMeta=this.$options.meta):!0===xc(this)&&(this.__qMeta=this.$options.meta)}function xc(t){return void 0!==t.$options.meta&&null!==t.$options.meta}function wc(){!0===xc(this)&&this.__qMetaUpdate()}!1===i&&e.default.util.defineReactive(dc,"isActive",dc.isActive);var Cc={install({queues:t}){!0===i?(e.default.prototype.$getMetaHTML=(t=>(e,i)=>yc(t,e,i)),e.default.mixin({beforeCreate:Sc}),t.server.push((t,e)=>{e.ssr.Q_HTML_ATTRS+=" %%Q_HTML_ATTRS%%",Object.assign(e.ssr,{Q_HEAD_TAGS:"%%Q_HEAD_TAGS%%",Q_BODY_ATTRS:"%%Q_BODY_ATTRS%%",Q_BODY_TAGS:"%%Q_BODY_TAGS%%"})})):(uc=o,e.default.mixin({beforeCreate:Sc,created(){!0===xc(this)&&(this.__qMetaUnwatch=this.$watch("__qMeta",this.__qMetaUpdate))},activated:wc,deactivated:wc,beforeMount:wc,destroyed(){!0===xc(this)&&(this.__qMetaUnwatch(),this.__qMetaUpdate())},methods:{__qMetaUpdate(){clearTimeout(cc),cc=setTimeout(vc.bind(this),50)}}}))}};let kc,qc=0;const $c={},Tc={},Mc={},Lc={},Ec=/^\s*$/,Ac=["top-left","top-right","bottom-left","bottom-right","top","bottom","left","right","center"],Bc=["top-left","top-right","bottom-left","bottom-right"],Pc={positive:{icon:t=>t.iconSet.type.positive,color:"positive"},negative:{icon:t=>t.iconSet.type.negative,color:"negative"},warning:{icon:t=>t.iconSet.type.warning,color:"warning",textColor:"dark"},info:{icon:t=>t.iconSet.type.info,color:"info"},ongoing:{group:!1,timeout:0,spinner:!0,color:"grey-8"}};function zc(t,e,i){if(!t)return Oc("parameter required");let s;const o={textColor:"white"};if(!0!==t.ignoreDefaults&&Object.assign(o,$c),!1===Es(t)&&(o.type&&Object.assign(o,Pc[o.type]),t={message:t}),Object.assign(o,Pc[t.type||o.type],t),"function"==typeof o.icon&&(o.icon=o.icon(e.$q)),o.spinner?!0===o.spinner&&(o.spinner=$e):o.spinner=!1,o.meta={hasMedia:Boolean(!1!==o.spinner||o.icon||o.avatar),hasText:Ic(o.message)||Ic(o.caption)},o.position){if(!1===Ac.includes(o.position))return Oc("wrong position",t)}else o.position="bottom";if(void 0===o.timeout)o.timeout=5e3;else{const e=parseInt(o.timeout,10);if(isNaN(e)||e<0)return Oc("wrong timeout",t);o.timeout=e}0===o.timeout?o.progress=!1:!0===o.progress&&(o.meta.progressClass="q-notification__progress"+(o.progressClass?` ${o.progressClass}`:""),o.meta.progressStyle={animationDuration:`${o.timeout+1e3}ms`});const n=(!0===Array.isArray(t.actions)?t.actions:[]).concat(!0!==t.ignoreDefaults&&!0===Array.isArray($c.actions)?$c.actions:[]).concat(void 0!==Pc[t.type]&&!0===Array.isArray(Pc[t.type].actions)?Pc[t.type].actions:[]),{closeBtn:r}=o;if(r&&n.push({label:"string"==typeof r?r:e.$q.lang.label.close}),o.actions=n.map(({handler:t,noDismiss:e,style:i,class:s,attrs:o,...n})=>({staticClass:s,style:i,props:{flat:!0,...n},attrs:o,on:{click:"function"==typeof t?()=>{t(),!0!==e&&a()}:()=>{a()}}})),void 0===o.multiLine&&(o.multiLine=o.actions.length>1),Object.assign(o.meta,{staticClass:"q-notification row items-stretch"+` q-notification--${!0===o.multiLine?"multi-line":"standard"}`+(void 0!==o.color?` bg-${o.color}`:"")+(void 0!==o.textColor?` text-${o.textColor}`:"")+(void 0!==o.classes?` ${o.classes}`:""),wrapperClass:"q-notification__wrapper col relative-position border-radius-inherit "+(!0===o.multiLine?"column no-wrap justify-center":"row items-center"),contentClass:"q-notification__content row items-center"+(!0===o.multiLine?"":" col"),leftClass:!0===o.meta.hasText?"additional":"single",attrs:{role:"alert",...o.attrs}}),!1===o.group?(o.group=void 0,o.meta.group=void 0):(void 0!==o.group&&!0!==o.group||(o.group=[o.message,o.caption,o.multiline].concat(o.actions.map(({props:t})=>`${t.label}*${t.icon}`)).join("|")),o.meta.group=o.group+"|"+o.position),0===o.actions.length?o.actions=void 0:o.meta.actionsClass="q-notification__actions row items-center "+(!0===o.multiLine?"justify-end":"col-auto")+(!0===o.meta.hasMedia?" q-notification__actions--with-media":""),void 0!==i){clearTimeout(i.notif.meta.timer),o.meta.uid=i.notif.meta.uid;const t=Mc[o.position].indexOf(i.notif);Mc[o.position][t]=o}else{const e=Tc[o.meta.group];if(void 0===e){if(o.meta.uid=qc++,o.meta.badge=1,-1!==["left","right","center"].indexOf(o.position))Mc[o.position].splice(Math.floor(Mc[o.position].length/2),0,o);else{const t=o.position.indexOf("top")>-1?"unshift":"push";Mc[o.position][t](o)}void 0!==o.group&&(Tc[o.meta.group]=o)}else{if(clearTimeout(e.meta.timer),void 0!==o.badgePosition){if(!1===Bc.includes(o.badgePosition))return Oc("wrong badgePosition",t)}else o.badgePosition=`top-${o.position.indexOf("left")>-1?"right":"left"}`;o.meta.uid=e.meta.uid,o.meta.badge=e.meta.badge+1,o.meta.badgeClass=`q-notification__badge q-notification__badge--${o.badgePosition}`+(void 0!==o.badgeColor?` bg-${o.badgeColor}`:"")+(void 0!==o.badgeTextColor?` text-${o.badgeTextColor}`:"")+(o.badgeClass?` ${o.badgeClass}`:"");const i=Mc[o.position].indexOf(e);Mc[o.position][i]=Tc[o.meta.group]=o}}const a=()=>{!function(t,e){clearTimeout(t.meta.timer);const i=Mc[t.position].indexOf(t);if(-1!==i){void 0!==t.group&&delete Tc[t.meta.group];const s=e.$refs[""+t.meta.uid];if(s){const{width:t,height:e}=getComputedStyle(s);s.style.left=`${s.offsetLeft}px`,s.style.width=t,s.style.height=e}Mc[t.position].splice(i,1),e.$forceUpdate(),"function"==typeof t.onDismiss&&t.onDismiss()}}(o,e),s=void 0};return e.$forceUpdate(),o.timeout>0&&(o.meta.timer=setTimeout(()=>{a()},o.timeout+1e3)),void 0!==o.group?e=>{void 0!==e?Oc("trying to update a grouped one which is forbidden",t):a()}:(s={dismiss:a,config:t,notif:o},void 0===i?t=>{if(void 0!==s)if(void 0===t)s.dismiss();else{zc(Object.assign({},s.config,t,{group:!1,position:o.position}),e,s)}}:void Object.assign(i,s))}function Ic(t){return void 0!==t&&null!==t&&!0!==Ec.test(t)}function Oc(t,e){return console.error(`Notify: ${t}`,e),!1}const Rc={name:"QNotifications",devtools:{hide:!0},beforeCreate(){void 0===this._routerRoot&&(this._routerRoot={})},render:t=>t("div",{staticClass:"q-notifications"},Ac.map(e=>t("transition-group",{key:e,staticClass:Lc[e],tag:"div",props:{name:`q-notification--${e}`,mode:"out-in"}},Mc[e].map(e=>{const{meta:i}=e,s=[];if(!0===i.hasMedia&&(!1!==e.spinner?s.push(t(e.spinner,{staticClass:"q-notification__spinner q-notification__spinner--"+i.leftClass,props:{color:e.spinnerColor,size:e.spinnerSize}})):e.icon?s.push(t(le,{staticClass:"q-notification__icon q-notification__icon--"+i.leftClass,attrs:{role:"img"},props:{name:e.icon,color:e.iconColor,size:e.iconSize}})):e.avatar&&s.push(t(he,{staticClass:"q-notification__avatar q-notification__avatar--"+i.leftClass},[t("img",{attrs:{src:e.avatar,"aria-hidden":"true"}})]))),!0===i.hasText){let i;const o={staticClass:"q-notification__message col"};if(!0===e.html)o.domProps={innerHTML:e.caption?`
${e.message}
${e.caption}
`:e.message};else{const s=[e.message];i=e.caption?[t("div",s),t("div",{staticClass:"q-notification__caption"},[e.caption])]:s}s.push(t("div",o,i))}const o=[t("div",{staticClass:i.contentClass},s)];return!0===e.progress&&o.push(t("div",{key:`${i.uid}|p|${i.badge}`,staticClass:i.progressClass,style:i.progressStyle})),void 0!==e.actions&&o.push(t("div",{staticClass:i.actionsClass},e.actions.map(e=>t(Ze,{...e})))),i.badge>1&&o.push(t("div",{key:`${i.uid}|${i.badge}`,staticClass:i.badgeClass,style:e.badgeStyle},[i.badge])),t("div",{ref:""+i.uid,key:i.uid,staticClass:i.staticClass,attrs:i.attrs},[t("div",{staticClass:i.wrapperClass},o)])})))),mounted(){if(void 0!==this.$q.fullscreen&&!0===this.$q.fullscreen.isCapable){const t=()=>{const t=Ae(this.$q.fullscreen.activeEl);this.$el.parentElement!==t&&t.appendChild(this.$el)};this.unwatchFullscreen=this.$watch("$q.fullscreen.activeEl",j(t,50)),!0===this.$q.fullscreen.isActive&&t()}},beforeDestroy(){void 0!==this.unwatchFullscreen&&this.unwatchFullscreen()}};var Fc={setDefaults(t){!0!==i&&!0===Es(t)&&Object.assign($c,t)},registerType(t,e){!0!==i&&!0===Es(e)&&(Pc[t]=e)},install({$q:t}){if(t.notify=this.create=!0===i?m:t=>zc(t,kc),t.notify.setDefaults=this.setDefaults,t.notify.registerType=this.registerType,void 0!==t.config.notify&&this.setDefaults(t.config.notify),!0!==i){Ac.forEach(t=>{Mc[t]=[];const e=!0===["left","center","right"].includes(t)?"center":t.indexOf("top")>-1?"top":"bottom",i=t.indexOf("left")>-1?"start":t.indexOf("right")>-1?"end":"center",s=["left","right"].includes(t)?`items-${"left"===t?"start":"end"} justify-center`:"center"===t?"flex-center":`items-${i}`;Lc[t]=`q-notifications__list q-notifications__list--${e} fixed column no-wrap ${s}`});const t=document.createElement("div");document.body.appendChild(t),(kc=new e.default(Rc)).$mount(t)}}};function Dc(){const t=()=>null;return{has:()=>!1,getLength:()=>0,getItem:t,getIndex:t,getKey:t,getAll:()=>{},getAllKeys:()=>[],set:m,remove:m,clear:m,isEmpty:()=>!0}}function Vc(t){const e=window[t+"Storage"],i=(t,i)=>{const s=e.getItem(t);return s?function(t,e){if(t.length<9)return t;const i=t.substr(0,8),s=t.substring(9);switch(i){case"__q_date":return new Date(s);case"__q_expr":return new RegExp(s);case"__q_numb":return Number(s);case"__q_bool":return Boolean("1"===s);case"__q_strn":return""+s;case"__q_objt":return JSON.parse(s,e);default:return t}}(s,i):null};return{has:(t,i)=>null!==e.getItem(t,i),getLength:()=>e.length,getItem:i,getIndex:(t,s)=>tt{let s;const o={},n=e.length;for(let r=0;r{const t=[],i=e.length;for(let s=0;s{e.setItem(t,!0===As(i=i)?"__q_date|"+i.toUTCString():!0===Bs(i)?"__q_expr|"+i.source:"number"==typeof i?"__q_numb|"+i:"boolean"==typeof i?"__q_bool|"+(i?"1":"0"):"string"==typeof i?"__q_strn|"+i:"function"==typeof i?"__q_strn|"+i.toString():i===Object(i)?"__q_objt|"+JSON.stringify(i):i)},remove:t=>{e.removeItem(t)},clear:()=>{e.clear()},isEmpty:()=>0===e.length};var s}var Nc={install({$q:t}){const e=!0===i||!1===d.has.webStorage?Dc():Vc("local");t.localStorage=e,Object.assign(this,e)}},Hc={install({$q:t}){const e=!0===i||!1===d.has.webStorage?Dc():Vc("session");t.sessionStorage=e,Object.assign(this,e)}},jc=Object.freeze({__proto__:null,AddressbarColor:Ed,AppFullscreen:zd,AppVisibility:Id,BottomSheet:jd,Cookies:Jd,Dark:Y,Dialog:ec,Interaction:H,LoadingBar:ic,Loading:dc,Meta:Cc,Notify:Fc,Platform:c,Screen:U,LocalStorage:Nc,SessionStorage:Hc});function Qc(t){setTimeout(()=>{window.URL.revokeObjectURL(t.href)},1e4),t.remove()}function Wc(t,i,s){let o=window.open;if(!0===c.is.cordova){if(void 0!==cordova&&void 0!==cordova.InAppBrowser&&void 0!==cordova.InAppBrowser.open)o=cordova.InAppBrowser.open;else if(void 0!==navigator&&void 0!==navigator.app)return navigator.app.loadUrl(t,{openExternal:!0})}else if(void 0!==e.default.prototype.$q.electron)return e.default.prototype.$q.electron.shell.openExternal(t);const n=o(t,"_blank",function(t){const e=Object.assign({noopener:!0},t),i=[];return Object.keys(e).forEach(t=>{!0===e[t]&&i.push(t)}),i.join(",")}(s));if(n)return c.is.desktop&&n.focus(),n;i&&i()}var Uc=Object.freeze({__proto__:null,clone:Fa,colors:ut,copyToClipboard:function(t){return void 0!==navigator.clipboard?navigator.clipboard.writeText(t):new Promise((e,i)=>{const s=function(t){const e=document.createElement("textarea");e.value=t,e.contentEditable=!0,e.style.position="fixed",document.body.appendChild(e),e.focus(),e.select();const i=document.execCommand("copy");return e.remove(),i}(t);s?e(!0):i(s)})},date:Pn,debounce:j,debouncedRef:function(t,e,i=250){const s={get value(){const i=t[e];return i!==s.propValue&&(s.propValue=i,s.internalValue=i,void 0!==s.timer&&clearTimeout(s.timer),s.timer=void 0),s.internalValue},set value(o){s.internalValue!==o&&(s.internalValue=o,void 0!==s.timer&&clearTimeout(s.timer),s.timer=setTimeout(()=>{t[e]=o,s.timer=void 0},i))},destroy(){void 0!==s.timer&&(clearTimeout(s.timer),s.timer=void 0,t[e]=s.internalValue)}};return t.$once("hook:beforeDestroy",s.destroy),s.propValue=NaN,s.internalValue=NaN,s},dom:Be,event:T,noop:m,exportFile:function(t,e,i){const s=new Blob([e],{type:i||"text/plain"});if(window.navigator.msSaveOrOpenBlob)return window.navigator.msSaveOrOpenBlob(s,t);const o=document.createElement("a");o.download=t,o.href=window.URL.createObjectURL(s),o.classList.add("hidden"),o.style.position="fixed",document.body.appendChild(o);try{return o.click(),Qc(o),!0}catch(t){return Qc(o),t}},extend:xr,format:qt,frameDebounce:Ia,is:zs,morph:Xh,openURL:(t,e,i)=>{if(!0!==c.is.ios||void 0===window.SafariViewController)return Wc(t,e,i);window.SafariViewController.isAvailable(s=>{s?window.SafariViewController.show({url:t},m,e):Wc(t,e,i)})},patterns:go,runSequentialPromises:function(t,{threadsNumber:e=1,abortOnFail:i=!0}={}){let s=-1,o=!1;const{isList:n,totalJobs:r,resultAggregator:a,resultKeys:l}=function(t){const e=Array.isArray(t);if(!0===e){const i=t.length;return{isList:e,totalJobs:i,resultAggregator:Array(i).fill(null)}}const i=Object.keys(t),s={};return i.forEach(t=>{s[t]=null}),{isList:e,totalJobs:i.length,resultAggregator:s,resultKeys:i}}(t),h=Array(e).fill((()=>new Promise((e,h)=>{!function d(){const c=++s;if(!0===o||c>=r)return void e();const u=!0===n?c:l[c];t[u](a).then(t=>{!0!==o?(a[u]={key:u,status:"fulfilled",value:t},setTimeout(d)):e()}).catch(t=>{if(!0===o)return void e();const s={key:u,status:"rejected",reason:t};if(a[u]=s,!0===i)return o=!0,void h({...s,resultAggregator:a});setTimeout(d)})}()}))());return Promise.all(h).then(()=>a)},scroll:es,throttle:fo,uid:vs});return e.default.use({install:function(t,e={}){if(!0===this.__qInstalled)return;this.__qInstalled=!0;const s=bt.config=Object.freeze(e.config||{});if(c.install(bt,vt),mt.install(vt,s),Y.install(bt,vt,s),H.install(bt,vt),U.install(bt,vt,s),Z.install(s),et.install(bt,vt,e.lang),ft.install(bt,vt,e.iconSet),!0===i?t.mixin({beforeCreate(){this.$q=this.$root.$options.$q}}):t.prototype.$q=bt,e.components&&Object.keys(e.components).forEach(i=>{const s=e.components[i];"function"==typeof s&&t.component(s.options.name,s)}),e.directives&&Object.keys(e.directives).forEach(i=>{const s=e.directives[i];void 0!==s.name&&void 0!==s.unbind&&t.directive(s.name,s)}),e.plugins){const t={$q:bt,queues:vt,cfg:s};Object.keys(e.plugins).forEach(i=>{const s=e.plugins[i];"function"==typeof s.install&&!1===_t.includes(s)&&s.install(t)})}}},{components:Bh,directives:Td,plugins:jc,config:window.quasarConfig||{}}),{version:"1.22.0-beta.3",lang:et,iconSet:ft,components:Bh,directives:Td,plugins:jc,utils:Uc,...Bh,...Td,...jc,...Uc}}); \ No newline at end of file diff --git a/dist/transform-asset-urls.json b/dist/transform-asset-urls.json new file mode 100644 index 00000000000..2d3d160a67a --- /dev/null +++ b/dist/transform-asset-urls.json @@ -0,0 +1,38 @@ +{ + "QCarouselSlide": "img-src", + "q-carousel-slide": "img-src", + "QChatMessage": "avatar", + "q-chat-message": "avatar", + "QImg": [ + "src", + "placeholder-src" + ], + "q-img": [ + "src", + "placeholder-src" + ], + "QParallax": "src", + "q-parallax": "src", + "QRange": [ + "track-img", + "inner-track-img", + "selection-img" + ], + "q-range": [ + "track-img", + "inner-track-img", + "selection-img" + ], + "QSlider": [ + "track-img", + "inner-track-img", + "selection-img" + ], + "q-slider": [ + "track-img", + "inner-track-img", + "selection-img" + ], + "QTimelineEntry": "avatar", + "q-timeline-entry": "avatar" +} \ No newline at end of file diff --git a/dist/types/api.d.ts b/dist/types/api.d.ts new file mode 100644 index 00000000000..1b27c4a5001 --- /dev/null +++ b/dist/types/api.d.ts @@ -0,0 +1,2 @@ +export * from "./api/cookies"; +export * from "./api/web-storage"; diff --git a/dist/types/api/cookies.d.ts b/dist/types/api/cookies.d.ts new file mode 100644 index 00000000000..aa020ebbca0 --- /dev/null +++ b/dist/types/api/cookies.d.ts @@ -0,0 +1 @@ +export type CookiesGetMethodType = (name: string) => T; diff --git a/dist/types/api/web-storage.d.ts b/dist/types/api/web-storage.d.ts new file mode 100644 index 00000000000..40174627dab --- /dev/null +++ b/dist/types/api/web-storage.d.ts @@ -0,0 +1,30 @@ +type WebStorageGetMethodReturnType = + | Date + | RegExp + | number + | boolean + | string + | object; + +type WebStorageGetKeyMethodReturnType = + | string + +export type WebStorageGetItemMethodType = < + T extends WebStorageGetMethodReturnType = WebStorageGetMethodReturnType +>( + key: string +) => T | null; + +export type WebStorageGetIndexMethodType = < + T extends WebStorageGetMethodReturnType = WebStorageGetMethodReturnType +>( + index: number +) => T | null; + +export type WebStorageGetKeyMethodType = < + T extends WebStorageGetKeyMethodReturnType = WebStorageGetKeyMethodReturnType +>( + index: number +) => T | null; + +export type WebStorageGetAllKeysMethodType = () => string[]; diff --git a/dist/types/extras.d.ts b/dist/types/extras.d.ts new file mode 100644 index 00000000000..76882f8dde5 --- /dev/null +++ b/dist/types/extras.d.ts @@ -0,0 +1,3 @@ +export * from "./extras/animations"; +export * from "./extras/fonts"; +export * from "./extras/icon-set"; diff --git a/dist/types/extras/animations.d.ts b/dist/types/extras/animations.d.ts new file mode 100644 index 00000000000..7a71477cd4b --- /dev/null +++ b/dist/types/extras/animations.d.ts @@ -0,0 +1,87 @@ +export type QuasarGeneralAnimations = + | "bounce" + | "flash" + | "flip" + | "headShake" + | "hinge" + | "jello" + | "pulse" + | "rubberBand" + | "shake" + | "swing" + | "tada" + | "wobble"; + +export type QuasarInAnimations = + | "bounceIn" + | "bounceInDown" + | "bounceInLeft" + | "bounceInRight" + | "bounceInUp" + | "fadeIn" + | "fadeInDown" + | "fadeInDownBig" + | "fadeInLeft" + | "fadeInLeftBig" + | "fadeInRight" + | "fadeInRightBig" + | "fadeInUp" + | "fadeInUpBig" + | "flipInX" + | "flipInY" + | "lightSpeedIn" + | "rollIn" + | "rotateIn" + | "rotateInDownLeft" + | "rotateInDownRight" + | "rotateInUpLeft" + | "rotateInUpRight" + | "slideInDown" + | "slideInLeft" + | "slideInRight" + | "slideInUp" + | "zoomIn" + | "zoomInDown" + | "zoomInLeft" + | "zoomInRight" + | "zoomInUp"; + +export type QuasarOutAnimations = + | "bounceOut" + | "bounceOutDown" + | "bounceOutLeft" + | "bounceOutRight" + | "bounceOutUp" + | "fadeOut" + | "fadeOutDown" + | "fadeOutDownBig" + | "fadeOutLeft" + | "fadeOutLeftBig" + | "fadeOutRight" + | "fadeOutRightBig" + | "fadeOutUp" + | "fadeOutUpBig" + | "flipOutX" + | "flipOutY" + | "lightSpeedOut" + | "rollOut" + | "rotateOut" + | "rotateOutDownLeft" + | "rotateOutDownRight" + | "rotateOutUpLeft" + | "rotateOutUpRight" + | "slideOutDown" + | "slideOutLeft" + | "slideOutRight" + | "slideOutUp" + | "slideOutRight" + | "zoomOut" + | "zoomOutDown" + | "zoomOutLeft" + | "zoomOutRight" + | "zoomOutUp"; + +export type QuasarAnimations = + | QuasarGeneralAnimations + | QuasarInAnimations + | QuasarOutAnimations; diff --git a/dist/types/extras/fonts.d.ts b/dist/types/extras/fonts.d.ts new file mode 100644 index 00000000000..9e070402b8b --- /dev/null +++ b/dist/types/extras/fonts.d.ts @@ -0,0 +1 @@ +export type QuasarFonts = "roboto-font" | "roboto-font-latin-ext"; diff --git a/dist/types/extras/icon-set.d.ts b/dist/types/extras/icon-set.d.ts new file mode 100644 index 00000000000..bff00f201d8 --- /dev/null +++ b/dist/types/extras/icon-set.d.ts @@ -0,0 +1,131 @@ +import { StringDictionary } from "../ts-helpers"; + +type QuasarIconSetType = "positive" | "negative" | "info" | "warning"; +type QuasarIconSetArrow = "up" | "right" | "down" | "left" | "dropdown"; +type QuasarIconSetChevron = "left" | "right"; +type QuasarIconSetColorPicker = "spectrum" | "tune" | "palette"; +type QuasarIconSetPullToRefresh = "icon"; +type QuasarIconSetCarousel = "left" | "right" | "up" | "down" | "navigationIcon"; +type QuasarIconSetChip = "remove" | "selected"; +type QuasarIconSetDatetime = "arrowLeft" | "arrowRight" | "now" | "today"; +type QuasarIconSetEditor = + | "bold" + | "italic" + | "strikethrough" + | "underline" + | "unorderedList" + | "orderedList" + | "subscript" + | "superscript" + | "hyperlink" + | "toggleFullscreen" + | "quote" + | "left" + | "center" + | "right" + | "justify" + | "print" + | "outdent" + | "indent" + | "removeFormat" + | "formatting" + | "fontSize" + | "align" + | "hr" + | "undo" + | "redo" + | "heading" + | "heading1" + | "heading2" + | "heading3" + | "heading4" + | "heading5" + | "heading6" + | "code" + | "size" + | "size1" + | "size2" + | "size3" + | "size4" + | "size5" + | "size6" + | "size7" + | "font" + | "viewSource"; +type QuasarIconSetExpansionItem = "icon" | "denseIcon"; +type QuasarIconSetFab = "icon" | "activeIcon"; +type QuasarIconSetField = "clear" | "error"; +type QuasarIconSetPagination = "first" | "prev" | "next" | "last"; +type QuasarIconSetRating = "icon"; +type QuasarIconSetStepper = "done" | "active" | "error"; +type QuasarIconSetTabs = "left" | "right" | "up" | "down"; +type QuasarIconSetTable = "arrowUp" | "warning" | "firstPage" | "prevPage" | "nextPage" | "lastPage"; +type QuasarIconSetTree = "icon"; +type QuasarIconSetUploader = + | "done" + | "clear" + | "add" + | "upload" + | "removeQueue" + | "removeUploaded"; + +export interface QuasarIconSet { + name: string; + type: StringDictionary; + arrow: StringDictionary; + chevron: StringDictionary; + colorPicker: StringDictionary; + pullToRefresh: StringDictionary; + carousel: StringDictionary; + chip: StringDictionary; + datetime: StringDictionary; + editor: StringDictionary; + expansionItem: StringDictionary; + fab: StringDictionary; + field: StringDictionary; + pagination: StringDictionary; + rating: StringDictionary; + stepper: StringDictionary; + tabs: StringDictionary; + table: StringDictionary; + tree: StringDictionary; + uploader: StringDictionary; +} + +export type QuasarIconSets = + | "material-icons" + | "svg-material-icons" + | "material-icons-outlined" + | "svg-material-icons-outlined" + | "material-icons-round" + | "svg-material-icons-round" + | "material-icons-sharp" + | "svg-material-icons-sharp" + | "material-symbols-outlined" + | "svg-material-symbols-outlined" + | "material-symbols-rounded" + | "svg-material-symbols-rounded" + | "material-symbols-sharp" + | "svg-material-symbols-sharp" + | "mdi-v6" + | "svg-mdi-v6" + | "mdi-v5" + | "svg-mdi-v5" + | "mdi-v4" + | "svg-mdi-v4" + | "mdi-v3" + | "fontawesome-v6" + | "svg-fontawesome-v6" + | "fontawesome-v5" + | "svg-fontawesome-v5" + | "svg-ionicons-v5" + | "ionicons-v4" + | "svg-ionicons-v4" + | "eva-icons" + | "svg-eva-icons" + | "themify" + | "svg-themify" + | "line-awesome" + | "svg-line-awesome" + | "bootstrap-icons" + | "svg-bootstrap-icons"; diff --git a/dist/types/feature-flag.d.ts b/dist/types/feature-flag.d.ts new file mode 100644 index 00000000000..6db332364f2 --- /dev/null +++ b/dist/types/feature-flag.d.ts @@ -0,0 +1,58 @@ +/** + * Keeps track of enabled features through interface declaration merging capabilities. + */ +export interface QuasarFeatureFlags { + [index: string]: boolean; +} + +/** + * Helper to create flag-guards. + * + * Example: to enable 'ssr' types create a `ssr-flag.d.ts` with this content + * + * ```typescript + * // This import enable module augmentation instead of module overwrite + * import 'quasar'; + * + * declare module 'quasar' { + * // This will be merged with other definitions + * // thanks to interface declaration merging + * interface QuasarFeatureFlags { + * ssr: true; // The object key is the feature flag name + * } + * } + * ``` + * + * and flag-guard your types like this + * + * ```typescript + * type HasSsr = IsFeatureEnabled<'ssr', T, U>; + * ``` + * + * You can then use it like this for intersection types (where null type is `{}`) + * + * ```typescript + * type Intersection = {...} & HasSsr<{ ssrContext?: QSsrContext | null }, {}>; + * ``` + * + * and like this for discriminated unions (where null type is `never`) + * + * ```typescript + * type Union = {...} | HasSsr<{ ssrContext?: QSsrContext | null }, never>; + * ``` + */ +export type IsFeatureEnabled< + O extends string, + T, + U = {} +> = QuasarFeatureFlags[O] extends true ? T : U; + +export type HasSsr = IsFeatureEnabled<"ssr", T, U>; +export type HasStore = IsFeatureEnabled<"store", T, U>; + +export type HasPwa = IsFeatureEnabled<"pwa", T, U>; + +export type HasCapacitor = IsFeatureEnabled<"capacitor", T, U>; +export type HasCordova = IsFeatureEnabled<"cordova", T, U>; +export type HasElectron = IsFeatureEnabled<"electron", T, U>; +export type HasBex = IsFeatureEnabled<"bex", T, U>; diff --git a/dist/types/globals.d.ts b/dist/types/globals.d.ts new file mode 100644 index 00000000000..ebf72c491b4 --- /dev/null +++ b/dist/types/globals.d.ts @@ -0,0 +1,76 @@ +import { QuasarIconSet } from "./extras/icon-set"; +import { + HasCapacitor, + HasCordova, + HasElectron, + HasSsr, + HasBex, +} from "./feature-flag"; +import { QuasarLanguage } from "./lang"; + +// We cannot reference directly Capacitor/Cordova/Electron types +// or they would generate TS errors for Vue CLI users +// We also cannot move feature-flags system into `@quasar/app` +// because `QVueGlobals` augmentations won't be transferred to +// the `vue/types/vue` augmentation for unknown reason (probably TS limitations) +// and the system will just stop working +// To workaround these problems we define an empty holder interface +// and augment it into `@quasar/app` with current typings +export interface GlobalsTypesHolder { + [index: string]: any; +} + +export interface GlobalQuasarLanguage extends QuasarLanguage { + set(lang: QuasarLanguage): void; + /** Returns undefined when in SSR mode or when it cannot determine current language. */ + getLocale(): string | undefined; +} + +export interface GlobalQuasarLanguageSingleton + extends QuasarLanguage, + HasSsr< + { set(lang: QuasarLanguage, ssrContext: any): void }, + { set(lang: QuasarLanguage): void } + > { + /** Returns undefined when in SSR mode or when it cannot determine current language. */ + getLocale(): string | undefined; +} + +export interface GlobalQuasarIconSet extends QuasarIconSet { + set(iconSet: QuasarIconSet): void; +} + +export interface GlobalQuasarIconSetSingleton + extends QuasarIconSet, + HasSsr< + // QSsrContext interface depends on q/app, making it available into UI package adds complexity without any real benefit + { set(iconSet: QuasarIconSet, ssrContext: any): void }, + { set(iconSet: QuasarIconSet): void } + > {} + +type GlobalQuasarIconMapFn = ( + iconName: string +) => { icon: string } | { cls: string; content?: string } | void; + +export interface BaseQGlobals { + version: string; + lang: GlobalQuasarLanguage; + iconSet: GlobalQuasarIconSet; +} + +export interface QSingletonGlobals { + version: string; + lang: GlobalQuasarLanguageSingleton; + iconSet: GlobalQuasarIconSetSingleton; +} + +export interface QVueGlobals + extends HasCapacitor<{ capacitor: any }>, + HasBex<{ bex: GlobalsTypesHolder["bex"] }>, + HasCordova<{ cordova: GlobalsTypesHolder["cordova"] }>, + HasElectron<{ electron: GlobalsTypesHolder["electron"] }>, + HasSsr< + { iconMapFn?: GlobalQuasarIconMapFn }, + { iconMapFn: GlobalQuasarIconMapFn } + >, + BaseQGlobals {} diff --git a/dist/types/index.d.ts b/dist/types/index.d.ts new file mode 100644 index 00000000000..128b6e0d210 --- /dev/null +++ b/dist/types/index.d.ts @@ -0,0 +1,9485 @@ +// @ts-ignore +/// +import Vue, { VueConstructor, PluginObject } from 'vue' +import { LooseDictionary } from './ts-helpers' + +export interface AddressbarColor { + /** + * Sets addressbar color (for browsers that support it) + * @param hexColor Color in hex format + */ + set (hexColor : string): void +} + +export interface AppFullscreen { + /** + * Does browser support it? + */ + isCapable : boolean + /** + * Is Fullscreen active? + */ + isActive : boolean + /** + * The DOM element used as root for fullscreen, otherwise 'null' + */ + activeEl : LooseDictionary + /** + * Request going into Fullscreen (with optional target) + * @param target Optional Element of target to request Fullscreen on + * @returns A Promise with the outcome (true -> validation was a success, false -> invalid models detected) + */ + request (target? : Element): Promise + /** + * Request exiting out of Fullscreen mode + * @returns A Promise with the outcome (true -> validation was a success, false -> invalid models detected) + */ + exit (): Promise + /** + * Request toggling Fullscreen mode (with optional target if requesting going into Fullscreen only) + * @param target Optional Element of target to request Fullscreen on + * @returns A Promise with the outcome (true -> validation was a success, false -> invalid models detected) + */ + toggle (target? : Element): Promise +} + +export interface AppVisibility { + /** + * Does the app have user focus? Or the app runs in the background / another tab has the user's attention + */ + appVisible : boolean +} + +export interface BottomSheet { + /** + * Creates an ad-hoc Bottom Sheet; Same as calling $q.bottomSheet(...) + * @param opts Bottom Sheet options + * @returns Chainable Object + */ + create (opts : { + /** + * CSS Class name to apply to the Dialog's QCard + */ + class? : string | any[] | LooseDictionary + /** + * CSS style to apply to the Dialog's QCard + */ + style? : string | any[] | LooseDictionary + /** + * Title + */ + title? : string + /** + * Message + */ + message? : string + /** + * Array of Objects, each Object defining an action + */ + actions? : { + /** + * CSS classes for this action + */ + classes? : string | any[] | LooseDictionary + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Path to an image for this action + */ + img? : string + /** + * Display img as avatar (round borders) + */ + avatar? : boolean + /** + * Action label + */ + label? : string | number }[] + /** + * Display actions as a grid instead of as a list + */ + grid? : boolean + /** + * Apply dark mode + */ + dark? : boolean + /** + * Put Bottom Sheet into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too + */ + seamless? : boolean + /** + * User cannot dismiss Bottom Sheet if clicking outside of it or hitting ESC key + */ + persistent? : boolean }): DialogChainObject +} + +export interface Cookies { + /** + * Get cookie + * @param name Cookie name + * @param reviverFn Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Cookie value; Returns null if cookie not found + */ + get: CookiesGetMethodType + /** + * Get all cookies + * @param reviverFn Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Object with cookie names (as keys) and their values + */ + getAll (reviverFn? : Function): LooseDictionary + /** + * Set cookie + * @param name Cookie name + * @param value Cookie value + * @param options Cookie options + */ + set (name : string, value : string, options? : { + /** + * Cookie expires detail; If specified as Number, then the unit is days; If specified as String, it can either be raw stringified date or in Xd Xh Xm Xs format (see examples) + */ + expires? : number | string | Date + /** + * Cookie path + */ + path? : string + /** + * Cookie domain + */ + domain? : string + /** + * SameSite cookie option (not supported by IE11) + */ + sameSite? : string + /** + * Is cookie Http Only? + */ + httpOnly? : boolean + /** + * Is cookie secure? (https only) + */ + secure? : boolean + /** + * Raw string for other cookie options; To be used as a last resort for possible newer props that are currently not yet implemented in Quasar + */ + other? : string }): void + /** + * Check if cookie exists + * @param name Cookie name + * @param reviverFn Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Does cookie exists or not? + */ + has (name : string, reviverFn? : Function): boolean + /** + * Remove a cookie + * @param name Cookie name + * @param options Cookie options + */ + remove (name : string, options? : { + /** + * Cookie path + */ + path? : string + /** + * Cookie domain + */ + domain? : string }): void + /** + * For SSR usage only, and only on the global import (not on $q.cookies) + * @param ssrContext SSR Context Object + * @returns Cookie object (like $q.cookies) for SSR usage purposes + */ + parseSSR (ssrContext : LooseDictionary): Cookies +} + +export interface Dark { + /** + * Is Dark mode active? Has value `null` when on SSR and dark set to `auto` + */ + isActive : boolean + /** + * Dark mode configuration (not status) + */ + mode : boolean | 'auto' + /** + * Set dark mode status + * @param status Dark mode status + */ + set (status : boolean | 'auto'): void + /** + * Toggle dark mode status + */ + toggle (): void +} + +export interface Dialog { + /** + * Creates an ad-hoc Dialog; Same as calling $q.dialog(...) + * @param opts Dialog options + * @returns Chainable Object + */ + create (opts : QDialogOptions): DialogChainObject +} + +export interface Interaction { + /** + * Last event was a keyboard one + */ + isKeyboard : boolean + /** + * Last event was a keyboard composing one + */ + isComposing : boolean + /** + * Last event was a pointer one (mouse or touch) + */ + isPointer : boolean + /** + * Last event was a mouse one + */ + isMouse : boolean + /** + * Last event was a touch one + */ + isTouch : boolean + /** + * Last event was a drag and drop one + */ + isDrag : boolean + /** + * Last event was a context menu one + */ + isContext : boolean + /** + * Last event is in progress (start event without a cancel or end event) + */ + isPending : boolean + /** + * Last event + */ + event : LooseDictionary + /** + * Prevent next click event on a target element + * @param target The element where it should prevent click + * @param stop Stop propagation of the event + */ + preventClick (target? : Element, stop? : boolean): void +} + +export interface Loading { + /** + * Is Loading active? + */ + isActive : boolean + /** + * Activate and show + * @param opts All props are optional + * @returns Calling this function with no parameters hides the group; When called with one Object parameter then it updates the Loading group (specified properties are shallow merged with the group ones; note that group cannot be changed while updating and it is ignored) + */ + show (opts? : { + /** + * Wait a number of millisecond before showing; Not worth showing for 100ms for example then hiding it, so wait until you're sure it's a process that will take some considerable amount of time + */ + delay? : number + /** + * Message to display + */ + message? : string + /** + * Loading group name + */ + group? : string + /** + * Force use of textContent instead of innerHTML to render message; Use it when the message might be unsafe (from user input) + */ + sanitize? : boolean + /** + * Spinner size (in pixels) + */ + spinnerSize? : number + /** + * Color name for spinner from the Quasar Color Palette + */ + spinnerColor? : string + /** + * Color name for text from the Quasar Color Palette + */ + messageColor? : string + /** + * Color name for background from the Quasar Color Palette + */ + backgroundColor? : string + /** + * One of the QSpinners + */ + spinner? : Vue + /** + * Add a CSS class to easily customize the component + */ + customClass? : string + /** + * Ignore the default configuration (set by setDefaults()) for this instance only + */ + ignoreDefaults? : boolean }): Function + /** + * Hide it + * @param group Optional Loading group name to hide instead of hiding all groups + */ + hide (group? : string): void + /** + * Merge options into the default ones + * @param opts Pick the subprop you want to define + */ + setDefaults (opts : { + /** + * Wait a number of millisecond before showing; Not worth showing for 100ms for example then hiding it, so wait until you're sure it's a process that will take some considerable amount of time + */ + delay? : number + /** + * Message to display + */ + message? : string + /** + * Default Loading group name + */ + group? : string + /** + * Spinner size (in pixels) + */ + spinnerSize? : number + /** + * Color name for spinner from the Quasar Color Palette + */ + spinnerColor? : string + /** + * Color name for text from the Quasar Color Palette + */ + messageColor? : string + /** + * Color name for background from the Quasar Color Palette + */ + backgroundColor? : string + /** + * One of the QSpinners + */ + spinner? : Vue + /** + * Add a CSS class to easily customize the component + */ + customClass? : string }): void +} + +export interface LoadingBar { + /** + * Is LoadingBar active? + */ + isActive : boolean + /** + * Notify bar you've started a background activity + * @param speed Delay (in milliseconds) between bar progress increments + */ + start (speed? : number): void + /** + * Notify bar one background activity has finalized + */ + stop (): void + /** + * Manually trigger a bar progress increment + * @param amount Amount (0.0 < x < 1.0) to increment with + */ + increment (amount? : number): void + /** + * Set the inner QAjaxBar's props + * @param ...props QAjaxBar component props + */ + setDefaults (...props: any[]): void +} + +export interface LocalStorage { + /** + * Check if storage item exists + * @param key Entry key + * @param reviverFn Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Does the item exists or not? + */ + has (key : string, reviverFn? : Function): boolean + /** + * Get storage number of entries + * @returns Number of entries + */ + getLength (): number + /** + * Get a storage item value + * @param key Entry key + * @param reviverFn Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Storage item value + */ + getItem: WebStorageGetItemMethodType + /** + * Get the storage item value at specific index + * @param index Entry index + * @param reviverFn Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Storage item index + */ + getIndex: WebStorageGetIndexMethodType + /** + * Get the storage key at specific index + * @param index Entry index + * @returns Storage key + */ + getKey: WebStorageGetKeyMethodType + /** + * Retrieve all items in storage + * @param reviverFn Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Object syntax: item name as Object key and its value + */ + getAll (reviverFn? : Function): LooseDictionary + /** + * Retrieve all keys in storage + * @returns Storage keys (Array of Strings) + */ + getAllKeys: WebStorageGetAllKeysMethodType + /** + * Set item in storage + * @param key Entry key + * @param value Entry value + */ + set (key : string, value : Date | RegExp | number | boolean | Function | LooseDictionary | any[] | string | null): void + /** + * Remove a storage item + * @param key Storage key + */ + remove (key : string): void + /** + * Remove everything from the storage + */ + clear (): void + /** + * Determine if storage has any items + * @returns Tells if storage is empty or not + */ + isEmpty (): boolean +} + +export interface Meta { +} + +export interface Notify { + /** + * Creates a notification; Same as calling $q.notify(...) + * @param opts Notification options + * @returns Calling this function with no parameters hides the notification; When called with one Object parameter (the original notification must NOT be grouped), it updates the notification (specified properties are shallow merged with previous ones; note that group and position cannot be changed while updating and so they are ignored) + */ + create (opts : { + /** + * Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing') + */ + type? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component from the Quasar Color Palette + */ + textColor? : string + /** + * The content of your message + */ + message? : string + /** + * The content of your optional caption + */ + caption? : string + /** + * Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first + */ + html? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Color name for component from the Quasar Color Palette + */ + iconColor? : string + /** + * Size in CSS units, including unit name + */ + iconSize? : string + /** + * URL to an avatar/image; Suggestion: use public folder + */ + avatar? : string + /** + * Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown + */ + spinner? : boolean | Vue + /** + * Color name for component from the Quasar Color Palette + */ + spinnerColor? : string + /** + * Size in CSS units, including unit name + */ + spinnerSize? : string + /** + * Window side/corner to stick to + */ + position? : 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top' | 'bottom' | 'left' | 'right' | 'center' + /** + * Override the auto generated group with custom one; Grouped notifications cannot be updated; String or number value inform this is part of a specific group, regardless of its options; When a new notification is triggered with same group name, it replaces the old one and shows a badge with how many times the notification was triggered + */ + group? : boolean | string | number + /** + * Color name for the badge from the Quasar Color Palette + */ + badgeColor? : string + /** + * Color name for the badge text from the Quasar Color Palette + */ + badgeTextColor? : string + /** + * Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left + */ + badgePosition? : 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' + /** + * Style definitions to be attributed to the badge + */ + badgeStyle? : any[] | string | LooseDictionary + /** + * Class definitions to be attributed to the badge + */ + badgeClass? : any[] | string | LooseDictionary + /** + * Show progress bar to detail when notification will disappear automatically (unless timeout is 0) + */ + progress? : boolean + /** + * Class definitions to be attributed to the progress bar + */ + progressClass? : any[] | string | LooseDictionary + /** + * Add CSS class(es) to the notification for easier customization + */ + classes? : string + /** + * Key-value for attributes to be set on the notification + */ + attrs? : LooseDictionary + /** + * Amount of time to display (in milliseconds) + */ + timeout? : number + /** + * Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop + */ + actions? : any[] + /** + * Function to call when notification gets dismissed + */ + onDismiss? : Function + /** + * Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language + */ + closeBtn? : boolean | string + /** + * Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default + */ + multiLine? : boolean + /** + * Ignore the default configuration (set by setDefaults()) for this instance only + */ + ignoreDefaults? : boolean } | string): Function + /** + * Merge options into the default ones + * @param opts Notification options + */ + setDefaults (opts : { + /** + * Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing') + */ + type? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component from the Quasar Color Palette + */ + textColor? : string + /** + * The content of your message + */ + message? : string + /** + * The content of your optional caption + */ + caption? : string + /** + * Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first + */ + html? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Color name for component from the Quasar Color Palette + */ + iconColor? : string + /** + * Size in CSS units, including unit name + */ + iconSize? : string + /** + * URL to an avatar/image; Suggestion: use public folder + */ + avatar? : string + /** + * Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown + */ + spinner? : boolean | Vue + /** + * Color name for component from the Quasar Color Palette + */ + spinnerColor? : string + /** + * Size in CSS units, including unit name + */ + spinnerSize? : string + /** + * Window side/corner to stick to + */ + position? : 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top' | 'bottom' | 'left' | 'right' | 'center' + /** + * Color name for the badge from the Quasar Color Palette + */ + badgeColor? : string + /** + * Color name for the badge text from the Quasar Color Palette + */ + badgeTextColor? : string + /** + * Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left + */ + badgePosition? : 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' + /** + * Style definitions to be attributed to the badge + */ + badgeStyle? : any[] | string | LooseDictionary + /** + * Class definitions to be attributed to the badge + */ + badgeClass? : any[] | string | LooseDictionary + /** + * Show progress bar to detail when notification will disappear automatically (unless timeout is 0) + */ + progress? : boolean + /** + * Class definitions to be attributed to the progress bar + */ + progressClass? : any[] | string | LooseDictionary + /** + * Add CSS class(es) to the notification for easier customization + */ + classes? : string + /** + * Key-value for attributes to be set on the notification + */ + attrs? : LooseDictionary + /** + * Amount of time to display (in milliseconds) + */ + timeout? : number + /** + * Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop + */ + actions? : any[] + /** + * Function to call when notification gets dismissed + */ + onDismiss? : Function + /** + * Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language + */ + closeBtn? : boolean | string + /** + * Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default + */ + multiLine? : boolean }): void + /** + * Register a new type of notification (or override an existing one) + * @param typeName Name of the type (to be used as 'type' prop later on) + * @param typeOpts Notification options + */ + registerType (typeName : string, typeOpts : { + /** + * Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing') + */ + type? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component from the Quasar Color Palette + */ + textColor? : string + /** + * The content of your message + */ + message? : string + /** + * The content of your optional caption + */ + caption? : string + /** + * Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first + */ + html? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Color name for component from the Quasar Color Palette + */ + iconColor? : string + /** + * Size in CSS units, including unit name + */ + iconSize? : string + /** + * URL to an avatar/image; Suggestion: use public folder + */ + avatar? : string + /** + * Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown + */ + spinner? : boolean | Vue + /** + * Color name for component from the Quasar Color Palette + */ + spinnerColor? : string + /** + * Size in CSS units, including unit name + */ + spinnerSize? : string + /** + * Window side/corner to stick to + */ + position? : 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top' | 'bottom' | 'left' | 'right' | 'center' + /** + * Color name for the badge from the Quasar Color Palette + */ + badgeColor? : string + /** + * Color name for the badge text from the Quasar Color Palette + */ + badgeTextColor? : string + /** + * Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left + */ + badgePosition? : 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' + /** + * Style definitions to be attributed to the badge + */ + badgeStyle? : any[] | string | LooseDictionary + /** + * Class definitions to be attributed to the badge + */ + badgeClass? : any[] | string | LooseDictionary + /** + * Show progress bar to detail when notification will disappear automatically (unless timeout is 0) + */ + progress? : boolean + /** + * Class definitions to be attributed to the progress bar + */ + progressClass? : any[] | string | LooseDictionary + /** + * Add CSS class(es) to the notification for easier customization + */ + classes? : string + /** + * Key-value for attributes to be set on the notification + */ + attrs? : LooseDictionary + /** + * Amount of time to display (in milliseconds) + */ + timeout? : number + /** + * Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop + */ + actions? : any[] + /** + * Function to call when notification gets dismissed + */ + onDismiss? : Function + /** + * Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language + */ + closeBtn? : boolean | string + /** + * Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default + */ + multiLine? : boolean }): void +} + +export interface Platform { + /** + * Client browser User Agent + */ + userAgent : string + /** + * Client browser details (property names depend on browser) + */ + is : LooseDictionary + /** + * Client browser detectable properties + */ + has : { + /** + * Client browser runs on device with touch support + */ + touch : boolean + /** + * Client browser has Web Storage support + */ + webStorage : boolean } + /** + * Client browser environment + */ + within : { + /** + * Does the app run under an iframe? + */ + iframe : boolean } + /** + * For SSR usage only, and only on the global import (not on $q.platform) + * @param ssrContext SSR Context Object + * @returns Platform object (like $q.platform) for SSR usage purposes + */ + parseSSR (ssrContext : LooseDictionary): Platform +} + +export interface Screen { + /** + * Screen width (in pixels) + */ + width : number + /** + * Screen height (in pixels) + */ + height : number + /** + * Tells current window breakpoint + */ + name : 'xs' | 'sm' | 'md' | 'lg' | 'xl' + /** + * Breakpoints (in pixels) + */ + sizes : { + /** + * Breakpoint width size (minimum size) + */ + sm : number + /** + * Breakpoint width size (minimum size) + */ + md : number + /** + * Breakpoint width size (minimum size) + */ + lg : number + /** + * Breakpoint width size (minimum size) + */ + xl : number } + /** + * Tells if current screen width is lower than breakpoint-name + */ + lt : { + /** + * Is current screen width lower than this breakpoint's lowest limit? + */ + sm : boolean + /** + * Is current screen width lower than this breakpoint's lowest limit? + */ + md : boolean + /** + * Is current screen width lower than this breakpoint's lowest limit? + */ + lg : boolean + /** + * Is current screen width lower than this breakpoint's lowest limit? + */ + xl : boolean } + /** + * Tells if current screen width is greater than breakpoint-name + */ + gt : { + /** + * Is current screen width greater than this breakpoint's max limit? + */ + xs : boolean + /** + * Is current screen width greater than this breakpoint's max limit? + */ + sm : boolean + /** + * Is current screen width greater than this breakpoint's max limit? + */ + md : boolean + /** + * Is current screen width greater than this breakpoint's max limit? + */ + lg : boolean } + /** + * Current screen width fits exactly 'xs' breakpoint + */ + xs : boolean + /** + * Current screen width fits exactly 'sm' breakpoint + */ + sm : boolean + /** + * Current screen width fits exactly 'md' breakpoint + */ + md : boolean + /** + * Current screen width fits exactly 'lg' breakpoint + */ + lg : boolean + /** + * Current screen width fits exactly 'xl' breakpoint + */ + xl : boolean + /** + * Override default breakpoint sizes + * @param breakpoints Pick what you want to override + */ + setSizes (breakpoints : { + /** + * Breakpoint width size (minimum size) + */ + sm? : number + /** + * Breakpoint width size (minimum size) + */ + md? : number + /** + * Breakpoint width size (minimum size) + */ + lg? : number + /** + * Breakpoint width size (minimum size) + */ + xl? : number }): void + /** + * Debounce update of all props when screen width/height changes + * @param amount Amount in milliseconds + */ + setDebounce (amount : number): void +} + +export interface SessionStorage { + /** + * Check if storage item exists + * @param key Entry key + * @param reviverFn Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Does the item exists or not? + */ + has (key : string, reviverFn? : Function): boolean + /** + * Get storage number of entries + * @returns Number of entries + */ + getLength (): number + /** + * Get a storage item value + * @param key Entry key + * @param reviverFn Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Storage item value + */ + getItem: WebStorageGetItemMethodType + /** + * Get the storage item value at specific index + * @param index Entry index + * @param reviverFn Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Storage item index + */ + getIndex: WebStorageGetIndexMethodType + /** + * Get the storage key at specific index + * @param index Entry index + * @returns Storage key + */ + getKey: WebStorageGetKeyMethodType + /** + * Retrieve all items in storage + * @param reviverFn Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter + * @returns Object syntax: item name as Object key and its value + */ + getAll (reviverFn? : Function): LooseDictionary + /** + * Retrieve all keys in storage + * @returns Storage keys (Array of Strings) + */ + getAllKeys: WebStorageGetAllKeysMethodType + /** + * Set item in storage + * @param key Entry key + * @param value Entry value + */ + set (key : string, value : Date | RegExp | number | boolean | Function | LooseDictionary | any[] | string | null): void + /** + * Remove a storage item + * @param key Storage key + */ + remove (key : string): void + /** + * Remove everything from the storage + */ + clear (): void + /** + * Determine if storage has any items + * @returns Tells if storage is empty or not + */ + isEmpty (): boolean +} + +export interface ClosePopup { +} + +export interface GoBack { +} + +export interface Intersection { +} + +export interface KeyGroupNavigation { +} + +export interface Morph { +} + +export interface Mutation { +} + +export interface Ripple { +} + +export interface Scroll { +} + +export interface ScrollFire { +} + +export interface TouchHold { +} + +export interface TouchPan { +} + +export interface TouchRepeat { +} + +export interface TouchSwipe { +} + +export interface QAjaxBar extends Vue { + /** + * Position within window of where QAjaxBar should be displayed + */ + position? : 'top' | 'right' | 'bottom' | 'left' + /** + * Size in CSS units, including unit name + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Reverse direction of progress + */ + reverse? : boolean + /** + * Skip Ajax hijacking (not a reactive prop) + */ + skipHijack? : boolean + /** + * Filter which URL should trigger start() + stop() + */ + hijackFilter? : Function + /** + * Notify bar you are waiting for a new process to finish + * @param speed Delay (in milliseconds) between progress auto-increments; If delay is 0 then it disables auto-incrementing + * @returns Number of active simultaneous sessions + */ + start (speed? : number): number + /** + * Manually trigger a bar progress increment + * @param amount Amount (0 < x <= 100) to increment with + * @returns Number of active simultaneous sessions + */ + increment (amount? : number): number + /** + * Notify bar that one process you were waiting has finished + * @returns Number of active simultaneous sessions + */ + stop (): number +} + +export interface QAvatar extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * The size in CSS units, including unit name, of the content (icon, text) + */ + fontSize? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a small standard border-radius for a squared shape of the component + */ + rounded? : boolean +} + +export interface QBadge extends Vue { + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Tell QBadge if it should float to the top right side of the relative positioned parent element or not + */ + floating? : boolean + /** + * Applies a 0.8 opacity; Useful especially for floating QBadge + */ + transparent? : boolean + /** + * Content can wrap to multiple lines + */ + multiLine? : boolean + /** + * Badge's content as string; overrides default slot if specified + */ + label? : string | number + /** + * Sets vertical-align CSS prop + */ + align? : 'top' | 'middle' | 'bottom' + /** + * Use 'outline' design (colored text and borders only) + */ + outline? : boolean + /** + * Makes a rounded shaped badge + */ + rounded? : boolean +} + +export interface QBanner extends Vue { + /** + * Display actions on same row as content + */ + inlineActions? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Applies a small standard border-radius for a squared shape of the component + */ + rounded? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean +} + +export interface QBar extends Vue { + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * The component background color lights up the parent's background (as opposed to default behavior which is to darken it); Works unless you specify a CSS background color for it + */ + dark? : boolean +} + +export interface QBreadcrumbs extends Vue { + /** + * The string used to separate the breadcrumbs + */ + separator? : string + /** + * The color of the active breadcrumb, which can be any color from the Quasar Color Palette + */ + activeColor? : string + /** + * The gutter value allows you control over the space between the breadcrumb elements. + */ + gutter? : 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' + /** + * The color used to color the separator, which can be any color from the Quasar Color Palette + */ + separatorColor? : string + /** + * Specify how to align the breadcrumbs horizontally + */ + align? : 'left' | 'center' | 'right' | 'between' | 'around' | 'evenly' +} + +export interface QBreadcrumbsEl extends Vue { + /** + * Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used + */ + to? : string | LooseDictionary + /** + * Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used + */ + exact? : boolean + /** + * Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used + */ + append? : boolean + /** + * Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used + */ + replace? : boolean + /** + * Equivalent to Vue Router 'active-class' property + */ + activeClass? : string + /** + * Equivalent to Vue Router 'active-class' property + */ + exactActiveClass? : string + /** + * Native
link href attribute; Has priority over the 'to'/'exact'/'replace' props + */ + href? : string + /** + * Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props + */ + target? : string + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * The label text for the breadcrumb + */ + label? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string +} + +export interface QBtnDropdown extends Vue { + /** + * Controls Menu show/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Configure material ripple (disable it by setting it to 'false' or supply a config object) + */ + ripple? : boolean | LooseDictionary + /** + * 1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag + */ + type? : string + /** + * Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used + */ + to? : string | LooseDictionary + /** + * Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used + */ + replace? : boolean + /** + * Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used + */ + append? : boolean + /** + * Native link href attribute; Has priority over the 'to' and 'replace' props + */ + href? : string + /** + * Native link target attribute; Use it only with 'to' or 'href' props + */ + target? : string + /** + * The text that will be shown on the button + */ + label? : string | number + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconRight? : string + /** + * Use 'outline' design + */ + outline? : boolean + /** + * Use 'flat' design + */ + flat? : boolean + /** + * Remove shadow + */ + unelevated? : boolean + /** + * Applies a more prominent border-radius for a squared shape button + */ + rounded? : boolean + /** + * Use 'push' design + */ + push? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a glossy effect + */ + glossy? : boolean + /** + * Makes button size and shape to fit a Floating Action Button + */ + fab? : boolean + /** + * Makes button size and shape to fit a small Floating Action Button + */ + fabMini? : boolean + /** + * Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set + */ + padding? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Avoid turning label text into caps (which happens by default) + */ + noCaps? : boolean + /** + * Avoid label text wrapping + */ + noWrap? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Label or content alignment + */ + align? : 'left' | 'right' | 'center' | 'around' | 'between' | 'evenly' + /** + * Stack icon and label vertically instead of on same line (like it is by default) + */ + stack? : boolean + /** + * When used on flexbox parent, button will stretch to parent's height + */ + stretch? : boolean + /** + * Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot) + */ + loading? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Split dropdown icon into its own button + */ + split? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + dropdownIcon? : string + /** + * Disable main button (useful along with 'split' prop) + */ + disableMainBtn? : boolean + /** + * Disables dropdown (dropdown button if using along 'split' prop) + */ + disableDropdown? : boolean + /** + * Disables the rotation of the dropdown icon when state is toggled + */ + noIconAnimation? : boolean + /** + * Style definitions to be attributed to the menu + */ + contentStyle? : any[] | string | LooseDictionary + /** + * Class definitions to be attributed to the menu + */ + contentClass? : any[] | string | LooseDictionary + /** + * Allows the menu to cover the button. When used, the 'menu-self' and 'menu-fit' props are no longer effective + */ + cover? : boolean + /** + * Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key + */ + persistent? : boolean + /** + * Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set + */ + noRouteDismiss? : boolean + /** + * Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap + */ + autoClose? : boolean + /** + * Two values setting the starting position or anchor point of the menu relative to its target + */ + menuAnchor? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * Two values setting the menu's own position relative to its target + */ + menuSelf? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * An array of two numbers to offset the menu horizontally and vertically in pixels + */ + menuOffset? : any[] + /** + * One of Quasar's embedded transitions + */ + transitionShow? : string + /** + * One of Quasar's embedded transitions + */ + transitionHide? : string + /** + * aria-label to be used on the dropdown toggle element + */ + toggleAriaLabel? : string + /** + * Triggers component to show + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Triggers component to hide + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void + /** + * Triggers component to toggle between show/hide + * @param evt JS event object + */ + toggle (evt? : LooseDictionary): void +} + +export interface QBtnGroup extends Vue { + /** + * Spread horizontally to all available space + */ + spread? : boolean + /** + * Use 'outline' design for buttons + */ + outline? : boolean + /** + * Use 'flat' design for buttons + */ + flat? : boolean + /** + * Remove shadow on buttons + */ + unelevated? : boolean + /** + * Applies a more prominent border-radius for squared shape buttons + */ + rounded? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Use 'push' design for buttons + */ + push? : boolean + /** + * When used on flexbox parent, buttons will stretch to parent's height + */ + stretch? : boolean + /** + * Applies a glossy effect + */ + glossy? : boolean +} + +export interface QBtnToggle extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Configure material ripple (disable it by setting it to 'false' or supply a config object) + */ + ripple? : boolean | LooseDictionary + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : any + /** + * Array of Objects defining each option + */ + options : { + /** + * Key-value for attributes to be set on the button + */ + attrs? : LooseDictionary + /** + * Label of option button; Use this prop and/or 'icon', but at least one is required + */ + label? : string + /** + * Icon of option button; Use this prop and/or 'label', but at least one is required + */ + icon? : string + /** + * Value of the option that will be used by component model + */ + value : any + /** + * Slot name to use for this button content; Useful for customizing content or even add tooltips + */ + slot? : string + [index: string]: any }[] + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Color name for component from the Quasar Color Palette + */ + toggleColor? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + toggleTextColor? : string + /** + * Spread horizontally to all available space + */ + spread? : boolean + /** + * Use 'outline' design + */ + outline? : boolean + /** + * Use 'flat' design + */ + flat? : boolean + /** + * Remove shadow + */ + unelevated? : boolean + /** + * Applies a more prominent border-radius for a squared shape button + */ + rounded? : boolean + /** + * Use 'push' design + */ + push? : boolean + /** + * Applies a glossy effect + */ + glossy? : boolean + /** + * Button size name or a CSS unit including unit name + */ + size? : string + /** + * Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set + */ + padding? : string + /** + * Avoid turning label text into caps (which happens by default) + */ + noCaps? : boolean + /** + * Avoid label text wrapping + */ + noWrap? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Stack icon and label vertically instead of on same line (like it is by default) + */ + stack? : boolean + /** + * When used on flexbox parent, button will stretch to parent's height + */ + stretch? : boolean + /** + * Clears model on click of the already selected button + */ + clearable? : boolean +} + +export interface QBtn extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Configure material ripple (disable it by setting it to 'false' or supply a config object) + */ + ripple? : boolean | LooseDictionary + /** + * 1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag + */ + type? : string + /** + * Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used + */ + to? : string | LooseDictionary + /** + * Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used + */ + replace? : boolean + /** + * Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used + */ + append? : boolean + /** + * Native link href attribute; Has priority over the 'to' and 'replace' props + */ + href? : string + /** + * Native link target attribute; Use it only with 'to' or 'href' props + */ + target? : string + /** + * The text that will be shown on the button + */ + label? : string | number + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconRight? : string + /** + * Use 'outline' design + */ + outline? : boolean + /** + * Use 'flat' design + */ + flat? : boolean + /** + * Remove shadow + */ + unelevated? : boolean + /** + * Applies a more prominent border-radius for a squared shape button + */ + rounded? : boolean + /** + * Use 'push' design + */ + push? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a glossy effect + */ + glossy? : boolean + /** + * Makes button size and shape to fit a Floating Action Button + */ + fab? : boolean + /** + * Makes button size and shape to fit a small Floating Action Button + */ + fabMini? : boolean + /** + * Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set + */ + padding? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Avoid turning label text into caps (which happens by default) + */ + noCaps? : boolean + /** + * Avoid label text wrapping + */ + noWrap? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Label or content alignment + */ + align? : 'left' | 'right' | 'center' | 'around' | 'between' | 'evenly' + /** + * Stack icon and label vertically instead of on same line (like it is by default) + */ + stack? : boolean + /** + * When used on flexbox parent, button will stretch to parent's height + */ + stretch? : boolean + /** + * Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot) + */ + loading? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Makes a circle shaped button + */ + round? : boolean + /** + * Percentage (0.0 < x < 100.0); To be used along 'loading' prop; Display a progress bar on the background + */ + percentage? : number + /** + * Progress bar on the background should have dark color; To be used along with 'percentage' and 'loading' props + */ + darkPercentage? : boolean + /** + * Emulate click on QBtn + * @param evt JS event object + */ + click (evt? : LooseDictionary): void +} + +export interface QCard extends Vue { + /** + * HTML tag to render + */ + tag? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean +} + +export interface QCardActions extends Vue { + /** + * Specify how to align the actions + */ + align? : 'left' | 'center' | 'right' | 'between' | 'around' | 'evenly' | 'stretch' + /** + * Display actions one below the other + */ + vertical? : boolean +} + +export interface QCardSection extends Vue { + /** + * HTML tag to render + */ + tag? : string + /** + * Display a horizontal section (will have no padding and can contain other QCardSection) + */ + horizontal? : boolean +} + +export interface QCarousel extends Vue { + /** + * Fullscreen mode + */ + fullscreen? : boolean + /** + * Changing route app won't exit fullscreen + */ + noRouteFullscreenExit? : boolean + /** + * Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive. + */ + value? : any + /** + * Equivalent to using Vue's native component on the content + */ + keepAlive? : boolean + /** + * Equivalent to using Vue's native include prop for ; Values must be valid Vue component names + */ + keepAliveInclude? : string | any[] | RegExp + /** + * Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names + */ + keepAliveExclude? : string | any[] | RegExp + /** + * Equivalent to using Vue's native max prop for + */ + keepAliveMax? : number + /** + * Enable transitions between panel (also see 'transition-prev' and 'transition-next' props) + */ + animated? : boolean + /** + * Makes component appear as infinite (when reaching last panel, next one will become the first one) + */ + infinite? : boolean + /** + * Enable swipe events (may interfere with content's touch/mouse events) + */ + swipeable? : boolean + /** + * Default transitions and swipe actions will be on the vertical axis + */ + vertical? : boolean + /** + * One of Quasar's embedded transitions (has effect only if 'animated' prop is set) + */ + transitionPrev? : string + /** + * One of Quasar's embedded transitions (has effect only if 'animated' prop is set) + */ + transitionNext? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Height of Carousel in CSS units, including unit name + */ + height? : string + /** + * Applies a default padding to each slide, according to the usage of 'arrows' and 'navigation' props + */ + padding? : boolean + /** + * Color name for QCarousel button controls (arrows, navigation) from the Quasar Color Palette + */ + controlColor? : string + /** + * Color name for text color of QCarousel button controls (arrows, navigation) from the Quasar Color Palette + */ + controlTextColor? : string + /** + * Type of button to use for controls (arrows, navigation) + */ + controlType? : 'regular' | 'flat' | 'outline' | 'push' | 'unelevated' + /** + * Jump to next slide (if 'true' or val > 0) or previous slide (if val < 0) at fixed time intervals (in milliseconds); 'false' disables autoplay, 'true' enables it for 5000ms intervals + */ + autoplay? : number | boolean + /** + * Show navigation arrow buttons + */ + arrows? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + prevIcon? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + nextIcon? : string + /** + * Show navigation dots + */ + navigation? : boolean + /** + * Side to stick navigation to + */ + navigationPosition? : 'top' | 'right' | 'bottom' | 'left' + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + navigationIcon? : string + /** + * Icon name following Quasar convention for the active (current slide) navigation icon; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + navigationActiveIcon? : string + /** + * Show thumbnails + */ + thumbnails? : boolean + /** + * Toggle the view to be fullscreen or not fullscreen + */ + toggleFullscreen (): void + /** + * Enter the fullscreen view + */ + setFullscreen (): void + /** + * Leave the fullscreen view + */ + exitFullscreen (): void + /** + * Go to next panel + */ + next (): void + /** + * Go to previous panel + */ + previous (): void + /** + * Go to specific panel + * @param panelName Panel's name, which may be a String or Number; Number does not refers to panel index, but to its name, which may be an Integer + */ + goTo (panelName : string | number): void +} + +export interface QCarouselControl extends Vue { + /** + * Side/corner to stick to + */ + position? : 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top' | 'right' | 'bottom' | 'left' + /** + * An array of two numbers to offset the component horizontally and vertically (in pixels) + */ + offset? : any[] +} + +export interface QCarouselSlide extends Vue { + /** + * Slide name + */ + name : any + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * URL pointing to a slide background image (use public folder) + */ + imgSrc? : string +} + +export interface QChatMessage extends Vue { + /** + * Render as a sent message (so from current user) + */ + sent? : boolean + /** + * Renders a label header/section only + */ + label? : string + /** + * Color name (from the Quasar Color Palette) for chat bubble background + */ + bgColor? : string + /** + * Color name (from the Quasar Color Palette) for chat bubble text + */ + textColor? : string + /** + * Author's name + */ + name? : string + /** + * URL to the avatar image of the author + */ + avatar? : string + /** + * Array of strings that are the message body. Strings are not sanitized (see details in docs) + */ + text? : any[] + /** + * Creation timestamp + */ + stamp? : string + /** + * 1-12 out of 12 (same as col-*) + */ + size? : string + /** + * Force use of textContent instead of innerHTML to render label; Use it when the label might be unsafe (from user input) + */ + labelSanitize? : boolean + /** + * Force use of textContent instead of innerHTML to render name; Use it when the name might be unsafe (from user input) + */ + nameSanitize? : boolean + /** + * Force use of textContent instead of innerHTML to render text; Use it when the text might be unsafe (from user input) + */ + textSanitize? : boolean + /** + * Force use of textContent instead of innerHTML to render stamp; Use it when the stamp might be unsafe (from user input) + */ + stampSanitize? : boolean +} + +export interface QCheckbox extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : any | any[] + /** + * Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked + */ + val? : any + /** + * What model value should be considered as checked/ticked/on? + */ + trueValue? : any + /** + * What model value should be considered as unchecked/unticked/off? + */ + falseValue? : any + /** + * What model value should be considered as 'indeterminate'? + */ + indeterminateValue? : any + /** + * Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ... + */ + toggleOrder? : 'tf' | 'ft' + /** + * When user clicks/taps on the component, should we toggle through the indeterminate state too? + */ + toggleIndeterminate? : boolean + /** + * Label to display along the component (or use the default slot instead of this prop) + */ + label? : string + /** + * Label (if any specified) should be displayed on the left side of the component + */ + leftLabel? : boolean + /** + * The icon to be used when the model is truthy (instead of the default design) + */ + checkedIcon? : string + /** + * The icon to be used when the toggle is falsy (instead of the default design) + */ + uncheckedIcon? : string + /** + * The icon to be used when the model is indeterminate (instead of the default design) + */ + indeterminateIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Should the color (if specified any) be kept when the component is unticked/ off? + */ + keepColor? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Toggle the state (of the model) + */ + toggle (): void +} + +export interface QChip extends Vue { + /** + * Configure material ripple (disable it by setting it to 'false' or supply a config object) + */ + ripple? : boolean | LooseDictionary + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * QChip size name or a CSS unit including unit name + */ + size? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconRight? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconRemove? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconSelected? : string + /** + * Chip's content as string; overrides default slot if specified + */ + label? : string | number + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Model of the component determining if QChip should be rendered or not + */ + value? : boolean + /** + * Model for QChip if it's selected or not + */ + selected? : boolean + /** + * Sets a low value for border-radius instead of the default one, making it close to a square + */ + square? : boolean + /** + * Display using the 'outline' design + */ + outline? : boolean + /** + * Is QChip clickable? If it's the case, then it will add hover effects and emit 'click' events + */ + clickable? : boolean + /** + * If set, then it displays a 'remove' icon that when clicked the QChip emits 'remove' event + */ + removable? : boolean + /** + * aria-label to be used on the remove icon + */ + removeAriaLabel? : string + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Put component in disabled mode + */ + disable? : boolean +} + +export interface QCircularProgress extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Current progress (must be between min/max) + */ + value? : number + /** + * Minimum value defining 'no progress' (must be lower than 'max') + */ + min? : number + /** + * Maximum value defining 100% progress made (must be higher than 'min') + */ + max? : number + /** + * Color name for the arc progress from the Quasar Color Palette + */ + color? : string + /** + * Color name for the center part of the component from the Quasar Color Palette + */ + centerColor? : string + /** + * Color name for the track of the component from the Quasar Color Palette + */ + trackColor? : string + /** + * Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size + */ + fontSize? : string + /** + * Rounding the arc of progress + */ + rounded? : boolean + /** + * Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size + */ + thickness? : number + /** + * Angle to rotate progress arc by + */ + angle? : number + /** + * Put component into 'indeterminate' state; Ignores 'value' prop + */ + indeterminate? : boolean + /** + * Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component + */ + showValue? : boolean + /** + * Reverses the direction of progress; Only for determined state + */ + reverse? : boolean + /** + * No animation when model changes + */ + instantFeedback? : boolean +} + +export interface QColor extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : string + /** + * The default value to show when the model doesn't have one + */ + defaultValue? : string + /** + * The default view of the picker + */ + defaultView? : 'spectrum' | 'tune' | 'palette' + /** + * Forces a certain model format upon the model + */ + formatModel? : 'auto' | 'hex' | 'rgb' | 'hexa' | 'rgba' + /** + * Use a custom palette of colors for the palette tab + */ + palette? : any[] + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Do not render header + */ + noHeader? : boolean + /** + * Do not render header tabs (only the input) + */ + noHeaderTabs? : boolean + /** + * Do not render footer; Useful when you want a specific view ('default-view' prop) and don't want the user to be able to switch it + */ + noFooter? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean +} + +export interface QDate extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Date(s) of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : string | any[] | LooseDictionary + /** + * Display the component in landscape mode + */ + landscape? : boolean + /** + * Mask (formatting string) used for parsing and formatting value + */ + mask? : string + /** + * Locale formatting options + */ + locale? : { + /** + * List of full day names (DDDD), starting with Sunday + */ + days? : any[] + /** + * List of short day names (DDD), starting with Sunday + */ + daysShort? : any[] + /** + * List of full month names (MMMM), starting with January + */ + months? : any[] + /** + * List of short month names (MMM), starting with January + */ + monthsShort? : any[] } + /** + * Specify calendar type + */ + calendar? : 'gregorian' | 'persian' + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * When specified, it overrides the default header title; Makes sense when not in 'minimal' mode + */ + title? : string + /** + * When specified, it overrides the default header subtitle; Makes sense when not in 'minimal' mode + */ + subtitle? : string + /** + * The default year and month to display (in YYYY/MM format) when model is unfilled (undefined or null); Please ensure it is within the navigation min/max year-month (if using them) + */ + defaultYearMonth? : string + /** + * The view which will be displayed by default + */ + defaultView? : 'Calendar' | 'Months' | 'Years' + /** + * Show the years selector in months view + */ + yearsInMonthView? : boolean + /** + * A list of events to highlight on the calendar; If using a function, it receives the date as a String and must return a Boolean (matches or not); If using a function then for best performance, reference it from your scope and do not define it inline + */ + events? : any[] | Function + /** + * Color name (from the Quasar Color Palette); If using a function, it receives the date as a String and must return a String (color for the received date); If using a function then for best performance, reference it from your scope and do not define it inline + */ + eventColor? : string | Function + /** + * Optionally configure the days that are selectable; If using a function, it receives the date as a String and must return a Boolean (is date acceptable or not); If using a function then for best performance, reference it from your scope and do not define it inline; Incompatible with 'range' prop + */ + options? : any[] | Function + /** + * On which end of the range to navigate the calendar when the model changes; Use `false` to skip navigation + */ + modelNavigation? : 'from' | 'to' | boolean + /** + * Lock user from navigating below a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop + */ + navigationMinYearMonth? : string + /** + * Lock user from navigating above a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop + */ + navigationMaxYearMonth? : string + /** + * Remove ability to unselect a date; It does not apply to selecting a range over already selected dates + */ + noUnset? : boolean + /** + * Sets the day of the week that is considered the first day (0 - Sunday, 1 - Monday, ...); This day will show in the left-most column of the calendar + */ + firstDayOfWeek? : string | number + /** + * Display a button that selects the current day + */ + todayBtn? : boolean + /** + * Don’t display the header + */ + minimal? : boolean + /** + * Allow multiple selection; Model must be Array + */ + multiple? : boolean + /** + * Allow range selection; Partial compatibility with 'options' prop: selected ranges might also include 'unselectable' days + */ + range? : boolean + /** + * Model single days as a range (object) instead of string + */ + dayAsRange? : boolean + /** + * Emit model when user browses month and year too; ONLY for single selection (non-multiple, non-range) + */ + emitImmediately? : boolean + /** + * Change model to today + */ + setToday (): void + /** + * Change current view + * @param view QDate view name + */ + setView (view : 'Calendar' | 'Months' | 'Years'): void + /** + * Increment or decrement calendar view's month or year + * @param type What to increment/decrement + * @param descending Decrement? + */ + offsetCalendar (type : 'month' | 'year', descending? : boolean): void + /** + * Change current year and month of the Calendar view; It gets corrected if using navigation-min/max-year-month and sets the current view to Calendar + * @param year The year + * @param month The month + */ + setCalendarTo (year? : number, month? : number): void + /** + * Configure the current editing range + * @param from Definition of date from where the range begins + * @param to Definition of date to where the range ends + * @param modelNavigation On which end of the range to navigate the calendar; Use `false` to skip navigation + */ + setEditingRange (from? : { + /** + * The year + */ + year? : number + /** + * The month + */ + month? : number + /** + * The day of month + */ + day? : number }, to? : { + /** + * The year + */ + year? : number + /** + * The month + */ + month? : number + /** + * The day of month + */ + day? : number }, modelNavigation? : 'from' | 'to' | boolean): void +} + +export interface QDialog extends Vue { + /** + * Class definitions to be attributed to the content + */ + contentClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the content + */ + contentStyle? : any[] | string | LooseDictionary + /** + * Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * User cannot dismiss Dialog if clicking outside of it or hitting ESC key; Also, an app route change won't dismiss it + */ + persistent? : boolean + /** + * User cannot dismiss Dialog by hitting ESC key; No need to set it if 'persistent' prop is also set + */ + noEscDismiss? : boolean + /** + * User cannot dismiss Dialog by clicking outside of it; No need to set it if 'persistent' prop is also set + */ + noBackdropDismiss? : boolean + /** + * Changing route app won't dismiss Dialog; No need to set it if 'persistent' prop is also set + */ + noRouteDismiss? : boolean + /** + * Any click/tap inside of the dialog will close it + */ + autoClose? : boolean + /** + * Put Dialog into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too + */ + seamless? : boolean + /** + * Put Dialog into maximized mode + */ + maximized? : boolean + /** + * Dialog will try to render with same width as the window + */ + fullWidth? : boolean + /** + * Dialog will try to render with same height as the window + */ + fullHeight? : boolean + /** + * Stick dialog to one of the sides (top, right, bottom or left) + */ + position? : 'standard' | 'top' | 'right' | 'bottom' | 'left' + /** + * One of Quasar's embedded transitions + */ + transitionShow? : string + /** + * One of Quasar's embedded transitions + */ + transitionHide? : string + /** + * Forces content to have squared borders + */ + square? : boolean + /** + * (Accessibility) When Dialog gets hidden, do not refocus on the DOM element that previously had focus + */ + noRefocus? : boolean + /** + * (Accessibility) When Dialog gets shown, do not switch focus on it + */ + noFocus? : boolean + /** + * Do not shake up the Dialog to catch user's attention + */ + noShake? : boolean + /** + * Triggers component to show + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Triggers component to hide + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void + /** + * Triggers component to toggle between show/hide + * @param evt JS event object + */ + toggle (evt? : LooseDictionary): void + /** + * Focus dialog; if you have content with autofocus attribute, it will directly focus it + * @param selector Optional CSS selector to override default focusable element - use '' to focus first focusable element instead of the one with autofocus + */ + focus (selector? : string): void + /** + * Shakes dialog + */ + shake (): void +} + +export interface QDrawer extends Vue { + /** + * Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * Side to attach to + */ + side? : 'left' | 'right' + /** + * Puts drawer into overlay mode (does not occupy space on screen, narrowing the page) + */ + overlay? : boolean + /** + * Width of drawer (in pixels) + */ + width? : number + /** + * Puts drawer into mini mode + */ + mini? : boolean + /** + * Width of drawer (in pixels) when in mini mode + */ + miniWidth? : number + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Mini mode will expand as an overlay + */ + miniToOverlay? : boolean + /** + * Breakpoint (in pixels) of layout width up to which mobile mode is used + */ + breakpoint? : number + /** + * Overrides the default dynamic mode into which the drawer is put on + */ + behavior? : 'default' | 'desktop' | 'mobile' + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Adds a default shadow to the header + */ + elevated? : boolean + /** + * Prevents drawer from auto-closing when app's route changes + */ + persistent? : boolean + /** + * Forces drawer to be shown on screen on initial render if the layout width is above breakpoint, regardless of v-model; This is the default behavior when SSR is taken over by client on initial render + */ + showIfAbove? : boolean + /** + * Class definitions to be attributed to the drawer + */ + contentClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the drawer + */ + contentStyle? : any[] | string | LooseDictionary + /** + * Disables the default behavior where drawer can be swiped into view; Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature + */ + noSwipeOpen? : boolean + /** + * Disables the default behavior where drawer can be swiped out of view (applies to drawer content only); Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature + */ + noSwipeClose? : boolean + /** + * Disables the default behavior where drawer backdrop can be swiped + */ + noSwipeBackdrop? : boolean + /** + * Triggers component to show + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Triggers component to hide + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void + /** + * Triggers component to toggle between show/hide + * @param evt JS event object + */ + toggle (evt? : LooseDictionary): void +} + +export interface QEditor extends Vue { + /** + * Fullscreen mode + */ + fullscreen? : boolean + /** + * Changing route app won't exit fullscreen + */ + noRouteFullscreenExit? : boolean + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : string + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a 'flat' design (no borders) + */ + flat? : boolean + /** + * Dense mode; toolbar buttons are shown on one-line only + */ + dense? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * CSS unit for the minimum height of the editable area + */ + minHeight? : string + /** + * CSS unit for maximum height of the input area + */ + maxHeight? : string + /** + * CSS value to set the height of the editable area + */ + height? : string + /** + * Definition of commands and their buttons to be included in the 'toolbar' prop + */ + definitions? : { + /** + * Label of the button + */ + label? : string + /** + * Text to be displayed as a tooltip on hover + */ + tip? : string + /** + * HTML formatted text to be displayed within a tooltip on hover + */ + htmlTip? : string + /** + * Icon of the button + */ + icon? : string + /** + * Keycode of a key to be used together with the key for use as a shortcut to trigger this element + */ + key? : number + /** + * Either this or "cmd" is required. Function for when button gets clicked/tapped. + */ + handler? : Function + /** + * Either this or "handler" is required. This must be a valid execCommand method according to the designMode API. + */ + cmd? : string + /** + * Only set a param if using a "cmd". This is commonly text or HTML to inject, but is highly dependent upon the specific cmd being called. + */ + param? : string + /** + * Is button disabled? If specifying a function, return a Boolean value. + */ + disable? : boolean | Function + /** + * Pass the value "no-state" if the button should not have an "active" state + */ + type? : 'no-state' + /** + * Lock the button label, so it doesn't change based on the child option selected. + */ + fixedLabel? : boolean + /** + * Lock the button icon, so it doesn't change based on the child option selected. + */ + fixedIcon? : boolean + /** + * Highlight the toolbar button, when a child option has been selected. + */ + highlight? : boolean } + /** + * Object with definitions of fonts + */ + fonts? : LooseDictionary + /** + * An array of arrays of Objects/Strings that you use to define the construction of the elements and commands available in the toolbar + */ + toolbar? : any[] + /** + * Font color (from the Quasar Palette) of buttons and text in the toolbar + */ + toolbarColor? : string + /** + * Text color (from the Quasar Palette) of toolbar commands + */ + toolbarTextColor? : string + /** + * Choose the active color (from the Quasar Palette) of toolbar commands button + */ + toolbarToggleColor? : string + /** + * Toolbar background color (from Quasar Palette) + */ + toolbarBg? : string + /** + * Toolbar buttons are rendered "outlined" + */ + toolbarOutline? : boolean + /** + * Toolbar buttons are rendered as a "push-button" type + */ + toolbarPush? : boolean + /** + * Toolbar buttons are rendered "rounded" + */ + toolbarRounded? : boolean + /** + * Paragraph tag to be used + */ + paragraphTag? : 'div' | 'p' + /** + * Object with CSS properties and values for styling the container of QEditor + */ + contentStyle? : LooseDictionary + /** + * CSS classes for the input area + */ + contentClass? : LooseDictionary | any[] | string + /** + * Text to display as placeholder + */ + placeholder? : string + /** + * Toggle the view to be fullscreen or not fullscreen + */ + toggleFullscreen (): void + /** + * Enter the fullscreen view + */ + setFullscreen (): void + /** + * Leave the fullscreen view + */ + exitFullscreen (): void + /** + * Run contentEditable command at caret position and range + * @param cmd Must be a valid execCommand method according to the designMode API + * @param param The argument to pass to the command + * @param update Refresh the toolbar + */ + runCmd (cmd : string, param? : string, update? : boolean): void + /** + * Hide the link editor if visible and force the instance to re-render + */ + refreshToolbar (): void + /** + * Focus on the contentEditable at saved cursor position + */ + focus (): void + /** + * Retrieve the content of the Editor + * @returns Provides the pure HTML within the editable area + */ + getContentEl (): Element +} + +export interface QExpansionItem extends Vue { + /** + * Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used + */ + to? : string | LooseDictionary + /** + * Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used + */ + exact? : boolean + /** + * Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used + */ + append? : boolean + /** + * Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used + */ + replace? : boolean + /** + * Equivalent to Vue Router 'active-class' property + */ + activeClass? : string + /** + * Equivalent to Vue Router 'active-class' property + */ + exactActiveClass? : string + /** + * Native link href attribute; Has priority over the 'to'/'exact'/'replace' props + */ + href? : string + /** + * Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props + */ + target? : string + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Model of the component defining 'open' state; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + expandIcon? : string + /** + * Expand icon name (following Quasar convention) for when QExpansionItem is expanded; When used, it also disables the rotation animation of the expand icon; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + expandedIcon? : string + /** + * Apply custom class(es) to the expand icon item section + */ + expandIconClass? : any[] | string | LooseDictionary + /** + * aria-label to be used on the expansion toggle element + */ + toggleAriaLabel? : string + /** + * Header label (unless using 'header' slot) + */ + label? : string + /** + * Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property! + */ + labelLines? : number | string + /** + * Header sub-label (unless using 'header' slot) + */ + caption? : string + /** + * Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property! + */ + captionLines? : number | string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Animation duration (in milliseconds) + */ + duration? : number + /** + * Apply an inset to header (unless using 'header' slot); Useful when header avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu + */ + headerInsetLevel? : number + /** + * Apply an inset to content (changes content padding) + */ + contentInsetLevel? : number + /** + * Apply a top and bottom separator when expansion item is opened + */ + expandSeparator? : boolean + /** + * Puts expansion item into open state on initial render; Overridden by v-model if used + */ + defaultOpened? : boolean + /** + * Do not show the expand icon + */ + hideExpandIcon? : boolean + /** + * Applies the expansion events to the expand icon only and not to the whole header + */ + expandIconToggle? : boolean + /** + * Switch expand icon side (from default 'right' to 'left') + */ + switchToggleSide? : boolean + /** + * Use dense mode for expand icon + */ + denseToggle? : boolean + /** + * Register expansion item into a group (unique name that must be applied to all expansion items in that group) for coordinated open/close state within the group a.k.a. 'accordion mode' + */ + group? : string + /** + * Put expansion list into 'popup' mode + */ + popup? : boolean + /** + * Apply custom style to the header + */ + headerStyle? : any[] | string | LooseDictionary + /** + * Apply custom class(es) to the header + */ + headerClass? : any[] | string | LooseDictionary + /** + * Triggers component to show + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Triggers component to hide + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void + /** + * Triggers component to toggle between show/hide + * @param evt JS event object + */ + toggle (evt? : LooseDictionary): void +} + +export interface QFab extends Vue { + /** + * Define the button HTML DOM type + */ + type? : 'a' | 'submit' | 'button' | 'reset' + /** + * Use 'outline' design for Fab button + */ + outline? : boolean + /** + * Use 'push' design for Fab button + */ + push? : boolean + /** + * Use 'flat' design for Fab button + */ + flat? : boolean + /** + * Remove shadow + */ + unelevated? : boolean + /** + * Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set + */ + padding? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Apply the glossy effect over the button + */ + glossy? : boolean + /** + * Display label besides the FABs, as external content + */ + externalLabel? : boolean + /** + * The label that will be shown when Fab is extended + */ + label? : string | number + /** + * Position of the label around the icon + */ + labelPosition? : 'top' | 'right' | 'bottom' | 'left' + /** + * Hide the label; Useful for animation purposes where you toggle the visibility of the label + */ + hideLabel? : boolean + /** + * Class definitions to be attributed to the label container + */ + labelClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the label container + */ + labelStyle? : any[] | string | LooseDictionary + /** + * Apply a rectangle aspect to the FAB + */ + square? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Controls state of fab actions (showing/hidden); Works best with v-model directive, otherwise use along listening to 'input' event + */ + value? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + activeIcon? : string + /** + * Hide the icon (don't use any) + */ + hideIcon? : boolean + /** + * Direction to expand Fab Actions to + */ + direction? : 'up' | 'right' | 'down' | 'left' + /** + * The side of the Fab where Fab Actions will expand (only when direction is 'up' or 'down') + */ + verticalActionsAlign? : 'left' | 'center' | 'right' + /** + * By default, Fab Actions are hidden when user navigates to another route and this prop disables this behavior + */ + persistent? : boolean + /** + * Expands fab actions list + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Collapses fab actions list + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void + /** + * Triggers component to toggle between show/hide + * @param evt JS event object + */ + toggle (evt? : LooseDictionary): void +} + +export interface QFabAction extends Vue { + /** + * Define the button HTML DOM type + */ + type? : 'a' | 'submit' | 'button' | 'reset' + /** + * Use 'outline' design for Fab button + */ + outline? : boolean + /** + * Use 'push' design for Fab button + */ + push? : boolean + /** + * Use 'flat' design for Fab button + */ + flat? : boolean + /** + * Remove shadow + */ + unelevated? : boolean + /** + * Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set + */ + padding? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Apply the glossy effect over the button + */ + glossy? : boolean + /** + * Display label besides the FABs, as external content + */ + externalLabel? : boolean + /** + * The label that will be shown when Fab is extended + */ + label? : string | number + /** + * Position of the label around the icon + */ + labelPosition? : 'top' | 'right' | 'bottom' | 'left' + /** + * Hide the label; Useful for animation purposes where you toggle the visibility of the label + */ + hideLabel? : boolean + /** + * Class definitions to be attributed to the label container + */ + labelClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the label container + */ + labelStyle? : any[] | string | LooseDictionary + /** + * Apply a rectangle aspect to the FAB + */ + square? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * How to align the Fab Action relative to Fab expand side; By default it uses the align specified in QFab + */ + anchor? : 'start' | 'center' | 'end' + /** + * Equivalent to Vue Router 'to' property + */ + to? : string | LooseDictionary + /** + * Equivalent to Vue Router 'replace' property + */ + replace? : boolean + /** + * Emulate click on QFabAction + * @param evt JS event object + */ + click (evt? : LooseDictionary): void +} + +export interface QField extends Vue { + /** + * Does field have validation errors? + */ + error? : boolean + /** + * Validation error message (gets displayed only if 'error' is set to 'true') + */ + errorMessage? : string + /** + * Hide error icon when there is an error + */ + noErrorIcon? : boolean + /** + * Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules + */ + rules? : any[] + /** + * By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it + */ + reactiveRules? : boolean + /** + * If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself + */ + lazyRules? : boolean | 'ondemand' + /** + * A text label that will “float” up above the input field, once the field gets focus + */ + label? : string + /** + * Label will be always shown above the field regardless of field content (if any) + */ + stackLabel? : boolean + /** + * Helper (hint) text which gets placed below your wrapped form component + */ + hint? : string + /** + * Hide the helper (hint) text when field doesn't have focus + */ + hideHint? : boolean + /** + * Prefix + */ + prefix? : string + /** + * Suffix + */ + suffix? : string + /** + * Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused + */ + labelColor? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component from the Quasar Color Palette + */ + bgColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot. + */ + loading? : boolean + /** + * Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null + */ + clearable? : boolean + /** + * Custom icon to use for the clear button when using along with 'clearable' prop + */ + clearIcon? : string + /** + * Use 'filled' design for the field + */ + filled? : boolean + /** + * Use 'outlined' design for the field + */ + outlined? : boolean + /** + * Use Material Design 'outlined' design for the field + */ + outlinedMd? : boolean + /** + * Use 'borderless' design for the field + */ + borderless? : boolean + /** + * Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones) + */ + standout? : boolean | string + /** + * Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set + */ + labelSlot? : boolean + /** + * Enables bottom slots ('error', 'hint', 'counter') + */ + bottomSlots? : boolean + /** + * Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content + */ + hideBottomSpace? : boolean + /** + * Show an automatic counter on bottom right + */ + counter? : boolean + /** + * Applies a small standard border-radius for a squared shape of the component + */ + rounded? : boolean + /** + * Remove border-radius so borders are squared; Overrides 'rounded' prop + */ + square? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Match inner content alignment to that of QItem + */ + itemAligned? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Focus field on initial component render + */ + autofocus? : boolean + /** + * Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well + */ + for? : string + /** + * Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists + */ + name? : string + /** + * Specify a max length of model + */ + maxlength? : string | number + /** + * Reset validation status + */ + resetValidation (): void + /** + * Trigger a validation + * @param value Optional value to validate against + * @returns True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected) + */ + validate (value? : any): boolean | Promise + /** + * Focus field + */ + focus (): void + /** + * Blur field (lose focus) + */ + blur (): void +} + +export interface QFile extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists + */ + name? : string + /** + * Allow multiple file uploads + */ + multiple? : boolean + /** + * Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element + */ + accept? : string + /** + * Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element + */ + capture? : 'user' | 'environment' + /** + * Maximum size of individual file in bytes + */ + maxFileSize? : number | string + /** + * Maximum size of all files combined in bytes + */ + maxTotalSize? : number | string + /** + * Maximum number of files to contain + */ + maxFiles? : number | string + /** + * Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline + */ + filter? : Function + /** + * Does field have validation errors? + */ + error? : boolean + /** + * Validation error message (gets displayed only if 'error' is set to 'true') + */ + errorMessage? : string + /** + * Hide error icon when there is an error + */ + noErrorIcon? : boolean + /** + * Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules + */ + rules? : any[] + /** + * By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it + */ + reactiveRules? : boolean + /** + * If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself + */ + lazyRules? : boolean | 'ondemand' + /** + * A text label that will “float” up above the input field, once the field gets focus + */ + label? : string + /** + * Label will be always shown above the field regardless of field content (if any) + */ + stackLabel? : boolean + /** + * Helper (hint) text which gets placed below your wrapped form component + */ + hint? : string + /** + * Hide the helper (hint) text when field doesn't have focus + */ + hideHint? : boolean + /** + * Prefix + */ + prefix? : string + /** + * Suffix + */ + suffix? : string + /** + * Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused + */ + labelColor? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component from the Quasar Color Palette + */ + bgColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot. + */ + loading? : boolean + /** + * Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null + */ + clearable? : boolean + /** + * Custom icon to use for the clear button when using along with 'clearable' prop + */ + clearIcon? : string + /** + * Use 'filled' design for the field + */ + filled? : boolean + /** + * Use 'outlined' design for the field + */ + outlined? : boolean + /** + * Use Material Design 'outlined' design for the field + */ + outlinedMd? : boolean + /** + * Use 'borderless' design for the field + */ + borderless? : boolean + /** + * Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones) + */ + standout? : boolean | string + /** + * Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set + */ + labelSlot? : boolean + /** + * Enables bottom slots ('error', 'hint', 'counter') + */ + bottomSlots? : boolean + /** + * Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content + */ + hideBottomSpace? : boolean + /** + * Show an automatic counter on bottom right + */ + counter? : boolean + /** + * Applies a small standard border-radius for a squared shape of the component + */ + rounded? : boolean + /** + * Remove border-radius so borders are squared; Overrides 'rounded' prop + */ + square? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Match inner content alignment to that of QItem + */ + itemAligned? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Focus field on initial component render + */ + autofocus? : boolean + /** + * Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well + */ + for? : string + /** + * Model of the component; Must be FileList or Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : File | FileList | any[] + /** + * Append file(s) to current model rather than replacing them; Has effect only when using 'multiple' mode + */ + append? : boolean + /** + * Override default selection string, if not using 'file' or 'selected' scoped slots and if not using 'use-chips' prop + */ + displayValue? : number | string + /** + * Use QChip to show picked files + */ + useChips? : boolean + /** + * Label for the counter; The 'counter' prop is necessary to enable this one + */ + counterLabel? : Function + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Class definitions to be attributed to the underlying selection container + */ + inputClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the underlying selection container + */ + inputStyle? : any[] | string | LooseDictionary + /** + * Trigger file pick; Must be called as a direct consequence of user interaction (eg. in a click handler), due to browsers security policy + * @param evt JS event object + */ + pickFiles (evt? : LooseDictionary): void + /** + * Add files programmatically + * @param files Array of files (instances of File) + */ + addFiles (files : FileList | any[]): void + /** + * Reset validation status + */ + resetValidation (): void + /** + * Trigger a validation + * @param value Optional value to validate against + * @returns True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected) + */ + validate (value? : any): boolean | Promise + /** + * Focus component + */ + focus (): void + /** + * Blur component (lose focus) + */ + blur (): void + /** + * Remove file located at specific index in the model + * @param index Index at which to remove selection + */ + removeAtIndex (index : number): void + /** + * Remove specified file from the model + * @param file File to remove (instance of File) + */ + removeFile (file : File): void +} + +export interface QFooter extends Vue { + /** + * Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide footer + */ + reveal? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Adds a default shadow to the footer + */ + elevated? : boolean + /** + * When using SSR, you can optionally hint of the height (in pixels) of the QFooter + */ + heightHint? : number | string +} + +export interface QForm extends Vue { + /** + * Focus first focusable element on initial component render + */ + autofocus? : boolean + /** + * Do not try to focus on first component that has a validation error when submitting form + */ + noErrorFocus? : boolean + /** + * Do not try to focus on first component when resetting form + */ + noResetFocus? : boolean + /** + * Validate all fields in form (by default it stops after finding the first invalid field with synchronous validation) + */ + greedy? : boolean + /** + * Focus on first focusable element/component in the form + */ + focus (): void + /** + * Triggers a validation on all applicable inner Quasar components + * @param shouldFocus Tell if it should focus or not on component with error on submitting form; Overrides 'no-focus-error' prop if specified + * @returns Promise is always fulfilled and receives the outcome (true -> validation was a success, false -> invalid models detected) + */ + validate (shouldFocus? : boolean): Promise + /** + * Resets the validation on all applicable inner Quasar components + */ + resetValidation (): void + /** + * Manually trigger form validation and submit + * @param evt JS event object + */ + submit (evt? : LooseDictionary): void + /** + * Manually trigger form reset + * @param evt JS event object + */ + reset (evt? : LooseDictionary): void + /** + * Get array of children vue components that support validation + * @returns Vue components that support Quasar validation API + */ + getValidationComponents (): any[] +} + +export interface QHeader extends Vue { + /** + * Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide header + */ + reveal? : boolean + /** + * Amount of scroll (in pixels) that should trigger a 'reveal' state change + */ + revealOffset? : number + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Adds a default shadow to the header + */ + elevated? : boolean + /** + * When using SSR, you can optionally hint of the height (in pixels) of the QHeader + */ + heightHint? : number | string +} + +export interface QIcon extends Vue { + /** + * HTML tag to render, unless no icon is supplied or it's an svg icon + */ + tag? : string + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + name? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Useful if icon is on the left side of something: applies a standard margin on the right side of Icon + */ + left? : boolean + /** + * Useful if icon is on the right side of something: applies a standard margin on the left side of Icon + */ + right? : boolean +} + +export interface QImg extends Vue { + /** + * Force the component to maintain an aspect ratio + */ + ratio? : string | number | string | number + /** + * Path to image + */ + src? : string + /** + * Same syntax as srcset attribute. + */ + srcset? : string + /** + * Same syntax as sizes attribute. + */ + sizes? : string + /** + * Forces image width; Must also include the unit (px or %) + */ + width? : string + /** + * Forces image height; Must also include the unit (px or %) + */ + height? : string + /** + * Specifies an alternate text for the image, if the image cannot be displayed + */ + alt? : string + /** + * While waiting for your image to load, you can use a placeholder image + */ + placeholderSrc? : string + /** + * Do not use transitions; faster render + */ + basic? : boolean + /** + * Make sure that the image getting displayed is fully contained, regardless if additional blank space besides the image is needed on horizontal or vertical + */ + contain? : boolean + /** + * Equivalent to CSS background-position property + */ + position? : string + /** + * One of Quasar's embedded transitions + */ + transition? : string + /** + * Class definitions to be attributed to the container of image; Does not apply to the caption + */ + imgClass? : any[] | string | LooseDictionary + /** + * Apply CSS to the container of the image; Does not apply to the caption + */ + imgStyle? : LooseDictionary + /** + * Color name for default Spinner (unless using a 'loading' slot) + */ + spinnerColor? : string + /** + * Size in CSS units, including unit name, for default Spinner (unless using a 'loading' slot) + */ + spinnerSize? : string + /** + * Do not display the default spinner when loading images (unless you are specifying one through the 'loading' slot) + */ + noDefaultSpinner? : boolean + /** + * Enable the native context menu of the image + */ + nativeContextMenu? : boolean +} + +export interface QInfiniteScroll extends Vue { + /** + * Offset (pixels) to bottom of Infinite Scroll container from which the component should start loading more content in advance + */ + offset? : number + /** + * Debounce amount (in milliseconds) + */ + debounce? : string | number + /** + * Initialize the pagination index (used for the @load event) + */ + initialIndex? : number + /** + * CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one + */ + scrollTarget? : Element | string + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Scroll area should behave like a messenger - starting scrolled to bottom and loading when reaching the top + */ + reverse? : boolean + /** + * Checks scroll position and loads more content if necessary + */ + poll (): void + /** + * Tells Infinite Scroll to load more content, regardless of the scroll position + */ + trigger (): void + /** + * Resets calling index to 0 + */ + reset (): void + /** + * Stops working, regardless of scroll position + */ + stop (): void + /** + * Starts working. Checks scroll position upon call and if trigger is hit, it loads more content + */ + resume (): void + /** + * Overwrite the current pagination index + */ + setIndex (): void + /** + * Updates the scroll target; Useful when the parent elements change so that the scrolling target also changes + */ + updateScrollTarget (): void +} + +export interface QInnerLoading extends Vue { + /** + * Size in CSS units, including unit name, or standard size name (xs|sm|md|lg|xl), for the inner Spinner (unless using the default slot) + */ + size? : string + /** + * State - loading or not + */ + showing? : boolean + /** + * Color name for component from the Quasar Color Palette for the inner Spinner (unless using the default slot) + */ + color? : string + /** + * Add a label; Gets overriden when using the default slot + */ + label? : string + /** + * Add CSS class(es) to the label; Works along the 'label' prop only + */ + labelClass? : string + /** + * Apply custom style to the label; Works along the 'label' prop only + */ + labelStyle? : any[] | string | LooseDictionary + /** + * One of Quasar's embedded transitions + */ + transitionShow? : string + /** + * One of Quasar's embedded transitions + */ + transitionHide? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean +} + +export interface QInput extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists + */ + name? : string + /** + * Custom mask or one of the predefined mask names + */ + mask? : string + /** + * Fills string with specified characters (or underscore if value is not string) to fill mask's length + */ + fillMask? : boolean | string + /** + * Fills string from the right side of the mask + */ + reverseFillMask? : boolean + /** + * Model will be unmasked (won't contain tokens/separation characters) + */ + unmaskedValue? : boolean + /** + * Does field have validation errors? + */ + error? : boolean + /** + * Validation error message (gets displayed only if 'error' is set to 'true') + */ + errorMessage? : string + /** + * Hide error icon when there is an error + */ + noErrorIcon? : boolean + /** + * Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules + */ + rules? : any[] + /** + * By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it + */ + reactiveRules? : boolean + /** + * If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself + */ + lazyRules? : boolean | 'ondemand' + /** + * A text label that will “float” up above the input field, once the field gets focus + */ + label? : string + /** + * Label will be always shown above the field regardless of field content (if any) + */ + stackLabel? : boolean + /** + * Helper (hint) text which gets placed below your wrapped form component + */ + hint? : string + /** + * Hide the helper (hint) text when field doesn't have focus + */ + hideHint? : boolean + /** + * Prefix + */ + prefix? : string + /** + * Suffix + */ + suffix? : string + /** + * Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused + */ + labelColor? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component from the Quasar Color Palette + */ + bgColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot. + */ + loading? : boolean + /** + * Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null + */ + clearable? : boolean + /** + * Custom icon to use for the clear button when using along with 'clearable' prop + */ + clearIcon? : string + /** + * Use 'filled' design for the field + */ + filled? : boolean + /** + * Use 'outlined' design for the field + */ + outlined? : boolean + /** + * Use Material Design 'outlined' design for the field + */ + outlinedMd? : boolean + /** + * Use 'borderless' design for the field + */ + borderless? : boolean + /** + * Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones) + */ + standout? : boolean | string + /** + * Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set + */ + labelSlot? : boolean + /** + * Enables bottom slots ('error', 'hint', 'counter') + */ + bottomSlots? : boolean + /** + * Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content + */ + hideBottomSpace? : boolean + /** + * Show an automatic counter on bottom right + */ + counter? : boolean + /** + * Applies a small standard border-radius for a squared shape of the component + */ + rounded? : boolean + /** + * Remove border-radius so borders are squared; Overrides 'rounded' prop + */ + square? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Match inner content alignment to that of QItem + */ + itemAligned? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Focus field on initial component render + */ + autofocus? : boolean + /** + * Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well + */ + for? : string + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : string | number + /** + * Text to be displayed as shadow at the end of the text in the control; Does NOT applies to type=file + */ + shadowText? : string + /** + * Input type + */ + type? : 'text' | 'password' | 'textarea' | 'email' | 'search' | 'tel' | 'file' | 'number' | 'url' | 'time' | 'date' + /** + * Debounce amount (in milliseconds) when updating model + */ + debounce? : string | number + /** + * Specify a max length of model + */ + maxlength? : string | number + /** + * Make field autogrow along with its content (uses a textarea) + */ + autogrow? : boolean + /** + * Class definitions to be attributed to the underlying input tag + */ + inputClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the underlying input tag + */ + inputStyle? : any[] | string | LooseDictionary + /** + * Reset validation status + */ + resetValidation (): void + /** + * Trigger a validation + * @param value Optional value to validate against + * @returns True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected) + */ + validate (value? : any): boolean | Promise + /** + * Focus underlying input tag + */ + focus (): void + /** + * Lose focus on underlying input tag + */ + blur (): void + /** + * Select input text + */ + select (): void + /** + * Get the native input/textarea DOM Element + * @returns The underlying native input/textarea DOM Element + */ + getNativeElement (): LooseDictionary +} + +export interface QIntersection extends Vue { + /** + * HTML tag to render + */ + tag? : string + /** + * Get triggered only once + */ + once? : boolean + /** + * Pre-render content on server side if using SSR (use it to pre-render above the fold content) + */ + ssrPrerender? : boolean + /** + * [Intersection API root prop] Lets you define an alternative to the viewport as your root (through its DOM element); It is important to keep in mind that root needs to be an ancestor of the observed element + */ + root? : Element + /** + * [Intersection API rootMargin prop] Allows you to specify the margins for the root, effectively allowing you to either grow or shrink the area used for intersections + */ + margin? : string + /** + * [Intersection API threshold prop] Threshold(s) at which to trigger, specified as a ratio, or list of ratios, of (visible area / total area) of the observed element + */ + threshold? : any[] | number + /** + * One of Quasar's embedded transitions + */ + transition? : string + /** + * Disable visibility observable (content will remain as it was, visible or hidden) + */ + disable? : boolean +} + +export interface QItem extends Vue { + /** + * HTML tag to render; Suggestion: use 'label' when encapsulating a QCheckbox/QRadio/QToggle so that when user clicks/taps on the whole item it will trigger a model change for the mentioned components + */ + tag? : string + /** + * Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used + */ + to? : string | LooseDictionary + /** + * Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used + */ + exact? : boolean + /** + * Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used + */ + append? : boolean + /** + * Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used + */ + replace? : boolean + /** + * Equivalent to Vue Router 'active-class' property + */ + activeClass? : string + /** + * Equivalent to Vue Router 'active-class' property + */ + exactActiveClass? : string + /** + * Native link href attribute; Has priority over the 'to'/'exact'/'replace' props + */ + href? : string + /** + * Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props + */ + target? : string + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put item into 'active' state + */ + active? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Is QItem clickable? If it's the case, then it will add hover effects and emit 'click' events + */ + clickable? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Apply an inset; Useful when avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu + */ + insetLevel? : number + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Put item into a manual focus state; Enables 'focused' prop which will determine if item is focused or not, rather than relying on native hover/focus states + */ + manualFocus? : boolean + /** + * Determines focus state, ONLY if 'manual-focus' is enabled / set to true + */ + focused? : boolean +} + +export interface QItemLabel extends Vue { + /** + * Renders an overline label + */ + overline? : boolean + /** + * Renders a caption label + */ + caption? : boolean + /** + * Renders a header label + */ + header? : boolean + /** + * Apply ellipsis when there's not enough space to render on the specified number of lines; + */ + lines? : number | string +} + +export interface QItemSection extends Vue { + /** + * Render an avatar item side (does not needs 'side' prop to be set) + */ + avatar? : boolean + /** + * Render a thumbnail item side (does not needs 'side' prop to be set) + */ + thumbnail? : boolean + /** + * Renders as a side of the item + */ + side? : boolean + /** + * Align content to top (useful for multi-line items) + */ + top? : boolean + /** + * Do not wrap text (useful for item's main content) + */ + noWrap? : boolean +} + +export interface QList extends Vue { + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Applies a separator between contained items + */ + separator? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Applies a material design-like padding on top and bottom + */ + padding? : boolean +} + +export interface QKnob extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Any number to indicate the given value of the knob. Either use this property (along with a listener for 'input' event) OR use the v-model directive + */ + value? : number + /** + * The minimum value that the model (the knob value) should start at + */ + min? : number + /** + * The maximum value that the model (the knob value) should go to + */ + max? : number + /** + * Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop + */ + innerMin? : number + /** + * Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop + */ + innerMax? : number + /** + * A number representing steps in the value of the model, while adjusting the knob + */ + step? : number + /** + * Reverses the direction of progress + */ + reverse? : boolean + /** + * No animation when model changes + */ + instantFeedback? : boolean + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for the center part of the component from the Quasar Color Palette + */ + centerColor? : string + /** + * Color name for the track of the component from the Quasar Color Palette + */ + trackColor? : string + /** + * Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size + */ + fontSize? : string + /** + * Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size + */ + thickness? : number + /** + * Angle to rotate progress arc by + */ + angle? : number + /** + * Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component + */ + showValue? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean +} + +export interface QLayout extends Vue { + /** + * Defines how your layout components (header/footer/drawer) should be placed on screen; See docs examples + */ + view? : string + /** + * Containerize the layout which means it changes the default behavior of expanding to the whole window; Useful (but not limited to) for when using on a QDialog + */ + container? : boolean +} + +export interface QLinearProgress extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Progress value (0.0 < x < 1.0) + */ + value? : number + /** + * Optional buffer value (0.0 < x < 1.0) + */ + buffer? : number + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component's track from the Quasar Color Palette + */ + trackColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Reverse direction of progress + */ + reverse? : boolean + /** + * Draw stripes; For determinate state only (for performance reasons) + */ + stripe? : boolean + /** + * Put component into indeterminate mode + */ + indeterminate? : boolean + /** + * Put component into query mode + */ + query? : boolean + /** + * Applies a small standard border-radius for a squared shape of the component + */ + rounded? : boolean + /** + * No transition when model changes + */ + instantFeedback? : boolean +} + +export interface QMarkupTable extends Vue { + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Use a separator/border between rows, columns or all cells + */ + separator? : 'horizontal' | 'vertical' | 'cell' | 'none' + /** + * Wrap text within table cells + */ + wrapCells? : boolean +} + +export interface QMenu extends Vue { + /** + * Configure a target element to trigger component toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) or a DOM element it attaches the events to the specified DOM element (if it exists) + */ + target? : boolean | string | Element + /** + * Skips attaching events to the target DOM element (that trigger the element to get shown) + */ + noParentEvent? : boolean + /** + * Allows the component to behave like a context menu, which opens with a right mouse click (or long tap on mobile) + */ + contextMenu? : boolean + /** + * Class definitions to be attributed to the content + */ + contentClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the content + */ + contentStyle? : any[] | string | LooseDictionary + /** + * Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Allows the menu to match at least the full width of its target + */ + fit? : boolean + /** + * Allows the menu to cover its target. When used, the 'self' and 'fit' props are no longer effective + */ + cover? : boolean + /** + * Two values setting the starting position or anchor point of the menu relative to its target + */ + anchor? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * Two values setting the menu's own position relative to its target + */ + self? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * An array of two numbers to offset the menu horizontally and vertically in pixels + */ + offset? : any[] + /** + * CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one + */ + scrollTarget? : Element | string + /** + * Allows for the target position to be set by the mouse position, when the target of the menu is either clicked or touched + */ + touchPosition? : boolean + /** + * Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key + */ + persistent? : boolean + /** + * Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set + */ + noRouteDismiss? : boolean + /** + * Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap + */ + autoClose? : boolean + /** + * Separate from parent menu, marking it as a separate closing point for v-close-popup (without this, chained menus close all together) + */ + separateClosePopup? : boolean + /** + * Forces content to have squared borders + */ + square? : boolean + /** + * (Accessibility) When Menu gets hidden, do not refocus on the DOM element that previously had focus + */ + noRefocus? : boolean + /** + * (Accessibility) When Menu gets shown, do not switch focus on it + */ + noFocus? : boolean + /** + * The minimum height of the menu; Size in CSS units, including unit name + */ + minHeight? : string + /** + * The minimum width of the menu; Size in CSS units, including unit name + */ + minWidth? : string + /** + * The maximum height of the menu; Size in CSS units, including unit name + */ + maxHeight? : string + /** + * The maximum width of the menu; Size in CSS units, including unit name + */ + maxWidth? : string + /** + * One of Quasar's embedded transitions + */ + transitionShow? : string + /** + * One of Quasar's embedded transitions + */ + transitionHide? : string + /** + * Triggers component to show + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Triggers component to hide + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void + /** + * Triggers component to toggle between show/hide + * @param evt JS event object + */ + toggle (evt? : LooseDictionary): void + /** + * There are some custom scenarios for which Quasar cannot automatically reposition the menu without significant performance drawbacks so the optimal solution is for you to call this method when you need it + */ + updatePosition (): void + /** + * Focus menu; if you have content with autofocus attribute, it will directly focus it + * @param selector Optional CSS selector to override default focusable element - use '' to focus first focusable element instead of the one with autofocus + */ + focus (selector? : string): void +} + +export interface QNoSsr extends Vue { + /** + * HTML tag to render + */ + tag? : string + /** + * Text to display on server-side render (unless using 'placeholder' slot) + */ + placeholder? : string +} + +export interface QOptionGroup extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : any + /** + * Array of objects with value, label, and disable (optional) props. The binary components will be created according to this array; Props from QToggle, QCheckbox or QRadio can also be added as key/value pairs to control the components singularly + */ + options? : { + /** + * Label to display along the component + */ + label : string + /** + * Value of the option that will be used by the component model + */ + value : any + /** + * If true, the option will be disabled + */ + disable? : boolean + [index: string]: any }[] + /** + * Used to specify the name of the controls; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * The type of input component to be used + */ + type? : 'radio' | 'checkbox' | 'toggle' + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Should the color (if specified any) be kept when input components are unticked? + */ + keepColor? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Label (if any specified) should be displayed on the left side of the input components + */ + leftLabel? : boolean + /** + * Show input components as inline-block rather than each having their own row + */ + inline? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean +} + +export interface QPageScroller extends Vue { + /** + * Page side/corner to stick to + */ + position? : 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top' | 'right' | 'bottom' | 'left' + /** + * An array of two numbers to offset the component horizontally and vertically in pixels + */ + offset? : any[] + /** + * By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop + */ + expand? : boolean + /** + * Scroll offset (in pixels) from which point the component is shown on page; Measured from the top of the page (or from the bottom if in 'reverse' mode) + */ + scrollOffset? : number + /** + * Work in reverse (shows when scrolling to the top of the page and scrolls to bottom when triggered) + */ + reverse? : boolean + /** + * Duration (in milliseconds) of the scrolling until it reaches its target + */ + duration? : number +} + +export interface QPageSticky extends Vue { + /** + * Page side/corner to stick to + */ + position? : 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top' | 'right' | 'bottom' | 'left' + /** + * An array of two numbers to offset the component horizontally and vertically in pixels + */ + offset? : any[] + /** + * By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop + */ + expand? : boolean +} + +export interface QPage extends Vue { + /** + * Applies a default responsive page padding + */ + padding? : boolean + /** + * Override default CSS style applied to the component (sets minHeight); Function(offset: Number) => CSS props/value: Object; For best performance, reference it from your scope and do not define it inline + */ + styleFn? : Function +} + +export interface QPageContainer extends Vue { +} + +export interface QPagination extends Vue { + /** + * Current page (must be between min/max) + */ + value : number + /** + * Minimum page (must be lower than 'max') + */ + min? : number | string + /** + * Number of last page (must be higher than 'min') + */ + max : number | string + /** + * Notify the component that the background is a dark color (useful when you are using it along with the 'input' prop) + */ + dark? : boolean + /** + * Button size in CSS units, including unit name + */ + size? : string + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Use an input instead of buttons + */ + input? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconPrev? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconNext? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconFirst? : string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + iconLast? : string + /** + * Generate link for page buttons; For best performance, reference it from your scope and do not define it inline + */ + toFn? : Function + /** + * Show boundary button links + */ + boundaryLinks? : boolean + /** + * Always show first and last page buttons (if not using 'input') + */ + boundaryNumbers? : boolean + /** + * Show direction buttons + */ + directionLinks? : boolean + /** + * Show ellipses (...) when pages are available + */ + ellipses? : boolean + /** + * Maximum number of page links to display at a time; 0 means Infinite + */ + maxPages? : number | string + /** + * Use 'flat' design for non-active buttons (it's the default option) + */ + flat? : boolean + /** + * Use 'outline' design for non-active buttons + */ + outline? : boolean + /** + * Remove shadow for non-active buttons + */ + unelevated? : boolean + /** + * Use 'push' design for non-active buttons + */ + push? : boolean + /** + * Color name from the Quasar Color Palette for the non-active buttons + */ + color? : string + /** + * Text color name from the Quasar Color Palette for the ACTIVE buttons + */ + textColor? : string + /** + * The design of the ACTIVE button, similar to the flat/outline/push/unelevated props (but those are used for non-active buttons) + */ + activeDesign? : 'flat' | 'outline' | 'push' | 'unelevated' + /** + * Color name from the Quasar Color Palette for the ACTIVE button + */ + activeColor? : string + /** + * Text color name from the Quasar Color Palette for the ACTIVE button + */ + activeTextColor? : string + /** + * Makes a circle shaped button for all buttons + */ + round? : boolean + /** + * Applies a more prominent border-radius for a squared shape button for all buttons + */ + rounded? : boolean + /** + * Applies a glossy effect for all buttons + */ + glossy? : boolean + /** + * Apply custom gutter; Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl) - does not work in IE11 + */ + gutter? : string + /** + * Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set + */ + padding? : string + /** + * Style definitions to be attributed to the input (if using one) + */ + inputStyle? : string | any[] | LooseDictionary + /** + * Class definitions to be attributed to the input (if using one) + */ + inputClass? : string | any[] | LooseDictionary + /** + * Configure buttons material ripple (disable it by setting it to 'false' or supply a config object); Does not applies to boundary and ellipsis buttons + */ + ripple? : boolean | LooseDictionary + /** + * Go directly to the specified page + * @param pageNumber Page number to go to + */ + set (pageNumber? : number): void + /** + * Increment/Decrement current page by offset + * @param offset Offset page, can be negative or positive + */ + setByOffset (offset? : number): void +} + +export interface QParallax extends Vue { + /** + * Path to image (unless a 'media' slot is used) + */ + src? : string + /** + * Height of component (in pixels) + */ + height? : number + /** + * Speed of parallax effect (0.0 < x < 1.0) + */ + speed? : number + /** + * CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one + */ + scrollTarget? : Element | string +} + +export interface QPopupEdit extends Vue { + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : any + /** + * Optional title (unless 'title' slot is used) + */ + title? : string + /** + * Show Set and Cancel buttons + */ + buttons? : boolean + /** + * Override Set button label + */ + labelSet? : string + /** + * Override Cancel button label + */ + labelCancel? : string + /** + * Automatically save the model (if changed) when user clicks/taps outside of the popup; It does not apply to ESC key + */ + autoSave? : boolean + /** + * Class definitions to be attributed to the content + */ + contentClass? : string + /** + * Style definitions to be attributed to the content + */ + contentStyle? : any[] | string | LooseDictionary + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Validates model then triggers 'save' and closes Popup; Returns a Boolean ('true' means valid, 'false' means abort); Syntax: validate(value); For best performance, reference it from your scope and do not define it inline + */ + validate? : Function + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Allows the menu to match at least the full width of its target + */ + fit? : boolean + /** + * Allows the menu to cover its target. When used, the 'self' and 'fit' props are no longer effective + */ + cover? : boolean + /** + * Two values setting the starting position or anchor point of the menu relative to its target + */ + anchor? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * Two values setting the menu's own position relative to its target + */ + self? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * An array of two numbers to offset the menu horizontally and vertically in pixels + */ + offset? : any[] + /** + * Allows for the target position to be set by the mouse position, when the target of the menu is either clicked or touched + */ + touchPosition? : boolean + /** + * Avoid menu closing by hitting ESC key or by clicking/tapping outside of the Popup + */ + persistent? : boolean + /** + * Separate from parent menu, marking it as a separate closing point for v-close-popup (without this, chained menus close all together) + */ + separateClosePopup? : boolean + /** + * Forces menu to have squared borders + */ + square? : boolean + /** + * The maximum height of the menu; Size in CSS units, including unit name + */ + maxHeight? : string + /** + * The maximum width of the menu; Size in CSS units, including unit name + */ + maxWidth? : string + /** + * Trigger a model update; Validates model (and emits 'save' event if it's the case) then closes Popup + */ + set (): void + /** + * Triggers a model reset to its initial value ('cancel' event is emitted) then closes Popup + */ + cancel (): void + /** + * Triggers component to show + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Triggers component to hide + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void +} + +export interface QPopupProxy extends Vue { + /** + * Configure a target element to trigger component toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) or a DOM element it attaches the events to the specified DOM element (if it exists) + */ + target? : boolean | string | Element + /** + * Skips attaching events to the target DOM element (that trigger the element to get shown) + */ + noParentEvent? : boolean + /** + * Allows the component to behave like a context menu, which opens with a right mouse click (or long tap on mobile) + */ + contextMenu? : boolean + /** + * Defines the state of the component (shown/hidden); Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * Breakpoint (in pixels) of window width/height (whichever is smaller) from where a Menu will get to be used instead of a Dialog + */ + breakpoint? : number | string + /** + * Triggers component to show + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Triggers component to hide + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void + /** + * Triggers component to toggle between show/hide + * @param evt JS event object + */ + toggle (evt? : LooseDictionary): void +} + +export interface QPullToRefresh extends Vue { + /** + * Color name for the icon from the Quasar Color Palette + */ + color? : string + /** + * Color name for background of the icon container from the Quasar Color Palette + */ + bgColor? : string + /** + * Icon to display when refreshing the content + */ + icon? : string + /** + * Don't listen for mouse events + */ + noMouse? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one + */ + scrollTarget? : Element | string + /** + * Triggers a refresh + */ + trigger (): void + /** + * Updates the scroll target; Useful when the parent elements change so that the scrolling target also changes + */ + updateScrollTarget (): void +} + +export interface QRadio extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : number | string + /** + * The actual value of the option with which model value is changed + */ + val : number | string + /** + * Label to display along the radio control (or use the default slot instead of this prop) + */ + label? : string + /** + * Label (if any specified) should be displayed on the left side of the checkbox + */ + leftLabel? : boolean + /** + * The icon to be used when selected (instead of the default design) + */ + checkedIcon? : string + /** + * The icon to be used when un-selected (instead of the default design) + */ + uncheckedIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Should the color (if specified any) be kept when checkbox is unticked? + */ + keepColor? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Sets the Radio's v-model to equal the val + */ + set (): void +} + +export interface QRange extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Minimum value of the model; Set track's minimum value + */ + min? : number + /** + * Maximum value of the model; Set track's maximum value + */ + max? : number + /** + * Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop + */ + innerMin? : number + /** + * Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop + */ + innerMax? : number + /** + * Specify step amount between valid values (> 0.0); When step equals to 0 it defines infinite granularity + */ + step? : number + /** + * Snap on valid values, rather than sliding freely; Suggestion: use with 'step' prop + */ + snap? : boolean + /** + * Work in reverse (changes direction) + */ + reverse? : boolean + /** + * Display in vertical direction + */ + vertical? : boolean + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for the track (can be 'transparent' too) from the Quasar Color Palette + */ + trackColor? : string + /** + * Apply a pattern image on the track + */ + trackImg? : string + /** + * Color name for the inner track (can be 'transparent' too) from the Quasar Color Palette + */ + innerTrackColor? : string + /** + * Apply a pattern image on the inner track + */ + innerTrackImg? : string + /** + * Color name for the selection bar (can be 'transparent' too) from the Quasar Color Palette + */ + selectionColor? : string + /** + * Apply a pattern image on the selection bar + */ + selectionImg? : string + /** + * Popup a label when user clicks/taps on the slider thumb and moves it + */ + label? : boolean + /** + * Color name for component from the Quasar Color Palette + */ + labelColor? : string + /** + * Color name for component from the Quasar Color Palette + */ + labelTextColor? : string + /** + * Switch the position of the label (top <-> bottom or left <-> right) + */ + switchLabelSide? : boolean + /** + * Always display the label + */ + labelAlways? : boolean + /** + * Display markers on the track, one for each possible value for the model or using a custom step (when specifying a Number) + */ + markers? : boolean | number + /** + * Configure the marker labels (or show the default ones if 'true'); Array of definition Objects or Object with key-value where key is the model and the value is the marker label definition + */ + markerLabels? : SliderMarkerLabels | SliderMarkerLabels | SliderMarkerLabels | SliderMarkerLabels + /** + * CSS class(es) to apply to the marker labels container + */ + markerLabelsClass? : string + /** + * Switch the position of the marker labels (top <-> bottom or left <-> right) + */ + switchMarkerLabelsSide? : boolean + /** + * Track size (including CSS unit) + */ + trackSize? : string + /** + * Thumb size (including CSS unit) + */ + thumbSize? : string + /** + * Color name for component from the Quasar Color Palette + */ + thumbColor? : string + /** + * Set custom thumb svg path + */ + thumbPath? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Model of the component of type { min, max } (both values must be between global min/max); Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : { + /** + * Model value for left thumb + */ + min? : number + /** + * Model value for right thumb + */ + max? : number } + /** + * User can drag range instead of just the two thumbs + */ + dragRange? : boolean + /** + * User can drag only the range instead and NOT the two thumbs + */ + dragOnlyRange? : boolean + /** + * Color name for left label background from the Quasar Color Palette + */ + leftLabelColor? : string + /** + * Color name for left label text from the Quasar Color Palette + */ + leftLabelTextColor? : string + /** + * Color name for right label background from the Quasar Color Palette + */ + rightLabelColor? : string + /** + * Color name for right label text from the Quasar Color Palette + */ + rightLabelTextColor? : string + /** + * Override default label for min value + */ + leftLabelValue? : string | number + /** + * Override default label for max value + */ + rightLabelValue? : string | number + /** + * Color name (from the Quasar Color Palette) for left thumb + */ + leftThumbColor? : string + /** + * Color name (from the Quasar Color Palette) for right thumb + */ + rightThumbColor? : string +} + +export interface QRating extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : number + /** + * Number of icons to display + */ + max? : number | string + /** + * Icon name following Quasar convention; make sure you have the icon library installed unless you are using 'img:' prefix; If an array is provided each rating value will use the corresponding icon in the array (0 based) + */ + icon? : string | any[] + /** + * Icon name following Quasar convention to be used when selected (optional); make sure you have the icon library installed unless you are using 'img:' prefix; If an array is provided each rating value will use the corresponding icon in the array (0 based) + */ + iconSelected? : string | any[] + /** + * Icon name following Quasar convention to be used when selected (optional); make sure you have the icon library installed unless you are using 'img:' prefix; If an array is provided each rating value will use the corresponding icon in the array (0 based) + */ + iconHalf? : string | any[] + /** + * Label to be set on aria-label for Icon; If an array is provided each rating value will use the corresponding aria-label in the array (0 based); If string value is provided the rating value will be appended; If not provided the name of the icon will be used + */ + iconAriaLabel? : string | any[] + /** + * Color name for component from the Quasar Color Palette; v1.5.0+: If an array is provided each rating value will use the corresponding color in the array (0 based) + */ + color? : string | any[] + /** + * Color name from the Quasar Palette for selected icons + */ + colorSelected? : string | any[] + /** + * Color name from the Quasar Palette for half selected icons + */ + colorHalf? : string | any[] + /** + * Does not lower opacity for unselected icons + */ + noDimming? : boolean + /** + * When used, disables default behavior of clicking/tapping on icon which represents current model value to reset model to 0 + */ + noReset? : boolean + /** + * Vertical display + */ + vertical? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean +} + +export interface QResizeObserver extends Vue { + /** + * Debounce amount (in milliseconds) + */ + debounce? : string | number + /** + * Emit a 'resize' event + * @param immediately Skip over the debounce amount + */ + trigger (immediately? : boolean): void +} + +export interface QResponsive extends Vue { + /** + * Aspect ratio for the content; If value is a String, then avoid using a computational statement (like '16/9') and instead specify the String value of the result directly (eg. '1.7777') + */ + ratio? : string | number +} + +export interface QScrollArea extends Vue { + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Object with CSS properties and values for custom styling the scrollbars (both vertical and horizontal) + */ + barStyle? : any[] | string | LooseDictionary + /** + * Object with CSS properties and values for custom styling the vertical scrollbar; Is applied on top of 'bar-style' prop + */ + verticalBarStyle? : any[] | string | LooseDictionary + /** + * Object with CSS properties and values for custom styling the horizontal scrollbar; Is applied on top of 'bar-style' prop + */ + horizontalBarStyle? : any[] | string | LooseDictionary + /** + * Object with CSS properties and values for custom styling the thumb of scrollbars (both vertical and horizontal) + */ + thumbStyle? : LooseDictionary + /** + * Object with CSS properties and values for custom styling the thumb of the vertical scrollbar; Is applied on top of 'thumb-style' prop + */ + verticalThumbStyle? : LooseDictionary + /** + * Object with CSS properties and values for custom styling the thumb of the horizontal scrollbar; Is applied on top of 'thumb-style' prop + */ + horizontalThumbStyle? : LooseDictionary + /** + * Object with CSS properties and values for styling the container of QScrollArea + */ + contentStyle? : any[] | string | LooseDictionary + /** + * Object with CSS properties and values for styling the container of QScrollArea when scroll area becomes active (is mouse hovered) + */ + contentActiveStyle? : any[] | string | LooseDictionary + /** + * Manually control the visibility of the scrollbar; Overrides default mouse over/leave behavior + */ + visible? : boolean + /** + * When content changes, the scrollbar appears; this delay defines the amount of time (in milliseconds) before scrollbars disappear again (if component is not hovered) + */ + delay? : number | string + /** + * Changes the default axis to horizontal instead of vertical (which is default) for getScrollPosition, getScrollPercentage, setScrollPosition, and setScrollPercentage + */ + horizontal? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Get the scrolling DOM element target + * @returns DOM element upon which scrolling takes place + */ + getScrollTarget (): LooseDictionary + /** + * Get the current scroll information + * @returns Scroll information + */ + getScroll (): { + /** + * Vertical scroll position (in px) + */ + verticalPosition? : number + /** + * Vertical scroll percentage (0.0 <= x <= 1.0) + */ + verticalPercentage? : number + /** + * Vertical scroll size (in px) + */ + verticalSize? : number + /** + * Height of the container (in px) + */ + verticalContainerSize? : number + /** + * Horizontal scroll position (in px) + */ + horizontalPosition? : number + /** + * Horizontal scroll percentage (0.0 <= x <= 1.0) + */ + horizontalPercentage? : number + /** + * Horizontal scroll size (in px) + */ + horizontalSize? : number + /** + * Width of the container (in px) + */ + horizontalContainerSize? : number } + /** + * Get current scroll position + * @param axis Scroll axis - defaults to 'vertical' (or to 'horizontal' if horizontal prop is set) + * @returns undefined + */ + getScrollPosition (axis? : 'vertical' | 'horizontal' | 'both'): { + /** + * Scroll offset from top (vertical) + */ + top? : number + /** + * Scroll offset from left (horizontal) + */ + left? : number } + /** + * Get current scroll position in percentage (0.0 <= x <= 1.0) + * @param axis Scroll axis - defaults to 'vertical' (or to 'horizontal' if horizontal prop is set) + * @returns undefined + */ + getScrollPercentage (axis? : 'vertical' | 'horizontal' | 'both'): { + /** + * Scroll percentage (0.0 <= x <= 1.0) offset from top (vertical) + */ + top? : number + /** + * Scroll percentage (0.0 <= x <= 1.0) offset from left (horizontal) + */ + left? : number } + /** + * Set scroll position to an offset; If a duration (in milliseconds) is specified then the scroll is animated + * @param axis Scroll axis + * @param offset Scroll position offset from top (in pixels) + * @param duration Duration (in milliseconds) enabling animated scroll + */ + setScrollPosition (axis : 'vertical' | 'horizontal', offset : number, duration? : number): void + /** + * Set scroll position to a percentage (0.0 <= x <= 1.0) of the total scrolling size; If a duration (in milliseconds) is specified then the scroll is animated + * @param axis Scroll axis + * @param offset Scroll percentage (0.0 <= x <= 1.0) of the total scrolling size + * @param duration Duration (in milliseconds) enabling animated scroll + */ + setScrollPercentage (axis : 'vertical' | 'horizontal', offset : number, duration? : number): void +} + +export interface QScrollObserver extends Vue { + /** + * Debounce amount (in milliseconds) + */ + debounce? : string | number + /** + * Axis on which to detect changes + */ + axis? : 'both' | 'vertical' | 'horizontal' + /** + * CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one + */ + scrollTarget? : Element | string + /** + * Emit a 'scroll' event + * @param immediately Skip over the debounce amount + */ + trigger (immediately? : boolean): void + /** + * Get current scroll details under the form of an Object: { position, direction, directionChanged, inflectionPoint, delta } + */ + getPosition (): void +} + +export interface QSelect extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists + */ + name? : string + /** + * Make virtual list work in horizontal mode + */ + virtualScrollHorizontal? : boolean + /** + * Minimum number of items to render in the virtual list + */ + virtualScrollSliceSize? : number | string + /** + * Ratio of number of items in visible zone to render before it + */ + virtualScrollSliceRatioBefore? : number | string + /** + * Ratio of number of items in visible zone to render after it + */ + virtualScrollSliceRatioAfter? : number | string + /** + * Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item + */ + virtualScrollItemSize? : number | string + /** + * Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision + */ + virtualScrollStickySizeStart? : number | string + /** + * Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision + */ + virtualScrollStickySizeEnd? : number | string + /** + * The number of columns in the table (you need this if you use table-layout: fixed) + */ + tableColspan? : number | string + /** + * Does field have validation errors? + */ + error? : boolean + /** + * Validation error message (gets displayed only if 'error' is set to 'true') + */ + errorMessage? : string + /** + * Hide error icon when there is an error + */ + noErrorIcon? : boolean + /** + * Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules + */ + rules? : any[] + /** + * By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it + */ + reactiveRules? : boolean + /** + * If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself + */ + lazyRules? : boolean | 'ondemand' + /** + * A text label that will “float” up above the input field, once the field gets focus + */ + label? : string + /** + * Label will be always shown above the field regardless of field content (if any) + */ + stackLabel? : boolean + /** + * Helper (hint) text which gets placed below your wrapped form component + */ + hint? : string + /** + * Hide the helper (hint) text when field doesn't have focus + */ + hideHint? : boolean + /** + * Prefix + */ + prefix? : string + /** + * Suffix + */ + suffix? : string + /** + * Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused + */ + labelColor? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component from the Quasar Color Palette + */ + bgColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot. + */ + loading? : boolean + /** + * Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null + */ + clearable? : boolean + /** + * Custom icon to use for the clear button when using along with 'clearable' prop + */ + clearIcon? : string + /** + * Use 'filled' design for the field + */ + filled? : boolean + /** + * Use 'outlined' design for the field + */ + outlined? : boolean + /** + * Use Material Design 'outlined' design for the field + */ + outlinedMd? : boolean + /** + * Use 'borderless' design for the field + */ + borderless? : boolean + /** + * Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones) + */ + standout? : boolean | string + /** + * Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set + */ + labelSlot? : boolean + /** + * Enables bottom slots ('error', 'hint', 'counter') + */ + bottomSlots? : boolean + /** + * Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content + */ + hideBottomSpace? : boolean + /** + * Show an automatic counter on bottom right + */ + counter? : boolean + /** + * Applies a small standard border-radius for a squared shape of the component + */ + rounded? : boolean + /** + * Remove border-radius so borders are squared; Overrides 'rounded' prop + */ + square? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Match inner content alignment to that of QItem + */ + itemAligned? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Focus field on initial component render + */ + autofocus? : boolean + /** + * Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well + */ + for? : string + /** + * Model of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : number | string | any[] + /** + * Allow multiple selection; Model must be Array + */ + multiple? : boolean + /** + * Override default selection string, if not using 'selected' slot/scoped slot and if not using 'use-chips' prop + */ + displayValue? : number | string + /** + * Force use of textContent instead of innerHTML to render selected option(s); Use it when the selected option(s) might be unsafe (from user input); Does NOT apply when using 'selected' or 'selected-item' slots! + */ + displayValueSanitize? : boolean + /** + * Available options that the user can select from. For best performance freeze the list of options. + */ + options? : any[] + /** + * Property of option which holds the 'value'; If using a function then for best performance, reference it from your scope and do not define it inline + */ + optionValue? : Function | string + /** + * Property of option which holds the 'label'; If using a function then for best performance, reference it from your scope and do not define it inline + */ + optionLabel? : Function | string + /** + * Property of option which tells it's disabled; The value of the property must be a Boolean; If using a function then for best performance, reference it from your scope and do not define it inline + */ + optionDisable? : Function | string + /** + * Hides selection; Use the underlying input tag to hold the label (instead of showing it to the right of the input) of the selected option; Only works for non 'multiple' Selects + */ + hideSelected? : boolean + /** + * Hides dropdown icon + */ + hideDropdownIcon? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + dropdownIcon? : string + /** + * Allow a maximum number of selections that the user can do + */ + maxValues? : number | string + /** + * Dense mode for options list; occupies less space + */ + optionsDense? : boolean + /** + * Options menu will be colored with a dark color + */ + optionsDark? : boolean + /** + * CSS class name for options that are active/selected; Set it to an empty string to stop applying the default (which is text-* where * is the 'color' prop value) + */ + optionsSelectedClass? : string + /** + * Force use of textContent instead of innerHTML to render options; Use it when the options might be unsafe (from user input); Does NOT apply when using 'option' slot! + */ + optionsSanitize? : boolean + /** + * Expanded menu will cover the component (will not work along with 'use-input' prop for obvious reasons) + */ + optionsCover? : boolean + /** + * Allow the options list to be narrower than the field (only in menu mode) + */ + menuShrink? : boolean + /** + * Two values setting the starting position or anchor point of the options list relative to the field (only in menu mode) + */ + menuAnchor? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * Two values setting the options list's own position relative to its target (only in menu mode) + */ + menuSelf? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * An array of two numbers to offset the options list horizontally and vertically in pixels (only in menu mode) + */ + menuOffset? : any[] + /** + * Class definitions to be attributed to the popup content + */ + popupContentClass? : string + /** + * Style definitions to be attributed to the popup content + */ + popupContentStyle? : any[] | string | LooseDictionary + /** + * Class definitions to be attributed to the dialog external element + */ + dialogContentClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the dialog external element + */ + dialogContentStyle? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the dialog external element + */ + dialogCloseIcon? : boolean | string + /** + * Use an input tag where users can type + */ + useInput? : boolean + /** + * Use QChip to show what is currently selected + */ + useChips? : boolean + /** + * Fills the input with current value; Useful along with 'hide-selected'; Does NOT works along with 'multiple' selection + */ + fillInput? : boolean + /** + * Enables creation of new values and defines behavior when a new value is added: 'add' means it adds the value (even if possible duplicate), 'add-unique' adds only unique values, and 'toggle' adds or removes the value (based on if it exists or not already); When using this prop then listening for @new-value becomes optional (only to override the behavior defined by 'new-value-mode') + */ + newValueMode? : 'add' | 'add-unique' | 'toggle' + /** + * Try to map labels of model from 'options' Array; has a small performance penalty; If you are using emit-value you will probably need to use map-options to display the label text in the select field rather than the value; Refer to the 'Affecting model' section above + */ + mapOptions? : boolean + /** + * Update model with the value of the selected option instead of the whole option + */ + emitValue? : boolean + /** + * Debounce the input model update with an amount of milliseconds + */ + inputDebounce? : number | string + /** + * Class definitions to be attributed to the underlying input tag + */ + inputClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the underlying input tag + */ + inputStyle? : any[] | string | LooseDictionary + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Autocomplete attribute for field + */ + autocomplete? : string + /** + * Transition when showing the menu/dialog; One of Quasar's embedded transitions + */ + transitionShow? : string + /** + * Transition when hiding the menu/dialog; One of Quasar's embedded transitions + */ + transitionHide? : string + /** + * Overrides the default dynamic mode of showing as menu on desktop and dialog on mobiles + */ + behavior? : 'default' | 'menu' | 'dialog' + /** + * Scroll the virtual scroll list to the item with the specified index (0 based) + * @param index The index of the list item (0 based) + * @param edge The edge to align to if the item is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns + */ + scrollTo (index : string | number, edge? : 'start' | 'center' | 'end' | 'start-force' | 'center-force' | 'end-force'): void + /** + * Resets the virtual scroll computations; Needed for custom edge-cases + */ + reset (): void + /** + * Refreshes the virtual scroll list; Use it after appending items + * @param index The index of the list item to scroll to after refresh (0 based); If it's not specified the scroll position is not changed; Use a negative value to keep scroll position + */ + refresh (index? : string | number): void + /** + * Reset validation status + */ + resetValidation (): void + /** + * Trigger a validation + * @param value Optional value to validate against + * @returns True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected) + */ + validate (value? : any): boolean | Promise + /** + * Focus component + */ + focus (): void + /** + * Focus and open popup + */ + showPopup (): void + /** + * Hide popup + */ + hidePopup (): void + /** + * Remove selected option located at specific index + * @param index Index at which to remove selection + */ + removeAtIndex (index : number): void + /** + * Adds option to model + * @param opt Option to add to model + * @param unique Option must be unique + */ + add (opt : any, unique? : boolean): void + /** + * Add/remove option from model + * @param opt Option to add to model + * @param keepOpen Don't close the menu and do not clear the filter + */ + toggleOption (opt : any, keepOpen? : boolean): void + /** + * Sets option from menu as 'focused' + * @param index Index of option from menu + */ + setOptionIndex (index : number): void + /** + * Move selected option from menu by index offset + * @param offset Number of options to move up or down + * @param skipInputValue Don't set input-value on navigation + */ + moveOptionSelection (offset? : number, skipInputValue? : boolean): void + /** + * Filter options + * @param value String to filter with + */ + filter (value : string): void + /** + * Recomputes menu position + */ + updateMenuPosition (): void + /** + * If 'use-input' is specified, this updates the value that it holds + * @param value String to set the input value to + * @param noFilter Set to true if you don't want the filter (if any) to be also triggered + */ + updateInputValue (value? : string, noFilter? : boolean): void + /** + * Tells if an option is selected + * @param opt Option entry + * @returns Option is selected or not + */ + isOptionSelected (opt : any): boolean + /** + * Get the model value that would be emitted by QSelect when selecting a said option; Also takes into consideration if 'emit-value' is set + * @param opt Option entry + * @returns Emitting model value of said option + */ + getEmittingOptionValue (opt : any): any + /** + * Get the model value of an option; Takes into consideration 'option-value' (if used), but does not looks for 'emit-value', like getEmittingOptionValue() does + * @param opt Option entry + * @returns Model value of said option + */ + getOptionValue (opt : any): any + /** + * Get the label of an option; Takes into consideration the 'option-label' prop (if used) + * @param opt Option entry + * @returns Label of said option + */ + getOptionLabel (opt : any): any + /** + * Tells if an option is disabled; Takes into consideration 'option-disable' prop (if used) + * @param opt Option entry + * @returns Option is disabled or not + */ + isOptionDisabled (opt : any): boolean +} + +export interface QSeparator extends Vue { + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * If set to true, the corresponding direction margins will be set to 8px; It can also be set to a size in CSS units, including unit name, or one of the xs|sm|md|lg|xl predefined sizes + */ + spaced? : boolean | string + /** + * If set to Boolean true, the left and right margins will be set to 16px. If set to 'item' then it will match a QItem's design. If set to 'item-thumbnail' then it will match the design of a QItem with a thumbnail on the left side + */ + inset? : boolean | string + /** + * If set to true, the separator will be vertical. + */ + vertical? : boolean + /** + * Size in CSS units, including unit name + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSkeleton extends Vue { + /** + * HTML tag to render + */ + tag? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Type of skeleton placeholder + */ + type? : 'text' | 'rect' | 'circle' | 'QBtn' | 'QBadge' | 'QChip' | 'QToolbar' | 'QCheckbox' | 'QRadio' | 'QToggle' | 'QSlider' | 'QRange' | 'QInput' | 'QAvatar' + /** + * The animation effect of the skeleton placeholder + */ + animation? : 'wave' | 'pulse' | 'pulse-x' | 'pulse-y' | 'fade' | 'blink' | 'none' + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Size in CSS units, including unit name; Overrides 'height' and 'width' props and applies the value to both height and width + */ + size? : string + /** + * Width in CSS units, including unit name; Apply custom width; Use this prop or through CSS; Overridden by 'size' prop if used + */ + width? : string + /** + * Height in CSS units, including unit name; Apply custom height; Use this prop or through CSS; Overridden by 'size' prop if used + */ + height? : string +} + +export interface QSlideItem extends Vue { + /** + * Color name for left-side background from the Quasar Color Palette + */ + leftColor? : string + /** + * Color name for right-side background from the Quasar Color Palette + */ + rightColor? : string + /** + * Color name for top-side background from the Quasar Color Palette + */ + topColor? : string + /** + * Color name for bottom-side background from the Quasar Color Palette + */ + bottomColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Reset to initial state (not swiped to any side) + */ + reset (): void +} + +export interface QSlideTransition extends Vue { + /** + * If set to true, the transition will be applied on the initial render. + */ + appear? : boolean + /** + * Duration (in milliseconds) enabling animated scroll. + */ + duration? : number +} + +export interface QSlider extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Minimum value of the model; Set track's minimum value + */ + min? : number + /** + * Maximum value of the model; Set track's maximum value + */ + max? : number + /** + * Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop + */ + innerMin? : number + /** + * Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop + */ + innerMax? : number + /** + * Specify step amount between valid values (> 0.0); When step equals to 0 it defines infinite granularity + */ + step? : number + /** + * Snap on valid values, rather than sliding freely; Suggestion: use with 'step' prop + */ + snap? : boolean + /** + * Work in reverse (changes direction) + */ + reverse? : boolean + /** + * Display in vertical direction + */ + vertical? : boolean + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for the track (can be 'transparent' too) from the Quasar Color Palette + */ + trackColor? : string + /** + * Apply a pattern image on the track + */ + trackImg? : string + /** + * Color name for the inner track (can be 'transparent' too) from the Quasar Color Palette + */ + innerTrackColor? : string + /** + * Apply a pattern image on the inner track + */ + innerTrackImg? : string + /** + * Color name for the selection bar (can be 'transparent' too) from the Quasar Color Palette + */ + selectionColor? : string + /** + * Apply a pattern image on the selection bar + */ + selectionImg? : string + /** + * Popup a label when user clicks/taps on the slider thumb and moves it + */ + label? : boolean + /** + * Color name for component from the Quasar Color Palette + */ + labelColor? : string + /** + * Color name for component from the Quasar Color Palette + */ + labelTextColor? : string + /** + * Switch the position of the label (top <-> bottom or left <-> right) + */ + switchLabelSide? : boolean + /** + * Always display the label + */ + labelAlways? : boolean + /** + * Display markers on the track, one for each possible value for the model or using a custom step (when specifying a Number) + */ + markers? : boolean | number + /** + * Configure the marker labels (or show the default ones if 'true'); Array of definition Objects or Object with key-value where key is the model and the value is the marker label definition + */ + markerLabels? : SliderMarkerLabels | SliderMarkerLabels | SliderMarkerLabels | SliderMarkerLabels + /** + * CSS class(es) to apply to the marker labels container + */ + markerLabelsClass? : string + /** + * Switch the position of the marker labels (top <-> bottom or left <-> right) + */ + switchMarkerLabelsSide? : boolean + /** + * Track size (including CSS unit) + */ + trackSize? : string + /** + * Thumb size (including CSS unit) + */ + thumbSize? : string + /** + * Color name for component from the Quasar Color Palette + */ + thumbColor? : string + /** + * Set custom thumb svg path + */ + thumbPath? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Model of the component (must be between min/max); Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : number + /** + * Override default label value + */ + labelValue? : string | number +} + +export interface QSpace extends Vue { +} + +export interface QSpinner extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Override value to use for stroke-width + */ + thickness? : number +} + +export interface QSpinnerAudio extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerBall extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerBars extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerBox extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerClock extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerComment extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerCube extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerDots extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerFacebook extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerGears extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerGrid extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerHearts extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerHourglass extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerInfinity extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerIos extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerOrbit extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerOval extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerPie extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerPuff extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerRadio extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerRings extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSpinnerTail extends Vue { + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string +} + +export interface QSplitter extends Vue { + /** + * Model of the component defining the size of first panel (or second if using reverse) in the unit specified (for '%' it's the split ratio percent - 0.0 < x < 100.0; for 'px' it's the size in px); Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : number + /** + * Apply the model size to the second panel (by default it applies to the first) + */ + reverse? : boolean + /** + * CSS unit for the model + */ + unit? : '%' | 'px' + /** + * Emit model while user is panning on the separator + */ + emitImmediately? : boolean + /** + * Allows the splitter to split its two panels horizontally, instead of vertically + */ + horizontal? : boolean + /** + * An array of two values representing the minimum and maximum split size of the two panels; When 'px' unit is set then you can use Infinity as the second value to make it unbound on the other side + */ + limits? : any[] + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Class definitions to be attributed to the 'before' panel + */ + beforeClass? : any[] | string | LooseDictionary + /** + * Class definitions to be attributed to the 'after' panel + */ + afterClass? : any[] | string | LooseDictionary + /** + * Class definitions to be attributed to the splitter separator + */ + separatorClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the splitter separator + */ + separatorStyle? : any[] | string | LooseDictionary + /** + * Applies a default lighter color on the separator; To be used when background is darker; Avoid using when you are overriding through separator-class or separator-style props + */ + dark? : boolean +} + +export interface QStep extends Vue { + /** + * Panel name + */ + name : any + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Step title + */ + title : string + /** + * Step’s additional information that appears beneath the title + */ + caption? : string + /** + * Step's prefix (max 2 characters) which replaces the icon if the step is not currently active and it isn't marked with error or as 'done', or if the specific icon for the state is 'none' + */ + prefix? : string | number + /** + * Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + doneIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + doneColor? : string + /** + * Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + activeIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + activeColor? : string + /** + * Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + errorIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + errorColor? : string + /** + * Allow navigation through the header + */ + headerNav? : boolean + /** + * Mark the step as 'done' + */ + done? : boolean + /** + * Mark the step as having an error + */ + error? : boolean +} + +export interface QStepper extends Vue { + /** + * Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive. + */ + value? : any + /** + * Equivalent to using Vue's native component on the content + */ + keepAlive? : boolean + /** + * Equivalent to using Vue's native include prop for ; Values must be valid Vue component names + */ + keepAliveInclude? : string | any[] | RegExp + /** + * Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names + */ + keepAliveExclude? : string | any[] | RegExp + /** + * Equivalent to using Vue's native max prop for + */ + keepAliveMax? : number + /** + * Enable transitions between panel (also see 'transition-prev' and 'transition-next' props) + */ + animated? : boolean + /** + * Makes component appear as infinite (when reaching last panel, next one will become the first one) + */ + infinite? : boolean + /** + * Enable swipe events (may interfere with content's touch/mouse events) + */ + swipeable? : boolean + /** + * Put Stepper in vertical mode (instead of horizontal by default) + */ + vertical? : boolean + /** + * One of Quasar's embedded transitions (has effect only if 'animated' prop is set) + */ + transitionPrev? : string + /** + * One of Quasar's embedded transitions (has effect only if 'animated' prop is set) + */ + transitionNext? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Use alternative labels - stacks the icon on top of the label (applies only to horizontal stepper) + */ + alternativeLabels? : boolean + /** + * Allow navigation through the header + */ + headerNav? : boolean + /** + * Hide header labels on narrow windows + */ + contracted? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + inactiveIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + inactiveColor? : string + /** + * Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + doneIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + doneColor? : string + /** + * Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + activeIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + activeColor? : string + /** + * Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + errorIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + errorColor? : string + /** + * Class definitions to be attributed to the header + */ + headerClass? : string + /** + * Go to next panel + */ + next (): void + /** + * Go to previous panel + */ + previous (): void + /** + * Go to specific panel + * @param panelName Panel's name, which may be a String or Number; Number does not refers to panel index, but to its name, which may be an Integer + */ + goTo (panelName : string | number): void +} + +export interface QStepperNavigation extends Vue { +} + +export interface QTabPanel extends Vue { + /** + * Panel name + */ + name : any + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean +} + +export interface QTabPanels extends Vue { + /** + * Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive. + */ + value? : any + /** + * Equivalent to using Vue's native component on the content + */ + keepAlive? : boolean + /** + * Equivalent to using Vue's native include prop for ; Values must be valid Vue component names + */ + keepAliveInclude? : string | any[] | RegExp + /** + * Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names + */ + keepAliveExclude? : string | any[] | RegExp + /** + * Equivalent to using Vue's native max prop for + */ + keepAliveMax? : number + /** + * Enable transitions between panel (also see 'transition-prev' and 'transition-next' props) + */ + animated? : boolean + /** + * Makes component appear as infinite (when reaching last panel, next one will become the first one) + */ + infinite? : boolean + /** + * Enable swipe events (may interfere with content's touch/mouse events) + */ + swipeable? : boolean + /** + * Default transitions and swipe actions will be on the vertical axis + */ + vertical? : boolean + /** + * One of Quasar's embedded transitions (has effect only if 'animated' prop is set) + */ + transitionPrev? : string + /** + * One of Quasar's embedded transitions (has effect only if 'animated' prop is set) + */ + transitionNext? : string + /** + * Go to next panel + */ + next (): void + /** + * Go to previous panel + */ + previous (): void + /** + * Go to specific panel + * @param panelName Panel's name, which may be a String or Number; Number does not refers to panel index, but to its name, which may be an Integer + */ + goTo (panelName : string | number): void +} + +export interface QTable extends Vue { + /** + * Fullscreen mode + */ + fullscreen? : boolean + /** + * Changing route app won't exit fullscreen + */ + noRouteFullscreenExit? : boolean + /** + * Rows of data to display + */ + data? : any[] + /** + * Property of each row that defines the unique key of each row (the result must be a primitive, not Object, Array, etc); The value of property must be string or a function taking a row and returning the desired (nested) key in the row; If supplying a function then for best performance, reference it from your scope and do not define it inline + */ + rowKey? : string | Function + /** + * Display data using QVirtualScroll (for non-grid mode only) + */ + virtualScroll? : boolean + /** + * Minimum number of rows to render in the virtual list + */ + virtualScrollSliceSize? : number | string + /** + * Ratio of number of rows in visible zone to render before it + */ + virtualScrollSliceRatioBefore? : number | string + /** + * Ratio of number of rows in visible zone to render after it + */ + virtualScrollSliceRatioAfter? : number | string + /** + * Default size in pixels of a row; This value is used for rendering the initial table; Try to use a value close to the minimum size of a row + */ + virtualScrollItemSize? : number | string + /** + * Size in pixels of the sticky header (if using one); A correct value will improve scroll precision; Will be also used for non-virtual-scroll tables for fixing top alignment when using scrollTo method + */ + virtualScrollStickySizeStart? : number | string + /** + * Size in pixels of the sticky footer part (if using one); A correct value will improve scroll precision + */ + virtualScrollStickySizeEnd? : number | string + /** + * The number of columns in the table (you need this if you use table-layout: fixed) + */ + tableColspan? : number | string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Icon name following Quasar convention for stepping to first page; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + iconFirstPage? : string + /** + * Icon name following Quasar convention for stepping to previous page; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + iconPrevPage? : string + /** + * Icon name following Quasar convention for stepping to next page; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + iconNextPage? : string + /** + * Icon name following Quasar convention for stepping to last page; Make sure you have the icon library installed unless you are using 'img:' prefix + */ + iconLastPage? : string + /** + * Display data as a grid instead of the default table + */ + grid? : boolean + /** + * Display header for grid-mode also + */ + gridHeader? : boolean + /** + * Dense mode; Connect with $q.screen for responsive behavior + */ + dense? : boolean + /** + * The column definitions (Array of Objects) + */ + columns? : { + /** + * Unique id, identifies column, (used by pagination.sortBy, 'body-cell-[name]' slot, ...) + */ + name : string + /** + * Label for header + */ + label : string + /** + * Row Object property to determine value for this column or function which maps to the required property + */ + field : string | Function + /** + * If we use visible-columns, this col will always be visible + */ + required? : boolean + /** + * Horizontal alignment of cells in this column + */ + align? : string + /** + * Tell QTable you want this column sortable + */ + sortable? : boolean + /** + * Compare function if you have some custom data or want a specific way to compare two rows + */ + sort? : Function + /** + * Set column sort order: 'ad' (ascending-descending) or 'da' (descending-ascending); Overrides the 'column-sort-order' prop + */ + sortOrder? : 'ad' | 'da' + /** + * Function you can apply to format your data + */ + format? : Function + /** + * Style to apply on normal cells of the column; The Function form requires v1.15.15+ + */ + style? : string | Function + /** + * Classes to add on normal cells of the column; The Function form requires v1.15.15+ + */ + classes? : string | Function + /** + * Style to apply on header cells of the column + */ + headerStyle? : string + /** + * Classes to add on header cells of the column + */ + headerClasses? : string }[] + /** + * Array of Strings defining column names ('name' property of each column from 'columns' prop definitions); Columns marked as 'required' are not affected by this property + */ + visibleColumns? : any[] + /** + * Put Table into 'loading' state; Notify the user something is happening behind the covers + */ + loading? : boolean + /** + * Table title + */ + title? : string + /** + * Hide table header layer + */ + hideHeader? : boolean + /** + * Hide table bottom layer regardless of what it has to display + */ + hideBottom? : boolean + /** + * Hide the selected rows banner (if any) + */ + hideSelectedBanner? : boolean + /** + * Hide the default no data bottom layer + */ + hideNoData? : boolean + /** + * Hide the pagination controls at the bottom + */ + hidePagination? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Use a separator/border between rows, columns or all cells + */ + separator? : 'horizontal' | 'vertical' | 'cell' | 'none' + /** + * Wrap text within table cells + */ + wrapCells? : boolean + /** + * Skip the third state (unsorted) when user toggles column sort direction + */ + binaryStateSort? : boolean + /** + * Set column sort order: 'ad' (ascending-descending) or 'da' (descending-ascending); It gets applied to all columns unless a column has its own sortOrder specified in the 'columns' definition prop + */ + columnSortOrder? : 'ad' | 'da' + /** + * Override default text to display when no data is available + */ + noDataLabel? : string + /** + * Override default text to display when user filters the table and no matched results are found + */ + noResultsLabel? : string + /** + * Override default text to display when table is in loading state (see 'loading' prop) + */ + loadingLabel? : string + /** + * Text to display when user selected at least one row; For best performance, reference it from your scope and do not define it inline + */ + selectedRowsLabel? : Function + /** + * Text to override default rows per page label at bottom of table + */ + rowsPerPageLabel? : string + /** + * Text to override default pagination label at bottom of table (unless 'pagination' scoped slot is used); For best performance, reference it from your scope and do not define it inline + */ + paginationLabel? : Function + /** + * CSS style to apply to native HTML
element's wrapper (which is a DIV) + */ + tableStyle? : string | any[] | LooseDictionary + /** + * CSS classes to apply to native HTML
element's wrapper (which is a DIV) + */ + tableClass? : string | any[] | LooseDictionary + /** + * CSS style to apply to header of native HTML
(which is a TR) + */ + tableHeaderStyle? : string | any[] | LooseDictionary + /** + * CSS classes to apply to header of native HTML
(which is a TR) + */ + tableHeaderClass? : string | any[] | LooseDictionary + /** + * CSS style to apply to the cards container (when in grid mode) + */ + cardContainerStyle? : string | any[] | LooseDictionary + /** + * CSS classes to apply to the cards container (when in grid mode) + */ + cardContainerClass? : string | any[] | LooseDictionary + /** + * CSS style to apply to the card (when in grid mode) or container card (when not in grid mode) + */ + cardStyle? : string | any[] | LooseDictionary + /** + * CSS classes to apply to the card (when in grid mode) or container card (when not in grid mode) + */ + cardClass? : string | any[] | LooseDictionary + /** + * CSS classes to apply to the title (if using 'title' prop) + */ + titleClass? : string | any[] | LooseDictionary + /** + * String/Object to filter table with; When using an Object it requires 'filter-method' to also be specified since it will be a custom filtering + */ + filter? : string | LooseDictionary + /** + * The actual filtering mechanism; For best performance, reference it from your scope and do not define it inline + */ + filterMethod? : Function + /** + * Pagination object; You can use the '.sync' modifier on it if you want to have access on the current pagination in your components; When not using the .sync modifier it simply initializes the pagination on first render + */ + pagination? : { + /** + * Column name (from column definition) + */ + sortBy? : string + /** + * Is sorting in descending order? + */ + descending? : boolean + /** + * Page number (1-based) + */ + page? : number + /** + * How many rows per page? 0 means Infinite + */ + rowsPerPage? : number + /** + * For server-side fetching only. How many total database rows are there to be added to the table. If set, causes the QTable to emit @request when data is required. + */ + rowsNumber? : number } + /** + * Options for user to pick (Numbers); Number 0 means 'Show all rows in one page' + */ + rowsPerPageOptions? : any[] + /** + * Selection type + */ + selection? : 'single' | 'multiple' | 'none' + /** + * Keeps the user selection array + */ + selected? : any[] + /** + * Keeps the array with expanded rows keys + */ + expanded? : any[] + /** + * The actual sort mechanism. Function (rows, sortBy, descending) => sorted rows; For best performance, reference it from your scope and do not define it inline + */ + sortMethod? : Function + /** + * Toggles fullscreen mode + */ + toggleFullscreen (): void + /** + * Enter the fullscreen view + */ + setFullscreen (): void + /** + * Leave the fullscreen view + */ + exitFullscreen (): void + /** + * Trigger a server request (emits 'request' event) + * @param props Request details + */ + requestServerInteraction (props? : { + /** + * Optional pagination object + */ + pagination? : { + /** + * Column name (from column definition) + */ + sortBy? : string + /** + * Is sorting in descending order? + */ + descending? : boolean + /** + * Page number (1-based) + */ + page? : number + /** + * How many rows per page? 0 means Infinite + */ + rowsPerPage? : number } + /** + * Filtering method (the 'filter-method' prop) + */ + filter? : Function }): void + /** + * Unless using an external pagination Object (through 'pagination.sync' prop), you can use this method and force the internal pagination to change + * @param pagination Pagination object + * @param forceServerRequest Also force a server request + */ + setPagination (pagination : { + /** + * Column name (from column definition) + */ + sortBy? : string + /** + * Is sorting in descending order? + */ + descending? : boolean + /** + * Page number (1-based) + */ + page? : number + /** + * How many rows per page? 0 means Infinite + */ + rowsPerPage? : number }, forceServerRequest? : boolean): void + /** + * Navigates to first page + */ + firstPage (): void + /** + * Navigates to previous page, if available + */ + prevPage (): void + /** + * Navigates to next page, if available + */ + nextPage (): void + /** + * Navigates to last page + */ + lastPage (): void + /** + * Determine if a row has been selected by user + * @param key Row key value + * @returns Is row selected or not? + */ + isRowSelected (key : any): boolean + /** + * Clears user selection (emits 'update:selected' with empty array) + */ + clearSelection (): void + /** + * Determine if a row is expanded or not + * @param key Row key value + * @returns Is row expanded or not? + */ + isRowExpanded (key : any): boolean + /** + * Sets the expanded rows keys array; Especially useful if not using an external 'expanded' state otherwise just emits 'update:expanded' with the value + * @param expanded Array containing keys of the expanded rows + */ + setExpanded (expanded : any[]): void + /** + * Trigger a table sort + * @param col Column name or column definition object + */ + sort (col : string | LooseDictionary): void + /** + * Resets the virtual scroll (if using it) computations; Needed for custom edge-cases + */ + resetVirtualScroll (): void + /** + * Scroll the table to the row with the specified index in page (0 based) + * @param index The index of the row in page (0 based) + * @param edge Only for virtual scroll - the edge to align to if the row is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns + */ + scrollTo (index : string | number, edge? : 'start' | 'center' | 'end' | 'start-force' | 'center-force' | 'end-force'): void +} + +export interface QTd extends Vue { + /** + * QTable's column scoped slot property + */ + props? : LooseDictionary + /** + * Tries to shrink column width size; Useful for columns with a checkbox/radio/toggle + */ + autoWidth? : boolean + /** + * Disable hover effect + */ + noHover? : boolean +} + +export interface QTh extends Vue { + /** + * QTable's header column scoped slot property + */ + props? : LooseDictionary + /** + * Tries to shrink header column width size; Useful for columns with a checkbox/radio/toggle + */ + autoWidth? : boolean +} + +export interface QTr extends Vue { + /** + * QTable's row scoped slot property + */ + props? : LooseDictionary + /** + * Disable hover effect + */ + noHover? : boolean +} + +export interface QRouteTab extends Vue { + /** + * Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used + */ + to? : string | LooseDictionary + /** + * Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used + */ + exact? : boolean + /** + * Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used + */ + append? : boolean + /** + * Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used + */ + replace? : boolean + /** + * Equivalent to Vue Router 'active-class' property + */ + activeClass? : string + /** + * Equivalent to Vue Router 'active-class' property + */ + exactActiveClass? : string + /** + * Native link href attribute; Has priority over the 'to'/'exact'/'replace' props + */ + href? : string + /** + * Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props + */ + target? : string + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Configure material ripple (disable it by setting it to 'false' or supply a config object) + */ + ripple? : boolean | LooseDictionary + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * A number or string to label the tab + */ + label? : number | string + /** + * Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color + */ + alert? : boolean | string + /** + * Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop + */ + alertIcon? : string + /** + * Panel name + */ + name? : number | string + /** + * Turns off capitalizing all letters within the tab (which is the default) + */ + noCaps? : boolean + /** + * Class definitions to be attributed to the content wrapper + */ + contentClass? : string + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string +} + +export interface QTab extends Vue { + /** + * Configure material ripple (disable it by setting it to 'false' or supply a config object) + */ + ripple? : boolean | LooseDictionary + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * A number or string to label the tab + */ + label? : number | string + /** + * Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color + */ + alert? : boolean | string + /** + * Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop + */ + alertIcon? : string + /** + * Panel name + */ + name? : number | string + /** + * Turns off capitalizing all letters within the tab (which is the default) + */ + noCaps? : boolean + /** + * Class definitions to be attributed to the content wrapper + */ + contentClass? : string + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Put component in disabled mode + */ + disable? : boolean +} + +export interface QTabs extends Vue { + /** + * Model of the component defining current panel name; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : number | string + /** + * Use vertical design (tabs one on top of each other rather than one next to the other horizontally) + */ + vertical? : boolean + /** + * Reserve space for arrows to place them on each side of the tabs (the arrows fade when inactive) + */ + outsideArrows? : boolean + /** + * Force display of arrows (if needed) on mobile + */ + mobileArrows? : boolean + /** + * Horizontal alignment the tabs within the tabs container + */ + align? : 'left' | 'center' | 'right' | 'justify' + /** + * Breakpoint (in pixels) of tabs container width at which the tabs automatically turn to a justify alignment + */ + breakpoint? : number | string + /** + * The class to be set on the active tab + */ + activeClass? : string + /** + * The color to be attributed to the text of the active tab + */ + activeColor? : string + /** + * The color to be attributed to the background of the active tab + */ + activeBgColor? : string + /** + * The color to be attributed to the indicator (the underline) of the active tab + */ + indicatorColor? : string + /** + * Class definitions to be attributed to the content wrapper + */ + contentClass? : string + /** + * The name of an icon to replace the default arrow used to scroll through the tabs to the left, when the tabs extend past the width of the tabs container + */ + leftIcon? : string + /** + * The name of an icon to replace the default arrow used to scroll through the tabs to the right, when the tabs extend past the width of the tabs container + */ + rightIcon? : string + /** + * When used on flexbox parent, tabs will stretch to parent's height + */ + stretch? : boolean + /** + * By default, QTabs is set to grow to the available space; However, you can reverse that with this prop; Useful (and required) when placing the component in a QToolbar + */ + shrink? : boolean + /** + * Switches the indicator position (on left of tab for vertical mode or above the tab for default horizontal mode) + */ + switchIndicator? : boolean + /** + * Allows the indicator to be the same width as the tab's content (text or icon), instead of the whole width of the tab + */ + narrowIndicator? : boolean + /** + * Allows the text to be inline with the icon, should one be used + */ + inlineLabel? : boolean + /** + * Turns off capitalizing all letters within the tab (which is the default) + */ + noCaps? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean +} + +export interface QTime extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Time of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : string + /** + * Display the component in landscape mode + */ + landscape? : boolean + /** + * Mask (formatting string) used for parsing and formatting value + */ + mask? : string + /** + * Locale formatting options + */ + locale? : { + /** + * List of full day names (DDDD), starting with Sunday + */ + days? : any[] + /** + * List of short day names (DDD), starting with Sunday + */ + daysShort? : any[] + /** + * List of full month names (MMMM), starting with January + */ + months? : any[] + /** + * List of short month names (MMM), starting with January + */ + monthsShort? : any[] } + /** + * Specify calendar type + */ + calendar? : 'gregorian' | 'persian' + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Forces 24 hour time display instead of AM/PM system + */ + format24h? : boolean + /** + * The default date to use (in YYYY/MM/DD format) when model is unfilled (undefined or null) + */ + defaultDate? : string + /** + * Optionally configure what time is the user allowed to set; Overridden by 'hour-options', 'minute-options' and 'second-options' if those are set; For best performance, reference it from your scope and do not define it inline + */ + options? : Function + /** + * Optionally configure what hours is the user allowed to set; Overrides 'options' prop if that is also set + */ + hourOptions? : any[] + /** + * Optionally configure what minutes is the user allowed to set; Overrides 'options' prop if that is also set + */ + minuteOptions? : any[] + /** + * Optionally configure what seconds is the user allowed to set; Overrides 'options' prop if that is also set + */ + secondOptions? : any[] + /** + * Allow the time to be set with seconds + */ + withSeconds? : boolean + /** + * Display a button that selects the current time + */ + nowBtn? : boolean + /** + * Change model to current moment + */ + setNow (): void +} + +export interface QTimeline extends Vue { + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Side to place the timeline entries in dense and comfortable layout; For loose layout it gets overridden by QTimelineEntry side prop + */ + side? : 'left' | 'right' + /** + * Layout of the timeline. Dense keeps content and labels on one side. Comfortable keeps content on one side and labels on the opposite side. Loose puts content on both sides. + */ + layout? : 'dense' | 'comfortable' | 'loose' + /** + * Notify the component that the background is a dark color + */ + dark? : boolean +} + +export interface QTimelineEntry extends Vue { + /** + * Tag to use, if of type 'heading' only + */ + tag? : string + /** + * Defines a heading timeline item + */ + heading? : boolean + /** + * Side to place the timeline entry; Works only if QTimeline layout is loose. + */ + side? : 'left' | 'right' + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * URL to the avatar image; Icon takes precedence if used, so it replaces avatar + */ + avatar? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Title of timeline entry; Is overridden if using 'title' slot + */ + title? : string + /** + * Subtitle of timeline entry; Is overridden if using 'subtitle' slot + */ + subtitle? : string + /** + * Body content of timeline entry; Use this prop or the default slot + */ + body? : string +} + +export interface QToggle extends Vue { + /** + * Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL + */ + name? : string + /** + * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl) + */ + size? : string + /** + * Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value : any | any[] + /** + * Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked + */ + val? : any + /** + * What model value should be considered as checked/ticked/on? + */ + trueValue? : any + /** + * What model value should be considered as unchecked/unticked/off? + */ + falseValue? : any + /** + * What model value should be considered as 'indeterminate'? + */ + indeterminateValue? : any + /** + * Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ... + */ + toggleOrder? : 'tf' | 'ft' + /** + * When user clicks/taps on the component, should we toggle through the indeterminate state too? + */ + toggleIndeterminate? : boolean + /** + * Label to display along the component (or use the default slot instead of this prop) + */ + label? : string + /** + * Label (if any specified) should be displayed on the left side of the component + */ + leftLabel? : boolean + /** + * The icon to be used when the toggle is on + */ + checkedIcon? : string + /** + * The icon to be used when the toggle is off + */ + uncheckedIcon? : string + /** + * The icon to be used when the model is indeterminate + */ + indeterminateIcon? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Should the color (if specified any) be kept when the component is unticked/ off? + */ + keepColor? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Tabindex HTML attribute value + */ + tabindex? : number | string + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Override default icon color (for truthy state only); Color name for component from the Quasar Color Palette + */ + iconColor? : string + /** + * Toggle the state (of the model) + */ + toggle (): void +} + +export interface QToolbar extends Vue { + /** + * Apply an inset to content (useful for subsequent toolbars) + */ + inset? : boolean +} + +export interface QToolbarTitle extends Vue { + /** + * By default, QToolbarTitle is set to grow to the available space. However, you can reverse that with this prop + */ + shrink? : boolean +} + +export interface QTooltip extends Vue { + /** + * Class definitions to be attributed to the content + */ + contentClass? : any[] | string | LooseDictionary + /** + * Style definitions to be attributed to the content + */ + contentStyle? : any[] | string | LooseDictionary + /** + * Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive + */ + value? : boolean + /** + * The minimum height of the Tooltip; Size in CSS units, including unit name + */ + minHeight? : string + /** + * The minimum width of the Tooltip; Size in CSS units, including unit name + */ + minWidth? : string + /** + * The maximum height of the Tooltip; Size in CSS units, including unit name + */ + maxHeight? : string + /** + * The maximum width of the Tooltip; Size in CSS units, including unit name + */ + maxWidth? : string + /** + * One of Quasar's embedded transitions + */ + transitionShow? : string + /** + * One of Quasar's embedded transitions + */ + transitionHide? : string + /** + * Two values setting the starting position or anchor point of the Tooltip relative to its target + */ + anchor? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * Two values setting the Tooltip's own position relative to its target + */ + self? : 'top left' | 'top middle' | 'top right' | 'top start' | 'top end' | 'center left' | 'center middle' | 'center right' | 'center start' | 'center end' | 'bottom left' | 'bottom middle' | 'bottom right' | 'bottom start' | 'bottom end' + /** + * An array of two numbers to offset the Tooltip horizontally and vertically in pixels + */ + offset? : any[] + /** + * CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one + */ + scrollTarget? : Element | string + /** + * Configure a target element to trigger Tooltip toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) it attaches the events to the specified DOM element (if it exists) + */ + target? : boolean | string + /** + * Skips attaching events to the target DOM element (that trigger the element to get shown) + */ + noParentEvent? : boolean + /** + * Configure Tooltip to appear with delay + */ + delay? : number + /** + * Configure Tooltip to disappear with delay + */ + hideDelay? : number + /** + * Triggers component to show + * @param evt JS event object + */ + show (evt? : LooseDictionary): void + /** + * Triggers component to hide + * @param evt JS event object + */ + hide (evt? : LooseDictionary): void + /** + * Triggers component to toggle between show/hide + * @param evt JS event object + */ + toggle (evt? : LooseDictionary): void + /** + * There are some custom scenarios for which Quasar cannot automatically reposition the tooltip without significant performance drawbacks so the optimal solution is for you to call this method when you need it + */ + updatePosition (): void +} + +export interface QTree extends Vue { + /** + * The array of nodes that designates the tree structure + */ + nodes : any[] + /** + * The property name of each node object that holds a unique node id + */ + nodeKey : string + /** + * The property name of each node object that holds the label of the node + */ + labelKey? : string + /** + * The property name of each node object that holds the list of children of the node + */ + childrenKey? : string + /** + * Do not display the connector lines between nodes + */ + noConnectors? : boolean + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for controls (like checkboxes) from the Quasar Color Palette + */ + controlColor? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Color name for selected nodes (from the Quasar Color Palette) + */ + selectedColor? : string + /** + * Dense mode; occupies less space + */ + dense? : boolean + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * The type of strategy to use for the selection of the nodes + */ + tickStrategy? : 'none' | 'strict' | 'leaf' | 'leaf-filtered' + /** + * Keys of nodes that are ticked + */ + ticked? : any[] + /** + * Keys of nodes that are expanded + */ + expanded? : any[] + /** + * Key of node currently selected + */ + selected? : any + /** + * Do not allow un-selection when clicking currently selected node + */ + noSelectionUnset? : boolean + /** + * Allow the tree to have all its branches expanded, when first rendered + */ + defaultExpandAll? : boolean + /** + * Allows the tree to be set in accordion mode + */ + accordion? : boolean + /** + * Turn off transition effects when expanding/collapsing nodes; Also enhances perf by a lot as a side-effect; Recommended for big trees + */ + noTransition? : boolean + /** + * The text value to be used for filtering nodes + */ + filter? : string + /** + * The function to use to filter the tree nodes; For best performance, reference it from your scope and do not define it inline + */ + filterMethod? : Function + /** + * Toggle animation duration (in milliseconds) + */ + duration? : number + /** + * Override default such label for when no nodes are available + */ + noNodesLabel? : string + /** + * Override default such label for when no nodes are available due to filtering + */ + noResultsLabel? : string + /** + * Get the node with the given key + * @param key The key of a node + * @returns Requested node + */ + getNodeByKey (key : any): LooseDictionary + /** + * Get array of nodes that are ticked + * @returns Ticked node objects + */ + getTickedNodes (): any[] + /** + * Get array of nodes that are expanded + * @returns Expanded node objects + */ + getExpandedNodes (): any[] + /** + * Determine if a node is expanded + * @param key The key of a node + * @returns Is specified node expanded? + */ + isExpanded (key : any): boolean + /** + * Use to expand all branches of the tree + */ + expandAll (): void + /** + * Use to collapse all branches of the tree + */ + collapseAll (): void + /** + * Expands the tree at the point of the node with the key given + * @param key The key of a node + * @param state Set to 'true' to expand the branch of the tree, otherwise 'false' collapses it + */ + setExpanded (key : any, state : boolean): void + /** + * Method to check if a node's checkbox is selected or not + * @param key The key of a node + * @returns Is specified node ticked? + */ + isTicked (key : any): boolean + /** + * Method to set a node's checkbox programmatically + * @param keys The keys of nodes to tick/untick + * @param state Set to 'true' to tick the checkbox of nodes, otherwise 'false' unticks them + */ + setTicked (keys : any[], state : boolean): void +} + +export interface QUploader extends Vue { + /** + * Allow multiple file uploads + */ + multiple? : boolean + /** + * Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element + */ + accept? : string + /** + * Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element + */ + capture? : 'user' | 'environment' + /** + * Maximum size of individual file in bytes + */ + maxFileSize? : number | string + /** + * Maximum size of all files combined in bytes + */ + maxTotalSize? : number | string + /** + * Maximum number of files to contain + */ + maxFiles? : number | string + /** + * Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline + */ + filter? : Function + /** + * Label for the uploader + */ + label? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Don't display thumbnails for image files + */ + noThumbnails? : boolean + /** + * Upload files immediately when added + */ + autoUpload? : boolean + /** + * Don't show the upload button + */ + hideUploadBtn? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Function which should return an Object or a Promise resolving with an Object; For best performance, reference it from your scope and do not define it inline + */ + factory? : Function + /** + * URL or path to the server which handles the upload. Takes String or factory function, which returns String. Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline + */ + url? : string | Function + /** + * HTTP method to use for upload; Takes String or factory function which returns a String; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline + */ + method? : 'POST' | 'PUT' | Function + /** + * Field name for each file upload; This goes into the following header: 'Content-Disposition: form-data; name="__HERE__"; filename="somefile.png"; If using a function then for best performance, reference it from your scope and do not define it inline + */ + fieldName? : string | Function + /** + * Array or a factory function which returns an array; Array consists of objects with header definitions; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline + */ + headers? : { + /** + * Header name + */ + name : string + /** + * Header value + */ + value : string }[] | Function + /** + * Array or a factory function which returns an array; Array consists of objects with additional fields definitions (used by Form to be uploaded); Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline + */ + formFields? : { + /** + * Field name + */ + name : string + /** + * Field value + */ + value : string }[] | Function + /** + * Sets withCredentials to true on the XHR that manages the upload; Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline + */ + withCredentials? : boolean | Function + /** + * Send raw files without wrapping into a Form(); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline + */ + sendRaw? : boolean | Function + /** + * Upload files in batch (in one XHR request); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline + */ + batch? : boolean | Function + /** + * Trigger file pick; Must be called as a direct consequence of user interaction (eg. in a click handler), due to browsers security policy + * @param evt JS event object + */ + pickFiles (evt? : LooseDictionary): void + /** + * Add files programmatically + * @param files Array of files (instances of File) + */ + addFiles (files : FileList | any[]): void + /** + * Resets uploader to default; Empties queue, aborts current uploads + */ + reset (): void + /** + * Removes already uploaded files from the list + */ + removeUploadedFiles (): void + /** + * Remove files that are waiting for upload to start (same as clicking the left clear button) + */ + removeQueuedFiles (): void + /** + * Remove specified file from the queue + * @param file File to remove (instance of File) + */ + removeFile (file : LooseDictionary): void + /** + * Abort upload of all files (same as clicking the abort button) + */ + abort (): void + /** + * Start uploading (same as clicking the upload button) + */ + upload (): void +} + +export interface QUploaderAddTrigger extends Vue { +} + +export interface QUploaderBase extends Vue { + /** + * Allow multiple file uploads + */ + multiple? : boolean + /** + * Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element + */ + accept? : string + /** + * Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element + */ + capture? : 'user' | 'environment' + /** + * Maximum size of individual file in bytes + */ + maxFileSize? : number | string + /** + * Maximum size of all files combined in bytes + */ + maxTotalSize? : number | string + /** + * Maximum number of files to contain + */ + maxFiles? : number | string + /** + * Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline + */ + filter? : Function + /** + * Label for the uploader + */ + label? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Overrides text color (if needed); Color name from the Quasar Color Palette + */ + textColor? : string + /** + * Notify the component that the background is a dark color + */ + dark? : boolean + /** + * Removes border-radius so borders are squared + */ + square? : boolean + /** + * Applies a 'flat' design (no default shadow) + */ + flat? : boolean + /** + * Applies a default border to the component + */ + bordered? : boolean + /** + * Don't display thumbnails for image files + */ + noThumbnails? : boolean + /** + * Upload files immediately when added + */ + autoUpload? : boolean + /** + * Don't show the upload button + */ + hideUploadBtn? : boolean + /** + * Put component in disabled mode + */ + disable? : boolean + /** + * Put component in readonly mode + */ + readonly? : boolean + /** + * Trigger file pick; Must be called as a direct consequence of user interaction (eg. in a click handler), due to browsers security policy + * @param evt JS event object + */ + pickFiles (evt? : LooseDictionary): void + /** + * Add files programmatically + * @param files Array of files (instances of File) + */ + addFiles (files : FileList | any[]): void + /** + * Resets uploader to default; Empties queue, aborts current uploads + */ + reset (): void + /** + * Removes already uploaded files from the list + */ + removeUploadedFiles (): void + /** + * Remove files that are waiting for upload to start (same as clicking the left clear button) + */ + removeQueuedFiles (): void + /** + * Remove specified file from the queue + * @param file File to remove (instance of File) + */ + removeFile (file : LooseDictionary): void +} + +export interface QVideo extends Vue { + /** + * Aspect ratio for the content; If value is a String, then avoid using a computational statement (like '16/9') and instead specify the String value of the result directly (eg. '1.7777') + */ + ratio? : string | number + /** + * The source url to display in an iframe + */ + src : string + /** + * (Accessibility) Set the native 'title' attribute value of the inner iframe being used + */ + title? : string + /** + * Provides a hint of the relative priority to use when fetching the iframe document + */ + fetchpriority? : 'high' | 'low' | 'auto' + /** + * Indicates how the browser should load the iframe + */ + loading? : 'eager' | 'lazy' + /** + * Indicates which referrer to send when fetching the frame's resource + */ + referrerpolicy? : 'no-referrer' | 'no-referrer-when-downgrade' | 'origin' | 'origin-when-cross-origin' | 'same-origin' | 'strict-origin' | 'strict-origin-when-cross-origin' | 'unsafe-url' +} + +export interface QVirtualScroll extends Vue { + /** + * Make virtual list work in horizontal mode + */ + virtualScrollHorizontal? : boolean + /** + * Minimum number of items to render in the virtual list + */ + virtualScrollSliceSize? : number | string + /** + * Ratio of number of items in visible zone to render before it + */ + virtualScrollSliceRatioBefore? : number | string + /** + * Ratio of number of items in visible zone to render after it + */ + virtualScrollSliceRatioAfter? : number | string + /** + * Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item + */ + virtualScrollItemSize? : number | string + /** + * Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision + */ + virtualScrollStickySizeStart? : number | string + /** + * Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision + */ + virtualScrollStickySizeEnd? : number | string + /** + * The number of columns in the table (you need this if you use table-layout: fixed) + */ + tableColspan? : number | string + /** + * The type of content: list (default) or table + */ + type? : 'list' | 'table' + /** + * Available list items that will be passed to the scoped slot; For best performance freeze the list of items; Required if 'itemsFn' is not supplied + */ + items? : any[] + /** + * Number of available items in the list; Required and used only if 'itemsFn' is provided + */ + itemsSize? : number + /** + * Function to return the scope for the items to be displayed; Should return an array for items starting from 'from' index for size length; For best performance, reference it from your scope and do not define it inline + */ + itemsFn? : Function + /** + * CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one + */ + scrollTarget? : Element | string + /** + * Scroll the virtual scroll list to the item with the specified index (0 based) + * @param index The index of the list item (0 based) + * @param edge The edge to align to if the item is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns + */ + scrollTo (index : string | number, edge? : 'start' | 'center' | 'end' | 'start-force' | 'center-force' | 'end-force'): void + /** + * Resets the virtual scroll computations; Needed for custom edge-cases + */ + reset (): void + /** + * Refreshes the virtual scroll list; Use it after appending items + * @param index The index of the list item to scroll to after refresh (0 based); If it's not specified the scroll position is not changed; Use a negative value to keep scroll position + */ + refresh (index? : string | number): void +} + +export interface DialogChainObject { + /** + * Receives a Function param to tell what to do when OK is pressed / option is selected + * @param callbackFn Tell what to do + * @returns Chained Object + */ + onOk (callbackFn : Function): DialogChainObject + /** + * Receives a Function as param to tell what to do when Cancel is pressed / dialog is dismissed + * @param callbackFn Tell what to do + * @returns Chained Object + */ + onCancel (callbackFn : Function): DialogChainObject + /** + * Receives a Function param to tell what to do when the dialog is closed + * @param callbackFn Tell what to do + * @returns Chained Object + */ + onDismiss (callbackFn : Function): DialogChainObject + /** + * Hides the dialog when called + * @returns Chained Object + */ + hide (): DialogChainObject + /** + * Updates the initial properties (given as create() param) except for 'component' and 'parent' (and deprecated 'root') + * @param opts Props (except 'component' and 'parent') which will overwrite the initial create() params + * @returns Chained Object + */ + update (opts? : LooseDictionary): DialogChainObject +} + +import { CookiesGetMethodType } from './api' +export interface QDialogOptions { + /** + * CSS Class name to apply to the Dialog's QCard + */ + class? : string | any[] | LooseDictionary + /** + * CSS style to apply to the Dialog's QCard + */ + style? : string | any[] | LooseDictionary + /** + * A text for the heading title of the dialog + */ + title? : string + /** + * A text with more information about what needs to be input, selected or confirmed. + */ + message? : string + /** + * Render title and message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first + */ + html? : boolean + /** + * Position of the Dialog on screen. Standard is centered. + */ + position? : 'top' | 'right' | 'bottom' | 'left' | 'standard' + /** + * An object definition of the input field for the prompting question. + */ + prompt? : { + /** + * The initial value of the input + */ + model : string + /** + * Optional property to determine the input field type + */ + type? : string + /** + * Is typed content valid? + */ + isValid? : Function + /** + * Attributes to pass to prompt control + */ + attrs? : LooseDictionary + /** + * A text label that will “float” up above the input field, once the field gets focus + */ + label? : string + /** + * Label will be always shown above the field regardless of field content (if any) + */ + stackLabel? : boolean + /** + * Use 'filled' design for the field + */ + filled? : boolean + /** + * Use 'outlined' design for the field + */ + outlined? : boolean + /** + * Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones) + */ + standout? : boolean | string + /** + * Applies a small standard border-radius for a squared shape of the component + */ + rounded? : boolean + /** + * Remove border-radius so borders are squared; Overrides 'rounded' prop + */ + square? : boolean + /** + * Show an automatic counter on bottom right + */ + counter? : boolean + /** + * Specify a max length of model + */ + maxlength? : string | number + /** + * Prefix + */ + prefix? : string + /** + * Suffix + */ + suffix? : string } + /** + * An object definition for creating the selection form content + */ + options? : { + /** + * The value of the selection (String if it's of type radio or Array otherwise) + */ + model : string | any[] + /** + * The type of selection + */ + type? : 'radio' | 'checkbox' | 'toggle' + /** + * The list of options to interact with; Equivalent to options prop of the QOptionsGroup component + */ + items? : any[] + /** + * Is the model valid? + */ + isValid? : Function } + /** + * Display a Quasar spinner (if value is true, then the defaults are used); Useful for conveying the idea that something is happening behind the covers; Tip: use along with persistent, ok: false and update() method + */ + progress? : boolean | { + /** + * One of the QSpinners + */ + spinner? : Vue + /** + * Color name for component from the Quasar Color Palette + */ + color? : string } + /** + * Props for an 'OK' button + */ + ok? : string | { + [index: string]: any } | boolean + /** + * Props for a 'CANCEL' button + */ + cancel? : string | { + [index: string]: any } | boolean + /** + * What button to focus, unless you also have 'prompt' or 'options' + */ + focus? : 'ok' | 'cancel' | 'none' + /** + * Makes buttons be stacked instead of vertically aligned + */ + stackButtons? : boolean + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Apply dark mode + */ + dark? : boolean + /** + * User cannot dismiss Dialog if clicking outside of it or hitting ESC key; Also, an app route change won't dismiss it + */ + persistent? : boolean + /** + * User cannot dismiss Dialog by hitting ESC key; No need to set it if 'persistent' prop is also set + */ + noEscDismiss? : boolean + /** + * User cannot dismiss Dialog by clicking outside of it; No need to set it if 'persistent' prop is also set + */ + noBackdropDismiss? : boolean + /** + * Changing route app won't dismiss Dialog; No need to set it if 'persistent' prop is also set + */ + noRouteDismiss? : boolean + /** + * Put Dialog into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too + */ + seamless? : boolean + /** + * Put Dialog into maximized mode + */ + maximized? : boolean + /** + * Dialog will try to render with same width as the window + */ + fullWidth? : boolean + /** + * Dialog will try to render with same height as the window + */ + fullHeight? : boolean + /** + * One of Quasar's embedded transitions + */ + transitionShow? : string + /** + * One of Quasar's embedded transitions + */ + transitionHide? : string + /** + * Use custom dialog component; use along with 'parent' prop where possible; if using this prop, all others described here will be supplied to your custom component + */ + component? : any + /** + * Required if using 'component' prop and you need access to vuex store, router and so on; Specify Vue parent component + */ + parent? : LooseDictionary + /** + * Deprecated alias for parent + */ + root? : LooseDictionary + [index: string]: any +} + +import { WebStorageGetItemMethodType } from './api' +import { WebStorageGetIndexMethodType } from './api' +import { WebStorageGetKeyMethodType } from './api' +import { WebStorageGetAllKeysMethodType } from './api' +export interface SliderMarkerLabels { + /** + * Value of equivalent model where to position the marker + */ + value : number + /** + * Label to use + */ + label? : number | string + /** + * CSS classes to be attributed to the marker label + */ + classes? : string | any[] | LooseDictionary + /** + * Style definitions to be attributed to the marker label + */ + style? : LooseDictionary +} + +import { QVueGlobals, QSingletonGlobals } from "./globals"; +declare module "./globals" { +export interface QVueGlobals { + addressbarColor: AddressbarColor + fullscreen: AppFullscreen + /** + * Does the app have user focus? Or the app runs in the background / another tab has the user's attention + */ + appVisible : boolean + /** + * Creates an ad-hoc Bottom Sheet; Same as calling $q.bottomSheet(...) + * @param opts Bottom Sheet options + * @returns Chainable Object + */ + bottomSheet (opts : { + /** + * CSS Class name to apply to the Dialog's QCard + */ + class? : string | any[] | LooseDictionary + /** + * CSS style to apply to the Dialog's QCard + */ + style? : string | any[] | LooseDictionary + /** + * Title + */ + title? : string + /** + * Message + */ + message? : string + /** + * Array of Objects, each Object defining an action + */ + actions? : { + /** + * CSS classes for this action + */ + classes? : string | any[] | LooseDictionary + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Path to an image for this action + */ + img? : string + /** + * Display img as avatar (round borders) + */ + avatar? : boolean + /** + * Action label + */ + label? : string | number }[] + /** + * Display actions as a grid instead of as a list + */ + grid? : boolean + /** + * Apply dark mode + */ + dark? : boolean + /** + * Put Bottom Sheet into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too + */ + seamless? : boolean + /** + * User cannot dismiss Bottom Sheet if clicking outside of it or hitting ESC key + */ + persistent? : boolean }): DialogChainObject + cookies: Cookies + dark: Dark + /** + * Creates an ad-hoc Dialog; Same as calling $q.dialog(...) + * @param opts Dialog options + * @returns Chainable Object + */ + dialog (opts : QDialogOptions): DialogChainObject + interaction: Interaction + loading: Loading + loadingBar: LoadingBar + localStorage: LocalStorage + /** + * Creates a notification; Same as calling $q.notify(...) + * @param opts Notification options + * @returns Calling this function with no parameters hides the notification; When called with one Object parameter (the original notification must NOT be grouped), it updates the notification (specified properties are shallow merged with previous ones; note that group and position cannot be changed while updating and so they are ignored) + */ + notify (opts : { + /** + * Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing') + */ + type? : string + /** + * Color name for component from the Quasar Color Palette + */ + color? : string + /** + * Color name for component from the Quasar Color Palette + */ + textColor? : string + /** + * The content of your message + */ + message? : string + /** + * The content of your optional caption + */ + caption? : string + /** + * Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first + */ + html? : boolean + /** + * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it) + */ + icon? : string + /** + * Color name for component from the Quasar Color Palette + */ + iconColor? : string + /** + * Size in CSS units, including unit name + */ + iconSize? : string + /** + * URL to an avatar/image; Suggestion: use public folder + */ + avatar? : string + /** + * Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown + */ + spinner? : boolean | Vue + /** + * Color name for component from the Quasar Color Palette + */ + spinnerColor? : string + /** + * Size in CSS units, including unit name + */ + spinnerSize? : string + /** + * Window side/corner to stick to + */ + position? : 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top' | 'bottom' | 'left' | 'right' | 'center' + /** + * Override the auto generated group with custom one; Grouped notifications cannot be updated; String or number value inform this is part of a specific group, regardless of its options; When a new notification is triggered with same group name, it replaces the old one and shows a badge with how many times the notification was triggered + */ + group? : boolean | string | number + /** + * Color name for the badge from the Quasar Color Palette + */ + badgeColor? : string + /** + * Color name for the badge text from the Quasar Color Palette + */ + badgeTextColor? : string + /** + * Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left + */ + badgePosition? : 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' + /** + * Style definitions to be attributed to the badge + */ + badgeStyle? : any[] | string | LooseDictionary + /** + * Class definitions to be attributed to the badge + */ + badgeClass? : any[] | string | LooseDictionary + /** + * Show progress bar to detail when notification will disappear automatically (unless timeout is 0) + */ + progress? : boolean + /** + * Class definitions to be attributed to the progress bar + */ + progressClass? : any[] | string | LooseDictionary + /** + * Add CSS class(es) to the notification for easier customization + */ + classes? : string + /** + * Key-value for attributes to be set on the notification + */ + attrs? : LooseDictionary + /** + * Amount of time to display (in milliseconds) + */ + timeout? : number + /** + * Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop + */ + actions? : any[] + /** + * Function to call when notification gets dismissed + */ + onDismiss? : Function + /** + * Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language + */ + closeBtn? : boolean | string + /** + * Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default + */ + multiLine? : boolean + /** + * Ignore the default configuration (set by setDefaults()) for this instance only + */ + ignoreDefaults? : boolean } | string): Function + platform: Platform + screen: Screen + sessionStorage: SessionStorage +} +} + +declare module 'vue/types/vue' { + interface Vue { + $q: QVueGlobals + } +} +import { GlobalQuasarLanguage, GlobalQuasarIconSet } from './globals' +export interface QuasarPluginOptions { + lang: GlobalQuasarLanguage, + config: any, + iconSet: GlobalQuasarIconSet, + components: { + QAjaxBar?: VueConstructor + QAvatar?: VueConstructor + QBadge?: VueConstructor + QBanner?: VueConstructor + QBar?: VueConstructor + QBreadcrumbs?: VueConstructor + QBreadcrumbsEl?: VueConstructor + QBtnDropdown?: VueConstructor + QBtnGroup?: VueConstructor + QBtnToggle?: VueConstructor + QBtn?: VueConstructor + QCard?: VueConstructor + QCardActions?: VueConstructor + QCardSection?: VueConstructor + QCarousel?: VueConstructor + QCarouselControl?: VueConstructor + QCarouselSlide?: VueConstructor + QChatMessage?: VueConstructor + QCheckbox?: VueConstructor + QChip?: VueConstructor + QCircularProgress?: VueConstructor + QColor?: VueConstructor + QDate?: VueConstructor + QDialog?: VueConstructor + QDrawer?: VueConstructor + QEditor?: VueConstructor + QExpansionItem?: VueConstructor + QFab?: VueConstructor + QFabAction?: VueConstructor + QField?: VueConstructor + QFile?: VueConstructor + QFooter?: VueConstructor + QForm?: VueConstructor + QHeader?: VueConstructor + QIcon?: VueConstructor + QImg?: VueConstructor + QInfiniteScroll?: VueConstructor + QInnerLoading?: VueConstructor + QInput?: VueConstructor + QIntersection?: VueConstructor + QItem?: VueConstructor + QItemLabel?: VueConstructor + QItemSection?: VueConstructor + QList?: VueConstructor + QKnob?: VueConstructor + QLayout?: VueConstructor + QLinearProgress?: VueConstructor + QMarkupTable?: VueConstructor + QMenu?: VueConstructor + QNoSsr?: VueConstructor + QOptionGroup?: VueConstructor + QPageScroller?: VueConstructor + QPageSticky?: VueConstructor + QPage?: VueConstructor + QPageContainer?: VueConstructor + QPagination?: VueConstructor + QParallax?: VueConstructor + QPopupEdit?: VueConstructor + QPopupProxy?: VueConstructor + QPullToRefresh?: VueConstructor + QRadio?: VueConstructor + QRange?: VueConstructor + QRating?: VueConstructor + QResizeObserver?: VueConstructor + QResponsive?: VueConstructor + QScrollArea?: VueConstructor + QScrollObserver?: VueConstructor + QSelect?: VueConstructor + QSeparator?: VueConstructor + QSkeleton?: VueConstructor + QSlideItem?: VueConstructor + QSlideTransition?: VueConstructor + QSlider?: VueConstructor + QSpace?: VueConstructor + QSpinner?: VueConstructor + QSpinnerAudio?: VueConstructor + QSpinnerBall?: VueConstructor + QSpinnerBars?: VueConstructor + QSpinnerBox?: VueConstructor + QSpinnerClock?: VueConstructor + QSpinnerComment?: VueConstructor + QSpinnerCube?: VueConstructor + QSpinnerDots?: VueConstructor + QSpinnerFacebook?: VueConstructor + QSpinnerGears?: VueConstructor + QSpinnerGrid?: VueConstructor + QSpinnerHearts?: VueConstructor + QSpinnerHourglass?: VueConstructor + QSpinnerInfinity?: VueConstructor + QSpinnerIos?: VueConstructor + QSpinnerOrbit?: VueConstructor + QSpinnerOval?: VueConstructor + QSpinnerPie?: VueConstructor + QSpinnerPuff?: VueConstructor + QSpinnerRadio?: VueConstructor + QSpinnerRings?: VueConstructor + QSpinnerTail?: VueConstructor + QSplitter?: VueConstructor + QStep?: VueConstructor + QStepper?: VueConstructor + QStepperNavigation?: VueConstructor + QTabPanel?: VueConstructor + QTabPanels?: VueConstructor + QTable?: VueConstructor + QTd?: VueConstructor + QTh?: VueConstructor + QTr?: VueConstructor + QRouteTab?: VueConstructor + QTab?: VueConstructor + QTabs?: VueConstructor + QTime?: VueConstructor + QTimeline?: VueConstructor + QTimelineEntry?: VueConstructor + QToggle?: VueConstructor + QToolbar?: VueConstructor + QToolbarTitle?: VueConstructor + QTooltip?: VueConstructor + QTree?: VueConstructor + QUploader?: VueConstructor + QUploaderAddTrigger?: VueConstructor + QUploaderBase?: VueConstructor + QVideo?: VueConstructor + QVirtualScroll?: VueConstructor + }, + directives: { + ClosePopup?: ClosePopup + GoBack?: GoBack + Intersection?: Intersection + KeyGroupNavigation?: KeyGroupNavigation + Morph?: Morph + Mutation?: Mutation + Ripple?: Ripple + Scroll?: Scroll + ScrollFire?: ScrollFire + TouchHold?: TouchHold + TouchPan?: TouchPan + TouchRepeat?: TouchRepeat + TouchSwipe?: TouchSwipe + }, + plugins: { + AddressbarColor?: AddressbarColor + AppFullscreen?: AppFullscreen + AppVisibility?: AppVisibility + BottomSheet?: BottomSheet + Cookies?: Cookies + Dark?: Dark + Dialog?: Dialog + Interaction?: Interaction + Loading?: Loading + LoadingBar?: LoadingBar + LocalStorage?: LocalStorage + Meta?: Meta + Notify?: Notify + Platform?: Platform + Screen?: Screen + SessionStorage?: SessionStorage + } +} + +import './lang' +declare module './lang' { + export interface QuasarLanguageCodesHolder { + 'ar': true + 'az-latn': true + 'bg': true + 'ca': true + 'cs': true + 'da': true + 'de': true + 'el': true + 'en-gb': true + 'en-us': true + 'eo': true + 'es': true + 'et': true + 'eu': true + 'fa-ir': true + 'fa': true + 'fi': true + 'fr': true + 'gn': true + 'he': true + 'hr': true + 'hu': true + 'id': true + 'is': true + 'it': true + 'ja': true + 'km': true + 'ko-kr': true + 'kur-ckb': true + 'kz': true + 'lu': true + 'lv': true + 'ml': true + 'mm': true + 'ms': true + 'my': true + 'nb-no': true + 'nl': true + 'pl': true + 'pt-br': true + 'pt': true + 'ro': true + 'ru': true + 'sk': true + 'sl': true + 'sm': true + 'sr': true + 'sv': true + 'ta': true + 'th': true + 'tr': true + 'ug': true + 'uk': true + 'uz-Cyrl': true + 'uz-Latn': true + 'vi': true + 'zh-hans': true + 'zh-hant': true + } +} +export as namespace quasar +export * from './ts-helpers' +export * from './utils' +export * from './feature-flag' +export * from './globals' +export * from './extras' +export * from './lang' +export * from './api' +export const AddressbarColor: AddressbarColor +export const AppFullscreen: AppFullscreen +export const AppVisibility: AppVisibility +export const BottomSheet: BottomSheet +export const Cookies: Cookies +export const Dark: Dark +export const Dialog: Dialog +export const Interaction: Interaction +export const Loading: Loading +export const LoadingBar: LoadingBar +export const LocalStorage: LocalStorage +export const Meta: Meta +export const Notify: Notify +export const Platform: Platform +export const Screen: Screen +export const SessionStorage: SessionStorage +export const ClosePopup: ClosePopup +export const GoBack: GoBack +export const Intersection: Intersection +export const KeyGroupNavigation: KeyGroupNavigation +export const Morph: Morph +export const Mutation: Mutation +export const Ripple: Ripple +export const Scroll: Scroll +export const ScrollFire: ScrollFire +export const TouchHold: TouchHold +export const TouchPan: TouchPan +export const TouchRepeat: TouchRepeat +export const TouchSwipe: TouchSwipe +export const QAjaxBar: VueConstructor +export const QAvatar: VueConstructor +export const QBadge: VueConstructor +export const QBanner: VueConstructor +export const QBar: VueConstructor +export const QBreadcrumbs: VueConstructor +export const QBreadcrumbsEl: VueConstructor +export const QBtnDropdown: VueConstructor +export const QBtnGroup: VueConstructor +export const QBtnToggle: VueConstructor +export const QBtn: VueConstructor +export const QCard: VueConstructor +export const QCardActions: VueConstructor +export const QCardSection: VueConstructor +export const QCarousel: VueConstructor +export const QCarouselControl: VueConstructor +export const QCarouselSlide: VueConstructor +export const QChatMessage: VueConstructor +export const QCheckbox: VueConstructor +export const QChip: VueConstructor +export const QCircularProgress: VueConstructor +export const QColor: VueConstructor +export const QDate: VueConstructor +export const QDialog: VueConstructor +export const QDrawer: VueConstructor +export const QEditor: VueConstructor +export const QExpansionItem: VueConstructor +export const QFab: VueConstructor +export const QFabAction: VueConstructor +export const QField: VueConstructor +export const QFile: VueConstructor +export const QFooter: VueConstructor +export const QForm: VueConstructor +export const QHeader: VueConstructor +export const QIcon: VueConstructor +export const QImg: VueConstructor +export const QInfiniteScroll: VueConstructor +export const QInnerLoading: VueConstructor +export const QInput: VueConstructor +export const QIntersection: VueConstructor +export const QItem: VueConstructor +export const QItemLabel: VueConstructor +export const QItemSection: VueConstructor +export const QList: VueConstructor +export const QKnob: VueConstructor +export const QLayout: VueConstructor +export const QLinearProgress: VueConstructor +export const QMarkupTable: VueConstructor +export const QMenu: VueConstructor +export const QNoSsr: VueConstructor +export const QOptionGroup: VueConstructor +export const QPageScroller: VueConstructor +export const QPageSticky: VueConstructor +export const QPage: VueConstructor +export const QPageContainer: VueConstructor +export const QPagination: VueConstructor +export const QParallax: VueConstructor +export const QPopupEdit: VueConstructor +export const QPopupProxy: VueConstructor +export const QPullToRefresh: VueConstructor +export const QRadio: VueConstructor +export const QRange: VueConstructor +export const QRating: VueConstructor +export const QResizeObserver: VueConstructor +export const QResponsive: VueConstructor +export const QScrollArea: VueConstructor +export const QScrollObserver: VueConstructor +export const QSelect: VueConstructor +export const QSeparator: VueConstructor +export const QSkeleton: VueConstructor +export const QSlideItem: VueConstructor +export const QSlideTransition: VueConstructor +export const QSlider: VueConstructor +export const QSpace: VueConstructor +export const QSpinner: VueConstructor +export const QSpinnerAudio: VueConstructor +export const QSpinnerBall: VueConstructor +export const QSpinnerBars: VueConstructor +export const QSpinnerBox: VueConstructor +export const QSpinnerClock: VueConstructor +export const QSpinnerComment: VueConstructor +export const QSpinnerCube: VueConstructor +export const QSpinnerDots: VueConstructor +export const QSpinnerFacebook: VueConstructor +export const QSpinnerGears: VueConstructor +export const QSpinnerGrid: VueConstructor +export const QSpinnerHearts: VueConstructor +export const QSpinnerHourglass: VueConstructor +export const QSpinnerInfinity: VueConstructor +export const QSpinnerIos: VueConstructor +export const QSpinnerOrbit: VueConstructor +export const QSpinnerOval: VueConstructor +export const QSpinnerPie: VueConstructor +export const QSpinnerPuff: VueConstructor +export const QSpinnerRadio: VueConstructor +export const QSpinnerRings: VueConstructor +export const QSpinnerTail: VueConstructor +export const QSplitter: VueConstructor +export const QStep: VueConstructor +export const QStepper: VueConstructor +export const QStepperNavigation: VueConstructor +export const QTabPanel: VueConstructor +export const QTabPanels: VueConstructor +export const QTable: VueConstructor +export const QTd: VueConstructor +export const QTh: VueConstructor +export const QTr: VueConstructor +export const QRouteTab: VueConstructor +export const QTab: VueConstructor +export const QTabs: VueConstructor +export const QTime: VueConstructor +export const QTimeline: VueConstructor +export const QTimelineEntry: VueConstructor +export const QToggle: VueConstructor +export const QToolbar: VueConstructor +export const QToolbarTitle: VueConstructor +export const QTooltip: VueConstructor +export const QTree: VueConstructor +export const QUploader: VueConstructor +export const QUploaderAddTrigger: VueConstructor +export const QUploaderBase: VueConstructor +export const QVideo: VueConstructor +export const QVirtualScroll: VueConstructor +export const Quasar: PluginObject> & QSingletonGlobals +export default Quasar + +import './vue' +import './shim-icon-set' +import './shim-lang' diff --git a/dist/types/lang.d.ts b/dist/types/lang.d.ts new file mode 100644 index 00000000000..d3b6d63fb44 --- /dev/null +++ b/dist/types/lang.d.ts @@ -0,0 +1,131 @@ +import { StringDictionary } from "./ts-helpers"; + +/* + `QuasarLanguageCodes` is a discriminated union of available languages iso codes. + That list is generated at build-time based on `lang/index.json` + (itself generated at build time, but before TS typings). + We need its reference to be defined **before** build-time because + it's used by the framework configuration. + This empty interface is filled at build-time thanks to interface merging, + it allows `QuasarLanguageCodes` to exist (with value `never`) before build + and to have the right value when referenced by the end-user. +*/ +export interface QuasarLanguageCodesHolder {} + +export type QuasarLanguageCodes = keyof QuasarLanguageCodesHolder; + +type QuasarLanguageGeneralLabel = + | "clear" + | "ok" + | "cancel" + | "close" + | "set" + | "select" + | "reset" + | "remove" + | "update" + | "create" + | "search" + | "filter" + | "refresh"; +type QuasarLanguageTableLabel = + | "noData" + | "noResults" + | "loading" + | "recordsPerPage" + | "allRows" + | "columns"; +type QuasarLanguageEditorLabel = + | "url" + | "bold" + | "italic" + | "strikethrough" + | "underline" + | "unorderedList" + | "orderedList" + | "subscript" + | "superscript" + | "hyperlink" + | "toggleFullscreen" + | "quote" + | "left" + | "center" + | "right" + | "justify" + | "print" + | "outdent" + | "indent" + | "removeFormat" + | "formatting" + | "fontSize" + | "align" + | "hr" + | "undo" + | "redo" + | "heading1" + | "heading2" + | "heading3" + | "heading4" + | "heading5" + | "heading6" + | "paragraph" + | "code" + | "size1" + | "size2" + | "size3" + | "size4" + | "size5" + | "size6" + | "size7" + | "defaultFont" + | "viewSource"; + +type QuasarLanguageTreeLabel = "noNodes" | "noResults"; +type QuasarLanguageDayTuple = [ + string, + string, + string, + string, + string, + string, + string +]; +type QuasarLanguageMonthTuple = [ + string, + string, + string, + string, + string, + string, + string, + string, + string, + string, + string, + string +]; + +export interface QuasarLanguage { + isoName: string; + nativeName: string; + rtl?: boolean; + label: StringDictionary; + date: { + days: QuasarLanguageDayTuple; + daysShort: QuasarLanguageDayTuple; + months: QuasarLanguageMonthTuple; + monthsShort: QuasarLanguageMonthTuple; + firstDayOfWeek: number; + format24h: boolean; + headerTitle?: ( + date: Date, + model: { year: number; month: number; day: number } + ) => string; + }; + table: StringDictionary & { + selectedRecords: (rows: number) => string; + pagination: (start: number, end: number, total: number) => string; + }; + editor: StringDictionary; + tree: StringDictionary; +} diff --git a/dist/types/plugin.d.ts b/dist/types/plugin.d.ts new file mode 100644 index 00000000000..8b808512733 --- /dev/null +++ b/dist/types/plugin.d.ts @@ -0,0 +1,17 @@ +import { QuasarIconSet } from "./extras"; +import { QuasarLanguage } from "./lang"; + +// These interfaces are used as forward-references +// filled at build-time via TS interface mergin capabilities +export interface QuasarComponents {} +export interface QuasarDirectives {} +export interface QuasarPlugins {} + +export interface QuasarPluginOptions { + lang: QuasarLanguage; + config: any; + iconSet: QuasarIconSet; + components: QuasarComponents; + directives: QuasarDirectives; + plugins: QuasarPlugins; +} diff --git a/dist/types/shim-icon-set.d.ts b/dist/types/shim-icon-set.d.ts new file mode 100644 index 00000000000..66bd4bcb46a --- /dev/null +++ b/dist/types/shim-icon-set.d.ts @@ -0,0 +1,7 @@ +declare module "quasar/icon-set/*" { + // We know "quasar" will exists at runtime, we can safely ignore the TS error + // @ts-ignore + import { QuasarIconSet } from "quasar"; + const iconSet: QuasarIconSet; + export default iconSet; +} diff --git a/dist/types/shim-lang.d.ts b/dist/types/shim-lang.d.ts new file mode 100644 index 00000000000..2dacbdea344 --- /dev/null +++ b/dist/types/shim-lang.d.ts @@ -0,0 +1,7 @@ +declare module "quasar/lang/*" { + // We know "quasar" will exists at runtime, we can safely ignore the TS error + // @ts-ignore + import { QuasarLanguage } from "quasar"; + const lang: QuasarLanguage; + export default lang; +} diff --git a/dist/types/ts-helpers.d.ts b/dist/types/ts-helpers.d.ts new file mode 100644 index 00000000000..f8aba223328 --- /dev/null +++ b/dist/types/ts-helpers.d.ts @@ -0,0 +1,14 @@ +export type LooseDictionary = { [index in string]: any }; + +export type StringDictionary = Required< + { [index in T]: string } +>; + +// See: https://stackoverflow.com/a/49936686/7931540 +export type DeepPartial = { + [P in keyof T]?: T[P] extends Array + ? Array> + : T[P] extends ReadonlyArray + ? ReadonlyArray> + : DeepPartial; +}; diff --git a/dist/types/tsconfig.json b/dist/types/tsconfig.json new file mode 100644 index 00000000000..e9b1649626e --- /dev/null +++ b/dist/types/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "strict": true, + "lib": ["es2015", "dom"] + }, + "include": ["./*.ts"] +} diff --git a/dist/types/typings.json b/dist/types/typings.json new file mode 100644 index 00000000000..8e5f8522f5e --- /dev/null +++ b/dist/types/typings.json @@ -0,0 +1,4 @@ +{ + "name": "quasar", + "main": "index.d.ts" +} diff --git a/dist/types/utils.d.ts b/dist/types/utils.d.ts new file mode 100644 index 00000000000..47fbd0fa679 --- /dev/null +++ b/dist/types/utils.d.ts @@ -0,0 +1,67 @@ +import { LooseDictionary } from './ts-helpers' + +export * from './utils/date'; +export * from './utils/colors'; +export * from './utils/dom'; +export * from './utils/format'; +export * from './utils/scroll'; +export * from './utils/event'; +export * from './utils/is'; +export * from './utils/run-sequential-promises'; + +// others utils +export function copyToClipboard(text: string): Promise; +export function debounce any>( + fn: F, + wait?: number, + immediate?: boolean +): F & { cancel(): void }; +export function debouncedRef(vm: T, prop: K, wait?: number): { + value: T[K], + destroy: () => void +}; +export function exportFile( + fileName: string, + rawData: BlobPart, + mimeType?: string +): true | Error; +export function extend(deep: boolean, target: any, ...sources: any[]): R; +export function extend(target: object, ...sources: any[]): R; +export function openURL any>( + url: string, + reject?: F, + windowFeatures?: Object, +): void; +export function throttle any>( + fn: F, + limit: number +): F; +export function uid(): string; + +interface MorphOptions { + from: Element | string | (() => Element | null | undefined); + to?: Element | string | (() => Element | null | undefined); + onToggle?: () => void; + waitFor?: number | 'transitionend' | Promise; + + duration?: number; + easing?: string; + delay?: number; + fill?: string; + + style?: string | Partial; + classes?: string; + + resize?: boolean; + useCSS?: boolean; + hideFromClone?: boolean; + keepToClone?: boolean; + + tween?: boolean; + tweenFromOpacity?: number; + tweenToOpacity?: number; + + onEnd?: (direction: 'to' | 'from', aborted: boolean) => void; +} + +export function morph(options: MorphOptions): (abort?: boolean) => boolean; diff --git a/dist/types/utils/colors.d.ts b/dist/types/utils/colors.d.ts new file mode 100644 index 00000000000..86baa244e16 --- /dev/null +++ b/dist/types/utils/colors.d.ts @@ -0,0 +1,30 @@ +export interface colorsRgba { + r: number; + g: number; + b: number; + a?: number; +} + +export interface colorsHsva { + h: number; + v: number; + s: number; + a?: number; +} + +export namespace colors { + function rgbToHex(rgb: colorsRgba): string; + // function rgbToString (color: colorsRgba): string; + function hexToRgb(hex: string): colorsRgba; + function hsvToRgb(hsv: colorsHsva): colorsRgba; + function rgbToHsv(rgb: colorsRgba): colorsHsva; + function textToRgb(color: string): colorsRgba; + function lighten(color: string, percent: number): string; + function luminosity(color: string | colorsRgba): number; + function brightness(color: string | colorsRgba): number; + function blend(fgColor: string | colorsRgba, bColor: string | colorsRgba): string; + function changeAlpha(color: string, offset: number): string; + function setBrand(color: string, value: string, element?: Element): void; + function getBrand(color: string, element?: Element): string | null; + function getPaletteColor(colorName: string): string; +} diff --git a/dist/types/utils/date.d.ts b/dist/types/utils/date.d.ts new file mode 100644 index 00000000000..22176c450e2 --- /dev/null +++ b/dist/types/utils/date.d.ts @@ -0,0 +1,64 @@ +interface DateOptions { + milliseconds?: number; + millisecond?: number; + seconds?: number; + second?: number; + minutes?: number; + minute?: number; + hours?: number; + hour?: number; + days?: number; + day?: number; + date?: number; + months?: number; + month?: number; + year?: number; + years?: number; +} + +export interface DateLocale { + days?: string[]; + daysShort?: string[]; + months?: string[]; + monthsShort?: string[]; + firstDayOfWeek?: number; +} + +export type DateUnitOptions = + | "second" + | "seconds" + | "minute" + | "minutes" + | "hour" + | "hours" + | "day" + | "days" + | "date" + | "month" + | "months" + | "year" + | "years"; + +export namespace date { + function isValid(date: number | string): boolean; + function extractDate(str: string, mask: string, locale?: DateLocale): Date; + function buildDate(options: DateOptions, utc?: boolean): Date; + function getDayOfWeek(date: Date | number | string, locale?: DateLocale): number; + function getWeekOfYear(date: Date | number | string): number; + function isBetweenDates(date: Date | number | string, from: Date | number | string, to: Date | number | string, opts?: { inclusiveFrom: boolean; inclusiveTo: boolean; onlyDate: boolean }): boolean; + function addToDate(date: Date | number | string, options: DateOptions): Date; + function subtractFromDate(date: Date | number | string, options: DateOptions): Date; + function adjustDate(date: Date | number | string, options: DateOptions, utc?: boolean): Date; + function startOfDate(date: Date | number | string, option: DateUnitOptions, utc?: boolean): Date; + function endOfDate(date: Date | number | string, option: DateUnitOptions, utc?: boolean): Date; + function getMaxDate(date: Date | number | string, ...args: (Date | number | string)[]): Date; + function getMinDate(date: Date | number | string, ...args: (Date | number | string)[]): Date; + function getDateDiff(date: Date | number | string, subtract: Date | number | string, unit?: `${DateUnitOptions}s`): number; + function getDayOfYear(date: Date | number | string): number; + function inferDateFormat(date: Date | number | string): "date" | "number" | "string"; + function getDateBetween(date: Date | number | string, min?: Date | number | string, max?: Date | number | string): Date; + function isSameDate(date: Date | number | string, date2: Date | number | string, unit?: DateUnitOptions): boolean; + function daysInMonth(date: Date | number | string): number; + function formatDate(date: Date | number | string | undefined, format?: string, locale?: DateLocale, __forcedYear?: number, __forcedTimezoneOffset?: number): string; + function clone(date: D): D; +} diff --git a/dist/types/utils/dom.d.ts b/dist/types/utils/dom.d.ts new file mode 100644 index 00000000000..538f1a82a3c --- /dev/null +++ b/dist/types/utils/dom.d.ts @@ -0,0 +1,14 @@ +export interface DomOffset { + top: number; + left: number; +} + +export namespace dom { + function offset(el: Element): DomOffset; + function style(el: Element, property: string): string; + function height(el: Element): number; + function width(el: Element): number; + function css(el: Element, css: Partial): void; + function cssBatch(elements: Element[], css: Partial): void; + function ready any>(fn: F): ReturnType; +} diff --git a/dist/types/utils/event.d.ts b/dist/types/utils/event.d.ts new file mode 100644 index 00000000000..1b8a92ba05b --- /dev/null +++ b/dist/types/utils/event.d.ts @@ -0,0 +1,30 @@ +// Allow using `passive` and `notPassive` with `removeEventListener` +// See https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#Matching_event_listeners_for_removal +// See https://github.com/quasarframework/quasar/pull/5729#issuecomment-559588257 +interface RemoveEventListenerFix { + capture: undefined; +} + +export interface ListenOpts { + hasPassive: boolean; + passive: undefined | ({ passive: true } & RemoveEventListenerFix); + notPassive: undefined | ({ passive: false } & RemoveEventListenerFix); + passiveCapture: true | { passive: true; capture: true }; + notPassiveCapture: true | { passive: false; capture: true }; +} + +export namespace event { + const listenOpts: ListenOpts; + function leftClick(evt: MouseEvent): boolean; + function middleClick(evt: MouseEvent): boolean; + function rightClick(evt: MouseEvent): boolean; + function position(evt: TouchEvent): { top: number; left: number }; + function getEventPath(evt: Event): EventTarget[]; + function eventOnAncestors(evt: Event, el: Element | null | undefined): boolean; + function getMouseWheelDistance(evt: WheelEvent): { x: number; y: number }; + function stop(evt: Event): void; + function prevent(evt: Event): void; + function stopAndPrevent(evt: Event): void; + function preventDraggable(el: Element, status: boolean): void; + function create(name: string, opts?: EventInit): Event; +} diff --git a/dist/types/utils/format.d.ts b/dist/types/utils/format.d.ts new file mode 100644 index 00000000000..6c9ea64418f --- /dev/null +++ b/dist/types/utils/format.d.ts @@ -0,0 +1,7 @@ +export namespace format { + function humanStorageSize(size: number) : string; + function capitalize(text: string) : string; + function between(v: number, min: number, max: number) : number; + function normalizeToInterval(v: number, min: number, max: number) : number; + function pad(v: string, length?: number, char?: string) : string; +} \ No newline at end of file diff --git a/dist/types/utils/is.d.ts b/dist/types/utils/is.d.ts new file mode 100644 index 00000000000..f21aa4001cb --- /dev/null +++ b/dist/types/utils/is.d.ts @@ -0,0 +1,67 @@ +interface is { + /** + * Recursively checks if one Object is equal to another. + * Also supports Map, Set, ArrayBuffer, Regexp, Date, and many more. + * + * @example + * const objA = { foo: 1, bar: { baz: 2 } } + * const objB = { foo: 1, bar: { baz: 2 } } + * objA === objB // false + * is.deepEqual(objA, objB) // true + */ + // Can't do it both ways, see: https://github.com/microsoft/TypeScript/issues/26916#issuecomment-555691585 + deepEqual(obj1: T, obj2: unknown): obj2 is T; + + /** + * Checks if a value is an object. + * Note: Map, Set, ArrayBuffer, Regexp, Date, etc. are also objects, + * but null and Arrays are not. + * + * @example + * is.object({}) // true + * is.object([]) // false + * is.object(null) // false + * is.object(1) // false + * is.object(new Map()) // true + * is.object(new Set()) // true + */ + object(val: T): val is Record; + + /** + * Checks if a value is a Date object. + * + * @see `date.isValid()` If you want to check if a value is a valid date string or number + * + * @example + * is.date(new Date()) // true + * is.date(Date.now()) // false + * is.date(new Date('2022-09-24T11:00:00.000Z')) // true + * is.date('2022-09-24') // false + */ + date(val: unknown): val is Date; + + /** + * Checks if a value is a RegExp. + * + * @example + * is.regexp(/foo/); // true + * @example + * is.regexp(new RegExp('bar', 'g')); // true + */ + regexp(val: unknown): val is RegExp; + + /** + * Checks if a value is a finite number. + * Note: BigInts, NaN, and Infinity values are not considered as numbers. + * + * @example + * is.number(1); // true + * is.number('1'); // false + * is.number(1n); // false + * is.number(NaN); // false + * is.number(Infinity); // false + */ + number(val: unknown): val is number; +} + +export declare const is: is; diff --git a/dist/types/utils/run-sequential-promises.d.ts b/dist/types/utils/run-sequential-promises.d.ts new file mode 100644 index 00000000000..2719c9fa64e --- /dev/null +++ b/dist/types/utils/run-sequential-promises.d.ts @@ -0,0 +1,119 @@ +export interface RunSequentialPromisesFulfilledResult< + TKey extends number | string, + TValue +> { + key: TKey; + status: "fulfilled"; + value: TValue; +} + +/** + * When using `runSequentialPromises` without `abortOnFail: false`, the Promise will reject with this type. + * You can use this type to strongly-type the result yourself as it can't be automatically inferred. + * + * @example + * runSequentialPromises([ + * () => Promise.resolve('value1'), + * () => Promise.reject(new Error('test')), + * () => Promise.resolve('value2'), + * ]) + * // First generic param is `number` because we are using array-style + * // Second generic param is `string` because we are resolving with string values + * .catch((errResult: RunSequentialPromisesRejectedResult) => { + * // ... + * errResult.reason // `any` because you can reject with anything, you can cast it as you wish + * }) + */ +export interface RunSequentialPromisesRejectedResult< + TKey extends number | string, + TValue +> { + key: TKey; + status: "rejected"; + reason: any; + resultAggregator: TKey extends number + ? RunSequentialPromisesResult[] + : { [key in TKey]?: RunSequentialPromisesResult }; +} + +export type RunSequentialPromisesResult = + | RunSequentialPromisesFulfilledResult + | RunSequentialPromisesRejectedResult; + +export interface RunSequentialPromisesOptions { + /** + * When making HTTP requests, be aware of the maximum threads that + * the hosting browser supports (usually 5). Any number of threads + * above that won't add any real benefits. + * + * @default 1 + */ + threadsNumber?: number; + + /** + * When set to `false`, the result Promise will never get rejected (no catch() needed) + * Otherwise, if one of the sequential Promises gets rejected, the Promise will be + * rejected with {@link RunSequentialPromisesRejectedResult} + * + * @default true + */ + abortOnFail?: boolean; +} + +/** + * Run a list of Promises sequentially, optionally on multiple threads. + * + * @see https://quasar.dev/quasar-utils/other-utils#runsequentialpromises + * + * @throws {RunSequentialPromisesRejectedResult} when a Promise rejects (when `options.abortOnFail` is not false) + */ +// Array-style overrides +export function runSequentialPromises< + TValue = any, + TKey extends number = number +>( + promises: (( + resultAggregator: RunSequentialPromisesResult[] + ) => Promise)[], + options: Omit & { + abortOnFail: false; + } +): Promise[]>; +export function runSequentialPromises< + TValue = any, + TKey extends number = number +>( + promises: (( + resultAggregator: RunSequentialPromisesFulfilledResult[] + ) => Promise)[], + options?: RunSequentialPromisesOptions +): Promise[]>; +// Object-style overrides +export function runSequentialPromises< + TValue = any, + TKey extends string = string +>( + promisesMap: { + [key in TKey]: (resultAggregator: { + [key in TKey]?: RunSequentialPromisesResult; + }) => Promise; + }, + options?: Omit & { + abortOnFail: false; + } +): Promise<{ + [key in TKey]: RunSequentialPromisesResult; +}>; +export function runSequentialPromises< + TValue = any, + TKey extends string = string +>( + promisesMap: { + [key in TKey]: (resultAggregator: { + [key in TKey]?: RunSequentialPromisesFulfilledResult; + }) => Promise; + }, + options?: RunSequentialPromisesOptions +): Promise<{ + [key in TKey]: RunSequentialPromisesFulfilledResult; +}>; diff --git a/dist/types/utils/scroll.d.ts b/dist/types/utils/scroll.d.ts new file mode 100644 index 00000000000..360e5922a1e --- /dev/null +++ b/dist/types/utils/scroll.d.ts @@ -0,0 +1,23 @@ +import Vue from 'vue' + +export namespace scroll { + function getScrollTarget(el: Element, selector?: string | Element | Window | Vue): Element | Window; + + function getScrollHeight(el: Element | Window): number; + function getScrollWidth(el: Element | Window): number; + + function getScrollPosition(scrollTarget: Element | Window): number; + function getHorizontalScrollPosition(scrollTarget: Element | Window): number; + function rtlHasScrollBug(): boolean; + + function animScrollTo(el: Element | Window, to: number, duration: number): void; + function animHorizontalScrollTo(el: Element | Window, to: number, duration: number): void; + + function setScrollPosition(scrollTarget: Element | Window, offset: number, duration?: number): void; + function setHorizontalScrollPosition(scrollTarget: Element | Window, offset: number, duration?: number): void; + + function executeWhenScrollable(fn: (...args: any[]) => any): () => void; + + function getScrollbarWidth(): number; + function hasScrollbar(el: Element | Window, onY?: boolean): boolean; +} diff --git a/dist/types/vue.d.ts b/dist/types/vue.d.ts new file mode 100644 index 00000000000..3b910f1de42 --- /dev/null +++ b/dist/types/vue.d.ts @@ -0,0 +1,7 @@ +import Vue from 'vue' + +declare module 'vue/types/options' { + interface ComponentOptions { + meta?: object | ((this: V) => object) + } +} diff --git a/dist/vetur/quasar-attributes.json b/dist/vetur/quasar-attributes.json new file mode 100644 index 00000000000..fa04757b412 --- /dev/null +++ b/dist/vetur/quasar-attributes.json @@ -0,0 +1,5990 @@ +{ + "q-ajax-bar/position": { + "type": "string", + "description": "Position within window of where QAjaxBar should be displayed" + }, + "q-ajax-bar/size": { + "type": "string", + "description": "Size in CSS units, including unit name" + }, + "q-ajax-bar/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-ajax-bar/reverse": { + "type": "boolean", + "description": "Reverse direction of progress" + }, + "q-ajax-bar/skip-hijack": { + "type": "boolean", + "description": "Skip Ajax hijacking (not a reactive prop)" + }, + "q-ajax-bar/hijack-filter": { + "type": "function", + "description": "Filter which URL should trigger start() + stop()" + }, + "q-avatar/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-avatar/font-size": { + "type": "string", + "description": "The size in CSS units, including unit name, of the content (icon, text)" + }, + "q-avatar/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-avatar/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-avatar/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-avatar/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-avatar/rounded": { + "type": "boolean", + "description": "Applies a small standard border-radius for a squared shape of the component" + }, + "q-badge/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-badge/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-badge/floating": { + "type": "boolean", + "description": "Tell QBadge if it should float to the top right side of the relative positioned parent element or not" + }, + "q-badge/transparent": { + "type": "boolean", + "description": "Applies a 0.8 opacity; Useful especially for floating QBadge" + }, + "q-badge/multi-line": { + "type": "boolean", + "description": "Content can wrap to multiple lines" + }, + "q-badge/label": { + "type": "string|number", + "description": "Badge's content as string; overrides default slot if specified" + }, + "q-badge/align": { + "type": "string", + "description": "Sets vertical-align CSS prop" + }, + "q-badge/outline": { + "type": "boolean", + "description": "Use 'outline' design (colored text and borders only)" + }, + "q-badge/rounded": { + "type": "boolean", + "description": "Makes a rounded shaped badge" + }, + "q-banner/inline-actions": { + "type": "boolean", + "description": "Display actions on same row as content" + }, + "q-banner/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-banner/rounded": { + "type": "boolean", + "description": "Applies a small standard border-radius for a squared shape of the component" + }, + "q-banner/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-bar/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-bar/dark": { + "type": "boolean", + "description": "The component background color lights up the parent's background (as opposed to default behavior which is to darken it); Works unless you specify a CSS background color for it" + }, + "q-breadcrumbs/separator": { + "type": "string", + "description": "The string used to separate the breadcrumbs" + }, + "q-breadcrumbs/active-color": { + "type": "string", + "description": "The color of the active breadcrumb, which can be any color from the Quasar Color Palette" + }, + "q-breadcrumbs/gutter": { + "type": "string", + "description": "The gutter value allows you control over the space between the breadcrumb elements." + }, + "q-breadcrumbs/separator-color": { + "type": "string", + "description": "The color used to color the separator, which can be any color from the Quasar Color Palette" + }, + "q-breadcrumbs/align": { + "type": "string", + "description": "Specify how to align the breadcrumbs horizontally" + }, + "q-breadcrumbs-el/to": { + "type": "string|object", + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used" + }, + "q-breadcrumbs-el/exact": { + "type": "boolean", + "description": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used" + }, + "q-breadcrumbs-el/append": { + "type": "boolean", + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used" + }, + "q-breadcrumbs-el/replace": { + "type": "boolean", + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used" + }, + "q-breadcrumbs-el/active-class": { + "type": "string", + "description": "Equivalent to Vue Router 'active-class' property" + }, + "q-breadcrumbs-el/exact-active-class": { + "type": "string", + "description": "Equivalent to Vue Router 'active-class' property" + }, + "q-breadcrumbs-el/href": { + "type": "string", + "description": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props" + }, + "q-breadcrumbs-el/target": { + "type": "string", + "description": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props" + }, + "q-breadcrumbs-el/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-breadcrumbs-el/label": { + "type": "string", + "description": "The label text for the breadcrumb" + }, + "q-breadcrumbs-el/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-btn-dropdown/value": { + "type": "boolean", + "description": "Controls Menu show/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-btn-dropdown/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-btn-dropdown/ripple": { + "type": "boolean|object", + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)" + }, + "q-btn-dropdown/type": { + "type": "string", + "description": "1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag" + }, + "q-btn-dropdown/to": { + "type": "string|object", + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used" + }, + "q-btn-dropdown/replace": { + "type": "boolean", + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used" + }, + "q-btn-dropdown/append": { + "type": "boolean", + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used" + }, + "q-btn-dropdown/href": { + "type": "string", + "description": "Native link href attribute; Has priority over the 'to' and 'replace' props" + }, + "q-btn-dropdown/target": { + "type": "string", + "description": "Native link target attribute; Use it only with 'to' or 'href' props" + }, + "q-btn-dropdown/label": { + "type": "string|number", + "description": "The text that will be shown on the button" + }, + "q-btn-dropdown/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-btn-dropdown/icon-right": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-btn-dropdown/outline": { + "type": "boolean", + "description": "Use 'outline' design" + }, + "q-btn-dropdown/flat": { + "type": "boolean", + "description": "Use 'flat' design" + }, + "q-btn-dropdown/unelevated": { + "type": "boolean", + "description": "Remove shadow" + }, + "q-btn-dropdown/rounded": { + "type": "boolean", + "description": "Applies a more prominent border-radius for a squared shape button" + }, + "q-btn-dropdown/push": { + "type": "boolean", + "description": "Use 'push' design" + }, + "q-btn-dropdown/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-btn-dropdown/glossy": { + "type": "boolean", + "description": "Applies a glossy effect" + }, + "q-btn-dropdown/fab": { + "type": "boolean", + "description": "Makes button size and shape to fit a Floating Action Button" + }, + "q-btn-dropdown/fab-mini": { + "type": "boolean", + "description": "Makes button size and shape to fit a small Floating Action Button" + }, + "q-btn-dropdown/padding": { + "type": "string", + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set" + }, + "q-btn-dropdown/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-btn-dropdown/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-btn-dropdown/no-caps": { + "type": "boolean", + "description": "Avoid turning label text into caps (which happens by default)" + }, + "q-btn-dropdown/no-wrap": { + "type": "boolean", + "description": "Avoid label text wrapping" + }, + "q-btn-dropdown/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-btn-dropdown/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-btn-dropdown/align": { + "type": "string", + "description": "Label or content alignment" + }, + "q-btn-dropdown/stack": { + "type": "boolean", + "description": "Stack icon and label vertically instead of on same line (like it is by default)" + }, + "q-btn-dropdown/stretch": { + "type": "boolean", + "description": "When used on flexbox parent, button will stretch to parent's height" + }, + "q-btn-dropdown/loading": { + "type": "boolean", + "description": "Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot)" + }, + "q-btn-dropdown/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-btn-dropdown/split": { + "type": "boolean", + "description": "Split dropdown icon into its own button" + }, + "q-btn-dropdown/dropdown-icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-btn-dropdown/disable-main-btn": { + "type": "boolean", + "description": "Disable main button (useful along with 'split' prop)" + }, + "q-btn-dropdown/disable-dropdown": { + "type": "boolean", + "description": "Disables dropdown (dropdown button if using along 'split' prop)" + }, + "q-btn-dropdown/no-icon-animation": { + "type": "boolean", + "description": "Disables the rotation of the dropdown icon when state is toggled" + }, + "q-btn-dropdown/content-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the menu" + }, + "q-btn-dropdown/content-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the menu" + }, + "q-btn-dropdown/cover": { + "type": "boolean", + "description": "Allows the menu to cover the button. When used, the 'menu-self' and 'menu-fit' props are no longer effective" + }, + "q-btn-dropdown/persistent": { + "type": "boolean", + "description": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key" + }, + "q-btn-dropdown/no-route-dismiss": { + "type": "boolean", + "description": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set" + }, + "q-btn-dropdown/auto-close": { + "type": "boolean", + "description": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap" + }, + "q-btn-dropdown/menu-anchor": { + "type": "string", + "description": "Two values setting the starting position or anchor point of the menu relative to its target" + }, + "q-btn-dropdown/menu-self": { + "type": "string", + "description": "Two values setting the menu's own position relative to its target" + }, + "q-btn-dropdown/menu-offset": { + "type": "array", + "description": "An array of two numbers to offset the menu horizontally and vertically in pixels" + }, + "q-btn-dropdown/transition-show": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-btn-dropdown/transition-hide": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-btn-dropdown/toggle-aria-label": { + "type": "string", + "description": "aria-label to be used on the dropdown toggle element" + }, + "q-btn-group/spread": { + "type": "boolean", + "description": "Spread horizontally to all available space" + }, + "q-btn-group/outline": { + "type": "boolean", + "description": "Use 'outline' design for buttons" + }, + "q-btn-group/flat": { + "type": "boolean", + "description": "Use 'flat' design for buttons" + }, + "q-btn-group/unelevated": { + "type": "boolean", + "description": "Remove shadow on buttons" + }, + "q-btn-group/rounded": { + "type": "boolean", + "description": "Applies a more prominent border-radius for squared shape buttons" + }, + "q-btn-group/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-btn-group/push": { + "type": "boolean", + "description": "Use 'push' design for buttons" + }, + "q-btn-group/stretch": { + "type": "boolean", + "description": "When used on flexbox parent, buttons will stretch to parent's height" + }, + "q-btn-group/glossy": { + "type": "boolean", + "description": "Applies a glossy effect" + }, + "q-btn-toggle/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-btn-toggle/ripple": { + "type": "boolean|object", + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)" + }, + "q-btn-toggle/value": { + "type": "any", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-btn-toggle/options": { + "type": "array", + "description": "Array of Objects defining each option" + }, + "q-btn-toggle/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-btn-toggle/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-btn-toggle/toggle-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-btn-toggle/toggle-text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-btn-toggle/spread": { + "type": "boolean", + "description": "Spread horizontally to all available space" + }, + "q-btn-toggle/outline": { + "type": "boolean", + "description": "Use 'outline' design" + }, + "q-btn-toggle/flat": { + "type": "boolean", + "description": "Use 'flat' design" + }, + "q-btn-toggle/unelevated": { + "type": "boolean", + "description": "Remove shadow" + }, + "q-btn-toggle/rounded": { + "type": "boolean", + "description": "Applies a more prominent border-radius for a squared shape button" + }, + "q-btn-toggle/push": { + "type": "boolean", + "description": "Use 'push' design" + }, + "q-btn-toggle/glossy": { + "type": "boolean", + "description": "Applies a glossy effect" + }, + "q-btn-toggle/size": { + "type": "string", + "description": "Button size name or a CSS unit including unit name" + }, + "q-btn-toggle/padding": { + "type": "string", + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set" + }, + "q-btn-toggle/no-caps": { + "type": "boolean", + "description": "Avoid turning label text into caps (which happens by default)" + }, + "q-btn-toggle/no-wrap": { + "type": "boolean", + "description": "Avoid label text wrapping" + }, + "q-btn-toggle/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-btn-toggle/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-btn-toggle/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-btn-toggle/stack": { + "type": "boolean", + "description": "Stack icon and label vertically instead of on same line (like it is by default)" + }, + "q-btn-toggle/stretch": { + "type": "boolean", + "description": "When used on flexbox parent, button will stretch to parent's height" + }, + "q-btn-toggle/clearable": { + "type": "boolean", + "description": "Clears model on click of the already selected button" + }, + "q-btn/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-btn/ripple": { + "type": "boolean|object", + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)" + }, + "q-btn/type": { + "type": "string", + "description": "1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag" + }, + "q-btn/to": { + "type": "string|object", + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used" + }, + "q-btn/replace": { + "type": "boolean", + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used" + }, + "q-btn/append": { + "type": "boolean", + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used" + }, + "q-btn/href": { + "type": "string", + "description": "Native link href attribute; Has priority over the 'to' and 'replace' props" + }, + "q-btn/target": { + "type": "string", + "description": "Native link target attribute; Use it only with 'to' or 'href' props" + }, + "q-btn/label": { + "type": "string|number", + "description": "The text that will be shown on the button" + }, + "q-btn/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-btn/icon-right": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-btn/outline": { + "type": "boolean", + "description": "Use 'outline' design" + }, + "q-btn/flat": { + "type": "boolean", + "description": "Use 'flat' design" + }, + "q-btn/unelevated": { + "type": "boolean", + "description": "Remove shadow" + }, + "q-btn/rounded": { + "type": "boolean", + "description": "Applies a more prominent border-radius for a squared shape button" + }, + "q-btn/push": { + "type": "boolean", + "description": "Use 'push' design" + }, + "q-btn/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-btn/glossy": { + "type": "boolean", + "description": "Applies a glossy effect" + }, + "q-btn/fab": { + "type": "boolean", + "description": "Makes button size and shape to fit a Floating Action Button" + }, + "q-btn/fab-mini": { + "type": "boolean", + "description": "Makes button size and shape to fit a small Floating Action Button" + }, + "q-btn/padding": { + "type": "string", + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set" + }, + "q-btn/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-btn/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-btn/no-caps": { + "type": "boolean", + "description": "Avoid turning label text into caps (which happens by default)" + }, + "q-btn/no-wrap": { + "type": "boolean", + "description": "Avoid label text wrapping" + }, + "q-btn/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-btn/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-btn/align": { + "type": "string", + "description": "Label or content alignment" + }, + "q-btn/stack": { + "type": "boolean", + "description": "Stack icon and label vertically instead of on same line (like it is by default)" + }, + "q-btn/stretch": { + "type": "boolean", + "description": "When used on flexbox parent, button will stretch to parent's height" + }, + "q-btn/loading": { + "type": "boolean", + "description": "Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot)" + }, + "q-btn/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-btn/round": { + "type": "boolean", + "description": "Makes a circle shaped button" + }, + "q-btn/percentage": { + "type": "number", + "description": "Percentage (0.0 < x < 100.0); To be used along 'loading' prop; Display a progress bar on the background" + }, + "q-btn/dark-percentage": { + "type": "boolean", + "description": "Progress bar on the background should have dark color; To be used along with 'percentage' and 'loading' props" + }, + "q-card/tag": { + "type": "string", + "description": "HTML tag to render" + }, + "q-card/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-card/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-card/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-card/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-card-actions/align": { + "type": "string", + "description": "Specify how to align the actions" + }, + "q-card-actions/vertical": { + "type": "boolean", + "description": "Display actions one below the other" + }, + "q-card-section/tag": { + "type": "string", + "description": "HTML tag to render" + }, + "q-card-section/horizontal": { + "type": "boolean", + "description": "Display a horizontal section (will have no padding and can contain other QCardSection)" + }, + "q-carousel/fullscreen": { + "type": "boolean", + "description": "Fullscreen mode" + }, + "q-carousel/no-route-fullscreen-exit": { + "type": "boolean", + "description": "Changing route app won't exit fullscreen" + }, + "q-carousel/value": { + "type": "any", + "description": "Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive." + }, + "q-carousel/keep-alive": { + "type": "boolean", + "description": "Equivalent to using Vue's native component on the content" + }, + "q-carousel/keep-alive-include": { + "type": "string|array|regexp", + "description": "Equivalent to using Vue's native include prop for ; Values must be valid Vue component names" + }, + "q-carousel/keep-alive-exclude": { + "type": "string|array|regexp", + "description": "Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names" + }, + "q-carousel/keep-alive-max": { + "type": "number", + "description": "Equivalent to using Vue's native max prop for " + }, + "q-carousel/animated": { + "type": "boolean", + "description": "Enable transitions between panel (also see 'transition-prev' and 'transition-next' props)" + }, + "q-carousel/infinite": { + "type": "boolean", + "description": "Makes component appear as infinite (when reaching last panel, next one will become the first one)" + }, + "q-carousel/swipeable": { + "type": "boolean", + "description": "Enable swipe events (may interfere with content's touch/mouse events)" + }, + "q-carousel/vertical": { + "type": "boolean", + "description": "Default transitions and swipe actions will be on the vertical axis" + }, + "q-carousel/transition-prev": { + "type": "string", + "description": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)" + }, + "q-carousel/transition-next": { + "type": "string", + "description": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)" + }, + "q-carousel/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-carousel/height": { + "type": "string", + "description": "Height of Carousel in CSS units, including unit name" + }, + "q-carousel/padding": { + "type": "boolean", + "description": "Applies a default padding to each slide, according to the usage of 'arrows' and 'navigation' props" + }, + "q-carousel/control-color": { + "type": "string", + "description": "Color name for QCarousel button controls (arrows, navigation) from the Quasar Color Palette" + }, + "q-carousel/control-text-color": { + "type": "string", + "description": "Color name for text color of QCarousel button controls (arrows, navigation) from the Quasar Color Palette" + }, + "q-carousel/control-type": { + "type": "string", + "description": "Type of button to use for controls (arrows, navigation)" + }, + "q-carousel/autoplay": { + "type": "number|boolean", + "description": "Jump to next slide (if 'true' or val > 0) or previous slide (if val < 0) at fixed time intervals (in milliseconds); 'false' disables autoplay, 'true' enables it for 5000ms intervals" + }, + "q-carousel/arrows": { + "type": "boolean", + "description": "Show navigation arrow buttons" + }, + "q-carousel/prev-icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-carousel/next-icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-carousel/navigation": { + "type": "boolean", + "description": "Show navigation dots" + }, + "q-carousel/navigation-position": { + "type": "string", + "description": "Side to stick navigation to" + }, + "q-carousel/navigation-icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-carousel/navigation-active-icon": { + "type": "string", + "description": "Icon name following Quasar convention for the active (current slide) navigation icon; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-carousel/thumbnails": { + "type": "boolean", + "description": "Show thumbnails" + }, + "q-carousel-control/position": { + "type": "string", + "description": "Side/corner to stick to" + }, + "q-carousel-control/offset": { + "type": "array", + "description": "An array of two numbers to offset the component horizontally and vertically (in pixels)" + }, + "q-carousel-slide/name": { + "type": "any", + "description": "Slide name" + }, + "q-carousel-slide/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-carousel-slide/img-src": { + "type": "string", + "description": "URL pointing to a slide background image (use public folder)" + }, + "q-chat-message/sent": { + "type": "boolean", + "description": "Render as a sent message (so from current user)" + }, + "q-chat-message/label": { + "type": "string", + "description": "Renders a label header/section only" + }, + "q-chat-message/bg-color": { + "type": "string", + "description": "Color name (from the Quasar Color Palette) for chat bubble background" + }, + "q-chat-message/text-color": { + "type": "string", + "description": "Color name (from the Quasar Color Palette) for chat bubble text" + }, + "q-chat-message/name": { + "type": "string", + "description": "Author's name" + }, + "q-chat-message/avatar": { + "type": "string", + "description": "URL to the avatar image of the author" + }, + "q-chat-message/text": { + "type": "array", + "description": "Array of strings that are the message body. Strings are not sanitized (see details in docs)" + }, + "q-chat-message/stamp": { + "type": "string", + "description": "Creation timestamp" + }, + "q-chat-message/size": { + "type": "string", + "description": "1-12 out of 12 (same as col-*)" + }, + "q-chat-message/label-sanitize": { + "type": "boolean", + "description": "Force use of textContent instead of innerHTML to render label; Use it when the label might be unsafe (from user input)" + }, + "q-chat-message/name-sanitize": { + "type": "boolean", + "description": "Force use of textContent instead of innerHTML to render name; Use it when the name might be unsafe (from user input)" + }, + "q-chat-message/text-sanitize": { + "type": "boolean", + "description": "Force use of textContent instead of innerHTML to render text; Use it when the text might be unsafe (from user input)" + }, + "q-chat-message/stamp-sanitize": { + "type": "boolean", + "description": "Force use of textContent instead of innerHTML to render stamp; Use it when the stamp might be unsafe (from user input)" + }, + "q-checkbox/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-checkbox/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-checkbox/value": { + "type": "any|array", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-checkbox/val": { + "type": "any", + "description": "Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked" + }, + "q-checkbox/true-value": { + "type": "any", + "description": "What model value should be considered as checked/ticked/on?" + }, + "q-checkbox/false-value": { + "type": "any", + "description": "What model value should be considered as unchecked/unticked/off?" + }, + "q-checkbox/indeterminate-value": { + "type": "any", + "description": "What model value should be considered as 'indeterminate'?" + }, + "q-checkbox/toggle-order": { + "type": "string", + "description": "Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ..." + }, + "q-checkbox/toggle-indeterminate": { + "type": "boolean", + "description": "When user clicks/taps on the component, should we toggle through the indeterminate state too?" + }, + "q-checkbox/label": { + "type": "string", + "description": "Label to display along the component (or use the default slot instead of this prop)" + }, + "q-checkbox/left-label": { + "type": "boolean", + "description": "Label (if any specified) should be displayed on the left side of the component" + }, + "q-checkbox/checked-icon": { + "type": "string", + "description": "The icon to be used when the model is truthy (instead of the default design)" + }, + "q-checkbox/unchecked-icon": { + "type": "string", + "description": "The icon to be used when the toggle is falsy (instead of the default design)" + }, + "q-checkbox/indeterminate-icon": { + "type": "string", + "description": "The icon to be used when the model is indeterminate (instead of the default design)" + }, + "q-checkbox/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-checkbox/keep-color": { + "type": "boolean", + "description": "Should the color (if specified any) be kept when the component is unticked/ off?" + }, + "q-checkbox/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-checkbox/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-checkbox/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-checkbox/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-chip/ripple": { + "type": "boolean|object", + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)" + }, + "q-chip/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-chip/size": { + "type": "string", + "description": "QChip size name or a CSS unit including unit name" + }, + "q-chip/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-chip/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-chip/icon-right": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-chip/icon-remove": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-chip/icon-selected": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-chip/label": { + "type": "string|number", + "description": "Chip's content as string; overrides default slot if specified" + }, + "q-chip/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-chip/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-chip/value": { + "type": "boolean", + "description": "Model of the component determining if QChip should be rendered or not" + }, + "q-chip/selected": { + "type": "boolean", + "description": "Model for QChip if it's selected or not" + }, + "q-chip/square": { + "type": "boolean", + "description": "Sets a low value for border-radius instead of the default one, making it close to a square" + }, + "q-chip/outline": { + "type": "boolean", + "description": "Display using the 'outline' design" + }, + "q-chip/clickable": { + "type": "boolean", + "description": "Is QChip clickable? If it's the case, then it will add hover effects and emit 'click' events" + }, + "q-chip/removable": { + "type": "boolean", + "description": "If set, then it displays a 'remove' icon that when clicked the QChip emits 'remove' event" + }, + "q-chip/remove-aria-label": { + "type": "string", + "description": "aria-label to be used on the remove icon" + }, + "q-chip/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-chip/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-circular-progress/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-circular-progress/value": { + "type": "number", + "description": "Current progress (must be between min/max)" + }, + "q-circular-progress/min": { + "type": "number", + "description": "Minimum value defining 'no progress' (must be lower than 'max')" + }, + "q-circular-progress/max": { + "type": "number", + "description": "Maximum value defining 100% progress made (must be higher than 'min')" + }, + "q-circular-progress/color": { + "type": "string", + "description": "Color name for the arc progress from the Quasar Color Palette" + }, + "q-circular-progress/center-color": { + "type": "string", + "description": "Color name for the center part of the component from the Quasar Color Palette" + }, + "q-circular-progress/track-color": { + "type": "string", + "description": "Color name for the track of the component from the Quasar Color Palette" + }, + "q-circular-progress/font-size": { + "type": "string", + "description": "Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size" + }, + "q-circular-progress/rounded": { + "type": "boolean", + "description": "Rounding the arc of progress" + }, + "q-circular-progress/thickness": { + "type": "number", + "description": "Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size" + }, + "q-circular-progress/angle": { + "type": "number", + "description": "Angle to rotate progress arc by" + }, + "q-circular-progress/indeterminate": { + "type": "boolean", + "description": "Put component into 'indeterminate' state; Ignores 'value' prop" + }, + "q-circular-progress/show-value": { + "type": "boolean", + "description": "Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component" + }, + "q-circular-progress/reverse": { + "type": "boolean", + "description": "Reverses the direction of progress; Only for determined state" + }, + "q-circular-progress/instant-feedback": { + "type": "boolean", + "description": "No animation when model changes" + }, + "q-color/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-color/value": { + "type": "string", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-color/default-value": { + "type": "string", + "description": "The default value to show when the model doesn't have one" + }, + "q-color/default-view": { + "type": "string", + "description": "The default view of the picker" + }, + "q-color/format-model": { + "type": "string", + "description": "Forces a certain model format upon the model" + }, + "q-color/palette": { + "type": "array", + "description": "Use a custom palette of colors for the palette tab" + }, + "q-color/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-color/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-color/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-color/no-header": { + "type": "boolean", + "description": "Do not render header" + }, + "q-color/no-header-tabs": { + "type": "boolean", + "description": "Do not render header tabs (only the input)" + }, + "q-color/no-footer": { + "type": "boolean", + "description": "Do not render footer; Useful when you want a specific view ('default-view' prop) and don't want the user to be able to switch it" + }, + "q-color/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-color/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-color/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-date/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-date/value": { + "type": "string|array|object", + "description": "Date(s) of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-date/landscape": { + "type": "boolean", + "description": "Display the component in landscape mode" + }, + "q-date/mask": { + "type": "string", + "description": "Mask (formatting string) used for parsing and formatting value" + }, + "q-date/locale": { + "type": "object", + "description": "Locale formatting options" + }, + "q-date/calendar": { + "type": "string", + "description": "Specify calendar type" + }, + "q-date/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-date/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-date/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-date/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-date/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-date/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-date/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-date/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-date/title": { + "type": "string", + "description": "When specified, it overrides the default header title; Makes sense when not in 'minimal' mode" + }, + "q-date/subtitle": { + "type": "string", + "description": "When specified, it overrides the default header subtitle; Makes sense when not in 'minimal' mode" + }, + "q-date/default-year-month": { + "type": "string", + "description": "The default year and month to display (in YYYY/MM format) when model is unfilled (undefined or null); Please ensure it is within the navigation min/max year-month (if using them)" + }, + "q-date/default-view": { + "type": "string", + "description": "The view which will be displayed by default" + }, + "q-date/years-in-month-view": { + "type": "boolean", + "description": "Show the years selector in months view" + }, + "q-date/events": { + "type": "array|function", + "description": "A list of events to highlight on the calendar; If using a function, it receives the date as a String and must return a Boolean (matches or not); If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-date/event-color": { + "type": "string|function", + "description": "Color name (from the Quasar Color Palette); If using a function, it receives the date as a String and must return a String (color for the received date); If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-date/options": { + "type": "array|function", + "description": "Optionally configure the days that are selectable; If using a function, it receives the date as a String and must return a Boolean (is date acceptable or not); If using a function then for best performance, reference it from your scope and do not define it inline; Incompatible with 'range' prop" + }, + "q-date/model-navigation": { + "type": "string|boolean", + "description": "On which end of the range to navigate the calendar when the model changes; Use `false` to skip navigation" + }, + "q-date/navigation-min-year-month": { + "type": "string", + "description": "Lock user from navigating below a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop" + }, + "q-date/navigation-max-year-month": { + "type": "string", + "description": "Lock user from navigating above a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop" + }, + "q-date/no-unset": { + "type": "boolean", + "description": "Remove ability to unselect a date; It does not apply to selecting a range over already selected dates" + }, + "q-date/first-day-of-week": { + "type": "string|number", + "description": "Sets the day of the week that is considered the first day (0 - Sunday, 1 - Monday, ...); This day will show in the left-most column of the calendar" + }, + "q-date/today-btn": { + "type": "boolean", + "description": "Display a button that selects the current day" + }, + "q-date/minimal": { + "type": "boolean", + "description": "Don’t display the header" + }, + "q-date/multiple": { + "type": "boolean", + "description": "Allow multiple selection; Model must be Array" + }, + "q-date/range": { + "type": "boolean", + "description": "Allow range selection; Partial compatibility with 'options' prop: selected ranges might also include 'unselectable' days" + }, + "q-date/day-as-range": { + "type": "boolean", + "description": "Model single days as a range (object) instead of string" + }, + "q-date/emit-immediately": { + "type": "boolean", + "description": "Emit model when user browses month and year too; ONLY for single selection (non-multiple, non-range)" + }, + "q-dialog/content-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the content" + }, + "q-dialog/content-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the content" + }, + "q-dialog/value": { + "type": "boolean", + "description": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-dialog/persistent": { + "type": "boolean", + "description": "User cannot dismiss Dialog if clicking outside of it or hitting ESC key; Also, an app route change won't dismiss it" + }, + "q-dialog/no-esc-dismiss": { + "type": "boolean", + "description": "User cannot dismiss Dialog by hitting ESC key; No need to set it if 'persistent' prop is also set" + }, + "q-dialog/no-backdrop-dismiss": { + "type": "boolean", + "description": "User cannot dismiss Dialog by clicking outside of it; No need to set it if 'persistent' prop is also set" + }, + "q-dialog/no-route-dismiss": { + "type": "boolean", + "description": "Changing route app won't dismiss Dialog; No need to set it if 'persistent' prop is also set" + }, + "q-dialog/auto-close": { + "type": "boolean", + "description": "Any click/tap inside of the dialog will close it" + }, + "q-dialog/seamless": { + "type": "boolean", + "description": "Put Dialog into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too" + }, + "q-dialog/maximized": { + "type": "boolean", + "description": "Put Dialog into maximized mode" + }, + "q-dialog/full-width": { + "type": "boolean", + "description": "Dialog will try to render with same width as the window" + }, + "q-dialog/full-height": { + "type": "boolean", + "description": "Dialog will try to render with same height as the window" + }, + "q-dialog/position": { + "type": "string", + "description": "Stick dialog to one of the sides (top, right, bottom or left)" + }, + "q-dialog/transition-show": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-dialog/transition-hide": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-dialog/square": { + "type": "boolean", + "description": "Forces content to have squared borders" + }, + "q-dialog/no-refocus": { + "type": "boolean", + "description": "(Accessibility) When Dialog gets hidden, do not refocus on the DOM element that previously had focus" + }, + "q-dialog/no-focus": { + "type": "boolean", + "description": "(Accessibility) When Dialog gets shown, do not switch focus on it" + }, + "q-dialog/no-shake": { + "type": "boolean", + "description": "Do not shake up the Dialog to catch user's attention" + }, + "q-drawer/value": { + "type": "boolean", + "description": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-drawer/side": { + "type": "string", + "description": "Side to attach to" + }, + "q-drawer/overlay": { + "type": "boolean", + "description": "Puts drawer into overlay mode (does not occupy space on screen, narrowing the page)" + }, + "q-drawer/width": { + "type": "number", + "description": "Width of drawer (in pixels)" + }, + "q-drawer/mini": { + "type": "boolean", + "description": "Puts drawer into mini mode" + }, + "q-drawer/mini-width": { + "type": "number", + "description": "Width of drawer (in pixels) when in mini mode" + }, + "q-drawer/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-drawer/mini-to-overlay": { + "type": "boolean", + "description": "Mini mode will expand as an overlay" + }, + "q-drawer/breakpoint": { + "type": "number", + "description": "Breakpoint (in pixels) of layout width up to which mobile mode is used" + }, + "q-drawer/behavior": { + "type": "string", + "description": "Overrides the default dynamic mode into which the drawer is put on" + }, + "q-drawer/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-drawer/elevated": { + "type": "boolean", + "description": "Adds a default shadow to the header" + }, + "q-drawer/persistent": { + "type": "boolean", + "description": "Prevents drawer from auto-closing when app's route changes" + }, + "q-drawer/show-if-above": { + "type": "boolean", + "description": "Forces drawer to be shown on screen on initial render if the layout width is above breakpoint, regardless of v-model; This is the default behavior when SSR is taken over by client on initial render" + }, + "q-drawer/content-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the drawer" + }, + "q-drawer/content-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the drawer" + }, + "q-drawer/no-swipe-open": { + "type": "boolean", + "description": "Disables the default behavior where drawer can be swiped into view; Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature" + }, + "q-drawer/no-swipe-close": { + "type": "boolean", + "description": "Disables the default behavior where drawer can be swiped out of view (applies to drawer content only); Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature" + }, + "q-drawer/no-swipe-backdrop": { + "type": "boolean", + "description": "Disables the default behavior where drawer backdrop can be swiped" + }, + "q-editor/fullscreen": { + "type": "boolean", + "description": "Fullscreen mode" + }, + "q-editor/no-route-fullscreen-exit": { + "type": "boolean", + "description": "Changing route app won't exit fullscreen" + }, + "q-editor/value": { + "type": "string", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-editor/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-editor/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-editor/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no borders)" + }, + "q-editor/dense": { + "type": "boolean", + "description": "Dense mode; toolbar buttons are shown on one-line only" + }, + "q-editor/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-editor/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-editor/min-height": { + "type": "string", + "description": "CSS unit for the minimum height of the editable area" + }, + "q-editor/max-height": { + "type": "string", + "description": "CSS unit for maximum height of the input area" + }, + "q-editor/height": { + "type": "string", + "description": "CSS value to set the height of the editable area" + }, + "q-editor/definitions": { + "type": "object", + "description": "Definition of commands and their buttons to be included in the 'toolbar' prop" + }, + "q-editor/fonts": { + "type": "object", + "description": "Object with definitions of fonts" + }, + "q-editor/toolbar": { + "type": "array", + "description": "An array of arrays of Objects/Strings that you use to define the construction of the elements and commands available in the toolbar" + }, + "q-editor/toolbar-color": { + "type": "string", + "description": "Font color (from the Quasar Palette) of buttons and text in the toolbar" + }, + "q-editor/toolbar-text-color": { + "type": "string", + "description": "Text color (from the Quasar Palette) of toolbar commands" + }, + "q-editor/toolbar-toggle-color": { + "type": "string", + "description": "Choose the active color (from the Quasar Palette) of toolbar commands button" + }, + "q-editor/toolbar-bg": { + "type": "string", + "description": "Toolbar background color (from Quasar Palette)" + }, + "q-editor/toolbar-outline": { + "type": "boolean", + "description": "Toolbar buttons are rendered \"outlined\"" + }, + "q-editor/toolbar-push": { + "type": "boolean", + "description": "Toolbar buttons are rendered as a \"push-button\" type" + }, + "q-editor/toolbar-rounded": { + "type": "boolean", + "description": "Toolbar buttons are rendered \"rounded\"" + }, + "q-editor/paragraph-tag": { + "type": "string", + "description": "Paragraph tag to be used" + }, + "q-editor/content-style": { + "type": "object", + "description": "Object with CSS properties and values for styling the container of QEditor" + }, + "q-editor/content-class": { + "type": "object|array|string", + "description": "CSS classes for the input area" + }, + "q-editor/placeholder": { + "type": "string", + "description": "Text to display as placeholder" + }, + "q-expansion-item/to": { + "type": "string|object", + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used" + }, + "q-expansion-item/exact": { + "type": "boolean", + "description": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used" + }, + "q-expansion-item/append": { + "type": "boolean", + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used" + }, + "q-expansion-item/replace": { + "type": "boolean", + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used" + }, + "q-expansion-item/active-class": { + "type": "string", + "description": "Equivalent to Vue Router 'active-class' property" + }, + "q-expansion-item/exact-active-class": { + "type": "string", + "description": "Equivalent to Vue Router 'active-class' property" + }, + "q-expansion-item/href": { + "type": "string", + "description": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props" + }, + "q-expansion-item/target": { + "type": "string", + "description": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props" + }, + "q-expansion-item/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-expansion-item/value": { + "type": "boolean", + "description": "Model of the component defining 'open' state; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-expansion-item/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-expansion-item/expand-icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-expansion-item/expanded-icon": { + "type": "string", + "description": "Expand icon name (following Quasar convention) for when QExpansionItem is expanded; When used, it also disables the rotation animation of the expand icon; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-expansion-item/expand-icon-class": { + "type": "array|string|object", + "description": "Apply custom class(es) to the expand icon item section" + }, + "q-expansion-item/toggle-aria-label": { + "type": "string", + "description": "aria-label to be used on the expansion toggle element" + }, + "q-expansion-item/label": { + "type": "string", + "description": "Header label (unless using 'header' slot)" + }, + "q-expansion-item/label-lines": { + "type": "number|string", + "description": "Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property!" + }, + "q-expansion-item/caption": { + "type": "string", + "description": "Header sub-label (unless using 'header' slot)" + }, + "q-expansion-item/caption-lines": { + "type": "number|string", + "description": "Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property!" + }, + "q-expansion-item/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-expansion-item/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-expansion-item/duration": { + "type": "number", + "description": "Animation duration (in milliseconds)" + }, + "q-expansion-item/header-inset-level": { + "type": "number", + "description": "Apply an inset to header (unless using 'header' slot); Useful when header avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu" + }, + "q-expansion-item/content-inset-level": { + "type": "number", + "description": "Apply an inset to content (changes content padding)" + }, + "q-expansion-item/expand-separator": { + "type": "boolean", + "description": "Apply a top and bottom separator when expansion item is opened" + }, + "q-expansion-item/default-opened": { + "type": "boolean", + "description": "Puts expansion item into open state on initial render; Overridden by v-model if used" + }, + "q-expansion-item/hide-expand-icon": { + "type": "boolean", + "description": "Do not show the expand icon" + }, + "q-expansion-item/expand-icon-toggle": { + "type": "boolean", + "description": "Applies the expansion events to the expand icon only and not to the whole header" + }, + "q-expansion-item/switch-toggle-side": { + "type": "boolean", + "description": "Switch expand icon side (from default 'right' to 'left')" + }, + "q-expansion-item/dense-toggle": { + "type": "boolean", + "description": "Use dense mode for expand icon" + }, + "q-expansion-item/group": { + "type": "string", + "description": "Register expansion item into a group (unique name that must be applied to all expansion items in that group) for coordinated open/close state within the group a.k.a. 'accordion mode'" + }, + "q-expansion-item/popup": { + "type": "boolean", + "description": "Put expansion list into 'popup' mode" + }, + "q-expansion-item/header-style": { + "type": "array|string|object", + "description": "Apply custom style to the header" + }, + "q-expansion-item/header-class": { + "type": "array|string|object", + "description": "Apply custom class(es) to the header" + }, + "q-fab/type": { + "type": "string", + "description": "Define the button HTML DOM type" + }, + "q-fab/outline": { + "type": "boolean", + "description": "Use 'outline' design for Fab button" + }, + "q-fab/push": { + "type": "boolean", + "description": "Use 'push' design for Fab button" + }, + "q-fab/flat": { + "type": "boolean", + "description": "Use 'flat' design for Fab button" + }, + "q-fab/unelevated": { + "type": "boolean", + "description": "Remove shadow" + }, + "q-fab/padding": { + "type": "string", + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set" + }, + "q-fab/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-fab/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-fab/glossy": { + "type": "boolean", + "description": "Apply the glossy effect over the button" + }, + "q-fab/external-label": { + "type": "boolean", + "description": "Display label besides the FABs, as external content" + }, + "q-fab/label": { + "type": "string|number", + "description": "The label that will be shown when Fab is extended" + }, + "q-fab/label-position": { + "type": "string", + "description": "Position of the label around the icon" + }, + "q-fab/hide-label": { + "type": "boolean", + "description": "Hide the label; Useful for animation purposes where you toggle the visibility of the label" + }, + "q-fab/label-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the label container" + }, + "q-fab/label-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the label container" + }, + "q-fab/square": { + "type": "boolean", + "description": "Apply a rectangle aspect to the FAB" + }, + "q-fab/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-fab/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-fab/value": { + "type": "boolean", + "description": "Controls state of fab actions (showing/hidden); Works best with v-model directive, otherwise use along listening to 'input' event" + }, + "q-fab/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-fab/active-icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-fab/hide-icon": { + "type": "boolean", + "description": "Hide the icon (don't use any)" + }, + "q-fab/direction": { + "type": "string", + "description": "Direction to expand Fab Actions to" + }, + "q-fab/vertical-actions-align": { + "type": "string", + "description": "The side of the Fab where Fab Actions will expand (only when direction is 'up' or 'down')" + }, + "q-fab/persistent": { + "type": "boolean", + "description": "By default, Fab Actions are hidden when user navigates to another route and this prop disables this behavior" + }, + "q-fab-action/type": { + "type": "string", + "description": "Define the button HTML DOM type" + }, + "q-fab-action/outline": { + "type": "boolean", + "description": "Use 'outline' design for Fab button" + }, + "q-fab-action/push": { + "type": "boolean", + "description": "Use 'push' design for Fab button" + }, + "q-fab-action/flat": { + "type": "boolean", + "description": "Use 'flat' design for Fab button" + }, + "q-fab-action/unelevated": { + "type": "boolean", + "description": "Remove shadow" + }, + "q-fab-action/padding": { + "type": "string", + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set" + }, + "q-fab-action/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-fab-action/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-fab-action/glossy": { + "type": "boolean", + "description": "Apply the glossy effect over the button" + }, + "q-fab-action/external-label": { + "type": "boolean", + "description": "Display label besides the FABs, as external content" + }, + "q-fab-action/label": { + "type": "string|number", + "description": "The label that will be shown when Fab is extended" + }, + "q-fab-action/label-position": { + "type": "string", + "description": "Position of the label around the icon" + }, + "q-fab-action/hide-label": { + "type": "boolean", + "description": "Hide the label; Useful for animation purposes where you toggle the visibility of the label" + }, + "q-fab-action/label-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the label container" + }, + "q-fab-action/label-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the label container" + }, + "q-fab-action/square": { + "type": "boolean", + "description": "Apply a rectangle aspect to the FAB" + }, + "q-fab-action/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-fab-action/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-fab-action/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-fab-action/anchor": { + "type": "string", + "description": "How to align the Fab Action relative to Fab expand side; By default it uses the align specified in QFab" + }, + "q-fab-action/to": { + "type": "string|object", + "description": "Equivalent to Vue Router 'to' property" + }, + "q-fab-action/replace": { + "type": "boolean", + "description": "Equivalent to Vue Router 'replace' property" + }, + "q-field/error": { + "type": "boolean", + "description": "Does field have validation errors?" + }, + "q-field/error-message": { + "type": "string", + "description": "Validation error message (gets displayed only if 'error' is set to 'true')" + }, + "q-field/no-error-icon": { + "type": "boolean", + "description": "Hide error icon when there is an error" + }, + "q-field/rules": { + "type": "array", + "description": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules" + }, + "q-field/reactive-rules": { + "type": "boolean", + "description": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it" + }, + "q-field/lazy-rules": { + "type": "boolean|string", + "description": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself" + }, + "q-field/label": { + "type": "string", + "description": "A text label that will “float” up above the input field, once the field gets focus" + }, + "q-field/stack-label": { + "type": "boolean", + "description": "Label will be always shown above the field regardless of field content (if any)" + }, + "q-field/hint": { + "type": "string", + "description": "Helper (hint) text which gets placed below your wrapped form component" + }, + "q-field/hide-hint": { + "type": "boolean", + "description": "Hide the helper (hint) text when field doesn't have focus" + }, + "q-field/prefix": { + "type": "string", + "description": "Prefix" + }, + "q-field/suffix": { + "type": "string", + "description": "Suffix" + }, + "q-field/label-color": { + "type": "string", + "description": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused" + }, + "q-field/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-field/bg-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-field/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-field/loading": { + "type": "boolean", + "description": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot." + }, + "q-field/clearable": { + "type": "boolean", + "description": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null" + }, + "q-field/clear-icon": { + "type": "string", + "description": "Custom icon to use for the clear button when using along with 'clearable' prop" + }, + "q-field/filled": { + "type": "boolean", + "description": "Use 'filled' design for the field" + }, + "q-field/outlined": { + "type": "boolean", + "description": "Use 'outlined' design for the field" + }, + "q-field/outlined-md": { + "type": "boolean", + "description": "Use Material Design 'outlined' design for the field" + }, + "q-field/borderless": { + "type": "boolean", + "description": "Use 'borderless' design for the field" + }, + "q-field/standout": { + "type": "boolean|string", + "description": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)" + }, + "q-field/label-slot": { + "type": "boolean", + "description": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set" + }, + "q-field/bottom-slots": { + "type": "boolean", + "description": "Enables bottom slots ('error', 'hint', 'counter')" + }, + "q-field/hide-bottom-space": { + "type": "boolean", + "description": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content" + }, + "q-field/counter": { + "type": "boolean", + "description": "Show an automatic counter on bottom right" + }, + "q-field/rounded": { + "type": "boolean", + "description": "Applies a small standard border-radius for a squared shape of the component" + }, + "q-field/square": { + "type": "boolean", + "description": "Remove border-radius so borders are squared; Overrides 'rounded' prop" + }, + "q-field/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-field/item-aligned": { + "type": "boolean", + "description": "Match inner content alignment to that of QItem" + }, + "q-field/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-field/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-field/autofocus": { + "type": "boolean", + "description": "Focus field on initial component render" + }, + "q-field/for": { + "type": "string", + "description": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well" + }, + "q-field/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists" + }, + "q-field/maxlength": { + "type": "string|number", + "description": "Specify a max length of model" + }, + "q-file/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists" + }, + "q-file/multiple": { + "type": "boolean", + "description": "Allow multiple file uploads" + }, + "q-file/accept": { + "type": "string", + "description": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element" + }, + "q-file/capture": { + "type": "string", + "description": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element" + }, + "q-file/max-file-size": { + "type": "number|string", + "description": "Maximum size of individual file in bytes" + }, + "q-file/max-total-size": { + "type": "number|string", + "description": "Maximum size of all files combined in bytes" + }, + "q-file/max-files": { + "type": "number|string", + "description": "Maximum number of files to contain" + }, + "q-file/filter": { + "type": "function", + "description": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline" + }, + "q-file/error": { + "type": "boolean", + "description": "Does field have validation errors?" + }, + "q-file/error-message": { + "type": "string", + "description": "Validation error message (gets displayed only if 'error' is set to 'true')" + }, + "q-file/no-error-icon": { + "type": "boolean", + "description": "Hide error icon when there is an error" + }, + "q-file/rules": { + "type": "array", + "description": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules" + }, + "q-file/reactive-rules": { + "type": "boolean", + "description": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it" + }, + "q-file/lazy-rules": { + "type": "boolean|string", + "description": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself" + }, + "q-file/label": { + "type": "string", + "description": "A text label that will “float” up above the input field, once the field gets focus" + }, + "q-file/stack-label": { + "type": "boolean", + "description": "Label will be always shown above the field regardless of field content (if any)" + }, + "q-file/hint": { + "type": "string", + "description": "Helper (hint) text which gets placed below your wrapped form component" + }, + "q-file/hide-hint": { + "type": "boolean", + "description": "Hide the helper (hint) text when field doesn't have focus" + }, + "q-file/prefix": { + "type": "string", + "description": "Prefix" + }, + "q-file/suffix": { + "type": "string", + "description": "Suffix" + }, + "q-file/label-color": { + "type": "string", + "description": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused" + }, + "q-file/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-file/bg-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-file/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-file/loading": { + "type": "boolean", + "description": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot." + }, + "q-file/clearable": { + "type": "boolean", + "description": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null" + }, + "q-file/clear-icon": { + "type": "string", + "description": "Custom icon to use for the clear button when using along with 'clearable' prop" + }, + "q-file/filled": { + "type": "boolean", + "description": "Use 'filled' design for the field" + }, + "q-file/outlined": { + "type": "boolean", + "description": "Use 'outlined' design for the field" + }, + "q-file/outlined-md": { + "type": "boolean", + "description": "Use Material Design 'outlined' design for the field" + }, + "q-file/borderless": { + "type": "boolean", + "description": "Use 'borderless' design for the field" + }, + "q-file/standout": { + "type": "boolean|string", + "description": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)" + }, + "q-file/label-slot": { + "type": "boolean", + "description": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set" + }, + "q-file/bottom-slots": { + "type": "boolean", + "description": "Enables bottom slots ('error', 'hint', 'counter')" + }, + "q-file/hide-bottom-space": { + "type": "boolean", + "description": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content" + }, + "q-file/counter": { + "type": "boolean", + "description": "Show an automatic counter on bottom right" + }, + "q-file/rounded": { + "type": "boolean", + "description": "Applies a small standard border-radius for a squared shape of the component" + }, + "q-file/square": { + "type": "boolean", + "description": "Remove border-radius so borders are squared; Overrides 'rounded' prop" + }, + "q-file/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-file/item-aligned": { + "type": "boolean", + "description": "Match inner content alignment to that of QItem" + }, + "q-file/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-file/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-file/autofocus": { + "type": "boolean", + "description": "Focus field on initial component render" + }, + "q-file/for": { + "type": "string", + "description": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well" + }, + "q-file/value": { + "type": "file|filelist|array", + "description": "Model of the component; Must be FileList or Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-file/append": { + "type": "boolean", + "description": "Append file(s) to current model rather than replacing them; Has effect only when using 'multiple' mode" + }, + "q-file/display-value": { + "type": "number|string", + "description": "Override default selection string, if not using 'file' or 'selected' scoped slots and if not using 'use-chips' prop" + }, + "q-file/use-chips": { + "type": "boolean", + "description": "Use QChip to show picked files" + }, + "q-file/counter-label": { + "type": "function", + "description": "Label for the counter; The 'counter' prop is necessary to enable this one" + }, + "q-file/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-file/input-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the underlying selection container" + }, + "q-file/input-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the underlying selection container" + }, + "q-footer/value": { + "type": "boolean", + "description": "Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-footer/reveal": { + "type": "boolean", + "description": "Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide footer" + }, + "q-footer/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-footer/elevated": { + "type": "boolean", + "description": "Adds a default shadow to the footer" + }, + "q-footer/height-hint": { + "type": "number|string ", + "description": "When using SSR, you can optionally hint of the height (in pixels) of the QFooter" + }, + "q-form/autofocus": { + "type": "boolean", + "description": "Focus first focusable element on initial component render" + }, + "q-form/no-error-focus": { + "type": "boolean", + "description": "Do not try to focus on first component that has a validation error when submitting form" + }, + "q-form/no-reset-focus": { + "type": "boolean", + "description": "Do not try to focus on first component when resetting form" + }, + "q-form/greedy": { + "type": "boolean", + "description": "Validate all fields in form (by default it stops after finding the first invalid field with synchronous validation)" + }, + "q-header/value": { + "type": "boolean", + "description": "Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-header/reveal": { + "type": "boolean", + "description": "Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide header" + }, + "q-header/reveal-offset": { + "type": "number", + "description": "Amount of scroll (in pixels) that should trigger a 'reveal' state change" + }, + "q-header/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-header/elevated": { + "type": "boolean", + "description": "Adds a default shadow to the header" + }, + "q-header/height-hint": { + "type": "number|string ", + "description": "When using SSR, you can optionally hint of the height (in pixels) of the QHeader" + }, + "q-icon/tag": { + "type": "string", + "description": "HTML tag to render, unless no icon is supplied or it's an svg icon" + }, + "q-icon/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-icon/name": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-icon/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-icon/left": { + "type": "boolean", + "description": "Useful if icon is on the left side of something: applies a standard margin on the right side of Icon" + }, + "q-icon/right": { + "type": "boolean", + "description": "Useful if icon is on the right side of something: applies a standard margin on the left side of Icon" + }, + "q-img/ratio": { + "type": "string|number|string|number", + "description": "Force the component to maintain an aspect ratio" + }, + "q-img/src": { + "type": "string", + "description": "Path to image" + }, + "q-img/srcset": { + "type": "string", + "description": "Same syntax as srcset attribute." + }, + "q-img/sizes": { + "type": "string", + "description": "Same syntax as sizes attribute." + }, + "q-img/width": { + "type": "string", + "description": "Forces image width; Must also include the unit (px or %)" + }, + "q-img/height": { + "type": "string", + "description": "Forces image height; Must also include the unit (px or %)" + }, + "q-img/alt": { + "type": "string", + "description": "Specifies an alternate text for the image, if the image cannot be displayed" + }, + "q-img/placeholder-src": { + "type": "string", + "description": "While waiting for your image to load, you can use a placeholder image" + }, + "q-img/basic": { + "type": "boolean", + "description": "Do not use transitions; faster render" + }, + "q-img/contain": { + "type": "boolean", + "description": "Make sure that the image getting displayed is fully contained, regardless if additional blank space besides the image is needed on horizontal or vertical" + }, + "q-img/position": { + "type": "string", + "description": "Equivalent to CSS background-position property" + }, + "q-img/transition": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-img/img-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the container of image; Does not apply to the caption" + }, + "q-img/img-style": { + "type": "object", + "description": "Apply CSS to the container of the image; Does not apply to the caption" + }, + "q-img/spinner-color": { + "type": "string", + "description": "Color name for default Spinner (unless using a 'loading' slot)" + }, + "q-img/spinner-size": { + "type": "string", + "description": "Size in CSS units, including unit name, for default Spinner (unless using a 'loading' slot)" + }, + "q-img/no-default-spinner": { + "type": "boolean", + "description": "Do not display the default spinner when loading images (unless you are specifying one through the 'loading' slot)" + }, + "q-img/native-context-menu": { + "type": "boolean", + "description": "Enable the native context menu of the image" + }, + "q-infinite-scroll/offset": { + "type": "number", + "description": "Offset (pixels) to bottom of Infinite Scroll container from which the component should start loading more content in advance" + }, + "q-infinite-scroll/debounce": { + "type": "string|number", + "description": "Debounce amount (in milliseconds)" + }, + "q-infinite-scroll/initial-index": { + "type": "number", + "description": "Initialize the pagination index (used for the @load event)" + }, + "q-infinite-scroll/scroll-target": { + "type": "element|string", + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one" + }, + "q-infinite-scroll/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-infinite-scroll/reverse": { + "type": "boolean", + "description": "Scroll area should behave like a messenger - starting scrolled to bottom and loading when reaching the top" + }, + "q-inner-loading/size": { + "type": "string", + "description": "Size in CSS units, including unit name, or standard size name (xs|sm|md|lg|xl), for the inner Spinner (unless using the default slot)" + }, + "q-inner-loading/showing": { + "type": "boolean", + "description": "State - loading or not" + }, + "q-inner-loading/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette for the inner Spinner (unless using the default slot)" + }, + "q-inner-loading/label": { + "type": "string", + "description": "Add a label; Gets overriden when using the default slot" + }, + "q-inner-loading/label-class": { + "type": "string", + "description": "Add CSS class(es) to the label; Works along the 'label' prop only" + }, + "q-inner-loading/label-style": { + "type": "array|string|object", + "description": "Apply custom style to the label; Works along the 'label' prop only" + }, + "q-inner-loading/transition-show": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-inner-loading/transition-hide": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-inner-loading/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-input/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists" + }, + "q-input/mask": { + "type": "string", + "description": "Custom mask or one of the predefined mask names" + }, + "q-input/fill-mask": { + "type": "boolean|string", + "description": "Fills string with specified characters (or underscore if value is not string) to fill mask's length" + }, + "q-input/reverse-fill-mask": { + "type": "boolean", + "description": "Fills string from the right side of the mask" + }, + "q-input/unmasked-value": { + "type": "boolean", + "description": "Model will be unmasked (won't contain tokens/separation characters)" + }, + "q-input/error": { + "type": "boolean", + "description": "Does field have validation errors?" + }, + "q-input/error-message": { + "type": "string", + "description": "Validation error message (gets displayed only if 'error' is set to 'true')" + }, + "q-input/no-error-icon": { + "type": "boolean", + "description": "Hide error icon when there is an error" + }, + "q-input/rules": { + "type": "array", + "description": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules" + }, + "q-input/reactive-rules": { + "type": "boolean", + "description": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it" + }, + "q-input/lazy-rules": { + "type": "boolean|string", + "description": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself" + }, + "q-input/label": { + "type": "string", + "description": "A text label that will “float” up above the input field, once the field gets focus" + }, + "q-input/stack-label": { + "type": "boolean", + "description": "Label will be always shown above the field regardless of field content (if any)" + }, + "q-input/hint": { + "type": "string", + "description": "Helper (hint) text which gets placed below your wrapped form component" + }, + "q-input/hide-hint": { + "type": "boolean", + "description": "Hide the helper (hint) text when field doesn't have focus" + }, + "q-input/prefix": { + "type": "string", + "description": "Prefix" + }, + "q-input/suffix": { + "type": "string", + "description": "Suffix" + }, + "q-input/label-color": { + "type": "string", + "description": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused" + }, + "q-input/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-input/bg-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-input/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-input/loading": { + "type": "boolean", + "description": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot." + }, + "q-input/clearable": { + "type": "boolean", + "description": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null" + }, + "q-input/clear-icon": { + "type": "string", + "description": "Custom icon to use for the clear button when using along with 'clearable' prop" + }, + "q-input/filled": { + "type": "boolean", + "description": "Use 'filled' design for the field" + }, + "q-input/outlined": { + "type": "boolean", + "description": "Use 'outlined' design for the field" + }, + "q-input/outlined-md": { + "type": "boolean", + "description": "Use Material Design 'outlined' design for the field" + }, + "q-input/borderless": { + "type": "boolean", + "description": "Use 'borderless' design for the field" + }, + "q-input/standout": { + "type": "boolean|string", + "description": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)" + }, + "q-input/label-slot": { + "type": "boolean", + "description": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set" + }, + "q-input/bottom-slots": { + "type": "boolean", + "description": "Enables bottom slots ('error', 'hint', 'counter')" + }, + "q-input/hide-bottom-space": { + "type": "boolean", + "description": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content" + }, + "q-input/counter": { + "type": "boolean", + "description": "Show an automatic counter on bottom right" + }, + "q-input/rounded": { + "type": "boolean", + "description": "Applies a small standard border-radius for a squared shape of the component" + }, + "q-input/square": { + "type": "boolean", + "description": "Remove border-radius so borders are squared; Overrides 'rounded' prop" + }, + "q-input/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-input/item-aligned": { + "type": "boolean", + "description": "Match inner content alignment to that of QItem" + }, + "q-input/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-input/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-input/autofocus": { + "type": "boolean", + "description": "Focus field on initial component render" + }, + "q-input/for": { + "type": "string", + "description": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well" + }, + "q-input/value": { + "type": "string|number", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-input/shadow-text": { + "type": "string", + "description": "Text to be displayed as shadow at the end of the text in the control; Does NOT applies to type=file" + }, + "q-input/type": { + "type": "string", + "description": "Input type" + }, + "q-input/debounce": { + "type": "string|number", + "description": "Debounce amount (in milliseconds) when updating model" + }, + "q-input/maxlength": { + "type": "string|number", + "description": "Specify a max length of model" + }, + "q-input/autogrow": { + "type": "boolean", + "description": "Make field autogrow along with its content (uses a textarea)" + }, + "q-input/input-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the underlying input tag" + }, + "q-input/input-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the underlying input tag" + }, + "q-intersection/tag": { + "type": "string", + "description": "HTML tag to render" + }, + "q-intersection/once": { + "type": "boolean", + "description": "Get triggered only once" + }, + "q-intersection/ssr-prerender": { + "type": "boolean", + "description": "Pre-render content on server side if using SSR (use it to pre-render above the fold content)" + }, + "q-intersection/root": { + "type": "element", + "description": "[Intersection API root prop] Lets you define an alternative to the viewport as your root (through its DOM element); It is important to keep in mind that root needs to be an ancestor of the observed element" + }, + "q-intersection/margin": { + "type": "string", + "description": "[Intersection API rootMargin prop] Allows you to specify the margins for the root, effectively allowing you to either grow or shrink the area used for intersections" + }, + "q-intersection/threshold": { + "type": "array|number", + "description": "[Intersection API threshold prop] Threshold(s) at which to trigger, specified as a ratio, or list of ratios, of (visible area / total area) of the observed element" + }, + "q-intersection/transition": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-intersection/disable": { + "type": "boolean", + "description": "Disable visibility observable (content will remain as it was, visible or hidden)" + }, + "q-item/tag": { + "type": "string", + "description": "HTML tag to render; Suggestion: use 'label' when encapsulating a QCheckbox/QRadio/QToggle so that when user clicks/taps on the whole item it will trigger a model change for the mentioned components" + }, + "q-item/to": { + "type": "string|object", + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used" + }, + "q-item/exact": { + "type": "boolean", + "description": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used" + }, + "q-item/append": { + "type": "boolean", + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used" + }, + "q-item/replace": { + "type": "boolean", + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used" + }, + "q-item/active-class": { + "type": "string", + "description": "Equivalent to Vue Router 'active-class' property" + }, + "q-item/exact-active-class": { + "type": "string", + "description": "Equivalent to Vue Router 'active-class' property" + }, + "q-item/href": { + "type": "string", + "description": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props" + }, + "q-item/target": { + "type": "string", + "description": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props" + }, + "q-item/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-item/active": { + "type": "boolean", + "description": "Put item into 'active' state" + }, + "q-item/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-item/clickable": { + "type": "boolean", + "description": "Is QItem clickable? If it's the case, then it will add hover effects and emit 'click' events" + }, + "q-item/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-item/inset-level": { + "type": "number", + "description": "Apply an inset; Useful when avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu" + }, + "q-item/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-item/manual-focus": { + "type": "boolean", + "description": "Put item into a manual focus state; Enables 'focused' prop which will determine if item is focused or not, rather than relying on native hover/focus states" + }, + "q-item/focused": { + "type": "boolean", + "description": "Determines focus state, ONLY if 'manual-focus' is enabled / set to true" + }, + "q-item-label/overline": { + "type": "boolean", + "description": "Renders an overline label" + }, + "q-item-label/caption": { + "type": "boolean", + "description": "Renders a caption label" + }, + "q-item-label/header": { + "type": "boolean", + "description": "Renders a header label" + }, + "q-item-label/lines": { + "type": "number|string", + "description": "Apply ellipsis when there's not enough space to render on the specified number of lines;" + }, + "q-item-section/avatar": { + "type": "boolean", + "description": "Render an avatar item side (does not needs 'side' prop to be set)" + }, + "q-item-section/thumbnail": { + "type": "boolean", + "description": "Render a thumbnail item side (does not needs 'side' prop to be set)" + }, + "q-item-section/side": { + "type": "boolean", + "description": "Renders as a side of the item" + }, + "q-item-section/top": { + "type": "boolean", + "description": "Align content to top (useful for multi-line items)" + }, + "q-item-section/no-wrap": { + "type": "boolean", + "description": "Do not wrap text (useful for item's main content)" + }, + "q-list/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-list/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-list/separator": { + "type": "boolean", + "description": "Applies a separator between contained items" + }, + "q-list/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-list/padding": { + "type": "boolean", + "description": "Applies a material design-like padding on top and bottom" + }, + "q-knob/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-knob/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-knob/value": { + "type": "number", + "description": "Any number to indicate the given value of the knob. Either use this property (along with a listener for 'input' event) OR use the v-model directive" + }, + "q-knob/min": { + "type": "number", + "description": "The minimum value that the model (the knob value) should start at" + }, + "q-knob/max": { + "type": "number", + "description": "The maximum value that the model (the knob value) should go to" + }, + "q-knob/inner-min": { + "type": "number", + "description": "Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop" + }, + "q-knob/inner-max": { + "type": "number", + "description": "Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop" + }, + "q-knob/step": { + "type": "number", + "description": "A number representing steps in the value of the model, while adjusting the knob" + }, + "q-knob/reverse": { + "type": "boolean", + "description": "Reverses the direction of progress" + }, + "q-knob/instant-feedback": { + "type": "boolean", + "description": "No animation when model changes" + }, + "q-knob/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-knob/center-color": { + "type": "string", + "description": "Color name for the center part of the component from the Quasar Color Palette" + }, + "q-knob/track-color": { + "type": "string", + "description": "Color name for the track of the component from the Quasar Color Palette" + }, + "q-knob/font-size": { + "type": "string", + "description": "Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size" + }, + "q-knob/thickness": { + "type": "number", + "description": "Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size" + }, + "q-knob/angle": { + "type": "number", + "description": "Angle to rotate progress arc by" + }, + "q-knob/show-value": { + "type": "boolean", + "description": "Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component" + }, + "q-knob/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-knob/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-knob/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-layout/view": { + "type": "string", + "description": "Defines how your layout components (header/footer/drawer) should be placed on screen; See docs examples" + }, + "q-layout/container": { + "type": "boolean", + "description": "Containerize the layout which means it changes the default behavior of expanding to the whole window; Useful (but not limited to) for when using on a QDialog" + }, + "q-linear-progress/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-linear-progress/value": { + "type": "number", + "description": "Progress value (0.0 < x < 1.0)" + }, + "q-linear-progress/buffer": { + "type": "number", + "description": "Optional buffer value (0.0 < x < 1.0)" + }, + "q-linear-progress/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-linear-progress/track-color": { + "type": "string", + "description": "Color name for component's track from the Quasar Color Palette" + }, + "q-linear-progress/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-linear-progress/reverse": { + "type": "boolean", + "description": "Reverse direction of progress" + }, + "q-linear-progress/stripe": { + "type": "boolean", + "description": "Draw stripes; For determinate state only (for performance reasons)" + }, + "q-linear-progress/indeterminate": { + "type": "boolean", + "description": "Put component into indeterminate mode" + }, + "q-linear-progress/query": { + "type": "boolean", + "description": "Put component into query mode" + }, + "q-linear-progress/rounded": { + "type": "boolean", + "description": "Applies a small standard border-radius for a squared shape of the component" + }, + "q-linear-progress/instant-feedback": { + "type": "boolean", + "description": "No transition when model changes" + }, + "q-markup-table/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-markup-table/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-markup-table/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-markup-table/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-markup-table/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-markup-table/separator": { + "type": "string", + "description": "Use a separator/border between rows, columns or all cells" + }, + "q-markup-table/wrap-cells": { + "type": "boolean", + "description": "Wrap text within table cells" + }, + "q-menu/target": { + "type": "boolean|string|element", + "description": "Configure a target element to trigger component toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) or a DOM element it attaches the events to the specified DOM element (if it exists)" + }, + "q-menu/no-parent-event": { + "type": "boolean", + "description": "Skips attaching events to the target DOM element (that trigger the element to get shown)" + }, + "q-menu/context-menu": { + "type": "boolean", + "description": "Allows the component to behave like a context menu, which opens with a right mouse click (or long tap on mobile)" + }, + "q-menu/content-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the content" + }, + "q-menu/content-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the content" + }, + "q-menu/value": { + "type": "boolean", + "description": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-menu/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-menu/fit": { + "type": "boolean", + "description": "Allows the menu to match at least the full width of its target" + }, + "q-menu/cover": { + "type": "boolean", + "description": "Allows the menu to cover its target. When used, the 'self' and 'fit' props are no longer effective" + }, + "q-menu/anchor": { + "type": "string", + "description": "Two values setting the starting position or anchor point of the menu relative to its target" + }, + "q-menu/self": { + "type": "string", + "description": "Two values setting the menu's own position relative to its target" + }, + "q-menu/offset": { + "type": "array", + "description": "An array of two numbers to offset the menu horizontally and vertically in pixels" + }, + "q-menu/scroll-target": { + "type": "element|string", + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one" + }, + "q-menu/touch-position": { + "type": "boolean", + "description": "Allows for the target position to be set by the mouse position, when the target of the menu is either clicked or touched" + }, + "q-menu/persistent": { + "type": "boolean", + "description": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key" + }, + "q-menu/no-route-dismiss": { + "type": "boolean", + "description": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set" + }, + "q-menu/auto-close": { + "type": "boolean", + "description": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap" + }, + "q-menu/separate-close-popup": { + "type": "boolean", + "description": "Separate from parent menu, marking it as a separate closing point for v-close-popup (without this, chained menus close all together)" + }, + "q-menu/square": { + "type": "boolean", + "description": "Forces content to have squared borders" + }, + "q-menu/no-refocus": { + "type": "boolean", + "description": "(Accessibility) When Menu gets hidden, do not refocus on the DOM element that previously had focus" + }, + "q-menu/no-focus": { + "type": "boolean", + "description": "(Accessibility) When Menu gets shown, do not switch focus on it" + }, + "q-menu/min-height": { + "type": "string", + "description": "The minimum height of the menu; Size in CSS units, including unit name" + }, + "q-menu/min-width": { + "type": "string", + "description": "The minimum width of the menu; Size in CSS units, including unit name" + }, + "q-menu/max-height": { + "type": "string", + "description": "The maximum height of the menu; Size in CSS units, including unit name" + }, + "q-menu/max-width": { + "type": "string", + "description": "The maximum width of the menu; Size in CSS units, including unit name" + }, + "q-menu/transition-show": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-menu/transition-hide": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-no-ssr/tag": { + "type": "string", + "description": "HTML tag to render" + }, + "q-no-ssr/placeholder": { + "type": "string", + "description": "Text to display on server-side render (unless using 'placeholder' slot)" + }, + "q-option-group/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-option-group/value": { + "type": "any", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-option-group/options": { + "type": "array", + "description": "Array of objects with value, label, and disable (optional) props. The binary components will be created according to this array; Props from QToggle, QCheckbox or QRadio can also be added as key/value pairs to control the components singularly" + }, + "q-option-group/name": { + "type": "string", + "description": "Used to specify the name of the controls; Useful if dealing with forms submitted directly to a URL" + }, + "q-option-group/type": { + "type": "string", + "description": "The type of input component to be used" + }, + "q-option-group/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-option-group/keep-color": { + "type": "boolean", + "description": "Should the color (if specified any) be kept when input components are unticked?" + }, + "q-option-group/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-option-group/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-option-group/left-label": { + "type": "boolean", + "description": "Label (if any specified) should be displayed on the left side of the input components" + }, + "q-option-group/inline": { + "type": "boolean", + "description": "Show input components as inline-block rather than each having their own row" + }, + "q-option-group/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-page-scroller/position": { + "type": "string", + "description": "Page side/corner to stick to" + }, + "q-page-scroller/offset": { + "type": "array", + "description": "An array of two numbers to offset the component horizontally and vertically in pixels" + }, + "q-page-scroller/expand": { + "type": "boolean", + "description": "By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop" + }, + "q-page-scroller/scroll-offset": { + "type": "number", + "description": "Scroll offset (in pixels) from which point the component is shown on page; Measured from the top of the page (or from the bottom if in 'reverse' mode)" + }, + "q-page-scroller/reverse": { + "type": "boolean", + "description": "Work in reverse (shows when scrolling to the top of the page and scrolls to bottom when triggered)" + }, + "q-page-scroller/duration": { + "type": "number", + "description": "Duration (in milliseconds) of the scrolling until it reaches its target" + }, + "q-page-sticky/position": { + "type": "string", + "description": "Page side/corner to stick to" + }, + "q-page-sticky/offset": { + "type": "array", + "description": "An array of two numbers to offset the component horizontally and vertically in pixels" + }, + "q-page-sticky/expand": { + "type": "boolean", + "description": "By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop" + }, + "q-page/padding": { + "type": "boolean", + "description": "Applies a default responsive page padding" + }, + "q-page/style-fn": { + "type": "function", + "description": "Override default CSS style applied to the component (sets minHeight); Function(offset: Number) => CSS props/value: Object; For best performance, reference it from your scope and do not define it inline" + }, + "q-pagination/value": { + "type": "number", + "description": "Current page (must be between min/max)" + }, + "q-pagination/min": { + "type": "number|string", + "description": "Minimum page (must be lower than 'max')" + }, + "q-pagination/max": { + "type": "number|string", + "description": "Number of last page (must be higher than 'min')" + }, + "q-pagination/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color (useful when you are using it along with the 'input' prop)" + }, + "q-pagination/size": { + "type": "string", + "description": "Button size in CSS units, including unit name" + }, + "q-pagination/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-pagination/input": { + "type": "boolean", + "description": "Use an input instead of buttons" + }, + "q-pagination/icon-prev": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-pagination/icon-next": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-pagination/icon-first": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-pagination/icon-last": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-pagination/to-fn": { + "type": "function", + "description": "Generate link for page buttons; For best performance, reference it from your scope and do not define it inline" + }, + "q-pagination/boundary-links": { + "type": "boolean", + "description": "Show boundary button links" + }, + "q-pagination/boundary-numbers": { + "type": "boolean", + "description": "Always show first and last page buttons (if not using 'input')" + }, + "q-pagination/direction-links": { + "type": "boolean", + "description": "Show direction buttons" + }, + "q-pagination/ellipses": { + "type": "boolean", + "description": "Show ellipses (...) when pages are available" + }, + "q-pagination/max-pages": { + "type": "number|string", + "description": "Maximum number of page links to display at a time; 0 means Infinite" + }, + "q-pagination/flat": { + "type": "boolean", + "description": "Use 'flat' design for non-active buttons (it's the default option)" + }, + "q-pagination/outline": { + "type": "boolean", + "description": "Use 'outline' design for non-active buttons" + }, + "q-pagination/unelevated": { + "type": "boolean", + "description": "Remove shadow for non-active buttons" + }, + "q-pagination/push": { + "type": "boolean", + "description": "Use 'push' design for non-active buttons" + }, + "q-pagination/color": { + "type": "string", + "description": "Color name from the Quasar Color Palette for the non-active buttons" + }, + "q-pagination/text-color": { + "type": "string", + "description": "Text color name from the Quasar Color Palette for the ACTIVE buttons" + }, + "q-pagination/active-design": { + "type": "string", + "description": "The design of the ACTIVE button, similar to the flat/outline/push/unelevated props (but those are used for non-active buttons)" + }, + "q-pagination/active-color": { + "type": "string", + "description": "Color name from the Quasar Color Palette for the ACTIVE button" + }, + "q-pagination/active-text-color": { + "type": "string", + "description": "Text color name from the Quasar Color Palette for the ACTIVE button" + }, + "q-pagination/round": { + "type": "boolean", + "description": "Makes a circle shaped button for all buttons" + }, + "q-pagination/rounded": { + "type": "boolean", + "description": "Applies a more prominent border-radius for a squared shape button for all buttons" + }, + "q-pagination/glossy": { + "type": "boolean", + "description": "Applies a glossy effect for all buttons" + }, + "q-pagination/gutter": { + "type": "string", + "description": "Apply custom gutter; Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl) - does not work in IE11" + }, + "q-pagination/padding": { + "type": "string", + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set" + }, + "q-pagination/input-style": { + "type": "string|array|object", + "description": "Style definitions to be attributed to the input (if using one)" + }, + "q-pagination/input-class": { + "type": "string|array|object", + "description": "Class definitions to be attributed to the input (if using one)" + }, + "q-pagination/ripple": { + "type": "boolean|object", + "description": "Configure buttons material ripple (disable it by setting it to 'false' or supply a config object); Does not applies to boundary and ellipsis buttons" + }, + "q-parallax/src": { + "type": "string", + "description": "Path to image (unless a 'media' slot is used)" + }, + "q-parallax/height": { + "type": "number", + "description": "Height of component (in pixels)" + }, + "q-parallax/speed": { + "type": "number", + "description": "Speed of parallax effect (0.0 < x < 1.0)" + }, + "q-parallax/scroll-target": { + "type": "element|string", + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one" + }, + "q-popup-edit/value": { + "type": "any", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-popup-edit/title": { + "type": "string", + "description": "Optional title (unless 'title' slot is used)" + }, + "q-popup-edit/buttons": { + "type": "boolean", + "description": "Show Set and Cancel buttons" + }, + "q-popup-edit/label-set": { + "type": "string", + "description": "Override Set button label" + }, + "q-popup-edit/label-cancel": { + "type": "string", + "description": "Override Cancel button label" + }, + "q-popup-edit/auto-save": { + "type": "boolean", + "description": "Automatically save the model (if changed) when user clicks/taps outside of the popup; It does not apply to ESC key" + }, + "q-popup-edit/content-class": { + "type": "string", + "description": "Class definitions to be attributed to the content" + }, + "q-popup-edit/content-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the content" + }, + "q-popup-edit/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-popup-edit/validate": { + "type": "function", + "description": "Validates model then triggers 'save' and closes Popup; Returns a Boolean ('true' means valid, 'false' means abort); Syntax: validate(value); For best performance, reference it from your scope and do not define it inline" + }, + "q-popup-edit/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-popup-edit/fit": { + "type": "boolean", + "description": "Allows the menu to match at least the full width of its target" + }, + "q-popup-edit/cover": { + "type": "boolean", + "description": "Allows the menu to cover its target. When used, the 'self' and 'fit' props are no longer effective" + }, + "q-popup-edit/anchor": { + "type": "string", + "description": "Two values setting the starting position or anchor point of the menu relative to its target" + }, + "q-popup-edit/self": { + "type": "string", + "description": "Two values setting the menu's own position relative to its target" + }, + "q-popup-edit/offset": { + "type": "array", + "description": "An array of two numbers to offset the menu horizontally and vertically in pixels" + }, + "q-popup-edit/touch-position": { + "type": "boolean", + "description": "Allows for the target position to be set by the mouse position, when the target of the menu is either clicked or touched" + }, + "q-popup-edit/persistent": { + "type": "boolean", + "description": "Avoid menu closing by hitting ESC key or by clicking/tapping outside of the Popup" + }, + "q-popup-edit/separate-close-popup": { + "type": "boolean", + "description": "Separate from parent menu, marking it as a separate closing point for v-close-popup (without this, chained menus close all together)" + }, + "q-popup-edit/square": { + "type": "boolean", + "description": "Forces menu to have squared borders" + }, + "q-popup-edit/max-height": { + "type": "string", + "description": "The maximum height of the menu; Size in CSS units, including unit name" + }, + "q-popup-edit/max-width": { + "type": "string", + "description": "The maximum width of the menu; Size in CSS units, including unit name" + }, + "q-popup-proxy/target": { + "type": "boolean|string|element", + "description": "Configure a target element to trigger component toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) or a DOM element it attaches the events to the specified DOM element (if it exists)" + }, + "q-popup-proxy/no-parent-event": { + "type": "boolean", + "description": "Skips attaching events to the target DOM element (that trigger the element to get shown)" + }, + "q-popup-proxy/context-menu": { + "type": "boolean", + "description": "Allows the component to behave like a context menu, which opens with a right mouse click (or long tap on mobile)" + }, + "q-popup-proxy/value": { + "type": "boolean", + "description": "Defines the state of the component (shown/hidden); Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-popup-proxy/breakpoint": { + "type": "number|string", + "description": "Breakpoint (in pixels) of window width/height (whichever is smaller) from where a Menu will get to be used instead of a Dialog" + }, + "q-pull-to-refresh/color": { + "type": "string", + "description": "Color name for the icon from the Quasar Color Palette" + }, + "q-pull-to-refresh/bg-color": { + "type": "string", + "description": "Color name for background of the icon container from the Quasar Color Palette" + }, + "q-pull-to-refresh/icon": { + "type": "string", + "description": "Icon to display when refreshing the content" + }, + "q-pull-to-refresh/no-mouse": { + "type": "boolean", + "description": "Don't listen for mouse events" + }, + "q-pull-to-refresh/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-pull-to-refresh/scroll-target": { + "type": "element|string", + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one" + }, + "q-radio/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-radio/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-radio/value": { + "type": "number|string", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-radio/val": { + "type": "number|string", + "description": "The actual value of the option with which model value is changed" + }, + "q-radio/label": { + "type": "string", + "description": "Label to display along the radio control (or use the default slot instead of this prop)" + }, + "q-radio/left-label": { + "type": "boolean", + "description": "Label (if any specified) should be displayed on the left side of the checkbox" + }, + "q-radio/checked-icon": { + "type": "string", + "description": "The icon to be used when selected (instead of the default design)" + }, + "q-radio/unchecked-icon": { + "type": "string", + "description": "The icon to be used when un-selected (instead of the default design)" + }, + "q-radio/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-radio/keep-color": { + "type": "boolean", + "description": "Should the color (if specified any) be kept when checkbox is unticked?" + }, + "q-radio/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-radio/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-radio/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-radio/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-range/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-range/min": { + "type": "number", + "description": "Minimum value of the model; Set track's minimum value" + }, + "q-range/max": { + "type": "number", + "description": "Maximum value of the model; Set track's maximum value" + }, + "q-range/inner-min": { + "type": "number", + "description": "Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop" + }, + "q-range/inner-max": { + "type": "number", + "description": "Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop" + }, + "q-range/step": { + "type": "number", + "description": "Specify step amount between valid values (> 0.0); When step equals to 0 it defines infinite granularity" + }, + "q-range/snap": { + "type": "boolean", + "description": "Snap on valid values, rather than sliding freely; Suggestion: use with 'step' prop" + }, + "q-range/reverse": { + "type": "boolean", + "description": "Work in reverse (changes direction)" + }, + "q-range/vertical": { + "type": "boolean", + "description": "Display in vertical direction" + }, + "q-range/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-range/track-color": { + "type": "string", + "description": "Color name for the track (can be 'transparent' too) from the Quasar Color Palette" + }, + "q-range/track-img": { + "type": "string", + "description": "Apply a pattern image on the track" + }, + "q-range/inner-track-color": { + "type": "string", + "description": "Color name for the inner track (can be 'transparent' too) from the Quasar Color Palette" + }, + "q-range/inner-track-img": { + "type": "string", + "description": "Apply a pattern image on the inner track" + }, + "q-range/selection-color": { + "type": "string", + "description": "Color name for the selection bar (can be 'transparent' too) from the Quasar Color Palette" + }, + "q-range/selection-img": { + "type": "string", + "description": "Apply a pattern image on the selection bar" + }, + "q-range/label": { + "type": "boolean", + "description": "Popup a label when user clicks/taps on the slider thumb and moves it" + }, + "q-range/label-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-range/label-text-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-range/switch-label-side": { + "type": "boolean", + "description": "Switch the position of the label (top <-> bottom or left <-> right)" + }, + "q-range/label-always": { + "type": "boolean", + "description": "Always display the label" + }, + "q-range/markers": { + "type": "boolean|number", + "description": "Display markers on the track, one for each possible value for the model or using a custom step (when specifying a Number)" + }, + "q-range/marker-labels": { + "type": "boolean|array|object|function", + "description": "Configure the marker labels (or show the default ones if 'true'); Array of definition Objects or Object with key-value where key is the model and the value is the marker label definition" + }, + "q-range/marker-labels-class": { + "type": "string", + "description": "CSS class(es) to apply to the marker labels container" + }, + "q-range/switch-marker-labels-side": { + "type": "boolean", + "description": "Switch the position of the marker labels (top <-> bottom or left <-> right)" + }, + "q-range/track-size": { + "type": "string", + "description": "Track size (including CSS unit)" + }, + "q-range/thumb-size": { + "type": "string", + "description": "Thumb size (including CSS unit)" + }, + "q-range/thumb-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-range/thumb-path": { + "type": "string", + "description": "Set custom thumb svg path" + }, + "q-range/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-range/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-range/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-range/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-range/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-range/value": { + "type": "object", + "description": "Model of the component of type { min, max } (both values must be between global min/max); Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-range/drag-range": { + "type": "boolean", + "description": "User can drag range instead of just the two thumbs" + }, + "q-range/drag-only-range": { + "type": "boolean", + "description": "User can drag only the range instead and NOT the two thumbs" + }, + "q-range/left-label-color": { + "type": "string", + "description": "Color name for left label background from the Quasar Color Palette" + }, + "q-range/left-label-text-color": { + "type": "string", + "description": "Color name for left label text from the Quasar Color Palette" + }, + "q-range/right-label-color": { + "type": "string", + "description": "Color name for right label background from the Quasar Color Palette" + }, + "q-range/right-label-text-color": { + "type": "string", + "description": "Color name for right label text from the Quasar Color Palette" + }, + "q-range/left-label-value": { + "type": "string|number", + "description": "Override default label for min value" + }, + "q-range/right-label-value": { + "type": "string|number", + "description": "Override default label for max value" + }, + "q-range/left-thumb-color": { + "type": "string", + "description": "Color name (from the Quasar Color Palette) for left thumb" + }, + "q-range/right-thumb-color": { + "type": "string", + "description": "Color name (from the Quasar Color Palette) for right thumb" + }, + "q-rating/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-rating/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-rating/value": { + "type": "number", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-rating/max": { + "type": "number|string", + "description": "Number of icons to display" + }, + "q-rating/icon": { + "type": "string|array", + "description": "Icon name following Quasar convention; make sure you have the icon library installed unless you are using 'img:' prefix; If an array is provided each rating value will use the corresponding icon in the array (0 based)" + }, + "q-rating/icon-selected": { + "type": "string|array", + "description": "Icon name following Quasar convention to be used when selected (optional); make sure you have the icon library installed unless you are using 'img:' prefix; If an array is provided each rating value will use the corresponding icon in the array (0 based)" + }, + "q-rating/icon-half": { + "type": "string|array", + "description": "Icon name following Quasar convention to be used when selected (optional); make sure you have the icon library installed unless you are using 'img:' prefix; If an array is provided each rating value will use the corresponding icon in the array (0 based)" + }, + "q-rating/icon-aria-label": { + "type": "string|array", + "description": "Label to be set on aria-label for Icon; If an array is provided each rating value will use the corresponding aria-label in the array (0 based); If string value is provided the rating value will be appended; If not provided the name of the icon will be used" + }, + "q-rating/color": { + "type": "string|array", + "description": "Color name for component from the Quasar Color Palette; v1.5.0+: If an array is provided each rating value will use the corresponding color in the array (0 based)" + }, + "q-rating/color-selected": { + "type": "string|array", + "description": "Color name from the Quasar Palette for selected icons" + }, + "q-rating/color-half": { + "type": "string|array", + "description": "Color name from the Quasar Palette for half selected icons" + }, + "q-rating/no-dimming": { + "type": "boolean", + "description": "Does not lower opacity for unselected icons" + }, + "q-rating/no-reset": { + "type": "boolean", + "description": "When used, disables default behavior of clicking/tapping on icon which represents current model value to reset model to 0" + }, + "q-rating/vertical": { + "type": "boolean", + "description": "Vertical display" + }, + "q-rating/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-rating/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-resize-observer/debounce": { + "type": "string|number", + "description": "Debounce amount (in milliseconds)" + }, + "q-responsive/ratio": { + "type": "string|number", + "description": "Aspect ratio for the content; If value is a String, then avoid using a computational statement (like '16/9') and instead specify the String value of the result directly (eg. '1.7777')" + }, + "q-scroll-area/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-scroll-area/bar-style": { + "type": "array|string|object", + "description": "Object with CSS properties and values for custom styling the scrollbars (both vertical and horizontal)" + }, + "q-scroll-area/vertical-bar-style": { + "type": "array|string|object", + "description": "Object with CSS properties and values for custom styling the vertical scrollbar; Is applied on top of 'bar-style' prop" + }, + "q-scroll-area/horizontal-bar-style": { + "type": "array|string|object", + "description": "Object with CSS properties and values for custom styling the horizontal scrollbar; Is applied on top of 'bar-style' prop" + }, + "q-scroll-area/thumb-style": { + "type": "object", + "description": "Object with CSS properties and values for custom styling the thumb of scrollbars (both vertical and horizontal)" + }, + "q-scroll-area/vertical-thumb-style": { + "type": "object", + "description": "Object with CSS properties and values for custom styling the thumb of the vertical scrollbar; Is applied on top of 'thumb-style' prop" + }, + "q-scroll-area/horizontal-thumb-style": { + "type": "object", + "description": "Object with CSS properties and values for custom styling the thumb of the horizontal scrollbar; Is applied on top of 'thumb-style' prop" + }, + "q-scroll-area/content-style": { + "type": "array|string|object", + "description": "Object with CSS properties and values for styling the container of QScrollArea" + }, + "q-scroll-area/content-active-style": { + "type": "array|string|object", + "description": "Object with CSS properties and values for styling the container of QScrollArea when scroll area becomes active (is mouse hovered)" + }, + "q-scroll-area/visible": { + "type": "boolean", + "description": "Manually control the visibility of the scrollbar; Overrides default mouse over/leave behavior" + }, + "q-scroll-area/delay": { + "type": "number|string", + "description": "When content changes, the scrollbar appears; this delay defines the amount of time (in milliseconds) before scrollbars disappear again (if component is not hovered)" + }, + "q-scroll-area/horizontal": { + "type": "boolean", + "description": "Changes the default axis to horizontal instead of vertical (which is default) for getScrollPosition, getScrollPercentage, setScrollPosition, and setScrollPercentage" + }, + "q-scroll-area/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-scroll-observer/debounce": { + "type": "string|number", + "description": "Debounce amount (in milliseconds)" + }, + "q-scroll-observer/axis": { + "type": "string", + "description": "Axis on which to detect changes" + }, + "q-scroll-observer/scroll-target": { + "type": "element|string", + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one" + }, + "q-select/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists" + }, + "q-select/virtual-scroll-horizontal": { + "type": "boolean", + "description": "Make virtual list work in horizontal mode" + }, + "q-select/virtual-scroll-slice-size": { + "type": "number|string", + "description": "Minimum number of items to render in the virtual list" + }, + "q-select/virtual-scroll-slice-ratio-before": { + "type": "number|string", + "description": "Ratio of number of items in visible zone to render before it" + }, + "q-select/virtual-scroll-slice-ratio-after": { + "type": "number|string", + "description": "Ratio of number of items in visible zone to render after it" + }, + "q-select/virtual-scroll-item-size": { + "type": "number|string", + "description": "Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item" + }, + "q-select/virtual-scroll-sticky-size-start": { + "type": "number|string", + "description": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision" + }, + "q-select/virtual-scroll-sticky-size-end": { + "type": "number|string", + "description": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision" + }, + "q-select/table-colspan": { + "type": "number|string", + "description": "The number of columns in the table (you need this if you use table-layout: fixed)" + }, + "q-select/error": { + "type": "boolean", + "description": "Does field have validation errors?" + }, + "q-select/error-message": { + "type": "string", + "description": "Validation error message (gets displayed only if 'error' is set to 'true')" + }, + "q-select/no-error-icon": { + "type": "boolean", + "description": "Hide error icon when there is an error" + }, + "q-select/rules": { + "type": "array", + "description": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules" + }, + "q-select/reactive-rules": { + "type": "boolean", + "description": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it" + }, + "q-select/lazy-rules": { + "type": "boolean|string", + "description": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself" + }, + "q-select/label": { + "type": "string", + "description": "A text label that will “float” up above the input field, once the field gets focus" + }, + "q-select/stack-label": { + "type": "boolean", + "description": "Label will be always shown above the field regardless of field content (if any)" + }, + "q-select/hint": { + "type": "string", + "description": "Helper (hint) text which gets placed below your wrapped form component" + }, + "q-select/hide-hint": { + "type": "boolean", + "description": "Hide the helper (hint) text when field doesn't have focus" + }, + "q-select/prefix": { + "type": "string", + "description": "Prefix" + }, + "q-select/suffix": { + "type": "string", + "description": "Suffix" + }, + "q-select/label-color": { + "type": "string", + "description": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused" + }, + "q-select/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-select/bg-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-select/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-select/loading": { + "type": "boolean", + "description": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot." + }, + "q-select/clearable": { + "type": "boolean", + "description": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null" + }, + "q-select/clear-icon": { + "type": "string", + "description": "Custom icon to use for the clear button when using along with 'clearable' prop" + }, + "q-select/filled": { + "type": "boolean", + "description": "Use 'filled' design for the field" + }, + "q-select/outlined": { + "type": "boolean", + "description": "Use 'outlined' design for the field" + }, + "q-select/outlined-md": { + "type": "boolean", + "description": "Use Material Design 'outlined' design for the field" + }, + "q-select/borderless": { + "type": "boolean", + "description": "Use 'borderless' design for the field" + }, + "q-select/standout": { + "type": "boolean|string", + "description": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)" + }, + "q-select/label-slot": { + "type": "boolean", + "description": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set" + }, + "q-select/bottom-slots": { + "type": "boolean", + "description": "Enables bottom slots ('error', 'hint', 'counter')" + }, + "q-select/hide-bottom-space": { + "type": "boolean", + "description": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content" + }, + "q-select/counter": { + "type": "boolean", + "description": "Show an automatic counter on bottom right" + }, + "q-select/rounded": { + "type": "boolean", + "description": "Applies a small standard border-radius for a squared shape of the component" + }, + "q-select/square": { + "type": "boolean", + "description": "Remove border-radius so borders are squared; Overrides 'rounded' prop" + }, + "q-select/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-select/item-aligned": { + "type": "boolean", + "description": "Match inner content alignment to that of QItem" + }, + "q-select/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-select/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-select/autofocus": { + "type": "boolean", + "description": "Focus field on initial component render" + }, + "q-select/for": { + "type": "string", + "description": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well" + }, + "q-select/value": { + "type": "number|string|array", + "description": "Model of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-select/multiple": { + "type": "boolean", + "description": "Allow multiple selection; Model must be Array" + }, + "q-select/display-value": { + "type": "number|string", + "description": "Override default selection string, if not using 'selected' slot/scoped slot and if not using 'use-chips' prop" + }, + "q-select/display-value-sanitize": { + "type": "boolean", + "description": "Force use of textContent instead of innerHTML to render selected option(s); Use it when the selected option(s) might be unsafe (from user input); Does NOT apply when using 'selected' or 'selected-item' slots!" + }, + "q-select/options": { + "type": "array", + "description": "Available options that the user can select from. For best performance freeze the list of options." + }, + "q-select/option-value": { + "type": "function|string", + "description": "Property of option which holds the 'value'; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-select/option-label": { + "type": "function|string", + "description": "Property of option which holds the 'label'; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-select/option-disable": { + "type": "function|string", + "description": "Property of option which tells it's disabled; The value of the property must be a Boolean; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-select/hide-selected": { + "type": "boolean", + "description": "Hides selection; Use the underlying input tag to hold the label (instead of showing it to the right of the input) of the selected option; Only works for non 'multiple' Selects" + }, + "q-select/hide-dropdown-icon": { + "type": "boolean", + "description": "Hides dropdown icon" + }, + "q-select/dropdown-icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-select/max-values": { + "type": "number|string", + "description": "Allow a maximum number of selections that the user can do" + }, + "q-select/options-dense": { + "type": "boolean", + "description": "Dense mode for options list; occupies less space" + }, + "q-select/options-dark": { + "type": "boolean", + "description": "Options menu will be colored with a dark color" + }, + "q-select/options-selected-class": { + "type": "string", + "description": "CSS class name for options that are active/selected; Set it to an empty string to stop applying the default (which is text-* where * is the 'color' prop value)" + }, + "q-select/options-sanitize": { + "type": "boolean", + "description": "Force use of textContent instead of innerHTML to render options; Use it when the options might be unsafe (from user input); Does NOT apply when using 'option' slot!" + }, + "q-select/options-cover": { + "type": "boolean", + "description": "Expanded menu will cover the component (will not work along with 'use-input' prop for obvious reasons)" + }, + "q-select/menu-shrink": { + "type": "boolean", + "description": "Allow the options list to be narrower than the field (only in menu mode)" + }, + "q-select/menu-anchor": { + "type": "string", + "description": "Two values setting the starting position or anchor point of the options list relative to the field (only in menu mode)" + }, + "q-select/menu-self": { + "type": "string", + "description": "Two values setting the options list's own position relative to its target (only in menu mode)" + }, + "q-select/menu-offset": { + "type": "array", + "description": "An array of two numbers to offset the options list horizontally and vertically in pixels (only in menu mode)" + }, + "q-select/popup-content-class": { + "type": "string", + "description": "Class definitions to be attributed to the popup content" + }, + "q-select/popup-content-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the popup content" + }, + "q-select/dialog-content-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the dialog external element" + }, + "q-select/dialog-content-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the dialog external element" + }, + "q-select/dialog-close-icon": { + "type": "boolean|string", + "description": "Style definitions to be attributed to the dialog external element" + }, + "q-select/use-input": { + "type": "boolean", + "description": "Use an input tag where users can type" + }, + "q-select/use-chips": { + "type": "boolean", + "description": "Use QChip to show what is currently selected" + }, + "q-select/fill-input": { + "type": "boolean", + "description": "Fills the input with current value; Useful along with 'hide-selected'; Does NOT works along with 'multiple' selection" + }, + "q-select/new-value-mode": { + "type": "string", + "description": "Enables creation of new values and defines behavior when a new value is added: 'add' means it adds the value (even if possible duplicate), 'add-unique' adds only unique values, and 'toggle' adds or removes the value (based on if it exists or not already); When using this prop then listening for @new-value becomes optional (only to override the behavior defined by 'new-value-mode')" + }, + "q-select/map-options": { + "type": "boolean", + "description": "Try to map labels of model from 'options' Array; has a small performance penalty; If you are using emit-value you will probably need to use map-options to display the label text in the select field rather than the value; Refer to the 'Affecting model' section above" + }, + "q-select/emit-value": { + "type": "boolean", + "description": "Update model with the value of the selected option instead of the whole option" + }, + "q-select/input-debounce": { + "type": "number|string", + "description": "Debounce the input model update with an amount of milliseconds" + }, + "q-select/input-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the underlying input tag" + }, + "q-select/input-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the underlying input tag" + }, + "q-select/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-select/autocomplete": { + "type": "string", + "description": "Autocomplete attribute for field" + }, + "q-select/transition-show": { + "type": "string", + "description": "Transition when showing the menu/dialog; One of Quasar's embedded transitions" + }, + "q-select/transition-hide": { + "type": "string", + "description": "Transition when hiding the menu/dialog; One of Quasar's embedded transitions" + }, + "q-select/behavior": { + "type": "string", + "description": "Overrides the default dynamic mode of showing as menu on desktop and dialog on mobiles" + }, + "q-separator/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-separator/spaced": { + "type": "boolean|string", + "description": "If set to true, the corresponding direction margins will be set to 8px; It can also be set to a size in CSS units, including unit name, or one of the xs|sm|md|lg|xl predefined sizes" + }, + "q-separator/inset": { + "type": "boolean|string", + "description": "If set to Boolean true, the left and right margins will be set to 16px. If set to 'item' then it will match a QItem's design. If set to 'item-thumbnail' then it will match the design of a QItem with a thumbnail on the left side" + }, + "q-separator/vertical": { + "type": "boolean", + "description": "If set to true, the separator will be vertical." + }, + "q-separator/size": { + "type": "string", + "description": "Size in CSS units, including unit name" + }, + "q-separator/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-skeleton/tag": { + "type": "string", + "description": "HTML tag to render" + }, + "q-skeleton/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-skeleton/type": { + "type": "string", + "description": "Type of skeleton placeholder" + }, + "q-skeleton/animation": { + "type": "string", + "description": "The animation effect of the skeleton placeholder" + }, + "q-skeleton/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-skeleton/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-skeleton/size": { + "type": "string", + "description": "Size in CSS units, including unit name; Overrides 'height' and 'width' props and applies the value to both height and width" + }, + "q-skeleton/width": { + "type": "string", + "description": "Width in CSS units, including unit name; Apply custom width; Use this prop or through CSS; Overridden by 'size' prop if used" + }, + "q-skeleton/height": { + "type": "string", + "description": "Height in CSS units, including unit name; Apply custom height; Use this prop or through CSS; Overridden by 'size' prop if used" + }, + "q-slide-item/left-color": { + "type": "string", + "description": "Color name for left-side background from the Quasar Color Palette" + }, + "q-slide-item/right-color": { + "type": "string", + "description": "Color name for right-side background from the Quasar Color Palette" + }, + "q-slide-item/top-color": { + "type": "string", + "description": "Color name for top-side background from the Quasar Color Palette" + }, + "q-slide-item/bottom-color": { + "type": "string", + "description": "Color name for bottom-side background from the Quasar Color Palette" + }, + "q-slide-item/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-slide-transition/appear": { + "type": "boolean", + "description": "If set to true, the transition will be applied on the initial render." + }, + "q-slide-transition/duration": { + "type": "number", + "description": "Duration (in milliseconds) enabling animated scroll." + }, + "q-slider/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-slider/min": { + "type": "number", + "description": "Minimum value of the model; Set track's minimum value" + }, + "q-slider/max": { + "type": "number", + "description": "Maximum value of the model; Set track's maximum value" + }, + "q-slider/inner-min": { + "type": "number", + "description": "Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop" + }, + "q-slider/inner-max": { + "type": "number", + "description": "Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop" + }, + "q-slider/step": { + "type": "number", + "description": "Specify step amount between valid values (> 0.0); When step equals to 0 it defines infinite granularity" + }, + "q-slider/snap": { + "type": "boolean", + "description": "Snap on valid values, rather than sliding freely; Suggestion: use with 'step' prop" + }, + "q-slider/reverse": { + "type": "boolean", + "description": "Work in reverse (changes direction)" + }, + "q-slider/vertical": { + "type": "boolean", + "description": "Display in vertical direction" + }, + "q-slider/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-slider/track-color": { + "type": "string", + "description": "Color name for the track (can be 'transparent' too) from the Quasar Color Palette" + }, + "q-slider/track-img": { + "type": "string", + "description": "Apply a pattern image on the track" + }, + "q-slider/inner-track-color": { + "type": "string", + "description": "Color name for the inner track (can be 'transparent' too) from the Quasar Color Palette" + }, + "q-slider/inner-track-img": { + "type": "string", + "description": "Apply a pattern image on the inner track" + }, + "q-slider/selection-color": { + "type": "string", + "description": "Color name for the selection bar (can be 'transparent' too) from the Quasar Color Palette" + }, + "q-slider/selection-img": { + "type": "string", + "description": "Apply a pattern image on the selection bar" + }, + "q-slider/label": { + "type": "boolean", + "description": "Popup a label when user clicks/taps on the slider thumb and moves it" + }, + "q-slider/label-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-slider/label-text-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-slider/switch-label-side": { + "type": "boolean", + "description": "Switch the position of the label (top <-> bottom or left <-> right)" + }, + "q-slider/label-always": { + "type": "boolean", + "description": "Always display the label" + }, + "q-slider/markers": { + "type": "boolean|number", + "description": "Display markers on the track, one for each possible value for the model or using a custom step (when specifying a Number)" + }, + "q-slider/marker-labels": { + "type": "boolean|array|object|function", + "description": "Configure the marker labels (or show the default ones if 'true'); Array of definition Objects or Object with key-value where key is the model and the value is the marker label definition" + }, + "q-slider/marker-labels-class": { + "type": "string", + "description": "CSS class(es) to apply to the marker labels container" + }, + "q-slider/switch-marker-labels-side": { + "type": "boolean", + "description": "Switch the position of the marker labels (top <-> bottom or left <-> right)" + }, + "q-slider/track-size": { + "type": "string", + "description": "Track size (including CSS unit)" + }, + "q-slider/thumb-size": { + "type": "string", + "description": "Thumb size (including CSS unit)" + }, + "q-slider/thumb-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-slider/thumb-path": { + "type": "string", + "description": "Set custom thumb svg path" + }, + "q-slider/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-slider/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-slider/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-slider/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-slider/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-slider/value": { + "type": "number", + "description": "Model of the component (must be between min/max); Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-slider/label-value": { + "type": "string|number", + "description": "Override default label value" + }, + "q-spinner/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner/thickness": { + "type": "number", + "description": "Override value to use for stroke-width" + }, + "q-spinner-audio/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-audio/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-ball/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-ball/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-bars/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-bars/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-box/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-box/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-clock/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-clock/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-comment/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-comment/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-cube/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-cube/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-dots/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-dots/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-facebook/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-facebook/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-gears/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-gears/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-grid/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-grid/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-hearts/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-hearts/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-hourglass/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-hourglass/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-infinity/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-infinity/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-ios/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-ios/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-orbit/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-orbit/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-oval/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-oval/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-pie/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-pie/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-puff/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-puff/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-radio/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-radio/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-rings/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-rings/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-spinner-tail/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-spinner-tail/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-splitter/value": { + "type": "number", + "description": "Model of the component defining the size of first panel (or second if using reverse) in the unit specified (for '%' it's the split ratio percent - 0.0 < x < 100.0; for 'px' it's the size in px); Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-splitter/reverse": { + "type": "boolean", + "description": "Apply the model size to the second panel (by default it applies to the first)" + }, + "q-splitter/unit": { + "type": "string", + "description": "CSS unit for the model" + }, + "q-splitter/emit-immediately": { + "type": "boolean", + "description": "Emit model while user is panning on the separator" + }, + "q-splitter/horizontal": { + "type": "boolean", + "description": "Allows the splitter to split its two panels horizontally, instead of vertically" + }, + "q-splitter/limits": { + "type": "array", + "description": "An array of two values representing the minimum and maximum split size of the two panels; When 'px' unit is set then you can use Infinity as the second value to make it unbound on the other side" + }, + "q-splitter/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-splitter/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-splitter/before-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the 'before' panel" + }, + "q-splitter/after-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the 'after' panel" + }, + "q-splitter/separator-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the splitter separator" + }, + "q-splitter/separator-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the splitter separator" + }, + "q-splitter/dark": { + "type": "boolean", + "description": "Applies a default lighter color on the separator; To be used when background is darker; Avoid using when you are overriding through separator-class or separator-style props" + }, + "q-step/name": { + "type": "any", + "description": "Panel name" + }, + "q-step/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-step/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-step/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-step/title": { + "type": "string", + "description": "Step title" + }, + "q-step/caption": { + "type": "string", + "description": "Step’s additional information that appears beneath the title" + }, + "q-step/prefix": { + "type": "string|number", + "description": "Step's prefix (max 2 characters) which replaces the icon if the step is not currently active and it isn't marked with error or as 'done', or if the specific icon for the state is 'none'" + }, + "q-step/done-icon": { + "type": "string", + "description": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-step/done-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-step/active-icon": { + "type": "string", + "description": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-step/active-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-step/error-icon": { + "type": "string", + "description": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-step/error-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-step/header-nav": { + "type": "boolean", + "description": "Allow navigation through the header" + }, + "q-step/done": { + "type": "boolean", + "description": "Mark the step as 'done'" + }, + "q-step/error": { + "type": "boolean", + "description": "Mark the step as having an error" + }, + "q-stepper/value": { + "type": "any", + "description": "Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive." + }, + "q-stepper/keep-alive": { + "type": "boolean", + "description": "Equivalent to using Vue's native component on the content" + }, + "q-stepper/keep-alive-include": { + "type": "string|array|regexp", + "description": "Equivalent to using Vue's native include prop for ; Values must be valid Vue component names" + }, + "q-stepper/keep-alive-exclude": { + "type": "string|array|regexp", + "description": "Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names" + }, + "q-stepper/keep-alive-max": { + "type": "number", + "description": "Equivalent to using Vue's native max prop for " + }, + "q-stepper/animated": { + "type": "boolean", + "description": "Enable transitions between panel (also see 'transition-prev' and 'transition-next' props)" + }, + "q-stepper/infinite": { + "type": "boolean", + "description": "Makes component appear as infinite (when reaching last panel, next one will become the first one)" + }, + "q-stepper/swipeable": { + "type": "boolean", + "description": "Enable swipe events (may interfere with content's touch/mouse events)" + }, + "q-stepper/vertical": { + "type": "boolean", + "description": "Put Stepper in vertical mode (instead of horizontal by default)" + }, + "q-stepper/transition-prev": { + "type": "string", + "description": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)" + }, + "q-stepper/transition-next": { + "type": "string", + "description": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)" + }, + "q-stepper/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-stepper/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-stepper/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-stepper/alternative-labels": { + "type": "boolean", + "description": "Use alternative labels - stacks the icon on top of the label (applies only to horizontal stepper)" + }, + "q-stepper/header-nav": { + "type": "boolean", + "description": "Allow navigation through the header" + }, + "q-stepper/contracted": { + "type": "boolean", + "description": "Hide header labels on narrow windows" + }, + "q-stepper/inactive-icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-stepper/inactive-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-stepper/done-icon": { + "type": "string", + "description": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-stepper/done-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-stepper/active-icon": { + "type": "string", + "description": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-stepper/active-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-stepper/error-icon": { + "type": "string", + "description": "Icon name following Quasar convention; If 'none' (String) is used as value, then it will defer to prefix or the regular icon for this state; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-stepper/error-color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-stepper/header-class": { + "type": "string", + "description": "Class definitions to be attributed to the header" + }, + "q-tab-panel/name": { + "type": "any", + "description": "Panel name" + }, + "q-tab-panel/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-tab-panel/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-tab-panels/value": { + "type": "any", + "description": "Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive." + }, + "q-tab-panels/keep-alive": { + "type": "boolean", + "description": "Equivalent to using Vue's native component on the content" + }, + "q-tab-panels/keep-alive-include": { + "type": "string|array|regexp", + "description": "Equivalent to using Vue's native include prop for ; Values must be valid Vue component names" + }, + "q-tab-panels/keep-alive-exclude": { + "type": "string|array|regexp", + "description": "Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names" + }, + "q-tab-panels/keep-alive-max": { + "type": "number", + "description": "Equivalent to using Vue's native max prop for " + }, + "q-tab-panels/animated": { + "type": "boolean", + "description": "Enable transitions between panel (also see 'transition-prev' and 'transition-next' props)" + }, + "q-tab-panels/infinite": { + "type": "boolean", + "description": "Makes component appear as infinite (when reaching last panel, next one will become the first one)" + }, + "q-tab-panels/swipeable": { + "type": "boolean", + "description": "Enable swipe events (may interfere with content's touch/mouse events)" + }, + "q-tab-panels/vertical": { + "type": "boolean", + "description": "Default transitions and swipe actions will be on the vertical axis" + }, + "q-tab-panels/transition-prev": { + "type": "string", + "description": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)" + }, + "q-tab-panels/transition-next": { + "type": "string", + "description": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)" + }, + "q-table/fullscreen": { + "type": "boolean", + "description": "Fullscreen mode" + }, + "q-table/no-route-fullscreen-exit": { + "type": "boolean", + "description": "Changing route app won't exit fullscreen" + }, + "q-table/data": { + "type": "array", + "description": "Rows of data to display" + }, + "q-table/row-key": { + "type": "string|function", + "description": "Property of each row that defines the unique key of each row (the result must be a primitive, not Object, Array, etc); The value of property must be string or a function taking a row and returning the desired (nested) key in the row; If supplying a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-table/virtual-scroll": { + "type": "boolean", + "description": "Display data using QVirtualScroll (for non-grid mode only)" + }, + "q-table/virtual-scroll-slice-size": { + "type": "number|string", + "description": "Minimum number of rows to render in the virtual list" + }, + "q-table/virtual-scroll-slice-ratio-before": { + "type": "number|string", + "description": "Ratio of number of rows in visible zone to render before it" + }, + "q-table/virtual-scroll-slice-ratio-after": { + "type": "number|string", + "description": "Ratio of number of rows in visible zone to render after it" + }, + "q-table/virtual-scroll-item-size": { + "type": "number|string", + "description": "Default size in pixels of a row; This value is used for rendering the initial table; Try to use a value close to the minimum size of a row" + }, + "q-table/virtual-scroll-sticky-size-start": { + "type": "number|string", + "description": "Size in pixels of the sticky header (if using one); A correct value will improve scroll precision; Will be also used for non-virtual-scroll tables for fixing top alignment when using scrollTo method" + }, + "q-table/virtual-scroll-sticky-size-end": { + "type": "number|string", + "description": "Size in pixels of the sticky footer part (if using one); A correct value will improve scroll precision" + }, + "q-table/table-colspan": { + "type": "number|string", + "description": "The number of columns in the table (you need this if you use table-layout: fixed)" + }, + "q-table/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-table/icon-first-page": { + "type": "string", + "description": "Icon name following Quasar convention for stepping to first page; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-table/icon-prev-page": { + "type": "string", + "description": "Icon name following Quasar convention for stepping to previous page; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-table/icon-next-page": { + "type": "string", + "description": "Icon name following Quasar convention for stepping to next page; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-table/icon-last-page": { + "type": "string", + "description": "Icon name following Quasar convention for stepping to last page; Make sure you have the icon library installed unless you are using 'img:' prefix" + }, + "q-table/grid": { + "type": "boolean", + "description": "Display data as a grid instead of the default table" + }, + "q-table/grid-header": { + "type": "boolean", + "description": "Display header for grid-mode also" + }, + "q-table/dense": { + "type": "boolean", + "description": "Dense mode; Connect with $q.screen for responsive behavior" + }, + "q-table/columns": { + "type": "array", + "description": "The column definitions (Array of Objects)" + }, + "q-table/visible-columns": { + "type": "array", + "description": "Array of Strings defining column names ('name' property of each column from 'columns' prop definitions); Columns marked as 'required' are not affected by this property" + }, + "q-table/loading": { + "type": "boolean", + "description": "Put Table into 'loading' state; Notify the user something is happening behind the covers" + }, + "q-table/title": { + "type": "string", + "description": "Table title" + }, + "q-table/hide-header": { + "type": "boolean", + "description": "Hide table header layer" + }, + "q-table/hide-bottom": { + "type": "boolean", + "description": "Hide table bottom layer regardless of what it has to display" + }, + "q-table/hide-selected-banner": { + "type": "boolean", + "description": "Hide the selected rows banner (if any)" + }, + "q-table/hide-no-data": { + "type": "boolean", + "description": "Hide the default no data bottom layer" + }, + "q-table/hide-pagination": { + "type": "boolean", + "description": "Hide the pagination controls at the bottom" + }, + "q-table/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-table/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-table/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-table/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-table/separator": { + "type": "string", + "description": "Use a separator/border between rows, columns or all cells" + }, + "q-table/wrap-cells": { + "type": "boolean", + "description": "Wrap text within table cells" + }, + "q-table/binary-state-sort": { + "type": "boolean", + "description": "Skip the third state (unsorted) when user toggles column sort direction" + }, + "q-table/column-sort-order": { + "type": "string", + "description": "Set column sort order: 'ad' (ascending-descending) or 'da' (descending-ascending); It gets applied to all columns unless a column has its own sortOrder specified in the 'columns' definition prop" + }, + "q-table/no-data-label": { + "type": "string", + "description": "Override default text to display when no data is available" + }, + "q-table/no-results-label": { + "type": "string", + "description": "Override default text to display when user filters the table and no matched results are found" + }, + "q-table/loading-label": { + "type": "string", + "description": "Override default text to display when table is in loading state (see 'loading' prop)" + }, + "q-table/selected-rows-label": { + "type": "function", + "description": "Text to display when user selected at least one row; For best performance, reference it from your scope and do not define it inline" + }, + "q-table/rows-per-page-label": { + "type": "string", + "description": "Text to override default rows per page label at bottom of table" + }, + "q-table/pagination-label": { + "type": "function", + "description": "Text to override default pagination label at bottom of table (unless 'pagination' scoped slot is used); For best performance, reference it from your scope and do not define it inline" + }, + "q-table/table-style": { + "type": "string|array|object", + "description": "CSS style to apply to native HTML
Literal notationConstructor
element's wrapper (which is a DIV)" + }, + "q-table/table-class": { + "type": "string|array|object", + "description": "CSS classes to apply to native HTML
element's wrapper (which is a DIV)" + }, + "q-table/table-header-style": { + "type": "string|array|object", + "description": "CSS style to apply to header of native HTML
(which is a TR)" + }, + "q-table/table-header-class": { + "type": "string|array|object", + "description": "CSS classes to apply to header of native HTML
(which is a TR)" + }, + "q-table/card-container-style": { + "type": "string|array|object", + "description": "CSS style to apply to the cards container (when in grid mode)" + }, + "q-table/card-container-class": { + "type": "string|array|object", + "description": "CSS classes to apply to the cards container (when in grid mode)" + }, + "q-table/card-style": { + "type": "string|array|object", + "description": "CSS style to apply to the card (when in grid mode) or container card (when not in grid mode)" + }, + "q-table/card-class": { + "type": "string|array|object", + "description": "CSS classes to apply to the card (when in grid mode) or container card (when not in grid mode)" + }, + "q-table/title-class": { + "type": "string|array|object", + "description": "CSS classes to apply to the title (if using 'title' prop)" + }, + "q-table/filter": { + "type": "string|object", + "description": "String/Object to filter table with; When using an Object it requires 'filter-method' to also be specified since it will be a custom filtering" + }, + "q-table/filter-method": { + "type": "function", + "description": "The actual filtering mechanism; For best performance, reference it from your scope and do not define it inline" + }, + "q-table/pagination": { + "type": "object", + "description": "Pagination object; You can use the '.sync' modifier on it if you want to have access on the current pagination in your components; When not using the .sync modifier it simply initializes the pagination on first render" + }, + "q-table/rows-per-page-options": { + "type": "array", + "description": "Options for user to pick (Numbers); Number 0 means 'Show all rows in one page'" + }, + "q-table/selection": { + "type": "string", + "description": "Selection type" + }, + "q-table/selected": { + "type": "array", + "description": "Keeps the user selection array" + }, + "q-table/expanded": { + "type": "array", + "description": "Keeps the array with expanded rows keys" + }, + "q-table/sort-method": { + "type": "function", + "description": "The actual sort mechanism. Function (rows, sortBy, descending) => sorted rows; For best performance, reference it from your scope and do not define it inline" + }, + "q-td/props": { + "type": "object", + "description": "QTable's column scoped slot property" + }, + "q-td/auto-width": { + "type": "boolean", + "description": "Tries to shrink column width size; Useful for columns with a checkbox/radio/toggle" + }, + "q-td/no-hover": { + "type": "boolean", + "description": "Disable hover effect" + }, + "q-th/props": { + "type": "object", + "description": "QTable's header column scoped slot property" + }, + "q-th/auto-width": { + "type": "boolean", + "description": "Tries to shrink header column width size; Useful for columns with a checkbox/radio/toggle" + }, + "q-tr/props": { + "type": "object", + "description": "QTable's row scoped slot property" + }, + "q-tr/no-hover": { + "type": "boolean", + "description": "Disable hover effect" + }, + "q-route-tab/to": { + "type": "string|object", + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used" + }, + "q-route-tab/exact": { + "type": "boolean", + "description": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used" + }, + "q-route-tab/append": { + "type": "boolean", + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used" + }, + "q-route-tab/replace": { + "type": "boolean", + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used" + }, + "q-route-tab/active-class": { + "type": "string", + "description": "Equivalent to Vue Router 'active-class' property" + }, + "q-route-tab/exact-active-class": { + "type": "string", + "description": "Equivalent to Vue Router 'active-class' property" + }, + "q-route-tab/href": { + "type": "string", + "description": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props" + }, + "q-route-tab/target": { + "type": "string", + "description": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props" + }, + "q-route-tab/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-route-tab/ripple": { + "type": "boolean|object", + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)" + }, + "q-route-tab/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-route-tab/label": { + "type": "number|string", + "description": "A number or string to label the tab" + }, + "q-route-tab/alert": { + "type": "boolean|string", + "description": "Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color" + }, + "q-route-tab/alert-icon": { + "type": "string", + "description": "Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop" + }, + "q-route-tab/name": { + "type": "number|string", + "description": "Panel name" + }, + "q-route-tab/no-caps": { + "type": "boolean", + "description": "Turns off capitalizing all letters within the tab (which is the default)" + }, + "q-route-tab/content-class": { + "type": "string", + "description": "Class definitions to be attributed to the content wrapper" + }, + "q-route-tab/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-tab/ripple": { + "type": "boolean|object", + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)" + }, + "q-tab/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-tab/label": { + "type": "number|string", + "description": "A number or string to label the tab" + }, + "q-tab/alert": { + "type": "boolean|string", + "description": "Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color" + }, + "q-tab/alert-icon": { + "type": "string", + "description": "Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop" + }, + "q-tab/name": { + "type": "number|string", + "description": "Panel name" + }, + "q-tab/no-caps": { + "type": "boolean", + "description": "Turns off capitalizing all letters within the tab (which is the default)" + }, + "q-tab/content-class": { + "type": "string", + "description": "Class definitions to be attributed to the content wrapper" + }, + "q-tab/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-tab/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-tabs/value": { + "type": "number|string", + "description": "Model of the component defining current panel name; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-tabs/vertical": { + "type": "boolean", + "description": "Use vertical design (tabs one on top of each other rather than one next to the other horizontally)" + }, + "q-tabs/outside-arrows": { + "type": "boolean", + "description": "Reserve space for arrows to place them on each side of the tabs (the arrows fade when inactive)" + }, + "q-tabs/mobile-arrows": { + "type": "boolean", + "description": "Force display of arrows (if needed) on mobile" + }, + "q-tabs/align": { + "type": "string", + "description": "Horizontal alignment the tabs within the tabs container" + }, + "q-tabs/breakpoint": { + "type": "number|string", + "description": "Breakpoint (in pixels) of tabs container width at which the tabs automatically turn to a justify alignment" + }, + "q-tabs/active-class": { + "type": "string", + "description": "The class to be set on the active tab" + }, + "q-tabs/active-color": { + "type": "string", + "description": "The color to be attributed to the text of the active tab" + }, + "q-tabs/active-bg-color": { + "type": "string", + "description": "The color to be attributed to the background of the active tab" + }, + "q-tabs/indicator-color": { + "type": "string", + "description": "The color to be attributed to the indicator (the underline) of the active tab" + }, + "q-tabs/content-class": { + "type": "string", + "description": "Class definitions to be attributed to the content wrapper" + }, + "q-tabs/left-icon": { + "type": "string", + "description": "The name of an icon to replace the default arrow used to scroll through the tabs to the left, when the tabs extend past the width of the tabs container" + }, + "q-tabs/right-icon": { + "type": "string", + "description": "The name of an icon to replace the default arrow used to scroll through the tabs to the right, when the tabs extend past the width of the tabs container" + }, + "q-tabs/stretch": { + "type": "boolean", + "description": "When used on flexbox parent, tabs will stretch to parent's height" + }, + "q-tabs/shrink": { + "type": "boolean", + "description": "By default, QTabs is set to grow to the available space; However, you can reverse that with this prop; Useful (and required) when placing the component in a QToolbar" + }, + "q-tabs/switch-indicator": { + "type": "boolean", + "description": "Switches the indicator position (on left of tab for vertical mode or above the tab for default horizontal mode)" + }, + "q-tabs/narrow-indicator": { + "type": "boolean", + "description": "Allows the indicator to be the same width as the tab's content (text or icon), instead of the whole width of the tab" + }, + "q-tabs/inline-label": { + "type": "boolean", + "description": "Allows the text to be inline with the icon, should one be used" + }, + "q-tabs/no-caps": { + "type": "boolean", + "description": "Turns off capitalizing all letters within the tab (which is the default)" + }, + "q-tabs/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-time/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-time/value": { + "type": "string", + "description": "Time of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-time/landscape": { + "type": "boolean", + "description": "Display the component in landscape mode" + }, + "q-time/mask": { + "type": "string", + "description": "Mask (formatting string) used for parsing and formatting value" + }, + "q-time/locale": { + "type": "object", + "description": "Locale formatting options" + }, + "q-time/calendar": { + "type": "string", + "description": "Specify calendar type" + }, + "q-time/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-time/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-time/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-time/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-time/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-time/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-time/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-time/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-time/format24h": { + "type": "boolean", + "description": "Forces 24 hour time display instead of AM/PM system" + }, + "q-time/default-date": { + "type": "string", + "description": "The default date to use (in YYYY/MM/DD format) when model is unfilled (undefined or null)" + }, + "q-time/options": { + "type": "function", + "description": "Optionally configure what time is the user allowed to set; Overridden by 'hour-options', 'minute-options' and 'second-options' if those are set; For best performance, reference it from your scope and do not define it inline" + }, + "q-time/hour-options": { + "type": "array", + "description": "Optionally configure what hours is the user allowed to set; Overrides 'options' prop if that is also set" + }, + "q-time/minute-options": { + "type": "array", + "description": "Optionally configure what minutes is the user allowed to set; Overrides 'options' prop if that is also set" + }, + "q-time/second-options": { + "type": "array", + "description": "Optionally configure what seconds is the user allowed to set; Overrides 'options' prop if that is also set" + }, + "q-time/with-seconds": { + "type": "boolean", + "description": "Allow the time to be set with seconds" + }, + "q-time/now-btn": { + "type": "boolean", + "description": "Display a button that selects the current time" + }, + "q-timeline/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-timeline/side": { + "type": "string", + "description": "Side to place the timeline entries in dense and comfortable layout; For loose layout it gets overridden by QTimelineEntry side prop" + }, + "q-timeline/layout": { + "type": "string", + "description": "Layout of the timeline. Dense keeps content and labels on one side. Comfortable keeps content on one side and labels on the opposite side. Loose puts content on both sides." + }, + "q-timeline/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-timeline-entry/tag": { + "type": "string", + "description": "Tag to use, if of type 'heading' only" + }, + "q-timeline-entry/heading": { + "type": "boolean", + "description": "Defines a heading timeline item" + }, + "q-timeline-entry/side": { + "type": "string", + "description": "Side to place the timeline entry; Works only if QTimeline layout is loose." + }, + "q-timeline-entry/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-timeline-entry/avatar": { + "type": "string", + "description": "URL to the avatar image; Icon takes precedence if used, so it replaces avatar" + }, + "q-timeline-entry/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-timeline-entry/title": { + "type": "string", + "description": "Title of timeline entry; Is overridden if using 'title' slot" + }, + "q-timeline-entry/subtitle": { + "type": "string", + "description": "Subtitle of timeline entry; Is overridden if using 'subtitle' slot" + }, + "q-timeline-entry/body": { + "type": "string", + "description": "Body content of timeline entry; Use this prop or the default slot" + }, + "q-toggle/name": { + "type": "string", + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL" + }, + "q-toggle/size": { + "type": "string", + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)" + }, + "q-toggle/value": { + "type": "any|array", + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-toggle/val": { + "type": "any", + "description": "Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked" + }, + "q-toggle/true-value": { + "type": "any", + "description": "What model value should be considered as checked/ticked/on?" + }, + "q-toggle/false-value": { + "type": "any", + "description": "What model value should be considered as unchecked/unticked/off?" + }, + "q-toggle/indeterminate-value": { + "type": "any", + "description": "What model value should be considered as 'indeterminate'?" + }, + "q-toggle/toggle-order": { + "type": "string", + "description": "Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ..." + }, + "q-toggle/toggle-indeterminate": { + "type": "boolean", + "description": "When user clicks/taps on the component, should we toggle through the indeterminate state too?" + }, + "q-toggle/label": { + "type": "string", + "description": "Label to display along the component (or use the default slot instead of this prop)" + }, + "q-toggle/left-label": { + "type": "boolean", + "description": "Label (if any specified) should be displayed on the left side of the component" + }, + "q-toggle/checked-icon": { + "type": "string", + "description": "The icon to be used when the toggle is on" + }, + "q-toggle/unchecked-icon": { + "type": "string", + "description": "The icon to be used when the toggle is off" + }, + "q-toggle/indeterminate-icon": { + "type": "string", + "description": "The icon to be used when the model is indeterminate" + }, + "q-toggle/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-toggle/keep-color": { + "type": "boolean", + "description": "Should the color (if specified any) be kept when the component is unticked/ off?" + }, + "q-toggle/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-toggle/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-toggle/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-toggle/tabindex": { + "type": "number|string", + "description": "Tabindex HTML attribute value" + }, + "q-toggle/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-toggle/icon-color": { + "type": "string", + "description": "Override default icon color (for truthy state only); Color name for component from the Quasar Color Palette" + }, + "q-toolbar/inset": { + "type": "boolean", + "description": "Apply an inset to content (useful for subsequent toolbars)" + }, + "q-toolbar-title/shrink": { + "type": "boolean", + "description": "By default, QToolbarTitle is set to grow to the available space. However, you can reverse that with this prop" + }, + "q-tooltip/content-class": { + "type": "array|string|object", + "description": "Class definitions to be attributed to the content" + }, + "q-tooltip/content-style": { + "type": "array|string|object", + "description": "Style definitions to be attributed to the content" + }, + "q-tooltip/value": { + "type": "boolean", + "description": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive" + }, + "q-tooltip/min-height": { + "type": "string", + "description": "The minimum height of the Tooltip; Size in CSS units, including unit name" + }, + "q-tooltip/min-width": { + "type": "string", + "description": "The minimum width of the Tooltip; Size in CSS units, including unit name" + }, + "q-tooltip/max-height": { + "type": "string", + "description": "The maximum height of the Tooltip; Size in CSS units, including unit name" + }, + "q-tooltip/max-width": { + "type": "string", + "description": "The maximum width of the Tooltip; Size in CSS units, including unit name" + }, + "q-tooltip/transition-show": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-tooltip/transition-hide": { + "type": "string", + "description": "One of Quasar's embedded transitions" + }, + "q-tooltip/anchor": { + "type": "string", + "description": "Two values setting the starting position or anchor point of the Tooltip relative to its target" + }, + "q-tooltip/self": { + "type": "string", + "description": "Two values setting the Tooltip's own position relative to its target" + }, + "q-tooltip/offset": { + "type": "array", + "description": "An array of two numbers to offset the Tooltip horizontally and vertically in pixels" + }, + "q-tooltip/scroll-target": { + "type": "element|string", + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one" + }, + "q-tooltip/target": { + "type": "boolean|string", + "description": "Configure a target element to trigger Tooltip toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) it attaches the events to the specified DOM element (if it exists)" + }, + "q-tooltip/no-parent-event": { + "type": "boolean", + "description": "Skips attaching events to the target DOM element (that trigger the element to get shown)" + }, + "q-tooltip/delay": { + "type": "number", + "description": "Configure Tooltip to appear with delay" + }, + "q-tooltip/hide-delay": { + "type": "number", + "description": "Configure Tooltip to disappear with delay" + }, + "q-tree/nodes": { + "type": "array", + "description": "The array of nodes that designates the tree structure" + }, + "q-tree/node-key": { + "type": "string", + "description": "The property name of each node object that holds a unique node id" + }, + "q-tree/label-key": { + "type": "string", + "description": "The property name of each node object that holds the label of the node" + }, + "q-tree/children-key": { + "type": "string", + "description": "The property name of each node object that holds the list of children of the node" + }, + "q-tree/no-connectors": { + "type": "boolean", + "description": "Do not display the connector lines between nodes" + }, + "q-tree/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-tree/control-color": { + "type": "string", + "description": "Color name for controls (like checkboxes) from the Quasar Color Palette" + }, + "q-tree/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-tree/selected-color": { + "type": "string", + "description": "Color name for selected nodes (from the Quasar Color Palette)" + }, + "q-tree/dense": { + "type": "boolean", + "description": "Dense mode; occupies less space" + }, + "q-tree/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-tree/icon": { + "type": "string", + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)" + }, + "q-tree/tick-strategy": { + "type": "string", + "description": "The type of strategy to use for the selection of the nodes" + }, + "q-tree/ticked": { + "type": "array", + "description": "Keys of nodes that are ticked" + }, + "q-tree/expanded": { + "type": "array", + "description": "Keys of nodes that are expanded" + }, + "q-tree/selected": { + "type": "any", + "description": "Key of node currently selected" + }, + "q-tree/no-selection-unset": { + "type": "boolean", + "description": "Do not allow un-selection when clicking currently selected node" + }, + "q-tree/default-expand-all": { + "type": "boolean", + "description": "Allow the tree to have all its branches expanded, when first rendered" + }, + "q-tree/accordion": { + "type": "boolean", + "description": "Allows the tree to be set in accordion mode" + }, + "q-tree/no-transition": { + "type": "boolean", + "description": "Turn off transition effects when expanding/collapsing nodes; Also enhances perf by a lot as a side-effect; Recommended for big trees" + }, + "q-tree/filter": { + "type": "string", + "description": "The text value to be used for filtering nodes" + }, + "q-tree/filter-method": { + "type": "function", + "description": "The function to use to filter the tree nodes; For best performance, reference it from your scope and do not define it inline" + }, + "q-tree/duration": { + "type": "number", + "description": "Toggle animation duration (in milliseconds)" + }, + "q-tree/no-nodes-label": { + "type": "string", + "description": "Override default such label for when no nodes are available" + }, + "q-tree/no-results-label": { + "type": "string", + "description": "Override default such label for when no nodes are available due to filtering" + }, + "q-uploader/multiple": { + "type": "boolean", + "description": "Allow multiple file uploads" + }, + "q-uploader/accept": { + "type": "string", + "description": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element" + }, + "q-uploader/capture": { + "type": "string", + "description": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element" + }, + "q-uploader/max-file-size": { + "type": "number|string", + "description": "Maximum size of individual file in bytes" + }, + "q-uploader/max-total-size": { + "type": "number|string", + "description": "Maximum size of all files combined in bytes" + }, + "q-uploader/max-files": { + "type": "number|string", + "description": "Maximum number of files to contain" + }, + "q-uploader/filter": { + "type": "function", + "description": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/label": { + "type": "string", + "description": "Label for the uploader" + }, + "q-uploader/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-uploader/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-uploader/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-uploader/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-uploader/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-uploader/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-uploader/no-thumbnails": { + "type": "boolean", + "description": "Don't display thumbnails for image files" + }, + "q-uploader/auto-upload": { + "type": "boolean", + "description": "Upload files immediately when added" + }, + "q-uploader/hide-upload-btn": { + "type": "boolean", + "description": "Don't show the upload button" + }, + "q-uploader/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-uploader/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-uploader/factory": { + "type": "function", + "description": "Function which should return an Object or a Promise resolving with an Object; For best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/url": { + "type": "string|function", + "description": "URL or path to the server which handles the upload. Takes String or factory function, which returns String. Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/method": { + "type": "string|function", + "description": "HTTP method to use for upload; Takes String or factory function which returns a String; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/field-name": { + "type": "string|function", + "description": "Field name for each file upload; This goes into the following header: 'Content-Disposition: form-data; name=\"__HERE__\"; filename=\"somefile.png\"; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/headers": { + "type": "array|function", + "description": "Array or a factory function which returns an array; Array consists of objects with header definitions; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/form-fields": { + "type": "array|function", + "description": "Array or a factory function which returns an array; Array consists of objects with additional fields definitions (used by Form to be uploaded); Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/with-credentials": { + "type": "boolean|function", + "description": "Sets withCredentials to true on the XHR that manages the upload; Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/send-raw": { + "type": "boolean|function", + "description": "Send raw files without wrapping into a Form(); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-uploader/batch": { + "type": "boolean|function", + "description": "Upload files in batch (in one XHR request); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline" + }, + "q-uploader-base/multiple": { + "type": "boolean", + "description": "Allow multiple file uploads" + }, + "q-uploader-base/accept": { + "type": "string", + "description": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element" + }, + "q-uploader-base/capture": { + "type": "string", + "description": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element" + }, + "q-uploader-base/max-file-size": { + "type": "number|string", + "description": "Maximum size of individual file in bytes" + }, + "q-uploader-base/max-total-size": { + "type": "number|string", + "description": "Maximum size of all files combined in bytes" + }, + "q-uploader-base/max-files": { + "type": "number|string", + "description": "Maximum number of files to contain" + }, + "q-uploader-base/filter": { + "type": "function", + "description": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline" + }, + "q-uploader-base/label": { + "type": "string", + "description": "Label for the uploader" + }, + "q-uploader-base/color": { + "type": "string", + "description": "Color name for component from the Quasar Color Palette" + }, + "q-uploader-base/text-color": { + "type": "string", + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette" + }, + "q-uploader-base/dark": { + "type": "boolean", + "description": "Notify the component that the background is a dark color" + }, + "q-uploader-base/square": { + "type": "boolean", + "description": "Removes border-radius so borders are squared" + }, + "q-uploader-base/flat": { + "type": "boolean", + "description": "Applies a 'flat' design (no default shadow)" + }, + "q-uploader-base/bordered": { + "type": "boolean", + "description": "Applies a default border to the component" + }, + "q-uploader-base/no-thumbnails": { + "type": "boolean", + "description": "Don't display thumbnails for image files" + }, + "q-uploader-base/auto-upload": { + "type": "boolean", + "description": "Upload files immediately when added" + }, + "q-uploader-base/hide-upload-btn": { + "type": "boolean", + "description": "Don't show the upload button" + }, + "q-uploader-base/disable": { + "type": "boolean", + "description": "Put component in disabled mode" + }, + "q-uploader-base/readonly": { + "type": "boolean", + "description": "Put component in readonly mode" + }, + "q-video/ratio": { + "type": "string|number", + "description": "Aspect ratio for the content; If value is a String, then avoid using a computational statement (like '16/9') and instead specify the String value of the result directly (eg. '1.7777')" + }, + "q-video/src": { + "type": "string", + "description": "The source url to display in an iframe" + }, + "q-video/title": { + "type": "string", + "description": "(Accessibility) Set the native 'title' attribute value of the inner iframe being used" + }, + "q-video/fetchpriority": { + "type": "string", + "description": "Provides a hint of the relative priority to use when fetching the iframe document" + }, + "q-video/loading": { + "type": "string", + "description": "Indicates how the browser should load the iframe" + }, + "q-video/referrerpolicy": { + "type": "string", + "description": "Indicates which referrer to send when fetching the frame's resource" + }, + "q-virtual-scroll/virtual-scroll-horizontal": { + "type": "boolean", + "description": "Make virtual list work in horizontal mode" + }, + "q-virtual-scroll/virtual-scroll-slice-size": { + "type": "number|string", + "description": "Minimum number of items to render in the virtual list" + }, + "q-virtual-scroll/virtual-scroll-slice-ratio-before": { + "type": "number|string", + "description": "Ratio of number of items in visible zone to render before it" + }, + "q-virtual-scroll/virtual-scroll-slice-ratio-after": { + "type": "number|string", + "description": "Ratio of number of items in visible zone to render after it" + }, + "q-virtual-scroll/virtual-scroll-item-size": { + "type": "number|string", + "description": "Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item" + }, + "q-virtual-scroll/virtual-scroll-sticky-size-start": { + "type": "number|string", + "description": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision" + }, + "q-virtual-scroll/virtual-scroll-sticky-size-end": { + "type": "number|string", + "description": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision" + }, + "q-virtual-scroll/table-colspan": { + "type": "number|string", + "description": "The number of columns in the table (you need this if you use table-layout: fixed)" + }, + "q-virtual-scroll/type": { + "type": "string", + "description": "The type of content: list (default) or table" + }, + "q-virtual-scroll/items": { + "type": "array", + "description": "Available list items that will be passed to the scoped slot; For best performance freeze the list of items; Required if 'itemsFn' is not supplied" + }, + "q-virtual-scroll/items-size": { + "type": "number", + "description": "Number of available items in the list; Required and used only if 'itemsFn' is provided" + }, + "q-virtual-scroll/items-fn": { + "type": "function", + "description": "Function to return the scope for the items to be displayed; Should return an array for items starting from 'from' index for size length; For best performance, reference it from your scope and do not define it inline" + }, + "q-virtual-scroll/scroll-target": { + "type": "element|string", + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one" + } +} \ No newline at end of file diff --git a/dist/vetur/quasar-tags.json b/dist/vetur/quasar-tags.json new file mode 100644 index 00000000000..da84c78d075 --- /dev/null +++ b/dist/vetur/quasar-tags.json @@ -0,0 +1,2110 @@ +{ + "q-ajax-bar": { + "attributes": [ + "position", + "size", + "color", + "reverse", + "skip-hijack", + "hijack-filter" + ], + "description": "" + }, + "q-avatar": { + "attributes": [ + "size", + "font-size", + "color", + "text-color", + "icon", + "square", + "rounded" + ], + "description": "" + }, + "q-badge": { + "attributes": [ + "color", + "text-color", + "floating", + "transparent", + "multi-line", + "label", + "align", + "outline", + "rounded" + ], + "description": "" + }, + "q-banner": { + "attributes": [ + "inline-actions", + "dense", + "rounded", + "dark" + ], + "description": "" + }, + "q-bar": { + "attributes": [ + "dense", + "dark" + ], + "description": "" + }, + "q-breadcrumbs": { + "attributes": [ + "separator", + "active-color", + "gutter", + "separator-color", + "align" + ], + "description": "" + }, + "q-breadcrumbs-el": { + "attributes": [ + "to", + "exact", + "append", + "replace", + "active-class", + "exact-active-class", + "href", + "target", + "disable", + "label", + "icon" + ], + "description": "" + }, + "q-btn-dropdown": { + "attributes": [ + "value", + "size", + "ripple", + "type", + "to", + "replace", + "append", + "href", + "target", + "label", + "icon", + "icon-right", + "outline", + "flat", + "unelevated", + "rounded", + "push", + "square", + "glossy", + "fab", + "fab-mini", + "padding", + "color", + "text-color", + "no-caps", + "no-wrap", + "dense", + "tabindex", + "align", + "stack", + "stretch", + "loading", + "disable", + "split", + "dropdown-icon", + "disable-main-btn", + "disable-dropdown", + "no-icon-animation", + "content-style", + "content-class", + "cover", + "persistent", + "no-route-dismiss", + "auto-close", + "menu-anchor", + "menu-self", + "menu-offset", + "transition-show", + "transition-hide", + "toggle-aria-label" + ], + "description": "" + }, + "q-btn-group": { + "attributes": [ + "spread", + "outline", + "flat", + "unelevated", + "rounded", + "square", + "push", + "stretch", + "glossy" + ], + "description": "" + }, + "q-btn-toggle": { + "attributes": [ + "name", + "ripple", + "value", + "options", + "color", + "text-color", + "toggle-color", + "toggle-text-color", + "spread", + "outline", + "flat", + "unelevated", + "rounded", + "push", + "glossy", + "size", + "padding", + "no-caps", + "no-wrap", + "dense", + "readonly", + "disable", + "stack", + "stretch", + "clearable" + ], + "description": "" + }, + "q-btn": { + "attributes": [ + "size", + "ripple", + "type", + "to", + "replace", + "append", + "href", + "target", + "label", + "icon", + "icon-right", + "outline", + "flat", + "unelevated", + "rounded", + "push", + "square", + "glossy", + "fab", + "fab-mini", + "padding", + "color", + "text-color", + "no-caps", + "no-wrap", + "dense", + "tabindex", + "align", + "stack", + "stretch", + "loading", + "disable", + "round", + "percentage", + "dark-percentage" + ], + "description": "" + }, + "q-card": { + "attributes": [ + "tag", + "dark", + "square", + "flat", + "bordered" + ], + "description": "" + }, + "q-card-actions": { + "attributes": [ + "align", + "vertical" + ], + "description": "" + }, + "q-card-section": { + "attributes": [ + "tag", + "horizontal" + ], + "description": "" + }, + "q-carousel": { + "attributes": [ + "fullscreen", + "no-route-fullscreen-exit", + "value", + "keep-alive", + "keep-alive-include", + "keep-alive-exclude", + "keep-alive-max", + "animated", + "infinite", + "swipeable", + "vertical", + "transition-prev", + "transition-next", + "dark", + "height", + "padding", + "control-color", + "control-text-color", + "control-type", + "autoplay", + "arrows", + "prev-icon", + "next-icon", + "navigation", + "navigation-position", + "navigation-icon", + "navigation-active-icon", + "thumbnails" + ], + "description": "" + }, + "q-carousel-control": { + "attributes": [ + "position", + "offset" + ], + "description": "" + }, + "q-carousel-slide": { + "attributes": [ + "name", + "disable", + "img-src" + ], + "description": "" + }, + "q-chat-message": { + "attributes": [ + "sent", + "label", + "bg-color", + "text-color", + "name", + "avatar", + "text", + "stamp", + "size", + "label-sanitize", + "name-sanitize", + "text-sanitize", + "stamp-sanitize" + ], + "description": "" + }, + "q-checkbox": { + "attributes": [ + "name", + "size", + "value", + "val", + "true-value", + "false-value", + "indeterminate-value", + "toggle-order", + "toggle-indeterminate", + "label", + "left-label", + "checked-icon", + "unchecked-icon", + "indeterminate-icon", + "color", + "keep-color", + "dark", + "dense", + "disable", + "tabindex" + ], + "description": "" + }, + "q-chip": { + "attributes": [ + "ripple", + "dense", + "size", + "dark", + "icon", + "icon-right", + "icon-remove", + "icon-selected", + "label", + "color", + "text-color", + "value", + "selected", + "square", + "outline", + "clickable", + "removable", + "remove-aria-label", + "tabindex", + "disable" + ], + "description": "" + }, + "q-circular-progress": { + "attributes": [ + "size", + "value", + "min", + "max", + "color", + "center-color", + "track-color", + "font-size", + "rounded", + "thickness", + "angle", + "indeterminate", + "show-value", + "reverse", + "instant-feedback" + ], + "description": "" + }, + "q-color": { + "attributes": [ + "name", + "value", + "default-value", + "default-view", + "format-model", + "palette", + "square", + "flat", + "bordered", + "no-header", + "no-header-tabs", + "no-footer", + "disable", + "readonly", + "dark" + ], + "description": "" + }, + "q-date": { + "attributes": [ + "name", + "value", + "landscape", + "mask", + "locale", + "calendar", + "color", + "text-color", + "dark", + "square", + "flat", + "bordered", + "readonly", + "disable", + "title", + "subtitle", + "default-year-month", + "default-view", + "years-in-month-view", + "events", + "event-color", + "options", + "model-navigation", + "navigation-min-year-month", + "navigation-max-year-month", + "no-unset", + "first-day-of-week", + "today-btn", + "minimal", + "multiple", + "range", + "day-as-range", + "emit-immediately" + ], + "description": "" + }, + "q-dialog": { + "attributes": [ + "content-class", + "content-style", + "value", + "persistent", + "no-esc-dismiss", + "no-backdrop-dismiss", + "no-route-dismiss", + "auto-close", + "seamless", + "maximized", + "full-width", + "full-height", + "position", + "transition-show", + "transition-hide", + "square", + "no-refocus", + "no-focus", + "no-shake" + ], + "description": "" + }, + "q-drawer": { + "attributes": [ + "value", + "side", + "overlay", + "width", + "mini", + "mini-width", + "dark", + "mini-to-overlay", + "breakpoint", + "behavior", + "bordered", + "elevated", + "persistent", + "show-if-above", + "content-class", + "content-style", + "no-swipe-open", + "no-swipe-close", + "no-swipe-backdrop" + ], + "description": "" + }, + "q-editor": { + "attributes": [ + "fullscreen", + "no-route-fullscreen-exit", + "value", + "readonly", + "square", + "flat", + "dense", + "dark", + "disable", + "min-height", + "max-height", + "height", + "definitions", + "fonts", + "toolbar", + "toolbar-color", + "toolbar-text-color", + "toolbar-toggle-color", + "toolbar-bg", + "toolbar-outline", + "toolbar-push", + "toolbar-rounded", + "paragraph-tag", + "content-style", + "content-class", + "placeholder" + ], + "description": "" + }, + "q-expansion-item": { + "attributes": [ + "to", + "exact", + "append", + "replace", + "active-class", + "exact-active-class", + "href", + "target", + "disable", + "value", + "icon", + "expand-icon", + "expanded-icon", + "expand-icon-class", + "toggle-aria-label", + "label", + "label-lines", + "caption", + "caption-lines", + "dark", + "dense", + "duration", + "header-inset-level", + "content-inset-level", + "expand-separator", + "default-opened", + "hide-expand-icon", + "expand-icon-toggle", + "switch-toggle-side", + "dense-toggle", + "group", + "popup", + "header-style", + "header-class" + ], + "description": "" + }, + "q-fab": { + "attributes": [ + "type", + "outline", + "push", + "flat", + "unelevated", + "padding", + "color", + "text-color", + "glossy", + "external-label", + "label", + "label-position", + "hide-label", + "label-class", + "label-style", + "square", + "disable", + "tabindex", + "value", + "icon", + "active-icon", + "hide-icon", + "direction", + "vertical-actions-align", + "persistent" + ], + "description": "" + }, + "q-fab-action": { + "attributes": [ + "type", + "outline", + "push", + "flat", + "unelevated", + "padding", + "color", + "text-color", + "glossy", + "external-label", + "label", + "label-position", + "hide-label", + "label-class", + "label-style", + "square", + "disable", + "tabindex", + "icon", + "anchor", + "to", + "replace" + ], + "description": "" + }, + "q-field": { + "attributes": [ + "error", + "error-message", + "no-error-icon", + "rules", + "reactive-rules", + "lazy-rules", + "label", + "stack-label", + "hint", + "hide-hint", + "prefix", + "suffix", + "label-color", + "color", + "bg-color", + "dark", + "loading", + "clearable", + "clear-icon", + "filled", + "outlined", + "outlined-md", + "borderless", + "standout", + "label-slot", + "bottom-slots", + "hide-bottom-space", + "counter", + "rounded", + "square", + "dense", + "item-aligned", + "disable", + "readonly", + "autofocus", + "for", + "name", + "maxlength" + ], + "description": "" + }, + "q-file": { + "attributes": [ + "name", + "multiple", + "accept", + "capture", + "max-file-size", + "max-total-size", + "max-files", + "filter", + "error", + "error-message", + "no-error-icon", + "rules", + "reactive-rules", + "lazy-rules", + "label", + "stack-label", + "hint", + "hide-hint", + "prefix", + "suffix", + "label-color", + "color", + "bg-color", + "dark", + "loading", + "clearable", + "clear-icon", + "filled", + "outlined", + "outlined-md", + "borderless", + "standout", + "label-slot", + "bottom-slots", + "hide-bottom-space", + "counter", + "rounded", + "square", + "dense", + "item-aligned", + "disable", + "readonly", + "autofocus", + "for", + "value", + "append", + "display-value", + "use-chips", + "counter-label", + "tabindex", + "input-class", + "input-style" + ], + "description": "" + }, + "q-footer": { + "attributes": [ + "value", + "reveal", + "bordered", + "elevated", + "height-hint" + ], + "description": "" + }, + "q-form": { + "attributes": [ + "autofocus", + "no-error-focus", + "no-reset-focus", + "greedy" + ], + "description": "" + }, + "q-header": { + "attributes": [ + "value", + "reveal", + "reveal-offset", + "bordered", + "elevated", + "height-hint" + ], + "description": "" + }, + "q-icon": { + "attributes": [ + "tag", + "size", + "name", + "color", + "left", + "right" + ], + "description": "" + }, + "q-img": { + "attributes": [ + "ratio", + "src", + "srcset", + "sizes", + "width", + "height", + "alt", + "placeholder-src", + "basic", + "contain", + "position", + "transition", + "img-class", + "img-style", + "spinner-color", + "spinner-size", + "no-default-spinner", + "native-context-menu" + ], + "description": "" + }, + "q-infinite-scroll": { + "attributes": [ + "offset", + "debounce", + "initial-index", + "scroll-target", + "disable", + "reverse" + ], + "description": "" + }, + "q-inner-loading": { + "attributes": [ + "size", + "showing", + "color", + "label", + "label-class", + "label-style", + "transition-show", + "transition-hide", + "dark" + ], + "description": "" + }, + "q-input": { + "attributes": [ + "name", + "mask", + "fill-mask", + "reverse-fill-mask", + "unmasked-value", + "error", + "error-message", + "no-error-icon", + "rules", + "reactive-rules", + "lazy-rules", + "label", + "stack-label", + "hint", + "hide-hint", + "prefix", + "suffix", + "label-color", + "color", + "bg-color", + "dark", + "loading", + "clearable", + "clear-icon", + "filled", + "outlined", + "outlined-md", + "borderless", + "standout", + "label-slot", + "bottom-slots", + "hide-bottom-space", + "counter", + "rounded", + "square", + "dense", + "item-aligned", + "disable", + "readonly", + "autofocus", + "for", + "value", + "shadow-text", + "type", + "debounce", + "maxlength", + "autogrow", + "input-class", + "input-style" + ], + "description": "" + }, + "q-intersection": { + "attributes": [ + "tag", + "once", + "ssr-prerender", + "root", + "margin", + "threshold", + "transition", + "disable" + ], + "description": "" + }, + "q-item": { + "attributes": [ + "tag", + "to", + "exact", + "append", + "replace", + "active-class", + "exact-active-class", + "href", + "target", + "disable", + "active", + "dark", + "clickable", + "dense", + "inset-level", + "tabindex", + "manual-focus", + "focused" + ], + "description": "" + }, + "q-item-label": { + "attributes": [ + "overline", + "caption", + "header", + "lines" + ], + "description": "" + }, + "q-item-section": { + "attributes": [ + "avatar", + "thumbnail", + "side", + "top", + "no-wrap" + ], + "description": "" + }, + "q-list": { + "attributes": [ + "bordered", + "dense", + "separator", + "dark", + "padding" + ], + "description": "" + }, + "q-knob": { + "attributes": [ + "name", + "size", + "value", + "min", + "max", + "inner-min", + "inner-max", + "step", + "reverse", + "instant-feedback", + "color", + "center-color", + "track-color", + "font-size", + "thickness", + "angle", + "show-value", + "tabindex", + "disable", + "readonly" + ], + "description": "" + }, + "q-layout": { + "attributes": [ + "view", + "container" + ], + "description": "" + }, + "q-linear-progress": { + "attributes": [ + "size", + "value", + "buffer", + "color", + "track-color", + "dark", + "reverse", + "stripe", + "indeterminate", + "query", + "rounded", + "instant-feedback" + ], + "description": "" + }, + "q-markup-table": { + "attributes": [ + "dense", + "dark", + "flat", + "bordered", + "square", + "separator", + "wrap-cells" + ], + "description": "" + }, + "q-menu": { + "attributes": [ + "target", + "no-parent-event", + "context-menu", + "content-class", + "content-style", + "value", + "dark", + "fit", + "cover", + "anchor", + "self", + "offset", + "scroll-target", + "touch-position", + "persistent", + "no-route-dismiss", + "auto-close", + "separate-close-popup", + "square", + "no-refocus", + "no-focus", + "min-height", + "min-width", + "max-height", + "max-width", + "transition-show", + "transition-hide" + ], + "description": "" + }, + "q-no-ssr": { + "attributes": [ + "tag", + "placeholder" + ], + "description": "" + }, + "q-option-group": { + "attributes": [ + "size", + "value", + "options", + "name", + "type", + "color", + "keep-color", + "dark", + "dense", + "left-label", + "inline", + "disable" + ], + "description": "" + }, + "q-page-scroller": { + "attributes": [ + "position", + "offset", + "expand", + "scroll-offset", + "reverse", + "duration" + ], + "description": "" + }, + "q-page-sticky": { + "attributes": [ + "position", + "offset", + "expand" + ], + "description": "" + }, + "q-page": { + "attributes": [ + "padding", + "style-fn" + ], + "description": "" + }, + "q-page-container": { + "attributes": [], + "description": "" + }, + "q-pagination": { + "attributes": [ + "value", + "min", + "max", + "dark", + "size", + "disable", + "input", + "icon-prev", + "icon-next", + "icon-first", + "icon-last", + "to-fn", + "boundary-links", + "boundary-numbers", + "direction-links", + "ellipses", + "max-pages", + "flat", + "outline", + "unelevated", + "push", + "color", + "text-color", + "active-design", + "active-color", + "active-text-color", + "round", + "rounded", + "glossy", + "gutter", + "padding", + "input-style", + "input-class", + "ripple" + ], + "description": "" + }, + "q-parallax": { + "attributes": [ + "src", + "height", + "speed", + "scroll-target" + ], + "description": "" + }, + "q-popup-edit": { + "attributes": [ + "value", + "title", + "buttons", + "label-set", + "label-cancel", + "auto-save", + "content-class", + "content-style", + "color", + "validate", + "disable", + "fit", + "cover", + "anchor", + "self", + "offset", + "touch-position", + "persistent", + "separate-close-popup", + "square", + "max-height", + "max-width" + ], + "description": "" + }, + "q-popup-proxy": { + "attributes": [ + "target", + "no-parent-event", + "context-menu", + "value", + "breakpoint" + ], + "description": "" + }, + "q-pull-to-refresh": { + "attributes": [ + "color", + "bg-color", + "icon", + "no-mouse", + "disable", + "scroll-target" + ], + "description": "" + }, + "q-radio": { + "attributes": [ + "name", + "size", + "value", + "val", + "label", + "left-label", + "checked-icon", + "unchecked-icon", + "color", + "keep-color", + "dark", + "dense", + "disable", + "tabindex" + ], + "description": "" + }, + "q-range": { + "attributes": [ + "name", + "min", + "max", + "inner-min", + "inner-max", + "step", + "snap", + "reverse", + "vertical", + "color", + "track-color", + "track-img", + "inner-track-color", + "inner-track-img", + "selection-color", + "selection-img", + "label", + "label-color", + "label-text-color", + "switch-label-side", + "label-always", + "markers", + "marker-labels", + "marker-labels-class", + "switch-marker-labels-side", + "track-size", + "thumb-size", + "thumb-color", + "thumb-path", + "dark", + "dense", + "disable", + "readonly", + "tabindex", + "value", + "drag-range", + "drag-only-range", + "left-label-color", + "left-label-text-color", + "right-label-color", + "right-label-text-color", + "left-label-value", + "right-label-value", + "left-thumb-color", + "right-thumb-color" + ], + "description": "" + }, + "q-rating": { + "attributes": [ + "name", + "size", + "value", + "max", + "icon", + "icon-selected", + "icon-half", + "icon-aria-label", + "color", + "color-selected", + "color-half", + "no-dimming", + "no-reset", + "vertical", + "readonly", + "disable" + ], + "description": "" + }, + "q-resize-observer": { + "attributes": [ + "debounce" + ], + "description": "" + }, + "q-responsive": { + "attributes": [ + "ratio" + ], + "description": "" + }, + "q-scroll-area": { + "attributes": [ + "dark", + "bar-style", + "vertical-bar-style", + "horizontal-bar-style", + "thumb-style", + "vertical-thumb-style", + "horizontal-thumb-style", + "content-style", + "content-active-style", + "visible", + "delay", + "horizontal", + "tabindex" + ], + "description": "" + }, + "q-scroll-observer": { + "attributes": [ + "debounce", + "axis", + "scroll-target" + ], + "description": "" + }, + "q-select": { + "attributes": [ + "name", + "virtual-scroll-horizontal", + "virtual-scroll-slice-size", + "virtual-scroll-slice-ratio-before", + "virtual-scroll-slice-ratio-after", + "virtual-scroll-item-size", + "virtual-scroll-sticky-size-start", + "virtual-scroll-sticky-size-end", + "table-colspan", + "error", + "error-message", + "no-error-icon", + "rules", + "reactive-rules", + "lazy-rules", + "label", + "stack-label", + "hint", + "hide-hint", + "prefix", + "suffix", + "label-color", + "color", + "bg-color", + "dark", + "loading", + "clearable", + "clear-icon", + "filled", + "outlined", + "outlined-md", + "borderless", + "standout", + "label-slot", + "bottom-slots", + "hide-bottom-space", + "counter", + "rounded", + "square", + "dense", + "item-aligned", + "disable", + "readonly", + "autofocus", + "for", + "value", + "multiple", + "display-value", + "display-value-sanitize", + "options", + "option-value", + "option-label", + "option-disable", + "hide-selected", + "hide-dropdown-icon", + "dropdown-icon", + "max-values", + "options-dense", + "options-dark", + "options-selected-class", + "options-sanitize", + "options-cover", + "menu-shrink", + "menu-anchor", + "menu-self", + "menu-offset", + "popup-content-class", + "popup-content-style", + "dialog-content-class", + "dialog-content-style", + "dialog-close-icon", + "use-input", + "use-chips", + "fill-input", + "new-value-mode", + "map-options", + "emit-value", + "input-debounce", + "input-class", + "input-style", + "tabindex", + "autocomplete", + "transition-show", + "transition-hide", + "behavior" + ], + "description": "" + }, + "q-separator": { + "attributes": [ + "dark", + "spaced", + "inset", + "vertical", + "size", + "color" + ], + "description": "" + }, + "q-skeleton": { + "attributes": [ + "tag", + "dark", + "type", + "animation", + "square", + "bordered", + "size", + "width", + "height" + ], + "description": "" + }, + "q-slide-item": { + "attributes": [ + "left-color", + "right-color", + "top-color", + "bottom-color", + "dark" + ], + "description": "" + }, + "q-slide-transition": { + "attributes": [ + "appear", + "duration" + ], + "description": "" + }, + "q-slider": { + "attributes": [ + "name", + "min", + "max", + "inner-min", + "inner-max", + "step", + "snap", + "reverse", + "vertical", + "color", + "track-color", + "track-img", + "inner-track-color", + "inner-track-img", + "selection-color", + "selection-img", + "label", + "label-color", + "label-text-color", + "switch-label-side", + "label-always", + "markers", + "marker-labels", + "marker-labels-class", + "switch-marker-labels-side", + "track-size", + "thumb-size", + "thumb-color", + "thumb-path", + "dark", + "dense", + "disable", + "readonly", + "tabindex", + "value", + "label-value" + ], + "description": "" + }, + "q-space": { + "attributes": [], + "description": "" + }, + "q-spinner": { + "attributes": [ + "size", + "color", + "thickness" + ], + "description": "" + }, + "q-spinner-audio": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-ball": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-bars": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-box": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-clock": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-comment": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-cube": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-dots": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-facebook": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-gears": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-grid": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-hearts": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-hourglass": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-infinity": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-ios": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-orbit": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-oval": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-pie": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-puff": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-radio": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-rings": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-spinner-tail": { + "attributes": [ + "size", + "color" + ], + "description": "" + }, + "q-splitter": { + "attributes": [ + "value", + "reverse", + "unit", + "emit-immediately", + "horizontal", + "limits", + "tabindex", + "disable", + "before-class", + "after-class", + "separator-class", + "separator-style", + "dark" + ], + "description": "" + }, + "q-step": { + "attributes": [ + "name", + "disable", + "icon", + "color", + "title", + "caption", + "prefix", + "done-icon", + "done-color", + "active-icon", + "active-color", + "error-icon", + "error-color", + "header-nav", + "done", + "error" + ], + "description": "" + }, + "q-stepper": { + "attributes": [ + "value", + "keep-alive", + "keep-alive-include", + "keep-alive-exclude", + "keep-alive-max", + "animated", + "infinite", + "swipeable", + "vertical", + "transition-prev", + "transition-next", + "dark", + "flat", + "bordered", + "alternative-labels", + "header-nav", + "contracted", + "inactive-icon", + "inactive-color", + "done-icon", + "done-color", + "active-icon", + "active-color", + "error-icon", + "error-color", + "header-class" + ], + "description": "" + }, + "q-stepper-navigation": { + "attributes": [], + "description": "" + }, + "q-tab-panel": { + "attributes": [ + "name", + "disable", + "dark" + ], + "description": "" + }, + "q-tab-panels": { + "attributes": [ + "value", + "keep-alive", + "keep-alive-include", + "keep-alive-exclude", + "keep-alive-max", + "animated", + "infinite", + "swipeable", + "vertical", + "transition-prev", + "transition-next" + ], + "description": "" + }, + "q-table": { + "attributes": [ + "fullscreen", + "no-route-fullscreen-exit", + "data", + "row-key", + "virtual-scroll", + "virtual-scroll-slice-size", + "virtual-scroll-slice-ratio-before", + "virtual-scroll-slice-ratio-after", + "virtual-scroll-item-size", + "virtual-scroll-sticky-size-start", + "virtual-scroll-sticky-size-end", + "table-colspan", + "color", + "icon-first-page", + "icon-prev-page", + "icon-next-page", + "icon-last-page", + "grid", + "grid-header", + "dense", + "columns", + "visible-columns", + "loading", + "title", + "hide-header", + "hide-bottom", + "hide-selected-banner", + "hide-no-data", + "hide-pagination", + "dark", + "flat", + "bordered", + "square", + "separator", + "wrap-cells", + "binary-state-sort", + "column-sort-order", + "no-data-label", + "no-results-label", + "loading-label", + "selected-rows-label", + "rows-per-page-label", + "pagination-label", + "table-style", + "table-class", + "table-header-style", + "table-header-class", + "card-container-style", + "card-container-class", + "card-style", + "card-class", + "title-class", + "filter", + "filter-method", + "pagination", + "rows-per-page-options", + "selection", + "selected", + "expanded", + "sort-method" + ], + "description": "" + }, + "q-td": { + "attributes": [ + "props", + "auto-width", + "no-hover" + ], + "description": "" + }, + "q-th": { + "attributes": [ + "props", + "auto-width" + ], + "description": "" + }, + "q-tr": { + "attributes": [ + "props", + "no-hover" + ], + "description": "" + }, + "q-route-tab": { + "attributes": [ + "to", + "exact", + "append", + "replace", + "active-class", + "exact-active-class", + "href", + "target", + "disable", + "ripple", + "icon", + "label", + "alert", + "alert-icon", + "name", + "no-caps", + "content-class", + "tabindex" + ], + "description": "" + }, + "q-tab": { + "attributes": [ + "ripple", + "icon", + "label", + "alert", + "alert-icon", + "name", + "no-caps", + "content-class", + "tabindex", + "disable" + ], + "description": "" + }, + "q-tabs": { + "attributes": [ + "value", + "vertical", + "outside-arrows", + "mobile-arrows", + "align", + "breakpoint", + "active-class", + "active-color", + "active-bg-color", + "indicator-color", + "content-class", + "left-icon", + "right-icon", + "stretch", + "shrink", + "switch-indicator", + "narrow-indicator", + "inline-label", + "no-caps", + "dense" + ], + "description": "" + }, + "q-time": { + "attributes": [ + "name", + "value", + "landscape", + "mask", + "locale", + "calendar", + "color", + "text-color", + "dark", + "square", + "flat", + "bordered", + "readonly", + "disable", + "format24h", + "default-date", + "options", + "hour-options", + "minute-options", + "second-options", + "with-seconds", + "now-btn" + ], + "description": "" + }, + "q-timeline": { + "attributes": [ + "color", + "side", + "layout", + "dark" + ], + "description": "" + }, + "q-timeline-entry": { + "attributes": [ + "tag", + "heading", + "side", + "icon", + "avatar", + "color", + "title", + "subtitle", + "body" + ], + "description": "" + }, + "q-toggle": { + "attributes": [ + "name", + "size", + "value", + "val", + "true-value", + "false-value", + "indeterminate-value", + "toggle-order", + "toggle-indeterminate", + "label", + "left-label", + "checked-icon", + "unchecked-icon", + "indeterminate-icon", + "color", + "keep-color", + "dark", + "dense", + "disable", + "tabindex", + "icon", + "icon-color" + ], + "description": "" + }, + "q-toolbar": { + "attributes": [ + "inset" + ], + "description": "" + }, + "q-toolbar-title": { + "attributes": [ + "shrink" + ], + "description": "" + }, + "q-tooltip": { + "attributes": [ + "content-class", + "content-style", + "value", + "min-height", + "min-width", + "max-height", + "max-width", + "transition-show", + "transition-hide", + "anchor", + "self", + "offset", + "scroll-target", + "target", + "no-parent-event", + "delay", + "hide-delay" + ], + "description": "" + }, + "q-tree": { + "attributes": [ + "nodes", + "node-key", + "label-key", + "children-key", + "no-connectors", + "color", + "control-color", + "text-color", + "selected-color", + "dense", + "dark", + "icon", + "tick-strategy", + "ticked", + "expanded", + "selected", + "no-selection-unset", + "default-expand-all", + "accordion", + "no-transition", + "filter", + "filter-method", + "duration", + "no-nodes-label", + "no-results-label" + ], + "description": "" + }, + "q-uploader": { + "attributes": [ + "multiple", + "accept", + "capture", + "max-file-size", + "max-total-size", + "max-files", + "filter", + "label", + "color", + "text-color", + "dark", + "square", + "flat", + "bordered", + "no-thumbnails", + "auto-upload", + "hide-upload-btn", + "disable", + "readonly", + "factory", + "url", + "method", + "field-name", + "headers", + "form-fields", + "with-credentials", + "send-raw", + "batch" + ], + "description": "" + }, + "q-uploader-add-trigger": { + "attributes": [], + "description": "" + }, + "q-uploader-base": { + "attributes": [ + "multiple", + "accept", + "capture", + "max-file-size", + "max-total-size", + "max-files", + "filter", + "label", + "color", + "text-color", + "dark", + "square", + "flat", + "bordered", + "no-thumbnails", + "auto-upload", + "hide-upload-btn", + "disable", + "readonly" + ], + "description": "" + }, + "q-video": { + "attributes": [ + "ratio", + "src", + "title", + "fetchpriority", + "loading", + "referrerpolicy" + ], + "description": "" + }, + "q-virtual-scroll": { + "attributes": [ + "virtual-scroll-horizontal", + "virtual-scroll-slice-size", + "virtual-scroll-slice-ratio-before", + "virtual-scroll-slice-ratio-after", + "virtual-scroll-item-size", + "virtual-scroll-sticky-size-start", + "virtual-scroll-sticky-size-end", + "table-colspan", + "type", + "items", + "items-size", + "items-fn", + "scroll-target" + ], + "description": "" + } +} \ No newline at end of file diff --git a/dist/web-types/web-types.json b/dist/web-types/web-types.json new file mode 100644 index 00000000000..bea107462a6 --- /dev/null +++ b/dist/web-types/web-types.json @@ -0,0 +1,22087 @@ +{ + "$schema": "", + "framework": "vue", + "name": "quasar", + "version": "1.22.0-beta.3", + "contributions": { + "html": { + "types-syntax": "typescript", + "tags": [ + { + "name": "QAjaxBar", + "source": { + "module": "quasar", + "symbol": "QAjaxBar" + }, + "attributes": [ + { + "name": "position", + "value": { + "kind": "expression", + "type": "'top'|'right'|'bottom'|'left'" + }, + "description": "Position within window of where QAjaxBar should be displayed\n\nExamples:\nbottom", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar", + "default": "\"top\"" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar", + "default": "\"2px\"" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar" + }, + { + "name": "reverse", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Reverse direction of progress", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar", + "type": "boolean" + }, + { + "name": "skip-hijack", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Skip Ajax hijacking (not a reactive prop)", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar", + "type": "boolean" + }, + { + "name": "hijack-filter", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Filter which URL should trigger start() + stop()", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar" + } + ], + "events": [ + { + "name": "start", + "description": "Emitted when bar is triggered to appear", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar" + }, + { + "name": "stop", + "description": "Emitted when bar has finished its job", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar" + } + ], + "slots": [], + "description": "QAjaxBar - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/ajax-bar" + }, + { + "name": "QAvatar", + "source": { + "module": "quasar", + "symbol": "QAvatar" + }, + "attributes": [ + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/avatar" + }, + { + "name": "font-size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The size in CSS units, including unit name, of the content (icon, text)\n\nExamples:\n18px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/avatar" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/avatar" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/avatar" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/avatar" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/avatar", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a small standard border-radius for a squared shape of the component", + "doc-url": "https://v1.quasar.dev/vue-components/avatar", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Optional; Suggestions: one character string, tag", + "doc-url": "https://v1.quasar.dev/vue-components/avatar" + } + ], + "description": "QAvatar - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/avatar" + }, + { + "name": "QBadge", + "source": { + "module": "quasar", + "symbol": "QBadge" + }, + "attributes": [ + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/badge" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/badge" + }, + { + "name": "floating", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Tell QBadge if it should float to the top right side of the relative positioned parent element or not", + "doc-url": "https://v1.quasar.dev/vue-components/badge", + "type": "boolean" + }, + { + "name": "transparent", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 0.8 opacity; Useful especially for floating QBadge", + "doc-url": "https://v1.quasar.dev/vue-components/badge", + "type": "boolean" + }, + { + "name": "multi-line", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Content can wrap to multiple lines", + "doc-url": "https://v1.quasar.dev/vue-components/badge", + "type": "boolean" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Badge's content as string; overrides default slot if specified\n\nExamples:\nJohn Doe\n22", + "doc-url": "https://v1.quasar.dev/vue-components/badge" + }, + { + "name": "align", + "value": { + "kind": "expression", + "type": "'top'|'middle'|'bottom'" + }, + "description": "Sets vertical-align CSS prop", + "doc-url": "https://v1.quasar.dev/vue-components/badge" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outline' design (colored text and borders only)", + "doc-url": "https://v1.quasar.dev/vue-components/badge", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Makes a rounded shaped badge", + "doc-url": "https://v1.quasar.dev/vue-components/badge", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where QBadge content goes, if not using 'label' property", + "doc-url": "https://v1.quasar.dev/vue-components/badge" + } + ], + "description": "QBadge - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/badge" + }, + { + "name": "QBanner", + "source": { + "module": "quasar", + "symbol": "QBanner" + }, + "attributes": [ + { + "name": "inline-actions", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display actions on same row as content", + "doc-url": "https://v1.quasar.dev/vue-components/banner", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/banner", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a small standard border-radius for a squared shape of the component", + "doc-url": "https://v1.quasar.dev/vue-components/banner", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/banner", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where Banner content goes", + "doc-url": "https://v1.quasar.dev/vue-components/banner" + }, + { + "name": "avatar", + "description": "Slot for displaying an avatar (suggestions: QIcon, QAvatar)", + "doc-url": "https://v1.quasar.dev/vue-components/banner" + }, + { + "name": "action", + "description": "Slot for Banner action (suggestions: QBtn)", + "doc-url": "https://v1.quasar.dev/vue-components/banner" + } + ], + "description": "QBanner - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/banner" + }, + { + "name": "QBar", + "source": { + "module": "quasar", + "symbol": "QBar" + }, + "attributes": [ + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/bar", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "The component background color lights up the parent's background (as opposed to default behavior which is to darken it); Works unless you specify a CSS background color for it", + "doc-url": "https://v1.quasar.dev/vue-components/bar", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/bar" + } + ], + "description": "QBar - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/bar" + }, + { + "name": "QBreadcrumbs", + "source": { + "module": "quasar", + "symbol": "QBreadcrumbs" + }, + "attributes": [ + { + "name": "separator", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The string used to separate the breadcrumbs\n\nExamples:\n-\n|\n>", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs", + "default": "\"/\"" + }, + { + "name": "active-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The color of the active breadcrumb, which can be any color from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs", + "default": "\"primary\"" + }, + { + "name": "gutter", + "value": { + "kind": "expression", + "type": "'none'|'xs'|'sm'|'md'|'lg'|'xl'" + }, + "description": "The gutter value allows you control over the space between the breadcrumb elements.\n\nExamples:\nmd\nlg", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs", + "default": "\"sm\"" + }, + { + "name": "separator-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The color used to color the separator, which can be any color from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "align", + "value": { + "kind": "expression", + "type": "'left'|'center'|'right'|'between'|'around'|'evenly'" + }, + "description": "Specify how to align the breadcrumbs horizontally\n\nExamples:\nleft\ncenter", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs", + "default": "\"left\"" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "separator", + "vue-properties": [], + "description": "HTML or component you can slot in to separate the breadcrumbs", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + } + ], + "description": "QBreadcrumbs - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "QBreadcrumbsEl", + "source": { + "module": "quasar", + "symbol": "QBreadcrumbsEl" + }, + "attributes": [ + { + "name": "to", + "value": { + "kind": "expression", + "type": "string|object" + }, + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used\n\nExamples:\n/home/dashboard\n:to=\"{ name: 'my-route-name' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "exact", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs", + "type": "boolean" + }, + { + "name": "append", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs", + "type": "boolean" + }, + { + "name": "replace", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs", + "type": "boolean" + }, + { + "name": "active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to Vue Router 'active-class' property\n\nExamples:\nmy-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "exact-active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to Vue Router 'active-class' property\n\nExamples:\nmy-exact-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "href", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props\n\nExamples:\nhttp://quasar.dev", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "target", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props\n\nExamples:\n_blank\n_self\n_parent\n_top", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs", + "type": "boolean" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The label text for the breadcrumb\n\nExamples:\nHome\nIndex", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + } + ], + "events": [ + { + "name": "click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "navigateFn", + "type": "Function", + "description": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + } + ], + "description": "Emitted when the component is clicked", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where custom content goes, unless 'icon' and 'label' props are not enough", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + } + ], + "description": "QBreadcrumbsEl - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + { + "name": "QBtnDropdown", + "source": { + "module": "quasar", + "symbol": "QBtnDropdown" + }, + "attributes": [ + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Controls Menu show/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"menuState\"", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "ripple", + "value": { + "kind": "expression", + "type": "boolean|object" + }, + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)\n\nExamples:\nfalse\n{ early: true, center: true, color: 'teal', keyCodes: [] }", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "default": "true" + }, + { + "name": "type", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag\n\nExamples:\na\nsubmit\nbutton\nreset\nimage/png\nhref=\"https://some-site.net\" target=\"_blank\"", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "default": "\"button\"" + }, + { + "name": "to", + "value": { + "kind": "expression", + "type": "string|object" + }, + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used\n\nExamples:\n/home/dashboard\n:to=\"{ name: 'my-route-name' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "replace", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "append", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "href", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link href attribute; Has priority over the 'to' and 'replace' props\n\nExamples:\nhttps://quasar.dev\nhref=\"https://quasar.dev\" target=\"_blank\"", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "target", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link target attribute; Use it only with 'to' or 'href' props\n\nExamples:\n_blank\n_self\n_parent\n_top", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "The text that will be shown on the button\n\nExamples:\nButton Label", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "icon-right", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outline' design", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'flat' design", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "unelevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove shadow", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a more prominent border-radius for a squared shape button", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "push", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'push' design", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "glossy", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a glossy effect", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "fab", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Makes button size and shape to fit a Floating Action Button", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "fab-mini", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Makes button size and shape to fit a small Floating Action Button", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "padding", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set\n\nExamples:\n16px\n10px 5px\n2rem\nxs\nmd lg\n2px 2px 5px 7px", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "no-caps", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Avoid turning label text into caps (which happens by default)", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "no-wrap", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Avoid label text wrapping", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "align", + "value": { + "kind": "expression", + "type": "'left'|'right'|'center'|'around'|'between'|'evenly'" + }, + "description": "Label or content alignment", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "default": "\"center\"" + }, + { + "name": "stack", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Stack icon and label vertically instead of on same line (like it is by default)", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "stretch", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "When used on flexbox parent, button will stretch to parent's height", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "loading", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot)", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "split", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Split dropdown icon into its own button", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "dropdown-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "disable-main-btn", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disable main button (useful along with 'split' prop)", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "disable-dropdown", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disables dropdown (dropdown button if using along 'split' prop)", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "no-icon-animation", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disables the rotation of the dropdown icon when state is toggled", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "content-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the menu\n\nExamples:\nbackground-color: #ff0000\n:content-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the menu\n\nExamples:\nmy-special-class\n:content-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "cover", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the menu to cover the button. When used, the 'menu-self' and 'menu-fit' props are no longer effective", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "persistent", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "no-route-dismiss", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "auto-close", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "type": "boolean" + }, + { + "name": "menu-anchor", + "value": { + "kind": "expression", + "type": "'top left'|'top middle'|'top right'|'top start'|'top end'|'center left'|'center middle'|'center right'|'center start'|'center end'|'bottom left'|'bottom middle'|'bottom right'|'bottom start'|'bottom end'" + }, + "description": "Two values setting the starting position or anchor point of the menu relative to its target\n\nExamples:\ntop right\nbottom end", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "default": "\"bottom end\"" + }, + { + "name": "menu-self", + "value": { + "kind": "expression", + "type": "'top left'|'top middle'|'top right'|'top start'|'top end'|'center left'|'center middle'|'center right'|'center start'|'center end'|'bottom left'|'bottom middle'|'bottom right'|'bottom start'|'bottom end'" + }, + "description": "Two values setting the menu's own position relative to its target\n\nExamples:\ntop right\nbottom end", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "default": "\"top end\"" + }, + { + "name": "menu-offset", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "An array of two numbers to offset the menu horizontally and vertically in pixels\n\nExamples:\n[8, 8]\n[5, 10]", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "transition-show", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "default": "\"fade\"" + }, + { + "name": "transition-hide", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "default": "\"fade\"" + }, + { + "name": "toggle-aria-label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "aria-label to be used on the dropdown toggle element\n\nExamples:\nOpen menu", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New state (showing/hidden)", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "description": "Emitted when showing/hidden state changes; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "description": "Emitted after component has triggered show()", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "before-show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "description": "Emitted when component triggers show() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "description": "Emitted after component has triggered hide()", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "before-hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "description": "Emitted when component triggers hide() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "description": "Emitted when user clicks/taps on the main button (not the icon one, if using 'split')", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "label", + "description": "Customize main button's content through this slot, unless you're using the 'icon' and 'label' props", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + { + "name": "loading", + "description": "Override the default QSpinner when in 'loading' state", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown" + } + ], + "description": "QBtnDropdown - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/button-dropdown", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QBtnGroup", + "source": { + "module": "quasar", + "symbol": "QBtnGroup" + }, + "attributes": [ + { + "name": "spread", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Spread horizontally to all available space", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outline' design for buttons", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'flat' design for buttons", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + }, + { + "name": "unelevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove shadow on buttons", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a more prominent border-radius for squared shape buttons", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + }, + { + "name": "push", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'push' design for buttons", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + }, + { + "name": "stretch", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "When used on flexbox parent, buttons will stretch to parent's height", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + }, + { + "name": "glossy", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a glossy effect", + "doc-url": "https://v1.quasar.dev/vue-components/button-group", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestion: QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/button-group" + } + ], + "description": "QBtnGroup - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/button-group" + }, + { + "name": "QBtnToggle", + "source": { + "module": "quasar", + "symbol": "QBtnToggle" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + }, + { + "name": "ripple", + "value": { + "kind": "expression", + "type": "boolean|object" + }, + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)\n\nExamples:\nfalse\n{ early: true, center: true, color: 'teal', keyCodes: [] }", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "default": "true" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"selected\"", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + }, + { + "name": "options", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Array of Objects defining each option\n\nExamples:\n[ {label: 'One', value: 'one'}, {label: 'Two', value: 'two'} ]", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "required": true + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + }, + { + "name": "toggle-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "default": "\"primary\"" + }, + { + "name": "toggle-text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + }, + { + "name": "spread", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Spread horizontally to all available space", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outline' design", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'flat' design", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "unelevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove shadow", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a more prominent border-radius for a squared shape button", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "push", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'push' design", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "glossy", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a glossy effect", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Button size name or a CSS unit including unit name\n\nExamples:\nxs\nsm\nmd\nlg\nxl\n25px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + }, + { + "name": "padding", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set\n\nExamples:\n16px\n10px 5px\n2rem\nxs\nmd lg\n2px 2px 5px 7px", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + }, + { + "name": "no-caps", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Avoid turning label text into caps (which happens by default)", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "no-wrap", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Avoid label text wrapping", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "stack", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Stack icon and label vertically instead of on same line (like it is by default)", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "stretch", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "When used on flexbox parent, button will stretch to parent's height", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + }, + { + "name": "clearable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Clears model on click of the already selected button", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + }, + { + "name": "clear", + "description": "When using the 'clearable' property, this event is emitted when the already selected button is clicked", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestions: QTooltip, QBadge", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle" + } + ], + "description": "QBtnToggle - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/button-toggle", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QBtn", + "source": { + "module": "quasar", + "symbol": "QBtn" + }, + "attributes": [ + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "ripple", + "value": { + "kind": "expression", + "type": "boolean|object" + }, + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)\n\nExamples:\nfalse\n{ early: true, center: true, color: 'teal', keyCodes: [] }", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "default": "true" + }, + { + "name": "type", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag\n\nExamples:\na\nsubmit\nbutton\nreset\nimage/png\nhref=\"https://some-site.net\" target=\"_blank\"", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "default": "\"button\"" + }, + { + "name": "to", + "value": { + "kind": "expression", + "type": "string|object" + }, + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used\n\nExamples:\n/home/dashboard\n:to=\"{ name: 'my-route-name' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "replace", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "append", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "href", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link href attribute; Has priority over the 'to' and 'replace' props\n\nExamples:\nhttps://quasar.dev\nhref=\"https://quasar.dev\" target=\"_blank\"", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "target", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link target attribute; Use it only with 'to' or 'href' props\n\nExamples:\n_blank\n_self\n_parent\n_top", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "The text that will be shown on the button\n\nExamples:\nButton Label", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "icon-right", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outline' design", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'flat' design", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "unelevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove shadow", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a more prominent border-radius for a squared shape button", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "push", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'push' design", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "glossy", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a glossy effect", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "fab", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Makes button size and shape to fit a Floating Action Button", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "fab-mini", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Makes button size and shape to fit a small Floating Action Button", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "padding", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set\n\nExamples:\n16px\n10px 5px\n2rem\nxs\nmd lg\n2px 2px 5px 7px", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "no-caps", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Avoid turning label text into caps (which happens by default)", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "no-wrap", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Avoid label text wrapping", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "align", + "value": { + "kind": "expression", + "type": "'left'|'right'|'center'|'around'|'between'|'evenly'" + }, + "description": "Label or content alignment", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "default": "\"center\"" + }, + { + "name": "stack", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Stack icon and label vertically instead of on same line (like it is by default)", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "stretch", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "When used on flexbox parent, button will stretch to parent's height", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "loading", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot)", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "round", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Makes a circle shaped button", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + }, + { + "name": "percentage", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Percentage (0.0 < x < 100.0); To be used along 'loading' prop; Display a progress bar on the background\n\nExamples:\n23", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "dark-percentage", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Progress bar on the background should have dark color; To be used along with 'percentage' and 'loading' props", + "doc-url": "https://v1.quasar.dev/vue-components/button", + "type": "boolean" + } + ], + "events": [ + { + "name": "click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "navigateFn", + "type": "Function", + "description": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "doc-url": "https://v1.quasar.dev/vue-components/button" + } + ], + "description": "Emitted when the component is clicked", + "doc-url": "https://v1.quasar.dev/vue-components/button" + } + ], + "slots": [ + { + "name": "default", + "description": "Use for custom content, instead of relying on 'icon' and 'label' props", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "loading", + "description": "Override the default QSpinner when in 'loading' state", + "doc-url": "https://v1.quasar.dev/vue-components/button" + } + ], + "description": "QBtn - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/button" + }, + { + "name": "QCard", + "source": { + "module": "quasar", + "symbol": "QCard" + }, + "attributes": [ + { + "name": "tag", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "HTML tag to render\n\nExamples:\ndiv\nform", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "default": "\"div\"" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 'flat' design (no default shadow)", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "type": "boolean" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/card" + } + ], + "description": "QCard - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/card" + }, + { + "name": "QCardActions", + "source": { + "module": "quasar", + "symbol": "QCardActions" + }, + "attributes": [ + { + "name": "align", + "value": { + "kind": "expression", + "type": "'left'|'center'|'right'|'between'|'around'|'evenly'|'stretch'" + }, + "description": "Specify how to align the actions", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "default": "\"left (for horizontal mode) / stretch (for vertical mode)\"" + }, + { + "name": "vertical", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display actions one below the other", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestions: QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/card" + } + ], + "description": "QCardActions - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/card" + }, + { + "name": "QCardSection", + "source": { + "module": "quasar", + "symbol": "QCardSection" + }, + "attributes": [ + { + "name": "tag", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "HTML tag to render\n\nExamples:\ndiv\nform", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "default": "\"div\"" + }, + { + "name": "horizontal", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display a horizontal section (will have no padding and can contain other QCardSection)", + "doc-url": "https://v1.quasar.dev/vue-components/card", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/card" + } + ], + "description": "QCardSection - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/card" + }, + { + "name": "QCarousel", + "source": { + "module": "quasar", + "symbol": "QCarousel" + }, + "attributes": [ + { + "name": "fullscreen", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Fullscreen mode\n\nExamples:\n:fullscreen.sync=\"isFullscreen\"", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "no-route-fullscreen-exit", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Changing route app won't exit fullscreen", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive.\n\nExamples:\nv-model=\"panelName\"", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "keep-alive", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to using Vue's native component on the content", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "keep-alive-include", + "value": { + "kind": "expression", + "type": "string|any[]|RegExp" + }, + "description": "Equivalent to using Vue's native include prop for ; Values must be valid Vue component names\n\nExamples:\na,b\n/a|b/\n['a', 'b']", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "keep-alive-exclude", + "value": { + "kind": "expression", + "type": "string|any[]|RegExp" + }, + "description": "Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names\n\nExamples:\na,b\n/a|b/\n['a', 'b']", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "keep-alive-max", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Equivalent to using Vue's native max prop for \n\nExamples:\n2", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "animated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enable transitions between panel (also see 'transition-prev' and 'transition-next' props)", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "infinite", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Makes component appear as infinite (when reaching last panel, next one will become the first one)", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "swipeable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enable swipe events (may interfere with content's touch/mouse events)", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "vertical", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Default transitions and swipe actions will be on the vertical axis", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "transition-prev", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "default": "\"fade\"" + }, + { + "name": "transition-next", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "default": "\"fade\"" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Height of Carousel in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "padding", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default padding to each slide, according to the usage of 'arrows' and 'navigation' props", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "control-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for QCarousel button controls (arrows, navigation) from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "control-text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for text color of QCarousel button controls (arrows, navigation) from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "control-type", + "value": { + "kind": "expression", + "type": "'regular'|'flat'|'outline'|'push'|'unelevated'" + }, + "description": "Type of button to use for controls (arrows, navigation)", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "autoplay", + "value": { + "kind": "expression", + "type": "number|boolean" + }, + "description": "Jump to next slide (if 'true' or val > 0) or previous slide (if val < 0) at fixed time intervals (in milliseconds); 'false' disables autoplay, 'true' enables it for 5000ms intervals\n\nExamples:\n:autoplay=\"2500\"\ntrue\nfalse", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "arrows", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show navigation arrow buttons", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "prev-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "next-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "navigation", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show navigation dots", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "navigation-position", + "value": { + "kind": "expression", + "type": "'top'|'right'|'bottom'|'left'" + }, + "description": "Side to stick navigation to\n\nExamples:\nleft", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "default": "\"bottom/right\"" + }, + { + "name": "navigation-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "navigation-active-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention for the active (current slide) navigation icon; Make sure you have the icon library installed unless you are using 'img:' prefix\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "thumbnails", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show thumbnails", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "string|number", + "description": "New current panel name\n\nExamples:\ndashboard", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "description": "Emitted when the component changes the model; This event _isn't_ fired if the model is changed externally; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "before-transition", + "arguments": [ + { + "name": "newVal", + "type": "string|number", + "description": "Panel name towards transition is going\n\nExamples:\ndashboard", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "oldVal", + "type": "string|number", + "description": "Panel name from which transition is happening\n\nExamples:\ndashboard", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "description": "Emitted before transitioning to a new panel", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "transition", + "arguments": [ + { + "name": "newVal", + "type": "string|number", + "description": "Panel name towards transition has occurred\n\nExamples:\ndashboard", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "oldVal", + "type": "string|number", + "description": "Panel name from which transition has happened\n\nExamples:\ndashboard", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "description": "Emitted after component transitioned to a new panel", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestion: QCarouselSlide", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "control", + "description": "Slot specific for QCarouselControl", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "navigation-icon", + "vue-properties": [ + { + "name": "index", + "type": "number", + "description": "The 0-based index of corresponding slide", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "maxIndex", + "type": "number", + "description": "The available number of slides", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "name", + "type": "any", + "description": "The name of the corresponding slide", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "active", + "type": "boolean", + "description": "Is this the current slide?", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "btnProps", + "type": "object", + "description": "Default QBtn props that can be binded to your own QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "onClick", + "type": "Function", + "description": "Default trigger when clicked/tapped on", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "description": "Slot for navigation icon/btn; Suggestion: QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "description": "QCarousel - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QCarouselControl", + "source": { + "module": "quasar", + "symbol": "QCarouselControl" + }, + "attributes": [ + { + "name": "position", + "value": { + "kind": "expression", + "type": "'top-right'|'top-left'|'bottom-right'|'bottom-left'|'top'|'right'|'bottom'|'left'" + }, + "description": "Side/corner to stick to\n\nExamples:\ntop-right", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "default": "\"bottom-right\"" + }, + { + "name": "offset", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "An array of two numbers to offset the component horizontally and vertically (in pixels)\n\nExamples:\n[8, 8]\n[5, 10]", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "default": "\"[18, 18]\"" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "description": "QCarouselControl - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "QCarouselSlide", + "source": { + "module": "quasar", + "symbol": "QCarouselSlide" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "Slide name\n\nExamples:\naccounts\nfirstPanel\n:name=\"1\"\naccounts\nfirstSlide\n:name=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "required": true + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/carousel", + "type": "boolean" + }, + { + "name": "img-src", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "URL pointing to a slide background image (use public folder)\n\nExamples:\n(public folder) src=\"img/my-bg.png\"\n(assets folder) src=\"~assets/my-img.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + } + ], + "description": "QCarouselSlide - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/carousel" + }, + { + "name": "QChatMessage", + "source": { + "module": "quasar", + "symbol": "QChatMessage" + }, + "attributes": [ + { + "name": "sent", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Render as a sent message (so from current user)", + "doc-url": "https://v1.quasar.dev/vue-components/chat", + "type": "boolean" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Renders a label header/section only\n\nExamples:\nFriday, 18th", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "bg-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name (from the Quasar Color Palette) for chat bubble background\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name (from the Quasar Color Palette) for chat bubble text\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Author's name\n\nExamples:\nJohn Doe", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "avatar", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "URL to the avatar image of the author\n\nExamples:\n(public folder) src=\"boy-avatar.png\"\n(assets folder) src=\"~assets/boy-avatar.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "text", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Array of strings that are the message body. Strings are not sanitized (see details in docs)\n\nExamples:\n:text=\"['How are you?']\"\n:text=\"['I\\'m good, thank you!', 'And you?']\"", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "stamp", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Creation timestamp\n\nExamples:\n13:55\nYesterday at 13:51", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "1-12 out of 12 (same as col-*)\n\nExamples:\n4\n6\n12", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "label-sanitize", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Force use of textContent instead of innerHTML to render label; Use it when the label might be unsafe (from user input)", + "doc-url": "https://v1.quasar.dev/vue-components/chat", + "type": "boolean" + }, + { + "name": "name-sanitize", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Force use of textContent instead of innerHTML to render name; Use it when the name might be unsafe (from user input)", + "doc-url": "https://v1.quasar.dev/vue-components/chat", + "type": "boolean" + }, + { + "name": "text-sanitize", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Force use of textContent instead of innerHTML to render text; Use it when the text might be unsafe (from user input)", + "doc-url": "https://v1.quasar.dev/vue-components/chat", + "type": "boolean" + }, + { + "name": "stamp-sanitize", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Force use of textContent instead of innerHTML to render stamp; Use it when the stamp might be unsafe (from user input)", + "doc-url": "https://v1.quasar.dev/vue-components/chat", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "You can use this slot to define a custom message (overrides props)", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "avatar", + "description": "Slot for avatar; Suggestion: QAvatar, img", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "name", + "description": "Slot for name; Overrides the 'name' prop", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "stamp", + "description": "Slot for stamp; Overrides the 'stamp' prop", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "label", + "description": "Slot for label; Overrides the 'label' prop", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + } + ], + "description": "QChatMessage - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/chat" + }, + { + "name": "QCheckbox", + "source": { + "module": "quasar", + "symbol": "QCheckbox" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "any|any[]" + }, + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nfalse\n['car', 'building']", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "required": true + }, + { + "name": "val", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked\n\nExamples:\ncar", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "true-value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "What model value should be considered as checked/ticked/on?\n\nExamples:\nAgreed", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "default": "true" + }, + { + "name": "false-value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "What model value should be considered as unchecked/unticked/off?\n\nExamples:\nDisagree", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "indeterminate-value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "What model value should be considered as 'indeterminate'?\n\nExamples:\n0\nnot_answered", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "toggle-order", + "value": { + "kind": "expression", + "type": "'tf'|'ft'" + }, + "description": "Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ...", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "default": "\"tf\"" + }, + { + "name": "toggle-indeterminate", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "When user clicks/taps on the component, should we toggle through the indeterminate state too?", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "type": "boolean" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Label to display along the component (or use the default slot instead of this prop)\n\nExamples:\nI agree with the Terms and Conditions", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "left-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Label (if any specified) should be displayed on the left side of the component", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "type": "boolean" + }, + { + "name": "checked-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The icon to be used when the model is truthy (instead of the default design)\n\nExamples:\nvisibility", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "unchecked-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The icon to be used when the toggle is falsy (instead of the default design)\n\nExamples:\nvisibility_off", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "indeterminate-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The icon to be used when the model is indeterminate (instead of the default design)\n\nExamples:\nhelp", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "keep-color", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Should the color (if specified any) be kept when the component is unticked/ off?", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "type": "boolean" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + }, + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot can be used as label, unless 'label' prop is specified; Suggestion: string", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox" + } + ], + "description": "QCheckbox - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/checkbox", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QChip", + "source": { + "module": "quasar", + "symbol": "QChip" + }, + "attributes": [ + { + "name": "ripple", + "value": { + "kind": "expression", + "type": "boolean|object" + }, + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)\n\nExamples:\nfalse\n{ early: true, center: true, color: 'teal', keyCodes: [] }", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "default": "true" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "type": "boolean" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "QChip size name or a CSS unit including unit name\n\nExamples:\nxs\nsm\nmd\nlg\nxl\n25px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "type": "boolean" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "icon-right", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "icon-remove", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "icon-selected", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Chip's content as string; overrides default slot if specified\n\nExamples:\nJohn Doe\nBook", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model of the component determining if QChip should be rendered or not", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "default": "true", + "type": "boolean" + }, + { + "name": "selected", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model for QChip if it's selected or not", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Sets a low value for border-radius instead of the default one, making it close to a square", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "type": "boolean" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display using the 'outline' design", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "type": "boolean" + }, + { + "name": "clickable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Is QChip clickable? If it's the case, then it will add hover effects and emit 'click' events", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "type": "boolean" + }, + { + "name": "removable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "If set, then it displays a 'remove' icon that when clicked the QChip emits 'remove' event", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "type": "boolean" + }, + { + "name": "remove-aria-label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "aria-label to be used on the remove icon\n\nExamples:\nRemove item", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "type": "boolean" + } + ], + "events": [ + { + "name": "click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + } + ], + "description": "Emitted on QChip click if 'clickable' property is set", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "update:selected", + "arguments": [ + { + "name": "state", + "type": "boolean", + "description": "Selected state", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + } + ], + "description": "Used by Vue on 'selected.sync' prop for updating its value", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + }, + { + "name": "remove", + "arguments": [ + { + "name": "state", + "type": "boolean", + "description": "Render state (render or not)", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + } + ], + "description": "Works along with 'value' and 'removable' prop. Emitted when toggling rendering state of the QChip", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where QChip content goes, if not using 'label' property", + "doc-url": "https://v1.quasar.dev/vue-components/chip" + } + ], + "description": "QChip - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/chip", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QCircularProgress", + "source": { + "module": "quasar", + "symbol": "QCircularProgress" + }, + "attributes": [ + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Current progress (must be between min/max)\n\nExamples:\n0\n100\n52.32", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress" + }, + { + "name": "min", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Minimum value defining 'no progress' (must be lower than 'max')\n\nExamples:\n0\n100\n52.32", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress" + }, + { + "name": "max", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Maximum value defining 100% progress made (must be higher than 'min')\n\nExamples:\n100\n52.32", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "default": "100" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for the arc progress from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress" + }, + { + "name": "center-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for the center part of the component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress" + }, + { + "name": "track-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for the track of the component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress" + }, + { + "name": "font-size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size\n\nExamples:\n1em\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "default": "\"0.25em\"" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Rounding the arc of progress", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "type": "boolean" + }, + { + "name": "thickness", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size\n\nExamples:\n1\n0.3", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "default": "0.2" + }, + { + "name": "angle", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Angle to rotate progress arc by\n\nExamples:\n0\n40\n90", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress" + }, + { + "name": "indeterminate", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component into 'indeterminate' state; Ignores 'value' prop", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "type": "boolean" + }, + { + "name": "show-value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "type": "boolean" + }, + { + "name": "reverse", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Reverses the direction of progress; Only for determined state", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "type": "boolean" + }, + { + "name": "instant-feedback", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "No animation when model changes", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Used for component content only if 'show-value' prop is set; Make sure the content has enough space to be displayed inside the component", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress" + } + ], + "description": "QCircularProgress - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/circular-progress", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QColor", + "source": { + "module": "quasar", + "symbol": "QColor" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"myColor\"", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker" + }, + { + "name": "default-value", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The default value to show when the model doesn't have one\n\nExamples:\ndefault-value=\"#c0c0c0\"", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker" + }, + { + "name": "default-view", + "value": { + "kind": "expression", + "type": "'spectrum'|'tune'|'palette'" + }, + "description": "The default view of the picker", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "default": "\"spectrum\"" + }, + { + "name": "format-model", + "value": { + "kind": "expression", + "type": "'auto'|'hex'|'rgb'|'hexa'|'rgba'" + }, + "description": "Forces a certain model format upon the model\n\nExamples:\nhex", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "default": "\"auto\"" + }, + { + "name": "palette", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Use a custom palette of colors for the palette tab\n\nExamples:\n:palette=\"[ '#019A9D', '#D9B801', 'rgb(23,120,0)', '#B2028A' ]\"", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "default": "\"(hard-coded palette)\"" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 'flat' design (no default shadow)", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + }, + { + "name": "no-header", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not render header", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + }, + { + "name": "no-header-tabs", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not render header tabs (only the input)", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + }, + { + "name": "no-footer", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not render footer; Useful when you want a specific view ('default-view' prop) and don't want the user to be able to switch it", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker" + }, + { + "name": "change", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker" + } + ], + "description": "Emitted on lazy model value change (after user finishes selecting a color)", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker" + } + ], + "slots": [], + "description": "QColor - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/color-picker", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QDate", + "source": { + "module": "quasar", + "symbol": "QDate" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "Date(s) of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"myDate\"\nv-model=\"[myDate1, myDate2]\"\nv-model=\"[{ from: myDateFrom, to: myDateTo }]\"\nv-model=\"[myDate1, { from: myDateFrom, to: myDateTo }, myDate2]\"", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "required": true + }, + { + "name": "landscape", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display the component in landscape mode", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "mask", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Mask (formatting string) used for parsing and formatting value\n\nExamples:\nYYYY-MM-DD\nMMMM Do, YYYY\nYYYY-MM-DD HH:mm:ss", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "default": "\"YYYY/MM/DD\"" + }, + { + "name": "locale", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "Locale formatting options\n\nExamples:\n:locale=\"{ monthsShort: ['Ian', 'Feb', 'Mar', '...'] }\"", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "calendar", + "value": { + "kind": "expression", + "type": "'gregorian'|'persian'" + }, + "description": "Specify calendar type", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "default": "\"gregorian\"" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 'flat' design (no default shadow)", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "title", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "When specified, it overrides the default header title; Makes sense when not in 'minimal' mode\n\nExamples:\nBirthday", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "subtitle", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "When specified, it overrides the default header subtitle; Makes sense when not in 'minimal' mode\n\nExamples:\nJohn Doe", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "default-year-month", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The default year and month to display (in YYYY/MM format) when model is unfilled (undefined or null); Please ensure it is within the navigation min/max year-month (if using them)\n\nExamples:\n1986/02", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "default-view", + "value": { + "kind": "expression", + "type": "'Calendar'|'Months'|'Years'" + }, + "description": "The view which will be displayed by default", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "default": "\"Calendar\"" + }, + { + "name": "years-in-month-view", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show the years selector in months view", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "events", + "value": { + "kind": "expression", + "type": "any[]|Function" + }, + "description": "A list of events to highlight on the calendar; If using a function, it receives the date as a String and must return a Boolean (matches or not); If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\n:events=\"['2018/11/05', '2018/11/06', '2018/11/09', '2018/11/23']\"\n:events=\"date => date[9] % 3 === 0\"", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "event-color", + "value": { + "kind": "expression", + "type": "string|Function" + }, + "description": "Color name (from the Quasar Color Palette); If using a function, it receives the date as a String and must return a String (color for the received date); If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\nteal-10\n:event-color=\"(date) => date[9] % 2 === 0 ? 'teal' : 'orange'\"", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "options", + "value": { + "kind": "expression", + "type": "any[]|Function" + }, + "description": "Optionally configure the days that are selectable; If using a function, it receives the date as a String and must return a Boolean (is date acceptable or not); If using a function then for best performance, reference it from your scope and do not define it inline; Incompatible with 'range' prop\n\nExamples:\n:options=\"['2018/11/05', '2018/11/12', '2018/11/19', '2018/11/26' ]\"\n:options=\"date => date[9] % 3 === 0\"\n:options=\"date => date >= '2018/11/03' && date <= '2018/11/15'\"", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "model-navigation", + "value": { + "kind": "expression", + "type": "string|boolean" + }, + "description": "On which end of the range to navigate the calendar when the model changes; Use `false` to skip navigation", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "default": "\"from\"" + }, + { + "name": "navigation-min-year-month", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Lock user from navigating below a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop\n\nExamples:\n2020/07", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "navigation-max-year-month", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Lock user from navigating above a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop\n\nExamples:\n2020/10", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "no-unset", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove ability to unselect a date; It does not apply to selecting a range over already selected dates", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "first-day-of-week", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Sets the day of the week that is considered the first day (0 - Sunday, 1 - Monday, ...); This day will show in the left-most column of the calendar\n\nExamples:\nfirst-day-of-week=\"1\"\n:first-day-of-week=\"selectedFirstDayOfTheWeek\"", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "default": "\"(based on configured Quasar lang language)\"" + }, + { + "name": "today-btn", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display a button that selects the current day", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "minimal", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Don’t display the header", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "multiple", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allow multiple selection; Model must be Array", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "range", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allow range selection; Partial compatibility with 'options' prop: selected ranges might also include 'unselectable' days", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "day-as-range", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model single days as a range (object) instead of string", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + }, + { + "name": "emit-immediately", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Emit model when user browses month and year too; ONLY for single selection (non-multiple, non-range)", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "string|any[]|object", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "reason", + "type": "'add-day'|'remove-day'|'add-range'|'remove-range'|'mask'|'locale'|'year'|'month'", + "description": "Reason of the user interaction (what was picked)", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "details", + "type": "object", + "description": "Object of properties on the new model", + "doc-url": "https://v1.quasar.dev/vue-components/date" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "navigation", + "arguments": [ + { + "name": "view", + "type": "object", + "description": "Definition of the current view (year, month)", + "doc-url": "https://v1.quasar.dev/vue-components/date" + } + ], + "description": "Emitted when user navigates to a different month or year (and even when the model changes from an outside source)", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "range-start", + "arguments": [ + { + "name": "from", + "type": "object", + "description": "Definition of date from where the range begins", + "doc-url": "https://v1.quasar.dev/vue-components/date" + } + ], + "description": "User has started a range selection", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "range-change", + "arguments": [ + { + "name": "range", + "type": "object", + "description": "Definition of the range", + "doc-url": "https://v1.quasar.dev/vue-components/date" + } + ], + "description": "User has changed a range selection", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "range-end", + "arguments": [ + { + "name": "range", + "type": "object", + "description": "Definition of the range", + "doc-url": "https://v1.quasar.dev/vue-components/date" + } + ], + "description": "User has ended a range selection", + "doc-url": "https://v1.quasar.dev/vue-components/date" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where additional buttons can go", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "day", + "vue-properties": [ + { + "name": "i", + "type": "number", + "description": "The day number in month\n\nExamples:\n23", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "day", + "type": "string", + "description": "Full date in YYYY/MM/DD form\n\nExamples:\n2020/05/20", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "fill", + "type": "boolean", + "description": "The day does not belong to the currently displayed month / year (no QBtn and hidden by default)", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "in", + "type": "boolean", + "description": "The day is selectable (QBtn is not disabled)", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "today", + "type": "boolean", + "description": "The day is today", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "selected", + "type": "boolean", + "description": "The day is selected", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "unelevated", + "type": "boolean", + "description": "The day is selected", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "flat", + "type": "boolean", + "description": "The day is not selected", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "classes", + "type": "string", + "description": "The classes applied to the day", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "color", + "type": "string", + "description": "The color of the QBtn used for the day\n\nExamples:\nprimary", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "textColor", + "type": "string", + "description": "The text color of the QBtn used for the day\n\nExamples:\norange-2", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "event", + "type": "boolean|string|any", + "description": "Boolean false if there is no event for the day; The event-color or the value returned by the event-color function\n\nExamples:\nred", + "doc-url": "https://v1.quasar.dev/vue-components/date" + }, + { + "name": "range", + "type": "object", + "description": "The range this day belongs to", + "doc-url": "https://v1.quasar.dev/vue-components/date" + } + ], + "description": "Override default day content slot; Suggestion: tooltips and / or multiple event markers", + "doc-url": "https://v1.quasar.dev/vue-components/date" + } + ], + "description": "QDate - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/date", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QDialog", + "source": { + "module": "quasar", + "symbol": "QDialog" + }, + "attributes": [ + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the content\n\nExamples:\nmy-special-class\n:content-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + }, + { + "name": "content-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the content\n\nExamples:\nbackground-color: #ff0000\n:content-style=\"{ color: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "persistent", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "User cannot dismiss Dialog if clicking outside of it or hitting ESC key; Also, an app route change won't dismiss it", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "no-esc-dismiss", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "User cannot dismiss Dialog by hitting ESC key; No need to set it if 'persistent' prop is also set", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "no-backdrop-dismiss", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "User cannot dismiss Dialog by clicking outside of it; No need to set it if 'persistent' prop is also set", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "no-route-dismiss", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Changing route app won't dismiss Dialog; No need to set it if 'persistent' prop is also set", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "auto-close", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Any click/tap inside of the dialog will close it", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "seamless", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put Dialog into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "maximized", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put Dialog into maximized mode", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "full-width", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dialog will try to render with same width as the window", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "full-height", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dialog will try to render with same height as the window", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "position", + "value": { + "kind": "expression", + "type": "'standard'|'top'|'right'|'bottom'|'left'" + }, + "description": "Stick dialog to one of the sides (top, right, bottom or left)\n\nExamples:\ntop\nright", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "default": "\"standard\"" + }, + { + "name": "transition-show", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "default": "\"scale\"" + }, + { + "name": "transition-hide", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "default": "\"scale\"" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Forces content to have squared borders", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "no-refocus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "(Accessibility) When Dialog gets hidden, do not refocus on the DOM element that previously had focus", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "no-focus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "(Accessibility) When Dialog gets shown, do not switch focus on it", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + }, + { + "name": "no-shake", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not shake up the Dialog to catch user's attention", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New state (showing/hidden)", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + } + ], + "description": "Emitted when showing/hidden state changes; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + }, + { + "name": "show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + } + ], + "description": "Emitted after component has triggered show()", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + }, + { + "name": "before-show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + } + ], + "description": "Emitted when component triggers show() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + }, + { + "name": "hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + } + ], + "description": "Emitted after component has triggered hide()", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + }, + { + "name": "before-hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + } + ], + "description": "Emitted when component triggers hide() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + }, + { + "name": "shake", + "description": "Emitted when the Dialog shakes in order to catch user's attention, unless the 'no-shake' property is set", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + }, + { + "name": "escape-key", + "description": "Emitted when ESC key is pressed; Does not get emitted if Dialog is 'persistent' or it has 'no-esc-key' set", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/dialog" + } + ], + "description": "QDialog - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/dialog", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QDrawer", + "source": { + "module": "quasar", + "symbol": "QDrawer" + }, + "attributes": [ + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "side", + "value": { + "kind": "expression", + "type": "'left'|'right'" + }, + "description": "Side to attach to\n\nExamples:\nright", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "default": "\"left\"" + }, + { + "name": "overlay", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Puts drawer into overlay mode (does not occupy space on screen, narrowing the page)", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "width", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Width of drawer (in pixels)\n\nExamples:\n:width=\"350\"", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "default": "300" + }, + { + "name": "mini", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Puts drawer into mini mode", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "mini-width", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Width of drawer (in pixels) when in mini mode\n\nExamples:\n:mini-width=\"100\"", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "default": "60" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "mini-to-overlay", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Mini mode will expand as an overlay", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "breakpoint", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Breakpoint (in pixels) of layout width up to which mobile mode is used\n\nExamples:\n1200\n:breakpoint=\"1400\"", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "default": "1023" + }, + { + "name": "behavior", + "value": { + "kind": "expression", + "type": "'default'|'desktop'|'mobile'" + }, + "description": "Overrides the default dynamic mode into which the drawer is put on\n\nExamples:\nmobile", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "default": "\"default\"" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "elevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Adds a default shadow to the header", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "persistent", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Prevents drawer from auto-closing when app's route changes", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "show-if-above", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Forces drawer to be shown on screen on initial render if the layout width is above breakpoint, regardless of v-model; This is the default behavior when SSR is taken over by client on initial render", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the drawer\n\nExamples:\nmy-special-class\n:content-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "content-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the drawer\n\nExamples:\nbackground-color: #ff0000\n:content-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "no-swipe-open", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disables the default behavior where drawer can be swiped into view; Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "no-swipe-close", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disables the default behavior where drawer can be swiped out of view (applies to drawer content only); Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + }, + { + "name": "no-swipe-backdrop", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disables the default behavior where drawer backdrop can be swiped", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New state (showing/hidden)", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted when showing/hidden state changes; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted after component has triggered show()", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "before-show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted when component triggers show() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted after component has triggered hide()", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "before-hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted when component triggers hide() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "on-layout", + "arguments": [ + { + "name": "state", + "type": "boolean", + "description": "New state", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted when drawer toggles between occupying space on page or not", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted when user clicks/taps on the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "mouseover", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted when user moves mouse cursor over the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "mouseout", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted when user moves mouse cursor out of the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "mini-state", + "arguments": [ + { + "name": "state", + "type": "boolean", + "description": "New state", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "Emitted when drawer changes the mini-mode state (sometimes it is forced to do so)", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component (overridden by 'mini' slot if used and drawer is in mini mode)", + "doc-url": "https://v1.quasar.dev/layout/drawer" + }, + { + "name": "mini", + "description": "Content to show when in mini mode (overrides 'default' slot)", + "doc-url": "https://v1.quasar.dev/layout/drawer" + } + ], + "description": "QDrawer - Quasar component", + "doc-url": "https://v1.quasar.dev/layout/drawer", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QEditor", + "source": { + "module": "quasar", + "symbol": "QEditor" + }, + "attributes": [ + { + "name": "fullscreen", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Fullscreen mode\n\nExamples:\n:fullscreen.sync=\"isFullscreen\"", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "no-route-fullscreen-exit", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Changing route app won't exit fullscreen", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"content\"", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "required": true + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 'flat' design (no borders)", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; toolbar buttons are shown on one-line only", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "min-height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "CSS unit for the minimum height of the editable area\n\nExamples:\n15rem\n50vh", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "default": "\"10rem\"" + }, + { + "name": "max-height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "CSS unit for maximum height of the input area\n\nExamples:\n1000px\n90vh", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "CSS value to set the height of the editable area\n\nExamples:\n100px\n50vh", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "definitions", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "Definition of commands and their buttons to be included in the 'toolbar' prop\n\nExamples:\n:definitions=\"{ save: { tip: 'Save your work', icon: 'save', label: 'Save', handler: saveWork }, upload: { tip: 'Upload to cloud', icon: 'cloud_upload', label: 'Upload', handler: uploadIt } }\"", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "fonts", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "Object with definitions of fonts\n\nExamples:\n:fonts=\"{ arial: 'Arial', arial_black: 'Arial Black', comic_sans: 'Comic Sans MS' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "toolbar", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "An array of arrays of Objects/Strings that you use to define the construction of the elements and commands available in the toolbar\n\nExamples:\nleft,center,right,justify", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "default": "[[\"left\",\"center\",\"right\",\"justify\"],[\"bold\",\"italic\",\"underline\",\"strike\"],[\"undo\",\"redo\"]]" + }, + { + "name": "toolbar-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Font color (from the Quasar Palette) of buttons and text in the toolbar\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "toolbar-text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Text color (from the Quasar Palette) of toolbar commands\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "toolbar-toggle-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Choose the active color (from the Quasar Palette) of toolbar commands button\n\nExamples:\nsecondary\nblue-3", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "default": "\"primary\"" + }, + { + "name": "toolbar-bg", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Toolbar background color (from Quasar Palette)\n\nExamples:\nsecondary\nblue-3", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "default": "\"grey-3\"" + }, + { + "name": "toolbar-outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Toolbar buttons are rendered \"outlined\"", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "toolbar-push", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Toolbar buttons are rendered as a \"push-button\" type", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "toolbar-rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Toolbar buttons are rendered \"rounded\"", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "type": "boolean" + }, + { + "name": "paragraph-tag", + "value": { + "kind": "expression", + "type": "'div'|'p'" + }, + "description": "Paragraph tag to be used", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "content-style", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "Object with CSS properties and values for styling the container of QEditor\n\nExamples:\n:content-style=\"{ backgroundColor: '#C0C0C0' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "object|any[]|string" + }, + "description": "CSS classes for the input area\n\nExamples:\nmy-special-class\n:content-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + }, + { + "name": "placeholder", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Text to display as placeholder\n\nExamples:\nType your story here ...", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "string", + "description": "The pure HTML of the content", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/editor" + } + ], + "slots": [], + "description": "QEditor - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/editor", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QExpansionItem", + "source": { + "module": "quasar", + "symbol": "QExpansionItem" + }, + "attributes": [ + { + "name": "to", + "value": { + "kind": "expression", + "type": "string|object" + }, + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used\n\nExamples:\n/home/dashboard\n:to=\"{ name: 'my-route-name' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "exact", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "append", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "replace", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to Vue Router 'active-class' property\n\nExamples:\nmy-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "exact-active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to Vue Router 'active-class' property\n\nExamples:\nmy-exact-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "href", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props\n\nExamples:\nhttp://quasar.dev", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "target", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props\n\nExamples:\n_blank\n_self\n_parent\n_top", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model of the component defining 'open' state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "expand-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "expanded-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Expand icon name (following Quasar convention) for when QExpansionItem is expanded; When used, it also disables the rotation animation of the expand icon; Make sure you have the icon library installed unless you are using 'img:' prefix\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "expand-icon-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Apply custom class(es) to the expand icon item section\n\nExamples:\ntext-purple", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "toggle-aria-label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "aria-label to be used on the expansion toggle element\n\nExamples:\nOpen details", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Header label (unless using 'header' slot)\n\nExamples:\nMy expansion item", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "label-lines", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property!\n\nExamples:\n1\n3\n:label-lines=\"2\"", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "caption", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Header sub-label (unless using 'header' slot)\n\nExamples:\nUnread message: 5", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "caption-lines", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property!\n\nExamples:\n1\n3\n:caption-lines=\"2\"", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "duration", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Animation duration (in milliseconds)\n\nExamples:\n:duration=\"1000\"", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "default": "300" + }, + { + "name": "header-inset-level", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Apply an inset to header (unless using 'header' slot); Useful when header avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu\n\nExamples:\n:header-inset-level=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "content-inset-level", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Apply an inset to content (changes content padding)\n\nExamples:\n:content-inset-level=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "expand-separator", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Apply a top and bottom separator when expansion item is opened", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "default-opened", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Puts expansion item into open state on initial render; Overridden by v-model if used", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "hide-expand-icon", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not show the expand icon", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "expand-icon-toggle", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies the expansion events to the expand icon only and not to the whole header", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "switch-toggle-side", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Switch expand icon side (from default 'right' to 'left')", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "dense-toggle", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use dense mode for expand icon", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "group", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Register expansion item into a group (unique name that must be applied to all expansion items in that group) for coordinated open/close state within the group a.k.a. 'accordion mode'\n\nExamples:\nmy-emails", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "popup", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put expansion list into 'popup' mode", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "type": "boolean" + }, + { + "name": "header-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Apply custom style to the header\n\nExamples:\nbackground: '#ff0000'\n:header-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "header-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Apply custom class(es) to the header\n\nExamples:\nmy-custom-class\n:header-class=\"{ 'my-custom-class': someCondition }\"", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New state (showing/hidden)", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "description": "Emitted when showing/hidden state changes; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "description": "Emitted after component has triggered show()", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "before-show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "description": "Emitted when component triggers show() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "description": "Emitted after component has triggered hide()", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "before-hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "description": "Emitted when component triggers hide() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "after-show", + "description": "Emitted when component show animation is finished", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "after-hide", + "description": "Emitted when component hide animation is finished", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "slots": [ + { + "name": "default", + "description": "Slot used for expansion item's content", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "header", + "vue-properties": [ + { + "name": "expanded", + "type": "boolean", + "description": "QExpansionItem expanded status", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "detailsId", + "type": "string", + "description": "QExpansionItem details panel id (for use in aria-controls)", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "show", + "type": "Function", + "description": "Triggers component to show", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "hide", + "type": "Function", + "description": "Triggers component to hide", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + }, + { + "name": "toggle", + "type": "Function", + "description": "Triggers component to toggle between show/hide", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "description": "Slot used for overriding default header", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item" + } + ], + "description": "QExpansionItem - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/expansion-item", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QFab", + "source": { + "module": "quasar", + "symbol": "QFab" + }, + "attributes": [ + { + "name": "type", + "value": { + "kind": "expression", + "type": "'a'|'submit'|'button'|'reset'" + }, + "description": "Define the button HTML DOM type", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "default": "\"a\"" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outline' design for Fab button", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "push", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'push' design for Fab button", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'flat' design for Fab button", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "unelevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove shadow", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "padding", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set\n\nExamples:\n16px\n10px 5px\n2rem\nxs\nmd lg", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "glossy", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Apply the glossy effect over the button", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "external-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display label besides the FABs, as external content", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "The label that will be shown when Fab is extended\n\nExamples:\nButton Label", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "label-position", + "value": { + "kind": "expression", + "type": "'top'|'right'|'bottom'|'left'" + }, + "description": "Position of the label around the icon", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "hide-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide the label; Useful for animation purposes where you toggle the visibility of the label", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "label-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the label container\n\nExamples:\nmy-special-class\n:input-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "label-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the label container\n\nExamples:\nbackground-color: #ff0000\n:input-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Apply a rectangle aspect to the FAB", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Controls state of fab actions (showing/hidden); Works best with v-model directive, otherwise use along listening to 'input' event", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "active-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "hide-icon", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide the icon (don't use any)", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "direction", + "value": { + "kind": "expression", + "type": "'up'|'right'|'down'|'left'" + }, + "description": "Direction to expand Fab Actions to\n\nExamples:\ndown", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "default": "\"right\"" + }, + { + "name": "vertical-actions-align", + "value": { + "kind": "expression", + "type": "'left'|'center'|'right'" + }, + "description": "The side of the Fab where Fab Actions will expand (only when direction is 'up' or 'down')", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "default": "\"center\"" + }, + { + "name": "persistent", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "By default, Fab Actions are hidden when user navigates to another route and this prop disables this behavior", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New state (showing/hidden)", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Emitted when fab actions are shown/hidden; Captured by v-model directive", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Emitted after component has triggered show()", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "before-show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Emitted when component triggers show() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Emitted after component has triggered hide()", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "before-hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Emitted when component triggers hide() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where QFabActions may go into", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "tooltip", + "description": "Slot specifically designed for a QTooltip", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "icon", + "vue-properties": [ + { + "name": "opened", + "type": "boolean", + "description": "FAB is opened", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Slot for icon shown when FAB is closed; Suggestion: QIcon", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "active-icon", + "vue-properties": [ + { + "name": "opened", + "type": "boolean", + "description": "FAB is opened", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Slot for icon shown when FAB is opened; Suggestion: QIcon", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "label", + "vue-properties": [ + { + "name": "opened", + "type": "boolean", + "description": "FAB is opened", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Slot for label", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "QFab - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QFabAction", + "source": { + "module": "quasar", + "symbol": "QFabAction" + }, + "attributes": [ + { + "name": "type", + "value": { + "kind": "expression", + "type": "'a'|'submit'|'button'|'reset'" + }, + "description": "Define the button HTML DOM type", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "default": "\"a\"" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outline' design for Fab button", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "push", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'push' design for Fab button", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'flat' design for Fab button", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "unelevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove shadow", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "padding", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set\n\nExamples:\n16px\n10px 5px\n2rem\nxs\nmd lg", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "glossy", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Apply the glossy effect over the button", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "external-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display label besides the FABs, as external content", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "The label that will be shown when Fab is extended\n\nExamples:\nButton Label", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "label-position", + "value": { + "kind": "expression", + "type": "'top'|'right'|'bottom'|'left'" + }, + "description": "Position of the label around the icon", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "hide-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide the label; Useful for animation purposes where you toggle the visibility of the label", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "label-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the label container\n\nExamples:\nmy-special-class\n:input-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "label-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the label container\n\nExamples:\nbackground-color: #ff0000\n:input-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Apply a rectangle aspect to the FAB", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "anchor", + "value": { + "kind": "expression", + "type": "'start'|'center'|'end'" + }, + "description": "How to align the Fab Action relative to Fab expand side; By default it uses the align specified in QFab", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "to", + "value": { + "kind": "expression", + "type": "string|object" + }, + "description": "Equivalent to Vue Router 'to' property\n\nExamples:\n/home/dashboard\n:to=\"{ name: 'my-route-name' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "replace", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'replace' property", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button", + "type": "boolean" + } + ], + "events": [ + { + "name": "click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "Emitted when user clicks/taps on the component", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestion for this slot: QTooltip", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "icon", + "description": "Slot for icon; Suggestion: QIcon", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "label", + "description": "Slot for label", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + } + ], + "description": "QFabAction - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + { + "name": "QField", + "source": { + "module": "quasar", + "symbol": "QField" + }, + "attributes": [ + { + "name": "error", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Does field have validation errors?", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "error-message", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Validation error message (gets displayed only if 'error' is set to 'true')\n\nExamples:\nUsername must have at least 5 characters", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "no-error-icon", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide error icon when there is an error", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "rules", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules\n\nExamples:\n:rules=\"[ val => val.length <= 3 || 'Please use maximum 3 characters' ]\"\n:rules=\"[ 'fulltime' ]\"\n:rules=\"[ (val, rules) => rules.email(val) || 'Please enter a valid email address' ]\"", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "reactive-rules", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "lazy-rules", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "A text label that will “float” up above the input field, once the field gets focus\n\nExamples:\nUsername", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "stack-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Label will be always shown above the field regardless of field content (if any)", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "hint", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Helper (hint) text which gets placed below your wrapped form component\n\nExamples:\nFill in between 3 and 12 characters", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "hide-hint", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide the helper (hint) text when field doesn't have focus", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "prefix", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Prefix\n\nExamples:\n$", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "suffix", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Suffix\n\nExamples:\n@gmail.com", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "label-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "bg-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "loading", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "clearable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "clear-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Custom icon to use for the clear button when using along with 'clearable' prop\n\nExamples:\nclose", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "filled", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'filled' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "outlined", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outlined' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "outlined-md", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use Material Design 'outlined' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "borderless", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'borderless' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "standout", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)\n\nExamples:\nstandout\nstandout=\"bg-primary text-white\"", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "label-slot", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "bottom-slots", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enables bottom slots ('error', 'hint', 'counter')", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "hide-bottom-space", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "counter", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show an automatic counter on bottom right", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a small standard border-radius for a squared shape of the component", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "item-aligned", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Match inner content alignment to that of QItem", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "autofocus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Focus field on initial component render", + "doc-url": "https://v1.quasar.dev/vue-components/field", + "type": "boolean" + }, + { + "name": "for", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well\n\nExamples:\nmyFieldsId", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "maxlength", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Specify a max length of model\n\nExamples:\n12", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "events": [ + { + "name": "clear", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "The previous value before clearing it", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "description": "When using the 'clearable' property, this event is emitted when the clear icon is clicked", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "description": "Emitted when the model changes, only when used with 'clearable' or the 'control' scoped slot.", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "focus", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "description": "Emitted when component gets focused", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "blur", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "description": "Emitted when component loses focus", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "slots": [ + { + "name": "default", + "description": "Field main content", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "prepend", + "description": "Prepend inner field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "append", + "description": "Append to inner field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "before", + "description": "Prepend outer field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "after", + "description": "Append outer field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "label", + "description": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "counter", + "description": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "loading", + "description": "Override default spinner when component is in loading mode; Use in conjunction with 'loading' prop", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "error", + "vue-properties": [ + { + "name": "id", + "type": "string", + "description": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label\n\nExamples:\nqf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "field", + "type": "object", + "description": "DOM element of the field", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "editable", + "type": "boolean", + "description": "Field is editable", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "focused", + "type": "boolean", + "description": "Field has focus", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "value", + "type": "any", + "description": "Field's value\n\nExamples:\n0.241\nText", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "errorMessage", + "type": "string", + "description": "Error message (from errorMessage prop or generated by rules)\n\nExamples:\nThe field is required", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "description": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "hint", + "vue-properties": [ + { + "name": "id", + "type": "string", + "description": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label\n\nExamples:\nqf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "field", + "type": "object", + "description": "DOM element of the field", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "editable", + "type": "boolean", + "description": "Field is editable", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "focused", + "type": "boolean", + "description": "Field has focus", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "value", + "type": "any", + "description": "Field's value\n\nExamples:\n0.241\nText", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "errorMessage", + "type": "string", + "description": "Error message (from errorMessage prop or generated by rules)\n\nExamples:\nThe field is required", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "description": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "control", + "vue-properties": [ + { + "name": "id", + "type": "string", + "description": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label\n\nExamples:\nqf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "field", + "type": "object", + "description": "DOM element of the field", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "editable", + "type": "boolean", + "description": "Field is editable", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "focused", + "type": "boolean", + "description": "Field has focus", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "floatingLabel", + "type": "boolean", + "description": "Field's label is floating", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "value", + "type": "any", + "description": "Field's value\n\nExamples:\n0.241\nText", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "emitValue", + "type": "Function", + "description": "Function that emits an @input event in the context of the field", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "description": "Slot for controls; Suggestion QSlider, QRange, QKnob, ...", + "doc-url": "https://v1.quasar.dev/vue-components/field" + } + ], + "description": "QField - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/field" + }, + { + "name": "QFile", + "source": { + "module": "quasar", + "symbol": "QFile" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists\n\nExamples:\ncar_id\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "multiple", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allow multiple file uploads", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "accept", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element\n\nExamples:\n.jpg, .pdf, image/*\nimage/jpeg, .pdf", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "capture", + "value": { + "kind": "expression", + "type": "'user'|'environment'" + }, + "description": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "max-file-size", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum size of individual file in bytes\n\nExamples:\n1024\n1048576", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "max-total-size", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum size of all files combined in bytes\n\nExamples:\n1024\n1048576", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "max-files", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum number of files to contain\n\nExamples:\n:max-files=\"5\"\n10", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "filter", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n:filter=\"files => files.filter(file => file.size === 1024)\"", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "error", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Does field have validation errors?", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "error-message", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Validation error message (gets displayed only if 'error' is set to 'true')\n\nExamples:\nUsername must have at least 5 characters", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "no-error-icon", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide error icon when there is an error", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "rules", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules\n\nExamples:\n:rules=\"[ val => val.length <= 3 || 'Please use maximum 3 characters' ]\"\n:rules=\"[ 'fulltime' ]\"\n:rules=\"[ (val, rules) => rules.email(val) || 'Please enter a valid email address' ]\"", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "reactive-rules", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "lazy-rules", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "A text label that will “float” up above the input field, once the field gets focus\n\nExamples:\nUsername", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "stack-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Label will be always shown above the field regardless of field content (if any)", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "hint", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Helper (hint) text which gets placed below your wrapped form component\n\nExamples:\nFill in between 3 and 12 characters", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "hide-hint", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide the helper (hint) text when field doesn't have focus", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "prefix", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Prefix\n\nExamples:\n$", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "suffix", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Suffix\n\nExamples:\n@gmail.com", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "label-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "bg-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "loading", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "clearable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "clear-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Custom icon to use for the clear button when using along with 'clearable' prop\n\nExamples:\nclose", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "filled", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'filled' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "outlined", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outlined' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "outlined-md", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use Material Design 'outlined' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "borderless", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'borderless' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "standout", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)\n\nExamples:\nstandout\nstandout=\"bg-primary text-white\"", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "label-slot", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "bottom-slots", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enables bottom slots ('error', 'hint', 'counter')", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "hide-bottom-space", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "counter", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show an automatic counter on bottom right", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a small standard border-radius for a squared shape of the component", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "item-aligned", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Match inner content alignment to that of QItem", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "autofocus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Focus field on initial component render", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "for", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well\n\nExamples:\nmyFieldsId", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "File|FileList|any[]" + }, + "description": "Model of the component; Must be FileList or Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"myModel\"", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "required": true + }, + { + "name": "append", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Append file(s) to current model rather than replacing them; Has effect only when using 'multiple' mode", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "display-value", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Override default selection string, if not using 'file' or 'selected' scoped slots and if not using 'use-chips' prop\n\nExamples:\nOptions: x, y, z", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "use-chips", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use QChip to show picked files", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "type": "boolean" + }, + { + "name": "counter-label", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Label for the counter; The 'counter' prop is necessary to enable this one\n\nExamples:\n:counter-label=\"counterLabelFn\"", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "input-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the underlying selection container\n\nExamples:\nmy-special-class\n:input-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "input-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the underlying selection container\n\nExamples:\nbackground-color: #ff0000\n:input-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "events": [ + { + "name": "rejected", + "arguments": [ + { + "name": "rejectedEntries", + "type": "any[]", + "description": "Array of { failedPropValidation: string, file: File } Objects for files that do not pass the validation", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "description": "Emitted after files are picked and some do not pass the validation props (accept, max-file-size, max-total-size, filter, etc)", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "clear", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "The previous value before clearing it", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "description": "When using the 'clearable' property, this event is emitted when the clear icon is clicked", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "slots": [ + { + "name": "default", + "description": "Field main content", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "prepend", + "description": "Prepend inner field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "append", + "description": "Append to inner field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "before", + "description": "Prepend outer field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "after", + "description": "Append outer field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "label", + "description": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "counter", + "description": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "loading", + "description": "Override default spinner when component is in loading mode; Use in conjunction with 'loading' prop", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "error", + "vue-properties": [ + { + "name": "id", + "type": "string", + "description": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label\n\nExamples:\nqf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "field", + "type": "object", + "description": "DOM element of the field", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "editable", + "type": "boolean", + "description": "Field is editable", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "focused", + "type": "boolean", + "description": "Field has focus", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "value", + "type": "any", + "description": "Field's value\n\nExamples:\n0.241\nText", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "errorMessage", + "type": "string", + "description": "Error message (from errorMessage prop or generated by rules)\n\nExamples:\nThe field is required", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "description": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "hint", + "vue-properties": [ + { + "name": "id", + "type": "string", + "description": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label\n\nExamples:\nqf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "field", + "type": "object", + "description": "DOM element of the field", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "editable", + "type": "boolean", + "description": "Field is editable", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "focused", + "type": "boolean", + "description": "Field has focus", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "value", + "type": "any", + "description": "Field's value\n\nExamples:\n0.241\nText", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "errorMessage", + "type": "string", + "description": "Error message (from errorMessage prop or generated by rules)\n\nExamples:\nThe field is required", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "description": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "file", + "vue-properties": [ + { + "name": "index", + "type": "number", + "description": "Selection index\n\nExamples:\n0", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "file", + "type": "File", + "description": "File object", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "ref", + "type": "object", + "description": "Reference to the QFile component", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "description": "Override default node to render a file from the user picked list", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "selected", + "vue-properties": [ + { + "name": "files", + "type": "FileList|any[]", + "description": "Array of File objects", + "doc-url": "https://v1.quasar.dev/vue-components/file" + }, + { + "name": "ref", + "type": "object", + "description": "Reference to the QFile component", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "description": "Override default selection slot; Suggestion: QChip", + "doc-url": "https://v1.quasar.dev/vue-components/file" + } + ], + "description": "QFile - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/file", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QFooter", + "source": { + "module": "quasar", + "symbol": "QFooter" + }, + "attributes": [ + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"footerState\"", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "default": "true", + "type": "boolean" + }, + { + "name": "reveal", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide footer", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "type": "boolean" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "type": "boolean" + }, + { + "name": "elevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Adds a default shadow to the footer", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "type": "boolean" + }, + { + "name": "height-hint", + "value": { + "kind": "expression", + "type": "number|String " + }, + "description": "When using SSR, you can optionally hint of the height (in pixels) of the QFooter\n\nExamples:\n150", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "default": "50" + } + ], + "events": [ + { + "name": "reveal", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New 'reveal' state", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer" + } + ], + "description": "Emitted when 'reveal' state gets changed", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component; Suggestion: QToolbar", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer" + } + ], + "description": "QFooter - Quasar component", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QForm", + "source": { + "module": "quasar", + "symbol": "QForm" + }, + "attributes": [ + { + "name": "autofocus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Focus first focusable element on initial component render", + "doc-url": "https://v1.quasar.dev/vue-components/form", + "type": "boolean" + }, + { + "name": "no-error-focus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not try to focus on first component that has a validation error when submitting form", + "doc-url": "https://v1.quasar.dev/vue-components/form", + "type": "boolean" + }, + { + "name": "no-reset-focus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not try to focus on first component when resetting form", + "doc-url": "https://v1.quasar.dev/vue-components/form", + "type": "boolean" + }, + { + "name": "greedy", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Validate all fields in form (by default it stops after finding the first invalid field with synchronous validation)", + "doc-url": "https://v1.quasar.dev/vue-components/form", + "type": "boolean" + } + ], + "events": [ + { + "name": "submit", + "description": "Emitted when all validations have passed when tethered to a submit button", + "doc-url": "https://v1.quasar.dev/vue-components/form" + }, + { + "name": "reset", + "description": "Emitted when all validations have been reset when tethered to a reset button; It is recommended to manually reset the wrapped components models in this handler", + "doc-url": "https://v1.quasar.dev/vue-components/form" + }, + { + "name": "validation-success", + "description": "Emitted after a validation was triggered and all inner Quasar components models are valid", + "doc-url": "https://v1.quasar.dev/vue-components/form" + }, + { + "name": "validation-error", + "arguments": [ + { + "name": "ref", + "type": "object", + "description": "Vue reference to the first component that triggered the validation error", + "doc-url": "https://v1.quasar.dev/vue-components/form" + } + ], + "description": "Emitted after a validation was triggered and at least one of the inner Quasar components models are NOT valid", + "doc-url": "https://v1.quasar.dev/vue-components/form" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/form" + } + ], + "description": "QForm - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/form" + }, + { + "name": "QHeader", + "source": { + "module": "quasar", + "symbol": "QHeader" + }, + "attributes": [ + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"headerState\"", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "default": "true", + "type": "boolean" + }, + { + "name": "reveal", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide header", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "type": "boolean" + }, + { + "name": "reveal-offset", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Amount of scroll (in pixels) that should trigger a 'reveal' state change\n\nExamples:\n:reveal-offset=\"500\"", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "default": "250" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "type": "boolean" + }, + { + "name": "elevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Adds a default shadow to the header", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "type": "boolean" + }, + { + "name": "height-hint", + "value": { + "kind": "expression", + "type": "number|String " + }, + "description": "When using SSR, you can optionally hint of the height (in pixels) of the QHeader\n\nExamples:\n150", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "default": "50" + } + ], + "events": [ + { + "name": "reveal", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New 'reveal' state", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer" + } + ], + "description": "Emitted when 'reveal' state gets changed", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component; Suggestion: QToolbar", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer" + } + ], + "description": "QHeader - Quasar component", + "doc-url": "https://v1.quasar.dev/layout/header-and-footer", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QIcon", + "source": { + "module": "quasar", + "symbol": "QIcon" + }, + "attributes": [ + { + "name": "tag", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "HTML tag to render, unless no icon is supplied or it's an svg icon\n\nExamples:\ndiv\ni", + "doc-url": "https://v1.quasar.dev/vue-components/icon", + "default": "\"i\"" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/icon" + }, + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/icon" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/icon" + }, + { + "name": "left", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Useful if icon is on the left side of something: applies a standard margin on the right side of Icon", + "doc-url": "https://v1.quasar.dev/vue-components/icon", + "type": "boolean" + }, + { + "name": "right", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Useful if icon is on the right side of something: applies a standard margin on the left side of Icon", + "doc-url": "https://v1.quasar.dev/vue-components/icon", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestions: QTooltip or QMenu", + "doc-url": "https://v1.quasar.dev/vue-components/icon" + } + ], + "description": "QIcon - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/icon" + }, + { + "name": "QImg", + "source": { + "module": "quasar", + "symbol": "QImg" + }, + "attributes": [ + { + "name": "ratio", + "value": { + "kind": "expression", + "type": "string|number|string|number" + }, + "description": "Force the component to maintain an aspect ratio\n\nExamples:\n:ratio=\"4/3\"\n:ratio=\"16/9\"\nratio=\"1\"\n(Number format) :ratio=\"16/9\"\n(String format) ratio=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "src", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Path to image\n\nExamples:\n(public folder) src=\"img/something.png\"\n(assets folder) src=\"~assets/my-img.gif\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "srcset", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Same syntax as srcset attribute.\n\nExamples:\nelva-fairy-320w.jpg 320w, elva-fairy-480w.jpg 480w", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "sizes", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Same syntax as sizes attribute.\n\nExamples:\n(max-width: 320px) 280px, (max-width: 480px) 440px, 800px", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "width", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Forces image width; Must also include the unit (px or %)\n\nExamples:\n280px\n70%", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Forces image height; Must also include the unit (px or %)\n\nExamples:\n280px\n70%", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "alt", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Specifies an alternate text for the image, if the image cannot be displayed\n\nExamples:\nTwo cats", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "placeholder-src", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "While waiting for your image to load, you can use a placeholder image\n\nExamples:\n(public folder) src=\"img/some-placeholder.png\"\n(assets folder) src=\"~assets/my-placeholder.gif\"\n(relative path format) :src=\"require('./placeholder.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "basic", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not use transitions; faster render", + "doc-url": "https://v1.quasar.dev/vue-components/img", + "type": "boolean" + }, + { + "name": "contain", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Make sure that the image getting displayed is fully contained, regardless if additional blank space besides the image is needed on horizontal or vertical", + "doc-url": "https://v1.quasar.dev/vue-components/img", + "type": "boolean" + }, + { + "name": "position", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to CSS background-position property\n\nExamples:\n0 0\n20px 50px", + "doc-url": "https://v1.quasar.dev/vue-components/img", + "default": "\"50% 50%\"" + }, + { + "name": "transition", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/img", + "default": "\"fade\"" + }, + { + "name": "img-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the container of image; Does not apply to the caption\n\nExamples:\nmy-special-class\n:img-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "img-style", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "Apply CSS to the container of the image; Does not apply to the caption\n\nExamples:\n:img-style=\"{ transform: 'rotate(45deg)' }\" ", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "spinner-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for default Spinner (unless using a 'loading' slot)\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "spinner-size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name, for default Spinner (unless using a 'loading' slot)\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "no-default-spinner", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not display the default spinner when loading images (unless you are specifying one through the 'loading' slot)", + "doc-url": "https://v1.quasar.dev/vue-components/img", + "type": "boolean" + }, + { + "name": "native-context-menu", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enable the native context menu of the image", + "doc-url": "https://v1.quasar.dev/vue-components/img", + "type": "boolean" + } + ], + "events": [ + { + "name": "load", + "arguments": [ + { + "name": "src", + "type": "string", + "description": "URL of image that has been loaded; useful when using 'srcset' and/or 'sizes'\n\nExamples:\nhttps://some-site.net/some-img.gif", + "doc-url": "https://v1.quasar.dev/vue-components/img" + } + ], + "description": "Emitted when image has been loaded by the browser", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "error", + "arguments": [ + { + "name": "src", + "type": "Error", + "description": "JS Error object", + "doc-url": "https://v1.quasar.dev/vue-components/img" + } + ], + "description": "Emitted when browser could not load the image", + "doc-url": "https://v1.quasar.dev/vue-components/img" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot can be used for captions. See examples", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "loading", + "description": "While image is loading, this slot is being displayed on top of the component; Suggestions: a spinner or text", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "error", + "description": "Optional slot to be used when image could not be loaded; make sure you assign a min-height and min-width to the component through CSS", + "doc-url": "https://v1.quasar.dev/vue-components/img" + } + ], + "description": "QImg - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/img" + }, + { + "name": "QInfiniteScroll", + "source": { + "module": "quasar", + "symbol": "QInfiniteScroll" + }, + "attributes": [ + { + "name": "offset", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Offset (pixels) to bottom of Infinite Scroll container from which the component should start loading more content in advance\n\nExamples:\n:offset=\"250\"", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll", + "default": "500" + }, + { + "name": "debounce", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Debounce amount (in milliseconds)\n\nExamples:\n0\n530", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll", + "default": "100" + }, + { + "name": "initial-index", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Initialize the pagination index (used for the @load event)\n\nExamples:\n2\n3", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll" + }, + { + "name": "scroll-target", + "value": { + "kind": "expression", + "type": "Element|string" + }, + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one\n\nExamples:\n:scroll-target=\"$refs.scrollTarget\"\nscroll-target=\".scroll-target-class\"\nscroll-target=\"#scroll-target-id\"\nscroll-target=\"body\"", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll", + "type": "boolean" + }, + { + "name": "reverse", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Scroll area should behave like a messenger - starting scrolled to bottom and loading when reaching the top", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll", + "type": "boolean" + } + ], + "events": [ + { + "name": "load", + "arguments": [ + { + "name": "index", + "type": "number", + "description": "The index parameter can be used to make some sort of pagination on the content you load. It takes numeric values starting with 1 and incrementing with each call\n\nExamples:\n12", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll" + }, + { + "name": "done", + "type": "Function", + "description": "Function to call when you made all necessary updates. DO NOT forget to call it otherwise your loading message will continue to be displayed", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll" + } + ], + "description": "Emitted when Infinite Scroll needs to load more data", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll" + }, + { + "name": "loading", + "description": "Slot displaying something while loading content; Example: QSpinner", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll" + } + ], + "description": "QInfiniteScroll - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/infinite-scroll" + }, + { + "name": "QInnerLoading", + "source": { + "module": "quasar", + "symbol": "QInnerLoading" + }, + "attributes": [ + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name, or standard size name (xs|sm|md|lg|xl), for the inner Spinner (unless using the default slot)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading", + "default": "\"42px\"" + }, + { + "name": "showing", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "State - loading or not", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading", + "type": "boolean" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette for the inner Spinner (unless using the default slot)\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Add a label; Gets overriden when using the default slot\n\nExamples:\nPlease wait...", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading" + }, + { + "name": "label-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Add CSS class(es) to the label; Works along the 'label' prop only\n\nExamples:\ntext-red q-mt-xl", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading" + }, + { + "name": "label-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Apply custom style to the label; Works along the 'label' prop only\n\nExamples:\nfont-size: 28px\n:label-style=\"{ color: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading" + }, + { + "name": "transition-show", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading", + "default": "\"fade\"" + }, + { + "name": "transition-hide", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading", + "default": "\"fade\"" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot is used for replacing default Spinner; Suggestions: a spinner or text", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading" + } + ], + "description": "QInnerLoading - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/inner-loading" + }, + { + "name": "QInput", + "source": { + "module": "quasar", + "symbol": "QInput" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists\n\nExamples:\ncar_id\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "mask", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Custom mask or one of the predefined mask names\n\nExamples:\n###-##\ndate\ndatetime\ntime\nfulltime\nphone\ncard", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "fill-mask", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "Fills string with specified characters (or underscore if value is not string) to fill mask's length\n\nExamples:\ntrue\n'0'\n'_'", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "reverse-fill-mask", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Fills string from the right side of the mask", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "unmasked-value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model will be unmasked (won't contain tokens/separation characters)", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "error", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Does field have validation errors?", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "error-message", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Validation error message (gets displayed only if 'error' is set to 'true')\n\nExamples:\nUsername must have at least 5 characters", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "no-error-icon", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide error icon when there is an error", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "rules", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules\n\nExamples:\n:rules=\"[ val => val.length <= 3 || 'Please use maximum 3 characters' ]\"\n:rules=\"[ 'fulltime' ]\"\n:rules=\"[ (val, rules) => rules.email(val) || 'Please enter a valid email address' ]\"", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "reactive-rules", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "lazy-rules", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "A text label that will “float” up above the input field, once the field gets focus\n\nExamples:\nUsername", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "stack-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Label will be always shown above the field regardless of field content (if any)", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "hint", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Helper (hint) text which gets placed below your wrapped form component\n\nExamples:\nFill in between 3 and 12 characters", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "hide-hint", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Hide the helper (hint) text when field doesn't have focus", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "prefix", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Prefix\n\nExamples:\n$", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "suffix", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Suffix\n\nExamples:\n@gmail.com", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "label-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "bg-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "loading", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "clearable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "clear-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Custom icon to use for the clear button when using along with 'clearable' prop\n\nExamples:\nclose", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "filled", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'filled' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "outlined", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outlined' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "outlined-md", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use Material Design 'outlined' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "borderless", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'borderless' design for the field", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "standout", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)\n\nExamples:\nstandout\nstandout=\"bg-primary text-white\"", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "label-slot", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "bottom-slots", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enables bottom slots ('error', 'hint', 'counter')", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "hide-bottom-space", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "counter", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show an automatic counter on bottom right", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a small standard border-radius for a squared shape of the component", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "item-aligned", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Match inner content alignment to that of QItem", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "autofocus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Focus field on initial component render", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "for", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well\n\nExamples:\nmyFieldsId", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"myText\"", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "required": true + }, + { + "name": "shadow-text", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Text to be displayed as shadow at the end of the text in the control; Does NOT applies to type=file\n\nExamples:\nrest of the fill value", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "type", + "value": { + "kind": "expression", + "type": "'text'|'password'|'textarea'|'email'|'search'|'tel'|'file'|'number'|'url'|'time'|'date'" + }, + "description": "Input type\n\nExamples:\npassword", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "default": "\"text\"" + }, + { + "name": "debounce", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Debounce amount (in milliseconds) when updating model\n\nExamples:\n0\n530", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "maxlength", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Specify a max length of model\n\nExamples:\n12", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "autogrow", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Make field autogrow along with its content (uses a textarea)", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "type": "boolean" + }, + { + "name": "input-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the underlying input tag\n\nExamples:\nmy-special-class\n:input-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "input-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the underlying input tag\n\nExamples:\nbackground-color: #ff0000\n:input-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "events": [ + { + "name": "clear", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "The previous value before clearing it", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "description": "When using the 'clearable' property, this event is emitted when the clear icon is clicked", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "string|number", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "focus", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "description": "Emitted when component gets focused", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "blur", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "description": "Emitted when component loses focus", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "slots": [ + { + "name": "default", + "description": "Field main content", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "prepend", + "description": "Prepend inner field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "append", + "description": "Append to inner field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "before", + "description": "Prepend outer field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "after", + "description": "Append outer field; Suggestions: QIcon, QBtn", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "label", + "description": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "counter", + "description": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "loading", + "description": "Override default spinner when component is in loading mode; Use in conjunction with 'loading' prop", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "error", + "vue-properties": [ + { + "name": "id", + "type": "string", + "description": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label\n\nExamples:\nqf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "field", + "type": "object", + "description": "DOM element of the field", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "editable", + "type": "boolean", + "description": "Field is editable", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "focused", + "type": "boolean", + "description": "Field has focus", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "value", + "type": "any", + "description": "Field's value\n\nExamples:\n0.241\nText", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "errorMessage", + "type": "string", + "description": "Error message (from errorMessage prop or generated by rules)\n\nExamples:\nThe field is required", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "description": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "hint", + "vue-properties": [ + { + "name": "id", + "type": "string", + "description": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label\n\nExamples:\nqf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "field", + "type": "object", + "description": "DOM element of the field", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "editable", + "type": "boolean", + "description": "Field is editable", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "focused", + "type": "boolean", + "description": "Field has focus", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "value", + "type": "any", + "description": "Field's value\n\nExamples:\n0.241\nText", + "doc-url": "https://v1.quasar.dev/vue-components/input" + }, + { + "name": "errorMessage", + "type": "string", + "description": "Error message (from errorMessage prop or generated by rules)\n\nExamples:\nThe field is required", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "description": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "doc-url": "https://v1.quasar.dev/vue-components/input" + } + ], + "description": "QInput - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/input", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QIntersection", + "source": { + "module": "quasar", + "symbol": "QIntersection" + }, + "attributes": [ + { + "name": "tag", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "HTML tag to render\n\nExamples:\ndiv\nspan\nblockquote", + "doc-url": "https://v1.quasar.dev/vue-components/intersection", + "default": "\"div\"" + }, + { + "name": "once", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Get triggered only once", + "doc-url": "https://v1.quasar.dev/vue-components/intersection", + "type": "boolean" + }, + { + "name": "ssr-prerender", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Pre-render content on server side if using SSR (use it to pre-render above the fold content)", + "doc-url": "https://v1.quasar.dev/vue-components/intersection", + "type": "boolean" + }, + { + "name": "root", + "value": { + "kind": "expression", + "type": "Element" + }, + "description": "[Intersection API root prop] Lets you define an alternative to the viewport as your root (through its DOM element); It is important to keep in mind that root needs to be an ancestor of the observed element\n\nExamples:\n$refs.myTable.$el\ngetElementById(\"myTable\")", + "doc-url": "https://v1.quasar.dev/vue-components/intersection" + }, + { + "name": "margin", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "[Intersection API rootMargin prop] Allows you to specify the margins for the root, effectively allowing you to either grow or shrink the area used for intersections\n\nExamples:\n-20px 0px\n10px 20px 30px 40px", + "doc-url": "https://v1.quasar.dev/vue-components/intersection" + }, + { + "name": "threshold", + "value": { + "kind": "expression", + "type": "any[]|number" + }, + "description": "[Intersection API threshold prop] Threshold(s) at which to trigger, specified as a ratio, or list of ratios, of (visible area / total area) of the observed element\n\nExamples:\n[ 0, 0.25, 0.5, 0.75, 1 ]\n:threshold=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/intersection" + }, + { + "name": "transition", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/intersection" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disable visibility observable (content will remain as it was, visible or hidden)", + "doc-url": "https://v1.quasar.dev/vue-components/intersection", + "type": "boolean" + } + ], + "events": [ + { + "name": "visibility", + "arguments": [ + { + "name": "isVisible", + "type": "boolean", + "description": "Visibility status (true/false)", + "doc-url": "https://v1.quasar.dev/vue-components/intersection" + } + ], + "description": "Fires when visibility changes", + "doc-url": "https://v1.quasar.dev/vue-components/intersection" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/intersection" + } + ], + "description": "QIntersection - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/intersection" + }, + { + "name": "QItem", + "source": { + "module": "quasar", + "symbol": "QItem" + }, + "attributes": [ + { + "name": "tag", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "HTML tag to render; Suggestion: use 'label' when encapsulating a QCheckbox/QRadio/QToggle so that when user clicks/taps on the whole item it will trigger a model change for the mentioned components\n\nExamples:\na\nlabel\ndiv", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "default": "\"div\"" + }, + { + "name": "to", + "value": { + "kind": "expression", + "type": "string|object" + }, + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used\n\nExamples:\n/home/dashboard\n:to=\"{ name: 'my-route-name' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "exact", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "append", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "replace", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to Vue Router 'active-class' property\n\nExamples:\nmy-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "exact-active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to Vue Router 'active-class' property\n\nExamples:\nmy-exact-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "href", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props\n\nExamples:\nhttp://quasar.dev", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "target", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props\n\nExamples:\n_blank\n_self\n_parent\n_top", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "active", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put item into 'active' state", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "clickable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Is QItem clickable? If it's the case, then it will add hover effects and emit 'click' events", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "inset-level", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Apply an inset; Useful when avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu\n\nExamples:\n:inset-level=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "manual-focus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put item into a manual focus state; Enables 'focused' prop which will determine if item is focused or not, rather than relying on native hover/focus states", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "focused", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Determines focus state, ONLY if 'manual-focus' is enabled / set to true", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + } + ], + "events": [ + { + "name": "click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "navigateFn", + "type": "Function", + "description": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + } + ], + "description": "Emitted when the component is clicked", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where QItem's content goes", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + } + ], + "description": "QItem - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "QItemLabel", + "source": { + "module": "quasar", + "symbol": "QItemLabel" + }, + "attributes": [ + { + "name": "overline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Renders an overline label", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "caption", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Renders a caption label", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "header", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Renders a header label", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "lines", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Apply ellipsis when there's not enough space to render on the specified number of lines;\n\nExamples:\n1\n3\n:lines=\"2\"", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + } + ], + "slots": [ + { + "name": "default", + "description": "The content of the label; Suggestion: text", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + } + ], + "description": "QItemLabel - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "QItemSection", + "source": { + "module": "quasar", + "symbol": "QItemSection" + }, + "attributes": [ + { + "name": "avatar", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Render an avatar item side (does not needs 'side' prop to be set)", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "thumbnail", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Render a thumbnail item side (does not needs 'side' prop to be set)", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "side", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Renders as a side of the item", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "top", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Align content to top (useful for multi-line items)", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "no-wrap", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not wrap text (useful for item's main content)", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Section's actual content", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + } + ], + "description": "QItemSection - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "QList", + "source": { + "module": "quasar", + "symbol": "QList" + }, + "attributes": [ + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "separator", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a separator between contained items", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + }, + { + "name": "padding", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a material design-like padding on top and bottom", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where the content goes; Suggestion: QItem, QExpansionItem, ...", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + } + ], + "description": "QList - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + { + "name": "QKnob", + "source": { + "module": "quasar", + "symbol": "QKnob" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Any number to indicate the given value of the knob. Either use this property (along with a listener for 'input' event) OR use the v-model directive\n\nExamples:\nv-model=\"myValue\"", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "min", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "The minimum value that the model (the knob value) should start at\n\nExamples:\n20\n5", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "max", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "The maximum value that the model (the knob value) should go to\n\nExamples:\n100\n50", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "inner-min", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop\n\nExamples:\n:inner-min=\"0\"", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "inner-max", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop\n\nExamples:\n:inner-max=\"100\"", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "step", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "A number representing steps in the value of the model, while adjusting the knob\n\nExamples:\n1\n5", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "default": "\"1\"" + }, + { + "name": "reverse", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Reverses the direction of progress", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "type": "boolean" + }, + { + "name": "instant-feedback", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "No animation when model changes", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "type": "boolean" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "center-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for the center part of the component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "track-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for the track of the component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "font-size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size\n\nExamples:\n1em\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "default": "\"0.25em\"" + }, + { + "name": "thickness", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size\n\nExamples:\n1\n0.3", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "default": "0.2" + }, + { + "name": "angle", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Angle to rotate progress arc by\n\nExamples:\n0\n40\n90", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "show-value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "type": "boolean" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "number", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "change", + "arguments": [ + { + "name": "value", + "type": "number", + "description": "New model value\n\nExamples:\n12", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + } + ], + "description": "Fires at the end of a knob's adjustment and offers the value of the model", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + }, + { + "name": "drag-value", + "arguments": [ + { + "name": "value", + "type": "number", + "description": "New model value\n\nExamples:\n12", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + } + ], + "description": "The value of the model while dragging is still in progress", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/knob" + } + ], + "description": "QKnob - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/knob", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QLayout", + "source": { + "module": "quasar", + "symbol": "QLayout" + }, + "attributes": [ + { + "name": "view", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Defines how your layout components (header/footer/drawer) should be placed on screen; See docs examples\n\nExamples:\nhHh lpR fFf", + "doc-url": "https://v1.quasar.dev/layout/layout", + "default": "\"hhh lpr fff\"" + }, + { + "name": "container", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Containerize the layout which means it changes the default behavior of expanding to the whole window; Useful (but not limited to) for when using on a QDialog", + "doc-url": "https://v1.quasar.dev/layout/layout", + "type": "boolean" + } + ], + "events": [ + { + "name": "resize", + "arguments": [ + { + "name": "size", + "type": "object", + "description": "New size", + "doc-url": "https://v1.quasar.dev/layout/layout" + } + ], + "description": "Emitted when layout size (height, width) changes", + "doc-url": "https://v1.quasar.dev/layout/layout" + }, + { + "name": "scroll", + "arguments": [ + { + "name": "details", + "type": "object", + "description": "Scroll details", + "doc-url": "https://v1.quasar.dev/layout/layout" + } + ], + "description": "Emitted when user scrolls within layout", + "doc-url": "https://v1.quasar.dev/layout/layout" + }, + { + "name": "scroll-height", + "arguments": [ + { + "name": "height", + "type": "number", + "description": "New scroll height of layout\n\nExamples:\n1442", + "doc-url": "https://v1.quasar.dev/layout/layout" + } + ], + "description": "Emitted when the scroll size of layout changes", + "doc-url": "https://v1.quasar.dev/layout/layout" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestion: QHeader, QFooter, QDrawer, QPageContainer", + "doc-url": "https://v1.quasar.dev/layout/layout" + } + ], + "description": "QLayout - Quasar component", + "doc-url": "https://v1.quasar.dev/layout/layout" + }, + { + "name": "QLinearProgress", + "source": { + "module": "quasar", + "symbol": "QLinearProgress" + }, + "attributes": [ + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Progress value (0.0 < x < 1.0)\n\nExamples:\n:value=\"0.28\"", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress" + }, + { + "name": "buffer", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Optional buffer value (0.0 < x < 1.0)\n\nExamples:\n:buffer=\"0.78\"", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress" + }, + { + "name": "track-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component's track from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress", + "type": "boolean" + }, + { + "name": "reverse", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Reverse direction of progress", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress", + "type": "boolean" + }, + { + "name": "stripe", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Draw stripes; For determinate state only (for performance reasons)", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress", + "type": "boolean" + }, + { + "name": "indeterminate", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component into indeterminate mode", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress", + "type": "boolean" + }, + { + "name": "query", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component into query mode", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a small standard border-radius for a squared shape of the component", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress", + "type": "boolean" + }, + { + "name": "instant-feedback", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "No transition when model changes", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestion: QTooltip", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress" + } + ], + "description": "QLinearProgress - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/linear-progress", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QMarkupTable", + "source": { + "module": "quasar", + "symbol": "QMarkupTable" + }, + "attributes": [ + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 'flat' design (no default shadow)", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table", + "type": "boolean" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table", + "type": "boolean" + }, + { + "name": "separator", + "value": { + "kind": "expression", + "type": "'horizontal'|'vertical'|'cell'|'none'" + }, + "description": "Use a separator/border between rows, columns or all cells\n\nExamples:\ncell", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table", + "default": "\"horizontal\"" + }, + { + "name": "wrap-cells", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Wrap text within table cells", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table" + } + ], + "description": "QMarkupTable - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/markup-table" + }, + { + "name": "QMenu", + "source": { + "module": "quasar", + "symbol": "QMenu" + }, + "attributes": [ + { + "name": "target", + "value": { + "kind": "expression", + "type": "boolean|string|Element" + }, + "description": "Configure a target element to trigger component toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) or a DOM element it attaches the events to the specified DOM element (if it exists)\n\nExamples:\n:target=\"false\"\n:target=\"$refs.target\"\ntarget=\".my-parent\"\ntarget=\"#target-id\"", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "default": "true" + }, + { + "name": "no-parent-event", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Skips attaching events to the target DOM element (that trigger the element to get shown)", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "context-menu", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the component to behave like a context menu, which opens with a right mouse click (or long tap on mobile)", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the content\n\nExamples:\nmy-special-class\n:content-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "content-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the content\n\nExamples:\nbackground-color: #ff0000\n:content-style=\"{ color: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "fit", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the menu to match at least the full width of its target", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "cover", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the menu to cover its target. When used, the 'self' and 'fit' props are no longer effective", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "anchor", + "value": { + "kind": "expression", + "type": "'top left'|'top middle'|'top right'|'top start'|'top end'|'center left'|'center middle'|'center right'|'center start'|'center end'|'bottom left'|'bottom middle'|'bottom right'|'bottom start'|'bottom end'" + }, + "description": "Two values setting the starting position or anchor point of the menu relative to its target\n\nExamples:\ntop left\nbottom right", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "self", + "value": { + "kind": "expression", + "type": "'top left'|'top middle'|'top right'|'top start'|'top end'|'center left'|'center middle'|'center right'|'center start'|'center end'|'bottom left'|'bottom middle'|'bottom right'|'bottom start'|'bottom end'" + }, + "description": "Two values setting the menu's own position relative to its target\n\nExamples:\ntop left\nbottom right", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "offset", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "An array of two numbers to offset the menu horizontally and vertically in pixels\n\nExamples:\n[8, 8]\n[5, 10]", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "scroll-target", + "value": { + "kind": "expression", + "type": "Element|string" + }, + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one\n\nExamples:\n:scroll-target=\"$refs.scrollTarget\"\nscroll-target=\".scroll-target-class\"\nscroll-target=\"#scroll-target-id\"\nscroll-target=\"body\"", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "touch-position", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows for the target position to be set by the mouse position, when the target of the menu is either clicked or touched", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "persistent", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "no-route-dismiss", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "auto-close", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "separate-close-popup", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Separate from parent menu, marking it as a separate closing point for v-close-popup (without this, chained menus close all together)", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Forces content to have squared borders", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "no-refocus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "(Accessibility) When Menu gets hidden, do not refocus on the DOM element that previously had focus", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "no-focus", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "(Accessibility) When Menu gets shown, do not switch focus on it", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "type": "boolean" + }, + { + "name": "min-height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The minimum height of the menu; Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "min-width", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The minimum width of the menu; Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "max-height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The maximum height of the menu; Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "max-width", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The maximum width of the menu; Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "transition-show", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "default": "\"fade\"" + }, + { + "name": "transition-hide", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "default": "\"fade\"" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New state (showing/hidden)", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + } + ], + "description": "Emitted when showing/hidden state changes; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + } + ], + "description": "Emitted after component has triggered show()", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "before-show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + } + ], + "description": "Emitted when component triggers show() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + } + ], + "description": "Emitted after component has triggered hide()", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "before-hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + } + ], + "description": "Emitted when component triggers hide() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + }, + { + "name": "escape-key", + "description": "Emitted when ESC key is pressed; Does not get emitted if Menu is 'persistent'", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/menu" + } + ], + "description": "QMenu - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/menu", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QNoSsr", + "source": { + "module": "quasar", + "symbol": "QNoSsr" + }, + "attributes": [ + { + "name": "tag", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "HTML tag to render\n\nExamples:\ndiv\nspan\nblockquote", + "doc-url": "https://v1.quasar.dev/vue-components/no-ssr", + "default": "\"div\"" + }, + { + "name": "placeholder", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Text to display on server-side render (unless using 'placeholder' slot)\n\nExamples:\nThis is server-side only", + "doc-url": "https://v1.quasar.dev/vue-components/no-ssr" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot is used to render content on client-side", + "doc-url": "https://v1.quasar.dev/vue-components/no-ssr" + }, + { + "name": "placeholder", + "description": "Slot used as placeholder on server-side render, which gets replaced by the default slot on client-side; overrides 'placeholder' prop", + "doc-url": "https://v1.quasar.dev/vue-components/no-ssr" + } + ], + "description": "QNoSsr - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/no-ssr" + }, + { + "name": "QOptionGroup", + "source": { + "module": "quasar", + "symbol": "QOptionGroup" + }, + "attributes": [ + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"group\"", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + }, + { + "name": "options", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Array of objects with value, label, and disable (optional) props. The binary components will be created according to this array; Props from QToggle, QCheckbox or QRadio can also be added as key/value pairs to control the components singularly\n\nExamples:\n:options=\"[ { label: 'Option 1', value: 'op1' }, { label: 'Option 2', value: 'op2' }, { label: 'Option 3', value: 'op3', disable: true } ]\"", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + }, + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the controls; Useful if dealing with forms submitted directly to a URL\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + }, + { + "name": "type", + "value": { + "kind": "expression", + "type": "'radio'|'checkbox'|'toggle'" + }, + "description": "The type of input component to be used\n\nExamples:\ncheckbox", + "doc-url": "https://v1.quasar.dev/vue-components/option-group", + "default": "\"radio\"" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + }, + { + "name": "keep-color", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Should the color (if specified any) be kept when input components are unticked?", + "doc-url": "https://v1.quasar.dev/vue-components/option-group", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/option-group", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/option-group", + "type": "boolean" + }, + { + "name": "left-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Label (if any specified) should be displayed on the left side of the input components", + "doc-url": "https://v1.quasar.dev/vue-components/option-group", + "type": "boolean" + }, + { + "name": "inline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show input components as inline-block rather than each having their own row", + "doc-url": "https://v1.quasar.dev/vue-components/option-group", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/option-group", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + } + ], + "slots": [ + { + "name": "label", + "vue-properties": [ + { + "name": "opt", + "type": "object", + "description": "The corresponding option entry from the 'options' prop", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + } + ], + "description": "Generic slot for all labels", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + }, + { + "name": "label-[name]", + "vue-properties": [ + { + "name": "opt", + "type": "object", + "description": "The corresponding option entry from the 'options' prop", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + } + ], + "description": "Slot to define the specific label for the option at '[name]' where name is a 0-based index; Overrides the generic 'label' slot if used", + "doc-url": "https://v1.quasar.dev/vue-components/option-group" + } + ], + "description": "QOptionGroup - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/option-group", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QPageScroller", + "source": { + "module": "quasar", + "symbol": "QPageScroller" + }, + "attributes": [ + { + "name": "position", + "value": { + "kind": "expression", + "type": "'top-right'|'top-left'|'bottom-right'|'bottom-left'|'top'|'right'|'bottom'|'left'" + }, + "description": "Page side/corner to stick to\n\nExamples:\ntop-right", + "doc-url": "https://v1.quasar.dev/layout/page-scroller", + "default": "\"bottom-right\"" + }, + { + "name": "offset", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "An array of two numbers to offset the component horizontally and vertically in pixels\n\nExamples:\n[8, 8]\n[5, 10]", + "doc-url": "https://v1.quasar.dev/layout/page-scroller", + "default": "[18,18]" + }, + { + "name": "expand", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop", + "doc-url": "https://v1.quasar.dev/layout/page-scroller", + "type": "boolean" + }, + { + "name": "scroll-offset", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Scroll offset (in pixels) from which point the component is shown on page; Measured from the top of the page (or from the bottom if in 'reverse' mode)\n\nExamples:\n550", + "doc-url": "https://v1.quasar.dev/layout/page-scroller", + "default": "1000" + }, + { + "name": "reverse", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Work in reverse (shows when scrolling to the top of the page and scrolls to bottom when triggered)", + "doc-url": "https://v1.quasar.dev/layout/page-scroller", + "type": "boolean" + }, + { + "name": "duration", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Duration (in milliseconds) of the scrolling until it reaches its target\n\nExamples:\n500", + "doc-url": "https://v1.quasar.dev/layout/page-scroller", + "default": "300" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/layout/page-scroller" + } + ], + "description": "QPageScroller - Quasar component", + "doc-url": "https://v1.quasar.dev/layout/page-scroller" + }, + { + "name": "QPageSticky", + "source": { + "module": "quasar", + "symbol": "QPageSticky" + }, + "attributes": [ + { + "name": "position", + "value": { + "kind": "expression", + "type": "'top-right'|'top-left'|'bottom-right'|'bottom-left'|'top'|'right'|'bottom'|'left'" + }, + "description": "Page side/corner to stick to\n\nExamples:\ntop-right", + "doc-url": "https://v1.quasar.dev/layout/page-sticky", + "default": "\"bottom-right\"" + }, + { + "name": "offset", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "An array of two numbers to offset the component horizontally and vertically in pixels\n\nExamples:\n[8, 8]\n[5, 10]", + "doc-url": "https://v1.quasar.dev/layout/page-sticky" + }, + { + "name": "expand", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop", + "doc-url": "https://v1.quasar.dev/layout/page-sticky", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/layout/page-sticky" + } + ], + "description": "QPageSticky - Quasar component", + "doc-url": "https://v1.quasar.dev/layout/page-sticky" + }, + { + "name": "QPage", + "source": { + "module": "quasar", + "symbol": "QPage" + }, + "attributes": [ + { + "name": "padding", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default responsive page padding", + "doc-url": "https://v1.quasar.dev/layout/page", + "type": "boolean" + }, + { + "name": "style-fn", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Override default CSS style applied to the component (sets minHeight); Function(offset: Number) => CSS props/value: Object; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n(see source code)", + "doc-url": "https://v1.quasar.dev/layout/page", + "default": "\"(see source code)\"" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/layout/page" + } + ], + "description": "QPage - Quasar component", + "doc-url": "https://v1.quasar.dev/layout/page" + }, + { + "name": "QPageContainer", + "source": { + "module": "quasar", + "symbol": "QPageContainer" + }, + "slots": [ + { + "name": "default", + "description": "Encapsulates a QPage (either directly or through )", + "doc-url": "https://v1.quasar.dev/layout/page" + } + ], + "description": "QPageContainer - Quasar component", + "doc-url": "https://v1.quasar.dev/layout/page" + }, + { + "name": "QPagination", + "source": { + "module": "quasar", + "symbol": "QPagination" + }, + "attributes": [ + { + "name": "value", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Current page (must be between min/max)\n\nExamples:\n3", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "required": true + }, + { + "name": "min", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Minimum page (must be lower than 'max')\n\nExamples:\n3", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "default": "1" + }, + { + "name": "max", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Number of last page (must be higher than 'min')\n\nExamples:\n10", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "required": true, + "default": "100" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color (useful when you are using it along with the 'input' prop)", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Button size in CSS units, including unit name\n\nExamples:\n20px", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "input", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use an input instead of buttons", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "icon-prev", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "icon-next", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "icon-first", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "icon-last", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "to-fn", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Generate link for page buttons; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n:to-fn=\"page => ({ query: { page } })\"", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "boundary-links", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show boundary button links", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "boundary-numbers", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Always show first and last page buttons (if not using 'input')", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "direction-links", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show direction buttons", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "ellipses", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Show ellipses (...) when pages are available", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "max-pages", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum number of page links to display at a time; 0 means Infinite\n\nExamples:\n5", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'flat' design for non-active buttons (it's the default option)", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "outline", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'outline' design for non-active buttons", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "unelevated", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Remove shadow for non-active buttons", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "push", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use 'push' design for non-active buttons", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name from the Quasar Color Palette for the non-active buttons\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "default": "\"primary\"" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Text color name from the Quasar Color Palette for the ACTIVE buttons\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "active-design", + "value": { + "kind": "expression", + "type": "'flat'|'outline'|'push'|'unelevated'" + }, + "description": "The design of the ACTIVE button, similar to the flat/outline/push/unelevated props (but those are used for non-active buttons)", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "active-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name from the Quasar Color Palette for the ACTIVE button\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "default": "\"primary\"" + }, + { + "name": "active-text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Text color name from the Quasar Color Palette for the ACTIVE button\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "round", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Makes a circle shaped button for all buttons", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "rounded", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a more prominent border-radius for a squared shape button for all buttons", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "glossy", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a glossy effect for all buttons", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "type": "boolean" + }, + { + "name": "gutter", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Apply custom gutter; Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl) - does not work in IE11\n\nExamples:\n16px\n10px 5px\n2rem\nxs\nmd lg\n2px 2px 5px 7px", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "default": "\"2px\"" + }, + { + "name": "padding", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set\n\nExamples:\n16px\n10px 5px\n2rem\nxs\nmd lg\n2px 2px 5px 7px", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "input-style", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "Style definitions to be attributed to the input (if using one)\n\nExamples:\nbackground-color: #ff0000\n:input-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "input-class", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "Class definitions to be attributed to the input (if using one)\n\nExamples:\nmy-special-class\n:input-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + }, + { + "name": "ripple", + "value": { + "kind": "expression", + "type": "boolean|object" + }, + "description": "Configure buttons material ripple (disable it by setting it to 'false' or supply a config object); Does not applies to boundary and ellipsis buttons\n\nExamples:\nfalse\n{ early: true, center: true, color: 'teal', keyCodes: [] }", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "default": "true" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "string", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/pagination" + } + ], + "slots": [], + "description": "QPagination - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/pagination", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QParallax", + "source": { + "module": "quasar", + "symbol": "QParallax" + }, + "attributes": [ + { + "name": "src", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Path to image (unless a 'media' slot is used)\n\nExamples:\n(public folder) src=\"img/something.png\"\n(assets folder) src=\"~assets/my-img.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://some-site.net/some-img.jpg\"", + "doc-url": "https://v1.quasar.dev/vue-components/parallax" + }, + { + "name": "height", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Height of component (in pixels)\n\nExamples:\n:height=\"1000\"", + "doc-url": "https://v1.quasar.dev/vue-components/parallax", + "default": "500" + }, + { + "name": "speed", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Speed of parallax effect (0.0 < x < 1.0)\n\nExamples:\n:speed=\"0.24\"", + "doc-url": "https://v1.quasar.dev/vue-components/parallax" + }, + { + "name": "scroll-target", + "value": { + "kind": "expression", + "type": "Element|string" + }, + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one\n\nExamples:\n:scroll-target=\"$refs.scrollTarget\"\nscroll-target=\".scroll-target-class\"\nscroll-target=\"#scroll-target-id\"\nscroll-target=\"body\"", + "doc-url": "https://v1.quasar.dev/vue-components/parallax" + } + ], + "events": [ + { + "name": "scroll", + "arguments": [ + { + "name": "percentage", + "type": "number", + "description": "Number between 0.0 and 1.0 defining the scrolled percentage of the component\n\nExamples:\n0.234", + "doc-url": "https://v1.quasar.dev/vue-components/parallax" + } + ], + "description": "Emitted when scrolling occurs", + "doc-url": "https://v1.quasar.dev/vue-components/parallax" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot can be used for content that gets displayed on top of the component", + "doc-url": "https://v1.quasar.dev/vue-components/parallax" + }, + { + "name": "media", + "description": "Slot for describing or
element's wrapper (which is a DIV)\n\nExamples:\nbackground-color: #ff0000\n:table-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "table-class", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "CSS classes to apply to native HTML
element's wrapper (which is a DIV)\n\nExamples:\nmy-special-class\n:table-class=\"{ 'my-special-class': [Boolean condition] }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "table-header-style", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "CSS style to apply to header of native HTML
(which is a TR)\n\nExamples:\nbackground-color: #ff0000\n:table-header-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "table-header-class", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "CSS classes to apply to header of native HTML
(which is a TR)\n\nExamples:\nmy-special-class\n:table-header-class=\"{ 'my-special-class': [Boolean condition] }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "card-container-style", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "CSS style to apply to the cards container (when in grid mode)\n\nExamples:\nbackground-color: #ff0000\n:card-container-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "card-container-class", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "CSS classes to apply to the cards container (when in grid mode)\n\nExamples:\nmy-special-class\njustify-center\n:card-container-class=\"{ 'my-special-class': [Boolean condition] }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "card-style", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "CSS style to apply to the card (when in grid mode) or container card (when not in grid mode)\n\nExamples:\nbackground-color: #ff0000\n:card-style=\"{ backgroundColor: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "card-class", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "CSS classes to apply to the card (when in grid mode) or container card (when not in grid mode)\n\nExamples:\nmy-special-class\n:card-class=\"{ 'my-special-class': [Boolean condition] }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "title-class", + "value": { + "kind": "expression", + "type": "string|any[]|object" + }, + "description": "CSS classes to apply to the title (if using 'title' prop)\n\nExamples:\nmy-special-class\ntext-h1\n:title-class=\"{ 'text-h1': [Boolean condition] }\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "filter", + "value": { + "kind": "expression", + "type": "string|object" + }, + "description": "String/Object to filter table with; When using an Object it requires 'filter-method' to also be specified since it will be a custom filtering\n\nExamples:\n:filter=\"myFilterInput\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "filter-method", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "The actual filtering mechanism; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n(see source code)", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "default": "\"(see source code)\"" + }, + { + "name": "pagination", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "Pagination object; You can use the '.sync' modifier on it if you want to have access on the current pagination in your components; When not using the .sync modifier it simply initializes the pagination on first render\n\nExamples:\n:pagination.sync=\"myPagination\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "rows-per-page-options", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Options for user to pick (Numbers); Number 0 means 'Show all rows in one page'\n\nExamples:\n:rows-per-page-options=\"[10, 20]\"", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "default": "\"[ 3, 5, 7, 10, 15, 20, 25, 50, 0 ]\"" + }, + { + "name": "selection", + "value": { + "kind": "expression", + "type": "'single'|'multiple'|'none'" + }, + "description": "Selection type\n\nExamples:\nmultiple", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "default": "\"none\"" + }, + { + "name": "selected", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Keeps the user selection array\n\nExamples:\n:selected.sync=\"selection\"", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "default": "\"[]\"" + }, + { + "name": "expanded", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Keeps the array with expanded rows keys\n\nExamples:\n:expanded.sync=\"expanded\"", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "default": "\"[]\"" + }, + { + "name": "sort-method", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "The actual sort mechanism. Function (rows, sortBy, descending) => sorted rows; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n(see source code)", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "default": "\"(see source code)\"" + } + ], + "events": [ + { + "name": "row-click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row", + "type": "object", + "description": "The row upon which user has clicked/tapped", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "index", + "type": "number", + "description": "Index of the row in the current page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Emitted when user clicks/taps on a row; Is not emitted when using body/row/item scoped slots", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row-dblclick", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row", + "type": "object", + "description": "The row upon which user has double clicked/tapped", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "index", + "type": "number", + "description": "Index of the row in the current page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Emitted when user quickly double clicks/taps on a row; Is not emitted when using body/row/item scoped slots; Please check JS dblclick event support before using", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row-contextmenu", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row", + "type": "object", + "description": "The row upon which user has right clicked/long tapped", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "index", + "type": "number", + "description": "Index of the row in the current page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Emitted when user right clicks/long taps on a row; Is not emitted when using body/row/item scoped slots", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "request", + "arguments": [ + { + "name": "requestProp", + "type": "object", + "description": "Props of the request", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Emitted when a server request is triggered", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selection", + "arguments": [ + { + "name": "details", + "type": "object", + "description": "Selection details", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Emitted when user selects/unselects row(s)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "update:pagination", + "arguments": [ + { + "name": "newPagination", + "type": "object", + "description": "The updated pagination object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Used by Vue on 'pagination.sync' prop for updating its value", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "update:selected", + "arguments": [ + { + "name": "newSelected", + "type": "any[]", + "description": "The updated selected array\n\nExamples:\n[ { name: 'Frozen Yogurt', calories: 159, fat: 6 } ]", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Used by Vue on 'selected.sync' prop for updating its value", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "update:expanded", + "arguments": [ + { + "name": "newExpanded", + "type": "any[]", + "description": "The updated expanded array\n\nExamples:\n[ 'row-a', 'row-b' ]", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Used by Vue on 'expanded.sync' prop for updating its value", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "virtual-scroll", + "arguments": [ + { + "name": "details", + "type": "object", + "description": "Object of properties on the new scroll position", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Emitted when the virtual scroll occurs, if using virtual scroll", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "slots": [ + { + "name": "loading", + "description": "Override default effect when table is in loading state; Suggestion: QInnerLoading", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "item", + "vue-properties": [ + { + "name": "key", + "type": "any", + "description": "Row/Item's key", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row", + "type": "object", + "description": "Row/Item object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "rowIndex", + "type": "number", + "description": "Row/Item's index (0 based) in the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pageIndex", + "type": "number", + "description": "Row/Item's index (0 based) in the current page of the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row/item selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row/item expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to use for defining an item when in 'grid' mode; Suggestion: QCard", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "body", + "vue-properties": [ + { + "name": "key", + "type": "any", + "description": "Row's key", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row", + "type": "object", + "description": "Row object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "rowIndex", + "type": "number", + "description": "Row's index (0 based) in the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pageIndex", + "type": "number", + "description": "Row's index (0 based) in the current page of the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "__trClass", + "type": "string", + "description": "Internal prop passed down to QTr (if used)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how a body row looks like; Suggestion: QTr + Td", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "body-cell", + "vue-properties": [ + { + "name": "col", + "type": "object", + "description": "Column definition for column associated with table cell", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "value", + "type": "any", + "description": "Parsed/Formatted value of table cell", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "key", + "type": "any", + "description": "Row's key", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row", + "type": "object", + "description": "Row object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "rowIndex", + "type": "number", + "description": "Row's index (0 based) in the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pageIndex", + "type": "number", + "description": "Row's index (0 based) in the current page of the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how all body cells look like; Suggestion: QTd", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "body-cell-[name]", + "vue-properties": [ + { + "name": "col", + "type": "object", + "description": "Column definition for column associated with table cell", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "value", + "type": "any", + "description": "Parsed/Formatted value of table cell", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "key", + "type": "any", + "description": "Row's key", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row", + "type": "object", + "description": "Row object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "rowIndex", + "type": "number", + "description": "Row's index (0 based) in the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pageIndex", + "type": "number", + "description": "Row's index (0 based) in the current page of the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how a specific column cell looks like; replace '[name]' with column name (from columns definition object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "header", + "vue-properties": [ + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "__trClass", + "type": "string", + "description": "Internal prop passed down to QTr (if used)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "header", + "type": "boolean", + "description": "Internal prop passed down to QTh (if used); Always 'true'", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how header looks like; Suggestion: QTr + QTh", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "header-cell", + "vue-properties": [ + { + "name": "col", + "type": "object", + "description": "Column definition associated to header cell", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how each header cell looks like; Suggestion: QTh", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "header-cell-[name]", + "vue-properties": [ + { + "name": "col", + "type": "object", + "description": "Column definition associated to header cell", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how a specific header cell looks like; replace '[name]' with column name (from columns definition object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "body-selection", + "vue-properties": [ + { + "name": "key", + "type": "any", + "description": "Row's key", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "row", + "type": "object", + "description": "Row object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "rowIndex", + "type": "number", + "description": "Row's index (0 based) in the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pageIndex", + "type": "number", + "description": "Row's index (0 based) in the current page of the filtered and sorted table", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how body selection column looks like; Suggestion: QCheckbox", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "header-selection", + "vue-properties": [ + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "colsMap", + "type": "object", + "description": "Column mapping (key is column name, value is column object)", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "sort", + "type": "Function", + "description": "Trigger a table sort", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "selected", + "type": "boolean", + "description": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "expand", + "type": "boolean", + "description": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "color", + "type": "string", + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dark", + "type": "boolean", + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "dense", + "type": "boolean", + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how header selection column looks like (available only for multiple selection mode); Suggestion: QCheckbox", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "top-row", + "vue-properties": [ + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how top extra row looks like", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "bottom-row", + "vue-properties": [ + { + "name": "cols", + "type": "object", + "description": "Column definitions", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how bottom extra row looks like", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "top", + "vue-properties": [ + { + "name": "pagination", + "type": "object", + "description": "Pagination object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pagesNumber", + "type": "number", + "description": "Number of pages available\n\nExamples:\n5", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isFirstPage", + "type": "boolean", + "description": "Are we on first page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isLastPage", + "type": "boolean", + "description": "Are we on last page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "firstPage", + "type": "Function", + "description": "Navigates to first page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "prevPage", + "type": "Function", + "description": "Navigates to previous page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "nextPage", + "type": "Function", + "description": "Navigates to next page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "lastPage", + "type": "Function", + "description": "Navigates to last page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "inFullscreen", + "type": "boolean", + "description": "Is table in fullscreen mode?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "toggleFullscreen", + "type": "Function", + "description": "Toggles fullscreen mode", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how table top looks like", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "bottom", + "vue-properties": [ + { + "name": "pagination", + "type": "object", + "description": "Pagination object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pagesNumber", + "type": "number", + "description": "Number of pages available\n\nExamples:\n5", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isFirstPage", + "type": "boolean", + "description": "Are we on first page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isLastPage", + "type": "boolean", + "description": "Are we on last page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "firstPage", + "type": "Function", + "description": "Navigates to first page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "prevPage", + "type": "Function", + "description": "Navigates to previous page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "nextPage", + "type": "Function", + "description": "Navigates to next page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "lastPage", + "type": "Function", + "description": "Navigates to last page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "inFullscreen", + "type": "boolean", + "description": "Is table in fullscreen mode?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "toggleFullscreen", + "type": "Function", + "description": "Toggles fullscreen mode", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how table bottom looks like", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pagination", + "vue-properties": [ + { + "name": "pagination", + "type": "object", + "description": "Pagination object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pagesNumber", + "type": "number", + "description": "Number of pages available\n\nExamples:\n5", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isFirstPage", + "type": "boolean", + "description": "Are we on first page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isLastPage", + "type": "boolean", + "description": "Are we on last page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "firstPage", + "type": "Function", + "description": "Navigates to first page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "prevPage", + "type": "Function", + "description": "Navigates to previous page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "nextPage", + "type": "Function", + "description": "Navigates to next page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "lastPage", + "type": "Function", + "description": "Navigates to last page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "inFullscreen", + "type": "boolean", + "description": "Is table in fullscreen mode?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "toggleFullscreen", + "type": "Function", + "description": "Toggles fullscreen mode", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to override default pagination label and buttons", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "top-left", + "vue-properties": [ + { + "name": "pagination", + "type": "object", + "description": "Pagination object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pagesNumber", + "type": "number", + "description": "Number of pages available\n\nExamples:\n5", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isFirstPage", + "type": "boolean", + "description": "Are we on first page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isLastPage", + "type": "boolean", + "description": "Are we on last page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "firstPage", + "type": "Function", + "description": "Navigates to first page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "prevPage", + "type": "Function", + "description": "Navigates to previous page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "nextPage", + "type": "Function", + "description": "Navigates to next page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "lastPage", + "type": "Function", + "description": "Navigates to last page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "inFullscreen", + "type": "boolean", + "description": "Is table in fullscreen mode?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "toggleFullscreen", + "type": "Function", + "description": "Toggles fullscreen mode", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how left part of the table top looks like", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "top-right", + "vue-properties": [ + { + "name": "pagination", + "type": "object", + "description": "Pagination object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pagesNumber", + "type": "number", + "description": "Number of pages available\n\nExamples:\n5", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isFirstPage", + "type": "boolean", + "description": "Are we on first page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isLastPage", + "type": "boolean", + "description": "Are we on last page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "firstPage", + "type": "Function", + "description": "Navigates to first page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "prevPage", + "type": "Function", + "description": "Navigates to previous page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "nextPage", + "type": "Function", + "description": "Navigates to next page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "lastPage", + "type": "Function", + "description": "Navigates to last page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "inFullscreen", + "type": "boolean", + "description": "Is table in fullscreen mode?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "toggleFullscreen", + "type": "Function", + "description": "Toggles fullscreen mode", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how right part of the table top looks like", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "top-selection", + "vue-properties": [ + { + "name": "pagination", + "type": "object", + "description": "Pagination object", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "pagesNumber", + "type": "number", + "description": "Number of pages available\n\nExamples:\n5", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isFirstPage", + "type": "boolean", + "description": "Are we on first page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "isLastPage", + "type": "boolean", + "description": "Are we on last page?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "firstPage", + "type": "Function", + "description": "Navigates to first page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "prevPage", + "type": "Function", + "description": "Navigates to previous page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "nextPage", + "type": "Function", + "description": "Navigates to next page, if available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "lastPage", + "type": "Function", + "description": "Navigates to last page", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "inFullscreen", + "type": "boolean", + "description": "Is table in fullscreen mode?", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "toggleFullscreen", + "type": "Function", + "description": "Toggles fullscreen mode", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how top table section looks like when user has selected at least one row", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "no-data", + "vue-properties": [ + { + "name": "message", + "type": "string", + "description": "The suggested message\n\nExamples:\nNo data available", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "icon", + "type": "string", + "description": "The suggested icon name (following Quasar convention)\n\nExamples:\nwarning", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "Slot to define how the bottom will look like when is nothing to display", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "QTable - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "QTd", + "source": { + "module": "quasar", + "symbol": "QTd" + }, + "attributes": [ + { + "name": "props", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "QTable's column scoped slot property\n\nExamples:\n:props=\"props\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "auto-width", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Tries to shrink column width size; Useful for columns with a checkbox/radio/toggle", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "type": "boolean" + }, + { + "name": "no-hover", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disable hover effect", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "QTd - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "QTh", + "source": { + "module": "quasar", + "symbol": "QTh" + }, + "attributes": [ + { + "name": "props", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "QTable's header column scoped slot property\n\nExamples:\n:props=\"props\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "auto-width", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Tries to shrink header column width size; Useful for columns with a checkbox/radio/toggle", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "QTh - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "QTr", + "source": { + "module": "quasar", + "symbol": "QTr" + }, + "attributes": [ + { + "name": "props", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "QTable's row scoped slot property\n\nExamples:\n:props=\"props\"", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "no-hover", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Disable hover effect", + "doc-url": "https://v1.quasar.dev/vue-components/table", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/table" + } + ], + "description": "QTr - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/table" + }, + { + "name": "QRouteTab", + "source": { + "module": "quasar", + "symbol": "QRouteTab" + }, + "attributes": [ + { + "name": "to", + "value": { + "kind": "expression", + "type": "string|object" + }, + "description": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used\n\nExamples:\n/home/dashboard\n:to=\"{ name: 'my-route-name' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "exact", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "append", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "replace", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to Vue Router 'active-class' property\n\nExamples:\nmy-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "exact-active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Equivalent to Vue Router 'active-class' property\n\nExamples:\nmy-exact-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "href", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props\n\nExamples:\nhttp://quasar.dev", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "target", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props\n\nExamples:\n_blank\n_self\n_parent\n_top", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "ripple", + "value": { + "kind": "expression", + "type": "boolean|object" + }, + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)\n\nExamples:\nfalse\n{ early: true, center: true, color: 'teal', keyCodes: [] }", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "default": "true" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "A number or string to label the tab\n\nExamples:\nHome", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "alert", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color\n\nExamples:\nalert\nalert=\"purple\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "alert-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop\n\nExamples:\nalert-icon=\"alarm_on\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "name", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Panel name\n\nExamples:\nhome\n:name=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "default": "\"A random UID\"" + }, + { + "name": "no-caps", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Turns off capitalizing all letters within the tab (which is the default)", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Class definitions to be attributed to the content wrapper\n\nExamples:\nmy-special-class", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + } + ], + "events": [ + { + "name": "click", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object; If you want to cancel navigation set synchronously 'evt.navigate' to false", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "navigateFn", + "type": "Function", + "description": "When you need to control the time at which the tab should trigger the route navigation then set 'evt.navigate' to false and call this function at your convenience; Useful if you have async work to be done before the actual route navigation or you want to navigate elsewhere", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + } + ], + "description": "Emitted when component is clicked (activated)", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestion: QMenu, QTooltip", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + } + ], + "description": "QRouteTab - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "QTab", + "source": { + "module": "quasar", + "symbol": "QTab" + }, + "attributes": [ + { + "name": "ripple", + "value": { + "kind": "expression", + "type": "boolean|object" + }, + "description": "Configure material ripple (disable it by setting it to 'false' or supply a config object)\n\nExamples:\nfalse\n{ early: true, center: true, color: 'teal', keyCodes: [] }", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "default": "true" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "A number or string to label the tab\n\nExamples:\nHome", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "alert", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color\n\nExamples:\nalert\nalert=\"purple\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "alert-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop\n\nExamples:\nalert-icon=\"alarm_on\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "name", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Panel name\n\nExamples:\nhome\n:name=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "default": "\"A random UID\"" + }, + { + "name": "no-caps", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Turns off capitalizing all letters within the tab (which is the default)", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Class definitions to be attributed to the content wrapper\n\nExamples:\nmy-special-class", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Suggestion: QMenu, QTooltip", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + } + ], + "description": "QTab - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "QTabs", + "source": { + "module": "quasar", + "symbol": "QTabs" + }, + "attributes": [ + { + "name": "value", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Model of the component defining current panel name; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"selectedTab\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "vertical", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Use vertical design (tabs one on top of each other rather than one next to the other horizontally)", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "outside-arrows", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Reserve space for arrows to place them on each side of the tabs (the arrows fade when inactive)", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "mobile-arrows", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Force display of arrows (if needed) on mobile", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "align", + "value": { + "kind": "expression", + "type": "'left'|'center'|'right'|'justify'" + }, + "description": "Horizontal alignment the tabs within the tabs container\n\nExamples:\nright", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "default": "\"center\"" + }, + { + "name": "breakpoint", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Breakpoint (in pixels) of tabs container width at which the tabs automatically turn to a justify alignment\n\nExamples:\n:breakpoint=\"500\"", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "default": "600" + }, + { + "name": "active-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The class to be set on the active tab\n\nExamples:\nmy-active-class", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "active-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The color to be attributed to the text of the active tab\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "active-bg-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The color to be attributed to the background of the active tab\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "indicator-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The color to be attributed to the indicator (the underline) of the active tab\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Class definitions to be attributed to the content wrapper\n\nExamples:\nmy-special-class", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "left-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The name of an icon to replace the default arrow used to scroll through the tabs to the left, when the tabs extend past the width of the tabs container\n\nExamples:\narrow_left", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "right-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The name of an icon to replace the default arrow used to scroll through the tabs to the right, when the tabs extend past the width of the tabs container\n\nExamples:\narrow_right", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + }, + { + "name": "stretch", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "When used on flexbox parent, tabs will stretch to parent's height", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "shrink", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "By default, QTabs is set to grow to the available space; However, you can reverse that with this prop; Useful (and required) when placing the component in a QToolbar", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "switch-indicator", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Switches the indicator position (on left of tab for vertical mode or above the tab for default horizontal mode)", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "narrow-indicator", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the indicator to be the same width as the tab's content (text or icon), instead of the whole width of the tab", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "inline-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the text to be inline with the icon, should one be used", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "no-caps", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Turns off capitalizing all letters within the tab (which is the default)", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/tabs" + } + ], + "description": "QTabs - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/tabs", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QTime", + "source": { + "module": "quasar", + "symbol": "QTime" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Time of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nv-model=\"currentTime\"", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "required": true + }, + { + "name": "landscape", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display the component in landscape mode", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + }, + { + "name": "mask", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Mask (formatting string) used for parsing and formatting value\n\nExamples:\nHH:mm:ss\nYYYY-MM-DD HH:mm:ss\nHH:mm MMMM Do, YYYY", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "default": "\"HH:mm\"" + }, + { + "name": "locale", + "value": { + "kind": "expression", + "type": "object" + }, + "description": "Locale formatting options\n\nExamples:\n:locale=\"{ monthsShort: ['Ian', 'Feb', 'Mar', '...'] }\"", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "calendar", + "value": { + "kind": "expression", + "type": "'gregorian'|'persian'" + }, + "description": "Specify calendar type", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "default": "\"gregorian\"" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 'flat' design (no default shadow)", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + }, + { + "name": "format24h", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Forces 24 hour time display instead of AM/PM system", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "default": "\"(based on Quasar lang language being used)\"", + "type": "boolean" + }, + { + "name": "default-date", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The default date to use (in YYYY/MM/DD format) when model is unfilled (undefined or null)\n\nExamples:\n1995/02/23", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "default": "\"current day\"" + }, + { + "name": "options", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Optionally configure what time is the user allowed to set; Overridden by 'hour-options', 'minute-options' and 'second-options' if those are set; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n:options=\"(hr, min, sec) => hr <= 6\"", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "hour-options", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Optionally configure what hours is the user allowed to set; Overrides 'options' prop if that is also set\n\nExamples:\n:hour-options=\"[ 3, 6, 9 ]\"", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "minute-options", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Optionally configure what minutes is the user allowed to set; Overrides 'options' prop if that is also set\n\nExamples:\n:minute-options=\"[0, 15, 30, 45]\"", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "second-options", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Optionally configure what seconds is the user allowed to set; Overrides 'options' prop if that is also set\n\nExamples:\n:second-options=\"[0, 7, 10, 23]\"", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "with-seconds", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allow the time to be set with seconds", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + }, + { + "name": "now-btn", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Display a button that selects the current time", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "type": "boolean" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "string", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "details", + "type": "object", + "description": "Object of properties on the new model", + "doc-url": "https://v1.quasar.dev/vue-components/time" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "change", + "arguments": [ + { + "name": "value", + "type": "string", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/time" + }, + { + "name": "details", + "type": "object", + "description": "Object of properties on the new model", + "doc-url": "https://v1.quasar.dev/vue-components/time" + } + ], + "description": "Fires at the end of time adjustment (click or drag end) on the minutes screen (or seconds one if withSeconds is set)", + "doc-url": "https://v1.quasar.dev/vue-components/time" + } + ], + "slots": [ + { + "name": "default", + "description": "This is where additional buttons can go", + "doc-url": "https://v1.quasar.dev/vue-components/time" + } + ], + "description": "QTime - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/time", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QTimeline", + "source": { + "module": "quasar", + "symbol": "QTimeline" + }, + "attributes": [ + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "side", + "value": { + "kind": "expression", + "type": "'left'|'right'" + }, + "description": "Side to place the timeline entries in dense and comfortable layout; For loose layout it gets overridden by QTimelineEntry side prop", + "doc-url": "https://v1.quasar.dev/vue-components/timeline", + "default": "\"right\"" + }, + { + "name": "layout", + "value": { + "kind": "expression", + "type": "'dense'|'comfortable'|'loose'" + }, + "description": "Layout of the timeline. Dense keeps content and labels on one side. Comfortable keeps content on one side and labels on the opposite side. Loose puts content on both sides.", + "doc-url": "https://v1.quasar.dev/vue-components/timeline", + "default": "\"dense\"" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/timeline", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Used for content of component", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + } + ], + "description": "QTimeline - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "QTimelineEntry", + "source": { + "module": "quasar", + "symbol": "QTimelineEntry" + }, + "attributes": [ + { + "name": "tag", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Tag to use, if of type 'heading' only\n\nExamples:\nh1", + "doc-url": "https://v1.quasar.dev/vue-components/timeline", + "default": "\"h3\"" + }, + { + "name": "heading", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Defines a heading timeline item", + "doc-url": "https://v1.quasar.dev/vue-components/timeline", + "type": "boolean" + }, + { + "name": "side", + "value": { + "kind": "expression", + "type": "'left'|'right'" + }, + "description": "Side to place the timeline entry; Works only if QTimeline layout is loose.", + "doc-url": "https://v1.quasar.dev/vue-components/timeline", + "default": "\"right\"" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "avatar", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "URL to the avatar image; Icon takes precedence if used, so it replaces avatar\n\nExamples:\n(public folder) src=\"img/my-bg.png\"\n(assets folder) src=\"~assets/my-img.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "title", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Title of timeline entry; Is overridden if using 'title' slot\n\nExamples:\nDecember party", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "subtitle", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Subtitle of timeline entry; Is overridden if using 'subtitle' slot\n\nExamples:\nAll invited", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "body", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Body content of timeline entry; Use this prop or the default slot\n\nExamples:\nLorem ipsum dolor sit amet, consectetur adipisicing elit.", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + } + ], + "slots": [ + { + "name": "default", + "description": "Timeline entry content (body)", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "title", + "description": "Optional slot for title; When used, it overrides 'title' prop", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "subtitle", + "description": "Optional slot for subtitle; When used, it overrides 'subtitle' prop", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + } + ], + "description": "QTimelineEntry - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/timeline" + }, + { + "name": "QToggle", + "source": { + "module": "quasar", + "symbol": "QToggle" + }, + "attributes": [ + { + "name": "name", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL\n\nExamples:\ncar_id", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "size", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)\n\nExamples:\n16px\n2rem\nxs\nmd", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "any|any[]" + }, + "description": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive\n\nExamples:\nfalse\n['car', 'building']", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "required": true + }, + { + "name": "val", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked\n\nExamples:\ncar", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "true-value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "What model value should be considered as checked/ticked/on?\n\nExamples:\nAgreed", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "default": "true" + }, + { + "name": "false-value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "What model value should be considered as unchecked/unticked/off?\n\nExamples:\nDisagree", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "indeterminate-value", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "What model value should be considered as 'indeterminate'?\n\nExamples:\n0\nnot_answered", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "toggle-order", + "value": { + "kind": "expression", + "type": "'tf'|'ft'" + }, + "description": "Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ...", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "default": "\"tf\"" + }, + { + "name": "toggle-indeterminate", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "When user clicks/taps on the component, should we toggle through the indeterminate state too?", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "type": "boolean" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Label to display along the component (or use the default slot instead of this prop)\n\nExamples:\nI agree with the Terms and Conditions", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "left-label", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Label (if any specified) should be displayed on the left side of the component", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "type": "boolean" + }, + { + "name": "checked-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The icon to be used when the toggle is on\n\nExamples:\nvisibility", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "unchecked-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The icon to be used when the toggle is off\n\nExamples:\nvisibility_off", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "indeterminate-icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The icon to be used when the model is indeterminate\n\nExamples:\nhelp", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "keep-color", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Should the color (if specified any) be kept when the component is unticked/ off?", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "type": "boolean" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "type": "boolean" + }, + { + "name": "tabindex", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Tabindex HTML attribute value\n\nExamples:\n0\n100", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "icon-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Override default icon color (for truthy state only); Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "any", + "description": "New model value", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + }, + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + } + ], + "description": "Emitted when the component needs to change the model; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot can be used as label, unless 'label' prop is specified; Suggestion: string", + "doc-url": "https://v1.quasar.dev/vue-components/toggle" + } + ], + "description": "QToggle - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/toggle", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QToolbar", + "source": { + "module": "quasar", + "symbol": "QToolbar" + }, + "attributes": [ + { + "name": "inset", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Apply an inset to content (useful for subsequent toolbars)", + "doc-url": "https://v1.quasar.dev/vue-components/toolbar", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/toolbar" + } + ], + "description": "QToolbar - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/toolbar" + }, + { + "name": "QToolbarTitle", + "source": { + "module": "quasar", + "symbol": "QToolbarTitle" + }, + "attributes": [ + { + "name": "shrink", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "By default, QToolbarTitle is set to grow to the available space. However, you can reverse that with this prop", + "doc-url": "https://v1.quasar.dev/vue-components/toolbar", + "type": "boolean" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/toolbar" + } + ], + "description": "QToolbarTitle - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/toolbar" + }, + { + "name": "QTooltip", + "source": { + "module": "quasar", + "symbol": "QTooltip" + }, + "attributes": [ + { + "name": "content-class", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Class definitions to be attributed to the content\n\nExamples:\nmy-special-class\n:content-class=\"{ 'my-special-class': }\"", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "content-style", + "value": { + "kind": "expression", + "type": "any[]|string|object" + }, + "description": "Style definitions to be attributed to the content\n\nExamples:\nbackground-color: #ff0000\n:content-style=\"{ color: '#ff0000' }\"", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "value", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "type": "boolean" + }, + { + "name": "min-height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The minimum height of the Tooltip; Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "min-width", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The minimum width of the Tooltip; Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "max-height", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The maximum height of the Tooltip; Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "max-width", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The maximum width of the Tooltip; Size in CSS units, including unit name\n\nExamples:\n16px\n2rem", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "transition-show", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "default": "\"jump-down\"" + }, + { + "name": "transition-hide", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "One of Quasar's embedded transitions\n\nExamples:\nfade\nslide-down", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "default": "\"jump-up\"" + }, + { + "name": "anchor", + "value": { + "kind": "expression", + "type": "'top left'|'top middle'|'top right'|'top start'|'top end'|'center left'|'center middle'|'center right'|'center start'|'center end'|'bottom left'|'bottom middle'|'bottom right'|'bottom start'|'bottom end'" + }, + "description": "Two values setting the starting position or anchor point of the Tooltip relative to its target\n\nExamples:\ntop left\nbottom right", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "default": "\"bottom middle\"" + }, + { + "name": "self", + "value": { + "kind": "expression", + "type": "'top left'|'top middle'|'top right'|'top start'|'top end'|'center left'|'center middle'|'center right'|'center start'|'center end'|'bottom left'|'bottom middle'|'bottom right'|'bottom start'|'bottom end'" + }, + "description": "Two values setting the Tooltip's own position relative to its target\n\nExamples:\ntop left\nbottom right", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "default": "\"top middle\"" + }, + { + "name": "offset", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "An array of two numbers to offset the Tooltip horizontally and vertically in pixels\n\nExamples:\n[8, 8]\n[5, 10]", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "default": "\"[14, 14]\"" + }, + { + "name": "scroll-target", + "value": { + "kind": "expression", + "type": "Element|string" + }, + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one\n\nExamples:\n:scroll-target=\"$refs.scrollTarget\"\nscroll-target=\".scroll-target-class\"\nscroll-target=\"#scroll-target-id\"\nscroll-target=\"body\"", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "target", + "value": { + "kind": "expression", + "type": "boolean|string" + }, + "description": "Configure a target element to trigger Tooltip toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) it attaches the events to the specified DOM element (if it exists)\n\nExamples:\n:target=\"false\"\ntarget=\".my-parent\"", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "default": "true" + }, + { + "name": "no-parent-event", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Skips attaching events to the target DOM element (that trigger the element to get shown)", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "type": "boolean" + }, + { + "name": "delay", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Configure Tooltip to appear with delay\n\nExamples:\n:delay=\"550\"", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "hide-delay", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Configure Tooltip to disappear with delay\n\nExamples:\n:hide-delay=\"650\"", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + } + ], + "events": [ + { + "name": "input", + "arguments": [ + { + "name": "value", + "type": "boolean", + "description": "New state (showing/hidden)", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + } + ], + "description": "Emitted when showing/hidden state changes; Is also used by v-model", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + } + ], + "description": "Emitted after component has triggered show()", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "before-show", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + } + ], + "description": "Emitted when component triggers show() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + } + ], + "description": "Emitted after component has triggered hide()", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + }, + { + "name": "before-hide", + "arguments": [ + { + "name": "evt", + "type": "object", + "description": "JS event object", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + } + ], + "description": "Emitted when component triggers hide() but before it finishes doing it", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + } + ], + "slots": [ + { + "name": "default", + "description": "Default slot in the devland unslotted content of the component", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip" + } + ], + "description": "QTooltip - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/tooltip", + "vue-model": { + "prop": "value", + "event": "input" + } + }, + { + "name": "QTree", + "source": { + "module": "quasar", + "symbol": "QTree" + }, + "attributes": [ + { + "name": "nodes", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "The array of nodes that designates the tree structure\n\nExamples:\n[ {...}, {...} ]", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "required": true + }, + { + "name": "node-key", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The property name of each node object that holds a unique node id\n\nExamples:\nkey\nid", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "required": true + }, + { + "name": "label-key", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The property name of each node object that holds the label of the node\n\nExamples:\nname\ndescription", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "default": "\"label\"" + }, + { + "name": "children-key", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The property name of each node object that holds the list of children of the node\n\nExamples:\nroles\nrelatives", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "default": "\"children\"" + }, + { + "name": "no-connectors", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not display the connector lines between nodes", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "type": "boolean" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "control-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for controls (like checkboxes) from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "selected-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for selected nodes (from the Quasar Color Palette)\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "dense", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Dense mode; occupies less space", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "type": "boolean" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "type": "boolean" + }, + { + "name": "icon", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)\n\nExamples:\nmap\nion-add\nimg:https://cdn.quasar.dev/logo/svg/quasar-logo.svg\nimg:path/to/some_image.png", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "tick-strategy", + "value": { + "kind": "expression", + "type": "'none'|'strict'|'leaf'|'leaf-filtered'" + }, + "description": "The type of strategy to use for the selection of the nodes", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "default": "\"none\"" + }, + { + "name": "ticked", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Keys of nodes that are ticked\n\nExamples:\n:ticked.sync=\"tickedKeys\"", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "expanded", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Keys of nodes that are expanded\n\nExamples:\n:expanded.sync=\"expandedKeys\"", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "selected", + "value": { + "kind": "expression", + "type": "any" + }, + "description": "Key of node currently selected\n\nExamples:\n:selected.sync=\"selectedKey\"", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "no-selection-unset", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Do not allow un-selection when clicking currently selected node", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "type": "boolean" + }, + { + "name": "default-expand-all", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allow the tree to have all its branches expanded, when first rendered", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "type": "boolean" + }, + { + "name": "accordion", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allows the tree to be set in accordion mode", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "type": "boolean" + }, + { + "name": "no-transition", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Turn off transition effects when expanding/collapsing nodes; Also enhances perf by a lot as a side-effect; Recommended for big trees", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "type": "boolean" + }, + { + "name": "filter", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The text value to be used for filtering nodes\n\nExamples:\n:filter=\"searchText\"", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "filter-method", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "The function to use to filter the tree nodes; For best performance, reference it from your scope and do not define it inline", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "default": "\"(see source code)\"" + }, + { + "name": "duration", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Toggle animation duration (in milliseconds)\n\nExamples:\n:duration=\"500\"", + "doc-url": "https://v1.quasar.dev/vue-components/tree", + "default": "300" + }, + { + "name": "no-nodes-label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Override default such label for when no nodes are available\n\nExamples:\nNo nodes to show!", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "no-results-label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Override default such label for when no nodes are available due to filtering\n\nExamples:\nNo results", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "events": [ + { + "name": "update:expanded", + "arguments": [ + { + "name": "expanded", + "type": "any[]", + "description": "The expanded node keys\n\nExamples:\n[ 'Node 1', 'Node 2' ]", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "Triggered when nodes are expanded or collapsed; Used by Vue on 'update' synched prop", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "lazy-load", + "arguments": [ + { + "name": "details", + "type": "object", + "description": "Lazy loading details", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "Emitted when the lazy loading of nodes is finished", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "update:ticked", + "arguments": [ + { + "name": "target", + "type": "any[]", + "description": "The ticked node keys\n\nExamples:\n[ 'Node 1', 'Node 2' ]", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "Emitted when nodes are ticked/unticked via the checkbox; Used by Vue on 'ticked' synched prop", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "update:selected", + "arguments": [ + { + "name": "target", + "type": "any", + "description": "The selected node key\n\nExamples:\nNode 1", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "Emitted when selected node changes; Used by Vue on 'selected' synched prop", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "after-show", + "description": "Emitted when component show animation is finished", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "after-hide", + "description": "Emitted when component hide animation is finished", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "slots": [ + { + "name": "default-header", + "vue-properties": [ + { + "name": "expanded", + "type": "boolean", + "description": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "ticked", + "type": "boolean", + "description": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "tree", + "type": "object", + "description": "QTree instance", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "node", + "type": "object", + "description": "Node object", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "key", + "type": "any", + "description": "Node's key", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "color", + "type": "string", + "description": "QTree instance 'color' supplied prop value\n\nExamples:\nprimary", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "dark", + "type": "boolean", + "description": "QTree instance 'dark' supplied prop value", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "Slot to use for defining the header of a node", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "header-[name]", + "vue-properties": [ + { + "name": "expanded", + "type": "boolean", + "description": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "ticked", + "type": "boolean", + "description": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "tree", + "type": "object", + "description": "QTree instance", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "node", + "type": "object", + "description": "Node object", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "key", + "type": "any", + "description": "Node's key", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "color", + "type": "string", + "description": "QTree instance 'color' supplied prop value\n\nExamples:\nprimary", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "dark", + "type": "boolean", + "description": "QTree instance 'dark' supplied prop value", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "Header template slot for describing node header; Used by nodes which have their 'header' prop set to '[name]', where '[name]' can be any string", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "default-body", + "vue-properties": [ + { + "name": "expanded", + "type": "boolean", + "description": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "ticked", + "type": "boolean", + "description": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "tree", + "type": "object", + "description": "QTree instance", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "node", + "type": "object", + "description": "Node object", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "key", + "type": "any", + "description": "Node's key", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "color", + "type": "string", + "description": "QTree instance 'color' supplied prop value\n\nExamples:\nprimary", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "dark", + "type": "boolean", + "description": "QTree instance 'dark' supplied prop value", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "Slot to use for defining the body of a node", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "body-[name]", + "vue-properties": [ + { + "name": "expanded", + "type": "boolean", + "description": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "ticked", + "type": "boolean", + "description": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "tree", + "type": "object", + "description": "QTree instance", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "node", + "type": "object", + "description": "Node object", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "key", + "type": "any", + "description": "Node's key", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "color", + "type": "string", + "description": "QTree instance 'color' supplied prop value\n\nExamples:\nprimary", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "dark", + "type": "boolean", + "description": "QTree instance 'dark' supplied prop value", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "Body template slot for describing node body; Used by nodes which have their 'body' prop set to '[name]', where '[name]' can be any string", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + } + ], + "description": "QTree - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/tree" + }, + { + "name": "QUploader", + "source": { + "module": "quasar", + "symbol": "QUploader" + }, + "attributes": [ + { + "name": "multiple", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allow multiple file uploads", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "accept", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element\n\nExamples:\n.jpg, .pdf, image/*\nimage/jpeg, .pdf", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "capture", + "value": { + "kind": "expression", + "type": "'user'|'environment'" + }, + "description": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "max-file-size", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum size of individual file in bytes\n\nExamples:\n1024\n1048576", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "max-total-size", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum size of all files combined in bytes\n\nExamples:\n1024\n1048576", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "max-files", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum number of files to contain\n\nExamples:\n:max-files=\"5\"\n10", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "filter", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n:filter=\"files => files.filter(file => file.size === 1024)\"", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Label for the uploader\n\nExamples:\nUpload photo here", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 'flat' design (no default shadow)", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "no-thumbnails", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Don't display thumbnails for image files", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "auto-upload", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Upload files immediately when added", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "hide-upload-btn", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Don't show the upload button", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "factory", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Function which should return an Object or a Promise resolving with an Object; For best performance, reference it from your scope and do not define it inline", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "url", + "value": { + "kind": "expression", + "type": "string|Function" + }, + "description": "URL or path to the server which handles the upload. Takes String or factory function, which returns String. Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\nhttps://example.com/path\nfiles => `https://example.com?count=${files.length}`", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "method", + "value": { + "kind": "expression", + "type": "string|Function" + }, + "description": "HTTP method to use for upload; Takes String or factory function which returns a String; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\nPOST\n:method=\"files => files.length > 10 ? 'POST' : 'PUT'\"", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "default": "\"POST\"" + }, + { + "name": "field-name", + "value": { + "kind": "expression", + "type": "string|Function" + }, + "description": "Field name for each file upload; This goes into the following header: 'Content-Disposition: form-data; name=\"__HERE__\"; filename=\"somefile.png\"; If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\nbackgroundFile\n:field-name=\"(file) => 'background' + file.name\"", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "default": "\"(file) => file.name\"" + }, + { + "name": "headers", + "value": { + "kind": "expression", + "type": "any[]|Function" + }, + "description": "Array or a factory function which returns an array; Array consists of objects with header definitions; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\n[{name: 'Content-Type', value: 'application/json'}, {name: 'Accept', value: 'application/json'}]\n() => [{name: 'X-Custom-Timestamp', value: Date.now()}]\nfiles => [{name: 'X-Custom-Count', value: files.length}]", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "form-fields", + "value": { + "kind": "expression", + "type": "any[]|Function" + }, + "description": "Array or a factory function which returns an array; Array consists of objects with additional fields definitions (used by Form to be uploaded); Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\n[{name: 'my-field', value: 'my-value'}]\n() => [{name: 'my-field', value: 'my-value'}]\nfiles => [{name: 'my-field', value: 'my-value' + files.length}]", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "with-credentials", + "value": { + "kind": "expression", + "type": "boolean|Function" + }, + "description": "Sets withCredentials to true on the XHR that manages the upload; Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\nwith-credentials\n:with-credentials=\"files => ...\"", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "send-raw", + "value": { + "kind": "expression", + "type": "boolean|Function" + }, + "description": "Send raw files without wrapping into a Form(); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\nsend-raw\n:send-raw=\"files => ...\"", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "batch", + "value": { + "kind": "expression", + "type": "boolean|Function" + }, + "description": "Upload files in batch (in one XHR request); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline\n\nExamples:\nfiles => files.length > 10", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "events": [ + { + "name": "rejected", + "arguments": [ + { + "name": "rejectedEntries", + "type": "any[]", + "description": "Array of { failedPropValidation: string, file: File } Objects for files that do not pass the validation", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted after files are picked and some do not pass the validation props (accept, max-file-size, max-total-size, filter, etc)", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "added", + "arguments": [ + { + "name": "files", + "type": "any[]", + "description": "Array of files that were added", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted when files are added into the list", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "removed", + "arguments": [ + { + "name": "files", + "type": "any[]", + "description": "Array of files that were removed", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted when files are removed from the list", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "start", + "description": "Started working", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "finish", + "description": "Finished working (regardless of success or fail)", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "uploaded", + "arguments": [ + { + "name": "info", + "type": "object", + "description": "Object containing information about the event", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted when file or batch of files is uploaded", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "failed", + "arguments": [ + { + "name": "info", + "type": "object", + "description": "Object containing information about the event", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted when file or batch of files has encountered error while uploading", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "uploading", + "arguments": [ + { + "name": "info", + "type": "object", + "description": "Object containing information about the event", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted when file or batch of files started uploading", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "factory-failed", + "arguments": [ + { + "name": "err", + "type": "object", + "description": "Error Object which is the Promise rejection reason", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "files", + "type": "any[]", + "description": "Files which were to get uploaded", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted when factory function is supplied with a Promise which is rejected", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "slots": [ + { + "name": "header", + "description": "Slot for custom header; Scope is the QUploader instance itself", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "list", + "description": "Slot for custom list; Scope is the QUploader instance itself", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "QUploader - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "QUploaderAddTrigger", + "source": { + "module": "quasar", + "symbol": "QUploaderAddTrigger" + }, + "slots": [], + "description": "QUploaderAddTrigger - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "QUploaderBase", + "source": { + "module": "quasar", + "symbol": "QUploaderBase" + }, + "attributes": [ + { + "name": "multiple", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Allow multiple file uploads", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "accept", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element\n\nExamples:\n.jpg, .pdf, image/*\nimage/jpeg, .pdf", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "capture", + "value": { + "kind": "expression", + "type": "'user'|'environment'" + }, + "description": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "max-file-size", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum size of individual file in bytes\n\nExamples:\n1024\n1048576", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "max-total-size", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum size of all files combined in bytes\n\nExamples:\n1024\n1048576", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "max-files", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Maximum number of files to contain\n\nExamples:\n:max-files=\"5\"\n10", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "filter", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n:filter=\"files => files.filter(file => file.size === 1024)\"", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "label", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Label for the uploader\n\nExamples:\nUpload photo here", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Color name for component from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "text-color", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "Overrides text color (if needed); Color name from the Quasar Color Palette\n\nExamples:\nprimary\nteal-10", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "dark", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Notify the component that the background is a dark color", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "square", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Removes border-radius so borders are squared", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "flat", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a 'flat' design (no default shadow)", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "bordered", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Applies a default border to the component", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "no-thumbnails", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Don't display thumbnails for image files", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "auto-upload", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Upload files immediately when added", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "hide-upload-btn", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Don't show the upload button", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "disable", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in disabled mode", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + }, + { + "name": "readonly", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Put component in readonly mode", + "doc-url": "https://v1.quasar.dev/vue-components/uploader", + "type": "boolean" + } + ], + "events": [ + { + "name": "rejected", + "arguments": [ + { + "name": "rejectedEntries", + "type": "any[]", + "description": "Array of { failedPropValidation: string, file: File } Objects for files that do not pass the validation", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted after files are picked and some do not pass the validation props (accept, max-file-size, max-total-size, filter, etc)", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "added", + "arguments": [ + { + "name": "files", + "type": "any[]", + "description": "Array of files that were added", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted when files are added into the list", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "removed", + "arguments": [ + { + "name": "files", + "type": "any[]", + "description": "Array of files that were removed", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "Emitted when files are removed from the list", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "start", + "description": "Started working", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "finish", + "description": "Finished working (regardless of success or fail)", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "slots": [ + { + "name": "header", + "description": "Slot for custom header; Scope is the QUploader instance itself", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "list", + "description": "Slot for custom list; Scope is the QUploader instance itself", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + } + ], + "description": "QUploaderBase - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/uploader" + }, + { + "name": "QVideo", + "source": { + "module": "quasar", + "symbol": "QVideo" + }, + "attributes": [ + { + "name": "ratio", + "value": { + "kind": "expression", + "type": "string|number" + }, + "description": "Aspect ratio for the content; If value is a String, then avoid using a computational statement (like '16/9') and instead specify the String value of the result directly (eg. '1.7777')\n\nExamples:\n:ratio=\"4/3\"\n:ratio=\"16/9\"\nratio=\"1\"", + "doc-url": "https://v1.quasar.dev/vue-components/video" + }, + { + "name": "src", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "The source url to display in an iframe\n\nExamples:\nsrc=\"https://www.youtube.com/embed/k3_tw44QsZQ\"", + "doc-url": "https://v1.quasar.dev/vue-components/video", + "required": true + }, + { + "name": "title", + "value": { + "kind": "expression", + "type": "string" + }, + "description": "(Accessibility) Set the native 'title' attribute value of the inner iframe being used\n\nExamples:\nMy Daily Marathon", + "doc-url": "https://v1.quasar.dev/vue-components/video" + }, + { + "name": "fetchpriority", + "value": { + "kind": "expression", + "type": "'high'|'low'|'auto'" + }, + "description": "Provides a hint of the relative priority to use when fetching the iframe document", + "doc-url": "https://v1.quasar.dev/vue-components/video", + "default": "\"auto\"" + }, + { + "name": "loading", + "value": { + "kind": "expression", + "type": "'eager'|'lazy'" + }, + "description": "Indicates how the browser should load the iframe", + "doc-url": "https://v1.quasar.dev/vue-components/video", + "default": "\"eager\"" + }, + { + "name": "referrerpolicy", + "value": { + "kind": "expression", + "type": "'no-referrer'|'no-referrer-when-downgrade'|'origin'|'origin-when-cross-origin'|'same-origin'|'strict-origin'|'strict-origin-when-cross-origin'|'unsafe-url'" + }, + "description": "Indicates which referrer to send when fetching the frame's resource", + "doc-url": "https://v1.quasar.dev/vue-components/video", + "default": "\"strict-origin-when-cross-origin\"" + } + ], + "slots": [], + "description": "QVideo - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/video" + }, + { + "name": "QVirtualScroll", + "source": { + "module": "quasar", + "symbol": "QVirtualScroll" + }, + "attributes": [ + { + "name": "virtual-scroll-horizontal", + "value": { + "kind": "expression", + "type": "boolean" + }, + "description": "Make virtual list work in horizontal mode", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "type": "boolean" + }, + { + "name": "virtual-scroll-slice-size", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Minimum number of items to render in the virtual list\n\nExamples:\nvirtual-scroll-slice-size=\"60\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"30\"" + }, + { + "name": "virtual-scroll-slice-ratio-before", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Ratio of number of items in visible zone to render before it\n\nExamples:\nvirtual-scroll-slice-ratio-before=\"0.3\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"1\"" + }, + { + "name": "virtual-scroll-slice-ratio-after", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Ratio of number of items in visible zone to render after it\n\nExamples:\nvirtual-scroll-slice-ratio-after=\"2\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"1\"" + }, + { + "name": "virtual-scroll-item-size", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item\n\nExamples:\nvirtual-scroll-item-size=\"48\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"24\"" + }, + { + "name": "virtual-scroll-sticky-size-start", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision\n\nExamples:\nvirtual-scroll-sticky-size-start=\"48\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"0\"" + }, + { + "name": "virtual-scroll-sticky-size-end", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision\n\nExamples:\nvirtual-scroll-sticky-size-end=\"48\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"0\"" + }, + { + "name": "table-colspan", + "value": { + "kind": "expression", + "type": "number|string" + }, + "description": "The number of columns in the table (you need this if you use table-layout: fixed)\n\nExamples:\ntable-colspan=\"12\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + }, + { + "name": "type", + "value": { + "kind": "expression", + "type": "'list'|'table'" + }, + "description": "The type of content: list (default) or table", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"list\"" + }, + { + "name": "items", + "value": { + "kind": "expression", + "type": "any[]" + }, + "description": "Available list items that will be passed to the scoped slot; For best performance freeze the list of items; Required if 'itemsFn' is not supplied\n\nExamples:\n:items=\"[ 'BMW', 'Samsung Phone' ]\"\n:items=\"[ { label: 'BMW', value: 'car' }, { label: 'Samsung Phone', value: 'phone' } ]\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"[]\"" + }, + { + "name": "items-size", + "value": { + "kind": "expression", + "type": "number" + }, + "description": "Number of available items in the list; Required and used only if 'itemsFn' is provided\n\nExamples:\n:items-size=\"100000\"\n:items-size=\"500\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll", + "default": "\"void 0\"" + }, + { + "name": "items-fn", + "value": { + "kind": "expression", + "type": "Function" + }, + "description": "Function to return the scope for the items to be displayed; Should return an array for items starting from 'from' index for size length; For best performance, reference it from your scope and do not define it inline\n\nExamples:\n:items-fn=\"(from, size) => { const items = []; for (let i = 0; i < size; i++) { items.push('Item ' + i) }; return items }\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + }, + { + "name": "scroll-target", + "value": { + "kind": "expression", + "type": "Element|string" + }, + "description": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one\n\nExamples:\n:scroll-target=\"$refs.scrollTarget\"\nscroll-target=\".scroll-target-class\"\nscroll-target=\"#scroll-target-id\"\nscroll-target=\"body\"", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + } + ], + "events": [ + { + "name": "virtual-scroll", + "arguments": [ + { + "name": "details", + "type": "object", + "description": "Object of properties on the new scroll position", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + } + ], + "description": "Emitted when the virtual scroll occurs", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + } + ], + "slots": [ + { + "name": "before", + "description": "Template slot for the elements that should be rendered before the list; Suggestion: thead before a table", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + }, + { + "name": "after", + "description": "Template slot for the elements that should be rendered after the list; Suggestion: tfoot after a table", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + }, + { + "name": "default", + "vue-properties": [ + { + "name": "index", + "type": "number", + "description": "Item index in the options list\n\nExamples:\n0", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + }, + { + "name": "item", + "type": "any", + "description": "Item data -- its value is taken from 'options' prop", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + } + ], + "description": "Template slot for defining the list item; Suggestion: QItem", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + } + ], + "description": "QVirtualScroll - Quasar component", + "doc-url": "https://v1.quasar.dev/vue-components/virtual-scroll" + } + ], + "attributes": [ + { + "name": "v-close-popup", + "source": { + "module": "quasar", + "symbol": "ClosePopup" + }, + "required": false, + "description": "ClosePopup - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/close-popup", + "value": { + "kind": "expression", + "type": "boolean|number|string" + } + }, + { + "name": "v-go-back", + "source": { + "module": "quasar", + "symbol": "GoBack" + }, + "required": false, + "description": "GoBack - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/go-back", + "vue-modifiers": [ + { + "name": "single", + "description": "Go back to previous route instead of the whole way to before directive was initialized\n\nExamples:\nv-go-back.single", + "doc-url": "https://v1.quasar.dev/vue-directives/go-back" + } + ], + "value": { + "kind": "expression", + "type": "string|object" + } + }, + { + "name": "v-intersection", + "source": { + "module": "quasar", + "symbol": "Intersection" + }, + "required": false, + "description": "Intersection - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/intersection", + "vue-modifiers": [ + { + "name": "once", + "description": "Call handler only once, when the conditions are first met\n\nExamples:\nv-intersection.once", + "doc-url": "https://v1.quasar.dev/vue-directives/intersection" + } + ], + "value": { + "kind": "expression", + "type": "object|Function" + } + }, + { + "name": "v-key-group-navigation", + "source": { + "module": "quasar", + "symbol": "KeyGroupNavigation" + }, + "required": false, + "description": "KeyGroupNavigation - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/key-group-navigation", + "vue-modifiers": [ + { + "name": "horizontal", + "description": "Navigate using HOME, ARROW_LEFT, ARROW_RIGHT or END keys", + "doc-url": "https://v1.quasar.dev/vue-directives/key-group-navigation" + }, + { + "name": "vertical", + "description": "Navigate using PG_UP, ARROW_UP, ARROW_DOWN or PG_DOWN keys", + "doc-url": "https://v1.quasar.dev/vue-directives/key-group-navigation" + }, + { + "name": "all", + "description": "Default - Navigate using HOME / PG_UP, ARROW_LEFT / ARROW_UP, ARROW_RIGHT / ARROW_DOWN or END / PG_DOWN keys", + "doc-url": "https://v1.quasar.dev/vue-directives/key-group-navigation" + } + ], + "value": { + "kind": "expression", + "type": "boolean|number|string" + } + }, + { + "name": "v-morph", + "source": { + "module": "quasar", + "symbol": "Morph" + }, + "required": false, + "description": "Morph - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/morph", + "vue-modifiers": [ + { + "name": "resize", + "description": "Use resize instead of scale transform for morph (forceResize option of the morph function)", + "doc-url": "https://v1.quasar.dev/vue-directives/morph" + }, + { + "name": "useCSS", + "description": "Use CSS animations for morph (forceCssAnimation option of the morph function)", + "doc-url": "https://v1.quasar.dev/vue-directives/morph" + }, + { + "name": "hideFromClone", + "description": "Hide the spacer for the initial element (hideFromClone option of the morph function)", + "doc-url": "https://v1.quasar.dev/vue-directives/morph" + }, + { + "name": "keepToClone", + "description": "Keep the final element visible while morphing (keepToClone option of the morph function)", + "doc-url": "https://v1.quasar.dev/vue-directives/morph" + }, + { + "name": "tween", + "description": "Use opacity tween morphing between initial and final elements (tween option of the morph function)", + "doc-url": "https://v1.quasar.dev/vue-directives/morph" + } + ], + "value": { + "kind": "expression", + "type": "object|any" + } + }, + { + "name": "v-mutation", + "source": { + "module": "quasar", + "symbol": "Mutation" + }, + "required": false, + "description": "Mutation - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/mutation", + "vue-modifiers": [ + { + "name": "once", + "description": "Call handler only once, when the first mutation was triggered, then stop monitoring\n\nExamples:\nv-mutation.once", + "doc-url": "https://v1.quasar.dev/vue-directives/mutation" + }, + { + "name": "childList", + "description": "Monitor the target node (and, if 'subtree' is also set, its descendants) for the addition of new child nodes or removal of existing child nodes\n\nExamples:\nv-mutation.childList", + "doc-url": "https://v1.quasar.dev/vue-directives/mutation" + }, + { + "name": "subtree", + "description": "Extend monitoring to the entire subtree of nodes rooted at target\n\nExamples:\nv-mutation.subtree", + "doc-url": "https://v1.quasar.dev/vue-directives/mutation" + }, + { + "name": "attributes", + "description": "Watch for changes to the value of attributes on the node or nodes being monitored\n\nExamples:\nv-mutation.attributes", + "doc-url": "https://v1.quasar.dev/vue-directives/mutation" + }, + { + "name": "characterData", + "description": "Monitor the specified target node or subtree for changes to the character data contained within the node or nodes\n\nExamples:\nv-mutation.characterData", + "doc-url": "https://v1.quasar.dev/vue-directives/mutation" + }, + { + "name": "attributeOldValue", + "description": "Record the previous value of any attribute that changes when monitoring the node or nodes for attribute changes\n\nExamples:\nv-mutation.attributeOldValue", + "doc-url": "https://v1.quasar.dev/vue-directives/mutation" + }, + { + "name": "characterDataOldValue", + "description": "Record the previous value of a node's text whenever the text changes on nodes being monitored\n\nExamples:\nv-mutation.characterDataOldValue", + "doc-url": "https://v1.quasar.dev/vue-directives/mutation" + } + ], + "value": { + "kind": "expression", + "type": "Function" + } + }, + { + "name": "v-ripple", + "source": { + "module": "quasar", + "symbol": "Ripple" + }, + "required": false, + "description": "Ripple - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/material-ripple", + "vue-modifiers": [ + { + "name": "early", + "description": "Trigger early/immediately on user interaction", + "doc-url": "https://v1.quasar.dev/vue-directives/material-ripple" + }, + { + "name": "stop", + "description": "Stop click/touch event propagation\n\nExamples:\nv-ripple.stop", + "doc-url": "https://v1.quasar.dev/vue-directives/material-ripple" + }, + { + "name": "center", + "description": "Ripple starts from the absolute center\n\nExamples:\nv-ripple.center", + "doc-url": "https://v1.quasar.dev/vue-directives/material-ripple" + } + ], + "value": { + "kind": "expression", + "type": "boolean|object" + } + }, + { + "name": "v-scroll", + "source": { + "module": "quasar", + "symbol": "Scroll" + }, + "required": false, + "description": "Scroll - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/scroll", + "value": { + "kind": "expression", + "type": "Function" + } + }, + { + "name": "v-scroll-fire", + "source": { + "module": "quasar", + "symbol": "ScrollFire" + }, + "required": false, + "description": "ScrollFire - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/scroll-fire", + "value": { + "kind": "expression", + "type": "Function" + } + }, + { + "name": "v-touch-hold", + "source": { + "module": "quasar", + "symbol": "TouchHold" + }, + "required": false, + "description": "TouchHold - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-hold", + "vue-modifiers": [ + { + "name": "capture", + "description": "Use capture for touchstart event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-hold" + }, + { + "name": "mouse", + "description": "Listen for mouse events too", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-hold" + }, + { + "name": "mouseCapture", + "description": "Use capture for mousedown event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-hold" + } + ], + "value": { + "kind": "expression", + "type": "Function" + } + }, + { + "name": "v-touch-pan", + "source": { + "module": "quasar", + "symbol": "TouchPan" + }, + "required": false, + "description": "TouchPan - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan", + "vue-modifiers": [ + { + "name": "stop", + "description": "Stop event propagation for touch events", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "prevent", + "description": "Calls event.preventDefault() for touch events", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "capture", + "description": "Use capture for touchstart event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "mouse", + "description": "Listen for mouse events too", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "mouseCapture", + "description": "Use capture for mousedown event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "mouseAllDir", + "description": "Ignore initial mouse move direction (do not abort if the first mouse move is in an unaccepted direction)", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "preserveCursor", + "description": "Prevent the mouse cursor from automatically displaying as grabbing when panning", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "horizontal", + "description": "Catch horizontal (left/right) movement", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "vertical", + "description": "Catch vertical (up/down) movement", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "up", + "description": "Catch panning to up", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "right", + "description": "Catch panning to right", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "down", + "description": "Catch panning to down", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + { + "name": "left", + "description": "Catch panning to left", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-pan" + } + ], + "value": { + "kind": "expression", + "type": "Function" + } + }, + { + "name": "v-touch-repeat", + "source": { + "module": "quasar", + "symbol": "TouchRepeat" + }, + "required": false, + "description": "TouchRepeat - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat", + "vue-modifiers": [ + { + "name": "capture", + "description": "Use capture for touchstart event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "mouse", + "description": "Listen for mouse events too", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "mouseCapture", + "description": "Use capture for mousedown event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "keyCapture", + "description": "Use capture for keydown event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "esc", + "description": "Catch ESC key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "tab", + "description": "Catch TAB key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "enter", + "description": "Catch ENTER key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "space", + "description": "Catch SPACE key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "up", + "description": "Catch UP arrow key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "left", + "description": "Catch LEFT arrow key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "right", + "description": "Catch RIGHT arrow key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "down", + "description": "Catch DOWN key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "delete", + "description": "Catch DELETE key", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + { + "name": "[keycode]", + "description": "Key code to catch\n\nExamples:\nv-touch-repeat.68=\"fnToCall\"", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-repeat" + } + ], + "value": { + "kind": "expression", + "type": "Function" + } + }, + { + "name": "v-touch-swipe", + "source": { + "module": "quasar", + "symbol": "TouchSwipe" + }, + "required": false, + "description": "TouchSwipe - Quasar directive", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe", + "vue-modifiers": [ + { + "name": "capture", + "description": "Use capture for touchstart event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + { + "name": "mouse", + "description": "Listen for mouse events too", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + { + "name": "mouseCapture", + "description": "Use capture for mousedown event", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + { + "name": "horizontal", + "description": "Catch horizontal (left/right) movement", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + { + "name": "vertical", + "description": "Catch vertical (up/down) movement", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + { + "name": "up", + "description": "Catch swipe to up", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + { + "name": "right", + "description": "Catch swipe to right", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + { + "name": "down", + "description": "Catch swipe to down", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + { + "name": "left", + "description": "Catch swipe to left", + "doc-url": "https://v1.quasar.dev/vue-directives/touch-swipe" + } + ], + "value": { + "kind": "expression", + "type": "Function" + } + } + ] + } + } +} \ No newline at end of file diff --git a/icon-set/bootstrap-icons.js b/icon-set/bootstrap-icons.js new file mode 100644 index 00000000000..5075e4183b7 --- /dev/null +++ b/icon-set/bootstrap-icons.js @@ -0,0 +1,136 @@ +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatSubscript, + mdiFormatSuperscript +} from '@quasar/extras/mdi-v6' + +export default { + name: 'bootstrap-icons', + type: { + positive: 'bi-check', + negative: 'bi-exclamation-triangle-fill', + info: 'bi-exclamation-circle-fill', + warning: 'bi-exclamation' + }, + arrow: { + up: 'bi-arrow-up', + right: 'bi-arrow-right', + down: 'bi-arrow-down', + left: 'bi-arrow-left', + dropdown: 'bi-caret-down-fill' + }, + chevron: { + left: 'bi-chevron-left', + right: 'bi-chevron-right' + }, + colorPicker: { + spectrum: 'bi-eyedropper', + tune: 'bi-sliders', + palette: 'bi-palette2' + }, + pullToRefresh: { + icon: 'bi-arrow-repeat' + }, + carousel: { + left: 'bi-chevron-left', + right: 'bi-chevron-right', + up: 'bi-chevron-up', + down: 'bi-chevron-down', + navigationIcon: 'bi-circle-fill' + }, + chip: { + remove: 'bi-x-circle-fill', + selected: 'bi-check' + }, + datetime: { + arrowLeft: 'bi-chevron-left', + arrowRight: 'bi-chevron-right', + now: 'bi-clock-fill', + today: 'bi-calendar-check-fill' + }, + editor: { + bold: 'bi-type-bold', + italic: 'bi-type-italic', + strikethrough: 'bi-type-strikethrough', + underline: 'bi-type-underline', + unorderedList: 'bi-list-ul', + orderedList: 'bi-list-ol', + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + hyperlink: 'bi-link', + toggleFullscreen: 'bi-arrows-fullscreen', + quote: 'bi-chat-square-quote-fill', + left: 'bi-justify-left', + center: 'bi-justify', + right: 'bi-justify-right', + justify: 'bi-text-center', + print: 'bi-printer-fill', + outdent: 'bi-text-indent-right', + indent: 'bi-text-indent-left', + removeFormat: 'bi-eraser-fill', + formatting: 'bi-textarea', + fontSize: 'bi-textarea-t', + align: 'bi-text-left', + hr: 'bi-dash-square-fill', + undo: 'bi-arrow-counterclockwise', + redo: 'bi-arrow-clockwise', + heading: 'bi-type-h1', + code: 'bi-code', + size: 'bi-bounding-box', + font: 'bi-fonts', + viewSource: 'bi-code-slash' + }, + expansionItem: { + icon: 'bi-chevron-down', + denseIcon: 'bi-caret-down-fill' + }, + fab: { + icon: 'bi-plus', + activeIcon: 'bi-x' + }, + field: { + clear: 'bi-x-circle-fill', + error: 'bi-exclamation-circle-fill' + }, + pagination: { + first: 'bi-chevron-bar-left', + prev: 'bi-chevron-left', + next: 'bi-chevron-right', + last: 'bi-chevron-bar-right' + }, + rating: { + icon: 'bi-star-fill' + }, + stepper: { + done: 'bi-check', + active: 'bi-pencil-fill', + error: 'bi-exclamation-triangle-fill' + }, + tabs: { + left: 'bi-chevron-left', + right: 'bi-chevron-right', + up: 'bi-chevron-up', + down: 'bi-chevron-down' + }, + table: { + arrowUp: 'bi-arrow-up', + warning: 'bi-exclamation-triangle-fill', + firstPage: 'bi-skip-start-fill', + prevPage: 'bi-chevron-left', + nextPage: 'bi-chevron-right', + lastPage: 'bi-skip-end-fill' + }, + tree: { + icon: 'bi-caret-right-fill' + }, + uploader: { + done: 'bi-check', + clear: 'bi-x', + add: 'bi-plus-square-fill', + upload: 'bi-upload', + removeQueue: 'bi-clipboard-x', + removeUploaded: 'bi-clipboard-check' + } +} diff --git a/icon-set/eva-icons.js b/icon-set/eva-icons.js new file mode 100644 index 00000000000..48add90191f --- /dev/null +++ b/icon-set/eva-icons.js @@ -0,0 +1,186 @@ +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiLink, + mdiFullscreen, + mdiFormatQuoteClose, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiPrinter, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiUndo, + mdiRedo, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiCodeTags, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont +} from '@quasar/extras/mdi-v6' + +export default { + name: 'eva-icons', + type: { + positive: 'eva-checkmark-circle-2', + negative: 'eva-alert-triangle', + info: 'eva-info', + warning: 'eva-alert-circle-outline' + }, + arrow: { + up: 'eva-arrow-upward-outline', + right: 'eva-arrow-forward-outline', + down: 'eva-arrow-downward-outline', + left: 'eva-arrow-back-outline', + dropdown: 'eva-chevron-down' + }, + chevron: { + left: 'eva-arrow-ios-back-outline', + right: 'eva-arrow-ios-forward-outline' + }, + colorPicker: { + spectrum: 'eva-color-picker-outline', + tune: 'eva-options-2-outline', + palette: 'eva-pantone-outline' + }, + pullToRefresh: { + icon: 'eva-refresh-outline' + }, + carousel: { + left: 'eva-arrow-ios-back-outline', + right: 'eva-arrow-ios-forward-outline', + up: 'eva-arrow-ios-upward-outline', + down: 'eva-arrow-ios-downward-outline', + navigationIcon: 'eva-shield' + }, + chip: { + remove: 'eva-close', + selected: 'eva-checkmark' + }, + datetime: { + arrowLeft: 'eva-arrow-ios-back-outline', + arrowRight: 'eva-arrow-ios-forward-outline', + now: 'eva-clock-outline', + today: 'eva-calendar-outline' + }, + editor: { + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + hyperlink: mdiLink, + toggleFullscreen: mdiFullscreen, + quote: mdiFormatQuoteClose, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + print: mdiPrinter, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + undo: mdiUndo, + redo: mdiRedo, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + code: mdiCodeTags, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont, + viewSource: mdiCodeTags + }, + expansionItem: { + icon: 'eva-arrow-ios-downward-outline', + denseIcon: 'eva-chevron-down' + }, + fab: { + icon: 'eva-plus-outline', + activeIcon: 'eva-close' + }, + field: { + clear: 'eva-close-circle', + error: 'eva-alert-circle' + }, + pagination: { + first: 'eva-arrowhead-left-outline', + prev: 'eva-arrow-ios-back-outline', + next: 'eva-arrow-ios-forward-outline', + last: 'eva-arrowhead-right-outline' + }, + rating: { + icon: 'eva-star' + }, + stepper: { + done: 'eva-checkmark', + active: 'eva-edit', + error: 'eva-alert-triangle' + }, + tabs: { + left: 'eva-arrow-ios-back-outline', + right: 'eva-arrow-ios-forward-outline', + up: 'eva-arrow-ios-upward-outline', + down: 'eva-arrow-ios-downward-outline' + }, + table: { + arrowUp: 'eva-arrow-upward', + warning: 'eva-alert-triangle', + firstPage: 'eva-arrowhead-left-outline', + prevPage: 'eva-arrow-ios-back-outline', + nextPage: 'eva-arrow-ios-forward-outline', + lastPage: 'eva-arrowhead-right-outline' + }, + tree: { + icon: 'eva-arrow-right' + }, + uploader: { + done: 'eva-checkmark', + clear: 'eva-close', + add: 'eva-plus-square', + upload: 'eva-cloud-upload', + removeQueue: 'eva-slash', + removeUploaded: 'eva-done-all' + } +} diff --git a/icon-set/fontawesome-v5-pro.js b/icon-set/fontawesome-v5-pro.js new file mode 100644 index 00000000000..70de21e95ec --- /dev/null +++ b/icon-set/fontawesome-v5-pro.js @@ -0,0 +1,128 @@ +export default { + name: 'fontawesome-v5-pro', + type: { + positive: 'fal fa-check', + negative: 'fal fa-exclamation-triangle', + info: 'fal fa-info-circle', + warning: 'fal fa-exclamation' + }, + arrow: { + up: 'fal fa-arrow-up', + right: 'fal fa-arrow-right', + down: 'fal fa-arrow-down', + left: 'fal fa-arrow-left', + dropdown: 'fal fa-caret-down' + }, + chevron: { + left: 'fal fa-chevron-left', + right: 'fal fa-chevron-right' + }, + colorPicker: { + spectrum: 'fal fa-eye-dropper', + tune: 'fal fa-sliders-h', + palette: 'fal fa-swatchbook' + }, + pullToRefresh: { + icon: 'fal fa-sync-alt' + }, + carousel: { + left: 'fal fa-chevron-left', + right: 'fal fa-chevron-right', + up: 'fal fa-chevron-up', + down: 'fal fa-chevron-down', + navigationIcon: 'fal fa-circle' + }, + chip: { + remove: 'fal fa-times-circle', + selected: 'fal fa-check' + }, + datetime: { + arrowLeft: 'fal fa-chevron-left', + arrowRight: 'fal fa-chevron-right', + now: 'fal fa-clock', + today: 'fal fa-calendar-check' + }, + editor: { + bold: 'fal fa-bold', + italic: 'fal fa-italic', + strikethrough: 'fal fa-strikethrough', + underline: 'fal fa-underline', + unorderedList: 'fal fa-list-ul', + orderedList: 'fal fa-list-ol', + subscript: 'fal fa-subscript', + superscript: 'fal fa-superscript', + hyperlink: 'fal fa-link', + toggleFullscreen: 'fal fa-expand-arrows-alt', + quote: 'fal fa-quote-right', + left: 'fal fa-align-left', + center: 'fal fa-align-center', + right: 'fal fa-align-right', + justify: 'fal fa-align-justify', + print: 'fal fa-print', + outdent: 'fal fa-outdent', + indent: 'fal fa-indent', + removeFormat: 'fal fa-eraser', + formatting: 'fal fa-heading', + fontSize: 'fal fa-text-height', + align: 'fal fa-align-left', + hr: 'fal fa-minus-square', + undo: 'fal fa-undo', + redo: 'fal fa-redo', + heading: 'fal fa-heading', + code: 'fal fa-code', + size: 'fal fa-text-height', + font: 'fal fa-font', + viewSource: 'fal fa-code' + }, + expansionItem: { + icon: 'fal fa-chevron-down', + denseIcon: 'fal fa-caret-down' + }, + fab: { + icon: 'fal fa-plus', + activeIcon: 'fal fa-times' + }, + field: { + clear: 'fal fa-times-circle', + error: 'fal fa-exclamation-circle' + }, + pagination: { + first: 'fal fa-step-backward', + prev: 'fal fa-chevron-left', + next: 'fal fa-chevron-right', + last: 'fal fa-step-forward' + }, + rating: { + icon: 'fal fa-star' + }, + stepper: { + done: 'fal fa-check', + active: 'fal fa-pencil-alt', + error: 'fal fa-exclamation-triangle' + }, + tabs: { + left: 'fal fa-chevron-left', + right: 'fal fa-chevron-right', + up: 'fal fa-chevron-up', + down: 'fal fa-chevron-down' + }, + table: { + arrowUp: 'fal fa-long-arrow-up', + warning: 'fal fa-exclamation-triangle', + firstPage: 'fal fa-step-backward', + prevPage: 'fal fa-chevron-left', + nextPage: 'fal fa-chevron-right', + lastPage: 'fal fa-step-forward' + }, + tree: { + icon: 'fal fa-play' + }, + uploader: { + done: 'fal fa-check', + clear: 'fal fa-times', + add: 'fal fa-plus-square', + upload: 'fal fa-upload', + removeQueue: 'fal fa-stream', + removeUploaded: 'fal fa-clipboard-check' + } +} diff --git a/icon-set/fontawesome-v5.js b/icon-set/fontawesome-v5.js new file mode 100644 index 00000000000..561d1bb9735 --- /dev/null +++ b/icon-set/fontawesome-v5.js @@ -0,0 +1,128 @@ +export default { + name: 'fontawesome-v5', + type: { + positive: 'fas fa-check', + negative: 'fas fa-exclamation-triangle', + info: 'fas fa-info-circle', + warning: 'fas fa-exclamation' + }, + arrow: { + up: 'fas fa-arrow-up', + right: 'fas fa-arrow-right', + down: 'fas fa-arrow-down', + left: 'fas fa-arrow-left', + dropdown: 'fas fa-caret-down' + }, + chevron: { + left: 'fas fa-chevron-left', + right: 'fas fa-chevron-right' + }, + colorPicker: { + spectrum: 'fas fa-eye-dropper', + tune: 'fas fa-sliders-h', + palette: 'fas fa-swatchbook' + }, + pullToRefresh: { + icon: 'fas fa-sync-alt' + }, + carousel: { + left: 'fas fa-chevron-left', + right: 'fas fa-chevron-right', + up: 'fas fa-chevron-up', + down: 'fas fa-chevron-down', + navigationIcon: 'fas fa-circle' + }, + chip: { + remove: 'fas fa-times-circle', + selected: 'fas fa-check' + }, + datetime: { + arrowLeft: 'fas fa-chevron-left', + arrowRight: 'fas fa-chevron-right', + now: 'far fa-clock', + today: 'far fa-calendar-check' + }, + editor: { + bold: 'fas fa-bold', + italic: 'fas fa-italic', + strikethrough: 'fas fa-strikethrough', + underline: 'fas fa-underline', + unorderedList: 'fas fa-list-ul', + orderedList: 'fas fa-list-ol', + subscript: 'fas fa-subscript', + superscript: 'fas fa-superscript', + hyperlink: 'fas fa-link', + toggleFullscreen: 'fas fa-expand-arrows-alt', + quote: 'fas fa-quote-right', + left: 'fas fa-align-left', + center: 'fas fa-align-center', + right: 'fas fa-align-right', + justify: 'fas fa-align-justify', + print: 'fas fa-print', + outdent: 'fas fa-outdent', + indent: 'fas fa-indent', + removeFormat: 'fas fa-eraser', + formatting: 'fas fa-heading', + fontSize: 'fas fa-text-height', + align: 'fas fa-align-left', + hr: 'far fa-minus-square', + undo: 'fas fa-undo', + redo: 'fas fa-redo', + heading: 'fas fa-heading', + code: 'fas fa-code', + size: 'fas fa-text-height', + font: 'fas fa-font', + viewSource: 'fas fa-code' + }, + expansionItem: { + icon: 'fas fa-chevron-down', + denseIcon: 'fas fa-caret-down' + }, + fab: { + icon: 'fas fa-plus', + activeIcon: 'fas fa-times' + }, + field: { + clear: 'fas fa-times-circle', + error: 'fas fa-exclamation-circle' + }, + pagination: { + first: 'fas fa-step-backward', + prev: 'fas fa-chevron-left', + next: 'fas fa-chevron-right', + last: 'fas fa-step-forward' + }, + rating: { + icon: 'fas fa-star' + }, + stepper: { + done: 'fas fa-check', + active: 'fas fa-pencil-alt', + error: 'fas fa-exclamation-triangle' + }, + tabs: { + left: 'fas fa-chevron-left', + right: 'fas fa-chevron-right', + up: 'fas fa-chevron-up', + down: 'fas fa-chevron-down' + }, + table: { + arrowUp: 'fas fa-arrow-up', + warning: 'fas fa-exclamation-triangle', + firstPage: 'fas fa-step-backward', + prevPage: 'fas fa-chevron-left', + nextPage: 'fas fa-chevron-right', + lastPage: 'fas fa-step-forward' + }, + tree: { + icon: 'fas fa-play' + }, + uploader: { + done: 'fas fa-check', + clear: 'fas fa-times', + add: 'fas fa-plus-square', + upload: 'fas fa-upload', + removeQueue: 'fas fa-stream', + removeUploaded: 'fas fa-clipboard-check' + } +} diff --git a/icon-set/fontawesome-v6-pro.js b/icon-set/fontawesome-v6-pro.js new file mode 100644 index 00000000000..2dd4e9dfa4a --- /dev/null +++ b/icon-set/fontawesome-v6-pro.js @@ -0,0 +1,128 @@ +export default { + name: 'fontawesome-v6-pro', + type: { + positive: 'fal fa-check', + negative: 'fal fa-triangle-exclamation', + info: 'fal fa-circle-info', + warning: 'fal fa-exclamation' + }, + arrow: { + up: 'fal fa-arrow-up', + right: 'fal fa-arrow-right', + down: 'fal fa-arrow-down', + left: 'fal fa-arrow-left', + dropdown: 'fal fa-caret-down' + }, + chevron: { + left: 'fal fa-chevron-left', + right: 'fal fa-chevron-right' + }, + colorPicker: { + spectrum: 'fal fa-eye-dropper', + tune: 'fal fa-sliders', + palette: 'fal fa-swatchbook' + }, + pullToRefresh: { + icon: 'fal fa-sync-alt' + }, + carousel: { + left: 'fal fa-chevron-left', + right: 'fal fa-chevron-right', + up: 'fal fa-chevron-up', + down: 'fal fa-chevron-down', + navigationIcon: 'fal fa-circle' + }, + chip: { + remove: 'fal fa-circle-xmark', + selected: 'fal fa-check' + }, + datetime: { + arrowLeft: 'fal fa-chevron-left', + arrowRight: 'fal fa-chevron-right', + now: 'fal fa-clock', + today: 'fal fa-calendar-check' + }, + editor: { + bold: 'fal fa-bold', + italic: 'fal fa-italic', + strikethrough: 'fal fa-strikethrough', + underline: 'fal fa-underline', + unorderedList: 'fal fa-list-ul', + orderedList: 'fal fa-list-ol', + subscript: 'fal fa-subscript', + superscript: 'fal fa-superscript', + hyperlink: 'fal fa-link', + toggleFullscreen: 'fal fa-maximize', + quote: 'fal fa-quote-right', + left: 'fal fa-align-left', + center: 'fal fa-align-center', + right: 'fal fa-align-right', + justify: 'fal fa-align-justify', + print: 'fal fa-print', + outdent: 'fal fa-outdent', + indent: 'fal fa-indent', + removeFormat: 'fal fa-eraser', + formatting: 'fal fa-heading', + fontSize: 'fal fa-text-height', + align: 'fal fa-align-left', + hr: 'fal fa-square-minus', + undo: 'fal fa-rotate-left', + redo: 'fal fa-rotate-right', + heading: 'fal fa-heading', + code: 'fal fa-code', + size: 'fal fa-text-height', + font: 'fal fa-font', + viewSource: 'fal fa-code' + }, + expansionItem: { + icon: 'fal fa-chevron-down', + denseIcon: 'fal fa-caret-down' + }, + fab: { + icon: 'fal fa-plus', + activeIcon: 'fal fa-xmark' + }, + field: { + clear: 'fal fa-circle-xmark', + error: 'fal fa-circle-exclamation' + }, + pagination: { + first: 'fal fa-backward-step', + prev: 'fal fa-chevron-left', + next: 'fal fa-chevron-right', + last: 'fal fa-forward-step' + }, + rating: { + icon: 'fal fa-star' + }, + stepper: { + done: 'fal fa-check', + active: 'fal fa-pencil', + error: 'fal fa-triangle-exclamation' + }, + tabs: { + left: 'fal fa-chevron-left', + right: 'fal fa-chevron-right', + up: 'fal fa-chevron-up', + down: 'fal fa-chevron-down' + }, + table: { + arrowUp: 'fal fa-long-arrow-up', + warning: 'fal fa-triangle-exclamation', + firstPage: 'fal fa-backward-step', + prevPage: 'fal fa-chevron-left', + nextPage: 'fal fa-chevron-right', + lastPage: 'fal fa-forward-step' + }, + tree: { + icon: 'fal fa-play' + }, + uploader: { + done: 'fal fa-check', + clear: 'fal fa-xmark', + add: 'fal fa-square-plus', + upload: 'fal fa-upload', + removeQueue: 'fal fa-bars-staggered', + removeUploaded: 'fal fa-clipboard-check' + } +} diff --git a/icon-set/fontawesome-v6.js b/icon-set/fontawesome-v6.js new file mode 100644 index 00000000000..7aa6b489d5d --- /dev/null +++ b/icon-set/fontawesome-v6.js @@ -0,0 +1,128 @@ +export default { + name: 'fontawesome-v6', + type: { + positive: 'fas fa-check', + negative: 'fas fa-triangle-exclamation', + info: 'fas fa-circle-info', + warning: 'fas fa-exclamation' + }, + arrow: { + up: 'fas fa-arrow-up', + right: 'fas fa-arrow-right', + down: 'fas fa-arrow-down', + left: 'fas fa-arrow-left', + dropdown: 'fas fa-caret-down' + }, + chevron: { + left: 'fas fa-chevron-left', + right: 'fas fa-chevron-right' + }, + colorPicker: { + spectrum: 'fas fa-eye-dropper', + tune: 'fas fa-sliders', + palette: 'fas fa-swatchbook' + }, + pullToRefresh: { + icon: 'fas fa-rotate' + }, + carousel: { + left: 'fas fa-chevron-left', + right: 'fas fa-chevron-right', + up: 'fas fa-chevron-up', + down: 'fas fa-chevron-down', + navigationIcon: 'fas fa-circle' + }, + chip: { + remove: 'fas fa-circle-xmark', + selected: 'fas fa-check' + }, + datetime: { + arrowLeft: 'fas fa-chevron-left', + arrowRight: 'fas fa-chevron-right', + now: 'far fa-clock', + today: 'far fa-calendar-check' + }, + editor: { + bold: 'fas fa-bold', + italic: 'fas fa-italic', + strikethrough: 'fas fa-strikethrough', + underline: 'fas fa-underline', + unorderedList: 'fas fa-list-ul', + orderedList: 'fas fa-list-ol', + subscript: 'fas fa-subscript', + superscript: 'fas fa-superscript', + hyperlink: 'fas fa-link', + toggleFullscreen: 'fas fa-maximize', + quote: 'fas fa-quote-right', + left: 'fas fa-align-left', + center: 'fas fa-align-center', + right: 'fas fa-align-right', + justify: 'fas fa-align-justify', + print: 'fas fa-print', + outdent: 'fas fa-outdent', + indent: 'fas fa-indent', + removeFormat: 'fas fa-eraser', + formatting: 'fas fa-heading', + fontSize: 'fas fa-text-height', + align: 'fas fa-align-left', + hr: 'far fa-square-minus', + undo: 'fas fa-rotate-left', + redo: 'fas fa-rotate-right', + heading: 'fas fa-heading', + code: 'fas fa-code', + size: 'fas fa-text-height', + font: 'fas fa-font', + viewSource: 'fas fa-code' + }, + expansionItem: { + icon: 'fas fa-chevron-down', + denseIcon: 'fas fa-caret-down' + }, + fab: { + icon: 'fas fa-plus', + activeIcon: 'fas fa-xmark' + }, + field: { + clear: 'fas fa-circle-xmark', + error: 'fas fa-circle-exclamation' + }, + pagination: { + first: 'fas fa-backward-step', + prev: 'fas fa-chevron-left', + next: 'fas fa-chevron-right', + last: 'fas fa-forward-step' + }, + rating: { + icon: 'fas fa-star' + }, + stepper: { + done: 'fas fa-check', + active: 'fas fa-pencil', + error: 'fas fa-triangle-exclamation' + }, + tabs: { + left: 'fas fa-chevron-left', + right: 'fas fa-chevron-right', + up: 'fas fa-chevron-up', + down: 'fas fa-chevron-down' + }, + table: { + arrowUp: 'fas fa-arrow-up', + warning: 'fas fa-triangle-exclamation', + firstPage: 'fas fa-backward-step', + prevPage: 'fas fa-chevron-left', + nextPage: 'fas fa-chevron-right', + lastPage: 'fas fa-forward-step' + }, + tree: { + icon: 'fas fa-play' + }, + uploader: { + done: 'fas fa-check', + clear: 'fas fa-xmark', + add: 'fas fa-square-plus', + upload: 'fas fa-upload', + removeQueue: 'fas fa-bars-staggered', + removeUploaded: 'fas fa-clipboard-check' + } +} diff --git a/icon-set/ionicons-v4.js b/icon-set/ionicons-v4.js new file mode 100644 index 00000000000..a6c35e6a05a --- /dev/null +++ b/icon-set/ionicons-v4.js @@ -0,0 +1,180 @@ +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont +} from '@quasar/extras/mdi-v6' + +export default { + name: 'ionicons-v4', + type: { + positive: 'ion-md-checkmark', + negative: 'ion-alert', + info: 'ion-information-circle-outline', + warning: 'ion-alert' + }, + arrow: { + up: 'ion-arrow-up', + right: 'ion-arrow-forward', + down: 'ion-arrow-down', + left: 'ion-arrow-back', + dropdown: 'ion-arrow-dropdown' + }, + chevron: { + left: 'ion-ios-arrow-back', + right: 'ion-ios-arrow-forward' + }, + colorPicker: { + spectrum: 'ion-aperture', + tune: 'ion-options', + palette: 'ion-apps' + }, + pullToRefresh: { + icon: 'ion-refresh' + }, + carousel: { + left: 'ion-ios-arrow-back', + right: 'ion-ios-arrow-forward', + up: 'ion-ios-arrow-up', + down: 'ion-ios-arrow-down', + navigationIcon: 'ion-square' + }, + chip: { + remove: 'ion-close-circle', + selected: 'ion-checkmark' + }, + datetime: { + arrowLeft: 'ion-ios-arrow-back', + arrowRight: 'ion-ios-arrow-forward', + now: 'ion-time', + today: 'ion-calendar' + }, + editor: { + hyperlink: 'ion-link', + toggleFullscreen: 'ion-expand', + quote: 'ion-quote', + print: 'ion-print', + undo: 'ion-undo', + redo: 'ion-redo', + code: 'ion-code', + viewSource: 'ion-ios-code', + + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont + }, + expansionItem: { + icon: 'ion-arrow-dropdown', + denseIcon: 'ion-arrow-dropdown' + }, + fab: { + icon: 'ion-add', + activeIcon: 'ion-close' + }, + field: { + clear: 'ion-close-circle', + error: 'ion-alert' + }, + pagination: { + first: 'ion-ios-skip-backward', + prev: 'ion-ios-arrow-back', + next: 'ion-ios-arrow-forward', + last: 'ion-ios-skip-forward' + }, + rating: { + icon: 'ion-star' + }, + stepper: { + done: 'ion-checkmark', + active: 'ion-create', + error: 'ion-warning' + }, + tabs: { + left: 'ion-ios-arrow-back', + right: 'ion-ios-arrow-forward', + up: 'ion-ios-arrow-up', + down: 'ion-ios-arrow-down' + }, + table: { + arrowUp: 'ion-arrow-up', + warning: 'ion-warning', + firstPage: 'ion-ios-return-left', + prevPage: 'ion-ios-arrow-back', + nextPage: 'ion-ios-arrow-forward', + lastPage: 'ion-ios-return-right' + }, + tree: { + icon: 'ion-play' + }, + uploader: { + done: 'ion-checkmark', + clear: 'ion-close', + add: 'ion-add-circle', + upload: 'ion-cloud-upload', + removeQueue: 'ion-trash', + removeUploaded: 'ion-done-all' + } +} diff --git a/icon-set/line-awesome.js b/icon-set/line-awesome.js new file mode 100644 index 00000000000..ef368bec4bd --- /dev/null +++ b/icon-set/line-awesome.js @@ -0,0 +1,128 @@ +export default { + name: 'line-awesome', + type: { + positive: 'las la-check', + negative: 'las la-exclamation-triangle', + info: 'las la-info-circle', + warning: 'las la-exclamation' + }, + arrow: { + up: 'las la-arrow-up', + right: 'las la-arrow-right', + down: 'las la-arrow-down', + left: 'las la-arrow-left', + dropdown: 'las la-caret-down' + }, + chevron: { + left: 'las la-chevron-left', + right: 'las la-chevron-right' + }, + colorPicker: { + spectrum: 'las la-eye-dropper', + tune: 'las la-sliders-h', + palette: 'las la-swatchbook' + }, + pullToRefresh: { + icon: 'las la-sync-alt' + }, + carousel: { + left: 'las la-chevron-left', + right: 'las la-chevron-right', + up: 'las la-chevron-up', + down: 'las la-chevron-down', + navigationIcon: 'las la-square' + }, + chip: { + remove: 'las la-times-circle', + selected: 'las la-check' + }, + datetime: { + arrowLeft: 'las la-chevron-left', + arrowRight: 'las la-chevron-right', + now: 'lar la-clock', + today: 'lar la-calendar-check' + }, + editor: { + bold: 'las la-bold', + italic: 'las la-italic', + strikethrough: 'las la-strikethrough', + underline: 'las la-underline', + unorderedList: 'las la-list-ul', + orderedList: 'las la-list-ol', + subscript: 'las la-subscript', + superscript: 'las la-superscript', + hyperlink: 'las la-link', + toggleFullscreen: 'las la-expand-arrows-alt', + quote: 'las la-quote-right', + left: 'las la-align-left', + center: 'las la-align-center', + right: 'las la-align-right', + justify: 'las la-align-justify', + print: 'las la-print', + outdent: 'las la-outdent', + indent: 'las la-indent', + removeFormat: 'las la-eraser', + formatting: 'las la-heading', + fontSize: 'las la-text-height', + align: 'las la-align-left', + hr: 'lar la-minus-square', + undo: 'las la-undo', + redo: 'las la-redo', + heading: 'las la-heading', + code: 'las la-code', + size: 'las la-text-height', + font: 'las la-font', + viewSource: 'las la-code' + }, + expansionItem: { + icon: 'las la-chevron-down', + denseIcon: 'las la-caret-down' + }, + fab: { + icon: 'las la-plus', + activeIcon: 'las la-times' + }, + field: { + clear: 'las la-times-circle', + error: 'las la-exclamation-circle' + }, + pagination: { + first: 'las la-fast-backward', + prev: 'las la-chevron-left', + next: 'las la-chevron-right', + last: 'las la-fast-forward' + }, + rating: { + icon: 'las la-star' + }, + stepper: { + done: 'las la-check', + active: 'las la-pencil-alt', + error: 'las la-exclamation-triangle' + }, + tabs: { + left: 'las la-chevron-left', + right: 'las la-chevron-right', + up: 'las la-chevron-up', + down: 'las la-chevron-down' + }, + table: { + arrowUp: 'las la-arrow-up', + warning: 'las la-exclamation-triangle', + firstPage: 'las la-fast-backward', + prevPage: 'las la-chevron-left', + nextPage: 'las la-chevron-right', + lastPage: 'las la-fast-forward' + }, + tree: { + icon: 'las la-play' + }, + uploader: { + done: 'las la-check', + clear: 'las la-times', + add: 'las la-plus-square', + upload: 'las la-upload', + removeQueue: 'las la-stream', + removeUploaded: 'las la-clipboard-check' + } +} diff --git a/icon-set/material-icons-outlined.js b/icon-set/material-icons-outlined.js new file mode 100644 index 00000000000..c1aab0b7e45 --- /dev/null +++ b/icon-set/material-icons-outlined.js @@ -0,0 +1,128 @@ +export default { + name: 'material-icons-outlined', + type: { + positive: 'o_check_circle', + negative: 'o_warning', + info: 'o_info', + warning: 'o_priority_high' + }, + arrow: { + up: 'o_arrow_upward', + right: 'o_arrow_forward', + down: 'o_arrow_downward', + left: 'o_arrow_back', + dropdown: 'o_arrow_drop_down' + }, + chevron: { + left: 'o_chevron_left', + right: 'o_chevron_right' + }, + colorPicker: { + spectrum: 'o_gradient', + tune: 'o_tune', + palette: 'o_style' + }, + pullToRefresh: { + icon: 'o_refresh' + }, + carousel: { + left: 'o_chevron_left', + right: 'o_chevron_right', + up: 'o_keyboard_arrow_up', + down: 'o_keyboard_arrow_down', + navigationIcon: 'o_lens' + }, + chip: { + remove: 'o_cancel', + selected: 'o_check' + }, + datetime: { + arrowLeft: 'o_chevron_left', + arrowRight: 'o_chevron_right', + now: 'o_access_time', + today: 'o_today' + }, + editor: { + bold: 'o_format_bold', + italic: 'o_format_italic', + strikethrough: 'o_strikethrough_s', + underline: 'o_format_underlined', + unorderedList: 'o_format_list_bulleted', + orderedList: 'o_format_list_numbered', + subscript: 'o_vertical_align_bottom', + superscript: 'o_vertical_align_top', + hyperlink: 'o_link', + toggleFullscreen: 'o_fullscreen', + quote: 'o_format_quote', + left: 'o_format_align_left', + center: 'o_format_align_center', + right: 'o_format_align_right', + justify: 'o_format_align_justify', + print: 'o_print', + outdent: 'o_format_indent_decrease', + indent: 'o_format_indent_increase', + removeFormat: 'o_format_clear', + formatting: 'o_text_format', + fontSize: 'o_format_size', + align: 'o_format_align_left', + hr: 'o_remove', + undo: 'o_undo', + redo: 'o_redo', + heading: 'o_format_size', + code: 'o_code', + size: 'o_format_size', + font: 'o_font_download', + viewSource: 'o_code' + }, + expansionItem: { + icon: 'o_keyboard_arrow_down', + denseIcon: 'o_arrow_drop_down' + }, + fab: { + icon: 'o_add', + activeIcon: 'o_close' + }, + field: { + clear: 'o_cancel', + error: 'o_error' + }, + pagination: { + first: 'o_first_page', + prev: 'o_keyboard_arrow_left', + next: 'o_keyboard_arrow_right', + last: 'o_last_page' + }, + rating: { + icon: 'o_grade' + }, + stepper: { + done: 'o_check', + active: 'o_edit', + error: 'o_warning' + }, + tabs: { + left: 'o_chevron_left', + right: 'o_chevron_right', + up: 'o_keyboard_arrow_up', + down: 'o_keyboard_arrow_down' + }, + table: { + arrowUp: 'o_arrow_upward', + warning: 'o_warning', + firstPage: 'o_first_page', + prevPage: 'o_chevron_left', + nextPage: 'o_chevron_right', + lastPage: 'o_last_page' + }, + tree: { + icon: 'o_play_arrow' + }, + uploader: { + done: 'o_done', + clear: 'o_clear', + add: 'o_add_box', + upload: 'o_cloud_upload', + removeQueue: 'o_clear_all', + removeUploaded: 'o_done_all' + } +} diff --git a/icon-set/material-icons-round.js b/icon-set/material-icons-round.js new file mode 100644 index 00000000000..13d695234b7 --- /dev/null +++ b/icon-set/material-icons-round.js @@ -0,0 +1,128 @@ +export default { + name: 'material-icons-round', + type: { + positive: 'r_check_circle', + negative: 'r_warning', + info: 'r_info', + warning: 'r_priority_high' + }, + arrow: { + up: 'r_arrow_upward', + right: 'r_arrow_forward', + down: 'r_arrow_downward', + left: 'r_arrow_back', + dropdown: 'r_arrow_drop_down' + }, + chevron: { + left: 'r_chevron_left', + right: 'r_chevron_right' + }, + colorPicker: { + spectrum: 'r_gradient', + tune: 'r_tune', + palette: 'r_style' + }, + pullToRefresh: { + icon: 'r_refresh' + }, + carousel: { + left: 'r_chevron_left', + right: 'r_chevron_right', + up: 'r_keyboard_arrow_up', + down: 'r_keyboard_arrow_down', + navigationIcon: 'r_lens' + }, + chip: { + remove: 'r_cancel', + selected: 'r_check' + }, + datetime: { + arrowLeft: 'r_chevron_left', + arrowRight: 'r_chevron_right', + now: 'r_access_time', + today: 'r_today' + }, + editor: { + bold: 'r_format_bold', + italic: 'r_format_italic', + strikethrough: 'r_strikethrough_s', + underline: 'r_format_underlined', + unorderedList: 'r_format_list_bulleted', + orderedList: 'r_format_list_numbered', + subscript: 'r_vertical_align_bottom', + superscript: 'r_vertical_align_top', + hyperlink: 'r_link', + toggleFullscreen: 'r_fullscreen', + quote: 'r_format_quote', + left: 'r_format_align_left', + center: 'r_format_align_center', + right: 'r_format_align_right', + justify: 'r_format_align_justify', + print: 'r_print', + outdent: 'r_format_indent_decrease', + indent: 'r_format_indent_increase', + removeFormat: 'r_format_clear', + formatting: 'r_text_format', + fontSize: 'r_format_size', + align: 'r_format_align_left', + hr: 'r_remove', + undo: 'r_undo', + redo: 'r_redo', + heading: 'r_format_size', + code: 'r_code', + size: 'r_format_size', + font: 'r_font_download', + viewSource: 'r_code' + }, + expansionItem: { + icon: 'r_keyboard_arrow_down', + denseIcon: 'r_arrow_drop_down' + }, + fab: { + icon: 'r_add', + activeIcon: 'r_close' + }, + field: { + clear: 'r_cancel', + error: 'r_error' + }, + pagination: { + first: 'r_first_page', + prev: 'r_keyboard_arrow_left', + next: 'r_keyboard_arrow_right', + last: 'r_last_page' + }, + rating: { + icon: 'r_grade' + }, + stepper: { + done: 'r_check', + active: 'r_edit', + error: 'r_warning' + }, + tabs: { + left: 'r_chevron_left', + right: 'r_chevron_right', + up: 'r_keyboard_arrow_up', + down: 'r_keyboard_arrow_down' + }, + table: { + arrowUp: 'r_arrow_upward', + warning: 'r_warning', + firstPage: 'r_first_page', + prevPage: 'r_chevron_left', + nextPage: 'r_chevron_right', + lastPage: 'r_last_page' + }, + tree: { + icon: 'r_play_arrow' + }, + uploader: { + done: 'r_done', + clear: 'r_clear', + add: 'r_add_box', + upload: 'r_cloud_upload', + removeQueue: 'r_clear_all', + removeUploaded: 'r_done_all' + } +} diff --git a/icon-set/material-icons-sharp.js b/icon-set/material-icons-sharp.js new file mode 100644 index 00000000000..08f58757850 --- /dev/null +++ b/icon-set/material-icons-sharp.js @@ -0,0 +1,128 @@ +export default { + name: 'material-icons-sharp', + type: { + positive: 's_check_circle', + negative: 's_warning', + info: 's_info', + warning: 's_priority_high' + }, + arrow: { + up: 's_arrow_upward', + right: 's_arrow_forward', + down: 's_arrow_downward', + left: 's_arrow_back', + dropdown: 's_arrow_drop_down' + }, + chevron: { + left: 's_chevron_left', + right: 's_chevron_right' + }, + colorPicker: { + spectrum: 's_gradient', + tune: 's_tune', + palette: 's_style' + }, + pullToRefresh: { + icon: 's_refresh' + }, + carousel: { + left: 's_chevron_left', + right: 's_chevron_right', + up: 's_keyboard_arrow_up', + down: 's_keyboard_arrow_down', + navigationIcon: 's_lens' + }, + chip: { + remove: 's_cancel', + selected: 's_check' + }, + datetime: { + arrowLeft: 's_chevron_left', + arrowRight: 's_chevron_right', + now: 's_access_time', + today: 's_today' + }, + editor: { + bold: 's_format_bold', + italic: 's_format_italic', + strikethrough: 's_strikethrough_s', + underline: 's_format_underlined', + unorderedList: 's_format_list_bulleted', + orderedList: 's_format_list_numbered', + subscript: 's_vertical_align_bottom', + superscript: 's_vertical_align_top', + hyperlink: 's_link', + toggleFullscreen: 's_fullscreen', + quote: 's_format_quote', + left: 's_format_align_left', + center: 's_format_align_center', + right: 's_format_align_right', + justify: 's_format_align_justify', + print: 's_print', + outdent: 's_format_indent_decrease', + indent: 's_format_indent_increase', + removeFormat: 's_format_clear', + formatting: 's_text_format', + fontSize: 's_format_size', + align: 's_format_align_left', + hr: 's_remove', + undo: 's_undo', + redo: 's_redo', + heading: 's_format_size', + code: 's_code', + size: 's_format_size', + font: 's_font_download', + viewSource: 's_code' + }, + expansionItem: { + icon: 's_keyboard_arrow_down', + denseIcon: 's_arrow_drop_down' + }, + fab: { + icon: 's_add', + activeIcon: 's_close' + }, + field: { + clear: 's_cancel', + error: 's_error' + }, + pagination: { + first: 's_first_page', + prev: 's_keyboard_arrow_left', + next: 's_keyboard_arrow_right', + last: 's_last_page' + }, + rating: { + icon: 's_grade' + }, + stepper: { + done: 's_check', + active: 's_edit', + error: 's_warning' + }, + tabs: { + left: 's_chevron_left', + right: 's_chevron_right', + up: 's_keyboard_arrow_up', + down: 's_keyboard_arrow_down' + }, + table: { + arrowUp: 's_arrow_upward', + warning: 's_warning', + firstPage: 's_first_page', + prevPage: 's_chevron_left', + nextPage: 's_chevron_right', + lastPage: 's_last_page' + }, + tree: { + icon: 's_play_arrow' + }, + uploader: { + done: 's_done', + clear: 's_clear', + add: 's_add_box', + upload: 's_cloud_upload', + removeQueue: 's_clear_all', + removeUploaded: 's_done_all' + } +} diff --git a/icon-set/material-icons.js b/icon-set/material-icons.js new file mode 100644 index 00000000000..36f2a50dfd6 --- /dev/null +++ b/icon-set/material-icons.js @@ -0,0 +1,128 @@ +export default { + name: 'material-icons', + type: { + positive: 'check_circle', + negative: 'warning', + info: 'info', + warning: 'priority_high' + }, + arrow: { + up: 'arrow_upward', + right: 'arrow_forward', + down: 'arrow_downward', + left: 'arrow_back', + dropdown: 'arrow_drop_down' + }, + chevron: { + left: 'chevron_left', + right: 'chevron_right' + }, + colorPicker: { + spectrum: 'gradient', + tune: 'tune', + palette: 'style' + }, + pullToRefresh: { + icon: 'refresh' + }, + carousel: { + left: 'chevron_left', + right: 'chevron_right', + up: 'keyboard_arrow_up', + down: 'keyboard_arrow_down', + navigationIcon: 'lens' + }, + chip: { + remove: 'cancel', + selected: 'check' + }, + datetime: { + arrowLeft: 'chevron_left', + arrowRight: 'chevron_right', + now: 'access_time', + today: 'today' + }, + editor: { + bold: 'format_bold', + italic: 'format_italic', + strikethrough: 'strikethrough_s', + underline: 'format_underlined', + unorderedList: 'format_list_bulleted', + orderedList: 'format_list_numbered', + subscript: 'vertical_align_bottom', + superscript: 'vertical_align_top', + hyperlink: 'link', + toggleFullscreen: 'fullscreen', + quote: 'format_quote', + left: 'format_align_left', + center: 'format_align_center', + right: 'format_align_right', + justify: 'format_align_justify', + print: 'print', + outdent: 'format_indent_decrease', + indent: 'format_indent_increase', + removeFormat: 'format_clear', + formatting: 'text_format', + fontSize: 'format_size', + align: 'format_align_left', + hr: 'remove', + undo: 'undo', + redo: 'redo', + heading: 'format_size', + code: 'code', + size: 'format_size', + font: 'font_download', + viewSource: 'code' + }, + expansionItem: { + icon: 'keyboard_arrow_down', + denseIcon: 'arrow_drop_down' + }, + fab: { + icon: 'add', + activeIcon: 'close' + }, + field: { + clear: 'cancel', + error: 'error' + }, + pagination: { + first: 'first_page', + prev: 'keyboard_arrow_left', + next: 'keyboard_arrow_right', + last: 'last_page' + }, + rating: { + icon: 'grade' + }, + stepper: { + done: 'check', + active: 'edit', + error: 'warning' + }, + tabs: { + left: 'chevron_left', + right: 'chevron_right', + up: 'keyboard_arrow_up', + down: 'keyboard_arrow_down' + }, + table: { + arrowUp: 'arrow_upward', + warning: 'warning', + firstPage: 'first_page', + prevPage: 'chevron_left', + nextPage: 'chevron_right', + lastPage: 'last_page' + }, + tree: { + icon: 'play_arrow' + }, + uploader: { + done: 'done', + clear: 'clear', + add: 'add_box', + upload: 'cloud_upload', + removeQueue: 'clear_all', + removeUploaded: 'done_all' + } +} diff --git a/icon-set/material-symbols-outlined.js b/icon-set/material-symbols-outlined.js new file mode 100644 index 00000000000..c9ca042110d --- /dev/null +++ b/icon-set/material-symbols-outlined.js @@ -0,0 +1,128 @@ +export default { + name: 'material-symbols-outlined', + type: { + positive: 'sym_o_check_circle', + negative: 'sym_o_warning', + info: 'sym_o_info', + warning: 'sym_o_priority_high' + }, + arrow: { + up: 'sym_o_arrow_upward', + right: 'sym_o_arrow_forward', + down: 'sym_o_arrow_downward', + left: 'sym_o_arrow_back', + dropdown: 'sym_o_arrow_drop_down' + }, + chevron: { + left: 'sym_o_chevron_left', + right: 'sym_o_chevron_right' + }, + colorPicker: { + spectrum: 'sym_o_gradient', + tune: 'sym_o_tune', + palette: 'sym_o_style' + }, + pullToRefresh: { + icon: 'sym_o_refresh' + }, + carousel: { + left: 'sym_o_chevron_left', + right: 'sym_o_chevron_right', + up: 'sym_o_keyboard_arrow_up', + down: 'sym_o_keyboard_arrow_down', + navigationIcon: 'sym_o_lens' + }, + chip: { + remove: 'sym_o_cancel', + selected: 'sym_o_check' + }, + datetime: { + arrowLeft: 'sym_o_chevron_left', + arrowRight: 'sym_o_chevron_right', + now: 'sym_o_schedule', + today: 'sym_o_today' + }, + editor: { + bold: 'sym_o_format_bold', + italic: 'sym_o_format_italic', + strikethrough: 'sym_o_strikethrough_s', + underline: 'sym_o_format_underlined', + unorderedList: 'sym_o_format_list_bulleted', + orderedList: 'sym_o_format_list_numbered', + subscript: 'sym_o_vertical_align_bottom', + superscript: 'sym_o_vertical_align_top', + hyperlink: 'sym_o_link', + toggleFullscreen: 'sym_o_fullscreen', + quote: 'sym_o_format_quote', + left: 'sym_o_format_align_left', + center: 'sym_o_format_align_center', + right: 'sym_o_format_align_right', + justify: 'sym_o_format_align_justify', + print: 'sym_o_print', + outdent: 'sym_o_format_indent_decrease', + indent: 'sym_o_format_indent_increase', + removeFormat: 'sym_o_format_clear', + formatting: 'sym_o_text_format', + fontSize: 'sym_o_format_size', + align: 'sym_o_format_align_left', + hr: 'sym_o_remove', + undo: 'sym_o_undo', + redo: 'sym_o_redo', + heading: 'sym_o_format_size', + code: 'sym_o_code', + size: 'sym_o_format_size', + font: 'sym_o_font_download', + viewSource: 'sym_o_code' + }, + expansionItem: { + icon: 'sym_o_keyboard_arrow_down', + denseIcon: 'sym_o_arrow_drop_down' + }, + fab: { + icon: 'sym_o_add', + activeIcon: 'sym_o_close' + }, + field: { + clear: 'sym_o_cancel', + error: 'sym_o_error' + }, + pagination: { + first: 'sym_o_first_page', + prev: 'sym_o_keyboard_arrow_left', + next: 'sym_o_keyboard_arrow_right', + last: 'sym_o_last_page' + }, + rating: { + icon: 'sym_o_grade' + }, + stepper: { + done: 'sym_o_check', + active: 'sym_o_edit', + error: 'sym_o_warning' + }, + tabs: { + left: 'sym_o_chevron_left', + right: 'sym_o_chevron_right', + up: 'sym_o_keyboard_arrow_up', + down: 'sym_o_keyboard_arrow_down' + }, + table: { + arrowUp: 'sym_o_arrow_upward', + warning: 'sym_o_warning', + firstPage: 'sym_o_first_page', + prevPage: 'sym_o_chevron_left', + nextPage: 'sym_o_chevron_right', + lastPage: 'sym_o_last_page' + }, + tree: { + icon: 'sym_o_play_arrow' + }, + uploader: { + done: 'sym_o_done', + clear: 'sym_o_close', + add: 'sym_o_add_box', + upload: 'sym_o_cloud_upload', + removeQueue: 'sym_o_clear_all', + removeUploaded: 'sym_o_done_all' + } +} diff --git a/icon-set/material-symbols-rounded.js b/icon-set/material-symbols-rounded.js new file mode 100644 index 00000000000..52d280a985b --- /dev/null +++ b/icon-set/material-symbols-rounded.js @@ -0,0 +1,128 @@ +export default { + name: 'material-symbols-rounded', + type: { + positive: 'sym_r_check_circle', + negative: 'sym_r_warning', + info: 'sym_r_info', + warning: 'sym_r_priority_high' + }, + arrow: { + up: 'sym_r_arrow_upward', + right: 'sym_r_arrow_forward', + down: 'sym_r_arrow_downward', + left: 'sym_r_arrow_back', + dropdown: 'sym_r_arrow_drop_down' + }, + chevron: { + left: 'sym_r_chevron_left', + right: 'sym_r_chevron_right' + }, + colorPicker: { + spectrum: 'sym_r_gradient', + tune: 'sym_r_tune', + palette: 'sym_r_style' + }, + pullToRefresh: { + icon: 'sym_r_refresh' + }, + carousel: { + left: 'sym_r_chevron_left', + right: 'sym_r_chevron_right', + up: 'sym_r_keyboard_arrow_up', + down: 'sym_r_keyboard_arrow_down', + navigationIcon: 'sym_r_lens' + }, + chip: { + remove: 'sym_r_cancel', + selected: 'sym_r_check' + }, + datetime: { + arrowLeft: 'sym_r_chevron_left', + arrowRight: 'sym_r_chevron_right', + now: 'sym_r_schedule', + today: 'sym_r_today' + }, + editor: { + bold: 'sym_r_format_bold', + italic: 'sym_r_format_italic', + strikethrough: 'sym_r_strikethrough_s', + underline: 'sym_r_format_underlined', + unorderedList: 'sym_r_format_list_bulleted', + orderedList: 'sym_r_format_list_numbered', + subscript: 'sym_r_vertical_align_bottom', + superscript: 'sym_r_vertical_align_top', + hyperlink: 'sym_r_link', + toggleFullscreen: 'sym_r_fullscreen', + quote: 'sym_r_format_quote', + left: 'sym_r_format_align_left', + center: 'sym_r_format_align_center', + right: 'sym_r_format_align_right', + justify: 'sym_r_format_align_justify', + print: 'sym_r_print', + outdent: 'sym_r_format_indent_decrease', + indent: 'sym_r_format_indent_increase', + removeFormat: 'sym_r_format_clear', + formatting: 'sym_r_text_format', + fontSize: 'sym_r_format_size', + align: 'sym_r_format_align_left', + hr: 'sym_r_remove', + undo: 'sym_r_undo', + redo: 'sym_r_redo', + heading: 'sym_r_format_size', + code: 'sym_r_code', + size: 'sym_r_format_size', + font: 'sym_r_font_download', + viewSource: 'sym_r_code' + }, + expansionItem: { + icon: 'sym_r_keyboard_arrow_down', + denseIcon: 'sym_r_arrow_drop_down' + }, + fab: { + icon: 'sym_r_add', + activeIcon: 'sym_r_close' + }, + field: { + clear: 'sym_r_cancel', + error: 'sym_r_error' + }, + pagination: { + first: 'sym_r_first_page', + prev: 'sym_r_keyboard_arrow_left', + next: 'sym_r_keyboard_arrow_right', + last: 'sym_r_last_page' + }, + rating: { + icon: 'sym_r_grade' + }, + stepper: { + done: 'sym_r_check', + active: 'sym_r_edit', + error: 'sym_r_warning' + }, + tabs: { + left: 'sym_r_chevron_left', + right: 'sym_r_chevron_right', + up: 'sym_r_keyboard_arrow_up', + down: 'sym_r_keyboard_arrow_down' + }, + table: { + arrowUp: 'sym_r_arrow_upward', + warning: 'sym_r_warning', + firstPage: 'sym_r_first_page', + prevPage: 'sym_r_chevron_left', + nextPage: 'sym_r_chevron_right', + lastPage: 'sym_r_last_page' + }, + tree: { + icon: 'sym_r_play_arrow' + }, + uploader: { + done: 'sym_r_done', + clear: 'sym_r_close', + add: 'sym_r_add_box', + upload: 'sym_r_cloud_upload', + removeQueue: 'sym_r_clear_all', + removeUploaded: 'sym_r_done_all' + } +} diff --git a/icon-set/material-symbols-sharp.js b/icon-set/material-symbols-sharp.js new file mode 100644 index 00000000000..54dfa17d365 --- /dev/null +++ b/icon-set/material-symbols-sharp.js @@ -0,0 +1,128 @@ +export default { + name: 'material-symbols-sharp', + type: { + positive: 'sym_s_check_circle', + negative: 'sym_s_warning', + info: 'sym_s_info', + warning: 'sym_s_priority_high' + }, + arrow: { + up: 'sym_s_arrow_upward', + right: 'sym_s_arrow_forward', + down: 'sym_s_arrow_downward', + left: 'sym_s_arrow_back', + dropdown: 'sym_s_arrow_drop_down' + }, + chevron: { + left: 'sym_s_chevron_left', + right: 'sym_s_chevron_right' + }, + colorPicker: { + spectrum: 'sym_s_gradient', + tune: 'sym_s_tune', + palette: 'sym_s_style' + }, + pullToRefresh: { + icon: 'sym_s_refresh' + }, + carousel: { + left: 'sym_s_chevron_left', + right: 'sym_s_chevron_right', + up: 'sym_s_keyboard_arrow_up', + down: 'sym_s_keyboard_arrow_down', + navigationIcon: 'sym_s_lens' + }, + chip: { + remove: 'sym_s_cancel', + selected: 'sym_s_check' + }, + datetime: { + arrowLeft: 'sym_s_chevron_left', + arrowRight: 'sym_s_chevron_right', + now: 'sym_s_schedule', + today: 'sym_s_today' + }, + editor: { + bold: 'sym_s_format_bold', + italic: 'sym_s_format_italic', + strikethrough: 'sym_s_strikethrough_s', + underline: 'sym_s_format_underlined', + unorderedList: 'sym_s_format_list_bulleted', + orderedList: 'sym_s_format_list_numbered', + subscript: 'sym_s_vertical_align_bottom', + superscript: 'sym_s_vertical_align_top', + hyperlink: 'sym_s_link', + toggleFullscreen: 'sym_s_fullscreen', + quote: 'sym_s_format_quote', + left: 'sym_s_format_align_left', + center: 'sym_s_format_align_center', + right: 'sym_s_format_align_right', + justify: 'sym_s_format_align_justify', + print: 'sym_s_print', + outdent: 'sym_s_format_indent_decrease', + indent: 'sym_s_format_indent_increase', + removeFormat: 'sym_s_format_clear', + formatting: 'sym_s_text_format', + fontSize: 'sym_s_format_size', + align: 'sym_s_format_align_left', + hr: 'sym_s_remove', + undo: 'sym_s_undo', + redo: 'sym_s_redo', + heading: 'sym_s_format_size', + code: 'sym_s_code', + size: 'sym_s_format_size', + font: 'sym_s_font_download', + viewSource: 'sym_s_code' + }, + expansionItem: { + icon: 'sym_s_keyboard_arrow_down', + denseIcon: 'sym_s_arrow_drop_down' + }, + fab: { + icon: 'sym_s_add', + activeIcon: 'sym_s_close' + }, + field: { + clear: 'sym_s_cancel', + error: 'sym_s_error' + }, + pagination: { + first: 'sym_s_first_page', + prev: 'sym_s_keyboard_arrow_left', + next: 'sym_s_keyboard_arrow_right', + last: 'sym_s_last_page' + }, + rating: { + icon: 'sym_s_grade' + }, + stepper: { + done: 'sym_s_check', + active: 'sym_s_edit', + error: 'sym_s_warning' + }, + tabs: { + left: 'sym_s_chevron_left', + right: 'sym_s_chevron_right', + up: 'sym_s_keyboard_arrow_up', + down: 'sym_s_keyboard_arrow_down' + }, + table: { + arrowUp: 'sym_s_arrow_upward', + warning: 'sym_s_warning', + firstPage: 'sym_s_first_page', + prevPage: 'sym_s_chevron_left', + nextPage: 'sym_s_chevron_right', + lastPage: 'sym_s_last_page' + }, + tree: { + icon: 'sym_s_play_arrow' + }, + uploader: { + done: 'sym_s_done', + clear: 'sym_s_close', + add: 'sym_s_add_box', + upload: 'sym_s_cloud_upload', + removeQueue: 'sym_s_clear_all', + removeUploaded: 'sym_s_done_all' + } +} diff --git a/icon-set/mdi-v3.js b/icon-set/mdi-v3.js new file mode 100644 index 00000000000..10d1a5a63f6 --- /dev/null +++ b/icon-set/mdi-v3.js @@ -0,0 +1,141 @@ +export default { + name: 'mdi-v3', + type: { + positive: 'mdi-check-circle', + negative: 'mdi-alert', + info: 'mdi-information', + warning: 'mdi-exclamation' + }, + arrow: { + up: 'mdi-arrow-up', + right: 'mdi-arrow-right', + down: 'mdi-arrow-down', + left: 'mdi-arrow-left', + dropdown: 'mdi-menu-down' + }, + chevron: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right' + }, + colorPicker: { + spectrum: 'mdi-gradient', + tune: 'mdi-tune', + palette: 'mdi-palette-swatch' + }, + pullToRefresh: { + icon: 'mdi-refresh' + }, + carousel: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right', + up: 'mdi-chevron-up', + down: 'mdi-chevron-down', + navigationIcon: 'mdi-circle' + }, + chip: { + remove: 'mdi-close-circle', + selected: 'mdi-check' + }, + datetime: { + arrowLeft: 'mdi-chevron-left', + arrowRight: 'mdi-chevron-right', + now: 'mdi-clock-outline', + today: 'mdi-calendar-today' + }, + editor: { + bold: 'mdi-format-bold', + italic: 'mdi-format-italic', + strikethrough: 'mdi-format-strikethrough-variant', + underline: 'mdi-format-underline', + unorderedList: 'mdi-format-list-bulleted', + orderedList: 'mdi-format-list-numbered', + subscript: 'mdi-format-subscript', + superscript: 'mdi-format-superscript', + hyperlink: 'mdi-link', + toggleFullscreen: 'mdi-fullscreen', + quote: 'mdi-format-quote-close', + left: 'mdi-format-align-left', + center: 'mdi-format-align-center', + right: 'mdi-format-align-right', + justify: 'mdi-format-align-justify', + print: 'mdi-printer', + outdent: 'mdi-format-indent-decrease', + indent: 'mdi-format-indent-increase', + removeFormat: 'mdi-format-clear', + formatting: 'mdi-format-color-text', + fontSize: 'mdi-format-size', + align: 'mdi-format-align-left', + hr: 'mdi-minus', + undo: 'mdi-undo', + redo: 'mdi-redo', + heading: 'mdi-format-size', + heading1: 'mdi-format-header-1', + heading2: 'mdi-format-header-2', + heading3: 'mdi-format-header-3', + heading4: 'mdi-format-header-4', + heading5: 'mdi-format-header-5', + heading6: 'mdi-format-header-6', + code: 'mdi-code-tags', + size: 'mdi-format-size', + size1: 'mdi-numeric-1-box', + size2: 'mdi-numeric-2-box', + size3: 'mdi-numeric-3-box', + size4: 'mdi-numeric-4-box', + size5: 'mdi-numeric-5-box', + size6: 'mdi-numeric-6-box', + size7: 'mdi-numeric-7-box', + font: 'mdi-format-font', + viewSource: 'mdi-code-tags' + }, + expansionItem: { + icon: 'mdi-chevron-down', + denseIcon: 'mdi-menu-down' + }, + fab: { + icon: 'mdi-plus', + activeIcon: 'mdi-close' + }, + field: { + clear: 'mdi-close-circle', + error: 'mdi-alert-circle' + }, + pagination: { + first: 'mdi-chevron-double-left', + prev: 'mdi-chevron-left', + next: 'mdi-chevron-right', + last: 'mdi-chevron-double-right' + }, + rating: { + icon: 'mdi-star' + }, + stepper: { + done: 'mdi-check', + active: 'mdi-pencil', + error: 'mdi-alert' + }, + tabs: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right', + up: 'mdi-chevron-up', + down: 'mdi-chevron-down' + }, + table: { + arrowUp: 'mdi-arrow-up', + warning: 'mdi-alert', + firstPage: 'mdi-chevron-double-left', + prevPage: 'mdi-chevron-left', + nextPage: 'mdi-chevron-right', + lastPage: 'mdi-chevron-double-right' + }, + tree: { + icon: 'mdi-play' + }, + uploader: { + done: 'mdi-check', + clear: 'mdi-close', + add: 'mdi-plus-box', + upload: 'mdi-cloud-upload', + removeQueue: 'mdi-notification-clear-all', + removeUploaded: 'mdi-check-all' + } +} diff --git a/icon-set/mdi-v4.js b/icon-set/mdi-v4.js new file mode 100644 index 00000000000..a2c085ed20d --- /dev/null +++ b/icon-set/mdi-v4.js @@ -0,0 +1,141 @@ +export default { + name: 'mdi-v4', + type: { + positive: 'mdi-check-circle', + negative: 'mdi-alert', + info: 'mdi-information', + warning: 'mdi-exclamation' + }, + arrow: { + up: 'mdi-arrow-up', + right: 'mdi-arrow-right', + down: 'mdi-arrow-down', + left: 'mdi-arrow-left', + dropdown: 'mdi-menu-down' + }, + chevron: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right' + }, + colorPicker: { + spectrum: 'mdi-gradient', + tune: 'mdi-tune', + palette: 'mdi-palette-swatch' + }, + pullToRefresh: { + icon: 'mdi-refresh' + }, + carousel: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right', + up: 'mdi-chevron-up', + down: 'mdi-chevron-down', + navigationIcon: 'mdi-circle' + }, + chip: { + remove: 'mdi-close-circle', + selected: 'mdi-check' + }, + datetime: { + arrowLeft: 'mdi-chevron-left', + arrowRight: 'mdi-chevron-right', + now: 'mdi-clock-outline', + today: 'mdi-calendar-today' + }, + editor: { + bold: 'mdi-format-bold', + italic: 'mdi-format-italic', + strikethrough: 'mdi-format-strikethrough-variant', + underline: 'mdi-format-underline', + unorderedList: 'mdi-format-list-bulleted', + orderedList: 'mdi-format-list-numbered', + subscript: 'mdi-format-subscript', + superscript: 'mdi-format-superscript', + hyperlink: 'mdi-link', + toggleFullscreen: 'mdi-fullscreen', + quote: 'mdi-format-quote-close', + left: 'mdi-format-align-left', + center: 'mdi-format-align-center', + right: 'mdi-format-align-right', + justify: 'mdi-format-align-justify', + print: 'mdi-printer', + outdent: 'mdi-format-indent-decrease', + indent: 'mdi-format-indent-increase', + removeFormat: 'mdi-format-clear', + formatting: 'mdi-format-color-text', + fontSize: 'mdi-format-size', + align: 'mdi-format-align-left', + hr: 'mdi-minus', + undo: 'mdi-undo', + redo: 'mdi-redo', + heading: 'mdi-format-size', + heading1: 'mdi-format-header-1', + heading2: 'mdi-format-header-2', + heading3: 'mdi-format-header-3', + heading4: 'mdi-format-header-4', + heading5: 'mdi-format-header-5', + heading6: 'mdi-format-header-6', + code: 'mdi-code-tags', + size: 'mdi-format-size', + size1: 'mdi-numeric-1-box', + size2: 'mdi-numeric-2-box', + size3: 'mdi-numeric-3-box', + size4: 'mdi-numeric-4-box', + size5: 'mdi-numeric-5-box', + size6: 'mdi-numeric-6-box', + size7: 'mdi-numeric-7-box', + font: 'mdi-format-font', + viewSource: 'mdi-code-tags' + }, + expansionItem: { + icon: 'mdi-chevron-down', + denseIcon: 'mdi-menu-down' + }, + fab: { + icon: 'mdi-plus', + activeIcon: 'mdi-close' + }, + field: { + clear: 'mdi-close-circle', + error: 'mdi-alert-circle' + }, + pagination: { + first: 'mdi-chevron-double-left', + prev: 'mdi-chevron-left', + next: 'mdi-chevron-right', + last: 'mdi-chevron-double-right' + }, + rating: { + icon: 'mdi-star' + }, + stepper: { + done: 'mdi-check', + active: 'mdi-pencil', + error: 'mdi-alert' + }, + tabs: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right', + up: 'mdi-chevron-up', + down: 'mdi-chevron-down' + }, + table: { + arrowUp: 'mdi-arrow-up', + warning: 'mdi-alert', + firstPage: 'mdi-chevron-double-left', + prevPage: 'mdi-chevron-left', + nextPage: 'mdi-chevron-right', + lastPage: 'mdi-chevron-double-right' + }, + tree: { + icon: 'mdi-play' + }, + uploader: { + done: 'mdi-check', + clear: 'mdi-close', + add: 'mdi-plus-box', + upload: 'mdi-cloud-upload', + removeQueue: 'mdi-notification-clear-all', + removeUploaded: 'mdi-check-all' + } +} diff --git a/icon-set/mdi-v5.js b/icon-set/mdi-v5.js new file mode 100644 index 00000000000..c493edb82a5 --- /dev/null +++ b/icon-set/mdi-v5.js @@ -0,0 +1,141 @@ +export default { + name: 'mdi-v5', + type: { + positive: 'mdi-check-circle', + negative: 'mdi-alert', + info: 'mdi-information', + warning: 'mdi-exclamation' + }, + arrow: { + up: 'mdi-arrow-up', + right: 'mdi-arrow-right', + down: 'mdi-arrow-down', + left: 'mdi-arrow-left', + dropdown: 'mdi-menu-down' + }, + chevron: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right' + }, + colorPicker: { + spectrum: 'mdi-gradient', + tune: 'mdi-tune', + palette: 'mdi-palette-swatch' + }, + pullToRefresh: { + icon: 'mdi-refresh' + }, + carousel: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right', + up: 'mdi-chevron-up', + down: 'mdi-chevron-down', + navigationIcon: 'mdi-circle' + }, + chip: { + remove: 'mdi-close-circle', + selected: 'mdi-check' + }, + datetime: { + arrowLeft: 'mdi-chevron-left', + arrowRight: 'mdi-chevron-right', + now: 'mdi-clock-outline', + today: 'mdi-calendar-today' + }, + editor: { + bold: 'mdi-format-bold', + italic: 'mdi-format-italic', + strikethrough: 'mdi-format-strikethrough-variant', + underline: 'mdi-format-underline', + unorderedList: 'mdi-format-list-bulleted', + orderedList: 'mdi-format-list-numbered', + subscript: 'mdi-format-subscript', + superscript: 'mdi-format-superscript', + hyperlink: 'mdi-link', + toggleFullscreen: 'mdi-fullscreen', + quote: 'mdi-format-quote-close', + left: 'mdi-format-align-left', + center: 'mdi-format-align-center', + right: 'mdi-format-align-right', + justify: 'mdi-format-align-justify', + print: 'mdi-printer', + outdent: 'mdi-format-indent-decrease', + indent: 'mdi-format-indent-increase', + removeFormat: 'mdi-format-clear', + formatting: 'mdi-format-color-text', + fontSize: 'mdi-format-size', + align: 'mdi-format-align-left', + hr: 'mdi-minus', + undo: 'mdi-undo', + redo: 'mdi-redo', + heading: 'mdi-format-size', + heading1: 'mdi-format-header-1', + heading2: 'mdi-format-header-2', + heading3: 'mdi-format-header-3', + heading4: 'mdi-format-header-4', + heading5: 'mdi-format-header-5', + heading6: 'mdi-format-header-6', + code: 'mdi-code-tags', + size: 'mdi-format-size', + size1: 'mdi-numeric-1-box', + size2: 'mdi-numeric-2-box', + size3: 'mdi-numeric-3-box', + size4: 'mdi-numeric-4-box', + size5: 'mdi-numeric-5-box', + size6: 'mdi-numeric-6-box', + size7: 'mdi-numeric-7-box', + font: 'mdi-format-font', + viewSource: 'mdi-code-tags' + }, + expansionItem: { + icon: 'mdi-chevron-down', + denseIcon: 'mdi-menu-down' + }, + fab: { + icon: 'mdi-plus', + activeIcon: 'mdi-close' + }, + field: { + clear: 'mdi-close-circle', + error: 'mdi-alert-circle' + }, + pagination: { + first: 'mdi-chevron-double-left', + prev: 'mdi-chevron-left', + next: 'mdi-chevron-right', + last: 'mdi-chevron-double-right' + }, + rating: { + icon: 'mdi-star' + }, + stepper: { + done: 'mdi-check', + active: 'mdi-pencil', + error: 'mdi-alert' + }, + tabs: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right', + up: 'mdi-chevron-up', + down: 'mdi-chevron-down' + }, + table: { + arrowUp: 'mdi-arrow-up', + warning: 'mdi-alert', + firstPage: 'mdi-chevron-double-left', + prevPage: 'mdi-chevron-left', + nextPage: 'mdi-chevron-right', + lastPage: 'mdi-chevron-double-right' + }, + tree: { + icon: 'mdi-play' + }, + uploader: { + done: 'mdi-check', + clear: 'mdi-close', + add: 'mdi-plus-box', + upload: 'mdi-cloud-upload', + removeQueue: 'mdi-notification-clear-all', + removeUploaded: 'mdi-check-all' + } +} diff --git a/icon-set/mdi-v6.js b/icon-set/mdi-v6.js new file mode 100644 index 00000000000..716d0af8c98 --- /dev/null +++ b/icon-set/mdi-v6.js @@ -0,0 +1,141 @@ +export default { + name: 'mdi-v6', + type: { + positive: 'mdi-check-circle', + negative: 'mdi-alert', + info: 'mdi-information', + warning: 'mdi-exclamation' + }, + arrow: { + up: 'mdi-arrow-up', + right: 'mdi-arrow-right', + down: 'mdi-arrow-down', + left: 'mdi-arrow-left', + dropdown: 'mdi-menu-down' + }, + chevron: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right' + }, + colorPicker: { + spectrum: 'mdi-gradient-vertical', + tune: 'mdi-tune', + palette: 'mdi-palette-swatch' + }, + pullToRefresh: { + icon: 'mdi-refresh' + }, + carousel: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right', + up: 'mdi-chevron-up', + down: 'mdi-chevron-down', + navigationIcon: 'mdi-circle' + }, + chip: { + remove: 'mdi-close-circle', + selected: 'mdi-check' + }, + datetime: { + arrowLeft: 'mdi-chevron-left', + arrowRight: 'mdi-chevron-right', + now: 'mdi-clock-outline', + today: 'mdi-calendar-today' + }, + editor: { + bold: 'mdi-format-bold', + italic: 'mdi-format-italic', + strikethrough: 'mdi-format-strikethrough-variant', + underline: 'mdi-format-underline', + unorderedList: 'mdi-format-list-bulleted', + orderedList: 'mdi-format-list-numbered', + subscript: 'mdi-format-subscript', + superscript: 'mdi-format-superscript', + hyperlink: 'mdi-link', + toggleFullscreen: 'mdi-fullscreen', + quote: 'mdi-format-quote-close', + left: 'mdi-format-align-left', + center: 'mdi-format-align-center', + right: 'mdi-format-align-right', + justify: 'mdi-format-align-justify', + print: 'mdi-printer', + outdent: 'mdi-format-indent-decrease', + indent: 'mdi-format-indent-increase', + removeFormat: 'mdi-format-clear', + formatting: 'mdi-format-color-text', + fontSize: 'mdi-format-size', + align: 'mdi-format-align-left', + hr: 'mdi-minus', + undo: 'mdi-undo', + redo: 'mdi-redo', + heading: 'mdi-format-size', + heading1: 'mdi-format-header-1', + heading2: 'mdi-format-header-2', + heading3: 'mdi-format-header-3', + heading4: 'mdi-format-header-4', + heading5: 'mdi-format-header-5', + heading6: 'mdi-format-header-6', + code: 'mdi-code-tags', + size: 'mdi-format-size', + size1: 'mdi-numeric-1-box', + size2: 'mdi-numeric-2-box', + size3: 'mdi-numeric-3-box', + size4: 'mdi-numeric-4-box', + size5: 'mdi-numeric-5-box', + size6: 'mdi-numeric-6-box', + size7: 'mdi-numeric-7-box', + font: 'mdi-format-font', + viewSource: 'mdi-code-tags' + }, + expansionItem: { + icon: 'mdi-chevron-down', + denseIcon: 'mdi-menu-down' + }, + fab: { + icon: 'mdi-plus', + activeIcon: 'mdi-close' + }, + field: { + clear: 'mdi-close-circle', + error: 'mdi-alert-circle' + }, + pagination: { + first: 'mdi-chevron-double-left', + prev: 'mdi-chevron-left', + next: 'mdi-chevron-right', + last: 'mdi-chevron-double-right' + }, + rating: { + icon: 'mdi-star' + }, + stepper: { + done: 'mdi-check', + active: 'mdi-pencil', + error: 'mdi-alert' + }, + tabs: { + left: 'mdi-chevron-left', + right: 'mdi-chevron-right', + up: 'mdi-chevron-up', + down: 'mdi-chevron-down' + }, + table: { + arrowUp: 'mdi-arrow-up', + warning: 'mdi-alert', + firstPage: 'mdi-chevron-double-left', + prevPage: 'mdi-chevron-left', + nextPage: 'mdi-chevron-right', + lastPage: 'mdi-chevron-double-right' + }, + tree: { + icon: 'mdi-play' + }, + uploader: { + done: 'mdi-check', + clear: 'mdi-close', + add: 'mdi-plus-box', + upload: 'mdi-cloud-upload', + removeQueue: 'mdi-notification-clear-all', + removeUploaded: 'mdi-check-all' + } +} diff --git a/icon-set/svg-bootstrap-icons.js b/icon-set/svg-bootstrap-icons.js new file mode 100644 index 00000000000..fb5620137e5 --- /dev/null +++ b/icon-set/svg-bootstrap-icons.js @@ -0,0 +1,211 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (bootstrap-icons.js). + */ + + +import { + biCheck, + biExclamationTriangleFill, + biExclamationCircleFill, + biExclamation, + biArrowUp, + biArrowRight, + biArrowDown, + biArrowLeft, + biCaretDownFill, + biChevronLeft, + biChevronRight, + biEyedropper, + biSliders, + biPalette2, + biArrowRepeat, + biChevronUp, + biChevronDown, + biCircleFill, + biXCircleFill, + biClockFill, + biCalendarCheckFill, + biTypeBold, + biTypeItalic, + biTypeStrikethrough, + biTypeUnderline, + biListUl, + biListOl, + biLink, + biArrowsFullscreen, + biChatSquareQuoteFill, + biJustifyLeft, + biJustify, + biJustifyRight, + biTextCenter, + biPrinterFill, + biTextIndentRight, + biTextIndentLeft, + biEraserFill, + biTextarea, + biTextareaT, + biTextLeft, + biDashSquareFill, + biArrowCounterclockwise, + biArrowClockwise, + biTypeH1, + biCode, + biBoundingBox, + biFonts, + biCodeSlash, + biPlus, + biX, + biChevronBarLeft, + biChevronBarRight, + biStarFill, + biPencilFill, + biSkipStartFill, + biSkipEndFill, + biCaretRightFill, + biPlusSquareFill, + biUpload, + biClipboardX, + biClipboardCheck +} from '@quasar/extras/bootstrap-icons' + +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatSubscript, + mdiFormatSuperscript +} from '@quasar/extras/mdi-v6' + + + +export default { + name: 'svg-bootstrap-icons', + type: { + positive: biCheck, + negative: biExclamationTriangleFill, + info: biExclamationCircleFill, + warning: biExclamation + }, + arrow: { + up: biArrowUp, + right: biArrowRight, + down: biArrowDown, + left: biArrowLeft, + dropdown: biCaretDownFill + }, + chevron: { + left: biChevronLeft, + right: biChevronRight + }, + colorPicker: { + spectrum: biEyedropper, + tune: biSliders, + palette: biPalette2 + }, + pullToRefresh: { + icon: biArrowRepeat + }, + carousel: { + left: biChevronLeft, + right: biChevronRight, + up: biChevronUp, + down: biChevronDown, + navigationIcon: biCircleFill + }, + chip: { + remove: biXCircleFill, + selected: biCheck + }, + datetime: { + arrowLeft: biChevronLeft, + arrowRight: biChevronRight, + now: biClockFill, + today: biCalendarCheckFill + }, + editor: { + bold: biTypeBold, + italic: biTypeItalic, + strikethrough: biTypeStrikethrough, + underline: biTypeUnderline, + unorderedList: biListUl, + orderedList: biListOl, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + hyperlink: biLink, + toggleFullscreen: biArrowsFullscreen, + quote: biChatSquareQuoteFill, + left: biJustifyLeft, + center: biJustify, + right: biJustifyRight, + justify: biTextCenter, + print: biPrinterFill, + outdent: biTextIndentRight, + indent: biTextIndentLeft, + removeFormat: biEraserFill, + formatting: biTextarea, + fontSize: biTextareaT, + align: biTextLeft, + hr: biDashSquareFill, + undo: biArrowCounterclockwise, + redo: biArrowClockwise, + heading: biTypeH1, + code: biCode, + size: biBoundingBox, + font: biFonts, + viewSource: biCodeSlash + }, + expansionItem: { + icon: biChevronDown, + denseIcon: biCaretDownFill + }, + fab: { + icon: biPlus, + activeIcon: biX + }, + field: { + clear: biXCircleFill, + error: biExclamationCircleFill + }, + pagination: { + first: biChevronBarLeft, + prev: biChevronLeft, + next: biChevronRight, + last: biChevronBarRight + }, + rating: { + icon: biStarFill + }, + stepper: { + done: biCheck, + active: biPencilFill, + error: biExclamationTriangleFill + }, + tabs: { + left: biChevronLeft, + right: biChevronRight, + up: biChevronUp, + down: biChevronDown + }, + table: { + arrowUp: biArrowUp, + warning: biExclamationTriangleFill, + firstPage: biSkipStartFill, + prevPage: biChevronLeft, + nextPage: biChevronRight, + lastPage: biSkipEndFill + }, + tree: { + icon: biCaretRightFill + }, + uploader: { + done: biCheck, + clear: biX, + add: biPlusSquareFill, + upload: biUpload, + removeQueue: biClipboardX, + removeUploaded: biClipboardCheck + } +} diff --git a/icon-set/svg-eva-icons.js b/icon-set/svg-eva-icons.js new file mode 100644 index 00000000000..f4bcb6177bd --- /dev/null +++ b/icon-set/svg-eva-icons.js @@ -0,0 +1,234 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (eva-icons.js). + */ + + +import { + evaCheckmarkCircle2, + evaAlertTriangle, + evaInfo, + evaAlertCircleOutline, + evaArrowUpwardOutline, + evaArrowForwardOutline, + evaArrowDownwardOutline, + evaArrowBackOutline, + evaChevronDown, + evaArrowIosBackOutline, + evaArrowIosForwardOutline, + evaColorPickerOutline, + evaOptions2Outline, + evaPantoneOutline, + evaRefreshOutline, + evaArrowIosUpwardOutline, + evaArrowIosDownwardOutline, + evaShield, + evaClose, + evaCheckmark, + evaClockOutline, + evaCalendarOutline, + evaPlusOutline, + evaCloseCircle, + evaAlertCircle, + evaArrowheadLeftOutline, + evaArrowheadRightOutline, + evaStar, + evaEdit, + evaArrowUpward, + evaArrowRight, + evaPlusSquare, + evaCloudUpload, + evaSlash, + evaDoneAll +} from '@quasar/extras/eva-icons' + +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiLink, + mdiFullscreen, + mdiFormatQuoteClose, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiPrinter, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiUndo, + mdiRedo, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiCodeTags, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont +} from '@quasar/extras/mdi-v6' + + + +export default { + name: 'svg-eva-icons', + type: { + positive: evaCheckmarkCircle2, + negative: evaAlertTriangle, + info: evaInfo, + warning: evaAlertCircleOutline + }, + arrow: { + up: evaArrowUpwardOutline, + right: evaArrowForwardOutline, + down: evaArrowDownwardOutline, + left: evaArrowBackOutline, + dropdown: evaChevronDown + }, + chevron: { + left: evaArrowIosBackOutline, + right: evaArrowIosForwardOutline + }, + colorPicker: { + spectrum: evaColorPickerOutline, + tune: evaOptions2Outline, + palette: evaPantoneOutline + }, + pullToRefresh: { + icon: evaRefreshOutline + }, + carousel: { + left: evaArrowIosBackOutline, + right: evaArrowIosForwardOutline, + up: evaArrowIosUpwardOutline, + down: evaArrowIosDownwardOutline, + navigationIcon: evaShield + }, + chip: { + remove: evaClose, + selected: evaCheckmark + }, + datetime: { + arrowLeft: evaArrowIosBackOutline, + arrowRight: evaArrowIosForwardOutline, + now: evaClockOutline, + today: evaCalendarOutline + }, + editor: { + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + hyperlink: mdiLink, + toggleFullscreen: mdiFullscreen, + quote: mdiFormatQuoteClose, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + print: mdiPrinter, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + undo: mdiUndo, + redo: mdiRedo, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + code: mdiCodeTags, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont, + viewSource: mdiCodeTags + }, + expansionItem: { + icon: evaArrowIosDownwardOutline, + denseIcon: evaChevronDown + }, + fab: { + icon: evaPlusOutline, + activeIcon: evaClose + }, + field: { + clear: evaCloseCircle, + error: evaAlertCircle + }, + pagination: { + first: evaArrowheadLeftOutline, + prev: evaArrowIosBackOutline, + next: evaArrowIosForwardOutline, + last: evaArrowheadRightOutline + }, + rating: { + icon: evaStar + }, + stepper: { + done: evaCheckmark, + active: evaEdit, + error: evaAlertTriangle + }, + tabs: { + left: evaArrowIosBackOutline, + right: evaArrowIosForwardOutline, + up: evaArrowIosUpwardOutline, + down: evaArrowIosDownwardOutline + }, + table: { + arrowUp: evaArrowUpward, + warning: evaAlertTriangle, + firstPage: evaArrowheadLeftOutline, + prevPage: evaArrowIosBackOutline, + nextPage: evaArrowIosForwardOutline, + lastPage: evaArrowheadRightOutline + }, + tree: { + icon: evaArrowRight + }, + uploader: { + done: evaCheckmark, + clear: evaClose, + add: evaPlusSquare, + upload: evaCloudUpload, + removeQueue: evaSlash, + removeUploaded: evaDoneAll + } +} diff --git a/icon-set/svg-fontawesome-v5.js b/icon-set/svg-fontawesome-v5.js new file mode 100644 index 00000000000..3a2a18a43f1 --- /dev/null +++ b/icon-set/svg-fontawesome-v5.js @@ -0,0 +1,198 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (fontawesome-v5.js). + */ + + +import { + fasCheck, + fasExclamationTriangle, + fasInfoCircle, + fasExclamation, + fasArrowUp, + fasArrowRight, + fasArrowDown, + fasArrowLeft, + fasCaretDown, + fasChevronLeft, + fasChevronRight, + fasEyeDropper, + fasSlidersH, + fasSwatchbook, + fasSyncAlt, + fasChevronUp, + fasChevronDown, + fasCircle, + fasTimesCircle, + farClock, + farCalendarCheck, + fasBold, + fasItalic, + fasStrikethrough, + fasUnderline, + fasListUl, + fasListOl, + fasSubscript, + fasSuperscript, + fasLink, + fasExpandArrowsAlt, + fasQuoteRight, + fasAlignLeft, + fasAlignCenter, + fasAlignRight, + fasAlignJustify, + fasPrint, + fasOutdent, + fasIndent, + fasEraser, + fasHeading, + fasTextHeight, + farMinusSquare, + fasUndo, + fasRedo, + fasCode, + fasFont, + fasPlus, + fasTimes, + fasExclamationCircle, + fasStepBackward, + fasStepForward, + fasStar, + fasPencilAlt, + fasPlay, + fasPlusSquare, + fasUpload, + fasStream, + fasClipboardCheck +} from '@quasar/extras/fontawesome-v5' + +export default { + name: 'svg-fontawesome-v5', + type: { + positive: fasCheck, + negative: fasExclamationTriangle, + info: fasInfoCircle, + warning: fasExclamation + }, + arrow: { + up: fasArrowUp, + right: fasArrowRight, + down: fasArrowDown, + left: fasArrowLeft, + dropdown: fasCaretDown + }, + chevron: { + left: fasChevronLeft, + right: fasChevronRight + }, + colorPicker: { + spectrum: fasEyeDropper, + tune: fasSlidersH, + palette: fasSwatchbook + }, + pullToRefresh: { + icon: fasSyncAlt + }, + carousel: { + left: fasChevronLeft, + right: fasChevronRight, + up: fasChevronUp, + down: fasChevronDown, + navigationIcon: fasCircle + }, + chip: { + remove: fasTimesCircle, + selected: fasCheck + }, + datetime: { + arrowLeft: fasChevronLeft, + arrowRight: fasChevronRight, + now: farClock, + today: farCalendarCheck + }, + editor: { + bold: fasBold, + italic: fasItalic, + strikethrough: fasStrikethrough, + underline: fasUnderline, + unorderedList: fasListUl, + orderedList: fasListOl, + subscript: fasSubscript, + superscript: fasSuperscript, + hyperlink: fasLink, + toggleFullscreen: fasExpandArrowsAlt, + quote: fasQuoteRight, + left: fasAlignLeft, + center: fasAlignCenter, + right: fasAlignRight, + justify: fasAlignJustify, + print: fasPrint, + outdent: fasOutdent, + indent: fasIndent, + removeFormat: fasEraser, + formatting: fasHeading, + fontSize: fasTextHeight, + align: fasAlignLeft, + hr: farMinusSquare, + undo: fasUndo, + redo: fasRedo, + heading: fasHeading, + code: fasCode, + size: fasTextHeight, + font: fasFont, + viewSource: fasCode + }, + expansionItem: { + icon: fasChevronDown, + denseIcon: fasCaretDown + }, + fab: { + icon: fasPlus, + activeIcon: fasTimes + }, + field: { + clear: fasTimesCircle, + error: fasExclamationCircle + }, + pagination: { + first: fasStepBackward, + prev: fasChevronLeft, + next: fasChevronRight, + last: fasStepForward + }, + rating: { + icon: fasStar + }, + stepper: { + done: fasCheck, + active: fasPencilAlt, + error: fasExclamationTriangle + }, + tabs: { + left: fasChevronLeft, + right: fasChevronRight, + up: fasChevronUp, + down: fasChevronDown + }, + table: { + arrowUp: fasArrowUp, + warning: fasExclamationTriangle, + firstPage: fasStepBackward, + prevPage: fasChevronLeft, + nextPage: fasChevronRight, + lastPage: fasStepForward + }, + tree: { + icon: fasPlay + }, + uploader: { + done: fasCheck, + clear: fasTimes, + add: fasPlusSquare, + upload: fasUpload, + removeQueue: fasStream, + removeUploaded: fasClipboardCheck + } +} diff --git a/icon-set/svg-fontawesome-v6.js b/icon-set/svg-fontawesome-v6.js new file mode 100644 index 00000000000..6b8a34edd40 --- /dev/null +++ b/icon-set/svg-fontawesome-v6.js @@ -0,0 +1,198 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (fontawesome-v6.js). + */ + + +import { + fasCheck, + fasTriangleExclamation, + fasCircleInfo, + fasExclamation, + fasArrowUp, + fasArrowRight, + fasArrowDown, + fasArrowLeft, + fasCaretDown, + fasChevronLeft, + fasChevronRight, + fasEyeDropper, + fasSliders, + fasSwatchbook, + fasRotate, + fasChevronUp, + fasChevronDown, + fasCircle, + fasCircleXmark, + farClock, + farCalendarCheck, + fasBold, + fasItalic, + fasStrikethrough, + fasUnderline, + fasListUl, + fasListOl, + fasSubscript, + fasSuperscript, + fasLink, + fasMaximize, + fasQuoteRight, + fasAlignLeft, + fasAlignCenter, + fasAlignRight, + fasAlignJustify, + fasPrint, + fasOutdent, + fasIndent, + fasEraser, + fasHeading, + fasTextHeight, + farSquareMinus, + fasRotateLeft, + fasRotateRight, + fasCode, + fasFont, + fasPlus, + fasXmark, + fasCircleExclamation, + fasBackwardStep, + fasForwardStep, + fasStar, + fasPencil, + fasPlay, + fasSquarePlus, + fasUpload, + fasBarsStaggered, + fasClipboardCheck +} from '@quasar/extras/fontawesome-v6' + +export default { + name: 'svg-fontawesome-v6', + type: { + positive: fasCheck, + negative: fasTriangleExclamation, + info: fasCircleInfo, + warning: fasExclamation + }, + arrow: { + up: fasArrowUp, + right: fasArrowRight, + down: fasArrowDown, + left: fasArrowLeft, + dropdown: fasCaretDown + }, + chevron: { + left: fasChevronLeft, + right: fasChevronRight + }, + colorPicker: { + spectrum: fasEyeDropper, + tune: fasSliders, + palette: fasSwatchbook + }, + pullToRefresh: { + icon: fasRotate + }, + carousel: { + left: fasChevronLeft, + right: fasChevronRight, + up: fasChevronUp, + down: fasChevronDown, + navigationIcon: fasCircle + }, + chip: { + remove: fasCircleXmark, + selected: fasCheck + }, + datetime: { + arrowLeft: fasChevronLeft, + arrowRight: fasChevronRight, + now: farClock, + today: farCalendarCheck + }, + editor: { + bold: fasBold, + italic: fasItalic, + strikethrough: fasStrikethrough, + underline: fasUnderline, + unorderedList: fasListUl, + orderedList: fasListOl, + subscript: fasSubscript, + superscript: fasSuperscript, + hyperlink: fasLink, + toggleFullscreen: fasMaximize, + quote: fasQuoteRight, + left: fasAlignLeft, + center: fasAlignCenter, + right: fasAlignRight, + justify: fasAlignJustify, + print: fasPrint, + outdent: fasOutdent, + indent: fasIndent, + removeFormat: fasEraser, + formatting: fasHeading, + fontSize: fasTextHeight, + align: fasAlignLeft, + hr: farSquareMinus, + undo: fasRotateLeft, + redo: fasRotateRight, + heading: fasHeading, + code: fasCode, + size: fasTextHeight, + font: fasFont, + viewSource: fasCode + }, + expansionItem: { + icon: fasChevronDown, + denseIcon: fasCaretDown + }, + fab: { + icon: fasPlus, + activeIcon: fasXmark + }, + field: { + clear: fasCircleXmark, + error: fasCircleExclamation + }, + pagination: { + first: fasBackwardStep, + prev: fasChevronLeft, + next: fasChevronRight, + last: fasForwardStep + }, + rating: { + icon: fasStar + }, + stepper: { + done: fasCheck, + active: fasPencil, + error: fasTriangleExclamation + }, + tabs: { + left: fasChevronLeft, + right: fasChevronRight, + up: fasChevronUp, + down: fasChevronDown + }, + table: { + arrowUp: fasArrowUp, + warning: fasTriangleExclamation, + firstPage: fasBackwardStep, + prevPage: fasChevronLeft, + nextPage: fasChevronRight, + lastPage: fasForwardStep + }, + tree: { + icon: fasPlay + }, + uploader: { + done: fasCheck, + clear: fasXmark, + add: fasSquarePlus, + upload: fasUpload, + removeQueue: fasBarsStaggered, + removeUploaded: fasClipboardCheck + } +} diff --git a/icon-set/svg-ionicons-v4.js b/icon-set/svg-ionicons-v4.js new file mode 100644 index 00000000000..247b5ada96c --- /dev/null +++ b/icon-set/svg-ionicons-v4.js @@ -0,0 +1,235 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (ionicons-v4.js). + */ + + +import { + ionMdCheckmark, + ionMdAlert, + ionMdInformationCircleOutline, + ionMdArrowUp, + ionMdArrowForward, + ionMdArrowDown, + ionMdArrowBack, + ionMdArrowDropdown, + ionIosArrowBack, + ionIosArrowForward, + ionMdAperture, + ionMdOptions, + ionMdApps, + ionMdRefresh, + ionIosArrowUp, + ionIosArrowDown, + ionMdSquare, + ionMdCloseCircle, + ionMdTime, + ionMdCalendar, + ionMdLink, + ionMdExpand, + ionMdQuote, + ionMdPrint, + ionMdUndo, + ionMdRedo, + ionMdCode, + ionIosCode, + ionMdAdd, + ionMdClose, + ionIosSkipBackward, + ionIosSkipForward, + ionMdStar, + ionMdCreate, + ionMdWarning, + ionIosReturnLeft, + ionIosReturnRight, + ionMdPlay, + ionMdAddCircle, + ionMdCloudUpload, + ionMdTrash, + ionMdDoneAll +} from '@quasar/extras/ionicons-v4' + +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont +} from '@quasar/extras/mdi-v6' + + + +export default { + name: 'svg-ionicons-v4', + type: { + positive: ionMdCheckmark, + negative: ionMdAlert, + info: ionMdInformationCircleOutline, + warning: ionMdAlert + }, + arrow: { + up: ionMdArrowUp, + right: ionMdArrowForward, + down: ionMdArrowDown, + left: ionMdArrowBack, + dropdown: ionMdArrowDropdown + }, + chevron: { + left: ionIosArrowBack, + right: ionIosArrowForward + }, + colorPicker: { + spectrum: ionMdAperture, + tune: ionMdOptions, + palette: ionMdApps + }, + pullToRefresh: { + icon: ionMdRefresh + }, + carousel: { + left: ionIosArrowBack, + right: ionIosArrowForward, + up: ionIosArrowUp, + down: ionIosArrowDown, + navigationIcon: ionMdSquare + }, + chip: { + remove: ionMdCloseCircle, + selected: ionMdCheckmark + }, + datetime: { + arrowLeft: ionIosArrowBack, + arrowRight: ionIosArrowForward, + now: ionMdTime, + today: ionMdCalendar + }, + editor: { + hyperlink: ionMdLink, + toggleFullscreen: ionMdExpand, + quote: ionMdQuote, + print: ionMdPrint, + undo: ionMdUndo, + redo: ionMdRedo, + code: ionMdCode, + viewSource: ionIosCode, + + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont + }, + expansionItem: { + icon: ionMdArrowDropdown, + denseIcon: ionMdArrowDropdown + }, + fab: { + icon: ionMdAdd, + activeIcon: ionMdClose + }, + field: { + clear: ionMdCloseCircle, + error: ionMdAlert + }, + pagination: { + first: ionIosSkipBackward, + prev: ionIosArrowBack, + next: ionIosArrowForward, + last: ionIosSkipForward + }, + rating: { + icon: ionMdStar + }, + stepper: { + done: ionMdCheckmark, + active: ionMdCreate, + error: ionMdWarning + }, + tabs: { + left: ionIosArrowBack, + right: ionIosArrowForward, + up: ionIosArrowUp, + down: ionIosArrowDown + }, + table: { + arrowUp: ionMdArrowUp, + warning: ionMdWarning, + firstPage: ionIosReturnLeft, + prevPage: ionIosArrowBack, + nextPage: ionIosArrowForward, + lastPage: ionIosReturnRight + }, + tree: { + icon: ionMdPlay + }, + uploader: { + done: ionMdCheckmark, + clear: ionMdClose, + add: ionMdAddCircle, + upload: ionMdCloudUpload, + removeQueue: ionMdTrash, + removeUploaded: ionMdDoneAll + } +} diff --git a/icon-set/svg-ionicons-v5.js b/icon-set/svg-ionicons-v5.js new file mode 100644 index 00000000000..f48d85bf260 --- /dev/null +++ b/icon-set/svg-ionicons-v5.js @@ -0,0 +1,225 @@ + +import { + ionCheckmark, + ionAlert, + ionInformationCircleOutline, + ionArrowUp, + ionArrowForward, + ionArrowDown, + ionArrowBack, + ionCaretDownOutline, + ionAperture, + ionOptions, + ionApps, + ionRefresh, + ionSquare, + ionCloseCircle, + ionTime, + ionCalendar, + ionLink, + ionExpand, + ionChatboxEllipses, + ionPrint, + ionArrowUndo, + ionArrowRedo, + ionCodeSlash, + ionAdd, + ionClose, + ionPlaySkipBackCircle, + ionPlaySkipForwardCircle, + ionStar, + ionCreate, + ionWarning, + ionPlay, + ionAddCircle, + ionCloudUpload, + ionTrash, + ionCheckmarkDone, + ionChevronDown, + ionChevronUp, + ionChevronBack, + ionChevronForward, + ionChevronBackCircle, + ionChevronForwardCircle +} from '@quasar/extras/ionicons-v5' + +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont +} from '@quasar/extras/mdi-v6' + +export default { + name: 'svg-ionicons-v5', + type: { + positive: ionCheckmark, + negative: ionAlert, + info: ionInformationCircleOutline, + warning: ionAlert + }, + arrow: { + up: ionArrowUp, + right: ionArrowForward, + down: ionArrowDown, + left: ionArrowBack, + dropdown: ionCaretDownOutline + }, + chevron: { + left: ionArrowBack, + right: ionArrowForward + }, + colorPicker: { + spectrum: ionAperture, + tune: ionOptions, + palette: ionApps + }, + pullToRefresh: { + icon: ionRefresh + }, + carousel: { + left: ionChevronBack, + right: ionChevronForward, + up: ionChevronUp, + down: ionChevronDown, + navigationIcon: ionSquare + }, + chip: { + remove: ionCloseCircle, + selected: ionCheckmark + }, + datetime: { + arrowLeft: ionChevronBack, + arrowRight: ionChevronForward, + now: ionTime, + today: ionCalendar + }, + editor: { // requires Material icons for some as Ionicons simply does not have everything needed + hyperlink: ionLink, + toggleFullscreen: ionExpand, + quote: ionChatboxEllipses, + print: ionPrint, + undo: ionArrowUndo, + redo: ionArrowRedo, + code: ionCodeSlash, + viewSource: ionCodeSlash, + + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont + }, + expansionItem: { + icon: ionCaretDownOutline, + denseIcon: ionCaretDownOutline + }, + fab: { + icon: ionAdd, + activeIcon: ionClose + }, + field: { + clear: ionCloseCircle, + error: ionAlert + }, + pagination: { + first: ionPlaySkipBackCircle, + prev: ionChevronBackCircle, + next: ionChevronForwardCircle, + last: ionPlaySkipForwardCircle + }, + rating: { + icon: ionStar + }, + stepper: { + done: ionCheckmark, + active: ionCreate, + error: ionWarning + }, + tabs: { + left: ionChevronBack, + right: ionChevronForward, + up: ionChevronUp, + down: ionChevronDown + }, + table: { + arrowUp: ionArrowUp, + warning: ionWarning, + firstPage: ionPlaySkipBackCircle, + prevPage: ionChevronBackCircle, + nextPage: ionChevronForwardCircle, + lastPage: ionPlaySkipForwardCircle + }, + tree: { + icon: ionPlay + }, + uploader: { + done: ionCheckmark, + clear: ionClose, + add: ionAddCircle, + upload: ionCloudUpload, + removeQueue: ionTrash, + removeUploaded: ionCheckmarkDone + } +} diff --git a/icon-set/svg-ionicons-v6.js b/icon-set/svg-ionicons-v6.js new file mode 100644 index 00000000000..d24f4b3ba1b --- /dev/null +++ b/icon-set/svg-ionicons-v6.js @@ -0,0 +1,225 @@ + +import { + ionCheckmark, + ionAlert, + ionInformationCircleOutline, + ionArrowUp, + ionArrowForward, + ionArrowDown, + ionArrowBack, + ionCaretDownOutline, + ionAperture, + ionOptions, + ionApps, + ionRefresh, + ionSquare, + ionCloseCircle, + ionTime, + ionCalendar, + ionLink, + ionExpand, + ionChatboxEllipses, + ionPrint, + ionArrowUndo, + ionArrowRedo, + ionCodeSlash, + ionAdd, + ionClose, + ionPlaySkipBackCircle, + ionPlaySkipForwardCircle, + ionStar, + ionCreate, + ionWarning, + ionPlay, + ionAddCircle, + ionCloudUpload, + ionTrash, + ionCheckmarkDone, + ionChevronDown, + ionChevronUp, + ionChevronBack, + ionChevronForward, + ionChevronBackCircle, + ionChevronForwardCircle +} from '@quasar/extras/ionicons-v6' + +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont +} from '@quasar/extras/mdi-v6' + +export default { + name: 'svg-ionicons-v6', + type: { + positive: ionCheckmark, + negative: ionAlert, + info: ionInformationCircleOutline, + warning: ionAlert + }, + arrow: { + up: ionArrowUp, + right: ionArrowForward, + down: ionArrowDown, + left: ionArrowBack, + dropdown: ionCaretDownOutline + }, + chevron: { + left: ionArrowBack, + right: ionArrowForward + }, + colorPicker: { + spectrum: ionAperture, + tune: ionOptions, + palette: ionApps + }, + pullToRefresh: { + icon: ionRefresh + }, + carousel: { + left: ionChevronBack, + right: ionChevronForward, + up: ionChevronUp, + down: ionChevronDown, + navigationIcon: ionSquare + }, + chip: { + remove: ionCloseCircle, + selected: ionCheckmark + }, + datetime: { + arrowLeft: ionChevronBack, + arrowRight: ionChevronForward, + now: ionTime, + today: ionCalendar + }, + editor: { // requires Material icons for some as Ionicons simply does not have everything needed + hyperlink: ionLink, + toggleFullscreen: ionExpand, + quote: ionChatboxEllipses, + print: ionPrint, + undo: ionArrowUndo, + redo: ionArrowRedo, + code: ionCodeSlash, + viewSource: ionCodeSlash, + + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont + }, + expansionItem: { + icon: ionCaretDownOutline, + denseIcon: ionCaretDownOutline + }, + fab: { + icon: ionAdd, + activeIcon: ionClose + }, + field: { + clear: ionCloseCircle, + error: ionAlert + }, + pagination: { + first: ionPlaySkipBackCircle, + prev: ionChevronBackCircle, + next: ionChevronForwardCircle, + last: ionPlaySkipForwardCircle + }, + rating: { + icon: ionStar + }, + stepper: { + done: ionCheckmark, + active: ionCreate, + error: ionWarning + }, + tabs: { + left: ionChevronBack, + right: ionChevronForward, + up: ionChevronUp, + down: ionChevronDown + }, + table: { + arrowUp: ionArrowUp, + warning: ionWarning, + firstPage: ionPlaySkipBackCircle, + prevPage: ionChevronBackCircle, + nextPage: ionChevronForwardCircle, + lastPage: ionPlaySkipForwardCircle + }, + tree: { + icon: ionPlay + }, + uploader: { + done: ionCheckmark, + clear: ionClose, + add: ionAddCircle, + upload: ionCloudUpload, + removeQueue: ionTrash, + removeUploaded: ionCheckmarkDone + } +} diff --git a/icon-set/svg-line-awesome.js b/icon-set/svg-line-awesome.js new file mode 100644 index 00000000000..767f0bb3175 --- /dev/null +++ b/icon-set/svg-line-awesome.js @@ -0,0 +1,198 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (line-awesome.js). + */ + + +import { + laCheckSolid, + laExclamationTriangleSolid, + laInfoCircleSolid, + laExclamationSolid, + laArrowUpSolid, + laArrowRightSolid, + laArrowDownSolid, + laArrowLeftSolid, + laCaretDownSolid, + laChevronLeftSolid, + laChevronRightSolid, + laEyeDropperSolid, + laSlidersHSolid, + laSwatchbookSolid, + laSyncAltSolid, + laChevronUpSolid, + laChevronDownSolid, + laSquareSolid, + laTimesCircleSolid, + laClock, + laCalendarCheck, + laBoldSolid, + laItalicSolid, + laStrikethroughSolid, + laUnderlineSolid, + laListUlSolid, + laListOlSolid, + laSubscriptSolid, + laSuperscriptSolid, + laLinkSolid, + laExpandArrowsAltSolid, + laQuoteRightSolid, + laAlignLeftSolid, + laAlignCenterSolid, + laAlignRightSolid, + laAlignJustifySolid, + laPrintSolid, + laOutdentSolid, + laIndentSolid, + laEraserSolid, + laHeadingSolid, + laTextHeightSolid, + laMinusSquare, + laUndoSolid, + laRedoSolid, + laCodeSolid, + laFontSolid, + laPlusSolid, + laTimesSolid, + laExclamationCircleSolid, + laFastBackwardSolid, + laFastForwardSolid, + laStarSolid, + laPencilAltSolid, + laPlaySolid, + laPlusSquareSolid, + laUploadSolid, + laStreamSolid, + laClipboardCheckSolid +} from '@quasar/extras/line-awesome' + +export default { + name: 'svg-line-awesome', + type: { + positive: laCheckSolid, + negative: laExclamationTriangleSolid, + info: laInfoCircleSolid, + warning: laExclamationSolid + }, + arrow: { + up: laArrowUpSolid, + right: laArrowRightSolid, + down: laArrowDownSolid, + left: laArrowLeftSolid, + dropdown: laCaretDownSolid + }, + chevron: { + left: laChevronLeftSolid, + right: laChevronRightSolid + }, + colorPicker: { + spectrum: laEyeDropperSolid, + tune: laSlidersHSolid, + palette: laSwatchbookSolid + }, + pullToRefresh: { + icon: laSyncAltSolid + }, + carousel: { + left: laChevronLeftSolid, + right: laChevronRightSolid, + up: laChevronUpSolid, + down: laChevronDownSolid, + navigationIcon: laSquareSolid + }, + chip: { + remove: laTimesCircleSolid, + selected: laCheckSolid + }, + datetime: { + arrowLeft: laChevronLeftSolid, + arrowRight: laChevronRightSolid, + now: laClock, + today: laCalendarCheck + }, + editor: { + bold: laBoldSolid, + italic: laItalicSolid, + strikethrough: laStrikethroughSolid, + underline: laUnderlineSolid, + unorderedList: laListUlSolid, + orderedList: laListOlSolid, + subscript: laSubscriptSolid, + superscript: laSuperscriptSolid, + hyperlink: laLinkSolid, + toggleFullscreen: laExpandArrowsAltSolid, + quote: laQuoteRightSolid, + left: laAlignLeftSolid, + center: laAlignCenterSolid, + right: laAlignRightSolid, + justify: laAlignJustifySolid, + print: laPrintSolid, + outdent: laOutdentSolid, + indent: laIndentSolid, + removeFormat: laEraserSolid, + formatting: laHeadingSolid, + fontSize: laTextHeightSolid, + align: laAlignLeftSolid, + hr: laMinusSquare, + undo: laUndoSolid, + redo: laRedoSolid, + heading: laHeadingSolid, + code: laCodeSolid, + size: laTextHeightSolid, + font: laFontSolid, + viewSource: laCodeSolid + }, + expansionItem: { + icon: laChevronDownSolid, + denseIcon: laCaretDownSolid + }, + fab: { + icon: laPlusSolid, + activeIcon: laTimesSolid + }, + field: { + clear: laTimesCircleSolid, + error: laExclamationCircleSolid + }, + pagination: { + first: laFastBackwardSolid, + prev: laChevronLeftSolid, + next: laChevronRightSolid, + last: laFastForwardSolid + }, + rating: { + icon: laStarSolid + }, + stepper: { + done: laCheckSolid, + active: laPencilAltSolid, + error: laExclamationTriangleSolid + }, + tabs: { + left: laChevronLeftSolid, + right: laChevronRightSolid, + up: laChevronUpSolid, + down: laChevronDownSolid + }, + table: { + arrowUp: laArrowUpSolid, + warning: laExclamationTriangleSolid, + firstPage: laFastBackwardSolid, + prevPage: laChevronLeftSolid, + nextPage: laChevronRightSolid, + lastPage: laFastForwardSolid + }, + tree: { + icon: laPlaySolid + }, + uploader: { + done: laCheckSolid, + clear: laTimesSolid, + add: laPlusSquareSolid, + upload: laUploadSolid, + removeQueue: laStreamSolid, + removeUploaded: laClipboardCheckSolid + } +} diff --git a/icon-set/svg-material-icons-outlined.js b/icon-set/svg-material-icons-outlined.js new file mode 100644 index 00000000000..bb97095d86b --- /dev/null +++ b/icon-set/svg-material-icons-outlined.js @@ -0,0 +1,203 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (material-icons-outlined.js). + */ + + +import { + outlinedCheckCircle, + outlinedWarning, + outlinedInfo, + outlinedPriorityHigh, + outlinedArrowUpward, + outlinedArrowForward, + outlinedArrowDownward, + outlinedArrowBack, + outlinedArrowDropDown, + outlinedChevronLeft, + outlinedChevronRight, + outlinedGradient, + outlinedTune, + outlinedStyle, + outlinedRefresh, + outlinedKeyboardArrowUp, + outlinedKeyboardArrowDown, + outlinedLens, + outlinedCancel, + outlinedCheck, + outlinedAccessTime, + outlinedToday, + outlinedFormatBold, + outlinedFormatItalic, + outlinedStrikethroughS, + outlinedFormatUnderlined, + outlinedFormatListBulleted, + outlinedFormatListNumbered, + outlinedVerticalAlignBottom, + outlinedVerticalAlignTop, + outlinedLink, + outlinedFullscreen, + outlinedFormatQuote, + outlinedFormatAlignLeft, + outlinedFormatAlignCenter, + outlinedFormatAlignRight, + outlinedFormatAlignJustify, + outlinedPrint, + outlinedFormatIndentDecrease, + outlinedFormatIndentIncrease, + outlinedFormatClear, + outlinedTextFormat, + outlinedFormatSize, + outlinedRemove, + outlinedUndo, + outlinedRedo, + outlinedCode, + outlinedFontDownload, + outlinedAdd, + outlinedClose, + outlinedError, + outlinedFirstPage, + outlinedKeyboardArrowLeft, + outlinedKeyboardArrowRight, + outlinedLastPage, + outlinedGrade, + outlinedEdit, + outlinedPlayArrow, + outlinedDone, + outlinedClear, + outlinedAddBox, + outlinedCloudUpload, + outlinedClearAll, + outlinedDoneAll +} from '@quasar/extras/material-icons-outlined' + +export default { + name: 'svg-material-icons-outlined', + type: { + positive: outlinedCheckCircle, + negative: outlinedWarning, + info: outlinedInfo, + warning: outlinedPriorityHigh + }, + arrow: { + up: outlinedArrowUpward, + right: outlinedArrowForward, + down: outlinedArrowDownward, + left: outlinedArrowBack, + dropdown: outlinedArrowDropDown + }, + chevron: { + left: outlinedChevronLeft, + right: outlinedChevronRight + }, + colorPicker: { + spectrum: outlinedGradient, + tune: outlinedTune, + palette: outlinedStyle + }, + pullToRefresh: { + icon: outlinedRefresh + }, + carousel: { + left: outlinedChevronLeft, + right: outlinedChevronRight, + up: outlinedKeyboardArrowUp, + down: outlinedKeyboardArrowDown, + navigationIcon: outlinedLens + }, + chip: { + remove: outlinedCancel, + selected: outlinedCheck + }, + datetime: { + arrowLeft: outlinedChevronLeft, + arrowRight: outlinedChevronRight, + now: outlinedAccessTime, + today: outlinedToday + }, + editor: { + bold: outlinedFormatBold, + italic: outlinedFormatItalic, + strikethrough: outlinedStrikethroughS, + underline: outlinedFormatUnderlined, + unorderedList: outlinedFormatListBulleted, + orderedList: outlinedFormatListNumbered, + subscript: outlinedVerticalAlignBottom, + superscript: outlinedVerticalAlignTop, + hyperlink: outlinedLink, + toggleFullscreen: outlinedFullscreen, + quote: outlinedFormatQuote, + left: outlinedFormatAlignLeft, + center: outlinedFormatAlignCenter, + right: outlinedFormatAlignRight, + justify: outlinedFormatAlignJustify, + print: outlinedPrint, + outdent: outlinedFormatIndentDecrease, + indent: outlinedFormatIndentIncrease, + removeFormat: outlinedFormatClear, + formatting: outlinedTextFormat, + fontSize: outlinedFormatSize, + align: outlinedFormatAlignLeft, + hr: outlinedRemove, + undo: outlinedUndo, + redo: outlinedRedo, + heading: outlinedFormatSize, + code: outlinedCode, + size: outlinedFormatSize, + font: outlinedFontDownload, + viewSource: outlinedCode + }, + expansionItem: { + icon: outlinedKeyboardArrowDown, + denseIcon: outlinedArrowDropDown + }, + fab: { + icon: outlinedAdd, + activeIcon: outlinedClose + }, + field: { + clear: outlinedCancel, + error: outlinedError + }, + pagination: { + first: outlinedFirstPage, + prev: outlinedKeyboardArrowLeft, + next: outlinedKeyboardArrowRight, + last: outlinedLastPage + }, + rating: { + icon: outlinedGrade + }, + stepper: { + done: outlinedCheck, + active: outlinedEdit, + error: outlinedWarning + }, + tabs: { + left: outlinedChevronLeft, + right: outlinedChevronRight, + up: outlinedKeyboardArrowUp, + down: outlinedKeyboardArrowDown + }, + table: { + arrowUp: outlinedArrowUpward, + warning: outlinedWarning, + firstPage: outlinedFirstPage, + prevPage: outlinedChevronLeft, + nextPage: outlinedChevronRight, + lastPage: outlinedLastPage + }, + tree: { + icon: outlinedPlayArrow + }, + uploader: { + done: outlinedDone, + clear: outlinedClear, + add: outlinedAddBox, + upload: outlinedCloudUpload, + removeQueue: outlinedClearAll, + removeUploaded: outlinedDoneAll + } +} diff --git a/icon-set/svg-material-icons-round.js b/icon-set/svg-material-icons-round.js new file mode 100644 index 00000000000..3dd77acaced --- /dev/null +++ b/icon-set/svg-material-icons-round.js @@ -0,0 +1,203 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (material-icons-round.js). + */ + + +import { + roundCheckCircle, + roundWarning, + roundInfo, + roundPriorityHigh, + roundArrowUpward, + roundArrowForward, + roundArrowDownward, + roundArrowBack, + roundArrowDropDown, + roundChevronLeft, + roundChevronRight, + roundGradient, + roundTune, + roundStyle, + roundRefresh, + roundKeyboardArrowUp, + roundKeyboardArrowDown, + roundLens, + roundCancel, + roundCheck, + roundAccessTime, + roundToday, + roundFormatBold, + roundFormatItalic, + roundStrikethroughS, + roundFormatUnderlined, + roundFormatListBulleted, + roundFormatListNumbered, + roundVerticalAlignBottom, + roundVerticalAlignTop, + roundLink, + roundFullscreen, + roundFormatQuote, + roundFormatAlignLeft, + roundFormatAlignCenter, + roundFormatAlignRight, + roundFormatAlignJustify, + roundPrint, + roundFormatIndentDecrease, + roundFormatIndentIncrease, + roundFormatClear, + roundTextFormat, + roundFormatSize, + roundRemove, + roundUndo, + roundRedo, + roundCode, + roundFontDownload, + roundAdd, + roundClose, + roundError, + roundFirstPage, + roundKeyboardArrowLeft, + roundKeyboardArrowRight, + roundLastPage, + roundGrade, + roundEdit, + roundPlayArrow, + roundDone, + roundClear, + roundAddBox, + roundCloudUpload, + roundClearAll, + roundDoneAll +} from '@quasar/extras/material-icons-round' + +export default { + name: 'svg-material-icons-round', + type: { + positive: roundCheckCircle, + negative: roundWarning, + info: roundInfo, + warning: roundPriorityHigh + }, + arrow: { + up: roundArrowUpward, + right: roundArrowForward, + down: roundArrowDownward, + left: roundArrowBack, + dropdown: roundArrowDropDown + }, + chevron: { + left: roundChevronLeft, + right: roundChevronRight + }, + colorPicker: { + spectrum: roundGradient, + tune: roundTune, + palette: roundStyle + }, + pullToRefresh: { + icon: roundRefresh + }, + carousel: { + left: roundChevronLeft, + right: roundChevronRight, + up: roundKeyboardArrowUp, + down: roundKeyboardArrowDown, + navigationIcon: roundLens + }, + chip: { + remove: roundCancel, + selected: roundCheck + }, + datetime: { + arrowLeft: roundChevronLeft, + arrowRight: roundChevronRight, + now: roundAccessTime, + today: roundToday + }, + editor: { + bold: roundFormatBold, + italic: roundFormatItalic, + strikethrough: roundStrikethroughS, + underline: roundFormatUnderlined, + unorderedList: roundFormatListBulleted, + orderedList: roundFormatListNumbered, + subscript: roundVerticalAlignBottom, + superscript: roundVerticalAlignTop, + hyperlink: roundLink, + toggleFullscreen: roundFullscreen, + quote: roundFormatQuote, + left: roundFormatAlignLeft, + center: roundFormatAlignCenter, + right: roundFormatAlignRight, + justify: roundFormatAlignJustify, + print: roundPrint, + outdent: roundFormatIndentDecrease, + indent: roundFormatIndentIncrease, + removeFormat: roundFormatClear, + formatting: roundTextFormat, + fontSize: roundFormatSize, + align: roundFormatAlignLeft, + hr: roundRemove, + undo: roundUndo, + redo: roundRedo, + heading: roundFormatSize, + code: roundCode, + size: roundFormatSize, + font: roundFontDownload, + viewSource: roundCode + }, + expansionItem: { + icon: roundKeyboardArrowDown, + denseIcon: roundArrowDropDown + }, + fab: { + icon: roundAdd, + activeIcon: roundClose + }, + field: { + clear: roundCancel, + error: roundError + }, + pagination: { + first: roundFirstPage, + prev: roundKeyboardArrowLeft, + next: roundKeyboardArrowRight, + last: roundLastPage + }, + rating: { + icon: roundGrade + }, + stepper: { + done: roundCheck, + active: roundEdit, + error: roundWarning + }, + tabs: { + left: roundChevronLeft, + right: roundChevronRight, + up: roundKeyboardArrowUp, + down: roundKeyboardArrowDown + }, + table: { + arrowUp: roundArrowUpward, + warning: roundWarning, + firstPage: roundFirstPage, + prevPage: roundChevronLeft, + nextPage: roundChevronRight, + lastPage: roundLastPage + }, + tree: { + icon: roundPlayArrow + }, + uploader: { + done: roundDone, + clear: roundClear, + add: roundAddBox, + upload: roundCloudUpload, + removeQueue: roundClearAll, + removeUploaded: roundDoneAll + } +} diff --git a/icon-set/svg-material-icons-sharp.js b/icon-set/svg-material-icons-sharp.js new file mode 100644 index 00000000000..d6ae13f2798 --- /dev/null +++ b/icon-set/svg-material-icons-sharp.js @@ -0,0 +1,203 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (material-icons-sharp.js). + */ + + +import { + sharpCheckCircle, + sharpWarning, + sharpInfo, + sharpPriorityHigh, + sharpArrowUpward, + sharpArrowForward, + sharpArrowDownward, + sharpArrowBack, + sharpArrowDropDown, + sharpChevronLeft, + sharpChevronRight, + sharpGradient, + sharpTune, + sharpStyle, + sharpRefresh, + sharpKeyboardArrowUp, + sharpKeyboardArrowDown, + sharpLens, + sharpCancel, + sharpCheck, + sharpAccessTime, + sharpToday, + sharpFormatBold, + sharpFormatItalic, + sharpStrikethroughS, + sharpFormatUnderlined, + sharpFormatListBulleted, + sharpFormatListNumbered, + sharpVerticalAlignBottom, + sharpVerticalAlignTop, + sharpLink, + sharpFullscreen, + sharpFormatQuote, + sharpFormatAlignLeft, + sharpFormatAlignCenter, + sharpFormatAlignRight, + sharpFormatAlignJustify, + sharpPrint, + sharpFormatIndentDecrease, + sharpFormatIndentIncrease, + sharpFormatClear, + sharpTextFormat, + sharpFormatSize, + sharpRemove, + sharpUndo, + sharpRedo, + sharpCode, + sharpFontDownload, + sharpAdd, + sharpClose, + sharpError, + sharpFirstPage, + sharpKeyboardArrowLeft, + sharpKeyboardArrowRight, + sharpLastPage, + sharpGrade, + sharpEdit, + sharpPlayArrow, + sharpDone, + sharpClear, + sharpAddBox, + sharpCloudUpload, + sharpClearAll, + sharpDoneAll +} from '@quasar/extras/material-icons-sharp' + +export default { + name: 'svg-material-icons-sharp', + type: { + positive: sharpCheckCircle, + negative: sharpWarning, + info: sharpInfo, + warning: sharpPriorityHigh + }, + arrow: { + up: sharpArrowUpward, + right: sharpArrowForward, + down: sharpArrowDownward, + left: sharpArrowBack, + dropdown: sharpArrowDropDown + }, + chevron: { + left: sharpChevronLeft, + right: sharpChevronRight + }, + colorPicker: { + spectrum: sharpGradient, + tune: sharpTune, + palette: sharpStyle + }, + pullToRefresh: { + icon: sharpRefresh + }, + carousel: { + left: sharpChevronLeft, + right: sharpChevronRight, + up: sharpKeyboardArrowUp, + down: sharpKeyboardArrowDown, + navigationIcon: sharpLens + }, + chip: { + remove: sharpCancel, + selected: sharpCheck + }, + datetime: { + arrowLeft: sharpChevronLeft, + arrowRight: sharpChevronRight, + now: sharpAccessTime, + today: sharpToday + }, + editor: { + bold: sharpFormatBold, + italic: sharpFormatItalic, + strikethrough: sharpStrikethroughS, + underline: sharpFormatUnderlined, + unorderedList: sharpFormatListBulleted, + orderedList: sharpFormatListNumbered, + subscript: sharpVerticalAlignBottom, + superscript: sharpVerticalAlignTop, + hyperlink: sharpLink, + toggleFullscreen: sharpFullscreen, + quote: sharpFormatQuote, + left: sharpFormatAlignLeft, + center: sharpFormatAlignCenter, + right: sharpFormatAlignRight, + justify: sharpFormatAlignJustify, + print: sharpPrint, + outdent: sharpFormatIndentDecrease, + indent: sharpFormatIndentIncrease, + removeFormat: sharpFormatClear, + formatting: sharpTextFormat, + fontSize: sharpFormatSize, + align: sharpFormatAlignLeft, + hr: sharpRemove, + undo: sharpUndo, + redo: sharpRedo, + heading: sharpFormatSize, + code: sharpCode, + size: sharpFormatSize, + font: sharpFontDownload, + viewSource: sharpCode + }, + expansionItem: { + icon: sharpKeyboardArrowDown, + denseIcon: sharpArrowDropDown + }, + fab: { + icon: sharpAdd, + activeIcon: sharpClose + }, + field: { + clear: sharpCancel, + error: sharpError + }, + pagination: { + first: sharpFirstPage, + prev: sharpKeyboardArrowLeft, + next: sharpKeyboardArrowRight, + last: sharpLastPage + }, + rating: { + icon: sharpGrade + }, + stepper: { + done: sharpCheck, + active: sharpEdit, + error: sharpWarning + }, + tabs: { + left: sharpChevronLeft, + right: sharpChevronRight, + up: sharpKeyboardArrowUp, + down: sharpKeyboardArrowDown + }, + table: { + arrowUp: sharpArrowUpward, + warning: sharpWarning, + firstPage: sharpFirstPage, + prevPage: sharpChevronLeft, + nextPage: sharpChevronRight, + lastPage: sharpLastPage + }, + tree: { + icon: sharpPlayArrow + }, + uploader: { + done: sharpDone, + clear: sharpClear, + add: sharpAddBox, + upload: sharpCloudUpload, + removeQueue: sharpClearAll, + removeUploaded: sharpDoneAll + } +} diff --git a/icon-set/svg-material-icons.js b/icon-set/svg-material-icons.js new file mode 100644 index 00000000000..7a5cf23dbb0 --- /dev/null +++ b/icon-set/svg-material-icons.js @@ -0,0 +1,203 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (material-icons.js). + */ + + +import { + matCheckCircle, + matWarning, + matInfo, + matPriorityHigh, + matArrowUpward, + matArrowForward, + matArrowDownward, + matArrowBack, + matArrowDropDown, + matChevronLeft, + matChevronRight, + matGradient, + matTune, + matStyle, + matRefresh, + matKeyboardArrowUp, + matKeyboardArrowDown, + matLens, + matCancel, + matCheck, + matAccessTime, + matToday, + matFormatBold, + matFormatItalic, + matStrikethroughS, + matFormatUnderlined, + matFormatListBulleted, + matFormatListNumbered, + matVerticalAlignBottom, + matVerticalAlignTop, + matLink, + matFullscreen, + matFormatQuote, + matFormatAlignLeft, + matFormatAlignCenter, + matFormatAlignRight, + matFormatAlignJustify, + matPrint, + matFormatIndentDecrease, + matFormatIndentIncrease, + matFormatClear, + matTextFormat, + matFormatSize, + matRemove, + matUndo, + matRedo, + matCode, + matFontDownload, + matAdd, + matClose, + matError, + matFirstPage, + matKeyboardArrowLeft, + matKeyboardArrowRight, + matLastPage, + matGrade, + matEdit, + matPlayArrow, + matDone, + matClear, + matAddBox, + matCloudUpload, + matClearAll, + matDoneAll +} from '@quasar/extras/material-icons' + +export default { + name: 'svg-material-icons', + type: { + positive: matCheckCircle, + negative: matWarning, + info: matInfo, + warning: matPriorityHigh + }, + arrow: { + up: matArrowUpward, + right: matArrowForward, + down: matArrowDownward, + left: matArrowBack, + dropdown: matArrowDropDown + }, + chevron: { + left: matChevronLeft, + right: matChevronRight + }, + colorPicker: { + spectrum: matGradient, + tune: matTune, + palette: matStyle + }, + pullToRefresh: { + icon: matRefresh + }, + carousel: { + left: matChevronLeft, + right: matChevronRight, + up: matKeyboardArrowUp, + down: matKeyboardArrowDown, + navigationIcon: matLens + }, + chip: { + remove: matCancel, + selected: matCheck + }, + datetime: { + arrowLeft: matChevronLeft, + arrowRight: matChevronRight, + now: matAccessTime, + today: matToday + }, + editor: { + bold: matFormatBold, + italic: matFormatItalic, + strikethrough: matStrikethroughS, + underline: matFormatUnderlined, + unorderedList: matFormatListBulleted, + orderedList: matFormatListNumbered, + subscript: matVerticalAlignBottom, + superscript: matVerticalAlignTop, + hyperlink: matLink, + toggleFullscreen: matFullscreen, + quote: matFormatQuote, + left: matFormatAlignLeft, + center: matFormatAlignCenter, + right: matFormatAlignRight, + justify: matFormatAlignJustify, + print: matPrint, + outdent: matFormatIndentDecrease, + indent: matFormatIndentIncrease, + removeFormat: matFormatClear, + formatting: matTextFormat, + fontSize: matFormatSize, + align: matFormatAlignLeft, + hr: matRemove, + undo: matUndo, + redo: matRedo, + heading: matFormatSize, + code: matCode, + size: matFormatSize, + font: matFontDownload, + viewSource: matCode + }, + expansionItem: { + icon: matKeyboardArrowDown, + denseIcon: matArrowDropDown + }, + fab: { + icon: matAdd, + activeIcon: matClose + }, + field: { + clear: matCancel, + error: matError + }, + pagination: { + first: matFirstPage, + prev: matKeyboardArrowLeft, + next: matKeyboardArrowRight, + last: matLastPage + }, + rating: { + icon: matGrade + }, + stepper: { + done: matCheck, + active: matEdit, + error: matWarning + }, + tabs: { + left: matChevronLeft, + right: matChevronRight, + up: matKeyboardArrowUp, + down: matKeyboardArrowDown + }, + table: { + arrowUp: matArrowUpward, + warning: matWarning, + firstPage: matFirstPage, + prevPage: matChevronLeft, + nextPage: matChevronRight, + lastPage: matLastPage + }, + tree: { + icon: matPlayArrow + }, + uploader: { + done: matDone, + clear: matClear, + add: matAddBox, + upload: matCloudUpload, + removeQueue: matClearAll, + removeUploaded: matDoneAll + } +} diff --git a/icon-set/svg-material-symbols-outlined.js b/icon-set/svg-material-symbols-outlined.js new file mode 100644 index 00000000000..33c59defe76 --- /dev/null +++ b/icon-set/svg-material-symbols-outlined.js @@ -0,0 +1,202 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (material-symbols-outlined.js). + */ + + +import { + symOutlinedCheckCircle, + symOutlinedWarning, + symOutlinedInfo, + symOutlinedPriorityHigh, + symOutlinedArrowUpward, + symOutlinedArrowForward, + symOutlinedArrowDownward, + symOutlinedArrowBack, + symOutlinedArrowDropDown, + symOutlinedChevronLeft, + symOutlinedChevronRight, + symOutlinedGradient, + symOutlinedTune, + symOutlinedStyle, + symOutlinedRefresh, + symOutlinedKeyboardArrowUp, + symOutlinedKeyboardArrowDown, + symOutlinedLens, + symOutlinedCancel, + symOutlinedCheck, + symOutlinedSchedule, + symOutlinedToday, + symOutlinedFormatBold, + symOutlinedFormatItalic, + symOutlinedStrikethroughS, + symOutlinedFormatUnderlined, + symOutlinedFormatListBulleted, + symOutlinedFormatListNumbered, + symOutlinedVerticalAlignBottom, + symOutlinedVerticalAlignTop, + symOutlinedLink, + symOutlinedFullscreen, + symOutlinedFormatQuote, + symOutlinedFormatAlignLeft, + symOutlinedFormatAlignCenter, + symOutlinedFormatAlignRight, + symOutlinedFormatAlignJustify, + symOutlinedPrint, + symOutlinedFormatIndentDecrease, + symOutlinedFormatIndentIncrease, + symOutlinedFormatClear, + symOutlinedTextFormat, + symOutlinedFormatSize, + symOutlinedRemove, + symOutlinedUndo, + symOutlinedRedo, + symOutlinedCode, + symOutlinedFontDownload, + symOutlinedAdd, + symOutlinedClose, + symOutlinedError, + symOutlinedFirstPage, + symOutlinedKeyboardArrowLeft, + symOutlinedKeyboardArrowRight, + symOutlinedLastPage, + symOutlinedGrade, + symOutlinedEdit, + symOutlinedPlayArrow, + symOutlinedDone, + symOutlinedAddBox, + symOutlinedCloudUpload, + symOutlinedClearAll, + symOutlinedDoneAll +} from '@quasar/extras/material-symbols-outlined' + +export default { + name: 'svg-material-symbols-outlined', + type: { + positive: symOutlinedCheckCircle, + negative: symOutlinedWarning, + info: symOutlinedInfo, + warning: symOutlinedPriorityHigh + }, + arrow: { + up: symOutlinedArrowUpward, + right: symOutlinedArrowForward, + down: symOutlinedArrowDownward, + left: symOutlinedArrowBack, + dropdown: symOutlinedArrowDropDown + }, + chevron: { + left: symOutlinedChevronLeft, + right: symOutlinedChevronRight + }, + colorPicker: { + spectrum: symOutlinedGradient, + tune: symOutlinedTune, + palette: symOutlinedStyle + }, + pullToRefresh: { + icon: symOutlinedRefresh + }, + carousel: { + left: symOutlinedChevronLeft, + right: symOutlinedChevronRight, + up: symOutlinedKeyboardArrowUp, + down: symOutlinedKeyboardArrowDown, + navigationIcon: symOutlinedLens + }, + chip: { + remove: symOutlinedCancel, + selected: symOutlinedCheck + }, + datetime: { + arrowLeft: symOutlinedChevronLeft, + arrowRight: symOutlinedChevronRight, + now: symOutlinedSchedule, + today: symOutlinedToday + }, + editor: { + bold: symOutlinedFormatBold, + italic: symOutlinedFormatItalic, + strikethrough: symOutlinedStrikethroughS, + underline: symOutlinedFormatUnderlined, + unorderedList: symOutlinedFormatListBulleted, + orderedList: symOutlinedFormatListNumbered, + subscript: symOutlinedVerticalAlignBottom, + superscript: symOutlinedVerticalAlignTop, + hyperlink: symOutlinedLink, + toggleFullscreen: symOutlinedFullscreen, + quote: symOutlinedFormatQuote, + left: symOutlinedFormatAlignLeft, + center: symOutlinedFormatAlignCenter, + right: symOutlinedFormatAlignRight, + justify: symOutlinedFormatAlignJustify, + print: symOutlinedPrint, + outdent: symOutlinedFormatIndentDecrease, + indent: symOutlinedFormatIndentIncrease, + removeFormat: symOutlinedFormatClear, + formatting: symOutlinedTextFormat, + fontSize: symOutlinedFormatSize, + align: symOutlinedFormatAlignLeft, + hr: symOutlinedRemove, + undo: symOutlinedUndo, + redo: symOutlinedRedo, + heading: symOutlinedFormatSize, + code: symOutlinedCode, + size: symOutlinedFormatSize, + font: symOutlinedFontDownload, + viewSource: symOutlinedCode + }, + expansionItem: { + icon: symOutlinedKeyboardArrowDown, + denseIcon: symOutlinedArrowDropDown + }, + fab: { + icon: symOutlinedAdd, + activeIcon: symOutlinedClose + }, + field: { + clear: symOutlinedCancel, + error: symOutlinedError + }, + pagination: { + first: symOutlinedFirstPage, + prev: symOutlinedKeyboardArrowLeft, + next: symOutlinedKeyboardArrowRight, + last: symOutlinedLastPage + }, + rating: { + icon: symOutlinedGrade + }, + stepper: { + done: symOutlinedCheck, + active: symOutlinedEdit, + error: symOutlinedWarning + }, + tabs: { + left: symOutlinedChevronLeft, + right: symOutlinedChevronRight, + up: symOutlinedKeyboardArrowUp, + down: symOutlinedKeyboardArrowDown + }, + table: { + arrowUp: symOutlinedArrowUpward, + warning: symOutlinedWarning, + firstPage: symOutlinedFirstPage, + prevPage: symOutlinedChevronLeft, + nextPage: symOutlinedChevronRight, + lastPage: symOutlinedLastPage + }, + tree: { + icon: symOutlinedPlayArrow + }, + uploader: { + done: symOutlinedDone, + clear: symOutlinedClose, + add: symOutlinedAddBox, + upload: symOutlinedCloudUpload, + removeQueue: symOutlinedClearAll, + removeUploaded: symOutlinedDoneAll + } +} diff --git a/icon-set/svg-material-symbols-rounded.js b/icon-set/svg-material-symbols-rounded.js new file mode 100644 index 00000000000..3edc046a9a1 --- /dev/null +++ b/icon-set/svg-material-symbols-rounded.js @@ -0,0 +1,202 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (material-symbols-rounded.js). + */ + + +import { + symRoundedCheckCircle, + symRoundedWarning, + symRoundedInfo, + symRoundedPriorityHigh, + symRoundedArrowUpward, + symRoundedArrowForward, + symRoundedArrowDownward, + symRoundedArrowBack, + symRoundedArrowDropDown, + symRoundedChevronLeft, + symRoundedChevronRight, + symRoundedGradient, + symRoundedTune, + symRoundedStyle, + symRoundedRefresh, + symRoundedKeyboardArrowUp, + symRoundedKeyboardArrowDown, + symRoundedLens, + symRoundedCancel, + symRoundedCheck, + symRoundedSchedule, + symRoundedToday, + symRoundedFormatBold, + symRoundedFormatItalic, + symRoundedStrikethroughS, + symRoundedFormatUnderlined, + symRoundedFormatListBulleted, + symRoundedFormatListNumbered, + symRoundedVerticalAlignBottom, + symRoundedVerticalAlignTop, + symRoundedLink, + symRoundedFullscreen, + symRoundedFormatQuote, + symRoundedFormatAlignLeft, + symRoundedFormatAlignCenter, + symRoundedFormatAlignRight, + symRoundedFormatAlignJustify, + symRoundedPrint, + symRoundedFormatIndentDecrease, + symRoundedFormatIndentIncrease, + symRoundedFormatClear, + symRoundedTextFormat, + symRoundedFormatSize, + symRoundedRemove, + symRoundedUndo, + symRoundedRedo, + symRoundedCode, + symRoundedFontDownload, + symRoundedAdd, + symRoundedClose, + symRoundedError, + symRoundedFirstPage, + symRoundedKeyboardArrowLeft, + symRoundedKeyboardArrowRight, + symRoundedLastPage, + symRoundedGrade, + symRoundedEdit, + symRoundedPlayArrow, + symRoundedDone, + symRoundedAddBox, + symRoundedCloudUpload, + symRoundedClearAll, + symRoundedDoneAll +} from '@quasar/extras/material-symbols-rounded' + +export default { + name: 'svg-material-symbols-rounded', + type: { + positive: symRoundedCheckCircle, + negative: symRoundedWarning, + info: symRoundedInfo, + warning: symRoundedPriorityHigh + }, + arrow: { + up: symRoundedArrowUpward, + right: symRoundedArrowForward, + down: symRoundedArrowDownward, + left: symRoundedArrowBack, + dropdown: symRoundedArrowDropDown + }, + chevron: { + left: symRoundedChevronLeft, + right: symRoundedChevronRight + }, + colorPicker: { + spectrum: symRoundedGradient, + tune: symRoundedTune, + palette: symRoundedStyle + }, + pullToRefresh: { + icon: symRoundedRefresh + }, + carousel: { + left: symRoundedChevronLeft, + right: symRoundedChevronRight, + up: symRoundedKeyboardArrowUp, + down: symRoundedKeyboardArrowDown, + navigationIcon: symRoundedLens + }, + chip: { + remove: symRoundedCancel, + selected: symRoundedCheck + }, + datetime: { + arrowLeft: symRoundedChevronLeft, + arrowRight: symRoundedChevronRight, + now: symRoundedSchedule, + today: symRoundedToday + }, + editor: { + bold: symRoundedFormatBold, + italic: symRoundedFormatItalic, + strikethrough: symRoundedStrikethroughS, + underline: symRoundedFormatUnderlined, + unorderedList: symRoundedFormatListBulleted, + orderedList: symRoundedFormatListNumbered, + subscript: symRoundedVerticalAlignBottom, + superscript: symRoundedVerticalAlignTop, + hyperlink: symRoundedLink, + toggleFullscreen: symRoundedFullscreen, + quote: symRoundedFormatQuote, + left: symRoundedFormatAlignLeft, + center: symRoundedFormatAlignCenter, + right: symRoundedFormatAlignRight, + justify: symRoundedFormatAlignJustify, + print: symRoundedPrint, + outdent: symRoundedFormatIndentDecrease, + indent: symRoundedFormatIndentIncrease, + removeFormat: symRoundedFormatClear, + formatting: symRoundedTextFormat, + fontSize: symRoundedFormatSize, + align: symRoundedFormatAlignLeft, + hr: symRoundedRemove, + undo: symRoundedUndo, + redo: symRoundedRedo, + heading: symRoundedFormatSize, + code: symRoundedCode, + size: symRoundedFormatSize, + font: symRoundedFontDownload, + viewSource: symRoundedCode + }, + expansionItem: { + icon: symRoundedKeyboardArrowDown, + denseIcon: symRoundedArrowDropDown + }, + fab: { + icon: symRoundedAdd, + activeIcon: symRoundedClose + }, + field: { + clear: symRoundedCancel, + error: symRoundedError + }, + pagination: { + first: symRoundedFirstPage, + prev: symRoundedKeyboardArrowLeft, + next: symRoundedKeyboardArrowRight, + last: symRoundedLastPage + }, + rating: { + icon: symRoundedGrade + }, + stepper: { + done: symRoundedCheck, + active: symRoundedEdit, + error: symRoundedWarning + }, + tabs: { + left: symRoundedChevronLeft, + right: symRoundedChevronRight, + up: symRoundedKeyboardArrowUp, + down: symRoundedKeyboardArrowDown + }, + table: { + arrowUp: symRoundedArrowUpward, + warning: symRoundedWarning, + firstPage: symRoundedFirstPage, + prevPage: symRoundedChevronLeft, + nextPage: symRoundedChevronRight, + lastPage: symRoundedLastPage + }, + tree: { + icon: symRoundedPlayArrow + }, + uploader: { + done: symRoundedDone, + clear: symRoundedClose, + add: symRoundedAddBox, + upload: symRoundedCloudUpload, + removeQueue: symRoundedClearAll, + removeUploaded: symRoundedDoneAll + } +} diff --git a/icon-set/svg-material-symbols-sharp.js b/icon-set/svg-material-symbols-sharp.js new file mode 100644 index 00000000000..3066f4d62df --- /dev/null +++ b/icon-set/svg-material-symbols-sharp.js @@ -0,0 +1,202 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (material-symbols-sharp.js). + */ + + +import { + symSharpCheckCircle, + symSharpWarning, + symSharpInfo, + symSharpPriorityHigh, + symSharpArrowUpward, + symSharpArrowForward, + symSharpArrowDownward, + symSharpArrowBack, + symSharpArrowDropDown, + symSharpChevronLeft, + symSharpChevronRight, + symSharpGradient, + symSharpTune, + symSharpStyle, + symSharpRefresh, + symSharpKeyboardArrowUp, + symSharpKeyboardArrowDown, + symSharpLens, + symSharpCancel, + symSharpCheck, + symSharpSchedule, + symSharpToday, + symSharpFormatBold, + symSharpFormatItalic, + symSharpStrikethroughS, + symSharpFormatUnderlined, + symSharpFormatListBulleted, + symSharpFormatListNumbered, + symSharpVerticalAlignBottom, + symSharpVerticalAlignTop, + symSharpLink, + symSharpFullscreen, + symSharpFormatQuote, + symSharpFormatAlignLeft, + symSharpFormatAlignCenter, + symSharpFormatAlignRight, + symSharpFormatAlignJustify, + symSharpPrint, + symSharpFormatIndentDecrease, + symSharpFormatIndentIncrease, + symSharpFormatClear, + symSharpTextFormat, + symSharpFormatSize, + symSharpRemove, + symSharpUndo, + symSharpRedo, + symSharpCode, + symSharpFontDownload, + symSharpAdd, + symSharpClose, + symSharpError, + symSharpFirstPage, + symSharpKeyboardArrowLeft, + symSharpKeyboardArrowRight, + symSharpLastPage, + symSharpGrade, + symSharpEdit, + symSharpPlayArrow, + symSharpDone, + symSharpAddBox, + symSharpCloudUpload, + symSharpClearAll, + symSharpDoneAll +} from '@quasar/extras/material-symbols-sharp' + +export default { + name: 'svg-material-symbols-sharp', + type: { + positive: symSharpCheckCircle, + negative: symSharpWarning, + info: symSharpInfo, + warning: symSharpPriorityHigh + }, + arrow: { + up: symSharpArrowUpward, + right: symSharpArrowForward, + down: symSharpArrowDownward, + left: symSharpArrowBack, + dropdown: symSharpArrowDropDown + }, + chevron: { + left: symSharpChevronLeft, + right: symSharpChevronRight + }, + colorPicker: { + spectrum: symSharpGradient, + tune: symSharpTune, + palette: symSharpStyle + }, + pullToRefresh: { + icon: symSharpRefresh + }, + carousel: { + left: symSharpChevronLeft, + right: symSharpChevronRight, + up: symSharpKeyboardArrowUp, + down: symSharpKeyboardArrowDown, + navigationIcon: symSharpLens + }, + chip: { + remove: symSharpCancel, + selected: symSharpCheck + }, + datetime: { + arrowLeft: symSharpChevronLeft, + arrowRight: symSharpChevronRight, + now: symSharpSchedule, + today: symSharpToday + }, + editor: { + bold: symSharpFormatBold, + italic: symSharpFormatItalic, + strikethrough: symSharpStrikethroughS, + underline: symSharpFormatUnderlined, + unorderedList: symSharpFormatListBulleted, + orderedList: symSharpFormatListNumbered, + subscript: symSharpVerticalAlignBottom, + superscript: symSharpVerticalAlignTop, + hyperlink: symSharpLink, + toggleFullscreen: symSharpFullscreen, + quote: symSharpFormatQuote, + left: symSharpFormatAlignLeft, + center: symSharpFormatAlignCenter, + right: symSharpFormatAlignRight, + justify: symSharpFormatAlignJustify, + print: symSharpPrint, + outdent: symSharpFormatIndentDecrease, + indent: symSharpFormatIndentIncrease, + removeFormat: symSharpFormatClear, + formatting: symSharpTextFormat, + fontSize: symSharpFormatSize, + align: symSharpFormatAlignLeft, + hr: symSharpRemove, + undo: symSharpUndo, + redo: symSharpRedo, + heading: symSharpFormatSize, + code: symSharpCode, + size: symSharpFormatSize, + font: symSharpFontDownload, + viewSource: symSharpCode + }, + expansionItem: { + icon: symSharpKeyboardArrowDown, + denseIcon: symSharpArrowDropDown + }, + fab: { + icon: symSharpAdd, + activeIcon: symSharpClose + }, + field: { + clear: symSharpCancel, + error: symSharpError + }, + pagination: { + first: symSharpFirstPage, + prev: symSharpKeyboardArrowLeft, + next: symSharpKeyboardArrowRight, + last: symSharpLastPage + }, + rating: { + icon: symSharpGrade + }, + stepper: { + done: symSharpCheck, + active: symSharpEdit, + error: symSharpWarning + }, + tabs: { + left: symSharpChevronLeft, + right: symSharpChevronRight, + up: symSharpKeyboardArrowUp, + down: symSharpKeyboardArrowDown + }, + table: { + arrowUp: symSharpArrowUpward, + warning: symSharpWarning, + firstPage: symSharpFirstPage, + prevPage: symSharpChevronLeft, + nextPage: symSharpChevronRight, + lastPage: symSharpLastPage + }, + tree: { + icon: symSharpPlayArrow + }, + uploader: { + done: symSharpDone, + clear: symSharpClose, + add: symSharpAddBox, + upload: symSharpCloudUpload, + removeQueue: symSharpClearAll, + removeUploaded: symSharpDoneAll + } +} diff --git a/icon-set/svg-mdi-v4.js b/icon-set/svg-mdi-v4.js new file mode 100644 index 00000000000..7d0448a3653 --- /dev/null +++ b/icon-set/svg-mdi-v4.js @@ -0,0 +1,218 @@ + +import { + mdiCheckCircle, + mdiAlert, + mdiInformation, + mdiExclamation, + mdiArrowUp, + mdiArrowRight, + mdiArrowDown, + mdiArrowLeft, + mdiMenuDown, + mdiChevronLeft, + mdiChevronRight, + mdiGradient, + mdiTune, + mdiPaletteSwatch, + mdiRefresh, + mdiChevronUp, + mdiChevronDown, + mdiCircle, + mdiCloseCircle, + mdiCheck, + mdiClockOutline, + mdiCalendarToday, + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiLink, + mdiFullscreen, + mdiFormatQuoteClose, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiPrinter, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiUndo, + mdiRedo, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiCodeTags, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont, + mdiPlus, + mdiClose, + mdiAlertCircle, + mdiChevronDoubleLeft, + mdiChevronDoubleRight, + mdiStar, + mdiPencil, + mdiPlay, + mdiPlusBox, + mdiCloudUpload, + mdiNotificationClearAll, + mdiCheckAll +} from '@quasar/extras/mdi-v4' + +export default { + name: 'svg-mdi-v4', + type: { + positive: mdiCheckCircle, + negative: mdiAlert, + info: mdiInformation, + warning: mdiExclamation + }, + arrow: { + up: mdiArrowUp, + right: mdiArrowRight, + down: mdiArrowDown, + left: mdiArrowLeft, + dropdown: mdiMenuDown + }, + chevron: { + left: mdiChevronLeft, + right: mdiChevronRight + }, + colorPicker: { + spectrum: mdiGradient, + tune: mdiTune, + palette: mdiPaletteSwatch + }, + pullToRefresh: { + icon: mdiRefresh + }, + carousel: { + left: mdiChevronLeft, + right: mdiChevronRight, + up: mdiChevronUp, + down: mdiChevronDown, + navigationIcon: mdiCircle + }, + chip: { + remove: mdiCloseCircle, + selected: mdiCheck + }, + datetime: { + arrowLeft: mdiChevronLeft, + arrowRight: mdiChevronRight, + now: mdiClockOutline, + today: mdiCalendarToday + }, + editor: { + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + hyperlink: mdiLink, + toggleFullscreen: mdiFullscreen, + quote: mdiFormatQuoteClose, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + print: mdiPrinter, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + undo: mdiUndo, + redo: mdiRedo, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + code: mdiCodeTags, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont, + viewSource: mdiCodeTags + }, + expansionItem: { + icon: mdiChevronDown, + denseIcon: mdiMenuDown + }, + fab: { + icon: mdiPlus, + activeIcon: mdiClose + }, + field: { + clear: mdiCloseCircle, + error: mdiAlertCircle + }, + pagination: { + first: mdiChevronDoubleLeft, + prev: mdiChevronLeft, + next: mdiChevronRight, + last: mdiChevronDoubleRight + }, + rating: { + icon: mdiStar + }, + stepper: { + done: mdiCheck, + active: mdiPencil, + error: mdiAlert + }, + tabs: { + left: mdiChevronLeft, + right: mdiChevronRight, + up: mdiChevronUp, + down: mdiChevronDown + }, + table: { + arrowUp: mdiArrowUp, + warning: mdiAlert, + firstPage: mdiChevronDoubleLeft, + prevPage: mdiChevronLeft, + nextPage: mdiChevronRight, + lastPage: mdiChevronDoubleRight + }, + tree: { + icon: mdiPlay + }, + uploader: { + done: mdiCheck, + clear: mdiClose, + add: mdiPlusBox, + upload: mdiCloudUpload, + removeQueue: mdiNotificationClearAll, + removeUploaded: mdiCheckAll + } +} diff --git a/icon-set/svg-mdi-v5.js b/icon-set/svg-mdi-v5.js new file mode 100644 index 00000000000..eb07bdb5c95 --- /dev/null +++ b/icon-set/svg-mdi-v5.js @@ -0,0 +1,225 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (mdi-v6.js). + */ + + +import { + mdiCheckCircle, + mdiAlert, + mdiInformation, + mdiExclamation, + mdiArrowUp, + mdiArrowRight, + mdiArrowDown, + mdiArrowLeft, + mdiMenuDown, + mdiChevronLeft, + mdiChevronRight, + mdiGradient, + mdiTune, + mdiPaletteSwatch, + mdiRefresh, + mdiChevronUp, + mdiChevronDown, + mdiCircle, + mdiCloseCircle, + mdiCheck, + mdiClockOutline, + mdiCalendarToday, + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiLink, + mdiFullscreen, + mdiFormatQuoteClose, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiPrinter, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiUndo, + mdiRedo, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiCodeTags, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont, + mdiPlus, + mdiClose, + mdiAlertCircle, + mdiChevronDoubleLeft, + mdiChevronDoubleRight, + mdiStar, + mdiPencil, + mdiPlay, + mdiPlusBox, + mdiCloudUpload, + mdiNotificationClearAll, + mdiCheckAll +} from '@quasar/extras/mdi-v5' + +export default { + name: 'svg-mdi-v5', + type: { + positive: mdiCheckCircle, + negative: mdiAlert, + info: mdiInformation, + warning: mdiExclamation + }, + arrow: { + up: mdiArrowUp, + right: mdiArrowRight, + down: mdiArrowDown, + left: mdiArrowLeft, + dropdown: mdiMenuDown + }, + chevron: { + left: mdiChevronLeft, + right: mdiChevronRight + }, + colorPicker: { + spectrum: mdiGradient, + tune: mdiTune, + palette: mdiPaletteSwatch + }, + pullToRefresh: { + icon: mdiRefresh + }, + carousel: { + left: mdiChevronLeft, + right: mdiChevronRight, + up: mdiChevronUp, + down: mdiChevronDown, + navigationIcon: mdiCircle + }, + chip: { + remove: mdiCloseCircle, + selected: mdiCheck + }, + datetime: { + arrowLeft: mdiChevronLeft, + arrowRight: mdiChevronRight, + now: mdiClockOutline, + today: mdiCalendarToday + }, + editor: { + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + hyperlink: mdiLink, + toggleFullscreen: mdiFullscreen, + quote: mdiFormatQuoteClose, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + print: mdiPrinter, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + undo: mdiUndo, + redo: mdiRedo, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + code: mdiCodeTags, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont, + viewSource: mdiCodeTags + }, + expansionItem: { + icon: mdiChevronDown, + denseIcon: mdiMenuDown + }, + fab: { + icon: mdiPlus, + activeIcon: mdiClose + }, + field: { + clear: mdiCloseCircle, + error: mdiAlertCircle + }, + pagination: { + first: mdiChevronDoubleLeft, + prev: mdiChevronLeft, + next: mdiChevronRight, + last: mdiChevronDoubleRight + }, + rating: { + icon: mdiStar + }, + stepper: { + done: mdiCheck, + active: mdiPencil, + error: mdiAlert + }, + tabs: { + left: mdiChevronLeft, + right: mdiChevronRight, + up: mdiChevronUp, + down: mdiChevronDown + }, + table: { + arrowUp: mdiArrowUp, + warning: mdiAlert, + firstPage: mdiChevronDoubleLeft, + prevPage: mdiChevronLeft, + nextPage: mdiChevronRight, + lastPage: mdiChevronDoubleRight + }, + tree: { + icon: mdiPlay + }, + uploader: { + done: mdiCheck, + clear: mdiClose, + add: mdiPlusBox, + upload: mdiCloudUpload, + removeQueue: mdiNotificationClearAll, + removeUploaded: mdiCheckAll + } +} diff --git a/icon-set/svg-mdi-v6.js b/icon-set/svg-mdi-v6.js new file mode 100644 index 00000000000..e1032aa3ca4 --- /dev/null +++ b/icon-set/svg-mdi-v6.js @@ -0,0 +1,225 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (mdi-v6.js). + */ + + +import { + mdiCheckCircle, + mdiAlert, + mdiInformation, + mdiExclamation, + mdiArrowUp, + mdiArrowRight, + mdiArrowDown, + mdiArrowLeft, + mdiMenuDown, + mdiChevronLeft, + mdiChevronRight, + mdiGradientVertical, + mdiTune, + mdiPaletteSwatch, + mdiRefresh, + mdiChevronUp, + mdiChevronDown, + mdiCircle, + mdiCloseCircle, + mdiCheck, + mdiClockOutline, + mdiCalendarToday, + mdiFormatBold, + mdiFormatItalic, + mdiFormatStrikethroughVariant, + mdiFormatUnderline, + mdiFormatListBulleted, + mdiFormatListNumbered, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiLink, + mdiFullscreen, + mdiFormatQuoteClose, + mdiFormatAlignLeft, + mdiFormatAlignCenter, + mdiFormatAlignRight, + mdiFormatAlignJustify, + mdiPrinter, + mdiFormatIndentDecrease, + mdiFormatIndentIncrease, + mdiFormatClear, + mdiFormatColorText, + mdiFormatSize, + mdiMinus, + mdiUndo, + mdiRedo, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiCodeTags, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont, + mdiPlus, + mdiClose, + mdiAlertCircle, + mdiChevronDoubleLeft, + mdiChevronDoubleRight, + mdiStar, + mdiPencil, + mdiPlay, + mdiPlusBox, + mdiCloudUpload, + mdiNotificationClearAll, + mdiCheckAll +} from '@quasar/extras/mdi-v6' + +export default { + name: 'svg-mdi-v6', + type: { + positive: mdiCheckCircle, + negative: mdiAlert, + info: mdiInformation, + warning: mdiExclamation + }, + arrow: { + up: mdiArrowUp, + right: mdiArrowRight, + down: mdiArrowDown, + left: mdiArrowLeft, + dropdown: mdiMenuDown + }, + chevron: { + left: mdiChevronLeft, + right: mdiChevronRight + }, + colorPicker: { + spectrum: mdiGradientVertical, + tune: mdiTune, + palette: mdiPaletteSwatch + }, + pullToRefresh: { + icon: mdiRefresh + }, + carousel: { + left: mdiChevronLeft, + right: mdiChevronRight, + up: mdiChevronUp, + down: mdiChevronDown, + navigationIcon: mdiCircle + }, + chip: { + remove: mdiCloseCircle, + selected: mdiCheck + }, + datetime: { + arrowLeft: mdiChevronLeft, + arrowRight: mdiChevronRight, + now: mdiClockOutline, + today: mdiCalendarToday + }, + editor: { + bold: mdiFormatBold, + italic: mdiFormatItalic, + strikethrough: mdiFormatStrikethroughVariant, + underline: mdiFormatUnderline, + unorderedList: mdiFormatListBulleted, + orderedList: mdiFormatListNumbered, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + hyperlink: mdiLink, + toggleFullscreen: mdiFullscreen, + quote: mdiFormatQuoteClose, + left: mdiFormatAlignLeft, + center: mdiFormatAlignCenter, + right: mdiFormatAlignRight, + justify: mdiFormatAlignJustify, + print: mdiPrinter, + outdent: mdiFormatIndentDecrease, + indent: mdiFormatIndentIncrease, + removeFormat: mdiFormatClear, + formatting: mdiFormatColorText, + fontSize: mdiFormatSize, + align: mdiFormatAlignLeft, + hr: mdiMinus, + undo: mdiUndo, + redo: mdiRedo, + heading: mdiFormatSize, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + code: mdiCodeTags, + size: mdiFormatSize, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont, + viewSource: mdiCodeTags + }, + expansionItem: { + icon: mdiChevronDown, + denseIcon: mdiMenuDown + }, + fab: { + icon: mdiPlus, + activeIcon: mdiClose + }, + field: { + clear: mdiCloseCircle, + error: mdiAlertCircle + }, + pagination: { + first: mdiChevronDoubleLeft, + prev: mdiChevronLeft, + next: mdiChevronRight, + last: mdiChevronDoubleRight + }, + rating: { + icon: mdiStar + }, + stepper: { + done: mdiCheck, + active: mdiPencil, + error: mdiAlert + }, + tabs: { + left: mdiChevronLeft, + right: mdiChevronRight, + up: mdiChevronUp, + down: mdiChevronDown + }, + table: { + arrowUp: mdiArrowUp, + warning: mdiAlert, + firstPage: mdiChevronDoubleLeft, + prevPage: mdiChevronLeft, + nextPage: mdiChevronRight, + lastPage: mdiChevronDoubleRight + }, + tree: { + icon: mdiPlay + }, + uploader: { + done: mdiCheck, + clear: mdiClose, + add: mdiPlusBox, + upload: mdiCloudUpload, + removeQueue: mdiNotificationClearAll, + removeUploaded: mdiCheckAll + } +} diff --git a/icon-set/svg-themify.js b/icon-set/svg-themify.js new file mode 100644 index 00000000000..d72c11f1f48 --- /dev/null +++ b/icon-set/svg-themify.js @@ -0,0 +1,232 @@ + +/* + * Do not edit this file. It is automatically generated + * from its webfont counterpart (same filename without "svg-" prefix). + * Edit that file instead (themify.js). + */ + + +import { + tiCheck, + tiAlert, + tiInfoAlt, + tiArrowUp, + tiArrowRight, + tiArrowDown, + tiArrowLeft, + tiArrowCircleDown, + tiAngleLeft, + tiAngleRight, + tiBrushAlt, + tiPanel, + tiPalette, + tiReload, + tiAngleUp, + tiAngleDown, + tiControlRecord, + tiLayoutSliderAlt, + tiClose, + tiTime, + tiCalendar, + tiItalic, + tiUnderline, + tiList, + tiListOl, + tiLink, + tiFullscreen, + tiQuoteRight, + tiAlignLeft, + tiAlignCenter, + tiAlignRight, + tiAlignJustify, + tiPrinter, + tiAngleDoubleLeft, + tiAngleDoubleRight, + tiText, + tiSmallcap, + tiMinus, + tiShareAlt, + tiShare, + tiParagraph, + tiShortcode, + tiPlus, + tiStar, + tiPencil, + tiControlPlay, + tiSupport, + tiCloudUp, + tiLayoutMediaRight, + tiLayoutPlaceholder +} from '@quasar/extras/themify' + +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatBold, + mdiFormatStrikethroughVariant, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiFormatClear, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiCodeTags, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont +} from '@quasar/extras/mdi-v6' + + + +export default { + name: 'svg-themify', + type: { + positive: tiCheck, + negative: tiAlert, + info: tiInfoAlt, + warning: tiAlert + }, + arrow: { + up: tiArrowUp, + right: tiArrowRight, + down: tiArrowDown, + left: tiArrowLeft, + dropdown: tiArrowCircleDown + }, + chevron: { + left: tiAngleLeft, + right: tiAngleRight + }, + colorPicker: { + spectrum: tiBrushAlt, + tune: tiPanel, + palette: tiPalette + }, + pullToRefresh: { + icon: tiReload + }, + carousel: { + left: tiAngleLeft, + right: tiAngleRight, + up: tiAngleUp, + down: tiAngleDown, + navigationIcon: tiControlRecord, + thumbnails: tiLayoutSliderAlt + }, + chip: { + remove: tiClose, + selected: tiCheck + }, + datetime: { + arrowLeft: tiAngleLeft, + arrowRight: tiAngleRight, + now: tiTime, + today: tiCalendar + }, + editor: { + italic: tiItalic, + underline: tiUnderline, + unorderedList: tiList, + orderedList: tiListOl, + hyperlink: tiLink, + toggleFullscreen: tiFullscreen, + quote: tiQuoteRight, + left: tiAlignLeft, + center: tiAlignCenter, + right: tiAlignRight, + justify: tiAlignJustify, + print: tiPrinter, + outdent: tiAngleDoubleLeft, + indent: tiAngleDoubleRight, + formatting: tiText, + fontSize: tiSmallcap, + align: tiAlignLeft, + hr: tiMinus, + undo: tiShareAlt, + redo: tiShare, + heading: tiParagraph, + size: tiSmallcap, + viewSource: tiShortcode, + + bold: mdiFormatBold, + strikethrough: mdiFormatStrikethroughVariant, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + removeFormat: mdiFormatClear, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + code: mdiCodeTags, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont + }, + expansionItem: { + icon: tiAngleDown, + denseIcon: tiArrowCircleDown + }, + fab: { + icon: tiPlus, + activeIcon: tiClose + }, + field: { + clear: tiClose, + error: tiAlert + }, + pagination: { + first: tiAngleDoubleLeft, + prev: tiAngleLeft, + next: tiAngleRight, + last: tiAngleDoubleRight + }, + rating: { + icon: tiStar + }, + stepper: { + done: tiCheck, + active: tiPencil, + error: tiAlert + }, + tabs: { + left: tiAngleLeft, + right: tiAngleRight, + up: tiAngleUp, + down: tiAngleDown + }, + table: { + arrowUp: tiArrowUp, + warning: tiAlert, + firstPage: tiAngleDoubleLeft, + prevPage: tiAngleLeft, + nextPage: tiAngleRight, + lastPage: tiAngleDoubleRight + }, + tree: { + icon: tiControlPlay + }, + uploader: { + done: tiCheck, + clear: tiClose, + add: tiSupport, + upload: tiCloudUp, + removeQueue: tiLayoutMediaRight, + removeUploaded: tiLayoutPlaceholder + } +} diff --git a/icon-set/themify.js b/icon-set/themify.js new file mode 100644 index 00000000000..ef452003bc9 --- /dev/null +++ b/icon-set/themify.js @@ -0,0 +1,169 @@ +// there are some icons that are needed but not available +// so we import them from MDI as svgs + +import { + mdiFormatBold, + mdiFormatStrikethroughVariant, + mdiFormatSubscript, + mdiFormatSuperscript, + mdiFormatClear, + mdiFormatHeader1, + mdiFormatHeader2, + mdiFormatHeader3, + mdiFormatHeader4, + mdiFormatHeader5, + mdiFormatHeader6, + mdiCodeTags, + mdiNumeric1Box, + mdiNumeric2Box, + mdiNumeric3Box, + mdiNumeric4Box, + mdiNumeric5Box, + mdiNumeric6Box, + mdiNumeric7Box, + mdiFormatFont +} from '@quasar/extras/mdi-v6' + +export default { + name: 'themify', + type: { + positive: 'ti-check', + negative: 'ti-alert', + info: 'ti-info-alt', + warning: 'ti-alert' + }, + arrow: { + up: 'ti-arrow-up', + right: 'ti-arrow-right', + down: 'ti-arrow-down', + left: 'ti-arrow-left', + dropdown: 'ti-arrow-circle-down' + }, + chevron: { + left: 'ti-angle-left', + right: 'ti-angle-right' + }, + colorPicker: { + spectrum: 'ti-brush-alt', + tune: 'ti-panel', + palette: 'ti-palette' + }, + pullToRefresh: { + icon: 'ti-reload' + }, + carousel: { + left: 'ti-angle-left', + right: 'ti-angle-right', + up: 'ti-angle-up', + down: 'ti-angle-down', + navigationIcon: 'ti-control-record', + thumbnails: 'ti-layout-slider-alt' + }, + chip: { + remove: 'ti-close', + selected: 'ti-check' + }, + datetime: { + arrowLeft: 'ti-angle-left', + arrowRight: 'ti-angle-right', + now: 'ti-time', + today: 'ti-calendar' + }, + editor: { + italic: 'ti-Italic', + underline: 'ti-underline', + unorderedList: 'ti-list', + orderedList: 'ti-list-ol', + hyperlink: 'ti-link', + toggleFullscreen: 'ti-fullscreen', + quote: 'ti-quote-right', + left: 'ti-align-left', + center: 'ti-align-center', + right: 'ti-align-right', + justify: 'ti-align-justify', + print: 'ti-printer', + outdent: 'ti-angle-double-left', + indent: 'ti-angle-double-right', + formatting: 'ti-text', + fontSize: 'ti-smallcap', + align: 'ti-align-left', + hr: 'ti-minus', + undo: 'ti-share-alt', + redo: 'ti-share', + heading: 'ti-paragraph', + size: 'ti-smallcap', + viewSource: 'ti-shortcode', + + bold: mdiFormatBold, + strikethrough: mdiFormatStrikethroughVariant, + subscript: mdiFormatSubscript, + superscript: mdiFormatSuperscript, + removeFormat: mdiFormatClear, + heading1: mdiFormatHeader1, + heading2: mdiFormatHeader2, + heading3: mdiFormatHeader3, + heading4: mdiFormatHeader4, + heading5: mdiFormatHeader5, + heading6: mdiFormatHeader6, + code: mdiCodeTags, + size1: mdiNumeric1Box, + size2: mdiNumeric2Box, + size3: mdiNumeric3Box, + size4: mdiNumeric4Box, + size5: mdiNumeric5Box, + size6: mdiNumeric6Box, + size7: mdiNumeric7Box, + font: mdiFormatFont + }, + expansionItem: { + icon: 'ti-angle-down', + denseIcon: 'ti-arrow-circle-down' + }, + fab: { + icon: 'ti-plus', + activeIcon: 'ti-close' + }, + field: { + clear: 'ti-close', + error: 'ti-alert' + }, + pagination: { + first: 'ti-angle-double-left', + prev: 'ti-angle-left', + next: 'ti-angle-right', + last: 'ti-angle-double-right' + }, + rating: { + icon: 'ti-star' + }, + stepper: { + done: 'ti-check', + active: 'ti-pencil', + error: 'ti-alert' + }, + tabs: { + left: 'ti-angle-left', + right: 'ti-angle-right', + up: 'ti-angle-up', + down: 'ti-angle-down' + }, + table: { + arrowUp: 'ti-arrow-up', + warning: 'ti-alert', + firstPage: 'ti-angle-double-left', + prevPage: 'ti-angle-left', + nextPage: 'ti-angle-right', + lastPage: 'ti-angle-double-right' + }, + tree: { + icon: 'ti-control-play' + }, + uploader: { + done: 'ti-check', + clear: 'ti-close', + add: 'ti-support', + upload: 'ti-cloud-up', + removeQueue: 'ti-layout-media-right', + removeUploaded: 'ti-layout-placeholder' + } +} diff --git a/lang/ar.js b/lang/ar.js new file mode 100644 index 00000000000..bc19d709cae --- /dev/null +++ b/lang/ar.js @@ -0,0 +1,100 @@ +export default { + isoName: 'ar', + nativeName: 'العربية', + rtl: true, + label: { + clear: 'مسح', + ok: 'حسناً', + cancel: 'إلغاء', + close: 'إغلاق', + set: 'ضبط', + select: 'تحديد', + reset: 'إعادة ضبط', + remove: 'حذف', + update: 'تحديث', + create: 'إنشاء', + search: 'بحث', + filter: 'ترشيح', + refresh: 'تحديث', + expand: function (label) { return label ? `"${label} توسيع` : 'وسعت' }, + collapse: function (label) { return label ? `"${label}" تصغير` : 'انهيار' } + }, + date: { + days: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'), + daysShort: 'أحد_إثن_ثلا_أرب_خمي_جمع_سبت'.split('_'), + months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'), + monthsShort: 'ينا_فبر_مار_أبر_ماي_يون_يول_أغس_سبت_أكت_نوف_ديس'.split('_'), + firstDayOfWeek: 6, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'أيام' + }, + table: { + noData: 'لا توجد بيانات', + noResults: 'لا توجد نتائج', + loading: 'جارٍ التحميل...', + selectedRecords: function (rows) { + return rows === 0 + ? 'لا توجد مُدخَلات محدّدة.' + : rows === 1 + ? 'مُدخَلة واحدة محدّدة.' + : rows === 2 + ? 'مُدخَلتان محدّدتان.' + : 'عدد المُدخَلات المحدّدة ' + rows + '.' + }, + recordsPerPage: 'عدد المُدخَلات في كل صفحة:', + allRows: 'الكل', + pagination: function (start, end, total) { + return start + '-' + end + ' من ' + total + }, + columns: 'أعمدة' + }, + editor: { + url: 'رابط', + bold: 'عريض', + italic: 'مائل', + strikethrough: 'مشطوب', + underline: 'مسطّر', + unorderedList: 'قائمة غير مرتبة', + orderedList: 'قائمة مرتبة', + subscript: 'منخفض', + superscript: 'مرتفع', + hyperlink: 'رابط', + toggleFullscreen: 'تفعيل أو إيقاف العرض في كامل الشاشة', + quote: 'اقتباس', + left: 'انتظام لجهة اليسار', + center: 'توسيط', + right: 'انتظام لجهة اليمين', + justify: 'انتظام بالتساوي', + print: 'طباعة', + outdent: 'تقليل مسافة البداية', + indent: 'زيادة مسافة البداية', + removeFormat: 'إزالة التنسيق', + formatting: 'تنسيق', + fontSize: 'حجم الخط', + align: 'انتظام', + hr: 'إضافة خط أفقي', + undo: 'تراجع', + redo: 'إعادة', + heading1: 'عنوان 1', + heading2: 'عنوان 2', + heading3: 'عنوان 3', + heading4: 'عنوان 4', + heading5: 'عنوان 5', + heading6: 'عنوان 6', + paragraph: 'فقرة', + code: 'تعليمات برمجية', + size1: 'صغير جداً', + size2: 'صغير', + size3: 'عادي', + size4: 'فوق المتوسط', + size5: 'كبير', + size6: 'كبير جداً', + size7: 'الأقصى', + defaultFont: 'الخط الإفتراضي', + viewSource: 'عرض المصدر' + }, + tree: { + noNodes: 'لا توجد عُقَد', + noResults: 'لا توجد نتائج' + } +} diff --git a/lang/az-latn.js b/lang/az-latn.js new file mode 100644 index 00000000000..0946f7e8b9a --- /dev/null +++ b/lang/az-latn.js @@ -0,0 +1,95 @@ +export default { + isoName: 'az-latn', + nativeName: 'Azerbaijani (latin)', + label: { + clear: 'Təmizlə', + ok: 'OK', + cancel: 'Ləğv et', + close: 'Bağla', + set: 'Ayarla', + select: 'Seç', + reset: 'Sıfırla', + remove: 'Sil', + update: 'Güncəllə', + create: 'Yarat', + search: 'Axtar', + filter: 'Filtrlə', + refresh: 'Yenilə', + expand: function (label) { return label ? `"${label}" genişləndirin` : 'Genişləndirin' }, + collapse: function (label) { return label ? `"${label}" yığcamlaşdırın` : 'Yıxılma' } + }, + date: { + days: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'), + daysShort: 'B_B.E_Ç_Ç.E_C.A_C_Ş'.split('_'), + months: 'Yanvar_Fevral_Mart_Aprel_May_İyun_İyul_Avqust_Sentyabr_Oktyabr_Noyabr_Dekabr'.split('_'), + monthsShort: 'Yan_Fev_Mar_Apr_May_İyn_İyl_Avq_Sen_Okt_Noy_Dek'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'gün' + }, + table: { + noData: 'Məlumat yoxdur', + noResults: 'Uyğun məlumat tapılmadı', + loading: 'Yüklənir...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 record selected.' + : (rows === 0 ? 'No' : rows) + ' seçilmiş məlumat.' + }, + recordsPerPage: 'Hər səhifədəki məlumat:', + allRows: 'Bütün', + pagination: function (start, end, total) { + return start + '-' + end + ' cəmi ' + total + }, + columns: 'Sütun' + }, + editor: { + url: 'URL', + bold: 'Bold', + italic: 'Italic', + strikethrough: 'Strikethrough', + underline: 'Altdan xətt', + unorderedList: 'Sıralanmamış siyahı', + orderedList: 'Sıralanmış siyahı', + subscript: 'Alt yazı', + superscript: 'Üst yazı', + hyperlink: 'Link', + toggleFullscreen: 'Tam ekranı aç/bağla', + quote: 'Sitat', + left: 'Sol tərəf', + center: 'Orta', + right: 'Rağ tərəf', + justify: 'Mərkəzləşdir', + print: 'Çap et', + outdent: 'Abzası azalt', + indent: 'Abzası artır', + removeFormat: 'Formatlamanı sil', + formatting: 'Formatlama', + fontSize: 'Font ölçüsü', + align: 'Tərəf', + hr: 'Horizantal xətt əlavə et', + undo: 'Geri qaytar', + redo: 'Təkrarla', + heading1: 'Başlıq 1', + heading2: 'Başlıq 2', + heading3: 'Başlıq 3', + heading4: 'Başlıq 4', + heading5: 'Başlıq 5', + heading6: 'Başlıq 6', + paragraph: 'Paraqraf', + code: 'Kod', + size1: 'Çox kiçik', + size2: 'Bir az kiçik', + size3: 'Normal', + size4: 'Orta-böyük', + size5: 'Böyük', + size6: 'Çox böyük', + size7: 'Maksimum', + defaultFont: 'Varsayılan font', + viewSource: 'Qaynağı gör' + }, + tree: { + noNodes: 'Düyün yoxdur', + noResults: 'Uyğun düyün yoxdur' + } +} diff --git a/lang/bg.js b/lang/bg.js new file mode 100644 index 00000000000..8bcb8f23546 --- /dev/null +++ b/lang/bg.js @@ -0,0 +1,95 @@ +export default { + isoName: 'bg', + nativeName: 'български език', + label: { + clear: 'Изчисти', + ok: 'OK', + cancel: 'Отказ', + close: 'Затвори', + set: 'Задай', + select: 'Избери', + reset: 'Отначало', + remove: 'Изтрий', + update: 'Обнови', + create: 'Създай', + search: 'Търси', + filter: 'Филтър', + refresh: 'Презареди', + expand: function (label) { return label ? `Разширете "${label}"` : 'Разширяване' }, + collapse: function (label) { return label ? `Свиване на "${label}"` : 'Свиване' } + }, + date: { + days: 'Неделя_Понеделник_Вторник_Сряда_Четвъртък_Петък_Събота'.split('_'), + daysShort: 'Нд_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'), + months: 'Януари_Февруари_Март_Април_Май_Юни_Юли_Август_Септември_Октомври_Ноември_Декември'.split('_'), + monthsShort: 'Яну_Фев_Мар_Апр_Май_Юни_Юли_Авг_Сеп_Окт_Ное_Дек'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'дни' + }, + table: { + noData: 'Няма данни', + noResults: 'Нищо не е намерено', + loading: 'Зареждане...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' избрани реда.' + : (rows === 0 ? 'Няма' : '1') + ' избрани редове.' + }, + recordsPerPage: 'Редове на страница:', + allRows: 'Всички', + pagination: function (start, end, total) { + return start + '-' + end + ' от ' + total + }, + columns: 'Колони' + }, + editor: { + url: 'URL', + bold: 'Удебелен', + italic: 'Курсив', + strikethrough: 'Задраскан', + underline: 'Подчертан', + unorderedList: 'Неподреден списък', + orderedList: 'Номериран списък', + subscript: 'Долен индекс', + superscript: 'Горен индекс', + hyperlink: 'Хипер-линк', + toggleFullscreen: 'На цял екран', + quote: 'Цитат', + left: 'Ляво подравняване', + center: 'Центриране', + right: 'Дясно подравняване', + justify: 'Подравняване по ширина', + print: 'Отпечатване', + outdent: 'Намали отстъпа', + indent: 'Увеличи отстъпа', + removeFormat: 'Без форматиране', + formatting: 'Форматиране', + fontSize: 'Размер на шрифта', + align: 'Подравняване', + hr: 'Вмъкни хоризонтална линия', + undo: 'Отмени', + redo: 'Повтори', + heading1: 'Заглавие 1', + heading2: 'Заглавие 2', + heading3: 'Заглавие 3', + heading4: 'Заглавие 4', + heading5: 'Заглавие 5', + heading6: 'Заглавие 6', + paragraph: 'Параграф', + code: 'Програмен код', + size1: 'Много малък', + size2: 'Малък', + size3: 'Нормален', + size4: 'Среден', + size5: 'Голям', + size6: 'Много голям', + size7: 'Огромен', + defaultFont: 'Шрифт по подразбиране', + viewSource: 'Виж HTML кода' + }, + tree: { + noNodes: 'Няма повече възли', + noResults: 'Нищо не е намерено' + } +} diff --git a/lang/ca.js b/lang/ca.js new file mode 100644 index 00000000000..142065d1519 --- /dev/null +++ b/lang/ca.js @@ -0,0 +1,95 @@ +export default { + isoName: 'ca', + nativeName: 'Català', + label: { + clear: 'Netejar', + ok: 'D\'acord', + cancel: 'Cancel·lar', + close: 'Tancar', + set: 'Definir', + select: 'Seleccionar', + reset: 'Reinicialitzar', + remove: 'Suprimir', + update: 'Actualitzar', + create: 'Crear', + search: 'Cercar', + filter: 'Filtrar', + refresh: 'Refrescar', + expand: function (label) { return label ? `Amplia "${label}"` : 'Expandir' }, + collapse: function (label) { return label ? `Col·lapse "${label}"` : 'Col·lapse' } + }, + date: { + days: 'Diumenge_Dilluns_Dimarts_Dimecres_Dijous_Divendres_Dissabte'.split('_'), + daysShort: 'Dg_Dl_Dt_Dc_Dj_Dv_Ds'.split('_'), + months: 'Gener_Febrer_Març_Abril_Maig_Juny_Juliol_Agost_Setembre_Octubre_Novembre_Desembre'.split('_'), + monthsShort: 'Gen_Feb_Mar_Abr_Mai_Jun_Jul_Ago_Set_Oct_Nov_Des'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dies' + }, + table: { + noData: 'No hi ha dades disponibles', + noResults: 'No s\'han trobat resultats', + loading: 'Carregant...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' files seleccionades.' + : (rows === 0 ? 'Sense' : '1') + ' fila seleccionada.' + }, + recordsPerPage: 'Files per pàgina:', + allRows: 'Totes', + pagination: function (start, end, total) { + return start + '-' + end + ' de ' + total + }, + columns: 'Columnes' + }, + editor: { + url: 'URL', + bold: 'Negreta', + italic: 'Cursiva', + strikethrough: 'Barrat', + underline: 'Subratllat', + unorderedList: 'Llista sense ordre', + orderedList: 'Llista amb ordre', + subscript: 'Subíndex', + superscript: 'Superíndex', + hyperlink: 'Hiperenllaç', + toggleFullscreen: 'Commutar pantalla completa', + quote: 'Cita', + left: 'Alinear a l\'esquerra', + center: 'Alinear al centre', + right: 'Alinear a la dreta', + justify: 'Alinear justificat', + print: 'Imprimir', + outdent: 'Augmentar identació', + indent: 'Disminuir identació', + removeFormat: 'Llevar el format', + formatting: 'Formatant', + fontSize: 'Mida de la font', + align: 'Alinear', + hr: 'Inserir una línea horitzontal', + undo: 'Desfer', + redo: 'Refer', + heading1: 'Encapçalament 1', + heading2: 'Encapçalament 2', + heading3: 'Encapçalament 3', + heading4: 'Encapçalament 4', + heading5: 'Encapçalament 5', + heading6: 'Encapçalament 6', + paragraph: 'Paràgraf', + code: 'Codi', + size1: 'Molt petit', + size2: 'Petit', + size3: 'Normal', + size4: 'Mitjà', + size5: 'Gran', + size6: 'Molt gran', + size7: 'Màxim', + defaultFont: 'Font per defecte', + viewSource: 'Veure font' + }, + tree: { + noNodes: 'No hi ha nodes disponibles', + noResults: 'No s\'han trobat nodes' + } +} diff --git a/lang/cs.js b/lang/cs.js new file mode 100644 index 00000000000..2f2a2abbc79 --- /dev/null +++ b/lang/cs.js @@ -0,0 +1,106 @@ +export default { + isoName: 'cs', + nativeName: 'Čeština', + label: { + clear: 'Smazat', + ok: 'OK', + cancel: 'Zrušit', + close: 'Zavřít', + set: 'Nastavit', + select: 'Vybrat', + reset: 'Reset', + remove: 'Odebrat', + update: 'Opravit', + create: 'Vytvořit', + search: 'Hledat', + filter: 'Filtrovat', + refresh: 'Obnovit', + expand: function (label) { return label ? `Rozbalit "${label}"` : 'Rozšířit' }, + collapse: function (label) { return label ? `Sbalit "${label}"` : 'Kolaps' } + }, + date: { + days: 'Neděle_Pondělí_Úterý_Středa_Čtvrtek_Pátek_Sobota'.split('_'), + daysShort: 'Ne_Po_Út_St_Čt_Pá_So'.split('_'), + months: 'Leden_Únor_Březen_Duben_Květen_Červen_Červenec_Srpen_Září_Říjen_Listopad_Prosinec'.split( + '_'), + monthsShort: 'Led_Úno_Bře_Dub_Kvě_Čvn_Čvc_Srp_Zář_Říj_Lis_Pro'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dny' + }, + table: { + noData: 'Žádná data k dispozici', + noResults: 'Nebyly nalezeny žádné odpovídající záznamy', + loading: 'Načítá se...', + selectedRecords: function (rows) { + switch (rows) { + case 0: + return 'Nejsou vybrány žádné řádky.' + case 1: + return 'Vybrán 1 řádek.' + case 2: + return 'Vybrány 2 řádky.' + case 3: + return 'Vybrány 3 řádky.' + case 4: + return 'Vybrány 4 řádky.' + } + return ('Vybráno ' + rows + ' řádků.') + }, + recordsPerPage: 'Počet řádků na stránku:', + allRows: 'Všechny', + pagination: function (start, end, total) { + return start + '-' + end + ' z ' + total + }, + columns: 'Sloupce' + }, + editor: { + url: 'URL', + bold: 'Tučně', + italic: 'Kurzíva', + strikethrough: 'Přeškrtnuté', + underline: 'Podtržené', + unorderedList: 'Odrážkový seznam', + orderedList: 'Číslovaný seznam', + subscript: 'Dolní index', + superscript: 'Horní index', + hyperlink: 'Odkaz', + toggleFullscreen: 'Přepnout zobrazení na celou obrazovku', + quote: 'Bloková citace', + left: 'Zarovnat vlevo', + center: 'Zarovnat na střed', + right: 'Zarovnat vpravo', + justify: 'Zarovnat do bloku', + print: 'Tisk', + outdent: 'Zmenšit odsazení', + indent: 'Zvětšit odsazení', + removeFormat: 'Vymazat formátování', + formatting: 'Styl', + fontSize: 'Velikost písma', + align: 'Zarovnání', + hr: 'Vložit oddělovač', + undo: 'Zpět', + redo: 'Znovu', + heading1: 'Nadpis 1', + heading2: 'Nadpis 2', + heading3: 'Nadpis 3', + heading4: 'Nadpis 4', + heading5: 'Nadpis 5', + heading6: 'Nadpis 6', + paragraph: 'Odstavec', + code: 'Kód', + size1: 'Velmi malé', + size2: 'Malé', + size3: 'Normální', + size4: 'Středně velké', + size5: 'Velké', + size6: 'Velmi velké', + size7: 'Maximum', + defaultFont: 'Výchozí písmo', + viewSource: 'Zobrazit zdroj' + }, + tree: { + noNodes: 'Žádné uzly', + noResults: 'Žádné odpovídající uzly nenalezeny' + } +} diff --git a/lang/da.js b/lang/da.js new file mode 100644 index 00000000000..9f8da61512b --- /dev/null +++ b/lang/da.js @@ -0,0 +1,95 @@ +export default { + isoName: 'da', + nativeName: 'Dansk', + label: { + clear: 'Ryd', + ok: 'OK', + cancel: 'Annuller', + close: 'Luk', + set: 'Sæt', + select: 'Vælg', + reset: 'Nulstil', + remove: 'Fjern', + update: 'Opdater', + create: 'Opret', + search: 'Søg', + filter: 'Filtrer', + refresh: 'Opdater', + expand: function (label) { return label ? `Udvid "${label}"` : 'Udvide' }, + collapse: function (label) { return label ? `Skjul "${label}"` : 'Bryder sammen' } + }, + date: { + days: 'Søndag_Mandag_Tirsdag_Onsdag_Torsdag_Fredag_Lørdag'.split('_'), + daysShort: 'Søn_Man_Tirs_Ons_Tors_Fre_Lør'.split('_'), + months: 'Januar_Februar_Marts_April_Maj_Juni_Juli_August_September_Oktober_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Maj_Jun_Jul_Aug_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dage' + }, + table: { + noData: 'Ingen data tilgængelig', + noResults: 'Ingen matchende resultater fundet', + loading: 'Indlæser...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 række valgt.' + : (rows === 0 ? 'Ingen' : rows) + ' rækker valgt.' + }, + recordsPerPage: 'Rækker per side:', + allRows: 'Alle', + pagination: function (start, end, total) { + return start + '-' + end + ' af ' + total + }, + columns: 'Kolonner' + }, + editor: { + url: 'URL', + bold: 'Fed', + italic: 'Kursiv', + strikethrough: 'Gennemstreget', + underline: 'Understreget', + unorderedList: 'Punktliste', + orderedList: 'Numreret liste', + subscript: 'Sænket', + superscript: 'Hævet', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Skift fuldskærm', + quote: 'Citat', + left: 'Venstrejustering', + center: 'Centreret', + right: 'Højrejustering', + justify: 'Lige margener', + print: 'Udskriv', + outdent: 'Formindsk indrykning', + indent: 'Forøg indrykning', + removeFormat: 'Fjern formattering', + formatting: 'Formattering', + fontSize: 'Skriftstørrelse', + align: 'Justering', + hr: 'Indsæt vandret streg', + undo: 'Fortryd', + redo: 'Gendan', + heading1: 'Overskrift 1', + heading2: 'Overskrift 2', + heading3: 'Overskrift 3', + heading4: 'Overskrift 4', + heading5: 'Overskrift 5', + heading6: 'Overskrift 6', + paragraph: 'Afsnit', + code: 'Kode', + size1: 'Meget lille', + size2: 'Lille', + size3: 'Normal', + size4: 'Mellemstor', + size5: 'Stor', + size6: 'Meget stor', + size7: 'Størst', + defaultFont: 'Standard skrifttype', + viewSource: 'Se kilde' + }, + tree: { + noNodes: 'Ingen noder tilgængelige', + noResults: 'Ingen matchende noder fundet' + } +} diff --git a/lang/de.js b/lang/de.js new file mode 100644 index 00000000000..569a9b03471 --- /dev/null +++ b/lang/de.js @@ -0,0 +1,95 @@ +export default { + isoName: 'de', + nativeName: 'Deutsch', + label: { + clear: 'Leeren', + ok: 'Ok', + cancel: 'Abbrechen', + close: 'Schließen', + set: 'Setzen', + select: 'Auswählen', + reset: 'Zurücksetzen', + remove: 'Löschen', + update: 'Aktualisieren', + create: 'Erstellen', + search: 'Suche', + filter: 'Filter', + refresh: 'Aktualisieren', + expand: function (label) { return label ? `Erweitern Sie "${label}"` : 'Erweitern' }, + collapse: function (label) { return label ? `"${label}" minimieren` : 'Zusammenbruch' } + }, + date: { + days: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'), + daysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'), + months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'Tage' + }, + table: { + noData: 'Keine Daten vorhanden.', + noResults: 'Keine Einträge gefunden', + loading: 'Lade...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' ausgewählte Zeilen' + : (rows === 0 ? 'Keine' : '1') + ' ausgewählt.' + }, + recordsPerPage: 'Zeilen pro Seite', + allRows: 'Alle', + pagination: function (start, end, total) { + return start + '-' + end + ' von ' + total + }, + columns: 'Spalten' + }, + editor: { + url: 'URL', + bold: 'Fett', + italic: 'Kursiv', + strikethrough: 'Durchgestrichen', + underline: 'Unterstrichen', + unorderedList: 'Ungeordnete Liste', + orderedList: 'Geordnete Liste', + subscript: 'tiefgestellt', + superscript: 'hochgestellt', + hyperlink: 'Link', + toggleFullscreen: 'Vollbild umschalten', + quote: 'Zitat', + left: 'linksbündig', + center: 'zentriert', + right: 'rechtsbündig', + justify: 'Ausrichten', + print: 'Drucken', + outdent: 'ausrücken', + indent: 'einrücken', + removeFormat: 'Entferne Formatierung', + formatting: 'Formatiere', + fontSize: 'Schriftgröße', + align: 'Ausrichten', + hr: 'Horizontale Linie einfügen', + undo: 'Rückgänging', + redo: 'Wiederherstellen', + heading1: 'Überschrift 1', + heading2: 'Überschrift 2', + heading3: 'Überschrift 3', + heading4: 'Überschrift 4', + heading5: 'Überschrift 5', + heading6: 'Überschrift 6', + paragraph: 'Absatz', + code: 'Code', + size1: 'Sehr klein', + size2: 'klein', + size3: 'Normal', + size4: 'Groß', + size5: 'Größer', + size6: 'Sehr groß', + size7: 'Maximum', + defaultFont: 'Standard Schrift', + viewSource: 'Quelltext anzeigen' + }, + tree: { + noNodes: 'Keine Knoten verfügbar', + noResults: 'Keine passenden Knoten gefunden' + } +} diff --git a/lang/el.js b/lang/el.js new file mode 100644 index 00000000000..2ffb7f1e01c --- /dev/null +++ b/lang/el.js @@ -0,0 +1,95 @@ +export default { + isoName: 'el', + nativeName: 'ελληνικά', + label: { + clear: 'Καθαρισμός', + ok: 'Εντάξει', + cancel: 'Ακύρωση', + close: 'Κλείσιμο', + set: 'Ορισμός', + select: 'Επιλογή', + reset: 'Επαναφορά', + remove: 'Αφαίρεση', + update: 'Αναβάθμιση', + create: 'Δημιουργία', + search: 'Αναζήτηση', + filter: 'Φίλτρο', + refresh: 'Ανανέωση', + expand: function (label) { return label ? `Επέκταση "${label}"` : 'Επεκτείνουν' }, + collapse: function (label) { return label ? `Σύμπτυξη "${label}"` : 'Κατάρρευση' } + }, + date: { + days: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'), + daysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'), + months: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'), + monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'ημέρες' + }, + table: { + noData: 'Χωρίς δεδομένα', + noResults: 'Δεν βρέθηκαν αποτελέσματα', + loading: 'Φόρτωση...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 επιλεγμένη εγγραφή.' + : (rows === 0 ? 'Καμμία' : rows) + ' επιλεγμένες εγγραφές.' + }, + recordsPerPage: 'Εγγραφές ανα σελίδα:', + allRows: 'Όλες', + pagination: function (start, end, total) { + return start + '-' + end + ' από ' + total + }, + columns: 'Στήλες' + }, + editor: { + url: 'Διεύθυνση URL', // Needs Translation + bold: 'Έντονα', + italic: 'Πλάγια', + strikethrough: 'Διακριτή διαγραφή', + underline: 'Υπογράμμιση', + unorderedList: 'Αταξινόμητη λίστα', + orderedList: 'Ταξινομημένη λίστα', + subscript: 'Δείκτης', + superscript: 'Εκθέτης', + hyperlink: 'Υπερσύνδεσμος', + toggleFullscreen: 'Εναλλαγή μεγιστοποίησης οθόνης', + quote: 'Παράθεση', + left: 'Αριστερή στοίχιση', + center: 'Κεντρική στοίχιση', + right: 'Δεξιά στοίχιση', + justify: 'Πλήρης στοίχιση', + print: 'Εκτύπωση', + outdent: 'Μείωση εσοχής', + indent: 'Αύξηση εσοχής', + removeFormat: 'Απαλοιφή μορφοποίησης', + formatting: 'Μορφοποίηση', + fontSize: 'Μέγεθος γραμματοσειράς', + align: 'Στοίχιση', + hr: 'Εισαγωγή οριζόντιας γραμμής', + undo: 'Αναίρεση', + redo: 'Επανάληψη', + heading1: 'Επικεφαλίδα 1', + heading2: 'Επικεφαλίδα 2', + heading3: 'Επικεφαλίδα 3', + heading4: 'Επικεφαλίδα 4', + heading5: 'Επικεφαλίδα 5', + heading6: 'Επικεφαλίδα 6', + paragraph: 'Παράγραφος', + code: 'Κώδικας', + size1: 'Πολύ μικρό', + size2: 'Μικρό', + size3: 'Κανονικό', + size4: 'Μεσαίο', + size5: 'Μεγάλο', + size6: 'Πολύ μεγάλο', + size7: 'Μέγιστο', + defaultFont: 'Προκαθορισμένη γραμματοσειρά', + viewSource: 'Προβολή προέλευσης' + }, + tree: { + noNodes: 'Μη διαθέσιμοι κόμβοι', + noResults: 'Δεν βρέθηκαν αποτελέσματα' + } +} diff --git a/lang/en-gb.js b/lang/en-gb.js new file mode 100644 index 00000000000..200e1f3e469 --- /dev/null +++ b/lang/en-gb.js @@ -0,0 +1,95 @@ +export default { + isoName: 'en-gb', + nativeName: 'English (UK)', + label: { + clear: 'Clear', + ok: 'OK', + cancel: 'Cancel', + close: 'Close', + set: 'Set', + select: 'Select', + reset: 'Reset', + remove: 'Remove', + update: 'Update', + create: 'Create', + search: 'Search', + filter: 'Filter', + refresh: 'Refresh', + expand: function (label) { return label ? `Expand "${label}"` : 'Expand' }, + collapse: function (label) { return label ? `Collapse "${label}"` : 'Collapse' } + }, + date: { + days: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + daysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'days' + }, + table: { + noData: 'No data available', + noResults: 'No matching records found', + loading: 'Loading...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 record selected.' + : (rows === 0 ? 'No' : rows) + ' records selected.' + }, + recordsPerPage: 'Records per page:', + allRows: 'All', + pagination: function (start, end, total) { + return start + '-' + end + ' of ' + total + }, + columns: 'Columns' + }, + editor: { + url: 'URL', + bold: 'Bold', + italic: 'Italic', + strikethrough: 'Strikethrough', + underline: 'Underline', + unorderedList: 'Unordered List', + orderedList: 'Ordered List', + subscript: 'Subscript', + superscript: 'Superscript', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Toggle Fullscreen', + quote: 'Quote', + left: 'Left align', + center: 'Center align', + right: 'Right align', + justify: 'Justify align', + print: 'Print', + outdent: 'Decrease indentation', + indent: 'Increase indentation', + removeFormat: 'Remove formatting', + formatting: 'Formatting', + fontSize: 'Font Size', + align: 'Align', + hr: 'Insert Horizontal Rule', + undo: 'Undo', + redo: 'Redo', + heading1: 'Heading 1', + heading2: 'Heading 2', + heading3: 'Heading 3', + heading4: 'Heading 4', + heading5: 'Heading 5', + heading6: 'Heading 6', + paragraph: 'Paragraph', + code: 'Code', + size1: 'Very small', + size2: 'A bit small', + size3: 'Normal', + size4: 'Medium-large', + size5: 'Big', + size6: 'Very big', + size7: 'Maximum', + defaultFont: 'Default Font', + viewSource: 'View Source' + }, + tree: { + noNodes: 'No nodes available', + noResults: 'No matching nodes found' + } +} diff --git a/lang/en-us.js b/lang/en-us.js new file mode 100644 index 00000000000..3f531ea0201 --- /dev/null +++ b/lang/en-us.js @@ -0,0 +1,95 @@ +export default { + isoName: 'en-us', + nativeName: 'English (US)', + label: { + clear: 'Clear', + ok: 'OK', + cancel: 'Cancel', + close: 'Close', + set: 'Set', + select: 'Select', + reset: 'Reset', + remove: 'Remove', + update: 'Update', + create: 'Create', + search: 'Search', + filter: 'Filter', + refresh: 'Refresh', + expand: function (label) { return label ? `Expand "${label}"` : 'Expand' }, + collapse: function (label) { return label ? `Collapse "${label}"` : 'Collapse' } + }, + date: { + days: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + daysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'days' + }, + table: { + noData: 'No data available', + noResults: 'No matching records found', + loading: 'Loading...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 record selected.' + : (rows === 0 ? 'No' : rows) + ' records selected.' + }, + recordsPerPage: 'Records per page:', + allRows: 'All', + pagination: function (start, end, total) { + return start + '-' + end + ' of ' + total + }, + columns: 'Columns' + }, + editor: { + url: 'URL', + bold: 'Bold', + italic: 'Italic', + strikethrough: 'Strikethrough', + underline: 'Underline', + unorderedList: 'Unordered List', + orderedList: 'Ordered List', + subscript: 'Subscript', + superscript: 'Superscript', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Toggle Fullscreen', + quote: 'Quote', + left: 'Left align', + center: 'Center align', + right: 'Right align', + justify: 'Justify align', + print: 'Print', + outdent: 'Decrease indentation', + indent: 'Increase indentation', + removeFormat: 'Remove formatting', + formatting: 'Formatting', + fontSize: 'Font Size', + align: 'Align', + hr: 'Insert Horizontal Rule', + undo: 'Undo', + redo: 'Redo', + heading1: 'Heading 1', + heading2: 'Heading 2', + heading3: 'Heading 3', + heading4: 'Heading 4', + heading5: 'Heading 5', + heading6: 'Heading 6', + paragraph: 'Paragraph', + code: 'Code', + size1: 'Very small', + size2: 'A bit small', + size3: 'Normal', + size4: 'Medium-large', + size5: 'Big', + size6: 'Very big', + size7: 'Maximum', + defaultFont: 'Default Font', + viewSource: 'View Source' + }, + tree: { + noNodes: 'No nodes available', + noResults: 'No matching nodes found' + } +} diff --git a/lang/eo.js b/lang/eo.js new file mode 100644 index 00000000000..bcba0440425 --- /dev/null +++ b/lang/eo.js @@ -0,0 +1,95 @@ +export default { + isoName: 'eo', + nativeName: 'Esperanto', + label: { + clear: 'Vakigi', + ok: 'Okej', + cancel: 'Rezigni', + close: 'Fermi', + set: 'Agordi', + select: 'Elekti', + reset: 'Restartigi', + remove: 'Forigi', + update: 'Ĝisdatigi', + create: 'Krei', + search: 'Serĉi', + filter: 'Filtri', + refresh: 'Reŝargi', + expand: function (label) { return label ? `Vastigi "${label}"` : 'Vastigi' }, + collapse: function (label) { return label ? `Kolapsi "${label}"` : 'Kolapso' } + }, + date: { + days: 'Dimanĉo_Lundo_Mardo_Merkredo_Jaŭdo_Vendredo_Sabato'.split('_'), + daysShort: 'Dim_Lun_Mar_Mer_Jaŭ_Ven_Sab'.split('_'), + months: 'Januaro_Februaro_Marto_Aprilo_Majo_Junio_Julio_Aŭgusto_Septembro_Oktobro_Novembro_Decembro'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Maj_Jun_Jul_Aŭg_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'tagoj' + }, + table: { + noData: 'Neniu datumo afiŝenda', + noResults: 'Neniu datumo trovita', + loading: 'Ŝarĝado...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' ' + (rows === 1 ? 'elektita linio' : 'elektitaj linioj') + '.' + : 'Neniu elektita linio.' + }, + recordsPerPage: 'Linioj po paĝoj:', + allRows: 'Ĉiuj', + pagination: function (start, end, total) { + return start + '-' + end + ' el ' + total + }, + columns: 'Kolumnoj' + }, + editor: { + url: 'URL', + bold: 'Grasa', + italic: 'Kursiva', + strikethrough: 'Trastreka', + underline: 'Substreka', + unorderedList: 'Neordigita listo', + orderedList: 'Ordigita listo', + subscript: 'Indico', + superscript: 'Supra indico', + hyperlink: 'Ligilo', + toggleFullscreen: 'Ŝalti plenekranon', + quote: 'Citaĵo', + left: 'Ĝisrandigi maldekstren', + center: 'Centrigi', + right: 'Ĝisrandigi dekstren', + justify: 'Ĝisrandigi ambaŭflanke', + print: 'Printi', + outdent: 'Malkrommarĝenigi', + indent: 'Krommarĝenigi', + removeFormat: 'Forigi prezenton', + formatting: 'Prezento', + fontSize: 'Tipara grando', + align: 'Ĝisrandigi', + hr: 'Enmeti horizontalan strekon', + undo: 'Malfari', + redo: 'Refari', + heading1: 'Titolo 1', + heading2: 'Titolo 2', + heading3: 'Titolo 3', + heading4: 'Titolo 4', + heading5: 'Titolo 5', + heading6: 'Titolo 6', + paragraph: 'Paragrafo', + code: 'Kodo', + size1: 'Tre malgranda', + size2: 'Malgranda', + size3: 'Normala', + size4: 'Meza', + size5: 'Granda', + size6: 'Tre granda', + size7: 'Maksimuma', + defaultFont: 'Implicita tiparo', + viewSource: 'Vida Fonto' + }, + tree: { + noData: 'Neniu nodo afiŝenda', + noResults: 'Neniu nodo trovita' + } +} diff --git a/lang/es.js b/lang/es.js new file mode 100644 index 00000000000..41452e4e064 --- /dev/null +++ b/lang/es.js @@ -0,0 +1,95 @@ +export default { + isoName: 'es', + nativeName: 'Español', + label: { + clear: 'Borrar', + ok: 'OK', + cancel: 'Cancelar', + close: 'Cerrar', + set: 'Establecer', + select: 'Seleccionar', + reset: 'Restablecer', + remove: 'Eliminar', + update: 'Actualizar', + create: 'Crear', + search: 'Buscar', + filter: 'Filtrar', + refresh: 'Actualizar', + expand: function (label) { return label ? `Expandir "${label}"` : 'Expandir' }, + collapse: function (label) { return label ? `Ocultar "${label}"` : 'Colapsar' } + }, + date: { + days: 'Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado'.split('_'), + daysShort: 'Dom_Lun_Mar_Mié_Jue_Vie_Sáb'.split('_'), + months: 'Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre'.split('_'), + monthsShort: 'Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dias' + }, + table: { + noData: 'Sin datos disponibles', + noResults: 'No se han encontrado resultado', + loading: 'Cargando...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' filas seleccionadas.' + : (rows === 0 ? 'Sin' : '1') + ' fila seleccionada.' + }, + recordsPerPage: 'Filas por página:', + allRows: 'Todas', + pagination: function (start, end, total) { + return start + '-' + end + ' de ' + total + }, + columns: 'Columnas' + }, + editor: { + url: 'URL', + bold: 'Negrita', + italic: 'Itálico', + strikethrough: 'Tachado', + underline: 'Subrayado', + unorderedList: 'Lista Desordenada', + orderedList: 'Lista Ordenada', + subscript: 'Subíndice', + superscript: 'Superíndice', + hyperlink: 'Hipervínculo', + toggleFullscreen: 'Alternar pantalla completa', + quote: 'Cita', + left: 'Alineación izquierda', + center: 'Alineación centro', + right: 'Alineación derecha', + justify: 'Justificar alineación', + print: 'Imprimir', + outdent: 'Disminuir indentación', + indent: 'Aumentar indentación', + removeFormat: 'Eliminar formato', + formatting: 'Formato', + fontSize: 'Tamaño de Fuente', + align: 'Alinear', + hr: 'Insertar línea horizontal', + undo: 'Deshacer', + redo: 'Rehacer', + heading1: 'Encabezado 1', + heading2: 'Encabezado 2', + heading3: 'Encabezado 3', + heading4: 'Encabezado 4', + heading5: 'Encabezado 5', + heading6: 'Encabezado 6', + paragraph: 'Párrafo', + code: 'Código', + size1: 'Muy pequeño', + size2: 'Pequeño', + size3: 'Normal', + size4: 'Mediano', + size5: 'Grande', + size6: 'Muy grande', + size7: 'Máximo', + defaultFont: 'Fuente por defecto', + viewSource: 'Ver fuente' + }, + tree: { + noNodes: 'Sin nodos disponibles', + noResults: 'No se encontraron nodos correspondientes' + } +} diff --git a/lang/et.js b/lang/et.js new file mode 100644 index 00000000000..b8eed2805a9 --- /dev/null +++ b/lang/et.js @@ -0,0 +1,95 @@ +export default { + isoName: 'et', + nativeName: 'Eesti', + label: { + clear: 'Tühjenda', + ok: 'OK', + cancel: 'Tühista', + close: 'Sulge', + set: 'Määra', + select: 'Vali', + reset: 'Lähtesta', + remove: 'Eemalda', + update: 'Uuenda', + create: 'Loo', + search: 'Otsi', + filter: 'Filtreeri', + refresh: 'Värskenda', + expand: function (label) { return label ? `Laienda "${label}"` : 'Laienda' }, + collapse: function (label) { return label ? `Ahenda "${label}"` : 'Ahenda' } + }, + date: { + days: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'), + daysShort: 'P_E_T_K_N_R_L'.split('_'), + months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'), + monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'päeva' + }, + table: { + noData: 'Andmeid ei ole', + noResults: 'Sobivaid kirjeid ei leitud', + loading: 'Laadimine...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 kirje valitud.' + : rows + ' kirjet valitud.' + }, + recordsPerPage: 'Kirjed lehel:', + allRows: 'Kõik', + pagination: function (start, end, total) { + return start + '-' + end + ' / ' + total + }, + columns: 'Veerud' + }, + editor: { + url: 'URL', + bold: 'Rasvane', + italic: 'Kaldkiri', + strikethrough: 'Läbikriipsutatud', + underline: 'Allakriipsutatud', + unorderedList: 'Järjestamata loend', + orderedList: 'Järjestatud loend', + subscript: 'Alaindeks', + superscript: 'Ülaindeks', + hyperlink: 'Link', + toggleFullscreen: 'Täisekraan', + quote: 'Tsitaat', + left: 'Joonda vasakule', + center: 'Joonda keskele', + right: 'Joonda paremale', + justify: 'Joonda võrdselt', + print: 'Prindi', + outdent: 'Vähenda taanet', + indent: 'Suurenda taanet', + removeFormat: 'Eemalda vormindus', + formatting: 'Vormindamine', + fontSize: 'Fondi suurus', + align: 'Joonda', + hr: 'Horisontaalne joon', + undo: 'Võta tagasi', + redo: 'Tee uuesti', + heading1: 'Pealkiri 1', + heading2: 'Pealkiri 2', + heading3: 'Pealkiri 3', + heading4: 'Pealkiri 4', + heading5: 'Pealkiri 5', + heading6: 'Pealkiri 6', + paragraph: 'Lõik', + code: 'Kood', + size1: 'Väga väike', + size2: 'Natuke väike', + size3: 'Normaalne', + size4: 'Keskmiselt suur', + size5: 'Suur', + size6: 'Väga suur', + size7: 'Maksimaalne', + defaultFont: 'Vaikefont', + viewSource: 'Kuva allikas' + }, + tree: { + noNodes: 'Ühtegi sõlme pole saadaval', + noResults: 'Sobivaid sõlmi ei leitud' + } +} diff --git a/lang/eu.js b/lang/eu.js new file mode 100644 index 00000000000..c3d3699b304 --- /dev/null +++ b/lang/eu.js @@ -0,0 +1,95 @@ +export default { + isoName: 'eu', + nativeName: 'Euskara', + label: { + clear: 'Ezabatu', + ok: 'OK', + cancel: 'Ezeztatu', + close: 'Itxi', + set: 'Ezarri', + select: 'Hautatu', + reset: 'Berrezarri', + remove: 'Ezabatu', + update: 'Eguneratu', + create: 'Sortu', + search: 'Bilatu', + filter: 'Iragazi', + refresh: 'Eguneratu', + expand: function (label) { return label ? `Zabaldu "${label}"` : 'Zabaldu' }, + collapse: function (label) { return label ? `Tolestu "${label}"` : 'Tolestu' } + }, + date: { + days: 'Igandea_Astelehena_Astearte_Asteazkena_Osteguna_Ostirala_Larunbata'.split('_'), + daysShort: 'Iga_Ast_Asr_Asz_Ost_Osr_Lar'.split('_'), + months: 'Urtarrila_Otsaila_Martxoa_Apirila_Maiatza_Ekaina_Uztailea_Abuztua_Iraila_Urria_Azaroa_Abendua'.split('_'), + monthsShort: 'Urt_Ots_Mar_Api_Mai_Eka_Uzt_Abu_Ira_Urr_Aza_Abe'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'egun' + }, + table: { + noData: 'Daturik ez', + noResults: 'Ez da emaitzarik aurkitu', + loading: 'Kargatzen...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' errenkada hautatuta.' + : 'hautatutako errenkada gabe.' + }, + recordsPerPage: 'Errenkadak orrialde bakoitzeko:', + allRows: 'Denak', + pagination: function (start, end, total) { + return start + 'tik -' + end + 'ra, guztira ' + total + }, + columns: 'Zutabeak' + }, + editor: { + url: 'URL', + bold: 'Lodia', + italic: 'Italikoa', + strikethrough: 'Ezabaketa', + underline: 'Azpimarratua', + unorderedList: 'Zerrenda desordenatua', + orderedList: 'Zerrenda ordenatua', + subscript: 'Azpiindizea', + superscript: 'Superindizea', + hyperlink: 'Hiperesteka', + toggleFullscreen: 'Aldatu pantaila osoa', + quote: 'Hitzordua', + left: 'Ezkerreko lerrokadura', + center: 'Erdiko lerrokadura', + right: 'Eskubiko lerrokadura', + justify: 'Lerrokadura justifikatzea', + print: 'Inprimatu', + outdent: 'Murriztu indentazioa', + indent: 'Indentazioa areagotzea', + removeFormat: 'Ezabatu formatua', + formatting: 'Formatua', + fontSize: 'Letra-tamaina', + align: 'Lerrokatu', + hr: 'Txertatu lerro horizontala', + undo: 'Desegin', + redo: 'Berregin', + heading1: 'Goiburua 1', + heading2: 'Goiburua 2', + heading3: 'Goiburua 3', + heading4: 'Goiburua 4', + heading5: 'Goiburua 5', + heading6: 'Goiburua 6', + paragraph: 'Paragrafoa', + code: 'Kodea', + size1: 'Oso txikia', + size2: 'Txikia', + size3: 'Normala', + size4: 'Ertaina', + size5: 'Handia', + size6: 'Oso handia', + size7: 'Gehienezkoa', + defaultFont: 'Iturri lehenetsia', + viewSource: 'Ikusi iturburu-kodea' + }, + tree: { + noNodes: 'Nodo erabilgarririk gabe', + noResults: 'Ez da aurkitu dagozkion nodorik' + } +} diff --git a/lang/fa-ir.js b/lang/fa-ir.js new file mode 100644 index 00000000000..aa2bec35b95 --- /dev/null +++ b/lang/fa-ir.js @@ -0,0 +1,104 @@ +const days = 'یکشنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنجشنبه_جمعه_شنبه'.split('_') +const monthsShort = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_') + +export default { + isoName: 'fa-ir', + nativeName: 'فارسی', + rtl: true, + label: { + clear: 'پاک‌سازی', + ok: 'قبول', + cancel: 'لغو', + close: 'بستن', + set: 'ثبت', + select: 'انتخاب', + reset: 'بازنشانی', + remove: 'حذف', + update: 'بروزرسانی', + create: 'ساخت', + search: 'جستجو', + filter: 'فیلتر', + refresh: 'تازه‌سازی', + expand: function (label) { return label ? `"${label}" گسترش` : 'بسط دادن' }, + collapse: function (label) { return label ? `"${label}" کوچک کردن` : 'سقوط - فروپاشی' } + }, + date: { + days: days, + daysShort: 'ی_د_س_چ_پ_ج_ش'.split('_'), + months: 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_'), + monthsShort: monthsShort, + headerTitle: function (date, model) { + return days[ date.getDay() ] + '، ' + + model.day + ' ' + + monthsShort[ model.month - 1 ] + }, + firstDayOfWeek: 6, + format24h: true, + pluralDay: 'روز' + }, + table: { + noData: 'اطلاعاتی موجود نیست', + noResults: 'هیچ موردی یافت نشد', + loading: 'در حال بارگذاری ...', + selectedRecords: function (rows) { + return rows === 0 + ? 'رکوردی انتخاب نشده' + : rows + ' رکورد انتخاب شده' + }, + recordsPerPage: 'رکورد در صفحه:', + allRows: 'همه', + pagination: function (start, end, total) { + return start + '-' + end + ' از ' + total + }, + columns: 'ستون' + }, + editor: { + url: 'آدرس', + bold: 'ضخیم', + italic: 'کج', + strikethrough: 'خط‌خورده', + underline: 'زیرخط', + unorderedList: 'فهرست غیرترتیبی', + orderedList: 'فهرست ترتیبی', + subscript: 'زیرنویس', + superscript: 'بالانویس', + hyperlink: 'پیوند', + toggleFullscreen: 'تغییر حالت تمام صفحه', + quote: 'نقل قول', + left: 'چپ تراز', + center: 'وسط تراز', + right: 'راست تراز', + justify: 'هم‌تراز', + print: 'چاپ', + outdent: 'کاهش دندانه', + indent: 'افزایش دندانه', + removeFormat: 'حذف قالب‌بندی', + formatting: 'قالب‌بندی', + fontSize: 'اندازه قلم', + align: 'تراز', + hr: 'درج خط افقی', + undo: 'عمل قبلی', + redo: 'عملی بعدی', + heading1: 'سرفصل ۱', + heading2: 'سرفصل ۲', + heading3: 'سرفصل ۳', + heading4: 'سرفصل ۴', + heading5: 'سرفصل ۵', + heading6: 'سرفصل ۶', + paragraph: 'پاراگراف', + code: 'کد', + size1: 'خیلی کوچک', + size2: 'کوچک', + size3: 'معمولی', + size4: 'متوسط-بزرگ', + size5: 'بزرگ', + size6: 'خیلی بزرگ', + size7: 'بزرگترین', + defaultFont: 'قلم پیش‌فرض', + viewSource: 'مشاهده منبع' + }, + tree: { + noNodes: 'گره‌ای در دسترس نیست', + noResults: 'گره‌ای یافت نشد' + } +} diff --git a/lang/fa.js b/lang/fa.js new file mode 100644 index 00000000000..470a2308025 --- /dev/null +++ b/lang/fa.js @@ -0,0 +1,104 @@ +const days = 'یکشنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنجشنبه_جمعه_شنبه'.split('_') +const monthsShort = 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_') + +export default { + isoName: 'fa', + nativeName: 'فارسی', + rtl: true, + label: { + clear: 'پاک‌سازی', + ok: 'قبول', + cancel: 'لغو', + close: 'بستن', + set: 'ثبت', + select: 'انتخاب', + reset: 'بازنشانی', + remove: 'حذف', + update: 'بروزرسانی', + create: 'ساخت', + search: 'جستجو', + filter: 'فیلتر', + refresh: 'تازه‌سازی', + expand: function (label) { return label ? `"${label}" گسترش` : 'بسط دادن' }, + collapse: function (label) { return label ? `"${label}" کوچک کردن` : 'سقوط - فروپاشی' } + }, + date: { + days: days, + daysShort: 'ی_د_س_چ_پ_ج_ش'.split('_'), + months: 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'.split('_'), + monthsShort: monthsShort, + headerTitle: function (date, model) { + return days[ date.getDay() ] + '، ' + + model.day + ' ' + + monthsShort[ model.month - 1 ] + }, + firstDayOfWeek: 6, + format24h: true, + pluralDay: 'روز' + }, + table: { + noData: 'اطلاعاتی موجود نیست', + noResults: 'هیچ موردی یافت نشد', + loading: 'در حال بارگذاری ...', + selectedRecords: function (rows) { + return rows === 0 + ? 'رکوردی انتخاب نشده' + : rows + ' رکورد انتخاب شده' + }, + recordsPerPage: 'رکورد در صفحه:', + allRows: 'همه', + pagination: function (start, end, total) { + return start + '-' + end + ' از ' + total + }, + columns: 'ستون' + }, + editor: { + url: 'آدرس', + bold: 'کلفت', + italic: 'کج', + strikethrough: 'خط‌خورده', + underline: 'زیرخط', + unorderedList: 'فهرست غیرترتیبی', + orderedList: 'فهرست ترتیبی', + subscript: 'زیرنویس', + superscript: 'بالانویس', + hyperlink: 'پیوند', + toggleFullscreen: 'تغییر حالت تمام صفحه', + quote: 'نقل قول', + left: 'چپ تراز', + center: 'وسط تراز', + right: 'راست تراز', + justify: 'هم‌تراز', + print: 'چاپ', + outdent: 'کاهش دندانه', + indent: 'افزایش دندانه', + removeFormat: 'حذف قالب‌بندی', + formatting: 'قالب‌بندی', + fontSize: 'اندازه قلم', + align: 'تراز', + hr: 'درج خط افقی', + undo: 'عمل قبلی', + redo: 'عملی بعدی', + heading1: 'سرفصل ۱', + heading2: 'سرفصل ۲', + heading3: 'سرفصل ۳', + heading4: 'سرفصل ۴', + heading5: 'سرفصل ۵', + heading6: 'سرفصل ۶', + paragraph: 'پاراگراف', + code: 'کد', + size1: 'خیلی کوچک', + size2: 'کوچک', + size3: 'معمولی', + size4: 'متوسط-بزرگ', + size5: 'بزرگ', + size6: 'خیلی بزرگ', + size7: 'بزرگترین', + defaultFont: 'قلم پیش‌فرض', + viewSource: 'مشاهده منبع' + }, + tree: { + noNodes: 'گره‌ای در دسترس نیست', + noResults: 'گره‌ای یافت نشد' + } +} diff --git a/lang/fi.js b/lang/fi.js new file mode 100644 index 00000000000..7e6e53a0386 --- /dev/null +++ b/lang/fi.js @@ -0,0 +1,100 @@ +export default { + isoName: 'fi', + nativeName: 'Suomi', + label: { + clear: 'Tyhjennä', + ok: 'OK', + cancel: 'Peruuta', + close: 'Sulje', + set: 'Aseta', + select: 'Valitse', + reset: 'Resetoi', + remove: 'Poista', + update: 'Päivitä', + create: 'Luo', + search: 'Etsi', + filter: 'Suodata', + refresh: 'Päivitä', + expand: function (label) { return label ? `Laajenna "${label}"` : 'Laajentaa' }, + collapse: function (label) { return label ? `Tiivistä "${label}"` : 'Romahdus' } + }, + date: { + days: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'), + daysShort: 'su_ma_ti_ke_to_pe_la'.split('_'), + months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'), + monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'päivää' + }, + pullToRefresh: { + pull: 'Vedä alas päivittääksesi', + release: 'Vapauta päivittääksesi', + refresh: 'Päivitetään...' + }, + table: { + noData: 'Ei tietoja', + noResults: 'Ei tuloksia', + loading: 'Ladataan...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 rivi valittu.' + : rows + ' riviä valittu.' + }, + recordsPerPage: 'Rivejä sivulla:', + allRows: 'Kaikki', + pagination: function (start, end, total) { + return start + '-' + end + ' / ' + total + }, + columns: 'Sarakkeet' + }, + editor: { + url: 'URL', + bold: 'Lihavoitu', + italic: 'Kursivoitu', + strikethrough: 'Yliviivattu', + underline: 'Alleviivattu', + unorderedList: 'Järjestämätön Lista', + orderedList: 'Järjestetty Lista', + subscript: 'Alaindeksi', + superscript: 'Yläindeksi', + hyperlink: 'Hyperlinkki', + toggleFullscreen: 'Vaihda näyttötilaa', + quote: 'Lainaus', + left: 'Asettele vasemmalle', + center: 'Asettele keskelle', + right: 'Asettele oikealle', + justify: 'Asettele tasaten', + print: 'Tulosta', + outdent: 'Vähennä sisennystä', + indent: 'Kasvata sisennystä', + removeFormat: 'Poista muotoilu', + formatting: 'Muotoilu', + fontSize: 'Fonttikoko', + align: 'Asettelu', + hr: 'Lisää erotin', + undo: 'Kumoa', + redo: 'Toista', + heading1: 'Otsikko 1', + heading2: 'Otsikko 2', + heading3: 'Otsikko 3', + heading4: 'Otsikko 4', + heading5: 'Otsikko 5', + heading6: 'Otsikko 6', + paragraph: 'Kappale', + code: 'Koodi', + size1: 'Erittäin pieni', + size2: 'Pieni', + size3: 'Normaali', + size4: 'Isompi', + size5: 'Iso', + size6: 'Erittäin iso', + size7: 'Maksimi', + defaultFont: 'Oletusfontti', + viewSource: 'Katso lähde' + }, + tree: { + noNodes: 'Ei solmuja saatavilla', + noResults: 'Ei vastaavia solmuja' + } +} diff --git a/lang/fr.js b/lang/fr.js new file mode 100644 index 00000000000..7a34e5e3ce4 --- /dev/null +++ b/lang/fr.js @@ -0,0 +1,100 @@ +export default { + isoName: 'fr', + nativeName: 'Français', + label: { + clear: 'Effacer', + ok: 'OK', + cancel: 'Annuler', + close: 'Fermer', + set: 'Régler', + select: 'Sélectionner', + reset: 'Réinitialiser', + remove: 'Supprimer', + update: 'Mettre à jour', + create: 'Créer', + search: 'Rechercher', + filter: 'Filtrer', + refresh: 'Rafraîchir', + expand: function (label) { return label ? `Développer "${label}"` : 'Développer' }, + collapse: function (label) { return label ? `Réduire "${label}"` : 'Effondrement' } + }, + date: { + days: 'Dimanche_Lundi_Mardi_Mercredi_Jeudi_Vendredi_Samedi'.split('_'), + daysShort: 'Dim_Lun_Mar_Mer_Jeu_Ven_Sam'.split('_'), + months: 'Janvier_Février_Mars_Avril_Mai_Juin_Juillet_Août_Septembre_Octobre_Novembre_Décembre'.split('_'), + monthsShort: 'Jan_Fev_Mar_Avr_Mai_Juin_Jui_Aou_Sep_Oct_Nov_Dec'.split('_'), + headerTitle: function (date) { + return new Intl.DateTimeFormat('fr', { + weekday: 'short', day: 'numeric', month: 'short' + }).format(date) + }, + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'jours' + }, + table: { + noData: 'Aucune donnée à afficher', + noResults: 'Aucune donnée trouvée', + loading: 'Chargement...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' ' + (rows === 1 ? 'ligne sélectionnée' : 'lignes sélectionnées') + '.' + : 'Aucune ligne sélectionnée.' + }, + recordsPerPage: 'Lignes par page :', + allRows: 'Tous', + pagination: function (start, end, total) { + return start + '-' + end + ' sur ' + total + }, + columns: 'Colonnes' + }, + editor: { + url: 'URL', + bold: 'Gras', + italic: 'Italique', + strikethrough: 'Barré', + underline: 'Souligné', + unorderedList: 'Liste non ordonnée', + orderedList: 'Liste ordonnée', + subscript: 'Indice', + superscript: 'Exposant', + hyperlink: 'Hyperlien', + toggleFullscreen: 'Basculer en plein écran', + quote: 'Citation', + left: 'Aligner à gauche', + center: 'Aligner au centre', + right: 'Aligner à droite', + justify: 'Justifier', + print: 'Imprimer', + outdent: "Diminuer l'indentation", + indent: "Augmenter l'indentation", + removeFormat: 'Supprimer la mise en forme', + formatting: 'Mise en forme', + fontSize: 'Taille de police', + align: 'Aligner', + hr: 'Insérer une règle horizontale', + undo: 'Annuler', + redo: 'Refaire', + heading1: 'Titre 1', + heading2: 'Titre 2', + heading3: 'Titre 3', + heading4: 'Titre 4', + heading5: 'Titre 5', + heading6: 'Titre 6', + paragraph: 'Paragraphe', + code: 'Code', + size1: 'Très petit', + size2: 'Petit', + size3: 'Normal', + size4: 'Moyenne', + size5: 'Grand', + size6: 'Très grand', + size7: 'Maximum', + defaultFont: 'Police par défaut', + viewSource: 'Voir la source' + }, + tree: { + noData: 'Aucun nœud à afficher', + noResults: 'Aucun nœud trouvé' + } +} diff --git a/lang/gn.js b/lang/gn.js new file mode 100644 index 00000000000..0fccd3b226f --- /dev/null +++ b/lang/gn.js @@ -0,0 +1,95 @@ +export default { + isoName: 'gn', + nativeName: 'Avañe\'ẽ', + label: { + clear: 'Mbogue', + ok: 'OĨma', + cancel: 'Cancelar', + close: 'Mboty', + set: 'Mohenda', + select: 'Poravo', + reset: 'MoĨ jey', + remove: 'Juka', + update: 'Actualisa', + create: 'Japo', + search: 'Heka', + filter: 'Mbogua', + refresh: 'Actualisa', + expand: function (label) { return label ? `Oñembotuichave "${label}"` : 'Myasãi' }, + collapse: function (label) { return label ? `Omboguejy "${label}"` : 'Ñembyaipa' } + }, + date: { + days: 'Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado'.split('_'), + daysShort: 'Dom_Lun_Mar_Mié_Jue_Vie_Sáb'.split('_'), + months: 'Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre'.split('_'), + monthsShort: 'Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'ára' + }, + table: { + noData: 'Ni peteĨ mba\'e', + noResults: 'Ni peteĨ resultado', + loading: 'Era\'arõ...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' fila selesionada.' + : (rows === 0 ? 'Sin' : '1') + ' fila selesionada.' + }, + recordsPerPage: 'Fila por páhina:', + allRows: 'Entero', + pagination: function (start, end, total) { + return start + '-' + end + ' de ' + total + }, + columns: 'Columnakuéra' + }, + editor: { + url: 'URL', + bold: 'Negrita', + italic: 'Kursíva', + strikethrough: 'Tachado', + underline: 'Subrayado', + unorderedList: 'Lista Desordenada', + orderedList: 'Lista Ordenada', + subscript: 'Subíndice', + superscript: 'Superíndice', + hyperlink: 'Hipervínculo', + toggleFullscreen: 'Pantalla kompléta', + quote: 'Cita', + left: 'Alineación izquierda', + center: 'Alineación centro', + right: 'Alineación derecha', + justify: 'Justificar alineación', + print: 'Imprimir', + outdent: 'Disminuir indentación', + indent: 'Aumentar indentación', + removeFormat: 'Eliminar formato', + formatting: 'Formato', + fontSize: 'Tamaño de Fuente', + align: 'Alinear', + hr: 'Insertar línea horizontal', + undo: 'Deshacer', + redo: 'Rehacer', + heading1: 'Encabezado 1', + heading2: 'Encabezado 2', + heading3: 'Encabezado 3', + heading4: 'Encabezado 4', + heading5: 'Encabezado 5', + heading6: 'Encabezado 6', + paragraph: 'Párrafo', + code: 'Código', + size1: 'Muy pequeño', + size2: 'Pequeño', + size3: 'Normal', + size4: 'Mediano', + size5: 'Grande', + size6: 'Muy grande', + size7: 'Máximo', + defaultFont: 'Fuente por defecto', + viewSource: 'View Source' + }, + tree: { + noNodes: 'Sin nodos disponibles', + noResults: 'No se encontraron nodos correspondientes' + } +} diff --git a/lang/he.js b/lang/he.js new file mode 100644 index 00000000000..e345305cef8 --- /dev/null +++ b/lang/he.js @@ -0,0 +1,96 @@ +export default { + isoName: 'he', + nativeName: 'עברית', + rtl: true, + label: { + clear: 'נקה', + ok: 'אישור', + cancel: 'ביטול', + close: 'סגור', + set: 'הגדר', + select: 'בחר', + reset: 'איפוס', + remove: 'מחק', + update: 'עדכן', + create: 'צור', + search: 'חיפוש', + filter: 'סינון', + refresh: 'רענון', + expand: function (label) { return label ? `"${label}" הרחב את` : 'לְהַרְחִיב' }, + collapse: function (label) { return label ? `"${label}" כווץ` : 'הִתמוֹטְטוּת' } + }, + date: { + days: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'), + daysShort: 'א_ב_ג_ד_ה_ו_ש'.split('_'), + months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), + monthsShort: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'), + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'ימים' + }, + table: { + noData: 'לא נמצאו נתונים', + noResults: 'לא נמצאו תוצאות רלוונטיות', + loading: 'טוען...', + selectedRecords: function (rows) { + return rows === 1 + ? 'נבחרה שורה אחת.' + : (rows === 0 ? 'לא' : rows) + ' שורות נבחרו' + }, + recordsPerPage: 'שורות בעמוד:', + allRows: 'הכל', + pagination: function (start, end, total) { + return start + '-' + end + ' מתוך ' + total + }, + columns: 'עמודות' + }, + editor: { + url: 'כתובת אתר', + bold: 'בולט', + italic: 'נטוי', + strikethrough: 'קו חוצה', + underline: 'קו תחתון', + unorderedList: 'רשימת תבליטים', + orderedList: 'רשימה ממוספרת', + subscript: 'קו תחתון', + superscript: 'קו עליון', + hyperlink: 'קישור', + toggleFullscreen: 'מסך מלא', + quote: 'ציטוט', + left: 'יישור לשמאל', + center: 'יישור למרכז', + right: 'יישור לימין', + justify: 'יישור', + print: 'הדפסה', + outdent: 'הקטן כניסה', + indent: 'הגדל כניסה', + removeFormat: 'נקה עיתוב', + formatting: 'עיצוב', + fontSize: 'גודל פונט', + align: 'יישור', + hr: 'הוסף קו אופקי', + undo: 'בטל', + redo: 'בצע מחדש', + heading1: 'כותרת 1', + heading2: 'כותרת 2', + heading3: 'כותרת 3', + heading4: 'כותרת 4', + heading5: 'כותרת 5', + heading6: 'כותרת 6', + paragraph: 'פסקה', + code: 'קטע קוד', + size1: 'קטן מאוד', + size2: 'קטן', + size3: 'נורמלי', + size4: 'בינוני-גדול', + size5: 'גדול', + size6: 'גדול מאוד', + size7: 'מקסימלי', + defaultFont: 'ברירת מחדל', + viewSource: 'ראה מקור' + }, + tree: { + noNodes: 'אין פריטים להצגה', + noResults: 'לא נמצאו פריטים רלוונטים' + } +} diff --git a/lang/hr.js b/lang/hr.js new file mode 100644 index 00000000000..4e821ad0022 --- /dev/null +++ b/lang/hr.js @@ -0,0 +1,95 @@ +export default { + isoName: 'hr', + nativeName: 'Hrvatski jezik', + label: { + clear: 'Očisti', + ok: 'OK', + cancel: 'Odustani', + close: 'Zatvori', + set: 'Postavi', + select: 'Izaberi', + reset: 'Poništi', + remove: 'Ukloni', + update: 'Ažuriraj', + create: 'Dodaj', + search: 'Traži', + filter: 'Filter', + refresh: 'Osvježi', + expand: function (label) { return label ? `Proširi "${label}"` : 'Proširiti' }, + collapse: function (label) { return label ? `Sažmi "${label}"` : 'Kolaps' } + }, + date: { + days: 'Nedjelja_Ponedjeljak_Utorak_Srijeda_Četvrtak_Petak_Subota'.split('_'), + daysShort: 'Ned_Pon_Uto_Sri_Čet_Pet_Sub'.split('_'), + months: 'Siječanj_Veljača_Ožujak_Travanj_Svibanj_Lipanj_Srpanj_Kolovoz_Rujan_Listopad_Studeni_Prosinac'.split('_'), + monthsShort: 'Sij_Velj_Ožu_Tra_Svi_Lip_Srp_Kol_Ruj_Lis_Stu_Pro'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dana' + }, + table: { + noData: 'Nema podataka', + noResults: 'Nema odgovarajućih zapisa', + loading: 'Učitavanje...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' izabranih redova.' + : (rows === 0 ? 'Nema' : '1') + ' izabranih redova.' + }, + recordsPerPage: 'Redova po stranici:', + allRows: 'Sve', + pagination: function (start, end, total) { + return start + '-' + end + ' od ' + total + }, + columns: 'Stupci' + }, + editor: { + url: 'URL', + bold: 'Podebljano', + italic: 'Nakošeno', + strikethrough: 'Precrtano', + underline: 'Podcrtano', + unorderedList: 'Označena lista', + orderedList: 'Numerirana lista', + subscript: 'Potpisano', + superscript: 'Natpisano', + hyperlink: 'Hiperlink', + toggleFullscreen: 'Puni zaslon', + quote: 'Citat', + left: 'Poravnati ulijevo', + center: 'Centrirati', + right: 'Poravnati udesno', + justify: 'Poravnati obostrano', + print: 'Ispis', + outdent: 'Smanjiti uvlačenje', + indent: 'Povećati uvlačenje', + removeFormat: 'Ukloniti formatiranje', + formatting: 'Formatirati', + fontSize: 'Veličina slova', + align: 'Poravnati', + hr: 'Ubaciti vodoravno ravnalo', + undo: 'Poništiti', + redo: 'Vratiti', + heading1: 'Naslov 1', + heading2: 'Naslov 2', + heading3: 'Naslov 3', + heading4: 'Naslov 4', + heading5: 'Naslov 5', + heading6: 'Naslov 6', + paragraph: 'Odlomak', + code: 'Kod', + size1: 'Vrlo malo', + size2: 'Malo manje', + size3: 'Normalno', + size4: 'Srednje', + size5: 'Veliko', + size6: 'Vrlo veliko', + size7: 'Nejveće', + defaultFont: 'Zadani font', + viewSource: 'Pogledaj izvor' + }, + tree: { + noNodes: 'Nema nijednog čvora', + noResults: 'Nema odgovarajućih čvorova' + } +} diff --git a/lang/hu.js b/lang/hu.js new file mode 100644 index 00000000000..bf23fe78aa2 --- /dev/null +++ b/lang/hu.js @@ -0,0 +1,95 @@ +export default { + isoName: 'hu', + nativeName: 'Magyar', + label: { + clear: 'Törlés', + ok: 'OK', + cancel: 'Mégsem', + close: 'Bezárás', + set: 'Beállítás', + select: 'Kiválasztás', + reset: 'Visszaállítás', + remove: 'Eltávolítás', + update: 'Módosítás', + create: 'Létrehozás', + search: 'Keresés', + filter: 'Szűrés', + refresh: 'Frissítés', + expand: function (label) { return label ? `A "${label}" kiterjesztése` : 'Kiterjed' }, + collapse: function (label) { return label ? `A "${label}" összecsukása` : 'Összeomlás' } + }, + date: { + days: 'Vasárnap_Hétfő_Kedd_Szerda_Csütörtök_Péntek_Szombat'.split('_'), + daysShort: 'Vas_Hét_Ke_Sze_Csü_Pén_Szo'.split('_'), + months: 'Január_Február_Március_Április_Május_Június_Július_Augusztus_Szeptember_Október_November_December'.split('_'), + monthsShort: 'Jan_Feb_Már_Ápr_Máj_Jún_Júl_Aug_Szep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'nap' + }, + table: { + noData: 'Nincs elérhető adat', + noResults: 'Nincsenek egyező találatok', + loading: 'Betöltés...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 kiválasztott elem.' + : (rows === 0 ? 'Nincs' : rows) + ' kiválasztott elem.' + }, + recordsPerPage: 'Elemek száma oldalanként:', + allRows: 'Összes', + pagination: function (start, end, total) { + return start + '-' + end + ' / ' + total + }, + columns: 'Oszlopok' + }, + editor: { + url: 'URL', + bold: 'Félkövér', + italic: 'Dőlt', + strikethrough: 'Áthúzott', + underline: 'Aláhúzott', + unorderedList: 'Felsorolás', + orderedList: 'Számozás', + subscript: 'Alsó index', + superscript: 'Felső index', + hyperlink: 'Hivatkozás', + toggleFullscreen: 'Teljes képernyő', + quote: 'Idézet', + left: 'Balra igazítás', + center: 'Középre igazítás', + right: 'Jobbra igazítás', + justify: 'Sorkizárás', + print: 'Nyomtatás', + outdent: 'Behúzás csökkentése', + indent: 'Behúzás növelése', + removeFormat: 'Formázás törlése', + formatting: 'Formázás', + fontSize: 'Betűméret', + align: 'Igazítás', + hr: 'Vízszintes elválasztó beillesztése', + undo: 'Visszavonás', + redo: 'Mégis', + heading1: 'Címsor 1', + heading2: 'Címsor 2', + heading3: 'Címsor 3', + heading4: 'Címsor 4', + heading5: 'Címsor 5', + heading6: 'Címsor 6', + paragraph: 'Paragrafus', + code: 'Kód', + size1: 'Nagyon kicsi', + size2: 'Kicsi', + size3: 'Normál', + size4: 'Közepesen nagy', + size5: 'Nagy', + size6: 'Nagyon nagy', + size7: 'Maximális', + defaultFont: 'Alapértelmezett betűtípus', + viewSource: 'Forrás megtekintése' + }, + tree: { + noNodes: 'Nincsenek elérhető elemek', + noResults: 'Nincsenek egyező találatok' + } +} diff --git a/lang/id.js b/lang/id.js new file mode 100644 index 00000000000..c9ed6245362 --- /dev/null +++ b/lang/id.js @@ -0,0 +1,95 @@ +export default { + isoName: 'id', + nativeName: 'Bahasa Indonesia', + label: { + clear: 'Bersihkan', + ok: 'OK', + cancel: 'Batal', + close: 'Tutup', + set: 'Set', + select: 'Pilih', + reset: 'Reset', + remove: 'Copot', + update: 'Perbarui', + create: 'Buat', + search: 'Cari', + filter: 'Saring', + refresh: 'Segarkan', + expand: function (label) { return label ? `Perluas "${label}"` : 'Mengembangkan' }, + collapse: function (label) { return label ? `Ciutkan "${label}"` : 'Jatuh' } + }, + date: { + days: 'Minggu_Senin_Selasa_Rabu_Kamis_Jum\'at_Sabtu'.split('_'), + daysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'), + months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'hari' + }, + table: { + noData: 'Tidak ada data tersedia', + noResults: 'Tidak ada yang cocok', + loading: 'Memuat...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' baris terpilih.' + : (rows === 0 ? 'tidak ada' : '1') + ' baris terpilih.' + }, + recordsPerPage: 'Baris per halaman:', + allRows: 'Semua', + pagination: function (start, end, total) { + return start + '-' + end + ' dari ' + total + }, + columns: 'Kolom' + }, + editor: { + url: 'URL', + bold: 'Tebal', + italic: 'Miring', + strikethrough: 'Coret', + underline: 'Garis Bawah', + unorderedList: 'Daftar tak Tersusun', + orderedList: 'Daftar Tersusun', + subscript: 'Subscript', + superscript: 'Superscript', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Alihkan Layar Penuh', + quote: 'Kutip', + left: 'Rata Kiri', + center: 'Rata Tengah', + right: 'Rata Kanan', + justify: 'Rata Sisi', + print: 'Cetak', + outdent: 'Kurangi Indentasi', + indent: 'Tambah indentasi', + removeFormat: 'Hilangkan Pemformatan', + formatting: 'Pemformatan', + fontSize: 'Ukuran Huruf', + align: 'Rata', + hr: 'Masukkan Aturan Horizontal', + undo: 'Urungkan', + redo: 'Ulangi', + heading1: 'Heading 1', + heading2: 'Heading 2', + heading3: 'Heading 3', + heading4: 'Heading 4', + heading5: 'Heading 5', + heading6: 'Heading 6', + paragraph: 'Paragraf', + code: 'Kode', + size1: 'Sangat Kecil', + size2: 'Agak Kecil', + size3: 'Normal', + size4: 'Agak Besar', + size5: 'Besar', + size6: 'Sangat Besar', + size7: 'Maksimum', + defaultFont: 'Huruf Bawaan', + viewSource: 'Lihat sumber' + }, + tree: { + noNodes: 'Tak ada node tersedia', + noResults: 'Tak ditemukan node yang cocok' + } +} diff --git a/lang/index.json b/lang/index.json new file mode 100644 index 00000000000..5075784eb6e --- /dev/null +++ b/lang/index.json @@ -0,0 +1,234 @@ +[ + { + "isoName": "ar", + "nativeName": "العربية" + }, + { + "isoName": "az-latn", + "nativeName": "Azerbaijani (latin)" + }, + { + "isoName": "bg", + "nativeName": "български език" + }, + { + "isoName": "ca", + "nativeName": "Català" + }, + { + "isoName": "cs", + "nativeName": "Čeština" + }, + { + "isoName": "da", + "nativeName": "Dansk" + }, + { + "isoName": "de", + "nativeName": "Deutsch" + }, + { + "isoName": "el", + "nativeName": "ελληνικά" + }, + { + "isoName": "en-gb", + "nativeName": "English (UK)" + }, + { + "isoName": "en-us", + "nativeName": "English (US)" + }, + { + "isoName": "eo", + "nativeName": "Esperanto" + }, + { + "isoName": "es", + "nativeName": "Español" + }, + { + "isoName": "et", + "nativeName": "Eesti" + }, + { + "isoName": "eu", + "nativeName": "Euskara" + }, + { + "isoName": "fa-ir", + "nativeName": "فارسی" + }, + { + "isoName": "fa", + "nativeName": "فارسی" + }, + { + "isoName": "fi", + "nativeName": "Suomi" + }, + { + "isoName": "fr", + "nativeName": "Français" + }, + { + "isoName": "gn", + "nativeName": "Avañe'ẽ" + }, + { + "isoName": "he", + "nativeName": "עברית" + }, + { + "isoName": "hr", + "nativeName": "Hrvatski jezik" + }, + { + "isoName": "hu", + "nativeName": "Magyar" + }, + { + "isoName": "id", + "nativeName": "Bahasa Indonesia" + }, + { + "isoName": "is", + "nativeName": "Íslenska" + }, + { + "isoName": "it", + "nativeName": "Italiano" + }, + { + "isoName": "ja", + "nativeName": "日本語 (にほんご)" + }, + { + "isoName": "km", + "nativeName": "ខ្មែរ" + }, + { + "isoName": "ko-kr", + "nativeName": "한국어" + }, + { + "isoName": "kur-ckb", + "nativeName": "کوردی سۆرانی" + }, + { + "isoName": "kz", + "nativeName": "Қазақша" + }, + { + "isoName": "lu", + "nativeName": "Kiluba" + }, + { + "isoName": "lv", + "nativeName": "Latviešu valoda" + }, + { + "isoName": "ml", + "nativeName": "മലയാളം" + }, + { + "isoName": "mm", + "nativeName": "မြန်မာ(ဗမာ)" + }, + { + "isoName": "ms", + "nativeName": "Bahasa Melayu" + }, + { + "isoName": "my", + "nativeName": "Malaysia" + }, + { + "isoName": "nb-no", + "nativeName": "Norsk" + }, + { + "isoName": "nl", + "nativeName": "Nederlands" + }, + { + "isoName": "pl", + "nativeName": "Polski" + }, + { + "isoName": "pt-br", + "nativeName": "Português (BR)" + }, + { + "isoName": "pt", + "nativeName": "Português" + }, + { + "isoName": "ro", + "nativeName": "Română" + }, + { + "isoName": "ru", + "nativeName": "русский" + }, + { + "isoName": "sk", + "nativeName": "Slovenčina" + }, + { + "isoName": "sl", + "nativeName": "Slovenski Jezik" + }, + { + "isoName": "sm", + "nativeName": "Fa'asāmoa" + }, + { + "isoName": "sr", + "nativeName": "srpski jezik" + }, + { + "isoName": "sv", + "nativeName": "Svenska" + }, + { + "isoName": "ta", + "nativeName": "தமிழ்" + }, + { + "isoName": "th", + "nativeName": "ไทย" + }, + { + "isoName": "tr", + "nativeName": "Türkçe" + }, + { + "isoName": "ug", + "nativeName": "ئۇيغۇرچە" + }, + { + "isoName": "uk", + "nativeName": "Українська" + }, + { + "isoName": "uz-Cyrl", + "nativeName": "Ўзбекча (Кирил)" + }, + { + "isoName": "uz-Latn", + "nativeName": "O'zbekcha (Lotin)" + }, + { + "isoName": "vi", + "nativeName": "Tiếng Việt" + }, + { + "isoName": "zh-hans", + "nativeName": "中文(简体)" + }, + { + "isoName": "zh-hant", + "nativeName": "中文(繁體)" + } +] \ No newline at end of file diff --git a/lang/is.js b/lang/is.js new file mode 100644 index 00000000000..717f365f620 --- /dev/null +++ b/lang/is.js @@ -0,0 +1,95 @@ +export default { + isoName: 'is', + nativeName: 'Íslenska', + label: { + clear: 'Hreinsa', + ok: 'Ókei', + cancel: 'Hætta við', + close: 'Loka', + set: 'Setja', + select: 'Velja', + reset: 'Endurstilla', + remove: 'Fjarlægja', + update: 'Uppfæra', + create: 'Búa til', + search: 'Leita', + filter: 'Sía', + refresh: 'Endurhlaða', + expand: function (label) { return label ? `Stækka "${label}"` : 'Stækkaðu' }, + collapse: function (label) { return label ? `Draga saman "${label}"` : 'Hrun' } + }, + date: { + days: 'Sunnudagur_Mánudagur_Þriðjudagur_Miðvikudagur_Fimmtudagur_Föstudagur_Laugardagur'.split('_'), + daysShort: 'Sun_Mán_Þri_Mið_Fim_Fös_Lau'.split('_'), + months: 'Janúar_Febrúar_Mars_Apríl_Maí_Júní_Júlí_Ágúst_September_Október_Nóvember_Desember'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Maí_Jún_Júl_Ágú_Sep_Okt_Nóv_Des'.split('_'), + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dagar' + }, + table: { + noData: 'Engin gögn tiltæk', + noResults: 'Engar samsvarandi skrár fundust', + loading: 'Augnablik...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 færsla valin.' + : (rows === 0 ? 'Engar' : rows) + ' færslur valdar.' + }, + recordsPerPage: 'Færslur á hverri síðu:', + allRows: 'Allar', + pagination: function (start, end, total) { + return start + '-' + end + ' af ' + total + }, + columns: 'Dálkar' + }, + editor: { + url: 'Slóð', + bold: 'Feitletra', + italic: 'Skáletra', + strikethrough: 'Strika í gegnum', + underline: 'Undirstrika', + unorderedList: 'Óraðaður listi', + orderedList: 'Raðaður listi', + subscript: 'Hnéletur', + superscript: 'Brjóstletur', + hyperlink: 'Hlekkur', + toggleFullscreen: 'Fullskjár af/á', + quote: 'Tilvitnun', + left: 'Vinstrijafna', + center: 'Miðjujafna', + right: 'Hægrijafna', + justify: 'Jafna', + print: 'Prenta', + outdent: 'Minnka inndrátt', + indent: 'Auka inndrátt', + removeFormat: 'Hreinsa snið', + formatting: 'Snið', + fontSize: 'Leturstærð', + align: 'Jafna', + hr: 'Lárétt lína', + undo: 'Afturkalla', + redo: 'Endurgera', + heading1: 'Fyrirsögn 1', + heading2: 'Fyrirsögn 2', + heading3: 'Fyrirsögn 3', + heading4: 'Fyrirsögn 4', + heading5: 'Fyrirsögn 5', + heading6: 'Fyrirsögn 6', + paragraph: 'Efnisgrein', + code: 'Kóði', + size1: 'Mjög lítill', + size2: 'Dálítið lítill', + size3: 'Venjulegur', + size4: 'Miðlungsstór', + size5: 'Stór', + size6: 'Mjög stór', + size7: 'Risastór', + defaultFont: 'Sjálfgefið letur', + viewSource: 'Sjá kóða' + }, + tree: { + noNodes: 'Engar nóður í boði', + noResults: 'Engar samsvarandi nóður fundust' + } +} diff --git a/lang/it.js b/lang/it.js new file mode 100644 index 00000000000..916a4ef9332 --- /dev/null +++ b/lang/it.js @@ -0,0 +1,95 @@ +export default { + isoName: 'it', + nativeName: 'Italiano', + label: { + clear: 'Pulisci', + ok: 'OK', + cancel: 'Annulla', + close: 'Chiudi', + set: 'Imposta', + select: 'Seleziona', + reset: 'Ripristina', + remove: 'Rimuovi', + update: 'Aggiorna', + create: 'Crea', + search: 'Cerca', + filter: 'Filtra', + refresh: 'Aggiorna', + expand: function (label) { return label ? `Espandi "${label}"` : 'Espandere' }, + collapse: function (label) { return label ? `Comprimi "${label}"` : 'Crollo' } + }, + date: { + days: 'Domenica_Lunedì_Martedì_Mercoledì_Giovedì_Venerdì_Sabato'.split('_'), + daysShort: 'Dom_Lun_Mar_Mer_Gio_Ven_Sab'.split('_'), + months: 'Gennaio_Febbraio_Marzo_Aprile_Maggio_Giugno_Luglio_Agosto_Settembre_Ottobre_Novembre_Dicembre'.split('_'), + monthsShort: 'Gen_Feb_Mar_Apr_Mag_Giu_Lug_Ago_Set_Ott_Nov_Dic'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'giorni' + }, + table: { + noData: 'Nessun dato disponibile', + noResults: 'Nessuna corrispondenza trovata', + loading: 'Caricamento...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' ' + (rows === 1 ? 'riga selezionata' : 'righe selezionate') + '.' + : 'Nessuna riga selezionata.' + }, + recordsPerPage: 'Righe per pagina:', + allRows: 'Tutte', + pagination: function (start, end, total) { + return start + '-' + end + ' di ' + total + }, + columns: 'Colonne' + }, + editor: { + url: 'URL', + bold: 'Grassetto', + italic: 'Corsivo', + strikethrough: 'Barrato', + underline: 'Sottolineato', + unorderedList: 'Lista non ordinata', + orderedList: 'Lista ordinata', + subscript: 'Pedice', + superscript: 'Apice', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Fullscreen on/off', + quote: 'Citazione', + left: 'A sinistra', + center: 'Centra', + right: 'A destra', + justify: 'Giustificato', + print: 'Stampa', + outdent: 'Diminuisci identazione', + indent: 'Aumenta identazione', + removeFormat: 'Rimuovi formattazione', + formatting: 'Formattazione', + fontSize: 'Dimensione del font', + align: 'Allinea', + hr: 'Inserisci righello orizzontale', + undo: 'Indietro', + redo: 'Avanti', + heading1: 'Intestazione 1', + heading2: 'Intestazione 2', + heading3: 'Intestazione 3', + heading4: 'Intestazione 4', + heading5: 'Intestazione 5', + heading6: 'Intestazione 6', + paragraph: 'Paragrafo', + code: 'Codice', + size1: 'Molto piccolo', + size2: 'Piccolo', + size3: 'Normale', + size4: 'Medio-largo', + size5: 'Grande', + size6: 'Molto grande', + size7: 'Massimo', + defaultFont: 'Font predefinito', + viewSource: 'Vedi la fonte' + }, + tree: { + noData: 'Nessun nodo disponibile', + noResults: 'Nessuna corrispondenza trovata' + } +} diff --git a/lang/ja.js b/lang/ja.js new file mode 100644 index 00000000000..212e6c97961 --- /dev/null +++ b/lang/ja.js @@ -0,0 +1,100 @@ +export default { + isoName: 'ja', + nativeName: '日本語 (にほんご)', + label: { + clear: 'クリア', // 'Clear', + ok: 'OK', // 'OK', + cancel: 'キャンセル', // 'Cancel', + close: '閉じる', // 'Close', + set: '設定', // 'Set', + select: '選択', // 'Select', + reset: 'リセット', // 'Reset', + remove: '削除', // 'Remove', + update: '更新', // 'Update', + create: '作成', // 'Create', + search: '検索', // 'Search', + filter: 'フィルタ', // 'Filter', + refresh: '再読込', // 'Refresh' + expand: function (label) { return label ? `「${label}」を展開します。` : '拡大' }, + collapse: function (label) { return label ? `「${label}」を折りたたむ` : '崩壊' } + }, + date: { + days: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'), // 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + daysShort: '日_月_火_水_木_金_土'.split('_'), // 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), // 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'), // 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + headerTitle: function (date) { + return new Intl.DateTimeFormat('ja-JP', { + weekday: 'short', month: 'short', day: 'numeric' + }).format(date) + }, + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, // true + pluralDay: '日間' + }, + table: { + noData: 'データがありません', // 'No data available', + noResults: '検索結果がありません', // 'No matching records found', + loading: '読込中...', // 'Loading...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + '行を選択中' + : '行を選択' + }, + recordsPerPage: 'ページあたりの行数', // 'Rows per page:', + allRows: '全て', // 'All', + pagination: function (start, end, total) { + return start + '-' + end + ' / ' + total + }, + columns: '列' // 'Columns' + }, + editor: { + url: 'URL', // 'URL', + bold: '太字', // 'Bold', + italic: '斜体', // 'Italic', + strikethrough: '取り消し線', // 'Strikethrough', + underline: '下線', // 'Underline', + unorderedList: '箇条書き', // 'Unordered List', + orderedList: '段落番号', // 'Ordered List', + subscript: '下付き', // 'Subscript', + superscript: '上付き', // 'Superscript', + hyperlink: 'リンク', // 'Hyperlink', + toggleFullscreen: '全画面表示', // 'Toggle Fullscreen', + quote: '引用文', // 'Quote', + left: '左揃え', // 'Left align', + center: '中央揃え', // 'Center align', + right: '右揃え', // 'Right align', + justify: '両端揃え', // 'Justify align', + print: '印刷', // 'Print', + outdent: 'インデント解除', // 'Decrease indentation', + indent: 'インデント', // 'Increase indentation', + removeFormat: '書式解除', // 'Remove formatting', + formatting: '書式', // 'Formatting', + fontSize: 'フォントサイズ', // 'Font Size', + align: '揃え', // 'Align', + hr: '横線を投入', // 'Insert Horizontal Rule', + undo: '元に戻す', // 'Undo', + redo: 'やり直し', // 'Redo', + heading1: 'ヘッダー 1', // 'Heading 1', + heading2: 'ヘッダー 2', // 'Heading 2', + heading3: 'ヘッダー 3', // 'Heading 3', + heading4: 'ヘッダー 4', // 'Heading 4', + heading5: 'ヘッダー 5', // 'Heading 5', + heading6: 'ヘッダー 6', // 'Heading 6', + paragraph: '段落', // 'Paragraph', + code: 'コード', // 'Code', + size1: '小さい', // 'Very small', + size2: 'やや小さい', // 'A bit small', + size3: '普通', // 'Normal', + size4: 'やや大きい', // 'Medium-large', + size5: '大きい', // 'Big', + size6: 'とても大きい', // 'Very big', + size7: '最大', // 'Maximum', + defaultFont: '初期フォント', // 'Default Font', + viewSource: 'ソースを見る' + }, + tree: { + noNodes: 'ノードがありません', // 'No nodes available', + noResults: '該当するノードがありません' // 'No matching nodes found' + } +} diff --git a/lang/km.js b/lang/km.js new file mode 100644 index 00000000000..4c3f012f1c3 --- /dev/null +++ b/lang/km.js @@ -0,0 +1,95 @@ +export default { + isoName: 'km', + nativeName: 'ខ្មែរ', + label: { + clear: 'សម្អាត', + ok: 'យល់ព្រម', + cancel: 'បោះបង់', + close: 'បិទ', + set: 'កំណត់', + select: 'ជ្រើសរើស', + reset: 'កំណត់ឡើងវិញ', + remove: 'លុប', + update: 'កែប្រែ', + create: 'បង្កើត', + search: 'ស្វែងរក', + filter: 'ច្រោះ', + refresh: 'ធ្វើឲ្យថ្មី', + expand: function (label) { return label ? `ពង្រីក "${label}"` : 'ពង្រីក' }, + collapse: function (label) { return label ? `បង្រួម "${label}"` : 'ដួលរលំ' } + }, + date: { + days: 'អាទិត្យ_ចន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'), + daysShort: 'អទ_ចន_អង_ពុ_ព្រ_សុ_សរ'.split('_'), + months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'ថ្ងៃ' + }, + table: { + noData: 'គ្មានទិន្ន័យ', + noResults: 'គ្មានទិន្ន័យដូច', + loading: 'កំពុងផ្ទេរទិន្នន័យ...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 ជួរដេកត្រូវបានជ្រើសរើស' + : (rows === 0 ? 'មិនមាន' : rows) + ' ជួរដេកត្រូវបានជ្រើសរើស' + }, + recordsPerPage: 'ជួរដេកក្នុងមួយទំព័រ:', + allRows: 'ទាំងអស់', + pagination: function (start, end, total) { + return start + '-' + end + ' នៃ ' + total + }, + columns: 'ជួរឈរ' + }, + editor: { + url: 'URL', + bold: 'ដិត', + italic: 'ទ្រេត', + strikethrough: 'បន្ទាត់ឆ្នូតកណ្តាល', + underline: 'បន្ទាត់ពីក្រោម', + unorderedList: 'បញ្ជីគ្មានលំដាប់', + orderedList: 'បញ្ជីមានលំដាប់', + subscript: 'សន្ទស្សន៍ខាងក្រោម', + superscript: 'សន្ទស្សន៍ខាងលើ', + hyperlink: 'តំណភ្ជាប់', + toggleFullscreen: 'ប្តូរអេក្រង់ពេញ', + quote: 'សម្រង់', + left: 'តម្រឹមឆ្វេង', + center: 'តម្រឹមកណ្តាល', + right: 'តម្រឹមស្តាំ', + justify: 'តម្រឹមសងខាង', + print: 'បោះពុម្ភ', + outdent: 'បន្ថយចូលបន្ទាត់', + indent: 'បន្ថែមចូលបន្ទាត់', + removeFormat: 'លុបទ្រង់ទ្រាយ', + formatting: 'ទ្រង់ទ្រាយ', + fontSize: 'ទំហំអក្សរ', + align: 'តម្រឹម', + hr: 'បញ្ចូលបន្ទាត់ផ្តេក', + undo: 'មិនធ្វើវិញ', + redo: 'ធ្វើវិញ', + heading1: 'ចំណងជើង 1', + heading2: 'ចំណងជើង 2', + heading3: 'ចំណងជើង 3', + heading4: 'ចំណងជើង 4', + heading5: 'ចំណងជើង 5', + heading6: 'ចំណងជើង 6', + paragraph: 'កថាខណ្ឌ', + code: 'កូដ', + size1: 'តូចណាស់', + size2: 'តូចបន្តិច', + size3: 'ធម្មតា', + size4: 'ធំមធ្យម', + size5: 'ធំ', + size6: 'ធំណាស់', + size7: 'អតិបរិមា', + defaultFont: 'ពុម្ពអក្សរដើម', + viewSource: 'មើលប្រភព។' + }, + tree: { + noNodes: 'គ្មានទិន្នន័យ', + noResults: 'គ្មានទិន្ន័យដូច' + } +} diff --git a/lang/ko-kr.js b/lang/ko-kr.js new file mode 100644 index 00000000000..2ac710f0583 --- /dev/null +++ b/lang/ko-kr.js @@ -0,0 +1,95 @@ +export default { + isoName: 'ko-kr', + nativeName: '한국어', + label: { + clear: '초기화', + ok: '확인', + cancel: '취소', + close: '닫기', + set: '설정', + select: '선택', + reset: '초기화', + remove: '삭제', + update: '업데이트', + create: '생성', + search: '검색', + filter: '필터', + refresh: '새로 고침', + expand: function (label) { return label ? `"${label}" 확장` : '확장하다' }, + collapse: function (label) { return label ? `"${label}" 접기` : '무너지다' } + }, + date: { + days: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'), + daysShort: '일_월_화_수_목_금_토'.split('_'), + months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'), + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: '일' + }, + table: { + noData: '데이터가 없습니다.', + noResults: '결과가 없습니다.', + loading: '로드 중...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' 개가 선택 되었습니다.' + : '선택된 항목이 없습니다.' + }, + recordsPerPage: '페이지 당 개수:', + allRows: '전체', + pagination: function (start, end, total) { + return total + ' 중 ' + start + '-' + end + }, + columns: '열' + }, + editor: { + url: 'URL', + bold: '굵게', + italic: '기울이기', + strikethrough: '취소선', + underline: '밑줄', + unorderedList: '비순차 목록', + orderedList: '순서 목록', + subscript: '아래 첨자', + superscript: '위 첨자', + hyperlink: '하이퍼링크', + toggleFullscreen: '전체 화면', + quote: '따옴표', + left: '왼쪽 정렬', + center: '가운데 정렬', + right: '오른쪽 정렬', + justify: '세로 정렬', + print: '출력', + outdent: '들여 쓰기', + indent: '내어 쓰기', + removeFormat: '포맷팅 제거', + formatting: '포맷팅', + fontSize: '글꼴 크기', + align: '가로 정렬', + hr: '가로줄 넣기', + undo: '실행취소', + redo: '다시하기', + heading1: '제목 1', + heading2: '제목 2', + heading3: '제목 3', + heading4: '제목 4', + heading5: '제목 5', + heading6: '제목 6', + paragraph: '단락', + code: '코드', + size1: '매우 작게', + size2: '작게', + size3: '보통', + size4: '약간 크게', + size5: '크게', + size6: '아주 크게', + size7: '최대', + defaultFont: '기본 글꼴', + viewSource: '소스보기' + }, + tree: { + noNodes: '가능한 항목이 없습니다', + noResults: '항목을 찾을 수 없습니다' + } +} diff --git a/lang/kur-ckb.js b/lang/kur-ckb.js new file mode 100644 index 00000000000..d4be706c5de --- /dev/null +++ b/lang/kur-ckb.js @@ -0,0 +1,105 @@ +export default { + isoName: 'kur-ckb', + nativeName: 'کوردی سۆرانی', + rtl: true, + label: { + clear: 'پاککردنەوە', + ok: 'باشە', + cancel: 'هەڵوەشاندنەوە', + close: 'داخستن', + set: 'دانان', + select: 'هەڵبژاردن', + reset: 'رێکخستنەوه', + remove: 'لابردن', + update: 'نوێکردنەوە', + create: 'دروستکردن', + search: 'گەڕان', + filter: 'پاڵاوتن', + refresh: 'تازەکردنەوە', + expand: function (label) { return label ? `"${label}" فراوانکردنی` : 'فراوانکردن' }, + collapse: function (label) { return label ? `"${label}" داخستنی` : 'شکست هێنان' } + }, + date: { + days: 'یەک شەممە_دووشەممە_سێ شەممە_چوار شەممە_پێنج شەممە_هەینی_شەممە'.split( + '_' + ), + daysShort: '١شم_٢شم_٣شم_٤شم_٥شم_هەینی_شەممە'.split( + '_' + ), + months: 'مانگی یەک_مانگی دوو_مانگی سێ_مانگی چوار_مانگی پێنج_مانگی شەش_مانگی حەوت_مانگی هەشت_مانگی نۆ_مانگی دە_مانگی یانزە_مانگی دووانزە'.split( + '_' + ), + monthsShort: 'مانگی یەک_مانگی دوو_مانگی سێ_مانگی چوار_مانگی پێنج_مانگی شەش_مانگی حەوت_مانگی هەشت_مانگی نۆ_مانگی دە_مانگی یانزە_مانگی دووانزە'.split( + '_' + ), + firstDayOfWeek: 6, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + singleDay: 'ڕۆژ', + pluralDay: 'ڕۆژەکان' + }, + table: { + noData: 'هیچ داتەیەک نییە', + noResults: 'هیچ ئەنجامێک نییە', + loading: 'چاوەڕوانبە...', + selectedRecords: function (rows) { + return rows === 1 + ? 'یەک ڕیکۆرد هەڵبژێردراوە' + : (rows === 0 ? '0' : rows) + 'ڕیکۆرد هەڵبژێرداوە.' + }, + recordsPerPage: 'ئەنجام بۆهەر پەڕەیەک:', + allRows: 'هەمووی', + pagination: function (start, end, total) { + return start + '-' + end + ' لە ' + total + }, + columns: 'ڕیز' + }, + editor: { + url: 'لینک', + bold: 'تۆخ', + italic: 'لار', + strikethrough: 'خەتپیاهاتوو', + underline: 'خەتبەژێرهاتوو', + unorderedList: 'لیستی ڕیزنەکراو', + orderedList: 'لیستی ڕیزکراو', + subscript: 'ژێرهێڵ', + superscript: 'سەرهێڵ', + hyperlink: 'لینک', + toggleFullscreen: 'پربە شاشە یان نا', + quote: 'دەق', + left: 'لای چەپ', + center: 'ناوەڕاست', + right: 'لای ڕاست', + justify: 'بە یەکسانی', + print: 'پرینت', + outdent: 'کەمکردنەوەی بۆشای', + indent: 'زۆرکردنی بۆشای', + removeFormat: 'لابردنی ستایل', + formatting: 'ستایل', + fontSize: 'قەبارەی فۆنت', + align: 'ڕێککردن', + hr: 'دانانی هیڵی ئاسۆی', + undo: 'پاشگەزبونەوە', + redo: 'کردنەوە', + heading1: 'ناونیشان ١', + heading2: 'ناونیشان ٢', + heading3: 'ناونیشان ٣', + heading4: 'ناونیشان ٤', + heading5: 'ناونیشان ٥', + heading6: 'ناونیشان ٦', + paragraph: 'بڕگە', + code: 'کۆد', + size1: 'زۆر بچووک', + size2: 'بچووک', + size3: 'ئاسای', + size4: 'ناوەند', + size5: 'گەورە', + size6: 'زۆر گەورە', + size7: 'گەورەترین', + defaultFont: 'فۆنتی بنەڕەت', + viewSource: 'سەیرکردنی سەرچاوە' + }, + tree: { + noNodes: 'هیچ نۆدێک نیە', + noResults: 'هیچ نۆدێک نەدۆزرایەوە' + } +} diff --git a/lang/kz.js b/lang/kz.js new file mode 100644 index 00000000000..b4a7e45b4fd --- /dev/null +++ b/lang/kz.js @@ -0,0 +1,99 @@ +function plurals (n, opts) { + return opts[ n % 10 === 1 && n % 100 !== 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2 ] +} + +export default { + isoName: 'kz', + nativeName: 'Қазақша', + label: { + clear: 'Тазалау', + ok: 'OK', + cancel: 'Бас тарту', + close: 'Жабу', + set: 'Орнату', + select: 'Таңдау', + reset: 'Қалпына келтіру', + remove: 'Өшіру', + update: 'Жаңарту', + create: 'Жасау', + search: 'Іздеу', + filter: 'Сүзгі', + refresh: 'Жаңарту', + expand: function (label) { return label ? `"${label}" кеңейту` : 'Кеңейту' }, + collapse: function (label) { return label ? `"${label}" жию` : 'Жыйрату' } + }, + date: { + days: 'Жексенбі_Дүйсенбі_Сейсенбі_Сәрсенбі_Бейсенбі_Жұма_Сенбі'.split('_'), + daysShort: 'Жс_Дс_Сс_Ср_Бс_Жм_Сб'.split('_'), + months: 'Қаңтар_Ақпан_Наурыз_Сәуір_Мамыр_Маусым_Шілде_Тамыз_Қыркүйек_Қазан_Қараша_Желтоқсан'.split('_'), + monthsShort: 'Қаң_Ақп_Нау_Сәу_Мам_Мау_Шіл_Там_Қыр_Қаз_Қар_Жел'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'күн' + }, + table: { + noData: 'Мәлімет жоқ', + noResults: 'Сәйкестік табылмады', + loading: 'Жүктеу...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' ' + plurals(rows, [ 'жол таңдалды', 'жол таңдалды', 'жол таңдалды' ]) + '.' + : 'Ешбір жол таңдалмады.' + }, + recordsPerPage: 'Беттегі жолдар:', + allRows: 'Бәрі', + pagination: function (start, end, total) { + return start + '-' + end + ' из ' + total + }, + columns: 'Бағандар' + }, + editor: { + url: 'URL', + bold: 'Қалың', + italic: 'Курсив', + strikethrough: 'Сызылған', + underline: 'Асты сызылған', + unorderedList: 'Маркерленген тізім', + orderedList: 'Нөмірленген тізім', + subscript: 'Астыңғы таңба', + superscript: 'Үстінгі таңба', + hyperlink: 'Гиперсілтеме', + toggleFullscreen: 'Толық экран режимі', + quote: 'Жазба', + left: 'Солға туралау', + center: 'Ортаға туралау', + right: 'Оңға туралау', + justify: 'Ені бойынша туралау', + print: 'Басып шығару', + outdent: 'Шегірісті азайту', + indent: 'Шегірісті үлкейту', + removeFormat: 'Пішімдеуді жою', + formatting: 'Пішімдеу', + fontSize: 'Қаріп өлшемі', + align: 'Туралау', + hr: 'Көлденең сызықты енгізу', + undo: 'Болдырмау', + redo: 'Қайталау', + heading1: 'Тақырып 1', + heading2: 'Тақырып 2', + heading3: 'Тақырып 3', + heading4: 'Тақырып 4', + heading5: 'Тақырып 5', + heading6: 'Тақырып 6', + paragraph: 'Параграф', + code: 'Код', + size1: 'Өте кішкентай', + size2: 'Кішкентай', + size3: 'Қалыпты', + size4: 'Орташа', + size5: 'Үлкен', + size6: 'Өте үлкен', + size7: 'Дәу', + defaultFont: 'Әдепкі қаріп', + viewSource: 'Бастапқы кодты қарау' + }, + tree: { + noNodes: 'Түйіндер қолжетімді емес', + noResults: 'Сәйкестік табылмады' + } +} diff --git a/lang/lu.js b/lang/lu.js new file mode 100644 index 00000000000..f80592ac384 --- /dev/null +++ b/lang/lu.js @@ -0,0 +1,95 @@ +export default { + isoName: 'lu', + nativeName: 'Kiluba', + label: { + clear: 'Eidel', + ok: 'OK', + cancel: 'Oofbriechen', + close: 'Schléissen', + set: 'Setzen', + select: 'Auswielen', + reset: 'Zerécksetzen', + remove: 'Läschen', + update: 'Aktualiséieren', + create: 'Erstellen', + search: 'Sichen', + filter: 'Filter', + refresh: 'Aktualiséieren', + expand: function (label) { return label ? `"${label}" erweideren` : 'Erweideren' }, + collapse: function (label) { return label ? `"${label}" zesummeklappen` : 'Zesummebroch' } + }, + date: { + days: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'), + daysShort: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'), + months: 'Januar_Februar_März_Abrëll_Mäi_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'), + monthsShort: 'Jan_Feb_Mär_Abr_Mäi_Jun_Jul_Aug_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'deeg' + }, + table: { + noData: 'Keng Donnéen do', + noResults: 'Keng Anträg fonnt', + loading: 'Luedt...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 ausgewielten Zeil.' + : (rows === 0 ? 'Keng' : rows) + ' Zeilen ausgewielt.' + }, + recordsPerPage: 'Zeilen pro Säit:', + allRows: 'All', + pagination: function (start, end, total) { + return start + '-' + end + ' vun ' + total + }, + columns: 'Kolonnen' + }, + editor: { + url: 'URL', + bold: 'Fett', + italic: 'Kursiv', + strikethrough: 'Duerchgestrach', + underline: 'Ënnerstrach', + unorderedList: 'Ongeuerdnet Lëscht', + orderedList: 'Geuerdnet Lëscht', + subscript: 'déifgestallt', + superscript: 'héichgestallt', + hyperlink: 'Link', + toggleFullscreen: 'Vollbild ëmschalten', + quote: 'Zitat', + left: 'lenksbündeg', + center: 'zentréiert', + right: 'riedsbündeg', + justify: 'Ausriichten', + print: 'Drucken', + outdent: 'ausrëcken', + indent: 'anrëcken', + removeFormat: 'Formatéierung löschen', + formatting: 'Formatéiere', + fontSize: 'Schrëftgréisst', + align: 'Ausriichten', + hr: 'Horizontal Linn ansëtzen', + undo: 'Réckgängeg', + redo: 'Restauréieren', + heading1: 'Iwwerschrëft 1', + heading2: 'Iwwerschrëft 2', + heading3: 'Iwwerschrëft 3', + heading4: 'Iwwerschrëft 4', + heading5: 'Iwwerschrëft 5', + heading6: 'Iwwerschrëft 6', + paragraph: 'Paragraphe', + code: 'Code', + size1: 'Ganz kleng', + size2: 'E bëssi kleng', + size3: 'Normal', + size4: 'Grouss', + size5: 'Gréisser', + size6: 'Ganz grouss', + size7: 'Maximum', + defaultFont: 'Standard Schrëft', + viewSource: 'Umthombo wokubuka' + }, + tree: { + noNodes: 'Keng Kniet verfügbar', + noResults: 'Keng passend Kniet fonnt' + } +} diff --git a/lang/lv.js b/lang/lv.js new file mode 100644 index 00000000000..47437e8aa9b --- /dev/null +++ b/lang/lv.js @@ -0,0 +1,95 @@ +export default { + isoName: 'lv', + nativeName: 'Latviešu valoda', + label: { + clear: 'Attīrīt', + ok: 'OK', + cancel: 'Atcelt', + close: 'Aizvērt', + set: 'Iestatīt', + select: 'Izvēlēties', + reset: 'Atiestatīt', + remove: 'Noņemt', + update: 'Atjaunināt', + create: 'Izveidot', + search: 'Meklēt', + filter: 'Filtēt', + refresh: 'Atjaunot', + expand: function (label) { return label ? `Paplašināt "${label}"` : 'Izvērst' }, + collapse: function (label) { return label ? `Sakļaut "${label}"` : 'Sakļaut' } + }, + date: { + days: 'Svētdiena_Pirmdiena_Otrdiena_Trešdiena_Ceturtdiena_Piektdiena_Sestdiena'.split('_'), + daysShort: 'Sv_Pi_Ot_Tr_Ce_Pi_Se'.split('_'), + months: 'Janvāris_Februāris_Marts_Aprīlis_Maijs_Jūnijs_Jūlijs_Augusts_Septembris_Okrobris_Novembris_Decembris'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Mai_Jūn_Jūl_Aug_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dienas' + }, + table: { + noData: 'Nav datu', + noResults: 'Ieraksti nav atrasti', + loading: 'Atjaunojas...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 izvēlēta rinda.' + : (rows === 0 ? 'Nav' : rows) + ' izvēlētas rindas.' + }, + recordsPerPage: 'Rindas lapā:', + allRows: 'Visas', + pagination: function (start, end, total) { + return start + '-' + end + ' no ' + total + }, + columns: 'Kolonnas' + }, + editor: { + url: 'URL', + bold: 'Trekns', + italic: 'Kursīvs', + strikethrough: 'Nosvītrots', + underline: 'Apakšsvītra', + unorderedList: 'Marķētais saraksts', + orderedList: 'Numurētais saraksts', + subscript: 'Apakšraksts', + superscript: 'Augšraksts', + hyperlink: 'Saite', + toggleFullscreen: 'Pilnekrāna režīms', + quote: 'Citāts', + left: 'Izlīdzināt gar kreiso malu', + center: 'Centrēt', + right: 'Izlīdzināt gar labo malu', + justify: 'Izlīdzināt gar abām malām', + print: 'Drukāt', + outdent: 'Samazināt atkāpi', + indent: 'Palielināt atkāpi', + removeFormat: 'Noņemt formatējumu', + formatting: 'Formatēt', + fontSize: 'Fonta izmērs', + align: 'Izlīdzināt', + hr: 'Ievietot horizontālo līniju', + undo: 'Atsaukt', + redo: 'Atkārtot', + heading1: 'Virsraksts 1', + heading2: 'Virsraksts 2', + heading3: 'Virsraksts 3', + heading4: 'Virsraksts 4', + heading5: 'Virsraksts 5', + heading6: 'Virsraksts 6', + paragraph: 'Rindkopa', + code: 'Kods', + size1: 'Ļoti mazs', + size2: 'Mazs', + size3: 'Normāls', + size4: 'Vidējs', + size5: 'Liels', + size6: 'Ļoti liels', + size7: 'Maksimāls', + defaultFont: 'Fonts pēc noklusējuma', + viewSource: 'Skatīt avotu' + }, + tree: { + noNodes: 'Nav pieejami mezgli', + noResults: 'Nav atrasti atbilstošie mezgli' + } +} diff --git a/lang/ml.js b/lang/ml.js new file mode 100644 index 00000000000..bb63d15b0a1 --- /dev/null +++ b/lang/ml.js @@ -0,0 +1,99 @@ +export default { + isoName: 'ml', + nativeName: 'മലയാളം', + label: { + clear: 'നീക്കുക', + ok: 'ശരി', + cancel: 'ഉപേക്ഷിക്കുക', + close: 'അടയ്ക്കുക', + set: 'സജ്ജമാക്കുക', + select: 'തിരഞ്ഞെടുക്കുക', + reset: 'പുനഃസജ്ജമാക്കുക', + remove: 'നീക്കംചെയ്യുക', + update: 'അപ്ഡേറ്റ്', + create: 'സൃഷ്ടിക്കുക', + search: 'തിരയുക', + filter: 'അരിക്കുക', + refresh: 'പുതുക്കുക', + expand: function (label) { return label ? `"${label}" വികസിപ്പിക്കുക` : 'വികസിപ്പിക്കുക' }, + collapse: function (label) { return label ? `"${label}" ചുരുക്കുക` : 'ചുരുക്കുക' } + }, + date: { + days: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + daysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'), + months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split( + '_' + ), + monthsShort: 'ജനു_ഫെബ്രു_മാർ_ഏപ്രി_മേയ്_ജൂൺ_ജൂലൈ_ഓഗ_സെപ്_ഒക്_നവ_ഡിസ'.split( + '_' + ), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'ദിവസങ്ങൾ' + }, + table: { + noData: 'ഡാറ്റ ലഭ്യമല്ല', + noResults: 'പൊരുത്തമുള്ള റെക്കോർഡുകളൊന്നും കണ്ടെത്തിയില്ല', + loading: 'ലോഡ് ചെയ്യുന്നു...', + selectedRecords: function (rows) { + return rows === 1 + ? 'ഒരു റെക്കോർഡ് തിരഞ്ഞെടുത്തു.' + : (rows === 0 ? 'റെക്കോര്ഡുകളൊന്നും തിരഞ്ഞെടുത്തിട്ടില്ല' : rows + ' റെക്കോർഡുകൾ തിരഞ്ഞെടുത്തു.') + }, + recordsPerPage: 'ഓരോ പേജിലും റെക്കോർഡുകൾ:', + allRows: 'എല്ലാം', + pagination: function (start, end, total) { + return start + '-' + end + ' മൊത്തം ' + total + ' ൽ നിന്നും' + }, + columns: 'നിരകൾ' + }, + editor: { + url: 'യുആർഎൽ', + bold: 'ബോൾഡ്', + italic: 'ഇറ്റാലിക്', + strikethrough: 'മധ്യത്തിൽ വര', + underline: 'അടിവര', + unorderedList: 'ക്രമമില്ലാത്ത പട്ടിക', + orderedList: 'ക്രമമുള്ള ലിസ്റ്റ്', + subscript: 'സബ്സ്ക്രിപ്റ്റ്', + superscript: 'സൂപ്പർസ്ക്രിപ്റ്റ്', + hyperlink: 'ഹൈപ്പർലിങ്ക്', + toggleFullscreen: 'ഫുൾസ്ക്രീൻ ടോഗിൾ ചെയ്യുക', + quote: 'ഉദ്ധരിക്കുക', + left: 'ഇടത്തേക്ക്', + center: 'മധ്യഭാഗത്ത് ', + right: 'വലത്തേക്ക്', + justify: 'ജസ്റ്റിഫൈ', + print: 'പ്രിന്റ്', + outdent: 'ഇൻഡെൻറേഷൻ കുറയ്ക്കുക ', + indent: 'ഇൻഡെൻറേഷൻ വർദ്ധിപ്പിക്കുക', + removeFormat: 'ഫോർമാറ്റിംഗ് നീക്കം ചെയ്യുക', + formatting: 'ഫോർമാറ്റിംഗ്', + fontSize: 'അക്ഷര വലിപ്പം', + align: 'വിന്യസിക്കുക', + hr: 'തിരശ്ചീന റൂൾ ഇൻസേർട്ട് ചെയ്യുക', + undo: 'പൂർവാവസ്ഥയിലാക്കുക', + redo: 'വീണ്ടും ചെയ്യുക', + heading1: 'ഹെഡ്ഡർ 1', + heading2: 'ഹെഡ്ഡർ 2', + heading3: 'ഹെഡ്ഡർ 3', + heading4: 'ഹെഡ്ഡർ 4', + heading5: 'ഹെഡ്ഡർ 5', + heading6: 'ഹെഡ്ഡർ 6', + paragraph: 'ഖണ്ഡിക', + code: 'കോഡ്', + size1: 'വളരെ ചെറുത്', + size2: 'അൽപ്പം ചെറുത്', + size3: 'സാധാരണ', + size4: 'മീഡിയം-വലുത്', + size5: 'വലുത്', + size6: 'വളരെ വലുത്', + size7: 'പരമാവധി', + defaultFont: 'ഡിഫാൾട്ട് ഫോണ്ട്', + viewSource: 'ഉറവിടം കാണുക' + }, + tree: { + noNodes: 'നോഡുകൾ ലഭ്യമല്ല', + noResults: 'പൊരുത്തപ്പെടുന്ന നോഡുകളൊന്നും കണ്ടെത്തിയില്ല' + } +} diff --git a/lang/mm.js b/lang/mm.js new file mode 100644 index 00000000000..3f67815fdbc --- /dev/null +++ b/lang/mm.js @@ -0,0 +1,95 @@ +export default { + isoName: 'mm', + nativeName: 'မြန်မာ(ဗမာ)', + label: { + clear: 'ရှင်းလင်းမည်', + ok: 'အဆင်ပြေသည်', + cancel: 'ပယ်ဖျက်မည်', + close: 'ပိတ်မည်', + set: 'သတ်မှတ်မည်', + select: 'ရွေးမည်', + reset: 'ပြန်လည်သတ်မှတ်မည်', + remove: 'ပယ်ဖျက်မည်', + update: 'အသစ်ပြင်ဆင်မည်', + create: 'ဖန်တီးမည်', + search: 'ရှာမည်', + filter: 'စစ်ထုတ်မည်', + refresh: 'အသစ်ပြန်လုပ်မည်', + expand: function (label) { return label ? `"${label}" ကိုချဲ့ထွင်ပါ။` : 'ချဲ့ထွင်ပါ။' }, + collapse: function (label) { return label ? `"${label}" ကို ခေါက်သိမ်းပါ` : 'ပြိုကျသည်။' } + }, + date: { + days: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), + daysShort: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'), + months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), + monthsShort: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'ရက်' + }, + table: { + noData: 'ဒေတာမရှိပါ', + noResults: 'ကိုက်ညီသောရလဒ်မရှိပါ', + loading: 'လုပ်ဆောင်နေသည်', + selectedRecords: rows => ( + rows > 0 + ? rows + ' ကြောင်းရွေးချယ်ထားသည်' + : 'ဘာမှ မရွေးချယ်ထားပါ' + ), + recordsPerPage: 'တစ်မျက်နှာ အကြောင်းရေတွက်', + allRows: 'အားလုံး', + pagination: function (start, end, total) { + return start + 'မှ' + end + 'ထိ' + 'အားလုံး' + total + 'ရှိ' + }, + columns: 'ကော်လံ' + }, + editor: { + url: 'URL', + bold: 'Bold', + italic: 'Italic', + strikethrough: 'Strikethrough', + underline: 'Underline', + unorderedList: 'Unordered List', + orderedList: 'Ordered List', + subscript: 'Subscript', + superscript: 'Superscript', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Toggle Fullscreen', + quote: 'Quote', + left: 'Left align', + center: 'Center align', + right: 'Right align', + justify: 'Justify align', + print: 'Print', + outdent: 'Decrease indentation', + indent: 'Increase indentation', + removeFormat: 'Remove formatting', + formatting: 'Formatting', + fontSize: 'Font Size', + align: 'Align', + hr: 'Insert Horizontal Rule', + undo: 'Undo', + redo: 'Redo', + heading1: 'Heading 1', + heading2: 'Heading 2', + heading3: 'Heading 3', + heading4: 'Heading 4', + heading5: 'Heading 5', + heading6: 'Heading 6', + paragraph: 'Paragraph', + code: 'Code', + size1: 'Very small', + size2: 'A bit small', + size3: 'Normal', + size4: 'Medium-large', + size5: 'Big', + size6: 'Very big', + size7: 'Maximum', + defaultFont: 'Default Font', + viewSource: 'View Source' + }, + tree: { + noNodes: 'No nodes available', + noResults: 'No matching nodes found' + } +} diff --git a/lang/ms.js b/lang/ms.js new file mode 100644 index 00000000000..f0d477312ab --- /dev/null +++ b/lang/ms.js @@ -0,0 +1,95 @@ +export default { + isoName: 'ms', + nativeName: 'Bahasa Melayu', + label: { + clear: 'Semula', + ok: 'OK', + cancel: 'Batal', + close: 'Tutup', + set: 'Set', + select: 'Pilih', + reset: 'Reset', + remove: 'Keluarkan', + update: 'Kemaskini', + create: 'Tambah', + search: 'Cari', + filter: 'Saring', + refresh: 'Muat semula', + expand: function (label) { return label ? `Kembangkan "${label}"` : 'Kembangkan' }, + collapse: function (label) { return label ? `Runtuhkan "${label}"` : 'Runtuh' } + }, + date: { + days: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jummat_Sabtu'.split('_'), + daysShort: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jummat_Sabtu'.split('_'), + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_Oktober_November_Disember'.split('_'), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogos_Sep_Okt_Nov_Dis'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'hari' + }, + table: { + noData: 'Tiada data tersedia', + noResults: 'Tiada rekod sepadan yang dijumpai', + loading: 'Sedang dalam proses..', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' rekod terpilih.' + : (rows === 0 ? 'tiada' : '1') + ' rekod terpilih.' + }, + recordsPerPage: 'Rekod per halaman:', + allRows: 'Semua', + pagination: function (start, end, total) { + return start + '-' + end + ' dari ' + total + }, + columns: 'Kolum' + }, + editor: { + url: 'URL', + bold: 'Tebal', + italic: 'Italik', + strikethrough: 'Garis Tengah', + underline: 'Garis Bawah', + unorderedList: 'Daftar Tidak Tersusun', + orderedList: 'Daftar Tersusun', + subscript: 'Subskrip', + superscript: 'Superskrip', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Alihkan Layar Penuh', + quote: 'Petikan', + left: 'Selaras Kiri', + center: 'Selaras Tengah', + right: 'Selaras Kanan', + justify: 'Selaras Sisi', + print: 'Cetak', + outdent: 'Kurangkan Indentasi', + indent: 'Tambah indentasi', + removeFormat: 'Buang Format', + formatting: 'Format', + fontSize: 'Saiz Tulisan', + align: 'Selaras', + hr: 'Masukkan Aturan Horizontal', + undo: 'Undo', + redo: 'Redo', + heading1: 'Heading 1', + heading2: 'Heading 2', + heading3: 'Heading 3', + heading4: 'Heading 4', + heading5: 'Heading 5', + heading6: 'Heading 6', + paragraph: 'Paragraf', + code: 'Kod', + size1: 'Paling Kecil', + size2: 'Agak Kecil', + size3: 'Normal', + size4: 'Sederhana', + size5: 'Besar', + size6: 'Paling Besar', + size7: 'Maksimum', + defaultFont: 'Tulisan Asal', + viewSource: 'Lihat sumber' + }, + tree: { + noNodes: 'Tiada nod tersedia', + noResults: 'Tiada nod yang sesuai dijumpai' + } +} diff --git a/lang/my.js b/lang/my.js new file mode 100644 index 00000000000..7461db4fa6f --- /dev/null +++ b/lang/my.js @@ -0,0 +1,98 @@ +export default { + isoName: 'my', + nativeName: 'Malaysia', + label: { + clear: 'kosong', + ok: 'pasti', + cancel: 'Batal', + close: 'penutupan', + set: 'sediakan', + select: 'pilih', + reset: 'set semula', + remove: 'keluarkan', + update: 'memperbaharui', + create: 'cipta', + search: 'cari', + filter: 'penapis', + refresh: 'segarkan semula', + expand: function (label) { return label ? `"${label}" ko hkyaae htwin par` : 'hkyaae htwin par' }, + collapse: function (label) { return label ? `"${label}" ko hkout saimpar` : 'pyaokya sai' } + }, + date: { + days: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'), + daysShort: 'Aha_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'), + months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'), + monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogo_Sep_Okt_Nov_Dis'.split('_'), + headerTitle: function (date) { + return new Intl.DateTimeFormat('my', { + weekday: 'short', month: 'short', day: 'numeric' + }).format(date) + }, + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'langit' + }, + table: { + noData: 'tiada data tersedia', + noResults: 'Tiada data yang sepadan ditemui', + loading: 'memuatkan...', + selectedRecords: function (rows) { + return 'dipilih' + rows + 'baris' + }, + recordsPerPage: 'baris setiap muka surat:', + allRows: 'semua', + pagination: function (start, end, total) { + return start + '-' + end + ' / ' + total + }, + columns: 'Senaraikan' + }, + editor: { + url: 'URL', + bold: 'berani', + italic: 'condong', + strikethrough: 'tembus', + underline: 'gariskan', + unorderedList: 'senarai tidak teratur', + orderedList: 'senarai pesanan', + subscript: 'subskrip', + superscript: 'superskrip', + hyperlink: 'Hiperpautan', + toggleFullscreen: 'togol skrin penuh', + quote: 'tanda petikan', + left: 'Jajar ke kiri', + center: 'penjajaran tengah', + right: 'Sejajar ke kanan', + justify: 'wajar', + print: 'Cetak', + outdent: 'mengurangkan lekukan', + indent: 'meningkatkan inden', + removeFormat: 'gaya yang jelas', + formatting: 'format', + fontSize: 'Saiz huruf', + align: 'selaraskan', + hr: 'Masukkan garisan mendatar', + undo: 'membatalkan', + redo: 'buat semula', + heading1: 'Tajuk satu', + heading2: 'Tajuk dua', + heading3: 'Tajuk tiga', + heading4: 'Tajuk Empat', + heading5: 'Tajuk Lima', + heading6: 'Tajuk Enam', + paragraph: 'perenggan', + code: 'kod', + size1: 'sangat kecil', + size2: 'lebih kecil', + size3: 'biasa', + size4: 'sederhana hingga besar', + size5: 'besar', + size6: 'sangat besar', + size7: 'super besar', + defaultFont: 'fon lalai', + viewSource: 'menyemak data' + }, + tree: { + noNodes: 'tiada nod tersedia', + noResults: 'Tiada nod yang sepadan ditemui' + } +} diff --git a/lang/nb-no.js b/lang/nb-no.js new file mode 100644 index 00000000000..82bf0ef5898 --- /dev/null +++ b/lang/nb-no.js @@ -0,0 +1,96 @@ +export default { + isoName: 'nb-no', + nativeName: 'Norsk', + label: { + clear: 'Tøm', + ok: 'OK', + cancel: 'Avbryt', + close: 'Lukk', + set: 'Bruk', + select: 'Velg', + reset: 'Nullstill', + remove: 'Slett', + update: 'Oppdater', + create: 'Lag', + search: 'Søk', + filter: 'Filter', + refresh: 'Oppdater', + expand: function (label) { return label ? `Utvid "${label}"` : 'Utvide' }, + collapse: function (label) { return label ? `Skjul "${label}"` : 'Kollapse' } + }, + date: { + days: 'Søndag_Mandag_Tirsdag_Onsdag_Torsdag_Fredag_Lørdag'.split('_'), + daysShort: 'Søn_Man_Tir_Ons_Tor_Fre_Lør'.split('_'), + months: 'Januar_Februar_Mars_April_Mai_Juni_Juli_August_September_Oktober_November_Desember'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dager' + }, + table: { + noData: 'Ingen data tilgjengelig', + noResults: 'Ingen treff i data funnet', + loading: 'Laster...', + row: 'rad', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' row' + (rows === 1 ? '' : 's') + ' valgt.' + : 'Ingen valgte rader.' + }, + recordsPerPage: 'Rader pr side:', + allRows: 'Alle', + pagination: function (start, end, total) { + return start + '-' + end + ' av ' + total + }, + columns: 'Kolonner' + }, + editor: { + url: 'URL', + bold: 'Fet', + italic: 'Kursiv', + strikethrough: 'Gjennomstreking', + underline: 'Understrek', + unorderedList: 'Uordnet liste', + orderedList: 'Ordnet liste', + subscript: 'Senket skrift', + superscript: 'Hevet skrift', + hyperlink: 'Lenke', + toggleFullscreen: 'Av/på fullskjerm', + quote: 'Sitat', + left: 'Venstrestill', + center: 'Sentrer', + right: 'Høyrestill', + justify: 'Tilpasset bredde', + print: 'Skriv ut', + outdent: 'Midre innrykk', + indent: 'Større innrykk', + removeFormat: 'Fjern formatering', + formatting: 'Formatering', + fontSize: 'Fontstørrelse', + align: 'Stilling', + hr: 'Sett inn horisontal linje', + undo: 'Angre', + redo: 'Gjenta', + heading1: 'Overskrift 1', + heading2: 'Overskrift 2', + heading3: 'Overskrift 3', + heading4: 'Overskrift 4', + heading5: 'Overskrift 5', + heading6: 'Overskrift 6', + paragraph: 'Avsnitt', + code: 'Kode', + size1: 'Veldig liten', + size2: 'Liten', + size3: 'Normal', + size4: 'Medium-stor', + size5: 'Stor', + size6: 'Veldig stor', + size7: 'Maximum', + defaultFont: 'Normal font', + viewSource: 'Se kilde' + }, + tree: { + noNodes: 'Ingen noder tilgjengelig', + noResults: 'Ingen treff i noder funnet' + } +} diff --git a/lang/nl.js b/lang/nl.js new file mode 100644 index 00000000000..788f863ff1a --- /dev/null +++ b/lang/nl.js @@ -0,0 +1,95 @@ +export default { + isoName: 'nl', + nativeName: 'Nederlands', + label: { + clear: 'Wis', + ok: 'OK', + cancel: 'Annuleer', + close: 'Sluit', + set: 'Pas toe', + select: 'Selecteer', + reset: 'Herinitialiseren', + remove: 'Verwijder', + update: 'Update', + create: 'Maak aan', + search: 'Zoek', + filter: 'Filter', + refresh: 'Ververs', + expand: function (label) { return label ? `"${label}" uitklappen` : 'Uitklappen' }, + collapse: function (label) { return label ? `"${label}" inklappen` : 'Inklappen' } + }, + date: { + days: 'Zondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrijdag_Zaterdag'.split('_'), + daysShort: 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'), + months: 'Januari_Februari_Maart_April_Mei_Juni_Juli_Augustus_September_Oktober_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dagen' + }, + table: { + noData: 'Geen gegevens beschikbaar', + noResults: 'Geen records gevonden', + loading: 'Laden...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 record geselecteerd.' + : (rows === 0 ? 'Geen' : rows) + ' geselecteerde records.' + }, + recordsPerPage: 'Records per pagina:', + allRows: 'Alle', + pagination: function (start, end, total) { + return start + '-' + end + ' van ' + total + }, + columns: 'Kolommen' + }, + editor: { + url: 'URL', + bold: 'Vet', + italic: 'Cursief', + strikethrough: 'Doorstrepen', + underline: 'Onderstrepen', + unorderedList: 'Ongeordende lijst', + orderedList: 'Geordende lijst ', + subscript: 'Onderschrift', + superscript: 'Bovenschrift', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Volledig scherm', + quote: 'Citaat', + left: 'Links uitlijnen', + center: 'Centreren', + right: 'Rechts uitlijnen', + justify: 'Uitvullen', + print: 'Afdrukken', + outdent: 'Minder inspringen', + indent: 'Meer inspringen', + removeFormat: 'Opmaak verwijderen', + formatting: 'Opmaak', + fontSize: 'Tekengrootte', + align: 'Uitlijnen', + hr: 'Horizontale lijn invoegen', + undo: 'Herstel', + redo: 'Opnieuw', + heading1: 'Kop 1', + heading2: 'Kop 2', + heading3: 'Kop 3', + heading4: 'Kop 4', + heading5: 'Kop 5', + heading6: 'Kop 6', + paragraph: 'Paragraaf', + code: 'Code', + size1: 'Heel klein', + size2: 'Klein', + size3: 'Normaal', + size4: 'Medium', + size5: 'Groot', + size6: 'Heel groot', + size7: 'Maximum', + defaultFont: 'Standaard lettertype', + viewSource: 'Bekijk bron' + }, + tree: { + noNodes: 'Geen nodes beschikbaar', + noResults: 'Geen overeenkomstige nodes gevonden' + } +} diff --git a/lang/pl.js b/lang/pl.js new file mode 100644 index 00000000000..675e6d87ae4 --- /dev/null +++ b/lang/pl.js @@ -0,0 +1,95 @@ +export default { + isoName: 'pl', + nativeName: 'Polski', + label: { + clear: 'Wyczyść', + ok: 'OK', + cancel: 'Anuluj', + close: 'Zamknij', + set: 'Ustaw', + select: 'Wybierz', + reset: 'Zresetuj', + remove: 'Usuń', + update: 'Zaktualizuj', + create: 'Utwórz', + search: 'Szukaj', + filter: 'Filtruj', + refresh: 'Odśwież', + expand: function (label) { return label ? `Rozwiń "${label}"` : 'Zwiększać' }, + collapse: function (label) { return label ? `Zwiń "${label}"` : 'Upadek' } + }, + date: { + days: 'Niedziela_Poniedziałek_Wtorek_Środa_Czwartek_Piątek_Sobota'.split('_'), + daysShort: 'Nd_Pon_Wt_Śr_Czw_Ptk_Sob'.split('_'), + months: 'Styczeń_Luty_Marzec_Kwiecień_Maj_Czerwiec_Lipiec_Sierpień_Wrzesień_Październik_Listopad_Grudzień'.split('_'), + monthsShort: 'Sty_Lut_Mar_Kwi_Maj_Cze_Lip_Sie_Wrz_Paź_Lis_Gru'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dni' + }, + table: { + noData: 'Brak dostępnych danych', + noResults: 'Nie znaleziono pasujących wpisów', + loading: 'Ładowanie...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' zaznaczony(ch) wiersz(y).' + : (rows === 0 ? 'Brak' : '1') + ' zaznaczony wiersz.' + }, + recordsPerPage: 'Wierszy na stronę:', + allRows: 'Wszystkie', + pagination: function (start, end, total) { + return start + '-' + end + ' z ' + total + }, + columns: 'Kolumny' + }, + editor: { + url: 'URL', + bold: 'Pogrubienie', + italic: 'Kursywa', + strikethrough: 'Przekreślenie', + underline: 'Podkreślenie', + unorderedList: 'Nieuporządkowana lista', + orderedList: 'Uporządkowana lista', + subscript: 'Indeks dolny', + superscript: 'Indeks górny', + hyperlink: 'Hiperłącze', + toggleFullscreen: 'Przełącz na tryb pełnoekranowy', + quote: 'Zacytuj', + left: 'Wyrównaj do lewej', + center: 'Wyrównaj do środka', + right: 'Wyrównaj do prawej', + justify: 'Wyjustuj', + print: 'Drukuj', + outdent: 'Zmniejsz wcięcie', + indent: 'Zwiększ wcięcie', + removeFormat: 'Usuń formatowanie', + formatting: 'Formatowanie', + fontSize: 'Rozmiar czcionki', + align: 'Wyrównanie', + hr: 'Wstaw poziomą linię', + undo: 'Cofnij', + redo: 'Przywróć', + heading1: 'Nagłówek 1', + heading2: 'Nagłówek 2', + heading3: 'Nagłówek 3', + heading4: 'Nagłówek 4', + heading5: 'Nagłówek 5', + heading6: 'Nagłówek 6', + paragraph: 'Paragraf', + code: 'Kod', + size1: 'Bardzo mała', + size2: 'Mała', + size3: 'Normalna', + size4: 'Średnio-duża', + size5: 'Duża', + size6: 'Bardzo duża', + size7: 'Maksymalna', + defaultFont: 'Domyślna czcionka', + viewSource: 'Pokaż źródło' + }, + tree: { + noNodes: 'Brak dostępnych gałęzi', + noResults: 'Nie znaleziono pasujących gałęzi' + } +} diff --git a/lang/pt-br.js b/lang/pt-br.js new file mode 100644 index 00000000000..16afb030218 --- /dev/null +++ b/lang/pt-br.js @@ -0,0 +1,95 @@ +export default { + isoName: 'pt-br', + nativeName: 'Português (BR)', + label: { + clear: 'Limpar', + ok: 'OK', + cancel: 'Cancelar', + close: 'Fechar', + set: 'Escolher', + select: 'Selecionar', + reset: 'Redefinir', + remove: 'Remover', + update: 'Atualizar', + create: 'Criar', + search: 'Buscar', + filter: 'Filtrar', + refresh: 'Recarregar', + expand: function (label) { return label ? `Expandir "${label}"` : 'Expandir' }, + collapse: function (label) { return label ? `Recolher "${label}"` : 'Colapso' } + }, + date: { + days: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), + daysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + months: 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dias' + }, + table: { + noData: 'Sem dados disponíveis', + noResults: 'Nenhum dado correspondente encontrado', + loading: 'Carregando...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' registro' + (rows === 1 ? ' selecionado' : 's selecionados') + '.' + : 'Nenhum registro selecionado.' + }, + recordsPerPage: 'Registros por página:', + allRows: 'Todos', + pagination: function (start, end, total) { + return start + '-' + end + ' de ' + total + }, + columns: 'Colunas' + }, + editor: { + url: 'URL', + bold: 'Negrito', + italic: 'Itálico', + strikethrough: 'Riscado', + underline: 'Sublinhado', + unorderedList: 'Lista não-ordenada', + orderedList: 'Lista ordenada', + subscript: 'Subscrito', + superscript: 'Sobrescrito', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Tela cheia', + quote: 'Citação', + left: 'Alinhado à esquerda', + center: 'Alinhado ao centro', + right: 'Alinhado à direita', + justify: 'Justificado', + print: 'Imprimir', + outdent: 'Diminuir indentação', + indent: 'Aumentar indentação', + removeFormat: 'Remover formatação', + formatting: 'Formatação', + fontSize: 'Tamanho de fonte', + align: 'Alinhar', + hr: 'Inserir divisória horizontal', + undo: 'Desfazer', + redo: 'Refazer', + heading1: 'Cabeçalho 1', + heading2: 'Cabeçalho 2', + heading3: 'Cabeçalho 3', + heading4: 'Cabeçalho 4', + heading5: 'Cabeçalho 5', + heading6: 'Cabeçalho 6', + paragraph: 'Parágrafo', + code: 'Código', + size1: 'Muito pequeno', + size2: 'Pequeno', + size3: 'Normal', + size4: 'Médio', + size5: 'Grande', + size6: 'Enorme', + size7: 'Máximo', + defaultFont: 'Fonte padrão', + viewSource: 'Exibir fonte' + }, + tree: { + noNodes: 'Sem nós disponíveis', + noResults: 'Nenhum nó correspondente encontrado' + } +} diff --git a/lang/pt.js b/lang/pt.js new file mode 100644 index 00000000000..75e4c84849b --- /dev/null +++ b/lang/pt.js @@ -0,0 +1,95 @@ +export default { + isoName: 'pt', + nativeName: 'Português', + label: { + clear: 'Limpar', + ok: 'OK', + cancel: 'Cancelar', + close: 'Fechar', + set: 'Marcar', + select: 'Escolher', + reset: 'Limpar', + remove: 'Remover', + update: 'Atualizar', + create: 'Criar', + search: 'Procurar', + filter: 'Filtrar', + refresh: 'Recarregar', + expand: function (label) { return label ? `Expandir "${label}"` : 'Expandir' }, + collapse: function (label) { return label ? `Recolher "${label}"` : 'Colapso' } + }, + date: { + days: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'), + daysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'), + months: 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'), + monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dias' + }, + table: { + noData: 'Sem dados disponíveis', + noResults: 'Não foi encontrado nenhum resultado', + loading: 'A carregar...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' linha' + (rows === 1 ? ' selecionada' : 's selecionadas') + '.' + : 'Nenhuma linha selecionada.' + }, + recordsPerPage: 'Linhas por página:', + allRows: 'Todas', + pagination: function (start, end, total) { + return start + '-' + end + ' de ' + total + }, + columns: 'Colunas' + }, + editor: { + url: 'URL', + bold: 'Negrito', + italic: 'Itálico', + strikethrough: 'Rasurado', + underline: 'Sublinhado', + unorderedList: 'Lista não-ordenada', + orderedList: 'Lista ordenada', + subscript: 'Subscrito', + superscript: 'Sobrescrito', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Maximizar', + quote: 'Citação', + left: 'Alinhado à esquerda', + center: 'Alinhado ao centro', + right: 'Alinhado à direita', + justify: 'Justificado', + print: 'Imprimir', + outdent: 'Diminuir indentação', + indent: 'Aumentar indentação', + removeFormat: 'Remover formatação', + formatting: 'Formatação', + fontSize: 'Tamanho do tipo de letra', + align: 'Alinhar', + hr: 'Inserir linha horizontal', + undo: 'Desfazer', + redo: 'Refazer', + heading1: 'Cabeçalho 1', + heading2: 'Cabeçalho 2', + heading3: 'Cabeçalho 3', + heading4: 'Cabeçalho 4', + heading5: 'Cabeçalho 5', + heading6: 'Cabeçalho 6', + paragraph: 'Parágrafo', + code: 'Código', + size1: 'Muito pequeno', + size2: 'Pequeno', + size3: 'Normal', + size4: 'Médio', + size5: 'Grande', + size6: 'Enorme', + size7: 'Máximo', + defaultFont: 'Tipo de letra padrão', + viewSource: 'Exibir fonte' + }, + tree: { + noNodes: 'Sem nós disponíveis', + noResults: 'Nenhum resultado encontrado' + } +} diff --git a/lang/ro.js b/lang/ro.js new file mode 100644 index 00000000000..69e602413af --- /dev/null +++ b/lang/ro.js @@ -0,0 +1,95 @@ +export default { + isoName: 'ro', + nativeName: 'Română', + label: { + clear: 'Golește', + ok: 'OK', + cancel: 'Anulează', + close: 'Închide', + set: 'Setează', + select: 'Alege', + reset: 'Resetează', + remove: 'Elimină', + update: 'Actualizează', + create: 'Creează', + search: 'Caută', + filter: 'Filtrează', + refresh: 'Actualizează', + expand: function (label) { return label ? `Deschideți "${label}"` : 'Deschide' }, + collapse: function (label) { return label ? `Închide "${label}"` : 'Închide' } + }, + date: { + days: 'Duminică_Luni_Marți_Miercuri_Joi_Vineri_Sâmbătă'.split('_'), + daysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'), + months: 'Ianuarie_Februarie_Martie_Aprilie_Mai_Iunie_Iulie_August_Septembrie_Octombrie_Noiembrie_Decembrie'.split('_'), + monthsShort: 'Ian_Feb_Mar_Apr_Mai_Iun_Iul_Aug_Sep_Oct_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'zile' + }, + table: { + noData: 'Nu sunt date disponibile', + noResults: 'Nu am găsit înregistrări care să corespundă', + loading: 'Se încarcă...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' înregistrări selectate.' + : (rows === 0 ? 'Nici o' : '1') + ' înregistrare selectată.' + }, + recordsPerPage: 'Înregistrări pe pagină:', + allRows: 'Toate', + pagination: function (start, end, total) { + return start + '-' + end + ' din ' + total + }, + columns: 'Coloane' + }, + editor: { + url: 'URL', + bold: 'Îngroșat', + italic: 'Înclinat', + strikethrough: 'Tăiat', + underline: 'Subliniat', + unorderedList: 'Listă neordonată', + orderedList: 'Listă ordonată', + subscript: 'Dedesubt', + superscript: 'Deasupra', + hyperlink: 'Hyperlink', + toggleFullscreen: 'Comută ecran complet', + quote: 'Citat', + left: 'Aliniere la stânga', + center: 'Aliniere la centru', + right: 'Aliniere la dreapta', + justify: 'Aliniere totală', + print: 'Tipărește', + outdent: 'Scade spațierea', + indent: 'Crește spațierea', + removeFormat: 'Îndepărtează formatările', + formatting: 'Formatare', + fontSize: 'Mărime font', + align: 'Aliniază', + hr: 'Adaugă linie orizontală', + undo: 'Schimbă inapoi', + redo: 'Refă', + heading1: 'Heading 1', + heading2: 'Heading 2', + heading3: 'Heading 3', + heading4: 'Heading 4', + heading5: 'Heading 5', + heading6: 'Heading 6', + paragraph: 'Paragraf', + code: 'Cod', + size1: 'Foarte mic', + size2: 'Mic', + size3: 'Normal', + size4: 'Mediu-mare', + size5: 'Big', + size6: 'Foarte mare', + size7: 'Maxim', + defaultFont: 'Font implicit', + viewSource: 'Vizualizare sursă' + }, + tree: { + noNodes: 'Nu sunt date disponibile', + noResults: 'Nu am găsit noduri care să corespundă' + } +} diff --git a/lang/ru.js b/lang/ru.js new file mode 100644 index 00000000000..03fd6586407 --- /dev/null +++ b/lang/ru.js @@ -0,0 +1,99 @@ +function plurals (n, opts) { + return opts[n % 10 === 1 && n % 100 !== 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2] +} + +export default { + isoName: 'ru', + nativeName: 'русский', + label: { + clear: 'Очистить', + ok: 'OK', + cancel: 'Отмена', + close: 'Закрыть', + set: 'Установить', + select: 'Выбрать', + reset: 'Сбросить', + remove: 'Удалить', + update: 'Обновить', + create: 'Создать', + search: 'Поиск', + filter: 'Фильтр', + refresh: 'Обновить', + expand: function (label) { return label ? `Расширьте "${label}"` : 'Расширять' }, + collapse: function (label) { return label ? `Свернуть "${label}"` : 'Крах' } + }, + date: { + days: 'Воскресенье_Понедельник_Вторник_Среда_Четверг_Пятница_Суббота'.split('_'), + daysShort: 'Вс_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'), + months: 'Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь'.split('_'), + monthsShort: 'Янв_Фев_Мар_Апр_Май_Июн_Июл_Авг_Сен_Окт_Ноя_Дек'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'дней' + }, + table: { + noData: 'Нет данных', + noResults: 'Совпадений не найдено', + loading: 'Загрузка...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' ' + plurals(rows, ['строка выбрана', 'строки выбраны', 'строк выбрано']) + '.' + : 'Ни одна строка не выбрана.' + }, + recordsPerPage: 'Строк на странице:', + allRows: 'Все', + pagination: function (start, end, total) { + return start + '-' + end + ' из ' + total + }, + columns: 'Колонки' + }, + editor: { + url: 'URL', + bold: 'Полужирный', + italic: 'Курсив', + strikethrough: 'Зачеркнутый', + underline: 'Подчеркнутый', + unorderedList: 'Маркированный список', + orderedList: 'Нумерованный список', + subscript: 'Подстрочный', + superscript: 'Надстрочный', + hyperlink: 'Гиперссылка', + toggleFullscreen: 'Полноэкранный режим', + quote: 'Цитата', + left: 'Выравнивание по левому краю', + center: 'Выравнивание по центру', + right: 'Выравнивание по правому краю', + justify: 'Выравнивание по ширине', + print: 'Печать', + outdent: 'Уменьшить отступ', + indent: 'Увеличить отступ', + removeFormat: 'Удалить форматирование', + formatting: 'Форматирование', + fontSize: 'Размер шрифта', + align: 'Выравнивание', + hr: 'Вставить горизонтальную линию', + undo: 'Отменить', + redo: 'Повторить', + heading1: 'Заголовок 1', + heading2: 'Заголовок 2', + heading3: 'Заголовок 3', + heading4: 'Заголовок 4', + heading5: 'Заголовок 5', + heading6: 'Заголовок 6', + paragraph: 'Параграф', + code: 'Код', + size1: 'Очень маленький', + size2: 'Маленький', + size3: 'Нормальный', + size4: 'Средний', + size5: 'Большой', + size6: 'Очень большой', + size7: 'Огромный', + defaultFont: 'Шрифт по умолчанию', + viewSource: 'Просмотреть исходный код' + }, + tree: { + noNodes: 'Нет доступных узлов', + noResults: 'Совпадений не найдено' + } +} diff --git a/lang/sk.js b/lang/sk.js new file mode 100644 index 00000000000..8678d0bed55 --- /dev/null +++ b/lang/sk.js @@ -0,0 +1,95 @@ +export default { + isoName: 'sk', + nativeName: 'Slovenčina', + label: { + clear: 'Vymazať', + ok: 'OK', + cancel: 'Zrušiť', + close: 'Zavrieť', + set: 'Nastaviť', + select: 'Vybrať', + reset: 'Resetovať', + remove: 'Odstrániť', + update: 'Upraviť', + create: 'Vytvoriť', + search: 'Hľadať', + filter: 'Filtrovať', + refresh: 'Obnoviť', + expand: function (label) { return label ? `Rozbaliť "${label}"` : 'Rozbaliť' }, + collapse: function (label) { return label ? `Zbaliť "${label}"` : 'Kolaps' } + }, + date: { + days: 'Nedeľa_Pondelok_Utorok_Streda_Štvrtok_Piatok_Sobota'.split('_'), + daysShort: 'Ned_Pon_Uto_Str_Štv_Pia_Sob'.split('_'), + months: 'Január_Február_Marec_Apríl_Máj_Jún_Júl_August_September_Október_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Máj_Jún_Júl_Aug_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dní' + }, + table: { + noData: 'Nie sú dostupné údaje', + noResults: 'Neboli nájdené vyhovujúce záznamy', + loading: 'Načítavam...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' ' + (rows === 1 ? 'riadok vybratý' : (rows < 5 ? 'riadky vybraté' : 'riadkov vybratých')) + '.' + : 'Žiadne vybraté riadky.' + }, + recordsPerPage: 'Riadkov na stránku:', + allRows: 'Všetky', + pagination: function (start, end, total) { + return start + '-' + end + ' z ' + total + }, + columns: 'Stĺpce' + }, + editor: { + url: 'URL', + bold: 'Tučné', + italic: 'Kurzíva', + strikethrough: 'Prečiarknuté', + underline: 'Podčiarknuté', + unorderedList: 'Odrážky', + orderedList: 'Číslovanie', + subscript: 'Dolný index', + superscript: 'Horný index', + hyperlink: 'Odkaz', + toggleFullscreen: 'Prepnúť na celú obrazovku', + quote: 'Citovať', + left: 'Zarovnať doľava', + center: 'Centrovať', + right: 'Zarovnať doprava', + justify: 'Zarovnať podľa okrajov', + print: 'Tlačiť', + outdent: 'Zmenšiť odsadenie', + indent: 'Zväčšiť odsadenie', + removeFormat: 'Odstrániť formátovanie', + formatting: 'Formátovanie', + fontSize: 'Veľkosť písma', + align: 'Zarovnať', + hr: 'Vložiť horizontálny oddelovač', + undo: 'Späť', + redo: 'Znova', + heading1: 'Hlavička 1', + heading2: 'Hlavička 2', + heading3: 'Hlavička 3', + heading4: 'Hlavička 4', + heading5: 'Hlavička 5', + heading6: 'Hlavička 6', + paragraph: 'Odsek', + code: 'Kód', + size1: 'Veľmi malé', + size2: 'Malé', + size3: 'Normálne', + size4: 'Stredne veľké', + size5: 'Veľké', + size6: 'Veľmi veľké', + size7: 'Maximálne', + defaultFont: 'Predvolené písmo', + viewSource: 'Zdroj pohladu' + }, + tree: { + noNodes: 'Nie sú dostupné vetvy', + noResults: 'Neboli nájdené vyhovujúce vetvy' + } +} diff --git a/lang/sl.js b/lang/sl.js new file mode 100644 index 00000000000..71f71a5d2e5 --- /dev/null +++ b/lang/sl.js @@ -0,0 +1,95 @@ +export default { + isoName: 'sl', + nativeName: 'Slovenski Jezik', + label: { + clear: 'Počisti', + ok: 'Vredu', + cancel: 'Prekliči', + close: 'Zapri', + set: 'Postavi', + select: 'Izberi', + reset: 'Obnovi', + remove: 'Odstrani', + update: 'Posodobi', + create: 'Ustvari', + search: 'Išči', + filter: 'Filtriraj', + refresh: 'Ponovno naloži', + expand: function (label) { return label ? `Razširi "${label}"` : 'Razširi' }, + collapse: function (label) { return label ? `Strni "${label}"` : 'Strni' } + }, + date: { + days: 'Nedelja_Ponedeljek_Torek_Sreda_Četrtek_Petek_Sobota'.split('_'), + daysShort: 'Ned_Pon_Tor_Sre_Čet_Pet_Sob'.split('_'), + months: 'Januar_Februar_Marec_April_Maj_Junij_Julij_Avgust_September_Oktober_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Maj_Jun_Jul_Avg_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Nedelja, 1 Ponedeljek, ... + format24h: true, + pluralDay: 'dni' + }, + table: { + noData: 'Ni dosegljivih podatkov', + noResults: 'Ne najdem ustreznic', + loading: 'Nalagam...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 izbrana vrstica.' + : (rows === 2 ? '2 izbrani vrstici.' : (rows === 0 ? 'Ni' : rows) + ' izbranih vrstic.') + }, + recordsPerPage: 'Vrstic na stran:', + allRows: 'Vse', + pagination: function (start, end, total) { + return start + '-' + end + ' od ' + total + }, + columns: 'Stolpci' + }, + editor: { + url: 'URL', + bold: 'Krepko', + italic: 'Ležeče', + strikethrough: 'Prečrtano', + underline: 'Podčrtaj', + unorderedList: 'Neoštevilčen seznam', + orderedList: 'Oštevilčen seznam', + subscript: 'Podpisano', + superscript: 'Nadpisano', + hyperlink: 'Hiper povezava', + toggleFullscreen: 'Preklopi celoten zaslon', + quote: 'Citat', + left: 'Poravnaj levo', + center: 'Poravnaj na sredino', + right: 'Poravnaj desno', + justify: 'Obojestranska poravnava', + print: 'Natisni', + outdent: 'Zmanjšaj zamik', + indent: 'Povečaj zamik', + removeFormat: 'Odstrani formatiranje', + formatting: 'Formatiranje', + fontSize: 'Velikost pisave', + align: 'Poravnava', + hr: 'Vstavi horizontalno pravilo', + undo: 'Razveljavi', + redo: 'Uveljavi', + heading1: 'Naslov 1', + heading2: 'Naslov 2', + heading3: 'Naslov 3', + heading4: 'Naslov 4', + heading5: 'Naslov 5', + heading6: 'Naslov 6', + paragraph: 'Odstavek', + code: 'Koda', + size1: 'Najmanjše', + size2: 'Manjše', + size3: 'Običajna velikost', + size4: 'Srednje veliko', + size5: 'Veliko', + size6: 'Večje', + size7: 'Največje', + defaultFont: 'Privzeta pisava', + viewSource: 'Prikaži vir' + }, + tree: { + noNodes: 'Ni dosegljivih vozlišč', + noResults: 'Ne najdem ustreznih vozlišč' + } +} diff --git a/lang/sm.js b/lang/sm.js new file mode 100644 index 00000000000..8e3de81f006 --- /dev/null +++ b/lang/sm.js @@ -0,0 +1,95 @@ +export default { + isoName: 'sm', + nativeName: 'Fa\'asāmoa', + label: { + clear: 'Kilia', + ok: '\'Oukei', + cancel: 'Fa\'alēaogāina', + close: 'Tapuni', + set: 'Seti', + select: 'Filifili', + reset: 'Toe seti', + remove: '\'Ave\'ese', + update: 'Fa\'afou', + create: 'Fatu', + search: 'Sā\'ili', + filter: 'Fa\'amamā', + refresh: 'Fa\'afou', + expand: function (label) { return label ? `Fa'alautele "${label}"` : 'Faalautele' }, + collapse: function (label) { return label ? `Pa'u "${label}"` : 'Pa\'u' } + }, + date: { + days: 'Aso Sā_Aso Gafua_Aso Lua_Aso Lulu_Aso Tofi_Aso Faraile_Aso To\'onai'.split('_'), + daysShort: 'Sā_Gaf_Lua_Lul_Tof_Far_Too'.split('_'), + months: 'Ianuari_Fepuari_Mati_\'Aperila_Mē_Iuni_Iulai_\'Aokuso_Sētema_\'Oketopa_Nōvema_Tēsema'.split('_'), + monthsShort: 'Ian_Fep_Mat_Ape_Mē_Iun_Iul_Auk_Sēt_Oke_Nōv_Tēs'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'aso' + }, + table: { + noData: 'Lēai ni fa\'amatalaga o maua', + noResults: 'Lēai ni fa\'amaumauga na maua', + loading: '\'Āmatalia...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 le laina \'ua filifilia.' + : (rows === 0 ? 'Lēai ni' : rows) + ' laina \'ua filifilia.' + }, + recordsPerPage: 'Laina \'i le ītūlau:', + allRows: 'Laina \'uma', + pagination: function (start, end, total) { + return start + '-' + end + ' o ' + total + }, + columns: 'Poutū' + }, + editor: { + url: 'Tuātusi initaneti', + bold: 'Fa\'aolaola', + italic: 'Fa\'api\'o', + strikethrough: 'Kolosi', + underline: 'Vase lalo', + unorderedList: 'Lisi \'e fe\'i fa\'atulagaina', + orderedList: 'Lisi \'ua fa\'atulagaina', + subscript: 'Fa\'anini\'i i lalo', + superscript: 'Fa\'anini\'i i luga', + hyperlink: 'So\'otaga initaneti', + toggleFullscreen: 'Fa\'atelē ma fa\'alititi le va\'ai', + quote: 'Saunoaga', + left: 'Ōgatasi agavale', + center: 'Ōgatasi \'ogātotonu', + right: 'Ōgatasi taumatau', + justify: 'Ōgatasi lautele', + print: 'Lolomi', + outdent: 'Fa\'alaititi le va', + indent: 'Fa\'atelē le va', + removeFormat: '\'Ave\'ese le fa\'atulagaga', + formatting: 'Fa\'atulagaga', + fontSize: 'Telē o le mata\'itusi', + align: 'Ōgatasi', + hr: 'Fa\'aopoopo se laina', + undo: 'Toe \'ave\'ese', + redo: 'Toe fai', + heading1: 'Ulutala 1', + heading2: 'Ulutala 2', + heading3: 'Ulutala 3', + heading4: 'Ulutala 4', + heading5: 'Ulutala 5', + heading6: 'Ulutala 6', + paragraph: 'Palakalafa', + code: 'Fa\'ailo fa\'akomepiuta', + size1: 'Matuā laitiiti', + size2: 'Fa\'alaititi', + size3: 'Tūlaga masani', + size4: 'Lāpo\'a feololo', + size5: 'Lāpo\'a', + size6: 'Lāpo\'a atu', + size7: 'Pito i lāpo\'a', + defaultFont: 'Foliga fou ole mata\'itusi', + viewSource: 'Va\'ai \'ile tusitusiga fa\'akomepiuta' + }, + tree: { + noNodes: 'Lēai ni vāega o maua', + noResults: 'Lēai ni vāega na maua' + } +} diff --git a/lang/sr.js b/lang/sr.js new file mode 100644 index 00000000000..d8c87ef9e12 --- /dev/null +++ b/lang/sr.js @@ -0,0 +1,95 @@ +export default { + isoName: 'sr', + nativeName: 'srpski jezik', + label: { + clear: 'Obriši', + ok: 'OK', + cancel: 'Odustani', + close: 'Zatvori', + set: 'Postavi', + select: 'Izaberi', + reset: 'Poništi', + remove: 'Ukloni', + update: 'Ažuriraj', + create: 'Dodaj', + search: 'Traži', + filter: 'Filter', + refresh: 'Osveži', + expand: function (label) { return label ? `Proširi "${label}"` : 'Proširiti' }, + collapse: function (label) { return label ? `Skupi "${label}"` : 'Skupiti' } + }, + date: { + days: 'Nedelja_Ponedeljak_Utorak_Sreda_Četvrtak_Petak_Subota'.split('_'), + daysShort: 'Ned_Pon_Uto_Sre_Čet_Pet_Sub'.split('_'), + months: 'Januar_Februar_Mart_April_Maj_Jun_Jul_Avgust_Septembar_Oktobar_Novembar_Decembar'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Maj_Jun_Jul_Avg_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dana' + }, + table: { + noData: 'Nema podataka', + noResults: 'Nema odgovarajućih zapisa', + loading: 'Učitavanje...', + selectedRecords: function (rows) { + return rows > 1 + ? rows + ' izabranih redova.' + : (rows === 0 ? 'Nema' : '1') + ' izabranih redova.' + }, + recordsPerPage: 'Redova po stranici:', + allRows: 'Sve', + pagination: function (start, end, total) { + return start + '-' + end + ' od ' + total + }, + columns: 'Kolone' + }, + editor: { + url: 'URL', + bold: 'Podebljano', + italic: 'Nakošeno', + strikethrough: 'Precrtano', + underline: 'Podcrtano', + unorderedList: 'Označena lista', + orderedList: 'Numerisana lista', + subscript: 'Potpisano', + superscript: 'Natpisano', + hyperlink: 'Hiperlink', + toggleFullscreen: 'Ceo ekran', + quote: 'Citat', + left: 'Poravnati ulevo', + center: 'Centrirati', + right: 'Poravnati udesno', + justify: 'Poravnati obostrano', + print: 'Štampa', + outdent: 'Smanjiti uvlačenje', + indent: 'Povećati uvlačenje', + removeFormat: 'Ukloniti formatiranje', + formatting: 'Formatirati', + fontSize: 'Veličina slova', + align: 'Poravnati', + hr: 'Ubaciti horizontalnu liniju', + undo: 'Poništiti', + redo: 'Vratiti', + heading1: 'Naslov 1', + heading2: 'Naslov 2', + heading3: 'Naslov 3', + heading4: 'Naslov 4', + heading5: 'Naslov 5', + heading6: 'Naslov 6', + paragraph: 'Paragraf', + code: 'Kod', + size1: 'Najmanje', + size2: 'Manje', + size3: 'Normalno', + size4: 'Srednje Veliko', + size5: 'Veliko', + size6: 'Veće', + size7: 'Najveće', + defaultFont: 'Podrazumevani font', + viewSource: 'Pogledaj izvor' + }, + tree: { + noNodes: 'Nema nijednog čvora', + noResults: 'Nema odgovarajućih čvorova' + } +} diff --git a/lang/sv.js b/lang/sv.js new file mode 100644 index 00000000000..bf3a2cbe921 --- /dev/null +++ b/lang/sv.js @@ -0,0 +1,95 @@ +export default { + isoName: 'sv', + nativeName: 'Svenska', + label: { + clear: 'Rensa', + ok: 'OK', + cancel: 'Avbryt', + close: 'Stäng', + set: 'Sätt', + select: 'Välj', + reset: 'Nollställ', + remove: 'Ta bort', + update: 'Uppdatera', + create: 'Skapa', + search: 'Sök', + filter: 'Filtrera', + refresh: 'Uppdatera', + expand: function (label) { return label ? `Utöka "${label}"` : 'Bygga ut' }, + collapse: function (label) { return label ? `Komprimera "${label}"` : 'Kollaps' } + }, + date: { + days: 'Söndag_Måndag_Tisdag_Onsdag_Torsdag_Fredag_Lördag'.split('_'), + daysShort: 'Sön_Mån_Tis_Ons_Tor_Fre_Lör'.split('_'), + months: 'Januari_Februari_Mars_April_Maj_Juni_Juli_Augusti_September_Oktober_November_December'.split('_'), + monthsShort: 'Jan_Feb_Mar_Apr_Maj_Jun_Jul_Aug_Sep_Okt_Nov_Dec'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'dagar' + }, + table: { + noData: 'Ingen data tillgänglig', + noResults: 'Inget resultat matchar', + loading: 'Laddar...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 vald rad.' + : (rows === 0 ? 'Inga' : rows) + ' valda rader.' + }, + recordsPerPage: 'Rader per sida:', + allRows: 'Alla', + pagination: function (start, end, total) { + return start + '-' + end + ' av ' + total + }, + columns: 'Kolumner' + }, + editor: { + url: 'URL', + bold: 'Fet', + italic: 'Kursiv', + strikethrough: 'Genomstruken', + underline: 'Understruken', + unorderedList: 'Punktlista', + orderedList: 'Numrerad lista', + subscript: 'Nedsänkt', + superscript: 'Upphöjt', + hyperlink: 'Länk', + toggleFullscreen: 'Växla helskärm', + quote: 'Citat', + left: 'Vänsterjustera', + center: 'Centrera', + right: 'Högerjustera', + justify: 'Justera', + print: 'Skriv ut', + outdent: 'Minska indrag', + indent: 'Öka indrag', + removeFormat: 'Ta bort formatering', + formatting: 'Formatering', + fontSize: 'Teckenstorlek', + align: 'Justera', + hr: 'Infoga vågrät linje', + undo: 'Ångra', + redo: 'Gör om', + heading1: 'Rubrik 1', + heading2: 'Rubrik 2', + heading3: 'Rubrik 3', + heading4: 'Rubrik 4', + heading5: 'Rubrik 5', + heading6: 'Rubrik 6', + paragraph: 'Stycke', + code: 'Kod', + size1: 'Väldigt liten', + size2: 'Liten', + size3: 'Normal', + size4: 'Större än normal', + size5: 'Stor', + size6: 'Väldigt stor', + size7: 'Maximalt stor', + defaultFont: 'Standardteckensnitt', + viewSource: 'Visa källa' + }, + tree: { + noNodes: 'Inga noder tillgängliga', + noResults: 'Inga noder matchar' + } +} diff --git a/lang/ta.js b/lang/ta.js new file mode 100644 index 00000000000..200a4ad1184 --- /dev/null +++ b/lang/ta.js @@ -0,0 +1,95 @@ +export default { + isoName: 'ta', + nativeName: 'தமிழ்', + label: { + clear: 'அகற்று', + ok: 'சரி', + cancel: 'ரத்து', + close: 'மூடு', + set: 'அமை', + select: 'தேர்ந்தெடு', + reset: 'மீட்டமை', + remove: 'நீக்கு', + update: 'மேம்படுத்து', + create: 'உருவாக்கு', + search: 'தேடு', + filter: 'வடிகட்டு', + refresh: 'புதுப்பி', + expand: function (label) { return label ? `"${label}" ஐ விரிவாக்கு` : 'விரிவாக்கு' }, + collapse: function (label) { return label ? `"${label}" ஐச் சுருக்கு` : 'சுருக்கு' } + }, + date: { + days: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'), + daysShort: 'ஞாயி_திங்_செவ்_புத_வியா_வெள்_சனி'.split('_'), + months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'), + monthsShort: 'ஜன_பிப்_மார்_ஏப்_மே_ஜூன்_ஜூலை_ஆக_செப்_அக்_நவ_டிச'.split('_'), + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'நாட்கள்' + }, + table: { + noData: 'தரவு எதுவும் கிடைக்கவில்லை', + noResults: 'பொருந்தும் பதிவுகள் எதுவும் கிடைக்கவில்லை', + loading: 'ஏற்றுகிறது...', + selectedRecords: function (rows) { + return rows === 1 + ? '1 பதிவு தேர்ந்தெடுக்கப்பட்டது.' + : (rows === 0 ? '0' : rows) + ' பதிவு தேர்ந்தெடுக்கப்பட்டது.' + }, + recordsPerPage: 'ஒரு பக்கத்திற்கு பதிவுகள்:', + allRows: 'அனைத்தும்', + pagination: function (start, end, total) { + return start + '-' + end + ' மொத்தம் ' + total + }, + columns: 'பத்திகள்' + }, + editor: { + url: 'URL', + bold: 'தடித்த', + italic: 'சாய்ந்த', + strikethrough: 'குறுக்குக்கோடு', + underline: 'அடிக்கோடு', + unorderedList: 'வரிசையற்ற பட்டியல்', + orderedList: 'வரிசையுள்ள பட்டியல்', + subscript: 'கீழ்க்குறியீடு', + superscript: 'மேல்குறியீடு', + hyperlink: 'மிகையிணைப்பு', + toggleFullscreen: 'முழுத்திரை மாற்றம்', + quote: 'மேற்கோள்', + left: 'இடது சீரமை', + center: 'மைய சீரமை', + right: 'வலது சீரமை', + justify: 'உள்ளடக்க சீரமை', + print: 'அச்சு', + outdent: 'உள்தள்ளலைக் குறைக்கவும்', + indent: 'உள்தள்ளலை அதிகரிக்கவும்', + removeFormat: 'வடிவமைப்பை அகற்று', + formatting: 'வடிவமைப்பு', + fontSize: 'எழுத்துரு அளவு', + align: 'சீரமை', + hr: 'படுக்கைவாட்டு கொடு', + undo: 'செயல்தவிர்', + redo: 'மீண்டும் செய்', + heading1: 'தலைப்பு 1', + heading2: 'தலைப்பு 2', + heading3: 'தலைப்பு 3', + heading4: 'தலைப்பு 4', + heading5: 'தலைப்பு 5', + heading6: 'தலைப்பு 6', + paragraph: 'பத்தி', + code: 'குறியீடு', + size1: 'மிகவும் சிறியது', + size2: 'சிறியது', + size3: 'இயல்பான', + size4: 'நடுத்தர பெரியது', + size5: 'பெரியது', + size6: 'மிகவும் பெரியது', + size7: 'அதிகபட்ச', + defaultFont: 'இயல்புநிலை எழுத்துரு', + viewSource: 'மூலத்தை பார்' + }, + tree: { + noNodes: 'முனைகள் எதுவும் கிடைக்கவில்லை', + noResults: 'பொருந்தும் முனைகள் எதுவும் கிடைக்கவில்லை' + } +} diff --git a/lang/th.js b/lang/th.js new file mode 100644 index 00000000000..b2cb021fc8c --- /dev/null +++ b/lang/th.js @@ -0,0 +1,95 @@ +export default { + isoName: 'th', + nativeName: 'ไทย', + label: { + clear: 'ล้าง', + ok: 'ตกลง', + cancel: 'ยกเลิก', + close: 'ปิด', + set: 'ตั้งค่า', + select: 'เลือก', + reset: 'ตั้งใหม่', + remove: 'ลบ', + update: 'ปรับปรุง', + create: 'สร้าง', + search: 'ค้นหา', + filter: 'กรอง', + refresh: 'รีเฟรช', + expand: function (label) { return label ? `ขยาย "${label}"` : 'ขยาย' }, + collapse: function (label) { return label ? `ยุบ "${label}"` : 'ทรุด' } + }, + date: { + days: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'), + daysShort: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'), + months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'), + monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'วัน' + }, + table: { + noData: 'ไม่มีข้อมูล', + noResults: 'ไม่มีผลลัพธ์', + loading: 'กำลังโหลด...', + selectedRecords: function (rows) { + return rows > 0 + ? 'เลือกทั้งหมด ' + rows + ' แถว' + : 'ไม่มีแถวที่ถูกเลือก' + }, + recordsPerPage: 'แถวต่อหน้า:', + allRows: 'แถวทั้งหมด', + pagination: function (start, end, total) { + return start + '-' + end + ' of ' + total + }, + columns: 'คอลัมน์' + }, + editor: { + url: 'URL', + bold: 'ตัวหนา', + italic: 'ตัวเอียง', + strikethrough: 'เส้นคร่อม', + underline: 'เส้นใต้', + unorderedList: 'รายการ', + orderedList: 'ลำดับรายการ', + subscript: 'ตัวห้อย', + superscript: 'ตัวยก', + hyperlink: 'ไฮเปอร์ลิงค์', + toggleFullscreen: 'สลับเต็มจอ', + quote: 'อ้างอิง', + left: 'ชิดซ้าย', + center: 'แนวกลาง', + right: 'ชิดขวา', + justify: 'ชิดขอบ', + print: 'พิมพ์', + outdent: 'ลดย่อหน้า', + indent: 'เพิ่มย่อหน้า', + removeFormat: 'ล้างรูปแบบ', + formatting: 'จัดรูปแบบ', + fontSize: 'ขนาดอักษร', + align: 'แนว', + hr: 'เพิ่มเส้นขั้นบรรทัด', + undo: 'ยกเลิก', + redo: 'ทำซ้ำ', + heading1: 'หัวข้อ 1', + heading2: 'หัวข้อ 2', + heading3: 'หัวข้อ 3', + heading4: 'หัวข้อ 4', + heading5: 'หัวข้อ 5', + heading6: 'หัวข้อ 6', + paragraph: 'ย่อหน้า', + code: 'โค้ด', + size1: 'เล็กมาก', + size2: 'เล็ก', + size3: 'ปกติ', + size4: 'ใหญ่กว่าปกติ', + size5: 'ใหญ่', + size6: 'ใหญ่มาก', + size7: 'ใหญ่เต็มที่', + defaultFont: 'ฟอนต์มาตรฐาน', + viewSource: 'ดูที่มา' + }, + tree: { + noNodes: 'ไม่มีโหนด', + noResults: 'ไม่พบโหนดตามที่ระบุ' + } +} diff --git a/lang/tr.js b/lang/tr.js new file mode 100644 index 00000000000..4bee857242e --- /dev/null +++ b/lang/tr.js @@ -0,0 +1,93 @@ +export default { + isoName: 'tr', + nativeName: 'Türkçe', + label: { + clear: 'Temizle', + ok: 'Tamam', + cancel: 'İptal', + close: 'Kapat', + set: 'Ayarla', + select: 'Seç', + reset: 'Sıfırla', + remove: 'Kaldır', + update: 'Güncelle', + create: 'Oluştur', + search: 'Ara', + filter: 'Süz', + refresh: 'Yenile', + expand: function (label) { return label ? `"${label}" genişlet` : 'Genişletmek' }, + collapse: function (label) { return label ? `"${label}" daralt` : 'Yıkılmak' } + }, + date: { + days: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'), + daysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'), + months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'), + monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'gün' + }, + table: { + noData: 'Veri yok', + noResults: 'Uyuşan kayıt bulunamadı', + loading: 'Yükleniyor...', + selectedRecords: function (rows) { + return rows + ' seçili kayıt.' + }, + recordsPerPage: 'Sayfa başına kayıt:', + allRows: 'Tümü', + pagination: function (start, end, total) { + return start + '-' + end + ' toplam ' + total + }, + columns: 'Sütunlar' + }, + editor: { + url: 'URL', + bold: 'Kalın', + italic: 'Eğik', + strikethrough: 'Üstü çizili', + underline: 'Altı çizili', + unorderedList: 'Sırasız Liste', + orderedList: 'Sıralı Liste', + subscript: 'Alt betik', + superscript: 'Üst betik', + hyperlink: 'Köprü', + toggleFullscreen: 'Tam ekranı Aç-Kapa', + quote: 'Alıntı', + left: 'Sola hizala', + center: 'Ortala', + right: 'Sağa hizala', + justify: 'Sığdır', + print: 'Yazdır', + outdent: 'Girintiyi azalt', + indent: 'Girintiyi artır', + removeFormat: 'Biçimlendirmeyi kaldır', + formatting: 'Biçimliyor', + fontSize: 'Yazı Tipi Boyutu', + align: 'Hizala', + hr: 'Yatay Çizgi Ekle', + undo: 'Geri Al', + redo: 'Yinele', + heading1: 'Başlık 1', + heading2: 'Başlık 2', + heading3: 'Başlık 3', + heading4: 'Başlık 4', + heading5: 'Başlık 5', + heading6: 'Başlık 6', + paragraph: 'Paragraf', + code: 'Kod', + size1: 'Çok küçük', + size2: 'Küçük', + size3: 'Normal', + size4: 'Orta-geniş', + size5: 'Büyük', + size6: 'Çok büyük', + size7: 'En büyük', + defaultFont: 'Varsayılan Yazı Tipi', + viewSource: 'Kaynağı Görüntüle' + }, + tree: { + noNodes: 'Düğüm yok', + noResults: 'Uyuşan düğüm bulunamadı' + } +} diff --git a/lang/ug.js b/lang/ug.js new file mode 100644 index 00000000000..aaeb17a7264 --- /dev/null +++ b/lang/ug.js @@ -0,0 +1,99 @@ +const days = 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە_يەكشەنبە'.split('_') + +export default { + isoName: 'ug', + nativeName: 'ئۇيغۇرچە', + rtl: true, + label: { + clear: 'تازىلاش', + ok: 'ھەئە', + cancel: 'بولدىلا', + close: 'تاقاش', + set: 'تەڭشەش', + select: 'تاللاش', + reset: 'ئەسلىگە قايتۇرۇش', + remove: 'چىقىرىۋېتىش', + update: 'نەشىر يېڭىلاش', + create: 'قۇرۇش', + search: 'ئىزدەش', + filter: 'سۈزگۈچ', + refresh: 'يېڭىلاش', + expand: function (label) { return label ? `نى كېڭەيتىڭ "${label}"` : 'كېڭەيتىش' }, + collapse: function (label) { return label ? `نى يىمىرىڭ "${label}"` : 'كېڭەيتىش' } + }, + date: { + days, + daysShort: 'ي_د_س_چ_پ_ج_ش'.split('_'), + months: 'يانۋار(1)_فېۋرال(2)_مارت(3)_ئاپرىل(4)_ماي(5)_ئىيۇن(6)_ئىيۇل(7)_ئاۋغۇست (8)_سېنتەبىر(9)_ئۆكتەبىر(10)_نويابىر(11)_دېكابىر(12)'.split('_'), + monthsShort: '1-ئاي_2-ئاي_3-ئاي_4-ئاي_5-ئاي_6-ئاي_7-ئاي_8-ئاي_9-ئاي_10-ئاي_11-ئاي_12-ئاي'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + headerTitle: function (date, model) { + return model.month + '-ئاينىڭ ' + model.day + '-كۈنى ، ' + days[ date.getDay() ] + }, + pluralDay: 'كۈن' + }, + table: { + noData: 'ئۇچۇر يوق', + noResults: 'مۇناسىۋەتلىك ئۇچۇر تېپىلمىدى', + loading: 'يۈكلىنىۋاتىدۇ ...', + selectedRecords: function (rows) { + return 'جەمئىي ' + rows + ' قۇر تاللاندى' + }, + recordsPerPage: 'ھەربەتتىكى قۇر سانى:', + allRows: 'ھەممىسى', + pagination: function (start, end, total) { + return start + '-' + end + ' / ' + total + }, + columns: 'ئىستون' + }, + editor: { + url: 'URL', + bold: 'توم', + italic: 'يانتۇ', + strikethrough: 'جىجاش', + underline: 'ئاستى سىزىق', + unorderedList: 'تەرتىپسىز', + orderedList: 'تەرتىپلىك', + subscript: 'تۆۋەن ئىندېكىس', + superscript: 'يۇقىرى ئىندېكىس', + hyperlink: 'ئۇلانما', + toggleFullscreen: 'پۈتۈن ئېكران', + quote: 'نەقىل', + left: 'سولغا توغرىلاش', + center: 'ئوتتۇرىغا توغرىلاش', + right: 'ئوڭغا توغرىلاش', + justify: 'ئىككى يانغا توغرىلاش', + print: 'بېسىپ چىقىرىش', + outdent: 'كېڭەيتىش', + indent: 'تارايتىش', + removeFormat: 'فورماتىنى چىقىرىۋېتىش', + formatting: 'فورماتلاش', + fontSize: 'خەت چوڭلىقى', + align: 'توغرىلاش', + hr: 'توغرا سىزىق', + undo: 'قايتۇرۇش', + redo: 'قايتىلاش', + heading1: 'تىما 1', + heading2: 'تىما 2', + heading3: 'تىما 3', + heading4: 'تىما 4', + heading5: 'تىما 5', + heading6: 'تىما 6', + paragraph: 'ئابزاس', + code: 'كود', + size1: 'كىچىك', + size2: 'كىچىكراق', + size3: 'نورمال', + size4: 'چوڭراق', + size5: 'چوڭ', + size6: 'ئىنتايىن چوڭ', + size7: 'ئەڭ چوڭ', + defaultFont: 'كۆڭۈلدىكى خەت نۇسخىسى', + viewSource: 'مەنبەنى كۆرۈش' + }, + tree: { + noNodes: 'تۈگۈن يوق', + noResults: 'ئۇچۇر يوق' + } +} diff --git a/lang/uk.js b/lang/uk.js new file mode 100644 index 00000000000..6281453b0e7 --- /dev/null +++ b/lang/uk.js @@ -0,0 +1,99 @@ +function plurals (n, opts) { + return opts[n % 10 === 1 && n % 100 !== 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2] +} + +export default { + isoName: 'uk', + nativeName: 'Українська', + label: { + clear: 'Очистити', + ok: 'OK', + cancel: 'Скасувати', + close: 'Закрити', + set: 'Встановити', + select: 'Обрати', + reset: 'Скинути', + remove: 'Видалити', + update: 'Оновити', + create: 'Створити', + search: 'Пошук', + filter: 'Фільтр', + refresh: 'Оновити', + expand: function (label) { return label ? `Розгорнути "${label}"` : 'Розгорнути' }, + collapse: function (label) { return label ? `Згорнути "${label}"` : 'Згорнути' } + }, + date: { + days: 'Неділя_Понеділок_Вівторок_Середа_Четвер_П`ятниця_Субота'.split('_'), + daysShort: 'Нд_Пн_Вт_Ср_Чт_Пт_Сб'.split('_'), + months: 'Січень_Лютий_Березень_Квітень_Травень_Червень_Липень_Серпень_Вересень_Жовтень_Листопад_Грудень'.split('_'), + monthsShort: 'Січ_Лют_Бер_Кві_Тра_Чер_Лип_Сер_Вер_Жов_Лис_Гру'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: true, + pluralDay: 'днів' + }, + table: { + noData: 'Немає даних', + noResults: 'Співпадінь не знайдено', + loading: 'Завантаження...', + selectedRecords: function (rows) { + return rows > 0 + ? rows + ' ' + plurals(rows, ['рядок обраний', 'рядки обрані', 'рядків обрано']) + '.' + : 'Жодного рядку не обрано.' + }, + recordsPerPage: 'Рядків на сторінці:', + allRows: 'Усі', + pagination: function (start, end, total) { + return start + '-' + end + ' з ' + total + }, + columns: 'Колонки' + }, + editor: { + url: 'URL', + bold: 'Напівжирний', + italic: 'Курсив', + strikethrough: 'Закреслений', + underline: 'Підкреслений', + unorderedList: 'Маркований список', + orderedList: 'Нумерований список', + subscript: 'Підрядковий', + superscript: 'Надрядковий', + hyperlink: 'Гіперпосилання', + toggleFullscreen: 'Повноекранний режим', + quote: 'Цитата', + left: 'Вирівнювання по лівому краю', + center: 'Вирівнювання по центру', + right: 'Вирівнювання по правому краю', + justify: 'Вирівнювання по ширині', + print: 'Друк', + outdent: 'Зменшити відтуп', + indent: 'Збільшити відступ', + removeFormat: 'Видалити форматування', + formatting: 'Форматування', + fontSize: 'Розмір шрифту', + align: 'Вирівнювання', + hr: 'Вставити горизонтальну лінію', + undo: 'Відмінити', + redo: 'Повторити', + heading1: 'Заголовок 1', + heading2: 'Заголовок 2', + heading3: 'Заголовок 3', + heading4: 'Заголовок 4', + heading5: 'Заголовок 5', + heading6: 'Заголовок 6', + paragraph: 'Параграф', + code: 'Код', + size1: 'Дуже маленький', + size2: 'Маленький', + size3: 'Нормальний', + size4: 'Середній', + size5: 'Великий', + size6: 'Дуже великий', + size7: 'Величезний', + defaultFont: 'Шрифт за замовчуванням', + viewSource: 'Переглянути джерело' + }, + tree: { + noNodes: 'Немає доступних вузлів', + noResults: 'Співпадінь не знайдено' + } +} diff --git a/lang/uz-Cyrl.js b/lang/uz-Cyrl.js new file mode 100644 index 00000000000..28ce9700233 --- /dev/null +++ b/lang/uz-Cyrl.js @@ -0,0 +1,95 @@ +export default { + isoName: 'uz-Cyrl', + nativeName: 'Ўзбекча (Кирил)', + label: { + clear: 'Тозалаш', + ok: 'ОК', + cancel: 'Бекор қилиш', + close: 'Ёпиш', + set: 'Ўрнатиш', + select: 'Танлаш', + reset: 'Қайта ўрнатиш', + remove: 'Ўчириш', + update: 'Янгилаш', + create: 'Яратиш', + search: 'Қидириш', + filter: 'Филтрлаш', + refresh: 'Янгилаш', + expand: function (label) { return label ? `"${label}" ни кенгайтириш` : 'ъКенгайтиришъ' }, + collapse: function (label) { return label ? `"${label}" ни йиғиш` : 'ъЙиқилишъ' } + }, + date: { + days: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'), + daysShort: 'Як_Душ_Се_Чор_Пай_Жума_Шанба'.split('_'), + months: + 'Январь_Февраль_Март_Апрель_Май_Июнь_Июль_Август_Сентябрь_Октябрь_Ноябрь_Декабрь'.split( + '_' + ), + monthsShort: 'Ян_Фев_Март_Апр_Май_Июнь_Июль_Авг_Сен_Окт_Ноя_Дек'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Якшанба, 1 Душанба, ... + format24h: true, + pluralDay: 'Кунлар' + }, + table: { + noData: 'Маълумот топилмади', + noResults: 'Қидирув бўйича маълумотлар топилмади', + loading: 'Юкланмоқда...', + selectedRecords: (rows) => + (rows === 1 + ? '1 та маълумот танланди.' + : (rows === 0 ? 'Хеч қандай' : rows) + ' маълумотла танланмади.'), + recordsPerPage: 'Сахифадаги қаторлар:', + allRows: 'Барчаси', + pagination: (start, end, total) => start + '-' + end + ' жами ' + total, + columns: 'Устунлар' + }, + editor: { + url: 'УРЛ', + bold: 'Қалин', + italic: 'Курсив', + strikethrough: 'Чизилган', + underline: 'Тагига чизилган', + unorderedList: 'Тартибсиз руйхат', + orderedList: 'Тартибга киритилган руйхат', + subscript: 'Сатр остида', + superscript: 'Сатр устида', + hyperlink: 'Гиперхавола', + toggleFullscreen: 'Тўлиқ экран режимига ўтиш', + quote: 'Иқтибос', + left: 'Чапга сафлаш', + center: 'Марказга сафлаш', + right: 'Ўнгдан сафлаш', + justify: 'Икки томондан сафлаш', + print: 'Чоп этиш', + outdent: 'Чекинишни камайтириш', + indent: 'Чекинишни кўпайтириш', + removeFormat: 'Форматлашни ўчириб ташлаш', + formatting: 'Форматлаш', + fontSize: 'Шрифт хажми', + align: 'Сафлаш', + hr: 'Горизонтал қоидани киритиш', + undo: 'Бекор қилиш', + redo: 'Такрорлаш', + heading1: 'Сарлавха 1', + heading2: 'Сарлавха 2', + heading3: 'Сарлавха 3', + heading4: 'Сарлавха 4', + heading5: 'Сарлавха 5', + heading6: 'Сарлавха 6', + paragraph: 'Параграф', + code: 'Код', + size1: 'Ўта кичик', + size2: 'Бироз кичик', + size3: 'Оддий', + size4: 'Ўрта катта', + size5: 'Катта', + size6: 'Жуда катта', + size7: 'Максимал', + defaultFont: 'Стандарт шрифт', + viewSource: 'Манбани кўриш' + }, + tree: { + noNodes: 'Кесишмалар мавжуд эмас', + noResults: 'Мос келадиган кесишмалар топилмади' + } +} diff --git a/lang/uz-Latn.js b/lang/uz-Latn.js new file mode 100644 index 00000000000..4b695fdb2d9 --- /dev/null +++ b/lang/uz-Latn.js @@ -0,0 +1,99 @@ +export default { + isoName: 'uz-Latn', + nativeName: 'O\'zbekcha (Lotin)', + label: { + clear: 'Tozalash', + ok: 'OK', + cancel: 'Bekor qilish', + close: 'Yopish', + set: 'O\'rnatish', + select: 'Tanlash', + reset: 'Qayta o\'rnatish', + remove: 'O\'chirish', + update: 'Yangilash', + create: 'Yaratish', + search: 'Qidirish', + filter: 'Filtrlash', + refresh: 'Yangilash', + expand: function (label) { return label ? `"${label}" ni kengaytirish` : 'Kengaytirish' }, + collapse: function (label) { return label ? `"${label}" ni yig'ish` : 'Yiqilish' } + }, + date: { + days: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split( + '_' + ), + daysShort: 'Yak_Du_Se_Chor_Pay_Juma_Shanba'.split('_'), + months: + 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split( + '_' + ), + monthsShort: 'Yan_Fev_Mart_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split( + '_' + ), + firstDayOfWeek: 1, // 0-6, 0 - Yakshanba, 1 Dushanba, ... + format24h: true, + pluralDay: 'Kunlar' + }, + table: { + noData: 'Ma\'lumotlar topilmadi', + noResults: 'Qidiruv bo\'yicha ma\'lumotlar topilmadi', + loading: 'Yuklanmoqda...', + selectedRecords: (rows) => + (rows === 1 + ? '1 ta malumot tanlandi.' + : (rows === 0 ? 'Hech qanday' : rows) + ' ma\'lumotlar tanlanmadi.'), + recordsPerPage: 'Saxifadagi qatorlar:', + allRows: 'Barchasi', + pagination: (start, end, total) => start + '-' + end + ' jami ' + total, + columns: 'Ustunlar' + }, + editor: { + url: 'URL', + bold: 'Qalin', + italic: 'Kursiv', + strikethrough: 'Chizilgan', + underline: 'Tagiga chizilgan', + unorderedList: 'Tartibsiz ro\'yxat', + orderedList: 'Tartibga keltirilgan ro\'yxat', + subscript: 'Satr ostida', + superscript: 'Satr ustida', + hyperlink: 'Giperhavola', + toggleFullscreen: 'To\'liq ekran rejimiga o\'tish', + quote: 'Iqtibos', + left: 'Chapga saflash', + center: 'Markazga saflash', + right: 'O\'nggadan saflash', + justify: 'Ikki tomondan saflash', + print: 'Chop etish', + outdent: 'Chekinishni kamaytirish', + indent: 'Chekinishni ko\'paytirish', + removeFormat: 'Formatlashni o\'chirib tashlash', + formatting: 'Formatlash', + fontSize: 'Shrift hajmi', + align: 'Saflash', + hr: 'Gorizontal qoidani kiritish', + undo: 'Bekor qilish', + redo: 'Takrorlash', + heading1: 'Sarlavha 1', + heading2: 'Sarlavha 2', + heading3: 'Sarlavha 3', + heading4: 'Sarlavha 4', + heading5: 'Sarlavha 5', + heading6: 'Sarlavha 6', + paragraph: 'Paragraf', + code: 'Kod', + size1: 'Juda kichkik', + size2: 'Biroz kichik', + size3: 'Oddiy', + size4: 'O\'rta katta', + size5: 'Katta', + size6: 'Juda katta', + size7: 'Maksimal', + defaultFont: 'Standart shrift', + viewSource: 'Manbani ko\'rish' + }, + tree: { + noNodes: 'Kesishmalar mavjud emas', + noResults: 'Mos keladigan kesishmalar topilmadi' + } +} diff --git a/lang/vi.js b/lang/vi.js new file mode 100644 index 00000000000..57aa85c9441 --- /dev/null +++ b/lang/vi.js @@ -0,0 +1,95 @@ +export default { + isoName: 'vi', + nativeName: 'Tiếng Việt', + label: { + clear: 'Xóa hết', + ok: 'OK', + cancel: 'Hủy', + close: 'Đóng', + set: 'Thiết đặt', + select: 'Chọn', + reset: 'Đặt lại', + remove: 'Gỡ bỏ', + update: 'Cập nhật', + create: 'Tạo', + search: 'Tìm kiếm', + filter: 'Bộ lọc', + refresh: 'Làm mới', + expand: function (label) { return label ? `Mở rộng "${label}"` : 'Mở rộng' }, + collapse: function (label) { return label ? `Thu gọn "${label}"` : 'Sụp đổ' } + }, + date: { + days: 'Chủ Nhật_Thứ Hai_Thứ Ba_Thứ Tư_Thứ Năm_Thứ Sáu_Thứ Bảy'.split('_'), + daysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'), + months: 'Tháng Một_Tháng Hai_Tháng Ba_Tháng Tư_Tháng Năm_Tháng Sáu_Tháng Bảy_Tháng Tám_Tháng Chín_Tháng Mười_Tháng Mười Một_Tháng Mười Hai'.split('_'), + monthsShort: 'Th1_Th2_Th3_Th4_Th5_Th6_Th7_Th8_Th9_Th10_Th11_Th12'.split('_'), + firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: 'ngày' + }, + table: { + noData: 'Không có dữ liệu', + noResults: 'Không tìm thấy kết quả', + loading: 'Đang tải', + selectedRecords: function (rows) { + return rows === 1 + ? '1 hàng đã chọn.' + : (rows === 0 ? 'Không có hàng nào' : rows) + ' hàng đã chọn.' + }, + recordsPerPage: 'Hàng trên mỗi trang:', + allRows: 'Tất cả', + pagination: function (start, end, total) { + return start + '-' + end + ' của ' + total + }, + columns: 'Cột' + }, + editor: { + url: 'URL', + bold: 'Đậm', + italic: 'Nghiêng', + strikethrough: 'Gạch giữa', + underline: 'Gạch dưới', + unorderedList: 'Danh sách không theo thứ tự', + orderedList: 'Danh sách theo thứ tự', + subscript: 'Chỉ số dưới', + superscript: 'Chỉ số trên', + hyperlink: 'Liên kết', + toggleFullscreen: 'Điều chỉnh chế độ toàn màn hình', + quote: 'Trích dẫn', + left: 'Căn trái', + center: 'Căn giữa', + right: 'Căn phải', + justify: 'Căn đều 2 bên', + print: 'In', + outdent: 'Giảm lề', + indent: 'Tăng lề', + removeFormat: 'Xóa định dạng', + formatting: 'Định dạng', + fontSize: 'Kích cỡ phông', + align: 'Căn chỉnh', + hr: 'Chèn Quy Tắc Ngang', + undo: 'Hoàn tác', + redo: 'Làm lại', + heading1: 'Tiêu đề 1', + heading2: 'Tiêu đề 2', + heading3: 'Tiêu đề 3', + heading4: 'Tiêu đề 4', + heading5: 'Tiêu đề 5', + heading6: 'Tiêu đề 6', + paragraph: 'Đoạn', + code: 'Mã', + size1: 'Rất nhỏ', + size2: 'Nhỏ vừa', + size3: 'Thường', + size4: 'To vừa', + size5: 'To', + size6: 'Rất To', + size7: 'Tối đa', + defaultFont: 'Phông mặc định', + viewSource: 'Xem nguồn' + }, + tree: { + noNodes: 'Không có nốt nào có sẵn', + noResults: 'Không tìm thấy các nốt' + } +} diff --git a/lang/zh-hans.js b/lang/zh-hans.js new file mode 100644 index 00000000000..c1aea368550 --- /dev/null +++ b/lang/zh-hans.js @@ -0,0 +1,98 @@ +export default { + isoName: 'zh-hans', + nativeName: '中文(简体)', + label: { + clear: '清空', + ok: '确定', + cancel: '取消', + close: '关闭', + set: '设置', + select: '选择', + reset: '重置', + remove: '移除', + update: '更新', + create: '创建', + search: '搜索', + filter: '过滤', + refresh: '刷新', + expand: function (label) { return label ? `展开"${label}"` : '扩张' }, + collapse: function (label) { return label ? `折叠"${label}"` : '坍塌' } + }, + date: { + days: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + daysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'), + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + headerTitle: function (date) { + return new Intl.DateTimeFormat('zh-CN', { + weekday: 'short', month: 'short', day: 'numeric' + }).format(date) + }, + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: '天' + }, + table: { + noData: '没有可用数据', + noResults: '找不到匹配的数据', + loading: '正在加载...', + selectedRecords: function (rows) { + return '已选择' + rows + '行' + }, + recordsPerPage: '每页的行数:', + allRows: '全部', + pagination: function (start, end, total) { + return start + '-' + end + ' / ' + total + }, + columns: '列' + }, + editor: { + url: 'URL', + bold: '粗体', + italic: '斜体', + strikethrough: '删除线', + underline: '下划线', + unorderedList: '无序列表', + orderedList: '有序列表', + subscript: '下标', + superscript: '上标', + hyperlink: '超链接', + toggleFullscreen: '全屏切换', + quote: '引号', + left: '左对齐', + center: '居中对齐', + right: '右对齐', + justify: '两端对齐', + print: '打印', + outdent: '减少缩进', + indent: '增加缩进', + removeFormat: '清除样式', + formatting: '格式化', + fontSize: '字体大小', + align: '对齐', + hr: '插入水平线', + undo: '撤消', + redo: '重做', + heading1: '标题一', + heading2: '标题二', + heading3: '标题三', + heading4: '标题四', + heading5: '标题五', + heading6: '标题六', + paragraph: '段落', + code: '代码', + size1: '非常小', + size2: '比较小', + size3: '正常', + size4: '中等偏大', + size5: '大', + size6: '非常大', + size7: '超级大', + defaultFont: '默认字体', + viewSource: '查看资料' + }, + tree: { + noNodes: '没有可用节点', + noResults: '找不到匹配的节点' + } +} diff --git a/lang/zh-hant.js b/lang/zh-hant.js new file mode 100644 index 00000000000..3af67dee3ce --- /dev/null +++ b/lang/zh-hant.js @@ -0,0 +1,98 @@ +export default { + isoName: 'zh-hant', + nativeName: '中文(繁體)', + label: { + clear: '清除', + ok: '確定', + cancel: '取消', + close: '關閉', + set: '設定', + select: '選擇', + reset: '重置', + remove: '移除', + update: '更新', + create: '新增', + search: '搜尋', + filter: '篩選', + refresh: '更新', + expand: function (label) { return label ? `展開"${label}"` : '擴張' }, + collapse: function (label) { return label ? `折疊"${label}"` : '坍塌' } + }, + date: { + days: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'), + daysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'), + months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + monthsShort: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'), + headerTitle: function (date) { + return new Intl.DateTimeFormat('zh-TW', { + weekday: 'short', month: 'short', day: 'numeric' + }).format(date) + }, + firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ... + format24h: false, + pluralDay: '日' + }, + table: { + noData: '沒有資料', + noResults: '沒有相符資料', + loading: '載入中...', + selectedRecords: function (rows) { + return '已選擇 ' + rows + ' 列' + }, + recordsPerPage: '每頁列數:', + allRows: '全部', + pagination: function (start, end, total) { + return start + '-' + end + ' 列,共 ' + total + ' 列' + }, + columns: '欄位' + }, + editor: { + url: '網址', + bold: '粗體', + italic: '斜體', + strikethrough: '刪除線', + underline: '下劃線', + unorderedList: '項目符號清單', + orderedList: '編號清單', + subscript: '下標', + superscript: '上標', + hyperlink: '超連結', + toggleFullscreen: '切換全螢幕', + quote: '段落引用', + left: '靠左對齊', + center: '置中對齊', + right: '靠右對齊', + justify: '分散對齊', + print: '列印', + outdent: '減少縮排', + indent: '增加縮排', + removeFormat: '清除格式', + formatting: '區塊元素', + fontSize: '字型大小', + align: '對齊', + hr: '水平分隔線', + undo: '復原', + redo: '取消復原', + heading1: '標題 1', + heading2: '標題 2', + heading3: '標題 3', + heading4: '標題 4', + heading5: '標題 5', + heading6: '標題 6', + paragraph: '段落', + code: '程式碼', + size1: '非常小', + size2: '稍小', + size3: '正常', + size4: '稍大', + size5: '大', + size6: '非常大', + size7: '超級大', + defaultFont: '預設字型', + viewSource: '切換原始碼' + }, + tree: { + noNodes: '沒有節點', + noResults: '沒有相符節點' + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000000..e7222d161f1 --- /dev/null +++ b/package.json @@ -0,0 +1,101 @@ +{ + "name": "quasar", + "version": "1.22.0-beta.3", + "description": "Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time", + "module": "src/index.esm.js", + "typings": "dist/types/index.d.ts", + "main": "dist/quasar.common.js", + "files": [ + "dist", + "lang", + "icon-set", + "src", + "wrappers" + ], + "scripts": { + "clean": "node build/script.clean.js", + "dev": "cd ./dev && node ./script.dev.js dev && cd ..", + "dev:ssr": "cd ./dev && node ./script.dev.js dev -m ssr && cd ..", + "dev:cordova:ios": "cd ./dev && node ./script.dev.js dev -m cordova -T ios && cd ..", + "dev:cordova:android": "cd ./dev && node ./script.dev.js dev -m cordova -T android && cd ..", + "dev:capacitor:ios": "cd ./dev && node ./script.dev.js dev -m capacitor -T ios && cd ..", + "dev:capacitor:android": "cd ./dev && node ./script.dev.js dev -m capacitor -T android && cd ..", + "dev:umd": "node build/script.test-umd.js", + "dev:quploader": "cd dev/upload-server && yarn && cd ../.. && node dev/upload-server/server.js", + "build": "node build/script.build.js", + "prepublishOnly": "yarn build", + "test": "yarn lint && yarn build", + "lint": "eslint --ext .js,.vue src dev", + "lint-fix": "eslint --ext .js,.vue src dev --fix" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/quasarframework/quasar.git" + }, + "keywords": [ + "vuejs", + "vue", + "quasar", + "js", + "phone", + "tablet", + "desktop", + "spa", + "pwa", + "website", + "electron" + ], + "author": { + "name": "Razvan Stoenescu", + "email": "razvan.stoenescu@gmail.com", + "url": "https://quasar.dev" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/quasarframework/quasar/issues" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + }, + "homepage": "https://quasar.dev", + "devDependencies": { + "@quasar/app": "^2.0.6", + "@quasar/extras": "^1.11.0", + "@rollup/plugin-buble": "^0.21.1", + "@rollup/plugin-json": "^4.0.2", + "@rollup/plugin-node-resolve": "^10.0.0", + "babel-eslint": "^10.0.2", + "babel-preset-es2015-rollup": "^3.0.0", + "eslint": "^7.4.0", + "eslint-config-standard": "^12.0.0", + "eslint-friendly-formatter": "^4.0.1", + "eslint-loader": "^4.0.2", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "eslint-plugin-vue": "^5.2.3", + "friendly-errors-webpack-plugin": "^1.7.0", + "json-beautify": "^1.1.1", + "module-alias": "^2.2.2", + "recast": "^0.20.0", + "rimraf": "^3.0.1", + "rollup": "^2.0.0", + "table": "^6.0.0", + "uglify-es": "^3.3.9" + }, + "vetur": { + "tags": "dist/vetur/quasar-tags.json", + "attributes": "dist/vetur/quasar-attributes.json" + }, + "web-types": "dist/web-types/web-types.json", + "browserslist": [ + "last 1 version, not dead, ie >= 11" + ], + "engines": { + "node": ">= 10.0.0", + "npm": ">= 5.6.0", + "yarn": ">= 1.6.0" + } +} diff --git a/src/api-file-example.json b/src/api-file-example.json new file mode 100644 index 00000000000..6313005a8f9 --- /dev/null +++ b/src/api-file-example.json @@ -0,0 +1,100 @@ +{ + "props": { + "hidden": { + "type": "Boolean", + "desc": "Puts component into 'hidden' mode", + "category": "state" + }, + + "width": { + "type": [ "Number", "String" ], + "desc": "Component width (in pixels)", + "examples": [ ":width=\"300\"", "400" ], + "category": "style" + }, + + "position": { + "type": "String", + "desc": "Positions component at one of the edges of the screen", + "examples": [ "bottom" ], + "required": true, + "default": "top", + "values": [ "top", "right", "bottom", "left" ], + "category": "content" + }, + + "font-size": { + "type": "String", + "desc": "The size in CSS units, including unit name, of the content (icon, text)", + "examples": [ "18px", "2rem" ], + "category": "style" + }, + + "color": { + "extends": "color" + }, + + "size": { + "extends": "size", + "desc": "My better description" + } + }, + + "slots": { + "default": { + "extends": "default" + }, + + "icon": { + "desc": "Slot for replacing the default dropdown icon" + } + }, + + "scopedSlots": { + "default": { + "extends": "default" + }, + + "item": { + "desc": "Scoped slot for displaying each uploaded file" + } + }, + + "events": { + "input": { + "extends": "input" + }, + + "click": { + "desc": "Emitted on QChip click if 'clickable' property is set", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object" + } + } + } + }, + + "methods": { + "show": { + "extends": "show" + }, + + "showNow": { + "extends": "show", + "desc": "My better description" + }, + + "hide": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object" + } + }, + "desc": "Triggers component to hide" + } + } +} diff --git a/src/api.extends.json b/src/api.extends.json new file mode 100644 index 00000000000..b032ba68076 --- /dev/null +++ b/src/api.extends.json @@ -0,0 +1,254 @@ +{ + "props": { + "readonly": { + "type": "Boolean", + "desc": "Put component in readonly mode", + "category": "state" + }, + + "disable": { + "type": "Boolean", + "desc": "Put component in disabled mode", + "category": "state" + }, + + "color": { + "type": "String", + "desc": "Color name for component from the Quasar Color Palette", + "examples": [ "primary", "teal-10" ], + "category": "style" + }, + + "text-color": { + "type": "String", + "desc": "Overrides text color (if needed); Color name from the Quasar Color Palette", + "examples": [ "primary", "teal-10" ], + "category": "style" + }, + + "dense": { + "type": "Boolean", + "desc": "Dense mode; occupies less space", + "category": "style" + }, + + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name", + "examples": [ "16px", "2rem" ], + "category": "style" + }, + + "dark": { + "type": "Boolean", + "desc": "Notify the component that the background is a dark color", + "category": "style" + }, + + "icon": { + "type": "String", + "desc": "Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)", + "examples": [ + "map", + "ion-add", + "img:https://cdn.quasar.dev/logo/svg/quasar-logo.svg", + "img:path/to/some_image.png" + ], + "category": "content" + }, + + "flat": { + "type": "Boolean", + "desc": "Applies a 'flat' design (no default shadow)", + "category": "style" + }, + + "bordered": { + "type": "Boolean", + "desc": "Applies a default border to the component", + "category": "style" + }, + + "square": { + "type": "Boolean", + "desc": "Removes border-radius so borders are squared", + "category": "style" + }, + + "rounded": { + "type": "Boolean", + "desc": "Applies a small standard border-radius for a squared shape of the component", + "category": "style" + }, + + "tabindex": { + "type": [ "Number", "String" ], + "desc": "Tabindex HTML attribute value", + "examples": [ "0", "100" ], + "category": "general" + }, + + "transition": { + "type": "String", + "desc": "One of Quasar's embedded transitions", + "examples": [ "fade", "slide-down" ], + "category": "behavior" + }, + + "value": { + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model" + }, + + "sanitize": { + "type": "Boolean", + "desc": "Force use of textContent instead of innerHTML to render text; Use it when the text might be unsafe (from user input)", + "category": "behavior" + }, + + "scroll-target": { + "type": [ "Element", "String" ], + "desc": "CSS selector or DOM element to be used as a custom scroll container instead of the auto detected one", + "examples": [ + ":scroll-target=\"$refs.scrollTarget\"", + "scroll-target=\".scroll-target-class\"", + "scroll-target=\"#scroll-target-id\"", + "scroll-target=\"body\"" + ], + "category": "behavior", + "addedIn": "v1.8" + } + }, + + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component" + } + }, + + "scopedSlots": { + "default": { + "desc": "Default scoped slot in the devland content of the component" + } + }, + + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true, + "__exemption": [ "examples" ] + } + } + }, + + "show": { + "desc": "Emitted after component has triggered show()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + } + } + }, + + "before-show": { + "desc": "Emitted when component triggers show() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + } + } + }, + + "after-show": { + "desc": "Emitted when component show animation is finished" + }, + + "hide": { + "desc": "Emitted after component has triggered hide()", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + } + } + }, + + "before-hide": { + "desc": "Emitted when component triggers hide() but before it finishes doing it", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + } + } + }, + + "after-hide": { + "desc": "Emitted when component hide animation is finished" + }, + + "click": { + "desc": "Emitted when user clicks/taps on the component", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + } + } + } + }, + + "methods": { + "show": { + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + }, + + "hide": { + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + }, + + "toggle": { + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object", + "__exemption": [ "examples" ] + } + }, + "desc": "Triggers component to toggle between show/hide" + } + } +} diff --git a/src/body.js b/src/body.js new file mode 100644 index 00000000000..f0f7fabb3d1 --- /dev/null +++ b/src/body.js @@ -0,0 +1,112 @@ +import { setBrand } from './utils/colors.js' +import { isSSR, fromSSR, client, iosCorrection } from './plugins/Platform.js' + +function getMobilePlatform (is) { + if (is.ios === true) return 'ios' + if (is.android === true) return 'android' +} + +function getBodyClasses ({ is, has, within }, cfg) { + const cls = [ + is.desktop === true ? 'desktop' : 'mobile', + `${has.touch === false ? 'no-' : ''}touch` + ] + + if (is.mobile === true) { + const mobile = getMobilePlatform(is) + mobile !== void 0 && cls.push('platform-' + mobile) + } + + if (is.nativeMobile === true) { + const type = is.nativeMobileWrapper + + cls.push(type) + cls.push('native-mobile') + + if ( + is.ios === true && + (cfg[type] === void 0 || cfg[type].iosStatusBarPadding !== false) + ) { + cls.push('q-ios-padding') + } + } + else if (is.electron === true) { + cls.push('electron') + } + else if (is.bex === true) { + cls.push('bex') + } + + within.iframe === true && cls.push('within-iframe') + + return cls +} + +// SSR takeover corrections +function clientUpdate () { + const classes = document.body.className + let newCls = classes + + if (iosCorrection !== void 0) { + newCls = newCls.replace('desktop', 'platform-ios mobile') + } + + if (client.has.touch === true) { + newCls = newCls.replace('no-touch', 'touch') + } + + if (client.within.iframe === true) { + newCls += ' within-iframe' + } + + if (classes !== newCls) { + document.body.className = newCls + } +} + +function setColors (brand) { + for (const color in brand) { + setBrand(color, brand[color]) + } +} + +export default { + install (queues, cfg) { + if (isSSR === true) { + queues.server.push((q, ctx) => { + const + cls = getBodyClasses(q.platform, cfg), + fn = ctx.ssr.setBodyClasses + + if (cfg.screen !== void 0 && cfg.screen.bodyClass === true) { + cls.push('screen--xs') + } + + if (typeof fn === 'function') { + fn(cls) + } + else { + ctx.ssr.Q_BODY_CLASSES = cls.join(' ') + } + }) + + return + } + + if (fromSSR === true) { + clientUpdate() + } + else { + const cls = getBodyClasses(client, cfg) + + if (client.is.ie === true && client.is.versionNumber === 11) { + cls.forEach(c => document.body.classList.add(c)) + } + else { + document.body.classList.add.apply(document.body.classList, cls) + } + } + + cfg.brand !== void 0 && setColors(cfg.brand) + } +} diff --git a/src/components.js b/src/components.js new file mode 100644 index 00000000000..008038c3d9d --- /dev/null +++ b/src/components.js @@ -0,0 +1,79 @@ +export * from './components/ajax-bar/index.js' +export * from './components/avatar/index.js' +export * from './components/badge/index.js' +export * from './components/banner/index.js' +export * from './components/bar/index.js' +export * from './components/breadcrumbs/index.js' +export * from './components/btn/index.js' +export * from './components/btn-dropdown/index.js' +export * from './components/btn-group/index.js' +export * from './components/btn-toggle/index.js' +export * from './components/card/index.js' +export * from './components/carousel/index.js' +export * from './components/chat/index.js' +export * from './components/checkbox/index.js' +export * from './components/chip/index.js' +export * from './components/circular-progress/index.js' +export * from './components/color/index.js' +export * from './components/date/index.js' +export * from './components/dialog/index.js' +export * from './components/drawer/index.js' +export * from './components/editor/index.js' +export * from './components/expansion-item/index.js' +export * from './components/fab/index.js' +export * from './components/field/index.js' +export * from './components/file/index.js' +export * from './components/footer/index.js' +export * from './components/form/index.js' +export * from './components/header/index.js' +export * from './components/icon/index.js' +export * from './components/img/index.js' +export * from './components/infinite-scroll/index.js' +export * from './components/inner-loading/index.js' +export * from './components/input/index.js' +export * from './components/intersection/index.js' +export * from './components/item/index.js' +export * from './components/knob/index.js' +export * from './components/layout/index.js' +export * from './components/markup-table/index.js' +export * from './components/menu/index.js' +export * from './components/no-ssr/index.js' +export * from './components/option-group/index.js' +export * from './components/page/index.js' +export * from './components/page-scroller/index.js' +export * from './components/page-sticky/index.js' +export * from './components/pagination/index.js' +export * from './components/parallax/index.js' +export * from './components/popup-edit/index.js' +export * from './components/popup-proxy/index.js' +export * from './components/linear-progress/index.js' +export * from './components/pull-to-refresh/index.js' +export * from './components/radio/index.js' +export * from './components/range/index.js' +export * from './components/rating/index.js' +export * from './components/resize-observer/index.js' +export * from './components/responsive/index.js' +export * from './components/scroll-area/index.js' +export * from './components/scroll-observer/index.js' +export * from './components/select/index.js' +export * from './components/separator/index.js' +export * from './components/skeleton/index.js' +export * from './components/slide-item/index.js' +export * from './components/slide-transition/index.js' +export * from './components/slider/index.js' +export * from './components/space/index.js' +export * from './components/spinner/index.js' +export * from './components/splitter/index.js' +export * from './components/stepper/index.js' +export * from './components/tab-panels/index.js' +export * from './components/table/index.js' +export * from './components/tabs/index.js' +export * from './components/time/index.js' +export * from './components/timeline/index.js' +export * from './components/toggle/index.js' +export * from './components/toolbar/index.js' +export * from './components/tooltip/index.js' +export * from './components/tree/index.js' +export * from './components/uploader/index.js' +export * from './components/video/index.js' +export * from './components/virtual-scroll/index.js' diff --git a/src/components/ajax-bar/QAjaxBar.js b/src/components/ajax-bar/QAjaxBar.js new file mode 100644 index 00000000000..582b7f20424 --- /dev/null +++ b/src/components/ajax-bar/QAjaxBar.js @@ -0,0 +1,276 @@ +import Vue from 'vue' + +import { between } from '../../utils/format.js' +import { isSSR } from '../../plugins/Platform.js' +import { ariaHidden } from '../../mixins/attrs' + +const + xhr = isSSR ? null : XMLHttpRequest, + open = isSSR ? null : xhr.prototype.open, + positionValues = [ 'top', 'right', 'bottom', 'left' ] + +let stack = [] +let highjackCount = 0 + +function translate ({ p, pos, active, horiz, reverse, dir }) { + let x = 1, y = 1 + + if (horiz === true) { + if (reverse === true) { x = -1 } + if (pos === 'bottom') { y = -1 } + return { transform: `translate3d(${x * (p - 100)}%,${active ? 0 : y * -200}%,0)` } + } + + if (reverse === true) { y = -1 } + if (pos === 'right') { x = -1 } + return { transform: `translate3d(${active ? 0 : dir * x * -200}%,${y * (p - 100)}%,0)` } +} + +function inc (p, amount) { + if (typeof amount !== 'number') { + if (p < 25) { + amount = Math.random() * 3 + 3 + } + else if (p < 65) { + amount = Math.random() * 3 + } + else if (p < 85) { + amount = Math.random() * 2 + } + else if (p < 99) { + amount = 0.6 + } + else { + amount = 0 + } + } + return between(p + amount, 0, 100) +} + +function highjackAjax (stackEntry) { + highjackCount++ + + stack.push(stackEntry) + + if (highjackCount > 1) { return } + + xhr.prototype.open = function (_, url) { + const stopStack = [] + + const loadStart = () => { + stack.forEach(entry => { + const hijackFilter = entry.getHijackFilter() + if ( + hijackFilter === null || + hijackFilter(url) === true + ) { + entry.start() + stopStack.push(entry.stop) + } + }) + } + + const loadEnd = () => { + stopStack.forEach(stop => { stop() }) + } + + this.addEventListener('loadstart', loadStart, { once: true }) + this.addEventListener('loadend', loadEnd, { once: true }) + + open.apply(this, arguments) + } +} + +function restoreAjax (start) { + stack = stack.filter(entry => entry.start !== start) + + highjackCount = Math.max(0, highjackCount - 1) + if (!highjackCount) { + xhr.prototype.open = open + } +} + +export default Vue.extend({ + name: 'QAjaxBar', + + props: { + position: { + type: String, + default: 'top', + validator: val => positionValues.includes(val) + }, + + size: { + type: String, + default: '2px' + }, + + color: String, + reverse: Boolean, + + skipHijack: Boolean, + hijackFilter: Function + }, + + data () { + return { + calls: 0, + progress: 0, + onScreen: false, + animate: true + } + }, + + computed: { + classes () { + return `q-loading-bar q-loading-bar--${this.position}` + + (this.color !== void 0 ? ` bg-${this.color}` : '') + + (this.animate === true ? '' : ' no-transition') + }, + + style () { + const active = this.onScreen + + const o = translate({ + p: this.progress, + pos: this.position, + active, + horiz: this.horizontal, + reverse: this.$q.lang.rtl === true && ['top', 'bottom'].includes(this.position) + ? this.reverse === false + : this.reverse, + dir: this.$q.lang.rtl === true ? -1 : 1 + }) + + o[this.sizeProp] = this.size + o.opacity = active ? 1 : 0 + + return o + }, + + horizontal () { + return this.position === 'top' || this.position === 'bottom' + }, + + sizeProp () { + return this.horizontal ? 'height' : 'width' + }, + + attrs () { + return this.onScreen === true + ? { + role: 'progressbar', + 'aria-valuemin': 0, + 'aria-valuemax': 100, + 'aria-valuenow': this.progress + } + : ariaHidden + } + }, + + methods: { + start (speed = 300) { + const oldSpeed = this.speed + const newSpeed = this.speed = Math.max(0, speed) || 0 + + this.calls++ + + if (this.calls > 1) { + if (oldSpeed === 0 && newSpeed > 0) { + this.__work() + } + else if (oldSpeed > 0 && newSpeed <= 0) { + clearTimeout(this.timer) + } + + return this.calls + } + + clearTimeout(this.timer) + this.$emit('start') + + this.progress = 0 + + this.timer = setTimeout(() => { + this.animate = true + newSpeed > 0 && this.__work() + }, this.onScreen === true ? 500 : 1) + + if (this.onScreen !== true) { + this.onScreen = true + this.animate = false + } + + return this.calls + }, + + increment (amount) { + if (this.calls > 0) { + this.progress = inc(this.progress, amount) + } + + return this.calls + }, + + stop () { + this.calls = Math.max(0, this.calls - 1) + + if (this.calls > 0) { + return this.calls + } + + clearTimeout(this.timer) + this.$emit('stop') + + const end = () => { + this.animate = true + this.progress = 100 + this.timer = setTimeout(() => { + this.onScreen = false + }, 1000) + } + + if (this.progress === 0) { + this.timer = setTimeout(end, 1) + } + else { + end() + } + + return this.calls + }, + + __work () { + if (this.progress < 100) { + this.timer = setTimeout(() => { + this.increment() + this.__work() + }, this.speed) + } + } + }, + + mounted () { + if (this.skipHijack !== true) { + this.hijacked = true + highjackAjax({ + start: this.start, + stop: this.stop, + getHijackFilter: () => this.hijackFilter || null + }) + } + }, + + beforeDestroy () { + clearTimeout(this.timer) + this.hijacked === true && restoreAjax(this.start) + }, + + render (h) { + return h('div', { + class: this.classes, + style: this.style, + attrs: this.attrs + }) + } +}) diff --git a/src/components/ajax-bar/QAjaxBar.json b/src/components/ajax-bar/QAjaxBar.json new file mode 100644 index 00000000000..f4c1de5ee8b --- /dev/null +++ b/src/components/ajax-bar/QAjaxBar.json @@ -0,0 +1,109 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/ajax-bar" + }, + + "props": { + "position": { + "type": "String", + "desc": "Position within window of where QAjaxBar should be displayed", + "default": "top", + "values": [ "top", "right", "bottom", "left" ], + "examples": [ "bottom" ], + "category": "content" + }, + + "size": { + "extends": "size", + "default": "2px" + }, + + "color": { + "extends": "color" + }, + + "reverse": { + "type": "Boolean", + "desc": "Reverse direction of progress", + "category": "behavior" + }, + + "skip-hijack": { + "type": "Boolean", + "desc": "Skip Ajax hijacking (not a reactive prop)", + "category": "behavior" + }, + + "hijack-filter": { + "type": "Function", + "desc": "Filter which URL should trigger start() + stop()", + "params": { + "url": { + "type": "String", + "desc": "The URL being triggered", + "examples": [ "https://some.url/path" ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Should the URL received as param trigger start() + stop()?" + }, + "category": "behavior", + "addedIn": "v1.17.2" + } + }, + + "events": { + "start": { + "desc": "Emitted when bar is triggered to appear" + }, + + "stop": { + "desc": "Emitted when bar has finished its job" + } + }, + + "methods": { + "start": { + "desc": "Notify bar you are waiting for a new process to finish", + "params": { + "speed": { + "type": "Number", + "default": 300, + "desc": "Delay (in milliseconds) between progress auto-increments; If delay is 0 then it disables auto-incrementing", + "examples": [ 400, 0 ] + } + }, + "returns": { + "type": "Number", + "desc": "Number of active simultaneous sessions", + "__exemption": [ "examples" ] + } + }, + + "increment": { + "desc": "Manually trigger a bar progress increment", + "params": { + "amount": { + "type": "Number", + "desc": "Amount (0 < x <= 100) to increment with", + "examples": [ 1 ] + } + }, + "returns": { + "type": "Number", + "desc": "Number of active simultaneous sessions", + "__exemption": [ "examples" ] + } + }, + + "stop": { + "desc": "Notify bar that one process you were waiting has finished", + "returns": { + "type": "Number", + "desc": "Number of active simultaneous sessions", + "__exemption": [ "examples" ] + } + } + } +} diff --git a/src/components/ajax-bar/QAjaxBar.sass b/src/components/ajax-bar/QAjaxBar.sass new file mode 100644 index 00000000000..9e6c1dddee4 --- /dev/null +++ b/src/components/ajax-bar/QAjaxBar.sass @@ -0,0 +1,27 @@ +.q-loading-bar + position: fixed + z-index: $z-max + transition: transform .5s cubic-bezier(0,0,.2,1), opacity .5s + background: $red + + &--top + left: 0 #{"/* rtl:ignore */"} + right: 0 #{"/* rtl:ignore */"} + top: 0 + width: 100% + &--bottom + left: 0 #{"/* rtl:ignore */"} + right: 0 #{"/* rtl:ignore */"} + bottom: 0 + width: 100% + + &--right + top: 0 + bottom: 0 + right: 0 + height: 100% + &--left + top: 0 + bottom: 0 + left: 0 + height: 100% diff --git a/src/components/ajax-bar/QAjaxBar.styl b/src/components/ajax-bar/QAjaxBar.styl new file mode 100644 index 00000000000..3ba0e76efec --- /dev/null +++ b/src/components/ajax-bar/QAjaxBar.styl @@ -0,0 +1,27 @@ +.q-loading-bar + position: fixed + z-index: $z-max + transition: transform .5s cubic-bezier(0,0,.2,1), opacity .5s + background: $red + + &--top + left: 0 /* rtl:ignore */ + right: 0 /* rtl:ignore */ + top: 0 + width: 100% + &--bottom + left: 0 /* rtl:ignore */ + right: 0 /* rtl:ignore */ + bottom: 0 + width: 100% + + &--right + top: 0 + bottom: 0 + right: 0 + height: 100% + &--left + top: 0 + bottom: 0 + left: 0 + height: 100% diff --git a/src/components/ajax-bar/index.js b/src/components/ajax-bar/index.js new file mode 100644 index 00000000000..886492d4752 --- /dev/null +++ b/src/components/ajax-bar/index.js @@ -0,0 +1,5 @@ +import QAjaxBar from './QAjaxBar.js' + +export { + QAjaxBar +} diff --git a/src/components/avatar/QAvatar.js b/src/components/avatar/QAvatar.js new file mode 100644 index 00000000000..551ab666bcb --- /dev/null +++ b/src/components/avatar/QAvatar.js @@ -0,0 +1,60 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' + +import SizeMixin from '../../mixins/size.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { mergeSlotSafely } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QAvatar', + + mixins: [ ListenersMixin, SizeMixin ], + + props: { + fontSize: String, + + color: String, + textColor: String, + + icon: String, + square: Boolean, + rounded: Boolean + }, + + computed: { + classes () { + return { + [`bg-${this.color}`]: this.color, + [`text-${this.textColor} q-chip--colored`]: this.textColor, + 'q-avatar--square': this.square, + 'rounded-borders': this.rounded + } + }, + + contentStyle () { + if (this.fontSize) { + return { fontSize: this.fontSize } + } + } + }, + + render (h) { + const icon = this.icon !== void 0 + ? [ h(QIcon, { props: { name: this.icon } }) ] + : void 0 + + return h('div', { + staticClass: 'q-avatar', + style: this.sizeStyle, + class: this.classes, + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'q-avatar__content row flex-center overflow-hidden', + style: this.contentStyle + }, mergeSlotSafely(icon, this, 'default')) + ]) + } +}) diff --git a/src/components/avatar/QAvatar.json b/src/components/avatar/QAvatar.json new file mode 100644 index 00000000000..7d2f4f4fbdc --- /dev/null +++ b/src/components/avatar/QAvatar.json @@ -0,0 +1,46 @@ +{ + "mixins": [ "mixins/size" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/avatar" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "font-size": { + "type": "String", + "desc": "The size in CSS units, including unit name, of the content (icon, text)", + "examples": [ "18px", "2rem" ], + "category": "style" + }, + + "color": { + "extends": "color" + }, + + "text-color": { + "extends": "text-color" + }, + + "icon": { + "extends": "icon" + }, + + "square": { + "extends": "square" + }, + + "rounded": { + "extends": "rounded" + } + }, + + "slots": { + "default": { + "desc": "Optional; Suggestions: one character string, tag" + } + } +} diff --git a/src/components/avatar/QAvatar.sass b/src/components/avatar/QAvatar.sass new file mode 100644 index 00000000000..a65e417ca43 --- /dev/null +++ b/src/components/avatar/QAvatar.sass @@ -0,0 +1,22 @@ +.q-avatar + position: relative + vertical-align: middle + display: inline-block + + border-radius: 50% + + font-size: 48px + height: 1em + width: 1em + + &__content + font-size: .5em + line-height: .5em + + &__content, img:not(.q-icon) + border-radius: inherit + height: inherit + width: inherit + + &--square + border-radius: 0 diff --git a/src/components/avatar/QAvatar.styl b/src/components/avatar/QAvatar.styl new file mode 100644 index 00000000000..a65e417ca43 --- /dev/null +++ b/src/components/avatar/QAvatar.styl @@ -0,0 +1,22 @@ +.q-avatar + position: relative + vertical-align: middle + display: inline-block + + border-radius: 50% + + font-size: 48px + height: 1em + width: 1em + + &__content + font-size: .5em + line-height: .5em + + &__content, img:not(.q-icon) + border-radius: inherit + height: inherit + width: inherit + + &--square + border-radius: 0 diff --git a/src/components/avatar/index.js b/src/components/avatar/index.js new file mode 100644 index 00000000000..ee5f5975d60 --- /dev/null +++ b/src/components/avatar/index.js @@ -0,0 +1,5 @@ +import QAvatar from './QAvatar.js' + +export { + QAvatar +} diff --git a/src/components/badge/QBadge.js b/src/components/badge/QBadge.js new file mode 100644 index 00000000000..bd523e5e456 --- /dev/null +++ b/src/components/badge/QBadge.js @@ -0,0 +1,70 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QBadge', + + mixins: [ ListenersMixin ], + + props: { + color: String, + textColor: String, + + floating: Boolean, + transparent: Boolean, + multiLine: Boolean, + outline: Boolean, + rounded: Boolean, + + label: [Number, String], + + align: { + type: String, + validator: v => ['top', 'middle', 'bottom'].includes(v) + } + }, + + computed: { + style () { + if (this.align !== void 0) { + return { verticalAlign: this.align } + } + }, + + classes () { + const text = this.outline === true + ? this.color || this.textColor + : this.textColor + + return 'q-badge flex inline items-center no-wrap' + + ` q-badge--${this.multiLine === true ? 'multi' : 'single'}-line` + + (this.outline === true + ? ' q-badge--outline' + : (this.color !== void 0 ? ` bg-${this.color}` : '') + ) + + (text !== void 0 ? ` text-${text}` : '') + + (this.floating === true ? ' q-badge--floating' : '') + + (this.rounded === true ? ' q-badge--rounded' : '') + + (this.transparent === true ? ' q-badge--transparent' : '') + }, + + attrs () { + return { + role: 'status', + 'aria-label': this.label + } + } + }, + + render (h) { + return h('div', { + style: this.style, + class: this.classes, + attrs: this.attrs, + on: { ...this.qListeners } + }, this.label !== void 0 ? [ this.label ] : slot(this, 'default')) + } +}) diff --git a/src/components/badge/QBadge.json b/src/components/badge/QBadge.json new file mode 100644 index 00000000000..c80fd88d605 --- /dev/null +++ b/src/components/badge/QBadge.json @@ -0,0 +1,71 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/badge" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "color": { + "extends": "color" + }, + + "text-color": { + "extends": "text-color" + }, + + "floating": { + "type": "Boolean", + "desc": "Tell QBadge if it should float to the top right side of the relative positioned parent element or not", + "category": "content" + }, + + "transparent": { + "type": "Boolean", + "desc": "Applies a 0.8 opacity; Useful especially for floating QBadge", + "category": "content" + }, + + "multi-line": { + "type": "Boolean", + "desc": "Content can wrap to multiple lines", + "category": "content" + }, + + "label": { + "type": [ "String", "Number" ], + "desc": "Badge's content as string; overrides default slot if specified", + "examples": [ "John Doe", 22 ], + "category": "content" + }, + + "align": { + "type": "String", + "desc": "Sets vertical-align CSS prop", + "values": [ "top", "middle", "bottom" ], + "category": "content" + }, + + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design (colored text and borders only)", + "category": "content", + "addedIn": "v1.4.5" + }, + + "rounded": { + "type": "Boolean", + "desc": "Makes a rounded shaped badge", + "category": "style", + "addedIn": "v1.15.2" + } + }, + + "slots": { + "default": { + "desc": "This is where QBadge content goes, if not using 'label' property" + } + } +} diff --git a/src/components/badge/QBadge.sass b/src/components/badge/QBadge.sass new file mode 100644 index 00000000000..4388b84bb10 --- /dev/null +++ b/src/components/badge/QBadge.sass @@ -0,0 +1,34 @@ +.q-badge + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + padding: 2px 6px + border-radius: $generic-border-radius + font-size: 12px + line-height: 12px + min-height: 12px + font-weight: normal + vertical-align: baseline + + &--single-line + white-space: nowrap + &--multi-line + word-break: break-all + word-wrap: break-word + + &--floating + position: absolute + top: -4px + right: -3px + cursor: inherit + + &--transparent + opacity: .8 + + &--outline + background-color: transparent + border: 1px solid currentColor + + &--rounded + border-radius: 1em diff --git a/src/components/badge/QBadge.styl b/src/components/badge/QBadge.styl new file mode 100644 index 00000000000..4388b84bb10 --- /dev/null +++ b/src/components/badge/QBadge.styl @@ -0,0 +1,34 @@ +.q-badge + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + padding: 2px 6px + border-radius: $generic-border-radius + font-size: 12px + line-height: 12px + min-height: 12px + font-weight: normal + vertical-align: baseline + + &--single-line + white-space: nowrap + &--multi-line + word-break: break-all + word-wrap: break-word + + &--floating + position: absolute + top: -4px + right: -3px + cursor: inherit + + &--transparent + opacity: .8 + + &--outline + background-color: transparent + border: 1px solid currentColor + + &--rounded + border-radius: 1em diff --git a/src/components/badge/index.js b/src/components/badge/index.js new file mode 100644 index 00000000000..47dc74de42e --- /dev/null +++ b/src/components/badge/index.js @@ -0,0 +1,5 @@ +import QBadge from './QBadge.js' + +export { + QBadge +} diff --git a/src/components/banner/QBanner.js b/src/components/banner/QBanner.js new file mode 100644 index 00000000000..2145a7772fe --- /dev/null +++ b/src/components/banner/QBanner.js @@ -0,0 +1,52 @@ +import Vue from 'vue' + +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +const attrs = { role: 'alert' } + +export default Vue.extend({ + name: 'QBanner', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + inlineActions: Boolean, + dense: Boolean, + rounded: Boolean + }, + + render (h) { + const actions = slot(this, 'action') + const child = [ + h('div', { + staticClass: 'q-banner__avatar col-auto row items-center self-start' + }, slot(this, 'avatar')), + + h('div', { + staticClass: 'q-banner__content col text-body2' + }, slot(this, 'default')) + ] + + actions !== void 0 && child.push( + h('div', { + staticClass: 'q-banner__actions row items-center justify-end', + class: `col-${this.inlineActions === true ? 'auto' : 'all'}` + }, actions) + ) + + return h('div', { + staticClass: 'q-banner row items-center', + class: { + 'q-banner--top-padding': actions !== void 0 && !this.inlineActions, + 'q-banner--dense': this.dense, + [`q-banner--${this.darkSuffix} q-${this.darkSuffix}`]: true, + 'rounded-borders': this.rounded + }, + attrs, + on: { ...this.qListeners } + }, child) + } +}) diff --git a/src/components/banner/QBanner.json b/src/components/banner/QBanner.json new file mode 100644 index 00000000000..0a84993641d --- /dev/null +++ b/src/components/banner/QBanner.json @@ -0,0 +1,44 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/banner" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "inline-actions": { + "type": "Boolean", + "desc": "Display actions on same row as content", + "category": "content" + }, + + "dense": { + "extends": "dense" + }, + + "rounded": { + "extends": "rounded" + }, + + "dark": { + "extends": "dark", + "addedIn": "v1.3" + } + }, + + "slots": { + "default": { + "desc": "This is where Banner content goes" + }, + + "avatar": { + "desc": "Slot for displaying an avatar (suggestions: QIcon, QAvatar)" + }, + + "action": { + "desc": "Slot for Banner action (suggestions: QBtn)" + } + } +} diff --git a/src/components/banner/QBanner.sass b/src/components/banner/QBanner.sass new file mode 100644 index 00000000000..447129240a2 --- /dev/null +++ b/src/components/banner/QBanner.sass @@ -0,0 +1,37 @@ +.q-banner + min-height: 54px + padding: 8px 16px + + &--top-padding + padding-top: 14px + + &__avatar + min-width: 1px !important + > .q-avatar + font-size: 46px + > .q-icon + font-size: 40px + + &__avatar:not(:empty) + &__content + padding-left: 16px + + &__actions + &.col-auto + padding-left: 16px + &.col-all + .q-btn-item + margin: 4px 0 0 4px + + &--dense + min-height: 32px + padding: 8px + &.q-banner--top-padding + padding-top: 12px + .q-banner__avatar + > .q-avatar, > .q-icon + font-size: 28px + .q-banner__avatar:not(:empty) + .q-banner__content + padding-left: 8px + .q-banner__actions + &.col-auto + padding-left: 8px diff --git a/src/components/banner/QBanner.styl b/src/components/banner/QBanner.styl new file mode 100644 index 00000000000..447129240a2 --- /dev/null +++ b/src/components/banner/QBanner.styl @@ -0,0 +1,37 @@ +.q-banner + min-height: 54px + padding: 8px 16px + + &--top-padding + padding-top: 14px + + &__avatar + min-width: 1px !important + > .q-avatar + font-size: 46px + > .q-icon + font-size: 40px + + &__avatar:not(:empty) + &__content + padding-left: 16px + + &__actions + &.col-auto + padding-left: 16px + &.col-all + .q-btn-item + margin: 4px 0 0 4px + + &--dense + min-height: 32px + padding: 8px + &.q-banner--top-padding + padding-top: 12px + .q-banner__avatar + > .q-avatar, > .q-icon + font-size: 28px + .q-banner__avatar:not(:empty) + .q-banner__content + padding-left: 8px + .q-banner__actions + &.col-auto + padding-left: 8px diff --git a/src/components/banner/index.js b/src/components/banner/index.js new file mode 100644 index 00000000000..379ed65ef33 --- /dev/null +++ b/src/components/banner/index.js @@ -0,0 +1,5 @@ +import QBanner from './QBanner.js' + +export { + QBanner +} diff --git a/src/components/bar/QBar.js b/src/components/bar/QBar.js new file mode 100644 index 00000000000..9cd28ce04e5 --- /dev/null +++ b/src/components/bar/QBar.js @@ -0,0 +1,34 @@ +import Vue from 'vue' + +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +const attrs = { role: 'toolbar' } + +export default Vue.extend({ + name: 'QBar', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + dense: Boolean + }, + + computed: { + classes () { + return `q-bar--${this.dense === true ? 'dense' : 'standard'}` + + ` q-bar--${this.darkSuffix}` + } + }, + + render (h) { + return h('div', { + staticClass: 'q-bar row no-wrap items-center', + class: this.classes, + attrs, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/bar/QBar.json b/src/components/bar/QBar.json new file mode 100644 index 00000000000..059256c4cbc --- /dev/null +++ b/src/components/bar/QBar.json @@ -0,0 +1,26 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/bar" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "dense": { + "extends": "dense" + }, + + "dark": { + "extends": "dark", + "desc": "The component background color lights up the parent's background (as opposed to default behavior which is to darken it); Works unless you specify a CSS background color for it" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/bar/QBar.sass b/src/components/bar/QBar.sass new file mode 100644 index 00000000000..5a01a6672d7 --- /dev/null +++ b/src/components/bar/QBar.sass @@ -0,0 +1,35 @@ +.q-bar + background: rgba(0,0,0,.2) + + > .q-icon + margin-left: 2px + > div, > div + .q-icon + margin-left: 8px + > .q-btn + margin-left: 2px + + > .q-icon:first-child, > .q-btn:first-child, > div:first-child + margin-left: 0 + + &--standard + padding: 0 12px + height: 32px + font-size: 18px + > div + font-size: 16px + .q-btn + font-size: 11px + + &--dense + padding: 0 8px + height: 24px + font-size: 14px + .q-btn + font-size: 8px + + &--dark + background: rgba(255,255,255,.15) + +@media (prefers-color-scheme: dark) + .q-bar--dark-auto + background: rgba(255,255,255,.15) diff --git a/src/components/bar/QBar.styl b/src/components/bar/QBar.styl new file mode 100644 index 00000000000..5a01a6672d7 --- /dev/null +++ b/src/components/bar/QBar.styl @@ -0,0 +1,35 @@ +.q-bar + background: rgba(0,0,0,.2) + + > .q-icon + margin-left: 2px + > div, > div + .q-icon + margin-left: 8px + > .q-btn + margin-left: 2px + + > .q-icon:first-child, > .q-btn:first-child, > div:first-child + margin-left: 0 + + &--standard + padding: 0 12px + height: 32px + font-size: 18px + > div + font-size: 16px + .q-btn + font-size: 11px + + &--dense + padding: 0 8px + height: 24px + font-size: 14px + .q-btn + font-size: 8px + + &--dark + background: rgba(255,255,255,.15) + +@media (prefers-color-scheme: dark) + .q-bar--dark-auto + background: rgba(255,255,255,.15) diff --git a/src/components/bar/index.js b/src/components/bar/index.js new file mode 100644 index 00000000000..3ce17375062 --- /dev/null +++ b/src/components/bar/index.js @@ -0,0 +1,5 @@ +import QBar from './QBar.js' + +export { + QBar +} diff --git a/src/components/breadcrumbs/QBreadcrumbs.js b/src/components/breadcrumbs/QBreadcrumbs.js new file mode 100644 index 00000000000..2559381084b --- /dev/null +++ b/src/components/breadcrumbs/QBreadcrumbs.js @@ -0,0 +1,95 @@ +import Vue from 'vue' + +import AlignMixin from '../../mixins/align.js' +import { slot } from '../../utils/private/slot.js' +import ListenersMixin from '../../mixins/listeners.js' + +const disabledValues = [ true, '' ] + +export default Vue.extend({ + name: 'QBreadcrumbs', + + mixins: [ ListenersMixin, AlignMixin ], + + props: { + separator: { + type: String, + default: '/' + }, + separatorColor: String, + + activeColor: { + type: String, + default: 'primary' + }, + + gutter: { + type: String, + validator: v => ['none', 'xs', 'sm', 'md', 'lg', 'xl'].includes(v), + default: 'sm' + } + }, + + computed: { + classes () { + return `${this.alignClass}${this.gutter === 'none' ? '' : ` q-gutter-${this.gutter}`}` + }, + + sepClass () { + return this.separatorColor + ? ` text-${this.separatorColor}` + : '' + }, + + activeClass () { + return ` text-${this.activeColor}` + } + }, + + render (h) { + const nodes = slot(this, 'default') + if (nodes === void 0) { return } + + let els = 1 + + const + child = [], + len = nodes.filter(c => c.tag !== void 0 && c.tag.endsWith('-QBreadcrumbsEl')).length, + separator = this.$scopedSlots.separator !== void 0 + ? this.$scopedSlots.separator + : () => this.separator + + nodes.forEach(comp => { + if (comp.tag !== void 0 && comp.tag.endsWith('-QBreadcrumbsEl')) { + const middle = els < len + const disabled = disabledValues.includes(comp.componentOptions.propsData.disable) + const cls = middle === true + ? (disabled !== true ? this.activeClass : '') + : ' q-breadcrumbs--last' + + els++ + + child.push(h('div', { + staticClass: 'flex items-center' + cls + }, [ comp ])) + + middle === true && child.push(h('div', { + staticClass: 'q-breadcrumbs__separator' + this.sepClass + }, separator())) + } + else { + child.push(comp) + } + }) + + return h('div', { + staticClass: 'q-breadcrumbs', + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'flex items-center', + class: this.classes + }, child) + ]) + } +}) diff --git a/src/components/breadcrumbs/QBreadcrumbs.json b/src/components/breadcrumbs/QBreadcrumbs.json new file mode 100644 index 00000000000..80434661c23 --- /dev/null +++ b/src/components/breadcrumbs/QBreadcrumbs.json @@ -0,0 +1,63 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "separator": { + "type": "String", + "desc": "The string used to separate the breadcrumbs", + "default": "/", + "examples": [ "-", "|", ">" ], + "category": "content" + }, + + "active-color": { + "extends": "color", + "desc": "The color of the active breadcrumb, which can be any color from the Quasar Color Palette", + "default": "primary", + "category": "style" + }, + + "gutter": { + "type": "String", + "desc": "The gutter value allows you control over the space between the breadcrumb elements.", + "default": "sm", + "values": [ "none", "xs", "sm", "md", "lg", "xl" ], + "examples": [ "md", "lg" ], + "category": "content" + }, + + "separator-color": { + "extends": "color", + "desc": "The color used to color the separator, which can be any color from the Quasar Color Palette", + "category": "style" + }, + + "align": { + "type": "String", + "default": "left", + "desc": "Specify how to align the breadcrumbs horizontally", + "values": [ "left", "center", "right", "between", "around", "evenly" ], + "examples": [ "left", "center" ], + "category": "content" + } + }, + + "slots": { + "default": { + "extends": "default" + } + }, + + "scopedSlots": { + "separator": { + "desc": "HTML or component you can slot in to separate the breadcrumbs", + "scope": {} + } + } +} diff --git a/src/components/breadcrumbs/QBreadcrumbs.sass b/src/components/breadcrumbs/QBreadcrumbs.sass new file mode 100644 index 00000000000..afb21e06ab8 --- /dev/null +++ b/src/components/breadcrumbs/QBreadcrumbs.sass @@ -0,0 +1,13 @@ +.q-breadcrumbs + + &__el + color: inherit + + &__el-icon + font-size: 125% + + &--with-label + margin-right: 8px + +[dir=rtl] .q-breadcrumbs__separator .q-icon + transform: scaleX(-1) #{"/* rtl:ignore */"} diff --git a/src/components/breadcrumbs/QBreadcrumbs.styl b/src/components/breadcrumbs/QBreadcrumbs.styl new file mode 100644 index 00000000000..f3a6d49c59d --- /dev/null +++ b/src/components/breadcrumbs/QBreadcrumbs.styl @@ -0,0 +1,13 @@ +.q-breadcrumbs + + &__el + color: inherit + + &__el-icon + font-size: 125% + + &--with-label + margin-right: 8px + +[dir=rtl] .q-breadcrumbs__separator .q-icon + transform: scaleX(-1) /* rtl:ignore */ diff --git a/src/components/breadcrumbs/QBreadcrumbsEl.js b/src/components/breadcrumbs/QBreadcrumbsEl.js new file mode 100644 index 00000000000..a8faaf66552 --- /dev/null +++ b/src/components/breadcrumbs/QBreadcrumbsEl.js @@ -0,0 +1,57 @@ +import Vue from 'vue' + +import { mergeSlot } from '../../utils/private/slot.js' +import ListenersMixin from '../../mixins/listeners.js' +import RouterLinkMixin from '../../mixins/router-link.js' + +import QIcon from '../icon/QIcon.js' + +export default Vue.extend({ + name: 'QBreadcrumbsEl', + + mixins: [ ListenersMixin, RouterLinkMixin ], + + props: { + label: String, + icon: String + }, + + computed: { + iconClass () { + return 'q-breadcrumbs__el-icon' + + (this.label !== void 0 ? ' q-breadcrumbs__el-icon--with-label' : '') + }, + + renderData () { + return { + staticClass: 'q-breadcrumbs__el q-link ' + + 'flex inline items-center relative-position ' + + (this.disable !== true ? 'q-link--focusable' + this.linkClass : 'q-breadcrumbs__el--disabled'), + attrs: this.linkAttrs, + on: { + ...this.qListeners, + click: this.__navigateOnClick + } + } + } + }, + + beforeCreate () { + this.fallbackTag = 'span' + }, + + render (h) { + const child = [] + + this.icon !== void 0 && child.push( + h(QIcon, { + class: this.iconClass, + props: { name: this.icon } + }) + ) + + this.label !== void 0 && child.push(this.label) + + return h(this.linkTag, this.renderData, mergeSlot(child, this, 'default')) + } +}) diff --git a/src/components/breadcrumbs/QBreadcrumbsEl.json b/src/components/breadcrumbs/QBreadcrumbsEl.json new file mode 100644 index 00000000000..748d6201ae0 --- /dev/null +++ b/src/components/breadcrumbs/QBreadcrumbsEl.json @@ -0,0 +1,86 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/breadcrumbs" + }, + + "mixins": [ "mixins/router-link" ], + + "behavior": { + "$listeners": true + }, + + "props": { + "label": { + "type": "String", + "desc": "The label text for the breadcrumb", + "examples": [ "Home", "Index" ], + "category": "content" + }, + + "icon": { + "extends": "icon" + } + }, + + "slots": { + "default": { + "desc": "This is where custom content goes, unless 'icon' and 'label' props are not enough" + } + }, + + "events": { + "click": { + "desc": "Emitted when the component is clicked", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "required": true, + "__exemption": [ "examples" ] + }, + "navigateFn": { + "type": "Function", + "desc": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "addedIn": "v1.21", + "params": { + "opts": { + "type": "Object", + "desc": "Optional options", + "definition": { + "to": { + "type": [ "String", "Object" ], + "desc": "Equivalent to Vue Router 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ] + }, + + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop" + }, + + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property", + "default": "Tab's 'append' property" + }, + + "returnRouterError": { + "type": "Boolean", + "desc": "Return the router error, if any; Otherwise the returned Promise will always fulfill" + } + } + } + }, + "returns": { + "type": "Promise", + "desc": "Returns the router's navigation promise", + "__exemption": [ "examples" ] + } + } + } + } + } +} diff --git a/src/components/breadcrumbs/index.js b/src/components/breadcrumbs/index.js new file mode 100644 index 00000000000..140ea736806 --- /dev/null +++ b/src/components/breadcrumbs/index.js @@ -0,0 +1,7 @@ +import QBreadcrumbs from './QBreadcrumbs.js' +import QBreadcrumbsEl from './QBreadcrumbsEl.js' + +export { + QBreadcrumbs, + QBreadcrumbsEl +} diff --git a/src/components/btn-dropdown/QBtnDropdown.js b/src/components/btn-dropdown/QBtnDropdown.js new file mode 100644 index 00000000000..6a33328ea9a --- /dev/null +++ b/src/components/btn-dropdown/QBtnDropdown.js @@ -0,0 +1,254 @@ +import Vue from 'vue' + +import BtnMixin from '../../mixins/btn.js' +import AttrsMixin from '../../mixins/attrs.js' +import TransitionMixin from '../../mixins/transition.js' + +import QIcon from '../icon/QIcon.js' +import QBtn from '../btn/QBtn.js' +import QBtnGroup from '../btn-group/QBtnGroup.js' +import QMenu from '../menu/QMenu.js' + +import { slot } from '../../utils/private/slot.js' +import { stop } from '../../utils/event.js' +import cache from '../../utils/private/cache.js' +import uid from '../../utils/uid.js' + +// let's not duplicate type checking and prop validations +// so just specify the props here with no type description +const menuTransitionProps = Object.keys(TransitionMixin.props).reduce( + (acc, key) => (acc[ key ] = {}) && acc, + {} +) + +export default Vue.extend({ + name: 'QBtnDropdown', + + mixins: [ BtnMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + value: Boolean, + split: Boolean, + dropdownIcon: String, + + contentClass: [ Array, String, Object ], + contentStyle: [ Array, String, Object ], + + cover: Boolean, + persistent: Boolean, + noRouteDismiss: Boolean, + autoClose: Boolean, + + menuAnchor: { + type: String, + default: 'bottom end' + }, + menuSelf: { + type: String, + default: 'top end' + }, + menuOffset: Array, + ...menuTransitionProps, + + disableMainBtn: Boolean, + disableDropdown: Boolean, + + noIconAnimation: Boolean, + + toggleAriaLabel: String + }, + + data () { + return { + showing: this.value + } + }, + + watch: { + value (val) { + this.$refs.menu !== void 0 && this.$refs.menu[val ? 'show' : 'hide']() + }, + + split () { + this.hide() + } + }, + + render (h) { + const label = slot(this, 'label', []) + const attrs = { + 'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-haspopup': 'true', + 'aria-controls': this.targetUid, + 'aria-owns': this.targetUid, + 'aria-label': this.toggleAriaLabel || this.$q.lang.label[ this.showing === true ? 'collapse' : 'expand' ](this.label) + } + + if ( + this.disable === true || + ( + (this.split === false && this.disableMainBtn === true) || + this.disableDropdown === true + ) + ) { + attrs['aria-disabled'] = 'true' + } + + const Arrow = [ + h(QIcon, { + props: { name: this.dropdownIcon || this.$q.iconSet.arrow.dropdown }, + class: 'q-btn-dropdown__arrow' + + (this.showing === true && this.noIconAnimation === false ? ' rotate-180' : '') + + (this.split === false ? ' q-btn-dropdown__arrow-container' : '') + }) + ] + + this.disableDropdown !== true && Arrow.push( + h(QMenu, { + key: 'menu', + ref: 'menu', + attrs: { + id: this.targetUid + }, + props: { + cover: this.cover, + fit: true, + persistent: this.persistent, + noRouteDismiss: this.noRouteDismiss, + autoClose: this.autoClose, + anchor: this.menuAnchor, + self: this.menuSelf, + offset: this.menuOffset, + contentClass: this.contentClass, + contentStyle: this.contentStyle, + separateClosePopup: true, + transitionShow: this.transitionShow, + transitionHide: this.transitionHide + }, + on: cache(this, 'menu', { + 'before-show': e => { + this.showing = true + this.$emit('before-show', e) + }, + show: e => { + this.$emit('show', e) + this.$emit('input', true) + }, + 'before-hide': e => { + this.showing = false + this.$emit('before-hide', e) + }, + hide: e => { + this.$emit('hide', e) + this.$emit('input', false) + } + }) + }, slot(this, 'default')) + ) + + if (this.split === false) { + return h(QBtn, { + key: 'nonSpl', + class: 'q-btn-dropdown q-btn-dropdown--simple', + props: { + ...this.$props, + disable: this.disable === true || this.disableMainBtn === true, + noWrap: true, + round: false + }, + attrs: { + ...attrs, + ...this.qAttrs + }, + on: cache(this, 'nonSpl', { + click: e => { + this.$emit('click', e) + } + }), + scopedSlots: { + loading: this.$scopedSlots.loading + } + }, label.concat(Arrow)) + } + + const Btn = h(QBtn, { + key: 'spl', + class: 'q-btn-dropdown--current', + props: { + ...this.$props, + disable: this.disable === true || this.disableMainBtn === true, + noWrap: true, + iconRight: this.iconRight, + round: false + }, + attrs: this.qAttrs, + on: cache(this, 'spl', { + click: e => { + stop(e) // prevent showing the menu on click + this.hide() + this.$emit('click', e) + } + }), + scopedSlots: { + loading: this.$scopedSlots.loading + } + }, label) + + return h(QBtnGroup, { + props: { + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + square: this.square, + push: this.push, + unelevated: this.unelevated, + glossy: this.glossy, + stretch: this.stretch + }, + staticClass: 'q-btn-dropdown q-btn-dropdown--split no-wrap q-btn-item' + }, [ + Btn, + + h(QBtn, { + staticClass: 'q-btn-dropdown__arrow-container q-anchor--skip', + attrs, + props: { + disable: this.disable === true || this.disableDropdown === true, + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + push: this.push, + size: this.size, + color: this.color, + textColor: this.textColor, + dense: this.dense, + ripple: this.ripple + } + }, Arrow) + ]) + }, + + methods: { + toggle (evt) { + this.$refs.menu && this.$refs.menu.toggle(evt) + }, + + show (evt) { + this.$refs.menu && this.$refs.menu.show(evt) + }, + + hide (evt) { + this.$refs.menu && this.$refs.menu.hide(evt) + } + }, + + created () { + this.targetUid = `d_${uid()}` + }, + + mounted () { + this.value === true && this.show() + } +}) diff --git a/src/components/btn-dropdown/QBtnDropdown.json b/src/components/btn-dropdown/QBtnDropdown.json new file mode 100644 index 00000000000..711296dc355 --- /dev/null +++ b/src/components/btn-dropdown/QBtnDropdown.json @@ -0,0 +1,168 @@ +{ + "mixins": [ "mixins/btn", "mixins/model-toggle" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/button-dropdown" + }, + + "props": { + "value": { + "desc": "Controls Menu show/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ "v-model=\"menuState\"" ], + "category": "model" + }, + + "split": { + "type": "Boolean", + "desc": "Split dropdown icon into its own button", + "category": "content|behavior" + }, + + "dropdown-icon": { + "extends": "icon", + "addedIn": "v1.1.6" + }, + + "disable-main-btn": { + "type": "Boolean", + "desc": "Disable main button (useful along with 'split' prop)", + "category": "behavior" + }, + + "disable-dropdown": { + "type": "Boolean", + "desc": "Disables dropdown (dropdown button if using along 'split' prop)", + "category": "behavior" + }, + + "no-icon-animation": { + "type": "Boolean", + "desc": "Disables the rotation of the dropdown icon when state is toggled", + "category": "style", + "addedIn": "v1.12" + }, + + "content-style": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the menu", + "examples": [ + "background-color: #ff0000", + ":content-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + + "content-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the menu", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + + "cover": { + "type": "Boolean", + "desc": "Allows the menu to cover the button. When used, the 'menu-self' and 'menu-fit' props are no longer effective", + "category": "position" + }, + + "persistent": { + "type": "Boolean", + "desc": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key", + "category": "behavior" + }, + + "no-route-dismiss": { + "type": "Boolean", + "desc": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set", + "category": "behavior", + "addedIn": "v1.13.2" + }, + + "auto-close": { + "type": "Boolean", + "desc": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap", + "category": "behavior" + }, + + "menu-anchor": { + "type": "String", + "desc": "Two values setting the starting position or anchor point of the menu relative to its target", + "values": [ + "top left", "top middle", "top right", "top start", "top end", + "center left", "center middle", "center right", "center start", "center end", + "bottom left", "bottom middle", "bottom right", "bottom start", "bottom end" + ], + "default": "bottom end", + "examples": [ "top right", "bottom end" ], + "category": "position" + }, + + "menu-self": { + "type": "String", + "desc": "Two values setting the menu's own position relative to its target", + "values": [ + "top left", "top middle", "top right", "top start", "top end", + "center left", "center middle", "center right", "center start", "center end", + "bottom left", "bottom middle", "bottom right", "bottom start", "bottom end" + ], + "default": "top end", + "examples": [ "top right", "bottom end" ], + "category": "position" + }, + + "menu-offset": { + "type": "Array", + "desc": "An array of two numbers to offset the menu horizontally and vertically in pixels", + "examples": [ "[8, 8]", "[5, 10]" ], + "category": "position", + "addedIn": "v1.9.2" + }, + + "transition-show": { + "extends": "transition", + "default": "fade", + "category": "behavior", + "addedIn": "v1.22" + }, + + "transition-hide": { + "extends": "transition", + "default": "fade", + "category": "behavior", + "addedIn": "v1.22" + }, + + "toggle-aria-label": { + "type": "String", + "desc": "aria-label to be used on the dropdown toggle element", + "examples": [ "Open menu" ], + "category": "accessibility", + "addedIn": "v1.20.2" + } + }, + + "slots": { + "default": { + "extends": "default" + }, + + "label": { + "desc": "Customize main button's content through this slot, unless you're using the 'icon' and 'label' props" + }, + + "loading": { + "desc": "Override the default QSpinner when in 'loading' state", + "addedIn": "v1.19.6" + } + }, + + "events": { + "click": { + "extends": "click", + "desc": "Emitted when user clicks/taps on the main button (not the icon one, if using 'split')" + } + } +} diff --git a/src/components/btn-dropdown/QBtnDropdown.sass b/src/components/btn-dropdown/QBtnDropdown.sass new file mode 100644 index 00000000000..04e7925cb03 --- /dev/null +++ b/src/components/btn-dropdown/QBtnDropdown.sass @@ -0,0 +1,17 @@ +.q-btn-dropdown + &--split .q-btn-dropdown__arrow-container + &.q-btn--outline + border-left: 1px solid currentColor + &:not(.q-btn--outline) + border-left: 1px solid rgba(255,255,255,.3) + + .q-btn__wrapper + padding: 0 4px + + &--simple * + .q-btn-dropdown__arrow + margin-left: 8px + &__arrow + transition: transform .28s + + &--current + flex-grow: 1 diff --git a/src/components/btn-dropdown/QBtnDropdown.styl b/src/components/btn-dropdown/QBtnDropdown.styl new file mode 100644 index 00000000000..04e7925cb03 --- /dev/null +++ b/src/components/btn-dropdown/QBtnDropdown.styl @@ -0,0 +1,17 @@ +.q-btn-dropdown + &--split .q-btn-dropdown__arrow-container + &.q-btn--outline + border-left: 1px solid currentColor + &:not(.q-btn--outline) + border-left: 1px solid rgba(255,255,255,.3) + + .q-btn__wrapper + padding: 0 4px + + &--simple * + .q-btn-dropdown__arrow + margin-left: 8px + &__arrow + transition: transform .28s + + &--current + flex-grow: 1 diff --git a/src/components/btn-dropdown/index.js b/src/components/btn-dropdown/index.js new file mode 100644 index 00000000000..29964416615 --- /dev/null +++ b/src/components/btn-dropdown/index.js @@ -0,0 +1,5 @@ +import QBtnDropdown from './QBtnDropdown.js' + +export { + QBtnDropdown +} diff --git a/src/components/btn-group/QBtnGroup.js b/src/components/btn-group/QBtnGroup.js new file mode 100644 index 00000000000..4f69acee3e2 --- /dev/null +++ b/src/components/btn-group/QBtnGroup.js @@ -0,0 +1,40 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QBtnGroup', + + mixin: [ ListenersMixin ], + + props: { + unelevated: Boolean, + outline: Boolean, + flat: Boolean, + rounded: Boolean, + square: Boolean, + push: Boolean, + stretch: Boolean, + glossy: Boolean, + spread: Boolean + }, + + computed: { + classes () { + return ['unelevated', 'outline', 'flat', 'rounded', 'square', 'push', 'stretch', 'glossy'] + .filter(t => this[t] === true) + .map(t => `q-btn-group--${t}`).join(' ') + } + }, + + render (h) { + return h('div', { + staticClass: 'q-btn-group row no-wrap ' + + (this.spread === true ? 'q-btn-group--spread' : 'inline'), + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/btn-group/QBtnGroup.json b/src/components/btn-group/QBtnGroup.json new file mode 100644 index 00000000000..6d883aa4452 --- /dev/null +++ b/src/components/btn-group/QBtnGroup.json @@ -0,0 +1,70 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/button-group" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "spread": { + "type": "Boolean", + "desc": "Spread horizontally to all available space", + "category": "content" + }, + + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design for buttons", + "category": "style" + }, + + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design for buttons", + "category": "style" + }, + + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow on buttons", + "category": "style" + }, + + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for squared shape buttons", + "category": "style" + }, + + "square": { + "extends": "square", + "addedIn": "v1.22" + }, + + "push": { + "type": "Boolean", + "desc": "Use 'push' design for buttons", + "category": "style" + }, + + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, buttons will stretch to parent's height", + "category": "content" + }, + + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect", + "category": "style" + } + }, + + "slots": { + "default": { + "desc": "Suggestion: QBtn" + } + } +} diff --git a/src/components/btn-group/QBtnGroup.sass b/src/components/btn-group/QBtnGroup.sass new file mode 100644 index 00000000000..0c4ca9db9bb --- /dev/null +++ b/src/components/btn-group/QBtnGroup.sass @@ -0,0 +1,91 @@ +.q-btn-group + border-radius: $button-border-radius + box-shadow: $button-shadow + vertical-align: middle + + > .q-btn-item + border-radius: inherit + align-self: stretch + + .q-btn__wrapper:before + box-shadow: none + + .q-badge--floating + right: 0 + + > .q-btn-group + box-shadow: none + + &:first-child + > .q-btn:first-child + border-top-left-radius: inherit + border-bottom-left-radius: inherit + &:last-child + > .q-btn:last-child + border-top-right-radius: inherit + border-bottom-right-radius: inherit + > .q-btn-group:not(:first-child) > .q-btn:first-child + .q-btn__wrapper:before + border-left: 0 + > .q-btn-group:not(:last-child) > .q-btn:last-child + .q-btn__wrapper:before + border-right: 0 + > .q-btn-item:not(:last-child) + border-top-right-radius: 0 + border-bottom-right-radius: 0 + > .q-btn-item:not(:first-child) + border-top-left-radius: 0 + border-bottom-left-radius: 0 + > .q-btn-item.q-btn--standard + .q-btn__wrapper:before + z-index: -1 + + &--push + border-radius: $button-push-border-radius + + > .q-btn--push + &.q-btn--actionable + transform: none + + .q-btn__wrapper + transition: margin-top $button-transition, margin-bottom $button-transition, box-shadow $button-transition + &:active, + &.q-btn--active + .q-btn__wrapper + margin-top: 2px + margin-bottom: -2px + &--rounded + border-radius: $button-rounded-border-radius + + &--square + border-radius: 0 + + &--flat, &--outline, &--unelevated + box-shadow: none + + &--outline + > .q-separator + display: none + > .q-btn-item + .q-btn-item + .q-btn__wrapper:before + border-left: 0 + > .q-btn-item:not(:last-child) + .q-btn__wrapper:before + border-right: 0 + + &--stretch + align-self: stretch + border-radius: 0 + + &--glossy + > .q-btn-item + background-image: linear-gradient(to bottom, rgba(#fff, .3), rgba(#fff, 0) 50%, rgba(#000, .12) 51%, rgba(#000, .04)) !important + + &--spread + > .q-btn-group + display: flex !important + > .q-btn-item, > .q-btn-group > .q-btn-item:not(.q-btn-dropdown__arrow-container) + width: auto + min-width: 0 + max-width: 100% + flex: 10000 1 0% diff --git a/src/components/btn-group/QBtnGroup.styl b/src/components/btn-group/QBtnGroup.styl new file mode 100644 index 00000000000..0c4ca9db9bb --- /dev/null +++ b/src/components/btn-group/QBtnGroup.styl @@ -0,0 +1,91 @@ +.q-btn-group + border-radius: $button-border-radius + box-shadow: $button-shadow + vertical-align: middle + + > .q-btn-item + border-radius: inherit + align-self: stretch + + .q-btn__wrapper:before + box-shadow: none + + .q-badge--floating + right: 0 + + > .q-btn-group + box-shadow: none + + &:first-child + > .q-btn:first-child + border-top-left-radius: inherit + border-bottom-left-radius: inherit + &:last-child + > .q-btn:last-child + border-top-right-radius: inherit + border-bottom-right-radius: inherit + > .q-btn-group:not(:first-child) > .q-btn:first-child + .q-btn__wrapper:before + border-left: 0 + > .q-btn-group:not(:last-child) > .q-btn:last-child + .q-btn__wrapper:before + border-right: 0 + > .q-btn-item:not(:last-child) + border-top-right-radius: 0 + border-bottom-right-radius: 0 + > .q-btn-item:not(:first-child) + border-top-left-radius: 0 + border-bottom-left-radius: 0 + > .q-btn-item.q-btn--standard + .q-btn__wrapper:before + z-index: -1 + + &--push + border-radius: $button-push-border-radius + + > .q-btn--push + &.q-btn--actionable + transform: none + + .q-btn__wrapper + transition: margin-top $button-transition, margin-bottom $button-transition, box-shadow $button-transition + &:active, + &.q-btn--active + .q-btn__wrapper + margin-top: 2px + margin-bottom: -2px + &--rounded + border-radius: $button-rounded-border-radius + + &--square + border-radius: 0 + + &--flat, &--outline, &--unelevated + box-shadow: none + + &--outline + > .q-separator + display: none + > .q-btn-item + .q-btn-item + .q-btn__wrapper:before + border-left: 0 + > .q-btn-item:not(:last-child) + .q-btn__wrapper:before + border-right: 0 + + &--stretch + align-self: stretch + border-radius: 0 + + &--glossy + > .q-btn-item + background-image: linear-gradient(to bottom, rgba(#fff, .3), rgba(#fff, 0) 50%, rgba(#000, .12) 51%, rgba(#000, .04)) !important + + &--spread + > .q-btn-group + display: flex !important + > .q-btn-item, > .q-btn-group > .q-btn-item:not(.q-btn-dropdown__arrow-container) + width: auto + min-width: 0 + max-width: 100% + flex: 10000 1 0% diff --git a/src/components/btn-group/index.js b/src/components/btn-group/index.js new file mode 100644 index 00000000000..f417e5e04c2 --- /dev/null +++ b/src/components/btn-group/index.js @@ -0,0 +1,5 @@ +import QBtnGroup from './QBtnGroup.js' + +export { + QBtnGroup +} diff --git a/src/components/btn-toggle/QBtnToggle.js b/src/components/btn-toggle/QBtnToggle.js new file mode 100644 index 00000000000..f34abbb5e50 --- /dev/null +++ b/src/components/btn-toggle/QBtnToggle.js @@ -0,0 +1,169 @@ +import Vue from 'vue' + +import QBtn from '../btn/QBtn.js' +import QBtnGroup from '../btn-group/QBtnGroup.js' + +import ListenersMixin from '../../mixins/listeners.js' +import FormMixin from '../../mixins/form.js' +import RippleMixin from '../../mixins/ripple.js' + +import { slot, mergeSlot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QBtnToggle', + + mixins: [ ListenersMixin, RippleMixin, FormMixin ], + + props: { + value: { + required: true + }, + + options: { + type: Array, + required: true, + validator: v => v.every( + opt => ('label' in opt || 'icon' in opt || 'slot' in opt) && 'value' in opt + ) + }, + + // To avoid seeing the active raise shadow through the transparent button, give it a color (even white). + color: String, + textColor: String, + toggleColor: { + type: String, + default: 'primary' + }, + toggleTextColor: String, + + outline: Boolean, + flat: Boolean, + unelevated: Boolean, + rounded: Boolean, + push: Boolean, + glossy: Boolean, + + size: String, + padding: String, + + noCaps: Boolean, + noWrap: Boolean, + dense: Boolean, + readonly: Boolean, + disable: Boolean, + + stack: Boolean, + stretch: Boolean, + + spread: Boolean, + + clearable: Boolean + }, + + computed: { + hasActiveValue () { + return this.options.find(opt => opt.value === this.value) !== void 0 + }, + + formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.value + } + }, + + btnOptions () { + const mergeOption = (opt, key) => opt[key] === void 0 ? this[key] : opt[key] + + return this.options.map((opt, i) => ({ + slot: opt.slot, + + options: { + key: i, + class: opt.class, + style: opt.style, + on: { + ...this.qListeners, + click: e => this.__set(opt.value, opt, e) + }, + attrs: { + 'aria-pressed': opt.value === this.value ? 'true' : 'false', + ...opt.attrs + }, + props: { + ...opt, + slot: void 0, + class: void 0, + style: void 0, + value: void 0, + attrs: void 0, + + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + push: this.push, + unelevated: this.unelevated, + dense: this.dense, + + disable: this.disable === true || opt.disable === true, + + // Options that come from the button specific options first, then from general props + color: opt.value === this.value ? mergeOption(opt, 'toggleColor') : mergeOption(opt, 'color'), + textColor: opt.value === this.value ? mergeOption(opt, 'toggleTextColor') : mergeOption(opt, 'textColor'), + noCaps: mergeOption(opt, 'noCaps') === true, + noWrap: mergeOption(opt, 'noWrap') === true, + + size: mergeOption(opt, 'size'), + padding: mergeOption(opt, 'padding'), + ripple: mergeOption(opt, 'ripple'), + stack: mergeOption(opt, 'stack') === true, + stretch: mergeOption(opt, 'stretch') === true + } + } + })) + } + }, + + methods: { + __set (value, opt, e) { + if (this.readonly !== true) { + if (this.value === value) { + if (this.clearable === true) { + this.$emit('input', null, null) + this.$emit('clear') + } + } + else { + this.$emit('input', value, opt) + } + + this.$emit('click', e) + } + } + }, + + render (h) { + const child = this.btnOptions.map(opt => { + return h(QBtn, { ...opt.options }, opt.slot !== void 0 ? slot(this, opt.slot) : void 0) + }) + + if (this.name !== void 0 && this.disable !== true && this.hasActiveValue === true) { + this.__injectFormInput(child, 'push') + } + + return h(QBtnGroup, { + staticClass: 'q-btn-toggle', + props: { + outline: this.outline, + flat: this.flat, + rounded: this.rounded, + push: this.push, + stretch: this.stretch, + unelevated: this.unelevated, + glossy: this.glossy, + spread: this.spread + } + }, mergeSlot(child, this, 'default')) + } +}) diff --git a/src/components/btn-toggle/QBtnToggle.json b/src/components/btn-toggle/QBtnToggle.json new file mode 100644 index 00000000000..912e7039677 --- /dev/null +++ b/src/components/btn-toggle/QBtnToggle.json @@ -0,0 +1,199 @@ +{ + "mixins": [ "mixins/ripple", "mixins/form" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/button-toggle" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "type": "Any", + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ "v-model=\"selected\"" ], + "category": "model" + }, + + "options": { + "type": "Array", + "desc": "Array of Objects defining each option", + "required": true, + "definition": { + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the button", + "examples": [ "{ 'aria-label': 'Button label' }" ], + "__exemption": [ "definition" ], + "addedIn": "v1.13" + }, + "label": { + "type": "String", + "desc": "Label of option button; Use this prop and/or 'icon', but at least one is required", + "examples": [ "Option 1" ] + }, + "icon": { + "extends": "icon", + "desc": "Icon of option button; Use this prop and/or 'label', but at least one is required" + }, + "value": { + "type": "Any", + "desc": "Value of the option that will be used by component model", + "required": true, + "__exemption": [ "examples" ] + }, + "slot": { + "type": "String", + "desc": "Slot name to use for this button content; Useful for customizing content or even add tooltips", + "examples": [ "mySlot" ] + }, + "...props": { + "type": "Any", + "desc": "Any other QBtn props (including class and style)", + "__exemption": [ "examples" ] + } + }, + "examples": [ + "[ {label: 'One', value: 'one'}, {label: 'Two', value: 'two'} ]" + ], + "category": "model" + }, + + "color": { + "extends": "color" + }, + + "text-color": { + "extends": "text-color" + }, + + "toggle-color": { + "extends": "color", + "default": "primary" + }, + + "toggle-text-color": { + "extends": "text-color" + }, + + "spread": { + "type": "Boolean", + "desc": "Spread horizontally to all available space", + "category": "content" + }, + + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design", + "category": "style" + }, + + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design", + "category": "style" + }, + + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow", + "category": "style" + }, + + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for a squared shape button", + "category": "style" + }, + + "push": { + "type": "Boolean", + "desc": "Use 'push' design", + "category": "style" + }, + + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect", + "category": "style" + }, + + "size": { + "type": "String", + "desc": "Button size name or a CSS unit including unit name", + "examples": [ "xs", "sm", "md", "lg", "xl", "25px", "2rem" ], + "category": "style" + }, + + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ "16px", "10px 5px", "2rem", "xs", "md lg", "2px 2px 5px 7px" ], + "category": "style", + "addedIn": "v1.13" + }, + + "no-caps": { + "type": "Boolean", + "desc": "Avoid turning label text into caps (which happens by default)", + "category": "content" + }, + + "no-wrap": { + "type": "Boolean", + "desc": "Avoid label text wrapping", + "category": "content" + }, + + "dense": { + "extends": "dense" + }, + + "readonly": { + "extends": "readonly" + }, + + "disable": { + "extends": "disable" + }, + + "stack": { + "type": "Boolean", + "desc": "Stack icon and label vertically instead of on same line (like it is by default)", + "category": "content" + }, + + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, button will stretch to parent's height", + "category": "content" + }, + + "clearable": { + "type": "Boolean", + "desc": "Clears model on click of the already selected button", + "category": "model", + "addedIn": "v1.4.4" + } + }, + + "events": { + "input": { + "extends": "input" + }, + + "clear": { + "desc": "When using the 'clearable' property, this event is emitted when the already selected button is clicked", + "addedIn": "v1.4.4" + } + }, + + "slots": { + "default": { + "desc": "Suggestions: QTooltip, QBadge", + "addedIn": "v1.13.2" + } + } +} diff --git a/src/components/btn-toggle/QBtnToggle.sass b/src/components/btn-toggle/QBtnToggle.sass new file mode 100644 index 00000000000..3113abf7f7f --- /dev/null +++ b/src/components/btn-toggle/QBtnToggle.sass @@ -0,0 +1,2 @@ +.q-btn-toggle + position: relative diff --git a/src/components/btn-toggle/QBtnToggle.styl b/src/components/btn-toggle/QBtnToggle.styl new file mode 100644 index 00000000000..3113abf7f7f --- /dev/null +++ b/src/components/btn-toggle/QBtnToggle.styl @@ -0,0 +1,2 @@ +.q-btn-toggle + position: relative diff --git a/src/components/btn-toggle/index.js b/src/components/btn-toggle/index.js new file mode 100644 index 00000000000..f80582616bc --- /dev/null +++ b/src/components/btn-toggle/index.js @@ -0,0 +1,5 @@ +import QBtnToggle from './QBtnToggle.js' + +export { + QBtnToggle +} diff --git a/src/components/btn/QBtn.js b/src/components/btn/QBtn.js new file mode 100644 index 00000000000..306547342d5 --- /dev/null +++ b/src/components/btn/QBtn.js @@ -0,0 +1,331 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' +import QSpinner from '../spinner/QSpinner.js' + +import BtnMixin from '../../mixins/btn.js' + +import { mergeSlot } from '../../utils/private/slot.js' +import { stop, prevent, stopAndPrevent, listenOpts } from '../../utils/event.js' +import { isKeyCode } from '../../utils/private/key-composition.js' + +const { passiveCapture } = listenOpts + +let + touchTarget = void 0, + keyboardTarget = void 0, + mouseTarget = void 0 + +const iconAttrs = { role: 'img', 'aria-hidden': 'true' } + +export default Vue.extend({ + name: 'QBtn', + + mixins: [ BtnMixin ], + + props: { + percentage: Number, + darkPercentage: Boolean + }, + + computed: { + hasLabel () { + return this.label !== void 0 && this.label !== null && this.label !== '' + }, + + computedRipple () { + return this.ripple === false + ? false + : { + keyCodes: this.hasLink === true ? [ 13, 32 ] : [ 13 ], + ...(this.ripple === true ? {} : this.ripple) + } + }, + + percentageStyle () { + const val = Math.max(0, Math.min(100, this.percentage)) + if (val > 0) { + return { transition: 'transform 0.6s', transform: `translateX(${val - 100}%)` } + } + }, + + onEvents () { + if (this.loading === true) { + return { + mousedown: this.__onLoadingEvt, + touchstart: this.__onLoadingEvt, + click: this.__onLoadingEvt, + keydown: this.__onLoadingEvt, + keyup: this.__onLoadingEvt + } + } + + if (this.isActionable === true) { + const on = { + ...this.qListeners, + click: this.click, + keydown: this.__onKeydown, + mousedown: this.__onMousedown + } + + if (this.$q.platform.has.touch === true) { + on[ `${on.touchstart === void 0 ? '&' : ''}touchstart` ] = this.__onTouchstart + } + + return on + } + + return { + // needed; especially for disabled tags + click: stopAndPrevent + } + }, + + directives () { + if (this.disable !== true && this.ripple !== false) { + return [{ + name: 'ripple', + value: this.computedRipple, + modifiers: { center: this.round } + }] + } + } + }, + + methods: { + click (e) { + if (e !== void 0) { + if (e.defaultPrevented === true) { + return + } + + const el = document.activeElement + // focus button if it came from ENTER on form + // prevent the new submit (already done) + if ( + this.type === 'submit' && + ( + (this.$q.platform.is.ie === true && (e.clientX < 0 || e.clientY < 0)) || + ( + el !== document.body && + this.$el.contains(el) === false && + // required for iOS and desktop Safari + el.contains(this.$el) === false + ) + ) + ) { + this.$el.focus() + + const onClickCleanup = () => { + document.removeEventListener('keydown', stopAndPrevent, true) + document.removeEventListener('keyup', onClickCleanup, passiveCapture) + this.$el !== void 0 && this.$el.removeEventListener('blur', onClickCleanup, passiveCapture) + } + + document.addEventListener('keydown', stopAndPrevent, true) + document.addEventListener('keyup', onClickCleanup, passiveCapture) + this.$el.addEventListener('blur', onClickCleanup, passiveCapture) + } + } + + this.__navigateOnClick(e) + }, + + __onKeydown (e) { + this.$emit('keydown', e) + + if (isKeyCode(e, [ 13, 32 ]) === true) { + if (keyboardTarget !== this.$el) { + keyboardTarget !== void 0 && this.__cleanup() + + if (e.defaultPrevented !== true) { + // focus external button if the focus helper was focused before + this.$el.focus() + + keyboardTarget = this.$el + this.$el.classList.add('q-btn--active') + document.addEventListener('keyup', this.__onPressEnd, true) + this.$el.addEventListener('blur', this.__onPressEnd, passiveCapture) + } + } + + stopAndPrevent(e) + } + }, + + __onTouchstart (e) { + this.$emit('touchstart', e) + + if (touchTarget !== this.$el) { + touchTarget !== void 0 && this.__cleanup() + + if (e.defaultPrevented !== true) { + touchTarget = this.$el + const target = this.touchTargetEl = e.target + target.addEventListener('touchcancel', this.__onPressEnd, passiveCapture) + target.addEventListener('touchend', this.__onPressEnd, passiveCapture) + } + } + }, + + __onMousedown (e) { + this.$emit('mousedown', e) + + if (mouseTarget !== this.$el) { + mouseTarget !== void 0 && this.__cleanup() + + if (e.defaultPrevented !== true) { + mouseTarget = this.$el + this.$el.classList.add('q-btn--active') + document.addEventListener('mouseup', this.__onPressEnd, passiveCapture) + } + } + }, + + __onPressEnd (e) { + // needed for IE (because it emits blur when focusing button from focus helper) + if (e !== void 0 && e.type === 'blur' && document.activeElement === this.$el) { + return + } + + if (e !== void 0 && e.type === 'keyup') { + if (keyboardTarget === this.$el && isKeyCode(e, [ 13, 32 ]) === true) { + // for click trigger + const evt = new MouseEvent('click', e) + e.defaultPrevented === true && prevent(evt) + e.cancelBubble === true && stop(evt) + this.$el.dispatchEvent(evt) + + stopAndPrevent(e) + } + + this.$emit('keyup', e) + } + + this.__cleanup() + }, + + __cleanup (destroying) { + const blurTarget = this.$refs.blurTarget + + if ( + destroying !== true && + (touchTarget === this.$el || mouseTarget === this.$el) && + blurTarget !== void 0 && + blurTarget !== document.activeElement && + this.$el.contains(document.activeElement) === true + ) { + blurTarget.setAttribute('tabindex', -1) + blurTarget.focus() + } + + if (touchTarget === this.$el) { + const target = this.touchTargetEl + target.removeEventListener('touchcancel', this.__onPressEnd, passiveCapture) + target.removeEventListener('touchend', this.__onPressEnd, passiveCapture) + touchTarget = this.touchTargetEl = void 0 + } + + if (mouseTarget === this.$el) { + document.removeEventListener('mouseup', this.__onPressEnd, passiveCapture) + mouseTarget = void 0 + } + + if (keyboardTarget === this.$el) { + document.removeEventListener('keyup', this.__onPressEnd, true) + this.$el !== void 0 && this.$el.removeEventListener('blur', this.__onPressEnd, passiveCapture) + keyboardTarget = void 0 + } + + this.$el !== void 0 && this.$el.classList.remove('q-btn--active') + }, + + __onLoadingEvt (evt) { + stopAndPrevent(evt) + evt.qSkipRipple = true + } + }, + + beforeDestroy () { + this.__cleanup(true) + }, + + render (h) { + let inner = [] + + this.icon !== void 0 && inner.push( + h(QIcon, { + attrs: iconAttrs, + props: { name: this.icon, left: this.stack === false && this.hasLabel === true } + }) + ) + + this.hasLabel === true && inner.push( + h('span', { staticClass: 'block' }, [ this.label ]) + ) + + inner = mergeSlot(inner, this, 'default') + + if (this.iconRight !== void 0 && this.round === false) { + inner.push( + h(QIcon, { + attrs: iconAttrs, + props: { name: this.iconRight, right: this.stack === false && this.hasLabel === true } + }) + ) + } + + const child = [ + h('span', { + staticClass: 'q-focus-helper', + ref: 'blurTarget' + }) + ] + + if (this.loading === true && this.percentage !== void 0) { + child.push( + h('span', { + staticClass: 'q-btn__progress absolute-full overflow-hidden', + class: this.darkPercentage === true ? 'q-btn__progress--dark' : '' + }, [ + h('span', { + staticClass: 'q-btn__progress-indicator fit block', + style: this.percentageStyle + }) + ]) + ) + } + + child.push( + h('span', { + staticClass: 'q-btn__wrapper col row q-anchor--skip', + style: this.wrapperStyle + }, [ + h('span', { + staticClass: 'q-btn__content text-center col items-center q-anchor--skip', + class: this.innerClasses + }, inner) + ]) + ) + + this.loading !== null && child.push( + h('transition', { + props: { name: 'q-transition--fade' } + }, this.loading === true ? [ + h('span', { + key: 'loading', + staticClass: 'absolute-full flex flex-center' + }, this.$scopedSlots.loading !== void 0 ? this.$scopedSlots.loading() : [ h(QSpinner) ]) + ] : void 0) + ) + + return h(this.hasLink === true || this.type === 'a' ? 'a' : 'button', { + staticClass: 'q-btn q-btn-item non-selectable no-outline', + class: this.classes, + style: this.style, + attrs: this.attrs, + on: this.onEvents, + directives: this.directives + }, child) + } +}) diff --git a/src/components/btn/QBtn.json b/src/components/btn/QBtn.json new file mode 100644 index 00000000000..332dfd5fdd0 --- /dev/null +++ b/src/components/btn/QBtn.json @@ -0,0 +1,112 @@ +{ + "mixins": [ "mixins/btn" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/button" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "round": { + "type": "Boolean", + "desc": "Makes a circle shaped button", + "category": "style" + }, + + "percentage": { + "type": "Number", + "desc": "Percentage (0.0 < x < 100.0); To be used along 'loading' prop; Display a progress bar on the background", + "examples": [ 23 ], + "category": "behavior" + }, + + "dark-percentage": { + "type": "Boolean", + "desc": "Progress bar on the background should have dark color; To be used along with 'percentage' and 'loading' props", + "category": "behavior" + } + }, + + "slots": { + "default": { + "desc": "Use for custom content, instead of relying on 'icon' and 'label' props" + }, + + "loading": { + "desc": "Override the default QSpinner when in 'loading' state" + } + }, + + "methods": { + "click": { + "desc": "Emulate click on QBtn", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + } + }, + + "events": { + "click": { + "desc": "Emitted when the component is clicked", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "required": true, + "__exemption": [ "examples" ] + }, + "navigateFn": { + "type": "Function", + "desc": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "params": { + "opts": { + "type": "Object", + "desc": "Optional options", + "addedIn": "v1.21", + "definition": { + "to": { + "type": [ "String", "Object" ], + "desc": "Equivalent to Vue Router 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ] + }, + + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop" + }, + + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property", + "default": "Tab's 'append' property" + }, + + "returnRouterError": { + "type": "Boolean", + "desc": "Return the router error, if any; Otherwise the returned Promise will always fulfill" + } + } + } + }, + "returns": { + "type": "Promise", + "desc": "Returns the router's navigation promise", + "__exemption": [ "examples" ], + "addedIn": "v1.21" + } + } + } + } + } +} diff --git a/src/components/btn/QBtn.sass b/src/components/btn/QBtn.sass new file mode 100644 index 00000000000..425bf2bd54c --- /dev/null +++ b/src/components/btn/QBtn.sass @@ -0,0 +1,160 @@ +.q-btn + display: inline-flex + flex-direction: column + align-items: stretch + position: relative + outline: 0 + border: 0 + vertical-align: middle + padding: 0 + font-size: $button-font-size + line-height: $button-line-height + text-decoration: none + color: inherit + background: transparent + font-weight: $button-font-weight + text-transform: uppercase + text-align: center + width: auto + height: auto + + .q-icon, .q-spinner + font-size: $button-line-height + + &.disabled + opacity: .7 !important + + &__wrapper + padding: $button-padding + min-height: 2.572em + border-radius: inherit + width: 100% + height: 100% + + &:before + content: '' + display: block + position: absolute + left: 0 + right: 0 + top: 0 + bottom: 0 + border-radius: inherit + box-shadow: $button-shadow + + &--actionable + cursor: pointer + + &.q-btn--standard + .q-btn__wrapper:before + // This places the button active raise shadow behind adjacent elements + // Active raise shadow will still be visible under adjacent transparent elements, this is ok and coherent with a desired transparency effect. + // Visible active raise shadow can be removed by specifying a background color to the button + // Visible active raise shadow can be removed by specifying a flat or outline button type + transition: box-shadow $button-transition + &:active, + &.q-btn--active + .q-btn__wrapper:before + box-shadow: $button-shadow-active + + + &--no-uppercase + text-transform: none + + &--rectangle + border-radius: $button-border-radius + + &--outline + background: transparent !important + + .q-btn__wrapper:before + border: 1px solid currentColor + + &--push + border-radius: $button-push-border-radius + + .q-btn__wrapper:before + border-bottom: 3px solid rgba(0,0,0,.15) + + &.q-btn--actionable + transition: transform $button-transition + + .q-btn__wrapper:before + transition: top $button-transition, bottom $button-transition, border-bottom-width $button-transition + + &:active, + &.q-btn--active + transform: translateY(2px) + + .q-btn__wrapper:before + border-bottom-width: 0 + + &--rounded + border-radius: $button-rounded-border-radius + + &--round + border-radius: 50% + + .q-btn__wrapper + padding: 0 + min-width: 3em + min-height: 3em + + &--flat, &--outline, &--unelevated + .q-btn__wrapper:before + box-shadow: none + + &--dense + .q-btn__wrapper + padding: $button-dense-padding + min-height: 2em + &.q-btn--round + .q-btn__wrapper + padding: 0 + min-height: 2.4em + min-width: 2.4em + .on-left + margin-right: 6px + .on-right + margin-left: 6px + + &--fab, &--fab-mini + .q-icon + font-size: 24px + &--fab + .q-icon + margin: auto + .q-btn__wrapper + padding: 16px + min-height: 56px + min-width: 56px + &--fab-mini .q-btn__wrapper + padding: 8px + min-height: 40px + min-width: 40px + + // workaround for alignment/sizing change when showing loader + &__content + transition: opacity .3s + z-index: 0 + + &--hidden + opacity: 0 + pointer-events: none + + &__progress + border-radius: inherit + z-index: 0 + + &-indicator + z-index: -1 + transform: translateX(-100%) + background: rgba(255,255,255,.25) + &--dark + .q-btn__progress-indicator + background: rgba(0,0,0,.2) + + &--flat, &--outline + .q-btn__progress-indicator + opacity: 0.2 + background: currentColor diff --git a/src/components/btn/QBtn.styl b/src/components/btn/QBtn.styl new file mode 100644 index 00000000000..425bf2bd54c --- /dev/null +++ b/src/components/btn/QBtn.styl @@ -0,0 +1,160 @@ +.q-btn + display: inline-flex + flex-direction: column + align-items: stretch + position: relative + outline: 0 + border: 0 + vertical-align: middle + padding: 0 + font-size: $button-font-size + line-height: $button-line-height + text-decoration: none + color: inherit + background: transparent + font-weight: $button-font-weight + text-transform: uppercase + text-align: center + width: auto + height: auto + + .q-icon, .q-spinner + font-size: $button-line-height + + &.disabled + opacity: .7 !important + + &__wrapper + padding: $button-padding + min-height: 2.572em + border-radius: inherit + width: 100% + height: 100% + + &:before + content: '' + display: block + position: absolute + left: 0 + right: 0 + top: 0 + bottom: 0 + border-radius: inherit + box-shadow: $button-shadow + + &--actionable + cursor: pointer + + &.q-btn--standard + .q-btn__wrapper:before + // This places the button active raise shadow behind adjacent elements + // Active raise shadow will still be visible under adjacent transparent elements, this is ok and coherent with a desired transparency effect. + // Visible active raise shadow can be removed by specifying a background color to the button + // Visible active raise shadow can be removed by specifying a flat or outline button type + transition: box-shadow $button-transition + &:active, + &.q-btn--active + .q-btn__wrapper:before + box-shadow: $button-shadow-active + + + &--no-uppercase + text-transform: none + + &--rectangle + border-radius: $button-border-radius + + &--outline + background: transparent !important + + .q-btn__wrapper:before + border: 1px solid currentColor + + &--push + border-radius: $button-push-border-radius + + .q-btn__wrapper:before + border-bottom: 3px solid rgba(0,0,0,.15) + + &.q-btn--actionable + transition: transform $button-transition + + .q-btn__wrapper:before + transition: top $button-transition, bottom $button-transition, border-bottom-width $button-transition + + &:active, + &.q-btn--active + transform: translateY(2px) + + .q-btn__wrapper:before + border-bottom-width: 0 + + &--rounded + border-radius: $button-rounded-border-radius + + &--round + border-radius: 50% + + .q-btn__wrapper + padding: 0 + min-width: 3em + min-height: 3em + + &--flat, &--outline, &--unelevated + .q-btn__wrapper:before + box-shadow: none + + &--dense + .q-btn__wrapper + padding: $button-dense-padding + min-height: 2em + &.q-btn--round + .q-btn__wrapper + padding: 0 + min-height: 2.4em + min-width: 2.4em + .on-left + margin-right: 6px + .on-right + margin-left: 6px + + &--fab, &--fab-mini + .q-icon + font-size: 24px + &--fab + .q-icon + margin: auto + .q-btn__wrapper + padding: 16px + min-height: 56px + min-width: 56px + &--fab-mini .q-btn__wrapper + padding: 8px + min-height: 40px + min-width: 40px + + // workaround for alignment/sizing change when showing loader + &__content + transition: opacity .3s + z-index: 0 + + &--hidden + opacity: 0 + pointer-events: none + + &__progress + border-radius: inherit + z-index: 0 + + &-indicator + z-index: -1 + transform: translateX(-100%) + background: rgba(255,255,255,.25) + &--dark + .q-btn__progress-indicator + background: rgba(0,0,0,.2) + + &--flat, &--outline + .q-btn__progress-indicator + opacity: 0.2 + background: currentColor diff --git a/src/components/btn/index.js b/src/components/btn/index.js new file mode 100644 index 00000000000..190a60df4e1 --- /dev/null +++ b/src/components/btn/index.js @@ -0,0 +1,5 @@ +import QBtn from './QBtn.js' + +export { + QBtn +} diff --git a/src/components/card/QCard.js b/src/components/card/QCard.js new file mode 100644 index 00000000000..153f33e39ce --- /dev/null +++ b/src/components/card/QCard.js @@ -0,0 +1,36 @@ +import Vue from 'vue' + +import DarkMixin from '../../mixins/dark.js' +import TagMixin from '../../mixins/tag.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QCard', + + mixins: [ ListenersMixin, DarkMixin, TagMixin ], + + props: { + square: Boolean, + flat: Boolean, + bordered: Boolean + }, + + computed: { + classes () { + return 'q-card' + + ` q-card--${this.darkSuffix} q-${this.darkSuffix}` + + (this.bordered === true ? ' q-card--bordered' : '') + + (this.square === true ? ' q-card--square no-border-radius' : '') + + (this.flat === true ? ' q-card--flat no-shadow' : '') + } + }, + + render (h) { + return h(this.tag, { + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/card/QCard.json b/src/components/card/QCard.json new file mode 100644 index 00000000000..b70de383b23 --- /dev/null +++ b/src/components/card/QCard.json @@ -0,0 +1,40 @@ +{ + "mixins": [ "mixins/tag" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/card" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "dark": { + "extends": "dark" + }, + + "square": { + "extends": "square" + }, + + "flat": { + "extends": "flat" + }, + + "bordered": { + "extends": "bordered" + }, + + "tag": { + "examples": [ "div", "form" ], + "addedIn": "v1.8.4" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/card/QCard.sass b/src/components/card/QCard.sass new file mode 100644 index 00000000000..e82025a852a --- /dev/null +++ b/src/components/card/QCard.sass @@ -0,0 +1,99 @@ +.q-card + box-shadow: $shadow-2 + border-radius: $generic-border-radius + vertical-align: top + position: relative + + > div, + > img + &:first-child + border-top: 0 + border-top-left-radius: inherit + border-top-right-radius: inherit + > div, + > img + &:last-child + border-bottom: 0 + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + > div, + > img + &:not(:first-child) + border-top-left-radius: 0 + border-top-right-radius: 0 + > div, + > img + &:not(:last-child) + border-bottom-left-radius: 0 + border-bottom-right-radius: 0 + > div + border-left: 0 + border-right: 0 + box-shadow: none + + &--bordered + border: 1px solid $separator-color + + &--dark + border-color: $separator-dark-color + + &__section + position: relative + + &--vert + padding: 16px + + &--horiz + > div, + > img + &:first-child + border-top-left-radius: inherit + border-bottom-left-radius: inherit + &:last-child + border-top-right-radius: inherit + border-bottom-right-radius: inherit + &:not(:first-child) + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:not(:last-child) + border-top-right-radius: 0 + border-bottom-right-radius: 0 + + > div + border-top: 0 + border-bottom: 0 + box-shadow: none + + &__actions + padding: 8px + align-items: center + + .q-btn__wrapper + padding: 0 8px + + &--horiz + > .q-btn-item + .q-btn-item, + > .q-btn-group + .q-btn-item, + > .q-btn-item + .q-btn-group + margin-left: 8px + + &--vert + > .q-btn-item.q-btn--round + align-self: center + > .q-btn-item + .q-btn-item, + > .q-btn-group + .q-btn-item, + > .q-btn-item + .q-btn-group + margin-top: 4px + + > .q-btn-group > .q-btn-item + flex-grow: 1 + + > img + display: block + width: 100% + max-width: 100% + border: 0 + +@media (prefers-color-scheme: dark) + .q-card--dark-auto + border-color: $separator-dark-color diff --git a/src/components/card/QCard.styl b/src/components/card/QCard.styl new file mode 100644 index 00000000000..e82025a852a --- /dev/null +++ b/src/components/card/QCard.styl @@ -0,0 +1,99 @@ +.q-card + box-shadow: $shadow-2 + border-radius: $generic-border-radius + vertical-align: top + position: relative + + > div, + > img + &:first-child + border-top: 0 + border-top-left-radius: inherit + border-top-right-radius: inherit + > div, + > img + &:last-child + border-bottom: 0 + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + > div, + > img + &:not(:first-child) + border-top-left-radius: 0 + border-top-right-radius: 0 + > div, + > img + &:not(:last-child) + border-bottom-left-radius: 0 + border-bottom-right-radius: 0 + > div + border-left: 0 + border-right: 0 + box-shadow: none + + &--bordered + border: 1px solid $separator-color + + &--dark + border-color: $separator-dark-color + + &__section + position: relative + + &--vert + padding: 16px + + &--horiz + > div, + > img + &:first-child + border-top-left-radius: inherit + border-bottom-left-radius: inherit + &:last-child + border-top-right-radius: inherit + border-bottom-right-radius: inherit + &:not(:first-child) + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:not(:last-child) + border-top-right-radius: 0 + border-bottom-right-radius: 0 + + > div + border-top: 0 + border-bottom: 0 + box-shadow: none + + &__actions + padding: 8px + align-items: center + + .q-btn__wrapper + padding: 0 8px + + &--horiz + > .q-btn-item + .q-btn-item, + > .q-btn-group + .q-btn-item, + > .q-btn-item + .q-btn-group + margin-left: 8px + + &--vert + > .q-btn-item.q-btn--round + align-self: center + > .q-btn-item + .q-btn-item, + > .q-btn-group + .q-btn-item, + > .q-btn-item + .q-btn-group + margin-top: 4px + + > .q-btn-group > .q-btn-item + flex-grow: 1 + + > img + display: block + width: 100% + max-width: 100% + border: 0 + +@media (prefers-color-scheme: dark) + .q-card--dark-auto + border-color: $separator-dark-color diff --git a/src/components/card/QCardActions.js b/src/components/card/QCardActions.js new file mode 100644 index 00000000000..53c23e8e445 --- /dev/null +++ b/src/components/card/QCardActions.js @@ -0,0 +1,30 @@ +import Vue from 'vue' + +import AlignMixin from '../../mixins/align.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QCardActions', + + mixins: [ ListenersMixin, AlignMixin ], + + props: { + vertical: Boolean + }, + + computed: { + classes () { + return `q-card__actions--${this.vertical === true ? 'vert column' : 'horiz row'} ${this.alignClass}` + } + }, + + render (h) { + return h('div', { + staticClass: 'q-card__actions', + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/card/QCardActions.json b/src/components/card/QCardActions.json new file mode 100644 index 00000000000..53b3233e379 --- /dev/null +++ b/src/components/card/QCardActions.json @@ -0,0 +1,31 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/card" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "align": { + "type": "String", + "desc": "Specify how to align the actions", + "default": "left (for horizontal mode) / stretch (for vertical mode)", + "values": [ "left", "center", "right", "between", "around", "evenly", "stretch" ], + "category": "content" + }, + + "vertical": { + "type": "Boolean", + "desc": "Display actions one below the other", + "category": "content" + } + }, + + "slots": { + "default": { + "desc": "Suggestions: QBtn" + } + } +} diff --git a/src/components/card/QCardSection.js b/src/components/card/QCardSection.js new file mode 100644 index 00000000000..1e6a245e32d --- /dev/null +++ b/src/components/card/QCardSection.js @@ -0,0 +1,30 @@ +import Vue from 'vue' + +import TagMixin from '../../mixins/tag.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QCardSection', + + mixins: [ ListenersMixin, TagMixin ], + + props: { + horizontal: Boolean + }, + + computed: { + classes () { + return 'q-card__section ' + + `q-card__section--${this.horizontal === true ? 'horiz row no-wrap' : 'vert'}` + } + }, + + render (h) { + return h(this.tag, { + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/card/QCardSection.json b/src/components/card/QCardSection.json new file mode 100644 index 00000000000..629420a3703 --- /dev/null +++ b/src/components/card/QCardSection.json @@ -0,0 +1,31 @@ +{ + "mixins": [ "mixins/tag" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/card" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "horizontal": { + "type": "Boolean", + "desc": "Display a horizontal section (will have no padding and can contain other QCardSection)", + "category": "content", + "addedIn": "v1.7" + }, + + "tag": { + "examples": [ "div", "form" ], + "addedIn": "v1.8.4" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/card/index.js b/src/components/card/index.js new file mode 100644 index 00000000000..4cff4f24a13 --- /dev/null +++ b/src/components/card/index.js @@ -0,0 +1,9 @@ +import QCard from './QCard.js' +import QCardSection from './QCardSection.js' +import QCardActions from './QCardActions.js' + +export { + QCard, + QCardSection, + QCardActions +} diff --git a/src/components/carousel/QCarousel.js b/src/components/carousel/QCarousel.js new file mode 100644 index 00000000000..e56f86849cb --- /dev/null +++ b/src/components/carousel/QCarousel.js @@ -0,0 +1,259 @@ +import Vue from 'vue' + +import QBtn from '../btn/QBtn.js' + +import DarkMixin from '../../mixins/dark.js' +import { PanelParentMixin } from '../../mixins/panel.js' +import FullscreenMixin from '../../mixins/fullscreen.js' + +import { isNumber } from '../../utils/is.js' +import { mergeSlot } from '../../utils/private/slot.js' +import cache from '../../utils/private/cache.js' + +export default Vue.extend({ + name: 'QCarousel', + + mixins: [ DarkMixin, PanelParentMixin, FullscreenMixin ], + + props: { + height: String, + padding: Boolean, + + controlType: { + type: String, + validator: v => [ 'regular', 'flat', 'outline', 'push', 'unelevated' ].includes(v), + default: 'flat' + }, + controlColor: String, + controlTextColor: String, + + autoplay: [ Number, Boolean ], + + arrows: Boolean, + prevIcon: String, + nextIcon: String, + + navigation: Boolean, + navigationPosition: { + type: String, + validator: v => [ 'top', 'right', 'bottom', 'left' ].includes(v) + }, + navigationIcon: String, + navigationActiveIcon: String, + + thumbnails: Boolean + }, + + computed: { + style () { + if (this.inFullscreen !== true && this.height !== void 0) { + return { + height: this.height + } + } + }, + + direction () { + return this.vertical === true ? 'vertical' : 'horizontal' + }, + + classes () { + return `q-carousel q-panel-parent q-carousel--with${this.padding === true ? '' : 'out'}-padding` + + (this.inFullscreen === true ? ' fullscreen' : '') + + ` q-carousel--${this.darkSuffix} q-${this.darkSuffix}` + + (this.arrows === true ? ` q-carousel--arrows-${this.direction}` : '') + + (this.navigation === true ? ` q-carousel--navigation-${this.navigationPositionComputed}` : '') + }, + + arrowIcons () { + const ico = [ + this.prevIcon || this.$q.iconSet.carousel[this.vertical === true ? 'up' : 'left'], + this.nextIcon || this.$q.iconSet.carousel[this.vertical === true ? 'down' : 'right'] + ] + + return this.vertical === false && this.$q.lang.rtl === true + ? ico.reverse() + : ico + }, + + navIcon () { + return this.navigationIcon || this.$q.iconSet.carousel.navigationIcon + }, + + navActiveIcon () { + return this.navigationActiveIcon || this.navIcon + }, + + navigationPositionComputed () { + return this.navigationPosition || (this.vertical === true ? 'right' : 'bottom') + }, + + controlProps () { + return { + color: this.controlColor, + textColor: this.controlTextColor, + round: true, + [ this.controlType ]: true, + dense: true + } + }, + + transitionPrevComputed () { + return this.transitionPrev || 'fade' + }, + + transitionNextComputed () { + return this.transitionNext || 'fade' + } + }, + + watch: { + value () { + if (this.autoplay) { + clearInterval(this.timer) + this.__startTimer() + } + }, + + autoplay (val) { + if (val) { + this.__startTimer() + } + else { + clearInterval(this.timer) + } + } + }, + + methods: { + __startTimer () { + const duration = isNumber(this.autoplay) === true + ? this.autoplay + : 5000 + + this.timer = setTimeout( + duration >= 0 ? this.next : this.previous, + Math.abs(duration) + ) + }, + + __getNavigationContainer (h, type, mapping) { + return h('div', { + class: 'q-carousel__control q-carousel__navigation no-wrap absolute flex' + + ` q-carousel__navigation--${type} q-carousel__navigation--${this.navigationPositionComputed}` + + (this.controlColor !== void 0 ? ` text-${this.controlColor}` : '') + }, [ + h('div', { + staticClass: 'q-carousel__navigation-inner flex flex-center no-wrap' + }, this.__getEnabledPanels().map(mapping)) + ]) + }, + + __getContent (h) { + const node = [] + + if (this.navigation === true) { + const fn = this.$scopedSlots['navigation-icon'] !== void 0 + ? this.$scopedSlots['navigation-icon'] + : opts => h(QBtn, { + key: 'nav#' + opts.name, + class: `q-carousel__navigation-icon q-carousel__navigation-icon--${opts.active === true ? '' : 'in'}active`, + props: opts.btnProps, + on: cache(this, 'nav#' + opts.name, { click: opts.onClick }) + }) + + const maxIndex = this.panels.length - 1 + node.push( + this.__getNavigationContainer(h, 'buttons', (panel, index) => { + const name = panel.componentOptions.propsData.name + const active = this.panelIndex === index + + return fn({ + index, + maxIndex, + name, + active, + btnProps: { + icon: active === true ? this.navActiveIcon : this.navIcon, + size: 'sm', + ...this.controlProps + }, + onClick: () => { this.goTo(name) } + }) + }) + ) + } + else if (this.thumbnails === true) { + const color = this.controlColor !== void 0 + ? ` text-${this.controlColor}` + : '' + + node.push(this.__getNavigationContainer(h, 'thumbnails', panel => { + const slide = panel.componentOptions.propsData + + return h('img', { + class: `q-carousel__thumbnail q-carousel__thumbnail--${slide.name === this.value ? '' : 'in'}active` + color, + attrs: { + src: slide.imgSrc + }, + key: 'tmb#' + slide.name, + on: cache(this, 'tmb#' + slide.name, { click: () => { this.goTo(slide.name) } }) + }) + })) + } + + if (this.arrows === true && this.panelIndex >= 0) { + if (this.infinite === true || this.panelIndex > 0) { + node.push( + h('div', { + staticClass: `q-carousel__control q-carousel__arrow q-carousel__prev-arrow q-carousel__prev-arrow--${this.direction} absolute flex flex-center` + }, [ + h(QBtn, { + key: 'prev', + props: { icon: this.arrowIcons[0], ...this.controlProps }, + on: cache(this, 'prev', { click: this.previous }) + }) + ]) + ) + } + + if (this.infinite === true || this.panelIndex < this.panels.length - 1) { + node.push( + h('div', { + staticClass: `q-carousel__control q-carousel__arrow q-carousel__next-arrow q-carousel__next-arrow--${this.direction} absolute flex flex-center` + }, [ + h(QBtn, { + key: 'next', + props: { icon: this.arrowIcons[1], ...this.controlProps }, + on: cache(this, 'next', { click: this.next }) + }) + ]) + ) + } + } + + return mergeSlot(node, this, 'control') + }, + + __renderPanels (h) { + return h('div', { + style: this.style, + class: this.classes, + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'q-carousel__slides-container', + directives: this.panelDirectives + }, this.__getPanelContent(h)) + ].concat(this.__getContent(h))) + } + }, + + mounted () { + this.autoplay && this.__startTimer() + }, + + beforeDestroy () { + clearInterval(this.timer) + } +}) diff --git a/src/components/carousel/QCarousel.json b/src/components/carousel/QCarousel.json new file mode 100644 index 00000000000..16f73db65d3 --- /dev/null +++ b/src/components/carousel/QCarousel.json @@ -0,0 +1,170 @@ +{ + "mixins": [ "mixins/panel-parent", "mixins/fullscreen" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/carousel" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "dark": { + "extends": "dark", + "addedIn": "v1.3" + }, + + "height": { + "extends": "size", + "desc": "Height of Carousel in CSS units, including unit name" + }, + + "padding": { + "type": "Boolean", + "desc": "Applies a default padding to each slide, according to the usage of 'arrows' and 'navigation' props", + "category": "content" + }, + + "control-color": { + "extends": "color", + "desc": "Color name for QCarousel button controls (arrows, navigation) from the Quasar Color Palette" + }, + + "control-text-color": { + "extends": "color", + "desc": "Color name for text color of QCarousel button controls (arrows, navigation) from the Quasar Color Palette", + "addedIn": "v1.9" + }, + + "control-type": { + "type": "String", + "desc": "Type of button to use for controls (arrows, navigation)", + "values": [ "regular", "flat", "outline", "push", "unelevated" ], + "category": "style", + "addedIn": "v1.9" + }, + + "autoplay": { + "type": [ "Number", "Boolean" ], + "desc": "Jump to next slide (if 'true' or val > 0) or previous slide (if val < 0) at fixed time intervals (in milliseconds); 'false' disables autoplay, 'true' enables it for 5000ms intervals", + "default": false, + "examples": [ + ":autoplay=\"2500\"", + true, + false + ], + "category": "behavior" + }, + + "arrows": { + "type": "Boolean", + "desc": "Show navigation arrow buttons", + "category": "content" + }, + + "prev-icon": { + "extends": "icon" + }, + + "next-icon": { + "extends": "icon" + }, + + "navigation": { + "type": "Boolean", + "desc": "Show navigation dots", + "category": "content" + }, + + "navigation-position": { + "type": "String", + "desc": "Side to stick navigation to", + "default": "bottom/right", + "values": [ "top", "right", "bottom", "left" ], + "examples": [ "left" ], + "category": "content", + "addedIn": "v1.9" + }, + + "navigation-icon": { + "extends": "icon" + }, + + "navigation-active-icon": { + "extends": "icon", + "desc": "Icon name following Quasar convention for the active (current slide) navigation icon; Make sure you have the icon library installed unless you are using 'img:' prefix", + "addedIn": "v1.13.2" + }, + + "thumbnails": { + "type": "Boolean", + "desc": "Show thumbnails", + "category": "content" + }, + + "transition-prev": { + "default": "fade" + }, + + "transition-next": { + "default": "fade" + } + }, + + "slots": { + "default": { + "desc": "Suggestion: QCarouselSlide" + }, + + "control": { + "desc": "Slot specific for QCarouselControl" + } + }, + + "scopedSlots": { + "navigation-icon": { + "desc": "Slot for navigation icon/btn; Suggestion: QBtn", + "scope": { + "index": { + "type": "Number", + "desc": "The 0-based index of corresponding slide", + "__exemption": [ "examples" ] + }, + "maxIndex": { + "type": "Number", + "desc": "The available number of slides", + "__exemption": [ "examples" ] + }, + "name": { + "type": "Any", + "desc": "The name of the corresponding slide", + "__exemption": [ "examples" ] + }, + "active": { + "type": "Boolean", + "desc": "Is this the current slide?" + }, + "btnProps": { + "type": "Object", + "desc": "Default QBtn props that can be binded to your own QBtn", + "__exemption": [ "examples" ] + }, + "onClick": { + "type": "Function", + "desc": "Default trigger when clicked/tapped on", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + } + }, + "returns": null + } + }, + "addedIn": "v1.13.2" + } + } +} diff --git a/src/components/carousel/QCarousel.sass b/src/components/carousel/QCarousel.sass new file mode 100644 index 00000000000..a6683e49849 --- /dev/null +++ b/src/components/carousel/QCarousel.sass @@ -0,0 +1,128 @@ +.q-carousel + height: 400px + + &__slide + min-height: 100% + background-size: cover + background-position: 50% + + &__slide, .q-carousel--padding + padding: 16px + + &__slides-container + height: 100% + + &__control + color: $dark-text + color: var(--q-color-dark-text) + + &__arrow + pointer-events: none + + .q-icon + font-size: 28px + .q-btn + pointer-events: all + + &__prev-arrow--horizontal, + &__next-arrow--horizontal + top: 16px + bottom: 16px + &__prev-arrow--horizontal + left: 16px + &__next-arrow--horizontal + right: 16px + + &__prev-arrow--vertical, + &__next-arrow--vertical + left: 16px + right: 16px + &__prev-arrow--vertical + top: 16px + &__next-arrow--vertical + bottom: 16px + + &__navigation + + &--top, + &--bottom + left: 16px + right: 16px + overflow-x: auto + overflow-y: hidden + + &--top + top: 16px + + &--bottom + bottom: 16px + + &--left, + &--right + top: 16px + bottom: 16px + overflow-x: hidden + overflow-y: auto + + > .q-carousel__navigation-inner + flex-direction: column + + &--left + left: 16px + + &--right + right: 16px + + &-inner + flex: 1 1 auto + + .q-btn + margin: 6px 4px + + .q-btn__wrapper + padding: 5px + + &__navigation-icon--inactive + opacity: .7 + + .q-carousel__thumbnail + margin: 2px + height: 50px + width: auto + display: inline-block + cursor: pointer + border: 1px solid transparent + border-radius: $generic-border-radius + vertical-align: middle + opacity: .7 + transition: opacity .3s + + .q-carousel__thumbnail:hover, + .q-carousel__thumbnail--active + opacity: 1 + .q-carousel__thumbnail--active + border-color: currentColor + cursor: default + + &--navigation-top, + &--arrows-vertical + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-top: 60px + + &--navigation-bottom, + &--arrows-vertical + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-bottom: 60px + + &--navigation-left, + &--arrows-horizontal + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-left: 60px + + &--navigation-right, + &--arrows-horizontal + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-right: 60px + + &.fullscreen + height: 100% diff --git a/src/components/carousel/QCarousel.styl b/src/components/carousel/QCarousel.styl new file mode 100644 index 00000000000..a6683e49849 --- /dev/null +++ b/src/components/carousel/QCarousel.styl @@ -0,0 +1,128 @@ +.q-carousel + height: 400px + + &__slide + min-height: 100% + background-size: cover + background-position: 50% + + &__slide, .q-carousel--padding + padding: 16px + + &__slides-container + height: 100% + + &__control + color: $dark-text + color: var(--q-color-dark-text) + + &__arrow + pointer-events: none + + .q-icon + font-size: 28px + .q-btn + pointer-events: all + + &__prev-arrow--horizontal, + &__next-arrow--horizontal + top: 16px + bottom: 16px + &__prev-arrow--horizontal + left: 16px + &__next-arrow--horizontal + right: 16px + + &__prev-arrow--vertical, + &__next-arrow--vertical + left: 16px + right: 16px + &__prev-arrow--vertical + top: 16px + &__next-arrow--vertical + bottom: 16px + + &__navigation + + &--top, + &--bottom + left: 16px + right: 16px + overflow-x: auto + overflow-y: hidden + + &--top + top: 16px + + &--bottom + bottom: 16px + + &--left, + &--right + top: 16px + bottom: 16px + overflow-x: hidden + overflow-y: auto + + > .q-carousel__navigation-inner + flex-direction: column + + &--left + left: 16px + + &--right + right: 16px + + &-inner + flex: 1 1 auto + + .q-btn + margin: 6px 4px + + .q-btn__wrapper + padding: 5px + + &__navigation-icon--inactive + opacity: .7 + + .q-carousel__thumbnail + margin: 2px + height: 50px + width: auto + display: inline-block + cursor: pointer + border: 1px solid transparent + border-radius: $generic-border-radius + vertical-align: middle + opacity: .7 + transition: opacity .3s + + .q-carousel__thumbnail:hover, + .q-carousel__thumbnail--active + opacity: 1 + .q-carousel__thumbnail--active + border-color: currentColor + cursor: default + + &--navigation-top, + &--arrows-vertical + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-top: 60px + + &--navigation-bottom, + &--arrows-vertical + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-bottom: 60px + + &--navigation-left, + &--arrows-horizontal + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-left: 60px + + &--navigation-right, + &--arrows-horizontal + &.q-carousel--with-padding .q-carousel__slide, .q-carousel--padding + padding-right: 60px + + &.fullscreen + height: 100% diff --git a/src/components/carousel/QCarouselControl.js b/src/components/carousel/QCarouselControl.js new file mode 100644 index 00000000000..2311e37f69c --- /dev/null +++ b/src/components/carousel/QCarouselControl.js @@ -0,0 +1,49 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QCarouselControl', + + mixins: [ ListenersMixin ], + + props: { + position: { + type: String, + default: 'bottom-right', + validator: v => [ + 'top-right', 'top-left', + 'bottom-right', 'bottom-left', + 'top', 'right', 'bottom', 'left' + ].includes(v) + }, + offset: { + type: Array, + default: () => [18, 18], + validator: v => v.length === 2 + } + }, + + computed: { + classes () { + return `absolute-${this.position}` + }, + + style () { + return { + margin: `${this.offset[1]}px ${this.offset[0]}px` + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-carousel__control absolute', + style: this.style, + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/carousel/QCarouselControl.json b/src/components/carousel/QCarouselControl.json new file mode 100644 index 00000000000..ef3f1225525 --- /dev/null +++ b/src/components/carousel/QCarouselControl.json @@ -0,0 +1,38 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/carousel" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "position": { + "type": "String", + "desc": "Side/corner to stick to", + "default": "bottom-right", + "values": [ + "top-right", "top-left", + "bottom-right", "bottom-left", + "top", "right", "bottom", "left" + ], + "examples": [ "top-right" ], + "category": "position" + }, + + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the component horizontally and vertically (in pixels)", + "default": "[18, 18]", + "examples": [ "[8, 8]", "[5, 10]" ], + "category": "position" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/carousel/QCarouselSlide.js b/src/components/carousel/QCarouselSlide.js new file mode 100644 index 00000000000..ce799f284bf --- /dev/null +++ b/src/components/carousel/QCarouselSlide.js @@ -0,0 +1,34 @@ +import Vue from 'vue' + +import { PanelChildMixin } from '../../mixins/panel.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QCarouselSlide', + + mixins: [ PanelChildMixin ], + + props: { + imgSrc: String + }, + + computed: { + style () { + if (this.imgSrc) { + return { + backgroundImage: `url("${this.imgSrc}")` + } + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-carousel__slide', + style: this.style, + attrs: { role: 'tabpanel' }, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/carousel/QCarouselSlide.json b/src/components/carousel/QCarouselSlide.json new file mode 100644 index 00000000000..ef866001e64 --- /dev/null +++ b/src/components/carousel/QCarouselSlide.json @@ -0,0 +1,40 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/carousel" + }, + + "mixins": [ "mixins/panel-child" ], + + "behavior": { + "$listeners": true + }, + + "props": { + "name": { + "desc": "Slide name", + "examples": [ + "accounts", "firstSlide", ":name=\"1\"" + ], + "category": "model" + }, + + "img-src": { + "type": "String", + "desc": "URL pointing to a slide background image (use public folder)", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/my-bg.png\"", + "(assets folder) src=\"~assets/my-img.png\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "model" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/carousel/index.js b/src/components/carousel/index.js new file mode 100644 index 00000000000..59ca220bb25 --- /dev/null +++ b/src/components/carousel/index.js @@ -0,0 +1,9 @@ +import QCarousel from './QCarousel.js' +import QCarouselSlide from './QCarouselSlide.js' +import QCarouselControl from './QCarouselControl.js' + +export { + QCarousel, + QCarouselSlide, + QCarouselControl +} diff --git a/src/components/chat/QChatMessage.js b/src/components/chat/QChatMessage.js new file mode 100644 index 00000000000..e3b82409fd5 --- /dev/null +++ b/src/components/chat/QChatMessage.js @@ -0,0 +1,171 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +export default Vue.extend({ + name: 'QChatMessage', + + mixins: [ ListenersMixin ], + + props: { + sent: Boolean, + label: String, + bgColor: String, + textColor: String, + name: String, + avatar: String, + text: Array, + stamp: String, + size: String, + labelSanitize: Boolean, + nameSanitize: Boolean, + textSanitize: Boolean, + stampSanitize: Boolean + }, + + computed: { + textClass () { + return `q-message-text-content q-message-text-content--${this.op}` + + (this.textColor !== void 0 ? ` text-${this.textColor}` : '') + }, + + messageClass () { + return `q-message-text q-message-text--${this.op}` + + (this.bgColor !== void 0 ? ` text-${this.bgColor}` : '') + }, + + containerClass () { + return 'q-message-container row items-end no-wrap' + + (this.sent === true ? ' reverse' : '') + }, + + sizeClass () { + if (this.size !== void 0) { + return `col-${this.size}` + } + }, + + op () { + return this.sent === true ? 'sent' : 'received' + } + }, + + methods: { + __wrapStamp (h, node) { + if (this.$scopedSlots.stamp !== void 0) { + return [ node, h('div', { staticClass: 'q-message-stamp' }, this.$scopedSlots.stamp()) ] + } + + if (this.stamp) { + const domPropStamp = this.stampSanitize === true ? 'textContent' : 'innerHTML' + + return [ + node, + h('div', { + staticClass: 'q-message-stamp', + domProps: { [domPropStamp]: this.stamp } + }) + ] + } + + return [ node ] + }, + + __getText (h, contentList, withSlots) { + const domPropText = this.textSanitize === true ? 'textContent' : 'innerHTML' + + if ( + withSlots === true && + contentList.some(entry => entry.tag === void 0 && entry.text !== void 0) === true + ) { + return [ + h('div', { class: this.messageClass }, [ + h('div', { class: this.textClass }, this.__wrapStamp(h, h('div', contentList))) + ]) + ] + } + + const content = withSlots !== true + ? text => h('div', { domProps: { [domPropText]: text } }) + : (contentList.length > 1 ? text => text : text => h('div', [text])) + + return contentList.map((msg, index) => h('div', { + key: index, + class: this.messageClass + }, [ + h('div', { class: this.textClass }, this.__wrapStamp(h, content(msg))) + ])) + } + }, + + render (h) { + const container = [] + + if (this.$scopedSlots.avatar !== void 0) { + container.push(this.$scopedSlots.avatar()) + } + else if (this.avatar !== void 0) { + container.push( + h('img', { + class: `q-message-avatar q-message-avatar--${this.op}`, + attrs: { src: this.avatar, 'aria-hidden': 'true' } + }) + ) + } + + const msg = [] + + if (this.$scopedSlots.name !== void 0) { + msg.push( + h('div', { + class: `q-message-name q-message-name--${this.op}` + }, this.$scopedSlots.name()) + ) + } + else if (this.name !== void 0) { + msg.push( + h('div', { + class: `q-message-name q-message-name--${this.op}`, + domProps: { [this.nameSanitize === true ? 'textContent' : 'innerHTML']: this.name } + }) + ) + } + + this.text !== void 0 && msg.push( + this.__getText(h, this.text) + ) + + this.$scopedSlots.default !== void 0 && msg.push( + this.__getText(h, this.$scopedSlots.default(), true) + ) + + container.push( + h('div', { class: this.sizeClass }, msg) + ) + + const child = [] + + if (this.$scopedSlots.label !== void 0) { + child.push( + h('div', { staticClass: 'q-message-label' }, this.$scopedSlots.label()) + ) + } + else if (this.label !== void 0) { + child.push( + h('div', { + staticClass: 'q-message-label', + domProps: { [this.labelSanitize === true ? 'textContent' : 'innerHTML']: this.label } + }) + ) + } + + child.push( + h('div', { class: this.containerClass }, container) + ) + + return h('div', { + class: `q-message q-message-${this.op}`, + on: { ...this.qListeners } + }, child) + } +}) diff --git a/src/components/chat/QChatMessage.json b/src/components/chat/QChatMessage.json new file mode 100644 index 00000000000..463a6c4dae5 --- /dev/null +++ b/src/components/chat/QChatMessage.json @@ -0,0 +1,122 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/chat" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "sent": { + "type": "Boolean", + "desc": "Render as a sent message (so from current user)", + "category": "content" + }, + + "label": { + "type": "String", + "desc": "Renders a label header/section only", + "examples": [ "Friday, 18th" ], + "category": "content" + }, + + "bg-color": { + "extends": "color", + "desc": "Color name (from the Quasar Color Palette) for chat bubble background", + "category": "style" + }, + + "text-color": { + "extends": "text-color", + "desc": "Color name (from the Quasar Color Palette) for chat bubble text", + "category": "style" + }, + + "name": { + "type": "String", + "desc": "Author's name", + "examples": [ "John Doe" ], + "category": "content" + }, + + "avatar": { + "type": "String", + "desc": "URL to the avatar image of the author", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"boy-avatar.png\"", + "(assets folder) src=\"~assets/boy-avatar.png\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "content" + }, + + "text": { + "type": "Array", + "desc": "Array of strings that are the message body. Strings are not sanitized (see details in docs)", + "examples": [ ":text=\"['How are you?']\"", ":text=\"['I\\'m good, thank you!', 'And you?']\"" ], + "category": "content" + }, + + "stamp": { + "type": "String", + "desc": "Creation timestamp", + "examples": [ "13:55", "Yesterday at 13:51" ], + "category": "content" + }, + + "size": { + "type": "String", + "desc": "1-12 out of 12 (same as col-*)", + "examples": [ "4", "6", "12" ], + "category": "style" + }, + + "label-sanitize": { + "extends": "sanitize", + "desc": "Force use of textContent instead of innerHTML to render label; Use it when the label might be unsafe (from user input)" + }, + + "name-sanitize": { + "extends": "sanitize", + "desc": "Force use of textContent instead of innerHTML to render name; Use it when the name might be unsafe (from user input)" + }, + + "text-sanitize": { + "extends": "sanitize", + "desc": "Force use of textContent instead of innerHTML to render text; Use it when the text might be unsafe (from user input)" + }, + + "stamp-sanitize": { + "extends": "sanitize", + "desc": "Force use of textContent instead of innerHTML to render stamp; Use it when the stamp might be unsafe (from user input)" + } + }, + + "slots": { + "default": { + "desc": "You can use this slot to define a custom message (overrides props)" + }, + + "avatar": { + "desc": "Slot for avatar; Suggestion: QAvatar, img" + }, + + "name": { + "desc": "Slot for name; Overrides the 'name' prop", + "addedIn": "v1.15.14" + }, + + "stamp": { + "desc": "Slot for stamp; Overrides the 'stamp' prop", + "addedIn": "v1.15.14" + }, + + "label": { + "desc": "Slot for label; Overrides the 'label' prop", + "addedIn": "v1.15.15" + } + } +} diff --git a/src/components/chat/QChatMessage.sass b/src/components/chat/QChatMessage.sass new file mode 100644 index 00000000000..d1e38489296 --- /dev/null +++ b/src/components/chat/QChatMessage.sass @@ -0,0 +1,75 @@ +.q-message-name, .q-message-stamp, .q-message-label + font-size: small + +.q-message-label + margin: (3 * $chat-message-distance) 0 + text-align: center + +.q-message-stamp + color: inherit + margin-top: 4px + opacity: .6 + display: none + +.q-message-avatar + border-radius: 50% + width: $chat-message-avatar-size + height: $chat-message-avatar-size + min-width: $chat-message-avatar-size + +.q-message + margin-bottom: $chat-message-distance + &:first-child .q-message-label + margin-top: 0 + +.q-message-avatar--received + margin-right: 8px +.q-message-text--received + color: $chat-message-received-bg + border-radius: $chat-message-border-radius $chat-message-border-radius $chat-message-border-radius 0 + &:last-child:before + right: 100% + border-right: 0 solid transparent + border-left: 8px solid transparent + border-bottom: 8px solid currentColor +.q-message-text-content--received + color: $chat-message-received-color + +.q-message-name--sent + text-align: right +.q-message-avatar--sent + margin-left: 8px +.q-message-container--sent + flex-direction: row-reverse +.q-message-text--sent + color: $chat-message-sent-bg + border-radius: $chat-message-border-radius $chat-message-border-radius 0 $chat-message-border-radius + &:last-child:before + left: 100% + border-left: 0 solid transparent + border-right: 8px solid transparent + border-bottom: 8px solid currentColor +.q-message-text-content--sent + color: $chat-message-sent-color + +.q-message-text + background: currentColor + padding: $chat-message-text-padding + line-height: max(1.2, $min-line-height) + word-break: break-word + position: relative + + & + & + margin-top: 3px + + &:last-child + min-height: $chat-message-avatar-size + + .q-message-stamp + display: block + &:before + content: '' + position: absolute + bottom: 0 + width: 0 + height: 0 diff --git a/src/components/chat/QChatMessage.styl b/src/components/chat/QChatMessage.styl new file mode 100644 index 00000000000..d1e38489296 --- /dev/null +++ b/src/components/chat/QChatMessage.styl @@ -0,0 +1,75 @@ +.q-message-name, .q-message-stamp, .q-message-label + font-size: small + +.q-message-label + margin: (3 * $chat-message-distance) 0 + text-align: center + +.q-message-stamp + color: inherit + margin-top: 4px + opacity: .6 + display: none + +.q-message-avatar + border-radius: 50% + width: $chat-message-avatar-size + height: $chat-message-avatar-size + min-width: $chat-message-avatar-size + +.q-message + margin-bottom: $chat-message-distance + &:first-child .q-message-label + margin-top: 0 + +.q-message-avatar--received + margin-right: 8px +.q-message-text--received + color: $chat-message-received-bg + border-radius: $chat-message-border-radius $chat-message-border-radius $chat-message-border-radius 0 + &:last-child:before + right: 100% + border-right: 0 solid transparent + border-left: 8px solid transparent + border-bottom: 8px solid currentColor +.q-message-text-content--received + color: $chat-message-received-color + +.q-message-name--sent + text-align: right +.q-message-avatar--sent + margin-left: 8px +.q-message-container--sent + flex-direction: row-reverse +.q-message-text--sent + color: $chat-message-sent-bg + border-radius: $chat-message-border-radius $chat-message-border-radius 0 $chat-message-border-radius + &:last-child:before + left: 100% + border-left: 0 solid transparent + border-right: 8px solid transparent + border-bottom: 8px solid currentColor +.q-message-text-content--sent + color: $chat-message-sent-color + +.q-message-text + background: currentColor + padding: $chat-message-text-padding + line-height: max(1.2, $min-line-height) + word-break: break-word + position: relative + + & + & + margin-top: 3px + + &:last-child + min-height: $chat-message-avatar-size + + .q-message-stamp + display: block + &:before + content: '' + position: absolute + bottom: 0 + width: 0 + height: 0 diff --git a/src/components/chat/index.js b/src/components/chat/index.js new file mode 100644 index 00000000000..71928bbb3a8 --- /dev/null +++ b/src/components/chat/index.js @@ -0,0 +1,5 @@ +import QChatMessage from './QChatMessage.js' + +export { + QChatMessage +} diff --git a/src/components/checkbox/QCheckbox.js b/src/components/checkbox/QCheckbox.js new file mode 100644 index 00000000000..4e170720abd --- /dev/null +++ b/src/components/checkbox/QCheckbox.js @@ -0,0 +1,69 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' + +import CheckboxMixin from '../../mixins/checkbox.js' + +export default Vue.extend({ + name: 'QCheckbox', + + mixins: [ CheckboxMixin ], + + computed: { + computedIcon () { + return this.isTrue === true + ? this.checkedIcon + : (this.isIndeterminate === true + ? this.indeterminateIcon + : this.uncheckedIcon + ) + } + }, + + methods: { + __getInner (h) { + return this.computedIcon !== void 0 + ? [ + h('div', { + key: 'icon', + staticClass: 'q-checkbox__icon-container absolute-full flex flex-center no-wrap' + }, [ + h(QIcon, { + staticClass: 'q-checkbox__icon', + props: { name: this.computedIcon } + }) + ]) + ] + : [ + h('div', { + key: 'svg', + staticClass: 'q-checkbox__bg absolute' + }, [ + h('svg', { + staticClass: 'q-checkbox__svg fit absolute-full', + attrs: { focusable: 'false' /* needed for IE11 */, viewBox: '0 0 24 24' } + }, [ + h('path', { + staticClass: 'q-checkbox__truthy', + attrs: { + fill: 'none', + d: 'M1.73,12.91 8.1,19.28 22.79,4.59' + } + }), + + h('path', { + staticClass: 'q-checkbox__indet', + attrs: { + d: 'M4,14H20V10H4' + } + }) + ]) + ]) + ] + } + }, + + created () { + this.type = 'checkbox' + } +}) diff --git a/src/components/checkbox/QCheckbox.json b/src/components/checkbox/QCheckbox.json new file mode 100644 index 00000000000..8eefef8757f --- /dev/null +++ b/src/components/checkbox/QCheckbox.json @@ -0,0 +1,24 @@ +{ + "mixins": [ "mixins/checkbox" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/checkbox" + }, + + "props": { + "checked-icon": { + "desc": "The icon to be used when the model is truthy (instead of the default design)", + "addedIn": "v1.18" + }, + + "unchecked-icon": { + "desc": "The icon to be used when the toggle is falsy (instead of the default design)", + "addedIn": "v1.18" + }, + + "indeterminate-icon": { + "desc": "The icon to be used when the model is indeterminate (instead of the default design)", + "addedIn": "v1.18" + } + } +} diff --git a/src/components/checkbox/QCheckbox.sass b/src/components/checkbox/QCheckbox.sass new file mode 100644 index 00000000000..c7fae7dec51 --- /dev/null +++ b/src/components/checkbox/QCheckbox.sass @@ -0,0 +1,135 @@ +$checkbox-transition: .22s cubic-bezier(0,0,.2,1) 0ms + +.q-checkbox + vertical-align: middle + + &__native + width: 1px + height: 1px + + &__bg, + &__icon-container + user-select: none + + &__bg + top: 25% + left: 25% + width: 50% + height: 50% + border: 2px solid currentColor + border-radius: 2px + transition: background $checkbox-transition + -webkit-print-color-adjust: exact + + &__icon + color: currentColor + font-size: .5em + + &__svg + color: $dark-text + color: var(--q-color-dark-text) + + &__truthy + stroke: currentColor + stroke-width: 3.12px + stroke-dashoffset: 29.78334 + stroke-dasharray: 29.78334 + + &__indet + fill: currentColor + transform-origin: 50% 50% + transform: rotate(-280deg) scale(0) + + &__inner + font-size: 40px + width: 1em + min-width: 1em + height: 1em + outline: 0 + border-radius: 50% + color: rgba(0,0,0,.54) + + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) + .q-checkbox__bg + background: currentColor + + &--truthy + path + stroke-dashoffset: 0 + transition: stroke-dashoffset .18s cubic-bezier(.4,0,.6,1) 0ms + + &--indet + .q-checkbox__indet + transform: rotate(0) scale(1) + transition: transform $checkbox-transition + + &.disabled + opacity: .75 !important + + &--dark + .q-checkbox__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) + + &--dense + + .q-checkbox__inner + width: .5em + min-width: .5em + height: .5em + + .q-checkbox__bg + left: 5% + top: 5% + width: 90% + height: 90% + + .q-checkbox__label + padding-left: .5em + + &.reverse .q-checkbox__label + padding-left: 0 + padding-right: .5em + +body.desktop + + .q-checkbox:not(.disabled) + .q-checkbox__inner:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $option-focus-transition + + &:focus, + &:hover + .q-checkbox__inner:before + transform: scale3d(1, 1, 1) + + .q-checkbox--dense:not(.disabled) + &:focus, + &:hover + .q-checkbox__inner:before + transform: scale3d(1.4, 1.4, 1) + +@media (prefers-color-scheme: dark) + .q-checkbox--dark-auto + .q-checkbox__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) diff --git a/src/components/checkbox/QCheckbox.styl b/src/components/checkbox/QCheckbox.styl new file mode 100644 index 00000000000..34d1c1e8181 --- /dev/null +++ b/src/components/checkbox/QCheckbox.styl @@ -0,0 +1,135 @@ +$checkbox-transition = .22s cubic-bezier(0,0,.2,1) 0ms + +.q-checkbox + vertical-align: middle + + &__native + width: 1px + height: 1px + + &__bg, + &__icon-container + user-select: none + + &__bg + top: 25% + left: 25% + width: 50% + height: 50% + border: 2px solid currentColor + border-radius: 2px + transition: background $checkbox-transition + -webkit-print-color-adjust: exact + + &__icon + color: currentColor + font-size: .5em + + &__svg + color: $dark-text + color: var(--q-color-dark-text) + + &__truthy + stroke: currentColor + stroke-width: 3.12px + stroke-dashoffset: 29.78334 + stroke-dasharray: 29.78334 + + &__indet + fill: currentColor + transform-origin: 50% 50% + transform: rotate(-280deg) scale(0) + + &__inner + font-size: 40px + width: 1em + min-width: 1em + height: 1em + outline: 0 + border-radius: 50% + color: rgba(0,0,0,.54) + + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) + .q-checkbox__bg + background: currentColor + + &--truthy + path + stroke-dashoffset: 0 + transition: stroke-dashoffset .18s cubic-bezier(.4,0,.6,1) 0ms + + &--indet + .q-checkbox__indet + transform: rotate(0) scale(1) + transition: transform $checkbox-transition + + &.disabled + opacity: .75 !important + + &--dark + .q-checkbox__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) + + &--dense + + .q-checkbox__inner + width: .5em + min-width: .5em + height: .5em + + .q-checkbox__bg + left: 5% + top: 5% + width: 90% + height: 90% + + .q-checkbox__label + padding-left: .5em + + &.reverse .q-checkbox__label + padding-left: 0 + padding-right: .5em + +body.desktop + + .q-checkbox:not(.disabled) + .q-checkbox__inner:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $option-focus-transition + + &:focus, + &:hover + .q-checkbox__inner:before + transform: scale3d(1, 1, 1) + + .q-checkbox--dense:not(.disabled) + &:focus, + &:hover + .q-checkbox__inner:before + transform: scale3d(1.4, 1.4, 1) + +@media (prefers-color-scheme: dark) + .q-checkbox--dark-auto + .q-checkbox__inner + color: rgba(255,255,255,.7) + &:before + opacity: .32 !important + &--truthy, &--indet + color: $primary + color: var(--q-color-primary) diff --git a/src/components/checkbox/index.js b/src/components/checkbox/index.js new file mode 100644 index 00000000000..2c2289c0ec7 --- /dev/null +++ b/src/components/checkbox/index.js @@ -0,0 +1,5 @@ +import QCheckbox from './QCheckbox.js' + +export { + QCheckbox +} diff --git a/src/components/chip/QChip.js b/src/components/chip/QChip.js new file mode 100644 index 00000000000..f41c6500142 --- /dev/null +++ b/src/components/chip/QChip.js @@ -0,0 +1,214 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' + +import DarkMixin from '../../mixins/dark.js' +import RippleMixin from '../../mixins/ripple.js' +import { getSizeMixin } from '../../mixins/size.js' + +import { stopAndPrevent } from '../../utils/event.js' +import { mergeSlotSafely } from '../../utils/private/slot.js' +import cache from '../../utils/private/cache.js' + +export default Vue.extend({ + name: 'QChip', + + mixins: [ + RippleMixin, + DarkMixin, + getSizeMixin({ + xs: 8, + sm: 10, + md: 14, + lg: 20, + xl: 24 + }) + ], + + model: { + event: 'remove' + }, + + props: { + dense: Boolean, + + icon: String, + iconRight: String, + iconRemove: String, + iconSelected: String, + label: [String, Number], + + color: String, + textColor: String, + + value: { + type: Boolean, + default: true + }, + selected: { + type: Boolean, + default: null + }, + + square: Boolean, + outline: Boolean, + clickable: Boolean, + removable: Boolean, + + removeAriaLabel: String, + + tabindex: [String, Number], + disable: Boolean + }, + + computed: { + classes () { + const text = this.outline === true + ? this.color || this.textColor + : this.textColor + + return { + [`bg-${this.color}`]: this.outline === false && this.color !== void 0, + [`text-${text} q-chip--colored`]: text, + disabled: this.disable, + 'q-chip--dense': this.dense, + 'q-chip--outline': this.outline, + 'q-chip--selected': this.selected, + 'q-chip--clickable cursor-pointer non-selectable q-hoverable': this.isClickable, + 'q-chip--square': this.square, + [`q-chip--${this.localDarkSuffix}`]: true + } + }, + + localDarkSuffix () { + if (typeof this.color === 'string' && this.color.trim().length > 0) { + return this.dark === true ? 'dark' : 'light' + } + + return this.darkSuffix + }, + + hasLeftIcon () { + return this.selected === true || this.icon !== void 0 + }, + + leftIcon () { + return this.selected === true + ? this.iconSelected || this.$q.iconSet.chip.selected + : this.icon + }, + + removeIcon () { + return this.iconRemove || this.$q.iconSet.chip.remove + }, + + isClickable () { + return this.disable === false && (this.clickable === true || this.selected !== null) + }, + + attrs () { + const chip = this.disable === true + ? { tabindex: -1, 'aria-disabled': 'true' } + : { tabindex: this.tabindex || 0 } + const remove = { + ...chip, + role: 'button', + 'aria-hidden': 'false', + 'aria-label': this.removeAriaLabel || this.$q.lang.label.remove + } + + return { chip, remove } + } + }, + + methods: { + __onKeyup (e) { + e.keyCode === 13 /* ENTER */ && this.__onClick(e) + }, + + __onClick (e) { + if (!this.disable) { + this.$emit('update:selected', !this.selected) + this.$emit('click', e) + } + }, + + __onRemove (e) { + if (e.keyCode === void 0 || e.keyCode === 13) { + stopAndPrevent(e) + !this.disable && this.$emit('remove', false) + } + }, + + __getContent (h) { + const child = [] + + this.isClickable === true && child.push( + h('div', { staticClass: 'q-focus-helper' }) + ) + + this.hasLeftIcon === true && child.push( + h(QIcon, { + staticClass: 'q-chip__icon q-chip__icon--left', + props: { name: this.leftIcon } + }) + ) + + const label = this.label !== void 0 + ? [ h('div', { staticClass: 'ellipsis' }, [ this.label ]) ] + : void 0 + + child.push( + h('div', { + staticClass: 'q-chip__content col row no-wrap items-center q-anchor--skip' + }, mergeSlotSafely(label, this, 'default')) + ) + + this.iconRight && child.push( + h(QIcon, { + staticClass: 'q-chip__icon q-chip__icon--right', + props: { name: this.iconRight } + }) + ) + + this.removable === true && child.push( + h(QIcon, { + key: 'non', + staticClass: 'q-chip__icon q-chip__icon--remove cursor-pointer', + props: { name: this.removeIcon }, + attrs: this.attrs.remove, + on: cache(this, 'non', { + click: this.__onRemove, + keyup: this.__onRemove + }) + }) + ) + + return child + } + }, + + render (h) { + if (this.value === false) { return } + + const data = { + staticClass: 'q-chip row inline no-wrap items-center', + class: this.classes, + style: this.sizeStyle + } + + this.isClickable === true && Object.assign(data, { + key: 'click', + attrs: this.attrs.chip, + on: cache(this, 'click', { + click: this.__onClick, + keyup: this.__onKeyup + }), + directives: cache(this, 'dir#' + this.ripple, [ + { name: 'ripple', value: this.ripple } + ]) + }) + + return h('div', data, this.__getContent(h)) + } +}) diff --git a/src/components/chip/QChip.json b/src/components/chip/QChip.json new file mode 100644 index 00000000000..00f06aa5818 --- /dev/null +++ b/src/components/chip/QChip.json @@ -0,0 +1,150 @@ +{ + "mixins": [ "mixins/ripple" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/chip" + }, + + "props": { + "dense": { + "extends": "dense" + }, + + "size": { + "type": "String", + "desc": "QChip size name or a CSS unit including unit name", + "examples": [ "xs", "sm", "md", "lg", "xl", "25px", "2rem" ], + "category": "style", + "addedIn": "v1.2.2" + }, + + "dark": { + "extends": "dark", + "addedIn": "v1.3" + }, + + "icon": { + "extends": "icon" + }, + + "icon-right": { + "extends": "icon" + }, + + "icon-remove": { + "extends": "icon" + }, + + "icon-selected": { + "extends": "icon", + "addedIn": "v1.14.6" + }, + + "label": { + "type": [ "String", "Number" ], + "desc": "Chip's content as string; overrides default slot if specified", + "examples": [ "John Doe", "Book" ], + "category": "content" + }, + + "color": { + "extends": "color" + }, + + "text-color": { + "extends": "text-color" + }, + + "value": { + "type": "Boolean", + "desc": "Model of the component determining if QChip should be rendered or not", + "default": true, + "category": "model" + }, + + "selected": { + "type": "Boolean", + "sync": true, + "desc": "Model for QChip if it's selected or not", + "category": "model" + }, + + "square": { + "extends": "square", + "desc": "Sets a low value for border-radius instead of the default one, making it close to a square" + }, + + "outline": { + "type": "Boolean", + "desc": "Display using the 'outline' design", + "category": "style" + }, + + "clickable": { + "type": "Boolean", + "desc": "Is QChip clickable? If it's the case, then it will add hover effects and emit 'click' events", + "category": "state" + }, + + "removable": { + "type": "Boolean", + "desc": "If set, then it displays a 'remove' icon that when clicked the QChip emits 'remove' event", + "category": "state" + }, + + "remove-aria-label": { + "type": "String", + "desc": "aria-label to be used on the remove icon", + "examples": [ "Remove item" ], + "category": "accessibility", + "addedIn": "v1.20.2" + }, + + "tabindex": { + "extends": "tabindex" + }, + + "disable": { + "extends": "disable" + } + }, + + "slots": { + "default": { + "desc": "This is where QChip content goes, if not using 'label' property" + } + }, + + "events": { + "click": { + "desc": "Emitted on QChip click if 'clickable' property is set", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + }, + + "update:selected": { + "desc": "Used by Vue on 'selected.sync' prop for updating its value", + "params": { + "state": { + "type": "Boolean", + "desc": "Selected state" + } + } + }, + + "remove": { + "desc": "Works along with 'value' and 'removable' prop. Emitted when toggling rendering state of the QChip", + "params": { + "state": { + "type": "Boolean", + "desc": "Render state (render or not)" + } + } + } + } +} diff --git a/src/components/chip/QChip.sass b/src/components/chip/QChip.sass new file mode 100644 index 00000000000..e6565a7a0b0 --- /dev/null +++ b/src/components/chip/QChip.sass @@ -0,0 +1,121 @@ +$chip-height: 2em + +.q-chip + vertical-align: middle + border-radius: 16px + outline: 0 + position: relative + + height: $chip-height + max-width: 100% + margin: 4px + + background: $chip-background-light + background: var(--q-color-chip-background-light) + color: $light-text + color: var(--q-color-light-text) + + font-size: 14px + padding: .5em .9em + + &--dark + background: $chip-background-dark + background: var(--q-color-chip-background-dark) + color: $dark-text + color: var(--q-color-dark-text) + + &--colored, + &--dark + .q-chip__icon + color: inherit + + &--outline + background: transparent !important + border: 1px solid currentColor + + .q-avatar + height: calc(1em - 2px) + width: calc(1em - 2px) + + .q-avatar + font-size: $chip-height + margin-left: -.45em + margin-right: .2em + border-radius: 16px + + ~ .q-avatar, + &--right + margin-left: .2em + margin-right: -.45em + + &--selected + .q-avatar:first-child:not(.q-avatar--right) + display: none + + &__icon + color: rgba(0,0,0,.54) + font-size: 1.5em + margin: -.2em + + &--left + margin-right: .2em + &--right + margin-left: .2em + &--remove + margin-left: .1em + margin-right: -.5em + opacity: .6 + outline: 0 + + &:hover, + &:focus + opacity: 1 + + &__content + white-space: nowrap + + &--dense + border-radius: 12px + padding: 0 .4em + height: 1.5em + + .q-avatar + font-size: 1.5em + margin-left: -.27em + margin-right: .1em + border-radius: 12px + + ~ .q-avatar, + &--right + margin-left: .1em + margin-right: -.268em + + .q-chip__icon + font-size: 1.25em + &--left + margin-right: .195em + &--remove + margin-right: -.25em + + &--square + border-radius: $generic-border-radius + + .q-avatar + border-radius: $generic-border-radius 0 0 $generic-border-radius + + ~ .q-avatar, + &--right + border-radius: 0 $generic-border-radius $generic-border-radius 0 + +body.desktop .q-chip--clickable:focus + box-shadow: $shadow-1 + +@media (prefers-color-scheme: dark) + .q-chip--dark-auto + background: $chip-background-dark + background: var(--q-color-chip-background-dark) + color: $dark-text + color: var(--q-color-dark-text) + + .q-chip__icon + color: inherit diff --git a/src/components/chip/QChip.styl b/src/components/chip/QChip.styl new file mode 100644 index 00000000000..b680c823277 --- /dev/null +++ b/src/components/chip/QChip.styl @@ -0,0 +1,121 @@ +$chip-height = 2em + +.q-chip + vertical-align: middle + border-radius: 16px + outline: 0 + position: relative + + height: $chip-height + max-width: 100% + margin: 4px + + background: $chip-background-light + background: var(--q-color-chip-background-light) + color: $light-text + color: var(--q-color-light-text) + + font-size: 14px + padding: .5em .9em + + &--dark + background: $chip-background-dark + background: var(--q-color-chip-background-dark) + color: $dark-text + color: var(--q-color-dark-text) + + &--colored, + &--dark + .q-chip__icon + color: inherit + + &--outline + background: transparent !important + border: 1px solid currentColor + + .q-avatar + height: calc(1em - 2px) + width: calc(1em - 2px) + + .q-avatar + font-size: $chip-height + margin-left: -.45em + margin-right: .2em + border-radius: 16px + + ~ .q-avatar, + &--right + margin-left: .2em + margin-right: -.45em + + &--selected + .q-avatar:first-child:not(.q-avatar--right) + display: none + + &__icon + color: rgba(0,0,0,.54) + font-size: 1.5em + margin: -.2em + + &--left + margin-right: .2em + &--right + margin-left: .2em + &--remove + margin-left: .1em + margin-right: -.5em + opacity: .6 + outline: 0 + + &:hover, + &:focus + opacity: 1 + + &__content + white-space: nowrap + + &--dense + border-radius: 12px + padding: 0 .4em + height: 1.5em + + .q-avatar + font-size: 1.5em + margin-left: -.27em + margin-right: .1em + border-radius: 12px + + ~ .q-avatar, + &--right + margin-left: .1em + margin-right: -.268em + + .q-chip__icon + font-size: 1.25em + &--left + margin-right: .195em + &--remove + margin-right: -.25em + + &--square + border-radius: $generic-border-radius + + .q-avatar + border-radius: $generic-border-radius 0 0 $generic-border-radius + + ~ .q-avatar, + &--right + border-radius: 0 $generic-border-radius $generic-border-radius 0 + +body.desktop .q-chip--clickable:focus + box-shadow: $shadow-1 + +@media (prefers-color-scheme: dark) + .q-chip--dark-auto + background: $chip-background-dark + background: var(--q-color-chip-background-dark) + color: $dark-text + color: var(--q-color-dark-text) + + .q-chip__icon + color: inherit diff --git a/src/components/chip/index.js b/src/components/chip/index.js new file mode 100644 index 00000000000..0a493dc6513 --- /dev/null +++ b/src/components/chip/index.js @@ -0,0 +1,5 @@ +import QChip from './QChip.js' + +export { + QChip +} diff --git a/src/components/circular-progress/QCircularProgress.js b/src/components/circular-progress/QCircularProgress.js new file mode 100644 index 00000000000..70069ce5c7d --- /dev/null +++ b/src/components/circular-progress/QCircularProgress.js @@ -0,0 +1,191 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' +import SizeMixin from '../../mixins/size.js' +import { mergeSlotSafely } from '../../utils/private/slot.js' +import { between } from '../../utils/format.js' + +const + radius = 50, + diameter = 2 * radius, + circumference = diameter * Math.PI, + strokeDashArray = Math.round(circumference * 1000) / 1000 + +export default Vue.extend({ + name: 'QCircularProgress', + + mixins: [ ListenersMixin, SizeMixin ], + + props: { + value: { + type: Number, + default: 0 + }, + + min: { + type: Number, + default: 0 + }, + max: { + type: Number, + default: 100 + }, + + color: String, + centerColor: String, + trackColor: String, + + fontSize: String, + rounded: Boolean, + + // ratio + thickness: { + type: Number, + default: 0.2, + validator: v => v >= 0 && v <= 1 + }, + + angle: { + type: Number, + default: 0 + }, + + indeterminate: Boolean, + showValue: Boolean, + reverse: Boolean, + + instantFeedback: Boolean + }, + + computed: { + normalizedValue () { + return between(this.value, this.min, this.max) + }, + + svgStyle () { + const angle = this.$q.lang.rtl === true ? -this.angle : this.angle + + return { + transform: this.reverse !== (this.$q.lang.rtl === true) + ? `scale3d(-1, 1, 1) rotate3d(0, 0, 1, ${-90 - angle}deg)` + : `rotate3d(0, 0, 1, ${angle - 90}deg)` + } + }, + + circleStyle () { + if (this.instantFeedback !== true && this.indeterminate !== true) { + return { transition: 'stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease' } + } + }, + + viewBox () { + return diameter / (1 - this.thickness / 2) + }, + + viewBoxAttr () { + return `${this.viewBox / 2} ${this.viewBox / 2} ${this.viewBox} ${this.viewBox}` + }, + + strokeDashOffset () { + const progress = 1 - (this.normalizedValue - this.min) / (this.max - this.min) + return progress * circumference + }, + + strokeWidth () { + return this.thickness / 2 * this.viewBox + }, + + attrs () { + return { + role: 'progressbar', + 'aria-valuemin': this.min, + 'aria-valuemax': this.max, + 'aria-valuenow': this.indeterminate === true ? void 0 : this.normalizedValue + } + } + }, + + methods: { + __getCircle (h, { thickness, offset, color, cls, rounded }) { + return h('circle', { + staticClass: 'q-circular-progress__' + cls, + class: color !== void 0 ? `text-${color}` : null, + style: this.circleStyle, + attrs: { + fill: 'transparent', + stroke: 'currentColor', + 'stroke-width': thickness, + 'stroke-dasharray': strokeDashArray, + 'stroke-dashoffset': offset, + 'stroke-linecap': rounded, + cx: this.viewBox, + cy: this.viewBox, + r: radius + } + }) + } + }, + + render (h) { + const svgChild = [] + + this.centerColor !== void 0 && this.centerColor !== 'transparent' && svgChild.push( + h('circle', { + staticClass: 'q-circular-progress__center', + class: `text-${this.centerColor}`, + attrs: { + fill: 'currentColor', + r: radius - this.strokeWidth / 2, + cx: this.viewBox, + cy: this.viewBox + } + }) + ) + + this.trackColor !== void 0 && this.trackColor !== 'transparent' && svgChild.push( + this.__getCircle(h, { + cls: 'track', + thickness: this.strokeWidth, + offset: 0, + color: this.trackColor + }) + ) + + svgChild.push( + this.__getCircle(h, { + cls: 'circle', + thickness: this.strokeWidth, + offset: this.strokeDashOffset, + color: this.color, + rounded: this.rounded === true ? 'round' : void 0 + }) + ) + + const child = [ + h('svg', { + staticClass: 'q-circular-progress__svg', + style: this.svgStyle, + attrs: { + focusable: 'false' /* needed for IE11 */, + viewBox: this.viewBoxAttr, + 'aria-hidden': 'true' + } + }, svgChild) + ] + + this.showValue === true && child.push( + h('div', { + staticClass: 'q-circular-progress__text absolute-full row flex-center content-center', + style: { fontSize: this.fontSize } + }, this.$scopedSlots.default !== void 0 ? this.$scopedSlots.default() : [ h('div', [ this.normalizedValue ]) ]) + ) + + return h('div', { + staticClass: 'q-circular-progress', + class: `q-circular-progress--${this.indeterminate === true ? 'in' : ''}determinate`, + style: this.sizeStyle, + on: { ...this.qListeners }, + attrs: this.attrs + }, mergeSlotSafely(child, this, 'internal')) + } +}) diff --git a/src/components/circular-progress/QCircularProgress.json b/src/components/circular-progress/QCircularProgress.json new file mode 100644 index 00000000000..0e46a962ba1 --- /dev/null +++ b/src/components/circular-progress/QCircularProgress.json @@ -0,0 +1,113 @@ +{ + "mixins": [ "mixins/size" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/circular-progress" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "type": "Number", + "default": 0, + "desc": "Current progress (must be between min/max)", + "examples": [ 0, 100, 52.32 ], + "category": "model" + }, + + "min": { + "type": "Number", + "default": 0, + "desc": "Minimum value defining 'no progress' (must be lower than 'max')", + "examples": [ 0, 100, 52.32 ], + "category": "model" + }, + + "max": { + "type": "Number", + "default": 100, + "desc": "Maximum value defining 100% progress made (must be higher than 'min')", + "examples": [ 100, 52.32 ], + "category": "model" + }, + + "color": { + "extends": "color", + "desc": "Color name for the arc progress from the Quasar Color Palette" + }, + + "center-color": { + "extends": "color", + "desc": "Color name for the center part of the component from the Quasar Color Palette" + }, + + "track-color": { + "extends": "color", + "desc": "Color name for the track of the component from the Quasar Color Palette" + }, + + "font-size": { + "type": "String", + "desc": "Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size", + "default": "0.25em", + "examples": [ "1em", "16px", "2rem" ], + "category": "style" + }, + + "rounded": { + "type": "Boolean", + "desc": "Rounding the arc of progress", + "category": "style", + "addedIn": "v1.20.2" + }, + + "thickness": { + "type": "Number", + "default": 0.2, + "desc": "Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size", + "examples": [ 1, 0.3 ], + "category": "style" + }, + + "angle": { + "type": "Number", + "desc": "Angle to rotate progress arc by", + "default": 0, + "examples": [ 0, 40, 90 ], + "category": "content" + }, + + "indeterminate": { + "type": "Boolean", + "desc": "Put component into 'indeterminate' state; Ignores 'value' prop", + "category": "behavior" + }, + + "show-value": { + "type": "Boolean", + "desc": "Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component", + "category": "content|behavior" + }, + + "reverse": { + "type": "Boolean", + "desc": "Reverses the direction of progress; Only for determined state", + "category": "behavior" + }, + + "instant-feedback": { + "type": "Boolean", + "desc": "No animation when model changes", + "category": "behavior" + } + }, + + "slots": { + "default": { + "desc": "Used for component content only if 'show-value' prop is set; Make sure the content has enough space to be displayed inside the component" + } + } +} diff --git a/src/components/circular-progress/QCircularProgress.sass b/src/components/circular-progress/QCircularProgress.sass new file mode 100644 index 00000000000..d900440a98c --- /dev/null +++ b/src/components/circular-progress/QCircularProgress.sass @@ -0,0 +1,38 @@ +.q-circular-progress + display: inline-block + position: relative + vertical-align: middle + + width: 1em + height: 1em + line-height: 1 + + &.q-focusable + border-radius: 50% + + &__svg + width: 100% + height: 100% + + &__text + font-size: .25em + + &--indeterminate + .q-circular-progress__svg + transform-origin: 50% 50% + animation: q-spin 2s linear infinite #{"/* rtl:ignore */"} + .q-circular-progress__circle + stroke-dasharray: 1 400 + stroke-dashoffset: 0 + animation: q-circular-progress-circle 1.5s ease-in-out infinite #{"/* rtl:ignore */"} + +@keyframes q-circular-progress-circle + 0% + stroke-dasharray: 1, 400 + stroke-dashoffset: 0 + 50% + stroke-dasharray: 400, 400 + stroke-dashoffset: -100 + 100% + stroke-dasharray: 400, 400 + stroke-dashoffset: -300 diff --git a/src/components/circular-progress/QCircularProgress.styl b/src/components/circular-progress/QCircularProgress.styl new file mode 100644 index 00000000000..1628b071733 --- /dev/null +++ b/src/components/circular-progress/QCircularProgress.styl @@ -0,0 +1,38 @@ +.q-circular-progress + display: inline-block + position: relative + vertical-align: middle + + width: 1em + height: 1em + line-height: 1 + + &.q-focusable + border-radius: 50% + + &__svg + width: 100% + height: 100% + + &__text + font-size: .25em + + &--indeterminate + .q-circular-progress__svg + transform-origin: 50% 50% + animation: q-spin 2s linear infinite /* rtl:ignore */ + .q-circular-progress__circle + stroke-dasharray: 1 400 + stroke-dashoffset: 0 + animation: q-circular-progress-circle 1.5s ease-in-out infinite /* rtl:ignore */ + +@keyframes q-circular-progress-circle + 0% + stroke-dasharray: 1, 400 + stroke-dashoffset: 0 + 50% + stroke-dasharray: 400, 400 + stroke-dashoffset: -100 + 100% + stroke-dasharray: 400, 400 + stroke-dashoffset: -300 diff --git a/src/components/circular-progress/index.js b/src/components/circular-progress/index.js new file mode 100644 index 00000000000..9414215790d --- /dev/null +++ b/src/components/circular-progress/index.js @@ -0,0 +1,5 @@ +import QCircularProgress from './QCircularProgress.js' + +export { + QCircularProgress +} diff --git a/src/components/color/QColor.js b/src/components/color/QColor.js new file mode 100644 index 00000000000..e10a33f6d49 --- /dev/null +++ b/src/components/color/QColor.js @@ -0,0 +1,898 @@ +import Vue from 'vue' + +import { testPattern } from '../../utils/patterns.js' +import throttle from '../../utils/throttle.js' +import cache from '../../utils/private/cache.js' +import { stop } from '../../utils/event.js' +import { hexToRgb, rgbToHex, rgbToString, textToRgb, rgbToHsv, hsvToRgb, luminosity } from '../../utils/colors.js' + +import DarkMixin from '../../mixins/dark.js' +import FormMixin from '../../mixins/form.js' +import ListenersMixin from '../../mixins/listeners.js' + +import TouchPan from '../../directives/TouchPan.js' + +import QSlider from '../slider/QSlider.js' +import QIcon from '../icon/QIcon.js' + +import QTabs from '../tabs/QTabs.js' +import QTab from '../tabs/QTab.js' +import QTabPanels from '../tab-panels/QTabPanels.js' +import QTabPanel from '../tab-panels/QTabPanel.js' + +const palette = [ + 'rgb(255,204,204)', 'rgb(255,230,204)', 'rgb(255,255,204)', 'rgb(204,255,204)', 'rgb(204,255,230)', 'rgb(204,255,255)', 'rgb(204,230,255)', 'rgb(204,204,255)', 'rgb(230,204,255)', 'rgb(255,204,255)', + 'rgb(255,153,153)', 'rgb(255,204,153)', 'rgb(255,255,153)', 'rgb(153,255,153)', 'rgb(153,255,204)', 'rgb(153,255,255)', 'rgb(153,204,255)', 'rgb(153,153,255)', 'rgb(204,153,255)', 'rgb(255,153,255)', + 'rgb(255,102,102)', 'rgb(255,179,102)', 'rgb(255,255,102)', 'rgb(102,255,102)', 'rgb(102,255,179)', 'rgb(102,255,255)', 'rgb(102,179,255)', 'rgb(102,102,255)', 'rgb(179,102,255)', 'rgb(255,102,255)', + 'rgb(255,51,51)', 'rgb(255,153,51)', 'rgb(255,255,51)', 'rgb(51,255,51)', 'rgb(51,255,153)', 'rgb(51,255,255)', 'rgb(51,153,255)', 'rgb(51,51,255)', 'rgb(153,51,255)', 'rgb(255,51,255)', + 'rgb(255,0,0)', 'rgb(255,128,0)', 'rgb(255,255,0)', 'rgb(0,255,0)', 'rgb(0,255,128)', 'rgb(0,255,255)', 'rgb(0,128,255)', 'rgb(0,0,255)', 'rgb(128,0,255)', 'rgb(255,0,255)', + 'rgb(245,0,0)', 'rgb(245,123,0)', 'rgb(245,245,0)', 'rgb(0,245,0)', 'rgb(0,245,123)', 'rgb(0,245,245)', 'rgb(0,123,245)', 'rgb(0,0,245)', 'rgb(123,0,245)', 'rgb(245,0,245)', + 'rgb(214,0,0)', 'rgb(214,108,0)', 'rgb(214,214,0)', 'rgb(0,214,0)', 'rgb(0,214,108)', 'rgb(0,214,214)', 'rgb(0,108,214)', 'rgb(0,0,214)', 'rgb(108,0,214)', 'rgb(214,0,214)', + 'rgb(163,0,0)', 'rgb(163,82,0)', 'rgb(163,163,0)', 'rgb(0,163,0)', 'rgb(0,163,82)', 'rgb(0,163,163)', 'rgb(0,82,163)', 'rgb(0,0,163)', 'rgb(82,0,163)', 'rgb(163,0,163)', + 'rgb(92,0,0)', 'rgb(92,46,0)', 'rgb(92,92,0)', 'rgb(0,92,0)', 'rgb(0,92,46)', 'rgb(0,92,92)', 'rgb(0,46,92)', 'rgb(0,0,92)', 'rgb(46,0,92)', 'rgb(92,0,92)', + 'rgb(255,255,255)', 'rgb(205,205,205)', 'rgb(178,178,178)', 'rgb(153,153,153)', 'rgb(127,127,127)', 'rgb(102,102,102)', 'rgb(76,76,76)', 'rgb(51,51,51)', 'rgb(25,25,25)', 'rgb(0,0,0)' +] + +const thumbPath = 'M5 5 h10 v10 h-10 v-10 z' +const alphaTrackImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==' + +export default Vue.extend({ + name: 'QColor', + + mixins: [ ListenersMixin, DarkMixin, FormMixin ], + + directives: { + TouchPan + }, + + props: { + value: String, + + defaultValue: String, + defaultView: { + type: String, + default: 'spectrum', + validator: v => ['spectrum', 'tune', 'palette'].includes(v) + }, + + formatModel: { + type: String, + default: 'auto', + validator: v => ['auto', 'hex', 'rgb', 'hexa', 'rgba'].includes(v) + }, + + palette: Array, + + noHeader: Boolean, + noHeaderTabs: Boolean, + noFooter: Boolean, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + disable: Boolean, + readonly: Boolean + }, + + data () { + return { + topView: this.formatModel === 'auto' + ? ( + (this.value === void 0 || this.value === null || this.value === '' || this.value.startsWith('#')) + ? 'hex' + : 'rgb' + ) + : (this.formatModel.startsWith('hex') ? 'hex' : 'rgb'), + view: this.defaultView, + model: this.__parseModel(this.value || this.defaultValue) + } + }, + + watch: { + value (v) { + const model = this.__parseModel(v || this.defaultValue) + if (model.hex !== this.model.hex) { + this.model = model + } + }, + + defaultValue (v) { + if (!this.value && v) { + const model = this.__parseModel(v) + if (model.hex !== this.model.hex) { + this.model = model + } + } + } + }, + + computed: { + editable () { + return this.disable !== true && this.readonly !== true + }, + + forceHex () { + return this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('hex') > -1 + }, + + forceAlpha () { + return this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('a') > -1 + }, + + isHex () { + return this.value === void 0 || + this.value === null || + this.value === '' || + this.value.startsWith('#') + }, + + isOutputHex () { + return this.forceHex !== null + ? this.forceHex + : this.isHex + }, + + formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.model[ this.isOutputHex === true ? 'hex' : 'rgb' ] + } + }, + + hasAlpha () { + if (this.forceAlpha !== null) { + return this.forceAlpha + } + return this.model.a !== void 0 + }, + + currentBgColor () { + return { + backgroundColor: this.model.rgb || '#000' + } + }, + + headerClass () { + const light = this.model.a !== void 0 && this.model.a < 65 + ? true + : luminosity(this.model) > 0.4 + + return `q-color-picker__header-content--${light ? 'light' : 'dark'}` + }, + + spectrumStyle () { + return { + background: `hsl(${this.model.h},100%,50%)` + } + }, + + spectrumPointerStyle () { + return { + top: `${100 - this.model.v}%`, + [this.$q.lang.rtl === true ? 'right' : 'left']: `${this.model.s}%` + } + }, + + computedPalette () { + return this.palette !== void 0 && this.palette.length > 0 + ? this.palette + : palette + }, + + classes () { + return 'q-color-picker' + + (this.bordered === true ? ' q-color-picker--bordered' : '') + + (this.square === true ? ' q-color-picker--square no-border-radius' : '') + + (this.flat === true ? ' q-color-picker--flat no-shadow' : '') + + (this.disable === true ? ' disabled' : '') + + ` q-color-picker--${this.darkSuffix} q-${this.darkSuffix}` + }, + + attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + } + }, + + created () { + this.__spectrumChange = throttle(this.__spectrumChange, 20) + }, + + render (h) { + const child = [ this.__getContent(h) ] + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(child, 'push') + } + + this.noHeader !== true && child.unshift( + this.__getHeader(h) + ) + + this.noFooter !== true && child.push( + this.__getFooter(h) + ) + + return h('div', { + class: this.classes, + attrs: this.attrs, + on: { ...this.qListeners } + }, child) + }, + + methods: { + __getHeader (h) { + const child = [] + + this.noHeaderTabs !== true && child.push( + h(QTabs, { + key: 'topVTab', + class: 'q-color-picker__header-tabs', + props: { + value: this.topView, + dense: true, + align: 'justify' + }, + on: cache(this, 'topVTab', { + input: val => { this.topView = val } + }) + }, [ + h(QTab, { + props: { + label: 'HEX' + (this.hasAlpha === true ? 'A' : ''), + name: 'hex', + ripple: false + } + }), + + h(QTab, { + props: { + label: 'RGB' + (this.hasAlpha === true ? 'A' : ''), + name: 'rgb', + ripple: false + } + }) + ]) + ) + + child.push( + h('div', { + staticClass: 'q-color-picker__header-banner row flex-center no-wrap' + }, [ + h('input', { + key: 'topIn', + staticClass: 'fit', + domProps: { value: this.model[this.topView] }, + attrs: this.editable !== true ? { + readonly: true + } : null, + on: cache(this, 'topIn', { + input: evt => { + this.__updateErrorIcon(this.__onEditorChange(evt) === true) + }, + change: stop, + blur: evt => { + this.__onEditorChange(evt, true) === true && this.$forceUpdate() + this.__updateErrorIcon(false) + } + }) + }), + + h(QIcon, { + ref: 'errorIcon', + staticClass: 'q-color-picker__error-icon absolute no-pointer-events', + props: { name: this.$q.iconSet.type.negative } + }) + ]) + ) + + return h('div', { + staticClass: 'q-color-picker__header relative-position overflow-hidden' + }, [ + h('div', { staticClass: 'q-color-picker__header-bg absolute-full' }), + + h('div', { + staticClass: 'q-color-picker__header-content', + class: this.headerClass, + style: this.currentBgColor + }, child) + ]) + }, + + __getContent (h) { + return h(QTabPanels, { + props: { + value: this.view, + animated: true + } + }, [ + h(QTabPanel, { + staticClass: 'q-color-picker__spectrum-tab overflow-hidden', + props: { name: 'spectrum' } + }, this.__getSpectrumTab(h)), + + h(QTabPanel, { + staticClass: 'q-pa-md q-color-picker__tune-tab', + props: { name: 'tune' } + }, this.__getTuneTab(h)), + + h(QTabPanel, { + staticClass: 'q-color-picker__palette-tab', + props: { name: 'palette' } + }, this.__getPaletteTab(h)) + ]) + }, + + __getFooter (h) { + return h('div', { + staticClass: 'q-color-picker__footer relative-position overflow-hidden' + }, [ + h(QTabs, { + key: 'ftIn', + staticClass: 'absolute-full', + props: { + value: this.view, + dense: true, + align: 'justify' + }, + on: cache(this, 'ftIn', { + input: val => { this.view = val } + }) + }, [ + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.spectrum, + name: 'spectrum', + ripple: false + } + }), + + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.tune, + name: 'tune', + ripple: false + } + }), + + h(QTab, { + props: { + icon: this.$q.iconSet.colorPicker.palette, + name: 'palette', + ripple: false + } + }) + ]) + ]) + }, + + __getSpectrumTab (h) { + return [ + h('div', { + key: 'spectrT', + ref: 'spectrum', + staticClass: 'q-color-picker__spectrum non-selectable relative-position cursor-pointer', + style: this.spectrumStyle, + class: { readonly: this.editable !== true }, + on: this.editable === true + ? cache(this, 'spectrT', { + click: this.__spectrumClick, + mousedown: this.__activate + }) + : null, + directives: this.editable === true + ? cache(this, 'spectrDir', [{ + name: 'touch-pan', + modifiers: { + prevent: true, + stop: true, + mouse: true + }, + value: this.__spectrumPan + }]) + : null + }, [ + h('div', { style: { paddingBottom: '100%' } }), + h('div', { staticClass: 'q-color-picker__spectrum-white absolute-full' }), + h('div', { staticClass: 'q-color-picker__spectrum-black absolute-full' }), + h('div', { + staticClass: 'absolute', + style: this.spectrumPointerStyle + }, [ + this.model.hex !== void 0 ? h('div', { staticClass: 'q-color-picker__spectrum-circle' }) : null + ]) + ]), + + h('div', { + staticClass: 'q-color-picker__sliders' + }, [ + h(QSlider, { + key: 'hueSlide', + staticClass: 'q-color-picker__hue non-selectable', + props: { + value: this.model.h, + min: 0, + max: 360, + trackSize: '8px', + innerTrackColor: 'transparent', + selectionColor: 'transparent', + readonly: this.editable !== true, + thumbPath + }, + on: cache(this, 'hueSlide', { + input: this.__onHueChange, + change: val => this.__onHueChange(val, true) + }) + }), + + this.hasAlpha === true + ? h(QSlider, { + key: 'alphaSlide', + staticClass: 'q-color-picker__alpha non-selectable', + props: { + value: this.model.a, + min: 0, + max: 100, + trackSize: '8px', + trackColor: 'white', + innerTrackColor: 'transparent', + selectionColor: 'transparent', + trackImg: alphaTrackImg, + readonly: this.editable !== true, + hideSelection: true, + thumbPath + }, + on: cache(this, 'alphaSlide', { + input: value => this.__onNumericChange(value, 'a', 100), + change: value => this.__onNumericChange(value, 'a', 100, void 0, true) + }) + }) + : null + ]) + ] + }, + + __getTuneTab (h) { + const attrs = { + inputmode: 'numeric', + maxlength: 3, + readonly: this.editable !== true + } + + return [ + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['R']), + h(QSlider, { + key: 'rSlide', + props: { + value: this.model.r, + min: 0, + max: 255, + color: 'red', + dark: this.dark, + readonly: this.editable !== true + }, + on: cache(this, 'rSlide', { + input: value => this.__onNumericChange(value, 'r', 255), + change: value => this.__onNumericChange(value, 'r', 255, void 0, true) + }) + }), + h('input', { + key: 'rIn', + domProps: { value: this.model.r }, + attrs, + on: cache(this, 'rIn', { + input: evt => this.__onNumericChange(evt.target.value, 'r', 255, evt), + change: stop, + blur: evt => this.__onNumericChange(evt.target.value, 'r', 255, evt, true) + }) + }) + ]), + + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['G']), + h(QSlider, { + key: 'gSlide', + props: { + value: this.model.g, + min: 0, + max: 255, + color: 'green', + dark: this.dark, + readonly: this.editable !== true + }, + on: cache(this, 'gSlide', { + input: value => this.__onNumericChange(value, 'g', 255), + change: value => this.__onNumericChange(value, 'g', 255, void 0, true) + }) + }), + h('input', { + key: 'gIn', + domProps: { value: this.model.g }, + attrs, + on: cache(this, 'gIn', { + input: evt => this.__onNumericChange(evt.target.value, 'g', 255, evt), + change: stop, + blur: evt => this.__onNumericChange(evt.target.value, 'g', 255, evt, true) + }) + }) + ]), + + h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['B']), + h(QSlider, { + key: 'bSlide', + props: { + value: this.model.b, + min: 0, + max: 255, + color: 'blue', + readonly: this.editable !== true, + dark: this.dark + }, + on: cache(this, 'bSlide', { + input: value => this.__onNumericChange(value, 'b', 255), + change: value => this.__onNumericChange(value, 'b', 255, void 0, true) + }) + }), + h('input', { + key: 'bIn', + domProps: { value: this.model.b }, + attrs, + on: cache(this, 'bIn', { + input: evt => this.__onNumericChange(evt.target.value, 'b', 255, evt), + change: stop, + blur: evt => this.__onNumericChange(evt.target.value, 'b', 255, evt, true) + }) + }) + ]), + + this.hasAlpha === true ? h('div', { staticClass: 'row items-center no-wrap' }, [ + h('div', ['A']), + h(QSlider, { + key: 'aSlide', + props: { + value: this.model.a, + color: 'grey', + readonly: this.editable !== true, + dark: this.dark + }, + on: cache(this, 'aSlide', { + input: value => this.__onNumericChange(value, 'a', 100), + change: value => this.__onNumericChange(value, 'a', 100, void 0, true) + }) + }), + h('input', { + key: 'aIn', + domProps: { value: this.model.a }, + attrs, + on: cache(this, 'aIn', { + input: evt => this.__onNumericChange(evt.target.value, 'a', 100, evt), + change: stop, + blur: evt => this.__onNumericChange(evt.target.value, 'a', 100, evt, true) + }) + }) + ]) : null + ] + }, + + __getPaletteTab (h) { + return [ + h('div', { + staticClass: 'row items-center q-color-picker__palette-rows', + class: this.editable === true + ? 'q-color-picker__palette-rows--editable' + : '' + }, this.computedPalette.map(color => h('div', { + key: 'palette#' + color, + staticClass: 'q-color-picker__cube col-auto', + style: { backgroundColor: color }, + on: this.editable === true ? cache(this, 'palette#' + color, { + click: () => { + this.__onPalettePick(color) + } + }) : null + }))) + ] + }, + + __onSpectrumChange (left, top, change) { + const panel = this.$refs.spectrum + if (panel === void 0) { return } + + const + width = panel.clientWidth, + height = panel.clientHeight, + rect = panel.getBoundingClientRect() + + let x = Math.min(width, Math.max(0, left - rect.left)) + + if (this.$q.lang.rtl === true) { + x = width - x + } + + const + y = Math.min(height, Math.max(0, top - rect.top)), + s = Math.round(100 * x / width), + v = Math.round(100 * Math.max(0, Math.min(1, -(y / height) + 1))), + rgb = hsvToRgb({ + h: this.model.h, + s, + v, + a: this.hasAlpha === true ? this.model.a : void 0 + }) + + this.model.s = s + this.model.v = v + this.__update(rgb, change) + }, + + __onHueChange (h, change) { + h = Math.round(h) + const rgb = hsvToRgb({ + h, + s: this.model.s, + v: this.model.v, + a: this.hasAlpha === true ? this.model.a : void 0 + }) + + this.model.h = h + this.__update(rgb, change) + }, + + __onNumericChange (value, formatModel, max, evt, change) { + evt !== void 0 && stop(evt) + + if (!/^[0-9]+$/.test(value)) { + change === true && this.$forceUpdate() + return + } + + const val = Math.floor(Number(value)) + + if (val < 0 || val > max) { + change === true && this.$forceUpdate() + return + } + + const rgb = { + r: formatModel === 'r' ? val : this.model.r, + g: formatModel === 'g' ? val : this.model.g, + b: formatModel === 'b' ? val : this.model.b, + a: this.hasAlpha === true + ? (formatModel === 'a' ? val : this.model.a) + : void 0 + } + + if (formatModel !== 'a') { + const hsv = rgbToHsv(rgb) + this.model.h = hsv.h + this.model.s = hsv.s + this.model.v = hsv.v + } + + this.__update(rgb, change) + + if (evt !== void 0 && change !== true && evt.target.selectionEnd !== void 0) { + const index = evt.target.selectionEnd + this.$nextTick(() => { + evt.target.setSelectionRange(index, index) + }) + } + }, + + __onEditorChange (evt, change) { + let rgb + const inp = evt.target.value + + stop(evt) + + if (this.topView === 'hex') { + if ( + inp.length !== (this.hasAlpha === true ? 9 : 7) || + !/^#[0-9A-Fa-f]+$/.test(inp) + ) { + return true + } + + rgb = hexToRgb(inp) + } + else { + let model + + if (!inp.endsWith(')')) { + return true + } + else if (this.hasAlpha !== true && inp.startsWith('rgb(')) { + model = inp.substring(4, inp.length - 1).split(',').map(n => parseInt(n, 10)) + + if ( + model.length !== 3 || + !/^rgb\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)$/.test(inp) + ) { + return true + } + } + else if (this.hasAlpha === true && inp.startsWith('rgba(')) { + model = inp.substring(5, inp.length - 1).split(',') + + if ( + model.length !== 4 || + !/^rgba\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/.test(inp) + ) { + return true + } + + for (let i = 0; i < 3; i++) { + const v = parseInt(model[i], 10) + if (v < 0 || v > 255) { + return true + } + model[i] = v + } + + const v = parseFloat(model[3]) + if (v < 0 || v > 1) { + return true + } + model[3] = v + } + else { + return true + } + + if ( + model[0] < 0 || model[0] > 255 || + model[1] < 0 || model[1] > 255 || + model[2] < 0 || model[2] > 255 || + (this.hasAlpha === true && (model[3] < 0 || model[3] > 1)) + ) { + return true + } + + rgb = { + r: model[0], + g: model[1], + b: model[2], + a: this.hasAlpha === true + ? model[3] * 100 + : void 0 + } + } + + const hsv = rgbToHsv(rgb) + this.model.h = hsv.h + this.model.s = hsv.s + this.model.v = hsv.v + + this.__update(rgb, change) + + if (change !== true) { + const index = evt.target.selectionEnd + this.$nextTick(() => { + evt.target.setSelectionRange(index, index) + }) + } + }, + + __onPalettePick (color) { + const def = this.__parseModel(color) + const rgb = { r: def.r, g: def.g, b: def.b, a: def.a } + + if (rgb.a === void 0) { + rgb.a = this.model.a + } + + this.model.h = def.h + this.model.s = def.s + this.model.v = def.v + + this.__update(rgb, true) + }, + + __update (rgb, change) { + // update internally + this.model.hex = rgbToHex(rgb) + this.model.rgb = rgbToString(rgb) + this.model.r = rgb.r + this.model.g = rgb.g + this.model.b = rgb.b + this.model.a = rgb.a + + const value = this.model[this.isOutputHex === true ? 'hex' : 'rgb'] + + // emit new value + this.$emit('input', value) + change === true && this.$emit('change', value) + }, + + __updateErrorIcon (val) { + // we MUST avoid vue triggering a render, + // so manually changing this + if (this.$refs.errorIcon !== void 0) { + this.$refs.errorIcon.$el.style.opacity = val ? 1 : 0 + } + }, + + __parseModel (v) { + const forceAlpha = this.forceAlpha !== void 0 + ? this.forceAlpha + : ( + this.formatModel === 'auto' + ? null + : this.formatModel.indexOf('a') > -1 + ) + + if (typeof v !== 'string' || v.length === 0 || testPattern.anyColor(v.replace(/ /g, '')) !== true) { + return { + h: 0, + s: 0, + v: 0, + r: 0, + g: 0, + b: 0, + a: forceAlpha === true ? 100 : void 0, + hex: void 0, + rgb: void 0 + } + } + + const model = textToRgb(v) + + if (forceAlpha === true && model.a === void 0) { + model.a = 100 + } + + model.hex = rgbToHex(model) + model.rgb = rgbToString(model) + + return Object.assign(model, rgbToHsv(model)) + }, + + __spectrumPan (evt) { + if (evt.isFinal) { + this.__onSpectrumChange( + evt.position.left, + evt.position.top, + true + ) + } + else { + this.__spectrumChange(evt) + } + }, + + // throttled in created() + __spectrumChange (evt) { + this.__onSpectrumChange( + evt.position.left, + evt.position.top + ) + }, + + __spectrumClick (evt) { + this.__onSpectrumChange( + evt.pageX - window.pageXOffset, + evt.pageY - window.pageYOffset, + true + ) + }, + + __activate (evt) { + this.__onSpectrumChange( + evt.pageX - window.pageXOffset, + evt.pageY - window.pageYOffset + ) + } + } +}) diff --git a/src/components/color/QColor.json b/src/components/color/QColor.json new file mode 100644 index 00000000000..0e4dab2b1d0 --- /dev/null +++ b/src/components/color/QColor.json @@ -0,0 +1,110 @@ +{ + "mixins": [ "mixins/form" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/color-picker" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "extends": "value", + "type": "String", + "examples": [ "v-model=\"myColor\"" ] + }, + + "default-value": { + "type": "String", + "desc": "The default value to show when the model doesn't have one", + "examples": [ "default-value=\"#c0c0c0\"" ], + "category": "model" + }, + + "default-view": { + "type": "String", + "desc": "The default view of the picker", + "default": "spectrum", + "values": [ "spectrum", "tune", "palette" ], + "category": "behavior" + }, + + "format-model": { + "type": "String", + "desc": "Forces a certain model format upon the model", + "default": "auto", + "values": [ "auto", "hex", "rgb", "hexa", "rgba" ], + "examples": [ "hex" ], + "category": "model" + }, + + "palette": { + "type": "Array", + "desc": "Use a custom palette of colors for the palette tab", + "default": "(hard-coded palette)", + "examples": [ + ":palette=\"[ '#019A9D', '#D9B801', 'rgb(23,120,0)', '#B2028A' ]\"" + ], + "category": "content" + }, + + "square": { + "extends": "square", + "addedIn": "v1.5.2" + }, + + "flat": { + "extends": "flat", + "addedIn": "v1.5.2" + }, + + "bordered": { + "extends": "bordered", + "addedIn": "v1.5.2" + }, + + "no-header": { + "type": "Boolean", + "desc": "Do not render header", + "category": "content" + }, + + "no-header-tabs": { + "type": "Boolean", + "desc": "Do not render header tabs (only the input)", + "category": "content", + "addedIn": "v1.17" + }, + + "no-footer": { + "type": "Boolean", + "desc": "Do not render footer; Useful when you want a specific view ('default-view' prop) and don't want the user to be able to switch it", + "category": "content" + }, + + "disable": { + "extends": "disable" + }, + + "readonly": { + "extends": "readonly" + }, + + "dark": { + "extends": "dark" + } + }, + + "events": { + "input": { + "extends": "input" + }, + + "change": { + "extends": "input", + "desc": "Emitted on lazy model value change (after user finishes selecting a color)" + } + } +} diff --git a/src/components/color/QColor.sass b/src/components/color/QColor.sass new file mode 100644 index 00000000000..b8942b860b0 --- /dev/null +++ b/src/components/color/QColor.sass @@ -0,0 +1,190 @@ +.q-color-picker + overflow: hidden + max-width: 350px + vertical-align: top + + min-width: 180px + + border-radius: $generic-border-radius + box-shadow: $shadow-2 + + .q-tab + padding: 0 !important + + &--bordered + border: 1px solid $separator-color + + &__header + + &-tabs + height: 32px + &-banner + height: 36px + + input + line-height: 24px + border: 0 + + .q-tab + min-height: 32px !important + height: 32px !important + + &--inactive + background: linear-gradient(to top, rgba(0,0,0,.3) 0%, rgba(0,0,0,.15) 25%, rgba(0,0,0,.1)) + + &__error-icon + bottom: 2px + right: 2px + font-size: 24px + opacity: 0 + transition: opacity .3s ease-in + + &__header-content + position: relative + background: $light-page + background: var(--q-color-light-page) + + &--light + color: $light-text + color: var(--q-color-light-text) + + &--dark + color: $dark-text + color: var(--q-color-dark-text) + + .q-tab--inactive + &:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + background: rgba(255,255,255,.2) + + &__header-banner + height: 36px + &__header-bg + background: $light-page + background: var(--q-color-light-page) + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==') !important + + &__footer + height: 36px + + .q-tab + min-height: 36px !important + height: 36px !important + + &--inactive + background: linear-gradient(to bottom, rgba(0,0,0,.3) 0%, rgba(0,0,0,.15) 25%, rgba(0,0,0,.1)) + + /* Saturation Tab */ + + &__spectrum + width: 100% + height: 100% + + &__spectrum-tab + padding: 0 !important + + &__spectrum-white + background: linear-gradient(to right, #fff, rgba(255,255,255,0)) + + &__spectrum-black + background: linear-gradient(to top, #000, rgba(0,0,0,0)) + + &__spectrum-circle + width: 10px + height: 10px + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), 0 0 1px 2px rgba(0,0,0,.4) + border-radius: 50% + transform: translate(-5px, -5px) + + &__hue .q-slider__track + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important // @stylint ignore + opacity: 1 + + &__alpha + .q-slider__track-container + padding-top: 0 + .q-slider__track:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: inherit + background: linear-gradient(90deg, rgba(255,255,255,0), $grey-7) + + &__sliders + padding: 0 16px + + .q-slider__thumb + color: $grey-9 + path + stroke-width: 2px + fill: transparent + .q-slider--active path + stroke-width: 3px + + /* Tune Tab */ + + &__tune-tab + + .q-slider + margin-left: 18px + margin-right: 18px + + input + font-size: 11px + border: 1px solid $grey-4 + border-radius: $generic-border-radius + width: 3.5em + + /* Palette Tab */ + + &__palette-tab + padding: 0 !important + + &__palette-rows + &--editable .q-color-picker__cube + cursor: pointer + + &__cube + padding-bottom: 10% + width: 10% !important + + /* Generic */ + + input + color: inherit + background: transparent + outline: 0 + text-align: center + .q-tabs + overflow: hidden + .q-tab--active + box-shadow: 0 0 14px 3px rgba(0,0,0,.2) + .q-focus-helper + display: none + .q-tab__indicator + display: none + .q-tab-panels + background: inherit + + &--dark + .q-color-picker__tune-tab input + border: 1px solid rgba($dark-text, .3) + + .q-slider + color: $grey-1 + +@media (prefers-color-scheme: dark) + .q-color-picker--dark-auto + .q-color-picker__tune-tab input + border: 1px solid rgba($dark-text, .3) + + .q-slider + color: $grey-1 diff --git a/src/components/color/QColor.styl b/src/components/color/QColor.styl new file mode 100644 index 00000000000..ae158fe59f5 --- /dev/null +++ b/src/components/color/QColor.styl @@ -0,0 +1,190 @@ +.q-color-picker + overflow: hidden + max-width: 350px + vertical-align: top + + min-width: 180px + + border-radius: $generic-border-radius + box-shadow: $shadow-2 + + .q-tab + padding: 0 !important + + &--bordered + border: 1px solid $separator-color + + &__header + + &-tabs + height: 32px + &-banner + height: 36px + + input + line-height: 24px + border: 0 + + .q-tab + min-height: 32px !important + height: 32px !important + + &--inactive + background: linear-gradient(to top, rgba(0,0,0,.3) 0%, rgba(0,0,0,.15) 25%, rgba(0,0,0,.1)) + + &__error-icon + bottom: 2px + right: 2px + font-size: 24px + opacity: 0 + transition: opacity .3s ease-in + + &__header-content + position: relative + background: $light-page + background: var(--q-color-light-page) + + &--light + color: $light-text + color: var(--q-color-light-text) + + &--dark + color: $dark-text + color: var(--q-color-dark-text) + + .q-tab--inactive + &:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + background: rgba(255,255,255,.2) + + &__header-banner + height: 36px + &__header-bg + background: $light-page + background: var(--q-color-light-page) + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==') !important + + &__footer + height: 36px + + .q-tab + min-height: 36px !important + height: 36px !important + + &--inactive + background: linear-gradient(to bottom, rgba(0,0,0,.3) 0%, rgba(0,0,0,.15) 25%, rgba(0,0,0,.1)) + + /* Saturation Tab */ + + &__spectrum + width: 100% + height: 100% + + &__spectrum-tab + padding: 0 !important + + &__spectrum-white + background: linear-gradient(to right, #fff, rgba(255,255,255,0)) + + &__spectrum-black + background: linear-gradient(to top, #000, rgba(0,0,0,0)) + + &__spectrum-circle + width: 10px + height: 10px + box-shadow: 0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), 0 0 1px 2px rgba(0,0,0,.4) + border-radius: 50% + transform: translate(-5px, -5px) + + &__hue .q-slider__track + background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%) !important // @stylint ignore + opacity: 1 + + &__alpha + .q-slider__track-container + padding-top: 0 + .q-slider__track:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: inherit + background: linear-gradient(90deg, rgba(255,255,255,0), $grey-7) + + &__sliders + padding: 0 16px + + .q-slider__thumb + color: $grey-9 + path + stroke-width: 2px + fill: transparent + .q-slider--active path + stroke-width: 3px + + /* Tune Tab */ + + &__tune-tab + + .q-slider + margin-left: 18px + margin-right: 18px + + input + font-size: 11px + border: 1px solid $grey-4 + border-radius: $generic-border-radius + width: 3.5em + + /* Palette Tab */ + + &__palette-tab + padding: 0 !important + + &__palette-rows + &--editable .q-color-picker__cube + cursor: pointer + + &__cube + padding-bottom: 10% + width: 10% !important + + /* Generic */ + + input + color: inherit + background: transparent + outline: 0 + text-align: center + .q-tabs + overflow: hidden + .q-tab--active + box-shadow: 0 0 14px 3px rgba(0,0,0,.2) + .q-focus-helper + display: none + .q-tab__indicator + display: none + .q-tab-panels + background: inherit + + &--dark + .q-color-picker__tune-tab input + border: 1px solid alpha($dark-text, .3) + + .q-slider + color: $grey-1 + +@media (prefers-color-scheme: dark) + .q-color-picker--dark-auto + .q-color-picker__tune-tab input + border: 1px solid alpha($dark-text, .3) + + .q-slider + color: $grey-1 diff --git a/src/components/color/index.js b/src/components/color/index.js new file mode 100644 index 00000000000..134db859be4 --- /dev/null +++ b/src/components/color/index.js @@ -0,0 +1,5 @@ +import QColor from './QColor.js' + +export { + QColor +} diff --git a/src/components/date/QDate.js b/src/components/date/QDate.js new file mode 100644 index 00000000000..cea5d909f9e --- /dev/null +++ b/src/components/date/QDate.js @@ -0,0 +1,1589 @@ +import Vue from 'vue' + +import KeyGroupNavigation from '../../directives/KeyGroupNavigation.js' +import QBtn from '../btn/QBtn.js' +import DateTimeMixin from '../../mixins/datetime.js' + +import { slot } from '../../utils/private/slot.js' +import { formatDate, __splitDate, getDateDiff, __safeCreateDate } from '../../utils/date.js' +import { pad } from '../../utils/format.js' +import { jalaaliMonthLength, toGregorian } from '../../utils/private/date-persian.js' +import cache from '../../utils/private/cache.js' +import { isObject } from '../../utils/is.js' + +const yearsInterval = 20 +const views = [ 'Calendar', 'Years', 'Months' ] +const viewIsValid = v => views.includes(v) +const yearMonthValidator = v => /^-?[\d]+\/[0-1]\d$/.test(v) +const modelNavigationValidator = v => [ 'from', 'to', false ].indexOf(v) > -1 +const hashToInt = s => { + if (typeof s !== 'string') { + return NaN + } + + const splits = s.split('/') + + return parseInt(splits[0], 10) * 10000 + parseInt(splits.slice(1).join(''), 10) +} +const lineStr = ' \u2014 ' + +function modelIsValid (date) { + return date.dateHash !== null && + date.day !== null && + date.month !== null && + date.year !== null +} + +export default Vue.extend({ + name: 'QDate', + + mixins: [ DateTimeMixin ], + + directives: { + KeyGroupNavigation + }, + + props: { + multiple: Boolean, + range: Boolean, + + dayAsRange: Boolean, + + title: String, + subtitle: String, + + mask: { + // this mask is forced + // when using persian calendar + default: 'YYYY/MM/DD' + }, + + defaultYearMonth: { + type: String, + validator: yearMonthValidator + }, + + yearsInMonthView: Boolean, + + events: [ Array, Function ], + eventColor: [ String, Function ], + + emitImmediately: Boolean, + + options: [ Array, Function ], + + modelNavigation: { + type: [ String, Boolean ], + default: 'from', + validator: modelNavigationValidator + }, + + navigationMinYearMonth: { + type: String, + validator: yearMonthValidator + }, + + navigationMaxYearMonth: { + type: String, + validator: yearMonthValidator + }, + + noUnset: Boolean, + + firstDayOfWeek: [ String, Number ], + todayBtn: Boolean, + minimal: Boolean, + defaultView: { + type: String, + default: 'Calendar', + validator: viewIsValid + } + }, + + data () { + const + innerMask = this.__getMask(), + innerLocale = this.__getLocale(), + viewModel = this.__getViewModel(innerMask, innerLocale), + year = viewModel.year, + direction = this.$q.lang.rtl === true ? 'right' : 'left' + + return { + view: this.defaultView, + monthDirection: direction, + yearDirection: direction, + startYear: year - (year % yearsInterval) - (year < 0 ? yearsInterval : 0), + editRange: void 0, + innerMask, + innerLocale, + viewModel // model of current calendar view + } + }, + + watch: { + value (v) { + if (this.lastEmitValue === v) { + this.lastEmitValue = 0 + } + else { + const { year, month } = this.__getViewModel(this.innerMask, this.innerLocale) + this.__updateViewModel(year, month) + } + }, + + view () { + this.$nextTick(() => { + this.$refs.viewTarget !== void 0 && this.$refs.viewTarget.$el.focus() + }) + }, + + 'viewModel.year' (year) { + this.$emit('navigation', { year, month: this.viewModel.month }) + }, + + 'viewModel.month' (month) { + this.$emit('navigation', { year: this.viewModel.year, month }) + }, + + computedMask (val) { + this.__updateValue(val, this.innerLocale, 'mask') + this.innerMask = val + }, + + computedLocale (val) { + this.__updateValue(this.innerMask, val, 'locale') + this.innerLocale = val + } + }, + + computed: { + classes () { + const type = this.landscape === true ? 'landscape' : 'portrait' + return `q-date q-date--${type} q-date--${type}-${this.minimal === true ? 'minimal' : 'standard'}` + + ` q-date--${this.darkSuffix} q-${this.darkSuffix}` + + (this.bordered === true ? ' q-date--bordered' : '') + + (this.square === true ? ' q-date--square no-border-radius' : '') + + (this.flat === true ? ' q-date--flat no-shadow' : '') + + (this.disable === true ? ' disabled' : (this.readonly === true ? ' q-date--readonly' : '')) + }, + + isImmediate () { + return this.emitImmediately === true && + this.multiple !== true && + this.range !== true + }, + + normalizedModel () { + return Array.isArray(this.value) === true + ? this.value + : (this.value !== null && this.value !== void 0 ? [ this.value ] : []) + }, + + daysModel () { + return this.normalizedModel + .filter(date => typeof date === 'string') + .map(date => this.__decodeString(date, this.innerMask, this.innerLocale)) + .filter(modelIsValid) + }, + + rangeModel () { + const fn = date => this.__decodeString(date, this.innerMask, this.innerLocale) + return this.normalizedModel + .filter(date => isObject(date) === true && date.from !== void 0 && date.to !== void 0) + .map(range => { + const from = fn(range.from) + const to = fn(range.to) + + return hashToInt(from.dateHash) <= hashToInt(to.dateHash) + ? { from, to } + : { from: to, to: from } + }) + .filter(range => modelIsValid(range.from) === true && modelIsValid(range.to) === true) + }, + + getNativeDateFn () { + return this.calendar !== 'persian' + ? model => { + const date = __safeCreateDate(model.year, model.month - 1, model.day) + date.setFullYear(model.year) + return date + } + : model => { + const gDate = toGregorian(model.year, model.month, model.day) + const date = __safeCreateDate(gDate.gy, gDate.gm - 1, gDate.gd) + date.setFullYear(model.year) + return date + } + }, + + encodeObjectFn () { + return this.calendar === 'persian' + ? this.__getDayHash + : (date, mask, locale) => formatDate( + __safeCreateDate( + date.year, + date.month - 1, + date.day, + date.hour, + date.minute, + date.second, + date.millisecond + ), + mask === void 0 ? this.innerMask : mask, + locale === void 0 ? this.innerLocale : locale, + date.year, + date.timezoneOffset + ) + }, + + daysInModel () { + return this.daysModel.length + this.rangeModel.reduce( + (acc, range) => acc + 1 + getDateDiff( + this.getNativeDateFn(range.to), + this.getNativeDateFn(range.from) + ), + 0 + ) + }, + + headerTitle () { + if (this.title !== void 0 && this.title !== null && this.title.length > 0) { + return this.title + } + + if (this.editRange !== void 0) { + const model = this.editRange.init + const date = this.getNativeDateFn(model) + + return this.innerLocale.daysShort[ date.getDay() ] + ', ' + + this.innerLocale.monthsShort[ model.month - 1 ] + ' ' + + model.day + lineStr + '?' + } + + if (this.daysInModel === 0) { + return lineStr + } + + if (this.daysInModel > 1) { + return `${this.daysInModel} ${this.innerLocale.pluralDay}` + } + + const model = this.minSelectedModel + const date = this.getNativeDateFn(model) + + if (isNaN(date.valueOf()) === true) { + return lineStr + } + + if (this.innerLocale.headerTitle !== void 0) { + return this.innerLocale.headerTitle(date, model) + } + + return this.innerLocale.daysShort[ date.getDay() ] + ', ' + + this.innerLocale.monthsShort[ model.month - 1 ] + ' ' + + model.day + }, + + headerSubtitle () { + if (this.subtitle !== void 0 && this.subtitle !== null && this.subtitle.length > 0) { + return this.subtitle + } + + if (this.daysInModel === 0) { + return lineStr + } + + if (this.daysInModel > 1) { + const from = this.minSelectedModel + const to = this.maxSelectedModel + const month = this.innerLocale.monthsShort + + return month[from.month - 1] + ( + from.year !== to.year + ? ' ' + from.year + lineStr + month[to.month - 1] + ' ' + : ( + from.month !== to.month + ? lineStr + month[to.month - 1] + : '' + ) + ) + ' ' + to.year + } + + return this.minSelectedModel.year + }, + + minSelectedModel () { + const model = this.daysModel.concat(this.rangeModel.map(range => range.from)) + .sort((a, b) => a.year - b.year || a.month - b.month) + + return model[0] + }, + + maxSelectedModel () { + const model = this.daysModel.concat(this.rangeModel.map(range => range.to)) + .sort((a, b) => b.year - a.year || b.month - a.month) + + return model[0] + }, + + dateArrow () { + const val = [ this.$q.iconSet.datetime.arrowLeft, this.$q.iconSet.datetime.arrowRight ] + return this.$q.lang.rtl === true ? val.reverse() : val + }, + + computedFirstDayOfWeek () { + return this.firstDayOfWeek !== void 0 + ? Number(this.firstDayOfWeek) + : this.innerLocale.firstDayOfWeek + }, + + daysOfWeek () { + const + days = this.innerLocale.daysShort, + first = this.computedFirstDayOfWeek + + return first > 0 + ? days.slice(first, 7).concat(days.slice(0, first)) + : days + }, + + daysInMonth () { + const { year, month } = this.viewModel + + if (this.calendar !== 'persian') { + return { + prev: (__safeCreateDate(year, month - 1, 0)).getDate(), + cur: (__safeCreateDate(year, month, 0)).getDate(), + next: (__safeCreateDate(year, month + 1, 0)).getDate() + } + } + + return { + prev: jalaaliMonthLength(month === 1 ? year - 1 : year, month === 1 ? 12 : month - 1), + cur: jalaaliMonthLength(year, month), + next: jalaaliMonthLength(month === 12 ? year + 1 : year, month === 12 ? 1 : month + 1) + } + }, + + today () { + return this.__getCurrentDate() + }, + + evtColor () { + return typeof this.eventColor === 'function' + ? this.eventColor + : () => this.eventColor + }, + + minNav () { + if (this.navigationMinYearMonth !== void 0) { + const data = this.navigationMinYearMonth.split('/') + return { year: parseInt(data[0], 10), month: parseInt(data[1], 10) } + } + }, + + maxNav () { + if (this.navigationMaxYearMonth !== void 0) { + const data = this.navigationMaxYearMonth.split('/') + return { year: parseInt(data[0], 10), month: parseInt(data[1], 10) } + } + }, + + navBoundaries () { + const data = { + month: { prev: true, next: true }, + year: { prev: true, next: true } + } + + if (this.minNav !== void 0 && this.minNav.year >= this.viewModel.year) { + data.year.prev = false + if (this.minNav.year === this.viewModel.year && this.minNav.month >= this.viewModel.month) { + data.month.prev = false + } + } + + if (this.maxNav !== void 0 && this.maxNav.year <= this.viewModel.year) { + data.year.next = false + if (this.maxNav.year === this.viewModel.year && this.maxNav.month <= this.viewModel.month) { + data.month.next = false + } + } + + return data + }, + + daysMap () { + const map = {} + + this.daysModel.forEach(entry => { + const hash = this.__getMonthHash(entry) + + if (map[hash] === void 0) { + map[hash] = [] + } + + map[hash].push(entry.day) + }) + + return map + }, + + rangeMap () { + const map = {} + + this.rangeModel.forEach(entry => { + const fromHash = this.__getMonthHash(entry.from) + const toHash = this.__getMonthHash(entry.to) + const toHashInt = hashToInt(toHash) + + if (map[fromHash] === void 0) { + map[fromHash] = [] + } + + map[fromHash].push({ + from: entry.from.day, + to: fromHash === toHash ? entry.to.day : void 0, + range: entry + }) + + if (hashToInt(fromHash) < toHashInt) { + const { year, month } = entry.from + const cur = month < 12 + ? { year, month: month + 1 } + : { year: year + 1, month: 1 } + let hash = this.__getMonthHash(cur) + + while (hashToInt(hash) <= toHashInt) { + if (map[hash] === void 0) { + map[hash] = [] + } + + map[hash].push({ + from: void 0, + to: hash === toHash ? entry.to.day : void 0, + range: entry + }) + + cur.month++ + if (cur.month > 12) { + cur.year++ + cur.month = 1 + } + + hash = this.__getMonthHash(cur) + } + } + }) + + return map + }, + + rangeViewMap () { + if (this.editRange === void 0) { + return {} + } + const map = {} + + const { init, initHash, final, finalHash } = this.editRange + + const [ from, to ] = hashToInt(initHash) <= hashToInt(finalHash) + ? [ init, final ] + : [ final, init ] + + const fromHashInt = hashToInt(this.__getMonthHash(from)) + const toHashInt = hashToInt(this.__getMonthHash(to)) + + const months = [ 'prev', 'cur', 'next' ] + + months.forEach(month => { + const monthHashInt = hashToInt(this.viewMonthHash[month]) + + if (fromHashInt > monthHashInt || toHashInt < monthHashInt) { + return + } + + const view = { + includeFrom: fromHashInt === monthHashInt, + includeTo: toHashInt === monthHashInt + } + + view.from = view.includeFrom ? from.day : 1 + view.to = view.includeTo ? to.day : this.daysInMonth[month] + + map[this.viewMonthHash[month]] = view + }) + + return map + }, + + viewMonthHash () { + const { year, month } = this.viewModel + return { + prev: this.__getMonthHash({ + year: month === 1 ? year - 1 : year, + month: month === 1 ? 12 : month - 1 + }), + cur: this.__getMonthHash({ year, month }), + next: this.__getMonthHash({ + year: month === 12 ? year + 1 : year, + month: month === 12 ? 1 : month + 1 + }) + } + }, + + selectionDaysMap () { + const map = {} + + if (this.options === void 0) { + for (let i = 1; i <= this.daysInMonth.cur; i++) { + map[i] = true + } + + return map + } + + const fn = typeof this.options === 'function' + ? this.options + : date => this.options.includes(date) + + for (let i = 1; i <= this.daysInMonth.cur; i++) { + const dayHash = this.viewMonthHash.cur + '/' + pad(i) + map[i] = fn(dayHash) + } + + return map + }, + + eventDaysMap () { + const map = {} + + if (this.events === void 0) { + for (let i = 1; i <= this.daysInMonth.cur; i++) { + map[i] = false + } + } + else { + const fn = typeof this.events === 'function' + ? this.events + : date => this.events.includes(date) + + for (let i = 1; i <= this.daysInMonth.cur; i++) { + const dayHash = this.viewMonthHash.cur + '/' + pad(i) + map[i] = fn(dayHash) === true && this.evtColor(dayHash) + } + } + + return map + }, + + startFillDays () { + let date + const { year, month } = this.viewModel + + if (this.calendar !== 'persian') { + date = __safeCreateDate(year, month - 1, 1) + } + else { + const gDate = toGregorian(year, month, 1) + date = __safeCreateDate(gDate.gy, gDate.gm - 1, gDate.gd) + } + + const days = date.getDay() - this.computedFirstDayOfWeek - 1 + + return { + days: days < 0 ? days + 7 : days, + endDay: this.daysInMonth.prev + } + }, + + days () { + const res = [] + const { days, endDay } = this.startFillDays + + if (days < 6) { + for (let i = endDay - days; i <= endDay; i++) { + res.push({ i, day: this.viewMonthHash.prev + '/' + pad(i), fill: true }) + } + + this.__fillDaysMeta(res, this.viewMonthHash.prev, endDay, -endDay + days + 1, endDay - days, endDay) + } + + const index = res.length + + for (let i = 1; i <= this.daysInMonth.cur; i++) { + const day = { i, day: this.viewMonthHash.cur + '/' + pad(i), event: this.eventDaysMap[i], classes: [] } + + if (this.selectionDaysMap[i] === true) { + day.in = true + day.flat = true + } + + res.push(day) + } + + this.__fillDaysMeta(res, this.viewMonthHash.cur, this.daysInMonth.cur, index, 1, this.daysInMonth.cur) + + if (this.viewModel.year === this.today.year && this.viewModel.month === this.today.month) { + res[index + this.today.day - 1].today = true + } + + const left = res.length % 7 + if (left > 0) { + const afterDays = 7 - left + for (let i = 1; i <= afterDays; i++) { + res.push({ i, day: this.viewMonthHash.next + '/' + pad(i), fill: true }) + } + + this.__fillDaysMeta(res, this.viewMonthHash.next, this.daysInMonth.next, index + this.daysInMonth.cur, 1, afterDays) + } + + res.forEach(day => { + let cls = 'q-date__calendar-item ' + + cls += day.fill === true + ? 'q-date__calendar-item--fill' + : `q-date__calendar-item--${day.in === true ? 'in' : 'out'}` + + if (day.range !== void 0 || day.editRange === true) { + cls += ` text-${day.color}` + } + + if (day.range !== void 0 && (day.rangeTo !== true || day.rangeFrom !== true)) { + cls += ` q-date__range${day.rangeFrom === true ? '-from' : (day.rangeTo === true ? '-to' : '')}` + } + + if (day.editRange === true) { + cls += ` q-date__edit-range${day.editRangeFrom === true ? '-from' : ''}${day.editRangeTo === true ? '-to' : ''}` + } + + day.classes = cls + }) + + return res + }, + + attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + } + }, + + methods: { + setToday () { + this.__toggleDate(this.today, this.__getMonthHash(this.today)) + this.setCalendarTo(this.today.year, this.today.month) + }, + + setView (view) { + if (viewIsValid(view) === true) { + this.view = view + } + }, + + offsetCalendar (type, descending) { + if (['month', 'year'].includes(type)) { + this[`__goTo${type === 'month' ? 'Month' : 'Year'}`]( + descending === true ? -1 : 1 + ) + } + }, + + setCalendarTo (year, month) { + this.view = 'Calendar' + this.__updateViewModel(year, month) + }, + + setEditingRange (from, to, modelNavigation) { + if (modelNavigation === void 0) { + modelNavigation = this.modelNavigation + } + + if (this.range === false || !from) { + this.editRange = void 0 + return + } + + const init = Object.assign({ ...this.viewModel }, from) + const final = to !== void 0 + ? Object.assign({ ...this.viewModel }, to) + : init + + this.editRange = { + init, + initHash: this.__getDayHash(init), + final, + finalHash: this.__getDayHash(final) + } + + if ([ 'from', 'to' ].indexOf(modelNavigation) > -1) { + this.$nextTick(() => { + this.setCalendarTo( + modelNavigation === 'from' ? init.year : final.year, + modelNavigation === 'from' ? init.month : final.month + ) + }) + } + }, + + __getMask () { + return this.calendar === 'persian' ? 'YYYY/MM/DD' : this.mask + }, + + __decodeString (date, mask, locale) { + return __splitDate( + date, + mask, + locale, + this.calendar, + { + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + } + ) + }, + + __getViewModel (mask, locale) { + if (this.modelNavigation === false) { + return this.viewModel === void 0 + ? this.__getDefaultViewModel() + : this.viewModel + } + + const model = Array.isArray(this.value) === true + ? this.value + : (this.value ? [ this.value ] : []) + + if (model.length === 0) { + return this.__getDefaultViewModel() + } + + const target = model[this.modelNavigation === 'from' ? 0 : model.length - 1] + + const decoded = this.__decodeString( + target.from !== void 0 ? target.from : target, + mask, + locale + ) + + return decoded.dateHash === null + ? this.__getDefaultViewModel() + : decoded + }, + + __getDefaultViewModel () { + let year, month + + if (this.defaultYearMonth !== void 0) { + const d = this.defaultYearMonth.split('/') + year = parseInt(d[0], 10) + month = parseInt(d[1], 10) + } + else { + // may come from data() where computed + // props are not yet available + const d = this.today !== void 0 + ? this.today + : this.__getCurrentDate() + + year = d.year + month = d.month + } + + return { + year, + month, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + dateHash: year + '/' + pad(month) + '/01' + } + }, + + __getHeader (h) { + if (this.minimal === true) { return } + + return h('div', { + staticClass: 'q-date__header', + class: this.headerClass + }, [ + h('div', { + staticClass: 'relative-position' + }, [ + h('transition', { + props: { + name: 'q-transition--fade' + } + }, [ + h('div', { + key: 'h-yr-' + this.headerSubtitle, + staticClass: 'q-date__header-subtitle q-date__header-link', + class: this.view === 'Years' ? 'q-date__header-link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'vY', { + click: () => { this.view = 'Years' }, + keyup: e => { e.keyCode === 13 && (this.view = 'Years') } + }) + }, [ this.headerSubtitle ]) + ]) + ]), + + h('div', { + staticClass: 'q-date__header-title relative-position flex no-wrap' + }, [ + h('div', { + staticClass: 'relative-position col' + }, [ + h('transition', { + props: { + name: 'q-transition--fade' + } + }, [ + h('div', { + key: 'h-sub' + this.headerTitle, + staticClass: 'q-date__header-title-label q-date__header-link', + class: this.view === 'Calendar' ? 'q-date__header-link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'vC', { + click: () => { this.view = 'Calendar' }, + keyup: e => { e.keyCode === 13 && (this.view = 'Calendar') } + }) + }, [ this.headerTitle ]) + ]) + ]), + + this.todayBtn === true ? h(QBtn, { + key: 'today', + staticClass: 'q-date__header-today self-start', + props: { + icon: this.$q.iconSet.datetime.today, + flat: true, + size: 'sm', + round: true, + tabindex: this.computedTabindex + }, + on: cache(this, 'today', { click: this.setToday }) + }) : null + ]) + ]) + }, + + __getNavigation (h, { label, view, key, dir, goTo, boundaries, cls }) { + return [ + h('div', { + staticClass: 'row items-center q-date__arrow' + }, [ + h(QBtn, { + key: 'go-#' + view, + props: { + round: true, + dense: true, + size: 'sm', + flat: true, + icon: this.dateArrow[0], + tabindex: this.computedTabindex, + disable: boundaries.prev === false + }, + on: cache(this, 'go-#' + view, { click () { goTo(-1) } }) + }) + ]), + + h('div', { + staticClass: 'relative-position overflow-hidden flex flex-center' + cls + }, [ + h('transition', { + props: { + name: 'q-transition--jump-' + dir + } + }, [ + h('div', { key }, [ + h(QBtn, { + key: 'view#' + view, + props: { + flat: true, + dense: true, + noCaps: true, + label, + tabindex: this.computedTabindex + }, + on: cache(this, 'view#' + view, { click: () => { this.view = view } }) + }) + ]) + ]) + ]), + + h('div', { + staticClass: 'row items-center q-date__arrow' + }, [ + h(QBtn, { + key: 'go+#' + view, + props: { + round: true, + dense: true, + size: 'sm', + flat: true, + icon: this.dateArrow[1], + tabindex: this.computedTabindex, + disable: boundaries.next === false + }, + on: cache(this, 'go+#' + view, { click () { goTo(1) } }) + }) + ]) + ] + }, + + __getCalendarView (h) { + const dayContentFn = this.$scopedSlots.day !== void 0 + ? this.$scopedSlots.day + : day => (day.event !== false ? [ + h('div', { staticClass: 'q-date__event bg-' + day.event }) + ] : null) + const dayFillContentFn = this.$scopedSlots.day !== void 0 + ? this.$scopedSlots.day + : day => h('div', [ day.i ]) + + const selectedDay = this.days.find(day => day.unelevated === true) + const viewDay = selectedDay === void 0 ? this.days.find(day => day.today === true) : selectedDay + const viewTarget = viewDay === void 0 ? 1 : viewDay.i + const calCachePrefix = this.calendar === 'persian' ? 'dayP#' : 'day#' + + return [ + h('div', { + key: 'calendar-view', + staticClass: 'q-date__view q-date__calendar' + }, [ + h('div', { + staticClass: 'q-date__navigation row items-center no-wrap' + }, this.__getNavigation(h, { + label: this.innerLocale.months[ this.viewModel.month - 1 ], + view: 'Months', + key: this.viewModel.month, + dir: this.monthDirection, + goTo: this.__goToMonth, + boundaries: this.navBoundaries.month, + cls: ' col' + }).concat(this.__getNavigation(h, { + label: this.viewModel.year, + view: 'Years', + key: this.viewModel.year, + dir: this.yearDirection, + goTo: this.__goToYear, + boundaries: this.navBoundaries.year, + cls: '' + }))), + + h('div', { + staticClass: 'q-date__calendar-weekdays row items-center no-wrap' + }, this.daysOfWeek.map(day => h('div', { staticClass: 'q-date__calendar-item' }, [ h('div', [ day ]) ]))), + + h('div', { + key: 'kNavC', + staticClass: 'q-date__calendar-days-container relative-position overflow-hidden', + directives: cache(this, 'kNavC', [{ + name: 'key-group-navigation', + arg: '7' + }]) + }, [ + h('transition', { + props: { + name: 'q-transition--slide-' + this.monthDirection + } + }, [ + h('div', { + key: this.viewMonthHash.cur, + staticClass: 'q-date__calendar-days fit' + }, this.days.map(day => h('div', { staticClass: day.classes }, [ + day.in === true + ? h(QBtn, { + key: calCachePrefix + day.i, + staticClass: day.today === true ? 'q-date__today' : null, + ref: viewTarget === day.i ? 'viewTarget' : void 0, + props: { + dense: true, + flat: day.flat, + unelevated: day.unelevated, + color: day.color, + textColor: day.textColor, + label: day.i, + tabindex: this.computedTabindex + }, + on: cache(this, calCachePrefix + day.i, { + click: () => { this.__onDayClick(day.i) }, + focusin: () => { this.__onDayMouseover(day.i) }, + mouseenter: () => { this.__onDayMouseover(day.i) } + }) + }, dayContentFn(day)) + : dayFillContentFn(day) + ]))) + ]) + ]) + ]) + ] + }, + + __getMonthsView (h) { + const currentYear = this.viewModel.year === this.today.year + const isDisabled = month => { + return ( + (this.minNav !== void 0 && this.viewModel.year === this.minNav.year && this.minNav.month > month) || + (this.maxNav !== void 0 && this.viewModel.year === this.maxNav.year && this.maxNav.month < month) + ) + } + const activeProps = { + unelevated: true, + color: this.computedColor, + textColor: this.computedTextColor + } + const inactiveProps = { flat: true } + + const content = this.innerLocale.monthsShort.map((month, i) => { + return h('div', { + staticClass: 'q-date__months-item flex flex-center' + }, [ + h(QBtn, { + key: 'month#' + i, + staticClass: currentYear === true && this.today.month === i + 1 ? 'q-date__today' : null, + ref: this.viewModel.month === i + 1 ? 'viewTarget' : void 0, + props: Object.assign( + { + label: month, + tabindex: this.computedTabindex, + disable: isDisabled(i + 1) + }, + this.viewModel.month === i + 1 + ? activeProps + : inactiveProps + ), + on: cache(this, 'month#' + i, { click: () => { this.__setMonth(i + 1) } }) + }) + ]) + }) + + this.yearsInMonthView === true && content.unshift( + h('div', { staticClass: 'row no-wrap full-width' }, [ + this.__getNavigation(h, { + label: this.viewModel.year, + view: 'Years', + key: this.viewModel.year, + dir: this.yearDirection, + goTo: this.__goToYear, + boundaries: this.navBoundaries.year, + cls: ' col' + }) + ]) + ) + + return h('div', { + key: 'kNavYM', + staticClass: 'q-date__view q-date__months flex flex-center', + directives: cache(this, 'kNavYM', [{ + name: 'key-group-navigation', + arg: '3' + }]) + }, content) + }, + + __getYearsView (h) { + const + start = this.startYear, + stop = start + yearsInterval, + years = [], + viewTarget = this.viewModel.year >= start && this.viewModel.year <= stop + ? this.viewModel.year + : ( + this.today.year >= start && this.today.year <= stop + ? this.today.year + : start + ) + + const isDisabled = year => { + return ( + (this.minNav !== void 0 && this.minNav.year > year) || + (this.maxNav !== void 0 && this.maxNav.year < year) + ) + } + + for (let i = start; i <= stop; i++) { + const active = this.viewModel.year === i + + years.push( + h('div', { + staticClass: 'q-date__years-item flex flex-center' + }, [ + h(QBtn, { + key: 'yr#' + i, + staticClass: this.today.year === i ? 'q-date__today' : null, + ref: viewTarget === i ? 'viewTarget' : void 0, + props: { + flat: active !== true, + label: i, + dense: true, + unelevated: active, + color: active === true ? this.computedColor : null, + textColor: active === true ? this.computedTextColor : null, + tabindex: this.computedTabindex, + disable: isDisabled(i) + }, + on: cache(this, 'yr#' + i, { click: () => { this.__setYear(i) } }) + }) + ]) + ) + } + + return h('div', { + staticClass: 'q-date__view q-date__years flex flex-center' + }, [ + h('div', { + staticClass: 'col-auto' + }, [ + h(QBtn, { + key: 'y-', + props: { + round: true, + dense: true, + flat: true, + icon: this.dateArrow[0], + tabindex: this.computedTabindex, + disable: isDisabled(start) + }, + on: cache(this, 'y-', { click: () => { this.startYear -= yearsInterval } }) + }) + ]), + + h('div', { + key: 'kNavYM', + staticClass: 'q-date__years-content col self-stretch row items-center', + directives: cache(this, 'kNavYM', [{ + name: 'key-group-navigation', + arg: '3' + }]) + }, years), + + h('div', { + staticClass: 'col-auto' + }, [ + h(QBtn, { + key: 'y+', + props: { + round: true, + dense: true, + flat: true, + icon: this.dateArrow[1], + tabindex: this.computedTabindex, + disable: isDisabled(stop) + }, + on: cache(this, 'y+', { click: () => { this.startYear += yearsInterval } }) + }) + ]) + ]) + }, + + __fillDaysMeta (res, monthHash, daysInMonth, index, dayFrom, dayTo) { + // if current view has days in model + if (this.daysMap[monthHash] !== void 0) { + this.daysMap[monthHash] + .filter(day => day >= dayFrom && day <= dayTo) + .forEach(day => { + const i = index + day - 1 + Object.assign(res[i], { + selected: true, + unelevated: true, + flat: false, + color: this.computedColor, + textColor: this.computedTextColor + }) + }) + } + + // if current view has ranges in model + if (this.rangeMap[monthHash] !== void 0) { + this.rangeMap[monthHash].forEach(entry => { + const from = index + Math.max(dayFrom, entry.from === void 0 ? 1 : entry.from) - 1 + const to = index + Math.min(dayTo, entry.to === void 0 ? daysInMonth : entry.to) - 1 + + for (let day = from; day <= to; day++) { + Object.assign(res[day], { + range: entry.range, + unelevated: true, + color: this.computedColor, + textColor: this.computedTextColor + }) + } + + if (entry.from >= dayFrom && entry.from <= dayTo) { + Object.assign(res[from], { + rangeFrom: true, + flat: false + }) + } + + if (entry.to >= dayFrom && entry.to <= dayTo) { + Object.assign(res[to], { + rangeTo: true, + flat: false + }) + } + }) + } + + if (this.rangeViewMap[monthHash] !== void 0) { + const from = index + Math.max(dayFrom, this.rangeViewMap[monthHash].from) - 1 + const to = index + Math.min(dayTo, this.rangeViewMap[monthHash].to) - 1 + + for (let day = from; day <= to; day++) { + res[day].color = this.computedColor + res[day].editRange = true + } + + if ( + this.rangeViewMap[monthHash].includeFrom === true && + this.rangeViewMap[monthHash].from >= dayFrom && + this.rangeViewMap[monthHash].from <= dayTo + ) { + res[from].editRangeFrom = true + } + + if ( + this.rangeViewMap[monthHash].includeTo === true && + this.rangeViewMap[monthHash].to >= dayFrom && + this.rangeViewMap[monthHash].to <= dayTo + ) { + res[to].editRangeTo = true + } + } + }, + + __goToMonth (offset) { + let year = this.viewModel.year + let month = Number(this.viewModel.month) + offset + + if (month === 13) { + month = 1 + year++ + } + else if (month === 0) { + month = 12 + year-- + } + + this.__updateViewModel(year, month) + this.isImmediate === true && this.__emitImmediately('month') + }, + + __goToYear (offset) { + const year = Number(this.viewModel.year) + offset + this.__updateViewModel(year, this.viewModel.month) + this.isImmediate === true && this.__emitImmediately('year') + }, + + __setYear (year) { + this.__updateViewModel(year, this.viewModel.month) + this.view = this.defaultView === 'Years' ? 'Months' : 'Calendar' + this.isImmediate === true && this.__emitImmediately('year') + }, + + __setMonth (month) { + this.__updateViewModel(this.viewModel.year, month) + this.view = 'Calendar' + this.isImmediate === true && this.__emitImmediately('month') + }, + + __getMonthHash (date) { + return date.year + '/' + pad(date.month) + }, + + __toggleDate (date, monthHash) { + const month = this.daysMap[monthHash] + const fn = month !== void 0 && month.includes(date.day) === true + ? this.__removeFromModel + : this.__addToModel + + fn(date) + }, + + __getShortDate (date) { + return { year: date.year, month: date.month, day: date.day } + }, + + __onDayClick (dayIndex) { + const day = { ...this.viewModel, day: dayIndex } + + if (this.range === false) { + this.__toggleDate(day, this.viewMonthHash.cur) + return + } + + if (this.editRange === void 0) { + const dayProps = this.days.find(day => day.fill !== true && day.i === dayIndex) + + if (this.noUnset !== true && dayProps.range !== void 0) { + this.__removeFromModel({ target: day, from: dayProps.range.from, to: dayProps.range.to }) + return + } + + if (dayProps.selected === true) { + this.__removeFromModel(day) + return + } + + const initHash = this.__getDayHash(day) + + this.editRange = { + init: day, + initHash, + final: day, + finalHash: initHash + } + + this.$emit('range-start', this.__getShortDate(day)) + } + else { + const + initHash = this.editRange.initHash, + finalHash = this.__getDayHash(day), + payload = hashToInt(initHash) <= hashToInt(finalHash) + ? { from: this.editRange.init, to: day } + : { from: day, to: this.editRange.init } + + this.editRange = void 0 + this.__addToModel(initHash === finalHash && this.dayAsRange !== true ? day : { target: day, ...payload }) + + this.$emit('range-end', { + from: this.__getShortDate(payload.from), + to: this.__getShortDate(payload.to) + }) + } + }, + + __onDayMouseover (dayIndex) { + if (this.editRange !== void 0) { + const final = { ...this.viewModel, day: dayIndex } + + Object.assign(this.editRange, { + final, + finalHash: this.__getDayHash(final) + }) + + this.$emit('range-change', { + from: this.__getShortDate(this.editRange.init), + to: this.__getShortDate(this.editRange.final) + }) + } + }, + + __updateViewModel (year, month) { + year = parseInt(year, 10) + month = parseInt(month, 10) + + if (this.minNav !== void 0 && year <= this.minNav.year) { + year = this.minNav.year + if (month < this.minNav.month) { + month = this.minNav.month + } + } + + if (this.maxNav !== void 0 && year >= this.maxNav.year) { + year = this.maxNav.year + if (month > this.maxNav.month) { + month = this.maxNav.month + } + } + + const newHash = year + '/' + pad(month) + '/01' + + if (newHash !== this.viewModel.dateHash) { + this.monthDirection = (hashToInt(this.viewModel.dateHash) < hashToInt(newHash)) === (this.$q.lang.rtl !== true) ? 'left' : 'right' + if (year !== this.viewModel.year) { + this.yearDirection = this.monthDirection + } + + this.$nextTick(() => { + this.startYear = year - year % yearsInterval - (year < 0 ? yearsInterval : 0) + Object.assign(this.viewModel, { + year, + month, + day: 1, + dateHash: newHash + }) + }) + } + }, + + __emitValue (val, action, date) { + const value = val !== null && val.length === 1 && this.multiple === false + ? val[0] + : val + + this.lastEmitValue = value + + const { reason, details } = this.__getEmitParams(action, date) + this.$emit('input', value, reason, details) + }, + + __emitImmediately (reason) { + const date = this.daysModel[0] !== void 0 && modelIsValid(this.daysModel[0]) === true + ? { ...this.daysModel[0] } + : { ...this.viewModel } // inherit day, hours, minutes, milliseconds... + + // nextTick required because of animation delay in viewModel + this.$nextTick(() => { + date.year = this.viewModel.year + date.month = this.viewModel.month + + const maxDay = this.calendar !== 'persian' + ? (__safeCreateDate(date.year, date.month, 0)).getDate() + : jalaaliMonthLength(date.year, date.month) + + date.day = Math.min(Math.max(1, date.day), maxDay) + + const value = this.__encodeEntry(date) + this.lastEmitValue = value + + const { details } = this.__getEmitParams('', date) + this.$emit('input', value, reason, details) + }) + }, + + __getEmitParams (action, date) { + return date.from !== void 0 + ? { + reason: `${action}-range`, + details: { + ...this.__getShortDate(date.target), + from: this.__getShortDate(date.from), + to: this.__getShortDate(date.to), + changed: true // TODO remove in v2; legacy purposes + } + } + : { + reason: `${action}-day`, + details: { + ...this.__getShortDate(date), + changed: true // TODO remove in v2; legacy purposes + } + } + }, + + __encodeEntry (date, mask, locale) { + return date.from !== void 0 + ? { from: this.encodeObjectFn(date.from, mask, locale), to: this.encodeObjectFn(date.to, mask, locale) } + : this.encodeObjectFn(date, mask, locale) + }, + + __addToModel (date) { + let value + + if (this.multiple === true) { + if (date.from !== void 0) { + // we also need to filter out intersections + + const fromHashInt = hashToInt(this.__getDayHash(date.from)) + const toHashInt = hashToInt(this.__getDayHash(date.to)) + + const days = this.daysModel + .filter(day => { + const dayHashInt = hashToInt(day.dateHash) + + return dayHashInt < fromHashInt || dayHashInt > toHashInt + }) + + const ranges = this.rangeModel + .filter(({ from, to }) => hashToInt(to.dateHash) < fromHashInt || hashToInt(from.dateHash) > toHashInt) + + value = days.concat(ranges).concat(date).map(entry => this.__encodeEntry(entry)) + } + else { + const model = this.normalizedModel.slice() + model.push(this.__encodeEntry(date)) + value = model + } + } + else { + value = this.__encodeEntry(date) + } + + this.__emitValue(value, 'add', date) + }, + + __removeFromModel (date) { + if (this.noUnset === true) { + return + } + + let model = null + + if (this.multiple === true && Array.isArray(this.value) === true) { + const val = this.__encodeEntry(date) + + if (date.from !== void 0) { + model = this.value.filter(date => date.from !== void 0 + ? (date.from !== val.from && date.to !== val.to) + : true + ) + } + else { + model = this.value.filter(date => date !== val) + } + + if (model.length === 0) { + model = null + } + } + + this.__emitValue(model, 'remove', date) + }, + + __updateValue (mask, locale, reason) { + const model = this.daysModel + .concat(this.rangeModel) + .map(entry => this.__encodeEntry(entry, mask, locale)) + .filter(entry => entry.from !== void 0 + ? modelIsValid(entry.from) === true && modelIsValid(entry.to) === true + : modelIsValid(entry) + ) + + this.$emit('input', (this.multiple === true ? model : model[0]) || null, reason) + } + }, + + render (h) { + const content = [ + h('div', { + staticClass: 'q-date__content col relative-position' + }, [ + h('transition', { + props: { name: 'q-transition--fade' } + }, [ + this[`__get${this.view}View`](h) + ]) + ]) + ] + + const def = slot(this, 'default') + def !== void 0 && content.push( + h('div', { staticClass: 'q-date__actions' }, def) + ) + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(content, 'push') + } + + return h('div', { + class: this.classes, + attrs: this.attrs, + directives: [ KeyGroupNavigation ], + on: { ...this.qListeners } + }, [ + this.__getHeader(h), + + h('div', { staticClass: 'q-date__main col column' }, content) + ]) + } +}) diff --git a/src/components/date/QDate.json b/src/components/date/QDate.json new file mode 100644 index 00000000000..e34a7570cc2 --- /dev/null +++ b/src/components/date/QDate.json @@ -0,0 +1,667 @@ +{ + "mixins": [ "mixins/datetime" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/date" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "extends": "value", + "type": [ "String", "Array", "Object" ], + "required": true, + "desc": "Date(s) of the component; Must be Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ + "v-model=\"myDate\"", + "v-model=\"[myDate1, myDate2]\"", + "v-model=\"[{ from: myDateFrom, to: myDateTo }]\"", + "v-model=\"[myDate1, { from: myDateFrom, to: myDateTo }, myDate2]\"" + ], + "category": "model" + }, + + "title": { + "type": "String", + "desc": "When specified, it overrides the default header title; Makes sense when not in 'minimal' mode", + "examples": [ "Birthday" ], + "category": "content" + }, + + "subtitle": { + "type": "String", + "desc": "When specified, it overrides the default header subtitle; Makes sense when not in 'minimal' mode", + "examples": [ "John Doe" ], + "category": "content" + }, + + "default-year-month": { + "type": "String", + "desc": "The default year and month to display (in YYYY/MM format) when model is unfilled (undefined or null); Please ensure it is within the navigation min/max year-month (if using them)", + "examples": [ "1986/02" ], + "category": "model" + }, + + "mask": { + "default": "YYYY/MM/DD", + "examples": [ "YYYY-MM-DD", "MMMM Do, YYYY", "YYYY-MM-DD HH:mm:ss" ] + }, + + "default-view": { + "type": "String", + "desc": "The view which will be displayed by default", + "default": "Calendar", + "values": [ "Calendar", "Months", "Years" ], + "category": "model" + }, + + "years-in-month-view": { + "type": "Boolean", + "desc": "Show the years selector in months view", + "category": "behavior", + "addedIn": "v1.11.2" + }, + + "events": { + "type": [ "Array", "Function" ], + "desc": "A list of events to highlight on the calendar; If using a function, it receives the date as a String and must return a Boolean (matches or not); If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ + ":events=\"['2018/11/05', '2018/11/06', '2018/11/09', '2018/11/23']\"", + ":events=\"date => date[9] % 3 === 0\"" + ], + "category": "model" + }, + + "event-color": { + "type": [ "String", "Function" ], + "desc": "Color name (from the Quasar Color Palette); If using a function, it receives the date as a String and must return a String (color for the received date); If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ + "teal-10", + ":event-color=\"(date) => date[9] % 2 === 0 ? 'teal' : 'orange'\"" + ], + "category": "style" + }, + + "options": { + "type": [ "Array", "Function" ], + "desc": "Optionally configure the days that are selectable; If using a function, it receives the date as a String and must return a Boolean (is date acceptable or not); If using a function then for best performance, reference it from your scope and do not define it inline; Incompatible with 'range' prop", + "examples": [ + ":options=\"['2018/11/05', '2018/11/12', '2018/11/19', '2018/11/26' ]\"", + ":options=\"date => date[9] % 3 === 0\"", + ":options=\"date => date >= '2018/11/03' && date <= '2018/11/15'\"" + ], + "category": "model" + }, + + "model-navigation": { + "type": [ "String", "Boolean" ], + "desc": "On which end of the range to navigate the calendar when the model changes; Use `false` to skip navigation", + "values": [ "from", "to", "(Boolean) false" ], + "default": "from", + "category": "behavior", + "addedIn": "v1.14.8" + }, + + "navigation-min-year-month": { + "type": "String", + "desc": "Lock user from navigating below a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop", + "examples": [ "2020/07" ], + "category": "selection", + "addedIn": "v1.13" + }, + + "navigation-max-year-month": { + "type": "String", + "desc": "Lock user from navigating above a specific year+month (in YYYY/MM format); This prop is not used to correct the model; You might want to also use 'default-year-month' prop", + "examples": [ "2020/10" ], + "category": "selection", + "addedIn": "v1.13" + }, + + "no-unset": { + "type": "Boolean", + "desc": "Remove ability to unselect a date; It does not apply to selecting a range over already selected dates", + "category": "selection", + "addedIn": "v1.13.2" + }, + + "first-day-of-week": { + "type": [ "String", "Number" ], + "desc": "Sets the day of the week that is considered the first day (0 - Sunday, 1 - Monday, ...); This day will show in the left-most column of the calendar", + "default": "(based on configured Quasar lang language)", + "examples": [ + "first-day-of-week=\"1\"", + ":first-day-of-week=\"selectedFirstDayOfTheWeek\"" + ], + "category": "model" + }, + + "today-btn": { + "type": "Boolean", + "desc": "Display a button that selects the current day", + "category": "content" + }, + + "minimal": { + "type": "Boolean", + "desc": "Don’t display the header", + "category": "content" + }, + + "multiple": { + "type": "Boolean", + "desc": "Allow multiple selection; Model must be Array", + "category": "model|selection", + "addedIn": "v1.13" + }, + + "range": { + "type": "Boolean", + "desc": "Allow range selection; Partial compatibility with 'options' prop: selected ranges might also include 'unselectable' days", + "category": "model|selection", + "addedIn": "v1.13" + }, + + "day-as-range": { + "type": "Boolean", + "desc": "Model single days as a range (object) instead of string", + "category": "model|selection", + "addedIn": "v1.15.2" + }, + + "emit-immediately": { + "type": "Boolean", + "desc": "Emit model when user browses month and year too; ONLY for single selection (non-multiple, non-range)", + "category": "model" + } + }, + + "slots": { + "default": { + "desc": "This is where additional buttons can go", + "addedIn": "v1.2.8" + } + }, + + "scopedSlots": { + "day": { + "desc": "Override default day content slot; Suggestion: tooltips and / or multiple event markers", + "scope": { + "i": { + "type": "Number", + "desc": "The day number in month", + "examples": [ 23 ] + }, + "day": { + "type": "String", + "desc": "Full date in YYYY/MM/DD form", + "examples": [ "2020/05/20" ] + }, + "fill": { + "type": "Boolean", + "desc": "The day does not belong to the currently displayed month / year (no QBtn and hidden by default)" + }, + "in": { + "type": "Boolean", + "desc": "The day is selectable (QBtn is not disabled)" + }, + "today": { + "type": "Boolean", + "desc": "The day is today" + }, + "selected": { + "type": "Boolean", + "desc": "The day is selected" + }, + "unelevated": { + "type": "Boolean", + "desc": "The day is selected" + }, + "flat": { + "type": "Boolean", + "desc": "The day is not selected" + }, + "classes": { + "type": "String", + "desc": "The classes applied to the day", + "__exemption": "examples" + }, + "color": { + "type": "String", + "desc": "The color of the QBtn used for the day", + "examples": [ "primary" ] + }, + "textColor": { + "type": "String", + "desc": "The text color of the QBtn used for the day", + "examples": [ "orange-2" ] + }, + "event": { + "type": [ "Boolean", "String", "Any" ], + "desc": "Boolean false if there is no event for the day; The event-color or the value returned by the event-color function", + "examples": [ "red" ] + }, + "range": { + "type": "Object", + "desc": "The range this day belongs to", + "definition": { + "from": { + "type": "Object", + "desc": "Object of properties of the range starting point (only if range)", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ + "examples" + ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ + "examples" + ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ + "examples" + ] + } + } + }, + "to": { + "type": "Object", + "desc": "Object of properties of the range ending point (only if range)", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ + "examples" + ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ + "examples" + ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ + "examples" + ] + } + } + } + } + } + }, + "addedIn": "v1.14.8" + } + }, + + "events": { + "input": { + "extends": "input", + "params": { + "value": { + "type": [ "String", "Array", "Object" ] + }, + "reason": { + "type": "String", + "desc": "Reason of the user interaction (what was picked)", + "values": [ "add-day", "remove-day", "add-range", "remove-range", "mask", "locale", "year", "month" ] + }, + "details": { + "type": "Object", + "desc": "Object of properties on the new model", + "definition": { + "year": { + "type": "Number", + "desc": "The year of the date that the user has clicked/tapped on", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month of the date that the user has clicked/tapped on", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of the month that the user has clicked/tapped on", + "__exemption": [ "examples" ] + }, + "from": { + "type": "Object", + "desc": "Object of properties of the range starting point (only if range)", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + }, + "addedIn": "v1.13" + }, + "to": { + "type": "Object", + "desc": "Object of properties of the range ending point (only if range)", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + }, + "addedIn": "v1.13" + }, + "changed": { + "type": "Boolean", + "desc": "(DEPRECATED from v1.13) Did the model change?", + "addedIn": "v1.1.1" + } + } + } + } + }, + + "navigation": { + "desc": "Emitted when user navigates to a different month or year (and even when the model changes from an outside source)", + "params": { + "view": { + "type": "Object", + "desc": "Definition of the current view (year, month)", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + } + } + } + }, + "addedIn": "v1.13" + }, + + "range-start": { + "desc": "User has started a range selection", + "params": { + "from": { + "type": "Object", + "desc": "Definition of date from where the range begins", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + } + } + }, + "addedIn": "v1.13" + }, + + "range-change": { + "desc": "User has changed a range selection", + "params": { + "range": { + "type": "Object", + "desc": "Definition of the range", + "definition": { + "from": { + "type": "Object", + "desc": "Definition of date from where the range begins", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + } + }, + "to": { + "type": "Object", + "desc": "Definition of date to where the range ends", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + } + } + } + } + }, + "addedIn": "v1.14.8" + }, + + "range-end": { + "desc": "User has ended a range selection", + "params": { + "range": { + "type": "Object", + "desc": "Definition of the range", + "definition": { + "from": { + "type": "Object", + "desc": "Definition of date from where the range begins", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + } + }, + "to": { + "type": "Object", + "desc": "Definition of date to where the range ends", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + } + } + } + } + }, + "addedIn": "v1.13" + } + }, + + "methods": { + "setToday": { + "desc": "Change model to today", + "addedIn": "v1.1.7" + }, + + "setView": { + "desc": "Change current view", + "params": { + "view": { + "type": "String", + "desc": "QDate view name", + "required": true, + "values": [ "Calendar", "Months", "Years" ] + } + }, + "addedIn": "v1.1.7" + }, + + "offsetCalendar": { + "desc": "Increment or decrement calendar view's month or year", + "params": { + "type": { + "type": "String", + "required": true, + "desc": "What to increment/decrement", + "values": [ "month", "year" ] + }, + "descending": { + "type": "Boolean", + "desc": "Decrement?" + } + }, + "addedIn": "v1.1.7" + }, + + "setCalendarTo": { + "desc": "Change current year and month of the Calendar view; It gets corrected if using navigation-min/max-year-month and sets the current view to Calendar", + "params": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + } + }, + "addedIn": "v1.13" + }, + + "setEditingRange": { + "desc": "Configure the current editing range", + "params": { + "from": { + "type": "Object", + "desc": "Definition of date from where the range begins", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + } + }, + "to": { + "type": "Object", + "desc": "Definition of date to where the range ends", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of month", + "__exemption": [ "examples" ] + } + } + }, + "modelNavigation": { + "type": [ "String", "Boolean" ], + "desc": "On which end of the range to navigate the calendar; Use `false` to skip navigation", + "values": [ "from", "to", "(Boolean) false" ], + "default": "from", + "addedIn": "v1.14.8" + } + } + } + } +} diff --git a/src/components/date/QDate.sass b/src/components/date/QDate.sass new file mode 100644 index 00000000000..ef4ece6da2c --- /dev/null +++ b/src/components/date/QDate.sass @@ -0,0 +1,269 @@ +.q-date + display: inline-flex + box-shadow: $shadow-2 + border-radius: $generic-border-radius + background: $light-page + background: var(--q-color-light-page) + width: 290px + min-width: 290px + max-width: 100% + + &--bordered + border: 1px solid $separator-color + + &__header + border-top-left-radius: inherit + color: $dark-text + color: var(--q-color-dark-text) + background-color: $primary + background-color: var(--q-color-primary) + padding: 16px + + &__actions + padding: 0 16px 16px + + &__content .q-btn + font-weight: normal + + &__header-link + opacity: .64 + outline: 0 + transition: opacity .3s ease-out + &--active, &:hover, &:focus + opacity: 1 + + &__header-subtitle + font-size: 14px + line-height: 1.75 + letter-spacing: .00938em + + &__header-title-label + font-size: 24px + line-height: 1.2 + letter-spacing: .00735em + + &__view + height: 100% + width: 100% + min-height: 290px + padding: 16px + + &__navigation + height: 12.5% + + > div:first-child + width: 8% + min-width: 24px + justify-content: flex-end + > div:last-child + width: 8% + min-width: 24px + justify-content: flex-start + + &__calendar-weekdays + height: 12.5% + > div + opacity: .38 + font-size: 12px + + &__calendar-item + display: inline-flex + align-items: center + justify-content: center + vertical-align: middle + width: 14.285% !important + height: 12.5% !important + position: relative + padding: 1px + + &:after + content: '' + position: absolute + pointer-events: none + top: 1px + right: 0 + bottom: 1px + left: 0 + border-style: dashed + border-color: transparent + border-width: 1px + + > div, button + width: 30px + height: 30px + border-radius: 50% + > div + line-height: 30px + text-align: center + > button + line-height: 22px + + &--out + opacity: .18 + + &--fill + visibility: hidden + min-height: 32px + + &.q-date + &__range, &__range-from, &__range-to + &:before + opacity: .05 + + &__range, &__range-from, &__range-to + + &:before + content: '' + background-color: currentColor + position: absolute + top: 1px + bottom: 1px + left: 0 + right: 0 + opacity: .3 + pointer-events: none + + &__range + &:nth-child(7n-6) + &:before + border-top-left-radius: 0 + border-bottom-left-radius: 0 + + &:nth-child(7n) + &:before + border-top-right-radius: 0 + border-bottom-right-radius: 0 + + &__range-from + &:before + left: calc(50% - 15px) + border-top-left-radius: $button-rounded-border-radius + border-bottom-left-radius: $button-rounded-border-radius + + &__range-to + &:before + right: calc(50% - 15px) + border-top-right-radius: $button-rounded-border-radius + border-bottom-right-radius: $button-rounded-border-radius + + &__edit-range + &:after + border-color: currentColor transparent + + &:nth-child(7n-6) + &:after + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:nth-child(7n) + &:after + border-top-right-radius: 0 + border-bottom-right-radius: 0 + + &-from, &-from-to + &:after + left: 4px + border-left-color: currentColor + border-top-color: currentColor + border-bottom-color: currentColor + border-top-left-radius: $button-rounded-border-radius + border-bottom-left-radius: $button-rounded-border-radius + + &-to, &-from-to + &:after + right: 4px + border-right-color: currentColor + border-top-color: currentColor + border-bottom-color: currentColor + border-top-right-radius: $button-rounded-border-radius + border-bottom-right-radius: $button-rounded-border-radius + + &__calendar-days-container + height: 75% + min-height: 192px + + &__calendar-days > div + height: 16.66% !important + + &__event + position: absolute + bottom: 2px + left: 50% + height: 5px + width: 8px + border-radius: 5px + background-color: $secondary + background-color: var(--q-color-secondary) + transform: translate3d(-50%, 0, 0) + + &__today + box-shadow: 0 0 1px 0 currentColor + + &__years-content + padding: 0 8px + + &__years-item, &__months-item + flex: 0 0 33.3333% + + &.disabled, &--readonly + .q-date__header, .q-date__content + pointer-events: none + + &--readonly .q-date__navigation + display: none + + &--portrait + flex-direction: column + + &--portrait-standard + + .q-date__content + height: calc(100% - 86px) // workaround for iOS -- 86px is header height + + .q-date__header + border-top-right-radius: inherit + height: 86px + + .q-date__header-title + align-items: center + height: 30px + + &--portrait-minimal + + .q-date__content + height: 100% // workaround for iOS -- 86px is header height + + &--landscape + flex-direction: row + align-items: stretch + min-width: 420px + + > div + display: flex + flex-direction: column + + .q-date__content + height: 100% + + &--landscape-standard + min-width: 420px + + .q-date__header + border-bottom-left-radius: inherit + min-width: 110px + width: 110px + + .q-date__header-title + flex-direction: column + .q-date__header-today + margin-top: 12px + margin-left: -8px + + &--landscape-minimal + width: 310px + + &--dark + border-color: $separator-dark-color + +@media (prefers-color-scheme: dark) + .q-date--dark-auto + border-color: $separator-dark-color diff --git a/src/components/date/QDate.styl b/src/components/date/QDate.styl new file mode 100644 index 00000000000..ef4ece6da2c --- /dev/null +++ b/src/components/date/QDate.styl @@ -0,0 +1,269 @@ +.q-date + display: inline-flex + box-shadow: $shadow-2 + border-radius: $generic-border-radius + background: $light-page + background: var(--q-color-light-page) + width: 290px + min-width: 290px + max-width: 100% + + &--bordered + border: 1px solid $separator-color + + &__header + border-top-left-radius: inherit + color: $dark-text + color: var(--q-color-dark-text) + background-color: $primary + background-color: var(--q-color-primary) + padding: 16px + + &__actions + padding: 0 16px 16px + + &__content .q-btn + font-weight: normal + + &__header-link + opacity: .64 + outline: 0 + transition: opacity .3s ease-out + &--active, &:hover, &:focus + opacity: 1 + + &__header-subtitle + font-size: 14px + line-height: 1.75 + letter-spacing: .00938em + + &__header-title-label + font-size: 24px + line-height: 1.2 + letter-spacing: .00735em + + &__view + height: 100% + width: 100% + min-height: 290px + padding: 16px + + &__navigation + height: 12.5% + + > div:first-child + width: 8% + min-width: 24px + justify-content: flex-end + > div:last-child + width: 8% + min-width: 24px + justify-content: flex-start + + &__calendar-weekdays + height: 12.5% + > div + opacity: .38 + font-size: 12px + + &__calendar-item + display: inline-flex + align-items: center + justify-content: center + vertical-align: middle + width: 14.285% !important + height: 12.5% !important + position: relative + padding: 1px + + &:after + content: '' + position: absolute + pointer-events: none + top: 1px + right: 0 + bottom: 1px + left: 0 + border-style: dashed + border-color: transparent + border-width: 1px + + > div, button + width: 30px + height: 30px + border-radius: 50% + > div + line-height: 30px + text-align: center + > button + line-height: 22px + + &--out + opacity: .18 + + &--fill + visibility: hidden + min-height: 32px + + &.q-date + &__range, &__range-from, &__range-to + &:before + opacity: .05 + + &__range, &__range-from, &__range-to + + &:before + content: '' + background-color: currentColor + position: absolute + top: 1px + bottom: 1px + left: 0 + right: 0 + opacity: .3 + pointer-events: none + + &__range + &:nth-child(7n-6) + &:before + border-top-left-radius: 0 + border-bottom-left-radius: 0 + + &:nth-child(7n) + &:before + border-top-right-radius: 0 + border-bottom-right-radius: 0 + + &__range-from + &:before + left: calc(50% - 15px) + border-top-left-radius: $button-rounded-border-radius + border-bottom-left-radius: $button-rounded-border-radius + + &__range-to + &:before + right: calc(50% - 15px) + border-top-right-radius: $button-rounded-border-radius + border-bottom-right-radius: $button-rounded-border-radius + + &__edit-range + &:after + border-color: currentColor transparent + + &:nth-child(7n-6) + &:after + border-top-left-radius: 0 + border-bottom-left-radius: 0 + &:nth-child(7n) + &:after + border-top-right-radius: 0 + border-bottom-right-radius: 0 + + &-from, &-from-to + &:after + left: 4px + border-left-color: currentColor + border-top-color: currentColor + border-bottom-color: currentColor + border-top-left-radius: $button-rounded-border-radius + border-bottom-left-radius: $button-rounded-border-radius + + &-to, &-from-to + &:after + right: 4px + border-right-color: currentColor + border-top-color: currentColor + border-bottom-color: currentColor + border-top-right-radius: $button-rounded-border-radius + border-bottom-right-radius: $button-rounded-border-radius + + &__calendar-days-container + height: 75% + min-height: 192px + + &__calendar-days > div + height: 16.66% !important + + &__event + position: absolute + bottom: 2px + left: 50% + height: 5px + width: 8px + border-radius: 5px + background-color: $secondary + background-color: var(--q-color-secondary) + transform: translate3d(-50%, 0, 0) + + &__today + box-shadow: 0 0 1px 0 currentColor + + &__years-content + padding: 0 8px + + &__years-item, &__months-item + flex: 0 0 33.3333% + + &.disabled, &--readonly + .q-date__header, .q-date__content + pointer-events: none + + &--readonly .q-date__navigation + display: none + + &--portrait + flex-direction: column + + &--portrait-standard + + .q-date__content + height: calc(100% - 86px) // workaround for iOS -- 86px is header height + + .q-date__header + border-top-right-radius: inherit + height: 86px + + .q-date__header-title + align-items: center + height: 30px + + &--portrait-minimal + + .q-date__content + height: 100% // workaround for iOS -- 86px is header height + + &--landscape + flex-direction: row + align-items: stretch + min-width: 420px + + > div + display: flex + flex-direction: column + + .q-date__content + height: 100% + + &--landscape-standard + min-width: 420px + + .q-date__header + border-bottom-left-radius: inherit + min-width: 110px + width: 110px + + .q-date__header-title + flex-direction: column + .q-date__header-today + margin-top: 12px + margin-left: -8px + + &--landscape-minimal + width: 310px + + &--dark + border-color: $separator-dark-color + +@media (prefers-color-scheme: dark) + .q-date--dark-auto + border-color: $separator-dark-color diff --git a/src/components/date/index.js b/src/components/date/index.js new file mode 100644 index 00000000000..c12778ba062 --- /dev/null +++ b/src/components/date/index.js @@ -0,0 +1,5 @@ +import QDate from './QDate.js' + +export { + QDate +} diff --git a/src/components/dialog-bottom-sheet/BottomSheet.js b/src/components/dialog-bottom-sheet/BottomSheet.js new file mode 100644 index 00000000000..e92c19bd939 --- /dev/null +++ b/src/components/dialog-bottom-sheet/BottomSheet.js @@ -0,0 +1,183 @@ +import Vue from 'vue' + +import QDialog from '../dialog/QDialog.js' + +import QIcon from '../icon/QIcon.js' +import QSeparator from '../separator/QSeparator.js' + +import QCard from '../card/QCard.js' +import QCardSection from '../card/QCardSection.js' + +import QItem from '../item/QItem.js' +import QItemSection from '../item/QItemSection.js' + +import DarkMixin from '../../mixins/dark.js' +import AttrsMixin from '../../mixins/attrs.js' + +import cache from '../../utils/private/cache.js' + +const optsGrid = { + staticClass: 'row items-stretch justify-start', + attrs: { role: 'list' } +} +const optsList = { attrs: { role: 'list' } } +const attrsGridItem = { tabindex: 0, role: 'listitem' } + +export default Vue.extend({ + name: 'BottomSheetPlugin', + + mixins: [ DarkMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + title: String, + message: String, + actions: Array, + + grid: Boolean, + + cardClass: [String, Array, Object], + cardStyle: [String, Array, Object] + }, + + computed: { + dialogProps () { + return { + ...this.qAttrs, + position: 'bottom' + } + } + }, + + methods: { + show () { + this.$refs.dialog.show() + }, + + hide () { + this.$refs.dialog.hide() + }, + + onOk (action) { + this.$emit('ok', action) + this.hide() + }, + + __getGrid (h) { + return this.actions.map(action => { + const img = action.avatar || action.img + + return action.label === void 0 + ? h(QSeparator, { + staticClass: 'col-all', + props: { dark: this.dark } + }) + : h('div', { + staticClass: 'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position', + class: action.classes, + attrs: attrsGridItem, + on: { + click: () => this.onOk(action), + keyup: e => { + e.keyCode === 13 && this.onOk(action) + } + } + }, [ + h('div', { staticClass: 'q-focus-helper' }), + + action.icon + ? h(QIcon, { props: { name: action.icon, color: action.color } }) + : ( + img + ? h('img', { + attrs: { src: img }, + staticClass: action.avatar ? 'q-bottom-sheet__avatar' : null + }) + : h('div', { staticClass: 'q-bottom-sheet__empty-icon' }) + ), + + h('div', [ action.label ]) + ]) + }) + }, + + __getList (h) { + return this.actions.map(action => { + const img = action.avatar || action.img + + return action.label === void 0 + ? h(QSeparator, { props: { spaced: true, dark: this.dark } }) + : h(QItem, { + staticClass: 'q-bottom-sheet__item', + class: action.classes, + props: { + tabindex: 0, + clickable: true, + dark: this.dark + }, + on: { + click: () => this.onOk(action), + keyup: e => { + e.keyCode === 13 && this.onOk(action) + } + } + }, [ + h(QItemSection, { props: { avatar: true } }, [ + action.icon + ? h(QIcon, { props: { name: action.icon, color: action.color } }) + : ( + img + ? h('img', { + attrs: { src: img }, + staticClass: action.avatar ? 'q-bottom-sheet__avatar' : null + }) + : null + ) + ]), + h(QItemSection, [ action.label ]) + ]) + }) + } + }, + + render (h) { + const child = [] + + this.title && child.push( + h(QCardSection, { + staticClass: 'q-dialog__title' + }, [ this.title ]) + ) + + this.message && child.push( + h(QCardSection, { + staticClass: 'q-dialog__message' + }, [ this.message ]) + ) + + child.push( + this.grid === true + ? h('div', optsGrid, this.__getGrid(h)) + : h('div', optsList, this.__getList(h)) + ) + + return h(QDialog, { + key: 'dialog', + ref: 'dialog', + props: this.dialogProps, + on: cache(this, 'hide', { + hide: () => { + this.$emit('hide') + } + }) + }, [ + h(QCard, { + staticClass: `q-bottom-sheet q-bottom-sheet--${this.grid === true ? 'grid' : 'list'}` + + ` q-bottom-sheet--${this.darkSuffix} q-${this.darkSuffix}`, + style: this.cardStyle, + class: this.cardClass + }, child) + ]) + } +}) diff --git a/src/components/dialog-bottom-sheet/BottomSheet.sass b/src/components/dialog-bottom-sheet/BottomSheet.sass new file mode 100644 index 00000000000..b08bc5c2905 --- /dev/null +++ b/src/components/dialog-bottom-sheet/BottomSheet.sass @@ -0,0 +1,37 @@ +.q-bottom-sheet + padding-bottom: 8px + + &__avatar + border-radius: 50% + + &--list + width: 400px + + .q-icon, img + font-size: 24px + width: 24px + height: 24px + + &--grid + width: 700px + + .q-bottom-sheet__item + padding: 8px + text-align: center + min-width: 100px + + .q-icon, img, .q-bottom-sheet__empty-icon + font-size: 48px + width: 48px + height: 48px + margin-bottom: 8px + + .q-separator + margin: 12px 0 + + &__item + flex: 0 0 33.3333% + +@media (min-width: $breakpoint-sm-min) + .q-bottom-sheet__item + flex: 0 0 25% diff --git a/src/components/dialog-bottom-sheet/BottomSheet.styl b/src/components/dialog-bottom-sheet/BottomSheet.styl new file mode 100644 index 00000000000..b08bc5c2905 --- /dev/null +++ b/src/components/dialog-bottom-sheet/BottomSheet.styl @@ -0,0 +1,37 @@ +.q-bottom-sheet + padding-bottom: 8px + + &__avatar + border-radius: 50% + + &--list + width: 400px + + .q-icon, img + font-size: 24px + width: 24px + height: 24px + + &--grid + width: 700px + + .q-bottom-sheet__item + padding: 8px + text-align: center + min-width: 100px + + .q-icon, img, .q-bottom-sheet__empty-icon + font-size: 48px + width: 48px + height: 48px + margin-bottom: 8px + + .q-separator + margin: 12px 0 + + &__item + flex: 0 0 33.3333% + +@media (min-width: $breakpoint-sm-min) + .q-bottom-sheet__item + flex: 0 0 25% diff --git a/src/components/dialog-plugin/DialogPlugin.js b/src/components/dialog-plugin/DialogPlugin.js new file mode 100644 index 00000000000..e2ca6810a9a --- /dev/null +++ b/src/components/dialog-plugin/DialogPlugin.js @@ -0,0 +1,332 @@ +import Vue from 'vue' + +import QDialog from '../dialog/QDialog.js' +import QBtn from '../btn/QBtn.js' + +import clone from '../../utils/clone.js' +import { isKeyCode } from '../../utils/private/key-composition.js' + +import QCard from '../card/QCard.js' +import QCardSection from '../card/QCardSection.js' +import QCardActions from '../card/QCardActions.js' +import QSeparator from '../separator/QSeparator.js' + +import QInput from '../input/QInput.js' +import QOptionGroup from '../option-group/QOptionGroup.js' + +import QSpinner from '../spinner/QSpinner.js' + +import DarkMixin from '../../mixins/dark.js' +import AttrsMixin from '../../mixins/attrs.js' + +import cache from '../../utils/private/cache.js' +import { isObject } from '../../utils/is.js' + +export default Vue.extend({ + name: 'DialogPlugin', + + mixins: [ DarkMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + title: String, + message: String, + prompt: Object, + options: Object, + progress: [ Boolean, Object ], + + html: Boolean, + + ok: { + type: [ String, Object, Boolean ], + default: true + }, + cancel: [ String, Object, Boolean ], + focus: { + type: String, + default: 'ok', + validator: v => ['ok', 'cancel', 'none'].includes(v) + }, + + stackButtons: Boolean, + color: String, + + cardClass: [ String, Array, Object ], + cardStyle: [ String, Array, Object ] + }, + + computed: { + classes () { + return 'q-dialog-plugin' + + ` q-dialog-plugin--${this.darkSuffix} q-${this.darkSuffix}` + + (this.progress !== false ? ' q-dialog-plugin--progress' : '') + }, + + spinner () { + if (this.progress !== false) { + return isObject(this.progress) === true + ? { + component: this.progress.spinner || QSpinner, + props: { color: this.progress.color || this.vmColor } + } + : { + component: QSpinner, + props: { color: this.vmColor } + } + } + }, + + hasForm () { + return this.prompt !== void 0 || this.options !== void 0 + }, + + okLabel () { + return isObject(this.ok) === true + ? this.$q.lang.label.ok + : ( + this.ok === true + ? this.$q.lang.label.ok + : this.ok + ) + }, + + cancelLabel () { + return isObject(this.cancel) === true + ? this.$q.lang.label.cancel + : ( + this.cancel === true + ? this.$q.lang.label.cancel + : this.cancel + ) + }, + + vmColor () { + return this.color || `dialog-plugin-${this.darkSuffix}` + }, + + okDisabled () { + if (this.prompt !== void 0) { + return this.prompt.isValid !== void 0 && + this.prompt.isValid(this.prompt.model) !== true + } + if (this.options !== void 0) { + return this.options.isValid !== void 0 && + this.options.isValid(this.options.model) !== true + } + }, + + okProps () { + return { + color: this.vmColor, + label: this.okLabel, + ripple: false, + disable: this.okDisabled, + ...(isObject(this.ok) === true ? this.ok : { flat: true }) + } + }, + + cancelProps () { + return { + color: this.vmColor, + label: this.cancelLabel, + ripple: false, + ...(isObject(this.cancel) === true ? this.cancel : { flat: true }) + } + } + }, + + methods: { + show () { + this.$refs.dialog.show() + }, + + hide () { + this.$refs.dialog.hide() + }, + + getPrompt (h) { + return [ + h(QInput, { + key: 'prompt', + props: { + value: this.prompt.model, + type: this.prompt.type, + + label: this.prompt.label, + stackLabel: this.prompt.stackLabel, + + outlined: this.prompt.outlined, + filled: this.prompt.filled, + standout: this.prompt.standout, + rounded: this.prompt.rounded, + square: this.prompt.square, + + counter: this.prompt.counter, + maxlength: this.prompt.maxlength, + prefix: this.prompt.prefix, + suffix: this.prompt.suffix, + + color: this.vmColor, + dense: true, + autofocus: true, + dark: this.dark + }, + attrs: this.prompt.attrs, + on: cache(this, 'prompt', { + input: v => { this.prompt.model = v }, + keyup: evt => { + // if ENTER key + if ( + this.okDisabled !== true && + this.prompt.type !== 'textarea' && + isKeyCode(evt, 13) === true + ) { + this.onOk() + } + } + }) + }) + ] + }, + + getOptions (h) { + return [ + h(QOptionGroup, { + key: 'opts', + props: { + value: this.options.model, + type: this.options.type, + color: this.vmColor, + inline: this.options.inline, + options: this.options.items, + dark: this.dark + }, + on: cache(this, 'opts', { + input: v => { this.options.model = v } + }) + }) + ] + }, + + getButtons (h) { + const child = [] + + this.cancel && child.push(h(QBtn, { + key: 'cancel', + props: this.cancelProps, + attrs: { 'data-autofocus': this.focus === 'cancel' && this.hasForm !== true }, + on: cache(this, 'cancel', { click: this.onCancel }) + })) + + this.ok && child.push(h(QBtn, { + key: 'ok', + props: this.okProps, + attrs: { 'data-autofocus': this.focus === 'ok' && this.hasForm !== true }, + on: cache(this, 'ok', { click: this.onOk }) + })) + + if (child.length > 0) { + return h(QCardActions, { + staticClass: this.stackButtons === true ? 'items-end' : null, + props: { + vertical: this.stackButtons, + align: 'right' + } + }, child) + } + }, + + onOk () { + this.$emit('ok', clone(this.getData())) + this.hide() + }, + + onCancel () { + this.hide() + }, + + getData () { + return this.prompt !== void 0 + ? this.prompt.model + : (this.options !== void 0 ? this.options.model : void 0) + }, + + getSection (h, staticClass, text) { + return this.html === true + ? h(QCardSection, { + staticClass, + domProps: { innerHTML: text } + }) + : h(QCardSection, { staticClass }, [ text ]) + } + }, + + render (h) { + const child = [] + + this.title && child.push( + this.getSection(h, 'q-dialog__title', this.title) + ) + + this.progress !== false && child.push( + h(QCardSection, { staticClass: 'q-dialog__progress' }, [ + h(this.spinner.component, { + props: this.spinner.props + }) + ]) + ) + + this.message && child.push( + this.getSection(h, 'q-dialog__message', this.message) + ) + + if (this.prompt !== void 0) { + child.push( + h( + QCardSection, + { staticClass: 'scroll q-dialog-plugin__form' }, + this.getPrompt(h) + ) + ) + } + else if (this.options !== void 0) { + child.push( + h(QSeparator, { props: { dark: this.dark } }), + h( + QCardSection, + { staticClass: 'scroll q-dialog-plugin__form' }, + this.getOptions(h) + ), + h(QSeparator, { props: { dark: this.dark } }) + ) + } + + if (this.ok || this.cancel) { + child.push(this.getButtons(h)) + } + + return h(QDialog, { + key: 'dialog', + ref: 'dialog', + + props: { + ...this.qAttrs, + value: this.value + }, + + on: cache(this, 'hide', { + hide: () => { + this.$emit('hide') + } + }) + }, [ + h(QCard, { + staticClass: this.classes, + style: this.cardStyle, + class: this.cardClass, + props: { dark: this.dark } + }, child) + ]) + } +}) diff --git a/src/components/dialog-plugin/DialogPlugin.sass b/src/components/dialog-plugin/DialogPlugin.sass new file mode 100644 index 00000000000..b5bf5565856 --- /dev/null +++ b/src/components/dialog-plugin/DialogPlugin.sass @@ -0,0 +1,11 @@ +.q-dialog-plugin + width: 400px + + &__form + max-height: 50vh + + .q-card__section + .q-card__section + padding-top: 0 + + &--progress + text-align: center diff --git a/src/components/dialog-plugin/DialogPlugin.styl b/src/components/dialog-plugin/DialogPlugin.styl new file mode 100644 index 00000000000..b5bf5565856 --- /dev/null +++ b/src/components/dialog-plugin/DialogPlugin.styl @@ -0,0 +1,11 @@ +.q-dialog-plugin + width: 400px + + &__form + max-height: 50vh + + .q-card__section + .q-card__section + padding-top: 0 + + &--progress + text-align: center diff --git a/src/components/dialog/QDialog.js b/src/components/dialog/QDialog.js new file mode 100644 index 00000000000..1abb6ad78e3 --- /dev/null +++ b/src/components/dialog/QDialog.js @@ -0,0 +1,323 @@ +import Vue from 'vue' + +import HistoryMixin from '../../mixins/history.js' +import ModelToggleMixin from '../../mixins/model-toggle.js' +import PortalMixin from '../../mixins/portal.js' +import PreventScrollMixin from '../../mixins/prevent-scroll.js' +import AttrsMixin, { ariaHidden } from '../../mixins/attrs.js' +import FocusWrapMixin from '../../mixins/focus-wrap.js' + +import EscapeKey from '../../utils/private/escape-key.js' +import { create, stop } from '../../utils/event.js' + +const positionClass = { + standard: 'fixed-full flex-center', + top: 'fixed-top justify-center', + bottom: 'fixed-bottom justify-center', + right: 'fixed-right items-center', + left: 'fixed-left items-center' +} + +const transitions = { + standard: ['scale', 'scale'], + top: ['slide-down', 'slide-up'], + bottom: ['slide-up', 'slide-down'], + right: ['slide-left', 'slide-right'], + left: ['slide-right', 'slide-left'] +} + +export default Vue.extend({ + name: 'QDialog', + + mixins: [ + AttrsMixin, + HistoryMixin, + ModelToggleMixin, + PortalMixin, + PreventScrollMixin, + FocusWrapMixin + ], + + props: { + persistent: Boolean, + autoClose: Boolean, + + noEscDismiss: Boolean, + noBackdropDismiss: Boolean, + noRouteDismiss: Boolean, + noRefocus: Boolean, + noFocus: Boolean, + noShake: Boolean, + + seamless: Boolean, + + maximized: Boolean, + fullWidth: Boolean, + fullHeight: Boolean, + + square: Boolean, + + position: { + type: String, + default: 'standard', + validator: val => val === 'standard' || + ['top', 'bottom', 'left', 'right'].includes(val) + }, + + transitionShow: String, + transitionHide: String + }, + + watch: { + seamless (v) { + this.showing === true && this.__preventScroll(v !== true) + } + }, + + computed: { + classes () { + return `q-dialog__inner--${this.maximized === true ? 'maximized' : 'minimized'} ` + + `q-dialog__inner--${this.position} ${positionClass[this.position]}` + + (this.fullWidth === true ? ' q-dialog__inner--fullwidth' : '') + + (this.fullHeight === true ? ' q-dialog__inner--fullheight' : '') + + (this.square === true ? ' q-dialog__inner--square' : '') + }, + + transitionProps () { + const show = `q-transition--${this.transitionShow === void 0 ? transitions[this.position][0] : this.transitionShow}` + const hide = `q-transition--${this.transitionHide === void 0 ? transitions[this.position][1] : this.transitionHide}` + return { + enterClass: `${show}-enter`, + leaveClass: `${hide}-leave`, + appearClass: `${show}-appear`, + enterToClass: `${show}-enter-to`, + leaveToClass: `${hide}-leave-to`, + appearToClass: `${show}-appear-to`, + enterActiveClass: `${show}-enter-active`, + leaveActiveClass: `${hide}-leave-active`, + appearActiveClass: `${show}-appear-active` + } + }, + + useBackdrop () { + return this.showing === true && this.seamless !== true + }, + + hideOnRouteChange () { + return this.persistent !== true && + this.noRouteDismiss !== true && + this.seamless !== true + }, + + onBackdropEvents () { + return { + focusin: this.__onBackdropClick + } + }, + + onInnerEvents () { + const on = { + ...this.qListeners, + // stop propagating these events from children + input: stop, + 'popup-show': stop, + 'popup-hide': stop + } + + if (this.autoClose === true) { + on.click = this.__onAutoClose + } + + return on + }, + + onTransitionEvents () { + return { + 'before-enter': this.__onTransitionBeforeEnter, + enter: this.__onTransitionEnter, + 'after-enter': this.__onTransitionAfterEnter, + 'enter-cancelled': this.__onTransitionEnterCancelled, + 'before-leave': this.__onTransitionBeforeLeave, + 'after-leave': this.__onTransitionAfterLeave + } + }, + + attrs () { + return { + role: 'dialog', + 'aria-modal': this.useBackdrop === true ? 'true' : 'false', + ...this.qAttrs + } + } + }, + + methods: { + shake (refocusTarget) { + if (refocusTarget && typeof refocusTarget.focus === 'function') { + refocusTarget.focus() + } + else { + this.__focusFirst(true) + } + this.$emit('shake') + + const node = this.__getInnerNode() + + if (node !== void 0) { + node.classList.remove('q-animate--scale') + node.classList.add('q-animate--scale') + clearTimeout(this.shakeTimeout) + this.shakeTimeout = setTimeout(() => { + node.classList.remove('q-animate--scale') + }, 170) + } + }, + + __show () { + this.__addHistory() + + // IE can have null document.activeElement + this.__refocusTarget = this.$q.platform.is.desktop === true && this.noRefocus === false && document.activeElement !== null + ? document.activeElement + : void 0 + + this.$el.dispatchEvent(create('popup-show', { bubbles: true })) + + EscapeKey.register(this, () => { + if (this.seamless !== true) { + // if it should not close then focus at start + if (this.persistent === true || this.noEscDismiss === true) { + if (this.maximized !== true && this.noShake !== true) { + this.shake() + } + else { + this.__focusFirst(true) + } + } + else { + this.$emit('escape-key') + this.hide() + } + } + else { + this.__focusCyclePortal() + } + }) + + this.__showPortal() + }, + + __hide () { + this.__removeHistory() + this.__cleanup(true) + + this.$el.dispatchEvent(create('popup-hide', { bubbles: true })) + }, + + __onTransitionBeforeEnter (target) { + // required in order to avoid the "double-tap needed" issue + this.$q.platform.is.ios === true && target.click() + + this.seamless !== true && this.__preventScroll(true) + + target.setAttribute('data-q-portal-animating', true) + }, + + __onTransitionEnter () { + this.noFocus !== true && this.focus() + }, + + __onTransitionAfterEnter (target) { + target.removeAttribute('data-q-portal-animating') + + this.$emit('show', { target }) + }, + + __onTransitionEnterCancelled (target) { + target.removeAttribute('data-q-portal-animating') + + this.seamless !== true && this.__preventScroll(false) + }, + + __onTransitionBeforeLeave () { + if (this.showing !== true) { + this.__focusCyclePortal(true) + this.seamless !== true && (document.documentElement.scrollTop = 0) + } + }, + + __onTransitionAfterLeave (target) { + if (this.showing !== true) { + this.__hidePortal() + + this.seamless !== true && this.__preventScroll(false) + + this.$emit('hide', { target }) + } + }, + + __onAutoClose (e) { + this.hide(e) + this.qListeners.click !== void 0 && this.$emit('click', e) + }, + + __onBackdropClick (e) { + if (this.persistent !== true && this.noBackdropDismiss !== true) { + this.hide(e) + } + else if (this.noShake !== true) { + this.shake(e.relatedTarget) + } + }, + + __cleanup (hiding) { + clearTimeout(this.shakeTimeout) + + if (hiding === true || this.showing === true) { + EscapeKey.pop(this) + } + }, + + __renderPortal (h) { + return h('div', { + staticClass: `q-dialog fullscreen no-pointer-events q-dialog--${this.seamless === true ? 'seamless' : 'modal'}`, + class: this.contentClass, + style: this.contentStyle, + attrs: this.attrs + }, [ + h('transition', { + props: { name: 'q-transition--fade' } + }, this.useBackdrop === true ? [ + h('div', { + staticClass: 'q-dialog__backdrop fixed-full', + attrs: { ...ariaHidden, tabindex: -1 }, + on: this.onBackdropEvents + }) + ] : null), + + h('transition', { + props: this.transitionProps, + on: this.onTransitionEvents + }, [ + this.showing === true ? h('div', { + ref: 'inner', + staticClass: 'q-dialog__inner flex no-pointer-events', + class: this.classes, + attrs: { tabindex: -1 }, + on: this.onInnerEvents + }, this.__getFocusWrappedContent('default')) : null + ]) + ]) + } + }, + + mounted () { + this.__processModelChange(this.value) + }, + + beforeDestroy () { + this.__cleanup() + this.__preventScroll(false) + this.__refocusTarget = void 0 + } +}) diff --git a/src/components/dialog/QDialog.json b/src/components/dialog/QDialog.json new file mode 100644 index 00000000000..5d65dcd26c6 --- /dev/null +++ b/src/components/dialog/QDialog.json @@ -0,0 +1,148 @@ +{ + "mixins": [ "mixins/model-toggle", "mixins/portal" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/dialog" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "persistent": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog if clicking outside of it or hitting ESC key; Also, an app route change won't dismiss it", + "category": "behavior" + }, + + "no-esc-dismiss": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog by hitting ESC key; No need to set it if 'persistent' prop is also set", + "category": "behavior" + }, + + "no-backdrop-dismiss": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog by clicking outside of it; No need to set it if 'persistent' prop is also set", + "category": "behavior" + }, + + "no-route-dismiss": { + "type": "Boolean", + "desc": "Changing route app won't dismiss Dialog; No need to set it if 'persistent' prop is also set", + "category": "behavior" + }, + + "auto-close": { + "type": "Boolean", + "desc": "Any click/tap inside of the dialog will close it", + "category": "behavior" + }, + + "seamless": { + "type": "Boolean", + "desc": "Put Dialog into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too", + "category": "content" + }, + + "maximized": { + "type": "Boolean", + "desc": "Put Dialog into maximized mode", + "category": "content" + }, + + "full-width": { + "type": "Boolean", + "desc": "Dialog will try to render with same width as the window", + "category": "content" + }, + + "full-height": { + "type": "Boolean", + "desc": "Dialog will try to render with same height as the window", + "category": "content" + }, + + "position": { + "type": "String", + "desc": "Stick dialog to one of the sides (top, right, bottom or left)", + "default": "standard", + "values": [ "standard", "top", "right", "bottom", "left" ], + "examples": [ "top", "right" ], + "category": "content" + }, + + "transition-show": { + "extends": "transition", + "default": "scale", + "category": "behavior" + }, + + "transition-hide": { + "extends": "transition", + "default": "scale", + "category": "behavior" + }, + + "square": { + "type": "Boolean", + "desc": "Forces content to have squared borders", + "category": "style" + }, + + "no-refocus": { + "type": "Boolean", + "desc": "(Accessibility) When Dialog gets hidden, do not refocus on the DOM element that previously had focus", + "category": "behavior" + }, + + "no-focus": { + "type": "Boolean", + "desc": "(Accessibility) When Dialog gets shown, do not switch focus on it", + "category": "behavior" + }, + + "no-shake": { + "type": "Boolean", + "desc": "Do not shake up the Dialog to catch user's attention", + "category": "behavior", + "addedIn": "v1.17" + } + }, + + "events": { + "shake": { + "desc": "Emitted when the Dialog shakes in order to catch user's attention, unless the 'no-shake' property is set" + }, + + "escape-key": { + "desc": "Emitted when ESC key is pressed; Does not get emitted if Dialog is 'persistent' or it has 'no-esc-key' set" + } + }, + + "methods": { + "focus": { + "desc": "Focus dialog; if you have content with autofocus attribute, it will directly focus it", + "params": { + "selector": { + "type": "String", + "required": false, + "desc": "Optional CSS selector to override default focusable element - use '' to focus first focusable element instead of the one with autofocus", + "examples": [ "[tabindex]:not([tabindex=\"-1\"])" ], + "addedIn": "v1.18.9" + } + } + }, + + "shake": { + "desc": "Shakes dialog" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/dialog/QDialog.sass b/src/components/dialog/QDialog.sass new file mode 100644 index 00000000000..4c40807f63e --- /dev/null +++ b/src/components/dialog/QDialog.sass @@ -0,0 +1,123 @@ +.q-dialog + contain: layout size + contain: layout size style + width: 100vw + + &__title + font-size: 1.25rem + font-weight: 500 + line-height: 2rem + letter-spacing: .0125em + + &__progress + font-size: 4rem + + &__inner + outline: 0 + + > div + pointer-events: all + overflow: auto + -webkit-overflow-scrolling: touch + will-change: scroll-position + border-radius: $generic-border-radius + box-shadow: $shadow-4 + + &--square > div + border-radius: 0 !important + + > .q-card + > .q-card__actions .q-btn--rectangle .q-btn__wrapper + min-width: 64px + + &--minimized + padding: 24px + > div + max-height: calc(100vh - 48px) + + &--maximized + > div + height: 100% + width: 100% + max-height: 100vh + max-width: 100vw + border-radius: 0 !important + + &--top, &--bottom + padding-top: 0 !important + padding-bottom: 0 !important + &--right, &--left + padding-right: 0 !important + padding-left: 0 !important + + &--left, &--top + &:not([data-q-portal-animating]) > div + border-top-left-radius: 0 + &--right, &--top + &:not([data-q-portal-animating]) > div + border-top-right-radius: 0 + &--left, &--bottom + &:not([data-q-portal-animating]) > div + border-bottom-left-radius: 0 + &--right, &--bottom + &:not([data-q-portal-animating]) > div + border-bottom-right-radius: 0 + + &--fullwidth + > div + width: 100% !important + max-width: 100% !important + &--fullheight + > div + height: 100% !important + max-height: 100% !important + + &__backdrop + z-index: -1 + pointer-events: all + outline: 0 + opacity: .4 + background: $backdrop-background + background: var(--q-color-backdrop-background) + +html[dir=rtl] + .q-dialog + right: auto + +body.mobile + .q-dialog + contain: size + contain: size style + +body.desktop + .q-dialog--modal + height: 100vh + +// addressbar always gets shown, so need to slim this down +body.platform-ios + .q-dialog__inner--minimized > div + max-height: calc(100vh - 164px) + +body.platform-android + .q-dialog__inner--minimized > div + max-height: calc(100% - 48px) + +body.q-ios-padding .q-dialog__inner + padding-top: $ios-statusbar-height !important + padding-top: env(safe-area-inset-top) !important + padding-bottom: env(safe-area-inset-bottom) !important + > div + max-height: calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important + +@media (max-width: $breakpoint-xs-max) + .q-dialog__inner + &--top, &--bottom + padding-left: 0 + padding-right: 0 + + > div + width: 100% !important + +@media (min-width: $breakpoint-sm-min) + .q-dialog__inner--minimized > div + max-width: 560px diff --git a/src/components/dialog/QDialog.styl b/src/components/dialog/QDialog.styl new file mode 100644 index 00000000000..fde5032ed9c --- /dev/null +++ b/src/components/dialog/QDialog.styl @@ -0,0 +1,124 @@ +.q-dialog + contain: layout size + contain: layout size style + width: 100vw + + &__title + font-size: 1.25rem + font-weight: 500 + line-height: 2rem + letter-spacing: .0125em + + &__progress + font-size: 4rem + + &__inner + outline: 0 + + > div + pointer-events: all + overflow: auto + -webkit-overflow-scrolling: touch + will-change: scroll-position + border-radius: $generic-border-radius + box-shadow: $shadow-4 + + &--square > div + border-radius: 0 !important + + > .q-card + > .q-card__actions .q-btn--rectangle .q-btn__wrapper + min-width: 64px + + &--minimized + padding: 24px + > div + max-height: calc(100vh - 48px) + + &--maximized + > div + height: 100% + width: 100% + max-height: 100vh + max-width: 100vw + border-radius: 0 !important + + &--top, &--bottom + padding-top: 0 !important + padding-bottom: 0 !important + &--right, &--left + padding-right: 0 !important + padding-left: 0 !important + + &--left, &--top + &:not([data-q-portal-animating]) > div + border-top-left-radius: 0 + &--right, &--top + &:not([data-q-portal-animating]) > div + border-top-right-radius: 0 + &--left, &--bottom + &:not([data-q-portal-animating]) > div + border-bottom-left-radius: 0 + &--right, &--bottom + &:not([data-q-portal-animating]) > div + border-bottom-right-radius: 0 + + &--fullwidth + > div + width: 100% !important + max-width: 100% !important + &--fullheight + > div + height: 100% !important + max-height: 100% !important + + &__backdrop + z-index: -1 + pointer-events: all + outline: 0 + opacity: .4 + background: $backdrop-background + background: var(--q-color-backdrop-background) + +html[dir=rtl] + .q-dialog + right: auto + +body.mobile + .q-dialog + contain: size + contain: size style + +body.desktop + .q-dialog--modal + height: 100vh + +// addressbar always gets shown, so need to slim this down +body.platform-ios + .q-dialog__inner--minimized > div + max-height: calc(100vh - 164px) + +body.platform-android + .q-dialog__inner--minimized > div + max-height: calc(100% - 48px) + +body.q-ios-padding .q-dialog__inner + padding-top: $ios-statusbar-height !important + padding-top: env(safe-area-inset-top) !important + padding-bottom: env(safe-area-inset-bottom) !important + > div + // quotes are stylus workaround to not error when parsing env() + max-height: "calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom)) !important" + +@media (max-width: $breakpoint-xs-max) + .q-dialog__inner + &--top, &--bottom + padding-left: 0 + padding-right: 0 + + > div + width: 100% !important + +@media (min-width: $breakpoint-sm-min) + .q-dialog__inner--minimized > div + max-width: 560px diff --git a/src/components/dialog/index.js b/src/components/dialog/index.js new file mode 100644 index 00000000000..97cefae75c2 --- /dev/null +++ b/src/components/dialog/index.js @@ -0,0 +1,5 @@ +import QDialog from './QDialog.js' + +export { + QDialog +} diff --git a/src/components/drawer/QDrawer.js b/src/components/drawer/QDrawer.js new file mode 100644 index 00000000000..7b525a79788 --- /dev/null +++ b/src/components/drawer/QDrawer.js @@ -0,0 +1,749 @@ +import Vue from 'vue' + +import HistoryMixin from '../../mixins/history.js' +import TimeoutMixin from '../../mixins/timeout.js' +import ModelToggleMixin from '../../mixins/model-toggle.js' +import PreventScrollMixin from '../../mixins/prevent-scroll.js' +import DarkMixin from '../../mixins/dark.js' + +import TouchPan from '../../directives/TouchPan.js' + +import { between } from '../../utils/format.js' +import { slot } from '../../utils/private/slot.js' +import { ariaHidden } from '../../mixins/attrs' +import { stopAndPrevent } from '../../utils/event.js' +import { executeWhenScrollable } from '../../utils/scroll.js' + +const duration = 150 + +const mouseEvents = [ + 'mouseover', 'mouseout', 'mouseenter', 'mouseleave' +] + +export default Vue.extend({ + name: 'QDrawer', + + inject: { + layout: { + default () { + console.error('QDrawer needs to be child of QLayout') + } + } + }, + + mixins: [ DarkMixin, HistoryMixin, TimeoutMixin, ModelToggleMixin, PreventScrollMixin ], + + directives: { + TouchPan + }, + + props: { + side: { + type: String, + default: 'left', + validator: v => ['left', 'right'].includes(v) + }, + + width: { + type: Number, + default: 300 + }, + + mini: Boolean, + miniToOverlay: Boolean, + miniWidth: { + type: Number, + default: 57 + }, + + breakpoint: { + type: Number, + default: 1023 + }, + showIfAbove: Boolean, + + behavior: { + type: String, + validator: v => ['default', 'desktop', 'mobile'].includes(v), + default: 'default' + }, + + bordered: Boolean, + elevated: Boolean, + contentStyle: [String, Object, Array], + contentClass: [String, Object, Array], + + overlay: Boolean, + persistent: Boolean, + noSwipeOpen: Boolean, + noSwipeClose: Boolean, + noSwipeBackdrop: Boolean + }, + + data () { + const belowBreakpoint = ( + this.behavior === 'mobile' || + (this.behavior !== 'desktop' && this.layout.totalWidth <= this.breakpoint) + ) + + return { + belowBreakpoint, + showing: this.showIfAbove === true && belowBreakpoint === false + ? true + : this.value === true + } + }, + + watch: { + belowBreakpoint (val) { + if (val === true) { // from lg to xs + this.lastDesktopState = this.showing + this.showing === true && this.hide(false) + } + else if ( + this.overlay === false && + this.behavior !== 'mobile' && + this.lastDesktopState !== false + ) { // from xs to lg + if (this.showing === true) { + this.__applyPosition(0) + this.__applyBackdrop(0) + this.__cleanup() + } + else { + this.show(false) + } + } + }, + + 'layout.totalWidth' () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable() + + if (this.layout.container !== true) { + this.clearExecuteWhenScrollable = executeWhenScrollable(this.__updateBelowBreakpoint) + } + else { + this.__updateBelowBreakpoint() + } + }, + + side (newSide, oldSide) { + if (this.layout.instances[oldSide] === this) { + this.layout.instances[oldSide] = void 0 + this.layout[oldSide].space = false + this.layout[oldSide].offset = 0 + } + + this.layout.instances[newSide] = this + this.layout[newSide].size = this.size + this.layout[newSide].space = this.onLayout + this.layout[newSide].offset = this.offset + }, + + behavior () { + this.__updateBelowBreakpoint() + }, + + breakpoint () { + this.__updateBelowBreakpoint() + }, + + 'layout.container' (val) { + this.showing === true && this.__preventScroll(val !== true) + val === true && this.__updateBelowBreakpoint() + }, + + 'layout.scrollbarWidth' () { + this.__applyPosition(this.showing === true ? 0 : void 0) + }, + + offset (val) { + this.__update('offset', val) + }, + + onLayout (val) { + this.$emit('on-layout', val) + this.__update('space', val) + }, + + rightSide () { + this.__applyPosition() + }, + + size (val) { + this.__applyPosition() + this.__updateSizeOnLayout(this.miniToOverlay, val) + }, + + miniToOverlay (val) { + this.__updateSizeOnLayout(val, this.size) + }, + + '$q.lang.rtl' () { + this.__applyPosition() + }, + + mini () { + if (this.value === true) { + this.__animateMini() + this.layout.__animate() + } + }, + + isMini (val) { + this.$emit('mini-state', val) + } + }, + + computed: { + rightSide () { + return this.side === 'right' + }, + + otherSide () { + return this.rightSide === true ? 'left' : 'right' + }, + + offset () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === false + ? (this.miniToOverlay === true ? this.miniWidth : this.size) + : 0 + }, + + size () { + return this.isMini === true + ? this.miniWidth + : this.width + }, + + fixed () { + return this.overlay === true || + this.miniToOverlay === true || + this.layout.view.indexOf(this.rightSide ? 'R' : 'L') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + onLayout () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === false + }, + + onScreenOverlay () { + return this.showing === true && this.belowBreakpoint === false && this.overlay === true + }, + + backdropClass () { + return this.showing === false ? 'no-pointer-events' : null + }, + + headerSlot () { + return this.rightSide === true + ? this.layout.rows.top[2] === 'r' + : this.layout.rows.top[0] === 'l' + }, + + footerSlot () { + return this.rightSide === true + ? this.layout.rows.bottom[2] === 'r' + : this.layout.rows.bottom[0] === 'l' + }, + + aboveStyle () { + const css = {} + + if (this.layout.header.space === true && this.headerSlot === false) { + if (this.fixed === true) { + css.top = `${this.layout.header.offset}px` + } + else if (this.layout.header.space === true) { + css.top = `${this.layout.header.size}px` + } + } + + if (this.layout.footer.space === true && this.footerSlot === false) { + if (this.fixed === true) { + css.bottom = `${this.layout.footer.offset}px` + } + else if (this.layout.footer.space === true) { + css.bottom = `${this.layout.footer.size}px` + } + } + + return css + }, + + style () { + const style = { width: `${this.size}px` } + return this.belowBreakpoint === true + ? style + : Object.assign(style, this.aboveStyle) + }, + + classes () { + return `q-drawer--${this.side}` + + (this.bordered === true ? ' q-drawer--bordered' : '') + + ` q-drawer--${this.darkSuffix} q-${this.darkSuffix}` + + (this.showing !== true ? ' q-layout--prevent-focus' : '') + + ( + this.belowBreakpoint === true + ? ' fixed q-drawer--on-top q-drawer--mobile q-drawer--top-padding' + : ` q-drawer--${this.isMini === true ? 'mini' : 'standard'}` + + (this.fixed === true || this.onLayout !== true ? ' fixed' : '') + + (this.overlay === true || this.miniToOverlay === true ? ' q-drawer--on-top' : '') + + (this.headerSlot === true ? ' q-drawer--top-padding' : '') + ) + }, + + stateDirection () { + return (this.$q.lang.rtl === true ? -1 : 1) * (this.rightSide === true ? 1 : -1) + }, + + isMini () { + return this.mini === true && this.belowBreakpoint !== true + }, + + onNativeEvents () { + if (this.belowBreakpoint !== true) { + const evt = { + '!click': e => { this.$emit('click', e) } + } + + mouseEvents.forEach(name => { + evt[name] = e => { + this.qListeners[name] !== void 0 && this.$emit(name, e) + } + }) + + return evt + } + }, + + onBackdropEvents () { + return { + click: this.hide, + touchmove: stopAndPrevent + } + }, + + hideOnRouteChange () { + return this.persistent !== true && + (this.belowBreakpoint === true || this.onScreenOverlay === true) + }, + + onOpenerEvents () { + return { + touchstart: stopAndPrevent + } + }, + + openDirective () { + const dir = this.$q.lang.rtl === true ? this.side : this.otherSide + + return [{ + name: 'touch-pan', + value: this.__openByTouch, + modifiers: { + [ dir ]: true, + mouse: true, + prevent: true + } + }] + }, + + contentCloseDirective () { + if (this.noSwipeClose !== true) { + const dir = this.$q.lang.rtl === true ? this.otherSide : this.side + + return [{ + name: 'touch-pan', + value: this.__closeByTouch, + modifiers: { + [ dir ]: true, + mouse: true + } + }] + } + }, + + backdropCloseDirective () { + if (this.noSwipeBackdrop !== true) { + const dir = this.$q.lang.rtl === true ? this.otherSide : this.side + + return [{ + name: 'touch-pan', + value: this.__closeByTouch, + modifiers: { + [ dir ]: true, + mouse: true, + mouseAllDir: true + } + }] + } + } + }, + + methods: { + __applyPosition (position) { + if (position === void 0) { + this.$nextTick(() => { + position = this.showing === true ? 0 : this.size + this.__applyPosition(this.stateDirection * position) + }) + } + else if (this.$refs.content !== void 0) { + if ( + this.layout.container === true && + this.rightSide === true && + (this.belowBreakpoint === true || Math.abs(position) === this.size) + ) { + position += this.stateDirection * this.layout.scrollbarWidth + } + else if ( + this.layout.container !== true && + this.rightSide === true && + this.belowBreakpoint === true + ) { + position += (this.$q.lang.rtl === true ? -1 : 1) * this.layout.scrollbarWidth + } + + if (this.__lastPosition !== position) { + this.$refs.content.style.transform = `translateX(${position}px)` + this.__lastPosition = position + } + } + }, + + __applyBackdrop (x, retry) { + if (this.$refs.backdrop !== void 0) { + this.$refs.backdrop.style.opacity = + this.lastBackdropOpacity = x * 0.4 + } + else { + // rendered nodes might not have + // picked up this.showing change yet, + // so we need one retry + retry !== true && this.$nextTick(() => { + this.__applyBackdrop(x, true) + }) + } + }, + + __setBackdropVisible (v) { + if (this.$refs.backdrop !== void 0) { + this.$refs.backdrop.classList[v === true ? 'remove' : 'add']('no-pointer-events') + } + }, + + __setScrollable (v) { + const action = v === true + ? 'remove' + : (this.layout.container !== true ? 'add' : '') + + action !== '' && document.body.classList[action]('q-body--drawer-toggle') + }, + + __animateMini () { + if (this.timerMini !== void 0) { + clearTimeout(this.timerMini) + } + else if (this.$el !== void 0) { + this.$el.classList.add('q-drawer--mini-animate') + } + this.timerMini = setTimeout(() => { + this.$el !== void 0 && this.$el.classList.remove('q-drawer--mini-animate') + this.timerMini = void 0 + }, 150) + }, + + __openByTouch (evt) { + if (this.showing !== false) { + // some browsers might capture and trigger this + // even if Drawer has just been opened (but animation is still pending) + return + } + + const + width = this.size, + position = between(evt.distance.x, 0, width) + + if (evt.isFinal === true) { + const + el = this.$refs.content, + opened = position >= Math.min(75, width) + + el.classList.remove('no-transition') + + if (opened === true) { + this.show() + } + else { + this.layout.__animate() + this.__applyBackdrop(0) + this.__applyPosition(this.stateDirection * width) + el.classList.remove('q-drawer--delimiter') + el.classList.add('q-layout--prevent-focus') + this.__setBackdropVisible(false) + } + + return + } + + this.__applyPosition( + (this.$q.lang.rtl === true ? this.rightSide !== true : this.rightSide) + ? Math.max(width - position, 0) + : Math.min(0, position - width) + ) + this.__applyBackdrop( + between(position / width, 0, 1) + ) + + if (evt.isFirst === true) { + const el = this.$refs.content + el.classList.add('no-transition') + el.classList.add('q-drawer--delimiter') + el.classList.remove('q-layout--prevent-focus') + this.__setBackdropVisible(true) + } + }, + + __closeByTouch (evt) { + if (this.showing !== true) { + // some browsers might capture and trigger this + // even if Drawer has just been closed (but animation is still pending) + return + } + + const + width = this.size, + dir = evt.direction === this.side, + position = (this.$q.lang.rtl === true ? dir !== true : dir) + ? between(evt.distance.x, 0, width) + : 0 + + if (evt.isFinal === true) { + const opened = Math.abs(position) < Math.min(75, width) + this.$refs.content.classList.remove('no-transition') + + if (opened === true) { + this.layout.__animate() + this.__applyBackdrop(1) + this.__applyPosition(0) + } + else { + this.hide() + } + + return + } + + this.__applyPosition(this.stateDirection * position) + this.__applyBackdrop(between(1 - position / width, 0, 1)) + + if (evt.isFirst === true) { + this.$refs.content.classList.add('no-transition') + } + }, + + __show (evt, noEvent) { + this.__addHistory() + + this.__setBackdropVisible(true) + evt !== false && this.layout.__animate() + this.__applyPosition(0) + + if (this.belowBreakpoint === true) { + const otherSide = this.layout.instances[this.otherSide] + if (otherSide !== void 0 && otherSide.belowBreakpoint === true) { + otherSide.hide(false) + } + + this.__applyBackdrop(1) + this.layout.container !== true && this.__preventScroll(true) + } + else { + this.__applyBackdrop(0) + evt !== false && this.__setScrollable(false) + } + + this.__registerTimeout(() => { + evt !== false && this.__setScrollable(true) + noEvent !== true && this.$emit('show', evt) + }, duration) + }, + + __hide (evt, noEvent) { + this.__removeHistory() + + evt !== false && this.layout.__animate() + + this.__applyBackdrop(0) + this.__applyPosition(this.stateDirection * this.size) + this.__setBackdropVisible(false) + + this.__cleanup() + + if (noEvent !== true) { + this.__registerTimeout(() => { this.$emit('hide', evt) }, duration) + } + else { + this.__removeTimeout() + } + }, + + __cleanup () { + this.__preventScroll(false) + this.__setScrollable(true) + }, + + __update (prop, val) { + if (this.layout[this.side][prop] !== val) { + this.layout[this.side][prop] = val + } + }, + + __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val + } + }, + + __updateSizeOnLayout (miniToOverlay, size) { + this.__update('size', miniToOverlay === true ? this.miniWidth : size) + }, + + __updateBelowBreakpoint () { + this.__updateLocal('belowBreakpoint', ( + this.behavior === 'mobile' || + (this.behavior !== 'desktop' && this.layout.totalWidth <= this.breakpoint) + )) + } + }, + + created () { + this.__useTimeout('__registerTimeout', '__removeTimeout') + + this.layout.instances[this.side] = this + this.__updateSizeOnLayout(this.miniToOverlay, this.size) + this.__update('space', this.onLayout) + this.__update('offset', this.offset) + + if ( + this.showIfAbove === true && + this.value !== true && + this.showing === true && + this.qListeners.input !== void 0 + ) { + this.$emit('input', true) + } + }, + + mounted () { + this.$emit('on-layout', this.onLayout) + this.$emit('mini-state', this.isMini) + + this.lastDesktopState = this.showIfAbove === true + + const fn = () => { + const action = this.showing === true ? 'show' : 'hide' + this[`__${action}`](false, true) + } + + if (this.layout.totalWidth !== 0) { + // make sure that all computed properties + // have been updated before calling __show/__hide() + this.$nextTick(fn) + return + } + + this.watcher = this.$watch('layout.totalWidth', () => { + this.watcher() + this.watcher = void 0 + + if (this.showing === false && this.showIfAbove === true && this.belowBreakpoint === false) { + this.show(false) + } + else { + fn() + } + }) + }, + + beforeDestroy () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable() + this.watcher !== void 0 && this.watcher() + clearTimeout(this.timerMini) + + this.showing === true && this.__cleanup() + + if (this.layout.instances[this.side] === this) { + this.layout.instances[this.side] = void 0 + this.__update('size', 0) + this.__update('offset', 0) + this.__update('space', false) + } + }, + + render (h) { + const child = [] + + if (this.belowBreakpoint === true) { + this.noSwipeOpen !== true && child.push( + h('div', { + staticClass: `q-drawer__opener fixed-${this.side}`, + attrs: ariaHidden, + directives: this.openDirective, + on: this.onOpenerEvents + }) + ) + + child.push( + h('div', { + ref: 'backdrop', + staticClass: 'fullscreen q-drawer__backdrop', + class: this.backdropClass, + attrs: ariaHidden, + style: this.lastBackdropOpacity !== void 0 + ? { opacity: this.lastBackdropOpacity } + : null, + on: this.onBackdropEvents, + directives: this.showing === false + ? void 0 + : this.backdropCloseDirective + }) + ) + } + + const content = [ + h('div', { + staticClass: 'q-drawer__content fit ' + (this.layout.container === true ? 'overflow-auto' : 'scroll'), + class: this.contentClass, + style: this.contentStyle + }, this.isMini === true && this.$scopedSlots.mini !== void 0 + ? this.$scopedSlots.mini() + : slot(this, 'default') + ) + ] + + if (this.elevated === true && this.showing === true) { + content.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ) + } + + child.push( + h('aside', { + ref: 'content', + staticClass: 'q-drawer', + class: this.classes, + style: this.style, + on: this.onNativeEvents, + directives: this.belowBreakpoint === true + ? this.contentCloseDirective + : void 0 + }, content) + ) + + return h('div', { staticClass: 'q-drawer-container' }, child) + } +}) diff --git a/src/components/drawer/QDrawer.json b/src/components/drawer/QDrawer.json new file mode 100644 index 00000000000..5ebf8b60f55 --- /dev/null +++ b/src/components/drawer/QDrawer.json @@ -0,0 +1,187 @@ +{ + "mixins": [ "mixins/model-toggle" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/drawer" + }, + + "props": { + "side": { + "type": "String", + "desc": "Side to attach to", + "values": [ "left", "right" ], + "default": "left", + "examples": [ "right" ], + "category": "behavior" + }, + + "overlay": { + "type": "Boolean", + "desc": "Puts drawer into overlay mode (does not occupy space on screen, narrowing the page)", + "category": "behavior" + }, + + "width": { + "type": "Number", + "desc": "Width of drawer (in pixels)", + "default": 300, + "examples": [ ":width=\"350\"" ], + "category": "style" + }, + + "mini": { + "type": "Boolean", + "desc": "Puts drawer into mini mode", + "category": "behavior" + }, + + "mini-width": { + "type": "Number", + "desc": "Width of drawer (in pixels) when in mini mode", + "default": 60, + "examples": [ ":mini-width=\"100\"" ], + "category": "style" + }, + + "dark": { + "extends": "dark", + "addedIn": "v1.3" + }, + + "mini-to-overlay": { + "type": "Boolean", + "desc": "Mini mode will expand as an overlay", + "category": "behavior" + }, + + "breakpoint": { + "type": "Number", + "desc": "Breakpoint (in pixels) of layout width up to which mobile mode is used", + "default": 1023, + "examples": [ 1200, ":breakpoint=\"1400\"" ], + "category": "behavior" + }, + + "behavior": { + "type": "String", + "desc": "Overrides the default dynamic mode into which the drawer is put on", + "values": [ + "default", "desktop", "mobile" + ], + "default": "default", + "examples": [ + "mobile" + ], + "category": "behavior" + }, + + "bordered": { + "extends": "bordered" + }, + + "elevated": { + "type": "Boolean", + "desc": "Adds a default shadow to the header", + "category": "style" + }, + + "persistent": { + "type": "Boolean", + "desc": "Prevents drawer from auto-closing when app's route changes", + "category": "behavior" + }, + + "show-if-above": { + "type": "Boolean", + "desc": "Forces drawer to be shown on screen on initial render if the layout width is above breakpoint, regardless of v-model; This is the default behavior when SSR is taken over by client on initial render", + "category": "behavior" + }, + + "content-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the drawer", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + + "content-style": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the drawer", + "examples": [ + "background-color: #ff0000", + ":content-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + + "no-swipe-open": { + "type": "Boolean", + "desc": "Disables the default behavior where drawer can be swiped into view; Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature", + "category": "behavior" + }, + + "no-swipe-close": { + "type": "Boolean", + "desc": "Disables the default behavior where drawer can be swiped out of view (applies to drawer content only); Useful for iOS platforms where it might interfere with Safari's 'swipe to go to previous/next page' feature", + "category": "behavior" + }, + + "no-swipe-backdrop": { + "type": "Boolean", + "desc": "Disables the default behavior where drawer backdrop can be swiped", + "category": "behavior", + "addedIn": "v1.1.7" + } + }, + + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component (overridden by 'mini' slot if used and drawer is in mini mode)" + }, + + "mini": { + "desc": "Content to show when in mini mode (overrides 'default' slot)" + } + }, + + "events": { + "on-layout": { + "desc": "Emitted when drawer toggles between occupying space on page or not", + "params": { + "state": { + "type": "Boolean", + "desc": "New state" + } + } + }, + + "click": { + "extends": "click", + "desc": "Emitted when user clicks/taps on the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode" + }, + + "mouseover": { + "extends": "click", + "desc": "Emitted when user moves mouse cursor over the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode" + }, + + "mouseout": { + "extends": "click", + "desc": "Emitted when user moves mouse cursor out of the component and drawer is NOT in mobile mode; Useful for when taking a decision to toggle mini mode" + }, + + "mini-state": { + "desc": "Emitted when drawer changes the mini-mode state (sometimes it is forced to do so)", + "params": { + "state": { + "type": "Boolean", + "desc": "New state" + } + }, + "addedIn": "v1.1.3" + } + } +} diff --git a/src/components/drawer/index.js b/src/components/drawer/index.js new file mode 100644 index 00000000000..95280cf1474 --- /dev/null +++ b/src/components/drawer/index.js @@ -0,0 +1,5 @@ +import QDrawer from './QDrawer.js' + +export { + QDrawer +} diff --git a/src/components/editor/QEditor.js b/src/components/editor/QEditor.js new file mode 100644 index 00000000000..58b8e4e9deb --- /dev/null +++ b/src/components/editor/QEditor.js @@ -0,0 +1,532 @@ +import Vue from 'vue' + +import KeyGroupNavigation from '../../directives/KeyGroupNavigation.js' + +import { getToolbar, getFonts, getLinkEditor } from './editor-utils.js' +import { Caret } from './editor-caret.js' + +import FullscreenMixin from '../../mixins/fullscreen.js' +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { isSSR } from '../../plugins/Platform.js' +import { stopAndPrevent } from '../../utils/event.js' +import extend from '../../utils/extend.js' +import { shouldIgnoreKey } from '../../utils/private/key-composition.js' + +export default Vue.extend({ + name: 'QEditor', + + mixins: [ ListenersMixin, FullscreenMixin, DarkMixin ], + + directives: { + KeyGroupNavigation + }, + + props: { + value: { + type: String, + required: true + }, + readonly: Boolean, + disable: Boolean, + minHeight: { + type: String, + default: '10rem' + }, + maxHeight: String, + height: String, + definitions: Object, + fonts: Object, + placeholder: String, + + toolbar: { + type: Array, + validator: v => v.length === 0 || v.every(group => group.length), + default () { + return [ + ['left', 'center', 'right', 'justify'], + ['bold', 'italic', 'underline', 'strike'], + ['undo', 'redo'] + ] + } + }, + toolbarColor: String, + toolbarBg: String, + toolbarTextColor: String, + toolbarToggleColor: { + type: String, + default: 'primary' + }, + toolbarOutline: Boolean, + toolbarPush: Boolean, + toolbarRounded: Boolean, + + paragraphTag: { + type: String, + validator: v => ['div', 'p'].includes(v), + default: 'div' + }, + + contentStyle: Object, + contentClass: [Object, Array, String], + + square: Boolean, + flat: Boolean, + dense: Boolean + }, + + computed: { + editable () { + return !this.readonly && !this.disable + }, + + hasToolbar () { + return this.toolbar && this.toolbar.length > 0 + }, + + toolbarBackgroundClass () { + if (this.toolbarBg) { + return `bg-${this.toolbarBg}` + } + }, + + buttonProps () { + const flat = this.toolbarOutline !== true && + this.toolbarPush !== true + + return { + type: 'a', + flat, + noWrap: true, + outline: this.toolbarOutline, + push: this.toolbarPush, + rounded: this.toolbarRounded, + dense: true, + color: this.toolbarColor, + disable: !this.editable, + size: 'sm' + } + }, + + buttonDef () { + const + e = this.$q.lang.editor, + i = this.$q.iconSet.editor + + return { + bold: { cmd: 'bold', icon: i.bold, tip: e.bold, key: 66 }, + italic: { cmd: 'italic', icon: i.italic, tip: e.italic, key: 73 }, + strike: { cmd: 'strikeThrough', icon: i.strikethrough, tip: e.strikethrough, key: 83 }, + underline: { cmd: 'underline', icon: i.underline, tip: e.underline, key: 85 }, + unordered: { cmd: 'insertUnorderedList', icon: i.unorderedList, tip: e.unorderedList }, + ordered: { cmd: 'insertOrderedList', icon: i.orderedList, tip: e.orderedList }, + subscript: { cmd: 'subscript', icon: i.subscript, tip: e.subscript, htmlTip: 'x2' }, + superscript: { cmd: 'superscript', icon: i.superscript, tip: e.superscript, htmlTip: 'x2' }, + link: { cmd: 'link', disable: vm => vm.caret && !vm.caret.can('link'), icon: i.hyperlink, tip: e.hyperlink, key: 76 }, + fullscreen: { cmd: 'fullscreen', icon: i.toggleFullscreen, tip: e.toggleFullscreen, key: 70 }, + viewsource: { cmd: 'viewsource', icon: i.viewSource, tip: e.viewSource }, + + quote: { cmd: 'formatBlock', param: 'BLOCKQUOTE', icon: i.quote, tip: e.quote, key: 81 }, + left: { cmd: 'justifyLeft', icon: i.left, tip: e.left }, + center: { cmd: 'justifyCenter', icon: i.center, tip: e.center }, + right: { cmd: 'justifyRight', icon: i.right, tip: e.right }, + justify: { cmd: 'justifyFull', icon: i.justify, tip: e.justify }, + + print: { type: 'no-state', cmd: 'print', icon: i.print, tip: e.print, key: 80 }, + outdent: { type: 'no-state', disable: vm => vm.caret && !vm.caret.can('outdent'), cmd: 'outdent', icon: i.outdent, tip: e.outdent }, + indent: { type: 'no-state', disable: vm => vm.caret && !vm.caret.can('indent'), cmd: 'indent', icon: i.indent, tip: e.indent }, + removeFormat: { type: 'no-state', cmd: 'removeFormat', icon: i.removeFormat, tip: e.removeFormat }, + hr: { type: 'no-state', cmd: 'insertHorizontalRule', icon: i.hr, tip: e.hr }, + undo: { type: 'no-state', cmd: 'undo', icon: i.undo, tip: e.undo, key: 90 }, + redo: { type: 'no-state', cmd: 'redo', icon: i.redo, tip: e.redo, key: 89 }, + + h1: { cmd: 'formatBlock', param: 'H1', icon: i.heading1 || i.heading, tip: e.heading1, htmlTip: `

${e.heading1}

` }, + h2: { cmd: 'formatBlock', param: 'H2', icon: i.heading2 || i.heading, tip: e.heading2, htmlTip: `

${e.heading2}

` }, + h3: { cmd: 'formatBlock', param: 'H3', icon: i.heading3 || i.heading, tip: e.heading3, htmlTip: `

${e.heading3}

` }, + h4: { cmd: 'formatBlock', param: 'H4', icon: i.heading4 || i.heading, tip: e.heading4, htmlTip: `

${e.heading4}

` }, + h5: { cmd: 'formatBlock', param: 'H5', icon: i.heading5 || i.heading, tip: e.heading5, htmlTip: `
${e.heading5}
` }, + h6: { cmd: 'formatBlock', param: 'H6', icon: i.heading6 || i.heading, tip: e.heading6, htmlTip: `
${e.heading6}
` }, + p: { cmd: 'formatBlock', param: this.paragraphTag.toUpperCase(), icon: i.heading, tip: e.paragraph }, + code: { cmd: 'formatBlock', param: 'PRE', icon: i.code, htmlTip: `${e.code}` }, + + 'size-1': { cmd: 'fontSize', param: '1', icon: i.size1 || i.size, tip: e.size1, htmlTip: `${e.size1}` }, + 'size-2': { cmd: 'fontSize', param: '2', icon: i.size2 || i.size, tip: e.size2, htmlTip: `${e.size2}` }, + 'size-3': { cmd: 'fontSize', param: '3', icon: i.size3 || i.size, tip: e.size3, htmlTip: `${e.size3}` }, + 'size-4': { cmd: 'fontSize', param: '4', icon: i.size4 || i.size, tip: e.size4, htmlTip: `${e.size4}` }, + 'size-5': { cmd: 'fontSize', param: '5', icon: i.size5 || i.size, tip: e.size5, htmlTip: `${e.size5}` }, + 'size-6': { cmd: 'fontSize', param: '6', icon: i.size6 || i.size, tip: e.size6, htmlTip: `${e.size6}` }, + 'size-7': { cmd: 'fontSize', param: '7', icon: i.size7 || i.size, tip: e.size7, htmlTip: `${e.size7}` } + } + }, + + buttons () { + const userDef = this.definitions || {} + const def = this.definitions || this.fonts + ? extend( + true, + {}, + this.buttonDef, + userDef, + getFonts( + this.defaultFont, + this.$q.lang.editor.defaultFont, + this.$q.iconSet.editor.font, + this.fonts + ) + ) + : this.buttonDef + + return this.toolbar.map( + group => group.map(token => { + if (token.options) { + return { + type: 'dropdown', + icon: token.icon, + label: token.label, + size: 'sm', + dense: true, + fixedLabel: token.fixedLabel, + fixedIcon: token.fixedIcon, + highlight: token.highlight, + list: token.list, + options: token.options.map(item => def[item]) + } + } + + const obj = def[token] + + if (obj) { + return obj.type === 'no-state' || (userDef[token] && ( + obj.cmd === void 0 || (this.buttonDef[obj.cmd] && this.buttonDef[obj.cmd].type === 'no-state') + )) + ? obj + : Object.assign({ type: 'toggle' }, obj) + } + else { + return { + type: 'slot', + slot: token + } + } + }) + ) + }, + + keys () { + const + k = {}, + add = btn => { + if (btn.key) { + k[btn.key] = { + cmd: btn.cmd, + param: btn.param + } + } + } + + this.buttons.forEach(group => { + group.forEach(token => { + if (token.options) { + token.options.forEach(add) + } + else { + add(token) + } + }) + }) + return k + }, + + innerStyle () { + return this.inFullscreen + ? this.contentStyle + : [ + { + minHeight: this.minHeight, + height: this.height, + maxHeight: this.maxHeight + }, + this.contentStyle + ] + }, + + classes () { + return `q-editor q-editor--${this.isViewingSource === true ? 'source' : 'default'}` + + (this.disable === true ? ' disabled' : '') + + (this.inFullscreen === true ? ' fullscreen column' : '') + + (this.square === true ? ' q-editor--square no-border-radius' : '') + + (this.flat === true ? ' q-editor--flat' : '') + + (this.dense === true ? ' q-editor--dense' : '') + + ` q-editor--${this.darkSuffix} q-${this.darkSuffix}` + }, + + innerClass () { + return [ + this.contentClass, + { col: this.inFullscreen, 'overflow-auto': this.inFullscreen || this.maxHeight } + ] + }, + + attrs () { + if (this.disable === true) { + return { 'aria-disabled': 'true' } + } + if (this.readonly === true) { + return { 'aria-readonly': 'true' } + } + }, + + onEditor () { + return { + focusin: this.__onFocusin, + focusout: this.__onFocusout + } + } + }, + + data () { + return { + lastEmit: this.value, + editLinkUrl: null, + isViewingSource: false + } + }, + + watch: { + value (v) { + if (this.lastEmit !== v) { + this.lastEmit = v + this.__setContent(v, true) + } + } + }, + + methods: { + __onInput () { + if (this.$refs.content !== void 0) { + const val = this.isViewingSource === true + ? this.$refs.content.innerText + : this.$refs.content.innerHTML + + if (val !== this.value) { + this.lastEmit = val + this.$emit('input', val) + } + } + }, + + __onKeydown (e) { + this.$emit('keydown', e) + + if (e.ctrlKey !== true || shouldIgnoreKey(e) === true) { + this.refreshToolbar() + this.$q.platform.is.ie && this.$nextTick(this.__onInput) + return + } + + const key = e.keyCode + const target = this.keys[key] + if (target !== void 0) { + const { cmd, param } = target + stopAndPrevent(e) + this.runCmd(cmd, param, false) + } + }, + + __onClick (e) { + this.refreshToolbar() + this.$emit('click', e) + }, + + __onBlur (e) { + if (this.$refs.content !== void 0) { + const { scrollTop, scrollHeight } = this.$refs.content + this.__offsetBottom = scrollHeight - scrollTop + } + this.$q.platform.is.ie !== true && this.caret.save() + this.$emit('blur', e) + }, + + __onFocus (e) { + this.$nextTick(() => { + if (this.$refs.content !== void 0 && this.__offsetBottom !== void 0) { + this.$refs.content.scrollTop = this.$refs.content.scrollHeight - this.__offsetBottom + } + }) + this.$emit('focus', e) + }, + + __onFocusin (e) { + if ( + this.$el.contains(e.target) === true && + ( + e.relatedTarget === null || + this.$el.contains(e.relatedTarget) !== true + ) + ) { + const prop = `inner${this.isViewingSource === true ? 'Text' : 'HTML'}` + this.caret.restorePosition(this.$refs.content[prop].length) + this.refreshToolbar() + } + }, + + __onFocusout (e) { + if ( + this.$el.contains(e.target) === true && + ( + e.relatedTarget === null || + this.$el.contains(e.relatedTarget) !== true + ) + ) { + this.caret.savePosition() + this.refreshToolbar() + } + }, + + // mousedown, touchstart + __onPointerStart (e) { + this.__offsetBottom = void 0 + this.qListeners[e.type] !== void 0 && this.$emit(e.type, e) + }, + + __onSelectionchange () { + this.caret.save() + }, + + runCmd (cmd, param, update = true) { + this.focus() + this.caret.restore() + this.caret.apply(cmd, param, () => { + this.focus() + this.caret.save() + if (this.$q.platform.is.ie === true || this.$q.platform.is.edge === true) { + this.$nextTick(this.__onInput) + } + if (update) { + this.refreshToolbar() + } + }) + }, + + refreshToolbar () { + setTimeout(() => { + this.editLinkUrl = null + this.$forceUpdate() + }, 1) + }, + + focus () { + this.$refs.content !== void 0 && this.$refs.content.focus({ preventScroll: true }) + }, + + getContentEl () { + return this.$refs.content + }, + + __setContent (v, restorePosition) { + if (this.$refs.content !== void 0) { + if (restorePosition === true) { + this.caret.savePosition() + } + + const prop = `inner${this.isViewingSource === true ? 'Text' : 'HTML'}` + this.$refs.content[prop] = v + + if (restorePosition === true) { + this.caret.restorePosition(this.$refs.content[prop].length) + this.refreshToolbar() + } + } + } + }, + + created () { + if (isSSR === false) { + document.execCommand('defaultParagraphSeparator', false, this.paragraphTag) + this.defaultFont = window.getComputedStyle(document.body).fontFamily + } + }, + + mounted () { + this.caret = new Caret(this.$refs.content, this) + this.__setContent(this.value) + this.refreshToolbar() + + document.addEventListener('selectionchange', this.__onSelectionchange) + }, + + beforeDestroy () { + document.removeEventListener('selectionchange', this.__onSelectionchange) + }, + + render (h) { + let toolbars + + if (this.hasToolbar) { + const bars = [ + h('div', { + key: 'qedt_top', + staticClass: 'q-editor__toolbar row no-wrap scroll-x', + class: this.toolbarBackgroundClass + }, getToolbar(h, this)) + ] + + this.editLinkUrl !== null && bars.push( + h('div', { + key: 'qedt_btm', + staticClass: 'q-editor__toolbar row no-wrap items-center scroll-x', + class: this.toolbarBackgroundClass + }, getLinkEditor(h, this, this.$q.platform.is.ie)) + ) + + toolbars = h('div', { + key: 'toolbar_ctainer', + staticClass: 'q-editor__toolbars-container relative-position', + directives: [ KeyGroupNavigation ] + }, bars) + } + + const on = { + ...this.qListeners, + input: this.__onInput, + keydown: this.__onKeydown, + click: this.__onClick, + blur: this.__onBlur, + focus: this.__onFocus, + + // clean saved scroll position + mousedown: this.__onPointerStart, + touchstart: this.__onPointerStart + } + + return h('div', { + style: { + height: this.inFullscreen === true ? '100%' : null + }, + class: this.classes, + attrs: this.attrs, + on: this.onEditor + }, [ + toolbars, + + h( + 'div', + { + ref: 'content', + staticClass: 'q-editor__content', + style: this.innerStyle, + class: this.innerClass, + attrs: { + contenteditable: this.editable, + placeholder: this.placeholder + }, + domProps: isSSR + ? { innerHTML: this.value } + : void 0, + on + } + ) + ]) + } +}) diff --git a/src/components/editor/QEditor.json b/src/components/editor/QEditor.json new file mode 100644 index 00000000000..00b7895a7f5 --- /dev/null +++ b/src/components/editor/QEditor.json @@ -0,0 +1,305 @@ +{ + "mixins": [ "mixins/fullscreen" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/editor" + }, + + "props": { + "value": { + "type": "String", + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "required": true, + "examples": [ + "v-model=\"content\"" + ], + "category": "model" + }, + + "readonly": { + "extends": "readonly" + }, + + "square": { + "extends": "square" + }, + + "flat": { + "extends": "flat", + "desc": "Applies a 'flat' design (no borders)" + }, + + "dense": { + "extends": "dense", + "desc": "Dense mode; toolbar buttons are shown on one-line only" + }, + + "dark": { + "extends": "dark", + "addedIn": "v1.3" + }, + + "disable": { + "extends": "disable" + }, + + "min-height": { + "type": "String", + "desc": "CSS unit for the minimum height of the editable area", + "default": "10rem", + "examples": [ + "15rem", "50vh" + ], + "category": "style" + }, + + "max-height": { + "type": "String", + "desc": "CSS unit for maximum height of the input area", + "examples": [ + "1000px", "90vh" + ], + "category": "style" + }, + + "height": { + "type": "String", + "desc": "CSS value to set the height of the editable area", + "examples": [ + "100px", "50vh" + ], + "category": "style" + }, + + "definitions": { + "type": "Object", + "desc": "Definition of commands and their buttons to be included in the 'toolbar' prop", + "examples": [ + ":definitions=\"{ save: { tip: 'Save your work', icon: 'save', label: 'Save', handler: saveWork }, upload: { tip: 'Upload to cloud', icon: 'cloud_upload', label: 'Upload', handler: uploadIt } }\"" + ], + "definition": { + "label": { + "type": "String", + "desc": "Label of the button", + "examples": [ "Addresses" ] + }, + "tip": { + "type": "String", + "desc": "Text to be displayed as a tooltip on hover", + "examples": [ "Add a contact from the Address Book" ] + }, + "htmlTip": { + "type": "String", + "desc": "HTML formatted text to be displayed within a tooltip on hover", + "examples": [ "Add a user from the address book" ] + }, + "icon": { + "type": "String", + "desc": "Icon of the button", + "examples": [ "fas fa-address-book" ] + }, + "key": { + "type": "Number", + "desc": "Keycode of a key to be used together with the key for use as a shortcut to trigger this element", + "examples": [ "12", "36" ] + }, + "handler": { + "type": "Function", + "desc": "Either this or \"cmd\" is required. Function for when button gets clicked/tapped.", + "params": null, + "returns": null, + "examples": [ "() => this.uploadFile()" ] + }, + "cmd": { + "type": "String", + "desc": "Either this or \"handler\" is required. This must be a valid execCommand method according to the designMode API.", + "examples": [ "insertHTML", "justifyFull" ] + }, + "param": { + "type": "String", + "desc": "Only set a param if using a \"cmd\". This is commonly text or HTML to inject, but is highly dependent upon the specific cmd being called.", + "examples": [ "\"nice" ] + }, + "disable": { + "type": [ "Boolean", "Function" ], + "desc": "Is button disabled? If specifying a function, return a Boolean value.", + "examples": [ "() => this.userIsActive()" ] + }, + "type": { + "type": "String", + "desc": "Pass the value \"no-state\" if the button should not have an \"active\" state", + "values": [ null, "no-state" ], + "examples": [ "no-state" ] + }, + "fixedLabel": { + "type": "Boolean", + "desc": "Lock the button label, so it doesn't change based on the child option selected." + }, + "fixedIcon": { + "type": "Boolean", + "desc": "Lock the button icon, so it doesn't change based on the child option selected." + }, + "highlight": { + "type": "Boolean", + "desc": "Highlight the toolbar button, when a child option has been selected." + } + }, + "category": "toolbar" + }, + + "fonts": { + "type": "Object", + "desc": "Object with definitions of fonts", + "examples": [ + ":fonts=\"{ arial: 'Arial', arial_black: 'Arial Black', comic_sans: 'Comic Sans MS' }\"" + ], + "category": "toolbar" + }, + + "toolbar": { + "type": "Array", + "desc": "An array of arrays of Objects/Strings that you use to define the construction of the elements and commands available in the toolbar", + "default": [ + [ "left", "center", "right", "justify" ], + [ "bold", "italic", "underline", "strike" ], + [ "undo", "redo" ] + ], + "examples": [ + [ "left", "center", "right", "justify" ] + ], + "category": "toolbar" + }, + + "toolbar-color": { + "extends": "color", + "desc": "Font color (from the Quasar Palette) of buttons and text in the toolbar", + "category": "toolbar" + }, + + "toolbar-text-color": { + "extends": "text-color", + "desc": "Text color (from the Quasar Palette) of toolbar commands", + "category": "toolbar" + }, + + "toolbar-toggle-color": { + "type": "String", + "desc": "Choose the active color (from the Quasar Palette) of toolbar commands button", + "default": "primary", + "examples": [ "secondary", "blue-3" ], + "category": "toolbar" + }, + + "toolbar-bg": { + "type": "String", + "desc": "Toolbar background color (from Quasar Palette)", + "default": "grey-3", + "examples": [ "secondary", "blue-3" ], + "category": "toolbar" + }, + + "toolbar-outline": { + "type": "Boolean", + "desc": "Toolbar buttons are rendered \"outlined\"", + "category": "toolbar|style" + }, + + "toolbar-push": { + "type": "Boolean", + "desc": "Toolbar buttons are rendered as a \"push-button\" type", + "category": "toolbar|style" + }, + + "toolbar-rounded": { + "type": "Boolean", + "desc": "Toolbar buttons are rendered \"rounded\"", + "category": "toolbar|style" + }, + + "paragraph-tag": { + "type": "String", + "desc": "Paragraph tag to be used", + "values": [ "div", "p" ], + "category": "behavior", + "addedIn": "v1.14.4" + }, + + "content-style": { + "type": "Object", + "desc": "Object with CSS properties and values for styling the container of QEditor", + "examples": [ ":content-style=\"{ backgroundColor: '#C0C0C0' }\"" ], + "category": "style" + }, + + "content-class": { + "type": [ "Object", "Array", "String" ], + "desc": "CSS classes for the input area", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + + "placeholder": { + "type": "String", + "desc": "Text to display as placeholder", + "examples": [ "Type your story here ..." ], + "category": "content", + "addedIn": "v1.9.12" + } + }, + + "events": { + "input": { + "extends": "input", + "params": { + "value": { + "type": "String", + "desc": "The pure HTML of the content" + } + } + } + }, + + "methods": { + "runCmd": { + "desc": "Run contentEditable command at caret position and range", + "params": { + "cmd": { + "type": "String", + "desc": "Must be a valid execCommand method according to the designMode API", + "examples": [ "copy", "cut", "paste" ], + "required": true + }, + "param": { + "type": "String", + "desc": "The argument to pass to the command", + "examples": [ "Small Text" ] + }, + "update": { + "type": "Boolean", + "desc": "Refresh the toolbar", + "default": true + } + } + }, + + "refreshToolbar": { + "desc": "Hide the link editor if visible and force the instance to re-render" + }, + + "focus": { + "desc": "Focus on the contentEditable at saved cursor position" + }, + + "getContentEl": { + "desc": "Retrieve the content of the Editor", + "returns": { + "type": "Element", + "desc": "Provides the pure HTML within the editable area", + "__exemption": [ "examples" ] + } + } + } +} diff --git a/src/components/editor/QEditor.sass b/src/components/editor/QEditor.sass new file mode 100644 index 00000000000..69b6f0587c8 --- /dev/null +++ b/src/components/editor/QEditor.sass @@ -0,0 +1,107 @@ +.q-editor + border: 1px solid $editor-border-color + border-radius: $generic-border-radius + + &.disabled + border-style: dashed + + &.fullscreen + max-height: 100% + + > div:first-child, + &__toolbars-container, + &__toolbars-container > div:first-child + border-top-left-radius: inherit + border-top-right-radius: inherit + + &__toolbars-container + max-width: 100% + + &__content + outline: 0 + padding: $editor-content-padding + min-height: $editor-content-min-height + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + overflow: auto + max-width: 100% + + pre + white-space: pre-wrap + + hr + border: 0 + outline: 0 + margin: 1px + height: 1px + background: $editor-hr-color + + &:empty:not(:focus):before + content: attr(placeholder) + opacity: .7 + + &__toolbar + border-bottom: 1px solid $editor-border-color + min-height: 32px + + .q-btn + margin: $editor-button-gutter + + &__toolbar-group + position: relative + margin: 0 $editor-button-gutter + & + & + &:before + content: '' + position: absolute + left: (- $editor-button-gutter) + top: $editor-button-gutter + bottom: $editor-button-gutter + width: 1px + background: $editor-border-color + + &__link-input + color: inherit + text-decoration: none + text-transform: none + border: none + border-radius: 0 + background: none + outline: 0 + + &--flat + &, .q-editor__toolbar + border: 0 + + &--dense + .q-editor__toolbar-group + display: flex + align-items: center + flex-wrap: nowrap + + &--dark + border-color: $editor-border-dark-color + + .q-editor + &__content hr + background: $editor-hr-dark-color + + &__toolbar + border-color: $editor-border-dark-color + + .q-editor__toolbar-group + .q-editor__toolbar-group:before + background: $editor-border-dark-color + +@media (prefers-color-scheme: dark) + .q-editor--dark-auto + border-color: $editor-border-dark-color + + .q-editor + &__content hr + background: $editor-hr-dark-color + + &__toolbar + border-color: $editor-border-dark-color + + .q-editor__toolbar-group + .q-editor__toolbar-group:before + background: $editor-border-dark-color diff --git a/src/components/editor/QEditor.styl b/src/components/editor/QEditor.styl new file mode 100644 index 00000000000..69b6f0587c8 --- /dev/null +++ b/src/components/editor/QEditor.styl @@ -0,0 +1,107 @@ +.q-editor + border: 1px solid $editor-border-color + border-radius: $generic-border-radius + + &.disabled + border-style: dashed + + &.fullscreen + max-height: 100% + + > div:first-child, + &__toolbars-container, + &__toolbars-container > div:first-child + border-top-left-radius: inherit + border-top-right-radius: inherit + + &__toolbars-container + max-width: 100% + + &__content + outline: 0 + padding: $editor-content-padding + min-height: $editor-content-min-height + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + overflow: auto + max-width: 100% + + pre + white-space: pre-wrap + + hr + border: 0 + outline: 0 + margin: 1px + height: 1px + background: $editor-hr-color + + &:empty:not(:focus):before + content: attr(placeholder) + opacity: .7 + + &__toolbar + border-bottom: 1px solid $editor-border-color + min-height: 32px + + .q-btn + margin: $editor-button-gutter + + &__toolbar-group + position: relative + margin: 0 $editor-button-gutter + & + & + &:before + content: '' + position: absolute + left: (- $editor-button-gutter) + top: $editor-button-gutter + bottom: $editor-button-gutter + width: 1px + background: $editor-border-color + + &__link-input + color: inherit + text-decoration: none + text-transform: none + border: none + border-radius: 0 + background: none + outline: 0 + + &--flat + &, .q-editor__toolbar + border: 0 + + &--dense + .q-editor__toolbar-group + display: flex + align-items: center + flex-wrap: nowrap + + &--dark + border-color: $editor-border-dark-color + + .q-editor + &__content hr + background: $editor-hr-dark-color + + &__toolbar + border-color: $editor-border-dark-color + + .q-editor__toolbar-group + .q-editor__toolbar-group:before + background: $editor-border-dark-color + +@media (prefers-color-scheme: dark) + .q-editor--dark-auto + border-color: $editor-border-dark-color + + .q-editor + &__content hr + background: $editor-hr-dark-color + + &__toolbar + border-color: $editor-border-dark-color + + .q-editor__toolbar-group + .q-editor__toolbar-group:before + background: $editor-border-dark-color diff --git a/src/components/editor/editor-caret.js b/src/components/editor/editor-caret.js new file mode 100644 index 00000000000..0449b1ce51a --- /dev/null +++ b/src/components/editor/editor-caret.js @@ -0,0 +1,365 @@ +import { noop } from '../../utils/event.js' + +function getBlockElement (el, parent) { + if (parent && el === parent) { + return null + } + + const nodeName = el.nodeName.toLowerCase() + + if (['div', 'li', 'ul', 'ol', 'blockquote'].includes(nodeName) === true) { + return el + } + + const + style = window.getComputedStyle + ? window.getComputedStyle(el) + : el.currentStyle, + display = style.display + + if (display === 'block' || display === 'table') { + return el + } + + return getBlockElement(el.parentNode) +} + +function isChildOf (el, parent, orSame) { + return !el || el === document.body + ? false + : (orSame === true && el === parent) || (parent === document ? document.body : parent).contains(el.parentNode) +} + +function createRange (node, chars, range) { + if (!range) { + range = document.createRange() + range.selectNode(node) + range.setStart(node, 0) + } + + if (chars.count === 0) { + range.setEnd(node, chars.count) + } + else if (chars.count > 0) { + if (node.nodeType === Node.TEXT_NODE) { + if (node.textContent.length < chars.count) { + chars.count -= node.textContent.length + } + else { + range.setEnd(node, chars.count) + chars.count = 0 + } + } + else { + for (let lp = 0; chars.count !== 0 && lp < node.childNodes.length; lp++) { + range = createRange(node.childNodes[lp], chars, range) + } + } + } + + return range +} + +const urlRegex = /^https?:\/\// + +export class Caret { + constructor (el, vm) { + this.el = el + this.vm = vm + this._range = null + } + + get selection () { + if (this.el) { + const sel = document.getSelection() + + // only when the selection in element + if (isChildOf(sel.anchorNode, this.el, true) && isChildOf(sel.focusNode, this.el, true)) { + return sel + } + } + + return null + } + + get hasSelection () { + return this.selection !== null + ? this.selection.toString().length > 0 + : false + } + + get range () { + const sel = this.selection + + if (sel !== null && sel.rangeCount) { + return sel.getRangeAt(0) + } + + return this._range + } + + get parent () { + const range = this.range + + if (range !== null) { + const node = range.startContainer + + return node.nodeType === document.ELEMENT_NODE + ? node + : node.parentNode + } + + return null + } + + get blockParent () { + const parent = this.parent + + if (parent !== null) { + return getBlockElement(parent, this.el) + } + + return null + } + + save (range = this.range) { + if (range !== null) { + this._range = range + } + } + + restore (range = this._range) { + const + r = document.createRange(), + sel = document.getSelection() + + if (range !== null) { + r.setStart(range.startContainer, range.startOffset) + r.setEnd(range.endContainer, range.endOffset) + sel.removeAllRanges() + sel.addRange(r) + } + else { + sel.selectAllChildren(this.el) + sel.collapseToEnd() + } + } + + savePosition () { + let charCount = -1, node + const + selection = document.getSelection(), + parentEl = this.el.parentNode + + if (selection.focusNode && isChildOf(selection.focusNode, parentEl)) { + node = selection.focusNode + charCount = selection.focusOffset + + while (node && node !== parentEl) { + if (node !== this.el && node.previousSibling) { + node = node.previousSibling + charCount += node.textContent.length + } + else { + node = node.parentNode + } + } + } + + this.savedPos = charCount + } + + restorePosition (length = 0) { + if (this.savedPos > 0 && this.savedPos < length) { + const + selection = window.getSelection(), + range = createRange(this.el, { count: this.savedPos }) + + if (range) { + range.collapse(false) + selection.removeAllRanges() + selection.addRange(range) + } + } + } + + hasParent (name, spanLevel) { + const el = spanLevel + ? this.parent + : this.blockParent + + return el !== null + ? el.nodeName.toLowerCase() === name.toLowerCase() + : false + } + + hasParents (list, recursive, el = this.parent) { + if (el === null) { + return false + } + + if (list.includes(el.nodeName.toLowerCase()) === true) { + return true + } + + return recursive === true + ? this.hasParents(list, recursive, el.parentNode) + : false + } + + is (cmd, param) { + if (this.selection === null) { + return false + } + + switch (cmd) { + case 'formatBlock': + if (param === 'DIV' && this.parent === this.el) { + return true + } + return this.hasParent(param, param === 'PRE') + case 'link': + return this.hasParent('A', true) + case 'fontSize': + return document.queryCommandValue(cmd) === param + case 'fontName': + const res = document.queryCommandValue(cmd) + return res === `"${param}"` || res === param + case 'fullscreen': + return this.vm.inFullscreen + case 'viewsource': + return this.vm.isViewingSource + case void 0: + return false + default: + const state = document.queryCommandState(cmd) + return param !== void 0 ? state === param : state + } + } + + getParentAttribute (attrib) { + if (this.parent !== null) { + return this.parent.getAttribute(attrib) + } + + return null + } + + can (name) { + if (name === 'outdent') { + return this.hasParents(['blockquote', 'li'], true) + } + + if (name === 'indent') { + return this.hasParents(['li'], true) + } + + if (name === 'link') { + return this.selection !== null || this.is('link') + } + } + + apply (cmd, param, done = noop) { + if (cmd === 'formatBlock') { + if (['BLOCKQUOTE', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(param) && this.is(cmd, param)) { + cmd = 'outdent' + param = null + } + + if (param === 'PRE' && this.is(cmd, 'PRE')) { + param = 'P' + } + } + else if (cmd === 'print') { + done() + + const win = window.open() + + win.document.write(` + + + + Print - ${document.title} + + +
${this.el.innerHTML}
+ + + `) + win.print() + win.close() + + return + } + else if (cmd === 'link') { + const link = this.getParentAttribute('href') + + if (link === null) { + const selection = this.selectWord(this.selection) + const url = selection ? selection.toString() : '' + + if (!url.length) { + if (!this.range || !this.range.cloneContents().querySelector('img')) { + return + } + } + + this.vm.editLinkUrl = urlRegex.test(url) ? url : 'https://' + document.execCommand('createLink', false, this.vm.editLinkUrl) + + this.save(selection.getRangeAt(0)) + } + else { + this.vm.editLinkUrl = link + + this.range.selectNodeContents(this.parent) + this.save() + } + + return + } + else if (cmd === 'fullscreen') { + this.vm.toggleFullscreen() + done() + + return + } + else if (cmd === 'viewsource') { + this.vm.isViewingSource = this.vm.isViewingSource === false + this.vm.__setContent(this.vm.value) + done() + + return + } + + document.execCommand(cmd, false, param) + + done() + } + + selectWord (sel) { + if (sel === null || sel.isCollapsed !== true || /* IE 11 */ sel.modify === void 0) { + return sel + } + + // Detect if selection is backwards + const range = document.createRange() + range.setStart(sel.anchorNode, sel.anchorOffset) + range.setEnd(sel.focusNode, sel.focusOffset) + const direction = range.collapsed ? ['backward', 'forward'] : ['forward', 'backward'] + range.detach() + + // modify() works on the focus of the selection + const + endNode = sel.focusNode, + endOffset = sel.focusOffset + sel.collapse(sel.anchorNode, sel.anchorOffset) + sel.modify('move', direction[0], 'character') + sel.modify('move', direction[1], 'word') + sel.extend(endNode, endOffset) + sel.modify('extend', direction[1], 'character') + sel.modify('extend', direction[0], 'word') + + return sel + } +} diff --git a/src/components/editor/editor-utils.js b/src/components/editor/editor-utils.js new file mode 100644 index 00000000000..134c778f7af --- /dev/null +++ b/src/components/editor/editor-utils.js @@ -0,0 +1,322 @@ +import QBtn from '../btn/QBtn.js' +import QBtnDropdown from '../btn-dropdown/QBtnDropdown.js' +import QIcon from '../icon/QIcon.js' +import QTooltip from '../tooltip/QTooltip.js' +import QList from '../item/QList.js' +import QItem from '../item/QItem.js' +import QItemSection from '../item/QItemSection.js' + +import { prevent, stop } from '../../utils/event.js' +import { slot } from '../../utils/private/slot.js' +import { shouldIgnoreKey } from '../../utils/private/key-composition.js' + +function run (e, btn, vm) { + if (btn.handler) { + btn.handler(e, vm, vm.caret) + } + else { + vm.runCmd(btn.cmd, btn.param) + } +} + +function __getGroup (h, children) { + return h('div', { + staticClass: 'q-editor__toolbar-group' + }, children) +} + +function getBtn (h, vm, btn, clickHandler, active = false) { + const + toggled = active || (btn.type === 'toggle' + ? (btn.toggled ? btn.toggled(vm) : btn.cmd && vm.caret.is(btn.cmd, btn.param)) + : false), + child = [], + events = { + click (e) { + clickHandler && clickHandler() + run(e, btn, vm) + } + } + + if (btn.tip && vm.$q.platform.is.desktop) { + const Key = btn.key + ? h('div', [h('small', `(CTRL + ${String.fromCharCode(btn.key)})`)]) + : null + child.push( + h(QTooltip, { props: { delay: 1000 } }, [ + h('div', { domProps: { innerHTML: btn.tip } }), + Key + ]) + ) + } + + return h(QBtn, { + props: { + ...vm.buttonProps, + icon: btn.icon !== null ? btn.icon : void 0, + color: toggled ? btn.toggleColor || vm.toolbarToggleColor : btn.color || vm.toolbarColor, + textColor: toggled && !vm.toolbarPush ? null : btn.textColor || vm.toolbarTextColor, + label: btn.label, + disable: btn.disable ? (typeof btn.disable === 'function' ? btn.disable(vm) : true) : false, + size: 'sm' + }, + on: events + }, child) +} + +function getDropdown (h, vm, btn) { + const onlyIcons = btn.list === 'only-icons' + let + label = btn.label, + icon = btn.icon !== null ? btn.icon : void 0, + contentClass, + Items + + function closeDropdown () { + Dropdown.componentInstance.hide() + } + + if (onlyIcons) { + Items = btn.options.map(btn => { + const active = btn.type === void 0 + ? vm.caret.is(btn.cmd, btn.param) + : false + + if (active) { + label = btn.tip + icon = btn.icon !== null ? btn.icon : void 0 + } + return getBtn(h, vm, btn, closeDropdown, active) + }) + contentClass = vm.toolbarBackgroundClass + Items = [ + __getGroup(h, Items) + ] + } + else { + const activeClass = vm.toolbarToggleColor !== void 0 + ? `text-${vm.toolbarToggleColor}` + : null + const inactiveClass = vm.toolbarTextColor !== void 0 + ? `text-${vm.toolbarTextColor}` + : null + + const noIcons = btn.list === 'no-icons' + + Items = btn.options.map(btn => { + const disable = btn.disable ? btn.disable(vm) : false + const active = btn.type === void 0 + ? vm.caret.is(btn.cmd, btn.param) + : false + + if (active) { + label = btn.tip + icon = btn.icon !== null ? btn.icon : void 0 + } + + const htmlTip = btn.htmlTip + + return h( + QItem, + { + props: { active, activeClass, clickable: true, disable: disable, dense: true }, + on: { + click (e) { + closeDropdown() + vm.$refs.content && vm.$refs.content.focus() + vm.caret.restore() + run(e, btn, vm) + } + } + }, + [ + noIcons === true + ? null + : h(QItemSection, { + class: active ? activeClass : inactiveClass, + props: { side: true } + }, [ + h(QIcon, { props: { name: btn.icon !== null ? btn.icon : void 0 } }) + ]), + + h(QItemSection, [ + htmlTip + ? h('div', { + staticClass: 'text-no-wrap', + domProps: { innerHTML: btn.htmlTip } + }) + : ( + btn.tip + ? h('div', { staticClass: 'text-no-wrap' }, [ btn.tip ]) + : null + ) + ]) + ] + ) + }) + contentClass = [vm.toolbarBackgroundClass, inactiveClass] + Items = [ + h(QList, [ Items ]) + ] + } + + const highlight = btn.highlight && label !== btn.label + const Dropdown = h( + QBtnDropdown, + { + props: { + ...vm.buttonProps, + noCaps: true, + noWrap: true, + color: highlight ? vm.toolbarToggleColor : vm.toolbarColor, + textColor: highlight && !vm.toolbarPush ? null : vm.toolbarTextColor, + label: btn.fixedLabel ? btn.label : label, + icon: btn.fixedIcon ? (btn.icon !== null ? btn.icon : void 0) : icon, + contentClass + } + }, + Items + ) + return Dropdown +} + +export function getToolbar (h, vm) { + if (vm.caret) { + return vm.buttons + .filter(f => { + return !vm.isViewingSource || f.find(fb => fb.cmd === 'viewsource') + }) + .map(group => __getGroup( + h, + group.map(btn => { + if (vm.isViewingSource && btn.cmd !== 'viewsource') { + return false + } + + if (btn.type === 'slot') { + return slot(vm, btn.slot) + } + + if (btn.type === 'dropdown') { + return getDropdown(h, vm, btn) + } + + return getBtn(h, vm, btn) + }) + )) + } +} + +export function getFonts (defaultFont, defaultFontLabel, defaultFontIcon, fonts = {}) { + const aliases = Object.keys(fonts) + if (aliases.length === 0) { + return {} + } + + const def = { + default_font: { + cmd: 'fontName', + param: defaultFont, + icon: defaultFontIcon, + tip: defaultFontLabel + } + } + + aliases.forEach(alias => { + const name = fonts[alias] + def[alias] = { + cmd: 'fontName', + param: name, + icon: defaultFontIcon, + tip: name, + htmlTip: `${name}` + } + }) + + return def +} + +export function getLinkEditor (h, vm, ie11) { + if (vm.caret) { + const color = vm.toolbarColor || vm.toolbarTextColor + let link = vm.editLinkUrl + const updateLink = () => { + vm.caret.restore() + + if (link !== vm.editLinkUrl) { + document.execCommand('createLink', false, link === '' ? ' ' : link) + } + + vm.editLinkUrl = null + + ie11 === true && vm.$nextTick(vm.__onInput) + } + + return [ + h('div', { staticClass: 'q-mx-xs', 'class': `text-${color}` }, [`${vm.$q.lang.editor.url}: `]), + h('input', { + key: 'qedt_btm_input', + staticClass: 'col q-editor__link-input', + domProps: { + value: link + }, + on: { + input: e => { + stop(e) + link = e.target.value + }, + keydown: event => { + if (shouldIgnoreKey(event) === true) { + return + } + + switch (event.keyCode) { + case 13: // ENTER key + prevent(event) + return updateLink() + case 27: // ESCAPE key + prevent(event) + vm.caret.restore() + if (!vm.editLinkUrl || vm.editLinkUrl === 'https://') { + document.execCommand('unlink') + } + vm.editLinkUrl = null + break + } + } + } + }), + __getGroup(h, [ + h(QBtn, { + key: 'qedt_btm_rem', + attrs: { tabindex: -1 }, + props: { + ...vm.buttonProps, + label: vm.$q.lang.label.remove, + noCaps: true + }, + on: { + click: () => { + vm.caret.restore() + document.execCommand('unlink') + vm.editLinkUrl = null + + ie11 === true && vm.$nextTick(vm.__onInput) + } + } + }), + h(QBtn, { + key: 'qedt_btm_upd', + props: { + ...vm.buttonProps, + label: vm.$q.lang.label.update, + noCaps: true + }, + on: { + click: updateLink + } + }) + ]) + ] + } +} diff --git a/src/components/editor/index.js b/src/components/editor/index.js new file mode 100644 index 00000000000..367aca3184c --- /dev/null +++ b/src/components/editor/index.js @@ -0,0 +1,5 @@ +import QEditor from './QEditor.js' + +export { + QEditor +} diff --git a/src/components/expansion-item/QExpansionItem.js b/src/components/expansion-item/QExpansionItem.js new file mode 100644 index 00000000000..442e414cb9f --- /dev/null +++ b/src/components/expansion-item/QExpansionItem.js @@ -0,0 +1,365 @@ +import Vue from 'vue' + +import QItem from '../item/QItem.js' +import QItemSection from '../item/QItemSection.js' +import QItemLabel from '../item/QItemLabel.js' +import QIcon from '../icon/QIcon.js' +import QSlideTransition from '../slide-transition/QSlideTransition.js' +import QSeparator from '../separator/QSeparator.js' + +import { routerLinkProps } from '../../mixins/router-link.js' +import TimeoutMixin from '../../mixins/timeout.js' +import ModelToggleMixin from '../../mixins/model-toggle.js' +import DarkMixin from '../../mixins/dark.js' + +import { stopAndPrevent } from '../../utils/event.js' +import { slot } from '../../utils/private/slot.js' +import cache from '../../utils/private/cache.js' +import uid from '../../utils/uid.js' + +const eventName = 'q:expansion-item:close' +const LINK_PROPS = Object.keys(routerLinkProps) + +export default Vue.extend({ + name: 'QExpansionItem', + + mixins: [ DarkMixin, TimeoutMixin, ModelToggleMixin ], + + props: { + ...routerLinkProps, + + icon: String, + + label: String, + labelLines: [ Number, String ], + + caption: String, + captionLines: [ Number, String ], + + dense: Boolean, + + toggleAriaLabel: String, + expandIcon: String, + expandedIcon: String, + expandIconClass: [ Array, String, Object ], + duration: Number, + + headerInsetLevel: Number, + contentInsetLevel: Number, + + expandSeparator: Boolean, + defaultOpened: Boolean, + hideExpandIcon: Boolean, + expandIconToggle: Boolean, + switchToggleSide: Boolean, + denseToggle: Boolean, + group: String, + popup: Boolean, + + headerStyle: [Array, String, Object], + headerClass: [Array, String, Object] + }, + + data () { + return { + showing: this.value !== void 0 + ? this.value + : this.defaultOpened + } + }, + + watch: { + showing (val) { + if (val === true) { + this.shouldRenderContent !== true && (this.shouldRenderContent = true) + this.group !== void 0 && this.$root.$emit(eventName, this) + } + }, + + group (newVal, oldVal) { + if (newVal !== void 0 && oldVal === void 0) { + this.$root.$on(eventName, this.__eventHandler) + } + else if (newVal === void 0 && oldVal !== void 0) { + this.$root.$off(eventName, this.__eventHandler) + } + } + }, + + computed: { + classes () { + return `q-expansion-item--${this.showing === true ? 'expanded' : 'collapsed'}` + + ` q-expansion-item--${this.popup === true ? 'popup' : 'standard'}` + }, + + contentStyle () { + if (this.contentInsetLevel !== void 0) { + const dir = this.$q.lang.rtl === true ? 'Right' : 'Left' + return { + ['padding' + dir]: (this.contentInsetLevel * 56) + 'px' + } + } + }, + + hasLink () { + return this.disable !== true && ( + this.href !== void 0 || + (this.to !== void 0 && this.to !== null && this.to !== '') + ) + }, + + linkProps () { + const acc = {} + LINK_PROPS.forEach(key => { + acc[ key ] = this[ key ] + }) + return acc + }, + + isClickable () { + return this.hasLink === true || this.expandIconToggle !== true + }, + + expansionIcon () { + return this.expandedIcon !== void 0 && this.showing === true + ? this.expandedIcon + : this.expandIcon || this.$q.iconSet.expansionItem[this.denseToggle === true ? 'denseIcon' : 'icon'] + }, + + activeToggleIcon () { + return this.disable !== true && (this.hasLink === true || this.expandIconToggle === true) + }, + + headerSlotScope () { + return { + expanded: this.showing === true, + detailsId: this.targetUid, + toggle: this.toggle, + show: this.show, + hide: this.hide + } + }, + + toggleAriaAttrs () { + const toggleAriaLabel = this.toggleAriaLabel !== void 0 + ? this.toggleAriaLabel + : this.$q.lang.label[ this.showing === true ? 'collapse' : 'expand' ](this.label) + + return { + role: 'button', + 'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-owns': this.targetUid, + 'aria-controls': this.targetUid, + 'aria-label': toggleAriaLabel + } + } + }, + + methods: { + __onHeaderClick (e) { + this.hasLink !== true && this.toggle(e) + this.$emit('click', e) + }, + + __toggleIconKeyboard (e) { + e.keyCode === 13 && this.__toggleIcon(e) + }, + + __toggleIcon (e) { + if ( + this.$q.interaction.isPointer === true && + this.$refs.blurTarget !== void 0 && + document.activeElement !== this.$refs.blurTarget + ) { + this.$refs.blurTarget.focus() + } + else if ( + this.$q.interaction.isKeyboard === true && + document.activeElement === this.$refs.blurTarget + ) { + this.$refs.blurTarget.parentNode.focus() + } + this.toggle(e) + stopAndPrevent(e) + }, + + __eventHandler (comp) { + this !== comp && this.group === comp.group && this.hide() + }, + + __getToggleIcon (h) { + const data = { + staticClass: `q-focusable relative-position cursor-pointer${this.denseToggle === true && this.switchToggleSide === true ? ' items-end' : ''}`, + class: this.expandIconClass, + props: { + side: this.switchToggleSide !== true, + avatar: this.switchToggleSide + } + } + + const child = [ + h(QIcon, { + staticClass: 'q-expansion-item__toggle-icon', + class: this.expandedIcon === void 0 && this.showing === true + ? 'q-expansion-item__toggle-icon--rotated' + : void 0, + props: { name: this.expansionIcon } + }) + ] + + if (this.activeToggleIcon === true) { + Object.assign(data, { + key: 'inpExt', + attrs: { + tabindex: 0, + ...this.toggleAriaAttrs + }, + on: cache(this, 'inpExt', { + click: this.__toggleIcon, + keyup: this.__toggleIconKeyboard + }) + }) + + child.unshift( + h('div', { + ref: 'blurTarget', + staticClass: 'q-expansion-item__toggle-focus q-icon q-focus-helper q-focus-helper--rounded', + attrs: { tabindex: -1 } + }) + ) + } + + return h(QItemSection, data, child) + }, + + __getHeader (h) { + let child + + if (this.$scopedSlots.header !== void 0) { + child = [].concat(this.$scopedSlots.header(this.headerSlotScope)) + } + else { + child = [ + h(QItemSection, [ + h(QItemLabel, { + props: { lines: this.labelLines } + }, [ this.label || '' ]), + + this.caption + ? h(QItemLabel, { + props: { lines: this.captionLines, caption: true } + }, [ this.caption ]) + : null + ]) + ] + + this.icon && child[this.switchToggleSide === true ? 'push' : 'unshift']( + h(QItemSection, { + props: { + side: this.switchToggleSide === true, + avatar: this.switchToggleSide !== true + } + }, [ + h(QIcon, { + props: { name: this.icon } + }) + ]) + ) + } + + this.disable !== true && this.hideExpandIcon !== true && child[this.switchToggleSide === true ? 'unshift' : 'push']( + this.__getToggleIcon(h) + ) + + const data = { + ref: 'item', + style: this.headerStyle, + class: this.headerClass, + props: { + dark: this.dark, + disable: this.disable, + dense: this.dense, + insetLevel: this.headerInsetLevel + } + } + + if (this.isClickable === true) { + data.props.clickable = true + + if (this.hasLink === true) { + Object.assign(data.props, this.linkProps) + } + else { + data.attrs = this.toggleAriaAttrs + } + + data.on = { + ...this.qListeners, + click: this.__onHeaderClick + } + } + + return h(QItem, data, child) + }, + + __getContent (h) { + const node = [ + this.__getHeader(h), + + h(QSlideTransition, { + key: 'slide', + props: { duration: this.duration }, + on: cache(this, 'slide', { + show: () => { this.$emit('after-show') }, + hide: () => { this.$emit('after-hide') } + }) + }, [ + h('div', { + staticClass: 'q-expansion-item__content relative-position', + style: this.contentStyle, + attrs: { id: this.targetUid }, + directives: [{ name: 'show', value: this.showing }] + }, this.shouldRenderContent === true ? slot(this, 'default') : void 0) + ]) + ] + + if (this.expandSeparator) { + node.push( + h(QSeparator, { + staticClass: 'q-expansion-item__border q-expansion-item__border--top absolute-top', + props: { dark: this.dark } + }), + h(QSeparator, { + staticClass: 'q-expansion-item__border q-expansion-item__border--bottom absolute-bottom', + props: { dark: this.dark } + }) + ) + } + + return node + } + }, + + render (h) { + return h('div', { + staticClass: 'q-expansion-item q-item-type', + class: this.classes + }, [ + h( + 'div', + { staticClass: 'q-expansion-item__container relative-position' }, + this.__getContent(h) + ) + ]) + }, + + created () { + this.shouldRenderContent = this.showing === true + this.group !== void 0 && this.$root.$on(eventName, this.__eventHandler) + this.targetUid = `e_${uid()}` + }, + + beforeDestroy () { + this.group !== void 0 && this.$root.$off(eventName, this.__eventHandler) + } +}) diff --git a/src/components/expansion-item/QExpansionItem.json b/src/components/expansion-item/QExpansionItem.json new file mode 100644 index 00000000000..20f57d054f6 --- /dev/null +++ b/src/components/expansion-item/QExpansionItem.json @@ -0,0 +1,254 @@ +{ + "mixins": [ "mixins/model-toggle", "mixins/router-link" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/expansion-item" + }, + + "props": { + "value": { + "desc": "Model of the component defining 'open' state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model" + }, + + "icon": { + "extends": "icon" + }, + + "expand-icon": { + "extends": "icon" + }, + + "expanded-icon": { + "extends": "icon", + "desc": "Expand icon name (following Quasar convention) for when QExpansionItem is expanded; When used, it also disables the rotation animation of the expand icon; Make sure you have the icon library installed unless you are using 'img:' prefix", + "addedIn": "v1.4.5" + }, + + "expand-icon-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Apply custom class(es) to the expand icon item section", + "examples": [ "text-purple" ], + "category": "style" + }, + + "toggle-aria-label": { + "type": "String", + "desc": "aria-label to be used on the expansion toggle element", + "examples": [ "Open details" ], + "category": "accessibility", + "addedIn": "v1.20.2" + }, + + "label": { + "type": "String", + "desc": "Header label (unless using 'header' slot)", + "examples": [ "My expansion item" ], + "category": "content" + }, + + "label-lines": { + "type": [ "Number", "String" ], + "desc": "Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property!", + "examples": [ "1", "3", ":label-lines=\"2\"" ], + "category": "content" + }, + + "caption": { + "type": "String", + "desc": "Header sub-label (unless using 'header' slot)", + "examples": [ "Unread message: 5" ], + "category": "content" + }, + + "caption-lines": { + "type": [ "Number", "String" ], + "desc": "Apply ellipsis when there's not enough space to render on the specified number of lines; If more than one line specified, then it will only work on webkit browsers because it uses the '-webkit-line-clamp' CSS property!", + "examples": [ "1", "3", ":caption-lines=\"2\"" ], + "category": "content" + }, + + "dark": { + "extends": "dark" + }, + + "dense": { + "extends": "dense" + }, + + "duration": { + "type": "Number", + "desc": "Animation duration (in milliseconds)", + "default": 300, + "examples": [ ":duration=\"1000\"" ], + "category": "behavior" + }, + + "header-inset-level": { + "type": "Number", + "desc": "Apply an inset to header (unless using 'header' slot); Useful when header avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu", + "examples": [ ":header-inset-level=\"1\"" ], + "category": "content" + }, + + "content-inset-level": { + "type": "Number", + "desc": "Apply an inset to content (changes content padding)", + "examples": [ ":content-inset-level=\"1\"" ], + "category": "content" + }, + + "expand-separator": { + "type": "Boolean", + "desc": "Apply a top and bottom separator when expansion item is opened", + "category": "content" + }, + + "default-opened": { + "type": "Boolean", + "desc": "Puts expansion item into open state on initial render; Overridden by v-model if used", + "category": "behavior" + }, + + "hide-expand-icon": { + "type": "Boolean", + "desc": "Do not show the expand icon", + "category": "content", + "addedIn": "v1.20.2" + }, + + "expand-icon-toggle": { + "type": "Boolean", + "desc": "Applies the expansion events to the expand icon only and not to the whole header", + "category": "behavior" + }, + + "switch-toggle-side": { + "type": "Boolean", + "desc": "Switch expand icon side (from default 'right' to 'left')", + "category": "content" + }, + + "dense-toggle": { + "type": "Boolean", + "desc": "Use dense mode for expand icon", + "category": "style" + }, + + "group": { + "type": "String", + "desc": "Register expansion item into a group (unique name that must be applied to all expansion items in that group) for coordinated open/close state within the group a.k.a. 'accordion mode'", + "examples": [ "my-emails" ], + "category": "content|behavior" + }, + + "popup": { + "type": "Boolean", + "desc": "Put expansion list into 'popup' mode", + "category": "behavior" + }, + + "header-style": { + "type": [ "Array", "String", "Object" ], + "desc": "Apply custom style to the header", + "examples": [ + "background: '#ff0000'", + ":header-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + + "header-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Apply custom class(es) to the header", + "examples": [ + "my-custom-class", + ":header-class=\"{ 'my-custom-class': someCondition }\"" + ], + "category": "style" + } + }, + + "slots": { + "default": { + "desc": "Slot used for expansion item's content" + } + }, + + "scopedSlots": { + "header": { + "desc": "Slot used for overriding default header", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "QExpansionItem expanded status", + "addedIn": "v1.19.5" + }, + + "detailsId": { + "type": "String", + "desc": "QExpansionItem details panel id (for use in aria-controls)", + "__exemption": [ "examples" ], + "addedIn": "v1.20.2" + }, + + "show": { + "type": "Function", + "desc": "Triggers component to show", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object", + "__exemption": [ "examples" ] + } + }, + "returns": null, + "addedIn": "v1.20.2" + }, + + "hide": { + "type": "Function", + "desc": "Triggers component to hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object", + "__exemption": [ "examples" ] + } + }, + "returns": null, + "addedIn": "v1.20.2" + }, + + "toggle": { + "type": "Function", + "desc": "Triggers component to toggle between show/hide", + "params": { + "evt": { + "type": "Object", + "required": false, + "desc": "JS event object", + "__exemption": [ "examples" ] + } + }, + "returns": null, + "addedIn": "v1.20.2" + } + } + } + }, + + "events": { + "after-show": { + "extends": "after-show", + "addedIn": "v1.9" + }, + + "after-hide": { + "extends": "after-hide", + "addedIn": "v1.9" + } + } +} diff --git a/src/components/expansion-item/QExpansionItem.sass b/src/components/expansion-item/QExpansionItem.sass new file mode 100644 index 00000000000..105dc155cc9 --- /dev/null +++ b/src/components/expansion-item/QExpansionItem.sass @@ -0,0 +1,71 @@ +.q-expansion-item + + &__border + opacity: 0 + + + &__toggle-icon + position: relative + transition: transform .3s + + &--rotated + transform: rotate(180deg) + + &__toggle-focus + width: 1em !important + height: 1em !important + position: relative !important + + & + .q-expansion-item__toggle-icon + margin-top: -1em + + &--standard + &.q-expansion-item--expanded + > div > .q-expansion-item__border + opacity: 1 + + &--popup + transition: padding .5s + + > .q-expansion-item__container + border: 1px solid $separator-color + > .q-separator + display: none + + &.q-expansion-item + + &--collapsed + padding: 0 15px + &--expanded + padding: 15px 0 + + & + & + padding-top: 0 + + &.q-expansion-item--collapsed:not(:first-child) + > .q-expansion-item__container + border-top-width: 0 + + &.q-expansion-item--expanded + &.q-expansion-item--collapsed + > .q-expansion-item__container + border-top-width: 1px + + &__content > .q-card + box-shadow: none + border-radius: 0 + + &:first-child > div > .q-expansion-item__border--top + opacity: 0 + &:last-child > div > .q-expansion-item__border--bottom + opacity: 0 + + &--expanded + &--expanded + > div > .q-expansion-item__border--top + opacity: 0 + + &--expanded .q-textarea--autogrow textarea + animation: q-expansion-done 0s + +@keyframes q-expansion-done + 0% + --q-exp-done: 1 // needed for compilation diff --git a/src/components/expansion-item/QExpansionItem.styl b/src/components/expansion-item/QExpansionItem.styl new file mode 100644 index 00000000000..105dc155cc9 --- /dev/null +++ b/src/components/expansion-item/QExpansionItem.styl @@ -0,0 +1,71 @@ +.q-expansion-item + + &__border + opacity: 0 + + + &__toggle-icon + position: relative + transition: transform .3s + + &--rotated + transform: rotate(180deg) + + &__toggle-focus + width: 1em !important + height: 1em !important + position: relative !important + + & + .q-expansion-item__toggle-icon + margin-top: -1em + + &--standard + &.q-expansion-item--expanded + > div > .q-expansion-item__border + opacity: 1 + + &--popup + transition: padding .5s + + > .q-expansion-item__container + border: 1px solid $separator-color + > .q-separator + display: none + + &.q-expansion-item + + &--collapsed + padding: 0 15px + &--expanded + padding: 15px 0 + + & + & + padding-top: 0 + + &.q-expansion-item--collapsed:not(:first-child) + > .q-expansion-item__container + border-top-width: 0 + + &.q-expansion-item--expanded + &.q-expansion-item--collapsed + > .q-expansion-item__container + border-top-width: 1px + + &__content > .q-card + box-shadow: none + border-radius: 0 + + &:first-child > div > .q-expansion-item__border--top + opacity: 0 + &:last-child > div > .q-expansion-item__border--bottom + opacity: 0 + + &--expanded + &--expanded + > div > .q-expansion-item__border--top + opacity: 0 + + &--expanded .q-textarea--autogrow textarea + animation: q-expansion-done 0s + +@keyframes q-expansion-done + 0% + --q-exp-done: 1 // needed for compilation diff --git a/src/components/expansion-item/index.js b/src/components/expansion-item/index.js new file mode 100644 index 00000000000..488e11aca9f --- /dev/null +++ b/src/components/expansion-item/index.js @@ -0,0 +1,5 @@ +import QExpansionItem from './QExpansionItem.js' + +export { + QExpansionItem +} diff --git a/src/components/fab/QFab.js b/src/components/fab/QFab.js new file mode 100644 index 00000000000..960adc446fb --- /dev/null +++ b/src/components/fab/QFab.js @@ -0,0 +1,179 @@ +import Vue from 'vue' + +import QBtn from '../btn/QBtn.js' +import QIcon from '../icon/QIcon.js' + +import FabMixin from '../../mixins/fab.js' +import AttrsMixin from '../../mixins/attrs.js' +import ModelToggleMixin from '../../mixins/model-toggle.js' + +import { slot, mergeSlot } from '../../utils/private/slot.js' +import cache from '../../utils/private/cache.js' +import uid from '../../utils/uid.js' + +const directions = ['up', 'right', 'down', 'left'] +const alignValues = [ 'left', 'center', 'right' ] + +export default Vue.extend({ + name: 'QFab', + + inheritAttrs: false, + + mixins: [ FabMixin, AttrsMixin, ModelToggleMixin ], + + provide () { + return { + __qFab: this + } + }, + + props: { + icon: String, + activeIcon: String, + + hideIcon: Boolean, + hideLabel: { + default: null + }, + + direction: { + type: String, + default: 'right', + validator: v => directions.includes(v) + }, + + persistent: Boolean, + + verticalActionsAlign: { + type: String, + default: 'center', + validator: v => alignValues.includes(v) + } + }, + + data () { + return { + showing: this.value === true + } + }, + + computed: { + hideOnRouteChange () { + return this.persistent !== true + }, + + classes () { + return `q-fab--align-${this.verticalActionsAlign} ${this.formClass}` + + (this.showing === true ? ' q-fab--opened' : '') + }, + + actionsClasses () { + return `q-fab__actions--${this.direction}` + (this.showing === true ? ' q-fab__actions--opened' : '') + }, + + actionsAttrs () { + const attrs = { + id: this.targetUid + } + + if (this.showing === true) { + attrs.role = 'menu' + } + else { + attrs['aria-hidden'] = 'true' + } + + return attrs + }, + + iconHolderClasses () { + return this.showing === true ? 'q-fab__icon-holder--opened' : '' + }, + + attrs () { + return { + 'aria-expanded': this.showing === true ? 'true' : 'false', + 'aria-haspopup': 'true', + 'aria-controls': this.targetUid, + 'aria-owns': this.targetUid, + ...this.qAttrs + } + }, + + slotScope () { + return { opened: this.showing } + } + }, + + methods: { + __onChildClick (evt) { + this.hide(evt) + + if (this.$refs.trigger && this.$refs.trigger.$el) { + this.$refs.trigger.$el.focus() + } + }, + + __getIcon (h, kebab, camel) { + const slotFn = this.$scopedSlots[kebab] + const staticClass = `q-fab__${kebab} absolute-full` + + return slotFn === void 0 + ? h(QIcon, { staticClass, props: { name: this[camel] || this.$q.iconSet.fab[camel] } }) + : h('div', { staticClass }, slotFn(this.slotScope)) + } + }, + + render (h) { + const child = [] + + this.hideIcon !== true && child.push( + h('div', { staticClass: 'q-fab__icon-holder', class: this.iconHolderClasses }, [ + this.__getIcon(h, 'icon', 'icon'), + this.__getIcon(h, 'active-icon', 'activeIcon') + ]) + ) + + if (this.label !== '' || this.$scopedSlots.label !== void 0) { + child[this.labelProps.action]( + h('div', this.labelProps.data, this.$scopedSlots.label !== void 0 ? this.$scopedSlots.label(this.slotScope) : [ this.label ]) + ) + } + + return h('div', { + staticClass: 'q-fab z-fab row inline justify-center', + class: this.classes, + on: { ...this.qListeners } + }, [ + h(QBtn, { + key: 'tog', + ref: 'trigger', + class: this.formClass, + props: { + ...this.$props, + noWrap: true, + stack: this.stacked, + align: void 0, + icon: void 0, + label: void 0, + noCaps: true, + fab: true + }, + attrs: this.attrs, + on: cache(this, 'tog', { + click: this.toggle + }) + }, mergeSlot(child, this, 'tooltip')), + + h('div', { + staticClass: 'q-fab__actions flex no-wrap inline', + class: this.actionsClasses, + attrs: this.actionsAttrs + }, slot(this, 'default')) + ]) + }, + + created () { + this.targetUid = `fb_${uid()}` + } +}) diff --git a/src/components/fab/QFab.json b/src/components/fab/QFab.json new file mode 100644 index 00000000000..14b827e2da7 --- /dev/null +++ b/src/components/fab/QFab.json @@ -0,0 +1,110 @@ +{ + "mixins": [ "mixins/model-toggle", "mixins/fab" ], + + "props": { + "value": { + "desc": "Controls state of fab actions (showing/hidden); Works best with v-model directive, otherwise use along listening to 'input' event", + "category": "model" + }, + + "icon": { + "extends": "icon" + }, + + "active-icon": { + "extends": "icon" + }, + + "hide-icon": { + "type": "Boolean", + "desc": "Hide the icon (don't use any)", + "category": "style|content", + "addedIn": "v1.9.14" + }, + + "direction": { + "type": "String", + "desc": "Direction to expand Fab Actions to", + "default": "right", + "values": [ "up", "right", "down", "left" ], + "examples": [ "down" ], + "category": "behavior" + }, + + "vertical-actions-align": { + "type": "String", + "desc": "The side of the Fab where Fab Actions will expand (only when direction is 'up' or 'down')", + "default": "center", + "values": [ "left", "center", "right" ], + "category": "style|content", + "addedIn": "v1.9" + }, + + "persistent": { + "type": "Boolean", + "desc": "By default, Fab Actions are hidden when user navigates to another route and this prop disables this behavior", + "category": "behavior" + } + }, + + "slots": { + "default": { + "desc": "This is where QFabActions may go into" + }, + + "tooltip": { + "desc": "Slot specifically designed for a QTooltip" + } + }, + + "scopedSlots": { + "icon": { + "desc": "Slot for icon shown when FAB is closed; Suggestion: QIcon", + "scope": { + "opened": { + "type": "Boolean", + "desc": "FAB is opened" + } + }, + "addedIn": "v1.17" + }, + + "active-icon": { + "desc": "Slot for icon shown when FAB is opened; Suggestion: QIcon", + "scope": { + "opened": { + "type": "Boolean", + "desc": "FAB is opened" + } + }, + "addedIn": "v1.17" + }, + + "label": { + "desc": "Slot for label", + "scope": { + "opened": { + "type": "Boolean", + "desc": "FAB is opened" + } + }, + "addedIn": "v1.17" + } + }, + + "events": { + "input": { + "desc": "Emitted when fab actions are shown/hidden; Captured by v-model directive" + } + }, + + "methods": { + "show": { + "desc": "Expands fab actions list" + }, + + "hide": { + "desc": "Collapses fab actions list" + } + } +} diff --git a/src/components/fab/QFab.sass b/src/components/fab/QFab.sass new file mode 100644 index 00000000000..e83f3431730 --- /dev/null +++ b/src/components/fab/QFab.sass @@ -0,0 +1,154 @@ +.z-fab + z-index: $z-fab + +.q-fab + position: relative + vertical-align: middle + + > .q-btn + width: 100% + + &--form-rounded + border-radius: $button-rounded-border-radius + &--form-square + border-radius: $generic-border-radius + + &__icon, &__active-icon + transition: opacity .4s, transform .4s + &__icon + opacity: 1 + transform: rotate(0deg) + &__active-icon + opacity: 0 + transform: rotate(-180deg) + + &__label + + &--external + position: absolute + padding: 0 8px + transition: opacity .18s cubic-bezier(.65,.815,.735,.395) + + &-hidden + opacity: 0 + pointer-events: none + + &--external-left + top: 50% + left: -12px + transform: translate(-100%, -50%) + &--external-right + top: 50% + right: -12px + transform: translate(100%, -50%) + &--external-bottom + bottom: -12px + left: 50% + transform: translate(-50%, 100%) + &--external-top + top: -12px + left: 50% + transform: translate(-50%, -100%) + + &--internal + padding: 0 + transition: font-size .12s cubic-bezier(.65,.815,.735,.395), max-height .12s cubic-bezier(.65,.815,.735,.395), opacity .07s cubic-bezier(.65,.815,.735,.395) + max-height: 30px + + &-hidden + font-size: 0 + opacity: 0 + + &-top + padding-bottom: .12em + &-bottom + padding-top: .12em + &-top, &-bottom + &.q-fab__label--internal-hidden + max-height: 0 + + &-left + padding-left: .285em + padding-right: .571em + &-right + padding-right: .285em + padding-left: .571em + + &__icon-holder + min-width: 24px + min-height: 24px + position: relative + + &--opened + .q-fab__icon + transform: rotate(180deg) + opacity: 0 + .q-fab__active-icon + transform: rotate(0deg) + opacity: 1 + + &__actions + position: absolute + opacity: 0 + transition: transform .18s ease-in, opacity .18s ease-in + pointer-events: none + align-items: center + justify-content: center + align-self: center + padding: 3px + + .q-btn + margin: 5px + + &--right + transform-origin: 0 50% + transform: scale(.4) translateX(-62px) + height: 56px + left: 100% + margin-left: 9px + + &--left + transform-origin: 100% 50% + transform: scale(.4) translateX(62px) + height: 56px + right: 100% + margin-right: 9px + flex-direction: row-reverse + + &--up + transform-origin: 50% 100% + transform: scale(.4) translateY(62px) + width: 56px + bottom: 100% + margin-bottom: 9px + flex-direction: column-reverse + + &--down + transform-origin: 50% 0 + transform: scale(.4) translateY(-62px) + width: 56px + top: 100% + margin-top: 9px + flex-direction: column + + &--up, &--down + left: 50% + margin-left: -28px + + &--opened + opacity: 1 + transform: scale(1) translate(0, 0) + pointer-events: all + + &--align-left + > .q-fab__actions + &--up, &--down + align-items: flex-start + left: 28px + + &--align-right + > .q-fab__actions + &--up, &--down + align-items: flex-end + left: auto + right: 0 diff --git a/src/components/fab/QFab.styl b/src/components/fab/QFab.styl new file mode 100644 index 00000000000..e83f3431730 --- /dev/null +++ b/src/components/fab/QFab.styl @@ -0,0 +1,154 @@ +.z-fab + z-index: $z-fab + +.q-fab + position: relative + vertical-align: middle + + > .q-btn + width: 100% + + &--form-rounded + border-radius: $button-rounded-border-radius + &--form-square + border-radius: $generic-border-radius + + &__icon, &__active-icon + transition: opacity .4s, transform .4s + &__icon + opacity: 1 + transform: rotate(0deg) + &__active-icon + opacity: 0 + transform: rotate(-180deg) + + &__label + + &--external + position: absolute + padding: 0 8px + transition: opacity .18s cubic-bezier(.65,.815,.735,.395) + + &-hidden + opacity: 0 + pointer-events: none + + &--external-left + top: 50% + left: -12px + transform: translate(-100%, -50%) + &--external-right + top: 50% + right: -12px + transform: translate(100%, -50%) + &--external-bottom + bottom: -12px + left: 50% + transform: translate(-50%, 100%) + &--external-top + top: -12px + left: 50% + transform: translate(-50%, -100%) + + &--internal + padding: 0 + transition: font-size .12s cubic-bezier(.65,.815,.735,.395), max-height .12s cubic-bezier(.65,.815,.735,.395), opacity .07s cubic-bezier(.65,.815,.735,.395) + max-height: 30px + + &-hidden + font-size: 0 + opacity: 0 + + &-top + padding-bottom: .12em + &-bottom + padding-top: .12em + &-top, &-bottom + &.q-fab__label--internal-hidden + max-height: 0 + + &-left + padding-left: .285em + padding-right: .571em + &-right + padding-right: .285em + padding-left: .571em + + &__icon-holder + min-width: 24px + min-height: 24px + position: relative + + &--opened + .q-fab__icon + transform: rotate(180deg) + opacity: 0 + .q-fab__active-icon + transform: rotate(0deg) + opacity: 1 + + &__actions + position: absolute + opacity: 0 + transition: transform .18s ease-in, opacity .18s ease-in + pointer-events: none + align-items: center + justify-content: center + align-self: center + padding: 3px + + .q-btn + margin: 5px + + &--right + transform-origin: 0 50% + transform: scale(.4) translateX(-62px) + height: 56px + left: 100% + margin-left: 9px + + &--left + transform-origin: 100% 50% + transform: scale(.4) translateX(62px) + height: 56px + right: 100% + margin-right: 9px + flex-direction: row-reverse + + &--up + transform-origin: 50% 100% + transform: scale(.4) translateY(62px) + width: 56px + bottom: 100% + margin-bottom: 9px + flex-direction: column-reverse + + &--down + transform-origin: 50% 0 + transform: scale(.4) translateY(-62px) + width: 56px + top: 100% + margin-top: 9px + flex-direction: column + + &--up, &--down + left: 50% + margin-left: -28px + + &--opened + opacity: 1 + transform: scale(1) translate(0, 0) + pointer-events: all + + &--align-left + > .q-fab__actions + &--up, &--down + align-items: flex-start + left: 28px + + &--align-right + > .q-fab__actions + &--up, &--down + align-items: flex-end + left: auto + right: 0 diff --git a/src/components/fab/QFabAction.js b/src/components/fab/QFabAction.js new file mode 100644 index 00000000000..81f8518e543 --- /dev/null +++ b/src/components/fab/QFabAction.js @@ -0,0 +1,110 @@ +import Vue from 'vue' + +import QBtn from '../btn/QBtn.js' +import QIcon from '../icon/QIcon.js' + +import FabMixin from '../../mixins/fab.js' + +import { noop } from '../../utils/event.js' +import { mergeSlot } from '../../utils/private/slot.js' + +const anchorMap = { + start: 'self-end', + center: 'self-center', + end: 'self-start' +} + +const anchorValues = Object.keys(anchorMap) + +export default Vue.extend({ + name: 'QFabAction', + + mixins: [ FabMixin ], + + props: { + icon: { + type: String, + default: '' + }, + + anchor: { + type: String, + validator: v => anchorValues.includes(v) + }, + + to: [ String, Object ], + replace: Boolean + }, + + inject: { + __qFab: { + default () { + return { + showing: true, + __onChildClick: noop + } + } + } + }, + + computed: { + classes () { + const align = anchorMap[this.anchor] + return this.formClass + (align !== void 0 ? ` ${align}` : '') + }, + + onEvents () { + return { + ...this.qListeners, + click: this.click + } + }, + + isDisabled () { + return this.__qFab.showing !== true || this.disable === true + } + }, + + methods: { + click (e) { + this.__qFab.__onChildClick(e) + this.$emit('click', e) + } + }, + + render (h) { + const child = [] + + if (this.$scopedSlots.icon !== void 0) { + child.push(this.$scopedSlots.icon()) + } + else if (this.icon !== '') { + child.push( + h(QIcon, { + props: { name: this.icon } + }) + ) + } + + if (this.label !== '' || this.$scopedSlots.label !== void 0) { + child[this.labelProps.action]( + h('div', this.labelProps.data, this.$scopedSlots.label !== void 0 ? this.$scopedSlots.label() : [ this.label ]) + ) + } + + return h(QBtn, { + class: this.classes, + props: { + ...this.$props, + noWrap: true, + stack: this.stacked, + icon: void 0, + label: void 0, + noCaps: true, + fabMini: true, + disable: this.isDisabled + }, + on: this.onEvents + }, mergeSlot(child, this, 'default')) + } +}) diff --git a/src/components/fab/QFabAction.json b/src/components/fab/QFabAction.json new file mode 100644 index 00000000000..34dcde13289 --- /dev/null +++ b/src/components/fab/QFabAction.json @@ -0,0 +1,70 @@ +{ + "mixins": [ "mixins/fab" ], + + "props": { + "icon": { + "extends": "icon" + }, + + "anchor": { + "type": "String", + "desc": "How to align the Fab Action relative to Fab expand side; By default it uses the align specified in QFab", + "values": [ + "start", "center", "end" + ], + "category": "style|content", + "addedIn": "v1.9" + }, + + "to": { + "type": [ "String", "Object" ], + "desc": "Equivalent to Vue Router 'to' property", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "router" + }, + + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property", + "category": "router" + } + }, + + "slots": { + "default": { + "desc": "Suggestion for this slot: QTooltip" + }, + + "icon": { + "desc": "Slot for icon; Suggestion: QIcon", + "addedIn": "v1.17" + }, + + "label": { + "desc": "Slot for label", + "addedIn": "v1.17" + } + }, + + "events": { + "click": { + "extends": "click" + } + }, + + "methods": { + "click": { + "desc": "Emulate click on QFabAction", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + } + } +} diff --git a/src/components/fab/index.js b/src/components/fab/index.js new file mode 100644 index 00000000000..7e19c908f8c --- /dev/null +++ b/src/components/fab/index.js @@ -0,0 +1,7 @@ +import QFab from './QFab.js' +import QFabAction from './QFabAction.js' + +export { + QFab, + QFabAction +} diff --git a/src/components/field/QField.js b/src/components/field/QField.js new file mode 100644 index 00000000000..ad45fad380b --- /dev/null +++ b/src/components/field/QField.js @@ -0,0 +1,662 @@ +import Vue from 'vue' + +import { fromSSR } from '../../plugins/Platform.js' + +import QIcon from '../icon/QIcon.js' +import QSpinner from '../spinner/QSpinner.js' + +import ValidateMixin from '../../mixins/validate.js' +import DarkMixin from '../../mixins/dark.js' +import AttrsMixin, { iconAsButton } from '../../mixins/attrs.js' + +import { slot } from '../../utils/private/slot.js' +import uid from '../../utils/uid.js' +import { stop, prevent, stopAndPrevent } from '../../utils/event.js' +import { managedFocus } from '../../utils/private/focus-manager.js' + +function getTargetUid (val) { + return val === void 0 ? `f_${uid()}` : val +} + +const parentStyles = new WeakMap() + +export default Vue.extend({ + name: 'QField', + + mixins: [ DarkMixin, ValidateMixin, AttrsMixin ], + + inheritAttrs: false, + + props: { + label: String, + stackLabel: Boolean, + hint: String, + hideHint: Boolean, + prefix: String, + suffix: String, + + labelColor: String, + color: String, + bgColor: String, + + filled: Boolean, + outlined: Boolean, + outlinedMd: Boolean, + borderless: Boolean, + standout: [Boolean, String], + + square: Boolean, + + loading: Boolean, + + labelSlot: Boolean, + + bottomSlots: Boolean, + hideBottomSpace: Boolean, + + rounded: Boolean, + dense: Boolean, + itemAligned: Boolean, + + counter: Boolean, + + clearable: Boolean, + clearIcon: String, + + disable: Boolean, + readonly: Boolean, + + autofocus: Boolean, + + for: String, + + maxlength: [Number, String], + maxValues: [Number, String] // private, do not add to JSON; internally needed by QSelect + }, + + data () { + return { + focused: false, + targetUid: getTargetUid(this.for), + + // used internally by validation for QInput + // or menu handling for QSelect + innerLoading: false + } + }, + + watch: { + for (val) { + // don't transform targetUid into a computed + // prop as it will break SSR + this.targetUid = getTargetUid(val) + } + }, + + computed: { + editable () { + return this.disable !== true && this.readonly !== true + }, + + hasValue () { + const value = this.__getControl === void 0 ? this.value : this.innerValue + + return value !== void 0 && + value !== null && + ('' + value).length > 0 + }, + + computedCounter () { + if (this.counter !== false) { + const len = typeof this.value === 'string' || typeof this.value === 'number' + ? ('' + this.value).length + : (Array.isArray(this.value) === true ? this.value.length : 0) + + const max = this.maxlength !== void 0 + ? this.maxlength + : this.maxValues + + return len + (max !== void 0 ? ' / ' + max : '') + } + }, + + floatingLabel () { + return this.stackLabel === true || + this.focused === true || + typeof this.inputValue === 'number' || + (typeof this.inputValue === 'string' && this.inputValue.length > 0) || + (this.hideSelected !== true && this.hasValue === true) || + ( + this.displayValue !== void 0 && + this.displayValue !== null && + ('' + this.displayValue).length > 0 + ) + }, + + shouldRenderBottom () { + return this.bottomSlots === true || + this.hint !== void 0 || + this.hasRules === true || + this.counter === true || + this.error !== null + }, + + classes () { + const outlineSuffix = this.styleType === 'outlined' && this.outlinedMd === true ? 'md' : 'std' + + return { + [this.fieldClass]: this.fieldClass !== void 0, + + [`q-field--${this.styleType}`]: true, + [`q-field--outlined--${outlineSuffix}`]: this.styleType === 'outlined', + 'q-field--rounded': this.rounded, + 'q-field--square': this.square, + + 'q-field--focused': this.focused === true, + 'q-field--highlighted': this.focused === true || this.hasError === true, + 'q-field--float': this.floatingLabel, + 'q-field--labeled': this.hasLabel, + [`q-field--labeled--${outlineSuffix}`]: this.hasLabel, + + 'q-field--dense': this.dense, + 'q-field--item-aligned q-item-type': this.itemAligned, + [`q-field--${this.darkSuffix}`]: true, + + 'q-field--auto-height': this.__getControl === void 0, + + 'q-field--with-bottom': this.hideBottomSpace !== true && this.shouldRenderBottom === true, + 'q-field--error': this.hasError, + + 'q-field--readonly': this.readonly === true && this.disable !== true, + 'q-field--disabled': this.disable === true + } + }, + + styleType () { + if (this.filled === true) { return 'filled' } + if (this.outlined === true || this.outlinedMd === true) { return 'outlined' } + if (this.borderless === true) { return 'borderless' } + if (this.standout) { return 'standout' } + return 'standard' + }, + + contentClass () { + const cls = [] + + if (this.hasError === true) { + cls.push('text-negative') + } + else if (typeof this.standout === 'string' && this.standout.length > 0 && this.focused === true) { + return this.standout + } + else if (this.color !== void 0) { + cls.push('text-' + this.color) + } + + if (this.bgColor !== void 0) { + cls.push(`bg-${this.bgColor}`) + } + + return cls + }, + + hasLabel () { + return this.labelSlot === true || this.label !== void 0 + }, + + labelClass () { + if ( + this.labelColor !== void 0 && + this.hasError !== true + ) { + return 'text-' + this.labelColor + } + }, + + controlSlotScope () { + return { + id: this.targetUid, + field: this.$el, + editable: this.editable, + focused: this.focused, + floatingLabel: this.floatingLabel, + value: this.value, + emitValue: this.__emitValue + } + }, + + bottomSlotScope () { + return { + id: this.targetUid, + field: this.$el, + editable: this.editable, + focused: this.focused, + value: this.value, + errorMessage: this.computedErrorMessage + } + }, + + attrs () { + const attrs = { + for: this.targetUid + } + + if (this.disable === true) { + attrs['aria-disabled'] = 'true' + } + else if (this.readonly === true) { + attrs['aria-readonly'] = 'true' + } + + return attrs + } + }, + + methods: { + focus () { + this.__focus() + }, + + blur () { + const el = document.activeElement + // IE can have null document.activeElement + if (el !== null && this.$el.contains(el)) { + el.blur() + } + }, + + __focus () { + const el = document.activeElement + let target = this.$refs.target + // IE can have null document.activeElement + if (target !== void 0 && (el === null || el.id !== this.targetUid)) { + target.hasAttribute('tabindex') === true || (target = target.querySelector('[tabindex]')) + target !== null && managedFocus(target) + } + }, + + __getContent (h) { + const node = [] + + this.$scopedSlots.prepend !== void 0 && node.push( + h('div', { + staticClass: 'q-field__prepend q-field__marginal row no-wrap items-center', + key: 'prepend', + on: this.slotsEvents + }, this.$scopedSlots.prepend()) + ) + + node.push( + h('div', { + staticClass: 'q-field__control-container col relative-position row no-wrap q-anchor--skip' + }, this.__getControlContainer(h)) + ) + + this.hasError === true && this.noErrorIcon === false && node.push( + this.__getInnerAppendNode(h, 'error', [ + h(QIcon, { props: { name: this.$q.iconSet.field.error, color: 'negative' } }) + ]) + ) + + if (this.loading === true || this.innerLoading === true) { + node.push( + this.__getInnerAppendNode( + h, + 'inner-loading-append', + this.$scopedSlots.loading !== void 0 + ? this.$scopedSlots.loading() + : [ h(QSpinner, { props: { color: this.color } }) ] + ) + ) + } + else if (this.clearable === true && this.hasValue === true && this.editable === true) { + node.push( + this.__getInnerAppendNode(h, 'inner-clearable-append', [ + h(QIcon, { + staticClass: 'q-field__focusable-action', + props: { tag: 'button', name: this.clearIcon || this.$q.iconSet.field.clear }, + attrs: iconAsButton, + on: this.clearableEvents + }) + ]) + ) + } + + this.$scopedSlots.append !== void 0 && node.push( + h('div', { + staticClass: 'q-field__append q-field__marginal row no-wrap items-center', + key: 'append', + on: this.slotsEvents + }, this.$scopedSlots.append()) + ) + + this.__getInnerAppend !== void 0 && node.push( + this.__getInnerAppendNode(h, 'inner-append', this.__getInnerAppend(h)) + ) + + this.__getControlChild !== void 0 && node.push( + this.__getControlChild(h) + ) + + return node + }, + + __getControlContainer (h) { + const node = [] + + this.prefix !== void 0 && this.prefix !== null && node.push( + h('div', { + staticClass: 'q-field__prefix no-pointer-events row items-center' + }, [ this.prefix ]) + ) + + if (this.hasShadow === true && this.__getShadowControl !== void 0) { + node.push( + this.__getShadowControl(h) + ) + } + + if (this.__getControl !== void 0) { + node.push(this.__getControl(h)) + } + // internal usage only: + else if (this.$scopedSlots.rawControl !== void 0) { + node.push(this.$scopedSlots.rawControl()) + } + else if (this.$scopedSlots.control !== void 0) { + node.push( + h('div', { + ref: 'target', + staticClass: 'q-field__native row', + attrs: { + tabindex: -1, + ...this.qAttrs, + 'data-autofocus': this.autofocus || void 0 + } + }, this.$scopedSlots.control(this.controlSlotScope)) + ) + } + + const labelNodes = [ slot(this, 'label', this.label) ] + + if (this.outlinedMd === true) { + labelNodes.unshift(h('div', { staticClass: 'q-field__label-back', style: { backgroundColor: this.__getBgColor() } })) + } + + this.hasLabel === true && node.push( + h('div', { + staticClass: 'q-field__label no-pointer-events absolute ellipsis', + class: this.labelClass + }, labelNodes) + ) + + this.suffix !== void 0 && this.suffix !== null && node.push( + h('div', { + staticClass: 'q-field__suffix no-pointer-events row items-center' + }, [ this.suffix ]) + ) + + return node.concat( + this.__getDefaultSlot !== void 0 + ? this.__getDefaultSlot(h) + : slot(this, 'default') + ) + }, + + __getBottom (h) { + let msg, key + + if (this.hasError === true) { + key = 'q--slot-error' + + if (this.$scopedSlots.error !== void 0) { + msg = this.$scopedSlots.error(this.bottomSlotScope) + } + else if (this.computedErrorMessage !== void 0) { + msg = [ h('div', { attrs: { role: 'alert' } }, [ this.computedErrorMessage ]) ] + key = this.computedErrorMessage + } + } + else if (this.hideHint !== true || this.focused === true) { + key = 'q--slot-hint' + + if (this.$scopedSlots.hint !== void 0) { + msg = this.$scopedSlots.hint(this.bottomSlotScope) + } + else if (this.hint !== void 0) { + msg = [ h('div', [ this.hint ]) ] + key = this.hint + } + } + + const hasCounter = this.counter === true || this.$scopedSlots.counter !== void 0 + + if (this.hideBottomSpace === true && hasCounter === false && msg === void 0) { + return + } + + const main = h('div', { + key, + staticClass: 'q-field__messages col' + }, msg) + + return h('div', { + staticClass: 'q-field__bottom row items-start q-field__bottom--' + + (this.hideBottomSpace !== true ? 'animated' : 'stale'), + on: { click: prevent } + }, [ + this.hideBottomSpace === true + ? main + : h('transition', { props: { name: 'q-transition--field-message' } }, [ + main + ]), + + hasCounter === true + ? h('div', { + staticClass: 'q-field__counter' + }, this.$scopedSlots.counter !== void 0 ? this.$scopedSlots.counter() : [ this.computedCounter ]) + : null + ]) + }, + + __getInnerAppendNode (h, key, content) { + return content === null ? null : h('div', { + staticClass: 'q-field__append q-field__marginal row no-wrap items-center q-anchor--skip', + key + }, content) + }, + + __onControlPopupShow (e) { + e !== void 0 && stop(e) + this.$emit('popup-show', e) + this.hasPopupOpen = true + this.__onControlFocusin(e) + }, + + __onControlPopupHide (e) { + e !== void 0 && stop(e) + this.$emit('popup-hide', e) + this.hasPopupOpen = false + this.__onControlFocusout(e) + }, + + __onControlFocusin (e) { + clearTimeout(this.focusoutTimer) + if (this.editable === true && this.focused === false) { + this.focused = true + this.$emit('focus', e) + } + }, + + __onControlFocusout (e, then) { + clearTimeout(this.focusoutTimer) + this.focusoutTimer = setTimeout(() => { + if ( + document.hasFocus() === true && ( + this.hasPopupOpen === true || + this.$refs === void 0 || + this.$refs.control === void 0 || + this.$refs.control.contains(document.activeElement) !== false + ) + ) { + return + } + + if (this.focused === true) { + this.focused = false + this.$emit('blur', e) + } + + then !== void 0 && then() + }) + }, + + __clearValue (e) { + // prevent activating the field but keep focus on desktop + stopAndPrevent(e) + + if (this.$q.platform.is.mobile !== true) { + const el = this.$refs.target || this.$el + el.focus() + } + else if (this.$el.contains(document.activeElement) === true) { + document.activeElement.blur() + } + + if (this.type === 'file') { + // do not let focus be triggered + // as it will make the native file dialog + // appear for another selection + this.$refs.input.value = null + } + + this.$emit('input', null) + this.$emit('clear', this.value) + + this.$nextTick(() => { + this.resetValidation() + + if (this.$q.platform.is.mobile !== true) { + this.isDirty = false + } + }) + }, + + __emitValue (value) { + this.$emit('input', value) + }, + + __getBgColor () { + let el, bgColor + for (let i = this.parents.length - 1; i >= 0; i--) { + el = this.parents[i] + if (parentStyles.has(el)) { + bgColor = parentStyles.get(el).backgroundColor + if (bgColor !== 'rgba(0, 0, 0, 0)' && bgColor !== 'transparent') { + return bgColor + } + } + } + } + }, + + render (h) { + this.__onPreRender !== void 0 && this.__onPreRender() + + const attrs = this.__getControl === void 0 && this.$scopedSlots.control === void 0 + ? { + ...this.qAttrs, + 'data-autofocus': this.autofocus || void 0, + ...this.attrs + } + : this.attrs + + return h('label', { + staticClass: 'q-field q-validation-component row no-wrap items-start q-key-group-navigation--ignore-key', + class: this.classes, + attrs + }, [ + this.$scopedSlots.before !== void 0 ? h('div', { + staticClass: 'q-field__before q-field__marginal row no-wrap items-center', + on: this.slotsEvents + }, this.$scopedSlots.before()) : null, + + h('div', { + staticClass: 'q-field__inner relative-position col self-stretch' + }, [ + h('div', { + ref: 'control', + staticClass: 'q-field__control relative-position row no-wrap', + class: this.contentClass, + attrs: { tabindex: -1 }, + on: this.controlEvents + }, this.__getContent(h)), + + this.shouldRenderBottom === true + ? this.__getBottom(h) + : null + ]), + + this.$scopedSlots.after !== void 0 ? h('div', { + staticClass: 'q-field__after q-field__marginal row no-wrap items-center', + on: this.slotsEvents + }, this.$scopedSlots.after()) : null + ]) + }, + + created () { + this.__onPreRender !== void 0 && this.__onPreRender() + + this.slotsEvents = { click: prevent } + + this.clearableEvents = { click: this.__clearValue } + + this.controlEvents = this.__getControlEvents !== void 0 + ? this.__getControlEvents() + : { + focusin: this.__onControlFocusin, + focusout: this.__onControlFocusout, + 'popup-show': this.__onControlPopupShow, + 'popup-hide': this.__onControlPopupHide + } + + this.parents = [] + }, + + mounted () { + if (fromSSR === true && this.for === void 0) { + this.targetUid = getTargetUid() + } + + this.autofocus === true && this.focus() + + this.$nextTick(() => { + let el = this.$refs.control + while (el) { + if (parentStyles.has(el) !== true) { + parentStyles.set(el, window.getComputedStyle(el)) + } + this.parents.unshift(el) + el = el.parentElement + } + + if (this.outlinedMd === true && this.parents.length > 0) { + this.$forceUpdate() + } + }) + }, + + activated () { + if (this.shouldActivate !== true) { return } + this.autofocus === true && this.focus() + }, + + deactivated () { + this.shouldActivate = true + }, + + beforeDestroy () { + clearTimeout(this.focusoutTimer) + this.parents = [] + } +}) diff --git a/src/components/field/QField.json b/src/components/field/QField.json new file mode 100644 index 00000000000..64952ca740b --- /dev/null +++ b/src/components/field/QField.json @@ -0,0 +1,102 @@ +{ + "mixins": [ "components/field/__QField" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/field" + }, + + "props": { + "maxlength": { + "type": [ "String", "Number" ], + "desc": "Specify a max length of model", + "examples": [ "12" ], + "category": "model" + } + }, + + "scopedSlots": { + "control": { + "desc": "Slot for controls; Suggestion QSlider, QRange, QKnob, ...", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field", + "__exemption": [ "examples" ] + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "floatingLabel": { + "type": "Boolean", + "desc": "Field's label is floating" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ 0.241, "Text" ] + }, + "emitValue": { + "type": "Function", + "desc": "Function that emits an @input event in the context of the field", + "params": { + "value": { + "type": "Any", + "desc": "Value to be emitted", + "examples": [ 0, "Changed text" ] + } + }, + "returns": null + } + } + } + }, + + "events": { + "input": { + "extends": "input", + "desc": "Emitted when the model changes, only when used with 'clearable' or the 'control' scoped slot." + }, + + "focus": { + "desc": "Emitted when component gets focused", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + }, + + "blur": { + "desc": "Emitted when component loses focus", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + } + }, + + "methods": { + "focus": { + "desc": "Focus field" + }, + + "blur": { + "desc": "Blur field (lose focus)" + } + } +} diff --git a/src/components/field/QField.sass b/src/components/field/QField.sass new file mode 100644 index 00000000000..b213742216e --- /dev/null +++ b/src/components/field/QField.sass @@ -0,0 +1,631 @@ +$field-transition: .36s cubic-bezier(.4,0,.2,1) +// right changes quicker and overflows the container +$field-transition-label-right-down: .396s cubic-bezier(.4,0,.2,1) +$field-transition-label-right-up: .324s cubic-bezier(.4,0,.2,1) + +.q-field + font-size: $input-font-size + + ::-ms-clear, + ::-ms-reveal + display: none + + &--with-bottom + padding-bottom: 20px + + &__marginal + height: 56px + color: rgba(0,0,0,.54) + font-size: 24px + + > * + * + margin-left: 2px + + .q-avatar + font-size: 32px + + &__before, &__prepend + padding-right: 12px + + &__after, &__append + padding-left: 12px + + &:empty + display: none + + &__append + &__append + padding-left: 2px + + &__inner + text-align: left + + &__bottom + font-size: 12px + min-height: 20px + line-height: 1 + color: rgba(0,0,0,.54) + padding: 8px 12px 0 + backface-visibility: hidden + + &--animated + transform: translateY(100%) + position: absolute + left: 0 + right: 0 + bottom: 0 + + &__messages + line-height: 1 + + > div + word-break: break-word + word-wrap: break-word + overflow-wrap: break-word + + & + div + margin-top: 4px + + &__counter + padding-left: 8px + line-height: 1 + + &--item-aligned + padding: 8px 16px + + .q-field__before + min-width: 56px + + &__control-container + height: inherit + + &__control + color: $primary + color: var(--q-color-primary) + height: 56px + max-width: 100% + outline: none + + &:before, &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + pointer-events: none + &:before + border-radius: inherit + + &__shadow + top: 8px + opacity: 0 + overflow: hidden + white-space: pre-wrap + transition: opacity $field-transition + + + .q-field__native + &::placeholder + transition: opacity $field-transition + &:focus::placeholder + opacity: 0 + + &__native, &__prefix, &__suffix, &__input + font-weight: 400 + line-height: 28px + letter-spacing: .00937em + text-decoration: inherit + text-transform: inherit + border: none + border-radius: 0 + background: none + color: $input-text-color + outline: 0 + padding: 6px 0 + + &__native, &__input + width: 100% + min-width: 0 // needed for FF + outline: 0 !important // needed for FF + user-select: auto + + &:-webkit-autofill + -webkit-animation-name: q-autofill + -webkit-animation-fill-mode: both + + &:-webkit-autofill + .q-field__label + transform: translateY(-40%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-40%) scale(.75) + + &:invalid + box-shadow: none + + &__native[type="file"] + line-height: 1em // needed for Chrome type="file" + &__input + padding: 0 + height: 0 + min-height: 24px + line-height: 24px + &__prefix, &__suffix + transition: opacity $field-transition + white-space: nowrap + &__prefix + padding-right: 4px + &__suffix + padding-left: 4px + + &--readonly, &--disabled + .q-placeholder // override "disable" CSS on it + opacity: 1 !important + + &--readonly + &.q-field--labeled + .q-field__native, .q-field__input + cursor: default + &.q-field--float + .q-field__native, .q-field__input + cursor: text + + &--disabled + .q-field__inner + cursor: not-allowed + + .q-field__control + pointer-events: none + + .q-field__control + opacity: .6 !important + + div, div * // @stylint ignore + outline: 0 !important + + &__label + left: 0 + max-width: 100% + top: 18px + color: $input-label-color + font-size: 16px + line-height: 20px + font-weight: 400 + letter-spacing: .00937em + text-decoration: inherit + text-transform: inherit + transform-origin: left top + transition: transform $field-transition, max-width $field-transition-label-right-up + backface-visibility: hidden + + &__label-back + position: absolute + left: 0 + right: 0 + top: 7.5px + height: 0 + z-index: -1 + transition: height $field-transition + + &--float .q-field__label-back + height: 4.5px + + &--float .q-field__label + transform: translateY(-40%) scale(.75) + max-width: 133% + transition: transform $field-transition, max-width $field-transition-label-right-down + + &--highlighted + .q-field__label + color: currentColor + .q-field__shadow + opacity: .5 + + &--filled + + .q-field__control + padding: 0 12px + background: rgba(0,0,0,.05) + border-radius: $generic-border-radius $generic-border-radius 0 0 + + &:before + background: rgba(0,0,0,.05) + border-bottom: 1px solid rgba(0,0,0,.42) + opacity: 0 + transition: opacity $field-transition, background $field-transition + + &:hover:before + opacity: 1 + + &:after + height: 2px + top: auto + transform-origin: center bottom + transform: scale3d(0, 1, 1) + background: currentColor + transition: transform $field-transition + + &.q-field--rounded .q-field__control + border-radius: 28px 28px 0 0 + + &.q-field--highlighted + .q-field__control + &:before + opacity: 1 + background: rgba(0,0,0,.12) + &:after + transform: scale3d(1, 1, 1) + + &.q-field--dark + .q-field__control, .q-field__control:before + background: rgba(255,255,255,.07) + &.q-field--highlighted .q-field__control:before + background: rgba(255,255,255,.1) + + &.q-field--readonly + .q-field__control:before + opacity: 1 + background: transparent + border-bottom-style: dashed + + &--outlined + + .q-field__control + border-radius: $generic-border-radius + padding: 0 12px + + &:before + border: 1px solid rgba(0,0,0,.24) + transition: border-color $field-transition + &:hover:before + border-color: $light-text + border-color: var(--q-color-light-text) + + &:after + height: inherit + border-radius: inherit + border: 2px solid transparent + transition: border-color $field-transition + + .q-field__native, + .q-field__input + &:-webkit-autofill + margin-top: 1px + margin-bottom: 1px + + &.q-field--rounded .q-field__control + border-radius: 28px + + &.q-field--highlighted + // prevent rounded border imperfections to be seen through the :after border + .q-field__control:hover:before + border-color: transparent + .q-field__control:after + border-color: currentColor + border-width: 2px + transform: scale3d(1, 1, 1) + + &.q-field--readonly + .q-field__control:before + border-style: dashed + + &--standard + + .q-field__control + &:before + border-bottom: 1px solid rgba(0,0,0,.24) + transition: border-color $field-transition + + &:hover:before + border-color: $light-text + border-color: var(--q-color-light-text) + + &:after + height: 2px + top: auto + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + transform-origin: center bottom + transform: scale3d(0, 1, 1) + background: currentColor + transition: transform $field-transition + + &.q-field--highlighted + .q-field__control:after + transform: scale3d(1, 1, 1) + + &.q-field--readonly + .q-field__control:before + border-bottom-style: dashed + + &--dark + + .q-field__control:before + border-color: rgba(255,255,255,.6) + + .q-field__control:hover:before + border-color: $dark-text + border-color: var(--q-color-dark-text) + + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + + &:not(.q-field--highlighted) .q-field__label, .q-field__marginal, .q-field__bottom + color: rgba(255,255,255,.7) + + &--standout + + .q-field__control + padding: 0 12px + background: rgba(0,0,0,.05) + border-radius: $generic-border-radius + transition: box-shadow $field-transition, background-color $field-transition + + &:before + background: rgba(0,0,0,.07) + opacity: 0 + transition: opacity $field-transition, background $field-transition + + &:hover:before + opacity: 1 + + &.q-field--rounded .q-field__control + border-radius: 28px + + &.q-field--highlighted + .q-field__control + box-shadow: $shadow-2 + background: $dark-page + background: var(--q-color-dark-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + + &.q-field--readonly + .q-field__control:before + opacity: 1 + background: transparent + border: 1px dashed rgba(0,0,0,.24) + + &.q-field--dark + .q-field__control + background: rgba(255,255,255,.07) + &:before + background: rgba(255,255,255,.07) + &.q-field--highlighted + .q-field__control + background: $light-page + background: var(--q-color-light-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $light-text + color: var(--q-color-light-text) + &.q-field--readonly + .q-field__control:before + border-color: rgba(255,255,255,.24) + + &--labeled + &--std + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 24px + padding-top: 24px + padding-bottom: 8px + + .q-field__shadow + top: 0 + + &:not(.q-field--float) + .q-field__prefix, .q-field__suffix + opacity: 0 + + .q-field__native, .q-field__input + &::-webkit-input-placeholder + color: transparent + &::-moz-placeholder + color: transparent + &:-ms-input-placeholder + color: transparent !important + &::-ms-input-placeholder + color: transparent + &::placeholder + color: transparent + + &--std.q-field--dense + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 14px + padding-bottom: 2px + + &--dense + .q-field__shadow + top: 0 + .q-field__control, .q-field__marginal + height: 40px + .q-field__bottom + font-size: 11px + + .q-field__label + font-size: 14px + top: 10px + .q-field__before, .q-field__prepend + padding-right: 6px + .q-field__after, .q-field__append + padding-left: 6px + .q-field__append + .q-field__append + padding-left: 2px + + .q-field__marginal + .q-avatar + font-size: 24px + + &.q-field--float .q-field__label + transform: translateY(-30%) scale(.75) + + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-30%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-30%) scale(.75) + + &--outlined--md + &.q-field--float .q-field__label + max-width: 133% + transform: translateY(-120%) scale(.75) + padding-left: 6px + padding-right: 6px + transition: transform $field-transition, padding $field-transition, max-width $field-transition-label-right-down + + .q-field__label + z-index: 1 + left: -4px + padding-left: 4px + padding-right: 4px + border-radius: 4px + transition: transform $field-transition, padding $field-transition, max-width $field-transition-label-right-up + + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-120%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-120%) scale(.75) + + &.q-field--dense + &.q-field--outlined--md.q-field--float .q-field__label + transform: translateY(-85%) scale(.75) + + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-85%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-85%) scale(.75) + + &--borderless, &--standard + + .q-field__bottom, + &.q-field--dense .q-field__control + padding-left: 0 + padding-right: 0 + + &--error + .q-field__label + animation: q-field-label .36s + + .q-field__bottom + color: $negative + color: var(--q-color-negative) + + &__focusable-action + opacity: 0.6 + cursor: pointer + outline: 0 !important + border: 0 + color: inherit + background: transparent + padding: 0 + + &:hover, + &:focus + opacity: 1 + + &--auto-height + + .q-field__control + height: auto + + .q-field__control, .q-field__native + min-height: 56px + + .q-field__native + align-items: center + + .q-field__control-container + padding-top: 0 + + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 18px + + &.q-field--labeled--std + .q-field__control-container + padding-top: 24px + .q-field__shadow + top: 24px + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 0 + .q-field__native + min-height: 24px + + &.q-field--dense + .q-field__control, .q-field__native + min-height: 40px + + &.q-field--labeled--std + .q-field__control-container + padding-top: 14px + .q-field__shadow + top: 14px + .q-field__native + min-height: 24px + + &--square .q-field__control + border-radius: 0 !important + +.q-transition--field-message + &-enter-active, + &-leave-active + transition: transform .6s cubic-bezier(.86,0,.07,1), opacity .6s cubic-bezier(.86,0,.07,1) + + &-enter, &-leave-to + opacity: 0 + transform: translateY(-10px) + + &-leave, &-leave-active + position: absolute + +@media (prefers-color-scheme: dark) + .q-field--dark-auto + &.q-field--filled + .q-field__control, .q-field__control:before + background: rgba(255,255,255,.07) + &.q-field--highlighted .q-field__control:before + background: rgba(255,255,255,.1) + + .q-field__control:before + border-color: rgba(255,255,255,.6) + + .q-field__control:hover:before + border-color: $dark-text + border-color: var(--q-color-dark-text) + + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + + &:not(.q-field--highlighted) .q-field__label, .q-field__marginal, .q-field__bottom + color: rgba(255,255,255,.7) + + &.q-field--standout + .q-field__control + background: rgba(255,255,255,.07) + &:before + background: rgba(255,255,255,.07) + &.q-field--highlighted + .q-field__control + background: $light-page + background: var(--q-color-light-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $light-text + color: var(--q-color-light-text) + &.q-field--readonly + .q-field__control:before + border-color: rgba(255,255,255,.24) + +@keyframes q-field-label + 40% + margin-left: 2px + + 60%, 80% + margin-left: -2px + + 70%, 90% + margin-left: 2px + +@keyframes q-autofill + to + background: transparent + color: $input-autofill-color diff --git a/src/components/field/QField.styl b/src/components/field/QField.styl new file mode 100644 index 00000000000..7ab4a798815 --- /dev/null +++ b/src/components/field/QField.styl @@ -0,0 +1,631 @@ +$field-transition = .36s cubic-bezier(.4,0,.2,1) +// right changes quicker and overflows the container +$field-transition-label-right-down = .396s cubic-bezier(.4,0,.2,1) +$field-transition-label-right-up = .324s cubic-bezier(.4,0,.2,1) + +.q-field + font-size: $input-font-size + + ::-ms-clear, + ::-ms-reveal + display: none + + &--with-bottom + padding-bottom: 20px + + &__marginal + height: 56px + color: rgba(0,0,0,.54) + font-size: 24px + + > * + * + margin-left: 2px + + .q-avatar + font-size: 32px + + &__before, &__prepend + padding-right: 12px + + &__after, &__append + padding-left: 12px + + &:empty + display: none + + &__append + &__append + padding-left: 2px + + &__inner + text-align: left + + &__bottom + font-size: 12px + min-height: 20px + line-height: 1 + color: rgba(0,0,0,.54) + padding: 8px 12px 0 + backface-visibility: hidden + + &--animated + transform: translateY(100%) + position: absolute + left: 0 + right: 0 + bottom: 0 + + &__messages + line-height: 1 + + > div + word-break: break-word + word-wrap: break-word + overflow-wrap: break-word + + & + div + margin-top: 4px + + &__counter + padding-left: 8px + line-height: 1 + + &--item-aligned + padding: 8px 16px + + .q-field__before + min-width: 56px + + &__control-container + height: inherit + + &__control + color: $primary + color: var(--q-color-primary) + height: 56px + max-width: 100% + outline: none + + &:before, &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + pointer-events: none + &:before + border-radius: inherit + + &__shadow + top: 8px + opacity: 0 + overflow: hidden + white-space: pre-wrap + transition: opacity $field-transition + + + .q-field__native + &::placeholder + transition: opacity $field-transition + &:focus::placeholder + opacity: 0 + + &__native, &__prefix, &__suffix, &__input + font-weight: 400 + line-height: 28px + letter-spacing: .00937em + text-decoration: inherit + text-transform: inherit + border: none + border-radius: 0 + background: none + color: $input-text-color + outline: 0 + padding: 6px 0 + + &__native, &__input + width: 100% + min-width: 0 // needed for FF + outline: 0 !important // needed for FF + user-select: auto + + &:-webkit-autofill + -webkit-animation-name: q-autofill + -webkit-animation-fill-mode: both + + &:-webkit-autofill + .q-field__label + transform: translateY(-40%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-40%) scale(.75) + + &:invalid + box-shadow: none + + &__native[type="file"] + line-height: 1em // needed for Chrome type="file" + &__input + padding: 0 + height: 0 + min-height: 24px + line-height: 24px + &__prefix, &__suffix + transition: opacity $field-transition + white-space: nowrap + &__prefix + padding-right: 4px + &__suffix + padding-left: 4px + + &--readonly, &--disabled + .q-placeholder // override "disable" CSS on it + opacity: 1 !important + + &--readonly + &.q-field--labeled + .q-field__native, .q-field__input + cursor: default + &.q-field--float + .q-field__native, .q-field__input + cursor: text + + &--disabled + .q-field__inner + cursor: not-allowed + + .q-field__control + pointer-events: none + + .q-field__control + opacity: .6 !important + + div, div * // @stylint ignore + outline: 0 !important + + &__label + left: 0 + max-width: 100% + top: 18px + color: $input-label-color + font-size: 16px + line-height: 20px + font-weight: 400 + letter-spacing: .00937em + text-decoration: inherit + text-transform: inherit + transform-origin: left top + transition: transform $field-transition, max-width $field-transition-label-right-up + backface-visibility: hidden + + &__label-back + position: absolute + left: 0 + right: 0 + top: 7.5px + height: 0 + z-index: -1 + transition: height $field-transition + + &--float .q-field__label-back + height: 4.5px + + &--float .q-field__label + transform: translateY(-40%) scale(.75) + max-width: 133% + transition: transform $field-transition, max-width $field-transition-label-right-down + + &--highlighted + .q-field__label + color: currentColor + .q-field__shadow + opacity: .5 + + &--filled + + .q-field__control + padding: 0 12px + background: rgba(0,0,0,.05) + border-radius: $generic-border-radius $generic-border-radius 0 0 + + &:before + background: rgba(0,0,0,.05) + border-bottom: 1px solid rgba(0,0,0,.42) + opacity: 0 + transition: opacity $field-transition, background $field-transition + + &:hover:before + opacity: 1 + + &:after + height: 2px + top: auto + transform-origin: center bottom + transform: scale3d(0, 1, 1) + background: currentColor + transition: transform $field-transition + + &.q-field--rounded .q-field__control + border-radius: 28px 28px 0 0 + + &.q-field--highlighted + .q-field__control + &:before + opacity: 1 + background: rgba(0,0,0,.12) + &:after + transform: scale3d(1, 1, 1) + + &.q-field--dark + .q-field__control, .q-field__control:before + background: rgba(255,255,255,.07) + &.q-field--highlighted .q-field__control:before + background: rgba(255,255,255,.1) + + &.q-field--readonly + .q-field__control:before + opacity: 1 + background: transparent + border-bottom-style: dashed + + &--outlined + + .q-field__control + border-radius: $generic-border-radius + padding: 0 12px + + &:before + border: 1px solid rgba(0,0,0,.24) + transition: border-color $field-transition + &:hover:before + border-color: $light-text + border-color: var(--q-color-light-text) + + &:after + height: inherit + border-radius: inherit + border: 2px solid transparent + transition: border-color $field-transition + + .q-field__native, + .q-field__input + &:-webkit-autofill + margin-top: 1px + margin-bottom: 1px + + &.q-field--rounded .q-field__control + border-radius: 28px + + &.q-field--highlighted + // prevent rounded border imperfections to be seen through the :after border + .q-field__control:hover:before + border-color: transparent + .q-field__control:after + border-color: currentColor + border-width: 2px + transform: scale3d(1, 1, 1) + + &.q-field--readonly + .q-field__control:before + border-style: dashed + + &--standard + + .q-field__control + &:before + border-bottom: 1px solid rgba(0,0,0,.24) + transition: border-color $field-transition + + &:hover:before + border-color: $light-text + border-color: var(--q-color-light-text) + + &:after + height: 2px + top: auto + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + transform-origin: center bottom + transform: scale3d(0, 1, 1) + background: currentColor + transition: transform $field-transition + + &.q-field--highlighted + .q-field__control:after + transform: scale3d(1, 1, 1) + + &.q-field--readonly + .q-field__control:before + border-bottom-style: dashed + + &--dark + + .q-field__control:before + border-color: rgba(255,255,255,.6) + + .q-field__control:hover:before + border-color: $dark-text + border-color: var(--q-color-dark-text) + + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + + &:not(.q-field--highlighted) .q-field__label, .q-field__marginal, .q-field__bottom + color: rgba(255,255,255,.7) + + &--standout + + .q-field__control + padding: 0 12px + background: rgba(0,0,0,.05) + border-radius: $generic-border-radius + transition: box-shadow $field-transition, background-color $field-transition + + &:before + background: rgba(0,0,0,.07) + opacity: 0 + transition: opacity $field-transition, background $field-transition + + &:hover:before + opacity: 1 + + &.q-field--rounded .q-field__control + border-radius: 28px + + &.q-field--highlighted + .q-field__control + box-shadow: $shadow-2 + background: $dark-page + background: var(--q-color-dark-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + + &.q-field--readonly + .q-field__control:before + opacity: 1 + background: transparent + border: 1px dashed rgba(0,0,0,.24) + + &.q-field--dark + .q-field__control + background: rgba(255,255,255,.07) + &:before + background: rgba(255,255,255,.07) + &.q-field--highlighted + .q-field__control + background: $light-page + background: var(--q-color-light-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $light-text + color: var(--q-color-light-text) + &.q-field--readonly + .q-field__control:before + border-color: rgba(255,255,255,.24) + + &--labeled + &--std + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 24px + padding-top: 24px + padding-bottom: 8px + + .q-field__shadow + top: 0 + + &:not(.q-field--float) + .q-field__prefix, .q-field__suffix + opacity: 0 + + .q-field__native, .q-field__input + &::-webkit-input-placeholder + color: transparent + &::-moz-placeholder + color: transparent + &:-ms-input-placeholder + color: transparent !important + &::-ms-input-placeholder + color: transparent + &::placeholder + color: transparent + + &--std.q-field--dense + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 14px + padding-bottom: 2px + + &--dense + .q-field__shadow + top: 0 + .q-field__control, .q-field__marginal + height: 40px + .q-field__bottom + font-size: 11px + + .q-field__label + font-size: 14px + top: 10px + .q-field__before, .q-field__prepend + padding-right: 6px + .q-field__after, .q-field__append + padding-left: 6px + .q-field__append + .q-field__append + padding-left: 2px + + .q-field__marginal + .q-avatar + font-size: 24px + + &.q-field--float .q-field__label + transform: translateY(-30%) scale(.75) + + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-30%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-30%) scale(.75) + + &--outlined--md + &.q-field--float .q-field__label + max-width: 133% + transform: translateY(-120%) scale(.75) + padding-left: 6px + padding-right: 6px + transition: transform $field-transition, padding $field-transition, max-width $field-transition-label-right-down + + .q-field__label + z-index: 1 + left: -4px + padding-left: 4px + padding-right: 4px + border-radius: 4px + transition: transform $field-transition, padding $field-transition, max-width $field-transition-label-right-up + + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-120%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-120%) scale(.75) + + &.q-field--dense + &.q-field--outlined--md.q-field--float .q-field__label + transform: translateY(-85%) scale(.75) + + .q-field__native, .q-field__input + &:-webkit-autofill + .q-field__label + transform: translateY(-85%) scale(.75) + &[type="number"]:invalid + .q-field__label + transform: translateY(-85%) scale(.75) + + &--borderless, &--standard + + .q-field__bottom, + &.q-field--dense .q-field__control + padding-left: 0 + padding-right: 0 + + &--error + .q-field__label + animation: q-field-label .36s + + .q-field__bottom + color: $negative + color: var(--q-color-negative) + + &__focusable-action + opacity: 0.6 + cursor: pointer + outline: 0 !important + border: 0 + color: inherit + background: transparent + padding: 0 + + &:hover, + &:focus + opacity: 1 + + &--auto-height + + .q-field__control + height: auto + + .q-field__control, .q-field__native + min-height: 56px + + .q-field__native + align-items: center + + .q-field__control-container + padding-top: 0 + + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 18px + + &.q-field--labeled--std + .q-field__control-container + padding-top: 24px + .q-field__shadow + top: 24px + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 0 + .q-field__native + min-height: 24px + + &.q-field--dense + .q-field__control, .q-field__native + min-height: 40px + + &.q-field--labeled--std + .q-field__control-container + padding-top: 14px + .q-field__shadow + top: 14px + .q-field__native + min-height: 24px + + &--square .q-field__control + border-radius: 0 !important + +.q-transition--field-message + &-enter-active, + &-leave-active + transition: transform .6s cubic-bezier(.86,0,.07,1), opacity .6s cubic-bezier(.86,0,.07,1) + + &-enter, &-leave-to + opacity: 0 + transform: translateY(-10px) + + &-leave, &-leave-active + position: absolute + +@media (prefers-color-scheme: dark) + .q-field--dark-auto + &.q-field--filled + .q-field__control, .q-field__control:before + background: rgba(255,255,255,.07) + &.q-field--highlighted .q-field__control:before + background: rgba(255,255,255,.1) + + .q-field__control:before + border-color: rgba(255,255,255,.6) + + .q-field__control:hover:before + border-color: $dark-text + border-color: var(--q-color-dark-text) + + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__input + color: $dark-text + color: var(--q-color-dark-text) + + &:not(.q-field--highlighted) .q-field__label, .q-field__marginal, .q-field__bottom + color: rgba(255,255,255,.7) + + &.q-field--standout + .q-field__control + background: rgba(255,255,255,.07) + &:before + background: rgba(255,255,255,.07) + &.q-field--highlighted + .q-field__control + background: $light-page + background: var(--q-color-light-page) + .q-field__native, .q-field__prefix, .q-field__suffix, .q-field__prepend, .q-field__append, .q-field__input + color: $light-text + color: var(--q-color-light-text) + &.q-field--readonly + .q-field__control:before + border-color: rgba(255,255,255,.24) + +@keyframes q-field-label + 40% + margin-left: 2px + + 60%, 80% + margin-left: -2px + + 70%, 90% + margin-left: 2px + +@keyframes q-autofill + to + background: transparent + color: $input-autofill-color diff --git a/src/components/field/__QField.json b/src/components/field/__QField.json new file mode 100644 index 00000000000..61c906ac9fc --- /dev/null +++ b/src/components/field/__QField.json @@ -0,0 +1,313 @@ +{ + "mixins": [ "mixins/validate" ], + + "props": { + "label": { + "type": "String", + "desc": "A text label that will “float” up above the input field, once the field gets focus", + "examples": [ "Username" ], + "category": "content" + }, + + "stack-label": { + "type": "Boolean", + "desc": "Label will be always shown above the field regardless of field content (if any)", + "category": "content" + }, + + "hint": { + "type": "String", + "desc": "Helper (hint) text which gets placed below your wrapped form component", + "examples": [ "Fill in between 3 and 12 characters" ], + "category": "content" + }, + + "hide-hint": { + "type": "Boolean", + "desc": "Hide the helper (hint) text when field doesn't have focus", + "category": "content" + }, + + "prefix": { + "type": "String", + "desc": "Prefix", + "examples": [ "$" ], + "category": "content" + }, + + "suffix": { + "type": "String", + "desc": "Suffix", + "examples": [ "@gmail.com" ], + "category": "content" + }, + + "label-color" : { + "extends": "color", + "desc": "Color name for the label from the Quasar Color Palette; Overrides the 'color' prop; The difference from 'color' prop is that the label will always have this color, even when field is not focused", + "addedIn": "v1.7" + }, + + "color": { + "extends": "color" + }, + + "bg-color": { + "extends": "color" + }, + + "dark": { + "extends": "dark" + }, + + "loading": { + "type": "Boolean", + "desc": "Signals the user a process is in progress by displaying a spinner; Spinner can be customized by using the 'loading' slot.", + "category": "behavior|content" + }, + + "clearable": { + "type": "Boolean", + "desc": "Appends clearable icon when a value (not undefined or null) is set; When clicked, model becomes null", + "category": "behavior|content" + }, + + "clear-icon": { + "type": "String", + "desc": "Custom icon to use for the clear button when using along with 'clearable' prop", + "examples": [ "close" ], + "category": "content" + }, + + "filled": { + "type": "Boolean", + "desc": "Use 'filled' design for the field", + "category": "style" + }, + + "outlined": { + "type": "Boolean", + "desc": "Use 'outlined' design for the field", + "category": "style" + }, + + "outlined-md": { + "type": "Boolean", + "desc": "Use Material Design 'outlined' design for the field", + "category": "style", + "addedIn": "v1.17.8" + }, + + "borderless": { + "type": "Boolean", + "desc": "Use 'borderless' design for the field", + "category": "style" + }, + + "standout": { + "type": [ "Boolean", "String" ], + "desc": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)", + "examples": [ + "standout", + "standout=\"bg-primary text-white\"" + ], + "category": "style" + }, + + "label-slot": { + "type": "Boolean", + "desc": "Enables label slot; You need to set it to force use of the 'label' slot if the 'label' prop is not set", + "category": "content", + "addedIn": "v1.12.9" + }, + + "bottom-slots": { + "type": "Boolean", + "desc": "Enables bottom slots ('error', 'hint', 'counter')", + "category": "content" + }, + + "hide-bottom-space": { + "type": "Boolean", + "desc": "Do not reserve space for hint/error/counter anymore when these are not used; As a result, it also disables the animation for those; It also allows the hint/error area to stretch vertically based on its content", + "category": "style" + }, + + "counter": { + "type": "Boolean", + "desc": "Show an automatic counter on bottom right", + "category": "content" + }, + + "rounded": { + "extends": "rounded" + }, + + "square": { + "type": "Boolean", + "desc": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "category": "style" + }, + + "dense": { + "extends": "dense" + }, + + "item-aligned": { + "type": "Boolean", + "desc": "Match inner content alignment to that of QItem", + "category": "style" + }, + + "disable": { + "extends": "disable" + }, + + "readonly": { + "extends": "readonly" + }, + + "autofocus": { + "type": "Boolean", + "desc": "Focus field on initial component render", + "category": "behavior" + }, + + "for": { + "type": "String", + "desc": "Used to specify the 'id' of the control and also the 'for' attribute of the label that wraps it; If no 'name' prop is specified, then it is used for this attribute as well", + "examples": [ "myFieldsId" ], + "category": "behavior", + "addedIn": "v1.4.2" + }, + + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms; If not specified, it takes the value of 'for' prop, if it exists", + "examples": [ "car_id" ], + "category": "behavior", + "addedIn": "v1.9" + } + }, + + "slots": { + "default": { + "desc": "Field main content" + }, + + "prepend": { + "desc": "Prepend inner field; Suggestions: QIcon, QBtn" + }, + + "append": { + "desc": "Append to inner field; Suggestions: QIcon, QBtn" + }, + + "before": { + "desc": "Prepend outer field; Suggestions: QIcon, QBtn" + }, + + "after": { + "desc": "Append outer field; Suggestions: QIcon, QBtn" + }, + + "label": { + "desc": "Slot for label; Used only if 'label-slot' prop is set or the 'label' prop is set; When it is used the text in the 'label' prop is ignored", + "addedIn": "v1.12.9" + }, + + "counter": { + "desc": "Slot for counter text; Enabled only if 'bottom-slots' prop is used; Suggestion:
" + }, + + "loading": { + "desc": "Override default spinner when component is in loading mode; Use in conjunction with 'loading' prop" + } + }, + + "scopedSlots": { + "error": { + "desc": "Slot for errors; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field", + "__exemption": [ "examples" ] + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ 0.241, "Text" ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ "The field is required" ] + } + }, + "addedIn": "v1.17" + }, + + "hint": { + "desc": "Slot for hint text; Enabled only if 'bottom-slots' prop is used; Suggestion:
", + "scope": { + "id": { + "type": "String", + "desc": "Element id used in the `for` attribute of the field label. Can be used to link the control to the label", + "examples": [ "qf_363270c0-7a83-62b1-8dcf-6dfd64ee38fa" ] + }, + "field": { + "type": "Object", + "desc": "DOM element of the field", + "__exemption": [ "examples" ] + }, + "editable": { + "type": "Boolean", + "desc": "Field is editable" + }, + "focused": { + "type": "Boolean", + "desc": "Field has focus" + }, + "value": { + "type": "Any", + "desc": "Field's value", + "examples": [ 0.241, "Text" ] + }, + "errorMessage": { + "type": "String", + "desc": "Error message (from errorMessage prop or generated by rules)", + "examples": [ "The field is required" ] + } + }, + "addedIn": "v1.17" + } + }, + + "events": { + "clear": { + "desc": "When using the 'clearable' property, this event is emitted when the clear icon is clicked", + "addedIn": "v1.1.5", + "params": { + "value": { + "type": [ "Any" ], + "desc": "The previous value before clearing it", + "__exemption": [ "examples" ] + } + } + } + } +} diff --git a/src/components/field/index.js b/src/components/field/index.js new file mode 100644 index 00000000000..89043f8bbd6 --- /dev/null +++ b/src/components/field/index.js @@ -0,0 +1,5 @@ +import QField from './QField.js' + +export { + QField +} diff --git a/src/components/file/QFile.js b/src/components/file/QFile.js new file mode 100644 index 00000000000..efec8c518ad --- /dev/null +++ b/src/components/file/QFile.js @@ -0,0 +1,279 @@ +import Vue from 'vue' + +import QField from '../field/QField.js' +import QChip from '../chip/QChip.js' + +import { FormFieldMixin } from '../../mixins/form.js' +import FileMixin, { FileValueMixin } from '../../mixins/file.js' + +import { isSSR } from '../../plugins/Platform' +import { humanStorageSize } from '../../utils/format.js' +import cache from '../../utils/private/cache.js' +import { prevent } from '../../utils/event.js' + +export default Vue.extend({ + name: 'QFile', + + mixins: [ QField, FileMixin, FormFieldMixin, FileValueMixin ], + + props: { + /* SSR does not know about File & FileList */ + value: isSSR === true + ? {} + : [ File, FileList, Array ], + + append: Boolean, + useChips: Boolean, + displayValue: [ String, Number ], + + tabindex: { + type: [ String, Number ], + default: 0 + }, + + counterLabel: Function, + + inputClass: [ Array, String, Object ], + inputStyle: [ Array, String, Object ] + }, + + data () { + return { + dnd: false + } + }, + + computed: { + innerValue () { + return Object(this.value) === this.value + ? ('length' in this.value ? Array.from(this.value) : [ this.value ]) + : [] + }, + + selectedString () { + return this.innerValue + .map(file => file.name) + .join(', ') + }, + + totalSize () { + return humanStorageSize( + this.innerValue.reduce((acc, file) => acc + file.size, 0) + ) + }, + + counterProps () { + return { + totalSize: this.totalSize, + filesNumber: this.innerValue.length, + maxFiles: this.maxFiles + } + }, + + computedCounter () { + if (this.counterLabel !== void 0) { + return this.counterLabel(this.counterProps) + } + + const max = this.maxFiles + return `${this.innerValue.length}${max !== void 0 ? ' / ' + max : ''} (${this.totalSize})` + }, + + inputAttrs () { + return { + tabindex: -1, + type: 'file', + title: '', // try to remove default tooltip, + accept: this.accept, + capture: this.capture, + name: this.nameProp, + ...this.qAttrs, + id: this.targetUid, + disabled: this.editable !== true + } + }, + + isAppending () { + return this.multiple === true && this.append === true + }, + + fieldClass () { + return 'q-file q-field--auto-height' + (this.dnd === true ? ' q-file--dnd' : '') + } + }, + + methods: { + removeAtIndex (index) { + const files = this.innerValue.slice() + files.splice(index, 1) + this.__emitValue(files) + }, + + removeFile (file) { + const index = this.innerValue.findIndex(file) + if (index > -1) { + this.removeAtIndex(index) + } + }, + + __emitValue (files) { + this.$emit('input', this.multiple === true ? files : files[0]) + }, + + __onKeydown (e) { + // prevent form submit if ENTER is pressed + e.keyCode === 13 && prevent(e) + }, + + __onKeyup (e) { + // only on ENTER and SPACE to match native input field + if (e.keyCode === 13 || e.keyCode === 32) { + this.pickFiles(e) + } + }, + + __getFileInput () { + return this.$refs.input + }, + + __addFiles (e, fileList) { + const files = this.__processFiles(e, fileList, this.innerValue, this.isAppending) + const fileInput = this.__getFileInput() + + if (fileInput !== void 0) { + fileInput.value = '' + } + + // if nothing to do... + if (files === void 0) { return } + + // protect against input @change being called in a loop + // like it happens on Safari, so don't emit same thing: + if ( + this.multiple === true + ? this.value && files.every(f => this.innerValue.includes(f)) + : this.value === files[ 0 ] + ) { + return + } + + this.__emitValue( + this.isAppending === true + ? this.innerValue.concat(files) + : files + ) + }, + + __getControl (h) { + const data = { + key: 'target', + ref: 'target', + staticClass: 'q-field__native row items-center cursor-pointer', + attrs: { + tabindex: this.tabindex + } + } + + if (this.editable === true) { + data.on = cache(this, 'native', { + dragover: this.__onDragOver, + dragleave: this.__onDragLeave, + keydown: this.__onKeydown, + keyup: this.__onKeyup + }) + } + + return h('div', data, [ this.__getInput(h) ].concat(this.__getSelection(h))) + }, + + __getControlChild (h) { + return this.__getDnd(h, 'file') + }, + + __getFiller (h) { + return [ + h('input', { + class: [ this.inputClass, 'q-file__filler' ], + style: this.inputStyle + }) + ] + }, + + __getSelection (h) { + if (this.$scopedSlots.file !== void 0) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.innerValue.map((file, index) => this.$scopedSlots.file({ index, file, ref: this })) + } + + if (this.$scopedSlots.selected !== void 0) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.$scopedSlots.selected({ files: this.innerValue, ref: this }) + } + + if (this.useChips === true) { + return this.innerValue.length === 0 + ? this.__getFiller(h) + : this.innerValue.map((file, i) => h(QChip, { + key: 'rem#' + i, + props: { + removable: this.editable, + dense: true, + textColor: this.color, + tabindex: this.tabindex + }, + on: cache(this, 'rem#' + i, { + remove: () => { this.removeAtIndex(i) } + }) + }, [ + h('span', { + staticClass: 'ellipsis', + domProps: { + textContent: file.name + } + }) + ])) + } + + const textContent = this.displayValue !== void 0 + ? this.displayValue + : this.selectedString + + return textContent.length > 0 + ? [ + h('div', { + style: this.inputStyle, + class: this.inputClass, + domProps: { textContent } + }) + ] + : this.__getFiller(h) + }, + + __getInput (h) { + const data = { + key: 'input', + ref: 'input', + staticClass: 'q-field__input fit absolute-full cursor-pointer', + attrs: this.inputAttrs, + domProps: this.formDomProps, + on: cache(this, 'input', { + change: this.__addFiles + }) + } + + if (this.multiple === true) { + data.attrs.multiple = true + } + + return h('input', data) + } + }, + + created () { + // necessary for QField's clearable + // and FileValueMixin + this.type = 'file' + } +}) diff --git a/src/components/file/QFile.json b/src/components/file/QFile.json new file mode 100644 index 00000000000..18d6bb6c55b --- /dev/null +++ b/src/components/file/QFile.json @@ -0,0 +1,182 @@ +{ + "mixins": [ "components/field/__QField", "mixins/file", "mixins/form" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/file" + }, + + "addedIn": "v1.8", + + "props": { + "value": { + "type": [ "File", "FileList", "Array" ], + "desc": "Model of the component; Must be FileList or Array if using 'multiple' prop; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "required": true, + "examples": [ "v-model=\"myModel\"" ], + "category": "model" + }, + + "append": { + "type": "Boolean", + "desc": "Append file(s) to current model rather than replacing them; Has effect only when using 'multiple' mode", + "category": "behavior", + "addedIn": "v1.11.3" + }, + + "display-value": { + "type": [ "Number", "String" ], + "desc": "Override default selection string, if not using 'file' or 'selected' scoped slots and if not using 'use-chips' prop", + "examples": [ "Options: x, y, z" ], + "category": "selection" + }, + + "use-chips": { + "type": "Boolean", + "desc": "Use QChip to show picked files", + "category": "selection" + }, + + "counter-label": { + "type": "Function", + "desc": "Label for the counter; The 'counter' prop is necessary to enable this one", + "params": { + "props": { + "type": "Object", + "desc": "Object containing counter label information", + "definition": { + "totalSize": { + "type": "String", + "desc": "The total size of files in human readable format", + "examples": [ "1.42MB" ] + }, + "filesNumber": { + "type": "Number", + "desc": "Number of picked files", + "examples": [ 5 ] + }, + "maxFiles": { + "type": [ "Number", "String" ], + "desc": "Maximum number of files (same as 'max-files' prop, if specified); When 'max-files' is not specified, this has 'void 0' as value", + "examples": [ 5 ] + } + } + } + }, + "returns": { + "type": "String", + "desc": "String to display for the counter label", + "__exemption": [ "examples" ] + }, + "examples": [ + ":counter-label=\"counterLabelFn\"" + ], + "category": "behavior" + }, + + "tabindex": { + "extends": "tabindex" + }, + + "input-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the underlying selection container", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + + "input-style": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the underlying selection container", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + } + }, + + "scopedSlots": { + "file": { + "desc": "Override default node to render a file from the user picked list", + "scope": { + "index": { + "type": "Number", + "desc": "Selection index", + "examples": [ 0 ] + }, + + "file": { + "type": "File", + "desc": "File object", + "__exemption": [ "examples" ] + }, + + "ref": { + "type": "Object", + "desc": "Reference to the QFile component", + "__exemption": [ "examples" ] + } + } + }, + + "selected": { + "desc": "Override default selection slot; Suggestion: QChip", + "scope": { + "files": { + "type": [ "FileList", "Array" ], + "desc": "Array of File objects", + "__exemption": [ "examples" ] + }, + + "ref": { + "type": "Object", + "desc": "Reference to the QFile component", + "__exemption": [ "examples" ] + } + } + } + }, + + "events": { + "input": { + "extends": "input" + } + }, + + "methods": { + "focus": { + "desc": "Focus component" + }, + + "blur": { + "desc": "Blur component (lose focus)" + }, + + "removeAtIndex": { + "desc": "Remove file located at specific index in the model", + "params": { + "index": { + "type": "Number", + "desc": "Index at which to remove selection", + "required": true, + "examples": [ 0 ] + } + } + }, + + "removeFile": { + "desc": "Remove specified file from the model", + "params": { + "file": { + "type": "File", + "desc": "File to remove (instance of File)", + "required": true, + "__exemption": [ "examples" ] + } + } + } + } +} diff --git a/src/components/file/QFile.sass b/src/components/file/QFile.sass new file mode 100644 index 00000000000..24b96798fb6 --- /dev/null +++ b/src/components/file/QFile.sass @@ -0,0 +1,20 @@ +.q-file + + .q-field__native + word-break: break-all + + .q-field__input + opacity: 0 !important + + &::-webkit-file-upload-button + cursor: pointer + + &__filler + visibility: hidden + width: 100% + border: none + padding: 0 + + &__dnd + outline: 1px dashed currentColor + outline-offset: -4px diff --git a/src/components/file/QFile.styl b/src/components/file/QFile.styl new file mode 100644 index 00000000000..24b96798fb6 --- /dev/null +++ b/src/components/file/QFile.styl @@ -0,0 +1,20 @@ +.q-file + + .q-field__native + word-break: break-all + + .q-field__input + opacity: 0 !important + + &::-webkit-file-upload-button + cursor: pointer + + &__filler + visibility: hidden + width: 100% + border: none + padding: 0 + + &__dnd + outline: 1px dashed currentColor + outline-offset: -4px diff --git a/src/components/file/index.js b/src/components/file/index.js new file mode 100644 index 00000000000..c5e5c2ca608 --- /dev/null +++ b/src/components/file/index.js @@ -0,0 +1,5 @@ +import QFile from './QFile.js' + +export { + QFile +} diff --git a/src/components/footer/QFooter.js b/src/components/footer/QFooter.js new file mode 100644 index 00000000000..34d3ae5cbb1 --- /dev/null +++ b/src/components/footer/QFooter.js @@ -0,0 +1,227 @@ +import Vue from 'vue' + +import { onSSR } from '../../plugins/Platform.js' + +import QResizeObserver from '../resize-observer/QResizeObserver.js' + +import ListenersMixin from '../../mixins/listeners.js' + +import { mergeSlot } from '../../utils/private/slot.js' +import { stop } from '../../utils/event.js' +import cache from '../../utils/private/cache.js' + +export default Vue.extend({ + name: 'QFooter', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default () { + console.error('QFooter needs to be child of QLayout') + } + } + }, + + props: { + value: { + type: Boolean, + default: true + }, + reveal: Boolean, + bordered: Boolean, + elevated: Boolean, + + heightHint: { + type: [String, Number], + default: 50 + } + }, + + data () { + return { + size: parseInt(this.heightHint, 10), + revealed: true, + windowHeight: onSSR || this.layout.container ? 0 : window.innerHeight + } + }, + + watch: { + value (val) { + this.__update('space', val) + this.__updateLocal('revealed', true) + this.layout.__animate() + }, + + offset (val) { + this.__update('offset', val) + }, + + reveal (val) { + val === false && this.__updateLocal('revealed', this.value) + }, + + revealed (val) { + this.layout.__animate() + this.$emit('reveal', val) + }, + + 'layout.scroll' () { + this.__updateRevealed() + }, + + 'layout.height' () { + this.__updateRevealed() + }, + + size () { + this.__updateRevealed() + }, + + '$q.screen.height' (val) { + this.layout.container !== true && this.__updateLocal('windowHeight', val) + } + }, + + computed: { + fixed () { + return this.reveal === true || + this.layout.view.indexOf('F') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + containerHeight () { + return this.layout.container === true + ? this.layout.containerHeight + : this.windowHeight + }, + + offset () { + if (this.value !== true) { + return 0 + } + if (this.fixed === true) { + return this.revealed === true ? this.size : 0 + } + const offset = this.layout.scroll.position + this.containerHeight + this.size - this.layout.height + return offset > 0 ? offset : 0 + }, + + hidden () { + return this.value !== true || (this.fixed === true && this.revealed !== true) + }, + + revealOnFocus () { + return this.value === true && this.hidden === true && this.reveal === true + }, + + classes () { + return (this.fixed === true ? 'fixed' : 'absolute') + '-bottom' + + (this.bordered === true ? ' q-footer--bordered' : '') + + (this.hidden === true ? ' q-footer--hidden' : '') + + (this.value !== true ? ' q-layout--prevent-focus' : '') + + (this.value !== true && this.fixed !== true ? ' hidden' : '') + }, + + style () { + const + view = this.layout.rows.bottom, + css = {} + + if (view[0] === 'l' && this.layout.left.space === true) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = `${this.layout.left.size}px` + } + if (view[2] === 'r' && this.layout.right.space === true) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = `${this.layout.right.size}px` + } + + return css + }, + + onEvents () { + return { + ...this.qListeners, + focusin: this.__onFocusin, + input: stop + } + } + }, + + render (h) { + const child = mergeSlot([ + h(QResizeObserver, { + key: 'resize', + props: { debounce: 0 }, + on: cache(this, 'resize', { resize: this.__onResize }) + }) + ], this, 'default') + + this.elevated === true && child.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ) + + return h('footer', { + staticClass: 'q-footer q-layout__section--marginal', + class: this.classes, + style: this.style, + on: this.onEvents + }, child) + }, + + created () { + this.layout.instances.footer = this + this.value === true && this.__update('size', this.size) + this.__update('space', this.value) + this.__update('offset', this.offset) + }, + + beforeDestroy () { + if (this.layout.instances.footer === this) { + this.layout.instances.footer = void 0 + this.__update('size', 0) + this.__update('offset', 0) + this.__update('space', false) + } + }, + + methods: { + __onResize ({ height }) { + this.__updateLocal('size', height) + this.__update('size', height) + }, + + __update (prop, val) { + if (this.layout.footer[prop] !== val) { + this.layout.footer[prop] = val + } + }, + + __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val + } + }, + + __updateRevealed () { + if (this.reveal !== true) { return } + + const { direction, position, inflectionPoint } = this.layout.scroll + + this.__updateLocal('revealed', ( + direction === 'up' || + position - inflectionPoint < 100 || + this.layout.height - this.containerHeight - position - this.size < 300 + )) + }, + + __onFocusin (evt) { + if (this.revealOnFocus === true) { + this.__updateLocal('revealed', true) + } + + this.$emit('focusin', evt) + } + } +}) diff --git a/src/components/footer/QFooter.json b/src/components/footer/QFooter.json new file mode 100644 index 00000000000..8632a70db16 --- /dev/null +++ b/src/components/footer/QFooter.json @@ -0,0 +1,64 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/header-and-footer" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "type": "Boolean", + "desc": "Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "default": true, + "examples": [ + "v-model=\"footerState\"" + ], + "category": "model" + }, + + "reveal": { + "type": "Boolean", + "desc": "Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide footer", + "category": "behavior" + }, + + "bordered": { + "extends": "bordered" + }, + + "elevated": { + "type": "Boolean", + "desc": "Adds a default shadow to the footer", + "category": "style" + }, + + "height-hint": { + "type": [ "Number", "String " ], + "desc": "When using SSR, you can optionally hint of the height (in pixels) of the QFooter", + "default": 50, + "examples": [ "150" ], + "category": "behavior", + "addedIn": "v1.1" + } + }, + + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component; Suggestion: QToolbar" + } + }, + + "events": { + "reveal": { + "desc": "Emitted when 'reveal' state gets changed", + "params": { + "value": { + "type": "Boolean", + "desc": "New 'reveal' state" + } + } + } + } +} diff --git a/src/components/footer/index.js b/src/components/footer/index.js new file mode 100644 index 00000000000..233d47c2bd8 --- /dev/null +++ b/src/components/footer/index.js @@ -0,0 +1,5 @@ +import QFooter from './QFooter.js' + +export { + QFooter +} diff --git a/src/components/form/QForm.js b/src/components/form/QForm.js new file mode 100644 index 00000000000..60db7b05900 --- /dev/null +++ b/src/components/form/QForm.js @@ -0,0 +1,180 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { stopAndPrevent } from '../../utils/event.js' +import { slot } from '../../utils/private/slot.js' +import { managedFocus } from '../../utils/private/focus-manager.js' + +export default Vue.extend({ + name: 'QForm', + + mixins: [ ListenersMixin ], + + props: { + autofocus: Boolean, + noErrorFocus: Boolean, + noResetFocus: Boolean, + greedy: Boolean + }, + + computed: { + onEvents () { + return { + ...this.qListeners, + submit: this.submit, + reset: this.reset + } + } + }, + + mounted () { + this.validateIndex = 0 + this.autofocus === true && this.focus() + }, + + activated () { + if (this.shouldActivate !== true) { return } + this.autofocus === true && this.focus() + }, + + deactivated () { + this.shouldActivate = true + }, + + methods: { + validate (shouldFocus) { + const focus = typeof shouldFocus === 'boolean' + ? shouldFocus + : this.noErrorFocus !== true + + const index = ++this.validateIndex + + const registeredComponents = this.getValidationComponents().filter(c => c.disable !== true) + + const emit = (res, ref) => { + this.$emit('validation-' + (res === true ? 'success' : 'error'), ref) + } + + const validateComponent = comp => { + const valid = comp.validate() + + return typeof valid.then === 'function' + ? valid.then( + valid => ({ valid, comp }), + err => ({ valid: false, comp, err }) + ) + : Promise.resolve({ valid, comp }) + } + + const errorsPromise = this.greedy === true + ? Promise + .all(registeredComponents.map(validateComponent)) + .then(res => res.filter(r => r.valid !== true)) + : registeredComponents + .reduce( + (acc, comp) => acc.then(() => { + return validateComponent(comp).then(r => { + if (r.valid === false) { return Promise.reject(r) } + }) + }), + Promise.resolve() + ) + .catch(error => [ error ]) + + return errorsPromise.then(errors => { + if (errors === void 0 || errors.length === 0) { + index === this.validateIndex && emit(true) + return true + } + + if (index === this.validateIndex) { + const { comp, err } = errors[0] + + err !== void 0 && console.error(err) + emit(false, comp) + + if (focus === true) { + // Try to focus first mounted and active component + const activeError = errors.find(({ comp }) => ( + typeof comp.focus === 'function' && + comp._isBeingDestroyed !== true && + comp._isDestroyed !== true && + comp._inactive !== true + )) + + if (activeError !== void 0) { + activeError.comp.focus() + } + } + } + + return false + }) + }, + + resetValidation () { + this.validateIndex++ + + this.getValidationComponents().forEach(comp => { + typeof comp.resetValidation === 'function' && comp.resetValidation() + }) + }, + + submit (evt) { + evt !== void 0 && stopAndPrevent(evt) + + const index = this.validateIndex + 1 + + this.validate().then(val => { + // if not outdated && validation succeeded + if (index === this.validateIndex && val === true) { + if (this.qListeners.submit !== void 0) { + this.$emit('submit', evt) + } + else if (evt !== void 0 && evt.target !== void 0 && typeof evt.target.submit === 'function') { + evt.target.submit() + } + } + }) + }, + + reset (evt) { + evt !== void 0 && stopAndPrevent(evt) + + this.$emit('reset') + + this.$nextTick(() => { // allow userland to reset values before + this.resetValidation() + if (this.autofocus === true && this.noResetFocus !== true) { + this.focus() + } + }) + }, + + focus () { + if (!this.$el) { return } + + const target = this.$el.querySelector('[autofocus][tabindex], [data-autofocus][tabindex]') || + this.$el.querySelector('[autofocus] [tabindex], [data-autofocus] [tabindex]') || + this.$el.querySelector('[autofocus], [data-autofocus]') || + Array.prototype.find.call(this.$el.querySelectorAll('[tabindex]'), el => el.tabIndex > -1) + + target !== null && target !== void 0 && managedFocus(target) + }, + + getValidationComponents () { + return Array.prototype.map.call( + this.$el.getElementsByClassName('q-validation-component'), + field => field.__vue__ + ).filter(c => c !== void 0 && typeof c.validate === 'function') + } + }, + + render (h) { + return h('form', { + staticClass: 'q-form', + on: this.onEvents + }, slot(this, 'default')) + } +}) diff --git a/src/components/form/QForm.json b/src/components/form/QForm.json new file mode 100644 index 00000000000..c0ffe2293b3 --- /dev/null +++ b/src/components/form/QForm.json @@ -0,0 +1,127 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/form" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "autofocus": { + "type": "Boolean", + "desc": "Focus first focusable element on initial component render", + "category": "behavior" + }, + + "no-error-focus": { + "type": "Boolean", + "desc": "Do not try to focus on first component that has a validation error when submitting form", + "category": "behavior" + }, + + "no-reset-focus": { + "type": "Boolean", + "desc": "Do not try to focus on first component when resetting form", + "category": "behavior" + }, + + "greedy": { + "type": "Boolean", + "desc": "Validate all fields in form (by default it stops after finding the first invalid field with synchronous validation)", + "category": "behavior", + "addedIn": "v1.1.1" + } + }, + + "slots": { + "default": { + "extends": "default" + } + }, + + "events": { + "submit": { + "desc": "Emitted when all validations have passed when tethered to a submit button" + }, + + "reset": { + "desc": "Emitted when all validations have been reset when tethered to a reset button; It is recommended to manually reset the wrapped components models in this handler" + }, + + "validation-success": { + "desc": "Emitted after a validation was triggered and all inner Quasar components models are valid" + }, + + "validation-error": { + "desc": "Emitted after a validation was triggered and at least one of the inner Quasar components models are NOT valid", + "params": { + "ref": { + "type": "Object", + "desc": "Vue reference to the first component that triggered the validation error", + "__exemption": [ "examples" ] + } + }, + "addedIn": "v1.9.9" + } + }, + + "methods": { + "focus": { + "desc": "Focus on first focusable element/component in the form" + }, + + "validate": { + "desc": "Triggers a validation on all applicable inner Quasar components", + "params": { + "shouldFocus": { + "type": "Boolean", + "desc": "Tell if it should focus or not on component with error on submitting form; Overrides 'no-focus-error' prop if specified" + } + }, + "returns": { + "type": "Promise", + "desc": "Promise is always fulfilled and receives the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "validate().then(outcome => { ... })" + ] + } + }, + + "resetValidation": { + "desc": "Resets the validation on all applicable inner Quasar components" + }, + + "submit": { + "desc": "Manually trigger form validation and submit", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + }, + + "reset": { + "desc": "Manually trigger form reset", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + }, + + "getValidationComponents": { + "desc": "Get array of children vue components that support validation", + "returns": { + "type": "Array", + "desc": "Vue components that support Quasar validation API", + "__exemption": [ "examples" ] + }, + "addedIn": "v1.10" + } + } +} diff --git a/src/components/form/QForm.sass b/src/components/form/QForm.sass new file mode 100644 index 00000000000..84cd803154a --- /dev/null +++ b/src/components/form/QForm.sass @@ -0,0 +1,2 @@ +.q-form + position: relative diff --git a/src/components/form/QForm.styl b/src/components/form/QForm.styl new file mode 100644 index 00000000000..84cd803154a --- /dev/null +++ b/src/components/form/QForm.styl @@ -0,0 +1,2 @@ +.q-form + position: relative diff --git a/src/components/form/index.js b/src/components/form/index.js new file mode 100644 index 00000000000..cae986e54c8 --- /dev/null +++ b/src/components/form/index.js @@ -0,0 +1,5 @@ +import QForm from './QForm.js' + +export { + QForm +} diff --git a/src/components/header/QHeader.js b/src/components/header/QHeader.js new file mode 100644 index 00000000000..5d2d8672c8b --- /dev/null +++ b/src/components/header/QHeader.js @@ -0,0 +1,203 @@ +import Vue from 'vue' + +import QResizeObserver from '../resize-observer/QResizeObserver.js' + +import ListenersMixin from '../../mixins/listeners.js' + +import { uniqueSlot } from '../../utils/private/slot.js' +import { stop } from '../../utils/event.js' +import cache from '../../utils/private/cache.js' + +export default Vue.extend({ + name: 'QHeader', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default () { + console.error('QHeader needs to be child of QLayout') + } + } + }, + + props: { + value: { + type: Boolean, + default: true + }, + reveal: Boolean, + revealOffset: { + type: Number, + default: 250 + }, + bordered: Boolean, + elevated: Boolean, + + heightHint: { + type: [String, Number], + default: 50 + } + }, + + data () { + return { + size: parseInt(this.heightHint, 10), + revealed: true + } + }, + + watch: { + value (val) { + this.__update('space', val) + this.__updateLocal('revealed', true) + this.layout.__animate() + }, + + offset (val) { + this.__update('offset', val) + }, + + reveal (val) { + val === false && this.__updateLocal('revealed', this.value) + }, + + revealed (val) { + this.layout.__animate() + this.$emit('reveal', val) + }, + + 'layout.scroll' (scroll) { + this.reveal === true && this.__updateLocal('revealed', + scroll.direction === 'up' || + scroll.position <= this.revealOffset || + scroll.position - scroll.inflectionPoint < 100 + ) + } + }, + + computed: { + fixed () { + return this.reveal === true || + this.layout.view.indexOf('H') > -1 || + (this.$q.platform.is.ios && this.layout.container === true) + }, + + offset () { + if (this.value !== true) { + return 0 + } + if (this.fixed === true) { + return this.revealed === true ? this.size : 0 + } + const offset = this.size - this.layout.scroll.position + return offset > 0 ? offset : 0 + }, + + hidden () { + return this.value !== true || (this.fixed === true && this.revealed !== true) + }, + + revealOnFocus () { + return this.value === true && this.hidden === true && this.reveal === true + }, + + classes () { + return (this.fixed === true ? 'fixed' : 'absolute') + '-top' + + (this.bordered === true ? ' q-header--bordered' : '') + + (this.hidden === true ? ' q-header--hidden' : '') + + (this.value !== true ? ' q-layout--prevent-focus' : '') + }, + + style () { + const + view = this.layout.rows.top, + css = {} + + if (view[0] === 'l' && this.layout.left.space === true) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = `${this.layout.left.size}px` + } + if (view[2] === 'r' && this.layout.right.space === true) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = `${this.layout.right.size}px` + } + + return css + }, + + onEvents () { + return { + ...this.qListeners, + focusin: this.__onFocusin, + input: stop + } + } + }, + + render (h) { + const child = uniqueSlot(this, 'default', []) + + this.elevated === true && child.push( + h('div', { + staticClass: 'q-layout__shadow absolute-full overflow-hidden no-pointer-events' + }) + ) + + child.push( + h(QResizeObserver, { + key: 'resize', + props: { debounce: 0 }, + on: cache(this, 'resize', { resize: this.__onResize }) + }) + ) + + return h('header', { + staticClass: 'q-header q-layout__section--marginal', + class: this.classes, + style: this.style, + on: this.onEvents + }, child) + }, + + created () { + this.layout.instances.header = this + this.value === true && this.__update('size', this.size) + this.__update('space', this.value) + this.__update('offset', this.offset) + }, + + beforeDestroy () { + if (this.layout.instances.header === this) { + this.layout.instances.header = void 0 + this.__update('size', 0) + this.__update('offset', 0) + this.__update('space', false) + } + }, + + methods: { + __onResize ({ height }) { + this.__updateLocal('size', height) + this.__update('size', height) + }, + + __update (prop, val) { + if (this.layout.header[prop] !== val) { + this.layout.header[prop] = val + } + }, + + __updateLocal (prop, val) { + if (this[prop] !== val) { + this[prop] = val + } + }, + + __onFocusin (evt) { + if (this.revealOnFocus === true) { + this.__updateLocal('revealed', true) + } + + this.$emit('focusin', evt) + } + } +}) diff --git a/src/components/header/QHeader.json b/src/components/header/QHeader.json new file mode 100644 index 00000000000..3e4ddeb902c --- /dev/null +++ b/src/components/header/QHeader.json @@ -0,0 +1,74 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/header-and-footer" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "type": "Boolean", + "desc": "Model of the component defining if it is shown or hidden to the user; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "default": true, + "examples": [ + "v-model=\"headerState\"" + ], + "category": "model" + }, + + "reveal": { + "type": "Boolean", + "desc": "Enable 'reveal' mode; Takes into account user scroll to temporarily show/hide header", + "category": "behavior" + }, + + "reveal-offset": { + "type": "Number", + "desc": "Amount of scroll (in pixels) that should trigger a 'reveal' state change", + "default": 250, + "examples": [ + ":reveal-offset=\"500\"" + ], + "category": "behavior" + }, + + "bordered": { + "extends": "bordered" + }, + + "elevated": { + "type": "Boolean", + "desc": "Adds a default shadow to the header", + "category": "style" + }, + + "height-hint": { + "type": [ "Number", "String " ], + "desc": "When using SSR, you can optionally hint of the height (in pixels) of the QHeader", + "default": 50, + "examples": [ "150" ], + "category": "behavior", + "addedIn": "v1.1" + } + }, + + "slots": { + "default": { + "desc": "Default slot in the devland unslotted content of the component; Suggestion: QToolbar" + } + }, + + "events": { + "reveal": { + "desc": "Emitted when 'reveal' state gets changed", + "params": { + "value": { + "type": "Boolean", + "desc": "New 'reveal' state" + } + } + } + } +} diff --git a/src/components/header/index.js b/src/components/header/index.js new file mode 100644 index 00000000000..a7337b68528 --- /dev/null +++ b/src/components/header/index.js @@ -0,0 +1,5 @@ +import QHeader from './QHeader.js' + +export { + QHeader +} diff --git a/src/components/icon/QIcon.js b/src/components/icon/QIcon.js new file mode 100644 index 00000000000..31eef0943ce --- /dev/null +++ b/src/components/icon/QIcon.js @@ -0,0 +1,241 @@ +import Vue from 'vue' + +import SizeMixin from '../../mixins/size.js' +import TagMixin from '../../mixins/tag.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot, mergeSlot } from '../../utils/private/slot.js' + +const defaultViewBox = '0 0 24 24' + +const sameFn = i => i +const ionFn = i => `ionicons ${i}` + +const libMap = { + 'mdi-': i => `mdi ${i}`, + 'icon-': sameFn, // fontawesome equiv + 'bt-': i => `bt ${i}`, + 'eva-': i => `eva ${i}`, + 'ion-md': ionFn, + 'ion-ios': ionFn, + 'ion-logo': ionFn, + 'iconfont ': sameFn, + 'ti-': i => `themify-icon ${i}`, + 'bi-': i => `bootstrap-icons ${i}` +} + +const matMap = { + o_: '-outlined', + r_: '-round', + s_: '-sharp' +} + +const symMap = { + sym_o_: '-outlined', + sym_r_: '-rounded', + sym_s_: '-sharp' +} + +const libRE = new RegExp('^(' + Object.keys(libMap).join('|') + ')') +const matRE = new RegExp('^(' + Object.keys(matMap).join('|') + ')') +const symRE = new RegExp('^(' + Object.keys(symMap).join('|') + ')') +const mRE = /^[Mm]\s?[-+]?\.?\d/ +const imgRE = /^img:/ +const svgUseRE = /^svguse:/ +const ionRE = /^ion-/ +const faRE = /^(fa-(solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) / + +export default Vue.extend({ + name: 'QIcon', + + mixins: [ ListenersMixin, SizeMixin, TagMixin ], + + props: { + tag: { + type: String, + default: 'i' + }, + + name: String, + color: String, + left: Boolean, + right: Boolean + }, + + computed: { + classes () { + return 'q-icon' + + (this.left === true ? ' on-left' : '') + + (this.right === true ? ' on-right' : '') + + (this.color !== void 0 ? ` text-${this.color}` : '') + }, + + type () { + let cls + let icon = this.name + + if (icon === 'none' || !icon) { + return { none: true } + } + + if (this.$q.iconMapFn !== void 0) { + const res = this.$q.iconMapFn(icon) + if (res !== void 0) { + if (res.icon !== void 0) { + icon = res.icon + if (icon === 'none' || !icon) { + return { none: true } + } + } + else { + return { + cls: res.cls, + content: res.content !== void 0 + ? res.content + : ' ' + } + } + } + } + + if (mRE.test(icon) === true) { + const [ def, viewBox = defaultViewBox ] = icon.split('|') + + return { + svg: true, + viewBox, + nodes: def.split('&&').map(path => { + const [ d, style, transform ] = path.split('@@') + return this.$createElement('path', { + attrs: { d, transform }, + style + }) + }) + } + } + + if (imgRE.test(icon) === true) { + return { + img: true, + src: icon.substring(4) + } + } + + if (svgUseRE.test(icon) === true) { + const [ def, viewBox = defaultViewBox ] = icon.split('|') + + return { + svguse: true, + src: def.substring(7), + viewBox + } + } + + let content = ' ' + const matches = icon.match(libRE) + + if (matches !== null) { + cls = libMap[ matches[ 1 ] ](icon) + } + else if (faRE.test(icon) === true) { + cls = icon + } + else if (ionRE.test(icon) === true) { + cls = `ionicons ion-${this.$q.platform.is.ios === true ? 'ios' : 'md'}${icon.substr(3)}` + } + else if (symRE.test(icon) === true) { + // "notranslate" class is for Google Translate + // to avoid tampering with Material Symbols ligature font + // + // Caution: To be able to add suffix to the class name, + // keep the 'material-symbols' at the end of the string. + cls = 'notranslate material-symbols' + + const matches = icon.match(symRE) + if (matches !== null) { + icon = icon.substring(6) + cls += symMap[ matches[ 1 ] ] + } + + content = icon + } + else { + // "notranslate" class is for Google Translate + // to avoid tampering with Material Icons ligature font + // + // Caution: To be able to add suffix to the class name, + // keep the 'material-icons' at the end of the string. + cls = 'notranslate material-icons' + + const matches = icon.match(matRE) + if (matches !== null) { + icon = icon.substring(2) + cls += matMap[ matches[ 1 ] ] + } + + content = icon + } + + return { + cls, + content + } + } + }, + + render (h) { + const data = { + class: this.classes, + style: this.sizeStyle, + on: { ...this.qListeners }, + attrs: { + 'aria-hidden': 'true', + role: 'presentation' + } + } + + if (this.type.none === true) { + return h(this.tag, data, slot(this, 'default')) + } + + if (this.type.img === true) { + return h('span', data, mergeSlot([ + h('img', { + attrs: { src: this.type.src } + }) + ], this, 'default')) + } + + if (this.type.svg === true) { + return h('span', data, mergeSlot([ + h('svg', { + attrs: { + viewBox: this.type.viewBox || '0 0 24 24', + focusable: 'false' /* needed for IE11 */ + } + }, this.type.nodes) + ], this, 'default')) + } + + if (this.type.svguse === true) { + return h('span', data, mergeSlot([ + h('svg', { + attrs: { + viewBox: this.type.viewBox, + focusable: 'false' /* needed for IE11 */ + } + }, [ + h('use', { attrs: { 'xlink:href': this.type.src } }) + ]) + ], this, 'default')) + } + + if (this.type.cls !== void 0) { + data.class += ' ' + this.type.cls + } + + return h(this.tag, data, mergeSlot([ + this.type.content + ], this, 'default')) + } +}) diff --git a/src/components/icon/QIcon.json b/src/components/icon/QIcon.json new file mode 100644 index 00000000000..0f1c6731d97 --- /dev/null +++ b/src/components/icon/QIcon.json @@ -0,0 +1,47 @@ +{ + "mixins": [ "mixins/size", "mixins/tag" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/icon" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "tag": { + "desc": "HTML tag to render, unless no icon is supplied or it's an svg icon", + "default": "i", + "examples": [ "div", "i" ], + "addedIn": "v1.8.4" + }, + + "name": { + "extends": "icon", + "category": "model" + }, + + "color": { + "extends": "color" + }, + + "left": { + "type": "Boolean", + "desc": "Useful if icon is on the left side of something: applies a standard margin on the right side of Icon", + "category": "content" + }, + + "right": { + "type": "Boolean", + "desc": "Useful if icon is on the right side of something: applies a standard margin on the left side of Icon", + "category": "content" + } + }, + + "slots": { + "default": { + "desc": "Suggestions: QTooltip or QMenu" + } + } +} diff --git a/src/components/icon/QIcon.sass b/src/components/icon/QIcon.sass new file mode 100644 index 00000000000..d80d82d3b52 --- /dev/null +++ b/src/components/icon/QIcon.sass @@ -0,0 +1,42 @@ +.q-icon + line-height: 1 + width: 1em + height: 1em + flex-shrink: 0 + letter-spacing: normal + text-transform: none + white-space: nowrap + word-wrap: normal + direction: ltr + text-align: center + position: relative + box-sizing: content-box + fill: currentColor // for svg paths + + &:before, &:after + width: 100% + height: 100% + display: flex !important + align-items: center + justify-content: center + + > svg, + > img + width: 100% + height: 100% + +.q-icon, +.material-icons, +.material-icons-outlined, +.material-icons-round, +.material-icons-sharp, +.material-symbols-outlined, +.material-symbols-rounded, +.material-symbols-sharp + user-select: none + cursor: inherit + font-size: inherit + display: inline-flex + align-items: center + justify-content: center + vertical-align: middle diff --git a/src/components/icon/QIcon.styl b/src/components/icon/QIcon.styl new file mode 100644 index 00000000000..d80d82d3b52 --- /dev/null +++ b/src/components/icon/QIcon.styl @@ -0,0 +1,42 @@ +.q-icon + line-height: 1 + width: 1em + height: 1em + flex-shrink: 0 + letter-spacing: normal + text-transform: none + white-space: nowrap + word-wrap: normal + direction: ltr + text-align: center + position: relative + box-sizing: content-box + fill: currentColor // for svg paths + + &:before, &:after + width: 100% + height: 100% + display: flex !important + align-items: center + justify-content: center + + > svg, + > img + width: 100% + height: 100% + +.q-icon, +.material-icons, +.material-icons-outlined, +.material-icons-round, +.material-icons-sharp, +.material-symbols-outlined, +.material-symbols-rounded, +.material-symbols-sharp + user-select: none + cursor: inherit + font-size: inherit + display: inline-flex + align-items: center + justify-content: center + vertical-align: middle diff --git a/src/components/icon/index.js b/src/components/icon/index.js new file mode 100644 index 00000000000..7e3b7df696f --- /dev/null +++ b/src/components/icon/index.js @@ -0,0 +1,5 @@ +import QIcon from './QIcon.js' + +export { + QIcon +} diff --git a/src/components/img/QImg.js b/src/components/img/QImg.js new file mode 100644 index 00000000000..40b773de394 --- /dev/null +++ b/src/components/img/QImg.js @@ -0,0 +1,319 @@ +import Vue from 'vue' + +import QSpinner from '../spinner/QSpinner.js' + +import RatioMixin from '../../mixins/ratio.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QImg', + + mixins: [ ListenersMixin, RatioMixin ], + + props: { + src: String, + srcset: String, + sizes: String, + alt: String, + width: String, + height: String, + + placeholderSrc: String, + + basic: Boolean, + contain: Boolean, + position: { + type: String, + default: '50% 50%' + }, + + transition: { + type: String, + default: 'fade' + }, + + imgClass: [ Array, String, Object ], + imgStyle: Object, + + nativeContextMenu: Boolean, + + noDefaultSpinner: Boolean, + spinnerColor: String, + spinnerSize: String + }, + + data () { + return { + currentSrc: '', + image: null, + isLoading: !!this.src, + hasError: false, + naturalRatio: void 0 + } + }, + + watch: { + src () { + this.__load() + }, + + srcset (val) { + this.__updateWatcher(val) + } + }, + + computed: { + url () { + return this.currentSrc || this.placeholderSrc || void 0 + }, + + attrs () { + const att = { role: 'img' } + if (this.alt !== void 0) { + att['aria-label'] = this.alt + } + return att + }, + + imgContainerStyle () { + return Object.assign( + { + backgroundSize: this.contain === true ? 'contain' : 'cover', + backgroundPosition: this.position + }, + this.imgStyle, + { backgroundImage: `url("${this.url}")` }) + }, + + style () { + return { + width: this.width, + height: this.height + } + }, + + classes () { + return 'q-img overflow-hidden' + + (this.nativeContextMenu === true ? ' q-img--menu' : '') + } + }, + + methods: { + __onLoad (img) { + this.isLoading = false + this.hasError = false + this.__computeRatio(img) + this.__updateSrc() + this.__updateWatcher(this.srcset) + this.$emit('load', this.currentSrc) + }, + + __onError (err) { + clearTimeout(this.ratioTimer) + this.isLoading = false + this.hasError = true + this.currentSrc = '' + this.$emit('error', err) + }, + + __updateSrc () { + if (this.image !== void 0 && this.isLoading === false) { + const src = this.image.currentSrc || this.image.src + if (this.currentSrc !== src) { + this.currentSrc = src + } + } + }, + + __updateWatcher (srcset) { + if (srcset) { + if (this.unwatch === void 0) { + this.unwatch = this.$watch('$q.screen.width', this.__updateSrc) + } + } + else if (this.unwatch !== void 0) { + this.unwatch() + this.unwatch = void 0 + } + }, + + __load () { + clearTimeout(this.ratioTimer) + this.hasError = false + + if (!this.src) { + this.isLoading = false + this.image = void 0 + this.currentSrc = '' + return + } + + this.isLoading = true + + const img = new Image() + this.image = img + + img.onerror = err => { + // if we are still rendering same image + if (this.image === img && this.destroyed !== true) { + this.__onError(err) + } + } + + img.onload = () => { + if (this.destroyed === true) { + return + } + + // if we are still rendering same image + if (this.image === img) { + if (img.decode !== void 0) { + img + .decode() + .catch(err => { + if (this.image === img && this.destroyed !== true) { + this.__onError(err) + } + }) + .then(() => { + if (this.image === img && this.destroyed !== true) { + this.__onLoad(img) + } + }) + } + else { + this.__onLoad(img) + } + } + } + + img.src = this.src + + if (this.srcset) { + img.srcset = this.srcset + } + + if (this.sizes !== void 0) { + img.sizes = this.sizes + } + else { + Object.assign(img, { + height: this.height, + width: this.width + }) + } + }, + + __computeRatio (img) { + const { naturalHeight, naturalWidth } = img + + if (naturalHeight || naturalWidth) { + this.naturalRatio = naturalHeight === 0 + ? 1 + : naturalWidth / naturalHeight + } + else { + this.ratioTimer = setTimeout(() => { + if (this.image === img && this.destroyed !== true) { + this.__computeRatio(img) + } + }, 100) + } + }, + + __getImage (h) { + const nativeImg = this.nativeContextMenu === true + ? [ + h('img', { + staticClass: 'absolute-full fit', + attrs: { src: this.url, 'aria-hidden': 'true' } + }) + ] + : void 0 + + const content = this.url !== void 0 + ? h('div', { + key: this.url, + staticClass: 'q-img__image absolute-full', + class: this.imgClass, + style: this.imgContainerStyle + }, nativeImg) + : null + + return this.basic === true + ? content + : h('transition', { + props: { name: 'q-transition--' + this.transition } + }, [ content ]) + }, + + __getContent (h) { + const slotVm = slot(this, this.hasError === true ? 'error' : 'default') + + if (this.basic === true) { + return h('div', { + key: 'content', + staticClass: 'q-img__content absolute-full' + }, slotVm) + } + + const content = this.isLoading === true + ? h('div', { + key: 'placeholder', + staticClass: 'q-img__loading absolute-full flex flex-center' + }, this.$scopedSlots.loading !== void 0 + ? this.$scopedSlots.loading() + : ( + this.noDefaultSpinner === false + ? [ + h(QSpinner, { + props: { + color: this.spinnerColor, + size: this.spinnerSize + } + }) + ] + : void 0 + ) + ) + : h('div', { + key: 'content', + staticClass: 'q-img__content absolute-full' + }, slotVm) + + return h('transition', { + props: { name: 'q-transition--fade' } + }, [ content ]) + } + }, + + render (h) { + return h('div', { + class: this.classes, + style: this.style, + attrs: this.attrs, + on: { ...this.qListeners } + }, [ + h('div', { style: this.ratioStyle }), + this.__getImage(h), + this.__getContent(h) + ]) + }, + + beforeMount () { + if (this.placeholderSrc !== void 0 && this.ratio === void 0) { + const img = new Image() + img.src = this.placeholderSrc + this.__computeRatio(img) + } + this.isLoading === true && this.__load() + }, + + beforeDestroy () { + this.destroyed = true + clearTimeout(this.ratioTimer) + this.unwatch !== void 0 && this.unwatch() + } +}) diff --git a/src/components/img/QImg.json b/src/components/img/QImg.json new file mode 100644 index 00000000000..935961a6ca1 --- /dev/null +++ b/src/components/img/QImg.json @@ -0,0 +1,207 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/img" + }, + + "mixins": [ "mixins/ratio" ], + + "behavior": { + "$listeners": true + }, + + "props": { + "src": { + "type": "String", + "desc": "Path to image", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/something.png\"", + "(assets folder) src=\"~assets/my-img.gif\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "model" + }, + + "srcset": { + "type": "String", + "desc": "Same syntax as srcset attribute.", + "link": "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images#Resolution_switching_Different_sizes", + "examples": [ + "elva-fairy-320w.jpg 320w, elva-fairy-480w.jpg 480w" + ], + "category": "model" + }, + + "sizes": { + "type": "String", + "desc": "Same syntax as sizes attribute.", + "link": "https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images#Resolution_switching_Different_sizes", + "examples": [ + "(max-width: 320px) 280px, (max-width: 480px) 440px, 800px" + ], + "category": "model" + }, + + "width": { + "type": "String", + "desc": "Forces image width; Must also include the unit (px or %)", + "examples": [ + "280px", + "70%" + ], + "category": "model", + "addedIn": "v1.9" + }, + + "height": { + "type": "String", + "desc": "Forces image height; Must also include the unit (px or %)", + "examples": [ + "280px", + "70%" + ], + "category": "model", + "addedIn": "v1.9" + }, + + "alt": { + "type": "String", + "desc": "Specifies an alternate text for the image, if the image cannot be displayed", + "examples": [ "Two cats" ], + "category": "content" + }, + + "placeholder-src": { + "type": "String", + "desc": "While waiting for your image to load, you can use a placeholder image", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/some-placeholder.png\"", + "(assets folder) src=\"~assets/my-placeholder.gif\"", + "(relative path format) :src=\"require('./placeholder.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "model" + }, + + "basic": { + "type": "Boolean", + "desc": "Do not use transitions; faster render", + "category": "content" + }, + + "contain": { + "type": "Boolean", + "desc": "Make sure that the image getting displayed is fully contained, regardless if additional blank space besides the image is needed on horizontal or vertical", + "category": "content" + }, + + "position": { + "type": "String", + "desc": "Equivalent to CSS background-position property", + "default": "50% 50%", + "examples": [ "0 0", "20px 50px" ], + "category": "content" + }, + + "ratio": { + "type": [ "String", "Number" ], + "desc": "Force the component to maintain an aspect ratio", + "examples": [ + "(Number format) :ratio=\"16/9\"", + "(String format) ratio=\"1\"" + ], + "category": "content" + }, + + "transition": { + "extends": "transition", + "default": "fade" + }, + + "img-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the container of image; Does not apply to the caption", + "examples": [ + "my-special-class", + ":img-class=\"{ 'my-special-class': }\"" + ], + "category": "style", + "addedIn": "v1.4" + }, + + "img-style": { + "type": "Object", + "desc": "Apply CSS to the container of the image; Does not apply to the caption", + "examples": [ ":img-style=\"{ transform: 'rotate(45deg)' }\" "], + "category": "style", + "addedIn": "v1.5.11" + }, + + "spinner-color": { + "extends": "color", + "desc": "Color name for default Spinner (unless using a 'loading' slot)", + "category": "style" + }, + + "spinner-size": { + "extends": "size", + "desc": "Size in CSS units, including unit name, for default Spinner (unless using a 'loading' slot)", + "category": "style" + }, + + "no-default-spinner": { + "type": "Boolean", + "desc": "Do not display the default spinner when loading images (unless you are specifying one through the 'loading' slot)", + "category": "content", + "addedIn": "v1.1" + }, + + "native-context-menu": { + "type": "Boolean", + "desc": "Enable the native context menu of the image", + "category": "behavior", + "addedIn": "v1.8.4" + } + }, + + "slots": { + "default": { + "desc": "Default slot can be used for captions. See examples" + }, + + "loading": { + "desc": "While image is loading, this slot is being displayed on top of the component; Suggestions: a spinner or text" + }, + + "error": { + "desc": "Optional slot to be used when image could not be loaded; make sure you assign a min-height and min-width to the component through CSS" + } + }, + + "events": { + "load": { + "desc": "Emitted when image has been loaded by the browser", + "params": { + "src": { + "type": "String", + "desc": "URL of image that has been loaded; useful when using 'srcset' and/or 'sizes'", + "examples": [ + "https://some-site.net/some-img.gif" + ] + } + } + }, + + "error": { + "desc": "Emitted when browser could not load the image", + "params": { + "src": { + "type": "Error", + "desc": "JS Error object" + } + } + } + } +} diff --git a/src/components/img/QImg.sass b/src/components/img/QImg.sass new file mode 100644 index 00000000000..b1f8de181c6 --- /dev/null +++ b/src/components/img/QImg.sass @@ -0,0 +1,37 @@ +.q-img + position: relative + width: $img-width + display: inline-block + vertical-align: middle + + &__loading .q-spinner + font-size: $img-loading-font-size + + &__image + border-radius: inherit + background-repeat: $img-background-repeat + + &__content + overflow: hidden + border-radius: inherit + + > div + position: $img-content-position + padding: $img-content-padding + color: $img-content-color + background: $img-content-background + + &--menu + .q-img + &__image + pointer-events: none + + > img + pointer-events: all + opacity: 0 + + &__content + pointer-events: none + + > div + pointer-events: all diff --git a/src/components/img/QImg.styl b/src/components/img/QImg.styl new file mode 100644 index 00000000000..b1f8de181c6 --- /dev/null +++ b/src/components/img/QImg.styl @@ -0,0 +1,37 @@ +.q-img + position: relative + width: $img-width + display: inline-block + vertical-align: middle + + &__loading .q-spinner + font-size: $img-loading-font-size + + &__image + border-radius: inherit + background-repeat: $img-background-repeat + + &__content + overflow: hidden + border-radius: inherit + + > div + position: $img-content-position + padding: $img-content-padding + color: $img-content-color + background: $img-content-background + + &--menu + .q-img + &__image + pointer-events: none + + > img + pointer-events: all + opacity: 0 + + &__content + pointer-events: none + + > div + pointer-events: all diff --git a/src/components/img/index.js b/src/components/img/index.js new file mode 100644 index 00000000000..42e252b1085 --- /dev/null +++ b/src/components/img/index.js @@ -0,0 +1,5 @@ +import QImg from './QImg.js' + +export { + QImg +} diff --git a/src/components/infinite-scroll/QInfiniteScroll.js b/src/components/infinite-scroll/QInfiniteScroll.js new file mode 100644 index 00000000000..bb45f611abc --- /dev/null +++ b/src/components/infinite-scroll/QInfiniteScroll.js @@ -0,0 +1,238 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import debounce from '../../utils/debounce.js' +import { height } from '../../utils/dom.js' +import { getScrollTarget, getScrollHeight, getScrollPosition, setScrollPosition, executeWhenScrollable } from '../../utils/scroll.js' +import { listenOpts } from '../../utils/event.js' +import { slot, uniqueSlot } from '../../utils/private/slot.js' + +const { passive } = listenOpts + +export default Vue.extend({ + name: 'QInfiniteScroll', + + mixins: [ ListenersMixin ], + + props: { + offset: { + type: Number, + default: 500 + }, + + debounce: { + type: [ String, Number ], + default: 100 + }, + + scrollTarget: { + default: void 0 + }, + + initialIndex: Number, + + disable: Boolean, + reverse: Boolean + }, + + data () { + return { + index: this.initialIndex || 0, + isFetching: false, + isWorking: true + } + }, + + watch: { + disable (val) { + if (val === true) { this.stop() } + else { this.resume() } + }, + + reverse () { + if (this.isFetching === false && this.isWorking === true) { + this.immediatePoll() + } + }, + + scrollTarget () { + this.updateScrollTarget() + }, + + debounce (val) { + this.__setDebounce(val) + } + }, + + methods: { + poll () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable() + + if (this.disable === true || this.isFetching === true || this.isWorking === false) { + return + } + + if (this.__scrollTarget === window && document.qScrollPrevented === true) { + this.clearExecuteWhenScrollable = executeWhenScrollable(this.poll) + + return + } + + const + scrollHeight = getScrollHeight(this.__scrollTarget), + scrollPosition = getScrollPosition(this.__scrollTarget), + containerHeight = height(this.__scrollTarget) + + if (this.reverse === false) { + if (Math.round(scrollPosition + containerHeight + this.offset) >= Math.round(scrollHeight)) { + this.trigger() + } + } + else if (Math.round(scrollPosition) < this.offset) { + this.trigger() + } + }, + + trigger () { + if (this.disable === true || this.isFetching === true || this.isWorking === false) { + return + } + + this.index++ + this.isFetching = true + + const heightBefore = getScrollHeight(this.__scrollTarget) + + this.$emit('load', this.index, stop => { + if (this.isWorking === true) { + this.isFetching = false + this.$nextTick(() => { + if (this.reverse === true) { + const + heightAfter = getScrollHeight(this.__scrollTarget), + scrollPosition = getScrollPosition(this.__scrollTarget), + heightDifference = heightAfter - heightBefore + + setScrollPosition(this.__scrollTarget, scrollPosition + heightDifference) + } + + if (stop === true) { + this.stop() + } + else { + this.$el.closest('body') && this.poll() + } + }) + } + }) + }, + + reset () { + this.index = 0 + }, + + resume () { + if (this.isWorking === false) { + this.isWorking = true + this.__scrollTarget.addEventListener('scroll', this.poll, passive) + } + this.immediatePoll() + }, + + stop () { + if (this.isWorking === true) { + this.isWorking = false + this.isFetching = false + this.__scrollTarget.removeEventListener('scroll', this.poll, passive) + typeof this.poll.cancel === 'function' && this.poll.cancel() + } + }, + + updateScrollTarget () { + if (this.__scrollTarget && this.isWorking === true) { + this.__scrollTarget.removeEventListener('scroll', this.poll, passive) + } + + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget) + + if (this.isWorking === true) { + this.__scrollTarget.addEventListener('scroll', this.poll, passive) + + if (this.reverse === true) { + const + scrollHeight = getScrollHeight(this.__scrollTarget), + containerHeight = height(this.__scrollTarget) + + setScrollPosition(this.__scrollTarget, scrollHeight - containerHeight) + } + + this.immediatePoll() + } + }, + + setIndex (index) { + this.index = index + }, + + __setDebounce (val) { + val = parseInt(val, 10) + + const oldPoll = this.poll + + this.poll = val <= 0 + ? this.immediatePoll + : debounce(this.immediatePoll, isNaN(val) === true ? 100 : val) + + if (this.__scrollTarget && this.isWorking === true) { + if (oldPoll !== void 0) { + this.__scrollTarget.removeEventListener('scroll', oldPoll, passive) + } + + this.__scrollTarget.addEventListener('scroll', this.poll, passive) + } + } + }, + + mounted () { + this.immediatePoll = this.poll + this.__setDebounce(this.debounce) + + this.updateScrollTarget() + }, + + activated () { + if (this.__scrollPosition !== void 0 && this.__scrollTarget) { + setScrollPosition(this.__scrollTarget, this.__scrollPosition) + } + }, + + deactivated () { + this.__scrollPosition = this.__scrollTarget + ? getScrollPosition(this.__scrollTarget) + : void 0 + }, + + beforeDestroy () { + this.clearExecuteWhenScrollable !== void 0 && this.clearExecuteWhenScrollable() + this.stop() + }, + + render (h) { + const child = uniqueSlot(this, 'default', []) + + if (this.disable !== true && this.isWorking === true) { + child[this.reverse === false ? 'push' : 'unshift']( + h('div', { + staticClass: 'q-infinite-scroll__loading', + class: this.isFetching === true ? '' : 'invisible' + }, slot(this, 'loading')) + ) + } + + return h('div', { + staticClass: 'q-infinite-scroll', + on: { ...this.qListeners } + }, child) + } +}) diff --git a/src/components/infinite-scroll/QInfiniteScroll.json b/src/components/infinite-scroll/QInfiniteScroll.json new file mode 100644 index 00000000000..3d1020e9a01 --- /dev/null +++ b/src/components/infinite-scroll/QInfiniteScroll.json @@ -0,0 +1,116 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/infinite-scroll" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "offset": { + "type": "Number", + "desc": "Offset (pixels) to bottom of Infinite Scroll container from which the component should start loading more content in advance", + "default": 500, + "examples": [ ":offset=\"250\"" ], + "category": "behavior" + }, + + "debounce": { + "type": [ "String", "Number" ], + "desc": "Debounce amount (in milliseconds)", + "default": 100, + "examples": [ "0", "530" ], + "category": "behavior", + "addedIn": "v1.1" + }, + + "initial-index": { + "type": "Number", + "desc": "Initialize the pagination index (used for the @load event)", + "default": 0, + "examples": [ 2, 3 ], + "category": "behavior", + "addedIn": "v1.13" + }, + + "scroll-target": { + "extends": "scroll-target" + }, + + "disable": { + "extends": "disable" + }, + + "reverse": { + "type": "Boolean", + "desc": "Scroll area should behave like a messenger - starting scrolled to bottom and loading when reaching the top", + "category": "behavior" + } + }, + + "slots": { + "default": { + "extends": "default" + }, + + "loading": { + "desc": "Slot displaying something while loading content; Example: QSpinner" + } + }, + + "events": { + "load": { + "desc": "Emitted when Infinite Scroll needs to load more data", + "params": { + "index": { + "type": "Number", + "desc": "The index parameter can be used to make some sort of pagination on the content you load. It takes numeric values starting with 1 and incrementing with each call", + "examples": [ 12 ] + }, + "done": { + "type": "Function", + "desc": "Function to call when you made all necessary updates. DO NOT forget to call it otherwise your loading message will continue to be displayed", + "params": { + "stop": { + "type": "Boolean", + "desc": "Stops QInfiniteScroll if it's Boolean 'true'; Specify it in case there's nothing more to load" + } + }, + "returns": null + } + } + } + }, + + "methods": { + "poll": { + "desc": "Checks scroll position and loads more content if necessary" + }, + + "trigger": { + "desc": "Tells Infinite Scroll to load more content, regardless of the scroll position" + }, + + "reset": { + "desc": "Resets calling index to 0" + }, + + "stop": { + "desc": "Stops working, regardless of scroll position" + }, + + "resume": { + "desc": "Starts working. Checks scroll position upon call and if trigger is hit, it loads more content" + }, + + "setIndex": { + "desc": "Overwrite the current pagination index", + "addedIn": "v1.13" + }, + + "updateScrollTarget": { + "desc": "Updates the scroll target; Useful when the parent elements change so that the scrolling target also changes" + } + } +} diff --git a/src/components/infinite-scroll/index.js b/src/components/infinite-scroll/index.js new file mode 100644 index 00000000000..25124b5ae13 --- /dev/null +++ b/src/components/infinite-scroll/index.js @@ -0,0 +1,5 @@ +import QInfiniteScroll from './QInfiniteScroll.js' + +export { + QInfiniteScroll +} diff --git a/src/components/inner-loading/QInnerLoading.js b/src/components/inner-loading/QInnerLoading.js new file mode 100644 index 00000000000..f0a1f848929 --- /dev/null +++ b/src/components/inner-loading/QInnerLoading.js @@ -0,0 +1,88 @@ +import Vue from 'vue' + +import QSpinner from '../spinner/QSpinner.js' + +import TransitionMixin from '../../mixins/transition.js' +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' + +export default Vue.extend({ + name: 'QInnerLoading', + + mixins: [ ListenersMixin, DarkMixin, TransitionMixin ], + + props: { + showing: Boolean, + color: String, + + size: { + type: [String, Number], + default: 42 + }, + + label: String, + labelClass: String, + labelStyle: [ String, Array, Object ] + }, + + computed: { + classes () { + return 'q-inner-loading absolute-full column flex-center' + + ` q-inner-loading--${this.darkSuffix}` + }, + + labelClasses () { + return 'q-inner-loading__label' + + (this.labelClass !== void 0 ? ` ${this.labelClass}` : '') + } + }, + + methods: { + __getInner (h) { + const child = [ + h(QSpinner, { + props: { + size: this.size, + color: this.color + } + }) + ] + + if (this.label !== void 0) { + child.push( + h('div', { + class: this.labelClasses, + style: this.labelStyle + }, [ this.label ]) + ) + } + + return child + }, + + __getContent (h) { + return this.showing === true + ? [ + h('div', + { + staticClass: this.classes, + on: { ...this.qListeners } + }, + this.$scopedSlots.default !== void 0 + ? this.$scopedSlots.default() + : this.__getInner(h) + ) + ] + : void 0 + } + }, + + render (h) { + return h('transition', { + props: { + ...this.transitionProps, + appear: true + } + }, this.__getContent(h)) + } +}) diff --git a/src/components/inner-loading/QInnerLoading.json b/src/components/inner-loading/QInnerLoading.json new file mode 100644 index 00000000000..a8c5a80de8b --- /dev/null +++ b/src/components/inner-loading/QInnerLoading.json @@ -0,0 +1,78 @@ +{ + "mixins": [ "mixins/size" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/inner-loading" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "showing": { + "type": "Boolean", + "desc": "State - loading or not", + "category": "state" + }, + + "color": { + "extends": "color", + "desc": "Color name for component from the Quasar Color Palette for the inner Spinner (unless using the default slot)" + }, + + "size": { + "desc": "Size in CSS units, including unit name, or standard size name (xs|sm|md|lg|xl), for the inner Spinner (unless using the default slot)", + "default": "42px" + }, + + "label": { + "type": "String", + "desc": "Add a label; Gets overriden when using the default slot", + "examples": [ "Please wait..." ], + "category": "label", + "addedIn": "v1.17" + }, + + "label-class": { + "type": "String", + "desc": "Add CSS class(es) to the label; Works along the 'label' prop only", + "examples": [ + "text-red q-mt-xl" + ], + "category": "label", + "addedIn": "v1.17" + }, + + "label-style": { + "type": [ "Array", "String", "Object" ], + "desc": "Apply custom style to the label; Works along the 'label' prop only", + "examples": [ + "font-size: 28px", + ":label-style=\"{ color: '#ff0000' }\"" + ], + "category": "label", + "addedIn": "v1.17" + }, + + "transition-show": { + "extends": "transition", + "default": "fade" + }, + + "transition-hide": { + "extends": "transition", + "default": "fade" + }, + + "dark": { + "extends": "dark" + } + }, + + "slots": { + "default": { + "desc": "Default slot is used for replacing default Spinner; Suggestions: a spinner or text" + } + } +} diff --git a/src/components/inner-loading/QInnerLoading.sass b/src/components/inner-loading/QInnerLoading.sass new file mode 100644 index 00000000000..099f1729db4 --- /dev/null +++ b/src/components/inner-loading/QInnerLoading.sass @@ -0,0 +1,12 @@ +.q-inner-loading + background: $light-dimmed-background + + &--dark + background: $dimmed-background + + &__label + margin-top: 8px + +@media (prefers-color-scheme: dark) + .q-inner-loading--dark-auto + background: $dimmed-background diff --git a/src/components/inner-loading/QInnerLoading.styl b/src/components/inner-loading/QInnerLoading.styl new file mode 100644 index 00000000000..099f1729db4 --- /dev/null +++ b/src/components/inner-loading/QInnerLoading.styl @@ -0,0 +1,12 @@ +.q-inner-loading + background: $light-dimmed-background + + &--dark + background: $dimmed-background + + &__label + margin-top: 8px + +@media (prefers-color-scheme: dark) + .q-inner-loading--dark-auto + background: $dimmed-background diff --git a/src/components/inner-loading/index.js b/src/components/inner-loading/index.js new file mode 100644 index 00000000000..33fae3426e3 --- /dev/null +++ b/src/components/inner-loading/index.js @@ -0,0 +1,5 @@ +import QInnerLoading from './QInnerLoading.js' + +export { + QInnerLoading +} diff --git a/src/components/input/QInput.js b/src/components/input/QInput.js new file mode 100644 index 00000000000..5a3b539db74 --- /dev/null +++ b/src/components/input/QInput.js @@ -0,0 +1,389 @@ +import Vue from 'vue' + +import QField from '../field/QField.js' + +import { FormFieldMixin } from '../../mixins/form.js' +import { FileValueMixin } from '../../mixins/file.js' +import MaskMixin from '../../mixins/mask.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { stop } from '../../utils/event.js' +import { managedFocus } from '../../utils/private/focus-manager.js' + +export default Vue.extend({ + name: 'QInput', + + mixins: [ + QField, + MaskMixin, + FormFieldMixin, + FileValueMixin, + ListenersMixin + ], + + props: { + value: { required: false }, + + shadowText: String, + + type: { + type: String, + default: 'text' + }, + + debounce: [String, Number], + + autogrow: Boolean, // makes a textarea + + inputClass: [Array, String, Object], + inputStyle: [Array, String, Object] + }, + + watch: { + value (v) { + if (this.hasMask === true) { + if (this.stopValueWatcher === true) { + this.stopValueWatcher = false + + if (String(v) === this.emitCachedValue) { + return + } + } + + this.__updateMaskValue(v) + } + else if (this.innerValue !== v) { + this.innerValue = v + + if ( + this.type === 'number' && + this.hasOwnProperty('tempValue') === true + ) { + if (this.typedNumber === true) { + this.typedNumber = false + } + else { + delete this.tempValue + } + } + } + + // textarea only + this.autogrow === true && this.$nextTick(this.__adjustHeight) + }, + + // some browsers lose the native input value + // so we need to reattach it dynamically + // (like type="password" <-> type="text"; see #12078) + type () { + if (this.$refs.input) { + this.$refs.input.value = this.value + } + }, + + autogrow (autogrow) { + // textarea only + if (autogrow === true) { + this.$nextTick(this.__adjustHeight) + } + // if it has a number of rows set respect it + else if (this.qAttrs.rows > 0 && this.$refs.input !== void 0) { + const inp = this.$refs.input + inp.style.height = 'auto' + } + }, + + dense () { + this.autogrow === true && this.$nextTick(this.__adjustHeight) + } + }, + + data () { + return { innerValue: this.__getInitialMaskedValue() } + }, + + computed: { + isTextarea () { + return this.type === 'textarea' || this.autogrow === true + }, + + isTypeText () { + return this.isTextarea === true || ['text', 'search', 'url', 'tel', 'password'].includes(this.type) + }, + + fieldClass () { + return `q-${this.isTextarea === true ? 'textarea' : 'input'}` + + (this.autogrow === true ? ' q-textarea--autogrow' : '') + }, + + hasShadow () { + return this.type !== 'file' && + typeof this.shadowText === 'string' && + this.shadowText.length > 0 + }, + + onEvents () { + const on = { + ...this.qListeners, + input: this.__onInput, + compositionend: this.__onCompositionend, + paste: this.__onPaste, + // Safari < 10.2 & UIWebView doesn't fire compositionend when + // switching focus before confirming composition choice + // this also fixes the issue where some browsers e.g. iOS Chrome + // fires "change" instead of "input" on autocomplete. + change: this.__onChange, + blur: this.__onFinishEditing, + focus: this.__onFocus + } + + if (this.hasMask === true) { + on.keydown = this.__onMaskedKeydown + } + + if (this.autogrow === true) { + on.animationend = this.__onAnimationend + } + + return on + }, + + inputAttrs () { + const attrs = { + tabindex: 0, + 'data-autofocus': this.autofocus || void 0, + rows: this.type === 'textarea' ? 6 : void 0, + 'aria-label': this.label, + name: this.nameProp, + ...this.qAttrs, + id: this.targetUid, + type: this.type, + maxlength: this.maxlength, + disabled: this.disable === true, + readonly: this.readonly === true + } + + if (this.autogrow === true) { + attrs.rows = 1 + } + + return attrs + } + }, + + methods: { + focus () { + const el = document.activeElement + if ( + this.$refs.input !== void 0 && + this.$refs.input !== el && + // IE can have null document.activeElement + (el === null || el.id !== this.targetUid) + ) { + managedFocus(this.$refs.input) + } + }, + + select () { + this.$refs.input !== void 0 && this.$refs.input.select() + }, + + getNativeElement () { + return this.$refs.input + }, + + __onPaste (e) { + if (this.hasMask === true && this.reverseFillMask !== true) { + const inp = e.target + this.__moveCursorForPaste(inp, inp.selectionStart, inp.selectionEnd) + } + + this.$emit('paste', e) + }, + + __onInput (e) { + if (!e || !e.target || e.target.qComposing === true) { + return + } + + if (this.type === 'file') { + this.$emit('input', e.target.files) + return + } + + const val = e.target.value + + if (this.hasMask === true) { + this.__updateMaskValue(val, false, e.inputType) + } + else { + this.__emitValue(val) + + if (this.isTypeText === true && e.target === document.activeElement) { + const { selectionStart, selectionEnd } = e.target + + if (selectionStart !== void 0 && selectionEnd !== void 0) { + this.$nextTick(() => { + if (e.target === document.activeElement && val.indexOf(e.target.value) === 0) { + e.target.setSelectionRange(selectionStart, selectionEnd) + } + }) + } + } + } + + // we need to trigger it immediately too, + // to avoid "flickering" + this.autogrow === true && this.__adjustHeight() + }, + + __onChange (e) { + if (e.target.qComposing === true) { + e.target.qComposing = false + this.__onInput(e) + } + + clearTimeout(this.emitTimer) + this.emitValueFn !== void 0 && this.emitValueFn() + + this.$emit('change', e) + }, + + __onFinishEditing (e) { + e !== void 0 && stop(e) + + clearTimeout(this.emitTimer) + this.emitValueFn !== void 0 && this.emitValueFn() + + this.typedNumber = false + this.stopValueWatcher = false + delete this.tempValue + + // we need to use setTimeout instead of this.$nextTick + // to avoid a bug where focusout is not emitted for type date/time/week/... + this.type !== 'file' && setTimeout(() => { + if (this.$refs.input !== void 0) { + this.$refs.input.value = this.innerValue !== void 0 ? this.innerValue : '' + } + }) + }, + + __onFocus (e) { + stop(e) + managedFocus(e.target) + }, + + __onCompositionend (e) { + this.qListeners.compositionend !== void 0 && this.$emit('compositionend', e) + this.__onInput(e) + }, + + __onAnimationend (e) { + this.qListeners.animationend !== void 0 && this.$emit('animationend', e) + this.__adjustHeight() + }, + + __emitValue (val, stopWatcher) { + this.emitValueFn = () => { + if ( + this.type !== 'number' && + this.hasOwnProperty('tempValue') === true + ) { + delete this.tempValue + } + + if (this.value !== val && this.emitCachedValue !== val) { + this.emitCachedValue = val + + stopWatcher === true && (this.stopValueWatcher = true) + this.$emit('input', val) + + this.$nextTick(() => { + this.emitCachedValue === val && (this.emitCachedValue = NaN) + }) + } + + this.emitValueFn = void 0 + } + + if (this.type === 'number') { + this.typedNumber = true + this.tempValue = val + } + + if (this.debounce !== void 0) { + clearTimeout(this.emitTimer) + this.tempValue = val + this.emitTimer = setTimeout(this.emitValueFn, this.debounce) + } + else { + this.emitValueFn() + } + }, + + // textarea only + __adjustHeight () { + requestAnimationFrame(() => { + const inp = this.$refs.input + if (inp !== void 0) { + const parentStyle = inp.parentNode.style + const { overflow } = inp.style + + // reset height of textarea to a small size to detect the real height + // but keep the total control size the same + // Firefox rulez #14263, #14344 + this.$q.platform.is.firefox !== true && (inp.style.overflow = 'hidden') + inp.style.height = '1px' + parentStyle.marginBottom = (inp.scrollHeight - 1) + 'px' + + inp.style.height = inp.scrollHeight + 'px' + inp.style.overflow = overflow + parentStyle.marginBottom = '' + } + }) + }, + + __getCurValue () { + return this.hasOwnProperty('tempValue') === true + ? this.tempValue + : (this.innerValue !== void 0 ? this.innerValue : '') + }, + + __getShadowControl (h) { + return h('div', { + staticClass: 'q-field__native q-field__shadow absolute-bottom no-pointer-events' + + (this.isTextarea === true ? '' : ' text-no-wrap') + }, [ + h('span', { staticClass: 'invisible' }, this.__getCurValue()), + h('span', this.shadowText) + ]) + }, + + __getControl (h) { + return h(this.isTextarea === true ? 'textarea' : 'input', { + ref: 'input', + staticClass: 'q-field__native q-placeholder', + style: this.inputStyle, + class: this.inputClass, + attrs: this.inputAttrs, + on: this.onEvents, + domProps: this.type !== 'file' + ? { value: this.__getCurValue() } + : this.formDomProps + }) + } + }, + + created () { + this.emitCachedValue = NaN + }, + + mounted () { + // textarea only + this.autogrow === true && this.__adjustHeight() + }, + + beforeDestroy () { + this.__onFinishEditing() + } +}) diff --git a/src/components/input/QInput.json b/src/components/input/QInput.json new file mode 100644 index 00000000000..76d7bf16c89 --- /dev/null +++ b/src/components/input/QInput.json @@ -0,0 +1,140 @@ +{ + "mixins": [ "components/field/__QField", "mixins/mask", "mixins/form" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/input" + }, + + "behavior": { + "$listeners": { + "target": "to the inner native input element" + } + }, + + "props": { + "value": { + "type": [ "String", "Number" ], + "desc": "Model of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "required": true, + "examples": [ "v-model=\"myText\"" ], + "category": "model" + }, + + "shadow-text": { + "type": "String", + "desc": "Text to be displayed as shadow at the end of the text in the control; Does NOT applies to type=file", + "examples": [ "rest of the fill value" ], + "category": "content", + "addedIn": "v1.10" + }, + + "type": { + "type": "String", + "desc": "Input type", + "default": "text", + "values": [ + "text", "password", "textarea", "email", "search", + "tel", "file", "number", "url", "time", "date" + ], + "examples": [ "password" ], + "category": "general" + }, + + "debounce": { + "type": [ "String", "Number" ], + "desc": "Debounce amount (in milliseconds) when updating model", + "examples": [ "0", "530" ], + "category": "model" + }, + + "maxlength": { + "type": [ "String", "Number" ], + "desc": "Specify a max length of model", + "examples": [ "12" ], + "category": "model" + }, + + "autogrow": { + "type": "Boolean", + "desc": "Make field autogrow along with its content (uses a textarea)", + "category": "content" + }, + + "input-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the underlying input tag", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + + "input-style": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the underlying input tag", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + } + }, + + "events": { + "input": { + "extends": "input", + "params": { + "value": { + "type": [ "String", "Number" ] + } + } + }, + + "focus": { + "desc": "Emitted when component gets focused", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + }, + + "blur": { + "desc": "Emitted when component loses focus", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + } + }, + + "methods": { + "focus": { + "desc": "Focus underlying input tag" + }, + + "blur": { + "desc": "Lose focus on underlying input tag" + }, + + "select": { + "desc": "Select input text" + }, + + "getNativeElement": { + "desc": "Get the native input/textarea DOM Element", + "returns": { + "type": "Object", + "desc": "The underlying native input/textarea DOM Element", + "__exemption": [ "examples" ] + }, + "addedIn": "v1.15.15" + } + } +} diff --git a/src/components/input/QInput.sass b/src/components/input/QInput.sass new file mode 100644 index 00000000000..218f9b0375d --- /dev/null +++ b/src/components/input/QInput.sass @@ -0,0 +1,58 @@ +.q-textarea + + .q-field__control + min-height: 56px + height: auto + + .q-field__control-container + padding-top: 2px + padding-bottom: 2px + + .q-field__shadow + top: 2px + bottom: 2px + + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 18px + + .q-field__native + resize: vertical + padding-top: 17px + min-height: 52px + + &.q-field--labeled--std + .q-field__control-container + padding-top: 26px + .q-field__shadow + top: 26px + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 0 + .q-field__native + min-height: 26px + padding-top: 1px + + &--autogrow + .q-field__native + resize: none + + &.q-field--dense + .q-field__control, .q-field__native + min-height: 36px + .q-field__native + padding-top: 9px + + &.q-field--labeled--std + .q-field__control-container + padding-top: 14px + .q-field__shadow + top: 14px + .q-field__native + min-height: 24px + padding-top: 3px + .q-field__prefix, .q-field__suffix + padding-top: 2px + +body.mobile .q-textarea, +.q-textarea.disabled + .q-field__native + resize: none diff --git a/src/components/input/QInput.styl b/src/components/input/QInput.styl new file mode 100644 index 00000000000..218f9b0375d --- /dev/null +++ b/src/components/input/QInput.styl @@ -0,0 +1,58 @@ +.q-textarea + + .q-field__control + min-height: 56px + height: auto + + .q-field__control-container + padding-top: 2px + padding-bottom: 2px + + .q-field__shadow + top: 2px + bottom: 2px + + .q-field__native, .q-field__prefix, .q-field__suffix + line-height: 18px + + .q-field__native + resize: vertical + padding-top: 17px + min-height: 52px + + &.q-field--labeled--std + .q-field__control-container + padding-top: 26px + .q-field__shadow + top: 26px + .q-field__native, .q-field__prefix, .q-field__suffix + padding-top: 0 + .q-field__native + min-height: 26px + padding-top: 1px + + &--autogrow + .q-field__native + resize: none + + &.q-field--dense + .q-field__control, .q-field__native + min-height: 36px + .q-field__native + padding-top: 9px + + &.q-field--labeled--std + .q-field__control-container + padding-top: 14px + .q-field__shadow + top: 14px + .q-field__native + min-height: 24px + padding-top: 3px + .q-field__prefix, .q-field__suffix + padding-top: 2px + +body.mobile .q-textarea, +.q-textarea.disabled + .q-field__native + resize: none diff --git a/src/components/input/index.js b/src/components/input/index.js new file mode 100644 index 00000000000..f0a887b4f96 --- /dev/null +++ b/src/components/input/index.js @@ -0,0 +1,5 @@ +import QInput from './QInput.js' + +export { + QInput +} diff --git a/src/components/intersection/QIntersection.js b/src/components/intersection/QIntersection.js new file mode 100644 index 00000000000..7ddc1852f87 --- /dev/null +++ b/src/components/intersection/QIntersection.js @@ -0,0 +1,99 @@ +import Vue from 'vue' + +import { onSSR } from '../../plugins/Platform.js' + +import Intersection from '../../directives/Intersection.js' + +import TagMixin from '../../mixins/tag.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QIntersection', + + mixins: [ TagMixin, ListenersMixin ], + + directives: { + Intersection + }, + + props: { + once: Boolean, + transition: String, + + ssrPrerender: Boolean, + + margin: String, + threshold: [ Number, Array ], + root: { + default: null + }, + + disable: Boolean + }, + + data () { + return { + showing: onSSR === true ? this.ssrPrerender : false + } + }, + + computed: { + value () { + return this.root !== void 0 || this.margin !== void 0 || this.threshold !== void 0 + ? { + handler: this.__trigger, + cfg: { + root: this.root, + rootMargin: this.margin, + threshold: this.threshold + } + } + : this.__trigger + }, + + directives () { + if (this.disable !== true && (onSSR !== true || this.once !== true || this.ssrPrerender !== true)) { + return [{ + name: 'intersection', + value: this.value, + modifiers: { + once: this.once + } + }] + } + } + }, + + methods: { + __trigger (entry) { + if (this.showing !== entry.isIntersecting) { + this.showing = entry.isIntersecting + + if (this.qListeners.visibility !== void 0) { + this.$emit('visibility', this.showing) + } + } + } + }, + + render (h) { + const content = this.showing === true + ? slot(this, 'default') + : void 0 + + return h(this.tag, { + staticClass: 'q-intersection', + on: { ...this.qListeners }, + directives: this.directives + }, this.transition + ? [ + h('transition', { + props: { name: 'q-transition--' + this.transition } + }, content) + ] + : content + ) + } +}) diff --git a/src/components/intersection/QIntersection.json b/src/components/intersection/QIntersection.json new file mode 100644 index 00000000000..304b640dcd1 --- /dev/null +++ b/src/components/intersection/QIntersection.json @@ -0,0 +1,88 @@ +{ + "mixins": [ "mixins/tag" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/intersection" + }, + + "behavior": { + "$listeners": true + }, + + "addedIn": "v1.4", + + "props": { + "tag": { + "type": "String", + "examples": [ "div", "span", "blockquote" ], + "addedIn": "v1.9.3" + }, + + "once": { + "type": "Boolean", + "desc": "Get triggered only once", + "category": "behavior" + }, + + "ssr-prerender": { + "type": "Boolean", + "desc": "Pre-render content on server side if using SSR (use it to pre-render above the fold content)", + "category": "behavior", + "addedIn": "v1.9.5" + }, + + "root": { + "type": "Element", + "desc": "[Intersection API root prop] Lets you define an alternative to the viewport as your root (through its DOM element); It is important to keep in mind that root needs to be an ancestor of the observed element", + "examples": [ "$refs.myTable.$el", "getElementById(\"myTable\")" ], + "category": "behavior", + "addedIn": "v1.14.2" + }, + + "margin": { + "type": "String", + "desc": "[Intersection API rootMargin prop] Allows you to specify the margins for the root, effectively allowing you to either grow or shrink the area used for intersections", + "examples": [ "-20px 0px", "10px 20px 30px 40px" ], + "category": "behavior" + }, + + "threshold": { + "type": [ "Array", "Number" ], + "desc": "[Intersection API threshold prop] Threshold(s) at which to trigger, specified as a ratio, or list of ratios, of (visible area / total area) of the observed element", + "examples": [ + "[ 0, 0.25, 0.5, 0.75, 1 ]", + ":threshold=\"1\"" + ], + "category": "behavior" + }, + + "transition": { + "extends": "transition", + "category": "behavior" + }, + + "disable": { + "type": "Boolean", + "desc": "Disable visibility observable (content will remain as it was, visible or hidden)", + "category": "behavior" + } + }, + + "slots": { + "default": { + "extends": "default" + } + }, + + "events": { + "visibility": { + "desc": "Fires when visibility changes", + "params": { + "isVisible": { + "type": "Boolean", + "desc": "Visibility status (true/false)" + } + } + } + } +} diff --git a/src/components/intersection/QIntersection.sass b/src/components/intersection/QIntersection.sass new file mode 100644 index 00000000000..50f3550469d --- /dev/null +++ b/src/components/intersection/QIntersection.sass @@ -0,0 +1,2 @@ +.q-intersection + position: relative diff --git a/src/components/intersection/QIntersection.styl b/src/components/intersection/QIntersection.styl new file mode 100644 index 00000000000..50f3550469d --- /dev/null +++ b/src/components/intersection/QIntersection.styl @@ -0,0 +1,2 @@ +.q-intersection + position: relative diff --git a/src/components/intersection/index.js b/src/components/intersection/index.js new file mode 100644 index 00000000000..8417e103a3d --- /dev/null +++ b/src/components/intersection/index.js @@ -0,0 +1,5 @@ +import QIntersection from './QIntersection.js' + +export { + QIntersection +} diff --git a/src/components/item/QItem.js b/src/components/item/QItem.js new file mode 100644 index 00000000000..f8b4b591601 --- /dev/null +++ b/src/components/item/QItem.js @@ -0,0 +1,160 @@ +import Vue from 'vue' + +import DarkMixin from '../../mixins/dark.js' +import TagMixin from '../../mixins/tag.js' +import RouterLinkMixin from '../../mixins/router-link.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { uniqueSlot } from '../../utils/private/slot.js' +import { stopAndPrevent } from '../../utils/event.js' +import { isKeyCode } from '../../utils/private/key-composition.js' + +export default Vue.extend({ + name: 'QItem', + + mixins: [ DarkMixin, RouterLinkMixin, TagMixin, ListenersMixin ], + + props: { + active: { + type: Boolean, + default: null + }, + + clickable: Boolean, + dense: Boolean, + insetLevel: Number, + + tabindex: [ String, Number ], + + focused: Boolean, + manualFocus: Boolean + }, + + computed: { + isActionable () { + return this.clickable === true || + this.hasLink === true || + this.tag === 'label' + }, + + isClickable () { + return this.disable !== true && this.isActionable === true + }, + + classes () { + return 'q-item q-item-type row no-wrap' + + (this.dense === true ? ' q-item--dense' : '') + + `q-item--${this.darkSuffix}` + + ( + this.hasLink === true && this.active === null + ? this.linkClass + : ( + this.active === true + ? ` q-item--active${this.activeClass !== void 0 ? ` ${this.activeClass}` : ''} ` + : '' + ) + ) + + (this.disable === true ? ' disabled' : '') + + ( + this.isClickable === true + ? ' q-item--clickable q-link cursor-pointer ' + + (this.manualFocus === true ? 'q-manual-focusable' : 'q-focusable q-hoverable') + + (this.focused === true ? ' q-manual-focusable--focused' : '') + : '' + ) + }, + + style () { + if (this.insetLevel !== void 0) { + const dir = this.$q.lang.rtl === true ? 'Right' : 'Left' + return { + ['padding' + dir]: (16 + this.insetLevel * 56) + 'px' + } + } + }, + + onEvents () { + return { + ...this.qListeners, + focus: this.__onFocus, + click: this.__onClick, + keyup: this.__onKeyup + } + } + }, + + methods: { + __onClick (e) { + if (this.isClickable === true) { + this.__refocus() + this.__navigateOnClick(e) + } + }, + + __onFocus (e) { + this.isClickable === true && this.__refocus() + this.qListeners.focus !== void 0 && this.$emit('focus', e) + }, + + __onKeyup (e) { + if (this.isClickable === true && isKeyCode(e, 13) === true) { + stopAndPrevent(e) + + // for click trigger + const evt = new MouseEvent('click', e) + this.$el.dispatchEvent(evt) + } + + this.$emit('keyup', e) + }, + + __getContent (h) { + const child = uniqueSlot(this, 'default', []) + + this.isClickable === true && child.unshift( + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: 'blurTarget' }) + ) + + return child + }, + + __refocus () { + if ( + this.$q.interaction.isPointer === true && + this.$refs.blurTarget !== void 0 && + document.activeElement === this.$el + ) { + this.$refs.blurTarget.focus() + } + else if ( + this.$q.interaction.isKeyboard === true && + document.activeElement === this.$refs.blurTarget + ) { + this.$el.focus() + } + } + }, + + render (h) { + const data = { + class: this.classes, + style: this.style, + attrs: { role: 'listitem' }, + on: this.onEvents + } + + if (this.isClickable === true) { + data.attrs.tabindex = this.tabindex || '0' + Object.assign(data.attrs, this.linkAttrs) + } + else if (this.isActionable === true) { + data.attrs['aria-disabled'] = 'true' + } + + return h( + this.linkTag, + data, + this.__getContent(h) + ) + } +}) diff --git a/src/components/item/QItem.json b/src/components/item/QItem.json new file mode 100644 index 00000000000..53c6736642c --- /dev/null +++ b/src/components/item/QItem.json @@ -0,0 +1,123 @@ +{ + "mixins": [ "mixins/router-link", "mixins/tag" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "active": { + "type": "Boolean", + "desc": "Put item into 'active' state", + "category": "state" + }, + + "dark": { + "extends": "dark" + }, + + "clickable": { + "type": "Boolean", + "desc": "Is QItem clickable? If it's the case, then it will add hover effects and emit 'click' events", + "category": "state" + }, + + "dense": { + "extends": "dense" + }, + + "inset-level": { + "type": "Number", + "desc": "Apply an inset; Useful when avatar/left side is missing but you want to align content with other items that do have a left side, or when you're building a menu", + "examples": [ ":inset-level=\"1\"" ], + "category": "content" + }, + + "tabindex": { + "extends": "tabindex" + }, + + "tag": { + "desc": "HTML tag to render; Suggestion: use 'label' when encapsulating a QCheckbox/QRadio/QToggle so that when user clicks/taps on the whole item it will trigger a model change for the mentioned components", + "examples": [ "a", "label", "div" ] + }, + + "manual-focus": { + "type": "Boolean", + "desc": "Put item into a manual focus state; Enables 'focused' prop which will determine if item is focused or not, rather than relying on native hover/focus states", + "category": "state" + }, + + "focused": { + "type": "Boolean", + "desc": "Determines focus state, ONLY if 'manual-focus' is enabled / set to true", + "category": "state" + } + }, + + "slots": { + "default": { + "desc": "This is where QItem's content goes" + } + }, + + "events": { + "click": { + "desc": "Emitted when the component is clicked", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object; If you are using route navigation ('to'/'replace'/'append' props) and you want to cancel navigation then call evt.preventDefault() synchronously in your event handler", + "required": true, + "__exemption": [ "examples" ] + }, + "navigateFn": { + "type": "Function", + "desc": "Available ONLY if you are using route navigation ('to'/'replace'/'append' props); When you need to control the time at which the component should trigger the route navigation then call evt.preventDefault() synchronously and then call this function at your convenience; Useful if you have async work to be done before the actual route navigation or if you want to redirect somewhere else", + "addedIn": "v1.21", + "params": { + "opts": { + "type": "Object", + "desc": "Optional options", + "definition": { + "to": { + "type": [ "String", "Object" ], + "desc": "Equivalent to Vue Router 'to' property; Specify it explicitly otherwise it will be set with same value as component's 'to' prop", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ] + }, + + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Specify it explicitly otherwise it will be set with same value as component's 'replace' prop" + }, + + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property", + "default": "Tab's 'append' property" + }, + + "returnRouterError": { + "type": "Boolean", + "desc": "Return the router error, if any; Otherwise the returned Promise will always fulfill" + } + } + } + }, + "returns": { + "type": "Promise", + "desc": "Returns the router's navigation promise", + "__exemption": [ "examples" ] + } + } + } + } + } +} diff --git a/src/components/item/QItem.sass b/src/components/item/QItem.sass new file mode 100644 index 00000000000..cfbc5d7a305 --- /dev/null +++ b/src/components/item/QItem.sass @@ -0,0 +1,141 @@ +.q-item + min-height: 48px + padding: 8px 16px + color: inherit + transition: color .3s, background-color .3s + + &__section + + &--side + color: $grey-7 + align-items: flex-start + padding-right: 16px + width: auto + min-width: 0 + max-width: 100% + + > .q-icon + font-size: 24px + + > .q-avatar + font-size: 40px + + &--avatar + color: inherit + min-width: 56px + + &--thumbnail + img + width: 100px + height: 56px + + &--nowrap + white-space: nowrap + + > .q-item__section--thumbnail:first-child, + > .q-focus-helper + .q-item__section--thumbnail + margin-left: -16px + + > .q-item__section--thumbnail:last-of-type + margin-right: -16px + + &__label + line-height: 1.2em !important + max-width: 100% + + &--overline + color: rgba(0,0,0,.7) + + &--caption + color: rgba(0,0,0,.54) + + &--header + color: $grey-7 + padding: 16px + font-size: .875rem + line-height: 1.25rem + letter-spacing: .01786em + + .q-separator--spaced + &, .q-list--padding & + padding-top: 8px + + & + .q-item__label + margin-top: 4px + +.q-item__section--main + width: auto + min-width: 0 + max-width: 100% + flex: 10000 1 0% + + & + & + margin-left: 8px + + ~ .q-item__section--side + align-items: flex-end + padding-right: 0 + padding-left: 16px + + &.q-item__section--thumbnail + margin-left: 0 + margin-right: -16px + +.q-list + &--bordered + border: 1px solid $separator-color + &--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top: 1px solid $separator-color + &--padding + padding: 8px 0 + +.q-list--dense > .q-item, .q-item--dense + min-height: 32px + padding: 2px 16px + +.q-list--dark.q-list--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top-color: $separator-dark-color + +.q-list--dark, .q-item--dark + color: $dark-text + color: var(--q-color-dark-text) + border-color: $separator-dark-color + + .q-item__section--side:not(.q-item__section--avatar) + color: rgba(255,255,255,.7) + + .q-item__label + &--header + color: rgba(255,255,255,.64) + &--overline, &--caption + color: rgba(255,255,255,.8) + +.q-item + position: relative + + &.q-router-link--active, &--active + color: $primary + color: var(--q-color-primary) + +@media (prefers-color-scheme: dark) + .q-list--dark-auto.q-list--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top-color: $separator-dark-color + + .q-list--dark-auto, .q-item--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + border-color: $separator-dark-color + + .q-item__section--side:not(.q-item__section--avatar) + color: rgba(255,255,255,.7) + + .q-item__label + &--header + color: rgba(255,255,255,.64) + &--overline, &--caption + color: rgba(255,255,255,.8) diff --git a/src/components/item/QItem.styl b/src/components/item/QItem.styl new file mode 100644 index 00000000000..cfbc5d7a305 --- /dev/null +++ b/src/components/item/QItem.styl @@ -0,0 +1,141 @@ +.q-item + min-height: 48px + padding: 8px 16px + color: inherit + transition: color .3s, background-color .3s + + &__section + + &--side + color: $grey-7 + align-items: flex-start + padding-right: 16px + width: auto + min-width: 0 + max-width: 100% + + > .q-icon + font-size: 24px + + > .q-avatar + font-size: 40px + + &--avatar + color: inherit + min-width: 56px + + &--thumbnail + img + width: 100px + height: 56px + + &--nowrap + white-space: nowrap + + > .q-item__section--thumbnail:first-child, + > .q-focus-helper + .q-item__section--thumbnail + margin-left: -16px + + > .q-item__section--thumbnail:last-of-type + margin-right: -16px + + &__label + line-height: 1.2em !important + max-width: 100% + + &--overline + color: rgba(0,0,0,.7) + + &--caption + color: rgba(0,0,0,.54) + + &--header + color: $grey-7 + padding: 16px + font-size: .875rem + line-height: 1.25rem + letter-spacing: .01786em + + .q-separator--spaced + &, .q-list--padding & + padding-top: 8px + + & + .q-item__label + margin-top: 4px + +.q-item__section--main + width: auto + min-width: 0 + max-width: 100% + flex: 10000 1 0% + + & + & + margin-left: 8px + + ~ .q-item__section--side + align-items: flex-end + padding-right: 0 + padding-left: 16px + + &.q-item__section--thumbnail + margin-left: 0 + margin-right: -16px + +.q-list + &--bordered + border: 1px solid $separator-color + &--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top: 1px solid $separator-color + &--padding + padding: 8px 0 + +.q-list--dense > .q-item, .q-item--dense + min-height: 32px + padding: 2px 16px + +.q-list--dark.q-list--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top-color: $separator-dark-color + +.q-list--dark, .q-item--dark + color: $dark-text + color: var(--q-color-dark-text) + border-color: $separator-dark-color + + .q-item__section--side:not(.q-item__section--avatar) + color: rgba(255,255,255,.7) + + .q-item__label + &--header + color: rgba(255,255,255,.64) + &--overline, &--caption + color: rgba(255,255,255,.8) + +.q-item + position: relative + + &.q-router-link--active, &--active + color: $primary + color: var(--q-color-primary) + +@media (prefers-color-scheme: dark) + .q-list--dark-auto.q-list--separator + > .q-item-type + .q-item-type, + > .q-virtual-scroll__content > .q-item-type + .q-item-type + border-top-color: $separator-dark-color + + .q-list--dark-auto, .q-item--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + border-color: $separator-dark-color + + .q-item__section--side:not(.q-item__section--avatar) + color: rgba(255,255,255,.7) + + .q-item__label + &--header + color: rgba(255,255,255,.64) + &--overline, &--caption + color: rgba(255,255,255,.8) diff --git a/src/components/item/QItemLabel.js b/src/components/item/QItemLabel.js new file mode 100644 index 00000000000..3955b212c23 --- /dev/null +++ b/src/components/item/QItemLabel.js @@ -0,0 +1,49 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QItemLabel', + + mixins: [ ListenersMixin ], + + props: { + overline: Boolean, + caption: Boolean, + header: Boolean, + lines: [ Number, String ] + }, + + computed: { + classes () { + return { + 'q-item__label--overline text-overline': this.overline, + 'q-item__label--caption text-caption': this.caption, + 'q-item__label--header': this.header, + 'ellipsis': parseInt(this.lines, 10) === 1 + } + }, + + style () { + if (this.lines !== void 0 && parseInt(this.lines, 10) > 1) { + return { + overflow: 'hidden', + display: '-webkit-box', + '-webkit-box-orient': 'vertical', + '-webkit-line-clamp': this.lines + } + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-item__label', + style: this.style, + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/item/QItemLabel.json b/src/components/item/QItemLabel.json new file mode 100644 index 00000000000..8cc9793303a --- /dev/null +++ b/src/components/item/QItemLabel.json @@ -0,0 +1,42 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "overline": { + "type": "Boolean", + "desc": "Renders an overline label", + "category": "content" + }, + + "caption": { + "type": "Boolean", + "desc": "Renders a caption label", + "category": "content" + }, + + "header": { + "type": "Boolean", + "desc": "Renders a header label", + "category": "content" + }, + + "lines": { + "type": [ "Number", "String" ], + "desc": "Apply ellipsis when there's not enough space to render on the specified number of lines;", + "examples": [ "1", "3", ":lines=\"2\"" ], + "category": "content|behavior" + } + }, + + "slots": { + "default": { + "desc": "The content of the label; Suggestion: text" + } + } +} diff --git a/src/components/item/QItemSection.js b/src/components/item/QItemSection.js new file mode 100644 index 00000000000..bd310608554 --- /dev/null +++ b/src/components/item/QItemSection.js @@ -0,0 +1,43 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QItemSection', + + mixins: [ ListenersMixin ], + + props: { + avatar: Boolean, + thumbnail: Boolean, + side: Boolean, + top: Boolean, + noWrap: Boolean + }, + + computed: { + classes () { + const side = this.avatar || this.side || this.thumbnail + + return { + 'q-item__section--top': this.top, + 'q-item__section--avatar': this.avatar, + 'q-item__section--thumbnail': this.thumbnail, + 'q-item__section--side': side, + 'q-item__section--nowrap': this.noWrap, + 'q-item__section--main': !side, + [`justify-${this.top ? 'start' : 'center'}`]: true + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-item__section column', + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/item/QItemSection.json b/src/components/item/QItemSection.json new file mode 100644 index 00000000000..5c9ef81111f --- /dev/null +++ b/src/components/item/QItemSection.json @@ -0,0 +1,47 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "avatar": { + "type": "Boolean", + "desc": "Render an avatar item side (does not needs 'side' prop to be set)", + "category": "content" + }, + + "thumbnail": { + "type": "Boolean", + "desc": "Render a thumbnail item side (does not needs 'side' prop to be set)", + "category": "content" + }, + + "side": { + "type": "Boolean", + "desc": "Renders as a side of the item", + "category": "content" + }, + + "top": { + "type": "Boolean", + "desc": "Align content to top (useful for multi-line items)", + "category": "content" + }, + + "no-wrap": { + "type": "Boolean", + "desc": "Do not wrap text (useful for item's main content)", + "category": "content" + } + }, + + "slots": { + "default": { + "desc": "Section's actual content" + } + } +} diff --git a/src/components/item/QList.js b/src/components/item/QList.js new file mode 100644 index 00000000000..7243d115cc5 --- /dev/null +++ b/src/components/item/QList.js @@ -0,0 +1,40 @@ +import Vue from 'vue' + +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +const attrs = { role: 'list' } + +export default Vue.extend({ + name: 'QList', + + mixins: [ ListenersMixin, DarkMixin ], + + props: { + bordered: Boolean, + dense: Boolean, + separator: Boolean, + padding: Boolean + }, + + computed: { + classes () { + return 'q-list' + + (this.bordered === true ? ' q-list--bordered' : '') + + (this.dense === true ? ' q-list--dense' : '') + + (this.separator === true ? ' q-list--separator' : '') + + ` q-list--${this.darkSuffix}` + + (this.padding === true ? ' q-list--padding' : '') + } + }, + + render (h) { + return h('div', { + class: this.classes, + attrs, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/item/QList.json b/src/components/item/QList.json new file mode 100644 index 00000000000..514add1a9c9 --- /dev/null +++ b/src/components/item/QList.json @@ -0,0 +1,41 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/list-and-list-items" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "bordered": { + "extends": "bordered" + }, + + "dense": { + "extends": "dense" + }, + + "separator": { + "type": "Boolean", + "desc": "Applies a separator between contained items", + "category": "content" + }, + + "dark": { + "extends": "dark" + }, + + "padding": { + "type": "Boolean", + "desc": "Applies a material design-like padding on top and bottom", + "category": "content" + } + }, + + "slots": { + "default": { + "desc": "This is where the content goes; Suggestion: QItem, QExpansionItem, ..." + } + } +} diff --git a/src/components/item/index.js b/src/components/item/index.js new file mode 100644 index 00000000000..01f6c1fed7a --- /dev/null +++ b/src/components/item/index.js @@ -0,0 +1,13 @@ +import QList from './QList.js' + +import QItem from './QItem.js' +import QItemSection from './QItemSection.js' +import QItemLabel from './QItemLabel.js' + +export { + QList, + + QItem, + QItemSection, + QItemLabel +} diff --git a/src/components/knob/QKnob.js b/src/components/knob/QKnob.js new file mode 100644 index 00000000000..2499688cb36 --- /dev/null +++ b/src/components/knob/QKnob.js @@ -0,0 +1,303 @@ +import Vue from 'vue' + +import { position, stopAndPrevent } from '../../utils/event.js' +import { between, normalizeToInterval } from '../../utils/format.js' +import { slot } from '../../utils/private/slot.js' +import cache from '../../utils/private/cache.js' + +import QCircularProgress from '../circular-progress/QCircularProgress.js' +import FormMixin from '../../mixins/form.js' +import TouchPan from '../../directives/TouchPan.js' + +// PGDOWN, LEFT, DOWN, PGUP, RIGHT, UP +const keyCodes = [34, 37, 40, 33, 39, 38] + +export default Vue.extend({ + name: 'QKnob', + + mixins: [ + { props: QCircularProgress.options.props }, + FormMixin + ], + + directives: { + TouchPan + }, + + props: { + innerMin: Number, + innerMax: Number, + + step: { + type: Number, + default: 1, + validator: v => v >= 0 + }, + + tabindex: { + type: [Number, String], + default: 0 + }, + + disable: Boolean, + readonly: Boolean + }, + + data () { + const innerMin = this.__getInnerMin(this.innerMin) + const innerMax = this.__getInnerMax(this.innerMax) + + return { + model: this.value === null ? innerMin : between(this.value, innerMin, innerMax), + dragging: false + } + }, + + watch: { + modelUpdate () { + this.model = this.value === null + ? this.computedInnerMin + : between(this.value, this.computedInnerMin, this.computedInnerMax) + + this.__updateValue(true) + } + }, + + computed: { + classes () { + return 'q-knob non-selectable q-key-group-navigation--ignore-key' + ( + this.editable === true + ? ' q-knob--editable' + : (this.disable === true ? ' disabled' : '') + ) + }, + + computedInnerMin () { + return this.__getInnerMin(this.innerMin) + }, + + computedInnerMax () { + return this.__getInnerMax(this.innerMax) + }, + + modelUpdate () { + return `${this.value}|${this.computedInnerMin}|${this.computedInnerMax}` + }, + + editable () { + return this.disable === false && this.readonly === false + }, + + decimals () { + return (String(this.step).trim('0').split('.')[1] || '').length + }, + + computedStep () { + return this.step === 0 ? 1 : this.step + }, + + computedInstantFeedback () { + return this.instantFeedback === true || + this.dragging === true + }, + + onEvents () { + return this.$q.platform.is.mobile === true + ? { click: this.__click } + : { + mousedown: this.__activate, + click: this.__click, + keydown: this.__keydown, + keyup: this.__keyup + } + }, + + attrs () { + const attrs = { + role: 'slider', + 'aria-valuemin': this.computedInnerMin, + 'aria-valuemax': this.computedInnerMax, + 'aria-valuenow': this.value + } + + if (this.editable === true) { + attrs.tabindex = this.tabindex + } + else { + attrs[`aria-${this.disable === true ? 'disabled' : 'readonly'}`] = '' + } + + return attrs + } + }, + + methods: { + __getInnerMin (val) { + return isNaN(val) === true || this.innerMin < this.min + ? this.min + : this.innerMin + }, + + __getInnerMax (val) { + return isNaN(val) === true || val > this.max + ? this.max + : this.innerMax + }, + + __updateCenterPosition () { + const { top, left, width, height } = this.$el.getBoundingClientRect() + this.centerPosition = { + top: top + height / 2, + left: left + width / 2 + } + }, + + __pan (event) { + if (event.isFinal) { + this.__updatePosition(event.evt, true) + this.dragging = false + } + else if (event.isFirst) { + this.__updateCenterPosition() + this.dragging = true + this.__updatePosition(event.evt) + } + else { + this.__updatePosition(event.evt) + } + }, + + __click (evt) { + this.__updateCenterPosition() + this.__updatePosition(evt, true) + }, + + __keydown (evt) { + if (!keyCodes.includes(evt.keyCode)) { + return + } + + stopAndPrevent(evt) + + const + step = ([34, 33].includes(evt.keyCode) ? 10 : 1) * this.computedStep, + offset = [34, 37, 40].includes(evt.keyCode) ? -step : step + + this.model = between( + parseFloat((this.model + offset).toFixed(this.decimals)), + this.computedInnerMin, + this.computedInnerMax + ) + + this.__updateValue() + }, + + __keyup (evt) { + if (keyCodes.includes(evt.keyCode)) { + this.__updateValue(true) + } + }, + + __activate (evt) { + this.__updateCenterPosition() + this.__updatePosition(evt) + }, + + __updatePosition (evt, change) { + const + center = this.centerPosition, + pos = position(evt), + height = Math.abs(pos.top - center.top), + distance = Math.sqrt( + height ** 2 + + Math.abs(pos.left - center.left) ** 2 + ) + + let angle = Math.asin(height / distance) * (180 / Math.PI) + + if (pos.top < center.top) { + angle = center.left < pos.left ? 90 - angle : 270 + angle + } + else { + angle = center.left < pos.left ? angle + 90 : 270 - angle + } + + if (this.$q.lang.rtl === true) { + angle = normalizeToInterval(-angle - this.angle, 0, 360) + } + else if (this.angle) { + angle = normalizeToInterval(angle - this.angle, 0, 360) + } + + if (this.reverse === true) { + angle = 360 - angle + } + + let model = this.min + (angle / 360) * (this.max - this.min) + + if (this.step !== 0) { + const + step = this.computedStep, + modulo = model % step + + model = model - modulo + + (Math.abs(modulo) >= step / 2 ? (modulo < 0 ? -1 : 1) * step : 0) + + model = parseFloat(model.toFixed(this.decimals)) + } + + model = between(model, this.computedInnerMin, this.computedInnerMax) + + this.$emit('drag-value', model) + + if (this.model !== model) { + this.model = model + } + + this.__updateValue(change) + }, + + __updateValue (change) { + this.value !== this.model && this.$emit('input', this.model) + change === true && this.$emit('change', this.model) + }, + + __getNameInput () { + return this.$createElement('input', { attrs: this.formAttrs }) + } + }, + + render (h) { + const data = { + class: this.classes, + attrs: this.attrs, + props: { + ...this.$props, + value: this.model, + instantFeedback: this.computedInstantFeedback + } + } + + if (this.editable === true) { + data.key = 'dir' + data.on = this.onEvents + data.directives = cache(this, 'dir', [{ + name: 'touch-pan', + value: this.__pan, + modifiers: { + prevent: true, + stop: true, + mouse: true + } + }]) + + if (this.name !== void 0) { + data.scopedSlots = { + internal: this.__getNameInput + } + } + } + + return h(QCircularProgress, data, slot(this, 'default')) + } +}) diff --git a/src/components/knob/QKnob.json b/src/components/knob/QKnob.json new file mode 100644 index 00000000000..e7d6b264a23 --- /dev/null +++ b/src/components/knob/QKnob.json @@ -0,0 +1,163 @@ +{ + "mixins": [ "mixins/size", "mixins/form" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/knob" + }, + + "props": { + "value": { + "type": "Number", + "desc": "Any number to indicate the given value of the knob. Either use this property (along with a listener for 'input' event) OR use the v-model directive", + "examples": [ "v-model=\"myValue\"" ], + "category": "model" + }, + + "min": { + "type": "Number", + "desc": "The minimum value that the model (the knob value) should start at", + "examples": [ "20", "5" ], + "category": "model" + }, + + "max": { + "type": "Number", + "desc": "The maximum value that the model (the knob value) should go to", + "examples": [ "100", "50" ], + "category": "model" + }, + + "inner-min": { + "type": "Number", + "desc": "Inner minimum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be higher or equal to 'min' prop; Defaults to 'min' prop", + "examples": [ ":inner-min=\"0\"" ], + "category": "model", + "addedIn": "v1.18.4" + }, + + "inner-max": { + "type": "Number", + "desc": "Inner maximum value of the model; Use in case you need the model value to be inside of the track's min-max values; Needs to be lower or equal to 'max' prop; Defaults to 'max' prop", + "examples": [ ":inner-max=\"100\"" ], + "category": "model", + "addedIn": "v1.18.4" + }, + + "step": { + "type": "Number", + "default": "1", + "desc": "A number representing steps in the value of the model, while adjusting the knob", + "examples": [ "1", "5" ], + "category": "model" + }, + + "reverse": { + "type": "Boolean", + "desc": "Reverses the direction of progress", + "category": "behavior" + }, + + "instant-feedback": { + "type": "Boolean", + "desc": "No animation when model changes", + "category": "behavior", + "addedIn": "v1.11" + }, + + "color": { + "extends": "color" + }, + + "center-color": { + "extends": "color", + "desc": "Color name for the center part of the component from the Quasar Color Palette" + }, + + "track-color": { + "extends": "color", + "desc": "Color name for the track of the component from the Quasar Color Palette" + }, + + "font-size": { + "type": "String", + "desc": "Size of text in CSS units, including unit name. Suggestion: use 'em' units to sync with component size", + "default": "0.25em", + "examples": [ "1em", "16px", "2rem" ], + "category": "style" + }, + + "thickness": { + "type": "Number", + "default": 0.2, + "desc": "Thickness of progress arc as a ratio (0.0 < x < 1.0) of component size", + "examples": [ 1, 0.3 ], + "category": "style" + }, + + "angle": { + "type": "Number", + "desc": "Angle to rotate progress arc by", + "default": 0, + "examples": [ 0, 40, 90 ], + "category": "content" + }, + + "show-value": { + "type": "Boolean", + "desc": "Enables the default slot and uses it (if available), otherwise it displays the 'value' prop as text; Make sure the text has enough space to be displayed inside the component", + "category": "content|behavior" + }, + + "tabindex": { + "extends": "tabindex" + }, + + "disable": { + "extends": "disable" + }, + + "readonly": { + "extends": "readonly" + } + }, + + "slots": { + "default": { + "extends": "default" + } + }, + + "events": { + "input": { + "extends": "input", + "params": { + "value": { + "type": "Number", + "desc": "New model value" + } + } + }, + + "change": { + "desc": "Fires at the end of a knob's adjustment and offers the value of the model", + "params": { + "value": { + "type": "Number", + "desc": "New model value", + "examples": [ 12 ] + } + } + }, + + "drag-value": { + "desc": "The value of the model while dragging is still in progress", + "params": { + "value": { + "type": "Number", + "desc": "New model value", + "examples": [ 12 ] + } + } + } + } +} diff --git a/src/components/knob/QKnob.sass b/src/components/knob/QKnob.sass new file mode 100644 index 00000000000..4086656de77 --- /dev/null +++ b/src/components/knob/QKnob.sass @@ -0,0 +1,21 @@ +.q-knob + + font-size: 48px + + &--editable + cursor: pointer + outline: 0 + + &:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + box-shadow: none + transition: box-shadow .24s ease-in-out + + &:focus:before + box-shadow: $shadow-4 diff --git a/src/components/knob/QKnob.styl b/src/components/knob/QKnob.styl new file mode 100644 index 00000000000..4086656de77 --- /dev/null +++ b/src/components/knob/QKnob.styl @@ -0,0 +1,21 @@ +.q-knob + + font-size: 48px + + &--editable + cursor: pointer + outline: 0 + + &:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + box-shadow: none + transition: box-shadow .24s ease-in-out + + &:focus:before + box-shadow: $shadow-4 diff --git a/src/components/knob/index.js b/src/components/knob/index.js new file mode 100644 index 00000000000..081789dc3ad --- /dev/null +++ b/src/components/knob/index.js @@ -0,0 +1,5 @@ +import QKnob from './QKnob.js' + +export { + QKnob +} diff --git a/src/components/layout/QLayout.js b/src/components/layout/QLayout.js new file mode 100644 index 00000000000..0c3a432ce6c --- /dev/null +++ b/src/components/layout/QLayout.js @@ -0,0 +1,275 @@ +import Vue from 'vue' + +import { onSSR } from '../../plugins/Platform.js' + +import QScrollObserver from '../scroll-observer/QScrollObserver.js' +import QResizeObserver from '../resize-observer/QResizeObserver.js' + +import ListenersMixin from '../../mixins/listeners.js' + +import { getScrollbarWidth } from '../../utils/scroll.js' +import { mergeSlot } from '../../utils/private/slot.js' +import cache from '../../utils/private/cache.js' + +export default Vue.extend({ + name: 'QLayout', + + mixins: [ ListenersMixin ], + + provide () { + return { + layout: this + } + }, + + props: { + container: Boolean, + view: { + type: String, + default: 'hhh lpr fff', + validator: v => /^(h|l)h(h|r) lpr (f|l)f(f|r)$/.test(v.toLowerCase()) + } + }, + + data () { + return { + // page related + height: this.$q.screen.height, + width: this.container === true ? 0 : this.$q.screen.width, + + // container only prop + containerHeight: 0, + scrollbarWidth: onSSR === true ? 0 : getScrollbarWidth(), + + header: { + size: 0, + offset: 0, + space: false + }, + right: { + size: 300, + offset: 0, + space: false + }, + footer: { + size: 0, + offset: 0, + space: false + }, + left: { + size: 300, + offset: 0, + space: false + }, + + scroll: { + position: 0, + direction: 'down' + } + } + }, + + computed: { + rows () { + const rows = this.view.toLowerCase().split(' ') + return { + top: rows[0].split(''), + middle: rows[1].split(''), + bottom: rows[2].split('') + } + }, + + style () { + return this.container === true + ? null + : { minHeight: this.$q.screen.height + 'px' } + }, + + // used by container only + targetStyle () { + if (this.scrollbarWidth !== 0) { + return { [this.$q.lang.rtl === true ? 'left' : 'right']: `${this.scrollbarWidth}px` } + } + }, + + targetChildStyle () { + if (this.scrollbarWidth !== 0) { + return { + [this.$q.lang.rtl === true ? 'right' : 'left']: 0, + [this.$q.lang.rtl === true ? 'left' : 'right']: `-${this.scrollbarWidth}px`, + width: `calc(100% + ${this.scrollbarWidth}px)` + } + } + }, + + totalWidth () { + return this.width + this.scrollbarWidth + }, + + classes () { + return 'q-layout q-layout--' + + (this.container === true ? 'containerized' : 'standard') + }, + + scrollbarEvtAction () { + return this.container !== true && this.scrollbarWidth > 0 + ? 'add' : 'remove' + } + }, + + watch: { + scrollbarEvtAction: '__updateScrollEvent' + }, + + created () { + this.instances = {} + }, + + mounted () { + this.scrollbarEvtAction === 'add' && this.__updateScrollEvent('add') + }, + + beforeDestroy () { + this.scrollbarEvtAction === 'add' && this.__updateScrollEvent('remove') + }, + + render (h) { + const layout = h('div', { + class: this.classes, + style: this.style, + attrs: { tabindex: -1 }, + on: { ...this.qListeners } + }, mergeSlot([ + h(QScrollObserver, { + key: 'scroll', + on: cache(this, 'scroll', { scroll: this.__onPageScroll }) + }), + + h(QResizeObserver, { + key: 'resizeOut', + on: cache(this, 'resizeOut', { resize: this.__onPageResize }) + }) + ], this, 'default')) + + return this.container === true + ? h('div', { + staticClass: 'q-layout-container overflow-hidden' + }, [ + h(QResizeObserver, { + key: 'resizeIn', + on: cache(this, 'resizeIn', { resize: this.__onContainerResize }) + }), + h('div', { + staticClass: 'absolute-full', + style: this.targetStyle + }, [ + h('div', { + staticClass: 'scroll', + style: this.targetChildStyle + }, [ layout ]) + ]) + ]) + : layout + }, + + methods: { + __animate () { + if (this.timer !== void 0) { + clearTimeout(this.timer) + } + else { + document.body.classList.add('q-body--layout-animate') + } + this.timer = setTimeout(() => { + document.body.classList.remove('q-body--layout-animate') + this.timer = void 0 + }, 150) + }, + + __onPageScroll (data) { + if (this.container === true || document.qScrollPrevented !== true) { + this.scroll = { + position: data.position.top, + direction: data.direction, + directionChanged: data.directionChanged, + inflectionPoint: data.inflectionPoint.top, + delta: data.delta.top + } + + this.qListeners.scroll !== void 0 && this.$emit('scroll', { ...this.scroll }) + } + }, + + __onPageResize ({ height, width }) { + let resized = false + + if (this.height !== height) { + resized = true + this.height = height + if (this.qListeners['scroll-height'] !== void 0) { + this.$emit('scroll-height', height) + } + this.__updateScrollbarWidth() + } + if (this.width !== width) { + resized = true + this.width = width + } + + if (resized === true && this.qListeners.resize !== void 0) { + this.$emit('resize', { height, width }) + } + }, + + __onContainerResize ({ height }) { + if (this.containerHeight !== height) { + this.containerHeight = height + this.__updateScrollbarWidth() + } + }, + + __updateScrollbarWidth () { + if (this.container === true) { + const width = this.height > this.containerHeight + ? getScrollbarWidth() + : 0 + + if (this.scrollbarWidth !== width) { + this.scrollbarWidth = width + } + } + }, + + __updateScrollEvent (action) { + if (this.timerScrollbar !== void 0 && action === 'remove') { + clearTimeout(this.timerScrollbar) + this.__restoreScrollbar() + } + + window[`${action}EventListener`]('resize', this.__hideScrollbar) + }, + + __hideScrollbar () { + if (this.timerScrollbar === void 0) { + const { offsetHeight, classList } = document.body + + // if it has no scrollbar then there's nothing to do + if (offsetHeight > this.$q.screen.height) { + return + } + + classList.add('hide-scrollbar') + } + else { + clearTimeout(this.timerScrollbar) + } + + this.timerScrollbar = setTimeout(this.__restoreScrollbar, 200) + }, + + __restoreScrollbar () { + this.timerScrollbar = void 0 + document.body.classList.remove('hide-scrollbar') + } + } +}) diff --git a/src/components/layout/QLayout.json b/src/components/layout/QLayout.json new file mode 100644 index 00000000000..c933f0ad649 --- /dev/null +++ b/src/components/layout/QLayout.json @@ -0,0 +1,106 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/layout" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "view": { + "type": "String", + "desc": "Defines how your layout components (header/footer/drawer) should be placed on screen; See docs examples", + "default": "hhh lpr fff", + "examples": [ + "hHh lpR fFf" + ], + "category": "content" + }, + + "container": { + "type": "Boolean", + "desc": "Containerize the layout which means it changes the default behavior of expanding to the whole window; Useful (but not limited to) for when using on a QDialog", + "category": "content" + } + }, + + "slots": { + "default": { + "desc": "Suggestion: QHeader, QFooter, QDrawer, QPageContainer" + } + }, + + "events": { + "resize": { + "desc": "Emitted when layout size (height, width) changes", + "params": { + "size": { + "type": "Object", + "desc": "New size", + "definition": { + "height": { + "type": "Number", + "desc": "Layout height", + "examples": [ 575 ] + }, + "width": { + "type": "Number", + "desc": "Layout height", + "examples": [ 575 ] + } + } + } + } + }, + + "scroll": { + "desc": "Emitted when user scrolls within layout", + "params": { + "details": { + "type": "Object", + "desc": "Scroll details", + "definition": { + "position": { + "type": "Number", + "desc": "Scroll offset (from top)", + "examples": [ 575 ] + }, + "direction": { + "type": "String", + "desc": "Direction of scroll", + "values": [ "up", "down" ] + }, + "directionChanged": { + "type": "Boolean", + "desc": "Has scroll direction changed since event was last emitted?" + }, + "inflectionPoint": { + "type": "Number", + "desc": "Last scroll offset where scroll direction has changed", + "examples": [ 575 ], + "addedIn": "v1.16.0" + }, + "delta": { + "type": "Number", + "desc": "Delta distance since event was last emitted", + "examples": [ 120 ], + "addedIn": "v1.16.0" + } + } + } + } + }, + + "scroll-height": { + "desc": "Emitted when the scroll size of layout changes", + "params": { + "height": { + "type": "Number", + "desc": "New scroll height of layout", + "examples": [1442] + } + } + } + } +} diff --git a/src/components/layout/QLayout.sass b/src/components/layout/QLayout.sass new file mode 100644 index 00000000000..ca4b6f179f3 --- /dev/null +++ b/src/components/layout/QLayout.sass @@ -0,0 +1,221 @@ +.q-layout + width: 100% + +.q-layout-container + position: relative + width: 100% + height: 100% + + .q-layout + min-height: 100% + + > div + contain: layout size + contain: layout size style + transform: translateZ(0) + + > div + min-height: 0 + max-height: 100% + +.q-layout__shadow + width: 100% + + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + box-shadow: $layout-shadow + +.q-layout__section--marginal + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + +.q-header + + &--hidden + transform: translateY(-110%) + + &--bordered + border-bottom: $layout-border + + .q-layout__shadow + bottom: -10px + &:after + bottom: 10px + +.q-footer + + &--hidden + transform: translateY(110%) + + &--bordered + border-top: $layout-border + + .q-layout__shadow + top: -10px + + &:after + top: 10px + +.q-header, .q-footer + z-index: $z-marginals + +.q-drawer + position: absolute + top: 0 + bottom: 0 + z-index: $z-side + contain: layout size + contain: layout size style + + &--on-top + z-index: $z-fixed-drawer + + &--left + left: 0 + transform: translateX(-100%) + + &.q-drawer--bordered + border-right: $layout-border + + .q-layout__shadow + left: 10px + right: -10px + + &:after + right: 10px + + &--right + right: 0 + transform: translateX(100%) + + &.q-drawer--bordered + border-left: $layout-border + + .q-layout__shadow + left: -10px + + &:after + left: 10px + + &-container:not(&--mini-animate) &--mini + padding: 0 !important + + .q-item, .q-item__section + text-align: center + justify-content: center + padding-left: 0 + padding-right: 0 + min-width: 0 + + .q-item__label, .q-item__section--main, .q-item__section--side ~ .q-item__section--side + display: none + + &--mini + .q-mini-drawer-hide, .q-expansion-item__content + display: none + + &--mini-animate &__content + overflow-x: hidden + white-space: nowrap + + &--standard + .q-mini-drawer-only + display: none + + &--mobile + .q-mini-drawer-only, .q-mini-drawer-hide + display: none + + &__backdrop + z-index: ($z-fixed-drawer - 1) !important + will-change: opacity + opacity: 0 + background: $backdrop-background + background: var(--q-color-backdrop-background) + + &__opener + z-index: ($z-marginals + 1) + height: 100% + width: 15px + user-select: none + +.q-layout, .q-header, .q-footer, .q-page + position: relative + +.q-page-sticky--shrink + pointer-events: none + + > div + display: inline-block + pointer-events: auto + +body.q-ios-padding + .q-layout--standard .q-header > .q-toolbar:nth-child(1), + .q-layout--standard .q-header > .q-tabs:nth-child(1) .q-tabs-head, + .q-layout--standard .q-drawer--top-padding .q-drawer__content + padding-top: $ios-statusbar-height + min-height: ($toolbar-min-height + $ios-statusbar-height) + padding-top: env(safe-area-inset-top) + min-height: calc(env(safe-area-inset-top) + #{$toolbar-min-height}) + + .q-layout--standard .q-footer > .q-toolbar:last-child, + .q-layout--standard .q-footer > .q-tabs:last-child .q-tabs-head, + .q-layout--standard .q-drawer--top-padding .q-drawer__content + padding-bottom: env(safe-area-inset-bottom) + min-height: calc(env(safe-area-inset-bottom) + #{$toolbar-min-height}) + +.q-body--layout-animate + .q-drawer__backdrop + transition: opacity .12s !important + + .q-drawer + transition: transform .12s, width .12s, top .12s, bottom .12s !important + + .q-layout__section--marginal + transition: transform .12s, left .12s, right .12s !important + + .q-page-container + transition: padding-top .12s, padding-right .12s, padding-bottom .12s, padding-left .12s !important + + .q-page-sticky + transition: transform .12s, left .12s, right .12s, top .12s, bottom .12s !important + +body:not(.q-body--layout-animate) + .q-layout--prevent-focus + visibility: hidden + +.q-body--drawer-toggle + overflow-x: hidden !important + +.q-layout-padding + @media (max-width: $breakpoint-xs-max) + padding: 8px + + @media (min-width: $breakpoint-sm-min) and (max-width: $breakpoint-md-max) + padding: 16px + + @media (min-width: $breakpoint-lg-min) + padding: 24px + +body.body--dark + .q-header, .q-footer, .q-drawer + border-color: $separator-dark-color + +@media (prefers-color-scheme: dark) + body.body--dark-auto + .q-header, .q-footer, .q-drawer + border-color: $separator-dark-color + +body.platform-ios + .q-layout--containerized + // https://github.com/quasarframework/quasar/issues/4127 + // Fixes scroll issues with containerized Layout inside Dialog on iOS; + // QDrawer needs to be forced into fixed position + position: unset !important diff --git a/src/components/layout/QLayout.styl b/src/components/layout/QLayout.styl new file mode 100644 index 00000000000..23dd9ff64b1 --- /dev/null +++ b/src/components/layout/QLayout.styl @@ -0,0 +1,221 @@ +.q-layout + width: 100% + +.q-layout-container + position: relative + width: 100% + height: 100% + + .q-layout + min-height: 100% + + > div + contain: layout size + contain: layout size style + transform: translateZ(0) + + > div + min-height: 0 + max-height: 100% + +.q-layout__shadow + width: 100% + + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + box-shadow: $layout-shadow + +.q-layout__section--marginal + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + +.q-header + + &--hidden + transform: translateY(-110%) + + &--bordered + border-bottom: $layout-border + + .q-layout__shadow + bottom: -10px + &:after + bottom: 10px + +.q-footer + + &--hidden + transform: translateY(110%) + + &--bordered + border-top: $layout-border + + .q-layout__shadow + top: -10px + + &:after + top: 10px + +.q-header, .q-footer + z-index: $z-marginals + +.q-drawer + position: absolute + top: 0 + bottom: 0 + z-index: $z-side + contain: layout size + contain: layout size style + + &--on-top + z-index: $z-fixed-drawer + + &--left + left: 0 + transform: translateX(-100%) + + &.q-drawer--bordered + border-right: $layout-border + + .q-layout__shadow + left: 10px + right: -10px + + &:after + right: 10px + + &--right + right: 0 + transform: translateX(100%) + + &.q-drawer--bordered + border-left: $layout-border + + .q-layout__shadow + left: -10px + + &:after + left: 10px + + &-container:not(&--mini-animate) &--mini + padding: 0 !important + + .q-item, .q-item__section + text-align: center + justify-content: center + padding-left: 0 + padding-right: 0 + min-width: 0 + + .q-item__label, .q-item__section--main, .q-item__section--side ~ .q-item__section--side + display: none + + &--mini + .q-mini-drawer-hide, .q-expansion-item__content + display: none + + &--mini-animate &__content + overflow-x: hidden + white-space: nowrap + + &--standard + .q-mini-drawer-only + display: none + + &--mobile + .q-mini-drawer-only, .q-mini-drawer-hide + display: none + + &__backdrop + z-index: ($z-fixed-drawer - 1) !important + will-change: opacity + opacity: 0 + background: $backdrop-background + background: var(--q-color-backdrop-background) + + &__opener + z-index: ($z-marginals + 1) + height: 100% + width: 15px + user-select: none + +.q-layout, .q-header, .q-footer, .q-page + position: relative + +.q-page-sticky--shrink + pointer-events: none + + > div + display: inline-block + pointer-events: auto + +body.q-ios-padding + .q-layout--standard .q-header > .q-toolbar:nth-child(1), + .q-layout--standard .q-header > .q-tabs:nth-child(1) .q-tabs-head, + .q-layout--standard .q-drawer--top-padding .q-drawer__content + padding-top: $ios-statusbar-height + min-height: ($toolbar-min-height + $ios-statusbar-height) + padding-top: env(safe-area-inset-top) + min-height: "calc(env(safe-area-inset-top) + %s)" % $toolbar-min-height + + .q-layout--standard .q-footer > .q-toolbar:last-child, + .q-layout--standard .q-footer > .q-tabs:last-child .q-tabs-head, + .q-layout--standard .q-drawer--top-padding .q-drawer__content + padding-bottom: env(safe-area-inset-bottom) + min-height: "calc(env(safe-area-inset-bottom) + %s)" % $toolbar-min-height + +.q-body--layout-animate + .q-drawer__backdrop + transition: opacity .12s !important + + .q-drawer + transition: transform .12s, width .12s, top .12s, bottom .12s !important + + .q-layout__section--marginal + transition: transform .12s, left .12s, right .12s !important + + .q-page-container + transition: padding-top .12s, padding-right .12s, padding-bottom .12s, padding-left .12s !important + + .q-page-sticky + transition: transform .12s, left .12s, right .12s, top .12s, bottom .12s !important + +body:not(.q-body--layout-animate) + .q-layout--prevent-focus + visibility: hidden + +.q-body--drawer-toggle + overflow-x: hidden !important + +.q-layout-padding + @media (max-width: $breakpoint-xs-max) + padding: 8px + + @media (min-width: $breakpoint-sm-min) and (max-width: $breakpoint-md-max) + padding: 16px + + @media (min-width: $breakpoint-lg-min) + padding: 24px + +body.body--dark + .q-header, .q-footer, .q-drawer + border-color: $separator-dark-color + +@media (prefers-color-scheme: dark) + body.body--dark-auto + .q-header, .q-footer, .q-drawer + border-color: $separator-dark-color + +body.platform-ios + .q-layout--containerized + // https://github.com/quasarframework/quasar/issues/4127 + // Fixes scroll issues with containerized Layout inside Dialog on iOS; + // QDrawer needs to be forced into fixed position + position: unset !important diff --git a/src/components/layout/index.js b/src/components/layout/index.js new file mode 100644 index 00000000000..ceff5e69b03 --- /dev/null +++ b/src/components/layout/index.js @@ -0,0 +1,5 @@ +import QLayout from './QLayout.js' + +export { + QLayout +} diff --git a/src/components/linear-progress/QLinearProgress.js b/src/components/linear-progress/QLinearProgress.js new file mode 100644 index 00000000000..8972dad0f25 --- /dev/null +++ b/src/components/linear-progress/QLinearProgress.js @@ -0,0 +1,134 @@ +import Vue from 'vue' + +import DarkMixin from '../../mixins/dark.js' +import { getSizeMixin } from '../../mixins/size.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { mergeSlot } from '../../utils/private/slot.js' + +function width (val, reverse, $q) { + return { + transform: reverse === true + ? `translateX(${$q.lang.rtl === true ? '-' : ''}100%) scale3d(${-val},1,1)` + : `scale3d(${val},1,1)` + } +} + +export default Vue.extend({ + name: 'QLinearProgress', + + mixins: [ + ListenersMixin, + DarkMixin, + getSizeMixin({ + xs: 2, + sm: 4, + md: 6, + lg: 10, + xl: 14 + }) + ], + + props: { + value: { + type: Number, + default: 0 + }, + buffer: Number, + + color: String, + trackColor: String, + + reverse: Boolean, + stripe: Boolean, + indeterminate: Boolean, + query: Boolean, + rounded: Boolean, + + instantFeedback: Boolean + }, + + computed: { + motion () { + return this.indeterminate === true || this.query === true + }, + + widthReverse () { + return this.reverse !== this.query + }, + + classes () { + return 'q-linear-progress' + + (this.color !== void 0 ? ` text-${this.color}` : '') + + (this.reverse === true || this.query === true ? ' q-linear-progress--reverse' : '') + + (this.rounded === true ? ' rounded-borders' : '') + }, + + trackStyle () { + return width(this.buffer !== void 0 ? this.buffer : 1, this.widthReverse, this.$q) + }, + + trackClass () { + return `q-linear-progress__track--with${this.instantFeedback === true ? 'out' : ''}-transition` + + ` q-linear-progress__track--${this.darkSuffix}` + + (this.trackColor !== void 0 ? ` bg-${this.trackColor}` : '') + }, + + modelStyle () { + return width(this.motion === true ? 1 : this.value, this.widthReverse, this.$q) + }, + + modelClasses () { + return `q-linear-progress__model--with${this.instantFeedback === true ? 'out' : ''}-transition` + + ` q-linear-progress__model--${this.motion === true ? 'in' : ''}determinate` + }, + + stripeStyle () { + return { width: (this.value * 100) + '%' } + }, + + stripeClass () { + return this.reverse === true ? 'absolute-right' : 'absolute-left' + }, + + attrs () { + return { + role: 'progressbar', + 'aria-valuemin': 0, + 'aria-valuemax': 1, + 'aria-valuenow': this.indeterminate === true ? void 0 : this.value + } + } + }, + + render (h) { + const child = [ + h('div', { + staticClass: 'q-linear-progress__track absolute-full', + style: this.trackStyle, + class: this.trackClass + }), + + h('div', { + staticClass: 'q-linear-progress__model absolute-full', + style: this.modelStyle, + class: this.modelClasses + }) + ] + + this.stripe === true && this.motion === false && child.push( + h('div', { + staticClass: 'q-linear-progress__stripe', + style: this.stripeStyle, + class: this.stripeClass + }) + ) + + return h('div', { + style: this.sizeStyle, + class: this.classes, + attrs: this.attrs, + on: { ...this.qListeners } + }, mergeSlot(child, this, 'default')) + } +}) diff --git a/src/components/linear-progress/QLinearProgress.json b/src/components/linear-progress/QLinearProgress.json new file mode 100644 index 00000000000..8d7b645ca13 --- /dev/null +++ b/src/components/linear-progress/QLinearProgress.json @@ -0,0 +1,82 @@ +{ + "mixins": [ "mixins/size" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/linear-progress" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "type": "Number", + "desc": "Progress value (0.0 < x < 1.0)", + "default": 0, + "examples": [ ":value=\"0.28\"" ], + "category": "model" + }, + + "buffer": { + "type": "Number", + "desc": "Optional buffer value (0.0 < x < 1.0)", + "examples": [ ":buffer=\"0.78\"" ], + "category": "behavior" + }, + + "color": { + "extends": "color" + }, + + "track-color": { + "extends": "color", + "desc": "Color name for component's track from the Quasar Color Palette" + }, + + "dark": { + "extends": "dark" + }, + + "reverse": { + "type": "Boolean", + "desc": "Reverse direction of progress", + "category": "behavior" + }, + + "stripe": { + "type": "Boolean", + "desc": "Draw stripes; For determinate state only (for performance reasons)", + "category": "content" + }, + + "indeterminate": { + "type": "Boolean", + "desc": "Put component into indeterminate mode", + "category": "behavior" + }, + + "query": { + "type": "Boolean", + "desc": "Put component into query mode", + "category": "behavior" + }, + + "rounded": { + "extends": "rounded" + }, + + "instant-feedback": { + "type": "Boolean", + "desc": "No transition when model changes", + "category": "behavior", + "addedIn": "v1.11.2" + } + }, + + "slots": { + "default": { + "desc": "Suggestion: QTooltip" + } + } +} diff --git a/src/components/linear-progress/QLinearProgress.sass b/src/components/linear-progress/QLinearProgress.sass new file mode 100644 index 00000000000..452010e7123 --- /dev/null +++ b/src/components/linear-progress/QLinearProgress.sass @@ -0,0 +1,78 @@ +.q-linear-progress + position: relative + width: 100% + overflow: hidden + font-size: 4px + height: 1em + color: $primary + color: var(--q-color-primary) + transform: scale3d(1, 1, 1) + + &__model, &__track + transform-origin: 0 0 + + &--with-transition + transition: transform .3s + + &--reverse + .q-linear-progress + &__model, &__track + transform-origin: 0 100% + + &__model + + &--determinate + background: currentColor + + &--indeterminate, &--query + transition: none + + &:before, &:after + background: currentColor + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + transform-origin: 0 0 + + &:before + animation: q-linear-progress--indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite + &:after + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1) + animation: q-linear-progress--indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite + animation-delay: 1.15s + + &__track + opacity: .4 + &--light, + &--dark-auto + background: rgba(0,0,0,.26) + &--dark + background: rgba(255,255,255,.6) + + &__stripe + transition: width .3s + background-image: linear-gradient(45deg, rgba(255,255,255,.15) 25%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, rgba(255,255,255,0) 75%, rgba(255,255,255,0)) !important + background-size: 40px 40px !important + +@media (prefers-color-scheme: dark) + .q-linear-progress__track--dark-auto + background: rgba(255,255,255,.6) + +@keyframes q-linear-progress--indeterminate + 0% + transform: translate3d(-35%, 0, 0) scale3d(.35, 1, 1) + 60% + transform: translate3d(100%, 0, 0) scale3d(.9, 1, 1) + 100% + transform: translate3d(100%, 0, 0) scale3d(.9, 1, 1) + +@keyframes q-linear-progress--indeterminate-short + 0% + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1) + 60% + transform: translate3d(107%, 0, 0) scale3d(.01, 1, 1) + 100% + transform: translate3d(107%, 0, 0) scale3d(.01, 1, 1) diff --git a/src/components/linear-progress/QLinearProgress.styl b/src/components/linear-progress/QLinearProgress.styl new file mode 100644 index 00000000000..452010e7123 --- /dev/null +++ b/src/components/linear-progress/QLinearProgress.styl @@ -0,0 +1,78 @@ +.q-linear-progress + position: relative + width: 100% + overflow: hidden + font-size: 4px + height: 1em + color: $primary + color: var(--q-color-primary) + transform: scale3d(1, 1, 1) + + &__model, &__track + transform-origin: 0 0 + + &--with-transition + transition: transform .3s + + &--reverse + .q-linear-progress + &__model, &__track + transform-origin: 0 100% + + &__model + + &--determinate + background: currentColor + + &--indeterminate, &--query + transition: none + + &:before, &:after + background: currentColor + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + transform-origin: 0 0 + + &:before + animation: q-linear-progress--indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite + &:after + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1) + animation: q-linear-progress--indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite + animation-delay: 1.15s + + &__track + opacity: .4 + &--light, + &--dark-auto + background: rgba(0,0,0,.26) + &--dark + background: rgba(255,255,255,.6) + + &__stripe + transition: width .3s + background-image: linear-gradient(45deg, rgba(255,255,255,.15) 25%, rgba(255,255,255,0) 25%, rgba(255,255,255,0) 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, rgba(255,255,255,0) 75%, rgba(255,255,255,0)) !important + background-size: 40px 40px !important + +@media (prefers-color-scheme: dark) + .q-linear-progress__track--dark-auto + background: rgba(255,255,255,.6) + +@keyframes q-linear-progress--indeterminate + 0% + transform: translate3d(-35%, 0, 0) scale3d(.35, 1, 1) + 60% + transform: translate3d(100%, 0, 0) scale3d(.9, 1, 1) + 100% + transform: translate3d(100%, 0, 0) scale3d(.9, 1, 1) + +@keyframes q-linear-progress--indeterminate-short + 0% + transform: translate3d(-101%, 0, 0) scale3d(1, 1, 1) + 60% + transform: translate3d(107%, 0, 0) scale3d(.01, 1, 1) + 100% + transform: translate3d(107%, 0, 0) scale3d(.01, 1, 1) diff --git a/src/components/linear-progress/index.js b/src/components/linear-progress/index.js new file mode 100644 index 00000000000..0d1c3aed2db --- /dev/null +++ b/src/components/linear-progress/index.js @@ -0,0 +1,5 @@ +import QLinearProgress from './QLinearProgress.js' + +export { + QLinearProgress +} diff --git a/src/components/markup-table/QMarkupTable.js b/src/components/markup-table/QMarkupTable.js new file mode 100644 index 00000000000..48db7ee9482 --- /dev/null +++ b/src/components/markup-table/QMarkupTable.js @@ -0,0 +1,47 @@ +import Vue from 'vue' + +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QMarkupTable', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + dense: Boolean, + flat: Boolean, + bordered: Boolean, + square: Boolean, + separator: { + type: String, + default: 'horizontal', + validator: v => ['horizontal', 'vertical', 'cell', 'none'].includes(v) + }, + wrapCells: Boolean + }, + + computed: { + classes () { + return `q-table--${this.separator}-separator` + + ` q-table--${this.darkSuffix} q-table__card--${this.darkSuffix} q-${this.darkSuffix}` + + (this.dense === true ? ' q-table--dense' : '') + + (this.flat === true ? ' q-table--flat' : '') + + (this.bordered === true ? ' q-table--bordered' : '') + + (this.square === true ? ' q-table--square' : '') + + (this.wrapCells === false ? ' q-table--no-wrap' : '') + } + }, + + render (h) { + return h('div', { + staticClass: 'q-markup-table q-table__container q-table__card', + class: this.classes, + on: { ...this.qListeners } + }, [ + h('table', { staticClass: 'q-table' }, slot(this, 'default')) + ]) + } +}) diff --git a/src/components/markup-table/QMarkupTable.json b/src/components/markup-table/QMarkupTable.json new file mode 100644 index 00000000000..8301df3f3ba --- /dev/null +++ b/src/components/markup-table/QMarkupTable.json @@ -0,0 +1,52 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/markup-table" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "dense": { + "extends": "dense" + }, + + "dark": { + "extends": "dark" + }, + + "flat": { + "extends": "flat" + }, + + "bordered": { + "extends": "bordered" + }, + + "square": { + "extends": "square" + }, + + "separator": { + "type": "String", + "desc": "Use a separator/border between rows, columns or all cells", + "default": "horizontal", + "values": [ "horizontal", "vertical", "cell", "none" ], + "examples": [ "cell" ], + "category": "content" + }, + + "wrap-cells": { + "type": "Boolean", + "desc": "Wrap text within table cells", + "category": "content" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/markup-table/index.js b/src/components/markup-table/index.js new file mode 100644 index 00000000000..90f20bcaca5 --- /dev/null +++ b/src/components/markup-table/index.js @@ -0,0 +1,5 @@ +import QMarkupTable from './QMarkupTable.js' + +export { + QMarkupTable +} diff --git a/src/components/menu/ClickOutside.js b/src/components/menu/ClickOutside.js new file mode 100644 index 00000000000..3d76d0555af --- /dev/null +++ b/src/components/menu/ClickOutside.js @@ -0,0 +1,144 @@ +import { client } from '../../plugins/Platform.js' +import { listenOpts } from '../../utils/event.js' +import { getVmOfNode, isVmChildOf } from '../../utils/private/vm.js' + +let timer + +const + { notPassiveCapture, passiveCapture } = listenOpts, + handlers = { + click: [], + focus: [] + } + +function hasModalsAbove (node) { + while ((node = node.nextElementSibling) !== null) { + if (node.classList.contains('q-dialog--modal')) { + return true + } + } + + return false +} + +function execHandlers (list, evt) { + for (let i = list.length - 1; i >= 0; i--) { + if (list[i](evt) === void 0) { + return + } + } +} + +function globalHandler (evt) { + clearTimeout(timer) + + // prevent autofocus on body resulting from blur + if ( + evt.type === 'focusin' && ( + (client.is.ie === true && evt.target === document.body) || + evt.target.hasAttribute('tabindex') === true + ) + ) { + timer = setTimeout(() => { + execHandlers(handlers.focus, evt) + }, client.is.ie === true ? 500 : 200) + } + else { + execHandlers(handlers.click, evt) + } +} + +export default { + name: 'click-outside', + + bind (el, { arg, value }, vnode) { + const vmEl = vnode.componentInstance || vnode.context + + const ctx = { + trigger: value, + toggleEl: arg, + + handler (evt) { + const target = evt.target + + if ( + evt.qClickOutside !== true && + document.body.contains(target) === true && + target.nodeType !== 8 && + // directives that prevent click by using pointer-events none generate click on html element + target !== document.documentElement && + target.classList.contains('no-pointer-events') === false && + hasModalsAbove(el) !== true && + ( + ctx.toggleEl === void 0 || + ctx.toggleEl.contains(target) === false + ) && + ( + target === document.body || + isVmChildOf(getVmOfNode(target), vmEl) === false + ) + ) { + // mark the event as being processed by clickOutside + // used to prevent refocus after menu close + evt.qClickOutside = true + + return ctx.trigger(evt) + } + } + } + + if (el.__qclickoutside) { + el.__qclickoutside_old = el.__qclickoutside + } + + el.__qclickoutside = ctx + + if (handlers.click.length === 0) { + document.addEventListener('mousedown', globalHandler, notPassiveCapture) + document.addEventListener('touchstart', globalHandler, notPassiveCapture) + document.addEventListener('focusin', globalHandler, passiveCapture) + } + + handlers.click.push(ctx.handler) + + ctx.timerFocusin = setTimeout(() => { + handlers.focus.push(ctx.handler) + }, 500) + }, + + update (el, { arg, value, oldValue }) { + const ctx = el.__qclickoutside + + if (ctx !== void 0) { + if (ctx.toggleEl !== arg) { + ctx.toggleEl = arg + } + if (oldValue !== value) { + ctx.trigger = value + } + } + }, + + unbind (el) { + const ctx = el.__qclickoutside_old || el.__qclickoutside + if (ctx !== void 0) { + clearTimeout(ctx.timerFocusin) + + const + indexClick = handlers.click.findIndex(h => h === ctx.handler), + indexFocus = handlers.focus.findIndex(h => h === ctx.handler) + + indexClick > -1 && handlers.click.splice(indexClick, 1) + indexFocus > -1 && handlers.focus.splice(indexFocus, 1) + + if (handlers.click.length === 0) { + clearTimeout(timer) + document.removeEventListener('mousedown', globalHandler, notPassiveCapture) + document.removeEventListener('touchstart', globalHandler, notPassiveCapture) + document.removeEventListener('focusin', globalHandler, passiveCapture) + } + + delete el[el.__qclickoutside_old ? '__qclickoutside_old' : '__qclickoutside'] + } + } +} diff --git a/src/components/menu/QMenu.js b/src/components/menu/QMenu.js new file mode 100644 index 00000000000..146d3651461 --- /dev/null +++ b/src/components/menu/QMenu.js @@ -0,0 +1,372 @@ +import Vue from 'vue' + +import AnchorMixin from '../../mixins/anchor.js' +import TimeoutMixin from '../../mixins/timeout.js' +import ModelToggleMixin from '../../mixins/model-toggle.js' +import DarkMixin from '../../mixins/dark.js' +import PortalMixin, { closePortalMenus } from '../../mixins/portal.js' +import TransitionMixin from '../../mixins/transition.js' +import AttrsMixin from '../../mixins/attrs.js' +import FocusWrapMixin from '../../mixins/focus-wrap.js' + +import ClickOutside from './ClickOutside.js' +import { getScrollTarget } from '../../utils/scroll.js' +import { create, stop, position, stopAndPrevent } from '../../utils/event.js' +import EscapeKey from '../../utils/private/escape-key.js' + +import { + validatePosition, validateOffset, setPosition, parsePosition +} from '../../utils/private/position-engine.js' + +export default Vue.extend({ + name: 'QMenu', + + mixins: [ + AttrsMixin, + DarkMixin, + AnchorMixin, + TimeoutMixin, + ModelToggleMixin, + PortalMixin, + TransitionMixin, + FocusWrapMixin + ], + + directives: { + ClickOutside + }, + + props: { + persistent: Boolean, + autoClose: Boolean, + separateClosePopup: Boolean, + + noRouteDismiss: Boolean, + noRefocus: Boolean, + noFocus: Boolean, + + fit: Boolean, + cover: Boolean, + + square: Boolean, + + anchor: { + type: String, + validator: validatePosition + }, + self: { + type: String, + validator: validatePosition + }, + offset: { + type: Array, + validator: validateOffset + }, + + scrollTarget: { + default: void 0 + }, + + touchPosition: { + type: Boolean, + default: null + }, + + minHeight: { + type: String, + default: null + }, + minWidth: { + type: String, + default: null + }, + + maxHeight: { + type: String, + default: null + }, + maxWidth: { + type: String, + default: null + } + }, + + computed: { + anchorOrigin () { + return parsePosition( + this.anchor || ( + this.cover === true ? 'center middle' : 'bottom start' + ), + this.$q.lang.rtl + ) + }, + + selfOrigin () { + return this.cover === true + ? this.anchorOrigin + : parsePosition(this.self || 'top start', this.$q.lang.rtl) + }, + + menuClass () { + return (this.square === true ? ' q-menu--square' : '') + + ` q-menu--${this.darkSuffix} q-${this.darkSuffix}` + }, + + hideOnRouteChange () { + return this.persistent !== true && + this.noRouteDismiss !== true + }, + + onEvents () { + const on = { + ...this.qListeners, + // stop propagating these events from children + input: stop, + 'popup-show': stop, + 'popup-hide': stop + } + + if (this.autoClose === true) { + on.click = this.__onAutoClose + } + + return on + }, + + attrs () { + return { + tabindex: -1, + role: 'menu', + ...this.qAttrs + } + } + }, + + methods: { + __show (evt) { + // IE can have null document.activeElement + this.__refocusTarget = this.$q.platform.is.desktop === true && this.noRefocus === false && document.activeElement !== null + ? document.activeElement + : void 0 + + EscapeKey.register(this, () => { + if (this.persistent === true) { + this.__focusCyclePortal() + } + else { + this.$emit('escape-key') + this.hide() + } + }) + + this.__showPortal() + this.__configureScrollTarget() + + this.absoluteOffset = void 0 + + if (evt !== void 0 && (this.touchPosition === true || (this.touchPosition !== false && this.contextMenu))) { + const pos = position(evt) + + if (pos.left !== void 0) { + const { top, left } = this.anchorEl.getBoundingClientRect() + this.absoluteOffset = { left: pos.left - left, top: pos.top - top } + } + } + + if (this.unwatch === void 0) { + this.unwatch = this.$watch( + () => this.$q.screen.width + '|' + this.$q.screen.height + '|' + this.self + '|' + this.anchor + '|' + this.$q.lang.rtl, + this.updatePosition + ) + } + + this.$el.dispatchEvent(create('popup-show', { bubbles: true })) + + if (this.noFocus !== true) { + // IE can have null document.activeElement + document.activeElement !== null && document.activeElement.blur() + + this.__registerTick(() => { + this.focus() + this.updatePosition() + }) + } + else { + this.__registerTick(() => { + this.updatePosition() + }) + } + + this.__registerTimeout(() => { + // required in order to avoid the "double-tap needed" issue + if (this.$q.platform.is.ios === true) { + // if auto-close, then this click should + // not close the menu + this.__avoidAutoClose = this.autoClose + this.__portal.$el.click() + } + + this.$emit('show', evt) + }, 300) + }, + + __hide (evt) { + this.__removeTick() + this.__anchorCleanup(true) + + // check null for IE + if ( + // menu was hidden from code or ESC plugin + evt === void 0 || + // menu was not closed from a mouse or touch clickOutside + evt.qClickOutside !== true + ) { + this.__focusCyclePortal(true) + } + + this.$el.dispatchEvent(create('popup-hide', { bubbles: true })) + + // should __removeTimeout() if this gets removed + this.__registerTimeout(() => { + if (this.showing !== true) { + this.__hidePortal() + this.$emit('hide', evt) + } + }, 300) + }, + + __anchorCleanup (hiding) { + this.absoluteOffset = void 0 + + if (this.unwatch !== void 0) { + this.unwatch() + this.unwatch = void 0 + } + + if (hiding === true || this.showing === true) { + EscapeKey.pop(this) + this.__unconfigureScrollTarget() + } + }, + + __unconfigureScrollTarget () { + this.__changeScrollEvent() + }, + + __configureScrollTarget () { + if (this.showing && (this.anchorEl !== void 0 || this.scrollTarget !== void 0)) { + this.__changeScrollEvent(this.updatePosition, getScrollTarget(this.anchorEl, this.scrollTarget)) + } + }, + + __onAutoClose (e) { + // if auto-close, then the ios double-tap fix which + // issues a click should not close the menu + if (this.__avoidAutoClose !== true) { + closePortalMenus(this, e) + this.qListeners.click !== void 0 && this.$emit('click', e) + } + else { + this.__avoidAutoClose = false + } + }, + + updatePosition () { + if (this.anchorEl === void 0 || this.__portal === void 0) { + return + } + + const el = this.__portal.$el + + if (el.nodeType === 8) { // IE replaces the comment with delay + setTimeout(this.updatePosition, 25) + return + } + + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition) + this.settingPosition = requestAnimationFrame(() => { + const touchPosition = this.touchPosition === true || (this.touchPosition !== false && this.contextMenu) + + setPosition({ + el, + offset: this.offset, + anchorEl: this.anchorEl, + anchorOrigin: this.anchorOrigin, + selfOrigin: this.selfOrigin, + absoluteOffset: this.absoluteOffset, + fit: touchPosition !== true && this.fit === true, + cover: touchPosition !== true && this.cover === true, + minHeight: this.minHeight, + minWidth: this.minWidth, + maxHeight: this.maxHeight, + maxWidth: this.maxWidth, + rtl: this.$q.lang.rtl + }) + this.settingPosition = void 0 + }) + }, + + __onClickOutside (e) { + if (this.persistent !== true && this.showing === true) { + const targetClassList = e.target.classList + + closePortalMenus(this, e) + if ( + // always prevent touch event + e.type === 'touchstart' || + // prevent click if it's on a dialog backdrop + targetClassList.contains('q-dialog__backdrop') === true + ) { + stopAndPrevent(e) + this.$q.interaction.preventClick(e.target, true) + } + return true + } + }, + + __renderPortal (h) { + return h('transition', { + props: this.transitionProps + }, [ + this.showing === true ? h('div', { + class: 'q-menu__container column no-pointer-events', + directives: [{ + name: 'click-outside', + value: this.__onClickOutside, + arg: this.anchorEl + }] + }, [ + h('div', { + ref: 'inner', + staticClass: 'q-menu scroll all-pointer-events' + this.menuClass, + class: this.contentClass, + style: this.contentStyle, + attrs: this.attrs, + on: this.onEvents + }, this.__getFocusWrappedContent('default')) + ]) : null + ]) + } + }, + + created () { + this.__useTick('__registerTick', '__removeTick') + this.__useTimeout('__registerTimeout') + }, + + mounted () { + this.__processModelChange(this.value) + }, + + beforeDestroy () { + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition) + + // When the menu is destroyed while open we can only emit the event on anchorEl + if (this.showing === true && this.anchorEl !== void 0) { + this.anchorEl.dispatchEvent( + create('popup-hide', { bubbles: true }) + ) + } + this.__refocusTarget = void 0 + } +}) diff --git a/src/components/menu/QMenu.json b/src/components/menu/QMenu.json new file mode 100644 index 00000000000..73a6df647e4 --- /dev/null +++ b/src/components/menu/QMenu.json @@ -0,0 +1,184 @@ +{ + "mixins": [ "mixins/model-toggle", "mixins/portal", "mixins/anchor" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/menu" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "dark": { + "extends": "dark", + "addedIn": "v1.3" + }, + + "fit": { + "type": "Boolean", + "desc": "Allows the menu to match at least the full width of its target", + "category": "position" + }, + + "cover": { + "type": "Boolean", + "desc": "Allows the menu to cover its target. When used, the 'self' and 'fit' props are no longer effective", + "category": "position" + }, + + "anchor": { + "type": "String", + "desc": "Two values setting the starting position or anchor point of the menu relative to its target", + "values": [ + "top left", "top middle", "top right", "top start", "top end", + "center left", "center middle", "center right", "center start", "center end", + "bottom left", "bottom middle", "bottom right", "bottom start", "bottom end" + ], + "examples": [ "top left", "bottom right" ], + "category": "position" + }, + + "self": { + "type": "String", + "desc": "Two values setting the menu's own position relative to its target", + "values": [ + "top left", "top middle", "top right", "top start", "top end", + "center left", "center middle", "center right", "center start", "center end", + "bottom left", "bottom middle", "bottom right", "bottom start", "bottom end" + ], + "examples": [ "top left", "bottom right" ], + "category": "position" + }, + + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the menu horizontally and vertically in pixels", + "examples": [ "[8, 8]", "[5, 10]" ], + "category": "position" + }, + + "scroll-target": { + "extends": "scroll-target" + }, + + "touch-position": { + "type": "Boolean", + "desc": "Allows for the target position to be set by the mouse position, when the target of the menu is either clicked or touched", + "category": "behavior" + }, + + "persistent": { + "type": "Boolean", + "desc": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key", + "category": "behavior" + }, + + "no-route-dismiss": { + "type": "Boolean", + "desc": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set", + "category": "behavior", + "addedIn": "v1.13" + }, + + "auto-close": { + "type": "Boolean", + "desc": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap", + "category": "behavior" + }, + + "separate-close-popup": { + "type": "Boolean", + "desc": "Separate from parent menu, marking it as a separate closing point for v-close-popup (without this, chained menus close all together)", + "category": "behavior", + "addedIn": "v1.1" + }, + + "square": { + "type": "Boolean", + "desc": "Forces content to have squared borders", + "category": "style" + }, + + "no-refocus": { + "type": "Boolean", + "desc": "(Accessibility) When Menu gets hidden, do not refocus on the DOM element that previously had focus", + "category": "behavior" + }, + + "no-focus": { + "type": "Boolean", + "desc": "(Accessibility) When Menu gets shown, do not switch focus on it", + "category": "behavior" + }, + + "min-height": { + "extends": "size", + "desc": "The minimum height of the menu; Size in CSS units, including unit name", + "category": "style", + "addedIn": "v1.15.5" + }, + + "min-width": { + "extends": "size", + "desc": "The minimum width of the menu; Size in CSS units, including unit name", + "category": "style", + "addedIn": "v1.15.5" + }, + + "max-height": { + "extends": "size", + "desc": "The maximum height of the menu; Size in CSS units, including unit name", + "category": "style" + }, + + "max-width": { + "extends": "size", + "desc": "The maximum width of the menu; Size in CSS units, including unit name", + "category": "style" + }, + + "transition-show": { + "extends": "transition", + "default": "fade", + "category": "behavior" + }, + + "transition-hide": { + "extends": "transition", + "default": "fade", + "category": "behavior" + } + }, + + "slots": { + "default": { + "extends": "default" + } + }, + + "events": { + "escape-key": { + "desc": "Emitted when ESC key is pressed; Does not get emitted if Menu is 'persistent'" + } + }, + + "methods": { + "updatePosition": { + "desc": "There are some custom scenarios for which Quasar cannot automatically reposition the menu without significant performance drawbacks so the optimal solution is for you to call this method when you need it" + }, + + "focus": { + "desc": "Focus menu; if you have content with autofocus attribute, it will directly focus it", + "params": { + "selector": { + "type": "String", + "required": false, + "desc": "Optional CSS selector to override default focusable element - use '' to focus first focusable element instead of the one with autofocus", + "examples": [ "[tabindex]:not([tabindex=\"-1\"])" ], + "addedIn": "v1.18.9" + } + } + } + } +} diff --git a/src/components/menu/QMenu.sass b/src/components/menu/QMenu.sass new file mode 100644 index 00000000000..a900cf169fb --- /dev/null +++ b/src/components/menu/QMenu.sass @@ -0,0 +1,18 @@ +.q-menu + display: inline-block + max-width: $menu-max-width + max-height: 65vh + outline: 0 + border-radius: $generic-border-radius + box-shadow: $menu-box-shadow + background: $menu-background + opacity: 0 + + &__container + position: fixed + z-index: $z-menu + contain: layout + contain: layout style + + &--square + border-radius: 0 diff --git a/src/components/menu/QMenu.styl b/src/components/menu/QMenu.styl new file mode 100644 index 00000000000..a900cf169fb --- /dev/null +++ b/src/components/menu/QMenu.styl @@ -0,0 +1,18 @@ +.q-menu + display: inline-block + max-width: $menu-max-width + max-height: 65vh + outline: 0 + border-radius: $generic-border-radius + box-shadow: $menu-box-shadow + background: $menu-background + opacity: 0 + + &__container + position: fixed + z-index: $z-menu + contain: layout + contain: layout style + + &--square + border-radius: 0 diff --git a/src/components/menu/index.js b/src/components/menu/index.js new file mode 100644 index 00000000000..ed113fb5e34 --- /dev/null +++ b/src/components/menu/index.js @@ -0,0 +1,5 @@ +import QMenu from './QMenu.js' + +export { + QMenu +} diff --git a/src/components/no-ssr/QNoSsr.js b/src/components/no-ssr/QNoSsr.js new file mode 100644 index 00000000000..2cab50135d9 --- /dev/null +++ b/src/components/no-ssr/QNoSsr.js @@ -0,0 +1,45 @@ +import Vue from 'vue' + +import CanRenderMixin from '../../mixins/can-render.js' +import TagMixin from '../../mixins/tag.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QNoSsr', + + mixins: [ CanRenderMixin, TagMixin, ListenersMixin ], + + props: { + placeholder: String + }, + + render (h) { + const data = { + on: { ...this.qListeners } + } + + if (this.canRender === true) { + const node = slot(this, 'default') + return node === void 0 + ? node + : (node.length > 1 ? h(this.tag, data, node) : node[0]) + } + + data.staticClass = 'q-no-ssr-placeholder' + + const node = slot(this, 'placeholder') + if (node !== void 0) { + return node.length > 1 + ? h(this.tag, data, node) + : node[0] + } + + if (this.placeholder !== void 0) { + return h(this.tag, data, [ + this.placeholder + ]) + } + } +}) diff --git a/src/components/no-ssr/QNoSsr.json b/src/components/no-ssr/QNoSsr.json new file mode 100644 index 00000000000..3bd627e7cc6 --- /dev/null +++ b/src/components/no-ssr/QNoSsr.json @@ -0,0 +1,34 @@ +{ + "mixins": [ "mixins/tag" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/no-ssr" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "tag": { + "examples": [ "div", "span", "blockquote" ] + }, + + "placeholder": { + "type": "String", + "desc": "Text to display on server-side render (unless using 'placeholder' slot)", + "examples": [ "This is server-side only" ], + "category": "content" + } + }, + + "slots": { + "default": { + "desc": "Default slot is used to render content on client-side" + }, + + "placeholder": { + "desc": "Slot used as placeholder on server-side render, which gets replaced by the default slot on client-side; overrides 'placeholder' prop" + } + } +} diff --git a/src/components/no-ssr/index.js b/src/components/no-ssr/index.js new file mode 100644 index 00000000000..4b01c02d9ee --- /dev/null +++ b/src/components/no-ssr/index.js @@ -0,0 +1,5 @@ +import QNoSsr from './QNoSsr.js' + +export { + QNoSsr +} diff --git a/src/components/option-group/QOptionGroup.js b/src/components/option-group/QOptionGroup.js new file mode 100644 index 00000000000..d020335d9c5 --- /dev/null +++ b/src/components/option-group/QOptionGroup.js @@ -0,0 +1,145 @@ +import Vue from 'vue' + +import QRadio from '../radio/QRadio.js' +import QCheckbox from '../checkbox/QCheckbox.js' +import QToggle from '../toggle/QToggle.js' + +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' + +import cache from '../../utils/private/cache.js' + +const components = { + radio: QRadio, + checkbox: QCheckbox, + toggle: QToggle +} + +const typeValues = Object.keys(components) + +export default Vue.extend({ + name: 'QOptionGroup', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + value: { + required: true + }, + options: { + type: Array, + validator (opts) { + return opts.every(opt => 'value' in opt && 'label' in opt) + } + }, + + name: String, + + type: { + default: 'radio', + validator: v => typeValues.includes(v) + }, + + color: String, + keepColor: Boolean, + dense: Boolean, + + size: String, + + leftLabel: Boolean, + inline: Boolean, + disable: Boolean + }, + + computed: { + component () { + return components[this.type] + }, + + model () { + return Array.isArray(this.value) + ? this.value.slice() + : this.value + }, + + classes () { + return 'q-option-group q-gutter-x-sm' + + (this.inline === true ? ' q-option-group--inline' : '') + }, + + attrs () { + if (this.type === 'radio') { + const attrs = { + role: 'radiogroup' + } + + if (this.disable === true) { + attrs['aria-disabled'] = 'true' + } + + return attrs + } + + return { role: 'group' } + } + }, + + methods: { + __update (value) { + this.$emit('input', value) + } + }, + + created () { + const isArray = Array.isArray(this.value) + + if (this.type === 'radio') { + if (isArray) { + console.error('q-option-group: model should not be array') + } + } + else if (isArray === false) { + console.error('q-option-group: model should be array in your case') + } + }, + + render (h) { + return h('div', { + class: this.classes, + attrs: this.attrs, + on: { ...this.qListeners } + }, this.options.map((opt, i) => { + const child = this.$scopedSlots[ 'label-' + i ] !== void 0 + ? this.$scopedSlots[ 'label-' + i ](opt) + : ( + this.$scopedSlots.label !== void 0 + ? this.$scopedSlots.label(opt) + : void 0 + ) + + return h('div', [ + h(this.component, { + key: 'inp', + props: { + value: this.value, + val: opt.value, + name: opt.name === void 0 ? this.name : opt.name, + disable: this.disable || opt.disable, + label: child === void 0 ? opt.label : void 0, + leftLabel: opt.leftLabel === void 0 ? this.leftLabel : opt.leftLabel, + color: opt.color === void 0 ? this.color : opt.color, + checkedIcon: opt.checkedIcon, + uncheckedIcon: opt.uncheckedIcon, + dark: opt.dark === void 0 ? this.dark : opt.dark, + size: opt.size === void 0 ? this.size : opt.size, + dense: this.dense, + keepColor: opt.keepColor === void 0 ? this.keepColor : opt.keepColor + }, + on: cache(this, 'inp', { + input: this.__update + }) + }, child) + ]) + })) + } +}) diff --git a/src/components/option-group/QOptionGroup.json b/src/components/option-group/QOptionGroup.json new file mode 100644 index 00000000000..49b508acbd6 --- /dev/null +++ b/src/components/option-group/QOptionGroup.json @@ -0,0 +1,139 @@ +{ + "mixins": [ "mixins/size" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/option-group" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "extends": "value", + "type": "Any", + "examples": [ "v-model=\"group\"" ], + "category": "model" + }, + + "options": { + "type": "Array", + "desc": "Array of objects with value, label, and disable (optional) props. The binary components will be created according to this array; Props from QToggle, QCheckbox or QRadio can also be added as key/value pairs to control the components singularly", + "definition": { + "label": { + "type": "String", + "desc": "Label to display along the component", + "required": true, + "examples": [ "Option 1", "Option 2", "Option 3" ] + }, + "value": { + "type": "Any", + "desc": "Value of the option that will be used by the component model", + "required": true, + "examples": [ "op1", "op2", "op3" ] + }, + "disable": { + "type": "Boolean", + "desc": "If true, the option will be disabled" + }, + "...props": { + "type": "Any", + "desc": "Any other props from QToggle, QCheckbox, or QRadio", + "examples": [ "val=\"car\"", ":true-value=\"trueValue\"", "checked-icon=\"visibility\"" ] + } + }, + "examples": [ + ":options=\"[ { label: 'Option 1', value: 'op1' }, { label: 'Option 2', value: 'op2' }, { label: 'Option 3', value: 'op3', disable: true } ]\"" + ], + "category": "model" + }, + + "name": { + "type": "String", + "desc": "Used to specify the name of the controls; Useful if dealing with forms submitted directly to a URL", + "examples": [ "car_id" ], + "category": "behavior", + "addedIn": "v1.9" + }, + + "type": { + "type": "String", + "desc": "The type of input component to be used", + "values": [ "radio", "checkbox", "toggle" ], + "default": "radio", + "examples": [ "checkbox" ], + "category": "content" + }, + + "color": { + "extends": "color" + }, + + "keep-color": { + "type": "Boolean", + "desc": "Should the color (if specified any) be kept when input components are unticked?", + "category": "behavior" + }, + + "size": { + "addedIn": "v1.8" + }, + + "dark": { + "extends": "dark" + }, + + "dense": { + "extends": "dense" + }, + + "left-label": { + "type": "Boolean", + "desc": "Label (if any specified) should be displayed on the left side of the input components", + "category": "content" + }, + + "inline": { + "type": "Boolean", + "desc": "Show input components as inline-block rather than each having their own row", + "category": "content" + }, + + "disable": { + "extends": "disable" + } + }, + + "scopedSlots": { + "label": { + "desc": "Generic slot for all labels", + "scope": { + "opt": { + "type": "Object", + "desc": "The corresponding option entry from the 'options' prop", + "__exemption": [ "examples" ] + } + }, + "addedIn": "v1.17" + }, + + "label-[name]": { + "desc": "Slot to define the specific label for the option at '[name]' where name is a 0-based index; Overrides the generic 'label' slot if used", + "scope": { + "opt": { + "type": "Object", + "desc": "The corresponding option entry from the 'options' prop", + "__exemption": [ "examples" ] + } + }, + "addedIn": "v1.17" + } + }, + + "events": { + "input": { + "extends": "input" + } + } +} diff --git a/src/components/option-group/QOptionGroup.sass b/src/components/option-group/QOptionGroup.sass new file mode 100644 index 00000000000..e137eb414e0 --- /dev/null +++ b/src/components/option-group/QOptionGroup.sass @@ -0,0 +1,5 @@ +.q-option-group + + &--inline + > div + display: inline-block diff --git a/src/components/option-group/QOptionGroup.styl b/src/components/option-group/QOptionGroup.styl new file mode 100644 index 00000000000..e137eb414e0 --- /dev/null +++ b/src/components/option-group/QOptionGroup.styl @@ -0,0 +1,5 @@ +.q-option-group + + &--inline + > div + display: inline-block diff --git a/src/components/option-group/index.js b/src/components/option-group/index.js new file mode 100644 index 00000000000..88a12b2b72d --- /dev/null +++ b/src/components/option-group/index.js @@ -0,0 +1,5 @@ +import QOptionGroup from './QOptionGroup.js' + +export { + QOptionGroup +} diff --git a/src/components/page-scroller/QPageScroller.js b/src/components/page-scroller/QPageScroller.js new file mode 100644 index 00000000000..0f1ca8c7ae1 --- /dev/null +++ b/src/components/page-scroller/QPageScroller.js @@ -0,0 +1,126 @@ +import Vue from 'vue' + +import QPageSticky from '../page-sticky/QPageSticky.js' +import { getScrollTarget, setScrollPosition } from '../../utils/scroll.js' + +export default Vue.extend({ + name: 'QPageScroller', + + mixins: [ QPageSticky ], + + props: { + scrollOffset: { + type: Number, + default: 1000 + }, + + reverse: Boolean, + + duration: { + type: Number, + default: 300 + }, + + offset: { + default: () => [18, 18] + } + }, + + inject: { + layout: { + default () { + console.error('QPageScroller needs to be used within a QLayout') + } + } + }, + + data () { + return { + showing: this.__isVisible() + } + }, + + computed: { + scrollHeight () { + return this.layout.height - ( + this.layout.container === true + ? this.layout.containerHeight + : this.$q.screen.height + ) + }, + + onEvents () { + return { + ...this.qListeners, + click: this.__onClick + } + } + }, + + watch: { + 'layout.scroll.position' () { + this.__updateVisibility() + }, + + reverse: { + handler (val) { + if (val === true) { + if (this.heightWatcher === void 0) { + this.heightWatcher = this.$watch('scrollHeight', this.__updateVisibility) + } + } + else if (this.heightWatcher !== void 0) { + this.__cleanup() + } + }, + immediate: true + } + }, + + methods: { + __isVisible () { + return this.reverse === true + ? this.scrollHeight - this.layout.scroll.position > this.scrollOffset + : this.layout.scroll.position > this.scrollOffset + }, + + __onClick (e) { + const target = getScrollTarget(this.layout.container === true ? this.$el : this.layout.$el) + setScrollPosition(target, this.reverse === true ? this.layout.height : 0, this.duration) + this.$emit('click', e) + }, + + __updateVisibility () { + const newVal = this.__isVisible() + if (this.showing !== newVal) { + this.showing = newVal + } + }, + + __cleanup () { + this.heightWatcher() + this.heightWatcher = void 0 + } + }, + + render (h) { + return h('transition', { + props: { name: 'q-transition--fade' } + }, + this.showing === true + ? [ + h('div', { + staticClass: 'q-page-scroller', + on: this.onEvents + }, [ + QPageSticky.options.render.call(this, h) + ]) + ] + : null + ) + }, + + beforeDestroy () { + this.heightWatcher !== void 0 && this.__cleanup() + } +}) diff --git a/src/components/page-scroller/QPageScroller.json b/src/components/page-scroller/QPageScroller.json new file mode 100644 index 00000000000..708aa666862 --- /dev/null +++ b/src/components/page-scroller/QPageScroller.json @@ -0,0 +1,41 @@ +{ + "mixins": [ "components/page-sticky/QPageSticky" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/page-scroller" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "scroll-offset": { + "type": "Number", + "desc": "Scroll offset (in pixels) from which point the component is shown on page; Measured from the top of the page (or from the bottom if in 'reverse' mode)", + "default": 1000, + "examples": [ 550 ], + "category": "behavior" + }, + + "reverse": { + "type": "Boolean", + "desc": "Work in reverse (shows when scrolling to the top of the page and scrolls to bottom when triggered)", + "category": "behavior", + "addedIn": "v1.9" + }, + + "duration": { + "type": "Number", + "desc": "Duration (in milliseconds) of the scrolling until it reaches its target", + "default": 300, + "examples": [ 500 ], + "category": "behavior" + }, + + "offset": { + "default": [ 18, 18 ], + "category": "content" + } + } +} diff --git a/src/components/page-scroller/index.js b/src/components/page-scroller/index.js new file mode 100644 index 00000000000..cbe36fd319a --- /dev/null +++ b/src/components/page-scroller/index.js @@ -0,0 +1,5 @@ +import QPageScroller from './QPageScroller.js' + +export { + QPageScroller +} diff --git a/src/components/page-sticky/QPageSticky.js b/src/components/page-sticky/QPageSticky.js new file mode 100644 index 00000000000..07940abcab2 --- /dev/null +++ b/src/components/page-sticky/QPageSticky.js @@ -0,0 +1,135 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QPageSticky', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default () { + console.error('QPageSticky needs to be child of QLayout') + } + } + }, + + props: { + position: { + type: String, + default: 'bottom-right', + validator: v => [ + 'top-right', 'top-left', + 'bottom-right', 'bottom-left', + 'top', 'right', 'bottom', 'left' + ].includes(v) + }, + offset: { + type: Array, + validator: v => v.length === 2 + }, + expand: Boolean + }, + + computed: { + attach () { + const pos = this.position + + return { + top: pos.indexOf('top') > -1, + right: pos.indexOf('right') > -1, + bottom: pos.indexOf('bottom') > -1, + left: pos.indexOf('left') > -1, + vertical: pos === 'top' || pos === 'bottom', + horizontal: pos === 'left' || pos === 'right' + } + }, + + top () { + return this.layout.header.offset + }, + + right () { + return this.layout.right.offset + }, + + bottom () { + return this.layout.footer.offset + }, + + left () { + return this.layout.left.offset + }, + + style () { + let + posX = 0, + posY = 0 + + const + attach = this.attach, + dir = this.$q.lang.rtl === true ? -1 : 1 + + if (attach.top === true && this.top !== 0) { + posY = `${this.top}px` + } + else if (attach.bottom === true && this.bottom !== 0) { + posY = `${-this.bottom}px` + } + + if (attach.left === true && this.left !== 0) { + posX = `${dir * this.left}px` + } + else if (attach.right === true && this.right !== 0) { + posX = `${-dir * this.right}px` + } + + const css = { transform: `translate(${posX}, ${posY})` } + + if (this.offset) { + css.margin = `${this.offset[1]}px ${this.offset[0]}px` + } + + if (attach.vertical === true) { + if (this.left !== 0) { + css[this.$q.lang.rtl === true ? 'right' : 'left'] = `${this.left}px` + } + if (this.right !== 0) { + css[this.$q.lang.rtl === true ? 'left' : 'right'] = `${this.right}px` + } + } + else if (attach.horizontal === true) { + if (this.top !== 0) { + css.top = `${this.top}px` + } + if (this.bottom !== 0) { + css.bottom = `${this.bottom}px` + } + } + + return css + }, + + classes () { + return `fixed-${this.position} q-page-sticky--${this.expand === true ? 'expand' : 'shrink'}` + } + }, + + render (h) { + const content = slot(this, 'default') + + return h('div', { + staticClass: 'q-page-sticky row flex-center', + class: this.classes, + style: this.style, + on: { ...this.qListeners } + }, + this.expand === true + ? content + : [ h('div', content) ] + ) + } +}) diff --git a/src/components/page-sticky/QPageSticky.json b/src/components/page-sticky/QPageSticky.json new file mode 100644 index 00000000000..abe6975ecbc --- /dev/null +++ b/src/components/page-sticky/QPageSticky.json @@ -0,0 +1,43 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/page-sticky" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "position": { + "type": "String", + "desc": "Page side/corner to stick to", + "default": "bottom-right", + "values": [ + "top-right", "top-left", + "bottom-right", "bottom-left", + "top", "right", "bottom", "left" + ], + "examples": [ "top-right" ], + "category": "position" + }, + + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the component horizontally and vertically in pixels", + "examples": [ "[8, 8]", "[5, 10]" ], + "category": "position" + }, + + "expand": { + "type": "Boolean", + "desc": "By default the component shrinks to content's size; By using this prop you make the component fully expand horizontally or vertically, based on 'position' prop", + "category": "content" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/page-sticky/index.js b/src/components/page-sticky/index.js new file mode 100644 index 00000000000..048b4cefae8 --- /dev/null +++ b/src/components/page-sticky/index.js @@ -0,0 +1,5 @@ +import QPageSticky from './QPageSticky.js' + +export { + QPageSticky +} diff --git a/src/components/page/QPage.js b/src/components/page/QPage.js new file mode 100644 index 00000000000..5cf4ca037c5 --- /dev/null +++ b/src/components/page/QPage.js @@ -0,0 +1,66 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QPage', + + mixins: [ ListenersMixin ], + + inject: { + pageContainer: { + default () { + console.error('QPage needs to be child of QPageContainer') + } + }, + layout: {} + }, + + props: { + padding: Boolean, + styleFn: Function + }, + + computed: { + style () { + const offset = + (this.layout.header.space === true ? this.layout.header.size : 0) + + (this.layout.footer.space === true ? this.layout.footer.size : 0) + + if (typeof this.styleFn === 'function') { + const height = this.layout.container === true + ? this.layout.containerHeight + : this.$q.screen.height + + return this.styleFn(offset, height) + } + + return { + minHeight: this.layout.container === true + ? (this.layout.containerHeight - offset) + 'px' + : ( + this.$q.screen.height === 0 + ? `calc(100vh - ${offset}px)` + : (this.$q.screen.height - offset) + 'px' + ) + } + }, + + classes () { + if (this.padding === true) { + return 'q-layout-padding' + } + } + }, + + render (h) { + return h('main', { + staticClass: 'q-page', + style: this.style, + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/page/QPage.json b/src/components/page/QPage.json new file mode 100644 index 00000000000..e72bea60d4d --- /dev/null +++ b/src/components/page/QPage.json @@ -0,0 +1,49 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/page" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "padding": { + "type": "Boolean", + "desc": "Applies a default responsive page padding", + "category": "content" + }, + + "style-fn": { + "type": "Function", + "desc": "Override default CSS style applied to the component (sets minHeight); Function(offset: Number) => CSS props/value: Object; For best performance, reference it from your scope and do not define it inline", + "params": { + "offset": { + "type": "Number", + "desc": "Header + Footer height (in pixels)", + "examples": [ 152 ] + }, + "height": { + "type": "Number", + "desc": "Value in pixels of container height (if containerized) or window height otherwise", + "examples": [ 1200 ], + "addedIn": "v1.7.4" + } + }, + "returns": { + "type": "Object", + "desc": "Object with CSS properties to apply to Page DOM element", + "__exemption": [ "examples" ] + }, + "default": "(see source code)", + "examples": [ "(see source code)" ], + "category": "style" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/page/QPageContainer.js b/src/components/page/QPageContainer.js new file mode 100644 index 00000000000..72c4cd28d4c --- /dev/null +++ b/src/components/page/QPageContainer.js @@ -0,0 +1,52 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QPageContainer', + + mixins: [ ListenersMixin ], + + inject: { + layout: { + default () { + console.error('QPageContainer needs to be child of QLayout') + } + } + }, + + provide: { + pageContainer: true + }, + + computed: { + style () { + const css = {} + + if (this.layout.header.space === true) { + css.paddingTop = `${this.layout.header.size}px` + } + if (this.layout.right.space === true) { + css[`padding${this.$q.lang.rtl === true ? 'Left' : 'Right'}`] = `${this.layout.right.size}px` + } + if (this.layout.footer.space === true) { + css.paddingBottom = `${this.layout.footer.size}px` + } + if (this.layout.left.space === true) { + css[`padding${this.$q.lang.rtl === true ? 'Right' : 'Left'}`] = `${this.layout.left.size}px` + } + + return css + } + }, + + render (h) { + return h('div', { + staticClass: 'q-page-container', + style: this.style, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/page/QPageContainer.json b/src/components/page/QPageContainer.json new file mode 100644 index 00000000000..7809bfcdfee --- /dev/null +++ b/src/components/page/QPageContainer.json @@ -0,0 +1,15 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/layout/page" + }, + + "behavior": { + "$listeners": true + }, + + "slots": { + "default": { + "desc": "Encapsulates a QPage (either directly or through )" + } + } +} diff --git a/src/components/page/index.js b/src/components/page/index.js new file mode 100644 index 00000000000..fea51eabf95 --- /dev/null +++ b/src/components/page/index.js @@ -0,0 +1,7 @@ +import QPage from './QPage.js' +import QPageContainer from './QPageContainer.js' + +export { + QPage, + QPageContainer +} diff --git a/src/components/pagination/QPagination.js b/src/components/pagination/QPagination.js new file mode 100644 index 00000000000..4cf66b9092c --- /dev/null +++ b/src/components/pagination/QPagination.js @@ -0,0 +1,507 @@ +import Vue from 'vue' + +import QBtn from '../btn/QBtn.js' +import QInput from '../input/QInput.js' + +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' +import { btnDesignOptions, btnPadding, getBtnDesign } from '../../mixins/btn.js' + +import { stop } from '../../utils/event.js' +import { between } from '../../utils/format.js' +import { isKeyCode } from '../../utils/private/key-composition.js' +import cache from '../../utils/private/cache.js' + +function getBool (val, otherwise) { + return [ true, false ].includes(val) + ? val + : otherwise +} + +export default Vue.extend({ + name: 'QPagination', + + mixins: [ DarkMixin, ListenersMixin ], + + props: { + value: { + type: Number, + required: true + }, + min: { + type: [ Number, String ], + default: 1 + }, + max: { + type: [ Number, String ], + required: true + }, + maxPages: { + type: [ Number, String ], + default: 0, + validator: v => ( + (typeof v === 'string' ? parseInt(v, 10) : v) >= 0 + ) + }, + + inputStyle: [Array, String, Object], + inputClass: [Array, String, Object], + + size: String, + + disable: Boolean, + + input: Boolean, + + iconPrev: String, + iconNext: String, + iconFirst: String, + iconLast: String, + + toFn: Function, + + boundaryLinks: { + type: Boolean, + default: null + }, + boundaryNumbers: { + type: Boolean, + default: null + }, + directionLinks: { + type: Boolean, + default: null + }, + ellipses: { + type: Boolean, + default: null + }, + + ripple: { + type: [Boolean, Object], + default: null + }, + + round: Boolean, + rounded: Boolean, + + flat: Boolean, + outline: Boolean, + unelevated: Boolean, + push: Boolean, + glossy: Boolean, + + color: { + type: String, + default: 'primary' + }, + textColor: String, + + activeDesign: { + type: String, + default: '', + values: v => v === '' || btnDesignOptions.includes(v) + }, + activeColor: String, + activeTextColor: String, + + gutter: String, + padding: { + type: String, + default: '3px 2px' + } + }, + + data () { + return { + newPage: null + } + }, + + watch: { + min () { + this.model = this.value + }, + + max () { + this.model = this.value + } + }, + + computed: { + model: { + get () { + return this.value + }, + set (val) { + val = parseInt(val, 10) + if (this.disable || isNaN(val)) { + return + } + const value = between(val, this.__min, this.__max) + this.$emit('input', value) + } + }, + + inputPlaceholder () { + return this.model + ' / ' + this.__max + }, + + __min () { + return parseInt(this.min, 10) + }, + + __max () { + return parseInt(this.max, 10) + }, + + __maxPages () { + return parseInt(this.maxPages, 10) + }, + + __boundaryLinks () { + return getBool(this.boundaryLinks, this.input) + }, + + __boundaryNumbers () { + return getBool(this.boundaryNumbers, !this.input) + }, + + __directionLinks () { + return getBool(this.directionLinks, this.input) + }, + + __ellipses () { + return getBool(this.ellipses, !this.input) + }, + + __gutter () { + return this.gutter in btnPadding + ? `${btnPadding[ this.gutter ]}px` + : this.gutter || null + }, + __gutterStyle () { + return this.__gutter !== null + ? `--q-pagination-gutter-parent:-${this.__gutter};--q-pagination-gutter-child:${this.__gutter}` + : null + }, + + __btnDesign () { + return getBtnDesign(this, 'flat') + }, + + __btnActiveDesign () { + // we also reset non-active design + const acc = { [ this.__btnDesign ]: false } + if (this.activeDesign !== '') { + acc[ this.activeDesign ] = true + } + return acc + }, + + icons () { + const ico = [ + this.iconFirst || this.$q.iconSet.pagination.first, + this.iconPrev || this.$q.iconSet.pagination.prev, + this.iconNext || this.$q.iconSet.pagination.next, + this.iconLast || this.$q.iconSet.pagination.last + ] + return this.$q.lang.rtl === true ? ico.reverse() : ico + }, + + attrs () { + const attrs = { role: 'navigation' } + if (this.disable === true) { + attrs['aria-disabled'] = 'true' + } + return attrs + }, + + btnProps () { + return { + [ this.__btnDesign ]: true, + + round: this.round, + rounded: this.rounded, + + padding: this.padding, + + color: this.color, + textColor: this.textColor, + + size: this.size, + ripple: this.ripple !== null + ? this.ripple + : true + } + }, + + activeBtnProps () { + return { + ...this.__btnActiveDesign, + color: this.activeColor || this.color, + textColor: this.activeTextColor || this.textColor + } + }, + + btnConfig () { + let maxPages = Math.max( + this.__maxPages, + 1 + (this.__ellipses ? 2 : 0) + (this.__boundaryNumbers ? 2 : 0) + ) + + const acc = { + pgFrom: this.__min, + pgTo: this.__max, + ellipsesStart: false, + ellipsesEnd: false, + boundaryStart: false, + boundaryEnd: false, + marginalStyle: { + minWidth: `${Math.max(2, String(this.__max).length)}em` + } + } + + if (this.__maxPages && maxPages < (this.__max - this.__min + 1)) { + maxPages = 1 + Math.floor(maxPages / 2) * 2 + acc.pgFrom = Math.max(this.__min, Math.min(this.__max - maxPages + 1, this.value - Math.floor(maxPages / 2))) + acc.pgTo = Math.min(this.__max, acc.pgFrom + maxPages - 1) + + if (this.__boundaryNumbers) { + acc.boundaryStart = true + acc.pgFrom++ + } + + if (this.__ellipses && acc.pgFrom > (this.__min + (this.__boundaryNumbers ? 1 : 0))) { + acc.ellipsesStart = true + acc.pgFrom++ + } + + if (this.__boundaryNumbers) { + acc.boundaryEnd = true + acc.pgTo-- + } + + if (this.__ellipses && acc.pgTo < (this.__max - (this.__boundaryNumbers ? 1 : 0))) { + acc.ellipsesEnd = true + acc.pgTo-- + } + } + + return acc + }, + + inputEvents () { + const updateModel = () => { + this.model = this.newPage + this.newPage = null + } + + return { + input: val => { this.newPage = val }, + keyup: e => { isKeyCode(e, 13) === true && updateModel() }, + blur: updateModel + } + } + }, + + methods: { + set (value) { + this.model = value + }, + + setByOffset (offset) { + this.model = this.model + offset + }, + + __getBtn (h, data, props, page, active) { + data.props = { + ...this.btnProps, + ...props + } + data.attrs = { + 'aria-label': page, + 'aria-current': 'false', + ...data.attrs + } + + if (active === true) { + Object.assign(data.props, this.activeBtnProps) + data.attrs[ 'aria-current' ] = 'true' + } + + if (page !== void 0) { + if (this.toFn !== void 0) { + data.props.to = this.toFn(page) + } + else { + data.on = { click: () => { this.set(page) } } + } + } + + return h(QBtn, data) + } + }, + + render (h) { + const contentStart = [] + const contentEnd = [] + let contentMiddle + + if (this.__boundaryLinks === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bls' + }, { + disable: this.disable || this.value <= this.__min, + icon: this.icons[ 0 ] + }, this.__min) + ) + contentEnd.unshift( + this.__getBtn(h, { + key: 'ble' + }, { + disable: this.disable || this.value >= this.__max, + icon: this.icons[ 3 ] + }, this.__max) + ) + } + + if (this.__directionLinks === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bdp' + }, { + disable: this.disable || this.value <= this.__min, + icon: this.icons[ 1 ] + }, this.value - 1) + ) + contentEnd.unshift( + this.__getBtn(h, { + key: 'bdn' + }, { + disable: this.disable || this.value >= this.__max, + icon: this.icons[ 2 ] + }, this.value + 1) + ) + } + + if (this.input !== true) { // has buttons instead of inputbox + contentMiddle = [] + const { pgFrom, pgTo, marginalStyle: style } = this.btnConfig + + if (this.btnConfig.boundaryStart === true) { + const active = this.__min === this.value + contentStart.push( + this.__getBtn(h, { + key: 'bns', + style + }, { + disable: this.disable, + label: this.__min + }, this.__min, active) + ) + } + + if (this.btnConfig.boundaryEnd === true) { + const active = this.__max === this.value + contentEnd.unshift( + this.__getBtn(h, { + key: 'bne', + style + }, { + disable: this.disable, + label: this.__max + }, this.__max, active) + ) + } + + if (this.btnConfig.ellipsesStart === true) { + contentStart.push( + this.__getBtn(h, { + key: 'bes', + style + }, { + disable: this.disable, + label: '…', + ripple: false + }, pgFrom - 1) + ) + } + + if (this.btnConfig.ellipsesEnd === true) { + contentEnd.unshift( + this.__getBtn(h, { + key: 'bee', + style + }, { + disable: this.disable, + label: '…', + ripple: false + }, pgTo + 1) + ) + } + + for (let i = pgFrom; i <= pgTo; i++) { + contentMiddle.push( + this.__getBtn(h, { + key: `bpg${i}`, + style + }, { + disable: this.disable, + label: i + }, i, i === this.value) + ) + } + } + + return h('div', { + staticClass: 'q-pagination row no-wrap items-center', + class: { disabled: this.disable }, + attrs: this.attrs, + on: { ...this.qListeners } + }, [ + h('div', { + staticClass: 'q-pagination__content row no-wrap items-center', + style: this.__gutterStyle + }, [ + ...contentStart, + + h('div', { + key: 'stop', + staticClass: 'q-pagination__middle row justify-center', + on: this.input === true + ? cache(this, 'stop', { input: stop }) + : null + }, this.input === true + ? [ + h(QInput, { + key: 'inp', + staticClass: 'inline', + style: { width: `${this.inputPlaceholder.length / 1.5}em` }, + props: { + type: 'number', + dense: true, + value: this.newPage, + disable: this.disable, + dark: this.dark, + borderless: true, + inputClass: this.inputClass, + inputStyle: this.inputStyle + }, + attrs: { + placeholder: this.inputPlaceholder, + min: this.__min, + max: this.__max + }, + on: { ...this.inputEvents } + }) + ] + : contentMiddle + ), + + ...contentEnd + ]) + ]) + } +}) diff --git a/src/components/pagination/QPagination.json b/src/components/pagination/QPagination.json new file mode 100644 index 00000000000..dd64f8a52da --- /dev/null +++ b/src/components/pagination/QPagination.json @@ -0,0 +1,293 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/pagination" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "type": "Number", + "desc": "Current page (must be between min/max)", + "required": true, + "examples": [ 3 ], + "category": "model" + }, + + "min": { + "type": [ "Number", "String" ], + "desc": "Minimum page (must be lower than 'max')", + "default": 1, + "examples": [ 3 ], + "category": "model" + }, + + "max": { + "type": [ "Number", "String" ], + "desc": "Number of last page (must be higher than 'min')", + "default": 100, + "required": true, + "examples": [ 10 ], + "category": "model" + }, + + "dark": { + "extends": "dark", + "desc": "Notify the component that the background is a dark color (useful when you are using it along with the 'input' prop)", + "addedIn": "v1.4.2" + }, + + "size": { + "type": "String", + "desc": "Button size in CSS units, including unit name", + "examples": [ "20px" ], + "category": "style" + }, + + "disable": { + "extends": "disable" + }, + + "input": { + "type": "Boolean", + "desc": "Use an input instead of buttons", + "category": "content" + }, + + "icon-prev": { + "extends": "icon", + "addedIn": "v1.9.4" + }, + + "icon-next": { + "extends": "icon", + "addedIn": "v1.9.4" + }, + + "icon-first": { + "extends": "icon", + "addedIn": "v1.9.4" + }, + + "icon-last": { + "extends": "icon", + "addedIn": "v1.9.4" + }, + + "to-fn": { + "type": "Function", + "desc": "Generate link for page buttons; For best performance, reference it from your scope and do not define it inline", + "params": { + "page": { + "type": "Number", + "desc": "Page number to navigate to", + "examples": [ 2 ] + } + }, + "returns": { + "type": [ "Object", "String" ], + "desc": "Object or String that can be passed to a as `to` parameter", + "__exemption": [ "examples" ] + }, + "examples": [ ":to-fn=\"page => ({ query: { page } })\"" ], + "category": "content", + "addedIn": "v1.2.6" + }, + + "boundary-links": { + "type": "Boolean", + "desc": "Show boundary button links", + "category": "content" + }, + + "boundary-numbers": { + "type": "Boolean", + "desc": "Always show first and last page buttons (if not using 'input')", + "category": "content" + }, + + "direction-links": { + "type": "Boolean", + "desc": "Show direction buttons", + "category": "content" + }, + + "ellipses": { + "type": "Boolean", + "desc": "Show ellipses (...) when pages are available", + "category": "content" + }, + + "max-pages": { + "type": [ "Number", "String" ], + "default": 0, + "desc": "Maximum number of page links to display at a time; 0 means Infinite", + "examples": [ 5 ], + "category": "content" + }, + + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design for non-active buttons (it's the default option)", + "category": "style", + "addedIn": "v1.15.6" + }, + + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design for non-active buttons", + "category": "style", + "addedIn": "v1.15" + }, + + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow for non-active buttons", + "category": "style", + "addedIn": "v1.15" + }, + + "push": { + "type": "Boolean", + "desc": "Use 'push' design for non-active buttons", + "category": "style", + "addedIn": "v1.15" + }, + + "color": { + "extends": "color", + "desc": "Color name from the Quasar Color Palette for the non-active buttons", + "default": "primary" + }, + + "text-color": { + "extends": "text-color", + "desc": "Text color name from the Quasar Color Palette for the ACTIVE buttons" + }, + + "active-design": { + "type": "String", + "desc": "The design of the ACTIVE button, similar to the flat/outline/push/unelevated props (but those are used for non-active buttons)", + "values": [ "flat", "outline", "push", "unelevated" ], + "category": "style", + "addedIn": "v1.22" + }, + + "active-color": { + "extends": "color", + "desc": "Color name from the Quasar Color Palette for the ACTIVE button", + "default": "primary", + "addedIn": "v1.15.6" + }, + + "active-text-color": { + "extends": "text-color", + "desc": "Text color name from the Quasar Color Palette for the ACTIVE button", + "addedIn": "v1.15.6" + }, + + "round": { + "type": "Boolean", + "desc": "Makes a circle shaped button for all buttons", + "category": "style", + "addedIn": "v1.15" + }, + + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for a squared shape button for all buttons", + "category": "style", + "addedIn": "v1.15" + }, + + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect for all buttons", + "category": "style", + "addedIn": "v1.15" + }, + + "gutter": { + "type": "String", + "desc": "Apply custom gutter; Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl) - does not work in IE11", + "default": "2px", + "examples": [ "16px", "10px 5px", "2rem", "xs", "md lg", "2px 2px 5px 7px" ], + "category": "style", + "addedIn": "v1.22" + }, + + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ "16px", "10px 5px", "2rem", "xs", "md lg", "2px 2px 5px 7px" ], + "category": "style", + "addedIn": "v1.15" + }, + + "input-style": { + "type": [ "String", "Array", "Object" ], + "desc": "Style definitions to be attributed to the input (if using one)", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + + "input-class": { + "type": [ "String", "Array", "Object" ], + "desc": "Class definitions to be attributed to the input (if using one)", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + + "ripple": { + "type": [ "Boolean", "Object" ], + "desc": "Configure buttons material ripple (disable it by setting it to 'false' or supply a config object); Does not applies to boundary and ellipsis buttons", + "default": true, + "examples": [ false, "{ early: true, center: true, color: 'teal', keyCodes: [] }" ], + "category": "style", + "addedIn": "v1.9.11" + } + }, + + "events": { + "input": { + "extends": "input", + "params": { + "value": { + "type": "String" + } + } + } + }, + + "methods": { + "set": { + "desc": "Go directly to the specified page", + "params": { + "pageNumber": { + "type": "Number", + "desc": "Page number to go to", + "examples": [ 3 ] + } + } + }, + + "setByOffset": { + "desc": "Increment/Decrement current page by offset", + "params": { + "offset": { + "type": "Number", + "desc": "Offset page, can be negative or positive", + "examples": [ 3 ] + } + } + } + } +} diff --git a/src/components/pagination/QPagination.sass b/src/components/pagination/QPagination.sass new file mode 100644 index 00000000000..5a292869260 --- /dev/null +++ b/src/components/pagination/QPagination.sass @@ -0,0 +1,22 @@ +.q-pagination + input + text-align: center + -moz-appearance: textfield + + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button + -webkit-appearance: none + margin: 0 + + &__content + --q-pagination-gutter-parent: -2px + --q-pagination-gutter-child: 2px + + margin-top: var(--q-pagination-gutter-parent) + margin-left: var(--q-pagination-gutter-parent) + + &__content > .q-btn, + &__content > .q-input, + &__middle > .q-btn + margin-top: var(--q-pagination-gutter-child) + margin-left: var(--q-pagination-gutter-child) diff --git a/src/components/pagination/QPagination.styl b/src/components/pagination/QPagination.styl new file mode 100644 index 00000000000..5a292869260 --- /dev/null +++ b/src/components/pagination/QPagination.styl @@ -0,0 +1,22 @@ +.q-pagination + input + text-align: center + -moz-appearance: textfield + + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button + -webkit-appearance: none + margin: 0 + + &__content + --q-pagination-gutter-parent: -2px + --q-pagination-gutter-child: 2px + + margin-top: var(--q-pagination-gutter-parent) + margin-left: var(--q-pagination-gutter-parent) + + &__content > .q-btn, + &__content > .q-input, + &__middle > .q-btn + margin-top: var(--q-pagination-gutter-child) + margin-left: var(--q-pagination-gutter-child) diff --git a/src/components/pagination/index.js b/src/components/pagination/index.js new file mode 100644 index 00000000000..46a7629eb49 --- /dev/null +++ b/src/components/pagination/index.js @@ -0,0 +1,5 @@ +import QPagination from './QPagination.js' + +export { + QPagination +} diff --git a/src/components/parallax/QParallax.js b/src/components/parallax/QParallax.js new file mode 100644 index 00000000000..6eea9aa592d --- /dev/null +++ b/src/components/parallax/QParallax.js @@ -0,0 +1,174 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { height, offset } from '../../utils/dom.js' +import frameDebounce from '../../utils/frame-debounce.js' +import { getScrollTarget } from '../../utils/scroll.js' +import { slot } from '../../utils/private/slot.js' +import { listenOpts } from '../../utils/event.js' + +const { passive } = listenOpts + +export default Vue.extend({ + name: 'QParallax', + + mixins: [ ListenersMixin ], + + props: { + src: String, + height: { + type: Number, + default: 500 + }, + speed: { + type: Number, + default: 1, + validator: v => v >= 0 && v <= 1 + }, + + scrollTarget: { + default: void 0 + } + }, + + data () { + return { + scrolling: false, + percentScrolled: 0 + } + }, + + watch: { + height () { + this.working === true && this.__updatePos() + }, + + scrollTarget () { + if (this.working === true) { + this.__stop() + this.__start() + } + } + }, + + methods: { + __update (percentage) { + this.percentScrolled = percentage + this.qListeners.scroll !== void 0 && this.$emit('scroll', percentage) + }, + + __updatePos () { + let containerTop, containerHeight, containerBottom + + if (this.__scrollTarget === window) { + containerTop = 0 + containerHeight = window.innerHeight + containerBottom = containerHeight + } + else { + containerTop = offset(this.__scrollTarget).top + containerHeight = height(this.__scrollTarget) + containerBottom = containerTop + containerHeight + } + + const top = offset(this.$el).top + const bottom = top + this.height + + if (this.observer !== void 0 || (bottom > containerTop && top < containerBottom)) { + const percent = (containerBottom - top) / (this.height + containerHeight) + this.__setPos((this.mediaHeight - this.height) * percent * this.speed) + this.__update(percent) + } + }, + + __setPos (offset) { + // apply it immediately without any delay + this.media.style.transform = `translate3d(-50%,${Math.round(offset)}px,0)` + }, + + __onResize () { + this.mediaHeight = this.media.naturalHeight || this.media.videoHeight || height(this.media) + this.working === true && this.__updatePos() + }, + + __start () { + this.working = true + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget) + this.__scrollTarget.addEventListener('scroll', this.__updatePos, passive) + window.addEventListener('resize', this.__resizeHandler, passive) + this.__updatePos() + }, + + __stop () { + if (this.working === true) { + this.working = false + this.__setPos.cancel() + this.__update.cancel() + this.__resizeHandler.cancel() + this.__scrollTarget.removeEventListener('scroll', this.__updatePos, passive) + window.removeEventListener('resize', this.__resizeHandler, passive) + this.__scrollTarget = void 0 + } + } + }, + + render (h) { + return h('div', { + staticClass: 'q-parallax', + style: { height: `${this.height}px` }, + on: { ...this.qListeners } + }, [ + h('div', { + ref: 'mediaParent', + staticClass: 'q-parallax__media absolute-full' + }, this.$scopedSlots.media !== void 0 ? this.$scopedSlots.media() : [ + h('img', { + ref: 'media', + attrs: { + src: this.src + } + }) + ]), + + h( + 'div', + { staticClass: 'q-parallax__content absolute-full column flex-center' }, + this.$scopedSlots.content !== void 0 + ? this.$scopedSlots.content({ percentScrolled: this.percentScrolled }) + : slot(this, 'default') + ) + ]) + }, + + mounted () { + this.__setPos = frameDebounce(this.__setPos) + this.__update = frameDebounce(this.__update) + this.__resizeHandler = frameDebounce(this.__onResize) + + this.media = this.$scopedSlots.media !== void 0 + ? this.$refs.mediaParent.children[0] + : this.$refs.media + + this.media.onload = this.media.onloadstart = this.media.loadedmetadata = this.__onResize + this.__onResize() + this.media.style.display = 'initial' + + if (window.IntersectionObserver !== void 0) { + this.observer = new IntersectionObserver(entries => { + this[entries[0].isIntersecting === true ? '__start' : '__stop']() + }) + + this.observer.observe(this.$el) + } + else { + this.__start() + } + }, + + beforeDestroy () { + this.__stop() + this.observer !== void 0 && this.observer.disconnect() + this.media.onload = this.media.onloadstart = this.media.loadedmetadata = null + } +}) diff --git a/src/components/parallax/QParallax.json b/src/components/parallax/QParallax.json new file mode 100644 index 00000000000..d37a1805f57 --- /dev/null +++ b/src/components/parallax/QParallax.json @@ -0,0 +1,79 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/parallax" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "src": { + "type": "String", + "desc": "Path to image (unless a 'media' slot is used)", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/something.png\"", + "(assets folder) src=\"~assets/my-img.png\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://some-site.net/some-img.jpg\"" + ], + "category": "model" + }, + + "height": { + "type": "Number", + "desc": "Height of component (in pixels)", + "default": 500, + "examples": [ ":height=\"1000\"" ], + "category": "style" + }, + + "speed": { + "type": "Number", + "desc": "Speed of parallax effect (0.0 < x < 1.0)", + "examples": [ ":speed=\"0.24\"" ], + "category": "behavior" + }, + + "scroll-target": { + "extends": "scroll-target" + } + }, + + "slots": { + "default": { + "desc": "Default slot can be used for content that gets displayed on top of the component" + }, + + "media": { + "desc": "Slot for describing or
element's wrapper (which is a DIV)", + "examples": [ + "background-color: #ff0000", + ":table-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + + "table-class": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS classes to apply to native HTML
element's wrapper (which is a DIV)", + "examples": [ + "my-special-class", + ":table-class=\"{ 'my-special-class': [Boolean condition] }\"" + ], + "category": "style" + }, + + "table-header-style": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS style to apply to header of native HTML
(which is a TR)", + "examples": [ + "background-color: #ff0000", + ":table-header-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + + "table-header-class": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS classes to apply to header of native HTML
(which is a TR)", + "examples": [ + "my-special-class", + ":table-header-class=\"{ 'my-special-class': [Boolean condition] }\"" + ], + "category": "style" + }, + + "card-container-style": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS style to apply to the cards container (when in grid mode)", + "examples": [ + "background-color: #ff0000", + ":card-container-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style", + "addedIn": "v1.4" + }, + + "card-container-class": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS classes to apply to the cards container (when in grid mode)", + "examples": [ + "my-special-class", + "justify-center", + ":card-container-class=\"{ 'my-special-class': [Boolean condition] }\"" + ], + "category": "style", + "addedIn": "v1.4" + }, + + "card-style": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS style to apply to the card (when in grid mode) or container card (when not in grid mode)", + "examples": [ + "background-color: #ff0000", + ":card-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style" + }, + + "card-class": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS classes to apply to the card (when in grid mode) or container card (when not in grid mode)", + "examples": [ + "my-special-class", + ":card-class=\"{ 'my-special-class': [Boolean condition] }\"" + ], + "category": "style" + }, + + "title-class": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS classes to apply to the title (if using 'title' prop)", + "examples": [ + "my-special-class", + "text-h1", + ":title-class=\"{ 'text-h1': [Boolean condition] }\"" + ], + "category": "style", + "addedIn": "v1.13.2" + }, + + "filter": { + "type": [ "String", "Object" ], + "desc": "String/Object to filter table with; When using an Object it requires 'filter-method' to also be specified since it will be a custom filtering", + "examples": [ ":filter=\"myFilterInput\"" ], + "category": "filter" + }, + + "filter-method": { + "type": "Function", + "desc": "The actual filtering mechanism; For best performance, reference it from your scope and do not define it inline", + "params": { + "rows": { + "type": "Array", + "desc": "Array of rows", + "required": true, + "__exemption": [ "examples" ] + }, + "terms": { + "type": [ "String", "Object" ], + "desc": "Terms to filter with (is essentially the 'filter' prop value)", + "required": true, + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Array", + "desc": "Optional column definitions", + "__exemption": [ "examples" ] + }, + "getCellValue": { + "type": "Function", + "desc": "Optional function to get a cell value", + "params": { + "col": { + "type": "Object", + "desc": "Column name from column definitions", + "__exemption": [ "examples" ] + }, + "row": { + "type": "Object", + "desc": "The row object", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Parsed/Processed cell value", + "examples": [ "Ice Cream Sandwich" ] + } + } + }, + "returns": { + "type": "Array", + "desc": "Filtered rows", + "__exemption": [ "examples" ] + }, + "default": "(see source code)", + "examples": [ + "(see source code)" + ], + "category": "filter" + }, + + "pagination": { + "type": "Object", + "desc": "Pagination object; You can use the '.sync' modifier on it if you want to have access on the current pagination in your components; When not using the .sync modifier it simply initializes the pagination on first render", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + }, + "rowsNumber": { + "type": "Number", + "desc": "For server-side fetching only. How many total database rows are there to be added to the table. If set, causes the QTable to emit @request when data is required.", + "examples": [ 100, 200 ] + } + }, + "examples": [ + ":pagination.sync=\"myPagination\"" + ], + "category": "pagination" + }, + + "rows-per-page-options": { + "type": "Array", + "desc": "Options for user to pick (Numbers); Number 0 means 'Show all rows in one page'", + "default": "[ 3, 5, 7, 10, 15, 20, 25, 50, 0 ]", + "examples": [ + ":rows-per-page-options=\"[10, 20]\"" + ], + "category": "pagination" + }, + + "selection": { + "type": "String", + "desc": "Selection type", + "default": "none", + "values": [ "single", "multiple", "none" ], + "examples": [ "multiple" ], + "category": "selection" + }, + + "selected": { + "type": "Array", + "desc": "Keeps the user selection array", + "sync": true, + "default": "[]", + "examples": [ + ":selected.sync=\"selection\"" + ], + "category": "selection" + }, + + "expanded": { + "type": "Array", + "desc": "Keeps the array with expanded rows keys", + "sync": true, + "default": "[]", + "examples": [ + ":expanded.sync=\"expanded\"" + ], + "category": "expansion", + "addedIn": "v1.8.3" + }, + + "sort-method": { + "type": "Function", + "desc": "The actual sort mechanism. Function (rows, sortBy, descending) => sorted rows; For best performance, reference it from your scope and do not define it inline", + "params": { + "rows": { + "type": "Array", + "desc": "Array with rows", + "__exemption": [ "examples" ] + }, + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + } + }, + "returns": { + "type": "Array", + "desc": "Sorted rows", + "__exemption": [ "examples" ] + }, + "default": "(see source code)", + "examples": [ + "(see source code)" + ], + "category": "sorting" + } + }, + + "slots": { + "loading": { + "desc": "Override default effect when table is in loading state; Suggestion: QInnerLoading", + "addedIn": "v1.8" + } + }, + + "scopedSlots": { + "item": { + "desc": "Slot to use for defining an item when in 'grid' mode; Suggestion: QCard", + "scope": { + "key": { + "type": "Any", + "desc": "Row/Item's key", + "__exemption": [ "examples" ] + }, + "row": { + "type": "Object", + "desc": "Row/Item object", + "__exemption": [ "examples" ] + }, + "rowIndex": { + "type": "Number", + "desc": "Row/Item's index (0 based) in the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "pageIndex": { + "type": "Number", + "desc": "Row/Item's index (0 based) in the current page of the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ] + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null, + "addedIn": "v1.14" + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row/item selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row/item expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "extends": "color", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "extends": "dark", + "addedIn": "v1.14" + }, + "dense": { + "extends": "dense", + "addedIn": "v1.14" + } + } + }, + + "body": { + "desc": "Slot to define how a body row looks like; Suggestion: QTr + Td", + "scope": { + "key": { + "type": "Any", + "desc": "Row's key", + "__exemption": [ "examples" ] + }, + "row": { + "type": "Object", + "desc": "Row object", + "__exemption": [ "examples" ] + }, + "rowIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "pageIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the current page of the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ] + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null, + "addedIn": "v1.14" + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "extends": "color", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "extends": "dark", + "addedIn": "v1.14" + }, + "dense": { + "extends": "dense", + "addedIn": "v1.14" + }, + "__trClass": { + "type": "String", + "desc": "Internal prop passed down to QTr (if used)", + "__exemption": [ "examples" ] + } + } + }, + + "body-cell": { + "desc": "Slot to define how all body cells look like; Suggestion: QTd", + "scope": { + "col": { + "type": "Object", + "desc": "Column definition for column associated with table cell", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Parsed/Formatted value of table cell", + "__exemption": [ "examples" ] + }, + "key": { + "type": "Any", + "desc": "Row's key", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + "row": { + "type": "Object", + "desc": "Row object", + "__exemption": [ "examples" ] + }, + "rowIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "pageIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the current page of the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null, + "addedIn": "v1.14" + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "extends": "color", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "extends": "dark", + "addedIn": "v1.14" + }, + "dense": { + "extends": "dense", + "addedIn": "v1.14" + } + } + }, + + "body-cell-[name]": { + "desc": "Slot to define how a specific column cell looks like; replace '[name]' with column name (from columns definition object)", + "scope": { + "col": { + "type": "Object", + "desc": "Column definition for column associated with table cell", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Parsed/Formatted value of table cell", + "__exemption": [ "examples" ] + }, + "key": { + "type": "Any", + "desc": "Row's key", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + "row": { + "type": "Object", + "desc": "Row object", + "__exemption": [ "examples" ] + }, + "rowIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "pageIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the current page of the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null, + "addedIn": "v1.14" + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true, + "addedIn": "v1.14" + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true, + "addedIn": "v1.14" + }, + "color": { + "extends": "color", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "extends": "dark", + "addedIn": "v1.14" + }, + "dense": { + "extends": "dense", + "addedIn": "v1.14" + } + } + }, + + "header": { + "desc": "Slot to define how header looks like; Suggestion: QTr + QTh", + "scope": { + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ] + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true, + "addedIn": "v1.14" + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true, + "addedIn": "v1.14" + }, + "color": { + "extends": "color", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "extends": "dark", + "addedIn": "v1.14" + }, + "dense": { + "extends": "dense", + "addedIn": "v1.14" + }, + "__trClass": { + "type": "String", + "desc": "Internal prop passed down to QTr (if used)", + "__exemption": [ "examples" ] + }, + "header": { + "type": "Boolean", + "desc": "Internal prop passed down to QTh (if used); Always 'true'" + } + } + }, + + "header-cell": { + "desc": "Slot to define how each header cell looks like; Suggestion: QTh", + "scope": { + "col": { + "type": "Object", + "desc": "Column definition associated to header cell", + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ] + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true, + "addedIn": "v1.14" + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true, + "addedIn": "v1.14" + }, + "color": { + "extends": "color", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "extends": "dark", + "addedIn": "v1.14" + }, + "dense": { + "extends": "dense", + "addedIn": "v1.14" + } + } + }, + + "header-cell-[name]": { + "desc": "Slot to define how a specific header cell looks like; replace '[name]' with column name (from columns definition object)", + "scope": { + "col": { + "type": "Object", + "desc": "Column definition associated to header cell", + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ] + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true, + "addedIn": "v1.14" + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true, + "addedIn": "v1.14" + }, + "color": { + "extends": "color", + "default": "grey-8", + "addedIn": "v1.14" + }, + "dark": { + "extends": "dark", + "addedIn": "v1.14" + }, + "dense": { + "extends": "dense", + "addedIn": "v1.14" + } + }, + "addedIn": "v1.1.1" + }, + + "body-selection": { + "desc": "Slot to define how body selection column looks like; Suggestion: QCheckbox", + "scope": { + "key": { + "type": "Any", + "desc": "Row's key", + "__exemption": [ "examples" ] + }, + "row": { + "type": "Object", + "desc": "Row object", + "__exemption": [ "examples" ] + }, + "rowIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "pageIndex": { + "type": "Number", + "desc": "Row's index (0 based) in the current page of the filtered and sorted table", + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ] + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "extends": "color", + "default": "grey-8" + }, + "dark": { + "extends": "dark" + }, + "dense": { + "extends": "dense" + } + }, + "addedIn": "v1.14" + }, + + "header-selection": { + "desc": "Slot to define how header selection column looks like (available only for multiple selection mode); Suggestion: QCheckbox", + "scope": { + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + }, + "colsMap": { + "type": "Object", + "desc": "Column mapping (key is column name, value is column object)", + "__exemption": [ "examples" ] + }, + "sort": { + "type": "Function", + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": null + }, + "selected": { + "type": "Boolean", + "desc": "(Only if using selection) Is row selected? Can directly be assigned new Boolean value which changes selection state", + "reactive": true + }, + "expand": { + "type": "Boolean", + "desc": "Is row expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "color": { + "extends": "color", + "default": "grey-8" + }, + "dark": { + "extends": "dark" + }, + "dense": { + "extends": "dense" + } + }, + "addedIn": "v1.14" + }, + + "top-row": { + "desc": "Slot to define how top extra row looks like", + "scope": { + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + } + } + }, + + "bottom-row": { + "desc": "Slot to define how bottom extra row looks like", + "scope": { + "cols": { + "type": "Object", + "desc": "Column definitions", + "__exemption": [ "examples" ] + } + } + }, + + "top": { + "desc": "Slot to define how table top looks like", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ 5 ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + + "bottom": { + "desc": "Slot to define how table bottom looks like", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ 5 ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + + "pagination": { + "desc": "Slot to override default pagination label and buttons", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ 5 ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + + "top-left": { + "desc": "Slot to define how left part of the table top looks like", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ 5 ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + + "top-right": { + "desc": "Slot to define how right part of the table top looks like", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ 5 ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + + "top-selection": { + "desc": "Slot to define how top table section looks like when user has selected at least one row", + "scope": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "pagesNumber": { + "type": "Number", + "desc": "Number of pages available", + "examples": [ 5 ] + }, + "isFirstPage": { + "type": "Boolean", + "desc": "Are we on first page?" + }, + "isLastPage": { + "type": "Boolean", + "desc": "Are we on last page?" + }, + "firstPage": { + "type": "Function", + "desc": "Navigates to first page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "prevPage": { + "type": "Function", + "desc": "Navigates to previous page, if available", + "params": null, + "returns": null + }, + "nextPage": { + "type": "Function", + "desc": "Navigates to next page, if available", + "params": null, + "returns": null + }, + "lastPage": { + "type": "Function", + "desc": "Navigates to last page", + "params": null, + "returns": null, + "addedIn": "v1.12" + }, + "inFullscreen": { + "type": "Boolean", + "desc": "Is table in fullscreen mode?" + }, + "toggleFullscreen": { + "type": "Function", + "desc": "Toggles fullscreen mode", + "params": null, + "returns": null + } + } + }, + + "no-data": { + "desc": "Slot to define how the bottom will look like when is nothing to display", + "scope": { + "message": { + "type": "String", + "desc": "The suggested message", + "examples": [ "No data available" ] + }, + "icon": { + "type": "String", + "desc": "The suggested icon name (following Quasar convention)", + "examples": [ "warning" ] + } + } + } + }, + + "events": { + "row-click": { + "desc": "Emitted when user clicks/taps on a row; Is not emitted when using body/row/item scoped slots", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + }, + + "row": { + "type": "Object", + "desc": "The row upon which user has clicked/tapped", + "__exemption": [ "examples" ] + }, + + "index": { + "type": "Number", + "desc": "Index of the row in the current page", + "__exemption": [ "examples" ], + "addedIn": "v1.13" + } + }, + "addedIn": "v1.2.6" + }, + + "row-dblclick": { + "desc": "Emitted when user quickly double clicks/taps on a row; Is not emitted when using body/row/item scoped slots; Please check JS dblclick event support before using", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + }, + + "row": { + "type": "Object", + "desc": "The row upon which user has double clicked/tapped", + "__exemption": [ "examples" ] + }, + + "index": { + "type": "Number", + "desc": "Index of the row in the current page", + "__exemption": [ "examples" ], + "addedIn": "v1.13" + } + }, + "addedIn": "v1.5.10" + }, + + "row-contextmenu": { + "desc": "Emitted when user right clicks/long taps on a row; Is not emitted when using body/row/item scoped slots", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ] + }, + + "row": { + "type": "Object", + "desc": "The row upon which user has right clicked/long tapped", + "__exemption": [ "examples" ] + }, + + "index": { + "type": "Number", + "desc": "Index of the row in the current page", + "__exemption": [ "examples" ] + } + }, + "addedIn": "v1.15.1" + }, + + "request": { + "desc": "Emitted when a server request is triggered", + "params": { + "requestProp": { + "type": "Object", + "desc": "Props of the request", + "definition": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "filter": { + "type": "Function", + "desc": "Filter method (the 'filter-method' prop)", + "params": { + "rows": { + "type": "Array", + "desc": "Array of rows", + "required": true, + "__exemption": [ "examples" ] + }, + "terms": { + "type": [ "String", "Object" ], + "desc": "Terms to filter with (is essentially the 'filter' prop value)", + "required": true, + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Array", + "desc": "Optional column definitions", + "__exemption": [ "examples" ] + }, + "getCellValue": { + "type": "Function", + "desc": "Optional function to get a cell value", + "params": { + "col": { + "type": "Object", + "desc": "Column name from column definitions", + "__exemption": [ "examples" ] + }, + "row": { + "type": "Object", + "desc": "The row object", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Parsed/Processed cell value", + "examples": [ "Ice Cream Sandwich" ] + } + } + }, + "returns": { + "type": "Array", + "desc": "Filtered rows", + "__exemption": [ "examples" ] + } + }, + "getCellValue": { + "type": "Function", + "desc": "Optional function to get a cell value", + "params": { + "col": { + "type": "Object", + "desc": "Column name from column definitions", + "__exemption": [ "examples" ] + }, + "row": { + "type": "Object", + "desc": "The row object", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Parsed/Processed cell value", + "examples": [ "Ice Cream Sandwich" ] + } + } + } + } + } + }, + + "selection": { + "desc": "Emitted when user selects/unselects row(s)", + "params": { + "details": { + "type": "Object", + "desc": "Selection details", + "definition": { + "rows": { + "type": "Array", + "desc": "Array of row objects that were selected/unselected", + "__exemption": [ "examples" ] + }, + "keys": { + "type": "Array", + "desc": "Array of the keys of rows that were selected/unselected", + "__exemption": [ "examples" ] + }, + "added": { + "type": "Boolean", + "desc": "Were the rows added to selection (true) or removed from selection (false)" + }, + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ], + "addedIn":"v1.11.2" + } + } + } + } + }, + + "update:pagination": { + "desc": "Used by Vue on 'pagination.sync' prop for updating its value", + "params": { + "newPagination": { + "type": "Object", + "desc": "The updated pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + } + } + }, + + "update:selected": { + "desc": "Used by Vue on 'selected.sync' prop for updating its value", + "params": { + "newSelected": { + "type": "Array", + "desc": "The updated selected array", + "examples": [ + "[ { name: 'Frozen Yogurt', calories: 159, fat: 6 } ]" + ] + } + } + }, + + "update:expanded": { + "desc": "Used by Vue on 'expanded.sync' prop for updating its value", + "params": { + "newExpanded": { + "type": "Array", + "desc": "The updated expanded array", + "examples": [ + "[ 'row-a', 'row-b' ]" + ] + } + }, + "addedIn": "v1.8.3" + }, + + "virtual-scroll": { + "desc": "Emitted when the virtual scroll occurs, if using virtual scroll", + "params": { + "details": { + "type": "Object", + "desc": "Object of properties on the new scroll position", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the list item that was scrolled into view (0 based)", + "examples": [ 30 ] + }, + "from": { + "type": "Number", + "desc": "The index of the first list item that is rendered (0 based)", + "examples": [ 10 ] + }, + "to": { + "type": "Number", + "desc": "The index of the last list item that is rendered (0 based)", + "examples": [ 50 ] + }, + "direction": { + "type": "String", + "desc": "Direction of change", + "values": [ "increase", "decrease" ] + } + } + } + }, + "addedIn": "v1.4.1" + } + }, + + "methods": { + "requestServerInteraction": { + "desc": "Trigger a server request (emits 'request' event)", + "params": { + "props": { + "type": "Object", + "desc": "Request details", + "definition": { + "pagination": { + "type": "Object", + "desc": "Optional pagination object", + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "filter": { + "type": "Function", + "desc": "Filtering method (the 'filter-method' prop)", + "params": { + "rows": { + "type": "Array", + "desc": "Array of rows", + "required": true, + "__exemption": [ "examples" ] + }, + "terms": { + "type": [ "String", "Object" ], + "desc": "Terms to filter with (is essentially the 'filter' prop value)", + "required": true, + "__exemption": [ "examples" ] + }, + "cols": { + "type": "Array", + "desc": "Optional column definitions", + "__exemption": [ "examples" ] + }, + "getCellValue": { + "type": "Function", + "desc": "Optional function to get a cell value", + "params": { + "col": { + "type": "Object", + "desc": "Column name from column definitions", + "__exemption": [ "examples" ] + }, + "row": { + "type": "Object", + "desc": "The row object", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Parsed/Processed cell value", + "examples": [ "Ice Cream Sandwich" ] + } + } + }, + "returns": { + "type": "Array", + "desc": "Filtered rows", + "__exemption": [ "examples" ] + } + } + } + } + } + }, + + "setPagination": { + "desc": "Unless using an external pagination Object (through 'pagination.sync' prop), you can use this method and force the internal pagination to change", + "params": { + "pagination": { + "type": "Object", + "desc": "Pagination object", + "required": true, + "definition": { + "sortBy": { + "type": "String", + "desc": "Column name (from column definition)", + "examples": [ "calories" ] + }, + "descending": { + "type": "Boolean", + "desc": "Is sorting in descending order?" + }, + "page": { + "type": "Number", + "desc": "Page number (1-based)", + "examples": [ 3 ] + }, + "rowsPerPage": { + "type": "Number", + "desc": "How many rows per page? 0 means Infinite", + "examples": [ 10 ] + } + } + }, + "forceServerRequest": { + "type": "Boolean", + "desc": "Also force a server request" + } + } + }, + + "firstPage": { + "desc": "Navigates to first page", + "addedIn": "v1.12" + }, + + "prevPage": { + "desc": "Navigates to previous page, if available" + }, + + "nextPage": { + "desc": "Navigates to next page, if available" + }, + + "lastPage": { + "desc": "Navigates to last page", + "addedIn": "v1.12" + }, + + "isRowSelected": { + "desc": "Determine if a row has been selected by user", + "params": { + "key": { + "type": "Any", + "desc": "Row key value", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Is row selected or not?" + } + }, + + "clearSelection": { + "desc": "Clears user selection (emits 'update:selected' with empty array)" + }, + + "isRowExpanded": { + "desc": "Determine if a row is expanded or not", + "params": { + "key": { + "type": "Any", + "desc": "Row key value", + "required": true, + "examples": [ "calories" ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Is row expanded or not?" + }, + "addedIn": "v1.8.3" + }, + + "setExpanded": { + "desc": "Sets the expanded rows keys array; Especially useful if not using an external 'expanded' state otherwise just emits 'update:expanded' with the value", + "params": { + "expanded": { + "type": "Array", + "desc": "Array containing keys of the expanded rows", + "required": true, + "examples": [ "[ 'row-a', 'row-b' ]" ] + } + }, + "addedIn": "v1.8.3" + }, + + "sort": { + "desc": "Trigger a table sort", + "params": { + "col": { + "type": [ "String", "Object" ], + "desc": "Column name or column definition object", + "required": true, + "examples": [ "calories" ] + } + } + }, + + "toggleFullscreen": { + "desc": "Toggles fullscreen mode" + }, + + "resetVirtualScroll": { + "desc": "Resets the virtual scroll (if using it) computations; Needed for custom edge-cases" + }, + + "scrollTo": { + "desc": "Scroll the table to the row with the specified index in page (0 based)", + "params": { + "index": { + "type": [ "String", "Number" ], + "desc": "The index of the row in page (0 based)", + "required": true, + "examples": [ "1", 23 ] + }, + "edge": { + "type": "String", + "desc": "Only for virtual scroll - the edge to align to if the row is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns", + "values": [ "start", "center", "end", "start-force", "center-force", "end-force" ], + "addedIn": "v1.14.7" + } + }, + "addedIn": "v1.7.2" + } + } +} diff --git a/src/components/table/QTable.sass b/src/components/table/QTable.sass new file mode 100644 index 00000000000..d2cfc4510d2 --- /dev/null +++ b/src/components/table/QTable.sass @@ -0,0 +1,303 @@ +.q-markup-table + overflow: auto + +.q-table + width: 100% + max-width: 100% + border-collapse: separate + border-spacing: 0 + + thead tr, tbody td + height: 48px + + th + font-weight: 500 + font-size: 12px + user-select: none + &.sortable + cursor: pointer + &:hover .q-table__sort-icon + opacity: .64 + &.sorted .q-table__sort-icon + opacity: .86 !important + &.sort-desc .q-table__sort-icon + transform: rotate(180deg) + + th, td + padding: 7px 16px + background-color: inherit + + thead, td, th + border-style: solid + border-width: 0 + + tbody td + font-size: 13px + + &__card + color: $light-text + color: var(--q-color-light-text) + border-radius: $table-border-radius + box-shadow: $table-box-shadow + + .q-table__middle + flex: 1 1 auto + + .q-table__top, + .q-table__bottom + flex: 0 0 auto + + &__container + position: relative + + &.fullscreen + max-height: 100% + + > div:first-child + border-top-left-radius: inherit + border-top-right-radius: inherit + + > div:last-child + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + + > .q-inner-loading + border-radius: inherit !important + + &__top + padding: 12px 16px + .q-table__control + flex-wrap: wrap + + &__title + font-size: 20px + letter-spacing: .005em + font-weight: 400 + + &__separator + min-width: 8px !important + + &__progress + height: 0 !important + th + padding: 0 !important + border: 0 !important + .q-linear-progress + position: absolute + bottom: 0 + + &__middle + max-width: 100% + + &__bottom + min-height: 50px + padding: 4px 14px 4px 16px + font-size: 12px + + .q-table__control + min-height: 24px + + &__bottom-nodata-icon + font-size: 200% + margin-right: 8px + + &__bottom-item + margin-right: 16px + + &__control + display: flex + align-items: center + + &__sort-icon + transition: transform $table-transition + opacity: 0 + font-size: 120% + + &--left, &--center + margin-left: 4px + &--right + margin-right: 4px + + &--col-auto-width + width: 1px + + &--flat + box-shadow: none + &--bordered + border: 1px solid $table-border-color + &--square + border-radius: 0 + + &__linear-progress + height: 2px + + &--no-wrap + th, td + white-space: nowrap + + &--grid + box-shadow: none + border-radius: $generic-border-radius + .q-table__top + padding-bottom: 4px + .q-table__middle + min-height: 2px + margin-bottom: 4px + thead + &, th + border: 0 !important + .q-table__linear-progress + bottom: 0 + .q-table__bottom + border-top: 0 + .q-table__grid-content + flex: 1 1 auto + + &.fullscreen + background: inherit + + &__grid-item-card + vertical-align: top + padding: 12px + + .q-separator + margin: 12px 0 + + &__grid-item-row + &__grid-item-row + margin-top: 8px + + &__grid-item-title + opacity: .54 + font-weight: 500 + font-size: 12px + + &__grid-item-value + font-size: 13px + + &__grid-item + padding: 4px + transition: transform $table-transition + + &--selected + transform: scale(.95) + +/* + * Separators + */ +.q-table--horizontal-separator, .q-table--cell-separator + thead th, tbody tr:not(:last-child) > td + border-bottom-width: 1px + +.q-table--vertical-separator, .q-table--cell-separator + td, th + border-left-width: 1px + thead tr:last-child th, + &.q-table--loading tr:nth-last-child(2) th + border-bottom-width: 1px + td:first-child, th:first-child + border-left: 0 + .q-table__top + border-bottom: 1px solid $table-border-color + +/* + * dense size + */ + +.q-table--dense + .q-table__top + padding: 6px 16px + .q-table__bottom + min-height: 33px + + .q-table__sort-icon + font-size: 110% + .q-table + th, td + padding: 4px 8px + thead tr, tbody tr, tbody td + height: 28px + th:first-child, td:first-child + padding-left: 16px + th:last-child, td:last-child + padding-right: 16px + + .q-table__bottom-item + margin-right: 8px + + .q-table__select + .q-field__control, .q-field__native + min-height: 24px + padding: 0 + .q-field__marginal + height: 24px + +/* + * On light background + */ +.q-table__bottom // @stylint ignore + border-top: 1px solid $table-border-color + +.q-table // @stylint ignore + thead, tr, th, td + border-color: $table-border-color + + tbody + td + position: relative + &:before, &:after + position: absolute + top: 0 + left: 0 + right: 0 + bottom: 0 + pointer-events: none + &:before + background: $table-hover-background + &:after + background: $table-selected-background + + tr.selected td:after + content: '' + +body.desktop .q-table > tbody > tr:not(.q-tr--no-hover):hover > td:not(.q-td--no-hover):before + content: '' + +/* + * On dark background + */ +.q-table__card--dark, .q-table--dark + border-color: $table-dark-border-color + +.q-table--dark + .q-table__bottom, thead, tr, th, td + border-color: $table-dark-border-color + + tbody + td + &:before + background: $table-dark-hover-background + &:after + background: $table-dark-selected-background + + &.q-table--vertical-separator, &.q-table--cell-separator + .q-table__top + border-color: $table-dark-border-color + +@media (prefers-color-scheme: dark) + .q-table__card--dark-auto, .q-table--dark-auto + border-color: $table-dark-border-color + + .q-table--dark-auto + .q-table__bottom, thead, tr, th, td + border-color: $table-dark-border-color + + tbody + td + &:before + background: $table-dark-hover-background + &:after + background: $table-dark-selected-background + + &.q-table--vertical-separator, &.q-table--cell-separator + .q-table__top + border-color: $table-dark-border-color diff --git a/src/components/table/QTable.styl b/src/components/table/QTable.styl new file mode 100644 index 00000000000..d2cfc4510d2 --- /dev/null +++ b/src/components/table/QTable.styl @@ -0,0 +1,303 @@ +.q-markup-table + overflow: auto + +.q-table + width: 100% + max-width: 100% + border-collapse: separate + border-spacing: 0 + + thead tr, tbody td + height: 48px + + th + font-weight: 500 + font-size: 12px + user-select: none + &.sortable + cursor: pointer + &:hover .q-table__sort-icon + opacity: .64 + &.sorted .q-table__sort-icon + opacity: .86 !important + &.sort-desc .q-table__sort-icon + transform: rotate(180deg) + + th, td + padding: 7px 16px + background-color: inherit + + thead, td, th + border-style: solid + border-width: 0 + + tbody td + font-size: 13px + + &__card + color: $light-text + color: var(--q-color-light-text) + border-radius: $table-border-radius + box-shadow: $table-box-shadow + + .q-table__middle + flex: 1 1 auto + + .q-table__top, + .q-table__bottom + flex: 0 0 auto + + &__container + position: relative + + &.fullscreen + max-height: 100% + + > div:first-child + border-top-left-radius: inherit + border-top-right-radius: inherit + + > div:last-child + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + + > .q-inner-loading + border-radius: inherit !important + + &__top + padding: 12px 16px + .q-table__control + flex-wrap: wrap + + &__title + font-size: 20px + letter-spacing: .005em + font-weight: 400 + + &__separator + min-width: 8px !important + + &__progress + height: 0 !important + th + padding: 0 !important + border: 0 !important + .q-linear-progress + position: absolute + bottom: 0 + + &__middle + max-width: 100% + + &__bottom + min-height: 50px + padding: 4px 14px 4px 16px + font-size: 12px + + .q-table__control + min-height: 24px + + &__bottom-nodata-icon + font-size: 200% + margin-right: 8px + + &__bottom-item + margin-right: 16px + + &__control + display: flex + align-items: center + + &__sort-icon + transition: transform $table-transition + opacity: 0 + font-size: 120% + + &--left, &--center + margin-left: 4px + &--right + margin-right: 4px + + &--col-auto-width + width: 1px + + &--flat + box-shadow: none + &--bordered + border: 1px solid $table-border-color + &--square + border-radius: 0 + + &__linear-progress + height: 2px + + &--no-wrap + th, td + white-space: nowrap + + &--grid + box-shadow: none + border-radius: $generic-border-radius + .q-table__top + padding-bottom: 4px + .q-table__middle + min-height: 2px + margin-bottom: 4px + thead + &, th + border: 0 !important + .q-table__linear-progress + bottom: 0 + .q-table__bottom + border-top: 0 + .q-table__grid-content + flex: 1 1 auto + + &.fullscreen + background: inherit + + &__grid-item-card + vertical-align: top + padding: 12px + + .q-separator + margin: 12px 0 + + &__grid-item-row + &__grid-item-row + margin-top: 8px + + &__grid-item-title + opacity: .54 + font-weight: 500 + font-size: 12px + + &__grid-item-value + font-size: 13px + + &__grid-item + padding: 4px + transition: transform $table-transition + + &--selected + transform: scale(.95) + +/* + * Separators + */ +.q-table--horizontal-separator, .q-table--cell-separator + thead th, tbody tr:not(:last-child) > td + border-bottom-width: 1px + +.q-table--vertical-separator, .q-table--cell-separator + td, th + border-left-width: 1px + thead tr:last-child th, + &.q-table--loading tr:nth-last-child(2) th + border-bottom-width: 1px + td:first-child, th:first-child + border-left: 0 + .q-table__top + border-bottom: 1px solid $table-border-color + +/* + * dense size + */ + +.q-table--dense + .q-table__top + padding: 6px 16px + .q-table__bottom + min-height: 33px + + .q-table__sort-icon + font-size: 110% + .q-table + th, td + padding: 4px 8px + thead tr, tbody tr, tbody td + height: 28px + th:first-child, td:first-child + padding-left: 16px + th:last-child, td:last-child + padding-right: 16px + + .q-table__bottom-item + margin-right: 8px + + .q-table__select + .q-field__control, .q-field__native + min-height: 24px + padding: 0 + .q-field__marginal + height: 24px + +/* + * On light background + */ +.q-table__bottom // @stylint ignore + border-top: 1px solid $table-border-color + +.q-table // @stylint ignore + thead, tr, th, td + border-color: $table-border-color + + tbody + td + position: relative + &:before, &:after + position: absolute + top: 0 + left: 0 + right: 0 + bottom: 0 + pointer-events: none + &:before + background: $table-hover-background + &:after + background: $table-selected-background + + tr.selected td:after + content: '' + +body.desktop .q-table > tbody > tr:not(.q-tr--no-hover):hover > td:not(.q-td--no-hover):before + content: '' + +/* + * On dark background + */ +.q-table__card--dark, .q-table--dark + border-color: $table-dark-border-color + +.q-table--dark + .q-table__bottom, thead, tr, th, td + border-color: $table-dark-border-color + + tbody + td + &:before + background: $table-dark-hover-background + &:after + background: $table-dark-selected-background + + &.q-table--vertical-separator, &.q-table--cell-separator + .q-table__top + border-color: $table-dark-border-color + +@media (prefers-color-scheme: dark) + .q-table__card--dark-auto, .q-table--dark-auto + border-color: $table-dark-border-color + + .q-table--dark-auto + .q-table__bottom, thead, tr, th, td + border-color: $table-dark-border-color + + tbody + td + &:before + background: $table-dark-hover-background + &:after + background: $table-dark-selected-background + + &.q-table--vertical-separator, &.q-table--cell-separator + .q-table__top + border-color: $table-dark-border-color diff --git a/src/components/table/QTd.js b/src/components/table/QTd.js new file mode 100644 index 00000000000..899b71fbd6f --- /dev/null +++ b/src/components/table/QTd.js @@ -0,0 +1,51 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QTd', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + autoWidth: Boolean, + noHover: Boolean + }, + + computed: { + classes () { + return 'q-td' + (this.autoWidth === true ? ' q-table--col-auto-width' : '') + + (this.noHover === true ? ' q-td--no-hover' : '') + ' ' + } + }, + + render (h) { + const on = this.qListeners + + if (this.props === void 0) { + return h('td', { + on, + class: this.classes + }, slot(this, 'default')) + } + + const name = this.$vnode.key + + const col = this.props.colsMap !== void 0 && name + ? this.props.colsMap[name] + : this.props.col + + if (col === void 0) { return } + + const row = this.props.row + + return h('td', { + on, + style: col.__tdStyle(row), + class: this.classes + col.__tdClass(row) + }, slot(this, 'default')) + } +}) diff --git a/src/components/table/QTd.json b/src/components/table/QTd.json new file mode 100644 index 00000000000..b7d2caf1aea --- /dev/null +++ b/src/components/table/QTd.json @@ -0,0 +1,37 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/table" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "props": { + "type": "Object", + "desc": "QTable's column scoped slot property", + "examples": [ ":props=\"props\"" ], + "category": "general" + }, + + "auto-width": { + "type": "Boolean", + "desc": "Tries to shrink column width size; Useful for columns with a checkbox/radio/toggle", + "category": "content" + }, + + "no-hover": { + "type": "Boolean", + "desc": "Disable hover effect", + "addedIn": "v1.5.9", + "category": "style" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/table/QTh.js b/src/components/table/QTh.js new file mode 100644 index 00000000000..2b57c48f476 --- /dev/null +++ b/src/components/table/QTh.js @@ -0,0 +1,73 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot, uniqueSlot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QTh', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + autoWidth: Boolean + }, + + render (h) { + const on = { ...this.qListeners } + + if (this.props === void 0) { + return h('th', { + on, + class: this.autoWidth === true ? 'q-table--col-auto-width' : null + }, slot(this, 'default')) + } + + let col, child + const name = this.$vnode.key + + if (name) { + col = this.props.colsMap[name] + if (col === void 0) { return } + } + else { + col = this.props.col + } + + if (col.sortable === true) { + const action = col.align === 'right' + ? 'unshift' + : 'push' + + child = uniqueSlot(this, 'default', []) + child[action]( + h(QIcon, { + props: { name: this.$q.iconSet.table.arrowUp }, + staticClass: col.__iconClass + }) + ) + } + else { + child = slot(this, 'default') + } + + const evt = col.sortable === true + ? { + click: evt => { + this.props.sort(col) + this.$emit('click', evt) + } + } + : {} + + return h('th', { + on: { ...on, ...evt }, + style: col.headerStyle, + class: col.__thClass + + (this.autoWidth === true ? ' q-table--col-auto-width' : '') + }, child) + } +}) diff --git a/src/components/table/QTh.json b/src/components/table/QTh.json new file mode 100644 index 00000000000..b59ff6aa2e9 --- /dev/null +++ b/src/components/table/QTh.json @@ -0,0 +1,30 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/table" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "props": { + "type": "Object", + "desc": "QTable's header column scoped slot property", + "examples": [ ":props=\"props\"" ], + "category": "general" + }, + + "auto-width": { + "type": "Boolean", + "desc": "Tries to shrink header column width size; Useful for columns with a checkbox/radio/toggle", + "category": "content" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/table/QTr.js b/src/components/table/QTr.js new file mode 100644 index 00000000000..dbb617abbf9 --- /dev/null +++ b/src/components/table/QTr.js @@ -0,0 +1,30 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QTr', + + mixins: [ ListenersMixin ], + + props: { + props: Object, + noHover: Boolean + }, + + computed: { + classes () { + return 'q-tr' + (this.props === void 0 || this.props.header === true ? '' : ' ' + this.props.__trClass) + + (this.noHover === true ? ' q-tr--no-hover' : '') + } + }, + + render (h) { + return h('tr', { + on: { ...this.qListeners }, + class: this.classes + }, slot(this, 'default')) + } +}) diff --git a/src/components/table/QTr.json b/src/components/table/QTr.json new file mode 100644 index 00000000000..1839144c735 --- /dev/null +++ b/src/components/table/QTr.json @@ -0,0 +1,31 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/table" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "props": { + "type": "Object", + "desc": "QTable's row scoped slot property", + "examples": [ ":props=\"props\"" ], + "category": "general" + }, + + "no-hover": { + "type": "Boolean", + "desc": "Disable hover effect", + "addedIn": "v1.5.9", + "category": "style" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/table/get-table-middle.js b/src/components/table/get-table-middle.js new file mode 100644 index 00000000000..3cb63f00013 --- /dev/null +++ b/src/components/table/get-table-middle.js @@ -0,0 +1,8 @@ +export default function (h, conf, content) { + return h('div', { + ...conf, + staticClass: 'q-table__middle' + (conf.staticClass !== void 0 ? ' ' + conf.staticClass : '') + }, [ + h('table', { staticClass: 'q-table' }, content) + ]) +} diff --git a/src/components/table/index.js b/src/components/table/index.js new file mode 100644 index 00000000000..c21386d7a8d --- /dev/null +++ b/src/components/table/index.js @@ -0,0 +1,11 @@ +import QTable from './QTable.js' +import QTh from './QTh.js' +import QTr from './QTr.js' +import QTd from './QTd.js' + +export { + QTable, + QTh, + QTr, + QTd +} diff --git a/src/components/table/table-body.js b/src/components/table/table-body.js new file mode 100644 index 00000000000..51709898820 --- /dev/null +++ b/src/components/table/table-body.js @@ -0,0 +1,169 @@ +import QCheckbox from '../checkbox/QCheckbox.js' + +import { injectProp } from '../../utils/private/inject-obj-prop.js' + +export default { + methods: { + __getTBodyTR (h, row, bodySlot, pageIndex) { + const + key = this.getRowKey(row), + selected = this.isRowSelected(key) + + if (bodySlot !== void 0) { + return bodySlot( + this.__getBodyScope({ + key, + row, + pageIndex, + __trClass: selected ? 'selected' : '' + }) + ) + } + + const + bodyCell = this.$scopedSlots['body-cell'], + child = this.computedCols.map(col => { + const + bodyCellCol = this.$scopedSlots[`body-cell-${col.name}`], + slot = bodyCellCol !== void 0 ? bodyCellCol : bodyCell + + return slot !== void 0 + ? slot(this.__getBodyCellScope({ key, row, pageIndex, col })) + : h('td', { + class: col.__tdClass(row), + style: col.__tdStyle(row) + }, this.getCellValue(col, row)) + }) + + if (this.hasSelectionMode === true) { + const slot = this.$scopedSlots['body-selection'] + const content = slot !== void 0 + ? slot(this.__getBodySelectionScope({ key, row, pageIndex })) + : [ + h(QCheckbox, { + props: { + value: selected, + color: this.color, + dark: this.dark, + dense: this.dense + }, + on: { + input: (adding, evt) => { + this.__updateSelection([ key ], [ row ], adding, evt) + } + } + }) + ] + + child.unshift( + h('td', { staticClass: 'q-table--col-auto-width' }, content) + ) + } + + const data = { key, class: { selected }, on: {} } + + if (this.qListeners['row-click'] !== void 0) { + data.class['cursor-pointer'] = true + data.on.click = evt => { + this.$emit('row-click', evt, row, pageIndex) + } + } + + if (this.qListeners['row-dblclick'] !== void 0) { + data.class['cursor-pointer'] = true + data.on.dblclick = evt => { + this.$emit('row-dblclick', evt, row, pageIndex) + } + } + + if (this.qListeners['row-contextmenu'] !== void 0) { + data.class['cursor-pointer'] = true + data.on.contextmenu = evt => { + this.$emit('row-contextmenu', evt, row, pageIndex) + } + } + + return h('tr', data, child) + }, + + __getTBody (h) { + const + body = this.$scopedSlots.body, + topRow = this.$scopedSlots['top-row'], + bottomRow = this.$scopedSlots['bottom-row'] + + let child = this.computedRows.map( + (row, pageIndex) => this.__getTBodyTR(h, row, body, pageIndex) + ) + + if (topRow !== void 0) { + child = topRow({ cols: this.computedCols }).concat(child) + } + if (bottomRow !== void 0) { + child = child.concat(bottomRow({ cols: this.computedCols })) + } + + return h('tbody', child) + }, + + __getVirtualTBodyTR (h) { + const body = this.$scopedSlots.body + return props => this.__getTBodyTR(h, props.item, body, props.index) + }, + + __getBodyScope (data) { + this.__injectBodyCommonScope(data) + + data.cols = data.cols.map(col => injectProp( + { ...col }, + 'value', + () => this.getCellValue(col, data.row) + )) + + return data + }, + + __getBodyCellScope (data) { + this.__injectBodyCommonScope(data) + return injectProp(data, 'value', () => this.getCellValue(data.col, data.row)) + }, + + __getBodySelectionScope (data) { + this.__injectBodyCommonScope(data) + return data + }, + + __injectBodyCommonScope (data) { + Object.assign(data, { + cols: this.computedCols, + colsMap: this.computedColsMap, + sort: this.sort, + rowIndex: this.firstRowIndex + data.pageIndex, + color: this.color, + dark: this.dark, + dense: this.dense + }) + + this.hasSelectionMode === true && injectProp( + data, + 'selected', + () => this.isRowSelected(data.key), + (adding, evt) => { + this.__updateSelection([ data.key ], [ data.row ], adding, evt) + } + ) + + injectProp( + data, + 'expand', + () => this.isRowExpanded(data.key), + adding => { this.__updateExpanded(data.key, adding) } + ) + }, + + getCellValue (col, row) { + const val = typeof col.field === 'function' ? col.field(row) : row[col.field] + return col.format !== void 0 ? col.format(val, row) : val + } + } +} diff --git a/src/components/table/table-bottom.js b/src/components/table/table-bottom.js new file mode 100644 index 00000000000..4f603272c01 --- /dev/null +++ b/src/components/table/table-bottom.js @@ -0,0 +1,213 @@ +import QSelect from '../select/QSelect.js' +import QBtn from '../btn/QBtn.js' +import QIcon from '../icon/QIcon.js' + +import cache from '../../utils/private/cache.js' + +const staticClass = 'q-table__bottom row items-center' + +export default { + props: { + hideBottom: Boolean, + hideSelectedBanner: Boolean, + hideNoData: Boolean, + hidePagination: Boolean + }, + + computed: { + navIcon () { + const ico = [ + this.iconFirstPage || this.$q.iconSet.table.firstPage, + this.iconPrevPage || this.$q.iconSet.table.prevPage, + this.iconNextPage || this.$q.iconSet.table.nextPage, + this.iconLastPage || this.$q.iconSet.table.lastPage + ] + return this.$q.lang.rtl === true ? ico.reverse() : ico + } + }, + + methods: { + __getBottomDiv (h) { + if (this.hideBottom === true) { + return + } + + if (this.nothingToDisplay === true) { + if (this.hideNoData === true) { + return + } + + const message = this.loading === true + ? this.loadingLabel || this.$q.lang.table.loading + : (this.filter ? this.noResultsLabel || this.$q.lang.table.noResults : this.noDataLabel || this.$q.lang.table.noData) + + const noData = this.$scopedSlots['no-data'] + const children = noData !== void 0 + ? [ noData({ message, icon: this.$q.iconSet.table.warning, filter: this.filter }) ] + : [ + h(QIcon, { + staticClass: 'q-table__bottom-nodata-icon', + props: { name: this.$q.iconSet.table.warning } + }), + message + ] + + return h('div', { + staticClass: staticClass + ' q-table__bottom--nodata' + }, children) + } + + const bottom = this.$scopedSlots.bottom + + if (bottom !== void 0) { + return h('div', { staticClass }, [ bottom(this.marginalsScope) ]) + } + + const child = this.hideSelectedBanner !== true && this.hasSelectionMode === true && this.rowsSelectedNumber > 0 + ? [ + h('div', { staticClass: 'q-table__control' }, [ + h('div', [ + (this.selectedRowsLabel || this.$q.lang.table.selectedRecords)(this.rowsSelectedNumber) + ]) + ]) + ] + : [] + + if (this.hidePagination !== true) { + return h('div', { + staticClass: staticClass + ' justify-end' + }, this.__getPaginationDiv(h, child)) + } + + if (child.length > 0) { + return h('div', { staticClass }, child) + } + }, + + __getPaginationDiv (h, child) { + let control + const + { rowsPerPage } = this.computedPagination, + paginationLabel = this.paginationLabel || this.$q.lang.table.pagination, + paginationSlot = this.$scopedSlots.pagination, + hasOpts = this.rowsPerPageOptions.length > 1 + + child.push( + h('div', { staticClass: 'q-table__separator col' }) + ) + + if (hasOpts === true) { + child.push( + h('div', { staticClass: 'q-table__control' }, [ + h('span', { staticClass: 'q-table__bottom-item' }, [ + this.rowsPerPageLabel || this.$q.lang.table.recordsPerPage + ]), + h(QSelect, { + key: 'pgSize', + staticClass: 'q-table__select inline q-table__bottom-item', + props: { + color: this.color, + value: rowsPerPage, + options: this.computedRowsPerPageOptions, + displayValue: rowsPerPage === 0 + ? this.$q.lang.table.allRows + : rowsPerPage, + dark: this.dark, + borderless: true, + dense: true, + optionsDense: true, + optionsCover: true + }, + on: cache(this, 'pgSize', { + input: pag => { + this.setPagination({ + page: 1, + rowsPerPage: pag.value + }) + } + }) + }) + ]) + ) + } + + if (paginationSlot !== void 0) { + control = paginationSlot(this.marginalsScope) + } + else { + control = [ + h('span', rowsPerPage !== 0 ? { staticClass: 'q-table__bottom-item' } : {}, [ + rowsPerPage + ? paginationLabel(this.firstRowIndex + 1, Math.min(this.lastRowIndex, this.computedRowsNumber), this.computedRowsNumber) + : paginationLabel(1, this.filteredSortedRowsNumber, this.computedRowsNumber) + ]) + ] + + if (rowsPerPage !== 0 && this.pagesNumber > 1) { + const btnProps = { + color: this.color, + round: true, + dense: true, + flat: true + } + + if (this.dense === true) { + btnProps.size = 'sm' + } + + this.pagesNumber > 2 && control.push( + h(QBtn, { + key: 'pgFirst', + props: { + ...btnProps, + icon: this.navIcon[0], + disable: this.isFirstPage + }, + on: cache(this, 'pgFirst', { click: this.firstPage }) + }) + ) + + control.push( + h(QBtn, { + key: 'pgPrev', + props: { + ...btnProps, + icon: this.navIcon[1], + disable: this.isFirstPage + }, + on: cache(this, 'pgPrev', { click: this.prevPage }) + }), + + h(QBtn, { + key: 'pgNext', + props: { + ...btnProps, + icon: this.navIcon[2], + disable: this.isLastPage + }, + on: cache(this, 'pgNext', { click: this.nextPage }) + }) + ) + + this.pagesNumber > 2 && control.push( + h(QBtn, { + key: 'pgLast', + props: { + ...btnProps, + icon: this.navIcon[3], + disable: this.isLastPage + }, + on: cache(this, 'pgLast', { click: this.lastPage }) + }) + ) + } + } + + child.push( + h('div', { staticClass: 'q-table__control' }, control) + ) + + return child + } + } +} diff --git a/src/components/table/table-column-selection.js b/src/components/table/table-column-selection.js new file mode 100644 index 00000000000..80166d2dae2 --- /dev/null +++ b/src/components/table/table-column-selection.js @@ -0,0 +1,81 @@ +import { isNumber } from '../../utils/is.js' + +export default { + props: { + visibleColumns: Array + }, + + computed: { + colList () { + if (this.columns !== void 0) { + return this.columns + } + + // we infer columns from first row + const row = this.data[0] + + return row !== void 0 + ? Object.keys(row).map(name => ({ + name, + label: name.toUpperCase(), + field: name, + align: isNumber(row[name]) ? 'right' : 'left', + sortable: true + })) + : [] + }, + + computedCols () { + const { sortBy, descending } = this.computedPagination + + const cols = this.visibleColumns !== void 0 + ? this.colList.filter(col => col.required === true || this.visibleColumns.includes(col.name) === true) + : this.colList + + return cols.map(col => { + const align = col.align || 'right' + const alignClass = `text-${align}` + + return { + ...col, + align, + __iconClass: `q-table__sort-icon q-table__sort-icon--${align}`, + __thClass: alignClass + + (col.headerClasses !== void 0 ? ' ' + col.headerClasses : '') + + (col.sortable === true ? ' sortable' : '') + + (col.name === sortBy ? ` sorted ${descending === true ? 'sort-desc' : ''}` : ''), + + __tdStyle: col.style !== void 0 + ? ( + typeof col.style !== 'function' + ? () => col.style + : col.style + ) + : () => null, + + __tdClass: col.classes !== void 0 + ? ( + typeof col.classes !== 'function' + ? () => alignClass + ' ' + col.classes + : row => alignClass + ' ' + col.classes(row) + ) + : () => alignClass + } + }) + }, + + computedColsMap () { + const names = {} + this.computedCols.forEach(col => { + names[col.name] = col + }) + return names + }, + + computedColspan () { + return this.tableColspan !== void 0 + ? this.tableColspan + : this.computedCols.length + (this.hasSelectionMode === true ? 1 : 0) + } + } +} diff --git a/src/components/table/table-filter.js b/src/components/table/table-filter.js new file mode 100644 index 00000000000..05cd1e960e7 --- /dev/null +++ b/src/components/table/table-filter.js @@ -0,0 +1,29 @@ +export default { + props: { + filter: [String, Object], + filterMethod: { + type: Function, + default (rows, terms, cols = this.computedCols, cellValue = this.getCellValue) { + const lowerTerms = terms ? terms.toLowerCase() : '' + return rows.filter( + row => cols.some(col => { + const val = cellValue(col, row) + '' + const haystack = (val === 'undefined' || val === 'null') ? '' : val.toLowerCase() + return haystack.indexOf(lowerTerms) !== -1 + }) + ) + } + } + }, + + watch: { + filter: { + handler () { + this.$nextTick(() => { + this.setPagination({ page: 1 }, true) + }) + }, + deep: true + } + } +} diff --git a/src/components/table/table-grid.js b/src/components/table/table-grid.js new file mode 100644 index 00000000000..d5b7d697ef0 --- /dev/null +++ b/src/components/table/table-grid.js @@ -0,0 +1,103 @@ +import QCheckbox from '../checkbox/QCheckbox.js' +import QSeparator from '../separator/QSeparator.js' + +export default { + methods: { + __getGridHeader (h) { + const child = this.gridHeader === true + ? [ + h('table', { staticClass: 'q-table' }, [ + this.__getTHead(h) + ]) + ] + : ( + this.loading === true && this.$scopedSlots.loading === void 0 + ? this.__getProgress(h) + : void 0 + ) + + return h('div', { staticClass: 'q-table__middle' }, child) + }, + + __getGridBody (h) { + const item = this.$scopedSlots.item !== void 0 + ? this.$scopedSlots.item + : scope => { + const child = scope.cols.map( + col => h('div', { staticClass: 'q-table__grid-item-row' }, [ + h('div', { staticClass: 'q-table__grid-item-title' }, [ col.label ]), + h('div', { staticClass: 'q-table__grid-item-value' }, [ col.value ]) + ]) + ) + + if (this.hasSelectionMode === true) { + const slot = this.$scopedSlots['body-selection'] + const content = slot !== void 0 + ? slot(scope) + : [ + h(QCheckbox, { + props: { + value: scope.selected, + color: this.color, + dark: this.dark, + dense: this.dense + }, + on: { + input: (adding, evt) => { + this.__updateSelection([ scope.key ], [ scope.row ], adding, evt) + } + } + }) + ] + + child.unshift( + h('div', { staticClass: 'q-table__grid-item-row' }, content), + h(QSeparator, { props: { dark: this.dark } }) + ) + } + + const data = { + staticClass: 'q-table__grid-item-card' + this.cardDefaultClass, + class: this.cardClass, + style: this.cardStyle, + on: {} + } + + if (this.qListeners['row-click'] !== void 0 || this.qListeners['row-dblclick'] !== void 0) { + data.staticClass += ' cursor-pointer' + } + + if (this.qListeners['row-click'] !== void 0) { + data.on.click = evt => { + this.$emit('row-click', evt, scope.row, scope.pageIndex) + } + } + + if (this.qListeners['row-dblclick'] !== void 0) { + data.on.dblclick = evt => { + this.$emit('row-dblclick', evt, scope.row, scope.pageIndex) + } + } + + return h('div', { + staticClass: 'q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3', + class: scope.selected === true ? 'q-table__grid-item--selected' : '' + }, [ + h('div', data, child) + ]) + } + + return h('div', { + staticClass: 'q-table__grid-content row', + class: this.cardContainerClass, + style: this.cardContainerStyle + }, this.computedRows.map((row, pageIndex) => { + return item(this.__getBodyScope({ + key: this.getRowKey(row), + row, + pageIndex + })) + })) + } + } +} diff --git a/src/components/table/table-header.js b/src/components/table/table-header.js new file mode 100644 index 00000000000..118742b4247 --- /dev/null +++ b/src/components/table/table-header.js @@ -0,0 +1,130 @@ +import QCheckbox from '../checkbox/QCheckbox.js' +import QTh from './QTh.js' + +import cache from '../../utils/private/cache.js' +import { injectProp } from '../../utils/private/inject-obj-prop.js' + +export default { + computed: { + headerSelectedValue () { + return this.someRowsSelected === true + ? null + : this.allRowsSelected + } + }, + + methods: { + __getTHead (h) { + const child = this.__getTHeadTR(h) + + if (this.loading === true && this.$scopedSlots.loading === void 0) { + child.push( + h('tr', { staticClass: 'q-table__progress' }, [ + h('th', { + staticClass: 'relative-position', + attrs: { colspan: this.computedColspan } + }, this.__getProgress(h)) + ]) + ) + } + + return h('thead', child) + }, + + __getTHeadTR (h) { + const + header = this.$scopedSlots.header, + headerCell = this.$scopedSlots['header-cell'] + + if (header !== void 0) { + return header( + this.__getHeaderScope({ header: true }) + ).slice() + } + + const child = this.computedCols.map(col => { + const + headerCellCol = this.$scopedSlots[`header-cell-${col.name}`], + slot = headerCellCol !== void 0 ? headerCellCol : headerCell, + props = this.__getHeaderScope({ col }) + + return slot !== void 0 + ? slot(props) + : h(QTh, { + key: col.name, + props: { props } + }, col.label) + }) + + if (this.singleSelection === true && this.grid !== true) { + child.unshift(h('th', { staticClass: 'q-table--col-auto-width' }, [' '])) + } + else if (this.multipleSelection === true) { + const slot = this.$scopedSlots['header-selection'] + const content = slot !== void 0 + ? slot(this.__getHeaderScope({})) + : [ + h(QCheckbox, { + key: 'inp', + props: { + color: this.color, + value: this.headerSelectedValue, + dark: this.dark, + dense: this.dense + }, + on: cache(this, 'inp', { + input: this.__onMultipleSelectionSet + }) + }) + ] + + child.unshift( + h('th', { staticClass: 'q-table--col-auto-width' }, content) + ) + } + + return [ + h('tr', { + style: this.tableHeaderStyle, + class: this.tableHeaderClass + }, child) + ] + }, + + __getHeaderScope (data) { + Object.assign(data, { + cols: this.computedCols, + sort: this.sort, + colsMap: this.computedColsMap, + color: this.color, + dark: this.dark, + dense: this.dense + }) + + if (this.multipleSelection === true) { + injectProp( + data, + 'selected', + () => this.headerSelectedValue, + this.__onMultipleSelectionSet + ) + + data.partialSelected = this.someRowsSelected + data.multipleSelect = true + } + + return data + }, + + __onMultipleSelectionSet (val) { + if (this.someRowsSelected === true) { + val = false + } + this.__updateSelection( + this.computedRows.map(this.getRowKey), + this.computedRows, + val + ) + } + } +} diff --git a/src/components/table/table-pagination.js b/src/components/table/table-pagination.js new file mode 100644 index 00000000000..0e25360bed3 --- /dev/null +++ b/src/components/table/table-pagination.js @@ -0,0 +1,157 @@ +function samePagination (oldPag, newPag) { + for (const prop in newPag) { + if (newPag[prop] !== oldPag[prop]) { + return false + } + } + return true +} + +function fixPagination (p) { + if (p.page < 1) { + p.page = 1 + } + if (p.rowsPerPage !== void 0 && p.rowsPerPage < 1) { + p.rowsPerPage = 0 + } + return p +} + +export default { + props: { + pagination: Object, + rowsPerPageOptions: { + type: Array, + default: () => [ 5, 7, 10, 15, 20, 25, 50, 0 ] + } + }, + + computed: { + computedPagination () { + const pag = this.qListeners['update:pagination'] !== void 0 + ? { ...this.innerPagination, ...this.pagination } + : this.innerPagination + + return fixPagination(pag) + }, + + firstRowIndex () { + const { page, rowsPerPage } = this.computedPagination + return (page - 1) * rowsPerPage + }, + + lastRowIndex () { + const { page, rowsPerPage } = this.computedPagination + return page * rowsPerPage + }, + + isFirstPage () { + return this.computedPagination.page === 1 + }, + + pagesNumber () { + return this.computedPagination.rowsPerPage === 0 + ? 1 + : Math.max( + 1, + Math.ceil(this.computedRowsNumber / this.computedPagination.rowsPerPage) + ) + }, + + isLastPage () { + return this.lastRowIndex === 0 + ? true + : this.computedPagination.page >= this.pagesNumber + }, + + computedRowsPerPageOptions () { + const opts = this.rowsPerPageOptions.includes(this.innerPagination.rowsPerPage) + ? this.rowsPerPageOptions + : [ this.innerPagination.rowsPerPage ].concat(this.rowsPerPageOptions) + + return opts.map(count => ({ + label: count === 0 ? this.$q.lang.table.allRows : '' + count, + value: count + })) + } + }, + + watch: { + pagesNumber (lastPage, oldLastPage) { + if (lastPage === oldLastPage) { + return + } + + const currentPage = this.computedPagination.page + if (lastPage && !currentPage) { + this.setPagination({ page: 1 }) + } + else if (lastPage < currentPage) { + this.setPagination({ page: lastPage }) + } + } + }, + + methods: { + __sendServerRequest (pagination) { + this.requestServerInteraction({ + pagination, + filter: this.filter + }) + }, + + setPagination (val, forceServerRequest) { + const newPagination = fixPagination({ + ...this.computedPagination, + ...val + }) + + if (samePagination(this.computedPagination, newPagination) === true) { + if (this.isServerSide === true && forceServerRequest === true) { + this.__sendServerRequest(newPagination) + } + return + } + + if (this.isServerSide === true) { + this.__sendServerRequest(newPagination) + return + } + + if (this.pagination !== void 0 && this.qListeners['update:pagination'] !== void 0) { + this.$emit('update:pagination', newPagination) + } + else { + this.innerPagination = newPagination + } + }, + + firstPage () { + this.setPagination({ page: 1 }) + }, + + prevPage () { + const { page } = this.computedPagination + if (page > 1) { + this.setPagination({ page: page - 1 }) + } + }, + + nextPage () { + const { page, rowsPerPage } = this.computedPagination + if (this.lastRowIndex > 0 && page * rowsPerPage < this.computedRowsNumber) { + this.setPagination({ page: page + 1 }) + } + }, + + lastPage () { + this.setPagination({ page: this.pagesNumber }) + } + }, + + created () { + if (this.qListeners['update:pagination'] !== void 0) { + this.$emit('update:pagination', { ...this.computedPagination }) + } + } +} diff --git a/src/components/table/table-row-expand.js b/src/components/table/table-row-expand.js new file mode 100644 index 00000000000..c0baace3cd2 --- /dev/null +++ b/src/components/table/table-row-expand.js @@ -0,0 +1,54 @@ +function getVal (val) { + return Array.isArray(val) + ? val.slice() + : [] +} + +export default { + props: { + expanded: Array // sync + }, + + data () { + return { + innerExpanded: getVal(this.expanded) + } + }, + + watch: { + expanded (val) { + this.innerExpanded = getVal(val) + } + }, + + methods: { + isRowExpanded (key) { + return this.innerExpanded.includes(key) + }, + + setExpanded (val) { + if (this.expanded !== void 0) { + this.$emit('update:expanded', val) + } + else { + this.innerExpanded = val + } + }, + + __updateExpanded (key, add) { + const target = this.innerExpanded.slice() + const index = target.indexOf(key) + + if (add === true) { + if (index === -1) { + target.push(key) + this.setExpanded(target) + } + } + else if (index !== -1) { + target.splice(index, 1) + this.setExpanded(target) + } + } + } +} diff --git a/src/components/table/table-row-selection.js b/src/components/table/table-row-selection.js new file mode 100644 index 00000000000..ec28e5b9741 --- /dev/null +++ b/src/components/table/table-row-selection.js @@ -0,0 +1,76 @@ +export default { + props: { + selection: { + type: String, + default: 'none', + validator: v => ['single', 'multiple', 'none'].includes(v) + }, + selected: { + type: Array, + default: () => [] + } + }, + + computed: { + selectedKeys () { + const keys = {} + this.selected.map(this.getRowKey).forEach(key => { + keys[key] = true + }) + return keys + }, + + hasSelectionMode () { + return this.selection !== 'none' + }, + + singleSelection () { + return this.selection === 'single' + }, + + multipleSelection () { + return this.selection === 'multiple' + }, + + allRowsSelected () { + return this.computedRows.length > 0 && this.computedRows.every( + row => this.selectedKeys[ this.getRowKey(row) ] === true + ) + }, + + someRowsSelected () { + return this.allRowsSelected !== true && + this.computedRows.some(row => this.selectedKeys[ this.getRowKey(row) ] === true) + }, + + rowsSelectedNumber () { + return this.selected.length + } + }, + + methods: { + isRowSelected (key) { + return this.selectedKeys[key] === true + }, + + clearSelection () { + this.$emit('update:selected', []) + }, + + __updateSelection (keys, rows, added, evt) { + this.$emit('selection', { rows, added, keys, evt }) + + const payload = this.singleSelection === true + ? (added === true ? rows : []) + : ( + added === true + ? this.selected.concat(rows) + : this.selected.filter( + row => keys.includes(this.getRowKey(row)) === false + ) + ) + + this.$emit('update:selected', payload) + } + } +} diff --git a/src/components/table/table-sort.js b/src/components/table/table-sort.js new file mode 100644 index 00000000000..1108b28ba4a --- /dev/null +++ b/src/components/table/table-sort.js @@ -0,0 +1,117 @@ +import { sortDate } from '../../utils/private/sort.js' +import { isNumber, isDate, isObject } from '../../utils/is.js' + +export default { + props: { + sortMethod: { + type: Function, + default (data, sortBy, descending) { + const col = this.colList.find(def => def.name === sortBy) + if (col === void 0 || col.field === void 0) { + return data + } + + const + dir = descending === true ? -1 : 1, + val = typeof col.field === 'function' + ? v => col.field(v) + : v => v[col.field] + + return data.sort((a, b) => { + let + A = val(a), + B = val(b) + + if (A === null || A === void 0) { + return -1 * dir + } + if (B === null || B === void 0) { + return 1 * dir + } + if (col.sort !== void 0) { + return col.sort(A, B, a, b) * dir + } + if (isNumber(A) === true && isNumber(B) === true) { + return (A - B) * dir + } + if (isDate(A) === true && isDate(B) === true) { + return sortDate(A, B) * dir + } + if (typeof A === 'boolean' && typeof B === 'boolean') { + return (A - B) * dir + } + + [A, B] = [A, B].map(s => (s + '').toLocaleString().toLowerCase()) + + return A < B + ? -1 * dir + : (A === B ? 0 : dir) + }) + } + }, + + columnSortOrder: { + type: String, + validator: v => v === 'ad' || v === 'da', + default: 'ad' + } + }, + + computed: { + columnToSort () { + const { sortBy } = this.computedPagination + + if (sortBy) { + return this.colList.find(def => def.name === sortBy) || null + } + } + }, + + methods: { + sort (col /* String(col name) or Object(col definition) */) { + let sortOrder = this.columnSortOrder + + if (isObject(col) === true) { + if (col.sortOrder) { + sortOrder = col.sortOrder + } + + col = col.name + } + else { + const def = this.colList.find(def => def.name === col) + if (def !== void 0 && def.sortOrder) { + sortOrder = def.sortOrder + } + } + + let { sortBy, descending } = this.computedPagination + + if (sortBy !== col) { + sortBy = col + descending = sortOrder === 'da' + } + else if (this.binaryStateSort === true) { + descending = !descending + } + else if (descending === true) { + if (sortOrder === 'ad') { + sortBy = null + } + else { + descending = false + } + } + else { // ascending + if (sortOrder === 'ad') { + descending = true + } + else { + sortBy = null + } + } + + this.setPagination({ sortBy, descending, page: 1 }) + } + } +} diff --git a/src/components/table/table-top.js b/src/components/table/table-top.js new file mode 100644 index 00000000000..0ef0e55c076 --- /dev/null +++ b/src/components/table/table-top.js @@ -0,0 +1,76 @@ +export default { + computed: { + marginalsScope () { + return { + pagination: this.computedPagination, + pagesNumber: this.pagesNumber, + isFirstPage: this.isFirstPage, + isLastPage: this.isLastPage, + firstPage: this.firstPage, + prevPage: this.prevPage, + nextPage: this.nextPage, + lastPage: this.lastPage, + + inFullscreen: this.inFullscreen, + toggleFullscreen: this.toggleFullscreen + } + } + }, + + methods: { + __getTopDiv (h) { + const + top = this.$scopedSlots.top, + topLeft = this.$scopedSlots['top-left'], + topRight = this.$scopedSlots['top-right'], + topSelection = this.$scopedSlots['top-selection'], + hasSelection = this.hasSelectionMode === true && + topSelection !== void 0 && + this.rowsSelectedNumber > 0, + staticClass = 'q-table__top relative-position row items-center' + + if (top !== void 0) { + return h('div', { staticClass }, [ top(this.marginalsScope) ]) + } + + let child + + if (hasSelection === true) { + child = topSelection(this.marginalsScope).slice() + } + else { + child = [] + + if (topLeft !== void 0) { + child.push( + h('div', { staticClass: 'q-table-control' }, [ + topLeft(this.marginalsScope) + ]) + ) + } + else if (this.title) { + child.push( + h('div', { staticClass: 'q-table__control' }, [ + h('div', { staticClass: 'q-table__title', class: this.titleClass }, this.title) + ]) + ) + } + } + + if (topRight !== void 0) { + child.push(h('div', { staticClass: 'q-table__separator col' })) + child.push( + h('div', { staticClass: 'q-table__control' }, [ + topRight(this.marginalsScope) + ]) + ) + } + + if (child.length === 0) { + return + } + + return h('div', { staticClass }, child) + } + } +} diff --git a/src/components/tabs/QRouteTab.js b/src/components/tabs/QRouteTab.js new file mode 100644 index 00000000000..dce5edfdbb5 --- /dev/null +++ b/src/components/tabs/QRouteTab.js @@ -0,0 +1,34 @@ +import Vue from 'vue' + +import QTab from './QTab.js' +import RouterLinkMixin from '../../mixins/router-link.js' + +export default Vue.extend({ + name: 'QRouteTab', + + mixins: [ QTab, RouterLinkMixin ], + + watch: { + routeModel () { + this.$tabs.__verifyRouteModel() + } + }, + + computed: { + routeModel () { + return `${this.name} | ${this.exact} | ${(this.resolvedLink || {}).href}` + }, + + // overwritten from RouterLinkMixin + // because we want to discard the "disable" state + hasRouterLinkProps () { + return this.$router !== void 0 && + this.hasHrefLink !== true && + this.to !== void 0 && this.to !== null && this.to !== '' + } + }, + + render (h) { + return this.__renderTab(h, this.linkTag) + } +}) diff --git a/src/components/tabs/QRouteTab.json b/src/components/tabs/QRouteTab.json new file mode 100644 index 00000000000..033ad783c6e --- /dev/null +++ b/src/components/tabs/QRouteTab.json @@ -0,0 +1,54 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tabs" + }, + + "mixins": [ "components/tabs/QTab", "mixins/router-link" ], + + "events": { + "click": { + "desc": "Emitted when component is clicked (activated)", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object; If you want to cancel navigation set synchronously 'evt.navigate' to false", + "__exemption": [ "examples" ] + }, + "navigateFn": { + "type": "Function", + "desc": "When you need to control the time at which the tab should trigger the route navigation then set 'evt.navigate' to false and call this function at your convenience; Useful if you have async work to be done before the actual route navigation or you want to navigate elsewhere", + "params": { + "to": { + "type": [ "String", "Object" ], + "desc": "Equivalent to Vue Router 'to' property", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ], + "default": "Tab's 'to' property" + }, + + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property", + "default": "Tab's 'append' property" + }, + + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property", + "default": "Tab's 'replace' property" + } + }, + "returns": { + "type": "Promise", + "desc": "Returns the router's navigation promise", + "__exemption": [ "examples" ], + "addedIn": "v1.21" + } + } + }, + "addedIn": "v1.13" + } + } +} diff --git a/src/components/tabs/QTab.js b/src/components/tabs/QTab.js new file mode 100644 index 00000000000..eca7cdaacee --- /dev/null +++ b/src/components/tabs/QTab.js @@ -0,0 +1,288 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' + +import RippleMixin from '../../mixins/ripple.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { stop, stopAndPrevent } from '../../utils/event.js' +import { mergeSlot } from '../../utils/private/slot.js' +import { isKeyCode, shouldIgnoreKey } from '../../utils/private/key-composition.js' +import uid from '../../utils/uid.js' +import { isDeepEqual } from '../../utils/is.js' + +let id = 0 + +export default Vue.extend({ + name: 'QTab', + + mixins: [ RippleMixin, ListenersMixin ], + + inject: { + $tabs: { + default () { + console.error('QTab/QRouteTab components need to be child of QTabs') + } + } + }, + + props: { + icon: String, + label: [Number, String], + + alert: [Boolean, String], + alertIcon: String, + + name: { + type: [Number, String], + default: () => `t_${id++}` + }, + + noCaps: Boolean, + + tabindex: [String, Number], + disable: Boolean, + + contentClass: String + }, + + computed: { + isActive () { + return this.$tabs.currentModel === this.name + }, + + classes () { + return 'q-tab relative-position self-stretch flex flex-center text-center' + + ( + this.isActive === true + ? ( + ' q-tab--active' + + (this.$tabs.tabProps.activeClass ? ' ' + this.$tabs.tabProps.activeClass : '') + + (this.$tabs.tabProps.activeColor ? ` text-${this.$tabs.tabProps.activeColor}` : '') + + (this.$tabs.tabProps.activeBgColor ? ` bg-${this.$tabs.tabProps.activeBgColor}` : '') + ) + : ' q-tab--inactive' + ) + + (this.icon && this.label && this.$tabs.tabProps.inlineLabel === false ? ' q-tab--full' : '') + + (this.noCaps === true || this.$tabs.tabProps.noCaps === true ? ' q-tab--no-caps' : '') + + (this.disable === true ? ' disabled' : ' q-focusable q-hoverable cursor-pointer') + + (this.hasRouterLinkProps !== void 0 ? this.linkClass : '') + }, + + innerClass () { + return 'q-tab__content self-stretch flex-center relative-position q-anchor--skip non-selectable q-key-group-navigation--ignore-key ' + + (this.$tabs.tabProps.inlineLabel === true ? 'row no-wrap q-tab__content--inline' : 'column') + + (this.contentClass !== void 0 ? ` ${this.contentClass}` : '') + }, + + computedTabIndex () { + return ( + this.disable === true || + this.$tabs.hasFocus === true || + (this.isActive === false && this.$tabs.hasActiveTab === true) + ) + ? -1 + : this.tabindex || 0 + }, + + computedRipple () { + return this.ripple === false + ? false + : Object.assign( + { keyCodes: [13, 32], early: true }, + this.ripple === true ? {} : this.ripple + ) + }, + + onEvents () { + return { + input: stop, + ...this.qListeners, + click: this.__onClick, + keydown: this.__onKeydown + } + }, + + attrs () { + const attrs = { + ...this.linkAttrs, + tabindex: this.computedTabIndex, + role: 'tab', + 'aria-selected': this.isActive === true ? 'true' : 'false' + } + + if (this.disable === true) { + attrs['aria-disabled'] = 'true' + } + + return attrs + } + }, + + methods: { + __onClick (e, keyboard) { + if (keyboard !== true && this.$refs.blurTarget !== void 0) { + this.$refs.blurTarget.focus({ preventScroll: true }) + } + + if (this.disable === true) { + // we should hinder native navigation though + this.hasRouterLink === true && stopAndPrevent(e) + return + } + + // do we have a QTab? + if (this.hasRouterLinkProps === void 0) { + this.$tabs.__updateModel({ name: this.name }) + this.qListeners.click !== void 0 && this.$emit('click', e) + return + } + + if (this.hasRouterLink === true) { + const go = (first, second, third) => { + // for backwards compatibility + const { to, replace, append, returnRouterError } = e.navigate === false + ? { to: first, replace: second, append: third } + : (first || {}) + + // if requiring to go to another route, then we + // let the QTabs route watcher do its job, + // otherwise directly select this + let hardError + const reqId = to === void 0 || (append === this.append && isDeepEqual(to, this.to) === true) + ? (this.$tabs.avoidRouteWatcher = uid()) + : null + + return this.__navigateToRouterLink(e, { to, replace, append, returnRouterError: true }) + .catch(err => { hardError = err }) + .then(result => { + if (reqId === this.$tabs.avoidRouteWatcher) { + this.$tabs.avoidRouteWatcher = false + + // if we don't have any hard errors, except for + // when navigating to the same route (on all other errors, + // like when navigation was aborted in a nav guard, we don't activate this tab) + if ( + hardError === void 0 || + hardError.message.startsWith('Avoided redundant navigation') === true + ) { + this.$tabs.__updateModel({ name: this.name }) + } + } + + return hardError !== void 0 && returnRouterError === true + ? Promise.reject(hardError) + : result + }) + } + + this.qListeners.click !== void 0 && this.$emit('click', e, go) + + // for backwards compatibility + e.navigate === false && e.preventDefault() + + e.defaultPrevented !== true && go() + + return + } + + this.qListeners.click !== void 0 && this.$emit('click', e) + }, + + __onKeydown (e) { + if (isKeyCode(e, [ 13, 32 ])) { + this.__onClick(e, true) + } + else if ( + shouldIgnoreKey(e) !== true && + e.keyCode >= 35 && + e.keyCode <= 40 && + e.altKey !== true && + e.metaKey !== true + ) { + this.$tabs.__onKbdNavigate(e.keyCode, this.$el) === true && stopAndPrevent(e) + } + + this.qListeners.keydown !== void 0 && this.$emit('keydown', e) + }, + + __getContent (h) { + const + narrow = this.$tabs.tabProps.narrowIndicator, + content = [], + indicator = h('div', { + ref: 'tabIndicator', + staticClass: 'q-tab__indicator', + class: this.$tabs.tabProps.indicatorClass + }) + + this.icon !== void 0 && content.push( + h(QIcon, { + staticClass: 'q-tab__icon', + props: { name: this.icon } + }) + ) + + this.label !== void 0 && content.push( + h('div', { + staticClass: 'q-tab__label' + }, [ this.label ]) + ) + + this.alert !== false && content.push( + this.alertIcon !== void 0 + ? h(QIcon, { + staticClass: 'q-tab__alert-icon', + props: { + color: this.alert !== true + ? this.alert + : void 0, + name: this.alertIcon + } + }) + : h('div', { + staticClass: 'q-tab__alert', + class: this.alert !== true + ? `text-${this.alert}` + : null + }) + ) + + narrow === true && content.push(indicator) + + const node = [ + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: 'blurTarget' }), + h('div', { class: this.innerClass }, mergeSlot(content, this, 'default')) + ] + + narrow === false && node.push(indicator) + + return node + }, + + __renderTab (h, tag) { + const data = { + class: this.classes, + attrs: this.attrs, + on: this.onEvents, + directives: this.ripple === false || this.disable === true ? null : [ + { name: 'ripple', value: this.computedRipple } + ] + } + + return h(tag, data, this.__getContent(h)) + } + }, + + mounted () { + this.$tabs.__registerTab(this) + }, + + beforeDestroy () { + this.$tabs.__unregisterTab(this) + }, + + render (h) { + return this.__renderTab(h, 'div') + } +}) diff --git a/src/components/tabs/QTab.json b/src/components/tabs/QTab.json new file mode 100644 index 00000000000..4bb1800aa96 --- /dev/null +++ b/src/components/tabs/QTab.json @@ -0,0 +1,82 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tabs" + }, + + "mixins": [ "mixins/ripple" ], + + "behavior": { + "$listeners": true + }, + + "props": { + "icon": { + "extends": "icon" + }, + + "label": { + "type": [ "Number", "String" ], + "desc": "A number or string to label the tab", + "examples": [ "Home" ], + "category": "content" + }, + + "alert": { + "type": [ "Boolean", "String" ], + "desc": "Adds an alert symbol to the tab, notifying the user there are some updates; If its value is not a Boolean, then you can specify a color", + "examples": [ + "alert", + "alert=\"purple\"" + ], + "category": "content" + }, + + "alert-icon": { + "type": "String", + "desc": "Adds a floating icon to the tab, notifying the user there are some updates; It's displayed only if 'alert' is set; Can use the color specified by 'alert' prop", + "examples": [ + "alert-icon=\"alarm_on\"" + ], + "category": "content", + "addedIn": "v1.9.14" + }, + + "name": { + "type": [ "Number", "String" ], + "desc": "Panel name", + "default": "A random UID", + "examples": [ + "home", ":name=\"1\"" + ], + "category": "general" + }, + + "no-caps": { + "type": "Boolean", + "desc": "Turns off capitalizing all letters within the tab (which is the default)", + "category": "content" + }, + + "content-class": { + "type": "String", + "desc": "Class definitions to be attributed to the content wrapper", + "examples": [ "my-special-class" ], + "category": "style", + "addedIn": "v1.12" + }, + + "tabindex": { + "extends": "tabindex" + }, + + "disable": { + "extends": "disable" + } + }, + + "slots": { + "default": { + "desc": "Suggestion: QMenu, QTooltip" + } + } +} diff --git a/src/components/tabs/QTabs.js b/src/components/tabs/QTabs.js new file mode 100644 index 00000000000..04419e36b7d --- /dev/null +++ b/src/components/tabs/QTabs.js @@ -0,0 +1,761 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' +import QResizeObserver from '../resize-observer/QResizeObserver.js' + +import TimeoutMixin from '../../mixins/timeout.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { stop, noop } from '../../utils/event.js' +import { slot } from '../../utils/private/slot.js' +import cache from '../../utils/private/cache.js' +import { rtlHasScrollBug } from '../../utils/scroll.js' +import { injectProp } from '../../utils/private/inject-obj-prop.js' + +function getIndicatorClass (color, top, vertical) { + const pos = vertical === true + ? ['left', 'right'] + : ['top', 'bottom'] + + return `absolute-${top === true ? pos[0] : pos[1]}${color ? ` text-${color}` : ''}` +} + +const alignValues = [ 'left', 'center', 'right', 'justify' ] +const getDefaultBestScore = () => ({ matchedLen: 0, queryDiff: 9999, hrefLen: 0, exact: false, redirected: true }) + +function hasQueryIncluded (targetQuery, matchingQuery) { + for (const key in targetQuery) { + if (targetQuery[ key ] !== matchingQuery[ key ]) { + return false + } + } + + return true +} + +export default Vue.extend({ + name: 'QTabs', + + mixins: [ TimeoutMixin, ListenersMixin ], + + provide () { + return { $tabs: this } + }, + + props: { + value: [Number, String], + + align: { + type: String, + default: 'center', + validator: v => alignValues.includes(v) + }, + breakpoint: { + type: [String, Number], + default: 600 + }, + + vertical: Boolean, + shrink: Boolean, + stretch: Boolean, + + activeClass: String, + activeColor: String, + activeBgColor: String, + indicatorColor: String, + leftIcon: String, + rightIcon: String, + + outsideArrows: Boolean, + mobileArrows: Boolean, + + switchIndicator: Boolean, + + narrowIndicator: Boolean, + inlineLabel: Boolean, + noCaps: Boolean, + + dense: Boolean, + + contentClass: String + }, + + data () { + return { + scrollable: false, + leftArrow: true, + rightArrow: false, + justify: false, + + tabNameList: [], + + // used by children + currentModel: this.value, + hasFocus: false, + avoidRouteWatcher: false // false | string (uid) + } + }, + + watch: { + isRTL () { + this.__localUpdateArrows() + }, + + value (name) { + this.__updateModel({ name, setCurrent: true, skipEmit: true }) + }, + + outsideArrows () { + this.__recalculateScroll() + }, + + arrowsEnabled (v) { + this.__localUpdateArrows = v === true + ? this.__updateArrowsFn + : noop + + this.__recalculateScroll() + } + }, + + computed: { + // used by children + tabProps () { + return { + activeClass: this.activeClass, + activeColor: this.activeColor, + activeBgColor: this.activeBgColor, + indicatorClass: getIndicatorClass( + this.indicatorColor, + this.switchIndicator, + this.vertical + ), + narrowIndicator: this.narrowIndicator, + inlineLabel: this.inlineLabel, + noCaps: this.noCaps + } + }, + + // used by children + hasActiveTab () { + return this.tabNameList.some(entry => entry.name === this.currentModel) + }, + + arrowsEnabled () { + return this.$q.platform.is.desktop === true || this.mobileArrows === true + }, + + alignClass () { + const align = this.scrollable === true + ? 'left' + : (this.justify === true ? 'justify' : this.align) + + return `q-tabs__content--align-${align}` + }, + + classes () { + return 'q-tabs row no-wrap items-center' + + ` q-tabs--${this.scrollable === true ? '' : 'not-'}scrollable` + + ` q-tabs--${this.vertical === true ? 'vertical' : 'horizontal'}` + + ` q-tabs__arrows--${this.arrowsEnabled === true && this.outsideArrows === true ? 'outside' : 'inside'}` + + (this.dense === true ? ' q-tabs--dense' : '') + + (this.shrink === true ? ' col-shrink' : '') + + (this.stretch === true ? ' self-stretch' : '') + }, + + innerClass () { + return 'q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position ' + + this.alignClass + + (this.contentClass !== void 0 ? ` ${this.contentClass}` : '') + + (this.$q.platform.is.mobile === true ? ' scroll' : '') + }, + + domProps () { + return this.vertical === true + ? { container: 'height', content: 'offsetHeight', scroll: 'scrollHeight' } + : { container: 'width', content: 'offsetWidth', scroll: 'scrollWidth' } + }, + + isRTL () { + return this.vertical !== true && this.$q.lang.rtl === true + }, + + rtlPosCorrection () { + return rtlHasScrollBug() === false && this.isRTL === true + }, + + // let's speed up execution of time-sensitive scrollTowards() + // with a computed variable by directly applying the minimal + // number of instructions on get/set functions + posFn () { + return this.rtlPosCorrection === true + ? { get: content => Math.abs(content.scrollLeft), set: (content, pos) => { content.scrollLeft = -pos } } + : ( + this.vertical === true + ? { get: content => content.scrollTop, set: (content, pos) => { content.scrollTop = pos } } + : { get: content => content.scrollLeft, set: (content, pos) => { content.scrollLeft = pos } } + ) + }, + + onEvents () { + return { + input: stop, + ...this.qListeners, + focusin: this.__onFocusin, + focusout: this.__onFocusout + } + } + }, + + methods: { + // used by children too + __updateModel ({ name, setCurrent, skipEmit }) { + if (this.currentModel !== name) { + if (skipEmit !== true && this.qListeners.input !== void 0) { + this.$emit('input', name) + } + + if (setCurrent === true || this.qListeners.input === void 0) { + this.__animate(this.currentModel, name) + this.currentModel = name + } + } + }, + + __recalculateScroll () { + this.__registerScrollTick(() => { + this.__updateContainer({ + width: this.$el.offsetWidth, + height: this.$el.offsetHeight + }) + }) + }, + + __updateContainer (domSize) { + // it can be called faster than component being initialized + // so we need to protect against that case + // (one example of such case is the docs release notes page) + if (this.domProps === void 0 || !this.$refs.content) { return } + + const + size = domSize[ this.domProps.container ], + scrollSize = Math.min( + this.$refs.content[this.domProps.scroll], + Array.prototype.reduce.call( + this.$refs.content.children, + (acc, el) => acc + (el[ this.domProps.content ] || 0), + 0 + ) + ), + scroll = size > 0 && scrollSize > size // when there is no tab, in Chrome, size === 0 and scrollSize === 1 + + if (this.scrollable !== scroll) { + this.scrollable = scroll + } + + // Arrows need to be updated even if the scroll status was already true + scroll === true && this.__registerUpdateArrowsTick(this.__localUpdateArrows) + + const localJustify = size < parseInt(this.breakpoint, 10) + + if (this.justify !== localJustify) { + this.justify = localJustify + } + }, + + __animate (oldName, newName) { + const + oldTab = oldName !== void 0 && oldName !== null && oldName !== '' + ? this.tabVmList.find(tab => tab.name === oldName) + : null, + newTab = newName !== void 0 && newName !== null && newName !== '' + ? this.tabVmList.find(tab => tab.name === newName) + : null + + if (oldTab && newTab) { + const + oldEl = oldTab.$refs.tabIndicator, + newEl = newTab.$refs.tabIndicator + + clearTimeout(this.animateTimer) + + oldEl.style.transition = 'none' + oldEl.style.transform = 'none' + newEl.style.transition = 'none' + newEl.style.transform = 'none' + + const + oldPos = oldEl.getBoundingClientRect(), + newPos = newEl.getBoundingClientRect() + + newEl.style.transform = this.vertical === true + ? `translate3d(0,${oldPos.top - newPos.top}px,0) scale3d(1,${newPos.height ? oldPos.height / newPos.height : 1},1)` + : `translate3d(${oldPos.left - newPos.left}px,0,0) scale3d(${newPos.width ? oldPos.width / newPos.width : 1},1,1)` + + // allow scope updates to kick in (QRouteTab needs more time) + this.__registerAnimateTick(() => { + this.animateTimer = setTimeout(() => { + newEl.style.transition = 'transform .25s cubic-bezier(.4, 0, .2, 1)' + newEl.style.transform = 'none' + }, 70) + }) + } + + if (newTab && this.scrollable === true) { + this.__scrollToTabEl(newTab.$el) + } + }, + + __scrollToTabEl (el) { + const + contentRef = this.$refs.content, + { left, width, top, height } = contentRef.getBoundingClientRect(), + newPos = el.getBoundingClientRect() + + let offset = this.vertical === true ? newPos.top - top : newPos.left - left + + if (offset < 0) { + contentRef[ this.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.floor(offset) + this.__localUpdateArrows() + return + } + + offset += this.vertical === true ? newPos.height - height : newPos.width - width + if (offset > 0) { + contentRef[ this.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.ceil(offset) + this.__localUpdateArrows() + } + }, + + __updateArrowsFn () { + const content = this.$refs.content + if (content !== null) { + const + rect = content.getBoundingClientRect(), + pos = this.vertical === true ? content.scrollTop : Math.abs(content.scrollLeft) + + if (this.isRTL === true) { + this.leftArrow = Math.ceil(pos + rect.width) < content.scrollWidth - 1 + this.rightArrow = pos > 0 + } + else { + this.leftArrow = pos > 0 + this.rightArrow = this.vertical === true + ? Math.ceil(pos + rect.height) < content.scrollHeight + : Math.ceil(pos + rect.width) < content.scrollWidth + } + } + }, + + __animScrollTo (value) { + this.__stopAnimScroll() + this.scrollTimer = setInterval(() => { + if (this.__scrollTowards(value) === true) { + this.__stopAnimScroll() + } + }, 5) + }, + + __scrollToStart () { + this.__animScrollTo(this.rtlPosCorrection === true ? Number.MAX_SAFE_INTEGER : 0) + }, + + __scrollToEnd () { + this.__animScrollTo(this.rtlPosCorrection === true ? 0 : Number.MAX_SAFE_INTEGER) + }, + + __stopAnimScroll () { + clearInterval(this.scrollTimer) + }, + + // used by children + __onKbdNavigate (keyCode, fromEl) { + const tabs = Array.prototype.filter.call( + this.$refs.content.children, + el => el === fromEl || (el.matches && el.matches('.q-tab.q-focusable') === true) + ) + + const len = tabs.length + if (len === 0) { return } + + if (keyCode === 36) { // Home + if (tabs[ 0 ].contains(document.activeElement) === true) { + return false + } + + this.__scrollToTabEl(tabs[ 0 ]) + tabs[ 0 ].focus() + return true + } + if (keyCode === 35) { // End + if (tabs[ len - 1 ].contains(document.activeElement) === true) { + return false + } + + this.__scrollToTabEl(tabs[ len - 1 ]) + tabs[ len - 1 ].focus() + return true + } + + const dirPrev = keyCode === (this.vertical === true ? 38 /* ArrowUp */ : 37 /* ArrowLeft */) + const dirNext = keyCode === (this.vertical === true ? 40 /* ArrowDown */ : 39 /* ArrowRight */) + + const dir = dirPrev === true ? -1 : (dirNext === true ? 1 : void 0) + + if (dir !== void 0) { + const rtlDir = this.isRTL === true ? -1 : 1 + const index = tabs.indexOf(fromEl) + dir * rtlDir + + if ( + index < 0 || + index >= len || + tabs[ index ].contains(document.activeElement) === true + ) { + return false + } + + this.__scrollToTabEl(tabs[ index ]) + tabs[ index ].focus({ preventScroll: true }) + + return true + } + }, + + __scrollTowards (value) { + const + content = this.$refs.content, + { get, set } = this.posFn + + let + done = false, + pos = get(content) + + const direction = value < pos ? -1 : 1 + + pos += direction * 5 + + if (pos < 0) { + done = true + pos = 0 + } + else if ( + (direction === -1 && pos <= value) || + (direction === 1 && pos >= value) + ) { + done = true + pos = value + } + + set(content, pos) + this.__localUpdateArrows() + + return done + }, + + // do not use directly; use __verifyRouteModel() instead + __updateActiveRoute () { + let name = null, bestScore = getDefaultBestScore() + + const vmList = this.tabVmList.filter(tab => tab.hasRouterLink === true) + const vmLen = vmList.length + + const { query: currentQuery } = this.$route + const currentQueryLen = Object.keys(currentQuery).length + + for (let tabIndex = 0; tabIndex < vmLen; tabIndex++) { + const tab = vmList[tabIndex] + const exact = tab.exact === true + + // if a) it doesn't respect the active/exact active status + // or b) we already found an exact match and this one isn't set as exact + // then we don't deal with it + if ( + tab[ exact === true ? 'linkIsExactActive' : 'linkIsActive' ] !== true || + (bestScore.exact === true && exact !== true) + ) { + continue + } + + const { route, href } = tab.resolvedLink + const { matched, query, hash } = route + const redirected = route.redirectedFrom !== void 0 + + if (exact === true) { + // hey, we found the perfect match; no more searching! + if (redirected === false) { + name = tab.name + break + } + + if (bestScore.exact === false) { + // we reset values so we can discard previous non-exact matches + // and so we can register this exact one below + bestScore = getDefaultBestScore() + } + } + + // if best is non-redirected and this one is redirected + // then this one is inferior so we don't care about it + if (bestScore.redirected === false && redirected === true) { + continue + } + + const queryLen = Object.keys(query).length + + if ( + // if it's exact it already perfectly includes current query + // so no point in computing it + exact === false && + queryLen !== 0 && + hasQueryIncluded(query, currentQuery) === false + ) { + // it has query and it doesn't includes the current one + continue + } + + const newScore = { + exact, + redirected, + matchedLen: matched.length, + queryDiff: exact === true + ? 0 // avoid computing as it's 0 anyway + : currentQueryLen - queryLen, + hrefLen: href.length - hash.length + } + + if (newScore.matchedLen > bestScore.matchedLen) { + // it matches more routes so it's more specific so we set it as current champion + name = tab.name + bestScore = newScore + continue + } + else if (newScore.matchedLen !== bestScore.matchedLen) { + // it matches less routes than the current champion so we discard it + continue + } + + if (newScore.queryDiff < bestScore.queryDiff) { + // query is closer to the current one so we set it as current champion + name = tab.name + bestScore = newScore + continue + } + else if (newScore.queryDiff !== bestScore.queryDiff) { + continue + } + + if (newScore.hrefLen > bestScore.hrefLen) { + // href is lengthier so it's more specific so we set it as current champion + name = tab.name + bestScore = newScore + } + } + + if ( + name === null && + this.tabVmList.some(tab => tab.hasRouterLink === void 0 && tab.name === this.currentModel) === true + ) { + // we shouldn't interfere if non-route tab is active + return + } + + this.__updateModel({ name, setCurrent: true }) + }, + + __onFocusin (e) { + this.__removeFocusTimeout() + + if ( + this.hasFocus !== true && + this.$el && + e.target && + typeof e.target.closest === 'function' + ) { + const tab = e.target.closest('.q-tab') + + // if the target is contained by a QTab/QRouteTab + // (it might be other elements focused, like additional QBtn) + if (tab && this.$el.contains(tab) === true) { + this.hasFocus = true + + if (this.scrollable === true) { + this.__scrollToTabEl(tab) + } + } + } + + this.qListeners.focusin !== void 0 && this.$emit('focusin', e) + }, + + __onFocusout (e) { + this.__registerFocusTimeout(() => { this.hasFocus = false }, 30) + this.qListeners.focusout !== void 0 && this.$emit('focusout', e) + }, + + // used by children + __verifyRouteModel () { + if (this.avoidRouteWatcher === false) { + this.__registerScrollToTabTimeout(this.__updateActiveRoute) + } + else { + this.__removeScrollToTabTimeout() + } + }, + + __watchRoute () { + if (this.unwatchRoute === void 0) { + const unwatch = this.$watch(() => this.$route.fullPath, this.__verifyRouteModel) + this.unwatchRoute = () => { + unwatch() + this.unwatchRoute = void 0 + } + } + }, + + // used by children + __registerTab (tabVm) { + // we avoid setting tabVmList in data() as this would + // make the whole vm reactive + this.tabVmList.push(tabVm) + // ...so we extract only the needed stuff out of it + // into data() defined tabNameList + this.tabNameList.push( + injectProp({}, 'name', () => tabVm.name) + ) + + this.__recalculateScroll() + + // if it's a QTab + if (tabVm.hasRouterLink === void 0 || this.$route === void 0) { + // we should position to the currently active tab (if any) + this.__registerScrollToTabTimeout(() => { + if (this.scrollable === true) { + const value = this.currentModel + const newTab = value !== void 0 && value !== null && value !== '' + ? this.tabVmList.find(tab => tab.name === value) + : null + + newTab && this.__scrollToTabEl(newTab.$el) + } + }) + } + // else if it's a QRouteTab with a valid link + else { + this.__watchRoute() + + if (tabVm.hasRouterLink === true) { + this.__verifyRouteModel() + } + } + }, + + // used by children + __unregisterTab (tabVm) { + const index = this.tabVmList.indexOf(tabVm) + + this.tabVmList.splice(index, 1) + this.tabNameList.splice(index, 1) + + this.__recalculateScroll() + + // if we're watching route and this tab is a QRouteTab + if (this.unwatchRoute !== void 0 && tabVm.hasRouterLink !== void 0) { + // unwatch route if we don't have any QRouteTabs left + if (this.tabVmList.every(tab => tab.hasRouterLink === void 0) === true) { + this.unwatchRoute() + } + + // then update model + this.__verifyRouteModel() + } + }, + + __cleanup () { + clearTimeout(this.animateTimer) + this.__stopAnimScroll() + this.unwatchRoute !== void 0 && this.unwatchRoute() + } + }, + + created () { + this.__useTick('__registerScrollTick') + this.__useTick('__registerUpdateArrowsTick') + this.__useTick('__registerAnimateTick') + + this.__useTimeout('__registerFocusTimeout', '__removeFocusTimeout') + this.__useTimeout('__registerScrollToTabTimeout', '__removeScrollToTabTimeout') + + Object.assign(this, { + tabVmList: [], + __localUpdateArrows: this.arrowsEnabled === true + ? this.__updateArrowsFn + : noop + }) + }, + + activated () { + this.hadRouteWatcher === true && this.__watchRoute() + this.__recalculateScroll() + }, + + deactivated () { + this.hadRouteWatcher = this.unwatchRoute !== void 0 + this.__cleanup() + }, + + beforeDestroy () { + this.__cleanup() + }, + + render (h) { + const child = [ + h(QResizeObserver, { + key: 'resize', + on: cache(this, 'resize', { resize: this.__updateContainer }) + }), + + h('div', { + key: 'scroll', + ref: 'content', + class: this.innerClass, + on: this.arrowsEnabled === true ? cache(this, 'scroll', { scroll: this.__updateArrowsFn }) : void 0 + }, slot(this, 'default')) + ] + + this.arrowsEnabled === true && child.push( + h(QIcon, { + key: 'onS', + class: 'q-tabs__arrow q-tabs__arrow--start absolute q-tab__icon' + + (this.leftArrow === true ? '' : ' q-tabs__arrow--faded'), + props: { name: this.leftIcon || this.$q.iconSet.tabs[ this.vertical === true ? 'up' : 'left' ] }, + on: cache(this, 'onS', { + '&mousedown': this.__scrollToStart, + '&touchstart': this.__scrollToStart, + '&mouseup': this.__stopAnimScroll, + '&mouseleave': this.__stopAnimScroll, + '&touchend': this.__stopAnimScroll + }) + }), + + h(QIcon, { + key: 'onE', + class: 'q-tabs__arrow q-tabs__arrow--end absolute q-tab__icon' + + (this.rightArrow === true ? '' : ' q-tabs__arrow--faded'), + props: { name: this.rightIcon || this.$q.iconSet.tabs[ this.vertical === true ? 'down' : 'right' ] }, + on: cache(this, 'onE', { + '&mousedown': this.__scrollToEnd, + '&touchstart': this.__scrollToEnd, + '&mouseup': this.__stopAnimScroll, + '&mouseleave': this.__stopAnimScroll, + '&touchend': this.__stopAnimScroll + }) + }) + ) + + return h('div', { + class: this.classes, + on: this.onEvents, + attrs: { role: 'tablist' } + }, child) + } +}) diff --git a/src/components/tabs/QTabs.json b/src/components/tabs/QTabs.json new file mode 100644 index 00000000000..5d469f242ac --- /dev/null +++ b/src/components/tabs/QTabs.json @@ -0,0 +1,155 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tabs" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value":{ + "type": [ "Number", "String" ], + "desc": "Model of the component defining current panel name; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ "v-model=\"selectedTab\"" ], + "category": "model" + }, + + "vertical": { + "type": "Boolean", + "desc": "Use vertical design (tabs one on top of each other rather than one next to the other horizontally)", + "category": "content" + }, + + "outside-arrows": { + "type": "Boolean", + "desc": "Reserve space for arrows to place them on each side of the tabs (the arrows fade when inactive)", + "category": "content", + "addedIn": "v1.12.9" + }, + + "mobile-arrows": { + "type": "Boolean", + "desc": "Force display of arrows (if needed) on mobile", + "category": "content", + "addedIn": "v1.12.9" + }, + + "align": { + "type": "String", + "desc": "Horizontal alignment the tabs within the tabs container", + "default": "center", + "values": [ "left", "center", "right", "justify" ], + "examples": [ "right" ], + "category": "content" + }, + + "breakpoint": { + "type": [ "Number", "String" ], + "desc": "Breakpoint (in pixels) of tabs container width at which the tabs automatically turn to a justify alignment", + "default": 600, + "examples": [ ":breakpoint=\"500\"" ], + "category": "content|behavior" + }, + + "active-class": { + "type": "String", + "desc": "The class to be set on the active tab", + "examples": [ "my-active-class" ], + "category": "style", + "addedIn": "v1.17" + }, + + "active-color": { + "extends": "color", + "desc": "The color to be attributed to the text of the active tab", + "category": "style" + }, + + "active-bg-color": { + "extends": "color", + "desc": "The color to be attributed to the background of the active tab", + "category": "style" + }, + + "indicator-color": { + "extends": "color", + "desc": "The color to be attributed to the indicator (the underline) of the active tab", + "category": "style" + }, + + "content-class": { + "type": "String", + "desc": "Class definitions to be attributed to the content wrapper", + "examples": [ "my-special-class" ], + "category": "style", + "addedIn": "v1.12" + }, + + "left-icon": { + "type": "String", + "desc": "The name of an icon to replace the default arrow used to scroll through the tabs to the left, when the tabs extend past the width of the tabs container", + "examples": [ "arrow_left" ], + "category": "content" + }, + + "right-icon": { + "type": "String", + "desc": "The name of an icon to replace the default arrow used to scroll through the tabs to the right, when the tabs extend past the width of the tabs container", + "examples": [ "arrow_right" ], + "category": "content" + }, + + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, tabs will stretch to parent's height", + "category": "content" + }, + + "shrink": { + "type": "Boolean", + "desc": "By default, QTabs is set to grow to the available space; However, you can reverse that with this prop; Useful (and required) when placing the component in a QToolbar", + "category": "content" + }, + + "switch-indicator": { + "type": "Boolean", + "desc": "Switches the indicator position (on left of tab for vertical mode or above the tab for default horizontal mode)", + "category": "content" + }, + + "narrow-indicator": { + "type": "Boolean", + "desc": "Allows the indicator to be the same width as the tab's content (text or icon), instead of the whole width of the tab", + "category": "content" + }, + + "inline-label": { + "type": "Boolean", + "desc": "Allows the text to be inline with the icon, should one be used", + "category": "content" + }, + + "no-caps": { + "type": "Boolean", + "desc": "Turns off capitalizing all letters within the tab (which is the default)", + "category": "content" + }, + + "dense": { + "extends": "dense" + } + }, + + "slots": { + "default": { + "extends": "default" + } + }, + + "events": { + "input": { + "extends": "input" + } + } +} diff --git a/src/components/tabs/QTabs.sass b/src/components/tabs/QTabs.sass new file mode 100644 index 00000000000..0916ec441dc --- /dev/null +++ b/src/components/tabs/QTabs.sass @@ -0,0 +1,183 @@ +.q-tab + padding: 0 16px + min-height: 48px + transition: color .3s, background-color .3s + + text-transform: uppercase + white-space: nowrap + + // for route tabs + color: inherit + text-decoration: none + + &--full + min-height: 72px + + &--no-caps + text-transform: none + + &__content + height: inherit + padding: 4px 0 + min-width: 40px + + &--inline + .q-tab__icon + .q-tab__label + padding-left: 8px + + .q-chip--floating + top: 0 + right: -16px + + &__icon + width: 24px + height: 24px + font-size: 24px + + &__label + font-size: $button-font-size + line-height: $button-line-height + font-weight: $button-font-weight + + .q-badge + top: 3px + right: -12px + + &__alert, &__alert-icon + position: absolute + + &__alert + top: 7px + right: -9px + height: 10px + width: 10px + border-radius: 50% + background: currentColor + + &__alert-icon + top: 2px + right: -12px + font-size: 18px + + &__indicator + opacity: 0 + height: 2px + background: currentColor + + &--active .q-tab__indicator + opacity: 1 + transform-origin: left #{"/* rtl:ignore */"} + + &--inactive + opacity: .85 + +.q-tabs + position: relative + transition: color .3s, background-color .3s + + &--scrollable + &.q-tabs__arrows--outside + &.q-tabs--horizontal + padding-left: 36px + padding-right: 36px + + &.q-tabs--vertical + padding-top: 36px + padding-bottom: 36px + + .q-tabs__arrow--faded + opacity: 0.3 + pointer-events: none + + &.q-tabs__arrows--inside + .q-tabs__arrow--faded + display: none + + &--not-scrollable + .q-tabs__arrow + display: none + .q-tabs__content + border-radius: inherit + + &__arrow + cursor: pointer + font-size: 32px + min-width: 36px + text-shadow: 0 0 3px #fff, 0 0 1px #fff, 0 0 1px #000 + transition: opacity .3s + + &__content + overflow: hidden + flex: 1 1 auto + + &--align + + &-center + justify-content: center + + &-right + justify-content: flex-end + + &-justify .q-tab + flex: 1 1 auto + + &__offset + display: none + + &--horizontal .q-tabs__arrow + height: 100% + + &--start + top: 0 + left: 0 #{"/* rtl:ignore */"} + bottom: 0 + + &--end + top: 0 + right: 0 #{"/* rtl:ignore */"} + bottom: 0 + + &--vertical + display: block !important + height: 100% + + .q-tabs__content + display: block !important + height: 100% + + .q-tabs__arrow + width: 100% + height: 36px + text-align: center + + &--start + top: 0 + left: 0 + right: 0 + + &--end + left: 0 + right: 0 + bottom: 0 + + .q-tab + padding: 0 8px + + .q-tab__indicator + height: unset + width: 2px + + &--vertical.q-tabs--not-scrollable + .q-tabs__content + height: 100% + + &--vertical.q-tabs--dense + .q-tab__content + min-width: 24px + + + &--dense + .q-tab + min-height: 36px + &--full + min-height: 52px diff --git a/src/components/tabs/QTabs.styl b/src/components/tabs/QTabs.styl new file mode 100644 index 00000000000..2495fc46227 --- /dev/null +++ b/src/components/tabs/QTabs.styl @@ -0,0 +1,183 @@ +.q-tab + padding: 0 16px + min-height: 48px + transition: color .3s, background-color .3s + + text-transform: uppercase + white-space: nowrap + + // for route tabs + color: inherit + text-decoration: none + + &--full + min-height: 72px + + &--no-caps + text-transform: none + + &__content + height: inherit + padding: 4px 0 + min-width: 40px + + &--inline + .q-tab__icon + .q-tab__label + padding-left: 8px + + .q-chip--floating + top: 0 + right: -16px + + &__icon + width: 24px + height: 24px + font-size: 24px + + &__label + font-size: $button-font-size + line-height: $button-line-height + font-weight: $button-font-weight + + .q-badge + top: 3px + right: -12px + + &__alert, &__alert-icon + position: absolute + + &__alert + top: 7px + right: -9px + height: 10px + width: 10px + border-radius: 50% + background: currentColor + + &__alert-icon + top: 2px + right: -12px + font-size: 18px + + &__indicator + opacity: 0 + height: 2px + background: currentColor + + &--active .q-tab__indicator + opacity: 1 + transform-origin: left /* rtl:ignore */ + + &--inactive + opacity: .85 + +.q-tabs + position: relative + transition: color .3s, background-color .3s + + &--scrollable + &.q-tabs__arrows--outside + &.q-tabs--horizontal + padding-left: 36px + padding-right: 36px + + &.q-tabs--vertical + padding-top: 36px + padding-bottom: 36px + + .q-tabs__arrow--faded + opacity: 0.3 + pointer-events: none + + &.q-tabs__arrows--inside + .q-tabs__arrow--faded + display: none + + &--not-scrollable + .q-tabs__arrow + display: none + .q-tabs__content + border-radius: inherit + + &__arrow + cursor: pointer + font-size: 32px + min-width: 36px + text-shadow: 0 0 3px #fff, 0 0 1px #fff, 0 0 1px #000 + transition: opacity .3s + + &__content + overflow: hidden + flex: 1 1 auto + + &--align + + &-center + justify-content: center + + &-right + justify-content: flex-end + + &-justify .q-tab + flex: 1 1 auto + + &__offset + display: none + + &--horizontal .q-tabs__arrow + height: 100% + + &--start + top: 0 + left: 0 /* rtl:ignore */ + bottom: 0 + + &--end + top: 0 + right: 0 /* rtl:ignore */ + bottom: 0 + + &--vertical + display: block !important + height: 100% + + .q-tabs__content + display: block !important + height: 100% + + .q-tabs__arrow + width: 100% + height: 36px + text-align: center + + &--start + top: 0 + left: 0 + right: 0 + + &--end + left: 0 + right: 0 + bottom: 0 + + .q-tab + padding: 0 8px + + .q-tab__indicator + height: unset + width: 2px + + &--vertical.q-tabs--not-scrollable + .q-tabs__content + height: 100% + + &--vertical.q-tabs--dense + .q-tab__content + min-width: 24px + + + &--dense + .q-tab + min-height: 36px + &--full + min-height: 52px diff --git a/src/components/tabs/index.js b/src/components/tabs/index.js new file mode 100644 index 00000000000..3aac553ff73 --- /dev/null +++ b/src/components/tabs/index.js @@ -0,0 +1,9 @@ +import QTabs from './QTabs.js' +import QTab from './QTab.js' +import QRouteTab from './QRouteTab.js' + +export { + QTabs, + QTab, + QRouteTab +} diff --git a/src/components/time/QTime.js b/src/components/time/QTime.js new file mode 100644 index 00000000000..eb8e52da8f9 --- /dev/null +++ b/src/components/time/QTime.js @@ -0,0 +1,947 @@ +import Vue from 'vue' + +import QBtn from '../btn/QBtn.js' +import TouchPan from '../../directives/TouchPan.js' + +import { slot } from '../../utils/private/slot.js' +import { formatDate, __splitDate, __safeCreateDate } from '../../utils/date.js' +import { position, prevent } from '../../utils/event.js' +import { pad } from '../../utils/format.js' +import cache from '../../utils/private/cache.js' +import DateTimeMixin from '../../mixins/datetime.js' + +function preventKbdArrows (ev) { + [ 37, 38, 39, 40 ].includes(ev.keyCode) === true && prevent(ev) +} + +export default Vue.extend({ + name: 'QTime', + + mixins: [ DateTimeMixin ], + + directives: { + TouchPan + }, + + props: { + mask: { + default: null + }, + + format24h: { + type: Boolean, + default: null + }, + + defaultDate: { + type: String, + validator: v => /^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(v) + }, + + options: Function, + hourOptions: Array, + minuteOptions: Array, + secondOptions: Array, + + withSeconds: Boolean, + nowBtn: Boolean + }, + + data () { + const model = __splitDate( + this.value, + this.__getMask(), + this.__getLocale(), + this.calendar, + this.__getDefaultDateModel() + ) + + let view = 'Hour' + + if (model.hour !== null) { + if (model.minute === null) { + view = 'Minute' + } + else if (this.withSeconds === true && model.second === null) { + view = 'Second' + } + } + + return { + view, + isAM: model.hour === null || model.hour < 12, + innerModel: model + } + }, + + watch: { + value (v) { + const model = __splitDate( + v, + this.computedMask, + this.computedLocale, + this.calendar, + this.defaultDateModel + ) + + if ( + model.dateHash !== this.innerModel.dateHash || + model.timeHash !== this.innerModel.timeHash + ) { + this.innerModel = model + + if (model.hour === null) { + this.__goToView('Hour') + } + else { + this.isAM = model.hour < 12 + + if (model.minute === null && this.view === 'Second') { + this.__goToView('Minute') + } + } + } + }, + + computedMask () { + this.$nextTick(() => { + this.__updateValue() + }) + }, + + computedLocale () { + this.$nextTick(() => { + this.__updateValue() + }) + } + }, + + computed: { + classes () { + return `q-time q-time--${this.landscape === true ? 'landscape' : 'portrait'}` + + ` q-time--${this.darkSuffix} q-${this.darkSuffix}` + + (this.disable === true ? ' disabled' : (this.readonly === true ? ' q-time--readonly' : '')) + + (this.bordered === true ? ' q-time--bordered' : '') + + (this.square === true ? ' q-time--square no-border-radius' : '') + + (this.flat === true ? ' q-time--flat no-shadow' : '') + + ' q-key-group-navigation--ignore-key' + }, + + stringModel () { + const time = this.innerModel + + return { + hour: time.hour === null + ? '--' + : ( + this.computedFormat24h === true + ? pad(time.hour) + : String( + this.isAM === true + ? (time.hour === 0 ? 12 : time.hour) + : (time.hour > 12 ? time.hour - 12 : time.hour) + ) + ), + minute: time.minute === null + ? '--' + : pad(time.minute), + second: time.second === null + ? '--' + : pad(time.second) + } + }, + + defaultDateModel () { + return this.__getDefaultDateModel() + }, + + computedFormat24h () { + return this.format24h !== null + ? this.format24h + : this.$q.lang.date.format24h + }, + + pointerStyle () { + const + forHour = this.view === 'Hour', + divider = forHour === true ? 12 : 60, + amount = this.innerModel[this.view.toLowerCase()], + degrees = Math.round(amount * (360 / divider)) - 180 + + let transform = `rotate(${degrees}deg) translateX(-50%)` + + if ( + forHour === true && + this.computedFormat24h === true && + this.innerModel.hour >= 12 + ) { + transform += ' scale(.7)' + } + + return { transform } + }, + + minLink () { + return this.innerModel.hour !== null + }, + + secLink () { + return this.minLink === true && this.innerModel.minute !== null + }, + + hourInSelection () { + return this.hourOptions !== void 0 + ? val => this.hourOptions.includes(val) + : ( + this.options !== void 0 + ? val => this.options(val, null, null) + : void 0 + ) + }, + + minuteInSelection () { + return this.minuteOptions !== void 0 + ? val => this.minuteOptions.includes(val) + : ( + this.options !== void 0 + ? val => this.options(this.innerModel.hour, val, null) + : void 0 + ) + }, + + secondInSelection () { + return this.secondOptions !== void 0 + ? val => this.secondOptions.includes(val) + : ( + this.options !== void 0 + ? val => this.options(this.innerModel.hour, this.innerModel.minute, val) + : void 0 + ) + }, + + validHours () { + if (this.hourInSelection !== void 0) { + const am = this.__getValidValues(0, 11, this.hourInSelection) + const pm = this.__getValidValues(12, 11, this.hourInSelection) + return { am, pm, values: am.values.concat(pm.values) } + } + }, + + validMinutes () { + if (this.minuteInSelection !== void 0) { + return this.__getValidValues(0, 59, this.minuteInSelection) + } + }, + + validSeconds () { + if (this.secondInSelection !== void 0) { + return this.__getValidValues(0, 59, this.secondInSelection) + } + }, + + viewValidOptions () { + switch (this.view) { + case 'Hour': + return this.validHours + case 'Minute': + return this.validMinutes + case 'Second': + return this.validSeconds + } + }, + + positions () { + let start, end, offset = 0, step = 1 + const values = this.viewValidOptions !== void 0 + ? this.viewValidOptions.values + : void 0 + + if (this.view === 'Hour') { + if (this.computedFormat24h === true) { + start = 0 + end = 23 + } + else { + start = 0 + end = 11 + + if (this.isAM === false) { + offset = 12 + } + } + } + else { + start = 0 + end = 55 + step = 5 + } + + const pos = [] + + for (let val = start, index = start; val <= end; val += step, index++) { + const + actualVal = val + offset, + disable = values !== void 0 && values.includes(actualVal) === false, + label = this.view === 'Hour' && val === 0 + ? (this.computedFormat24h === true ? '00' : '12') + : val + + pos.push({ val: actualVal, index, disable, label }) + } + + return pos + } + }, + + methods: { + setNow () { + const nowStr = this.__updateValue({ + ...this.__getCurrentDate(), + ...this.__getCurrentTime() + }) + + const model = __splitDate( + nowStr, + this.computedMask, + this.computedLocale, + this.calendar, + this.defaultDateModel + ) + + this.innerModel = model + this.isAM = model.hour < 12 + + this.__goToView('Hour') + }, + + __getValidValues (start, count, testFn) { + const values = Array.apply(null, { length: count + 1 }) + .map((_, index) => { + const i = index + start + return { + index: i, + val: testFn(i) === true // force boolean + } + }) + .filter(v => v.val === true) + .map(v => v.index) + + return { + min: values[0], + max: values[values.length - 1], + values, + threshold: count + 1 + } + }, + + __getWheelDist (a, b, threshold) { + const diff = Math.abs(a - b) + return Math.min(diff, threshold - diff) + }, + + __getNormalizedClockValue (val, { min, max, values, threshold }) { + if (val === min) { + return min + } + + if (val < min || val > max) { + return this.__getWheelDist(val, min, threshold) <= this.__getWheelDist(val, max, threshold) + ? min + : max + } + + const + index = values.findIndex(v => val <= v), + before = values[index - 1], + after = values[index] + + return val - before <= after - val + ? before + : after + }, + + __getMask () { + return this.calendar !== 'persian' && this.mask !== null + ? this.mask + : `HH:mm${this.withSeconds === true ? ':ss' : ''}` + }, + + __getDefaultDateModel () { + if (typeof this.defaultDate !== 'string') { + const date = this.__getCurrentDate(true) + date.dateHash = this.__getDayHash(date) + return date + } + + return __splitDate(this.defaultDate, 'YYYY/MM/DD', void 0, this.calendar) + }, + + __click (evt) { + if (this.__shouldAbortInteraction() !== true) { + // __activate() has already updated the offset + // (on desktop only, through mousedown event) + if (this.$q.platform.is.desktop !== true) { + this.__updateClock(evt, this.__getClockRect()) + } + + this.__goToNextView() + } + }, + + __activate (evt) { + if (this.__shouldAbortInteraction() !== true) { + this.__updateClock(evt, this.__getClockRect()) + } + }, + + __shouldAbortInteraction () { + return this._isBeingDestroyed === true || + this._isDestroyed === true || + // if we have limited options, can we actually set any? + ( + this.viewValidOptions !== void 0 && + ( + this.viewValidOptions.values.length === 0 || + ( + this.view === 'Hour' && this.computedFormat24h !== true && + this.validHours[this.isAM === true ? 'am' : 'pm'].values.length === 0 + ) + ) + ) + }, + + __getClockRect () { + const + clock = this.$refs.clock, + { top, left, width } = clock.getBoundingClientRect(), + dist = width / 2 + + return { + top: top + dist, + left: left + dist, + dist: dist * 0.7 + } + }, + + __goToView (view) { + if (this.view !== view) { + this.view = view + } + if (this.$refs[view] !== void 0 && this.$refs[view] !== document.activeElement) { + this.$refs[view].focus() + } + }, + + __goToNextView () { + if (this.view === 'Hour') { + this.__goToView('Minute') + } + else if (this.withSeconds && this.view === 'Minute') { + this.__goToView('Second') + } + else { + this.__updateValue(void 0, true) + } + }, + + __drag (event) { + if (this.__shouldAbortInteraction() === true) { + return + } + + if (event.isFinal === true) { + this.draggingClockRect = false + this.dragCache = null + this.__goToNextView() + } + else if (event.isFirst === true) { + this.draggingClockRect = this.__getClockRect() + this.dragCache = this.__updateClock(event.evt, this.draggingClockRect) + } + else { + this.dragCache = this.__updateClock(event.evt, this.draggingClockRect, this.dragCache) + } + }, + + __updateClock (evt, clockRect, cacheVal) { + const + pos = position(evt), + height = Math.abs(pos.top - clockRect.top), + distance = Math.sqrt( + Math.pow(Math.abs(pos.top - clockRect.top), 2) + + Math.pow(Math.abs(pos.left - clockRect.left), 2) + ) + + let + val, + angle = Math.asin(height / distance) * (180 / Math.PI) + + if (pos.top < clockRect.top) { + angle = clockRect.left < pos.left ? 90 - angle : 270 + angle + } + else { + angle = clockRect.left < pos.left ? angle + 90 : 270 - angle + } + + if (this.view === 'Hour') { + val = angle / 30 + + if (this.validHours !== void 0) { + const am = this.computedFormat24h !== true + ? this.isAM === true + : ( + this.validHours.am.values.length > 0 && this.validHours.pm.values.length > 0 + ? distance >= clockRect.dist + : this.validHours.am.values.length > 0 + ) + + val = this.__getNormalizedClockValue( + val + (am === true ? 0 : 12), + this.validHours[am === true ? 'am' : 'pm'] + ) + } + else { + val = Math.round(val) + + if (this.computedFormat24h === true) { + if (distance < clockRect.dist) { + if (val < 12) { + val += 12 + } + } + else if (val === 12) { + val = 0 + } + } + else if (this.isAM === true && val === 12) { + val = 0 + } + else if (this.isAM === false && val !== 12) { + val += 12 + } + } + + if (this.computedFormat24h === true) { + this.isAM = val < 12 + } + } + else { + val = Math.round(angle / 6) % 60 + + if (this.view === 'Minute' && this.validMinutes !== void 0) { + val = this.__getNormalizedClockValue(val, this.validMinutes) + } + else if (this.view === 'Second' && this.validSeconds !== void 0) { + val = this.__getNormalizedClockValue(val, this.validSeconds) + } + } + + if (cacheVal !== val) { + this[`__set${this.view}`](val) + } + + return val + }, + + __onKeyupHour (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Hour' && this.__goToNextView() + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + const payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1 + + if (this.validHours !== void 0) { + const values = this.computedFormat24h === true + ? this.validHours.values + : this.validHours[this.isAM === true ? 'am' : 'pm'].values + + if (values.length === 0) { return } + + if (this.innerModel.hour === null) { + this.__setHour(values[0]) + } + else { + const index = ( + values.length + + values.indexOf(this.innerModel.hour) + + payload + ) % values.length + + this.__setHour(values[index]) + } + } + else { + const + wrap = this.computedFormat24h === true ? 24 : 12, + offset = this.computedFormat24h !== true && this.isAM === false ? 12 : 0, + val = this.innerModel.hour === null ? -payload : this.innerModel.hour + + this.__setHour(offset + (24 + val + payload) % wrap) + } + } + }, + + __onKeyupMinute (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Minute' && this.__goToNextView() + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + const payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1 + + if (this.validMinutes !== void 0) { + const values = this.validMinutes.values + + if (values.length === 0) { return } + + if (this.innerModel.minute === null) { + this.__setMinute(values[0]) + } + else { + const index = ( + values.length + + values.indexOf(this.innerModel.minute) + + payload + ) % values.length + + this.__setMinute(values[index]) + } + } + else { + const val = this.innerModel.minute === null ? -payload : this.innerModel.minute + this.__setMinute((60 + val + payload) % 60) + } + } + }, + + __onKeyupSecond (e) { + if (e.keyCode === 13) { // ENTER + this.view === 'Second' && this.__goToNextView() + } + else if ([ 37, 38, 39, 40 ].includes(e.keyCode)) { + const payload = e.keyCode === 37 || e.keyCode === 40 ? -1 : 1 + + if (this.validSeconds !== void 0) { + const values = this.validSeconds.values + + if (values.length === 0) { return } + + if (this.innerModel.seconds === null) { + this.__setSecond(values[0]) + } + else { + const index = ( + values.length + + values.indexOf(this.innerModel.second) + + payload + ) % values.length + + this.__setSecond(values[index]) + } + } + else { + const val = this.innerModel.second === null ? -payload : this.innerModel.second + this.__setSecond((60 + val + payload) % 60) + } + } + }, + + __getHeader (h) { + const label = [ + h('div', { + key: 'vH', + staticClass: 'q-time__link', + class: this.view === 'Hour' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Hour' }, + on: cache(this, 'vH', { + focus: () => { this.view = 'Hour' }, + keydown: preventKbdArrows, + keyup: this.__onKeyupHour + }) + }, [ this.stringModel.hour ]), + + h('div', [ ':' ]), + + h( + 'div', + this.minLink === true + ? { + key: 'vM', + ref: 'Minute', + staticClass: 'q-time__link', + class: this.view === 'Minute' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Minute' }, + on: cache(this, 'vM', { + focus: () => { this.view = 'Minute' }, + keydown: preventKbdArrows, + keyup: this.__onKeyupMinute + }) + } + : { staticClass: 'q-time__link' }, + [ this.stringModel.minute ] + ) + ] + + if (this.withSeconds === true) { + label.push( + h('div', [ ':' ]), + + h( + 'div', + this.secLink === true + ? { + key: 'vS', + ref: 'Second', + staticClass: 'q-time__link', + class: this.view === 'Second' ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex, 'data-autofocus': this.view === 'Second' }, + on: cache(this, 'vS', { + focus: () => { this.view = 'Second' }, + keydown: preventKbdArrows, + keyup: this.__onKeyupSecond + }) + } + : { staticClass: 'q-time__link' }, + [ this.stringModel.second ] + ) + ) + } + + return h('div', { + staticClass: 'q-time__header flex flex-center no-wrap', + class: this.headerClass + }, [ + h('div', { + staticClass: 'q-time__header-label row items-center no-wrap', + attrs: { dir: 'ltr' } + }, label), + + this.computedFormat24h === false ? h('div', { + staticClass: 'q-time__header-ampm column items-between no-wrap' + }, [ + h('div', { + key: 'AM', + staticClass: 'q-time__link', + class: this.isAM === true ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'AM', { + click: this.__setAm, + keyup: e => { e.keyCode === 13 && this.__setAm() } + }) + }, [ 'AM' ]), + + h('div', { + key: 'PM', + staticClass: 'q-time__link', + class: this.isAM !== true ? 'q-time__link--active' : 'cursor-pointer', + attrs: { tabindex: this.computedTabindex }, + on: cache(this, 'PM', { + click: this.__setPm, + keyup: e => { e.keyCode === 13 && this.__setPm() } + }) + }, [ 'PM' ]) + ]) : null + ]) + }, + + __getClock (h) { + const + view = this.view.toLowerCase(), + current = this.innerModel[view] + + return h('div', { + staticClass: 'q-time__content col relative-position' + }, [ + h('transition', { + props: { name: 'q-transition--scale' } + }, [ + h('div', { + key: 'clock' + this.view, + staticClass: 'q-time__container-parent absolute-full' + }, [ + h('div', { + ref: 'clock', + staticClass: 'q-time__container-child fit overflow-hidden' + }, [ + h('div', { + key: 'click', + staticClass: 'q-time__clock cursor-pointer non-selectable', + on: cache(this, 'click', { + click: this.__click, + mousedown: this.__activate + }), + directives: cache(this, 'touch', [{ + name: 'touch-pan', + value: this.__drag, + modifiers: { + stop: true, + prevent: true, + mouse: true + } + }]) + }, [ + h('div', { staticClass: 'q-time__clock-circle fit' }, [ + h('div', { + staticClass: 'q-time__clock-pointer', + style: this.pointerStyle, + class: this.innerModel[view] === null ? 'hidden' : (this.color !== void 0 ? `text-${this.color}` : '') + }), + + this.positions.map(pos => h('div', { + staticClass: `q-time__clock-position row flex-center q-time__clock-pos-${pos.index}`, + class: pos.val === current + ? this.headerClass.concat(' q-time__clock-position--active') + : (pos.disable === true ? 'q-time__clock-position--disabled' : null) + }, [ h('span', [ pos.label ]) ])) + ]) + ]) + ]) + ]) + ]), + + this.nowBtn === true ? h(QBtn, { + key: 'now', + staticClass: 'q-time__now-button absolute', + props: { + icon: this.$q.iconSet.datetime.now, + unelevated: true, + size: 'sm', + round: true, + color: this.color, + textColor: this.textColor, + tabindex: this.computedTabindex + }, + on: cache(this, 'now', { + click: this.setNow + }) + }) : null + ]) + }, + + __setHour (hour) { + if (this.innerModel.hour !== hour) { + this.innerModel.hour = hour + this.__verifyAndUpdate() + } + }, + + __setMinute (minute) { + if (this.innerModel.minute !== minute) { + this.innerModel.minute = minute + this.__verifyAndUpdate() + } + }, + + __setSecond (second) { + if (this.innerModel.second !== second) { + this.innerModel.second = second + this.__verifyAndUpdate() + } + }, + + __setAm () { + if (this.isAM === false) { + this.isAM = true + + if (this.innerModel.hour !== null) { + this.innerModel.hour -= 12 + this.__verifyAndUpdate() + } + } + }, + + __setPm () { + if (this.isAM === true) { + this.isAM = false + + if (this.innerModel.hour !== null) { + this.innerModel.hour += 12 + this.__verifyAndUpdate() + } + } + }, + + __verifyAndUpdate () { + if (this.hourInSelection !== void 0 && this.hourInSelection(this.innerModel.hour) !== true) { + this.innerModel = __splitDate() + this.__goToView('Hour') + return + } + + if (this.minuteInSelection !== void 0 && this.minuteInSelection(this.innerModel.minute) !== true) { + this.innerModel.minute = null + this.innerModel.second = null + this.__goToView('Minute') + return + } + + if (this.withSeconds === true && this.secondInSelection !== void 0 && this.secondInSelection(this.innerModel.second) !== true) { + this.innerModel.second = null + this.__goToView('Second') + return + } + + if (this.innerModel.hour === null || this.innerModel.minute === null || (this.withSeconds === true && this.innerModel.second === null)) { + return + } + + this.__updateValue() + }, + + __updateValue (obj, final) { + const date = Object.assign({ ...this.innerModel }, obj) + + const val = this.calendar === 'persian' + ? pad(date.hour) + ':' + + pad(date.minute) + + (this.withSeconds === true ? ':' + pad(date.second) : '') + : formatDate( + __safeCreateDate( + date.year, + date.month === null ? null : date.month - 1, + date.day, + date.hour, + date.minute, + date.second, + date.millisecond + ), + this.computedMask, + this.computedLocale, + date.year, + date.timezoneOffset + ) + + date.changed = val !== this.value + + if (final !== true || date.changed === true) { + this.$emit('input', val, date) + } + final === true && this.$emit('change', val, date) + + return val + } + }, + + render (h) { + const child = [ + this.__getClock(h) + ] + + const def = slot(this, 'default') + def !== void 0 && child.push( + h('div', { staticClass: 'q-time__actions' }, def) + ) + + if (this.name !== void 0 && this.disable !== true) { + this.__injectFormInput(child, 'push') + } + + return h('div', { + class: this.classes, + on: { ...this.qListeners }, + attrs: { tabindex: -1 } + }, [ + this.__getHeader(h), + h('div', { staticClass: 'q-time__main col overflow-auto' }, child) + ]) + } +}) diff --git a/src/components/time/QTime.json b/src/components/time/QTime.json new file mode 100644 index 00000000000..55dafb18c9b --- /dev/null +++ b/src/components/time/QTime.json @@ -0,0 +1,254 @@ +{ + "mixins": [ "mixins/datetime" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/time" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "value": { + "extends": "value", + "required": true, + "desc": "Time of the component; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "examples": [ + "v-model=\"currentTime\"" + ], + "category": "model" + }, + + "format24h": { + "type": "Boolean", + "desc": "Forces 24 hour time display instead of AM/PM system", + "default": "(based on Quasar lang language being used)", + "category": "behavior" + }, + + "default-date": { + "type": "String", + "desc": "The default date to use (in YYYY/MM/DD format) when model is unfilled (undefined or null)", + "default": "current day", + "examples": [ + "1995/02/23" + ], + "category": "model", + "addedIn": "v1.9" + }, + + "mask": { + "default": "HH:mm", + "examples": [ "HH:mm:ss", "YYYY-MM-DD HH:mm:ss", "HH:mm MMMM Do, YYYY" ] + }, + + "options": { + "type": "Function", + "desc": "Optionally configure what time is the user allowed to set; Overridden by 'hour-options', 'minute-options' and 'second-options' if those are set; For best performance, reference it from your scope and do not define it inline", + "params": { + "hr": { + "type": "Number", + "desc": "Hour", + "examples": [ 15 ] + }, + "min": { + "type": "Number", + "desc": "Minutes", + "examples": [ 38 ] + }, + "sec": { + "type": "Number", + "desc": "Seconds", + "examples": [ 12 ] + } + }, + "returns": null, + "examples": [ + ":options=\"(hr, min, sec) => hr <= 6\"" + ], + "category": "behavior" + }, + + "hour-options": { + "type": "Array", + "desc": "Optionally configure what hours is the user allowed to set; Overrides 'options' prop if that is also set", + "examples": [ + ":hour-options=\"[ 3, 6, 9 ]\"" + ], + "category": "behavior" + }, + + "minute-options": { + "type": "Array", + "desc": "Optionally configure what minutes is the user allowed to set; Overrides 'options' prop if that is also set", + "examples": [ + ":minute-options=\"[0, 15, 30, 45]\"" + ], + "category": "behavior" + }, + + "second-options": { + "type": "Array", + "desc": "Optionally configure what seconds is the user allowed to set; Overrides 'options' prop if that is also set", + "examples": [ + ":second-options=\"[0, 7, 10, 23]\"" + ], + "category": "behavior" + }, + + "with-seconds": { + "type": "Boolean", + "desc": "Allow the time to be set with seconds", + "category": "model|behavior" + }, + + "now-btn": { + "type": "Boolean", + "desc": "Display a button that selects the current time", + "category": "content" + } + }, + + "slots": { + "default": { + "desc": "This is where additional buttons can go", + "addedIn": "v1.2.8" + } + }, + + "events": { + "input": { + "extends": "input", + "params": { + "value": { + "type": "String" + }, + "details": { + "type": "Object", + "desc": "Object of properties on the new model", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ "examples" ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ "examples" ] + }, + "day": { + "type": "Number", + "desc": "The day of the month", + "__exemption": [ "examples" ] + }, + "hour": { + "type": "Number", + "desc": "The hour", + "__exemption": [ "examples" ] + }, + "minute": { + "type": "Number", + "desc": "The minute", + "__exemption": [ "examples" ] + }, + "second": { + "type": "Number", + "desc": "The second", + "__exemption": [ "examples" ] + }, + "millisecond": { + "type": "Number", + "desc": "The millisecond", + "__exemption": [ "examples" ] + }, + "changed": { + "type": "Boolean", + "desc": "Did the model change?", + "addedIn": "v1.1.1" + } + } + } + } + }, + + "change": { + "extends": "input", + "desc": "Fires at the end of time adjustment (click or drag end) on the minutes screen (or seconds one if withSeconds is set)", + "params": { + "value": { + "type": "String" + }, + "details": { + "type": "Object", + "desc": "Object of properties on the new model", + "definition": { + "year": { + "type": "Number", + "desc": "The year", + "__exemption": [ + "examples" + ] + }, + "month": { + "type": "Number", + "desc": "The month", + "__exemption": [ + "examples" + ] + }, + "day": { + "type": "Number", + "desc": "The day of the month", + "__exemption": [ + "examples" + ] + }, + "hour": { + "type": "Number", + "desc": "The hour", + "__exemption": [ + "examples" + ] + }, + "minute": { + "type": "Number", + "desc": "The minute", + "__exemption": [ + "examples" + ] + }, + "second": { + "type": "Number", + "desc": "The second", + "__exemption": [ + "examples" + ] + }, + "millisecond": { + "type": "Number", + "desc": "The millisecond", + "__exemption": [ + "examples" + ] + }, + "changed": { + "type": "Boolean", + "desc": "Did the model change?", + "addedIn": "v1.1.1" + } + } + } + }, + "addedIn": "v1.15.5" + } + }, + + "methods": { + "setNow": { + "desc": "Change model to current moment", + "addedIn": "v1.1.7" + } + } +} diff --git a/src/components/time/QTime.sass b/src/components/time/QTime.sass new file mode 100644 index 00000000000..9fde1cc2d36 --- /dev/null +++ b/src/components/time/QTime.sass @@ -0,0 +1,196 @@ +@import '../../css/helpers/math.sass' + +.q-time + box-shadow: $shadow-2 + border-radius: $generic-border-radius + outline: 0 + width: 290px + min-width: 290px + max-width: 100% + + &--bordered + border: 1px solid $separator-color + + &__header + border-top-left-radius: inherit + color: $dark-text + color: var(--q-color-dark-text) + background-color: $primary + background-color: var(--q-color-primary) + padding: 16px + font-weight: 300 + + &__actions + padding: 0 16px 16px + + &__header-label + font-size: 28px + line-height: 1 + letter-spacing: -.00833em + + > div + div + margin-left: 4px + + &__link + opacity: .56 + outline: 0 + transition: opacity .3s ease-out + &--active, &:hover, &:focus + opacity: 1 + + &__header-ampm + font-size: 16px + letter-spacing: .1em + + &__content + padding: 16px + + &:before + content: '' + display: block + padding-bottom: 100% + + &__container-parent + padding: 16px + + &__container-child + border-radius: 50% + background: rgba(0,0,0,.12) + + &__clock + padding: 24px + width: 100% + height: 100% + max-width: 100% + max-height: 100% + font-size: 14px + + &__clock-circle + position: relative + + &__clock-center + height: 6px + width: 6px + margin: auto + border-radius: 50% + min-height: 0 + background: currentColor + + &__clock-pointer + width: 2px + height: 50% + transform-origin: 0 0 #{"/* rtl:ignore */"} + min-height: 0 + position: absolute + left: 50% + right: 0 + bottom: 0 + color: $primary + color: var(--q-color-primary) + background: currentColor + transform: translateX(-50%) + + &:before, &:after + content: '' + position: absolute + left: 50% + border-radius: 50% + background: currentColor + transform: translateX(-50%) + &:before + bottom: -4px + width: 8px + height: 8px + &:after + top: -3px + height: 6px + width: 6px + + &__clock-position + position: absolute + min-height: 32px + width: 32px + height: 32px + font-size: 12px + line-height: 32px + margin: 0 + padding: 0 + transform: translate(-50%, -50%) #{"/* rtl:ignore */"} + border-radius: 50% + + &--disabled + opacity: .4 + + &--active + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + + @for $pos from 0 through 11 + $angle: (270 + 30 * $pos) + $top: (1 + sin($angle)) + $left: (1 + cos($angle)) + + &__clock-pos-#{$pos} + top: toFixed(percentage($top * 0.5), 100) + left: toFixed(percentage($left * 0.5), 100) #{"/* rtl:ignore */"} + + @for $pos from 12 through 23 + $angle: (270 + 30 * $pos) + $top: (1 + sin($angle)) + $left: (1 + cos($angle)) + + &__clock-pos-#{$pos} + top: toFixed(percentage(.15 + $top * .35), 100) + left: toFixed(percentage(.15 + $left * .35), 100) #{"/* rtl:ignore */"} + + &__now-button + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + top: 12px + right: 12px + + &.disabled, &--readonly + .q-time__header-ampm, .q-time__content + pointer-events: none + + &--portrait + display: inline-flex + flex-direction: column + + .q-time__header + border-top-right-radius: inherit + min-height: 86px + + .q-time__header-ampm + margin-left: 12px + + &.q-time--bordered .q-time__content + margin: 1px 0 + + &--landscape + display: inline-flex + align-items: stretch + min-width: 420px + + > div + display: flex + flex-direction: column + justify-content: center + + .q-time__header + border-bottom-left-radius: inherit + min-width: 156px + + .q-time__header-ampm + margin-top: 12px + + &--dark + border-color: $separator-dark-color + +@media (prefers-color-scheme: dark) + .q-time--dark-auto + border-color: $separator-dark-color diff --git a/src/components/time/QTime.styl b/src/components/time/QTime.styl new file mode 100644 index 00000000000..2d9eb559690 --- /dev/null +++ b/src/components/time/QTime.styl @@ -0,0 +1,195 @@ +.q-time + box-shadow: $shadow-2 + border-radius: $generic-border-radius + background: #fff + outline: 0 + width: 290px + min-width: 290px + max-width: 100% + + &--bordered + border: 1px solid $separator-color + + &__header + border-top-left-radius: inherit + color: $dark-text + color: var(--q-color-dark-text) + background-color: $primary + background-color: var(--q-color-primary) + padding: 16px + font-weight: 300 + + &__actions + padding: 0 16px 16px + + &__header-label + font-size: 28px + line-height: 1 + letter-spacing: -.00833em + + > div + div + margin-left: 4px + + &__link + opacity: .56 + outline: 0 + transition: opacity .3s ease-out + &--active, &:hover, &:focus + opacity: 1 + + &__header-ampm + font-size: 16px + letter-spacing: .1em + + &__content + padding: 16px + + &:before + content: '' + display: block + padding-bottom: 100% + + &__container-parent + padding: 16px + + &__container-child + border-radius: 50% + background: rgba(0,0,0,.12) + + &__clock + padding: 24px + width: 100% + height: 100% + max-width: 100% + max-height: 100% + font-size: 14px + + &__clock-circle + position: relative + + &__clock-center + height: 6px + width: 6px + margin: auto + border-radius: 50% + min-height: 0 + background: currentColor + + &__clock-pointer + width: 2px + height: 50% + transform-origin: 0 0 /* rtl:ignore */ + min-height: 0 + position: absolute + left: 50% + right: 0 + bottom: 0 + color: $primary + color: var(--q-color-primary) + background: currentColor + transform: translateX(-50%) + + &:before, &:after + content: '' + position: absolute + left: 50% + border-radius: 50% + background: currentColor + transform: translateX(-50%) + &:before + bottom: -4px + width: 8px + height: 8px + &:after + top: -3px + height: 6px + width: 6px + + &__clock-position + position: absolute + min-height: 32px + width: 32px + height: 32px + font-size: 12px + line-height: 32px + margin: 0 + padding: 0 + transform: translate(-50%, -50%) /* rtl:ignore */ + border-radius: 50% + + &--disabled + opacity: .4 + + &--active + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + + for $pos in 0..11 + $angle = (270 + 30 * $pos) + $top = (1 + sin($angle * 1deg)) + $left = (1 + cos($angle * 1deg)) + + &__clock-pos-{$pos} + top: round($top * 50%, 2) + left: round($left * 50%, 2) /* rtl:ignore */ + + for $pos in 12..23 + $angle = (270 + 30 * $pos) + $top = (1 + sin($angle * 1deg)) + $left = (1 + cos($angle * 1deg)) + + &__clock-pos-{$pos} + top: round(15% + $top * 35%, 2) + left: round(15% + $left * 35%, 2) /* rtl:ignore */ + + &__now-button + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + top: 12px + right: 12px + + &.disabled, &--readonly + .q-time__header-ampm, .q-time__content + pointer-events: none + + &--portrait + display: inline-flex + flex-direction: column + + .q-time__header + border-top-right-radius: inherit + min-height: 86px + + .q-time__header-ampm + margin-left: 12px + + &.q-time--bordered .q-time__content + margin: 1px 0 + + &--landscape + display: inline-flex + align-items: stretch + min-width: 420px + + > div + display: flex + flex-direction: column + justify-content: center + + .q-time__header + border-bottom-left-radius: inherit + min-width: 156px + + .q-time__header-ampm + margin-top: 12px + + &--dark + border-color: $separator-dark-color + +@media (prefers-color-scheme: dark) + .q-time--dark-auto + border-color: $separator-dark-color diff --git a/src/components/time/index.js b/src/components/time/index.js new file mode 100644 index 00000000000..28641ff555e --- /dev/null +++ b/src/components/time/index.js @@ -0,0 +1,5 @@ +import QTime from './QTime.js' + +export { + QTime +} diff --git a/src/components/timeline/QTimeline.js b/src/components/timeline/QTimeline.js new file mode 100644 index 00000000000..1391ba09d36 --- /dev/null +++ b/src/components/timeline/QTimeline.js @@ -0,0 +1,50 @@ +import Vue from 'vue' + +import DarkMixin from '../../mixins/dark.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QTimeline', + + mixins: [ DarkMixin, ListenersMixin ], + + provide () { + return { + __timeline: this + } + }, + + props: { + color: { + type: String, + default: 'primary' + }, + side: { + type: String, + default: 'right', + validator: v => ['left', 'right'].includes(v) + }, + layout: { + type: String, + default: 'dense', + validator: v => ['dense', 'comfortable', 'loose'].includes(v) + } + }, + + computed: { + classes () { + return `q-timeline--${this.layout} q-timeline--${this.layout}--${this.side}` + + ` q-timeline--${this.darkSuffix}` + } + }, + + render (h) { + return h('ul', { + staticClass: 'q-timeline', + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/timeline/QTimeline.json b/src/components/timeline/QTimeline.json new file mode 100644 index 00000000000..d723ccd603e --- /dev/null +++ b/src/components/timeline/QTimeline.json @@ -0,0 +1,41 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/timeline" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "color": { + "extends": "color" + }, + + "side": { + "type": "String", + "desc": "Side to place the timeline entries in dense and comfortable layout; For loose layout it gets overridden by QTimelineEntry side prop", + "default": "right", + "values": [ "left", "right" ], + "category": "behavior" + }, + + "layout": { + "type": "String", + "desc": "Layout of the timeline. Dense keeps content and labels on one side. Comfortable keeps content on one side and labels on the opposite side. Loose puts content on both sides.", + "default": "dense", + "values": [ "dense", "comfortable", "loose" ], + "category": "behavior" + }, + + "dark": { + "extends": "dark" + } + }, + + "slots": { + "default": { + "desc": "Used for content of component" + } + } +} diff --git a/src/components/timeline/QTimeline.sass b/src/components/timeline/QTimeline.sass new file mode 100644 index 00000000000..6e4aef5ef4c --- /dev/null +++ b/src/components/timeline/QTimeline.sass @@ -0,0 +1,258 @@ +.q-timeline + padding: 0 + width: 100% + list-style: none + h6 + line-height: inherit + + &--dark + color: $dark-text + color: var(--q-color-dark-text) + + .q-timeline__subtitle + opacity: .7 + + &__content + padding-bottom: 24px + + &__title + margin-top: 0 + margin-bottom: 16px + + &__subtitle + font-size: 12px + margin-bottom: 8px + opacity: .6 + text-transform: uppercase + letter-spacing: 1px + font-weight: 700 + + &__dot + position: absolute + top: 0 + bottom: 0 + width: 15px + &:before, &:after + content: '' + background: currentColor + display: block + position: absolute + &:before + border: 3px solid transparent + border-radius: 100% + height: 15px + width: 15px + top: 4px + left: 0 + transition: background .3s ease-in-out, border .3s ease-in-out + &:after + width: 3px + opacity: .4 + top: 24px + bottom: 0 + left: 6px + + .q-icon + position: absolute + top: 0 + left: 0 + right: 0 + font-size: 16px + height: 38px + line-height: 38px + width: 100% + color: $dark-text + color: var(--q-color-dark-text) + + > svg, + > img + width: 1em + height: 1em + + &__dot-img + position: absolute + top: 4px + left: 0 + right: 0 + height: 31px + width: 31px + background: currentColor + border-radius: 50% + + &__heading + position: relative + &:first-child .q-timeline__heading-title + padding-top: 0 + &:last-child .q-timeline__heading-title + padding-bottom: 0 + &__heading-title + padding: 32px 0 + margin: 0 + + &__entry + position: relative + line-height: 22px + &:last-child + padding-bottom: 0 !important + .q-timeline__dot:after + content: none + + &--icon + .q-timeline__dot + width: 31px + &:before + height: 31px + width: 31px + &:after + top: 41px + left: 14px + .q-timeline__subtitle + padding-top: 8px + + &--dense--right + .q-timeline + &__entry + padding-left: 40px + + &--icon .q-timeline__dot + left: -8px + + &__dot + left: 0 + + &--dense--left + .q-timeline + &__heading + text-align: right + + &__entry + padding-right: 40px + + &--icon .q-timeline__dot + right: -8px + + &__content, + &__title, + &__subtitle + text-align: right + + &__dot + right: 0 + + &--comfortable + display: table + + .q-timeline + &__heading + display: table-row + font-size: 200% + > div + display: table-cell + + &__entry + display: table-row + padding: 0 + &--icon .q-timeline__content + padding-top: 8px + + &__subtitle, &__dot, &__content + display: table-cell + vertical-align: top + + &__subtitle + width: 35% + + &__dot + position: relative + min-width: 31px + + &--comfortable--right + .q-timeline + &__heading + .q-timeline__heading-title + margin-left: -50px + + &__subtitle + text-align: right + padding-right: 30px + + &__content + padding-left: 30px + + &__entry--icon .q-timeline__dot + left: -8px + + &--comfortable--left + .q-timeline + &__heading + text-align: right + + .q-timeline__heading-title + margin-right: -50px + + &__subtitle + padding-left: 30px + + &__content + padding-right: 30px + + &__content, + &__title + text-align: right + + &__entry--icon .q-timeline__dot + right: 0 + + &__dot + right: -8px + + &--loose + .q-timeline + &__heading-title + text-align: center + margin-left: 0 + + &__entry, &__subtitle, &__dot, &__content + display: block + margin: 0 + padding: 0 + + &__dot + position: absolute + left: 50% + margin-left: -7.15px + + &__entry + padding-bottom: 24px + overflow: hidden + + &--icon + .q-timeline__dot + margin-left: -15px + .q-timeline__subtitle + line-height: 38px + .q-timeline__content + padding-top: 8px + + &--left .q-timeline__content, + &--right .q-timeline__subtitle + float: left + padding-right: 30px + text-align: right + + &--left .q-timeline__subtitle, + &--right .q-timeline__content + float: right + text-align: left + padding-left: 30px + + &__subtitle, &__content + width: 50% + +@media (prefers-color-scheme: dark) + .q-timeline--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + + .q-timeline__subtitle + opacity: .7 diff --git a/src/components/timeline/QTimeline.styl b/src/components/timeline/QTimeline.styl new file mode 100644 index 00000000000..6e4aef5ef4c --- /dev/null +++ b/src/components/timeline/QTimeline.styl @@ -0,0 +1,258 @@ +.q-timeline + padding: 0 + width: 100% + list-style: none + h6 + line-height: inherit + + &--dark + color: $dark-text + color: var(--q-color-dark-text) + + .q-timeline__subtitle + opacity: .7 + + &__content + padding-bottom: 24px + + &__title + margin-top: 0 + margin-bottom: 16px + + &__subtitle + font-size: 12px + margin-bottom: 8px + opacity: .6 + text-transform: uppercase + letter-spacing: 1px + font-weight: 700 + + &__dot + position: absolute + top: 0 + bottom: 0 + width: 15px + &:before, &:after + content: '' + background: currentColor + display: block + position: absolute + &:before + border: 3px solid transparent + border-radius: 100% + height: 15px + width: 15px + top: 4px + left: 0 + transition: background .3s ease-in-out, border .3s ease-in-out + &:after + width: 3px + opacity: .4 + top: 24px + bottom: 0 + left: 6px + + .q-icon + position: absolute + top: 0 + left: 0 + right: 0 + font-size: 16px + height: 38px + line-height: 38px + width: 100% + color: $dark-text + color: var(--q-color-dark-text) + + > svg, + > img + width: 1em + height: 1em + + &__dot-img + position: absolute + top: 4px + left: 0 + right: 0 + height: 31px + width: 31px + background: currentColor + border-radius: 50% + + &__heading + position: relative + &:first-child .q-timeline__heading-title + padding-top: 0 + &:last-child .q-timeline__heading-title + padding-bottom: 0 + &__heading-title + padding: 32px 0 + margin: 0 + + &__entry + position: relative + line-height: 22px + &:last-child + padding-bottom: 0 !important + .q-timeline__dot:after + content: none + + &--icon + .q-timeline__dot + width: 31px + &:before + height: 31px + width: 31px + &:after + top: 41px + left: 14px + .q-timeline__subtitle + padding-top: 8px + + &--dense--right + .q-timeline + &__entry + padding-left: 40px + + &--icon .q-timeline__dot + left: -8px + + &__dot + left: 0 + + &--dense--left + .q-timeline + &__heading + text-align: right + + &__entry + padding-right: 40px + + &--icon .q-timeline__dot + right: -8px + + &__content, + &__title, + &__subtitle + text-align: right + + &__dot + right: 0 + + &--comfortable + display: table + + .q-timeline + &__heading + display: table-row + font-size: 200% + > div + display: table-cell + + &__entry + display: table-row + padding: 0 + &--icon .q-timeline__content + padding-top: 8px + + &__subtitle, &__dot, &__content + display: table-cell + vertical-align: top + + &__subtitle + width: 35% + + &__dot + position: relative + min-width: 31px + + &--comfortable--right + .q-timeline + &__heading + .q-timeline__heading-title + margin-left: -50px + + &__subtitle + text-align: right + padding-right: 30px + + &__content + padding-left: 30px + + &__entry--icon .q-timeline__dot + left: -8px + + &--comfortable--left + .q-timeline + &__heading + text-align: right + + .q-timeline__heading-title + margin-right: -50px + + &__subtitle + padding-left: 30px + + &__content + padding-right: 30px + + &__content, + &__title + text-align: right + + &__entry--icon .q-timeline__dot + right: 0 + + &__dot + right: -8px + + &--loose + .q-timeline + &__heading-title + text-align: center + margin-left: 0 + + &__entry, &__subtitle, &__dot, &__content + display: block + margin: 0 + padding: 0 + + &__dot + position: absolute + left: 50% + margin-left: -7.15px + + &__entry + padding-bottom: 24px + overflow: hidden + + &--icon + .q-timeline__dot + margin-left: -15px + .q-timeline__subtitle + line-height: 38px + .q-timeline__content + padding-top: 8px + + &--left .q-timeline__content, + &--right .q-timeline__subtitle + float: left + padding-right: 30px + text-align: right + + &--left .q-timeline__subtitle, + &--right .q-timeline__content + float: right + text-align: left + padding-left: 30px + + &__subtitle, &__content + width: 50% + +@media (prefers-color-scheme: dark) + .q-timeline--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + + .q-timeline__subtitle + opacity: .7 diff --git a/src/components/timeline/QTimelineEntry.js b/src/components/timeline/QTimelineEntry.js new file mode 100644 index 00000000000..e36cea586d1 --- /dev/null +++ b/src/components/timeline/QTimelineEntry.js @@ -0,0 +1,123 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot, uniqueSlot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QTimelineEntry', + + inject: { + __timeline: { + default () { + console.error('QTimelineEntry needs to be child of QTimeline') + } + } + }, + + mixins: [ ListenersMixin ], + + props: { + heading: Boolean, + tag: { + type: String, + default: 'h3' + }, + side: { + type: String, + default: 'right', + validator: v => ['left', 'right'].includes(v) + }, + + icon: String, + avatar: String, + + color: String, + + title: String, + subtitle: String, + body: String + }, + + computed: { + colorClass () { + return `text-${this.color || this.__timeline.color}` + }, + + classes () { + return `q-timeline__entry--${this.side}` + + (this.icon !== void 0 || this.avatar !== void 0 ? ' q-timeline__entry--icon' : '') + }, + + reverse () { + return this.__timeline.layout === 'comfortable' && this.__timeline.side === 'left' + } + }, + + render (h) { + const child = uniqueSlot(this, 'default', []) + + if (this.body !== void 0) { + child.unshift(this.body) + } + + if (this.heading === true) { + const content = [ + h('div'), + h('div'), + h( + this.tag, + { staticClass: 'q-timeline__heading-title' }, + child + ) + ] + + return h('div', { + staticClass: 'q-timeline__heading', + on: { ...this.qListeners } + }, this.reverse === true ? content.reverse() : content) + } + + let dot + + if (this.icon !== void 0) { + dot = [ + h(QIcon, { + staticClass: 'row items-center justify-center', + props: { name: this.icon } + }) + ] + } + else if (this.avatar !== void 0) { + dot = [ + h('img', { + staticClass: 'q-timeline__dot-img', + domProps: { src: this.avatar } + }) + ] + } + + const content = [ + h('div', { staticClass: 'q-timeline__subtitle' }, [ + h('span', slot(this, 'subtitle', [ this.subtitle ])) + ]), + + h('div', { + staticClass: 'q-timeline__dot', + class: this.colorClass + }, dot), + + h('div', { staticClass: 'q-timeline__content' }, [ + h('h6', { staticClass: 'q-timeline__title' }, slot(this, 'title', [ this.title ])) + ].concat(child)) + ] + + return h('li', { + staticClass: 'q-timeline__entry', + class: this.classes, + on: { ...this.qListeners } + }, this.reverse === true ? content.reverse() : content) + } +}) diff --git a/src/components/timeline/QTimelineEntry.json b/src/components/timeline/QTimelineEntry.json new file mode 100644 index 00000000000..590632d3596 --- /dev/null +++ b/src/components/timeline/QTimelineEntry.json @@ -0,0 +1,89 @@ +{ + "mixins": [ "mixins/tag" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/timeline" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "heading": { + "type": "Boolean", + "desc": "Defines a heading timeline item", + "category": "content" + }, + + "tag": { + "desc": "Tag to use, if of type 'heading' only", + "default": "h3", + "examples": [ "h1" ] + }, + + "side": { + "type": "String", + "desc": "Side to place the timeline entry; Works only if QTimeline layout is loose.", + "default": "right", + "values": [ "left", "right" ], + "category": "behavior" + }, + + "icon": { + "extends": "icon" + }, + + "avatar": { + "type": "String", + "desc": "URL to the avatar image; Icon takes precedence if used, so it replaces avatar", + "transformAssetUrls": true, + "examples": [ + "(public folder) src=\"img/my-bg.png\"", + "(assets folder) src=\"~assets/my-img.png\"", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) src=\"https://placeimg.com/500/300/nature\"" + ], + "category": "content" + }, + + "color": { + "extends": "color" + }, + + "title": { + "type": "String", + "desc": "Title of timeline entry; Is overridden if using 'title' slot", + "examples": [ "December party" ], + "category": "content" + }, + + "subtitle": { + "type": "String", + "desc": "Subtitle of timeline entry; Is overridden if using 'subtitle' slot", + "examples": [ "All invited" ], + "category": "content" + }, + + "body": { + "type": "String", + "desc": "Body content of timeline entry; Use this prop or the default slot", + "examples": [ "Lorem ipsum dolor sit amet, consectetur adipisicing elit." ], + "category": "content" + } + }, + + "slots": { + "default": { + "desc": "Timeline entry content (body)" + }, + + "title": { + "desc": "Optional slot for title; When used, it overrides 'title' prop" + }, + + "subtitle": { + "desc": "Optional slot for subtitle; When used, it overrides 'subtitle' prop" + } + } +} diff --git a/src/components/timeline/index.js b/src/components/timeline/index.js new file mode 100644 index 00000000000..5dc4430c10d --- /dev/null +++ b/src/components/timeline/index.js @@ -0,0 +1,7 @@ +import QTimeline from './QTimeline.js' +import QTimelineEntry from './QTimelineEntry.js' + +export { + QTimeline, + QTimelineEntry +} diff --git a/src/components/toggle/QToggle.js b/src/components/toggle/QToggle.js new file mode 100644 index 00000000000..fba6d0cc8f2 --- /dev/null +++ b/src/components/toggle/QToggle.js @@ -0,0 +1,58 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' +import CheckboxMixin from '../../mixins/checkbox.js' + +export default Vue.extend({ + name: 'QToggle', + + mixins: [ CheckboxMixin ], + + props: { + icon: String, + + iconColor: String + }, + + computed: { + computedIcon () { + return ( + this.isTrue === true + ? this.checkedIcon + : (this.isIndeterminate === true ? this.indeterminateIcon : this.uncheckedIcon) + ) || this.icon + }, + + computedIconColor () { + if (this.isTrue === true) { + return this.iconColor + } + } + }, + + methods: { + __getInner (h) { + return [ + h('div', { staticClass: 'q-toggle__track' }), + + h('div', { + staticClass: 'q-toggle__thumb absolute flex flex-center no-wrap' + }, this.computedIcon !== void 0 + ? [ + h(QIcon, { + props: { + name: this.computedIcon, + color: this.computedIconColor + } + }) + ] + : void 0 + ) + ] + } + }, + + created () { + this.type = 'toggle' + } +}) diff --git a/src/components/toggle/QToggle.json b/src/components/toggle/QToggle.json new file mode 100644 index 00000000000..db79cf538c9 --- /dev/null +++ b/src/components/toggle/QToggle.json @@ -0,0 +1,43 @@ +{ + "mixins": [ "mixins/checkbox" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/toggle" + }, + + "props": { + "icon": { + "extends": "icon" + }, + + "checked-icon": { + "desc": "The icon to be used when the toggle is on" + }, + + "unchecked-icon": { + "desc": "The icon to be used when the toggle is off" + }, + + "indeterminate-icon": { + "desc": "The icon to be used when the model is indeterminate" + }, + + "icon-color": { + "extends": "color", + "desc": "Override default icon color (for truthy state only); Color name for component from the Quasar Color Palette", + "addedIn": "v1.8" + }, + + "indeterminate-value": { + "addedIn": "v1.8" + }, + + "toggle-indeterminate": { + "addedIn": "v1.8" + }, + + "size": { + "addedIn": "v1.8" + } + } +} diff --git a/src/components/toggle/QToggle.sass b/src/components/toggle/QToggle.sass new file mode 100644 index 00000000000..7d6194a3d3e --- /dev/null +++ b/src/components/toggle/QToggle.sass @@ -0,0 +1,150 @@ +$toggle-transition: .22s cubic-bezier(.4,0,.2,1) + +.q-toggle + vertical-align: middle + + &__native + width: 1px + height: 1px + + &__track + height: .35em + border-radius: .175em + opacity: .38 + background: currentColor + + &__thumb + top: .25em + left: .25em + width: .5em + height: .5em + transition: left $toggle-transition + user-select: none + z-index: 0 + + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: $light-page + background: var(--q-color-light-page) + box-shadow: 0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12) + + .q-icon + font-size: .3em + min-width: 1em + color: $light-text + color: var(--q-color-light-text) + opacity: .54 + z-index: 1 + + &__inner + font-size: 40px + width: 1.4em + min-width: 1.4em + height: 1em + padding: .325em .3em + -webkit-print-color-adjust: exact + + &--indet + .q-toggle__thumb + left: .45em + + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__track + opacity: .54 + .q-toggle__thumb + left: .65em + + &:after + background-color: currentColor + + .q-icon + color: $dark-text + color: var(--q-color-dark-text) + opacity: 1 + + &.disabled + opacity: .75 !important + + &--dark + .q-toggle__inner + color: $dark-text + color: var(--q-color-dark-text) + + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__thumb:before + opacity: .32 !important + + &--dense + + .q-toggle__inner + width: .8em + min-width: .8em + height: .5em + padding: .07625em 0 + + .q-toggle__thumb + top: 0 + left: 0 + + .q-toggle__inner--indet + .q-toggle__thumb + left: .15em + .q-toggle__inner--truthy + .q-toggle__thumb + left: .3em + + .q-toggle__label + padding-left: .5em + + &.reverse .q-toggle__label + padding-left: 0 + padding-right: .5em + +body.desktop + + .q-toggle:not(.disabled) + .q-toggle__thumb:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $option-focus-transition + + &:focus, + &:hover + .q-toggle__thumb:before + transform: scale3d(2, 2, 1) + + .q-toggle--dense:not(.disabled) + &:focus, + &:hover + .q-toggle__thumb:before + transform: scale3d(1.5, 1.5, 1) + +@media (prefers-color-scheme: dark) + .q-toggle--dark-auto + .q-toggle__inner + color: $dark-text + color: var(--q-color-dark-text) + + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__thumb:before + opacity: .32 !important diff --git a/src/components/toggle/QToggle.styl b/src/components/toggle/QToggle.styl new file mode 100644 index 00000000000..5ece0b230af --- /dev/null +++ b/src/components/toggle/QToggle.styl @@ -0,0 +1,150 @@ +$toggle-transition = .22s cubic-bezier(.4,0,.2,1) + +.q-toggle + vertical-align: middle + + &__native + width: 1px + height: 1px + + &__track + height: .35em + border-radius: .175em + opacity: .38 + background: currentColor + + &__thumb + top: .25em + left: .25em + width: .5em + height: .5em + transition: left $toggle-transition + user-select: none + z-index: 0 + + &:after + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: $light-page + background: var(--q-color-light-page) + box-shadow: 0 3px 1px -2px rgba(0,0,0,.2), 0 2px 2px 0 rgba(0,0,0,.14), 0 1px 5px 0 rgba(0,0,0,.12) + + .q-icon + font-size: .3em + min-width: 1em + color: $light-text + color: var(--q-color-light-text) + opacity: .54 + z-index: 1 + + &__inner + font-size: 40px + width: 1.4em + min-width: 1.4em + height: 1em + padding: .325em .3em + -webkit-print-color-adjust: exact + + &--indet + .q-toggle__thumb + left: .45em + + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__track + opacity: .54 + .q-toggle__thumb + left: .65em + + &:after + background-color: currentColor + + .q-icon + color: $dark-text + color: var(--q-color-dark-text) + opacity: 1 + + &.disabled + opacity: .75 !important + + &--dark + .q-toggle__inner + color: $dark-text + color: var(--q-color-dark-text) + + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__thumb:before + opacity: .32 !important + + &--dense + + .q-toggle__inner + width: .8em + min-width: .8em + height: .5em + padding: .07625em 0 + + .q-toggle__thumb + top: 0 + left: 0 + + .q-toggle__inner--indet + .q-toggle__thumb + left: .15em + .q-toggle__inner--truthy + .q-toggle__thumb + left: .3em + + .q-toggle__label + padding-left: .5em + + &.reverse .q-toggle__label + padding-left: 0 + padding-right: .5em + +body.desktop + + .q-toggle:not(.disabled) + .q-toggle__thumb:before + content: '' + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + border-radius: 50% + background: currentColor + opacity: .12 + transform: scale3d(0, 0, 1) + transition: transform $option-focus-transition + + &:focus, + &:hover + .q-toggle__thumb:before + transform: scale3d(2, 2, 1) + + .q-toggle--dense:not(.disabled) + &:focus, + &:hover + .q-toggle__thumb:before + transform: scale3d(1.5, 1.5, 1) + +@media (prefers-color-scheme: dark) + .q-toggle--dark-auto + .q-toggle__inner + color: $dark-text + color: var(--q-color-dark-text) + + &--truthy + color: $primary + color: var(--q-color-primary) + .q-toggle__thumb:before + opacity: .32 !important diff --git a/src/components/toggle/index.js b/src/components/toggle/index.js new file mode 100644 index 00000000000..960bb73ea59 --- /dev/null +++ b/src/components/toggle/index.js @@ -0,0 +1,5 @@ +import QToggle from './QToggle.js' + +export { + QToggle +} diff --git a/src/components/toolbar/QToolbar.js b/src/components/toolbar/QToolbar.js new file mode 100644 index 00000000000..0d1b58605fc --- /dev/null +++ b/src/components/toolbar/QToolbar.js @@ -0,0 +1,26 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +const attrs = { role: 'toolbar' } + +export default Vue.extend({ + name: 'QToolbar', + + mixins: [ ListenersMixin ], + + props: { + inset: Boolean + }, + + render (h) { + return h('div', { + staticClass: 'q-toolbar row no-wrap items-center', + class: this.inset ? 'q-toolbar--inset' : null, + attrs, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/toolbar/QToolbar.json b/src/components/toolbar/QToolbar.json new file mode 100644 index 00000000000..36981e1d675 --- /dev/null +++ b/src/components/toolbar/QToolbar.json @@ -0,0 +1,23 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/toolbar" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "inset": { + "type": "Boolean", + "desc": "Apply an inset to content (useful for subsequent toolbars)", + "category": "content" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/toolbar/QToolbar.sass b/src/components/toolbar/QToolbar.sass new file mode 100644 index 00000000000..c5e57db0070 --- /dev/null +++ b/src/components/toolbar/QToolbar.sass @@ -0,0 +1,25 @@ +.q-toolbar + position: relative + padding: $toolbar-padding + min-height: $toolbar-min-height + width: 100% + + &--inset + padding-left: $toolbar-inset-size + + .q-avatar + font-size: 38px + +.q-toolbar__title + flex: 1 1 0% + min-width: 1px + max-width: 100% + font-size: $toolbar-title-font-size + font-weight: $toolbar-title-font-weight + letter-spacing: $toolbar-title-letter-spacing + padding: $toolbar-title-padding + + &:first-child + padding-left: 0 + &:last-child + padding-right: 0 diff --git a/src/components/toolbar/QToolbar.styl b/src/components/toolbar/QToolbar.styl new file mode 100644 index 00000000000..c5e57db0070 --- /dev/null +++ b/src/components/toolbar/QToolbar.styl @@ -0,0 +1,25 @@ +.q-toolbar + position: relative + padding: $toolbar-padding + min-height: $toolbar-min-height + width: 100% + + &--inset + padding-left: $toolbar-inset-size + + .q-avatar + font-size: 38px + +.q-toolbar__title + flex: 1 1 0% + min-width: 1px + max-width: 100% + font-size: $toolbar-title-font-size + font-weight: $toolbar-title-font-weight + letter-spacing: $toolbar-title-letter-spacing + padding: $toolbar-title-padding + + &:first-child + padding-left: 0 + &:last-child + padding-right: 0 diff --git a/src/components/toolbar/QToolbarTitle.js b/src/components/toolbar/QToolbarTitle.js new file mode 100644 index 00000000000..36ac3baaa56 --- /dev/null +++ b/src/components/toolbar/QToolbarTitle.js @@ -0,0 +1,29 @@ +import Vue from 'vue' + +import ListenersMixin from '../../mixins/listeners.js' + +import { slot } from '../../utils/private/slot.js' + +export default Vue.extend({ + name: 'QToolbarTitle', + + mixins: [ ListenersMixin ], + + props: { + shrink: Boolean + }, + + computed: { + classes () { + return 'q-toolbar__title ellipsis' + + (this.shrink === true ? ' col-shrink' : '') + } + }, + + render (h) { + return h('div', { + class: this.classes, + on: { ...this.qListeners } + }, slot(this, 'default')) + } +}) diff --git a/src/components/toolbar/QToolbarTitle.json b/src/components/toolbar/QToolbarTitle.json new file mode 100644 index 00000000000..651bc40237b --- /dev/null +++ b/src/components/toolbar/QToolbarTitle.json @@ -0,0 +1,23 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/toolbar" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "shrink": { + "type": "Boolean", + "desc": "By default, QToolbarTitle is set to grow to the available space. However, you can reverse that with this prop", + "category": "behavior" + } + }, + + "slots": { + "default": { + "extends": "default" + } + } +} diff --git a/src/components/toolbar/index.js b/src/components/toolbar/index.js new file mode 100644 index 00000000000..19b2985e39d --- /dev/null +++ b/src/components/toolbar/index.js @@ -0,0 +1,7 @@ +import QToolbar from './QToolbar.js' +import QToolbarTitle from './QToolbarTitle.js' + +export { + QToolbar, + QToolbarTitle +} diff --git a/src/components/tooltip/QTooltip.js b/src/components/tooltip/QTooltip.js new file mode 100644 index 00000000000..85d8792e42c --- /dev/null +++ b/src/components/tooltip/QTooltip.js @@ -0,0 +1,298 @@ +import Vue from 'vue' + +import AnchorMixin from '../../mixins/anchor.js' +import TimeoutMixin from '../../mixins/timeout.js' +import ModelToggleMixin from '../../mixins/model-toggle.js' +import PortalMixin from '../../mixins/portal.js' +import TransitionMixin from '../../mixins/transition.js' + +import { getScrollTarget } from '../../utils/scroll.js' +import { addEvt, cleanEvt } from '../../utils/event.js' +import { clearSelection } from '../../utils/private/selection.js' +import { slot } from '../../utils/private/slot.js' +import { + validatePosition, validateOffset, setPosition, parsePosition +} from '../../utils/private/position-engine.js' + +const attrs = { role: 'tooltip' } + +export default Vue.extend({ + name: 'QTooltip', + + mixins: [ AnchorMixin, TimeoutMixin, ModelToggleMixin, PortalMixin, TransitionMixin ], + + props: { + minHeight: { + type: String, + default: null + }, + minWidth: { + type: String, + default: null + }, + + maxHeight: { + type: String, + default: null + }, + maxWidth: { + type: String, + default: null + }, + + transitionShow: { + default: 'jump-down' + }, + transitionHide: { + default: 'jump-up' + }, + + anchor: { + type: String, + default: 'bottom middle', + validator: validatePosition + }, + self: { + type: String, + default: 'top middle', + validator: validatePosition + }, + offset: { + type: Array, + default: () => [14, 14], + validator: validateOffset + }, + + scrollTarget: { + default: void 0 + }, + + delay: { + type: Number, + default: 0 + }, + + hideDelay: { + type: Number, + default: 0 + } + }, + + computed: { + anchorOrigin () { + return parsePosition(this.anchor, this.$q.lang.rtl) + }, + + selfOrigin () { + return parsePosition(this.self, this.$q.lang.rtl) + }, + + hideOnRouteChange () { + return this.persistent !== true + } + }, + + methods: { + __show (evt) { + this.__showPortal() + + this.__registerTick(() => { + this.updatePosition() + this.__configureScrollTarget() + }) + + if (this.unwatch === void 0) { + this.unwatch = this.$watch( + () => this.$q.screen.width + '|' + this.$q.screen.height + '|' + this.self + '|' + this.anchor + '|' + this.$q.lang.rtl, + this.updatePosition + ) + } + + // should __removeTimeout() if this gets removed + this.__registerTimeout(() => { + this.$emit('show', evt) + }, 300) + }, + + __hide (evt) { + this.__removeTick() + this.__anchorCleanup() + + // should __removeTimeout() if this gets removed + this.__registerTimeout(() => { + if (this.showing !== true) { + this.__hidePortal() + this.$emit('hide', evt) + } + }, 300) + }, + + __anchorCleanup () { + if (this.unwatch !== void 0) { + this.unwatch() + this.unwatch = void 0 + } + + this.__unconfigureScrollTarget() + cleanEvt(this, 'tooltipTemp') + cleanEvt(this, 'tooltipPreventMenu') + cleanEvt(this, 'anchorTemp') + }, + + updatePosition () { + if (this.anchorEl === void 0 || this.__portal === void 0) { + return + } + + const el = this.__portal.$el + + if (el.nodeType === 8) { // IE replaces the comment with delay + setTimeout(this.updatePosition, 25) + return + } + + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition) + this.settingPosition = requestAnimationFrame(() => { + setPosition({ + el, + offset: this.offset, + anchorEl: this.anchorEl, + anchorOrigin: this.anchorOrigin, + selfOrigin: this.selfOrigin, + minHeight: this.minHeight, + minWidth: this.minWidth, + maxHeight: this.maxHeight, + maxWidth: this.maxWidth, + rtl: this.$q.lang.rtl + }) + this.settingPosition = void 0 + }) + }, + + __delayShow (evt) { + if (this.$q.platform.is.mobile === true) { + if (this.showing) { + return + } + + clearSelection() + document.body.classList.add('non-selectable') + + const target = this.anchorEl + const evts = [ 'touchcancel', 'touchend', 'click' ] + .map(e => ([ target, e, '__clearPreventContextMenu', 'passiveCapture' ])) + .concat([ + [ document, 'touchstart', '__delayHide', 'passiveCapture' ] + ]) + + addEvt(this, 'tooltipTemp', evts) + addEvt(this, 'tooltipPreventMenu', [ + [ document, 'contextmenu', 'prevent', 'capture' ] + ]) + } + + this.__registerTimeout(() => { this.show(evt) }, this.delay) + }, + + __delayHide (evt) { + const innerNode = this.__getInnerNode() + + if (innerNode !== void 0 && evt) { + if (evt.type === 'mouseleave') { + if (innerNode.contains(evt.relatedTarget) === true) { + cleanEvt(this, 'anchorTemp') + + addEvt(this, 'anchorTemp', [ + [ innerNode, 'mouseleave', '__delayHide', 'passive' ] + ]) + + return + } + } + else if (innerNode.contains(evt.target) === true) { + return + } + } + + if (this.$q.platform.is.mobile === true) { + cleanEvt(this, 'tooltipTemp') + cleanEvt(this, 'tooltipPreventMenu') + clearSelection() + // delay needed otherwise selection still occurs + setTimeout(() => { + document.body.classList.remove('non-selectable') + }, 10) + } + else { + cleanEvt(this, 'anchorTemp') + } + + // should __removeTimeout() if this gets removed + this.__registerTimeout(() => { this.hide(evt) }, this.hideDelay) + }, + + __clearPreventContextMenu () { + cleanEvt(this, 'tooltipPreventMenu') + }, + + __configureAnchorEl () { + if (this.noParentEvent === true || this.anchorEl === void 0) { return } + + const evts = this.$q.platform.is.mobile === true + ? [ + [ this.anchorEl, 'touchstart', '__delayShow', 'passive' ] + ] + : [ + [ this.anchorEl, 'mouseenter', '__delayShow', 'passive' ], + [ this.anchorEl, 'mouseleave', '__delayHide', 'passive' ] + ] + + addEvt(this, 'anchor', evts) + }, + + __unconfigureScrollTarget () { + this.__changeScrollEvent() + }, + + __configureScrollTarget () { + if (this.showing === true && (this.anchorEl !== void 0 || this.scrollTarget !== void 0)) { + const fn = this.noParentEvent === true + ? this.updatePosition + : this.hide + + this.__changeScrollEvent(fn, getScrollTarget(this.anchorEl, this.scrollTarget)) + } + }, + + __renderPortal (h) { + return h('transition', { + props: this.transitionProps + }, [ + this.showing === true ? h('div', { + staticClass: 'q-tooltip__container column no-pointer-events' + }, [ + h('div', { + ref: 'inner', + staticClass: 'q-tooltip q-tooltip--style scroll all-pointer-events', + class: this.contentClass, + style: this.contentStyle, + attrs + }, slot(this, 'default')) + ]) : null + ]) + } + }, + + created () { + this.__useTick('__registerTick', '__removeTick') + this.__useTimeout('__registerTimeout') + }, + + mounted () { + this.__processModelChange(this.value) + }, + + beforeDestroy () { + this.settingPosition !== void 0 && cancelAnimationFrame(this.settingPosition) + } +}) diff --git a/src/components/tooltip/QTooltip.json b/src/components/tooltip/QTooltip.json new file mode 100644 index 00000000000..e8a46937d98 --- /dev/null +++ b/src/components/tooltip/QTooltip.json @@ -0,0 +1,132 @@ +{ + "mixins": [ "mixins/model-toggle", "mixins/portal" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tooltip" + }, + + "props": { + "min-height": { + "extends": "size", + "desc": "The minimum height of the Tooltip; Size in CSS units, including unit name", + "category": "style", + "addedIn": "v1.15.5" + }, + + "min-width": { + "extends": "size", + "desc": "The minimum width of the Tooltip; Size in CSS units, including unit name", + "category": "style", + "addedIn": "v1.15.5" + }, + + "max-height": { + "extends": "size", + "desc": "The maximum height of the Tooltip; Size in CSS units, including unit name", + "category": "style" + }, + + "max-width": { + "extends": "size", + "desc": "The maximum width of the Tooltip; Size in CSS units, including unit name", + "category": "style" + }, + + "transition-show": { + "extends": "transition", + "default": "jump-down", + "category": "behavior" + }, + + "transition-hide": { + "extends": "transition", + "default": "jump-up", + "category": "behavior" + }, + + "anchor": { + "type": "String", + "desc": "Two values setting the starting position or anchor point of the Tooltip relative to its target", + "values": [ + "top left", "top middle", "top right", "top start", "top end", + "center left", "center middle", "center right", "center start", "center end", + "bottom left", "bottom middle", "bottom right", "bottom start", "bottom end" + ], + "default": "bottom middle", + "examples": [ "top left", "bottom right" ], + "category": "position" + }, + + "self": { + "type": "String", + "desc": "Two values setting the Tooltip's own position relative to its target", + "values": [ + "top left", "top middle", "top right", "top start", "top end", + "center left", "center middle", "center right", "center start", "center end", + "bottom left", "bottom middle", "bottom right", "bottom start", "bottom end" + ], + "default": "top middle", + "examples": [ "top left", "bottom right" ], + "category": "position" + }, + + "offset": { + "type": "Array", + "desc": "An array of two numbers to offset the Tooltip horizontally and vertically in pixels", + "default": "[14, 14]", + "examples": [ "[8, 8]", "[5, 10]" ], + "category": "position" + }, + + "scroll-target": { + "extends": "scroll-target" + }, + + "target": { + "type": [ "Boolean", "String" ], + "desc": "Configure a target element to trigger Tooltip toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) it attaches the events to the specified DOM element (if it exists)", + "default": true, + "values": [ "(Boolean) true", "(Boolean) false", "(CSS selector)" ], + "examples": [ + ":target=\"false\"", + "target=\".my-parent\"" + ], + "category": "behavior" + }, + + "no-parent-event": { + "type": "Boolean", + "desc": "Skips attaching events to the target DOM element (that trigger the element to get shown)", + "category": "behavior" + }, + + "delay": { + "type": "Number", + "desc": "Configure Tooltip to appear with delay", + "default": 0, + "examples": [ ":delay=\"550\"" ], + "category": "behavior" + }, + + "hide-delay": { + "type": "Number", + "desc": "Configure Tooltip to disappear with delay", + "default": 0, + "examples": [ ":hide-delay=\"650\"" ], + "category": "behavior", + "addedIn": "v1.9.5" + } + }, + + "slots": { + "default": { + "extends": "default" + } + }, + + "methods": { + "updatePosition": { + "desc": "There are some custom scenarios for which Quasar cannot automatically reposition the tooltip without significant performance drawbacks so the optimal solution is for you to call this method when you need it" + } + } +} diff --git a/src/components/tooltip/QTooltip.sass b/src/components/tooltip/QTooltip.sass new file mode 100644 index 00000000000..88e4a23ff60 --- /dev/null +++ b/src/components/tooltip/QTooltip.sass @@ -0,0 +1,21 @@ +.q-tooltip + padding: $tooltip-padding + opacity: 0 + + &__container + position: fixed + z-index: $z-tooltip + contain: layout + contain: layout style + + &--style + font-size: $tooltip-fontsize + color: $tooltip-color + background: $tooltip-background + border-radius: $tooltip-border-radius + text-transform: none + font-weight: normal + + @media (max-width: $breakpoint-xs-max) + font-size: $tooltip-mobile-fontsize + padding: $tooltip-mobile-padding diff --git a/src/components/tooltip/QTooltip.styl b/src/components/tooltip/QTooltip.styl new file mode 100644 index 00000000000..88e4a23ff60 --- /dev/null +++ b/src/components/tooltip/QTooltip.styl @@ -0,0 +1,21 @@ +.q-tooltip + padding: $tooltip-padding + opacity: 0 + + &__container + position: fixed + z-index: $z-tooltip + contain: layout + contain: layout style + + &--style + font-size: $tooltip-fontsize + color: $tooltip-color + background: $tooltip-background + border-radius: $tooltip-border-radius + text-transform: none + font-weight: normal + + @media (max-width: $breakpoint-xs-max) + font-size: $tooltip-mobile-fontsize + padding: $tooltip-mobile-padding diff --git a/src/components/tooltip/index.js b/src/components/tooltip/index.js new file mode 100644 index 00000000000..5131e5e3af9 --- /dev/null +++ b/src/components/tooltip/index.js @@ -0,0 +1,5 @@ +import QTooltip from './QTooltip.js' + +export { + QTooltip +} diff --git a/src/components/tree/QTree.js b/src/components/tree/QTree.js new file mode 100644 index 00000000000..7f0e49844a1 --- /dev/null +++ b/src/components/tree/QTree.js @@ -0,0 +1,717 @@ +import Vue from 'vue' + +import QIcon from '../icon/QIcon.js' +import QCheckbox from '../checkbox/QCheckbox.js' +import QSlideTransition from '../slide-transition/QSlideTransition.js' +import QSpinner from '../spinner/QSpinner.js' +import DarkMixin from '../../mixins/dark.js' + +import { stopAndPrevent } from '../../utils/event.js' +import { shouldIgnoreKey } from '../../utils/private/key-composition.js' +import cache from '../../utils/private/cache.js' +import { injectProp } from '../../utils/private/inject-obj-prop.js' + +const tickStrategyOptions = [ 'none', 'strict', 'leaf', 'leaf-filtered' ] + +export default Vue.extend({ + name: 'QTree', + + mixins: [ DarkMixin ], + + props: { + nodes: { + type: Array, + required: true + }, + nodeKey: { + type: String, + required: true + }, + labelKey: { + type: String, + default: 'label' + }, + childrenKey: { + type: String, + default: 'children' + }, + + dense: Boolean, + + color: String, + controlColor: String, + textColor: String, + selectedColor: String, + + icon: String, + + tickStrategy: { + type: String, + default: 'none', + validator: v => tickStrategyOptions.includes(v) + }, + ticked: Array, // sync + expanded: Array, // sync + selected: {}, // sync + + noSelectionUnset: Boolean, + + defaultExpandAll: Boolean, + accordion: Boolean, + + filter: String, + filterMethod: { + type: Function, + default (node, filter) { + const filt = filter.toLowerCase() + return node[this.labelKey] && + node[this.labelKey].toLowerCase().indexOf(filt) > -1 + } + }, + + duration: Number, + noConnectors: Boolean, + noTransition: Boolean, + + noNodesLabel: String, + noResultsLabel: String + }, + + computed: { + classes () { + return `q-tree q-tree--${this.dense === true ? 'dense' : 'standard'}` + + (this.noConnectors === true ? ' q-tree--no-connectors' : '') + + ` q-tree--${this.darkSuffix}` + + (this.color !== void 0 ? ` text-${this.color}` : '') + }, + + hasSelection () { + return this.selected !== void 0 + }, + + computedIcon () { + return this.icon || this.$q.iconSet.tree.icon + }, + + computedControlColor () { + return this.controlColor || this.color + }, + + textColorClass () { + if (this.textColor !== void 0) { + return `text-${this.textColor}` + } + }, + + selectedColorClass () { + const color = this.selectedColor || this.color + if (color) { + return `text-${color}` + } + }, + + meta () { + const meta = this.metaMap + meta.clear() + + const travel = (node, parent) => { + const tickStrategy = node.tickStrategy || (parent ? parent.tickStrategy : this.tickStrategy) + const + key = node[this.nodeKey], + isParent = node[this.childrenKey] && node[this.childrenKey].length > 0, + selectable = node.disabled !== true && this.hasSelection === true && node.selectable !== false, + expandable = node.disabled !== true && node.expandable !== false, + hasTicking = tickStrategy !== 'none', + strictTicking = tickStrategy === 'strict', + leafFilteredTicking = tickStrategy === 'leaf-filtered', + leafTicking = tickStrategy === 'leaf' || tickStrategy === 'leaf-filtered' + + let tickable = node.disabled !== true && node.tickable !== false + if (leafTicking === true && tickable === true && parent && parent.tickable !== true) { + tickable = false + } + + let lazy = node.lazy + if ( + lazy === true && + this.lazy[key] !== void 0 && + Array.isArray(node[this.childrenKey]) === true + ) { + lazy = this.lazy[key] + } + + const m = { + key, + parent, + isParent, + lazy, + disabled: node.disabled, + link: node.disabled !== true && (selectable === true || (expandable === true && (isParent === true || lazy === true))), + children: [], + matchesFilter: this.filter ? this.filterMethod(node, this.filter) : true, + + selected: key === this.selected && selectable === true, + selectable, + expanded: isParent === true ? this.innerExpanded.includes(key) : false, + expandable, + noTick: node.noTick === true || (strictTicking !== true && lazy && lazy !== 'loaded'), + tickable, + tickStrategy, + hasTicking, + strictTicking, + leafFilteredTicking, + leafTicking, + ticked: strictTicking === true + ? this.innerTicked.includes(key) + : (isParent === true ? false : this.innerTicked.includes(key)) + } + + if (m.expanded === true && this.renderedMap.has(key) !== true) { + this.renderedMap.set(key, true) + } + + meta.set(key, m) + + if (isParent === true) { + m.children = node[this.childrenKey].map(n => travel(n, m)) + + if (this.filter) { + if (m.matchesFilter !== true) { + m.matchesFilter = m.children.some(n => n.matchesFilter) + } + else if ( + m.noTick !== true && + m.disabled !== true && + m.tickable === true && + leafFilteredTicking === true && + m.children.every(n => n.matchesFilter !== true || n.noTick === true || n.tickable !== true) === true + ) { + m.tickable = false + } + } + + if (m.matchesFilter === true) { + if (m.noTick !== true && strictTicking !== true && m.children.every(n => n.noTick) === true) { + m.noTick = true + } + + if (leafTicking) { + m.ticked = false + m.indeterminate = m.children.some(node => node.indeterminate === true) + m.tickable = m.tickable === true && m.children.some(node => node.tickable) + + if (m.indeterminate !== true) { + const sel = m.children + .reduce((acc, meta) => meta.ticked === true ? acc + 1 : acc, 0) + + if (sel === m.children.length) { + m.ticked = true + } + else if (sel > 0) { + m.indeterminate = true + } + } + + if (m.indeterminate === true) { + m.indeterminateNextState = m.children + .every(meta => meta.tickable !== true || meta.ticked !== true) + } + } + } + } + + return m + } + + this.nodes.forEach(node => travel(node, null)) + return meta + } + }, + + data () { + return { + lazy: {}, + innerTicked: this.ticked || [], + innerExpanded: this.expanded || [] + } + }, + + watch: { + ticked (val) { + this.innerTicked = val + }, + + expanded (val) { + this.innerExpanded = val + } + }, + + methods: { + getNodeByKey (key) { + const reduce = [].reduce + + const find = (result, node) => { + if (result || !node) { + return result + } + if (Array.isArray(node) === true) { + return reduce.call(Object(node), find, result) + } + if (node[this.nodeKey] === key) { + return node + } + if (node[this.childrenKey]) { + return find(null, node[this.childrenKey]) + } + } + + return find(null, this.nodes) + }, + + getTickedNodes () { + return this.innerTicked.map(key => this.getNodeByKey(key)) + }, + + getExpandedNodes () { + return this.innerExpanded.map(key => this.getNodeByKey(key)) + }, + + isExpanded (key) { + const m = this.meta.get(key) + return m !== void 0 + ? m.expanded + : false + }, + + collapseAll () { + if (this.expanded !== void 0) { + this.$emit('update:expanded', []) + } + else { + this.innerExpanded = [] + } + }, + + expandAll () { + const + expanded = this.innerExpanded, + travel = node => { + if (node[this.childrenKey] && node[this.childrenKey].length > 0) { + if (node.expandable !== false && node.disabled !== true) { + expanded.push(node[this.nodeKey]) + node[this.childrenKey].forEach(travel) + } + } + } + + this.nodes.forEach(travel) + + if (this.expanded !== void 0) { + this.$emit('update:expanded', expanded) + } + else { + this.innerExpanded = expanded + } + }, + + setExpanded (key, state, node = this.getNodeByKey(key), meta = this.meta.get(key)) { + if (meta.lazy && meta.lazy !== 'loaded') { + if (meta.lazy === 'loading') { + return + } + + this.$set(this.lazy, key, 'loading') + if (Array.isArray(node[this.childrenKey]) !== true) { + this.$set(node, this.childrenKey, []) + } + this.$emit('lazy-load', { + node, + key, + done: children => { + this.lazy[key] = 'loaded' + this.$set(node, this.childrenKey, Array.isArray(children) === true ? children : []) + this.$nextTick(() => { + const m = this.meta.get(key) + if (m !== void 0 && m.isParent === true) { + this.__setExpanded(key, true) + } + }) + }, + fail: () => { + this.$delete(this.lazy, key) + if (node[this.childrenKey].length === 0) { + this.$delete(node, this.childrenKey) + } + } + }) + } + else if (meta.isParent === true && meta.expandable === true) { + this.__setExpanded(key, state) + } + }, + + __setExpanded (key, state) { + let target = this.innerExpanded + const emit = this.expanded !== void 0 + + if (emit === true) { + target = target.slice() + } + + if (state) { + if (this.accordion) { + const m = this.meta.get(key) + if (m !== void 0) { + const collapse = [] + if (m.parent) { + m.parent.children.forEach(m => { + if (m.key !== key && m.expandable === true) { + collapse.push(m.key) + } + }) + } + else { + this.nodes.forEach(node => { + const k = node[this.nodeKey] + if (k !== key) { + collapse.push(k) + } + }) + } + if (collapse.length > 0) { + target = target.filter(k => collapse.includes(k) === false) + } + } + } + + target = target.concat([ key ]) + .filter((key, index, self) => self.indexOf(key) === index) + } + else { + target = target.filter(k => k !== key) + } + + if (emit === true) { + this.$emit('update:expanded', target) + } + else { + this.innerExpanded = target + } + }, + + isTicked (key) { + const m = this.meta.get(key) + return m !== void 0 + ? m.ticked + : false + }, + + setTicked (keys, state) { + let target = this.innerTicked + const emit = this.ticked !== void 0 + + if (emit === true) { + target = target.slice() + } + + if (state) { + target = target.concat(keys) + .filter((key, index, self) => self.indexOf(key) === index) + } + else { + target = target.filter(k => keys.includes(k) === false) + } + + if (emit === true) { + this.$emit('update:ticked', target) + } + }, + + __getSlotScope (node, meta, key) { + const scope = { tree: this, node, key, color: this.color, dark: this.dark } + + injectProp( + scope, + 'expanded', + () => { return meta.expanded }, + val => { val !== meta.expanded && this.setExpanded(key, val) } + ) + + injectProp( + scope, + 'ticked', + () => { return meta.ticked }, + val => { val !== meta.ticked && this.setTicked([ key ], val) } + ) + + return scope + }, + + __getChildren (h, nodes) { + return ( + this.filter + ? nodes.filter(n => this.meta.get(n[this.nodeKey]).matchesFilter) + : nodes + ).map(child => this.__getNode(h, child)) + }, + + __getNodeMedia (h, node) { + if (node.icon !== void 0) { + return h(QIcon, { + staticClass: 'q-tree__icon q-mr-sm', + props: { name: node.icon, color: node.iconColor } + }) + } + const src = node.img || node.avatar + if (src) { + return h('img', { + staticClass: `q-tree__${node.img ? 'img' : 'avatar'} q-mr-sm`, + attrs: { src } + }) + } + }, + + __getNode (h, node) { + const + key = node[this.nodeKey], + meta = this.meta.get(key), + header = node.header + ? this.$scopedSlots[`header-${node.header}`] || this.$scopedSlots['default-header'] + : this.$scopedSlots['default-header'] + + const children = meta.isParent === true + ? this.__getChildren(h, node[this.childrenKey]) + : [] + + const isParent = children.length > 0 || (meta.lazy && meta.lazy !== 'loaded') + + let body = node.body + ? this.$scopedSlots[`body-${node.body}`] || this.$scopedSlots['default-body'] + : this.$scopedSlots['default-body'] + const slotScope = header !== void 0 || body !== void 0 + ? this.__getSlotScope(node, meta, key) + : null + + if (body !== void 0) { + body = h('div', { staticClass: 'q-tree__node-body relative-position' }, [ + h('div', { class: this.textColorClass }, [ + body(slotScope) + ]) + ]) + } + + const getChildren = () => h( + 'div', + { + staticClass: 'q-tree__node-collapsible', + class: this.textColorClass, + directives: [{ name: 'show', value: meta.expanded }] + }, + this.renderedMap.has(key) === true + ? [ + body, + + h('div', { + staticClass: 'q-tree__children', + class: { 'q-tree__node--disabled': meta.disabled } + }, children) + ] + : void 0 + ) + + return h('div', { + key, + staticClass: 'q-tree__node relative-position', + class: { 'q-tree__node--parent': isParent, 'q-tree__node--child': isParent !== true } + }, [ + h('div', { + staticClass: 'q-tree__node-header relative-position row no-wrap items-center', + class: { + 'q-tree__node--link q-hoverable q-focusable': meta.link, + 'q-tree__node--selected': meta.selected, + 'q-tree__node--disabled': meta.disabled + }, + attrs: { tabindex: meta.link ? 0 : -1 }, + on: { + click: (e) => { + this.__onClick(node, meta, e) + }, + keypress: e => { + if (shouldIgnoreKey(e) !== true) { + if (e.keyCode === 13) { this.__onClick(node, meta, e, true) } + else if (e.keyCode === 32) { this.__onExpandClick(node, meta, e, true) } + } + } + } + }, [ + h('div', { staticClass: 'q-focus-helper', attrs: { tabindex: -1 }, ref: `blurTarget_${meta.key}` }), + + meta.lazy === 'loading' + ? h(QSpinner, { + staticClass: 'q-tree__spinner', + props: { color: this.computedControlColor } + }) + : ( + isParent === true + ? h(QIcon, { + staticClass: 'q-tree__arrow', + class: { 'q-tree__arrow--rotate': meta.expanded }, + props: { name: this.computedIcon }, + on: { + click: e => { + this.__onExpandClick(node, meta, e) + } + } + }) + : null + ), + + meta.hasTicking === true && meta.noTick !== true + ? h(QCheckbox, { + staticClass: 'q-tree__tickbox', + props: { + value: meta.indeterminate === true ? null : meta.ticked, + color: this.computedControlColor, + dark: this.dark, + dense: true, + keepColor: true, + disable: meta.tickable !== true + }, + on: { + keydown: stopAndPrevent, + input: v => { + this.__onTickedClick(meta, v) + } + } + }) + : null, + + h('div', { + 'staticClass': 'q-tree__node-header-content col row no-wrap items-center', + class: meta.selected ? this.selectedColorClass : this.textColorClass + }, [ + header + ? header(slotScope) + : [ + this.__getNodeMedia(h, node), + h('div', node[this.labelKey]) + ] + ]) + ]), + + isParent === true + ? ( + this.noTransition === true + ? getChildren() + : h(QSlideTransition, { + key: 'slide', + props: { duration: this.duration }, + on: cache(this, 'slide', { + show: () => { this.$emit('after-show') }, + hide: () => { this.$emit('after-hide') } + }) + }, [ getChildren() ]) + ) + : ( + this.renderedMap.has(key) === true + ? body + : void 0 + ) + ]) + }, + + __blur (key) { + const blurTarget = this.$refs[`blurTarget_${key}`] + blurTarget !== void 0 && blurTarget.focus() + }, + + __onClick (node, meta, e, keyboard) { + keyboard !== true && this.__blur(meta.key) + + if (this.hasSelection && meta.selectable) { + if (this.noSelectionUnset === false) { + this.$emit('update:selected', meta.key !== this.selected ? meta.key : null) + } + else if (meta.key !== this.selected) { + this.$emit('update:selected', meta.key === void 0 ? null : meta.key) + } + } + else { + this.__onExpandClick(node, meta, e, keyboard) + } + + if (typeof node.handler === 'function') { + node.handler(node) + } + }, + + __onExpandClick (node, meta, e, keyboard) { + if (e !== void 0) { + stopAndPrevent(e) + } + keyboard !== true && this.__blur(meta.key) + this.setExpanded(meta.key, meta.expanded !== true, node, meta) + }, + + __onTickedClick (meta, state) { + if (meta.indeterminate === true) { + state = meta.indeterminateNextState + } + if (meta.strictTicking) { + this.setTicked([ meta.key ], state) + } + else if (meta.leafTicking) { + const keys = [] + const travel = meta => { + if (meta.isParent) { + if (state !== true && meta.noTick !== true && meta.tickable === true) { + keys.push(meta.key) + } + if (meta.leafTicking === true) { + meta.children.forEach(travel) + } + } + else if ( + meta.noTick !== true && + meta.tickable === true && + (meta.leafFilteredTicking !== true || meta.matchesFilter === true) + ) { + keys.push(meta.key) + } + } + travel(meta) + this.setTicked(keys, state) + } + } + }, + + render (h) { + const children = this.__getChildren(h, this.nodes) + + return h( + 'div', { + class: this.classes + }, + children.length === 0 + ? ( + this.filter + ? this.noResultsLabel || this.$q.lang.tree.noResults + : this.noNodesLabel || this.$q.lang.tree.noNodes + ) + : children + ) + }, + + created () { + this.renderedMap = new Map() + this.metaMap = new Map() + this.defaultExpandAll === true && this.expandAll() + }, + + beforeDestroy () { + this.renderedMap.clear() + this.renderedMap = void 0 + this.metaMap.clear() + this.metaMap = void 0 + } +}) diff --git a/src/components/tree/QTree.json b/src/components/tree/QTree.json new file mode 100644 index 00000000000..3ac183038bb --- /dev/null +++ b/src/components/tree/QTree.json @@ -0,0 +1,547 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/tree" + }, + + "props": { + "nodes": { + "type": "Array", + "desc": "The array of nodes that designates the tree structure", + "required": true, + "examples": [ "[ {...}, {...} ]" ], + "category": "content" + }, + + "node-key": { + "type": "String", + "desc": "The property name of each node object that holds a unique node id", + "required": true, + "examples": [ "key", "id" ], + "category": "content" + }, + + "label-key": { + "type": "String", + "desc": "The property name of each node object that holds the label of the node", + "default": "label", + "examples": [ "name", "description" ], + "category": "content" + }, + + "children-key": { + "type": "String", + "desc": "The property name of each node object that holds the list of children of the node", + "default": "children", + "examples": [ "roles", "relatives" ], + "category": "content", + "addedIn":"v1.11.3" + }, + + "no-connectors": { + "type": "Boolean", + "desc": "Do not display the connector lines between nodes", + "category": "style", + "addedIn": "v1.5.10" + }, + + "color": { + "extends": "color" + }, + + "control-color": { + "extends": "color", + "desc": "Color name for controls (like checkboxes) from the Quasar Color Palette", + "category": "style" + }, + + "text-color": { + "extends": "text-color" + }, + + "selected-color": { + "extends": "color", + "desc": "Color name for selected nodes (from the Quasar Color Palette)" + }, + + "dense": { + "extends": "dense", + "addedIn": "v1.17" + }, + + "dark": { + "extends": "dark" + }, + + "icon": { + "extends": "icon" + }, + + "tick-strategy": { + "type": "String", + "desc": "The type of strategy to use for the selection of the nodes", + "default": "none", + "values": [ "none", "strict", "leaf", "leaf-filtered" ], + "category": "behavior" + }, + + "ticked": { + "type": "Array", + "desc": "Keys of nodes that are ticked", + "sync": true, + "examples": [ ":ticked.sync=\"tickedKeys\"" ], + "category": "state" + }, + + "expanded": { + "type": "Array", + "desc": "Keys of nodes that are expanded", + "sync": true, + "examples": [ ":expanded.sync=\"expandedKeys\"" ], + "category": "state" + }, + + "selected": { + "type": "Any", + "desc": "Key of node currently selected", + "sync": true, + "examples": [ ":selected.sync=\"selectedKey\"" ], + "category": "state" + }, + + "no-selection-unset": { + "type": "Boolean", + "desc": "Do not allow un-selection when clicking currently selected node", + "category": "behavior", + "addedIn": "v1.17.5" + }, + + "default-expand-all": { + "type": "Boolean", + "desc": "Allow the tree to have all its branches expanded, when first rendered", + "category": "behavior" + }, + + "accordion": { + "type": "Boolean", + "desc": "Allows the tree to be set in accordion mode", + "category": "behavior" + }, + + "no-transition": { + "type": "Boolean", + "desc": "Turn off transition effects when expanding/collapsing nodes; Also enhances perf by a lot as a side-effect; Recommended for big trees", + "category": "behavior", + "addedIn": "v1.21.1" + }, + + "filter": { + "type": "String", + "desc": "The text value to be used for filtering nodes", + "examples": [ ":filter=\"searchText\"" ], + "category": "filter" + }, + + "filter-method": { + "type": "Function", + "desc": "The function to use to filter the tree nodes; For best performance, reference it from your scope and do not define it inline", + "default": "(see source code)", + "params": { + "node": { + "type": "Object", + "desc": "Node currently being filtered", + "__exemption": [ "examples" ] + }, + "filter": { + "type": "String", + "desc": "Filter text to match against", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Matches or not" + }, + "category": "filter" + }, + + "duration": { + "type": "Number", + "desc": "Toggle animation duration (in milliseconds)", + "default": 300, + "examples": [ ":duration=\"500\"" ], + "category": "style" + }, + + "no-nodes-label": { + "type": "String", + "desc": "Override default such label for when no nodes are available", + "examples": [ "No nodes to show!" ], + "category": "content" + }, + + "no-results-label": { + "type": "String", + "desc": "Override default such label for when no nodes are available due to filtering", + "examples": [ "No results" ], + "category": "content" + } + }, + + "scopedSlots": { + "default-header": { + "desc": "Slot to use for defining the header of a node", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "ticked": { + "type": "Boolean", + "desc": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "reactive": true + }, + "tree": { + "type": "Object", + "desc": "QTree instance", + "__exemption": [ "examples" ] + }, + "node": { + "type": "Object", + "desc": "Node object", + "__exemption": [ "examples" ] + }, + "key": { + "type": "Any", + "desc": "Node's key", + "__exemption": [ "examples" ] + }, + "color": { + "type": "String", + "desc": "QTree instance 'color' supplied prop value", + "examples": [ "primary" ] + }, + "dark": { + "type": "Boolean", + "desc": "QTree instance 'dark' supplied prop value" + } + } + }, + + "header-[name]": { + "desc": "Header template slot for describing node header; Used by nodes which have their 'header' prop set to '[name]', where '[name]' can be any string", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "ticked": { + "type": "Boolean", + "desc": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "reactive": true + }, + "tree": { + "type": "Object", + "desc": "QTree instance", + "__exemption": [ "examples" ] + }, + "node": { + "type": "Object", + "desc": "Node object", + "__exemption": [ "examples" ] + }, + "key": { + "type": "Any", + "desc": "Node's key", + "__exemption": [ "examples" ] + }, + "color": { + "type": "String", + "desc": "QTree instance 'color' supplied prop value", + "examples": [ "primary" ] + }, + "dark": { + "type": "Boolean", + "desc": "QTree instance 'dark' supplied prop value" + } + } + }, + + "default-body": { + "desc": "Slot to use for defining the body of a node", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "ticked": { + "type": "Boolean", + "desc": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "reactive": true + }, + "tree": { + "type": "Object", + "desc": "QTree instance", + "__exemption": [ "examples" ] + }, + "node": { + "type": "Object", + "desc": "Node object", + "__exemption": [ "examples" ] + }, + "key": { + "type": "Any", + "desc": "Node's key", + "__exemption": [ "examples" ] + }, + "color": { + "type": "String", + "desc": "QTree instance 'color' supplied prop value", + "examples": [ "primary" ] + }, + "dark": { + "type": "Boolean", + "desc": "QTree instance 'dark' supplied prop value" + } + } + }, + + "body-[name]": { + "desc": "Body template slot for describing node body; Used by nodes which have their 'body' prop set to '[name]', where '[name]' can be any string", + "scope": { + "expanded": { + "type": "Boolean", + "desc": "Is node expanded? Can directly be assigned new Boolean value which changes expanded state", + "reactive": true + }, + "ticked": { + "type": "Boolean", + "desc": "Is node ticked? Can directly be assigned new Boolean value which changes ticked state", + "reactive": true + }, + "tree": { + "type": "Object", + "desc": "QTree instance", + "__exemption": [ "examples" ] + }, + "node": { + "type": "Object", + "desc": "Node object", + "__exemption": [ "examples" ] + }, + "key": { + "type": "Any", + "desc": "Node's key", + "__exemption": [ "examples" ] + }, + "color": { + "type": "String", + "desc": "QTree instance 'color' supplied prop value", + "examples": [ "primary" ] + }, + "dark": { + "type": "Boolean", + "desc": "QTree instance 'dark' supplied prop value" + } + } + } + }, + + "events": { + "update:expanded": { + "desc": "Triggered when nodes are expanded or collapsed; Used by Vue on 'update' synched prop", + "params": { + "expanded": { + "type": "Array", + "desc": "The expanded node keys", + "examples": [ "[ 'Node 1', 'Node 2' ]" ] + } + } + }, + + "lazy-load": { + "desc": "Emitted when the lazy loading of nodes is finished", + "params": { + "details": { + "type": "Object", + "desc": "Lazy loading details", + "definition": { + "node": { + "type": "Object", + "desc": "The node to which the new nodes (the children) will be appended", + "__exemption": [ "examples" ] + }, + "key": { + "type": "String", + "desc": "The key of the node getting the newly loaded child nodes", + "examples": [ "New Node" ] + }, + "done": { + "type": "Function", + "desc": "The callback to be carried out when the loading is successful", + "params": { + "children": { + "type": "Array", + "desc": "Array of nodes", + "__exemption": [ "examples" ] + } + }, + "returns": null + }, + "fail": { + "type": "Function", + "desc": "The callback to be carried out should the loading fails", + "params": null, + "returns": null + } + } + } + } + }, + + "update:ticked": { + "desc": "Emitted when nodes are ticked/unticked via the checkbox; Used by Vue on 'ticked' synched prop", + "params": { + "target": { + "type": "Array", + "desc": "The ticked node keys", + "examples": [ "[ 'Node 1', 'Node 2' ]" ] + } + } + }, + + "update:selected": { + "desc": "Emitted when selected node changes; Used by Vue on 'selected' synched prop", + "params": { + "target": { + "type": "Any", + "desc": "The selected node key", + "examples": [ "Node 1" ] + } + } + }, + + "after-show": { + "extends": "after-show", + "addedIn": "v1.9" + }, + + "after-hide": { + "extends": "after-hide", + "addedIn": "v1.9" + } + }, + + "methods": { + "getNodeByKey": { + "desc": "Get the node with the given key", + "params": { + "key": { + "type": "Any", + "desc": "The key of a node", + "required": true, + "examples": [ "Node 1" ] + } + }, + "returns": { + "type": "Object", + "desc": "Requested node", + "__exemption": [ "examples" ] + } + }, + + "getTickedNodes": { + "desc": "Get array of nodes that are ticked", + "returns": { + "type": "Array", + "desc": "Ticked node objects", + "__exemption": [ "examples" ] + } + }, + + "getExpandedNodes": { + "desc": "Get array of nodes that are expanded", + "returns": { + "type": "Array", + "desc": "Expanded node objects", + "__exemption": [ "examples" ] + } + }, + + "isExpanded": { + "desc": "Determine if a node is expanded", + "params": { + "key": { + "type": "Any", + "desc": "The key of a node", + "required": true, + "examples": [ "Node 1" ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Is specified node expanded?" + } + }, + + "expandAll": { + "desc": "Use to expand all branches of the tree" + }, + + "collapseAll": { + "desc": "Use to collapse all branches of the tree" + }, + + "setExpanded": { + "desc": "Expands the tree at the point of the node with the key given", + "params": { + "key": { + "type": "Any", + "desc": "The key of a node", + "required": true, + "examples": [ "Node 1" ] + }, + "state": { + "type": "Boolean", + "desc": "Set to 'true' to expand the branch of the tree, otherwise 'false' collapses it", + "required": true + } + } + }, + + "isTicked": { + "desc": "Method to check if a node's checkbox is selected or not", + "params": { + "key": { + "type": "Any", + "desc": "The key of a node", + "required": true, + "examples": [ "Node 1" ] + } + }, + "returns": { + "type": "Boolean", + "desc": "Is specified node ticked?" + } + }, + + "setTicked": { + "desc": "Method to set a node's checkbox programmatically", + "params": { + "keys": { + "type": "Array", + "desc": "The keys of nodes to tick/untick", + "required": true, + "examples": [ "[ 'Node 1', 'Node 2' ]" ] + }, + "state": { + "type": "Boolean", + "desc": "Set to 'true' to tick the checkbox of nodes, otherwise 'false' unticks them", + "required": true + } + } + } + } +} diff --git a/src/components/tree/QTree.sass b/src/components/tree/QTree.sass new file mode 100644 index 00000000000..df99012d2a3 --- /dev/null +++ b/src/components/tree/QTree.sass @@ -0,0 +1,194 @@ +.q-tree + position: relative + color: $grey + + &__node + padding: 0 0 3px 22px + + &:after + content: '' + position: absolute + top: -3px + bottom: 0 + width: 2px + right: auto + left: -13px + border-left: 1px solid currentColor + &:last-child:after + display: none + + &--disabled + pointer-events: none + + .disabled + opacity: 1 !important + + > div, + > i, + > .disabled + opacity: .6 !important + + .q-tree__node--disabled + > div, + > i, + > .disabled + opacity: 1 !important + + &__node-header:before + content: '' + position: absolute + top: -3px + bottom: 50% + width: 31px + left: -35px + border-left: 1px solid currentColor + border-bottom: 1px solid currentColor + + &__children + padding-left: 25px + + &__node-body + padding: 5px 0 8px 5px + + &__node--parent + padding-left: 2px + > .q-tree__node-header:before + width: 15px + left: -15px + > .q-tree__node-collapsible > .q-tree__node-body + padding: 5px 0 8px 27px + &:after + content: '' + position: absolute + top: 0 + width: 2px + height: 100% + right: auto + left: 12px + border-left: 1px solid currentColor + bottom: 50px + + &__node--link + cursor: pointer + + &__node-header + padding: 4px + margin-top: 3px + border-radius: $generic-border-radius + outline: 0 + + &__node-header-content + color: $light-text + color: var(--q-color-light-text) + transition: color .3s + + &__node--selected .q-tree__node-header-content + color: $grey + + &__icon, + &__node-header-content .q-icon + font-size: 21px + + &__img + height: 42px + border-radius: 2px + + &__avatar, + &__node-header-content .q-avatar + font-size: 28px + border-radius: 50% + width: 28px + height: 28px + + &__arrow, + &__spinner + font-size: 16px + margin-right: 4px + + &__arrow + transition: transform .3s + + &--rotate + transform: rotate3d(0, 0, 1, 90deg) + + &__tickbox + margin-right: 4px + + // remove connectors before root + > .q-tree__node + padding: 0 + &:after, > .q-tree__node-header:before + display: none + // leave space for root empty node + > .q-tree__node--child > .q-tree__node-header + padding-left: 24px + + &--dark + .q-tree__node-header-content + color: $dark-text + color: var(--q-color-dark-text) + + &--no-connectors + .q-tree__node:after, + .q-tree__node-header:before, + .q-tree__node-body:after + display: none !important + + &--dense + > .q-tree__node--child > .q-tree__node-header + padding-left: 1px + + .q-tree + &__arrow, + &__spinner + margin-right: 1px + + &__img + height: 32px + + &__tickbox + margin-right: 3px + + &__node + padding: 0 + &:after + top: 0 + left: -8px + + &__node-header + margin-top: 0 + padding: 1px + &:before + top: 0 + left: -8px + width: 8px + + &__node--child + padding-left: 17px + > .q-tree__node-header:before + left: -25px + width: 21px + + &__node-body + padding: 0 0 2px + + &__node--parent > .q-tree__node-collapsible > .q-tree__node-body + padding: 0 0 2px 20px + &:after + left: 8px + + &__children + padding-left: 16px + +[dir=rtl] + .q-tree__arrow + transform: rotate3d(0, 0, 1, 180deg) #{"/* rtl:ignore */"} + + &--rotate + transform: rotate3d(0, 0, 1, 90deg) #{"/* rtl:ignore */"} + +@media (prefers-color-scheme: dark) + .q-tree--dark-auto + .q-tree__node-header-content + color: $dark-text + color: var(--q-color-dark-text) diff --git a/src/components/tree/QTree.styl b/src/components/tree/QTree.styl new file mode 100644 index 00000000000..58a0fc0be4a --- /dev/null +++ b/src/components/tree/QTree.styl @@ -0,0 +1,194 @@ +.q-tree + position: relative + color: $grey + + &__node + padding: 0 0 3px 22px + + &:after + content: '' + position: absolute + top: -3px + bottom: 0 + width: 2px + right: auto + left: -13px + border-left: 1px solid currentColor + &:last-child:after + display: none + + &--disabled + pointer-events: none + + .disabled + opacity: 1 !important + + > div, + > i, + > .disabled + opacity: .6 !important + + .q-tree__node--disabled + > div, + > i, + > .disabled + opacity: 1 !important + + &__node-header:before + content: '' + position: absolute + top: -3px + bottom: 50% + width: 31px + left: -35px + border-left: 1px solid currentColor + border-bottom: 1px solid currentColor + + &__children + padding-left: 25px + + &__node-body + padding: 5px 0 8px 5px + + &__node--parent + padding-left: 2px + > .q-tree__node-header:before + width: 15px + left: -15px + > .q-tree__node-collapsible > .q-tree__node-body + padding: 5px 0 8px 27px + &:after + content: '' + position: absolute + top: 0 + width: 2px + height: 100% + right: auto + left: 12px + border-left: 1px solid currentColor + bottom: 50px + + &__node--link + cursor: pointer + + &__node-header + padding: 4px + margin-top: 3px + border-radius: $generic-border-radius + outline: 0 + + &__node-header-content + color: $light-text + color: var(--q-color-light-text) + transition: color .3s + + &__node--selected .q-tree__node-header-content + color: $grey + + &__icon, + &__node-header-content .q-icon + font-size: 21px + + &__img + height: 42px + border-radius: 2px + + &__avatar, + &__node-header-content .q-avatar + font-size: 28px + border-radius: 50% + width: 28px + height: 28px + + &__arrow, + &__spinner + font-size: 16px + margin-right: 4px + + &__arrow + transition: transform .3s + + &--rotate + transform: rotate3d(0, 0, 1, 90deg) + + &__tickbox + margin-right: 4px + + // remove connectors before root + > .q-tree__node + padding: 0 + &:after, > .q-tree__node-header:before + display: none + // leave space for root empty node + > .q-tree__node--child > .q-tree__node-header + padding-left: 24px + + &--dark + .q-tree__node-header-content + color: $dark-text + color: var(--q-color-dark-text) + + &--no-connectors + .q-tree__node:after, + .q-tree__node-header:before, + .q-tree__node-body:after + display: none !important + + &--dense + > .q-tree__node--child > .q-tree__node-header + padding-left: 1px + + .q-tree + &__arrow, + &__spinner + margin-right: 1px + + &__img + height: 32px + + &__tickbox + margin-right: 3px + + &__node + padding: 0 + &:after + top: 0 + left: -8px + + &__node-header + margin-top: 0 + padding: 1px + &:before + top: 0 + left: -8px + width: 8px + + &__node--child + padding-left: 17px + > .q-tree__node-header:before + left: -25px + width: 21px + + &__node-body + padding: 0 0 2px + + &__node--parent > .q-tree__node-collapsible > .q-tree__node-body + padding: 0 0 2px 20px + &:after + left: 8px + + &__children + padding-left: 16px + +[dir=rtl] + .q-tree__arrow + transform: rotate3d(0, 0, 1, 180deg) /* rtl:ignore */ + + &--rotate + transform: rotate3d(0, 0, 1, 90deg) /* rtl:ignore */ + +@media (prefers-color-scheme: dark) + .q-tree--dark-auto + .q-tree__node-header-content + color: $dark-text + color: var(--q-color-dark-text) diff --git a/src/components/tree/index.js b/src/components/tree/index.js new file mode 100644 index 00000000000..1adcea7cfe3 --- /dev/null +++ b/src/components/tree/index.js @@ -0,0 +1,5 @@ +import QTree from './QTree.js' + +export { + QTree +} diff --git a/src/components/uploader/QUploader.js b/src/components/uploader/QUploader.js new file mode 100644 index 00000000000..e0293c86538 --- /dev/null +++ b/src/components/uploader/QUploader.js @@ -0,0 +1,9 @@ +import Vue from 'vue' + +import QUploaderBase from './QUploaderBase.js' +import UploaderXHRMixin from './uploader-xhr-mixin.js' + +export default Vue.extend({ + name: 'QUploader', + mixins: [ QUploaderBase, UploaderXHRMixin ] +}) diff --git a/src/components/uploader/QUploader.json b/src/components/uploader/QUploader.json new file mode 100644 index 00000000000..4dfc7afc5a5 --- /dev/null +++ b/src/components/uploader/QUploader.json @@ -0,0 +1,219 @@ +{ + "mixins": [ "components/uploader/QUploaderBase" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/uploader" + }, + + "props": { + "factory": { + "type": "Function", + "desc": "Function which should return an Object or a Promise resolving with an Object; For best performance, reference it from your scope and do not define it inline", + "params": { + "files": { + "type": "Array", + "desc": "Uploaded files", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": [ "Object", "Promise" ], + "desc": "Optional configuration for the upload process; You can override QUploader props in this Object (url, method, headers, formFields, fieldName, withCredentials, sendRaw); Props of these Object can also be Functions with the form of (file[s]) => value", + "__exemption": [ "examples" ] + }, + "category": "upload" + }, + + "url": { + "type": [ "String", "Function" ], + "desc": "URL or path to the server which handles the upload. Takes String or factory function, which returns String. Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ "https://example.com/path", "files => `https://example.com?count=${files.length}`" ], + "category": "upload" + }, + + "method": { + "type": [ "String", "Function" ], + "default": "POST", + "desc": "HTTP method to use for upload; Takes String or factory function which returns a String; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "values": [ "POST", "PUT" ], + "examples": [ "POST", ":method=\"files => files.length > 10 ? 'POST' : 'PUT'\"" ], + "category": "upload" + }, + + "field-name": { + "type": [ "String", "Function" ], + "desc": "Field name for each file upload; This goes into the following header: 'Content-Disposition: form-data; name=\"__HERE__\"; filename=\"somefile.png\"; If using a function then for best performance, reference it from your scope and do not define it inline", + "default": "(file) => file.name", + "examples": [ + "backgroundFile", + ":field-name=\"(file) => 'background' + file.name\"" + ], + "category": "upload" + }, + + "headers": { + "type": [ "Array", "Function" ], + "desc": "Array or a factory function which returns an array; Array consists of objects with header definitions; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "definition": { + "name": { + "type": "String", + "required": true, + "desc": "Header name", + "examples": [ "Content-Type", "Accept", "Cache-Control" ] + }, + "value": { + "type": "String", + "required": true, + "desc": "Header value", + "examples": [ "application/json", "no-cache" ] + } + }, + "examples": [ + "[{name: 'Content-Type', value: 'application/json'}, {name: 'Accept', value: 'application/json'}]", + "() => [{name: 'X-Custom-Timestamp', value: Date.now()}]", + "files => [{name: 'X-Custom-Count', value: files.length}]" + ], + "category": "upload" + }, + + "form-fields": { + "type": [ "Array", "Function" ], + "desc": "Array or a factory function which returns an array; Array consists of objects with additional fields definitions (used by Form to be uploaded); Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "definition": { + "name": { + "type": "String", + "required": true, + "desc": "Field name", + "examples": [ "Some field" ] + }, + "value": { + "type": "String", + "required": true, + "desc": "Field value", + "examples": [ "some-value" ] + } + }, + "examples": [ + "[{name: 'my-field', value: 'my-value'}]", + "() => [{name: 'my-field', value: 'my-value'}]", + "files => [{name: 'my-field', value: 'my-value' + files.length}]" + ], + "category": "upload" + }, + + "with-credentials": { + "type": [ "Boolean", "Function" ], + "desc": "Sets withCredentials to true on the XHR that manages the upload; Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ "with-credentials", ":with-credentials=\"files => ...\"" ], + "category": "upload" + }, + + "send-raw": { + "type": [ "Boolean", "Function" ], + "desc": "Send raw files without wrapping into a Form(); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ "send-raw", ":send-raw=\"files => ...\"" ], + "category": "upload" + }, + + "batch": { + "type": [ "Boolean", "Function" ], + "desc": "Upload files in batch (in one XHR request); Takes boolean or factory function for Boolean; Function is called right before upload; If using a function then for best performance, reference it from your scope and do not define it inline", + "examples": [ "files => files.length > 10" ], + "category": "upload" + } + }, + + "events": { + "uploaded": { + "desc": "Emitted when file or batch of files is uploaded", + "params": { + "info": { + "type": "Object", + "desc": "Object containing information about the event", + "definition": { + "files": { + "type": "Array", + "desc": "Uploaded files", + "__exemption": [ "examples" ] + }, + "xhr": { + "type": "Object", + "desc": "XMLHttpRequest that has been used to upload this batch of files", + "__exemption": [ "examples" ] + } + } + } + } + }, + + "failed": { + "desc": "Emitted when file or batch of files has encountered error while uploading", + "params": { + "info": { + "type": "Object", + "desc": "Object containing information about the event", + "definition": { + "files": { + "type": "Array", + "desc": "Files which encountered error", + "__exemption": [ "examples" ] + }, + "xhr": { + "type": "Object", + "desc": "XMLHttpRequest that has been used to upload this batch of files", + "__exemption": [ "examples" ] + } + } + } + } + }, + + "uploading": { + "desc": "Emitted when file or batch of files started uploading", + "params": { + "info": { + "type": "Object", + "desc": "Object containing information about the event", + "definition": { + "files": { + "type": "Array", + "desc": "Files which are now uploading", + "__exemption": [ "examples" ] + }, + "xhr": { + "type": "Object", + "desc": "XMLHttpRequest used for uploading", + "__exemption": [ "examples" ] + } + } + } + } + }, + + "factory-failed": { + "desc": "Emitted when factory function is supplied with a Promise which is rejected", + "params": { + "err": { + "type": "Object", + "desc": "Error Object which is the Promise rejection reason", + "__exemption": [ "examples" ] + }, + "files": { + "type": "Array", + "desc": "Files which were to get uploaded", + "__exemption": [ "examples" ] + } + } + } + }, + + "methods": { + "abort": { + "desc": "Abort upload of all files (same as clicking the abort button)" + }, + + "upload": { + "desc": "Start uploading (same as clicking the upload button)" + } + } +} diff --git a/src/components/uploader/QUploader.sass b/src/components/uploader/QUploader.sass new file mode 100644 index 00000000000..05f801cb296 --- /dev/null +++ b/src/components/uploader/QUploader.sass @@ -0,0 +1,151 @@ +.q-uploader + box-shadow: $shadow-2 + border-radius: $generic-border-radius + vertical-align: top + position: relative + + width: 320px + max-height: 320px + + &--bordered + border: 1px solid $separator-color + + &__input + opacity: 0 + width: 100% + height: 100% + cursor: pointer !important + z-index: 1 // needed when wrapped by QBtn with icon-right + + // force cursor pointer for native control + &::-webkit-file-upload-button + cursor: pointer + + &__file + &:before + content: '' + border-top-left-radius: inherit + border-top-right-radius: inherit + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + pointer-events: none + background: currentColor + opacity: .04 + + &__header + position: relative + border-top-left-radius: inherit + border-top-right-radius: inherit + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + width: 100% + + &__spinner + font-size: 24px + margin-right: 4px + + &__header-content + padding: 8px + + &__dnd + outline: 1px dashed currentColor + outline-offset: -4px + background: rgba(255,255,255,.6) + + &__overlay + font-size: 36px + color: $light-text + color: var(--q-color-light-text) + background-color: rgba(255,255,255,.6) + + &__list + position: relative + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + padding: 8px + min-height: 60px + flex: 1 1 auto + + &__file + border-radius: $generic-border-radius $generic-border-radius 0 0 + border: 1px solid $separator-color + + .q-circular-progress + font-size: 24px + + &--img + color: $dark-text + color: var(--q-color-dark-text) + height: 200px + min-width: 200px + background-position: 50% 50% + background-size: cover + background-repeat: no-repeat + + &:before + content: none + + .q-circular-progress + color: $dark-text + color: var(--q-color-dark-text) + + .q-uploader__file-header + padding-bottom: 24px + background: linear-gradient(to bottom, rgba(0,0,0,.7) 20%, rgba(255,255,255,0)) + + & + & + margin-top: 8px + + &__file-header + position: relative + padding: 4px 8px + border-top-left-radius: inherit + border-top-right-radius: inherit + + &__file-header-content + padding-right: 8px + + &__file-status + font-size: 24px + margin-right: 4px + + &__title + font-size: 14px + font-weight: bold + line-height: 18px + word-break: break-word + &__subtitle + font-size: 12px + line-height: 18px + + &--disabled + .q-uploader__header, .q-uploader__list + pointer-events: none + + &--dark + border-color: $separator-dark-color + + .q-uploader__file + border-color: $separator-dark-color + .q-uploader__dnd, .q-uploader__overlay + background: rgba(255,255,255,.3) + .q-uploader__overlay + color: $dark-text + color: var(--q-color-dark-text) + +@media (prefers-color-scheme: dark) + .q-uploader--dark-auto + border-color: $separator-dark-color + + .q-uploader__file + border-color: $separator-dark-color + .q-uploader__dnd, .q-uploader__overlay + background: rgba(255,255,255,.3) + .q-uploader__overlay + color: $dark-text + color: var(--q-color-dark-text) diff --git a/src/components/uploader/QUploader.styl b/src/components/uploader/QUploader.styl new file mode 100644 index 00000000000..2eb766ec21b --- /dev/null +++ b/src/components/uploader/QUploader.styl @@ -0,0 +1,151 @@ +.q-uploader + box-shadow: $shadow-2 + border-radius: $generic-border-radius + vertical-align: top + position: relative + + width: 320px + max-height: 320px + + &--bordered + border: 1px solid $separator-color + + &__input + opacity: 0 + width: 100% + height: 100% + cursor: pointer !important + z-index: 1 /* needed when wrapped by QBtn with icon-right */ + + // force cursor pointer for native control + &::-webkit-file-upload-button + cursor: pointer + + &__file + &:before + content: '' + border-top-left-radius: inherit + border-top-right-radius: inherit + position: absolute + top: 0 + right: 0 + bottom: 0 + left: 0 + pointer-events: none + background: currentColor + opacity: .04 + + &__header + position: relative + border-top-left-radius: inherit + border-top-right-radius: inherit + background-color: $primary + background-color: var(--q-color-primary) + color: $dark-text + color: var(--q-color-dark-text) + width: 100% + + &__spinner + font-size: 24px + margin-right: 4px + + &__header-content + padding: 8px + + &__dnd + outline: 1px dashed currentColor + outline-offset: -4px + background: rgba(255,255,255,.6) + + &__overlay + font-size: 36px + color: $light-text + color: var(--q-color-light-text) + background-color: rgba(255,255,255,.6) + + &__list + position: relative + border-bottom-left-radius: inherit + border-bottom-right-radius: inherit + padding: 8px + min-height: 60px + flex: 1 1 auto + + &__file + border-radius: $generic-border-radius $generic-border-radius 0 0 + border: 1px solid $separator-color + + .q-circular-progress + font-size: 24px + + &--img + color: $dark-text + color: var(--q-color-dark-text) + height: 200px + min-width: 200px + background-position: 50% 50% + background-size: cover + background-repeat: no-repeat + + &:before + content: none + + .q-circular-progress + color: $dark-text + color: var(--q-color-dark-text) + + .q-uploader__file-header + padding-bottom: 24px + background: linear-gradient(to bottom, rgba(0,0,0,.7) 20%, rgba(255,255,255,0)) + + & + & + margin-top: 8px + + &__file-header + position: relative + padding: 4px 8px + border-top-left-radius: inherit + border-top-right-radius: inherit + + &__file-header-content + padding-right: 8px + + &__file-status + font-size: 24px + margin-right: 4px + + &__title + font-size: 14px + font-weight: bold + line-height: 18px + word-break: break-word + &__subtitle + font-size: 12px + line-height: 18px + + &--disabled + .q-uploader__header, .q-uploader__list + pointer-events: none + + &--dark + border-color: $separator-dark-color + + .q-uploader__file + border-color: $separator-dark-color + .q-uploader__dnd, .q-uploader__overlay + background: rgba(255,255,255,.3) + .q-uploader__overlay + color: $dark-text + color: var(--q-color-dark-text) + +@media (prefers-color-scheme: dark) + .q-uploader--dark-auto + border-color: $separator-dark-color + + .q-uploader__file + border-color: $separator-dark-color + .q-uploader__dnd, .q-uploader__overlay + background: rgba(255,255,255,.3) + .q-uploader__overlay + color: $dark-text + color: var(--q-color-dark-text) diff --git a/src/components/uploader/QUploaderAddTrigger.js b/src/components/uploader/QUploaderAddTrigger.js new file mode 100644 index 00000000000..d6feaa775dd --- /dev/null +++ b/src/components/uploader/QUploaderAddTrigger.js @@ -0,0 +1,17 @@ +import Vue from 'vue' + +export default Vue.extend({ + name: 'QUploaderAddTrigger', + + inject: { + __qUploaderGetInput: { + default () { + console.error('QUploaderAddTrigger needs to be child of QUploader') + } + } + }, + + render (h) { + return this.__qUploaderGetInput(h) + } +}) diff --git a/src/components/uploader/QUploaderAddTrigger.json b/src/components/uploader/QUploaderAddTrigger.json new file mode 100644 index 00000000000..6a1d18df56c --- /dev/null +++ b/src/components/uploader/QUploaderAddTrigger.json @@ -0,0 +1,5 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/uploader" + } +} diff --git a/src/components/uploader/QUploaderBase.js b/src/components/uploader/QUploaderBase.js new file mode 100644 index 00000000000..803ef59f692 --- /dev/null +++ b/src/components/uploader/QUploaderBase.js @@ -0,0 +1,458 @@ +import Vue from 'vue' + +import QBtn from '../btn/QBtn.js' +import QIcon from '../icon/QIcon.js' +import QSpinner from '../spinner/QSpinner.js' +import QCircularProgress from '../circular-progress/QCircularProgress.js' + +import FileMixin from '../../mixins/file.js' +import DarkMixin from '../../mixins/dark.js' + +import { stop } from '../../utils/event.js' +import { humanStorageSize } from '../../utils/format.js' +import cache from '../../utils/private/cache.js' + +export default Vue.extend({ + name: 'QUploaderBase', + + mixins: [ DarkMixin, FileMixin ], + + props: { + label: String, + + color: String, + textColor: String, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + noThumbnails: Boolean, + autoUpload: Boolean, + hideUploadBtn: Boolean, + + disable: Boolean, + readonly: Boolean + }, + + provide () { + return { + __qUploaderGetInput: this.__getInputControl + } + }, + + data () { + return { + files: [], + queuedFiles: [], + uploadedFiles: [], + dnd: false, + expanded: false, + + uploadSize: 0, + uploadedSize: 0 + } + }, + + watch: { + isUploading (newVal, oldVal) { + if (oldVal === false && newVal === true) { + this.$emit('start') + } + else if (oldVal === true && newVal === false) { + this.$emit('finish') + } + } + }, + + computed: { + /* + * When extending: + * Required : isUploading + * Optional: isBusy + */ + + canUpload () { + return this.editable === true && + this.isBusy !== true && + this.isUploading !== true && + this.queuedFiles.length > 0 + }, + + canAddFiles () { + return ( + this.editable === true && + this.isUploading !== true && + // if single selection and no files are queued: + (this.multiple === true || this.queuedFiles.length === 0) && + // if max-files is set and current number of files does not exceeds it: + (this.maxFiles === void 0 || this.files.length < this.maxFilesNumber) && + // if max-total-size is set and current upload size does not exceeds it: + (this.maxTotalSize === void 0 || this.uploadSize < this.maxTotalSizeNumber) + ) + }, + + uploadProgress () { + return this.uploadSize === 0 + ? 0 + : this.uploadedSize / this.uploadSize + }, + + uploadProgressLabel () { + return this.__getProgressLabel(this.uploadProgress) + }, + + uploadedSizeLabel () { + return humanStorageSize(this.uploadedSize) + }, + + uploadSizeLabel () { + return humanStorageSize(this.uploadSize) + }, + + colorClass () { + const cls = [] + this.color !== void 0 && cls.push(`bg-${this.color}`) + this.textColor !== void 0 && cls.push(`text-${this.textColor}`) + return cls.join(' ') + }, + + editable () { + return this.disable !== true && this.readonly !== true + } + }, + + methods: { + reset () { + if (!this.disable) { + this.abort() + this.uploadedSize = 0 + this.uploadSize = 0 + this.__revokeImgURLs() + this.files = [] + this.queuedFiles = [] + this.uploadedFiles = [] + } + }, + + removeUploadedFiles () { + this.__removeFiles([ 'uploaded' ], () => { + this.uploadedFiles = [] + }) + }, + + removeQueuedFiles () { + this.__removeFiles([ 'idle', 'failed' ], ({ size }) => { + this.uploadSize -= size + this.queuedFiles = [] + }) + }, + + __removeFiles (statusList, cb) { + if (this.disable === true) { + return + } + + const removed = { + files: [], + size: 0 + } + + const files = this.files.filter(f => { + if (statusList.indexOf(f.__status) === -1) { + return true + } + + removed.size += f.size + removed.files.push(f) + + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src) + + return false + }) + + if (removed.files.length > 0) { + this.files = files + cb !== void 0 && cb(removed) + this.$emit('removed', removed.files) + } + }, + + removeFile (file) { + if (this.disable) { return } + + if (file.__status === 'uploaded') { + this.uploadedFiles = this.uploadedFiles.filter(f => f.__key !== file.__key) + } + else if (file.__status === 'uploading') { + file.__abort() + } + else { + this.uploadSize -= file.size + } + + this.files = this.files.filter(f => { + if (f.__key !== file.__key) { + return true + } + + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src) + + return false + }) + this.queuedFiles = this.queuedFiles.filter(f => f.__key !== file.__key) + this.$emit('removed', [ file ]) + }, + + __revokeImgURLs () { + this.files.forEach(f => { + f.__img !== void 0 && window.URL.revokeObjectURL(f.__img.src) + }) + }, + + __getFileInput () { + return this.$refs.input || + this.$el.getElementsByClassName('q-uploader__input')[0] + }, + + __getProgressLabel (p) { + return (p * 100).toFixed(2) + '%' + }, + + __updateFile (file, status, uploadedSize) { + file.__status = status + + if (status === 'idle') { + file.__uploaded = 0 + file.__progress = 0 + file.__sizeLabel = humanStorageSize(file.size) + file.__progressLabel = '0.00%' + return + } + if (status === 'failed') { + this.$forceUpdate() + return + } + + file.__uploaded = status === 'uploaded' + ? file.size + : uploadedSize + + file.__progress = status === 'uploaded' + ? 1 + : Math.min(0.9999, file.__uploaded / file.size) + + file.__progressLabel = this.__getProgressLabel(file.__progress) + this.$forceUpdate() + }, + + __addFiles (e, fileList) { + const localFiles = this.__processFiles(e, fileList, this.files, true) + const fileInput = this.__getFileInput() + + if (fileInput !== void 0) { + fileInput.value = '' + } + + if (localFiles === void 0) { return } + + localFiles.forEach(file => { + this.__updateFile(file, 'idle') + this.uploadSize += file.size + + if (this.noThumbnails !== true && file.type.toUpperCase().startsWith('IMAGE')) { + const img = new Image() + img.src = window.URL.createObjectURL(file) + file.__img = img + } + }) + + this.files = this.files.concat(localFiles) + this.queuedFiles = this.queuedFiles.concat(localFiles) + this.$emit('added', localFiles) + this.autoUpload === true && this.upload() + }, + + __getBtn (h, show, icon, fn) { + if (show === true) { + return h(QBtn, { + props: { + type: 'a', + icon: this.$q.iconSet.uploader[icon], + flat: true, + dense: true + }, + on: { click: icon === 'add' ? this.pickFiles : fn } + }, icon === 'add' ? this.__getInputControl(h) : null) + } + }, + + __getInputControl (h) { + return [ + h('input', { + key: 'input', + ref: 'input', + staticClass: 'q-uploader__input overflow-hidden absolute-full', + attrs: { + tabindex: -1, + type: 'file', + title: '', // try to remove default tooltip + accept: this.accept, + capture: this.capture, + ...(this.multiple === true ? { multiple: true } : {}) + }, + on: cache(this, 'input', { + mousedown: stop, // need to stop refocus from QBtn + click: this.pickFiles, + change: this.__addFiles + }) + }) + ] + }, + + __getHeader (h) { + if (this.$scopedSlots.header !== void 0) { + return this.$scopedSlots.header(this) + } + + return [ + h('div', { + staticClass: 'q-uploader__header-content column' + }, [ + h('div', { + staticClass: 'flex flex-center no-wrap q-gutter-xs' + }, [ + this.__getBtn(h, this.queuedFiles.length > 0, 'removeQueue', this.removeQueuedFiles), + this.__getBtn(h, this.uploadedFiles.length > 0, 'removeUploaded', this.removeUploadedFiles), + + this.isUploading === true + ? h(QSpinner, { staticClass: 'q-uploader__spinner' }) + : null, + + h('div', { staticClass: 'col column justify-center' }, [ + this.label !== void 0 + ? h('div', { staticClass: 'q-uploader__title' }, [ this.label ]) + : null, + + h('div', { staticClass: 'q-uploader__subtitle' }, [ + this.uploadSizeLabel + ' / ' + this.uploadProgressLabel + ]) + ]), + + this.__getBtn(h, this.canAddFiles, 'add', this.pickFiles), + this.__getBtn(h, this.hideUploadBtn === false && this.canUpload === true, 'upload', this.upload), + this.__getBtn(h, this.isUploading, 'clear', this.abort) + ]) + ]) + ] + }, + + __getList (h) { + if (this.$scopedSlots.list !== void 0) { + return this.$scopedSlots.list(this) + } + + return this.files.map(file => h('div', { + key: file.__key, + staticClass: 'q-uploader__file relative-position', + class: { + 'q-uploader__file--img': this.noThumbnails !== true && file.__img !== void 0, + 'q-uploader__file--failed': file.__status === 'failed', + 'q-uploader__file--uploaded': file.__status === 'uploaded' + }, + style: this.noThumbnails !== true && file.__img !== void 0 ? { + backgroundImage: 'url("' + file.__img.src + '")' + } : null + }, [ + h('div', { + staticClass: 'q-uploader__file-header row flex-center no-wrap' + }, [ + file.__status === 'failed' + ? h(QIcon, { + staticClass: 'q-uploader__file-status', + props: { + name: this.$q.iconSet.type.negative, + color: 'negative' + } + }) + : null, + + h('div', { staticClass: 'q-uploader__file-header-content col' }, [ + h('div', { staticClass: 'q-uploader__title' }, [ file.name ]), + h('div', { + staticClass: 'q-uploader__subtitle row items-center no-wrap' + }, [ + file.__sizeLabel + ' / ' + file.__progressLabel + ]) + ]), + + file.__status === 'uploading' + ? h(QCircularProgress, { + props: { + value: file.__progress, + min: 0, + max: 1, + indeterminate: file.__progress === 0 + } + }) + : h(QBtn, { + props: { + round: true, + dense: true, + flat: true, + icon: this.$q.iconSet.uploader[file.__status === 'uploaded' ? 'done' : 'clear'] + }, + on: { + click: () => { this.removeFile(file) } + } + }) + ]) + ])) + } + }, + + beforeDestroy () { + this.isUploading === true && this.abort() + this.files.length > 0 && this.__revokeImgURLs() + }, + + render (h) { + const children = [ + h('div', { + staticClass: 'q-uploader__header', + class: this.colorClass + }, this.__getHeader(h)), + + h('div', { + staticClass: 'q-uploader__list scroll' + }, this.__getList(h)), + + this.__getDnd(h, 'uploader') + ] + + this.isBusy === true && children.push( + h('div', { + staticClass: 'q-uploader__overlay absolute-full flex flex-center' + }, [ h(QSpinner) ]) + ) + + return h('div', { + key: 'drag', + staticClass: 'q-uploader column no-wrap', + class: { + [`q-uploader--${this.darkSuffix} q-${this.darkSuffix}`]: true, + 'q-uploader--bordered': this.bordered, + 'q-uploader--square no-border-radius': this.square, + 'q-uploader--flat no-shadow': this.flat, + 'disabled q-uploader--disabled': this.disable, + 'q-uploader--dnd': this.dnd + }, + on: this.canAddFiles === true + ? cache(this, 'drag', { + dragover: this.__onDragOver, + dragleave: this.__onDragLeave + }) + : null + }, children) + } +}) diff --git a/src/components/uploader/QUploaderBase.json b/src/components/uploader/QUploaderBase.json new file mode 100644 index 00000000000..745b9dcca30 --- /dev/null +++ b/src/components/uploader/QUploaderBase.json @@ -0,0 +1,140 @@ +{ + "mixins": [ "mixins/file" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/uploader" + }, + + "props": { + "label": { + "type": "String", + "desc": "Label for the uploader", + "examples": ["Upload photo here"], + "category": "content" + }, + + "color": { + "extends": "color" + }, + + "text-color": { + "extends": "text-color" + }, + + "dark": { + "extends": "dark" + }, + + "square": { + "extends": "square" + }, + + "flat": { + "extends": "flat" + }, + + "bordered": { + "extends": "bordered" + }, + + "no-thumbnails": { + "type": "Boolean", + "desc": "Don't display thumbnails for image files", + "category": "content" + }, + + "auto-upload": { + "type": "Boolean", + "desc": "Upload files immediately when added", + "category": "behavior" + }, + + "hide-upload-btn": { + "type": "Boolean", + "desc": "Don't show the upload button", + "category": "behavior" + }, + + "disable": { + "extends": "disable" + }, + + "readonly": { + "extends": "readonly" + }, + + "max-files": { + "addedIn": "v1.11.2" + } + }, + + "scopedSlots": { + "header": { + "desc": "Slot for custom header; Scope is the QUploader instance itself", + "__exemption": ["scope"] + }, + + "list": { + "desc": "Slot for custom list; Scope is the QUploader instance itself", + "__exemption": ["scope"] + } + }, + + "events": { + "added": { + "desc": "Emitted when files are added into the list", + "params": { + "files": { + "type": "Array", + "desc": "Array of files that were added", + "__exemption": ["examples"] + } + } + }, + + "removed": { + "desc": "Emitted when files are removed from the list", + "params": { + "files": { + "type": "Array", + "desc": "Array of files that were removed", + "__exemption": ["examples"] + } + } + }, + + "start": { + "desc": "Started working" + }, + + "finish": { + "desc": "Finished working (regardless of success or fail)" + } + }, + + "methods": { + "reset": { + "desc": "Resets uploader to default; Empties queue, aborts current uploads" + }, + + "removeUploadedFiles": { + "desc": "Removes already uploaded files from the list" + }, + + "removeQueuedFiles": { + "desc": "Remove files that are waiting for upload to start (same as clicking the left clear button)" + }, + + "removeFile": { + "desc": "Remove specified file from the queue", + "params": { + "file": { + "type": "Object", + "desc": "File to remove (instance of File)", + "required": true, + "__exemption": ["examples"] + } + } + } + } +} diff --git a/src/components/uploader/index.js b/src/components/uploader/index.js new file mode 100644 index 00000000000..ecd0a0e5834 --- /dev/null +++ b/src/components/uploader/index.js @@ -0,0 +1,9 @@ +import QUploader from './QUploader.js' +import QUploaderBase from './QUploaderBase.js' +import QUploaderAddTrigger from './QUploaderAddTrigger.js' + +export { + QUploader, + QUploaderBase, + QUploaderAddTrigger +} diff --git a/src/components/uploader/uploader-xhr-mixin.js b/src/components/uploader/uploader-xhr-mixin.js new file mode 100644 index 00000000000..a19d3a1c2f3 --- /dev/null +++ b/src/components/uploader/uploader-xhr-mixin.js @@ -0,0 +1,254 @@ +function getFn (prop) { + return typeof prop === 'function' + ? prop + : () => prop +} + +export default { + props: { + url: [ Function, String ], + method: { + type: [ Function, String ], + default: 'POST' + }, + fieldName: { + type: [ Function, String ], + default: file => file.name + }, + headers: [ Function, Array ], + formFields: [ Function, Array ], + withCredentials: [ Function, Boolean ], + sendRaw: [ Function, Boolean ], + + batch: [ Function, Boolean ], + factory: Function + }, + + data () { + return { + xhrs: [], + promises: [], + workingThreads: 0 + } + }, + + computed: { + xhrProps () { + return { + url: getFn(this.url), + method: getFn(this.method), + headers: getFn(this.headers), + formFields: getFn(this.formFields), + fieldName: getFn(this.fieldName), + withCredentials: getFn(this.withCredentials), + sendRaw: getFn(this.sendRaw), + batch: getFn(this.batch) + } + }, + + isUploading () { + return this.workingThreads > 0 + }, + + isBusy () { + return this.promises.length > 0 + } + }, + + methods: { + abort () { + this.xhrs.forEach(x => { x.abort() }) + + if (this.promises.length > 0) { + this.abortPromises = true + } + }, + + upload () { + if (this.canUpload === false) { + return + } + + const queue = this.queuedFiles.slice(0) + this.queuedFiles = [] + + if (this.xhrProps.batch(queue)) { + this.__runFactory(queue) + } + else { + queue.forEach(file => { + this.__runFactory([ file ]) + }) + } + }, + + __runFactory (files) { + this.workingThreads++ + + if (typeof this.factory !== 'function') { + this.__uploadFiles(files, {}) + return + } + + const res = this.factory(files) + + if (!res) { + this.$emit( + 'factory-failed', + new Error('QUploader: factory() does not return properly'), + files + ) + this.workingThreads-- + } + else if (typeof res.catch === 'function' && typeof res.then === 'function') { + this.promises.push(res) + + const failed = err => { + if (this._isBeingDestroyed !== true && this._isDestroyed !== true) { + this.promises = this.promises.filter(p => p !== res) + + if (this.promises.length === 0) { + this.abortPromises = false + } + + this.queuedFiles = this.queuedFiles.concat(files) + files.forEach(f => { this.__updateFile(f, 'failed') }) + + this.$emit('factory-failed', err, files) + this.workingThreads-- + } + } + + res.then(factory => { + if (this.abortPromises === true) { + failed(new Error('Aborted')) + } + else if (this._isBeingDestroyed !== true && this._isDestroyed !== true) { + this.promises = this.promises.filter(p => p !== res) + this.__uploadFiles(files, factory) + } + }).catch(failed) + } + else { + this.__uploadFiles(files, res || {}) + } + }, + + __uploadFiles (files, factory) { + const + form = new FormData(), + xhr = new XMLHttpRequest() + + const getProp = (name, arg) => { + return factory[name] !== void 0 + ? getFn(factory[name])(arg) + : this.xhrProps[name](arg) + } + + const url = getProp('url', files) + + if (!url) { + console.error('q-uploader: invalid or no URL specified') + this.workingThreads-- + return + } + + const fields = getProp('formFields', files) + fields !== void 0 && fields.forEach(field => { + form.append(field.name, field.value) + }) + + let + uploadIndex = 0, + uploadIndexSize = 0, + uploadedSize = 0, + maxUploadSize = 0, + aborted + + xhr.upload.addEventListener('progress', e => { + if (aborted === true) { return } + + const loaded = Math.min(maxUploadSize, e.loaded) + + this.uploadedSize += loaded - uploadedSize + uploadedSize = loaded + + let size = uploadedSize - uploadIndexSize + for (let i = uploadIndex; size > 0 && i < files.length; i++) { + const + file = files[i], + uploaded = size > file.size + + if (uploaded) { + size -= file.size + uploadIndex++ + uploadIndexSize += file.size + this.__updateFile(file, 'uploading', file.size) + } + else { + this.__updateFile(file, 'uploading', size) + return + } + } + }, false) + + xhr.onreadystatechange = () => { + if (xhr.readyState < 4) { + return + } + + if (xhr.status && xhr.status < 400) { + this.uploadedFiles = this.uploadedFiles.concat(files) + files.forEach(f => { this.__updateFile(f, 'uploaded') }) + this.$emit('uploaded', { files, xhr }) + } + else { + aborted = true + this.uploadedSize -= uploadedSize + this.queuedFiles = this.queuedFiles.concat(files) + files.forEach(f => { this.__updateFile(f, 'failed') }) + this.$emit('failed', { files, xhr }) + } + + this.workingThreads-- + this.xhrs = this.xhrs.filter(x => x !== xhr) + } + + xhr.open( + getProp('method', files), + url + ) + + if (getProp('withCredentials', files) === true) { + xhr.withCredentials = true + } + + const headers = getProp('headers', files) + headers !== void 0 && headers.forEach(head => { + xhr.setRequestHeader(head.name, head.value) + }) + + const sendRaw = getProp('sendRaw', files) + + files.forEach(file => { + this.__updateFile(file, 'uploading', 0) + if (sendRaw !== true) { + form.append(getProp('fieldName', file), file, file.name) + } + file.xhr = xhr + file.__abort = () => { xhr.abort() } + maxUploadSize += file.size + }) + + this.$emit('uploading', { files, xhr }) + this.xhrs.push(xhr) + + if (sendRaw === true) { + xhr.send(new Blob(files)) + } + else { + xhr.send(form) + } + } + } +} diff --git a/src/components/video/QVideo.js b/src/components/video/QVideo.js new file mode 100644 index 00000000000..2a7450603dc --- /dev/null +++ b/src/components/video/QVideo.js @@ -0,0 +1,63 @@ +import Vue from 'vue' + +import RatioMixin from '../../mixins/ratio.js' +import ListenersMixin from '../../mixins/listeners.js' + +export default Vue.extend({ + name: 'QVideo', + + mixins: [ RatioMixin, ListenersMixin ], + + props: { + src: { + type: String, + required: true + }, + + title: String, + + fetchpriority: { + type: String, + default: 'auto' + }, + loading: { + type: String, + default: 'eager' + }, + referrerpolicy: { + type: String, + default: 'strict-origin-when-cross-origin' + } + }, + + computed: { + iframeData () { + return { + attrs: { + src: this.src, + frameborder: '0', + title: this.title, + allowfullscreen: true, + fetchpriority: this.fetchpriority, + loading: this.loading, + referrerpolicy: this.referrerpolicy + } + } + }, + + classes () { + return 'q-video' + + (this.ratio !== void 0 ? ' q-video--responsive' : '') + } + }, + + render (h) { + return h('div', { + class: this.classes, + style: this.ratioStyle, + on: { ...this.qListeners } + }, [ + h('iframe', this.iframeData) + ]) + } +}) diff --git a/src/components/video/QVideo.json b/src/components/video/QVideo.json new file mode 100644 index 00000000000..92f15206d75 --- /dev/null +++ b/src/components/video/QVideo.json @@ -0,0 +1,74 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/video" + }, + + "mixins": [ "mixins/ratio" ], + + "behavior": { + "$listeners": true + }, + + "props": { + "src": { + "type": "String", + "desc": "The source url to display in an iframe", + "required": true, + "examples": [ + "src=\"https://www.youtube.com/embed/k3_tw44QsZQ\"" + ], + "category": "model" + }, + + "ratio": { + "addedIn": "v1.7" + }, + + "title": { + "type": "String", + "desc": "(Accessibility) Set the native 'title' attribute value of the inner iframe being used", + "required": false, + "examples": [ + "My Daily Marathon" + ], + "category": "accessibility", + "addedIn": "v1.17" + }, + + "fetchpriority": { + "type": "String", + "desc": "Provides a hint of the relative priority to use when fetching the iframe document", + "default": "auto", + "values": [ "high", "low", "auto" ], + "category": "behavior", + "addedIn": "v1.18.10" + }, + + "loading": { + "type": "String", + "desc": "Indicates how the browser should load the iframe", + "default": "eager", + "values": [ "eager", "lazy" ], + "category": "behavior", + "addedIn": "v1.18.10" + }, + + "referrerpolicy": { + "type": "String", + "desc": "Indicates which referrer to send when fetching the frame's resource", + "default": "strict-origin-when-cross-origin", + "values": [ + "no-referrer", + "no-referrer-when-downgrade", + "origin", + "origin-when-cross-origin", + "same-origin", + "strict-origin", + "strict-origin-when-cross-origin", + "unsafe-url" + ], + "category": "behavior", + "addedIn": "v1.18.10" + } + } +} diff --git a/src/components/video/QVideo.sass b/src/components/video/QVideo.sass new file mode 100644 index 00000000000..ae5f13d0836 --- /dev/null +++ b/src/components/video/QVideo.sass @@ -0,0 +1,24 @@ +img.responsive + max-width: 100% + height: auto + +.q-video + position: relative + overflow: hidden + border-radius: inherit + + iframe, + object, + embed + width: 100% + height: 100% + + &--responsive + height: 0 + + iframe, + object, + embed + position: absolute + top: 0 + left: 0 diff --git a/src/components/video/QVideo.styl b/src/components/video/QVideo.styl new file mode 100644 index 00000000000..9416c3d6237 --- /dev/null +++ b/src/components/video/QVideo.styl @@ -0,0 +1,20 @@ +.q-video + position: relative + overflow: hidden + border-radius: inherit + + iframe, + object, + embed + width: 100% + height: 100% + + &--responsive + height: 0 + + iframe, + object, + embed + position: absolute + top: 0 + left: 0 diff --git a/src/components/video/index.js b/src/components/video/index.js new file mode 100644 index 00000000000..dfe355c1d50 --- /dev/null +++ b/src/components/video/index.js @@ -0,0 +1,5 @@ +import QVideo from './QVideo.js' + +export { + QVideo +} diff --git a/src/components/virtual-scroll/QVirtualScroll.js b/src/components/virtual-scroll/QVirtualScroll.js new file mode 100644 index 00000000000..592b422055e --- /dev/null +++ b/src/components/virtual-scroll/QVirtualScroll.js @@ -0,0 +1,159 @@ +import Vue from 'vue' + +import QList from '../item/QList.js' +import QMarkupTable from '../markup-table/QMarkupTable.js' +import getTableMiddle from '../table/get-table-middle.js' + +import VirtualScroll from '../../mixins/virtual-scroll.js' +import AttrsMixin from '../../mixins/attrs.js' +import ListenersMixin from '../../mixins/listeners.js' + +import { getScrollTarget } from '../../utils/scroll.js' +import { listenOpts } from '../../utils/event.js' +import { mergeSlot } from '../../utils/private/slot.js' + +const comps = { + list: QList, + table: QMarkupTable +} + +export default Vue.extend({ + name: 'QVirtualScroll', + + mixins: [ AttrsMixin, ListenersMixin, VirtualScroll ], + + props: { + type: { + type: String, + default: 'list', + validator: v => ['list', 'table', '__qtable'].includes(v) + }, + + items: { + type: Array, + default: () => [] + }, + + itemsFn: Function, + itemsSize: Number, + + scrollTarget: { + default: void 0 + } + }, + + computed: { + virtualScrollLength () { + return this.itemsSize >= 0 && this.itemsFn !== void 0 + ? parseInt(this.itemsSize, 10) + : (Array.isArray(this.items) ? this.items.length : 0) + }, + + virtualScrollScope () { + if (this.virtualScrollLength === 0) { + return [] + } + + const mapFn = (item, i) => ({ + index: this.virtualScrollSliceRange.from + i, + item + }) + + if (this.itemsFn === void 0) { + return this.items.slice(this.virtualScrollSliceRange.from, this.virtualScrollSliceRange.to).map(mapFn) + } + + return this.itemsFn(this.virtualScrollSliceRange.from, this.virtualScrollSliceRange.to - this.virtualScrollSliceRange.from).map(mapFn) + }, + + classes () { + return 'q-virtual-scroll q-virtual-scroll' + (this.virtualScrollHorizontal === true ? '--horizontal' : '--vertical') + + (this.scrollTarget !== void 0 ? '' : ' scroll') + }, + + attrs () { + return this.scrollTarget !== void 0 ? void 0 : { tabindex: 0 } + } + }, + + watch: { + virtualScrollLength () { + this.__resetVirtualScroll() + }, + + scrollTarget () { + this.__unconfigureScrollTarget() + this.__configureScrollTarget() + } + }, + + methods: { + __getVirtualScrollEl () { + return this.$el + }, + + __getVirtualScrollTarget () { + return this.__scrollTarget + }, + + __configureScrollTarget () { + this.__scrollTarget = getScrollTarget(this.$el, this.scrollTarget) + this.__scrollTarget.addEventListener('scroll', this.__onVirtualScrollEvt, listenOpts.passive) + }, + + __unconfigureScrollTarget () { + if (this.__scrollTarget !== void 0) { + this.__scrollTarget.removeEventListener('scroll', this.__onVirtualScrollEvt, listenOpts.passive) + this.__scrollTarget = void 0 + } + } + }, + + beforeMount () { + this.__resetVirtualScroll() + }, + + mounted () { + this.__configureScrollTarget() + }, + + activated () { + this.__configureScrollTarget() + }, + + deactivated () { + this.__unconfigureScrollTarget() + }, + + beforeDestroy () { + this.__unconfigureScrollTarget() + }, + + render (h) { + if (this.$scopedSlots.default === void 0) { + console.error('QVirtualScroll: default scoped slot is required for rendering', this) + return + } + + let child = this.__padVirtualScroll( + h, + this.type === 'list' ? 'div' : 'tbody', + this.virtualScrollScope.map(this.$scopedSlots.default) + ) + + if (this.$scopedSlots.before !== void 0) { + child = this.$scopedSlots.before().concat(child) + } + + child = mergeSlot(child, this, 'after') + + return this.type === '__qtable' + ? getTableMiddle(h, { staticClass: this.classes }, child) + : h(comps[this.type], { + class: this.classes, + attrs: this.attrs, + props: this.qAttrs, + on: { ...this.qListeners } + }, child) + } +}) diff --git a/src/components/virtual-scroll/QVirtualScroll.json b/src/components/virtual-scroll/QVirtualScroll.json new file mode 100644 index 00000000000..2e35c5f8a1b --- /dev/null +++ b/src/components/virtual-scroll/QVirtualScroll.json @@ -0,0 +1,99 @@ +{ + "mixins": [ "mixins/virtual-scroll" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/virtual-scroll" + }, + + "addedIn": "v1.1", + + "props": { + "type": { + "type": "String", + "desc": "The type of content: list (default) or table", + "default": "list", + "values": [ "list", "table" ], + "category": "content" + }, + + "items": { + "type": "Array", + "desc": "Available list items that will be passed to the scoped slot; For best performance freeze the list of items; Required if 'itemsFn' is not supplied", + "default": "[]", + "examples": [ + ":items=\"[ 'BMW', 'Samsung Phone' ]\"", + ":items=\"[ { label: 'BMW', value: 'car' }, { label: 'Samsung Phone', value: 'phone' } ]\"" + ], + "category": "content" + }, + + "items-size": { + "type": "Number", + "desc": "Number of available items in the list; Required and used only if 'itemsFn' is provided", + "default": "void 0", + "examples": [ + ":items-size=\"100000\"", + ":items-size=\"500\"" + ], + "category": "content" + }, + + "items-fn": { + "type": "Function", + "desc": "Function to return the scope for the items to be displayed; Should return an array for items starting from 'from' index for size length; For best performance, reference it from your scope and do not define it inline", + "params": { + "from": { + "type": "Number", + "desc": "Index of the first item (0 based)", + "examples": [ 15 ] + }, + "size": { + "type": "Number", + "desc": "Number of items to return", + "examples": [ 38 ] + } + }, + "returns": { + "type": "Array", + "desc": "List of scope for items to be displayed", + "__exemption": [ "examples" ] + }, + "examples": [ + ":items-fn=\"(from, size) => { const items = []; for (let i = 0; i < size; i++) { items.push('Item ' + i) }; return items }\"" + ], + "category": "content" + }, + + "scroll-target": { + "extends": "scroll-target" + } + }, + + "slots" : { + "before": { + "desc": "Template slot for the elements that should be rendered before the list; Suggestion: thead before a table" + }, + + "after": { + "desc": "Template slot for the elements that should be rendered after the list; Suggestion: tfoot after a table" + } + }, + + "scopedSlots": { + "default": { + "desc": "Template slot for defining the list item; Suggestion: QItem", + "scope": { + "index": { + "type": "Number", + "desc": "Item index in the options list", + "examples": [ 0 ] + }, + "item": { + "type": "Any", + "desc": "Item data -- its value is taken from 'options' prop", + "__exemption": [ "examples" ] + } + } + } + } +} diff --git a/src/components/virtual-scroll/QVirtualScroll.sass b/src/components/virtual-scroll/QVirtualScroll.sass new file mode 100644 index 00000000000..9c58164c302 --- /dev/null +++ b/src/components/virtual-scroll/QVirtualScroll.sass @@ -0,0 +1,46 @@ +.q-virtual-scroll + &:focus + outline: 0 + + &__content + outline: none + contain: content + + > * + overflow-anchor: none + + > [data-q-vs-anchor] + overflow-anchor: auto + + &__padding + background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) #{"/* rtl:ignore */"} + background-size: 100% 50px #{"/* rtl:ignore */"} + background-size: var(--q-virtual-scroll-item-width, 100%) var(--q-virtual-scroll-item-height, 50px) #{"/* rtl:ignore */"} + + .q-table & + tr + height: 0 !important + td + padding: 0 !important + + &--horizontal + display: flex + flex-direction: row + flex-wrap: nowrap + align-items: stretch + + .q-virtual-scroll + &__content + display: flex + flex-direction: row + flex-wrap: nowrap + + &__padding, + &__content, + &__content > * + flex: 0 0 auto + + &__padding + background: linear-gradient(to left, rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) #{"/* rtl:ignore */"} + background-size: 50px 100% #{"/* rtl:ignore */"} + background-size: var(--q-virtual-scroll-item-width, 50px) var(--q-virtual-scroll-item-height, 100%) #{"/* rtl:ignore */"} diff --git a/src/components/virtual-scroll/QVirtualScroll.styl b/src/components/virtual-scroll/QVirtualScroll.styl new file mode 100644 index 00000000000..62f0d514497 --- /dev/null +++ b/src/components/virtual-scroll/QVirtualScroll.styl @@ -0,0 +1,46 @@ +.q-virtual-scroll + &:focus + outline: 0 + + &__content + outline: none + contain: content + + > * + overflow-anchor: none + + > [data-q-vs-anchor] + overflow-anchor: auto + + &__padding + background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) /* rtl:ignore */ + background-size: 100% 50px /* rtl:ignore */ + background-size: var(--q-virtual-scroll-item-width, 100%) var(--q-virtual-scroll-item-height, 50px) /* rtl:ignore */ + + .q-table & + tr + height: 0 !important + td + padding: 0 !important + + &--horizontal + display: flex + flex-direction: row + flex-wrap: nowrap + align-items: stretch + + .q-virtual-scroll + &__content + display: flex + flex-direction: row + flex-wrap: nowrap + + &__padding, + &__content, + &__content > * + flex: 0 0 auto + + &__padding + background: linear-gradient(to left, rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) /* rtl:ignore */ + background-size: 50px 100% /* rtl:ignore */ + background-size: var(--q-virtual-scroll-item-width, 50px) var(--q-virtual-scroll-item-height, 100%) /* rtl:ignore */ diff --git a/src/components/virtual-scroll/index.js b/src/components/virtual-scroll/index.js new file mode 100644 index 00000000000..1a47bf8d62d --- /dev/null +++ b/src/components/virtual-scroll/index.js @@ -0,0 +1,5 @@ +import QVirtualScroll from './QVirtualScroll.js' + +export { + QVirtualScroll +} diff --git a/src/css/core/animations.sass b/src/css/core/animations.sass new file mode 100644 index 00000000000..bc92ad6e681 --- /dev/null +++ b/src/css/core/animations.sass @@ -0,0 +1,90 @@ +/* + * Animate.css additions + * Adapted from: https://github.com/animate-css/animate.css/blob/6828621a01e145119db6194dc9b4d37325b48aa5/source/_base.css + */ + +\:root + --animate-duration: #{$animate-duration} + --animate-delay: #{$animate-delay} + --animate-repeat: #{$animate-repeat} + +.animated + animation-duration: var(--animate-duration) + animation-fill-mode: both + + &.infinite + animation-iteration-count: infinite + + // Last seen on v3.5.2 + &.hinge + animation-duration: 2s + + &.repeat-1 + animation-iteration-count: var(--animate-repeat) + + &.repeat-2 + animation-iteration-count: calc(var(--animate-repeat) * 2) + + &.repeat-3 + animation-iteration-count: calc(var(--animate-repeat) * 3) + + &.delay-1s + animation-delay: var(--animate-delay) + + &.delay-2s + animation-delay: calc(var(--animate-delay) * 2) + + &.delay-3s + animation-delay: calc(var(--animate-delay) * 3) + + &.delay-4s + animation-delay: calc(var(--animate-delay) * 4) + + &.delay-5s + animation-delay: calc(var(--animate-delay) * 5) + + &.faster + animation-duration: calc(var(--animate-duration) / 2) + + &.fast + animation-duration: calc(var(--animate-duration) * 0.8) + + &.slow + animation-duration: calc(var(--animate-duration) * 2) + + &.slower + animation-duration: calc(var(--animate-duration) * 3) + +@media print, (prefers-reduced-motion: reduce) + .animated + animation-duration: 1ms !important + transition-duration: 1ms !important + animation-iteration-count: 1 !important + + .animated[class*='Out'] + opacity: 0 + +/* + * Quasar animations + */ + +.q-animate--scale + animation: q-scale .15s + animation-timing-function: cubic-bezier(.25,.8,.25,1) + +@keyframes q-scale + 0% + transform: scale(1) + 50% + transform: scale(1.04) + 100% + transform: scale(1) + +.q-animate--fade + animation: q-fade .2s #{"/* rtl:ignore */"} + +@keyframes q-fade + 0% + opacity: 0 + 100% + opacity: 1 diff --git a/src/css/core/animations.styl b/src/css/core/animations.styl new file mode 100644 index 00000000000..6481a96f9ca --- /dev/null +++ b/src/css/core/animations.styl @@ -0,0 +1,90 @@ +/* + * Animate.css additions + * Adapted from: https://github.com/animate-css/animate.css/blob/6828621a01e145119db6194dc9b4d37325b48aa5/source/_base.css + */ + +:root + --animate-duration: $animate-duration + --animate-delay: $animate-delay + --animate-repeat: $animate-repeat + +.animated + animation-duration: var(--animate-duration) + animation-fill-mode: both + + &.infinite + animation-iteration-count: infinite + + // Last seen on v3.5.2 + &.hinge + animation-duration: 2s + + &.repeat-1 + animation-iteration-count: var(--animate-repeat) + + &.repeat-2 + animation-iteration-count: calc(var(--animate-repeat) * 2) + + &.repeat-3 + animation-iteration-count: calc(var(--animate-repeat) * 3) + + &.delay-1s + animation-delay: var(--animate-delay) + + &.delay-2s + animation-delay: calc(var(--animate-delay) * 2) + + &.delay-3s + animation-delay: calc(var(--animate-delay) * 3) + + &.delay-4s + animation-delay: calc(var(--animate-delay) * 4) + + &.delay-5s + animation-delay: calc(var(--animate-delay) * 5) + + &.faster + animation-duration: calc(var(--animate-duration) / 2) + + &.fast + animation-duration: calc(var(--animate-duration) * 0.8) + + &.slow + animation-duration: calc(var(--animate-duration) * 2) + + &.slower + animation-duration: calc(var(--animate-duration) * 3) + +@media print, (prefers-reduced-motion: reduce) + .animated + animation-duration: 1ms !important + transition-duration: 1ms !important + animation-iteration-count: 1 !important + + .animated[class*='Out'] + opacity: 0 + +/* + * Quasar animations + */ + +.q-animate--scale + animation: q-scale .15s + animation-timing-function: cubic-bezier(.25,.8,.25,1) + +@keyframes q-scale + 0% + transform: scale(1) + 50% + transform: scale(1.04) + 100% + transform: scale(1) + +.q-animate--fade + animation: q-fade .2s /* rtl:ignore */ + +@keyframes q-fade + 0% + opacity: 0 + 100% + opacity: 1 diff --git a/src/css/core/colors.sass b/src/css/core/colors.sass new file mode 100644 index 00000000000..1a4f08d7d0e --- /dev/null +++ b/src/css/core/colors.sass @@ -0,0 +1,1837 @@ +\:root + --q-color-primary: #{$primary} + --q-color-secondary: #{$secondary} + --q-color-accent: #{$accent} + --q-color-positive: #{$positive} + --q-color-negative: #{$negative} + --q-color-info: #{$info} + --q-color-warning: #{$warning} + --q-color-dark: #{$dark} + --q-color-light-text: #{$light-text} + --q-color-light-page: #{$light-page} + --q-color-dark-text: #{$dark-text} + --q-color-dark-page: #{$dark-page} + --q-color-backdrop-background: #{$backdrop-background} + --q-color-notify-background: #{$notify-background} + --q-color-chip-background-light: #{$chip-background-light} + --q-color-chip-background-dark: #{$chip-background-dark} + --q-color-dialog-plugin-light: #{$dialog-plugin-light} + --q-color-dialog-plugin-dark: #{$dialog-plugin-dark} + +.text-dark + color: $dark !important + color: var(--q-color-dark) !important +.bg-dark + background: $dark !important + background: var(--q-color-dark) !important + +.text-dialog-plugin-light, +.text-dialog-plugin-dark-auto + color: $dialog-plugin-light !important + color: var(--q-color-dialog-plugin-light) !important +.bg-dialog-plugin-light, +.bg-dialog-plugin-dark-auto + background: $dialog-plugin-light !important + background: var(--q-color-dialog-plugin-light) !important + +.text-dialog-plugin-dark + color: $dialog-plugin-dark !important + color: var(--q-color-dialog-plugin-dark) !important +.bg-dialog-plugin-dark + background: $dialog-plugin-dark !important + background: var(--q-color-dialog-plugin-dark) !important + +@media (prefers-color-scheme: dark) + .text-dialog-plugin-dark-auto + color: $dialog-plugin-dark !important + color: var(--q-color-dialog-plugin-dark) !important + .bg-dialog-plugin-dark-auto + background: $dialog-plugin-dark !important + background: var(--q-color-dialog-plugin-dark) !important + +.text-primary + color: $primary !important + color: var(--q-color-primary) !important +.bg-primary + background: $primary !important + background: var(--q-color-primary) !important + +.text-secondary + color: $secondary !important + color: var(--q-color-secondary) !important +.bg-secondary + background: $secondary !important + background: var(--q-color-secondary) !important + +.text-accent + color: $accent !important + color: var(--q-color-accent) !important +.bg-accent + background: $accent !important + background: var(--q-color-accent) !important + +.text-positive + color: $positive !important + color: var(--q-color-positive) !important +.bg-positive + background: $positive !important + background: var(--q-color-positive) !important + +.text-negative + color: $negative !important + color: var(--q-color-negative) !important +.bg-negative + background: $negative !important + background: var(--q-color-negative) !important + +.text-info + color: $info !important + color: var(--q-color-info) !important +.bg-info + background: $info !important + background: var(--q-color-info) !important + +.text-warning + color: $warning !important + color: var(--q-color-warning) !important +.bg-warning + background: $warning !important + background: var(--q-color-warning) !important + +.text-white + color: #fff !important +.bg-white + background: #fff !important + +.text-black + color: #000 !important +.bg-black + background: #000 !important + +.text-transparent + color: transparent !important +.bg-transparent + background: transparent !important + +.text-separator + color: $separator-color !important +.bg-separator + background: $separator-color !important + +.text-dark-separator + color: $separator-dark-color !important +.bg-dark-separator + background: $separator-dark-color !important + +// @stylint off + +.text-red + color: $red !important + +.text-red-1 + color: $red-1 !important + +.text-red-2 + color: $red-2 !important + +.text-red-3 + color: $red-3 !important + +.text-red-4 + color: $red-4 !important + +.text-red-5 + color: $red-5 !important + +.text-red-6 + color: $red-6 !important + +.text-red-7 + color: $red-7 !important + +.text-red-8 + color: $red-8 !important + +.text-red-9 + color: $red-9 !important + +.text-red-10 + color: $red-10 !important + +.text-red-11 + color: $red-11 !important + +.text-red-12 + color: $red-12 !important + +.text-red-13 + color: $red-13 !important + +.text-red-14 + color: $red-14 !important + +.text-pink + color: $pink !important + +.text-pink-1 + color: $pink-1 !important + +.text-pink-2 + color: $pink-2 !important + +.text-pink-3 + color: $pink-3 !important + +.text-pink-4 + color: $pink-4 !important + +.text-pink-5 + color: $pink-5 !important + +.text-pink-6 + color: $pink-6 !important + +.text-pink-7 + color: $pink-7 !important + +.text-pink-8 + color: $pink-8 !important + +.text-pink-9 + color: $pink-9 !important + +.text-pink-10 + color: $pink-10 !important + +.text-pink-11 + color: $pink-11 !important + +.text-pink-12 + color: $pink-12 !important + +.text-pink-13 + color: $pink-13 !important + +.text-pink-14 + color: $pink-14 !important + +.text-purple + color: $purple !important + +.text-purple-1 + color: $purple-1 !important + +.text-purple-2 + color: $purple-2 !important + +.text-purple-3 + color: $purple-3 !important + +.text-purple-4 + color: $purple-4 !important + +.text-purple-5 + color: $purple-5 !important + +.text-purple-6 + color: $purple-6 !important + +.text-purple-7 + color: $purple-7 !important + +.text-purple-8 + color: $purple-8 !important + +.text-purple-9 + color: $purple-9 !important + +.text-purple-10 + color: $purple-10 !important + +.text-purple-11 + color: $purple-11 !important + +.text-purple-12 + color: $purple-12 !important + +.text-purple-13 + color: $purple-13 !important + +.text-purple-14 + color: $purple-14 !important + +.text-deep-purple + color: $deep-purple !important + +.text-deep-purple-1 + color: $deep-purple-1 !important + +.text-deep-purple-2 + color: $deep-purple-2 !important + +.text-deep-purple-3 + color: $deep-purple-3 !important + +.text-deep-purple-4 + color: $deep-purple-4 !important + +.text-deep-purple-5 + color: $deep-purple-5 !important + +.text-deep-purple-6 + color: $deep-purple-6 !important + +.text-deep-purple-7 + color: $deep-purple-7 !important + +.text-deep-purple-8 + color: $deep-purple-8 !important + +.text-deep-purple-9 + color: $deep-purple-9 !important + +.text-deep-purple-10 + color: $deep-purple-10 !important + +.text-deep-purple-11 + color: $deep-purple-11 !important + +.text-deep-purple-12 + color: $deep-purple-12 !important + +.text-deep-purple-13 + color: $deep-purple-13 !important + +.text-deep-purple-14 + color: $deep-purple-14 !important + +.text-indigo + color: $indigo !important + +.text-indigo-1 + color: $indigo-1 !important + +.text-indigo-2 + color: $indigo-2 !important + +.text-indigo-3 + color: $indigo-3 !important + +.text-indigo-4 + color: $indigo-4 !important + +.text-indigo-5 + color: $indigo-5 !important + +.text-indigo-6 + color: $indigo-6 !important + +.text-indigo-7 + color: $indigo-7 !important + +.text-indigo-8 + color: $indigo-8 !important + +.text-indigo-9 + color: $indigo-9 !important + +.text-indigo-10 + color: $indigo-10 !important + +.text-indigo-11 + color: $indigo-11 !important + +.text-indigo-12 + color: $indigo-12 !important + +.text-indigo-13 + color: $indigo-13 !important + +.text-indigo-14 + color: $indigo-14 !important + +.text-blue + color: $blue !important + +.text-blue-1 + color: $blue-1 !important + +.text-blue-2 + color: $blue-2 !important + +.text-blue-3 + color: $blue-3 !important + +.text-blue-4 + color: $blue-4 !important + +.text-blue-5 + color: $blue-5 !important + +.text-blue-6 + color: $blue-6 !important + +.text-blue-7 + color: $blue-7 !important + +.text-blue-8 + color: $blue-8 !important + +.text-blue-9 + color: $blue-9 !important + +.text-blue-10 + color: $blue-10 !important + +.text-blue-11 + color: $blue-11 !important + +.text-blue-12 + color: $blue-12 !important + +.text-blue-13 + color: $blue-13 !important + +.text-blue-14 + color: $blue-14 !important + +.text-light-blue + color: $light-blue !important + +.text-light-blue-1 + color: $light-blue-1 !important + +.text-light-blue-2 + color: $light-blue-2 !important + +.text-light-blue-3 + color: $light-blue-3 !important + +.text-light-blue-4 + color: $light-blue-4 !important + +.text-light-blue-5 + color: $light-blue-5 !important + +.text-light-blue-6 + color: $light-blue-6 !important + +.text-light-blue-7 + color: $light-blue-7 !important + +.text-light-blue-8 + color: $light-blue-8 !important + +.text-light-blue-9 + color: $light-blue-9 !important + +.text-light-blue-10 + color: $light-blue-10 !important + +.text-light-blue-11 + color: $light-blue-11 !important + +.text-light-blue-12 + color: $light-blue-12 !important + +.text-light-blue-13 + color: $light-blue-13 !important + +.text-light-blue-14 + color: $light-blue-14 !important + +.text-cyan + color: $cyan !important + +.text-cyan-1 + color: $cyan-1 !important + +.text-cyan-2 + color: $cyan-2 !important + +.text-cyan-3 + color: $cyan-3 !important + +.text-cyan-4 + color: $cyan-4 !important + +.text-cyan-5 + color: $cyan-5 !important + +.text-cyan-6 + color: $cyan-6 !important + +.text-cyan-7 + color: $cyan-7 !important + +.text-cyan-8 + color: $cyan-8 !important + +.text-cyan-9 + color: $cyan-9 !important + +.text-cyan-10 + color: $cyan-10 !important + +.text-cyan-11 + color: $cyan-11 !important + +.text-cyan-12 + color: $cyan-12 !important + +.text-cyan-13 + color: $cyan-13 !important + +.text-cyan-14 + color: $cyan-14 !important + +.text-teal + color: $teal !important + +.text-teal-1 + color: $teal-1 !important + +.text-teal-2 + color: $teal-2 !important + +.text-teal-3 + color: $teal-3 !important + +.text-teal-4 + color: $teal-4 !important + +.text-teal-5 + color: $teal-5 !important + +.text-teal-6 + color: $teal-6 !important + +.text-teal-7 + color: $teal-7 !important + +.text-teal-8 + color: $teal-8 !important + +.text-teal-9 + color: $teal-9 !important + +.text-teal-10 + color: $teal-10 !important + +.text-teal-11 + color: $teal-11 !important + +.text-teal-12 + color: $teal-12 !important + +.text-teal-13 + color: $teal-13 !important + +.text-teal-14 + color: $teal-14 !important + +.text-green + color: $green !important + +.text-green-1 + color: $green-1 !important + +.text-green-2 + color: $green-2 !important + +.text-green-3 + color: $green-3 !important + +.text-green-4 + color: $green-4 !important + +.text-green-5 + color: $green-5 !important + +.text-green-6 + color: $green-6 !important + +.text-green-7 + color: $green-7 !important + +.text-green-8 + color: $green-8 !important + +.text-green-9 + color: $green-9 !important + +.text-green-10 + color: $green-10 !important + +.text-green-11 + color: $green-11 !important + +.text-green-12 + color: $green-12 !important + +.text-green-13 + color: $green-13 !important + +.text-green-14 + color: $green-14 !important + +.text-light-green + color: $light-green !important + +.text-light-green-1 + color: $light-green-1 !important + +.text-light-green-2 + color: $light-green-2 !important + +.text-light-green-3 + color: $light-green-3 !important + +.text-light-green-4 + color: $light-green-4 !important + +.text-light-green-5 + color: $light-green-5 !important + +.text-light-green-6 + color: $light-green-6 !important + +.text-light-green-7 + color: $light-green-7 !important + +.text-light-green-8 + color: $light-green-8 !important + +.text-light-green-9 + color: $light-green-9 !important + +.text-light-green-10 + color: $light-green-10 !important + +.text-light-green-11 + color: $light-green-11 !important + +.text-light-green-12 + color: $light-green-12 !important + +.text-light-green-13 + color: $light-green-13 !important + +.text-light-green-14 + color: $light-green-14 !important + +.text-lime + color: $lime !important + +.text-lime-1 + color: $lime-1 !important + +.text-lime-2 + color: $lime-2 !important + +.text-lime-3 + color: $lime-3 !important + +.text-lime-4 + color: $lime-4 !important + +.text-lime-5 + color: $lime-5 !important + +.text-lime-6 + color: $lime-6 !important + +.text-lime-7 + color: $lime-7 !important + +.text-lime-8 + color: $lime-8 !important + +.text-lime-9 + color: $lime-9 !important + +.text-lime-10 + color: $lime-10 !important + +.text-lime-11 + color: $lime-11 !important + +.text-lime-12 + color: $lime-12 !important + +.text-lime-13 + color: $lime-13 !important + +.text-lime-14 + color: $lime-14 !important + +.text-yellow + color: $yellow !important + +.text-yellow-1 + color: $yellow-1 !important + +.text-yellow-2 + color: $yellow-2 !important + +.text-yellow-3 + color: $yellow-3 !important + +.text-yellow-4 + color: $yellow-4 !important + +.text-yellow-5 + color: $yellow-5 !important + +.text-yellow-6 + color: $yellow-6 !important + +.text-yellow-7 + color: $yellow-7 !important + +.text-yellow-8 + color: $yellow-8 !important + +.text-yellow-9 + color: $yellow-9 !important + +.text-yellow-10 + color: $yellow-10 !important + +.text-yellow-11 + color: $yellow-11 !important + +.text-yellow-12 + color: $yellow-12 !important + +.text-yellow-13 + color: $yellow-13 !important + +.text-yellow-14 + color: $yellow-14 !important + +.text-amber + color: $amber !important + +.text-amber-1 + color: $amber-1 !important + +.text-amber-2 + color: $amber-2 !important + +.text-amber-3 + color: $amber-3 !important + +.text-amber-4 + color: $amber-4 !important + +.text-amber-5 + color: $amber-5 !important + +.text-amber-6 + color: $amber-6 !important + +.text-amber-7 + color: $amber-7 !important + +.text-amber-8 + color: $amber-8 !important + +.text-amber-9 + color: $amber-9 !important + +.text-amber-10 + color: $amber-10 !important + +.text-amber-11 + color: $amber-11 !important + +.text-amber-12 + color: $amber-12 !important + +.text-amber-13 + color: $amber-13 !important + +.text-amber-14 + color: $amber-14 !important + +.text-orange + color: $orange !important + +.text-orange-1 + color: $orange-1 !important + +.text-orange-2 + color: $orange-2 !important + +.text-orange-3 + color: $orange-3 !important + +.text-orange-4 + color: $orange-4 !important + +.text-orange-5 + color: $orange-5 !important + +.text-orange-6 + color: $orange-6 !important + +.text-orange-7 + color: $orange-7 !important + +.text-orange-8 + color: $orange-8 !important + +.text-orange-9 + color: $orange-9 !important + +.text-orange-10 + color: $orange-10 !important + +.text-orange-11 + color: $orange-11 !important + +.text-orange-12 + color: $orange-12 !important + +.text-orange-13 + color: $orange-13 !important + +.text-orange-14 + color: $orange-14 !important + +.text-deep-orange + color: $deep-orange !important + +.text-deep-orange-1 + color: $deep-orange-1 !important + +.text-deep-orange-2 + color: $deep-orange-2 !important + +.text-deep-orange-3 + color: $deep-orange-3 !important + +.text-deep-orange-4 + color: $deep-orange-4 !important + +.text-deep-orange-5 + color: $deep-orange-5 !important + +.text-deep-orange-6 + color: $deep-orange-6 !important + +.text-deep-orange-7 + color: $deep-orange-7 !important + +.text-deep-orange-8 + color: $deep-orange-8 !important + +.text-deep-orange-9 + color: $deep-orange-9 !important + +.text-deep-orange-10 + color: $deep-orange-10 !important + +.text-deep-orange-11 + color: $deep-orange-11 !important + +.text-deep-orange-12 + color: $deep-orange-12 !important + +.text-deep-orange-13 + color: $deep-orange-13 !important + +.text-deep-orange-14 + color: $deep-orange-14 !important + +.text-brown + color: $brown !important + +.text-brown-1 + color: $brown-1 !important + +.text-brown-2 + color: $brown-2 !important + +.text-brown-3 + color: $brown-3 !important + +.text-brown-4 + color: $brown-4 !important + +.text-brown-5 + color: $brown-5 !important + +.text-brown-6 + color: $brown-6 !important + +.text-brown-7 + color: $brown-7 !important + +.text-brown-8 + color: $brown-8 !important + +.text-brown-9 + color: $brown-9 !important + +.text-brown-10 + color: $brown-10 !important + +.text-brown-11 + color: $brown-11 !important + +.text-brown-12 + color: $brown-12 !important + +.text-brown-13 + color: $brown-13 !important + +.text-brown-14 + color: $brown-14 !important + +.text-grey + color: $grey !important + +.text-grey-1 + color: $grey-1 !important + +.text-grey-2 + color: $grey-2 !important + +.text-grey-3 + color: $grey-3 !important + +.text-grey-4 + color: $grey-4 !important + +.text-grey-5 + color: $grey-5 !important + +.text-grey-6 + color: $grey-6 !important + +.text-grey-7 + color: $grey-7 !important + +.text-grey-8 + color: $grey-8 !important + +.text-grey-9 + color: $grey-9 !important + +.text-grey-10 + color: $grey-10 !important + +.text-grey-11 + color: $grey-11 !important + +.text-grey-12 + color: $grey-12 !important + +.text-grey-13 + color: $grey-13 !important + +.text-grey-14 + color: $grey-14 !important + +.text-blue-grey + color: $blue-grey !important + +.text-blue-grey-1 + color: $blue-grey-1 !important + +.text-blue-grey-2 + color: $blue-grey-2 !important + +.text-blue-grey-3 + color: $blue-grey-3 !important + +.text-blue-grey-4 + color: $blue-grey-4 !important + +.text-blue-grey-5 + color: $blue-grey-5 !important + +.text-blue-grey-6 + color: $blue-grey-6 !important + +.text-blue-grey-7 + color: $blue-grey-7 !important + +.text-blue-grey-8 + color: $blue-grey-8 !important + +.text-blue-grey-9 + color: $blue-grey-9 !important + +.text-blue-grey-10 + color: $blue-grey-10 !important + +.text-blue-grey-11 + color: $blue-grey-11 !important + +.text-blue-grey-12 + color: $blue-grey-12 !important + +.text-blue-grey-13 + color: $blue-grey-13 !important + +.text-blue-grey-14 + color: $blue-grey-14 !important + + +.bg-red + background: $red !important + +.bg-red-1 + background: $red-1 !important + +.bg-red-2 + background: $red-2 !important + +.bg-red-3 + background: $red-3 !important + +.bg-red-4 + background: $red-4 !important + +.bg-red-5 + background: $red-5 !important + +.bg-red-6 + background: $red-6 !important + +.bg-red-7 + background: $red-7 !important + +.bg-red-8 + background: $red-8 !important + +.bg-red-9 + background: $red-9 !important + +.bg-red-10 + background: $red-10 !important + +.bg-red-11 + background: $red-11 !important + +.bg-red-12 + background: $red-12 !important + +.bg-red-13 + background: $red-13 !important + +.bg-red-14 + background: $red-14 !important + +.bg-pink + background: $pink !important + +.bg-pink-1 + background: $pink-1 !important + +.bg-pink-2 + background: $pink-2 !important + +.bg-pink-3 + background: $pink-3 !important + +.bg-pink-4 + background: $pink-4 !important + +.bg-pink-5 + background: $pink-5 !important + +.bg-pink-6 + background: $pink-6 !important + +.bg-pink-7 + background: $pink-7 !important + +.bg-pink-8 + background: $pink-8 !important + +.bg-pink-9 + background: $pink-9 !important + +.bg-pink-10 + background: $pink-10 !important + +.bg-pink-11 + background: $pink-11 !important + +.bg-pink-12 + background: $pink-12 !important + +.bg-pink-13 + background: $pink-13 !important + +.bg-pink-14 + background: $pink-14 !important + +.bg-purple + background: $purple !important + +.bg-purple-1 + background: $purple-1 !important + +.bg-purple-2 + background: $purple-2 !important + +.bg-purple-3 + background: $purple-3 !important + +.bg-purple-4 + background: $purple-4 !important + +.bg-purple-5 + background: $purple-5 !important + +.bg-purple-6 + background: $purple-6 !important + +.bg-purple-7 + background: $purple-7 !important + +.bg-purple-8 + background: $purple-8 !important + +.bg-purple-9 + background: $purple-9 !important + +.bg-purple-10 + background: $purple-10 !important + +.bg-purple-11 + background: $purple-11 !important + +.bg-purple-12 + background: $purple-12 !important + +.bg-purple-13 + background: $purple-13 !important + +.bg-purple-14 + background: $purple-14 !important + +.bg-deep-purple + background: $deep-purple !important + +.bg-deep-purple-1 + background: $deep-purple-1 !important + +.bg-deep-purple-2 + background: $deep-purple-2 !important + +.bg-deep-purple-3 + background: $deep-purple-3 !important + +.bg-deep-purple-4 + background: $deep-purple-4 !important + +.bg-deep-purple-5 + background: $deep-purple-5 !important + +.bg-deep-purple-6 + background: $deep-purple-6 !important + +.bg-deep-purple-7 + background: $deep-purple-7 !important + +.bg-deep-purple-8 + background: $deep-purple-8 !important + +.bg-deep-purple-9 + background: $deep-purple-9 !important + +.bg-deep-purple-10 + background: $deep-purple-10 !important + +.bg-deep-purple-11 + background: $deep-purple-11 !important + +.bg-deep-purple-12 + background: $deep-purple-12 !important + +.bg-deep-purple-13 + background: $deep-purple-13 !important + +.bg-deep-purple-14 + background: $deep-purple-14 !important + +.bg-indigo + background: $indigo !important + +.bg-indigo-1 + background: $indigo-1 !important + +.bg-indigo-2 + background: $indigo-2 !important + +.bg-indigo-3 + background: $indigo-3 !important + +.bg-indigo-4 + background: $indigo-4 !important + +.bg-indigo-5 + background: $indigo-5 !important + +.bg-indigo-6 + background: $indigo-6 !important + +.bg-indigo-7 + background: $indigo-7 !important + +.bg-indigo-8 + background: $indigo-8 !important + +.bg-indigo-9 + background: $indigo-9 !important + +.bg-indigo-10 + background: $indigo-10 !important + +.bg-indigo-11 + background: $indigo-11 !important + +.bg-indigo-12 + background: $indigo-12 !important + +.bg-indigo-13 + background: $indigo-13 !important + +.bg-indigo-14 + background: $indigo-14 !important + +.bg-blue + background: $blue !important + +.bg-blue-1 + background: $blue-1 !important + +.bg-blue-2 + background: $blue-2 !important + +.bg-blue-3 + background: $blue-3 !important + +.bg-blue-4 + background: $blue-4 !important + +.bg-blue-5 + background: $blue-5 !important + +.bg-blue-6 + background: $blue-6 !important + +.bg-blue-7 + background: $blue-7 !important + +.bg-blue-8 + background: $blue-8 !important + +.bg-blue-9 + background: $blue-9 !important + +.bg-blue-10 + background: $blue-10 !important + +.bg-blue-11 + background: $blue-11 !important + +.bg-blue-12 + background: $blue-12 !important + +.bg-blue-13 + background: $blue-13 !important + +.bg-blue-14 + background: $blue-14 !important + +.bg-light-blue + background: $light-blue !important + +.bg-light-blue-1 + background: $light-blue-1 !important + +.bg-light-blue-2 + background: $light-blue-2 !important + +.bg-light-blue-3 + background: $light-blue-3 !important + +.bg-light-blue-4 + background: $light-blue-4 !important + +.bg-light-blue-5 + background: $light-blue-5 !important + +.bg-light-blue-6 + background: $light-blue-6 !important + +.bg-light-blue-7 + background: $light-blue-7 !important + +.bg-light-blue-8 + background: $light-blue-8 !important + +.bg-light-blue-9 + background: $light-blue-9 !important + +.bg-light-blue-10 + background: $light-blue-10 !important + +.bg-light-blue-11 + background: $light-blue-11 !important + +.bg-light-blue-12 + background: $light-blue-12 !important + +.bg-light-blue-13 + background: $light-blue-13 !important + +.bg-light-blue-14 + background: $light-blue-14 !important + +.bg-cyan + background: $cyan !important + +.bg-cyan-1 + background: $cyan-1 !important + +.bg-cyan-2 + background: $cyan-2 !important + +.bg-cyan-3 + background: $cyan-3 !important + +.bg-cyan-4 + background: $cyan-4 !important + +.bg-cyan-5 + background: $cyan-5 !important + +.bg-cyan-6 + background: $cyan-6 !important + +.bg-cyan-7 + background: $cyan-7 !important + +.bg-cyan-8 + background: $cyan-8 !important + +.bg-cyan-9 + background: $cyan-9 !important + +.bg-cyan-10 + background: $cyan-10 !important + +.bg-cyan-11 + background: $cyan-11 !important + +.bg-cyan-12 + background: $cyan-12 !important + +.bg-cyan-13 + background: $cyan-13 !important + +.bg-cyan-14 + background: $cyan-14 !important + +.bg-teal + background: $teal !important + +.bg-teal-1 + background: $teal-1 !important + +.bg-teal-2 + background: $teal-2 !important + +.bg-teal-3 + background: $teal-3 !important + +.bg-teal-4 + background: $teal-4 !important + +.bg-teal-5 + background: $teal-5 !important + +.bg-teal-6 + background: $teal-6 !important + +.bg-teal-7 + background: $teal-7 !important + +.bg-teal-8 + background: $teal-8 !important + +.bg-teal-9 + background: $teal-9 !important + +.bg-teal-10 + background: $teal-10 !important + +.bg-teal-11 + background: $teal-11 !important + +.bg-teal-12 + background: $teal-12 !important + +.bg-teal-13 + background: $teal-13 !important + +.bg-teal-14 + background: $teal-14 !important + +.bg-green + background: $green !important + +.bg-green-1 + background: $green-1 !important + +.bg-green-2 + background: $green-2 !important + +.bg-green-3 + background: $green-3 !important + +.bg-green-4 + background: $green-4 !important + +.bg-green-5 + background: $green-5 !important + +.bg-green-6 + background: $green-6 !important + +.bg-green-7 + background: $green-7 !important + +.bg-green-8 + background: $green-8 !important + +.bg-green-9 + background: $green-9 !important + +.bg-green-10 + background: $green-10 !important + +.bg-green-11 + background: $green-11 !important + +.bg-green-12 + background: $green-12 !important + +.bg-green-13 + background: $green-13 !important + +.bg-green-14 + background: $green-14 !important + +.bg-light-green + background: $light-green !important + +.bg-light-green-1 + background: $light-green-1 !important + +.bg-light-green-2 + background: $light-green-2 !important + +.bg-light-green-3 + background: $light-green-3 !important + +.bg-light-green-4 + background: $light-green-4 !important + +.bg-light-green-5 + background: $light-green-5 !important + +.bg-light-green-6 + background: $light-green-6 !important + +.bg-light-green-7 + background: $light-green-7 !important + +.bg-light-green-8 + background: $light-green-8 !important + +.bg-light-green-9 + background: $light-green-9 !important + +.bg-light-green-10 + background: $light-green-10 !important + +.bg-light-green-11 + background: $light-green-11 !important + +.bg-light-green-12 + background: $light-green-12 !important + +.bg-light-green-13 + background: $light-green-13 !important + +.bg-light-green-14 + background: $light-green-14 !important + +.bg-lime + background: $lime !important + +.bg-lime-1 + background: $lime-1 !important + +.bg-lime-2 + background: $lime-2 !important + +.bg-lime-3 + background: $lime-3 !important + +.bg-lime-4 + background: $lime-4 !important + +.bg-lime-5 + background: $lime-5 !important + +.bg-lime-6 + background: $lime-6 !important + +.bg-lime-7 + background: $lime-7 !important + +.bg-lime-8 + background: $lime-8 !important + +.bg-lime-9 + background: $lime-9 !important + +.bg-lime-10 + background: $lime-10 !important + +.bg-lime-11 + background: $lime-11 !important + +.bg-lime-12 + background: $lime-12 !important + +.bg-lime-13 + background: $lime-13 !important + +.bg-lime-14 + background: $lime-14 !important + +.bg-yellow + background: $yellow !important + +.bg-yellow-1 + background: $yellow-1 !important + +.bg-yellow-2 + background: $yellow-2 !important + +.bg-yellow-3 + background: $yellow-3 !important + +.bg-yellow-4 + background: $yellow-4 !important + +.bg-yellow-5 + background: $yellow-5 !important + +.bg-yellow-6 + background: $yellow-6 !important + +.bg-yellow-7 + background: $yellow-7 !important + +.bg-yellow-8 + background: $yellow-8 !important + +.bg-yellow-9 + background: $yellow-9 !important + +.bg-yellow-10 + background: $yellow-10 !important + +.bg-yellow-11 + background: $yellow-11 !important + +.bg-yellow-12 + background: $yellow-12 !important + +.bg-yellow-13 + background: $yellow-13 !important + +.bg-yellow-14 + background: $yellow-14 !important + +.bg-amber + background: $amber !important + +.bg-amber-1 + background: $amber-1 !important + +.bg-amber-2 + background: $amber-2 !important + +.bg-amber-3 + background: $amber-3 !important + +.bg-amber-4 + background: $amber-4 !important + +.bg-amber-5 + background: $amber-5 !important + +.bg-amber-6 + background: $amber-6 !important + +.bg-amber-7 + background: $amber-7 !important + +.bg-amber-8 + background: $amber-8 !important + +.bg-amber-9 + background: $amber-9 !important + +.bg-amber-10 + background: $amber-10 !important + +.bg-amber-11 + background: $amber-11 !important + +.bg-amber-12 + background: $amber-12 !important + +.bg-amber-13 + background: $amber-13 !important + +.bg-amber-14 + background: $amber-14 !important + +.bg-orange + background: $orange !important + +.bg-orange-1 + background: $orange-1 !important + +.bg-orange-2 + background: $orange-2 !important + +.bg-orange-3 + background: $orange-3 !important + +.bg-orange-4 + background: $orange-4 !important + +.bg-orange-5 + background: $orange-5 !important + +.bg-orange-6 + background: $orange-6 !important + +.bg-orange-7 + background: $orange-7 !important + +.bg-orange-8 + background: $orange-8 !important + +.bg-orange-9 + background: $orange-9 !important + +.bg-orange-10 + background: $orange-10 !important + +.bg-orange-11 + background: $orange-11 !important + +.bg-orange-12 + background: $orange-12 !important + +.bg-orange-13 + background: $orange-13 !important + +.bg-orange-14 + background: $orange-14 !important + +.bg-deep-orange + background: $deep-orange !important + +.bg-deep-orange-1 + background: $deep-orange-1 !important + +.bg-deep-orange-2 + background: $deep-orange-2 !important + +.bg-deep-orange-3 + background: $deep-orange-3 !important + +.bg-deep-orange-4 + background: $deep-orange-4 !important + +.bg-deep-orange-5 + background: $deep-orange-5 !important + +.bg-deep-orange-6 + background: $deep-orange-6 !important + +.bg-deep-orange-7 + background: $deep-orange-7 !important + +.bg-deep-orange-8 + background: $deep-orange-8 !important + +.bg-deep-orange-9 + background: $deep-orange-9 !important + +.bg-deep-orange-10 + background: $deep-orange-10 !important + +.bg-deep-orange-11 + background: $deep-orange-11 !important + +.bg-deep-orange-12 + background: $deep-orange-12 !important + +.bg-deep-orange-13 + background: $deep-orange-13 !important + +.bg-deep-orange-14 + background: $deep-orange-14 !important + +.bg-brown + background: $brown !important + +.bg-brown-1 + background: $brown-1 !important + +.bg-brown-2 + background: $brown-2 !important + +.bg-brown-3 + background: $brown-3 !important + +.bg-brown-4 + background: $brown-4 !important + +.bg-brown-5 + background: $brown-5 !important + +.bg-brown-6 + background: $brown-6 !important + +.bg-brown-7 + background: $brown-7 !important + +.bg-brown-8 + background: $brown-8 !important + +.bg-brown-9 + background: $brown-9 !important + +.bg-brown-10 + background: $brown-10 !important + +.bg-brown-11 + background: $brown-11 !important + +.bg-brown-12 + background: $brown-12 !important + +.bg-brown-13 + background: $brown-13 !important + +.bg-brown-14 + background: $brown-14 !important + +.bg-grey + background: $grey !important + +.bg-grey-1 + background: $grey-1 !important + +.bg-grey-2 + background: $grey-2 !important + +.bg-grey-3 + background: $grey-3 !important + +.bg-grey-4 + background: $grey-4 !important + +.bg-grey-5 + background: $grey-5 !important + +.bg-grey-6 + background: $grey-6 !important + +.bg-grey-7 + background: $grey-7 !important + +.bg-grey-8 + background: $grey-8 !important + +.bg-grey-9 + background: $grey-9 !important + +.bg-grey-10 + background: $grey-10 !important + +.bg-grey-11 + background: $grey-11 !important + +.bg-grey-12 + background: $grey-12 !important + +.bg-grey-13 + background: $grey-13 !important + +.bg-grey-14 + background: $grey-14 !important + +.bg-blue-grey + background: $blue-grey !important + +.bg-blue-grey-1 + background: $blue-grey-1 !important + +.bg-blue-grey-2 + background: $blue-grey-2 !important + +.bg-blue-grey-3 + background: $blue-grey-3 !important + +.bg-blue-grey-4 + background: $blue-grey-4 !important + +.bg-blue-grey-5 + background: $blue-grey-5 !important + +.bg-blue-grey-6 + background: $blue-grey-6 !important + +.bg-blue-grey-7 + background: $blue-grey-7 !important + +.bg-blue-grey-8 + background: $blue-grey-8 !important + +.bg-blue-grey-9 + background: $blue-grey-9 !important + +.bg-blue-grey-10 + background: $blue-grey-10 !important + +.bg-blue-grey-11 + background: $blue-grey-11 !important + +.bg-blue-grey-12 + background: $blue-grey-12 !important + +.bg-blue-grey-13 + background: $blue-grey-13 !important + +.bg-blue-grey-14 + background: $blue-grey-14 !important diff --git a/src/css/core/colors.styl b/src/css/core/colors.styl new file mode 100644 index 00000000000..09eb753831c --- /dev/null +++ b/src/css/core/colors.styl @@ -0,0 +1,1837 @@ +:root + --q-color-primary: $primary + --q-color-secondary: $secondary + --q-color-accent: $accent + --q-color-positive: $positive + --q-color-negative: $negative + --q-color-info: $info + --q-color-warning: $warning + --q-color-dark: $dark + --q-color-light-text: $light-text + --q-color-light-page: $light-page + --q-color-dark-text: $dark-text + --q-color-dark-page: $dark-page + --q-color-backdrop-background: $backdrop-background + --q-color-notify-background: $notify-background + --q-color-chip-background-light: $chip-background-light + --q-color-chip-background-dark: $chip-background-dark + --q-color-dialog-plugin-light: $dialog-plugin-light + --q-color-dialog-plugin-dark: $dialog-plugin-dark + +.text-dark + color: $dark !important + color: var(--q-color-dark) !important +.bg-dark + background: $dark !important + background: var(--q-color-dark) !important + +.text-dialog-plugin-light, +.text-dialog-plugin-dark-auto + color: $dialog-plugin-light !important + color: var(--q-color-dialog-plugin-light) !important +.bg-dialog-plugin-light, +.bg-dialog-plugin-dark-auto + background: $dialog-plugin-light !important + background: var(--q-color-dialog-plugin-light) !important + +.text-dialog-plugin-dark + color: $dialog-plugin-dark !important + color: var(--q-color-dialog-plugin-dark) !important +.bg-dialog-plugin-dark + background: $dialog-plugin-dark !important + background: var(--q-color-dialog-plugin-dark) !important + +@media (prefers-color-scheme: dark) + .text-dialog-plugin-dark-auto + color: $dialog-plugin-dark !important + color: var(--q-color-dialog-plugin-dark) !important + .bg-dialog-plugin-dark-auto + background: $dialog-plugin-dark !important + background: var(--q-color-dialog-plugin-dark) !important + +.text-primary + color: $primary !important + color: var(--q-color-primary) !important +.bg-primary + background: $primary !important + background: var(--q-color-primary) !important + +.text-secondary + color: $secondary !important + color: var(--q-color-secondary) !important +.bg-secondary + background: $secondary !important + background: var(--q-color-secondary) !important + +.text-accent + color: $accent !important + color: var(--q-color-accent) !important +.bg-accent + background: $accent !important + background: var(--q-color-accent) !important + +.text-positive + color: $positive !important + color: var(--q-color-positive) !important +.bg-positive + background: $positive !important + background: var(--q-color-positive) !important + +.text-negative + color: $negative !important + color: var(--q-color-negative) !important +.bg-negative + background: $negative !important + background: var(--q-color-negative) !important + +.text-info + color: $info !important + color: var(--q-color-info) !important +.bg-info + background: $info !important + background: var(--q-color-info) !important + +.text-warning + color: $warning !important + color: var(--q-color-warning) !important +.bg-warning + background: $warning !important + background: var(--q-color-warning) !important + +.text-white + color: #fff !important +.bg-white + background: #fff !important + +.text-black + color: #000 !important +.bg-black + background: #000 !important + +.text-transparent + color: transparent !important +.bg-transparent + background: transparent !important + +.text-separator + color: $separator-color !important +.bg-separator + background: $separator-color !important + +.text-dark-separator + color: $separator-dark-color !important +.bg-dark-separator + background: $separator-dark-color !important + +// @stylint off + +.text-red + color: $red !important + +.text-red-1 + color: $red-1 !important + +.text-red-2 + color: $red-2 !important + +.text-red-3 + color: $red-3 !important + +.text-red-4 + color: $red-4 !important + +.text-red-5 + color: $red-5 !important + +.text-red-6 + color: $red-6 !important + +.text-red-7 + color: $red-7 !important + +.text-red-8 + color: $red-8 !important + +.text-red-9 + color: $red-9 !important + +.text-red-10 + color: $red-10 !important + +.text-red-11 + color: $red-11 !important + +.text-red-12 + color: $red-12 !important + +.text-red-13 + color: $red-13 !important + +.text-red-14 + color: $red-14 !important + +.text-pink + color: $pink !important + +.text-pink-1 + color: $pink-1 !important + +.text-pink-2 + color: $pink-2 !important + +.text-pink-3 + color: $pink-3 !important + +.text-pink-4 + color: $pink-4 !important + +.text-pink-5 + color: $pink-5 !important + +.text-pink-6 + color: $pink-6 !important + +.text-pink-7 + color: $pink-7 !important + +.text-pink-8 + color: $pink-8 !important + +.text-pink-9 + color: $pink-9 !important + +.text-pink-10 + color: $pink-10 !important + +.text-pink-11 + color: $pink-11 !important + +.text-pink-12 + color: $pink-12 !important + +.text-pink-13 + color: $pink-13 !important + +.text-pink-14 + color: $pink-14 !important + +.text-purple + color: $purple !important + +.text-purple-1 + color: $purple-1 !important + +.text-purple-2 + color: $purple-2 !important + +.text-purple-3 + color: $purple-3 !important + +.text-purple-4 + color: $purple-4 !important + +.text-purple-5 + color: $purple-5 !important + +.text-purple-6 + color: $purple-6 !important + +.text-purple-7 + color: $purple-7 !important + +.text-purple-8 + color: $purple-8 !important + +.text-purple-9 + color: $purple-9 !important + +.text-purple-10 + color: $purple-10 !important + +.text-purple-11 + color: $purple-11 !important + +.text-purple-12 + color: $purple-12 !important + +.text-purple-13 + color: $purple-13 !important + +.text-purple-14 + color: $purple-14 !important + +.text-deep-purple + color: $deep-purple !important + +.text-deep-purple-1 + color: $deep-purple-1 !important + +.text-deep-purple-2 + color: $deep-purple-2 !important + +.text-deep-purple-3 + color: $deep-purple-3 !important + +.text-deep-purple-4 + color: $deep-purple-4 !important + +.text-deep-purple-5 + color: $deep-purple-5 !important + +.text-deep-purple-6 + color: $deep-purple-6 !important + +.text-deep-purple-7 + color: $deep-purple-7 !important + +.text-deep-purple-8 + color: $deep-purple-8 !important + +.text-deep-purple-9 + color: $deep-purple-9 !important + +.text-deep-purple-10 + color: $deep-purple-10 !important + +.text-deep-purple-11 + color: $deep-purple-11 !important + +.text-deep-purple-12 + color: $deep-purple-12 !important + +.text-deep-purple-13 + color: $deep-purple-13 !important + +.text-deep-purple-14 + color: $deep-purple-14 !important + +.text-indigo + color: $indigo !important + +.text-indigo-1 + color: $indigo-1 !important + +.text-indigo-2 + color: $indigo-2 !important + +.text-indigo-3 + color: $indigo-3 !important + +.text-indigo-4 + color: $indigo-4 !important + +.text-indigo-5 + color: $indigo-5 !important + +.text-indigo-6 + color: $indigo-6 !important + +.text-indigo-7 + color: $indigo-7 !important + +.text-indigo-8 + color: $indigo-8 !important + +.text-indigo-9 + color: $indigo-9 !important + +.text-indigo-10 + color: $indigo-10 !important + +.text-indigo-11 + color: $indigo-11 !important + +.text-indigo-12 + color: $indigo-12 !important + +.text-indigo-13 + color: $indigo-13 !important + +.text-indigo-14 + color: $indigo-14 !important + +.text-blue + color: $blue !important + +.text-blue-1 + color: $blue-1 !important + +.text-blue-2 + color: $blue-2 !important + +.text-blue-3 + color: $blue-3 !important + +.text-blue-4 + color: $blue-4 !important + +.text-blue-5 + color: $blue-5 !important + +.text-blue-6 + color: $blue-6 !important + +.text-blue-7 + color: $blue-7 !important + +.text-blue-8 + color: $blue-8 !important + +.text-blue-9 + color: $blue-9 !important + +.text-blue-10 + color: $blue-10 !important + +.text-blue-11 + color: $blue-11 !important + +.text-blue-12 + color: $blue-12 !important + +.text-blue-13 + color: $blue-13 !important + +.text-blue-14 + color: $blue-14 !important + +.text-light-blue + color: $light-blue !important + +.text-light-blue-1 + color: $light-blue-1 !important + +.text-light-blue-2 + color: $light-blue-2 !important + +.text-light-blue-3 + color: $light-blue-3 !important + +.text-light-blue-4 + color: $light-blue-4 !important + +.text-light-blue-5 + color: $light-blue-5 !important + +.text-light-blue-6 + color: $light-blue-6 !important + +.text-light-blue-7 + color: $light-blue-7 !important + +.text-light-blue-8 + color: $light-blue-8 !important + +.text-light-blue-9 + color: $light-blue-9 !important + +.text-light-blue-10 + color: $light-blue-10 !important + +.text-light-blue-11 + color: $light-blue-11 !important + +.text-light-blue-12 + color: $light-blue-12 !important + +.text-light-blue-13 + color: $light-blue-13 !important + +.text-light-blue-14 + color: $light-blue-14 !important + +.text-cyan + color: $cyan !important + +.text-cyan-1 + color: $cyan-1 !important + +.text-cyan-2 + color: $cyan-2 !important + +.text-cyan-3 + color: $cyan-3 !important + +.text-cyan-4 + color: $cyan-4 !important + +.text-cyan-5 + color: $cyan-5 !important + +.text-cyan-6 + color: $cyan-6 !important + +.text-cyan-7 + color: $cyan-7 !important + +.text-cyan-8 + color: $cyan-8 !important + +.text-cyan-9 + color: $cyan-9 !important + +.text-cyan-10 + color: $cyan-10 !important + +.text-cyan-11 + color: $cyan-11 !important + +.text-cyan-12 + color: $cyan-12 !important + +.text-cyan-13 + color: $cyan-13 !important + +.text-cyan-14 + color: $cyan-14 !important + +.text-teal + color: $teal !important + +.text-teal-1 + color: $teal-1 !important + +.text-teal-2 + color: $teal-2 !important + +.text-teal-3 + color: $teal-3 !important + +.text-teal-4 + color: $teal-4 !important + +.text-teal-5 + color: $teal-5 !important + +.text-teal-6 + color: $teal-6 !important + +.text-teal-7 + color: $teal-7 !important + +.text-teal-8 + color: $teal-8 !important + +.text-teal-9 + color: $teal-9 !important + +.text-teal-10 + color: $teal-10 !important + +.text-teal-11 + color: $teal-11 !important + +.text-teal-12 + color: $teal-12 !important + +.text-teal-13 + color: $teal-13 !important + +.text-teal-14 + color: $teal-14 !important + +.text-green + color: $green !important + +.text-green-1 + color: $green-1 !important + +.text-green-2 + color: $green-2 !important + +.text-green-3 + color: $green-3 !important + +.text-green-4 + color: $green-4 !important + +.text-green-5 + color: $green-5 !important + +.text-green-6 + color: $green-6 !important + +.text-green-7 + color: $green-7 !important + +.text-green-8 + color: $green-8 !important + +.text-green-9 + color: $green-9 !important + +.text-green-10 + color: $green-10 !important + +.text-green-11 + color: $green-11 !important + +.text-green-12 + color: $green-12 !important + +.text-green-13 + color: $green-13 !important + +.text-green-14 + color: $green-14 !important + +.text-light-green + color: $light-green !important + +.text-light-green-1 + color: $light-green-1 !important + +.text-light-green-2 + color: $light-green-2 !important + +.text-light-green-3 + color: $light-green-3 !important + +.text-light-green-4 + color: $light-green-4 !important + +.text-light-green-5 + color: $light-green-5 !important + +.text-light-green-6 + color: $light-green-6 !important + +.text-light-green-7 + color: $light-green-7 !important + +.text-light-green-8 + color: $light-green-8 !important + +.text-light-green-9 + color: $light-green-9 !important + +.text-light-green-10 + color: $light-green-10 !important + +.text-light-green-11 + color: $light-green-11 !important + +.text-light-green-12 + color: $light-green-12 !important + +.text-light-green-13 + color: $light-green-13 !important + +.text-light-green-14 + color: $light-green-14 !important + +.text-lime + color: $lime !important + +.text-lime-1 + color: $lime-1 !important + +.text-lime-2 + color: $lime-2 !important + +.text-lime-3 + color: $lime-3 !important + +.text-lime-4 + color: $lime-4 !important + +.text-lime-5 + color: $lime-5 !important + +.text-lime-6 + color: $lime-6 !important + +.text-lime-7 + color: $lime-7 !important + +.text-lime-8 + color: $lime-8 !important + +.text-lime-9 + color: $lime-9 !important + +.text-lime-10 + color: $lime-10 !important + +.text-lime-11 + color: $lime-11 !important + +.text-lime-12 + color: $lime-12 !important + +.text-lime-13 + color: $lime-13 !important + +.text-lime-14 + color: $lime-14 !important + +.text-yellow + color: $yellow !important + +.text-yellow-1 + color: $yellow-1 !important + +.text-yellow-2 + color: $yellow-2 !important + +.text-yellow-3 + color: $yellow-3 !important + +.text-yellow-4 + color: $yellow-4 !important + +.text-yellow-5 + color: $yellow-5 !important + +.text-yellow-6 + color: $yellow-6 !important + +.text-yellow-7 + color: $yellow-7 !important + +.text-yellow-8 + color: $yellow-8 !important + +.text-yellow-9 + color: $yellow-9 !important + +.text-yellow-10 + color: $yellow-10 !important + +.text-yellow-11 + color: $yellow-11 !important + +.text-yellow-12 + color: $yellow-12 !important + +.text-yellow-13 + color: $yellow-13 !important + +.text-yellow-14 + color: $yellow-14 !important + +.text-amber + color: $amber !important + +.text-amber-1 + color: $amber-1 !important + +.text-amber-2 + color: $amber-2 !important + +.text-amber-3 + color: $amber-3 !important + +.text-amber-4 + color: $amber-4 !important + +.text-amber-5 + color: $amber-5 !important + +.text-amber-6 + color: $amber-6 !important + +.text-amber-7 + color: $amber-7 !important + +.text-amber-8 + color: $amber-8 !important + +.text-amber-9 + color: $amber-9 !important + +.text-amber-10 + color: $amber-10 !important + +.text-amber-11 + color: $amber-11 !important + +.text-amber-12 + color: $amber-12 !important + +.text-amber-13 + color: $amber-13 !important + +.text-amber-14 + color: $amber-14 !important + +.text-orange + color: $orange !important + +.text-orange-1 + color: $orange-1 !important + +.text-orange-2 + color: $orange-2 !important + +.text-orange-3 + color: $orange-3 !important + +.text-orange-4 + color: $orange-4 !important + +.text-orange-5 + color: $orange-5 !important + +.text-orange-6 + color: $orange-6 !important + +.text-orange-7 + color: $orange-7 !important + +.text-orange-8 + color: $orange-8 !important + +.text-orange-9 + color: $orange-9 !important + +.text-orange-10 + color: $orange-10 !important + +.text-orange-11 + color: $orange-11 !important + +.text-orange-12 + color: $orange-12 !important + +.text-orange-13 + color: $orange-13 !important + +.text-orange-14 + color: $orange-14 !important + +.text-deep-orange + color: $deep-orange !important + +.text-deep-orange-1 + color: $deep-orange-1 !important + +.text-deep-orange-2 + color: $deep-orange-2 !important + +.text-deep-orange-3 + color: $deep-orange-3 !important + +.text-deep-orange-4 + color: $deep-orange-4 !important + +.text-deep-orange-5 + color: $deep-orange-5 !important + +.text-deep-orange-6 + color: $deep-orange-6 !important + +.text-deep-orange-7 + color: $deep-orange-7 !important + +.text-deep-orange-8 + color: $deep-orange-8 !important + +.text-deep-orange-9 + color: $deep-orange-9 !important + +.text-deep-orange-10 + color: $deep-orange-10 !important + +.text-deep-orange-11 + color: $deep-orange-11 !important + +.text-deep-orange-12 + color: $deep-orange-12 !important + +.text-deep-orange-13 + color: $deep-orange-13 !important + +.text-deep-orange-14 + color: $deep-orange-14 !important + +.text-brown + color: $brown !important + +.text-brown-1 + color: $brown-1 !important + +.text-brown-2 + color: $brown-2 !important + +.text-brown-3 + color: $brown-3 !important + +.text-brown-4 + color: $brown-4 !important + +.text-brown-5 + color: $brown-5 !important + +.text-brown-6 + color: $brown-6 !important + +.text-brown-7 + color: $brown-7 !important + +.text-brown-8 + color: $brown-8 !important + +.text-brown-9 + color: $brown-9 !important + +.text-brown-10 + color: $brown-10 !important + +.text-brown-11 + color: $brown-11 !important + +.text-brown-12 + color: $brown-12 !important + +.text-brown-13 + color: $brown-13 !important + +.text-brown-14 + color: $brown-14 !important + +.text-grey + color: $grey !important + +.text-grey-1 + color: $grey-1 !important + +.text-grey-2 + color: $grey-2 !important + +.text-grey-3 + color: $grey-3 !important + +.text-grey-4 + color: $grey-4 !important + +.text-grey-5 + color: $grey-5 !important + +.text-grey-6 + color: $grey-6 !important + +.text-grey-7 + color: $grey-7 !important + +.text-grey-8 + color: $grey-8 !important + +.text-grey-9 + color: $grey-9 !important + +.text-grey-10 + color: $grey-10 !important + +.text-grey-11 + color: $grey-11 !important + +.text-grey-12 + color: $grey-12 !important + +.text-grey-13 + color: $grey-13 !important + +.text-grey-14 + color: $grey-14 !important + +.text-blue-grey + color: $blue-grey !important + +.text-blue-grey-1 + color: $blue-grey-1 !important + +.text-blue-grey-2 + color: $blue-grey-2 !important + +.text-blue-grey-3 + color: $blue-grey-3 !important + +.text-blue-grey-4 + color: $blue-grey-4 !important + +.text-blue-grey-5 + color: $blue-grey-5 !important + +.text-blue-grey-6 + color: $blue-grey-6 !important + +.text-blue-grey-7 + color: $blue-grey-7 !important + +.text-blue-grey-8 + color: $blue-grey-8 !important + +.text-blue-grey-9 + color: $blue-grey-9 !important + +.text-blue-grey-10 + color: $blue-grey-10 !important + +.text-blue-grey-11 + color: $blue-grey-11 !important + +.text-blue-grey-12 + color: $blue-grey-12 !important + +.text-blue-grey-13 + color: $blue-grey-13 !important + +.text-blue-grey-14 + color: $blue-grey-14 !important + + +.bg-red + background: $red !important + +.bg-red-1 + background: $red-1 !important + +.bg-red-2 + background: $red-2 !important + +.bg-red-3 + background: $red-3 !important + +.bg-red-4 + background: $red-4 !important + +.bg-red-5 + background: $red-5 !important + +.bg-red-6 + background: $red-6 !important + +.bg-red-7 + background: $red-7 !important + +.bg-red-8 + background: $red-8 !important + +.bg-red-9 + background: $red-9 !important + +.bg-red-10 + background: $red-10 !important + +.bg-red-11 + background: $red-11 !important + +.bg-red-12 + background: $red-12 !important + +.bg-red-13 + background: $red-13 !important + +.bg-red-14 + background: $red-14 !important + +.bg-pink + background: $pink !important + +.bg-pink-1 + background: $pink-1 !important + +.bg-pink-2 + background: $pink-2 !important + +.bg-pink-3 + background: $pink-3 !important + +.bg-pink-4 + background: $pink-4 !important + +.bg-pink-5 + background: $pink-5 !important + +.bg-pink-6 + background: $pink-6 !important + +.bg-pink-7 + background: $pink-7 !important + +.bg-pink-8 + background: $pink-8 !important + +.bg-pink-9 + background: $pink-9 !important + +.bg-pink-10 + background: $pink-10 !important + +.bg-pink-11 + background: $pink-11 !important + +.bg-pink-12 + background: $pink-12 !important + +.bg-pink-13 + background: $pink-13 !important + +.bg-pink-14 + background: $pink-14 !important + +.bg-purple + background: $purple !important + +.bg-purple-1 + background: $purple-1 !important + +.bg-purple-2 + background: $purple-2 !important + +.bg-purple-3 + background: $purple-3 !important + +.bg-purple-4 + background: $purple-4 !important + +.bg-purple-5 + background: $purple-5 !important + +.bg-purple-6 + background: $purple-6 !important + +.bg-purple-7 + background: $purple-7 !important + +.bg-purple-8 + background: $purple-8 !important + +.bg-purple-9 + background: $purple-9 !important + +.bg-purple-10 + background: $purple-10 !important + +.bg-purple-11 + background: $purple-11 !important + +.bg-purple-12 + background: $purple-12 !important + +.bg-purple-13 + background: $purple-13 !important + +.bg-purple-14 + background: $purple-14 !important + +.bg-deep-purple + background: $deep-purple !important + +.bg-deep-purple-1 + background: $deep-purple-1 !important + +.bg-deep-purple-2 + background: $deep-purple-2 !important + +.bg-deep-purple-3 + background: $deep-purple-3 !important + +.bg-deep-purple-4 + background: $deep-purple-4 !important + +.bg-deep-purple-5 + background: $deep-purple-5 !important + +.bg-deep-purple-6 + background: $deep-purple-6 !important + +.bg-deep-purple-7 + background: $deep-purple-7 !important + +.bg-deep-purple-8 + background: $deep-purple-8 !important + +.bg-deep-purple-9 + background: $deep-purple-9 !important + +.bg-deep-purple-10 + background: $deep-purple-10 !important + +.bg-deep-purple-11 + background: $deep-purple-11 !important + +.bg-deep-purple-12 + background: $deep-purple-12 !important + +.bg-deep-purple-13 + background: $deep-purple-13 !important + +.bg-deep-purple-14 + background: $deep-purple-14 !important + +.bg-indigo + background: $indigo !important + +.bg-indigo-1 + background: $indigo-1 !important + +.bg-indigo-2 + background: $indigo-2 !important + +.bg-indigo-3 + background: $indigo-3 !important + +.bg-indigo-4 + background: $indigo-4 !important + +.bg-indigo-5 + background: $indigo-5 !important + +.bg-indigo-6 + background: $indigo-6 !important + +.bg-indigo-7 + background: $indigo-7 !important + +.bg-indigo-8 + background: $indigo-8 !important + +.bg-indigo-9 + background: $indigo-9 !important + +.bg-indigo-10 + background: $indigo-10 !important + +.bg-indigo-11 + background: $indigo-11 !important + +.bg-indigo-12 + background: $indigo-12 !important + +.bg-indigo-13 + background: $indigo-13 !important + +.bg-indigo-14 + background: $indigo-14 !important + +.bg-blue + background: $blue !important + +.bg-blue-1 + background: $blue-1 !important + +.bg-blue-2 + background: $blue-2 !important + +.bg-blue-3 + background: $blue-3 !important + +.bg-blue-4 + background: $blue-4 !important + +.bg-blue-5 + background: $blue-5 !important + +.bg-blue-6 + background: $blue-6 !important + +.bg-blue-7 + background: $blue-7 !important + +.bg-blue-8 + background: $blue-8 !important + +.bg-blue-9 + background: $blue-9 !important + +.bg-blue-10 + background: $blue-10 !important + +.bg-blue-11 + background: $blue-11 !important + +.bg-blue-12 + background: $blue-12 !important + +.bg-blue-13 + background: $blue-13 !important + +.bg-blue-14 + background: $blue-14 !important + +.bg-light-blue + background: $light-blue !important + +.bg-light-blue-1 + background: $light-blue-1 !important + +.bg-light-blue-2 + background: $light-blue-2 !important + +.bg-light-blue-3 + background: $light-blue-3 !important + +.bg-light-blue-4 + background: $light-blue-4 !important + +.bg-light-blue-5 + background: $light-blue-5 !important + +.bg-light-blue-6 + background: $light-blue-6 !important + +.bg-light-blue-7 + background: $light-blue-7 !important + +.bg-light-blue-8 + background: $light-blue-8 !important + +.bg-light-blue-9 + background: $light-blue-9 !important + +.bg-light-blue-10 + background: $light-blue-10 !important + +.bg-light-blue-11 + background: $light-blue-11 !important + +.bg-light-blue-12 + background: $light-blue-12 !important + +.bg-light-blue-13 + background: $light-blue-13 !important + +.bg-light-blue-14 + background: $light-blue-14 !important + +.bg-cyan + background: $cyan !important + +.bg-cyan-1 + background: $cyan-1 !important + +.bg-cyan-2 + background: $cyan-2 !important + +.bg-cyan-3 + background: $cyan-3 !important + +.bg-cyan-4 + background: $cyan-4 !important + +.bg-cyan-5 + background: $cyan-5 !important + +.bg-cyan-6 + background: $cyan-6 !important + +.bg-cyan-7 + background: $cyan-7 !important + +.bg-cyan-8 + background: $cyan-8 !important + +.bg-cyan-9 + background: $cyan-9 !important + +.bg-cyan-10 + background: $cyan-10 !important + +.bg-cyan-11 + background: $cyan-11 !important + +.bg-cyan-12 + background: $cyan-12 !important + +.bg-cyan-13 + background: $cyan-13 !important + +.bg-cyan-14 + background: $cyan-14 !important + +.bg-teal + background: $teal !important + +.bg-teal-1 + background: $teal-1 !important + +.bg-teal-2 + background: $teal-2 !important + +.bg-teal-3 + background: $teal-3 !important + +.bg-teal-4 + background: $teal-4 !important + +.bg-teal-5 + background: $teal-5 !important + +.bg-teal-6 + background: $teal-6 !important + +.bg-teal-7 + background: $teal-7 !important + +.bg-teal-8 + background: $teal-8 !important + +.bg-teal-9 + background: $teal-9 !important + +.bg-teal-10 + background: $teal-10 !important + +.bg-teal-11 + background: $teal-11 !important + +.bg-teal-12 + background: $teal-12 !important + +.bg-teal-13 + background: $teal-13 !important + +.bg-teal-14 + background: $teal-14 !important + +.bg-green + background: $green !important + +.bg-green-1 + background: $green-1 !important + +.bg-green-2 + background: $green-2 !important + +.bg-green-3 + background: $green-3 !important + +.bg-green-4 + background: $green-4 !important + +.bg-green-5 + background: $green-5 !important + +.bg-green-6 + background: $green-6 !important + +.bg-green-7 + background: $green-7 !important + +.bg-green-8 + background: $green-8 !important + +.bg-green-9 + background: $green-9 !important + +.bg-green-10 + background: $green-10 !important + +.bg-green-11 + background: $green-11 !important + +.bg-green-12 + background: $green-12 !important + +.bg-green-13 + background: $green-13 !important + +.bg-green-14 + background: $green-14 !important + +.bg-light-green + background: $light-green !important + +.bg-light-green-1 + background: $light-green-1 !important + +.bg-light-green-2 + background: $light-green-2 !important + +.bg-light-green-3 + background: $light-green-3 !important + +.bg-light-green-4 + background: $light-green-4 !important + +.bg-light-green-5 + background: $light-green-5 !important + +.bg-light-green-6 + background: $light-green-6 !important + +.bg-light-green-7 + background: $light-green-7 !important + +.bg-light-green-8 + background: $light-green-8 !important + +.bg-light-green-9 + background: $light-green-9 !important + +.bg-light-green-10 + background: $light-green-10 !important + +.bg-light-green-11 + background: $light-green-11 !important + +.bg-light-green-12 + background: $light-green-12 !important + +.bg-light-green-13 + background: $light-green-13 !important + +.bg-light-green-14 + background: $light-green-14 !important + +.bg-lime + background: $lime !important + +.bg-lime-1 + background: $lime-1 !important + +.bg-lime-2 + background: $lime-2 !important + +.bg-lime-3 + background: $lime-3 !important + +.bg-lime-4 + background: $lime-4 !important + +.bg-lime-5 + background: $lime-5 !important + +.bg-lime-6 + background: $lime-6 !important + +.bg-lime-7 + background: $lime-7 !important + +.bg-lime-8 + background: $lime-8 !important + +.bg-lime-9 + background: $lime-9 !important + +.bg-lime-10 + background: $lime-10 !important + +.bg-lime-11 + background: $lime-11 !important + +.bg-lime-12 + background: $lime-12 !important + +.bg-lime-13 + background: $lime-13 !important + +.bg-lime-14 + background: $lime-14 !important + +.bg-yellow + background: $yellow !important + +.bg-yellow-1 + background: $yellow-1 !important + +.bg-yellow-2 + background: $yellow-2 !important + +.bg-yellow-3 + background: $yellow-3 !important + +.bg-yellow-4 + background: $yellow-4 !important + +.bg-yellow-5 + background: $yellow-5 !important + +.bg-yellow-6 + background: $yellow-6 !important + +.bg-yellow-7 + background: $yellow-7 !important + +.bg-yellow-8 + background: $yellow-8 !important + +.bg-yellow-9 + background: $yellow-9 !important + +.bg-yellow-10 + background: $yellow-10 !important + +.bg-yellow-11 + background: $yellow-11 !important + +.bg-yellow-12 + background: $yellow-12 !important + +.bg-yellow-13 + background: $yellow-13 !important + +.bg-yellow-14 + background: $yellow-14 !important + +.bg-amber + background: $amber !important + +.bg-amber-1 + background: $amber-1 !important + +.bg-amber-2 + background: $amber-2 !important + +.bg-amber-3 + background: $amber-3 !important + +.bg-amber-4 + background: $amber-4 !important + +.bg-amber-5 + background: $amber-5 !important + +.bg-amber-6 + background: $amber-6 !important + +.bg-amber-7 + background: $amber-7 !important + +.bg-amber-8 + background: $amber-8 !important + +.bg-amber-9 + background: $amber-9 !important + +.bg-amber-10 + background: $amber-10 !important + +.bg-amber-11 + background: $amber-11 !important + +.bg-amber-12 + background: $amber-12 !important + +.bg-amber-13 + background: $amber-13 !important + +.bg-amber-14 + background: $amber-14 !important + +.bg-orange + background: $orange !important + +.bg-orange-1 + background: $orange-1 !important + +.bg-orange-2 + background: $orange-2 !important + +.bg-orange-3 + background: $orange-3 !important + +.bg-orange-4 + background: $orange-4 !important + +.bg-orange-5 + background: $orange-5 !important + +.bg-orange-6 + background: $orange-6 !important + +.bg-orange-7 + background: $orange-7 !important + +.bg-orange-8 + background: $orange-8 !important + +.bg-orange-9 + background: $orange-9 !important + +.bg-orange-10 + background: $orange-10 !important + +.bg-orange-11 + background: $orange-11 !important + +.bg-orange-12 + background: $orange-12 !important + +.bg-orange-13 + background: $orange-13 !important + +.bg-orange-14 + background: $orange-14 !important + +.bg-deep-orange + background: $deep-orange !important + +.bg-deep-orange-1 + background: $deep-orange-1 !important + +.bg-deep-orange-2 + background: $deep-orange-2 !important + +.bg-deep-orange-3 + background: $deep-orange-3 !important + +.bg-deep-orange-4 + background: $deep-orange-4 !important + +.bg-deep-orange-5 + background: $deep-orange-5 !important + +.bg-deep-orange-6 + background: $deep-orange-6 !important + +.bg-deep-orange-7 + background: $deep-orange-7 !important + +.bg-deep-orange-8 + background: $deep-orange-8 !important + +.bg-deep-orange-9 + background: $deep-orange-9 !important + +.bg-deep-orange-10 + background: $deep-orange-10 !important + +.bg-deep-orange-11 + background: $deep-orange-11 !important + +.bg-deep-orange-12 + background: $deep-orange-12 !important + +.bg-deep-orange-13 + background: $deep-orange-13 !important + +.bg-deep-orange-14 + background: $deep-orange-14 !important + +.bg-brown + background: $brown !important + +.bg-brown-1 + background: $brown-1 !important + +.bg-brown-2 + background: $brown-2 !important + +.bg-brown-3 + background: $brown-3 !important + +.bg-brown-4 + background: $brown-4 !important + +.bg-brown-5 + background: $brown-5 !important + +.bg-brown-6 + background: $brown-6 !important + +.bg-brown-7 + background: $brown-7 !important + +.bg-brown-8 + background: $brown-8 !important + +.bg-brown-9 + background: $brown-9 !important + +.bg-brown-10 + background: $brown-10 !important + +.bg-brown-11 + background: $brown-11 !important + +.bg-brown-12 + background: $brown-12 !important + +.bg-brown-13 + background: $brown-13 !important + +.bg-brown-14 + background: $brown-14 !important + +.bg-grey + background: $grey !important + +.bg-grey-1 + background: $grey-1 !important + +.bg-grey-2 + background: $grey-2 !important + +.bg-grey-3 + background: $grey-3 !important + +.bg-grey-4 + background: $grey-4 !important + +.bg-grey-5 + background: $grey-5 !important + +.bg-grey-6 + background: $grey-6 !important + +.bg-grey-7 + background: $grey-7 !important + +.bg-grey-8 + background: $grey-8 !important + +.bg-grey-9 + background: $grey-9 !important + +.bg-grey-10 + background: $grey-10 !important + +.bg-grey-11 + background: $grey-11 !important + +.bg-grey-12 + background: $grey-12 !important + +.bg-grey-13 + background: $grey-13 !important + +.bg-grey-14 + background: $grey-14 !important + +.bg-blue-grey + background: $blue-grey !important + +.bg-blue-grey-1 + background: $blue-grey-1 !important + +.bg-blue-grey-2 + background: $blue-grey-2 !important + +.bg-blue-grey-3 + background: $blue-grey-3 !important + +.bg-blue-grey-4 + background: $blue-grey-4 !important + +.bg-blue-grey-5 + background: $blue-grey-5 !important + +.bg-blue-grey-6 + background: $blue-grey-6 !important + +.bg-blue-grey-7 + background: $blue-grey-7 !important + +.bg-blue-grey-8 + background: $blue-grey-8 !important + +.bg-blue-grey-9 + background: $blue-grey-9 !important + +.bg-blue-grey-10 + background: $blue-grey-10 !important + +.bg-blue-grey-11 + background: $blue-grey-11 !important + +.bg-blue-grey-12 + background: $blue-grey-12 !important + +.bg-blue-grey-13 + background: $blue-grey-13 !important + +.bg-blue-grey-14 + background: $blue-grey-14 !important diff --git a/src/css/core/dark.sass b/src/css/core/dark.sass new file mode 100644 index 00000000000..553588652b2 --- /dev/null +++ b/src/css/core/dark.sass @@ -0,0 +1,33 @@ +body.body--light, +body.body--dark-auto, +.q-light, +.q-dark-auto + color: $light-text + color: var(--q-color-light-text) + background: $light-page + background: var(--q-color-light-page) + +body.body--dark + color: $dark-text + color: var(--q-color-dark-text) + background: $dark-page + background: var(--q-color-dark-page) + +.q-dark + color: $dark-text + color: var(--q-color-dark-text) + background: $dark + background: var(--q-color-dark) + +@media (prefers-color-scheme: dark) + body.body--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + background: $dark-page + background: var(--q-color-dark-page) + + .q-dark-auto + color: $dark-text + color: var(--q-color-dark-text) + background: $dark + background: var(--q-color-dark) diff --git a/src/css/core/dark.styl b/src/css/core/dark.styl new file mode 100644 index 00000000000..553588652b2 --- /dev/null +++ b/src/css/core/dark.styl @@ -0,0 +1,33 @@ +body.body--light, +body.body--dark-auto, +.q-light, +.q-dark-auto + color: $light-text + color: var(--q-color-light-text) + background: $light-page + background: var(--q-color-light-page) + +body.body--dark + color: $dark-text + color: var(--q-color-dark-text) + background: $dark-page + background: var(--q-color-dark-page) + +.q-dark + color: $dark-text + color: var(--q-color-dark-text) + background: $dark + background: var(--q-color-dark) + +@media (prefers-color-scheme: dark) + body.body--dark-auto + color: $dark-text + color: var(--q-color-dark-text) + background: $dark-page + background: var(--q-color-dark-page) + + .q-dark-auto + color: $dark-text + color: var(--q-color-dark-text) + background: $dark + background: var(--q-color-dark) diff --git a/src/css/core/elevation.sass b/src/css/core/elevation.sass new file mode 100644 index 00000000000..f97e2b390f6 --- /dev/null +++ b/src/css/core/elevation.sass @@ -0,0 +1,27 @@ +.shadow-transition + transition: $shadow-transition !important + +@for $z from 1 through 24 + .shadow-#{$z} + box-shadow: nth($shadows, $z) + .shadow-up-#{$z} + box-shadow: nth($shadows-up, $z) + +.no-shadow, .shadow-0 + box-shadow: none !important +.inset-shadow + box-shadow: $inset-shadow !important +.inset-shadow-down + box-shadow: $inset-shadow-down !important + +.z-marginals + z-index: $z-marginals + +.z-notify + z-index: $z-notify + +.z-fullscreen + z-index: $z-fullscreen + +.z-inherit + z-index: inherit !important diff --git a/src/css/core/elevation.styl b/src/css/core/elevation.styl new file mode 100644 index 00000000000..2847faccae9 --- /dev/null +++ b/src/css/core/elevation.styl @@ -0,0 +1,27 @@ +.shadow-transition + transition: $shadow-transition !important + +for $z in 1..24 + .shadow-{$z} + box-shadow: $shadow-+$z + .shadow-up-{$z} + box-shadow: $shadow-up-+$z + +.no-shadow, .shadow-0 + box-shadow: none !important +.inset-shadow + box-shadow: $inset-shadow !important +.inset-shadow-down + box-shadow: $inset-shadow-down !important + +.z-marginals + z-index: $z-marginals + +.z-notify + z-index: $z-notify + +.z-fullscreen + z-index: $z-fullscreen + +.z-inherit + z-index: inherit !important diff --git a/src/css/core/flex.sass b/src/css/core/flex.sass new file mode 100644 index 00000000000..edf524cc796 --- /dev/null +++ b/src/css/core/flex.sass @@ -0,0 +1,158 @@ +@import '../helpers/string.sass' + +@mixin fg($name, $size) + $noProcNotZero: $size > 0 + + @media (min-width: $size) + #{str-fe('.col', $name, $noProcNotZero)} + &, &-auto, &-grow, &-shrink + .row > &, .flex > & + width: auto + min-width: 0 + max-width: 100% + .column > &, .flex > & + height: auto + min-height: 0 + max-height: 100% + & + flex: 10000 1 0% + &-auto + flex: 0 0 auto + &-grow + flex: 1 0 auto + &-shrink + flex: 0 1 auto + + @for $i from 0 through $flex-cols + $ic: quote('' + $i) + #{str-fe('.col-', $name, $noProcNotZero, $ic)} + @extend .col#{$name}-auto + .row + #{str-fe('> .col-', $name, $noProcNotZero, $ic)} + height: auto + width: toFixed(percentage($i / $flex-cols), 10000) + @if $i != 0 or $name != '' + #{str-fe('> .offset-', $name, $noProcNotZero, $ic)} + margin-left: toFixed(percentage($i / $flex-cols), 10000) + .column + #{str-fe('> .col-', $name, $noProcNotZero, $ic)} + height: toFixed(percentage($i / $flex-cols), 10000) + width: auto + @if $size == 0 and $i == $flex-cols + .row > .col-all + height: auto + flex: 0 0 100% + +.row, .column, .flex + display: flex + flex-wrap: wrap + &.inline + display: inline-flex + +.row.reverse + flex-direction: row-reverse + +.column + flex-direction: column + &.reverse + flex-direction: column-reverse + +.wrap + flex-wrap: wrap +.no-wrap + flex-wrap: nowrap +.reverse-wrap + flex-wrap: wrap-reverse + +.order- + &first + order: -10000 + &last + order: 10000 + &none + order: 0 + +.justify- + &start + justify-content: flex-start + &end + justify-content: flex-end + ¢er + justify-content: center + &between + justify-content: space-between + &around + justify-content: space-around + &evenly + justify-content: space-evenly + +.items- + &start + align-items: flex-start + &end + align-items: flex-end + ¢er + align-items: center + &baseline + align-items: baseline + &stretch + align-items: stretch + +.content- + &start + align-content: flex-start + &end + align-content: flex-end + ¢er + align-content: center + &stretch + align-content: stretch + &between + align-content: space-between + &around + align-content: space-around + +.self- + &start + align-self: flex-start + &end + align-self: flex-end + ¢er + align-self: center + &baseline + align-self: baseline + &stretch + align-self: stretch + +.flex-center + @extend .items-center + @extend .justify-center + +@each $name, $size in $flex-gutter + .q-gutter + &-x-#{$name} + margin-left: -$size + > * + margin-left: $size + &-y-#{$name} + margin-top: -$size + > * + margin-top: $size + &-#{$name} + @extend .q-gutter-x-#{$name} + @extend .q-gutter-y-#{$name} + .q-col-gutter + &-x-#{$name} + margin-left: -$size + > * + padding-left: $size + &-y-#{$name} + margin-top: -$size + > * + padding-top: $size + &-#{$name} + @extend .q-col-gutter-x-#{$name} + @extend .q-col-gutter-y-#{$name} + +@each $name, $size in $sizes + @include fg("-" + $name, $size) diff --git a/src/css/core/flex.styl b/src/css/core/flex.styl new file mode 100644 index 00000000000..7acddfab209 --- /dev/null +++ b/src/css/core/flex.styl @@ -0,0 +1,163 @@ +str-fr(selector, name, i = '') + unquote(replace(unquote(''), unquote(i), replace(unquote(''), unquote(name), unquote(selector)))) + +str-fe(selector, name, noProc, i = '') + if noProc + return str-fr(selector, name, i) + return unquote(join(',', str-fr(selector, '', i) str-fr(selector, name, i))) + +fg($name, $size) + $noProcNotZero = ($size > 0) + + @media (min-width $size) + {str-fe('.col', $name, $noProcNotZero)} + &, &-auto, &-grow, &-shrink + .row > &, .flex > & + width: auto + min-width: 0 + max-width: 100% + .column > &, .flex > & + height: auto + min-height: 0 + max-height: 100% + & + flex: 10000 1 0% + &-auto + flex: 0 0 auto + &-grow + flex: 1 0 auto + &-shrink + flex: 0 1 auto + + for $i in (0..$flex-cols) + $ic = s('%s', $i) + {str-fe('.col-', $name, $noProcNotZero, $ic)} + @extends .col{$name}-auto + .row + {str-fe('> .col-', $name, $noProcNotZero, $ic)} + height: auto + width: (round($i / $flex-cols * 100, 4))% + if $i != 0 || $name != '' + {str-fe('> .offset-', $name, $noProcNotZero, $ic)} + margin-left: (round($i / $flex-cols * 100, 4))% + .column + {str-fe('> .col-', $name, $noProcNotZero, $ic)} + height: (round($i / $flex-cols * 100, 4))% + width: auto + if $size == 0 + if $i == $flex-cols + .row > .col-all + height: auto + flex: 0 0 100% + +.row, .column, .flex + display: flex + flex-wrap: wrap + &.inline + display: inline-flex + +.row.reverse + flex-direction: row-reverse + +.column + flex-direction: column + &.reverse + flex-direction: column-reverse + +.wrap + flex-wrap: wrap +.no-wrap + flex-wrap: nowrap +.reverse-wrap + flex-wrap: wrap-reverse + +.order- + &first + order: -10000 + &last + order: 10000 + &none + order: 0 + +.justify- + &start + justify-content: flex-start + &end + justify-content: flex-end + ¢er + justify-content: center + &between + justify-content: space-between + &around + justify-content: space-around + &evenly + justify-content: space-evenly + +.items- + &start + align-items: flex-start + &end + align-items: flex-end + ¢er + align-items: center + &baseline + align-items: baseline + &stretch + align-items: stretch + +.content- + &start + align-content: flex-start + &end + align-content: flex-end + ¢er + align-content: center + &stretch + align-content: stretch + &between + align-content: space-between + &around + align-content: space-around + +.self- + &start + align-self: flex-start + &end + align-self: flex-end + ¢er + align-self: center + &baseline + align-self: baseline + &stretch + align-self: stretch + +.flex-center + @extends .items-center + @extends .justify-center + +for $name, $size in $flex-gutter + .q-gutter + &-x-{$name} + margin-left: (- $size) + > * + margin-left: $size + &-y-{$name} + margin-top: (- $size) + > * + margin-top: $size + &-{$name} + @extends .q-gutter-x-{$name}, .q-gutter-y-{$name} + .q-col-gutter + &-x-{$name} + margin-left: (- $size) + > * + padding-left: ($size) + &-y-{$name} + margin-top: (- $size) + > * + padding-top: $size + &-{$name} + @extends .q-col-gutter-x-{$name}, .q-col-gutter-y-{$name} + +for $name, $size in $sizes + fg(s('-%s', unquote($name)), $size) diff --git a/src/css/core/helpers.sass b/src/css/core/helpers.sass new file mode 100644 index 00000000000..82721b270c2 --- /dev/null +++ b/src/css/core/helpers.sass @@ -0,0 +1,102 @@ +.rounded-borders + border-radius: $generic-border-radius +.border-radius-inherit + border-radius: inherit + +.no-transition + transition: none !important + +.transition-0 + transition: 0s !important + +.glossy + background-image: linear-gradient(to bottom, rgba(#fff, .3), rgba(#fff, 0) 50%, rgba(#000, .12) 51%, rgba(#000, .04)) !important + +.q-placeholder + &::-webkit-input-placeholder + color: inherit + opacity: .7 + &::-moz-placeholder + color: inherit + opacity: .7 + &:-ms-input-placeholder + color: inherit !important + opacity: .7 !important + &::-ms-input-placeholder + color: inherit + opacity: .7 + &::placeholder + color: inherit + opacity: .7 + +/* body */ +.q-body--fullscreen-mixin + position: fixed !important + +.q-body--prevent-scroll + width: 100vw + height: 100vh + overflow-x: hidden + contain: layout size + contain: layout size style + overscroll-behavior: none + -webkit-overflow-scrolling: none + + body + position: relative !important + overflow: hidden + + .q-drawer__backdrop + width: 100vw + max-height: none + + &[dir=rtl] + .q-body--scroll-locked + transform: translateX(var(--q-scroll-lock-left)) + +.q-portal__container + contain: size + contain: size style + +.q-portal__clone + position: fixed !important + transform: none !important + transition: none !important + flex-shrink: 0 !important + opacity: 0 !important + z-index: -1 !important + +.q-focus__clone + * + position: fixed !important + transition: none !important + opacity: 0 !important + pointer-events: none !important + +body.native-mobile + .q-focus__clone + * + top: 50vh + +.q-no-input-spinner + -moz-appearance: textfield !important + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button + -webkit-appearance: none + margin: 0 + +.q-link + outline: 0 + text-decoration: none + + &--focusable:focus-visible + text-decoration: underline dashed currentColor 1px + +body.electron + .q-electron-drag + -webkit-user-select: none + -webkit-app-region: drag + .q-electron-drag .q-btn-item, .q-electron-drag--exception + -webkit-app-region: no-drag + +img.responsive + max-width: 100% + height: auto diff --git a/src/css/core/helpers.styl b/src/css/core/helpers.styl new file mode 100644 index 00000000000..82721b270c2 --- /dev/null +++ b/src/css/core/helpers.styl @@ -0,0 +1,102 @@ +.rounded-borders + border-radius: $generic-border-radius +.border-radius-inherit + border-radius: inherit + +.no-transition + transition: none !important + +.transition-0 + transition: 0s !important + +.glossy + background-image: linear-gradient(to bottom, rgba(#fff, .3), rgba(#fff, 0) 50%, rgba(#000, .12) 51%, rgba(#000, .04)) !important + +.q-placeholder + &::-webkit-input-placeholder + color: inherit + opacity: .7 + &::-moz-placeholder + color: inherit + opacity: .7 + &:-ms-input-placeholder + color: inherit !important + opacity: .7 !important + &::-ms-input-placeholder + color: inherit + opacity: .7 + &::placeholder + color: inherit + opacity: .7 + +/* body */ +.q-body--fullscreen-mixin + position: fixed !important + +.q-body--prevent-scroll + width: 100vw + height: 100vh + overflow-x: hidden + contain: layout size + contain: layout size style + overscroll-behavior: none + -webkit-overflow-scrolling: none + + body + position: relative !important + overflow: hidden + + .q-drawer__backdrop + width: 100vw + max-height: none + + &[dir=rtl] + .q-body--scroll-locked + transform: translateX(var(--q-scroll-lock-left)) + +.q-portal__container + contain: size + contain: size style + +.q-portal__clone + position: fixed !important + transform: none !important + transition: none !important + flex-shrink: 0 !important + opacity: 0 !important + z-index: -1 !important + +.q-focus__clone + * + position: fixed !important + transition: none !important + opacity: 0 !important + pointer-events: none !important + +body.native-mobile + .q-focus__clone + * + top: 50vh + +.q-no-input-spinner + -moz-appearance: textfield !important + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button + -webkit-appearance: none + margin: 0 + +.q-link + outline: 0 + text-decoration: none + + &--focusable:focus-visible + text-decoration: underline dashed currentColor 1px + +body.electron + .q-electron-drag + -webkit-user-select: none + -webkit-app-region: drag + .q-electron-drag .q-btn-item, .q-electron-drag--exception + -webkit-app-region: no-drag + +img.responsive + max-width: 100% + height: auto diff --git a/src/css/core/mouse.sass b/src/css/core/mouse.sass new file mode 100644 index 00000000000..25262529884 --- /dev/null +++ b/src/css/core/mouse.sass @@ -0,0 +1,41 @@ +.non-selectable + user-select: none !important + +.scroll + overflow: auto +.scroll, .scroll-x, .scroll-y + -webkit-overflow-scrolling: touch + will-change: scroll-position +.scroll-x + overflow-x: auto +.scroll-y + overflow-y: auto +.no-scroll + overflow: hidden !important + +.no-pointer-events, +.no-pointer-events--children, +.no-pointer-events--children * + pointer-events: none !important +.all-pointer-events + pointer-events: all !important + +.cursor + &-pointer + cursor: pointer !important + &-not-allowed + cursor: not-allowed !important + &-inherit + cursor: inherit !important + &-none + cursor: none !important + +[aria-busy='true'] + cursor: progress + +[aria-controls], +[role='button'] + cursor: pointer + +[aria-disabled] + cursor: default diff --git a/src/css/core/mouse.styl b/src/css/core/mouse.styl new file mode 100644 index 00000000000..25262529884 --- /dev/null +++ b/src/css/core/mouse.styl @@ -0,0 +1,41 @@ +.non-selectable + user-select: none !important + +.scroll + overflow: auto +.scroll, .scroll-x, .scroll-y + -webkit-overflow-scrolling: touch + will-change: scroll-position +.scroll-x + overflow-x: auto +.scroll-y + overflow-y: auto +.no-scroll + overflow: hidden !important + +.no-pointer-events, +.no-pointer-events--children, +.no-pointer-events--children * + pointer-events: none !important +.all-pointer-events + pointer-events: all !important + +.cursor + &-pointer + cursor: pointer !important + &-not-allowed + cursor: not-allowed !important + &-inherit + cursor: inherit !important + &-none + cursor: none !important + +[aria-busy='true'] + cursor: progress + +[aria-controls], +[role='button'] + cursor: pointer + +[aria-disabled] + cursor: default diff --git a/src/css/core/orientation.sass b/src/css/core/orientation.sass new file mode 100644 index 00000000000..3652669715a --- /dev/null +++ b/src/css/core/orientation.sass @@ -0,0 +1,21 @@ +.rotate-45 + transform: rotate(45deg) #{"/* rtl:ignore */"} +.rotate-90 + transform: rotate(90deg) #{"/* rtl:ignore */"} +.rotate-135 + transform: rotate(135deg) #{"/* rtl:ignore */"} +.rotate-180 + transform: rotate(180deg) #{"/* rtl:ignore */"} +/* deprecated: to be removed */ +.rotate-205 + transform: rotate(205deg) #{"/* rtl:ignore */"} +.rotate-225 + transform: rotate(225deg) #{"/* rtl:ignore */"} +.rotate-270 + transform: rotate(270deg) #{"/* rtl:ignore */"} +.rotate-315 + transform: rotate(315deg) #{"/* rtl:ignore */"} +.flip-horizontal + transform: scaleX(-1) +.flip-vertical + transform: scaleY(-1) diff --git a/src/css/core/orientation.styl b/src/css/core/orientation.styl new file mode 100644 index 00000000000..2c95b1dc1be --- /dev/null +++ b/src/css/core/orientation.styl @@ -0,0 +1,21 @@ +.rotate-45 + transform: rotate(45deg) /* rtl:ignore */ +.rotate-90 + transform: rotate(90deg) /* rtl:ignore */ +.rotate-135 + transform: rotate(135deg) /* rtl:ignore */ +.rotate-180 + transform: rotate(180deg) /* rtl:ignore */ +/* deprecated: to be removed */ +.rotate-205 + transform: rotate(205deg) /* rtl:ignore */ +.rotate-225 + transform: rotate(225deg) /* rtl:ignore */ +.rotate-270 + transform: rotate(270deg) /* rtl:ignore */ +.rotate-315 + transform: rotate(315deg) /* rtl:ignore */ +.flip-horizontal + transform: scaleX(-1) +.flip-vertical + transform: scaleY(-1) diff --git a/src/css/core/positioning.sass b/src/css/core/positioning.sass new file mode 100644 index 00000000000..34ec844ceaf --- /dev/null +++ b/src/css/core/positioning.sass @@ -0,0 +1,99 @@ +.float-left + float: left +.float-right + float: right + +.relative-position + position: relative + +.fixed, +.fixed-full, +.fullscreen, +.fixed-center, +.fixed-bottom, +.fixed-left, +.fixed-right, +.fixed-top, +.fixed-top-left, +.fixed-top-right, +.fixed-bottom-left, +.fixed-bottom-right + position: fixed + +.absolute, +.absolute-full, +.absolute-center, +.absolute-bottom, +.absolute-left, +.absolute-right, +.absolute-top, +.absolute-top-left, +.absolute-top-right, +.absolute-bottom-left, +.absolute-bottom-right + position: absolute + +.fixed-top, .absolute-top + top: 0 + left: 0 + right: 0 +.fixed-right, .absolute-right + top: 0 + right: 0 + bottom: 0 +.fixed-bottom, .absolute-bottom + right: 0 + bottom: 0 + left: 0 +.fixed-left, .absolute-left + top: 0 + bottom: 0 + left: 0 + +.fixed-top-left, .absolute-top-left + top: 0 + left: 0 +.fixed-top-right, .absolute-top-right + top: 0 + right: 0 +.fixed-bottom-left, .absolute-bottom-left + bottom: 0 + left: 0 +.fixed-bottom-right, .absolute-bottom-right + bottom: 0 + right: 0 + +.fullscreen + z-index: $z-fullscreen + border-radius: 0 !important + max-width: 100vw + max-height: 100vh + +body.q-ios-padding .fullscreen + padding-top: $ios-statusbar-height !important + padding-top: env(safe-area-inset-top) !important + padding-bottom: env(safe-area-inset-bottom) !important + +.absolute-full, .fullscreen, .fixed-full + top: 0 + right: 0 + bottom: 0 + left: 0 + +.fixed-center, .absolute-center + top: 50% + left: 50% + transform: translate(-50%, -50%) + +.vertical- + &top + vertical-align: top !important + &middle + vertical-align: middle !important + &bottom + vertical-align: bottom !important + +.on-left + margin-right: 12px +.on-right + margin-left: 12px diff --git a/src/css/core/positioning.styl b/src/css/core/positioning.styl new file mode 100644 index 00000000000..34ec844ceaf --- /dev/null +++ b/src/css/core/positioning.styl @@ -0,0 +1,99 @@ +.float-left + float: left +.float-right + float: right + +.relative-position + position: relative + +.fixed, +.fixed-full, +.fullscreen, +.fixed-center, +.fixed-bottom, +.fixed-left, +.fixed-right, +.fixed-top, +.fixed-top-left, +.fixed-top-right, +.fixed-bottom-left, +.fixed-bottom-right + position: fixed + +.absolute, +.absolute-full, +.absolute-center, +.absolute-bottom, +.absolute-left, +.absolute-right, +.absolute-top, +.absolute-top-left, +.absolute-top-right, +.absolute-bottom-left, +.absolute-bottom-right + position: absolute + +.fixed-top, .absolute-top + top: 0 + left: 0 + right: 0 +.fixed-right, .absolute-right + top: 0 + right: 0 + bottom: 0 +.fixed-bottom, .absolute-bottom + right: 0 + bottom: 0 + left: 0 +.fixed-left, .absolute-left + top: 0 + bottom: 0 + left: 0 + +.fixed-top-left, .absolute-top-left + top: 0 + left: 0 +.fixed-top-right, .absolute-top-right + top: 0 + right: 0 +.fixed-bottom-left, .absolute-bottom-left + bottom: 0 + left: 0 +.fixed-bottom-right, .absolute-bottom-right + bottom: 0 + right: 0 + +.fullscreen + z-index: $z-fullscreen + border-radius: 0 !important + max-width: 100vw + max-height: 100vh + +body.q-ios-padding .fullscreen + padding-top: $ios-statusbar-height !important + padding-top: env(safe-area-inset-top) !important + padding-bottom: env(safe-area-inset-bottom) !important + +.absolute-full, .fullscreen, .fixed-full + top: 0 + right: 0 + bottom: 0 + left: 0 + +.fixed-center, .absolute-center + top: 50% + left: 50% + transform: translate(-50%, -50%) + +.vertical- + &top + vertical-align: top !important + &middle + vertical-align: middle !important + &bottom + vertical-align: bottom !important + +.on-left + margin-right: 12px +.on-right + margin-left: 12px diff --git a/src/css/core/size.sass b/src/css/core/size.sass new file mode 100644 index 00000000000..927d10fa8a1 --- /dev/null +++ b/src/css/core/size.sass @@ -0,0 +1,75 @@ +\:root + @each $name, $size in $sizes + #{"--q-size-"}#{$name}: #{$size} + +.fit + width: 100% !important + height: 100% !important +.full-height + height: 100% !important +.full-width + width: 100% !important + margin-left: 0 !important + margin-right: 0 !important + +.window-height + margin-top: 0 !important + margin-bottom: 0 !important + height: 100vh !important +.window-width + margin-left: 0 !important + margin-right: 0 !important + width: 100vw !important + +.block + display: block !important +.inline-block + display: inline-block !important + +@each $space, $value in $spaces + + .q-pa-#{$space} + padding: map-get($value, "y") map-get($value, "x") + .q-pl-#{$space} + padding-left: map-get($value, "x") + .q-pr-#{$space} + padding-right: map-get($value, "x") + .q-pt-#{$space} + padding-top: map-get($value, "y") + .q-pb-#{$space} + padding-bottom: map-get($value, "y") + .q-px-#{$space} + padding-left: map-get($value, "x") + padding-right: map-get($value, "x") + .q-py-#{$space} + padding-top: map-get($value, "y") + padding-bottom: map-get($value, "y") + + .q-ma-#{$space} + margin: map-get($value, "y") map-get($value, "x") + .q-ml-#{$space} + margin-left: map-get($value, "x") + .q-mr-#{$space} + margin-right: map-get($value, "x") + .q-mt-#{$space} + margin-top: map-get($value, "y") + .q-mb-#{$space} + margin-bottom: map-get($value, "y") + .q-mx-#{$space} + margin-left: map-get($value, "x") + margin-right: map-get($value, "x") + .q-my-#{$space} + margin-top: map-get($value, "y") + margin-bottom: map-get($value, "y") + +.q-mt-auto, .q-my-auto + margin-top: auto +.q-ml-auto + margin-left: auto +.q-mb-auto, .q-my-auto + margin-bottom: auto +.q-mr-auto + margin-right: auto +.q-mx-auto + margin-left: auto + margin-right: auto diff --git a/src/css/core/size.styl b/src/css/core/size.styl new file mode 100644 index 00000000000..1fe21bb4fa7 --- /dev/null +++ b/src/css/core/size.styl @@ -0,0 +1,73 @@ +:root + for $name, $size in $sizes + --q-size-{$name}: $size + +.fit + width: 100% !important + height: 100% !important +.full-height + height: 100% !important +.full-width + width: 100% !important + margin-left: 0 !important + margin-right: 0 !important + +.window-height + margin-top: 0 !important + margin-bottom: 0 !important + height: 100vh !important +.window-width + margin-left: 0 !important + margin-right: 0 !important + width: 100vw !important + +.block + display: block !important +.inline-block + display: inline-block !important + +for $space, $value in $spaces + + .q-pa-{$space} + padding: $value.y $value.x + .q-pl-{$space} + padding-left: $value.x + .q-pr-{$space} + padding-right: $value.x + .q-pt-{$space} + padding-top: $value.y + .q-pb-{$space} + padding-bottom: $value.y + .q-px-{$space} + padding-left: $value.x + padding-right: $value.x + .q-py-{$space} + @extends .q-pt-{$space}, .q-pb-{$space} + + .q-ma-{$space} + margin: $value.y $value.x + .q-ml-{$space} + margin-left: $value.x + .q-mr-{$space} + margin-right: $value.x + .q-mt-{$space} + margin-top: $value.y + .q-mb-{$space} + margin-bottom: $value.y + .q-mx-{$space} + margin-left: $value.x + margin-right: $value.x + .q-my-{$space} + @extends .q-mt-{$space}, .q-mb-{$space} + +.q-mt-auto, .q-my-auto + margin-top: auto +.q-ml-auto + margin-left: auto +.q-mb-auto, .q-my-auto + margin-bottom: auto +.q-mr-auto + margin-right: auto +.q-mx-auto + margin-left: auto + margin-right: auto diff --git a/src/css/core/touch.sass b/src/css/core/touch.sass new file mode 100644 index 00000000000..abb28b27c1b --- /dev/null +++ b/src/css/core/touch.sass @@ -0,0 +1,9 @@ +.q-touch + user-select: none + user-drag: none + -khtml-user-drag: none + -webkit-user-drag: none +.q-touch-x + touch-action: pan-x +.q-touch-y + touch-action: pan-y diff --git a/src/css/core/touch.styl b/src/css/core/touch.styl new file mode 100644 index 00000000000..abb28b27c1b --- /dev/null +++ b/src/css/core/touch.styl @@ -0,0 +1,9 @@ +.q-touch + user-select: none + user-drag: none + -khtml-user-drag: none + -webkit-user-drag: none +.q-touch-x + touch-action: pan-x +.q-touch-y + touch-action: pan-y diff --git a/src/css/core/transitions.sass b/src/css/core/transitions.sass new file mode 100644 index 00000000000..ec04f70d9cf --- /dev/null +++ b/src/css/core/transitions.sass @@ -0,0 +1,157 @@ +$transition-easing: cubic-bezier(0.215, 0.61, 0.355, 1) // easeOutCubic + +.q-transition + + &--slide-right, + &--slide-left, + &--slide-up, + &--slide-down, + &--jump-right, + &--jump-left, + &--jump-up, + &--jump-down, + &--fade, + &--scale, + &--rotate, + &--flip + &-leave-active + position: absolute + + &--slide-right, + &--slide-left, + &--slide-up, + &--slide-down + &-enter-active, + &-leave-active + transition: transform .3s $transition-easing + + &--slide-right + &-enter + transform: translate3d(-100%, 0, 0) + &-leave-to + transform: translate3d(100%, 0, 0) + + &--slide-left + &-enter + transform: translate3d(100%, 0, 0) + &-leave-to + transform: translate3d(-100%, 0, 0) + + &--slide-up + &-enter + transform: translate3d(0, 100%, 0) + &-leave-to + transform: translate3d(0, -100%, 0) + + &--slide-down + &-enter + transform: translate3d(0, -100%, 0) + &-leave-to + transform: translate3d(0, 100%, 0) + + &--jump-right, + &--jump-left, + &--jump-up, + &--jump-down + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s + &-enter, + &-leave-to + opacity: 0 + + &--jump-right + &-enter + transform: translate3d(-15px, 0, 0) + &-leave-to + transform: translate3d(15px, 0, 0) + + &--jump-left + &-enter + transform: translate3d(15px, 0, 0) + &-leave-to + transform: translateX(-15px) + + &--jump-up + &-enter + transform: translate3d(0, 15px, 0) + &-leave-to + transform: translate3d(0, -15px, 0) + + &--jump-down + &-enter + transform: translate3d(0, -15px, 0) + &-leave-to + transform: translate3d(0, 15px, 0) + + + &--fade + &-enter-active, + &-leave-active + transition: opacity .3s ease-out + &-enter, + &-leave, + &-leave-to + opacity: 0 + + + &--scale + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s $transition-easing + &-enter, + &-leave, + &-leave-to + opacity: 0 + transform: scale3d(0, 0, 1) + + &--rotate + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s $transition-easing + transform-style: preserve-3d + &-enter, + &-leave, + &-leave-to + opacity: 0 + transform: scale3d(0, 0, 1) rotate3d(0, 0, 1, 90deg) + + &--flip-right, + &--flip-left, + &--flip-up, + &--flip-down + &-enter-active, + &-leave-active + transition: transform .3s + backface-visibility: hidden + &-enter-to, + &-leave + transform: perspective(400px) rotate3d(1, 1, 0, 0deg) + + &--flip-right + &-enter + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + &-leave-to + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + + &--flip-left + &-enter + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + &-leave-to + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + + &--flip-up + &-enter + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + &-leave-to + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + + &--flip-down + &-enter + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + &-leave-to + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + + &--hide-scroll, + &--hide-scroll > .q-panel:first-child + overflow: hidden !important diff --git a/src/css/core/transitions.styl b/src/css/core/transitions.styl new file mode 100644 index 00000000000..cc4f45765c2 --- /dev/null +++ b/src/css/core/transitions.styl @@ -0,0 +1,157 @@ +$transition-easing = cubic-bezier(0.215, 0.61, 0.355, 1) // easeOutCubic + +.q-transition + + &--slide-right, + &--slide-left, + &--slide-up, + &--slide-down, + &--jump-right, + &--jump-left, + &--jump-up, + &--jump-down, + &--fade, + &--scale, + &--rotate, + &--flip + &-leave-active + position: absolute + + &--slide-right, + &--slide-left, + &--slide-up, + &--slide-down + &-enter-active, + &-leave-active + transition: transform .3s $transition-easing + + &--slide-right + &-enter + transform: translate3d(-100%, 0, 0) + &-leave-to + transform: translate3d(100%, 0, 0) + + &--slide-left + &-enter + transform: translate3d(100%, 0, 0) + &-leave-to + transform: translate3d(-100%, 0, 0) + + &--slide-up + &-enter + transform: translate3d(0, 100%, 0) + &-leave-to + transform: translate3d(0, -100%, 0) + + &--slide-down + &-enter + transform: translate3d(0, -100%, 0) + &-leave-to + transform: translate3d(0, 100%, 0) + + &--jump-right, + &--jump-left, + &--jump-up, + &--jump-down + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s + &-enter, + &-leave-to + opacity: 0 + + &--jump-right + &-enter + transform: translate3d(-15px, 0, 0) + &-leave-to + transform: translate3d(15px, 0, 0) + + &--jump-left + &-enter + transform: translate3d(15px, 0, 0) + &-leave-to + transform: translateX(-15px) + + &--jump-up + &-enter + transform: translate3d(0, 15px, 0) + &-leave-to + transform: translate3d(0, -15px, 0) + + &--jump-down + &-enter + transform: translate3d(0, -15px, 0) + &-leave-to + transform: translate3d(0, 15px, 0) + + + &--fade + &-enter-active, + &-leave-active + transition: opacity .3s ease-out + &-enter, + &-leave, + &-leave-to + opacity: 0 + + + &--scale + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s $transition-easing + &-enter, + &-leave, + &-leave-to + opacity: 0 + transform: scale3d(0, 0, 1) + + &--rotate + &-enter-active, + &-leave-active + transition: opacity .3s, transform .3s $transition-easing + transform-style: preserve-3d + &-enter, + &-leave, + &-leave-to + opacity: 0 + transform: scale3d(0, 0, 1) rotate3d(0, 0, 1, 90deg) + + &--flip-right, + &--flip-left, + &--flip-up, + &--flip-down + &-enter-active, + &-leave-active + transition: transform .3s + backface-visibility: hidden + &-enter-to, + &-leave + transform: perspective(400px) rotate3d(1, 1, 0, 0deg) + + &--flip-right + &-enter + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + &-leave-to + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + + &--flip-left + &-enter + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + &-leave-to + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + + &--flip-up + &-enter + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + &-leave-to + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + + &--flip-down + &-enter + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + &-leave-to + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + + &--hide-scroll, + &--hide-scroll > .q-panel:first-child + overflow: hidden !important diff --git a/src/css/core/typography.sass b/src/css/core/typography.sass new file mode 100644 index 00000000000..80163786e38 --- /dev/null +++ b/src/css/core/typography.sass @@ -0,0 +1,70 @@ +body + min-width: 100px + min-height: 100% + font-family: $typography-font-family + -ms-text-size-adjust: 100% + -webkit-text-size-adjust: 100% + -webkit-font-smoothing: antialiased + -moz-osx-font-smoothing: grayscale + font-smoothing: antialiased + line-height: $body-line-height + font-size: $body-font-size + +@each $heading, $value in $h-tags + #{$heading} + font-size: map-get($value, "size") + font-weight: map-get($value, "weight") + line-height: map-get($value, "line-height") + letter-spacing: map-get($value, "letter-spacing") + +p + margin: 0 0 map-get(map-get($spaces, "md"), "y") + +.text- + @each $heading, $value in $headings + &#{$heading} + font-size: map-get($value, "size") + font-weight: map-get($value, "weight") + line-height: map-get($value, "line-height") + letter-spacing: map-get($value, "letter-spacing") + + &uppercase + text-transform: uppercase + &lowercase + text-transform: lowercase + &capitalize + text-transform: capitalize + + ¢er + text-align: center + &left + text-align: left + &right + text-align: right + &justify + text-align: justify + hyphens: auto + + &italic + font-style: italic + &bold + font-weight: bold + + &no-wrap + white-space: nowrap + + &strike + text-decoration: line-through + + @each $weight, $value in $text-weights + &weight-#{$weight} + font-weight: $value + +small + font-size: 80% +big + font-size: 170% +sub + bottom: -.25em +sup + top: -.5em diff --git a/src/css/core/typography.styl b/src/css/core/typography.styl new file mode 100644 index 00000000000..88f08d5d506 --- /dev/null +++ b/src/css/core/typography.styl @@ -0,0 +1,70 @@ +body + min-width: 100px + min-height: 100% + font-family: $typography-font-family + -ms-text-size-adjust: 100% + -webkit-text-size-adjust: 100% + -webkit-font-smoothing: antialiased + -moz-osx-font-smoothing: grayscale + font-smoothing: antialiased + line-height: $body-line-height + font-size: $body-font-size + +for $heading, $value in $h-tags + {$heading} + font-size: $value.size + font-weight: $value.weight + line-height: $value.line-height + letter-spacing: $value.letter-spacing + +p + margin: 0 0 $spaces.md.y + +.text- + for $heading, $value in $headings + &{$heading} + font-size: $value.size + font-weight: $value.weight + line-height: $value.line-height + letter-spacing: $value.letter-spacing + + &uppercase + text-transform: uppercase + &lowercase + text-transform: lowercase + &capitalize + text-transform: capitalize + + ¢er + text-align: center + &left + text-align: left + &right + text-align: right + &justify + text-align: justify + hyphens: auto + + &italic + font-style: italic + &bold + font-weight: bold + + &no-wrap + white-space: nowrap + + &strike + text-decoration: line-through + + for $weight, $value in $text-weights + &weight-{$weight} + font-weight: $value + +small + font-size: 80% +big + font-size: 170% +sub + bottom: -.25em +sup + top: -.5em diff --git a/src/css/core/visibility.sass b/src/css/core/visibility.sass new file mode 100644 index 00000000000..ad977b20c72 --- /dev/null +++ b/src/css/core/visibility.sass @@ -0,0 +1,165 @@ +.no-margin + margin: 0 !important +.no-padding + padding: 0 !important +.no-border + border: 0 !important +.no-border-radius + border-radius: 0 !important +.no-box-shadow + box-shadow: none !important +.no-outline + outline: 0 !important + +.ellipsis + text-overflow: ellipsis + white-space: nowrap + overflow: hidden + + &-2-lines, &-3-lines + overflow: hidden + display: -webkit-box + -webkit-box-orient: vertical + &-2-lines + -webkit-line-clamp: 2 + &-3-lines + -webkit-line-clamp: 3 + +.readonly + cursor: default !important +.disabled, [disabled] + &, * // @stylint ignore + outline: 0 !important + cursor: not-allowed !important +.disabled, [disabled] + opacity: .6 !important + +.hidden + display: none !important +.invisible + visibility: hidden !important +.transparent + background: transparent !important + +.overflow-auto + overflow: auto !important +.overflow-hidden + overflow: hidden !important +.overflow-hidden-y + overflow-y: hidden !important + +.hide-scrollbar + scrollbar-width: none + -ms-overflow-style: none + + &::-webkit-scrollbar + width: 0 + height: 0 + display: none + +.dimmed, .light-dimmed + &:after + content: '' + position: absolute + top: 0 + right: 0 #{"/* rtl:ignore */"} + bottom: 0 + left: 0 #{"/* rtl:ignore */"} +.dimmed:after + background: $dimmed-background !important +.light-dimmed:after + background: $light-dimmed-background !important + +.z-top + z-index: $z-top !important +.z-max + z-index: $z-max !important + +$platforms: desktop, mobile, native-mobile, cordova, capacitor, electron, touch, within-iframe, platform-ios, platform-android +@each $type in $platforms + body:not(.#{$type}) .#{$type}-only, + body.#{$type} .#{$type}-hide + display: none !important + +@media all and (orientation: portrait) + .orientation-landscape + display: none !important + +@media all and (orientation: landscape) + .orientation-portrait + display: none !important + +@media screen + .print-only + display: none !important +@media print + .print-hide + display: none !important + +@media (max-width: $breakpoint-xs-max) + .xs-hide, .gt-xs, .sm, .gt-sm, .md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-sm-min) and (max-width: $breakpoint-sm-max) + .sm-hide, .xs, .lt-sm, .gt-sm, .md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-md-min) and (max-width: $breakpoint-md-max) + .md-hide, .xs, .lt-sm, .sm, .lt-md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-lg-min) and (max-width: $breakpoint-lg-max) + .lg-hide, .xs, .lt-sm, .sm, .lt-md, .md, .lt-lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-xl-min) + .xl-hide, .xs, .lt-sm, .sm, .lt-md, .md, .lt-lg, .lg, .lt-xl + display: none !important + +.q-focus-helper, .q-focusable, .q-manual-focusable, .q-hoverable + outline: 0 + +body.desktop + .q-focus-helper + position: absolute + top: 0 + left: 0 #{"/* rtl:ignore */"} + width: 100% + height: 100% + pointer-events: none + border-radius: inherit + opacity: 0 + transition: background-color .3s cubic-bezier(.25,.8,.5,1), opacity .4s cubic-bezier(.25,.8,.5,1) + + &:before, &:after + content: '' + position: absolute + top: 0 + left: 0 #{"/* rtl:ignore */"} + width: 100% + height: 100% + opacity: 0 + border-radius: inherit + transition: background-color .3s cubic-bezier(.25,.8,.5,1), opacity .6s cubic-bezier(.25,.8,.5,1) + + &:before + background: #000 + &:after + background: #fff + + &--rounded + border-radius: $generic-border-radius + &--round + border-radius: 50% + + .q-focusable:focus, .q-manual-focusable--focused, .q-hoverable:hover + > .q-focus-helper + background: currentColor + opacity: .15 + &:before + opacity: .1 + &:after + opacity: .4 + + .q-focusable:focus, .q-manual-focusable--focused + > .q-focus-helper + opacity: .22 + + .q-key-group-navigation--active + outline: auto diff --git a/src/css/core/visibility.styl b/src/css/core/visibility.styl new file mode 100644 index 00000000000..bb5b5aa7743 --- /dev/null +++ b/src/css/core/visibility.styl @@ -0,0 +1,164 @@ +.no-margin + margin: 0 !important +.no-padding + padding: 0 !important +.no-border + border: 0 !important +.no-border-radius + border-radius: 0 !important +.no-box-shadow + box-shadow: none !important +.no-outline + outline: 0 !important + +.ellipsis + text-overflow: ellipsis + white-space: nowrap + overflow: hidden + + &-2-lines, &-3-lines + overflow: hidden + display: -webkit-box + -webkit-box-orient: vertical + &-2-lines + -webkit-line-clamp: 2 + &-3-lines + -webkit-line-clamp: 3 + +.readonly + cursor: default !important +.disabled, [disabled] + &, * // @stylint ignore + outline: 0 !important + cursor: not-allowed !important +.disabled, [disabled] + opacity: .6 !important + +.hidden + display: none !important +.invisible + visibility: hidden !important +.transparent + background: transparent !important + +.overflow-auto + overflow: auto !important +.overflow-hidden + overflow: hidden !important +.overflow-hidden-y + overflow-y: hidden !important + +.hide-scrollbar + scrollbar-width: none + -ms-overflow-style: none + + &::-webkit-scrollbar + width: 0 + height: 0 + display: none + +.dimmed, .light-dimmed + &:after + content: '' + position: absolute + top: 0 + right: 0 /* rtl:ignore */ + bottom: 0 + left: 0 /* rtl:ignore */ +.dimmed:after + background: $dimmed-background !important +.light-dimmed:after + background: $light-dimmed-background !important + +.z-top + z-index: $z-top !important +.z-max + z-index: $z-max !important + +for type in desktop mobile native-mobile cordova capacitor electron touch within-iframe platform-ios platform-android + body:not(.{type}) .{type}-only, + body.{type} .{type}-hide + display: none !important + +@media all and (orientation: portrait) + .orientation-landscape + display: none !important + +@media all and (orientation: landscape) + .orientation-portrait + display: none !important + +@media screen + .print-only + display: none !important +@media print + .print-hide + display: none !important + +@media (max-width: $breakpoint-xs-max) + .xs-hide, .gt-xs, .sm, .gt-sm, .md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-sm-min) and (max-width: $breakpoint-sm-max) + .sm-hide, .xs, .lt-sm, .gt-sm, .md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-md-min) and (max-width: $breakpoint-md-max) + .md-hide, .xs, .lt-sm, .sm, .lt-md, .gt-md, .lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-lg-min) and (max-width: $breakpoint-lg-max) + .lg-hide, .xs, .lt-sm, .sm, .lt-md, .md, .lt-lg, .gt-lg, .xl + display: none !important +@media (min-width: $breakpoint-xl-min) + .xl-hide, .xs, .lt-sm, .sm, .lt-md, .md, .lt-lg, .lg, .lt-xl + display: none !important + +.q-focus-helper, .q-focusable, .q-manual-focusable, .q-hoverable + outline: 0 + +body.desktop + .q-focus-helper + position: absolute + top: 0 + left: 0 /* rtl:ignore */ + width: 100% + height: 100% + pointer-events: none + border-radius: inherit + opacity: 0 + transition: background-color .3s cubic-bezier(.25,.8,.5,1), opacity .4s cubic-bezier(.25,.8,.5,1) + + &:before, &:after + content: '' + position: absolute + top: 0 + left: 0 /* rtl:ignore */ + width: 100% + height: 100% + opacity: 0 + border-radius: inherit + transition: background-color .3s cubic-bezier(.25,.8,.5,1), opacity .6s cubic-bezier(.25,.8,.5,1) + + &:before + background: #000 + &:after + background: #fff + + &--rounded + border-radius: $generic-border-radius + &--round + border-radius: 50% + + .q-focusable:focus, .q-manual-focusable--focused, .q-hoverable:hover + > .q-focus-helper + background: currentColor + opacity: .15 + &:before + opacity: .1 + &:after + opacity: .4 + + .q-focusable:focus, .q-manual-focusable--focused + > .q-focus-helper + opacity: .22 + + .q-key-group-navigation--active + outline: auto diff --git a/src/css/flex-addon.sass b/src/css/flex-addon.sass new file mode 100644 index 00000000000..b5ac1fccc3d --- /dev/null +++ b/src/css/flex-addon.sass @@ -0,0 +1,212 @@ +@import './helpers/string.sass' +@import './helpers/math.sass' + +@import './variables.sass' + +@mixin fg($name, $size) + $noProcZero: $size == 0 + $noProcNotZero: $size > 0 + + @media (min-width: $size) + #{str-fe('.flex-', $name, $noProcNotZero)} + &block + display: block + &inline + display: inline-block + + @each $space, $value in $spaces + .q-pa#{$name}-#{$space} + padding: map-get($value, "y") map-get($value, "x") + .q-pl#{$name}-#{$space} + padding-left: map-get($value, "x") + .q-pr#{$name}-#{$space} + padding-right: map-get($value, "x") + .q-pt#{$name}-#{$space} + padding-top: map-get($value, "y") + .q-pb#{$name}-#{$space} + padding-bottom: map-get($value, "y") + .q-px#{$name}-#{$space} + padding-left: map-get($value, "x") + padding-right: map-get($value, "x") + .q-py#{$name}-#{$space} + padding-top: map-get($value, "y") + padding-bottom: map-get($value, "y") + + .q-ma#{$name}-#{$space} + margin: map-get($value, "y") map-get($value, "x") + .q-ml#{$name}-#{$space} + margin-left: map-get($value, "x") + .q-mr#{$name}-#{$space} + margin-right: map-get($value, "x") + .q-mt#{$name}-#{$space} + margin-top: map-get($value, "y") + .q-mb#{$name}-#{$space} + margin-bottom: map-get($value, "y") + .q-mx#{$name}-#{$space} + margin-left: map-get($value, "x") + margin-right: map-get($value, "x") + .q-my#{$name}-#{$space} + margin-top: map-get($value, "y") + margin-bottom: map-get($value, "y") + + .q-ml#{$name}-auto + margin-left: auto + .q-mr#{$name}-auto + margin-right: auto + .q-mx#{$name}-auto + margin-left: auto + margin-right: auto + + .row, .column, .flex + @if $noProcNotZero + #{str-fr('&.inline', $name)} + display: inline-flex + #{str-fr('&', $name)} + display: flex + flex-wrap: wrap + #{str-fe('&.inline', $name, $noProcZero)} + display: inline-flex + + .row + @if $noProcNotZero + #{str-fr('&.reverse', $name)} + flex-direction: row-reverse + #{str-fr('&', $name)} + flex-direction: row + #{str-fe('&.reverse', $name, $noProcZero)} + flex-direction: row-reverse + + .column + @if $noProcNotZero + #{str-fr('&.reverse', $name)} + flex-direction: column-reverse + #{str-fr('&', $name)} + flex-direction: column + #{str-fe('&.reverse', $name, $noProcZero)} + flex-direction: column-reverse + + #{str-fr('.wrap', $name)} + flex-wrap: wrap + #{str-fr('.no-wrap', $name)} + flex-wrap: nowrap + #{str-fr('.reverse-wrap', $name)} + flex-wrap: wrap-reverse + + #{str-fr('.order-', $name)} + &first + order: -10000 + &last + order: 10000 + &none + order: 0 + + #{str-fr('.justify-', $name)} + &start + justify-content: flex-start + &end + justify-content: flex-end + ¢er + justify-content: center + &between + justify-content: space-between + &around + justify-content: space-around + &evenly + justify-content: space-evenly + + #{str-fr('.items-', $name)} + &start + align-items: flex-start + &end + align-items: flex-end + ¢er + align-items: center + &baseline + align-items: baseline + &stretch + align-items: stretch + + #{str-fr('.content-', $name)} + &start + align-content: flex-start + &end + align-content: flex-end + ¢er + align-content: center + &between + align-content: space-between + &around + align-content: space-around + + #{str-fr('.self-', $name)} + &start + align-self: flex-start + &end + align-self: flex-end + ¢er + align-self: center + &baseline + align-self: baseline + &stretch + align-self: stretch + + #{str-fr('.flex-center', $name)} + @extend .items#{$name}-center + @extend .justify#{$name}-center + + @each $gname, $gsize in $flex-gutter + #{str-fr('.q-gutter', $name)} + &-x-#{$gname} + margin-left: -$gsize + > * + margin-left: $gsize + &-y-#{$gname} + margin-top: -$gsize + > * + margin-top: $gsize + &-#{$gname} + margin-left: -$gsize + margin-top: -$gsize + > * + margin-left: $gsize + margin-top: $gsize + + #{str-fr('.q-col-gutter', $name)} + &-x-#{$gname} + margin-left: -$gsize + > * + padding-left: $gsize + &-y-#{$gname} + margin-top: -$gsize + > * + padding-top: $gsize + &-#{$gname} + margin-left: -$gsize + margin-top: -$gsize + > * + padding-left: $gsize + padding-top: $gsize + + @each $name2, $size2 in $sizes + @if $size >= $size2 + $name2c: "-#{$name2}" + $noProcNotZero2: ($size2 > 0) + + @for $i from 0 through $flex-cols + $ic: quote('' + $i) + $internal-size: toFixed(percentage($i / $flex-cols), 10000) + + #{str-fr('.row', $name)} + #{str-fe('> .col-', $name2c, $noProcNotZero2, $ic)} + height: auto + width: $internal-size + #{str-fe('> .offset-', $name2c, $noProcNotZero2, $ic)} + margin-left: $internal-size + + #{str-fr('.column', $name)} + #{str-fe('> .col-', $name2c, $noProcNotZero2, $ic)} + height: $internal-size + width: auto + +@each $name, $size in $sizes + @include fg("-" + $name, $size) diff --git a/src/css/flex-addon.styl b/src/css/flex-addon.styl new file mode 100644 index 00000000000..eb46809d702 --- /dev/null +++ b/src/css/flex-addon.styl @@ -0,0 +1,201 @@ +@import './variables.styl' + +str-fr(selector, name, i = '') + unquote(replace(unquote(''), unquote(i), replace(unquote(''), unquote(name), unquote(selector)))) + +str-fe(selector, name, noProc, i = '') + if noProc + return str-fr(selector, name, i) + return unquote(join(',', str-fr(selector, '', i) str-fr(selector, name, i))) + +fg($name, $size) + $noProcZero = $size == 0 + $noProcNotZero = $size > 0 + @media (min-width $size) + {str-fe('.flex-', $name, $noProcNotZero)} + &block + display: block + &inline + display: inline-block + + for $space, $value in $spaces + .q-pa{$name}-{$space} + padding: $value.y $value.x + .q-pl{$name}-{$space} + padding-left: $value.x + .q-pr{$name}-{$space} + padding-right: $value.x + .q-pt{$name}-{$space} + padding-top: $value.y + .q-pb{$name}-{$space} + padding-bottom: $value.y + .q-px{$name}-{$space} + @extends .q-pl{$name}-{$space}, .q-pr{$name}-{$space} + .q-py{$name}-{$space} + @extends .q-pt{$name}-{$space}, .q-pb{$name}-{$space} + .q-ma{$name}-{$space} + margin: $value.y $value.x + .q-ml{$name}-{$space} + margin-left: $value.x + .q-mr{$name}-{$space} + margin-right: $value.x + .q-mt{$name}-{$space} + margin-top: $value.y + .q-mb{$name}-{$space} + margin-bottom: $value.y + .q-mx{$name}-{$space} + @extends .q-ml{$name}-{$space}, .q-mr{$name}-{$space} + .q-my{$name}-{$space} + @extends .q-mt{$name}-{$space}, .q-mb{$name}-{$space} + + .q-ml{$name}-auto + margin-left: auto + .q-mr{$name}-auto + margin-right: auto + .q-mx{$name}-auto + @extends .q-ml{$name}-auto, .q-mr{$name}-auto + + .row, .column, .flex + if $noProcNotZero + {str-fr('&.inline', $name)} + display: inline-flex + {str-fr('&', $name)} + display: flex + flex-wrap: wrap + {str-fe('&.inline', $name, $noProcZero)} + display: inline-flex + + .row + if $noProcNotZero + {str-fr('&.reverse', $name)} + flex-direction: row-reverse + {str-fr('&', $name)} + flex-direction: row + {str-fe('&.reverse', $name, $noProcZero)} + flex-direction: row-reverse + + .column + if $noProcNotZero + {str-fr('&.reverse', $name)} + flex-direction: column-reverse + {str-fr('&', $name)} + flex-direction: column + {str-fe('&.reverse', $name, $noProcZero)} + flex-direction: column-reverse + + {str-fr('.wrap', $name)} + flex-wrap: wrap + {str-fr('.no-wrap', $name)} + flex-wrap: nowrap + {str-fr('.reverse-wrap', $name)} + flex-wrap: wrap-reverse + + {str-fr('.order-', $name)} + &first + order: -10000 + &last + order: 10000 + &none + order: 0 + + {str-fr('.justify-', $name)} + &start + justify-content: flex-start + &end + justify-content: flex-end + ¢er + justify-content: center + &between + justify-content: space-between + &around + justify-content: space-around + &evenly + justify-content: space-evenly + + {str-fr('.items-', $name)} + &start + align-items: flex-start + &end + align-items: flex-end + ¢er + align-items: center + &baseline + align-items: baseline + &stretch + align-items: stretch + + {str-fr('.content-', $name)} + &start + align-content: flex-start + &end + align-content: flex-end + ¢er + align-content: center + &between + align-content: space-between + &around + align-content: space-around + + {str-fr('.self-', $name)} + &start + align-self: flex-start + &end + align-self: flex-end + ¢er + align-self: center + &baseline + align-self: baseline + &stretch + align-self: stretch + + {str-fr('.flex-center', $name)} + @extends .items{$name}-center + @extends .justify{$name}-center + + for $gname, $gsize in $flex-gutter + {str-fr('.q-gutter', $name)} + &-x-{$gname} + margin-left: (- $gsize) + > * + margin-left: $gsize + &-y-{$gname} + margin-top: (- $gsize) + > * + margin-top: $gsize + &-{$gname} + @extends .q-gutter{$name}-x-{$gname}, .q-gutter{$name}-y-{$gname} + {str-fr('.q-col-gutter', $name)} + &-x-{$gname} + margin-left: (- $gsize) + > * + padding-left: ($gsize) + &-y-{$gname} + margin-top: (- $gsize) + > * + padding-top: ($gsize) + &-{$gname} + @extends .q-col-gutter{$name}-x-{$gname}, .q-col-gutter{$name}-y-{$gname} + + for $name2, $size2 in $sizes + if $size >= $size2 + $name2c = s('-%s', unquote($name2)) + $noProcNotZero2 = $size2 > 0 + + for $i in (0..$flex-cols) + $ic = s('%s', $i) + $internal-size = (round($i / $flex-cols * 100, 4))% + + {str-fr('.row', $name)} + {str-fe('> .col-', $name2c, $noProcNotZero2, $ic)} + height: auto + width: $internal-size + {str-fe('> .offset-', $name2c, $noProcNotZero2, $ic)} + margin-left: $internal-size + + {str-fr('.column', $name)} + {str-fe('> .col-', $name2c, $noProcNotZero2, $ic)} + height: $internal-size + width: auto + +for $name, $size in $sizes + fg(s('-%s', unquote($name)), $size) diff --git a/src/css/helpers/math.sass b/src/css/helpers/math.sass new file mode 100644 index 00000000000..cfb7195f3f4 --- /dev/null +++ b/src/css/helpers/math.sass @@ -0,0 +1,42 @@ +$PI: 3.14159265359 + +@function pow($number, $exp) + $value: 1 + @if $exp > 0 + @for $i from 1 through $exp + $value: $value * $number + @else if $exp < 0 + @for $i from 1 through -$exp + $value: $value / $number + @return $value + +@function fact($number) + $value: 1 + @if $number > 0 + @for $i from 1 through $number + $value: $value * $i + @return $value + +// round to number of decimals +// toFixed(0.12345, 100) -> 0.12 +// toFixed(0.12345, 1000) -> 0.123 +@function toFixed($number, $power) + @return round($number * $power) / $power + +@function sin($angle) + $sin: 0 + // angle -> radians + $rad: $angle / 180 * $PI + // interval determines precision + @for $i from 0 through 25 + $sin: $sin + pow(-1, $i) * pow($rad, (2 * $i + 1)) / fact(2 * $i + 1) + @return $sin + +@function cos($angle) + $cos: 0 + // angle -> radians + $rad: $angle / 180 * $PI + // interval determines precision + @for $i from 0 through 25 + $cos: $cos + pow(-1, $i) * pow($rad, 2 * $i) / fact(2 * $i) + @return $cos diff --git a/src/css/helpers/string.sass b/src/css/helpers/string.sass new file mode 100644 index 00000000000..2cf5e9bd310 --- /dev/null +++ b/src/css/helpers/string.sass @@ -0,0 +1,17 @@ +@function str-replace($string, $search, $replace: '') + $index: str-index($string, $search) + + @if $index + $start: str-slice($string, 1, $index - 1) + $end: str-replace(str-slice($string, $index + str-length($search)), $search, $replace) + @return $start + $replace + $end + + @return $string + +@function str-fr($selector, $name, $i: '') + @return str-replace(str-replace($selector, '', $name), '', $i) + +@function str-fe($selector, $name, $noProc, $i: '') + @if $noProc + @return str-fr($selector, $name, $i) + @return join(str-fr($selector, '', $i), str-fr($selector, $name, $i), $separator: comma) diff --git a/src/css/index.sass b/src/css/index.sass new file mode 100644 index 00000000000..0649c3a160e --- /dev/null +++ b/src/css/index.sass @@ -0,0 +1,105 @@ +@import './helpers/string.sass' +@import './helpers/math.sass' + +@import './variables.sass' +@import './normalize.sass' + +@import '../components/icon/QIcon.sass' + +/* Mixins */ +@import '../mixins/panel.sass' + +/* Components */ +@import '../components/ajax-bar/QAjaxBar.sass' +@import '../components/avatar/QAvatar.sass' +@import '../components/badge/QBadge.sass' +@import '../components/banner/QBanner.sass' +@import '../components/bar/QBar.sass' +@import '../components/breadcrumbs/QBreadcrumbs.sass' +@import '../components/btn/QBtn.sass' +@import '../components/btn-dropdown/QBtnDropdown.sass' +@import '../components/btn-group/QBtnGroup.sass' +@import '../components/btn-toggle/QBtnToggle.sass' +@import '../components/card/QCard.sass' +@import '../components/carousel/QCarousel.sass' +@import '../components/chat/QChatMessage.sass' +@import '../components/checkbox/QCheckbox.sass' +@import '../components/chip/QChip.sass' +@import '../components/circular-progress/QCircularProgress.sass' +@import '../components/color/QColor.sass' +@import '../components/date/QDate.sass' +@import '../components/dialog/QDialog.sass' +@import '../components/dialog-bottom-sheet/BottomSheet.sass' +@import '../components/dialog-plugin/DialogPlugin.sass' +@import '../components/editor/QEditor.sass' +@import '../components/expansion-item/QExpansionItem.sass' +@import '../components/fab/QFab.sass' +@import '../components/field/QField.sass' +@import '../components/file/QFile.sass' +@import '../components/form/QForm.sass' +@import '../components/img/QImg.sass' +@import '../components/inner-loading/QInnerLoading.sass' +@import '../components/input/QInput.sass' +@import '../components/intersection/QIntersection.sass' +@import '../components/item/QItem.sass' +@import '../components/knob/QKnob.sass' +@import '../components/layout/QLayout.sass' +@import '../components/linear-progress/QLinearProgress.sass' +@import '../components/menu/QMenu.sass' +@import '../components/option-group/QOptionGroup.sass' +@import '../components/pagination/QPagination.sass' +@import '../components/parallax/QParallax.sass' +@import '../components/popup-edit/QPopupEdit.sass' +@import '../components/pull-to-refresh/QPullToRefresh.sass' +@import '../components/radio/QRadio.sass' +@import '../components/rating/QRating.sass' +@import '../components/responsive/QResponsive.sass' +@import '../components/scroll-area/QScrollArea.sass' +@import '../components/select/QSelect.sass' +@import '../components/separator/QSeparator.sass' +@import '../components/skeleton/QSkeleton.sass' +@import '../components/slide-item/QSlideItem.sass' +@import '../components/slider/QSlider.sass' +@import '../components/space/QSpace.sass' +@import '../components/spinner/QSpinner.sass' +@import '../components/splitter/QSplitter.sass' +@import '../components/stepper/QStepper.sass' +@import '../components/tab-panels/QTabPanel.sass' +@import '../components/table/QTable.sass' +@import '../components/tabs/QTabs.sass' +@import '../components/time/QTime.sass' +@import '../components/timeline/QTimeline.sass' +@import '../components/toggle/QToggle.sass' +@import '../components/toolbar/QToolbar.sass' +@import '../components/tooltip/QTooltip.sass' +@import '../components/tree/QTree.sass' +@import '../components/uploader/QUploader.sass' +@import '../components/video/QVideo.sass' +@import '../components/virtual-scroll/QVirtualScroll.sass' + +/* Directives */ +@import '../directives/Ripple.sass' +@import '../directives/Morph.sass' + +/* Plugins */ +@import '../plugins/Loading.sass' +@import '../plugins/Notify.sass' + +/* Core */ +@import './core/animations.sass' +@import './core/colors.sass' +@import './core/elevation.sass' +@import './core/flex.sass' +@import './core/helpers.sass' +@import './core/mouse.sass' +@import './core/orientation.sass' +@import './core/positioning.sass' +@import './core/size.sass' +@import './core/touch.sass' +@import './core/transitions.sass' +@import './core/typography.sass' +@import './core/visibility.sass' +@import './core/dark.sass' + +/* IE Compat */ +@import '../ie-compat/ie.sass' diff --git a/src/css/index.styl b/src/css/index.styl new file mode 100644 index 00000000000..e56f3dd60f0 --- /dev/null +++ b/src/css/index.styl @@ -0,0 +1,102 @@ +@import './variables.styl' +@import './normalize.styl' + +@import '../components/icon/QIcon.styl' + +/* Mixins */ +@import '../mixins/panel.styl' + +/* Components */ +@import '../components/ajax-bar/QAjaxBar.styl' +@import '../components/avatar/QAvatar.styl' +@import '../components/badge/QBadge.styl' +@import '../components/banner/QBanner.styl' +@import '../components/bar/QBar.styl' +@import '../components/breadcrumbs/QBreadcrumbs.styl' +@import '../components/btn/QBtn.styl' +@import '../components/btn-dropdown/QBtnDropdown.styl' +@import '../components/btn-group/QBtnGroup.styl' +@import '../components/btn-toggle/QBtnToggle.styl' +@import '../components/card/QCard.styl' +@import '../components/carousel/QCarousel.styl' +@import '../components/chat/QChatMessage.styl' +@import '../components/checkbox/QCheckbox.styl' +@import '../components/chip/QChip.styl' +@import '../components/circular-progress/QCircularProgress.styl' +@import '../components/color/QColor.styl' +@import '../components/date/QDate.styl' +@import '../components/dialog/QDialog.styl' +@import '../components/dialog-bottom-sheet/BottomSheet.styl' +@import '../components/dialog-plugin/DialogPlugin.styl' +@import '../components/editor/QEditor.styl' +@import '../components/expansion-item/QExpansionItem.styl' +@import '../components/fab/QFab.styl' +@import '../components/field/QField.styl' +@import '../components/file/QFile.styl' +@import '../components/form/QForm.styl' +@import '../components/img/QImg.styl' +@import '../components/inner-loading/QInnerLoading.styl' +@import '../components/input/QInput.styl' +@import '../components/intersection/QIntersection.styl' +@import '../components/item/QItem.styl' +@import '../components/knob/QKnob.styl' +@import '../components/layout/QLayout.styl' +@import '../components/linear-progress/QLinearProgress.styl' +@import '../components/menu/QMenu.styl' +@import '../components/option-group/QOptionGroup.styl' +@import '../components/pagination/QPagination.styl' +@import '../components/parallax/QParallax.styl' +@import '../components/popup-edit/QPopupEdit.styl' +@import '../components/pull-to-refresh/QPullToRefresh.styl' +@import '../components/radio/QRadio.styl' +@import '../components/rating/QRating.styl' +@import '../components/responsive/QResponsive.styl' +@import '../components/scroll-area/QScrollArea.styl' +@import '../components/select/QSelect.styl' +@import '../components/separator/QSeparator.styl' +@import '../components/skeleton/QSkeleton.styl' +@import '../components/slide-item/QSlideItem.styl' +@import '../components/slider/QSlider.styl' +@import '../components/space/QSpace.styl' +@import '../components/spinner/QSpinner.styl' +@import '../components/splitter/QSplitter.styl' +@import '../components/stepper/QStepper.styl' +@import '../components/tab-panels/QTabPanel.styl' +@import '../components/table/QTable.styl' +@import '../components/tabs/QTabs.styl' +@import '../components/time/QTime.styl' +@import '../components/timeline/QTimeline.styl' +@import '../components/toggle/QToggle.styl' +@import '../components/toolbar/QToolbar.styl' +@import '../components/tooltip/QTooltip.styl' +@import '../components/tree/QTree.styl' +@import '../components/uploader/QUploader.styl' +@import '../components/video/QVideo.styl' +@import '../components/virtual-scroll/QVirtualScroll.styl' + +/* Directives */ +@import '../directives/Ripple.styl' +@import '../directives/Morph.styl' + +/* Plugins */ +@import '../plugins/Loading.styl' +@import '../plugins/Notify.styl' + +/* Core */ +@import './core/animations.styl' +@import './core/colors.styl' +@import './core/elevation.styl' +@import './core/flex.styl' +@import './core/helpers.styl' +@import './core/mouse.styl' +@import './core/orientation.styl' +@import './core/positioning.styl' +@import './core/size.styl' +@import './core/touch.styl' +@import './core/transitions.styl' +@import './core/typography.styl' +@import './core/visibility.styl' +@import './core/dark.styl' + +/* IE Compat */ +@import '../ie-compat/ie' diff --git a/src/css/normalize.sass b/src/css/normalize.sass new file mode 100644 index 00000000000..37bba9e9a95 --- /dev/null +++ b/src/css/normalize.sass @@ -0,0 +1,170 @@ +/* + * Normalizing -- forked from Normalize.css v8 + */ + +*, *:before, *:after // @stylint ignore + box-sizing: inherit + -webkit-tap-highlight-color: transparent + -moz-tap-highlight-color: transparent + +html, body, #q-app + width: 100% + direction: ltr +// https://stackoverflow.com/a/23083463 +body.platform-ios.within-iframe, body.platform-ios.within-iframe #q-app + width: 100px + min-width: 100% +html, body + margin: 0 + box-sizing: border-box + +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary + display: block + +/* + * line 1: Remove the bottom border in Firefox 39-. + * lines 2,3: Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] + border-bottom: none + text-decoration: underline + text-decoration: underline dotted + +/** + * Remove the border on images inside links in IE 10. + */ + +img + border-style: none + +/* + * Hide the overflow in IE. + */ + +svg:not(:root) + overflow: hidden + +/* + * line 1: Correct the inheritance and scaling of font size in all browsers. + * line 2: Correct the odd `em` font sizing in all browsers. + */ + +code, kbd, pre, samp + font-family: monospace, monospace + font-size: 1em + +/* + * lines 1,2: Add the correct box sizing in Firefox. + * line 3: Show the overflow in Edge and IE. + */ + +hr + box-sizing: content-box + height: 0 + overflow: visible + +/* + * Change font properties to `inherit` in all browsers (opinionated). + */ + +button, +input, +optgroup, +select, +textarea + font: inherit + font-family: inherit + margin: 0 + +/* + * Restore the font weight unset by the previous rule. + */ + +optgroup + font-weight: bold + +/* + * Show the overflow in IE. + * input: Show the overflow in Edge. + * select: Show the overflow in Edge, Firefox, and IE. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * select: Remove the inheritance of text transform in Firefox. + */ + +button, +input, +select + overflow: visible + text-transform: none + +/* + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, input::-moz-focus-inner + border: 0 + padding: 0 + +/* + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, input:-moz-focusring + outline: 1px dotted ButtonText + +/** + * Correct the padding in Firefox. + */ + +fieldset + padding: 0.35em 0.75em 0.625em + +/** + * lines 1,3,4,6: Correct the text wrapping in Edge and IE. + * line 2: Correct the color inheritance from `fieldset` elements in IE. + * line 5: Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend + box-sizing: border-box + color: inherit + display: table + max-width: 100% + padding: 0 + white-space: normal + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress + vertical-align: baseline + +/* + * Remove the default vertical scrollbar in IE. + */ + +textarea + overflow: auto + +/* + * Remove the inner padding and cancel buttons in Chrome on OS X and + * Safari on OS X. + */ + +input[type='search']::-webkit-search-cancel-button, +input[type='search']::-webkit-search-decoration + -webkit-appearance: none diff --git a/src/css/normalize.styl b/src/css/normalize.styl new file mode 100644 index 00000000000..37bba9e9a95 --- /dev/null +++ b/src/css/normalize.styl @@ -0,0 +1,170 @@ +/* + * Normalizing -- forked from Normalize.css v8 + */ + +*, *:before, *:after // @stylint ignore + box-sizing: inherit + -webkit-tap-highlight-color: transparent + -moz-tap-highlight-color: transparent + +html, body, #q-app + width: 100% + direction: ltr +// https://stackoverflow.com/a/23083463 +body.platform-ios.within-iframe, body.platform-ios.within-iframe #q-app + width: 100px + min-width: 100% +html, body + margin: 0 + box-sizing: border-box + +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary + display: block + +/* + * line 1: Remove the bottom border in Firefox 39-. + * lines 2,3: Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] + border-bottom: none + text-decoration: underline + text-decoration: underline dotted + +/** + * Remove the border on images inside links in IE 10. + */ + +img + border-style: none + +/* + * Hide the overflow in IE. + */ + +svg:not(:root) + overflow: hidden + +/* + * line 1: Correct the inheritance and scaling of font size in all browsers. + * line 2: Correct the odd `em` font sizing in all browsers. + */ + +code, kbd, pre, samp + font-family: monospace, monospace + font-size: 1em + +/* + * lines 1,2: Add the correct box sizing in Firefox. + * line 3: Show the overflow in Edge and IE. + */ + +hr + box-sizing: content-box + height: 0 + overflow: visible + +/* + * Change font properties to `inherit` in all browsers (opinionated). + */ + +button, +input, +optgroup, +select, +textarea + font: inherit + font-family: inherit + margin: 0 + +/* + * Restore the font weight unset by the previous rule. + */ + +optgroup + font-weight: bold + +/* + * Show the overflow in IE. + * input: Show the overflow in Edge. + * select: Show the overflow in Edge, Firefox, and IE. + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * select: Remove the inheritance of text transform in Firefox. + */ + +button, +input, +select + overflow: visible + text-transform: none + +/* + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, input::-moz-focus-inner + border: 0 + padding: 0 + +/* + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, input:-moz-focusring + outline: 1px dotted ButtonText + +/** + * Correct the padding in Firefox. + */ + +fieldset + padding: 0.35em 0.75em 0.625em + +/** + * lines 1,3,4,6: Correct the text wrapping in Edge and IE. + * line 2: Correct the color inheritance from `fieldset` elements in IE. + * line 5: Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend + box-sizing: border-box + color: inherit + display: table + max-width: 100% + padding: 0 + white-space: normal + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress + vertical-align: baseline + +/* + * Remove the default vertical scrollbar in IE. + */ + +textarea + overflow: auto + +/* + * Remove the inner padding and cancel buttons in Chrome on OS X and + * Safari on OS X. + */ + +input[type='search']::-webkit-search-cancel-button, +input[type='search']::-webkit-search-decoration + -webkit-appearance: none diff --git a/src/css/variables.sass b/src/css/variables.sass new file mode 100644 index 00000000000..0377fd25c3d --- /dev/null +++ b/src/css/variables.sass @@ -0,0 +1,565 @@ +$space-base : 16px !default +$space-x-base : $space-base !default +$space-y-base : $space-base !default + +$space-none : (x: 0, y: 0) !default +$space-xs : (x: ($space-x-base * .25), y: ($space-y-base * .25)) !default +$space-sm : (x: ($space-x-base * .5), y: ($space-y-base * .5)) !default +$space-md : (x: $space-x-base, y: $space-y-base) !default +$space-lg : (x: ($space-x-base * 1.5), y: ($space-y-base * 1.5)) !default +$space-xl : (x: ($space-x-base * 3), y: ($space-y-base * 3)) !default + +// sorry for long line; we need .sass and it doesn't support multi-line list +$spaces: ('none': $space-none, 'xs': $space-xs, 'sm': $space-sm, 'md': $space-md, 'lg': $space-lg, 'xl': $space-xl) !default + +$animate-duration : .3s !default +$animate-delay : .3s !default +$animate-repeat : 1 !default + +// Max width at which point +// current size ends +$breakpoint-xs: 599px !default +$breakpoint-sm: 1023px !default +$breakpoint-md: 1439px !default +$breakpoint-lg: 1919px !default + +$flex-cols : 12 !default +$flex-gutter-xs : ($space-base * .25) !default +$flex-gutter-sm : ($space-base * .5) !default +$flex-gutter-md : $space-base !default +$flex-gutter-lg : ($space-base * 1.5) !default +$flex-gutter-xl : ($space-base * 3) !default + +$body-font-size : 14px !default +$body-line-height : 1.5 !default + +// sorry for long line; we need .sass and it doesn't support multi-line list +$flex-gutter: ('none': 0, 'xs': $flex-gutter-xs, 'sm': $flex-gutter-sm, 'md': $flex-gutter-md, 'lg': $flex-gutter-lg, 'xl': $flex-gutter-xl) !default + +// sorry for long line; we need .sass and it doesn't support multi-line list +$sizes: ('xs': 0, 'sm': ($breakpoint-xs + 1), 'md': ($breakpoint-sm + 1), 'lg': ($breakpoint-md + 1), 'xl': ($breakpoint-lg + 1)) !default + +$breakpoint-xs-max: (map-get($sizes, "sm") - 0.02) !default + +$breakpoint-sm-min: map-get($sizes, "sm") !default +$breakpoint-sm-max: (map-get($sizes, "md") - 0.02) !default + +$breakpoint-md-min: map-get($sizes, "md") !default +$breakpoint-md-max: (map-get($sizes, "lg") - 0.02) !default + +$breakpoint-lg-min: map-get($sizes, "lg") !default +$breakpoint-lg-max: (map-get($sizes, "xl") - 0.02) !default + +$breakpoint-xl-min: map-get($sizes, "xl") !default + +$h1: (size: 6rem, line-height: 6rem, letter-spacing: -.01562em, weight: 300) !default +$h2: (size: 3.75rem, line-height: 3.75rem, letter-spacing: -.00833em, weight: 300) !default +$h3: (size: 3rem, line-height: 3.125rem, letter-spacing: normal, weight: 400) !default +$h4: (size: 2.125rem, line-height: 2.5rem, letter-spacing: .00735em, weight: 400) !default +$h5: (size: 1.5rem, line-height: 2rem, letter-spacing: normal, weight: 400) !default +$h6: (size: 1.25rem, line-height: 2rem, letter-spacing: .0125em, weight: 500) !default +$subtitle1: (size: 1rem, line-height: 1.75rem, letter-spacing: .00937em, weight: 400) !default +$subtitle2: (size: .875rem, line-height: 1.375rem, letter-spacing: .00714em, weight: 500) !default +$body1: (size: 1rem, line-height: 1.5rem, letter-spacing: .03125em, weight: 400) !default +$body2: (size: .875rem, line-height: 1.25rem, letter-spacing: .01786em, weight: 400) !default +$overline: (size: .75rem, line-height: 2rem, letter-spacing: .16667em, weight: 500) !default +$caption: (size: .75rem, line-height: 1.25rem, letter-spacing: .03333em, weight: 400) !default + +// sorry for long line; we need .sass and it doesn't support multi-line list +$headings: ('h1': $h1, 'h2': $h2, 'h3': $h3, 'h4': $h4, 'h5': $h5, 'h6': $h6, 'subtitle1': $subtitle1, 'subtitle2': $subtitle2, 'body1': $body1, 'body2': $body2, 'overline': $overline, 'caption': $caption) !default + +// sorry for long line; we need .sass and it doesn't support multi-line list +$h-tags: (h1: map-get($headings, "h1"), h2: map-get($headings, "h2"), h3: map-get($headings, "h3"), h4: map-get($headings, "h4"), h5: map-get($headings, "h5"), h6: map-get($headings, "h6")) !default + +// sorry for long line; we need .sass and it doesn't support multi-line list +$text-weights: (thin: 100, light: 300, regular: 400, medium: 500, bold: 700, bolder: 900) !default + +$primary : #1976D2 !default +$secondary : #26A69A !default +$accent : #9C27B0 !default + +// used by light mode +$light-page : #ffffff !default +$light-text : #000000 !default + +// used by dark mode +$dark-page : #121212 !default +$dark-text : #ffffff !default +$dark : #1d1d1d !default + +$positive : #21BA45 !default +$negative : #C10015 !default +$info : #31CCEC !default +$warning : #F2C037 !default + +$dialog-plugin-light : $primary !default +$dialog-plugin-dark : #ffc107 !default + +$notify-background : #323232 !default + +$chip-background-light : #e0e0e0 !default +$chip-background-dark : #323232 !default + +$backdrop-background : #000000 !default + +$dimmed-background : rgba(0, 0, 0, .4) !default +$light-dimmed-background : rgba(255, 255, 255, .6) !default + +$separator-color : rgba(0, 0, 0, .12) !default +$separator-dark-color : rgba(255, 255, 255, .28) !default + +$red : #f44336 !default +$red-1 : #ffebee !default +$red-2 : #ffcdd2 !default +$red-3 : #ef9a9a !default +$red-4 : #e57373 !default +$red-5 : #ef5350 !default +$red-6 : #f44336 !default +$red-7 : #e53935 !default +$red-8 : #d32f2f !default +$red-9 : #c62828 !default +$red-10 : #b71c1c !default +$red-11 : #ff8a80 !default +$red-12 : #ff5252 !default +$red-13 : #ff1744 !default +$red-14 : #d50000 !default +$pink : #e91e63 !default +$pink-1 : #fce4ec !default +$pink-2 : #f8bbd0 !default +$pink-3 : #f48fb1 !default +$pink-4 : #f06292 !default +$pink-5 : #ec407a !default +$pink-6 : #e91e63 !default +$pink-7 : #d81b60 !default +$pink-8 : #c2185b !default +$pink-9 : #ad1457 !default +$pink-10 : #880e4f !default +$pink-11 : #ff80ab !default +$pink-12 : #ff4081 !default +$pink-13 : #f50057 !default +$pink-14 : #c51162 !default +$purple : #9c27b0 !default +$purple-1 : #f3e5f5 !default +$purple-2 : #e1bee7 !default +$purple-3 : #ce93d8 !default +$purple-4 : #ba68c8 !default +$purple-5 : #ab47bc !default +$purple-6 : #9c27b0 !default +$purple-7 : #8e24aa !default +$purple-8 : #7b1fa2 !default +$purple-9 : #6a1b9a !default +$purple-10 : #4a148c !default +$purple-11 : #ea80fc !default +$purple-12 : #e040fb !default +$purple-13 : #d500f9 !default +$purple-14 : #aa00ff !default +$deep-purple : #673ab7 !default +$deep-purple-1 : #ede7f6 !default +$deep-purple-2 : #d1c4e9 !default +$deep-purple-3 : #b39ddb !default +$deep-purple-4 : #9575cd !default +$deep-purple-5 : #7e57c2 !default +$deep-purple-6 : #673ab7 !default +$deep-purple-7 : #5e35b1 !default +$deep-purple-8 : #512da8 !default +$deep-purple-9 : #4527a0 !default +$deep-purple-10 : #311b92 !default +$deep-purple-11 : #b388ff !default +$deep-purple-12 : #7c4dff !default +$deep-purple-13 : #651fff !default +$deep-purple-14 : #6200ea !default +$indigo : #3f51b5 !default +$indigo-1 : #e8eaf6 !default +$indigo-2 : #c5cae9 !default +$indigo-3 : #9fa8da !default +$indigo-4 : #7986cb !default +$indigo-5 : #5c6bc0 !default +$indigo-6 : #3f51b5 !default +$indigo-7 : #3949ab !default +$indigo-8 : #303f9f !default +$indigo-9 : #283593 !default +$indigo-10 : #1a237e !default +$indigo-11 : #8c9eff !default +$indigo-12 : #536dfe !default +$indigo-13 : #3d5afe !default +$indigo-14 : #304ffe !default +$blue : #2196f3 !default +$blue-1 : #e3f2fd !default +$blue-2 : #bbdefb !default +$blue-3 : #90caf9 !default +$blue-4 : #64b5f6 !default +$blue-5 : #42a5f5 !default +$blue-6 : #2196f3 !default +$blue-7 : #1e88e5 !default +$blue-8 : #1976d2 !default +$blue-9 : #1565c0 !default +$blue-10 : #0d47a1 !default +$blue-11 : #82b1ff !default +$blue-12 : #448aff !default +$blue-13 : #2979ff !default +$blue-14 : #2962ff !default +$light-blue : #03a9f4 !default +$light-blue-1 : #e1f5fe !default +$light-blue-2 : #b3e5fc !default +$light-blue-3 : #81d4fa !default +$light-blue-4 : #4fc3f7 !default +$light-blue-5 : #29b6f6 !default +$light-blue-6 : #03a9f4 !default +$light-blue-7 : #039be5 !default +$light-blue-8 : #0288d1 !default +$light-blue-9 : #0277bd !default +$light-blue-10 : #01579b !default +$light-blue-11 : #80d8ff !default +$light-blue-12 : #40c4ff !default +$light-blue-13 : #00b0ff !default +$light-blue-14 : #0091ea !default +$cyan : #00bcd4 !default +$cyan-1 : #e0f7fa !default +$cyan-2 : #b2ebf2 !default +$cyan-3 : #80deea !default +$cyan-4 : #4dd0e1 !default +$cyan-5 : #26c6da !default +$cyan-6 : #00bcd4 !default +$cyan-7 : #00acc1 !default +$cyan-8 : #0097a7 !default +$cyan-9 : #00838f !default +$cyan-10 : #006064 !default +$cyan-11 : #84ffff !default +$cyan-12 : #18ffff !default +$cyan-13 : #00e5ff !default +$cyan-14 : #00b8d4 !default +$teal : #009688 !default +$teal-1 : #e0f2f1 !default +$teal-2 : #b2dfdb !default +$teal-3 : #80cbc4 !default +$teal-4 : #4db6ac !default +$teal-5 : #26a69a !default +$teal-6 : #009688 !default +$teal-7 : #00897b !default +$teal-8 : #00796b !default +$teal-9 : #00695c !default +$teal-10 : #004d40 !default +$teal-11 : #a7ffeb !default +$teal-12 : #64ffda !default +$teal-13 : #1de9b6 !default +$teal-14 : #00bfa5 !default +$green : #4caf50 !default +$green-1 : #e8f5e9 !default +$green-2 : #c8e6c9 !default +$green-3 : #a5d6a7 !default +$green-4 : #81c784 !default +$green-5 : #66bb6a !default +$green-6 : #4caf50 !default +$green-7 : #43a047 !default +$green-8 : #388e3c !default +$green-9 : #2e7d32 !default +$green-10 : #1b5e20 !default +$green-11 : #b9f6ca !default +$green-12 : #69f0ae !default +$green-13 : #00e676 !default +$green-14 : #00c853 !default +$light-green : #8bc34a !default +$light-green-1 : #f1f8e9 !default +$light-green-2 : #dcedc8 !default +$light-green-3 : #c5e1a5 !default +$light-green-4 : #aed581 !default +$light-green-5 : #9ccc65 !default +$light-green-6 : #8bc34a !default +$light-green-7 : #7cb342 !default +$light-green-8 : #689f38 !default +$light-green-9 : #558b2f !default +$light-green-10 : #33691e !default +$light-green-11 : #ccff90 !default +$light-green-12 : #b2ff59 !default +$light-green-13 : #76ff03 !default +$light-green-14 : #64dd17 !default +$lime : #cddc39 !default +$lime-1 : #f9fbe7 !default +$lime-2 : #f0f4c3 !default +$lime-3 : #e6ee9c !default +$lime-4 : #dce775 !default +$lime-5 : #d4e157 !default +$lime-6 : #cddc39 !default +$lime-7 : #c0ca33 !default +$lime-8 : #afb42b !default +$lime-9 : #9e9d24 !default +$lime-10 : #827717 !default +$lime-11 : #f4ff81 !default +$lime-12 : #eeff41 !default +$lime-13 : #c6ff00 !default +$lime-14 : #aeea00 !default +$yellow : #ffeb3b !default +$yellow-1 : #fffde7 !default +$yellow-2 : #fff9c4 !default +$yellow-3 : #fff59d !default +$yellow-4 : #fff176 !default +$yellow-5 : #ffee58 !default +$yellow-6 : #ffeb3b !default +$yellow-7 : #fdd835 !default +$yellow-8 : #fbc02d !default +$yellow-9 : #f9a825 !default +$yellow-10 : #f57f17 !default +$yellow-11 : #ffff8d !default +$yellow-12 : #ffff00 !default +$yellow-13 : #ffea00 !default +$yellow-14 : #ffd600 !default +$amber : #ffc107 !default +$amber-1 : #fff8e1 !default +$amber-2 : #ffecb3 !default +$amber-3 : #ffe082 !default +$amber-4 : #ffd54f !default +$amber-5 : #ffca28 !default +$amber-6 : #ffc107 !default +$amber-7 : #ffb300 !default +$amber-8 : #ffa000 !default +$amber-9 : #ff8f00 !default +$amber-10 : #ff6f00 !default +$amber-11 : #ffe57f !default +$amber-12 : #ffd740 !default +$amber-13 : #ffc400 !default +$amber-14 : #ffab00 !default +$orange : #ff9800 !default +$orange-1 : #fff3e0 !default +$orange-2 : #ffe0b2 !default +$orange-3 : #ffcc80 !default +$orange-4 : #ffb74d !default +$orange-5 : #ffa726 !default +$orange-6 : #ff9800 !default +$orange-7 : #fb8c00 !default +$orange-8 : #f57c00 !default +$orange-9 : #ef6c00 !default +$orange-10 : #e65100 !default +$orange-11 : #ffd180 !default +$orange-12 : #ffab40 !default +$orange-13 : #ff9100 !default +$orange-14 : #ff6d00 !default +$deep-orange : #ff5722 !default +$deep-orange-1 : #fbe9e7 !default +$deep-orange-2 : #ffccbc !default +$deep-orange-3 : #ffab91 !default +$deep-orange-4 : #ff8a65 !default +$deep-orange-5 : #ff7043 !default +$deep-orange-6 : #ff5722 !default +$deep-orange-7 : #f4511e !default +$deep-orange-8 : #e64a19 !default +$deep-orange-9 : #d84315 !default +$deep-orange-10 : #bf360c !default +$deep-orange-11 : #ff9e80 !default +$deep-orange-12 : #ff6e40 !default +$deep-orange-13 : #ff3d00 !default +$deep-orange-14 : #dd2c00 !default +$brown : #795548 !default +$brown-1 : #efebe9 !default +$brown-2 : #d7ccc8 !default +$brown-3 : #bcaaa4 !default +$brown-4 : #a1887f !default +$brown-5 : #8d6e63 !default +$brown-6 : #795548 !default +$brown-7 : #6d4c41 !default +$brown-8 : #5d4037 !default +$brown-9 : #4e342e !default +$brown-10 : #3e2723 !default +$brown-11 : #d7ccc8 !default +$brown-12 : #bcaaa4 !default +$brown-13 : #8d6e63 !default +$brown-14 : #5d4037 !default +$grey : #9e9e9e !default +$grey-1 : #fafafa !default +$grey-2 : #f5f5f5 !default +$grey-3 : #eeeeee !default +$grey-4 : #e0e0e0 !default +$grey-5 : #bdbdbd !default +$grey-6 : #9e9e9e !default +$grey-7 : #757575 !default +$grey-8 : #616161 !default +$grey-9 : #424242 !default +$grey-10 : #212121 !default +$grey-11 : #f5f5f5 !default +$grey-12 : #eeeeee !default +$grey-13 : #bdbdbd !default +$grey-14 : #616161 !default +$blue-grey : #607d8b !default +$blue-grey-1 : #eceff1 !default +$blue-grey-2 : #cfd8dc !default +$blue-grey-3 : #b0bec5 !default +$blue-grey-4 : #90a4ae !default +$blue-grey-5 : #78909c !default +$blue-grey-6 : #607d8b !default +$blue-grey-7 : #546e7a !default +$blue-grey-8 : #455a64 !default +$blue-grey-9 : #37474f !default +$blue-grey-10 : #263238 !default +$blue-grey-11 : #cfd8dc !default +$blue-grey-12 : #b0bec5 !default +$blue-grey-13 : #78909c !default +$blue-grey-14 : #455a64 !default + +$ios-statusbar-height : 20px !default + +$z-fab : 990 !default +$z-side : 1000 !default +$z-marginals : 2000 !default +$z-fixed-drawer : 3000 !default +$z-fullscreen : 6000 !default +$z-menu : 6000 !default +$z-top : 7000 !default +$z-tooltip : 9000 !default +$z-notify : 9500 !default +$z-max : 9998 !default + +$shadow-color : #000 !default +$shadow-transition : box-shadow .28s cubic-bezier(.4, 0, .2, 1) !default +$inset-shadow : 0 7px 9px -7px rgba($shadow-color, .7) inset !default +$inset-shadow-down : 0 -7px 9px -7px rgba($shadow-color, .7) inset !default + +$elevation-umbra : rgba($shadow-color, .2) !default +$elevation-penumbra : rgba($shadow-color, .14) !default +$elevation-ambient : rgba($shadow-color, .12) !default + +$shadow-0 : 0 0 0 $elevation-umbra, 0 0 0 $elevation-penumbra, 0 0 0 $elevation-ambient !default +$shadow-1 : 0 1px 3px $elevation-umbra, 0 1px 1px $elevation-penumbra, 0 2px 1px -1px $elevation-ambient !default +$shadow-2 : 0 1px 5px $elevation-umbra, 0 2px 2px $elevation-penumbra, 0 3px 1px -2px $elevation-ambient !default +$shadow-3 : 0 1px 8px $elevation-umbra, 0 3px 4px $elevation-penumbra, 0 3px 3px -2px $elevation-ambient !default +$shadow-4 : 0 2px 4px -1px $elevation-umbra, 0 4px 5px $elevation-penumbra, 0 1px 10px $elevation-ambient !default +$shadow-5 : 0 3px 5px -1px $elevation-umbra, 0 5px 8px $elevation-penumbra, 0 1px 14px $elevation-ambient !default +$shadow-6 : 0 3px 5px -1px $elevation-umbra, 0 6px 10px $elevation-penumbra, 0 1px 18px $elevation-ambient !default +$shadow-7 : 0 4px 5px -2px $elevation-umbra, 0 7px 10px 1px $elevation-penumbra, 0 2px 16px 1px $elevation-ambient !default +$shadow-8 : 0 5px 5px -3px $elevation-umbra, 0 8px 10px 1px $elevation-penumbra, 0 3px 14px 2px $elevation-ambient !default +$shadow-9 : 0 5px 6px -3px $elevation-umbra, 0 9px 12px 1px $elevation-penumbra, 0 3px 16px 2px $elevation-ambient !default +$shadow-10 : 0 6px 6px -3px $elevation-umbra, 0 10px 14px 1px $elevation-penumbra, 0 4px 18px 3px $elevation-ambient !default +$shadow-11 : 0 6px 7px -4px $elevation-umbra, 0 11px 15px 1px $elevation-penumbra, 0 4px 20px 3px $elevation-ambient !default +$shadow-12 : 0 7px 8px -4px $elevation-umbra, 0 12px 17px 2px $elevation-penumbra, 0 5px 22px 4px $elevation-ambient !default +$shadow-13 : 0 7px 8px -4px $elevation-umbra, 0 13px 19px 2px $elevation-penumbra, 0 5px 24px 4px $elevation-ambient !default +$shadow-14 : 0 7px 9px -4px $elevation-umbra, 0 14px 21px 2px $elevation-penumbra, 0 5px 26px 4px $elevation-ambient !default +$shadow-15 : 0 8px 9px -5px $elevation-umbra, 0 15px 22px 2px $elevation-penumbra, 0 6px 28px 5px $elevation-ambient !default +$shadow-16 : 0 8px 10px -5px $elevation-umbra, 0 16px 24px 2px $elevation-penumbra, 0 6px 30px 5px $elevation-ambient !default +$shadow-17 : 0 8px 11px -5px $elevation-umbra, 0 17px 26px 2px $elevation-penumbra, 0 6px 32px 5px $elevation-ambient !default +$shadow-18 : 0 9px 11px -5px $elevation-umbra, 0 18px 28px 2px $elevation-penumbra, 0 7px 34px 6px $elevation-ambient !default +$shadow-19 : 0 9px 12px -6px $elevation-umbra, 0 19px 29px 2px $elevation-penumbra, 0 7px 36px 6px $elevation-ambient !default +$shadow-20 : 0 10px 13px -6px $elevation-umbra, 0 20px 31px 3px $elevation-penumbra, 0 8px 38px 7px $elevation-ambient !default +$shadow-21 : 0 10px 13px -6px $elevation-umbra, 0 21px 33px 3px $elevation-penumbra, 0 8px 40px 7px $elevation-ambient !default +$shadow-22 : 0 10px 14px -6px $elevation-umbra, 0 22px 35px 3px $elevation-penumbra, 0 8px 42px 7px $elevation-ambient !default +$shadow-23 : 0 11px 14px -7px $elevation-umbra, 0 23px 36px 3px $elevation-penumbra, 0 9px 44px 8px $elevation-ambient !default +$shadow-24 : 0 11px 15px -7px $elevation-umbra, 0 24px 38px 3px $elevation-penumbra, 0 9px 46px 8px $elevation-ambient !default + +// sorry for long line; we need .sass and it doesn't support multi-line list +$shadows: ($shadow-1, $shadow-2, $shadow-3, $shadow-4, $shadow-5, $shadow-6, $shadow-7, $shadow-8, $shadow-9, $shadow-10, $shadow-11, $shadow-12, $shadow-13, $shadow-14, $shadow-15, $shadow-16, $shadow-17, $shadow-18, $shadow-19, $shadow-20, $shadow-21, $shadow-22, $shadow-23, $shadow-24) + +$shadow-up-0 : 0 0 0 $elevation-umbra, 0 0 0 $elevation-penumbra, 0 0 0 $elevation-ambient !default +$shadow-up-1 : 0 -1px 3px $elevation-umbra, 0 -1px 1px $elevation-penumbra, 0 -2px 1px -1px $elevation-ambient !default +$shadow-up-2 : 0 -1px 5px $elevation-umbra, 0 -2px 2px $elevation-penumbra, 0 -3px 1px -2px $elevation-ambient !default +$shadow-up-3 : 0 -1px 8px $elevation-umbra, 0 -3px 4px $elevation-penumbra, 0 -3px 3px -2px $elevation-ambient !default +$shadow-up-4 : 0 -2px 4px -1px $elevation-umbra, 0 -4px 5px $elevation-penumbra, 0 -1px 10px $elevation-ambient !default +$shadow-up-5 : 0 -3px 5px -1px $elevation-umbra, 0 -5px 8px $elevation-penumbra, 0 -1px 14px $elevation-ambient !default +$shadow-up-6 : 0 -3px 5px -1px $elevation-umbra, 0 -6px 10px $elevation-penumbra, 0 -1px 18px $elevation-ambient !default +$shadow-up-7 : 0 -4px 5px -2px $elevation-umbra, 0 -7px 10px 1px $elevation-penumbra, 0 -2px 16px 1px $elevation-ambient !default +$shadow-up-8 : 0 -5px 5px -3px $elevation-umbra, 0 -8px 10px 1px $elevation-penumbra, 0 -3px 14px 2px $elevation-ambient !default +$shadow-up-9 : 0 -5px 6px -3px $elevation-umbra, 0 -9px 12px 1px $elevation-penumbra, 0 -3px 16px 2px $elevation-ambient !default +$shadow-up-10 : 0 -6px 6px -3px $elevation-umbra, 0 -10px 14px 1px $elevation-penumbra, 0 -4px 18px 3px $elevation-ambient !default +$shadow-up-11 : 0 -6px 7px -4px $elevation-umbra, 0 -11px 15px 1px $elevation-penumbra, 0 -4px 20px 3px $elevation-ambient !default +$shadow-up-12 : 0 -7px 8px -4px $elevation-umbra, 0 -12px 17px 2px $elevation-penumbra, 0 -5px 22px 4px $elevation-ambient !default +$shadow-up-13 : 0 -7px 8px -4px $elevation-umbra, 0 -13px 19px 2px $elevation-penumbra, 0 -5px 24px 4px $elevation-ambient !default +$shadow-up-14 : 0 -7px 9px -4px $elevation-umbra, 0 -14px 21px 2px $elevation-penumbra, 0 -5px 26px 4px $elevation-ambient !default +$shadow-up-15 : 0 -8px 9px -5px $elevation-umbra, 0 -15px 22px 2px $elevation-penumbra, 0 -6px 28px 5px $elevation-ambient !default +$shadow-up-16 : 0 -8px 10px -5px $elevation-umbra, 0 -16px 24px 2px $elevation-penumbra, 0 -6px 30px 5px $elevation-ambient !default +$shadow-up-17 : 0 -8px 11px -5px $elevation-umbra, 0 -17px 26px 2px $elevation-penumbra, 0 -6px 32px 5px $elevation-ambient !default +$shadow-up-18 : 0 -9px 11px -5px $elevation-umbra, 0 -18px 28px 2px $elevation-penumbra, 0 -7px 34px 6px $elevation-ambient !default +$shadow-up-19 : 0 -9px 12px -6px $elevation-umbra, 0 -19px 29px 2px $elevation-penumbra, 0 -7px 36px 6px $elevation-ambient !default +$shadow-up-20 : 0 -10px 13px -6px $elevation-umbra, 0 -20px 31px 3px $elevation-penumbra, 0 -8px 38px 7px $elevation-ambient !default +$shadow-up-21 : 0 -10px 13px -6px $elevation-umbra, 0 -21px 33px 3px $elevation-penumbra, 0 -8px 40px 7px $elevation-ambient !default +$shadow-up-22 : 0 -10px 14px -6px $elevation-umbra, 0 -22px 35px 3px $elevation-penumbra, 0 -8px 42px 7px $elevation-ambient !default +$shadow-up-23 : 0 -11px 14px -7px $elevation-umbra, 0 -23px 36px 3px $elevation-penumbra, 0 -9px 44px 8px $elevation-ambient !default +$shadow-up-24 : 0 -11px 15px -7px $elevation-umbra, 0 -24px 38px 3px $elevation-penumbra, 0 -9px 46px 8px $elevation-ambient !default + +// sorry for long line; we need .sass and it doesn't support multi-line list +$shadows-up: ($shadow-up-1, $shadow-up-2, $shadow-up-3, $shadow-up-4, $shadow-up-5, $shadow-up-6, $shadow-up-7, $shadow-up-8, $shadow-up-9, $shadow-up-10, $shadow-up-11, $shadow-up-12, $shadow-up-13, $shadow-up-14, $shadow-up-15, $shadow-up-16, $shadow-up-17, $shadow-up-18, $shadow-up-19, $shadow-up-20, $shadow-up-21, $shadow-up-22, $shadow-up-23, $shadow-up-24) + +$generic-border-radius : 4px !default +$generic-hover-transition : .3s cubic-bezier(.25, .8, .5, 1) !default +$typography-font-family : 'Roboto', '-apple-system', 'Helvetica Neue', Helvetica, Arial, sans-serif !default +$min-line-height : 1.12 !default + +$button-border-radius : 3px !default +$button-padding : 4px 16px !default +$button-dense-padding : .285em !default +$button-transition : $generic-hover-transition !default +$button-font-size : 14px !default +$button-line-height : 1.715em !default +$button-font-weight : 500 !default +$button-shadow : $shadow-2 !default +$button-shadow-active : $shadow-5 !default +$button-rounded-border-radius : 28px !default +$button-push-border-radius : 7px !default + +$chat-message-received-color : #000 !default +$chat-message-received-bg : $green-4 !default +$chat-message-sent-color : #000 !default +$chat-message-sent-bg : $grey-4 !default +$chat-message-avatar-size : 48px !default +$chat-message-border-radius : $generic-border-radius !default +$chat-message-distance : 8px !default +$chat-message-text-padding : 8px !default + +$item-base-color : $grey-5 !default + +$editor-border-color : $separator-color !default +$editor-border-dark-color : $separator-dark-color !default +$editor-content-padding : 10px !default +$editor-content-min-height : 10em !default +$editor-toolbar-padding : 4px !default +$editor-hr-color : $editor-border-color !default +$editor-hr-dark-color : $editor-border-dark-color !default +$editor-button-gutter : 4px !default + +$table-transition : $generic-hover-transition !default +$table-border-radius : $generic-border-radius !default +$table-box-shadow : $shadow-2 !default + +$table-border-color : $separator-color !default +$table-hover-background : rgba(0, 0, 0, .03) !default +$table-selected-background : rgba(0, 0, 0, .06) !default + +$table-dark-border-color : $separator-dark-color !default +$table-dark-hover-background : rgba(255, 255, 255, .07) !default +$table-dark-selected-background : rgba(255, 255, 255, .1) !default + +$toolbar-min-height : 50px !default +$toolbar-padding : 0 12px !default +$toolbar-inset-size : 58px !default +$toolbar-title-font-size : 21px !default +$toolbar-title-font-weight : normal !default +$toolbar-title-letter-spacing : .01em !default +$toolbar-title-padding : 0 12px !default + +$layout-border : 1px solid $separator-color !default +$layout-shadow : 0 0 10px 2px rgba(0,0,0,0.2), 0 0px 10px rgba(0,0,0,0.24) !default + +$menu-background : #fff !default +$menu-box-shadow : $shadow-2 !default +$menu-max-width : 95vw !default + +$rating-grade-color : $yellow !default +$rating-shadow : 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24) !default + +$tooltip-color : #fafafa !default +$tooltip-background : $grey-7 !default +$tooltip-padding : 6px 10px !default +$tooltip-border-radius : $generic-border-radius !default +$tooltip-fontsize : 10px !default +$tooltip-mobile-padding : 8px 16px !default +$tooltip-mobile-fontsize : 14px !default + +$option-focus-transition : .22s cubic-bezier(0,0,.2,1) !default + +$input-font-size : 14px !default +$input-text-color : rgba(0,0,0,.87) !default +$input-label-color : rgba(0,0,0,.6) !default +$input-autofill-color : inherit !default + +$img-width : 100% !default +$img-background-repeat : no-repeat !default +$img-loading-font-size : 50px !default +$img-content-position : absolute !default +$img-content-padding : 16px !default +$img-content-color : #fff !default +$img-content-background : rgba(0, 0, 0, .47) !default diff --git a/src/css/variables.styl b/src/css/variables.styl new file mode 100644 index 00000000000..bc77bbd86bc --- /dev/null +++ b/src/css/variables.styl @@ -0,0 +1,647 @@ +$space-base ?= 16px +$space-x-base ?= $space-base +$space-y-base ?= $space-base + +$space-none ?= { x: 0, y: 0 } +$space-xs ?= { x: ($space-x-base * .25), y: ($space-y-base * .25) } +$space-sm ?= { x: ($space-x-base * .5), y: ($space-y-base * .5) } +$space-md ?= { x: $space-x-base, y: $space-y-base } +$space-lg ?= { x: ($space-x-base * 1.5), y: ($space-y-base * 1.5) } +$space-xl ?= { x: ($space-x-base * 3), y: ($space-y-base * 3) } + +$spaces ?= { + none: $space-none, + xs: $space-xs, + sm: $space-sm, + md: $space-md, + lg: $space-lg, + xl: $space-xl +} + +$animate-duration ?= .3s +$animate-delay ?= .3s +$animate-repeat ?= 1 + +// Max width at which point +// current size ends +$breakpoint-xs ?= 599px +$breakpoint-sm ?= 1023px +$breakpoint-md ?= 1439px +$breakpoint-lg ?= 1919px + +$flex-cols ?= 12 +$flex-gutter-xs ?= ($space-base * .25) +$flex-gutter-sm ?= ($space-base * .5) +$flex-gutter-md ?= $space-base +$flex-gutter-lg ?= ($space-base * 1.5) +$flex-gutter-xl ?= ($space-base * 3) + +$body-font-size ?= 14px +$body-line-height ?= 1.5 + +$flex-gutter ?= { + none: 0, + xs: $flex-gutter-xs, + sm: $flex-gutter-sm, + md: $flex-gutter-md, + lg: $flex-gutter-lg, + xl: $flex-gutter-xl +} +$sizes ?= { + xs: 0, // Extra small screen + sm: $breakpoint-xs + 1, // Small screen + md: $breakpoint-sm + 1, // Medium screen + lg: $breakpoint-md + 1, // Large screen + xl: $breakpoint-lg + 1 // Extra large screen +} + +$breakpoint-xs-max ?= ($sizes.sm - 0.02) + +$breakpoint-sm-min ?= $sizes.sm +$breakpoint-sm-max ?= ($sizes.md - 0.02) + +$breakpoint-md-min ?= $sizes.md +$breakpoint-md-max ?= ($sizes.lg - 0.02) + +$breakpoint-lg-min ?= $sizes.lg +$breakpoint-lg-max ?= ($sizes.xl - 0.02) + +$breakpoint-xl-min ?= $sizes.xl + +$headings ?= { + h1: { + size: 6rem, + line-height: 6rem, + weight: 300, + letter-spacing: -.01562em + }, + h2: { + size: 3.75rem, + line-height: 3.75rem, + letter-spacing: -.00833em, + weight: 300 + }, + h3: { + size: 3rem, + line-height: 3.125rem, + letter-spacing: normal, + weight: 400 + }, + h4: { + size: 2.125rem, + line-height: 2.5rem, + letter-spacing: .00735em, + weight: 400 + }, + h5: { + size: 1.5rem, + line-height: 2rem, + letter-spacing: normal, + weight: 400 + }, + h6: { + size: 1.25rem, + line-height: 2rem, + letter-spacing: .0125em, + weight: 500 + }, + subtitle1: { + size: 1rem, + line-height: 1.75rem, + letter-spacing: .00937em, + weight: 400 + }, + subtitle2: { + size: .875rem, + line-height: 1.375rem, + letter-spacing: .00714em, + weight: 500 + }, + body1: { + size: 1rem, + line-height: 1.5rem, + letter-spacing: .03125em, + weight: 400 + }, + body2: { + size: .875rem, + line-height: 1.25rem, + letter-spacing: .01786em, + weight: 400 + }, + overline: { + size: .75rem, + line-height: 2rem, + letter-spacing: .16667em, + weight: 500 + }, + caption: { + size: .75rem, + line-height: 1.25rem, + letter-spacing: .03333em, + weight: 400 + } +} + +$h-tags ?= { + h1: $headings.h1, + h2: $headings.h2, + h3: $headings.h3, + h4: $headings.h4, + h5: $headings.h5, + h6: $headings.h6 +} + +$text-weights ?= { + thin: 100, + light: 300, + regular: 400, + medium: 500, + bold: 700, + bolder: 900 +} + +$primary ?= #1976D2 +$secondary ?= #26A69A +$accent ?= #9C27B0 + +// used by light mode +$light-page ?= #ffffff +$light-text ?= #000000 + +// used by dark mode +$dark-page ?= #121212 +$dark-text ?= #ffffff +$dark ?= #1d1d1d + +$positive ?= #21BA45 +$negative ?= #C10015 +$info ?= #31CCEC +$warning ?= #F2C037 + +$dialog-plugin-light ?= $primary +$dialog-plugin-dark ?= #ffc107 + +$notify-background ?= #323232 + +$chip-background-light ?= #e0e0e0 +$chip-background-dark ?= #323232 + +$backdrop-background ?= #000000 + +$dimmed-background ?= rgba(0, 0, 0, .4) +$light-dimmed-background ?= rgba(255, 255, 255, .6) + +$separator-color ?= rgba(0, 0, 0, .12) +$separator-dark-color ?= rgba(255, 255, 255, .28) + +$red ?= #f44336 +$red-1 ?= #ffebee +$red-2 ?= #ffcdd2 +$red-3 ?= #ef9a9a +$red-4 ?= #e57373 +$red-5 ?= #ef5350 +$red-6 ?= #f44336 +$red-7 ?= #e53935 +$red-8 ?= #d32f2f +$red-9 ?= #c62828 +$red-10 ?= #b71c1c +$red-11 ?= #ff8a80 +$red-12 ?= #ff5252 +$red-13 ?= #ff1744 +$red-14 ?= #d50000 +$pink ?= #e91e63 +$pink-1 ?= #fce4ec +$pink-2 ?= #f8bbd0 +$pink-3 ?= #f48fb1 +$pink-4 ?= #f06292 +$pink-5 ?= #ec407a +$pink-6 ?= #e91e63 +$pink-7 ?= #d81b60 +$pink-8 ?= #c2185b +$pink-9 ?= #ad1457 +$pink-10 ?= #880e4f +$pink-11 ?= #ff80ab +$pink-12 ?= #ff4081 +$pink-13 ?= #f50057 +$pink-14 ?= #c51162 +$purple ?= #9c27b0 +$purple-1 ?= #f3e5f5 +$purple-2 ?= #e1bee7 +$purple-3 ?= #ce93d8 +$purple-4 ?= #ba68c8 +$purple-5 ?= #ab47bc +$purple-6 ?= #9c27b0 +$purple-7 ?= #8e24aa +$purple-8 ?= #7b1fa2 +$purple-9 ?= #6a1b9a +$purple-10 ?= #4a148c +$purple-11 ?= #ea80fc +$purple-12 ?= #e040fb +$purple-13 ?= #d500f9 +$purple-14 ?= #aa00ff +$deep-purple ?= #673ab7 +$deep-purple-1 ?= #ede7f6 +$deep-purple-2 ?= #d1c4e9 +$deep-purple-3 ?= #b39ddb +$deep-purple-4 ?= #9575cd +$deep-purple-5 ?= #7e57c2 +$deep-purple-6 ?= #673ab7 +$deep-purple-7 ?= #5e35b1 +$deep-purple-8 ?= #512da8 +$deep-purple-9 ?= #4527a0 +$deep-purple-10 ?= #311b92 +$deep-purple-11 ?= #b388ff +$deep-purple-12 ?= #7c4dff +$deep-purple-13 ?= #651fff +$deep-purple-14 ?= #6200ea +$indigo ?= #3f51b5 +$indigo-1 ?= #e8eaf6 +$indigo-2 ?= #c5cae9 +$indigo-3 ?= #9fa8da +$indigo-4 ?= #7986cb +$indigo-5 ?= #5c6bc0 +$indigo-6 ?= #3f51b5 +$indigo-7 ?= #3949ab +$indigo-8 ?= #303f9f +$indigo-9 ?= #283593 +$indigo-10 ?= #1a237e +$indigo-11 ?= #8c9eff +$indigo-12 ?= #536dfe +$indigo-13 ?= #3d5afe +$indigo-14 ?= #304ffe +$blue ?= #2196f3 +$blue-1 ?= #e3f2fd +$blue-2 ?= #bbdefb +$blue-3 ?= #90caf9 +$blue-4 ?= #64b5f6 +$blue-5 ?= #42a5f5 +$blue-6 ?= #2196f3 +$blue-7 ?= #1e88e5 +$blue-8 ?= #1976d2 +$blue-9 ?= #1565c0 +$blue-10 ?= #0d47a1 +$blue-11 ?= #82b1ff +$blue-12 ?= #448aff +$blue-13 ?= #2979ff +$blue-14 ?= #2962ff +$light-blue ?= #03a9f4 +$light-blue-1 ?= #e1f5fe +$light-blue-2 ?= #b3e5fc +$light-blue-3 ?= #81d4fa +$light-blue-4 ?= #4fc3f7 +$light-blue-5 ?= #29b6f6 +$light-blue-6 ?= #03a9f4 +$light-blue-7 ?= #039be5 +$light-blue-8 ?= #0288d1 +$light-blue-9 ?= #0277bd +$light-blue-10 ?= #01579b +$light-blue-11 ?= #80d8ff +$light-blue-12 ?= #40c4ff +$light-blue-13 ?= #00b0ff +$light-blue-14 ?= #0091ea +$cyan ?= #00bcd4 +$cyan-1 ?= #e0f7fa +$cyan-2 ?= #b2ebf2 +$cyan-3 ?= #80deea +$cyan-4 ?= #4dd0e1 +$cyan-5 ?= #26c6da +$cyan-6 ?= #00bcd4 +$cyan-7 ?= #00acc1 +$cyan-8 ?= #0097a7 +$cyan-9 ?= #00838f +$cyan-10 ?= #006064 +$cyan-11 ?= #84ffff +$cyan-12 ?= #18ffff +$cyan-13 ?= #00e5ff +$cyan-14 ?= #00b8d4 +$teal ?= #009688 +$teal-1 ?= #e0f2f1 +$teal-2 ?= #b2dfdb +$teal-3 ?= #80cbc4 +$teal-4 ?= #4db6ac +$teal-5 ?= #26a69a +$teal-6 ?= #009688 +$teal-7 ?= #00897b +$teal-8 ?= #00796b +$teal-9 ?= #00695c +$teal-10 ?= #004d40 +$teal-11 ?= #a7ffeb +$teal-12 ?= #64ffda +$teal-13 ?= #1de9b6 +$teal-14 ?= #00bfa5 +$green ?= #4caf50 +$green-1 ?= #e8f5e9 +$green-2 ?= #c8e6c9 +$green-3 ?= #a5d6a7 +$green-4 ?= #81c784 +$green-5 ?= #66bb6a +$green-6 ?= #4caf50 +$green-7 ?= #43a047 +$green-8 ?= #388e3c +$green-9 ?= #2e7d32 +$green-10 ?= #1b5e20 +$green-11 ?= #b9f6ca +$green-12 ?= #69f0ae +$green-13 ?= #00e676 +$green-14 ?= #00c853 +$light-green ?= #8bc34a +$light-green-1 ?= #f1f8e9 +$light-green-2 ?= #dcedc8 +$light-green-3 ?= #c5e1a5 +$light-green-4 ?= #aed581 +$light-green-5 ?= #9ccc65 +$light-green-6 ?= #8bc34a +$light-green-7 ?= #7cb342 +$light-green-8 ?= #689f38 +$light-green-9 ?= #558b2f +$light-green-10 ?= #33691e +$light-green-11 ?= #ccff90 +$light-green-12 ?= #b2ff59 +$light-green-13 ?= #76ff03 +$light-green-14 ?= #64dd17 +$lime ?= #cddc39 +$lime-1 ?= #f9fbe7 +$lime-2 ?= #f0f4c3 +$lime-3 ?= #e6ee9c +$lime-4 ?= #dce775 +$lime-5 ?= #d4e157 +$lime-6 ?= #cddc39 +$lime-7 ?= #c0ca33 +$lime-8 ?= #afb42b +$lime-9 ?= #9e9d24 +$lime-10 ?= #827717 +$lime-11 ?= #f4ff81 +$lime-12 ?= #eeff41 +$lime-13 ?= #c6ff00 +$lime-14 ?= #aeea00 +$yellow ?= #ffeb3b +$yellow-1 ?= #fffde7 +$yellow-2 ?= #fff9c4 +$yellow-3 ?= #fff59d +$yellow-4 ?= #fff176 +$yellow-5 ?= #ffee58 +$yellow-6 ?= #ffeb3b +$yellow-7 ?= #fdd835 +$yellow-8 ?= #fbc02d +$yellow-9 ?= #f9a825 +$yellow-10 ?= #f57f17 +$yellow-11 ?= #ffff8d +$yellow-12 ?= #ffff00 +$yellow-13 ?= #ffea00 +$yellow-14 ?= #ffd600 +$amber ?= #ffc107 +$amber-1 ?= #fff8e1 +$amber-2 ?= #ffecb3 +$amber-3 ?= #ffe082 +$amber-4 ?= #ffd54f +$amber-5 ?= #ffca28 +$amber-6 ?= #ffc107 +$amber-7 ?= #ffb300 +$amber-8 ?= #ffa000 +$amber-9 ?= #ff8f00 +$amber-10 ?= #ff6f00 +$amber-11 ?= #ffe57f +$amber-12 ?= #ffd740 +$amber-13 ?= #ffc400 +$amber-14 ?= #ffab00 +$orange ?= #ff9800 +$orange-1 ?= #fff3e0 +$orange-2 ?= #ffe0b2 +$orange-3 ?= #ffcc80 +$orange-4 ?= #ffb74d +$orange-5 ?= #ffa726 +$orange-6 ?= #ff9800 +$orange-7 ?= #fb8c00 +$orange-8 ?= #f57c00 +$orange-9 ?= #ef6c00 +$orange-10 ?= #e65100 +$orange-11 ?= #ffd180 +$orange-12 ?= #ffab40 +$orange-13 ?= #ff9100 +$orange-14 ?= #ff6d00 +$deep-orange ?= #ff5722 +$deep-orange-1 ?= #fbe9e7 +$deep-orange-2 ?= #ffccbc +$deep-orange-3 ?= #ffab91 +$deep-orange-4 ?= #ff8a65 +$deep-orange-5 ?= #ff7043 +$deep-orange-6 ?= #ff5722 +$deep-orange-7 ?= #f4511e +$deep-orange-8 ?= #e64a19 +$deep-orange-9 ?= #d84315 +$deep-orange-10 ?= #bf360c +$deep-orange-11 ?= #ff9e80 +$deep-orange-12 ?= #ff6e40 +$deep-orange-13 ?= #ff3d00 +$deep-orange-14 ?= #dd2c00 +$brown ?= #795548 +$brown-1 ?= #efebe9 +$brown-2 ?= #d7ccc8 +$brown-3 ?= #bcaaa4 +$brown-4 ?= #a1887f +$brown-5 ?= #8d6e63 +$brown-6 ?= #795548 +$brown-7 ?= #6d4c41 +$brown-8 ?= #5d4037 +$brown-9 ?= #4e342e +$brown-10 ?= #3e2723 +$brown-11 ?= #d7ccc8 +$brown-12 ?= #bcaaa4 +$brown-13 ?= #8d6e63 +$brown-14 ?= #5d4037 +$grey ?= #9e9e9e +$grey-1 ?= #fafafa +$grey-2 ?= #f5f5f5 +$grey-3 ?= #eeeeee +$grey-4 ?= #e0e0e0 +$grey-5 ?= #bdbdbd +$grey-6 ?= #9e9e9e +$grey-7 ?= #757575 +$grey-8 ?= #616161 +$grey-9 ?= #424242 +$grey-10 ?= #212121 +$grey-11 ?= #f5f5f5 +$grey-12 ?= #eeeeee +$grey-13 ?= #bdbdbd +$grey-14 ?= #616161 +$blue-grey ?= #607d8b +$blue-grey-1 ?= #eceff1 +$blue-grey-2 ?= #cfd8dc +$blue-grey-3 ?= #b0bec5 +$blue-grey-4 ?= #90a4ae +$blue-grey-5 ?= #78909c +$blue-grey-6 ?= #607d8b +$blue-grey-7 ?= #546e7a +$blue-grey-8 ?= #455a64 +$blue-grey-9 ?= #37474f +$blue-grey-10 ?= #263238 +$blue-grey-11 ?= #cfd8dc +$blue-grey-12 ?= #b0bec5 +$blue-grey-13 ?= #78909c +$blue-grey-14 ?= #455a64 + +$ios-statusbar-height ?= 20px + +$z-fab ?= 990 +$z-side ?= 1000 +$z-marginals ?= 2000 +$z-fixed-drawer ?= 3000 +$z-fullscreen ?= 6000 +$z-menu ?= 6000 +$z-top ?= 7000 +$z-tooltip ?= 9000 +$z-notify ?= 9500 +$z-max ?= 9998 + +$shadow-color ?= black +$shadow-transition ?= box-shadow .28s cubic-bezier(.4, 0, .2, 1) +$inset-shadow ?= 0 7px 9px -7px alpha($shadow-color, .7) inset +$inset-shadow-down ?= 0 -7px 9px -7px alpha($shadow-color, .7) inset + +$elevation-umbra ?= alpha($shadow-color, .2) +$elevation-penumbra ?= alpha($shadow-color, .14) +$elevation-ambient ?= alpha($shadow-color, .12) + +$shadow-0 ?= 0 0 0 $elevation-umbra, 0 0 0 $elevation-penumbra, 0 0 0 $elevation-ambient +$shadow-1 ?= 0 1px 3px $elevation-umbra, 0 1px 1px $elevation-penumbra, 0 2px 1px -1px $elevation-ambient +$shadow-2 ?= 0 1px 5px $elevation-umbra, 0 2px 2px $elevation-penumbra, 0 3px 1px -2px $elevation-ambient +$shadow-3 ?= 0 1px 8px $elevation-umbra, 0 3px 4px $elevation-penumbra, 0 3px 3px -2px $elevation-ambient +$shadow-4 ?= 0 2px 4px -1px $elevation-umbra, 0 4px 5px $elevation-penumbra, 0 1px 10px $elevation-ambient +$shadow-5 ?= 0 3px 5px -1px $elevation-umbra, 0 5px 8px $elevation-penumbra, 0 1px 14px $elevation-ambient +$shadow-6 ?= 0 3px 5px -1px $elevation-umbra, 0 6px 10px $elevation-penumbra, 0 1px 18px $elevation-ambient +$shadow-7 ?= 0 4px 5px -2px $elevation-umbra, 0 7px 10px 1px $elevation-penumbra, 0 2px 16px 1px $elevation-ambient +$shadow-8 ?= 0 5px 5px -3px $elevation-umbra, 0 8px 10px 1px $elevation-penumbra, 0 3px 14px 2px $elevation-ambient +$shadow-9 ?= 0 5px 6px -3px $elevation-umbra, 0 9px 12px 1px $elevation-penumbra, 0 3px 16px 2px $elevation-ambient +$shadow-10 ?= 0 6px 6px -3px $elevation-umbra, 0 10px 14px 1px $elevation-penumbra, 0 4px 18px 3px $elevation-ambient +$shadow-11 ?= 0 6px 7px -4px $elevation-umbra, 0 11px 15px 1px $elevation-penumbra, 0 4px 20px 3px $elevation-ambient +$shadow-12 ?= 0 7px 8px -4px $elevation-umbra, 0 12px 17px 2px $elevation-penumbra, 0 5px 22px 4px $elevation-ambient +$shadow-13 ?= 0 7px 8px -4px $elevation-umbra, 0 13px 19px 2px $elevation-penumbra, 0 5px 24px 4px $elevation-ambient +$shadow-14 ?= 0 7px 9px -4px $elevation-umbra, 0 14px 21px 2px $elevation-penumbra, 0 5px 26px 4px $elevation-ambient +$shadow-15 ?= 0 8px 9px -5px $elevation-umbra, 0 15px 22px 2px $elevation-penumbra, 0 6px 28px 5px $elevation-ambient +$shadow-16 ?= 0 8px 10px -5px $elevation-umbra, 0 16px 24px 2px $elevation-penumbra, 0 6px 30px 5px $elevation-ambient +$shadow-17 ?= 0 8px 11px -5px $elevation-umbra, 0 17px 26px 2px $elevation-penumbra, 0 6px 32px 5px $elevation-ambient +$shadow-18 ?= 0 9px 11px -5px $elevation-umbra, 0 18px 28px 2px $elevation-penumbra, 0 7px 34px 6px $elevation-ambient +$shadow-19 ?= 0 9px 12px -6px $elevation-umbra, 0 19px 29px 2px $elevation-penumbra, 0 7px 36px 6px $elevation-ambient +$shadow-20 ?= 0 10px 13px -6px $elevation-umbra, 0 20px 31px 3px $elevation-penumbra, 0 8px 38px 7px $elevation-ambient +$shadow-21 ?= 0 10px 13px -6px $elevation-umbra, 0 21px 33px 3px $elevation-penumbra, 0 8px 40px 7px $elevation-ambient +$shadow-22 ?= 0 10px 14px -6px $elevation-umbra, 0 22px 35px 3px $elevation-penumbra, 0 8px 42px 7px $elevation-ambient +$shadow-23 ?= 0 11px 14px -7px $elevation-umbra, 0 23px 36px 3px $elevation-penumbra, 0 9px 44px 8px $elevation-ambient +$shadow-24 ?= 0 11px 15px -7px $elevation-umbra, 0 24px 38px 3px $elevation-penumbra, 0 9px 46px 8px $elevation-ambient + +$shadow-up-0 ?= 0 0 0 $elevation-umbra, 0 0 0 $elevation-penumbra, 0 0 0 $elevation-ambient +$shadow-up-1 ?= 0 -1px 3px $elevation-umbra, 0 -1px 1px $elevation-penumbra, 0 -2px 1px -1px $elevation-ambient +$shadow-up-2 ?= 0 -1px 5px $elevation-umbra, 0 -2px 2px $elevation-penumbra, 0 -3px 1px -2px $elevation-ambient +$shadow-up-3 ?= 0 -1px 8px $elevation-umbra, 0 -3px 4px $elevation-penumbra, 0 -3px 3px -2px $elevation-ambient +$shadow-up-4 ?= 0 -2px 4px -1px $elevation-umbra, 0 -4px 5px $elevation-penumbra, 0 -1px 10px $elevation-ambient +$shadow-up-5 ?= 0 -3px 5px -1px $elevation-umbra, 0 -5px 8px $elevation-penumbra, 0 -1px 14px $elevation-ambient +$shadow-up-6 ?= 0 -3px 5px -1px $elevation-umbra, 0 -6px 10px $elevation-penumbra, 0 -1px 18px $elevation-ambient +$shadow-up-7 ?= 0 -4px 5px -2px $elevation-umbra, 0 -7px 10px 1px $elevation-penumbra, 0 -2px 16px 1px $elevation-ambient +$shadow-up-8 ?= 0 -5px 5px -3px $elevation-umbra, 0 -8px 10px 1px $elevation-penumbra, 0 -3px 14px 2px $elevation-ambient +$shadow-up-9 ?= 0 -5px 6px -3px $elevation-umbra, 0 -9px 12px 1px $elevation-penumbra, 0 -3px 16px 2px $elevation-ambient +$shadow-up-10 ?= 0 -6px 6px -3px $elevation-umbra, 0 -10px 14px 1px $elevation-penumbra, 0 -4px 18px 3px $elevation-ambient +$shadow-up-11 ?= 0 -6px 7px -4px $elevation-umbra, 0 -11px 15px 1px $elevation-penumbra, 0 -4px 20px 3px $elevation-ambient +$shadow-up-12 ?= 0 -7px 8px -4px $elevation-umbra, 0 -12px 17px 2px $elevation-penumbra, 0 -5px 22px 4px $elevation-ambient +$shadow-up-13 ?= 0 -7px 8px -4px $elevation-umbra, 0 -13px 19px 2px $elevation-penumbra, 0 -5px 24px 4px $elevation-ambient +$shadow-up-14 ?= 0 -7px 9px -4px $elevation-umbra, 0 -14px 21px 2px $elevation-penumbra, 0 -5px 26px 4px $elevation-ambient +$shadow-up-15 ?= 0 -8px 9px -5px $elevation-umbra, 0 -15px 22px 2px $elevation-penumbra, 0 -6px 28px 5px $elevation-ambient +$shadow-up-16 ?= 0 -8px 10px -5px $elevation-umbra, 0 -16px 24px 2px $elevation-penumbra, 0 -6px 30px 5px $elevation-ambient +$shadow-up-17 ?= 0 -8px 11px -5px $elevation-umbra, 0 -17px 26px 2px $elevation-penumbra, 0 -6px 32px 5px $elevation-ambient +$shadow-up-18 ?= 0 -9px 11px -5px $elevation-umbra, 0 -18px 28px 2px $elevation-penumbra, 0 -7px 34px 6px $elevation-ambient +$shadow-up-19 ?= 0 -9px 12px -6px $elevation-umbra, 0 -19px 29px 2px $elevation-penumbra, 0 -7px 36px 6px $elevation-ambient +$shadow-up-20 ?= 0 -10px 13px -6px $elevation-umbra, 0 -20px 31px 3px $elevation-penumbra, 0 -8px 38px 7px $elevation-ambient +$shadow-up-21 ?= 0 -10px 13px -6px $elevation-umbra, 0 -21px 33px 3px $elevation-penumbra, 0 -8px 40px 7px $elevation-ambient +$shadow-up-22 ?= 0 -10px 14px -6px $elevation-umbra, 0 -22px 35px 3px $elevation-penumbra, 0 -8px 42px 7px $elevation-ambient +$shadow-up-23 ?= 0 -11px 14px -7px $elevation-umbra, 0 -23px 36px 3px $elevation-penumbra, 0 -9px 44px 8px $elevation-ambient +$shadow-up-24 ?= 0 -11px 15px -7px $elevation-umbra, 0 -24px 38px 3px $elevation-penumbra, 0 -9px 46px 8px $elevation-ambient + + +$generic-border-radius ?= 4px +$generic-hover-transition ?= .3s cubic-bezier(.25, .8, .5, 1) +$typography-font-family ?= 'Roboto', '-apple-system', 'Helvetica Neue', Helvetica, Arial, sans-serif +$min-line-height ?= 1.12 + +$button-border-radius ?= 3px +$button-padding ?= 4px 16px +$button-dense-padding ?= .285em +$button-transition ?= $generic-hover-transition +$button-font-size ?= 14px +$button-line-height ?= 1.715em +$button-font-weight ?= 500 +$button-shadow ?= $shadow-2 +$button-shadow-active ?= $shadow-5 +$button-rounded-border-radius ?= 28px +$button-push-border-radius ?= 7px + +$chat-message-received-color ?= black +$chat-message-received-bg ?= $green-4 +$chat-message-sent-color ?= black +$chat-message-sent-bg ?= $grey-4 +$chat-message-avatar-size ?= 48px +$chat-message-border-radius ?= $generic-border-radius +$chat-message-distance ?= 8px +$chat-message-text-padding ?= 8px + +$item-base-color ?= $grey-5 + +$editor-border-color ?= $separator-color +$editor-border-dark-color ?= $separator-dark-color +$editor-content-padding ?= 10px +$editor-content-min-height ?= 10em +$editor-toolbar-padding ?= 4px +$editor-hr-color ?= $editor-border-color +$editor-hr-dark-color ?= $editor-border-dark-color +$editor-button-gutter ?= 4px + +$table-transition ?= $generic-hover-transition +$table-border-radius ?= $generic-border-radius +$table-box-shadow ?= $shadow-2 + +$table-border-color ?= $separator-color +$table-hover-background ?= rgba(0, 0, 0, .03) +$table-selected-background ?= rgba(0, 0, 0, .06) + +$table-dark-border-color ?= $separator-dark-color +$table-dark-hover-background ?= rgba(255, 255, 255, .07) +$table-dark-selected-background ?= rgba(255, 255, 255, .1) + +$toolbar-min-height ?= 50px +$toolbar-padding ?= 0 12px +$toolbar-inset-size ?= 58px +$toolbar-title-font-size ?= 21px +$toolbar-title-font-weight ?= normal +$toolbar-title-letter-spacing ?= .01em +$toolbar-title-padding ?= 0 12px + +$layout-border ?= 1px solid $separator-color +$layout-shadow ?= 0 0 10px 2px rgba(0,0,0,0.2), 0 0px 10px rgba(0,0,0,0.24) + +$menu-background ?= white +$menu-box-shadow ?= $shadow-2 +$menu-max-width ?= 95vw + +$rating-grade-color ?= $yellow +$rating-shadow ?= 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24) + +$tooltip-color ?= #fafafa +$tooltip-background ?= $grey-7 +$tooltip-padding ?= 6px 10px +$tooltip-border-radius ?= $generic-border-radius +$tooltip-fontsize ?= 10px +$tooltip-mobile-padding ?= 8px 16px +$tooltip-mobile-fontsize ?= 14px + +$option-focus-transition ?= .22s cubic-bezier(0,0,.2,1) + +$input-font-size ?= 14px +$input-text-color ?= rgba(0,0,0,.87) +$input-label-color ?= rgba(0,0,0,.6) +$input-autofill-color ?= inherit + +$img-width ?= 100% +$img-background-repeat ?= no-repeat +$img-loading-font-size ?= 50px +$img-content-position ?= absolute +$img-content-padding ?= 16px +$img-content-color ?= white +$img-content-background ?= rgba(0, 0, 0, .47) diff --git a/src/directives.js b/src/directives.js new file mode 100644 index 00000000000..680d4087e89 --- /dev/null +++ b/src/directives.js @@ -0,0 +1,29 @@ +import ClosePopup from './directives/ClosePopup.js' +import GoBack from './directives/GoBack.js' +import Intersection from './directives/Intersection.js' +import KeyGroupNavigation from './directives/KeyGroupNavigation.js' +import Morph from './directives/Morph.js' +import Mutation from './directives/Mutation.js' +import Ripple from './directives/Ripple.js' +import ScrollFire from './directives/ScrollFire.js' +import Scroll from './directives/Scroll.js' +import TouchHold from './directives/TouchHold.js' +import TouchPan from './directives/TouchPan.js' +import TouchRepeat from './directives/TouchRepeat.js' +import TouchSwipe from './directives/TouchSwipe.js' + +export { + ClosePopup, + GoBack, + Intersection, + KeyGroupNavigation, + Morph, + Mutation, + Ripple, + ScrollFire, + Scroll, + TouchHold, + TouchPan, + TouchRepeat, + TouchSwipe +} diff --git a/src/directives/ClosePopup.js b/src/directives/ClosePopup.js new file mode 100644 index 00000000000..c6d8533749e --- /dev/null +++ b/src/directives/ClosePopup.js @@ -0,0 +1,76 @@ +import { closePortals } from '../mixins/portal.js' +import { isKeyCode } from '../utils/private/key-composition.js' + +/* + * depth + * < 0 --> close all chain + * 0 --> disabled + * > 0 --> close chain up to N parent + */ + +function getDepth (value) { + if (value === false) { + return 0 + } + if (value === true || value === void 0) { + return 1 + } + + const depth = parseInt(value, 10) + return isNaN(depth) ? 0 : depth +} + +function destroy (el) { + const ctx = el.__qclosepopup + if (ctx !== void 0) { + el.removeEventListener('click', ctx.handler) + el.removeEventListener('keyup', ctx.handlerKey) + delete el.__qclosepopup + } +} + +export default { + name: 'close-popup', + + bind (el, { value }, vnode) { + if (el.__qclosepopup !== void 0) { + destroy(el) + el.__qclosepopup_destroyed = true + } + + const ctx = { + depth: getDepth(value), + + handler (evt) { + // allow @click to be emitted + ctx.depth !== 0 && setTimeout(() => { + closePortals(vnode.componentInstance || vnode.context, evt, ctx.depth) + }) + }, + + handlerKey (evt) { + isKeyCode(evt, 13) === true && ctx.handler(evt) + } + } + + el.__qclosepopup = ctx + + el.addEventListener('click', ctx.handler) + el.addEventListener('keyup', ctx.handlerKey) + }, + + update (el, { value, oldValue }) { + if (el.__qclosepopup !== void 0 && oldValue !== value) { + el.__qclosepopup.depth = getDepth(value) + } + }, + + unbind (el) { + if (el.__qclosepopup_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qclosepopup_destroyed + } + } +} diff --git a/src/directives/ClosePopup.json b/src/directives/ClosePopup.json new file mode 100644 index 00000000000..bfa57d5d6fb --- /dev/null +++ b/src/directives/ClosePopup.json @@ -0,0 +1,17 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/close-popup" + }, + + "value": { + "type": [ "Boolean", "Number", "String" ], + "desc": "If value is 0 or 'false' then directive is disabled; if value is < 0 then it closes all popups in the chain; if value is 1 or 'true' or undefined then it closes only the parent popup; if value is > 1 it closes the specified number of parent popups in the chain (note that chained QMenus are considered 1 popup only & QPopupProxy separates chained menus)", + "examples": [ + "v-close-popup", + "v-close-popup=\"booleanState\"", + "v-close-popup=\"-1\"", + "v-close-popup=\"2\"", + "v-close-popup=\"0\"" + ] + } +} diff --git a/src/directives/GoBack.js b/src/directives/GoBack.js new file mode 100644 index 00000000000..e6fb52ab604 --- /dev/null +++ b/src/directives/GoBack.js @@ -0,0 +1,75 @@ +import { client } from '../plugins/Platform.js' +import { isKeyCode } from '../utils/private/key-composition.js' + +function destroy (el) { + const ctx = el.__qgoback + if (ctx !== void 0) { + el.removeEventListener('click', ctx.goBack) + el.removeEventListener('keyup', ctx.goBackKey) + delete el.__qgoback + } +} + +export default { + name: 'go-back', + + bind (el, { modifiers, value }, vnode) { + if (el.__qgoback !== void 0) { + destroy(el) + el.__qgoback_destroyed = true + } + + const ctx = { + value, + + position: window.history.length - 1, + single: modifiers.single, + + goBack () { + const router = vnode.context.$router + + if (ctx.single === true) { + router.go(-1) + } + else if (client.is.nativeMobile === true) { + router.go(ctx.position - window.history.length) + } + else { + router.replace(ctx.value) + } + }, + + goBackKey (e) { + // if ENTER key + isKeyCode(e, 13) === true && ctx.goBack() + } + } + + el.__qgoback = ctx + + el.addEventListener('click', ctx.goBack) + el.addEventListener('keyup', ctx.goBackKey) + }, + + update (el, { modifiers, value, oldValue }) { + const ctx = el.__qgoback + + if (ctx !== void 0) { + if (ctx.single !== modifiers.single) { + ctx.single = modifiers.single + } + if (oldValue !== value) { + ctx.value = value + } + } + }, + + unbind (el) { + if (el.__qgoback_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qgoback_destroyed + } + } +} diff --git a/src/directives/GoBack.json b/src/directives/GoBack.json new file mode 100644 index 00000000000..3627679cb62 --- /dev/null +++ b/src/directives/GoBack.json @@ -0,0 +1,23 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/go-back" + }, + + "value": { + "type": [ "String", "Object" ], + "desc": "Equivalent to Vue Router 'to' property", + "examples": [ + "/home/dashboard", + "{ name: 'my-route-name' }" + ] + }, + + "modifiers": { + "single": { + "type": "Boolean", + "desc": "Go back to previous route instead of the whole way to before directive was initialized", + "reactive": true, + "examples": [ "v-go-back.single" ] + } + } +} diff --git a/src/directives/Intersection.js b/src/directives/Intersection.js new file mode 100644 index 00000000000..4e0c9b592e8 --- /dev/null +++ b/src/directives/Intersection.js @@ -0,0 +1,102 @@ +import { isDeepEqual } from '../utils/is.js' + +const defaultCfg = { + threshold: 0, + root: null, + rootMargin: '0px' +} + +function update (el, ctx, value, modifiers) { + let handler, cfg, changed + + if (typeof value === 'function') { + handler = value + cfg = defaultCfg + changed = ctx.cfg === void 0 + } + else { + handler = value.handler + cfg = Object.assign({}, defaultCfg, value.cfg) + changed = ctx.cfg === void 0 || isDeepEqual(ctx.cfg, cfg) === false + } + + if (ctx.handler !== handler) { + ctx.handler = handler + } + + const once = modifiers.once === true + if (ctx.once !== once) { + ctx.once = once + } + + if (changed === true) { + ctx.cfg = cfg + ctx.observer !== void 0 && ctx.observer.unobserve(el) + + ctx.observer = new IntersectionObserver(([ entry ]) => { + if (typeof ctx.handler === 'function') { + // if observed element is part of a vue transition + // then we need to be careful... + if ( + entry.rootBounds === null && + (el.__vue__ !== void 0 ? el.__vue__._inactive !== true : document.body.contains(el) === true) + ) { + ctx.observer.unobserve(el) + ctx.observer.observe(el) + return + } + + const res = ctx.handler(entry, ctx.observer) + + if ( + res === false || + (ctx.once === true && entry.isIntersecting === true) + ) { + destroy(el) + } + } + }, cfg) + + ctx.observer.observe(el) + } +} + +function destroy (el) { + const ctx = el.__qvisible + + if (ctx !== void 0) { + ctx.observer !== void 0 && ctx.observer.unobserve(el) + delete el.__qvisible + } +} + +export default { + name: 'intersection', + + inserted (el, { modifiers, value }) { + if (el.__qvisible !== void 0) { + destroy(el) + el.__qvisible_destroyed = true + } + + const ctx = {} + + update(el, ctx, value, modifiers) + + el.__qvisible = ctx + }, + + update (el, { value, modifiers }) { + const ctx = el.__qvisible + ctx !== void 0 && update(el, ctx, value, modifiers) + }, + + unbind (el) { + if (el.__qvisible_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qvisible_destroyed + } + } +} diff --git a/src/directives/Intersection.json b/src/directives/Intersection.json new file mode 100644 index 00000000000..7b77440cac5 --- /dev/null +++ b/src/directives/Intersection.json @@ -0,0 +1,231 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/intersection" + }, + + "addedIn": "v1.3", + + "value": { + "type": [ "Object", "Function" ], + "desc": "Function to call when scrolling occurs (identical to description of 'handler' prop of the Object form); If using the Object form, it is HIGHLY recommended to reference it from your vue component scope, otherwise the directive update cycle will continuously recreate the observer which hits performance hard", + "examples": [ + "v-intersection=\"myFunction\"", + "v-intersection=\"{ handler: myFunction, cfg: { root: myScrollingParentEl, rootMargin: '10px 20px 30px 40px', threshold: [0, 0.25, 0.5, 0.75, 1] } }\"" + ], + + "definition": { + "handler": { + "type": "Function", + "desc": "The handler function to be called", + "returns": { + "type": "Boolean", + "desc": "If you return Boolean false from the handler, the observer stops" + }, + "params": { + "entry": { + "type": "Object", + "desc": "The IntersectionObserverEntry object", + "definition": { + "boundingClientRect": { + "type": "Object", + "desc": "Object containing the client rect information", + "__exemption": [ "examples" ], + "definition": { + "bottom": { + "type": "Number", + "desc": "The bottom of the client rect", + "examples": [ "1770" ] + }, + "height": { + "type": "Number", + "desc": "The height of the client rect", + "examples": [ "50" ] + }, + "left": { + "type": "Number", + "desc": "The left of the client rect", + "examples": [ "49" ] + }, + "right": { + "type": "Number", + "desc": "The right of the client rect", + "examples": [ "384" ] + }, + "top": { + "type": "Number", + "desc": "The top of the client rect", + "examples": [ "1720" ] + }, + "width": { + "type": "Number", + "desc": "The width of the client rect", + "examples": [ "335" ] + }, + "x": { + "type": "Number", + "desc": "The x position of the client rect", + "examples": [ "49" ] + }, + "y": { + "type": "Number", + "desc": "The y position of the client rect", + "examples": [ "1720" ] + } + } + }, + + "intersectionRatio": { + "type": "Number", + "desc": "The ratio of the observed objects visibility", + "examples": [ "0.5" ] + }, + + "intersectionRect": { + "type": "Object", + "desc": "Object containing the client rect information", + "definition": { + "bottom": { + "type": "Number", + "desc": "The bottom of the client rect", + "examples": [ "0" ] + }, + "height": { + "type": "Number", + "desc": "The height of the client rect", + "examples": [ "0" ] + }, + "left": { + "type": "Number", + "desc": "The left of the client rect", + "examples": [ "0" ] + }, + "right": { + "type": "Number", + "desc": "The right of the client rect", + "examples": [ "0" ] + }, + "top": { + "type": "Number", + "desc": "The top of the client rect", + "examples": [ "0" ] + }, + "width": { + "type": "Number", + "desc": "The width of the client rect", + "examples": [ "0" ] + }, + "x": { + "type": "Number", + "desc": "The x position of the client rect", + "examples": [ "0" ] + }, + "y": { + "type": "Number", + "desc": "The y position of the client rect", + "examples": [ "0" ] + } + } + }, + + "isIntersecting": { + "type": "Boolean", + "desc": "It is Boolean true if intersecting the scrollable area" + }, + + "rootBounds": { + "type": "Object", + "desc": "Object containing the client rect information", + "definition": { + "bottom": { + "type": "Number", + "desc": "The bottom of the client rect", + "examples": [ "0" ] + }, + "height": { + "type": "Number", + "desc": "The height of the client rect", + "examples": [ "0" ] + }, + "left": { + "type": "Number", + "desc": "The left of the client rect", + "examples": [ "0" ] + }, + "right": { + "type": "Number", + "desc": "The right of the client rect", + "examples": [ "0" ] + }, + "top": { + "type": "Number", + "desc": "The top of the client rect", + "examples": [ "0" ] + }, + "width": { + "type": "Number", + "desc": "The width of the client rect", + "examples": [ "0" ] + }, + "x": { + "type": "Number", + "desc": "The x position of the client rect", + "examples": [ "0" ] + }, + "y": { + "type": "Number", + "desc": "The y position of the client rect", + "examples": [ "0" ] + } + } + }, + + "target": { + "type": "Element", + "desc": "The target element", + "__exemption": [ "examples" ] + }, + + "time": { + "type": "Number", + "desc": "The timestamp of the event", + "examples": [ "6316.879999998491" ] + } + } + } + } + }, + + "cfg": { + "type": "Object", + "desc": "Intersection observer options (can be omitted and all its props are optional)", + "definition": { + "root": { + "type": "Element", + "desc": "Lets you define an alternative to the viewport as your root (through its DOM element); It is important to keep in mind that root needs to be an ancestor of the observed element", + "examples": [ "myScrollingParentEl" ] + }, + + "rootMargin": { + "type": "String", + "desc": "Allows you to specify the margins for the root, effectively allowing you to either grow or shrink the area used for intersections", + "examples": [ "10px 20px 30px 40px" ] + }, + + "threshold": { + "type": "Array", + "desc": "Threshold(s) at which to trigger callback, specified as a ratio, or list of ratios, of (visible area / total area) of the observed element", + "examples": [ "[ 0, 0.25, 0.5, 0.75, 1 ]" ] + } + } + } + } + }, + + "modifiers": { + "once": { + "type": "Boolean", + "desc": "Call handler only once, when the conditions are first met", + "examples": [ "v-intersection.once" ] + } + } +} diff --git a/src/directives/KeyGroupNavigation.js b/src/directives/KeyGroupNavigation.js new file mode 100644 index 00000000000..138f2593f9f --- /dev/null +++ b/src/directives/KeyGroupNavigation.js @@ -0,0 +1,345 @@ +import Interaction from '../plugins/Interaction.js' +import { stop, prevent, addEvt, cleanEvt, getEventPath } from '../utils/event.js' +import { FOCUSABLE_SELECTOR, KEY_SKIP_SELECTOR, changeFocusedElement } from '../utils/private/focus-manager.js' + +const keyCodes = { + horizontal: { + first: [ 36 ], // HOME + prev: [ 37 ], // ARROW_LEFT + next: [ 39 ], // ARROW_RIGHT + last: [ 35 ] // END + }, + vertical: { + first: [ 33 ], // PG_UP + prev: [ 38 ], // ARROW_UP + next: [ 40 ], // ARROW_DOWN + last: [ 34 ] // PG_DOWN + } +} + +keyCodes.all = Object.keys(keyCodes.horizontal).reduce((acc, key) => ({ + ...acc, + [key]: keyCodes.horizontal[key].concat(keyCodes.vertical[key]) +}), {}) + +keyCodes.horizontal.list = Object.keys(keyCodes.horizontal).reduce((acc, k) => acc.concat(keyCodes.horizontal[k]), [9]) +keyCodes.horizontal.listH = keyCodes.horizontal.list +keyCodes.vertical.list = Object.keys(keyCodes.vertical).reduce((acc, k) => acc.concat(keyCodes.vertical[k]), [9]) +keyCodes.vertical.listH = [] +keyCodes.all.list = Object.keys(keyCodes.all).reduce((acc, k) => acc.concat(keyCodes.all[k]), [9]) +keyCodes.all.listH = keyCodes.horizontal.list + +function matchNavigationKeyIgnoreEl (el) { + return el.classList.contains('q-key-group-navigation--ignore-key') === true +} + +function createFocusTargets (ctx) { + const target = document.createElement('span') + target.setAttribute('tabindex', -1) + target.classList.add('no-outline') + target.classList.add('absolute') + target.classList.add('no-pointer-events') + + ctx.firstTarget = target + ctx.lastTarget = target.cloneNode() +} + +function addFocusTargets (ctx, el) { + el.appendChild(ctx.lastTarget) + + if (el.childElementCount > 0) { + el.insertBefore(ctx.firstTarget, el.childNodes[0]) + } + else { + el.appendChild(ctx.firstTarget) + } +} + +function removeFocusTargets (ctx) { + ctx.firstTarget !== void 0 && ctx.firstTarget.remove() + ctx.lastTarget !== void 0 && ctx.lastTarget.remove() +} + +function parseArg (arg) { + const data = [ 1, 1, 'q-key-group-navigation--active' ] + + if (typeof arg === 'string' && arg.length > 0) { + const splits = arg.split(':') + + for (let i = 0; i < 2; i++) { + const v = parseInt(splits[i], 10) + v && (data[i] = v) + } + } + + return { + offsetY: data[0], + offsetX: data[1], + activeClass: data[2] + } +} + +function configureEvents (el, ctx, modifiers, value) { + if (modifiers.vertical === true) { + ctx.keyCodes = keyCodes.vertical + } + else { + ctx.keyCodes = modifiers.horizontal === true + ? keyCodes.horizontal + : keyCodes.all + } + + const enabled = [false, 0, '0'].indexOf(value) === -1 + + if (ctx.enabled !== enabled) { + ctx.enabled === true && cleanEvt(ctx, 'main') + + enabled === true && addEvt(ctx, 'main', [ + [ el, 'keydown', 'keyDown', 'capture' ], + [ el, 'focusin', 'focusIn', 'passiveCapture' ], + [ el, 'focusout', 'focusOut', 'passiveCapture' ], + [ el, 'mousedown', 'setRestoreEl', 'passiveCapture' ], + [ el, 'touchstart', 'setRestoreEl', 'passiveCapture' ] + ]) + + ctx.enabled = enabled + } +} + +export default { + name: 'key-group-navigation', + + bind (el, { modifiers, arg, value }) { + const ctx = { + keyCodes: keyCodes.all, + arg, + modifiers: {}, + + ...parseArg(arg), + + focusRestoreEl: null, + + keyDown (evt) { + const { keyCode, shiftKey, target } = evt + + if ( + ctx.keyCodes.list.indexOf(keyCode) === -1 || + target.matches(KEY_SKIP_SELECTOR) === true + ) { + return + } + + stop(evt) + + if (keyCode === 9) { // TAB + addFocusTargets(ctx, el) + + if (shiftKey === true) { + if (ctx.firstTarget !== void 0) { + ctx.firstTarget.focus() + } + else { + prevent(evt) + } + } + else { + if (ctx.lastTarget !== void 0) { + ctx.lastTarget.focus() + } + else { + prevent(evt) + } + } + + // required for IE11 + requestAnimationFrame(() => { + removeFocusTargets(ctx) + }) + + return + } + + const initialEl = document.activeElement + const keyNavGroup = initialEl + ? initialEl.closest('.q-key-group-navigation') + : null + const ignoredFocusableElements = keyNavGroup !== null && keyNavGroup !== el + ? Array.prototype.filter.call( + keyNavGroup.querySelectorAll(FOCUSABLE_SELECTOR), + elm => elm !== initialEl + ) + : [] + const focusableElements = Array.prototype.filter.call( + el.querySelectorAll(FOCUSABLE_SELECTOR), + elm => ignoredFocusableElements.includes(elm) !== true + ) + const lastElementIndex = focusableElements.length - 1 + + if (lastElementIndex < 0) { + return + } + + if (ctx.keyCodes.first.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, 0, 1) + } + else if (ctx.keyCodes.last.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, lastElementIndex, -1) + } + else { + const currentIndex = initialEl === null + ? -1 + : focusableElements.indexOf(initialEl.closest(FOCUSABLE_SELECTOR)) + + const offset = ctx.keyCodes.listH.indexOf(keyCode) === -1 + ? ctx.offsetY + : ctx.offsetX + + if (ctx.keyCodes.prev.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, Math.max(-1, currentIndex - offset), -1, offset !== 1) + } + if (ctx.keyCodes.next.indexOf(keyCode) > -1) { + changeFocusedElement(focusableElements, currentIndex + offset, 1, offset !== 1) + } + } + + if (document.activeElement) { + ctx.focusRestoreEl = document.activeElement + } + + prevent(evt) + }, + + setRestoreEl (evt) { + if (evt.target) { + ctx.focusRestoreEl = evt.target + } + }, + + setActive () { + ctx.active = true + el.classList.add(ctx.activeClass) + }, + + setInactive () { + ctx.active = false + el.classList.remove(ctx.activeClass) + }, + + focusIn (evt) { + if (Interaction.isKeyboard !== true) { + ctx.active === true && ctx.setInactive() + + return + } + + const path = getEventPath(evt) // required for IE11 + const ignored = path.slice(0, path.indexOf(el)).find(matchNavigationKeyIgnoreEl) !== void 0 + + if (ctx.active !== true) { + ignored !== true && ctx.setActive() + } + else if (ignored === true) { + ctx.setInactive() + } + + if ( + evt.target === ctx.firstTarget || + evt.target === ctx.lastTarget || + ( + evt.relatedTarget !== null && + ( + ( + evt.relatedTarget.classList !== void 0 && // required for IE11 + evt.relatedTarget.classList.contains('q-key-group-navigation--ignore-focus') === true + ) || + ( + evt.relatedTarget._qKeyNavIgnore === true && + el.contains(evt.relatedTarget) === true + ) + ) + ) + ) { + return + } + + const refocusEl = el.querySelector('.q-key-group-navigation__refocus') + const focusRestoreEl = refocusEl !== null && refocusEl.closest('.q-key-group-navigation') === el + ? refocusEl + : ctx.focusRestoreEl + + if ( + focusRestoreEl === null || + el.contains(evt.relatedTarget) === true + ) { + if (document.activeElement) { + ctx.focusRestoreEl = document.activeElement + } + } + else { + const focusableEl = focusRestoreEl.closest(FOCUSABLE_SELECTOR) + const focusedEl = focusableEl && typeof focusableEl.focus === 'function' + ? focusableEl + : ( + focusRestoreEl.focus === 'function' + ? focusRestoreEl + : null + ) + + requestAnimationFrame(() => { + if (focusedEl !== null) { + focusedEl._qKeyNavIgnore = true + + focusedEl.focus() + + requestAnimationFrame(() => { + focusedEl && (focusedEl._qKeyNavIgnore = false) + }) + } + }) + } + }, + + focusOut (evt) { + if ( + ctx.active === true && + (evt.relatedTarget === null || el.contains(evt.relatedTarget) === false) + ) { + ctx.setInactive() + } + } + } + + if (el.__qkeygrpnav) { + el.__qkeygrpnav_old = el.__qkeygrpnav + } + + el.__qkeygrpnav = ctx + + el.classList.add('q-key-group-navigation') + createFocusTargets(ctx) + configureEvents(el, ctx, modifiers, value) + }, + + update (el, { modifiers, arg, value }) { + const ctx = el.__qkeygrpnav + if (ctx !== void 0) { + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg(arg)) + } + + configureEvents(el, ctx, modifiers, value) + } + }, + + unbind (el) { + const ctx = el.__qkeygrpnav_old || el.__qkeygrpnav + if (ctx !== void 0) { + el.classList.remove('q-key-group-navigation') + removeFocusTargets(ctx) + cleanEvt(ctx, 'main') + ctx.active === true && ctx.setInactive() + + delete el[el.__qkeygrpnav_old ? '__qkeygrpnav_old' : '__qkeygrpnav'] + } + } +} diff --git a/src/directives/KeyGroupNavigation.json b/src/directives/KeyGroupNavigation.json new file mode 100644 index 00000000000..8c37cf272ad --- /dev/null +++ b/src/directives/KeyGroupNavigation.json @@ -0,0 +1,46 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/key-group-navigation" + }, + + "value": { + "type": [ "Boolean", "Number", "String" ], + "desc": "If value is 0, '0' or 'false' then directive is disabled; else it is enabled)", + "examples": [ + "v-key-group-navigation", + "v-key-group-navigation=\"booleanState\"", + "v-key-group-navigation=\"0\"", + "v-key-group-navigation=\"false\"" + ] + }, + + "arg": { + "type": "String", + "desc": "y:x:z, where y is the step for vertical movement, x is the step for horizontal movement and z is a class name to be applied on the grouping element when it's active (default q-key-group-navigation--active)", + "default": "1:1", + "examples": [ + "v-key-group-navigation:7:1", + "v-key-group-navigation:3" + ] + }, + + "modifiers": { + "horizontal": { + "type": "Boolean", + "desc": "Navigate using HOME, ARROW_LEFT, ARROW_RIGHT or END keys", + "reactive": true + }, + + "vertical": { + "type": "Boolean", + "desc": "Navigate using PG_UP, ARROW_UP, ARROW_DOWN or PG_DOWN keys", + "reactive": true + }, + + "all": { + "type": "Boolean", + "desc": "Default - Navigate using HOME / PG_UP, ARROW_LEFT / ARROW_UP, ARROW_RIGHT / ARROW_DOWN or END / PG_DOWN keys", + "reactive": true + } + } +} diff --git a/src/directives/Morph.js b/src/directives/Morph.js new file mode 100644 index 00000000000..e6cf5a7abcf --- /dev/null +++ b/src/directives/Morph.js @@ -0,0 +1,233 @@ +import morph from '../utils/morph.js' + +const morphGroups = {} +const mods = [ + 'resize', 'useCSS', 'hideFromClone', 'keepToClone', 'tween' +] +const props = [ + 'duration', 'delay', 'easing', 'fill', + 'classes', 'style', 'duration', + 'tweenFromOpacity', 'tweenToOpacity', + 'waitFor', 'onEnd' +] + +function changeClass (ctx, action) { + if (ctx.clsAction !== action) { + ctx.clsAction = action + ctx.el.classList[action]('q-morph--invisible') + } +} + +function trigger (group) { + if (group.animating === true || group.queue.length < 2) { + return + } + + const [ from, to ] = group.queue + + group.animating = true + from.animating = true + to.animating = true + + changeClass(from, 'remove') + changeClass(to, 'remove') + + const cancelFn = morph({ + from: from.el, + to: to.el, + onToggle () { + changeClass(from, 'add') + changeClass(to, 'remove') + }, + ...to.opts, + onEnd (dir, aborted) { + to.opts.onEnd !== void 0 && to.opts.onEnd(dir, aborted) + + if (aborted === true) { + return + } + + from.animating = false + to.animating = false + + group.animating = false + group.cancel = void 0 + group.queue.shift() + + trigger(group) + } + }) + + group.cancel = () => { + cancelFn(true) // abort + group.cancel = void 0 + } +} + +function changeModel (ctx, name) { + if (ctx.name === name) { + const group = morphGroups[ctx.group] + + // if group is not registered + if (group === void 0) { + morphGroups[ctx.group] = { + name: ctx.group, + model: name, + queue: [ ctx ], + animating: false + } + + changeClass(ctx, 'remove') + } + // if model changed + else if (group.model !== name) { + group.model = name + group.queue.push(ctx) + + if (group.animating === false && group.queue.length === 2) { + trigger(group) + } + } + + return + } + + if (ctx.animating === false) { + changeClass(ctx, 'add') + } +} + +function setOptsFromValue (ctx, value) { + if (value.group !== void 0) { + ctx.group = value.group + } + if (value.name !== void 0) { + ctx.name = value.name + } + + const opts = ctx.opts + + props.forEach(name => { + if (value[name] !== void 0) { + opts[name] = value[name] + } + }) +} + +function updateArg (ctx, arg) { + const opts = typeof arg === 'string' && arg.length > 0 + ? arg.split(':') : [] + + ctx.name = opts[0] + ctx.group = opts[1] + + Object.assign(ctx.opts, { + duration: isNaN(opts[2]) === true + ? 300 + : parseFloat(opts[2]), + waitFor: opts[3] + }) +} + +function updateModifiers (ctx, modifiers) { + const opts = ctx.opts + + mods.forEach(name => { + opts[name] = modifiers[name] === true + }) +} + +function updateValue (ctx, value) { + let model + + if (Object(value) === value) { + model = '' + value.model + setOptsFromValue(ctx, value) + updateModifiers(ctx, value) + } + else { + model = '' + value + } + + if (model !== ctx.model) { + ctx.model = model + changeModel(ctx, model) + } + else if (ctx.animating === false && ctx.clsAction !== void 0) { + // ensure HMR + ctx.el.classList[ctx.clsAction]('q-morph--invisible') + } +} + +function destroy (el) { + const ctx = el.__qmorph + + if (ctx !== void 0) { + const group = morphGroups[ctx.group] + + if (group !== void 0) { + const index = group.queue.indexOf(ctx) + + if (index !== -1) { + group.queue = group.queue.filter(item => item !== ctx) + + if (group.queue.length === 0) { + group.cancel !== void 0 && group.cancel() + delete morphGroups[ctx.group] + } + } + } + + if (ctx.clsAction === 'add') { + el.classList.remove('q-morph--invisible') + } + + delete el.__qmorph + } +} + +export default { + name: 'morph', + + inserted (el, { modifiers, arg, value }) { + if (el.__qmorph !== void 0) { + destroy(el) + el.__qmorph_destroyed = true + } + + const ctx = { + el, + + arg, + + animating: false, + opts: {} + } + + updateModifiers(ctx, modifiers) + updateArg(ctx, arg) + updateValue(ctx, value) + + el.__qmorph = ctx + }, + + update (el, { modifiers, arg, value }) { + const ctx = el.__qmorph + if (ctx !== void 0) { + updateModifiers(ctx, modifiers) + if (ctx.arg !== arg) { + updateArg(ctx, arg) + } + updateValue(ctx, value) + } + }, + + unbind (el) { + if (el.__qmorph_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qmorph_destroyed + } + } +} diff --git a/src/directives/Morph.json b/src/directives/Morph.json new file mode 100644 index 00000000000..5c70178caff --- /dev/null +++ b/src/directives/Morph.json @@ -0,0 +1,185 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/morph" + }, + + "addedIn": "v1.13", + + "value": { + "type": [ "Object", "Any" ], + "desc": "Configuration object or trigger value", + "definition": { + "group": { + "type": "String", + "desc": "Name of the morph group the element belongs to", + "examples": [ "dialogGroup" ] + }, + + "name": { + "type": "String", + "desc": "Name of the morph inside the group that the element belongs to", + "examples": [ "btn" ] + }, + + "model": { + "type": "String", + "desc": "Current value of the group model; when it becomes the same as the 'name' it triggers the morphing", + "examples": [ "btn" ] + }, + + "duration": { + "type": "Number", + "desc": "Duration of the animation (in milliseconds)", + "default": "300", + "examples": [ "500" ] + }, + + "delay": { + "type": "Number", + "desc": "Delay for the animation (in milliseconds)", + "default": "0", + "examples": [ "500" ] + }, + + "easing": { + "type": "String", + "desc": "Timing function for the animation (CSS easing format)", + "default": "ease-in-out", + "examples": [ "ease-out" ] + }, + + "fill": { + "type": "String", + "desc": "Fill mode for the animation", + "default": "none", + "examples": [ "forward" ] + }, + + "classes": { + "type": "String", + "desc": "Class names to be added to the destination element during the animation", + "examples": [ "bg-grey-2" ] + }, + + "style": { + "type": [ "String", "Object" ], + "desc": "Styles to be added to the destination element during the animation", + "examples": [ "border-radius: 20px" ] + }, + + "resize": { + "type": "Boolean", + "desc": "Use resize instead of scaling during animation" + }, + + "useCSS": { + "type": "Boolean", + "desc": "Use CSS animations instead of the Animation API" + }, + + "hideFromClone": { + "type": "Boolean", + "desc": "Hide the spacer for the initial element during animation; Use it if the initial element is not removed or resizing of the space occupied by the initial element is not desired" + }, + + "keepToClone": { + "type": "Boolean", + "desc": "Keep a clone of the final element visible during animation" + }, + + "tween": { + "type": "Boolean", + "desc": "Use an opacity tween between the initial and final elements" + }, + + "tweenFromOpacity": { + "type": "Number", + "desc": "If using tween it is the initial opacity of the initial element (will be animated to 0) - the initial element is placed on top of the final element", + "default": "0.6", + "examples": [ "1" ] + }, + + "tweenToOpacity": { + "type": "Number", + "desc": "If using tween it is the initial opacity of the final element (will be animated to 1)", + "default": "0.5", + "examples": [ "0.3" ] + }, + + "waitFor": { + "type": [ "Number", "String", "Promise" ], + "desc": "Delay animation start for that number of milliseconds, or until a 'transitionend' event is emitted by the destination element, or until the promise is resolved (if the promise is rejected the morphing will abort, but the `toggle function` was already called)", + "default": "0", + "examples": [ "300", "transitionend" ] + }, + + "onEnd": { + "type": "Function", + "desc": "A function that will be called once the morphing is finished; Not called if morphing is aborted", + "returns": null, + "params": { + "direction": { + "type": "String", + "desc": "'to' if the morphing was finished in the final state or 'from' if it was finished in the initial state", + "values": [ "to", "from" ] + }, + "aborted": { + "type": "Boolean", + "desc": "Was the morphing aborted?" + } + }, + "examples": [ "(direction, aborted) => { if (direction !== 'to') { revertLogic() } }" ] + } + }, + + "examples": [ + "v-morph:element2:group1=\"groupModel\"", + "v-morph=\"{ name: 'element2', group: 'group1', model: 'element1' }\"" + ] + }, + + "arg": { + "type": "String", + "desc": "x:x2:y:z, where x is the morph element name, x2 is the morph group, y is the animation duration (in milliseconds) and z is the amount of time to wait (in milliseconds) or the 'transitionend' string", + "reactive": true, + "examples": [ + "v-morph:name=\"options\"", + "v-morph:name:groupName=\"options\"", + "v-morph:name:groupName:400=\"options\"", + "v-morph:name:groupName:400:100=\"options\"", + "v-morph:name:groupName:400:transitionend=\"options\"" + ] + }, + + "modifiers": { + "resize": { + "type": "Boolean", + "desc": "Use resize instead of scale transform for morph (forceResize option of the morph function)", + "reactive": true + }, + + "useCSS": { + "type": "Boolean", + "desc": "Use CSS animations for morph (forceCssAnimation option of the morph function)", + "reactive": true + }, + + "hideFromClone": { + "type": "Boolean", + "desc": "Hide the spacer for the initial element (hideFromClone option of the morph function)", + "reactive": true + }, + + "keepToClone": { + "type": "Boolean", + "desc": "Keep the final element visible while morphing (keepToClone option of the morph function)", + "reactive": true + }, + + "tween": { + "type": "Boolean", + "desc": "Use opacity tween morphing between initial and final elements (tween option of the morph function)", + "reactive": true + } + } +} diff --git a/src/directives/Morph.sass b/src/directives/Morph.sass new file mode 100644 index 00000000000..51b99c55609 --- /dev/null +++ b/src/directives/Morph.sass @@ -0,0 +1,7 @@ +.q-morph--invisible, +.q-morph--internal + opacity: 0 !important + pointer-events: none !important + position: fixed !important + right: 200vw !important + bottom: 200vh !important diff --git a/src/directives/Morph.styl b/src/directives/Morph.styl new file mode 100644 index 00000000000..51b99c55609 --- /dev/null +++ b/src/directives/Morph.styl @@ -0,0 +1,7 @@ +.q-morph--invisible, +.q-morph--internal + opacity: 0 !important + pointer-events: none !important + position: fixed !important + right: 200vw !important + bottom: 200vh !important diff --git a/src/directives/Mutation.js b/src/directives/Mutation.js new file mode 100644 index 00000000000..ebbb4c8b17b --- /dev/null +++ b/src/directives/Mutation.js @@ -0,0 +1,82 @@ +import { isDeepEqual } from '../utils/is.js' + +const defaultCfg = { + childList: true, + subtree: true, + attributes: true, + characterData: true, + attributeOldValue: true, + characterDataOldValue: true +} + +function update (el, ctx, value) { + ctx.handler = value + ctx.observer !== void 0 && ctx.observer.disconnect() + + ctx.observer = new MutationObserver(list => { + if (typeof ctx.handler === 'function') { + const res = ctx.handler(list) + if (res === false || ctx.once === true) { + destroy(el) + } + } + }) + + ctx.observer.observe(el, ctx.opts) +} + +function destroy (el) { + const ctx = el.__qmutation + + if (ctx !== void 0) { + ctx.observer !== void 0 && ctx.observer.disconnect() + delete el.__qmutation + } +} + +export default { + name: 'mutation', + + inserted (el, { modifiers: { once, ...opts }, value }) { + if (el.__qmutation !== void 0) { + destroy(el) + el.__qmutation_destroyed = true + } + + const ctx = { + once + } + + ctx.opts = Object.keys(opts).length === 0 + ? defaultCfg + : opts + update(el, ctx, value) + + el.__qmutation = ctx + }, + + update (el, { modifiers: { once, ...opts }, value, oldValue }) { + const ctx = el.__qmutation + if (ctx !== void 0) { + const newOpts = Object.keys(opts).length === 0 + ? defaultCfg + : opts + if ( + oldValue !== value || + isDeepEqual(ctx.opts, newOpts) !== true + ) { + ctx.opts = newOpts + update(el, ctx, value) + } + } + }, + + unbind (el) { + if (el.__qmutation_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qmutation_destroyed + } + } +} diff --git a/src/directives/Mutation.json b/src/directives/Mutation.json new file mode 100644 index 00000000000..65f0ee552c3 --- /dev/null +++ b/src/directives/Mutation.json @@ -0,0 +1,132 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/mutation" + }, + + "addedIn": "v1.3", + + "value": { + "type": [ "Function" ], + "desc": "Function to call when mutation occurs; It is HIGHLY recommended to reference it from your vue component scope, otherwise the directive update cycle will continuously recreate the observer which hits performance hard", + "examples": [ + "v-intersection=\"myHandler\"" + ], + + "returns": { + "type": "Boolean", + "desc": "If you return Boolean false from the handler, the observer stops" + }, + + "params": { + "mutationList": { + "type": "Array", + "desc": "Array of MutationRecord items", + "definition": { + "type": { + "type": "String", + "desc": "Type of mutation", + "values": [ "childList", "attributes", "characterData" ] + }, + + "target": { + "type": "Object", + "desc": "The DOM element that the mutation affected, depending on the mutation type", + "__exemption": [ "examples" ] + }, + + "addedNodes": { + "type": "Array", + "desc": "The NodeList of the nodes that have been added", + "__exemption": [ "examples" ] + }, + + "removedNodes": { + "type": "Array", + "desc": "The NodeList of the nodes that have been removed", + "__exemption": [ "examples" ] + }, + + "previousSibling": { + "type": "Object", + "desc": "The previous sibling of the added or removed nodes, or null", + "__exemption": [ "examples" ] + }, + + "nextSibling": { + "type": "Object", + "desc": "The next sibling of the added or removed nodes, or null", + "__exemption": [ "examples" ] + }, + + "attributeName": { + "type": "String", + "desc": "The local name of the changed attribute, or null", + "examples": [ "some-attribute" ] + }, + + "attributeNamespace": { + "type": "String", + "desc": "The namespace of the changed attribute, or null", + "__exemption": [ "examples" ] + }, + + "oldValue": { + "type": "String", + "desc": "Value depends on the mutation type; For attributes, it is the value of the changed attribute before the change; For characterData it is data of the changed node before the change; For childList it is null; Note that for this to work as expected, attributeOldValue or characterDataOldValue must be set", + "__exemption": [ "examples" ] + } + } + } + } + }, + + "modifiers": { + "once": { + "type": "Boolean", + "desc": "Call handler only once, when the first mutation was triggered, then stop monitoring", + "examples": [ "v-mutation.once" ] + }, + + "childList": { + "type": "Boolean", + "desc": "Monitor the target node (and, if 'subtree' is also set, its descendants) for the addition of new child nodes or removal of existing child nodes", + "reactive": true, + "examples": [ "v-mutation.childList" ] + }, + + "subtree": { + "type": "Boolean", + "desc": "Extend monitoring to the entire subtree of nodes rooted at target", + "reactive": true, + "examples": [ "v-mutation.subtree" ] + }, + + "attributes": { + "type": "Boolean", + "desc": "Watch for changes to the value of attributes on the node or nodes being monitored", + "reactive": true, + "examples": [ "v-mutation.attributes" ] + }, + + "characterData": { + "type": "Boolean", + "desc": "Monitor the specified target node or subtree for changes to the character data contained within the node or nodes", + "reactive": true, + "examples": [ "v-mutation.characterData" ] + }, + + "attributeOldValue": { + "type": "Boolean", + "desc": "Record the previous value of any attribute that changes when monitoring the node or nodes for attribute changes", + "reactive": true, + "examples": [ "v-mutation.attributeOldValue" ] + }, + + "characterDataOldValue": { + "type": "Boolean", + "desc": "Record the previous value of a node's text whenever the text changes on nodes being monitored", + "reactive": true, + "examples": [ "v-mutation.characterDataOldValue" ] + } + } +} diff --git a/src/directives/Ripple.js b/src/directives/Ripple.js new file mode 100644 index 00000000000..9bdf1676d3f --- /dev/null +++ b/src/directives/Ripple.js @@ -0,0 +1,242 @@ +import { css } from '../utils/dom.js' +import { position, stop, addEvt, cleanEvt, listenOpts } from '../utils/event.js' +import { isKeyCode } from '../utils/private/key-composition.js' +import { client } from '../plugins/Platform.js' +import { $q } from '../install.js' + +const { passiveCapture } = listenOpts + +function startPhase1 (evtStart, el, ctx, forceCenter) { + ctx.modifiers.stop === true && stop(evtStart) + + const + { color, early } = ctx.modifiers, + center = ctx.modifiers.center === true || forceCenter === true, + node = document.createElement('span'), + innerNode = document.createElement('span'), + pos = position(evtStart), + { left, top, width, height } = el.getBoundingClientRect(), + diameter = Math.sqrt(width * width + height * height), + radius = diameter / 2, + centerX = `${(width - diameter) / 2}px`, + x = center ? centerX : `${pos.left - left - radius}px`, + centerY = `${(height - diameter) / 2}px`, + y = center ? centerY : `${pos.top - top - radius}px`, + delay = Date.now() + 300 + + innerNode.className = 'q-ripple__inner' + css(innerNode, { + height: `${diameter}px`, + width: `${diameter}px`, + transform: `translate3d(${x},${y},0) scale3d(.2,.2,1)`, + opacity: 0 + }) + + node.className = `q-ripple${color ? ' text-' + color : ''}` + node.setAttribute('dir', 'ltr') + node.appendChild(innerNode) + el.appendChild(node) + + let timer, startPhase2, eventSource, target, waitForScroll + + const abort = () => { + clearTimeout(timer) + + const index = ctx.abort.indexOf(abort) + if (index > -1) { + ctx.abort.splice(index, 1) + node.remove() + + switch (eventSource) { + case 'mouse': + document.removeEventListener('mouseup', startPhase2, passiveCapture) + el.removeEventListener('mouseout', startPhase2, passiveCapture) + break + case 'keyboard': + document.removeEventListener('keyup', startPhase2, passiveCapture) + break + case 'touch': + target.removeEventListener('touchmove', abort, passiveCapture) + target.removeEventListener('touchmove', startPhase2, passiveCapture) + target.removeEventListener('touchend', startPhase2, passiveCapture) + target.removeEventListener('touchcancel', startPhase2, passiveCapture) + ctx.preventMouse-- + break + } + } + } + ctx.abort.push(abort) + + const phase2 = () => { + if (waitForScroll !== true) { + innerNode.classList.remove('q-ripple__inner--enter') + innerNode.classList.add('q-ripple__inner--leave') + innerNode.style.opacity = 0 + + timer = setTimeout(abort, 275) + } + } + + if (early === true) { + if (evtStart.type.indexOf('mouse') === 0) { + eventSource = 'mouse' + + startPhase2 = evtEnd => { + if ( + evtEnd.type !== 'mouseout' || + el.contains(evtEnd.toElement) !== true + ) { + timer = setTimeout(phase2, delay - Date.now()) + } + } + + document.addEventListener('mouseup', startPhase2, passiveCapture) + el.addEventListener('mouseout', startPhase2, passiveCapture) + } + else if (evtStart.type.indexOf('key') === 0) { + eventSource = 'keyboard' + ctx.preventKeyboard = true + + startPhase2 = () => { + ctx.preventKeyboard = false + timer = setTimeout(phase2, delay - Date.now()) + } + + document.addEventListener('keyup', startPhase2, passiveCapture) + } + else { + eventSource = 'touch' + waitForScroll = true + target = evtStart.target + ctx.preventMouse++ + + startPhase2 = evtEnd => { + if ( + evtEnd.type !== 'touchmove' || + evtEnd.changedTouches.length === 0 || + el.contains(document.elementFromPoint(evtEnd.changedTouches[0].clientX, evtEnd.changedTouches[0].clientY)) !== true + ) { + timer = setTimeout(phase2, delay - Date.now()) + } + } + + target.addEventListener('touchmove', abort, passiveCapture) + target.addEventListener('touchmove', startPhase2, passiveCapture) + target.addEventListener('touchend', startPhase2, passiveCapture) + target.addEventListener('touchcancel', startPhase2, passiveCapture) + } + } + + timer = setTimeout(() => { + if (waitForScroll === true) { + waitForScroll = void 0 + target.removeEventListener('touchmove', abort, passiveCapture) + } + + innerNode.classList.add('q-ripple__inner--enter') + innerNode.style.transform = `translate3d(${centerX},${centerY},0) scale3d(1,1,1)` + innerNode.style.opacity = 0.2 + + if (early !== true) { + timer = setTimeout(phase2, delay - Date.now()) + } + }, waitForScroll === true ? 70 : 50) // allow a longer delay to catch scroll +} + +function updateCtx (ctx, el, { modifiers, arg, value }) { + ctx.enabled = value !== false + + if (ctx.enabled === true) { + const cfg = Object.assign({}, $q.config.ripple, modifiers, value) + const earlyChanged = ctx.modifiers.early === void 0 || ctx.modifiers.early !== cfg.early + + ctx.modifiers = { + early: cfg.early === true, + stop: cfg.stop === true, + center: cfg.center === true, + color: cfg.color || arg, + keyCodes: [].concat(cfg.keyCodes || 13) + } + + if (earlyChanged === true) { + cleanEvt(ctx, 'main') + + if (cfg.early === true) { + addEvt(ctx, 'main', [ + [ el, 'mousedown', 'start', 'passive' ], + [ el, 'touchstart', 'start', 'passive' ], + [ el, 'keydown', 'keystart', 'passive' ] + ]) + } + else { + addEvt(ctx, 'main', [ + [ el, 'click', 'start', 'passive' ], + [ el, 'keyup', 'keystart', 'passive' ] + ]) + } + } + } + else { + ctx.abort.slice().forEach(fn => { fn() }) + cleanEvt(ctx, 'main') + ctx.preventMouse = 0 + ctx.preventKeyboard = false + } +} + +export default { + name: 'ripple', + + inserted (el, binding) { + const ctx = { + modifiers: {}, + abort: [], + preventMouse: 0, + preventKeyboard: false, + + start (evt) { + if ( + ctx.enabled === true && + evt.qSkipRipple !== true && + (evt.type !== 'mousedown' || ctx.preventMouse === 0) && + // on ENTER in form IE emits a PointerEvent with negative client cordinates + (client.is.ie !== true || evt.clientX >= 0) + ) { + startPhase1(evt, el, ctx, $q.interaction.isKeyboard) + } + }, + + keystart (evt) { + if ( + ctx.preventKeyboard !== true && + ctx.enabled === true && + evt.qSkipRipple !== true && + isKeyCode(evt, ctx.modifiers.keyCodes) === true + ) { + startPhase1(evt, el, ctx, true) + } + } + } + + updateCtx(ctx, el, binding) + + if (el.__qripple) { + el.__qripple_old = el.__qripple + } + + el.__qripple = ctx + }, + + update (el, binding) { + el.__qripple !== void 0 && updateCtx(el.__qripple, el, binding) + }, + + unbind (el) { + const ctx = el.__qripple_old || el.__qripple + if (ctx !== void 0) { + ctx.abort.slice().forEach(fn => { fn() }) + cleanEvt(ctx, 'main') + delete el[el.__qripple_old ? '__qripple_old' : '__qripple'] + } + } +} diff --git a/src/directives/Ripple.json b/src/directives/Ripple.json new file mode 100644 index 00000000000..619a5a73320 --- /dev/null +++ b/src/directives/Ripple.json @@ -0,0 +1,106 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/material-ripple" + }, + + "quasarConfOptions": { + "propName": "ripple", + "definition": { + "early": { + "type": "Boolean", + "desc": "Trigger early/immediately on user interaction" + }, + + "stop": { + "type": "Boolean", + "desc": "Stop click/touch event propagation" + }, + + "center": { + "type": "Boolean", + "desc": "Ripple starts from the absolute center" + }, + + "color": { + "type": "String", + "desc": "Color name from Quasar Color Palette; Overrides default dynamic color", + "examples": [ "orange-5" ] + }, + + "keyCodes": { + "type": [ "Array", "Number" ], + "desc": "List of keyCode that should trigger the ripple", + "examples": [ "[]", "[13, 32]" ] + } + }, + "addedIn": "v1.9.8" + }, + + "value": { + "type": [ "Boolean", "Object" ], + "desc": "Boolean (if just wanting to enable/disable) or Object for configuring more options", + "definition": { + "early": { + "type": "Boolean", + "desc": "Trigger early/immediately on user interaction", + "addedIn": "v1.9.8" + }, + + "stop": { + "type": "Boolean", + "desc": "Stop click/touch event propagation" + }, + + "center": { + "type": "Boolean", + "desc": "Ripple starts from the absolute center" + }, + + "color": { + "type": "String", + "desc": "Color name from Quasar Color Palette; Overrides default dynamic color", + "examples": [ "orange-5" ] + }, + + "keyCodes": { + "type": [ "Array", "Number" ], + "desc": "List of keyCode that should trigger the ripple", + "examples": [ "[]", "[13, 32]" ] + } + }, + "examples": [ + "v-ripple=\"booleanState\"", + "v-ripple=\"{ center: true, color: 'primary', keyCodes: [] }\"" + ] + }, + + "arg": { + "type": "String", + "desc": "Color name from Quasar Color Palette; Overrides default dynamic color", + "reactive": true, + "examples": [ "v-ripple:orange-5" ] + }, + + "modifiers": { + "early": { + "type": "Boolean", + "desc": "Trigger early/immediately on user interaction", + "reactive": true, + "addedIn": "v1.9.8" + }, + + "stop": { + "type": "Boolean", + "desc": "Stop click/touch event propagation", + "reactive": true, + "examples": [ "v-ripple.stop" ] + }, + + "center": { + "type": "Boolean", + "desc": "Ripple starts from the absolute center", + "reactive": true, + "examples": [ "v-ripple.center" ] + } + } +} diff --git a/src/directives/Ripple.sass b/src/directives/Ripple.sass new file mode 100644 index 00000000000..04843d175f2 --- /dev/null +++ b/src/directives/Ripple.sass @@ -0,0 +1,30 @@ +.q-ripple + position: absolute + top: 0 + left: 0 #{"/* rtl:ignore */"} + width: 100% + height: 100% + color: inherit + border-radius: inherit + z-index: 0 + pointer-events: none + overflow: hidden + contain: strict + + &__inner + position: absolute + top: 0 + left: 0 #{"/* rtl:ignore */"} + opacity: 0 + color: inherit + border-radius: 50% + background: currentColor + background-clip: padding-box + pointer-events: none + will-change: transform, opacity + + &--enter + transition: transform .225s cubic-bezier(.4, 0, .2, 1), opacity .1s cubic-bezier(.4, 0, .2, 1) + + &--leave + transition: opacity .25s cubic-bezier(.4, 0, .2, 1) diff --git a/src/directives/Ripple.styl b/src/directives/Ripple.styl new file mode 100644 index 00000000000..34f0841a7da --- /dev/null +++ b/src/directives/Ripple.styl @@ -0,0 +1,30 @@ +.q-ripple + position: absolute + top: 0 + left: 0 /* rtl:ignore */ + width: 100% + height: 100% + color: inherit + border-radius: inherit + z-index: 0 + pointer-events: none + overflow: hidden + contain: strict + + &__inner + position: absolute + top: 0 + left: 0 /* rtl:ignore */ + opacity: 0 + color: inherit + border-radius: 50% + background: currentColor + background-clip: padding-box + pointer-events: none + will-change: transform, opacity + + &--enter + transition: transform .225s cubic-bezier(.4, 0, .2, 1), opacity .1s cubic-bezier(.4, 0, .2, 1) + + &--leave + transition: opacity .25s cubic-bezier(.4, 0, .2, 1) diff --git a/src/directives/Scroll.js b/src/directives/Scroll.js new file mode 100644 index 00000000000..aa1f2cd0c09 --- /dev/null +++ b/src/directives/Scroll.js @@ -0,0 +1,62 @@ +import { getScrollTarget, getVerticalScrollPosition, getHorizontalScrollPosition } from '../utils/scroll.js' +import { listenOpts } from '../utils/event.js' + +function update (ctx, { value, oldValue }) { + if (typeof value !== 'function') { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive) + return + } + + ctx.handler = value + if (typeof oldValue !== 'function') { + ctx.scrollTarget.addEventListener('scroll', ctx.scroll, listenOpts.passive) + } +} + +function destroy (el) { + const ctx = el.__qscroll + if (ctx !== void 0) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive) + delete el.__qscroll + } +} + +export default { + name: 'scroll', + + inserted (el, binding) { + if (el.__qscroll !== void 0) { + destroy(el) + el.__qscroll_destroyed = true + } + + const ctx = { + scrollTarget: getScrollTarget(el), + scroll () { + ctx.handler( + getVerticalScrollPosition(ctx.scrollTarget), + getHorizontalScrollPosition(ctx.scrollTarget) + ) + } + } + + update(ctx, binding) + + el.__qscroll = ctx + }, + + update (el, binding) { + if (el.__qscroll !== void 0 && binding.oldValue !== binding.value) { + update(el.__qscroll, binding) + } + }, + + unbind (el) { + if (el.__qscroll_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qscroll_destroyed + } + } +} diff --git a/src/directives/Scroll.json b/src/directives/Scroll.json new file mode 100644 index 00000000000..2c8ca969d58 --- /dev/null +++ b/src/directives/Scroll.json @@ -0,0 +1,24 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/scroll" + }, + + "value": { + "type": "Function", + "desc": "Function to call when scrolling occurs (use a non-function to disable)", + "params": { + "verticalScrollPosition": { + "type": "Number", + "desc": "Scroll offset from top", + "examples": [ 350 ] + }, + "horizontalScrollPosition": { + "type": "Number", + "desc": "Scroll offset from left", + "examples": [ 350 ] + } + }, + "returns": null, + "examples": [ "v-scroll=\"fnToCall\"", "v-scroll=\"void 0\"" ] + } +} diff --git a/src/directives/ScrollFire.js b/src/directives/ScrollFire.js new file mode 100644 index 00000000000..8c81c175a04 --- /dev/null +++ b/src/directives/ScrollFire.js @@ -0,0 +1,77 @@ +import debounce from '../utils/debounce.js' +import { height, offset } from '../utils/dom.js' +import { getScrollTarget } from '../utils/scroll.js' +import { listenOpts } from '../utils/event.js' + +function update (ctx, { value, oldValue }) { + if (typeof value !== 'function') { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive) + return + } + + ctx.handler = value + if (typeof oldValue !== 'function') { + ctx.scrollTarget.addEventListener('scroll', ctx.scroll, listenOpts.passive) + ctx.scroll() + } +} + +function destroy (el) { + const ctx = el.__qscrollfire + if (ctx !== void 0) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive) + ctx.scroll.cancel() + delete el.__qscrollfire + } +} + +export default { + name: 'scroll-fire', + + inserted (el, binding) { + if (el.__qscrollfire !== void 0) { + destroy(el) + el.__qscrollfire_destroyed = true + } + + const ctx = { + scrollTarget: getScrollTarget(el), + scroll: debounce(() => { + let containerBottom, elBottom + + if (ctx.scrollTarget === window) { + elBottom = el.getBoundingClientRect().bottom + containerBottom = window.innerHeight + } + else { + elBottom = offset(el).top + height(el) + containerBottom = offset(ctx.scrollTarget).top + height(ctx.scrollTarget) + } + + if (elBottom > 0 && elBottom < containerBottom) { + ctx.scrollTarget.removeEventListener('scroll', ctx.scroll, listenOpts.passive) + ctx.handler(el) + } + }, 25) + } + + update(ctx, binding) + + el.__qscrollfire = ctx + }, + + update (el, binding) { + if (el.__qscrollfire !== void 0 && binding.value !== binding.oldValue) { + update(el.__qscrollfire, binding) + } + }, + + unbind (el) { + if (el.__qscrollfire_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qscrollfire_destroyed + } + } +} diff --git a/src/directives/ScrollFire.json b/src/directives/ScrollFire.json new file mode 100644 index 00000000000..c3e9e584863 --- /dev/null +++ b/src/directives/ScrollFire.json @@ -0,0 +1,19 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/scroll-fire" + }, + + "value": { + "type": "Function", + "desc": "Function to call when scrolling and element comes into the viewport (use a non-function to disable)", + "params": { + "el": { + "type": "Object", + "desc": "DOM element that scroll-fire is applied to", + "__exemption": [ "examples" ] + } + }, + "returns": null, + "examples": [ "v-scroll-fire=\"fnToCall\"", "v-scroll-fire=\"void 0\"" ] + } +} diff --git a/src/directives/TouchHold.js b/src/directives/TouchHold.js new file mode 100644 index 00000000000..1f1048c9264 --- /dev/null +++ b/src/directives/TouchHold.js @@ -0,0 +1,197 @@ +import { client } from '../plugins/Platform.js' +import { isDeepEqual } from '../utils/is.js' +import { addEvt, cleanEvt, position, leftClick, stopAndPrevent, noop } from '../utils/event.js' +import { clearSelection } from '../utils/private/selection.js' + +function parseArg (arg) { + // duration in ms, touch in pixels, mouse in pixels + const data = [600, 5, 7] + + if (typeof arg === 'string' && arg.length > 0) { + arg.split(':').forEach((val, index) => { + const v = parseInt(val, 10) + v && (data[index] = v) + }) + } + + return { + duration: data[0], + touchSensitivity: data[1], + mouseSensitivity: data[2] + } +} + +function destroy (el) { + const ctx = el.__qtouchhold + if (ctx !== void 0) { + cleanEvt(ctx, 'main') + cleanEvt(ctx, 'temp') + + clearTimeout(ctx.timer) + ctx.styleCleanup !== void 0 && ctx.styleCleanup() + + delete el.__qtouchhold + } +} + +function configureEvents (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse') + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', `passive${modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : ''}` ] + ]) + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch') + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', `passive${modifiers.capture === true ? 'Capture' : ''}` ], + [ el, 'touchmove', 'noop', 'passiveCapture' ] + ]) + } + + ctx.modifiers = modifiers +} + +export default { + name: 'touch-hold', + + bind (el, { modifiers, arg, value }) { + if (el.__qtouchhold !== void 0) { + destroy(el) + el.__qtouchhold_destroyed = true + } + + const ctx = { + handler: value, + arg, + modifiers: { capture: null }, // make sure touch listeners are initiated + + ...parseArg(arg), + + noop, + + mouseStart (evt) { + if (typeof ctx.handler === 'function' && leftClick(evt) === true) { + addEvt(ctx, 'temp', [ + [document, 'mousemove', 'move', 'passiveCapture'], + [document, 'click', 'end', 'notPassiveCapture'] + ]) + ctx.start(evt, true) + } + }, + + touchStart (evt) { + if (evt.target !== void 0 && typeof ctx.handler === 'function') { + const target = evt.target + addEvt(ctx, 'temp', [ + [target, 'touchmove', 'move', 'passiveCapture'], + [target, 'touchcancel', 'end', 'notPassiveCapture'], + [target, 'touchend', 'end', 'notPassiveCapture'] + ]) + ctx.start(evt) + } + }, + + start (evt, mouseEvent) { + ctx.origin = position(evt) + + const startTime = Date.now() + + if (client.is.mobile === true) { + document.body.classList.add('non-selectable') + clearSelection() + + ctx.styleCleanup = withDelay => { + ctx.styleCleanup = void 0 + + const remove = () => { + document.body.classList.remove('non-selectable') + } + + if (withDelay === true) { + clearSelection() + setTimeout(remove, 10) + } + else { remove() } + } + } + + ctx.triggered = false + ctx.sensitivity = mouseEvent === true + ? ctx.mouseSensitivity + : ctx.touchSensitivity + + ctx.timer = setTimeout(() => { + clearSelection() + ctx.triggered = true + + ctx.handler({ + evt, + touch: mouseEvent !== true, + mouse: mouseEvent === true, + position: ctx.origin, + duration: Date.now() - startTime + }) + }, ctx.duration) + }, + + move (evt) { + const { top, left } = position(evt) + if ( + Math.abs(left - ctx.origin.left) >= ctx.sensitivity || + Math.abs(top - ctx.origin.top) >= ctx.sensitivity + ) { + clearTimeout(ctx.timer) + } + }, + + end (evt) { + cleanEvt(ctx, 'temp') + + // delay needed otherwise selection still occurs + ctx.styleCleanup !== void 0 && ctx.styleCleanup(ctx.triggered) + + if (ctx.triggered === true) { + evt !== void 0 && stopAndPrevent(evt) + } + else { + clearTimeout(ctx.timer) + } + } + } + + el.__qtouchhold = ctx + + configureEvents(el, ctx, modifiers) + }, + + update (el, { modifiers, arg, value, oldValue }) { + const ctx = el.__qtouchhold + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end() + ctx.handler = value + } + + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg(arg)) + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents(el, ctx, modifiers) + } + } + }, + + unbind (el) { + if (el.__qtouchhold_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qtouchhold_destroyed + } + } +} diff --git a/src/directives/TouchHold.json b/src/directives/TouchHold.json new file mode 100644 index 00000000000..85f882dd80a --- /dev/null +++ b/src/directives/TouchHold.json @@ -0,0 +1,86 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/touch-hold" + }, + + "value": { + "type": "Function", + "desc": "Function to call after user has hold touch/click for the specified amount of time (use a non-function to disable)", + "params": { + "details": { + "type": "Object", + "desc": "Event details", + "definition": { + "evt": { + "type": "Object", + "desc": "Original JS event Object", + "__exemption": [ "examples" ] + }, + "touch": { + "type": "Boolean", + "desc": "Triggered by a touch event" + }, + "mouse": { + "type": "Boolean", + "desc": "Triggered by a mouse event" + }, + "position": { + "type": "Object", + "desc": "Event Position Object", + "definition": { + "top": { + "type": "Number", + "desc": "Vertical offset from top of window", + "examples": [ 235 ] + }, + "left": { + "type": "Number", + "desc": "Horizontal offset from left of window", + "examples": [ 235 ] + } + } + }, + "duration": { + "type": "Number", + "desc": "How long it took to trigger the event (in milliseconds)", + "examples": [ 612 ] + } + } + } + }, + "returns": null, + "examples": [ "v-touch-hold=\"fnToCall\"", "v-touch-hold=\"void 0\"" ] + }, + + "arg": { + "type": "String", + "desc": "x:y:z, where x is the amount of time to wait (in milliseconds), y is the touch event sensitivity (in pixels) and z is the mouse event sensitivity (in pixels)", + "reactive": true, + "default": "600:5:7", + "examples": [ + "v-touch-hold:400=\"fnToCall\"", + "v-touch-hold:400:15=\"fnToCall\"", + "v-touch-hold:400:10:10=\"fnToCall\"" + ] + }, + + "modifiers": { + "capture": { + "type": "Boolean", + "desc": "Use capture for touchstart event", + "reactive": true + }, + + "mouse": { + "type": "Boolean", + "desc": "Listen for mouse events too", + "reactive": true + }, + + "mouseCapture": { + "type": "Boolean", + "desc": "Use capture for mousedown event", + "reactive": true + } + } +} diff --git a/src/directives/TouchPan.js b/src/directives/TouchPan.js new file mode 100644 index 00000000000..55efe6219d1 --- /dev/null +++ b/src/directives/TouchPan.js @@ -0,0 +1,438 @@ +import { client } from '../plugins/Platform.js' +import { isDeepEqual } from '../utils/is.js' +import { getModifierDirections, shouldStart } from '../utils/private/touch.js' +import { addEvt, cleanEvt, position, leftClick, prevent, stop, stopAndPrevent, preventDraggable, noop } from '../utils/event.js' +import { clearSelection } from '../utils/private/selection.js' + +function getChanges (evt, ctx, isFinal) { + const pos = position(evt) + let + dir, + distX = pos.left - ctx.event.x, + distY = pos.top - ctx.event.y, + absX = Math.abs(distX), + absY = Math.abs(distY) + + const direction = ctx.direction + + if (direction.horizontal === true && direction.vertical !== true) { + dir = distX < 0 ? 'left' : 'right' + } + else if (direction.horizontal !== true && direction.vertical === true) { + dir = distY < 0 ? 'up' : 'down' + } + else if (direction.up === true && distY < 0) { + dir = 'up' + if (absX > absY) { + if (direction.left === true && distX < 0) { + dir = 'left' + } + else if (direction.right === true && distX > 0) { + dir = 'right' + } + } + } + else if (direction.down === true && distY > 0) { + dir = 'down' + if (absX > absY) { + if (direction.left === true && distX < 0) { + dir = 'left' + } + else if (direction.right === true && distX > 0) { + dir = 'right' + } + } + } + else if (direction.left === true && distX < 0) { + dir = 'left' + if (absX < absY) { + if (direction.up === true && distY < 0) { + dir = 'up' + } + else if (direction.down === true && distY > 0) { + dir = 'down' + } + } + } + else if (direction.right === true && distX > 0) { + dir = 'right' + if (absX < absY) { + if (direction.up === true && distY < 0) { + dir = 'up' + } + else if (direction.down === true && distY > 0) { + dir = 'down' + } + } + } + + let synthetic = false + + if (dir === void 0 && isFinal === false) { + if (ctx.event.isFirst === true || ctx.event.lastDir === void 0) { + return {} + } + + dir = ctx.event.lastDir + synthetic = true + + if (dir === 'left' || dir === 'right') { + pos.left -= distX + absX = 0 + distX = 0 + } + else { + pos.top -= distY + absY = 0 + distY = 0 + } + } + + return { + synthetic, + payload: { + evt, + touch: ctx.event.mouse !== true, + mouse: ctx.event.mouse === true, + position: pos, + direction: dir, + isFirst: ctx.event.isFirst, + isFinal: isFinal === true, + duration: Date.now() - ctx.event.time, + distance: { + x: absX, + y: absY + }, + offset: { + x: distX, + y: distY + }, + delta: { + x: pos.left - ctx.event.lastX, + y: pos.top - ctx.event.lastY + } + } + } +} + +function destroy (el) { + const ctx = el.__qtouchpan + if (ctx !== void 0) { + // emit the end event when the directive is destroyed while active + // this is only needed in TouchPan because the rest of the touch directives do not emit an end event + // the condition is also checked in the start of function but we avoid the call + ctx.event !== void 0 && ctx.end() + + cleanEvt(ctx, 'main_mouse') + cleanEvt(ctx, 'main_touch') + cleanEvt(ctx, 'temp') + + client.is.firefox === true && preventDraggable(el, false) + ctx.styleCleanup !== void 0 && ctx.styleCleanup() + + delete el.__qtouchpan + } +} + +function configureEvents (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse') + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', `passive${modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : ''}` ] + ]) + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch') + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', `passive${modifiers.capture === true ? 'Capture' : ''}` ], + [ el, 'touchmove', 'noop', 'notPassiveCapture' ] // cannot be passive (ex: iOS scroll) + ]) + } + + ctx.modifiers = modifiers +} + +function handleEvent (ctx, evt, mouseEvent) { + if (ctx.modifiers.mouse === true && mouseEvent === true) { + stopAndPrevent(evt) + } + else { + ctx.modifiers.stop === true && stop(evt) + ctx.modifiers.prevent === true && prevent(evt) + } +} + +let uid = 0 + +export default { + name: 'touch-pan', + + bind (el, { modifiers, value }) { + if (el.__qtouchpan !== void 0) { + destroy(el) + el.__qtouchpan_destroyed = true + } + + const ctx = { + uid: 'qvtp_' + (uid++), + handler: value, + modifiers: { capture: null }, // make sure touch listeners are initiated + direction: getModifierDirections(modifiers), + + noop, + + mouseStart (evt) { + if (shouldStart(evt, ctx) && leftClick(evt)) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', 'notPassiveCapture' ], + [ document, 'mouseup', 'end', 'passiveCapture' ] + ]) + + ctx.start(evt, true) + } + }, + + touchStart (evt) { + if (shouldStart(evt, ctx)) { + const target = evt.target + + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'notPassiveCapture' ], + [ target, 'touchcancel', 'end', 'passiveCapture' ], + [ target, 'touchend', 'end', 'passiveCapture' ] + ]) + + ctx.start(evt) + } + }, + + start (evt, mouseEvent) { + client.is.firefox === true && preventDraggable(el, true) + ctx.lastEvt = evt + + /* + * Stop propagation so possible upper v-touch-pan don't catch this as well; + * If we're not the target (based on modifiers), we'll re-emit the event later + */ + if (mouseEvent === true || ctx.modifiers.stop === true) { + /* + * are we directly switching to detected state? + * clone event only otherwise + */ + if ( + ctx.direction.all !== true && + (mouseEvent !== true || (ctx.modifiers.mouseAllDir !== true && ctx.modifiers.mousealldir !== true)) + ) { + const clone = evt.type.indexOf('mouse') > -1 + ? new MouseEvent(evt.type, evt) + : new TouchEvent(evt.type, evt) + + evt.defaultPrevented === true && prevent(clone) + evt.cancelBubble === true && stop(clone) + + Object.assign(clone, { + qClickOutside: evt.qClickOutside, + qAnchorHandled: evt.qAnchorHandled, + qClonedBy: evt.qClonedBy === void 0 + ? [ ctx.uid ] + : evt.qClonedBy.concat(ctx.uid) + }) + + ctx.initialEvent = { + target: evt.target, + event: clone + } + } + + stop(evt) + } + + const { left, top } = position(evt) + + ctx.event = { + x: left, + y: top, + time: Date.now(), + mouse: mouseEvent === true, + detected: false, + isFirst: true, + isFinal: false, + lastX: left, + lastY: top + } + }, + + move (evt) { + if (ctx.event === void 0) { + return + } + + ctx.lastEvt = evt + + const isMouseEvt = ctx.event.mouse === true + const start = () => { + handleEvent(ctx, evt, isMouseEvt) + + let cursor + if (ctx.modifiers.preserveCursor !== true && ctx.modifiers.preservecursor !== true) { + cursor = document.documentElement.style.cursor || '' + document.documentElement.style.cursor = 'grabbing' + } + isMouseEvt === true && document.body.classList.add('no-pointer-events--children') + document.body.classList.add('non-selectable') + clearSelection() + + ctx.styleCleanup = withDelayedFn => { + ctx.styleCleanup = void 0 + + if (cursor !== void 0) { + document.documentElement.style.cursor = cursor + } + document.body.classList.remove('non-selectable') + + if (isMouseEvt === true) { + const remove = () => { + document.body.classList.remove('no-pointer-events--children') + } + + if (withDelayedFn !== void 0) { + setTimeout(() => { + remove() + withDelayedFn() + }, 50) + } + else { remove() } + } + else if (withDelayedFn !== void 0) { + withDelayedFn() + } + } + } + + if (ctx.event.detected === true) { + ctx.event.isFirst !== true && handleEvent(ctx, evt, ctx.event.mouse) + + const { payload, synthetic } = getChanges(evt, ctx, false) + + if (payload !== void 0) { + if (ctx.handler(payload) === false) { + ctx.end(evt) + } + else { + if (ctx.styleCleanup === void 0 && ctx.event.isFirst === true) { + start() + } + + ctx.event.lastX = payload.position.left + ctx.event.lastY = payload.position.top + ctx.event.lastDir = synthetic === true ? void 0 : payload.direction + ctx.event.isFirst = false + } + } + + return + } + + if ( + ctx.direction.all === true || + (isMouseEvt === true && (ctx.modifiers.mouseAllDir === true || ctx.modifiers.mousealldir === true)) + ) { + start() + ctx.event.detected = true + ctx.move(evt) + return + } + + const + pos = position(evt), + distX = pos.left - ctx.event.x, + distY = pos.top - ctx.event.y, + absX = Math.abs(distX), + absY = Math.abs(distY) + + if (absX !== absY) { + if ( + (ctx.direction.horizontal === true && absX > absY) || + (ctx.direction.vertical === true && absX < absY) || + (ctx.direction.up === true && absX < absY && distY < 0) || + (ctx.direction.down === true && absX < absY && distY > 0) || + (ctx.direction.left === true && absX > absY && distX < 0) || + (ctx.direction.right === true && absX > absY && distX > 0) + ) { + ctx.event.detected = true + ctx.move(evt) + } + else { + ctx.end(evt, true) + } + } + }, + + end (evt, abort) { + if (ctx.event === void 0) { + return + } + + cleanEvt(ctx, 'temp') + client.is.firefox === true && preventDraggable(el, false) + + if (abort === true) { + ctx.styleCleanup !== void 0 && ctx.styleCleanup() + + if (ctx.event.detected !== true && ctx.initialEvent !== void 0) { + ctx.initialEvent.target.dispatchEvent(ctx.initialEvent.event) + } + } + else if (ctx.event.detected === true) { + ctx.event.isFirst === true && ctx.handler(getChanges(evt === void 0 ? ctx.lastEvt : evt, ctx).payload) + + const { payload } = getChanges(evt === void 0 ? ctx.lastEvt : evt, ctx, true) + const fn = () => { ctx.handler(payload) } + + if (ctx.styleCleanup !== void 0) { + ctx.styleCleanup(fn) + } + else { + fn() + } + } + + ctx.event = void 0 + ctx.initialEvent = void 0 + ctx.lastEvt = void 0 + } + } + + el.__qtouchpan = ctx + + configureEvents(el, ctx, modifiers) + }, + + update (el, { modifiers, value, oldValue }) { + const ctx = el.__qtouchpan + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end() + ctx.handler = value + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents(el, ctx, modifiers) + + ctx.direction = getModifierDirections(modifiers) + } + } + }, + + unbind (el) { + if (el.__qtouchpan_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qtouchpan_destroyed + } + } +} diff --git a/src/directives/TouchPan.json b/src/directives/TouchPan.json new file mode 100644 index 00000000000..1c08f4d76ce --- /dev/null +++ b/src/directives/TouchPan.json @@ -0,0 +1,196 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/touch-pan" + }, + + "value": { + "type": "Function", + "desc": "Handler for panning (use a non-function to disable)", + "params": { + "details": { + "type": "Object", + "desc": "Event details", + "definition": { + "evt": { + "type": "Object", + "desc": "Original JS event Object", + "__exemption": [ "examples" ] + }, + "touch": { + "type": "Boolean", + "desc": "Triggered by a touch event" + }, + "mouse": { + "type": "Boolean", + "desc": "Triggered by a mouse event" + }, + "position": { + "type": "Object", + "desc": "Event Position Object", + "definition": { + "top": { + "type": "Number", + "desc": "Vertical offset from top of window", + "examples": [ 235 ] + }, + "left": { + "type": "Number", + "desc": "Horizontal offset from left of window", + "examples": [ 235 ] + } + } + }, + "direction": { + "type": "String", + "desc": "Direction of movement", + "values": [ "up", "right", "down", "left" ] + }, + "isFirst": { + "type": "Boolean", + "desc": "Is first time the handler is called since movement started" + }, + "isFinal": { + "type": "Boolean", + "desc": "Is last time the handler is called since movement ended" + }, + "duration": { + "type": "Number", + "desc": "How long it took to trigger the event (in milliseconds)", + "examples": [ 612 ] + }, + "distance": { + "type": "Object", + "desc": "Absolute distance (in pixels) since movement started from initial point", + "definition": { + "x": { + "type": "Number", + "desc": "Absolute distance horizontally", + "examples": [ 231 ] + }, + "y": { + "type": "Number", + "desc": "Absolute distance vertically", + "examples": [ 231 ] + } + } + }, + "offset": { + "type": "Object", + "desc": "Distance (in pixels) since movement started from initial point", + "definition": { + "x": { + "type": "Number", + "desc": "Distance horizontally", + "examples": [ -231, 110 ] + }, + "y": { + "type": "Number", + "desc": "Distance vertically", + "examples": [ -231, 110 ] + } + } + }, + "delta": { + "type": "Object", + "desc": "Delta of distance (in pixels) since handler was called last time", + "definition": { + "x": { + "type": "Number", + "desc": "Distance horizontally", + "examples": [ 2 ] + }, + "y": { + "type": "Number", + "desc": "Distance vertically", + "examples": [ 1 ] + } + } + } + } + } + }, + "returns": null, + "examples": [ "v-touch-pan=\"fnToCall\"", "v-touch-pan=\"void 0\"" ] + }, + + "modifiers": { + "stop": { + "type": "Boolean", + "desc": "Stop event propagation for touch events", + "reactive": true + }, + + "prevent": { + "type": "Boolean", + "desc": "Calls event.preventDefault() for touch events", + "reactive": true + }, + + "capture": { + "type": "Boolean", + "desc": "Use capture for touchstart event", + "reactive": true + }, + + "mouse": { + "type": "Boolean", + "desc": "Listen for mouse events too", + "reactive": true + }, + + "mouseCapture": { + "type": "Boolean", + "desc": "Use capture for mousedown event", + "reactive": true + }, + + "mouseAllDir": { + "type": "Boolean", + "desc": "Ignore initial mouse move direction (do not abort if the first mouse move is in an unaccepted direction)", + "reactive": true + }, + + "preserveCursor": { + "type": "Boolean", + "desc": "Prevent the mouse cursor from automatically displaying as grabbing when panning", + "reactive": true, + "addedIn": "v1.13" + }, + + "horizontal": { + "type": "Boolean", + "desc": "Catch horizontal (left/right) movement", + "reactive": true + }, + + "vertical": { + "type": "Boolean", + "desc": "Catch vertical (up/down) movement", + "reactive": true + }, + + "up": { + "type": "Boolean", + "desc": "Catch panning to up", + "reactive": true + }, + + "right": { + "type": "Boolean", + "desc": "Catch panning to right", + "reactive": true + }, + + "down": { + "type": "Boolean", + "desc": "Catch panning to down", + "reactive": true + }, + + "left": { + "type": "Boolean", + "desc": "Catch panning to left", + "reactive": true + } + } +} diff --git a/src/directives/TouchRepeat.js b/src/directives/TouchRepeat.js new file mode 100644 index 00000000000..3b045d4794e --- /dev/null +++ b/src/directives/TouchRepeat.js @@ -0,0 +1,282 @@ +import { client } from '../plugins/Platform.js' +import { isDeepEqual } from '../utils/is.js' +import { addEvt, cleanEvt, position, leftClick, stopAndPrevent, noop } from '../utils/event.js' +import { clearSelection } from '../utils/private/selection.js' +import { isKeyCode } from '../utils/private/key-composition.js' + +const + keyCodes = { + esc: 27, + tab: 9, + enter: 13, + space: 32, + up: 38, + left: 37, + right: 39, + down: 40, + 'delete': [8, 46] + }, + keyRegex = new RegExp(`^([\\d+]+|${Object.keys(keyCodes).join('|')})$`, 'i') + +function shouldEnd (evt, origin) { + const { top, left } = position(evt) + + return Math.abs(left - origin.left) >= 7 || + Math.abs(top - origin.top) >= 7 +} + +function parseArg (arg) { + const durations = typeof arg === 'string' && arg.length > 0 + ? arg.split(':').map(val => parseInt(val, 10)) + : [0, 600, 300] + + return { + durations, + durationsLast: durations.length - 1 + } +} + +function destroy (el) { + const ctx = el.__qtouchrepeat + if (ctx !== void 0) { + clearTimeout(ctx.timer) + + cleanEvt(ctx, 'main_mouse') + cleanEvt(ctx, 'main_touch') + cleanEvt(ctx, 'main_kbd') + cleanEvt(ctx, 'temp') + + ctx.styleCleanup !== void 0 && ctx.styleCleanup() + + delete el.__qtouchrepeat + } +} + +function configureEvents (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse') + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', `passive${modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : ''}` ] + ]) + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch') + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', `passive${modifiers.capture === true ? 'Capture' : ''}` ], + [ el, 'touchmove', 'noop', 'passiveCapture' ] + ]) + } + + const keyboard = Object.keys(modifiers).reduce((acc, key) => { + if (keyRegex.test(key) === true) { + const keyCode = isNaN(parseInt(key, 10)) ? keyCodes[key.toLowerCase()] : parseInt(key, 10) + keyCode >= 0 && acc.push(keyCode) + } + return acc + }, []) + + if ((ctx.keyboard.length > 0) !== (keyboard.length > 0) || ctx.modifiers.keyCapture !== modifiers.keyCapture || ctx.modifiers.keycapture !== modifiers.keycapture) { + ctx.keyboard.length > 0 && cleanEvt(ctx, 'main_kbd') + + keyboard.length > 0 && addEvt(ctx, 'main_kbd', [ + [ el, 'keydown', 'keyboardStart', `notPassive${modifiers.keyCapture === true || modifiers.keycapture === true ? 'Capture' : ''}` ] + ]) + } + + ctx.modifiers = modifiers + ctx.keyboard = keyboard +} + +export default { + name: 'touch-repeat', + + bind (el, { modifiers, arg, value }) { + if (el.__qtouchrepeat !== void 0) { + destroy(el) + el.__qtouchrepeat_destroyed = true + } + + const ctx = { + keyboard: [], + handler: value, + arg, + modifiers: { capture: null }, // make sure touch listeners are initiated + + ...parseArg(arg), + + noop, + + mouseStart (evt) { + if (ctx.event === void 0 && typeof ctx.handler === 'function' && leftClick(evt) === true) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', 'passiveCapture' ], + [ document, 'click', 'end', 'notPassiveCapture' ] + ]) + ctx.start(evt, true) + } + }, + + keyboardStart (evt) { + if (typeof ctx.handler === 'function' && isKeyCode(evt, ctx.keyboard) === true) { + if (ctx.durations[0] === 0 || ctx.event !== void 0) { + stopAndPrevent(evt) + el.focus() + if (ctx.event !== void 0) { + return + } + } + + addEvt(ctx, 'temp', [ + [ document, 'keyup', 'end', 'notPassiveCapture' ], + [ document, 'click', 'end', 'notPassiveCapture' ] + ]) + ctx.start(evt, false, true) + } + }, + + touchStart (evt) { + if (evt.target !== void 0 && typeof ctx.handler === 'function') { + const target = evt.target + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'passiveCapture' ], + [ target, 'touchcancel', 'end', 'notPassiveCapture' ], + [ target, 'touchend', 'end', 'notPassiveCapture' ] + ]) + ctx.start(evt) + } + }, + + start (evt, mouseEvent, keyboardEvent) { + if (keyboardEvent !== true) { + ctx.origin = position(evt) + } + + function styleCleanup (withDelay) { + ctx.styleCleanup = void 0 + + document.documentElement.style.cursor = '' + + const remove = () => { + document.body.classList.remove('non-selectable') + } + + if (withDelay === true) { + clearSelection() + setTimeout(remove, 10) + } + else { remove() } + } + + if (client.is.mobile === true) { + document.body.classList.add('non-selectable') + clearSelection() + ctx.styleCleanup = styleCleanup + } + + ctx.event = { + touch: mouseEvent !== true && keyboardEvent !== true, + mouse: mouseEvent === true, + keyboard: keyboardEvent === true, + startTime: Date.now(), + repeatCount: 0 + } + + const fn = () => { + if (ctx.event === void 0) { + return + } + + if (ctx.event.repeatCount === 0) { + ctx.event.evt = evt + + if (keyboardEvent === true) { + ctx.event.keyCode = evt.keyCode + } + else { + ctx.event.position = position(evt) + } + + if (client.is.mobile !== true) { + document.documentElement.style.cursor = 'pointer' + document.body.classList.add('non-selectable') + clearSelection() + ctx.styleCleanup = styleCleanup + } + } + + ctx.event.duration = Date.now() - ctx.event.startTime + ctx.event.repeatCount += 1 + + ctx.handler(ctx.event) + + const index = ctx.durationsLast < ctx.event.repeatCount + ? ctx.durationsLast + : ctx.event.repeatCount + + ctx.timer = setTimeout(fn, ctx.durations[index]) + } + + if (ctx.durations[0] === 0) { + fn() + } + else { + ctx.timer = setTimeout(fn, ctx.durations[0]) + } + }, + + move (evt) { + if (ctx.event !== void 0 && shouldEnd(evt, ctx.origin) === true) { + clearTimeout(ctx.timer) + } + }, + + end (evt) { + if (ctx.event === void 0) { + return + } + + ctx.styleCleanup !== void 0 && ctx.styleCleanup(true) + evt !== void 0 && ctx.event.repeatCount > 0 && stopAndPrevent(evt) + + cleanEvt(ctx, 'temp') + clearTimeout(ctx.timer) + + ctx.event = void 0 + } + } + + el.__qtouchrepeat = ctx + + configureEvents(el, ctx, modifiers) + }, + + update (el, { modifiers, arg, value, oldValue }) { + const ctx = el.__qtouchrepeat + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end() + ctx.handler = value + } + + if (ctx.arg !== arg) { + Object.assign(ctx, parseArg(arg)) + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents(el, ctx, modifiers) + } + } + }, + + unbind (el) { + if (el.__qtouchrepeat_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qtouchrepeat_destroyed + } + } +} diff --git a/src/directives/TouchRepeat.json b/src/directives/TouchRepeat.json new file mode 100644 index 00000000000..1b106e15c0c --- /dev/null +++ b/src/directives/TouchRepeat.json @@ -0,0 +1,168 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/touch-repeat" + }, + + "value": { + "type": "Function", + "desc": "Handler for touch-repeat (use a non-function to disable)", + "params": { + "details": { + "type": "Object", + "desc": "Event details", + "definition": { + "evt": { + "type": "Object", + "desc": "Original JS event Object", + "__exemption": [ "examples" ] + }, + "touch": { + "type": "Boolean", + "desc": "Triggered by a touch event" + }, + "mouse": { + "type": "Boolean", + "desc": "Triggered by a mouse event" + }, + "keyboard": { + "type": "Boolean", + "desc": "Triggered by a keyboard event" + }, + "position": { + "type": "Object", + "desc": "Event Position Object; Supplied ONLY if it's a touch or mouse event", + "definition": { + "top": { + "type": "Number", + "desc": "Vertical offset from top of window", + "examples": [ 235 ] + }, + "left": { + "type": "Number", + "desc": "Horizontal offset from left of window", + "examples": [ 235 ] + } + } + }, + "keyCode": { + "type": "Number", + "desc": "Keycode; Supplied ONLY if it's a keyboard event", + "examples": [ 65 ] + }, + "duration": { + "type": "Number", + "desc": "How long it took to trigger the event (in milliseconds)", + "examples": [ 612 ] + }, + "repeatCount": { + "type": "Number", + "desc": "Handler called for nth time", + "examples": [ 2 ] + }, + "startTime": { + "type": "Number", + "desc": "Unix timestamp of the moment when event started; Equivalent to Date.now()", + "examples": [ 1558603256472 ] + } + } + } + }, + "returns": null, + "examples": [ "v-touch-repeat=\"fnToCall\"", "v-touch-repeat=\"void 0\"" ] + }, + + "arg": { + "type": "String", + "desc": "String of numbers (at least one number) separated by ':' which defines the amount of time to wait for 1st handler call, 2nd, 3rd and so on; All subsequent calls will use last value as time to wait until triggering", + "reactive": true, + "default": "0:600:300", + "examples": [ "v-touch-repeat:0:400=\"fnToCall\"" ] + }, + + "modifiers": { + "capture": { + "type": "Boolean", + "desc": "Use capture for touchstart event", + "reactive": true + }, + + "mouse": { + "type": "Boolean", + "desc": "Listen for mouse events too", + "reactive": true + }, + + "mouseCapture": { + "type": "Boolean", + "desc": "Use capture for mousedown event", + "reactive": true + }, + + "keyCapture": { + "type": "Boolean", + "desc": "Use capture for keydown event", + "reactive": true + }, + + "esc": { + "type": "Boolean", + "desc": "Catch ESC key", + "reactive": true + }, + + "tab": { + "type": "Boolean", + "desc": "Catch TAB key", + "reactive": true + }, + + "enter": { + "type": "Boolean", + "desc": "Catch ENTER key", + "reactive": true + }, + + "space": { + "type": "Boolean", + "desc": "Catch SPACE key", + "reactive": true + }, + + "up": { + "type": "Boolean", + "desc": "Catch UP arrow key", + "reactive": true + }, + + "left": { + "type": "Boolean", + "desc": "Catch LEFT arrow key", + "reactive": true + }, + + "right": { + "type": "Boolean", + "desc": "Catch RIGHT arrow key", + "reactive": true + }, + + "down": { + "type": "Boolean", + "desc": "Catch DOWN key", + "reactive": true + }, + + "delete": { + "type": "Boolean", + "desc": "Catch DELETE key", + "reactive": true + }, + + "[keycode]": { + "type": "Number", + "desc": "Key code to catch", + "reactive": true, + "examples": [ "v-touch-repeat.68=\"fnToCall\"" ] + } + } +} diff --git a/src/directives/TouchSwipe.js b/src/directives/TouchSwipe.js new file mode 100644 index 00000000000..993479c19eb --- /dev/null +++ b/src/directives/TouchSwipe.js @@ -0,0 +1,294 @@ +import { client } from '../plugins/Platform.js' +import { isDeepEqual } from '../utils/is.js' +import { getModifierDirections, shouldStart } from '../utils/private/touch.js' +import { addEvt, cleanEvt, position, leftClick, stopAndPrevent, preventDraggable, noop } from '../utils/event.js' +import { clearSelection } from '../utils/private/selection.js' + +function parseArg (arg) { + // delta (min velocity -- dist / time) + // mobile min distance on first move + // desktop min distance until deciding if it's a swipe or not + const data = [0.06, 6, 50] + + if (typeof arg === 'string' && arg.length) { + arg.split(':').forEach((val, index) => { + const v = parseFloat(val) + v && (data[index] = v) + }) + } + + return data +} + +function destroy (el) { + const ctx = el.__qtouchswipe + + if (ctx !== void 0) { + cleanEvt(ctx, 'main_mouse') + cleanEvt(ctx, 'main_touch') + cleanEvt(ctx, 'temp') + + client.is.firefox === true && preventDraggable(el, false) + ctx.styleCleanup !== void 0 && ctx.styleCleanup() + + delete el.__qtouchswipe + } +} + +function configureEvents (el, ctx, modifiers) { + if (ctx.modifiers.mouse !== modifiers.mouse || ctx.modifiers.mouseCapture !== modifiers.mouseCapture || ctx.modifiers.mousecapture !== modifiers.mousecapture) { + ctx.modifiers.mouse === true && cleanEvt(ctx, 'main_mouse') + + modifiers.mouse === true && addEvt(ctx, 'main_mouse', [ + [ el, 'mousedown', 'mouseStart', `passive${modifiers.mouseCapture === true || modifiers.mousecapture === true ? 'Capture' : ''}` ] + ]) + } + + if (client.has.touch === true && ctx.modifiers.capture !== modifiers.capture) { + cleanEvt(ctx, 'main_touch') + + addEvt(ctx, 'main_touch', [ + [ el, 'touchstart', 'touchStart', `passive${modifiers.capture === true ? 'Capture' : ''}` ], + [ el, 'touchmove', 'noop', 'notPassiveCapture' ] // cannot be passive (ex: iOS scroll) + ]) + } + + ctx.modifiers = modifiers +} + +export default { + name: 'touch-swipe', + + bind (el, { modifiers, arg, value }) { + if (el.__qtouchswipe !== void 0) { + destroy(el) + el.__qtouchswipe_destroyed = true + } + + const ctx = { + handler: value, + sensitivity: parseArg(arg), + arg, + modifiers: { capture: null }, // make sure touch listeners are initiated + direction: getModifierDirections(modifiers), + + noop, + + mouseStart (evt) { + if (shouldStart(evt, ctx) && leftClick(evt)) { + addEvt(ctx, 'temp', [ + [ document, 'mousemove', 'move', `notPassive${ctx.modifiers.mouseCapture === true ? 'Capture' : ''}` ], + [ document, 'mouseup', 'end', 'notPassiveCapture' ] + ]) + ctx.start(evt, true) + } + }, + + touchStart (evt) { + if (shouldStart(evt, ctx)) { + const target = evt.target + addEvt(ctx, 'temp', [ + [ target, 'touchmove', 'move', 'notPassiveCapture' ], + [ target, 'touchcancel', 'end', 'notPassiveCapture' ], + [ target, 'touchend', 'end', 'notPassiveCapture' ] + ]) + ctx.start(evt) + } + }, + + start (evt, mouseEvent) { + client.is.firefox === true && preventDraggable(el, true) + + const pos = position(evt) + + ctx.event = { + x: pos.left, + y: pos.top, + time: Date.now(), + mouse: mouseEvent === true, + dir: false + } + }, + + move (evt) { + if (ctx.event === void 0) { + return + } + + if (ctx.event.dir !== false) { + stopAndPrevent(evt) + return + } + + const time = Date.now() - ctx.event.time + + if (time === 0) { + return + } + + const + pos = position(evt), + distX = pos.left - ctx.event.x, + absX = Math.abs(distX), + distY = pos.top - ctx.event.y, + absY = Math.abs(distY) + + if (ctx.event.mouse !== true) { + if (absX < ctx.sensitivity[1] && absY < ctx.sensitivity[1]) { + ctx.end(evt) + return + } + } + else if (absX < ctx.sensitivity[2] && absY < ctx.sensitivity[2]) { + return + } + + const + velX = absX / time, + velY = absY / time + + if ( + ctx.direction.vertical === true && + absX < absY && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = distY < 0 ? 'up' : 'down' + } + + if ( + ctx.direction.horizontal === true && + absX > absY && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = distX < 0 ? 'left' : 'right' + } + + if ( + ctx.direction.up === true && + absX < absY && + distY < 0 && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = 'up' + } + + if ( + ctx.direction.down === true && + absX < absY && + distY > 0 && + absX < 100 && + velY > ctx.sensitivity[0] + ) { + ctx.event.dir = 'down' + } + + if ( + ctx.direction.left === true && + absX > absY && + distX < 0 && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = 'left' + } + + if ( + ctx.direction.right === true && + absX > absY && + distX > 0 && + absY < 100 && + velX > ctx.sensitivity[0] + ) { + ctx.event.dir = 'right' + } + + if (ctx.event.dir !== false) { + stopAndPrevent(evt) + + if (ctx.event.mouse === true) { + document.body.classList.add('no-pointer-events--children') + document.body.classList.add('non-selectable') + clearSelection() + + ctx.styleCleanup = withDelay => { + ctx.styleCleanup = void 0 + + document.body.classList.remove('non-selectable') + + const remove = () => { + document.body.classList.remove('no-pointer-events--children') + } + + if (withDelay === true) { setTimeout(remove, 50) } + else { remove() } + } + } + + ctx.handler({ + evt, + touch: ctx.event.mouse !== true, + mouse: ctx.event.mouse, + direction: ctx.event.dir, + duration: time, + distance: { + x: absX, + y: absY + } + }) + } + else { + ctx.end(evt) + } + }, + + end (evt) { + if (ctx.event === void 0) { + return + } + + cleanEvt(ctx, 'temp') + client.is.firefox === true && preventDraggable(el, false) + ctx.styleCleanup !== void 0 && ctx.styleCleanup(true) + evt !== void 0 && ctx.event.dir !== false && stopAndPrevent(evt) + + ctx.event = void 0 + } + } + + el.__qtouchswipe = ctx + + configureEvents(el, ctx, modifiers) + }, + + update (el, { modifiers, arg, value, oldValue }) { + const ctx = el.__qtouchswipe + if (ctx !== void 0) { + if (oldValue !== value) { + typeof value !== 'function' && ctx.end() + ctx.handler = value + } + + if (ctx.arg !== arg) { + ctx.sensitivity = parseArg(arg) + } + + if (isDeepEqual(ctx.modifiers, modifiers) !== true) { + configureEvents(el, ctx, modifiers) + + ctx.direction = getModifierDirections(modifiers) + } + } + }, + + unbind (el) { + if (el.__qtouchswipe_destroyed === void 0) { + destroy(el) + } + else { + delete el.__qtouchswipe_destroyed + } + } +} diff --git a/src/directives/TouchSwipe.json b/src/directives/TouchSwipe.json new file mode 100644 index 00000000000..8af10592e34 --- /dev/null +++ b/src/directives/TouchSwipe.json @@ -0,0 +1,123 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-directives/touch-swipe" + }, + + "value": { + "type": "Function", + "desc": "Handler for swipe (use a non-function to disable)", + "params": { + "details": { + "type": "Object", + "desc": "Event details", + "definition": { + "evt": { + "type": "Object", + "desc": "Original JS event Object", + "__exemption": [ "examples" ] + }, + "touch": { + "type": "Boolean", + "desc": "Triggered by a touch event" + }, + "mouse": { + "type": "Boolean", + "desc": "Triggered by a mouse event" + }, + "direction": { + "type": "String", + "desc": "Direction of movement", + "values": [ "up", "right", "down", "left" ] + }, + "duration": { + "type": "Number", + "desc": "How long it took to trigger the event (in milliseconds)", + "examples": [ 612 ] + }, + "distance": { + "type": "Object", + "desc": "Absolute distance (in pixels) since movement started from initial point", + "definition": { + "x": { + "type": "Number", + "desc": "Absolute distance horizontally", + "examples": [ 231 ] + }, + "y": { + "type": "Number", + "desc": "Absolute distance vertically", + "examples": [ 231 ] + } + } + } + } + } + }, + "returns": null, + "examples": [ "v-touch-swipe=\"fnToCall\"", "v-touch-swipe=\"void 0\"" ] + }, + + "arg": { + "type": "String", + "desc": "x:y:z, where x is minimum velocity (dist/time; please use float without a dot, example: 6e-2 which is equivalent to 6 * 10^-2 = 0.06), y is minimum distance on first move on mobile, z is minimum distance on desktop until deciding if it's a swipe indeed", + "reactive": true, + "default": "6e-2:6:50", + "examples": [ "v-touch-swipe:7e-2:10:100=\"fnToCall\"" ] + }, + + "modifiers": { + "capture": { + "type": "Boolean", + "desc": "Use capture for touchstart event", + "reactive": true + }, + + "mouse": { + "type": "Boolean", + "desc": "Listen for mouse events too", + "reactive": true + }, + + "mouseCapture": { + "type": "Boolean", + "desc": "Use capture for mousedown event", + "reactive": true + }, + + "horizontal": { + "type": "Boolean", + "desc": "Catch horizontal (left/right) movement", + "reactive": true + }, + + "vertical": { + "type": "Boolean", + "desc": "Catch vertical (up/down) movement", + "reactive": true + }, + + "up": { + "type": "Boolean", + "desc": "Catch swipe to up", + "reactive": true + }, + + "right": { + "type": "Boolean", + "desc": "Catch swipe to right", + "reactive": true + }, + + "down": { + "type": "Boolean", + "desc": "Catch swipe to down", + "reactive": true + }, + + "left": { + "type": "Boolean", + "desc": "Catch swipe to left", + "reactive": true + } + } +} diff --git a/src/history.js b/src/history.js new file mode 100644 index 00000000000..dbc611a446d --- /dev/null +++ b/src/history.js @@ -0,0 +1,120 @@ +import { isSSR, client } from './plugins/Platform.js' +import { noop } from './utils/event.js' + +const getTrue = () => true + +function filterInvalidPath (path) { + return typeof path === 'string' && + path !== '' && + path !== '/' && + path !== '#/' +} + +function normalizeExitPath (path) { + path.startsWith('#') === true && (path = path.substr(1)) + path.startsWith('/') === false && (path = '/' + path) + path.endsWith('/') === true && (path = path.substr(0, path.length - 1)) + return '#' + path +} + +function getShouldExitFn (cfg) { + if (cfg.backButtonExit === false) { + return () => false + } + + if (cfg.backButtonExit === '*') { + return getTrue + } + + // Add default root path + const exitPaths = [ '#/' ] + + // Add custom exit paths + Array.isArray(cfg.backButtonExit) === true && exitPaths.push( + ...cfg.backButtonExit.filter(filterInvalidPath).map(normalizeExitPath) + ) + + return () => exitPaths.includes(window.location.hash) +} + +export default { + __history: [], + add: noop, + remove: noop, + + install (cfg) { + if (isSSR === true) { + return + } + + const { cordova, capacitor } = client.is + + if (cordova !== true && capacitor !== true) { + return + } + + const qConf = cfg[cordova === true ? 'cordova' : 'capacitor'] + + if (qConf !== void 0 && qConf.backButton === false) { + return + } + + // if the '@capacitor/app' plugin is not installed + // then we got nothing to do + if ( + // if we're on Capacitor mode + capacitor === true && + // and it's also not in Capacitor's main instance + (window.Capacitor === void 0 || window.Capacitor.Plugins.App === void 0) + ) { + return + } + + this.add = entry => { + if (entry.condition === void 0) { + entry.condition = getTrue + } + this.__history.push(entry) + } + + this.remove = entry => { + const index = this.__history.indexOf(entry) + if (index >= 0) { + this.__history.splice(index, 1) + } + } + + const shouldExit = getShouldExitFn( + Object.assign( + { backButtonExit: true }, + qConf + ) + ) + + const backHandler = () => { + if (this.__history.length) { + const entry = this.__history[this.__history.length - 1] + + if (entry.condition() === true) { + this.__history.pop() + entry.handler() + } + } + else if (shouldExit() === true) { + navigator.app.exitApp() + } + else { + window.history.back() + } + } + + if (cordova === true) { + document.addEventListener('deviceready', () => { + document.addEventListener('backbutton', backHandler, false) + }) + } + else { + window.Capacitor.Plugins.App.addListener('backButton', backHandler) + } + } +} diff --git a/src/icon-set.js b/src/icon-set.js new file mode 100644 index 00000000000..1cc2e21d7a5 --- /dev/null +++ b/src/icon-set.js @@ -0,0 +1,45 @@ +import Vue from 'vue' + +import { isSSR } from './plugins/Platform.js' +import materialIcons from '../icon-set/material-icons.js' + +export default { + install ($q, queues, iconSet) { + const initialSet = iconSet || materialIcons + + this.set = (setObject, ssrContext) => { + const def = { ...setObject } + + if (isSSR === true) { + if (ssrContext === void 0) { + console.error('SSR ERROR: second param required: Quasar.iconSet.set(iconSet, ssrContext)') + return + } + + def.set = ssrContext.$q.iconSet.set + ssrContext.$q.iconSet = def + } + else { + def.set = this.set + $q.iconSet = def + } + } + + if (isSSR === true) { + queues.server.push((q, ctx) => { + q.iconSet = {} + q.iconSet.set = setObject => { + this.set(setObject, ctx.ssr) + } + + q.iconSet.set(initialSet) + }) + } + else { + Vue.util.defineReactive($q, 'iconMapFn', void 0) + Vue.util.defineReactive($q, 'iconSet', {}) + + this.set(initialSet) + } + } +} diff --git a/src/ie-compat/ie.js b/src/ie-compat/ie.js new file mode 100644 index 00000000000..7fe28672463 --- /dev/null +++ b/src/ie-compat/ie.js @@ -0,0 +1,1409 @@ +/* eslint-disable no-extend-native */ + +typeof window !== 'undefined' && (function (window) { + // from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md + (function (arr) { + arr.forEach(function (item) { + if (item.hasOwnProperty('remove')) { + return + } + Object.defineProperty(item, 'remove', { + configurable: true, + enumerable: true, + writable: true, + value: function remove () { + if (this.parentNode === null) { + return + } + this.parentNode.removeChild(this) + } + }) + }) + })([Element.prototype, CharacterData.prototype, DocumentType.prototype]) + + try { + new MouseEvent('test') // eslint-disable-line no-new, no-use-before-define + } + catch (e) { + // Polyfills DOM4 MouseEvent + var MouseEventPolyfill = function (eventType, params) { + params = params || { bubbles: false, cancelable: false } + var mouseEvent = document.createEvent('MouseEvent') + mouseEvent.initMouseEvent(eventType, + params.bubbles, + params.cancelable, + window, + 0, + params.screenX || 0, + params.screenY || 0, + params.clientX || 0, + params.clientY || 0, + params.ctrlKey || false, + params.altKey || false, + params.shiftKey || false, + params.metaKey || false, + params.button || 0, + params.relatedTarget || null + ) + + return mouseEvent + } + + MouseEventPolyfill.prototype = Event.prototype + + window.MouseEvent = MouseEventPolyfill + } + + if (typeof Object.assign !== 'function') { + // Must be writable: true, enumerable: false, configurable: true + Object.defineProperty(Object, 'assign', { + value: function assign (target, varArgs) { // .length of function is 2 + 'use strict' + if (target === null || target === void 0) { + throw new TypeError('Cannot convert undefined or null to object') + } + + var to = Object(target) + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index] + if (nextSource !== null && nextSource !== void 0) { + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey] + } + } + } + } + return to + }, + writable: true, + configurable: true + }) + } + + if (!String.prototype.startsWith) { + Object.defineProperty(String.prototype, 'startsWith', { + value: function (search, rawPos) { + var pos = rawPos > 0 ? rawPos | 0 : 0 + return this.substring(pos, pos + search.length) === search + } + }) + } + + if (!String.prototype.endsWith) { + String.prototype.endsWith = function (search, thisLen) { + if (thisLen === void 0 || thisLen > this.length) { + thisLen = this.length + } + return this.substring(thisLen - search.length, thisLen) === search + } + } + + if (!Number.isInteger) { + Number.isInteger = function (value) { + return typeof value === 'number' && + isFinite(value) && + Math.floor(value) === value + } + } + + if (!Array.prototype.includes) { + Array.prototype.includes = function (search) { + return !!~this.indexOf(search) + } + } + + if (!Element.prototype.matches) { + Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector + } + + if (!Element.prototype.closest) { + Element.prototype.closest = function (s) { + var el = this + + do { + if (el.matches(s)) return el + el = el.parentElement || el.parentNode + } while (el !== null && el.nodeType === 1) + + return null + } + } + + // https://tc39.github.io/ecma262/#sec-array.prototype.find + if (!Array.prototype.find) { + Object.defineProperty(Array.prototype, 'find', { + value: function (predicate) { + // 1. Let O be ? ToObject(this value). + if (this == null) { + throw TypeError('"this" is null or not defined') + } + + var o = Object(this) + + // 2. Let len be ? ToLength(? Get(O, "length")). + var len = o.length >>> 0 + + // 3. If IsCallable(predicate) is false, throw a TypeError exception. + if (typeof predicate !== 'function') { + throw TypeError('predicate must be a function') + } + + // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. + var thisArg = arguments[1] + + // 5. Let k be 0. + var k = 0 + + // 6. Repeat, while k < len + while (k < len) { + // a. Let Pk be ! ToString(k). + // b. Let kValue be ? Get(O, Pk). + // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). + // d. If testResult is true, return kValue. + var kValue = o[k] + if (predicate.call(thisArg, kValue, k, o)) { + return kValue + } + // e. Increase k by 1. + k++ + } + + // 7. Return undefined. + }, + configurable: true, + writable: true + }) + } + + if (!Array.prototype.findIndex) { + Object.defineProperty(Array.prototype, 'findIndex', { + value (predicate) { + 'use strict' + if (this == null) { + throw new TypeError('Array.prototype.findIndex called on null or undefined') + } + if (typeof predicate !== 'function') { + throw new TypeError('predicate must be a function') + } + var list = Object(this) + var length = list.length >>> 0 + var thisArg = arguments[1] + + for (var i = 0; i < length; i++) { + if (predicate.call(thisArg, list[i], i, list)) { + return i + } + } + return -1 + } + }) + } + + if (!('classList' in SVGElement.prototype)) { + Object.defineProperty(SVGElement.prototype, 'classList', { + get: function get () { + var _this = this + + return { + contains: function contains (className) { + return _this.className.baseVal.split(' ').indexOf(className) !== -1 + }, + add: function add (className) { + return _this.setAttribute( + 'class', + _this.getAttribute('class') + ' ' + className + ) + }, + remove: function remove (className) { + var removedClass = _this + .getAttribute('class') + .replace( + new RegExp('(\\s|^)'.concat(className, '(\\s|$)'), 'g'), + '$2' + ) + + if (_this.classList.contains(className)) { + _this.setAttribute('class', removedClass) + } + }, + toggle: function toggle (className) { + if (this.contains(className)) { + this.remove(className) + } + else { + this.add(className) + } + } + } + } + }) + } +}(window)) + +/* eslint-disable */ + +/*! + * @overview es6-promise - a tiny implementation of Promises/A+. + * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald) + * @license Licensed under MIT license + * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE + * @version v4.2.4+314e4831 + */ +function objectOrFunction(x) { + var type = typeof x; + return x !== null && (type === 'object' || type === 'function'); +} + +function isFunction(x) { + return typeof x === 'function'; +} + + + +var _isArray = void 0; +if (Array.isArray) { + _isArray = Array.isArray; +} else { + _isArray = function (x) { + return Object.prototype.toString.call(x) === '[object Array]'; + }; +} + +var isArray = _isArray; + +var len = 0; +var vertxNext = void 0; +var customSchedulerFn = void 0; + +var asap = function asap(callback, arg) { + queue[len] = callback; + queue[len + 1] = arg; + len += 2; + if (len === 2) { + // If len is 2, that means that we need to schedule an async flush. + // If additional callbacks are queued before the queue is flushed, they + // will be processed by this flush that we are scheduling. + if (customSchedulerFn) { + customSchedulerFn(flush); + } else { + scheduleFlush(); + } + } +}; + +function setScheduler(scheduleFn) { + customSchedulerFn = scheduleFn; +} + +function setAsap(asapFn) { + asap = asapFn; +} + +var browserWindow = typeof window !== 'undefined' ? window : void 0; +var browserGlobal = browserWindow || {}; +var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver; +var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]'; + +// test for web worker but not in IE10 +var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; + +// node +function useNextTick() { + // node version 0.10.x displays a deprecation warning when nextTick is used recursively + // see https://github.com/cujojs/when/issues/410 for details + return function () { + return process.nextTick(flush); + }; +} + +// vertx +function useVertxTimer() { + if (typeof vertxNext !== 'undefined') { + return function () { + vertxNext(flush); + }; + } + + return useSetTimeout(); +} + +function useMutationObserver() { + var iterations = 0; + var observer = new BrowserMutationObserver(flush); + var node = document.createTextNode(''); + observer.observe(node, { characterData: true }); + + return function () { + node.data = iterations = ++iterations % 2; + }; +} + +// web worker +function useMessageChannel() { + var channel = new MessageChannel(); + channel.port1.onmessage = flush; + return function () { + return channel.port2.postMessage(0); + }; +} + +function useSetTimeout() { + // Store setTimeout reference so es6-promise will be unaffected by + // other code modifying setTimeout (like sinon.useFakeTimers()) + var globalSetTimeout = setTimeout; + return function () { + return globalSetTimeout(flush, 1); + }; +} + +var queue = new Array(1000); +function flush() { + for (var i = 0; i < len; i += 2) { + var callback = queue[i]; + var arg = queue[i + 1]; + + callback(arg); + + queue[i] = void 0; + queue[i + 1] = void 0; + } + + len = 0; +} + +function attemptVertx() { + try { + var vertx = Function('return this')().require('vertx'); + vertxNext = vertx.runOnLoop || vertx.runOnContext; + return useVertxTimer(); + } catch (e) { + return useSetTimeout(); + } +} + +var scheduleFlush = void 0; +// Decide what async method to use to triggering processing of queued callbacks: +if (isNode) { + scheduleFlush = useNextTick(); +} else if (BrowserMutationObserver) { + scheduleFlush = useMutationObserver(); +} else if (isWorker) { + scheduleFlush = useMessageChannel(); +} else if (browserWindow === void 0 && typeof require === 'function') { + scheduleFlush = attemptVertx(); +} else { + scheduleFlush = useSetTimeout(); +} + +function then(onFulfillment, onRejection) { + var parent = this; + + var child = new this.constructor(noop); + + if (child[PROMISE_ID] === void 0) { + makePromise(child); + } + + var _state = parent._state; + + + if (_state) { + var callback = arguments[_state - 1]; + asap(function () { + return invokeCallback(_state, child, callback, parent._result); + }); + } else { + subscribe(parent, child, onFulfillment, onRejection); + } + + return child; +} + +/** + `Promise.resolve` returns a promise that will become resolved with the + passed `value`. It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + resolve(1); + }); + + promise.then(function(value){ + // value === 1 + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.resolve(1); + + promise.then(function(value){ + // value === 1 + }); + ``` + + @method resolve + @static + @param {Any} value value that the returned promise will be resolved with + Useful for tooling. + @return {Promise} a promise that will become fulfilled with the given + `value` +*/ +function resolve$1(object) { + /*jshint validthis:true */ + var Constructor = this; + + if (object && typeof object === 'object' && object.constructor === Constructor) { + return object; + } + + var promise = new Constructor(noop); + resolve(promise, object); + return promise; +} + +var PROMISE_ID = Math.random().toString(36).substring(2); + +function noop() {} + +var PENDING = void 0; +var FULFILLED = 1; +var REJECTED = 2; + +var TRY_CATCH_ERROR = { error: null }; + +function selfFulfillment() { + return new TypeError("You cannot resolve a promise with itself"); +} + +function cannotReturnOwn() { + return new TypeError('A promises callback cannot return that same promise.'); +} + +function getThen(promise) { + try { + return promise.then; + } catch (error) { + TRY_CATCH_ERROR.error = error; + return TRY_CATCH_ERROR; + } +} + +function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) { + try { + then$$1.call(value, fulfillmentHandler, rejectionHandler); + } catch (e) { + return e; + } +} + +function handleForeignThenable(promise, thenable, then$$1) { + asap(function (promise) { + var sealed = false; + var error = tryThen(then$$1, thenable, function (value) { + if (sealed) { + return; + } + sealed = true; + if (thenable !== value) { + resolve(promise, value); + } else { + fulfill(promise, value); + } + }, function (reason) { + if (sealed) { + return; + } + sealed = true; + + reject(promise, reason); + }, 'Settle: ' + (promise._label || ' unknown promise')); + + if (!sealed && error) { + sealed = true; + reject(promise, error); + } + }, promise); +} + +function handleOwnThenable(promise, thenable) { + if (thenable._state === FULFILLED) { + fulfill(promise, thenable._result); + } else if (thenable._state === REJECTED) { + reject(promise, thenable._result); + } else { + subscribe(thenable, void 0, function (value) { + return resolve(promise, value); + }, function (reason) { + return reject(promise, reason); + }); + } +} + +function handleMaybeThenable(promise, maybeThenable, then$$1) { + if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) { + handleOwnThenable(promise, maybeThenable); + } else { + if (then$$1 === TRY_CATCH_ERROR) { + reject(promise, TRY_CATCH_ERROR.error); + TRY_CATCH_ERROR.error = null; + } else if (then$$1 === void 0) { + fulfill(promise, maybeThenable); + } else if (isFunction(then$$1)) { + handleForeignThenable(promise, maybeThenable, then$$1); + } else { + fulfill(promise, maybeThenable); + } + } +} + +function resolve(promise, value) { + if (promise === value) { + reject(promise, selfFulfillment()); + } else if (objectOrFunction(value)) { + handleMaybeThenable(promise, value, getThen(value)); + } else { + fulfill(promise, value); + } +} + +function publishRejection(promise) { + if (promise._onerror) { + promise._onerror(promise._result); + } + + publish(promise); +} + +function fulfill(promise, value) { + if (promise._state !== PENDING) { + return; + } + + promise._result = value; + promise._state = FULFILLED; + + if (promise._subscribers.length !== 0) { + asap(publish, promise); + } +} + +function reject(promise, reason) { + if (promise._state !== PENDING) { + return; + } + promise._state = REJECTED; + promise._result = reason; + + asap(publishRejection, promise); +} + +function subscribe(parent, child, onFulfillment, onRejection) { + var _subscribers = parent._subscribers; + var length = _subscribers.length; + + + parent._onerror = null; + + _subscribers[length] = child; + _subscribers[length + FULFILLED] = onFulfillment; + _subscribers[length + REJECTED] = onRejection; + + if (length === 0 && parent._state) { + asap(publish, parent); + } +} + +function publish(promise) { + var subscribers = promise._subscribers; + var settled = promise._state; + + if (subscribers.length === 0) { + return; + } + + var child = void 0, + callback = void 0, + detail = promise._result; + + for (var i = 0; i < subscribers.length; i += 3) { + child = subscribers[i]; + callback = subscribers[i + settled]; + + if (child) { + invokeCallback(settled, child, callback, detail); + } else { + callback(detail); + } + } + + promise._subscribers.length = 0; +} + +function tryCatch(callback, detail) { + try { + return callback(detail); + } catch (e) { + TRY_CATCH_ERROR.error = e; + return TRY_CATCH_ERROR; + } +} + +function invokeCallback(settled, promise, callback, detail) { + var hasCallback = isFunction(callback), + value = void 0, + error = void 0, + succeeded = void 0, + failed = void 0; + + if (hasCallback) { + value = tryCatch(callback, detail); + + if (value === TRY_CATCH_ERROR) { + failed = true; + error = value.error; + value.error = null; + } else { + succeeded = true; + } + + if (promise === value) { + reject(promise, cannotReturnOwn()); + return; + } + } else { + value = detail; + succeeded = true; + } + + if (promise._state !== PENDING) { + // noop + } else if (hasCallback && succeeded) { + resolve(promise, value); + } else if (failed) { + reject(promise, error); + } else if (settled === FULFILLED) { + fulfill(promise, value); + } else if (settled === REJECTED) { + reject(promise, value); + } +} + +function initializePromise(promise, resolver) { + try { + resolver(function resolvePromise(value) { + resolve(promise, value); + }, function rejectPromise(reason) { + reject(promise, reason); + }); + } catch (e) { + reject(promise, e); + } +} + +var uid = 0; +function nextId() { + return uid++; +} + +function makePromise(promise) { + promise[PROMISE_ID] = id++; + promise._state = void 0; + promise._result = void 0; + promise._subscribers = []; +} + +function validationError() { + return new Error('Array Methods must be provided an Array'); +} + +var Enumerator = function () { + function Enumerator(Constructor, input) { + this._instanceConstructor = Constructor; + this.promise = new Constructor(noop); + + if (!this.promise[PROMISE_ID]) { + makePromise(this.promise); + } + + if (isArray(input)) { + this.length = input.length; + this._remaining = input.length; + + this._result = new Array(this.length); + + if (this.length === 0) { + fulfill(this.promise, this._result); + } else { + this.length = this.length || 0; + this._enumerate(input); + if (this._remaining === 0) { + fulfill(this.promise, this._result); + } + } + } else { + reject(this.promise, validationError()); + } + } + + Enumerator.prototype._enumerate = function _enumerate(input) { + for (var i = 0; this._state === PENDING && i < input.length; i++) { + this._eachEntry(input[i], i); + } + }; + + Enumerator.prototype._eachEntry = function _eachEntry(entry, i) { + var c = this._instanceConstructor; + var resolve$$1 = c.resolve; + + + if (resolve$$1 === resolve$1) { + var _then = getThen(entry); + + if (_then === then && entry._state !== PENDING) { + this._settledAt(entry._state, i, entry._result); + } else if (typeof _then !== 'function') { + this._remaining--; + this._result[i] = entry; + } else if (c === Promise$2) { + var promise = new c(noop); + handleMaybeThenable(promise, entry, _then); + this._willSettleAt(promise, i); + } else { + this._willSettleAt(new c(function (resolve$$1) { + return resolve$$1(entry); + }), i); + } + } else { + this._willSettleAt(resolve$$1(entry), i); + } + }; + + Enumerator.prototype._settledAt = function _settledAt(state, i, value) { + var promise = this.promise; + + + if (promise._state === PENDING) { + this._remaining--; + + if (state === REJECTED) { + reject(promise, value); + } else { + this._result[i] = value; + } + } + + if (this._remaining === 0) { + fulfill(promise, this._result); + } + }; + + Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) { + var enumerator = this; + + subscribe(promise, void 0, function (value) { + return enumerator._settledAt(FULFILLED, i, value); + }, function (reason) { + return enumerator._settledAt(REJECTED, i, reason); + }); + }; + + return Enumerator; +}(); + +/** + `Promise.all` accepts an array of promises, and returns a new promise which + is fulfilled with an array of fulfillment values for the passed promises, or + rejected with the reason of the first passed promise to be rejected. It casts all + elements of the passed iterable to promises as it runs this algorithm. + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = resolve(2); + let promise3 = resolve(3); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // The array here would be [ 1, 2, 3 ]; + }); + ``` + + If any of the `promises` given to `all` are rejected, the first promise + that is rejected will be given as an argument to the returned promises's + rejection handler. For example: + + Example: + + ```javascript + let promise1 = resolve(1); + let promise2 = reject(new Error("2")); + let promise3 = reject(new Error("3")); + let promises = [ promise1, promise2, promise3 ]; + + Promise.all(promises).then(function(array){ + // Code here never runs because there are rejected promises! + }, function(error) { + // error.message === "2" + }); + ``` + + @method all + @static + @param {Array} entries array of promises + @param {String} label optional string for labeling the promise. + Useful for tooling. + @return {Promise} promise that is fulfilled when all `promises` have been + fulfilled, or rejected if any of them become rejected. + @static +*/ +function all(entries) { + return new Enumerator(this, entries).promise; +} + +/** + `Promise.race` returns a new promise which is settled in the same way as the + first passed promise to settle. + + Example: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 2'); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // result === 'promise 2' because it was resolved before promise1 + // was resolved. + }); + ``` + + `Promise.race` is deterministic in that only the state of the first + settled promise matters. For example, even if other promises given to the + `promises` array argument are resolved, but the first settled promise has + become rejected before the other promises became fulfilled, the returned + promise will become rejected: + + ```javascript + let promise1 = new Promise(function(resolve, reject){ + setTimeout(function(){ + resolve('promise 1'); + }, 200); + }); + + let promise2 = new Promise(function(resolve, reject){ + setTimeout(function(){ + reject(new Error('promise 2')); + }, 100); + }); + + Promise.race([promise1, promise2]).then(function(result){ + // Code here never runs + }, function(reason){ + // reason.message === 'promise 2' because promise 2 became rejected before + // promise 1 became fulfilled + }); + ``` + + An example real-world use case is implementing timeouts: + + ```javascript + Promise.race([ajax('foo.json'), timeout(5000)]) + ``` + + @method race + @static + @param {Array} promises array of promises to observe + Useful for tooling. + @return {Promise} a promise which settles in the same way as the first passed + promise to settle. +*/ +function race(entries) { + /*jshint validthis:true */ + var Constructor = this; + + if (!isArray(entries)) { + return new Constructor(function (_, reject) { + return reject(new TypeError('You must pass an array to race.')); + }); + } else { + return new Constructor(function (resolve, reject) { + var length = entries.length; + for (var i = 0; i < length; i++) { + Constructor.resolve(entries[i]).then(resolve, reject); + } + }); + } +} + +/** + `Promise.reject` returns a promise rejected with the passed `reason`. + It is shorthand for the following: + + ```javascript + let promise = new Promise(function(resolve, reject){ + reject(new Error('WHOOPS')); + }); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + Instead of writing the above, your code now simply becomes the following: + + ```javascript + let promise = Promise.reject(new Error('WHOOPS')); + + promise.then(function(value){ + // Code here doesn't run because the promise is rejected! + }, function(reason){ + // reason.message === 'WHOOPS' + }); + ``` + + @method reject + @static + @param {Any} reason value that the returned promise will be rejected with. + Useful for tooling. + @return {Promise} a promise rejected with the given `reason`. +*/ +function reject$1(reason) { + /*jshint validthis:true */ + var Constructor = this; + var promise = new Constructor(noop); + reject(promise, reason); + return promise; +} + +function needsResolver() { + throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); +} + +function needsNew() { + throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); +} + +/** + Promise objects represent the eventual result of an asynchronous operation. The + primary way of interacting with a promise is through its `then` method, which + registers callbacks to receive either a promise's eventual value or the reason + why the promise cannot be fulfilled. + + Terminology + ----------- + + - `promise` is an object or function with a `then` method whose behavior conforms to this specification. + - `thenable` is an object or function that defines a `then` method. + - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). + - `exception` is a value that is thrown using the throw statement. + - `reason` is a value that indicates why a promise was rejected. + - `settled` the final resting state of a promise, fulfilled or rejected. + + A promise can be in one of three states: pending, fulfilled, or rejected. + + Promises that are fulfilled have a fulfillment value and are in the fulfilled + state. Promises that are rejected have a rejection reason and are in the + rejected state. A fulfillment value is never a thenable. + + Promises can also be said to *resolve* a value. If this value is also a + promise, then the original promise's settled state will match the value's + settled state. So a promise that *resolves* a promise that rejects will + itself reject, and a promise that *resolves* a promise that fulfills will + itself fulfill. + + + Basic Usage: + ------------ + + ```js + let promise = new Promise(function(resolve, reject) { + // on success + resolve(value); + + // on failure + reject(reason); + }); + + promise.then(function(value) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Advanced Usage: + --------------- + + Promises shine when abstracting away asynchronous interactions such as + `XMLHttpRequest`s. + + ```js + function getJSON(url) { + return new Promise(function(resolve, reject){ + let xhr = new XMLHttpRequest(); + + xhr.open('GET', url); + xhr.onreadystatechange = handler; + xhr.responseType = 'json'; + xhr.setRequestHeader('Accept', 'application/json'); + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200) { + resolve(this.response); + } else { + reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']')); + } + } + }; + }); + } + + getJSON('/posts.json').then(function(json) { + // on fulfillment + }, function(reason) { + // on rejection + }); + ``` + + Unlike callbacks, promises are great composable primitives. + + ```js + Promise.all([ + getJSON('/posts'), + getJSON('/comments') + ]).then(function(values){ + values[0] // => postsJSON + values[1] // => commentsJSON + + return values; + }); + ``` + + @class Promise + @param {Function} resolver + Useful for tooling. + @constructor +*/ + +var Promise$2 = function () { + function Promise(resolver) { + this[PROMISE_ID] = nextId(); + this._result = this._state = void 0; + this._subscribers = []; + + if (noop !== resolver) { + typeof resolver !== 'function' && needsResolver(); + this instanceof Promise ? initializePromise(this, resolver) : needsNew(); + } + } + + /** + The primary way of interacting with a promise is through its `then` method, + which registers callbacks to receive either a promise's eventual value or the + reason why the promise cannot be fulfilled. + ```js + findUser().then(function(user){ + // user is available + }, function(reason){ + // user is unavailable, and you are given the reason why + }); + ``` + Chaining + -------- + The return value of `then` is itself a promise. This second, 'downstream' + promise is resolved with the return value of the first promise's fulfillment + or rejection handler, or rejected if the handler throws an exception. + ```js + findUser().then(function (user) { + return user.name; + }, function (reason) { + return 'default name'; + }).then(function (userName) { + // If `findUser` fulfilled, `userName` will be the user's name, otherwise it + // will be `'default name'` + }); + findUser().then(function (user) { + throw new Error('Found user, but still unhappy'); + }, function (reason) { + throw new Error('`findUser` rejected and we're unhappy'); + }).then(function (value) { + // never reached + }, function (reason) { + // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'. + // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'. + }); + ``` + If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. + ```js + findUser().then(function (user) { + throw new PedagogicalException('Upstream error'); + }).then(function (value) { + // never reached + }).then(function (value) { + // never reached + }, function (reason) { + // The `PedgagocialException` is propagated all the way down to here + }); + ``` + Assimilation + ------------ + Sometimes the value you want to propagate to a downstream promise can only be + retrieved asynchronously. This can be achieved by returning a promise in the + fulfillment or rejection handler. The downstream promise will then be pending + until the returned promise is settled. This is called *assimilation*. + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // The user's comments are now available + }); + ``` + If the assimilated promise rejects, then the downstream promise will also reject. + ```js + findUser().then(function (user) { + return findCommentsByAuthor(user); + }).then(function (comments) { + // If `findCommentsByAuthor` fulfills, we'll have the value here + }, function (reason) { + // If `findCommentsByAuthor` rejects, we'll have the reason here + }); + ``` + Simple Example + -------------- + Synchronous Example + ```javascript + let result; + try { + result = findResult(); + // success + } catch(reason) { + // failure + } + ``` + Errback Example + ```js + findResult(function(result, err){ + if (err) { + // failure + } else { + // success + } + }); + ``` + Promise Example; + ```javascript + findResult().then(function(result){ + // success + }, function(reason){ + // failure + }); + ``` + Advanced Example + -------------- + Synchronous Example + ```javascript + let author, books; + try { + author = findAuthor(); + books = findBooksByAuthor(author); + // success + } catch(reason) { + // failure + } + ``` + Errback Example + ```js + function foundBooks(books) { + } + function failure(reason) { + } + findAuthor(function(author, err){ + if (err) { + failure(err); + // failure + } else { + try { + findBoooksByAuthor(author, function(books, err) { + if (err) { + failure(err); + } else { + try { + foundBooks(books); + } catch(reason) { + failure(reason); + } + } + }); + } catch(error) { + failure(err); + } + // success + } + }); + ``` + Promise Example; + ```javascript + findAuthor(). + then(findBooksByAuthor). + then(function(books){ + // found books + }).catch(function(reason){ + // something went wrong + }); + ``` + @method then + @param {Function} onFulfilled + @param {Function} onRejected + Useful for tooling. + @return {Promise} + */ + + /** + `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same + as the catch block of a try/catch statement. + ```js + function findAuthor(){ + throw new Error('couldn't find that author'); + } + // synchronous + try { + findAuthor(); + } catch(reason) { + // something went wrong + } + // async with promises + findAuthor().catch(function(reason){ + // something went wrong + }); + ``` + @method catch + @param {Function} onRejection + Useful for tooling. + @return {Promise} + */ + + + Promise.prototype.catch = function _catch(onRejection) { + return this.then(null, onRejection); + }; + + /** + `finally` will be invoked regardless of the promise's fate just as native + try/catch/finally behaves + + Synchronous example: + + ```js + findAuthor() { + if (Math.random() > 0.5) { + throw new Error(); + } + return new Author(); + } + + try { + return findAuthor(); // succeed or fail + } catch(error) { + return findOtherAuther(); + } finally { + // always runs + // doesn't affect the return value + } + ``` + + Asynchronous example: + + ```js + findAuthor().catch(function(reason){ + return findOtherAuther(); + }).finally(function(){ + // author was either found, or not + }); + ``` + + @method finally + @param {Function} callback + @return {Promise} + */ + + + Promise.prototype.finally = function _finally(callback) { + var promise = this; + var constructor = promise.constructor; + + return promise.then(function (value) { + return constructor.resolve(callback()).then(function () { + return value; + }); + }, function (reason) { + return constructor.resolve(callback()).then(function () { + throw reason; + }); + }); + }; + + return Promise; +}(); + +Promise$2.prototype.then = then; +Promise$2.all = all; +Promise$2.race = race; +Promise$2.resolve = resolve$1; +Promise$2.reject = reject$1; +Promise$2._setScheduler = setScheduler; +Promise$2._setAsap = setAsap; +Promise$2._asap = asap; + +/*global self*/ +function polyfill() { + var local = void 0; + + if (typeof global !== 'undefined') { + local = global; + } else if (typeof self !== 'undefined') { + local = self; + } else { + try { + local = Function('return this')(); + } catch (e) { + throw new Error('polyfill failed because global object is unavailable in this environment'); + } + } + + var P = local.Promise; + + if (P) { + var promiseToString = null; + try { + promiseToString = Object.prototype.toString.call(P.resolve()); + } catch (e) { + // silently ignored + } + + if (promiseToString === '[object Promise]' && !P.cast) { + return; + } + } + + local.Promise = Promise$2; +} + +polyfill() diff --git a/src/ie-compat/ie.sass b/src/ie-compat/ie.sass new file mode 100644 index 00000000000..143ca34f5b3 --- /dev/null +++ b/src/ie-compat/ie.sass @@ -0,0 +1,171 @@ +@import '../css/helpers/string.sass' + +@mixin ie_style + + /* Min Height */ + .q-item, + .q-toolbar, + .q-notification + &:after + content: '' + font-size: 0 + visibility: collapse + display: inline + width: 0 + + .q-banner > .q-banner__avatar + min-height: 38px + .q-banner--dense > .q-banner__avatar + min-height: 20px + .q-item:after + min-height: 32px + .q-list--dense > .q-item, + .q-item--dense + &after + min-height: 24px + .q-toolbar:after + min-height: $toolbar-min-height + .q-notification + &--standard:after + min-height: 48px + &--multi-line + min-height: 68px + + /* Flex Basis */ + .q-btn__wrapper, + .q-time__content, + .q-toolbar__title, + .q-menu .q-item__section--main, + .q-table__middle + flex-basis: auto + + .q-banner__content + flex-basis: 0 !important + + .q-menu, + .q-dialog__inner + > .q-banner > .q-banner__content + flex-basis: auto !important + + .q-tab__content + flex-basis: auto + min-width: 100% + + .q-card__actions--vert + flex: 0 0 auto + + .column + min-width: 0% + + @each $name, $size in $sizes + $noProcNotZero: $size > 0 + + @media (min-width: $size) + #{str-fe('.col', "-" + $name, $noProcNotZero)} + .row > &, .flex > & + flex-basis: auto + min-width: 0% + + /* QItem */ + .q-item + &__section + &--avatar + // overwritten above by min-width 0% + min-width: 56px + + /* QBtn */ + button.q-btn--actionable:active:hover + .q-btn__wrapper + margin: -1px 1px 1px -1px + + .q-btn-group + &--push + > button.q-btn--push.q-btn--actionable:active:hover + .q-btn__wrapper + margin: 1px 1px -1px -1px + + .q-btn + overflow: visible + + &--wrap + flex-direction: row + + /* QCarousel */ + .q-carousel__slide > * + max-width: 100% + + /* QTabs */ + .q-tabs--vertical + .q-tab__indicator + height: auto + + /* QSpinner */ + .q-spinner + animation: q-ie-spinner 2s linear infinite #{"/* rtl:ignore */"} + transform-origin: center center #{"/* rtl:ignore */"} + opacity: .5 + + &.q-spinner-mat .path + stroke-dasharray: 89, 200 + + /* QCheckbox indeterminate */ + .q-checkbox + &__indet + opacity: 0 + &__inner--indet + .q-checkbox__indet + opacity: 1 + + /* QRadio */ + .q-radio + &__check + opacity: 0 + &__inner--truthy + .q-radio__check + opacity: 1 + + /* QDate, QTime */ + .q-date__main + min-height: 290px !important + .q-date__months + align-items: stretch + .q-time--portrait .q-time__main + display: flex + flex-direction: column + flex-wrap: nowrap + flex: 1 0 auto + + /* QField */ + .q-field + &__prefix, &__suffix + flex: 1 0 auto + + &__bottom--stale + .q-field__messages + left: 12px + + &--borderless, &--standard + .q-field__bottom--stale + .q-field__messages + left: 0 + + &--float .q-field__label + max-width: 100% + + /* focus-helper */ + .q-focus-helper + z-index: 1 + +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) + @include ie_style + +@supports (-ms-ime-align:auto) + @include ie_style + +@keyframes q-ie-spinner + 0% + opacity: .5 + 50% + opacity: 1 + 100% + opacity: .5 diff --git a/src/ie-compat/ie.styl b/src/ie-compat/ie.styl new file mode 100644 index 00000000000..c4130645703 --- /dev/null +++ b/src/ie-compat/ie.styl @@ -0,0 +1,177 @@ +str-fr(selector, name, i = '') + unquote(replace(unquote(''), unquote(i), replace(unquote(''), unquote(name), unquote(selector)))) + +str-fe(selector, name, noProc, i = '') + if noProc + return str-fr(selector, name, i) + return unquote(join(',', str-fr(selector, '', i) str-fr(selector, name, i))) + +ie_style = @block + + /* Min Height */ + .q-item, + .q-toolbar, + .q-notification + &:after + content: '' + font-size: 0 + visibility: collapse + display: inline + width: 0 + + .q-banner > .q-banner__avatar + min-height: 38px + .q-banner--dense > .q-banner__avatar + min-height: 20px + .q-item:after + min-height: 32px + .q-list--dense > .q-item, + .q-item--dense + &after + min-height: 24px + .q-toolbar:after + min-height: $toolbar-min-height + .q-notification + &--standard:after + min-height: 48px + &--multi-line + min-height: 68px + + /* Flex Basis */ + .q-btn__wrapper, + .q-time__content, + .q-toolbar__title, + .q-menu .q-item__section--main, + .q-table__middle + flex-basis: auto + + .q-banner__content + flex-basis: 0 !important + + .q-menu, + .q-dialog__inner + > .q-banner > .q-banner__content + flex-basis: auto !important + + .q-tab__content + flex-basis: auto + min-width: 100% + + .q-card__actions--vert + flex: 0 0 auto + + .column + min-width: 0% + + for $name, $size in $sizes + $noProcNotZero = $size > 0 + + @media (min-width $size) + {str-fe('.col', s('-%s', unquote($name)), $noProcNotZero)} + .row > &, .flex > & + flex-basis: auto + min-width: 0% + + /* QItem */ + .q-item + &__section + &--avatar + // overwritten above by min-width 0% + min-width: 56px + + /* QBtn */ + button.q-btn--actionable:active:hover + .q-btn__wrapper + margin: -1px 1px 1px -1px + + .q-btn-group + &--push + > button.q-btn--push.q-btn--actionable:active:hover + .q-btn__wrapper + margin: 1px 1px -1px -1px + + .q-btn + overflow: visible + + &--wrap + flex-direction: row + + /* QCarousel */ + .q-carousel__slide > * + max-width: 100% + + /* QTabs */ + .q-tabs--vertical + .q-tab__indicator + height: auto + + /* QSpinner */ + .q-spinner + animation: q-ie-spinner 2s linear infinite /* rtl:ignore */ + transform-origin: center center /* rtl:ignore */ + opacity: .5 + + &.q-spinner-mat .path + stroke-dasharray: 89, 200 + + /* QCheckbox indeterminate */ + .q-checkbox + &__indet + opacity: 0 + &__inner--indet + .q-checkbox__indet + opacity: 1 + + /* QRadio */ + .q-radio + &__check + opacity: 0 + &__inner--truthy + .q-radio__check + opacity: 1 + + /* QDate, QTime */ + .q-date__main + min-height: 290px !important + .q-date__months + align-items: stretch + .q-time--portrait .q-time__main + display: flex + flex-direction: column + flex-wrap: nowrap + flex: 1 0 auto + + /* QField */ + .q-field + &__prefix, &__suffix + flex: 1 0 auto + + &__bottom--stale + .q-field__messages + left: 12px + + &--borderless, &--standard + .q-field__bottom--stale + .q-field__messages + left: 0 + + &--float .q-field__label + max-width: 100% + + /* focus-helper */ + .q-focus-helper + z-index: 1 + +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) + {ie_style} + +@supports (-ms-ime-align:auto) + {ie_style} + +@keyframes q-ie-spinner + 0% + opacity: .5 + 50% + opacity: 1 + 100% + opacity: .5 diff --git a/src/index.common.js b/src/index.common.js new file mode 100644 index 00000000000..be16b2e11dc --- /dev/null +++ b/src/index.common.js @@ -0,0 +1,27 @@ +import VuePlugin from './vue-plugin.js' + +import * as components from './components.js' +import * as directives from './directives.js' +import * as plugins from './plugins.js' +import * as utils from './utils.js' + +export default { + // for when importing all + ...VuePlugin, + install (Vue, opts) { + VuePlugin.install(Vue, { + components, + directives, + plugins, + ...opts + }) + }, + + // for when cherry-picking + Quasar: VuePlugin, + + ...components, + ...directives, + ...plugins, + ...utils +} diff --git a/src/index.esm.js b/src/index.esm.js new file mode 100644 index 00000000000..b69092763de --- /dev/null +++ b/src/index.esm.js @@ -0,0 +1,22 @@ +import VuePlugin from './vue-plugin.js' + +import * as components from './components.js' +import * as directives from './directives.js' +import * as plugins from './plugins.js' + +export * from './components.js' +export * from './directives.js' +export * from './plugins.js' +export * from './utils.js' + +export default { + ...VuePlugin, + install (Vue, opts) { + VuePlugin.install(Vue, { + components, + directives, + plugins, + ...opts + }) + } +} diff --git a/src/index.umd.js b/src/index.umd.js new file mode 100644 index 00000000000..1bf58a85248 --- /dev/null +++ b/src/index.umd.js @@ -0,0 +1,32 @@ +import Vue from 'vue' + +import install from './install.js' +import { version } from '../package.json' + +import * as components from './components.js' +import * as directives from './directives.js' +import * as plugins from './plugins.js' +import * as utils from './utils.js' +import lang from './lang.js' +import iconSet from './icon-set.js' + +Vue.use({ install }, { + components, + directives, + plugins, + config: window.quasarConfig || {} +}) + +export default { + version, + lang, + iconSet, + components, + directives, + plugins, + utils, + ...components, + ...directives, + ...plugins, + ...utils +} diff --git a/src/install.js b/src/install.js new file mode 100644 index 00000000000..38a4194f0c0 --- /dev/null +++ b/src/install.js @@ -0,0 +1,75 @@ +import { version } from '../package.json' +import Platform, { isSSR } from './plugins/Platform.js' +import Interaction from './plugins/Interaction.js' +import Screen from './plugins/Screen.js' +import Dark from './plugins/Dark.js' +import History from './history.js' +import Lang from './lang.js' +import Body from './body.js' +import IconSet from './icon-set.js' + +const autoInstalled = [ + Platform, Screen, Dark, Interaction +] + +export const queues = { + server: [], // on SSR update + takeover: [] // on client takeover +} + +export const $q = { + version, + config: {} +} + +export default function (Vue, opts = {}) { + if (this.__qInstalled === true) { return } + this.__qInstalled = true + + const cfg = $q.config = Object.freeze(opts.config || {}) + + // required plugins + Platform.install($q, queues) + Body.install(queues, cfg) + Dark.install($q, queues, cfg) + Interaction.install($q, queues) + Screen.install($q, queues, cfg) + History.install(cfg) + Lang.install($q, queues, opts.lang) + IconSet.install($q, queues, opts.iconSet) + + if (isSSR === true) { + Vue.mixin({ + beforeCreate () { + this.$q = this.$root.$options.$q + } + }) + } + else { + Vue.prototype.$q = $q + } + + opts.components && Object.keys(opts.components).forEach(key => { + const c = opts.components[key] + if (typeof c === 'function') { + Vue.component(c.options.name, c) + } + }) + + opts.directives && Object.keys(opts.directives).forEach(key => { + const d = opts.directives[key] + if (d.name !== void 0 && d.unbind !== void 0) { + Vue.directive(d.name, d) + } + }) + + if (opts.plugins) { + const param = { $q, queues, cfg } + Object.keys(opts.plugins).forEach(key => { + const p = opts.plugins[key] + if (typeof p.install === 'function' && autoInstalled.includes(p) === false) { + p.install(param) + } + }) + } +} diff --git a/src/lang.js b/src/lang.js new file mode 100644 index 00000000000..ab20cc0b172 --- /dev/null +++ b/src/lang.js @@ -0,0 +1,90 @@ +import Vue from 'vue' + +import defaultLang from '../lang/en-us.js' +import { isSSR, fromSSR } from './plugins/Platform.js' + +function getLocale () { + if (isSSR === true) { return } + + const val = + navigator.language || + navigator.languages[0] || + navigator.browserLanguage || + navigator.userLanguage || + navigator.systemLanguage + + if (val) { + return val.toLowerCase() + } +} + +export default { + getLocale, + + install ($q, queues, lang) { + this.set = (langObject = defaultLang, ssrContext) => { + const lang = { + ...langObject, + rtl: langObject.rtl === true, + getLocale + } + + if (isSSR === true) { + if (ssrContext === void 0) { + console.error('SSR ERROR: second param required: Quasar.lang.set(lang, ssrContext)') + return + } + + const dir = lang.rtl === true ? 'rtl' : 'ltr' + const attrs = `lang=${lang.isoName} dir=${dir}` + + lang.set = ssrContext.$q.lang.set + + ssrContext.Q_HTML_ATTRS = ssrContext.Q_PREV_LANG !== void 0 + ? ssrContext.Q_HTML_ATTRS.replace(ssrContext.Q_PREV_LANG, attrs) + : attrs + + ssrContext.Q_PREV_LANG = attrs + ssrContext.$q.lang = lang + } + else { + if (fromSSR === false) { + const el = document.documentElement + el.setAttribute('dir', lang.rtl === true ? 'rtl' : 'ltr') + el.setAttribute('lang', lang.isoName) + } + + lang.set = this.set + $q.lang = this.props = lang + this.isoName = lang.isoName + this.nativeName = lang.nativeName + } + } + + const initialLang = lang || defaultLang + + if (isSSR === true) { + queues.server.push((q, ctx) => { + q.lang = {} + q.lang.set = langObject => { + this.set(langObject, ctx.ssr) + } + + q.lang.set(initialLang) + }) + + // one-time SSR server operation + if (this.isoName !== initialLang.isoName) { + this.isoName = initialLang.isoName + this.nativeName = initialLang.nativeName + this.props = initialLang + } + } + else { + Vue.util.defineReactive($q, 'lang', {}) + this.set(initialLang) + } + } +} + +export { defaultLang } diff --git a/src/mixins/align.js b/src/mixins/align.js new file mode 100644 index 00000000000..a5bf8b493a6 --- /dev/null +++ b/src/mixins/align.js @@ -0,0 +1,30 @@ +const + alignMap = { + left: 'start', + center: 'center', + right: 'end', + between: 'between', + around: 'around', + evenly: 'evenly', + stretch: 'stretch' + }, + alignValues = Object.keys(alignMap) + +export default { + props: { + align: { + type: String, + validator: v => alignValues.includes(v) + } + }, + + computed: { + alignClass () { + const align = this.align === void 0 + ? (this.vertical === true ? 'stretch' : 'left') + : this.align + + return `${this.vertical === true ? 'items' : 'justify'}-${alignMap[align]}` + } + } +} diff --git a/src/mixins/anchor.js b/src/mixins/anchor.js new file mode 100644 index 00000000000..2c529643f37 --- /dev/null +++ b/src/mixins/anchor.js @@ -0,0 +1,238 @@ +import { clearSelection } from '../utils/private/selection.js' +import { addEvt, cleanEvt, prevent, listenOpts, eventOnAncestors } from '../utils/event.js' +import { getElement } from '../utils/dom.js' +import { isKeyCode } from '../utils/private/key-composition.js' + +const scrollListenerHandlers = [] + +function scrollEventDispatcher (e) { + scrollListenerHandlers + .slice() + .forEach(fn => { + if (e && e.target && e.target.qScrollPrevented === true) { + return + } + + eventOnAncestors(e, fn.scrollTarget) === true && fn(e) + }) +} + +export default { + props: { + target: { + default: true + }, + noParentEvent: Boolean, + contextMenu: Boolean + }, + + watch: { + contextMenu (val) { + if (this.anchorEl !== void 0) { + this.__unconfigureAnchorEl() + this.__configureAnchorEl(val) + } + }, + + target () { + if (this.anchorEl !== void 0) { + this.__unconfigureAnchorEl() + } + + this.__pickAnchorEl() + }, + + noParentEvent (val) { + if (this.anchorEl !== void 0) { + if (val === true) { + this.__unconfigureAnchorEl() + } + else { + this.__configureAnchorEl() + } + } + } + }, + + methods: { + __showCondition (evt) { + // abort with no parent configured or on multi-touch + if (this.anchorEl === void 0) { + return false + } + if (evt === void 0) { + return true + } + return evt.touches === void 0 || evt.touches.length <= 1 + }, + + __contextClick (evt) { + this.hide(evt) + prevent(evt) + this.$nextTick(() => { + this.show(evt) + + if (evt === Object(evt)) { + evt.qAnchorHandled = true + } + }) + }, + + __toggleKey (evt) { + isKeyCode(evt, 13) === true && this.toggle(evt) + }, + + __mobileCleanup (evt) { + this.anchorEl.classList.remove('non-selectable') + clearTimeout(this.touchTimer) + + if (this.showing === true && evt !== void 0) { + clearSelection() + } + }, + + prevent, + + __mobileTouch (evt) { + this.__mobileCleanup(evt) + + if (this.__showCondition(evt) !== true) { + return + } + + this.hide(evt) + this.anchorEl.classList.add('non-selectable') + + const target = evt.target + addEvt(this, 'anchor', [ + [ target, 'touchmove', '__mobileCleanup', 'passive' ], + [ target, 'touchend', '__mobileCleanup', 'passive' ], + [ target, 'touchcancel', '__mobileCleanup', 'passive' ], + [ this.anchorEl, 'contextmenu', 'prevent', 'notPassive' ] + ]) + + this.touchTimer = setTimeout(() => { + this.show(evt) + + if (evt === Object(evt)) { + evt.qAnchorHandled = true + } + }, 300) + }, + + __unconfigureAnchorEl () { + cleanEvt(this, 'anchor') + }, + + __configureAnchorEl (context = this.contextMenu) { + if (this.noParentEvent === true || this.anchorEl === void 0) { return } + + let evts + + if (context === true) { + if (this.$q.platform.is.mobile === true) { + evts = [ + [ this.anchorEl, 'touchstart', '__mobileTouch', 'passive' ] + ] + } + else { + evts = [ + [ this.anchorEl, 'mousedown', 'hide', 'passive' ], + [ this.anchorEl, 'contextmenu', '__contextClick', 'notPassive' ] + ] + } + } + else { + evts = [ + [ this.anchorEl, 'click', 'toggle', 'passive' ], + [ this.anchorEl, 'keyup', '__toggleKey', 'passive' ] + ] + } + + addEvt(this, 'anchor', evts) + }, + + __setAnchorEl (el) { + this.anchorEl = el + while (this.anchorEl.classList.contains('q-anchor--skip')) { + this.anchorEl = this.anchorEl.parentNode + } + this.__configureAnchorEl() + }, + + __pickAnchorEl () { + if (this.target === false || this.target === '' || this.parentEl === null) { + this.anchorEl = void 0 + } + else if (this.target === true) { + this.__setAnchorEl(this.parentEl) + } + else { + this.anchorEl = getElement(this.target) || void 0 + + if (this.anchorEl !== void 0) { + this.__configureAnchorEl() + } + else { + console.error(`Anchor: target "${this.target}" not found`, this) + } + } + }, + + __changeScrollEvent (fn, scrollTarget) { + const hadHandlers = scrollListenerHandlers.length > 0 + + if (this.__scrollFn !== void 0) { + const index = scrollListenerHandlers.indexOf(this.__scrollFn) + + if (index > -1) { + scrollListenerHandlers.splice(index, 1) + } + + this.__scrollFn = void 0 + } + + if (fn !== void 0 && scrollTarget !== null && scrollTarget !== void 0) { + fn.scrollTarget = scrollTarget === window ? document : scrollTarget + scrollListenerHandlers.push(fn) + + this.__scrollFn = fn + } + + if (hadHandlers === true && scrollListenerHandlers.length === 0) { + window.removeEventListener('scroll', scrollEventDispatcher, listenOpts.passiveCapture) + } + else if (hadHandlers === false && scrollListenerHandlers.length > 0) { + window.addEventListener('scroll', scrollEventDispatcher, listenOpts.passiveCapture) + } + } + }, + + created () { + if ( + typeof this.__configureScrollTarget === 'function' && + typeof this.__unconfigureScrollTarget === 'function' + ) { + this.noParentEventWatcher = this.$watch('noParentEvent', () => { + this.__unconfigureScrollTarget() + this.__configureScrollTarget() + }) + } + }, + + mounted () { + this.parentEl = this.$el.parentNode + this.__pickAnchorEl() + + if (this.value === true && this.anchorEl === void 0) { + this.$emit('input', false) + } + }, + + beforeDestroy () { + clearTimeout(this.touchTimer) + this.noParentEventWatcher !== void 0 && this.noParentEventWatcher() + this.__anchorCleanup !== void 0 && this.__anchorCleanup() + this.__unconfigureAnchorEl() + } +} diff --git a/src/mixins/anchor.json b/src/mixins/anchor.json new file mode 100644 index 00000000000..b24d78a3da2 --- /dev/null +++ b/src/mixins/anchor.json @@ -0,0 +1,29 @@ +{ + "props": { + "target": { + "type": [ "Boolean", "String", "Element" ], + "desc": "Configure a target element to trigger component toggle; 'true' means it enables the parent DOM element, 'false' means it disables attaching events to any DOM elements; By using a String (CSS selector) or a DOM element it attaches the events to the specified DOM element (if it exists)", + "default": true, + "values": [ "(Boolean) true", "(Boolean) false", "(CSS selector)", "(DOM Element)" ], + "examples": [ + ":target=\"false\"", + ":target=\"$refs.target\"", + "target=\".my-parent\"", + "target=\"#target-id\"" + ], + "category": "behavior" + }, + + "no-parent-event": { + "type": "Boolean", + "desc": "Skips attaching events to the target DOM element (that trigger the element to get shown)", + "category": "behavior" + }, + + "context-menu": { + "type": "Boolean", + "desc": "Allows the component to behave like a context menu, which opens with a right mouse click (or long tap on mobile)", + "category": "behavior" + } + } +} diff --git a/src/mixins/attrs.js b/src/mixins/attrs.js new file mode 100644 index 00000000000..d186fb1d5ef --- /dev/null +++ b/src/mixins/attrs.js @@ -0,0 +1,7 @@ +import { getPropCacheMixin } from '../utils/private/cache.js' + +export const ariaHidden = { 'aria-hidden': 'true' } + +export const iconAsButton = { tabindex: 0, type: 'button', 'aria-hidden': false, role: null } + +export default getPropCacheMixin('$attrs', 'qAttrs') diff --git a/src/mixins/btn.js b/src/mixins/btn.js new file mode 100644 index 00000000000..2ab7f55f91f --- /dev/null +++ b/src/mixins/btn.js @@ -0,0 +1,199 @@ +import AlignMixin from './align.js' +import RippleMixin from './ripple.js' +import ListenersMixin from './listeners.js' +import RouterLinkMixin from './router-link.js' +import { getSizeMixin } from './size.js' + +export const btnPadding = { + none: 0, + xs: 4, + sm: 8, + md: 16, + lg: 24, + xl: 32 +} + +const formTypes = [ 'button', 'submit', 'reset' ] +const mediaTypeRe = /[^\s]\/[^\s]/ + +export const btnDesignOptions = [ 'flat', 'outline', 'push', 'unelevated' ] +export const getBtnDesign = (vm, defaultValue) => { + if (vm.flat === true) return 'flat' + if (vm.outline === true) return 'outline' + if (vm.push === true) return 'push' + if (vm.unelevated === true) return 'unelevated' + return defaultValue +} + +export default { + mixins: [ + ListenersMixin, + RippleMixin, + RouterLinkMixin, + AlignMixin, + getSizeMixin({ + xs: 8, + sm: 10, + md: 14, + lg: 20, + xl: 24 + }) + ], + + props: { + type: { + type: String, + default: 'button' + }, + + to: [ Object, String ], + replace: Boolean, + append: Boolean, + + label: [ Number, String ], + icon: String, + iconRight: String, + + ...btnDesignOptions.reduce( + (acc, val) => (acc[ val ] = Boolean) && acc, + {} + ), + + square: Boolean, + round: Boolean, + rounded: Boolean, + glossy: Boolean, + + size: String, + fab: Boolean, + fabMini: Boolean, + padding: String, + + color: String, + textColor: String, + noCaps: Boolean, + noWrap: Boolean, + dense: Boolean, + + tabindex: [ Number, String ], + + align: { default: 'center' }, + stack: Boolean, + stretch: Boolean, + loading: { + type: Boolean, + default: null + }, + disable: Boolean + }, + + computed: { + style () { + if (this.fab === false && this.fabMini === false) { + return this.sizeStyle + } + }, + + isRounded () { + return this.rounded === true || this.fab === true || this.fabMini === true + }, + + isActionable () { + return this.disable !== true && this.loading !== true + }, + + computedTabIndex () { + return this.isActionable === true ? this.tabindex || 0 : -1 + }, + + design () { + return getBtnDesign(this, 'standard') + }, + + attrs () { + const acc = { tabindex: this.computedTabIndex } + + if (this.hasLink === true) { + Object.assign(acc, this.linkAttrs) + } + else if (formTypes.includes(this.type) === true) { + acc.type = this.type + } + + if (this.linkTag === 'a') { + if (this.disable === true) { + acc['aria-disabled'] = 'true' + } + else if (acc.href === void 0) { + acc.role = 'button' + } + + if (this.hasRouterLink !== true && mediaTypeRe.test(this.type) === true) { + acc.type = this.type + } + } + else if (this.disable === true) { + acc.disabled = '' + acc['aria-disabled'] = 'true' + } + + if (this.loading === true && this.percentage !== void 0) { + acc.role = 'progressbar' + acc['aria-valuemin'] = 0 + acc['aria-valuemax'] = 100 + acc['aria-valuenow'] = this.percentage + } + + return acc + }, + + classes () { + let colors + + if (this.color !== void 0) { + if (this.flat === true || this.outline === true) { + colors = `text-${this.textColor || this.color}` + } + else { + colors = `bg-${this.color} text-${this.textColor || 'white'}` + } + } + else if (this.textColor) { + colors = `text-${this.textColor}` + } + + const shape = this.round === true + ? 'round' + : `rectangle${this.isRounded === true ? ' q-btn--rounded' : (this.square === true ? ' q-btn--square' : '')}` + + return `q-btn--${this.design} q-btn--${shape}` + + (colors !== void 0 ? ' ' + colors : '') + + (this.isActionable === true ? ' q-btn--actionable q-focusable q-hoverable' : (this.disable === true ? ' disabled' : '')) + + (this.fab === true ? ' q-btn--fab' : (this.fabMini === true ? ' q-btn--fab-mini' : '')) + + (this.noCaps === true ? ' q-btn--no-uppercase' : '') + + (this.noWrap === true ? '' : ' q-btn--wrap') + // this is for IE11 + (this.dense === true ? ' q-btn--dense' : '') + + (this.stretch === true ? ' no-border-radius self-stretch' : '') + + (this.glossy === true ? ' glossy' : '') + }, + + innerClasses () { + return this.alignClass + (this.stack === true ? ' column' : ' row') + + (this.noWrap === true ? ' no-wrap text-no-wrap' : '') + + (this.loading === true ? ' q-btn__content--hidden' : '') + }, + + wrapperStyle () { + if (this.padding !== void 0) { + return { + padding: this.padding + .split(/\s+/) + .map(v => v in btnPadding ? btnPadding[v] + 'px' : v) + .join(' '), + minWidth: '0', + minHeight: '0' + } + } + } + } +} diff --git a/src/mixins/btn.json b/src/mixins/btn.json new file mode 100644 index 00000000000..afdd53bb6a9 --- /dev/null +++ b/src/mixins/btn.json @@ -0,0 +1,190 @@ +{ + "mixins": [ "mixins/ripple", "mixins/size" ], + + "props": { + "type":{ + "type": "String", + "desc": "1) Define the button native type attribute (submit, reset, button) or 2) render component with tag so you can access events even if disable or 3) Use 'href' prop and specify 'type' as a media tag", + "default": "button", + "examples": [ + "a", "submit", "button", "reset", + "image/png", + "href=\"https://some-site.net\" target=\"_blank\"" + ], + "category": "general" + }, + + "to": { + "type": [ "String", "Object" ], + "desc": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "navigation" + }, + + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "category": "navigation", + "addedIn": "v1.13" + }, + + "href": { + "type": "String", + "desc": "Native link href attribute; Has priority over the 'to' and 'replace' props", + "examples": [ "https://quasar.dev", "href=\"https://quasar.dev\" target=\"_blank\"" ], + "category": "navigation", + "addedIn": "v1.17" + }, + + "target": { + "type": "String", + "desc": "Native link target attribute; Use it only with 'to' or 'href' props", + "examples": [ "_blank", "_self", "_parent", "_top" ], + "category": "navigation", + "addedIn": "v1.17" + }, + + "label":{ + "type": [ "String", "Number" ], + "desc": "The text that will be shown on the button", + "examples": [ "Button Label" ], + "category": "content" + }, + + "icon": { + "extends": "icon" + }, + + "icon-right": { + "extends": "icon" + }, + + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design", + "category": "style" + }, + + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design", + "category": "style" + }, + + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow", + "category": "style" + }, + + "rounded": { + "type": "Boolean", + "desc": "Applies a more prominent border-radius for a squared shape button", + "category": "style" + }, + + "push": { + "type": "Boolean", + "desc": "Use 'push' design", + "category": "style" + }, + + "square": { + "extends": "square", + "addedIn": "v1.22" + }, + + "glossy": { + "type": "Boolean", + "desc": "Applies a glossy effect", + "category": "style" + }, + + "fab": { + "type": "Boolean", + "desc": "Makes button size and shape to fit a Floating Action Button", + "category": "style" + }, + + "fab-mini": { + "type": "Boolean", + "desc": "Makes button size and shape to fit a small Floating Action Button", + "category": "style" + }, + + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ "16px", "10px 5px", "2rem", "xs", "md lg", "2px 2px 5px 7px" ], + "category": "style", + "addedIn": "v1.11" + }, + + "color": { + "extends": "color" + }, + + "text-color": { + "extends": "text-color" + }, + + "no-caps": { + "type": "Boolean", + "desc": "Avoid turning label text into caps (which happens by default)", + "category": "content" + }, + + "no-wrap": { + "type": "Boolean", + "desc": "Avoid label text wrapping", + "category": "content" + }, + + "dense": { + "extends": "dense" + }, + + "tabindex": { + "extends": "tabindex" + }, + + "align": { + "type": "String", + "desc": "Label or content alignment", + "default": "center", + "values": [ "left", "right", "center", "around", "between", "evenly" ], + "category": "content" + }, + + "stack": { + "type": "Boolean", + "desc": "Stack icon and label vertically instead of on same line (like it is by default)", + "category": "content" + }, + + "stretch": { + "type": "Boolean", + "desc": "When used on flexbox parent, button will stretch to parent's height", + "category": "content" + }, + + "loading": { + "type": "Boolean", + "desc": "Put button into loading state (displays a QSpinner -- can be overridden by using a 'loading' slot)", + "category": "behavior|state" + }, + + "disable": { + "extends": "disable" + } + } +} diff --git a/src/mixins/can-render.js b/src/mixins/can-render.js new file mode 100644 index 00000000000..d8cafc02ea3 --- /dev/null +++ b/src/mixins/can-render.js @@ -0,0 +1,14 @@ +// using it to manage SSR rendering with best performance +import { onSSR } from '../plugins/Platform.js' + +export default { + data () { + return { + canRender: !onSSR + } + }, + + mounted () { + this.canRender === false && (this.canRender = true) + } +} diff --git a/src/mixins/checkbox.js b/src/mixins/checkbox.js new file mode 100644 index 00000000000..4b822330bb1 --- /dev/null +++ b/src/mixins/checkbox.js @@ -0,0 +1,227 @@ +import DarkMixin from './dark.js' +import { stopAndPrevent } from '../utils/event.js' + +import FormMixin from './form.js' +import OptionSizeMixin from './option-size.js' +import RefocusTargetMixin from './refocus-target.js' + +import { slot, mergeSlot } from '../utils/private/slot.js' +import cache from '../utils/private/cache.js' + +export default { + mixins: [ DarkMixin, OptionSizeMixin, FormMixin, RefocusTargetMixin ], + + props: { + value: { + required: true, + default: null + }, + val: {}, + + trueValue: { default: true }, + falseValue: { default: false }, + indeterminateValue: { default: null }, + + checkedIcon: String, + uncheckedIcon: String, + indeterminateIcon: String, + + toggleOrder: { + type: String, + validator: v => v === 'tf' || v === 'ft' + }, + toggleIndeterminate: Boolean, + + label: String, + leftLabel: Boolean, + + color: String, + keepColor: Boolean, + dense: Boolean, + + disable: Boolean, + tabindex: [String, Number] + }, + + computed: { + isTrue () { + return this.modelIsArray === true + ? this.index > -1 + : this.value === this.trueValue + }, + + isFalse () { + return this.modelIsArray === true + ? this.index === -1 + : this.value === this.falseValue + }, + + isIndeterminate () { + return this.isTrue === false && this.isFalse === false + }, + + index () { + if (this.modelIsArray === true) { + return this.value.indexOf(this.val) + } + }, + + modelIsArray () { + return this.val !== void 0 && Array.isArray(this.value) + }, + + computedTabindex () { + return this.disable === true ? -1 : this.tabindex || 0 + }, + + classes () { + return `q-${this.type} cursor-pointer no-outline row inline no-wrap items-center` + + (this.disable === true ? ' disabled' : '') + + ` q-${this.type}--${this.darkSuffix}` + + (this.dense === true ? ` q-${this.type}--dense` : '') + + (this.leftLabel === true ? ' reverse' : '') + }, + + innerClass () { + const state = this.isTrue === true ? 'truthy' : (this.isFalse === true ? 'falsy' : 'indet') + const color = this.color !== void 0 && ( + this.keepColor === true || + (this.type === 'toggle' ? this.isTrue === true : this.isFalse !== true) + ) + ? ` text-${this.color}` + : '' + + return `q-${this.type}__inner--${state}${color}` + }, + + formAttrs () { + const prop = { type: 'checkbox' } + + this.name !== void 0 && Object.assign(prop, { + checked: this.isTrue, + name: this.name, + value: this.modelIsArray === true + ? this.val + : this.trueValue + }) + + return prop + }, + + attrs () { + const attrs = { + tabindex: this.computedTabindex, + role: this.type === 'toggle' ? 'switch' : 'checkbox', + 'aria-label': this.label, + 'aria-checked': this.isIndeterminate === true + ? 'mixed' + : (this.isTrue === true ? 'true' : 'false') + } + + if (this.disable === true) { + attrs['aria-disabled'] = 'true' + } + + return attrs + } + }, + + methods: { + toggle (e) { + if (e !== void 0) { + stopAndPrevent(e) + this.__refocusTarget(e) + } + + if (this.disable !== true) { + this.$emit('input', this.__getNextValue(), e) + } + }, + + __getNextValue () { + if (this.modelIsArray === true) { + if (this.isTrue === true) { + const val = this.value.slice() + val.splice(this.index, 1) + return val + } + + return this.value.concat([ this.val ]) + } + + if (this.isTrue === true) { + if (this.toggleOrder !== 'ft' || this.toggleIndeterminate === false) { + return this.falseValue + } + } + else if (this.isFalse === true) { + if (this.toggleOrder === 'ft' || this.toggleIndeterminate === false) { + return this.trueValue + } + } + else { + return this.toggleOrder !== 'ft' + ? this.trueValue + : this.falseValue + } + + return this.indeterminateValue + }, + + __onKeydown (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + stopAndPrevent(e) + } + }, + + __onKeyup (e) { + if (e.keyCode === 13 || e.keyCode === 32) { + this.toggle(e) + } + } + }, + + render (h) { + const inner = this.__getInner(h) + + this.disable !== true && this.__injectFormInput( + inner, + 'unshift', + `q-${this.type}__native absolute q-ma-none q-pa-none` + ) + + const child = [ + h('div', { + staticClass: `q-${this.type}__inner relative-position non-selectable`, + class: this.innerClass, + style: this.sizeStyle, + attrs: { 'aria-hidden': 'true' } + }, inner) + ] + + if (this.__refocusTargetEl !== void 0) { + child.push(this.__refocusTargetEl) + } + + const label = this.label !== void 0 + ? mergeSlot([ this.label ], this, 'default') + : slot(this, 'default') + + label !== void 0 && child.push( + h('div', { + staticClass: `q-${this.type}__label q-anchor--skip` + }, label) + ) + + return h('div', { + key: 'inpExt', + class: this.classes, + attrs: this.attrs, + on: cache(this, 'inpExt', { + click: this.toggle, + keydown: this.__onKeydown, + keyup: this.__onKeyup + }) + }, child) + } +} diff --git a/src/mixins/checkbox.json b/src/mixins/checkbox.json new file mode 100644 index 00000000000..db4eb5c32a6 --- /dev/null +++ b/src/mixins/checkbox.json @@ -0,0 +1,153 @@ +{ + "mixins": [ "mixins/size", "mixins/form" ], + + "props": { + "value": { + "extends": "value", + "required": true, + "type": [ "Any", "Array" ], + "examples": [ "false", "['car', 'building']" ], + "category": "model" + }, + + "val": { + "type": "Any", + "desc": "Works when model ('value') is Array. It tells the component which value should add/remove when ticked/unticked", + "examples": [ "car" ], + "category": "model" + }, + + "true-value": { + "type": "Any", + "desc": "What model value should be considered as checked/ticked/on?", + "default": true, + "examples": [ "Agreed" ], + "category": "model" + }, + + "false-value": { + "type": "Any", + "desc": "What model value should be considered as unchecked/unticked/off?", + "default": false, + "examples": [ "Disagree" ], + "category": "model" + }, + + "indeterminate-value": { + "type": "Any", + "desc": "What model value should be considered as 'indeterminate'?", + "default": null, + "examples": [ 0, "not_answered" ], + "category": "behavior" + }, + + "toggle-order": { + "type": "String", + "desc": "Determines toggle order of the two states ('t' stands for state of true, 'f' for state of false); If 'toggle-indeterminate' is true, then the order is: indet -> first state -> second state -> indet (and repeat), otherwise: indet -> first state -> second state -> first state -> second state -> ...", + "default": "tf", + "values": [ "tf", "ft" ], + "category": "behavior", + "addedIn": "v1.12" + }, + + "toggle-indeterminate": { + "type": "Boolean", + "desc": "When user clicks/taps on the component, should we toggle through the indeterminate state too?", + "category": "behavior" + }, + + "size": { + "addedIn": "v1.8" + }, + + "label": { + "type": "String", + "desc": "Label to display along the component (or use the default slot instead of this prop)", + "examples": [ "I agree with the Terms and Conditions" ], + "category": "label" + }, + + "left-label": { + "type": "Boolean", + "desc": "Label (if any specified) should be displayed on the left side of the component", + "category": "label" + }, + + "checked-icon": { + "type": "String", + "examples": [ "visibility" ], + "category": "icons" + }, + + "unchecked-icon": { + "type": "String", + "examples": [ "visibility_off" ], + "category": "icons" + }, + + "indeterminate-icon": { + "type": "String", + "examples": [ "help" ], + "category": "icons" + }, + + "color": { + "extends": "color" + }, + + "keep-color": { + "type": "Boolean", + "desc": "Should the color (if specified any) be kept when the component is unticked/ off?", + "category": "behavior" + }, + + "dark": { + "extends": "dark" + }, + + "dense": { + "extends": "dense" + }, + + "disable": { + "extends": "disable" + }, + + "tabindex": { + "extends": "tabindex" + } + }, + + "events": { + "input": { + "desc": "Emitted when the component needs to change the model; Is also used by v-model", + "params": { + "value": { + "type": "Any", + "desc": "New model value", + "required": true, + "__exemption": [ "examples" ] + }, + "evt": { + "type": "Object", + "desc": "JS event object", + "required": true, + "__exemption": [ "examples" ], + "addedIn":"v1.11.2" + } + } + } + }, + + "methods": { + "toggle": { + "desc": "Toggle the state (of the model)" + } + }, + + "slots": { + "default": { + "desc": "Default slot can be used as label, unless 'label' prop is specified; Suggestion: string" + } + } +} diff --git a/src/mixins/dark.js b/src/mixins/dark.js new file mode 100644 index 00000000000..9f9f7421c23 --- /dev/null +++ b/src/mixins/dark.js @@ -0,0 +1,20 @@ +export default { + props: { + dark: { + type: Boolean, + default: null + } + }, + + computed: { + darkSuffix () { + if (this.dark === null && this.$q.dark.isActive === null) { + return 'dark-auto' + } + + return this.dark === true || (this.dark === null && this.$q.dark.isActive === true) + ? 'dark' + : 'light' + } + } +} diff --git a/src/mixins/datetime.js b/src/mixins/datetime.js new file mode 100644 index 00000000000..4d29f6d2551 --- /dev/null +++ b/src/mixins/datetime.js @@ -0,0 +1,122 @@ +import { toJalaali } from '../utils/private/date-persian.js' + +import DarkMixin from './dark.js' +import FormMixin from './form.js' +import ListenersMixin from './listeners.js' + +import { pad } from '../utils/format.js' + +const calendars = [ 'gregorian', 'persian' ] + +export default { + mixins: [ DarkMixin, FormMixin, ListenersMixin ], + + props: { + value: { + required: true + }, + + mask: { + type: String + }, + locale: Object, + + calendar: { + type: String, + validator: v => calendars.includes(v), + default: 'gregorian' + }, + + landscape: Boolean, + + color: String, + textColor: String, + + square: Boolean, + flat: Boolean, + bordered: Boolean, + + readonly: Boolean, + disable: Boolean + }, + + computed: { + computedMask () { + return this.__getMask() + }, + + computedLocale () { + return this.__getLocale() + }, + + editable () { + return this.disable !== true && this.readonly !== true + }, + + computedColor () { + return this.color || 'primary' + }, + + computedTextColor () { + return this.textColor || 'white' + }, + + computedTabindex () { + return this.editable === true ? 0 : -1 + }, + + headerClass () { + const cls = [] + this.color !== void 0 && cls.push(`bg-${this.color}`) + this.textColor !== void 0 && cls.push(`text-${this.textColor}`) + return cls.join(' ') + } + }, + + methods: { + __getLocale () { + return this.locale !== void 0 + ? { ...this.$q.lang.date, ...this.locale } + : this.$q.lang.date + }, + + __getCurrentDate (dateOnly) { + const d = new Date() + const timeFill = dateOnly === true ? null : 0 + + if (this.calendar === 'persian') { + const jDate = toJalaali(d) + return { + year: jDate.jy, + month: jDate.jm, + day: jDate.jd + } + } + + return { + year: d.getFullYear(), + month: d.getMonth() + 1, + day: d.getDate(), + hour: timeFill, + minute: timeFill, + second: timeFill, + millisecond: timeFill + } + }, + + __getCurrentTime () { + const d = new Date() + + return { + hour: d.getHours(), + minute: d.getMinutes(), + second: d.getSeconds(), + millisecond: d.getMilliseconds() + } + }, + + __getDayHash (date) { + return date.year + '/' + pad(date.month) + '/' + pad(date.day) + } + } +} diff --git a/src/mixins/datetime.json b/src/mixins/datetime.json new file mode 100644 index 00000000000..fd1a6660009 --- /dev/null +++ b/src/mixins/datetime.json @@ -0,0 +1,94 @@ +{ + "mixins": [ "mixins/form" ], + + "props": { + "value": { + "type": "String", + "category": "model" + }, + + "landscape": { + "type": "Boolean", + "desc": "Display the component in landscape mode", + "category": "behavior" + }, + + "mask": { + "type": "String", + "desc": "Mask (formatting string) used for parsing and formatting value", + "category": "model" + }, + + "locale": { + "type": "Object", + "desc": "Locale formatting options", + "examples": [ ":locale=\"{ monthsShort: ['Ian', 'Feb', 'Mar', '...'] }\"" ], + "definition": { + "days": { + "type": "Array", + "desc": "List of full day names (DDDD), starting with Sunday", + "examples": [ "['Duminica', 'Luni', 'Marti', '...']" ] + }, + "daysShort": { + "type": "Array", + "desc": "List of short day names (DDD), starting with Sunday", + "examples": [ "['Dum', 'Lun', 'Mar', '...']" ] + }, + "months": { + "type": "Array", + "desc": "List of full month names (MMMM), starting with January", + "examples": [ "['Ianuarie', 'Februarie', 'Martie', '...']" ] + }, + "monthsShort": { + "type": "Array", + "desc": "List of short month names (MMM), starting with January", + "examples": [ "['Ian', 'Feb', 'Mar', '...']" ] + } + }, + "category": "model" + }, + + "calendar": { + "type": "String", + "desc": "Specify calendar type", + "default": "gregorian", + "values": [ "gregorian", "persian" ], + "category": "model" + }, + + "color": { + "extends": "color" + }, + + "text-color": { + "extends": "text-color" + }, + + "dark": { + "extends": "dark" + }, + + "square": { + "extends": "square", + "addedIn": "v1.1.5" + }, + + "flat": { + "extends": "flat", + "addedIn": "v1.1.5" + }, + + "bordered": { + "extends": "bordered", + "addedIn": "v1.1.5" + }, + + "readonly": { + "extends": "readonly" + }, + + "disable": { + "extends": "disable" + } + } +} diff --git a/src/mixins/fab.js b/src/mixins/fab.js new file mode 100644 index 00000000000..b1af0502202 --- /dev/null +++ b/src/mixins/fab.js @@ -0,0 +1,87 @@ +import ListenersMixin from './listeners.js' + +const labelPositions = ['top', 'right', 'bottom', 'left'] + +export default { + mixins: [ ListenersMixin ], + + props: { + type: { + type: String, + default: 'a' + }, + + outline: Boolean, + push: Boolean, + flat: Boolean, + unelevated: Boolean, + + color: String, + textColor: String, + glossy: Boolean, + + square: Boolean, + padding: String, + + label: { + type: [ String, Number ], + default: '' + }, + labelPosition: { + type: String, + default: 'right', + validator: v => labelPositions.includes(v) + }, + externalLabel: Boolean, + hideLabel: { + type: Boolean + }, + labelClass: [ Array, String, Object ], + labelStyle: [ Array, String, Object ], + + disable: Boolean, + + tabindex: [ Number, String ] + }, + + computed: { + formClass () { + return `q-fab--form-${this.square === true ? 'square' : 'rounded'}` + }, + + stacked () { + return this.externalLabel === false && ['top', 'bottom'].includes(this.labelPosition) + }, + + labelProps () { + if (this.externalLabel === true) { + const hideLabel = this.hideLabel === null + ? this.showing === false + : this.hideLabel + + return { + action: 'push', + data: { + staticClass: 'q-fab__label q-tooltip--style q-fab__label--external' + + ` q-fab__label--external-${this.labelPosition}` + + (hideLabel === true ? ' q-fab__label--external-hidden' : ''), + style: this.labelStyle, + class: this.labelClass + } + } + } + + return { + action: [ 'left', 'top' ].includes(this.labelPosition) + ? 'unshift' + : 'push', + data: { + staticClass: `q-fab__label q-fab__label--internal q-fab__label--internal-${this.labelPosition}` + + (this.hideLabel === true ? ' q-fab__label--internal-hidden' : ''), + style: this.labelStyle, + class: this.labelClass + } + } + } + } +} diff --git a/src/mixins/fab.json b/src/mixins/fab.json new file mode 100644 index 00000000000..9a900e4aeff --- /dev/null +++ b/src/mixins/fab.json @@ -0,0 +1,137 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/vue-components/floating-action-button" + }, + + "behavior": { + "$listeners": true + }, + + "props": { + "type":{ + "type": "String", + "desc": "Define the button HTML DOM type", + "default": "a", + "values": [ + "a", "submit", "button", "reset" + ], + "category": "general" + }, + + "outline": { + "type": "Boolean", + "desc": "Use 'outline' design for Fab button", + "category": "style" + }, + + "push": { + "type": "Boolean", + "desc": "Use 'push' design for Fab button", + "category": "style" + }, + + "flat": { + "type": "Boolean", + "desc": "Use 'flat' design for Fab button", + "category": "style" + }, + + "unelevated": { + "type": "Boolean", + "desc": "Remove shadow", + "category": "style", + "addedIn": "v1.9" + }, + + "padding": { + "type": "String", + "desc": "Apply custom padding (vertical [horizontal]); Size in CSS units, including unit name or standard size name (none|xs|sm|md|lg|xl); Also removes the min width and height when set", + "examples": [ "16px", "10px 5px", "2rem", "xs", "md lg" ], + "category": "style", + "addedIn": "v1.11" + }, + + "color": { + "extends": "color" + }, + + "text-color": { + "extends": "text-color" + }, + + "glossy": { + "type": "Boolean", + "desc": "Apply the glossy effect over the button", + "category": "style" + }, + + "external-label": { + "type": "Boolean", + "desc": "Display label besides the FABs, as external content", + "category": "style|content", + "addedIn": "v1.9" + }, + + "label": { + "type": [ "String", "Number" ], + "desc": "The label that will be shown when Fab is extended", + "default": "", + "examples": [ "Button Label" ], + "category": "content", + "addedIn": "v1.9" + }, + + "label-position": { + "type": "String", + "desc": "Position of the label around the icon", + "values": [ "top", "right", "bottom", "left" ], + "category": "style|content", + "addedIn": "v1.9" + }, + + "hide-label": { + "type": "Boolean", + "desc": "Hide the label; Useful for animation purposes where you toggle the visibility of the label", + "category": "style|content", + "addedIn": "v1.9" + }, + + "label-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the label container", + "examples": [ + "my-special-class", + ":input-class=\"{ 'my-special-class': }\"" + ], + "category": "style", + "addedIn": "v1.9" + }, + + "label-style": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the label container", + "examples": [ + "background-color: #ff0000", + ":input-style=\"{ backgroundColor: '#ff0000' }\"" + ], + "category": "style", + "addedIn": "v1.9" + }, + + "square": { + "type": "Boolean", + "desc": "Apply a rectangle aspect to the FAB", + "category": "style", + "addedIn": "v1.9" + }, + + "disable": { + "extends": "disable" + }, + + "tabindex": { + "extends": "tabindex", + "addedIn": "v1.13" + } + } +} diff --git a/src/mixins/file.js b/src/mixins/file.js new file mode 100644 index 00000000000..3e083dd3977 --- /dev/null +++ b/src/mixins/file.js @@ -0,0 +1,260 @@ +import Platform from '../plugins/Platform.js' +import { stop, stopAndPrevent } from '../utils/event.js' +import cache from '../utils/private/cache.js' + +function filterFiles (files, rejectedFiles, failedPropValidation, filterFn) { + const acceptedFiles = [] + + files.forEach(file => { + if (filterFn(file) === true) { + acceptedFiles.push(file) + } + else { + rejectedFiles.push({ failedPropValidation, file }) + } + }) + + return acceptedFiles +} + +function stopAndPreventDrag (e) { + e && e.dataTransfer && (e.dataTransfer.dropEffect = 'copy') + stopAndPrevent(e) +} + +export default { + props: { + multiple: Boolean, + accept: String, + capture: String, + maxFileSize: [ Number, String ], + maxTotalSize: [ Number, String ], + maxFiles: [ Number, String ], + filter: Function + }, + + computed: { + extensions () { + if (this.accept !== void 0) { + return this.accept.split(',').map(ext => { + ext = ext.trim() + if (ext === '*') { // support "*" + return '*/' + } + else if (ext.endsWith('/*')) { // support "image/*" or "*/*" + ext = ext.slice(0, ext.length - 1) + } + return ext.toUpperCase() + }) + } + }, + + maxFilesNumber () { + return parseInt(this.maxFiles, 10) + }, + + maxTotalSizeNumber () { + return parseInt(this.maxTotalSize, 10) + } + }, + + methods: { + pickFiles (ev) { + if (this.editable === true) { + if (ev !== Object(ev)) { + ev = { target: null } + } + + if (ev.target !== null && ev.target.matches('input[type="file"]') === true) { + // stop propagation if it's not a real pointer event + ev.clientX === 0 && ev.clientY === 0 && stop(ev) + } + else { + const input = this.__getFileInput() + input && input !== ev.target && input.click(ev) + } + } + }, + + addFiles (files) { + if (this.editable && files) { + this.__addFiles(null, files) + } + }, + + __processFiles (e, filesToProcess, currentFileList, append) { + let files = Array.from(filesToProcess || e.target.files) + const rejectedFiles = [] + + const done = () => { + if (rejectedFiles.length > 0) { + this.$emit('rejected', rejectedFiles) + } + } + + // filter file types + if (this.accept !== void 0 && this.extensions.indexOf('*/') === -1) { + files = filterFiles(files, rejectedFiles, 'accept', file => { + return this.extensions.some(ext => ( + file.type.toUpperCase().startsWith(ext) || + file.name.toUpperCase().endsWith(ext) + )) + }) + + if (files.length === 0) { return done() } + } + + // filter max file size + if (this.maxFileSize !== void 0) { + const maxFileSize = parseInt(this.maxFileSize, 10) + files = filterFiles(files, rejectedFiles, 'max-file-size', file => { + return file.size <= maxFileSize + }) + + if (files.length === 0) { return done() } + } + + // Cordova/iOS allows selecting multiple files even when the + // multiple attribute is not specified. We also normalize drag'n'dropped + // files here: + if (this.multiple !== true && files.length > 0) { + files = [ files[0] ] + } + + files.forEach(file => { + file.__key = file.webkitRelativePath + file.lastModified + file.name + file.size + }) + + if (append === true) { + // Avoid duplicate files + const filenameMap = currentFileList.map(entry => entry.__key) + files = filterFiles(files, rejectedFiles, 'duplicate', file => { + return filenameMap.includes(file.__key) === false + }) + } + + if (files.length === 0) { return done() } + + if (this.maxTotalSize !== void 0) { + let size = append === true + ? currentFileList.reduce((total, file) => total + file.size, 0) + : 0 + + files = filterFiles(files, rejectedFiles, 'max-total-size', file => { + size += file.size + return size <= this.maxTotalSizeNumber + }) + + if (files.length === 0) { return done() } + } + + // do we have custom filter function? + if (typeof this.filter === 'function') { + const filteredFiles = this.filter(files) + files = filterFiles(files, rejectedFiles, 'filter', file => { + return filteredFiles.includes(file) + }) + } + + if (this.maxFiles !== void 0) { + let filesNumber = append === true + ? currentFileList.length + : 0 + + files = filterFiles(files, rejectedFiles, 'max-files', () => { + filesNumber++ + return filesNumber <= this.maxFilesNumber + }) + + if (files.length === 0) { return done() } + } + + done() + + if (files.length > 0) { + return files + } + }, + + __onDragOver (e) { + stopAndPreventDrag(e) + this.dnd !== true && (this.dnd = true) + }, + + __onDragLeave (e) { + stopAndPrevent(e) + + // Safari bug: relatedTarget is null for over 10 years + // https://bugs.webkit.org/show_bug.cgi?id=66547 + const gone = e.relatedTarget !== null || Platform.is.safari !== true + ? e.relatedTarget !== this.$refs.dnd + : document.elementsFromPoint(e.clientX, e.clientY).includes(this.$refs.dnd) === false + + gone === true && (this.dnd = false) + }, + + __onDrop (e) { + stopAndPreventDrag(e) + const files = e.dataTransfer.files + + if (files.length > 0) { + this.__addFiles(null, files) + } + + this.dnd = false + }, + + __getDnd (h, type) { + if (this.dnd === true) { + return h('div', { + key: 'dnd', + staticClass: `q-${type}__dnd absolute-full`, + ref: 'dnd', + on: cache(this, 'dnd', { + dragenter: stopAndPreventDrag, + dragover: stopAndPreventDrag, + dragleave: this.__onDragLeave, + drop: this.__onDrop + }) + }) + } + } + } +} + +export const FileValueMixin = { + computed: { + formDomProps () { + if (this.type !== 'file') { + return + } + + try { + const dt = 'DataTransfer' in window + ? new DataTransfer() + : ('ClipboardEvent' in window + ? new ClipboardEvent('').clipboardData + : void 0 + ) + + if (Object(this.value) === this.value) { + ('length' in this.value + ? Array.from(this.value) + : [ this.value ] + ).forEach(file => { + dt.items.add(file) + }) + } + + return { + files: dt.files + } + } + catch (e) { + return { + files: void 0 + } + } + } + } +} diff --git a/src/mixins/file.json b/src/mixins/file.json new file mode 100644 index 00000000000..ea485e55a69 --- /dev/null +++ b/src/mixins/file.json @@ -0,0 +1,108 @@ +{ + "props": { + "multiple": { + "type": "Boolean", + "desc": "Allow multiple file uploads", + "category": "behavior" + }, + + "accept": { + "type": "String", + "desc": "Comma separated list of unique file type specifiers. Maps to 'accept' attribute of native input type=file element", + "examples": [ + ".jpg, .pdf, image/*", "image/jpeg, .pdf" + ], + "category": "behavior" + }, + + "capture": { + "type": "String", + "desc": "Optionally, specify that a new file should be captured, and which device should be used to capture that new media of a type defined by the 'accept' prop. Maps to 'capture' attribute of native input type=file element", + "values": [ "user", "environment" ], + "category": "behavior", + "addedIn": "v1.12.6" + }, + + "max-file-size": { + "type": [ "Number", "String" ], + "desc": "Maximum size of individual file in bytes", + "examples": [ 1024, 1048576 ], + "category": "behavior" + }, + + "max-total-size": { + "type": [ "Number", "String" ], + "desc": "Maximum size of all files combined in bytes", + "examples": [ 1024, 1048576 ], + "category": "behavior" + }, + + "max-files": { + "type": [ "Number", "String" ], + "desc": "Maximum number of files to contain", + "examples": [ + ":max-files=\"5\"", + "10" + ], + "category": "behavior" + }, + + "filter": { + "type": "Function", + "desc": "Custom filter for added files; Only files that pass this filter will be added to the queue and uploaded; For best performance, reference it from your scope and do not define it inline", + "params": { + "files": { + "type": [ "FileList", "Array" ], + "desc": "Candidate files to be added to queue", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Array", + "desc": "Filtered files to be added to queue", + "__exemption": [ "examples" ] + }, + "examples": [ ":filter=\"files => files.filter(file => file.size === 1024)\"" ], + "category": "behavior" + } + }, + + "events": { + "rejected": { + "desc": "Emitted after files are picked and some do not pass the validation props (accept, max-file-size, max-total-size, filter, etc)", + "params": { + "rejectedEntries": { + "type": "Array", + "desc": "Array of { failedPropValidation: string, file: File } Objects for files that do not pass the validation", + "__exemption": ["examples"] + } + }, + "addedIn": "v1.11.2" + } + }, + + "methods": { + "pickFiles": { + "desc": "Trigger file pick; Must be called as a direct consequence of user interaction (eg. in a click handler), due to browsers security policy", + "params": { + "evt": { + "type": "Object", + "desc": "JS event object", + "__exemption": [ "examples" ] + } + } + }, + + "addFiles": { + "desc": "Add files programmatically", + "params": { + "files": { + "type": [ "FileList", "Array" ], + "desc": "Array of files (instances of File)", + "required": true, + "__exemption": [ "examples" ] + } + } + } + } +} diff --git a/src/mixins/focus-wrap.js b/src/mixins/focus-wrap.js new file mode 100644 index 00000000000..1abc220021d --- /dev/null +++ b/src/mixins/focus-wrap.js @@ -0,0 +1,47 @@ +import { mergeSlot } from '../utils/private/slot.js' +import { FOCUSABLE_SELECTOR, changeFocusedElement } from '../utils/private/focus-manager.js' + +export default { + computed: { + focusGuardElements () { + return { + firstGuard: this.$createElement('span', { + staticClass: 'no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus', + attrs: { tabindex: 0 }, + on: { focus: this.__focusLast } + }), + lastGuard: this.$createElement('span', { + staticClass: 'no-outline absolute no-pointer-events q-key-group-navigation--ignore-focus', + attrs: { tabindex: 0 }, + on: { focus: this.__focusFirst } + }) + } + } + }, + + methods: { + __focusFirst (keepInsideFocus) { + const innerNode = this.__getInnerNode() + if (innerNode !== void 0 && (keepInsideFocus !== true || innerNode.contains(document.activeElement) !== true)) { + const focusableElements = Array.prototype.slice.call(innerNode.querySelectorAll(FOCUSABLE_SELECTOR), 1, -1) + changeFocusedElement(focusableElements, 0, 1) + } + }, + + __focusLast () { + const innerNode = this.__getInnerNode() + if (innerNode !== void 0) { + const focusableElements = Array.prototype.slice.call(innerNode.querySelectorAll(FOCUSABLE_SELECTOR), 1, -1) + changeFocusedElement(focusableElements, focusableElements.length - 1, -1) + } + }, + + __getFocusWrappedContent (slotName) { + return mergeSlot([ + this.focusGuardElements.firstGuard + ], this, slotName).concat( + this.focusGuardElements.lastGuard + ) + } + } +} diff --git a/src/mixins/form.js b/src/mixins/form.js new file mode 100644 index 00000000000..f220dd52ac3 --- /dev/null +++ b/src/mixins/form.js @@ -0,0 +1,40 @@ +export default { + props: { + name: String + }, + + computed: { + formAttrs () { + return { + type: 'hidden', + name: this.name, + value: this.value + } + } + }, + + methods: { + __injectFormInput (child, action, className) { + child[action]( + this.$createElement('input', { + staticClass: 'hidden', + class: className, + attrs: this.formAttrs, + domProps: this.formDomProps + }) + ) + } + } +} + +export const FormFieldMixin = { + props: { + name: String + }, + + computed: { + nameProp () { + return this.name || this.for + } + } +} diff --git a/src/mixins/form.json b/src/mixins/form.json new file mode 100644 index 00000000000..aba6fde00ec --- /dev/null +++ b/src/mixins/form.json @@ -0,0 +1,11 @@ +{ + "props": { + "name": { + "type": "String", + "desc": "Used to specify the name of the control; Useful if dealing with forms submitted directly to a URL", + "examples": [ "car_id" ], + "category": "behavior", + "addedIn": "v1.9" + } + } +} diff --git a/src/mixins/fullscreen.js b/src/mixins/fullscreen.js new file mode 100644 index 00000000000..a4db4686de2 --- /dev/null +++ b/src/mixins/fullscreen.js @@ -0,0 +1,101 @@ +import History from '../history.js' + +let fullscreenCounter = 0 + +export default { + props: { + fullscreen: Boolean, + noRouteFullscreenExit: Boolean + }, + + data () { + return { + inFullscreen: false + } + }, + + watch: { + $route () { + this.noRouteFullscreenExit !== true && this.exitFullscreen() + }, + + fullscreen (v) { + if (this.inFullscreen !== v) { + this.toggleFullscreen() + } + }, + + inFullscreen (v) { + this.$emit('update:fullscreen', v) + this.$emit('fullscreen', v) + } + }, + + methods: { + toggleFullscreen () { + if (this.inFullscreen === true) { + this.exitFullscreen() + } + else { + this.setFullscreen() + } + }, + + setFullscreen () { + if (this.inFullscreen === true) { + return + } + + this.inFullscreen = true + this.container = this.$el.parentNode + this.container.replaceChild(this.fullscreenFillerNode, this.$el) + document.body.appendChild(this.$el) + + fullscreenCounter++ + + if (fullscreenCounter === 1) { + document.body.classList.add('q-body--fullscreen-mixin') + } + + this.__historyFullscreen = { + handler: this.exitFullscreen + } + History.add(this.__historyFullscreen) + }, + + exitFullscreen () { + if (this.inFullscreen !== true) { + return + } + + if (this.__historyFullscreen !== void 0) { + History.remove(this.__historyFullscreen) + this.__historyFullscreen = void 0 + } + this.container.replaceChild(this.$el, this.fullscreenFillerNode) + this.inFullscreen = false + + fullscreenCounter = Math.max(0, fullscreenCounter - 1) + + if (fullscreenCounter === 0) { + document.body.classList.remove('q-body--fullscreen-mixin') + + if (this.$el.scrollIntoView !== void 0) { + setTimeout(() => { this.$el.scrollIntoView() }) + } + } + } + }, + + beforeMount () { + this.fullscreenFillerNode = document.createElement('span') + }, + + mounted () { + this.fullscreen === true && this.setFullscreen() + }, + + beforeDestroy () { + this.exitFullscreen() + } +} diff --git a/src/mixins/fullscreen.json b/src/mixins/fullscreen.json new file mode 100644 index 00000000000..43dbe6fda6a --- /dev/null +++ b/src/mixins/fullscreen.json @@ -0,0 +1,33 @@ +{ + "props": { + "fullscreen": { + "type": "Boolean", + "sync": true, + "desc": "Fullscreen mode", + "examples": [ + ":fullscreen.sync=\"isFullscreen\"" + ], + "category": "behavior" + }, + + "no-route-fullscreen-exit": { + "type": "Boolean", + "desc": "Changing route app won't exit fullscreen", + "category": "behavior", + "addedIn": "v1.1.7" + } + }, + + "methods": { + "toggleFullscreen": { + "desc": "Toggle the view to be fullscreen or not fullscreen" + }, + "setFullscreen": { + "desc": "Enter the fullscreen view" + }, + + "exitFullscreen": { + "desc": "Leave the fullscreen view" + } + } +} diff --git a/src/mixins/history.js b/src/mixins/history.js new file mode 100644 index 00000000000..3ad0be99532 --- /dev/null +++ b/src/mixins/history.js @@ -0,0 +1,24 @@ +import History from '../history.js' + +export default { + methods: { + __addHistory () { + this.__historyEntry = { + condition: () => { return this.hideOnRouteChange === true }, + handler: this.hide + } + History.add(this.__historyEntry) + }, + + __removeHistory () { + if (this.__historyEntry !== void 0) { + History.remove(this.__historyEntry) + this.__historyEntry = void 0 + } + } + }, + + beforeDestroy () { + this.showing === true && this.__removeHistory() + } +} diff --git a/src/mixins/listeners.js b/src/mixins/listeners.js new file mode 100644 index 00000000000..8ef0941f70d --- /dev/null +++ b/src/mixins/listeners.js @@ -0,0 +1,2 @@ +import { getPropCacheMixin } from '../utils/private/cache.js' +export default getPropCacheMixin('$listeners', 'qListeners') diff --git a/src/mixins/mask.js b/src/mixins/mask.js new file mode 100644 index 00000000000..74874c94201 --- /dev/null +++ b/src/mixins/mask.js @@ -0,0 +1,540 @@ +import { shouldIgnoreKey } from '../utils/private/key-composition.js' + +// leave NAMED_MASKS at top of file (code referenced from docs) +const NAMED_MASKS = { + date: '####/##/##', + datetime: '####/##/## ##:##', + time: '##:##', + fulltime: '##:##:##', + phone: '(###) ### - ####', + card: '#### #### #### ####' +} + +const TOKENS = { + '#': { pattern: '[\\d]', negate: '[^\\d]' }, + + S: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]' }, + N: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]' }, + + A: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]', transform: v => v.toLocaleUpperCase() }, + a: { pattern: '[a-zA-Z]', negate: '[^a-zA-Z]', transform: v => v.toLocaleLowerCase() }, + + X: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]', transform: v => v.toLocaleUpperCase() }, + x: { pattern: '[0-9a-zA-Z]', negate: '[^0-9a-zA-Z]', transform: v => v.toLocaleLowerCase() } +} + +const KEYS = Object.keys(TOKENS) +KEYS.forEach(key => { + TOKENS[key].regex = new RegExp(TOKENS[key].pattern) +}) + +const + tokenRegexMask = new RegExp('\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|([' + KEYS.join('') + '])|(.)', 'g'), + escRegex = /[.*+?^${}()|[\]\\]/g + +const MARKER = String.fromCharCode(1) + +export default { + props: { + mask: String, + reverseFillMask: Boolean, + fillMask: [Boolean, String], + unmaskedValue: Boolean + }, + + watch: { + type () { + this.__updateMaskInternals() + }, + + autogrow () { + this.__updateMaskInternals() + }, + + mask (v) { + if (v !== void 0) { + this.__updateMaskValue(this.innerValue, true) + } + else { + const val = this.__unmask(this.innerValue) + this.__updateMaskInternals() + this.value !== val && this.$emit('input', val) + } + }, + + fillMask () { + this.hasMask === true && this.__updateMaskValue(this.innerValue, true) + }, + + reverseFillMask () { + this.hasMask === true && this.__updateMaskValue(this.innerValue, true) + }, + + unmaskedValue () { + this.hasMask === true && this.__updateMaskValue(this.innerValue) + } + }, + + methods: { + __getInitialMaskedValue () { + this.__updateMaskInternals() + + if (this.hasMask === true) { + const masked = this.__mask(this.__unmask(this.value)) + + return this.fillMask !== false + ? this.__fillWithMask(masked) + : masked + } + + return this.value + }, + + __getPaddedMaskMarked (size) { + if (size < this.maskMarked.length) { + return this.maskMarked.slice(-size) + } + + let + maskMarked = this.maskMarked, + pad = '' + const + padPos = maskMarked.indexOf(MARKER) + + if (padPos > -1) { + for (let i = size - maskMarked.length; i > 0; i--) { + pad += MARKER + } + + maskMarked = maskMarked.slice(0, padPos) + pad + maskMarked.slice(padPos) + } + + return maskMarked + }, + + __updateMaskInternals () { + this.hasMask = this.mask !== void 0 && + this.mask.length > 0 && + (this.autogrow === true || ['textarea', 'text', 'search', 'url', 'tel', 'password'].includes(this.type)) + + if (this.hasMask === false) { + this.computedUnmask = void 0 + this.maskMarked = '' + this.maskReplaced = '' + return + } + + const + computedMask = NAMED_MASKS[this.mask] === void 0 + ? this.mask + : NAMED_MASKS[this.mask], + fillChar = typeof this.fillMask === 'string' && this.fillMask.length > 0 + ? this.fillMask.slice(0, 1) + : '_', + fillCharEscaped = fillChar.replace(escRegex, '\\$&'), + unmask = [], + extract = [], + mask = [] + + let + firstMatch = this.reverseFillMask === true, + unmaskChar = '', + negateChar = '' + + computedMask.replace(tokenRegexMask, (_, char1, esc, token, char2) => { + if (token !== void 0) { + const c = TOKENS[token] + mask.push(c) + negateChar = c.negate + if (firstMatch === true) { + extract.push('(?:' + negateChar + '+)?(' + c.pattern + '+)?(?:' + negateChar + '+)?(' + c.pattern + '+)?') + firstMatch = false + } + extract.push('(?:' + negateChar + '+)?(' + c.pattern + ')?') + } + else if (esc !== void 0) { + unmaskChar = '\\' + (esc === '\\' ? '' : esc) + mask.push(esc) + unmask.push('([^' + unmaskChar + ']+)?' + unmaskChar + '?') + } + else { + const c = char1 !== void 0 ? char1 : char2 + unmaskChar = c === '\\' ? '\\\\\\\\' : c.replace(escRegex, '\\\\$&') + mask.push(c) + unmask.push('([^' + unmaskChar + ']+)?' + unmaskChar + '?') + } + }) + + const + unmaskMatcher = new RegExp( + '^' + + unmask.join('') + + '(' + (unmaskChar === '' ? '.' : '[^' + unmaskChar + ']') + '+)?' + + (unmaskChar === '' ? '' : '[' + unmaskChar + ']*') + '$' + ), + extractLast = extract.length - 1, + extractMatcher = extract.map((re, index) => { + if (index === 0 && this.reverseFillMask === true) { + return new RegExp('^' + fillCharEscaped + '*' + re) + } + else if (index === extractLast) { + return new RegExp( + '^' + re + + '(' + (negateChar === '' ? '.' : negateChar) + '+)?' + + (this.reverseFillMask === true ? '$' : fillCharEscaped + '*') + ) + } + + return new RegExp('^' + re) + }) + + this.computedMask = mask + this.computedUnmask = val => { + const unmaskMatch = unmaskMatcher.exec(val) + if (unmaskMatch !== null) { + val = unmaskMatch.slice(1).join('') + } + + const + extractMatch = [], + extractMatcherLength = extractMatcher.length + + for (let i = 0, str = val; i < extractMatcherLength; i++) { + const m = extractMatcher[i].exec(str) + + if (m === null) { + break + } + + str = str.slice(m.shift().length) + extractMatch.push(...m) + } + if (extractMatch.length > 0) { + return extractMatch.join('') + } + + return val + } + this.maskMarked = mask.map(v => typeof v === 'string' ? v : MARKER).join('') + this.maskReplaced = this.maskMarked.split(MARKER).join(fillChar) + }, + + __updateMaskValue (rawVal, updateMaskInternals, inputType) { + const + inp = this.$refs.input, + end = inp.selectionEnd, + endReverse = inp.value.length - end, + unmasked = this.__unmask(rawVal) + + // Update here so unmask uses the original fillChar + updateMaskInternals === true && this.__updateMaskInternals() + + const + preMasked = this.__mask(unmasked), + masked = this.fillMask !== false + ? this.__fillWithMask(preMasked) + : preMasked, + changed = this.innerValue !== masked + + // We want to avoid "flickering" so we set value immediately + inp.value !== masked && (inp.value = masked) + + changed === true && (this.innerValue = masked) + + document.activeElement === inp && this.$nextTick(() => { + if (masked === this.maskReplaced) { + const cursor = this.reverseFillMask === true ? this.maskReplaced.length : 0 + inp.setSelectionRange(cursor, cursor, 'forward') + + return + } + + if (inputType === 'insertFromPaste' && this.reverseFillMask !== true) { + const cursor = end - 1 + this.__moveCursorRight(inp, cursor, cursor) + + return + } + + if (['deleteContentBackward', 'deleteContentForward'].indexOf(inputType) > -1) { + const cursor = this.reverseFillMask === true + ? ( + end === 0 + ? (masked.length > preMasked.length ? 1 : 0) + : Math.max(0, masked.length - (masked === this.maskReplaced ? 0 : Math.min(preMasked.length, endReverse) + 1)) + 1 + ) + : end + inp.setSelectionRange(cursor, cursor, 'forward') + + return + } + + if (this.reverseFillMask === true) { + if (changed === true) { + const cursor = Math.max(0, masked.length - (masked === this.maskReplaced ? 0 : Math.min(preMasked.length, endReverse + 1))) + + if (cursor === 1 && end === 1) { + inp.setSelectionRange(cursor, cursor, 'forward') + } + else { + this.__moveCursorRightReverse(inp, cursor, cursor) + } + } + else { + const cursor = masked.length - endReverse + inp.setSelectionRange(cursor, cursor, 'backward') + } + } + else { + if (changed === true) { + const cursor = Math.max(0, this.maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1) + this.__moveCursorRight(inp, cursor, cursor) + } + else { + const cursor = end - 1 + this.__moveCursorRight(inp, cursor, cursor) + } + } + }) + + const val = this.unmaskedValue === true + ? this.__unmask(masked) + : masked + + String(this.value) !== val && this.__emitValue(val, true) + }, + + __moveCursorForPaste (inp, start, end) { + const preMasked = this.__mask(this.__unmask(inp.value)) + + start = Math.max(0, this.maskMarked.indexOf(MARKER), Math.min(preMasked.length, start)) + + inp.setSelectionRange(start, end, 'forward') + }, + + __moveCursorLeft (inp, start, end, selection) { + const noMarkBefore = this.maskMarked.slice(start - 1).indexOf(MARKER) === -1 + let i = Math.max(0, start - 1) + + for (; i >= 0; i--) { + if (this.maskMarked[i] === MARKER) { + start = i + noMarkBefore === true && start++ + break + } + } + + if ( + i < 0 && + this.maskMarked[start] !== void 0 && + this.maskMarked[start] !== MARKER + ) { + return this.__moveCursorRight(inp, 0, 0) + } + + start >= 0 && inp.setSelectionRange( + start, + selection === true ? end : start, 'backward' + ) + }, + + __moveCursorRight (inp, start, end, selection) { + const limit = inp.value.length + let i = Math.min(limit, end + 1) + + for (; i <= limit; i++) { + if (this.maskMarked[i] === MARKER) { + end = i + break + } + else if (this.maskMarked[i - 1] === MARKER) { + end = i + } + } + + if ( + i > limit && + this.maskMarked[end - 1] !== void 0 && + this.maskMarked[end - 1] !== MARKER + ) { + return this.__moveCursorLeft(inp, limit, limit) + } + + inp.setSelectionRange(selection ? start : end, end, 'forward') + }, + + __moveCursorLeftReverse (inp, start, end, selection) { + const + maskMarked = this.__getPaddedMaskMarked(inp.value.length) + let i = Math.max(0, start - 1) + + for (; i >= 0; i--) { + if (maskMarked[i - 1] === MARKER) { + start = i + break + } + else if (maskMarked[i] === MARKER) { + start = i + if (i === 0) { + break + } + } + } + + if ( + i < 0 && + maskMarked[start] !== void 0 && + maskMarked[start] !== MARKER + ) { + return this.__moveCursorRightReverse(inp, 0, 0) + } + + start >= 0 && inp.setSelectionRange( + start, + selection === true ? end : start, 'backward' + ) + }, + + __moveCursorRightReverse (inp, start, end, selection) { + const + limit = inp.value.length, + maskMarked = this.__getPaddedMaskMarked(limit), + noMarkBefore = maskMarked.slice(0, end + 1).indexOf(MARKER) === -1 + let i = Math.min(limit, end + 1) + + for (; i <= limit; i++) { + if (maskMarked[i - 1] === MARKER) { + end = i + end > 0 && noMarkBefore === true && end-- + break + } + } + + if ( + i > limit && + maskMarked[end - 1] !== void 0 && + maskMarked[end - 1] !== MARKER + ) { + return this.__moveCursorLeftReverse(inp, limit, limit) + } + + inp.setSelectionRange(selection === true ? start : end, end, 'forward') + }, + + __onMaskedKeydown (e) { + if (shouldIgnoreKey(e) === true) { + return + } + + const + inp = this.$refs.input, + start = inp.selectionStart, + end = inp.selectionEnd + + if (e.keyCode === 37 || e.keyCode === 39) { // Left / Right + const fn = this['__moveCursor' + (e.keyCode === 39 ? 'Right' : 'Left') + (this.reverseFillMask === true ? 'Reverse' : '')] + + e.preventDefault() + fn(inp, start, end, e.shiftKey) + } + else if ( + e.keyCode === 8 && // Backspace + this.reverseFillMask !== true && + start === end + ) { + this.__moveCursorLeft(inp, start, end, true) + } + else if ( + e.keyCode === 46 && // Delete + this.reverseFillMask === true && + start === end + ) { + this.__moveCursorRightReverse(inp, start, end, true) + } + + this.$emit('keydown', e) + }, + + __mask (val) { + if (val === void 0 || val === null || val === '') { return '' } + + if (this.reverseFillMask === true) { + return this.__maskReverse(val) + } + + const mask = this.computedMask + + let valIndex = 0, output = '' + + for (let maskIndex = 0; maskIndex < mask.length; maskIndex++) { + const + valChar = val[valIndex], + maskDef = mask[maskIndex] + + if (typeof maskDef === 'string') { + output += maskDef + valChar === maskDef && valIndex++ + } + else if (valChar !== void 0 && maskDef.regex.test(valChar)) { + output += maskDef.transform !== void 0 + ? maskDef.transform(valChar) + : valChar + valIndex++ + } + else { + return output + } + } + + return output + }, + + __maskReverse (val) { + const + mask = this.computedMask, + firstTokenIndex = this.maskMarked.indexOf(MARKER) + + let valIndex = val.length - 1, output = '' + + for (let maskIndex = mask.length - 1; maskIndex >= 0 && valIndex > -1; maskIndex--) { + const maskDef = mask[maskIndex] + + let valChar = val[valIndex] + + if (typeof maskDef === 'string') { + output = maskDef + output + valChar === maskDef && valIndex-- + } + else if (valChar !== void 0 && maskDef.regex.test(valChar)) { + do { + output = (maskDef.transform !== void 0 ? maskDef.transform(valChar) : valChar) + output + valIndex-- + valChar = val[valIndex] + // eslint-disable-next-line no-unmodified-loop-condition + } while (firstTokenIndex === maskIndex && valChar !== void 0 && maskDef.regex.test(valChar)) + } + else { + return output + } + } + + return output + }, + + __unmask (val) { + return typeof val !== 'string' || this.computedUnmask === void 0 + ? (typeof val === 'number' ? this.computedUnmask('' + val) : val) + : this.computedUnmask(val) + }, + + __fillWithMask (val) { + if (this.maskReplaced.length - val.length <= 0) { + return val + } + + return this.reverseFillMask === true && val.length > 0 + ? this.maskReplaced.slice(0, -val.length) + val + : val + this.maskReplaced.slice(val.length) + } + } +} diff --git a/src/mixins/mask.json b/src/mixins/mask.json new file mode 100644 index 00000000000..e9628cdfd9d --- /dev/null +++ b/src/mixins/mask.json @@ -0,0 +1,31 @@ +{ + "props": { + "mask": { + "type": "String", + "desc": "Custom mask or one of the predefined mask names", + "examples": [ + "###-##", "date", "datetime", "time", "fulltime", "phone", "card" + ], + "category": "behavior" + }, + + "fill-mask": { + "type": [ "Boolean", "String" ], + "desc": "Fills string with specified characters (or underscore if value is not string) to fill mask's length", + "examples": [ "true", "'0'", "'_'" ], + "category": "behavior" + }, + + "reverse-fill-mask": { + "type": "Boolean", + "desc": "Fills string from the right side of the mask", + "category": "behavior" + }, + + "unmasked-value": { + "type": "Boolean", + "desc": "Model will be unmasked (won't contain tokens/separation characters)", + "category": "behavior" + } + } +} diff --git a/src/mixins/model-toggle.js b/src/mixins/model-toggle.js new file mode 100644 index 00000000000..ac88c32336b --- /dev/null +++ b/src/mixins/model-toggle.js @@ -0,0 +1,162 @@ +import { isSSR } from '../plugins/Platform.js' + +import ListenersMixin from './listeners.js' + +const labelClick = { timeStamp: null, label: null, show: null } + +function isDuplicateLabelClick (evt, fromShow) { + if (evt.type !== 'click') { + return false + } + + const { timeStamp, label, show } = labelClick + const { target } = evt + + labelClick.show = fromShow + labelClick.timeStamp = evt.timeStamp + labelClick.label = target + ? ( + typeof target.id === 'string' && target.id !== '' && label !== null && label.htmlFor === target.id + ? label + : typeof target.closest === 'function' ? target.closest('label') : null + ) + : null + + return timeStamp === labelClick.timeStamp && label === labelClick.label && show !== fromShow +} + +export default { + mixins: [ ListenersMixin ], + + props: { + value: { + type: Boolean, + default: void 0 + } + }, + + data () { + return { + showing: false + } + }, + + watch: { + value (val) { + this.__processModelChange(val) + }, + + $route () { + this.hideOnRouteChange === true && this.showing === true && this.hide() + } + }, + + methods: { + toggle (evt) { + this[this.showing === true ? 'hide' : 'show'](evt) + + if (evt === Object(evt)) { + evt.qAnchorHandled = true + } + }, + + show (evt) { + if ( + this.disable === true || + ( + evt === Object(evt) && + (evt.qAnchorHandled === true || isDuplicateLabelClick(evt, 'show') === true) + ) || + (this.__showCondition !== void 0 && this.__showCondition(evt) !== true) + ) { + return + } + + if (this.qListeners.input !== void 0 && isSSR === false) { + this.$emit('input', true) + this.payload = evt + this.$nextTick(() => { + if (this.payload === evt) { + this.payload = void 0 + } + }) + } + + if (this.value === void 0 || this.qListeners.input === void 0 || isSSR === true) { + this.__processShow(evt) + } + }, + + __processShow (evt) { + if (this.showing === true) { + return + } + + // need to call it before setting showing to true + // in order to not ruin the animation + this.__preparePortal !== void 0 && this.__preparePortal() + + this.showing = true + + this.$emit('before-show', evt) + + if (this.__show !== void 0) { + this.__show(evt) + } + else { + this.$emit('show', evt) + } + }, + + hide (evt) { + if ( + this.disable === true || + ( + evt === Object(evt) && + (evt.qAnchorHandled === true || isDuplicateLabelClick(evt, 'hide') === true) + ) + ) { + return + } + + if (this.qListeners.input !== void 0 && isSSR === false) { + this.$emit('input', false) + this.payload = evt + this.$nextTick(() => { + if (this.payload === evt) { + this.payload = void 0 + } + }) + } + if (this.value === void 0 || this.qListeners.input === void 0 || isSSR === true) { + this.__processHide(evt) + } + }, + + __processHide (evt) { + if (this.showing === false) { + return + } + + this.showing = false + + this.$emit('before-hide', evt) + + if (this.__hide !== void 0) { + this.__hide(evt) + } + else { + this.$emit('hide', evt) + } + }, + + __processModelChange (val) { + if (this.disable === true && val === true) { + this.qListeners.input !== void 0 && this.$emit('input', false) + } + else if ((val === true) !== this.showing) { + this[`__process${val === true ? 'Show' : 'Hide'}`](this.payload) + } + } + } +} diff --git a/src/mixins/model-toggle.json b/src/mixins/model-toggle.json new file mode 100644 index 00000000000..f364e21b65e --- /dev/null +++ b/src/mixins/model-toggle.json @@ -0,0 +1,51 @@ +{ + "props": { + "value": { + "type": "Boolean", + "desc": "Model of the component defining shown/hidden state; Either use this property (along with a listener for 'input' event) OR use v-model directive", + "category": "model" + } + }, + + "events": { + "input": { + "desc": "Emitted when showing/hidden state changes; Is also used by v-model", + "params": { + "value": { + "type": "Boolean", + "desc": "New state (showing/hidden)" + } + } + }, + + "show": { + "extends": "show" + }, + + "before-show": { + "extends": "before-show" + }, + + "hide": { + "extends": "hide" + }, + + "before-hide": { + "extends": "before-hide" + } + }, + + "methods": { + "show": { + "extends": "show" + }, + + "hide": { + "extends": "hide" + }, + + "toggle": { + "extends": "toggle" + } + } +} diff --git a/src/mixins/option-size.js b/src/mixins/option-size.js new file mode 100644 index 00000000000..f492db4d3eb --- /dev/null +++ b/src/mixins/option-size.js @@ -0,0 +1,9 @@ +import { getSizeMixin } from './size.js' + +export default getSizeMixin({ + xs: 30, + sm: 35, + md: 40, + lg: 50, + xl: 60 +}) diff --git a/src/mixins/panel-child.json b/src/mixins/panel-child.json new file mode 100644 index 00000000000..552e2d6ac89 --- /dev/null +++ b/src/mixins/panel-child.json @@ -0,0 +1,17 @@ +{ + "props": { + "name": { + "type": "Any", + "desc": "Panel name", + "required": true, + "examples": [ + "accounts", "firstPanel", ":name=\"1\"" + ], + "category": "general" + }, + + "disable": { + "extends": "disable" + } + } +} diff --git a/src/mixins/panel-parent.json b/src/mixins/panel-parent.json new file mode 100644 index 00000000000..f2a9586fe8f --- /dev/null +++ b/src/mixins/panel-parent.json @@ -0,0 +1,145 @@ +{ + "props": { + "value": { + "type": "Any", + "desc": "Model of the component defining the current panel's name; If a Number is used, it does not define the panel's index, but rather the panel's name which can also be an Integer; Either use this property (along with a listener for 'input' event) OR use the v-model directive.", + "examples": [ "v-model=\"panelName\"" ], + "category": "model" + }, + + "keep-alive": { + "type": "Boolean", + "desc": "Equivalent to using Vue's native component on the content", + "category": "behavior" + }, + + "keep-alive-include": { + "type": [ "String", "Array", "RegExp" ], + "desc": "Equivalent to using Vue's native include prop for ; Values must be valid Vue component names", + "examples": [ "a,b", "/a|b/", "['a', 'b']" ], + "category": "behavior", + "addedIn": "v1.15" + }, + + "keep-alive-exclude": { + "type": [ "String", "Array", "RegExp" ], + "desc": "Equivalent to using Vue's native exclude prop for ; Values must be valid Vue component names", + "examples": [ "a,b", "/a|b/", "['a', 'b']" ], + "category": "behavior", + "addedIn": "v1.15" + }, + + "keep-alive-max": { + "type": "Number", + "desc": "Equivalent to using Vue's native max prop for ", + "examples": [ "2" ], + "category": "behavior", + "addedIn": "v1.15" + }, + + "animated": { + "type": "Boolean", + "desc": "Enable transitions between panel (also see 'transition-prev' and 'transition-next' props)", + "category": "behavior" + }, + + "infinite": { + "type": "Boolean", + "desc": "Makes component appear as infinite (when reaching last panel, next one will become the first one)", + "category": "behavior" + }, + + "swipeable": { + "type": "Boolean", + "desc": "Enable swipe events (may interfere with content's touch/mouse events)", + "category": "behavior" + }, + + "vertical": { + "type": "Boolean", + "desc": "Default transitions and swipe actions will be on the vertical axis", + "category": "behavior" + }, + + "transition-prev": { + "extends": "transition", + "desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)", + "default": "slide-right/slide-down", + "category": "behavior" + }, + + "transition-next": { + "extends": "transition", + "desc": "One of Quasar's embedded transitions (has effect only if 'animated' prop is set)", + "default": "slide-left/slide-up", + "category": "behavior" + } + }, + + "events": { + "input": { + "desc": "Emitted when the component changes the model; This event _isn't_ fired if the model is changed externally; Is also used by v-model", + "params": { + "value": { + "type": [ "String", "Number" ], + "desc": "New current panel name", + "examples": [ "dashboard" ] + } + } + }, + + "before-transition": { + "desc": "Emitted before transitioning to a new panel", + "params": { + "newVal": { + "type": [ "String", "Number" ], + "desc": "Panel name towards transition is going", + "examples": [ "dashboard" ] + }, + "oldVal": { + "type": [ "String", "Number" ], + "desc": "Panel name from which transition is happening", + "examples": [ "dashboard" ] + } + } + }, + + "transition": { + "desc": "Emitted after component transitioned to a new panel", + "params": { + "newVal": { + "type": [ "String", "Number" ], + "desc": "Panel name towards transition has occurred", + "examples": [ "dashboard" ] + }, + "oldVal": { + "type": [ "String", "Number" ], + "desc": "Panel name from which transition has happened", + "examples": [ "dashboard" ] + } + } + } + }, + + "methods": { + "next": { + "desc": "Go to next panel" + }, + + "previous": { + "desc": "Go to previous panel" + }, + + "goTo": { + "desc": "Go to specific panel", + "params": { + "panelName": { + "type": [ "String", "Number" ], + "desc": "Panel's name, which may be a String or Number; Number does not refers to panel index, but to its name, which may be an Integer", + "required": true, + "examples": [ "dashboard" ] + } + } + } + } +} diff --git a/src/mixins/panel.js b/src/mixins/panel.js new file mode 100644 index 00000000000..d0adf23cd98 --- /dev/null +++ b/src/mixins/panel.js @@ -0,0 +1,278 @@ +import Vue from 'vue' + +import { onTransitionHideScroll } from '../mixins/transition' + +import TouchSwipe from '../directives/TouchSwipe.js' + +import ListenersMixin from './listeners.js' + +import { stop } from '../utils/event.js' +import { slot } from '../utils/private/slot.js' +import cache, { cacheWithFn } from '../utils/private/cache.js' + +function getPanelWrapper (h) { + return h('div', { + key: 'stop', + staticClass: 'q-panel scroll', + // stop propagation of content emitted @input + // which would tamper with Panel's model + on: cache(this, 'stop', { input: stop }) + }, slot(this, 'default')) +} + +const PanelWrapper = Vue.extend({ + render: getPanelWrapper +}) + +export const PanelParentMixin = { + mixins: [ ListenersMixin ], + + directives: { + TouchSwipe + }, + + props: { + value: { + required: true + }, + + animated: Boolean, + infinite: Boolean, + swipeable: Boolean, + vertical: Boolean, + + transitionPrev: String, + transitionNext: String, + + keepAlive: Boolean, + keepAliveInclude: [ String, Array, RegExp ], + keepAliveExclude: [ String, Array, RegExp ], + keepAliveMax: Number + }, + + data () { + return { + panelIndex: null, + panelTransition: null + } + }, + + computed: { + panelDirectives () { + if (this.swipeable === true) { + return [{ + name: 'touch-swipe', + value: this.__swipe, + modifiers: { + horizontal: this.vertical !== true, + vertical: this.vertical, + mouse: true + } + }] + } + }, + + contentKey () { + return typeof this.value === 'string' || typeof this.value === 'number' + ? this.value + : String(this.value) + }, + + transitionPrevComputed () { + return this.transitionPrev || `slide-${this.vertical === true ? 'down' : 'right'}` + }, + + transitionNextComputed () { + return this.transitionNext || `slide-${this.vertical === true ? 'up' : 'left'}` + }, + + keepAliveProps () { + return { + include: this.keepAliveInclude, + exclude: this.keepAliveExclude, + max: this.keepAliveMax + } + }, + + needsUniqueWrapper () { + return this.keepAliveInclude !== void 0 || + this.keepAliveExclude !== void 0 + } + }, + + watch: { + value (newVal, oldVal) { + const index = this.__isValidPanelName(newVal) === true + ? this.__getPanelIndex(newVal) + : -1 + + if (this.__forcedPanelTransition !== true) { + this.__updatePanelTransition( + index === -1 ? 0 : (index < this.__getPanelIndex(oldVal) ? -1 : 1) + ) + } + + if (this.panelIndex !== index) { + this.panelIndex = index + this.$emit('before-transition', newVal, oldVal) + this.$nextTick(() => { + this.$emit('transition', newVal, oldVal) + }) + } + } + }, + + methods: { + next () { + this.__go(1) + }, + + previous () { + this.__go(-1) + }, + + goTo (name) { + this.$emit('input', name) + }, + + __isValidPanelName (name) { + return name !== void 0 && name !== null && name !== '' + }, + + __getPanelIndex (name) { + return this.panels.findIndex(panel => { + const opt = panel.componentOptions.propsData + return opt.name === name && + opt.disable !== '' && + opt.disable !== true + }) + }, + + __getEnabledPanels () { + return this.panels.filter(panel => { + const opt = panel.componentOptions.propsData + return opt.disable !== '' && opt.disable !== true + }) + }, + + __updatePanelTransition (direction) { + const val = direction !== 0 && this.animated === true && this.panelIndex !== -1 + ? 'q-transition--' + (direction === -1 ? this.transitionPrevComputed : this.transitionNextComputed) + : null + + if (this.panelTransition !== val) { + this.panelTransition = val + } + }, + + __go (direction, startIndex = this.panelIndex) { + let index = startIndex + direction + const slots = this.panels + + while (index > -1 && index < slots.length) { + const opt = slots[index].componentOptions + + if ( + opt !== void 0 && + opt.propsData.disable !== '' && + opt.propsData.disable !== true + ) { + this.__updatePanelTransition(direction) + this.__forcedPanelTransition = true + this.$emit('input', slots[index].componentOptions.propsData.name) + setTimeout(() => { + this.__forcedPanelTransition = false + }) + return + } + + index += direction + } + + if (this.infinite === true && slots.length > 0 && startIndex !== -1 && startIndex !== slots.length) { + this.__go(direction, direction === -1 ? slots.length : -1) + } + }, + + __swipe (evt) { + const dir = this.vertical === true ? 'up' : 'left' + this.__go((this.$q.lang.rtl === true ? -1 : 1) * (evt.direction === dir ? 1 : -1)) + }, + + __updatePanelIndex () { + const index = this.__getPanelIndex(this.value) + + if (this.panelIndex !== index) { + this.panelIndex = index + } + + return true + }, + + __getPanelContent (h) { + if (this.panels.length === 0) { + return + } + + const panel = this.__isValidPanelName(this.value) && + this.__updatePanelIndex() && + this.panels[this.panelIndex] + + const content = this.keepAlive === true + ? [ + h('keep-alive', { props: this.keepAliveProps }, [ + h( + this.needsUniqueWrapper === true + ? cacheWithFn(this, this.contentKey, () => Vue.extend({ + name: this.contentKey, + render: getPanelWrapper + })) + : PanelWrapper, + { key: this.contentKey }, + [ panel ] + ) + ]) + ] + : [ + h('div', { + staticClass: 'q-panel scroll', + key: this.contentKey, + // stop propagation of content emitted @input + // which would tamper with Panel's model + on: cache(this, 'stop', { input: stop }) + }, [ panel ]) + ] + + return this.animated === true + ? [ + h('transition', { + props: { name: this.panelTransition }, + on: onTransitionHideScroll + }, content) + ] + : content + } + }, + + render (h) { + this.panels = slot(this, 'default', []).filter( + panel => panel !== void 0 && + panel.componentOptions !== void 0 && + panel.componentOptions.propsData !== void 0 && + this.__isValidPanelName(panel.componentOptions.propsData.name) + ) + + return this.__renderPanels(h) + } +} + +export const PanelChildMixin = { + mixins: [ ListenersMixin ], + + props: { + name: { + required: true + }, + disable: Boolean + } +} diff --git a/src/mixins/panel.sass b/src/mixins/panel.sass new file mode 100644 index 00000000000..e5c55cc7403 --- /dev/null +++ b/src/mixins/panel.sass @@ -0,0 +1,11 @@ +.q-panel + height: 100% + width: 100% + + > div + height: 100% + width: 100% + +.q-panel-parent + overflow: hidden + position: relative diff --git a/src/mixins/panel.styl b/src/mixins/panel.styl new file mode 100644 index 00000000000..8f2fb9d8e77 --- /dev/null +++ b/src/mixins/panel.styl @@ -0,0 +1,11 @@ +.q-panel + height 100% + width 100% + + > div + height 100% + width 100% + +.q-panel-parent + overflow hidden + position relative diff --git a/src/mixins/portal.js b/src/mixins/portal.js new file mode 100644 index 00000000000..11df0892136 --- /dev/null +++ b/src/mixins/portal.js @@ -0,0 +1,338 @@ +import Vue from 'vue' + +import { isSSR } from '../plugins/Platform.js' +import { getBodyFullscreenElement } from '../utils/dom.js' +import { FOCUSABLE_SELECTOR, changeFocusedElement, managedFocus } from '../utils/private/focus-manager.js' +import debounce from '../utils/debounce.js' + +const findProto = Array.prototype.find +const findIndexProto = Array.prototype.findIndex +const mapProto = Array.prototype.map + +export function closePortalMenus (vm, evt) { + do { + if (vm.$options.name === 'QMenu') { + vm.hide(evt) + + // is this a point of separation? + if (vm.separateClosePopup === true) { + return vm.$parent + } + } + else if (vm.__renderPortal !== void 0) { + // treat it as point of separation if parent is QPopupProxy + // (so mobile matches desktop behavior) + // and hide it too + if (vm.$parent !== void 0 && vm.$parent.$options.name === 'QPopupProxy') { + vm.hide(evt) + return vm.$parent + } + else { + return vm + } + } + vm = vm.$parent + } while ( + vm !== void 0 && ( + vm.$el.contains === void 0 || // IE polyfill does not work on comments + vm.$el.contains(evt.target) !== true + ) + ) +} + +export function closePortals (vm, evt, depth) { + while (depth !== 0 && vm !== void 0) { + if (vm.__renderPortal !== void 0) { + depth-- + + if (vm.$options.name === 'QMenu') { + vm = closePortalMenus(vm, evt) + continue + } + + vm.hide(evt) + } + + vm = vm.$parent + } +} + +function isOnGlobalDialog (vm) { + while (vm !== void 0) { + if (vm.$options.name === 'QGlobalDialog') { + return true + } + if (vm.$options.name === 'QDialog') { + return false + } + + vm = vm.$parent + } + return false +} + +export function getPortalsContainer (fullscreenElement) { + let container = findProto.call(fullscreenElement.children, el => el.matches && el.matches('.q-portal__container')) + + if (container === void 0) { + container = document.createElement('div') + container.classList.add('q-portal__container') + } + + if (container.parentElement !== fullscreenElement || container.nextElementSibling !== null) { + fullscreenElement.appendChild(container) + } + + return container +} + +const portalVms = new WeakMap() + +const Portal = { + inheritAttrs: false, + + props: { + contentClass: [ Array, String, Object ], + contentStyle: [ Array, String, Object ] + }, + + methods: { + focus (selector) { + const node = this.__getInnerNode() + + if (node !== void 0 && node.contains(document.activeElement) !== true) { + let autofocusNode = null + + if (selector !== '') { + autofocusNode = node.querySelector(typeof selector === 'string' ? selector : '[autofocus][tabindex], [data-autofocus][tabindex]') || + node.querySelector(typeof selector === 'string' ? selector : '[autofocus] [tabindex], [data-autofocus] [tabindex]') || + node.querySelector(typeof selector === 'string' ? selector : '[autofocus], [data-autofocus]') + } + + if (autofocusNode !== null && typeof autofocusNode.focus === 'function') { + managedFocus(autofocusNode) + } + else { + const focusableElements = Array.prototype.slice.call(node.querySelectorAll(FOCUSABLE_SELECTOR)) + focusableElements.length > 0 && changeFocusedElement( + focusableElements, + focusableElements[0].classList.contains('q-key-group-navigation--ignore-focus') === true ? 1 : 0, + 1, + true + ) + } + } + }, + + __showPortal () { + if (this.$q.fullscreen !== void 0 && this.$q.fullscreen.isCapable === true) { + const append = () => { + if (this.__portal === void 0) { + return + } + + const + newParent = getBodyFullscreenElement(this.$q.fullscreen.activeEl), + oldContainer = this.__portal.$el.parentElement, + newContainer = getPortalsContainer(newParent) + + if ( + oldContainer !== newContainer && + (this.__onGlobalDialog === true || newParent.contains(this.$el) === true) + ) { + newContainer.appendChild(this.__portal.$el) + + if (oldContainer && oldContainer.parentElement !== document.body && oldContainer.children.length === 0) { + oldContainer.remove() + } + } + } + + this.unwatchFullscreen = this.$watch('$q.fullscreen.activeEl', debounce(append, 50)) + + if (this.__onGlobalDialog === false || this.$q.fullscreen.isActive === true) { + append() + } + } + else if (this.__portal !== void 0 && this.__onGlobalDialog === false) { + getPortalsContainer(document.body).appendChild(this.__portal.$el) + } + }, + + __hidePortal () { + if (this.__portal !== void 0) { + if (this.unwatchFullscreen !== void 0) { + this.unwatchFullscreen() + this.unwatchFullscreen = void 0 + } + + if (this.__onGlobalDialog === false) { + this.__portal.$destroy() + this.__portal.$el.remove() + } + + const container = this.__portal.$el.parentElement + if (container && container.parentElement !== document.body && container.children.length === 0) { + container.remove() + } + + this.__portal = void 0 + } + }, + + __preparePortal () { + if (this.__portal === void 0) { + if (this.__onGlobalDialog === true) { + portalVms.set(this.$el, this) + } + + this.__portal = this.__onGlobalDialog === true + ? { + $el: this.$el, + $refs: this.$refs + } + : new Vue({ + name: 'QPortal', + parent: this, + + inheritAttrs: false, + + render: h => { + this.$nextTick(() => { + portalVms.set(this.__portal.$el, this) + }) + + return this.__renderPortal(h) + }, + + components: this.$options.components, + directives: this.$options.directives + }).$mount() + } + }, + + __getInnerNode () { + return this.__portal !== void 0 && this.__portal.$refs !== void 0 + ? this.__portal.$refs.inner + : void 0 + }, + + __focusCyclePortal (hiding) { + if (this.__portal === void 0 || document.body.contains(this.__portal.$el) !== true) { + return + } + + const portals = this.__portal.$el.parentElement.children + const { activeElement } = document + const activePortalIndex = activeElement + ? findIndexProto.call(portals, el => typeof el.contains === 'function' && el.contains(activeElement)) + : -1 + + // current focus is not in a portal + if (activePortalIndex < 0) { + // we are not refocusing because portal is hiding + if (hiding !== true) { + // we change the element that should receive focus when the bottom-most portal is closed + if (activeElement) { + const firstVm = portalVms.get(portals[0]) + firstVm && (firstVm.__refocusTarget = activeElement) + } + + // we focus the top-most portal (we are here from ESC so this is top-most) + this.focus() + } + return + } + + const focusedVm = portalVms.get(portals[activePortalIndex]) + + // we are hiding and the focus is in a portal that has refocusTarget in our portal + if (hiding === true) { + const childVms = mapProto + .call(portals, el => portalVms.get(el)) + .filter(vm => vm && this.__portal.$el.contains(vm.__refocusTarget) === true) + + if (childVms.length > 0) { + childVms.forEach(vm => { + vm.__refocusTarget = this.__refocusTarget + }) + } + + if (childVms.indexOf(focusedVm) > -1) { + return + } + } + + const activeVm = hiding === true + ? this + : focusedVm || this + const refocusTarget = activeVm.__refocusTarget + + // we are focusing another portal if our portal + // is not top-most or it is not hiding or it is not modal + if (activeVm !== this || hiding !== true || activeVm.seamless !== false) { + // if active portal is modal we focus the top-most portal + if (activeVm.seamless === false) { + this.focus() + return + } + + if (activePortalIndex > 0) { + const prevEl = portals[activePortalIndex - 1] + const prevVm = portalVms.get(prevEl) + + // if we have a portal below the active one + // and we are not hiding or we are modal + // and the refocusTarget is not in the portal below + // we focus the portal below (if refocusTarget is in that portal it will be focused below) + if ( + prevVm && + (hiding !== true || prevVm.seamless === false) && + ( + [ null, void 0, document.body ].indexOf(refocusTarget) !== -1 || + prevEl.contains(refocusTarget) === false + ) + ) { + prevVm.focus() + return + } + } + } + + if ([ null, void 0, document.body ].indexOf(refocusTarget) === -1 && document.body.contains(refocusTarget) === true) { + managedFocus(refocusTarget) + } + else if (hiding !== true) { + const { body } = document + const hasTabindex = body.hasAttribute('tabindex') + hasTabindex === false && body.setAttribute('tabindex', -1) + body.focus() + hasTabindex === false && this.$nextTick(() => { + body && body.removeAttribute('tabindex') + }) + } + } + }, + + render (h) { + if (this.__onGlobalDialog === true) { + return this.__renderPortal(h) + } + + if (this.__portal !== void 0) { + this.__portal.$forceUpdate() + } + }, + + beforeDestroy () { + this.__hidePortal() + } +} + +if (isSSR === false) { + Portal.created = function () { + this.__onGlobalDialog = isOnGlobalDialog(this.$parent) + } +} + +export default Portal diff --git a/src/mixins/portal.json b/src/mixins/portal.json new file mode 100644 index 00000000000..d2083faf372 --- /dev/null +++ b/src/mixins/portal.json @@ -0,0 +1,23 @@ +{ + "props": { + "content-class": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the content", + "examples": [ + "my-special-class", + ":content-class=\"{ 'my-special-class': }\"" + ], + "category": "style" + }, + + "content-style": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the content", + "examples": [ + "background-color: #ff0000", + ":content-style=\"{ color: '#ff0000' }\"" + ], + "category": "style" + } + } +} diff --git a/src/mixins/prevent-scroll-ios.md b/src/mixins/prevent-scroll-ios.md new file mode 100644 index 00000000000..39bcea621f2 --- /dev/null +++ b/src/mixins/prevent-scroll-ios.md @@ -0,0 +1,58 @@ +# iOS 15 scrolling/overflow details + +## Inputs + +``` +{ innerHight, visualViewport } = window +{ scrollTop, clientHeight } = document.scrollingElement || document.documentElement +viewportHeight = Math.ceil(visualViewport.height * visualViewport.scale) +``` + +## Findings + +### If `dialog` is `not present`: + +- `clientHeight` >= `innerHight` => bar visible || bar force bottom hide +- `clientHeight` < `innerHight` => bar scroll hide || bar top force hide + +### If `dialog` is `present`: + +- `clientHeight` >= (`scrollTop` + `innerHight`) => bar visible || bar bottom force hide +- `clientHeight` < (`scrollTop` + `innerHight`) => bar scroll hide || bar top force hide +- `scrollTop` + `innerHight` is constant (except overscroll) + +### If `innerHight` === `viewportHeight`: + +- `clientHeight` <= `innerHight` => no keyboard +- `clientHeight` > `innerHight` => dialog overscroll + +## Sample data + +| Mode | scrollTop | clientHeight | innerHeight | viewportHeight | Meaning | +| ---------------------------------------- | --------: | -----------: | ----------: | -------------: | ---------- | +| Without input - bar bottom - visible | 0 | 664 | 664 | 664 | top | +| Without input - bar bottom - scroll hide | 0 | 664 | 745 | 745 | top | +| Without input - bar bottom - force hide | 0 | 745 | 745 | 745 | top | +| Without input - bar top - force hide | 0 | 733 | 780 | 780 | top | +| Dialog page scroll | 0 | 664 | 664 | 664 | always | +| With input - bar bottom - visible | 2207 | 664 | 664 | 664 | no dialog | +| ^ | 0 | 664 | 664 | 440 | top | +| ^ | 221 | 664 | 443 | 440 | bottom | +| ^ | 355 | 664 | 309 | 309 | overscroll | +| With input - bar bottom - scroll hide | 2271 | 664 | 745 | 745 | no dialog | +| ^ | 0 | 664 | 745 | 440 | top | +| ^ | 303 | 664 | 442 | 440 | bottom | +| ^ | 355 | 664 | 390 | 390 | overscroll | +| With input - bar bottom - force hide | 2034 | 745 | 745 | 745 | no dialog | +| ^ | 0 | 745 | 745 | 440 | top | +| ^ | 303 | 745 | 442 | 440 | bottom | +| ^ | 355 | 745 | 390 | 390 | overscroll | +| With input - bar top - visible | 0 | 663 | 663 | 412 | top | +| ^ | 249 | 663 | 414 | 412 | bottom | +| ^ | 333 | 663 | 330 | 330 | overscroll | +| With input - bar top - scroll hide | 0 | 663 | 780 | 445 | top | +| ^ | 333 | 663 | 447 | 445 | bottom | +| ^ | 334 | 663 | 445 | 445 | overscroll | +| With input - bar top - force hide | 0 | 733 | 780 | 445 | top | +| ^ | 333 | 733 | 447 | 445 | bottom | +| ^ | 334 | 733 | 445 | 445 | overscroll | diff --git a/src/mixins/prevent-scroll.js b/src/mixins/prevent-scroll.js new file mode 100644 index 00000000000..e594ba47a38 --- /dev/null +++ b/src/mixins/prevent-scroll.js @@ -0,0 +1,238 @@ +import { listenOpts } from '../utils/event.js' +import { getScrollbarWidth, triggerIsScrollable } from '../utils/scroll.js' +import { client } from '../plugins/Platform.js' + +const { passive } = listenOpts + +let + registered = 0, + state = {}, + iosScrollActive = false, + applyTimer, + orientationTimer, + closeTimer + +function iosScroll () { + if (iosScrollActive === false) { + return + } + + const { innerHeight, visualViewport } = window + const { clientHeight } = document.documentElement + const diff = innerHeight - Math.ceil(visualViewport.height * visualViewport.scale) + + if ( + diff === 0 && + clientHeight > innerHeight + ) { + document.documentElement.scrollTop -= 3 + } + else { + if (diff > 1 && diff < 4) { + document.documentElement.scrollTop += diff - 1 + } + + iosScrollActive = false + } +} + +function onIosScroll () { + iosScrollActive !== false && cancelAnimationFrame(iosScrollActive) + iosScrollActive = requestAnimationFrame(iosScroll) +} + +function onMobileRotate () { + clearTimeout(orientationTimer) + + orientationTimer = setTimeout(() => { + requestAnimationFrame(() => { + const { documentElement, body } = document + + documentElement.style.height = `${window.innerHeight}px` + + body.style.height = `${documentElement.clientHeight + state.scrollTop}px` + }) + }, 200) +} + +function apply (action, rtl) { + const + { documentElement, body } = document, + { visualViewport } = window + + clearTimeout(applyTimer) + clearTimeout(orientationTimer) + + if (action === 'add') { + document.qScrollPrevented = true + + const scrollbarSize = getScrollbarWidth() + + requestAnimationFrame(() => { + const { innerHeight, innerWidth } = window + const { overflowX, overflowY, backgroundColor } = window.getComputedStyle(body) + + state = { + htmlStyleBefore: documentElement.style.cssText, + bodyStyleBefore: body.style.cssText, + htmlStyleAfter: '', + bodyStyleAfter: '', + scrollLeft: documentElement.scrollLeft, + scrollTop: documentElement.scrollTop + } + + if (client.is.mobile === true) { + documentElement.style.height = `${innerHeight}px` + + body.style.width = `calc(100vw + ${Math.abs(state.scrollLeft)}px)` + body.style.height = `${innerHeight + state.scrollTop}px` + + window.addEventListener('orientationchange', onMobileRotate, passive) + if (visualViewport !== void 0 && client.is.ios === true) { + applyTimer = setTimeout(() => { + visualViewport.addEventListener('scroll', onIosScroll, passive) + }, 500) + } + } + else { + const + { scrollWidth, scrollHeight } = body, + scrollbarSizeHoriz = overflowX !== 'hidden' && (overflowX === 'scroll' || scrollWidth > innerWidth) + ? scrollbarSize + : 0, + scrollbarSizeVert = overflowY !== 'hidden' && (overflowY === 'scroll' || scrollHeight > innerHeight) + ? scrollbarSize + : 0 + + if (scrollbarSizeVert > 0 || scrollbarSizeHoriz > 0) { + if (scrollbarSizeVert > 0) { + documentElement.style.width = `calc(100vw - ${scrollbarSizeVert}px)` + + if (rtl === true) { + documentElement.style.marginRight = `${scrollbarSizeVert}px` + } + } + if (scrollbarSizeHoriz > 0) { + documentElement.style.height = `calc(100vh - ${scrollbarSizeHoriz}px)` + } + } + + body.style.width = `calc(100vw + ${Math.abs(state.scrollLeft) - scrollbarSizeVert}px)` + body.style.height = `calc(100vh + ${state.scrollTop - scrollbarSizeHoriz}px)` + } + + body.style.left = `${-state.scrollLeft}px` + body.style.top = `${-state.scrollTop}px` + body.style['padding' + (rtl === true ? 'Left' : 'Right')] = `${Math.abs(state.scrollLeft)}px` + + documentElement.style.backgroundColor = backgroundColor || 'rgba(128, 128, 128, 0.01)' + documentElement.classList.add('q-body--prevent-scroll') + + window.scrollTo(0, 0) + + requestAnimationFrame(() => { + if (body.scrollTop !== 0) { + body.scrollTop = 0 + } + }) + + documentElement.style.setProperty('--q-scroll-lock-left', `${-state.scrollLeft}px`) + const els = document.querySelectorAll('.q-menu__container, .q-tooltip__container') + for (let i = els.length - 1; i >= 0; i--) { + els[i].style.position === 'absolute' && els[i].classList.add('q-body--scroll-locked') + } + + state.htmlStyleAfter = documentElement.style.cssText.split(';').filter(s => s.trim().length > 0) + state.bodyStyleAfter = body.style.cssText.split(';').filter(s => s.trim().length > 0) + }) + } + else { + if (client.is.mobile === true) { + window.removeEventListener('orientationchange', onMobileRotate, passive) + if (visualViewport !== void 0 && client.is.ios === true) { + visualViewport.removeEventListener('scroll', onIosScroll, passive) + iosScrollActive = false + } + } + + requestAnimationFrame(() => { + documentElement.classList.remove('q-body--prevent-scroll') + + const + htmlStyleAfter = state.htmlStyleAfter.reduce((acc, s) => acc.replace(s + ';', ''), documentElement.style.cssText), + bodyStyleAfter = state.bodyStyleAfter.reduce((acc, s) => acc.replace(s + ';', ''), body.style.cssText) + + documentElement.style.cssText = state.htmlStyleBefore + htmlStyleAfter + body.style.cssText = state.bodyStyleBefore + bodyStyleAfter + + const els = document.querySelectorAll('.q-body--scroll-locked') + for (let i = els.length - 1; i >= 0; i--) { + els[i].classList.remove('q-body--scroll-locked') + } + + window.scrollTo(state.scrollLeft, state.scrollTop) + + applyTimer = setTimeout(() => { + document.qScrollPrevented = false + triggerIsScrollable() + }, 50) + }) + } +} + +export function preventScroll (state, rtl) { + let action = 'add' + + if (state === true) { + registered++ + + if (closeTimer !== void 0) { + clearTimeout(closeTimer) + closeTimer = void 0 + return + } + + if (registered > 1) { + return + } + } + else { + if (registered === 0) { + return + } + + registered-- + + if (registered > 0) { + return + } + + action = 'remove' + + if (client.is.ios === true && client.is.nativeMobile === true) { + clearTimeout(closeTimer) + + closeTimer = setTimeout(() => { + apply(action, rtl) + closeTimer = void 0 + }, 100) + return + } + } + + apply(action, rtl) +} + +export default { + methods: { + __preventScroll (state) { + if ( + state !== this.preventedScroll && + (this.preventedScroll !== void 0 || state === true) + ) { + this.preventedScroll = state + preventScroll(state, this.$q.lang.rtl) + } + } + } +} diff --git a/src/mixins/ratio.js b/src/mixins/ratio.js new file mode 100644 index 00000000000..654eaed2b93 --- /dev/null +++ b/src/mixins/ratio.js @@ -0,0 +1,15 @@ +export default { + props: { + ratio: [ String, Number ] + }, + + computed: { + ratioStyle () { + const ratio = this.ratio || this.naturalRatio + + if (ratio !== void 0) { + return { paddingBottom: `${100 / ratio}%` } + } + } + } +} diff --git a/src/mixins/ratio.json b/src/mixins/ratio.json new file mode 100644 index 00000000000..54fbe071cfd --- /dev/null +++ b/src/mixins/ratio.json @@ -0,0 +1,14 @@ +{ + "props": { + "ratio": { + "type": [ "String", "Number" ], + "desc": "Aspect ratio for the content; If value is a String, then avoid using a computational statement (like '16/9') and instead specify the String value of the result directly (eg. '1.7777')", + "examples": [ + ":ratio=\"4/3\"", + ":ratio=\"16/9\"", + "ratio=\"1\"" + ], + "category": "style" + } + } +} diff --git a/src/mixins/refocus-target.js b/src/mixins/refocus-target.js new file mode 100644 index 00000000000..a610bb154db --- /dev/null +++ b/src/mixins/refocus-target.js @@ -0,0 +1,25 @@ +export default { + computed: { + __refocusTargetEl () { + if (this.disable !== true) { + return this.$createElement('span', { + ref: 'refocusTarget', + staticClass: 'no-outline', + attrs: { tabindex: -1 } + }) + } + } + }, + + methods: { + __refocusTarget (e) { + if (this.$el.contains(document.activeElement) === true) { + const el = this.$q.interaction.isPointer === true + ? this.$refs.refocusTarget + : this.$el + + el !== void 0 && document.activeElement !== el && el.focus() + } + } + } +} diff --git a/src/mixins/ripple.js b/src/mixins/ripple.js new file mode 100644 index 00000000000..63d3b2cc847 --- /dev/null +++ b/src/mixins/ripple.js @@ -0,0 +1,14 @@ +import Ripple from '../directives/Ripple.js' + +export default { + directives: { + Ripple + }, + + props: { + ripple: { + type: [Boolean, Object], + default: true + } + } +} diff --git a/src/mixins/ripple.json b/src/mixins/ripple.json new file mode 100644 index 00000000000..b3c6d2a8a66 --- /dev/null +++ b/src/mixins/ripple.json @@ -0,0 +1,11 @@ +{ + "props": { + "ripple": { + "type": [ "Boolean", "Object" ], + "desc": "Configure material ripple (disable it by setting it to 'false' or supply a config object)", + "default": true, + "examples": [ false, "{ early: true, center: true, color: 'teal', keyCodes: [] }" ], + "category": "style" + } + } +} diff --git a/src/mixins/router-link.js b/src/mixins/router-link.js new file mode 100644 index 00000000000..344e6875206 --- /dev/null +++ b/src/mixins/router-link.js @@ -0,0 +1,231 @@ +const trailingSlashRE = /\/?$/ + +function equals (current, target) { + if (Object.keys(current).length !== Object.keys(target).length) { + return false + } + + // route query and params are strings when read from URL + for (const key in target) { + if (!(key in current) || String(current[key]) !== String(target[key])) { + return false + } + } + return true +} + +function includes (current, target) { + for (const key in target) { + if (!(key in current)) { + return false + } + } + return true +} + +function isSameRoute (current, target) { + if (!target) { + return false + } + + if (current.path && target.path) { + return ( + current.path.replace(trailingSlashRE, '') === target.path.replace(trailingSlashRE, '') && + current.hash === target.hash && + equals(current.query, target.query) + ) + } + + return typeof current.name === 'string' && + current.name === target.name && + current.hash === target.hash && + equals(current.query, target.query) === true && + equals(current.params, target.params) === true +} + +function isIncludedRoute (current, target) { + return current.path.replace(trailingSlashRE, '/').indexOf(target.path.replace(trailingSlashRE, '/')) === 0 && + (typeof target.hash !== 'string' || target.hash.length < 2 || current.hash === target.hash) && + includes(current.query, target.query) === true +} + +export const routerLinkProps = { + // router-link + to: [String, Object], + exact: Boolean, + append: Boolean, + replace: Boolean, + activeClass: { + type: String, + default: 'q-router-link--active' + }, + exactActiveClass: { + type: String, + default: 'q-router-link--exact-active' + }, + + // regular link + href: String, + target: String, + + // state + disable: Boolean +} + +// external props: type, tag +// external: fallbackTag + +export default { + props: routerLinkProps, + + computed: { + hasHrefLink () { + return this.disable !== true && this.href !== void 0 + }, + + // beware, it gets overwritten in QRouteTab + hasRouterLinkProps () { + return this.$router !== void 0 && + this.disable !== true && + this.hasHrefLink !== true && + this.to !== void 0 && this.to !== null && this.to !== '' + }, + + resolvedLink () { + return this.hasRouterLinkProps === true + ? this.__getLink(this.to, this.append) + : null + }, + + hasRouterLink () { + return this.resolvedLink !== null + }, + + hasLink () { + return this.hasHrefLink === true || this.hasRouterLink === true + }, + + linkTag () { + return this.type === 'a' || this.hasLink === true + ? 'a' + : (this.tag || this.fallbackTag || 'div') + }, + + linkAttrs () { + return this.hasHrefLink === true + ? { + href: this.href, + target: this.target + } + : ( + this.hasRouterLink === true + ? { + href: this.resolvedLink.href, + target: this.target + } + : {} + ) + }, + + linkIsActive () { + return this.hasRouterLink === true && + isIncludedRoute(this.$route, this.resolvedLink.route) + }, + + linkIsExactActive () { + return this.hasRouterLink === true && + isSameRoute(this.$route, this.resolvedLink.route) + }, + + linkClass () { + return this.hasRouterLink === true + ? ( + this.linkIsExactActive === true + ? ` ${this.exactActiveClass} ${this.activeClass}` + : ( + this.exact === true + ? '' + : (this.linkIsActive === true ? ` ${this.activeClass}` : '') + ) + ) + : '' + } + }, + + methods: { + __getLink (to, append) { + // we protect from accessing this.$route without + // actually needing it so that we won't trigger + // unnecessary updates in computed props using this method + try { + return append === true + ? this.$router.resolve(to, this.$route, true) + : this.$router.resolve(to) + } + catch (_) {} + + return null + }, + + /** + * @returns Promise | Promise + */ + __navigateToRouterLink ( + e, + { returnRouterError, to, replace = this.replace, append } = {} + ) { + if (this.disable === true) { + // ensure native navigation is prevented in all cases, + // like in QRouteTab where hasRouterLinkProps does not care about disable state + e.preventDefault() + return Promise.resolve(false) + } + + if ( + // don't redirect with control keys; + // should match RouterLink from Vue Router + e.metaKey || e.altKey || e.ctrlKey || e.shiftKey || + + // don't redirect on right click + (e.button !== void 0 && e.button !== 0) || + + // don't redirect if it should open in a new window + this.target === '_blank' + ) { + return Promise.resolve(false) + } + + e.preventDefault() + + const resolvedLink = to === void 0 + ? this.resolvedLink + : this.__getLink(to, append) + + if (resolvedLink === null) { + return Promise[returnRouterError === true ? 'reject' : 'resolve'](false) + } + + const promise = this.$router[replace === true ? 'replace' : 'push'](resolvedLink.location) + + return returnRouterError === true + ? promise + : promise.catch(() => {}) + }, + + __navigateOnClick (e) { + if (this.hasRouterLink === true) { + const go = opts => this.__navigateToRouterLink(e, opts) + + this.$emit('click', e, go) + + // for backward compatibility + e.navigate === false && e.preventDefault() + + e.defaultPrevented !== true && go() + } + else { + this.$emit('click', e) + } + } + } +} diff --git a/src/mixins/router-link.json b/src/mixins/router-link.json new file mode 100644 index 00000000000..e0d0ef05ca9 --- /dev/null +++ b/src/mixins/router-link.json @@ -0,0 +1,65 @@ +{ + "props": { + "to": { + "type": [ "String", "Object" ], + "desc": "Equivalent to Vue Router 'to' property; Superseeded by 'href' prop if used", + "examples": [ + "/home/dashboard", + ":to=\"{ name: 'my-route-name' }\"" + ], + "category": "navigation" + }, + + "exact": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'exact' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + + "append": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'append' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + + "replace": { + "type": "Boolean", + "desc": "Equivalent to Vue Router 'replace' property; Superseeded by 'href' prop if used", + "category": "navigation" + }, + + "active-class": { + "type": "String", + "desc": "Equivalent to Vue Router 'active-class' property", + "examples": [ "my-active-class" ], + "category": "navigation" + }, + + "exact-active-class": { + "type": "String", + "desc": "Equivalent to Vue Router 'active-class' property", + "examples": [ "my-exact-active-class" ], + "category": "navigation" + }, + + "href": { + "type": "String", + "desc": "Native link href attribute; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ "http://quasar.dev" ], + "category": "navigation", + "addedIn": "v1.17" + }, + + "target": { + "type": "String", + "desc": "Native link target attribute; Use it only along with 'href' prop; Has priority over the 'to'/'exact'/'replace' props", + "examples": [ "_blank", "_self", "_parent", "_top" ], + "category": "navigation", + "addedIn": "v1.17" + }, + + "disable": { + "extends": "disable" + } + } +} diff --git a/src/mixins/size.js b/src/mixins/size.js new file mode 100644 index 00000000000..182041d2f75 --- /dev/null +++ b/src/mixins/size.js @@ -0,0 +1,25 @@ +export const sizes = { + xs: 18, + sm: 24, + md: 32, + lg: 38, + xl: 46 +} + +export function getSizeMixin (sizes) { + return { + props: { + size: String + }, + + computed: { + sizeStyle () { + if (this.size !== void 0) { + return { fontSize: this.size in sizes ? `${sizes[this.size]}px` : this.size } + } + } + } + } +} + +export default getSizeMixin(sizes) diff --git a/src/mixins/size.json b/src/mixins/size.json new file mode 100644 index 00000000000..180ca8b9cc8 --- /dev/null +++ b/src/mixins/size.json @@ -0,0 +1,10 @@ +{ + "props": { + "size": { + "type": "String", + "desc": "Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl)", + "examples": [ "16px", "2rem", "xs", "md" ], + "category": "style" + } + } +} diff --git a/src/mixins/tag.js b/src/mixins/tag.js new file mode 100644 index 00000000000..ad11aea5046 --- /dev/null +++ b/src/mixins/tag.js @@ -0,0 +1,8 @@ +export default { + props: { + tag: { + type: String, + default: 'div' + } + } +} diff --git a/src/mixins/tag.json b/src/mixins/tag.json new file mode 100644 index 00000000000..860eab3174d --- /dev/null +++ b/src/mixins/tag.json @@ -0,0 +1,10 @@ +{ + "props": { + "tag": { + "type": "String", + "desc": "HTML tag to render", + "default": "div", + "category": "content" + } + } +} diff --git a/src/mixins/timeout.js b/src/mixins/timeout.js new file mode 100644 index 00000000000..190eb139179 --- /dev/null +++ b/src/mixins/timeout.js @@ -0,0 +1,68 @@ +export default { + created () { + this.__tickFnList = [] + this.__timeoutFnList = [] + }, + + deactivated () { + this.__tickFnList.forEach(tick => { tick.removeTick() }) + this.__timeoutFnList.forEach(tick => { tick.removeTimeout() }) + }, + + beforeDestroy () { + this.__tickFnList.forEach(tick => { tick.removeTick() }) + this.__tickFnList = void 0 + + this.__timeoutFnList.forEach(tick => { tick.removeTimeout() }) + this.__timeoutFnList = void 0 + }, + + methods: { + __useTick (registerFnName, removeFnName) { + const tick = { + removeTick () { + tick.fn = void 0 + }, + + registerTick: fn => { + tick.fn = fn + + this.$nextTick(() => { + if (tick.fn === fn) { + // we also check if VM is destroyed, since if it + // got to trigger one nextTick() we cannot stop it + this._isDestroyed === false && tick.fn() + tick.fn = void 0 + } + }) + } + } + + this.__tickFnList.push(tick) + + this[registerFnName] = tick.registerTick + removeFnName !== void 0 && (this[removeFnName] = tick.removeTick) + }, + + __useTimeout (registerFnName, removeFnName) { + const timeout = { + removeTimeout () { + clearTimeout(timeout.timer) + }, + + registerTimeout: (fn, delay) => { + clearTimeout(timeout.timer) + + if (this._isDestroyed === false) { + timeout.timer = setTimeout(fn, delay) + } + } + } + + this.__timeoutFnList.push(timeout) + + this[registerFnName] = timeout.registerTimeout + removeFnName !== void 0 && (this[removeFnName] = timeout.removeTimeout) + } + } +} diff --git a/src/mixins/transition.js b/src/mixins/transition.js new file mode 100644 index 00000000000..ee94529d6db --- /dev/null +++ b/src/mixins/transition.js @@ -0,0 +1,54 @@ +const panelParents = new WeakMap() + +function hideScroll (el) { + if (el !== null && el !== void 0) { + const parent = el.closest('.q-panel-parent') + panelParents.set(el, parent) + parent !== null && parent.classList.add('q-transition--hide-scroll') + } +} + +function restoreScroll (el) { + if (el !== null && el !== void 0) { + const parent = panelParents.get(el) || el.closest('.q-panel-parent') + parent !== null && parent.classList.remove('q-transition--hide-scroll') + } +} + +export const onTransitionHideScroll = { + 'before-leave': hideScroll, + 'after-leave': restoreScroll, + 'leave-cancelled': restoreScroll +} + +export default { + props: { + transitionShow: { + type: String, + default: 'fade' + }, + + transitionHide: { + type: String, + default: 'fade' + } + }, + + computed: { + transitionProps () { + const show = `q-transition--${this.transitionShow}` + const hide = `q-transition--${this.transitionHide}` + return { + enterClass: `${show}-enter`, + leaveClass: `${hide}-leave`, + appearClass: `${show}-appear`, + enterToClass: `${show}-enter-to`, + leaveToClass: `${hide}-leave-to`, + appearToClass: `${show}-appear-to`, + enterActiveClass: `${show}-enter-active`, + leaveActiveClass: `${hide}-leave-active`, + appearActiveClass: `${show}-appear-active` + } + } + } +} diff --git a/src/mixins/validate.js b/src/mixins/validate.js new file mode 100644 index 00000000000..efcab415a67 --- /dev/null +++ b/src/mixins/validate.js @@ -0,0 +1,239 @@ +import { testPattern } from '../utils/patterns.js' +import debounce from '../utils/debounce.js' + +const lazyRulesValues = [ true, false, 'ondemand' ] + +export default { + props: { + value: {}, + + error: { + type: Boolean, + default: null + }, + errorMessage: String, + noErrorIcon: Boolean, + + rules: Array, + reactiveRules: Boolean, + lazyRules: { + type: [ Boolean, String ], + validator: v => lazyRulesValues.includes(v) + } + }, + + data () { + return { + isDirty: null, + innerError: false, + innerErrorMessage: void 0 + } + }, + + watch: { + value () { + this.__validateIfNeeded() + }, + + disable (val) { + if (val === true) { + this.__resetValidation() + } + else { + this.__validateIfNeeded(true) + } + }, + + reactiveRules: { + handler (val) { + if (val === true) { + if (this.unwatchRules === void 0) { + this.unwatchRules = this.$watch('rules', () => { + this.__validateIfNeeded(true) + }) + } + } + else if (this.unwatchRules !== void 0) { + this.unwatchRules() + this.unwatchRules = void 0 + } + }, + immediate: true + }, + + focused (focused) { + if (focused === true) { + if (this.isDirty === null) { + this.isDirty = false + } + } + else if (this.isDirty === false) { + this.isDirty = true + + if ( + this.hasActiveRules === true && + this.lazyRules !== 'ondemand' && + // Don't re-trigger if it's already in progress; + // It might mean that focus switched to submit btn and + // QForm's submit() has been called already (ENTER key) + this.innerLoading === false + ) { + this.debouncedValidate() + } + } + }, + + hasError (invalid) { + const targetEl = document.getElementById(this.targetUid) + targetEl !== null && targetEl.setAttribute('aria-invalid', invalid === true) + } + }, + + computed: { + hasRules () { + return this.rules !== void 0 && + this.rules !== null && + this.rules.length > 0 + }, + + hasActiveRules () { + return this.disable !== true && this.hasRules === true + }, + + hasError () { + return this.error === true || this.innerError === true + }, + + computedErrorMessage () { + return typeof this.errorMessage === 'string' && this.errorMessage.length > 0 + ? this.errorMessage + : this.innerErrorMessage + } + }, + + created () { + this.debouncedValidate = debounce(this.validate, 0) + }, + + mounted () { + this.validateIndex = 0 + }, + + beforeDestroy () { + this.unwatchRules !== void 0 && this.unwatchRules() + this.debouncedValidate.cancel() + }, + + methods: { + resetValidation () { + this.isDirty = null + this.__resetValidation() + }, + + /* + * Return value + * - true (validation succeeded) + * - false (validation failed) + * - Promise (pending async validation) + */ + validate (val = this.value) { + if (this.hasActiveRules !== true) { + return true + } + + const index = ++this.validateIndex + + const setDirty = this.innerLoading !== true + ? () => this.isDirty !== true && (this.isDirty = true) + : () => {} + + const update = (err, msg) => { + err === true && setDirty() + + if (this.innerError !== err) { + this.innerError = err + } + + const m = msg || void 0 + + if (this.innerErrorMessage !== m) { + this.innerErrorMessage = m + } + + if (this.innerLoading !== false) { + this.innerLoading = false + } + } + + const promises = [] + + for (let i = 0; i < this.rules.length; i++) { + const rule = this.rules[i] + let res + + if (typeof rule === 'function') { + res = rule(val, testPattern) + } + else if (typeof rule === 'string' && testPattern[rule] !== void 0) { + res = testPattern[rule](val) + } + + if (res === false || typeof res === 'string') { + update(true, res) + return false + } + else if (res !== true && res !== void 0) { + promises.push(res) + } + } + + if (promises.length === 0) { + update(false) + return true + } + + if (this.innerLoading !== true) { + this.innerLoading = true + } + + return Promise.all(promises).then( + res => { + if (res === void 0 || Array.isArray(res) === false || res.length === 0) { + index === this.validateIndex && update(false) + return true + } + + const msg = res.find(r => r === false || typeof r === 'string') + index === this.validateIndex && update(msg !== void 0, msg) + return msg === void 0 + }, + e => { + if (index === this.validateIndex) { + console.error(e) + update(true) + } + + return false + } + ) + }, + + __resetValidation () { + this.debouncedValidate.cancel() + this.validateIndex++ + this.innerLoading = false + this.innerError = false + this.innerErrorMessage = void 0 + }, + + __validateIfNeeded (changedRules) { + if ( + this.hasActiveRules === true && + this.lazyRules !== 'ondemand' && + (this.isDirty === true || (this.lazyRules !== true && changedRules !== true)) + ) { + this.debouncedValidate() + } + } + } +} diff --git a/src/mixins/validate.json b/src/mixins/validate.json new file mode 100644 index 00000000000..7df78ce37b3 --- /dev/null +++ b/src/mixins/validate.json @@ -0,0 +1,72 @@ +{ + "props": { + "error": { + "type": "Boolean", + "desc": "Does field have validation errors?", + "category": "behavior" + }, + + "error-message": { + "type": "String", + "desc": "Validation error message (gets displayed only if 'error' is set to 'true')", + "examples": [ "Username must have at least 5 characters" ], + "category": "content" + }, + + "no-error-icon": { + "type": "Boolean", + "desc": "Hide error icon when there is an error", + "category": "content" + }, + + "rules": { + "type": "Array", + "desc": "Array of Functions/Strings; If String, then it must be a name of one of the embedded validation rules", + "examples": [ + ":rules=\"[ val => val.length <= 3 || 'Please use maximum 3 characters' ]\"", + ":rules=\"[ 'fulltime' ]\"", + ":rules=\"[ (val, rules) => rules.email(val) || 'Please enter a valid email address' ]\"" + ], + "category": "behavior" + }, + + "reactive-rules": { + "type": "Boolean", + "desc": "By default a change in the rules does not trigger a new validation until the model changes; If set to true then a change in the rules will trigger a validation; Has a performance penalty, so use it only when you really need it", + "category": "behavior", + "addedIn": "v1.11" + }, + + "lazy-rules": { + "type": [ "Boolean", "String" ], + "desc": "If set to boolean true then it checks validation status against the 'rules' only after field loses focus for first time; If set to 'ondemand' then it will trigger only when component's validate() method is manually called or when the wrapper QForm submits itself", + "values": [ "(Boolean) true", "(Boolean) false", "ondemand" ], + "category": "behavior" + } + }, + + "methods": { + "resetValidation": { + "desc": "Reset validation status" + }, + + "validate": { + "desc": "Trigger a validation", + "params": { + "value": { + "type": "Any", + "desc": "Optional value to validate against", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": [ "Boolean", "Promise" ], + "desc": "True/false if no async rules, otherwise a Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "true", + "validate().then(outcome => { ... })" + ] + } + } + } +} diff --git a/src/mixins/virtual-scroll.js b/src/mixins/virtual-scroll.js new file mode 100644 index 00000000000..4ac82ccfd71 --- /dev/null +++ b/src/mixins/virtual-scroll.js @@ -0,0 +1,779 @@ +import { rtlHasScrollBug } from '../utils/scroll.js' + +function scrollDebounce (fn) { + let timeoutWait + let throttleCounter = 0 + + const fnDebounced = () => { + timeoutWait = void 0 + throttleCounter = 0 + fn() + } + + function debounced () { + throttleCounter++ + clearTimeout(timeoutWait) + timeoutWait = setTimeout(fnDebounced, 200) + + if (throttleCounter > 50) { + throttleCounter = 0 + fn(true) + } + } + + debounced.cancel = () => { + clearTimeout(timeoutWait) + timeoutWait = void 0 + throttleCounter = 0 + } + + return debounced +} + +const aggBucketSize = 1000 + +const scrollToEdges = [ + 'start', + 'center', + 'end', + 'start-force', + 'center-force', + 'end-force' +] + +const filterProto = Array.prototype.filter + +function sumFn (acc, h) { + return acc + h +} + +function getScrollDetails ( + parent, + child, + beforeRef, + afterRef, + horizontal, + rtl, + stickyStart, + stickyEnd +) { + const + parentCalc = parent === window ? document.scrollingElement || document.documentElement : parent, + propElSize = horizontal === true ? 'offsetWidth' : 'offsetHeight', + details = { + scrollStart: 0, + scrollViewSize: -stickyStart - stickyEnd, + scrollMaxSize: 0, + offsetStart: -stickyStart, + offsetEnd: -stickyEnd + } + + if (horizontal === true) { + if (parent === window) { + details.scrollStart = window.pageXOffset || window.scrollX || document.body.scrollLeft || 0 + details.scrollViewSize += document.documentElement.clientWidth + } + else { + details.scrollStart = parentCalc.scrollLeft + details.scrollViewSize += parentCalc.clientWidth + } + details.scrollMaxSize = parentCalc.scrollWidth + + if (rtl === true) { + details.scrollStart = (rtlHasScrollBug() === true ? details.scrollMaxSize - details.scrollViewSize : 0) - details.scrollStart + } + } + else { + if (parent === window) { + details.scrollStart = window.pageYOffset || window.scrollY || document.body.scrollTop || 0 + details.scrollViewSize += document.documentElement.clientHeight + } + else { + details.scrollStart = parentCalc.scrollTop + details.scrollViewSize += parentCalc.clientHeight + } + details.scrollMaxSize = parentCalc.scrollHeight + } + + if (beforeRef !== void 0) { + for (let el = beforeRef.previousElementSibling; el !== null; el = el.previousElementSibling) { + if (el.classList.contains('q-virtual-scroll--skip') === false) { + details.offsetStart += el[propElSize] + } + } + } + if (afterRef !== void 0) { + for (let el = afterRef.nextElementSibling; el !== null; el = el.nextElementSibling) { + if (el.classList.contains('q-virtual-scroll--skip') === false) { + details.offsetEnd += el[propElSize] + } + } + } + + if (child !== parent) { + const + parentRect = parentCalc.getBoundingClientRect(), + childRect = child.getBoundingClientRect() + + if (horizontal === true) { + details.offsetStart += childRect.left - parentRect.left + details.offsetEnd -= childRect.width + } + else { + details.offsetStart += childRect.top - parentRect.top + details.offsetEnd -= childRect.height + } + + if (parent !== window) { + details.offsetStart += details.scrollStart + } + details.offsetEnd += details.scrollMaxSize - details.offsetStart + } + + return details +} + +function setScroll (parent, scroll, horizontal, rtl) { + if (scroll === 'end') { + scroll = (parent === window ? document.body : parent)[horizontal === true ? 'scrollWidth' : 'scrollHeight'] + } + + if (parent === window) { + if (horizontal === true) { + if (rtl === true) { + scroll = (rtlHasScrollBug() === true ? document.body.scrollWidth - document.documentElement.clientWidth : 0) - scroll + } + window.scrollTo(scroll, window.pageYOffset || window.scrollY || document.body.scrollTop || 0) + } + else { + window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, scroll) + } + } + else if (horizontal === true) { + if (rtl === true) { + scroll = (rtlHasScrollBug() === true ? parent.scrollWidth - parent.offsetWidth : 0) - scroll + } + parent.scrollLeft = scroll + } + else { + parent.scrollTop = scroll + } +} + +function sumSize (sizeAgg, size, from, to) { + if (from >= to) { return 0 } + + const + lastTo = size.length, + fromAgg = Math.floor(from / aggBucketSize), + toAgg = Math.floor((to - 1) / aggBucketSize) + 1 + + let total = sizeAgg.slice(fromAgg, toAgg).reduce(sumFn, 0) + + if (from % aggBucketSize !== 0) { + total -= size.slice(fromAgg * aggBucketSize, from).reduce(sumFn, 0) + } + if (to % aggBucketSize !== 0 && to !== lastTo) { + total -= size.slice(to, toAgg * aggBucketSize).reduce(sumFn, 0) + } + + return total +} + +const commonVirtScrollProps = { + virtualScrollSliceSize: { + type: [ Number, String ], + default: null + }, + + virtualScrollSliceRatioBefore: { + type: [ Number, String ], + default: 1 + }, + + virtualScrollSliceRatioAfter: { + type: [ Number, String ], + default: 1 + }, + + virtualScrollItemSize: { + type: [ Number, String ], + default: 24 + }, + + virtualScrollStickySizeStart: { + type: [ Number, String ], + default: 0 + }, + + virtualScrollStickySizeEnd: { + type: [ Number, String ], + default: 0 + }, + + tableColspan: [ Number, String ] +} + +function setOverflowAnchor (contentEl, index) { + if (setOverflowAnchor.isSupported === void 0) { + setOverflowAnchor.isSupported = window.getComputedStyle(document.body).overflowAnchor !== void 0 + } + + if (setOverflowAnchor.isSupported === false || contentEl === void 0) { + return + } + + cancelAnimationFrame(contentEl._qOverflowAnimationFrame) + contentEl._qOverflowAnimationFrame = requestAnimationFrame(() => { + if (contentEl === void 0) { + return + } + + const children = contentEl.children || [] + + filterProto + .call(children, el => el.dataset && el.dataset.qVsAnchor !== void 0) + .forEach(el => { + delete el.dataset.qVsAnchor + }) + + const el = children[index] + + if (el && el.dataset) { + el.dataset.qVsAnchor = '' + } + }) +} + +export const commonVirtPropsList = Object.keys(commonVirtScrollProps) + +export default { + props: { + virtualScrollHorizontal: Boolean, + ...commonVirtScrollProps + }, + + data () { + return { + virtualScrollSliceRange: { from: 0, to: 0 } + } + }, + + watch: { + needsSliceRecalc () { + this.__setVirtualScrollSize() + }, + + needsReset () { + this.reset() + } + }, + + computed: { + needsReset () { + return ['virtualScrollItemSizeComputed', 'virtualScrollHorizontal'] + .map(p => this[p]).join(';') + }, + + needsSliceRecalc () { + return this.needsReset + ';' + ['virtualScrollSliceRatioBefore', 'virtualScrollSliceRatioAfter'] + .map(p => this[p]).join(';') + }, + + colspanAttr () { + return this.tableColspan !== void 0 + ? { colspan: this.tableColspan } + : { colspan: 100 } + }, + + virtualScrollItemSizeComputed () { + return this.virtualScrollItemSize + } + }, + + methods: { + reset () { + this.__resetVirtualScroll(this.prevToIndex, true) + }, + + refresh (toIndex) { + this.__resetVirtualScroll(toIndex === void 0 ? this.prevToIndex : toIndex) + }, + + scrollTo (toIndex, edge) { + const scrollEl = this.__getVirtualScrollTarget() + + if (scrollEl === void 0 || scrollEl === null || scrollEl.nodeType === 8) { + return + } + + const scrollDetails = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ) + + this.__scrollViewSize !== scrollDetails.scrollViewSize && this.__setVirtualScrollSize(scrollDetails.scrollViewSize) + + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + Math.min(this.virtualScrollLength - 1, Math.max(0, parseInt(toIndex, 10) || 0)), + 0, + scrollToEdges.indexOf(edge) > -1 ? edge : (this.prevToIndex > -1 && toIndex > this.prevToIndex ? 'end' : 'start') + ) + }, + + __onVirtualScrollEvt (throttled) { + const scrollEl = this.__getVirtualScrollTarget() + + if (scrollEl === void 0 || scrollEl === null || scrollEl.nodeType === 8) { + return + } + + if (this.$q.interaction.isKeyboard === true && this.$q.interaction.event !== null && typeof this.$q.interaction.event.key === 'string') { + const key = this.$q.interaction.event.key.toLowerCase() + + if (key === 'home' || key === 'end') { + setScroll( + scrollEl, + key === 'home' ? 0 : 'end', + this.virtualScrollHorizontal, + this.$q.lang.rtl + ) + } + } + + const + scrollDetails = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ), + listLastIndex = this.virtualScrollLength - 1, + listEndOffset = scrollDetails.scrollMaxSize - scrollDetails.offsetStart - scrollDetails.offsetEnd - this.virtualScrollPaddingAfter + + if (this.prevScrollStart === scrollDetails.scrollStart) { + return + } + + if (scrollDetails.scrollMaxSize <= 0) { + this.__setVirtualScrollSliceRange(scrollEl, scrollDetails, 0, 0) + + return + } + + this.__scrollViewSize !== scrollDetails.scrollViewSize && this.__setVirtualScrollSize(scrollDetails.scrollViewSize) + + this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from) + + const scrollMaxStart = Math.floor(scrollDetails.scrollMaxSize - + Math.max(scrollDetails.scrollViewSize, scrollDetails.offsetEnd) - + Math.min(this.virtualScrollSizes[listLastIndex], scrollDetails.scrollViewSize / 2)) + + if (scrollMaxStart > 0 && Math.ceil(scrollDetails.scrollStart) >= scrollMaxStart) { + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + listLastIndex, + scrollDetails.scrollMaxSize - scrollDetails.offsetEnd - this.virtualScrollSizesAgg.reduce(sumFn, 0) + ) + + return + } + + let + toIndex = 0, + listOffset = scrollDetails.scrollStart - scrollDetails.offsetStart, + offset = listOffset + + if (listOffset <= listEndOffset && listOffset + scrollDetails.scrollViewSize >= this.virtualScrollPaddingBefore) { + listOffset -= this.virtualScrollPaddingBefore + toIndex = this.virtualScrollSliceRange.from + offset = listOffset + } + else { + for (let j = 0; listOffset >= this.virtualScrollSizesAgg[j] && toIndex < listLastIndex; j++) { + listOffset -= this.virtualScrollSizesAgg[j] + toIndex += aggBucketSize + } + } + + while (listOffset > 0 && toIndex < listLastIndex) { + listOffset -= this.virtualScrollSizes[toIndex] + if (listOffset > -scrollDetails.scrollViewSize) { + toIndex++ + offset = listOffset + } + else { + offset = this.virtualScrollSizes[toIndex] + listOffset + } + } + + this.__setVirtualScrollSliceRange( + scrollEl, + scrollDetails, + toIndex, + offset, + void 0, + throttled + ) + }, + + __setVirtualScrollSliceRange (scrollEl, scrollDetails, toIndex, offset, align, throttled) { + const alignForce = typeof align === 'string' && align.indexOf('-force') > -1 + const alignEnd = alignForce === true ? align.replace('-force', '') : align + const alignRange = alignEnd !== void 0 ? alignEnd : 'start' + + let + from = Math.max(0, toIndex - this.virtualScrollSliceSizeComputed[alignRange]), + to = from + this.virtualScrollSliceSizeComputed.total + + if (to > this.virtualScrollLength) { + to = this.virtualScrollLength + from = Math.max(0, to - this.virtualScrollSliceSizeComputed.total) + } + + this.prevScrollStart = scrollDetails.scrollStart + + const rangeChanged = from !== this.virtualScrollSliceRange.from || to !== this.virtualScrollSliceRange.to + + if (rangeChanged === false && alignEnd === void 0) { + this.__emitScroll(toIndex) + + return + } + + const { activeElement } = document + const contentEl = this.$refs.content + if ( + rangeChanged === true && + contentEl !== void 0 && + contentEl !== activeElement && + contentEl.contains(activeElement) === true && + contentEl.qVsFocusout !== true + ) { + contentEl.qVsFocusout = true + contentEl.addEventListener('focusout', this.__onBlurRefocusFn) + + setTimeout(() => { + if (contentEl !== void 0) { + contentEl.removeEventListener('focusout', this.__onBlurRefocusFn) + contentEl.qVsFocusout = false + } + }, 500) + } + + setOverflowAnchor(contentEl, toIndex - from) + + const sizeBefore = alignEnd !== void 0 ? this.virtualScrollSizes.slice(from, toIndex).reduce(sumFn, 0) : 0 + + if (rangeChanged === true) { + // vue key matching algorithm works only if + // the array of VNodes changes on only one of the ends + // so we first change one end and then the other + + const tempTo = to >= this.virtualScrollSliceRange.from && from <= this.virtualScrollSliceRange.to + ? this.virtualScrollSliceRange.to + : to + this.virtualScrollSliceRange = { from, to: tempTo } + this.virtualScrollPaddingBefore = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, 0, from) + this.virtualScrollPaddingAfter = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, this.virtualScrollSliceRange.to, this.virtualScrollLength) + + cancelAnimationFrame(this.vsRangeToAnimationFrame) + this.vsRangeToAnimationFrame = requestAnimationFrame(() => { + if (this.virtualScrollSliceRange.to !== to && this.prevScrollStart === scrollDetails.scrollStart) { + this.virtualScrollSliceRange = { from: this.virtualScrollSliceRange.from, to } + this.virtualScrollPaddingAfter = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, to, this.virtualScrollLength) + } + }) + } + + cancelAnimationFrame(this.vsScrollAnimationFrame) + this.vsScrollAnimationFrame = requestAnimationFrame(() => { + // if the scroll was changed give up + // (another call to __setVirtualScrollSliceRange before animation frame) + if (this.prevScrollStart !== scrollDetails.scrollStart) { + return + } + + if (rangeChanged === true) { + this.__updateVirtualScrollSizes(from) + } + + const + sizeAfter = this.virtualScrollSizes.slice(from, toIndex).reduce(sumFn, 0), + posStart = sizeAfter + scrollDetails.offsetStart + this.virtualScrollPaddingBefore, + posEnd = posStart + this.virtualScrollSizes[toIndex] + + let scrollPosition = posStart + offset + + if (alignEnd !== void 0) { + const sizeDiff = sizeAfter - sizeBefore + const scrollStart = scrollDetails.scrollStart + sizeDiff + + scrollPosition = alignForce !== true && scrollStart < posStart && posEnd < scrollStart + scrollDetails.scrollViewSize + ? scrollStart + : ( + alignEnd === 'end' + ? posEnd - scrollDetails.scrollViewSize + : posStart - (alignEnd === 'start' ? 0 : Math.round((scrollDetails.scrollViewSize - this.virtualScrollSizes[toIndex]) / 2)) + ) + } + + this.prevScrollStart = scrollPosition + + if (throttled !== true || (scrollEl === window && this.$q.platform.is.ios !== true)) { + setScroll( + scrollEl, + scrollPosition, + this.virtualScrollHorizontal, + this.$q.lang.rtl + ) + } + + this.__emitScroll(toIndex) + }) + }, + + __updateVirtualScrollSizes (from) { + const contentEl = this.$refs.content + + if (contentEl !== void 0) { + const + children = filterProto.call(contentEl.children || [], el => el.classList && el.classList.contains('q-virtual-scroll--skip') === false), // fallback [] for IE + childrenLength = children.length, + sizeFn = this.virtualScrollHorizontal === true + ? el => el.getBoundingClientRect().width + : el => el.offsetHeight + + let + index = from, + size, diff + + for (let i = 0; i < childrenLength;) { + size = sizeFn(children[i]) + i++ + + while (i < childrenLength && children[i].classList.contains('q-virtual-scroll--with-prev') === true) { + size += sizeFn(children[i]) + i++ + } + + diff = size - this.virtualScrollSizes[index] + + if (diff !== 0) { + this.virtualScrollSizes[index] += diff + this.virtualScrollSizesAgg[Math.floor(index / aggBucketSize)] += diff + } + + index++ + } + } + }, + + __resetVirtualScroll (toIndex, fullReset) { + const defaultSize = 1 * this.virtualScrollItemSizeComputed + + if (fullReset === true || Array.isArray(this.virtualScrollSizes) === false) { + this.virtualScrollSizes = [] + } + + const oldVirtualScrollSizesLength = this.virtualScrollSizes.length + + this.virtualScrollSizes.length = this.virtualScrollLength + + for (let i = this.virtualScrollLength - 1; i >= oldVirtualScrollSizesLength; i--) { + this.virtualScrollSizes[i] = defaultSize + } + + const jMax = Math.floor((this.virtualScrollLength - 1) / aggBucketSize) + this.virtualScrollSizesAgg = [] + for (let j = 0; j <= jMax; j++) { + let size = 0 + const iMax = Math.min((j + 1) * aggBucketSize, this.virtualScrollLength) + for (let i = j * aggBucketSize; i < iMax; i++) { + size += this.virtualScrollSizes[i] + } + this.virtualScrollSizesAgg.push(size) + } + + this.prevToIndex = -1 + this.prevScrollStart = void 0 + + this.virtualScrollPaddingBefore = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, 0, this.virtualScrollSliceRange.from) + this.virtualScrollPaddingAfter = sumSize(this.virtualScrollSizesAgg, this.virtualScrollSizes, this.virtualScrollSliceRange.to, this.virtualScrollLength) + + if (toIndex >= 0) { + this.__updateVirtualScrollSizes(this.virtualScrollSliceRange.from) + + this.$nextTick(() => { + this.scrollTo(toIndex) + }) + } + else { + this.__onVirtualScrollEvt() + } + }, + + __setVirtualScrollSize (scrollViewSize) { + if (scrollViewSize === void 0 && typeof window !== 'undefined') { + const scrollEl = this.__getVirtualScrollTarget() + + if (scrollEl !== void 0 && scrollEl !== null && scrollEl.nodeType !== 8) { + scrollViewSize = getScrollDetails( + scrollEl, + this.__getVirtualScrollEl(), + this.$refs.before, + this.$refs.after, + this.virtualScrollHorizontal, + this.$q.lang.rtl, + this.virtualScrollStickySizeStart, + this.virtualScrollStickySizeEnd + ).scrollViewSize + } + } + + this.__scrollViewSize = scrollViewSize + + const virtualScrollSliceRatioBefore = parseFloat(this.virtualScrollSliceRatioBefore) || 0 + const virtualScrollSliceRatioAfter = parseFloat(this.virtualScrollSliceRatioAfter) || 0 + const multiplier = 1 + virtualScrollSliceRatioBefore + virtualScrollSliceRatioAfter + const view = scrollViewSize === void 0 || scrollViewSize <= 0 + ? 1 + : Math.ceil(scrollViewSize / this.virtualScrollItemSizeComputed) + const baseSize = Math.max( + 1, + view, + Math.ceil((this.virtualScrollSliceSize > 0 ? this.virtualScrollSliceSize : 10) / multiplier) + ) + + this.virtualScrollSliceSizeComputed = { + total: Math.ceil(baseSize * multiplier), + start: Math.ceil(baseSize * virtualScrollSliceRatioBefore), + center: Math.ceil(baseSize * (0.5 + virtualScrollSliceRatioBefore)), + end: Math.ceil(baseSize * (1 + virtualScrollSliceRatioBefore)), + view + } + }, + + __padVirtualScroll (h, tag, content) { + const paddingSize = this.virtualScrollHorizontal === true ? 'width' : 'height' + const style = { + ['--q-virtual-scroll-item-' + paddingSize]: this.virtualScrollItemSizeComputed + 'px' + } + + return [ + tag === 'tbody' + ? h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'before', + ref: 'before' + }, [ + h('tr', [ + h('td', { + style: { [paddingSize]: `${this.virtualScrollPaddingBefore}px`, ...style }, + attrs: this.colspanAttr + }) + ]) + ]) + : h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'before', + ref: 'before', + style: { [paddingSize]: `${this.virtualScrollPaddingBefore}px`, ...style } + }), + + h(tag, { + staticClass: 'q-virtual-scroll__content', + key: 'content', + ref: 'content', + attrs: { tabindex: -1 } + }, content), + + tag === 'tbody' + ? h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'after', + ref: 'after' + }, [ + h('tr', [ + h('td', { + style: { [paddingSize]: `${this.virtualScrollPaddingAfter}px`, ...style }, + attrs: this.colspanAttr + }) + ]) + ]) + : h(tag, { + staticClass: 'q-virtual-scroll__padding', + key: 'after', + ref: 'after', + style: { [paddingSize]: `${this.virtualScrollPaddingAfter}px`, ...style } + }) + ] + }, + + __emitScroll (index) { + if (this.prevToIndex !== index) { + this.qListeners['virtual-scroll'] !== void 0 && this.$emit('virtual-scroll', { + index, + from: this.virtualScrollSliceRange.from, + to: this.virtualScrollSliceRange.to - 1, + direction: index < this.prevToIndex ? 'decrease' : 'increase', + ref: this + }) + + this.prevToIndex = index + } + }, + + __onBlurRefocusFn () { + this.$refs.content !== void 0 && this.$refs.content.focus() + } + }, + + created () { + this.__setVirtualScrollSize() + }, + + activated () { + if (this.shouldActivate !== true) { return } + + const scrollEl = this.__getVirtualScrollTarget() + + if (this.prevScrollStart !== void 0 && scrollEl !== void 0 && scrollEl !== null && scrollEl.nodeType !== 8) { + setScroll( + scrollEl, + this.prevScrollStart, + this.virtualScrollHorizontal, + this.$q.lang.rtl + ) + } + else { + this.scrollTo(this.prevToIndex) + } + }, + + deactivated () { + this.shouldActivate = true + }, + + beforeMount () { + this.__onVirtualScrollEvt = scrollDebounce(this.__onVirtualScrollEvt) + this.__setVirtualScrollSize() + }, + + beforeDestroy () { + this.__onVirtualScrollEvt.cancel() + } +} diff --git a/src/mixins/virtual-scroll.json b/src/mixins/virtual-scroll.json new file mode 100644 index 00000000000..5e0fa8af01b --- /dev/null +++ b/src/mixins/virtual-scroll.json @@ -0,0 +1,145 @@ +{ + "props": { + "virtual-scroll-horizontal": { + "type": "Boolean", + "desc": "Make virtual list work in horizontal mode", + "category": "behavior" + }, + + "virtual-scroll-slice-size": { + "type": [ "Number", "String" ], + "desc": "Minimum number of items to render in the virtual list", + "default": "30", + "examples": [ "virtual-scroll-slice-size=\"60\"" ], + "category": "virtual-scroll" + }, + + "virtual-scroll-slice-ratio-before": { + "type": [ "Number", "String" ], + "desc": "Ratio of number of items in visible zone to render before it", + "default": "1", + "examples": [ "virtual-scroll-slice-ratio-before=\"0.3\"" ], + "category": "virtual-scroll", + "addedIn": "v1.14.7" + }, + + "virtual-scroll-slice-ratio-after": { + "type": [ "Number", "String" ], + "desc": "Ratio of number of items in visible zone to render after it", + "default": "1", + "examples": [ "virtual-scroll-slice-ratio-after=\"2\"" ], + "category": "virtual-scroll", + "addedIn": "v1.14.7" + }, + + "virtual-scroll-item-size": { + "type": [ "Number", "String" ], + "desc": "Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item", + "default": "24", + "examples": [ "virtual-scroll-item-size=\"48\"" ], + "category": "virtual-scroll" + }, + + "virtual-scroll-sticky-size-start": { + "type": [ "Number", "String" ], + "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision", + "default": "0", + "examples": [ "virtual-scroll-sticky-size-start=\"48\"" ], + "category": "virtual-scroll" + }, + + "virtual-scroll-sticky-size-end": { + "type": [ "Number", "String" ], + "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision", + "default": "0", + "examples": [ "virtual-scroll-sticky-size-end=\"48\"" ], + "category": "virtual-scroll" + }, + + "table-colspan": { + "type": [ "Number", "String" ], + "desc": "The number of columns in the table (you need this if you use table-layout: fixed)", + "examples": [ "table-colspan=\"12\"" ], + "category": "virtual-scroll|content", + "addedIn": "v1.13" + } + }, + + "events": { + "virtual-scroll": { + "desc": "Emitted when the virtual scroll occurs", + "params": { + "details": { + "type": "Object", + "desc": "Object of properties on the new scroll position", + "definition": { + "index": { + "type": "Number", + "desc": "Index of the list item that was scrolled into view (0 based)", + "examples": [ 30 ] + }, + "from": { + "type": "Number", + "desc": "The index of the first list item that is rendered (0 based)", + "examples": [ 10 ] + }, + "to": { + "type": "Number", + "desc": "The index of the last list item that is rendered (0 based)", + "examples": [ 50 ] + }, + "direction": { + "type": "String", + "desc": "Direction of change", + "values": [ "increase", "decrease" ] + }, + "ref": { + "type": "Object", + "desc": "Vue reference to the QVirtualList which triggered the event", + "__exemption": [ + "examples" + ], + "addedIn": "v1.8.4" + } + } + } + } + } + }, + + "methods": { + "scrollTo": { + "desc": "Scroll the virtual scroll list to the item with the specified index (0 based)", + "params": { + "index": { + "type": [ "String", "Number" ], + "desc": "The index of the list item (0 based)", + "required": true, + "examples": [ "1", 23 ] + }, + "edge": { + "type": "String", + "desc": "The edge to align to if the item is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns", + "values": [ "start", "center", "end", "start-force", "center-force", "end-force" ], + "addedIn": "v1.13" + } + } + }, + + "reset": { + "desc": "Resets the virtual scroll computations; Needed for custom edge-cases" + }, + + "refresh": { + "desc": "Refreshes the virtual scroll list; Use it after appending items", + "params": { + "index": { + "type": [ "String", "Number" ], + "desc": "The index of the list item to scroll to after refresh (0 based); If it's not specified the scroll position is not changed; Use a negative value to keep scroll position", + "examples": [ "1", 23, -1 ] + } + }, + "addedIn": "v1.8.4" + } + } +} diff --git a/src/plugins.js b/src/plugins.js new file mode 100644 index 00000000000..49246a3f1fc --- /dev/null +++ b/src/plugins.js @@ -0,0 +1,35 @@ +import AddressbarColor from './plugins/AddressbarColor.js' +import AppFullscreen from './plugins/AppFullscreen.js' +import AppVisibility from './plugins/AppVisibility.js' +import BottomSheet from './plugins/BottomSheet.js' +import Cookies from './plugins/Cookies.js' +import Dark from './plugins/Dark.js' +import Dialog from './plugins/Dialog.js' +import Interaction from './plugins/Interaction.js' +import LoadingBar from './plugins/LoadingBar.js' +import Loading from './plugins/Loading.js' +import Meta from './plugins/Meta.js' +import Notify from './plugins/Notify.js' +import Platform from './plugins/Platform.js' +import Screen from './plugins/Screen.js' +import LocalStorage from './plugins/LocalStorage.js' +import SessionStorage from './plugins/SessionStorage.js' + +export { + AddressbarColor, + AppFullscreen, + AppVisibility, + BottomSheet, + Cookies, + Dark, + Dialog, + Interaction, + LoadingBar, + Loading, + Meta, + Notify, + Platform, + Screen, + LocalStorage, + SessionStorage +} diff --git a/src/plugins/AddressbarColor.js b/src/plugins/AddressbarColor.js new file mode 100644 index 00000000000..5fd0b4aee40 --- /dev/null +++ b/src/plugins/AddressbarColor.js @@ -0,0 +1,71 @@ +import Platform, { isSSR } from './Platform.js' +import { noop } from '../utils/event.js' +import { getBrand } from '../utils/colors.js' + +let metaValue + +function getProp () { + if (Platform.is.winphone) { + return 'msapplication-navbutton-color' + } + if (Platform.is.safari) { + return 'apple-mobile-web-app-status-bar-style' + } + // Chrome, Firefox OS, Opera, Vivaldi + return 'theme-color' +} + +function getMetaTag (v) { + const els = document.getElementsByTagName('META') + for (const i in els) { + if (els[i].name === v) { + return els[i] + } + } +} + +function setColor (hexColor) { + if (metaValue === void 0) { + // cache it + metaValue = getProp() + } + + let metaTag = getMetaTag(metaValue) + const newTag = metaTag === void 0 + + if (newTag) { + metaTag = document.createElement('meta') + metaTag.setAttribute('name', metaValue) + } + + metaTag.setAttribute('content', hexColor) + + if (newTag) { + document.head.appendChild(metaTag) + } +} + +export default { + install ({ $q, cfg }) { + this.set = isSSR === false && Platform.is.mobile === true && ( + Platform.is.nativeMobile === true || + Platform.is.winphone === true || Platform.is.safari === true || + Platform.is.webkit === true || Platform.is.vivaldi === true + ) + ? hexColor => { + const val = hexColor || getBrand('primary') + + if (Platform.is.nativeMobile === true && window.StatusBar) { + window.StatusBar.backgroundColorByHexString(val) + } + else { + setColor(val) + } + } + : noop + + $q.addressbarColor = this + + cfg.addressbarColor && this.set(cfg.addressbarColor) + } +} diff --git a/src/plugins/AddressbarColor.json b/src/plugins/AddressbarColor.json new file mode 100644 index 00000000000..253997e9008 --- /dev/null +++ b/src/plugins/AddressbarColor.json @@ -0,0 +1,21 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/addressbar-color" + }, + + "injection": "$q.addressbarColor", + + "methods": { + "set": { + "desc": "Sets addressbar color (for browsers that support it)", + "params": { + "hexColor": { + "type": "String", + "desc": "Color in hex format", + "required": true, + "examples": [ "#ff0000" ] + } + } + } + } +} diff --git a/src/plugins/AppFullscreen.js b/src/plugins/AppFullscreen.js new file mode 100644 index 00000000000..849dd01e575 --- /dev/null +++ b/src/plugins/AppFullscreen.js @@ -0,0 +1,118 @@ +import Vue from 'vue' + +import { isSSR, client } from './Platform.js' + +const prefixes = {} + +// needed for consistency across browsers, +// including IE11 which does not return anything +function promisify (target, fn) { + try { + const res = target[fn]() + return res === void 0 + ? Promise.resolve() + : res + } + catch (err) { + return Promise.reject(err) + } +} + +function checkActive (plugin) { + plugin.activeEl = document.fullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement || + document.msFullscreenElement || + null + + plugin.isActive = plugin.activeEl !== null +} + +export default { + isCapable: false, + isActive: false, + activeEl: null, + + request (target) { + if (this.isCapable === true) { + const el = target || document.documentElement + + if (el !== this.activeEl) { + const q = client.is.ie === true && this.activeEl !== null && el.contains(this.activeEl) + ? this.exit() + : Promise.resolve() + + return q + .then(() => promisify(el, prefixes.request)) + .catch(error => ( + this.activeEl !== null + ? this.exit().then(() => promisify(el, prefixes.request)) + : Promise.reject(error) + )) + .then(res => { + checkActive(this) + return res + }) + } + } + + return this.__getErr() + }, + + exit () { + return this.isCapable === true && this.isActive === true + ? promisify(document, prefixes.exit).then(res => { + checkActive(this) + return this.isActive ? this.exit() : res + }) + : this.__getErr() + }, + + toggle (target) { + const el = target || document.documentElement + + return this.activeEl === el + ? this.exit() + : this.request(el) + }, + + install ({ $q }) { + $q.fullscreen = this + + this.__getErr = () => Promise.resolve() + + if (isSSR === true) { return } + + prefixes.request = [ + 'requestFullscreen', + 'msRequestFullscreen', 'mozRequestFullScreen', 'webkitRequestFullscreen' + ].find(request => document.documentElement[request] !== void 0) + + this.isCapable = prefixes.request !== void 0 + + if (this.isCapable === false) { + // it means the browser does NOT support it + this.__getErr = () => Promise.reject('Not capable') + return + } + + prefixes.exit = [ + 'exitFullscreen', + 'msExitFullscreen', 'mozCancelFullScreen', 'webkitExitFullscreen' + ].find(exit => document[exit]) + + checkActive(this) + + ;[ + 'onfullscreenchange', + 'onmsfullscreenchange', 'onwebkitfullscreenchange' + ].forEach(evt => { + document[evt] = () => { + checkActive(this) + } + }) + + Vue.util.defineReactive(this, 'isActive', this.isActive) + Vue.util.defineReactive(this, 'activeEl', this.activeEl) + } +} diff --git a/src/plugins/AppFullscreen.json b/src/plugins/AppFullscreen.json new file mode 100644 index 00000000000..43576895e9e --- /dev/null +++ b/src/plugins/AppFullscreen.json @@ -0,0 +1,75 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/app-fullscreen" + }, + + "injection": "$q.fullscreen", + + "props": { + "isCapable": { + "type": "Boolean", + "desc": "Does browser support it?" + }, + + "isActive": { + "type": "Boolean", + "desc": "Is Fullscreen active?" + }, + + "activeEl": { + "type": "Object", + "desc": "The DOM element used as root for fullscreen, otherwise 'null'", + "__exemption": [ "examples" ], + "addedIn": "v1.12.5" + } + }, + + "methods": { + "request": { + "desc": "Request going into Fullscreen (with optional target)", + "params": { + "target": { + "type": "Element", + "desc": "Optional Element of target to request Fullscreen on", + "examples": [ "document.getElementById('example')" ] + } + }, + "returns": { + "type": "Promise", + "desc": "A Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "request().then(response => { ... }).catch(err => { ... })" + ] + } + }, + + "exit": { + "desc": "Request exiting out of Fullscreen mode", + "returns": { + "type": "Promise", + "desc": "A Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "exit().then(response => { ... }).catch(err => { ... })" + ] + } + }, + + "toggle": { + "desc": "Request toggling Fullscreen mode (with optional target if requesting going into Fullscreen only)", + "params": { + "target": { + "type": "Element", + "desc": "Optional Element of target to request Fullscreen on", + "examples": [ "document.getElementById('example')" ] + } + }, + "returns": { + "type": "Promise", + "desc": "A Promise with the outcome (true -> validation was a success, false -> invalid models detected)", + "examples": [ + "toggle().then(response => { ... }).catch(err => { ... })" + ] + } + } + } +} diff --git a/src/plugins/AppVisibility.js b/src/plugins/AppVisibility.js new file mode 100644 index 00000000000..d69605aa819 --- /dev/null +++ b/src/plugins/AppVisibility.js @@ -0,0 +1,40 @@ +import Vue from 'vue' + +import { isSSR } from './Platform.js' + +export default { + appVisible: false, + + install ({ $q }) { + if (isSSR === true) { + this.appVisible = $q.appVisible = true + return + } + + let prop, evt + + if (typeof document.hidden !== 'undefined') { // Opera 12.10 and Firefox 18 and later support + prop = 'hidden' + evt = 'visibilitychange' + } + else if (typeof document.msHidden !== 'undefined') { + prop = 'msHidden' + evt = 'msvisibilitychange' + } + else if (typeof document.webkitHidden !== 'undefined') { + prop = 'webkitHidden' + evt = 'webkitvisibilitychange' + } + + const update = () => { + this.appVisible = $q.appVisible = !document[prop] + } + + update() + + if (evt && typeof document[prop] !== 'undefined') { + Vue.util.defineReactive($q, 'appVisible', this.appVisible) + document.addEventListener(evt, update, false) + } + } +} diff --git a/src/plugins/AppVisibility.json b/src/plugins/AppVisibility.json new file mode 100644 index 00000000000..38a414054ad --- /dev/null +++ b/src/plugins/AppVisibility.json @@ -0,0 +1,16 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/app-visibility" + }, + + "injection": "$q.appVisible", + + "props": { + "appVisible": { + "tsInjectionPoint": true, + "type": "Boolean", + "desc": "Does the app have user focus? Or the app runs in the background / another tab has the user's attention", + "reactive": true + } + } +} diff --git a/src/plugins/BottomSheet.js b/src/plugins/BottomSheet.js new file mode 100644 index 00000000000..4b745f266d9 --- /dev/null +++ b/src/plugins/BottomSheet.js @@ -0,0 +1,8 @@ +import BottomSheet from '../components/dialog-bottom-sheet/BottomSheet.js' +import globalDialog from '../utils/private/global-dialog.js' + +export default { + install ({ $q }) { + this.create = $q.bottomSheet = globalDialog(BottomSheet) + } +} diff --git a/src/plugins/BottomSheet.json b/src/plugins/BottomSheet.json new file mode 100644 index 00000000000..22ef7dd572d --- /dev/null +++ b/src/plugins/BottomSheet.json @@ -0,0 +1,91 @@ +{ + "mixins": [ "utils/private/global-dialog" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/bottom-sheet" + }, + + "injection": "$q.bottomSheet", + + "methods": { + "create": { + "tsInjectionPoint": true, + "desc": "Creates an ad-hoc Bottom Sheet; Same as calling $q.bottomSheet(...)", + "params": { + "opts": { + "desc": "Bottom Sheet options", + "definition": { + "title": { + "type": "String", + "desc": "Title", + "examples": [ "Share" ] + }, + + "message": { + "type": "String", + "desc": "Message", + "examples": [ "Please select how to share" ] + }, + + "actions": { + "type": "Array", + "desc": "Array of Objects, each Object defining an action", + "definition": { + "classes": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS classes for this action", + "examples": [ "my-class" ] + }, + + "icon": { + "extends": "icon" + }, + + "img": { + "type": "String", + "desc": "Path to an image for this action", + "examples": [ + "(public folder) img/something.png", + "(relative path format) :src=\"require('./my_img.jpg')\"", + "(URL) https://some-site.net/some-img.gif" + ] + }, + + "avatar": { + "type": "Boolean", + "desc": "Display img as avatar (round borders)" + }, + + "label": { + "type": [ "String", "Number" ], + "desc": "Action label", + "examples": [ "Facebook" ] + } + } + }, + + "grid": { + "type": "Boolean", + "desc": "Display actions as a grid instead of as a list" + }, + + "dark": { + "extends": "dark", + "desc": "Apply dark mode" + }, + + "seamless": { + "type": "Boolean", + "desc": "Put Bottom Sheet into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too" + }, + + "persistent": { + "type": "Boolean", + "desc": "User cannot dismiss Bottom Sheet if clicking outside of it or hitting ESC key" + } + } + } + } + } + } +} diff --git a/src/plugins/Cookies.js b/src/plugins/Cookies.js new file mode 100644 index 00000000000..a4de1e2f69f --- /dev/null +++ b/src/plugins/Cookies.js @@ -0,0 +1,220 @@ +import { isSSR } from './Platform.js' + +function encode (string) { + return encodeURIComponent(string) +} + +function decode (string) { + return decodeURIComponent(string) +} + +function stringifyCookieValue (value) { + return encode( + typeof value === 'string' && value.slice(0, 2) !== 'j:' + ? value + : 'j:' + JSON.stringify(value) + ) +} + +function read (string, reviverFn) { + if (string === '') { + return string + } + + if (string.indexOf('"') === 0) { + // This is a quoted cookie as according to RFC2068, unescape... + string = string.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\') + } + + // Replace server-side written pluses with spaces. + // If we can't decode the cookie, ignore it, it's unusable. + // If we can't parse the cookie, ignore it, it's unusable. + string = decode(string.replace(/\+/g, ' ')) + + if (string.slice(0, 2) === 'j:') { + try { + return JSON.parse(string.slice(2), reviverFn) + } + catch (e) {} + } + + try { + const parsed = JSON.parse(string, reviverFn) + + return reviverFn !== void 0 || parsed === Object(parsed) || Array.isArray(parsed) === true + ? parsed + : string + } + catch (e) { + return string + } +} + +function getString (msOffset) { + const time = new Date() + time.setMilliseconds(time.getMilliseconds() + msOffset) + return time.toUTCString() +} + +function parseExpireString (str) { + let timestamp = 0 + + const days = str.match(/(\d+)d/) + const hours = str.match(/(\d+)h/) + const minutes = str.match(/(\d+)m/) + const seconds = str.match(/(\d+)s/) + + if (days) { timestamp += days[1] * 864e+5 } + if (hours) { timestamp += hours[1] * 36e+5 } + if (minutes) { timestamp += minutes[1] * 6e+4 } + if (seconds) { timestamp += seconds[1] * 1000 } + + return timestamp === 0 + ? str + : getString(timestamp) +} + +function set (key, val, opts = {}, ssr) { + let expire, expireValue + + if (opts.expires !== void 0) { + // if it's a Date Object + if (Object.prototype.toString.call(opts.expires) === '[object Date]') { + expire = opts.expires.toUTCString() + } + // if it's a String (eg. "15m", "1h", "13d", "1d 15m", "31s") + // possible units: d (days), h (hours), m (minutes), s (seconds) + else if (typeof opts.expires === 'string') { + expire = parseExpireString(opts.expires) + } + // otherwise it must be a Number (defined in days) + else { + expireValue = parseFloat(opts.expires) + expire = isNaN(expireValue) === false + ? getString(expireValue * 864e+5) + : opts.expires + } + } + + const keyValue = `${encode(key)}=${stringifyCookieValue(val)}` + + const cookie = [ + keyValue, + expire !== void 0 ? '; Expires=' + expire : '', // use expires attribute, max-age is not supported by IE + opts.path ? '; Path=' + opts.path : '', + opts.domain ? '; Domain=' + opts.domain : '', + opts.sameSite ? '; SameSite=' + opts.sameSite : '', + opts.httpOnly ? '; HttpOnly' : '', + opts.secure ? '; Secure' : '', + opts.other ? '; ' + opts.other : '' + ].join('') + + if (ssr) { + if (ssr.req.qCookies) { + ssr.req.qCookies.push(cookie) + } + else { + ssr.req.qCookies = [ cookie ] + } + + ssr.res.setHeader('Set-Cookie', ssr.req.qCookies) + + // make temporary update so future get() + // within same SSR timeframe would return the set value + + let all = ssr.req.headers.cookie || '' + + if (expire !== void 0 && expireValue < 0) { + const oldVal = get(key, ssr, void 0, true) + if (oldVal !== void 0) { + const replaceKeyValue = `${encode(key)}=${stringifyCookieValue(oldVal)}` + all = all + .replace(`${replaceKeyValue}; `, '') + .replace(`; ${replaceKeyValue}`, '') + .replace(`${replaceKeyValue}`, '') + } + } + else { + all = all + ? `${keyValue}; ${all}` + : cookie + } + + ssr.req.headers.cookie = all + } + else { + document.cookie = cookie + } +} + +function get (key, ssr, reviverFn, raw) { + const + cookieSource = ssr ? ssr.req.headers : document, + cookies = cookieSource.cookie ? cookieSource.cookie.split('; ') : [], + l = cookies.length + let + result = key ? null : {}, + i = 0, + parts, + name, + cookie + + for (; i < l; i++) { + parts = cookies[i].split('=') + name = decode(parts.shift()) + cookie = parts.join('=') + + if (!key) { + result[name] = read(cookie, reviverFn) + } + else if (key === name) { + result = raw === true ? cookie : read(cookie, reviverFn) + break + } + } + + return result +} + +function remove (key, options, ssr) { + set( + key, + '', + { expires: -1, ...options }, + ssr + ) +} + +function has (key, ssr, reviverFn) { + return get(key, ssr, reviverFn) !== null +} + +export function getObject (ssr) { + return { + get: (key, reviverFn) => get(key, ssr, reviverFn), + set: (key, val, opts) => set(key, val, opts, ssr), + has: (key, reviverFn) => has(key, ssr, reviverFn), + remove: (key, options) => remove(key, options, ssr), + getAll: reviverFn => get(null, ssr, reviverFn) + } +} + +export default { + parseSSR (ssrContext) { + return ssrContext !== void 0 + ? getObject(ssrContext) + : this + }, + + install ({ $q, queues }) { + if (isSSR === true) { + queues.server.push((q, ctx) => { + q.cookies = getObject(ctx.ssr) + }) + } + else { + Object.assign(this, getObject()) + $q.cookies = this + } + } +} diff --git a/src/plugins/Cookies.json b/src/plugins/Cookies.json new file mode 100644 index 00000000000..78c2471a4bd --- /dev/null +++ b/src/plugins/Cookies.json @@ -0,0 +1,227 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/cookies" + }, + + "injection": "$q.cookies", + + "methods": { + "get": { + "tsType": "CookiesGetMethodType", + "desc": "Get cookie", + "params": { + "name": { + "type": "String", + "desc": "Cookie name", + "required": true, + "examples": [ "userId" ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Value in that key", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value", + "__exemption": [ "examples" ] + } + } + }, + "returns": { + "type": [ "String", "null" ], + "desc": "Cookie value; Returns null if cookie not found", + "examples": [ "john12" ] + } + }, + + "getAll": { + "desc": "Get all cookies", + "params": { + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Value in that key", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value", + "__exemption": [ "examples" ] + } + } + }, + "returns": { + "type": "Object", + "desc": "Object with cookie names (as keys) and their values", + "examples": [ + "{ userId: 'john12', XFrame: 'x534' }" + ] + } + }, + + "set": { + "desc": "Set cookie", + "params": { + "name": { + "type": "String", + "desc": "Cookie name", + "required": true, + "examples": [ "userId" ] + }, + + "value": { + "type": "String", + "desc": "Cookie value", + "required": true, + "examples": [ "john12" ] + }, + + "options": { + "type": "Object", + "desc": "Cookie options", + "definition": { + "expires": { + "type": [ "Number", "String", "Date" ], + "desc": "Cookie expires detail; If specified as Number, then the unit is days; If specified as String, it can either be raw stringified date or in Xd Xh Xm Xs format (see examples)", + "examples": [ 30, "Wed, 13 Jan 2021 22:23:01 GMT", "1d", "15m", "13d", "1d 15m", "1d 3h 5m 3s" ] + }, + "path": { + "type": "String", + "desc": "Cookie path", + "examples": [ "/accounts" ] + }, + "domain": { + "type": "String", + "desc": "Cookie domain", + "examples": [ ".foo.com" ] + }, + "sameSite": { + "type": "String", + "desc": "SameSite cookie option (not supported by IE11)", + "examples": [ "Strict", "Lax" ], + "addedIn": "v1.1.1" + }, + "httpOnly": { + "type": "Boolean", + "desc": "Is cookie Http Only?" + }, + "secure": { + "type": "Boolean", + "desc": "Is cookie secure? (https only)" + }, + "other": { + "type": "String", + "desc": "Raw string for other cookie options; To be used as a last resort for possible newer props that are currently not yet implemented in Quasar", + "examples": [ "SomeNewCookieProp" ], + "addedIn": "v1.1.1" + } + } + } + } + }, + + "has": { + "desc": "Check if cookie exists", + "params": { + "name": { + "type": "String", + "desc": "Cookie name", + "required": true, + "examples": [ "userId" ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for values - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Value in that key", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value", + "__exemption": [ "examples" ] + } + } + }, + "returns": { + "type": "Boolean", + "desc": "Does cookie exists or not?" + } + }, + + "remove": { + "desc": "Remove a cookie", + "params": { + "name": { + "type": "String", + "desc": "Cookie name", + "required": true, + "examples": [ "userId" ] + }, + + "options": { + "type": "Object", + "desc": "Cookie options", + "definition": { + "path": { + "type": "String", + "desc": "Cookie path", + "examples": [ "/accounts" ] + }, + "domain": { + "type": "String", + "desc": "Cookie domain", + "examples": [ ".foo.com" ] + } + } + } + } + }, + + "parseSSR": { + "desc": "For SSR usage only, and only on the global import (not on $q.cookies)", + "params": { + "ssrContext": { + "type": "Object", + "desc": "SSR Context Object", + "required": true, + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Object", + "tsType": "Cookies", + "desc": "Cookie object (like $q.cookies) for SSR usage purposes", + "__exemption": [ "examples" ] + } + } + } +} diff --git a/src/plugins/Dark.js b/src/plugins/Dark.js new file mode 100644 index 00000000000..8617e83721d --- /dev/null +++ b/src/plugins/Dark.js @@ -0,0 +1,98 @@ +import Vue from 'vue' + +import { isSSR, fromSSR } from './Platform.js' +import { noop } from '../utils/event.js' + +const Dark = { + isActive: null, + mode: false, + + install ($q, queues, { dark }) { + this.isActive = dark === 'auto' ? null : dark === true + + if (isSSR === true) { + queues.server.push((q, ctx) => { + q.dark = { + isActive: null, + mode: false, + set: val => { + ctx.ssr.Q_BODY_CLASSES = ctx.ssr.Q_BODY_CLASSES + .replace(' body--light', '') + .replace(' body--dark-auto', '') + .replace(' body--dark', '') + + ` body--${val === true ? 'dark' : (val === 'auto' ? 'dark-auto' : 'light')}` + + q.dark.isActive = val === 'auto' ? null : val === true + q.dark.mode = val + }, + toggle: () => { + q.dark.set(q.dark.isActive === false) + } + } + + q.dark.set(dark) + }) + + this.set = noop + return + } + + const initialVal = dark !== void 0 + ? dark + : false + + if (fromSSR === true) { + const ssrSet = val => { + this.__fromSSR = val + } + + const originalSet = this.set + + this.set = ssrSet + ssrSet(initialVal) + + queues.takeover.push(() => { + document.body.classList.remove('body--dark-auto') + this.set = originalSet + this.set(this.__fromSSR) + }) + } + else { + this.set(initialVal) + } + + Vue.util.defineReactive(this, 'isActive', this.isActive) + Vue.util.defineReactive($q, 'dark', this) + }, + + set (val) { + this.mode = val + + if (val === 'auto') { + if (this.__media === void 0) { + this.__media = window.matchMedia('(prefers-color-scheme: dark)') + this.__updateMedia = () => { this.set('auto') } + this.__media.addListener(this.__updateMedia) + } + + val = this.__media.matches + } + else if (this.__media !== void 0) { + this.__media.removeListener(this.__updateMedia) + this.__media = void 0 + } + + this.isActive = val === true + + document.body.classList.remove(`body--${val === true ? 'light' : 'dark'}`) + document.body.classList.add(`body--${val === true ? 'dark' : 'light'}`) + }, + + toggle () { + Dark.set(Dark.isActive === false) + }, + + __media: void 0 +} + +export default Dark diff --git a/src/plugins/Dark.json b/src/plugins/Dark.json new file mode 100644 index 00000000000..d0870d957e2 --- /dev/null +++ b/src/plugins/Dark.json @@ -0,0 +1,42 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/dark" + }, + + "injection": "$q.dark", + + "addedIn": "v1.3", + + "props": { + "isActive": { + "type": "Boolean", + "desc": "Is Dark mode active? Has value `null` when on SSR and dark set to `auto`", + "reactive": true + }, + + "mode": { + "type": [ "Boolean", "String" ], + "desc": "Dark mode configuration (not status)", + "values": [ "auto", "(Boolean) true", "(Boolean) false" ], + "reactive": true + } + }, + + "methods": { + "set": { + "desc": "Set dark mode status", + "params": { + "status": { + "type": [ "Boolean", "String" ], + "desc": "Dark mode status", + "values": [ "(Boolean) true", "(Boolean) false", "auto" ], + "required": true + } + } + }, + + "toggle": { + "desc": "Toggle dark mode status" + } + } +} diff --git a/src/plugins/Dialog.js b/src/plugins/Dialog.js new file mode 100644 index 00000000000..16203870d4b --- /dev/null +++ b/src/plugins/Dialog.js @@ -0,0 +1,8 @@ +import DialogPlugin from '../components/dialog-plugin/DialogPlugin.js' +import globalDialog from '../utils/private/global-dialog.js' + +export default { + install ({ $q }) { + this.create = $q.dialog = globalDialog(DialogPlugin) + } +} diff --git a/src/plugins/Dialog.json b/src/plugins/Dialog.json new file mode 100644 index 00000000000..05df752f679 --- /dev/null +++ b/src/plugins/Dialog.json @@ -0,0 +1,348 @@ +{ + "mixins": [ "utils/private/global-dialog" ], + + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/dialog" + }, + + "injection": "$q.dialog", + + "methods": { + "create": { + "tsInjectionPoint": true, + "params": { + "opts": { + "desc": "Dialog options", + "tsType": "QDialogOptions", + "definition": { + "title": { + "type": "String", + "desc": "A text for the heading title of the dialog", + "examples": [ "Continue?" ] + }, + + "message": { + "type": "String", + "desc": "A text with more information about what needs to be input, selected or confirmed.", + "examples": [ "Are you certain you want to continue?" ] + }, + + "html": { + "type": "Boolean", + "desc": "Render title and message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + + "position": { + "type": "String", + "desc": "Position of the Dialog on screen. Standard is centered.", + "values": [ "top", "right", "bottom", "left", "standard" ], + "default": "standard" + }, + + "prompt": { + "type": "Object", + "desc": "An object definition of the input field for the prompting question.", + "examples": [ "prompt: { model: this.promptVal, type: 'number' }" ], + "definition": { + "model": { + "type": "String", + "desc": "The initial value of the input", + "required": true, + "__exemption": [ "examples" ] + }, + + "type": { + "type": "String", + "desc": "Optional property to determine the input field type", + "default": "text", + "examples": [ "text", "number", "textarea" ] + }, + + "isValid": { + "type": "Function", + "desc": "Is typed content valid?", + "params": { + "val": { + "type": "String", + "desc": "The value of the input", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Boolean", + "desc": "The text passed validation or not" + } + }, + + "attrs": { + "type": "Object", + "desc": "Attributes to pass to prompt control", + "examples": [ "{ autocomplete: 'off' }" ], + "addedIn": "v1.9.12" + }, + + "label": { + "type": "String", + "desc": "A text label that will “float” up above the input field, once the field gets focus", + "examples": [ "Username" ], + "addedIn": "v1.9.3" + }, + + "stackLabel": { + "type": "Boolean", + "desc": "Label will be always shown above the field regardless of field content (if any)", + "addedIn": "v1.9.3" + }, + + "filled": { + "type": "Boolean", + "desc": "Use 'filled' design for the field", + "addedIn": "v1.9.3" + }, + + "outlined": { + "type": "Boolean", + "desc": "Use 'outlined' design for the field", + "addedIn": "v1.9.3" + }, + + "standout": { + "type": [ "Boolean", "String" ], + "desc": "Use 'standout' design for the field; Specifies classes to be applied when focused (overriding default ones)", + "examples": [ + "standout", + "standout=\"bg-primary text-white\"" + ], + "addedIn": "v1.9.3" + }, + + "rounded": { + "extends": "rounded", + "addedIn": "v1.12.3" + }, + + "square": { + "type": "Boolean", + "desc": "Remove border-radius so borders are squared; Overrides 'rounded' prop", + "addedIn": "v1.12.3" + }, + + "counter": { + "type": "Boolean", + "desc": "Show an automatic counter on bottom right", + "addedIn": "v1.12.3" + }, + + "maxlength": { + "type": [ "String", "Number" ], + "desc": "Specify a max length of model", + "examples": [ "12" ], + "addedIn": "v1.12.3" + }, + + "prefix": { + "type": "String", + "desc": "Prefix", + "examples": [ "$" ], + "addedIn": "v1.12.3" + }, + + "suffix": { + "type": "String", + "desc": "Suffix", + "examples": [ "@gmail.com" ], + "addedIn": "v1.12.3" + } + } + }, + + "options": { + "type": "Object", + "desc": "An object definition for creating the selection form content", + "examples": [ "{ model: this.dialogSelection, type: 'radio', items: [...listOfItems] }" ], + "definition": { + "model": { + "type": [ "String", "Array" ], + "desc": "The value of the selection (String if it's of type radio or Array otherwise)", + "required": true, + "examples": [ "[]" ] + }, + + "type": { + "type": "String", + "desc": "The type of selection", + "default": "radio", + "values": [ "radio", "checkbox", "toggle" ] + }, + + "items": { + "type": "Array", + "desc": "The list of options to interact with; Equivalent to options prop of the QOptionsGroup component", + "examples": [ + "[ { label: 'Option 1', value: 'op1' }, { label: 'Option 2', value: 'op2' }, { label: 'Option 3', value: 'op3' } ]" + ] + }, + + "isValid": { + "type": "Function", + "desc": "Is the model valid?", + "params": { + "model": { + "type": [ "String", "Array" ], + "desc": "The current model (String if it's of type radio or Array otherwise)", + "examples": [ + "opt2", + "[ 'opt1' ]", + "[]", + "[ 'opt1', 'opt3' ]" + ] + } + }, + "returns": { + "type": "Boolean", + "desc": "The selection passed validation or not" + } + } + } + }, + + "progress": { + "type": [ "Boolean", "Object" ], + "desc": "Display a Quasar spinner (if value is true, then the defaults are used); Useful for conveying the idea that something is happening behind the covers; Tip: use along with persistent, ok: false and update() method", + "definition": { + "spinner": { + "type": "Component", + "desc": "One of the QSpinners" + }, + "color": { + "extends": "color" + } + }, + "addedIn": "v1.14" + }, + + "ok": { + "type": [ "String", "Object", "Boolean" ], + "desc": "Props for an 'OK' button", + "definition": { + "...props": { + "type": "Any", + "desc": "See QBtn for available props", + "__exemption": [ "examples" ] + } + } + }, + + "cancel": { + "type": [ "String", "Object", "Boolean" ], + "desc": "Props for a 'CANCEL' button", + "definition": { + "...props": { + "type": "Any", + "desc": "See QBtn for available props", + "__exemption": [ "examples" ] + } + } + }, + + "focus": { + "type": "String", + "desc": "What button to focus, unless you also have 'prompt' or 'options'", + "values": [ "ok", "cancel", "none" ], + "default": "ok", + "addedIn": "v1.5" + }, + + "stackButtons": { + "type": "Boolean", + "desc": "Makes buttons be stacked instead of vertically aligned" + }, + + "color": { + "extends": "color" + }, + + "dark": { + "extends": "dark", + "desc": "Apply dark mode" + }, + + "persistent": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog if clicking outside of it or hitting ESC key; Also, an app route change won't dismiss it" + }, + + "noEscDismiss": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog by hitting ESC key; No need to set it if 'persistent' prop is also set" + }, + + "noBackdropDismiss": { + "type": "Boolean", + "desc": "User cannot dismiss Dialog by clicking outside of it; No need to set it if 'persistent' prop is also set" + }, + + "noRouteDismiss": { + "type": "Boolean", + "desc": "Changing route app won't dismiss Dialog; No need to set it if 'persistent' prop is also set" + }, + + "seamless": { + "type": "Boolean", + "desc": "Put Dialog into seamless mode; Does not use a backdrop so user is able to interact with the rest of the page too" + }, + + "maximized": { + "type": "Boolean", + "desc": "Put Dialog into maximized mode" + }, + + "fullWidth": { + "type": "Boolean", + "desc": "Dialog will try to render with same width as the window" + }, + + "fullHeight": { + "type": "Boolean", + "desc": "Dialog will try to render with same height as the window" + }, + + "transitionShow": { + "extends": "transition", + "default": "scale" + }, + + "transitionHide": { + "extends": "transition", + "default": "scale" + }, + + "component": { + "type": "Any", + "desc": "Use custom dialog component; use along with 'parent' prop where possible; if using this prop, all others described here will be supplied to your custom component", + "__exemption": [ "examples" ] + }, + + "parent": { + "type": "Object", + "desc": "Required if using 'component' prop and you need access to vuex store, router and so on; Specify Vue parent component", + "examples": [ "parent: this" ] + }, + + "root": { + "type": "Object", + "desc": "Deprecated alias for parent", + "examples": [ "root: this" ] + }, + + "...props": { + "type": "Any", + "desc": "User defined props which will be forwarded to underlying custom component if 'component' prop is used", + "__exemption": [ "examples" ] + } + } + } + } + } + } +} diff --git a/src/plugins/Interaction.js b/src/plugins/Interaction.js new file mode 100644 index 00000000000..04de2c73d6f --- /dev/null +++ b/src/plugins/Interaction.js @@ -0,0 +1,211 @@ +import Vue from 'vue' + +import { isSSR, client } from './Platform.js' +import { listenOpts, noop, prevent, stopAndPrevent } from '../utils/event.js' + +const isJapanese = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/ +const isChinese = /[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u +const isKorean = /[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/ +const isPlainText = /[a-z0-9_ -]$/i + +const props = [ + 'isKeyboard', + 'isComposing', + + 'isPointer', + 'isMouse', + 'isTouch', + 'isDrag', + + 'isContext', + + 'isPending', + + 'event' +] + +function getObject () { + return props.reduce((acc, type) => { + acc[type] = type === 'event' ? null : false + return acc + }, {}) +} + +const config = getObject() +config.isComposing = void 0 + +const eventsTouch = [ + ['touchstart', { ...config, isTouch: true, isPointer: true, isPending: true }, true], + ['touchend', { ...config, isTouch: true, isPointer: true, isPending: false }], + ['touchcancel', { ...config, isTouch: true, isPointer: true, isPending: false }] +] + +const eventsCleanClick = ['mousestart', 'touchstart', 'dragstart'] + +const eventsTouchEnd = eventsTouch.slice(1) + +const { passiveCapture, notPassiveCapture } = listenOpts + +const preventClickCleanupHandlers = [] + +function clickCleanup () { + const { documentElement } = document + const fns = preventClickCleanupHandlers.slice() + + preventClickCleanupHandlers.length = 0 + + fns.forEach(fn => { + documentElement.removeEventListener('click', fn, notPassiveCapture) + }) +} + +const Interaction = { + install ($q, queues) { + if (isSSR === true) { + queues.server.push((q) => { + q.interaction = getObject() + q.interaction.preventClick = noop + }) + return + } + + Object.assign(this, getObject()) + + const self = this + + props.forEach(prop => { + Vue.util.defineReactive(self, prop, self[prop]) + }) + Vue.util.defineReactive($q, 'interaction', this) + + const fnFactory = (eventType, props, touchLocal) => { + const setStateFns = Object.keys(props) + .filter(key => props[key] !== void 0) + .map(key => { + const value = props[key] + + if (typeof value === 'function') { + return event => { + self[key] = value(event) + } + } + + return () => { + self[key] = value + } + }) + + const touchLocalFn = typeof touchLocal === 'function' + ? touchLocal + : ( + touchLocal === true + ? event => { + eventsTouchEnd.forEach(setConfig => { + const fn = fnFactory(setConfig[0], setConfig[1], () => { + eventsTouchEnd.forEach(clearConfig => { + event.target.removeEventListener(clearConfig[0], fn, passiveCapture) + }) + }) + event.target.addEventListener(config[0], fn, passiveCapture) + }) + } + : noop + ) + + const clickCleanupFn = eventsCleanClick.includes(eventType) === true + ? clickCleanup + : noop + + return event => { + setStateFns.forEach(fn => { + fn(event) + }) + + self.event = event + + touchLocalFn(event) + + clickCleanupFn() + } + } + + const { documentElement } = document + const checkComposition = client.is.firefox === true + ? text => isPlainText.test(text) === false + : text => (isJapanese.test(text) === true || isChinese.test(text) === true || isKorean.test(text) === true) + const events = [ + ['keydown', { ...config, isKeyboard: true, isPending: true }], + ['keypress', { ...config, isKeyboard: true, isPending: true }], + ['keyup', { ...config, isKeyboard: true, isPending: false }], + + client.is.ios === true + ? ['compositionstart', { + isComposing: ev => { + ev.target.qComposing = true + return true + } + }] + : ['compositionupdate', { + isComposing: ev => { + if ( + ev.target.qComposing !== true && + typeof ev.data === 'string' && + checkComposition(ev.data) === true + ) { + ev.target.qComposing = true + } + return true + } + }], + ['compositionend', { + isComposing: ev => { + if (ev.target.qComposing === true) { + ev.target.qComposing = false + } + return false + } + }], + + ['mousedown', { ...config, isMouse: true, isPointer: true, isPending: true }], + ['mouseup', { ...config, isMouse: true, isPointer: true, isPending: false }], + + ['dragstart', { isKeyboard: false, isDrag: true, isPending: true }], + ['dragend', { isKeyboard: false, isDrag: true, isPending: false }], + ['dragcancel', { isKeyboard: false, isDrag: true, isPending: false }], + ['drop', { isKeyboard: false, isDrag: true, isPending: false }], + + ['contextmenu', { isContext: true, isPending: false }] + ] + + events.forEach(config => { + documentElement.addEventListener(config[0], fnFactory.apply(this, config), passiveCapture) + }) + + if (client.has.touch === true) { + eventsTouch.forEach(config => { + documentElement.addEventListener(config[0], fnFactory.apply(this, config), passiveCapture) + }) + } + }, + + preventClick (target, stop) { + const { documentElement } = document + const fn = evt => { + if (target === evt.target) { + if (stop === true) { + stopAndPrevent(evt) + } + else { + prevent(evt) + } + } + clickCleanup() + } + + documentElement.addEventListener('click', fn, notPassiveCapture) + + preventClickCleanupHandlers.push(fn) + } +} + +export default Interaction diff --git a/src/plugins/Interaction.json b/src/plugins/Interaction.json new file mode 100644 index 00000000000..2d6fe12aae3 --- /dev/null +++ b/src/plugins/Interaction.json @@ -0,0 +1,84 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/options/interaction-plugins" + }, + + "injection": "$q.interaction", + + "addedIn": "v1.4.6", + + "props": { + "isKeyboard": { + "type": "Boolean", + "desc": "Last event was a keyboard one", + "reactive": true + }, + + "isComposing": { + "type": "Boolean", + "desc": "Last event was a keyboard composing one", + "reactive": true + }, + + "isPointer": { + "type": "Boolean", + "desc": "Last event was a pointer one (mouse or touch)", + "reactive": true + }, + + "isMouse": { + "type": "Boolean", + "desc": "Last event was a mouse one", + "reactive": true + }, + + "isTouch": { + "type": "Boolean", + "desc": "Last event was a touch one", + "reactive": true + }, + + "isDrag": { + "type": "Boolean", + "desc": "Last event was a drag and drop one", + "reactive": true + }, + + "isContext": { + "type": "Boolean", + "desc": "Last event was a context menu one", + "reactive": true + }, + + "isPending": { + "type": "Boolean", + "desc": "Last event is in progress (start event without a cancel or end event)", + "reactive": true + }, + + "event": { + "type": "Object", + "desc": "Last event", + "__exemption": [ "examples" ], + "reactive": true + } + }, + + "methods": { + "preventClick": { + "desc": "Prevent next click event on a target element", + "params": { + "target": { + "type": "Element", + "desc": "The element where it should prevent click", + "__exemption": [ "examples" ] + }, + + "stop": { + "type": "Boolean", + "desc": "Stop propagation of the event" + } + } + } + } +} diff --git a/src/plugins/Loading.js b/src/plugins/Loading.js new file mode 100644 index 00000000000..38d100e8777 --- /dev/null +++ b/src/plugins/Loading.js @@ -0,0 +1,193 @@ +import Vue from 'vue' + +import QSpinner from '../components/spinner/QSpinner.js' +import { isSSR } from './Platform.js' +import cache from '../utils/private/cache.js' +import { isObject } from '../utils/is.js' +import { preventScroll } from '../mixins/prevent-scroll.js' + +let + vm, + uid = 0, + timeout, + props = {}, + activeGroups = {} + +const originalDefaults = { + group: '__default_quasar_group__', + delay: 0, + message: false, + spinnerSize: 80, + spinnerColor: 'white', + messageColor: 'white', + backgroundColor: 'black', + spinner: QSpinner, + customClass: '' +} + +const defaults = { ...originalDefaults } + +function registerProps (opts) { + if (opts && opts.group !== void 0 && activeGroups[ opts.group ] !== void 0) { + return Object.assign(activeGroups[ opts.group ], opts) + } + + const newProps = isObject(opts) === true && opts.ignoreDefaults === true + ? { ...originalDefaults, ...opts } + : { ...defaults, ...opts } + + activeGroups[ newProps.group ] = newProps + return newProps +} + +const Loading = { + isActive: false, + + show (opts) { + if (isSSR === true) { return } + + props = registerProps(opts) + const { group } = props + + props.customClass += ` text-${props.backgroundColor}` + + this.isActive = true + + if (vm !== void 0) { + props.uid = uid + vm.$forceUpdate() + } + else { + props.uid = ++uid + clearTimeout(timeout) + + timeout = setTimeout(() => { + timeout = void 0 + + const node = document.createElement('div') + document.body.appendChild(node) + + vm = new Vue({ + name: 'QLoading', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}) + }, + + el: node, + + mounted () { + preventScroll(true) + }, + + render: (h) => { + return h('transition', { + key: 'tr', + props: { + name: 'q-transition--fade', + appear: true + }, + on: cache(this, 'tr', { + 'after-leave': () => { + // might be called to finalize + // previous leave, even if it was cancelled + if (this.isActive !== true && vm !== void 0) { + preventScroll(false) + vm.$destroy() + vm.$el.remove() + vm = void 0 + } + } + }) + }, [ + this.isActive === true ? h('div', { + staticClass: 'q-loading fullscreen column flex-center z-max', + key: props.uid, + class: props.customClass.trim() + }, [ + h(props.spinner, { + props: { + color: props.spinnerColor, + size: props.spinnerSize + } + }), + + (props.message && h('div', { + class: `text-${props.messageColor}`, + domProps: { + [props.sanitize === true ? 'textContent' : 'innerHTML']: props.message + } + })) || void 0 + ]) : null + ]) + } + }) + }, props.delay) + } + + return paramProps => { + // if we don't have params (or not an Object param) then we need to hide this group + if (paramProps === void 0 || Object(paramProps) !== paramProps) { + this.hide(group) + return + } + + // else we have params so we need to update this group + this.show({ ...paramProps, group }) + } + }, + + hide (group) { + if (this.isActive === true) { + if (group === void 0) { + // clear out any active groups + activeGroups = {} + } + else if (activeGroups[ group ] === void 0) { + // we've already hidden it so nothing to do + return + } + else { + // remove active group + delete activeGroups[ group ] + + const keys = Object.keys(activeGroups) + + // if there are other groups registered then + // show last registered one since that one is still active + if (keys.length !== 0) { + // get last registered group + const lastGroup = keys[ keys.length - 1 ] + this.show({ group: lastGroup }) + return + } + } + + if (timeout !== void 0) { + clearTimeout(timeout) + timeout = void 0 + } + + this.isActive = false + } + }, + + setDefaults (opts) { + isObject(opts) === true && Object.assign(defaults, opts) + }, + + install ({ $q, cfg: { loading } }) { + this.setDefaults(loading) + $q.loading = this + } +} + +if (isSSR === false) { + Vue.util.defineReactive(Loading, 'isActive', Loading.isActive) +} + +export default Loading diff --git a/src/plugins/Loading.json b/src/plugins/Loading.json new file mode 100644 index 00000000000..1d6460bcfbd --- /dev/null +++ b/src/plugins/Loading.json @@ -0,0 +1,216 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/loading" + }, + + "injection": "$q.loading", + + "quasarConfOptions": { + "propName": "loading", + "definition": { + "delay": { + "type": "Number", + "desc": "Wait a number of millisecond before showing; Not worth showing for 100ms for example then hiding it, so wait until you're sure it's a process that will take some considerable amount of time", + "examples": [ 400 ] + }, + "message": { + "type": "String", + "desc": "Message to display", + "examples": [ "Processing your request" ] + }, + "group": { + "type": "String", + "desc": "Default Loading group name", + "default": "__default_quasar_group__", + "examples": [ "default-group-name" ], + "addedIn": "v1.20" + }, + "sanitize": { + "extends": "sanitize", + "desc": "Force use of textContent instead of innerHTML to render message; Use it when the message might be unsafe (from user input)" + }, + "spinnerSize": { + "type": "Number", + "desc": "Spinner size (in pixels)", + "examples": [ 60 ] + }, + "spinnerColor": { + "extends": "color", + "desc": "Color name for spinner from the Quasar Color Palette" + }, + "messageColor": { + "extends": "color", + "desc": "Color name for text from the Quasar Color Palette" + }, + "backgroundColor": { + "extends": "color", + "desc": "Color name for background from the Quasar Color Palette" + }, + "spinner": { + "type": "Component", + "desc": "One of the QSpinners" + }, + "customClass": { + "type": "String", + "desc": "Add a CSS class to easily customize the component", + "examples": [ "my-class" ] + } + } + }, + + "props": { + "isActive": { + "type": "Boolean", + "desc": "Is Loading active?", + "reactive": true + } + }, + + "methods": { + "show": { + "desc": "Activate and show", + "params": { + "opts": { + "type": "Object", + "desc": "All props are optional", + "definition": { + "delay": { + "type": "Number", + "desc": "Wait a number of millisecond before showing; Not worth showing for 100ms for example then hiding it, so wait until you're sure it's a process that will take some considerable amount of time", + "examples": [ 400 ] + }, + "message": { + "type": "String", + "desc": "Message to display", + "examples": [ "Processing your request" ] + }, + "group": { + "type": "String", + "desc": "Loading group name", + "examples": [ "some-api-call" ], + "addedIn": "v1.20" + }, + "sanitize": { + "extends": "sanitize", + "desc": "Force use of textContent instead of innerHTML to render message; Use it when the message might be unsafe (from user input)" + }, + "spinnerSize": { + "type": "Number", + "desc": "Spinner size (in pixels)", + "examples": [ 60 ] + }, + "spinnerColor": { + "extends": "color", + "desc": "Color name for spinner from the Quasar Color Palette" + }, + "messageColor": { + "extends": "color", + "desc": "Color name for text from the Quasar Color Palette" + }, + "backgroundColor": { + "extends": "color", + "desc": "Color name for background from the Quasar Color Palette" + }, + "spinner": { + "type": "Component", + "desc": "One of the QSpinners" + }, + "customClass": { + "type": "String", + "desc": "Add a CSS class to easily customize the component", + "examples": [ "my-class" ] + }, + "ignoreDefaults": { + "type": "Boolean", + "desc": "Ignore the default configuration (set by setDefaults()) for this instance only", + "addedIn": "v1.1" + } + } + } + }, + "returns": { + "type": "Function", + "desc": "Calling this function with no parameters hides the group; When called with one Object parameter then it updates the Loading group (specified properties are shallow merged with the group ones; note that group cannot be changed while updating and it is ignored)", + "params": { + "props": { + "type": "Object", + "required": false, + "desc": "Loading properties that will be shallow merged to the group ones; (See 'opts' param of 'show()' for object properties, except 'group')", + "__exemption": [ "definition", "examples" ] + } + }, + "returns": null, + "addedIn": "v1.20" + } + }, + + "hide": { + "desc": "Hide it", + "params": { + "group": { + "type": "String", + "desc": "Optional Loading group name to hide instead of hiding all groups", + "required": false, + "examples": [ "some-api-call" ], + "addedIn": "v1.20" + } + } + }, + + "setDefaults": { + "desc": "Merge options into the default ones", + "params": { + "opts": { + "type": "Object", + "desc": "Pick the subprop you want to define", + "required": true, + "definition": { + "delay": { + "type": "Number", + "desc": "Wait a number of millisecond before showing; Not worth showing for 100ms for example then hiding it, so wait until you're sure it's a process that will take some considerable amount of time", + "examples": [ 400 ] + }, + "message": { + "type": "String", + "desc": "Message to display", + "examples": [ "Processing your request" ] + }, + "group": { + "type": "String", + "desc": "Default Loading group name", + "default": "__default_quasar_group__", + "examples": [ "default-group-name" ], + "addedIn": "v1.20" + }, + "spinnerSize": { + "type": "Number", + "desc": "Spinner size (in pixels)", + "examples": [ 60 ] + }, + "spinnerColor": { + "extends": "color", + "desc": "Color name for spinner from the Quasar Color Palette" + }, + "messageColor": { + "extends": "color", + "desc": "Color name for text from the Quasar Color Palette" + }, + "backgroundColor": { + "extends": "color", + "desc": "Color name for background from the Quasar Color Palette" + }, + "spinner": { + "type": "Component", + "desc": "One of the QSpinners" + }, + "customClass": { + "type": "String", + "desc": "Add a CSS class to easily customize the component", + "examples": [ "my-class" ] + } + } + } + } + } + } +} diff --git a/src/plugins/Loading.sass b/src/plugins/Loading.sass new file mode 100644 index 00000000000..207f652d873 --- /dev/null +++ b/src/plugins/Loading.sass @@ -0,0 +1,22 @@ +.q-loading + color: $light-text + color: var(--q-color-light-text) + + // override q-transition--fade's absolute position + position: fixed !important + + &:before + content: '' + position: fixed + top: 0 + right: 0 + bottom: 0 + left: 0 + background: currentColor + opacity: .5 + z-index: -1 + + > div + margin: 40px 20px 0 + max-width: 450px + text-align: center diff --git a/src/plugins/Loading.styl b/src/plugins/Loading.styl new file mode 100644 index 00000000000..207f652d873 --- /dev/null +++ b/src/plugins/Loading.styl @@ -0,0 +1,22 @@ +.q-loading + color: $light-text + color: var(--q-color-light-text) + + // override q-transition--fade's absolute position + position: fixed !important + + &:before + content: '' + position: fixed + top: 0 + right: 0 + bottom: 0 + left: 0 + background: currentColor + opacity: .5 + z-index: -1 + + > div + margin: 40px 20px 0 + max-width: 450px + text-align: center diff --git a/src/plugins/LoadingBar.js b/src/plugins/LoadingBar.js new file mode 100644 index 00000000000..df47b720579 --- /dev/null +++ b/src/plugins/LoadingBar.js @@ -0,0 +1,69 @@ +import Vue from 'vue' + +import { isSSR } from './Platform.js' +import { noop } from '../utils/event.js' +import { isObject } from '../utils/is.js' +import QAjaxBar from '../components/ajax-bar/QAjaxBar.js' + +export default { + isActive: false, + start: noop, + stop: noop, + increment: noop, + setDefaults: noop, + + install ({ $q, cfg }) { + $q.loadingBar = this + + if (isSSR === true) { + return + } + + const props = cfg.loadingBar !== void 0 + ? { ...cfg.loadingBar } + : {} + const on = { + start: () => { + this.isActive = true + }, + + stop: () => { + this.isActive = false + } + } + + const bar = new Vue({ + name: 'LoadingBar', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}) + }, + + render: h => h(QAjaxBar, { + ref: 'bar', + props, + on + }) + }).$mount().$refs.bar + + Object.assign(this, { + start: bar.start, + stop: bar.stop, + increment: bar.increment, + setDefaults: opts => { + isObject(opts) === true && Object.assign(props, opts) + bar.$parent.$forceUpdate() + } + }) + + Vue.util.defineReactive(this, 'isActive', this.isActive) + Vue.util.defineReactive(bar, 'isActive', this.isActive) + bar.setDefaults = this.setDefaults + + document.body.appendChild(bar.$parent.$el) + } +} diff --git a/src/plugins/LoadingBar.json b/src/plugins/LoadingBar.json new file mode 100644 index 00000000000..d2774a42a7b --- /dev/null +++ b/src/plugins/LoadingBar.json @@ -0,0 +1,66 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/loading-bar" + }, + + "injection": "$q.loadingBar", + + "quasarConfOptions": { + "propName": "loadingBar", + "definition": { + "...props": { + "type": "Object", + "desc": "QAjaxBar component props, EXCEPT for 'hijack-filter'", + "__exemption": [ "examples" ] + } + } + }, + + "props": { + "isActive": { + "type": "Boolean", + "desc": "Is LoadingBar active?", + "reactive": true + } + }, + + "methods": { + "start": { + "desc": "Notify bar you've started a background activity", + "params": { + "speed": { + "type": "Number", + "desc": "Delay (in milliseconds) between bar progress increments", + "examples": [ 150 ] + } + } + }, + + "stop": { + "desc": "Notify bar one background activity has finalized" + }, + + "increment": { + "desc": "Manually trigger a bar progress increment", + "params": { + "amount": { + "type": "Number", + "desc": "Amount (0.0 < x < 1.0) to increment with", + "examples": [ 0.22 ] + } + } + }, + + "setDefaults": { + "desc": "Set the inner QAjaxBar's props", + "params": { + "...props": { + "type": "Object", + "desc": "QAjaxBar component props", + "required": true, + "__exemption": [ "examples" ] + } + } + } + } +} diff --git a/src/plugins/LocalStorage.js b/src/plugins/LocalStorage.js new file mode 100644 index 00000000000..1327e510216 --- /dev/null +++ b/src/plugins/LocalStorage.js @@ -0,0 +1,13 @@ +import { isSSR, client } from './Platform.js' +import { getEmptyStorage, getStorage } from '../utils/private/web-storage.js' + +export default { + install ({ $q }) { + const storage = isSSR === true || client.has.webStorage === false + ? getEmptyStorage() + : getStorage('local') + + $q.localStorage = storage + Object.assign(this, storage) + } +} diff --git a/src/plugins/LocalStorage.json b/src/plugins/LocalStorage.json new file mode 100644 index 00000000000..bed9277fb39 --- /dev/null +++ b/src/plugins/LocalStorage.json @@ -0,0 +1,5 @@ +{ + "mixins": [ "utils/private/web-storage" ], + + "injection": "$q.localStorage" +} diff --git a/src/plugins/Meta.js b/src/plugins/Meta.js new file mode 100644 index 00000000000..530c017ed56 --- /dev/null +++ b/src/plugins/Meta.js @@ -0,0 +1,318 @@ +import Vue from 'vue' + +import { isSSR, fromSSR } from './Platform.js' +import extend from '../utils/extend.js' + +let updateId, ssrTakeover + +function normalize (meta) { + if (meta.title) { + meta.title = meta.titleTemplate + ? meta.titleTemplate(meta.title) + : meta.title + delete meta.titleTemplate + } + + ;[['meta', 'content'], ['link', 'href']].forEach(type => { + const + metaType = meta[type[0]], + metaProp = type[1] + + for (const name in metaType) { + const metaLink = metaType[name] + + if (metaLink.template) { + if (Object.keys(metaLink).length === 1) { + delete metaType[name] + } + else { + metaLink[metaProp] = metaLink.template(metaLink[metaProp] || '') + delete metaLink.template + } + } + } + }) +} + +function changed (old, def) { + if (Object.keys(old).length !== Object.keys(def).length) { + return true + } + for (const key in old) { + if (old[key] !== def[key]) { + return true + } + } +} + +function bodyFilter (name) { + return ['class', 'style'].includes(name) === false +} + +function htmlFilter (name) { + return ['lang', 'dir'].includes(name) === false +} + +function diff (meta, other) { + const add = {}, remove = {} + + if (meta === void 0) { + return { add: other, remove } + } + + if (meta.title !== other.title) { + add.title = other.title + } + + ;['meta', 'link', 'script', 'htmlAttr', 'bodyAttr'].forEach(type => { + const old = meta[type], cur = other[type] + remove[type] = [] + + if (old === void 0 || old === null) { + add[type] = cur + return + } + + add[type] = {} + + for (const key in old) { + if (cur.hasOwnProperty(key) === false) { + remove[type].push(key) + } + } + for (const key in cur) { + if (old.hasOwnProperty(key) === false) { + add[type][key] = cur[key] + } + else if (changed(old[key], cur[key]) === true) { + remove[type].push(key) + add[type][key] = cur[key] + } + } + }) + + return { add, remove } +} + +function apply ({ add, remove }) { + if (add.title) { + document.title = add.title + } + + if (Object.keys(remove).length > 0) { + ['meta', 'link', 'script'].forEach(type => { + remove[type].forEach(name => { + document.head.querySelector(`${type}[data-qmeta="${name}"]`).remove() + }) + }) + remove.htmlAttr.filter(htmlFilter).forEach(name => { + document.documentElement.removeAttribute(name) + }) + remove.bodyAttr.filter(bodyFilter).forEach(name => { + document.body.removeAttribute(name) + }) + } + + ;['meta', 'link', 'script'].forEach(type => { + const metaType = add[type] + + for (const name in metaType) { + const tag = document.createElement(type) + for (const att in metaType[name]) { + if (att !== 'innerHTML') { + tag.setAttribute(att, metaType[name][att]) + } + } + tag.setAttribute('data-qmeta', name) + if (type === 'script') { + tag.innerHTML = metaType[name].innerHTML || '' + } + document.head.appendChild(tag) + } + }) + Object.keys(add.htmlAttr).filter(htmlFilter).forEach(name => { + document.documentElement.setAttribute(name, add.htmlAttr[name] || '') + }) + Object.keys(add.bodyAttr).filter(bodyFilter).forEach(name => { + document.body.setAttribute(name, add.bodyAttr[name] || '') + }) +} + +function parseMeta (component, meta) { + if (component._inactive === true) { return } + + // if it has meta + if (hasMeta(component) === true) { + extend(true, meta, component.__qMeta) + + if (component.$options.meta.stopPropagation === true) { + return + } + } + + component.$children.forEach(child => { + parseMeta(child, meta) + }) +} + +function updateClient () { + if (ssrTakeover === true) { + ssrTakeover = false + this.$root.__currentMeta = window.__Q_META__ + } + + const meta = { + title: '', + titleTemplate: null, + meta: {}, + link: {}, + script: {}, + htmlAttr: {}, + bodyAttr: {} + } + parseMeta(this.$root, meta) + normalize(meta) + + apply(diff(this.$root.__currentMeta, meta)) + this.$root.__currentMeta = meta +} + +function getAttr (seed) { + return att => { + const val = seed[att] + return att + (val !== true && val !== void 0 ? `="${val}"` : '') + } +} + +function getHead (meta) { + let output = '' + if (meta.title) { + output += `${meta.title}` + } + ;['meta', 'link', 'script'].forEach(type => { + const metaType = meta[type] + + for (const att in metaType) { + const attrs = Object.keys(metaType[att]) + .filter(att => att !== 'innerHTML') + .map(getAttr(metaType[att])) + + output += `<${type} ${attrs.join(' ')} data-qmeta="${att}">` + if (type === 'script') { + output += `${metaType[att].innerHTML || ''}` + } + } + }) + return output +} + +function getServerMeta (app, html, ctx) { + const meta = { + title: '', + titleTemplate: null, + meta: {}, + link: {}, + htmlAttr: {}, + bodyAttr: {}, + noscript: {} + } + + parseMeta(app, meta) + normalize(meta) + + const nonce = ctx !== void 0 && ctx.nonce !== void 0 + ? ` nonce="${ctx.nonce}"` + : '' + + const tokens = { + '%%Q_HTML_ATTRS%%': Object.keys(meta.htmlAttr) + .filter(htmlFilter) + .map(getAttr(meta.htmlAttr)) + .join(' '), + '%%Q_HEAD_TAGS%%': getHead(meta), + '%%Q_BODY_ATTRS%%': Object.keys(meta.bodyAttr) + .filter(bodyFilter) + .map(getAttr(meta.bodyAttr)) + .join(' '), + '%%Q_BODY_TAGS%%': Object.keys(meta.noscript) + .map(name => ``) + .join('') + + `window.__Q_META__=${delete meta.noscript && JSON.stringify(meta)}` + } + + Object.keys(tokens).forEach(key => { + html = html.replace(key, tokens[key]) + }) + + return html +} + +function beforeCreate () { + if (typeof this.$options.meta === 'function') { + if (this.$options.computed === void 0) { + this.$options.computed = {} + } + this.$options.computed.__qMeta = this.$options.meta + } + else if (hasMeta(this) === true) { + this.__qMeta = this.$options.meta + } +} + +// needs to be really fast +function hasMeta (vm) { + return vm.$options.meta !== void 0 && + vm.$options.meta !== null +} + +function triggerMeta () { + hasMeta(this) === true && this.__qMetaUpdate() +} + +export default { + install ({ queues }) { + if (isSSR === true) { + Vue.prototype.$getMetaHTML = app => { + return (html, ctx) => getServerMeta(app, html, ctx) + } + + Vue.mixin({ beforeCreate }) + + queues.server.push((_, ctx) => { + ctx.ssr.Q_HTML_ATTRS += ' %%Q_HTML_ATTRS%%' + Object.assign(ctx.ssr, { + Q_HEAD_TAGS: '%%Q_HEAD_TAGS%%', + Q_BODY_ATTRS: '%%Q_BODY_ATTRS%%', + Q_BODY_TAGS: '%%Q_BODY_TAGS%%' + }) + }) + } + else { + ssrTakeover = fromSSR + + Vue.mixin({ + beforeCreate, + created () { + if (hasMeta(this) === true) { + this.__qMetaUnwatch = this.$watch('__qMeta', this.__qMetaUpdate) + } + }, + activated: triggerMeta, + deactivated: triggerMeta, + beforeMount: triggerMeta, + destroyed () { + if (hasMeta(this) === true) { + this.__qMetaUnwatch() + this.__qMetaUpdate() + } + }, + methods: { + __qMetaUpdate () { + clearTimeout(updateId) + updateId = setTimeout(updateClient.bind(this), 50) + } + } + }) + } + } +} diff --git a/src/plugins/Meta.json b/src/plugins/Meta.json new file mode 100644 index 00000000000..08ae587826f --- /dev/null +++ b/src/plugins/Meta.json @@ -0,0 +1,5 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/meta" + } +} diff --git a/src/plugins/Notify.js b/src/plugins/Notify.js new file mode 100644 index 00000000000..79a0f03bf8a --- /dev/null +++ b/src/plugins/Notify.js @@ -0,0 +1,566 @@ +import Vue from 'vue' + +import QAvatar from '../components/avatar/QAvatar.js' +import QIcon from '../components/icon/QIcon.js' +import QBtn from '../components/btn/QBtn.js' +import QSpinner from '../components/spinner/QSpinner.js' + +import { noop } from '../utils/event.js' +import { getBodyFullscreenElement } from '../utils/dom.js' +import debounce from '../utils/debounce.js' +import { isObject } from '../utils/is.js' + +import { isSSR } from './Platform.js' + +let uid = 0, vm + +const defaults = {} +const groups = {} +const notificationsList = {} +const positionClass = {} +const emptyRE = /^\s*$/ + +const positionList = [ + 'top-left', 'top-right', + 'bottom-left', 'bottom-right', + 'top', 'bottom', 'left', 'right', 'center' +] + +const badgePositions = [ + 'top-left', 'top-right', + 'bottom-left', 'bottom-right' +] + +const notifTypes = { + positive: { + icon: $q => $q.iconSet.type.positive, + color: 'positive' + }, + + negative: { + icon: $q => $q.iconSet.type.negative, + color: 'negative' + }, + + warning: { + icon: $q => $q.iconSet.type.warning, + color: 'warning', + textColor: 'dark' + }, + + info: { + icon: $q => $q.iconSet.type.info, + color: 'info' + }, + + ongoing: { + group: false, + timeout: 0, + spinner: true, + color: 'grey-8' + } +} + +function addNotification (config, vm, originalApi) { + if (!config) { + return logError('parameter required') + } + + let Api + const notif = { textColor: 'white' } + + if (config.ignoreDefaults !== true) { + Object.assign(notif, defaults) + } + + if (isObject(config) === false) { + if (notif.type) { + Object.assign(notif, notifTypes[notif.type]) + } + + config = { message: config } + } + + Object.assign(notif, notifTypes[config.type || notif.type], config) + + if (typeof notif.icon === 'function') { + notif.icon = notif.icon(vm.$q) + } + + if (!notif.spinner) { + notif.spinner = false + } + else if (notif.spinner === true) { + notif.spinner = QSpinner + } + + notif.meta = { + hasMedia: Boolean(notif.spinner !== false || notif.icon || notif.avatar), + hasText: hasContent(notif.message) || hasContent(notif.caption) + } + + if (notif.position) { + if (positionList.includes(notif.position) === false) { + return logError('wrong position', config) + } + } + else { + notif.position = 'bottom' + } + + if (notif.timeout === void 0) { + notif.timeout = 5000 + } + else { + const t = parseInt(notif.timeout, 10) + if (isNaN(t) || t < 0) { + return logError('wrong timeout', config) + } + notif.timeout = t + } + + if (notif.timeout === 0) { + notif.progress = false + } + else if (notif.progress === true) { + notif.meta.progressClass = 'q-notification__progress' + ( + notif.progressClass + ? ` ${notif.progressClass}` + : '' + ) + + notif.meta.progressStyle = { + animationDuration: `${notif.timeout + 1000}ms` + } + } + + const actions = ( + Array.isArray(config.actions) === true + ? config.actions + : [] + ).concat( + config.ignoreDefaults !== true && Array.isArray(defaults.actions) === true + ? defaults.actions + : [] + ).concat( + notifTypes[config.type] !== void 0 && Array.isArray(notifTypes[config.type].actions) === true + ? notifTypes[config.type].actions + : [] + ) + + const { closeBtn } = notif + closeBtn && actions.push({ + label: typeof closeBtn === 'string' + ? closeBtn + : vm.$q.lang.label.close + }) + + notif.actions = actions.map(({ handler, noDismiss, style, class: klass, attrs, ...props }) => ({ + staticClass: klass, + style, + props: { flat: true, ...props }, + attrs, + on: { + click: typeof handler === 'function' + ? () => { + handler() + noDismiss !== true && dismiss() + } + : () => { dismiss() } + } + })) + + if (notif.multiLine === void 0) { + notif.multiLine = notif.actions.length > 1 + } + + Object.assign(notif.meta, { + staticClass: 'q-notification row items-stretch' + + ` q-notification--${notif.multiLine === true ? 'multi-line' : 'standard'}` + + (notif.color !== void 0 ? ` bg-${notif.color}` : '') + + (notif.textColor !== void 0 ? ` text-${notif.textColor}` : '') + + (notif.classes !== void 0 ? ` ${notif.classes}` : ''), + + wrapperClass: 'q-notification__wrapper col relative-position border-radius-inherit ' + + (notif.multiLine === true ? 'column no-wrap justify-center' : 'row items-center'), + + contentClass: 'q-notification__content row items-center' + + (notif.multiLine === true ? '' : ' col'), + + leftClass: notif.meta.hasText === true ? 'additional' : 'single', + + attrs: { + role: 'alert', + ...notif.attrs + } + }) + + if (notif.group === false) { + notif.group = void 0 + notif.meta.group = void 0 + } + else { + if (notif.group === void 0 || notif.group === true) { + // do not replace notifications with different buttons + notif.group = [ + notif.message, + notif.caption, + notif.multiline + ].concat( + notif.actions.map(({ props }) => `${props.label}*${props.icon}`) + ).join('|') + } + + notif.meta.group = notif.group + '|' + notif.position + } + + if (notif.actions.length === 0) { + notif.actions = void 0 + } + else { + notif.meta.actionsClass = 'q-notification__actions row items-center ' + + (notif.multiLine === true ? 'justify-end' : 'col-auto') + + (notif.meta.hasMedia === true ? ' q-notification__actions--with-media' : '') + } + + if (originalApi !== void 0) { + // reset timeout if any + clearTimeout(originalApi.notif.meta.timer) + + // retain uid + notif.meta.uid = originalApi.notif.meta.uid + + // replace notif + const index = notificationsList[notif.position].indexOf(originalApi.notif) + notificationsList[notif.position][index] = notif + } + else { + const original = groups[notif.meta.group] + + // woohoo, it's a new notification + if (original === void 0) { + notif.meta.uid = uid++ + notif.meta.badge = 1 + + if (['left', 'right', 'center'].indexOf(notif.position) !== -1) { + notificationsList[notif.position].splice( + Math.floor(notificationsList[notif.position].length / 2), + 0, + notif + ) + } + else { + const action = notif.position.indexOf('top') > -1 ? 'unshift' : 'push' + notificationsList[notif.position][action](notif) + } + + if (notif.group !== void 0) { + groups[notif.meta.group] = notif + } + } + // ok, so it's NOT a new one + else { + // reset timeout if any + clearTimeout(original.meta.timer) + + if (notif.badgePosition !== void 0) { + if (badgePositions.includes(notif.badgePosition) === false) { + return logError('wrong badgePosition', config) + } + } + else { + notif.badgePosition = `top-${notif.position.indexOf('left') > -1 ? 'right' : 'left'}` + } + + notif.meta.uid = original.meta.uid + notif.meta.badge = original.meta.badge + 1 + notif.meta.badgeClass = `q-notification__badge q-notification__badge--${notif.badgePosition}` + + (notif.badgeColor !== void 0 ? ` bg-${notif.badgeColor}` : '') + + (notif.badgeTextColor !== void 0 ? ` text-${notif.badgeTextColor}` : '') + + (notif.badgeClass ? ` ${notif.badgeClass}` : '') + + const index = notificationsList[notif.position].indexOf(original) + notificationsList[notif.position][index] = groups[notif.meta.group] = notif + } + } + + const dismiss = () => { + removeNotification(notif, vm) + Api = void 0 + } + + vm.$forceUpdate() + + if (notif.timeout > 0) { + notif.meta.timer = setTimeout(() => { + dismiss() + }, notif.timeout + /* show duration */ 1000) + } + + // only non-groupable can be updated + if (notif.group !== void 0) { + return props => { + if (props !== void 0) { + logError('trying to update a grouped one which is forbidden', config) + } + else { + dismiss() + } + } + } + + Api = { + dismiss, + config, + notif + } + + if (originalApi !== void 0) { + Object.assign(originalApi, Api) + return + } + + return props => { + // if notification wasn't previously dismissed + if (Api !== void 0) { + // if no params, then we must dismiss the notification + if (props === void 0) { + Api.dismiss() + } + // otherwise we're updating it + else { + const newNotif = Object.assign({}, Api.config, props, { + group: false, + position: notif.position + }) + + addNotification(newNotif, vm, Api) + } + } + } +} + +function removeNotification (notif, vm) { + clearTimeout(notif.meta.timer) + + const index = notificationsList[notif.position].indexOf(notif) + if (index !== -1) { + if (notif.group !== void 0) { + delete groups[notif.meta.group] + } + + const el = vm.$refs['' + notif.meta.uid] + + if (el) { + const { width, height } = getComputedStyle(el) + + el.style.left = `${el.offsetLeft}px` + el.style.width = width + el.style.height = height + } + + notificationsList[notif.position].splice(index, 1) + + vm.$forceUpdate() + + if (typeof notif.onDismiss === 'function') { + notif.onDismiss() + } + } +} + +function hasContent (str) { + return str !== void 0 && + str !== null && + emptyRE.test(str) !== true +} + +function logError (error, config) { + console.error(`Notify: ${error}`, config) + return false +} + +const Notifications = { + name: 'QNotifications', + + // hide App from Vue devtools + devtools: { hide: true }, + + beforeCreate () { + // prevent error in Vue devtools + this._routerRoot === void 0 && (this._routerRoot = {}) + }, + + render (h) { + return h('div', { staticClass: 'q-notifications' }, positionList.map(pos => { + return h('transition-group', { + key: pos, + staticClass: positionClass[pos], + tag: 'div', + props: { + name: `q-notification--${pos}`, + mode: 'out-in' + } + }, notificationsList[pos].map(notif => { + const { meta } = notif + const mainChild = [] + + if (meta.hasMedia === true) { + if (notif.spinner !== false) { + mainChild.push( + h(notif.spinner, { + staticClass: 'q-notification__spinner q-notification__spinner--' + meta.leftClass, + props: { color: notif.spinnerColor, size: notif.spinnerSize } + }) + ) + } + else if (notif.icon) { + mainChild.push( + h(QIcon, { + staticClass: 'q-notification__icon q-notification__icon--' + meta.leftClass, + attrs: { role: 'img' }, + props: { name: notif.icon, color: notif.iconColor, size: notif.iconSize } + }) + ) + } + else if (notif.avatar) { + mainChild.push( + h(QAvatar, { staticClass: 'q-notification__avatar q-notification__avatar--' + meta.leftClass }, [ + h('img', { attrs: { src: notif.avatar, 'aria-hidden': 'true' } }) + ]) + ) + } + } + + if (meta.hasText === true) { + let msgChild + const msgData = { staticClass: 'q-notification__message col' } + + if (notif.html === true) { + msgData.domProps = { + innerHTML: notif.caption + ? `
${notif.message}
${notif.caption}
` + : notif.message + } + } + else { + const msgNode = [ notif.message ] + msgChild = notif.caption + ? [ + h('div', msgNode), + h('div', { staticClass: 'q-notification__caption' }, [notif.caption]) + ] + : msgNode + } + + mainChild.push( + h('div', msgData, msgChild) + ) + } + + const child = [ + h('div', { staticClass: meta.contentClass }, mainChild) + ] + + notif.progress === true && child.push( + h('div', { + key: `${meta.uid}|p|${meta.badge}`, + staticClass: meta.progressClass, + style: meta.progressStyle + }) + ) + + notif.actions !== void 0 && child.push( + h('div', { + staticClass: meta.actionsClass + }, notif.actions.map(action => h(QBtn, { ...action }))) + ) + + meta.badge > 1 && child.push( + h('div', { + key: `${meta.uid}|${meta.badge}`, + staticClass: meta.badgeClass, + style: notif.badgeStyle + }, [ meta.badge ]) + ) + + return h('div', { + ref: '' + meta.uid, + key: meta.uid, + staticClass: meta.staticClass, + attrs: meta.attrs + }, [ + h('div', { staticClass: meta.wrapperClass }, child) + ]) + })) + })) + }, + + mounted () { + if (this.$q.fullscreen !== void 0 && this.$q.fullscreen.isCapable === true) { + const append = () => { + const newParent = getBodyFullscreenElement(this.$q.fullscreen.activeEl) + + if (this.$el.parentElement !== newParent) { + newParent.appendChild(this.$el) + } + } + + this.unwatchFullscreen = this.$watch('$q.fullscreen.activeEl', debounce(append, 50)) + + if (this.$q.fullscreen.isActive === true) { + append() + } + } + }, + + beforeDestroy () { + this.unwatchFullscreen !== void 0 && this.unwatchFullscreen() + } +} + +export default { + setDefaults (opts) { + if (isSSR !== true && isObject(opts) === true) { + Object.assign(defaults, opts) + } + }, + + registerType (typeName, typeOpts) { + if (isSSR !== true && isObject(typeOpts) === true) { + notifTypes[typeName] = typeOpts + } + }, + + install ({ $q }) { + $q.notify = this.create = isSSR === true + ? noop + : opts => addNotification(opts, vm) + + $q.notify.setDefaults = this.setDefaults + $q.notify.registerType = this.registerType + + if ($q.config.notify !== void 0) { + this.setDefaults($q.config.notify) + } + + if (isSSR !== true) { + positionList.forEach(pos => { + notificationsList[pos] = [] + + const + vert = ['left', 'center', 'right'].includes(pos) === true ? 'center' : (pos.indexOf('top') > -1 ? 'top' : 'bottom'), + align = pos.indexOf('left') > -1 ? 'start' : (pos.indexOf('right') > -1 ? 'end' : 'center'), + classes = ['left', 'right'].includes(pos) ? `items-${pos === 'left' ? 'start' : 'end'} justify-center` : (pos === 'center' ? 'flex-center' : `items-${align}`) + + positionClass[pos] = `q-notifications__list q-notifications__list--${vert} fixed column no-wrap ${classes}` + }) + + const node = document.createElement('div') + document.body.appendChild(node) + + vm = new Vue(Notifications) + vm.$mount(node) + } + } +} diff --git a/src/plugins/Notify.json b/src/plugins/Notify.json new file mode 100644 index 00000000000..7154fa02139 --- /dev/null +++ b/src/plugins/Notify.json @@ -0,0 +1,993 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/notify" + }, + + "injection": "$q.notify", + + "quasarConfOptions": { + "propName": "notify", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ "negative", "custom-type" ], + "addedIn": "v1.9" + }, + + "color": { + "extends": "color" + }, + + "textColor": { + "extends": "color" + }, + + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ "John Doe pinged you" ] + }, + + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ "5 minutes ago" ], + "addedIn": "v1.5.5" + }, + + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + + "icon": { + "extends": "icon" + }, + + "iconColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "iconSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + + "spinner": { + "type": "Boolean", + "desc": "Useful for notifications that are updated; Displays the default Quasar spinner instead of an avatar or icon", + "addedIn": "v1.14" + }, + + "spinnerColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "spinnerSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "position": { + "type": "String", + "desc": "Window side/corner to stick to", + "default": "bottom", + "values": [ + "top-left", "top-right", + "bottom-left", "bottom-right", + "top", "bottom", "left", "right", "center" + ], + "examples": [ "top-right" ] + }, + + "group": { + "type": [ "Boolean", "String", "Number" ], + "desc": "Override the auto generated group with custom one; Grouped notifications cannot be updated; String or number value inform this is part of a specific group, regardless of its options; When a new notification is triggered with same group name, it replaces the old one and shows a badge with how many times the notification was triggered", + "default": "(message + caption + multiline + actions labels + position)", + "examples": [ "my-group" ], + "addedIn": "v1.9" + }, + + "badgeColor": { + "extends": "color", + "desc": "Color name for the badge from the Quasar Color Palette", + "addedIn": "v1.9" + }, + "badgeTextColor": { + "extends": "color", + "desc": "Color name for the badge text from the Quasar Color Palette", + "addedIn": "v1.9" + }, + "badgePosition": { + "type": "String", + "desc": "Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left", + "default": "(top-left/top-right)", + "values": [ + "top-left", "top-right", + "bottom-left", "bottom-right" + ], + "examples": [ "bottom-right" ], + "addedIn": "v1.9.5" + }, + "badgeStyle": { + "type": "String", + "desc": "Style definitions to be attributed to the badge", + "examples": [ + "background-color: #ff0000" + ], + "addedIn": "v1.9" + }, + "badgeClass": { + "type": "String", + "desc": "Class definitions to be attributed to the badge", + "examples": [ + "my-special-class" + ], + "addedIn": "v1.9" + }, + + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": "String", + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class" + ], + "addedIn": "v1.9" + }, + + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ "{ role: 'alertdialog' }" ], + "__exemption": [ "definition" ], + "addedIn": "v1.13" + }, + + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ 2500 ] + }, + + "closeBtn": { + "type": [ "Boolean", "String" ], + "desc": "Convenient way to add a dismiss button with a specific label, without using the 'actions' convoluted prop", + "examples": [ "Close me" ] + }, + + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + } + } + }, + + "methods": { + "create": { + "tsInjectionPoint": true, + "desc": "Creates a notification; Same as calling $q.notify(...)", + "params": { + "opts": { + "type": [ "Object", "String" ], + "desc": "Notification options", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ "negative", "custom-type" ], + "addedIn": "v1.9" + }, + + "color": { + "extends": "color" + }, + + "textColor": { + "extends": "color" + }, + + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ "John Doe pinged you" ] + }, + + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ "5 minutes ago" ], + "addedIn": "v1.5.5" + }, + + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + + "icon": { + "extends": "icon" + }, + + "iconColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "iconSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + + "spinner": { + "type": [ "Boolean", "Component" ], + "desc": "Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + + "spinnerColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "spinnerSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "position": { + "type": "String", + "desc": "Window side/corner to stick to", + "default": "bottom", + "values": [ + "top-left", "top-right", + "bottom-left", "bottom-right", + "top", "bottom", "left", "right", "center" + ], + "examples": [ "top-right" ] + }, + + "group": { + "type": [ "Boolean", "String", "Number" ], + "desc": "Override the auto generated group with custom one; Grouped notifications cannot be updated; String or number value inform this is part of a specific group, regardless of its options; When a new notification is triggered with same group name, it replaces the old one and shows a badge with how many times the notification was triggered", + "default": "(message + caption + multiline + actions labels + position)", + "examples": [ "my-group" ], + "addedIn": "v1.9" + }, + + "badgeColor": { + "extends": "color", + "desc": "Color name for the badge from the Quasar Color Palette", + "addedIn": "v1.9" + }, + "badgeTextColor": { + "extends": "color", + "desc": "Color name for the badge text from the Quasar Color Palette", + "addedIn": "v1.9" + }, + "badgePosition": { + "type": "String", + "desc": "Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left", + "default": "(top-left/top-right)", + "values": [ + "top-left", "top-right", + "bottom-left", "bottom-right" + ], + "examples": [ "bottom-right" ], + "addedIn": "v1.9.5" + }, + "badgeStyle": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the badge", + "examples": [ + "background-color: #ff0000", + "{ backgroundColor: '#ff0000' }" + ], + "addedIn": "v1.9" + }, + "badgeClass": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the badge", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ "{ role: 'alertdialog' }" ], + "__exemption": [ "definition" ], + "addedIn": "v1.13" + }, + + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ 2500 ] + }, + + "actions": { + "type": "Array", + "desc": "Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop", + "examples": [ + "[ { label: 'Show', handler: (Function), attrs: { 'aria-label': 'Button label' } }, { icon: 'map', handler: (Function), color: 'yellow' }, { label: 'Learn more', noDismiss: true, handler: (Function) } ]" + ] + }, + + "onDismiss": { + "type": "Function", + "desc": "Function to call when notification gets dismissed", + "params": null, + "returns": null, + "examples": [ + "() => { console.log('Dismissed') }" + ] + }, + + "closeBtn": { + "type": [ "Boolean", "String" ], + "desc": "Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language", + "examples": [ "Close me" ] + }, + + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + }, + + "ignoreDefaults": { + "type": "Boolean", + "desc": "Ignore the default configuration (set by setDefaults()) for this instance only", + "addedIn": "v1.1" + } + }, + "required": true, + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Function", + "desc": "Calling this function with no parameters hides the notification; When called with one Object parameter (the original notification must NOT be grouped), it updates the notification (specified properties are shallow merged with previous ones; note that group and position cannot be changed while updating and so they are ignored)", + "params": { + "props": { + "type": "Object", + "desc": "Notification properties that will be shallow merged to previous ones in order to update the non-grouped notification", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ "negative", "custom-type" ] + }, + + "color": { + "extends": "color" + }, + + "textColor": { + "extends": "color" + }, + + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ "John Doe pinged you" ] + }, + + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ "5 minutes ago" ], + "addedIn": "v1.5.5" + }, + + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + + "icon": { + "extends": "icon" + }, + + "iconColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "iconSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + + "spinner": { + "type": [ "Boolean", "Component" ], + "desc": "Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + + "spinnerColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "spinnerSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ "{ role: 'alertdialog' }" ], + "__exemption": [ "definition" ], + "addedIn": "v1.13" + }, + + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ 2500 ] + }, + + "actions": { + "type": "Array", + "desc": "Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop", + "examples": [ + "[ { label: 'Show', handler: (Function), attrs: { 'aria-label': 'Button label' } }, { icon: 'map', handler: (Function), color: 'yellow' }, { label: 'Learn more', noDismiss: true, handler: (Function) } ]" + ] + }, + + "onDismiss": { + "type": "Function", + "desc": "Function to call when notification gets dismissed", + "params": null, + "returns": null, + "examples": [ + "() => { console.log('Dismissed') }" + ] + }, + + "closeBtn": { + "type": [ "Boolean", "String" ], + "desc": "Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language", + "examples": [ "Close me" ] + }, + + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + }, + + "ignoreDefaults": { + "type": "Boolean", + "desc": "Ignore the default configuration (set by setDefaults()) for this instance only", + "addedIn": "v1.1" + } + }, + "addedIn": "v1.14" + } + }, + "returns": null + } + }, + + "setDefaults": { + "desc": "Merge options into the default ones", + "params": { + "opts": { + "type": "Object", + "desc": "Notification options", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ "negative", "custom-type" ], + "addedIn": "v1.9" + }, + + "color": { + "extends": "color" + }, + + "textColor": { + "extends": "color" + }, + + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ "John Doe pinged you" ] + }, + + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ "5 minutes ago" ], + "addedIn": "v1.5.5" + }, + + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + + "icon": { + "extends": "icon" + }, + + "iconColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "iconSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + + "spinner": { + "type": [ "Boolean", "Component" ], + "desc": "Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + + "spinnerColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "spinnerSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "position": { + "type": "String", + "desc": "Window side/corner to stick to", + "default": "bottom", + "values": [ + "top-left", "top-right", + "bottom-left", "bottom-right", + "top", "bottom", "left", "right", "center" + ], + "examples": [ "top-right" ] + }, + + "badgeColor": { + "extends": "color", + "desc": "Color name for the badge from the Quasar Color Palette", + "addedIn": "v1.9" + }, + "badgeTextColor": { + "extends": "color", + "desc": "Color name for the badge text from the Quasar Color Palette", + "addedIn": "v1.9" + }, + "badgePosition": { + "type": "String", + "desc": "Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left", + "default": "(top-left/top-right)", + "values": [ + "top-left", "top-right", + "bottom-left", "bottom-right" + ], + "examples": [ "bottom-right" ], + "addedIn": "v1.9.5" + }, + "badgeStyle": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the badge", + "examples": [ + "background-color: #ff0000", + "{ backgroundColor: '#ff0000' }" + ], + "addedIn": "v1.9" + }, + "badgeClass": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the badge", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ "{ role: 'alertdialog' }" ], + "__exemption": [ "definition" ], + "addedIn": "v1.13" + }, + + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ 2500 ] + }, + + "actions": { + "type": "Array", + "desc": "Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop", + "examples": [ + "[ { label: 'Show', handler: (Function), attrs: { 'aria-label': 'Button label' } }, { icon: 'map', handler: (Function), color: 'yellow' } ]" + ] + }, + + "onDismiss": { + "type": "Function", + "desc": "Function to call when notification gets dismissed", + "params": null, + "returns": null, + "examples": [ + "() => { console.log('Dismissed') }" + ] + }, + + "closeBtn": { + "type": [ "Boolean", "String" ], + "desc": "Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language", + "examples": [ "Close me" ] + }, + + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + } + }, + "required": true, + "__exemption": [ "examples" ] + } + } + }, + + "registerType": { + "addedIn": "v1.9", + "desc": "Register a new type of notification (or override an existing one)", + "params": { + "typeName": { + "type": "String", + "desc": "Name of the type (to be used as 'type' prop later on)", + "required": true, + "examples": [ "my-type" ] + }, + + "typeOpts": { + "type": "Object", + "desc": "Notification options", + "definition": { + "type": { + "type": "String", + "desc": "Optional type (that has been previously registered) or one of the out of the box ones ('positive', 'negative', 'warning', 'info', 'ongoing')", + "examples": [ "negative", "custom-type" ], + "addedIn": "v1.9" + }, + + "color": { + "extends": "color" + }, + + "textColor": { + "extends": "color" + }, + + "message": { + "type": "String", + "desc": "The content of your message", + "examples": [ "John Doe pinged you" ] + }, + + "caption": { + "type": "String", + "desc": "The content of your optional caption", + "examples": [ "5 minutes ago" ], + "addedIn": "v1.5.5" + }, + + "html": { + "type": "Boolean", + "desc": "Render message as HTML; This can lead to XSS attacks, so make sure that you sanitize the message first" + }, + + "icon": { + "extends": "icon" + }, + + "iconColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "iconSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "avatar": { + "type": "String", + "desc": "URL to an avatar/image; Suggestion: use public folder", + "examples": [ + "(public folder) img/something.png", + "(relative path format) require('./my_img.jpg')", + "(URL) https://some-site.net/some-img.gif" + ] + }, + + "spinner": { + "type": [ "Boolean", "Component" ], + "desc": "Useful for notifications that are updated; Displays a Quasar spinner instead of an avatar or icon; If value is Boolean 'true' then the default QSpinner is shown", + "__exemption": [ "examples" ], + "addedIn": "v1.14" + }, + + "spinnerColor": { + "extends": "color", + "addedIn": "v1.18.5" + }, + + "spinnerSize": { + "extends": "size", + "addedIn": "v1.18.5" + }, + + "position": { + "type": "String", + "desc": "Window side/corner to stick to", + "default": "bottom", + "values": [ + "top-left", "top-right", + "bottom-left", "bottom-right", + "top", "bottom", "left", "right", "center" + ], + "examples": [ "top-right" ] + }, + + "badgeColor": { + "extends": "color", + "desc": "Color name for the badge from the Quasar Color Palette", + "addedIn": "v1.9" + }, + "badgeTextColor": { + "extends": "color", + "desc": "Color name for the badge text from the Quasar Color Palette", + "addedIn": "v1.9" + }, + "badgePosition": { + "type": "String", + "desc": "Notification corner to stick badge to; If notification is on the left side then default is top-right otherwise it is top-left", + "default": "(top-left/top-right)", + "values": [ + "top-left", "top-right", + "bottom-left", "bottom-right" + ], + "examples": [ "bottom-right" ], + "addedIn": "v1.9.5" + }, + "badgeStyle": { + "type": [ "Array", "String", "Object" ], + "desc": "Style definitions to be attributed to the badge", + "examples": [ + "background-color: #ff0000", + "{ backgroundColor: '#ff0000' }" + ], + "addedIn": "v1.9" + }, + "badgeClass": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the badge", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + + "progress": { + "type": "Boolean", + "desc": "Show progress bar to detail when notification will disappear automatically (unless timeout is 0)", + "addedIn": "v1.9" + }, + "progressClass": { + "type": [ "Array", "String", "Object" ], + "desc": "Class definitions to be attributed to the progress bar", + "examples": [ + "my-special-class", + "{ 'my-special-class': }" + ], + "addedIn": "v1.9" + }, + + "classes": { + "type": "String", + "desc": "Add CSS class(es) to the notification for easier customization", + "examples": [ + "my-notif-class" + ] + }, + + "attrs": { + "type": "Object", + "desc": "Key-value for attributes to be set on the notification", + "examples": [ "{ role: 'alertdialog' }" ], + "__exemption": [ "definition" ], + "addedIn": "v1.13" + }, + + "timeout": { + "type": "Number", + "desc": "Amount of time to display (in milliseconds)", + "default": 5000, + "examples": [ 2500 ] + }, + + "actions": { + "type": "Array", + "desc": "Notification actions (buttons); If a 'handler' is specified or not, clicking/tapping on the button will also close the notification; Also check 'closeBtn' convenience prop", + "examples": [ + "[ { label: 'Show', handler: (Function), attrs: { 'aria-label': 'Button label' } }, { icon: 'map', handler: (Function), color: 'yellow' } ]" + ] + }, + + "onDismiss": { + "type": "Function", + "desc": "Function to call when notification gets dismissed", + "params": null, + "returns": null, + "examples": [ + "() => { console.log('Dismissed') }" + ] + }, + + "closeBtn": { + "type": [ "Boolean", "String" ], + "desc": "Convenience way to add a dismiss button with a specific label, without using the 'actions' prop; If set to true, it uses a label accordding to the current Quasar language", + "examples": [ "Close me" ] + }, + + "multiLine": { + "type": "Boolean", + "desc": "Put notification into multi-line mode; If this prop isn't used and more than one 'action' is specified then notification goes into multi-line mode by default" + } + }, + "required": true, + "__exemption": [ "examples" ] + } + } + } + } +} diff --git a/src/plugins/Notify.sass b/src/plugins/Notify.sass new file mode 100644 index 00000000000..7483457db4d --- /dev/null +++ b/src/plugins/Notify.sass @@ -0,0 +1,215 @@ +.q-notifications__list + z-index: $z-notify + pointer-events: none + left: 0 + right: 0 + margin-bottom: 10px + position: relative + + &--center + top: 0 + bottom: 0 + &--top + top: 0 + &--bottom + bottom: 0 + +body.q-ios-padding .q-notifications__list + &--center, &--top + top: $ios-statusbar-height + top: env(safe-area-inset-top) + &--center, &--bottom + bottom: env(safe-area-inset-bottom) + +.q-notification + box-shadow: $shadow-2 + border-radius: $generic-border-radius + pointer-events: all + display: inline-flex + margin: 10px 10px 0 + transition: transform 1s, opacity 1s + z-index: $z-notify + flex-shrink: 0 + + max-width: 95vw + + background: $notify-background + background: var(--q-color-notify-background) + color: $dark-text + color: var(--q-color-dark-text) + + font-size: 14px + + &__icon + font-size: 24px + flex: 0 0 1em + + &--additional + margin-right: 16px + + &__avatar + font-size: 32px + + &--additional + margin-right: 8px + + &__spinner + font-size: 32px + + &--additional + margin-right: 8px + + &__message + padding: 8px 0 + + &__caption + font-size: 0.9em + opacity: 0.7 + + &__actions + color: $primary + color: var(--q-color-primary) + + &__badge + animation: q-notif-badge .42s + padding: 4px 8px + position: absolute + background: $negative + box-shadow: $shadow-1 + background-color: $negative + background-color: var(--q-color-negative) + color: $dark-text + color: var(--q-color-dark-text) + border-radius: $generic-border-radius + font-size: 12px + line-height: 12px + + &--top-left, + &--top-right + top: -6px + + &--bottom-left, + &--bottom-right + bottom: -6px + + &--top-left, + &--bottom-left + left: -22px + + &--top-right, + &--bottom-right + right: -22px + + &__progress + z-index: -1 + position: absolute + height: 3px + bottom: 0 + left: -10px + right: -10px + animation: q-notif-progress linear + background: currentColor + opacity: .3 + border-radius: $generic-border-radius $generic-border-radius 0 0 + transform-origin: 0 50% + transform: scaleX(0) + + &--standard + padding: 0 16px + min-height: 48px + + .q-notification__actions + padding: 6px 0 6px 8px + margin-right: -8px + + &--multi-line + min-height: 68px + padding: 8px 16px + + .q-notification__badge + &--top-left, + &--top-right + top: -15px + + &--bottom-left, + &--bottom-right + bottom: -15px + + .q-notification__progress + bottom: -8px + + .q-notification__actions + padding: 0 + + &--with-media + padding-left: 25px + + &--top-left-enter, &--top-left-leave-to, + &--top-enter, &--top-leave-to, + &--top-right-enter, &--top-right-leave-to + opacity: 0 + transform: translateY(-50px) + z-index: ($z-notify - 1) + + &--left-enter, &--left-leave-to, + &--center-enter, &--center-leave-to, + &--right-enter, &--right-leave-to + opacity: 0 + transform: rotateX(90deg) + z-index: ($z-notify - 1) + + &--bottom-left-enter, &--bottom-left-leave-to, + &--bottom-enter, &--bottom-leave-to, + &--bottom-right-enter, &--bottom-right-leave-to + opacity: 0 + transform: translateY(50px) + z-index: ($z-notify - 1) + + &--top-left-leave-active, + &--top-leave-active, + &--top-right-leave-active, + &--left-leave-active, + &--center-leave-active, + &--right-leave-active, + &--bottom-left-leave-active, + &--bottom-leave-active, + &--bottom-right-leave-active + position: absolute + z-index: ($z-notify - 1) + margin-left: 0 + margin-right: 0 + + &--top-leave-active, + &--center-leave-active + top: 0 + + &--bottom-left-leave-active, + &--bottom-leave-active, + &--bottom-right-leave-active + bottom: 0 + +@media (min-width: $breakpoint-sm-min) + .q-notification + max-width: 65vw + +@keyframes q-notif-badge + 15% + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg) + + 30% + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg) + + 45% + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg) + + 60% + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg) + + 75% + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg) + +@keyframes q-notif-progress + 0% + transform: scaleX(1) + 100% + transform: scaleX(0) diff --git a/src/plugins/Notify.styl b/src/plugins/Notify.styl new file mode 100644 index 00000000000..7483457db4d --- /dev/null +++ b/src/plugins/Notify.styl @@ -0,0 +1,215 @@ +.q-notifications__list + z-index: $z-notify + pointer-events: none + left: 0 + right: 0 + margin-bottom: 10px + position: relative + + &--center + top: 0 + bottom: 0 + &--top + top: 0 + &--bottom + bottom: 0 + +body.q-ios-padding .q-notifications__list + &--center, &--top + top: $ios-statusbar-height + top: env(safe-area-inset-top) + &--center, &--bottom + bottom: env(safe-area-inset-bottom) + +.q-notification + box-shadow: $shadow-2 + border-radius: $generic-border-radius + pointer-events: all + display: inline-flex + margin: 10px 10px 0 + transition: transform 1s, opacity 1s + z-index: $z-notify + flex-shrink: 0 + + max-width: 95vw + + background: $notify-background + background: var(--q-color-notify-background) + color: $dark-text + color: var(--q-color-dark-text) + + font-size: 14px + + &__icon + font-size: 24px + flex: 0 0 1em + + &--additional + margin-right: 16px + + &__avatar + font-size: 32px + + &--additional + margin-right: 8px + + &__spinner + font-size: 32px + + &--additional + margin-right: 8px + + &__message + padding: 8px 0 + + &__caption + font-size: 0.9em + opacity: 0.7 + + &__actions + color: $primary + color: var(--q-color-primary) + + &__badge + animation: q-notif-badge .42s + padding: 4px 8px + position: absolute + background: $negative + box-shadow: $shadow-1 + background-color: $negative + background-color: var(--q-color-negative) + color: $dark-text + color: var(--q-color-dark-text) + border-radius: $generic-border-radius + font-size: 12px + line-height: 12px + + &--top-left, + &--top-right + top: -6px + + &--bottom-left, + &--bottom-right + bottom: -6px + + &--top-left, + &--bottom-left + left: -22px + + &--top-right, + &--bottom-right + right: -22px + + &__progress + z-index: -1 + position: absolute + height: 3px + bottom: 0 + left: -10px + right: -10px + animation: q-notif-progress linear + background: currentColor + opacity: .3 + border-radius: $generic-border-radius $generic-border-radius 0 0 + transform-origin: 0 50% + transform: scaleX(0) + + &--standard + padding: 0 16px + min-height: 48px + + .q-notification__actions + padding: 6px 0 6px 8px + margin-right: -8px + + &--multi-line + min-height: 68px + padding: 8px 16px + + .q-notification__badge + &--top-left, + &--top-right + top: -15px + + &--bottom-left, + &--bottom-right + bottom: -15px + + .q-notification__progress + bottom: -8px + + .q-notification__actions + padding: 0 + + &--with-media + padding-left: 25px + + &--top-left-enter, &--top-left-leave-to, + &--top-enter, &--top-leave-to, + &--top-right-enter, &--top-right-leave-to + opacity: 0 + transform: translateY(-50px) + z-index: ($z-notify - 1) + + &--left-enter, &--left-leave-to, + &--center-enter, &--center-leave-to, + &--right-enter, &--right-leave-to + opacity: 0 + transform: rotateX(90deg) + z-index: ($z-notify - 1) + + &--bottom-left-enter, &--bottom-left-leave-to, + &--bottom-enter, &--bottom-leave-to, + &--bottom-right-enter, &--bottom-right-leave-to + opacity: 0 + transform: translateY(50px) + z-index: ($z-notify - 1) + + &--top-left-leave-active, + &--top-leave-active, + &--top-right-leave-active, + &--left-leave-active, + &--center-leave-active, + &--right-leave-active, + &--bottom-left-leave-active, + &--bottom-leave-active, + &--bottom-right-leave-active + position: absolute + z-index: ($z-notify - 1) + margin-left: 0 + margin-right: 0 + + &--top-leave-active, + &--center-leave-active + top: 0 + + &--bottom-left-leave-active, + &--bottom-leave-active, + &--bottom-right-leave-active + bottom: 0 + +@media (min-width: $breakpoint-sm-min) + .q-notification + max-width: 65vw + +@keyframes q-notif-badge + 15% + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg) + + 30% + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg) + + 45% + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg) + + 60% + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg) + + 75% + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg) + +@keyframes q-notif-progress + 0% + transform: scaleX(1) + 100% + transform: scaleX(0) diff --git a/src/plugins/Platform.js b/src/plugins/Platform.js new file mode 100644 index 00000000000..2b3efe551f4 --- /dev/null +++ b/src/plugins/Platform.js @@ -0,0 +1,358 @@ +/* eslint-disable no-useless-escape */ +/* eslint-disable no-unused-expressions */ +/* eslint-disable no-mixed-operators */ + +import Vue from 'vue' + +export const isSSR = typeof window === 'undefined' +export let fromSSR = false +export let onSSR = isSSR + +export let iosEmulated = false +export let iosCorrection + +function getMatch (userAgent, platformMatch) { + const match = /(edge|edga|edgios)\/([\w.]+)/.exec(userAgent) || + /(opr)[\/]([\w.]+)/.exec(userAgent) || + /(vivaldi)[\/]([\w.]+)/.exec(userAgent) || + /(chrome|crios)[\/]([\w.]+)/.exec(userAgent) || + /(iemobile)[\/]([\w.]+)/.exec(userAgent) || + /(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(userAgent) || + /(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(userAgent) || + /(firefox|fxios)[\/]([\w.]+)/.exec(userAgent) || + /(webkit)[\/]([\w.]+)/.exec(userAgent) || + /(opera)(?:.*version|)[\/]([\w.]+)/.exec(userAgent) || + /(msie) ([\w.]+)/.exec(userAgent) || + (userAgent.indexOf('trident') >= 0 && /(rv)(?::| )([\w.]+)/.exec(userAgent)) || + (userAgent.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(userAgent)) || + [] + + return { + browser: match[5] || match[3] || match[1] || '', + version: match[2] || match[4] || '0', + versionNumber: match[4] || match[2] || '0', + platform: platformMatch[0] || '' + } +} + +function getPlatformMatch (userAgent) { + return /(ipad)/.exec(userAgent) || + /(ipod)/.exec(userAgent) || + /(windows phone)/.exec(userAgent) || + /(iphone)/.exec(userAgent) || + /(kindle)/.exec(userAgent) || + /(silk)/.exec(userAgent) || + /(android)/.exec(userAgent) || + /(win)/.exec(userAgent) || + /(mac)/.exec(userAgent) || + /(linux)/.exec(userAgent) || + /(cros)/.exec(userAgent) || + /(playbook)/.exec(userAgent) || + /(bb)/.exec(userAgent) || + /(blackberry)/.exec(userAgent) || + [] +} + +const hasTouch = isSSR === false + ? 'ontouchstart' in window || window.navigator.maxTouchPoints > 0 + : false + +function applyIosCorrection (is) { + iosCorrection = { is: { ...is } } + + delete is.mac + delete is.desktop + + const platform = Math.min(window.innerHeight, window.innerWidth) > 414 + ? 'ipad' + : 'iphone' + + Object.assign(is, { + mobile: true, + ios: true, + platform, + [ platform ]: true + }) +} + +function getPlatform (UA) { + const + userAgent = UA.toLowerCase(), + platformMatch = getPlatformMatch(userAgent), + matched = getMatch(userAgent, platformMatch), + browser = {} + + if (matched.browser) { + browser[matched.browser] = true + browser.version = matched.version + browser.versionNumber = parseInt(matched.versionNumber, 10) + } + + if (matched.platform) { + browser[matched.platform] = true + } + + const knownMobiles = browser.android || + browser.ios || + browser.bb || + browser.blackberry || + browser.ipad || + browser.iphone || + browser.ipod || + browser.kindle || + browser.playbook || + browser.silk || + browser['windows phone'] + + // These are all considered mobile platforms, meaning they run a mobile browser + if (knownMobiles === true || userAgent.indexOf('mobile') > -1) { + browser.mobile = true + + if (browser.edga || browser.edgios) { + browser.edge = true + matched.browser = 'edge' + } + else if (browser.crios) { + browser.chrome = true + matched.browser = 'chrome' + } + else if (browser.fxios) { + browser.firefox = true + matched.browser = 'firefox' + } + } + // If it's not mobile we should consider it's desktop platform, meaning it runs a desktop browser + // It's a workaround for anonymized user agents + // (browser.cros || browser.mac || browser.linux || browser.win) + else { + browser.desktop = true + } + + // Set iOS if on iPod, iPad or iPhone + if (browser.ipod || browser.ipad || browser.iphone) { + browser.ios = true + } + + if (browser['windows phone']) { + browser.winphone = true + delete browser['windows phone'] + } + + // Chrome, Opera 15+, Vivaldi and Safari are webkit based browsers + if ( + browser.chrome || + browser.opr || + browser.safari || + browser.vivaldi || + // we expect unknown, non iOS mobile browsers to be webkit based + ( + browser.mobile === true && + browser.ios !== true && + knownMobiles !== true + ) + ) { + browser.webkit = true + } + + // IE11 has a new token so we will assign it msie to avoid breaking changes + if (browser.rv || browser.iemobile) { + matched.browser = 'ie' + browser.ie = true + } + + // Blackberry browsers are marked as Safari on BlackBerry + if (browser.safari && browser.blackberry || browser.bb) { + matched.browser = 'blackberry' + browser.blackberry = true + } + + // Playbook browsers are marked as Safari on Playbook + if (browser.safari && browser.playbook) { + matched.browser = 'playbook' + browser.playbook = true + } + + // Opera 15+ are identified as opr + if (browser.opr) { + matched.browser = 'opera' + browser.opera = true + } + + // Stock Android browsers are marked as Safari on Android. + if (browser.safari && browser.android) { + matched.browser = 'android' + browser.android = true + } + + // Kindle browsers are marked as Safari on Kindle + if (browser.safari && browser.kindle) { + matched.browser = 'kindle' + browser.kindle = true + } + + // Kindle Silk browsers are marked as Safari on Kindle + if (browser.safari && browser.silk) { + matched.browser = 'silk' + browser.silk = true + } + + if (browser.vivaldi) { + matched.browser = 'vivaldi' + browser.vivaldi = true + } + + // Assign the name and platform variable + browser.name = matched.browser + browser.platform = matched.platform + + if (isSSR === false) { + if (userAgent.indexOf('electron') > -1) { + browser.electron = true + } + else if (document.location.href.indexOf('-extension://') > -1) { + browser.bex = true + } + else { + if (window.Capacitor !== void 0) { + browser.capacitor = true + browser.nativeMobile = true + browser.nativeMobileWrapper = 'capacitor' + } + else if (window._cordovaNative !== void 0 || window.cordova !== void 0) { + browser.cordova = true + browser.nativeMobile = true + browser.nativeMobileWrapper = 'cordova' + } + else if (window.matchMedia('(display-mode: standalone)').matches === true) { + browser.standalone = true + } + + if ( + hasTouch === true && + browser.mac === true && + ( + (browser.desktop === true && browser.safari === true) || + ( + browser.nativeMobile === true && + browser.android !== true && + browser.ios !== true && + browser.ipad !== true + ) + ) + ) { + /* + * Correction needed for iOS since the default + * setting on iPad is to request desktop view; if we have + * touch support and the user agent says it's a + * desktop, we infer that it's an iPhone/iPad with desktop view + * so we must fix the false positives + */ + applyIosCorrection(browser) + } + } + + fromSSR = browser.nativeMobile === void 0 && + browser.electron === void 0 && + document.querySelector('[data-server-rendered]') !== null + + if (fromSSR === true) { + onSSR = true + } + } + + return browser +} + +const userAgent = isSSR !== true + ? navigator.userAgent || navigator.vendor || window.opera + : '' + +const ssrClient = { + has: { + touch: false, + webStorage: false + }, + within: { iframe: false } +} + +// We export "client" for hydration error-free parts, +// like touch directives who do not (and must NOT) wait +// for the client takeover; +// Do NOT import this directly in your app, unless you really know +// what you are doing. +export const client = isSSR === false + ? { + userAgent, + is: getPlatform(userAgent), + has: { + touch: hasTouch, + webStorage: (() => { + try { + if (window.localStorage) { + return true + } + } + catch (e) {} + return false + })() + }, + within: { + iframe: window.self !== window.top + } + } + : ssrClient + +const Platform = { + install ($q, queues) { + if (isSSR === true) { + // we're on server-side, so we push + // to the server queue instead of + // applying directly + queues.server.push((q, ctx) => { + q.platform = this.parseSSR(ctx.ssr) + }) + } + else if (fromSSR === true) { + // must match with server-side before + // client taking over in order to prevent + // hydration errors + Object.assign(this, client, iosCorrection, ssrClient) + + // takeover should increase accuracy for + // the rest of the props; we also avoid + // hydration errors + queues.takeover.push(q => { + onSSR = fromSSR = false + Object.assign(q.platform, client) + iosCorrection = void 0 + }) + + // we need to make platform reactive + // for the takeover phase + Vue.util.defineReactive($q, 'platform', this) + } + else { + // we don't have any business with SSR, so + // directly applying... + Object.assign(this, client) + $q.platform = this + } + } +} + +if (isSSR === true) { + Platform.parseSSR = (/* ssrContext */ ssr) => { + const userAgent = ssr.req.headers['user-agent'] || ssr.req.headers['User-Agent'] || '' + return { + ...client, + userAgent, + is: getPlatform(userAgent) + } + } +} +else { + iosEmulated = client.is.ios === true && + window.navigator.vendor.toLowerCase().indexOf('apple') === -1 +} + +export default Platform diff --git a/src/plugins/Platform.json b/src/plugins/Platform.json new file mode 100644 index 00000000000..d1f4c4b228c --- /dev/null +++ b/src/plugins/Platform.json @@ -0,0 +1,73 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/options/platform-detection" + }, + + "injection": "$q.platform", + + "props": { + "userAgent": { + "type": "String", + "desc": "Client browser User Agent", + "examples": [ + "mozilla/5.0 (macintosh; intel mac os x 10_14_5) applewebkit/537.36 (khtml, like gecko) chrome/75.0.3770.100 safari/537.36" + ] + }, + + "is": { + "type": "Object", + "desc": "Client browser details (property names depend on browser)", + "examples": [ + "{ chrome: true, version: '71.0.3578.98', versionNumber: 71, mac: true, desktop: true, webkit: true, name: 'chrome', platform: 'mac' }" + ] + }, + + "has": { + "type": "Object", + "desc": "Client browser detectable properties", + "definition": { + "touch": { + "type": "Boolean", + "desc": "Client browser runs on device with touch support" + }, + "webStorage": { + "type": "Boolean", + "desc": "Client browser has Web Storage support" + } + }, + "examples": [ "{ touch: false, webStorage: true }" ] + }, + + "within": { + "type": "Object", + "desc": "Client browser environment", + "definition": { + "iframe": { + "type": "Boolean", + "desc": "Does the app run under an iframe?" + } + }, + "examples": [ "{ iframe: false }" ] + } + }, + + "methods": { + "parseSSR": { + "desc": "For SSR usage only, and only on the global import (not on $q.platform)", + "params": { + "ssrContext": { + "type": "Object", + "desc": "SSR Context Object", + "required": true, + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Object", + "tsType": "Platform", + "desc": "Platform object (like $q.platform) for SSR usage purposes", + "__exemption": [ "examples" ] + } + } + } +} diff --git a/src/plugins/Screen.js b/src/plugins/Screen.js new file mode 100644 index 00000000000..34e6e0da6dd --- /dev/null +++ b/src/plugins/Screen.js @@ -0,0 +1,174 @@ +import Vue from 'vue' + +import { isSSR, fromSSR, client } from './Platform.js' +import { listenOpts, noop } from '../utils/event.js' +import debounce from '../utils/debounce.js' + +const SIZE_LIST = ['sm', 'md', 'lg', 'xl'] +const { passive } = listenOpts + +export default { + width: 0, + height: 0, + + name: 'xs', + + sizes: { + sm: 600, + md: 1024, + lg: 1440, + xl: 1920 + }, + + lt: { + sm: true, + md: true, + lg: true, + xl: true + }, + gt: { + xs: false, + sm: false, + md: false, + lg: false + }, + xs: true, + sm: false, + md: false, + lg: false, + xl: false, + + setSizes: noop, + setDebounce: noop, + + install ($q, queues, cfg) { + if (isSSR === true) { + $q.screen = this + return + } + + const { visualViewport } = window + const target = visualViewport || window + const scrollingElement = document.scrollingElement || document.documentElement + const getSize = visualViewport === void 0 || client.is.mobile === true + ? () => [ + Math.max(window.innerWidth, scrollingElement.clientWidth), + Math.max(window.innerHeight, scrollingElement.clientHeight) + ] + : () => [ + visualViewport.width * visualViewport.scale + window.innerWidth - scrollingElement.clientWidth, + visualViewport.height * visualViewport.scale + window.innerHeight - scrollingElement.clientHeight + ] + + const classes = cfg.screen !== void 0 && cfg.screen.bodyClasses === true + + const update = force => { + const [ w, h ] = getSize() + + if (h !== this.height) { + this.height = h + } + + if (w !== this.width) { + this.width = w + } + else if (force !== true) { + return + } + + let s = this.sizes + + this.gt.xs = w >= s.sm + this.gt.sm = w >= s.md + this.gt.md = w >= s.lg + this.gt.lg = w >= s.xl + this.lt.sm = w < s.sm + this.lt.md = w < s.md + this.lt.lg = w < s.lg + this.lt.xl = w < s.xl + this.xs = this.lt.sm + this.sm = this.gt.xs === true && this.lt.md === true + this.md = this.gt.sm === true && this.lt.lg === true + this.lg = this.gt.md === true && this.lt.xl === true + this.xl = this.gt.lg + + s = (this.xs === true && 'xs') || + (this.sm === true && 'sm') || + (this.md === true && 'md') || + (this.lg === true && 'lg') || + 'xl' + + if (s !== this.name) { + if (classes === true) { + document.body.classList.remove(`screen--${this.name}`) + document.body.classList.add(`screen--${s}`) + } + this.name = s + } + } + + let updateEvt, updateSizes = {}, updateDebounce = 16 + + this.setSizes = sizes => { + SIZE_LIST.forEach(name => { + if (sizes[name] !== void 0) { + updateSizes[name] = sizes[name] + } + }) + } + this.setDebounce = deb => { + updateDebounce = deb + } + + const start = () => { + const style = getComputedStyle(document.body) + + // if css props available + if (style.getPropertyValue('--q-size-sm')) { + SIZE_LIST.forEach(name => { + this.sizes[name] = parseInt(style.getPropertyValue(`--q-size-${name}`), 10) + }) + } + + this.setSizes = sizes => { + SIZE_LIST.forEach(name => { + if (sizes[name]) { + this.sizes[name] = sizes[name] + } + }) + update(true) + } + + this.setDebounce = delay => { + updateEvt !== void 0 && target.removeEventListener('resize', updateEvt, passive) + updateEvt = delay > 0 + ? debounce(update, delay) + : update + target.addEventListener('resize', updateEvt, passive) + } + + this.setDebounce(updateDebounce) + + if (Object.keys(updateSizes).length > 0) { + this.setSizes(updateSizes) + updateSizes = void 0 // free up memory + } + else { + update() + } + + // due to optimizations, this would be left out otherwise + classes === true && this.name === 'xs' && + document.body.classList.add('screen--xs') + } + + if (fromSSR === true) { + queues.takeover.push(start) + } + else { + start() + } + + Vue.util.defineReactive($q, 'screen', this) + } +} diff --git a/src/plugins/Screen.json b/src/plugins/Screen.json new file mode 100644 index 00000000000..1c8aa533246 --- /dev/null +++ b/src/plugins/Screen.json @@ -0,0 +1,193 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/options/screen-plugin" + }, + + "injection": "$q.screen", + + "props": { + "width": { + "type": "Number", + "desc": "Screen width (in pixels)", + "reactive": true, + "examples": [ 452 ] + }, + + "height": { + "type": "Number", + "desc": "Screen height (in pixels)", + "reactive": true, + "examples": [ 721 ] + }, + + "name": { + "type": "String", + "desc": "Tells current window breakpoint", + "values": [ "xs", "sm", "md", "lg", "xl" ], + "reactive": true, + "addedIn": "v1.5.2" + }, + + "sizes": { + "type": "Object", + "desc": "Breakpoints (in pixels)", + "definition": { + "sm": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ 600 ] + }, + "md": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ 1024 ] + }, + "lg": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ 1440 ] + }, + "xl": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ 1920 ] + } + }, + "reactive": true, + "examples": [ + "{ sm: 600, md: 1024, lg: 1440, xl: 1920 }" + ] + }, + + "lt": { + "type": "Object", + "desc": "Tells if current screen width is lower than breakpoint-name", + "reactive": true, + "definition": { + "sm": { + "type": "Boolean", + "desc": "Is current screen width lower than this breakpoint's lowest limit?" + }, + "md": { + "type": "Boolean", + "desc": "Is current screen width lower than this breakpoint's lowest limit?" + }, + "lg": { + "type": "Boolean", + "desc": "Is current screen width lower than this breakpoint's lowest limit?" + }, + "xl": { + "type": "Boolean", + "desc": "Is current screen width lower than this breakpoint's lowest limit?" + } + }, + "examples": [ + "{ sm: false, md: true, lg: true, xl: true }" + ] + }, + + "gt": { + "type": "Object", + "desc": "Tells if current screen width is greater than breakpoint-name", + "reactive": true, + "definition": { + "xs": { + "type": "Boolean", + "desc": "Is current screen width greater than this breakpoint's max limit?" + }, + "sm": { + "type": "Boolean", + "desc": "Is current screen width greater than this breakpoint's max limit?" + }, + "md": { + "type": "Boolean", + "desc": "Is current screen width greater than this breakpoint's max limit?" + }, + "lg": { + "type": "Boolean", + "desc": "Is current screen width greater than this breakpoint's max limit?" + } + }, + "examples": [ + "{ xs: true, sm: true, md: false, lg: false, xl: false }" + ] + }, + + "xs": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'xs' breakpoint", + "reactive": true + }, + + "sm": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'sm' breakpoint", + "reactive": true + }, + + "md": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'md' breakpoint", + "reactive": true + }, + + "lg": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'lg' breakpoint", + "reactive": true + }, + + "xl": { + "type": "Boolean", + "desc": "Current screen width fits exactly 'xl' breakpoint", + "reactive": true + } + }, + + "methods": { + "setSizes": { + "desc": "Override default breakpoint sizes", + "params": { + "breakpoints": { + "type": "Object", + "desc": "Pick what you want to override", + "definition": { + "sm": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ 600 ] + }, + "md": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ 1024 ] + }, + "lg": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ 1440 ] + }, + "xl": { + "type": "Number", + "desc": "Breakpoint width size (minimum size)", + "examples": [ 1920 ] + } + }, + "required": true + } + } + }, + + "setDebounce": { + "desc": "Debounce update of all props when screen width/height changes", + "params": { + "amount": { + "type": "Number", + "desc": "Amount in milliseconds", + "required": true, + "examples": [ 300 ] + } + } + } + } +} diff --git a/src/plugins/SessionStorage.js b/src/plugins/SessionStorage.js new file mode 100644 index 00000000000..b3de6d3d989 --- /dev/null +++ b/src/plugins/SessionStorage.js @@ -0,0 +1,13 @@ +import { isSSR, client } from './Platform.js' +import { getEmptyStorage, getStorage } from '../utils/private/web-storage.js' + +export default { + install ({ $q }) { + const storage = isSSR === true || client.has.webStorage === false + ? getEmptyStorage() + : getStorage('session') + + $q.sessionStorage = storage + Object.assign(this, storage) + } +} diff --git a/src/plugins/SessionStorage.json b/src/plugins/SessionStorage.json new file mode 100644 index 00000000000..dce409c13ff --- /dev/null +++ b/src/plugins/SessionStorage.json @@ -0,0 +1,5 @@ +{ + "mixins": [ "utils/private/web-storage" ], + + "injection": "$q.sessionStorage" +} diff --git a/src/ssr-update.js b/src/ssr-update.js new file mode 100644 index 00000000000..dc24161d397 --- /dev/null +++ b/src/ssr-update.js @@ -0,0 +1,36 @@ +import { $q, queues } from './install.js' + +const mixin = { + mounted () { + queues.takeover.forEach(run => { + run(this.$q) + }) + } +} + +export default function (ctx) { + if (ctx.ssr) { + const q = { + ...$q, + ssrContext: ctx.ssr + } + + Object.assign(ctx.ssr, { + Q_HEAD_TAGS: '', + Q_BODY_ATTRS: '', + Q_BODY_TAGS: '' + }) + + ctx.app.$q = ctx.ssr.$q = q + + queues.server.forEach(run => { + run(q, ctx) + }) + } + else { + const mixins = ctx.app.mixins || [] + if (mixins.includes(mixin) === false) { + ctx.app.mixins = mixins.concat(mixin) + } + } +} diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 00000000000..25f6807adf2 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,44 @@ +import clone from './utils/clone.js' +import colors from './utils/colors.js' +import copyToClipboard from './utils/copy-to-clipboard.js' +import date from './utils/date.js' +import debounce from './utils/debounce.js' +import debouncedRef from './utils/debounced-ref.js' +import dom from './utils/dom.js' +import event, { noop } from './utils/event.js' +import exportFile from './utils/export-file.js' +import extend from './utils/extend.js' +import format from './utils/format.js' +import frameDebounce from './utils/frame-debounce.js' +import is from './utils/is.js' +import morph from './utils/morph.js' +import openURL from './utils/open-url.js' +import patterns from './utils/patterns.js' +import runSequentialPromises from './utils/run-sequential-promises.js' +import scroll from './utils/scroll.js' +import throttle from './utils/throttle.js' +import uid from './utils/uid.js' + +export { + clone, + colors, + copyToClipboard, + date, + debounce, + debouncedRef, + dom, + event, + noop, + exportFile, + extend, + format, + frameDebounce, + is, + morph, + openURL, + patterns, + runSequentialPromises, + scroll, + throttle, + uid +} diff --git a/src/utils/clone.js b/src/utils/clone.js new file mode 100644 index 00000000000..bd4787208d0 --- /dev/null +++ b/src/utils/clone.js @@ -0,0 +1,55 @@ +// adapted from https://stackoverflow.com/a/40294058 + +export default function cloneDeep (data, hash = new WeakMap()) { + if (Object(data) !== data) return data + if (hash.has(data)) return hash.get(data) + + const result = data instanceof Date + ? new Date(data) + : (data instanceof RegExp + ? new RegExp(data.source, data.flags) + : (data instanceof Set + ? new Set() + : (data instanceof Map + ? new Map() + : (typeof data.constructor !== 'function' + ? Object.create(null) + : (data.prototype !== void 0 && typeof data.prototype.constructor === 'function' + ? data + : new data.constructor() + ) + ) + ) + ) + ) + + if (typeof data.constructor === 'function' && typeof data.valueOf === 'function') { + const val = data.valueOf() + + if (Object(val) !== val) { + const result = new data.constructor(val) + + hash.set(data, result) + + return result + } + } + + hash.set(data, result) + + if (data instanceof Set) { + data.forEach(val => { + result.add(cloneDeep(val, hash)) + }) + } + else if (data instanceof Map) { + data.forEach((val, key) => { + result.set(key, cloneDeep(val, hash)) + }) + } + + return Object.assign( + result, + ...Object.keys(data).map(key => ({ [key]: cloneDeep(data[key], hash) })) + ) +} diff --git a/src/utils/colors.js b/src/utils/colors.js new file mode 100644 index 00000000000..6e362718d72 --- /dev/null +++ b/src/utils/colors.js @@ -0,0 +1,325 @@ +const reRGBA = /^rgb(a)?\((\d{1,3}),(\d{1,3}),(\d{1,3}),?([01]?\.?\d*?)?\)$/ + +export function rgbToHex ({ r, g, b, a }) { + const alpha = a !== void 0 + + r = Math.round(r) + g = Math.round(g) + b = Math.round(b) + + if ( + r > 255 || + g > 255 || + b > 255 || + (alpha && a > 100) + ) { + throw new TypeError('Expected 3 numbers below 256 (and optionally one below 100)') + } + + a = alpha + ? (Math.round(255 * a / 100) | 1 << 8).toString(16).slice(1) + : '' + + return '#' + ((b | g << 8 | r << 16) | 1 << 24).toString(16).slice(1) + a +} + +export function rgbToString ({ r, g, b, a }) { + return `rgb${a !== void 0 ? 'a' : ''}(${r},${g},${b}${a !== void 0 ? ',' + (a / 100) : ''})` +} + +export function hexToRgb (hex) { + if (typeof hex !== 'string') { + throw new TypeError('Expected a string') + } + + hex = hex.replace(/^#/, '') + + if (hex.length === 3) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + } + else if (hex.length === 4) { + hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3] + } + + const num = parseInt(hex, 16) + + return hex.length > 6 + ? { r: num >> 24 & 255, g: num >> 16 & 255, b: num >> 8 & 255, a: Math.round((num & 255) / 2.55) } + : { r: num >> 16, g: num >> 8 & 255, b: num & 255 } +} + +export function hsvToRgb ({ h, s, v, a }) { + let r, g, b + s = s / 100 + v = v / 100 + + h = h / 360 + const + i = Math.floor(h * 6), + f = h * 6 - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s) + + switch (i % 6) { + case 0: + r = v + g = t + b = p + break + case 1: + r = q + g = v + b = p + break + case 2: + r = p + g = v + b = t + break + case 3: + r = p + g = q + b = v + break + case 4: + r = t + g = p + b = v + break + case 5: + r = v + g = p + b = q + break + } + + return { + r: Math.round(r * 255), + g: Math.round(g * 255), + b: Math.round(b * 255), + a + } +} + +export function rgbToHsv ({ r, g, b, a }) { + const + max = Math.max(r, g, b), + min = Math.min(r, g, b), + d = max - min, + s = (max === 0 ? 0 : d / max), + v = max / 255 + let h + + switch (max) { + case min: + h = 0 + break + case r: + h = (g - b) + d * (g < b ? 6 : 0) + h /= 6 * d + break + case g: + h = (b - r) + d * 2 + h /= 6 * d + break + case b: + h = (r - g) + d * 4 + h /= 6 * d + break + } + + return { + h: Math.round(h * 360), + s: Math.round(s * 100), + v: Math.round(v * 100), + a + } +} + +export function textToRgb (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string') + } + + const color = str.replace(/ /g, '') + + const m = reRGBA.exec(color) + + if (m === null) { + return hexToRgb(color) + } + + const rgb = { + r: Math.min(255, parseInt(m[2], 10)), + g: Math.min(255, parseInt(m[3], 10)), + b: Math.min(255, parseInt(m[4], 10)) + } + + if (m[1]) { + const alpha = parseFloat(m[5]) + rgb.a = Math.min(1, isNaN(alpha) === true ? 1 : alpha) * 100 + } + + return rgb +} + +/* works as darken if percent < 0 */ +export function lighten (color, percent) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (typeof percent !== 'number') { + throw new TypeError('Expected a numeric percent') + } + + const rgb = textToRgb(color), + t = percent < 0 ? 0 : 255, + p = Math.abs(percent) / 100, + R = rgb.r, + G = rgb.g, + B = rgb.b + + return '#' + ( + 0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + + (Math.round((t - G) * p) + G) * 0x100 + + (Math.round((t - B) * p) + B) + ).toString(16).slice(1) +} + +export function luminosity (color) { + if (typeof color !== 'string' && (!color || color.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b} object as color') + } + + const + rgb = typeof color === 'string' ? textToRgb(color) : color, + r = rgb.r / 255, + g = rgb.g / 255, + b = rgb.b / 255, + R = r <= 0.03928 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4), + G = g <= 0.03928 ? g / 12.92 : Math.pow((g + 0.055) / 1.055, 2.4), + B = b <= 0.03928 ? b / 12.92 : Math.pow((b + 0.055) / 1.055, 2.4) + return 0.2126 * R + 0.7152 * G + 0.0722 * B +} + +export function brightness (color) { + if (typeof color !== 'string' && (!color || color.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b} object as color') + } + + const rgb = typeof color === 'string' + ? textToRgb(color) + : color + + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000 +} + +export function blend (fgColor, bgColor) { + if (typeof fgColor !== 'string' && (!fgColor || fgColor.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b[, a]} object as fgColor') + } + + if (typeof bgColor !== 'string' && (!bgColor || bgColor.r === void 0)) { + throw new TypeError('Expected a string or a {r, g, b[, a]} object as bgColor') + } + + const + rgb1 = typeof fgColor === 'string' ? textToRgb(fgColor) : fgColor, + r1 = rgb1.r / 255, + g1 = rgb1.g / 255, + b1 = rgb1.b / 255, + a1 = rgb1.a !== void 0 ? rgb1.a / 100 : 1, + rgb2 = typeof bgColor === 'string' ? textToRgb(bgColor) : bgColor, + r2 = rgb2.r / 255, + g2 = rgb2.g / 255, + b2 = rgb2.b / 255, + a2 = rgb2.a !== void 0 ? rgb2.a / 100 : 1, + a = a1 + a2 * (1 - a1), + r = Math.round(((r1 * a1 + r2 * a2 * (1 - a1)) / a) * 255), + g = Math.round(((g1 * a1 + g2 * a2 * (1 - a1)) / a) * 255), + b = Math.round(((b1 * a1 + b2 * a2 * (1 - a1)) / a) * 255) + + const ret = { r, g, b, a: Math.round(a * 100) } + return typeof fgColor === 'string' + ? rgbToHex(ret) + : ret +} + +export function changeAlpha (color, offset) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + + if (offset === void 0 || offset < -1 || offset > 1) { + throw new TypeError('Expected offset to be between -1 and 1') + } + + const { r, g, b, a } = textToRgb(color) + const alpha = a !== void 0 ? a / 100 : 0 + + return rgbToHex({ + r, g, b, a: Math.round(Math.min(1, Math.max(0, alpha + offset)) * 100) + }) +} + +export function setBrand (color, value, element = document.body) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (typeof value !== 'string') { + throw new TypeError('Expected a string as value') + } + if (!(element instanceof Element)) { + throw new TypeError('Expected a DOM element') + } + + element.style.setProperty(`--q-color-${color}`, value) +} + +export function getBrand (color, element = document.body) { + if (typeof color !== 'string') { + throw new TypeError('Expected a string as color') + } + if (!(element instanceof Element)) { + throw new TypeError('Expected a DOM element') + } + + return getComputedStyle(element).getPropertyValue(`--q-color-${color}`).trim() || null +} + +export function getPaletteColor (colorName) { + if (typeof colorName !== 'string') { + throw new TypeError('Expected a string as color') + } + + const el = document.createElement('div') + + el.className = `text-${colorName} invisible fixed no-pointer-events` + document.body.appendChild(el) + + const result = getComputedStyle(el).getPropertyValue('color') + + el.remove() + + return rgbToHex(textToRgb(result)) +} + +// TODO: remove in v2 +export const stringToRgb = textToRgb + +export default { + rgbToHex, + hexToRgb, + hsvToRgb, + rgbToHsv, + textToRgb, + lighten, + luminosity, + brightness, + blend, + changeAlpha, + setBrand, + getBrand, + getPaletteColor +} diff --git a/src/utils/copy-to-clipboard.js b/src/utils/copy-to-clipboard.js new file mode 100644 index 00000000000..390ec7c3b74 --- /dev/null +++ b/src/utils/copy-to-clipboard.js @@ -0,0 +1,29 @@ +function fallback (text) { + const area = document.createElement('textarea') + area.value = text + area.contentEditable = true + area.style.position = 'fixed' // avoid scrolling to bottom + + document.body.appendChild(area) + area.focus() + area.select() + + const res = document.execCommand('copy') + + area.remove() + return res +} + +export default function (text) { + return navigator.clipboard !== void 0 + ? navigator.clipboard.writeText(text) + : new Promise((resolve, reject) => { + const res = fallback(text) + if (res) { + resolve(true) + } + else { + reject(res) + } + }) +} diff --git a/src/utils/date.js b/src/utils/date.js new file mode 100644 index 00000000000..34f14ac364a --- /dev/null +++ b/src/utils/date.js @@ -0,0 +1,1028 @@ +/* eslint no-fallthrough: 0 */ + +import { isDate } from './is.js' +import { pad, capitalize } from './format.js' +import { jalaaliMonthLength } from './private/date-persian.js' +import lang, { defaultLang } from '../lang.js' + +const + MILLISECONDS_IN_DAY = 86400000, + MILLISECONDS_IN_HOUR = 3600000, + MILLISECONDS_IN_MINUTE = 60000, + dateConstructorArgs = [ 'year', 'month', 'date', 'hours', 'minutes', 'seconds', 'milliseconds' ], + defaultMask = 'YYYY-MM-DDTHH:mm:ss.SSSZ', + token = /\[((?:[^\]\\]|\\]|\\)*)\]|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]/g, + reverseToken = /(\[[^\]]*\])|d{1,4}|M{1,4}|m{1,2}|w{1,2}|Qo|Do|D{1,4}|YY(?:YY)?|H{1,2}|h{1,2}|s{1,2}|S{1,3}|Z{1,2}|a{1,2}|[AQExX]|([.*+:?^,\s${}()|\\]+)/g, + regexStore = new Map() + +function getRegexData (mask, dateLocale) { + const + days = '(' + dateLocale.days.join('|') + '|)', + key = mask + days + + if (regexStore.has(key) === true) { + return regexStore.get(key) + } + + const + daysShort = '(' + dateLocale.daysShort.join('|') + '|)', + months = '(' + dateLocale.months.join('|') + '|)', + monthsShort = '(' + dateLocale.monthsShort.join('|') + '|)' + + const map = {} + let index = 0 + + const regexText = mask.replace(reverseToken, match => { + index++ + switch (match) { + case 'YY': + map.YY = index + return '(-?\\d{1,2}|)' + case 'YYYY': + map.YYYY = index + return '(-?\\d{1,4}|)' + case 'M': + map.M = index + return '(\\d{1,2}|)' + case 'MM': + map.M = index // bumping to M + return '(\\d{2}|)' + case 'MMM': + map.MMM = index + return monthsShort + case 'MMMM': + map.MMMM = index + return months + case 'D': + map.D = index + return '(\\d{1,2}|)' + case 'Do': + map.D = index // bumping to D + return '(\\d{1,2}(?:st|nd|rd|th)|)' + case 'DD': + map.D = index // bumping to D + return '(\\d{2}|)' + case 'H': + map.H = index + return '(\\d{1,2}|)' + case 'HH': + map.H = index // bumping to H + return '(\\d{2}|)' + case 'h': + map.h = index + return '(\\d{1,2}|)' + case 'hh': + map.h = index // bumping to h + return '(\\d{2}|)' + case 'm': + map.m = index + return '(\\d{1,2}|)' + case 'mm': + map.m = index // bumping to m + return '(\\d{2}|)' + case 's': + map.s = index + return '(\\d{1,2}|)' + case 'ss': + map.s = index // bumping to s + return '(\\d{2}|)' + case 'S': + map.S = index + return '(\\d{1}|)' + case 'SS': + map.S = index // bump to S + return '(\\d{2}|)' + case 'SSS': + map.S = index // bump to S + return '(\\d{3}|)' + case 'A': + map.A = index + return '(AM|PM|)' + case 'a': + map.a = index + return '(am|pm|)' + case 'aa': + map.aa = index + return '(a\\.m\\.|p\\.m\\.|)' + + case 'ddd': + return daysShort + case 'dddd': + return days + case 'Q': + case 'd': + case 'E': + return '(\\d{1}|)' + case 'Qo': + return '(1st|2nd|3rd|4th|)' + case 'DDD': + case 'DDDD': + return '(\\d{1,3}|)' + case 'w': + return '(\\d{1,2}|)' + case 'ww': + return '(\\d{2}|)' + + case 'Z': // to split: (?:(Z)()()|([+-])?(\\d{2}):?(\\d{2})) + map.Z = index + return '(Z|[+-]\\d{2}:\\d{2}|)' + case 'ZZ': + map.ZZ = index + return '(Z|[+-]\\d{2}\\d{2}|)' + + case 'X': + map.X = index + return '(-?\\d+|)' + case 'x': + map.x = index + return '(-?\\d{4,}|)' + + default: + index-- + if (match[ 0 ] === '[') { + match = match.substring(1, match.length - 1) + } + return match.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + } + }) + + const res = { map, regex: new RegExp('^' + regexText) } + regexStore.set(key, res) + + return res +} + +function getDateLocale (paramDateLocale, langProps) { + return paramDateLocale !== void 0 + ? paramDateLocale + : ( + langProps !== void 0 + ? langProps.date + : defaultLang.date + ) +} + +function formatTimezone (offset, delimeter = '') { + const + sign = offset > 0 ? '-' : '+', + absOffset = Math.abs(offset), + hours = Math.floor(absOffset / 60), + minutes = absOffset % 60 + + return sign + pad(hours) + delimeter + pad(minutes) +} + +function normalizeMod (mod) { + const acc = { ...mod } + + if (mod.years !== void 0) { + acc.year = mod.years + delete acc.years + } + + if (mod.months !== void 0) { + acc.month = mod.months + delete acc.months + } + + if (mod.days !== void 0) { + acc.date = mod.days + delete acc.days + } + if (mod.day !== void 0) { + acc.date = mod.day + delete acc.day + } + + if (mod.hour !== void 0) { + acc.hours = mod.hour + delete acc.hour + } + + if (mod.minute !== void 0) { + acc.minutes = mod.minute + delete acc.minute + } + + if (mod.second !== void 0) { + acc.seconds = mod.second + delete acc.second + } + + if (mod.millisecond !== void 0) { + acc.milliseconds = mod.millisecond + delete acc.millisecond + } + + return acc +} + +const maxDayDate = new Date() +function getMaxDay (year, month, calendar) { + if (calendar === 'persian') { + return jalaaliMonthLength(year, month) + } + + maxDayDate.setFullYear(year) + maxDayDate.setMonth(month) + maxDayDate.setDate(0) + return maxDayDate.getDate() +} + +function applyYearMonthDay (date, mod, type) { + const + year = mod.year !== void 0 ? mod.year : date[ `get${type}FullYear` ](), + month = mod.month !== void 0 ? mod.month - 1 : date[ `get${type}Month` ](), + maxDay = getMaxDay(year, month + 1), + day = Math.max(1, Math.min(maxDay, mod.date !== void 0 ? mod.date : date[ `get${type}Date` ]())) + + date[ `set${type}Date` ](1) + date[ `set${type}Month` ](2) + + date[ `set${type}FullYear` ](year) + date[ `set${type}Month` ](month) + date[ `set${type}Date` ](day) + + delete mod.year + delete mod.month + delete mod.date + + return date +} + +function applyYearMonthDayChange (date, mod, sign) { + let + year = date.getFullYear(), + month = date.getMonth() + 1 + + if (mod.year !== void 0) { + year += sign * mod.year + delete mod.year + } + + if (mod.month !== void 0) { + month += sign * mod.month + delete mod.month + } + + applyYearMonthDay(date, { year, month }, '') + + if (mod.date !== void 0) { + date.setDate(date.getDate() + sign * mod.date) + delete mod.date + } + + return date +} + +function getChange (date, rawMod, sign) { + const + mod = normalizeMod(rawMod), + d = new Date(date), + t = mod.year !== void 0 || mod.month !== void 0 || mod.date !== void 0 + ? applyYearMonthDayChange(d, mod, sign) // removes year/month/day + : d + + for (const key in mod) { + const op = capitalize(key) + t[ `set${op}` ](t[ `get${op}` ]() + sign * mod[ key ]) + } + + return t +} + +export function __safeCreateDate (...args) { + if (args.length > 1 && args[0] >= 0 && args[0] <= 99) { + return buildDate(dateConstructorArgs.reduce((mod, key, index) => { + if (args[index] !== void 0) { + mod[key] = args[index] + } + + return mod + }, {})) + } + + return new Date(...args) +} + +export function adjustDate (date, rawMod, utc) { + const + mod = normalizeMod(rawMod), + type = utc === true ? 'UTC' : '', + d = date === null || date === void 0 ? new Date() : new Date(date), + t = mod.year !== void 0 || mod.month !== void 0 || mod.date !== void 0 + ? applyYearMonthDay(d, mod, type) // removes year/month/day + : d + + for (const key in mod) { + const op = key.charAt(0).toUpperCase() + key.slice(1) + t[ `set${type}${op}` ](mod[ key ]) + } + + return t +} + +export function extractDate (str, mask, dateLocale) { + const d = __splitDate(str, mask, dateLocale) + + const date = __safeCreateDate( + d.year, + d.month === null ? null : d.month - 1, + d.day === null ? 1 : d.day, + d.hour, + d.minute, + d.second, + d.millisecond + ) + + const tzOffset = date.getTimezoneOffset() + + return d.timezoneOffset === null || d.timezoneOffset === tzOffset + ? date + : getChange(date, { minutes: d.timezoneOffset - tzOffset }, 1) +} + +export function __splitDate (str, mask, dateLocale, calendar, defaultModel) { + const date = { + year: null, + month: null, + day: null, + hour: null, + minute: null, + second: null, + millisecond: null, + timezoneOffset: null, + dateHash: null, + timeHash: null + } + + defaultModel !== void 0 && Object.assign(date, defaultModel) + + if ( + str === void 0 || + str === null || + str === '' || + typeof str !== 'string' + ) { + return date + } + + if (mask === void 0) { + mask = defaultMask + } + + const + langOpts = getDateLocale(dateLocale, lang.props), + months = langOpts.months, + monthsShort = langOpts.monthsShort + + const { regex, map } = getRegexData(mask, langOpts) + + const match = str.match(regex) + + if (match === null) { + return date + } + + const idx = { ...map } + Object.keys(idx).forEach(key => { + if (match[idx[key]] === '') { + idx[key] = void 0 + } + }) + + let tzString = '' + + if (idx.X !== void 0 || idx.x !== void 0) { + const stamp = parseInt(match[ idx.X !== void 0 ? idx.X : idx.x ], 10) + + if (isNaN(stamp) === true || stamp < 0) { + return date + } + + const d = new Date(stamp * (idx.X !== void 0 ? 1000 : 1)) + + date.year = d.getFullYear() + date.month = d.getMonth() + 1 + date.day = d.getDate() + date.hour = d.getHours() + date.minute = d.getMinutes() + date.second = d.getSeconds() + date.millisecond = d.getMilliseconds() + } + else { + if (idx.YYYY !== void 0) { + date.year = parseInt(match[ idx.YYYY ], 10) + } + else if (idx.YY !== void 0) { + const y = parseInt(match[ idx.YY ], 10) + date.year = y < 0 ? y : 2000 + y + } + + if (idx.M !== void 0) { + date.month = parseInt(match[ idx.M ], 10) + if (date.month < 1 || date.month > 12) { + return date + } + } + else if (idx.MMM !== void 0) { + date.month = monthsShort.indexOf(match[ idx.MMM ]) + 1 + } + else if (idx.MMMM !== void 0) { + date.month = months.indexOf(match[ idx.MMMM ]) + 1 + } + + if (idx.D !== void 0) { + date.day = parseInt(match[ idx.D ], 10) + + if (date.year === null || date.month === null || date.day < 1) { + return date + } + + if (date.day > getMaxDay(date.year, date.month, calendar)) { + return date + } + } + + if (idx.H !== void 0) { + date.hour = parseInt(match[ idx.H ], 10) % 24 + } + else if (idx.h !== void 0) { + date.hour = parseInt(match[ idx.h ], 10) % 12 + if ( + (idx.A && match[ idx.A ] === 'PM') || + (idx.a && match[ idx.a ] === 'pm') || + (idx.aa && match[ idx.aa ] === 'p.m.') + ) { + date.hour += 12 + } + date.hour = date.hour % 24 + } + + if (idx.m !== void 0) { + date.minute = parseInt(match[ idx.m ], 10) % 60 + } + + if (idx.s !== void 0) { + date.second = parseInt(match[ idx.s ], 10) % 60 + } + + if (idx.S !== void 0) { + date.millisecond = parseInt(match[ idx.S ], 10) * 10 ** (3 - match[ idx.S ].length) + } + + if (idx.Z !== void 0 || idx.ZZ !== void 0) { + tzString = (idx.Z !== void 0 ? match[ idx.Z ].replace(':', '') : match[ idx.ZZ ]) + date.timezoneOffset = (tzString[ 0 ] === '+' ? -1 : 1) * (60 * tzString.slice(1, 3) + 1 * tzString.slice(3, 5)) + } + } + + date.dateHash = date.year + '/' + pad(date.month) + '/' + pad(date.day) + date.timeHash = pad(date.hour) + ':' + pad(date.minute) + ':' + pad(date.second) + tzString + + return date +} + +export function isValid (date) { + return typeof date === 'number' + ? true + : isNaN(Date.parse(date)) === false +} + +export function buildDate (mod, utc) { + return adjustDate(null, mod, utc) +} + +export function getDayOfWeek (date, dateLocale) { + const langOpts = getDateLocale(dateLocale, lang.props) + const dow = new Date(date).getDay() + return 1 + (7 + dow - (langOpts.firstDayOfWeek || 0)) % 7 +} + +export function getWeekOfYear (date) { + // Remove time components of date + const thursday = __safeCreateDate(date.getFullYear(), date.getMonth(), date.getDate()) + + // Change date to Thursday same week + thursday.setDate(thursday.getDate() - ((thursday.getDay() + 6) % 7) + 3) + + // Take January 4th as it is always in week 1 (see ISO 8601) + const firstThursday = __safeCreateDate(thursday.getFullYear(), 0, 4) + + // Change date to Thursday same week + firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3) + + // Check if daylight-saving-time-switch occurred and correct for it + const ds = thursday.getTimezoneOffset() - firstThursday.getTimezoneOffset() + thursday.setHours(thursday.getHours() - ds) + + // Number of weeks between target Thursday and first Thursday + const weekDiff = (thursday - firstThursday) / (MILLISECONDS_IN_DAY * 7) + return 1 + Math.floor(weekDiff) +} + +function getDayIdentifier (date) { + return date.getFullYear() * 10000 + date.getMonth() * 100 + date.getDate() +} + +function getDateIdentifier (date, onlyDate /* = false */) { + const d = new Date(date) + return onlyDate === true ? getDayIdentifier(d) : d.getTime() +} + +export function isBetweenDates (date, from, to, opts = {}) { + const + d1 = getDateIdentifier(from, opts.onlyDate), + d2 = getDateIdentifier(to, opts.onlyDate), + cur = getDateIdentifier(date, opts.onlyDate) + + return (cur > d1 || (opts.inclusiveFrom === true && cur === d1)) && + (cur < d2 || (opts.inclusiveTo === true && cur === d2)) +} + +export function addToDate (date, mod) { + return getChange(date, mod, 1) +} +export function subtractFromDate (date, mod) { + return getChange(date, mod, -1) +} + +export function startOfDate (date, unit, utc) { + const + t = new Date(date), + prefix = `set${utc === true ? 'UTC' : ''}` + + switch (unit) { + case 'year': + case 'years': + t[ `${prefix}Month` ](0) + case 'month': + case 'months': + t[ `${prefix}Date` ](1) + case 'day': + case 'days': + case 'date': + t[ `${prefix}Hours` ](0) + case 'hour': + case 'hours': + t[ `${prefix}Minutes` ](0) + case 'minute': + case 'minutes': + t[ `${prefix}Seconds` ](0) + case 'second': + case 'seconds': + t[ `${prefix}Milliseconds` ](0) + } + return t +} + +export function endOfDate (date, unit, utc) { + const + t = new Date(date), + prefix = `set${utc === true ? 'UTC' : ''}` + + switch (unit) { + case 'year': + case 'years': + t[ `${prefix}Month` ](11) + case 'month': + case 'months': + t[ `${prefix}Date` ](daysInMonth(t)) + case 'day': + case 'days': + case 'date': + t[ `${prefix}Hours` ](23) + case 'hour': + case 'hours': + t[ `${prefix}Minutes` ](59) + case 'minute': + case 'minutes': + t[ `${prefix}Seconds` ](59) + case 'second': + case 'seconds': + t[ `${prefix}Milliseconds` ](999) + } + return t +} + +export function getMaxDate (date /* , ...args */) { + let t = new Date(date) + Array.prototype.slice.call(arguments, 1).forEach(d => { + t = Math.max(t, new Date(d)) + }) + return t +} + +export function getMinDate (date /*, ...args */) { + let t = new Date(date) + Array.prototype.slice.call(arguments, 1).forEach(d => { + t = Math.min(t, new Date(d)) + }) + return t +} + +function getDiff (t, sub, interval) { + return Math.floor( + ( + (t.getTime() - t.getTimezoneOffset() * MILLISECONDS_IN_MINUTE) - + (sub.getTime() - sub.getTimezoneOffset() * MILLISECONDS_IN_MINUTE) + ) / interval + ) +} + +export function getDateDiff (date, subtract, unit = 'days') { + const + t = new Date(date), + sub = new Date(subtract) + + switch (unit) { + case 'years': + case 'year': + return (t.getFullYear() - sub.getFullYear()) + + case 'months': + case 'month': + return (t.getFullYear() - sub.getFullYear()) * 12 + t.getMonth() - sub.getMonth() + + case 'days': + case 'day': + case 'date': + return getDiff(startOfDate(t, 'day'), startOfDate(sub, 'day'), MILLISECONDS_IN_DAY) + + case 'hours': + case 'hour': + return getDiff(startOfDate(t, 'hour'), startOfDate(sub, 'hour'), MILLISECONDS_IN_HOUR) + + case 'minutes': + case 'minute': + return getDiff(startOfDate(t, 'minute'), startOfDate(sub, 'minute'), MILLISECONDS_IN_MINUTE) + + case 'seconds': + case 'second': + return getDiff(startOfDate(t, 'second'), startOfDate(sub, 'second'), 1000) + } +} + +export function getDayOfYear (date) { + return getDateDiff(date, startOfDate(date, 'year'), 'days') + 1 +} + +export function inferDateFormat (date) { + return isDate(date) === true + ? 'date' + : (typeof date === 'number' ? 'number' : 'string') +} + +export function getDateBetween (date, min, max) { + const t = new Date(date) + + if (min) { + const low = new Date(min) + if (t < low) { + return low + } + } + + if (max) { + const high = new Date(max) + if (t > high) { + return high + } + } + + return t +} + +export function isSameDate (date, date2, unit) { + const + t = new Date(date), + d = new Date(date2) + + if (unit === void 0) { + return t.getTime() === d.getTime() + } + + switch (unit) { + case 'second': + case 'seconds': + if (t.getSeconds() !== d.getSeconds()) { + return false + } + case 'minute': // intentional fall-through + case 'minutes': + if (t.getMinutes() !== d.getMinutes()) { + return false + } + case 'hour': // intentional fall-through + case 'hours': + if (t.getHours() !== d.getHours()) { + return false + } + case 'day': // intentional fall-through + case 'days': + case 'date': + if (t.getDate() !== d.getDate()) { + return false + } + case 'month': // intentional fall-through + case 'months': + if (t.getMonth() !== d.getMonth()) { + return false + } + case 'year': // intentional fall-through + case 'years': + if (t.getFullYear() !== d.getFullYear()) { + return false + } + break + default: + throw new Error(`date isSameDate unknown unit ${unit}`) + } + + return true +} + +export function daysInMonth (date) { + return (__safeCreateDate(date.getFullYear(), date.getMonth() + 1, 0)).getDate() +} + +function getOrdinal (n) { + if (n >= 11 && n <= 13) { + return `${n}th` + } + switch (n % 10) { + case 1: return `${n}st` + case 2: return `${n}nd` + case 3: return `${n}rd` + } + return `${n}th` +} + +const formatter = { + // Year: 00, 01, ..., 99 + YY (date, _dateLocale, forcedYear) { + // workaround for < 1900 with new Date() + const y = this.YYYY(date, _dateLocale, forcedYear) % 100 + return y >= 0 + ? pad(y) + : '-' + pad(Math.abs(y)) + }, + + // Year: 1900, 1901, ..., 2099 + YYYY (date, _dateLocale, forcedYear) { + // workaround for < 1900 with new Date() + return forcedYear !== void 0 && forcedYear !== null + ? forcedYear + : date.getFullYear() + }, + + // Month: 1, 2, ..., 12 + M (date) { + return date.getMonth() + 1 + }, + + // Month: 01, 02, ..., 12 + MM (date) { + return pad(date.getMonth() + 1) + }, + + // Month Short Name: Jan, Feb, ... + MMM (date, dateLocale) { + return dateLocale.monthsShort[ date.getMonth() ] + }, + + // Month Name: January, February, ... + MMMM (date, dateLocale) { + return dateLocale.months[ date.getMonth() ] + }, + + // Quarter: 1, 2, 3, 4 + Q (date) { + return Math.ceil((date.getMonth() + 1) / 3) + }, + + // Quarter: 1st, 2nd, 3rd, 4th + Qo (date) { + return getOrdinal(this.Q(date)) + }, + + // Day of month: 1, 2, ..., 31 + D (date) { + return date.getDate() + }, + + // Day of month: 1st, 2nd, ..., 31st + Do (date) { + return getOrdinal(date.getDate()) + }, + + // Day of month: 01, 02, ..., 31 + DD (date) { + return pad(date.getDate()) + }, + + // Day of year: 1, 2, ..., 366 + DDD (date) { + return getDayOfYear(date) + }, + + // Day of year: 001, 002, ..., 366 + DDDD (date) { + return pad(getDayOfYear(date), 3) + }, + + // Day of week: 0, 1, ..., 6 + d (date) { + return date.getDay() + }, + + // Day of week: Su, Mo, ... + dd (date, dateLocale) { + return this.dddd(date, dateLocale).slice(0, 2) + }, + + // Day of week: Sun, Mon, ... + ddd (date, dateLocale) { + return dateLocale.daysShort[ date.getDay() ] + }, + + // Day of week: Sunday, Monday, ... + dddd (date, dateLocale) { + return dateLocale.days[ date.getDay() ] + }, + + // Day of ISO week: 1, 2, ..., 7 + E (date) { + return date.getDay() || 7 + }, + + // Week of Year: 1 2 ... 52 53 + w (date) { + return getWeekOfYear(date) + }, + + // Week of Year: 01 02 ... 52 53 + ww (date) { + return pad(getWeekOfYear(date)) + }, + + // Hour: 0, 1, ... 23 + H (date) { + return date.getHours() + }, + + // Hour: 00, 01, ..., 23 + HH (date) { + return pad(date.getHours()) + }, + + // Hour: 1, 2, ..., 12 + h (date) { + const hours = date.getHours() + return hours === 0 + ? 12 + : (hours > 12 ? hours % 12 : hours) + }, + + // Hour: 01, 02, ..., 12 + hh (date) { + return pad(this.h(date)) + }, + + // Minute: 0, 1, ..., 59 + m (date) { + return date.getMinutes() + }, + + // Minute: 00, 01, ..., 59 + mm (date) { + return pad(date.getMinutes()) + }, + + // Second: 0, 1, ..., 59 + s (date) { + return date.getSeconds() + }, + + // Second: 00, 01, ..., 59 + ss (date) { + return pad(date.getSeconds()) + }, + + // 1/10 of second: 0, 1, ..., 9 + S (date) { + return Math.floor(date.getMilliseconds() / 100) + }, + + // 1/100 of second: 00, 01, ..., 99 + SS (date) { + return pad(Math.floor(date.getMilliseconds() / 10)) + }, + + // Millisecond: 000, 001, ..., 999 + SSS (date) { + return pad(date.getMilliseconds(), 3) + }, + + // Meridiem: AM, PM + A (date) { + return this.H(date) < 12 ? 'AM' : 'PM' + }, + + // Meridiem: am, pm + a (date) { + return this.H(date) < 12 ? 'am' : 'pm' + }, + + // Meridiem: a.m., p.m. + aa (date) { + return this.H(date) < 12 ? 'a.m.' : 'p.m.' + }, + + // Timezone: -01:00, +00:00, ... +12:00 + Z (date, _dateLocale, _forcedYear, forcedTimezoneOffset) { + const tzOffset = forcedTimezoneOffset === void 0 || forcedTimezoneOffset === null + ? date.getTimezoneOffset() + : forcedTimezoneOffset + + return formatTimezone(tzOffset, ':') + }, + + // Timezone: -0100, +0000, ... +1200 + ZZ (date, _dateLocale, _forcedYear, forcedTimezoneOffset) { + const tzOffset = forcedTimezoneOffset === void 0 || forcedTimezoneOffset === null + ? date.getTimezoneOffset() + : forcedTimezoneOffset + + return formatTimezone(tzOffset) + }, + + // Seconds timestamp: 512969520 + X (date) { + return Math.floor(date.getTime() / 1000) + }, + + // Milliseconds timestamp: 512969520900 + x (date) { + return date.getTime() + } +} + +export function formatDate (val, mask, dateLocale, __forcedYear, __forcedTimezoneOffset) { + if ( + (val !== 0 && !val) || + val === Infinity || + val === -Infinity + ) { + return + } + + const date = new Date(val) + + if (isNaN(date)) { + return + } + + if (mask === void 0) { + mask = defaultMask + } + + const locale = getDateLocale(dateLocale, lang.props) + + return mask.replace( + token, + (match, text) => match in formatter + ? formatter[ match ](date, locale, __forcedYear, __forcedTimezoneOffset) + : (text === void 0 ? match : text.split('\\]').join(']')) + ) +} + +export function clone (date) { + return isDate(date) === true + ? new Date(date.getTime()) + : date +} + +export default { + isValid, + extractDate, + buildDate, + getDayOfWeek, + getWeekOfYear, + isBetweenDates, + addToDate, + subtractFromDate, + adjustDate, + startOfDate, + endOfDate, + getMaxDate, + getMinDate, + getDateDiff, + getDayOfYear, + inferDateFormat, + getDateBetween, + isSameDate, + daysInMonth, + formatDate, + clone +} diff --git a/src/utils/debounce.js b/src/utils/debounce.js new file mode 100644 index 00000000000..e0fe682d585 --- /dev/null +++ b/src/utils/debounce.js @@ -0,0 +1,26 @@ +export default function (fn, wait = 250, immediate) { + let timeout + + function debounced (/* ...args */) { + const args = arguments + + const later = () => { + timeout = void 0 + if (immediate !== true) { + fn.apply(this, args) + } + } + + clearTimeout(timeout) + if (immediate === true && timeout === void 0) { + fn.apply(this, args) + } + timeout = setTimeout(later, wait) + } + + debounced.cancel = () => { + clearTimeout(timeout) + } + + return debounced +} diff --git a/src/utils/debounced-ref.js b/src/utils/debounced-ref.js new file mode 100644 index 00000000000..91ecaa543f9 --- /dev/null +++ b/src/utils/debounced-ref.js @@ -0,0 +1,48 @@ +export default function (vm, prop, wait = 250) { + const debounced = { + get value () { + const value = vm[prop] + + if (value !== debounced.propValue) { + debounced.propValue = value + debounced.internalValue = value + + debounced.timer !== void 0 && clearTimeout(debounced.timer) + debounced.timer = void 0 + } + + return debounced.internalValue + }, + + set value (value) { + if (debounced.internalValue === value) { + return + } + + debounced.internalValue = value + + debounced.timer !== void 0 && clearTimeout(debounced.timer) + debounced.timer = setTimeout(() => { + vm[prop] = value + + debounced.timer = void 0 + }, wait) + }, + + destroy () { + if (debounced.timer !== void 0) { + clearTimeout(debounced.timer) + debounced.timer = void 0 + + vm[prop] = debounced.internalValue + } + } + } + + vm.$once('hook:beforeDestroy', debounced.destroy) + + debounced.propValue = NaN + debounced.internalValue = NaN + + return debounced +} diff --git a/src/utils/dom.js b/src/utils/dom.js new file mode 100644 index 00000000000..10d64bd558d --- /dev/null +++ b/src/utils/dom.js @@ -0,0 +1,103 @@ +export function offset (el) { + if (el === window) { + return { top: 0, left: 0 } + } + const { top, left } = el.getBoundingClientRect() + return { top, left } +} + +export function style (el, property) { + return window.getComputedStyle(el).getPropertyValue(property) +} + +export function height (el) { + return el === window + ? window.innerHeight + : el.getBoundingClientRect().height +} + +export function width (el) { + return el === window + ? window.innerWidth + : el.getBoundingClientRect().width +} + +export function css (element, css) { + const style = element.style + + Object.keys(css).forEach(prop => { + style[prop] = css[prop] + }) +} + +export function cssBatch (elements, style) { + elements.forEach(el => css(el, style)) +} + +export function ready (fn) { + if (typeof fn !== 'function') { + return + } + + if (document.readyState !== 'loading') { + return fn() + } + + document.addEventListener('DOMContentLoaded', fn, false) +} + +// internal +export function getElement (el) { + const type = typeof el + + if (type === 'function') { + el = el() + } + + if (type === 'string') { + try { + el = document.querySelector(el) + } + catch (err) {} + } + + if (el !== Object(el)) { + return null + } + + return el._isVue === true && el.$el !== void 0 + ? el.$el + : el +} + +// internal +export function childHasFocus (el, focusedEl) { + if (el === void 0 || el.contains(focusedEl) === true) { + return true + } + + for (let next = el.nextElementSibling; next !== null; next = next.nextElementSibling) { + if (next.contains(focusedEl)) { + return true + } + } + + return false +} + +// internal +export function getBodyFullscreenElement (activeEl) { + return activeEl === document.documentElement || activeEl === null + ? document.body + : activeEl +} + +export default { + offset, + style, + height, + width, + css, + cssBatch, + ready +} diff --git a/src/utils/event.js b/src/utils/event.js new file mode 100644 index 00000000000..6b6cc2a2868 --- /dev/null +++ b/src/utils/event.js @@ -0,0 +1,197 @@ +export const listenOpts = { + hasPassive: false, + passiveCapture: true, + notPassiveCapture: true +} + +try { + var opts = Object.defineProperty({}, 'passive', { + get () { + Object.assign(listenOpts, { + hasPassive: true, + passive: { passive: true }, + notPassive: { passive: false }, + passiveCapture: { passive: true, capture: true }, + notPassiveCapture: { passive: false, capture: true } + }) + } + }) + window.addEventListener('qtest', null, opts) + window.removeEventListener('qtest', null, opts) +} +catch (e) {} + +export function noop () {} + +export function leftClick (e) { + return e.button === 0 +} + +export function middleClick (e) { + return e.button === 1 +} + +export function rightClick (e) { + return e.button === 2 +} + +export function position (e) { + if (e.touches && e.touches[0]) { + e = e.touches[0] + } + else if (e.changedTouches && e.changedTouches[0]) { + e = e.changedTouches[0] + } + else if (e.targetTouches && e.targetTouches[0]) { + e = e.targetTouches[0] + } + + return { + top: e.clientY, + left: e.clientX + } +} + +export function getEventPath (e) { + if (e.path) { + return e.path + } + if (e.composedPath) { + return e.composedPath() + } + + const path = [] + let el = e.target + + while (el) { + path.push(el) + + if (el.tagName === 'HTML') { + path.push(document) + path.push(window) + return path + } + + el = el.parentElement + } +} + +export function eventOnAncestors (e, el) { + const { target } = e + + while (el !== null && el !== void 0) { + if (el === target) { + return true + } + el = el.parentNode + } + + return false +} + +// Reasonable defaults +const + LINE_HEIGHT = 40, + PAGE_HEIGHT = 800 + +export function getMouseWheelDistance (e) { + let x = e.deltaX, y = e.deltaY + + if ((x || y) && e.deltaMode) { + const multiplier = e.deltaMode === 1 ? LINE_HEIGHT : PAGE_HEIGHT + x *= multiplier + y *= multiplier + } + + if (e.shiftKey && !x) { + [y, x] = [x, y] + } + + return { x, y } +} + +export function stop (e) { + e.stopPropagation() +} + +export function prevent (e) { + e.cancelable !== false && e.preventDefault() +} + +export function stopAndPrevent (e) { + e.cancelable !== false && e.preventDefault() + e.stopPropagation() +} + +export function preventDraggable (el, status) { + if (el === void 0 || (status === true && el.__dragPrevented === true)) { + return + } + + const fn = status === true + ? el => { + el.__dragPrevented = true + el.addEventListener('dragstart', prevent, listenOpts.notPassiveCapture) + } + : el => { + delete el.__dragPrevented + el.removeEventListener('dragstart', prevent, listenOpts.notPassiveCapture) + } + + el.querySelectorAll('a, img').forEach(fn) +} + +export function create (name, { bubbles = false, cancelable = false } = {}) { + try { + return new CustomEvent(name, { bubbles, cancelable }) + } + catch (e) { + // IE doesn't support `new Event()`, so... + const evt = document.createEvent('Event') + evt.initEvent(name, bubbles, cancelable) + return evt + } +} + +export function addEvt (ctx, targetName, events) { + const name = `__q_${targetName}_evt` + + ctx[name] = ctx[name] !== void 0 + ? ctx[name].concat(events) + : events + + events.forEach(evt => { + evt[0].addEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]]) + }) +} + +export function cleanEvt (ctx, targetName) { + const name = `__q_${targetName}_evt` + + if (ctx[name] !== void 0) { + ctx[name].forEach(evt => { + evt[0].removeEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]]) + }) + ctx[name] = void 0 + } +} + +/* + * also update /types/utils/event.d.ts + */ + +export default { + listenOpts, + leftClick, + middleClick, + rightClick, + position, + getEventPath, + eventOnAncestors, + getMouseWheelDistance, + stop, + prevent, + stopAndPrevent, + preventDraggable, + create +} diff --git a/src/utils/export-file.js b/src/utils/export-file.js new file mode 100644 index 00000000000..69a113e1234 --- /dev/null +++ b/src/utils/export-file.js @@ -0,0 +1,35 @@ +function clean (link) { + // allow time for iOS + setTimeout(() => { + window.URL.revokeObjectURL(link.href) + }, 10000) + link.remove() +} + +export default function (fileName, rawData, mimeType) { + const blob = new Blob([ rawData ], { type: mimeType || 'text/plain' }) + + // IE11 has its own stuff... + if (window.navigator.msSaveOrOpenBlob) { + return window.navigator.msSaveOrOpenBlob(blob, fileName) + } + + const link = document.createElement('a') + + link.download = fileName + link.href = window.URL.createObjectURL(blob) + + link.classList.add('hidden') + link.style.position = 'fixed' // avoid scrolling to bottom + document.body.appendChild(link) + + try { + link.click() + clean(link) + return true + } + catch (err) { + clean(link) + return err + } +} diff --git a/src/utils/extend.js b/src/utils/extend.js new file mode 100644 index 00000000000..2b5015e1ab5 --- /dev/null +++ b/src/utils/extend.js @@ -0,0 +1,79 @@ +const + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + notPlainObject = new Set( + ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp'] + .map(name => '[object ' + name + ']') + ) + +function isPlainObject (obj) { + if (obj !== Object(obj) || notPlainObject.has(toString.call(obj)) === true) { + return false + } + + if ( + obj.constructor && + hasOwn.call(obj, 'constructor') === false && + hasOwn.call(obj.constructor.prototype, 'isPrototypeOf') === false + ) { + return false + } + + let key + for (key in obj) {} + + return key === void 0 || hasOwn.call(obj, key) +} + +export default function extend () { + let + options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + deep = false + const length = arguments.length + + if (typeof target === 'boolean') { + deep = target + target = arguments[1] || {} + i = 2 + } + + if (Object(target) !== target && typeof target !== 'function') { + target = {} + } + + if (length === i) { + target = this + i-- + } + + for (; i < length; i++) { + if ((options = arguments[i]) !== null) { + for (name in options) { + src = target[name] + copy = options[name] + + if (target === copy) { + continue + } + + if (deep === true && copy && ((copyIsArray = Array.isArray(copy)) || isPlainObject(copy) === true)) { + if (copyIsArray === true) { + clone = Array.isArray(src) === true ? src : [] + } + else { + clone = isPlainObject(src) === true ? src : {} + } + + target[name] = extend(deep, clone, copy) + } + else if (copy !== void 0) { + target[name] = copy + } + } + } + } + + return target +} diff --git a/src/utils/format.js b/src/utils/format.js new file mode 100644 index 00000000000..04df47e3585 --- /dev/null +++ b/src/utils/format.js @@ -0,0 +1,56 @@ +const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'] + +export function humanStorageSize (bytes) { + let u = 0 + + while (parseInt(bytes, 10) >= 1024 && u < units.length - 1) { + bytes /= 1024 + ++u + } + + return `${bytes.toFixed(1)}${units[u]}` +} + +export function capitalize (str) { + return str.charAt(0).toUpperCase() + str.slice(1) +} + +export function between (v, min, max) { + return max <= min + ? min + : Math.min(max, Math.max(min, v)) +} + +export function normalizeToInterval (v, min, max) { + if (max <= min) { + return min + } + + const size = (max - min + 1) + + let index = min + (v - min) % size + if (index < min) { + index = size + index + } + + return index === 0 ? 0 : index // fix for (-a % a) => -0 +} + +export function pad (v, length = 2, char = '0') { + if (v === void 0 || v === null) { + return v + } + + const val = '' + v + return val.length >= length + ? val + : new Array(length - val.length + 1).join(char) + val +} + +export default { + humanStorageSize, + capitalize, + between, + normalizeToInterval, + pad +} diff --git a/src/utils/frame-debounce.js b/src/utils/frame-debounce.js new file mode 100644 index 00000000000..f077c792494 --- /dev/null +++ b/src/utils/frame-debounce.js @@ -0,0 +1,22 @@ +export default function (fn) { + let wait = false, frame, callArgs + + function debounced (/* ...args */) { + callArgs = arguments + if (wait === true) { return } + + wait = true + frame = requestAnimationFrame(() => { + fn.apply(this, callArgs) + callArgs = void 0 + wait = false + }) + } + + debounced.cancel = () => { + window.cancelAnimationFrame(frame) + wait = false + } + + return debounced +} diff --git a/src/utils/is.js b/src/utils/is.js new file mode 100644 index 00000000000..efc9369a357 --- /dev/null +++ b/src/utils/is.js @@ -0,0 +1,148 @@ +const + hasMap = typeof Map === 'function', + hasSet = typeof Set === 'function', + hasArrayBuffer = typeof ArrayBuffer === 'function' + +export function isDeepEqual (a, b) { + if (a === b) { + return true + } + + if (a !== null && b !== null && typeof a === 'object' && typeof b === 'object') { + if (a.constructor !== b.constructor) { + return false + } + + let length, i + + if (a.constructor === Array) { + length = a.length + + if (length !== b.length) { + return false + } + + for (i = length; i-- !== 0;) { + if (isDeepEqual(a[i], b[i]) !== true) { + return false + } + } + + return true + } + + if (hasMap === true && a.constructor === Map) { + if (a.size !== b.size) { + return false + } + + i = a.entries().next() + while (i.done !== true) { + if (b.has(i.value[0]) !== true) { + return false + } + i = i.next() + } + + i = a.entries().next() + while (i.done !== true) { + if (isDeepEqual(i.value[1], b.get(i.value[0])) !== true) { + return false + } + i = i.next() + } + + return true + } + + if (hasSet === true && a.constructor === Set) { + if (a.size !== b.size) { + return false + } + + i = a.entries().next() + while (i.done !== true) { + if (b.has(i.value[0]) !== true) { + return false + } + i = i.next() + } + + return true + } + + if (hasArrayBuffer === true && a.buffer != null && a.buffer.constructor === ArrayBuffer) { + length = a.length + + if (length !== b.length) { + return false + } + + for (i = length; i-- !== 0;) { + if (a[i] !== b[i]) { + return false + } + } + + return true + } + + if (a.constructor === RegExp) { + return a.source === b.source && a.flags === b.flags + } + + if (a.valueOf !== Object.prototype.valueOf) { + return a.valueOf() === b.valueOf() + } + + if (a.toString !== Object.prototype.toString) { + return a.toString() === b.toString() + } + + const keys = Object.keys(a).filter(key => a[key] !== void 0) + length = keys.length + + if (length !== Object.keys(b).filter(key => b[key] !== void 0).length) { + return false + } + + for (i = length; i-- !== 0;) { + const key = keys[i] + if (isDeepEqual(a[key], b[key]) !== true) { + return false + } + } + + return true + } + + // true if both NaN, false otherwise + return a !== a && b !== b // eslint-disable-line no-self-compare +} + +// not perfect, but what we ARE interested is for Arrays not to slip in +// as spread operator will mess things up in various areas +// see https://jsbench.me/tbl0iliyax/1 +export function isObject (v) { + return v !== null && typeof v === 'object' && Array.isArray(v) !== true +} + +export function isDate (v) { + return Object.prototype.toString.call(v) === '[object Date]' +} + +export function isRegexp (v) { + return Object.prototype.toString.call(v) === '[object RegExp]' +} + +export function isNumber (v) { + return typeof v === 'number' && isFinite(v) +} + +export default { + deepEqual: isDeepEqual, + object: isObject, + date: isDate, + regexp: isRegexp, + number: isNumber +} diff --git a/src/utils/morph.js b/src/utils/morph.js new file mode 100644 index 00000000000..852ed968581 --- /dev/null +++ b/src/utils/morph.js @@ -0,0 +1,978 @@ +import { getElement } from './dom.js' +import { isObject } from './is' + +let id = 0 +let offsetBase = void 0 + +function getAbsolutePosition (el, resize) { + if (offsetBase === void 0) { + offsetBase = document.createElement('div') + offsetBase.style.cssText = 'position: absolute; left: 0; top: 0' + document.body.appendChild(offsetBase) + } + + const boundingRect = el.getBoundingClientRect() + const baseRect = offsetBase.getBoundingClientRect() + const { marginLeft, marginRight, marginTop, marginBottom } = window.getComputedStyle(el) + const marginH = parseInt(marginLeft, 10) + parseInt(marginRight, 10) + const marginV = parseInt(marginTop, 10) + parseInt(marginBottom, 10) + + return { + left: boundingRect.left - baseRect.left, + top: boundingRect.top - baseRect.top, + width: boundingRect.right - boundingRect.left, + height: boundingRect.bottom - boundingRect.top, + widthM: boundingRect.right - boundingRect.left + (resize === true ? 0 : marginH), + heightM: boundingRect.bottom - boundingRect.top + (resize === true ? 0 : marginV), + marginH: resize === true ? marginH : 0, + marginV: resize === true ? marginV : 0 + } +} + +function getAbsoluteSize (el) { + return { + width: el.scrollWidth, + height: el.scrollHeight + } +} + +// firefox rulez +const styleEdges = [ 'Top', 'Right', 'Bottom', 'Left' ] +const styleBorderRadiuses = [ 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius' ] +const reStyleSkipKey = /-block|-inline|block-|inline-/ +const reStyleSkipRule = /(-block|-inline|block-|inline-).*:/ + +function getComputedStyle (el, props) { + const style = window.getComputedStyle(el) + const fixed = {} + for (let i = 0; i < props.length; i++) { + const prop = props[i] + + if (style[prop] === '') { + if (prop === 'cssText') { + const styleLen = style.length + let val = '' + + for (let i = 0; i < styleLen; i++) { + if (reStyleSkipKey.test(style[i]) !== true) { + val += style[i] + ': ' + style[style[i]] + '; ' + } + } + + fixed[prop] = val + } + else if ([ 'borderWidth', 'borderStyle', 'borderColor' ].indexOf(prop) > -1) { + const suffix = prop.replace('border', '') + let val = '' + for (let j = 0; j < styleEdges.length; j++) { + const subProp = 'border' + styleEdges[j] + suffix + val += style[subProp] + ' ' + } + fixed[prop] = val + } + else if (prop === 'borderRadius') { + let val1 = '' + let val2 = '' + for (let j = 0; j < styleBorderRadiuses.length; j++) { + const val = style[styleBorderRadiuses[j]].split(' ') + val1 += val[0] + ' ' + val2 += (val[1] === void 0 ? val[0] : val[1]) + ' ' + } + fixed[prop] = val1 + '/ ' + val2 + } + else { + fixed[prop] = style[prop] + } + } + else { + if (prop === 'cssText') { + fixed[prop] = style[prop] + .split(';') + .filter(val => reStyleSkipRule.test(val) !== true) + .join(';') + } + else { + fixed[prop] = style[prop] + } + } + } + + return fixed +} + +const zIndexPositions = ['absolute', 'fixed', 'relative', 'sticky'] + +function getMaxZIndex (elStart) { + let el = elStart + let maxIndex = 0 + + while (el !== null && el !== document) { + const { position, zIndex } = window.getComputedStyle(el) + const zIndexNum = Number(zIndex) + + if ( + zIndexNum > maxIndex && + (el === elStart || zIndexPositions.includes(position) === true) + ) { + maxIndex = zIndexNum + } + + el = el.parentNode + } + + return maxIndex +} + +function normalizeElements (opts) { + return { + from: opts.from, + to: opts.to !== void 0 + ? opts.to + : opts.from + } +} + +function normalizeOptions (options) { + if (typeof options === 'number') { + options = { + duration: options + } + } + else if (typeof options === 'function') { + options = { + onEnd: options + } + } + + return { + ...options, + + waitFor: options.waitFor === void 0 ? 0 : options.waitFor, + + duration: isNaN(options.duration) === true ? 300 : parseInt(options.duration, 10), + easing: typeof options.easing === 'string' && options.easing.length > 0 ? options.easing : 'ease-in-out', + delay: isNaN(options.delay) === true ? 0 : parseInt(options.delay, 10), + fill: typeof options.fill === 'string' && options.fill.length > 0 ? options.fill : 'none', + + resize: options.resize === true, + useCSS: options.useCSS === true || options.usecss === true, + hideFromClone: options.hideFromClone === true || options.hidefromclone === true, + keepToClone: options.keepToClone === true || options.keeptoclone === true, + + tween: options.tween === true, + tweenFromOpacity: isNaN(options.tweenFromOpacity) === true ? 0.6 : parseFloat(options.tweenFromOpacity), + tweenToOpacity: isNaN(options.tweenToOpacity) === true ? 0.5 : parseFloat(options.tweenToOpacity) + } +} + +function isValidElement (element) { + return element && + element.ownerDocument === document && + element.parentNode !== null +} + +export default function morph (_options) { + let cancel = () => false + let cancelStatus = false + let endElementTo = true + + const elements = normalizeElements(_options) + const options = normalizeOptions(_options) + + const elFrom = getElement(elements.from) + if (isValidElement(elFrom) !== true) { + // we return a cancel function that return false, meaning the cancel function failed + return cancel + } + // we clean other morphs running on this element + typeof elFrom.qMorphCancel === 'function' && elFrom.qMorphCancel() + + let animationFromClone = void 0 + let animationFromTween = void 0 + let animationToClone = void 0 + let animationTo = void 0 + + const elFromParent = elFrom.parentNode + const elFromNext = elFrom.nextElementSibling + + // we get the dimensions and characteristics + // of the parent of the initial element before changes + const elFromPosition = getAbsolutePosition(elFrom, options.resize) + const { + width: elFromParentWidthBefore, + height: elFromParentHeightBefore + } = getAbsoluteSize(elFromParent) + const { + borderWidth: elFromBorderWidth, + borderStyle: elFromBorderStyle, + borderColor: elFromBorderColor, + borderRadius: elFromBorderRadius, + backgroundColor: elFromBackground, + transform: elFromTransform, + position: elFromPositioningType, + cssText: elFromCssText + } = getComputedStyle(elFrom, [ 'borderWidth', 'borderStyle', 'borderColor', 'borderRadius', 'backgroundColor', 'transform', 'position', 'cssText' ]) + const elFromClassSaved = elFrom.classList.toString() + const elFromStyleSaved = elFrom.style.cssText + + // we make a clone of the initial element and + // use it to display until the final element is ready + // and to change the occupied space during animation + const elFromClone = elFrom.cloneNode(true) + const elFromTween = options.tween === true ? elFrom.cloneNode(true) : void 0 + + if (elFromTween !== void 0) { + elFromTween.className = elFromTween.classList.toString().split(' ').filter(c => /^bg-/.test(c) === false).join(' ') + } + + // if the initial element is not going to be removed do not show the placeholder + options.hideFromClone === true && elFromClone.classList.add('q-morph--internal') + + // prevent interaction with placeholder + elFromClone.setAttribute('aria-hidden', 'true') + elFromClone.style.transition = 'none' + elFromClone.style.animation = 'none' + elFromClone.style.pointerEvents = 'none' + elFromParent.insertBefore(elFromClone, elFromNext) + + // we mark the element with its cleanup function + elFrom.qMorphCancel = () => { + cancelStatus = true + + // we clean the clone of the initial element + elFromClone.remove() + elFromTween !== void 0 && elFromTween.remove() + + options.hideFromClone === true && elFromClone.classList.remove('q-morph--internal') + + // we remove the cleanup function from the element + elFrom.qMorphCancel = void 0 + } + + // will be called after Vue catches up with the changes done by _options.onToggle() function + const calculateFinalState = () => { + const elTo = getElement(elements.to) + if (cancelStatus === true || isValidElement(elTo) !== true) { + typeof elFrom.qMorphCancel === 'function' && elFrom.qMorphCancel() + + return + } + // we clean other morphs running on this element + elFrom !== elTo && typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel() + + // we hide the final element and the clone of the initial element + // we don't hide the final element if we want both it and the animated one visible + options.keepToClone !== true && elTo.classList.add('q-morph--internal') + elFromClone.classList.add('q-morph--internal') + + // we get the dimensions of the parent of the initial element after changes + // the difference is how much we should animate the clone + const { + width: elFromParentWidthAfter, + height: elFromParentHeightAfter + } = getAbsoluteSize(elFromParent) + + // we get the dimensions of the parent of the final element before changes + const { + width: elToParentWidthBefore, + height: elToParentHeightBefore + } = getAbsoluteSize(elTo.parentNode) + + // then we show the clone of the initial element if we don't want it hidden + options.hideFromClone !== true && elFromClone.classList.remove('q-morph--internal') + + // we mark the element with its cleanup function + elTo.qMorphCancel = () => { + cancelStatus = true + + // we clean the clone of the initial element + elFromClone.remove() + elFromTween !== void 0 && elFromTween.remove() + + options.hideFromClone === true && elFromClone.classList.remove('q-morph--internal') + + // we show the final element + options.keepToClone !== true && elTo.classList.remove('q-morph--internal') + + // we remove the cleanup function from the elements + elFrom.qMorphCancel = void 0 + elTo.qMorphCancel = void 0 + } + + // will be called after waitFor (give time to render the final element) + const animate = () => { + if (cancelStatus === true) { + typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel() + + return + } + + // now the animation starts, so we only need the clone + // of the initial element as a spacer + // we also hide it to calculate the dimensions of the + // parent of the final element after the changes + if (options.hideFromClone !== true) { + elFromClone.classList.add('q-morph--internal') + elFromClone.innerHTML = '' + elFromClone.style.left = 0 + elFromClone.style.right = 'unset' + elFromClone.style.top = 0 + elFromClone.style.bottom = 'unset' + elFromClone.style.transform = 'none' + } + + // we show the final element + if (options.keepToClone !== true) { + elTo.classList.remove('q-morph--internal') + } + + // we get the dimensions of the parent of the final element after changes + // the difference is how much we should animate the clone + const elToParent = elTo.parentNode + const { + width: elToParentWidthAfter, + height: elToParentHeightAfter + } = getAbsoluteSize(elToParent) + + const elToClone = elTo.cloneNode(options.keepToClone) + elToClone.setAttribute('aria-hidden', 'true') + if (options.keepToClone !== true) { + elToClone.style.left = 0 + elToClone.style.right = 'unset' + elToClone.style.top = 0 + elToClone.style.bottom = 'unset' + elToClone.style.transform = 'none' + elToClone.style.pointerEvents = 'none' + } + elToClone.classList.add('q-morph--internal') + + // if elFrom is the same as elTo the next element is elFromClone + const elToNext = elTo === elFrom && elFromParent === elToParent ? elFromClone : elTo.nextElementSibling + elToParent.insertBefore(elToClone, elToNext) + + const { + borderWidth: elToBorderWidth, + borderStyle: elToBorderStyle, + borderColor: elToBorderColor, + borderRadius: elToBorderRadius, + backgroundColor: elToBackground, + transform: elToTransform, + position: elToPositioningType, + cssText: elToCssText + } = getComputedStyle(elTo, [ 'borderWidth', 'borderStyle', 'borderColor', 'borderRadius', 'backgroundColor', 'transform', 'position', 'cssText' ]) + const elToClassSaved = elTo.classList.toString() + const elToStyleSaved = elTo.style.cssText + + // we set the computed styles on the element (to be able to remove classes) + elTo.style.cssText = elToCssText + elTo.style.transform = 'none' + elTo.style.animation = 'none' + elTo.style.transition = 'none' + // we strip the background classes (background color can no longer be animated if !important is used) + elTo.className = elToClassSaved.split(' ').filter(c => /^bg-/.test(c) === false).join(' ') + + const elToPosition = getAbsolutePosition(elTo, options.resize) + + const deltaX = elFromPosition.left - elToPosition.left + const deltaY = elFromPosition.top - elToPosition.top + const scaleX = elFromPosition.width / (elToPosition.width > 0 ? elToPosition.width : 10) + const scaleY = elFromPosition.height / (elToPosition.height > 0 ? elToPosition.height : 100) + + const elFromParentWidthDiff = elFromParentWidthBefore - elFromParentWidthAfter + const elFromParentHeightDiff = elFromParentHeightBefore - elFromParentHeightAfter + const elToParentWidthDiff = elToParentWidthAfter - elToParentWidthBefore + const elToParentHeightDiff = elToParentHeightAfter - elToParentHeightBefore + + const elFromCloneWidth = Math.max(elFromPosition.widthM, elFromParentWidthDiff) + const elFromCloneHeight = Math.max(elFromPosition.heightM, elFromParentHeightDiff) + const elToCloneWidth = Math.max(elToPosition.widthM, elToParentWidthDiff) + const elToCloneHeight = Math.max(elToPosition.heightM, elToParentHeightDiff) + + const elSharedSize = elFrom === elTo && + [ 'absolute', 'fixed' ].includes(elToPositioningType) === false && + [ 'absolute', 'fixed' ].includes(elFromPositioningType) === false + + // if the final element has fixed position or if a parent + // has fixed position we need to animate it as fixed + let elToNeedsFixedPosition = elToPositioningType === 'fixed' + let parent = elToParent + while (elToNeedsFixedPosition !== true && parent !== document) { + elToNeedsFixedPosition = window.getComputedStyle(parent).position === 'fixed' + parent = parent.parentNode + } + + // we show the spacer for the initial element + if (options.hideFromClone !== true) { + elFromClone.style.display = 'block' + elFromClone.style.flex = '0 0 auto' + elFromClone.style.opacity = 0 + elFromClone.style.minWidth = 'unset' + elFromClone.style.maxWidth = 'unset' + elFromClone.style.minHeight = 'unset' + elFromClone.style.maxHeight = 'unset' + elFromClone.classList.remove('q-morph--internal') + } + + // we show the spacer for the final element + if (options.keepToClone !== true) { + elToClone.style.display = 'block' + elToClone.style.flex = '0 0 auto' + elToClone.style.opacity = 0 + elToClone.style.minWidth = 'unset' + elToClone.style.maxWidth = 'unset' + elToClone.style.minHeight = 'unset' + elToClone.style.maxHeight = 'unset' + } + elToClone.classList.remove('q-morph--internal') + + // we apply classes specified by user + if (typeof options.classes === 'string') { + elTo.className += ' ' + options.classes + } + + // we apply styles specified by user + if (typeof options.style === 'string') { + elTo.style.cssText += ' ' + options.style + } + else if (isObject(options.style) === true) { + for (const prop in options.style) { + elTo.style[prop] = options.style[prop] + } + } + + const elFromZIndex = getMaxZIndex(elFromClone) + const elToZIndex = getMaxZIndex(elTo) + + // we position the morphing element + // if we use fixed position for the final element we need to adjust for scroll + const documentScroll = elToNeedsFixedPosition === true + ? document.documentElement + : { scrollLeft: 0, scrollTop: 0 } + elTo.style.position = elToNeedsFixedPosition === true ? 'fixed' : 'absolute' + elTo.style.left = `${elToPosition.left - documentScroll.scrollLeft}px` + elTo.style.right = 'unset' + elTo.style.top = `${elToPosition.top - documentScroll.scrollTop}px` + elTo.style.margin = 0 + + if (options.resize === true) { + elTo.style.minWidth = 'unset' + elTo.style.maxWidth = 'unset' + elTo.style.minHeight = 'unset' + elTo.style.maxHeight = 'unset' + elTo.style.overflow = 'hidden' + elTo.style.overflowX = 'hidden' + elTo.style.overflowY = 'hidden' + } + + document.body.appendChild(elTo) + + if (elFromTween !== void 0) { + elFromTween.style.cssText = elFromCssText + elFromTween.style.transform = 'none' + elFromTween.style.animation = 'none' + elFromTween.style.transition = 'none' + + elFromTween.style.position = elTo.style.position + elFromTween.style.left = `${elFromPosition.left - documentScroll.scrollLeft}px` + elFromTween.style.right = 'unset' + elFromTween.style.top = `${elFromPosition.top - documentScroll.scrollTop}px` + elFromTween.style.margin = 0 + elFromTween.style.pointerEvents = 'none' + + if (options.resize === true) { + elFromTween.style.minWidth = 'unset' + elFromTween.style.maxWidth = 'unset' + elFromTween.style.minHeight = 'unset' + elFromTween.style.maxHeight = 'unset' + elFromTween.style.overflow = 'hidden' + elFromTween.style.overflowX = 'hidden' + elFromTween.style.overflowY = 'hidden' + } + + document.body.appendChild(elFromTween) + } + + const commonCleanup = aborted => { + // we put the element back in it's place + // and restore the styles and classes + if (elFrom === elTo && endElementTo !== true) { + elTo.style.cssText = elFromStyleSaved + elTo.className = elFromClassSaved + } + else { + elTo.style.cssText = elToStyleSaved + elTo.className = elToClassSaved + } + elToClone.parentNode === elToParent && elToParent.insertBefore(elTo, elToClone) + + // we clean the spacers + elFromClone.remove() + elToClone.remove() + elFromTween !== void 0 && elFromTween.remove() + + // cancel will be no longer available + cancel = () => false + + elFrom.qMorphCancel = void 0 + elTo.qMorphCancel = void 0 + + // we are ready + if (typeof options.onEnd === 'function') { + options.onEnd(endElementTo === true ? 'to' : 'from', aborted === true) + } + } + + if (options.useCSS !== true && typeof elTo.animate === 'function') { + const resizeFrom = options.resize === true + ? { + transform: `translate(${deltaX}px, ${deltaY}px)`, + width: `${elFromCloneWidth}px`, + height: `${elFromCloneHeight}px` + } + : { + transform: `translate(${deltaX}px, ${deltaY}px) scale(${scaleX}, ${scaleY})` + } + const resizeTo = options.resize === true + ? { + width: `${elToCloneWidth}px`, + height: `${elToCloneHeight}px` + } + : {} + const resizeFromTween = options.resize === true + ? { + width: `${elFromCloneWidth}px`, + height: `${elFromCloneHeight}px` + } + : {} + const resizeToTween = options.resize === true + ? { + transform: `translate(${-1 * deltaX}px, ${-1 * deltaY}px)`, + width: `${elToCloneWidth}px`, + height: `${elToCloneHeight}px` + } + : { + transform: `translate(${-1 * deltaX}px, ${-1 * deltaY}px) scale(${1 / scaleX}, ${1 / scaleY})` + } + const tweenFrom = elFromTween !== void 0 + ? { opacity: options.tweenToOpacity } + : { backgroundColor: elFromBackground } + const tweenTo = elFromTween !== void 0 + ? { opacity: 1 } + : { backgroundColor: elToBackground } + animationTo = elTo.animate([ + { + margin: 0, + borderWidth: elFromBorderWidth, + borderStyle: elFromBorderStyle, + borderColor: elFromBorderColor, + borderRadius: elFromBorderRadius, + zIndex: elFromZIndex, + transformOrigin: '0 0', + ...resizeFrom, + ...tweenFrom + }, + { + margin: 0, + borderWidth: elToBorderWidth, + borderStyle: elToBorderStyle, + borderColor: elToBorderColor, + borderRadius: elToBorderRadius, + zIndex: elToZIndex, + transformOrigin: '0 0', + transform: elToTransform, + ...resizeTo, + ...tweenTo + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }) + + animationFromTween = elFromTween === void 0 ? void 0 : elFromTween.animate([ + { + opacity: options.tweenFromOpacity, + margin: 0, + borderWidth: elFromBorderWidth, + borderStyle: elFromBorderStyle, + borderColor: elFromBorderColor, + borderRadius: elFromBorderRadius, + zIndex: elFromZIndex, + transformOrigin: '0 0', + transform: elFromTransform, + ...resizeFromTween + }, + { + opacity: 0, + margin: 0, + borderWidth: elToBorderWidth, + borderStyle: elToBorderStyle, + borderColor: elToBorderColor, + borderRadius: elToBorderRadius, + zIndex: elToZIndex, + transformOrigin: '0 0', + ...resizeToTween + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }) + + animationFromClone = options.hideFromClone === true || elSharedSize === true ? void 0 : elFromClone.animate([ + { + margin: `${elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0}px ${elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0}px`, + width: `${elFromCloneWidth + elFromPosition.marginH}px`, + height: `${elFromCloneHeight + elFromPosition.marginV}px` + }, + { + margin: 0, + width: 0, + height: 0 + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }) + + animationToClone = options.keepToClone === true ? void 0 : elToClone.animate([ + elSharedSize === true + ? { + margin: `${elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0}px ${elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0}px`, + width: `${elFromCloneWidth + elFromPosition.marginH}px`, + height: `${elFromCloneHeight + elFromPosition.marginV}px` + } + : { + margin: 0, + width: 0, + height: 0 + }, + { + margin: `${elToParentHeightDiff < 0 ? elToParentHeightDiff / 2 : 0}px ${elToParentWidthDiff < 0 ? elToParentWidthDiff / 2 : 0}px`, + width: `${elToCloneWidth + elToPosition.marginH}px`, + height: `${elToCloneHeight + elToPosition.marginV}px` + } + ], { + duration: options.duration, + easing: options.easing, + fill: options.fill, + delay: options.delay + }) + + const cleanup = abort => { + animationFromClone !== void 0 && animationFromClone.cancel() + animationFromTween !== void 0 && animationFromTween.cancel() + animationToClone !== void 0 && animationToClone.cancel() + animationTo.cancel() + + animationTo.removeEventListener('finish', cleanup) + animationTo.removeEventListener('cancel', cleanup) + + commonCleanup(abort) + + // we clean the animations + animationFromClone = void 0 + animationFromTween = void 0 + animationToClone = void 0 + animationTo = void 0 + } + + elFrom.qMorphCancel = () => { + elFrom.qMorphCancel = void 0 + cancelStatus = true + cleanup() + } + elTo.qMorphCancel = () => { + elTo.qMorphCancel = void 0 + cancelStatus = true + cleanup() + } + + animationTo.addEventListener('finish', cleanup) + animationTo.addEventListener('cancel', cleanup) + + cancel = abort => { + // we are not in a morph that we can cancel + if (cancelStatus === true || animationTo === void 0) { + return false + } + + if (abort === true) { + cleanup(true) + return true + } + + endElementTo = endElementTo !== true + + animationFromClone !== void 0 && animationFromClone.reverse() + animationFromTween !== void 0 && animationFromTween.reverse() + animationToClone !== void 0 && animationToClone.reverse() + animationTo.reverse() + + return true + } + } + else { + const qAnimId = `q-morph-anim-${++id}` + const style = document.createElement('style') + const resizeFrom = options.resize === true + ? ` + transform: translate(${deltaX}px, ${deltaY}px); + width: ${elFromCloneWidth}px; + height: ${elFromCloneHeight}px; + ` + : `transform: translate(${deltaX}px, ${deltaY}px) scale(${scaleX}, ${scaleY});` + const resizeTo = options.resize === true + ? ` + width: ${elToCloneWidth}px; + height: ${elToCloneHeight}px; + ` + : '' + const resizeFromTween = options.resize === true + ? ` + width: ${elFromCloneWidth}px; + height: ${elFromCloneHeight}px; + ` + : '' + const resizeToTween = options.resize === true + ? ` + transform: translate(${-1 * deltaX}px, ${-1 * deltaY}px); + width: ${elToCloneWidth}px; + height: ${elToCloneHeight}px; + ` + : `transform: translate(${-1 * deltaX}px, ${-1 * deltaY}px) scale(${1 / scaleX}, ${1 / scaleY});` + const tweenFrom = elFromTween !== void 0 + ? `opacity: ${options.tweenToOpacity};` + : `background-color: ${elFromBackground};` + const tweenTo = elFromTween !== void 0 + ? 'opacity: 1;' + : `background-color: ${elToBackground};` + const keyframesFromTween = elFromTween === void 0 + ? '' + : ` + @keyframes ${qAnimId}-from-tween { + 0% { + opacity: ${options.tweenFromOpacity}; + margin: 0; + border-width: ${elFromBorderWidth}; + border-style: ${elFromBorderStyle}; + border-color: ${elFromBorderColor}; + border-radius: ${elFromBorderRadius}; + z-index: ${elFromZIndex}; + transform-origin: 0 0; + transform: ${elFromTransform}; + ${resizeFromTween} + } + + 100% { + opacity: 0; + margin: 0; + border-width: ${elToBorderWidth}; + border-style: ${elToBorderStyle}; + border-color: ${elToBorderColor}; + border-radius: ${elToBorderRadius}; + z-index: ${elToZIndex}; + transform-origin: 0 0; + ${resizeToTween} + } + } + ` + const keyframesFrom = options.hideFromClone === true || elSharedSize === true + ? '' + : ` + @keyframes ${qAnimId}-from { + 0% { + margin: ${elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0}px ${elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0}px; + width: ${elFromCloneWidth + elFromPosition.marginH}px; + height: ${elFromCloneHeight + elFromPosition.marginV}px; + } + + 100% { + margin: 0; + width: 0; + height: 0; + } + } + ` + const keyframeToStart = elSharedSize === true + ? ` + margin: ${elFromParentHeightDiff < 0 ? elFromParentHeightDiff / 2 : 0}px ${elFromParentWidthDiff < 0 ? elFromParentWidthDiff / 2 : 0}px; + width: ${elFromCloneWidth + elFromPosition.marginH}px; + height: ${elFromCloneHeight + elFromPosition.marginV}px; + ` + : ` + margin: 0; + width: 0; + height: 0; + ` + const keyframesTo = options.keepToClone === true + ? '' + : ` + @keyframes ${qAnimId}-to { + 0% { + ${keyframeToStart} + } + + 100% { + margin: ${elToParentHeightDiff < 0 ? elToParentHeightDiff / 2 : 0}px ${elToParentWidthDiff < 0 ? elToParentWidthDiff / 2 : 0}px; + width: ${elToCloneWidth + elToPosition.marginH}px; + height: ${elToCloneHeight + elToPosition.marginV}px; + } + } + ` + style.innerHTML = ` + @keyframes ${qAnimId} { + 0% { + margin: 0; + border-width: ${elFromBorderWidth}; + border-style: ${elFromBorderStyle}; + border-color: ${elFromBorderColor}; + border-radius: ${elFromBorderRadius}; + background-color: ${elFromBackground}; + z-index: ${elFromZIndex}; + transform-origin: 0 0; + ${resizeFrom} + ${tweenFrom} + } + + 100% { + margin: 0; + border-width: ${elToBorderWidth}; + border-style: ${elToBorderStyle}; + border-color: ${elToBorderColor}; + border-radius: ${elToBorderRadius}; + background-color: ${elToBackground}; + z-index: ${elToZIndex}; + transform-origin: 0 0; + transform: ${elToTransform}; + ${resizeTo} + ${tweenTo} + } + } + + ${keyframesFrom} + + ${keyframesFromTween} + + ${keyframesTo} + ` + document.head.appendChild(style) + + let animationDirection = 'normal' + + elFromClone.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}-from` + if (elFromTween !== void 0) { + elFromTween.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}-from-tween` + } + elToClone.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}-to` + elTo.style.animation = `${options.duration}ms ${options.easing} ${options.delay}ms ${animationDirection} ${options.fill} ${qAnimId}` + + const cleanup = evt => { + if (evt === Object(evt) && evt.animationName !== qAnimId) { + return + } + + elTo.removeEventListener('animationend', cleanup) + elTo.removeEventListener('animationcancel', cleanup) + + commonCleanup() + + // we clean the animations + style.remove() + } + + elFrom.qMorphCancel = () => { + elFrom.qMorphCancel = void 0 + cancelStatus = true + cleanup() + } + elTo.qMorphCancel = () => { + elTo.qMorphCancel = void 0 + cancelStatus = true + cleanup() + } + + elTo.addEventListener('animationend', cleanup) + elTo.addEventListener('animationcancel', cleanup) + + cancel = abort => { + // we are not in a morph that we can cancel + if (cancelStatus === true || !elTo || !elFromClone || !elToClone) { + return false + } + + if (abort === true) { + cleanup() + + return true + } + + endElementTo = endElementTo !== true + + animationDirection = animationDirection === 'normal' ? 'reverse' : 'normal' + + elFromClone.style.animationDirection = animationDirection + elFromTween.style.animationDirection = animationDirection + elToClone.style.animationDirection = animationDirection + elTo.style.animationDirection = animationDirection + + return true + } + } + } + + if ( + options.waitFor > 0 || + options.waitFor === 'transitionend' || + (options.waitFor === Object(options.waitFor) && typeof options.waitFor.then === 'function') + ) { + const delayPromise = options.waitFor > 0 + ? new Promise(resolve => setTimeout(resolve, options.waitFor)) + : ( + options.waitFor === 'transitionend' + ? new Promise(resolve => { + const timer = setTimeout(() => { + endFn() + }, 400) + + const endFn = ev => { + clearTimeout(timer) + + if (elTo) { + elTo.removeEventListener('transitionend', endFn) + elTo.removeEventListener('transitioncancel', endFn) + } + + resolve() + } + + elTo.addEventListener('transitionend', endFn) + elTo.addEventListener('transitioncancel', endFn) + }) + : options.waitFor + ) + + delayPromise + .then(animate) + .catch(() => { + typeof elTo.qMorphCancel === 'function' && elTo.qMorphCancel() + }) + } + else { + animate() + } + } + + typeof _options.onToggle === 'function' && _options.onToggle() + requestAnimationFrame(calculateFinalState) + + // we return the cancel function + // returns: + // false if the cancel cannot be performed (the morph ended already or has not started) + // true else + return abort => cancel(abort) +} diff --git a/src/utils/open-url.js b/src/utils/open-url.js new file mode 100644 index 00000000000..f3bd2ce011b --- /dev/null +++ b/src/utils/open-url.js @@ -0,0 +1,67 @@ +import Vue from 'vue' + +import Platform from '../plugins/Platform.js' + +import { noop } from '../utils/event.js' + +function parseFeatures (winFeatures) { + const cfg = Object.assign({ noopener: true }, winFeatures) + const feat = [] + Object.keys(cfg).forEach(key => { + if (cfg[key] === true) { + feat.push(key) + } + }) + return feat.join(',') +} + +function openWindow (url, reject, windowFeatures) { + let open = window.open + + if (Platform.is.cordova === true) { + if (cordova !== void 0 && cordova.InAppBrowser !== void 0 && cordova.InAppBrowser.open !== void 0) { + open = cordova.InAppBrowser.open + } + else if (navigator !== void 0 && navigator.app !== void 0) { + return navigator.app.loadUrl(url, { + openExternal: true + }) + } + } + else if (Vue.prototype.$q.electron !== void 0) { + return Vue.prototype.$q.electron.shell.openExternal(url) + } + + const win = open(url, '_blank', parseFeatures(windowFeatures)) + + if (win) { + Platform.is.desktop && win.focus() + return win + } + else { + reject && reject() + } +} + +export default (url, reject, windowFeatures) => { + if ( + Platform.is.ios === true && + window.SafariViewController !== void 0 + ) { + window.SafariViewController.isAvailable(available => { + if (available) { + window.SafariViewController.show( + { url }, + noop, + reject + ) + } + else { + openWindow(url, reject, windowFeatures) + } + }) + return + } + + return openWindow(url, reject, windowFeatures) +} diff --git a/src/utils/patterns.js b/src/utils/patterns.js new file mode 100644 index 00000000000..1edf78d381c --- /dev/null +++ b/src/utils/patterns.js @@ -0,0 +1,38 @@ +// file referenced from docs + +const + hex = /^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/, + hexa = /^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/, + hexOrHexa = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/, + rgb = /^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])\)$/, + rgba = /^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)\)$/ + +export const testPattern = { + date: v => /^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(v), + time: v => /^([0-1]?\d|2[0-3]):[0-5]\d$/.test(v), + fulltime: v => /^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(v), + timeOrFulltime: v => /^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(v), + + // -- RFC 5322 -- + // -- Added in v1.18.10 -- + // This is a basic helper validation. + // For something more complex (like RFC 822) you should write and use your own rule. + // We won't be accepting PRs to enhance the one below because of the reason above. + email: v => /^(([^<>()[\]\\.,;:\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(v), + + hexColor: v => hex.test(v), + hexaColor: v => hexa.test(v), + hexOrHexaColor: v => hexOrHexa.test(v), + + rgbColor: v => rgb.test(v), + rgbaColor: v => rgba.test(v), + rgbOrRgbaColor: v => rgb.test(v) || rgba.test(v), + + hexOrRgbColor: v => hex.test(v) || rgb.test(v), + hexaOrRgbaColor: v => hexa.test(v) || rgba.test(v), + anyColor: v => hexOrHexa.test(v) || rgb.test(v) || rgba.test(v) +} + +export default { + testPattern +} diff --git a/src/utils/private/cache.js b/src/utils/private/cache.js new file mode 100644 index 00000000000..892d9c1a5de --- /dev/null +++ b/src/utils/private/cache.js @@ -0,0 +1,56 @@ +import { isSSR } from '../../plugins/Platform.js' + +export default function cache (vm, key, obj) { + if (isSSR === true) return obj + + const k = `__qcache_${key}` + return vm[k] === void 0 + ? (vm[k] = obj) + : vm[k] +} + +export function cacheWithFn (vm, key, fn) { + if (isSSR === true) return fn() + + const k = `__qcache_${key}` + return vm[k] === void 0 + ? (vm[k] = fn()) + : vm[k] +} + +export function getPropCacheMixin (propName, proxyPropName) { + return { + data () { + const target = {} + const source = this[propName] + + for (const prop in source) { + target[prop] = source[prop] + } + + return { [proxyPropName]: target } + }, + + watch: { + [propName] (newObj, oldObj) { + const target = this[proxyPropName] + + if (oldObj !== void 0) { + // we first delete obsolete events + for (const prop in oldObj) { + if (newObj[prop] === void 0) { + this.$delete(target, prop) + } + } + } + + for (const prop in newObj) { + // we then update changed events + if (target[prop] !== newObj[prop]) { + this.$set(target, prop, newObj[prop]) + } + } + } + } + } +} diff --git a/src/utils/private/date-persian.js b/src/utils/private/date-persian.js new file mode 100644 index 00000000000..8b2e7454bcc --- /dev/null +++ b/src/utils/private/date-persian.js @@ -0,0 +1,278 @@ +// taken from https://github.com/jalaali/jalaali-js + +/* + Jalaali years starting the 33-year rule. +*/ +const breaks = [ -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, + 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178 +] + +/* + Converts a Gregorian date to Jalaali. +*/ +export function toJalaali (gy, gm, gd) { + if (Object.prototype.toString.call(gy) === '[object Date]') { + gd = gy.getDate() + gm = gy.getMonth() + 1 + gy = gy.getFullYear() + } + return d2j(g2d(gy, gm, gd)) +} + +/* + Converts a Jalaali date to Gregorian. +*/ +export function toGregorian (jy, jm, jd) { + return d2g(j2d(jy, jm, jd)) +} + +/* + Checks whether a Jalaali date is valid or not. +*/ +export function isValidJalaaliDate (jy, jm, jd) { + return jy >= -61 && jy <= 3177 && + jm >= 1 && jm <= 12 && + jd >= 1 && jd <= jalaaliMonthLength(jy, jm) +} + +/* + Is this a leap year or not? +*/ +function isLeapJalaaliYear (jy) { + return jalCalLeap(jy) === 0 +} + +/* + Number of days in a given month in a Jalaali year. +*/ +export function jalaaliMonthLength (jy, jm) { + if (jm <= 6) return 31 + if (jm <= 11) return 30 + if (isLeapJalaaliYear(jy)) return 30 + return 29 +} + +/* + This function determines if the Jalaali (Persian) year is + leap (366-day long) or is the common year (365 days) + + @param jy Jalaali calendar year (-61 to 3177) + @returns number of years since the last leap year (0 to 4) + */ +function jalCalLeap (jy) { + const bl = breaks.length + let + jp = breaks[0], + jm, + jump, + leap, + n, + i + + if (jy < jp || jy >= breaks[bl - 1]) { throw new Error('Invalid Jalaali year ' + jy) } + + for (i = 1; i < bl; i += 1) { + jm = breaks[i] + jump = jm - jp + if (jy < jm) { break } + jp = jm + } + n = jy - jp + + if (jump - n < 6) { n = n - jump + div(jump + 4, 33) * 33 } + leap = mod(mod(n + 1, 33) - 1, 4) + if (leap === -1) { + leap = 4 + } + + return leap +} + +/* + This function determines if the Jalaali (Persian) year is + leap (366-day long) or is the common year (365 days), and + finds the day in March (Gregorian calendar) of the first + day of the Jalaali year (jy). + + @param jy Jalaali calendar year (-61 to 3177) + @param withoutLeap when don't need leap (true or false) default is false + @return + leap: number of years since the last leap year (0 to 4) + gy: Gregorian year of the beginning of Jalaali year + march: the March day of Farvardin the 1st (1st day of jy) + @see: http://www.astro.uni.torun.pl/~kb/Papers/EMP/PersianC-EMP.htm + @see: http://www.fourmilab.ch/documents/calendar/ +*/ +function jalCal (jy, withoutLeap) { + const + bl = breaks.length, + gy = jy + 621 + let + leapJ = -14, + jp = breaks[0], + jm, + jump, + leap, + n, + i + + if (jy < jp || jy >= breaks[bl - 1]) { throw new Error('Invalid Jalaali year ' + jy) } + + // Find the limiting years for the Jalaali year jy. + for (i = 1; i < bl; i += 1) { + jm = breaks[i] + jump = jm - jp + if (jy < jm) { break } + leapJ = leapJ + div(jump, 33) * 8 + div(mod(jump, 33), 4) + jp = jm + } + n = jy - jp + + // Find the number of leap years from AD 621 to the beginning + // of the current Jalaali year in the Persian calendar. + leapJ = leapJ + div(n, 33) * 8 + div(mod(n, 33) + 3, 4) + if (mod(jump, 33) === 4 && jump - n === 4) { leapJ += 1 } + + // And the same in the Gregorian calendar (until the year gy). + const leapG = div(gy, 4) - div((div(gy, 100) + 1) * 3, 4) - 150 + + // Determine the Gregorian date of Farvardin the 1st. + const march = 20 + leapJ - leapG + + // Find how many years have passed since the last leap year. + if (!withoutLeap) { + if (jump - n < 6) { n = n - jump + div(jump + 4, 33) * 33 } + leap = mod(mod(n + 1, 33) - 1, 4) + if (leap === -1) { + leap = 4 + } + } + + return { + leap: leap, + gy: gy, + march: march + } +} + +/* + Converts a date of the Jalaali calendar to the Julian Day number. + + @param jy Jalaali year (1 to 3100) + @param jm Jalaali month (1 to 12) + @param jd Jalaali day (1 to 29/31) + @return Julian Day number +*/ +function j2d (jy, jm, jd) { + const r = jalCal(jy, true) + return g2d(r.gy, 3, r.march) + (jm - 1) * 31 - div(jm, 7) * (jm - 7) + jd - 1 +} + +/* + Converts the Julian Day number to a date in the Jalaali calendar. + + @param jdn Julian Day number + @return + jy: Jalaali year (1 to 3100) + jm: Jalaali month (1 to 12) + jd: Jalaali day (1 to 29/31) +*/ +function d2j (jdn) { + const gy = d2g(jdn).gy // Calculate Gregorian year (gy). + let + jy = gy - 621, + jd, + jm, + k + const + r = jalCal(jy, false), + jdn1f = g2d(gy, 3, r.march) + + // Find number of days that passed since 1 Farvardin. + k = jdn - jdn1f + if (k >= 0) { + if (k <= 185) { + // The first 6 months. + jm = 1 + div(k, 31) + jd = mod(k, 31) + 1 + return { jy: jy, + jm: jm, + jd: jd + } + } + else { + // The remaining months. + k -= 186 + } + } + else { + // Previous Jalaali year. + jy -= 1 + k += 179 + if (r.leap === 1) { k += 1 } + } + jm = 7 + div(k, 30) + jd = mod(k, 30) + 1 + return { jy: jy, + jm: jm, + jd: jd + } +} + +/* + Calculates the Julian Day number from Gregorian or Julian + calendar dates. This integer number corresponds to the noon of + the date (i.e. 12 hours of Universal Time). + The procedure was tested to be good since 1 March, -100100 (of both + calendars) up to a few million years into the future. + + @param gy Calendar year (years BC numbered 0, -1, -2, ...) + @param gm Calendar month (1 to 12) + @param gd Calendar day of the month (1 to 28/29/30/31) + @return Julian Day number +*/ +function g2d (gy, gm, gd) { + let d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + + div(153 * mod(gm + 9, 12) + 2, 5) + + gd - 34840408 + d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752 + return d +} + +/* + Calculates Gregorian and Julian calendar dates from the Julian Day number + (jdn) for the period since jdn=-34839655 (i.e. the year -100100 of both + calendars) to some millions years ahead of the present. + + @param jdn Julian Day number + @return + gy: Calendar year (years BC numbered 0, -1, -2, ...) + gm: Calendar month (1 to 12) + gd: Calendar day of the month M (1 to 28/29/30/31) +*/ +function d2g (jdn) { + let j = 4 * jdn + 139361631 + j = j + div(div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908 + const + i = div(mod(j, 1461), 4) * 5 + 308, + gd = div(mod(i, 153), 5) + 1, + gm = mod(div(i, 153), 12) + 1, + gy = div(j, 1461) - 100100 + div(8 - gm, 6) + return { + gy: gy, + gm: gm, + gd: gd + } +} + +/* + Utility helper functions. +*/ + +function div (a, b) { + return ~~(a / b) +} + +function mod (a, b) { + return a - ~~(a / b) * b +} diff --git a/src/utils/private/escape-key.js b/src/utils/private/escape-key.js new file mode 100644 index 00000000000..b6c72a31c43 --- /dev/null +++ b/src/utils/private/escape-key.js @@ -0,0 +1,41 @@ +import { isKeyCode } from './key-composition.js' + +const handlers = [] +let escDown = false + +export default { + __install () { + this.__installed = true + window.addEventListener('keydown', evt => { + escDown = evt.keyCode === 27 + }) + window.addEventListener('blur', () => { + escDown === true && (escDown = false) + }) + window.addEventListener('keyup', evt => { + if (escDown === true) { + escDown = false + + if (handlers.length !== 0 && isKeyCode(evt, 27) === true) { + handlers[handlers.length - 1].fn(evt) + } + } + }) + }, + + register (comp, fn) { + if (comp.$q.platform.is.desktop === true) { + this.__installed !== true && this.__install() + handlers.push({ comp, fn }) + } + }, + + pop (comp) { + if (comp.$q.platform.is.desktop === true) { + const index = handlers.findIndex(h => h.comp === comp) + if (index > -1) { + handlers.splice(index, 1) + } + } + } +} diff --git a/src/utils/private/focus-manager.js b/src/utils/private/focus-manager.js new file mode 100644 index 00000000000..cbc29e2e849 --- /dev/null +++ b/src/utils/private/focus-manager.js @@ -0,0 +1,185 @@ +import { normalizeToInterval } from '../format.js' +import { client } from '../../plugins/Platform.js' + +export const FOCUSABLE_SELECTOR = [ + ':focus', + 'a[href]:not([tabindex="-1"]):not(.q-focus__clone)', + 'area[href]:not([tabindex="-1"]):not(.q-focus__clone)', + 'input:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'select:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'textarea:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'button:not([disabled]):not([tabindex="-1"]):not(.q-focus__clone)', + 'iframe:not([tabindex="-1"]):not(.q-focus__clone)', + '[tabindex]:not([tabindex="-1"]):not(.q-focus__clone)', + '[contenteditable]:not([tabindex="-1"]):not(.q-focus__clone):not([contenteditable="false"])', + '.q-tab.q-focusable:not(.q-focus__clone)' +].join(',') + +export const KEY_SKIP_SELECTOR = [ + 'input:not([disabled])', + 'select:not([disabled])', + 'select:not([disabled]) *', + 'textarea:not([disabled])', + '[contenteditable]:not([contenteditable="false"])', + '[contenteditable]:not([contenteditable="false"]) *', + '.q-key-group-navigation--ignore-key', + '.q-key-group-navigation--ignore-key *', + '.q-focus__clone' +].join(',') + +export const EDITABLE_SELECTOR = [ + 'input:not(.q-focus__clone):not([disabled]):not([readonly]):not([type="button"]):not([type="checkbox"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="radio"]):not([type="range"]):not([type="reset"]):not([type="submit"])', + 'textarea:not(.q-focus__clone):not([disabled]):not([readonly])', + '[contenteditable]:not(.q-focus__clone):not([contenteditable="false"])', + '[contenteditable]:not(.q-focus__clone):not([contenteditable="false"]) *' +].join(',') + +let scrollOffset = 0 +let managedFocusFn + +function isInPortal (el) { + return el.matches('.q-dialog *, .q-menu *, .q-tooltip *, .q-stepper__step-content *') +} + +function isEditable (el) { + return el.matches(EDITABLE_SELECTOR) +} + +export function managedFocus (el) { + if (managedFocusFn === void 0) { + const scrollIntoView = typeof el.scrollIntoViewIfNeeded === 'function' + ? target => { target.scrollIntoViewIfNeeded(false) } + : target => { target.scrollIntoView() } + + managedFocusFn = client.is.ios === true || client.is.nativeMobile === true || client.is.standalone === true + ? el => { + const elEditable = isEditable(el) + + if ( + el === document.body || + (elEditable !== true && el.tabIndex < 0) + ) { + el !== document.activeElement && el.focus({ preventScroll: true }) + + return + } + + const elInPortal = isInPortal(el) + + const clone = el.cloneNode(true) + const parent = el.parentNode + const scrollingElement = document.scrollingElement || document.documentElement + const initialScrollTop = scrollingElement.scrollTop + + clone.setAttribute('tabindex', -1) + clone.removeAttribute('id') + clone.removeAttribute('autofocus') + clone.removeAttribute('data-autofocus') + clone.classList.add('q-focus__clone') + + parent.insertBefore(clone, el) + + el !== document.activeElement && el.focus({ preventScroll: true }) + + setTimeout(() => { + clone.remove() + + if (el && el === document.activeElement && elEditable === true) { + elInPortal === true && scrollIntoView(el) + + const + { top, bottom } = el.getBoundingClientRect(), + height = window.visualViewport !== void 0 + ? window.visualViewport.height + : window.innerHeight + + let finalScrollTop = scrollingElement.scrollTop + + if (top < 0) { + finalScrollTop += top - 32 + } + else if (top > 0 && bottom > height) { + finalScrollTop += bottom - height + 64 + } + + requestAnimationFrame(() => { + scrollingElement.scrollTop = finalScrollTop + }) + + if (el.qRestoreScrollSet !== true && elInPortal !== true) { + scrollOffset += finalScrollTop - initialScrollTop + + const restoreScrollFn = () => { + if (el) { + el.qRestoreScrollSet = void 0 + el.removeEventListener('blur', restoreScrollFn) + } + + if (scrollingElement.scrollTop !== finalScrollTop) { + scrollOffset = 0 + } + else if (scrollOffset !== 0) { + requestAnimationFrame(() => { + const { activeElement } = document + if ( + !activeElement || + (isEditable(activeElement) !== true && activeElement.tabIndex < 0) + ) { + scrollingElement.scrollTop -= scrollOffset + scrollOffset = 0 + } + }) + } + } + + el.qRestoreScrollSet = true + el.addEventListener('blur', restoreScrollFn) + } + } + }, 200) + } + : el => { + el !== document.activeElement && el.focus({ preventScroll: true }) + + if (isInPortal(el) === true && isEditable(el) === true) { + setTimeout(() => { + el && el === document.activeElement && scrollIntoView(el) + }, 200) + } + } + } + + managedFocusFn(el) +} + +export function changeFocusedElement (list, to, direction = 1, managed, noWrap, start) { + const lastIndex = list.length - 1 + + if (noWrap === true && (to > lastIndex || to < 0)) { + return + } + + const index = normalizeToInterval(to, 0, lastIndex) + + if (index === start || index > lastIndex) { + return + } + + const initialEl = document.activeElement + const focusFn = managed === true + ? () => { managedFocus(list[index]) } + : () => { list[index].focus() } + + if (initialEl !== null) { + initialEl._qKeyNavIgnore = true + focusFn() + initialEl._qKeyNavIgnore = false + } + else { + focusFn() + } + + if (document.activeElement !== list[index]) { + changeFocusedElement(list, index + direction, direction, managed, noWrap, start === void 0 ? index : start) + } +} diff --git a/src/utils/private/global-dialog.js b/src/utils/private/global-dialog.js new file mode 100644 index 00000000000..9b9e1abc932 --- /dev/null +++ b/src/utils/private/global-dialog.js @@ -0,0 +1,159 @@ +import Vue from 'vue' + +import { isSSR } from '../../plugins/Platform.js' +import { getPortalsContainer } from '../../mixins/portal.js' + +const ssrAPI = { + onOk: () => ssrAPI, + okCancel: () => ssrAPI, + hide: () => ssrAPI, + update: () => ssrAPI +} + +export function merge (target, source) { + for (const key in source) { + if (key !== 'spinner' && Object(source[key]) === source[key]) { + target[key] = Object(target[key]) !== target[key] + ? {} + : { ...target[key] } + + merge(target[key], source[key]) + } + else { + target[key] = source[key] + } + } +} + +let appRoot + +function getDialogParent (parent, root) { + if (parent !== void 0) { return parent } + if (root !== void 0) { return root } + + if (appRoot === void 0) { + const elRoot = document.getElementById('q-app') + + if (elRoot && elRoot.__vue__) { + appRoot = elRoot.__vue__.$root + } + } + + return appRoot +} + +export default function (DefaultComponent) { + return ({ className, class: klass, style, component, root, parent, ...props }) => { + if (isSSR === true) { return ssrAPI } + + klass !== void 0 && (props.cardClass = klass) + style !== void 0 && (props.cardStyle = style) + + const isCustom = component !== void 0 + let DialogComponent, attrs + + if (isCustom === true) { + DialogComponent = component + } + else { + DialogComponent = DefaultComponent + attrs = props + } + + const + okFns = [], + cancelFns = [], + API = { + onOk (fn) { + okFns.push(fn) + return API + }, + onCancel (fn) { + cancelFns.push(fn) + return API + }, + onDismiss (fn) { + okFns.push(fn) + cancelFns.push(fn) + return API + }, + hide () { + vm.$refs.dialog.hide() + return API + }, + update ({ className, class: klass, style, component, root, parent, ...cfg }) { + if (vm !== null) { + klass !== void 0 && (cfg.cardClass = klass) + style !== void 0 && (cfg.cardStyle = style) + + if (isCustom === true) { + Object.assign(props, cfg) + } + else { + merge(props, cfg) + + // need to change "attrs" reference to + // actually reflect it in underlying component + // when we force update it + attrs = { ...props } + } + + vm.$forceUpdate() + } + + return API + } + } + + const node = document.createElement('div') + getPortalsContainer(document.body).appendChild(node) + + let emittedOK = false + + const on = { + ok: data => { + emittedOK = true + okFns.forEach(fn => { fn(data) }) + }, + + hide: () => { + vm.$destroy() + vm.$el.remove() + vm = null + + if (emittedOK !== true) { + cancelFns.forEach(fn => { fn() }) + } + } + } + + let vm = new Vue({ + name: 'QGlobalDialog', + + el: node, + parent: getDialogParent(parent, root), + + render (h) { + return h(DialogComponent, { + ref: 'dialog', + props, + attrs, + on + }) + }, + + mounted () { + if (this.$refs.dialog !== void 0) { + this.$refs.dialog.show() + } + else { + on['hook:mounted'] = () => { + this.$refs.dialog !== void 0 && this.$refs.dialog.show() + } + } + } + }) + + return API + } +} diff --git a/src/utils/private/global-dialog.json b/src/utils/private/global-dialog.json new file mode 100644 index 00000000000..659c4633dd2 --- /dev/null +++ b/src/utils/private/global-dialog.json @@ -0,0 +1,124 @@ +{ + "methods": { + "create": { + "desc": "Creates an ad-hoc Dialog; Same as calling $q.dialog(...)", + "params": { + "opts": { + "type": "Object", + "required": true, + "definition": { + "class": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS Class name to apply to the Dialog's QCard", + "examples": [ "my-class" ] + }, + + "style": { + "type": [ "String", "Array", "Object" ], + "desc": "CSS style to apply to the Dialog's QCard", + "examples": [ "border: 2px solid black" ] + } + } + } + }, + + "returns": { + "type": "Object", + "desc": "Chainable Object", + "tsType": "DialogChainObject", + "definition": { + "onOk": { + "type": "Function", + "desc": "Receives a Function param to tell what to do when OK is pressed / option is selected", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject", + "__exemption": [ "examples" ] + } + }, + + "onCancel": { + "type": "Function", + "desc": "Receives a Function as param to tell what to do when Cancel is pressed / dialog is dismissed", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject", + "__exemption": [ "examples" ] + } + }, + + "onDismiss": { + "type": "Function", + "desc": "Receives a Function param to tell what to do when the dialog is closed", + "params": { + "callbackFn": { + "type": "Function", + "desc": "Tell what to do", + "required": true, + "params": null, + "returns": null + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject", + "__exemption": [ "examples" ] + } + }, + + "hide": { + "type": "Function", + "desc": "Hides the dialog when called", + "params": null, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject", + "__exemption": [ "examples" ] + } + }, + + "update": { + "type": "Function", + "desc": "Updates the initial properties (given as create() param) except for 'component' and 'parent' (and deprecated 'root')", + "params": { + "opts": { + "type": "Object", + "desc": "Props (except 'component' and 'parent') which will overwrite the initial create() params", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Object", + "desc": "Chained Object", + "tsType": "DialogChainObject", + "__exemption": [ "examples" ] + }, + "addedIn": "v1.14" + } + } + } + } + } +} diff --git a/src/utils/private/inject-obj-prop.js b/src/utils/private/inject-obj-prop.js new file mode 100644 index 00000000000..4a06bc093e9 --- /dev/null +++ b/src/utils/private/inject-obj-prop.js @@ -0,0 +1,15 @@ +export function injectProp (target, propName, get, set) { + Object.defineProperty(target, propName, { + get, + set, + enumerable: true + }) + return target +} + +export function injectMultipleProps (target, props) { + Object.keys(props).forEach(key => { + injectProp(target, key, props[ key ]) + }) + return target +} diff --git a/src/utils/private/key-composition.js b/src/utils/private/key-composition.js new file mode 100644 index 00000000000..8429173c95f --- /dev/null +++ b/src/utils/private/key-composition.js @@ -0,0 +1,12 @@ +export function shouldIgnoreKey (evt) { + return evt !== Object(evt) || + evt.type.indexOf('key') !== 0 || + evt.target !== document.activeElement || + evt.target.qComposing === true +} + +export function isKeyCode (evt, keyCodes) { + return shouldIgnoreKey(evt) === true + ? false + : [].concat(keyCodes).includes(evt.keyCode) +} diff --git a/src/utils/private/position-engine.js b/src/utils/private/position-engine.js new file mode 100644 index 00000000000..a024ba33b42 --- /dev/null +++ b/src/utils/private/position-engine.js @@ -0,0 +1,392 @@ +import { rtlHasScrollBug } from '../scroll.js' +import { client } from '../../plugins/Platform.js' + +const SIDE_SPACE = 4 // how many pixels to reserve on the edge + +const horizontalPos = { + 'start#ltr': 'left', + 'start#rtl': 'right', + 'end#ltr': 'right', + 'end#rtl': 'left' +} + +;['left', 'middle', 'right'].forEach(pos => { + horizontalPos[`${pos}#ltr`] = pos + horizontalPos[`${pos}#rtl`] = pos +}) + +function isFixedPositioned (el) { + while (el && el !== document) { + if (window.getComputedStyle(el).position === 'fixed') { + return true + } + el = el.parentNode + } + + return false +} + +function isDocumentScrollableX () { + return window.getComputedStyle(document.documentElement).overflowX !== 'hidden' && + window.getComputedStyle(document.body).overflowX !== 'hidden' +} + +function isDocumentScrollableY () { + return window.getComputedStyle(document.documentElement).overflowY !== 'hidden' && + window.getComputedStyle(document.body).overflowY !== 'hidden' +} + +function computeScrollLeft (fixedPositioned, viewport, rtl) { + if (fixedPositioned === true) { + return { vpLeft: viewport.offsetLeft, apLeft: viewport.offsetLeft } + } + + const scrollLeft = window.pageXOffset || window.scrollX || document.body.scrollLeft || 0 + + if (rtl !== true) { + return { vpLeft: scrollLeft, apLeft: scrollLeft } + } + + // TODO: check if the correction is needed also if rtlHasScrollBug + const vpLeft = (rtlHasScrollBug() === true ? 0 : document.documentElement.scrollWidth - document.documentElement.clientWidth) + scrollLeft + return { + vpLeft, + apLeft: vpLeft + document.documentElement.scrollWidth - document.documentElement.clientWidth + } +} + +export function validatePosition (pos) { + const parts = pos.split(' ') + if (parts.length !== 2) { + return false + } + if ([ 'top', 'center', 'bottom' ].includes(parts[0]) !== true) { + console.error('Anchor/Self position must start with one of top/center/bottom') + return false + } + if ([ 'left', 'middle', 'right', 'start', 'end' ].includes(parts[1]) !== true) { + console.error('Anchor/Self position must end with one of left/middle/right/start/end') + return false + } + return true +} + +export function validateOffset (val) { + if (val !== true) { return true } + if (val.length !== 2) { return false } + if (typeof val[0] !== 'number' || typeof val[1] !== 'number') { + return false + } + return true +} + +export function parsePosition (pos, rtl) { + const parts = pos.split(' ') + return { + vertical: parts[0], + horizontal: horizontalPos[`${parts[1]}#${rtl === true ? 'rtl' : 'ltr'}`] + } +} + +export function validateCover (val) { + if (val === true || val === false) { return true } + return validatePosition(val) +} + +export function getAnchorProps (el, offset, rtlCorrection) { + let { top, left, right, bottom, width, height } = el.getBoundingClientRect() + + if (width === 0) { + width = el.offsetWidth + } + if (height === 0) { + height = el.offsetHeight + } + + if (offset !== void 0) { + left -= offset[0] + right += offset[0] + top -= offset[1] + bottom += offset[1] + } + + // TODO: check if the correction is needed also if rtlHasScrollBug + if (rtlCorrection === true) { + const diff = document.documentElement.scrollWidth - document.documentElement.clientWidth + left -= diff + right -= diff + } + + return { + left, + middle: left + (right - left) / 2, + right, + + top, + center: top + (bottom - top) / 2, + bottom, + + leftRev: right, + middleRev: left + (right - left) / 2, + rightRev: left, + + topRev: bottom, + centerRev: top + (bottom - top) / 2, + bottomRev: top, + + width, + height + } +} + +export function getTargetProps (el) { + let { width, height } = el.getBoundingClientRect() + + if (width === 0) { + width = el.offsetWidth + } + if (height === 0) { + height = el.offsetHeight + } + + return { + width, + height + } +} + +// cfg: { el, anchorEl, anchorOrigin, selfOrigin, offset, absoluteOffset, cover, fit, minHeight, minWidth, maxHeight, maxWidth, rtl } +export function setPosition (cfg) { + const extEl = cfg.el + + if (extEl.classList.contains('q-body--scroll-locked') === true) { + return + } + + let anchorProps, targetProps + + const + { documentElement, body, qScrollPrevented } = document, + intEl = extEl.children[0], + firstRender = intEl.style.opacity !== '1', + fixedPositioned = isFixedPositioned(cfg.anchorEl), + anchorOrigin = { ...cfg.anchorOrigin }, + selfOrigin = { ...cfg.selfOrigin }, + viewport = fixedPositioned === true && client.is.ios === true && window.visualViewport !== void 0 + ? window.visualViewport + : { offsetLeft: 0, offsetTop: qScrollPrevented === true ? documentElement.scrollTop : 0 }, + { vpLeft, apLeft } = computeScrollLeft(fixedPositioned, viewport, cfg.rtl), + vpTop = fixedPositioned === true + ? viewport.offsetTop + : (window.pageYOffset || window.scrollY || body.scrollTop || 0), + vpWidthProp = qScrollPrevented === true + ? 'offsetWidth' + : (fixedPositioned === true || isDocumentScrollableX() !== true ? 'clientWidth' : 'scrollWidth'), + vpHeightProp = qScrollPrevented === true + ? 'offsetHeight' + : (fixedPositioned === true || isDocumentScrollableY() !== true ? 'clientHeight' : 'scrollHeight'), + vpWidth = documentElement[vpWidthProp], + vpHeight = documentElement[vpHeightProp] + + if (cfg.absoluteOffset === void 0) { + anchorProps = getAnchorProps(cfg.anchorEl, cfg.cover === true ? [0, 0] : cfg.offset, cfg.rtl === true && fixedPositioned !== true) + } + else { + const + leftOffset = cfg.rtl === true && fixedPositioned !== true + ? documentElement.scrollWidth - documentElement.clientWidth + : 0, + { top: anchorTop, left: anchorLeft } = cfg.anchorEl.getBoundingClientRect(), + top = anchorTop + (cfg.cover === true ? 0 : cfg.absoluteOffset.top), + left = anchorLeft + (cfg.cover === true || cfg.fit === true ? 0 : cfg.absoluteOffset.left) - leftOffset + + anchorProps = { + left, + middle: left, + right: left, + + top, + center: top, + bottom: top, + + leftRev: left, + middleRev: left, + rightRev: left, + + topRev: top, + centerRev: top, + bottomRev: top, + + width: 0, + height: 0 + } + } + + const intElStyle = { + minWidth: cfg.minWidth || null, + minHeight: cfg.minHeight || null, + maxWidth: cfg.maxWidth || null, + maxHeight: cfg.maxHeight || null + } + + if (cfg.fit === true || cfg.cover === true) { + if (cfg.minWidth === null) { + intElStyle.minWidth = anchorProps.width + 'px' + } + if (cfg.cover === true && cfg.minHeight === null) { + intElStyle.minHeight = anchorProps.height + 'px' + } + } + + Object.assign(intEl.style, intElStyle) + + if (firstRender === true) { + const clone = intEl.cloneNode(true) + clone.classList.add('q-portal__clone') + body.appendChild(clone) + targetProps = getTargetProps(clone) + clone.remove() + } + else { + targetProps = getTargetProps(intEl) + } + + if (intElStyle.minWidth !== null && anchorProps.width > targetProps.width) { + intElStyle.minWidth = targetProps.width + 'px' + } + if (intElStyle.minHeight !== null && anchorProps.height > targetProps.height) { + intElStyle.minHeight = targetProps.height + 'px' + } + + const extElStyle = { + position: fixedPositioned === true ? 'fixed' : 'absolute', + + left: null, + right: null, + marginLeft: null, + marginRight: null, + maxWidth: null, + + top: null, + bottom: null, + marginTop: null, + marginBottom: null, + maxHeight: null + } + + const + halfWidth = Math.min(vpLeft + anchorProps[cfg.anchorOrigin.horizontal], vpWidth - apLeft - anchorProps[cfg.anchorOrigin.horizontal]) - SIDE_SPACE, + halfHeight = Math.min(vpTop + anchorProps[cfg.anchorOrigin.vertical], vpHeight - vpTop - anchorProps[cfg.anchorOrigin.vertical]) - SIDE_SPACE + + // horizontal repositioning + if ( + selfOrigin.horizontal === 'left' && + targetProps.width + SIDE_SPACE > vpWidth - apLeft - anchorProps[anchorOrigin.horizontal] && + vpLeft + anchorProps[anchorOrigin.horizontal + 'Rev'] > vpWidth - apLeft - anchorProps[anchorOrigin.horizontal] + ) { + selfOrigin.horizontal = 'right' + anchorOrigin.horizontal = anchorOrigin.horizontal + 'Rev' + } + else if ( + selfOrigin.horizontal === 'right' && + targetProps.width + SIDE_SPACE > vpLeft + anchorProps[anchorOrigin.horizontal] && + vpWidth - apLeft - anchorProps[anchorOrigin.horizontal + 'Rev'] > vpLeft + anchorProps[anchorOrigin.horizontal] + ) { + selfOrigin.horizontal = 'left' + anchorOrigin.horizontal = anchorOrigin.horizontal + 'Rev' + } + else if ( + selfOrigin.horizontal === 'middle' && + targetProps.width / 2 > halfWidth + ) { + selfOrigin.horizontal = vpLeft + anchorProps[anchorOrigin.horizontal] < vpWidth / 2 + ? 'left' + : 'right' + anchorOrigin.horizontal = selfOrigin.horizontal + } + + // horizontal styles + if (selfOrigin.horizontal === 'left') { + extElStyle.left = 0 + extElStyle.marginLeft = `${vpLeft + anchorProps[anchorOrigin.horizontal]}px` + extElStyle.maxWidth = `${vpWidth - vpLeft - anchorProps[anchorOrigin.horizontal] - SIDE_SPACE}px` + } + else if (selfOrigin.horizontal === 'right') { + extElStyle.right = '100%' + extElStyle.marginRight = `-${vpLeft + anchorProps[anchorOrigin.horizontal]}px` + extElStyle.maxWidth = `${vpLeft + anchorProps[anchorOrigin.horizontal] - SIDE_SPACE}px` + } + else { + extElStyle.right = '100%' + extElStyle.marginRight = `-${vpLeft + anchorProps[anchorOrigin.horizontal]}px` + } + + // vertical repositioning + if ( + selfOrigin.vertical === 'top' && + targetProps.height + SIDE_SPACE > vpHeight - vpTop - anchorProps[anchorOrigin.vertical] && + vpTop + anchorProps[anchorOrigin.vertical + 'Rev'] > vpHeight - vpTop - anchorProps[anchorOrigin.vertical] + ) { + selfOrigin.vertical = 'bottom' + anchorOrigin.vertical = anchorOrigin.vertical + 'Rev' + } + else if ( + selfOrigin.vertical === 'bottom' && + targetProps.height + SIDE_SPACE > vpTop + anchorProps[anchorOrigin.vertical] && + vpHeight - vpTop - anchorProps[anchorOrigin.vertical + 'Rev'] > vpTop + anchorProps[anchorOrigin.vertical] + ) { + selfOrigin.vertical = 'top' + anchorOrigin.vertical = anchorOrigin.vertical + 'Rev' + } + else if ( + selfOrigin.vertical === 'center' && + targetProps.height / 2 > halfHeight + ) { + selfOrigin.vertical = vpTop + anchorProps[anchorOrigin.vertical] < vpHeight / 2 + ? 'top' + : 'bottom' + anchorOrigin.vertical = selfOrigin.vertical + } + + // vertical styles + if (selfOrigin.vertical === 'top') { + extElStyle.top = 0 + extElStyle.marginTop = `${vpTop + anchorProps[anchorOrigin.vertical]}px` + extElStyle.maxHeight = `${vpHeight - vpTop - anchorProps[anchorOrigin.vertical] - SIDE_SPACE}px` + } + else if (selfOrigin.vertical === 'bottom') { + extElStyle.bottom = '100%' + extElStyle.marginBottom = `-${vpTop + anchorProps[anchorOrigin.vertical]}px` + extElStyle.maxHeight = `${vpTop + anchorProps[anchorOrigin.vertical] - SIDE_SPACE}px` + } + else { + extElStyle.bottom = '100%' + extElStyle.marginBottom = `-${vpTop + anchorProps[anchorOrigin.vertical]}px` + } + + if (selfOrigin.horizontal === 'middle' && selfOrigin.vertical === 'center') { + intElStyle.transform = 'translate(50%, 50%)' + extElStyle.transformOrigin = '100% 100%' + } + else if (selfOrigin.horizontal === 'middle') { + intElStyle.transform = 'translateX(50%)' + extElStyle.transformOrigin = '100% 50%' + } + else if (selfOrigin.vertical === 'center') { + intElStyle.transform = 'translateY(50%)' + extElStyle.transformOrigin = '50% 100%' + } + else { + intElStyle.transform = null + extElStyle.transformOrigin = '50% 50%' + } + + Object.assign(extEl.style, extElStyle) + Object.assign(intEl.style, intElStyle) + + if (firstRender === true) { + requestAnimationFrame(() => { + intEl.style.opacity = 1 + }) + } +} diff --git a/src/utils/private/selection.js b/src/utils/private/selection.js new file mode 100644 index 00000000000..ccaac2251ea --- /dev/null +++ b/src/utils/private/selection.js @@ -0,0 +1,17 @@ +import Platform from '../../plugins/Platform.js' + +export function clearSelection () { + if (window.getSelection !== void 0) { + const selection = window.getSelection() + if (selection.empty !== void 0) { + selection.empty() + } + else if (selection.removeAllRanges !== void 0) { + selection.removeAllRanges() + Platform.is.mobile !== true && selection.addRange(document.createRange()) + } + } + else if (document.selection !== void 0) { + document.selection.empty() + } +} diff --git a/src/utils/private/slot.js b/src/utils/private/slot.js new file mode 100644 index 00000000000..0b0d8864eaf --- /dev/null +++ b/src/utils/private/slot.js @@ -0,0 +1,36 @@ +export function slot (vm, slotName, otherwise) { + return vm.$scopedSlots[slotName] !== void 0 + ? vm.$scopedSlots[slotName]() + : otherwise +} + +export function uniqueSlot (vm, slotName, otherwise) { + return vm.$scopedSlots[slotName] !== void 0 + ? [].concat(vm.$scopedSlots[slotName]()) + : otherwise +} + +/** + * Source definitely exists, + * so it's merged with the possible slot + */ +export function mergeSlot (source, vm, slotName) { + return vm.$scopedSlots[slotName] !== void 0 + ? source.concat(vm.$scopedSlots[slotName]()) + : source +} + +/** + * Merge with possible slot, + * even if source might not exist + */ +export function mergeSlotSafely (source, vm, slotName) { + if (vm.$scopedSlots[slotName] === void 0) { + return source + } + + const slot = vm.$scopedSlots[slotName]() + return source !== void 0 + ? source.concat(slot) + : slot +} diff --git a/src/utils/private/sort.js b/src/utils/private/sort.js new file mode 100644 index 00000000000..109eb5e4dac --- /dev/null +++ b/src/utils/private/sort.js @@ -0,0 +1,20 @@ +export function sortString (a, b) { + if (typeof a !== 'string') { + throw new TypeError('The value for sorting must be a String') + } + return a.localeCompare(b) +} + +export function sortNumber (a, b) { + return a - b +} + +export function sortDate (a, b) { + return (new Date(a)) - (new Date(b)) +} + +export function sortBoolean (a, b) { + return a && !b + ? -1 + : (!a && b ? 1 : 0) +} diff --git a/src/utils/private/touch.js b/src/utils/private/touch.js new file mode 100644 index 00000000000..03a044b0d69 --- /dev/null +++ b/src/utils/private/touch.js @@ -0,0 +1,52 @@ +const directions = [ 'left', 'right', 'up', 'down', 'horizontal', 'vertical' ] + +const modifiersAll = { + left: true, + right: true, + up: true, + down: true, + horizontal: true, + vertical: true, + all: true +} + +export function getModifierDirections (mod) { + const dir = {} + + directions.forEach(direction => { + if (mod[direction]) { + dir[direction] = true + } + }) + + if (Object.keys(dir).length === 0) { + return modifiersAll + } + + if (dir.horizontal === true) { + dir.left = dir.right = true + } + if (dir.vertical === true) { + dir.up = dir.down = true + } + if (dir.left === true && dir.right === true) { + dir.horizontal = true + } + if (dir.up === true && dir.down === true) { + dir.vertical = true + } + if (dir.horizontal === true && dir.vertical === true) { + dir.all = true + } + + return dir +} + +export function shouldStart (evt, ctx) { + return ctx.event === void 0 && + evt.target !== void 0 && + evt.target.draggable !== true && + typeof ctx.handler === 'function' && + evt.target.nodeName.toUpperCase() !== 'INPUT' && + (evt.qClonedBy === void 0 || evt.qClonedBy.indexOf(ctx.uid) === -1) +} diff --git a/src/utils/private/vm.js b/src/utils/private/vm.js new file mode 100644 index 00000000000..0f6a10974d7 --- /dev/null +++ b/src/utils/private/vm.js @@ -0,0 +1,22 @@ +export function getVmOfNode (el) { + for (let node = el; node !== null; node = node.parentNode) { + // node.__vue__ can be null if the instance was destroyed + if (node.__vue__ !== void 0) { + return node.__vue__ + } + } +} + +export function isVmChildOf (childVm, parentVm) { + // node.__vue__ can be null if the instance was destroyed + if (childVm === null || parentVm === null) { + return null + } + + for (let vm = childVm; vm !== void 0; vm = vm.$parent) { + if (vm === parentVm) { + return true + } + } + return false +} diff --git a/src/utils/private/web-storage.js b/src/utils/private/web-storage.js new file mode 100644 index 00000000000..fc2c35534c2 --- /dev/null +++ b/src/utils/private/web-storage.js @@ -0,0 +1,137 @@ +import { noop } from '../event.js' +import { isDate, isRegexp } from '../is.js' + +function encode (value) { + if (isDate(value) === true) { + return '__q_date|' + value.toUTCString() + } + if (isRegexp(value) === true) { + return '__q_expr|' + value.source + } + if (typeof value === 'number') { + return '__q_numb|' + value + } + if (typeof value === 'boolean') { + return '__q_bool|' + (value ? '1' : '0') + } + if (typeof value === 'string') { + return '__q_strn|' + value + } + if (typeof value === 'function') { + return '__q_strn|' + value.toString() + } + if (value === Object(value)) { + return '__q_objt|' + JSON.stringify(value) + } + + // hmm, we don't know what to do with it, + // so just return it as is + return value +} + +function decode (value, reviverFn) { + const length = value.length + + if (length < 9) { + // then it wasn't encoded by us + return value + } + + const type = value.substr(0, 8) + const source = value.substring(9) + + switch (type) { + case '__q_date': + return new Date(source) + + case '__q_expr': + return new RegExp(source) + + case '__q_numb': + return Number(source) + + case '__q_bool': + return Boolean(source === '1') + + case '__q_strn': + return '' + source + + case '__q_objt': + return JSON.parse(source, reviverFn) + + default: + // hmm, we reached here, we don't know the type, + // then it means it wasn't encoded by us, so just + // return whatever value it is + return value + } +} + +export function getEmptyStorage () { + const getVal = () => null + + return { + has: () => false, + getLength: () => 0, + getItem: getVal, + getIndex: getVal, + getKey: getVal, + getAll: () => {}, + getAllKeys: () => [], + set: noop, + remove: noop, + clear: noop, + isEmpty: () => true + } +} + +export function getStorage (type) { + const + webStorage = window[type + 'Storage'], + get = (key, reviverFn) => { + const item = webStorage.getItem(key) + return item + ? decode(item, reviverFn) + : null + } + + return { + has: (key, reviverFn) => webStorage.getItem(key, reviverFn) !== null, + getLength: () => webStorage.length, + getItem: get, + getIndex: (index, reviverFn) => { + return index < webStorage.length + ? get(webStorage.key(index), reviverFn) + : null + }, + getKey: index => { + return index < webStorage.length + ? webStorage.key(index) + : null + }, + getAll: reviverFn => { + let key + const result = {}, len = webStorage.length + + for (let i = 0; i < len; i++) { + key = webStorage.key(i) + result[key] = get(key, reviverFn) + } + + return result + }, + getAllKeys: () => { + const result = [], len = webStorage.length + + for (let i = 0; i < len; i++) { + result.push(webStorage.key(i)) + } + + return result + }, + set: (key, value) => { webStorage.setItem(key, encode(value)) }, + remove: key => { webStorage.removeItem(key) }, + clear: () => { webStorage.clear() }, + isEmpty: () => webStorage.length === 0 + } +} diff --git a/src/utils/private/web-storage.json b/src/utils/private/web-storage.json new file mode 100644 index 00000000000..18158715879 --- /dev/null +++ b/src/utils/private/web-storage.json @@ -0,0 +1,238 @@ +{ + "meta": { + "docsUrl": "https://v1.quasar.dev/quasar-plugins/web-storage" + }, + + "methods": { + "has": { + "desc": "Check if storage item exists", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ "userId" ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Value in that key", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value", + "__exemption": [ "examples" ] + } + } + }, + "returns": { + "type": "Boolean", + "desc": "Does the item exists or not?" + } + }, + + "getLength": { + "desc": "Get storage number of entries", + "returns": { + "type": "Number", + "desc": "Number of entries", + "examples": [ 21 ] + } + }, + + "getItem": { + "tsType": "WebStorageGetItemMethodType", + "desc": "Get a storage item value", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ "userId" ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Value in that key", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value", + "__exemption": [ "examples" ] + } + } + }, + "returns": { + "type": [ "Date", "RegExp", "Number", "Boolean", "Function", "Object", "Array", "String", "null" ], + "desc": "Storage item value", + "examples": [ "john12", 702 ] + } + }, + + "getIndex": { + "tsType": "WebStorageGetIndexMethodType", + "desc": "Get the storage item value at specific index", + "params": { + "index": { + "type": "Number", + "desc": "Entry index", + "required": true, + "examples": [ 5 ] + }, + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Value in that key", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value", + "__exemption": [ "examples" ] + } + } + }, + "returns": { + "type": [ "Number", "null" ], + "desc": "Storage item index", + "examples": [ 7 ] + } + }, + + "getKey": { + "tsType": "WebStorageGetKeyMethodType", + "desc": "Get the storage key at specific index", + "params": { + "index": { + "type": "Number", + "desc": "Entry index", + "required": true, + "examples": [ 5 ] + } + }, + "returns": { + "type": [ "String", "null" ], + "desc": "Storage key", + "examples": [ "userId" ] + }, + "addedIn": "v1.9.4" + }, + + "getAll": { + "desc": "Retrieve all items in storage", + "params": { + "reviverFn": { + "type": "Function", + "desc": "Transformation function to be used for objects - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter", + "params": { + "key": { + "type": "Any", + "desc": "Key in object", + "__exemption": [ "examples" ] + }, + "value": { + "type": "Any", + "desc": "Value in that key", + "__exemption": [ "examples" ] + } + }, + "returns": { + "type": "Any", + "desc": "Transformed value", + "__exemption": [ "examples" ] + } + } + }, + "returns": { + "type": "Object", + "desc": "Object syntax: item name as Object key and its value", + "examples": [ + "{ userId: 'jon12', timesLoggedIn: 14 }" + ] + } + }, + + "getAllKeys": { + "tsType": "WebStorageGetAllKeysMethodType", + "desc": "Retrieve all keys in storage", + "returns": { + "type": "Array", + "desc": "Storage keys (Array of Strings)", + "examples": [ "['userId', 'password']" ] + }, + "addedIn": "v1.9.4" + }, + + "set": { + "desc": "Set item in storage", + "params": { + "key": { + "type": "String", + "desc": "Entry key", + "required": true, + "examples": [ "userId" ] + }, + + "value": { + "type": [ "Date", "RegExp", "Number", "Boolean", "Function", "Object", "Array", "String", "null" ], + "desc": "Entry value", + "required": true, + "examples": [ "john12" ] + } + } + }, + + "remove": { + "desc": "Remove a storage item", + "params": { + "key": { + "type": "String", + "desc": "Storage key", + "required": true, + "examples": [ "userId" ] + } + } + }, + + "clear": { + "desc": "Remove everything from the storage" + }, + + "isEmpty": { + "desc": "Determine if storage has any items", + "returns": { + "type": "Boolean", + "desc": "Tells if storage is empty or not" + } + } + } +} diff --git a/src/utils/run-sequential-promises.js b/src/utils/run-sequential-promises.js new file mode 100644 index 00000000000..679d09bb8a4 --- /dev/null +++ b/src/utils/run-sequential-promises.js @@ -0,0 +1,115 @@ + +function parsePromises (sequentialPromises) { + const isList = Array.isArray(sequentialPromises) + + if (isList === true) { + const totalJobs = sequentialPromises.length + return { + isList, + totalJobs, + resultAggregator: Array(totalJobs).fill(null) + } + } + + const resultKeys = Object.keys(sequentialPromises) + const resultAggregator = {} + resultKeys.forEach(keyName => { resultAggregator[ keyName ] = null }) + + return { + isList, + totalJobs: resultKeys.length, + resultAggregator, + resultKeys + } +} + +/** + * Run a list of Promises sequentially, optionally on multiple threads. + * + * @param {*} sequentialPromises - Array of Functions or Object with Functions as values + * Array of Function form: [ (resultAggregator: Array) => Promise, ... ] + * Object form: { [key: string]: (resultAggregator: object) => Promise, ... } + * @param {*} opts - Optional options Object + * Object form: { threadsNumber?: number, abortOnFail?: boolean } + * Default: { threadsNumber: 1, abortOnFail: true } + * When configuring threadsNumber AND using http requests, be + * aware of the maximum threads that the hosting browser + * supports (usually 5); any number of threads above that + * won't add any real benefits + * @returns Promise | Object> + * With opts.abortOnFail set to true (which is default): + * When sequentialPromises param is Array: + * The Promise resolves with an Array of Objects of the following form: + * [ { key: number, status: 'fulfilled', value: any }, ... ] + * The Promise rejects with an Object of the following form: + * { key: number, status: 'rejected', reason: Error, resultAggregator: array } + * When sequentialPromises param is Object: + * The Promise resolves with an Object of the following form: + * { [key: string]: { key: string, status: 'fulfilled', value: any }, ... } + * The Promise rejects with an Object of the following form: + * { key: string, status: 'rejected', reason: Error, resultAggregator: object } + * With opts.abortOnFail set to false: + * The Promise is never rejected (no catch() needed) + * The Promise resolves with: + * An Array of Objects (when sequentialPromises param is also an Array) of the following form: + * [ { key: number, status: 'fulfilled', value: any } | { status: 'rejected', reason: Error }, ... ] + * An Object (when sequentialPromises param is also an Object) of the following form: + * { [key: string]: { key: string, status: 'fulfilled', value: any } | { key: string, status: 'rejected', reason: Error }, ... } + */ +export default function runSequentialPromises ( + sequentialPromises, + { threadsNumber = 1, abortOnFail = true } = {} +) { + let jobIndex = -1, hasAborted = false + + const { isList, totalJobs, resultAggregator, resultKeys } = parsePromises(sequentialPromises) + + const getPromiseThread = () => new Promise((resolve, reject) => { + function runNextPromise () { + const currentJobIndex = ++jobIndex + + if (hasAborted === true || currentJobIndex >= totalJobs) { + resolve() + return + } + + const key = isList === true ? currentJobIndex : resultKeys[ currentJobIndex ] + + sequentialPromises[ key ](resultAggregator) + .then(value => { + if (hasAborted === true) { + resolve() + return // early exit + } + + resultAggregator[ key ] = { key, status: 'fulfilled', value } + + // timeout so it doesn't interfere with the .catch() below + setTimeout(runNextPromise) + }) + .catch(reason => { + if (hasAborted === true) { + resolve() + return // early exit + } + + const result = { key, status: 'rejected', reason } + resultAggregator[ key ] = result + + if (abortOnFail === true) { + hasAborted = true + reject({ ...result, resultAggregator }) + return // early exit + } + + // timeout so no interference + setTimeout(runNextPromise) + }) + } + + runNextPromise() + }) + + const threads = Array(threadsNumber).fill(getPromiseThread()) + return Promise.all(threads).then(() => resultAggregator) +} diff --git a/src/utils/scroll.js b/src/utils/scroll.js new file mode 100644 index 00000000000..1cca02d2e69 --- /dev/null +++ b/src/utils/scroll.js @@ -0,0 +1,273 @@ +import { isSSR } from '../plugins/Platform.js' +import { css, getElement } from './dom.js' +import { noop } from '../utils/event.js' + +const scrollTargets = isSSR === true + ? [] + : [ null, document, document.body, document.scrollingElement, document.documentElement ] + +let rtlHasScrollBugStatus +export function rtlHasScrollBug () { + if (isSSR === true) { + return false + } + + if (rtlHasScrollBugStatus === void 0) { + const scroller = document.createElement('div') + const spacer = document.createElement('div') + + Object.assign(scroller.style, { + direction: 'rtl', + width: '1px', + height: '1px', + overflow: 'auto' + }) + + Object.assign(spacer.style, { + width: '1000px', + height: '1px' + }) + + scroller.appendChild(spacer) + document.body.appendChild(scroller) + scroller.scrollLeft = -1000 + + rtlHasScrollBugStatus = scroller.scrollLeft >= 0 + + scroller.remove() + } + + return rtlHasScrollBugStatus +} + +export function getScrollTarget (el, targetEl) { + let target = getElement(targetEl) + + if (target === null) { + if (el !== Object(el) || typeof el.closest !== 'function') { + return window + } + + target = el.closest('.scroll,.scroll-y,.overflow-auto,.q-dialog__inner > div') + } + + return scrollTargets.includes(target) + ? window + : target +} + +export function getScrollHeight (el) { + return (el === window ? document.body : el).scrollHeight +} + +export function getScrollWidth (el) { + return (el === window ? document.body : el).scrollWidth +} + +export function getVerticalScrollPosition (scrollTarget) { + return scrollTarget === window + ? window.pageYOffset || window.scrollY || document.body.scrollTop || 0 + : scrollTarget.scrollTop +} + +export const getScrollPosition = getVerticalScrollPosition + +export function getHorizontalScrollPosition (scrollTarget) { + return scrollTarget === window + ? window.pageXOffset || window.scrollX || document.body.scrollLeft || 0 + : scrollTarget.scrollLeft +} + +export function animVerticalScrollTo (el, to, duration = 0 /* , prevTime */) { + const prevTime = arguments[ 3 ] === void 0 ? performance.now() : arguments[ 3 ] + const pos = getVerticalScrollPosition(el) + + if (duration <= 0) { + if (pos !== to) { + setScroll(el, to) + } + return + } + + requestAnimationFrame(nowTime => { + const frameTime = nowTime - prevTime + const newPos = pos + (to - pos) / Math.max(frameTime, duration) * frameTime + setScroll(el, newPos) + if (newPos !== to) { + animVerticalScrollTo(el, to, duration - frameTime, nowTime) + } + }) +} + +export const animScrollTo = animVerticalScrollTo + +export function animHorizontalScrollTo (el, to, duration = 0 /* , prevTime */) { + const prevTime = arguments[ 3 ] === void 0 ? performance.now() : arguments[ 3 ] + const pos = getHorizontalScrollPosition(el) + + if (duration <= 0) { + if (pos !== to) { + setHorizontalScroll(el, to) + } + return + } + + requestAnimationFrame(nowTime => { + const frameTime = nowTime - prevTime + const newPos = pos + (to - pos) / Math.max(frameTime, duration) * frameTime + setHorizontalScroll(el, newPos) + if (newPos !== to) { + animHorizontalScrollTo(el, to, duration - frameTime, nowTime) + } + }) +} + +function setScroll (scrollTarget, offset) { + if (scrollTarget === window) { + window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, offset) + return + } + scrollTarget.scrollTop = offset +} + +function setHorizontalScroll (scrollTarget, offset) { + if (scrollTarget === window) { + window.scrollTo(offset, window.pageYOffset || window.scrollY || document.body.scrollTop || 0) + return + } + scrollTarget.scrollLeft = offset +} + +export function setVerticalScrollPosition (scrollTarget, offset, duration) { + if (duration) { + animVerticalScrollTo(scrollTarget, offset, duration) + return + } + setScroll(scrollTarget, offset) +} + +export const setScrollPosition = setVerticalScrollPosition + +export function setHorizontalScrollPosition (scrollTarget, offset, duration) { + if (duration) { + animHorizontalScrollTo(scrollTarget, offset, duration) + return + } + setHorizontalScroll(scrollTarget, offset) +} + +let size +export function getScrollbarWidth () { + if (size !== void 0) { + return size + } + + const + inner = document.createElement('p'), + outer = document.createElement('div') + + css(inner, { + width: '100%', + height: '200px' + }) + css(outer, { + position: 'absolute', + top: '0px', + left: '0px', + visibility: 'hidden', + width: '200px', + height: '150px', + overflow: 'hidden' + }) + + outer.appendChild(inner) + + document.body.appendChild(outer) + + const w1 = inner.offsetWidth + outer.style.overflow = 'scroll' + let w2 = inner.offsetWidth + + if (w1 === w2) { + w2 = outer.clientWidth + } + + outer.remove() + size = w1 - w2 + + return size +} + +export function hasScrollbar (el, onY = true) { + if (!el || el.nodeType !== Node.ELEMENT_NODE) { + return false + } + + return onY + ? ( + el.scrollHeight > el.clientHeight && ( + el.classList.contains('scroll') || + el.classList.contains('overflow-auto') || + [ 'auto', 'scroll' ].includes(window.getComputedStyle(el)['overflow-y']) + ) + ) + : ( + el.scrollWidth > el.clientWidth && ( + el.classList.contains('scroll') || + el.classList.contains('overflow-auto') || + [ 'auto', 'scroll' ].includes(window.getComputedStyle(el)['overflow-x']) + ) + ) +} + +let executeWhenScrollableList = [] + +export function executeWhenScrollable (fn) { + if (document.qScrollPrevented !== true) { + fn() + + return noop + } + + if (executeWhenScrollableList.indexOf(fn) === -1) { + executeWhenScrollableList.push(fn) + } + + return () => { + const index = executeWhenScrollableList.indexOf(fn) + if (index > -1) { + executeWhenScrollableList = executeWhenScrollableList.splice(index, 1) + } + } +} + +export function triggerIsScrollable () { + const list = executeWhenScrollableList.slice() + executeWhenScrollableList = [] + list.forEach(fn => { fn() }) +} + +export default { + getScrollTarget, + + getScrollHeight, + getScrollWidth, + + getScrollPosition, + getVerticalScrollPosition, + getHorizontalScrollPosition, + rtlHasScrollBug, + + animScrollTo, + animVerticalScrollTo, + animHorizontalScrollTo, + + setScrollPosition, + setVerticalScrollPosition, + setHorizontalScrollPosition, + + executeWhenScrollable, + + getScrollbarWidth, + hasScrollbar +} diff --git a/src/utils/throttle.js b/src/utils/throttle.js new file mode 100644 index 00000000000..3b7176d0dda --- /dev/null +++ b/src/utils/throttle.js @@ -0,0 +1,13 @@ +export default function (fn, limit = 250) { + let wait = false, result + + return function (/* ...args */) { + if (wait === false) { + wait = true + setTimeout(() => { wait = false }, limit) + result = fn.apply(this, arguments) + } + + return result + } +} diff --git a/src/utils/uid.js b/src/utils/uid.js new file mode 100644 index 00000000000..7ea43633e3a --- /dev/null +++ b/src/utils/uid.js @@ -0,0 +1,72 @@ +/** + * Based on the work of https://github.com/jchook/uuid-random + */ + +let + buf, + bufIdx = 0 +const hexBytes = new Array(256) + +// Pre-calculate toString(16) for speed +for (let i = 0; i < 256; i++) { + hexBytes[i] = (i + 0x100).toString(16).substr(1) +} + +// Use best available PRNG +const randomBytes = (() => { + // Node & Browser support + const lib = typeof crypto !== 'undefined' + ? crypto + : ( + typeof window !== 'undefined' + ? window.msCrypto // IE11 + : void 0 + ) + + if (lib !== void 0) { + if (lib.randomBytes !== void 0) { + return lib.randomBytes + } + if (lib.getRandomValues !== void 0) { + return n => { + var bytes = new Uint8Array(n) + lib.getRandomValues(bytes) + return bytes + } + } + } + + return n => { + const r = [] + for (let i = n; i > 0; i--) { + r.push(Math.floor(Math.random() * 256)) + } + return r + } +})() + +// Buffer random numbers for speed +// Reduce memory usage by decreasing this number (min 16) +// or improve speed by increasing this number (try 16384) +const BUFFER_SIZE = 4096 + +export default function () { + // Buffer some random bytes for speed + if (buf === void 0 || (bufIdx + 16 > BUFFER_SIZE)) { + bufIdx = 0 + buf = randomBytes(BUFFER_SIZE) + } + + const b = Array.prototype.slice.call(buf, bufIdx, (bufIdx += 16)) + b[6] = (b[6] & 0x0f) | 0x40 + b[8] = (b[8] & 0x3f) | 0x80 + + return hexBytes[b[0]] + hexBytes[b[1]] + + hexBytes[b[2]] + hexBytes[b[3]] + '-' + + hexBytes[b[4]] + hexBytes[b[5]] + '-' + + hexBytes[b[6]] + hexBytes[b[7]] + '-' + + hexBytes[b[8]] + hexBytes[b[9]] + '-' + + hexBytes[b[10]] + hexBytes[b[11]] + + hexBytes[b[12]] + hexBytes[b[13]] + + hexBytes[b[14]] + hexBytes[b[15]] +} diff --git a/src/vue-plugin.js b/src/vue-plugin.js new file mode 100644 index 00000000000..abb0ff46a6f --- /dev/null +++ b/src/vue-plugin.js @@ -0,0 +1,13 @@ +import install from './install.js' +import { version } from '../package.json' +import lang from './lang.js' +import iconSet from './icon-set.js' +import ssrUpdate from './ssr-update.js' + +export default { + version, + install, + lang, + iconSet, + ssrUpdate +} diff --git a/wrappers/index.js b/wrappers/index.js new file mode 100644 index 00000000000..ee6bf47ceca --- /dev/null +++ b/wrappers/index.js @@ -0,0 +1,27 @@ +// Functions in this file are no-op, +// they just take a callback function and return it +// They're used to apply typings to the callback +// parameters and return value when using Quasar with TypeScript +// We need these in `ui` folder to make `quasar/wrapper` import work, +// but they are useful only for Quasar CLI projects +// They are typed via module augmentation by `@quasar/app` + +module.exports.boot = function (callback) { + return callback +} + +module.exports.configure = function (callback) { + return callback +} + +module.exports.preFetch = function (callback) { + return callback +} + +module.exports.route = function (callback) { + return callback +} + +module.exports.store = function (callback) { + return callback +}